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.
v0.9.59: (1) place_footprint accepts legacy (module ...) footprints (many chip-fetcher/EAGLE parts) — normalize to (footprint), so they can be placed on a preview board. (2) FP-editor 3D viewer now opens via the reverse-bridge plugin (the FP editor is a pcbnew frame — resolve its frame_index + live 3D-Viewer menu id), replacing the broken Alt+3 path that raised UnboundLocalError on VK_MENU and needed stolen focus. (3) kicad_click guards against pixel coords passed with relative=True (was clicking off-screen → could crash KiCad).
v0.9.65: align kicad_demo to the fusion_demo contract (stage/done/narrate/screenshots/steps), capture its own screenshots, never end on an error screen
v0.9.58: (1) 3D-viewer menu id now RESOLVED live from get_menu_ids (drifts across KiCad builds: was 20563, is 20568 on KiCad 10 winvm) instead of hardcoded — fixes open_3d_viewer on fresh installs. (2) export_pdf: KiCad 10 now requires --layers; default them for PDF too + accept layers as a list, not only a comma-string.
v0.9.64: NEVER steal the user's screen. navigate_symbol.ps1 rewritten to UIA ValuePattern + PostMessage (was foregrounding, moving the mouse and SendKeys-typing over the user); send_key/click now post to the window by default; launch_editor.ps1 de-foregrounded. Focus paths are opt-in and must warn first.
v0.9.59: (1) place_footprint accepts legacy (module ...) footprints (many chip-fetcher/EAGLE parts) — normalize to (footprint), so they can be placed on a preview board. (2) FP-editor 3D viewer now opens via the reverse-bridge plugin (the FP editor is a pcbnew frame — resolve its frame_index + live 3D-Viewer menu id), replacing the broken Alt+3 path that raised UnboundLocalError on VK_MENU and needed stolen focus. (3) kicad_click guards against pixel coords passed with relative=True (was clicking off-screen → could crash KiCad).
v0.9.59: (1) place_footprint accepts legacy (module ...) footprints (many chip-fetcher/EAGLE parts) — normalize to (footprint), so they can be placed on a preview board. (2) FP-editor 3D viewer now opens via the reverse-bridge plugin (the FP editor is a pcbnew frame — resolve its frame_index + live 3D-Viewer menu id), replacing the broken Alt+3 path that raised UnboundLocalError on VK_MENU and needed stolen focus. (3) kicad_click guards against pixel coords passed with relative=True (was clicking off-screen → could crash KiCad).