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
1.6.47: dialog-shaped seat detection (exclude Fusion side panels)
5 files changed
+31−13
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.6.46+1.6.47
CHANGELOG.md+10@@ -3,6 +3,16 @@ 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.47 - 2026-07-06++- **Tightened seat-dialog detection to DIALOG-SHAPED owned popups (fixes a false positive from+ 1.6.46).** 1.6.46 matched any owned popup wider than 300px, but Fusion's own side panels (Data+ Panel / browser rail, ~300x785) are owned popups too - so the moment a document was open,+ `find_licensing_dialog()` flagged a drivable Fusion as "blocked by a seat dialog" and readiness+ reported ready:false forever (caught live on winvm: get_app_state succeeded while readiness lied).+ The seat modal is always WIDE (823x262 / 1235x527); side panels are narrow. Detection now requires+ width >= 480, so the panels are excluded and the real dialog still matches.+ ## 1.6.46 - 2026-07-06 - **Fixed the seat/licensing dialog going UNDETECTED (John caught it live on winvm).** The
adom-bridge-fusion-manifest.json+5−5@@ -1,13 +1,13 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.6.46",- "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.46/adom-bridge-fusion-v1.6.46.zip",- "sha256": "806b9b6dc88b289aa23fc6dbebd7da33944045dfd150808f12a0de69b4152278",- "size": 345325,+ "version": "1.6.47",+ "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.47/adom-bridge-fusion-v1.6.47.zip",+ "sha256": "9cfa11c55d99baef1c268a4a13cf69a338eb4af53a8ed5ffe13541e16ec7b3cd",+ "size": 345799, "verbPrefixes": [ "fusion_" ], "healthEndpoint": "/status",- "released_at": "2026-07-06T14:51:53Z"+ "released_at": "2026-07-06T15:05:00Z" }
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.6.46",+ "version": "1.6.47", "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.",
fusion_detect.py+14−6@@ -434,15 +434,23 @@ def find_licensing_dialog(): 823x262 "Suspend Remote Session" confirm variant, so readiness reported the dialog gone while it sat there blocking (John caught it live, 2026-07-06). A size-based fallback is kept for safety in case owner detection ever returns 0.- Returns the window dict (with 'owner'), or None."""+ Returns the window dict (with 'owner'), or None.++ SHAPE matters, not just ownership: Fusion's own side panels (Data Panel, browser, the+ comments rail) are ~300px-wide OWNED popups too, so an owned-only match false-fires the+ moment a document is open and reads a drivable Fusion as 'blocked' (caught live on winvm+ 2026-07-06, right after this over-broad owned check shipped). The seat/sign-in modal is+ always WIDE (823x262 'Suspend Remote Session', 1235x527 'Active Sessions Exceeded') - far+ wider than any side panel - so we require dialog PROPORTIONS: width >= 480 (excludes the+ narrow panels), height >= 180 (excludes toolbar strips), and smaller than the maximized+ main app.""" wins = family_windows()- # Primary: an OWNED popup (has an owner window) that is bigger than a tooltip.+ # Primary: an OWNED popup that is DIALOG-SHAPED (wide modal, not a narrow side panel). for w in wins:- if w.get("owner") and w["width"] >= 300 and w["height"] >= 120:+ ww, hh = w["width"], w["height"]+ if w.get("owner") and 480 <= ww <= 1500 and 180 <= hh <= 900: return w- # Fallback (owner==0 for all): a dialog-sized family window that is NOT the- # maximized main app (>1500 wide / >900 tall) and not a tooltip. Height floor 180- # so the 262px confirm still matches.+ # Fallback (owner==0 for all - owner detection failed): same shape gate, no owner req. for w in wins: ww, hh = w["width"], w["height"] if 480 <= ww <= 1500 and 180 <= hh <= 900: