← Commit history

1.0.64: 1.0.64: adds to a board open in KiCad, two fixes for footprints KiCad rebuilds over its API, and 17 of the EDA Bridge Standard's core verbs.

Colby Knox ·0b826e63a7 ·14d ago ·parent a8fbf9f
**Adding items to an open board.** KiCad 10.0.x creates nothing from text over its API, so the bridge now encodes the new items as KiCad's protobuf items itself (commit:"create-items", one Undo step): - board_outline and import_svg are created live; - add_footprint (with duplicateOf and count) and add_mounting_hole create a part live when the same library footprint is already on that side of the board with the same pads and graphics: the bridge copies KiCad's own encoding of it, with fresh ids, the new pose, reference, value and pad nets; - anything else, a footprint the board lacks and update_footprints_from_library included, still refuses with live_create_unsupported, now with liveCreateWhy. **Footprints KiCad rebuilds over its API (#126, #129).** KiCad stores every footprint it rebuilds without a polygon's repeated closing point, which DRC then reports as lib_footprint_mismatch: - moves, live field edits and live part edits now name those parts in closingVerticesDroppedByKiCad, with how to restore them; - a live field move (silk_fields_batch) no longer fails otherBoardDataVerified because of it. **New standard verbs:** - **footprint libraries:** copy_footprint, rename_footprint, remove_footprint, xcopy_footprint, add_body; - **symbol libraries:** clone_symbol, rename_symbol, set_params, set_visibility, symbol_prims; - **sheets:** place_on_sch, doc_params, sheet_params (the BOM write-back onto placed parts), part_parameters; - **the board:** layers, silk_state, ripup_nets.
1 file changed +19−2
README.md+19−2
@@ -257,7 +257,7 @@ viewer. This is how every 3D shot above exists.  <!-- verbs:start (tools/readme_verbs.py writes this) --> -Every verb of this build (235, `kicad_describe` is the live catalog with inputs, hints and pitfalls). A name marked *standard* is the EDA Bridge Standard's name for the verb after the arrow.+Every verb of this build (252, `kicad_describe` is the live catalog with inputs, hints and pitfalls). A name marked *standard* is the EDA Bridge Standard's name for the verb after the arrow.  **Board model and reads (EDA Bridge Standard)** (12) @@ -466,27 +466,31 @@ Every verb of this build (235, `kicad_describe` is the live catalog with inputs, | `kicad_project_rename` | Rename a project: the .kicad_pro, root .kicad_sch, .kicad_pcb, .kicad_prl (and .kicad_dru, backups folder), with the references inside updated (project file entries, every schematic's instance headers, the board's sheet references and title). Refused while KiCad has the project open. | | `kicad_project_snapshot` | Timestamped copy of the project's files into <project>/snapshots/<stamp>[-label]/, plus schematic and board PDFs made with kicad-cli. | -**Windows, editors, install and the bridge** (63)+**Windows, editors, install and the bridge** (80)  | Verb | What it does | |---|---| | `kicad_3d_view` | Drive the 3D Viewer without the mouse: zoom, rotate, view orientation, flip, or a scripted tour; menu commands posted to the viewer in the background. | | `kicad_3d_viewer_settings` | Read or set the 3D viewer's model-visibility toggles (SMD, through-hole, virtual, not-in-POS, DNP) that can hide every chip body. |+| `kicad_add_body` | Put a 3D body (a STEP or VRML model) on a library footprint. It REPLACES the footprint's models unless keepExisting:true, so a re-import never stacks a second body. | | `kicad_align_parts` | *standard* → `kicad_align_footprints` | | `kicad_analyze_connections` | Connectivity overview: suspected-unconnected pins, power nets, highest-fanout nets/components (read-only). | | `kicad_bridge_call` | Retired: there is no in-KiCad plugin to call. Use the verb that does the job directly. | | `kicad_bridge_status` | Retired: the in-KiCad Python plugin (reverse bridge) is not part of the native bridge. Reports that, plus what replaced each of its jobs. | | `kicad_check_for_updates` | Read-only: installed KiCad vs latest stable. | | `kicad_click` | Click at coordinates inside a KiCad window. |+| `kicad_clone_symbol` | Copy a symbol inside a .kicad_sym under a new name, every unit and body style included. | | `kicad_close` | Close KiCad (editors first, then the project manager). | | `kicad_close_3d_viewer` | Close the 3D viewer window. | | `kicad_close_footprint_editor` | Close the Footprint Editor window. | | `kicad_close_symbol_editor` | Close the Symbol Editor window. |+| `kicad_copy_footprint` | Duplicate a footprint inside a .pretty library under a new name (every pad, graphic, text and 3D model copied). | | `kicad_create_part_project` | *standard* → `kicad_make_part_project` | | `kicad_demo` | Six-beat KiCad showcase tour: staged, or a background job with structured progress (percent/ETA), an ab demo-panel remote, captions, narration, per-beat verification and a kicad_state final payload. | | `kicad_describe` | List every verb with input, example, hint, related verbs and pitfalls. | | `kicad_diagnostics` | Environment the bridge runs in: user, paths, env vars that matter, KiCad config dir. | | `kicad_dismiss_dialogs` | Programmatically expire KiCad dialogs (auto-clears the benign OpenGL/software-render notice; {all:true} clears every dialog). |+| `kicad_doc_params` | Read or set a sheet's document parameters: KiCad's title block (Title, Revision, Date, Company, Comment1 to Comment9). | | `kicad_edit_parts` | *standard* → `kicad_edit_footprint` | | `kicad_enable_software_opengl` | LAST-RESORT fallback: deploy Mesa llvmpipe software OpenGL into KiCad's bin so it renders on a GPU-less host (Hyper-V/RDP/headless). SLOW (CPU). Never suggest proactively. | | `kicad_extract_netlist` | Extract the full netlist from a schematic: every component and every net with its nodes (read-only, via kicad-cli). |@@ -495,6 +499,7 @@ Every verb of this build (235, `kicad_describe` is the live catalog with inputs, | `kicad_get_settings` | Read the bridge's user-visible settings (overlay badges, ...). | | `kicad_ipc_api` | Read or flip KiCad's IPC API server switch (Preferences > Plugins) that live routing needs. | | `kicad_launch` | Cold-start KiCad (project manager) when nothing is running. |+| `kicad_layers` | The board's whole layer set: KiCad's id, name, kind (signal, power, mixed, user) and the user's name for each, and whether the open PCB editor shows it. | | `kicad_list_versions` | Every KiCad install found (registry and standard folders) with bin dir, kicad-cli path and version. | | `kicad_log_tail` | New KiCad log output since a byte offset: what KiCad said about ITSELF (read-only). | | `kicad_menu_items` | List a KiCad window's menu bar items (path, id, accelerator), optionally filtered by a substring: what kicad_send_key {menu} and kicad_3d_view can fire. |@@ -504,19 +509,28 @@ Every verb of this build (235, `kicad_describe` is the live catalog with inputs, | `kicad_open_footprint_editor` | Open the Footprint Editor (optionally at a footprint). | | `kicad_open_schematic` | Open a .kicad_sch in the schematic editor (eeschema). | | `kicad_open_symbol_editor` | Open the Symbol Editor (optionally at a symbol). |+| `kicad_part_parameters` | The parameter (field) names a project's placed parts carry, with how many parts carry each; or, with name, that parameter's value on every part. Read only. | | `kicad_place_footprint` | Deterministically place a footprint into a board preview. |+| `kicad_place_on_sch` | Place one symbol or a ';' list of symbols from a .kicad_sym on ONE new sheet, sized from the measured parts (12.7 mm gaps, 15.24 mm margins, A4 at least), each with the next free designator and its name as the value; fills the title block. | | `kicad_plugin_diagnose` | Retired: reports that no plugin is expected and whether a leftover Python plugin payload is still on disk. | | `kicad_prewarm` | Get this machine ready for a fast first KiCad call: detect KiCad, seed its first-run config, mark its setup wizard done, repair its taskbar shortcuts. Idempotent. | | `kicad_progress` | What this bridge is doing RIGHT NOW: one progress block per in-flight phase for THIS caller (stepLabel, percent, etaSec, confidence, blockedBy, stepShot), plus the machine's timing history. | | `kicad_read_footprint` | *standard* → `kicad_fp_info` | | `kicad_readiness` | Is KiCad installed and usable here; if not, the three alternatives (service-kicad, kicad-cli in your container, another box). | | `kicad_refresh_board_views` | Refresh the exact PCB editor and its already-open linked 3D viewer without focus or mouse. |+| `kicad_remove_footprint` | Delete one footprint from a .pretty library (a library file, not a part on the board: that is kicad_remove_parts). | | `kicad_remove_graphics` | *standard* → `kicad_delete_graphics` | | `kicad_remove_parts` | *standard* → `kicad_delete_footprint` |+| `kicad_rename_footprint` | Rename a footprint in a .pretty library: the file and the name inside it. |+| `kicad_rename_symbol` | Rename a symbol in a .kicad_sym (its units too); symbols that extend it follow the new name. | | `kicad_render_board_3d` | *standard* → `kicad_render_board` |+| `kicad_ripup_nets` | Delete every unlocked track, arc and via of the named nets live, as one Undo step (pads, pours and locked copper stay). | | `kicad_screenshot_all` | Screenshot every open KiCad window. | | `kicad_send_key` | Send a key to KiCad, or fire a menu item by label; chords and menu labels resolve to menu commands (background) |+| `kicad_set_params` | Set parameters on a library symbol (fields; a missing one is added hidden), optionally its value (the standard's comment) and its footprint link. | | `kicad_set_settings` | Change bridge settings; applies immediately (e.g. overlay badges stamped/cleared on live windows). |+| `kicad_set_visibility` | Show or hide one field of a library symbol. |+| `kicad_sheet_params` | Write parameters onto PLACED parts on the schematic sheets (the BOM write-back: MPN, Manufacturer, Mouser/DigiKey/LCSC numbers, anything): every unit of each designator, on whichever sheet of the project holds it. A missing parameter is added hidden. | | `kicad_show_2d_board` | Show the 2D board layout in the PCB Editor. | | `kicad_show_3d_board` | Show the whole board in 3D (the board's 3D viewer). | | `kicad_show_3d_chip` | Show a single part in 3D (the footprint's 3D view). |@@ -525,14 +539,17 @@ Every verb of this build (235, `kicad_describe` is the live catalog with inputs, | `kicad_show_project` | Show the whole electronics PROJECT: the KiCad Project Manager (top of the design tree). | | `kicad_show_schematic` | Show a schematic (2D) in the Schematic Editor. | | `kicad_show_symbol` | Show a schematic symbol in the Symbol Editor (design/library surface). |+| `kicad_silk_state` | The silkscreen as it stands: every part's body box, its designator and value as placed (text, position, size, rotation, shown), and the free texts and graphics on both silkscreen layers. | | `kicad_state` | KiCad's full state of the union: every owned window as inline base64 PNG + logical state. | | `kicad_status` | Bridge health, KiCad version, install location and uptime. |+| `kicad_symbol_prims` | A library symbol's drawing: primitives counted by kind, the body rectangle, the polylines' bounding box, units and body styles, the footprint link and filters. Read only. | | `kicad_taskbar_repair` | Fix the white taskbar icon on standalone KiCad editors by writing KiCad's own AUMID onto its Start Menu shortcuts. | | `kicad_trace_net` | Every pin on one named net (read-only). | | `kicad_uninstall` | Remove everything this bridge created: plugin payload, Adom symbol/footprint/3D libraries and their lib-table rows, Mesa fallback DLLs, discovery files, demo and staging projects. Never KiCad itself, never user projects. | | `kicad_upgrade` | Install/upgrade KiCad via the official installer (agent installs for the user). | | `kicad_verb_times` | Measured per-verb run times ON THIS MACHINE: count, p50, p90, max, last, failures from the append-only run log, sorted by p90 descending. | | `kicad_window_info` | Report geometry/state for open KiCad windows (auto-expires benign OpenGL dialogs). |+| `kicad_xcopy_footprint` | Copy a footprint ACROSS libraries: from fromLib into toLib (created when missing), optionally under a new name. |  <!-- verbs:end -->