← Commit history

v1.6.5: host-app detect block (AD 1.9.47) + fusion_readiness verb + onboarding/CLAUDE updates

John Lauer ·1003a794ed ·3mo ago ·parent 231c7cb
8 files changed +75−12
BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.6.4\ No newline at end of file+1.6.5\ No newline at end of file
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.5 - 2026-06-30++- **Host-app DETECTION declared (AD >=1.9.47).** bridge.json gains a `detect` block+  (`hostApp: "Fusion 360"`, Windows `%LOCALAPPDATA%\Autodesk\webdeploy\production\*\FusionLauncher.exe`+  mirroring `fusion_detect.py`, macOS `/Applications/Autodesk Fusion[ 360].app`) so AD DETECTS Fusion+  (the user's host app) instead of trying to install it. The status path fast-fails cleanly when+  Fusion isn't running.+- **NEW `fusion_readiness` verb** - a fast `{installed, running, ready, hostApp, bridgeVersion}` check+  that never launches Fusion; the `fusion-onboarding` skill now opens with it (and AD's+  `bridge_readiness`). CLAUDE.md notes AD now auto-installs Python in the background, so the deploy+  trap's spawn case is handled by AD.+ ## 1.6.4 - 2026-06-29  - **Folder hygiene, part 2: `make_3d_package` no longer saveAs-es to the project ROOT either.** v1.6.3
CLAUDE.md+3−1
@@ -55,7 +55,9 @@ there. The exact, watched-it-happen release sequence (AFTER publishing to the wi    - **⚠️ TRAP (hit 2026-06-29): `python`/`py` are NOT on the box's shell PATH.** AD spawns the bridge      with its OWN python, so `python install_addin.py` via `shell_execute` returns "Python was not      found" / errors with empty output (same Windows-Store-alias stub that makes a bridge fail to-     respawn). `cmd /c copy` and `robocopy` also fight you on the spaces in `Adom Desktop` / `Autodesk+     respawn). (AD >=1.9.47 now AUTO-INSTALLS Python in the background when Fusion is present but Python+     is missing - so the bridge-SPAWN case is handled by AD; but a `python` you invoke yourself via+     `shell_execute` still won't resolve, so the file-copy deploy below remains the way.) `cmd /c copy` and `robocopy` also fight you on the spaces in `Adom Desktop` / `Autodesk      Fusion 360` (robocopy exit 16). **The reliable deploy that needs NO shell + NO python:** copy the      changed add-in file(s) with the BRIDGE's own file verbs - `read_file {path:<cache>/addin/AdomBridge/      commands/<f>.py}` then `write_file {path:<Roaming>/.../AddIns/AdomBridge/commands/<f>.py, content}`
adom-bridge-fusion-manifest.json+5−5
@@ -1,13 +1,13 @@ {   "manifest_version": 1,   "name": "fusion360",-  "version": "1.6.4",-  "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.4/adom-bridge-fusion-v1.6.4.zip",-  "sha256": "7d12ea97123991de94de6a76983391cba3589cdcfe4be025597cb54e6db4335a",-  "size": 290714,+  "version": "1.6.5",+  "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.5/adom-bridge-fusion-v1.6.5.zip",+  "sha256": "e8e4ba61c714a2615cd68b249a3298a6c6e09b1febc738795df1824cb35f3928",+  "size": 292304,   "verbPrefixes": [     "fusion_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-06-29T21:30:00Z"+  "released_at": "2026-06-30T12:30:00Z" }\ No newline at end of file
bridge.json+15−2
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "fusion360",   "displayName": "Autodesk Fusion 360",-  "version": "1.6.4",+  "version": "1.6.5",   "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://github.com/adom-inc/adom-desktop-fusion-bridge",   "author": "Adom Inc.",@@ -20,6 +20,7 @@   ],   "verbs": [     "fusion_describe",+    "fusion_readiness",     "fusion_start",     "fusion_kill",     "fusion_stop",@@ -92,5 +93,17 @@   "releasedAt": "2026-06-26T06:00:00Z",   "statusVerb": "fusion_get_app_state",   "updateManifestUrl": "https://wiki.adom.inc/api/v1/pages/adom-desktop-fusion-bridge/files/adom-bridge-fusion-manifest.json",-  "healthEndpoint": "/status"+  "healthEndpoint": "/status",+  "detect": {+    "hostApp": "Fusion 360",+    "paths": {+      "windows": [+        "%LOCALAPPDATA%\\Autodesk\\webdeploy\\production\\*\\FusionLauncher.exe"+      ],+      "macos": [+        "/Applications/Autodesk Fusion.app",+        "/Applications/Autodesk Fusion 360.app"+      ]+    }+  } }\ No newline at end of file
describe.py+2
@@ -24,6 +24,8 @@ _T = [      {"name": "optional str (default: active)"}, {"success": "bool"}, 30, None, False, {}),     ("fusion_get_app_state", "Current app state: running, active document, workspace, isElectronics. The poll/status verb for long-running calls.",      {}, {"activeDocument": "str", "activeWorkspace": "str", "isElectronics": "bool"}, 20, None, False, {}),+    ("fusion_readiness", "FAST readiness check (does NOT launch Fusion): is the Fusion host app installed + running + the bridge ready to drive? AD DETECTS Fusion (never installs it) via bridge.json 'detect', and auto-installs Python if missing (AD >=1.9.47). Call this before driving Fusion; if installed-but-not-running, fusion_start. Pairs with AD's bridge_readiness.",+     {}, {"installed": "bool", "running": "bool", "ready": "bool", "hostApp": "str", "bridgeVersion": "str"}, 15, None, False, {}),      # ── Cloud search & files (APS) ─────────────────────────────────────────     ("fusion_aps_status", "APS state: configured, signed in, token live, never-charge meter.",
server.py+26
@@ -560,8 +560,34 @@ def _handle_relocate_recovery(fusion_info: dict, args: dict) -> dict:     }  +def _handle_fusion_readiness(fusion_info: dict, args: dict) -> dict:+    """FAST readiness check for the AI: is the Fusion host app present + running + the bridge ready?+    Does NOT launch Fusion (fast-fails when it's not running). AD DETECTS Fusion (never installs it)+    via bridge.json 'detect', and auto-installs Python if missing (AD >=1.9.47) - this verb just+    reports state. Pairs with AD's bridge_readiness."""+    installed = bool(fusion_info.get("installed"))+    running = _is_fusion_running() if installed else False+    ready = installed and running+    return {+        "success": True,+        "hostApp": "Fusion 360",+        "installed": installed,+        "running": running,+        "ready": ready,+        "bridgeVersion": BRIDGE_VERSION,+        "_hint": (+            "READY - drive Fusion (fusion_open_lbr / build_library_3d / etc.)." if ready else+            ("Fusion is INSTALLED but not running - call fusion_start (blocks until the add-in is ready), then retry."+             if installed else+             "Fusion 360 is NOT installed. AD detects (never installs) the host app via bridge.json 'detect'; "+             "ask the user to install Fusion from autodesk.com. (Python is auto-installed by AD if missing.)")+        ),+    }++ COMMAND_HANDLERS = {     "describe": lambda fi, args: describe.handle_describe(args),+    "readiness": _handle_fusion_readiness,     "open_design": handle_open_design,     "close": handle_close_fusion,  # deprecated alias - use stop (graceful) / kill (force)     "stop": handle_fusion_stop,    # graceful: close docs + WM_CLOSE, NO force-kill
skills/fusion-onboarding/SKILL.md+11−3
@@ -13,9 +13,17 @@ work — nobody has to pay to get value. All laptop steps run via `adom-desktop --target <laptop> shell_execute` / `run_script` / `send_files`. Drive the user's own machine; don't ask them to do steps you can do. -## Step 0 — Detect that Fusion is missing-`fusion_start` (or `fusion_addin_status`) returns `errorCode: fusion_not_installed`, or-`fusion_detect` shows `installed:false`. That's the trigger to onboard.+## Step 0 — Check readiness (fast, never launches Fusion)+Call **`fusion_readiness`** (or AD's **`bridge_readiness`**) FIRST - it reports `installed` / `running`+/ `ready` without launching anything:+- `installed:false` → onboard (the steps below).+- `installed:true, running:false` → **no onboarding needed**, just `fusion_start`, then drive.+- `ready:true` → drive Fusion directly.++NOTE (AD >=1.9.47): AD **DETECTS** the Fusion host app (via the bridge.json `detect` block - the+`%LOCALAPPDATA%\Autodesk\webdeploy\production\*\FusionLauncher.exe` path) but **NEVER installs it** -+Fusion is the user's host app. AD also **auto-installs Python** in the background if it's missing. So+onboarding is only about Fusion itself + the Autodesk login + deploying the add-in.  ## Step 1 — Download the Fusion installer The installer is the small "Fusion Client Downloader" (it streams the full app during install).