chore(agents): bump built-in Claude and Pi adapter ranges - #513
chore(agents): bump built-in Claude and Pi adapter ranges#513lucasyarza wants to merge 4 commits into
Conversation
Advance the source-owned npm ranges for the Claude and Pi built-in adapters to their current npm releases: - `@agentclientprotocol/claude-agent-acp` `^0.60.0` -> `^0.70.0` - `pi-acp` `^0.0.31` -> `^0.0.33` The Codex (`^1.1.5`) and Mux (`^0.28.0`) ranges already float to the latest published releases (1.6.2 and 0.28.2), so they are left unchanged. Claude 0.61.0 through 0.70.0 and Pi 0.0.32 through 0.0.33 publish no breaking changes; the release notes contain features and fixes only. Built-in names, command routing, installed-package-first resolution, package-exec fallback, queueing, persistence, cancellation, and reconnect behavior are unchanged. No ACPX dependency, manifest, or lockfile changes. Co-Authored-By: Claude <noreply@anthropic.com>
|
🦞👀 Pull request received. I will update this pull request when review starts. |
|
Codex review: needs maintainer review before merge. Reviewed August 21, 2026, 6:22 PM ET / 22:22 UTC. ClawSweeper reviewWhat this changesUpdates ACPX’s built-in Claude and Pi adapter ranges, migrates retired launcher commands for saved sessions without stored argv, and updates the associated tests and harness documentation. Merge readinessThis PR remains necessary: current main and v0.13.1 still select the older Claude and Pi ranges. The branch adds the needed persisted-session mappings and focused coverage; no correctness finding was identified, pending current-head CI validation before merge. Priority: P2 Review scores
Verification
Live VerificationCommand: Result: PASS (completed) Assertions:
How this fits togetherACPX maps friendly CLI agent names to npm-backed ACP adapter launch commands. When a saved session is reused, its stored argv takes precedence; otherwise ACPX maps recognized historical built-in commands to the current launcher before starting the adapter. flowchart LR
A[CLI agent selection] --> B[Built-in command registry]
C[Saved session record] --> D[Historical command mapping]
D --> E[Restored adapter argv]
B --> F[Built-in launch resolver]
E --> F
F --> G[Claude or Pi ACP adapter]
G --> H[ACP session]
Before merge
Agent review detailsSecurityNone. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Land the focused range update after current-head CI confirms both fresh built-in resolution and historical-session migration behavior. Do we have a high-confidence way to reproduce the issue? Not applicable as a current-main bug report: the PR body provides high-confidence after-fix terminal evidence for Claude and the legacy-session path, while Pi launch resolution is shown through its completed initialize handshake. Is this the best way to solve the issue? Yes. The branch updates the existing registry ownership point, retains explicit stored argv, and narrowly maps only recognized retired commands when reconstruction is required. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 2d735cf18220. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (4 earlier review cycles)
|
Registering the new ranges alone left the outgoing launch commands unmapped, so persisted sessions recorded under them reconstructed no argv and kept launching the retired adapter line. Add the superseded forms to `LEGACY_AGENT_COMMANDS`: - `npx pi-acp@^0.0.31` - `npx -y @agentclientprotocol/claude-agent-acp@^0.60.0` - `npm exec @agentclientprotocol/claude-agent-acp@^0.60.0` Cover all three in the historical built-in command table in `test/session-persistence.test.ts`. Synchronize the harness documentation the range change requires: mark the Pi built-in as ACPX-range-owned in `skills/acpx/SKILL.md`, document the persisted command mapping there and in `agents/Claude.md`, add the missing `agents/Pi.md`, and link it first in `agents/README.md` per the mandatory example ordering. Drop the adapter version specifiers from the changelog entry, which the documentation policy forbids. Co-Authored-By: Claude <noreply@anthropic.com>
|
Thanks — all four review items are addressed in [P1] Migrate the superseded adapter commands. Confirmed and fixed. [P1] Resolve merge risk. Same fix. Persisted records that reconstruct argv through the exact-command map now land on the current built-in argv rather than the retired launcher. [P2] Synchronize the required harness documentation. Done. [P2] Remove adapter ranges from the changelog. Done. The Real behavior proof. Two runs against this branch's build, both in the PR body:
One thing outside my reach: the @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
A usable stored `agent_argv` is resolved before the historical-command map, so a record saved under a retired command only picks up the current argv when it has no usable stored argv. The previous wording promised the migration for every such record. Qualify the claim in `agents/Claude.md`, `agents/Pi.md`, `skills/acpx/SKILL.md`, and the changelog entry, and lock the precedence with a regression test that a retired command plus usable stored argv keeps the stored launcher. Co-Authored-By: Claude <noreply@anthropic.com>
|
Both remaining items are addressed in [P2] Qualify the legacy-session migration guarantee. Correct finding, and my wording was wrong. [P1] Real proof of the legacy no-argv upgrade path. Added, and it is the run you asked for rather than another fresh launch. A real persisted record was rewritten to its pre-upgrade shape, The retired command resolved to the current built-in argv, the newly selected adapter launched, and the turn completed. The record afterwards holds Still not proven, same as before. A completed Pi model turn.
The @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
Backfilling argv was not enough. The client resolves built-in launch behavior from the unchanged persisted `agent_command`, and `findBuiltInAgentPackage` matches only `fallbackCommand` and `legacyFallbackCommands`. Neither retired `^0.60.0` form appeared there, so a saved Claude session without stored argv took a raw npx launcher and bypassed the installed-package-first and package-exec paths that recognized Claude commands use. Register both retired forms in the Claude spec's `legacyFallbackCommands`, which `resolveAgentArgvForCommand` already consults before `LEGACY_AGENT_COMMANDS`, and drop the now-duplicate entries from that map so each retired form has one home. Cover the launch path: package-exec resolution must recognize both retired commands and bridge them at the current package range. Co-Authored-By: Claude <noreply@anthropic.com>
|
Fixed in [P1] Preserve built-in resolution for legacy Claude commands. Confirmed against the source: Both retired forms are now in the Claude spec's Covered by a new test in Live confirmation on a legacy no-argv record, same setup as the previous resume proof: That is the package-exec bridge. Before the fix the same record spawned One thing I deliberately did not touch. The older Claude forms already in
Scratch sessions used for the proofs were deleted and the session index restored. @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
What Problem This Solves
Fresh ACPX built-in launches of the Claude and Pi agents resolve to adapter releases that are no longer current. The repository-owned range for
@agentclientprotocol/claude-agent-acpsits ten minor lines behind the published release. The Pi range pins exactly, because a caret on a0.0.xversion cannot float, so it can never reach the published patch.Users on the built-in
claudeandpiagents therefore stay on older adapter behavior unless they override the built-in command themselves.Why This Change Was Made
Advance the two stale source-owned ranges in
ACP_ADAPTER_PACKAGE_RANGESto the current npm releases. The Codex and Mux ranges already float to their latest published releases, so they are deliberately left untouched.Advancing a range retires a launch command, so this PR also keeps the upgrade path intact:
legacyFallbackCommands, and the superseded Pi form inLEGACY_AGENT_COMMANDS. Persisted session records without usableagent_argvresolve through those exact-command lookups, so without the entries an older record would keep reconstructing the retired launcher instead of the current built-in argv.resolveBuiltInAgentLaunchreads the unchanged persistedagent_command, andfindBuiltInAgentPackagematches onlyfallbackCommandandlegacyFallbackCommands. Putting the retired forms there is what keeps those saved sessions on the installed-package-first and package-exec paths instead of a raw npx launcher.test/session-persistence.test.tscovers all three forms. A further test asserts the documented precedence, that a usable storedagent_argvbeats the historical-command map.test/agent-registry.test.tscovers the launch path: package-exec resolution must recognize both retired Claude commands and bridge them at the current package range.Harness documentation is synchronized per the repository policy: the Pi built-in is now marked as ACPX-range-owned in
skills/acpx/SKILL.md, the persisted-command mapping is documented there and inagents/Claude.md, the missingagents/Pi.mdis added, and it is linked first inagents/README.mdto respect the mandatory example ordering. No documentation surface publishes a version specifier or semver range, and the changelog entry is generic for the same reason.Both bumps are non-breaking. Every intervening release on the Claude line and the Pi line publishes features and fixes only, with no
BREAKING CHANGEsection. Notable additions picked up on the Claude line include the provider-neutral ACP goal extension, typed session failures, the model-fallback warning advisory,Skilltool call metadata, and provider switching for loaded sessions. On the Pi line,session/deletesupport and Pi session-settlement handling.Boundaries: built-in names, command routing, installed-package-first resolution, package-exec fallback, queueing, persistence, cancellation, and reconnect behavior are unchanged. No adapters are added as ACPX dependencies, and the package manifest and lockfile are untouched.
User Impact
Users running
acpx claudeandacpx piwithout an override now get the current adapter releases on a fresh launch. A session already persisted under a superseded launch command resolves to the current built-in argv instead of relaunching the retired adapter line, as long as its record carries no usable storedagent_argv. A record with usable stored argv intentionally keeps that launcher, and the docs now say so.Evidence
Real Claude launch, end to end
acpx claude execagainst this branch's build, in a scratch cwd, with--deny-all. Redacted transcript, adapter version and turn result verbatim:The launched adapter reports the newly selected release, the turn streams real model output, and it settles on
end_turn.Real legacy-session upgrade path, end to end
The path the migration exists for. A real persisted record was rewritten to its pre-upgrade shape,
agent_commandset to the retirednpx -y @agentclientprotocol/claude-agent-acp@^0.60.0andagent_argvremoved, then reused:The retired command resolved to the current built-in argv, the newly selected adapter launched, and the turn completed. The record afterwards:
The resolved argv is persisted, so the upgrade is durable rather than re-derived on every reuse.
After registering the retired forms for built-in recognition, the adapter the legacy record spawns is the package-exec bridge rather than a raw npx launcher:
Before the fix the same legacy record spawned
npm exec @agentclientprotocol/claude-agent-acp@^0.70.0, the raw npx form taken straight from the backfilled argv.Real Pi launch, handshake only
Same build, Pi CLI
0.84.2installed into a scratch prefix and put onPATH:Stated plainly: the newly selected Pi adapter launches and completes the ACP
initializehandshake at the expected release, butsession/newstops at Pi provider authentication on this machine, so I cannot show a completed Pi model turn. The launch and version resolution are proven; the model turn is not.Checks
The repo-local autoreview helper is clean on the branch:
The range and migration assertions were written first and confirmed failing against the old values before each fix:
Published versions confirmed against the registry at the time of writing, including the two ranges left untouched:
Note for CI: the
CIworkflow run on this PR is parked inaction_required, the first-time fork-contributor approval gate. It needs a maintainer to release it.Generated with Claude Code