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+32@@ -59,6 +59,38 @@ python3 -c "import server" >/dev/null 2>&1 || die "server.py fails to IMPORT (wo python3 -c "import fusion_detect" >/dev/null 2>&1 || die "fusion_detect.py fails to import" 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.+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+d=json.load(sys.stdin); x=d.get('data') or d+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." ;;+ 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+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" printf '%s' "$VERSION" > BRIDGE_VERSION