Skip to content

Commit 7b77d80

Browse files
committed
Merge branch 'will/edit-delete-overhaul' into will/edit-w-checkpoints
2 parents ce0c182 + 69c3996 commit 7b77d80

File tree

106 files changed

+2279
-1143
lines changed

Some content is hidden

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

106 files changed

+2279
-1143
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: 20 additions & 2 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
@@ -365,7 +383,7 @@
365383
- Fix vscode-material-icons in the filer picker
366384
- Fix global settings export
367385
- Respect user-configured terminal integration timeout (thanks @KJ7LNW)
368-
- Contex condensing enhancements (thanks @SannidhyaSah)
386+
- Context condensing enhancements (thanks @SannidhyaSah)
369387

370388
## [3.18.1] - 2025-05-22
371389

@@ -877,7 +895,7 @@
877895

878896
## [3.10.1] - 2025-03-20
879897

880-
- Make the suggested responses optional to not break overriden system prompts
898+
- Make the suggested responses optional to not break overridden system prompts
881899

882900
## [3.10.0] - 2025-03-20
883901

apps/vscode-e2e/src/suite/tools/apply-diff.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ function validateInput(input) {
224224
},
225225
text: `Use apply_diff on the file ${testFile.name} to change "Hello World" to "Hello Universe". The file already exists with this content:
226226
${testFile.content}\nAssume the file exists and you can modify it directly.`,
227-
}) //Temporary meassure since list_files ignores all the files inside a tmp workspace
227+
}) //Temporary measure since list_files ignores all the files inside a tmp workspace
228228

229229
console.log("Task ID:", taskId)
230230
console.log("Test filename:", testFile.name)

apps/web-roo-code/src/app/evals/evals.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ export function Evals({
203203
</ScatterChart>
204204
</ChartContainer>
205205
<div className="py-4 text-xs opacity-50">
206-
(Note: Very expensive models are exluded from the scatter plot.)
206+
(Note: Very expensive models are excluded from the scatter plot.)
207207
</div>
208208
</TableCaption>
209209
</Table>

packages/evals/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Start the evals service:
2929
docker compose -f packages/evals/docker-compose.yml --profile server --profile runner up --build --scale runner=0
3030
```
3131

32-
The initial build process can take a minute or two. Upon success you should see ouput indicating that a web service is running on [localhost:3000](http://localhost:3000/):
32+
The initial build process can take a minute or two. Upon success you should see output indicating that a web service is running on [localhost:3000](http://localhost:3000/):
3333
<img width="1182" alt="Screenshot 2025-06-05 at 12 05 38 PM" src="https://github.com/user-attachments/assets/34f25a59-1362-458c-aafa-25e13cdb2a7a" />
3434

3535
Additionally, you'll find in Docker Desktop that database and redis services are running:

packages/types/src/global-settings.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,6 @@ export const globalSettingsSchema = z.object({
110110
hasOpenedModeSelector: z.boolean().optional(),
111111
lastModeExportPath: z.string().optional(),
112112
lastModeImportPath: z.string().optional(),
113-
114-
// Message modification confirmation preferences
115-
skipEditMessageConfirmation: z.boolean().optional(),
116-
skipDeleteMessageConfirmation: z.boolean().optional(),
117113
})
118114

119115
export type GlobalSettings = z.infer<typeof globalSettingsSchema>

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

0 commit comments

Comments
 (0)