chore(release): v0.2.6 — Settings UX, empty pool by default, CMF port check
- Settings: "?" help tooltips on every option; router key auto-probes the connection right after saving (no more hanging "unavailable") - Local models card reworked into 3 clear steps (install cortiq → add model → run locally); removed the hand-entered .cmf path / pool-id fields — models are added via the Import tab and the managed server registers them - Fresh install ships an EMPTY model pool; the local .cmf is auto-registered by the managed CMF server, so it needs no static [[models]] entry - New: port-availability check — GET /admin/api/cmf/port + "Check port" button with next-free-port suggestion. bind()+connect() probe so Docker-proxied / dual-stack ports (e.g. 8081) are correctly detected as occupied - /admin/api/cmf now reports the serving model + port; card shows "▶ serving …" - On-demand runtime install: POST /admin/api/cmf/install
This commit is contained in:
+16
-1
@@ -119,7 +119,7 @@ async fn latest_crates_version() -> Option<String> {
|
||||
}
|
||||
|
||||
/// `<bin> --version` → the trailing version token (e.g. "cortiq 0.1.2" → "0.1.2").
|
||||
fn installed_version(bin: &str) -> Option<String> {
|
||||
pub(crate) fn installed_version(bin: &str) -> Option<String> {
|
||||
let out = std::process::Command::new(bin).arg("--version").output().ok()?;
|
||||
if !out.status.success() {
|
||||
return None;
|
||||
@@ -152,6 +152,21 @@ async fn cargo_install(force: bool) -> Result<(), String> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Install/upgrade `cortiq-cli` from crates.io on demand (the admin "Install
|
||||
/// cortiq" button). Runs in the background; progress + result land in the CMF
|
||||
/// status log, and `installed_version` is refreshed on success.
|
||||
pub async fn install_now(rt: Arc<CmfRuntime>, bin: String) {
|
||||
rt.log("installing cortiq-cli from crates.io (this compiles — a few minutes)…");
|
||||
match cargo_install(true).await {
|
||||
Ok(()) => {
|
||||
let v = installed_version(&bin);
|
||||
rt.status.lock().unwrap().installed_version = v.clone();
|
||||
rt.log(format!("installed cortiq-cli {}", v.as_deref().unwrap_or("?")));
|
||||
}
|
||||
Err(e) => rt.fail(format!("cargo install cortiq-cli failed: {e}")),
|
||||
}
|
||||
}
|
||||
|
||||
/// Spawn `cortiq serve <model> --host <host> --port <port>`; the child is killed
|
||||
/// when its handle is dropped (i.e. when the gateway shuts down).
|
||||
fn spawn_serve(cfg: &CmfCfg) -> Result<Child, String> {
|
||||
|
||||
Reference in New Issue
Block a user