← Commit history

Update 127 file(s)

John Lauer ·19b7ff2bf2 ·1mo ago ·parent 7c6e381
2 files changed +11−27
page.json+10−26
@@ -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,28 +111,5 @@       "label": "Part volume",       "prompt": "How much material does each printed part in this assembly use?"     }-  ],-  "agent_permissions": {-    "allow_bash": [],-    "allow": [-      "adom-desktop-fusion-bridge read-only verbs (via the adom-bridge CLI): fusion_readiness, fusion_get_app_state, fusion_addin_status, fusion_check_dialogs - state queries; they change nothing.",-      "adom-desktop-fusion-bridge read-only verbs: fusion_alerts (reads Fusion's own log for toasts), fusion_document_info, fusion_window_info, fusion_board_info, fusion_library_parts - inspect only.",-      "adom-desktop-fusion-bridge read-only verbs: fusion_prove_result (a persisted run report), fusion_plan_library_import (report-only preflight), fusion_list_cloud_projects, fusion_describe.",-      "adom-desktop-fusion-bridge evidence captures fusion_screenshot_fusion and fusion_capture_library_views read pixels and write local image files only."-    ],-    "soft_deny": [-      "adom-desktop-fusion-bridge lifecycle verbs fusion_stop, fusion_kill, fusion_restart_for_addin close or kill the Fusion application - keep the human prompt.",-      "adom-desktop-fusion-bridge fusion_install_fusion silently installs Autodesk Fusion on the user's machine.",-      "adom-desktop-fusion-bridge fusion_cleanup_cloud_files deletes files from the user's Autodesk cloud hub.",-      "adom-desktop-fusion-bridge managed-library verbs (fusion_managed_library_push/pull/create/link/unlink) publish to or overwrite the user's library.io libraries."-    ],-    "environment": [-      "adom-desktop-fusion-bridge is the Fusion 360 bridge for Adom Bridge; its fusion_* verbs are invoked through the adom-bridge CLI and drive Autodesk Fusion on the user's own desktop.",-      "adom-desktop-fusion-bridge desktop actions also pass Adom Bridge's own human-approval gate (caller identity, per-call reason, Activity Log) - a container approval is the first of two gates."-    ]-  },-  "author": {-    "name": "John Lauer",-    "email": "[email protected]"-  }-}\ No newline at end of file+  ]+}
rust/core/src/aps.rs+1−1
@@ -216,7 +216,7 @@ mod tests { // ───────────────────────── cloud discovery on the Data Management API ─────────────────────────  /// The Python bridge's APS_REQUIRED_HINT, verbatim.-pub const APS_REQUIRED_HINT: &str = "APS IS MANDATORY for cloud file search/browse/recent - SET IT UP, do not give up, do not fall back. ⛔ NEVER enumerate cloud files via app.data (dataProjects/dataFiles) in fusion_run_modeling_script: the DEPRECATED method holds Fusion's main thread for minutes, times out, and locks the app. AUTO-RECOVER APS instead: (1) NOT configured? The org Client ID is a PUBLIC PKCE id - pull it from a peer that has it: read ~/.adom/fusion-aps/config.json (key 'client_id') off another ab desktop (adom-desktop status lists them) via shell_execute/pull_file, then fusion_aps_set_client_id {clientId}. (2) fusion_aps_signin -> open the returned authUrl in the user's REAL browser with a warm Autodesk session; INSTALL + USE the adom-browser-extension (nbrowser/ABE, https://wiki.adom.inc/adom/adom-browser-extension) to drive it reliably (recommend it - coordinate-clicking a browser is fragile). The localhost listener captures the token; poll fusion_aps_status until signedIn:true. (3) retry. If authorize returns AUTH-001 'client_id does not have access to the api product': the APS app at aps.autodesk.com/myapps lost its Data Management API product - re-commit its API Access + Save, wait a few minutes to propagate, retry.";+pub const APS_REQUIRED_HINT: &str = "APS IS MANDATORY for cloud file search/browse/recent - SET IT UP, do not give up, do not fall back. ⛔ NEVER enumerate cloud files via app.data (dataProjects/dataFiles) in fusion_run_modeling_script: the DEPRECATED method holds Fusion's main thread for minutes, times out, and locks the app. AUTO-RECOVER APS instead: (1) NOT configured? The org Client ID is a PUBLIC PKCE id - pull it from a peer that has it: read ~/.adom/fusion-aps/config.json (key 'client_id') off another ab desktop (`adom-bridge targets` lists them) via shell_execute/pull_file, then fusion_aps_set_client_id {clientId}. (2) fusion_aps_signin -> open the returned authUrl in the user's REAL browser with a warm Autodesk session; INSTALL + USE the adom-browser-extension (nbrowser/ABE, https://wiki.adom.inc/adom/adom-browser-extension) to drive it reliably (recommend it - coordinate-clicking a browser is fragile). The localhost listener captures the token; poll fusion_aps_status until signedIn:true. (3) retry. If authorize returns AUTH-001 'client_id does not have access to the api product': the APS app at aps.autodesk.com/myapps lost its Data Management API product - re-commit its API Access + Save, wait a few minutes to propagate, retry.";  fn data_array(v: &Value) -> Vec<Value> { v["data"].as_array().cloned().unwrap_or_default() } fn attr<'a>(it: &'a Value, k: &str) -> &'a str { it["attributes"][k].as_str().unwrap_or("") }