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.36 (insiders): 0.2.36: close answers Altium's save prompt in full and escapes a modal orphan with a posted WM_QUIT that keeps the licence seat; close no longer fires a 10s -R storm on every call; a swallowed agent bootstrap is re-sent instead of reported as no_heartbeat
4 files changed
+5−4
CHANGELOG.md+2−1@@ -1,12 +1,13 @@ # Changelog -## 0.2.35 (2026-09-21)+## 0.2.36 (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.+- **A swallowed bootstrap is re-sent, not reported as a failure.** Altium can accept the `RunScript` hand-off and then drop it while it is busy with its own startup or unloading the script it was just told to stop; the agent never heartbeats and a healthy engine looked broken (`no_heartbeat` on the first start after a launch, and on the verifying start inside `recover`). `agent_start` now sends it once more before answering, and says so with `resentBootstrap`. A dialog on screen or a modal orphan is still reported immediately — those are real answers, never retried over. - `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)
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "altium-bridge",- "version": "0.2.35",+ "version": "0.2.36", "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.35+0.2.36
src/bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "altium", "displayName": "Altium Designer",- "version": "0.2.35",+ "version": "0.2.36", "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",