app
Fusion - the Fusion 360 Bridge
Public Made by Adomby adom
Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.
← Commit history
Update 9 file(s)
9 files changed
+35−12
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.9.104+1.9.105
adom-bridge-fusion-manifest.json+4−4@@ -1,10 +1,10 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.9.104",- "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.119/adom-bridge-fusion-v1.9.104.zip",- "sha256": "83a2a963ef55fe9aea7e0a77d280b82a1ce649793bb3bf0250808073a3ff2670",- "size": 440526,+ "version": "1.9.105",+ "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.120/adom-bridge-fusion-v1.9.105.zip",+ "sha256": "766da0cbb4887b49a9388d2f7b3ff8a1038d769bb05fb7e972530e0d2a5bf4f6",+ "size": 441042, "verbPrefixes": [ "fusion_" ],
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.9.104",+ "version": "1.9.105", "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.119"+version = "1.9.120" edition = "2021" [dependencies]
handlers/dialog_classify.py+9@@ -101,6 +101,15 @@ _RULES = [ # Autodesk SEAT conflict — a DECISION dialog. The options suspend / shut down # Fusion on the user's OTHER machine (risking its unsaved work), so NEVER # auto-pick: notify + ASK the user which option they want.+ # "Session Suspended" - the OTHER side of the seat conflict: another box took the seat+ # and THIS box's session is suspended. The remedy is 'Check again' (regrab), never+ # 'Shut Down' (signs this box out). John, 2026-08-21: "always regrab the session."+ (("session suspended", "suspended this session", "suspended by:"),+ "session_suspended_regrab",+ "This box's Autodesk session was SUSPENDED by another machine taking the seat. The "+ "bridge clicks 'Check again' to regrab it (background UIA). Never click 'Shut Down' - "+ "that signs this box out."),+ (("active sessions exceeded", "more active sessions", "more sessions running than are allowed", "sessions running than are allowed"), "session_conflict_decision",
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.119"+DASH_VERSION="1.9.120" 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.119",+ "version": "1.9.120", "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.119",+ "version": "1.9.120", "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+16−2@@ -180,8 +180,22 @@ def _resolve_seat_via_uia(dlg: dict) -> bool: hwnd = dlg.get("hwnd") if not hwnd or not ad_client.available(): return False- res = ad_client.call("desktop_ui_click", {"hwnd": hwnd, "name": "Continue"}, timeout=4)- return bool(res and (res.get("success") or res.get("status") == "ok"))+ # TWO variants of the seat dialog, opposite buttons (John, 2026-08-21: "when you see+ # this dialog, always regrab the session"):+ # "Active Sessions Exceeded" -> Continue (take the seat; Suspend is pre-selected)+ # "Session Suspended" -> Check again (RESTORE this box's suspended session -+ # the other box took the seat and this one must ask+ # for it back; Shut Down would sign this box out)+ # Try Continue first (the common variant), then Check again. desktop_ui_click on a+ # button that does not exist is a cheap no-op, so probing both costs nothing.+ for btn in ("Continue", "Check again"):+ res = ad_client.call("desktop_ui_click", {"hwnd": hwnd, "name": btn}, timeout=4)+ if res and (res.get("success") or res.get("status") == "ok"):+ if btn == "Check again":+ print("[Fusion Bridge] seat: clicked 'Check again' to REGRAB the suspended "+ "session (Session Suspended variant)")+ return True+ return False except Exception: return False