Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
d6860e1
Update contributors list (#2946)
github-actions[bot] Apr 26, 2025
42c1f5f
Changeset version bump (#2957)
R00-B0T Apr 26, 2025
418791a
Fix: custom modes export import (#2810)
julionav Apr 26, 2025
1924e10
Fix all linter errors (and fix the lint scripts too) (#2958)
cte Apr 26, 2025
0549a02
test: run linting during npm test (#2981)
KJ7LNW Apr 28, 2025
7020d1d
Fix ru README contributor section (#2995)
mrubens Apr 28, 2025
ecc7473
fix UI/UX: Mode switch performance from 1 sec -> instant (#2997)
dlab-anton Apr 28, 2025
8e85a12
feat: standardize tree-sitter test implementations (#2960)
KJ7LNW Apr 28, 2025
2e1d949
Add support for multiple command execution strategies (#2820)
cte Apr 28, 2025
449d54b
Remove unused ClineSay and -Ask type variants (#2061)
wkordalski Apr 28, 2025
21ea433
Fix e2e tests (#3014)
cte Apr 28, 2025
2075f26
feat: Add Reasoning Effort setting for OpenAI Compatible provider (#2…
mr-ryan-james Apr 28, 2025
a3d8c0e
feat: vertex/gemini prompt caching (#2996)
ashktn Apr 28, 2025
04fa72e
Feat: Add a new button to import settings on the welcome screen (#2811)
julionav Apr 28, 2025
65958d8
Overhaul CodeBlock rendering (#3019)
cte Apr 29, 2025
8b072ad
feat: syntax highlighting terminal output with Shiki (#3021)
KJ7LNW Apr 29, 2025
81e01a9
Update package-lock.json in webview-ui (#3022)
cte Apr 29, 2025
60270d1
Revert "feat: syntax highlighting terminal output with Shiki" (#3023)
cte Apr 29, 2025
d07e605
Simplify Roo Code's quick actions (#3024)
cte Apr 29, 2025
8df1ee0
Set busy flag on ExecaTerminal so it reports in env details when back…
cte Apr 29, 2025
97f0dd4
feat: persist workspacePath to each task for improved task management…
snoyiatk Apr 29, 2025
dcef0fc
Prevent duplicate terminal output when combining terminal output mess…
cte Apr 29, 2025
65cb924
Count tokens worker (#3037)
cte Apr 29, 2025
664d5b1
Add a Release Engineer project mode (#3038)
mrubens Apr 29, 2025
f120de6
test: verify dist WASM files exist (#3048)
KJ7LNW Apr 29, 2025
67ec756
Copy tree-sitter.wasm to dist (#3046)
cte Apr 29, 2025
6e4a791
UI: Toggles and border fixes on edge case themes. (#3051)
sachasayan Apr 30, 2025
34d7dcf
Support mentioning filenames with spaces (#3044)
jr Apr 30, 2025
23977d0
Fix: Adjust padding in chat view for better UI (#2965)
zhangtony239 Apr 30, 2025
33a1f35
Update contributors list (#2972)
github-actions[bot] Apr 30, 2025
7863303
Fall back to execa if VSCode terminal integration fails (#3049)
cte Apr 30, 2025
1d7569b
Improve command execution component (#3057)
cte Apr 30, 2025
e975e30
Command execution component tweaks (#3059)
cte Apr 30, 2025
2fd7d13
v3.15.0 (#3061)
cte Apr 30, 2025
d990f0e
Changeset version bump (#3020)
R00-B0T Apr 30, 2025
5067190
Play sound only when action needed from the user (#3065)
olearycrew Apr 30, 2025
6e86f04
Make retries respect the global auto approve checkbox (#3067)
mrubens Apr 30, 2025
b51abf7
Treat HistoryView item clicks as (de)select in selection mode (#3068)
jr Apr 30, 2025
49382b7
Capture both stdout and stderr from execa-spawned processes (#3073)
cte Apr 30, 2025
8dd4431
changeset version bump
github-actions[bot] Apr 30, 2025
30df5c2
Updating CHANGELOG.md format
invalid-email-address Apr 30, 2025
3a6a122
Update CHANGELOG.md
cte Apr 30, 2025
1a7cb19
Added v1.15.1
nang-dev May 1, 2025
ac23e7e
Added defaults
nang-dev May 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
17 changes: 15 additions & 2 deletions .roomodes
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"customModes": [
{
"slug": "test",
"name": "Test",
"name": "🧪 Test",
"roleDefinition": "You are Roo, a Jest testing specialist with deep expertise in:\n- Writing and maintaining Jest test suites\n- Test-driven development (TDD) practices\n- Mocking and stubbing with Jest\n- Integration testing strategies\n- TypeScript testing patterns\n- Code coverage analysis\n- Test performance optimization\n\nYour focus is on maintaining high test quality and coverage across the codebase, working primarily with:\n- Test files in __tests__ directories\n- Mock implementations in __mocks__\n- Test utilities and helpers\n- Jest configuration and setup\n\nYou ensure tests are:\n- Well-structured and maintainable\n- Following Jest best practices\n- Properly typed with TypeScript\n- Providing meaningful coverage\n- Using appropriate mocking strategies",
"groups": [
"read",
Expand All @@ -20,7 +20,7 @@
},
{
"slug": "translate",
"name": "Translate",
"name": "🌐 Translate",
"roleDefinition": "You are Roo, a linguistic specialist focused on translating and managing localization files. Your responsibility is to help maintain and update translation files for the application, ensuring consistency and accuracy across all language resources.",
"groups": [
"read",
Expand All @@ -34,6 +34,19 @@
]
],
"source": "project"
},
{
"slug": "release-engineer",
"name": "🚀 Release Engineer",
"roleDefinition": "You are Roo, a release engineer specialized in automating the release process for software projects. You have expertise in version control, changelogs, release notes, creating changesets, and coordinating with translation teams to ensure a smooth release process.",
"customInstructions": "When preparing a release:\n1. Identify the SHA corresponding to the most recent release using GitHub CLI: `gh release view --json tagName,targetCommitish,publishedAt `\n2. Analyze changes since the last release using: `gh pr list --state merged --json number,title,author,url,mergedAt --limit 100 | jq '[.[] | select(.mergedAt > \"TIMESTAMP\") | {number, title, author: .author.login, url, mergedAt}]'`\n3. Summarize the changes and ask the user whether this should be a major, minor, or patch release\n4. Create a changeset in .changeset/v[version].md instead of directly modifying package.json. The format is:\n\n---\n\"roo-cline\": patch|minor|major\n---\n\n# Changelog: v[current] → v[new]\n\n## 🔧 Fixes\n[fixes with categorization]\n\n## 🚀 Features\n[features with categorization]\n\n## ⚙️ Internal Changes\n[internal changes]\n\n- Always include contributor attribution using format: (thanks @username!)\n- Provide brief descriptions under each item to explain the change\n\n5. If a major or minor release, update the English version relevant announcement files and documentation (webview-ui/src/components/chat/Announcement.tsx, README.md, and the `latestAnnouncementId` in src/core/webview/ClineProvider.ts)\n6. Ask the user to confirm the English version\n7. Use the new_task tool to create a subtask in `translate` mode with detailed instructions of which content needs to be translated into all supported languages",
"groups": [
"read",
"edit",
"command",
"browser"
],
"source": "project"
}
]
}
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
# Roo Code Changelog

## [3.15.1] - 2025-04-30

- Capture stderr in execa-spawned processes
- Play sound only when action needed from the user (thanks @olearycrew)
- Make retries respect the global auto approve checkbox
- Fix a selection mode bug in the history view (thanks @jr)

## 3.15.0 - 2025-04-30

- Add prompt caching to the Google Vertex provider (thanks @ashktn)
- Add a fallback mechanism for executing terminal commands if VSCode terminal shell integration fails
- Improve the UI/UX of code snippets in the chat (thanks @KJ7LNW)
- Add a reasoning effort setting for the OpenAI Compatible provider (thanks @mr-ryan-james)
- Allow terminal commands to be stopped directly from the chat UI
- Adjust chat view padding to accommodate small width layouts (thanks @zhangtony239)
- Fix file mentions for filenames containing spaces
- Improve the auto-approve toggle buttons for some high-contrast VSCode themes
- Offload expensive count token operations to a web worker (thanks @samhvw8)
- Improve support for mult-root workspaces (thanks @snoyiatk)
- Simplify and streamline Roo Code's quick actions
- Allow Roo Code settings to be imported from the welcome screen (thanks @julionav)
- Remove unused types (thanks @wkordalski)
- Improve the performance of mode switching (thanks @dlab-anton)
- Fix importing & exporting of custom modes (thanks @julionav)

## [3.14.3] - 2025-04-25

- Add Boomerang Orchestrator as a built-in mode
Expand Down
17 changes: 8 additions & 9 deletions e2e/src/suite/subtasks.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { ClineMessage } from "../../../src/exports/roo-code"

import { sleep, waitFor, waitUntilCompleted } from "./utils"

suite("Agent Subtasks", () => {
suite.skip("Roo Code Subtasks", () => {
test("Should handle subtask cancellation and resumption correctly", async () => {
const api = globalThis.api

Expand All @@ -17,18 +17,17 @@ suite("Agent Subtasks", () => {
}
})

await api.setConfiguration({
mode: "ask",
alwaysAllowModeSwitch: true,
alwaysAllowSubtasks: true,
autoApprovalEnabled: true,
enableCheckpoints: false,
})

const childPrompt = "You are a calculator. Respond only with numbers. What is the square root of 9?"

// Start a parent task that will create a subtask.
const parentTaskId = await api.startNewTask({
configuration: {
mode: "ask",
alwaysAllowModeSwitch: true,
alwaysAllowSubtasks: true,
autoApprovalEnabled: true,
enableCheckpoints: false,
},
text:
"You are the parent task. " +
`Create a subtask by using the new_task tool with the message '${childPrompt}'.` +
Expand Down
73 changes: 37 additions & 36 deletions esbuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,41 +32,33 @@ const copyWasmFiles = {
const nodeModulesDir = path.join(__dirname, "node_modules")
const distDir = path.join(__dirname, "dist")

// tiktoken
// tiktoken WASM file
fs.copyFileSync(
path.join(nodeModulesDir, "tiktoken", "tiktoken_bg.wasm"),
path.join(distDir, "tiktoken_bg.wasm"),
)

// tree-sitter WASM
// Main tree-sitter WASM file
fs.copyFileSync(
path.join(nodeModulesDir, "web-tree-sitter", "tree-sitter.wasm"),
path.join(distDir, "tree-sitter.wasm"),
)

// language-specific tree-sitter WASMs
const languageWasmDir = path.join(nodeModulesDir, "tree-sitter-wasms", "out")
const languages = [
"typescript",
"tsx",
"python",
"rust",
"javascript",
"go",
"cpp",
"c",
"c_sharp",
"ruby",
"java",
"php",
"swift",
"kotlin",
]

languages.forEach((lang) => {
const filename = `tree-sitter-${lang}.wasm`
fs.copyFileSync(path.join(languageWasmDir, filename), path.join(distDir, filename))
})
// Copy language-specific WASM files
const languageWasmDir = path.join(__dirname, "node_modules", "tree-sitter-wasms", "out")

// Dynamically read all WASM files from the directory instead of using a hardcoded list
if (fs.existsSync(languageWasmDir)) {
const wasmFiles = fs.readdirSync(languageWasmDir).filter((file) => file.endsWith(".wasm"))

console.log(`Copying ${wasmFiles.length} tree-sitter WASM files to dist directory`)

wasmFiles.forEach((filename) => {
fs.copyFileSync(path.join(languageWasmDir, filename), path.join(distDir, filename))
})
} else {
console.warn(`Tree-sitter WASM directory not found: ${languageWasmDir}`)
}
})
},
}
Expand Down Expand Up @@ -181,7 +173,7 @@ const extensionConfig = {
{
name: "alias-plugin",
setup(build) {
build.onResolve({ filter: /^pkce-challenge$/ }, (args) => {
build.onResolve({ filter: /^pkce-challenge$/ }, (_args) => {
return { path: require.resolve("pkce-challenge/dist/index.browser.js") }
})
},
Expand All @@ -195,22 +187,31 @@ const extensionConfig = {
external: ["vscode"],
}

const workerConfig = {
bundle: true,
minify: production,
sourcemap: !production,
logLevel: "silent",
entryPoints: ["src/workers/countTokens.ts"],
format: "cjs",
sourcesContent: false,
platform: "node",
outdir: "dist/workers",
}

async function main() {
const extensionCtx = await esbuild.context(extensionConfig)
const [extensionCtx, workerCtx] = await Promise.all([
esbuild.context(extensionConfig),
esbuild.context(workerConfig),
])

if (watch) {
// Start the esbuild watcher
await extensionCtx.watch()

// Copy and watch locale files
console.log("Copying locale files initially...")
await Promise.all([extensionCtx.watch(), workerCtx.watch()])
copyLocaleFiles()

// Set up the watcher for locale files
setupLocaleWatcher()
} else {
await extensionCtx.rebuild()
await extensionCtx.dispose()
await Promise.all([extensionCtx.rebuild(), workerCtx.rebuild()])
await Promise.all([extensionCtx.dispose(), workerCtx.dispose()])
}
}

Expand Down
7 changes: 1 addition & 6 deletions evals/packages/types/src/roo-code.ts
Original file line number Diff line number Diff line change
Expand Up @@ -720,7 +720,6 @@ export const clineAsks = [
"mistake_limit_reached",
"browser_action_launch",
"use_mcp_server",
"finishTask",
] as const

export const clineAskSchema = z.enum(clineAsks)
Expand All @@ -730,7 +729,6 @@ export type ClineAsk = z.infer<typeof clineAskSchema>
// ClineSay

export const clineSays = [
"task",
"error",
"api_req_started",
"api_req_finished",
Expand All @@ -743,15 +741,12 @@ export const clineSays = [
"user_feedback",
"user_feedback_diff",
"command_output",
"tool",
"shell_integration_warning",
"browser_action",
"browser_action_result",
"command",
"mcp_server_request_started",
"mcp_server_response",
"new_task_started",
"new_task",
"subtask_result",
"checkpoint_saved",
"rooignore_error",
"diff_error",
Expand Down
1 change: 1 addition & 0 deletions knip.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"evals/**",
"src/activate/**",
"src/exports/**",
"src/workers/**",
"src/schemas/ipc.ts",
"src/extension.ts",
"scripts/**"
Expand Down
Loading
Loading