Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1019 commits
Select commit Hold shift + click to select a range
bb31b04
chore: add changeset and announcement for v3.33.0 (#9360)
mrubens Nov 18, 2025
67b6a8b
Changeset version bump (#9362)
github-actions[bot] Nov 18, 2025
1fa12f6
fix: resolve native tool protocol race condition causing 400 errors (…
daniel-lxs Nov 18, 2025
045c2d6
Retry eval tasks if API instability detected (#9365)
cte Nov 18, 2025
b0c254c
fix: exclude XML tool examples from MODES section when native protoco…
daniel-lxs Nov 18, 2025
bc6fad1
Add native tool calling support to OpenAI-compatible (#9369)
mrubens Nov 18, 2025
0d72471
fix: ensure no XML parsing when protocol is native (#9371)
daniel-lxs Nov 18, 2025
55e9c88
fix: gemini maxOutputTokens and reasoning config (#9375)
hannesrudolph Nov 19, 2025
271d01b
fix: Update tools to return structured JSON for native protocol (#9373)
daniel-lxs Nov 19, 2025
7c07945
feat: add toolProtocol property to PostHog tool usage telemetry (#9374)
roomote[bot] Nov 19, 2025
89068c4
fix: Include nativeArgs in tool repetition detection (#9377)
daniel-lxs Nov 19, 2025
840f421
Fix Gemini thought signature validation and token counting errors (#9…
hannesrudolph Nov 19, 2025
ce5479a
Release v3.33.1 (#9383)
mrubens Nov 19, 2025
18c4d1a
Changeset version bump (#9384)
github-actions[bot] Nov 19, 2025
f3b0897
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 19, 2025
6372817
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 19, 2025
61fc391
fix: preserve user images in native tool call results (#9401)
daniel-lxs Nov 19, 2025
ee19904
feat: migrate PostHog client to ph.roocode.com (#9402)
roomote[bot] Nov 19, 2025
e618d88
feat: enable native tool calling for gemini provider (#9343)
hannesrudolph Nov 19, 2025
f1bf436
Add a RCC credit balance display (#9386)
jr Nov 20, 2025
2f4c47b
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 20, 2025
7f08e6f
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 20, 2025
2fd0790
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 20, 2025
5260123
perf: reduce excessive getModel() calls & implement disk cache fallba…
daniel-lxs Nov 20, 2025
575b09f
Show zero price for free models (#9419)
mrubens Nov 20, 2025
783b6b1
Release v3.33.2 (#9420)
mrubens Nov 20, 2025
4ae0fc5
Changeset version bump (#9421)
github-actions[bot] Nov 20, 2025
015bf86
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 20, 2025
05dcc07
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 20, 2025
0851769
Improve read_file tool description with examples (#9422)
daniel-lxs Nov 20, 2025
6a98ffb
Fix Marketplace crash by removing wildcard activation event (#9423)
hannesrudolph Nov 20, 2025
1201b0f
Revert "Fix Marketplace crash by removing wildcard activation event" …
mrubens Nov 20, 2025
f7d6dae
Fix OpenAI Native parallel tool calls for native protocol (#9433)
hannesrudolph Nov 20, 2025
e58aef4
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 20, 2025
b8154f8
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 20, 2025
1589cc1
feat: add Google Gemini 3 Pro Image Preview to image generation model…
roomote[bot] Nov 20, 2025
97cdc41
fix: prevent duplicate environment_details when resuming cancelled ta…
daniel-lxs Nov 20, 2025
341863f
Update glob to ^11.1.0 (#9449)
jr Nov 20, 2025
d389771
chore: update tar-fs to 3.1.1 via pnpm override (#9450)
roomote[bot] Nov 20, 2025
7715158
Store reasoning in conversation history for all providers (#9451)
daniel-lxs Nov 21, 2025
5c5a893
Fix preserveReasoning flag to control API reasoning inclusion (#9453)
daniel-lxs Nov 21, 2025
08027ad
fix: send tool_result blocks for skipped tools in native protocol (#9…
daniel-lxs Nov 21, 2025
3da6f81
fix: improve markdown formatting and add reasoning support (#9458)
daniel-lxs Nov 21, 2025
9051818
feat: implement Minimax as Anthropic-compatible provider (#9455)
daniel-lxs Nov 21, 2025
a49e81f
fix: improve search and replace symbol parsing (#9456)
daniel-lxs Nov 21, 2025
7977782
chore: add changeset for v3.33.3 (#9459)
mrubens Nov 21, 2025
038f830
Changeset version bump (#9460)
github-actions[bot] Nov 21, 2025
221f619
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 21, 2025
22effe3
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 21, 2025
5b8f3f2
feat(terminal): add inline shell integration with user input support
mini2s Nov 21, 2025
852e293
Release: v1.87.0 (#9477)
mrubens Nov 21, 2025
6f9f653
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 21, 2025
5e95a9c
refactor(terminal): remove inline shell integration callback and impr…
mini2s Nov 21, 2025
a65e780
fix: add fallback to yield tool calls regardless of finish_reason (#9…
daniel-lxs Nov 21, 2025
8472bbb
Improvements to base openai compatible (#9462)
mrubens Nov 21, 2025
ee93530
Browser Use 2.0 (#8941)
hannesrudolph Nov 21, 2025
999ea68
fix: resolve apply_diff performance regression from PR #9456 (#9474)
daniel-lxs Nov 21, 2025
842a4af
fix: implement model cache refresh to prevent stale disk cache (#9478)
daniel-lxs Nov 21, 2025
1dd223d
fix: Make cancel button immediately responsive during streaming (#9448)
daniel-lxs Nov 21, 2025
7edc86b
Test a provider-oriented welcome screen (#9484)
mrubens Nov 21, 2025
fa764ba
(feat): Add Baseten Provider (#9461)
AlexKer Nov 21, 2025
f6d3fdf
fix: copy model-level capabilities to OpenRouter endpoint models (#9483)
daniel-lxs Nov 21, 2025
16f8d30
Pin the Roo provider to the top of the list (#9485)
mrubens Nov 21, 2025
e5648e8
Wait to experiment until state is hydrated (#9488)
mrubens Nov 21, 2025
8d1602c
Change baseten default model to glm for now (#9489)
mrubens Nov 21, 2025
01971fa
Revert "Wait to experiment until state is hydrated" (#9491)
mrubens Nov 22, 2025
af02162
Try to fix build (#9490)
mrubens Nov 22, 2025
204c71c
Update webview-ui Vite config (#9493)
hannesrudolph Nov 22, 2025
513eebc
Enhance native tool descriptions with examples and clarifications (#9…
daniel-lxs Nov 22, 2025
e31743c
Revert "Revert "Wait to experiment until state is hydrated"" (#9494)
mrubens Nov 22, 2025
bc0daab
chore: add changeset and announcement for v3.34.0 (#9495)
mrubens Nov 22, 2025
529c686
Changeset version bump (#9496)
github-actions[bot] Nov 22, 2025
2ca9eac
Enable the Roo Code Cloud provider in evals (#9492)
cte Nov 22, 2025
cdc7275
Show the prompt for image gen (#9505)
mrubens Nov 22, 2025
95e9d60
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 22, 2025
17c7b4e
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 22, 2025
a90a2a8
feat(chat): conditionally render UpdateTodoListToolBlock based on alw…
mini2s Nov 22, 2025
2886b68
fix(web-evals): update checkbox handler in new-run component
mini2s Nov 22, 2025
98b06d8
Remove double todo list (#9517)
mrubens Nov 23, 2025
c64bf6f
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 23, 2025
2c56b2b
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 23, 2025
1558df6
Track cloud synced messages (#9518)
mrubens Nov 23, 2025
c2d7f04
3.34.1 (#9522)
mrubens Nov 23, 2025
fccdea7
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 23, 2025
7c2fb4d
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 23, 2025
d96f939
Changeset version bump (#9523)
github-actions[bot] Nov 23, 2025
b531075
fix: support reasoning_details format for Gemini 3 models (#9506)
daniel-lxs Nov 24, 2025
becdb1a
feat: update Cerebras models (#9527)
sebastiand-cerebras Nov 24, 2025
09d07cc
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 24, 2025
dfda7cf
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 24, 2025
3ac5bec
fix: ensure XML parser state matches tool protocol on config update (…
daniel-lxs Nov 24, 2025
c3f7916
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 24, 2025
7678d33
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 24, 2025
a20d047
fix: flush LiteLLM cache when credentials change on refresh (#9536)
daniel-lxs Nov 24, 2025
a8b366f
Add Roo Code Cloud as an imagegen provider (#9528)
mrubens Nov 24, 2025
5336246
fix: gracefully skip unsupported content blocks in Gemini transformer…
daniel-lxs Nov 24, 2025
c1ce48a
feat: add claude-opus-4.5 to OpenRouter prompt caching and reasoning …
daniel-lxs Nov 24, 2025
a81c421
feat: add claude-opus-4.5 to Anthropic and Vertex providers (#9541)
daniel-lxs Nov 24, 2025
68183c2
Release v3.34.2 (#9545)
mrubens Nov 24, 2025
1e13533
Changeset version bump (#9546)
github-actions[bot] Nov 24, 2025
fb4f235
Add support for Roo Code Cloud as an embeddings provider (#9543)
mrubens Nov 24, 2025
cad6145
Switch from asdf to mise-en-place in bare-metal evals setup script (#…
cte Nov 24, 2025
ac8903d
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 25, 2025
0327f12
feat: implement streaming for native tool calls (#9542)
daniel-lxs Nov 25, 2025
27a2d2f
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 25, 2025
0242514
Add Opus 4.5 to Claude Code provider (#9560)
mrubens Nov 25, 2025
8949c2f
Fix ask_followup_question streaming issue and add missing tool cases …
daniel-lxs Nov 25, 2025
172eef6
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 25, 2025
021c0eb
feat(auth): enhance login status logging and use dynamic plugin version
mini2s Nov 25, 2025
e788fc1
refactor: remove disable provider and add client id headers
mini2s Nov 25, 2025
31e7f2e
test(webview): remove disable provider tests across multiple test files
mini2s Nov 25, 2025
2945b30
fix: enable caching for Opus 4.5 model (#9568)
roomote[bot] Nov 25, 2025
9437103
feat: Add contact links to About Roo Code settings page (#9570)
roomote[bot] Nov 25, 2025
ed91271
feat: add Claude Opus 4.5 model to Bedrock provider (#9572)
roomote[bot] Nov 25, 2025
a0b73c7
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 25, 2025
a66cd8a
chore: add changeset for v3.34.3 (#9578)
mrubens Nov 25, 2025
86cdbff
Changeset version bump (#9579)
github-actions[bot] Nov 25, 2025
e9be653
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 25, 2025
38e22db
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 25, 2025
774b492
fix: preserve dynamic MCP tool names in native mode API history (#9559)
daniel-lxs Nov 25, 2025
311940b
fix: preserve tool_use blocks in summary message during condensing wi…
daniel-lxs Nov 25, 2025
e4847ed
Add support for images api (#9587)
mrubens Nov 25, 2025
c18b262
Make it clear that BFL Flux 2 is free (#9588)
mrubens Nov 25, 2025
0ba830b
Add BFL models to openrouter (#9589)
mrubens Nov 25, 2025
a177cd8
chore: add changeset for v3.34.4 (#9590)
mrubens Nov 25, 2025
37d2f59
Changeset version bump (#9591)
github-actions[bot] Nov 25, 2025
f173c9c
feat: set native tools as default for minimax-m2 and claude-haiku-4.5…
daniel-lxs Nov 25, 2025
05f3573
feat: enable multiple native tool calls per turn with failure guardra…
daniel-lxs Nov 26, 2025
1c02559
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 26, 2025
099ea6d
feat: add Bedrock Opus 4.5 to global inference model list (#9595)
roomote[bot] Nov 26, 2025
0fe55b9
fix: update API handler when toolProtocol changes (#9599)
mrubens Nov 26, 2025
71e761e
Make single file read only apply to xml tools (#9600)
mrubens Nov 26, 2025
3c989d3
Revert "Add support for Roo Code Cloud as an embeddings provider" (#9…
mrubens Nov 26, 2025
4442397
feat(web-evals): enhance dashboard with dynamic tool columns and UX i…
hannesrudolph Nov 26, 2025
176b397
fix(webview): pass taskId to finishSubTask when canceling or deleting…
mini2s Nov 26, 2025
8a2d28f
chore: add changeset for v3.34.5 (#9603)
mrubens Nov 26, 2025
3806b3d
Changeset version bump (#9604)
github-actions[bot] Nov 26, 2025
515b4f9
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 26, 2025
c9921cb
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 26, 2025
56c630c
Feature/bedrock embeddings support (#9475)
ggoranov-smar Nov 26, 2025
55ec7fd
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 26, 2025
0a26623
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 26, 2025
a8a4451
fix: restore content undefined check in WriteToFileTool.handlePartial…
daniel-lxs Nov 26, 2025
decd9a7
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 26, 2025
3cd3357
fix: exclude access_mcp_resource tool when MCP has no resources (#9615)
daniel-lxs Nov 26, 2025
f388919
fix: prevent model cache from persisting empty API responses (#9623)
daniel-lxs Nov 26, 2025
16f3689
fix: update default settings for inline terminal and codebase indexin…
roomote[bot] Nov 26, 2025
240bc0b
feat(mistral): add native tool calling support (#9625)
hannesrudolph Nov 26, 2025
3208f6f
feat: wire MULTIPLE_NATIVE_TOOL_CALLS experiment to OpenAI parallel_t…
hannesrudolph Nov 26, 2025
7e17982
feat(bedrock): allow global inference selection when cross-region is …
roomote[bot] Nov 26, 2025
b176536
fix: defer new_task tool_result until subtask completes for native pr…
daniel-lxs Nov 26, 2025
87d6463
fix: convert line_ranges strings to lineRanges objects in native tool…
daniel-lxs Nov 26, 2025
fb9c57e
fix: filter non-Anthropic content blocks before sending to Vertex API…
hannesrudolph Nov 26, 2025
339a869
Add fine grained tool streaming for OpenRouter Anthropic (#9629)
mrubens Nov 26, 2025
c170742
Release v3.34.6 (#9631)
mrubens Nov 26, 2025
ba09228
Changeset version bump (#9632)
github-actions[bot] Nov 26, 2025
867a5c7
fix: OpenRouter GPT-5 strict schema validation for read_file tool (#9…
daniel-lxs Nov 27, 2025
4cdec7d
fix: create parent directories early in write_to_file to prevent ENOE…
daniel-lxs Nov 27, 2025
b31e755
Fix openrouter tool calls (#9642)
mrubens Nov 27, 2025
f5ce56c
fix(claude-code): disable native tools and temperature support (#9643)
hannesrudolph Nov 27, 2025
fb94eb3
Enable native tool calling for z.ai (#9645)
mrubens Nov 27, 2025
254bd23
Moonshot native tool call support (#9646)
mrubens Nov 27, 2025
5b64aa9
Support native tools in the anthropic provider (#9644)
mrubens Nov 27, 2025
2758454
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 27, 2025
12fc073
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 27, 2025
520d4fb
Add 'taking you to cloud' screen after provider welcome (#9652)
mrubens Nov 27, 2025
1e34d3d
chore: add changeset for v3.34.7 (#9651)
mrubens Nov 27, 2025
400d0cd
Changeset version bump (#9654)
github-actions[bot] Nov 27, 2025
d2d311e
fix: race condition in new_task tool for native protocol (#9655)
daniel-lxs Nov 27, 2025
b8f2da1
chore: add changeset for v3.34.8 (#9657)
mrubens Nov 27, 2025
b149e69
Changeset version bump (#9658)
github-actions[bot] Nov 27, 2025
5a6dd58
feat: add model-specific tool customization via excludedTools and inc…
daniel-lxs Nov 27, 2025
3f0a697
feat(web-evals): add task log viewing, export failed logs, and new ru…
hannesrudolph Nov 28, 2025
9b5f639
Metadata‑driven subtasks (no UI changes): automatic parent resume and…
hannesrudolph Nov 28, 2025
e682c03
feat: add search_and_replace tool for batch text replacements (#9549)
hannesrudolph Nov 28, 2025
af4921b
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 28, 2025
b111d12
feat: enable native tool support for DeepSeek and Doubao models (#9671)
daniel-lxs Nov 28, 2025
bd2c501
feat: add native tool support to Requesty provider (#9672)
daniel-lxs Nov 28, 2025
53d1f43
Include tool format in environment details (#9661)
mrubens Nov 28, 2025
5d02099
feat(groq): enable native tool support for models that support functi…
daniel-lxs Nov 28, 2025
59ee1c9
feat: add native tools support for OpenAI-compatible providers (#9676)
daniel-lxs Nov 28, 2025
127ecf6
feat: enable native tool calls for Vertex Gemini models (#9678)
daniel-lxs Nov 28, 2025
c688a64
fix: display install count in millions instead of thousands (#9677)
roomote[bot] Nov 29, 2025
9335348
feat: add apply_patch native tool (#9663)
hannesrudolph Nov 29, 2025
f9eb6d9
feat: add debug buttons to view API and UI history (#9684)
hannesrudolph Nov 29, 2025
503d55c
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 29, 2025
e4af301
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 29, 2025
98850c7
test(workflow): update test expectations after removing run_test func…
mini2s Nov 29, 2025
c0c28f0
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 29, 2025
d2017c8
Add web-evals updates and kill run functionality (#9681)
hannesrudolph Nov 29, 2025
ae29777
Add Grok 4 Fast and Grok 4.1 Fast, plus xAI native tool calling (#9690)
mrubens Nov 30, 2025
4591e96
Add native tool calling for deepinfra (#9691)
mrubens Nov 30, 2025
8787da7
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 30, 2025
e51592e
fix(chat): correct message visibility condition filter
mini2s Nov 30, 2025
583b9d7
fix(utils): wrap os-name call in safe fallback for zgsm OS detection
mini2s Nov 30, 2025
1e7305b
refactor(core): clean up unused imports and improve file handling logic
mini2s Nov 30, 2025
26003c8
refactor: adjust file limits and multipliers
mini2s Nov 30, 2025
99da2bc
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 30, 2025
f26d5a4
ux: Improvements to the new, RCC Provider centric onboarding flow (#9…
brunobergher Dec 1, 2025
49aad85
ux: Toolbar cleanup and settings consolidation (#9710)
brunobergher Dec 1, 2025
0eea7c7
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Dec 1, 2025
7590305
Update a couple provider labels (#9711)
mrubens Dec 1, 2025
48d3e4d
Release: v1.88.0 (#9713)
mrubens Dec 1, 2025
af74709
Remove TabContent wrapper from Modes and MCP (#9712)
mrubens Dec 1, 2025
bf3e4d8
fix: preserve tool_use blocks in summary for parallel tool calls (#9714)
SilentFlower Dec 1, 2025
34c524f
feat(chutes): detect native tool support from API supported_features …
daniel-lxs Dec 1, 2025
0a2d1a4
Add NTC support for Cerebras (#9692)
mrubens Dec 1, 2025
eb12054
Add native tools support to Unbound (#9699)
mrubens Dec 1, 2025
b5acebc
Add native tool support for vercel ai gateway (#9697)
mrubens Dec 1, 2025
8244f70
Default grok code fast to native tools (#9717)
mrubens Dec 1, 2025
faa6c40
Bedrock native tool calling (#9698)
mrubens Dec 1, 2025
be76594
Support tool calling in native ollama provider (#9696)
mrubens Dec 1, 2025
ad28e12
feat: add native tool support for LiteLLM provider (#9719)
daniel-lxs Dec 1, 2025
9dac7e7
fix: prevent navigation buttons from wrapping on smaller screens (#9721)
roomote[bot] Dec 1, 2025
bfb3386
chore: add changeset for v3.35.0 (#9724)
mrubens Dec 1, 2025
35d4634
Changeset version bump (#9725)
github-actions[bot] Dec 1, 2025
9b18014
chore: bump version to v1.89.0 (#9718)
cte Dec 1, 2025
edd7cc0
fix: flush pending tool results before task delegation (#9726)
daniel-lxs Dec 1, 2025
3f4f7c0
Better IPC error logging (#9727)
cte Dec 1, 2025
e7043e5
chore: add changeset for v3.35.1 (#9728)
mrubens Dec 1, 2025
ba7340f
Changeset version bump (#9729)
github-actions[bot] Dec 1, 2025
b2b4f64
Pass app version to provider (#9730)
cte Dec 2, 2025
fc28863
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Dec 2, 2025
d2b274a
Allow models to contain default temperature (#9734)
mrubens Dec 2, 2025
700fe42
Look for a tag in the Roo provider to default the model to native too…
mrubens Dec 2, 2025
6f0addf
Assume all LiteLLM models support native tools (#9736)
mrubens Dec 2, 2025
954a6cb
chore: add changeset for v3.35.2 (#9737)
mrubens Dec 2, 2025
906c6f0
Changeset version bump (#9738)
github-actions[bot] Dec 2, 2025
ee076bd
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Dec 2, 2025
a962666
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Dec 2, 2025
9737e4e
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Dec 2, 2025
34faa7e
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Dec 2, 2025
152af14
Switch to new welcome view (#9741)
mrubens Dec 2, 2025
9975a41
web: Homepage changes (#9675)
brunobergher Dec 2, 2025
aa507ad
Add vendor confidentiality section to the system prompt for stealth m…
mrubens Dec 2, 2025
562a799
chore: add changeset for v3.35.3 (#9743)
mrubens Dec 2, 2025
c91a19f
Changeset version bump (#9745)
github-actions[bot] Dec 2, 2025
be69ef9
Refactor: Remove line_count parameter from write_to_file tool (#9667)
hannesrudolph Dec 2, 2025
9a1d7a6
fix: remove reasoning toggles for GLM-4.5 and GLM-4.6 on z.ai provide…
roomote[bot] Dec 2, 2025
adb9dfc
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Dec 2, 2025
a680aa9
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Dec 2, 2025
aa40988
fix: handle malformed native tool calls to prevent hanging (#9758)
daniel-lxs Dec 3, 2025
fbc0f80
chore: add changeset for v3.35.4 (#9763)
mrubens Dec 3, 2025
74d1ed7
Changeset version bump (#9764)
github-actions[bot] Dec 3, 2025
5c893d0
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Dec 3, 2025
5b94eec
Convert the Roo provider tools for OpenAI (#9769)
mrubens Dec 3, 2025
648e009
Update the evals keygen command (#9754)
cte Dec 3, 2025
873a763
feat: Add provider routing selection for OpenRouter embeddings (#9144…
SannidhyaSah Dec 3, 2025
ab75f63
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Dec 3, 2025
1894b69
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Dec 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions apps/web-evals/src/app/runs/new/new-run.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -649,12 +649,12 @@ export function NewRun() {
</TooltipTrigger>
<TooltipContent side="right" className="max-w-xs">
<p>
If you have access to the Roo Code Cloud repository, generate a
token with:
If you have access to the Roo Code Cloud repository and the
decryption key for the .env.* files, generate a token with:
</p>
<code className="text-xs block mt-1">
pnpm --filter @roo-code-cloud/auth production:create-job-token [org]
[timeout]
pnpm --filter @roo-code-cloud/auth production:create-auth-token
[email] [org] [ttl]
</code>
</TooltipContent>
</Tooltip>
Expand Down
2 changes: 2 additions & 0 deletions packages/types/src/codebase-index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ export const codebaseIndexConfigSchema = z.object({
// Bedrock specific fields
codebaseIndexBedrockRegion: z.string().optional(),
codebaseIndexBedrockProfile: z.string().optional(),
// OpenRouter specific fields
codebaseIndexOpenRouterSpecificProvider: z.string().optional(),
})

export type CodebaseIndexConfig = z.infer<typeof codebaseIndexConfigSchema>
Expand Down
2 changes: 1 addition & 1 deletion src/api/providers/roo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ export class RooHandler extends BaseOpenAiCompatibleProvider<string> {
stream: true,
stream_options: { include_usage: true },
...(reasoning && { reasoning }),
...(metadata?.tools && { tools: metadata.tools }),
...(metadata?.tools && { tools: this.convertToolsForOpenAI(metadata.tools) }),
...(metadata?.tool_choice && { tool_choice: metadata.tool_choice }),
}

Expand Down
3 changes: 3 additions & 0 deletions src/core/webview/ClineProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2177,6 +2177,7 @@ export class ClineProvider
codebaseIndexSearchMinScore: codebaseIndexConfig?.codebaseIndexSearchMinScore,
codebaseIndexBedrockRegion: codebaseIndexConfig?.codebaseIndexBedrockRegion,
codebaseIndexBedrockProfile: codebaseIndexConfig?.codebaseIndexBedrockProfile,
codebaseIndexOpenRouterSpecificProvider: codebaseIndexConfig?.codebaseIndexOpenRouterSpecificProvider,
},
// Only set mdmCompliant if there's an actual MDM policy
// undefined means no MDM policy, true means compliant, false means non-compliant
Expand Down Expand Up @@ -2414,6 +2415,8 @@ export class ClineProvider
codebaseIndexSearchMinScore: stateValues.codebaseIndexConfig?.codebaseIndexSearchMinScore,
codebaseIndexBedrockRegion: stateValues.codebaseIndexConfig?.codebaseIndexBedrockRegion,
codebaseIndexBedrockProfile: stateValues.codebaseIndexConfig?.codebaseIndexBedrockProfile,
codebaseIndexOpenRouterSpecificProvider:
stateValues.codebaseIndexConfig?.codebaseIndexOpenRouterSpecificProvider,
},
profileThresholds: stateValues.profileThresholds ?? {},
includeDiagnosticMessages: stateValues.includeDiagnosticMessages ?? true,
Expand Down
1 change: 1 addition & 0 deletions src/core/webview/webviewMessageHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2485,6 +2485,7 @@ export const webviewMessageHandler = async (
codebaseIndexBedrockProfile: settings.codebaseIndexBedrockProfile,
codebaseIndexSearchMaxResults: settings.codebaseIndexSearchMaxResults,
codebaseIndexSearchMinScore: settings.codebaseIndexSearchMinScore,
codebaseIndexOpenRouterSpecificProvider: settings.codebaseIndexOpenRouterSpecificProvider,
}

// Save global state first
Expand Down
15 changes: 13 additions & 2 deletions src/services/code-index/config-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export class CodeIndexConfigManager {
private mistralOptions?: { apiKey: string }
private vercelAiGatewayOptions?: { apiKey: string }
private bedrockOptions?: { region: string; profile?: string }
private openRouterOptions?: { apiKey: string }
private openRouterOptions?: { apiKey: string; specificProvider?: string }
private qdrantUrl?: string = "http://localhost:6333"
private qdrantApiKey?: string
private searchMinScore?: number
Expand Down Expand Up @@ -78,6 +78,7 @@ export class CodeIndexConfigManager {
const bedrockRegion = codebaseIndexConfig.codebaseIndexBedrockRegion ?? "us-east-1"
const bedrockProfile = codebaseIndexConfig.codebaseIndexBedrockProfile ?? ""
const openRouterApiKey = this.contextProxy?.getSecret("codebaseIndexOpenRouterApiKey") ?? ""
const openRouterSpecificProvider = codebaseIndexConfig.codebaseIndexOpenRouterSpecificProvider ?? ""

// Update instance variables with configuration
this.codebaseIndexEnabled = codebaseIndexEnabled ?? false
Expand Down Expand Up @@ -140,7 +141,9 @@ export class CodeIndexConfigManager {
this.geminiOptions = geminiApiKey ? { apiKey: geminiApiKey } : undefined
this.mistralOptions = mistralApiKey ? { apiKey: mistralApiKey } : undefined
this.vercelAiGatewayOptions = vercelAiGatewayApiKey ? { apiKey: vercelAiGatewayApiKey } : undefined
this.openRouterOptions = openRouterApiKey ? { apiKey: openRouterApiKey } : undefined
this.openRouterOptions = openRouterApiKey
? { apiKey: openRouterApiKey, specificProvider: openRouterSpecificProvider || undefined }
: undefined
// Set bedrockOptions if region is provided (profile is optional)
this.bedrockOptions = bedrockRegion
? { region: bedrockRegion, profile: bedrockProfile || undefined }
Expand Down Expand Up @@ -188,6 +191,7 @@ export class CodeIndexConfigManager {
bedrockRegion: this.bedrockOptions?.region ?? "",
bedrockProfile: this.bedrockOptions?.profile ?? "",
openRouterApiKey: this.openRouterOptions?.apiKey ?? "",
openRouterSpecificProvider: this.openRouterOptions?.specificProvider ?? "",
qdrantUrl: this.qdrantUrl ?? "",
qdrantApiKey: this.qdrantApiKey ?? "",
}
Expand Down Expand Up @@ -316,6 +320,7 @@ export class CodeIndexConfigManager {
const prevBedrockRegion = prev?.bedrockRegion ?? ""
const prevBedrockProfile = prev?.bedrockProfile ?? ""
const prevOpenRouterApiKey = prev?.openRouterApiKey ?? ""
const prevOpenRouterSpecificProvider = prev?.openRouterSpecificProvider ?? ""
const prevQdrantUrl = prev?.qdrantUrl ?? ""
const prevQdrantApiKey = prev?.qdrantApiKey ?? ""

Expand Down Expand Up @@ -357,6 +362,7 @@ export class CodeIndexConfigManager {
const currentBedrockRegion = this.bedrockOptions?.region ?? ""
const currentBedrockProfile = this.bedrockOptions?.profile ?? ""
const currentOpenRouterApiKey = this.openRouterOptions?.apiKey ?? ""
const currentOpenRouterSpecificProvider = this.openRouterOptions?.specificProvider ?? ""
const currentQdrantUrl = this.qdrantUrl ?? ""
const currentQdrantApiKey = this.qdrantApiKey ?? ""

Expand Down Expand Up @@ -395,6 +401,11 @@ export class CodeIndexConfigManager {
return true
}

// OpenRouter specific provider change
if (prevOpenRouterSpecificProvider !== currentOpenRouterSpecificProvider) {
return true
}

// Check for model dimension changes (generic for all providers)
if (prevModelDimension !== currentModelDimension) {
return true
Expand Down
120 changes: 119 additions & 1 deletion src/services/code-index/embedders/__tests__/openrouter.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { MockedClass, MockedFunction } from "vitest"
import { describe, it, expect, beforeEach, vi } from "vitest"
import { OpenAI } from "openai"
import { OpenRouterEmbedder } from "../openrouter"
import { OpenRouterEmbedder, OPENROUTER_DEFAULT_PROVIDER_NAME } from "../openrouter"
import { getModelDimension, getDefaultModelId } from "../../../../shared/embeddingModels"

// Mock the OpenAI SDK
Expand Down Expand Up @@ -95,6 +95,16 @@ describe("OpenRouterEmbedder", () => {
},
})
})

it("should accept specificProvider parameter", () => {
const embedder = new OpenRouterEmbedder(mockApiKey, undefined, undefined, "together")
expect(embedder).toBeInstanceOf(OpenRouterEmbedder)
})

it("should ignore default provider name as specificProvider", () => {
const embedder = new OpenRouterEmbedder(mockApiKey, undefined, undefined, OPENROUTER_DEFAULT_PROVIDER_NAME)
expect(embedder).toBeInstanceOf(OpenRouterEmbedder)
})
})

describe("embedderInfo", () => {
Expand Down Expand Up @@ -205,6 +215,77 @@ describe("OpenRouterEmbedder", () => {
encoding_format: "base64",
})
})

it("should include provider routing when specificProvider is set", async () => {
const specificProvider = "together"
const embedderWithProvider = new OpenRouterEmbedder(mockApiKey, undefined, undefined, specificProvider)

const testEmbedding = new Float32Array([0.25, 0.5])
const base64String = Buffer.from(testEmbedding.buffer).toString("base64")

const mockResponse = {
data: [
{
embedding: base64String,
},
],
usage: {
prompt_tokens: 5,
total_tokens: 5,
},
}

mockEmbeddingsCreate.mockResolvedValue(mockResponse)

await embedderWithProvider.createEmbeddings(["test"])

// Verify the embeddings.create was called with provider routing
expect(mockEmbeddingsCreate).toHaveBeenCalledWith({
input: ["test"],
model: "openai/text-embedding-3-large",
encoding_format: "base64",
provider: {
order: [specificProvider],
only: [specificProvider],
allow_fallbacks: false,
},
})
})

it("should not include provider routing when specificProvider is default", async () => {
const embedderWithDefaultProvider = new OpenRouterEmbedder(
mockApiKey,
undefined,
undefined,
OPENROUTER_DEFAULT_PROVIDER_NAME,
)

const testEmbedding = new Float32Array([0.25, 0.5])
const base64String = Buffer.from(testEmbedding.buffer).toString("base64")

const mockResponse = {
data: [
{
embedding: base64String,
},
],
usage: {
prompt_tokens: 5,
total_tokens: 5,
},
}

mockEmbeddingsCreate.mockResolvedValue(mockResponse)

await embedderWithDefaultProvider.createEmbeddings(["test"])

// Verify the embeddings.create was called without provider routing
expect(mockEmbeddingsCreate).toHaveBeenCalledWith({
input: ["test"],
model: "openai/text-embedding-3-large",
encoding_format: "base64",
})
})
})

describe("validateConfiguration", () => {
Expand Down Expand Up @@ -254,6 +335,43 @@ describe("OpenRouterEmbedder", () => {
expect(result.valid).toBe(false)
expect(result.error).toBe("embeddings:validation.authenticationFailed")
})

it("should validate configuration with specificProvider", async () => {
const specificProvider = "openai"
const embedderWithProvider = new OpenRouterEmbedder(mockApiKey, undefined, undefined, specificProvider)

const testEmbedding = new Float32Array([0.25, 0.5])
const base64String = Buffer.from(testEmbedding.buffer).toString("base64")

const mockResponse = {
data: [
{
embedding: base64String,
},
],
usage: {
prompt_tokens: 1,
total_tokens: 1,
},
}

mockEmbeddingsCreate.mockResolvedValue(mockResponse)

const result = await embedderWithProvider.validateConfiguration()

expect(result.valid).toBe(true)
expect(result.error).toBeUndefined()
expect(mockEmbeddingsCreate).toHaveBeenCalledWith({
input: ["test"],
model: "openai/text-embedding-3-large",
encoding_format: "base64",
provider: {
order: [specificProvider],
only: [specificProvider],
allow_fallbacks: false,
},
})
})
})

describe("integration with shared models", () => {
Expand Down
46 changes: 41 additions & 5 deletions src/services/code-index/embedders/openrouter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ import { TelemetryService } from "@roo-code/telemetry"
import { Mutex } from "async-mutex"
import { handleOpenAIError } from "../../../api/providers/utils/openai-error-handler"

// Default provider name when no specific provider is selected
export const OPENROUTER_DEFAULT_PROVIDER_NAME = "[default]"

interface EmbeddingItem {
embedding: string | number[]
[key: string]: any
Expand All @@ -38,6 +41,7 @@ export class OpenRouterEmbedder implements IEmbedder {
private readonly apiKey: string
private readonly maxItemTokens: number
private readonly baseUrl: string = "https://openrouter.ai/api/v1"
private readonly specificProvider?: string

// Global rate limiting state shared across all instances
private static globalRateLimitState = {
Expand All @@ -54,13 +58,17 @@ export class OpenRouterEmbedder implements IEmbedder {
* @param apiKey The API key for authentication
* @param modelId Optional model identifier (defaults to "openai/text-embedding-3-large")
* @param maxItemTokens Optional maximum tokens per item (defaults to MAX_ITEM_TOKENS)
* @param specificProvider Optional specific provider to route requests to
*/
constructor(apiKey: string, modelId?: string, maxItemTokens?: number) {
constructor(apiKey: string, modelId?: string, maxItemTokens?: number, specificProvider?: string) {
if (!apiKey) {
throw new Error(t("embeddings:validation.apiKeyRequired"))
}

this.apiKey = apiKey
// Only set specificProvider if it's not the default value
this.specificProvider =
specificProvider && specificProvider !== OPENROUTER_DEFAULT_PROVIDER_NAME ? specificProvider : undefined

// Wrap OpenAI client creation to handle invalid API key characters
try {
Expand Down Expand Up @@ -180,14 +188,28 @@ export class OpenRouterEmbedder implements IEmbedder {
await this.waitForGlobalRateLimit()

try {
const response = (await this.embeddingsClient.embeddings.create({
// Build the request parameters
const requestParams: any = {
input: batchTexts,
model: model,
// OpenAI package (as of v4.78.1) has a parsing issue that truncates embedding dimensions to 256
// when processing numeric arrays, which breaks compatibility with models using larger dimensions.
// By requesting base64 encoding, we bypass the package's parser and handle decoding ourselves.
encoding_format: "base64",
})) as OpenRouterEmbeddingResponse
}

// Add provider routing if a specific provider is set
if (this.specificProvider) {
requestParams.provider = {
order: [this.specificProvider],
only: [this.specificProvider],
allow_fallbacks: false,
}
}

const response = (await this.embeddingsClient.embeddings.create(
requestParams,
)) as OpenRouterEmbeddingResponse

// Convert base64 embeddings to float32 arrays
const processedEmbeddings = response.data.map((item: EmbeddingItem) => {
Expand Down Expand Up @@ -274,11 +296,25 @@ export class OpenRouterEmbedder implements IEmbedder {
const testTexts = ["test"]
const modelToUse = this.defaultModelId

const response = (await this.embeddingsClient.embeddings.create({
// Build the request parameters
const requestParams: any = {
input: testTexts,
model: modelToUse,
encoding_format: "base64",
})) as OpenRouterEmbeddingResponse
}

// Add provider routing if a specific provider is set
if (this.specificProvider) {
requestParams.provider = {
order: [this.specificProvider],
only: [this.specificProvider],
allow_fallbacks: false,
}
}

const response = (await this.embeddingsClient.embeddings.create(
requestParams,
)) as OpenRouterEmbeddingResponse

// Check if we got a valid response
if (!response?.data || response.data.length === 0) {
Expand Down
3 changes: 2 additions & 1 deletion src/services/code-index/interfaces/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export interface CodeIndexConfig {
mistralOptions?: { apiKey: string }
vercelAiGatewayOptions?: { apiKey: string }
bedrockOptions?: { region: string; profile?: string }
openRouterOptions?: { apiKey: string }
openRouterOptions?: { apiKey: string; specificProvider?: string }
qdrantUrl?: string
qdrantApiKey?: string
searchMinScore?: number
Expand All @@ -42,6 +42,7 @@ export type PreviousConfigSnapshot = {
bedrockRegion?: string
bedrockProfile?: string
openRouterApiKey?: string
openRouterSpecificProvider?: string
qdrantUrl?: string
qdrantApiKey?: string
}
7 changes: 6 additions & 1 deletion src/services/code-index/service-factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,12 @@ export class CodeIndexServiceFactory {
if (!config.openRouterOptions?.apiKey) {
throw new Error(t("embeddings:serviceFactory.openRouterConfigMissing"))
}
return new OpenRouterEmbedder(config.openRouterOptions.apiKey, config.modelId)
return new OpenRouterEmbedder(
config.openRouterOptions.apiKey,
config.modelId,
undefined, // maxItemTokens
config.openRouterOptions.specificProvider,
)
}

throw new Error(
Expand Down
Loading