app
KiCad - the 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.
← Commit history
v0.9.132: every window-spawning response now declares openedInBackground:true + _foregroundHint (how to foreground: foreground:true + foregroundReason, 3s caption) - the caller is ALWAYS told, per John
5 files changed
+18−9
BRIDGE_VERSION+1−1@@ -1 +1 @@-0.9.131+0.9.132
adom-bridge-kicad-manifest.json+5−5@@ -1,15 +1,15 @@ { "manifest_version": 1, "name": "kicad",- "version": "0.9.131",- "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.131/adom-bridge-kicad-v0.9.131.zip",- "sha256": "c3de9c82227d4510c83e5f14eaa9afe21ab084facb2ac7883bc34a9a7a6d8113",- "size": 413883,+ "version": "0.9.132",+ "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.132/adom-bridge-kicad-v0.9.132.zip",+ "sha256": "dc819a2aeac90a41f6cc25288fabf8859229a097457409b0d695291dd0487151",+ "size": 414054, "verbPrefixes": [ "kicad_" ], "healthEndpoint": "/status",- "released_at": "2026-08-16T20:02:28Z",+ "released_at": "2026-08-16T20:18:14Z", "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png", "languages": [ "Python",
adom-bridge-kicad-v0.9.132.zipadded⋯ 1 unchanged line ⋯
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "kicad", "displayName": "KiCad EDA",- "version": "0.9.131",+ "version": "0.9.132", "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+11−2@@ -819,12 +819,21 @@ def dispatch_command(command: str, args: dict) -> dict: pass if isinstance(result, dict): result["_broughtToUser"] = bool(_shown)- if not _shown and isinstance(result, dict):- result.setdefault("_hint", "")+ if not _shown: result["_foregroundRefused"] = ("foreground requested without foregroundReason - " "pass foregroundReason:'<why the user needs to see this>' " "and the bridge will caption it for 3s, then foreground.") _user_fg = None # don't also restore-away what the user just asked to see+ elif command in _SPAWNS_WINDOW and isinstance(result, dict) and result.get("success", True):+ # John's contract (2026-08-16): ALWAYS tell the calling AI that the+ # window opened in the BACKGROUND and exactly how to foreground it.+ result.setdefault("openedInBackground", True)+ result.setdefault("_foregroundHint",+ "Window opened in the BACKGROUND - the user's foreground was not "+ "touched. To show it to the user: re-call with foreground:true AND "+ "foregroundReason:'<why the user needs to see this>'. The bridge "+ "captions the reason via an ab toast for 3 seconds, then brings the "+ "window forward. Foreground without a reason is refused.") except Exception: pass