← Commit history

0.31.2: Fusion's 22 cloud verbs in the platform tier (#29)

Colby Knox ·a238f2600a ·8d ago ·parent 5426551
5 files changed +884−12
README.md+2−1
@@ -64,7 +64,7 @@ verb by verb: [docs/coverage.md](docs/coverage.md). | **native** | 55 | 53 | 54 | 51 | | **checks** | 39 | 38 | 39 | 38 | | **app** | 70 | 66 | 57 | 61 |-| **platform** | 18 | 18 | 0 | 1 |+| **platform** | 40 | 18 | 0 | 23 | | standard (all but platform) | 263 | 252 | 249 | 243 | <!-- coverage:end --> @@ -158,6 +158,7 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue  ## Status +Version 0.31.2: Fusion's 22 cloud verbs are listed in the platform tier (#29), outside the totals. Version 0.31.1: sch_no_connect, sch_label, sch_wire, place_parts, edit_tracks, model_check and extensions join from KiCad (#29), 263 verbs. Version 0.31.0: physical_properties, preferences, select_items and cancel_run join from Fusion (#29), 256 verbs; proposals may now carry the platform tier. Version 0.30.14: coverage reads Fusion 360 bridge 1.13.55 (sch_place_part, sch_swap_part and edit_parts exact).
docs/coverage.md+24−2
@@ -1,6 +1,6 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.88 (the reference), KiCad bridge 1.0.98, Fusion 360 bridge 1.13.55. 78 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.88 (the reference), KiCad bridge 1.0.98, Fusion 360 bridge 1.13.55. 100 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*. `exact` is the same job under the same or an equivalent name; `partial` does part of it or does it differently (`verbs/coverage.json` names what in `note`); `unsupported` answers `not_supported` for the whole job and is not counted; blank is missing. Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand. @@ -10,7 +10,7 @@ Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand | **native** | 55 | 53 | 54 | 51 | | **checks** | 39 | 38 | 39 | 38 | | **app** | 70 | 66 | 57 | 61 |-| **platform** | 18 | 18 | 0 | 1 |+| **platform** | 40 | 18 | 0 | 23 | | standard (all but platform) | 263 | 252 | 249 | 243 |  ## core@@ -321,9 +321,31 @@ Specific to one tool's platform (Altium 365, OutJobs, integrated libraries). Not | `a365_query` | Run one GraphQL query or mutation against the workspace's GraphQL gateway (https://<workspace>/svc/napi/gateway/graphql/) with the stored token. | `altium_a365_query` |  | unsupported | | `a365_refresh` | Exchange the stored refresh token for a new access token (and store a rotated refresh token if one comes back). | `altium_a365_refresh` |  | unsupported | | `a365_status` | Is the Altium 365 lane configured, is there a token, and is it LIVE (probed with a one-row GraphQL query)? | `altium_a365_status` |  | unsupported |+| `aps_browse` *proposed* | Browse hubs/projects/folders without launching Fusion. |  |  | `fusion_aps_browse` |+| `aps_create_folder` *proposed* | Create a subfolder in a project (free; needs data:create scope). Use this to make an 'Adom AI Workspace' folder + per-task subfolders so the bridge never... |  |  | `fusion_aps_create_folder` |+| `aps_download` *proposed* | Download a cloud file to the local machine (no Fusion needed). |  |  | `fusion_aps_download` |+| `aps_file_info` *proposed* | Version history + who/when/size for a file (tip + recent versions). |  |  | `fusion_aps_file_info` |+| `aps_open` *proposed* | Find a cloud design by name and open it in Fusion (any folder depth). Fire-and-poll. |  |  | `fusion_aps_open` |+| `aps_recent` *proposed* | Most-recently-modified designs across the team hub, newest first. |  |  | `fusion_aps_recent` |+| `aps_search` *proposed* | Server-indexed search across the whole team hub: about 20-30 s hub-wide, a few seconds with projectId (not a 30-min folder walk). Budget 120 s. A ZERO from... |  |  | `fusion_aps_search` |+| `aps_set_client_id` *proposed* | Set the org's APS (PKCE) client id used for cloud search. Get it from your org's members-only wiki settings: adom-wiki settings get <org> autodesk-aps... |  |  | `fusion_aps_set_client_id` |+| `aps_signin` *proposed* | Open the Autodesk sign-in in the REMEMBERED browser+profile (not the OS default); a background listener captures the token. Pass {exe,profileDir,name} to... |  |  | `fusion_aps_signin` |+| `aps_status` *proposed* | APS state: configured, signed in, token live, never-charge meter. When configured:false the hint sends you to your org's shared app ID on the wiki... |  |  | `fusion_aps_status` |+| `aps_upload` *proposed* | Upload a local file as a NEW cloud file (free Data Management; needs data:write scope). ⛔ FOLDER HYGIENE: NEVER pass a project ROOT folderId - the bridge... |  |  | `fusion_aps_upload` |+| `aps_versions` *proposed* | Full (uncapped) version history of a file. |  |  | `fusion_aps_versions` |+| `cleanup_cloud_files` *proposed* | PRECISELY delete a list of cloud files by lineage urn - SAFE cleanup of AI-created clutter. Deletes ONLY the exact fileIds given (never name-guessing), so... |  |  | `fusion_cleanup_cloud_files` | | `compile_intlib` | Compile a .LibPkg into an integrated library (.IntLib). | `altium_compile_intlib` |  | unsupported |+| `create_cloud_folder` *proposed* | Create a subfolder in a cloud project through the signed-in Fusion session's Data API (no APS needed). Idempotent: an existing folder of that name is... |  |  | `fusion_create_cloud_folder` |+| `delete_cloud_file` *proposed* | DESTRUCTIVE: delete ONE cloud file through the signed-in Fusion session's Data API. Looks in exactly one folder (projectName + folderPath, no recursion) for... |  |  | `fusion_delete_cloud_file` | | `extract_intlib` | Extract the editable .SchLib/.PcbLib sources from a compiled .IntLib (Altium writes them next to the IntLib and opens them). | `altium_extract_intlib` |  | unsupported | | `import_kicad` | Import a KiCad file with Altium's own KiCad importer, driven through the AdomBridge .NET extension. | `altium_import_kicad` |  | `fusion_create_library` (partial) |+| `list_cloud_files` *proposed* | List files/folders in a cloud project (optionally a subfolder). |  |  | `fusion_list_cloud_files` |+| `list_cloud_projects` *proposed* | List the cloud PROJECTS visible to the signed-in Fusion session (hub walk - slow on big teams; prefer fusion_aps_search for finding files). |  |  | `fusion_list_cloud_projects` |+| `managed_library_create` *proposed* | Create a NEW managed library on library.io FROM the library in front (which must already be saved in a Fusion Hub). Drives MANAGE > LIBRARY.IO > Push, then... |  |  | `fusion_managed_library_create` |+| `managed_library_link` *proposed* | Link the library IN FRONT to an existing managed library on library.io. With no name, opens Fusion's Select Managed Library picker, returns its rows as... |  |  | `fusion_managed_library_link` |+| `managed_library_pull` *proposed* | Pull the newest version FROM library.io into the linked library in front. A pull ends in ONE of two CEF dialogs and BOTH block the add-in until answered:... |  |  | `fusion_managed_library_pull` |+| `managed_library_push` *proposed* | Push a NEW VERSION of the library in front up to its linked managed library on library.io. Clicking the menu item alone does NOT push: Fusion raises a CEF... |  |  | `fusion_managed_library_push` |+| `managed_library_unlink` *proposed* | Unlink the library in front from its managed library on library.io. Fusion greys this out on a library that was never linked, so a silent no-op there is... |  |  | `fusion_managed_library_unlink` | | `outjob_info` | An OutJob's containers (output media), the outputs in each, and their key settings (units, decimals, plotted layer count), read from the .OutJob file:... | `altium_outjob_info` |  | unsupported | | `run_outjob` | Run one output medium of an .OutJob (gerbers, drill, BOM, PDFs...) and list what it wrote under 'Project Outputs for <project>'. | `altium_run_outjob` |  | unsupported | | `workspace_place` | Put a part from the Altium 365 workspace on a sheet: search, pick a result, place it (Altium's own placement, so the part keeps its workspace link,... | `altium_workspace_place` |  | unsupported |
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "eda-bridge-standard",-  "version": "0.31.1",+  "version": "0.31.2",   "type": "skill",   "title": "EDA Bridge Standard: one way for an AI to drive every PCB tool",   "description": "The standard every Adom EDA bridge follows so one AI can drive Altium, KiCad, Fusion 360 and any future PCB tool the same way: shared verb names in tiers, the board model JSON, reply and refusal conventions, and a coverage table of each bridge against the Altium reference.",
verbs/coverage.json+244−2
@@ -1,10 +1,10 @@ {- "standard": "0.31.1",+ "standard": "0.31.2",  "reference": {   "bridge": "altium",   "version": "0.2.88"  },- "proposed": 78,+ "proposed": 100,  "compared": {   "kicad": "1.0.98",   "fusion360": "1.13.55"@@ -4715,6 +4715,149 @@     "note": "Altium 365 is Altium's cloud; Fusion's cloud is the Autodesk hub (fusion_aps_* search and browse, fusion_open_cloud_file, fusion_save_to_cloud)"    }   },+  {+   "name": "aps_browse",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_browse",+    "match": "exact"+   }+  },+  {+   "name": "aps_create_folder",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_create_folder",+    "match": "exact"+   }+  },+  {+   "name": "aps_download",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_download",+    "match": "exact"+   }+  },+  {+   "name": "aps_file_info",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_file_info",+    "match": "exact"+   }+  },+  {+   "name": "aps_open",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_open",+    "match": "exact"+   }+  },+  {+   "name": "aps_recent",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_recent",+    "match": "exact"+   }+  },+  {+   "name": "aps_search",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_search",+    "match": "exact"+   }+  },+  {+   "name": "aps_set_client_id",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_set_client_id",+    "match": "exact"+   }+  },+  {+   "name": "aps_signin",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_signin",+    "match": "exact"+   }+  },+  {+   "name": "aps_status",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_status",+    "match": "exact"+   }+  },+  {+   "name": "aps_upload",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_upload",+    "match": "exact"+   }+  },+  {+   "name": "aps_versions",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_aps_versions",+    "match": "exact"+   }+  },+  {+   "name": "cleanup_cloud_files",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_cleanup_cloud_files",+    "match": "exact"+   }+  },   {    "name": "compile_intlib",    "tier": "platform",@@ -4730,6 +4873,28 @@     "note": "a Fusion library is one .lbr holding symbols, footprints and components together: there is nothing to compile"    }   },+  {+   "name": "create_cloud_folder",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_create_cloud_folder",+    "match": "exact"+   }+  },+  {+   "name": "delete_cloud_file",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_delete_cloud_file",+    "match": "exact"+   }+  },   {    "name": "extract_intlib",    "tier": "platform",@@ -4760,6 +4925,83 @@     "note": "KiCad parts (footprint + symbol) into a Fusion library; not KiCad boards or schematics"    }   },+  {+   "name": "list_cloud_files",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_list_cloud_files",+    "match": "exact"+   }+  },+  {+   "name": "list_cloud_projects",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_list_cloud_projects",+    "match": "exact"+   }+  },+  {+   "name": "managed_library_create",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_managed_library_create",+    "match": "exact"+   }+  },+  {+   "name": "managed_library_link",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_managed_library_link",+    "match": "exact"+   }+  },+  {+   "name": "managed_library_pull",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_managed_library_pull",+    "match": "exact"+   }+  },+  {+   "name": "managed_library_push",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_managed_library_push",+    "match": "exact"+   }+  },+  {+   "name": "managed_library_unlink",+   "tier": "platform",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_managed_library_unlink",+    "match": "exact"+   }+  },   {    "name": "outjob_info",    "tier": "platform",
verbs/standard.json+613−6
@@ -1,10 +1,10 @@ {- "standard": "0.31.1",+ "standard": "0.31.2",  "reference": {   "bridge": "altium",   "version": "0.2.88"  },- "proposed": 78,+ "proposed": 100,  "compared": {   "kicad": "1.0.98",   "fusion360": "1.13.55"@@ -5276,7 +5276,7 @@    "longRunning": false,    "timeoutSeconds": 120,    "proposedBy": "fusion-lane",-   "since": "0.30.14",+   "since": "0.31.0",    "agreedBy": [     "altium-lane",     "kicad-lane"@@ -7900,7 +7900,7 @@    "longRunning": false,    "timeoutSeconds": 30,    "proposedBy": "fusion-lane",-   "since": "0.30.14",+   "since": "0.31.0",    "agreedBy": [     "altium-lane",     "kicad-lane"@@ -8884,7 +8884,7 @@    "longRunning": false,    "timeoutSeconds": 30,    "proposedBy": "fusion-lane",-   "since": "0.30.14",+   "since": "0.31.0",    "agreedBy": [     "altium-lane",     "kicad-lane"@@ -9127,7 +9127,7 @@    "longRunning": false,    "timeoutSeconds": 30,    "proposedBy": "fusion-lane",-   "since": "0.30.14",+   "since": "0.31.0",    "agreedBy": [     "altium-lane",     "kicad-lane"@@ -10204,6 +10204,366 @@    "longRunning": false,    "timeoutSeconds": 60   },+  {+   "name": "aps_browse",+   "tier": "platform",+   "source": "proposed",+   "summary": "Browse hubs/projects/folders without launching Fusion.",+   "input": {+    "folderId": "optional str",+    "hubId": "optional str",+    "projectId": "optional str"+   },+   "output": {+    "items": "[{name,type,id}]"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {},+   "longRunning": false,+   "timeoutSeconds": 60,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_create_folder",+   "tier": "platform",+   "source": "proposed",+   "summary": "Create a subfolder in a project (free; needs data:create scope). Use this to make an 'Adom AI Workspace' folder + per-task subfolders so the bridge never dumps loose files in the shared project root. See fusion-cloud-hygiene.",+   "input": {+    "name": "required str",+    "parentFolderId": "required str",+    "projectId": "required str"+   },+   "output": {+    "folderId": "str"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "name": "Adom AI Workspace",+    "parentFolderId": "urn:...",+    "projectId": "a.YnVz..."+   },+   "longRunning": false,+   "timeoutSeconds": 50,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_download",+   "tier": "platform",+   "source": "proposed",+   "summary": "Download a cloud file to the local machine (no Fusion needed).",+   "input": {+    "fileName": "optional str",+    "query": "str OR projectId+urn",+    "saveDir": "optional str"+   },+   "output": {+    "bytes": "int",+    "path": "str"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "query": "BME690 Molecule"+   },+   "longRunning": false,+   "timeoutSeconds": 90,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_file_info",+   "tier": "platform",+   "source": "proposed",+   "summary": "Version history + who/when/size for a file (tip + recent versions).",+   "input": {+    "query": "str  OR  projectId+urn"+   },+   "output": {+    "tip": "{...}",+    "versionCount": "int",+    "versions": "[...]"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "query": "BME690 Molecule"+   },+   "longRunning": false,+   "timeoutSeconds": 40,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_open",+   "tier": "platform",+   "source": "proposed",+   "summary": "Find a cloud design by name and open it in Fusion (any folder depth). Fire-and-poll.",+   "input": {+    "query": "required str",+    "wait": "optional bool"+   },+   "output": {+    "match": "{name}",+    "opening": "bool",+    "statusVerb": "str"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "query": "BME690 Molecule"+   },+   "longRunning": true,+   "timeoutSeconds": 60,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_recent",+   "tier": "platform",+   "source": "proposed",+   "summary": "Most-recently-modified designs across the team hub, newest first.",+   "input": {+    "limit": "optional int (default 25)"+   },+   "output": {+    "count": "int",+    "results": "[...]"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "limit": 25+   },+   "longRunning": false,+   "timeoutSeconds": 120,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_search",+   "tier": "platform",+   "source": "proposed",+   "summary": "Server-indexed search across the whole team hub: about 20-30 s hub-wide, a few seconds with projectId (not a 30-min folder walk). Budget 120 s. A ZERO from the server index is not absence: the reply then carries data.fallback (a name scan of the newest 400 items), data.completeness, and a hint to fusion_aps_browse a known sibling's folder (issue #85).",+   "input": {+    "hubId": "optional str",+    "limit": "optional int (default 50)",+    "projectId": "optional str",+    "query": "required str"+   },+   "output": {+    "count": "int",+    "results": "[{name,id,projectName,lastModified}]"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "limit": 10,+    "query": "Molecule"+   },+   "longRunning": false,+   "timeoutSeconds": 120,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_set_client_id",+   "tier": "platform",+   "source": "proposed",+   "summary": "Set the org's APS (PKCE) client id used for cloud search. Get it from your org's members-only wiki settings: adom-wiki settings get <org> autodesk-aps (never from another machine's config file). When the org has none yet, the reply's hint gives the adom-wiki settings set command that shares it, so every other box adopts it in two calls (fusion-aps-org-setup skill). Public identifier, no secret.",+   "input": {+    "clientId": "required str"+   },+   "output": {+    "success": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "clientId": "D5nn...EPAq"+   },+   "longRunning": false,+   "timeoutSeconds": 20,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_signin",+   "tier": "platform",+   "source": "proposed",+   "summary": "Open the Autodesk sign-in in the REMEMBERED browser+profile (not the OS default); a background listener captures the token. Pass {exe,profileDir,name} to use+remember a specific browser, or {allowDefaultBrowser:true} to fall back to the OS default. If nothing is remembered, returns needsExtensionOpen so the caller opens authUrl in the user's real browser via nbrowser_open_window.",+   "input": {+    "allowDefaultBrowser": "optional bool",+    "exe": "optional str (browser binary to launch+remember)",+    "name": "optional str",+    "profileDir": "optional str (e.g. 'Default','Profile 2')"+   },+   "output": {+    "authUrl": "str",+    "needsExtensionOpen": "bool",+    "openedVia": "str",+    "success": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {},+   "longRunning": false,+   "timeoutSeconds": 30,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_status",+   "tier": "platform",+   "source": "proposed",+   "summary": "APS state: configured, signed in, token live, never-charge meter. When configured:false the hint sends you to your org's shared app ID on the wiki (adom-wiki settings get <org> autodesk-aps) before anything else; the fusion-aps-org-setup skill covers new boxes and first-time orgs.",+   "input": {},+   "output": {+    "configured": "bool",+    "neverCharge": "bool",+    "signedIn": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {},+   "longRunning": false,+   "timeoutSeconds": 20,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_upload",+   "tier": "platform",+   "source": "proposed",+   "summary": "Upload a local file as a NEW cloud file (free Data Management; needs data:write scope). \u26d4 FOLDER HYGIENE: NEVER pass a project ROOT folderId - the bridge REFUSES it (refused_root_upload). Loose files in a shared root clutter the team's cloud. Create/choose a real subfolder first (fusion_aps_create_folder under an 'Adom AI Workspace' folder), or just use fusion_make_3d_package / fusion_build_library_3d which auto-target a non-root workspace. To RELOCATE an existing file, MOVE it (preserves its urn) - do NOT delete + re-upload (mints a new urn, breaks 3D bindings). See the fusion-cloud-hygiene skill.",+   "input": {+    "fileName": "optional str",+    "folderId": "required str (NON-ROOT subfolder)",+    "localPath": "required str",+    "projectId": "required str"+   },+   "output": {+    "bytes": "int",+    "itemUrn": "str"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "folderId": "urn:...",+    "localPath": "C:/x.f3d",+    "projectId": "a.YnVz..."+   },+   "longRunning": false,+   "timeoutSeconds": 90,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "aps_versions",+   "tier": "platform",+   "source": "proposed",+   "summary": "Full (uncapped) version history of a file.",+   "input": {+    "query": "str  OR  projectId+urn"+   },+   "output": {+    "versionCount": "int",+    "versions": "[...]"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "query": "BME690 Molecule"+   },+   "longRunning": false,+   "timeoutSeconds": 40,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "cleanup_cloud_files",+   "tier": "platform",+   "source": "proposed",+   "summary": "PRECISELY delete a list of cloud files by lineage urn - SAFE cleanup of AI-created clutter. Deletes ONLY the exact fileIds given (never name-guessing), so it can't touch a teammate's file in a shared folder. Loops server-side. Get the ids from fusion_aps_browse (item .id). Use this to remove f3d files the bridge created. A big list takes minutes (relay may time out at ~60s while deletes continue server-side - re-browse to confirm).",+   "input": {+    "fileIds": "required [<lineage urn>]",+    "folderPath": "optional str (default root - where the files live)",+    "projectName": "optional str (default active project)"+   },+   "output": {+    "deletedCount": "int",+    "failed": "[{fileId,error}]",+    "failedCount": "int",+    "success": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "fileIds": [+     "urn:adsk.wipprod:dm.lineage:abc123"+    ],+    "projectName": "Adom"+   },+   "longRunning": true,+   "timeoutSeconds": 1800,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },   {    "name": "compile_intlib",    "tier": "platform",@@ -10234,6 +10594,73 @@    "longRunning": false,    "timeoutSeconds": 300   },+  {+   "name": "create_cloud_folder",+   "tier": "platform",+   "source": "proposed",+   "summary": "Create a subfolder in a cloud project through the signed-in Fusion session's Data API (no APS needed). Idempotent: an existing folder of that name is returned with alreadyExisted:true instead of a duplicate. Folder names are matched case-insensitively. For an APS-side create without Fusion running, use fusion_aps_create_folder.",+   "input": {+    "folderName": "required str",+    "parentPath": "optional str (parent folder path; default the project root)",+    "projectName": "optional str (default the active project)"+   },+   "output": {+    "alreadyExisted": "bool (only when it already existed)",+    "folderId": "str",+    "folderName": "str",+    "parentFolder": "str",+    "project": "str",+    "success": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "folderName": "AI-Scratch",+    "projectName": "Main"+   },+   "longRunning": false,+   "timeoutSeconds": 60,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "delete_cloud_file",+   "tier": "platform",+   "source": "proposed",+   "summary": "DESTRUCTIVE: delete ONE cloud file through the signed-in Fusion session's Data API. Looks in exactly one folder (projectName + folderPath, no recursion) for an exact case-insensitive name match, or for the lineage urn when fileId is given (the precise form; prefer it in shared folders). Refuses without fileName or fileId. Large folders time out on the scan; give a precise folderPath. Use fusion_cleanup_cloud_files to delete a LIST of urns with dryRun support.",+   "input": {+    "fileId": "optional str (lineage urn for a precise delete; lineageUrn is accepted as an alias)",+    "fileName": "required str unless fileId is given (exact name match in one folder)",+    "folderPath": "optional str (default the project root)",+    "projectName": "optional str (default the active project)"+   },+   "output": {+    "fileId": "str",+    "fileName": "str",+    "folder": "str",+    "project": "str",+    "success": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "fileName": "verbtest-scratch",+    "folderPath": "AI-Scratch",+    "projectName": "Main"+   },+   "longRunning": false,+   "timeoutSeconds": 60,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },   {    "name": "extract_intlib",    "tier": "platform",@@ -10293,6 +10720,186 @@    "longRunning": false,    "timeoutSeconds": 300   },+  {+   "name": "list_cloud_files",+   "tier": "platform",+   "source": "proposed",+   "summary": "List files/folders in a cloud project (optionally a subfolder).",+   "input": {+    "folderPath": "optional str",+    "projectName": "optional str (defaults to active project)"+   },+   "output": {+    "files": "list",+    "success": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {+    "projectName": "Main"+   },+   "longRunning": true,+   "timeoutSeconds": 120,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "list_cloud_projects",+   "tier": "platform",+   "source": "proposed",+   "summary": "List the cloud PROJECTS visible to the signed-in Fusion session (hub walk - slow on big teams; prefer fusion_aps_search for finding files).",+   "input": {},+   "output": {+    "projects": "list",+    "success": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {},+   "longRunning": true,+   "timeoutSeconds": 120,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "managed_library_create",+   "tier": "platform",+   "source": "proposed",+   "summary": "Create a NEW managed library on library.io FROM the library in front (which must already be saved in a Fusion Hub). Drives MANAGE > LIBRARY.IO > Push, then completes Fusion's Create Managed Library dialog. PITFALL: a managed library created under one Autodesk account is NOT visible to another account until its managed FOLDER is shared on library.io - proven live, so do not assume hub membership shares it.",+   "input": {+    "description": "optional str",+    "name": "optional str (defaults to the library's own name)"+   },+   "output": {+    "alerts": "[...]",+    "library": "str",+    "success": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {},+   "longRunning": true,+   "timeoutSeconds": 240,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "managed_library_link",+   "tier": "platform",+   "source": "proposed",+   "summary": "Link the library IN FRONT to an existing managed library on library.io. With no name, opens Fusion's Select Managed Library picker, returns its rows as records (name/type/version/managedFolder/description) and CANCELS - a safe read-only listing of what this Autodesk account can reach. With name, selects that row and confirms. SAFETY: after linking, Fusion offers to force-update your library FROM the managed one; 'Replace Local Library' would destroy your parts, so this verb answers CANCEL by default - pass onUpdatePrompt to choose deliberately. A managed library owned by ANOTHER Autodesk account does NOT appear until its managed FOLDER is shared with this account on library.io; being in the same Fusion hub is not enough.",+   "input": {+    "name": "optional str (exact library name from the picker; omit to list read-only)",+    "onUpdatePrompt": "optional str cancel|merge|replace (default cancel; replace OVERWRITES the local library)"+   },+   "output": {+    "alerts": "[...]",+    "linkedTo": "str?",+    "listedOnly": "bool?",+    "managedLibraries": "[{name,type,version,managedFolder,description}]",+    "success": "bool",+    "updatePrompt": "obj?"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {},+   "longRunning": true,+   "timeoutSeconds": 180,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "managed_library_pull",+   "tier": "platform",+   "source": "proposed",+   "summary": "Pull the newest version FROM library.io into the linked library in front. A pull ends in ONE of two CEF dialogs and BOTH block the add-in until answered: the force-update prompt when content differs (answered MERGE by default, since pull is an explicit request for the managed content - pass onUpdatePrompt:'replace' to overwrite local parts entirely, or 'cancel' to back out), or 'Up to Date' when already current. If neither appears, nothing was pulled and this reports failure rather than a false pass - Fusion greys Pull out on a library that was never linked.",+   "input": {+    "onUpdatePrompt": "optional str merge|replace|cancel (default merge)"+   },+   "output": {+    "alerts": "[...]",+    "library": "str",+    "success": "bool",+    "upToDate": "bool",+    "updatePrompt": "obj?"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {},+   "longRunning": true,+   "timeoutSeconds": 240,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "managed_library_push",+   "tier": "platform",+   "source": "proposed",+   "summary": "Push a NEW VERSION of the library in front up to its linked managed library on library.io. Clicking the menu item alone does NOT push: Fusion raises a CEF 'Create New Version' confirmation and THAT is what creates the version, so this verb completes it and fails with confirm_missing rather than reporting a false pass. On a library that is not linked yet, Fusion offers Create Managed Library instead and this reports not_linked_yet - use fusion_managed_library_create. NOTE: Library Manager keeps showing the IMPORTED version number after a push, so the row gains an update-available badge instead of incrementing.",+   "input": {+    "onConfirm": "optional str create|cancel (default create)"+   },+   "output": {+    "alerts": "[...]",+    "confirmed": "obj",+    "library": "str",+    "success": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {},+   "longRunning": true,+   "timeoutSeconds": 240,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },+  {+   "name": "managed_library_unlink",+   "tier": "platform",+   "source": "proposed",+   "summary": "Unlink the library in front from its managed library on library.io. Fusion greys this out on a library that was never linked, so a silent no-op there is expected.",+   "input": {},+   "output": {+    "alerts": "[...]",+    "library": "str",+    "success": "bool"+   },+   "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+   "pitfalls": [],+   "related": [],+   "example": {},+   "longRunning": true,+   "timeoutSeconds": 180,+   "proposedBy": "fusion-lane",+   "since": "0.31.0",+   "agreedBy": [+    "standard-lane"+   ]+  },   {    "name": "outjob_info",    "tier": "platform",