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
Update 105 file(s)
10 files changed
+58−25
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.9.337+1.9.338
adom-bridge-fusion-manifest.json+4−4@@ -1,10 +1,10 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.9.337",- "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.337/adom-bridge-fusion-v1.9.337.zip",- "sha256": "81133169acd9a22d0d70c4ea504b688ec6296a1f4ce7cc7f9adf935af3c5336c",- "size": 608661,+ "version": "1.9.338",+ "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.338/adom-bridge-fusion-v1.9.338.zip",+ "sha256": "1731fe506d484a856118db506d5d8360a0a7877202b29f2072150233064de287",+ "size": 609005, "verbPrefixes": [ "fusion_" ],
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.9.337",+ "version": "1.9.338", "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/fusion-bridge", "author": "Adom Inc.",
dashboard/Cargo.lock+1−1@@ -4,7 +4,7 @@ version = 4 [[package]] name = "fusion-dashboard"-version = "1.9.337"+version = "1.9.338" dependencies = [ "serde_json", ]
dashboard/Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "fusion-dashboard"-version = "1.9.337"+version = "1.9.338" edition = "2021" [dependencies]
install.sh+1−1@@ -21,7 +21,7 @@ echo "Installed fusion-bridge skills: $(ls "$PKG_DIR/skills" 2>/dev/null | tr '\ # binary (the three-artifact pattern: bridge zip -> ab, THIS pkg -> container skills + # this download, page media -> wiki). Per the wiki's PKG_VS_RELEASE policy, binaries are # platform-tagged RELEASE assets, never tarball content - the installer fetches them.-DASH_VERSION="1.9.337"+DASH_VERSION="1.9.338" DASH_URL="https://wiki.adom.inc/download/adom/fusion-bridge/${DASH_VERSION}/fusion-dashboard" DEST="" if [ -w /usr/local/bin ]; then DEST=/usr/local/bin
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "fusion-bridge",- "version": "1.9.337",+ "version": "1.9.338", "type": "app", "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.", "dependencies": {
page.json+11−8@@ -1,6 +1,6 @@ { "slug": "fusion-bridge",- "version": "1.9.337",+ "version": "1.9.338", "type": "app", "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.", "dependencies": {@@ -11,6 +11,10 @@ "uninstall": "./uninstall.sh" }, "tags": [+ "ab",+ "bridge",+ "fusion",+ "desktop-app", "fusion360", "autodesk", "cad",@@ -75,7 +79,10 @@ "build a basic parts library", "add a 3d model to a component", "make a fusion 360 library with 3d",- "set up the fusion bridge"+ "set up the fusion bridge",+ "fusion dashboard",+ "fusion status page",+ "open the fusion launch page" ], "discovery_pitch": "Use the Adom Bridge Fusion 360 bridge when the user wants to DRIVE Autodesk Fusion 360 from the cloud: open/search their team's Fusion cloud designs, lay out a PCB or do electronics, export STEP/IGES/STL/Gerbers/BOM, or build a component library with real rendering 3D. It runs Fusion on the user's own machine via Adom Bridge. NOT for web/browser/login/form-filling (that's the native-browser extension) and NOT for KiCad (that's the kicad bridge).", "brief": "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.",@@ -104,9 +111,5 @@ "label": "Part volume", "prompt": "How much material does each printed part in this assembly use?" }- ],- "author": {- "name": "John Lauer",- "email": "[email protected]"- }-}+ ]+}
server.py+22−7@@ -9254,6 +9254,21 @@ def _last_library() -> str: _LAST_LIBRARY = [""] # the .lbr most recently opened by this bridge +def _remember_library(path: str):+ """Record the library BOTH in memory and in the persisted pref.++ Setting only _LAST_LIBRARY[0] looks identical in every test that does not restart the+ bridge, and then a respawn (ab auto-updates the bridge whenever a new version is+ published, including MID-RUN) silently forgets it - after which prove_library refuses+ with library_path_required even though the library is open on screen. Seen live+ 2026-09-01, resuming a run the publisher's own release had orphaned."""+ _LAST_LIBRARY[0] = path+ try:+ _set_bridge_pref("lastLibraryPath", path)+ except Exception:+ pass++ def _show_prepare_library(args, symbol_xml=None, package_xml=None, name=""): """Open the target library: explicit path, generated wrapper, or already-open. @@ -9278,11 +9293,7 @@ def _show_prepare_library(args, symbol_xml=None, package_xml=None, name=""): # check against, so the Create-new guard silently did nothing and the blind EDIT went # out anyway - which is why John saw the dialog AGAIN after the first fix. Whatever we # last opened IS the library those calls mean.- _LAST_LIBRARY[0] = library_path- try:- _set_bridge_pref("lastLibraryPath", library_path) # survives a bridge respawn- except Exception:- pass+ _remember_library(library_path) # survives a bridge respawn return None, wrapped @@ -12014,7 +12025,11 @@ def _handle_prove_library(fusion_info: dict, args: dict) -> dict: lbr = (args.get("libraryPath") or args.get("filePath") or "").replace("\\", "/") or _last_library() if not lbr: return {"success": False, "error": "libraryPath required (or open a library first).",- "errorCode": "library_path_required"}+ "errorCode": "library_path_required",+ "_hint": "If a library IS open on screen, the bridge probably respawned since "+ "it was opened (ab auto-updates on publish, even mid-run) and forgot "+ "it. Pass libraryPath explicitly - for a bundle install it is "+ "C:/Users/<user>/Documents/AdomLibraries/<bundle>/<Library>.lbr."} names = _library_artifact_names(lbr) if not names: return {"success": False, "error": "Could not read or parse that .lbr: %s" % lbr,@@ -12040,7 +12055,7 @@ def _handle_prove_library(fusion_info: dict, args: dict) -> dict: if not opened.get("success"): return {"success": False, "error": "open_lbr failed: " + str(opened.get("error")), "errorCode": "library_open_failed", "artifacts": artifacts}- _LAST_LIBRARY[0] = lbr+ _remember_library(lbr) evidence = [] # SHARED PACKAGE, PROVE ONCE (John, 2026-08-30: "once you have a correctly defined
skills/fusion-cloud-library-import/SKILL.md+15@@ -118,6 +118,21 @@ cam.isSmoothTransition = False; vp.camera = cam; vp.fit(); vp.refresh() Then `desktop_screenshot_window {hwnd}` on Fusion's main window. Chips land in a row, flat, proportional, pin-1 dimples visible. That is the frame people actually want in a demo. +## Do not publish a bridge release while a run is in flight++ab auto-updates the fusion bridge whenever a new version is published, and the respawn KILLS an+in-flight run's thread. The run is marked honestly - `fusion_prove_result` returns+`errorCode: bridge_restarted_mid_run` with the stage it died at - but the work after that stage+simply never happened. Seen live: a publisher's own release orphaned the prove phase of the run+they were watching. Finish or re-prove first, publish after.++**Recovering an orphaned run:** the BIND survives (urns are in the bound .lbr), so do not+re-install. Re-prove part by part with `fusion_prove_library {libraryPath, name}` - one call per+deviceset, ~2 minutes each, and read the result from `fusion_prove_result {}` after each (the+relay times out at 60s while the prove keeps running; never fire the next part until the+previous one's 4 frames landed, or the runs race each other on one Fusion). The bound library+for a bundle install lives at `C:/Users/<user>/Documents/AdomLibraries/<bundle>/<Library>.lbr`.+ ## Clean up after yourself The chain leaves scratch `Untitled` documents. `fusion_close_document {name:"Untitled",