← Commit history

dashboard 1.9.158: dock webview ownership

John Lauer ·f55aa8d320 ·1mo ago ·parent 4a5a2dc
4 files changed +25−3
dashboard/Cargo.lock+1−1
@@ -4,7 +4,7 @@ version = 4  [[package]] name = "fusion-dashboard"-version = "1.9.157"+version = "1.9.158" dependencies = [  "serde_json", ]
dashboard/Cargo.toml+1−1
@@ -1,6 +1,6 @@ [package] name = "fusion-dashboard"-version = "1.9.157"+version = "1.9.158" edition = "2021"  [dependencies]
dashboard/src/main.rs+22
@@ -1360,6 +1360,28 @@ fn serve(port: u16, target: String, ai_thread: String, print_url: bool) {     ok(&format!("fusion-dashboard v{} serving on port {} (target {})", VERSION, port,         if app.target.is_empty() { "auto" } else { &app.target })); +    // DOCK WEBVIEW OWNERSHIP (project-1d dock-bar contract, John-blessed model, 2026-08-23):+    // the dock pre-opens a named tab and hands us its name in ADOM_DOCK_WEBVIEW. Once WE are+    // serving, the tab is OURS: take it over and re-navigate it to our URL on EVERY (re)start,+    // so the dashboard follows our server with no dock involvement (restart the server, the+    // same tab renavigates). Env-gated (skip on a hand-run serve with the var unset), uses the+    // same env-aware URL we print (direct 127.0.0.1 on WSL, VS Code proxy in a cloud container),+    // and best-effort: a missing adom-cli or a closed tab never blocks or crashes serving.+    if let Ok(tab) = std::env::var("ADOM_DOCK_WEBVIEW") {+        if !tab.trim().is_empty() {+            let url = url_for(port);+            std::thread::spawn(move || {+                std::thread::sleep(Duration::from_millis(800)); // let accept() come up first+                let _ = Command::new("adom-cli")+                    .args(["hydrogen", "webview", "open-or-refresh",+                           "--name", &tab, "--url", &url])+                    .stdout(std::process::Stdio::null())+                    .stderr(std::process::Stdio::null())+                    .status();+            });+        }+    }+     // 24h idle reaper (app-creator lifecycle): a dock click respawns us, so exiting when     // nobody has used the app for a day keeps containers free of zombie servers.     {
install.sh+1−1
@@ -21,7 +21,7 @@ echo "Installed fusion-bridge skills: $(ls "$PKG_DIR/skills" 2>/dev/null | tr '\ # binary (the three-artifact pattern: bridge zip -> ab, THIS pkg -> container skills + # this download, page media -> wiki). Per the wiki's PKG_VS_RELEASE policy, binaries are # platform-tagged RELEASE assets, never tarball content - the installer fetches them.-DASH_VERSION="1.9.157"+DASH_VERSION="1.9.158" DASH_URL="https://wiki.adom.inc/download/adom/fusion-bridge/${DASH_VERSION}/fusion-dashboard" DEST="" if [ -w /usr/local/bin ]; then DEST=/usr/local/bin