Skip to content

Commit 0aa57b7

Browse files
fix(branding): replace remaining user-facing "Roo" strings with "Zoo" (#343)
Rename user-facing product references from "Roo" to "Zoo": webview panel and editor-tab titles, the integrated terminal name, the diff-view label, the LM Studio context-length guidance, the VS Code LM authorization justification, and the missing-parameter tool notice (now i18n-keyed via tools:missingToolParameter[WithPath] across all locales). Per review feedback, references to the external Roo provider/router are left untouched: the routerRemoval messages, the errors.roo/info.roo i18n keys, and the Roo credit-balance notice name the legacy Roo provider, not our brand. Strengthen the sayAndCreateMissingParamError test so it asserts the resolved, interpolated notice actually names the tool and the missing parameter (the previous expect.any(String) would have passed even on a silent i18n regression).
1 parent 71db2e6 commit 0aa57b7

29 files changed

Lines changed: 117 additions & 18 deletions
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"zoo-code": patch
3+
---
4+
5+
Replace remaining user-facing "Roo" brand strings with "Zoo": the missing-tool-parameter retry notice (now localized across all locales), the editor tab and webview `<title>`, the diff editor label, the terminal name, the "no visible instances" output, and the LM Studio context-length notice. References to the external Roo provider/router are intentionally left unchanged (the `roo` provider id and `.roo*` config files, the `errors.roo`/`info.roo` localized messages, the router-removal and Roo Cloud sign-in/credit-balance notices, i18n key paths, attribution headers, and console logs).

src/activate/__tests__/registerCommands.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ describe("getVisibleProviderOrLog", () => {
114114
const result = getVisibleProviderOrLog(mockOutputChannel)
115115

116116
expect(result).toBeUndefined()
117-
expect(mockOutputChannel.appendLine).toHaveBeenCalledWith("Cannot find any visible Roo Code instances.")
117+
expect(mockOutputChannel.appendLine).toHaveBeenCalledWith("Cannot find any visible Zoo Code instances.")
118118
})
119119
})
120120

