Skip to content

Commit 05ccf57

Browse files
authored
Merge branch 'RooCodeInc:main' into main
2 parents 2c73ff2 + 356d421 commit 05ccf57

Some content is hidden

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

56 files changed

+1167
-217
lines changed

.github/workflows/nightly-publish.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
name: Nightly Publish
22

33
on:
4-
workflow_run:
5-
workflows: ["Code QA Roo Code"]
6-
types:
7-
- completed
4+
push:
85
branches: [main]
96
workflow_dispatch: # Allows manual triggering.
107

CHANGELOG.md

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

3+
## [3.23.6] - 2025-07-10
4+
5+
- Grok 4
6+
7+
## [3.23.5] - 2025-07-09
8+
9+
- Fix: use decodeURIComponent in openFile (thanks @vivekfyi!)
10+
- Fix(embeddings): Translate error messages before sending to UI (thanks @daniel-lxs!)
11+
- Make account tab visible
12+
13+
## [3.23.4] - 2025-07-09
14+
15+
- Update chat area icons for better discoverability & consistency
16+
- Fix a bug that allowed `list_files` to return directory results that should be excluded by .gitignore
17+
- Add an overflow header menu to make the UI a little tidier (thanks @dlab-anton)
18+
- Fix a bug the issue where null custom modes configuration files cause a 'Cannot read properties of null' error (thanks @daniel-lxs!)
19+
- Replace native title attributes with StandardTooltip component for consistency (thanks @daniel-lxs!)
20+
321
## [3.23.3] - 2025-07-09
422

523
- Remove erroneous line from announcement modal

