Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
a79c3d0
Follow symlinks in rooignore checks (#7405)
mrubens Aug 26, 2025
572fa50
Sonic -> Grok Code Fast (#7426)
mrubens Aug 26, 2025
f9921ff
chore: add changeset for v3.26.0 (#7428)
mrubens Aug 26, 2025
7c91e4f
Changeset version bump (#7429)
github-actions[bot] Aug 26, 2025
934bfd0
feat: Add Vercel AI Gateway provider integration (#7396)
joshualipman123 Aug 26, 2025
11c454f
feat: Enable on-disk storage for Qdrant vectors and HNSW index (#7182)
daniel-lxs Aug 26, 2025
ff1f4f0
fix: use anthropic protocol for token counting when using anthropic m…
daniel-lxs Aug 27, 2025
3528f51
fix: remove duplicate cache display in task header (#7443)
mrubens Aug 27, 2025
f02a2bb
Random chat text area cleanup (#7436)
cte Aug 27, 2025
02f551c
Update @roo-code/cloud to enable roomote control for cloud agents (#7…
cte Aug 27, 2025
c479678
Always set remoteControlEnabled to true for cloud agents (#7448)
cte Aug 27, 2025
46b6fdd
chore: add changeset for v3.26.1 (#7459)
mrubens Aug 27, 2025
faf5734
feat: show model ID in API configuration dropdown (#7423)
daniel-lxs Aug 27, 2025
33a8573
feat: update tooltip component to match native VSCode tooltip shadow …
roomote-v0[bot] Aug 27, 2025
1ad2129
Add support for Vercel embeddings (#7445)
mrubens Aug 27, 2025
94f3b2a
Remove dot before model display (#7461)
mrubens Aug 27, 2025
68e4629
Update contributors list (#7109)
github-actions[bot] Aug 27, 2025
bf9e447
Update 3.26.1 changeset (#7463)
mrubens Aug 27, 2025
d23bc01
Changeset version bump (#7460)
github-actions[bot] Aug 27, 2025
0f6079a
Add type for RooCodeEventName.TaskSpawned (#7465)
mrubens Aug 27, 2025
3cb489d
fix: hide .rooignore'd files from environment details by default (#7369)
roomote-v0[bot] Aug 27, 2025
d4a16f4
fix: exclude browser scroll actions from repetition detection (#7471)
roomote-v0[bot] Aug 28, 2025
2204457
Fix GPT-5 Responses API issues with condensing and image support (#7067)
daniel-lxs Aug 28, 2025
d1122ea
Bump cloud to 0.25.0 (#7475)
mrubens Aug 28, 2025
2092fb1
feat: add image generation tool with OpenRouter integration (#7474)
daniel-lxs Aug 28, 2025
548d3b4
Make the default image filename more generic (#7479)
mrubens Aug 28, 2025
43597b3
Release v3.26.2 (#7490)
mrubens Aug 28, 2025
bea0684
Support free imagegen (#7493)
mrubens Aug 28, 2025
8e66607
feat: update OpenRouter API to support input/output modalities and fi…
daniel-lxs Aug 28, 2025
6ef9dbd
Add padding to image model picker (#7494)
mrubens Aug 28, 2025
622da63
fix: prevent dirty state on initial mount in ImageGenerationSettings …
daniel-lxs Aug 28, 2025
8840902
Changeset version bump (#7491)
github-actions[bot] Aug 28, 2025
aee531a
Show console logging in vitests when the --no-silent flag is set (#7467)
hassoncs Aug 28, 2025
cd9e92f
Move @roo-code/cloud to the Roo-Code repo (#7503)
cte Aug 28, 2025
1e4c46f
Refactor the extension bridge (#7515)
cte Aug 29, 2025
1d46bd1
Implement deferred task subscriptions (#7517)
cte Aug 29, 2025
b22a618
feat: add optional input image parameter to image generation tool (#7…
roomote-v0[bot] Aug 29, 2025
01458f1
feat: sync extension bridge settings with cloud (#7535)
roomote-v0[bot] Aug 29, 2025
c3d84d2
refactor: flatten image generation settings structure (#7536)
daniel-lxs Aug 29, 2025
63e40d2
chore: add changeset for v3.26.3 (#7541)
mrubens Aug 29, 2025
a1f9b7d
Changeset version bump (#7542)
github-actions[bot] Aug 29, 2025
20929b0
Mode and provider profile selector (#7545)
cte Aug 29, 2025
0e95f93
Putting the Roo in Roo-leases (#7546)
mrubens Aug 30, 2025
c7d7ad8
Fix evals (#7547)
cte Aug 30, 2025
88bb813
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Aug 30, 2025
47f594f
fix: special tokens should not break task processing (#7540)
pwilkin Aug 30, 2025
4557000
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Aug 30, 2025
958df13
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Aug 30, 2025
c9ff380
docs: update PR template branding from Roo Code to Costrict
mini2s Aug 30, 2025
fad219e
feat: optimize memory usage for image handling in webview (#7556)
daniel-lxs Aug 30, 2025
f5e0525
feat: rename Account tab to Cloud tab (#7558)
roomote-v0[bot] Aug 30, 2025
63b71d8
feat: add Ollama API key support for Turbo mode (#7425)
roomote-v0[bot] Aug 30, 2025
5746dfc
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Aug 31, 2025
e0bd19d
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Aug 31, 2025
c970274
Disconnect extension bridge on logout (#7563)
mrubens Sep 1, 2025
97cfb96
Fix claudeCode.notFound translation key (#7571)
chrarnoldus Sep 1, 2025
00d26ee
v3.26.4 (#7579)
mrubens Sep 1, 2025
5092cdf
Update contributors list (#7462)
github-actions[bot] Sep 1, 2025
ae8a639
Changeset version bump (#7580)
github-actions[bot] Sep 1, 2025
fe2b612
feat: add configurable embedding batch size for code indexing (#7464)
roomote-v0[bot] Sep 2, 2025
2e59347
Shows a pill with the base Roo Code Cloud URL when not pointing to pr…
brunobergher Sep 2, 2025
d396555
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Sep 2, 2025
23fcc30
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Sep 2, 2025
59d6e74
Cloud: fix provider syncing (#7603)
jr Sep 2, 2025
d1baa6e
fix: add cache reporting support for OpenAI-Native provider (#7602)
hannesrudolph Sep 2, 2025
7e24600
feat: add auto-approve support for MCP access_resource tool (#7606)
daniel-lxs Sep 3, 2025
5196c75
Move message queue to the extension host (#7604)
cte Sep 3, 2025
641c058
Send custom modes to the extension bridge (#7612)
cte Sep 3, 2025
f8973d9
Never give up in socket transport (#7616)
mrubens Sep 3, 2025
1c17366
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Sep 3, 2025
c1509da
Fix socket-io client event handling (#7618)
cte Sep 3, 2025
aa4144e
More socket-io client fixes from PR feedback (#7619)
cte Sep 3, 2025
bcb71db
More socket-io client logging improvements (#7620)
cte Sep 3, 2025
43ff486
Publish subtask events (#7626)
cte Sep 3, 2025
c3e748b
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Sep 3, 2025
cb81377
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Sep 3, 2025
84bc703
Update chutes.ts to add Qwen3 235B A22B Thinking 2507 model (#7578)
mohammad154 Sep 3, 2025
7f5d82f
chore: add changeset for v3.26.5 (#7628)
mrubens Sep 3, 2025
c0b9e7a
Update contributors list (#7629)
github-actions[bot] Sep 3, 2025
130ce29
Changeset version bump (#7630)
github-actions[bot] Sep 3, 2025
d789692
feat: add run_slash_command tool for executing slash commands (#7473)
roomote-v0[bot] Sep 3, 2025
280b75d
Focus the extension when receiving bridge commands (#7633)
cte Sep 3, 2025
8dbd30a
Release: v1.73.0 (#7636)
mrubens Sep 3, 2025
f12f193
Cloud: remove extension_bridge_enabled for personal users (#7638)
jr Sep 3, 2025
c25cfde
Publish token usage metrics (#7637)
cte Sep 3, 2025
1f5ee43
fix: preserve scroll position when switching tabs in settings (#7587)
DC-Dancao Sep 3, 2025
0126c5d
feat: add Kimi K2 Turbo model configuration to moonshotModels (#7593)
wangxiaolong100 Sep 4, 2025
e7f599b
fix: use askApproval wrapper in insert_content and search_and_replace…
roomote-v0[bot] Sep 4, 2025
e2c1a20
Release v3.26.6 (#7650)
mrubens Sep 4, 2025
08a825f
Changeset version bump (#7651)
github-actions[bot] Sep 4, 2025
a0384f3
Delete .github/workflows/discord-pr-notify.yml
mrubens Sep 4, 2025
e1dfe25
Remove unused slack notif (#7655)
mrubens Sep 4, 2025
966ed76
Handle zsh process substitution correctly (#7658)
mrubens Sep 4, 2025
b50104c
Handle zsh glob qualifiers correctly (#7667)
mrubens Sep 4, 2025
b48b0be
Minor zh-TW Traditional Chinese locale typo fix (#7672)
PeterDaveHello Sep 4, 2025
72502d8
feat: Add DeepInfra as a model provider in Roo Code (#7677)
Thachnh Sep 4, 2025
7935c94
fix: validate MCP tool exists before execution (#7632)
roomote-v0[bot] Sep 4, 2025
65146b1
fix: add error transform to cryptic openAI SDK errors when API key is…
roomote-v0[bot] Sep 5, 2025
571d1a4
feat: OpenAI Responses API service tiers (flex/priority) β€” UI selecto…
hannesrudolph Sep 5, 2025
de12ec1
fix: prevent countdown timer from showing in history for answered fol…
daniel-lxs Sep 5, 2025
bca6e86
fix: Fix the issue of Moonshot's maximum return token count being lim…
wangxiaolong100 Sep 5, 2025
d9f80f1
feat: update kimi-k2-0905-preview and kimi-k2-turbo-preview (#7663)
CellenLee Sep 5, 2025
2b73251
Fix test
mrubens Sep 5, 2025
282a75b
Release v3.26.7 (#7691)
mrubens Sep 5, 2025
146d849
Delete .changeset/petite-rats-admire.md
mrubens Sep 5, 2025
4ad1a26
feat: Add Kimi K2 0905 model to Groq, Moonshot, and Fireworks provide…
daniel-lxs Sep 5, 2025
467c9f5
Use an allowlist to keep the prompt default shell sane (#7681)
jr Sep 5, 2025
90e7d09
Changeset version bump (#7690)
github-actions[bot] Sep 5, 2025
55ea328
Fix: Improve WelcomeView styling and readability (#7682)
daniel-lxs Sep 5, 2025
2c8c140
feat: add Kimi K2-0905 model to Chutes provider (#7701)
roomote-v0[bot] Sep 5, 2025
2b53399
fix: handle array paths from VSCode terminal profiles (#7697)
roomote-v0[bot] Sep 5, 2025
e559ac6
Edit/Delete User Message (#7447)
NaccOll Sep 5, 2025
0510c03
fix: prevent stack overflow in codebase indexing for large projects (…
daniel-lxs Sep 5, 2025
1e403a7
fix: identify mcp and slash command config path in multiple folder wo…
NaccOll Sep 5, 2025
687b379
fix: resolve CI e2e test ETIMEDOUT errors when downloading VS Code (#…
daniel-lxs Sep 5, 2025
c206da4
fix: Tackling Race/State condition issue by Changing the Code Design …
HahaBill Sep 5, 2025
49b50c8
fix: preserve context by retrying with full conversation on invalid p…
daniel-lxs Sep 5, 2025
ae01a90
chore: add changeset for v3.26.8 (#7715)
mrubens Sep 5, 2025
ed765a3
feat(checkpoints): create checkpoint when user sends a message (#7713)
roomote-v0[bot] Sep 5, 2025
e3facc1
Bump to 3.27.0 (#7719)
mrubens Sep 5, 2025
8864651
Changeset version bump (#7716)
github-actions[bot] Sep 5, 2025
e8deedd
fix: update DeepSeek pricing to new unified rates effective Sept 5, 2…
roomote-v0[bot] Sep 5, 2025
079b37a
feat: replace cloud waitlist ad with direct Cloud link in navigation …
roomote-v0[bot] Sep 6, 2025
9378a4e
feat: show dash instead of zero for missing data on evals page (#7748)
roomote-v0[bot] Sep 6, 2025
18cf33f
Feature/update vertex ai models and regions (#7727)
ssweens Sep 7, 2025
247da38
Add model info to eval runs table (#7749)
cte Sep 7, 2025
28d46cd
Merge branch 'main' of github.com:zgsm-ai/costrict into roo-to-main
mini2s Sep 7, 2025
480670e
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Sep 7, 2025
b4d34df
refactor(utils): simplify shell detection logic
mini2s Sep 8, 2025
de2f3fc
Merge remote-tracking branch 'upstream/main' into roo-to-main
mini2s Sep 8, 2025
97c3257
test: update shell detection test expectation and mocks
mini2s Sep 8, 2025
acd07b0
test: add mock cleanup in shell detection tests
mini2s Sep 8, 2025
42e316b
test: update shell detection tests to prioritize PowerShell 7
mini2s Sep 8, 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
48 changes: 32 additions & 16 deletions .github/workflows/code-qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,22 +90,38 @@ jobs:
# - name: Create .env.local file
# working-directory: apps/vscode-e2e
# run: echo "OPENROUTER_API_KEY=${{ secrets.OPENROUTER_API_KEY }}" > .env.local
# - name: Set VS Code test version
# run: echo "VSCODE_VERSION=1.101.2" >> $GITHUB_ENV
# - name: Cache VS Code test runtime
# uses: actions/cache@v4
# with:
# path: apps/vscode-e2e/.vscode-test
# key: ${{ runner.os }}-vscode-test-${{ env.VSCODE_VERSION }}
# - name: Pre-download VS Code test runtime with retry
# working-directory: apps/vscode-e2e
# run: |
# for attempt in 1 2 3; do
# echo "Download attempt $attempt of 3..."
# node -e "
# const { downloadAndUnzipVSCode } = require('@vscode/test-electron');
# downloadAndUnzipVSCode({ version: process.env.VSCODE_VERSION || '1.101.2' })
# .then(() => {
# console.log('βœ… VS Code test runtime downloaded successfully');
# process.exit(0);
# })
# .catch(err => {
# console.error('❌ Failed to download VS Code (attempt $attempt):', err);
# process.exit(1);
# });
# " && break || {
# if [ $attempt -eq 3 ]; then
# echo "All download attempts failed"
# exit 1
# fi
# echo "Retrying in 5 seconds..."
# sleep 5
# }
# done
# - name: Run integration tests
# working-directory: apps/vscode-e2e
# run: xvfb-run -a pnpm test:ci

# notify-slack-on-failure:
# runs-on: ubuntu-latest
# needs: [check-translations, knip, compile, unit-test, integration-test]
# if: ${{ always() && github.event_name == 'push' && github.ref == 'refs/heads/main' && contains(needs.*.result, 'failure') }}
# steps:
# - name: Checkout code
# uses: actions/checkout@v4

# - name: Send Slack notification on failure
# uses: ./.github/actions/slack-notify
# with:
# webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
# channel: "#ci"
# workflow-name: "Code QA"
# failed-jobs: ${{ toJSON(needs) }}
26 changes: 0 additions & 26 deletions .github/workflows/discord-pr-notify.yml

This file was deleted.

1 change: 1 addition & 0 deletions apps/vscode-e2e/src/runTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ async function main() {
extensionTestsPath,
launchArgs: [testWorkspace],
extensionTestsEnv,
version: process.env.VSCODE_VERSION || "1.101.2",
})

// Clean up the temporary workspace
Expand Down
2 changes: 1 addition & 1 deletion apps/web-roo-code/next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const nextConfig: NextConfig = {
destination: "https://roocode.com/:path*",
permanent: true,
},
// Redirect cloud waitlist to Notion page
// Redirect cloud waitlist to Notion page (kept for extension compatibility)
{
source: "/cloud-waitlist",
destination: "https://roo-code.notion.site/238fd1401b0a8087b858e1ad431507cf?pvs=105",
Expand Down
125 changes: 24 additions & 101 deletions apps/web-roo-code/src/app/evals/evals.tsx
Original file line number Diff line number Diff line change
@@ -1,59 +1,33 @@
"use client"

import { useMemo } from "react"
import { ScatterChart, Scatter, XAxis, YAxis, Label, Customized, Cross } from "recharts"

import type { TaskMetrics, Run } from "@roo-code/evals"

import { formatTokens, formatCurrency, formatDuration, formatScore } from "@/lib"
import { useOpenRouterModels } from "@/lib/hooks"
import {
ChartContainer,
ChartTooltip,
ChartTooltipContent,
ChartConfig,
ChartLegend,
ChartLegendContent,
Table,
TableBody,
TableCaption,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui"
import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui"

import type { EvalRun } from "./types"
import { Plot } from "./plot"

export function Evals({
runs,
}: {
runs: (Run & {
label: string
score: number
languageScores?: Record<"go" | "java" | "javascript" | "python" | "rust", number>
taskMetrics: TaskMetrics
modelId?: string
})[]
}) {
export function Evals({ runs }: { runs: EvalRun[] }) {
const { data: openRouterModels } = useOpenRouterModels()

const tableData = useMemo(
const tableData: (EvalRun & { label: string; cost: number })[] = useMemo(
() =>
runs.map((run) => ({
...run,
label: run.description || run.model,
score: run.score,
cost: run.taskMetrics.cost,
model: openRouterModels?.[run.modelId ?? ""],
modelInfo: openRouterModels?.[run.modelId ?? ""]?.modelInfo,
})),
[runs, openRouterModels],
)
runs.map((run) => {
const openRouterModelInfo = openRouterModels?.[run.modelId ?? ""]?.modelInfo

const chartData = useMemo(() => tableData.filter(({ cost }) => cost < 100), [tableData])

const chartConfig = useMemo(
() => chartData.reduce((acc, run) => ({ ...acc, [run.label]: run }), {} as ChartConfig),
[chartData],
return {
...run,
label: run.name || run.description || run.model,
cost: run.taskMetrics.cost,
description: run.description ?? openRouterModelInfo?.description ?? null,
contextWindow: run.contextWindow ?? openRouterModelInfo?.contextWindow ?? null,
inputPrice: run.inputPrice ?? openRouterModelInfo?.inputPrice ?? null,
outputPrice: run.outputPrice ?? openRouterModelInfo?.outputPrice ?? null,
}
}),
[runs, openRouterModels],
)

return (
Expand Down Expand Up @@ -127,17 +101,15 @@ export function Evals({
<TableBody className="font-mono">
{tableData.map((run) => (
<TableRow key={run.id}>
<TableCell title={run.model?.description}>
<TableCell title={run.description ?? undefined}>
<div className="font-sans">{run.label}</div>
<div className="text-xs opacity-50">
{formatTokens(run.modelInfo?.contextWindow ?? 0)}
</div>
<div className="text-xs opacity-50">{formatTokens(run.contextWindow)}</div>
</TableCell>
<TableCell className="border-r">
<div className="flex flex-row gap-2">
<div>{formatCurrency(run.modelInfo?.inputPrice ?? 0)}</div>
<div>{formatCurrency(run.inputPrice)}</div>
<div className="opacity-25">/</div>
<div>{formatCurrency(run.modelInfo?.outputPrice ?? 0)}</div>
<div>{formatCurrency(run.outputPrice)}</div>
</div>
</TableCell>
<TableCell className="font-mono">{formatDuration(run.taskMetrics.duration)}</TableCell>
Expand Down Expand Up @@ -169,58 +141,9 @@ export function Evals({
))}
</TableBody>
<TableCaption>
<div className="pb-4 font-medium">Cost Versus Score</div>
<ChartContainer config={chartConfig} className="h-[500px] w-full">
<ScatterChart margin={{ top: 0, right: 0, bottom: 0, left: 20 }}>
<XAxis
type="number"
dataKey="cost"
name="Cost"
domain={[
(dataMin: number) => Math.round((dataMin - 5) / 5) * 5,
(dataMax: number) => Math.round((dataMax + 5) / 5) * 5,
]}
tickFormatter={(value) => formatCurrency(value)}>
<Label value="Cost" position="bottom" offset={0} />
</XAxis>
<YAxis
type="number"
dataKey="score"
name="Score"
domain={[
(dataMin: number) => Math.max(0, Math.round((dataMin - 5) / 5) * 5),
(dataMax: number) => Math.min(100, Math.round((dataMax + 5) / 5) * 5),
]}
tickFormatter={(value) => `${value}%`}>
<Label value="Score" angle={-90} position="left" dy={-15} />
</YAxis>
<ChartTooltip content={<ChartTooltipContent labelKey="label" hideIndicator />} />
<Customized component={renderQuadrant} />
{chartData.map((d, i) => (
<Scatter key={d.label} name={d.label} data={[d]} fill={`hsl(var(--chart-${i + 1}))`} />
))}
<ChartLegend content={<ChartLegendContent />} />
</ScatterChart>
</ChartContainer>
<div className="py-4 text-xs opacity-50">
(Note: Very expensive models are excluded from the scatter plot.)
</div>
<Plot tableData={tableData} />
</TableCaption>
</Table>
</div>
)
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
const renderQuadrant = (props: any) => (
<Cross
width={props.width}
height={props.height}
x={props.width / 2 + 35}
y={props.height / 2 - 15}
top={0}
left={0}
stroke="currentColor"
opacity={0.1}
/>
)
Loading
Loading