Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/branding-roo-to-zoo-user-strings.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"zoo-code": patch
---

Replace remaining user-facing "Roo" brand strings with "Zoo": the missing-tool-parameter retry notice (now localized across all 18 locales), the editor tab and webview `<title>`, the diff editor label, the terminal name, the "no visible instances" output, the credit-balance and LM Studio context-length notices, and the router/cloud removal messages. Internal identifiers (provider id `roo`, `.roo*` config files, i18n key paths, attribution headers, console logs) are intentionally left unchanged.
2 changes: 1 addition & 1 deletion src/activate/__tests__/handleUri.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ describe("handleUri", () => {
expect(mockVisibleProvider.handleOpenRouterCallback).not.toHaveBeenCalled()
expect(mockVisibleProvider.handleRequestyCallback).not.toHaveBeenCalled()
expect(vscode.window.showInformationMessage).toHaveBeenCalledWith(
"Roo Code Cloud sign-in is currently unavailable. Configure another provider to continue.",
"Zoo Code Cloud sign-in is currently unavailable. Configure another provider to continue.",
)
})

Expand Down
2 changes: 1 addition & 1 deletion src/activate/__tests__/registerCommands.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ describe("getVisibleProviderOrLog", () => {
const result = getVisibleProviderOrLog(mockOutputChannel)

expect(result).toBeUndefined()
expect(mockOutputChannel.appendLine).toHaveBeenCalledWith("Cannot find any visible Roo Code instances.")
expect(mockOutputChannel.appendLine).toHaveBeenCalledWith("Cannot find any visible Zoo Code instances.")
})
})

