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.24: classify already_open + signin_required launch dialogs
7 files changed
+58−18
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.6.23+1.6.24
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.24 - 2026-07-04++- **Two more launch dialogs are now classified IN CODE (caught live on the clean-VM drill):**+ "Fusion is already open / Multiple instances are not supported" (category `already_open` -+ auto-dismissed via Cancel; a singleton is never double-launched) and the first-run Autodesk+ "Welcome to Fusion / Signing in" window (category `signin_required` - SURFACED, never auto-closed,+ with a `_hint` to notify + drive Sign In / Open Product without touching credentials). Added an+ explicit `AUTO_DISMISS_CATEGORIES` set so only benign acks get WM_CLOSE'd; decisions + sign-in are+ returned as `needsUserDecision`/`needsSignin`. Fixes a latent bug where sign-in would have been+ auto-closed.+ ## 1.6.23 - 2026-07-04 - **NEW `fusion_install_fusion` - install Fusion for the user with ZERO approval-gated shell.** The
adom-bridge-fusion-manifest.json+5−5@@ -1,13 +1,13 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.6.23",- "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.23/adom-bridge-fusion-v1.6.23.zip",- "sha256": "bc25141b660d02172c07f679f1c8910e7532030092504774585bc9c39ff59275",- "size": 315255,+ "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, "verbPrefixes": [ "fusion_" ], "healthEndpoint": "/status",- "released_at": "2026-07-04T22:40:00Z"+ "released_at": "2026-07-04T23:30:00Z" }
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.6.23",+ "version": "1.6.24", "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.",
handlers/dialog_classify.py+23−1@@ -85,6 +85,25 @@ _RULES = [ "Confirmation of a chosen 'suspend the OTHER machine's Fusion'. Only click Continue if the user " "ALREADY chose suspend; otherwise Go Back and ASK. Never auto-confirm a seat action."), + # A second Fusion launch while one is already running - the correct action is+ # CANCEL (Fusion is a singleton; a 2nd instance is never wanted by automation).+ (("fusion is already open", "multiple instances are not supported",+ "launch another fusion instance"),+ "already_open",+ "Fusion is ALREADY running - a second launch was attempted. Click CANCEL (never Launch): "+ "Fusion is a singleton and the running instance is the one to drive. This usually means a "+ "prior fusion_stop/kill did not fully clear the old process before relaunch."),++ # First-run Autodesk sign-in (the 'Welcome to Fusion / Sign In' window, and the+ # browser callback 'You're signed in ... Open Product'). NOT auto-dismissable -+ # it needs the user's login; drive the buttons (Sign In / Open Product) via UIA+ # but NEVER auto-fill credentials.+ (("welcome to fusion", "signing in - autodesk", "sign in - autodesk"),+ "signin_required",+ "Autodesk sign-in needed (first run). NOTIFY the user, drive the 'Sign In' button (desktop_ui_"+ "click), fetch any email OTP via adom-google, and after the browser shows \"You're signed in\" "+ "click its 'Open Product' button - but NEVER auto-enter the password/2FA. See fusion-aps-signin."),+ # webdeploy launch failure - an INCOMPLETE/stale production folder (missing # FusionLauncher.exe.ini). Benign to dismiss; means you launched the wrong hash. (("error launching streamed application", "missing or incomplete", "please re-install",@@ -98,8 +117,11 @@ _RULES = [ # Categories that require a USER decision — the launch code must NOT auto-dismiss # these; it surfaces them + fires a notify_user + asks. DECISION_CATEGORIES = {"session_conflict_decision", "session_suspend_confirm"}+# Categories the launch code MAY auto-dismiss (a benign ack; WM_CLOSE == Cancel/OK).+# Everything else (decisions, sign-in) is SURFACED, never auto-closed.+AUTO_DISMISS_CATEGORIES = {"launch_error", "already_open"} # Launch/setup categories enumerated across ALL top-level windows (not just Fusion).-_LAUNCH_CATEGORIES = DECISION_CATEGORIES | {"launch_error"}+_LAUNCH_CATEGORIES = DECISION_CATEGORIES | {"launch_error", "already_open", "signin_required"} def _category_for_title(title: str):
page.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-desktop-fusion-bridge",- "version": "1.6.23",+ "version": "1.6.24", "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+16−9@@ -33,7 +33,7 @@ from handlers.fusion_ui import ( close_window, get_fusion_window_info, )-from handlers.dialog_classify import classify_blocking_dialogs, classify_launch_dialogs, close_dialog_bg+from handlers.dialog_classify import classify_blocking_dialogs, classify_launch_dialogs, close_dialog_bg, AUTO_DISMISS_CATEGORIES from install_addin import install as install_addin import aps import describe@@ -141,19 +141,26 @@ def _handle_launch(fusion_info: dict, args: dict) -> dict: # returned for the AI to notify_user + ASK - never auto-picked. launch_dialogs = classify_launch_dialogs() for _dlg in launch_dialogs:- if not _dlg.get("decision"):- close_dialog_bg(_dlg.get("hwnd")) # benign ack (incomplete-webdeploy launch error)- _decisions = [d for d in launch_dialogs if d.get("decision")]- if _decisions:+ if _dlg.get("category") in AUTO_DISMISS_CATEGORIES:+ close_dialog_bg(_dlg.get("hwnd")) # benign ack (WM_CLOSE == Cancel/OK)+ # Surface anything needing the USER: seat DECISIONS + first-run SIGN-IN. Never+ # auto-close these (a WM_CLOSE would kill the sign-in window).+ _needs_user = [d for d in launch_dialogs+ if d.get("decision") or d.get("category") == "signin_required"]+ if _needs_user:+ _signin = any(d.get("category") == "signin_required" for d in _needs_user) return { "success": True, "needsUserDecision": True,+ "needsSignin": _signin, "setupDialogs": launch_dialogs, "resolvedPath": fusion_info.get("exe_path", ""),- "_hint": ("A licensing/seat DECISION dialog is up during launch (e.g. 'Active Sessions "- "Exceeded'). Do NOT auto-pick - the options affect the user's OTHER machine. "- "Fire a notify_user, ASK the user which option they want, then click it with "- "desktop_ui_click. " + " ".join(d["resolution"] for d in _decisions)),+ "_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 "")+ + " ".join(d["resolution"] for d in _needs_user)), } _RELAY_BUDGET = 50 # keep total handler time under AD's ~60s relay cap