app
Altium - the Altium Bridge
Public Made by Adomby adom
Adom Bridge for Altium Designer: a resident DelphiScript agent gives the AI eval, the 1,100-command process launcher, all 8 EDA surfaces with screenshots, compile/ERC, DRC, OutJob outputs, native SchLib/PcbLib authoring with STEP 3D bodies, and dialog handling by PID.
← Commit history
v0.1.39: fix idle-watcher boot (unimported taskbar; misattributed failure log)
7 files changed
+16−9
CHANGELOG.md+3@@ -1,5 +1,8 @@ # Changelog +## 0.1.39 — 2026-09-01+- **0.1.38's idle-watcher never actually started.** The boot-site call used `taskbar` unimported (dispatch imports it lazily inside the handler), so boot logged `name 'taskbar' is not defined` — and logged it as a DIALOG REAPER failure, because the watcher call sat inside the reaper's try-block. Fixed the import, and each boot service now has its own try so a failure names the thing that failed. Verified by the boot log this time, not by assumption.+ ## 0.1.38 — 2026-09-01 - **The taskbar overlay badge auto-clears after 5 minutes without a driving verb.** John, seeing the Adom mark still parked on Altium's taskbar icon: *"do you auto-remove that overlay after 5 minutes of verb inactivity?"* The answer was no — the badge was set on the first driving verb and never cleared until the bridge died, while this module's own header PROMISED "cleared when the bridge goes idle". A permanent overlay stops meaning "an AI is driving right now" and starts meaning nothing. An idle watcher (started at boot beside the dialog reaper) now clears it at 5 idle minutes; the next driving verb re-badges instantly. - For the record, what already worked: every driving verb with a measured estimate ≥3 s runs a REAL taskbar progress bar on Altium's button (percent paced by history, marquee when unmeasured, red flash + clear on failure) and stops it when the verb returns — progress rides the taskbar icon, never toasts, per the house rule.
adom-bridge-altium-manifest.json+4−4@@ -1,9 +1,9 @@ { "name": "altium",- "version": "0.1.38",- "url": "https://wiki.adom.inc/download/adom/altium-bridge/0.1.38/adom-bridge-altium-v0.1.38.zip",- "sha256": "9468b0d69a824c6ea725a81b3cb800b1ed0e26b870a83ed13b62ac2f7ff8cb9c",- "size": 135889,+ "version": "0.1.39",+ "url": "https://wiki.adom.inc/download/adom/altium-bridge/0.1.39/adom-bridge-altium-v0.1.39.zip",+ "sha256": "c7aa621a4a54c3f2e994a15f991f0a7643a88e44a7471a13db2253525f82bd4e",+ "size": 135933, "verbPrefixes": [ "altium_" ],
adom-bridge-altium-v0.1.39.zipadded⋯ 1 unchanged line ⋯
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "altium", "displayName": "Altium Designer",- "version": "0.1.38",+ "version": "0.1.39", "description": "Drive Altium Designer from Adom: a resident DelphiScript agent (eval + the 1,100-command process launcher), the X2 -R command line, UIA over the VCL shell, dialogs by PID, screenshots of every Altium window, and Altium 365.", "homepage": "https://wiki.adom.inc/adom/altium-bridge", "docs": "https://wiki.adom.inc/adom/altium-bridge",
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "altium-bridge",- "version": "0.1.38",+ "version": "0.1.39", "type": "app", "description": "Skills for your container so your AI knows how to drive the Altium Designer bridge (altium_* verbs). The bridge runtime itself is the release zip; Adom Bridge loads that.", "tags": [
src/BRIDGE_VERSION+1−1@@ -1 +1 @@-0.1.38+0.1.39
src/server.py+6−2@@ -2947,10 +2947,14 @@ def main(): try: dialogs.start_reaper() print("[altium] standing dialog reaper started (known nuisances are pre-empted, never save prompts)")- taskbar.start_idle_watcher()- print("[altium] badge idle-watcher started (overlay auto-clears after 5 min without a driving verb)") except Exception as e: print(f"[altium] dialog reaper failed to start: {e}")+ try:+ from handlers import taskbar as _taskbar # dispatch imports it lazily; this scope never had it+ _taskbar.start_idle_watcher()+ print("[altium] badge idle-watcher started (overlay auto-clears after 5 min without a driving verb)")+ except Exception as e:+ print(f"[altium] badge idle-watcher failed to start: {e}") srv = ThreadingHTTPServer((host, port), Handler) print(f"[altium] bridge {BRIDGE_VERSION} listening on {host}:{srv.server_address[1]}") _install()