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.153: overlay badges survive bridge restarts (rebadge ALL live KiCad windows at boot + on setting flip, not just _bridge_windows); dashboard/ excluded from runtime zip
6 files changed
+49−10
BRIDGE_VERSION+1−1@@ -1 +1 @@-0.9.152+0.9.153
adom-bridge-kicad-manifest.json+5−5@@ -1,15 +1,15 @@ { "manifest_version": 1, "name": "kicad",- "version": "0.9.152",- "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.152/adom-bridge-kicad-v0.9.152.zip",- "sha256": "b1e0e81e561c111003e2f0798b484473a03952f86aefa1937bc196d5a7a73e03",- "size": 427311,+ "version": "0.9.153",+ "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.153/adom-bridge-kicad-v0.9.153.zip",+ "sha256": "e991a750d2293d275b162dd73f3a758ca525e93f7a6317382ae34c2c9b7aedb0",+ "size": 427783, "verbPrefixes": [ "kicad_" ], "healthEndpoint": "/status",- "released_at": "2026-08-17T15:05:24Z",+ "released_at": "2026-08-17T20:37:16Z", "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png", "languages": [ "Python",
adom-bridge-kicad-v0.9.153.zipadded⋯ 1 unchanged line ⋯
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "kicad", "displayName": "KiCad EDA",- "version": "0.9.152",+ "version": "0.9.153", "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/win_taskbar.py+34−3@@ -118,13 +118,24 @@ def clear_adom_badge(hwnd) -> None: pass +def _all_kicad_hwnds() -> set:+ """Every live KiCad top-level window: bridge-tracked PLUS enumerated.+ Windows opened before the last bridge restart drop out of _bridge_windows+ (fresh process, empty set) but were still bridge-driven — badging only the+ tracked set left the taskbar button bare after every bridge upgrade."""+ try:+ from handlers.win_focus import _bridge_windows, _enum_kicad_hwnds+ return _enum_kicad_hwnds() | set(_bridge_windows)+ except Exception:+ return set()++ def rebadge_all(enable: bool) -> int:- """Setting flipped: apply/clear the badge on every bridge-created window."""+ """Setting flipped (or bridge booted): apply/clear on every KiCad window.""" n = 0 try:- from handlers.win_focus import _bridge_windows import ctypes as _ct- for h in list(_bridge_windows):+ for h in _all_kicad_hwnds(): if not _ct.windll.user32.IsWindow(h): continue if enable:@@ -137,3 +148,23 @@ def rebadge_all(enable: bool) -> int: except Exception: pass return n+++def badge_existing_on_boot() -> None:+ """Server boot: badge KiCad windows that survived a bridge restart, off the+ boot path (COM + enumeration can stall; never block serving)."""+ if not IS_WINDOWS:+ return+ import threading+ import time++ def _later():+ time.sleep(5)+ try:+ from handlers.settings import get_settings+ if get_settings().get("overlayBadges", True):+ rebadge_all(True)+ except Exception:+ pass++ threading.Thread(target=_later, daemon=True, name="kicad-boot-badge").start()
server.py+8@@ -1081,6 +1081,14 @@ def main(): except Exception: pass + # 0.9.153: KiCad windows outlive bridge restarts but _bridge_windows does+ # not, so overlay badges vanished after every upgrade — re-stamp survivors.+ try:+ from handlers.win_taskbar import badge_existing_on_boot+ badge_existing_on_boot()+ except Exception:+ pass+ # #31 hygiene: dead-pid discovery files accumulate across KiCad restarts # and poison plugin resolution at scale — sweep them once per boot. try: