Commit graph

782 commits

Author SHA1 Message Date
roomote[bot]
2053de7b40
feat: remove Enable URL context and Enable Grounding with Google search checkboxes (#11253)
Remove the "Enable URL context" and "Enable Grounding with Google search"
checkboxes from Gemini and Vertex provider settings, along with:

- enableUrlContext and enableGrounding fields from provider settings schemas
- URL context and Google Search tool injection in completePrompt methods
- Associated translation keys from all 18 locale files
- Related test cases updated to reflect the removal
- simplifySettings prop removed from Gemini and Vertex components
  (it was only used for the removed checkboxes in those components)

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-06 09:43:54 -05:00
Hannes Rudolph
87f6d908c6
fix: capture and round-trip thinking signature for Bedrock Claude (#11238)
* fix: capture and round-trip thinking signature for Bedrock Claude models

Bedrock handler streams reasoning text from Claude's extended thinking but
never captures the cryptographic signature. This causes 400 errors on
multi-turn conversations with tool use: 'Expected thinking or
redacted_thinking, but found tool_use'.

Changes:
- bedrock.ts: Capture reasoningContent.signature from Converse API stream
  deltas, implement getThoughtSignature() so Task.ts stores it as a proper
  thinking content block
- bedrock-converse-format.ts: Convert thinking blocks to Bedrock's
  reasoningContent format with signature, skip reasoning/redacted_thinking/
  thoughtSignature blocks that aren't valid for the API

* fix: add redacted_thinking round-trip, fix interface types, add tests

Address PR review feedback:
- Update ContentBlockDeltaEvent interface to include signature and
  redactedContent fields (removes type assertions)
- Add 6 tests for thinking/reasoning block conversions in
  bedrock-converse-format.ts

Also add redacted_thinking round-trip support:
- bedrock.ts: Capture redactedContent from stream deltas, base64 encode,
  expose via getRedactedThinkingBlocks()
- Task.ts: Insert redacted_thinking blocks after thinking block in
  assistant messages
- bedrock-converse-format.ts: Convert redacted_thinking blocks back to
  reasoningContent.redactedContent (base64 → Uint8Array)
2026-02-05 17:53:00 -08:00
Hannes Rudolph
6a32b2e6fe
fix: restore Gemini thought signature round-tripping after AI SDK migration (#11237)
PR #11180 migrated Gemini/Vertex providers to the AI SDK and deleted
gemini-format.ts which contained the working thought signature round-trip
logic (originally added in PR #10590). This broke all Gemini 3 tool use
with a 400 error: 'Function call is missing a thought_signature'.

Changes:
- Gemini/Vertex handlers: capture thoughtSignature from providerMetadata
  on tool-call stream events, expose via getThoughtSignature()
- convertToAiSdkMessages(): extract thoughtSignature content blocks from
  history, attach as providerOptions on first tool-call part (per Gemini 3
  parallel call rules)
- Add 3 tests verifying thought signature round-trip behavior
2026-02-05 18:17:13 -07:00
Hannes Rudolph
23d34154d0
fix: guard against empty-string baseURL in provider constructors (#11233)
When the 'custom base URL' checkbox is unchecked in the UI, the setting
is set to '' (empty string). Providers that passed this directly to their
SDK constructors caused 'Failed to parse URL' errors because the SDK
treated '' as a valid but broken base URL override.

- gemini.ts: use || undefined (was passing raw option)
- openai-native.ts: use || undefined (was passing raw option)
- openai.ts: change ?? to || for fallback default
- deepseek.ts: change ?? to || for fallback default
- moonshot.ts: change ?? to || for fallback default

Adds test coverage for Gemini and OpenAI Native constructors verifying
empty-string baseURL is coerced to undefined.
2026-02-05 15:30:59 -08:00
roomote[bot]
d5b7fdcfa7
feat: add gpt-5.3-codex model to OpenAI Codex provider (#11225)
feat: add gpt-5.3-codex model and make it default for OpenAI Codex provider

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-05 12:28:45 -08:00
Hannes Rudolph
47bba1c2f7
feat: add Claude Opus 4.6 support across all providers (#11224)
* feat: add Claude Opus 4.6 support across all providers

Add Claude Opus 4.6 (claude-opus-4-6) model definitions and 1M context
support across Anthropic, Bedrock, Vertex AI, OpenRouter, and Vercel AI
Gateway providers.

- Anthropic: 128K max output, /5 pricing, 1M context tiers
- Bedrock: anthropic.claude-opus-4-6-v1:0 with 1M context + global inference
- Vertex: claude-opus-4-6 with 1M context tiers
- OpenRouter: prompt caching + reasoning budget sets
- Vercel AI Gateway: Opus 4.5 and 4.6 added to capability sets
- UI: 1M context checkbox for Opus 4.6 on all providers
- i18n: Updated 1M context descriptions across 18 locales

Also adds Opus 4.5 to Vercel AI Gateway (previously missing) and
OpenRouter maxTokens overrides for Opus 4.5/4.6.

Closes #11223

* fix: apply tier pricing when 1M context is enabled on Bedrock

When awsBedrock1MContext is enabled for tiered models like Opus 4.6,
also apply the 1M tier pricing (inputPrice, outputPrice, cache prices)
instead of only updating contextWindow. This ensures cost calculations
and UI display use the correct >200K rates.
2026-02-05 13:18:40 -07:00
Hannes Rudolph
1b75d59a68
fix(ai-sdk): preserve reasoning parts in message conversion (#11217)
* fix(ai-sdk): preserve reasoning parts in message conversion

* fix(ai-sdk): convert message-level reasoning_content to reasoning part

* fix(task): remove invalid openai-compatible from reasoning allowlist

* feat: add isAiSdkProvider() method for dynamic AI SDK provider detection

- Add isAiSdkProvider() method to ApiHandler interface
- Default implementation in BaseProvider returns false
- Override to return true in 11 AI SDK providers:
  deepseek, fireworks, mistral, groq, xai, cerebras,
  sambanova, huggingface, gemini, vertex, openai-compatible
- Update Task.ts to use dynamic detection instead of hardcoded Set
- Add method to FakeAIHandler and update test mocks

* fix: handle reasoning parts in flattenAiSdkMessagesToStringContent

- Strip reasoning parts when flattening messages for string-only models
- Allow flattening when message contains only text and reasoning parts
- Add tests for reasoning part handling in string-only model contexts

This addresses the review feedback about ensuring flattenAiSdkMessagesToStringContent
works correctly when reasoning parts are present (e.g., SambaNova DeepSeek).

---------

Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-05 10:48:21 -07:00
Matt Rubens
934f34ea87
Revert "fix(ai-sdk): preserve reasoning parts in message conversion" (#11216)
Revert "fix(ai-sdk): preserve reasoning parts in message conversion (#11196)"

This reverts commit 227b9796d3.
2026-02-05 07:40:36 -08:00
Hannes Rudolph
227b9796d3
fix(ai-sdk): preserve reasoning parts in message conversion (#11196)
* fix(ai-sdk): preserve reasoning parts in message conversion

* fix(ai-sdk): convert message-level reasoning_content to reasoning part

* fix(task): remove invalid openai-compatible from reasoning allowlist
2026-02-04 22:00:11 -08:00
Daniel
afe51e0fe8
feat: migrate Gemini and Vertex providers to AI SDK (#11180)
* feat: migrate Gemini and Vertex providers to AI SDK

- Migrate GeminiHandler from @google/genai to @ai-sdk/google
- Create standalone VertexHandler using @ai-sdk/google-vertex
- Use shared AI SDK utilities (streamText, generateText, convertToAiSdkMessages)
- Support thinkingConfig via providerOptions.google.thinkingConfig
- Support Google Search and URL Context grounding tools
- Preserve cost calculation with tiered pricing
- Remove gemini-format.ts (AI SDK handles message conversion)

EXT-643

* fix: remove unused import and implement allowedFunctionNames tool filtering

- Remove unused handleAiSdkError import from gemini.ts
- Implement tool filtering based on allowedFunctionNames in both
  GeminiHandler and VertexHandler createMessage methods
- Filter tools before converting to AI SDK format to restrict
  model access to only allowed functions
2026-02-04 17:31:48 -07:00
roomote[bot]
460cff4c3b
feat: migrate HuggingFace provider to AI SDK (#11156)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-03 11:59:26 -05:00
roomote[bot]
e90e6178e3
feat: migrate xAI provider to use dedicated @ai-sdk/xai package (#11158)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-02 23:56:07 -05:00
roomote[bot]
67fb150727
feat: use custom Base URL for OpenRouter model list fetch (#11154)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-02 23:03:47 -05:00
roomote[bot]
c5874fc764
feat: migrate SambaNova provider to AI SDK (#11153)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-02 23:02:32 -05:00
Daniel
b020f6be43
feat(api): migrate Mistral provider to AI SDK (#11089)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-02 10:45:51 -05:00
Daniel
b5ae557834
feat(api): migrate Fireworks provider to AI SDK (#11118) 2026-01-30 14:52:49 -05:00
Daniel
e771a4936b
feat: migrate Groq provider to @ai-sdk/groq (#11088) 2026-01-30 09:45:21 -05:00
Hannes Rudolph
cc86049f10
refactor(read_file): Codex-inspired read_file refactor EXT-617 (#10981) 2026-01-29 15:16:32 -07:00
Daniel
0f43cc9814
feat: migrate Cerebras provider to AI SDK (#11086) 2026-01-29 17:07:59 -05:00
Daniel
4b1d78fe0a
feat: migrate DeepSeek to @ai-sdk/deepseek + fix AI SDK tool streaming (#11079) 2026-01-29 15:56:51 -05:00
Matt Rubens
40b2bdc4d0
Revert "feat(vscode-lm): add image support for VS Code LM API provider" (#11068) 2026-01-29 01:41:20 -05:00
roomote[bot]
49aac7ea00
feat(vscode-lm): add image support for VS Code LM API provider (#11065)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-29 01:34:09 -05:00
Daniel
8d38e60187
feat: Add OpenAI-compatible base provider and migrate Moonshot to AI SDK (#11063) 2026-01-29 01:29:33 -05:00
Daniel
ed35b09aad
Enable parallel tool calls by default (#11031) 2026-01-29 01:29:15 -05:00
Daniel
fe722dad23
feat: add AI SDK dependencies and message conversion utilities (#11047) 2026-01-28 14:05:53 -05:00
Daniel
17d3456e96
fix: remove duplicate tool_call emission from Responses API providers (#11008) 2026-01-27 13:33:15 -05:00
Daniel
f5d32e771a
Fix LiteLLM tool ID validation errors for Bedrock proxy (#10990) 2026-01-26 23:54:48 -05:00
Daniel
dd245cc40c
fix: VS Code LM token counting returns 0 outside requests, breaking context condensing (EXT-620) (#10983)
- Modified VsCodeLmHandler.internalCountTokens() to create temporary cancellation tokens when needed
- Token counting now works both during and outside of active requests
- Added 4 new tests to verify the fix and prevent regression
- Resolves issue where VS Code LM API users experienced context overflow errors
2026-01-26 19:43:10 -05:00
Daniel
f9a3a178db
fix: truncate AWS Bedrock toolUseId to 64 characters (#10902) 2026-01-24 00:49:33 -05:00
Hannes Rudolph
be0e8c2665
chore: clean up XML legacy code and native-only comments (#10900) 2026-01-22 15:56:11 -05:00
Hannes Rudolph
1feefb6f43
fix(openai): prevent double emission of text/reasoning in native and codex handlers (#10888) 2026-01-22 01:22:29 -05:00
Daniel
7f854c0dd7
feat: remove Claude Code provider (#10883) 2026-01-21 21:32:56 -05:00
Hannes Rudolph
8de9337e63
chore: remove XML tool calling support (#10841)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-20 20:25:08 -05:00
Daniel
95be704ebf
fix(litellm): detect Gemini models with space-separated names for thought signature injection (#10787) 2026-01-16 17:43:51 -05:00
Hannes Rudolph
9533f0be3c
fix(openai-codex): reset invalid model selection (#10777) 2026-01-16 14:55:01 -07:00
Daniel
ddac338fdd
fix: Gemini thought signature validation errors (#10694)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-15 23:25:42 -05:00
Daniel
e34d93e2cb
fix: truncate call_id to 64 chars for OpenAI Responses API (#10763) 2026-01-15 23:09:54 -05:00
Daniel
3a884ee01e
fix: filter out empty text blocks from user messages for Gemini compatibility (#10728) 2026-01-15 23:03:16 -05:00
Daniel
bbf3196837
fix: filter Ollama models without native tool support (#10735) 2026-01-15 23:01:25 -05:00
Hannes Rudolph
f2b16d400d
fix: handle missing tool identity in OpenAI Native streams (#10719) 2026-01-15 11:42:34 -07:00
Daniel
d7b7e17a21
fix(litellm): inject dummy thought signatures on ALL tool calls for Gemini (#10743) 2026-01-14 23:49:22 -05:00
Hannes Rudolph
4ebbca08b0
feat: add OpenAI Codex provider with OAuth subscription authentication (#10736)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-14 23:48:51 -05:00
Hannes Rudolph
9b1c8500d9
feat(gemini): add allowedFunctionNames support to prevent mode switch errors (#10708)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-13 23:49:57 -05:00
Daniel
78821a3951
fix: use placeholder for empty tool result content to fix Gemini API validation (#10672) 2026-01-13 01:39:25 -05:00
Daniel
2d4dba0286
fix: omit parallel_tool_calls when not explicitly enabled (COM-406) (#10671) 2026-01-13 01:37:41 -05:00
Daniel
f439496147
fix: correct Gemini 3 thought signature injection format via OpenRouter (#10640) 2026-01-12 17:05:00 -05:00
Hannes Rudolph
5a82c334ae
chore: disable edit_file tool for Gemini/Vertex (#10594) 2026-01-09 21:24:15 -05:00
roomote[bot]
d97e540ac6
fix(cerebras): ensure all tools have consistent strict mode values (#10589)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-09 18:50:16 -07:00
Hannes Rudolph
168cfcaba5
fix: round-trip Gemini thought signatures for tool calls (#10590) 2026-01-09 20:03:58 -05:00
Chris Estreich
a4eb15b5a8
Add some functionality to @roo-code/core for the cli (#10584) 2026-01-09 13:05:15 -08:00