Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
859 commits
Select commit Hold shift + click to select a range
ae9f3fe
Update cerebras.ts (#9024)
sebastiand-cerebras Nov 5, 2025
6965e5c
fix: update Opus 4.1 max tokens from 8K to 32K (#9046)
roomote[bot] Nov 5, 2025
2e8e65e
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 5, 2025
1ec3064
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 5, 2025
2ce769f
feat(api): add mode parameter to ZgsmAiHandler and add tooltips to Ch…
mini2s Nov 5, 2025
e86acef
chore: simplify Google Analytics to standard implementation (#9044)
dleffel Nov 5, 2025
3eee340
feat: add conditional test running to pre-push hook (#9055)
daniel-lxs Nov 5, 2025
d4aeca4
Fix dynamic provider model validation to prevent cross-contamination …
daniel-lxs Nov 5, 2025
c6a02bb
Fix Bedrock user agent to report full SDK details (#9043)
ajjuaire Nov 5, 2025
413ab1a
feat: add Qwen3 embedding models (0.6B and 4B) to OpenRouter support …
roomote[bot] Nov 5, 2025
39448f4
web: Agent Landing Page A/B testing toolkit (#9018)
brunobergher Nov 5, 2025
65230f1
feat: Global Inference for Bedrock models (#8750) (#8940)
hannesrudolph Nov 5, 2025
7e3b599
Release v3.30.2 (#9065)
mrubens Nov 6, 2025
7320d79
Changeset version bump (#9066)
github-actions[bot] Nov 6, 2025
1917901
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 6, 2025
c96f820
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 6, 2025
a24a195
feat(error-handling): add HTTP 413 payload too large error handling
mini2s Nov 6, 2025
43cc4f7
fix(webview): correct default value for useZgsmCustomConfig and fix s…
mini2s Nov 6, 2025
62553d6
Merge branch 'main' into roo-to-main
mini2s Nov 6, 2025
63b4a78
feat: add kimi-k2-thinking model to moonshot provider (#9079)
daniel-lxs Nov 6, 2025
9b2ad80
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 6, 2025
bf639c9
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 6, 2025
7bb7b75
ux: Home screen visuals (#9057)
brunobergher Nov 6, 2025
bf04849
feat: add MiniMax-M2-Stable model and enable prompt caching (#9072)
roomote[bot] Nov 6, 2025
d631aa6
fix(task): auto-retry on empty assistant response (#9076) (#9083)
daniel-lxs Nov 6, 2025
0fd7023
feat(chat): Improve diff appearance in main chat view (#8932)
hannesrudolph Nov 6, 2025
eedc264
Clarify: setting 0 disables Error & Repetition Limit (#8965)
roomote[bot] Nov 6, 2025
1ba0150
fix: use system role for OpenAI Compatible provider when streaming is…
roomote[bot] Nov 6, 2025
37ac53e
fix: prevent shell injection in pre-push hook environment loading (#9…
daniel-lxs Nov 6, 2025
b17760b
feat: auto-switch to imported mode with architect fallback (#9003)
daniel-lxs Nov 6, 2025
4eebcf0
fix: prevent notification sound on attempt_completion with queued mes…
roomote[bot] Nov 6, 2025
49e57ed
chore(deps): update dependency @changesets/cli to v2.29.7 (#8490)
renovate[bot] Nov 6, 2025
c7b1c6d
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 7, 2025
6e3e8a9
chore: add changeset for v3.30.3 (#9092)
mrubens Nov 7, 2025
47415fa
Changeset version bump (#9094)
github-actions[bot] Nov 7, 2025
c38d365
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 7, 2025
6057666
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 7, 2025
2abdad6
fix: respect custom OpenRouter URL for all API operations (#8951)
roomote[bot] Nov 7, 2025
247b061
feat: Add comprehensive error logging to Roo Cloud provider (#9098)
daniel-lxs Nov 7, 2025
ca64953
ux: Less Caffeine (#9104)
brunobergher Nov 7, 2025
fc2147a
fix: prevent crash when streaming chunks have null choices array (#9105)
daniel-lxs Nov 7, 2025
fff5cf8
ux: Improvements to to-do lists and task headers (#9096)
brunobergher Nov 7, 2025
78fc212
fix: prevent context condensing on settings save when provider/model …
daniel-lxs Nov 8, 2025
f93aafe
Release v3.31.0 (#9111)
mrubens Nov 8, 2025
e98f4b9
Changeset version bump (#9112)
github-actions[bot] Nov 8, 2025
0df79f4
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 8, 2025
443966c
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 8, 2025
4da9c3a
fix: improve mobile responsiveness of hero section on /reviewer page …
roomote[bot] Nov 8, 2025
e4cab35
feat(integrations): update export markdown filename to include 'costr…
mini2s Nov 9, 2025
9010b85
feat(core): enhance attempt_completion parsing with flexible result h…
mini2s Nov 9, 2025
9ce3e57
test(core): update test configurations and CSP settings
mini2s Nov 9, 2025
d848d4c
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 9, 2025
62636ad
feat: add Google Tag Manager to marketing website (#9148)
roomote[bot] Nov 10, 2025
b09d0a7
IPC command for sending messages to the current task (#9149)
mrubens Nov 10, 2025
4cd5c90
fix: prevent command_output ask from blocking in cloud/headless envir…
daniel-lxs Nov 10, 2025
2943b83
chore: add changeset for v3.31.1 (#9153)
mrubens Nov 10, 2025
fefec6c
Release: v1.85.0 (#9155)
mrubens Nov 10, 2025
e8ac3bf
Gate XML out when native tool protocol is ON (#9107)
daniel-lxs Nov 10, 2025
cb9abcf
Add native tool definitions (#9156)
daniel-lxs Nov 10, 2025
b214391
feat: sync reviewer landing page copy - variant B to variant A (#9158)
roomote[bot] Nov 10, 2025
23856a5
feat: sync reviewer landing page copy - variant B to variant A (#9158)
roomote[bot] Nov 10, 2025
6e63413
Move auto-approval from `ChatView` to `Task` (#9157)
cte Nov 11, 2025
b4be56e
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 11, 2025
439829c
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 11, 2025
10da2ac
feat(i18n): add internationalization for unexpected API response erro…
mini2s Nov 11, 2025
83fbf85
fix(task): use consistent error message for API response failures and…
mini2s Nov 11, 2025
1ee2d54
test: update vscode mock and improve test coverage
mini2s Nov 11, 2025
9f5240d
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 11, 2025
2c91724
fix: Model switch re-applies selected profile (sync task.apiConfigura…
hannesrudolph Nov 12, 2025
dc37f6a
Add custom Button component with variant system (#9150)
brunobergher Nov 12, 2025
69d4efc
Changeset version bump (#9154)
github-actions[bot] Nov 12, 2025
bcea1a5
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 12, 2025
2d6027a
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 12, 2025
284de59
feat(core): detect API configuration changes for model switching
mini2s Nov 12, 2025
662bf38
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 12, 2025
7323bba
fix: include mcpServers in getState() for auto-approval (#9199)
daniel-lxs Nov 12, 2025
e70c175
fix: replace rate-limited badges with badgen.net (#9200)
daniel-lxs Nov 12, 2025
62d8cc0
Batch settings updates from the webview to the extension host (#9165)
cte Nov 12, 2025
8902fac
fix: Apply updated API profile settings when provider/model unchanged…
hannesrudolph Nov 13, 2025
387d1ba
fix: migrate Issue Fixer to REST + ProjectsV2 (#9207)
hannesrudolph Nov 13, 2025
0fdbd39
Migrate conversation continuity to plugin-side encrypted reasoning it…
hannesrudolph Nov 13, 2025
dc1cee6
chore: add changeset for v3.31.2 (#9216)
mrubens Nov 13, 2025
bbad2dc
Changeset version bump (#9217)
github-actions[bot] Nov 13, 2025
bb6cac4
rename: sliding-window -> context-management; truncateConversationIfN…
hannesrudolph Nov 13, 2025
4e6cdad
Fix: Roo Anthropic input token normalization (avoid double-count) (#9…
hannesrudolph Nov 13, 2025
107cad3
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 13, 2025
9476547
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 13, 2025
760c8c9
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 13, 2025
7730c6f
OpenAI Native: gate encrypted_content include; remove gpt-5-chat-late…
hannesrudolph Nov 13, 2025
ee9b255
docs: remove Contributors section from README files (#9198)
roomote[bot] Nov 13, 2025
7fedd7a
Release v3.31.3 (#9232)
mrubens Nov 13, 2025
2b26cf3
Changeset version bump (#9233)
github-actions[bot] Nov 13, 2025
5e6e601
Add native tool call support (#9159)
daniel-lxs Nov 13, 2025
d270ea1
Consistently use Package.name for better support of the nightly app (…
mrubens Nov 13, 2025
237c324
fix: resolve 400 error with native tools on OpenRouter (#9238)
daniel-lxs Nov 13, 2025
5069ce9
fix: change tool_choice from required to auto for native protocol (#9…
daniel-lxs Nov 13, 2025
8d14e90
docs: include PR numbers in release guide (#9236)
hannesrudolph Nov 13, 2025
ad1e9a8
Add enum support to configuration schema (#9247)
mrubens Nov 13, 2025
aaab2bf
refactor(task): switch to <feedback> wrapper to prevent focus drift a…
hannesrudolph Nov 14, 2025
2588309
fix: Filter native tools by mode restrictions (#9246)
daniel-lxs Nov 14, 2025
c49f9ab
Fix broken share button (#9253)
hannesrudolph Nov 14, 2025
01cb12f
Add GPT-5.1 models and clean up reasoning effort logic (#9252)
hannesrudolph Nov 14, 2025
38e3529
fix: make line_ranges optional in read_file tool schema (#9254)
daniel-lxs Nov 14, 2025
3237c07
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 14, 2025
d139eff
fix: prevent consecutive user messages on streaming retry (#9249)
daniel-lxs Nov 14, 2025
31f7372
feat(openai): OpenAI Responses: model-driven prompt caching and gener…
hannesrudolph Nov 14, 2025
161345c
revert out of scope changes from #9252 (#9258)
hannesrudolph Nov 14, 2025
ee64f44
Revert "refactor(task): switch to <feedback> wrapper to prevent focus…
mrubens Nov 14, 2025
37337fd
Release v3.32.0 (#9264)
mrubens Nov 14, 2025
da46118
Changeset version bump (#9265)
github-actions[bot] Nov 14, 2025
1e2dfcd
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 14, 2025
b23dd07
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 14, 2025
4a9ff8f
[FIX] Fix OpenAI Native handling of encrypted reasoning blocks to pre…
hannesrudolph Nov 14, 2025
1b19646
fix: prevent duplicate tool_result blocks in native protocol mode for…
daniel-lxs Nov 14, 2025
93c6d97
Fix duplicate tool blocks causing 'tool has already been used' error …
daniel-lxs Nov 15, 2025
44b96f9
feat(openai-native): add abort controller for request cancellation (#…
daniel-lxs Nov 15, 2025
b2f204f
Disable XML parser for native tool protocol (#9277)
daniel-lxs Nov 15, 2025
924d815
Release v3.32.1 (#9278)
mrubens Nov 15, 2025
64b1b62
Changeset version bump (#9280)
github-actions[bot] Nov 15, 2025
0a30531
refactor: centralize toolProtocol configuration checks (#9279)
daniel-lxs Nov 15, 2025
3753516
fix: format tool responses for native protocol (#9270)
daniel-lxs Nov 15, 2025
bc99f41
fix: prevent duplicate tool_result blocks in native tool protocol (#9…
daniel-lxs Nov 15, 2025
05ed73d
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 15, 2025
1170833
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 15, 2025
4e316e0
Fix duplicate import (#9281)
mrubens Nov 15, 2025
f31bab6
chore(core): remove unused TelemetryEventName import
mini2s Nov 15, 2025
744f4bd
feat: implement dynamic tool protocol resolution with proper preceden…
daniel-lxs Nov 15, 2025
7a06902
web: Roo Code Cloud Provider pricing page and changes elsewhere (#9195)
brunobergher Nov 16, 2025
d409c87
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 17, 2025
0b9a81e
feat(zgsm): add abort signal handling for streaming responses
mini2s Nov 17, 2025
3e0bd0e
Move the native tool call toggle to experimental settings (#9297)
mrubens Nov 17, 2025
a9687cb
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 17, 2025
2cd7c21
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 17, 2025
0e51a1a
fix: Replace broken badgen.net badges with shields.io (#9318)
roomote[bot] Nov 17, 2025
fc19e76
fix: preserve tool blocks for native protocol in conversation history…
daniel-lxs Nov 17, 2025
3631a02
feat: add git status to environment details (#9310)
daniel-lxs Nov 17, 2025
cbd26df
feat: Move Import/Export to Modes view toolbar (#8686) Cleanup of Mod…
hannesrudolph Nov 17, 2025
5135282
Add max git status files to evals settings (#9322)
mrubens Nov 17, 2025
3091506
Release: v1.86.0 (#9323)
mrubens Nov 17, 2025
e742511
fix: prevent infinite loop when attempt_completion succeeds (#9325)
daniel-lxs Nov 17, 2025
021c4bf
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 18, 2025
6acb104
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 18, 2025
c5b18c1
feat: add tool protocol selector to advanced settings (#9324)
daniel-lxs Nov 18, 2025
2a745da
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 18, 2025
dbaaef7
Remove experimental setting for native tool calls (#9333)
mrubens Nov 18, 2025
b03eb30
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 18, 2025
fe01689
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 18, 2025
c4f1ce5
Fix the type of the list files recursive parameter (#9337)
mrubens Nov 18, 2025
78ea1f1
fix: use VSCode theme color for outline button borders (#9336)
roomote[bot] Nov 18, 2025
aa2a17f
feat: update cloud agent CTA to point to setup page (#9338)
roomote[bot] Nov 18, 2025
f7c2e8d
Improve Google Gemini defaults, temperature, and cost reporting (#9327)
hannesrudolph Nov 18, 2025
6957294
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 18, 2025
9de5333
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 18, 2025
f5d3ac0
fix: sync parser state with profile/model changes (#9355)
daniel-lxs Nov 18, 2025
2c51034
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Nov 18, 2025
f8d6e12
feat: enable native tool calling for openai-native provider (#9348)
hannesrudolph Nov 18, 2025
ac0832f
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Nov 18, 2025
9538d82
Add Gemini 3 Pro Preview model (#9357)
hannesrudolph Nov 18, 2025
4bfd070
fix: pass tool protocol parameter to lineCountTruncationError (#9358)
daniel-lxs Nov 18, 2025
f455493
Remove the Roo model defaults (#9340)
mrubens Nov 18, 2025
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
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: 0 additions & 8 deletions .changeset/v3.34.1.md

This file was deleted.

30 changes: 0 additions & 30 deletions packages/types/src/providers/cerebras.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,6 @@ export const cerebrasModels = {
outputPrice: 0,
description: "Highly intelligent general purpose model with up to 1,000 tokens/s",
},
"qwen-3-coder-480b-free": {
maxTokens: 40000,
contextWindow: 64000,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0,
outputPrice: 0,
description:
"[SOON TO BE DEPRECATED] SOTA coding model with ~2000 tokens/s ($0 free tier)\n\nβ€’ Use this if you don't have a Cerebras subscription\nβ€’ 64K context window\nβ€’ Rate limits: 150K TPM, 1M TPH/TPD, 10 RPM, 100 RPH/RPD\n\nUpgrade for higher limits: [https://cloud.cerebras.ai/?utm=roocode](https://cloud.cerebras.ai/?utm=roocode)",
},
"qwen-3-coder-480b": {
maxTokens: 40000,
contextWindow: 128000,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0,
outputPrice: 0,
description:
"[SOON TO BE DEPRECATED] SOTA coding model with ~2000 tokens/s ($50/$250 paid tiers)\n\nβ€’ Use this if you have a Cerebras subscription\nβ€’ 131K context window with higher rate limits",
},
"qwen-3-235b-a22b-instruct-2507": {
maxTokens: 64000,
contextWindow: 64000,
Expand Down Expand Up @@ -62,16 +42,6 @@ export const cerebrasModels = {
outputPrice: 0,
description: "SOTA coding performance with ~2500 tokens/s",
},
"qwen-3-235b-a22b-thinking-2507": {
maxTokens: 40000,
contextWindow: 65000,
supportsImages: false,
supportsPromptCache: false,
inputPrice: 0,
outputPrice: 0,
description: "SOTA performance with ~1500 tokens/s",
supportsReasoningEffort: true,
},
"gpt-oss-120b": {
maxTokens: 8000,
contextWindow: 64000,
Expand Down
14 changes: 3 additions & 11 deletions src/api/providers/cerebras.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,19 +98,11 @@ export class CerebrasHandler extends BaseProvider implements SingleCompletionHan
}

getModel(): { id: CerebrasModelId; info: (typeof cerebrasModels)[CerebrasModelId] } {
const originalModelId = (this.options.apiModelId as CerebrasModelId) || this.defaultProviderModelId

// Route both qwen coder models to the same actual model ID for API calls
// This allows them to have different rate limits/descriptions in the UI
// while using the same underlying model
let apiModelId = originalModelId
if (originalModelId === "qwen-3-coder-480b-free") {
apiModelId = "qwen-3-coder-480b"
}
const modelId = (this.options.apiModelId as CerebrasModelId) || this.defaultProviderModelId

return {
id: apiModelId,
info: this.providerModels[originalModelId], // Use original model info for rate limits/descriptions
id: modelId,
info: this.providerModels[modelId],
}
}

Expand Down
142 changes: 137 additions & 5 deletions src/api/providers/openrouter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import {
import type { ApiHandlerOptions, ModelRecord } from "../../shared/api"

import { convertToOpenAiMessages } from "../transform/openai-format"
import { resolveToolProtocol } from "../../utils/resolveToolProtocol"
import { TOOL_PROTOCOL } from "@roo-code/types"
import { ApiStreamChunk } from "../transform/stream"
import { convertToR1Format } from "../transform/r1-format"
import { addCacheBreakpoints as addAnthropicCacheBreakpoints } from "../transform/caching/anthropic"
Expand Down Expand Up @@ -88,6 +90,7 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
protected models: ModelRecord = {}
protected endpoints: ModelRecord = {}
private readonly providerName = "OpenRouter"
private currentReasoningDetails: any[] = []

constructor(options: ApiHandlerOptions) {
super()
Expand Down Expand Up @@ -125,6 +128,10 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
}
}

getReasoningDetails(): any[] | undefined {
return this.currentReasoningDetails.length > 0 ? this.currentReasoningDetails : undefined
}

override async *createMessage(
systemPrompt: string,
messages: Anthropic.Messages.MessageParam[],
Expand All @@ -134,11 +141,14 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH

let { id: modelId, maxTokens, temperature, topP, reasoning } = model

// OpenRouter sends reasoning tokens by default for Gemini 2.5 Pro
// Preview even if you don't request them. This is not the default for
// Reset reasoning_details accumulator for this request
this.currentReasoningDetails = []

// OpenRouter sends reasoning tokens by default for Gemini 2.5 Pro models
// even if you don't request them. This is not the default for
// other providers (including Gemini), so we need to explicitly disable
// i We should generalize this using the logic in `getModelParams`, but
// this is easier for now.
// them unless the user has explicitly configured reasoning.
// Note: Gemini 3 models use reasoning_details format and should not be excluded.
if (
(modelId === "google/gemini-2.5-pro-preview" || modelId === "google/gemini-2.5-pro") &&
typeof reasoning === "undefined"
Expand All @@ -157,6 +167,43 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
openAiMessages = convertToR1Format([{ role: "user", content: systemPrompt }, ...messages])
}

// Process reasoning_details when switching models to Gemini for native tool call compatibility
const toolProtocol = resolveToolProtocol(this.options, model.info)
const isNativeProtocol = toolProtocol === TOOL_PROTOCOL.NATIVE
const isGemini = modelId.startsWith("google/gemini")

// For Gemini with native protocol: inject fake reasoning.encrypted blocks for tool calls
// This is required when switching from other models to Gemini to satisfy API validation
if (isNativeProtocol && isGemini) {
openAiMessages = openAiMessages.map((msg) => {
if (msg.role === "assistant") {
const toolCalls = (msg as any).tool_calls as any[] | undefined
const existingDetails = (msg as any).reasoning_details as any[] | undefined

// Only inject if there are tool calls and no existing encrypted reasoning
if (toolCalls && toolCalls.length > 0) {
const hasEncrypted = existingDetails?.some((d) => d.type === "reasoning.encrypted") ?? false

if (!hasEncrypted) {
const fakeEncrypted = toolCalls.map((tc, idx) => ({
id: tc.id,
type: "reasoning.encrypted",
data: "skip_thought_signature_validator",
format: "google-gemini-v1",
index: (existingDetails?.length ?? 0) + idx,
}))

return {
...msg,
reasoning_details: [...(existingDetails ?? []), ...fakeEncrypted],
}
}
}
}
return msg
})
}

// https://openrouter.ai/docs/features/prompt-caching
// TODO: Add a `promptCacheStratey` field to `ModelInfo`.
if (OPEN_ROUTER_PROMPT_CACHING_MODELS.has(modelId)) {
Expand Down Expand Up @@ -203,6 +250,20 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH

let lastUsage: CompletionUsage | undefined = undefined
const toolCallAccumulator = new Map<number, { id: string; name: string; arguments: string }>()
// Accumulator for reasoning_details: accumulate text by type-index key
const reasoningDetailsAccumulator = new Map<
string,
{
type: string
text?: string
summary?: string
data?: string
id?: string | null
format?: string
signature?: string
index: number
}
>()

for await (const chunk of stream) {
// OpenRouter returns an error object instead of the OpenAI SDK throwing an error.
Expand All @@ -216,7 +277,73 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
const finishReason = chunk.choices[0]?.finish_reason

if (delta) {
if ("reasoning" in delta && delta.reasoning && typeof delta.reasoning === "string") {
// Handle reasoning_details array format (used by Gemini 3, Claude, OpenAI o-series, etc.)
// See: https://openrouter.ai/docs/use-cases/reasoning-tokens#preserving-reasoning-blocks
// Priority: Check for reasoning_details first, as it's the newer format
const deltaWithReasoning = delta as typeof delta & {
reasoning_details?: Array<{
type: string
text?: string
summary?: string
data?: string
id?: string | null
format?: string
signature?: string
index?: number
}>
}

if (deltaWithReasoning.reasoning_details && Array.isArray(deltaWithReasoning.reasoning_details)) {
for (const detail of deltaWithReasoning.reasoning_details) {
const index = detail.index ?? 0
const key = `${detail.type}-${index}`
const existing = reasoningDetailsAccumulator.get(key)

if (existing) {
// Accumulate text/summary/data for existing reasoning detail
if (detail.text !== undefined) {
existing.text = (existing.text || "") + detail.text
}
if (detail.summary !== undefined) {
existing.summary = (existing.summary || "") + detail.summary
}
if (detail.data !== undefined) {
existing.data = (existing.data || "") + detail.data
}
// Update other fields if provided
if (detail.id !== undefined) existing.id = detail.id
if (detail.format !== undefined) existing.format = detail.format
if (detail.signature !== undefined) existing.signature = detail.signature
} else {
// Start new reasoning detail accumulation
reasoningDetailsAccumulator.set(key, {
type: detail.type,
text: detail.text,
summary: detail.summary,
data: detail.data,
id: detail.id,
format: detail.format,
signature: detail.signature,
index,
})
}

// Yield text for display (still fragmented for live streaming)
let reasoningText: string | undefined
if (detail.type === "reasoning.text" && typeof detail.text === "string") {
reasoningText = detail.text
} else if (detail.type === "reasoning.summary" && typeof detail.summary === "string") {
reasoningText = detail.summary
}
// Note: reasoning.encrypted types are intentionally skipped as they contain redacted content

if (reasoningText) {
yield { type: "reasoning", text: reasoningText }
}
}
} else if ("reasoning" in delta && delta.reasoning && typeof delta.reasoning === "string") {
// Handle legacy reasoning format - only if reasoning_details is not present
// See: https://openrouter.ai/docs/use-cases/reasoning-tokens
yield { type: "reasoning", text: delta.reasoning }
}

Expand Down Expand Up @@ -280,6 +407,11 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
toolCallAccumulator.clear()
}

// After streaming completes, store the accumulated reasoning_details
if (reasoningDetailsAccumulator.size > 0) {
this.currentReasoningDetails = Array.from(reasoningDetailsAccumulator.values())
}

if (lastUsage) {
yield {
type: "usage",
Expand Down
13 changes: 11 additions & 2 deletions src/api/transform/openai-format.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,21 @@ export function convertToOpenAiMessages(
},
}))

openAiMessages.push({
// Check if the message has reasoning_details (used by Gemini 3, etc.)
const messageWithDetails = anthropicMessage as any
const baseMessage: OpenAI.Chat.ChatCompletionAssistantMessageParam = {
role: "assistant",
content,
// Cannot be an empty array. API expects an array with minimum length 1, and will respond with an error if it's empty
tool_calls: tool_calls.length > 0 ? tool_calls : undefined,
})
}

// Preserve reasoning_details if present (will be processed by provider if needed)
if (messageWithDetails.reasoning_details && Array.isArray(messageWithDetails.reasoning_details)) {
;(baseMessage as any).reasoning_details = messageWithDetails.reasoning_details
}

openAiMessages.push(baseMessage)
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/core/task-persistence/apiMessages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ export type ApiMessage = Anthropic.MessageParam & {
summary?: any[]
encrypted_content?: string
text?: string
// For OpenRouter reasoning_details array format (used by Gemini 3, etc.)
reasoning_details?: any[]
}

export async function readApiMessages({
Expand Down
34 changes: 33 additions & 1 deletion src/core/task/Task.ts
Original file line number Diff line number Diff line change
Expand Up @@ -698,13 +698,15 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
getEncryptedContent?: () => { encrypted_content: string; id?: string } | undefined
getThoughtSignature?: () => string | undefined
getSummary?: () => any[] | undefined
getReasoningDetails?: () => any[] | undefined
}

if (message.role === "assistant") {
const responseId = handler.getResponseId?.()
const reasoningData = handler.getEncryptedContent?.()
const thoughtSignature = handler.getThoughtSignature?.()
const reasoningSummary = handler.getSummary?.()
const reasoningDetails = handler.getReasoningDetails?.()

// Start from the original assistant message
const messageWithTs: any = {
Expand All @@ -713,8 +715,14 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
ts: Date.now(),
}

// Store reasoning_details array if present (for models like Gemini 3)
if (reasoningDetails) {
messageWithTs.reasoning_details = reasoningDetails
}

// Store reasoning: plain text (most providers) or encrypted (OpenAI Native)
if (reasoning) {
// Skip if reasoning_details already contains the reasoning (to avoid duplication)
if (reasoning && !reasoningDetails) {
const reasoningBlock = {
type: "reasoning",
text: reasoning,
Expand Down Expand Up @@ -3686,6 +3694,30 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {

const [first, ...rest] = contentArray

// Check if this message has reasoning_details (OpenRouter format for Gemini 3, etc.)
const msgWithDetails = msg
if (msgWithDetails.reasoning_details && Array.isArray(msgWithDetails.reasoning_details)) {
// Build the assistant message with reasoning_details
let assistantContent: Anthropic.Messages.MessageParam["content"]

if (contentArray.length === 0) {
assistantContent = ""
} else if (contentArray.length === 1 && contentArray[0].type === "text") {
assistantContent = (contentArray[0] as Anthropic.Messages.TextBlockParam).text
} else {
assistantContent = contentArray
}

// Create message with reasoning_details property
cleanConversationHistory.push({
role: "assistant",
content: assistantContent,
reasoning_details: msgWithDetails.reasoning_details,
} as any)

continue
}

// Embedded reasoning: encrypted (send) or plain text (skip)
const hasEncryptedReasoning =
first && (first as any).type === "reasoning" && typeof (first as any).encrypted_content === "string"
Expand Down