← Commit history

v1.6.25: automate sign-in (nbrowser-first) + notifyUser payload

John Lauer ·2c0a599199 ·3mo ago ·parent 76edefc
7 files changed +37−13
BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.6.24\ No newline at end of file+1.6.25\ No newline at end of file
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" }\ No newline at end of file
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)),         }