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
v1.6.25: automate sign-in (nbrowser-first) + notifyUser payload
7 files changed
+37−13
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.6.24+1.6.25
CHANGELOG.md+11@@ -3,6 +3,17 @@ All notable changes to the Adom Desktop Fusion 360 bridge, newest first. Canonical: https://wiki.adom.inc/adom/adom-desktop-fusion-bridge · GitHub backup: `adom-inc/adom-desktop-fusion-bridge` +## 1.6.25 - 2026-07-04++- **Sign-in is now AUTOMATED-FIRST, with the path baked into the verb's `_hint` + a `notifyUser`+ payload (John's directive).** On `needsSignin`, `fusion_start` now tells the AI to: (1) check+ `nbrowser_readiness` and drive the Autodesk OAuth via the native-browser extension over CDP when+ it's on the same browser Fusion opened sign-in in (fast + headless - beats the ~2min request+ expiry that defeats background `desktop_ui_click`, the failure seen live on the VM drill); (2) else+ `desktop_ui_click` the Sign In / Open Product buttons FAST; (3) ONLY if both fail, relay the new+ structured `notifyUser:{title,body,level}` payload to `notify_user`. The goal is: automate+ everything, pull the user in (via a toast) only for a true wall - never auto-enter password/2FA.+ ## 1.6.24 - 2026-07-04 - **Two more launch dialogs are now classified IN CODE (caught live on the clean-VM drill):**
SKILL.md+1@@ -25,6 +25,7 @@ Branch on the stable `errorCode`, never the prose: | `running:false` / `fusion_not_running` | installed, not launched | `fusion_start` (returns when the add-in is ready, or `stillLaunching` on a slow first launch) | | `stillLaunching:true` (fusion_start) | first launch, add-in not up yet (can take 2-4 min) | do NOT re-call `fusion_start`; POLL `fusion_readiness` every ~10s until `ready:true` | | `installed:false` / `host_app_not_installed` (AD >=1.9.79, + a `hostApp` field) | no Fusion host app | OFFER to install, then **`fusion_install_fusion`** (no shell approval; elevation-aware, streams the free trial) -> poll `fusion_readiness` (`installing:true`) until `installed:true` -> `fusion_start`. Details: [fusion-onboarding](skills/fusion-onboarding/SKILL.md) |+| `needsSignin:true` (fusion_start) | first-run Autodesk sign-in | AUTOMATE it: check `nbrowser_readiness` - if the native-browser extension drives the browser Fusion opened sign-in in, drive the OAuth via CDP (fast, beats the ~2min request expiry); else `desktop_ui_click` the Sign In / Open Product buttons FAST; only if both fail relay the response's `notifyUser` payload to `notify_user`. NEVER auto-enter password/2FA | | `addinStale:true` / `addin_stale` | Fusion runs an OLD add-in that never re-synced (silent-failure risk) | `fusion_stop` then `fusion_start` — the bridge re-syncs the add-in from cache on start (Fusion must be CLOSED) | | `bridge_restarting` + `stillRunning:true` (AD ≥1.9.77) | the bridge is respawning after a `bridge_install` | NEVER a not-installed/fatal signal: poll `fusion_readiness` until `ready:true`, then retry. Read-only verbs (`fusion_readiness`/`fusion_describe`/`fusion_get_app_state`) forward straight through even mid-respawn — no sleep-and-recheck hacks needed | | `blockingDialogs:[…]` | a modal is blocking the add-in | dismiss in the BACKGROUND, then the op auto-resumes |
adom-bridge-fusion-manifest.json+5−5@@ -1,13 +1,13 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.6.24",- "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.24/adom-bridge-fusion-v1.6.24.zip",- "sha256": "236f015eedcbf82adaea9bd6c7fc99426a0d64da464ef0343b0a92e4964c7052",- "size": 316269,+ "version": "1.6.25",+ "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.25/adom-bridge-fusion-v1.6.25.zip",+ "sha256": "e126d687b368b70e7e8425eacb8da0644931b64fbf152539b1f4bbcb433bca73",+ "size": 317211, "verbPrefixes": [ "fusion_" ], "healthEndpoint": "/status",- "released_at": "2026-07-04T23:30:00Z"+ "released_at": "2026-07-05T00:30:00Z" }
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.6.24",+ "version": "1.6.25", "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/adom-desktop-fusion-bridge", "author": "Adom Inc.",
page.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-desktop-fusion-bridge",- "version": "1.6.24",+ "version": "1.6.25", "type": "app", "description": "Drive Autodesk Fusion 360 from the cloud via Adom Desktop: 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 with browse/recent/versions, cloud download/upload and folder creation, and in-app parametric modeling. Never-charge: APS calls are capped to the free tier.", "dependencies": {},
server.py+17−5@@ -155,11 +155,23 @@ def _handle_launch(fusion_info: dict, args: dict) -> dict: "needsSignin": _signin, "setupDialogs": launch_dialogs, "resolvedPath": fusion_info.get("exe_path", ""),- "_hint": (("First-run Autodesk SIGN-IN is required: notify_user, then drive the "- "'Sign In' button + the browser 'Open Product' via desktop_ui_click; NEVER "- "auto-enter password/2FA. " if _signin else "")- + ("A licensing/seat DECISION dialog is up - do NOT auto-pick; notify_user + ASK. "- if any(d.get("decision") for d in _needs_user) else "")+ "notifyUser": ({"title": "Fusion needs your Autodesk sign-in",+ "body": "Fusion is at the sign-in screen. Complete it (or I will drive it) "+ "so I can keep going.", "level": "warning"} if _signin else+ {"title": "Fusion launch needs a decision",+ "body": "A licensing dialog needs your choice.", "level": "warning"}),+ "_hint": (("First-run Autodesk SIGN-IN required. AUTOMATE IT FIRST, don't punt to the user: "+ "(1) check `nbrowser_readiness` - if the native-browser extension is ready AND "+ "driving the SAME browser Fusion opened sign-in in (nbrowser_list_tabs shows an "+ "autodesk.com/signin/idmgr tab), drive the OAuth via CDP (activate that tab, "+ "click 'Allow'/'Open Product' in the DOM) - fast + headless, beats the "+ "short-lived request expiry that defeats desktop_ui_click. (2) If nbrowser is "+ "NOT on that browser, fall back to desktop_ui_click on the 'Sign In'/'Open "+ "Product' buttons, done FAST (the request expires in ~2 min). (3) ONLY if both "+ "fail, relay the `notifyUser` payload above to notify_user and ask for one "+ "click. NEVER auto-enter the password/2FA. " if _signin else "")+ + ("A licensing/seat DECISION dialog is up - do NOT auto-pick; relay `notifyUser` "+ "to notify_user + ASK. " if any(d.get("decision") for d in _needs_user) else "") + " ".join(d["resolution"] for d in _needs_user)), }