Skip to content

Commit ab46f94

Browse files
committed
Merge remote-tracking branch 'origin/main' into will/edit-w-checkpoints
2 parents 15ce9e3 + 5629199 commit ab46f94

File tree

160 files changed

+3741
-683
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

160 files changed

+3741
-683
lines changed

.gitattributes

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,17 @@ src/assets/docs/demo.gif filter=lfs diff=lfs merge=lfs -text
44

55
# Test snapshot files - mark as linguist-generated to exclude from GitHub language statistics
66
*.snap linguist-generated=true
7+
8+
# Non-English translation files - mark as linguist-generated to exclude from GitHub language statistics
9+
# Root locales directory (contains only non-English translations)
10+
locales/** linguist-generated=true
11+
12+
# Mark all locale directories as generated first
13+
src/i18n/locales/** linguist-generated=true
14+
webview-ui/src/i18n/locales/** linguist-generated=true
15+
16+
# Then explicitly mark English directories as NOT generated (override the above)
17+
src/i18n/locales/en/** linguist-generated=false
18+
webview-ui/src/i18n/locales/en/** linguist-generated=false
19+
20+
# This approach uses gitattributes' last-match-wins rule to exclude English while including all other locales

.roo/rules/rules.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
- Ensure all tests pass before submitting changes
77
- The vitest framework is used for testing; the `describe`, `test`, `it`, etc functions are defined by default in `tsconfig.json` and therefore don't need to be imported
88
- Tests must be run from the same directory as the `package.json` file that specifies `vitest` in `devDependencies`
9-
- Run tests with: `npx vitest <relative-path-from-workspace-root>`
9+
- Run tests with: `npx vitest run <relative-path-from-workspace-root>`
1010
- Do NOT run tests from project root - this causes "vitest: command not found" error
1111
- Tests must be run from inside the correct workspace:
12-
- Backend tests: `cd src && npx vitest path/to/test-file` (don't include `src/` in path)
13-
- UI tests: `cd webview-ui && npx vitest src/path/to/test-file`
14-
- Example: For `src/tests/user.test.ts`, run `cd src && npx vitest tests/user.test.ts` NOT `npx vitest src/tests/user.test.ts`
12+
- Backend tests: `cd src && npx vitest run path/to/test-file` (don't include `src/` in path)
13+
- UI tests: `cd webview-ui && npx vitest run src/path/to/test-file`
14+
- Example: For `src/tests/user.test.ts`, run `cd src && npx vitest run tests/user.test.ts` NOT `npx vitest run src/tests/user.test.ts`
1515

1616
2. Lint Rules:
1717

.roomodes

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,27 @@ customModes:
7575
whenToUse: Automate the release process for software projects.
7676
description: Automate the release process.
7777
customInstructions: |-
78-
When preparing a release: 1. Identify the SHA corresponding to the most recent release using GitHub CLI: `gh release view --json tagName,targetCommitish,publishedAt ` 2. Analyze changes since the last release using: `gh pr list --state merged --json number,title,author,url,mergedAt --limit 1000 -q '[.[] | select(.mergedAt > "TIMESTAMP") | {number, title, author: .author.login, url, mergedAt}] | sort_by(.number)'` 3. Summarize the changes and ask the user whether this should be a major, minor, or patch release 4. Create a changeset in .changeset/v[version].md instead of directly modifying package.json. The format is:
79-
``` --- "roo-cline": patch|minor|major ---
80-
[list of changes] ```
81-
- Always include contributor attribution using format: (thanks @username!) - Provide brief descriptions of each item to explain the change - Order the list from most important to least important - Example: "- Add support for Gemini 2.5 Pro caching (thanks @contributor!)" - CRITICAL: Include EVERY SINGLE PR in the changeset - don't assume you know which ones are important. Count the total PRs to verify completeness and cross-reference the list to ensure nothing is missed.
82-
5. 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) 6. Ask the user to confirm the English version 7. 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 8. Commit and push the changeset file to the repository 9. The GitHub Actions workflow will automatically:
78+
When preparing a release:
79+
1. Identify the SHA corresponding to the most recent release using GitHub CLI: `gh release view --json tagName,targetCommitish,publishedAt`
80+
2. Analyze changes since the last release using: `gh pr list --state merged --json number,title,author,url,mergedAt,closingIssuesReferences --limit 1000 -q '[.[] | select(.mergedAt > "TIMESTAMP") | {number, title, author: .author.login, url, mergedAt, issues: .closingIssuesReferences}] | sort_by(.number)'`
81+
3. For each PR with linked issues, fetch the issue details to get the issue reporter: `gh issue view ISSUE_NUMBER --json number,author -q '{number, reporter: .author.login}'`
82+
4. Summarize the changes and ask the user whether this should be a major, minor, or patch release
83+
5. Create a changeset in .changeset/v[version].md instead of directly modifying package.json. The format is:
84+
```
85+
---
86+
"roo-cline": patch|minor|major
87+
---
88+
[list of changes]
89+
```
90+
- Always include contributor attribution using format: (thanks @username!) - For PRs that close issues, also include the issue number and reporter: "- Fix: Description (#123 by @reporter, PR by @contributor)" - For PRs without linked issues, use the standard format: "- Add support for feature (thanks @contributor!)" - Provide brief descriptions of each item to explain the change - Order the list from most important to least important - Example formats:
91+
- With issue: "- Fix: Resolve memory leak in extension (#456 by @issueReporter, PR by @prAuthor)"
92+
- Without issue: "- Add support for Gemini 2.5 Pro caching (thanks @contributor!)"
93+
- CRITICAL: Include EVERY SINGLE PR in the changeset - don't assume you know which ones are important. Count the total PRs to verify completeness and cross-reference the list to ensure nothing is missed.
94+
6. 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)
95+
7. Ask the user to confirm the English version
96+
8. 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
97+
9. Create a new branch for the release preparation: `git checkout -b release/v[version]`
98+
10. Commit and push the changeset file and any documentation updates to the repository: `git add . && git commit -m "chore: add changeset for v[version]" && git push origin release/v[version]` 11. Create a pull request for the release: `gh pr create --title "Release v[version]" --body "Release preparation for v[version]. This PR includes the changeset and any necessary documentation updates." --base main --head release/v[version]` 12. The GitHub Actions workflow will automatically:
8399
- Create a version bump PR when changesets are merged to main
84100
- Update the CHANGELOG.md with proper formatting
85101
- Publish the release when the version bump PR is merged

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
# Roo Code Changelog
22

3+
## [3.23.16] - 2025-07-19
4+
5+
- Add global rate limiting for OpenAI-compatible embeddings (thanks @daniel-lxs!)
6+
- Add batch limiting to code indexer (thanks @daniel-lxs!)
7+
- Fix Docker port conflicts for evals services
8+
9+
## [3.23.15] - 2025-07-18
10+
11+
- Fix configurable delay for diagnostics to prevent premature error reporting
12+
- Add command timeout allowlist
13+
- Add description and whenToUse fields to custom modes in .roomodes (thanks @RandalSchwartz!)
14+
- Fix Claude model detection by name for API protocol selection (thanks @daniel-lxs!)
15+
- Move marketplace icon from overflow menu to top navigation
16+
- Optional setting to prevent completion with open todos
17+
- Added YouTube to website footer (thanks @thill2323!)
18+
319
## [3.23.14] - 2025-07-17
420

521
- Log api-initiated tasks to a tmp directory

apps/web-evals/scripts/check-services.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ fi
77

88
if ! nc -z localhost 5432 2>/dev/null; then
99
echo "❌ PostgreSQL is not running on port 5432"
10-
echo "💡 Start it with: pnpm --filter @roo-code/evals db:start"
10+
echo "💡 Start it with: pnpm --filter @roo-code/evals db:up"
1111
exit 1
1212
fi
1313

1414
if ! nc -z localhost 6379 2>/dev/null; then
1515
echo "❌ Redis is not running on port 6379"
16-
echo "💡 Start it with: pnpm --filter @roo-code/evals redis:start"
16+
echo "💡 Start it with: pnpm --filter @roo-code/evals redis:up"
1717
exit 1
1818
fi
1919

apps/web-evals/src/actions/runs.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ import { CreateRun } from "@/lib/schemas"
2222
const EVALS_REPO_PATH = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../../../evals")
2323

2424
// eslint-disable-next-line @typescript-eslint/no-unused-vars
25-
export async function createRun({ suite, exercises = [], systemPrompt, ...values }: CreateRun) {
25+
export async function createRun({ suite, exercises = [], systemPrompt, timeout, ...values }: CreateRun) {
2626
const run = await _createRun({
2727
...values,
28+
timeout,
2829
socketPath: "", // TODO: Get rid of this.
2930
})
3031

apps/web-evals/src/app/runs/new/new-run.tsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ import {
2121
CONCURRENCY_MIN,
2222
CONCURRENCY_MAX,
2323
CONCURRENCY_DEFAULT,
24+
TIMEOUT_MIN,
25+
TIMEOUT_MAX,
26+
TIMEOUT_DEFAULT,
2427
} from "@/lib/schemas"
2528
import { cn } from "@/lib/utils"
2629
import { useOpenRouterModels } from "@/hooks/use-open-router-models"
@@ -77,6 +80,7 @@ export function NewRun() {
7780
exercises: [],
7881
settings: undefined,
7982
concurrency: CONCURRENCY_DEFAULT,
83+
timeout: TIMEOUT_DEFAULT,
8084
},
8185
})
8286

@@ -341,6 +345,29 @@ export function NewRun() {
341345
)}
342346
/>
343347

348+
<FormField
349+
control={form.control}
350+
name="timeout"
351+
render={({ field }) => (
352+
<FormItem>
353+
<FormLabel>Timeout (Minutes)</FormLabel>
354+
<FormControl>
355+
<div className="flex flex-row items-center gap-2">
356+
<Slider
357+
defaultValue={[field.value]}
358+
min={TIMEOUT_MIN}
359+
max={TIMEOUT_MAX}
360+
step={1}
361+
onValueChange={(value) => field.onChange(value[0])}
362+
/>
363+
<div>{field.value}</div>
364+
</div>
365+
</FormControl>
366+
<FormMessage />
367+
</FormItem>
368+
)}
369+
/>
370+
344371
<FormField
345372
control={form.control}
346373
name="description"

apps/web-evals/src/lib/schemas.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ export const CONCURRENCY_MIN = 1
1212
export const CONCURRENCY_MAX = 25
1313
export const CONCURRENCY_DEFAULT = 1
1414

15+
export const TIMEOUT_MIN = 5
16+
export const TIMEOUT_MAX = 10
17+
export const TIMEOUT_DEFAULT = 5
18+
1519
export const createRunSchema = z
1620
.object({
1721
model: z.string().min(1, { message: "Model is required." }),
@@ -20,6 +24,7 @@ export const createRunSchema = z
2024
exercises: z.array(z.string()).optional(),
2125
settings: rooCodeSettingsSchema.optional(),
2226
concurrency: z.number().int().min(CONCURRENCY_MIN).max(CONCURRENCY_MAX),
27+
timeout: z.number().int().min(TIMEOUT_MIN).max(TIMEOUT_MAX),
2328
systemPrompt: z.string().optional(),
2429
})
2530
.refine((data) => data.suite === "full" || (data.exercises || []).length > 0, {

apps/web-roo-code/src/components/chromes/footer.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useState, useRef, useEffect } from "react"
44
import Link from "next/link"
55
import Image from "next/image"
66
import { ChevronDown } from "lucide-react"
7-
import { FaBluesky, FaDiscord, FaGithub, FaLinkedin, FaReddit, FaTiktok, FaXTwitter } from "react-icons/fa6"
7+
import { FaBluesky, FaDiscord, FaGithub, FaLinkedin, FaReddit, FaTiktok, FaXTwitter, FaYoutube } from "react-icons/fa6"
88

99
import { EXTERNAL_LINKS, INTERNAL_LINKS } from "@/lib/constants"
1010
import { useLogoSrc } from "@/lib/hooks/use-logo-src"
@@ -80,6 +80,14 @@ export function Footer() {
8080
<FaLinkedin className="h-6 w-6" />
8181
<span className="sr-only">LinkedIn</span>
8282
</a>
83+
<a
84+
href={EXTERNAL_LINKS.BLUESKY}
85+
target="_blank"
86+
rel="noopener noreferrer"
87+
className="text-muted-foreground transition-colors hover:text-foreground">
88+
<FaBluesky className="h-6 w-6" />
89+
<span className="sr-only">Bluesky</span>
90+
</a>
8391
<a
8492
href={EXTERNAL_LINKS.TIKTOK}
8593
target="_blank"
@@ -89,12 +97,12 @@ export function Footer() {
8997
<span className="sr-only">TikTok</span>
9098
</a>
9199
<a
92-
href={EXTERNAL_LINKS.BLUESKY}
100+
href={EXTERNAL_LINKS.YOUTUBE}
93101
target="_blank"
94102
rel="noopener noreferrer"
95103
className="text-muted-foreground transition-colors hover:text-foreground">
96-
<FaBluesky className="h-6 w-6" />
97-
<span className="sr-only">Bluesky</span>
104+
<FaYoutube className="h-6 w-6" />
105+
<span className="sr-only">YouTube</span>
98106
</a>
99107
</div>
100108
</div>

apps/web-roo-code/src/lib/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export const EXTERNAL_LINKS = {
66
LINKEDIN: "https://www.linkedin.com/company/roo-code",
77
TIKTOK: "https://www.tiktok.com/@roo.code",
88
BLUESKY: "https://bsky.app/profile/roocode.bsky.social",
9+
YOUTUBE: "https://www.youtube.com/@RooCodeYT",
910
DOCUMENTATION: "https://docs.roocode.com",
1011
CAREERS: "https://careers.roocode.com",
1112
ISSUES: "https://github.com/RooCodeInc/Roo-Code/issues",

0 commit comments

Comments
 (0)