Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
958 commits
Select commit Hold shift + click to select a range
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
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
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
2 changes: 2 additions & 0 deletions apps/web-evals/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"@roo-code/evals": "workspace:^",
"@roo-code/types": "workspace:^",
"@tanstack/react-query": "^5.69.0",
"archiver": "^7.0.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.0",
Expand All @@ -52,6 +53,7 @@
"@roo-code/config-eslint": "workspace:^",
"@roo-code/config-typescript": "workspace:^",
"@tailwindcss/postcss": "^4",
"@types/archiver": "^7.0.0",
"@types/ps-tree": "^1.1.6",
"@types/react": "^18.3.23",
"@types/react-dom": "^18.3.5",
Expand Down
31 changes: 25 additions & 6 deletions apps/web-evals/src/actions/runs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { CreateRun } from "@/lib/schemas"

const EVALS_REPO_PATH = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../../../evals")

export async function createRun({ suite, exercises = [], timeout, ...values }: CreateRun) {
export async function createRun({ suite, exercises = [], timeout, iterations = 1, ...values }: CreateRun) {
const run = await _createRun({
...values,
timeout,
Expand All @@ -36,15 +36,34 @@ export async function createRun({ suite, exercises = [], timeout, ...values }: C
throw new Error("Invalid exercise path: " + path)
}

await createTask({ ...values, runId: run.id, language: language as ExerciseLanguage, exercise })
// Create multiple tasks for each iteration
for (let iteration = 1; iteration <= iterations; iteration++) {
await createTask({
...values,
runId: run.id,
language: language as ExerciseLanguage,
exercise,
iteration,
})
}
}
} else {
for (const language of exerciseLanguages) {
const exercises = await getExercisesForLanguage(EVALS_REPO_PATH, language)
const languageExercises = await getExercisesForLanguage(EVALS_REPO_PATH, language)

// Create tasks for all iterations of each exercise
const tasksToCreate: Array<{ language: ExerciseLanguage; exercise: string; iteration: number }> = []
for (const exercise of languageExercises) {
for (let iteration = 1; iteration <= iterations; iteration++) {
tasksToCreate.push({ language, exercise, iteration })
}
}

await pMap(exercises, (exercise) => createTask({ runId: run.id, language, exercise }), {
concurrency: 10,
})
await pMap(
tasksToCreate,
({ language, exercise, iteration }) => createTask({ runId: run.id, language, exercise, iteration }),
{ concurrency: 10 },
)
}
}

Expand Down
74 changes: 74 additions & 0 deletions apps/web-evals/src/app/api/runs/[id]/logs/[taskId]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { NextResponse } from "next/server"
import type { NextRequest } from "next/server"
import * as fs from "node:fs/promises"
import * as path from "node:path"

import { findTask, findRun } from "@roo-code/evals"

export const dynamic = "force-dynamic"

const LOG_BASE_PATH = "/tmp/evals/runs"

// Sanitize path components to prevent path traversal attacks
function sanitizePathComponent(component: string): string {
// Remove any path separators, null bytes, and other dangerous characters
return component.replace(/[/\\:\0*?"<>|]/g, "_")
}

export async function GET(request: NextRequest, { params }: { params: Promise<{ id: string; taskId: string }> }) {
const { id, taskId } = await params

try {
const runId = Number(id)
const taskIdNum = Number(taskId)

if (isNaN(runId) || isNaN(taskIdNum)) {
return NextResponse.json({ error: "Invalid run ID or task ID" }, { status: 400 })
}

// Verify the run exists
await findRun(runId)

// Get the task to find its language and exercise
const task = await findTask(taskIdNum)

// Verify the task belongs to this run
if (task.runId !== runId) {
return NextResponse.json({ error: "Task does not belong to this run" }, { status: 404 })
}

// Sanitize language and exercise to prevent path traversal
const safeLanguage = sanitizePathComponent(task.language)
const safeExercise = sanitizePathComponent(task.exercise)

// Construct the log file path
const logFileName = `${safeLanguage}-${safeExercise}.log`
const logFilePath = path.join(LOG_BASE_PATH, String(runId), logFileName)

// Verify the resolved path is within the expected directory (defense in depth)
const resolvedPath = path.resolve(logFilePath)
const expectedBase = path.resolve(LOG_BASE_PATH)
if (!resolvedPath.startsWith(expectedBase)) {
return NextResponse.json({ error: "Invalid log path" }, { status: 400 })
}

// Check if the log file exists and read it (async)
try {
const logContent = await fs.readFile(logFilePath, "utf-8")
return NextResponse.json({ logContent })
} catch (err) {
if ((err as NodeJS.ErrnoException).code === "ENOENT") {
return NextResponse.json({ error: "Log file not found", logContent: null }, { status: 200 })
}
throw err
}
} catch (error) {
console.error("Error reading task log:", error)

if (error instanceof Error && error.name === "RecordNotFoundError") {
return NextResponse.json({ error: "Task or run not found" }, { status: 404 })
}

return NextResponse.json({ error: "Failed to read log file" }, { status: 500 })
}
}
129 changes: 129 additions & 0 deletions apps/web-evals/src/app/api/runs/[id]/logs/failed/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
import { NextResponse } from "next/server"
import type { NextRequest } from "next/server"
import * as fs from "node:fs"
import * as path from "node:path"
import archiver from "archiver"

import { findRun, getTasks } from "@roo-code/evals"

export const dynamic = "force-dynamic"

const LOG_BASE_PATH = "/tmp/evals/runs"

// Sanitize path components to prevent path traversal attacks
function sanitizePathComponent(component: string): string {
// Remove any path separators, null bytes, and other dangerous characters
return component.replace(/[/\\:\0*?"<>|]/g, "_")
}

export async function GET(request: NextRequest, { params }: { params: Promise<{ id: string }> }) {
const { id } = await params

try {
const runId = Number(id)

if (isNaN(runId)) {
return NextResponse.json({ error: "Invalid run ID" }, { status: 400 })
}

// Verify the run exists
await findRun(runId)

// Get all tasks for this run
const tasks = await getTasks(runId)

// Filter for failed tasks only
const failedTasks = tasks.filter((task) => task.passed === false)

if (failedTasks.length === 0) {
return NextResponse.json({ error: "No failed tasks to export" }, { status: 400 })
}

// Create a zip archive
const archive = archiver("zip", { zlib: { level: 9 } })

// Collect chunks to build the response
const chunks: Buffer[] = []

archive.on("data", (chunk: Buffer) => {
chunks.push(chunk)
})

// Track archive errors
let archiveError: Error | null = null
archive.on("error", (err: Error) => {
archiveError = err
})

// Set up the end promise before finalizing (proper event listener ordering)
const archiveEndPromise = new Promise<void>((resolve, reject) => {
archive.on("end", resolve)
archive.on("error", reject)
})

// Add each failed task's log file to the archive
const logDir = path.join(LOG_BASE_PATH, String(runId))
let filesAdded = 0

for (const task of failedTasks) {
// Sanitize language and exercise to prevent path traversal
const safeLanguage = sanitizePathComponent(task.language)
const safeExercise = sanitizePathComponent(task.exercise)
const logFileName = `${safeLanguage}-${safeExercise}.log`
const logFilePath = path.join(logDir, logFileName)

// Verify the resolved path is within the expected directory (defense in depth)
const resolvedPath = path.resolve(logFilePath)
const expectedBase = path.resolve(LOG_BASE_PATH)
if (!resolvedPath.startsWith(expectedBase)) {
continue // Skip files with suspicious paths
}

if (fs.existsSync(logFilePath)) {
archive.file(logFilePath, { name: logFileName })
filesAdded++
}
}

// Check if any files were actually added
if (filesAdded === 0) {
archive.abort()
return NextResponse.json(
{ error: "No log files found - they may have been cleared from disk" },
{ status: 404 },
)
}

// Finalize the archive
await archive.finalize()

// Wait for all data to be collected
await archiveEndPromise

// Check for archive errors
if (archiveError) {
throw archiveError
}

// Combine all chunks into a single buffer
const zipBuffer = Buffer.concat(chunks)

// Return the zip file
return new NextResponse(zipBuffer, {
status: 200,
headers: {
"Content-Type": "application/zip",
"Content-Disposition": `attachment; filename="run-${runId}-failed-logs.zip"`,
"Content-Length": String(zipBuffer.length),
},
})
} catch (error) {
console.error("Error exporting failed logs:", error)

if (error instanceof Error && error.name === "RecordNotFoundError") {
return NextResponse.json({ error: "Run not found" }, { status: 404 })
}

return NextResponse.json({ error: "Failed to export logs" }, { status: 500 })
}
}
Loading