← Commit history

standard 0.29.1: tool_update and import_step join (#29)

Colby Knox ·0ea89788a1 ·11d ago ·parent 21af1b9
5 files changed +129−17
README.md+4−3
@@ -61,11 +61,11 @@ verb by verb: [docs/coverage.md](docs/coverage.md). | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---| | **core** | 95 | 95 | 95 | 93 |-| **native** | 52 | 49 | 49 | 49 |+| **native** | 53 | 49 | 49 | 50 | | **checks** | 38 | 38 | 38 | 38 |-| **app** | 65 | 65 | 54 | 56 |+| **app** | 66 | 65 | 54 | 57 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 250 | 247 | 236 | 236 |+| standard (all but platform) | 252 | 247 | 236 | 238 | <!-- coverage:end -->  The **checks** tier is where the other bridges are furthest behind, and it is the cheapest to close: those verbs are@@ -158,6 +158,7 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue  ## Status +Version 0.29.1: `tool_update` (app) and `import_step` (native) join from fusion-lane (#29). 252 verbs. Version 0.29.0: three verbs from fusion-lane join the standard (#29): `export_3d`, `import_design` and `edit_pours` (native). 250 verbs. Version 0.28.2: the reference is Altium bridge 0.2.86, which answers all 247 standard verbs (sch_batch and log_tail added). Version 0.28.1: coverage reads Fusion 360 bridge 1.13.31 (engine 0.23.0, sends sheetDrawing).
docs/coverage.md+6−4
@@ -1,17 +1,17 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.86 (the reference), KiCad bridge 1.0.92, Fusion 360 bridge 1.13.31. 65 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.86 (the reference), KiCad bridge 1.0.92, Fusion 360 bridge 1.13.31. 67 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.  | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---| | **core** | 95 | 95 | 95 | 93 |-| **native** | 52 | 49 | 49 | 49 |+| **native** | 53 | 49 | 49 | 50 | | **checks** | 38 | 38 | 38 | 38 |-| **app** | 65 | 65 | 54 | 56 |+| **app** | 66 | 65 | 54 | 57 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 250 | 247 | 236 | 236 |+| standard (all but platform) | 252 | 247 | 236 | 238 |  ## core @@ -146,6 +146,7 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | `export_pos` *proposed* | Export the pick-and-place (component position, CPL) file of a board, optionally in a fab's assembly format (JLCPCB's columns). | `altium_export_pos` | `kicad_export_pos` | `fusion_export_cpl` (partial) | | `export_step` | Headless STEP export of a board. Default lane 'outjob': Altium's own ExportSTEP output run from a throwaway project in %TEMP% that points at the board - no... | `altium_export_step` | `kicad_export_step` | `fusion_export_step` | | `import_design` *proposed* | Bring a design from another tool into a NEW native design with the parts instantiated: an EAGLE .sch with its paired .brd, a KiCad project, or an Altium... |  |  | `fusion_new_electronics_from_eagle` (partial) |+| `import_step` *proposed* | Bring a STEP model in as 3D geometry placed with the board: an enclosure, a bracket or a mating part, for fit and clearance checks. Not a footprint's own... |  |  | `fusion_import_step` (partial) | | `install_library` | Register a library file in Altium's Installed Libraries (IntegratedLibraryManager.InstallLibrary) so its parts appear in the Components panel. | `altium_install_library` | `kicad_install_library` | `fusion_install_library_bundle` (partial) | | `install_library_bundle` | One-click install of a wiki library bundle (zip of .SchLib/.PcbLib): unpack, register, open the library, prove it with a frame. | `altium_install_library_bundle` | `kicad_install_library_bundle` | `fusion_install_library_bundle` | | `list_installed_libraries` | Every library in Altium's Installed Libraries list (read-only). | `altium_list_installed_libraries` | `kicad_list_installed_libraries` | `fusion_list_installed_libraries` (partial) |@@ -286,6 +287,7 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | `simulate` *proposed* | Run a circuit simulation of the design's schematic and return the signals as data: an operating point, a DC sweep, an AC sweep or a transient, with the nets... | `altium_simulate` | `kicad_simulate` | `fusion_simulate` | | `state` | The whole picture in one call: licence state, windows, dialogs, a screenshot of every main/dialog window, and the agent's logical state (focused document,... | `altium_state` | `kicad_state` | `fusion_state` | | `status` | Is Altium running, licensed, and is the resident agent alive? | `altium_status` | `kicad_status` | `fusion_status` |+| `tool_update` *proposed* | The tool's own updates: check whether one is offered, apply it in the background when no work would be lost, or read or set automatic updating. |  |  | `fusion_apply_fusion_update` (partial) | | `uninstall` | Remove the bridge's own cache directory (agent workspaces, rendered agent scripts, the Altium 365 token file). Altium Designer and the user's designs are... | `altium_uninstall` | `kicad_uninstall` | `fusion_uninstall` | | `verb_times` *proposed* | Measured run times of this bridge's verbs on this machine: per verb the count, p50, p90, max, last and failures, from its own run log, slowest p90 first. | `altium_verb_times` | `kicad_verb_times` | `fusion_verb_times` | | `window_info` | Altium's top-level windows plus any open dialogs, without screenshots. The cheap way to ask 'is a modal blocking the engine?'. | `altium_window_info` | `kicad_window_info` | `fusion_check_dialogs` (partial) |
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "eda-bridge-standard",-  "version": "0.29.0",+  "version": "0.29.1",   "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+26−2
@@ -1,10 +1,10 @@ {- "standard": "0.29.0",+ "standard": "0.29.1",  "reference": {   "bridge": "altium",   "version": "0.2.86"  },- "proposed": 65,+ "proposed": 67,  "compared": {   "kicad": "1.0.92",   "fusion360": "1.13.31"@@ -2092,6 +2092,18 @@     "note": "format eagle only: an EAGLE .sch and its .brd into a new Fusion electronics design with the parts instantiated (Fusion's own import, run in the background)"    }   },+  {+   "name": "import_step",+   "tier": "native",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_import_step",+    "match": "partial",+    "note": "the STEP opens as a NEW Fusion design; it is not yet placed with the board's 3D PCB"+   }+  },   {    "name": "install_library",    "tier": "native",@@ -4308,6 +4320,18 @@     "match": "exact"    }   },+  {+   "name": "tool_update",+   "tier": "app",+   "source": "proposed",+   "altium": null,+   "kicad": null,+   "fusion360": {+    "verb": "fusion_apply_fusion_update",+    "match": "partial",+    "note": "apply takes the update Fusion offers in the background when auto-update is on; auto through fusion_set_auto_update; check is read from Fusion's own update offer"+   }+  },   {    "name": "uninstall",    "tier": "app",
verbs/standard.json+92−7
@@ -1,10 +1,10 @@ {- "standard": "0.29.0",+ "standard": "0.29.1",  "reference": {   "bridge": "altium",   "version": "0.2.86"  },- "proposed": 65,+ "proposed": 67,  "compared": {   "kicad": "1.0.92",   "fusion360": "1.13.31"@@ -4141,7 +4141,8 @@    },    "hint": "pour_state lists the pours and their ids first. One undo step; a pour that refills to nothing is reported, not hidden.",    "pitfalls": [-    "Changing the net of a pour reconnects copper: run_drc afterwards."+    "Changing the net of a pour reconnects copper: run_drc afterwards.",+    "A tool that keeps a pour's clearance and thermals in its design rules (Altium) writes rules scoped to that pour rather than changing the pour itself; the reply says which."    ],    "related": [     "pour_state",@@ -4164,7 +4165,8 @@    "since": "0.28.1",    "agreedBy": [     "standard-lane",-    "kicad-lane"+    "kicad-lane",+    "altium-lane"    ]   },   {@@ -4205,7 +4207,8 @@    "since": "0.28.1",    "agreedBy": [     "standard-lane",-    "kicad-lane"+    "kicad-lane",+    "altium-lane"    ]   },   {@@ -4667,7 +4670,7 @@    "source": "proposed",    "summary": "Bring a design from another tool into a NEW native design with the parts instantiated: an EAGLE .sch with its paired .brd, a KiCad project, or an Altium project, through the tool's own importer.",    "input": {-    "format": "the source tool, an open list (eagle, kicad, altium, pads, cadstar, fabmaster, pcad, ...); required",+    "format": "the source tool, an open list (eagle, kicad, altium, pads, orcad, cadstar, fabmaster, pcad, ...); required",     "filePath": "the schematic or project file (required)",     "boardPath": "the paired board file, when the format keeps it separate",     "name": "the new design's name"@@ -4699,7 +4702,51 @@    "since": "0.28.1",    "agreedBy": [     "standard-lane",-    "kicad-lane"+    "kicad-lane",+    "altium-lane"+   ]+  },+  {+   "name": "import_step",+   "tier": "native",+   "source": "proposed",+   "summary": "Bring a STEP model in as 3D geometry placed with the board: an enclosure, a bracket or a mating part, for fit and clearance checks. Not a footprint's own model (that is add_body).",+   "input": {+    "filePath": "the STEP on the tool's machine (required)",+    "at": "[x, y, z] mm relative to the board origin, default [0, 0, 0]",+    "rotation": "[rx, ry, rz] degrees",+    "name": "what to call it"+   },+   "output": {+    "id": "the placed model",+    "bboxMm": "[x0, y0, z0, x1, y1, z1]",+    "bodies": "int"+   },+   "hint": "height_check and the bodies companion can then measure the board against it.",+   "pitfalls": [+    "A tool that can only open the STEP as a separate design answers partial and says so."+   ],+   "related": [+    "add_body",+    "height_check",+    "bodies",+    "export_step"+   ],+   "example": {+    "filePath": "C:/mech/enclosure.step",+    "at": [+     0,+     0,+     -3+    ]+   },+   "longRunning": true,+   "timeoutSeconds": 300,+   "proposedBy": "fusion-lane",+   "since": "0.28.1",+   "agreedBy": [+    "standard-lane",+    "altium-lane"    ]   },   {@@ -9262,6 +9309,44 @@    "longRunning": false,    "timeoutSeconds": 15   },+  {+   "name": "tool_update",+   "tier": "app",+   "source": "proposed",+   "summary": "The tool's own updates: check whether one is offered, apply it in the background when no work would be lost, or read or set automatic updating.",+   "input": {+    "action": "check | apply | auto (required)",+    "on": "bool (auto): turn automatic updating on or off; omitted, the setting is read"+   },+   "output": {+    "current": "the installed version",+    "offered": "the version offered, or null",+    "applied": "bool",+    "auto": "bool",+    "needsRestart": "bool"+   },+   "hint": "apply never closes unsaved work: it refuses with the documents that need saving. Updating the tool is the user's machine changing, so say so before apply.",+   "pitfalls": [+    "An update offered only through the tool's own dialog is read from that dialog and answered in the background, never left open.",+    "apply refuses while documents are unsaved, and an installer that needs a person at the Windows UAC prompt answers needs_user with what to approve."+   ],+   "related": [+    "readiness",+    "diagnostics",+    "install"+   ],+   "example": {+    "action": "check"+   },+   "longRunning": true,+   "timeoutSeconds": 600,+   "proposedBy": "fusion-lane",+   "since": "0.28.1",+   "agreedBy": [+    "standard-lane",+    "altium-lane"+   ]+  },   {    "name": "uninstall",    "tier": "app",