← Commit history
BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.9.91+1.9.92
adom-bridge-fusion-manifest.json+4−4
@@ -1,10 +1,10 @@ {     "manifest_version": 1,     "name": "fusion360",-    "version": "1.9.91",-    "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.106/adom-bridge-fusion-v1.9.91.zip",-    "sha256": "18ffb7e842fb07e2f1d2978e38228c30c780079d6919f70d423a67d3a8175567",-    "size": 428772,+    "version": "1.9.92",+    "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.107/adom-bridge-fusion-v1.9.92.zip",+    "sha256": "74d91113f9eb1b6ffe03a78a90c530632d6eb5a5525cbd708825ffd95cabdadb",+    "size": 429187,     "verbPrefixes": [         "fusion_"     ],
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "fusion360",   "displayName": "Autodesk Fusion 360",-  "version": "1.9.91",+  "version": "1.9.92",   "description": "Drive Autodesk Fusion 360 from the cloud: launch Fusion, electronics board layout, design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers/BOM/CPL), fast APS server-indexed cloud search plus browse/recent/file-info/versions, cloud file download/upload and folder creation, and in-app parametric modeling (fusion_run_modeling_script). Never-charge: APS calls are capped to the free tier.",   "homepage": "https://wiki.adom.inc/adom/fusion-bridge",   "author": "Adom Inc.",
dashboard/Cargo.toml+1−1
@@ -1,6 +1,6 @@ [package] name = "fusion-dashboard"-version = "1.9.106"+version = "1.9.107" edition = "2021"  [dependencies]
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.106"+DASH_VERSION="1.9.107" 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
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "fusion-bridge",-  "version": "1.9.106",+  "version": "1.9.107",   "type": "app",   "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.",   "dependencies": {
page.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "fusion-bridge",-  "version": "1.9.106",+  "version": "1.9.107",   "type": "app",   "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.",   "dependencies": {
server.py+31−12
@@ -580,18 +580,37 @@ def _handle_launch(fusion_info: dict, args: dict) -> dict:         _el = _t0.time() - _warm_start         if addin_ok:             _tm.record("launch", _el, "warm")-        return {-            "success": True,-            "output": "Fusion 360 is already running.",-            "addinConnected": addin_ok,-            "alreadyRunning": True,-            "startKind": "warm",-            "progress": _tm.terminal_block("launch", _warm_start,-                                           "Fusion is already running - reusing it",-                                           start_kind="warm", failed=not addin_ok),-            "timings": _tm.summary().get("launch"),-            "resolvedPath": fusion_info.get("exe_path", ""),-        }+        # ⚠️ success:true WITH addinConnected:false IS A LIE (page issue #39). This verb's+        # contract says it blocks until the add-in is ready, and fusion_get_app_state's hint+        # tells callers to rely on that - so a caller does the documented thing, reads+        # success:true, retries its real command and fails. The field they check said yes+        # while the field that mattered said no.+        #+        # DOCTRINE: the add-in only loads AT LAUNCH, so "running but no add-in" is not+        # something more waiting can fix - it needs a restart, and the bridge performs it+        # rather than returning a cheerful false positive. Fall through to the cold path.+        if not addin_ok:+            print("[Fusion Bridge] warm start found NO add-in - restarting Fusion so it loads "+                  "(never reporting success with addinConnected:false, issue #39)")+            try:+                handle_fusion_kill(fusion_info, {})   # a non-serving add-in will not close politely+                _t0.sleep(6)+            except Exception:+                pass+            fusion_info = detect_fusion()+        else:+            return {+                "success": True,+                "output": "Fusion 360 is already running.",+                "addinConnected": addin_ok,+                "alreadyRunning": True,+                "startKind": "warm",+                "progress": _tm.terminal_block("launch", _warm_start,+                                               "Fusion is already running - reusing it",+                                               start_kind="warm", failed=False),+                "timings": _tm.summary().get("launch"),+                "resolvedPath": fusion_info.get("exe_path", ""),+            }      # Relocate any crash recovery files BEFORE launching Fusion.     # This prevents the "Recovered Documents" dialog from appearing at all.