packages/types/src/providers/vertex.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,9 +277,35 @@ export const vertexModels = {
277277

278278
export const VERTEX_REGIONS = [
279279
{ value: "global", label: "global" },
280-
{ value: "us-east5", label: "us-east5" },
281280
{ value: "us-central1", label: "us-central1" },
281+
{ value: "us-east1", label: "us-east1" },
282+
{ value: "us-east4", label: "us-east4" },
283+
{ value: "us-east5", label: "us-east5" },
284+
{ value: "us-west1", label: "us-west1" },
285+
{ value: "us-west2", label: "us-west2" },
286+
{ value: "us-west3", label: "us-west3" },
287+
{ value: "us-west4", label: "us-west4" },
288+
{ value: "northamerica-northeast1", label: "northamerica-northeast1" },
289+
{ value: "northamerica-northeast2", label: "northamerica-northeast2" },
290+
{ value: "southamerica-east1", label: "southamerica-east1" },
282291
{ value: "europe-west1", label: "europe-west1" },
292+
{ value: "europe-west2", label: "europe-west2" },
293+
{ value: "europe-west3", label: "europe-west3" },
283294
{ value: "europe-west4", label: "europe-west4" },
295+
{ value: "europe-west6", label: "europe-west6" },
296+
{ value: "europe-central2", label: "europe-central2" },
297+
{ value: "asia-east1", label: "asia-east1" },
298+
{ value: "asia-east2", label: "asia-east2" },
299+
{ value: "asia-northeast1", label: "asia-northeast1" },
300+
{ value: "asia-northeast2", label: "asia-northeast2" },
301+
{ value: "asia-northeast3", label: "asia-northeast3" },
302+
{ value: "asia-south1", label: "asia-south1" },
303+
{ value: "asia-south2", label: "asia-south2" },
284304
{ value: "asia-southeast1", label: "asia-southeast1" },
305+
{ value: "asia-southeast2", label: "asia-southeast2" },
306+
{ value: "australia-southeast1", label: "australia-southeast1" },
307+
{ value: "australia-southeast2", label: "australia-southeast2" },
308+
{ value: "me-west1", label: "me-west1" },
309+
{ value: "me-central1", label: "me-central1" },
310+
{ value: "africa-south1", label: "africa-south1" },
285311
]

packages/types/src/providers/xai.ts

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,19 @@ import type { ModelInfo } from "../model.js"
33
// https://docs.x.ai/docs/api-reference
44
export type XAIModelId = keyof typeof xaiModels
55

6-
export const xaiDefaultModelId: XAIModelId = "grok-3"
6+
export const xaiDefaultModelId: XAIModelId = "grok-4"
77

88
export const xaiModels = {
9-
"grok-2-1212": {
10-
maxTokens: 8192,
11-
contextWindow: 131072,
12-
supportsImages: false,
13-
supportsPromptCache: false,
14-
inputPrice: 2.0,
15-
outputPrice: 10.0,
16-
description: "xAI's Grok-2 model (version 1212) with 128K context window",
17-
},
18-
"grok-2-vision-1212": {
9+
"grok-4": {
1910
maxTokens: 8192,
20-
contextWindow: 32768,
11+
contextWindow: 256000,
2112
supportsImages: true,
22-
supportsPromptCache: false,
23-
inputPrice: 2.0,
24-
outputPrice: 10.0,
25-
description: "xAI's Grok-2 Vision model (version 1212) with image support and 32K context window",
13+
supportsPromptCache: true,
14+
inputPrice: 3.0,
15+
outputPrice: 15.0,
16+
cacheWritesPrice: 0.75,
17+
cacheReadsPrice: 0.75,
18+
description: "xAI's Grok-4 model with 256K context window",
2619
},
2720
"grok-3": {
2821
maxTokens: 8192,
@@ -70,4 +63,22 @@ export const xaiModels = {
7063
description: "xAI's Grok-3 mini fast model with 128K context window",
7164
supportsReasoningEffort: true,
7265
},
66+
"grok-2-1212": {
67+
maxTokens: 8192,
68+
contextWindow: 131072,
69+
supportsImages: false,
70+
supportsPromptCache: false,
71+
inputPrice: 2.0,
72+
outputPrice: 10.0,
73+
description: "xAI's Grok-2 model (version 1212) with 128K context window",
74+
},
75+
"grok-2-vision-1212": {
76+
maxTokens: 8192,
77+
contextWindow: 32768,
78+
supportsImages: true,
79+
supportsPromptCache: false,
80+
inputPrice: 2.0,
81+
outputPrice: 10.0,
82+
description: "xAI's Grok-2 Vision model (version 1212) with image support and 32K context window",
83+
},
7384
} as const satisfies Record<string, ModelInfo>

src/activate/registerCommands.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { registerHumanRelayCallback, unregisterHumanRelayCallback, handleHumanRe
1414
import { handleNewTask } from "./handleTask"
1515
import { CodeIndexManager } from "../services/code-index/manager"
1616
import { importSettingsWithFeedback } from "../core/config/importExport"
17+
import { MdmService } from "../services/mdm/MdmService"
1718
import { t } from "../i18n"
1819

1920
/**
@@ -226,7 +227,17 @@ export const openClineInNewTab = async ({ context, outputChannel }: Omit<Registe
226227
// https://github.com/microsoft/vscode-extension-samples/blob/main/webview-sample/src/extension.ts
227228
const contextProxy = await ContextProxy.getInstance(context)
228229
const codeIndexManager = CodeIndexManager.getInstance(context)
229-
const tabProvider = new ClineProvider(context, outputChannel, "editor", contextProxy, codeIndexManager)
230+
231+
// Get the existing MDM service instance to ensure consistent policy enforcement
232+
let mdmService: MdmService | undefined
233+
try {
234+
mdmService = MdmService.getInstance()
235+
} catch (error) {
236+
// MDM service not initialized, which is fine - extension can work without it
237+
mdmService = undefined
238+
}
239+
240+
const tabProvider = new ClineProvider(context, outputChannel, "editor", contextProxy, codeIndexManager, mdmService)
230241
const lastCol = Math.max(...vscode.window.visibleTextEditors.map((editor) => editor.viewColumn || 0))
231242

232243
// Check if there are any visible text editors, otherwise open a new group

src/core/config/CustomModesManager.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,9 @@ export class CustomModesManager {
148148
cleanedContent = this.cleanInvisibleCharacters(cleanedContent)
149149

150150
try {
151-
return yaml.parse(cleanedContent)
151+
const parsed = yaml.parse(cleanedContent)
152+
// Ensure we never return null or undefined
153+
return parsed ?? {}
152154
} catch (yamlError) {
153155
// For .roomodes files, try JSON as fallback
154156
if (filePath.endsWith(ROOMODES_FILENAME)) {
@@ -180,6 +182,12 @@ export class CustomModesManager {
180182
try {
181183
const content = await fs.readFile(filePath, "utf-8")
182184
const settings = this.parseYamlSafely(content, filePath)
185+
186+
// Ensure settings has customModes property
187+
if (!settings || typeof settings !== "object" || !settings.customModes) {
188+
return []
189+
}
190+
183191
const result = customModesSettingsSchema.safeParse(settings)
184192

185193
if (!result.success) {
@@ -458,7 +466,15 @@ export class CustomModesManager {
458466
settings = { customModes: [] }
459467
}
460468

461-
settings.customModes = operation(settings.customModes || [])
469+
// Ensure settings is an object and has customModes property
470+
if (!settings || typeof settings !== "object") {
471+
settings = { customModes: [] }
472+
}
473+
if (!settings.customModes) {
474+
settings.customModes = []
475+
}
476+
477+
settings.customModes = operation(settings.customModes)
462478
await fs.writeFile(filePath, yaml.stringify(settings, { lineWidth: 0 }), "utf-8")
463479
}
464480

src/i18n/locales/ca/common.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
"cannot_access_path": "No es pot accedir a la ruta {{path}}: {{error}}",
5959
"settings_import_failed": "Ha fallat la importació de la configuració: {{error}}.",
6060
"mistake_limit_guidance": "Això pot indicar un error en el procés de pensament del model o la incapacitat d'utilitzar una eina correctament, que es pot mitigar amb orientació de l'usuari (p. ex. \"Prova de dividir la tasca en passos més petits\").",
61-
"violated_organization_allowlist": "Ha fallat l'execució de la tasca: el perfil actual infringeix la configuració de la teva organització",
61+
"violated_organization_allowlist": "Ha fallat l'execució de la tasca: el perfil actual no és compatible amb la configuració de la teva organització",
6262
"condense_failed": "Ha fallat la condensació del context",
6363
"condense_not_enough_messages": "No hi ha prou missatges per condensar el context",
6464
"condensed_recently": "El context s'ha condensat recentment; s'omet aquest intent",

src/i18n/locales/de/common.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"cannot_access_path": "Zugriff auf Pfad {{path}} nicht möglich: {{error}}",
5555
"settings_import_failed": "Fehler beim Importieren der Einstellungen: {{error}}.",
5656
"mistake_limit_guidance": "Dies kann auf einen Fehler im Denkprozess des Modells oder die Unfähigkeit hinweisen, ein Tool richtig zu verwenden, was durch Benutzerführung behoben werden kann (z.B. \"Versuche, die Aufgabe in kleinere Schritte zu unterteilen\").",
57-
"violated_organization_allowlist": "Aufgabe konnte nicht ausgeführt werden: Das aktuelle Profil verstößt gegen die Einstellungen deiner Organisation",
57+
"violated_organization_allowlist": "Aufgabe konnte nicht ausgeführt werden: Das aktuelle Profil ist nicht kompatibel mit den Einstellungen deiner Organisation",
5858
"condense_failed": "Fehler beim Verdichten des Kontexts",
5959
"condense_not_enough_messages": "Nicht genügend Nachrichten zum Verdichten des Kontexts",
6060
"condensed_recently": "Kontext wurde kürzlich verdichtet; dieser Versuch wird übersprungen",

src/i18n/locales/en/common.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"cannot_access_path": "Cannot access path {{path}}: {{error}}",
5555
"settings_import_failed": "Settings import failed: {{error}}.",
5656
"mistake_limit_guidance": "This may indicate a failure in the model's thought process or inability to use a tool properly, which can be mitigated with some user guidance (e.g. \"Try breaking down the task into smaller steps\").",
57-
"violated_organization_allowlist": "Failed to run task: the current profile violates your organization settings",
57+
"violated_organization_allowlist": "Failed to run task: the current profile isn't compatible with your organization settings",
5858
"condense_failed": "Failed to condense context",
5959
"condense_not_enough_messages": "Not enough messages to condense context",
6060
"condensed_recently": "Context was condensed recently; skipping this attempt",

src/i18n/locales/es/common.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"cannot_access_path": "No se puede acceder a la ruta {{path}}: {{error}}",
5555
"settings_import_failed": "Error al importar la configuración: {{error}}.",
5656
"mistake_limit_guidance": "Esto puede indicar un fallo en el proceso de pensamiento del modelo o la incapacidad de usar una herramienta correctamente, lo cual puede mitigarse con orientación del usuario (ej. \"Intenta dividir la tarea en pasos más pequeños\").",
57-
"violated_organization_allowlist": "Error al ejecutar la tarea: el perfil actual infringe la configuración de tu organización",
57+
"violated_organization_allowlist": "Error al ejecutar la tarea: el perfil actual no es compatible con la configuración de tu organización",
5858
"condense_failed": "Error al condensar el contexto",
5959
"condense_not_enough_messages": "No hay suficientes mensajes para condensar el contexto",
6060
"condensed_recently": "El contexto se condensó recientemente; se omite este intento",

0 commit comments

Comments
 (0)