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 8 file(s)
7 files changed
+49−21
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.9.136+1.9.137
adom-bridge-fusion-manifest.json+4−4@@ -1,10 +1,10 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.9.136",- "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.154/adom-bridge-fusion-v1.9.136.zip",- "sha256": "462b7242bc02676b808a3356eab28231e5ebe6f91d165a680bafc529d5a9c13d",- "size": 470777,+ "version": "1.9.137",+ "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.157/adom-bridge-fusion-v1.9.137.zip",+ "sha256": "40647727ddc5607baa9ffd4b265a204265cd23288cc4a4a331f7b2d65446f21f",+ "size": 473877, "verbPrefixes": [ "fusion_" ],
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.9.136",+ "version": "1.9.137", "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.toml+1−1@@ -1,6 +1,6 @@ [package] name = "fusion-dashboard"-version = "1.9.153"+version = "1.9.156" edition = "2021" [dependencies]
dashboard/src/main.rs+31−6@@ -71,14 +71,39 @@ fn unwrap_data(v: &serde_json::Value) -> serde_json::Value { } fn default_target() -> String {- if let Ok(o) = Command::new("adom-bridge").arg("targets").output() {- if let Ok(v) = serde_json::from_slice::<serde_json::Value>(&o.stdout) {- if let Some(t) = v["targets"].as_array().and_then(|a| a.first()) {- return t["name"].as_str().unwrap_or("").to_string();- }+ // PREFER A BOX THAT IS ACTUALLY DOING SOMETHING (bug found 2026-08-22: the plain+ // dashboard defaulted to targets[0], which was a box with no APS token, so the+ // identity chips read empty while AdomLapper was signed in). Rank connected targets+ // by a cheap per-box readiness probe: ready > running > signed-into-APS > first seen.+ // Only ever a fallback - the frontend passes ?target= once it knows the roster.+ let out = match Command::new("adom-bridge").arg("targets").output() {+ Ok(o) => o.stdout,+ Err(_) => return String::new(),+ };+ let v: serde_json::Value = match serde_json::from_slice(&out) {+ Ok(v) => v,+ Err(_) => return String::new(),+ };+ let targets: Vec<String> = v["targets"].as_array().map(|a| {+ a.iter().filter_map(|t| t["name"].as_str().map(String::from)).collect()+ }).unwrap_or_default();+ if targets.is_empty() { return String::new(); }+ if targets.len() == 1 { return targets[0].clone(); }+ let mut best: Option<(u8, String)> = None; // (rank, name); higher rank wins+ for name in &targets {+ let rd = unwrap_data(&bridge("fusion-dashboard", name, "fusion_readiness", "{}"));+ // APS signed-in is what the identity chips read, so it breaks the common tie where+ // no box is running Fusion but ONE is signed into APS (the 2026-08-22 bug).+ let aps = unwrap_data(&bridge("fusion-dashboard", name, "fusion_aps_status", "{}"));+ let rank = if rd["ready"].as_bool().unwrap_or(false) { 4u8 }+ else if rd["running"].as_bool().unwrap_or(false) { 3u8 }+ else if aps["signedIn"].as_bool().unwrap_or(false) { 2u8 }+ else { 1u8 };+ if best.as_ref().map(|(r, _)| rank > *r).unwrap_or(true) {+ best = Some((rank, name.clone())); } }- String::new()+ best.map(|(_, n)| n).unwrap_or_else(|| targets[0].clone()) } /// The LED payload: one call per facet, each with state + an AI hint on how to act.
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "fusion-bridge",- "version": "1.9.154",+ "version": "1.9.157", "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+10−7@@ -1,6 +1,6 @@ { "slug": "fusion-bridge",- "version": "1.9.154",+ "version": "1.9.157", "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",@@ -70,7 +74,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.",@@ -99,9 +106,5 @@ "label": "Part volume", "prompt": "How much material does each printed part in this assembly use?" }- ],- "author": {- "name": "John Lauer",- "email": "[email protected]"- }+ ] }