Skip to content

Commit fe2e124

Browse files
authored
Merge branch 'main' into feature/sap-ai-core-provider
2 parents 41d017e + 91f3dd9 commit fe2e124

Some content is hidden

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

70 files changed

+1600
-237
lines changed

.roo/rules-issue-fixer/1_Workflow.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,13 @@
273273
- [Note any technical terms or constraints]
274274

275275
Please ensure all translations maintain consistency with existing terminology and follow the project's localization guidelines.</message>
276+
<todos>
277+
[ ] Identify all user-facing strings that need translation
278+
[ ] Update i18n JSON files for all supported languages
279+
[ ] Translate any markdown documentation files
280+
[ ] Verify translations maintain consistency with existing terminology
281+
[ ] Test translations in the application context
282+
</todos>
276283
</new_task>
277284

278285
Wait for the translation task to complete before proceeding to testing.

.roo/rules-issue-fixer/2_best_practices.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@
1414
- Check for accessibility issues (for UI changes)
1515
- Delegate translation tasks to translate mode when implementing user-facing changes
1616
- Always check for hard-coded strings and internationalization needs
17+
- When using new_task to delegate work, always include a comprehensive todos list
1718
- Wait for translation completion before proceeding to final testing
1819
</best_practices>

PRIVACY.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# Roo Code Privacy Policy
22

3-
**Last Updated: June 10th, 2025**
3+
**Last Updated: August 20th, 2025**
44

55
Roo Code respects your privacy and is committed to transparency about how we handle your data. Below is a simple breakdown of where key pieces of data go—and, importantly, where they don’t.
66

77
### **Where Your Data Goes (And Where It Doesn’t)**
88

9-
- **Code & Files**: Roo Code accesses files on your local machine when needed for AI-assisted features. When you send commands to Roo Code, relevant files may be transmitted to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not have access to this data, but AI providers may store it per their privacy policies.
9+
- **Code & Files**: Roo Code accesses files on your local machine when needed for AI-assisted features. When you send commands to Roo Code, relevant files may be transmitted to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. If you select Roo Code Cloud as the model provider (proxy mode), your code may transit Roo Code servers only to forward it to the upstream provider. We do not store your code; it is deleted immediately after forwarding. Otherwise, your code is sent directly to the provider. AI providers may store data per their privacy policies.
1010
- **Commands**: Any commands executed through Roo Code happen on your local environment. However, when you use AI-powered features, the relevant code and context from your commands may be transmitted to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not have access to or store this data, but AI providers may process it per their privacy policies.
11-
- **Prompts & AI Requests**: When you use AI-powered features, your prompts and relevant project context are sent to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not store or process this data. These AI providers have their own privacy policies and may store data per their terms of service.
11+
- **Prompts & AI Requests**: When you use AI-powered features, your prompts and relevant project context are sent to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not store or process this data. These AI providers have their own privacy policies and may store data per their terms of service. If you choose Roo Code Cloud as the provider (proxy mode), prompts may transit Roo Code servers only to forward them to the upstream model and are not stored.
1212
- **API Keys & Credentials**: If you enter an API key (e.g., to connect an AI model), it is stored locally on your device and never sent to us or any third party, except the provider you have chosen.
1313
- **Telemetry (Usage Data)**: We only collect feature usage and error data if you explicitly opt-in. This telemetry is powered by PostHog and helps us understand feature usage to improve Roo Code. This includes your VS Code machine ID and feature usage patterns and exception reports. We do **not** collect personally identifiable information, your code, or AI prompts.
1414
- **Marketplace Requests**: When you browse or search the Marketplace for Model Configuration Profiles (MCPs) or Custom Modes, Roo Code makes a secure API call to Roo Code’s backend servers to retrieve listing information. These requests send only the query parameters (e.g., extension version, search term) necessary to fulfill the request and do not include your code, prompts, or personally identifiable information.

