← Commit history

Publish 1.0.144

John Lauer ·7bbd8a4aaf ·1mo ago ·parent d3619d8
4 files changed +74−8
README.md+9−3
@@ -52,6 +52,10 @@ How the dock card, the dashboard and this demo fit together: [docs/dashboard.md] | [How the bridge compares](docs/comparison.md) | Feature matrix against every notable KiCad MCP server and AI tool, with the gaps on both sides. | | [The Rust port plan](docs/rust-port-plan.md) | One dependency-free binary: what moves to KiCad's API, what ab already does, what PowerShell goes away, phases and risks. | | [The ESC G431 demo: placement and routing by three engines](docs/esc-demo.md) | A real public Adom board placed and routed from scratch by Claude Fable 5.1, GPT-6 Astra and Freerouting through the bridge, with real times, result quality, tokens, dollars and agent counts per engine. |+| [Native zone plans](docs/native-zone-plan.md) | `kicad_apply_zone_plan`: one Undo step, full-candidate DRC, the no-op and refill contracts. |+| [Native silkscreen text](docs/native-silk-text.md), [graphics](docs/native-silk-graphics.md) and [fields](docs/native-silk-fields.md) | The stable-ID silk batch verbs, what each refuses, and what KiCad 10.0.5 will not do over IPC. |+| [Linked view refresh](docs/linked-view-refresh.md) | `kicad_refresh_board_views`: refreshing one PCB editor and its bound 3D viewer in the background. |+| [Astra's working notes](docs/CODEX-ASTRA.md) | How the AI Flow thread contributes to this bridge: preflight, branch PRs, acceptance. The three `*-astra-prompt.md` files beside it are the prompts used for the ESC demo runs. | | [Your wiki page as a KiCad PCM repository](docs/pcm.md) | The page serves `repository.json`, `packages.json` and the zips anonymously, so it is a Plugin and Content Manager repository as-is: the sample library package, the packer, adding the repository in KiCad or with `kicad_pcm_add_repository`, and updates through PCM's Update button or `kicad_pcm_install {update:true}`. |  ## Live routing (from 0.9.340)@@ -107,8 +111,9 @@ window-targeted (UIA / `PostMessage`), so you can keep working while it runs.  ## How it fits together -The bridge is a `spawn.kind: python` process Bridge launches on the user's machine (`entrypoint:-server.py`, `port: 0`: Bridge picks the port and passes `ADOM_BIND_HOST`). It speaks HTTP+The bridge is one native Rust executable, `kicad-bridge.exe`, that Adom Bridge launches on the user's+machine (`port: 0`: Adom Bridge picks the port and passes `ADOM_BIND_HOST`). There is no Python or other+runtime to provision. It speaks HTTP (`POST /command`, `GET /status`) and reaches KiCad through **four control surfaces**, picking the lightest one that can do the job. @@ -221,7 +226,8 @@ viewer. This is how every 3D shot above exists.  ## Verb reference -All 47 verbs (prefix `kicad_`). Call `kicad_describe` for the live catalog with per-verb hints,+117 verbs as of 1.0.33 (prefix `kicad_`); the groups below name the core set, not every verb. `kicad_describe` is the+live catalog and the source of truth, with per-verb hints, related verbs, and pitfalls.  **Windows & UI**: `launch`, `open_board`, `open_schematic`, `open_symbol_editor`, `open_footprint_editor`,
SKILL.md+30−1
@@ -363,6 +363,35 @@ Publishing your own repository (the packer, the layout, the release loop, and wh  Install N parts, call this once, then show them all (wiki #51). It reloads every open editor's library tree in place (seconds, nothing closed) and, given `footprints: ["Lib:Name", ...]`, loads each in the Footprint Editor as proof (`verified`, `probed[]`). `force: true` is the process restart and refuses while KiCad runs unless `confirmRestart: true`. +## Silkscreen and zone plans (from 1.0.22)++Stable-ID batch edits on the live board, each one native Undo step, each gated on a full-candidate DRC that counts new warnings as well as errors. All take `filePath` and `expectedRevision` (from `kicad_routing_state`), work in board-frame mm on either face, and answer with the IDs to use next time: never match by string.++| Verb | What it does |+| --- | --- |+| `kicad_text_bounds` | Read-only. Measures candidate silk text with KiCad's own text metrics (mirroring and justification change the box). Measure before you solve label positions. |+| `kicad_silk_text_batch` | `create` / `update` / `remove` standalone stroke-font `gr_text` on F.SilkS or B.SilkS. Footprint reference and value fields are refused here. |+| `kicad_silk_graphics_batch` | Lines, rectangles (2 points), arcs (start, mid, end) and Bezier leaders (4 points) on silk, solid stroke, unfilled. Locked or non-silk IDs refuse. |+| `kicad_silk_fields_batch` | Moves and resizes footprint Reference and Value fields by field UUID. KiCad 10.0.5 refuses this write over IPC: the verb answers `native_field_update_unsupported` and changes nothing. Treat that as final on that KiCad, do not retry. |+| `kicad_apply_zone_plan` | Reconciles a complete, explicitly owned zone plan (create, update, remove) in one Undo step. An unchanged plan answers `mutated:false, undoSteps:0` in about a second without running DRC. It never refills: `refillRequired` tells you to call `kicad_zone_state {refill:true}`, which answers an acknowledgement (`refillRequested`), not a finished fill. Poll `kicad_zone_state` for the result. |++Two contract points shared by all of them. A removal is verified after the commit (`deletionVerified`), because KiCad applies deletions at commit time. And `postCommitError` means the edit LANDED and only the follow-up read failed: read the state before you replay anything. None of them saves the board or redraws the 3D viewer unless asked; `kicad_refresh_board_views {pcbHwnd}` fires View > Refresh on that exact editor and its uniquely bound 3D viewer in the background, and answers `refreshRequested`, not proof of a finished render. Design notes: `docs/native-silk-text.md`, `docs/native-silk-graphics.md`, `docs/native-silk-fields.md`, `docs/native-zone-plan.md`, `docs/linked-view-refresh.md`.++`kicad_select_net {filePath, net}` selects every copper item of a net so the editor highlights it (then `kicad_send_key {hwnd, menu:"Zoom to Selection"}` frames it); `kicad_select_clear` undoes it. Selection is not an edit. `kicad_autoroute {reservePlanes:true}` (from 1.0.20) writes full-board plane layers to the router as power layers so it keeps signals off them; the reply carries `segmentsOnPlaneLayers` and `routed.widened` (returned wires widened to their net-class width).++## Driving the 3D viewer and menus without the mouse++`kicad_3d_view {action, count, pauseMs}` fires View-menu commands on the 3D Viewer by posted message: zoom, rotate, pan (`pan_left`, `pan_right`, `pan_up`, `pan_down`), view orientation, flip, or `action:"tour"`. No focus, no cursor, works with the viewer buried, and a window recording still sees every frame. `count` repeats with `pauseMs` between, so a slow orbit is one call (keep `pauseMs` at 500 or more on a big board). `kicad_menu_items {hwnd, contains}` lists a window's real menu entries first: labels differ between KiCad versions.++**Bodies missing in 3D? Check the viewer's own toggles before you bisect the board (from 1.0.33).** `3d_viewer.json` can hide whole classes of footprint bodies (SMD, through-hole, virtual, not-in-POS, DNP) in the viewer AND in `kicad-cli pcb render`, so a board whose every model resolves can still show pads only. `kicad_model_check` reports the flags, the count of modelled footprints per class, and a `_viewerHint` when a hidden class exists on the board; the 3D show verbs carry the same as `_modelHint`. `kicad_3d_viewer_settings {}` reads them and `{"smd": true}` sets one. Setting refuses with `kicad_running` while KiCad is up, because KiCad rewrites the file from memory on exit. These are the USER's preferences: change them because they asked or the proof needs it, and say that you did. The show verbs also report `titleConfirmed`: false means the window title never showed the board you asked for, so do not present that frame as proof.++## Window placement, the taskbar and foreground notices++- **Placement memory (from 1.0.14).** The bridge remembers where the user keeps each editor kind (`~/.adom/kicad-bridge-placement.json`) and puts a new or restarted frame back there; replies say `placementRestored`. Do not re-tile windows yourself after a restart.+- **`kicad_taskbar_repair` (from 1.0.30).** Standalone PCB and schematic editors showed a blank white taskbar icon because KiCad's installer leaves the identity blank on those Start Menu shortcuts. The bridge writes KiCad's OWN identity onto them at startup; the verb runs it on demand and reports what it changed. It never invents an identity of its own.+- **`foregroundToastMinutes` (from 1.0.31, default 10, `0` = never).** When a verb the AI asked for must take the foreground, the user gets one toast per that many minutes, not one per call. Set it with `kicad_set_settings {"foregroundToastMinutes": 0}`; the 3 s on-screen caption on the driven box stays either way.+- A failed editor close now answers with `dialogsSeen` and `editorCloseVerbs`: quote them when you report a stuck close.+ ## Progress and operations  `kicad_progress {}` returns `active[]` frames (phase, stepLabel, percent, ETA, confidence, a `stepShot` of the phase's window) while a slow verb runs; `kicad_status.operations` lists active and recent runs (`yours` filters to your thread); `kicad_verb_times {}` gives per-verb timing stats (count, p50, p90, failures). The native bridge serves these on their own worker threads, so a poll answers in tens of milliseconds during a long open or a routing commit.@@ -406,7 +435,7 @@ From 1.0.0 the bridge is one Windows executable with no runtime to provision: `k | `kicad_diagnostics` | Read-only self-inspection (env, detection breakdown, processes, path probe) | | `kicad_plugin_diagnose` | Why is the reverse-bridge plugin not loading? One call, every artifact | | `kicad_install_plugin` | Install the reverse-bridge plugin into KiCad (idempotent) |-| `kicad_bridge_status` | Probe running KiCad plugin instances (multi-instance health) |+| `kicad_bridge_status` | Probe running KiCad plugin instances (one row per live editor process) | | `kicad_bridge_call` | Low-level IPC into a live pcbnew/eeschema, `bridge_status` FIRST to find a live instance | | `kicad_demo` | Six-beat showcase tour: staged, or a background job with percent/ETA progress | 
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "kicad-bridge",-  "version": "1.0.143",+  "version": "1.0.144",   "type": "app",   "description": "Skills for your container so your AI knows how to drive the KiCad bridge, and how to contribute a fix back (kicad-bridge-contributing). The bridge runtime itself is the release zip; Adom Bridge loads that.",   "tags": [
page.json+34−3
@@ -4,7 +4,7 @@   "slug": "kicad-bridge",   "title": "KiCad - the KiCad Bridge",   "brief": "Your real KiCad, driven by AI in the background: a native Rust bridge (Windows) with 116 kicad_* verbs for editors, libraries, placement, routing, pours, DRC, exports and screenshots. This page's repo is the full source; fixes come back as wiki PRs (skill kicad-bridge-contributing).",-  "version": "1.0.111",+  "version": "1.0.144",   "tags": [     "kicad",     "pcb",@@ -71,7 +71,7 @@   "skills": [],   "author_name": "John Lauer",   "source_visibility": "public",-  "description": "Your real KiCad, driven by AI in the background: a native Rust bridge (Windows) with 110+ kicad_* verbs for editors, libraries, placement, routing, pours, DRC, exports and screenshots. This page's repo is the full source; fixes come back as wiki PRs (skill kicad-bridge-contributing).",+  "description": "Skills for your container so your AI knows how to drive the KiCad bridge, and how to contribute a fix back (kicad-bridge-contributing). The bridge runtime itself is the release zip; Adom Bridge loads that.",   "dependencies": {     "adom/adom-bridge": "^2.0.3"   },@@ -87,9 +87,15 @@     "uninstall.sh",     "skills/kicad-interaction/SKILL.md",     "skills/kicad-3d-models/SKILL.md",+    "skills/kicad-autorouting/SKILL.md",+    "skills/kicad-place-route-loop/SKILL.md",+    "skills/kicad-copper-pours/SKILL.md",     "skills/kicad-tour/SKILL.md",     "skills/kicad-tour/tour_runner.py",     "skills/kicad-web-control/SKILL.md",+    "skills/kicad-uia/catalog.json",+    "skills/kicad-uia/SKILL.md",+    "skills/kicad-bridge-contributing/SKILL.md",     "skills/kicad-bridge-dev/SKILL.md",     "skills/kicad-bridge-publish/SKILL.md",     "skills/kicad-bridge-hero/SKILL.md",@@ -127,5 +133,30 @@   "binary_name": "adom-bridge-kicad",   "authors": null,   "author_handle": "john",-  "authors_json": null+  "authors_json": null,+  "agent_permissions": {+    "allow_bash": [+      "adom-desktop-kicad-bridge"+    ],+    "allow": [+      "adom-desktop-kicad-bridge status, readiness, describe, diagnostics, window_info, state and open_editors are read-only queries against KiCad and the bridge; they change nothing.",+      "adom-desktop-kicad-bridge list_versions, list_footprints, list_symbols, list_design_rules and adom_library_status read library tables and files; they change nothing.",+      "adom-desktop-kicad-bridge plugin_diagnose, verb_times, progress, errors, log_tail, get_settings and check_for_updates read bridge logs and settings; they change nothing.",+      "adom-desktop-kicad-bridge screenshot_all captures KiCad windows to images; it changes nothing in KiCad.",+      "adom-desktop-kicad-bridge extract_netlist, trace_net, find_connections and analyze_connections read the open design; they change nothing.",+      "adom-desktop-kicad-bridge lint_board, lint_schematic, lint_library, run_drc and run_erc run KiCad's own checks and produce reports; they change nothing."+    ],+    "soft_deny": [+      "adom-desktop-kicad-bridge install_library, install_library_bundle, install_symbol, install_footprint, pcm_install and pcm_uninstall write to the user's KiCad libraries.",+      "adom-desktop-kicad-bridge adom_library_heal, set_design_rules, format_upgrade and set_settings rewrite library files, rules or settings.",+      "adom-desktop-kicad-bridge launch, close, close_symbol_editor, close_footprint_editor, close_3d_viewer and dismiss_dialogs start or stop KiCad windows.",+      "adom-desktop-kicad-bridge uninstall, install_plugin, upgrade and enable_software_opengl reconfigure the user's KiCad or the bridge.",+      "adom-desktop-kicad-bridge export_gerber, export_gerbers, export_pdf, export_svg, export_step, export_molecule, export_bom_csv and export_part write files.",+      "adom-desktop-kicad-bridge make_part_project and place_footprint edit or create designs; demo, send_key and click drive KiCad's windows and inject input."+    ],+    "environment": [+      "adom-desktop-kicad-bridge is the KiCad Bridge; every kicad verb also passes Adom Bridge's human-approval gate on the user's desktop (caller identity, per-call reason, Activity Log).",+      "adom-desktop-kicad-bridge container approval is the first of two gates; the desktop gate is the second."+    ]+  } }\ No newline at end of file