Highlights
- Embedding runtimes can now handle turn-scoped ACP form and URL elicitations with exact capability, session, request, cancellation, and late-response fencing.
- Embedders can reuse the existing per-tool permission policy through
AcpRuntimeOptions. - Session ownership, replay-viewer containment, terminal cleanup, model controls, and persistence failure reporting received a concentrated reliability pass.
Changes
- Docs/readme: rewrite the project front door to the house standard and route detailed CLI guidance to the existing documentation.
- Runtime/embedding: expose the existing per-tool permission policy through
AcpRuntimeOptionsso embedded clients can reuse its rule matching and decisions. Thanks @xenaocx-dev. - Runtime/embedding: add turn-scoped ACP form and URL elicitation handlers with capability and cancellation fencing.
Breaking
- Runtime API: require
AcpRuntimeTurn.promptStarted, which settles afterconnection.prompt()returns its request promise or fails beforehand.
Fixes
- Runtime/embedding: settle turn results only after lifecycle persistence and client cleanup attempts finish, including unexpected finalization failures.
- Replay viewer: contain manifest-selected projection reads within their run bundle, including symlink targets. Thanks @bunlongheng.
- CLI/session: re-apply a session-pinned model before set_mode/set_model/set_config_option after reconnect, matching the prompt path so model-dependent options work. Fixes #489. Thanks @SebTardif.
- Runtime: preserve non-empty
messageIdand a safe subset of ACP update_metaontext_deltaevents so consumers can distinguish model prose from adapter diagnostics that still useagent_message_chunk. Thanks @SebTardif. - Runtime/sessions: keep atomic-write temporary filenames within filesystem component limits when valid session IDs have long basenames. Thanks @henkterharmsel.
- Runtime/embedding: snapshot permission policies at client configuration boundaries so caller-side mutation cannot change an in-flight turn after prompt readiness.
- Replay viewer: return the same not-found response for missing files and containment-denied paths, preventing outside-target existence probes.
- Runtime/sessions: surface checkpoint flush and session-store save failures during turn finalization instead of dropping them. Thanks @SebTardif.
- ACP/terminal: time out hung
ps/ PowerShell process-list helpers after a shell-backed terminal exits so wait_for_exit, kill, and release can finish. Thanks @SebTardif. - ACP/terminal: raise the process-list helper stdout cap above execFile's 1 MiB default so large
pslistings are not dropped as empty. Thanks @SebTardif. - Runtime/embedding: retain one-shot session ownership from initialization through its turn so repeated pre-turn
ensureSessioncalls reuse one backend session, then clean it up after completion. Fixes #504. Thanks @jhgaylor. - Runtime/embedding: project and persist
session/updatenotifications for the full lifetime of retained sessions, including idle periods before and between turns. Fixes #477. Thanks @nyl199310.
Verification
- Source commit: 2d735cf18220e539bf7961a996bff0aceefcf3b0
- Elicitation owner PR: #508
- Signed tag:
v0.13.1, SSH signing keySHA256:0R9sOfREAbuojItYW9O6fvh2RHbgqVJyvk8FBS/35dk - Exact-head CI: run 32213100130 — format, typecheck, lint, build, tests, mutation, Slophammer, conformance, docs, and CodeQL passed
- Trusted npm publish with provenance: run 32214015462
- npm: acpx@0.13.1
- Registry tarball: acpx-0.13.1.tgz
- Integrity:
sha512-9zhvUrAR4XxSIgaLCiiWmrwmEWh+m6jxu2KUFC8BMOiK4sFsnrRL7H6VF54ZLTTpt0IHrZQju2V7+8wiMf9DXQ== - SHA-1:
6c4871b95290558994337f8b38eaca112014c7c1 - Published:
2026-08-19T04:01:35.902Z - Installed-artifact smoke: a clean temporary npm install reported
0.13.1, started the real Codex ACP adapter with a fresh isolated Codex home, returned exactlyOK, reported usage, and exited 0