Repository navigation
Release 0.3.0: native tool rows, provider worker types, plan-mode enforcement, and E2E tests - #41
Merged
Merged
Conversation
Cover routing across all providers, streamed tool memory, exchange eviction and capacity, lock and install path validation, authenticated mod routes, and OpenAI reviewer failure and ownership. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bind worktree starts to their acknowledged parent spawn, retain admitted restrictions across Claude-loop snapshots, and report why a worker start was refused. Cover Windows paths, unrelated directories, policy retention, and session cleanup. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Build worker catalogs from picker rows, validate model ownership and effort naming at spawn, and label worker rows and notifications with the resolved provider and model. Update provider defaults, launcher behavior, live fixtures, documentation, and regression tests. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Track Cursor, Antigravity, and Grok actions under native tool names, render bounded inputs and results through authenticated Mods hooks, and keep display tools out of model requests. Preserve deferred final answers across restarts, enforce session ownership, and mark unfinished actions as unconfirmed. Include captured fixtures, rendering tests, gateway tests, and integration documentation. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ering Use the last reported model call for Antigravity and Grok context while retaining total consumption and model-call counts for receipts. Preserve context through display follow-ups, show context and consumption together, and restore receipt pane messages. Include usage fixtures, accounting tests, and provider documentation. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Add the hook TypeScript configuration and timer globals, run type checking before hook tests, ignore generated engine declarations, and document regeneration with /plugin-types. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
# Conflicts: # CHANGELOG.md
…ntials Keep upstream interception confined to an explicit test preload and block proxy-visible external traffic while asserting tool execution and the Mod startup acknowledgment. Co-Authored-By: Claude Code <noreply@anthropic.com>
…outing Keep fake HTTP and native executable seams entirely in the explicit test loader, with bounded child cleanup and real Claude permission-mode selection. Co-Authored-By: Claude Code <noreply@anthropic.com>
…ivers Assert byte-preserving Claude passthrough, explicit deadlines, Responses and Zen protocols, real permission modes, and Antigravity continuation through SendMessage. Add credential-aware live skips and a POSIX TTY interface without changing production routing. Co-Authored-By: Claude Code <noreply@anthropic.com>
Adds npm run test:e2e, a CI job that installs Claude Code 2.1.283 on Linux, macOS and Windows, Knip entries for E2E tests, and ignores the generated .claude/types declarations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o end Cover settings and version admission, terminal cancellation, bounded streams, and two-turn context with credential-gated live plans. Co-Authored-By: Claude Code <noreply@anthropic.com>
… end to end Add bounded live plans for direct-provider workers and hermetic coverage of registered catalogs, saved-session reasoning isolation, and upstream failures without changing shared harness or production code. Co-Authored-By: Claude Code <noreply@anthropic.com>
Exercise Cursor eviction accounting and Grok tagged requests and quota through the real launcher and authenticated gateway. Add a no-inference live matrix with Cursor/Grok credential isolation and an explicit Antigravity credential-export gap. Co-Authored-By: Claude Code <noreply@anthropic.com>
Keep representative picker paths and one worker spawn per provider instead of enumerating catalogs. Resolve workers from Claude's advertised registrations and pass explicit model overrides for per-provider worker definitions. Co-Authored-By: Claude Code <noreply@anthropic.com>
Replace the unreachable duplicate-dispatch TODO with passing checks for visible 400 refusals on identical tagged requests. Keep Cursor eviction and Grok quota regressions as TODOs. Co-Authored-By: Claude Code <noreply@anthropic.com>
Exercise isolated native providers through real Claude turns and preserve failing Antigravity contracts as TODO regressions, with bounded live plans and scenario-local transport drivers. Co-Authored-By: Claude Code <noreply@anthropic.com>
…rness Cover OpenAI main and worker permission modes, native plan policy and text rows, and tmux approval decisions. Preserve the current classifier incompatibility as a running reviewer TODO, with bounded live plans for permission scenarios. Co-Authored-By: Claude Code <noreply@anthropic.com>
…enarios A SendMessage sent while a background worker is still running is only queued for its next tool round, so the resume scenarios passed or failed on timing. Waiting for the completion notification exposes that main revokes a finished native worker after a later Claude prompt; those scenarios are todo on main (fixed on the refactor by 34ffc9a). Also tolerate a 50 ms deadline expiring before the fake provider sees the request, and report the interrupt transcript when it is classified as success. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # .gitignore # package.json
Scenarios hardcoded main's per-model worker names, so they could not run against the per-provider layout (multi-<provider> plus an Agent model parameter). Share one resolver that reads the registration reminder Claude sends and picks the worker for either layout. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The fake agy/grok/codex .cmd files now use npm's shim shape, so the gateway runs them through Node directly as it does the real agy.exe. A plain .cmd went through cmd.exe, where %* stops at a prompt's first newline. Also pass the preload as a file URL and accept Claude's aborted_streaming interrupt result. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every route's usage translation now reaches Claude's result and modelUsage exactly; native workers fall back to marked estimates; /context follows reported usage without upstream count_tokens; Gemini rows get the 1M window; reported usage near the window triggers auto-compaction. The first live run exposed test-side faults: a retired Zen model, a budget below Claude's own cost estimate, fake Cursor catalog extras leaking into live runs, a fixed 30 s restart kill, and a hermetic-only tool_result check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # test/e2e/native-provider-workers.test.ts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zen still lists deepseek-v4-pro and kimi-k2.7-code but answers 404, and its free-tier models refuse use outside OpenCode. DeepSeek V4.1 Flash becomes the first Zen default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # test/unit/native-launcher.test.ts # test/unit/native-zen-models.test.ts
Claude Code only defaults Opus to its 1M window when ANTHROPIC_BASE_URL is unset or first party, so sessions under Multi compacted at 200k. Claim first party when signed in to Anthropic; the gateway forwards Claude traffic unchanged to api.anthropic.com. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD
Claude asks its auto-mode classifier about Bash in plan mode when plan was entered from auto. For OpenAI sessions the gateway answered with the OpenAI reviewer, which had no plan-mode input and approved a file write live. Review now reads the session's admitted mode: planned edits are denied outright and the reviewer gets a mandatory read-only restriction. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD
agy's --mode plan only steers its model; under --dangerously-skip-permissions it ran run_command and write_to_file live. The deny list also missed browser, schedule and messaging tools. Plan and compaction now use a hook allowlist that denies unknown tools; the hook's deny path was verified live with agy 1.2.12. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD
A planning parent now keeps every worker in plan, including a native worker spawned in auto and resumed later, and a worker definition's own mode no longer overrides it. Spawn admission stores only an explicit worker mode. OpenAI review also reads the mode Claude reports with each pending action, so EnterPlanMode and ExitPlanMode inside a turn apply, and an unknown worker mode fails review closed. Grok settings admission uses Grok's validator. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD
_CLAUDE_CODE_ASSUME_FIRST_PARTY_BASE_URL also switches Claude to its server-side auto-mode classifier. Translated OpenAI and Zen requests cannot carry that request, and hermetic plan-mode runs denied the Agent call with 'server_not_requested'. The Opus 1M check stays as a todo until the window can be restored without first-party behaviour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD
In auto mode Claude asks the API for safeguard_results on every request and, when a reply lacks them, switches the whole session to billed local classifier requests. Gateway-served OpenAI, Zen, Cursor, Antigravity and Grok replies never carried them, so one non-Claude turn made the rest of a subscription session's checks billed. The gateway now returns results whenever the request asked for them: OpenAI tool uses are unavailable, so Claude falls back for that call to the OpenAI reviewer; Zen is unreviewed outside plan and refused in plan or an unknown mode; native display rows are not flagged. The request's own classifier mode also binds OpenAI plan-mode review. Verified live on a Max subscription with OpenAI, Cursor and Zen workers and a Zen plan-mode run. Implemented by GPT-6 Sol from a coordinator brief. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD
Claude Code turns tool search off for a non-Anthropic base URL, so the launcher opts back in. It used ENABLE_TOOL_SEARCH=auto, which loads every deferrable tool up front while they fit in 10% of the window: with a 1M window about 100k tokens of connector tools filled each session before the first prompt (measured 113.6k vs 14.4k at startup). Use true, matching the direct-connection default of always deferring. Explicit values are kept. Hermetic scripts now load ExitPlanMode through ToolSearch, as a real model must, and the gauge estimate skips deferred categories. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD
A loaded gateway fired its 50 ms test deadline after the 400 ms fake reply had finished, and macOS reported worker cwds through /private/var. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Releases 0.3.0. This merges the native-rows refactor with the new end-to-end test suite and the plan-mode audit fixes. See the
0.3.0section ofCHANGELOG.mdfor details.Refactor
modelparameter) replaces one worker per model and effortisolation: "worktree"and survive Claude-loop snapshots; live context is reported separately from turn usagePermissions and plan mode
Other
ENABLE_TOOL_SEARCH=true)npm run test:e2e) with a realclaudebinary, fake upstreams, and fake native CLIs; CI runs it on Linux, macOS, and WindowsVerification
npm run checkplus the hermetic E2E suite with a realclaudebinarymain:claude.cmdlaunched through cmd.exe dropped empty arguments such as--setting-sources "". It is fixed with a unit test and a CHANGELOG entry. The same run found two test-only issues: a 50 ms deadline race under load, and macOS/private/varworkspace pathsnpm run check567 pass,npm run test:e2e106 pass,npm run test:mod70 pass (run before the Windows fix, which doesn't touch the Mods hooks), no DEP0190🤖 Generated with Claude Code
https://claude.ai/code/session_01PYKBwU9Cuxk6bKhp74AEFD