Skip to content

Commit b9d8ac0

Browse files
committed
fix(branding): replace remaining user-facing "Roo" strings with "Zoo"
Replace user-facing product references from "Roo" to "Zoo": - Webview panel and editor tab titles - Integrated terminal names - Diff view labels - VS Code LM authorization justification - LM Studio error messages - Missing-parameter tool error (now i18n-keyed via tools:missingToolParameter[WithPath] across all 16 locales) - Webview-ui localization strings (chat, settings, prompts across all locales) Per review feedback, references to the external Roo provider/router remain untouched: the routerRemoval messages, errors.roo/info.roo i18n keys, Roo credit-balance notices, and other internal identifiers that reference the legacy Roo provider rather than our brand.
1 parent d1f3999 commit b9d8ac0

63 files changed

Lines changed: 441 additions & 288 deletions

Some content is hidden

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

src/activate/__tests__/registerCommands.spec.ts

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { Mock } from "vitest"
22
import * as vscode from "vscode"
33
import { ClineProvider } from "../../core/webview/ClineProvider"
44

5-
import { getVisibleProviderOrLog, registerCommands, setPanel } from "../registerCommands"
5+
import { getVisibleProviderOrLog, openClineInNewTab, registerCommands, setPanel } from "../registerCommands"
66

