Skip to content

Sync: upstream v3.74.0 (Opus 5 effort-shape, GPT-5.6, canonical-id, Node 22) - #5

Draft
zephg wants to merge 90 commits into
local/daily-driverfrom
local/merge-upstream-3.74.0
Draft

Sync: upstream v3.74.0 (Opus 5 effort-shape, GPT-5.6, canonical-id, Node 22)#5
zephg wants to merge 90 commits into
local/daily-driverfrom
local/merge-upstream-3.74.0

Conversation

@zephg

@zephg zephg commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Sync: upstream v3.74.0 → local/daily-driver

Merges upstream tag v3.74.0 (fork-point 13c803b7d, the v3.68.0 line) — 87 upstream commits, 447 files. Resolved per FORK.md; fork features preserved and verified.

What v3.74.0 brings (3 releases: 3.70 → 3.72 → 3.74)

  • Models/providers: Claude Opus 5, GPT-5.6 Fast priority mode, Moonshot / Kimi Code / Kenari providers, Grok 4.5, Gemini 3.6 Flash, MiniMax-M3, DeepSeek V4 image input, Kimi K3.
  • Cross-cutting refactors: canonical provider-identifier migration (WebMad, ~15 PRs), centralized API service-tier types (refactor(api): centralize service-tier primitives Zoo-Code-Org/Zoo-Code#1040), TaskRegistry + semaphore scheduler, @vscode/ripgrep 1.18 layout, Playwright visual-regression harness, Roo→Zoo branding.
  • Toolchain: Node 20.20.2 → 22.23.1 (engines + .nvmrc; pnpm stays 10.8.1).
  • UX/fixes: collapsed-header context-compaction button, terminal cold-start output-loss fix, "max" reasoning effort for OpenAI-compatible, Ollama refresh, Bedrock proxy DNS, Save-managed settings buffer, Dart + plaintext codebase indexing.

Conflict surface (6 code files + release mechanics)

providers/{anthropic,index,openai}.ts, api/providers/anthropic.ts, ClineProvider.ts, src/package.json — plus CHANGELOG / README / 18 i18n chat.json / 18 READMEs (mechanical, upstream block). Everything else auto-merged; the invariant gate confirmed no fork logic was silently reverted.

Fork decisions applied

  • Claude Opus 5 → fork effort-shape (upstream ships it budget/binary, but it 400s on budget_tokens) — the Sonnet-5 precedent. Converted across the Anthropic + Vertex registries and the OpenRouter + Requesty fetchers; Bedrock unchanged (shared isAdaptiveThinkingModel guard already matches opus-5). Default effort high (tunable; xhigh in the array).
  • GPT-5.6 collision resolved per the pre-baked FORK.md recipe: kept the fork's Luna 1.05M contextWindow + longContextPricing + effort defaults (sol high, luna low) + descriptions + gpt-5.5-pro; took upstream's cacheWrites/tiers (already reconciled in ae3547c1d).
  • Canonical-id migration: only providers/index.ts conflicted — re-expressed the openai-native default onto providerIdentifiers.openaiNative (dropped upstream's TODO(#992) "gpt-4o" fallback).
  • Adopted the new upstream exports ANTHROPIC_API_PROTOCOL / OPENAI_API_PROTOCOL (imported by provider-settings.ts).
  • Service-tier centralization (refactor(api): centralize service-tier primitives Zoo-Code-Org/Zoo-Code#1040) is a non-event for the fork (tiers moved to model.ts; applyLongContextPricing in cost.ts, both untouched).

Verification (Node 22.23.1)

  • @roo-code/types + zoo-code check-types: clean.
  • pnpm build: green (4/4 packages, webview included).
  • pnpm vsix --force: packaged zoo-code-3.74.0.vsix (version correctly inlined).
  • Affected provider specs: 241/241 pass (Opus 5 effort-shape assertions updated to match the fork).
  • Full src suite: the only failures are the documented baseline — reasoning.spec (14) + model-params.spec (8) = exactly 22 fixture-drift failures (from fd93c5bde, unchanged and stable across the Node bump) + the tree-sitter / dist_assets asset false-alarms. No merge regressions.

Caveats carried forward

  • Luna 1.05M contextWindow (fork) vs upstream 400K — still unverified against OpenAI's docs.
  • Vertex Opus 4.7/4.6 remain budget-shape (known fd93c5bde follow-up — do not "fix" here).
  • Opus 5 default effort high — flip to xhigh if you want it as the flagship default.

Commits: merge + test(providers): assert Opus 5 effort-shape + docs(fork): record the v3.74.0 sync.

taltas and others added 30 commits July 11, 2026 01:17
…ode-Org#807)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…o-Code-Org#808)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…-Org#876)

* feat(openai): add GPT-5.6 family (sol, terra, luna) support

Add the GPT-5.6 model family to both the OpenAI Codex (ChatGPT
subscription) and OpenAI Native (API) providers:

- gpt-5.6-sol: flagship frontier reasoning/coding model
- gpt-5.6-terra: balanced everyday model
- gpt-5.6-luna: fastest, most affordable family member

Update the default model id for both providers to gpt-5.6-sol and
update the corresponding unit test assertions.

Closes Zoo-Code-Org#871

* fix(openai-codex): correct GPT-5.6 context windows to 372000

Address review feedback on PR Zoo-Code-Org#876: the GPT-5.6 model context windows
in the Codex provider were set to 400000, but the OpenAI codex
models.json shows context_window and max_context_window of 372000 for
all three GPT-5.6 variants (sol, terra, luna). Updated accordingly.
…g#809)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…Org#810)

* chore(deps): update dependency sanitize-filename to v1.6.4

* test: fix flaky change detection test by wrapping rerender with act

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelaunay@wealthsimple.com>
…-Org#812)

* chore(deps): update dependency tree-sitter-wasms to v0.1.13

* test: add tree-sitter-dart.wasm to verified dist assets list

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelaunay@wealthsimple.com>
…-Org#270)

Co-authored-by: Elliott de Launay <edelauna@gmail.com>
…o onDidStartTerminalShellExecution (Zoo-Code-Org#800) (Zoo-Code-Org#834)

* fix(terminal): detect D marker directly to recover from lost VSCode shell-integration completion signals

* fix(terminal): move execution.read() into onDidStartTerminalShellExecution to fix cold-terminal zero-chunk output loss

* fix(terminal): update unit tests for read()-in-TerminalRegistry architecture

* fix(terminal): fix Windows CI test timing and improve coverage

* fix(terminal): address code review findings

* fix(terminal): address CodeRabbit review findings
* feat(kenari): add Kenari as a first-class provider

* test(kenari): cover provider registration arms and stream branches

* test(kenari): flip remaining partial branches, drop dead reasoning fallback

* refactor(kenari): address review feedback

- Reuse the shared extractReasoningFromDelta helper in the stream handler
  instead of a hand-rolled reasoning_content cast, matching opencode-go;
  this also adds the OpenRouter-style `reasoning` fallback. New handler
  test covers the fallback path.
- Fetcher spec: assert the surviving entry's contextWindow in the
  skip-invalid test so a field-mapping regression in that branch is
  caught, and add a parseKenariModel test that locks the
  context_window/max_output_tokens precedence over their aliases.
- Hoist KENARI_BASE_URL into @roo-code/types so the handler baseURL and
  the fetcher endpoint share one source of truth.
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…g#817)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…e-Org#814)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…rg#819)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(deps): update ai sdks and providers

* fix(deps): bump google-auth-library to ^10.2.0 for vertex-sdk 0.19.0 compat

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
* fix(deps): update frontend and ui stack

* refactor(webview-ui): replace deprecated lucide-react icon aliases

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
…-Code-Org#897)

* fix(zoo-gateway): enable image attach from live vision model tags

Prefer models-API vision tags over the stale hardcoded allowlist so Zoo Gateway (and Vercel AI Gateway) correctly enable image attachment for models like Claude Sonnet 4.5.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(zoo-gateway): drop unused eslint-disable that failed CI lint

CI does not flag no-var on the ambient global declaration, so the disable became an unused-directive warning.

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(zoo-gateway): remove redundant vision-capability comments

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
…e-Org#820)

* chore(deps): update dependency @copilotkit/aimock to v1.35.0

* fix(e2e): update fixtures for aimock v1.35.0 toolCallId breaking change

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
* chore: add weekly Discord release reminder

* ci(release-reminder): add concurrency guard, failure notification, and shell hardening

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…oo-Code-Org#823)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…Org#821)

* chore(deps): update dependency @dotenvx/dotenvx to v1.75.1

* chore: replace @dotenvx/dotenvx with plain dotenv

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…rg#826)

* chore(deps): update dependency @vscode/ripgrep to v1.18.0

* fix(cli): resolve ripgrep binary from per-platform package in build.sh

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
…-Code-Org#824)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* chore(deps): update dependency csstype to v3.2.3

* fix(e2e): wait for reopened parent before draining stack in delegation test

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
…#825)

* chore(deps): update dependency @trpc/client to v11.18.0

* chore(deps): bump @trpc/server to v11.18.0 to satisfy @trpc/client peer dep

* fix(webview): remove ineffective memo wrapper on SettingsView

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
…de-Org#867)

Add grok-4.5 model definition with 500K context window, .00/.00
input/output pricing, /bin/sh.50 cache pricing, and configurable reasoning
(low/medium/high, default high). Update xaiDefaultModelId from
grok-4.20 to grok-4.5 as the new flagship model.

Fix a latent bug in the xAI handler where reasoning effort was sent in
Chat Completions format (reasoning: { reasoning_effort }) instead of
the Responses API format (reasoning: { effort }). This affected
grok-3-mini and would have broken grok-4.5's configurable reasoning.

Update tests to cover the reasoning format fix and add grok-4.5
reasoning support tests. Update e2e test primary model to grok-4.5.

Fixes Zoo-Code-Org#866
zoomote Bot and others added 30 commits July 25, 2026 22:13
Zoo-Code-Org#968)

The Architect mode custom instructions ended with 'put it in the /plans
directory', which models interpreted as an absolute filesystem path,
causing 'EROFS: read-only file system, mkdir /plans' when saving plan
files. Reword to './plans' and clarify it is relative to the workspace
root.

Fixes Zoo-Code-Org#965

Co-authored-by: Toray Altas <6816042+taltas@users.noreply.github.com>
…o-Code-Org#1014)

* feat(TaskRegistry): introduce TaskRegistry and migrate clineStack

* refactor(tests): replace `as any` casts with bracket notation for private member access

* chore(eslint): enforce no-explicit-any with bulk suppressions for existing violations

* docs(TaskRegistry): push method

* fixup! chore(eslint): enforce no-explicit-any with bulk suppressions for existing violations
…Code-Org#986)

* chore(deps): update dependency shell-quote to v1.9.0 [security]

* chore(deps): remove obsolete shell-quote types

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
…#526)

* test(webview): add visual regression harness

* fix(webview): resolve relative compose path & font race in visual tests

* test(webview): configure Codecov JSDOM coverage ratcheting

* feat(webview): add Playwright CT coverage ratcheting

* fix(webview): swap visual regression target off deprecated toolkit

* chore(webview): address CodeRabbit review feedback

* fix(webview): emit Playwright CT coverage LCOV

* fix(webview): address code review feedback for Playwright CT harness

* docs: prefer committed visual snapshots; split videos into their own lane

* revert(RooHero): removing on hover test - can't make it deterministic
* refactor(api): use canonical provider identifiers

* test(api): cover canonical provider routing

* test(api): enforce exhaustive provider routing

* test(api): avoid concrete Vertex model IDs
…de-Org#991)

* refactor(types): use canonical identifiers for default models

* test(types): cover international ZAI default

* refactor(types): name absent provider default

* test(types): cover defaults preserved during rebase

* test(types): document identical Zai defaults
…de-Org#1020)

* refactor(api): use canonical model cache provider identifiers

* test(api): address model cache review feedback

* refactor(api): retain auth-scoped provider set

---------

Co-authored-by: edelauna <54631123+edelauna@users.noreply.github.com>
…e-Org#1019)

* refactor(shared): use canonical profile provider identifiers

* test(shared): strengthen profile validator coverage

* test(shared): avoid mutating provider identifiers

* chore(lint): prune profile validator suppressions
* refactor(core): use canonical provider identifiers

* test(core): tighten canonical provider coverage

* test(core): avoid mutating provider identifiers

* test(core): address canonical identifier review feedback

* chore(lint): update test suppression counts

* test(core): keep existing non-null assertions
…oo-Code-Org#1024) (Zoo-Code-Org#1032)

* fix(ripgrep): resolve platform-specific binary for @vscode/ripgrep >=1.18

* fix(environment): gracefully handle ripgrep not found during file listing

* fix(ripgrep): use npm_config_arch for platform-package resolution

* refactor(ripgrep): replace createRequire resolver with static candidate paths

* fix(ripgrep): evaluate npm_config_arch at call time in candidate paths

---------

Co-authored-by: Naved  Merchant <naved.merchant@gmail.com>
…de-Org#950)

* chore(lint): add core/webview to no-floating-promises ratchet

* fix(webview): catch indexing errors and cover changed handler paths

* chore(lint): triage new core/webview call sites after merging main

Also restore README.md to the upstream version, dropping an unintended formatter artifact picked up during the merge commit.

---------

Co-authored-by: edelauna <54631123+edelauna@users.noreply.github.com>
…Zoo-Code-Org#971)

* fix(branding): replace remaining user-facing "Roo" strings with "Zoo"

Replace user-facing product references from "Roo" to "Zoo":
- Webview panel and editor tab titles
- Integrated terminal names
- Diff view labels
- VS Code LM authorization justification
- LM Studio error messages
- Missing-parameter tool error (now i18n-keyed via tools:missingToolParameter[WithPath] across all 16 locales)
- Webview-ui localization strings (chat, settings, prompts across all locales)

Per review feedback, references to the external Roo provider/router remain
untouched: the routerRemoval messages, errors.roo/info.roo i18n keys, Roo
credit-balance notices, and other internal identifiers that reference the
legacy Roo provider rather than our brand.

* test: bump coverage for Roo-to-Zoo user-facing string changes (Zoo-Code-Org#971)

* chore: simplify i18n mocking in Task.spec.ts

* test: increase coverage of vscode-lm.ts and vscode-lm-format.ts

* fix(types): eliminate any casts in vscode-lm provider and format transform

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
… emit output (Zoo-Code-Org#1043)

* fix(terminal): delay command_output ask for short foreground commands

The command_output ask fired on the first output chunk of any foreground
command, prompting users even for commands about to complete. Schedule the
ask instead so it only fires when the command is still running after a
5s delay, preserving the interrupt/feedback path for long-running commands
while letting short commands finish without prompting.

Closes Zoo-Code-Org#1042

* fix(terminal): anchor command_output ask delay to execution start

Anchor the ask-delay timer to onShellExecutionStarted (falling back to the
pre-runCommand timestamp) so shell-integration startup on cold terminals
does not consume the grace period, and expand ask-policy tests to cover
the agent-timeout cancel, re-anchor reschedule, ask error handling, and
non-message responses to restore patch coverage.

* test(terminal): cover fallback anchor for command_output ask delay

* fix(terminal): clean up pending command_output ask on completion

- Supersede a still-pending command_output ask in onCompleted so it
  resolves immediately instead of lingering until the next interactive
  message, and clear the Proceed/Kill controls in the webview when the
  final non-partial command_output say arrives.
- Continue the process for any ask answer, not just typed messages, so a
  non-message response actually backgrounds the command and the tool
  resolves before the process completes.
- Strengthen ask-policy tests: assert the rescheduled ask still fires at
  the re-anchored deadline, assert early resolution for non-message
  answers, and cover ask supersession on completion.

* test(terminal): note synthetic yesButtonClicked in non-message ask test

---------

Co-authored-by: Roomote <roomote@roomote.dev>
…, Story 3.1) (Zoo-Code-Org#1031)

* feat(TaskScheduler): introduce TaskScheduler and wire into ClineProvider

* feat(Task): keep track of active running task

* docs(eslint): updating guidance on how to handle suppression file

* fix(ClineProvider): route createTaskWithHistoryItem through taskScheduler

* test(e2e): add scheduler regression tests for task resume paths

* refactor(ClineProvider): extract scheduleTask helper to deduplicate fire-and-forget scheduling

* refactor(ClineProvider): extract scheduleTask helper to deduplicate fire-and-forget scheduling

---------

Co-authored-by: Naved  Merchant <naved.merchant@gmail.com>
…oo-Code-Org#1045)

* ci: harden E2E workflow against VS Code binary download failures

Add restore-keys fallback to the VS Code test binary cache, probe the VS
Code update API before running tests, fall back to a stale cached binary
(via VSCODE_VERSION) when the CDN is unreachable, and retry the mocked
E2E step so transient network blips don't fail the merge queue. Skip
writing the pass marker when the stale-binary fallback was used.

Closes Zoo-Code-Org#1044

* ci: scope E2E retries to binary download, probe CDN endpoint, prune stale binaries

Address review feedback on Zoo-Code-Org#1045:
- Retry only the VS Code binary download (its own step), so genuine
  test failures fail fast instead of re-running the whole suite.
- Probe the archive CDN endpoint (via the 302-redirect HEAD) in
  addition to the update API, so the stale-binary fallback also
  engages when only the CDN host is down.
- Restore/save the binary cache with restore+save actions and prune
  older vscode-linux-x64-* dirs so each saved entry keeps one binary
  instead of growing with every version bump; skip the save when the
  stale fallback was used.
- Emit a ::warning:: when endpoints are unreachable with no cached
  binary, and echo why the pass marker is skipped on fallback runs.

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: edelauna <54631123+edelauna@users.noreply.github.com>
)

* refactor(webview): use canonical provider identifiers

* test(webview): remove brittle identifier mutation tests

* fix(webview): handle remaining model providers explicitly

* test(webview): avoid unreachable coverage branch

* refactor(webview): use canonical anthropic identifier

* test(webview): cover Anthropic Opus 1M tier

* test(webview): use canonical Anthropic identifier

* fix(webview): address canonical provider review

* test(webview): use canonical provider identifiers

* test(webview): cover Kimi Code model selection
* refactor: finish canonical provider identifier audit

* fix: address provider identifier review feedback

* refactor: centralize Anthropic protocol value

* refactor: reuse canonical provider protocol constants

* refactor: centralize OpenAI protocol value

* test: use canonical keyless provider identifiers

* test: address protocol routing review feedback
* refactor(api): centralize service-tier primitives

* test(openai-native): cover omitted completion tiers

* test(openai-native): cover resolved streaming tiers

* test(api): cover service tier fallbacks

* test(api): cover remaining service tier branches

* refactor(api): remove duplicate tier capture

* test(openai-native): cover flex service tier

* test(openai-native): expand service tier coverage

* refactor: address service tier review feedback

* refactor(api): address service tier review feedback

* test(webview): add model info visual snapshot

* fix(webview): isolate visual test dependencies

* test(webview): update service tier visual baseline

* fix(webview): add @source directive so Tailwind utilities generate in CT builds

---------

Co-authored-by: Elliott de Launay <edelauna@gmail.com>
…#1063)

* feat(openai-codex): persist and send Fast priority mode

* refactor(openai-codex): align service tier types
…rom the previous test (Zoo-Code-Org#1074)

* test(e2e): drain delayed mock stream deterministically in subtask suite

The API-hang subtask fixture used aimock's flat latency, which applies
per SSE chunk and is never interrupted by client disconnects, so a
cancelled delayed stream stayed pending server-side for chunks x latency
and could flush into the next test's traffic.

- delay only the first chunk via streamingProfile.ttft so the pending
  window is exactly the shared SUBTASK_API_HANG_RESPONSE_LATENCY_MS
- anchor the post-test drain to the request's aimock journal timestamp
  and wait out only the remainder of that bounded window

* docs(e2e): clarify subtask drain invariants from code review

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
…decisions (Zoo-Code-Org#1053)

* fix(router-provider): fetch model metadata before context management decisions

Router providers (zoo-gateway, kimi-code) that are auth-scoped skip the
model cache entirely. On a fresh handler instance getModel() falls back
to hardcoded defaults (e.g. 200k context window) because the real model
list has not been fetched yet. Context management runs before
createMessage() which is where fetchModel() normally happens, so
condensing/truncation decisions use the wrong context window.

Add ensureModelFetched() to RouterProvider that fetches once when the
instance model map is empty. Call it in Task before context management
so getModel() returns accurate metadata from the API.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(router-provider): single-flight ensureModelFetched and earlier call site

Make ensureModelFetched single-flight so concurrent callers share a
single in-flight fetch instead of firing duplicates. Move the call site
before the cachedStreamingModel snapshot so the model info is accurate
from the start of the streaming session, not just for context management.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(router-provider): address review feedback on fetch failures and double-fetch

Make fetchModel single-flight and short-circuit once models are loaded so
auth-scoped providers do not hit the models endpoint twice per request.
Catch ensureModelFetched failures in Task via safeEnsureModelFetched so a
metadata fetch error falls back to defaults instead of ending the task.
Add reject-then-recover coverage and Task tests for the new call sites.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(test): spy private addToApiConversationHistory via TaskTestAccess

vi.spyOn on the private method fails check-types; route it through the
existing test access cast like the other private helpers.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Sync from fork-point 13c803b (v3.68.0 line) — 87 upstream commits, 447 files.
Conflict surface: 6 code files + release mechanics (CHANGELOG/README/i18n/version).

Upstream highlights absorbed: Claude Opus 5, GPT-5.6 Fast priority mode, Moonshot /
Kimi Code / Kenari providers, Grok 4.5, Gemini 3.6 Flash, MiniMax-M3, the canonical
provider-identifier migration, centralized API service-tier types, the Node 22.23.1
toolchain, @vscode/ripgrep 1.18 layout, and the TaskRegistry / semaphore scheduler.

Fork features preserved (per FORK.md):
- Anthropic/Vertex effort-shape registries (Opus 4.6/4.7/4.8, Sonnet 5, Fable 5):
  supportsReasoningEffort, no supportsReasoningBudget; the keystone getAnthropicReasoning
  adaptive / output_config.effort branch is intact.
- GPT-5.6 sol/terra/luna fork values (Luna 1.05M contextWindow + longContextPricing +
  effort defaults + descriptions; upstream cacheWrites/tiers via ae3547c) + gpt-5.5-pro.
- openai-native default -> openAiNativeDefaultModelId, re-expressed onto the new
  providerIdentifiers.openaiNative canonical case (dropped upstream's TODO(Zoo-Code-Org#992) gpt-4o).
- Adopted the new upstream exports ANTHROPIC_API_PROTOCOL / OPENAI_API_PROTOCOL.
- Code-index workspace-scope wiring (config-resolver / dotfile-loader) survived auto-merge.

New this sync — Claude Opus 5 on the fork effort-shape (Sonnet-5 precedent; upstream
ships it budget/binary, but it 400s on budget_tokens): converted across anthropic.ts,
vertex.ts, and the openrouter/requesty fetchers. Bedrock is unchanged (shared guard
already covers opus-5). Opus 5 spec assertions are updated in a follow-up commit.

Caveats carried forward: Luna 1.05M vs upstream 400K contextWindow is still unverified
against OpenAI docs; Vertex Opus 4.7/4.6 remain budget-shape (known fd93c5b follow-up).
Upstream wired claude-opus-5 in budget/binary shape across the Anthropic,
Vertex, OpenRouter, and Requesty spec suites. The fork adopts Opus 5 on the
effort/adaptive shape (Sonnet-5 precedent), so mirror the existing
opus-4-8 / sonnet-5 / fable-5 assertions: supportsReasoningEffort + no
budget/binary, max_tokens at the model ceiling (128k) not the budget default,
and the effort/adaptive thinking envelope. Also flips the Requesty provider
getModels mock entry to the effort shape. 7 provider spec files, 241 tests pass.
Add the v3.74.0 sync-log entry (merge-base 13c803b, 87 commits / 447 files,
6-file conflict surface) and the decisions: Opus 5 adopted on the fork effort-shape
(Sonnet-5 precedent), GPT-5.6 resolved per the pre-baked Feature 2 recipe, the
canonical provider-identifier migration (only providers/index.ts conflicted), the
new ANTHROPIC_API_PROTOCOL / OPENAI_API_PROTOCOL exports, service-tier centralization
(a non-event for the fork), and the Node 20.20.2 -> 22.23.1 toolchain bump. Mark
Opus 5 + Sonnet 5 as effort-shape in the divergence table.
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.