Expand Down
4 changes: 2 additions & 2 deletions src/activate/registerCommands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { t } from "../i18n"
export function getVisibleProviderOrLog(outputChannel: vscode.OutputChannel): ClineProvider | undefined {
const visibleProvider = ClineProvider.getVisibleInstance()
if (!visibleProvider) {
outputChannel.appendLine("Cannot find any visible Roo Code instances.")
outputChannel.appendLine("Cannot find any visible Zoo Code instances.")
return undefined
}
return visibleProvider
Expand Down Expand Up @@ -232,7 +232,7 @@ export const openClineInNewTab = async ({ context, outputChannel }: Omit<Registe

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

const newPanel = vscode.window.createWebviewPanel(ClineProvider.tabPanelId, "Roo Code", targetCol, {
const newPanel = vscode.window.createWebviewPanel(ClineProvider.tabPanelId, "Zoo Code", targetCol, {
enableScripts: true,
retainContextWhenHidden: true,
localResourceRoots: [context.extensionUri],
Expand Down
4 changes: 2 additions & 2 deletions src/api/providers/lm-studio.ts
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ export class LmStudioHandler extends BaseProvider implements SingleCompletionHan
} as const
} catch (error) {
throw new Error(
"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.",
"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.",
)
}
}
Expand Down Expand Up @@ -209,7 +209,7 @@ export class LmStudioHandler extends BaseProvider implements SingleCompletionHan
return response.choices[0]?.message.content || ""
} catch (error) {
throw new Error(
"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.",
"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.",
)
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/api/providers/vscode-lm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
try {
// Create the response stream with required options
const requestOptions: vscode.LanguageModelChatRequestOptions = {
justification: `Roo Code would like to use '${client.name}' from '${client.vendor}', Click 'Allow' to proceed.`,
justification: `Zoo Code would like to use '${client.name}' from '${client.vendor}', Click 'Allow' to proceed.`,
tools: convertToVsCodeLmTools(metadata?.tools ?? []),
}

Expand Down
2 changes: 1 addition & 1 deletion src/core/config/__tests__/importExport.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -930,7 +930,7 @@ describe("importExport", () => {
})

expect(result.success).toBe(true)
expect((result as { warnings?: string[] }).warnings?.[0]).toContain("Roo Code Router was removed")
expect((result as { warnings?: string[] }).warnings?.[0]).toContain("Zoo Code Router was removed")

const importedProfiles = mockProviderSettingsManager.import.mock.calls[0][0]
expect(importedProfiles.currentApiConfigName).toBe("router-profile")
Expand Down
6 changes: 3 additions & 3 deletions src/core/config/routerRemoval.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ export const LEGACY_ROO_PROVIDER = "roo"

const ROUTER_REMOVAL_I18N_KEY = "common:errors.roo.routerRemoved"
const ROUTER_REMOVAL_DEFAULT_MESSAGE =
"Roo Code Router has been removed. Please select and configure a different provider."
"Zoo Code Router has been removed. Please select and configure a different provider."
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should stay as Roo - this whole file is referencing the old Roo router, but this should probably be i18n keyed, not sure why we'd need a default message.


const ROUTER_SIGN_IN_UNAVAILABLE_I18N_KEY = "common:info.roo.signInUnavailable"
const ROUTER_SIGN_IN_UNAVAILABLE_DEFAULT_MESSAGE =
"Roo Code Cloud sign-in is currently unavailable. Configure another provider to continue."
"Zoo Code Cloud sign-in is currently unavailable. Configure another provider to continue."

function getLocalizedMessage(key: string, defaultValue: string) {
const translated = t(key, { defaultValue })
Expand All @@ -22,7 +22,7 @@ export const getRouterUnavailableSignInMessage = () =>
getLocalizedMessage(ROUTER_SIGN_IN_UNAVAILABLE_I18N_KEY, ROUTER_SIGN_IN_UNAVAILABLE_DEFAULT_MESSAGE)

export const ROUTER_REMOVAL_IMPORT_WARNING =
"Roo Code Router was removed. The imported profile was downgraded and needs to be reconfigured."
"Zoo Code Router was removed. The imported profile was downgraded and needs to be reconfigured."

type LegacyRooConfig = Record<string, unknown> & {
apiProvider: typeof LEGACY_ROO_PROVIDER
Expand Down
10 changes: 7 additions & 3 deletions src/core/task/Task.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1723,9 +1723,13 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
async sayAndCreateMissingParamError(toolName: ToolName, paramName: string, relPath?: string) {
await this.say(
"error",
`Roo tried to use ${toolName}${
relPath ? ` for '${relPath.toPosix()}'` : ""
} without value for required parameter '${paramName}'. Retrying...`,
relPath
? t("tools:missingToolParameterWithPath", {
toolName,
relPath: relPath.toPosix(),
paramName,
})
: t("tools:missingToolParameter", { toolName, paramName }),
Comment on lines +1726 to +1732
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice - what does this render as?

)
return formatResponse.toolError(formatResponse.missingToolParameterError(paramName))
}
Expand Down
27 changes: 27 additions & 0 deletions src/core/task/__tests__/Task.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,33 @@ describe("Cline", () => {
})
})

describe("sayAndCreateMissingParamError", () => {
it("surfaces a localized error notice and returns the missing-parameter tool error for both relPath branches", async () => {
const cline = new Task({
provider: mockProvider,
apiConfiguration: mockApiConfig,
task: "test task",
startTask: false,
})

const saySpy = vi.spyOn(cline, "say").mockResolvedValue(undefined)

// relPath provided -> the "...WithPath" message branch.
const withPath = await cline.sayAndCreateMissingParamError("read_file", "path", "src/foo.ts")
// relPath omitted -> the plain message branch.
const withoutPath = await cline.sayAndCreateMissingParamError("execute_command", "command")

// Both branches emit an "error" say with localized text.
expect(saySpy).toHaveBeenCalledTimes(2)
expect(saySpy).toHaveBeenNthCalledWith(1, "error", expect.any(String))
expect(saySpy).toHaveBeenNthCalledWith(2, "error", expect.any(String))
Comment on lines +417 to +418
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could these also check that the resolved string actually contains the tool name or param name? If t() returns the key (or falls back to an empty string) in the test env, expect.any(String) still passes — so a silent i18n regression would go undetected here.


// The returned tool error names the missing parameter.
expect(withPath).toContain("path")
expect(withoutPath).toContain("command")
})
})

describe("getEnvironmentDetails", () => {
describe("API conversation handling", () => {
beforeEach(() => {
Expand Down
4 changes: 2 additions & 2 deletions src/core/webview/ClineProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1177,7 +1177,7 @@ export class ClineProvider
window.AUDIO_BASE_URI = "${audioUri}"
window.MATERIAL_ICONS_BASE_URI = "${materialIconsUri}"
</script>
<title>Roo Code</title>
<title>Zoo Code</title>
</head>
<body>
<div id="root"></div>
Expand Down Expand Up @@ -1256,7 +1256,7 @@ export class ClineProvider
window.AUDIO_BASE_URI = "${audioUri}"
window.MATERIAL_ICONS_BASE_URI = "${materialIconsUri}"
</script>
<title>Roo Code</title>
<title>Zoo Code</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ describe("webviewMessageHandler cloud auth fallbacks", () => {

expect(CloudService.instance.login).not.toHaveBeenCalled()
expect(vscode.window.showInformationMessage).toHaveBeenCalledWith(
"Roo Code Cloud sign-in is currently unavailable. Configure another provider to continue.",
"Zoo Code Cloud sign-in is currently unavailable. Configure another provider to continue.",
)
})

Expand All @@ -72,7 +72,7 @@ describe("webviewMessageHandler cloud auth fallbacks", () => {

expect(CloudService.instance.handleAuthCallback).not.toHaveBeenCalled()
expect(vscode.window.showInformationMessage).toHaveBeenCalledWith(
"Roo Code Cloud sign-in is currently unavailable. Configure another provider to continue.",
"Zoo Code Cloud sign-in is currently unavailable. Configure another provider to continue.",
)
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ describe("webviewMessageHandler - requestRouterModels provider filter", () => {
expect(mockProvider.postMessageToWebview).toHaveBeenCalledWith({
type: "singleRouterModelFetchResponse",
success: false,
error: "Roo Code Router has been removed. Please select and configure a different provider.",
error: "Zoo Code Router has been removed. Please select and configure a different provider.",
values: { provider: "roo" },
})
})
Expand Down
2 changes: 1 addition & 1 deletion src/core/webview/__tests__/webviewMessageHandler.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,7 @@ describe("webviewMessageHandler - requestRouterModels", () => {
expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({
type: "singleRouterModelFetchResponse",
success: false,
error: "Roo Code Router has been removed. Please select and configure a different provider.",
error: "Zoo Code Router has been removed. Please select and configure a different provider.",
values: { provider: "roo" },
})
})
Expand Down
2 changes: 1 addition & 1 deletion src/core/webview/webviewMessageHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1127,7 +1127,7 @@ export const webviewMessageHandler = async (
provider.postMessageToWebview({
type: "rooCreditBalance",
requestId,
values: { error: "Roo credit balance is no longer available." },
values: { error: "Zoo credit balance is no longer available." },
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leave this as Roo - wonder if this should be i18n keyed though

})
break
}
Expand Down
6 changes: 3 additions & 3 deletions src/i18n/locales/ca/common.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions src/i18n/locales/ca/tools.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions src/i18n/locales/de/common.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions src/i18n/locales/de/tools.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions src/i18n/locales/en/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@
"thinking_complete_recitation": "(Thinking complete, but output was blocked due to recitation check.)"
},
"roo": {
"authenticationRequired": "Roo provider requires cloud authentication. Please sign in to Roo Code Cloud.",
"routerRemoved": "Roo Code Router has been removed. Please select and configure a different provider."
"authenticationRequired": "Zoo provider requires cloud authentication. Please sign in to Zoo Code Cloud.",
"routerRemoved": "Zoo Code Router has been removed. Please select and configure a different provider."
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

router Removed should stay roo

},
"openAiCodex": {
"notAuthenticated": "Not authenticated with OpenAI Codex. Please sign in using the OpenAI Codex OAuth flow.",
Expand Down Expand Up @@ -164,7 +164,7 @@
"mode_exported": "Mode '{{mode}}' exported successfully",
"mode_imported": "Mode imported successfully",
"roo": {
"signInUnavailable": "Roo Code Cloud sign-in is currently unavailable. Configure another provider to continue."
"signInUnavailable": "Zoo Code Cloud sign-in is currently unavailable. Configure another provider to continue."
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same with this - this is an error message when trying to access roo as a provider

}
},
"answers": {
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/en/tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
},
"toolRepetitionLimitReached": "Zoo appears to be stuck in a loop, attempting the same action ({{toolName}}) repeatedly. This might indicate a problem with its current strategy. Consider rephrasing the task, providing more specific instructions, or guiding it towards a different approach.",
"unknownToolError": "Zoo tried to use an unknown tool: \"{{toolName}}\". Retrying...",
"missingToolParameter": "Zoo tried to use {{toolName}} without value for required parameter '{{paramName}}'. Retrying...",
"missingToolParameterWithPath": "Zoo tried to use {{toolName}} for '{{relPath}}' without value for required parameter '{{paramName}}'. Retrying...",
"codebaseSearch": {
"approval": "Searching for '{{query}}' in codebase..."
},
Expand Down
6 changes: 3 additions & 3 deletions src/i18n/locales/es/common.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions src/i18n/locales/es/tools.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions src/i18n/locales/fr/common.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading