Skip to content

fix(branding): replace remaining user-facing "Roo" strings with "Zoo"#343

Open
proyectoauraorg wants to merge 3 commits into
Zoo-Code-Org:mainfrom
proyectoauraorg:fix/branding-roo-to-zoo-user-strings
Open

fix(branding): replace remaining user-facing "Roo" strings with "Zoo"#343
proyectoauraorg wants to merge 3 commits into
Zoo-Code-Org:mainfrom
proyectoauraorg:fix/branding-roo-to-zoo-user-strings

Conversation

@proyectoauraorg
Copy link
Copy Markdown
Contributor

@proyectoauraorg proyectoauraorg commented May 27, 2026

What & why

Several user-visible strings still showed the upstream "Roo" brand instead of "Zoo". The most visible one was the missing-tool-parameter retry notice in chat:

Roo tried to use read_file without value for required parameter 'path'. Retrying...

That message was hardcoded in Task.ts (unlike its siblings unknownToolError / invalidJsonArgument, which are already localized to "Zoo"). The editor tab and several other surfaces had the same leftover.

Changes

  • Task.ts — the missing-parameter notice is now localized via new keys tools:missingToolParameter / tools:missingToolParameterWithPath, added and translated across all 18 locales (mirroring the existing unknownToolError pattern).
  • Titles — the editor tab title (createWebviewPanel), the webview <title>, the diff editor label (DIFF_VIEW_LABEL_CHANGES), and the integrated terminal name.
  • Commands/output — the "Cannot find any visible … instances" output-channel line.
  • Notifications — the credit-balance message and the LM Studio context-length error.
  • Router/cloud — the removal/sign-in messages in common.json (18 locales) and the fallback constants in routerRemoval.ts.

Tests updated to assert the new strings.

Intentionally not changed

To avoid breaking internals or rewriting history, these "Roo" occurrences are left as-is:

  • the legacy provider id roo and .roo* config file references;
  • i18n key paths (e.g. errors.roo.*);
  • OpenRouter X-Title attribution headers and MCP/checkpoint client names (sent to external services, not shown in the VS Code UI);
  • the deliberate fork-history announcement that references the original "Roo Code" project;
  • console/debug logs.

Note: the router/cloud group names a feature inherited-and-removed from upstream; if maintainers prefer to keep "Roo Code Router/Cloud" wording there, that group can be dropped without affecting the rest.

Verification

  • node scripts/find-missing-translations.js → ✅ all locales complete
  • tsc --noEmit on the changed files → clean
  • eslint → clean
  • vitest on the affected specs → 131 passing

Summary by CodeRabbit

  • New Features

    • Added localized retry/error messages for missing tool parameters across 18 locales.
  • Documentation

    • Updated user-facing branding from "Roo" to "Zoo" (Zoo Code, Zoo Code Cloud, Zoo Code Router) across UI copy and translations.
  • Tests

    • Updated and added tests to reflect the new branding and missing-parameter message texts.

Review Change Stack

Several user-visible strings still showed the upstream "Roo" brand instead of "Zoo":

- the missing-tool-parameter retry notice (was hardcoded in Task.ts; now
  localized via tools:missingToolParameter / missingToolParameterWithPath
  across all 18 locales, matching the existing unknownToolError pattern)
- the editor tab title and the webview <title>
- the diff editor label and the integrated terminal name
- the "no visible instances" output-channel line
- the credit-balance and LM Studio context-length error notices
- the router/cloud removal messages (common.json + routerRemoval.ts)

Internal identifiers are intentionally left unchanged: the legacy provider id
"roo", .roo* config file references, i18n key paths, OpenRouter X-Title
attribution headers, MCP/checkpoint client names, and console logs.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 27, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 0c361211-df40-4ae7-bfbf-ca7a13a9bbbe

📥 Commits

Reviewing files that changed from the base of the PR and between b91a0c1 and 3ff89a1.

📒 Files selected for processing (1)
  • src/api/providers/vscode-lm.ts
✅ Files skipped from review due to trivial changes (1)
  • src/api/providers/vscode-lm.ts

📝 Walkthrough

Walkthrough