apps/web-roo-code/src/app/privacy/page.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default function Privacy() {
4646
<h1 className="text-3xl font-bold tracking-tight sm:text-4xl md:text-5xl">
4747
Roo Code Cloud Privacy Policy
4848
</h1>
49-
<p className="text-muted-foreground">Last Updated: June 19, 2025</p>
49+
<p className="text-muted-foreground">Last Updated: August 20, 2025</p>
5050

5151
<p className="lead">
5252
This Privacy Policy explains how Roo Code, Inc. (&quot;Roo Code,&quot; &quot;we,&quot;
@@ -82,9 +82,14 @@ export default function Privacy() {
8282
<h2 className="mt-12 text-2xl font-bold">Quick Summary</h2>
8383
<ul>
8484
<li>
85-
<strong>Your source code never transits Roo Code servers.</strong> It stays on your device
86-
and is sent <strong>directly</strong>—via a client‑to‑provider TLS connection—to the
87-
third‑party AI model you select. Roo Code never stores, inspects, or trains on your code.
85+
<strong>
86+
Your source code does not transit Roo Code servers unless you explicitly choose Roo Code
87+
as a model provider (proxy mode).
88+
</strong>{" "}
89+
When Roo Code Cloud is your model provider, your code briefly transits Roo Code servers only to
90+
forward it to the upstream model, is not stored, and is deleted immediately after
91+
forwarding. Otherwise, your code is sent <strong>directly</strong>—via client‑to‑provider
92+
TLS—to the model you select. Roo Code never stores, inspects, or trains on your code.
8893
</li>
8994
<li>
9095
<strong>Prompts and chat snippets are collected by default</strong> in Roo Code Cloud so you
@@ -200,10 +205,12 @@ export default function Privacy() {
200205
Code & files you work on
201206
</td>
202207
<td className="border border-border px-4 py-2">
203-
Your chosen model provider (direct client → provider TLS)
208+
Your chosen model provider (direct client → provider TLS), or Roo Code (proxy
209+
mode; transit‑only) when you select Roo Code as the provider
204210
</td>
205211
<td className="border border-border px-4 py-2">
206-
Roo Code servers; ad networks; model‑training pipelines
212+
Roo Code servers (except proxy mode; transit‑only, no storage); ad networks;
213+
model‑training pipelines
207214
</td>
208215
</tr>
209216
<tr className="bg-muted/25">

packages/types/npm/package.metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@roo-code/types",
3-
"version": "1.59.0",
3+
"version": "1.60.0",
44
"description": "TypeScript type definitions for Roo Code.",
55
"publishConfig": {
66
"access": "public",

packages/types/src/provider-settings.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
mistralModels,
1919
moonshotModels,
2020
openAiNativeModels,
21+
qwenCodeModels,
2122
rooModels,
2223
sambaNovaModels,
2324
sapAiCoreModels,
@@ -49,6 +50,7 @@ export const providerNames = [
4950
"moonshot",
5051
"deepseek",
5152
"doubao",
53+
"qwen-code",
5254
"unbound",
5355
"requesty",
5456
"human-relay",
@@ -313,6 +315,10 @@ const ioIntelligenceSchema = apiModelIdProviderModelSchema.extend({
313315
ioIntelligenceApiKey: z.string().optional(),
314316
})
315317

318+
const qwenCodeSchema = apiModelIdProviderModelSchema.extend({
319+
qwenCodeOauthPath: z.string().optional(),
320+
})
321+
316322
const rooSchema = apiModelIdProviderModelSchema.extend({
317323
// No additional fields needed - uses cloud authentication
318324
})
@@ -364,6 +370,7 @@ export const providerSettingsSchemaDiscriminated = z.discriminatedUnion("apiProv
364370
fireworksSchema.merge(z.object({ apiProvider: z.literal("fireworks") })),
365371
featherlessSchema.merge(z.object({ apiProvider: z.literal("featherless") })),
366372
ioIntelligenceSchema.merge(z.object({ apiProvider: z.literal("io-intelligence") })),
373+
qwenCodeSchema.merge(z.object({ apiProvider: z.literal("qwen-code") })),
367374
rooSchema.merge(z.object({ apiProvider: z.literal("roo") })),
368375
sapAiCoreSchema.merge(z.object({ apiProvider: z.literal("sapaicore") })),
369376
defaultSchema,
@@ -403,6 +410,7 @@ export const providerSettingsSchema = z.object({
403410
...fireworksSchema.shape,
404411
...featherlessSchema.shape,
405412
...ioIntelligenceSchema.shape,
413+
...qwenCodeSchema.shape,
406414
...rooSchema.shape,
407415
...sapAiCoreSchema.shape,
408416
...codebaseIndexProviderSchema.shape,
@@ -520,6 +528,7 @@ export const MODELS_BY_PROVIDER: Record<
520528
label: "OpenAI",
521529
models: Object.keys(openAiNativeModels),
522530
},
531+
"qwen-code": { id: "qwen-code", label: "Qwen Code", models: Object.keys(qwenCodeModels) },
523532
roo: { id: "roo", label: "Roo", models: Object.keys(rooModels) },
524533
sambanova: {
525534
id: "sambanova",

packages/types/src/providers/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export * from "./moonshot.js"
1919
export * from "./ollama.js"
2020
export * from "./openai.js"
2121
export * from "./openrouter.js"
22+
export * from "./qwen-code.js"
2223
export * from "./requesty.js"
2324
export * from "./roo.js"
2425
export * from "./sambanova.js"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import type { ModelInfo } from "../model.js"
2+
3+
export type QwenCodeModelId = "qwen3-coder-plus" | "qwen3-coder-flash"
4+
5+
export const qwenCodeDefaultModelId: QwenCodeModelId = "qwen3-coder-plus"
6+
7+
export const qwenCodeModels = {
8+
"qwen3-coder-plus": {
9+
maxTokens: 65_536,
10+
contextWindow: 1_000_000,
11+
supportsImages: false,
12+
supportsPromptCache: false,
13+
inputPrice: 0,
14+
outputPrice: 0,
15+
cacheWritesPrice: 0,
16+
cacheReadsPrice: 0,
17+
description: "Qwen3 Coder Plus - High-performance coding model with 1M context window for large codebases",
18+
},
19+
"qwen3-coder-flash": {
20+
maxTokens: 65_536,
21+
contextWindow: 1_000_000,
22+
supportsImages: false,
23+
supportsPromptCache: false,
24+
inputPrice: 0,
25+
outputPrice: 0,
26+
cacheWritesPrice: 0,
27+
cacheReadsPrice: 0,
28+
description: "Qwen3 Coder Flash - Fast coding model with 1M context window optimized for speed",
29+
},
30+
} as const satisfies Record<QwenCodeModelId, ModelInfo>

pnpm-lock.yaml

Lines changed: 11 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/__tests__/command-integration.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ describe("Command Integration Tests", () => {
1515
commands.forEach((command) => {
1616
expect(command.name).toBeDefined()
1717
expect(typeof command.name).toBe("string")
18-
expect(command.source).toMatch(/^(project|global)$/)
18+
expect(command.source).toMatch(/^(project|global|built-in)$/)
1919
expect(command.content).toBeDefined()
2020
expect(typeof command.content).toBe("string")
2121
})
@@ -43,7 +43,7 @@ describe("Command Integration Tests", () => {
4343

4444
expect(loadedCommand).toBeDefined()
4545
expect(loadedCommand?.name).toBe(firstCommand.name)
46-
expect(loadedCommand?.source).toMatch(/^(project|global)$/)
46+
expect(loadedCommand?.source).toMatch(/^(project|global|built-in)$/)
4747
expect(loadedCommand?.content).toBeDefined()
4848
expect(typeof loadedCommand?.content).toBe("string")
4949
}

0 commit comments

Comments
 (0)