KiCad - the KiCad Bridge
Public Made by Adomby adom
Reference implementation of the KiCad bridge: multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.
Releases 350
Standalone per-platform binaries to download and run, no tools needed. The newest is pinned on top.
Stable link for websites and docs: /download/adom/kicad-bridge/latest
All releases showing 321-340 of 350
Issue #24: kicad_demo {all:true, background:true} runs the six-beat tour as a background job with structured progress — poll kicad_demo {progress:true} for percent/elapsedSec/estimatedSec/stepLabel (a real progress bar, from the bridge's own timing model), final poll returns the kicad_state payload (every window as base64 PNG) + narration. Staged beat mode unchanged and now carries progress fields too.
Two from live testing: (1) #23 fix — every window finder now requires the window to belong to a real KiCad process, so a browser tab titled 'KiCad ...' can never be mistaken for the app again. (2) #22 — new read-only kicad_state verb: every KiCad-owned window as inline base64 PNG (shots[]) plus logical state (editors inventory, modal dialogs, running flag) so web pages and AIs see the app's true multi-window state in one call.
Background symbol load, final activation step: Enter posted directly to the LIB_TREE control (geometry-located) with a PostMessage double-click fallback on the selected row. Filter + selection were already working; this closes the activate gap.
Background symbol load: the win32 tier now sends Down (select first filtered match) then Enter (activate) through the filter box, matching KiCad's own keyboard flow.
Root-cause fix for Device:R symbol loads (disc #656/#20): early config bootstraps could leave the user's sym/fp-lib-table with NO stock KiCad libraries (empty-table fallback when base_dir was unresolved). The bridge now self-heals at every boot: missing stock-template libraries are merged into the user tables, user rows untouched. Plus 0.9.83's plugin-free background navigate tier.
open_symbol_editor gains a plugin-free background navigate tier: WM_SETTEXT into the LIB_TREE filter + Enter, title-verified, zero focus theft. Loads the requested symbol even while eeschema's embedded Python (and thus the in-process plugin) is still cold — the #21 latency no longer blocks #20.
uninstall/testResidue: rmtree now chmods read-only files and retries (Windows git-object dirs inside the demo project's .history were undeletable).
kicad_uninstall {testResidue:true}: surgical removal of everything the daily verb suite creates (fixture dir, demo project, ADOM_VERBTEST parts inside the Adom libs, AdomVerbTest lib-table row, stale discovery files) without touching the plugin, the libraries themselves, or user data. The suite now runs it as its final phase.
Dialog sweeper fix from the first verb-suite runs: KiCad progress dialogs (Load PCB, plot/render progress) are now classified and left running — both sweep paths were clicking their only button, which is Cancel, silently aborting the load the verb had just started.
ALWAYS-background window contract: focus guardian is now KiCad-aware (only acts on KiCad thieves, adopts the user's own window switches, demotes the offender below the user's window), guard extended to 45s for slow async self-raises (3D render completion), launch verb added to the guarded set. New kicad-bridge-background dev skill encodes the doctrine; the daily verb suite now FAILS any verb that leaves a KiCad window in the foreground.
ab 2.0.35 alignment: docs/skills teach the new adom-bridge CLI name (adom-bridge-cli references swept); kicad_uninstall echoes the cascade flag so ab's bridge_uninstall cascade report shows context. No verb behavior changes.
Fix #20: kicad_open_symbol_editor now actually loads the requested symbol — waits up to 12s for a cold-started eeschema's plugin to bind, uses a library-qualified LIB_TREE filter (libraryName no longer discarded), and verifies the load: an unloaded symbol now returns success:false + editorOpened:true instead of a silent empty editor.
kicad_launch: cold-start the project manager (issue #19; open_editors now teaches that it only inventories). kicad_uninstall: full artifact removal for Adom Bridge's uninstall cascade (issue #18), declared via bridge.json uninstall field. SKILL.md legacy CLI-name sweep.
Naming sweep per adom/definitions: every surviving bare AD/HD abbreviation in hints, docs and skills now says Bridge (ab) / Hydrogen (ah). No functional change.
Plugin payload 0.9.1: select_and_load now orchestrates on the RPC worker thread — hop 1 sets the search filter, a 0.8s worker-side sleep lets KiCad's LIB_TREE debounce fire on the UI thread, hop 2 activates the pre-selected match (fixed the DataViewEvent constructor to the 3-arg overload). Verified live on AdomLapper: the Symbol Editor title goes to 'Adom:AdomDemo_IC' with zero focus/keyboard/cursor theft. open_symbol_editor now tries this plugin path first and falls back to the PowerShell navigate only when no plugin instance is alive.
Plugin payload v0.9.0: select_and_load's default transport is now background_activate — after the filter pre-selects the best match, it takes dvc.GetSelection() (avoiding the v0.6.0 whole-model walk that segfaulted) and activates it via a posted DATAVIEW_ITEM_ACTIVATED event plus a native VK_RETURN PostMessage to the tree's own hwnd. Zero focus theft, zero cursor movement, zero global keyboard input. useSendInput:true remains as the explicit noisy fallback.
Demo hardening from the live AdomLapper run: _prepare deletes stale KiCad .lck lockfiles in the demo project dir (a force-killed KiCad leaves them; the next open then hits a modal File Open Warning and the sheet stays untitled), and warm-up is idempotent (an existing Schematic+PCB editor pair is reused instead of spawning duplicates on every call).
Three bugs caught in the first live end-to-end demo run on a real laptop: (1) kicad_demo and kicad_export_molecule were missing from the dispatcher's window-spawning verb sets, so the background/focus-restore machinery skipped them and demo windows landed on top of the user's work — both now get capture/restore with the long 16s guard; (2) the demo's self-screenshot helper passed an empty kicad_info to screenshot_all and silently captured nothing; (3) the symbol beat now verifies the part actually loaded onto the canvas instead of narrating over a '[no symbol loaded]' editor.
Rename cut-over (Adom Desktop -> Adom Bridge, page adom/adom-desktop-kicad-bridge -> adom/kicad-bridge). bridge.json updateManifestUrl, docs, homepage and hero now point at the new slug, restoring auto-update (the old API manifest path 404s). The Mesa llvmpipe download URL moved to the new release store. User-facing copy and the KiCad-visible Adom library descriptions now say Adom Bridge; Hydrogen replaces HD. No verb, env, port, or protocol changes.
The caller-identity capture read the wrong place. On a relay call AD delivers the caller in args.caller.aiThread (from the --ai-thread flag or an explicit caller), not the X-Adom-Caller-* headers my 0.9.67 code read - so logging and window-labeling never fired. set_from_request() now reads args.caller first and headers as a fallback (headers remain the outbound direct-API format). Verified against the real wire shape from a live 1.9.183 desktop.