Replaces user-facing "Roo" branding with "Zoo" across UI strings, webview titles, diff/terminal labels, router removal messages, LM provider messages, and adds localized missing-parameter messages across locales; tests updated to match.

Changes

Branding rename: Roo to Zoo

Layer / File(s) Summary
I18n contract and Task implementation
src/i18n/locales/en/tools.json, src/core/task/Task.ts
Adds missingToolParameter + missingToolParameterWithPath in English and updates Task.sayAndCreateMissingParamError to use i18n lookups with placeholders for toolName, paramName, and relPath.
Locale translations (18 languages)
src/i18n/locales/*/common.json, src/i18n/locales/*/tools.json, .changeset/*
Adds the new tools.json keys for missing-parameter retry messages and replaces Roo→Zoo branding text in each locale's common.json entries (authenticationRequired, routerRemoved, signInUnavailable). Includes the changeset metadata.
Application UI and provider messages
src/activate/registerCommands.ts, src/core/webview/ClineProvider.ts, src/integrations/editor/DiffViewProvider.ts, src/integrations/terminal/Terminal.ts, src/core/webview/webviewMessageHandler.ts, src/core/config/routerRemoval.ts, src/api/providers/lm-studio.ts, src/api/providers/vscode-lm.ts
Updates webview HMR/production titles, diff editor label, default terminal name, webview error payloads, router removal messages, LM Studio thrown error texts, and VS Code LM justification text to reference "Zoo" instead of "Roo".
Tests aligned to branding
src/activate/__tests__/*, src/core/webview/__tests__/*, src/core/config/__tests__/*, src/integrations/terminal/__tests__/TerminalRegistry.spec.ts, src/core/task/__tests__/Task.spec.ts
Test expectations and mocks updated to expect "Zoo" branding; new tests added to validate Task missing-parameter messaging and i18n usage.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • hannesrudolph
  • taltas
  • edelauna

Poem

🐰 I hopped through strings from Roo to Zoo,
Titles and tests now wear brand‑new hue,
Locales whisper "Zoo" in every tongue,
A tiny rabbit hums — the work is done,
Cheers, little paws, a change well sprung!

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description covers the 'what and why', implementation details in the 'Changes' section, and includes verification steps, but is missing the required 'Related GitHub Issue' link and test procedure from the template. Add the GitHub issue number in the 'Related GitHub Issue' section (e.g., 'Closes: #XXX') and provide explicit test procedure steps showing how reviewers can verify the changes.
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly and specifically summarizes the main change: replacing user-facing 'Roo' strings with 'Zoo' across the codebase, which is the core objective of this branding update.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

src/api/providers/vscode-lm.ts

ESLint skipped: missing config or dependency (missing-dependency). The ESLint configuration references a package that is not available in the sandbox.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 27, 2026

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/activate/registerCommands.ts 50.00% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

Exercises both relPath branches of the now-localized missing-tool-parameter
error so the changed lines in Task.ts are covered (addresses the codecov
patch-coverage gap on Zoo-Code-Org#343).
@rrewll
Copy link
Copy Markdown
Contributor

rrewll commented May 27, 2026

What do you think about it?

// 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.`,
tools: convertToVsCodeLmTools(metadata?.tools ?? []),
}

Screenshot — 2026-05-28 в 01 17 59

Copy link
Copy Markdown
Contributor

@edelauna edelauna left a comment

Choose a reason for hiding this comment

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

nice thanks for tackling there some feedback regarding legit Roo instances that should stay.

Comment on lines +417 to +418
expect(saySpy).toHaveBeenNthCalledWith(1, "error", expect.any(String))
expect(saySpy).toHaveBeenNthCalledWith(2, "error", expect.any(String))
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.

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.

Comment thread src/core/task/Task.ts
Comment on lines +1726 to +1732
relPath
? t("tools:missingToolParameterWithPath", {
toolName,
relPath: relPath.toPosix(),
paramName,
})
: t("tools:missingToolParameter", { toolName, paramName }),
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?

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

"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

"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

@proyectoauraorg
Copy link
Copy Markdown
Contributor Author

Good catch @rrewll! That's a leftover string in vscode-lm.ts:398 — the justification message still says "Roo Code". I'll add it to the PR.

Let me push a fix now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants