← Commit history

v0.9.96: kicad_show_project — the 8th surface (electronics project / project manager). All 8 surfaces John listed now have a named verb.

John Lauer ·78b73691e1 ·2mo ago ·parent 82bc1e9
7 files changed +29−9
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.95+0.9.96
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.95",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.95/adom-bridge-kicad-v0.9.95.zip",-  "sha256": "526b6024d87c7748d12bc67ecae5d3f740dd45a5b47890dfdfdc803a706bdbc2",-  "size": 388116,+  "version": "0.9.96",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.96/adom-bridge-kicad-v0.9.96.zip",+  "sha256": "d26cca2b9dadc9472d4a10f24e73b4dc343cdd9442acd8fc5036ae3ce442f6d5",+  "size": 388470,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-14T19:19:18Z",+  "released_at": "2026-08-15T02:01:57Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
adom-bridge-kicad-v0.9.96.zipadded
⋯ 1 unchanged line ⋯
bridge.json+3−2
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.95",+  "version": "0.9.96",   "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.",@@ -72,7 +72,8 @@     "kicad_show_schematic",     "kicad_show_2d_board",     "kicad_show_3d_board",-    "kicad_show_library"+    "kicad_show_library",+    "kicad_show_project"   ],   "statusVerb": "kicad_status",   "timeouts": {
handlers/show.py+14
@@ -20,6 +20,7 @@ same background-first behavior, same verified loads — but with an obvious name and an obvious argument. All accept the KiCad analogue of Fusion's deviceset: symbolName/footprintName (+ optional libraryName), or filePath for the docs. """+from handlers.launch import handle_launch from handlers.open_files import handle_open_board, handle_open_schematic from handlers.open_symbol_editor import handle_open_symbol_editor import time@@ -27,6 +28,19 @@ from handlers.open_footprint_editor import (handle_open_footprint_editor, handle     _find_pcb_editor, _find_footprint_editor)  +def handle_show_project(kicad_info: dict, args: dict) -> dict:+    """Show the whole ELECTRONICS PROJECT — the KiCad Project Manager, optionally+    on a specific .kicad_pro. This is the top of the tree: from here the schematic,+    board, and every editor hang off one design. Args: filePath/project (.kicad_pro).+    With no path it just brings up (or confirms) the Project Manager."""+    a = dict(args or {})+    proj = a.get("filePath") or a.get("project")+    r = handle_launch(kicad_info, {"project": proj} if proj else {})+    if isinstance(r, dict):+        r.setdefault("surface", "project")+    return r++ def handle_show_symbol(kicad_info: dict, args: dict) -> dict:     """Show a schematic SYMBOL in the Symbol Editor. Args: symbolName (+ libraryName),     or libraryName alone to browse a library."""
server.py+5−1
@@ -30,7 +30,7 @@ from capabilities import build_capability_report from handlers.open_files import handle_open_board, handle_open_schematic from handlers.open_symbol_editor import handle_open_symbol_editor from handlers.open_footprint_editor import handle_open_footprint_editor, handle_open_3d_viewer-from handlers.show import (handle_show_symbol, handle_show_footprint, handle_show_3d_chip,+from handlers.show import (handle_show_project, handle_show_symbol, handle_show_footprint, handle_show_3d_chip,     handle_show_schematic, handle_show_2d_board, handle_show_3d_board, handle_show_library) from handlers.software_opengl import handle_enable_software_opengl from handlers.diagnostics import handle_diagnostics@@ -221,6 +221,9 @@ _VERB_CATALOG = {         "hint": "Absolute filePath to a board; opens the 3D viewer. Follow with screenshot_all to capture it.",         "related": ["kicad_open_board", "kicad_screenshot_all", "kicad_close_3d_viewer"],         "pitfalls": ["3D models only render if the footprints reference installed 3D model files", "the viewer takes a few seconds to render — wait before screenshotting"]},+    "show_project": {"summary": "Show the whole electronics PROJECT — the KiCad Project Manager (top of the design tree).", "long": True,+        "hint": "kicad_show_project {\"filePath\":\"...kicad_pro\"} opens the project manager on a project; no path just brings it up. Schematic/board/editors all hang off this.",+        "related": ["kicad_show_schematic", "kicad_show_2d_board", "kicad_launch"], "pitfalls": ["absolute Windows path to the .kicad_pro; no %VAR% expansion"]},     "show_symbol": {"summary": "Show a schematic symbol in the Symbol Editor (design/library surface).", "long": True,         "hint": "kicad_show_symbol {\"symbolName\":\"R\",\"libraryName\":\"Device\"} — verified background load. libraryName alone browses the library.",         "related": ["kicad_show_footprint", "kicad_show_3d_chip", "kicad_show_library"], "pitfalls": ["the symbol must be in an installed sym-lib-table library"]},@@ -478,6 +481,7 @@ COMMAND_HANDLERS = {     "open_symbol_editor": handle_open_symbol_editor,     "open_footprint_editor": handle_open_footprint_editor,     "open_3d_viewer": handle_open_3d_viewer,+    "show_project": handle_show_project,     "show_symbol": handle_show_symbol,     "show_footprint": handle_show_footprint,     "show_3d_chip": handle_show_3d_chip,
skills/kicad-bridge-test/run_verb_tests.py+1
@@ -131,6 +131,7 @@ def matrix(w: dict) -> dict:         "open_3d_viewer":    dict(phase=3, args={"reason": "daily verb test"}, timeout=200),         "open_editors":      dict(phase=3, args={}, check="editors_listed"),         # ---- phase 3b: show_* surface verbs (Fusion-parity clean names)+        "show_project":      dict(phase=3, args={}, check="ok", timeout=90, note="project manager (idempotent)"),         "show_symbol":       dict(phase=3, args={"symbolName": "R", "libraryName": "Device"}, check="ok", timeout=160),         "show_footprint":    dict(phase=3, args={"footprintName": "R_0603_1608Metric", "library": "Resistor_SMD"}, timeout=180),         "show_3d_chip":      dict(phase=3, args={}, timeout=200, note="3D of the loaded footprint"),