← Commit history

v0.9.78: CLI-name sweep adom-bridge-cli -> adom-bridge (ab 2.0.35); kicad_uninstall echoes cascade flag

John Lauer ·3e8d880a90 ·2mo ago ·parent 096f46c
7 files changed +31−27
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.77+0.9.78
README.md+4−4
@@ -54,10 +54,10 @@ during Hydrogen's install. Six beats, in the order a hardware person thinks: | 6 | the finished **board in 3D** |  ```bash-adom-bridge-cli kicad_demo '{}'                      # start: prepares, warms KiCad, opens beat 1-adom-bridge-cli kicad_demo '{"step":"footprint"}'    # ...then follow data.nextCall each time-adom-bridge-cli kicad_demo '{"all":true}'            # bulk (non-interactive; slower than one request budget)-adom-bridge-cli kicad_close '{"force":true}'         # tear down+adom-bridge kicad_demo '{}'                      # start: prepares, warms KiCad, opens beat 1+adom-bridge kicad_demo '{"step":"footprint"}'    # ...then follow data.nextCall each time+adom-bridge kicad_demo '{"all":true}'            # bulk (non-interactive; slower than one request budget)+adom-bridge kicad_close '{"force":true}'         # tear down ```  **It narrates itself.** Every beat returns `say` (a line to speak), `pointOut`
SKILL.md+16−16
@@ -1,15 +1,15 @@ --- name: adom-desktop-kicad public: true-description: "Launch and drive KiCad on the user's laptop (KiCad 7/8/9/10 supported, multi-version side-by-side) from this container via the adom-bridge-cli CLI. Open schematics/boards/symbols/footprints, run DRC, install sym-lib-table / fp-lib-table libraries, show the 3D viewer, capture KiCad window screenshots, send keyboard shortcuts and click coordinates. Trigger words: kicad, open schematic, open board, open pcb, open symbol, open footprint, KiCad symbol editor, KiCad footprint editor, KiCad 3D viewer, run DRC, install KiCad library, sym-lib-table, fp-lib-table, KiCad screenshot, kicad_send_key, kicad_click, kicad_window_info, kicad_screenshot_all, close KiCad, kicad versions, kicad_list_versions, KiCad bridge."+description: "Launch and drive KiCad on the user's laptop (KiCad 7/8/9/10 supported, multi-version side-by-side) from this container via the adom-bridge CLI. Open schematics/boards/symbols/footprints, run DRC, install sym-lib-table / fp-lib-table libraries, show the 3D viewer, capture KiCad window screenshots, send keyboard shortcuts and click coordinates. Trigger words: kicad, open schematic, open board, open pcb, open symbol, open footprint, KiCad symbol editor, KiCad footprint editor, KiCad 3D viewer, run DRC, install KiCad library, sym-lib-table, fp-lib-table, KiCad screenshot, kicad_send_key, kicad_click, kicad_window_info, kicad_screenshot_all, close KiCad, kicad versions, kicad_list_versions, KiCad bridge." --- -# adom-bridge-cli — KiCad bridge+# adom-bridge — KiCad bridge  All commands dispatch to the KiCad Python bridge running alongside the desktop app. Invoke from this container via Bash:  ```bash-adom-bridge-cli kicad_<action> '<json_args>'+adom-bridge kicad_<action> '<json_args>' ```  The leading `kicad_` routes the call to the KiCad plugin; the `<action>` names below are the plugin-side command names.@@ -47,7 +47,7 @@ Users can have multiple KiCad versions installed at the same time. The bridge au  ```bash # Discover what's installed (run this first if unsure)-adom-bridge-cli kicad_list_versions '{}'+adom-bridge kicad_list_versions '{}' # → {"versions":[{"version":"10.0", "default":true, ...}, {"version":"9.0", ...}], "default":"10.0", "count":2} ``` @@ -55,10 +55,10 @@ Every `kicad_open_*` (and `install_*`, `run_drc`) command accepts an optional **  ```bash # Open in KiCad 10 (newest — default if you omit kicadVersion)-adom-bridge-cli kicad_open_board '{"filePath":"C:/designs/foo.kicad_pcb"}'+adom-bridge kicad_open_board '{"filePath":"C:/designs/foo.kicad_pcb"}'  # Open in KiCad 9 explicitly (e.g. to check that an older project still works)-adom-bridge-cli kicad_open_board '{"filePath":"C:/designs/foo.kicad_pcb","kicadVersion":"9.0"}'+adom-bridge kicad_open_board '{"filePath":"C:/designs/foo.kicad_pcb","kicadVersion":"9.0"}' ```  If you pass a version that's not installed, the bridge returns a hint listing the installed versions. The success response includes `kicadVersionUsed` so you can confirm which install actually ran.@@ -69,8 +69,8 @@ If you pass a version that's not installed, the bridge returns a hint listing th  **KiCad is the user's HOST APP. Adom Bridge *detects* it — it won't silently auto-install it as a prewarm/dependency** (Bridge v1.9.47+). But if KiCad isn't found, **do NOT hand the user a manual download** — offer to install it for them and run `kicad_upgrade '{}'`. That verb installs the latest stable from the official downloads.kicad.org installer (silent `/S`, Windows only; may raise a UAC prompt) and **installs from scratch, not just upgrades**. The distinction: Bridge-core never auto-installs a host app, but a user-requested, agent-run install is exactly right. -- To answer **"what EDA tools / host apps do I have?"** across every bridge, call the Bridge-level verb **`adom-bridge-cli bridge_readiness '{}'`** — Bridge aggregates each bridge's host-app detection (KiCad, Fusion 360, …) into one report. Start here for any "do I have X installed?" question.-- For **KiCad specifically**, `adom-bridge-cli kicad_readiness '{}'` is a zero-side-effect read-only probe: `{hostApp, detected, ready, versionCount, defaultVersion, versions[]}`. It does not install the plugin or spawn subprocesses, and works even when KiCad is absent (`detected:false`). Use `kicad_list_versions` when you need the full per-version detail (paths, IPC API, lib tables).+- To answer **"what EDA tools / host apps do I have?"** across every bridge, call the Bridge-level verb **`adom-bridge bridge_readiness '{}'`** — Bridge aggregates each bridge's host-app detection (KiCad, Fusion 360, …) into one report. Start here for any "do I have X installed?" question.+- For **KiCad specifically**, `adom-bridge kicad_readiness '{}'` is a zero-side-effect read-only probe: `{hostApp, detected, ready, versionCount, defaultVersion, versions[]}`. It does not install the plugin or spawn subprocesses, and works even when KiCad is absent (`detected:false`). Use `kicad_list_versions` when you need the full per-version detail (paths, IPC API, lib tables).  ## Commands @@ -104,19 +104,19 @@ If you pass a version that's not installed, the bridge returns a hint listing th  ```bash # Open a schematic-adom-bridge-cli kicad_open_schematic '{"path":"C:/designs/foo.kicad_sch"}'+adom-bridge kicad_open_schematic '{"path":"C:/designs/foo.kicad_sch"}'  # List open KiCad windows-adom-bridge-cli kicad_window_info '{}'+adom-bridge kicad_window_info '{}'  # Screenshot every KiCad window-adom-bridge-cli kicad_screenshot_all '{}'+adom-bridge kicad_screenshot_all '{}'  # Run DRC-adom-bridge-cli kicad_run_drc '{"board_path":"C:/designs/foo.kicad_pcb"}'+adom-bridge kicad_run_drc '{"board_path":"C:/designs/foo.kicad_pcb"}'  # Install a library pair-adom-bridge-cli kicad_install_library '{+adom-bridge kicad_install_library '{   "name":"my-lib",   "sym_path":"C:/libs/my-lib.kicad_sym",   "fp_path":"C:/libs/my-lib.pretty"@@ -131,10 +131,10 @@ Every failing response includes a `_hint` field with a human-readable next step  Earlier versions of the KiCad bridge listened on hardcoded port `8772`. **As of v1.8.31, bridges use OS-assigned ephemeral ports** — every spawn gets a new free port. You never need to know it. -- The CLI (`adom-bridge-cli kicad_*`) automatically routes through adom-desktop's direct API (default port 47200 as of v1.8.33, with auto-fallback to 47201-47209 if 47200 is taken). adom-bridge-cli then forwards to the bridge's actual runtime port.+- The CLI (`adom-bridge kicad_*`) automatically routes through adom-desktop's direct API (default port 47200 as of v1.8.33, with auto-fallback to 47201-47209 if 47200 is taken). adom-bridge then forwards to the bridge's actual runtime port. - The bridge port is internal plumbing and can change every spawn. `bridge_list` reports it as `spawn.runtimePort` for debugging only — do NOT hardcode that anywhere.-- Why: this lets adom-bridge-cli coexist with Hydrogen (which used to claim 8772 itself) and any other tool that grabs ports in the 8000 range. Side-by-side bridges from different apps no longer collide.-- The relay path (Docker → wss proxy → Windows GUI) is unchanged — same `adom-bridge-cli kicad_*` verbs, same JSON shape.+- Why: this lets adom-bridge coexist with Hydrogen (which used to claim 8772 itself) and any other tool that grabs ports in the 8000 range. Side-by-side bridges from different apps no longer collide.+- The relay path (Docker → wss proxy → Windows GUI) is unchanged — same `adom-bridge kicad_*` verbs, same JSON shape.  If you ever find yourself wanting to talk directly to the KiCad bridge process: don't. Go through the verb dispatch. If the verb you need doesn't exist, request a feature in `adom-inc/adom-desktop`. 
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.77",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.77/adom-bridge-kicad-v0.9.77.zip",-  "sha256": "b0a50d1262eb84074fba0ed4d3378668f2d8568f05af455fa57d20f91b3c68c4",-  "size": 374204,+  "version": "0.9.78",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.78/adom-bridge-kicad-v0.9.78.zip",+  "sha256": "fe8093e95d901169e249f1df77bef73a80e911749a58c6b28daa5e0f31357f12",+  "size": 374309,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-14T01:28:56Z",+  "released_at": "2026-08-14T09:25:04Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
adom-bridge-kicad-v0.9.78.zipadded
⋯ 1 unchanged line ⋯
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.77",+  "version": "0.9.78",   "description": "Reverse bridge for KiCad \u2014 board/schematic introspection, lint via kicad-cli, plugin install, multi-instance probe, in-process DRC.",   "homepage": "https://wiki.adom.inc/adom/adom-bridge",   "author": "Adom Inc.",
handlers/uninstall.py+4
@@ -177,6 +177,10 @@ def handle_uninstall(kicad_info: dict, args: dict) -> dict:     ok = len(failed) == 0     return {         "success": ok,+        # ab 2.0.35+: bridge_uninstall cascades into this verb with+        # {cascade:true, name:"kicad"} while our files still exist; echo it so+        # the cascade report on ab's side shows this ran as part of a cascade.+        "cascade": bool(args.get("cascade")),         "dryRun": dry,         "removed": removed,         "failed": failed,