Skip to content

acpx 0.16.0

Choose a tag to compare

@vincentkoc vincentkoc released this 16 Sep 13:31
v0.16.0
497a37d

Highlights: Embedding hosts gain session-specific tools, turn-owned approvals, model controls, and agent discovery. Session, filesystem, queue, and process hardening improves reliability; Devin, fx, and Junie join the built-in agents.

Changes

  • Runtime/embedding: surface normalized ACP plan entries on status events and explicit empty snapshots that clear stale plans. Thanks @gadzan.

  • Dependencies: update Zod, React and its types, Vite, and lint-staged; retain the 48-hour release-age policy.

  • Dependencies: refresh Node types, Oxfmt, and Oxlint; align source builds and CI with pnpm 11.26.0. Thanks @dependabot.

  • Source builds: document Node 22.22.1 as the minimum Node 22 development version required by lint-staged; published CLI installs still support Node 22.13 and newer.

  • Dependencies: refresh Zod, tsx, React Flow, Oxlint, the Pi and Claude adapters, and transitive tooling dependencies while retaining the 48-hour release-age policy.

  • Runtime/embedding: support session-specific tool servers, turn-owned permission callbacks, session handle lookup, and shutdown that waits for owned connections and cleanup.

  • Runtime/model selection: expose a model setter that uses the adapter's advertised control and preserves the selected model across reconnects.

  • Runtime/discovery: expose installed agent entrypoints and native model display names through the existing registry and session status, with durable local fresh-session preparation for embedding hosts.

  • Dependencies: update Zod validation to 4.6.4. Thanks @dependabot.

  • Agents/built-ins: add the devin shortcut for the installed Devin CLI ACP server, preserving its scoped compatibility behavior and standard model selection. Thanks @wtfsayo.

  • Agents/built-ins: add the fx shortcut for the installed fx ACP server. Thanks @wtfsayo.

  • Agents/built-ins: add the junie shortcut for JetBrains Junie using its registry-standard --acp=true launch argument. Thanks @junie-agent.

Fixes

  • Model selection: prefer the actual model control when an adapter also groups provider controls under the model category, while retaining custom model controls and legacy fallback. Thanks @wtfsayo.

  • Replay viewer: preserve user-message identities across repeated transcript projection so idle polling does not emit spurious patches.

  • Tooling: prevent malformed TOML configuration from hanging documentation lint by overriding the vulnerable smol-toml pin with 1.7.2 (GHSA-7w5x-hrqm-74c2).

  • ACP/cancellation: coalesce repeated prompt cancellation, allow explicit retries after failed sends, and preserve successor prompt ownership when abort callbacks reenter the client.

  • Sessions/export: preserve large event segments without exceeding the JavaScript argument limit.

  • Sessions/hardening: keep session records and indexes private across atomic rewrites, including embedded file stores.

  • ACP/filesystem: return the standard resource-not-found error for missing files so agents can distinguish new files from failed reads.

  • Filesystem/hardening: use fs-safe roots for ACP file operations and replay-viewer reads, rejecting outside symlinks and special files while preserving contained aliases, normal file modes, and large reads.

  • Viewer/startup: release server resources when the HTTP port is unavailable and avoid opening an unused Vite WebSocket listener.

  • Storage/hardening: share private atomic writes across sessions, flow bundles, imports, and exports; keep history and new config files private while preserving output-directory permissions and append ordering.

  • Queue/hardening: deliver detached-owner startup options through stdin instead of temporary credential-bearing files, preserving large payloads and startup diagnostics.

  • Queue/ownership: keep lease records private and complete during heartbeat updates, drain pending writes before shutdown, and preserve replacement owners during stale recovery.

  • Sessions: preserve both completions when flows and CLI prompts share a session; keep live writers protected and cancel waiting turns without starting delayed prompts.

  • Replay viewer: reject malformed HTTP/WebSocket input and corrupt bundle metadata without terminating the server; recover live updates after transient read failures.

  • CLI/hardening: preserve Unicode across piped prompt chunks and keep optional performance captures private without blocking on special-file targets.

  • Conformance runner: reject successful operations when a case expects an error, and clear shutdown timers after the adapter exits.

  • Sessions: retain metadata updates received during saved-model replay and keep the adapter's later configuration acknowledgement authoritative.

  • Flows: settle pending ACP capture writes before reporting a prompt result, surface bundle write failures without crashing, and preserve visible adapter errors.

  • Replay viewer: keep existing clients synchronized when another viewer subscribes or reconnects, and serialize snapshot/poll publication to preserve patch version order.

  • Runtime/sessions: serialize turns per session record and finish cancellation and local finalization before acknowledging fresh-session preparation, preserving the reset across late writes and surfacing cleanup failures. Thanks @vincentkoc.

  • Codex/permissions: prefer offered one-time refusals that let the turn continue, and explain when safe cancellation can end the turn. Thanks @odrobnik.

  • ACP/processes: clean up witnessed POSIX descendants after bridge shutdown, startup failure, and observed exit, preserving signal inheritance and isolating late exits from replacement launches. Thanks @MertBasar0, @ma-pony, and @superWorldSavior.

Full changelog: v0.15.1...v0.16.0

Verification

  • Published package: acpx@0.16.0, available on the latest dist-tag.
  • Release workflow passed metadata/tag validation, lint, typecheck, build, and trusted npm publishing.
  • Signed provenance matches source commit 497a37d and the published tarball digest.
  • A clean npm install acpx@0.16.0 succeeded. The published package passed CLI version/help, public runtime handle serialization/shutdown, a compute-only flow, and built-in registry checks.
  • npm audit signatures verified all 42 installed package signatures and 18 attestations.
  • SHA-512 integrity: sha512-HvCmlNc9JHUbAZfnk/m46RXV6WNLBM6zGZYWsHpcFaHFT4tShFbsb8qoh7J+nGc8aAYDqHiJEZggCRGIeXYUvQ==.