Commit graph

3424 commits

Author SHA1 Message Date
Roo Code
64c9d14710 fix: make pathUtils tests cross-platform and revert node engine bump
- Use path.resolve/path.normalize/path.join in pathUtils.spec.ts for
  platform-agnostic test paths (fixes 12 Windows test failures)
- Update vscode mock to use platform-native paths
- Revert node engine 20.20.0 back to 20.19.2 in package.json and
  src/package.json to match CI setup-node-pnpm default
2026-02-06 16:05:31 +00:00
randomizedcoder dave.seddon.ca@gmail.com
bdae65b27b fix(tools): prevent EACCES errors from absolute paths in tool calls (#11208) 2026-02-05 21:48:04 -08:00
Hannes Rudolph
b0dc6ae918
refactor(task): append environment details into existing blocks (#11198)
* refactor(task): append environment details into existing blocks

Add appendEnvironmentDetails() helper that merges environment details
into the last text block or tool_result instead of adding a standalone
trailing text block.

This avoids message shapes that can break interleaved-thinking models
like DeepSeek reasoner, which expect specific message structures.

Changes:
- Add appendEnvironmentDetails() and removeEnvironmentDetailsBlocks() helpers
- Update Task.resumeAfterDelegation() to use the helper
- Update Task.recursivelyMakeClineRequests() to use the helper
- Add comprehensive unit tests (26 test cases)

* fix: use named import for Anthropic SDK to match codebase convention
2026-02-05 12:33:00 -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
roomote[bot]
f73b103b87
chore: remove dead toolFormat code from getEnvironmentDetails (#11207)
Remove the toolFormat constant and <tool_format> line from environment
details output. Native tool calling is now the only supported protocol,
making this code unnecessary.

Fixes #11206

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-05 12:28:34 -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
Chris Estreich
aa49871a5d
fix(cli): resolve race condition causing provider switch during mode changes (#11205)
When using slash commands with `mode:` frontmatter (e.g., `/cli-release`
with `mode: code`), the CLI would fail with "Could not resolve
authentication method" from the Anthropic SDK, even when using a
non-Anthropic provider like `--provider roo`.

Root cause: In `markWebviewReady()`, the `webviewDidLaunch` message was
sent before `updateSettings`, creating a race condition. The
`webviewDidLaunch` handler's "first-time init" sync would read
`getState()` before CLI-provided settings were applied to the context
proxy. Since `getState()` defaults `apiProvider` to "anthropic" when
unset, this default was saved to the provider profile. When a slash
command triggered `handleModeSwitch()`, it found this corrupted profile
with `apiProvider: "anthropic"` (but no API key) and activated it,
overwriting the CLI's working roo provider configuration.

Fix:
1. Reorder `markWebviewReady()` to send `updateSettings` before
   `webviewDidLaunch`, ensuring the context proxy has CLI-provided
   values when the initialization handler runs.
2. Guard the first-time init sync with `checkExistKey(apiConfiguration)`
   to prevent saving a profile with only the default "anthropic"
   fallback and no actual API keys configured.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 18:26:41 -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]
1da2b1c457
feat: add support for AGENTS.local.md personal override files (#11183)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-02-04 12:53:13 -08:00
Bruno Bergher
54ea34e2c1
ux: improve Skills and Slash Commands settings UI with multi-mode support (#11157)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-03 12:11:58 -05: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
github-actions[bot]
658034323b
Changeset version bump (#11176)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-02-03 11:57:43 -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
b4b8cef859
fix: transform tool blocks to text before condensing (EXT-624) (#10975) 2026-02-02 22:31:09 -05:00
roomote[bot]
1e790b0d39
fix(code-index): remove deprecated text-embedding-004 and migrate to gemini-embedding-001 (#11038)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-02-02 22:30:07 -05:00
Chris Estreich
e5fa5e8e46
IPC fixes for task cancellation and queued messages (#11162) 2026-02-02 11:13:56 -08: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
roomote[bot]
e46fae7ad7
fix: add image content support to MCP tool responses (#10874)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-31 07:22:59 -05:00
github-actions[bot]
f97a5c2212
Changeset version bump (#11136)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-31 00:37:38 -05:00
SannidhyaSah
16fbabf2a4
feat: add mode dropdown to change skill mode dynamically (#10513) (#11102)
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
2026-01-31 00:22:49 -05:00
Daniel
3400499917
fix: sanitize tool_use_id in tool_result blocks to match API history (#11131)
Tool IDs from providers like Gemini/OpenRouter contain special characters
(e.g., 'functions.read_file:0') that are sanitized when saving tool_use
blocks to API history. However, tool_result blocks were using the original
unsanitized IDs, causing ToolResultIdMismatchError.

This fix ensures tool_result blocks use sanitizeToolUseId() to match the
sanitized tool_use IDs in conversation history.

Fixes EXT-711
2026-01-30 23:15:25 -05:00
Hannes Rudolph
20d1f1f282
chore: treat extension .env as optional (#11116) 2026-01-30 16:15:50 -07:00
github-actions[bot]
946ae80561
Changeset version bump (#11122)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-30 15:26:38 -05:00
Matt Rubens
5945d02800
Release v3.46.0 (#11121) 2026-01-30 15:17:58 -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
Hannes Rudolph
f848795775
refactor: replace fetch_instructions with skill tool and built-in skills (#11084)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-29 12:47:36 -07:00
Hannes Rudolph
0c53f1937a
Revert "refactor: replace fetch_instructions with skill tool and built-in skills" (#11083) 2026-01-29 11:46:58 -07:00
Hannes Rudolph
67e568f6bb
refactor: replace fetch_instructions with skill tool and built-in skills (#10913) 2026-01-29 07:48:08 -07: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
SannidhyaSah
010aba24b7
feat: add skills management UI to settings panel (#10513) (#10844)
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-29 01:25:36 -05:00
Hannes Rudolph
d7fa963b13
docs: clarify read_command_output search param should be omitted when not filtering (#11056) 2026-01-28 13:30:01 -07:00
Daniel
fe722dad23
feat: add AI SDK dependencies and message conversion utilities (#11047) 2026-01-28 14:05:53 -05:00
Daniel
f5004ac40a
fix: prevent time-travel bug in parallel tool calling (#11046) 2026-01-28 13:25:02 -05:00
Hannes Rudolph
e7965d9b45
feat: lossless terminal output with on-demand retrieval (#10944) 2026-01-27 22:12:19 -07:00
github-actions[bot]
c6d0306550
Changeset version bump (#11037)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-27 23:05:16 -05:00
Matt Rubens
7632807021
Release v3.45.0 (#11036) 2026-01-27 22:59:23 -05:00
Hannes Rudolph
d748de6fae
feat(condense v2.1): add smart code folding (#10942)
* feat(condense): add smart code folding with tree-sitter signatures

At context condensation time, use tree-sitter to generate folded code
signatures (function definitions, class declarations) for files read
during the conversation. Each file is included as its own <system-reminder>
block in the condensed summary, preserving structural awareness without
consuming excessive tokens.

- Add getFilesReadByRoo() method to FileContextTracker
- Create generateFoldedFileContext() using tree-sitter parsing
- Update summarizeConversation() to accept array of file sections
- Each file gets its own content block in the summary message
- Add comprehensive test coverage (12 tests)

* fix: skip tree-sitter error strings in folded file context

- Add isTreeSitterErrorString helper to detect error messages
- Skip files that return error strings instead of embedding them
- Add test for error string handling

* refactor: move generateFoldedFileContext() inside summarizeConversation()

- Update summarizeConversation() to accept filesReadByRoo, cwd, rooIgnoreController instead of pre-generated sections
- Move folded file context generation inside summarizeConversation() (lines 319-339)
- Update ContextManagementOptions type and manageContext() to pass new parameters
- Remove generateFoldedFileContext from Task.ts imports - folding now handled internally
- Update all tests to use new parameter signature
- Reduces Task.ts complexity by moving folding logic to summarization module

* fix: prioritize most recently read files in folded context

Files are now sorted by roo_read_date descending before folded context
generation, so if the character budget runs out, the most relevant
(recently read) files are included and older files are skipped.

* refactor: improve code quality in condense module

- Convert summarizeConversation to use options object instead of 11 positional params
- Extract duplicated getFilesReadByRoo error handling into helper method
- Remove unnecessary re-export of generateFoldedFileContext
- Update all test files to use new options object pattern

* fix: address roomote feedback - batch error logging and early budget exit

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-01-27 18:47:24 -05:00
github-actions[bot]
7607c684e9
Changeset version bump (#11027)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-27 15:52:37 -05:00