Adom Desktop - 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 7
Standalone per-platform binaries to download and run, no tools needed. The newest is pinned on top.
kicad_demo now returns the SAME shape as fusion_demo (stage, done, narrate, screenshots[{label,path}], steps, _hint), so the AI that HD's installer runs speaks one vocabulary for both bridges. The verb now CAPTURES its own screenshots per beat (labels schematic/board_2d/board_3d match Fusion's) instead of asking the caller to hunt window titles. A beat that cannot open no longer fails the demo: it narrates the skip and moves on ('never end a demo on an error screen'). The not-installed path narrates KiCad's honest advantage — free, open source, no trial clock or feature tier — and installs it on acceptance.
All releases
kicad_demo now returns the SAME shape as fusion_demo (stage, done, narrate, screenshots[{label,path}], steps, _hint), so the AI that HD's installer runs speaks one vocabulary for both bridges. The verb now CAPTURES its own screenshots per beat (labels schematic/board_2d/board_3d match Fusion's) instead of asking the caller to hunt window titles. A beat that cannot open no longer fails the demo: it narrates the skip and moves on ('never end a demo on an error screen'). The not-installed path narrates KiCad's honest advantage — free, open source, no trial clock or feature tier — and installs it on acceptance.
The bridge no longer takes over the user's screen. navigate_symbol.ps1 previously did an Alt-key foreground trick, SetForegroundWindow, SetCursorPos (moving the user's physical mouse) and SendKeys typing — so if you were working, it typed on top of you. It now sets the search box via UIA ValuePattern (no focus) with a WM_SETTEXT fallback and commits with PostMessage. kicad_send_key and kicad_click now PostMessage directly to the target window by default: no focus theft, no cursor movement, and keys can never leak into the user's active app. Modifier chords and canvas clicks that genuinely need real input return errorCode foreground_required with a hint to WARN the user (~5s) and opt in via allowForeground. launch_editor.ps1 de-foregrounded (UIA Invoke needs no focus).
kicad_demo: a first-class, narrated six-step showcase (symbol, its footprint, that part in 3D, a schematic, the 2D board, the 3D board). Generates every asset in code (ships no sample files) and borrows KiCad's own bundled 3D models. If KiCad is missing it OFFERS to install it: kicad_demo {installKiCad:true} installs silently then runs the tour. Each step returns say/pointOut/window so the AI can narrate and screenshot.
Runtime zip slimmed 31%: removed skills/ (already shipped by the container pkg), demo/, README/CONTRIBUTING/plugin-prompt docs, hero fonts and all images. Keeps code, certs/cacert.pem, .ps1 UIA scripts, templates/blank-board.kicad_pcb and the runtime SKILL.md. No functional change.
kicad_export_molecule: one-shot desktop half of the Adom molecule pipeline (STEP export + silkscreen top/bottom renders + sibling sch/pro discovery + exact container next-steps for step2glb -> adom-molecule). capabilities.py grounds schematic-IPC as a KiCad 11 feature (kipy get_schematic).
Publishing hygiene (SDK re-audit #84): runtime zip is now a Release /download/ asset (not a /files blob); manifest repointed + updateManifestUrl added. enable_software_opengl now fetches Mesa llvmpipe from the Release /download/ asset instead of a /files blob.
Legacy-footprint placement + robust background FP-editor 3D. (1) place_footprint now accepts legacy (module ...) footprints (KiCad<=5 / EAGLE-imported / most chip-fetcher parts): the wrapper is normalized to (footprint ...) so the part splices into a preview board cleanly. (2) The Footprint Editor's 3D viewer opens through the embedded plugin instead of an Alt+3 keystroke: the FP editor is a frame inside the pcbnew process, so the bridge resolves that frame index and posts the live-resolved '3D Viewer' menu id to it — no focus theft, and it fixes an UnboundLocalError (VK_MENU) that broke the path entirely. (3) kicad_click rejects out-of-range coords when relative=True instead of clicking far off-screen (which could hit another window's controls and crash KiCad).