← Commit history

v0.2.28 (insiders): 0.2.28: one thread per request (a slow verb no longer blocks the bridge); agent_busy names what is running

John Lauer ·a3b4485dc7 ·1mo ago ·parent 7b50f0f
4 files changed +6−3
CHANGELOG.md+3
@@ -1,5 +1,8 @@ # Changelog +## 0.2.28 (2026-09-20)+- **One thread per request.** The bridge handled HTTP requests one at a time, inline in its accept loop, so ONE slow verb blocked every verb behind it, `/health` included: `altium_signin`'s ~25 s UIA search, or an agent call waiting on a parked engine. ab dropped its connection at its own budget (an opaque "HTTP error"), the bridge kept working the abandoned request, and the queue only grew: the 30-verb cascades the verb battery produced, twice, from two different first causes. Each request now runs on its own thread. Agent-bound work still serialises at the agent's one-file inbox, which answers a NAMED `agent_busy` with `busyWith` and `busyForSec` instead of a dropped connection.+ ## 0.2.27 (2026-09-20) - The silent-halt fix in 0.2.26 modelled the wrong moment and did not fire. What really happens (heartbeat: `requests: 1`, then nothing): a command raises an exception the agent's own Try/Except handles, the command ANSWERS normally, and THEN Altium's debugger parks the script on a breakpoint, on Altium Develop with no error box. The caller of that command sees nothing; the NEXT verb finds a dead agent, starts a second script into a parked engine and blocks until ab's HTTP timeout, and so does every verb after it. `agent::call` now checks before bootstrapping: agent dead + Altium running + the agent script in front = parked, so it sends `EditScript:Stop` first, restarts the agent, runs the verb, and marks the reply `enginePreviouslyParked:true` (also logged in `altium_dialog_log` as `engine_parked_cleared`). The in-flight title trigger from 0.2.26 is removed: the title alone cannot tell a halt from a long command. 
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "altium-bridge",-  "version": "0.2.27",+  "version": "0.2.28",   "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.27+0.2.28
src/bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "altium",   "displayName": "Altium Designer",-  "version": "0.2.27",+  "version": "0.2.28",   "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",