← Commit history

v0.9.136: kicad_state.userIdleSeconds - the presence gate for automation (John was actively working when a window-spawning suite ran; window automation must defer while a human is at the box)

John Lauer ·8db015302e ·1mo ago ·parent 6553d66
5 files changed +14−7
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.135+0.9.136
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.135",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.135/adom-bridge-kicad-v0.9.135.zip",-  "sha256": "5e58616cdda140e14dcdc5d569d8638e979e51c381c6513f484863f5e445e9a7",-  "size": 415353,+  "version": "0.9.136",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.136/adom-bridge-kicad-v0.9.136.zip",+  "sha256": "d7b3825a5814703bf003a2215dca9263a6ca1431dc42a09ba991db28ad5bc0da",+  "size": 415573,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-16T20:31:11Z",+  "released_at": "2026-08-17T14:03:27Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
adom-bridge-kicad-v0.9.136.zipadded
⋯ 1 unchanged line ⋯
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.135",+  "version": "0.9.136",   "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+7
@@ -83,9 +83,11 @@ def handle_state(kicad_info: dict, args: dict) -> dict:         pass      focus_events = []+    user_idle_s = None     try:         from handlers import win_focus         focus_events = win_focus.get_focus_events()[-40:]+        user_idle_s = round(win_focus._seconds_since_user_input(), 1)     except Exception:         pass @@ -93,6 +95,11 @@ def handle_state(kicad_info: dict, args: dict) -> dict:         "success": True,         "running": running,         "focusEvents": focus_events,+        # PRESENCE GATE (John, 2026-08-17: a test suite foregrounding windows+        # while he worked "MASSIVELY DISRUPTED" him). Automation that spawns+        # 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,         "activeVersion": kicad_info.get("version"),         "windows": [{k: w.get(k) for k in ("hwnd", "title", "className", "rect")}                     for w in windows],