Skip to content

Commit a9cfb2f

Browse files
mini2smrubensgithub-actions[bot]roomote-v0[bot]roomote
authored
Roo to main (#923)
* Remove the mergeToolResultText in the Roo provider for now (#10359) * Revert "fix: capture extended thinking signatures for tool use continuations" (#10360) * Release v3.38.0 (#10361) * Changeset version bump (#10362) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * fix: enforce maxConcurrentFileReads limit in read_file tool (#10363) Co-authored-by: Roo Code <roomote@roocode.com> * refactor(zgsm): optimize native protocol handling and model ID usage * docs: clarify path to Security Settings in privacy policy (#10367) Co-authored-by: Roo Code <roomote@roocode.com> * Improve error message when read_file is used on directory (#10371) Co-authored-by: Roo Code <roomote@roocode.com> * Handle custom tool use similarly to MCP tools for ipc schema purposes (#10364) * fix: correct GitHub repository URL in marketing page (#10377) Co-authored-by: Roo Code <roomote@roocode.com> * Revert "feat: enable mergeToolResultText for all OpenAI-compatible providers (#10299)" (#10381) * fix: flush pending tool results before condensing context (#10379) * chore: add changeset for v3.38.1 (#10384) * Changeset version bump (#10385) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * fix: update Cerebras maxTokens to 16384 (#10387) * docs: Replace Todo Lists video with Context Management video (#10375) Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local> * Release: v1.96.0 (#10395) chore: bump version to v1.96.0 * fix(utils): add optional chaining for provider settings * feat(skills): align with Agent Skills spec (#10409) * chore: remove human-relay provider (#10388) Co-authored-by: Roo Code <roomote@roocode.com> * Fix rate limit wait display (#10389) Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * fix: prevent write_to_file from creating files at truncated paths (#10415) Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com> Co-authored-by: Roo Code <roomote@roocode.com> * Release v3.38.2 (#10416) * Changeset version bump (#10417) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * fix(claude-code): stop frequent sign-ins by hardening OAuth refresh (#10410) * fix(claude-code): prevent sign-outs on oauth refresh * test(claude-code): restore fetch after mocking * refactor(claude-code): replace while(true) with bounded for loop for clarity --------- Co-authored-by: Roo Code <roomote@roocode.com> * fix: add type check for lastMessage.text in TTS useEffect (#10431) fix: add type check for lastMessage.text before calling startsWith Fixes #10430 The TTS useEffect was calling .startsWith() on lastMessage.text after only checking if it was truthy. If text was a non-string truthy value (array, object, or number), this would crash with "Q.text.startsWith is not a function". Changed the truthy check to an explicit type check: typeof lastMessage.text === "string" Co-authored-by: Roo Code <roomote@roocode.com> * feat(chat): add collapsible markdown blocks and improve protocol error handling * refactor(task): restructure conversation history handling * feat: recursively load .roo/rules and AGENTS.md from subdirectories (#10446) Co-authored-by: Roo Code <roomote@roocode.com> * Release: v1.99.0 (#10447) * fix: add maxConcurrentFileReads limit to native read_file tool schema (#10449) Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * chore: add changeset for v3.38.3 (#10450) * Changeset version bump (#10451) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * feat: add image support documentation to read_file native tool description (#10442) Co-authored-by: Roo Code <roomote@roocode.com> * fix: add explicit deduplication for duplicate tool_result blocks (#10466) Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com> * VSCode shim + basic cli (#10452) Co-authored-by: Roo Code <roomote@roocode.com> * Add an option to use our cli for evals (#10456) Co-authored-by: Roo Code <roomote@roocode.com> * fix: preserve tool_use blocks for all tool_results in kept messages during condensation (#10471) * fix: add additionalProperties: false to MCP tool schemas for OpenAI Responses API (#10472) * feat(cli): add zgsm provider support * Add a cli installer (#10474) Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * feat(zgsm): add debug mode and fix tool name handling * feat(i18n): add debug status to custom config label * refactor: improve terminal encoding handling and UI styling * feat(ui): add automatically focus option for chat input * feat(proxy): add debug-mode proxy routing (#10467) * feat(terminal): enhance compilation markers and output handling * fix: prevent duplicate tool_result blocks causing API errors (#10497) * feat: add Kimi K2 thinking model to Fireworks AI provider (#9202) Co-authored-by: Roo Code <roomote@roocode.com> * fix: add missing description fields for debugProxy configuration (#10505) Co-authored-by: Roo Code <roomote@roocode.com> * Tweak the style of the follow up suggestion modes (#9260) * feat(web-evals): remember last Roo model selection + add evals skill (#10470) * feat(web-evals): remember last Roo model selection * fix(web-evals): reset model selections on provider switch and fix lint warning - Add useEffect to reset model selections when switching between providers This prevents OpenRouter model IDs from persisting when switching to Roo, which was causing Roo's stored selection to be overwritten with wrong IDs - Remove unused 'executionMethod' from onSubmit dependency array to fix react-hooks/exhaustive-deps warning * fix(web-evals): add missing executionMethod to test cases * fix(web-evals): harden localStorage + keep provider selections * feat: rename YOLO to BRRR (#10507) Co-authored-by: Roo Code <roomote@roocode.com> * feat: implement sticky provider profile for task-level API config persistence (#10018) * feat(settings): move CHAT_SEARCH from experimental to UI settings * fix: remove legacy Claude 2 series models from Bedrock provider (#10501) Co-authored-by: Roo Code <roomote@roocode.com> * feat: add support for image file @mentions (#10189) Co-authored-by: Roo Code <roomote@roocode.com> * fix: handle PowerShell ENOENT error in os-name on Windows (#9897) Co-authored-by: Roo Code <roomote@roocode.com> * feat: add xhigh reasoning effort to OpenAI compatible endpoints (#10061) Co-authored-by: Roo Code <roomote@roocode.com> * feat: filter @ mention file search results using .rooignore (#10174) * feat: filter @ mention file search results using .rooignore - Modify searchFiles case in webviewMessageHandler.ts to filter results using RooIgnoreController - Use existing RooIgnoreController from current task if available, otherwise create a temporary one - Respect showRooIgnoredFiles setting to allow users to toggle this behavior - Add comprehensive test coverage for the new filtering behavior Fixes #10169 * fix: dispose temporary RooIgnoreController to prevent resource leak Addresses Rooviewer feedback: the temporary RooIgnoreController created when no task exists was never disposed, causing file watchers to accumulate. Changes: - Track temporary controller separately with tempController variable - Wrap filtering logic in try/finally block - Call dispose() in finally block to ensure cleanup - Add test cases to verify dispose is called for temp controllers - Verify task's controller is NOT disposed (only temp ones) --------- Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: Hannes Rudolph <hrudolph@gmail.com> * fix: use task stored API config as fallback for rate limit (#10266) Co-authored-by: Roo Code <roomote@roocode.com> * fix: make command chaining examples shell-aware for Windows compatibility (#10434) * fix: make command chaining examples shell-aware for Windows compatibility Addresses Issue #10352 where Roo Code generates Unix-style command chaining (&&) even on Windows systems using PowerShell or cmd.exe. Changes: - Add getCommandChainOperator() to detect the user shell and return the appropriate command chaining syntax: - Unix shells (bash, zsh, etc.): && - PowerShell: ; - cmd.exe: & - Update getRulesSection() to use shell-specific chaining in examples - Add informative note for non-Unix shells about different syntaxes - Add comprehensive tests for shell detection and command chaining * feat: add Unix utility guidance for Windows shells Addresses feedback from issue #10352 about sed and other Unix-specific utilities being suggested on Windows. The system prompt now includes guidance for PowerShell and cmd.exe users to use native alternatives: PowerShell: - Select-String instead of grep - Get-Content instead of cat - Remove-Item instead of rm - Copy-Item instead of cp - Move-Item instead of mv - -replace operator or [regex] instead of sed cmd.exe: - type instead of cat - del instead of rm - copy instead of cp - move instead of mv - find/findstr instead of grep * Apply suggestion from @roomote[bot] Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> * fix: use && for cmd.exe to preserve conditional execution semantics - Update getCommandChainOperator() to return && for cmd.exe (already done) - Update getCommandChainNote() to document && instead of & for cmd.exe - Update JSDoc to reflect cmd.exe uses && for conditional execution - Update tests to expect && for cmd.exe cmd.exe supports && for conditional execution (run next command only if previous succeeds), which provides the same semantics as Unix shells. * fix: update PowerShell note to use && for cmd.exe reference --------- Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: Hannes Rudolph <hrudolph@gmail.com> Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> * feat(types): add zai-glm-4.7 to Cerebras models (#10500) Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * 🐛 Fix glitchy kangaroo bounce animation on welcome screen (#10035) The kangaroo logo on the welcome screen had a visual glitch where it would instantly jump to the top position when hovering, instead of smoothly starting the bounce from its resting position. Changes: - Added custom smooth-bounce keyframe animation in index.css that explicitly starts from translateY(0) - Updated RooHero component to use hover state tracking with the new animation - Removed Tailwind's animate-bounce class which was causing the glitch The animation now smoothly bounces from the resting position without any jarring visual jumps. * Release v3.39.0 (#10537) * feat: Change "Get Started" button label to "Create Roo Account" (#10543) Co-authored-by: Roo Code <roomote@roocode.com> * fix: add @roo-code/cli to changeset ignore list (#10545) * Changeset version bump (#10546) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * Update changelog for version 3.39.0 release * fix: change minItems from 2 to 1 for Anthropic API compatibility (#10551) * fix: disable Gemini thought signature persistence to prevent corrupted signature errors (#10554) * fix: stabilize file paths during native tool call streaming (#10555) * Release v3.39.1 (#10557) * Changeset version bump (#10558) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * chore(cli): change default model to anthropic/claude-opus-4.5 (#10544) * fix: ensure assistant message content is never undefined for Gemini compatibility (#10559) * Update Terms of Service (effective January 9, 2026) (#10568) Co-authored-by: Roo Code <roomote@roocode.com> * fix(vscode-lm): order text parts before tool calls in assistant messages (#10573) * fix: merge approval feedback into tool result instead of pushing duplicate (ROO-410) (#10519) * feat: improve error messaging for stream termination errors from provider (#10548) * fix(openai): remove convertToSimpleMessages to fix tool calling for OpenAI-compatible providers (#10575) * Move more types to @roo-code/types (for the cli) (#10583) * Add some functionality to @roo-code/core for the cli (#10584) * Add some slash commands that are useful for cli development (#10586) * feat: add debug setting to settings page (#10580) * feat: add debug mode toggle to settings * Update About component with debug mode description * i18n: add debug mode strings to settings locales * Update debug mode description in all locales * fix: post state to webview after debugSetting update This addresses the review feedback that the debugSetting handler was not posting updated state back to the webview, which could cause the UI to stay stale until another state refresh occurred. * fix: clarify debug mode description to specify task header location Updated debugMode.description across all 18 locales to clarify that debug buttons appear in the task header, per review feedback. * fix: remove redundant postStateToWebview call after debug setting update * Update src/core/webview/webviewMessageHandler.ts Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> --------- Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> * fix: round-trip Gemini thought signatures for tool calls (#10590) * fix: make edit_file matching more resilient (#10585) * chore(gemini): stop overriding tool allow/deny lists (#10592) * fix(cerebras): ensure all tools have consistent strict mode values (#10589) Co-authored-by: Roo Code <roomote@roocode.com> * chore: disable edit_file tool for Gemini/Vertex (#10594) * Release v3.39.2 (#10595) * Changeset version bump (#10596) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * Add a TUI (#10480) Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com> * Allow the cli release script to install locally for testing (#10597) * feat(ipc): add retry mechanism and error handling * More file organization for the cli (#10599) * refactor: rename roo-cli to cos-cli and update related references * Some cleanup in ExtensionHost (#10600) Co-authored-by: Roo Code <roomote@roocode.com> * refactor: optimize response rendering and tool call handling * Rename Roo Code Cloud Provider to Roo Code Router (#10560) Co-authored-by: Roo Code <roomote@roocode.com> * chore: bump version to v1.102.0 (#10604) * Update router name in types (#10605) * Update Roo Code Router service name (#10607) * chore: add changeset for v3.39.3 (#10608) * Update router name in types (#10610) * Changeset version bump (#10609) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * feat: add debug mode configuration and state management * fix(settings): add debug condition for ZgsmAI custom config * Basic settings search (#10619) * Prototype of a simpler searchable settings * Fix tests * UI improvements * Input tweaks * Update webview-ui/src/components/settings/SettingsSearch.tsx Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> * fix: remove duplicate Escape key handler dead code * Cleanup * Fix tests --------- Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> Co-authored-by: Roo Code <roomote@roocode.com> * ux: UI improvements to search settings (#10633) * UI changs * Update webview-ui/src/components/marketplace/MarketplaceView.tsx Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> * i18n --------- Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> * feat: display edit_file errors in UI after consecutive failures (#10581) * feat(chat): enhance reasoning block with animated thinking indicator and varied messages * perf: optimize message block cloning in presentAssistantMessage (#10616) * feat(chat): add random loading messages with localization * fix: correct Gemini 3 thought signature injection format via OpenRouter (#10640) * fix: encode hyphens in MCP tool names before sanitization (#10644) * fix: sanitize tool_use IDs to match API validation pattern (#10649) * fix(path): return empty string from getReadablePath when path is empty - ROO-437 (#10638) * ux: Standard stop button 🟥 (#10639) Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> * fix: omit parallel_tool_calls when not explicitly enabled (COM-406) (#10671) * fix: use placeholder for empty tool result content to fix Gemini API validation (#10672) * ux: Further improve error display (#10692) * Ensures error details are shown for all errors (except diff, which has its own case) * More details * litellm is a proxy * ux: improve stop button visibility and streamline error handling (#10696) * Restores the send button in the message edit mode * Makes the stop button more prominent * fix: clear approval buttons when API request starts (ROO-526) (#10702) * chore: add changeset for v3.40.0 (#10705) * Changeset version bump (#10706) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * feat(gemini): add allowedFunctionNames support to prevent mode switch errors (#10708) Co-authored-by: Roo Code <roomote@roocode.com> * Release v3.40.1 (#10713) * Changeset version bump (#10714) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * Release: v1.105.0 (#10722) * feat(providers): add gpt-5.2-codex model to openai-native provider (#10731) * feat(e2e): Enable E2E tests - 39 passing tests (#10720) Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> * Clear terminal output buffers to prevent memory leaks (#7666) * feat: add OpenAI Codex provider with OAuth subscription authentication (#10736) Co-authored-by: Roo Code <roomote@roocode.com> * fix(litellm): inject dummy thought signatures on ALL tool calls for Gemini (#10743) * fix(e2e): add alwaysAllow config for MCP time server tools (#10733) * Release v3.41.0 (#10746) * Changeset version bump (#10747) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * feat: clarify Slack and Linear are Cloud Team only features (#10748) Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * Release: v1.106.0 (#10749) * refactor(chat): replace current task display with last user feedback * style(chat): adjust feedback text width calculation * fix: handle missing tool identity in OpenAI Native streams (#10719) * Feat/issue 5376 aggregate subtask costs (#10757) * feat(chat): add streaming state to task header interaction * feat: add settings tab titles to search index (#10761) Co-authored-by: Roo Code <roomote@roocode.com> * fix: filter Ollama models without native tool support (#10735) * fix: filter out empty text blocks from user messages for Gemini compatibility (#10728) * fix: flatten top-level anyOf/oneOf/allOf in MCP tool schemas (#10726) * fix: prevent duplicate tool_use IDs causing API 400 errors (#10760) * fix: truncate call_id to 64 chars for OpenAI Responses API (#10763) * fix: Gemini thought signature validation errors (#10694) Co-authored-by: Roo Code <roomote@roocode.com> * Release v3.41.1 (#10767) * Changeset version bump (#10768) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * feat: add button to open markdown in VSCode preview (#10773) Co-authored-by: Roo Code <roomote@roocode.com> * fix(openai-codex): reset invalid model selection (#10777) * fix: add openai-codex to providers that don't require API key (#10786) Co-authored-by: Roo Code <roomote@roocode.com> * fix(litellm): detect Gemini models with space-separated names for thought signature injection (#10787) * Release v3.41.2 (#10788) * Changeset version bump (#10790) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * Roo Code Router fixes for the cli (#10789) Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> * Revert "feat(e2e): Enable E2E tests - 39 passing tests" (#10794) Co-authored-by: Hannes Rudolph <hrudolph@gmail.com> * Claude-like cli flags, auth fixes (#10797) Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> Co-authored-by: Roo Code <roomote@roocode.com> * Release cli v0.0.47 (#10798) * Use a redirect instead of a fetch for cli auth (#10799) * chore(cli): prepare release v0.0.48 (#10800) * Fix thinking block word-breaking to prevent horizontal scroll (#10806) Co-authored-by: Roo Code <roomote@roocode.com> * chore: add changeset for v3.41.3 (#10822) * Removal of glm4 6 (#10815) Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * Changeset version bump (#10823) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> * feat: warn users when too many MCP tools are enabled (#10772) * feat: warn users when too many MCP tools are enabled - Add WarningRow component for displaying generic warnings with icon, title, message, and optional docs link - Add TooManyToolsWarning component that shows when users have more than 40 MCP tools enabled - Add MAX_MCP_TOOLS_THRESHOLD constant (40) - Add i18n translations for the warning message - Integrate warning into ChatView to display after task header - Add comprehensive tests for both components Closes ROO-542 * Moves constant to the right place * Move it to the backend * i18n * Add actionlink that takes you to MCP settings in this case * Add to MCP settings too * Bump max tools up to 60 since github itself has 50+ * DRY * Fix test --------- Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: Bruno Bergher <bruno@roocode.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> --------- Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: John Richmond <5629+jr@users.noreply.github.com> Co-authored-by: Hannes Rudolph <hrudolph@gmail.com> Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com> Co-authored-by: Seb Duerr <sebastian.duerr@cerebras.net> Co-authored-by: SannidhyaSah <sah_sannidhya@outlook.com> Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local> Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com> Co-authored-by: Chris Estreich <cestreich@gmail.com> Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> Co-authored-by: Danny Ricciotti <dan.ricciotti@gmail.com> Co-authored-by: Bruno Bergher <bruno@roocode.com> Co-authored-by: Archimedes <84040360+ArchimedesCrypto@users.noreply.github.com> Co-authored-by: Patrick Decat <pdecat@gmail.com> Co-authored-by: T <taltas@users.noreply.github.com>
1 parent 31448ba commit a9cfb2f

25 files changed

Lines changed: 820 additions & 47 deletions

File tree

apps/cli/README.md

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ curl -fsSL https://raw.githubusercontent.com/RooCodeInc/Roo-Code/main/apps/cli/i
4444
### Uninstalling
4545

4646
```bash
47-
rm -rf ~/.roo/cli ~/.local/bin/roo
47+
rm -rf ~/.roo/cli ~/.local/bin/cos
4848
```
4949

5050
### Development Installation
@@ -71,13 +71,13 @@ By default, the CLI prompts for approval before executing actions:
7171
```bash
7272
export OPENROUTER_API_KEY=sk-or-v1-...
7373

74-
roo ~/Documents/my-project -P "What is this project?"
74+
cos ~/Documents/my-project -P "What is this project?"
7575
```
7676

7777
You can also run without a prompt and enter it interactively in TUI mode:
7878

7979
```bash
80-
roo ~/Documents/my-project
80+
cos ~/Documents/my-project
8181
```
8282

8383
In interactive mode:
@@ -92,7 +92,7 @@ In interactive mode:
9292
For automation and scripts, use `-y` to auto-approve all actions:
9393

9494
```bash
95-
roo ~/Documents/my-project -y -P "Refactor the utils.ts file"
95+
cos ~/Documents/my-project -y -P "Refactor the utils.ts file"
9696
```
9797

9898
In non-interactive mode:
@@ -107,20 +107,20 @@ To use Roo Code Cloud features (like the provider proxy), you need to authentica
107107

108108
```bash
109109
# Log in to Roo Code Cloud (opens browser)
110-
roo auth login
110+
cos auth login
111111

112112
# Check authentication status
113-
roo auth status
113+
cos auth status
114114

115115
# Log out
116-
roo auth logout
116+
cos auth logout
117117
```
118118

119119
The `auth login` command:
120120

121121
1. Opens your browser to authenticate with Roo Code Cloud
122122
2. Receives a secure token via localhost callback
123-
3. Stores the token in `~/.config/roo/credentials.json`
123+
3. Stores the token in `~/.config/cos/credentials.json`
124124

125125
Tokens are valid for 90 days. The CLI will prompt you to re-authenticate when your token expires.
126126

@@ -167,16 +167,17 @@ Tokens are valid for 90 days. The CLI will prompt you to re-authenticate when yo
167167

168168
| Command | Description |
169169
| ----------------- | ---------------------------------- |
170-
| `roo auth login` | Authenticate with Roo Code Cloud |
171-
| `roo auth logout` | Clear stored authentication token |
172-
| `roo auth status` | Show current authentication status |
170+
| `cos auth login` | Authenticate with Roo Code Cloud |
171+
| `cos auth logout` | Clear stored authentication token |
172+
| `cos auth status` | Show current authentication status |
173173

174174
## Environment Variables
175175

176176
The CLI will look for API keys in environment variables if not provided via `--api-key`:
177177

178178
| Provider | Environment Variable |
179179
| ------------- | -------------------- |
180+
| zgsm | `COSTRICT_API_KEY` |
180181
| anthropic | `ANTHROPIC_API_KEY` |
181182
| openai | `OPENAI_API_KEY` |
182183
| openrouter | `OPENROUTER_API_KEY` |
@@ -248,7 +249,7 @@ pnpm lint
248249
To create a new release, execute the /cli-release slash command:
249250

250251
```bash
251-
roo ~/Documents/Roo-Code -P "/cli-release" -y
252+
cos ~/Documents/Roo-Code -P "/cli-release" -y
252253
```
253254

254255
The workflow will:

apps/cli/install.sh

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ Available at: https://github.com/$REPO/releases"
194194
fi
195195

196196
# Make executable
197-
chmod +x "$INSTALL_DIR/bin/roo"
197+
chmod +x "$INSTALL_DIR/bin/cos"
198198

199199
# Also make ripgrep executable if it exists
200200
if [ -f "$INSTALL_DIR/bin/rg" ]; then
@@ -207,12 +207,12 @@ setup_bin() {
207207
mkdir -p "$BIN_DIR"
208208

209209
# Remove old symlink if exists
210-
if [ -L "$BIN_DIR/roo" ] || [ -f "$BIN_DIR/roo" ]; then
211-
rm -f "$BIN_DIR/roo"
210+
if [ -L "$BIN_DIR/cos" ] || [ -f "$BIN_DIR/cos" ]; then
211+
rm -f "$BIN_DIR/cos"
212212
fi
213213

214-
ln -sf "$INSTALL_DIR/bin/roo" "$BIN_DIR/roo"
215-
info "Created symlink: $BIN_DIR/roo"
214+
ln -sf "$INSTALL_DIR/bin/cos" "$BIN_DIR/cos"
215+
info "Created symlink: $BIN_DIR/cos"
216216
}
217217

218218
# Check if bin dir is in PATH and provide instructions
@@ -257,10 +257,10 @@ check_path() {
257257

258258
# Verify installation
259259
verify_install() {
260-
if [ -x "$BIN_DIR/roo" ]; then
260+
if [ -x "$BIN_DIR/cos" ]; then
261261
info "Verifying installation..."
262262
# Just check if it runs without error
263-
"$BIN_DIR/roo" --version >/dev/null 2>&1 || true
263+
"$BIN_DIR/cos" --version >/dev/null 2>&1 || true
264264
fi
265265
}
266266

@@ -270,15 +270,15 @@ print_success() {
270270
printf "${GREEN}${BOLD}✓ Roo Code CLI installed successfully!${NC}\n"
271271
echo ""
272272
echo " Installation: $INSTALL_DIR"
273-
echo " Binary: $BIN_DIR/roo"
273+
echo " Binary: $BIN_DIR/cos"
274274
echo " Version: $VERSION"
275275
echo ""
276276
echo " ${BOLD}Get started:${NC}"
277-
echo " roo --help"
277+
echo " cos --help"
278278
echo ""
279279
echo " ${BOLD}Example:${NC}"
280280
echo " export OPENROUTER_API_KEY=sk-or-v1-..."
281-
echo " roo ~/my-project -P \"What is this project?\""
281+
echo " cos ~/my-project -P \"What is this project?\""
282282
echo ""
283283
}
284284

apps/cli/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
"type": "module",
77
"main": "dist/index.js",
88
"bin": {
9-
"roo": "dist/index.js"
9+
"cos": "dist/index.js"
1010
},
1111
"scripts": {
1212
"format": "prettier --write 'src/**/*.ts'",
1313
"lint": "eslint src --ext .ts --max-warnings=0",
1414
"check-types": "tsc --noEmit",
1515
"test": "vitest run",
1616
"build": "tsup",
17-
"build:extension": "pnpm --filter roo-cline bundle",
18-
"build:all": "pnpm --filter roo-cline bundle && tsup",
17+
"build:extension": "pnpm --filter zgsm bundle",
18+
"build:all": "pnpm --filter zgsm bundle && tsup",
1919
"dev": "tsup --watch",
2020
"start": "ROO_AUTH_BASE_URL=http://localhost:3000 ROO_SDK_BASE_URL=http://localhost:3001 ROO_CODE_PROVIDER_URL=http://localhost:8080/proxy node dist/index.js",
2121
"start:production": "node dist/index.js",

apps/cli/src/agent/extension-host.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ export interface ExtensionHostOptions {
5555
provider: SupportedProvider
5656
apiKey?: string
5757
model: string
58+
zgsmAccessToken?: string
59+
zgsmModelId?: string
5860
workspacePath: string
5961
extensionPath: string
6062
nonInteractive?: boolean
@@ -151,9 +153,9 @@ export class ExtensionHost extends EventEmitter implements ExtensionHostInterfac
151153

152154
constructor(options: ExtensionHostOptions) {
153155
super()
154-
155156
this.options = options
156157
this.options.integrationTest = true
158+
const isZgsm = this?.options?.provider === "zgsm"
157159

158160
// Initialize client - single source of truth for agent state (including mode).
159161
this.client = new ExtensionClient({
@@ -190,7 +192,11 @@ export class ExtensionHost extends EventEmitter implements ExtensionHostInterfac
190192
commandExecutionTimeout: 30,
191193
browserToolEnabled: false,
192194
enableCheckpoints: false,
193-
...getProviderSettings(this.options.provider, this.options.apiKey, this.options.model),
195+
...getProviderSettings(
196+
this.options.provider,
197+
isZgsm ? this.options.zgsmAccessToken : this.options.apiKey,
198+
isZgsm ? this.options.zgsmModelId : this.options.model,
199+
),
194200
}
195201

196202
this.initialSettings = this.options.nonInteractive

apps/cli/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { run, login, logout, status } from "@/commands/index.js"
77
const program = new Command()
88

99
program
10-
.name("roo")
10+
.name("cos")
1111
.description("Roo Code CLI - starts an interactive session by default, use -p/--print for non-interactive output")
1212
.version(VERSION)
1313

@@ -20,7 +20,7 @@ program
2020
.option("-d, --debug", "Enable debug output (includes detailed debug information)", false)
2121
.option("-y, --yes, --dangerously-skip-permissions", "Auto-approve all prompts (use with caution)", false)
2222
.option("-k, --api-key <key>", "API key for the LLM provider")
23-
.option("--provider <provider>", "API provider (roo, anthropic, openai, openrouter, etc.)")
23+
.option("--provider <provider>", "API provider (cos, anthropic, openai, openrouter, etc.)")
2424
.option("-m, --model <model>", "Model to use", DEFAULT_FLAGS.model)
2525
.option("--mode <mode>", "Mode to start in (code, architect, ask, debug, etc.)", DEFAULT_FLAGS.mode)
2626
.option(

apps/cli/src/lib/utils/provider.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ export function getProviderSettings(
2929
const config: RooCodeSettings = { apiProvider: provider }
3030

3131
switch (provider) {
32+
case "zgsm":
33+
if (apiKey) config.zgsmAccessToken = apiKey
34+
if (model) config.zgsmModelId = model
35+
break
3236
case "anthropic":
3337
if (apiKey) config.apiKey = apiKey
3438
if (model) config.apiModelId = model

packages/types/src/mcp.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { z } from "zod"
22

3+
/**
4+
* Maximum number of MCP tools that can be enabled before showing a warning.
5+
* LLMs tend to perform poorly when given too many tools to choose from.
6+
*/
7+
export const MAX_MCP_TOOLS_THRESHOLD = 60
8+
39
/**
410
* McpServerUse
511
*/
@@ -136,3 +142,53 @@ export type McpErrorEntry = {
136142
timestamp: number
137143
level: "error" | "warn" | "info"
138144
}
145+
146+
/**
147+
* Result of counting enabled MCP tools across servers.
148+
*/
149+
export interface EnabledMcpToolsCount {
150+
/** Number of enabled and connected MCP servers */
151+
enabledServerCount: number
152+
/** Total number of enabled tools across all enabled servers */
153+
enabledToolCount: number
154+
}
155+
156+
/**
157+
* Count the number of enabled MCP tools across all enabled and connected servers.
158+
* This is a pure function that can be used in both backend and frontend contexts.
159+
*
160+
* @param servers - Array of MCP server objects
161+
* @returns Object with enabledToolCount and enabledServerCount
162+
*
163+
* @example
164+
* const { enabledToolCount, enabledServerCount } = countEnabledMcpTools(mcpServers)
165+
* if (enabledToolCount > MAX_MCP_TOOLS_THRESHOLD) {
166+
* // Show warning
167+
* }
168+
*/
169+
export function countEnabledMcpTools(servers: McpServer[]): EnabledMcpToolsCount {
170+
let serverCount = 0
171+
let toolCount = 0
172+
173+
for (const server of servers) {
174+
// Skip disabled servers
175+
if (server.disabled) continue
176+
177+
// Skip servers that are not connected
178+
if (server.status !== "connected") continue
179+
180+
serverCount++
181+
182+
// Count enabled tools on this server
183+
if (server.tools) {
184+
for (const tool of server.tools) {
185+
// Tool is enabled if enabledForPrompt is undefined (default) or true
186+
if (tool.enabledForPrompt !== false) {
187+
toolCount++
188+
}
189+
}
190+
}
191+
}
192+
193+
return { enabledToolCount: toolCount, enabledServerCount: serverCount }
194+
}

packages/types/src/message.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ export function isNonBlockingAsk(ask: ClineAsk): ask is NonBlockingAsk {
151151
* - `condense_context`: Context condensation/summarization has started
152152
* - `condense_context_error`: Error occurred during context condensation
153153
* - `codebase_search_result`: Results from searching the codebase
154+
* - `too_many_tools_warning`: Warning that too many MCP tools are enabled, which may confuse the LLM
154155
*/
155156
export const clineSays = [
156157
"error",
@@ -184,6 +185,7 @@ export const clineSays = [
184185
"sliding_window_truncation",
185186
"codebase_search_result",
186187
"user_edit_todos",
188+
"too_many_tools_warning",
187189
] as const
188190

189191
export const clineSaySchema = z.enum(clineSays)

packages/types/src/providers/cerebras.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,6 @@ export type CerebrasModelId = keyof typeof cerebrasModels
66
export const cerebrasDefaultModelId: CerebrasModelId = "gpt-oss-120b"
77

88
export const cerebrasModels = {
9-
"zai-glm-4.6": {
10-
maxTokens: 16384, // Conservative default to avoid premature rate limiting (Cerebras reserves quota upfront)
11-
contextWindow: 131072,
12-
supportsImages: false,
13-
supportsPromptCache: false,
14-
supportsNativeTools: true,
15-
defaultToolProtocol: "native",
16-
inputPrice: 0,
17-
outputPrice: 0,
18-
description: "Fast general-purpose model on Cerebras (up to 1,000 tokens/s). To be deprecated soon.",
19-
},
209
"zai-glm-4.7": {
2110
maxTokens: 16384, // Conservative default to avoid premature rate limiting (Cerebras reserves quota upfront)
2211
contextWindow: 131072,

src/core/costrict/activate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ export async function activate(
139139
return
140140
}
141141
provider.log(`Login status detected at plugin startup: valid (${tokens.state})`)
142-
writeCostrictAccessToken(tokens.access_token).then(async () => {
142+
writeCostrictAccessToken(tokens.access_token, tokens.refresh_token).then(async () => {
143143
await zgsmCodebaseIndexManager.initialize()
144144
zgsmCodebaseIndexManager.syncToken()
145145
workspaceEventMonitor.initialize()

0 commit comments

Comments
 (0)