Repository navigation
Merge upstream v8.0.44 into the fork (HOUSE-79) - #13
Conversation
…improved state management - Add support for handling multiple auth records from a single file. - Preserve plugin-disabled states and prioritize existing auth states when updating. - Unregister stale auths and associated models to maintain consistency. - Introduce dynamic auth ID assignment and file-based deduplication for better reliability. - Improve metadata normalization, priority handling, and file path matching. Closes: #6551
test(claude): pin executor clock in tool_search disabled golden
- Add `send-keepalive-before-ft` configuration to allow sending SSE heartbeats before the first token arrives. - Support pre-first-token keep-alives and handle early failure events when SSE headers are already committed. Closes: #6554
docs: add sub2api to "Who is with us?"
…cp-name fix(claude): restore passthrough MCP tools wrapped with their full mcp__ name
…eferred tool Anthropic keeps the prompt cache when deferred tools are added, but not when a request goes from no deferred tool to one. Codex hides deferred tools until a search returns them, so the request after the first discovery always missed the cache. Native tool search now declares one constant deferred anchor tool ahead of discovered tools, so discoveries only append to tools[].
…-anchor fix(claude): keep prompt cache when tool_search discovers the first deferred tool
…eloads - Access configuration safely via getters across server routes, middleware, and service routines. - Clone configuration snapshots for runtime and synchronize access in management handlers. - Guard configuration YAML snapshots with mutex locks during reloads. Closes: #6559
…anitization - Retain multi-branch `anyOf` and `oneOf` unions instead of flattening them into a single branch. - Normalize `oneOf` to `anyOf` on native Gemini/Antigravity schema carriers while preserving `oneOf` when standard constraints are allowed. - Materialize required-only union branches using parent object properties. - Strip null and boolean `false` branches from unions, applying `nullable: true` and description hints where appropriate. Closes: #3662
… translator - Normalize replayed `tool_search_call` and `tool_search_output` items into Gemini function call and output pairs. - Map discovered tool names and namespaces appropriately during tool search history serialization. - Emit `tool_search_call` output items with proper lifecycle statuses and arguments in response translation. Closes: #5588
- Add `claude-haiku-5-5` model definition to registry. - Remove `gemini-3.7-flash`, `gemini-3.6-flash-high`, `gemini-3.7-flash-high`, `gemini-pro-agent`, and `gemini-3.1-pro-low` models.
- Introduce `sdk/httptransport` package with `Decorator`, `WithDecorator`, `WithoutDecorator`, `InheritDecorator`, and `Decorate` functions. - Propagate transport decorators from incoming HTTP request contexts in `BaseAPIHandler.GetContextWithCancel`. - Apply transport decoration after client transport selection across proxy-aware, Devin, uTLS, and Antigravity HTTP clients. Closes: #5616
…ailability docs(readme): update Claude, Gemini and Meta model availability
…ut tool lists Closes: #6578
…ecycle drops - Recognize `http2: client connection force closed` and `http2: client conn is closed` errors as connection lifecycle and transient transport issues. - Prevent credential cooldown and enable automatic request retries for closed HTTP/2 client connections. Closes: #6580
…eloads - Access configuration safely via getters across server routes, middleware, and service routines. - Clone configuration snapshots for runtime and synchronize access in management handlers. - Guard configuration YAML snapshots with mutex locks during reloads. Closes: #6583
… responses stream - Introduce `ItemIDPrefix` using UUID in `interactionsToResponsesStreamState`. - Update `interactionsFallbackItemID` to include the unique prefix when generating fallback item IDs. Closes: #6588
…eloads - Access configuration safely via getters across server routes, middleware, and service routines. - Clone configuration snapshots for runtime and synchronize access in management handlers. - Guard configuration YAML snapshots with mutex locks during reloads. Closes: #6592
… in OpenAI chat completions - Introduce `defaultClaudeChatMaxTokensForModel` to determine default max tokens based on model metadata and fallback rules. - Update `ConvertOpenAIRequestToClaude` to apply model-specific default max tokens and handle null `max_tokens` or `max_completion_tokens`. - Implement `stripTranslatedDefaultMaxTokens` in Claude executor to allow payload default rules to override synthesized max tokens when omitted by the caller. Closes: #6601
- Fall back to schema prompts for Antigravity Claude 5.5 while preserving unrelated request settings. - Normalize unsupported forced tool choices before thinking preparation in direct Claude execution and token-count paths. - Add regression coverage for schema integrity, model boundaries, retries, and final payload rule precedence. Closes: #7000
- Route bare text and media blocks in a top-level interactions input array through the existing user content converter so images and files are no longer dropped on the Antigravity path. - Keep envelope and explicit-role items on the step dispatch so step-form requests, native parts, and system/developer turn accounting stay unchanged. Closes: #7008
Validate draft TXT values and RFC 3986 paths without legacy schema mixing; preserve first-key-wins and legacy base-path compatibility. Validate RFC 6335 names, filter unusable addresses, and display scoped IPv6 and WebSocket URLs. Replace the single-packet browser with per-interface RR caching, source validation, TTL and cache-flush handling, PTR maintenance and known-answer suppression. Add deterministic split-order, capacity, expiry, scope and schema regression tests.
…wn and failover - Tag locally synthesized missing-finishReason failures as stream-truncated in the Gemini and Vertex executors, and carry that classification through the auth manager so it skips credential cooldown and stops cross-credential replay while the public 502 and partial usage are preserved. - Carry the truncation classification through usage reporting and the Home queue payload so Home-side schedulers also skip the spurious cooldown, and add regression coverage for both the manager and usage paths. Closes: #7005
feat(discovery): align LAN discovery with IETF AI gateway draft
- Remove APIMart sponsor entries from README.md, README_CN.md, and README_JA.md. - Delete associated sponsor image assets for APIMart.
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>
There was a problem hiding this comment.
CodeQL found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.
There was a problem hiding this comment.
incomplete review: no reviewer completedprimary native-openai/openai/gpt-5.6-sol streamfallback native-anthropic/anthropic/claude-opus-5-5 provider 400 context_overflowprimary native-anthropic/anthropic/claude-opus-5-5 provider 400 context_overflowfallback native-anthropic/anthropic/claude-opus-5-5 provider 400 context_overflowprimary native-openai/openai/gpt-6.1-sol streamfallback native-anthropic/anthropic/claude-opus-5-5 provider 400 context_overflowprimary native-openai/openai/gpt-6.1-sol streamlargest inputs: internal/registry/models/codex_client_models.json (712116 bytes), internal/runtime/executor/claude_executor_test.go (309112 bytes), internal/translator/gemini/openai/responses/gemini_openai-responses_request_test.go (177551 bytes), internal/translator/antigravity/claude/antigravity_claude_request_test.go (176847 bytes), internal/translator/claude/openai/responses/claude_openai-responses_request_test.go (172268 bytes), internal/discovery/zeroconf.go (156813 bytes), internal/util/gemini_schema_test.go (155086 bytes), internal/translator/openai/openai/responses/openai_openai-responses_request_test.go (141103 bytes), internal/translator/claude/openai/responses/testdata/tool_search_disabled/dev_golden.json (138950 bytes), internal/runtime/executor/claude_executor_cloaking.go (131188 bytes)
|
There was a problem hiding this comment.
incomplete review: no reviewer completedprimary native-openai/openai/gpt-5.6-sol streamfallback native-anthropic/anthropic/claude-opus-5-5 provider 400 context_overflowprimary native-anthropic/anthropic/claude-opus-5-5 provider 400 context_overflowfallback native-anthropic/anthropic/claude-opus-5-5 provider 400 context_overflowprimary native-openai/openai/gpt-6.1-sol streamfallback native-anthropic/anthropic/claude-opus-5-5 provider 400 context_overflowprimary native-openai/openai/gpt-6.1-sol streamlargest inputs: internal/registry/models/codex_client_models.json (712116 bytes), internal/runtime/executor/claude_executor_test.go (309112 bytes), internal/translator/gemini/openai/responses/gemini_openai-responses_request_test.go (177551 bytes), internal/translator/antigravity/claude/antigravity_claude_request_test.go (176847 bytes), internal/translator/claude/openai/responses/claude_openai-responses_request_test.go (172268 bytes), internal/discovery/zeroconf.go (156813 bytes), internal/util/gemini_schema_test.go (155086 bytes), internal/translator/openai/openai/responses/openai_openai-responses_request_test.go (141103 bytes), internal/translator/claude/openai/responses/testdata/tool_search_disabled/dev_golden.json (138950 bytes), internal/runtime/executor/claude_executor_cloaking.go (131188 bytes)
|
@unfret review |
|
Admin merge, approved by Eric on 2026-10-27 in the HOUSE-79 session, after the review of our changes.
Merged with a merge commit to keep upstream's history. |
Summary
Moves the fork from upstream
v8.0.13tov8.0.44with a merge commit, somainkeeps upstream ancestry and lands through the normal gates.The diff against
mainis mostly upstream: 966 files, +134,827 / −9,753. To read only what this PR authored:git show --remerge-diff 7f7d7a61prints the conflict resolutions (1,154 lines, of which 717 are the deletedrelease.yamland 49 arego.sum).git diff v8.0.44 c88d701fprints our whole fork delta on the new base (83 files, +5,438 / −1,152).git show 27530907prints the one behaviour fix.Conflict resolutions in production code:
Three test files take upstream's synchronization (
xai_websockets_executor_test.go,gitstore_test.go,websocket_session_target_test.go)..github/workflows/release.yamlstays deleted, because upstream fires it on every tag, including ourv8.0.44-mob.Ntags.go.sumis regenerated, andgo.modalready held the higher version of every dependency.Behaviour fix outside the conflict markers. Upstream's two quota-restore points copy back
ObservedAtandSignalsonly. OurQuotaStatealso hasReserveWindows(HOUSE-62), so a newer reserve window was dropped:auth.Quota = existing.Quota.Clone() auth.Quota.ObservedAt = observation.ObservedAt auth.Quota.Signals = observation.Signals +auth.Quota.ReserveWindows = observation.ReserveWindowsHow upstream's affinity rewrite (
7a687f42) interacts with soonest-reset:session-affinity-rebind-onis unset in our config and defaults toany.credential_quotacooldown (bbcd5734) now excludes an account before ranking. Soonest-reset's "all windows exhausted" fallback therefore cannot override a real account cooldown.Evidence
TestUpdateKeepsNewerIncomingReserveWindowfails. It fails in the file-snapshot case or thecredential_quotacase, whichever line is removed. The test registers an auth with a weekly reserve window at 10% used, updates it with a newer window at 90% used, and reads back the old window.After: both cases pass. The stored auth keeps the newer window.
c88d701f) and started it on studio2 with a copy of the live config. The copy pointed at port 18317 and an empty auth folder, so no live credential was touched.GET /v1/modelswith 200.config.LoadConfigon the same copy read:strategy="soonest-reset" session-affinity=true ttl="4h", 2 quota reserves at 20% (reserves valid),request-retry=1 max-retry-credentials=1 max-retry-interval=10 save-cooldown-status=true transient-error-cooldown-seconds=5 ws-auth=true.c88d701f: 6 files, 15 tests passed. That covers models, chat completions, messages, failover, responses, and 6 soonest-reset selector scenarios.Merge Danger
Door: one-way for history, two-way for the running proxy.
Merging brings 387 upstream commits into
main. Reverting the merge commit restores the old tree, but the next upstream sync would then have to revert that revert. On studio2, the deploy after merge is a symlink switch, so going back tov8.0.13-mob.6takes one command and a launchd restart.Blast Radius: studio2-proxy
Every client of the studio2 proxy (Claude Code, Codex CLI, the factory host and agy) rides on this after deploy. The risk is upstream behaviour changes in routing, translators and executors that our tests don't cover. The deploy keeps a config and binary-path backup.
Acceptance criteria (HOUSE-79)
maincontains upstreamv8.0.44and all of our behaviour listed above."git merge-base --is-ancestor v8.0.44 c88d701fexits 0. Mergify lands with a merge commit, which keeps it.mainafter merge.git ls-tree --name-only c88d701f .github/workflows/listsci.ymlonly. The branch was pushed alone;push.followTagsis unset and upstream tags are lightweight.go test ./...onc88d701f: 102 packages ok, no failures. Hermetic e2e: 15 of 15 locally. CI result on this head appears in the checks.7a687f42and our soonest-reset changes are reconciled by reading both … The PR names how the two interact."v8.0.44still lacksgpt-6.1-terra."git grep -l gpt-6.1-terra v8.0.44 -- internal/registryfinds 0 files.go.modkeeps the higher of our MOB-1499 versions and upstream's …go build ./...andgo test ./...pass."go.modis unchanged by the merge resolution;klauspost/compress v1.18.7stays above upstream. Build and test exit 0.MOBILYZE.mdnames the new base, the landing method used, and why."git show c88d701f -- MOBILYZE.mdv8.0.44-mob.1is cut from the merged head."v8.0.44-mob.1…" plus the ticket's live verification listGate results on
c88d701fgo build ./...go vet ./sdk/cliproxy/... ./internal/config/... ./internal/runtime/...go test ./...(102 packages ok)pnpm --dir e2e run fmt:check/lintpnpm --dir e2e exec e2e run --target hermetic(15 passed)gofmt -lon files this PR authoredgofmt -lflags three files that are byte-identical to upstreamv8.0.44. Go 1.27.3 flagsinternal/pluginhost/host.go, and Go 1.26.10 flags two test files. The twogofmtversions disagree on those files. They are left as upstream ships them, and CI doesn't rungofmt.Not verified
Linear: HOUSE-79
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.