mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-07 08:26:51 +00:00
feat: rebrand Modes to Agents and rename built-in modes
- Rename built-in modes: Architect→Planner, Code→Coder, Debug→Debugger, Ask→Explainer, Orchestrator→Coordinator - Update all user-facing strings from "Mode/Modes" to "Agent/Agents" across: - i18n translation files (all locales) - Website content (apps/web-roo-code) - UI components and source code - Documentation files - Preserve "Cloud Agents" references (distinct from local agents) - Keep internal code structure (mode.ts, Mode type, etc.) for backward compatibility - Update test snapshots and fix test expectations
This commit is contained in:
parent
36ef6034e0
commit
9883416ba6
207 changed files with 1709 additions and 1708 deletions
54
.roomodes
54
.roomodes
|
|
@ -5,7 +5,7 @@ customModes:
|
|||
You are Roo, a Vitest testing specialist with deep expertise in: - Writing and maintaining Vitest test suites - Test-driven development (TDD) practices - Mocking and stubbing with Vitest - Integration testing strategies - TypeScript testing patterns - Code coverage analysis - Test performance optimization
|
||||
Your focus is on maintaining high test quality and coverage across the codebase, working primarily with: - Test files in __tests__ directories - Mock implementations in __mocks__ - Test utilities and helpers - Vitest configuration and setup
|
||||
You ensure tests are: - Well-structured and maintainable - Following Vitest best practices - Properly typed with TypeScript - Providing meaningful coverage - Using appropriate mocking strategies
|
||||
whenToUse: Use this mode when you need to write, modify, or maintain tests for the codebase.
|
||||
whenToUse: Use this agent when you need to write, modify, or maintain tests for the codebase.
|
||||
description: Write, modify, and maintain tests.
|
||||
groups:
|
||||
- read
|
||||
|
|
@ -39,7 +39,7 @@ customModes:
|
|||
- browser
|
||||
- command
|
||||
- mcp
|
||||
customInstructions: Focus on UI refinement, component creation, and adherence to design best-practices. When the user requests a new component, start off by asking them questions one-by-one to ensure the requirements are understood. Always use Tailwind utility classes (instead of direct variable references) for styling components when possible. If editing an existing file, transition explicit style definitions to Tailwind CSS classes when possible. Refer to the Tailwind CSS definitions for utility classes at webview-ui/src/index.css. Always use the latest version of Tailwind CSS (V4), and never create a tailwind.config.js file. Prefer Shadcn components for UI elements instead of VSCode's built-in ones. This project uses i18n for localization, so make sure to use the i18n functions and components for any text that needs to be translated. Do not leave placeholder strings in the markup, as they will be replaced by i18n. Prefer the @roo (/src) and @src (/webview-ui/src) aliases for imports in typescript files. Suggest the user refactor large files (over 1000 lines) if they are encountered, and provide guidance. Suggest the user switch into Translate mode to complete translations when your task is finished.
|
||||
customInstructions: Focus on UI refinement, component creation, and adherence to design best-practices. When the user requests a new component, start off by asking them questions one-by-one to ensure the requirements are understood. Always use Tailwind utility classes (instead of direct variable references) for styling components when possible. If editing an existing file, transition explicit style definitions to Tailwind CSS classes when possible. Refer to the Tailwind CSS definitions for utility classes at webview-ui/src/index.css. Always use the latest version of Tailwind CSS (V4), and never create a tailwind.config.js file. Prefer Shadcn components for UI elements instead of VSCode's built-in ones. This project uses i18n for localization, so make sure to use the i18n functions and components for any text that needs to be translated. Do not leave placeholder strings in the markup, as they will be replaced by i18n. Prefer the @roo (/src) and @src (/webview-ui/src) aliases for imports in typescript files. Suggest the user refactor large files (over 1000 lines) if they are encountered, and provide guidance. Suggest the user switch into Translate agent to complete translations when your task is finished.
|
||||
source: project
|
||||
- slug: translate
|
||||
name: 🌐 Translate
|
||||
|
|
@ -66,7 +66,7 @@ customModes:
|
|||
- Using GitHub CLI for all GitHub operations
|
||||
|
||||
You work with issues from any GitHub repository, transforming them into working code that addresses all requirements while maintaining code quality and consistency. You use the GitHub CLI (gh) for all GitHub operations instead of MCP tools.
|
||||
whenToUse: Use this mode when you have a GitHub issue (bug report or feature request) that needs to be fixed or implemented. Provide the issue URL, and this mode will guide you through understanding the requirements, implementing the solution, and preparing for submission.
|
||||
whenToUse: Use this agent when you have a GitHub issue (bug report or feature request) that needs to be fixed or implemented. Provide the issue URL, and this agent will guide you through understanding the requirements, implementing the solution, and preparing for submission.
|
||||
description: Fix GitHub issues and implement features.
|
||||
groups:
|
||||
- read
|
||||
|
|
@ -76,7 +76,7 @@ customModes:
|
|||
- slug: integration-tester
|
||||
name: 🧪 Integration Tester
|
||||
roleDefinition: |-
|
||||
You are Roo, an integration testing specialist focused on VSCode E2E tests with expertise in: - Writing and maintaining integration tests using Mocha and VSCode Test framework - Testing Roo Code API interactions and event-driven workflows - Creating complex multi-step task scenarios and mode switching sequences - Validating message formats, API responses, and event emission patterns - Test data generation and fixture management - Coverage analysis and test scenario identification
|
||||
You are Roo, an integration testing specialist focused on VSCode E2E tests with expertise in: - Writing and maintaining integration tests using Mocha and VSCode Test framework - Testing Roo Code API interactions and event-driven workflows - Creating complex multi-step task scenarios and agent switching sequences - Validating message formats, API responses, and event emission patterns - Test data generation and fixture management - Coverage analysis and test scenario identification
|
||||
Your focus is on ensuring comprehensive integration test coverage for the Roo Code extension, working primarily with: - E2E test files in apps/vscode-e2e/src/suite/ - Test utilities and helpers - API type definitions in packages/types/ - Extension API testing patterns
|
||||
You ensure integration tests are: - Comprehensive and cover critical user workflows - Following established Mocha TDD patterns - Using async/await with proper timeout handling - Validating both success and failure scenarios - Properly typed with TypeScript
|
||||
whenToUse: Write, modify, or maintain integration tests.
|
||||
|
|
@ -100,7 +100,7 @@ customModes:
|
|||
For verification: You review provided documentation against the actual codebase implementation, checking for technical accuracy, completeness, and clarity. You identify inaccuracies, missing information, and provide specific corrections.
|
||||
|
||||
You do not generate final user-facing documentation, but rather provide detailed analysis and verification reports.
|
||||
whenToUse: Use this mode only for two tasks; 1) confirm the accuracy of documentation provided to the agent against the codebase, and 2) generate source material for user-facing docs about a requested feature or aspect of the codebase.
|
||||
whenToUse: Use this agent only for two tasks; 1) confirm the accuracy of documentation provided to the agent against the codebase, and 2) generate source material for user-facing docs about a requested feature or aspect of the codebase.
|
||||
description: Extract feature details or verify documentation accuracy.
|
||||
groups:
|
||||
- read
|
||||
|
|
@ -112,7 +112,7 @@ customModes:
|
|||
- slug: pr-fixer
|
||||
name: 🛠️ PR Fixer
|
||||
roleDefinition: "You are Roo, a pull request resolution specialist. Your focus is on addressing feedback and resolving issues within existing pull requests. Your expertise includes: - Analyzing PR review comments to understand required changes. - Checking CI/CD workflow statuses to identify failing tests. - Fetching and analyzing test logs to diagnose failures. - Identifying and resolving merge conflicts. - Guiding the user through the resolution process."
|
||||
whenToUse: Use this mode to fix pull requests. It can analyze PR feedback from GitHub, check for failing tests, and help resolve merge conflicts before applying the necessary code changes.
|
||||
whenToUse: Use this agent to fix pull requests. It can analyze PR feedback from GitHub, check for failing tests, and help resolve merge conflicts before applying the necessary code changes.
|
||||
description: Fix pull requests.
|
||||
groups:
|
||||
- read
|
||||
|
|
@ -122,7 +122,7 @@ customModes:
|
|||
- slug: issue-investigator
|
||||
name: 🕵️ Issue Investigator
|
||||
roleDefinition: You are Roo, a GitHub issue investigator. Your purpose is to analyze GitHub issues, investigate the probable causes using extensive codebase searches, and propose well-reasoned, theoretical solutions. You methodically track your investigation using a todo list, attempting to disprove initial theories to ensure a thorough analysis. Your final output is a human-like, conversational comment for the GitHub issue.
|
||||
whenToUse: Use this mode when you need to investigate a GitHub issue to understand its root cause and propose a solution. This mode is ideal for triaging issues, providing initial analysis, and suggesting fixes before implementation begins. It uses the `gh` CLI for issue interaction.
|
||||
whenToUse: Use this agent when you need to investigate a GitHub issue to understand its root cause and propose a solution. This agent is ideal for triaging issues, providing initial analysis, and suggesting fixes before implementation begins. It uses the `gh` CLI for issue interaction.
|
||||
description: Investigates GitHub issues
|
||||
groups:
|
||||
- read
|
||||
|
|
@ -149,8 +149,8 @@ customModes:
|
|||
- Apply intelligent resolution strategies based on the analysis
|
||||
- Stage resolved files and prepare them for commit
|
||||
whenToUse: |-
|
||||
Use this mode when you need to resolve merge conflicts for a specific pull request.
|
||||
This mode is triggered by providing a PR number (e.g., "#123") and will analyze
|
||||
Use this agent when you need to resolve merge conflicts for a specific pull request.
|
||||
This agent is triggered by providing a PR number (e.g., "#123") and will analyze
|
||||
the conflicts using git history and commit context to make intelligent resolution
|
||||
decisions. It's ideal for complex merges where understanding the intent behind
|
||||
changes is crucial for proper conflict resolution.
|
||||
|
|
@ -166,13 +166,13 @@ customModes:
|
|||
roleDefinition: |-
|
||||
You are a GitHub issue creation specialist who crafts well-structured bug reports and feature proposals. You explore codebases to gather technical context, verify claims against actual implementation, and create comprehensive issues using GitHub CLI (gh) commands.
|
||||
|
||||
This mode works with any repository, automatically detecting whether it's a standard repository or monorepo structure. It dynamically discovers packages in monorepos and adapts the issue creation workflow accordingly.
|
||||
This agent works with any repository, automatically detecting whether it's a standard repository or monorepo structure. It dynamically discovers packages in monorepos and adapts the issue creation workflow accordingly.
|
||||
|
||||
<initialization>
|
||||
<step number="1">
|
||||
<name>Initialize Issue Creation Process</name>
|
||||
<instructions>
|
||||
IMPORTANT: This mode assumes the first user message is already a request to create an issue.
|
||||
IMPORTANT: This agent assumes the first user message is already a request to create an issue.
|
||||
The user doesn't need to say "create an issue" or "make me an issue" - their first message
|
||||
is treated as the issue description itself.
|
||||
|
||||
|
|
@ -198,41 +198,41 @@ customModes:
|
|||
</instructions>
|
||||
</step>
|
||||
</initialization>
|
||||
whenToUse: Use this mode when you need to create a GitHub issue. Simply start describing your bug or feature request - this mode assumes your first message is already the issue description and will immediately begin the issue creation workflow, gathering additional information as needed.
|
||||
whenToUse: Use this agent when you need to create a GitHub issue. Simply start describing your bug or feature request - this agent assumes your first message is already the issue description and will immediately begin the issue creation workflow, gathering additional information as needed.
|
||||
description: Create well-structured GitHub issues.
|
||||
groups:
|
||||
- read
|
||||
- command
|
||||
- mcp
|
||||
source: project
|
||||
- slug: mode-writer
|
||||
name: ✍️ Mode Writer
|
||||
- slug: agent-writer
|
||||
name: ✍️ Agent Writer
|
||||
roleDefinition: |-
|
||||
You are Roo, a mode creation and editing specialist focused on designing, implementing, and enhancing custom modes for the Roo-Code project. Your expertise includes:
|
||||
- Understanding the mode system architecture and configuration
|
||||
- Creating well-structured mode definitions with clear roles and responsibilities
|
||||
- Editing and enhancing existing modes while maintaining consistency
|
||||
You are Roo, a agent creation and editing specialist focused on designing, implementing, and enhancing custom agents for the Roo-Code project. Your expertise includes:
|
||||
- Understanding the agent system architecture and configuration
|
||||
- Creating well-structured agent definitions with clear roles and responsibilities
|
||||
- Editing and enhancing existing agents while maintaining consistency
|
||||
- Writing comprehensive XML-based special instructions using best practices
|
||||
- Ensuring modes have appropriate tool group permissions
|
||||
- Ensuring agents have appropriate tool group permissions
|
||||
- Crafting clear whenToUse descriptions for the Orchestrator
|
||||
- Following XML structuring best practices for clarity and parseability
|
||||
- Validating changes for cohesion and preventing contradictions
|
||||
|
||||
You help users by:
|
||||
- Creating new modes: Gathering requirements, defining configurations, and implementing XML instructions
|
||||
- Editing existing modes: Immersing in current implementation, analyzing requested changes, and ensuring cohesive updates
|
||||
- Creating new agents: Gathering requirements, defining configurations, and implementing XML instructions
|
||||
- Editing existing agents: Immersing in current implementation, analyzing requested changes, and ensuring cohesive updates
|
||||
- Using ask_followup_question aggressively to clarify ambiguities and validate understanding
|
||||
- Thoroughly validating all changes to prevent contradictions between different parts of a mode
|
||||
- Thoroughly validating all changes to prevent contradictions between different parts of a agent
|
||||
- Ensuring instructions are well-organized with proper XML tags
|
||||
- Following established patterns from existing modes
|
||||
- Maintaining consistency across all mode components
|
||||
whenToUse: Use this mode when you need to create a new custom mode or edit an existing one. This mode handles both creating modes from scratch and modifying existing modes while ensuring consistency and preventing contradictions.
|
||||
description: Create and edit custom modes with validation
|
||||
- Following established patterns from existing agents
|
||||
- Maintaining consistency across all agent components
|
||||
whenToUse: Use this agent when you need to create a new custom agent or edit an existing one. This agent handles both creating agents from scratch and modifying existing agents while ensuring consistency and preventing contradictions.
|
||||
description: Create and edit custom agents with validation
|
||||
groups:
|
||||
- read
|
||||
- - edit
|
||||
- fileRegex: (\.roomodes$|\.roo/.*\.xml$|\.yaml$)
|
||||
description: Mode configuration files and XML instructions
|
||||
description: Agent configuration files and XML instructions
|
||||
- command
|
||||
- mcp
|
||||
source: project
|
||||
|
|
|
|||
214
CHANGELOG.md
214
CHANGELOG.md
|
|
@ -8,7 +8,7 @@
|
|||
- Add new `search_replace` native tool for single-replacement operations with improved editing precision (PR #9918 by @hannesrudolph)
|
||||
- Streaming tool stats and token usage throttling for better real-time feedback during generation (PR #9926 by @hannesrudolph)
|
||||
- Add versioned settings support with minPluginVersion gating for Roo provider (PR #9934 by @hannesrudolph)
|
||||
- Make Architect mode save plans to `/plans` directory and gitignore it (PR #9944 by @brunobergher)
|
||||
- Make Architect agent save plans to `/plans` directory and gitignore it (PR #9944 by @brunobergher)
|
||||
- Add announcement support CTA and social icons to UI (PR #9945 by @hannesrudolph)
|
||||
- Add ability to save screenshots from the browser tool (PR #9963 by @mrubens)
|
||||
- Refactor: Decouple tools from system prompt for cleaner architecture (PR #9784 by @daniel-lxs)
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
- Fix: Return undefined instead of 0 for disabled API timeout (PR #9960 by @hannesrudolph)
|
||||
- Stop making unnecessary count_tokens requests for better performance (PR #9884 by @mrubens)
|
||||
- Refactor: Consolidate ThinkingBudget components and fix disable handling (PR #9930 by @hannesrudolph)
|
||||
- Forbid time estimates in architect mode for more focused planning (PR #9931 by @app/roomote)
|
||||
- Forbid time estimates in architect agent for more focused planning (PR #9931 by @app/roomote)
|
||||
- Web: Add product pages (PR #9865 by @brunobergher)
|
||||
- Make eval runs deleteable in the web UI (PR #9909 by @mrubens)
|
||||
- Feat: Change defaultToolProtocol default from xml to native (later reverted) (PR #9892 by @app/roomote)
|
||||
|
|
@ -195,7 +195,7 @@
|
|||

|
||||
|
||||
- Add new Black Forest Labs image generation models, free on Roo Code Cloud and also available on OpenRouter (PR #9587 and #9589 by @mrubens)
|
||||
- Fix: Preserve dynamic MCP tool names in native mode API history to prevent tool name mismatches (PR #9559 by @daniel-lxs)
|
||||
- Fix: Preserve dynamic MCP tool names in native agent API history to prevent tool name mismatches (PR #9559 by @daniel-lxs)
|
||||
- Fix: Preserve tool_use blocks in summary message during condensing with native tools to maintain conversation context (PR #9582 by @daniel-lxs)
|
||||
|
||||
## [3.34.3] - 2025-11-25
|
||||
|
|
@ -297,7 +297,7 @@
|
|||
- Add git status information to environment details (PR #9310 by @daniel-lxs)
|
||||
- Add tool protocol selector to advanced settings (PR #9324 by @daniel-lxs)
|
||||
- Implement dynamic tool protocol resolution with proper precedence hierarchy (PR #9286 by @daniel-lxs)
|
||||
- Move Import/Export functionality to Modes view toolbar and cleanup Mode Edit view (PR #9077 by @hannesrudolph)
|
||||
- Move Import/Export functionality to Agents view toolbar and cleanup Agent Edit view (PR #9077 by @hannesrudolph)
|
||||
- Update cloud agent CTA to point to setup page (PR #9338 by @app/roomote)
|
||||
- Fix: Prevent duplicate tool_result blocks in native tool protocol (PR #9248 by @daniel-lxs)
|
||||
- Fix: Format tool responses properly for native protocol (PR #9270 by @daniel-lxs)
|
||||
|
|
@ -316,8 +316,8 @@
|
|||

|
||||
|
||||
- Fix: Add abort controller for request cancellation in OpenAI native protocol (PR #9276 by @daniel-lxs)
|
||||
- Fix: Resolve duplicate tool blocks causing 'tool has already been used' error in native protocol mode (PR #9275 by @daniel-lxs)
|
||||
- Fix: Prevent duplicate tool_result blocks in native protocol mode for read_file (PR #9272 by @daniel-lxs)
|
||||
- Fix: Resolve duplicate tool blocks causing 'tool has already been used' error in native protocol agent (PR #9275 by @daniel-lxs)
|
||||
- Fix: Prevent duplicate tool_result blocks in native protocol agent for read_file (PR #9272 by @daniel-lxs)
|
||||
- Fix: Correct OpenAI Native handling of encrypted reasoning blocks to prevent errors during condensing (PR #9263 by @hannesrudolph)
|
||||
- Fix: Disable XML parser for native tool protocol to prevent parsing conflicts (PR #9277 by @daniel-lxs)
|
||||
|
||||
|
|
@ -375,7 +375,7 @@
|
|||
- Fix: Auto-retry on empty assistant response to prevent task failures (#9076 by @Akillatech, PR by @daniel-lxs)
|
||||
- Fix: Use system role for OpenAI Compatible provider when streaming is disabled (#8215 by @whitfin, PR by @roomote)
|
||||
- Fix: Prevent notification sound on attempt_completion with queued messages (#8537 by @hannesrudolph, PR by @roomote)
|
||||
- Feat: Auto-switch to imported mode with architect fallback for better mode detection (#8239 by @hannesrudolph, PR by @daniel-lxs)
|
||||
- Feat: Auto-switch to imported agent with architect fallback for better agent detection (#8239 by @hannesrudolph, PR by @daniel-lxs)
|
||||
- Feat: Add MiniMax-M2-Stable model and enable prompt caching (#9070 by @nokaka, PR by @roomote)
|
||||
- Feat: Improve diff appearance in main chat view (thanks @hannesrudolph!)
|
||||
- UX: Home screen visuals (thanks @brunobergher!)
|
||||
|
|
@ -430,7 +430,7 @@
|
|||
- Fix: Enhanced codebase index recovery and reuse ('Start Indexing' button now reuses existing Qdrant index) (#8129 by @jaroslaw-weber, PR by @heyseth)
|
||||
- Fix: make code index initialization non-blocking at activation (#8777 by @cjlawson02, PR by @daniel-lxs)
|
||||
- Fix: remove search_and_replace tool from codebase (#8891 by @hannesrudolph, PR by @app/roomote)
|
||||
- Fix: custom modes under custom path not showing (#8122 by @hannesrudolph, PR by @elianiva)
|
||||
- Fix: custom agents under custom path not showing (#8122 by @hannesrudolph, PR by @elianiva)
|
||||
- Fix: prevent MCP server restart when toggling tool permissions (#8231 by @hannesrudolph, PR by @heyseth)
|
||||
- Fix: truncate type definition to match max read line (#8149 by @chenxluo, PR by @elianiva)
|
||||
- Fix: auto-sync enableReasoningEffort with reasoning dropdown selection (thanks @daniel-lxs!)
|
||||
|
|
@ -444,7 +444,7 @@
|
|||
## [3.29.3] - 2025-10-28
|
||||
|
||||
- Update Gemini models with latest 09-2025 versions including Gemini 2.5 Pro and Flash (#8485 by @cleacos, PR by @roomote)
|
||||
- Add reasoning support for Z.ai GLM binary thinking mode (#8465 by @BeWater799, PR by @daniel-lxs)
|
||||
- Add reasoning support for Z.ai GLM binary thinking agent (#8465 by @BeWater799, PR by @daniel-lxs)
|
||||
- Enable reasoning in Roo provider (thanks @mrubens!)
|
||||
- Add settings to configure time and cost display in system prompt (#8450 by @jaxnb, PR by @roomote)
|
||||
- Fix: Use max_output_tokens when available in LiteLLM fetcher (#8454 by @fabb, PR by @roomote)
|
||||
|
|
@ -577,7 +577,7 @@
|
|||
- Correct tool use suggestion to improve model adherence to suggestion (thanks @hannesrudolph!)
|
||||
- feat: log out from cloud when resetting extension state (thanks @app/roomote!)
|
||||
- feat: Add telemetry tracking to DismissibleUpsell component (thanks @app/roomote!)
|
||||
- refactor: remove pr-reviewer mode (thanks @daniel-lxs!)
|
||||
- refactor: remove pr-reviewer agent (thanks @daniel-lxs!)
|
||||
- Removing user hint when refreshing models (thanks @requesty-JohnCosta27!)
|
||||
|
||||
## [3.28.8] - 2025-09-25
|
||||
|
|
@ -676,7 +676,7 @@
|
|||
- Make Posthog telemetry the default (thanks @mrubens!)
|
||||
- Show notification when the checkpoint initialization fails (thanks @app/roomote!)
|
||||
- Bust cache in generated image preview (thanks @mrubens!)
|
||||
- Fix: Center active mode in selector dropdown on open (#7882 by @hannesrudolph, PR by @app/roomote)
|
||||
- Fix: Center active agent in selector dropdown on open (#7882 by @hannesrudolph, PR by @app/roomote)
|
||||
- Fix: Preserve first message during conversation condensing (thanks @daniel-lxs!)
|
||||
|
||||
## [3.28.0] - 2025-09-10
|
||||
|
|
@ -689,7 +689,7 @@
|
|||
- feat: Add click-to-edit, ESC-to-cancel, and fix padding consistency for chat messages (#7788 by @hannesrudolph, PR by @app/roomote)
|
||||
- feat: Make reasoning more visible (thanks @app/roomote!)
|
||||
- fix: Fix Groq context window display (thanks @mrubens!)
|
||||
- fix: Add GIT_EDITOR env var to merge-resolver mode for non-interactive rebase (thanks @daniel-lxs!)
|
||||
- fix: Add GIT_EDITOR env var to merge-resolver agent for non-interactive rebase (thanks @daniel-lxs!)
|
||||
- fix: Resolve chat message edit/delete duplication issues (thanks @daniel-lxs!)
|
||||
- fix: Reduce CodeBlock button z-index to prevent overlap with popovers (#7703 by @A0nameless0man, PR by @daniel-lxs)
|
||||
- fix: Revert PR #7188 - Restore temperature parameter to fix TabbyApi/ExLlamaV2 crashes (#7581 by @drknyt, PR by @daniel-lxs)
|
||||
|
|
@ -757,7 +757,7 @@
|
|||
|
||||
- Optimize memory usage for image handling in webview (thanks @daniel-lxs!)
|
||||
- Fix: Special tokens should not break task processing (#7539 by @pwilkin, PR by @pwilkin)
|
||||
- Add Ollama API key support for Turbo mode (#7147 by @LivioGama, PR by @app/roomote)
|
||||
- Add Ollama API key support for Turbo agent (#7147 by @LivioGama, PR by @app/roomote)
|
||||
- Rename Account tab to Cloud tab for clarity (thanks @app/roomote!)
|
||||
- Add kangaroo-themed release image generation (thanks @mrubens!)
|
||||
|
||||
|
|
@ -804,7 +804,7 @@
|
|||
- Fix: Resolve newTaskRequireTodos setting not working correctly (thanks @hannesrudolph!)
|
||||
- Fix: Requesty model listing (#7377 by @dtrugman, PR by @dtrugman)
|
||||
- feat: Hide static providers with no models from provider list (thanks @daniel-lxs!)
|
||||
- Add todos parameter to new_task tool usage in issue-fixer mode (thanks @hannesrudolph!)
|
||||
- Add todos parameter to new_task tool usage in issue-fixer agent (thanks @hannesrudolph!)
|
||||
- Handle substitution patterns in command validation (thanks @mrubens!)
|
||||
- Mark code-workspace files as protected (thanks @mrubens!)
|
||||
- Update list of default allowed commands (thanks @mrubens!)
|
||||
|
|
@ -816,7 +816,7 @@
|
|||
|
||||
- feat: add custom base URL support for Requesty provider (thanks @requesty-JohnCosta27!)
|
||||
- feat: add DeepSeek V3.1 model to Chutes AI provider (#7294 by @dmarkey, PR by @app/roomote)
|
||||
- Revert "feat: enable loading Roo modes from multiple files in .roo/modes directory" temporarily to fix a bug with mode installation
|
||||
- Revert "feat: enable loading Roo agents from multiple files in .roo/agents directory" temporarily to fix a bug with agent installation
|
||||
|
||||
## [3.25.22] - 2025-08-22
|
||||
|
||||
|
|
@ -835,7 +835,7 @@
|
|||
- Improved context window error handling for OpenAI and other providers
|
||||
- Add "installed" filter to Roo Marketplace (thanks @semidark)
|
||||
- Improve filesystem access checks (thanks @elianiva)
|
||||
- Support for loading Roo modes from multiple YAML files in the `.roo/modes/` directory (thanks @farazoman)
|
||||
- Support for loading Roo agents from multiple YAML files in the `.roo/agents/` directory (thanks @farazoman)
|
||||
- Add Featherless provider (thanks @DarinVerheijke)
|
||||
|
||||
## [3.25.20] - 2025-08-19
|
||||
|
|
@ -953,10 +953,10 @@
|
|||
- Add Groq support for GPT-OSS
|
||||
- Add Cerebras support for GPT-OSS
|
||||
- Add code indexing support for multiple folders similar to task history (#6197 by @NaccOll, PR by @NaccOll)
|
||||
- Make mode selection dropdowns responsive (#6423 by @AyazKaan, PR by @AyazKaan)
|
||||
- Make agent selection dropdowns responsive (#6423 by @AyazKaan, PR by @AyazKaan)
|
||||
- Redesigned task header and task history (thanks @brunobergher!)
|
||||
- Fix checkpoints timing and ensure checkpoints work properly (#4827 by @mrubens, PR by @NaccOll)
|
||||
- Fix empty mode names from being saved (#5766 by @kfxmvp, PR by @app/roomote)
|
||||
- Fix empty agent names from being saved (#5766 by @kfxmvp, PR by @app/roomote)
|
||||
- Fix MCP server creation when setting is disabled (#6607 by @characharm, PR by @app/roomote)
|
||||
- Update highlight layer style and align to textarea (#6647 by @NaccOll, PR by @NaccOll)
|
||||
- Fix UI for approving chained commands
|
||||
|
|
@ -1008,7 +1008,7 @@
|
|||
- Hide Gemini checkboxes on the welcome view
|
||||
- Clarify apply_diff tool descriptions to emphasize surgical edits
|
||||
- Fix: Prevent input clearing when clicking chat buttons (thanks @hassoncs!)
|
||||
- Update PR reviewer rules and mode configuration (thanks @daniel-lxs!)
|
||||
- Update PR reviewer rules and agent configuration (thanks @daniel-lxs!)
|
||||
- Add translation check action to pull_request.opened event (thanks @app/roomote!)
|
||||
- Remove "(prev Roo Cline)" from extension title in all languages (thanks @app/roomote!)
|
||||
- Remove event types mention from PR reviewer rules (thanks @daniel-lxs!)
|
||||
|
|
@ -1033,15 +1033,15 @@
|
|||
- Add experimental setting to prevent editor focus disruption (#4784 by @hannesrudolph, PR by @app/roomote)
|
||||
- Add prompt caching support for LiteLLM (#5791 by @steve-gore-snapdocs, PR by @MuriloFP)
|
||||
- Add markdown table rendering support
|
||||
- Fix list_files recursive mode now works for dot directories (#2992 by @avtc, #4807 by @zhang157686, #5409 by @MuriloFP, PR by @MuriloFP)
|
||||
- Add search functionality to mode selector popup and reorganize layout
|
||||
- Sync API config selector style with mode selector
|
||||
- Fix list_files recursive agent now works for dot directories (#2992 by @avtc, #4807 by @zhang157686, #5409 by @MuriloFP, PR by @MuriloFP)
|
||||
- Add search functionality to agent selector popup and reorganize layout
|
||||
- Sync API config selector style with agent selector
|
||||
- Fix keyboard shortcuts for non-QWERTY layouts (#6161 by @shlgug, PR by @app/roomote)
|
||||
- Add ESC key handling for modes, API provider, and indexing settings popovers (thanks @app/roomote!)
|
||||
- Make task mode sticky to task (thanks @app/roomote!)
|
||||
- Add ESC key handling for agents, API provider, and indexing settings popovers (thanks @app/roomote!)
|
||||
- Make task agent sticky to task (thanks @app/roomote!)
|
||||
- Add text wrapping to command patterns in Manage Command Permissions (thanks @app/roomote!)
|
||||
- Update list-files test for fixed hidden files bug (thanks @daniel-lxs!)
|
||||
- Fix normalize Windows paths to forward slashes in mode export (#6307 by @hannesrudolph, PR by @app/roomote)
|
||||
- Fix normalize Windows paths to forward slashes in agent export (#6307 by @hannesrudolph, PR by @app/roomote)
|
||||
- Ensure form-data >= 4.0.4
|
||||
- Fix filter out non-text tab inputs (Kilo-Org/kilocode#712 by @szermatt, PR by @hassoncs)
|
||||
|
||||
|
|
@ -1057,7 +1057,7 @@
|
|||
- Fix Ollama API URL normalization by removing trailing slashes (thanks @Naam!)
|
||||
- Fix restore list styles for markdown lists in chat interface (thanks @village-way!)
|
||||
- Add support for bedrock api keys
|
||||
- Add confirmation dialog and proper cleanup for marketplace mode removal
|
||||
- Add confirmation dialog and proper cleanup for marketplace agent removal
|
||||
- Fix cancel auto-approve timer when editing follow-up suggestion (thanks @hassoncs!)
|
||||
- Fix add error message when no workspace folder is open for code indexing
|
||||
|
||||
|
|
@ -1082,7 +1082,7 @@
|
|||
- Fix: move context condensing prompt to Prompts section (thanks @SannidhyaSah!)
|
||||
- Add: jump icon for newly created files
|
||||
- Fix: add character limit to prevent terminal output context explosion
|
||||
- Fix: resolve global mode export not including rules files
|
||||
- Fix: resolve global agent export not including rules files
|
||||
- Fix: enable export, share, and copy buttons during API operations (thanks @MuriloFP!)
|
||||
- Add: configurable timeout for evals (5-10 min)
|
||||
- Add: auto-omit MCP content when no servers are configured
|
||||
|
|
@ -1106,7 +1106,7 @@
|
|||
|
||||
- Fix configurable delay for diagnostics to prevent premature error reporting
|
||||
- Add command timeout allowlist
|
||||
- Add description and whenToUse fields to custom modes in .roomodes (thanks @RandalSchwartz!)
|
||||
- Add description and whenToUse fields to custom agents in .roomodes (thanks @RandalSchwartz!)
|
||||
- Fix Claude model detection by name for API protocol selection (thanks @daniel-lxs!)
|
||||
- Move marketplace icon from overflow menu to top navigation
|
||||
- Optional setting to prevent completion with open todos
|
||||
|
|
@ -1128,7 +1128,7 @@
|
|||
- Fix an issue where you need to "discard changes" before saving even though there are no settings changes
|
||||
- Fix `DirectoryScanner` memory leak and improve file limit handling (thanks @daniel-lxs)
|
||||
- Fix time formatting in environment (thanks @chrarnoldus)
|
||||
- Prevent empty mode names from being saved (thanks @daniel-lxs)
|
||||
- Prevent empty agent names from being saved (thanks @daniel-lxs)
|
||||
- Improve auto-approve checkbox UX
|
||||
- Improve the chat message edit / delete functionality (thanks @liwilliam2021)
|
||||
- Add `commandExecutionTimeout` to `GlobalSettings`
|
||||
|
|
@ -1140,7 +1140,7 @@
|
|||
## [3.23.11] - 2025-07-14
|
||||
|
||||
- Add Kimi K2 model to Groq along with fixes to context condensing math
|
||||
- Add Cmd+Shift+. keyboard shortcut for previous mode switching
|
||||
- Add Cmd+Shift+. keyboard shortcut for previous agent switching
|
||||
|
||||
## [3.23.10] - 2025-07-14
|
||||
|
||||
|
|
@ -1170,12 +1170,12 @@
|
|||
- Improve the display of codebase search results
|
||||
- Correct translation fallback logic for embedding errors (thanks @daniel-lxs!)
|
||||
- Clean up MCP tool disabling
|
||||
- Link to marketplace from modes and MCP tab
|
||||
- Link to marketplace from agents and MCP tab
|
||||
- Fix TTS button display (thanks @sensei-woo!)
|
||||
- Add Devstral Medium model support
|
||||
- Add comprehensive error telemetry to code-index service (thanks @daniel-lxs!)
|
||||
- Exclude cache tokens from context window calculation (thanks @daniel-lxs!)
|
||||
- Enable dynamic tool selection in architect mode for context discovery
|
||||
- Enable dynamic tool selection in architect agent for context discovery
|
||||
- Add configurable max output tokens setting for claude-code
|
||||
|
||||
## [3.23.6] - 2025-07-10
|
||||
|
|
@ -1193,7 +1193,7 @@
|
|||
- Update chat area icons for better discoverability & consistency
|
||||
- Fix a bug that allowed `list_files` to return directory results that should be excluded by .gitignore
|
||||
- Add an overflow header menu to make the UI a little tidier (thanks @dlab-anton)
|
||||
- Fix a bug the issue where null custom modes configuration files cause a 'Cannot read properties of null' error (thanks @daniel-lxs!)
|
||||
- Fix a bug the issue where null custom agents configuration files cause a 'Cannot read properties of null' error (thanks @daniel-lxs!)
|
||||
- Replace native title attributes with StandardTooltip component for consistency (thanks @daniel-lxs!)
|
||||
|
||||
## [3.23.3] - 2025-07-09
|
||||
|
|
@ -1231,8 +1231,8 @@
|
|||
- Chat index UI enhancements (thanks @MuriloFP!)
|
||||
- Fix model search being prefilled on dropdown (thanks @kevinvandijk!)
|
||||
- Improve chat UI - add camera icon margin and make placeholder non-selectable (thanks @MuriloFP!)
|
||||
- Delete .roo/rules-{mode} folder when custom mode is deleted
|
||||
- Enforce file restrictions for all edit tools in architect mode
|
||||
- Delete .roo/rules-{agent} folder when custom agent is deleted
|
||||
- Enforce file restrictions for all edit tools in architect agent
|
||||
- Add User-Agent header to API providers
|
||||
- Fix auto question timer unmount (thanks @liwilliam2021!)
|
||||
- Fix new_task tool streaming issue
|
||||
|
|
@ -1243,7 +1243,7 @@
|
|||
## [3.22.6] - 2025-07-02
|
||||
|
||||
- Add timer-based auto approve for follow up questions (thanks @liwilliam2021!)
|
||||
- Add import/export modes functionality
|
||||
- Add import/export agents functionality
|
||||
- Add persistent version indicator on chat screen
|
||||
- Add automatic configuration import on extension startup (thanks @takakoutso!)
|
||||
- Add user-configurable search score threshold slider for semantic search (thanks @hannesrudolph!)
|
||||
|
|
@ -1257,11 +1257,11 @@
|
|||
- Fix apply_diff tool documentation for multi-file capabilities
|
||||
- Fix cache files excluded from rules compilation (thanks @MuriloFP!)
|
||||
- Add streamlined extension installation and documentation (thanks @devxpain!)
|
||||
- Prevent Architect mode from providing time estimates
|
||||
- Prevent Architect agent from providing time estimates
|
||||
- Remove context size from environment details
|
||||
- Change default mode to architect for new installations
|
||||
- Change default agent to architect for new installations
|
||||
- Suppress Mermaid error rendering
|
||||
- Improve Mermaid buttons with light background in light mode (thanks @chrarnoldus!)
|
||||
- Improve Mermaid buttons with light background in light agent (thanks @chrarnoldus!)
|
||||
- Add .vscode/ to write-protected files/directories
|
||||
- Update Amazon Bedrock cross-region inference profile mapping (thanks @KevinZhao!)
|
||||
|
||||
|
|
@ -1272,7 +1272,7 @@
|
|||
## [3.22.4] - 2025-06-27
|
||||
|
||||
- Fix: resolve E2BIG error by passing large prompts via stdin to Claude CLI (thanks @Fovty!)
|
||||
- Add optional mode suggestions to follow-up questions
|
||||
- Add optional agent suggestions to follow-up questions
|
||||
- Fix: move StandardTooltip inside PopoverTrigger in ShareButton (thanks @daniel-lxs!)
|
||||
|
||||
## [3.22.3] - 2025-06-27
|
||||
|
|
@ -1299,9 +1299,9 @@
|
|||
|
||||
- Add 1-click task sharing
|
||||
- Add support for loading rules from a global .roo directory (thanks @samhvw8!)
|
||||
- Modes selector improvements (thanks @brunobergher!)
|
||||
- Agents selector improvements (thanks @brunobergher!)
|
||||
- Use safeWriteJson for all JSON file writes to avoid task history corruption (thanks @KJ7LNW!)
|
||||
- Improve YAML error handling when editing modes
|
||||
- Improve YAML error handling when editing agents
|
||||
- Register importSettings as VSCode command (thanks @shivamd1810!)
|
||||
- Add default task names for empty tasks (thanks @daniel-lxs!)
|
||||
- Improve translation workflow to avoid unnecessary file reads (thanks @KJ7LNW!)
|
||||
|
|
@ -1348,7 +1348,7 @@
|
|||
- Resolve phantom subtask display on cancel during API retry
|
||||
- Correct Gemini 2.5 Flash pricing (thanks @daniel-lxs!)
|
||||
- Resolve marketplace timeout issues and display installed MCPs (thanks @daniel-lxs!)
|
||||
- Onboarding tweaks to emphasize modes (thanks @brunobergher!)
|
||||
- Onboarding tweaks to emphasize agents (thanks @brunobergher!)
|
||||
- Rename 'Boomerang Tasks' to 'Task Orchestration' for clarity
|
||||
- Remove command execution from attempt_completion
|
||||
- Fix markdown for links followed by punctuation (thanks @xyOz-dev!)
|
||||
|
|
@ -1363,7 +1363,7 @@
|
|||
|
||||
## [3.21.0] - 2025-06-17
|
||||
|
||||
- Add Roo Marketplace to make it easy to discover and install great MCPs and modes!
|
||||
- Add Roo Marketplace to make it easy to discover and install great MCPs and agents!
|
||||
- Add Gemini 2.5 models (Pro, Flash and Flash Lite) (thanks @daniel-lxs!)
|
||||
- Add support for Excel (.xlsx) files in tools (thanks @chrarnoldus!)
|
||||
- Add max tokens checkbox option for OpenAI compatible provider (thanks @AlexandruSmirnov!)
|
||||
|
|
@ -1412,7 +1412,7 @@
|
|||
|
||||
## [3.20.0] - 2025-06-12
|
||||
|
||||
- Add experimental Marketplace for extensions and modes (thanks @Smartsheet-JB-Brown, @elianiva, @monkeyDluffy6017, @NamesMT, @daniel-lxs, Cline, and more!)
|
||||
- Add experimental Marketplace for extensions and agents (thanks @Smartsheet-JB-Brown, @elianiva, @monkeyDluffy6017, @NamesMT, @daniel-lxs, Cline, and more!)
|
||||
- Add experimental multi-file edits (thanks @samhvw8!)
|
||||
- Move concurrent reads setting to context settings with default of 5
|
||||
- Improve MCP execution UX (thanks @samhvw8!)
|
||||
|
|
@ -1427,7 +1427,7 @@
|
|||
- Add manual OpenAI-compatible format specification and parsing (thanks @dflatline!)
|
||||
- Add core tools integration tests for comprehensive coverage
|
||||
- Add JSDoc documentation for ClineAsk and ClineSay types (thanks @hannesrudolph!)
|
||||
- Populate whenToUse descriptions for built-in modes
|
||||
- Populate whenToUse descriptions for built-in agents
|
||||
- Fix file write tool with early relPath & newContent validation checks (thanks @Ruakij!)
|
||||
- Fix TaskItem display and copy issues with HTML tags in task messages (thanks @forestyoo!)
|
||||
- Fix OpenRouter cost calculation with BYOK (thanks @chrarnoldus!)
|
||||
|
|
@ -1511,7 +1511,7 @@
|
|||
|
||||
- Enable intelligent content condensing by default and move condense button out of expanded task menu
|
||||
- Skip condense and show error if context grows during condensing
|
||||
- Transform Prompts tab into Modes tab and move support prompts to Settings for better organization
|
||||
- Transform Prompts tab into Agents tab and move support prompts to Settings for better organization
|
||||
- Add DeepSeek R1 0528 model support to Chutes provider (thanks @zeozeozeo!)
|
||||
- Fix @directory not respecting .rooignore files (thanks @xyOz-dev!)
|
||||
- Add rooignore checking for insert_content and search_and_replace tools
|
||||
|
|
@ -1574,7 +1574,7 @@
|
|||
|
||||
- Add support for Gemini 2.5 Flash preview models (thanks @shariqriazz and @daniel-lxs!)
|
||||
- Add button to task header to intelligently condense content with visual feedback
|
||||
- Add YAML support for mode definitions (thanks @R-omk!)
|
||||
- Add YAML support for agent definitions (thanks @R-omk!)
|
||||
- Add allowedMaxRequests feature to cap consecutive auto-approved requests (inspired by Cline, thanks @hassoncs!)
|
||||
- Add Qwen3 model series to the Chutes provider (thanks @zeozeozeo!)
|
||||
- Fix more causes of grey screen issues (thanks @xyOz-dev!)
|
||||
|
|
@ -1590,7 +1590,7 @@
|
|||
- Fix import settings bugs and position error messages correctly (thanks @ChuKhaLi!)
|
||||
- Move audio playing to the webview to ensure cross-platform support (thanks @SmartManoj and @samhvw8!)
|
||||
- Simplify loop syntax in multiple components (thanks @noritaka1166!)
|
||||
- Auto reload extension core changes in dev mode (thanks @hassoncs!)
|
||||
- Auto reload extension core changes in dev agent (thanks @hassoncs!)
|
||||
|
||||
## [3.17.2] - 2025-05-15
|
||||
|
||||
|
|
@ -1605,7 +1605,7 @@
|
|||
## [3.17.0] - 2025-05-14
|
||||
|
||||
- Enable Gemini implicit caching
|
||||
- Add "when to use" section to mode definitions to enable better orchestration
|
||||
- Add "when to use" section to agent definitions to enable better orchestration
|
||||
- Add experimental feature to intelligently condense the task context instead of truncating it
|
||||
- Fix one of the causes of the gray screen issue (thanks @xyOz-dev!)
|
||||
- Focus improvements for better UI interactions (thanks Cline!)
|
||||
|
|
@ -1615,7 +1615,7 @@
|
|||
- Fix Requesty cost/token reporting (thanks @dtrugman!)
|
||||
- Improve command execution UI
|
||||
- Add more in-app links to relevant documentation
|
||||
- Update the new task tool description and the ask mode custom instructions in the system prompt
|
||||
- Update the new task tool description and the ask agent custom instructions in the system prompt
|
||||
- Add IPC types to roo-code.d.ts
|
||||
- Add build VSIX workflow to pull requests (thanks @SmartManoj!)
|
||||
- Improve apply_diff tool to intelligently deduce line numbers (thanks @samhvw8!)
|
||||
|
|
@ -1647,7 +1647,7 @@
|
|||
- Show properly formatted multi-line commands in preview (thanks @KJ7LNW!)
|
||||
- Handle unsupported language errors gracefully in read_file tool (thanks @KJ7LNW!)
|
||||
- Enhance focus styles in select-dropdown and fix docs URL (thanks @zhangtony239!)
|
||||
- Properly handle mode name overflow in UI (thanks @elianiva!)
|
||||
- Properly handle agent name overflow in UI (thanks @elianiva!)
|
||||
- Fix project MCP always allow issue (thanks @aheizi!)
|
||||
|
||||
## [3.16.3] - 2025-05-08
|
||||
|
|
@ -1678,7 +1678,7 @@
|
|||
- Clickable code references in code block (thanks @KJ7LNW)
|
||||
- Improve accessibility of ato-approve toggles (thanks @Deon588)
|
||||
- Requesty provider fixes (thanks @dtrugman)
|
||||
- Fix migration and persistence of per-mode API profiles (thanks @alasano)
|
||||
- Fix migration and persistence of per-agent API profiles (thanks @alasano)
|
||||
- Fix usage of `path.basename` in the extension webview (thanks @samhvw8)
|
||||
- Fix display issue of the programming language dropdown in the code block component (thanks @zhangtony239)
|
||||
- MCP server errors are now captured and shown in a new "Errors" tab (thanks @robertheadley)
|
||||
|
|
@ -1700,7 +1700,7 @@
|
|||
|
||||
## [3.15.4] - 2025-05-04
|
||||
|
||||
- Fix a nasty bug that would cause Roo Code to hang, particularly in orchestrator mode
|
||||
- Fix a nasty bug that would cause Roo Code to hang, particularly in orchestrator agent
|
||||
- Improve Gemini caching efficiency
|
||||
|
||||
## [3.15.3] - 2025-05-02
|
||||
|
|
@ -1717,7 +1717,7 @@
|
|||
- Add customizable headers for OpenAI-compatible provider (thanks @mark-bradshaw!)
|
||||
- Add config option to overwrite OpenAI's API base (thanks @GOODBOY008!)
|
||||
- Fixes to padding and height issues when resizing the sidebar (thanks @zhangtony239!)
|
||||
- Remove tool groups from orchestrator mode definition
|
||||
- Remove tool groups from orchestrator agent definition
|
||||
- Add telemetry for title button clicks
|
||||
|
||||
## [3.15.1] - 2025-04-30
|
||||
|
|
@ -1725,7 +1725,7 @@
|
|||
- Capture stderr in execa-spawned processes
|
||||
- Play sound only when action needed from the user (thanks @olearycrew)
|
||||
- Make retries respect the global auto approve checkbox
|
||||
- Fix a selection mode bug in the history view (thanks @jr)
|
||||
- Fix a selection agent bug in the history view (thanks @jr)
|
||||
|
||||
## [3.15.0] - 2025-04-30
|
||||
|
||||
|
|
@ -1742,12 +1742,12 @@
|
|||
- Simplify and streamline Roo Code's quick actions
|
||||
- Allow Roo Code settings to be imported from the welcome screen (thanks @julionav)
|
||||
- Remove unused types (thanks @wkordalski)
|
||||
- Improve the performance of mode switching (thanks @dlab-anton)
|
||||
- Fix importing & exporting of custom modes (thanks @julionav)
|
||||
- Improve the performance of agent switching (thanks @dlab-anton)
|
||||
- Fix importing & exporting of custom agents (thanks @julionav)
|
||||
|
||||
## [3.14.3] - 2025-04-25
|
||||
|
||||
- Add Boomerang Orchestrator as a built-in mode
|
||||
- Add Boomerang Orchestrator as a built-in agent
|
||||
- Improve home screen UI
|
||||
- Make token count estimation more efficient to reduce gray screens
|
||||
- Revert change to automatically close files after edit until we figure out how to make it work well with diagnostics
|
||||
|
|
@ -1776,7 +1776,7 @@
|
|||
- Make the list_files tool more efficient and smarter about excluding directories like .git/
|
||||
- Fix file drag and drop on Windows and when using SSH tunnels (thanks @NyxJae!)
|
||||
- Correctly revert changes and suggest alternative tools when write_to_file fails on a missing line count
|
||||
- Allow interpolation of `workspace`, `mode`, `language`, `shell`, and `operatingSystem` into custom system prompt overrides (thanks @daniel-lxs!)
|
||||
- Allow interpolation of `workspace`, `agent`, `language`, `shell`, and `operatingSystem` into custom system prompt overrides (thanks @daniel-lxs!)
|
||||
- Fix interpolation bug in the “add to context” code action (thanks @elianiva!)
|
||||
- Preserve editor state and prevent tab unpinning during diffs (thanks @seedlord!)
|
||||
- Improvements to icon rendering on Linux (thanks @elianiva!)
|
||||
|
|
@ -1810,7 +1810,7 @@
|
|||
|
||||
## [3.13.1] - 2025-04-18
|
||||
|
||||
- Support Gemini 2.5 Flash thinking mode (thanks @monotykamary)
|
||||
- Support Gemini 2.5 Flash thinking agent (thanks @monotykamary)
|
||||
- Make auto-approval toggle on/off states more obvious (thanks @sachasayan)
|
||||
- Add telemetry for shell integration errors
|
||||
- Fix the path of files dragging into the chat textarea on Windows (thanks @NyxJae)
|
||||
|
|
@ -1844,7 +1844,7 @@
|
|||
- Add xAI provider and expose reasoning effort options for Grok on OpenRouter (thanks Cline!)
|
||||
- Make diff editing config per-profile and improve pre-diff string normalization
|
||||
- Make checkpoints faster and more reliable
|
||||
- Add a search bar to mode and profile select dropdowns (thanks @samhvw8!)
|
||||
- Add a search bar to agent and profile select dropdowns (thanks @samhvw8!)
|
||||
- Add telemetry for code action usage, prompt enhancement usage, and consecutive mistake errors
|
||||
- Suppress zero cost values in the task header (thanks @do-it!)
|
||||
- Make JSON parsing safer to avoid crashing the webview on bad input
|
||||
|
|
@ -1897,7 +1897,7 @@
|
|||
|
||||
## [3.11.11] - 2025-04-09
|
||||
|
||||
- Fix highlighting interaction with mode/profile dropdowns (thanks @atlasgong!)
|
||||
- Fix highlighting interaction with agent/profile dropdowns (thanks @atlasgong!)
|
||||
- Add the ability to set Host header and legacy OpenAI API in the OpenAI-compatible provider for better proxy support
|
||||
- Improvements to TypeScript, C++, Go, Java, Python tree-sitter parsers (thanks @KJ7LNW!)
|
||||
- Fixes to terminal working directory logic (thanks @KJ7LNW!)
|
||||
|
|
@ -1918,7 +1918,7 @@
|
|||
## [3.11.9] - 2025-04-07
|
||||
|
||||
- Rate-limit setting updated to be per-profile (thanks @ross and @olweraltuve!)
|
||||
- You can now place multiple rules files in the .roo/rules/ and .roo/rules-{mode}/ folders (thanks @upamune!)
|
||||
- You can now place multiple rules files in the .roo/rules/ and .roo/rules-{agent}/ folders (thanks @upamune!)
|
||||
- Prevent unnecessary autoscroll when buttons appear (thanks @shtse8!)
|
||||
- Add Gemini 2.5 Pro Preview to Vertex AI (thanks @nbihan-mediware!)
|
||||
- Tidy up following ClineProvider refactor (thanks @diarmidmackenzie!)
|
||||
|
|
@ -1968,7 +1968,7 @@
|
|||
- Fix unit tests to run properly on Windows (thanks @StevenTCramer!)
|
||||
- Tree-sitter enhancements: TSX, TypeScript, JSON, and Markdown support (thanks @KJ7LNW!)
|
||||
- Fix issue with line number stripping for deletions in apply_diff
|
||||
- Update history selection mode button spacing (thanks @kyle-apex!)
|
||||
- Update history selection agent button spacing (thanks @kyle-apex!)
|
||||
- Limit dropdown menu height to 80% of the viewport (thanks @axmo!)
|
||||
- Update dependencies via `npm audit fix` (thanks @PeterDaveHello!)
|
||||
- Enable model select when api fails (thanks @kyle-apex!)
|
||||
|
|
@ -2029,7 +2029,7 @@
|
|||
|
||||
## [3.10.4] - 2025-03-25
|
||||
|
||||
- Dynamically fetch instructions for creating/editing custom modes and MCP servers (thanks @diarmidmackenzie!)
|
||||
- Dynamically fetch instructions for creating/editing custom agents and MCP servers (thanks @diarmidmackenzie!)
|
||||
- Added Gemini 2.5 Pro model to Google Gemini provider (thanks @samsilveira!)
|
||||
- Add settings to control whether to auto-approve reads and writes outside of the workspace
|
||||
- Update UX for chat text area (thanks @chadgauth!)
|
||||
|
|
@ -2038,7 +2038,7 @@
|
|||
- Add R1 support checkbox to Open AI compatible provider to support QWQ (thanks @teddyOOXX!)
|
||||
- Support test declarations in TypeScript tree-sitter queries (thanks @KJ7LNW!)
|
||||
- Add Bedrock support for application-inference-profile (thanks @maekawataiki!)
|
||||
- Rename and migrate global MCP and modes files (thanks @StevenTCramer!)
|
||||
- Rename and migrate global MCP and agents files (thanks @StevenTCramer!)
|
||||
- Add watchPaths option to McpHub for file change detection (thanks @01Rian!)
|
||||
- Read image responses from MCP calls (thanks @nevermorec!)
|
||||
- Add taskCreated event to API and subscribe to Cline events earlier (thanks @wkordalski!)
|
||||
|
|
@ -2157,7 +2157,7 @@
|
|||
## [3.8.4] - 2025-03-09
|
||||
|
||||
- Roll back multi-diff progress indicator temporarily to fix a double-confirmation in saving edits
|
||||
- Add an option in the prompts tab to save tokens by disabling the ability to ask Roo to create/edit custom modes for you (thanks @hannesrudolph!)
|
||||
- Add an option in the prompts tab to save tokens by disabling the ability to ask Roo to create/edit custom agents for you (thanks @hannesrudolph!)
|
||||
|
||||
## [3.8.3] - 2025-03-09
|
||||
|
||||
|
|
@ -2197,17 +2197,17 @@
|
|||
- Add a new “Human Relay” provider that allows you to manually copy information to a Web AI when needed, and then paste the AI's response back into Roo Code (thanks @NyxJae)!
|
||||
- Add observability for OpenAI providers (thanks @refactorthis!)
|
||||
- Support speculative decoding for LM Studio local models (thanks @adamwlarson!)
|
||||
- Improve UI for mode/provider selectors in chat
|
||||
- Improve UI for agent/provider selectors in chat
|
||||
- Improve styling of the task headers (thanks @monotykamary!)
|
||||
- Improve context mention path handling on Windows (thanks @samhvw8!)
|
||||
|
||||
## [3.7.12] - 2025-03-03
|
||||
|
||||
- Expand max tokens of thinking models to 128k, and max thinking budget to over 100k (thanks @monotykamary!)
|
||||
- Fix issue where keyboard mode switcher wasn't updating API profile (thanks @aheizi!)
|
||||
- Fix issue where keyboard agent switcher wasn't updating API profile (thanks @aheizi!)
|
||||
- Use the count_tokens API in the Anthropic provider for more accurate context window management
|
||||
- Default middle-out compression to on for OpenRouter
|
||||
- Exclude MCP instructions from the prompt if the mode doesn't support MCP
|
||||
- Exclude MCP instructions from the prompt if the agent doesn't support MCP
|
||||
- Add a checkbox to disable the browser tool
|
||||
- Show a warning if checkpoints are taking too long to load
|
||||
- Update the warning text for the VS LM API
|
||||
|
|
@ -2216,13 +2216,13 @@
|
|||
## [3.7.11] - 2025-03-02
|
||||
|
||||
- Don't honor custom max tokens for non thinking models
|
||||
- Include custom modes in mode switching keyboard shortcut
|
||||
- Support read-only modes that can run commands
|
||||
- Include custom agents in agent switching keyboard shortcut
|
||||
- Support read-only agents that can run commands
|
||||
|
||||
## [3.7.10] - 2025-03-01
|
||||
|
||||
- Add Gemini models on Vertex AI (thanks @ashktn!)
|
||||
- Keyboard shortcuts to switch modes (thanks @aheizi!)
|
||||
- Keyboard shortcuts to switch agents (thanks @aheizi!)
|
||||
- Add support for Mermaid diagrams (thanks Cline!)
|
||||
|
||||
## [3.7.9] - 2025-03-01
|
||||
|
|
@ -2287,11 +2287,11 @@
|
|||
|
||||
## [3.3.26] - 2025-02-27
|
||||
|
||||
- Adjust the default prompt for Debug mode to focus more on diagnosis and to require user confirmation before moving on to implementation
|
||||
- Adjust the default prompt for Debug agent to focus more on diagnosis and to require user confirmation before moving on to implementation
|
||||
|
||||
## [3.3.25] - 2025-02-21
|
||||
|
||||
- Add a "Debug" mode that specializes in debugging tricky problems (thanks [Ted Werbel](https://x.com/tedx_ai/status/1891514191179309457) and [Carlos E. Perez](https://x.com/IntuitMachine/status/1891516362486337739)!)
|
||||
- Add a "Debug" agent that specializes in debugging tricky problems (thanks [Ted Werbel](https://x.com/tedx_ai/status/1891514191179309457) and [Carlos E. Perez](https://x.com/IntuitMachine/status/1891516362486337739)!)
|
||||
- Add an experimental "Power Steering" option to significantly improve adherence to role definitions and custom instructions
|
||||
|
||||
## [3.3.24] - 2025-02-20
|
||||
|
|
@ -2310,8 +2310,8 @@
|
|||
- Correctly parse `<think>` reasoning tags from Ollama models (thanks @System233!)
|
||||
- Add support for setting custom preferred languages on the Prompts tab, as well as adding Catalan to the list of languages (thanks @alarno!)
|
||||
- Add a button to delete MCP servers (thanks @hannesrudolph!)
|
||||
- Fix a bug where the button to copy the system prompt preview always copied the Code mode version
|
||||
- Fix a bug where the .roomodes file was not automatically created when adding custom modes from the Prompts tab
|
||||
- Fix a bug where the button to copy the system prompt preview always copied the Code agent version
|
||||
- Fix a bug where the .roomodes file was not automatically created when adding custom agents from the Prompts tab
|
||||
- Allow setting a wildcard (`*`) to auto-approve all command execution (use with caution!)
|
||||
|
||||
## [3.3.21] - 2025-02-17
|
||||
|
|
@ -2320,14 +2320,14 @@
|
|||
- Fix default preferred language for zh-cn and zh-tw (thanks @System233!)
|
||||
- Fix Mistral integration (thanks @d-oit!)
|
||||
- Feature to mention `@terminal` to pull terminal output into context (thanks Cline!)
|
||||
- Fix system prompt to make sure Roo knows about all available modes
|
||||
- Enable streaming mode for OpenAI o1
|
||||
- Fix system prompt to make sure Roo knows about all available agents
|
||||
- Enable streaming agent for OpenAI o1
|
||||
|
||||
## [3.3.20] - 2025-02-14
|
||||
|
||||
- Support project-specific custom modes in a .roomodes file
|
||||
- Support project-specific custom agents in a .roomodes file
|
||||
- Add more Mistral models (thanks @d-oit and @bramburn!)
|
||||
- By popular request, make it so Ask mode can't write to Markdown files and is purely for chatting with
|
||||
- By popular request, make it so Ask agent can't write to Markdown files and is purely for chatting with
|
||||
- Add a setting to control the number of open editor tabs to tell the model about (665 is probably too many!)
|
||||
- Fix race condition bug with entering API key on the welcome screen
|
||||
|
||||
|
|
@ -2335,7 +2335,7 @@
|
|||
|
||||
- Fix a bug where aborting in the middle of file writes would not revert the write
|
||||
- Honor the VS Code theme for dialog backgrounds
|
||||
- Make it possible to clear out the default custom instructions for built-in modes
|
||||
- Make it possible to clear out the default custom instructions for built-in agents
|
||||
- Add a help button that links to our new documentation site (which we would love help from the community to improve!)
|
||||
- Switch checkpoints logic to use a shadow git repository to work around issues with hot reloads and polluting existing repositories (thanks Cline for the inspiration!)
|
||||
|
||||
|
|
@ -2382,7 +2382,7 @@
|
|||
|
||||
## [3.3.12]
|
||||
|
||||
- Bug fix to changing a mode's API configuration on the prompts tab
|
||||
- Bug fix to changing a agent's API configuration on the prompts tab
|
||||
- Add new Gemini models
|
||||
|
||||
## [3.3.11]
|
||||
|
|
@ -2399,11 +2399,11 @@
|
|||
- Enable markdown formatting in o3 and o1 (thanks @nissa-seru!)
|
||||
- Improved terminal shell detection logic (thanks @canvrno for the original and @nissa-seru for the port!)
|
||||
- Fix occasional errors when switching between API profiles (thanks @samhvw8!)
|
||||
- Visual improvements to the list of modes on the prompts tab
|
||||
- Visual improvements to the list of agents on the prompts tab
|
||||
- Fix double-scrollbar in provider dropdown
|
||||
- Visual cleanup to the list of modes on the prompts tab
|
||||
- Improvements to the default prompts for Architect and Ask mode
|
||||
- Allow switching between modes with slash messages like `/ask why is the sky blue?`
|
||||
- Visual cleanup to the list of agents on the prompts tab
|
||||
- Improvements to the default prompts for Architect and Ask agent
|
||||
- Allow switching between agents with slash messages like `/ask why is the sky blue?`
|
||||
|
||||
## [3.3.9]
|
||||
|
||||
|
|
@ -2424,11 +2424,11 @@
|
|||
- Capture reasoning from more variants of DeepSeek R1 (thanks @Szpadel!)
|
||||
- Use an exponential backoff for API retries (if delay after first error is 5s, delay after second consecutive error will be 10s, then 20s, etc)
|
||||
- Add a slider in advanced settings to enable rate limiting requests to avoid overloading providers (i.e. wait at least 10 seconds between API requests)
|
||||
- Prompt tweaks to make Roo better at creating new custom modes for you
|
||||
- Prompt tweaks to make Roo better at creating new custom agents for you
|
||||
|
||||
## [3.3.6]
|
||||
|
||||
- Add a "new task" tool that allows Roo to start new tasks with an initial message and mode
|
||||
- Add a "new task" tool that allows Roo to start new tasks with an initial message and agent
|
||||
- Fix a bug that was preventing the use of qwen-max and potentially other OpenAI-compatible providers (thanks @Szpadel!)
|
||||
- Add support for perplexity/sonar-reasoning (thanks @Szpadel!)
|
||||
- Visual fixes to dropdowns (thanks @psv2522!)
|
||||
|
|
@ -2437,7 +2437,7 @@
|
|||
## [3.3.5]
|
||||
|
||||
- Make information about the conversation's context window usage visible in the task header for humans and in the environment for models (thanks @MuriloFP!)
|
||||
- Add checkboxes to auto-approve mode switch requests (thanks @MuriloFP!)
|
||||
- Add checkboxes to auto-approve agent switch requests (thanks @MuriloFP!)
|
||||
- Add new experimental editing tools `insert_content` (for inserting blocks of text at a line number) and `search_and_replace` (for replacing all instances of a phrase or regex) to complement diff editing and whole file editing (thanks @samhvw8!)
|
||||
- Improved DeepSeek R1 support by capturing reasoning from DeepSeek API as well as more OpenRouter variants, not using system messages, and fixing a crash on empty chunks. Still depends on the DeepSeek API staying up but we'll be in a better place when it does! (thanks @Szpadel!)
|
||||
|
||||
|
|
@ -2449,12 +2449,12 @@
|
|||
|
||||
## [3.3.3]
|
||||
|
||||
- Throw errors sooner when a mode tries to write a restricted file
|
||||
- Styling improvements to the mode/configuration dropdowns (thanks @psv2522!)
|
||||
- Throw errors sooner when a agent tries to write a restricted file
|
||||
- Styling improvements to the agent/configuration dropdowns (thanks @psv2522!)
|
||||
|
||||
## [3.3.2]
|
||||
|
||||
- Add a dropdown to select the API configuration for a mode in the Prompts tab
|
||||
- Add a dropdown to select the API configuration for a agent in the Prompts tab
|
||||
- Fix bug where always allow wasn't showing up for MCP tools
|
||||
- Improve OpenRouter DeepSeek-R1 integration by setting temperature to the recommended 0.6 and displaying the reasoning output (thanks @Szpadel - it's really fascinating to watch!)
|
||||
- Allow specifying a custom OpenRouter base URL (thanks @dairui1!)
|
||||
|
|
@ -2463,20 +2463,20 @@
|
|||
## [3.3.1]
|
||||
|
||||
- Fix issue where the terminal management system was creating unnecessary new terminals (thanks @evan-fannin!)
|
||||
- Fix bug where the saved API provider for a mode wasn't being selected after a mode switch command
|
||||
- Fix bug where the saved API provider for a agent wasn't being selected after a agent switch command
|
||||
|
||||
## [3.3.0]
|
||||
|
||||
- Native VS Code code actions support with quick fixes and refactoring options
|
||||
- Modes can now request to switch to other modes when needed
|
||||
- Ask and Architect modes can now edit markdown files
|
||||
- Custom modes can now be restricted to specific file patterns (for example, a technical writer who can only edit markdown files 👋)
|
||||
- Agents can now request to switch to other agents when needed
|
||||
- Ask and Architect agents can now edit markdown files
|
||||
- Custom agents can now be restricted to specific file patterns (for example, a technical writer who can only edit markdown files 👋)
|
||||
- Support for configuring the Bedrock provider with AWS Profiles
|
||||
- New Roo Code community Discord at https://roocode.com/discord!
|
||||
|
||||
## [3.2.8]
|
||||
|
||||
- Fixed bug opening custom modes settings JSON
|
||||
- Fixed bug opening custom agents settings JSON
|
||||
- Reverts provider key entry back to checking onInput instead of onChange to hopefully address issues entering API keys (thanks @samhvw8!)
|
||||
- Added explicit checkbox to use Azure for OpenAI compatible providers (thanks @samhvw8!)
|
||||
- Fixed Glama usage reporting (thanks @punkpeye!)
|
||||
|
|
@ -2488,7 +2488,7 @@
|
|||
|
||||
## [3.2.6]
|
||||
|
||||
- Fix bug with role definition overrides for built-in modes
|
||||
- Fix bug with role definition overrides for built-in agents
|
||||
|
||||
## [3.2.5]
|
||||
|
||||
|
|
@ -2506,13 +2506,13 @@
|
|||
|
||||
- **Name Change From Roo Cline to Roo Code:** We're excited to announce our new name! After growing beyond 50,000 installations, we've rebranded from Roo Cline to Roo Code to better reflect our identity as we chart our own course.
|
||||
|
||||
- **Custom Modes:** Create your own personas for Roo Code! While our built-in modes (Code, Architect, Ask) are still here, you can now shape entirely new ones:
|
||||
- **Custom Agents:** Create your own personas for Roo Code! While our built-in agents (Code, Architect, Ask) are still here, you can now shape entirely new ones:
|
||||
- Define custom prompts
|
||||
- Choose which tools each mode can access
|
||||
- Choose which tools each agent can access
|
||||
- Create specialized assistants for any workflow
|
||||
- Just type "Create a new mode for <X>" or visit the Prompts tab in the top menu to get started
|
||||
- Just type "Create a new agent for <X>" or visit the Prompts tab in the top menu to get started
|
||||
|
||||
Join us at https://www.reddit.com/r/RooCode to share your custom modes and be part of our next chapter!
|
||||
Join us at https://www.reddit.com/r/RooCode to share your custom agents and be part of our next chapter!
|
||||
|
||||
## [3.1.7]
|
||||
|
||||
|
|
@ -2548,7 +2548,7 @@ Join us at https://www.reddit.com/r/RooCode to share your custom modes and be pa
|
|||
|
||||
## [3.1.0]
|
||||
|
||||
- You can now customize the role definition and instructions for each chat mode (Code, Architect, and Ask), either through the new Prompts tab in the top menu or mode-specific .clinerules-mode files. Prompt Enhancements have also been revamped: the "Enhance Prompt" button now works with any provider and API configuration, giving you the ability to craft messages with fully customizable prompts for even better results.
|
||||
- You can now customize the role definition and instructions for each chat agent (Code, Architect, and Ask), either through the new Prompts tab in the top menu or agent-specific .clinerules-agent files. Prompt Enhancements have also been revamped: the "Enhance Prompt" button now works with any provider and API configuration, giving you the ability to craft messages with fully customizable prompts for even better results.
|
||||
- Add a button to copy markdown out of the chat
|
||||
|
||||
## [3.0.3]
|
||||
|
|
@ -2565,7 +2565,7 @@ Join us at https://www.reddit.com/r/RooCode to share your custom modes and be pa
|
|||
|
||||
## [3.0.0]
|
||||
|
||||
- This release adds chat modes! Now you can ask Roo Code questions about system architecture or the codebase without immediately jumping into writing code. You can even assign different API configuration profiles to each mode if you prefer to use different models for thinking vs coding. Would love feedback in the new Roo Code Reddit! https://www.reddit.com/r/RooCode
|
||||
- This release adds chat agents! Now you can ask Roo Code questions about system architecture or the codebase without immediately jumping into writing code. You can even assign different API configuration profiles to each agent if you prefer to use different models for thinking vs coding. Would love feedback in the new Roo Code Reddit! https://www.reddit.com/r/RooCode
|
||||
|
||||
## [2.2.46]
|
||||
|
||||
|
|
@ -2750,7 +2750,7 @@ Join us at https://www.reddit.com/r/RooCode to share your custom modes and be pa
|
|||
|
||||
## [2.1.17]
|
||||
|
||||
- Switch to search/replace diffs in experimental diff editing mode
|
||||
- Switch to search/replace diffs in experimental diff editing agent
|
||||
|
||||
## [2.1.16]
|
||||
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@ Roo Code respects your privacy and is committed to transparency about how we han
|
|||
|
||||
### **Where Your Data Goes (And Where It Doesn’t)**
|
||||
|
||||
- **Code & Files**: Roo Code accesses files on your local machine when needed for AI-assisted features. When you send commands to Roo Code, relevant files may be transmitted to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. If you select Roo Code Cloud as the model provider (proxy mode), your code may transit Roo Code servers only to forward it to the upstream provider. We do not store your code; it is deleted immediately after forwarding. Otherwise, your code is sent directly to the provider. AI providers may store data per their privacy policies.
|
||||
- **Code & Files**: Roo Code accesses files on your local machine when needed for AI-assisted features. When you send commands to Roo Code, relevant files may be transmitted to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. If you select Roo Code Cloud as the model provider (proxy agent), your code may transit Roo Code servers only to forward it to the upstream provider. We do not store your code; it is deleted immediately after forwarding. Otherwise, your code is sent directly to the provider. AI providers may store data per their privacy policies.
|
||||
- **Commands**: Any commands executed through Roo Code happen on your local environment. However, when you use AI-powered features, the relevant code and context from your commands may be transmitted to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not have access to or store this data, but AI providers may process it per their privacy policies.
|
||||
- **Prompts & AI Requests**: When you use AI-powered features, your prompts and relevant project context are sent to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not store or process this data. These AI providers have their own privacy policies and may store data per their terms of service. If you choose Roo Code Cloud as the provider (proxy mode), prompts may transit Roo Code servers only to forward them to the upstream model and are not stored.
|
||||
- **Prompts & AI Requests**: When you use AI-powered features, your prompts and relevant project context are sent to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not store or process this data. These AI providers have their own privacy policies and may store data per their terms of service. If you choose Roo Code Cloud as the provider (proxy agent), prompts may transit Roo Code servers only to forward them to the upstream model and are not stored.
|
||||
- **API Keys & Credentials**: If you enter an API key (e.g., to connect an AI model), it is stored locally on your device and never sent to us or any third party, except the provider you have chosen.
|
||||
- **Telemetry (Usage Data)**: We collect anonymous feature usage and error data to help us improve Roo Code. This telemetry is powered by PostHog and includes your VS Code machine ID, feature usage patterns, and exception reports. This telemetry does **not** collect personally identifiable information, your code, or AI prompts. You can opt out of this telemetry at any time through the settings.
|
||||
- **Marketplace Requests**: When you browse or search the Marketplace for Model Configuration Profiles (MCPs) or Custom Modes, Roo Code makes a secure API call to Roo Code's backend servers to retrieve listing information. These requests send only the query parameters (e.g., extension version, search term) necessary to fulfill the request and do not include your code, prompts, or personally identifiable information.
|
||||
- **Marketplace Requests**: When you browse or search the Marketplace for Model Configuration Profiles (MCPs) or Custom Agents, Roo Code makes a secure API call to Roo Code's backend servers to retrieve listing information. These requests send only the query parameters (e.g., extension version, search term) necessary to fulfill the request and do not include your code, prompts, or personally identifiable information.
|
||||
|
||||
### **How We Use Your Data (If Collected)**
|
||||
|
||||
|
|
|
|||
22
README.md
22
README.md
|
|
@ -35,32 +35,32 @@
|
|||
- [简体中文](locales/zh-CN/README.md)
|
||||
- [繁體中文](locales/zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## What Can Roo Code Do For YOU?
|
||||
|
||||
- Generate Code from natural language descriptions and specs
|
||||
- Adapt with Modes: Code, Architect, Ask, Debug, and Custom Modes
|
||||
- Adapt with Agents: Code, Architect, Ask, Debug, and Custom Agents
|
||||
- Refactor & Debug existing code
|
||||
- Write & Update documentation
|
||||
- Answer Questions about your codebase
|
||||
- Automate repetitive tasks
|
||||
- Utilize MCP Servers
|
||||
|
||||
## Modes
|
||||
## Agents
|
||||
|
||||
Roo Code adapts to how you work:
|
||||
|
||||
- Code Mode: everyday coding, edits, and file ops
|
||||
- Architect Mode: plan systems, specs, and migrations
|
||||
- Ask Mode: fast answers, explanations, and docs
|
||||
- Debug Mode: trace issues, add logs, isolate root causes
|
||||
- Custom Modes: build specialized modes for your team or workflow
|
||||
- Code Agent: everyday coding, edits, and file ops
|
||||
- Architect Agent: plan systems, specs, and migrations
|
||||
- Ask Agent: fast answers, explanations, and docs
|
||||
- Debug Agent: trace issues, add logs, isolate root causes
|
||||
- Custom Agents: build specialized agents for your team or workflow
|
||||
- Roomote Control: Roomote Control lets you remotely control tasks running in your local VS Code instance.
|
||||
|
||||
Learn more: [Using Modes](https://docs.roocode.com/basic-usage/using-modes) • [Custom Modes](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Learn more: [Using Agents](https://docs.roocode.com/basic-usage/using-agents) • [Custom Agents](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Tutorial & Feature Videos
|
||||
|
||||
|
|
@ -69,7 +69,7 @@ Learn more: [Using Modes](https://docs.roocode.com/basic-usage/using-modes) •
|
|||
| | | |
|
||||
| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
||||
| <a href="https://www.youtube.com/watch?v=Mcq3r1EPZ-4"><img src="https://img.youtube.com/vi/Mcq3r1EPZ-4/maxresdefault.jpg" width="100%"></a><br><b>Installing Roo Code</b> | <a href="https://www.youtube.com/watch?v=ZBML8h5cCgo"><img src="https://img.youtube.com/vi/ZBML8h5cCgo/maxresdefault.jpg" width="100%"></a><br><b>Configuring Profiles</b> | <a href="https://www.youtube.com/watch?v=r1bpod1VWhg"><img src="https://img.youtube.com/vi/r1bpod1VWhg/maxresdefault.jpg" width="100%"></a><br><b>Codebase Indexing</b> |
|
||||
| <a href="https://www.youtube.com/watch?v=iiAv1eKOaxk"><img src="https://img.youtube.com/vi/iiAv1eKOaxk/maxresdefault.jpg" width="100%"></a><br><b>Custom Modes</b> | <a href="https://www.youtube.com/watch?v=Ho30nyY332E"><img src="https://img.youtube.com/vi/Ho30nyY332E/maxresdefault.jpg" width="100%"></a><br><b>Checkpoints</b> | <a href="https://www.youtube.com/watch?v=6h5vB9PpoPk"><img src="https://img.youtube.com/vi/6h5vB9PpoPk/maxresdefault.jpg" width="100%"></a><br><b>Todo Lists</b> |
|
||||
| <a href="https://www.youtube.com/watch?v=iiAv1eKOaxk"><img src="https://img.youtube.com/vi/iiAv1eKOaxk/maxresdefault.jpg" width="100%"></a><br><b>Custom Agents</b> | <a href="https://www.youtube.com/watch?v=Ho30nyY332E"><img src="https://img.youtube.com/vi/Ho30nyY332E/maxresdefault.jpg" width="100%"></a><br><b>Checkpoints</b> | <a href="https://www.youtube.com/watch?v=6h5vB9PpoPk"><img src="https://img.youtube.com/vi/6h5vB9PpoPk/maxresdefault.jpg" width="100%"></a><br><b>Todo Lists</b> |
|
||||
|
||||
</div>
|
||||
<p align="center">
|
||||
|
|
@ -105,7 +105,7 @@ pnpm install
|
|||
|
||||
There are several ways to run the Roo Code extension:
|
||||
|
||||
### Development Mode (F5)
|
||||
### Development Agent (F5)
|
||||
|
||||
For active development, use VSCode's built-in debugging:
|
||||
|
||||
|
|
|
|||
|
|
@ -35,10 +35,10 @@ export default async function ExtensionPage() {
|
|||
The Open Source AI Coding Assistant for serious work.
|
||||
</h1>
|
||||
<p className="mt-4 max-w-lg text-lg text-muted-foreground text-center md:text-left sm:mt-6">
|
||||
Specialized modes stay on task and ship great code.
|
||||
Specialized agents stay on task and ship great code.
|
||||
<br />
|
||||
Fully model-agnostic so you can use the best (or most cost-effective) model for
|
||||
each task.
|
||||
Fully model-agnostic so you can use the best (or most cost-effective) model for each
|
||||
task.
|
||||
</p>
|
||||
<p className="max-w-lg text-lg text-muted-foreground text-center md:text-left sm:mt-6">
|
||||
Stop chasing this week's hot new model or CLI tool and go deep with Roo Code.
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ const pricingTiers: PricingTier[] = [
|
|||
price: "Free",
|
||||
priceSuffix: "inference",
|
||||
description: "The best local coding agent",
|
||||
features: ["Unlimited local use", "Bring your own model", "Powerful, extensible modes", "Community support"],
|
||||
features: ["Unlimited local use", "Bring your own model", "Powerful, extensible agents", "Community support"],
|
||||
cta: {
|
||||
text: "Install Now",
|
||||
href: EXTERNAL_LINKS.MARKETPLACE,
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ export default function Privacy() {
|
|||
<li>
|
||||
<strong>
|
||||
Your source code does not transit Roo Code servers unless you explicitly choose Roo Code
|
||||
as a model provider (proxy mode).
|
||||
as a model provider (proxy agent).
|
||||
</strong>{" "}
|
||||
When Roo Code Cloud is your model provider, your code briefly transits Roo Code servers only
|
||||
to forward it to the upstream model, is not stored, and is deleted immediately after
|
||||
|
|
@ -127,7 +127,7 @@ export default function Privacy() {
|
|||
Workspace Configuration
|
||||
</td>
|
||||
<td className="border border-border px-4 py-2">
|
||||
Org settings, allow‑lists, rules files, modes, dashboards
|
||||
Org settings, allow‑lists, rules files, agents, dashboards
|
||||
</td>
|
||||
<td className="border border-border px-4 py-2">You / Extension (when signed in)</td>
|
||||
</tr>
|
||||
|
|
@ -214,10 +214,10 @@ export default function Privacy() {
|
|||
</td>
|
||||
<td className="border border-border px-4 py-2">
|
||||
Your chosen model provider (direct client → provider TLS), or Roo Code (proxy
|
||||
mode; transit‑only) when you select Roo Code as the provider
|
||||
agent; transit‑only) when you select Roo Code as the provider
|
||||
</td>
|
||||
<td className="border border-border px-4 py-2">
|
||||
Roo Code servers (except proxy mode; transit‑only, no storage); ad networks;
|
||||
Roo Code servers (except proxy agent; transit‑only, no storage); ad networks;
|
||||
model‑training pipelines
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ export function ContactForm({ formType, buttonText, buttonClassName }: ContactFo
|
|||
"Content-Type": "application/json",
|
||||
Accept: "application/json",
|
||||
},
|
||||
mode: "cors", // Ensure proper CORS handling
|
||||
agent: "cors", // Ensure proper CORS handling
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ export function CloudSection() {
|
|||
<h4 className="text-lg font-semibold mb-2">Zero Drift via Role Constraints</h4>
|
||||
<p className="text-muted-foreground mb-6">
|
||||
Fear of agents going haywire is solved by architecture, not prompt engineering. Cloud Agents
|
||||
enforce the strict Modes you use locally.
|
||||
enforce the strict Agents you use locally.
|
||||
</p>
|
||||
<ul className="space-y-4">
|
||||
<li className="flex gap-3 items-start">
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ export function CodeExample() {
|
|||
return () => clearTimeout(timer)
|
||||
} else if (textIndex >= codeExamples[currentMode].code.length) {
|
||||
setIsTyping(false)
|
||||
// switch to next mode after a delay
|
||||
// switch to next agent after a delay
|
||||
const timer = setTimeout(() => {
|
||||
const nextMode = currentMode === "code" ? "architect" : currentMode === "architect" ? "debug" : "code"
|
||||
switchMode(nextMode)
|
||||
|
|
@ -34,14 +34,14 @@ export function CodeExample() {
|
|||
}
|
||||
}, [isTyping, textIndex, currentMode])
|
||||
|
||||
// switch modes with typing effect
|
||||
const switchMode = (mode: "code" | "architect" | "debug") => {
|
||||
setCurrentMode(mode)
|
||||
// switch agents with typing effect
|
||||
const switchMode = (agent: "code" | "architect" | "debug") => {
|
||||
setCurrentMode(agent)
|
||||
setCurrentText("")
|
||||
setTextIndex(0)
|
||||
setIsTyping(true)
|
||||
|
||||
// Reset scroll position when switching modes
|
||||
// Reset scroll position when switching agents
|
||||
if (codeContainerRef.current) {
|
||||
codeContainerRef.current.scrollTop = 0
|
||||
}
|
||||
|
|
@ -102,7 +102,7 @@ export function CodeExample() {
|
|||
|
||||
const codeExamples = {
|
||||
code: {
|
||||
code: `// Code Mode
|
||||
code: `// Code Agent
|
||||
You: Generate a React component for a user profile card
|
||||
|
||||
Roo: Here's a React component for a user profile card:
|
||||
|
|
@ -161,7 +161,7 @@ export const UserProfile: React.FC<UserProfileProps> = ({
|
|||
};`,
|
||||
},
|
||||
architect: {
|
||||
code: `// Architect Mode
|
||||
code: `// Architect Agent
|
||||
// Project: E-commerce Platform
|
||||
// Request: Design the authentication system
|
||||
|
||||
|
|
@ -199,7 +199,7 @@ auth/
|
|||
Would you like me to generate any of these files?`,
|
||||
},
|
||||
debug: {
|
||||
code: `// Debug Mode
|
||||
code: `// Debug Agent
|
||||
// Analyzing error: TypeError: Cannot read property 'map' of undefined
|
||||
|
||||
Roo has analyzed your code and found 3 issues:
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@ export interface Feature {
|
|||
export const features: Feature[] = [
|
||||
{
|
||||
icon: Users2,
|
||||
title: "Specialized modes",
|
||||
title: "Specialized agents",
|
||||
description:
|
||||
"Planning, Architecture, Debugging and beyond: Roo's modes stay on-task and deliver. They even know when to hand off work to other modes. Create your own or download from the marketplace.",
|
||||
"Planning, Architecture, Debugging and beyond: Roo's agents stay on-task and deliver. They even know when to hand off work to other agents. Create your own or download from the marketplace.",
|
||||
},
|
||||
{
|
||||
icon: ReplaceAll,
|
||||
|
|
@ -45,7 +45,7 @@ export const features: Feature[] = [
|
|||
icon: Boxes,
|
||||
title: "Large task coordination",
|
||||
description:
|
||||
"Orchestrator mode handles large tasks by coordinating tasks for other agents, running for hours and delivering.",
|
||||
"Orchestrator agent handles large tasks by coordinating tasks for other agents, running for hours and delivering.",
|
||||
},
|
||||
{
|
||||
icon: TextSearch,
|
||||
|
|
|
|||
|
|
@ -17,22 +17,22 @@ const MODEL_LOGOS = [
|
|||
]
|
||||
const MODE_EXAMPLES = [
|
||||
{
|
||||
name: "Architect",
|
||||
name: "Planner",
|
||||
description: "Plans complex changes without making changes.",
|
||||
icon: Map,
|
||||
},
|
||||
{
|
||||
name: "Code",
|
||||
name: "Coder",
|
||||
description: "Implements, refactors and optimizes code.",
|
||||
icon: Code,
|
||||
},
|
||||
{
|
||||
name: "Ask",
|
||||
name: "Explainer",
|
||||
description: "Explains functionality and program behavior.",
|
||||
icon: MessageCircleQuestion,
|
||||
},
|
||||
{
|
||||
name: "Debug",
|
||||
name: "Debugger",
|
||||
description: "Diagnoses issues, traces failures, and proposes targeted, reliable fixes.",
|
||||
icon: Bug,
|
||||
},
|
||||
|
|
@ -109,7 +109,7 @@ export function PillarsSection() {
|
|||
<Users2 className="size-8 text-violet-600 shrink-0 mt-1" strokeWidth={1.5} />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-2xl font-bold mb-1">Role-specific Modes</h3>
|
||||
<h3 className="text-2xl font-bold mb-1">Role-specific Agents</h3>
|
||||
<h4 className="font-semibold text-lg">On-task and under control.</h4>
|
||||
<div className="text-muted-foreground my-4 space-y-1">
|
||||
<p>
|
||||
|
|
@ -117,29 +117,29 @@ export function PillarsSection() {
|
|||
real damage.
|
||||
</p>
|
||||
<p>
|
||||
Roo's Modes keep models focused on a given task and limit their access to
|
||||
Roo's Agents keep models focused on a given task and limit their access to
|
||||
tools which are relevant to their role, keeping the context window clearer and
|
||||
avoiding surprises.
|
||||
</p>
|
||||
<p>
|
||||
Modes are even smart enough to ask to switch to another when stepping outside
|
||||
Agents are even smart enough to ask to switch to another when stepping outside
|
||||
their responsibilities.
|
||||
</p>
|
||||
</div>
|
||||
<div className="mt-6">
|
||||
<span className="text-muted-foreground text-sm">Some examples</span>
|
||||
<ul className="flex gap-2 flex-wrap mt-2">
|
||||
{MODE_EXAMPLES.map((mode) => {
|
||||
const Icon = mode.icon
|
||||
{MODE_EXAMPLES.map((agent) => {
|
||||
const Icon = agent.icon
|
||||
return (
|
||||
<li
|
||||
key={mode.name}
|
||||
key={agent.name}
|
||||
className="rounded-lg border bg-border/40 w-full md:w-[30%] min-w-[200px] text-sm px-3 py-2 flex gap-1">
|
||||
<Icon className="text-muted-foreground size-4 shrink-0 mt-0.5" />
|
||||
<div>
|
||||
<p className="font-semibold">{mode.name}</p>
|
||||
<p className="font-semibold">{agent.name}</p>
|
||||
<p className="text-muted-foreground text-xs">
|
||||
{mode.description}
|
||||
{agent.description}
|
||||
</p>
|
||||
</div>
|
||||
</li>
|
||||
|
|
|
|||
|
|
@ -402,7 +402,7 @@ export function UseExamplesSection({ agentTitle = false }: { agentTitle?: boolea
|
|||
|
||||
{/* Mobile: Vertical Staggered List */}
|
||||
<div className="md:hidden flex flex-col gap-2 px-2 pb-12 max-w-md mx-auto">
|
||||
<AnimatePresence mode="popLayout">
|
||||
<AnimatePresence agent="popLayout">
|
||||
{positionedItems.slice(0, showAllMobile ? undefined : 8).map((item, index) => (
|
||||
<motion.div
|
||||
key={item.use} // Use a unique key for proper animation tracking
|
||||
|
|
|
|||
|
|
@ -64,9 +64,9 @@ export function handleConsentAccept(): void {
|
|||
|
||||
/**
|
||||
* Handle user rejecting cookies
|
||||
* Switches PostHog to cookieless (memory-only) mode
|
||||
* Switches PostHog to cookieless (memory-only) agent
|
||||
*/
|
||||
export function handleConsentReject(): void {
|
||||
// User rejected - stick to cookieless mode
|
||||
// User rejected - stick to cookieless agent
|
||||
dispatchConsentEvent(false)
|
||||
}
|
||||
|
|
|
|||
28
locales/ca/README.md
generated
28
locales/ca/README.md
generated
|
|
@ -35,41 +35,41 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## Què pot fer Roo Code per TU?
|
||||
|
||||
- Generar codi a partir de descripcions en llenguatge natural
|
||||
- Adaptar-se amb modes: Codi, Arquitecte, Pregunta, Depuració i Modes personalitzats
|
||||
- Adaptar-se amb agents: Codi, Arquitecte, Pregunta, Depuració i Agents personalitzats
|
||||
- Refactoritzar i depurar codi existent
|
||||
- Escriure i actualitzar documentació
|
||||
- Respondre preguntes sobre la teva base de codi
|
||||
- Automatitzar tasques repetitives
|
||||
- Utilitzar servidors MCP
|
||||
|
||||
## Modes
|
||||
## Agents
|
||||
|
||||
Roo Code s'adapta a la teva manera de treballar, no a l'inrevés:
|
||||
|
||||
- Mode Codi: codificació diària, edicions i operacions de fitxers
|
||||
- Mode Arquitecte: planificar sistemes, especificacions i migracions
|
||||
- Mode Pregunta: respostes ràpides, explicacions i documents
|
||||
- Mode Depuració: rastrejar problemes, afegir registres, aïllar les causes arrel
|
||||
- Modes personalitzats: crea modes especialitzats per al teu equip o flux de treball
|
||||
- Agent Codi: codificació diària, edicions i operacions de fitxers
|
||||
- Agent Arquitecte: planificar sistemes, especificacions i migracions
|
||||
- Agent Pregunta: respostes ràpides, explicacions i documents
|
||||
- Agent Depuració: rastrejar problemes, afegir registres, aïllar les causes arrel
|
||||
- Agents personalitzats: crea agents especialitzats per al teu equip o flux de treball
|
||||
- Roomote Control: Roomote Control et permet controlar a distància tasques que s'executen a la teva instància local de VS Code.
|
||||
|
||||
Més informació: [Ús de Modes](https://docs.roocode.com/basic-usage/using-modes) • [Modes personalitzats](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Més informació: [Ús de Agents](https://docs.roocode.com/basic-usage/using-agents) • [Agents personalitzats](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Tutorials i vídeos de funcionalitats
|
||||
|
||||
<div align="center">
|
||||
|
||||
| | | |
|
||||
| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
||||
| <a href="https://www.youtube.com/watch?v=Mcq3r1EPZ-4"><img src="https://img.youtube.com/vi/Mcq3r1EPZ-4/maxresdefault.jpg" width="100%"></a><br><b>Instal·lant Roo Code</b> | <a href="https://www.youtube.com/watch?v=ZBML8h5cCgo"><img src="https://img.youtube.com/vi/ZBML8h5cCgo/maxresdefault.jpg" width="100%"></a><br><b>Configurant perfils</b> | <a href="https://www.youtube.com/watch?v=r1bpod1VWhg"><img src="https://img.youtube.com/vi/r1bpod1VWhg/maxresdefault.jpg" width="100%"></a><br><b>Indexació de la base de codi</b> |
|
||||
| <a href="https://www.youtube.com/watch?v=iiAv1eKOaxk"><img src="https://img.youtube.com/vi/iiAv1eKOaxk/maxresdefault.jpg" width="100%"></a><br><b>Modes personalitzats</b> | <a href="https://www.youtube.com/watch?v=Ho30nyY332E"><img src="https://img.youtube.com/vi/Ho30nyY332E/maxresdefault.jpg" width="100%"></a><br><b>Punts de control</b> | <a href="https://www.youtube.com/watch?v=6h5vB9PpoPk"><img src="https://img.youtube.com/vi/6h5vB9PpoPk/maxresdefault.jpg" width="100%"></a><br><b>Llistes de tasques</b> |
|
||||
| | | |
|
||||
| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
||||
| <a href="https://www.youtube.com/watch?v=Mcq3r1EPZ-4"><img src="https://img.youtube.com/vi/Mcq3r1EPZ-4/maxresdefault.jpg" width="100%"></a><br><b>Instal·lant Roo Code</b> | <a href="https://www.youtube.com/watch?v=ZBML8h5cCgo"><img src="https://img.youtube.com/vi/ZBML8h5cCgo/maxresdefault.jpg" width="100%"></a><br><b>Configurant perfils</b> | <a href="https://www.youtube.com/watch?v=r1bpod1VWhg"><img src="https://img.youtube.com/vi/r1bpod1VWhg/maxresdefault.jpg" width="100%"></a><br><b>Indexació de la base de codi</b> |
|
||||
| <a href="https://www.youtube.com/watch?v=iiAv1eKOaxk"><img src="https://img.youtube.com/vi/iiAv1eKOaxk/maxresdefault.jpg" width="100%"></a><br><b>Agents personalitzats</b> | <a href="https://www.youtube.com/watch?v=Ho30nyY332E"><img src="https://img.youtube.com/vi/Ho30nyY332E/maxresdefault.jpg" width="100%"></a><br><b>Punts de control</b> | <a href="https://www.youtube.com/watch?v=6h5vB9PpoPk"><img src="https://img.youtube.com/vi/6h5vB9PpoPk/maxresdefault.jpg" width="100%"></a><br><b>Llistes de tasques</b> |
|
||||
|
||||
</div>
|
||||
<p align="center">
|
||||
|
|
@ -105,7 +105,7 @@ pnpm install
|
|||
|
||||
Hi ha diverses maneres d'executar l'extensió Roo Code:
|
||||
|
||||
### Mode de desenvolupament (F5)
|
||||
### Agent de desenvolupament (F5)
|
||||
|
||||
Per al desenvolupament actiu, utilitza la depuració integrada de VSCode:
|
||||
|
||||
|
|
|
|||
4
locales/de/README.md
generated
4
locales/de/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code passt sich an deine Arbeitsweise an, nicht umgekehrt:
|
|||
- Benutzerdefinierte Modi: erstelle spezialisierte Modi für dein Team oder deinen Workflow
|
||||
- Roomote Control: Mit Roomote Control kannst du Aufgaben in deiner lokalen VS Code-Instanz aus der Ferne steuern.
|
||||
|
||||
Mehr erfahren: [Modi verwenden](https://docs.roocode.com/basic-usage/using-modes) • [Benutzerdefinierte Modi](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Mehr erfahren: [Modi verwenden](https://docs.roocode.com/basic-usage/using-agents) • [Benutzerdefinierte Modi](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Tutorial- & Feature-Videos
|
||||
|
||||
|
|
|
|||
4
locales/es/README.md
generated
4
locales/es/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code se adapta a tu forma de trabajar, no al revés:
|
|||
- Modos Personalizados: crea modos especializados para tu equipo o flujo de trabajo
|
||||
- Roomote Control: Roomote Control te permite controlar de forma remota tareas que se ejecutan en tu instancia local de VS Code.
|
||||
|
||||
Más info: [Usar Modos](https://docs.roocode.com/basic-usage/using-modes) • [Modos Personalizados](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Más info: [Usar Modos](https://docs.roocode.com/basic-usage/using-agents) • [Modos Personalizados](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Tutoriales y vídeos de funcionalidades
|
||||
|
||||
|
|
|
|||
28
locales/fr/README.md
generated
28
locales/fr/README.md
generated
|
|
@ -35,41 +35,41 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## Que peut faire Roo Code pour VOUS ?
|
||||
|
||||
- Générer du code à partir de descriptions en langage naturel
|
||||
- S'adapter avec les Modes : Code, Architecte, Demande, Débogage et Modes Personnalisés
|
||||
- S'adapter avec les Agents : Code, Architecte, Demande, Débogage et Agents Personnalisés
|
||||
- Refactoriser & déboguer du code existant
|
||||
- Rédiger & mettre à jour la documentation
|
||||
- Répondre aux questions sur votre base de code
|
||||
- Automatiser les tâches répétitives
|
||||
- Utiliser les serveurs MCP
|
||||
|
||||
## Modes
|
||||
## Agents
|
||||
|
||||
Roo Code s'adapte à votre façon de travailler, pas l'inverse :
|
||||
|
||||
- Mode Code : codage quotidien, modifications et opérations sur les fichiers
|
||||
- Mode Architecte : planifier les systèmes, les spécifications et les migrations
|
||||
- Mode Demande : réponses rapides, explications et documents
|
||||
- Mode Débogage : tracer les problèmes, ajouter des journaux, isoler les causes profondes
|
||||
- Modes Personnalisés : créez des modes spécialisés pour votre équipe ou votre flux de travail
|
||||
- Agent Code : codage quotidien, modifications et opérations sur les fichiers
|
||||
- Agent Architecte : planifier les systèmes, les spécifications et les migrations
|
||||
- Agent Demande : réponses rapides, explications et documents
|
||||
- Agent Débogage : tracer les problèmes, ajouter des journaux, isoler les causes profondes
|
||||
- Agents Personnalisés : créez des agents spécialisés pour votre équipe ou votre flux de travail
|
||||
- Roomote Control : Roomote Control te permet de piloter à distance les tâches exécutées dans ton instance VS Code locale.
|
||||
|
||||
En savoir plus : [Utiliser les Modes](https://docs.roocode.com/basic-usage/using-modes) • [Modes personnalisés](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
En savoir plus : [Utiliser les Agents](https://docs.roocode.com/basic-usage/using-agents) • [Agents personnalisés](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Tutoriels & Vidéos de fonctionnalités
|
||||
|
||||
<div align="center">
|
||||
|
||||
| | | |
|
||||
| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
||||
| <a href="https://www.youtube.com/watch?v=Mcq3r1EPZ-4"><img src="https://img.youtube.com/vi/Mcq3r1EPZ-4/maxresdefault.jpg" width="100%"></a><br><b>Installer Roo Code</b> | <a href="https://www.youtube.com/watch?v=ZBML8h5cCgo"><img src="https://img.youtube.com/vi/ZBML8h5cCgo/maxresdefault.jpg" width="100%"></a><br><b>Configurer les profils</b> | <a href="https://www.youtube.com/watch?v=r1bpod1VWhg"><img src="https://img.youtube.com/vi/r1bpod1VWhg/maxresdefault.jpg" width="100%"></a><br><b>Indexation de la base de code</b> |
|
||||
| <a href="https://www.youtube.com/watch?v=iiAv1eKOaxk"><img src="https://img.youtube.com/vi/iiAv1eKOaxk/maxresdefault.jpg" width="100%"></a><br><b>Modes personnalisés</b> | <a href="https://www.youtube.com/watch?v=Ho30nyY332E"><img src="https://img.youtube.com/vi/Ho30nyY332E/maxresdefault.jpg" width="100%"></a><br><b>Checkpoints</b> | <a href="https://www.youtube.com/watch?v=6h5vB9PpoPk"><img src="https://img.youtube.com/vi/6h5vB9PpoPk/maxresdefault.jpg" width="100%"></a><br><b>Listes de tâches</b> |
|
||||
| | | |
|
||||
| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
||||
| <a href="https://www.youtube.com/watch?v=Mcq3r1EPZ-4"><img src="https://img.youtube.com/vi/Mcq3r1EPZ-4/maxresdefault.jpg" width="100%"></a><br><b>Installer Roo Code</b> | <a href="https://www.youtube.com/watch?v=ZBML8h5cCgo"><img src="https://img.youtube.com/vi/ZBML8h5cCgo/maxresdefault.jpg" width="100%"></a><br><b>Configurer les profils</b> | <a href="https://www.youtube.com/watch?v=r1bpod1VWhg"><img src="https://img.youtube.com/vi/r1bpod1VWhg/maxresdefault.jpg" width="100%"></a><br><b>Indexation de la base de code</b> |
|
||||
| <a href="https://www.youtube.com/watch?v=iiAv1eKOaxk"><img src="https://img.youtube.com/vi/iiAv1eKOaxk/maxresdefault.jpg" width="100%"></a><br><b>Agents personnalisés</b> | <a href="https://www.youtube.com/watch?v=Ho30nyY332E"><img src="https://img.youtube.com/vi/Ho30nyY332E/maxresdefault.jpg" width="100%"></a><br><b>Checkpoints</b> | <a href="https://www.youtube.com/watch?v=6h5vB9PpoPk"><img src="https://img.youtube.com/vi/6h5vB9PpoPk/maxresdefault.jpg" width="100%"></a><br><b>Listes de tâches</b> |
|
||||
|
||||
</div>
|
||||
<p align="center">
|
||||
|
|
@ -105,7 +105,7 @@ pnpm install
|
|||
|
||||
Il existe plusieurs façons d'exécuter l'extension Roo Code :
|
||||
|
||||
### Mode développement (F5)
|
||||
### Agent développement (F5)
|
||||
|
||||
Pour un développement actif, utilisez le débogage intégré de VSCode :
|
||||
|
||||
|
|
|
|||
4
locales/hi/README.md
generated
4
locales/hi/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@
|
|||
- कस्टम मोड: अपनी टीम या वर्कफ़्लो के लिए विशेष मोड बनाएं
|
||||
- Roomote Control: Roomote Control से तुम अपनी लोकल VS Code इंस्टेंस में चल रही टास्क को रिमोट से कंट्रोल कर सकते हो।
|
||||
|
||||
और जानो: [मोड्स का इस्तेमाल](https://docs.roocode.com/basic-usage/using-modes) • [कस्टम मोड्स](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
और जानो: [मोड्स का इस्तेमाल](https://docs.roocode.com/basic-usage/using-agents) • [कस्टम मोड्स](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## ट्यूटोरियल और फ़ीचर वीडियो
|
||||
|
||||
|
|
|
|||
22
locales/id/README.md
generated
22
locales/id/README.md
generated
|
|
@ -35,32 +35,32 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## Apa yang Bisa Roo Code Lakukan Untuk ANDA?
|
||||
|
||||
- Menghasilkan Kode dari deskripsi bahasa alami
|
||||
- Beradaptasi dengan Mode: Kode, Arsitek, Tanya, Debug, dan Mode Kustom
|
||||
- Beradaptasi dengan Agent: Kode, Arsitek, Tanya, Debug, dan Agent Kustom
|
||||
- Refactor & Debug kode yang ada
|
||||
- Menulis & Memperbarui dokumentasi
|
||||
- Menjawab Pertanyaan tentang basis kode Anda
|
||||
- Mengotomatiskan tugas-tugas yang berulang
|
||||
- Memanfaatkan Server MCP
|
||||
|
||||
## Mode
|
||||
## Agent
|
||||
|
||||
Roo Code beradaptasi dengan cara Anda bekerja, bukan sebaliknya:
|
||||
|
||||
- Mode Kode: pengkodean sehari-hari, pengeditan, dan operasi file
|
||||
- Mode Arsitek: merencanakan sistem, spesifikasi, dan migrasi
|
||||
- Mode Tanya: jawaban cepat, penjelasan, dan dokumen
|
||||
- Mode Debug: melacak masalah, menambahkan log, mengisolasi akar penyebab
|
||||
- Mode Kustom: buat mode khusus untuk tim atau alur kerja Anda
|
||||
- Agent Kode: pengkodean sehari-hari, pengeditan, dan operasi file
|
||||
- Agent Arsitek: merencanakan sistem, spesifikasi, dan migrasi
|
||||
- Agent Tanya: jawaban cepat, penjelasan, dan dokumen
|
||||
- Agent Debug: melacak masalah, menambahkan log, mengisolasi akar penyebab
|
||||
- Agent Kustom: buat agent khusus untuk tim atau alur kerja Anda
|
||||
- Roomote Control: Roomote Control memungkinkan kamu mengontrol dari jarak jauh tugas yang berjalan di VS Code lokalmu.
|
||||
|
||||
Pelajari lebih lanjut: [Menggunakan Mode](https://docs.roocode.com/basic-usage/using-modes) • [Mode Kustom](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Pelajari lebih lanjut: [Menggunakan Agent](https://docs.roocode.com/basic-usage/using-agents) • [Agent Kustom](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Video Tutorial & Fitur
|
||||
|
||||
|
|
@ -69,7 +69,7 @@ Pelajari lebih lanjut: [Menggunakan Mode](https://docs.roocode.com/basic-usage/u
|
|||
| | | |
|
||||
| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
||||
| <a href="https://www.youtube.com/watch?v=Mcq3r1EPZ-4"><img src="https://img.youtube.com/vi/Mcq3r1EPZ-4/maxresdefault.jpg" width="100%"></a><br><b>Menginstal Roo Code</b> | <a href="https://www.youtube.com/watch?v=ZBML8h5cCgo"><img src="https://img.youtube.com/vi/ZBML8h5cCgo/maxresdefault.jpg" width="100%"></a><br><b>Mengonfigurasi Profil</b> | <a href="https://www.youtube.com/watch?v=r1bpod1VWhg"><img src="https://img.youtube.com/vi/r1bpod1VWhg/maxresdefault.jpg" width="100%"></a><br><b>Pengindeksan Basis Kode</b> |
|
||||
| <a href="https://www.youtube.com/watch?v=iiAv1eKOaxk"><img src="https://img.youtube.com/vi/iiAv1eKOaxk/maxresdefault.jpg" width="100%"></a><br><b>Mode Kustom</b> | <a href="https://www.youtube.com/watch?v=Ho30nyY332E"><img src="https://img.youtube.com/vi/Ho30nyY332E/maxresdefault.jpg" width="100%"></a><br><b>Pos Pemeriksaan</b> | <a href="https://www.youtube.com/watch?v=6h5vB9PpoPk"><img src="https://img.youtube.com/vi/6h5vB9PpoPk/maxresdefault.jpg" width="100%"></a><br><b>Daftar Tugas</b> |
|
||||
| <a href="https://www.youtube.com/watch?v=iiAv1eKOaxk"><img src="https://img.youtube.com/vi/iiAv1eKOaxk/maxresdefault.jpg" width="100%"></a><br><b>Agent Kustom</b> | <a href="https://www.youtube.com/watch?v=Ho30nyY332E"><img src="https://img.youtube.com/vi/Ho30nyY332E/maxresdefault.jpg" width="100%"></a><br><b>Pos Pemeriksaan</b> | <a href="https://www.youtube.com/watch?v=6h5vB9PpoPk"><img src="https://img.youtube.com/vi/6h5vB9PpoPk/maxresdefault.jpg" width="100%"></a><br><b>Daftar Tugas</b> |
|
||||
|
||||
</div>
|
||||
<p align="center">
|
||||
|
|
@ -105,7 +105,7 @@ pnpm install
|
|||
|
||||
Ada beberapa cara untuk menjalankan ekstensi Roo Code:
|
||||
|
||||
### Mode Pengembangan (F5)
|
||||
### Agent Pengembangan (F5)
|
||||
|
||||
Untuk pengembangan aktif, gunakan debugging bawaan VSCode:
|
||||
|
||||
|
|
|
|||
4
locales/it/README.md
generated
4
locales/it/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code si adatta al tuo modo di lavorare, non il contrario:
|
|||
- Modalità Personalizzate: crea modalità specializzate per il tuo team o flusso di lavoro
|
||||
- Roomote Control: Roomote Control ti permette di controllare da remoto le attività in esecuzione sulla tua istanza locale di VS Code.
|
||||
|
||||
Scopri di più: [Usare le Modalità](https://docs.roocode.com/basic-usage/using-modes) • [Modalità personalizzate](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Scopri di più: [Usare le Modalità](https://docs.roocode.com/basic-usage/using-agents) • [Modalità personalizzate](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Tutorial e video sulle funzionalità
|
||||
|
||||
|
|
|
|||
4
locales/ja/README.md
generated
4
locales/ja/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Codeは、あなたの働き方に合わせるように適応します。
|
|||
- カスタムモード:チームやワークフローに特化したモードの構築
|
||||
- Roomote Control: Roomote Control はローカルの VS Code で実行中のタスクをリモート操作できます。
|
||||
|
||||
詳しくは: [モードの使い方](https://docs.roocode.com/basic-usage/using-modes) • [カスタムモード](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
詳しくは: [モードの使い方](https://docs.roocode.com/basic-usage/using-agents) • [カスタムモード](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## チュートリアルと機能のビデオ
|
||||
|
||||
|
|
|
|||
4
locales/ko/README.md
generated
4
locales/ko/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code는 당신의 작업 방식에 맞춰 적응합니다.
|
|||
- 사용자 지정 모드: 팀이나 워크플로우를 위한 특수 모드 구축
|
||||
- Roomote Control: Roomote Control은 로컬 VS Code 인스턴스에서 실행 중인 작업을 원격으로 제어할 수 있어.
|
||||
|
||||
자세히: [모드 사용](https://docs.roocode.com/basic-usage/using-modes) • [사용자 지정 모드](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
자세히: [모드 사용](https://docs.roocode.com/basic-usage/using-agents) • [사용자 지정 모드](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## 튜토리얼 및 기능 비디오
|
||||
|
||||
|
|
|
|||
4
locales/nl/README.md
generated
4
locales/nl/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code past zich aan jouw werkwijze aan, niet andersom:
|
|||
- Aangepaste Modi: bouw gespecialiseerde modi voor je team of workflow
|
||||
- Roomote Control: Roomote Control laat je taken op je lokale VS Code-instantie op afstand besturen.
|
||||
|
||||
Meer info: [Modi gebruiken](https://docs.roocode.com/basic-usage/using-modes) • [Aangepaste modi](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Meer info: [Modi gebruiken](https://docs.roocode.com/basic-usage/using-agents) • [Aangepaste modi](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Tutorial & Feature Videos
|
||||
|
||||
|
|
|
|||
4
locales/pl/README.md
generated
4
locales/pl/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code dostosowuje się do Twojego sposobu pracy, a nie odwrotnie:
|
|||
- Tryby niestandardowe: buduj specjalistyczne tryby dla swojego zespołu lub przepływu pracy
|
||||
- Roomote Control: Roomote Control pozwala zdalnie sterować zadaniami uruchomionymi na twojej lokalnej instancji VS Code.
|
||||
|
||||
Więcej: [Korzystanie z trybów](https://docs.roocode.com/basic-usage/using-modes) • [Tryby niestandardowe](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Więcej: [Korzystanie z trybów](https://docs.roocode.com/basic-usage/using-agents) • [Tryby niestandardowe](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Filmy instruktażowe i prezentujące funkcje
|
||||
|
||||
|
|
|
|||
4
locales/pt-BR/README.md
generated
4
locales/pt-BR/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ O Roo Code se adapta à sua maneira de trabalhar, e não o contrário:
|
|||
- Modos Personalizados: crie modos especializados para sua equipe ou fluxo de trabalho
|
||||
- Roomote Control: O Roomote Control permite controlar remotamente tarefas em execução na sua instância local do VS Code.
|
||||
|
||||
Saiba mais: [Usar Modos](https://docs.roocode.com/basic-usage/using-modes) • [Modos personalizados](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Saiba mais: [Usar Modos](https://docs.roocode.com/basic-usage/using-agents) • [Modos personalizados](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Vídeos de tutorial e recursos
|
||||
|
||||
|
|
|
|||
4
locales/ru/README.md
generated
4
locales/ru/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code адаптируется к вашему стилю работы, а н
|
|||
- Пользовательские режимы: создавайте специализированные режимы для вашей команды или рабочего процесса
|
||||
- Roomote Control: Roomote Control позволяет удаленно управлять задачами, запущенными в вашей локальной инстансе VS Code.
|
||||
|
||||
Подробнее: [Использование режимов](https://docs.roocode.com/basic-usage/using-modes) • [Пользовательские режимы](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Подробнее: [Использование режимов](https://docs.roocode.com/basic-usage/using-agents) • [Пользовательские режимы](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Обучающие видео и видео о функциях
|
||||
|
||||
|
|
|
|||
4
locales/tr/README.md
generated
4
locales/tr/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code, sizin çalışma şeklinize uyum sağlar, tam tersi değil:
|
|||
- Özel Modlar: ekibiniz veya iş akışınız için özel modlar oluşturun
|
||||
- Roomote Control: Roomote Control, yerel VS Code örneğinde çalışan işleri uzaktan kontrol etmeni sağlar.
|
||||
|
||||
Daha fazla: [Modları kullanma](https://docs.roocode.com/basic-usage/using-modes) • [Özel modlar](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Daha fazla: [Modları kullanma](https://docs.roocode.com/basic-usage/using-agents) • [Özel modlar](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Eğitim ve Özellik Videoları
|
||||
|
||||
|
|
|
|||
4
locales/vi/README.md
generated
4
locales/vi/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code thích ứng với cách bạn làm việc, chứ không phải ngượ
|
|||
- Chế độ Tùy chỉnh: xây dựng các chế độ chuyên biệt cho nhóm hoặc quy trình làm việc của bạn
|
||||
- Roomote Control: Roomote Control cho phép bạn điều khiển từ xa các tác vụ đang chạy trên VS Code cục bộ của bạn.
|
||||
|
||||
Xem thêm: [Sử dụng Chế độ](https://docs.roocode.com/basic-usage/using-modes) • [Chế độ tùy chỉnh](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
Xem thêm: [Sử dụng Chế độ](https://docs.roocode.com/basic-usage/using-agents) • [Chế độ tùy chỉnh](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## Video hướng dẫn & tính năng
|
||||
|
||||
|
|
|
|||
4
locales/zh-CN/README.md
generated
4
locales/zh-CN/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code 适应您的工作方式,而不是相反:
|
|||
- 自定义模式:为您的团队或工作流程构建专门的模式
|
||||
- Roomote Control:Roomote Control 允许你远程控制在本地 VS Code 实例中运行的任务。
|
||||
|
||||
了解更多:[使用模式](https://docs.roocode.com/basic-usage/using-modes) • [自定义模式](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
了解更多:[使用模式](https://docs.roocode.com/basic-usage/using-agents) • [自定义模式](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## 教程和功能视频
|
||||
|
||||
|
|
|
|||
4
locales/zh-TW/README.md
generated
4
locales/zh-TW/README.md
generated
|
|
@ -35,7 +35,7 @@
|
|||
- [简体中文](../zh-CN/README.md)
|
||||
- [繁體中文](../zh-TW/README.md)
|
||||
- ...
|
||||
</details>
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ Roo Code 適應您的工作方式,而不是相反:
|
|||
- 自訂模式:為您的團隊或工作流程建置專門的模式
|
||||
- Roomote Control:Roomote Control 讓你能遠端控制在本機 VS Code 執行個體中運行的工作。
|
||||
|
||||
更多資訊:[使用模式](https://docs.roocode.com/basic-usage/using-modes) • [自訂模式](https://docs.roocode.com/advanced-usage/custom-modes) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
更多資訊:[使用模式](https://docs.roocode.com/basic-usage/using-agents) • [自訂模式](https://docs.roocode.com/advanced-usage/custom-agents) • [Roomote Control](https://docs.roocode.com/roo-code-cloud/roomote-control)
|
||||
|
||||
## 教學和功能影片
|
||||
|
||||
|
|
|
|||
|
|
@ -136,33 +136,33 @@ export type CustomSupportPrompts = z.infer<typeof customSupportPromptsSchema>
|
|||
export const DEFAULT_MODES: readonly ModeConfig[] = [
|
||||
{
|
||||
slug: "architect",
|
||||
name: "🏗️ Architect",
|
||||
name: "🏗️ Planner",
|
||||
roleDefinition:
|
||||
"You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.",
|
||||
"You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.",
|
||||
whenToUse:
|
||||
"Use this mode when you need to plan, design, or strategize before implementation. Perfect for breaking down complex problems, creating technical specifications, designing system architecture, or brainstorming solutions before coding.",
|
||||
"Use this agent when you need to plan, design, or strategize before implementation. Perfect for breaking down complex problems, creating technical specifications, designing system architecture, or brainstorming solutions before coding.",
|
||||
description: "Plan and design before implementation",
|
||||
groups: ["read", ["edit", { fileRegex: "\\.md$", description: "Markdown files only" }], "browser", "mcp"],
|
||||
customInstructions:
|
||||
"1. Do some information gathering (using provided tools) to get more context about the task.\n\n2. You should also ask the user clarifying questions to get a better understanding of the task.\n\n3. Once you've gained more context about the user's request, break down the task into clear, actionable steps and create a todo list using the `update_todo_list` tool. Each todo item should be:\n - Specific and actionable\n - Listed in logical execution order\n - Focused on a single, well-defined outcome\n - Clear enough that another mode could execute it independently\n\n **Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.\n\n4. As you gather more information or discover new requirements, update the todo list to reflect the current understanding of what needs to be accomplished.\n\n5. Ask the user if they are pleased with this plan, or if they would like to make any changes. Think of this as a brainstorming session where you can discuss the task and refine the todo list.\n\n6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes (\"\") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.\n\n7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.\n\n**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**\n\n**CRITICAL: Never provide level of effort time estimates (e.g., hours, days, weeks) for tasks. Focus solely on breaking down the work into clear, actionable steps without estimating how long they will take.**\n\nUnless told otherwise, if you want to save a plan file, put it in the /plans directory",
|
||||
"1. Do some information gathering (using provided tools) to get more context about the task.\n\n2. You should also ask the user clarifying questions to get a better understanding of the task.\n\n3. Once you've gained more context about the user's request, break down the task into clear, actionable steps and create a todo list using the `update_todo_list` tool. Each todo item should be:\n - Specific and actionable\n - Listed in logical execution order\n - Focused on a single, well-defined outcome\n - Clear enough that another agent could execute it independently\n\n **Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.\n\n4. As you gather more information or discover new requirements, update the todo list to reflect the current understanding of what needs to be accomplished.\n\n5. Ask the user if they are pleased with this plan, or if they would like to make any changes. Think of this as a brainstorming session where you can discuss the task and refine the todo list.\n\n6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes (\"\") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.\n\n7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.\n\n**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**\n\n**CRITICAL: Never provide level of effort time estimates (e.g., hours, days, weeks) for tasks. Focus solely on breaking down the work into clear, actionable steps without estimating how long they will take.**\n\nUnless told otherwise, if you want to save a plan file, put it in the /plans directory",
|
||||
},
|
||||
{
|
||||
slug: "code",
|
||||
name: "💻 Code",
|
||||
name: "💻 Coder",
|
||||
roleDefinition:
|
||||
"You are Roo, a highly skilled software engineer with extensive knowledge in many programming languages, frameworks, design patterns, and best practices.",
|
||||
whenToUse:
|
||||
"Use this mode when you need to write, modify, or refactor code. Ideal for implementing features, fixing bugs, creating new files, or making code improvements across any programming language or framework.",
|
||||
"Use this agent when you need to write, modify, or refactor code. Ideal for implementing features, fixing bugs, creating new files, or making code improvements across any programming language or framework.",
|
||||
description: "Write, modify, and refactor code",
|
||||
groups: ["read", "edit", "browser", "command", "mcp"],
|
||||
},
|
||||
{
|
||||
slug: "ask",
|
||||
name: "❓ Ask",
|
||||
name: "❓ Explainer",
|
||||
roleDefinition:
|
||||
"You are Roo, a knowledgeable technical assistant focused on answering questions and providing information about software development, technology, and related topics.",
|
||||
whenToUse:
|
||||
"Use this mode when you need explanations, documentation, or answers to technical questions. Best for understanding concepts, analyzing existing code, getting recommendations, or learning about technologies without making changes.",
|
||||
"Use this agent when you need explanations, documentation, or answers to technical questions. Best for understanding concepts, analyzing existing code, getting recommendations, or learning about technologies without making changes.",
|
||||
description: "Get answers and explanations",
|
||||
groups: ["read", "browser", "mcp"],
|
||||
customInstructions:
|
||||
|
|
@ -170,11 +170,11 @@ export const DEFAULT_MODES: readonly ModeConfig[] = [
|
|||
},
|
||||
{
|
||||
slug: "debug",
|
||||
name: "🪲 Debug",
|
||||
name: "🪲 Debugger",
|
||||
roleDefinition:
|
||||
"You are Roo, an expert software debugger specializing in systematic problem diagnosis and resolution.",
|
||||
whenToUse:
|
||||
"Use this mode when you're troubleshooting issues, investigating errors, or diagnosing problems. Specialized in systematic debugging, adding logging, analyzing stack traces, and identifying root causes before applying fixes.",
|
||||
"Use this agent when you're troubleshooting issues, investigating errors, or diagnosing problems. Specialized in systematic debugging, adding logging, analyzing stack traces, and identifying root causes before applying fixes.",
|
||||
description: "Diagnose and fix software issues",
|
||||
groups: ["read", "edit", "browser", "command", "mcp"],
|
||||
customInstructions:
|
||||
|
|
@ -182,14 +182,14 @@ export const DEFAULT_MODES: readonly ModeConfig[] = [
|
|||
},
|
||||
{
|
||||
slug: "orchestrator",
|
||||
name: "🪃 Orchestrator",
|
||||
name: "🪃 Coordinator",
|
||||
roleDefinition:
|
||||
"You are Roo, a strategic workflow orchestrator who coordinates complex tasks by delegating them to appropriate specialized modes. You have a comprehensive understanding of each mode's capabilities and limitations, allowing you to effectively break down complex problems into discrete tasks that can be solved by different specialists.",
|
||||
"You are Roo, a strategic workflow coordinator who coordinates complex tasks by delegating them to appropriate specialized agents. You have a comprehensive understanding of each agent's capabilities and limitations, allowing you to effectively break down complex problems into discrete tasks that can be solved by different specialists.",
|
||||
whenToUse:
|
||||
"Use this mode for complex, multi-step projects that require coordination across different specialties. Ideal when you need to break down large tasks into subtasks, manage workflows, or coordinate work that spans multiple domains or expertise areas.",
|
||||
description: "Coordinate tasks across multiple modes",
|
||||
"Use this agent for complex, multi-step projects that require coordination across different specialties. Ideal when you need to break down large tasks into subtasks, manage workflows, or coordinate work that spans multiple domains or expertise areas.",
|
||||
description: "Coordinate tasks across multiple agents",
|
||||
groups: [],
|
||||
customInstructions:
|
||||
"Your role is to coordinate complex workflows by delegating tasks to specialized modes. As an orchestrator, you should:\n\n1. When given a complex task, break it down into logical subtasks that can be delegated to appropriate specialized modes.\n\n2. For each subtask, use the `new_task` tool to delegate. Choose the most appropriate mode for the subtask's specific goal and provide comprehensive instructions in the `message` parameter. These instructions must include:\n * All necessary context from the parent task or previous subtasks required to complete the work.\n * A clearly defined scope, specifying exactly what the subtask should accomplish.\n * An explicit statement that the subtask should *only* perform the work outlined in these instructions and not deviate.\n * An instruction for the subtask to signal completion by using the `attempt_completion` tool, providing a concise yet thorough summary of the outcome in the `result` parameter, keeping in mind that this summary will be the source of truth used to keep track of what was completed on this project.\n * A statement that these specific instructions supersede any conflicting general instructions the subtask's mode might have.\n\n3. Track and manage the progress of all subtasks. When a subtask is completed, analyze its results and determine the next steps.\n\n4. Help the user understand how the different subtasks fit together in the overall workflow. Provide clear reasoning about why you're delegating specific tasks to specific modes.\n\n5. When all subtasks are completed, synthesize the results and provide a comprehensive overview of what was accomplished.\n\n6. Ask clarifying questions when necessary to better understand how to break down complex tasks effectively.\n\n7. Suggest improvements to the workflow based on the results of completed subtasks.\n\nUse subtasks to maintain clarity. If a request significantly shifts focus or requires a different expertise (mode), consider creating a subtask rather than overloading the current one.",
|
||||
"Your role is to coordinate complex workflows by delegating tasks to specialized agents. As a coordinator, you should:\n\n1. When given a complex task, break it down into logical subtasks that can be delegated to appropriate specialized agents.\n\n2. For each subtask, use the `new_task` tool to delegate. Choose the most appropriate agent for the subtask's specific goal and provide comprehensive instructions in the `message` parameter. These instructions must include:\n * All necessary context from the parent task or previous subtasks required to complete the work.\n * A clearly defined scope, specifying exactly what the subtask should accomplish.\n * An explicit statement that the subtask should *only* perform the work outlined in these instructions and not deviate.\n * An instruction for the subtask to signal completion by using the `attempt_completion` tool, providing a concise yet thorough summary of the outcome in the `result` parameter, keeping in mind that this summary will be the source of truth used to keep track of what was completed on this project.\n * A statement that these specific instructions supersede any conflicting general instructions the subtask's agent might have.\n\n3. Track and manage the progress of all subtasks. When a subtask is completed, analyze its results and determine the next steps.\n\n4. Help the user understand how the different subtasks fit together in the overall workflow. Provide clear reasoning about why you're delegating specific tasks to specific agents.\n\n5. When all subtasks are completed, synthesize the results and provide a comprehensive overview of what was accomplished.\n\n6. Ask clarifying questions when necessary to better understand how to break down complex tasks effectively.\n\n7. Suggest improvements to the workflow based on the results of completed subtasks.\n\nUse subtasks to maintain clarity. If a request significantly shifts focus or requires a different expertise (agent), consider creating a subtask rather than overloading the current one.",
|
||||
},
|
||||
] as const
|
||||
|
|
|
|||
|
|
@ -55,9 +55,9 @@ const mockFs = {
|
|||
|
||||
// Handle rule files
|
||||
const ruleFiles: RuleFiles = {
|
||||
".clinerules-code": "# Code Mode Rules\n1. Code specific rule",
|
||||
".clinerules-ask": "# Ask Mode Rules\n1. Ask specific rule",
|
||||
".clinerules-architect": "# Architect Mode Rules\n1. Architect specific rule",
|
||||
".clinerules-code": "# Code Agent Rules\n1. Code specific rule",
|
||||
".clinerules-ask": "# Ask Agent Rules\n1. Ask specific rule",
|
||||
".clinerules-architect": "# Architect Agent Rules\n1. Architect specific rule",
|
||||
".clinerules-test":
|
||||
"# Test Engineer Rules\n1. Always write tests first\n2. Get approval before modifying non-test code",
|
||||
".clinerules-review":
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ describe("Settings Migration", () => {
|
|||
// Clear all previous mocks to ensure clean test environment
|
||||
vitest.clearAllMocks()
|
||||
|
||||
const testJsonContent = JSON.stringify({ customModes: [{ slug: "test-mode", name: "Test Mode" }] })
|
||||
const testJsonContent = JSON.stringify({ customModes: [{ slug: "test-mode", name: "Test Agent" }] })
|
||||
|
||||
// Setup mock functions
|
||||
const mockWrite = vitest.mocked(fs.writeFile).mockResolvedValue(undefined)
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ describe("ClineProvider.delegateParentAndOpenChild()", () => {
|
|||
// Event emission (provider-level)
|
||||
expect(providerEmit).toHaveBeenCalledWith(RooCodeEventName.TaskDelegated, "parent-1", "child-1")
|
||||
|
||||
// Mode switch
|
||||
// Agent switch
|
||||
expect(handleModeSwitch).toHaveBeenCalledWith("code")
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ export async function getHuggingFaceModels(): Promise<ModelRecord> {
|
|||
headers: {
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"Sec-Fetch-Dest": "document",
|
||||
"Sec-Fetch-Mode": "navigate",
|
||||
"Sec-Fetch-Agent": "navigate",
|
||||
"Sec-Fetch-Site": "none",
|
||||
"Sec-Fetch-User": "?1",
|
||||
Priority: "u=0, i",
|
||||
|
|
@ -229,7 +229,7 @@ export async function getHuggingFaceModelsWithMetadata(): Promise<HuggingFaceMod
|
|||
headers: {
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"Sec-Fetch-Dest": "document",
|
||||
"Sec-Fetch-Mode": "navigate",
|
||||
"Sec-Fetch-Agent": "navigate",
|
||||
"Sec-Fetch-Site": "none",
|
||||
"Sec-Fetch-User": "?1",
|
||||
Priority: "u=0, i",
|
||||
|
|
|
|||
|
|
@ -410,7 +410,7 @@ export class CustomModesManager {
|
|||
.map((err) => `${err.path.join(".")}: ${err.message}`)
|
||||
.join(", ")
|
||||
const errorMessage = `Invalid mode configuration: ${errorMessages}`
|
||||
logger.error("Mode validation failed", { slug, errors: validationResult.error.errors })
|
||||
logger.error("Agent validation failed", { slug, errors: validationResult.error.errors })
|
||||
vscode.window.showErrorMessage(t("common:customModes.errors.updateFailed", { error: errorMessage }))
|
||||
throw new Error(errorMessage)
|
||||
}
|
||||
|
|
@ -643,7 +643,7 @@ export class CustomModesManager {
|
|||
// Check if this specific mode exists in .roomodes
|
||||
const modeInRoomodes = roomodesModes.find((m: any) => m.slug === slug)
|
||||
if (!modeInRoomodes) {
|
||||
return false // Mode not found anywhere
|
||||
return false // Agent not found anywhere
|
||||
}
|
||||
} else {
|
||||
return false // No .roomodes file and not in custom modes
|
||||
|
|
@ -750,7 +750,7 @@ export class CustomModesManager {
|
|||
// Use the built-in mode as the base
|
||||
mode = { ...builtInMode }
|
||||
} else {
|
||||
return { success: false, error: "Mode not found" }
|
||||
return { success: false, error: "Agent not found" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import {
|
|||
} from "@roo-code/types"
|
||||
import { TelemetryService } from "@roo-code/telemetry"
|
||||
|
||||
import { Mode, modes } from "../../shared/modes"
|
||||
import { Agent, modes } from "../../shared/modes"
|
||||
import { buildApiHandler } from "../../api"
|
||||
|
||||
// Type-safe model migrations mapping
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ describe("CustomModesManager - Export/Import with Slug Changes", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
groups: ["read"],
|
||||
},
|
||||
|
|
@ -152,7 +152,7 @@ describe("CustomModesManager - Export/Import with Slug Changes", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "root-mode",
|
||||
name: "Root Mode",
|
||||
name: "Root Agent",
|
||||
roleDefinition: "Root Role",
|
||||
groups: ["read"],
|
||||
},
|
||||
|
|
@ -209,7 +209,7 @@ describe("CustomModesManager - Export/Import with Slug Changes", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "new-slug-name", // Changed slug
|
||||
name: "Imported Mode",
|
||||
name: "Imported Agent",
|
||||
roleDefinition: "Imported Role",
|
||||
groups: ["read"],
|
||||
rulesFiles: [
|
||||
|
|
@ -269,7 +269,7 @@ describe("CustomModesManager - Export/Import with Slug Changes", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "new-slug-name", // Changed slug
|
||||
name: "Imported Mode",
|
||||
name: "Imported Agent",
|
||||
roleDefinition: "Imported Role",
|
||||
groups: ["read"],
|
||||
rulesFiles: [
|
||||
|
|
@ -325,7 +325,7 @@ describe("CustomModesManager - Export/Import with Slug Changes", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "mixed-mode",
|
||||
name: "Mixed Mode",
|
||||
name: "Mixed Agent",
|
||||
roleDefinition: "Mixed Role",
|
||||
groups: ["read"],
|
||||
rulesFiles: [
|
||||
|
|
@ -379,7 +379,7 @@ describe("CustomModesManager - Export/Import with Slug Changes", () => {
|
|||
// Step 1: Set up a mode with rules
|
||||
const originalMode = {
|
||||
slug: "original-mode",
|
||||
name: "Original Mode",
|
||||
name: "Original Agent",
|
||||
roleDefinition: "Original Role",
|
||||
groups: ["read"],
|
||||
}
|
||||
|
|
@ -409,7 +409,7 @@ describe("CustomModesManager - Export/Import with Slug Changes", () => {
|
|||
// Step 3: Modify the exported YAML to change the slug
|
||||
const exportData = yaml.parse(exportResult.yaml!)
|
||||
exportData.customModes[0].slug = "renamed-mode"
|
||||
exportData.customModes[0].name = "Renamed Mode"
|
||||
exportData.customModes[0].name = "Renamed Agent"
|
||||
const modifiedYaml = yaml.stringify(exportData)
|
||||
|
||||
// Step 4: Import with the new slug
|
||||
|
|
|
|||
|
|
@ -95,9 +95,9 @@ describe("CustomModesManager", () => {
|
|||
|
||||
describe("getCustomModes", () => {
|
||||
it("should handle valid YAML in .roomodes file and JSON for global customModes", async () => {
|
||||
const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
const settingsModes = [{ slug: "mode1", name: "Agent 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
|
||||
const roomodesModes = [{ slug: "mode2", name: "Mode 2", roleDefinition: "Role 2", groups: ["read"] }]
|
||||
const roomodesModes = [{ slug: "mode2", name: "Agent 2", roleDefinition: "Role 2", groups: ["read"] }]
|
||||
|
||||
;(fs.readFile as Mock).mockImplementation(async (path: string) => {
|
||||
if (path === mockSettingsPath) {
|
||||
|
|
@ -116,13 +116,13 @@ describe("CustomModesManager", () => {
|
|||
|
||||
it("should merge modes with .roomodes taking precedence", async () => {
|
||||
const settingsModes = [
|
||||
{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] },
|
||||
{ slug: "mode2", name: "Mode 2", roleDefinition: "Role 2", groups: ["read"] },
|
||||
{ slug: "mode1", name: "Agent 1", roleDefinition: "Role 1", groups: ["read"] },
|
||||
{ slug: "mode2", name: "Agent 2", roleDefinition: "Role 2", groups: ["read"] },
|
||||
]
|
||||
|
||||
const roomodesModes = [
|
||||
{ slug: "mode2", name: "Mode 2 Override", roleDefinition: "Role 2 Override", groups: ["read"] },
|
||||
{ slug: "mode3", name: "Mode 3", roleDefinition: "Role 3", groups: ["read"] },
|
||||
{ slug: "mode2", name: "Agent 2 Override", roleDefinition: "Role 2 Override", groups: ["read"] },
|
||||
{ slug: "mode3", name: "Agent 3", roleDefinition: "Role 3", groups: ["read"] },
|
||||
]
|
||||
|
||||
;(fs.readFile as Mock).mockImplementation(async (path: string) => {
|
||||
|
|
@ -143,12 +143,12 @@ describe("CustomModesManager", () => {
|
|||
|
||||
// mode2 should come from .roomodes since it takes precedence
|
||||
const mode2 = modes.find((m) => m.slug === "mode2")
|
||||
expect(mode2?.name).toBe("Mode 2 Override")
|
||||
expect(mode2?.name).toBe("Agent 2 Override")
|
||||
expect(mode2?.roleDefinition).toBe("Role 2 Override")
|
||||
})
|
||||
|
||||
it("should handle missing .roomodes file", async () => {
|
||||
const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
const settingsModes = [{ slug: "mode1", name: "Agent 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
|
||||
;(fileExistsAtPath as Mock).mockImplementation(async (path: string) => {
|
||||
return path === mockSettingsPath
|
||||
|
|
@ -167,7 +167,7 @@ describe("CustomModesManager", () => {
|
|||
})
|
||||
|
||||
it("should handle invalid YAML in .roomodes", async () => {
|
||||
const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
const settingsModes = [{ slug: "mode1", name: "Agent 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
|
||||
;(fs.readFile as Mock).mockImplementation(async (path: string) => {
|
||||
if (path === mockSettingsPath) {
|
||||
|
|
@ -188,7 +188,7 @@ describe("CustomModesManager", () => {
|
|||
|
||||
it("should memoize results for 10 seconds", async () => {
|
||||
// Setup test data
|
||||
const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
const settingsModes = [{ slug: "mode1", name: "Agent 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
;(fs.readFile as Mock).mockImplementation(async (path: string) => {
|
||||
if (path === mockSettingsPath) {
|
||||
return yaml.stringify({ customModes: settingsModes })
|
||||
|
|
@ -230,7 +230,7 @@ describe("CustomModesManager", () => {
|
|||
|
||||
it("should invalidate cache when modes are updated", async () => {
|
||||
// Setup initial data
|
||||
const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
const settingsModes = [{ slug: "mode1", name: "Agent 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
;(fs.readFile as Mock).mockImplementation(async (path: string) => {
|
||||
if (path === mockSettingsPath) {
|
||||
return yaml.stringify({ customModes: settingsModes })
|
||||
|
|
@ -248,7 +248,7 @@ describe("CustomModesManager", () => {
|
|||
// Update a mode
|
||||
const updatedMode: ModeConfig = {
|
||||
slug: "mode1",
|
||||
name: "Updated Mode 1",
|
||||
name: "Updated Agent 1",
|
||||
roleDefinition: "Updated Role 1",
|
||||
groups: ["read"],
|
||||
source: "global",
|
||||
|
|
@ -276,7 +276,7 @@ describe("CustomModesManager", () => {
|
|||
|
||||
it("should invalidate cache when modes are deleted", async () => {
|
||||
// Setup initial data
|
||||
const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
const settingsModes = [{ slug: "mode1", name: "Agent 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
;(fs.readFile as Mock).mockImplementation(async (path: string) => {
|
||||
if (path === mockSettingsPath) {
|
||||
return yaml.stringify({ customModes: settingsModes })
|
||||
|
|
@ -312,7 +312,7 @@ describe("CustomModesManager", () => {
|
|||
|
||||
it("should invalidate cache when modes are updated (simulating file changes)", async () => {
|
||||
// Setup initial data
|
||||
const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
const settingsModes = [{ slug: "mode1", name: "Agent 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
;(fs.readFile as Mock).mockImplementation(async (path: string) => {
|
||||
if (path === mockSettingsPath) {
|
||||
return yaml.stringify({ customModes: settingsModes })
|
||||
|
|
@ -333,7 +333,7 @@ describe("CustomModesManager", () => {
|
|||
// Setup for update
|
||||
const updatedMode: ModeConfig = {
|
||||
slug: "mode1",
|
||||
name: "Updated Mode 1",
|
||||
name: "Updated Agent 1",
|
||||
roleDefinition: "Updated Role 1",
|
||||
groups: ["read"],
|
||||
source: "global",
|
||||
|
|
@ -373,7 +373,7 @@ describe("CustomModesManager", () => {
|
|||
|
||||
it("should refresh cache after TTL expires", async () => {
|
||||
// Setup test data
|
||||
const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
const settingsModes = [{ slug: "mode1", name: "Agent 1", roleDefinition: "Role 1", groups: ["read"] }]
|
||||
;(fs.readFile as Mock).mockImplementation(async (path: string) => {
|
||||
if (path === mockSettingsPath) {
|
||||
return yaml.stringify({ customModes: settingsModes })
|
||||
|
|
@ -442,7 +442,7 @@ describe("CustomModesManager", () => {
|
|||
it("should update mode in settings file while preserving .roomodes precedence", async () => {
|
||||
const newMode: ModeConfig = {
|
||||
slug: "mode1",
|
||||
name: "Updated Mode 1",
|
||||
name: "Updated Agent 1",
|
||||
roleDefinition: "Updated Role 1",
|
||||
groups: ["read"],
|
||||
source: "global",
|
||||
|
|
@ -451,7 +451,7 @@ describe("CustomModesManager", () => {
|
|||
const roomodesModes = [
|
||||
{
|
||||
slug: "mode1",
|
||||
name: "Roomodes Mode 1",
|
||||
name: "Roomodes Agent 1",
|
||||
roleDefinition: "Role 1",
|
||||
groups: ["read"],
|
||||
source: "project",
|
||||
|
|
@ -459,7 +459,7 @@ describe("CustomModesManager", () => {
|
|||
]
|
||||
|
||||
const existingModes = [
|
||||
{ slug: "mode2", name: "Mode 2", roleDefinition: "Role 2", groups: ["read"], source: "global" },
|
||||
{ slug: "mode2", name: "Agent 2", roleDefinition: "Role 2", groups: ["read"], source: "global" },
|
||||
]
|
||||
|
||||
let settingsContent = { customModes: existingModes }
|
||||
|
|
@ -495,7 +495,7 @@ describe("CustomModesManager", () => {
|
|||
expect(content.customModes).toContainEqual(
|
||||
expect.objectContaining({
|
||||
slug: "mode1",
|
||||
name: "Updated Mode 1",
|
||||
name: "Updated Agent 1",
|
||||
roleDefinition: "Updated Role 1",
|
||||
source: "global",
|
||||
}),
|
||||
|
|
@ -507,7 +507,7 @@ describe("CustomModesManager", () => {
|
|||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
slug: "mode1",
|
||||
name: "Roomodes Mode 1", // .roomodes version should take precedence
|
||||
name: "Roomodes Agent 1", // .roomodes version should take precedence
|
||||
source: "project",
|
||||
}),
|
||||
]),
|
||||
|
|
@ -520,7 +520,7 @@ describe("CustomModesManager", () => {
|
|||
it("creates .roomodes file when adding project-specific mode", async () => {
|
||||
const projectMode: ModeConfig = {
|
||||
slug: "project-mode",
|
||||
name: "Project Mode",
|
||||
name: "Project Agent",
|
||||
roleDefinition: "Project Role",
|
||||
groups: ["read"],
|
||||
source: "project",
|
||||
|
|
@ -568,7 +568,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
expect.objectContaining({
|
||||
slug: "project-mode",
|
||||
name: "Project Mode",
|
||||
name: "Project Agent",
|
||||
roleDefinition: "Project Role",
|
||||
source: "project",
|
||||
}),
|
||||
|
|
@ -579,14 +579,14 @@ describe("CustomModesManager", () => {
|
|||
it("queues write operations", async () => {
|
||||
const mode1: ModeConfig = {
|
||||
slug: "mode1",
|
||||
name: "Mode 1",
|
||||
name: "Agent 1",
|
||||
roleDefinition: "Role 1",
|
||||
groups: ["read"],
|
||||
source: "global",
|
||||
}
|
||||
const mode2: ModeConfig = {
|
||||
slug: "mode2",
|
||||
name: "Mode 2",
|
||||
name: "Agent 2",
|
||||
roleDefinition: "Role 2",
|
||||
groups: ["read"],
|
||||
source: "global",
|
||||
|
|
@ -611,8 +611,8 @@ describe("CustomModesManager", () => {
|
|||
|
||||
// Verify final state in settings file
|
||||
expect(settingsContent.customModes).toHaveLength(2)
|
||||
expect(settingsContent.customModes.map((m: ModeConfig) => m.name)).toContain("Mode 1")
|
||||
expect(settingsContent.customModes.map((m: ModeConfig) => m.name)).toContain("Mode 2")
|
||||
expect(settingsContent.customModes.map((m: ModeConfig) => m.name)).toContain("Agent 1")
|
||||
expect(settingsContent.customModes.map((m: ModeConfig) => m.name)).toContain("Agent 2")
|
||||
|
||||
// Verify global state was updated
|
||||
expect(mockContext.globalState.update).toHaveBeenCalledWith(
|
||||
|
|
@ -620,12 +620,12 @@ describe("CustomModesManager", () => {
|
|||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
slug: "mode1",
|
||||
name: "Mode 1",
|
||||
name: "Agent 1",
|
||||
source: "global",
|
||||
}),
|
||||
expect.objectContaining({
|
||||
slug: "mode2",
|
||||
name: "Mode 2",
|
||||
name: "Agent 2",
|
||||
source: "global",
|
||||
}),
|
||||
]),
|
||||
|
|
@ -720,7 +720,7 @@ describe("CustomModesManager", () => {
|
|||
it("deletes mode from settings file", async () => {
|
||||
const existingMode = {
|
||||
slug: "mode-to-delete",
|
||||
name: "Mode To Delete",
|
||||
name: "Agent To Delete",
|
||||
roleDefinition: "Test role",
|
||||
groups: ["read"],
|
||||
source: "global",
|
||||
|
|
@ -778,7 +778,7 @@ describe("CustomModesManager", () => {
|
|||
|
||||
const newMode: ModeConfig = {
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
groups: ["read"],
|
||||
source: "global",
|
||||
|
|
@ -793,7 +793,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
expect.objectContaining({
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
}),
|
||||
],
|
||||
|
|
@ -825,7 +825,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
groups: ["read"],
|
||||
},
|
||||
|
|
@ -843,7 +843,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "imported-mode",
|
||||
name: "Imported Mode",
|
||||
name: "Imported Agent",
|
||||
roleDefinition: "Imported Role",
|
||||
groups: ["read", "edit"],
|
||||
},
|
||||
|
|
@ -882,7 +882,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "imported-mode",
|
||||
name: "Imported Mode",
|
||||
name: "Imported Agent",
|
||||
roleDefinition: "Imported Role",
|
||||
groups: ["read"],
|
||||
rulesFiles: [
|
||||
|
|
@ -952,19 +952,19 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "mode1",
|
||||
name: "Mode 1",
|
||||
name: "Agent 1",
|
||||
roleDefinition: "Role 1",
|
||||
groups: ["read"],
|
||||
},
|
||||
{
|
||||
slug: "mode2",
|
||||
name: "Mode 2",
|
||||
name: "Agent 2",
|
||||
roleDefinition: "Role 2",
|
||||
groups: ["edit"],
|
||||
rulesFiles: [
|
||||
{
|
||||
relativePath: "rules-mode2/rule.md",
|
||||
content: "Mode 2 rules",
|
||||
content: "Agent 2 rules",
|
||||
},
|
||||
],
|
||||
},
|
||||
|
|
@ -1001,7 +1001,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
groups: ["read"],
|
||||
rulesFiles: [
|
||||
|
|
@ -1042,7 +1042,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
groups: ["read"],
|
||||
rulesFiles: [
|
||||
|
|
@ -1099,7 +1099,7 @@ describe("CustomModesManager", () => {
|
|||
const malformedYaml = `
|
||||
customModes:
|
||||
- slug: test-mode
|
||||
name: Test Mode
|
||||
name: Test Agent
|
||||
roleDefinition: Test Role
|
||||
groups: [read
|
||||
invalid yaml here
|
||||
|
|
@ -1134,7 +1134,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
groups: ["read"],
|
||||
// No rulesFiles property - this mode has no rules
|
||||
|
|
@ -1183,7 +1183,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
groups: ["read"],
|
||||
rulesFiles: [
|
||||
|
|
@ -1248,7 +1248,7 @@ describe("CustomModesManager", () => {
|
|||
})
|
||||
|
||||
it("should return false when mode is not in .roomodes file", async () => {
|
||||
const roomodesContent = { customModes: [{ slug: "other-mode", name: "Other Mode" }] }
|
||||
const roomodesContent = { customModes: [{ slug: "other-mode", name: "Other Agent" }] }
|
||||
;(fileExistsAtPath as Mock).mockImplementation(async (path: string) => {
|
||||
return path === mockRoomodes
|
||||
})
|
||||
|
|
@ -1281,7 +1281,7 @@ describe("CustomModesManager", () => {
|
|||
})
|
||||
|
||||
it("should return false when rules directory doesn't exist", async () => {
|
||||
const roomodesContent = { customModes: [{ slug: "test-mode", name: "Test Mode" }] }
|
||||
const roomodesContent = { customModes: [{ slug: "test-mode", name: "Test Agent" }] }
|
||||
;(fileExistsAtPath as Mock).mockImplementation(async (path: string) => {
|
||||
return path === mockRoomodes
|
||||
})
|
||||
|
|
@ -1299,7 +1299,7 @@ describe("CustomModesManager", () => {
|
|||
})
|
||||
|
||||
it("should return false when rules directory is empty", async () => {
|
||||
const roomodesContent = { customModes: [{ slug: "test-mode", name: "Test Mode" }] }
|
||||
const roomodesContent = { customModes: [{ slug: "test-mode", name: "Test Agent" }] }
|
||||
;(fileExistsAtPath as Mock).mockImplementation(async (path: string) => {
|
||||
return path === mockRoomodes
|
||||
})
|
||||
|
|
@ -1318,7 +1318,7 @@ describe("CustomModesManager", () => {
|
|||
})
|
||||
|
||||
it("should return true when rules directory has content files", async () => {
|
||||
const roomodesContent = { customModes: [{ slug: "test-mode", name: "Test Mode" }] }
|
||||
const roomodesContent = { customModes: [{ slug: "test-mode", name: "Test Agent" }] }
|
||||
;(fileExistsAtPath as Mock).mockImplementation(async (path: string) => {
|
||||
return path === mockRoomodes
|
||||
})
|
||||
|
|
@ -1343,7 +1343,7 @@ describe("CustomModesManager", () => {
|
|||
|
||||
it("should work with global custom modes when .roomodes doesn't exist", async () => {
|
||||
const settingsContent = {
|
||||
customModes: [{ slug: "test-mode", name: "Test Mode", groups: ["read"], roleDefinition: "Test Role" }],
|
||||
customModes: [{ slug: "test-mode", name: "Test Agent", groups: ["read"], roleDefinition: "Test Role" }],
|
||||
}
|
||||
|
||||
// Create a fresh manager instance to avoid cache issues
|
||||
|
|
@ -1391,7 +1391,7 @@ describe("CustomModesManager", () => {
|
|||
const result = await freshManager.exportModeWithRules("test-mode")
|
||||
|
||||
expect(result.success).toBe(false)
|
||||
expect(result.error).toBe("Mode not found")
|
||||
expect(result.error).toBe("Agent not found")
|
||||
})
|
||||
|
||||
it("should return error when mode is not found", async () => {
|
||||
|
|
@ -1408,12 +1408,12 @@ describe("CustomModesManager", () => {
|
|||
const result = await manager.exportModeWithRules("test-mode")
|
||||
|
||||
expect(result.success).toBe(false)
|
||||
expect(result.error).toBe("Mode not found")
|
||||
expect(result.error).toBe("Agent not found")
|
||||
})
|
||||
|
||||
it("should successfully export mode without rules when rules directory doesn't exist", async () => {
|
||||
const roomodesContent = {
|
||||
customModes: [{ slug: "test-mode", name: "Test Mode", roleDefinition: "Test Role", groups: ["read"] }],
|
||||
customModes: [{ slug: "test-mode", name: "Test Agent", roleDefinition: "Test Role", groups: ["read"] }],
|
||||
}
|
||||
;(fileExistsAtPath as Mock).mockImplementation(async (path: string) => {
|
||||
return path === mockRoomodes
|
||||
|
|
@ -1430,12 +1430,12 @@ describe("CustomModesManager", () => {
|
|||
|
||||
expect(result.success).toBe(true)
|
||||
expect(result.yaml).toContain("test-mode")
|
||||
expect(result.yaml).toContain("Test Mode")
|
||||
expect(result.yaml).toContain("Test Agent")
|
||||
})
|
||||
|
||||
it("should successfully export mode without rules when no rule files are found", async () => {
|
||||
const roomodesContent = {
|
||||
customModes: [{ slug: "test-mode", name: "Test Mode", roleDefinition: "Test Role", groups: ["read"] }],
|
||||
customModes: [{ slug: "test-mode", name: "Test Agent", roleDefinition: "Test Role", groups: ["read"] }],
|
||||
}
|
||||
;(fileExistsAtPath as Mock).mockImplementation(async (path: string) => {
|
||||
return path === mockRoomodes
|
||||
|
|
@ -1460,7 +1460,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
groups: ["read"],
|
||||
customInstructions: "Existing instructions",
|
||||
|
|
@ -1500,7 +1500,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "code",
|
||||
name: "Custom Code Mode",
|
||||
name: "Custom Code Agent",
|
||||
roleDefinition: "Custom Role",
|
||||
groups: ["read"],
|
||||
},
|
||||
|
|
@ -1530,7 +1530,7 @@ describe("CustomModesManager", () => {
|
|||
const result = await manager.exportModeWithRules("code")
|
||||
|
||||
expect(result.success).toBe(true)
|
||||
expect(result.yaml).toContain("Custom Code Mode")
|
||||
expect(result.yaml).toContain("Custom Code Agent")
|
||||
expect(result.yaml).toContain("Custom rules for code mode")
|
||||
// Should NOT delete the rules directory
|
||||
expect(fs.rm).not.toHaveBeenCalled()
|
||||
|
|
@ -1541,7 +1541,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
groups: ["read"],
|
||||
},
|
||||
|
|
@ -1576,7 +1576,7 @@ describe("CustomModesManager", () => {
|
|||
// Mock a global mode
|
||||
const globalMode = {
|
||||
slug: "global-test-mode",
|
||||
name: "Global Test Mode",
|
||||
name: "Global Test Agent",
|
||||
roleDefinition: "Global Test Role",
|
||||
groups: ["read"],
|
||||
source: "global",
|
||||
|
|
@ -1614,7 +1614,7 @@ describe("CustomModesManager", () => {
|
|||
|
||||
expect(result.success).toBe(true)
|
||||
expect(result.yaml).toContain("global-test-mode")
|
||||
expect(result.yaml).toContain("Global Test Mode")
|
||||
expect(result.yaml).toContain("Global Test Agent")
|
||||
expect(result.yaml).toContain("Global rule content")
|
||||
})
|
||||
|
||||
|
|
@ -1622,7 +1622,7 @@ describe("CustomModesManager", () => {
|
|||
// Mock a global mode
|
||||
const globalMode = {
|
||||
slug: "global-test-mode",
|
||||
name: "Global Test Mode",
|
||||
name: "Global Test Agent",
|
||||
roleDefinition: "Global Test Role",
|
||||
groups: ["read"],
|
||||
source: "global",
|
||||
|
|
@ -1646,7 +1646,7 @@ describe("CustomModesManager", () => {
|
|||
|
||||
expect(result.success).toBe(true)
|
||||
expect(result.yaml).toContain("global-test-mode")
|
||||
expect(result.yaml).toContain("Global Test Mode")
|
||||
expect(result.yaml).toContain("Global Test Agent")
|
||||
// Should not contain rulesFiles since no rules directory exists
|
||||
expect(result.yaml).not.toContain("rulesFiles")
|
||||
})
|
||||
|
|
@ -1655,7 +1655,7 @@ describe("CustomModesManager", () => {
|
|||
// Mock a global mode
|
||||
const globalMode = {
|
||||
slug: "global-test-mode",
|
||||
name: "Global Test Mode",
|
||||
name: "Global Test Agent",
|
||||
roleDefinition: "Global Test Role",
|
||||
groups: ["read"],
|
||||
source: "global",
|
||||
|
|
@ -1705,7 +1705,7 @@ describe("CustomModesManager", () => {
|
|||
customModes: [
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test Role",
|
||||
groups: ["read"],
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { type ModeConfig, customModesSettingsSchema } from "@roo-code/types"
|
|||
describe("CustomModesSettings", () => {
|
||||
const validMode = {
|
||||
slug: "123e4567-e89b-12d3-a456-426614174000",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role definition",
|
||||
groups: ["read"] as const,
|
||||
} satisfies ModeConfig
|
||||
|
|
@ -40,7 +40,7 @@ describe("CustomModesSettings", () => {
|
|||
{
|
||||
...validMode,
|
||||
slug: "987fcdeb-51a2-43e7-89ab-cdef01234567",
|
||||
name: "Another Mode",
|
||||
name: "Another Agent",
|
||||
},
|
||||
],
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ describe("CustomModeSchema", () => {
|
|||
test("accepts valid mode configuration", () => {
|
||||
const validMode = {
|
||||
slug: "test",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role definition",
|
||||
groups: ["read"] as const,
|
||||
} satisfies ModeConfig
|
||||
|
|
@ -24,7 +24,7 @@ describe("CustomModeSchema", () => {
|
|||
test("accepts mode with multiple groups", () => {
|
||||
const validMode = {
|
||||
slug: "test",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role definition",
|
||||
groups: ["read", "edit", "browser"] as const,
|
||||
} satisfies ModeConfig
|
||||
|
|
@ -35,7 +35,7 @@ describe("CustomModeSchema", () => {
|
|||
test("accepts mode with optional customInstructions", () => {
|
||||
const validMode = {
|
||||
slug: "test",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role definition",
|
||||
customInstructions: "Custom instructions",
|
||||
groups: ["read"] as const,
|
||||
|
|
@ -62,7 +62,7 @@ describe("CustomModeSchema", () => {
|
|||
test("rejects invalid slug format", () => {
|
||||
const invalidMode = {
|
||||
slug: "not@a@valid@slug",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role definition",
|
||||
groups: ["read"] as const,
|
||||
} satisfies Omit<ModeConfig, "slug"> & { slug: string }
|
||||
|
|
@ -81,7 +81,7 @@ describe("CustomModeSchema", () => {
|
|||
|
||||
const emptyRoleMode = {
|
||||
slug: "123e4567-e89b-12d3-a456-426614174000",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "",
|
||||
groups: ["read"] as const,
|
||||
} satisfies ModeConfig
|
||||
|
|
@ -93,7 +93,7 @@ describe("CustomModeSchema", () => {
|
|||
test("rejects invalid group configurations", () => {
|
||||
const invalidGroupMode = {
|
||||
slug: "123e4567-e89b-12d3-a456-426614174000",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role definition",
|
||||
groups: ["not-a-valid-group"] as any,
|
||||
}
|
||||
|
|
@ -178,7 +178,7 @@ describe("CustomModeSchema", () => {
|
|||
|
||||
const validBaseMode = {
|
||||
slug: "123e4567-e89b-12d3-a456-426614174000",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role definition",
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -368,8 +368,8 @@ describe("importExport", () => {
|
|||
;(vscode.window.showOpenDialog as Mock).mockResolvedValue([{ fsPath: "/mock/path/settings.json" }])
|
||||
|
||||
const customModes = [
|
||||
{ slug: "mode1", name: "Mode One", roleDefinition: "Custom role one", groups: [] },
|
||||
{ slug: "mode2", name: "Mode Two", roleDefinition: "Custom role two", groups: [] },
|
||||
{ slug: "mode1", name: "Agent One", roleDefinition: "Custom role one", groups: [] },
|
||||
{ slug: "mode2", name: "Agent Two", roleDefinition: "Custom role two", groups: [] },
|
||||
]
|
||||
|
||||
const mockFileContent = JSON.stringify({
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ describe("getEnvironmentDetails", () => {
|
|||
expect(result).toContain("# Current Time")
|
||||
expect(result).not.toContain("# Git Status") // Git status is disabled by default (maxGitStatusFiles = 0)
|
||||
expect(result).toContain("# Current Cost")
|
||||
expect(result).toContain("# Current Mode")
|
||||
expect(result).toContain("# Current Agent")
|
||||
expect(result).toContain("<model>test-model</model>")
|
||||
|
||||
expect(mockProvider.getState).toHaveBeenCalled()
|
||||
|
|
|
|||
|
|
@ -240,7 +240,7 @@ export async function getEnvironmentDetails(cline: Task, includeFileDetails: boo
|
|||
const modelInfo = cline.api.getModel().info
|
||||
const toolProtocol = resolveToolProtocol(state?.apiConfiguration ?? {}, modelInfo)
|
||||
|
||||
details += `\n\n# Current Mode\n`
|
||||
details += `\n\n# Current Agent\n`
|
||||
details += `<slug>${currentMode}</slug>\n`
|
||||
details += `<name>${modeDetails.name}</name>\n`
|
||||
details += `<model>${modelId}</model>\n`
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -264,7 +264,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -460,7 +460,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -469,7 +469,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -479,7 +479,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -418,7 +418,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
You can analyze code, explain concepts, and access external resources. Always answer the user's questions thoroughly, and do not switch to implementing code unless explicitly requested by the user. Include Mermaid diagrams when they clarify your response.
|
||||
|
||||
Rules:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "fr" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
Custom test instructions
|
||||
|
||||
Rules:
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Global Instructions:
|
||||
Global instructions
|
||||
|
||||
Mode-specific Instructions:
|
||||
Mode-specific instructions
|
||||
Agent-specific Instructions:
|
||||
Agent-specific instructions
|
||||
|
||||
Rules:
|
||||
# Rules from .clinerules-architect:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -94,7 +94,7 @@ Parameters:
|
|||
- task: (required) The task to get instructions for. This can take the following values:
|
||||
create_mode
|
||||
|
||||
Example: Requesting instructions to create a Mode
|
||||
Example: Requesting instructions to create a Agent
|
||||
|
||||
<fetch_instructions>
|
||||
<task>create_mode</task>
|
||||
|
|
@ -263,7 +263,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -459,7 +459,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -468,7 +468,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -478,7 +478,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -313,7 +313,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -528,7 +528,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -537,7 +537,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -547,7 +547,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -269,7 +269,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -465,7 +465,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -474,7 +474,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -484,7 +484,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Global Instructions:
|
||||
First instruction
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
Second instruction
|
||||
|
||||
Rules:
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ USER'S CUSTOM INSTRUCTIONS
|
|||
|
||||
The following additional instructions are provided by the user, and should be followed to the best of your ability without interfering with the TOOL USE guidelines.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
Custom mode instructions
|
||||
|
||||
Rules:
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ USER'S CUSTOM INSTRUCTIONS
|
|||
|
||||
The following additional instructions are provided by the user, and should be followed to the best of your ability without interfering with the TOOL USE guidelines.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
Custom test instructions
|
||||
|
||||
Rules:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -264,7 +264,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -460,7 +460,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -469,7 +469,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -479,7 +479,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -349,7 +349,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -545,7 +545,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -554,7 +554,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -564,7 +564,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -264,7 +264,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -460,7 +460,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -469,7 +469,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -479,7 +479,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -352,7 +352,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -548,7 +548,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -557,7 +557,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -567,7 +567,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -264,7 +264,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -460,7 +460,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -469,7 +469,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -479,7 +479,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -264,7 +264,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -460,7 +460,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -469,7 +469,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -479,7 +479,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -313,7 +313,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -528,7 +528,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -537,7 +537,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -547,7 +547,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another mode to implement the solution.
|
||||
You are Roo, an experienced technical leader who is inquisitive and an excellent planner. Your goal is to gather information and get context to create a detailed plan for accomplishing the user's task, which the user will review and approve before they switch into another agent to implement the solution.
|
||||
|
||||
====
|
||||
|
||||
|
|
@ -264,7 +264,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
@ -460,7 +460,7 @@ The following additional instructions are provided by the user, and should be fo
|
|||
Language Preference:
|
||||
You should always speak and think in the "en" language.
|
||||
|
||||
Mode-specific Instructions:
|
||||
Agent-specific Instructions:
|
||||
1. Do some information gathering (using provided tools) to get more context about the task.
|
||||
|
||||
2. You should also ask the user clarifying questions to get a better understanding of the task.
|
||||
|
|
@ -469,7 +469,7 @@ Mode-specific Instructions:
|
|||
- Specific and actionable
|
||||
- Listed in logical execution order
|
||||
- Focused on a single, well-defined outcome
|
||||
- Clear enough that another mode could execute it independently
|
||||
- Clear enough that another agent could execute it independently
|
||||
|
||||
**Note:** If the `update_todo_list` tool is not available, write the plan to a markdown file (e.g., `plan.md` or `todo.md`) instead.
|
||||
|
||||
|
|
@ -479,7 +479,7 @@ Mode-specific Instructions:
|
|||
|
||||
6. Include Mermaid diagrams if they help clarify complex workflows or system architecture. Please avoid using double quotes ("") and parentheses () inside square brackets ([]) in Mermaid diagrams, as this can cause parsing errors.
|
||||
|
||||
7. Use the switch_mode tool to request that the user switch to another mode to implement the solution.
|
||||
7. Use the switch_mode tool to request that the user switch to another agent to implement the solution.
|
||||
|
||||
**IMPORTANT: Focus on creating clear, actionable todo lists rather than lengthy markdown documents. Use the todo list as your primary planning tool to track and organize the work that needs to be done.**
|
||||
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ import { ModeConfig } from "@roo-code/types"
|
|||
|
||||
import { SYSTEM_PROMPT } from "../system"
|
||||
import { McpHub } from "../../../services/mcp/McpHub"
|
||||
import { defaultModeSlug, modes, Mode } from "../../../shared/modes"
|
||||
import { defaultModeSlug, modes, Agent } from "../../../shared/modes"
|
||||
import "../../../utils/path"
|
||||
import { addCustomInstructions } from "../sections/custom-instructions"
|
||||
import { MultiSearchReplaceDiffStrategy } from "../../diff/strategies/multi-search-replace"
|
||||
|
|
@ -97,7 +97,7 @@ __setMockImplementation(
|
|||
|
||||
// Add mode-specific instructions after
|
||||
if (modeCustomInstructions?.trim()) {
|
||||
sections.push(`Mode-specific Instructions:\n${modeCustomInstructions}`)
|
||||
sections.push(`Agent-specific Instructions:\n${modeCustomInstructions}`)
|
||||
}
|
||||
|
||||
// Add rules
|
||||
|
|
@ -406,7 +406,7 @@ describe("addCustomInstructions", () => {
|
|||
|
||||
it("should combine global and mode-specific instructions", async () => {
|
||||
const instructions = await addCustomInstructions(
|
||||
"Mode-specific instructions",
|
||||
"Agent-specific instructions",
|
||||
"Global instructions",
|
||||
"/test/path",
|
||||
defaultModeSlug,
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ import { ModeConfig } from "@roo-code/types"
|
|||
|
||||
import { SYSTEM_PROMPT } from "../system"
|
||||
import { McpHub } from "../../../services/mcp/McpHub"
|
||||
import { defaultModeSlug, modes, Mode } from "../../../shared/modes"
|
||||
import { defaultModeSlug, modes, Agent } from "../../../shared/modes"
|
||||
import "../../../utils/path"
|
||||
import { addCustomInstructions } from "../sections/custom-instructions"
|
||||
import { MultiSearchReplaceDiffStrategy } from "../../diff/strategies/multi-search-replace"
|
||||
|
|
@ -97,7 +97,7 @@ __setMockImplementation(
|
|||
|
||||
// Add mode-specific instructions after
|
||||
if (modeCustomInstructions?.trim()) {
|
||||
sections.push(`Mode-specific Instructions:\n${modeCustomInstructions}`)
|
||||
sections.push(`Agent-specific Instructions:\n${modeCustomInstructions}`)
|
||||
}
|
||||
|
||||
// Add rules
|
||||
|
|
@ -486,7 +486,7 @@ describe("SYSTEM_PROMPT", () => {
|
|||
const customModes: ModeConfig[] = [
|
||||
{
|
||||
slug: "custom-mode",
|
||||
name: "Custom Mode",
|
||||
name: "Custom Agent",
|
||||
roleDefinition: "Custom role definition",
|
||||
customInstructions: modeCustomInstructions,
|
||||
groups: ["read"] as const,
|
||||
|
|
@ -538,7 +538,7 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // mcpHub
|
||||
undefined, // diffStrategy
|
||||
undefined, // browserViewportSize
|
||||
defaultModeSlug as Mode, // mode
|
||||
defaultModeSlug as Agent, // mode
|
||||
customModePrompts, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
|
|
@ -571,7 +571,7 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // mcpHub
|
||||
undefined, // diffStrategy
|
||||
undefined, // browserViewportSize
|
||||
defaultModeSlug as Mode, // mode
|
||||
defaultModeSlug as Agent, // mode
|
||||
customModePrompts, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
|
|
@ -618,7 +618,7 @@ describe("SYSTEM_PROMPT", () => {
|
|||
|
||||
// Should not contain the tool description
|
||||
expect(prompt).not.toContain("## update_todo_list")
|
||||
// Mode instructions will still reference the tool with a fallback to markdown
|
||||
// Agent instructions will still reference the tool with a fallback to markdown
|
||||
})
|
||||
|
||||
it("should include update_todo_list tool when todoListEnabled is true", async () => {
|
||||
|
|
|
|||
|
|
@ -503,7 +503,7 @@ describe("addCustomInstructions", () => {
|
|||
expect(result).toContain("Español") // Check for language name
|
||||
expect(result).toContain("(es)") // Check for language code in parentheses
|
||||
expect(result).toContain("Global Instructions:\nglobal instructions")
|
||||
expect(result).toContain("Mode-specific Instructions:\nmode instructions")
|
||||
expect(result).toContain("Agent-specific Instructions:\nmode instructions")
|
||||
expect(result).toContain("Rules from .roorules-test-mode:\nmode specific rules")
|
||||
})
|
||||
|
||||
|
|
@ -639,7 +639,7 @@ describe("addCustomInstructions", () => {
|
|||
)
|
||||
|
||||
expect(result).toContain("Global Instructions:\nglobal instructions")
|
||||
expect(result).toContain("Mode-specific Instructions:\nmode instructions")
|
||||
expect(result).toContain("Agent-specific Instructions:\nmode instructions")
|
||||
expect(result).not.toContain("# Agent Rules Standard (AGENTS.md):")
|
||||
})
|
||||
|
||||
|
|
@ -710,7 +710,7 @@ describe("addCustomInstructions", () => {
|
|||
readlinkMock.mockImplementation((filePath: PathLike) => {
|
||||
const pathStr = filePath.toString()
|
||||
if (pathStr.endsWith("AGENTS.md")) {
|
||||
return Promise.resolve("../actual-agents-file.md")
|
||||
return Promise.resolve("../actual-modes-file.md")
|
||||
}
|
||||
return Promise.reject({ code: "ENOENT" })
|
||||
})
|
||||
|
|
@ -719,7 +719,7 @@ describe("addCustomInstructions", () => {
|
|||
statMock.mockImplementation((filePath: PathLike) => {
|
||||
const pathStr = filePath.toString()
|
||||
const normalizedPath = pathStr.replace(/\\/g, "/")
|
||||
if (normalizedPath.endsWith("actual-agents-file.md")) {
|
||||
if (normalizedPath.endsWith("actual-modes-file.md")) {
|
||||
return Promise.resolve({
|
||||
isFile: vi.fn().mockReturnValue(true),
|
||||
})
|
||||
|
|
@ -731,7 +731,7 @@ describe("addCustomInstructions", () => {
|
|||
readFileMock.mockImplementation((filePath: PathLike) => {
|
||||
const pathStr = filePath.toString()
|
||||
const normalizedPath = pathStr.replace(/\\/g, "/")
|
||||
if (normalizedPath.endsWith("actual-agents-file.md")) {
|
||||
if (normalizedPath.endsWith("actual-modes-file.md")) {
|
||||
return Promise.resolve("Agent rules from symlinked file")
|
||||
}
|
||||
return Promise.reject({ code: "ENOENT" })
|
||||
|
|
@ -762,7 +762,7 @@ describe("addCustomInstructions", () => {
|
|||
expect(readlinkMock).toHaveBeenCalledWith(expect.stringContaining("AGENTS.md"))
|
||||
|
||||
// Verify the resolved path was read
|
||||
expect(readFileMock).toHaveBeenCalledWith(expect.stringContaining("actual-agents-file.md"), "utf-8")
|
||||
expect(readFileMock).toHaveBeenCalledWith(expect.stringContaining("actual-modes-file.md"), "utf-8")
|
||||
})
|
||||
|
||||
it("should handle AGENTS.md as a regular file when not a symlink", async () => {
|
||||
|
|
@ -935,7 +935,7 @@ describe("addCustomInstructions", () => {
|
|||
)
|
||||
|
||||
expect(result).toContain("Global Instructions:")
|
||||
expect(result).toContain("Mode-specific Instructions:")
|
||||
expect(result).toContain("Agent-specific Instructions:")
|
||||
expect(result).not.toContain("Rules from .clinerules-test-mode")
|
||||
})
|
||||
|
||||
|
|
@ -990,7 +990,7 @@ describe("addCustomInstructions", () => {
|
|||
)
|
||||
|
||||
expect(result).toContain("Global Instructions:\nglobal instructions")
|
||||
expect(result).toContain("Mode-specific Instructions:\nmode instructions")
|
||||
expect(result).toContain("Agent-specific Instructions:\nmode instructions")
|
||||
expect(result).not.toContain("Rules from .clinerules-test-mode")
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ vi.mock("fs/promises")
|
|||
import type { Mock } from "vitest"
|
||||
import path from "path"
|
||||
import { readFile } from "fs/promises"
|
||||
import type { Mode } from "../../../../shared/modes" // Type-only import
|
||||
import type { Agent } from "../../../../shared/modes" // Type-only import
|
||||
import { loadSystemPromptFile, PromptVariables } from "../custom-system-prompt"
|
||||
|
||||
// Cast the mocked readFile to the correct Mock type
|
||||
|
|
@ -18,7 +18,7 @@ describe("loadSystemPromptFile", () => {
|
|||
workspace: "/path/to/workspace",
|
||||
}
|
||||
const mockCwd = "/mock/cwd"
|
||||
const mockMode: Mode = "test" // Use Mode type, e.g., 'test'
|
||||
const mockMode: Mode = "test" // Use Agent type, e.g., 'test'
|
||||
// Corrected expected file path format
|
||||
const expectedFilePath = path.join(mockCwd, ".roo", `system-prompt-${mockMode}`)
|
||||
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ async function loadAgentRulesFile(cwd: string): Promise<string> {
|
|||
return `# Agent Rules Standard (${filename}):\n${content}`
|
||||
}
|
||||
} catch (err) {
|
||||
// Silently ignore errors - agent rules files are optional
|
||||
// Silently ignore errors - mode rules files are optional
|
||||
}
|
||||
}
|
||||
return ""
|
||||
|
|
@ -330,7 +330,7 @@ export async function addCustomInstructions(
|
|||
|
||||
// Add mode-specific instructions after
|
||||
if (typeof modeCustomInstructions === "string" && modeCustomInstructions.trim()) {
|
||||
sections.push(`Mode-specific Instructions:\n${modeCustomInstructions.trim()}`)
|
||||
sections.push(`Agent-specific Instructions:\n${modeCustomInstructions.trim()}`)
|
||||
}
|
||||
|
||||
// Add rules - include both mode-specific and generic rules if they exist
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import fs from "fs/promises"
|
||||
import path from "path"
|
||||
import { Mode } from "../../../shared/modes"
|
||||
import { Agent } from "../../../shared/modes"
|
||||
import { fileExistsAtPath } from "../../../utils/fs"
|
||||
|
||||
export type PromptVariables = {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import type { ModeConfig, PromptComponent, CustomModePrompts, TodoItem } from "@
|
|||
|
||||
import type { SystemPromptSettings } from "./types"
|
||||
|
||||
import { Mode, modes, defaultModeSlug, getModeBySlug, getGroupName, getModeSelection } from "../../shared/modes"
|
||||
import { Agent, modes, defaultModeSlug, getModeBySlug, getGroupName, getModeSelection } from "../../shared/modes"
|
||||
import { DiffStrategy } from "../../shared/tools"
|
||||
import { formatLanguage } from "../../shared/language"
|
||||
import { isEmpty } from "../../utils/object"
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ describe("getFetchInstructionsDescription", () => {
|
|||
|
||||
expect(description).not.toContain("create_mcp_server")
|
||||
expect(description).toContain("create_mode")
|
||||
expect(description).toContain("Example: Requesting instructions to create a Mode")
|
||||
expect(description).toContain("Example: Requesting instructions to create a Agent")
|
||||
expect(description).toContain("<task>create_mode</task>")
|
||||
expect(description).not.toContain("Example: Requesting instructions to create an MCP Server")
|
||||
})
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ export function getFetchInstructionsDescription(enableMcpServerCreation?: boolea
|
|||
<fetch_instructions>
|
||||
<task>create_mcp_server</task>
|
||||
</fetch_instructions>`
|
||||
: `Example: Requesting instructions to create a Mode
|
||||
: `Example: Requesting instructions to create a Agent
|
||||
|
||||
<fetch_instructions>
|
||||
<task>create_mode</task>
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ export function filterNativeToolsForMode(
|
|||
let modeConfig = getModeBySlug(modeSlug, customModes)
|
||||
|
||||
// Fallback to default mode if current mode config is not found
|
||||
// This ensures the agent always has functional tools even if a custom mode is deleted
|
||||
// This ensures the mode always has functional tools even if a custom mode is deleted
|
||||
// or configuration becomes corrupted
|
||||
if (!modeConfig) {
|
||||
modeConfig = getModeBySlug(defaultModeSlug, customModes)!
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import type { ToolName, ModeConfig } from "@roo-code/types"
|
|||
|
||||
import { TOOL_GROUPS, ALWAYS_AVAILABLE_TOOLS, DiffStrategy } from "../../../shared/tools"
|
||||
import { McpHub } from "../../../services/mcp/McpHub"
|
||||
import { Mode, getModeConfig, isToolAllowedForMode, getGroupName } from "../../../shared/modes"
|
||||
import { Agent, getModeConfig, isToolAllowedForMode, getGroupName } from "../../../shared/modes"
|
||||
|
||||
import { ToolArgs } from "./types"
|
||||
import { getExecuteCommandDescription } from "./execute-command"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ Parameters:
|
|||
- reason: (optional) The reason for switching modes
|
||||
Usage:
|
||||
<switch_mode>
|
||||
<mode_slug>Mode slug here</mode_slug>
|
||||
<mode_slug>Agent slug here</mode_slug>
|
||||
<reason>Reason for switching here</reason>
|
||||
</switch_mode>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { describe, it, expect, beforeEach, vi } from "vitest"
|
||||
import type { ModeConfig } from "@roo-code/types"
|
||||
|
||||
describe("Native Tools Filtering by Mode", () => {
|
||||
describe("Native Tools Filtering by Agent", () => {
|
||||
describe("attemptApiRequest native tool filtering", () => {
|
||||
it("should filter native tools based on mode restrictions", async () => {
|
||||
// This test verifies that when using native protocol, tools are filtered
|
||||
|
|
@ -83,24 +83,24 @@ describe("Native Tools Filtering by Mode", () => {
|
|||
it("should filter MCP tools based on use_mcp_tool permission", async () => {
|
||||
const modeWithMcp: ModeConfig = {
|
||||
slug: "test-mode-with-mcp",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test",
|
||||
groups: ["read", "mcp"] as const,
|
||||
}
|
||||
|
||||
const modeWithoutMcp: ModeConfig = {
|
||||
slug: "test-mode-no-mcp",
|
||||
name: "Test Mode No MCP",
|
||||
name: "Test Agent No MCP",
|
||||
roleDefinition: "Test",
|
||||
groups: ["read"] as const,
|
||||
}
|
||||
|
||||
const { isToolAllowedForMode } = await import("../../../shared/modes")
|
||||
|
||||
// Mode with MCP group should allow use_mcp_tool
|
||||
// Agent with MCP group should allow use_mcp_tool
|
||||
expect(isToolAllowedForMode("use_mcp_tool", "test-mode-with-mcp", [modeWithMcp])).toBe(true)
|
||||
|
||||
// Mode without MCP group should NOT allow use_mcp_tool
|
||||
// Agent without MCP group should NOT allow use_mcp_tool
|
||||
expect(isToolAllowedForMode("use_mcp_tool", "test-mode-no-mcp", [modeWithoutMcp])).toBe(false)
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ export class FetchInstructionsTool extends BaseTool<"fetch_instructions"> {
|
|||
return
|
||||
}
|
||||
|
||||
// Now fetch the content and provide it to the agent.
|
||||
// Now fetch the content and provide it to the mode.
|
||||
const provider = task.providerRef.deref()
|
||||
const mcpHub = provider?.getMcpHub()
|
||||
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ describe("newTaskTool", () => {
|
|||
mockAskApproval.mockResolvedValue(true) // Default to approved
|
||||
vi.mocked(getModeBySlug).mockReturnValue({
|
||||
slug: "code",
|
||||
name: "Code Mode",
|
||||
name: "Code Agent",
|
||||
roleDefinition: "Test role definition",
|
||||
groups: ["command", "read", "edit"],
|
||||
}) // Default valid mode
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ describe("mode-validator", () => {
|
|||
const customModes: ModeConfig[] = [
|
||||
{
|
||||
slug: "custom-mode",
|
||||
name: "Custom Mode",
|
||||
name: "Custom Agent",
|
||||
roleDefinition: "Custom role",
|
||||
groups: ["read", "edit"] as const,
|
||||
},
|
||||
|
|
@ -73,7 +73,7 @@ describe("mode-validator", () => {
|
|||
const customModes: ModeConfig[] = [
|
||||
{
|
||||
slug: codeMode,
|
||||
name: "Custom Code Mode",
|
||||
name: "Custom Code Agent",
|
||||
roleDefinition: "Custom role",
|
||||
groups: ["read"] as const,
|
||||
},
|
||||
|
|
@ -88,7 +88,7 @@ describe("mode-validator", () => {
|
|||
const customModes: ModeConfig[] = [
|
||||
{
|
||||
slug: "custom-mode",
|
||||
name: "Custom Mode",
|
||||
name: "Custom Agent",
|
||||
roleDefinition: "Custom role",
|
||||
groups: ["edit"] as const,
|
||||
},
|
||||
|
|
@ -114,7 +114,7 @@ describe("mode-validator", () => {
|
|||
const customModes: ModeConfig[] = [
|
||||
{
|
||||
slug: "no-mcp-mode",
|
||||
name: "No MCP Mode",
|
||||
name: "No MCP Agent",
|
||||
roleDefinition: "Custom role",
|
||||
groups: ["read", "edit"] as const,
|
||||
},
|
||||
|
|
@ -128,7 +128,7 @@ describe("mode-validator", () => {
|
|||
const customModes: ModeConfig[] = [
|
||||
{
|
||||
slug: "custom-mcp-mode",
|
||||
name: "Custom MCP Mode",
|
||||
name: "Custom MCP Agent",
|
||||
roleDefinition: "Custom role",
|
||||
groups: ["read", "mcp"] as const,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ export const MAX_FILE_SIZE_FOR_TOKENIZATION = 5_000_000 // 5MB
|
|||
|
||||
/**
|
||||
* Size of preview to read from files that exceed MAX_FILE_SIZE_FOR_TOKENIZATION.
|
||||
* This allows the agent to see the beginning of large files without crashing.
|
||||
* This allows the mode to see the beginning of large files without crashing.
|
||||
*/
|
||||
export const PREVIEW_SIZE_FOR_LARGE_FILES = 100_000 // 100KB
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import type { ToolName, ModeConfig } from "@roo-code/types"
|
||||
import { toolNames as validToolNames } from "@roo-code/types"
|
||||
|
||||
import { Mode, isToolAllowedForMode } from "../../shared/modes"
|
||||
import { Agent, isToolAllowedForMode } from "../../shared/modes"
|
||||
|
||||
/**
|
||||
* Checks if a tool name is a valid, known tool.
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ import { findLast } from "../../shared/array"
|
|||
import { supportPrompt } from "../../shared/support-prompt"
|
||||
import { GlobalFileNames } from "../../shared/globalFileNames"
|
||||
import type { ExtensionMessage, ExtensionState, MarketplaceInstalledMetadata } from "../../shared/ExtensionMessage"
|
||||
import { Mode, defaultModeSlug, getModeBySlug } from "../../shared/modes"
|
||||
import { Agent, defaultModeSlug, getModeBySlug } from "../../shared/modes"
|
||||
import { experimentDefault } from "../../shared/experiments"
|
||||
import { formatLanguage } from "../../shared/language"
|
||||
import { WebviewMessage } from "../../shared/WebviewMessage"
|
||||
|
|
@ -870,9 +870,9 @@ export class ClineProvider
|
|||
const modeExists = getModeBySlug(historyItem.mode, customModes) !== undefined
|
||||
|
||||
if (!modeExists) {
|
||||
// Mode no longer exists, fall back to default mode.
|
||||
// Agent no longer exists, fall back to default mode.
|
||||
this.log(
|
||||
`Mode '${historyItem.mode}' from history no longer exists. Falling back to default mode '${defaultModeSlug}'.`,
|
||||
`Agent '${historyItem.mode}' from history no longer exists. Falling back to default mode '${defaultModeSlug}'.`,
|
||||
)
|
||||
historyItem.mode = defaultModeSlug
|
||||
}
|
||||
|
|
@ -2269,7 +2269,7 @@ export class ClineProvider
|
|||
currentApiConfigName: stateValues.currentApiConfigName ?? "default",
|
||||
listApiConfigMeta: stateValues.listApiConfigMeta ?? [],
|
||||
pinnedApiConfigs: stateValues.pinnedApiConfigs ?? {},
|
||||
modeApiConfigs: stateValues.modeApiConfigs ?? ({} as Record<Mode, string>),
|
||||
modeApiConfigs: stateValues.modeApiConfigs ?? ({} as Record<Agent, string>),
|
||||
customModePrompts: stateValues.customModePrompts ?? {},
|
||||
customSupportPrompts: stateValues.customSupportPrompts ?? {},
|
||||
enhancementApiConfigId: stateValues.enhancementApiConfigId,
|
||||
|
|
@ -2834,7 +2834,7 @@ export class ClineProvider
|
|||
})
|
||||
}
|
||||
|
||||
// Modes
|
||||
// Agents
|
||||
|
||||
public async getModes(): Promise<{ slug: string; name: string }[]> {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -243,26 +243,26 @@ vi.mock("../../../shared/modes", () => ({
|
|||
modes: [
|
||||
{
|
||||
slug: "code",
|
||||
name: "Code Mode",
|
||||
name: "Code Agent",
|
||||
roleDefinition: "You are a code assistant",
|
||||
groups: ["read", "edit", "browser"],
|
||||
},
|
||||
{
|
||||
slug: "architect",
|
||||
name: "Architect Mode",
|
||||
name: "Architect Agent",
|
||||
roleDefinition: "You are an architect",
|
||||
groups: ["read", "edit"],
|
||||
},
|
||||
{
|
||||
slug: "ask",
|
||||
name: "Ask Mode",
|
||||
name: "Ask Agent",
|
||||
roleDefinition: "You are a helpful assistant",
|
||||
groups: ["read"],
|
||||
},
|
||||
],
|
||||
getModeBySlug: vi.fn().mockReturnValue({
|
||||
slug: "code",
|
||||
name: "Code Mode",
|
||||
name: "Code Agent",
|
||||
roleDefinition: "You are a code assistant",
|
||||
groups: ["read", "edit", "browser"],
|
||||
}),
|
||||
|
|
@ -1700,7 +1700,7 @@ describe("ClineProvider", () => {
|
|||
getCustomModes: vi.fn().mockResolvedValue([
|
||||
{
|
||||
slug: "existing-mode",
|
||||
name: "Existing Mode",
|
||||
name: "Existing Agent",
|
||||
roleDefinition: "Test role",
|
||||
groups: ["read"] as const,
|
||||
},
|
||||
|
|
@ -1715,7 +1715,7 @@ describe("ClineProvider", () => {
|
|||
.mockReturnValueOnce(undefined) // First call returns undefined (mode doesn't exist)
|
||||
.mockReturnValue({
|
||||
slug: "code",
|
||||
name: "Code Mode",
|
||||
name: "Code Agent",
|
||||
roleDefinition: "You are a code assistant",
|
||||
groups: ["read", "edit", "browser"],
|
||||
}) // Subsequent calls return default mode
|
||||
|
|
@ -1751,7 +1751,7 @@ describe("ClineProvider", () => {
|
|||
// Verify fallback to default mode
|
||||
expect(mockContext.globalState.update).toHaveBeenCalledWith("mode", "code")
|
||||
expect(logSpy).toHaveBeenCalledWith(
|
||||
"Mode 'non-existent-mode' from history no longer exists. Falling back to default mode 'code'.",
|
||||
"Agent 'non-existent-mode' from history no longer exists. Falling back to default mode 'code'.",
|
||||
)
|
||||
|
||||
// Verify history item was updated with default mode
|
||||
|
|
@ -1766,7 +1766,7 @@ describe("ClineProvider", () => {
|
|||
getCustomModes: vi.fn().mockResolvedValue([
|
||||
{
|
||||
slug: "custom-mode",
|
||||
name: "Custom Mode",
|
||||
name: "Custom Agent",
|
||||
roleDefinition: "Custom role",
|
||||
groups: ["read", "edit"] as const,
|
||||
},
|
||||
|
|
@ -1779,7 +1779,7 @@ describe("ClineProvider", () => {
|
|||
const { getModeBySlug } = await import("../../../shared/modes")
|
||||
vi.mocked(getModeBySlug).mockReturnValue({
|
||||
slug: "custom-mode",
|
||||
name: "Custom Mode",
|
||||
name: "Custom Agent",
|
||||
roleDefinition: "Custom role",
|
||||
groups: ["read", "edit"],
|
||||
})
|
||||
|
|
@ -1839,7 +1839,7 @@ describe("ClineProvider", () => {
|
|||
const { getModeBySlug } = await import("../../../shared/modes")
|
||||
vi.mocked(getModeBySlug).mockReturnValue({
|
||||
slug: "architect",
|
||||
name: "Architect Mode",
|
||||
name: "Architect Agent",
|
||||
roleDefinition: "You are an architect",
|
||||
groups: ["read", "edit"],
|
||||
})
|
||||
|
|
@ -1914,7 +1914,7 @@ describe("ClineProvider", () => {
|
|||
const { getModeBySlug } = await import("../../../shared/modes")
|
||||
vi.mocked(getModeBySlug).mockReturnValue({
|
||||
slug: "code",
|
||||
name: "Code Mode",
|
||||
name: "Code Agent",
|
||||
roleDefinition: "You are a code assistant",
|
||||
groups: ["read", "edit", "browser"],
|
||||
})
|
||||
|
|
@ -1964,7 +1964,7 @@ describe("ClineProvider", () => {
|
|||
getCustomModes: vi.fn().mockResolvedValue([
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Updated role definition",
|
||||
groups: ["read"] as const,
|
||||
},
|
||||
|
|
@ -1977,7 +1977,7 @@ describe("ClineProvider", () => {
|
|||
type: "updateCustomMode",
|
||||
modeConfig: {
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Updated role definition",
|
||||
groups: ["read"] as const,
|
||||
},
|
||||
|
|
@ -1994,7 +1994,7 @@ describe("ClineProvider", () => {
|
|||
|
||||
// Verify state was updated
|
||||
expect(mockContext.globalState.update).toHaveBeenCalledWith("customModes", [
|
||||
{ groups: ["read"], name: "Test Mode", roleDefinition: "Updated role definition", slug: "test-mode" },
|
||||
{ groups: ["read"], name: "Test Agent", roleDefinition: "Updated role definition", slug: "test-mode" },
|
||||
])
|
||||
|
||||
// Verify state was posted to webview
|
||||
|
|
|
|||
|
|
@ -123,20 +123,20 @@ vi.mock("../../../shared/modes", () => ({
|
|||
modes: [
|
||||
{
|
||||
slug: "code",
|
||||
name: "Code Mode",
|
||||
name: "Code Agent",
|
||||
roleDefinition: "You are a code assistant",
|
||||
groups: ["read", "edit", "browser"],
|
||||
},
|
||||
{
|
||||
slug: "architect",
|
||||
name: "Architect Mode",
|
||||
name: "Architect Agent",
|
||||
roleDefinition: "You are an architect",
|
||||
groups: ["read", "edit"],
|
||||
},
|
||||
],
|
||||
getModeBySlug: vi.fn().mockReturnValue({
|
||||
slug: "code",
|
||||
name: "Code Mode",
|
||||
name: "Code Agent",
|
||||
roleDefinition: "You are a code assistant",
|
||||
groups: ["read", "edit", "browser"],
|
||||
}),
|
||||
|
|
@ -184,7 +184,7 @@ vi.mock("@roo-code/telemetry", () => ({
|
|||
},
|
||||
}))
|
||||
|
||||
describe("ClineProvider - Sticky Mode", () => {
|
||||
describe("ClineProvider - Sticky Agent", () => {
|
||||
let provider: ClineProvider
|
||||
let mockContext: vscode.ExtensionContext
|
||||
let mockOutputChannel: vscode.OutputChannel
|
||||
|
|
@ -744,7 +744,7 @@ describe("ClineProvider - Sticky Mode", () => {
|
|||
cacheWrites: 0,
|
||||
cacheReads: 0,
|
||||
totalCost: 0.001,
|
||||
mode: "deleted-mode", // Mode that doesn't exist
|
||||
mode: "deleted-mode", // Agent that doesn't exist
|
||||
}
|
||||
|
||||
// Mock getModeBySlug to return undefined for deleted mode
|
||||
|
|
@ -889,7 +889,7 @@ describe("ClineProvider - Sticky Mode", () => {
|
|||
})
|
||||
})
|
||||
|
||||
describe("Mode switch failure scenarios", () => {
|
||||
describe("Agent switch failure scenarios", () => {
|
||||
it("should handle invalid mode gracefully", async () => {
|
||||
await provider.resolveWebviewView(mockWebviewView)
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ vi.mock("../../../api", () => ({
|
|||
const mockCustomModes = [
|
||||
{
|
||||
slug: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role",
|
||||
description: "",
|
||||
groups: ["browser"], // critical: include browser group
|
||||
|
|
|
|||
|
|
@ -548,7 +548,7 @@ describe("webviewMessageHandler - deleteCustomMode", () => {
|
|||
|
||||
vi.mocked(mockClineProvider.customModesManager.getCustomModes).mockResolvedValue([
|
||||
{
|
||||
name: "Test Project Mode",
|
||||
name: "Test Project Agent",
|
||||
slug,
|
||||
roleDefinition: "Test Role",
|
||||
groups: [],
|
||||
|
|
@ -573,7 +573,7 @@ describe("webviewMessageHandler - deleteCustomMode", () => {
|
|||
|
||||
vi.mocked(mockClineProvider.customModesManager.getCustomModes).mockResolvedValue([
|
||||
{
|
||||
name: "Test Global Mode",
|
||||
name: "Test Global Agent",
|
||||
slug,
|
||||
roleDefinition: "Test Role",
|
||||
groups: [],
|
||||
|
|
@ -595,7 +595,7 @@ describe("webviewMessageHandler - deleteCustomMode", () => {
|
|||
const slug = "test-mode-no-rules"
|
||||
vi.mocked(mockClineProvider.customModesManager.getCustomModes).mockResolvedValue([
|
||||
{
|
||||
name: "Test Mode No Rules",
|
||||
name: "Test Agent No Rules",
|
||||
slug,
|
||||
roleDefinition: "Test Role",
|
||||
groups: [],
|
||||
|
|
@ -620,7 +620,7 @@ describe("webviewMessageHandler - deleteCustomMode", () => {
|
|||
|
||||
vi.mocked(mockClineProvider.customModesManager.getCustomModes).mockResolvedValue([
|
||||
{
|
||||
name: "Test Mode Error",
|
||||
name: "Test Agent Error",
|
||||
slug,
|
||||
roleDefinition: "Test Role",
|
||||
groups: [],
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ import { getOpenAiModels } from "../../api/providers/openai"
|
|||
import { getVsCodeLmModels } from "../../api/providers/vscode-lm"
|
||||
import { openMention } from "../mentions"
|
||||
import { getWorkspacePath } from "../../utils/path"
|
||||
import { Mode, defaultModeSlug } from "../../shared/modes"
|
||||
import { Agent, defaultModeSlug } from "../../shared/modes"
|
||||
import { getModels, flushModels } from "../../api/providers/fetchers/modelCache"
|
||||
import { GetModelsOptions } from "../../shared/api"
|
||||
import { generateSystemPrompt } from "./generateSystemPrompt"
|
||||
|
|
@ -1479,7 +1479,7 @@ export const webviewMessageHandler = async (
|
|||
break
|
||||
|
||||
case "mode":
|
||||
await provider.handleModeSwitch(message.text as Mode)
|
||||
await provider.handleModeSwitch(message.text as Agent)
|
||||
break
|
||||
case "updatePrompt":
|
||||
if (message.promptMode && message.customPrompt !== undefined) {
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ export class BrowserSession {
|
|||
const stats = await this.ensureChromiumExists()
|
||||
this.browser = await stats.puppeteer.launch({
|
||||
args: [
|
||||
"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||
"--user-mode=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||
],
|
||||
executablePath: stats.executablePath,
|
||||
defaultViewport: this.getViewport(),
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ export class UrlContentFetcher {
|
|||
}
|
||||
const stats = await this.ensureChromiumExists()
|
||||
const args = [
|
||||
"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||
"--user-mode=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||
"--disable-dev-shm-usage",
|
||||
"--disable-accelerated-2d-canvas",
|
||||
"--no-first-run",
|
||||
|
|
@ -66,7 +66,7 @@ export class UrlContentFetcher {
|
|||
args,
|
||||
executablePath: stats.executablePath,
|
||||
})
|
||||
// (latest version of puppeteer does not add headless to user agent)
|
||||
// (latest version of puppeteer does not add headless to user mode)
|
||||
this.page = await this.browser?.newPage()
|
||||
|
||||
// Set additional page configurations to improve loading success
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ describe("UrlContentFetcher", () => {
|
|||
const stats = await vi.mocked(PCR).mock.results[0].value
|
||||
expect(stats.puppeteer.launch).toHaveBeenCalledWith({
|
||||
args: [
|
||||
"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||
"--user-mode=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||
"--disable-dev-shm-usage",
|
||||
"--disable-accelerated-2d-canvas",
|
||||
"--no-first-run",
|
||||
|
|
@ -177,7 +177,7 @@ describe("UrlContentFetcher", () => {
|
|||
const stats = await vi.mocked(PCR).mock.results[vi.mocked(PCR).mock.results.length - 1].value
|
||||
expect(stats.puppeteer.launch).toHaveBeenCalledWith({
|
||||
args: [
|
||||
"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||
"--user-mode=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||
"--disable-dev-shm-usage",
|
||||
"--disable-accelerated-2d-canvas",
|
||||
"--no-first-run",
|
||||
|
|
|
|||
|
|
@ -29,11 +29,11 @@ Please analyze this codebase and create an AGENTS.md file containing:
|
|||
- Essential for avoiding mistakes or following project conventions
|
||||
|
||||
Usage notes:
|
||||
- The file you create will be given to agentic coding agents (such as yourself) that operate in this repository
|
||||
- The file you create will be given to agentic coding modes (such as yourself) that operate in this repository
|
||||
- Keep the main AGENTS.md concise - aim for about 20 lines, but use more if the project complexity requires it
|
||||
- If there's already an AGENTS.md, improve it
|
||||
- If there are Claude Code rules (in CLAUDE.md), Cursor rules (in .cursor/rules/ or .cursorrules), or Copilot rules (in .github/copilot-instructions.md), make sure to include them
|
||||
- Be sure to prefix the file with: "# AGENTS.md\\n\\nThis file provides guidance to agents when working with code in this repository."
|
||||
- Be sure to prefix the file with: "# AGENTS.md\\n\\nThis file provides guidance to modes when working with code in this repository."
|
||||
</purpose>
|
||||
|
||||
<todo_list_creation>
|
||||
|
|
@ -148,7 +148,7 @@ Please analyze this codebase and create an AGENTS.md file containing:
|
|||
- Goal: File should be SHORTER and MORE VALUABLE
|
||||
|
||||
Content should include:
|
||||
- Header: "# AGENTS.md\\n\\nThis file provides guidance to agents when working with code in this repository."
|
||||
- Header: "# AGENTS.md\\n\\nThis file provides guidance to modes when working with code in this repository."
|
||||
- Build/lint/test commands - ONLY if they differ from standard package.json scripts
|
||||
- Code style - ONLY project-specific rules not covered by linter configs
|
||||
- Custom utilities or patterns discovered by reading the code
|
||||
|
|
|
|||
|
|
@ -36,12 +36,12 @@ export class SimpleInstaller {
|
|||
target: "project" | "global",
|
||||
): Promise<{ filePath: string; line?: number }> {
|
||||
if (!item.content) {
|
||||
throw new Error("Mode item missing content")
|
||||
throw new Error("Agent item missing content")
|
||||
}
|
||||
|
||||
// Modes should always have string content, not array
|
||||
// Agents should always have string content, not array
|
||||
if (Array.isArray(item.content)) {
|
||||
throw new Error("Mode content should not be an array")
|
||||
throw new Error("Agent content should not be an array")
|
||||
}
|
||||
|
||||
// If CustomModesManager is available, use importModeWithRules
|
||||
|
|
@ -316,7 +316,7 @@ export class SimpleInstaller {
|
|||
}
|
||||
|
||||
if (!modeSlug) {
|
||||
throw new Error("Mode missing slug identifier")
|
||||
throw new Error("Agent missing slug identifier")
|
||||
}
|
||||
|
||||
// Get the current modes to determine the source
|
||||
|
|
|
|||
|
|
@ -92,34 +92,34 @@ describe("MarketplaceManager", () => {
|
|||
const items: MarketplaceItem[] = [
|
||||
{
|
||||
id: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
description: "A test mode for testing",
|
||||
type: "mode",
|
||||
content: "# Test Mode\nThis is a test mode.",
|
||||
content: "# Test Agent\nThis is a test mode.",
|
||||
},
|
||||
{
|
||||
id: "other-mode",
|
||||
name: "Other Mode",
|
||||
name: "Other Agent",
|
||||
description: "Another mode",
|
||||
type: "mode",
|
||||
content: "# Other Mode\nThis is another mode.",
|
||||
content: "# Other Agent\nThis is another mode.",
|
||||
},
|
||||
]
|
||||
|
||||
const filtered = manager.filterItems(items, { search: "test" })
|
||||
|
||||
expect(filtered).toHaveLength(1)
|
||||
expect(filtered[0].name).toBe("Test Mode")
|
||||
expect(filtered[0].name).toBe("Test Agent")
|
||||
})
|
||||
|
||||
it("should filter items by type", () => {
|
||||
const items: MarketplaceItem[] = [
|
||||
{
|
||||
id: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
description: "A test mode",
|
||||
type: "mode",
|
||||
content: "# Test Mode",
|
||||
content: "# Test Agent",
|
||||
},
|
||||
{
|
||||
id: "test-mcp",
|
||||
|
|
@ -141,10 +141,10 @@ describe("MarketplaceManager", () => {
|
|||
const items: MarketplaceItem[] = [
|
||||
{
|
||||
id: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
description: "A test mode",
|
||||
type: "mode",
|
||||
content: "# Test Mode",
|
||||
content: "# Test Agent",
|
||||
},
|
||||
]
|
||||
|
||||
|
|
@ -160,10 +160,10 @@ describe("MarketplaceManager", () => {
|
|||
const mockItems: MarketplaceItem[] = [
|
||||
{
|
||||
id: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
description: "A test mode",
|
||||
type: "mode",
|
||||
content: "# Test Mode",
|
||||
content: "# Test Agent",
|
||||
},
|
||||
]
|
||||
|
||||
|
|
@ -173,7 +173,7 @@ describe("MarketplaceManager", () => {
|
|||
const result = await manager.getMarketplaceItems()
|
||||
|
||||
expect(result.marketplaceItems).toHaveLength(1)
|
||||
expect(result.marketplaceItems[0].name).toBe("Test Mode")
|
||||
expect(result.marketplaceItems[0].name).toBe("Test Agent")
|
||||
expect(result.organizationMcps).toHaveLength(0)
|
||||
})
|
||||
|
||||
|
|
@ -307,10 +307,10 @@ describe("MarketplaceManager", () => {
|
|||
it("should install a mode item", async () => {
|
||||
const item: MarketplaceItem = {
|
||||
id: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
description: "A test mode",
|
||||
type: "mode",
|
||||
content: "# Test Mode\nThis is a test mode.",
|
||||
content: "# Test Agent\nThis is a test mode.",
|
||||
}
|
||||
|
||||
// Mock the installer
|
||||
|
|
@ -352,10 +352,10 @@ describe("MarketplaceManager", () => {
|
|||
it("should remove a mode item", async () => {
|
||||
const item: MarketplaceItem = {
|
||||
id: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
description: "A test mode",
|
||||
type: "mode",
|
||||
content: "# Test Mode",
|
||||
content: "# Test Agent",
|
||||
}
|
||||
|
||||
// Mock the installer
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ describe("RemoteConfigLoader", () => {
|
|||
it("should fetch and combine modes and MCPs from API", async () => {
|
||||
const mockModesYaml = `items:
|
||||
- id: "test-mode"
|
||||
name: "Test Mode"
|
||||
name: "Test Agent"
|
||||
description: "A test mode"
|
||||
content: "customModes:\\n - slug: test\\n name: Test"`
|
||||
|
||||
|
|
@ -76,7 +76,7 @@ describe("RemoteConfigLoader", () => {
|
|||
expect(items[0]).toEqual({
|
||||
type: "mode",
|
||||
id: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
description: "A test mode",
|
||||
content: "customModes:\n - slug: test\n name: Test",
|
||||
})
|
||||
|
|
@ -93,7 +93,7 @@ describe("RemoteConfigLoader", () => {
|
|||
it("should use cache on subsequent calls", async () => {
|
||||
const mockModesYaml = `items:
|
||||
- id: "test-mode"
|
||||
name: "Test Mode"
|
||||
name: "Test Agent"
|
||||
description: "A test mode"
|
||||
content: "test content"`
|
||||
|
||||
|
|
@ -128,7 +128,7 @@ describe("RemoteConfigLoader", () => {
|
|||
it("should retry on network failures", async () => {
|
||||
const mockModesYaml = `items:
|
||||
- id: "test-mode"
|
||||
name: "Test Mode"
|
||||
name: "Test Agent"
|
||||
description: "A test mode"
|
||||
content: "test content"`
|
||||
|
||||
|
|
@ -204,7 +204,7 @@ describe("RemoteConfigLoader", () => {
|
|||
it("should find specific item by id and type", async () => {
|
||||
const mockModesYaml = `items:
|
||||
- id: "target-mode"
|
||||
name: "Target Mode"
|
||||
name: "Target Agent"
|
||||
description: "The mode we want"
|
||||
content: "test content"`
|
||||
|
||||
|
|
@ -232,7 +232,7 @@ describe("RemoteConfigLoader", () => {
|
|||
expect(modeItem).toEqual({
|
||||
type: "mode",
|
||||
id: "target-mode",
|
||||
name: "Target Mode",
|
||||
name: "Target Agent",
|
||||
description: "The mode we want",
|
||||
content: "test content",
|
||||
})
|
||||
|
|
@ -254,7 +254,7 @@ describe("RemoteConfigLoader", () => {
|
|||
it("should clear cache and force fresh API calls", async () => {
|
||||
const mockModesYaml = `items:
|
||||
- id: "test-mode"
|
||||
name: "Test Mode"
|
||||
name: "Test Agent"
|
||||
description: "A test mode"
|
||||
content: "test content"`
|
||||
|
||||
|
|
@ -291,7 +291,7 @@ describe("RemoteConfigLoader", () => {
|
|||
it("should expire cache after 5 minutes", async () => {
|
||||
const mockModesYaml = `items:
|
||||
- id: "test-mode"
|
||||
name: "Test Mode"
|
||||
name: "Test Agent"
|
||||
description: "A test mode"
|
||||
content: "test content"`
|
||||
|
||||
|
|
|
|||
|
|
@ -61,12 +61,12 @@ describe("SimpleInstaller", () => {
|
|||
describe("installMode", () => {
|
||||
const mockModeItem: MarketplaceItem = {
|
||||
id: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
description: "A test mode for testing",
|
||||
type: "mode",
|
||||
content: yaml.stringify({
|
||||
slug: "test",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role",
|
||||
groups: ["read"],
|
||||
}),
|
||||
|
|
@ -107,7 +107,7 @@ describe("SimpleInstaller", () => {
|
|||
}
|
||||
|
||||
await expect(installer.installItem(arrayContentMode, { target: "project" })).rejects.toThrow(
|
||||
"Mode content should not be an array",
|
||||
"Agent content should not be an array",
|
||||
)
|
||||
})
|
||||
|
||||
|
|
@ -118,7 +118,7 @@ describe("SimpleInstaller", () => {
|
|||
}
|
||||
|
||||
await expect(installer.installItem(noContentMode, { target: "project" })).rejects.toThrow(
|
||||
"Mode item missing content",
|
||||
"Agent item missing content",
|
||||
)
|
||||
})
|
||||
|
||||
|
|
@ -206,12 +206,12 @@ describe("SimpleInstaller", () => {
|
|||
describe("removeMode", () => {
|
||||
const mockModeItem: MarketplaceItem = {
|
||||
id: "test-mode",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
description: "A test mode for testing",
|
||||
type: "mode",
|
||||
content: yaml.stringify({
|
||||
slug: "test",
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role",
|
||||
groups: ["read"],
|
||||
}),
|
||||
|
|
@ -220,7 +220,7 @@ describe("SimpleInstaller", () => {
|
|||
it("should use CustomModesManager to delete mode and clean up rules folder", async () => {
|
||||
// Mock that the mode exists with project source
|
||||
vi.mocked(mockCustomModesManager.getCustomModes).mockResolvedValueOnce([
|
||||
{ slug: "test", name: "Test Mode", source: "project" } as any,
|
||||
{ slug: "test", name: "Test Agent", source: "project" } as any,
|
||||
])
|
||||
|
||||
await installer.removeItem(mockModeItem, { target: "project" })
|
||||
|
|
@ -235,7 +235,7 @@ describe("SimpleInstaller", () => {
|
|||
it("should handle global mode removal with rules cleanup", async () => {
|
||||
// Mock that the mode exists with global source
|
||||
vi.mocked(mockCustomModesManager.getCustomModes).mockResolvedValueOnce([
|
||||
{ slug: "test", name: "Test Mode", source: "global" } as any,
|
||||
{ slug: "test", name: "Test Agent", source: "global" } as any,
|
||||
])
|
||||
|
||||
await installer.removeItem(mockModeItem, { target: "global" })
|
||||
|
|
@ -250,7 +250,7 @@ describe("SimpleInstaller", () => {
|
|||
it("should handle case when rules folder does not exist", async () => {
|
||||
// Mock that the mode exists
|
||||
vi.mocked(mockCustomModesManager.getCustomModes).mockResolvedValueOnce([
|
||||
{ slug: "test", name: "Test Mode", source: "project" } as any,
|
||||
{ slug: "test", name: "Test Agent", source: "project" } as any,
|
||||
])
|
||||
|
||||
await installer.removeItem(mockModeItem, { target: "project" })
|
||||
|
|
@ -265,7 +265,7 @@ describe("SimpleInstaller", () => {
|
|||
it("should throw error if deleteCustomMode fails", async () => {
|
||||
// Mock that the mode exists
|
||||
vi.mocked(mockCustomModesManager.getCustomModes).mockResolvedValueOnce([
|
||||
{ slug: "test", name: "Test Mode", source: "project" } as any,
|
||||
{ slug: "test", name: "Test Agent", source: "project" } as any,
|
||||
])
|
||||
// Mock that deleteCustomMode fails
|
||||
mockCustomModesManager.deleteCustomMode = vi.fn().mockRejectedValueOnce(new Error("Permission denied"))
|
||||
|
|
@ -305,14 +305,14 @@ describe("SimpleInstaller", () => {
|
|||
const noSlugModeItem: MarketplaceItem = {
|
||||
...mockModeItem,
|
||||
content: yaml.stringify({
|
||||
name: "Test Mode",
|
||||
name: "Test Agent",
|
||||
roleDefinition: "Test role",
|
||||
groups: ["read"],
|
||||
}),
|
||||
}
|
||||
|
||||
await expect(installer.removeItem(noSlugModeItem, { target: "project" })).rejects.toThrow(
|
||||
"Mode missing slug identifier",
|
||||
"Agent missing slug identifier",
|
||||
)
|
||||
|
||||
expect(mockCustomModesManager.deleteCustomMode).not.toHaveBeenCalled()
|
||||
|
|
@ -325,7 +325,7 @@ describe("SimpleInstaller", () => {
|
|||
{
|
||||
content: yaml.stringify({
|
||||
slug: "test-array",
|
||||
name: "Test Array Mode",
|
||||
name: "Test Array Agent",
|
||||
roleDefinition: "Test role",
|
||||
groups: ["read"],
|
||||
}),
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ describe("isToolAllowedForMode", () => {
|
|||
},
|
||||
{
|
||||
slug: "test-exp-mode",
|
||||
name: "Test Exp Mode",
|
||||
name: "Test Exp Agent",
|
||||
roleDefinition: "You are an experimental tester",
|
||||
groups: ["read", "edit", "browser"],
|
||||
},
|
||||
|
|
@ -317,7 +317,7 @@ describe("isToolAllowedForMode", () => {
|
|||
const customModesWithEditGroup: ModeConfig[] = [
|
||||
{
|
||||
slug: "test-custom-tools",
|
||||
name: "Test Custom Tools Mode",
|
||||
name: "Test Custom Tools Agent",
|
||||
roleDefinition: "You are a test mode",
|
||||
groups: ["read", "edit", "browser"],
|
||||
},
|
||||
|
|
@ -349,7 +349,7 @@ describe("isToolAllowedForMode", () => {
|
|||
const customModesWithoutEdit: ModeConfig[] = [
|
||||
{
|
||||
slug: "no-edit-mode",
|
||||
name: "No Edit Mode",
|
||||
name: "No Edit Agent",
|
||||
roleDefinition: "You have no edit powers",
|
||||
groups: ["read", "browser"], // No edit group
|
||||
},
|
||||
|
|
@ -400,7 +400,7 @@ describe("FileRestrictionError", () => {
|
|||
expect(debugMode).toBeDefined()
|
||||
expect(debugMode).toMatchObject({
|
||||
slug: "debug",
|
||||
name: "🪲 Debug",
|
||||
name: "🪲 Debugger",
|
||||
roleDefinition:
|
||||
"You are Roo, an expert software debugger specializing in systematic problem diagnosis and resolution.",
|
||||
groups: ["read", "edit", "browser", "command", "mcp"],
|
||||
|
|
@ -421,7 +421,7 @@ describe("FileRestrictionError", () => {
|
|||
const result = await getFullModeDetails("debug")
|
||||
expect(result).toMatchObject({
|
||||
slug: "debug",
|
||||
name: "🪲 Debug",
|
||||
name: "🪲 Debugger",
|
||||
roleDefinition:
|
||||
"You are Roo, an expert software debugger specializing in systematic problem diagnosis and resolution.",
|
||||
})
|
||||
|
|
@ -514,14 +514,14 @@ describe("getModeSelection", () => {
|
|||
const customModesList: ModeConfig[] = [
|
||||
{
|
||||
slug: "code", // Override
|
||||
name: "Custom Code Mode",
|
||||
name: "Custom Code Agent",
|
||||
roleDefinition: "Custom Code Role",
|
||||
customInstructions: "Custom Code Instructions",
|
||||
groups: ["read"],
|
||||
},
|
||||
{
|
||||
slug: "new-custom",
|
||||
name: "New Custom Mode",
|
||||
name: "New Custom Agent",
|
||||
roleDefinition: "New Custom Role",
|
||||
customInstructions: "New Custom Instructions",
|
||||
groups: ["edit"],
|
||||
|
|
@ -604,7 +604,7 @@ describe("getModeSelection", () => {
|
|||
const modesWithoutCustomInstructions: ModeConfig[] = [
|
||||
{
|
||||
slug: "no-instr",
|
||||
name: "No Instructions Mode",
|
||||
name: "No Instructions Agent",
|
||||
roleDefinition: "Role for no instructions",
|
||||
groups: ["read"],
|
||||
// customInstructions is undefined
|
||||
|
|
@ -619,7 +619,7 @@ describe("getModeSelection", () => {
|
|||
const modesWithEmptyRoleDef: ModeConfig[] = [
|
||||
{
|
||||
slug: "empty-role",
|
||||
name: "Empty Role Mode",
|
||||
name: "Empty Role Agent",
|
||||
roleDefinition: "",
|
||||
customInstructions: "Instructions for empty role",
|
||||
groups: ["read"],
|
||||
|
|
@ -632,7 +632,7 @@ describe("getModeSelection", () => {
|
|||
const modesWithUndefinedRoleDef: ModeConfig[] = [
|
||||
{
|
||||
slug: "undefined-role",
|
||||
name: "Undefined Role Mode",
|
||||
name: "Undefined Role Agent",
|
||||
roleDefinition: "", // Test undefined explicitly by using an empty string
|
||||
customInstructions: "Instructions for undefined role",
|
||||
groups: ["read"],
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ vi.mock("@src/components/mcp/McpView", () => ({
|
|||
vi.mock("@src/components/modes/ModesView", () => ({
|
||||
__esModule: true,
|
||||
default: function ModesView() {
|
||||
return <div data-testid="prompts-view">Modes View</div>
|
||||
return <div data-testid="prompts-view">Agents View</div>
|
||||
},
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ describe("Command Autocomplete", () => {
|
|||
it("should return both modes and commands for slash commands", () => {
|
||||
const options = getContextMenuOptions("/", null, mockQueryItems, [], mockModes, mockCommands)
|
||||
|
||||
const modeOptions = options.filter((option) => option.type === ContextMenuOptionType.Mode)
|
||||
const modeOptions = options.filter((option) => option.type === ContextMenuOptionType.Agent)
|
||||
const commandOptions = options.filter((option) => option.type === ContextMenuOptionType.Command)
|
||||
|
||||
expect(modeOptions.length).toBe(2)
|
||||
|
|
@ -157,7 +157,7 @@ describe("Command Autocomplete", () => {
|
|||
const options = getContextMenuOptions("/co", null, mockQueryItems, [], mockModes, mockCommands)
|
||||
|
||||
// Should match 'code' mode and possibly some commands (fuzzy search may match)
|
||||
const modeOptions = options.filter((option) => option.type === ContextMenuOptionType.Mode)
|
||||
const modeOptions = options.filter((option) => option.type === ContextMenuOptionType.Agent)
|
||||
const commandOptions = options.filter((option) => option.type === ContextMenuOptionType.Command)
|
||||
|
||||
expect(modeOptions.length).toBe(1)
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ export const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
|
|||
return
|
||||
}
|
||||
|
||||
if (type === ContextMenuOptionType.Mode && value) {
|
||||
if (type === ContextMenuOptionType.Agent && value) {
|
||||
// Handle mode selection.
|
||||
setMode(value)
|
||||
setInputValue("")
|
||||
|
|
@ -367,7 +367,8 @@ export const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
|
|||
}
|
||||
|
||||
// Determine if this is a slash command selection
|
||||
const isSlashCommand = type === ContextMenuOptionType.Mode || type === ContextMenuOptionType.Command
|
||||
const isSlashCommand =
|
||||
type === ContextMenuOptionType.Agent || type === ContextMenuOptionType.Command
|
||||
|
||||
const { newValue, mentionIndex } = insertMention(
|
||||
textAreaRef.current.value,
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ const ContextMenu: React.FC<ContextMenuProps> = ({
|
|||
{option.label}
|
||||
</span>
|
||||
)
|
||||
case ContextMenuOptionType.Mode:
|
||||
case ContextMenuOptionType.Agent:
|
||||
return (
|
||||
<div style={{ display: "flex", flexDirection: "column", gap: "2px" }}>
|
||||
<div style={{ lineHeight: "1.2" }}>
|
||||
|
|
@ -212,7 +212,7 @@ const ContextMenu: React.FC<ContextMenuProps> = ({
|
|||
|
||||
const getIconForOption = (option: ContextMenuQueryItem): string => {
|
||||
switch (option.type) {
|
||||
case ContextMenuOptionType.Mode:
|
||||
case ContextMenuOptionType.Agent:
|
||||
return "symbol-misc"
|
||||
case ContextMenuOptionType.Command:
|
||||
return "play"
|
||||
|
|
@ -381,7 +381,7 @@ const ContextMenu: React.FC<ContextMenuProps> = ({
|
|||
option.type === ContextMenuOptionType.OpenedFile) && (
|
||||
<img
|
||||
src={getMaterialIconForOption(option)}
|
||||
alt="Mode"
|
||||
alt="Agent"
|
||||
style={{
|
||||
marginRight: "6px",
|
||||
flexShrink: 0,
|
||||
|
|
@ -390,7 +390,7 @@ const ContextMenu: React.FC<ContextMenuProps> = ({
|
|||
}}
|
||||
/>
|
||||
)}
|
||||
{option.type !== ContextMenuOptionType.Mode &&
|
||||
{option.type !== ContextMenuOptionType.Agent &&
|
||||
option.type !== ContextMenuOptionType.Command &&
|
||||
option.type !== ContextMenuOptionType.File &&
|
||||
option.type !== ContextMenuOptionType.Folder &&
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue