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.2.35 (insiders): 0.2.35: close answers the save prompt in full (Save None then OK on the same window), detects a modal orphan (Altium wedged in a modal loop with no dialog: main window disabled, -R bounces off 'busy') and escapes it with a posted WM_QUIT that RELEASES the licence seat instead of stranding it; close no longer fires a 10s -R storm on every call
4 files changed
+12−3
CHANGELOG.md+9@@ -1,5 +1,14 @@ # Changelog +## 0.2.35 (2026-09-21)+Fixes the last failing verb in the battery, `close`, and with it an overnight hostage situation: an Altium on the test box held the single licence seat for eight hours because nothing could reach it.++- **The close-time save prompt is answered in full.** "Save None" does not dismiss Altium's "Confirm Save Locally for (N) Modified Documents": it unticks the documents and RENAMES the same window to "Confirm Not Saving (N) Modified Documents", which OK then commits. `close {discardChanges:true}` pressed only the first half and went back to polling, leaving Altium sitting modal.+- **A modal Altium disables its own main window** — that is how a half-answered prompt strands it. When the dialog is then gone, the app is inside a modal loop with nothing on screen to answer: no menu, no Alt+F4, no WM_CLOSE, and every `-R` hand-off bounces off "There is another instance ... but it is busy". `close` and `agent_recover` now DETECT this (`errorCode: altium_modal_orphan`) instead of timing out or firing helper processes at it.+- **A graceful escape that keeps the seat.** `close {discardChanges:true}` ends a stuck instance with a posted `WM_QUIT` — Altium's own `Application.Terminate`, which runs its shutdown and RELEASES the On-Demand seat (measured: exit in under 8 s, the next launch licensed). A `taskkill` strands the seat; this does not.+- **`close` no longer runs the breakpoint recovery on every call.** It asked "is a loop alive?" AFTER tearing the loop down, so the answer was always no: every close paid ~10 s of `-R` hand-offs, and each one that failed spawned a helper X2. It now asks before the teardown.+- `agent_recover`'s success hint no longer claims "a fresh agent loop is running" when it was asked not to start one.+ ## 0.2.34 (2026-09-21) Third full battery on Altium Designer 26.10.1: 122 verbs, **112 pass, 1 fail** (`close`), 9 skipped for safety. - **The reaper photographs every box before pressing it**, not only ones titled "Error". An "Information" box explaining why Altium refused to quit was pressed away five times in a row, unread. `altium_dialog_log {shots:true}` returns the last 8 pictures.
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "altium-bridge",- "version": "0.2.34",+ "version": "0.2.35", "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.2.34+0.2.35
src/bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "altium", "displayName": "Altium Designer",- "version": "0.2.34",+ "version": "0.2.35", "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",