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.27: scope needsSignin detection to Fusion-process window (fix Edge-tab false positive)
5 files changed
+39−19
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.6.26+1.6.27
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.27 - 2026-07-05++- **Fixed a false-positive in 1.6.26's new `needsSignin` readiness detection** (caught live before+ release to any consumer). 1.6.26 derived `needsSignin` from `classify_launch_dialogs()`, which+ enumerates ALL top-level windows and so matched a stray Edge **browser tab** titled "Sign in -+ Autodesk" - reporting `needsSignin:true` while Fusion was actually signed in and drivable. Now the+ detection is scoped to the **Fusion-process window** (`get_fusion_window_info` title/`mainEnabled`)+ and is only evaluated when the **add-in isn't responding** (a responding add-in = past sign-in =+ drivable), so a leftover browser tab can never trigger it. Verified on ADOMBASELINE: signed-in+ Fusion now reports `ready:true`.+ ## 1.6.26 - 2026-07-05 - **Adopted AD 1.9.84's direct API (disc #78): the bridge now calls `notify_user` ITSELF, cross-AD.**
adom-bridge-fusion-manifest.json+5−5@@ -1,13 +1,13 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.6.26",- "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.26/adom-bridge-fusion-v1.6.26.zip",- "sha256": "b39d0c27ffda6c5c254e2c9728e40e1422ea4c35ab9034049a386d0ebad7c6b8",- "size": 323405,+ "version": "1.6.27",+ "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.27/adom-bridge-fusion-v1.6.27.zip",+ "sha256": "73e9591b4d902770827920f1d059a232609945401b2524de6bf8d842137ad4c9",+ "size": 323919, "verbPrefixes": [ "fusion_" ], "healthEndpoint": "/status",- "released_at": "2026-07-05T12:20:55Z"+ "released_at": "2026-07-05T12:24:43Z" }
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.6.26",+ "version": "1.6.27", "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.",
server.py+21−12@@ -767,28 +767,37 @@ def _handle_fusion_readiness(fusion_info: dict, args: dict) -> dict: running = _is_fusion_running() if installed else False installing = (not installed) and _installer_running() + # The add-in only serves once Fusion is PAST sign-in (its HTTP server runs on+ # Fusion's main thread, which the sign-in modal blocks). So a responding add-in+ # is the definitive "signed in + drivable" signal.+ addin_status = _check_addin_status(timeout=1.0) if running else None+ addin_ok = addin_status is not None+ # Fusion can be RUNNING yet not drivable: the first-run Autodesk sign-in modal # ("Signing in - Autodesk Fusion" / "Welcome to Fusion") blocks the main thread, # so the add-in never serves and every modeling verb hangs. The old code reported- # ready:True here ("READY - drive Fusion") purely on installed+running, which was- # a lie during sign-in. Detect it and downgrade to needsSignin so the caller- # drives the sign-in instead of firing a verb into a wall.+ # ready:True here purely on installed+running, which was a lie during sign-in.+ # Detect it from the FUSION-PROCESS window title/enabled state - NOT+ # classify_launch_dialogs, which scans ALL top-level windows and false-matches a+ # stray Edge "Sign in - Autodesk" BROWSER tab (caught live 2026-07-05). Only+ # considered when the add-in is NOT responding (a responding add-in => signed in). needs_signin = False- if running:+ if running and not addin_ok: try:- needs_signin = any(d.get("category") == "signin_required"- for d in classify_launch_dialogs())+ finfo = get_fusion_window_info() or {}+ _t = (finfo.get("title") or "").lower()+ needs_signin = ("signing in" in _t or "welcome to fusion" in _t+ or ("sign in - autodesk" in _t and "fusion" in _t)) except Exception: needs_signin = False ready = installed and running and not needs_signin - # When Fusion is up, also check the add-in isn't STALE (issue #55) so a fresh- # readiness call surfaces the mismatch instead of a later verb failing silently.+ # When Fusion is up + signed in, also check the add-in isn't STALE (issue #55) so+ # a fresh readiness call surfaces the mismatch instead of a later verb failing+ # silently. Reuse the add-in status already fetched above (no second probe). stale_info = {}- if running and not needs_signin:- addin_status = _check_addin_status(timeout=1.0)- if addin_status is not None:- stale_info = _addin_staleness(addin_status.get("version"))+ if addin_ok:+ stale_info = _addin_staleness(addin_status.get("version")) if needs_signin: hint = ("Fusion is RUNNING but stuck at the first-run Autodesk SIGN-IN (main UI blocked, "