← Commit history

v0.2.30 (insiders): 0.2.30: the dialog scan sees button-bearing dialogs (save prompts, Zoom Value); altium_close discardChanges works and unsaved_changes replaces close_timeout

John Lauer ·5af8d92439 ·1mo ago ·parent 1b81b35
4 files changed +9−3
CHANGELOG.md+6
@@ -1,5 +1,11 @@ # Changelog +## 0.2.30 (2026-09-21)+From the first full battery on a third Altium build (Altium Designer 26.10.1, fresh install): 121 verbs, 106 pass, 6 fail.+- **The dialog scan saw none of the boxes that mattered.** `Confirm Save Locally` (Save All | Save None | OK | Cancel), `Confirm Not Saving` and `Zoom Value` (OK | Cancel) matched no class allowlist, had more than one button and an uncatalogued title, so `altium_check_dialogs` answered "none" while they blocked `altium_close` for minutes. A titled window carrying two or more real dialog buttons is now a dialog whatever its class; the save prompts are catalogued as `save_prompt` and `Zoom Value` as `input_prompt` (safe action Cancel). The reaper still never presses a save prompt.+- `altium_close {discardChanges:true}` now WORKS (the arg was accepted and ignored): it presses Save None and confirms, for callers whose modified documents are all their own. Without it a save prompt returns `unsaved_changes` with a screenshot naming the documents, instead of `close_timeout`.+- Battery: never runs a demo OutJob (they open what they generate on the user's screen); `show_project` with no path is the bundled demo by design; `read_schematic` runs with its sheet shown.+ ## 0.2.29 (2026-09-20) - **New verb `altium_install`: the install lane with its rules IN the verb.** A from-scratch install on a fresh machine went badly because the AI driving it kept forgetting the rules in a 650-line skill: it asked the human to sign in on a page that was already signed in (it never looked), left Release / Assign / Use License / Refresh to the human although they are ordinary clicks, did not toast when it did need him, and launched the installer into an empty room so the UAC prompt timed out. Stages `preflight`, `get_installer`, `launch`, `wait`, `license` (or no stage: `auto` reads the machine). It verifies the installer's Authenticode signature (Valid, CN=Altium LLC) before anything runs, refuses `launch` without `humanIsPresent:true`, toasts the human itself and reports `toast.displayed` truthfully, and does the licensing clicks itself. Every reply carries `_hint`, `_next`, `pitfalls` and `needsHuman`, and `needsHuman` may only ever name a password/2FA, the UAC prompt, or clicks inside an elevated window. - `detect.installVerb` = `altium_install` and `detect.hostAppOptionalVerbs` declared, so ab forwards the install/readiness verbs when Altium is absent and `bridge_readiness` recommends this installer (two SDK audit misses).
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "altium-bridge",-  "version": "0.2.29",+  "version": "0.2.30",   "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.29+0.2.30
src/bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "altium",   "displayName": "Altium Designer",-  "version": "0.2.29",+  "version": "0.2.30",   "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",