Repository navigation
v0.19.0
Highlights
- Process and lock recovery: clean up observed child processes across platforms and verify process birth identity before reclaiming queue owners and abandoned locks.
- Lower resource use: release completed flow state and abandoned event buffers, stop orphaned terminal polling, and parse fragmented ACP messages in linear time.
- Embedding controls: configure filesystem and terminal capabilities through the runtime while preserving existing defaults.
Changes
- Runtime/embedding: expose optional
fsandterminalcapability switches onAcpRuntimeOptions, matchingAcpClientOptions. Omitted options stay enabled; retained connections keep their original policy; health probes disable both callbacks while retaining the host permission policy. Disabled ACP callbacks are a protocol policy, not an OS sandbox. Thanks @saariuslystoned and @devSejung.
Upgrade notes
- Sessions/ownership: update participating clients, restart embedding hosts after active turns finish, and let older queue owners expire while idle. New owners and locks record process birth identity. Healthy legacy owners remain usable, but forced retirement is refused when their live process identity cannot be verified.
Fixes
-
Sessions/storage: resolve scope, directory, ID, listing, and prune queries from current saved records instead of stale index metadata; save checkpoints without a shared index write that can fail after the record is committed. Ignore mismatched record filenames so copied records cannot create false matches or authorize pruning another record.
-
Sessions/ownership: retry failed turn-lock cleanup before the next operation so transient file errors cannot strand a live session, while preserving active owners and replacement locks.
-
Docs: correct session setup and query examples, clarify permission and storage boundaries, and synchronize agent guides with the current CLI.
-
Flows: stop late adapter and command dispatch after timeout or interruption, wait for owned process cleanup and pending writes before finishing, and keep concurrent runs' ACP clients separate. Function actions can use
context.signalandcontext.runShell; PR triage preserves command diagnostics while refusing follow-up commands after cancellation. -
Flows: release completed runs' cached manifests and sequence counters after cleanup so repeated runs on one runner do not retain past run metadata.
-
CLI: honor inherited prompt files, queue wait intent, and session-list options before subcommands; prefer explicit child values and apply validation to the combined options. Watch now honors inherited named-session selection while keeping its journal cursor separate from list pagination.
-
ACP/terminals: clean up POSIX descendants for direct commands and shell commands, including children that leave the original process group. Verify process identities before signaling and release terminal pipes after cleanup.
-
CLI/output: skip malformed message chunks and plan updates in text and quiet output so later valid output and completion survive; preserve raw notifications in JSON output. Thanks @SebTardif.
-
Flows/JSON: bound compatibility recovery by scanning and parsing work instead of collecting every candidate, preserving large and late embedded JSON while stopping excessive recovery through ambiguous text. Direct and fenced JSON parsing are unchanged. Thanks @SebTardif.
-
ACP: avoid repeated rescanning of unfinished message lines so large fragmented responses parse in linear time while preserving UTF-8 and message byte limits.
-
CLI/output: preserve received assistant text in quiet mode when direct or queued prompts fail, and drain failed or cancelled watch turns without requiring a final ACP response or duplicating completed output.
-
Sessions/queue: release completed IPC sockets and buffered output when a waiting client stops reading, without waiting for the shared owner to shut down.
-
Sessions/queue: preserve progressing Windows named-pipe readers, and release stalled live-output observers on macOS and Linux without cancelling or replaying their admitted prompts or disconnecting quiet active turns.
-
Runtime/capabilities: return independent mutable capability snapshots so editing one result cannot change another caller's controls or advertised config keys.
-
Runtime/processes: retire idle agents and delegated terminals when their ACP transport disconnects, and share in-flight cleanup so an old connection cannot close its replacement.
-
Docs/site: preserve Markdown link destinations containing underscores, query parameters, and attribute characters while keeping label formatting and relative links intact.
-
Windows/processes: clean up observed ACP bridge descendants after close, startup failure, or bridge exit, checking process creation timestamps before terminating them and ignoring stale parent links from reused PIDs.
-
PR-triage example: preserve the repository in pasted PR URLs, normalize decimal PR numbers without changing their identity, validate complete batches before dispatch, and support macOS Bash 3.2 with separate jobs for equal PR numbers in different repositories.
-
Sessions/config: preserve config-option transport for newly saved options named
mode, including replay after reconnect, without overwriting independent legacy mode preferences. -
Sessions/Windows: retire queue-owner process trees when closing or reclaiming live owners so detached agent descendants do not survive parent termination; report tree-cleanup failures before removing the lease.
-
Sessions/modes: allow an explicit mode change to replace a retired saved mode during fresh fallback while preserving sibling settings, rejection semantics, and same-session requirements.
-
Sessions/models: use model metadata received while restoring a saved mode during prompt reconnect, including changed model controls and explicit model removals.
-
Flows: release settled ACP event-write promises during long prompts while preserving journal drain, sequence ranges, and failure ordering.
-
Terminals: stop descendant polling when cleanup reaches its deadline so timed-out releases do not leave background timers retaining terminal state.
-
Runtime/events: release buffered output and stop collecting future events when a consumer leaves a turn's event stream, while letting the turn finish independently.
-
Conformance: separate mock-specific requirements from the core adapter profile, use baseline resource links, accept standard resource-not-found errors, and clarify prompt completion and cancellation responses.
-
Conformance/filesystem: keep callback reads, writes, and scratch-file cleanup inside the session cwd after resolving symlinks, while preserving contained aliases and parent traversal.
-
Windows/terminals: clean up observed detached descendants when releasing directly launched terminal commands, verifying process identities before signaling and preserving unrelated processes.
-
Sessions/close: wait for the selected queue owner to exit when it releases its lease during shutdown, without signaling a replacement owner.
-
Conformance: reject malformed case/profile instructions and duplicate IDs before starting adapters; preserve negative protocol payloads and literal saved keys so inherited object properties cannot produce false passing assertions.
-
Conformance/filesystem: honor requested read line windows using the production client's selection logic, including empty windows, without bypassing permission or filesystem checks.
-
Sessions/queue: verify the owner's OS birth identity before forced retirement so stale leases cannot terminate a different process that reused the PID. Use boot- and namespace-scoped Linux start ticks that survive wall-clock changes. Preserve healthy legacy IPC use and report unverified live ownership without discarding its lease.
-
Sessions/locks: record process birth on new turn and queue mutation locks so abandoned locks can recover after PID reuse; bound identity queries while preserving live and uncertain owners.
-
Flows/replay: retain captured diagnostics, bundled conversations, and step links after failed ACP prompts; preserve parser rejection values and use the real session identity for isolated step records.
-
Flows/replay: keep the initial session-binding artifact immutable when real session IDs or agent metadata arrive later, while preserving current binding metadata for replay readers.
-
Sessions/history: preserve meaningful whitespace in text and thought chunks, retain opaque tool IDs across updates and reloads, and keep tool failure state when a partial update omits status.
-
Runtime: keep early turn errors available for delayed consumers without an unhandled rejection terminating the host.
-
Flows: include explicit agent arguments in persistent session reuse and snapshot resolved arguments so later resolver changes cannot rewrite earlier step metadata.
-
MCP/config: preserve empty and whitespace-containing environment and header values through session creation, loading, and queue-owner startup.
-
Prompts: accept and preserve nullable resource-link titles in structured input and queued prompts.
-
Runtime/events: preserve the ACP
switch_modetool kind on initial calls and updates. -
Prompts: validate required resource-link names and embedded text/blob payloads locally, while preserving valid text or blob alternatives.
-
CLI: reject explicitly empty or whitespace-only
--agentcommands before reading prompt input or selecting the default adapter. -
CLI/output: route disabled-exec errors through shared formatting, preserving
EXEC_DISABLEDand exit1while emitting complete JSON-RPC errors and structured quiet diagnostics. -
Conformance: fail initialization when returned agent capabilities are null, arrays, or primitive values instead of reporting a passing handshake.
-
Sessions: preserve Node loader arguments after bare debugger flags when starting a queue owner, and filter debugger wait mode and inspector flag aliases.
-
Terminals: retain a valid UTF-8 suffix within small output limits, including when a discarded character's continuation bytes arrive in later writes.
-
Compare: report only explicit token counts, leaving missing totals unknown instead of treating context capacity or occupancy as token consumption.
-
Compare: accept the
--jsonalias with strict JSON output and honor command-local output selection for configuration and prompt-input errors, while preserving format precedence and literal prompt values. -
Sessions/config: preserve opaque config option IDs through saving, replay, and removal, including
__proto__and space-padded keys that differ from their unpadded siblings.
Published acpx@0.19.0.
Channel: latest. Published: 2026-09-22T01:30:35.936Z.
Integrity: sha512-sgG0CkhuvVxgfiksXjIPEl9hsHZW0CpxywPdQeoIP5D31gwZE4nrnddLUUqaSCLb1UIM7LFPBL5qdvy15/+B6Q==
Source: 09f3d37faa0425f4faf95d1da501be4284571a19.