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.144: focusDebug introspection in kicad_state (sweep/hook/sentinel liveness, inflight/guard counters, parked/baseline counts)
6 files changed
+21−7
BRIDGE_VERSION+1−1@@ -1 +1 @@-0.9.143+0.9.144
adom-bridge-kicad-manifest.json+5−5@@ -1,15 +1,15 @@ { "manifest_version": 1, "name": "kicad",- "version": "0.9.143",- "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.143/adom-bridge-kicad-v0.9.143.zip",- "sha256": "18bd5164feeead23309821859a354235b9e4e231d16d6720392e182ab675a775",- "size": 418363,+ "version": "0.9.144",+ "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.144/adom-bridge-kicad-v0.9.144.zip",+ "sha256": "7e580af00830888e3bcbfff3f8c33e4bced35b41067fb639aeb9cfccdce2a9b5",+ "size": 418539, "verbPrefixes": [ "kicad_" ], "healthEndpoint": "/status",- "released_at": "2026-08-17T14:27:48Z",+ "released_at": "2026-08-17T14:29:00Z", "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png", "languages": [ "Python",
adom-bridge-kicad-v0.9.144.zipadded⋯ 1 unchanged line ⋯
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "kicad", "displayName": "KiCad EDA",- "version": "0.9.143",+ "version": "0.9.144", "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.",
handlers/state.py+1@@ -100,6 +100,7 @@ def handle_state(kicad_info: dict, args: dict) -> dict: # windows MUST check this first and defer while the user is active: # < 600 means a human touched this machine in the last 10 minutes. "userIdleSeconds": user_idle_s,+ "focusDebug": (lambda: __import__("handlers.win_focus", fromlist=["x"]).get_focus_debug())() if True else None, "activeVersion": kicad_info.get("version"), "windows": [{k: w.get(k) for k in ("hwnd", "title", "className", "rect")} for w in windows],
handlers/win_focus.py+13@@ -310,6 +310,19 @@ def expect_foreground(seconds: float = 20.0) -> None: _expected_fg_until = max(_expected_fg_until, _t.monotonic() + seconds) +def get_focus_debug() -> dict:+ """Introspection for the parking machinery (kicad_state.focusDebug)."""+ return {+ "sweepStarted": _park_sweep_started,+ "hookStarted": _hook_started,+ "sentinelStarted": _sentinel_started,+ "verbInflight": _verb_inflight,+ "guardCount": _guard_count,+ "parkedCount": len(_parked),+ "baselineCount": len(_park_baseline),+ }++ def get_focus_events() -> list: """The sentinel's transition log, oldest first.""" return list(_focus_events) if _focus_events is not None else []