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
page.json+7−10@@ -11,10 +11,6 @@ "uninstall": "./uninstall.sh" }, "tags": [- "ab",- "bridge",- "fusion",- "desktop-app", "fusion360", "autodesk", "cad",@@ -79,10 +75,7 @@ "build a basic parts library", "add a 3d model to a component", "make a fusion 360 library with 3d",- "set up the fusion bridge",- "fusion dashboard",- "fusion status page",- "open the fusion launch page"+ "set up the fusion bridge" ], "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.",@@ -111,5 +104,9 @@ "label": "Part volume", "prompt": "How much material does each printed part in this assembly use?" }- ]-}+ ],+ "author": {+ "name": "John Lauer",+ "email": "[email protected]"+ }+}
tools/release.sh+23−19@@ -61,9 +61,11 @@ echo " gates OK" # ⚠ LIVE-WORK GUARD (John, 2026-08-23: "that was really rude"): bridge_install makes AD REAP # the running bridge process. That kills any in-flight create_library chain, and on bridges-# older than 1.9.183 it kills FUSION ITSELF (Fusion was a child of the bridge process --# seven releases shipped during a build matrix = seven dead Fusions). Refuse unless the box-# is idle. RELEASE_FORCE=1 overrides, and you had better know why.+# older than 1.9.183 it killed FUSION ITSELF (Fusion was a child of the bridge process -+# EIGHT releases shipped during a build matrix = eight dead Fusions). The first version of+# this guard read a respawn-window "running: null" as "no" and shipped anyway (the 8th kill).+# RULE NOW: a RUNNING Fusion means someone is using it -> refuse. UNKNOWN -> refuse. Only an+# explicit running:false passes. RELEASE_FORCE=1 overrides, and you had better know why. step "Live-work guard on $BRIDGE_TARGET" _probe() { adom-bridge --ai-thread "$AITHREAD" --target "$BRIDGE_TARGET" "$1" '{}' 2>/dev/null \ | python3 -c "import sys,json@@ -72,24 +74,26 @@ if isinstance(x.get('output'),str): try: x=json.loads(x['output']) except Exception: pass print(json.dumps(x))" 2>/dev/null || echo '{}'; }-STAGE=$(_probe fusion_prove_result | python3 -c "import sys,json; print(json.load(sys.stdin).get('stage') or '')")-RD=$(_probe fusion_readiness)-RUNNING=$(echo "$RD" | python3 -c "import sys,json; print('yes' if json.load(sys.stdin).get('running') else 'no')")-REMOTE_VER=$(echo "$RD" | python3 -c "import sys,json; print(json.load(sys.stdin).get('bridgeVersion') or '0.0.0')") if [ "${RELEASE_FORCE:-0}" != "1" ]; then- case "$STAGE" in- ""|done|failed|error) : ;;- *) die "a create_library chain is IN FLIGHT on $BRIDGE_TARGET (stage: $STAGE). bridge_install would reap the bridge mid-chain. Wait for it to finish, or RELEASE_FORCE=1." ;;+ VERDICT=""+ for attempt in 1 2 3; do+ RD=$(_probe fusion_readiness)+ VERDICT=$(echo "$RD" | python3 -c "+import sys,json+x=json.load(sys.stdin); r=x.get('running')+print('idle' if r is False else ('busy' if r is True else 'unknown'))")+ [ "$VERDICT" = "unknown" ] || break+ sleep 5 # respawn window - re-probe, never guess+ done+ STAGE=$(_probe fusion_prove_result | python3 -c "import sys,json; print(json.load(sys.stdin).get('stage') or '')")+ case "$VERDICT" in+ busy) die "Fusion is RUNNING on $BRIDGE_TARGET - someone is using it (chain stage: '${STAGE:-none}'). bridge_install reaps the bridge and kills in-flight work. Wait until Fusion is closed, or RELEASE_FORCE=1 once you have CONFIRMED nobody is driving it." ;;+ unknown) die "could not determine Fusion state on $BRIDGE_TARGET after 3 probes (bridge respawning or unreachable) - refusing to install blind. Retry shortly, or RELEASE_FORCE=1." ;;+ idle) echo " guard OK: Fusion not running on $BRIDGE_TARGET (chain stage: '${STAGE:-none}')" ;; esac- if [ "$RUNNING" = "yes" ]; then- OLD_TREE=$(python3 -c "-import sys-v=tuple(int(p) for p in '$REMOTE_VER'.split('.')[:3]) if '$REMOTE_VER'.replace('.','').isdigit() else (0,0,0)-print('yes' if v < (1,9,183) else 'no')")- [ "$OLD_TREE" = "yes" ] && die "Fusion is RUNNING on $BRIDGE_TARGET under bridge $REMOTE_VER, which launched it as a CHILD process - installing now KILLS Fusion. Wait until Fusion is closed/idle (or RELEASE_FORCE=1 if you have confirmed nobody is using it)."- fi+else+ echo " guard BYPASSED by RELEASE_FORCE=1" fi-echo " guard OK (stage='${STAGE:-none}', fusion running=$RUNNING, remote bridge $REMOTE_VER)" # --- 2. set ALL version files to $VERSION (this is the lockstep) -------------------------- step "Setting every version file to $VERSION"@@ -161,7 +165,7 @@ git commit -q -m "release $VERSION (lockstep): bridge + dashboard + package all Co-Authored-By: Claude Opus 4.8 <[email protected]>" || echo " (nothing to commit)" adom-wiki repo push "$REPO" --files server.py fusion_detect.py BRIDGE_VERSION bridge.json \ page.json package.json "$MANIFEST" dashboard/src/main.rs dashboard/Cargo.toml dashboard/Cargo.lock \- dashboard/ui/index.html dockbar.json \+ dashboard/ui/index.html dockbar.json handlers/dismiss_recovery.py handlers/dialog_classify.py \ install.sh --json 2>/dev/null | ok_check || die "repo push FAILED" echo " pushed"