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.42: seat-resolve retries until verified gone + priority over stale add-in port
5 files changed
+46−20
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.6.41+1.6.42
CHANGELOG.md+12@@ -3,6 +3,18 @@ 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.42 - 2026-07-06++- **Seat-resolve now RETRIES until the dialog is verified gone, and takes priority over a stale add-in+ port** (the bug that made 1.6.40 look solved when it wasn't - John caught it live). Two fixes: (1) the+ first UIA `Continue` Invoke on a mid-render dialog silently NO-OPs, so the launch loop now re-invokes+ every tick until `find_licensing_dialog` no longer sees it, instead of clicking once; (2) the loop+ and `fusion_readiness` no longer trust the add-in probe while the seat dialog is up - a STALE add-in+ server from a prior killed instance keeps port 8774 answering, which made the loop break early and+ readiness report `licensingDialog:false`/`ready:*` while the dialog sat right there on screen. Seat+ dialog now blocks `ready` whenever detected. Verified: full verb battery passes on the laptop+ (modeling, EPG+etch->STEP 234KB, export 234KB, dark mode) once the seat dialog is auto-cleared.+ ## 1.6.41 - 2026-07-06 - **Instant-minimize: disable the minimize ANIMATION during launch** so the focus-guard's minimize is
adom-bridge-fusion-manifest.json+5−5@@ -1,13 +1,13 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.6.41",- "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.41/adom-bridge-fusion-v1.6.41.zip",- "sha256": "7d23f4362e609d733d59a49bc1be69e5515c6df81d6c87b1fd52012121ecdcf6",- "size": 340280,+ "version": "1.6.42",+ "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.42/adom-bridge-fusion-v1.6.42.zip",+ "sha256": "19b1f290128591fed964570ab8f57be5eefcd2b04287e274672d4ad08a6d5104",+ "size": 340876, "verbPrefixes": [ "fusion_" ], "healthEndpoint": "/status",- "released_at": "2026-07-06T13:16:31Z"+ "released_at": "2026-07-06T13:47:22Z" }
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.6.41",+ "version": "1.6.42", "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+27−13@@ -210,21 +210,30 @@ def _handle_launch(fusion_info: dict, args: dict) -> dict: _seat_clicks = 0 addin_ok = False while _t.time() < _deadline:+ # SEAT/LICENSING dialog takes PRIORITY over the add-in probe (fix, caught live+ # 2026-07-06): a STALE add-in port from a prior instance can answer while the+ # CURRENT Fusion sits blocked behind the seat dialog - so we must NOT break on+ # the add-in while the dialog is up. And the first UIA Invoke on a mid-render+ # dialog silently NO-OPs, so keep invoking 'Continue' EVERY tick until+ # find_licensing_dialog no longer sees it (verified gone), not just once.+ try:+ _lic = find_licensing_dialog()+ except Exception:+ _lic = None+ if _lic:+ if _seat_clicks < 10:+ if _resolve_seat_via_uia(_lic):+ _seat_clicks += 1+ _t.sleep(1.5)+ continue+ # No seat dialog -> is the add-in actually serving? (ground truth for drivable) if _probe_addin(timeout=1.5): addin_ok = True break try:- _lic = find_licensing_dialog()+ dismiss_recovery_dialog() except Exception:- _lic = None- if _lic and _seat_clicks < 5:- if _resolve_seat_via_uia(_lic):- _seat_clicks += 1- else:- try:- dismiss_recovery_dialog()- except Exception:- pass+ pass _t.sleep(2.5) if not addin_ok:@@ -834,14 +843,19 @@ def _handle_fusion_readiness(fusion_info: dict, args: dict) -> dict: ready = installed and running and addin_ok and not needs_signin # SEAT/LICENSING dialog blocking the launch - detected DETERMINISTICALLY by owning- # process + dialog size (not the "Fusion360" title). Reported so a caller knows the- # block is a seat conflict (fusion_start auto-reclaims it), not a generic hang.+ # process + dialog size (not the "Fusion360" title). Checked WHENEVER running, not+ # only when the add-in is silent (fix 2026-07-06): a STALE add-in port from a prior+ # instance answers while the CURRENT Fusion sits blocked behind the seat dialog, so+ # gating on `not addin_ok` false-negatived `licensingDialog` while the dialog sat+ # right there on the user's screen. licensing = False- if running and not addin_ok:+ if running: try: licensing = find_licensing_dialog() is not None except Exception: licensing = False+ if licensing:+ ready = False # a seat/licensing dialog blocking the UI is never "ready" # Fusion applying an AUTO-UPDATE (two+ webdeploy builds) crash-restarts itself every # ~30-60s, so a verb intermittently sees running:false. That is NOT a crash or a