src/activate/registerCommands.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { t } from "../i18n"
2121
export function getVisibleProviderOrLog(outputChannel: vscode.OutputChannel): ClineProvider | undefined {
2222
const visibleProvider = ClineProvider.getVisibleInstance()
2323
if (!visibleProvider) {
24-
outputChannel.appendLine("Cannot find any visible Roo Code instances.")
24+
outputChannel.appendLine("Cannot find any visible Zoo Code instances.")
2525
return undefined
2626
}
2727
return visibleProvider
@@ -232,7 +232,7 @@ export const openClineInNewTab = async ({ context, outputChannel }: Omit<Registe
232232

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

235-
const newPanel = vscode.window.createWebviewPanel(ClineProvider.tabPanelId, "Roo Code", targetCol, {
235+
const newPanel = vscode.window.createWebviewPanel(ClineProvider.tabPanelId, "Zoo Code", targetCol, {
236236
enableScripts: true,
237237
retainContextWhenHidden: true,
238238
localResourceRoots: [context.extensionUri],

src/api/providers/lm-studio.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ export class LmStudioHandler extends BaseProvider implements SingleCompletionHan
165165
} as const
166166
} catch (error) {
167167
throw new Error(
168-
"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.",
168+
"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.",
169169
)
170170
}
171171
}
@@ -209,7 +209,7 @@ export class LmStudioHandler extends BaseProvider implements SingleCompletionHan
209209
return response.choices[0]?.message.content || ""
210210
} catch (error) {
211211
throw new Error(
212-
"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.",
212+
"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.",
213213
)
214214
}
215215
}

src/api/providers/vscode-lm.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

src/core/task/Task.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1723,9 +1723,13 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
17231723
async sayAndCreateMissingParamError(toolName: ToolName, paramName: string, relPath?: string) {
17241724
await this.say(
17251725
"error",
1726-
`Roo tried to use ${toolName}${
1727-
relPath ? ` for '${relPath.toPosix()}'` : ""
1728-
} without value for required parameter '${paramName}'. Retrying...`,
1726+
relPath
1727+
? t("tools:missingToolParameterWithPath", {
1728+
toolName,
1729+
relPath: relPath.toPosix(),
1730+
paramName,
1731+
})
1732+
: t("tools:missingToolParameter", { toolName, paramName }),
17291733
)
17301734
return formatResponse.toolError(formatResponse.missingToolParameterError(paramName))
17311735
}

src/core/task/__tests__/Task.spec.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,25 @@ vi.mock("../../environment/getEnvironmentDetails", () => ({
156156

157157
vi.mock("../../ignore/RooIgnoreController")
158158

159+
// i18n is not initialized in this suite, so the real t() returns the raw translation key.
160+
// Interpolate just the missing-parameter keys so tests can assert on the resolved, user-facing
161+
// copy; every other key is delegated to the real t() to keep the rest of the suite unchanged.
162+
vi.mock("../../../i18n", async (importOriginal) => {
163+
const actual = (await importOriginal()) as typeof import("../../../i18n")
164+
return {
165+
...actual,
166+
t: (key: string, args?: Record<string, unknown>) => {
167+
if (key === "tools:missingToolParameterWithPath") {
168+
return `Zoo tried to use ${args?.toolName} for '${args?.relPath}' without value for required parameter '${args?.paramName}'. Retrying...`
169+
}
170+
if (key === "tools:missingToolParameter") {
171+
return `Zoo tried to use ${args?.toolName} without value for required parameter '${args?.paramName}'. Retrying...`
172+
}
173+
return actual.t(key, args)
174+
},
175+
}
176+
})
177+
159178
vi.mock("../../condense", async (importOriginal) => {
160179
const actual = (await importOriginal()) as any
161180
return {
@@ -396,6 +415,41 @@ describe("Cline", () => {
396415
})
397416
})
398417

418+
describe("sayAndCreateMissingParamError", () => {
419+
it("surfaces a localized error notice and returns the missing-parameter tool error for both relPath branches", async () => {
420+
const cline = new Task({
421+
provider: mockProvider,
422+
apiConfiguration: mockApiConfig,
423+
task: "test task",
424+
startTask: false,
425+
})
426+
427+
const saySpy = vi.spyOn(cline, "say").mockResolvedValue(undefined)
428+
429+
// relPath provided -> the "...WithPath" message branch.
430+
const withPath = await cline.sayAndCreateMissingParamError("read_file", "path", "src/foo.ts")
431+
// relPath omitted -> the plain message branch.
432+
const withoutPath = await cline.sayAndCreateMissingParamError("execute_command", "command")
433+
434+
// Both branches emit an "error" say whose resolved text names the tool and the
435+
// missing parameter (guards against a silent i18n regression where t() would
436+
// otherwise return the raw key or an empty string and still type-check as a String).
437+
expect(saySpy).toHaveBeenCalledTimes(2)
438+
const [withPathChannel, withPathNotice] = saySpy.mock.calls[0]
439+
const [withoutPathChannel, withoutPathNotice] = saySpy.mock.calls[1]
440+
expect(withPathChannel).toBe("error")
441+
expect(withoutPathChannel).toBe("error")
442+
expect(withPathNotice).toEqual(expect.stringContaining("read_file"))
443+
expect(withPathNotice).toEqual(expect.stringContaining("path"))
444+
expect(withoutPathNotice).toEqual(expect.stringContaining("execute_command"))
445+
expect(withoutPathNotice).toEqual(expect.stringContaining("command"))
446+
447+
// The returned tool error names the missing parameter.
448+
expect(withPath).toContain("path")
449+
expect(withoutPath).toContain("command")
450+
})
451+
})
452+
399453
describe("getEnvironmentDetails", () => {
400454
describe("API conversation handling", () => {
401455
beforeEach(() => {

src/core/webview/ClineProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,7 +1177,7 @@ export class ClineProvider
11771177
window.AUDIO_BASE_URI = "${audioUri}"
11781178
window.MATERIAL_ICONS_BASE_URI = "${materialIconsUri}"
11791179
</script>
1180-
<title>Roo Code</title>
1180+
<title>Zoo Code</title>
11811181
</head>
11821182
<body>
11831183
<div id="root"></div>
@@ -1256,7 +1256,7 @@ export class ClineProvider
12561256
window.AUDIO_BASE_URI = "${audioUri}"
12571257
window.MATERIAL_ICONS_BASE_URI = "${materialIconsUri}"
12581258
</script>
1259-
<title>Roo Code</title>
1259+
<title>Zoo Code</title>
12601260
</head>
12611261
<body>
12621262
<noscript>You need to enable JavaScript to run this app.</noscript>

src/i18n/locales/ca/tools.json

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

src/i18n/locales/de/tools.json

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

0 commit comments

Comments
 (0)