Skip to content

fix: report structured ACP v2 failures - #651

Merged
benbrandt merged 1 commit into
mainfrom
fix/acp-v2-structured-failures
Oct 20, 2026
Merged

benbrandt merged 1 commit into
mainfrom
fix/acp-v2-structured-failures

Conversation

@benbrandt

Copy link
Copy Markdown
Member

Summary

Report terminal ACP v2 foreground failures through the standard idle / stopReason: "error" shape, with an error object containing a code and user-facing message. This is the next isolated package after #649 and #650, based on main.

  • Carry terminal failure independently of AIR negotiation and of the v1-shaped prompt result. Preserve v1 responses, AIR session-failure metadata, quota, and usage.
  • Cover ordinary prompted turns, local commands, compact/review commands, implementation follow-ups, and agent-initiated turns.
  • Before insertion, keep the JSON-RPC error response as well as the idle error when foreground work ends. After insertion, keep the successful messageId response and report the work outcome through idle.
  • Preserve cancellation precedence, including runtime errors raised while aborting. Retried model errors, individual failed tools, unrelated-turn errors, and idle background errors do not become terminal foreground failures.
  • Close unfinished v2 tool calls before the idle failure instead of clearing their tracker first.
  • Omit opaque error data from the new standard error object; use safe messages for process loss and unexpected internal exceptions. V2 fallback text for process loss is sanitized too.
  • Keep resume snapshots free of failure details so reconnecting does not replay a terminal incident as a new completion.

The specification checked was 4034a8c: v2 failure semantics.

Initial commands, system prompts, and standard subagent sessions remain separate work packages. Existing AIR subagent behavior is unchanged.

Validation

  • npm run typecheck — passed, including examples.
  • npm test — 1,815 passed; 36 skipped.
  • npm run build — passed.
  • npm run test:integration — 5 passed against real Codex app-server with a local mock model.
    • The real-process v2 test now verifies terminal HTTP 401 -> idle/error with code -32000, then clears the mock failure and verifies a successful prompt and all resume modes. The mock holds the error across Codex's authentication retry rather than accidentally returning an unrelated error.
  • Focused wire/snapshot coverage checks AIR and non-AIR failures, pre-insertion authentication, cancellation races, failed-tool cleanup, implementation failures, unrelated errors, and resume behavior.
  • npm run codex-test — live-model smoke test from an empty scratch directory completed with end_turn (backward-compatibility check).
  • git diff --check — passed.

The full live-model E2E suite was not run. Failure scenarios use the local model mock rather than changing real credentials or provoking failures against an external provider.

@benbrandt
benbrandt merged commit 5377bfe into main Oct 20, 2026
6 checks passed
@benbrandt
benbrandt deleted the fix/acp-v2-structured-failures branch October 20, 2026 12:16
Rizzen pushed a commit that referenced this pull request Oct 26, 2026
🤖 I have created a release *beep* *boop*
---


##
[2.3.0](v2.2.2...v2.3.0)
(2026-10-26)


### Features

* add ACP v2 support again
([#620](#620))
([9e1690f](9e1690f))
* mark session list rows of worktrees Codex made (agentWorktree)
([#631](#631))
([aa02d43](aa02d43))
* narrow models to what the providers/set gateway lists
([#627](#627))
([3f555f9](3f555f9))
* report the model of each native subagent session
([#678](#678))
([51005a6](51005a6))
* return initial ACP v2 session commands
([#652](#652))
([5e9b7c5](5e9b7c5))
* support AIR sessionIndex extension
([#590](#590)) v2
([#622](#622))
([2fd758c](2fd758c))
* support append-mode ACP system prompts
([#653](#653))
([5993a12](5993a12))


### Bug Fixes

* disable Codex's Visualize skill, whose output ACP clients show as raw
text
([#667](#667))
([0ba94f5](0ba94f5))
* display the selected wire provider as JetBrains Air Gateway
([#589](#589))
([cc54abf](cc54abf))
* explain Codex config load errors caused by a deleted working directory
([#626](#626))
([a636804](a636804))
* explain invalid_encrypted_content errors after a provider change
([#668](#668))
([a77829f](a77829f))
* hold a fork back from the session list until its session/fork response
is out
([#642](#642))
([59974c7](59974c7))
* include subagent edits in the agent file-change report
([#632](#632))
([7d07123](7d07123))
* leave codex exec runs out of the session list without sessionIndex
([#639](#639))
([df75d2b](df75d2b))
* migrate to ACP SDK 2.0
([#649](#649))
([c8fd166](c8fd166))
* publish the commands when the skills change
([#643](#643))
([a62b568](a62b568))
* report structured ACP v2 failures
([#651](#651))
([5377bfe](5377bfe))
* show a Codex subagent's follow-up turn in a new subagent session
([#634](#634))
([7c761c7](7c761c7))
* synchronize ACP v2 foreground state
([#650](#650))
([986955a](986955a))
* update codex to 0.164.0
([#666](#666))
([e227c0e](e227c0e))
* wait for the compact turn to finish
([#654](#654))
([ced4c34](ced4c34))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: acp-release-bot[bot] <246668977+acp-release-bot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant