← Commit history

v0.9.98: show_* verbs added to the dispatcher focus-guardian + foreground-opt-in sets (they were bypassing both because the dispatcher keys on command name)

John Lauer ·42ffbc047c ·2mo ago ·parent 52370b9
5 files changed +16−10
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.97+0.9.98
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.97",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.97/adom-bridge-kicad-v0.9.97.zip",-  "sha256": "cb5b58d558700f4947c851f12d9926e7b3a74d1e90cf58410384ed1a02dbdf3d",-  "size": 389789,+  "version": "0.9.98",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.98/adom-bridge-kicad-v0.9.98.zip",+  "sha256": "9fea18a42e0ebc49f44a94e66add004d4dbc1761cc4182da0a39918d49beae6a",+  "size": 389942,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-15T02:19:49Z",+  "released_at": "2026-08-15T02:22:06Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
adom-bridge-kicad-v0.9.98.zipadded
⋯ 1 unchanged line ⋯
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.97",+  "version": "0.9.98",   "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.",
server.py+9−3
@@ -712,10 +712,16 @@ def dispatch_command(command: str, args: dict) -> dict:                       # membership here the capture/restore machinery skips it and                       # every window it spawns lands ON TOP of the user (verified                       # live on AdomLapper 2026-08-08: PCB Editor at z0).-                      "demo", "export_molecule"}+                      "demo", "export_molecule",+                      # show_* verbs wrap the open_* handlers but the dispatcher+                      # keys on the COMMAND name, so they need their own membership+                      # or the guardian/foreground-opt-in skip them entirely+                      # (found 2026-08-14: show_* bypassed the focus guardian).+                      "show_project", "show_symbol", "show_footprint", "show_3d_chip", "show_schematic", "show_2d_board", "show_3d_board", "show_library"}     _SPAWNS_WINDOW_FOCUS = {"launch", "open_board", "open_schematic", "open_symbol_editor",                             "open_footprint_editor", "open_3d_viewer", "install_library",-                            "place_footprint", "install_symbol", "install_footprint", "demo", "export_molecule"}+                            "place_footprint", "install_symbol", "install_footprint", "demo", "export_molecule",+                            "show_project", "show_symbol", "show_footprint", "show_3d_chip", "show_schematic", "show_2d_board", "show_3d_board", "show_library"}      # BACKGROUND-OPEN RULE: capture the USER's foreground window BEFORE any verb     # that spawns/raises a KiCad window, so we can hand focus back afterward. The@@ -812,7 +818,7 @@ def dispatch_command(command: str, args: dict) -> dict:                 # lands 30s+ out on slow boxes, well past the old 16s window. The                 # guardian is KiCad-aware now (never fights the user), so a long                 # guard has no downside.-                _restore_secs = 45.0 if command in ("open_3d_viewer", "place_footprint", "demo", "launch") else 20.0+                _restore_secs = 45.0 if command in ("open_3d_viewer", "place_footprint", "demo", "launch", "show_3d_chip", "show_3d_board") else 20.0                 win_focus.restore_foreground_persistent(_user_fg, seconds=_restore_secs)             if isinstance(result, dict):                 result["_userFocusRestored"] = bool(restored)