77
vi.mock("execa", () => ({
88
execa: vi.fn(),
@@ -13,8 +13,16 @@ vi.mock("vscode", () => ({
1313
QuickFix: { value: "quickfix" },
1414
RefactorRewrite: { value: "refactor.rewrite" },
1515
},
16+
Uri: {
17+
joinPath: vi.fn((_base: unknown, ..._pathSegments: string[]) => ({ path: _pathSegments.join("/") })),
18+
},
19+
ViewColumn: {
20+
Two: 2,
21+
},
1622
window: {
1723
createTextEditorDecorationType: vi.fn().mockReturnValue({ dispose: vi.fn() }),
24+
createWebviewPanel: vi.fn(),
25+
visibleTextEditors: [],
1826
},
1927
workspace: {
2028
workspaceFolders: [
@@ -367,3 +375,53 @@ describe("registerCommands handlers", () => {
367375
await handlers["zoo-code.plusButtonClicked"]()
368376
})
369377
})
378+
379+
describe("openClineInNewTab", () => {
380+
let mockOutputChannel: vscode.OutputChannel
381+
let mockContext: vscode.ExtensionContext
382+
383+
beforeEach(() => {
384+
vi.clearAllMocks()
385+
386+
mockOutputChannel = {
387+
appendLine: vi.fn(),
388+
append: vi.fn(),
389+
clear: vi.fn(),
390+
hide: vi.fn(),
391+
name: "mock",
392+
replace: vi.fn(),
393+
show: vi.fn(),
394+
dispose: vi.fn(),
395+
}
396+
397+
mockContext = {
398+
subscriptions: [],
399+
extensionUri: { path: "/mock/ext" },
400+
} as unknown as vscode.ExtensionContext
401+
402+
const mockPanel = {
403+
webview: { postMessage: vi.fn() },
404+
onDidChangeViewState: vi.fn(),
405+
onDidDispose: vi.fn(),
406+
}
407+
;(vscode.window.createWebviewPanel as Mock).mockReturnValue(mockPanel)
408+
409+
// Reset module-level panel state.
410+
setPanel(undefined, "sidebar")
411+
setPanel(undefined, "tab")
412+
})
413+
414+
it("creates a webview panel with title 'Zoo Code'", async () => {
415+
await openClineInNewTab({ context: mockContext, outputChannel: mockOutputChannel })
416+
417+
expect(vscode.window.createWebviewPanel).toHaveBeenCalledWith(
418+
"zoo-code.TabPanelProvider",
419+
"Zoo Code",
420+
expect.any(Number),
421+
expect.objectContaining({
422+
enableScripts: true,
423+
retainContextWhenHidden: true,
424+
}),
425+
)
426+
})
427+
})

src/activate/registerCommands.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ export const openClineInNewTab = async ({ context, outputChannel }: Omit<Registe
251251

252252
const targetCol = hasVisibleEditors ? Math.max(lastCol + 1, 1) : vscode.ViewColumn.Two
253253

254-
const newPanel = vscode.window.createWebviewPanel(ClineProvider.tabPanelId, "Roo Code", targetCol, {
254+
const newPanel = vscode.window.createWebviewPanel(ClineProvider.tabPanelId, "Zoo Code", targetCol, {
255255
enableScripts: true,
256256
retainContextWhenHidden: true,
257257
localResourceRoots: [context.extensionUri],

src/api/providers/lm-studio.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ export class LmStudioHandler extends BaseProvider implements SingleCompletionHan
164164
} as const
165165
} catch (error) {
166166
throw new Error(
167-
"Please check the LM Studio developer logs to debug what went wrong. You may need to load the model with a larger context length to work with Roo Code's prompts.",
167+
"Please check the LM Studio developer logs to debug what went wrong. You may need to load the model with a larger context length to work with Zoo Code's prompts.",
168168
)
169169
}
170170
}
@@ -211,7 +211,7 @@ export class LmStudioHandler extends BaseProvider implements SingleCompletionHan
211211
return response.choices[0]?.message.content || ""
212212
} catch (error) {
213213
throw new Error(
214-
"Please check the LM Studio developer logs to debug what went wrong. You may need to load the model with a larger context length to work with Roo Code's prompts.",
214+
"Please check the LM Studio developer logs to debug what went wrong. You may need to load the model with a larger context length to work with Zoo Code's prompts.",
215215
)
216216
}
217217
}

src/api/providers/vscode-lm.ts

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
9191
this.dispose()
9292

9393
throw new Error(
94-
`Roo Code <Language Model API>: Failed to initialize handler: ${error instanceof Error ? error.message : "Unknown error"}`,
94+
`Zoo Code <Language Model API>: Failed to initialize handler: ${error instanceof Error ? error.message : "Unknown error"}`,
9595
)
9696
}
9797
}
@@ -106,17 +106,17 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
106106
try {
107107
// Check if the client is already initialized
108108
if (this.client) {
109-
console.debug("Roo Code <Language Model API>: Client already initialized")
109+
console.debug("Zoo Code <Language Model API>: Client already initialized")
110110
return
111111
}
112112
// Create a new client instance
113113
this.client = await this.createClient(this.options.vsCodeLmModelSelector || {})
114-
console.debug("Roo Code <Language Model API>: Client initialized successfully")
114+
console.debug("Zoo Code <Language Model API>: Client initialized successfully")
115115
} catch (error) {
116116
// Handle errors during client initialization
117117
const errorMessage = error instanceof Error ? error.message : "Unknown error"
118-
console.error("Roo Code <Language Model API>: Client initialization failed:", errorMessage)
119-
throw new Error(`Roo Code <Language Model API>: Failed to initialize client: ${errorMessage}`)
118+
console.error("Zoo Code <Language Model API>: Client initialization failed:", errorMessage)
119+
throw new Error(`Zoo Code <Language Model API>: Failed to initialize client: ${errorMessage}`)
120120
}
121121
}
122122
/**
@@ -164,7 +164,7 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
164164
}
165165
} catch (error) {
166166
const errorMessage = error instanceof Error ? error.message : "Unknown error"
167-
throw new Error(`Roo Code <Language Model API>: Failed to select model: ${errorMessage}`)
167+
throw new Error(`Zoo Code <Language Model API>: Failed to select model: ${errorMessage}`)
168168
}
169169
}
170170

@@ -225,13 +225,13 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
225225
private async internalCountTokens(text: string | vscode.LanguageModelChatMessage): Promise<number> {
226226
// Check for required dependencies
227227
if (!this.client) {
228-
console.warn("Roo Code <Language Model API>: No client available for token counting")
228+
console.warn("Zoo Code <Language Model API>: No client available for token counting")
229229
return 0
230230
}
231231

232232
// Validate input
233233
if (!text) {
234-
console.debug("Roo Code <Language Model API>: Empty text provided for token counting")
234+
console.debug("Zoo Code <Language Model API>: Empty text provided for token counting")
235235
return 0
236236
}
237237

@@ -255,37 +255,37 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
255255
} else if (text instanceof vscode.LanguageModelChatMessage) {
256256
// For chat messages, ensure we have content
257257
if (!text.content || (Array.isArray(text.content) && text.content.length === 0)) {
258-
console.debug("Roo Code <Language Model API>: Empty chat message content")
258+
console.debug("Zoo Code <Language Model API>: Empty chat message content")
259259
return 0
260260
}
261261
const countMessage = extractTextCountFromMessage(text)
262262
tokenCount = await this.client.countTokens(countMessage, cancellationToken)
263263
} else {
264-
console.warn("Roo Code <Language Model API>: Invalid input type for token counting")
264+
console.warn("Zoo Code <Language Model API>: Invalid input type for token counting")
265265
return 0
266266
}
267267

268268
// Validate the result
269269
if (typeof tokenCount !== "number") {
270-
console.warn("Roo Code <Language Model API>: Non-numeric token count received:", tokenCount)
270+
console.warn("Zoo Code <Language Model API>: Non-numeric token count received:", tokenCount)
271271
return 0
272272
}
273273

274274
if (tokenCount < 0) {
275-
console.warn("Roo Code <Language Model API>: Negative token count received:", tokenCount)
275+
console.warn("Zoo Code <Language Model API>: Negative token count received:", tokenCount)
276276
return 0
277277
}
278278

279279
return tokenCount
280280
} catch (error) {
281281
// Handle specific error types
282282
if (error instanceof vscode.CancellationError) {
283-
console.debug("Roo Code <Language Model API>: Token counting cancelled by user")
283+
console.debug("Zoo Code <Language Model API>: Token counting cancelled by user")
284284
return 0
285285
}
286286

287287
const errorMessage = error instanceof Error ? error.message : "Unknown error"
288-
console.warn("Roo Code <Language Model API>: Token counting failed:", errorMessage)
288+
console.warn("Zoo Code <Language Model API>: Token counting failed:", errorMessage)
289289

290290
// Log additional error details if available
291291
if (error instanceof Error && error.stack) {
@@ -317,7 +317,7 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
317317

318318
private async getClient(): Promise<vscode.LanguageModelChat> {
319319
if (!this.client) {
320-
console.debug("Roo Code <Language Model API>: Getting client with options:", {
320+
console.debug("Zoo Code <Language Model API>: Getting client with options:", {
321321
vsCodeLmModelSelector: this.options.vsCodeLmModelSelector,
322322
hasOptions: !!this.options,
323323
selectorKeys: this.options.vsCodeLmModelSelector ? Object.keys(this.options.vsCodeLmModelSelector) : [],
@@ -326,12 +326,12 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
326326
try {
327327
// Use default empty selector if none provided to get all available models
328328
const selector = this.options?.vsCodeLmModelSelector || {}
329-
console.debug("Roo Code <Language Model API>: Creating client with selector:", selector)
329+
console.debug("Zoo Code <Language Model API>: Creating client with selector:", selector)
330330
this.client = await this.createClient(selector)
331331
} catch (error) {
332332
const message = error instanceof Error ? error.message : "Unknown error"
333-
console.error("Roo Code <Language Model API>: Client creation failed:", message)
334-
throw new Error(`Roo Code <Language Model API>: Failed to create client: ${message}`)
333+
console.error("Zoo Code <Language Model API>: Client creation failed:", message)
334+
throw new Error(`Zoo Code <Language Model API>: Failed to create client: ${message}`)
335335
}
336336
}
337337

@@ -395,7 +395,7 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
395395
try {
396396
// Create the response stream with required options
397397
const requestOptions: vscode.LanguageModelChatRequestOptions = {
398-
justification: `Roo Code would like to use '${client.name}' from '${client.vendor}', Click 'Allow' to proceed.`,
398+
justification: `Zoo Code would like to use '${client.name}' from '${client.vendor}', Click 'Allow' to proceed.`,
399399
tools: convertToVsCodeLmTools(metadata?.tools ?? []),
400400
}
401401

@@ -410,7 +410,7 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
410410
if (chunk instanceof vscode.LanguageModelTextPart) {
411411
// Validate text part value
412412
if (typeof chunk.value !== "string") {
413-
console.warn("Roo Code <Language Model API>: Invalid text part value received:", chunk.value)
413+
console.warn("Zoo Code <Language Model API>: Invalid text part value received:", chunk.value)
414414
continue
415415
}
416416

@@ -423,23 +423,23 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
423423
try {
424424
// Validate tool call parameters
425425
if (!chunk.name || typeof chunk.name !== "string") {
426-
console.warn("Roo Code <Language Model API>: Invalid tool name received:", chunk.name)
426+
console.warn("Zoo Code <Language Model API>: Invalid tool name received:", chunk.name)
427427
continue
428428
}
429429

430430
if (!chunk.callId || typeof chunk.callId !== "string") {
431-
console.warn("Roo Code <Language Model API>: Invalid tool callId received:", chunk.callId)
431+
console.warn("Zoo Code <Language Model API>: Invalid tool callId received:", chunk.callId)
432432
continue
433433
}
434434

435435
// Ensure input is a valid object
436436
if (!chunk.input || typeof chunk.input !== "object") {
437-
console.warn("Roo Code <Language Model API>: Invalid tool input received:", chunk.input)
437+
console.warn("Zoo Code <Language Model API>: Invalid tool input received:", chunk.input)
438438
continue
439439
}
440440

441441
// Log tool call for debugging
442-
console.debug("Roo Code <Language Model API>: Processing tool call:", {
442+
console.debug("Zoo Code <Language Model API>: Processing tool call:", {
443443
name: chunk.name,
444444
callId: chunk.callId,
445445
inputSize: JSON.stringify(chunk.input).length,
@@ -457,12 +457,12 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
457457
}
458458
}
459459
} catch (error) {
460-
console.error("Roo Code <Language Model API>: Failed to process tool call:", error)
460+
console.error("Zoo Code <Language Model API>: Failed to process tool call:", error)
461461
// Continue processing other chunks even if one fails
462462
continue
463463
}
464464
} else {
465-
console.warn("Roo Code <Language Model API>: Unknown chunk type received:", chunk)
465+
console.warn("Zoo Code <Language Model API>: Unknown chunk type received:", chunk)
466466
}
467467
}
468468

@@ -479,11 +479,11 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
479479
this.ensureCleanState()
480480

481481
if (error instanceof vscode.CancellationError) {
482-
throw new Error("Roo Code <Language Model API>: Request cancelled by user")
482+
throw new Error("Zoo Code <Language Model API>: Request cancelled by user")
483483
}
484484

485485
if (error instanceof Error) {
486-
console.error("Roo Code <Language Model API>: Stream error details:", {
486+
console.error("Zoo Code <Language Model API>: Stream error details:", {
487487
message: error.message,
488488
stack: error.stack,
489489
name: error.name,
@@ -494,13 +494,13 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
494494
} else if (typeof error === "object" && error !== null) {
495495
// Handle error-like objects
496496
const errorDetails = JSON.stringify(error, null, 2)
497-
console.error("Roo Code <Language Model API>: Stream error object:", errorDetails)
498-
throw new Error(`Roo Code <Language Model API>: Response stream error: ${errorDetails}`)
497+
console.error("Zoo Code <Language Model API>: Stream error object:", errorDetails)
498+
throw new Error(`Zoo Code <Language Model API>: Response stream error: ${errorDetails}`)
499499
} else {
500500
// Fallback for unknown error types
501501
const errorMessage = String(error)
502-
console.error("Roo Code <Language Model API>: Unknown stream error:", errorMessage)
503-
throw new Error(`Roo Code <Language Model API>: Response stream error: ${errorMessage}`)
502+
console.error("Zoo Code <Language Model API>: Unknown stream error:", errorMessage)
503+
throw new Error(`Zoo Code <Language Model API>: Response stream error: ${errorMessage}`)
504504
}
505505
}
506506
}
@@ -520,7 +520,7 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
520520
// Log any missing properties for debugging
521521
for (const [prop, value] of Object.entries(requiredProps)) {
522522
if (!value && value !== 0) {
523-
console.warn(`Roo Code <Language Model API>: Client missing ${prop} property`)
523+
console.warn(`Zoo Code <Language Model API>: Client missing ${prop} property`)
524524
}
525525
}
526526

@@ -551,7 +551,7 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
551551
? stringifyVsCodeLmModelSelector(this.options.vsCodeLmModelSelector)
552552
: "vscode-lm"
553553

554-
console.debug("Roo Code <Language Model API>: No client available, using fallback model info")
554+
console.debug("Zoo Code <Language Model API>: No client available, using fallback model info")
555555

556556
return {
557557
id: fallbackId,

src/api/transform/vscode-lm-format.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ function asObjectSafe(value: any): object {
2323

2424
return {}
2525
} catch (error) {
26-
console.warn("Roo Code <Language Model API>: Failed to parse object:", error)
26+
console.warn("Zoo Code <Language Model API>: Failed to parse object:", error)
2727
return {}
2828
}
2929
}
@@ -197,7 +197,7 @@ export function extractTextCountFromMessage(message: vscode.LanguageModelChatMes
197197
try {
198198
text += JSON.stringify(item.input)
199199
} catch (error) {
200-
console.error("Roo Code <Language Model API>: Failed to stringify tool call input:", error)
200+
console.error("Zoo Code <Language Model API>: Failed to stringify tool call input:", error)
201201
}
202202
}
203203
}

src/core/task/Task.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1811,9 +1811,13 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
18111811
async sayAndCreateMissingParamError(toolName: ToolName, paramName: string, relPath?: string) {
18121812
await this.say(
18131813
"error",
1814-
`Roo tried to use ${toolName}${
1815-
relPath ? ` for '${relPath.toPosix()}'` : ""
1816-
} without value for required parameter '${paramName}'. Retrying...`,
1814+
relPath
1815+
? t("tools:missingToolParameterWithPath", {
1816+
toolName,
1817+
relPath: relPath.toPosix(),
1818+
paramName,
1819+
})
1820+
: t("tools:missingToolParameter", { toolName, paramName }),
18171821
)
18181822
return formatResponse.toolError(formatResponse.missingToolParameterError(paramName))
18191823
}

0 commit comments

Comments
 (0)