diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 44626273b5..03bbe9640a 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -38,6 +38,7 @@ body:
- OpenAI Compatible
- OpenRouter
- Requesty
+ - SambaNova
- Unbound
- VS Code Language Model API
- xAI (Grok)
diff --git a/.github/workflows/website-deploy.yml b/.github/workflows/website-deploy.yml
index 20eea4288a..cd18a3e766 100644
--- a/.github/workflows/website-deploy.yml
+++ b/.github/workflows/website-deploy.yml
@@ -5,7 +5,7 @@ on:
branches:
- main
paths:
- - 'apps/web-roo-code/**'
+ - "apps/web-roo-code/**"
workflow_dispatch:
env:
@@ -21,11 +21,11 @@ jobs:
- name: Check if VERCEL_TOKEN exists
id: check
run: |
- if [ -n "${{ secrets.VERCEL_TOKEN }}" ]; then
- echo "has-vercel-token=true" >> $GITHUB_OUTPUT
- else
- echo "has-vercel-token=false" >> $GITHUB_OUTPUT
- fi
+ if [ -n "${{ secrets.VERCEL_TOKEN }}" ]; then
+ echo "has-vercel-token=true" >> $GITHUB_OUTPUT
+ else
+ echo "has-vercel-token=false" >> $GITHUB_OUTPUT
+ fi
deploy:
runs-on: ubuntu-latest
@@ -36,6 +36,11 @@ jobs:
uses: actions/checkout@v4
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
+ - name: Migrate evals database
+ run: pnpm db:migrate:production
+ working-directory: packages/evals
+ env:
+ DATABASE_URL: ${{ secrets.EVALS_DATABASE_URL }}
- name: Install Vercel CLI
run: npm install --global vercel@canary
- name: Pull Vercel Environment Information
diff --git a/.roo/commands/release.md b/.roo/commands/release.md
index 9f38080ba9..ec54b804d1 100644
--- a/.roo/commands/release.md
+++ b/.roo/commands/release.md
@@ -26,13 +26,15 @@ argument-hint: patch | minor | major
- Without issue: "- Add support for Gemini 2.5 Pro caching (thanks @contributor!)"
- CRITICAL: Include EVERY SINGLE PR in the changeset - don't assume you know which ones are important. Count the total PRs to verify completeness and cross-reference the list to ensure nothing is missed.
-6. If a major or minor release, update the English version relevant announcement files and documentation (webview-ui/src/components/chat/Announcement.tsx, README.md, and the `latestAnnouncementId` in src/core/webview/ClineProvider.ts)
-7. Ask the user to confirm the English version
-8. Use the new_task tool to create a subtask in `translate` mode with detailed instructions of which content needs to be translated into all supported languages
-9. Create a new branch for the release preparation: `git checkout -b release/v[version]`
-10. Commit and push the changeset file and any documentation updates to the repository: `git add . && git commit -m "chore: add changeset for v[version]" && git push origin release/v[version]`
-11. Create a pull request for the release: `gh pr create --title "Release v[version]" --body "Release preparation for v[version]. This PR includes the changeset and any necessary documentation updates." --base main --head release/v[version]`
-12. The GitHub Actions workflow will automatically:
+6. If a major or minor release:
+ - Ask the user what the three most important areas to highlight are in the release
+ - Update the English version relevant announcement files and documentation (webview-ui/src/components/chat/Announcement.tsx, README.md, and the `latestAnnouncementId` in src/core/webview/ClineProvider.ts)
+ - Ask the user to confirm that the English version looks good to them before proceeding
+ - Use the new_task tool to create a subtask in `translate` mode with detailed instructions of which content needs to be translated into all supported languages (The READMEs as well as the translation strings)
+7. Create a new branch for the release preparation: `git checkout -b release/v[version]`
+8. Commit and push the changeset file and any documentation updates to the repository: `git add . && git commit -m "chore: add changeset for v[version]" && git push origin release/v[version]`
+9. Create a pull request for the release: `gh pr create --title "Release v[version]" --body "Release preparation for v[version]. This PR includes the changeset and any necessary documentation updates." --base main --head release/v[version]`
+10. The GitHub Actions workflow will automatically:
- Create a version bump PR when changesets are merged to main
- Update the CHANGELOG.md with proper formatting
- Publish the release when the version bump PR is merged
diff --git a/.roo/roomotes.yml b/.roo/roomotes.yml
new file mode 100644
index 0000000000..af0cd85b40
--- /dev/null
+++ b/.roo/roomotes.yml
@@ -0,0 +1,33 @@
+version: "1.0"
+
+commands:
+ - name: Pull latest changes
+ run: git pull
+ timeout: 60
+ execution_phase: task_run
+ - name: Install dependencies
+ run: pnpm install
+ timeout: 60
+ execution_phase: task_run
+
+github_events:
+ - event: issues.opened
+ action:
+ name: github.issue.fix
+ - event: issue_comment.created
+ action:
+ name: github.issue.comment.respond
+ - event: pull_request.opened
+ action:
+ name: github.pr.review
+ - event: pull_request.opened
+ action:
+ name: general.task
+ prompt: |
+ 1. Run the script `node scripts/find-missing-translations.js` and carefully review its output for any missing translations.
+ 2. If the script reports missing translations, switch into `translate` mode and add them in all supported languages.
+ 3. If you've added new translations, commit and push them to the existing PR.
+ 4. If you get a permission error trying to push to the PR just give up (i.e don't create a new PR instead).
+ - event: pull_request_review_comment.created
+ action:
+ name: github.pr.comment.respond
diff --git a/.roo/rules-docs-extractor/1_extraction_workflow.xml b/.roo/rules-docs-extractor/1_extraction_workflow.xml
index 936cba7edd..088fc1ae89 100644
--- a/.roo/rules-docs-extractor/1_extraction_workflow.xml
+++ b/.roo/rules-docs-extractor/1_extraction_workflow.xml
@@ -1,8 +1,10 @@
- The Docs Extractor mode analyzes features to generate documentation.
- It extracts technical details, business logic, and user workflows
- for different audiences.
+ The Docs Extractor mode has two primary functions:
+ 1. Extract technical and non-technical details about features to provide to documentation teams
+ 2. Verify existing documentation for factual accuracy against the codebase
+
+ This mode does not generate final documentation but provides detailed analysis and verification.
@@ -10,25 +12,23 @@
Parse RequestIdentify the feature or component in the user's request.
- Determine if the request is for a review or to generate new documentation.
- Default to user-friendly docs unless technical output is requested.
- Note any specific areas to emphasize.
+ Determine if the request is for extraction or verification.
+ For extraction: Note what level of detail is needed (technical vs non-technical).
+ For verification: Identify the documentation to be verified.
+ Note any specific areas to emphasize or check.
- The initial request determines the workflow path (review vs. generation).
+ The mode branches into extraction or verification based on the request.Discover Feature
- Find related code with semantic search.
+ Locate relevant code using appropriate search methods.Identify entry points and components.Map the high-level architecture.
+ Use any combination of tools to understand the feature.
-
-[feature name] implementation main entry point
-
- ]]>
+ Use the most effective discovery method for the situation - file exploration, search, or direct navigation.
@@ -66,22 +66,68 @@
+
+ UI/UX and User Experience Analysis
+
+
+ Analyze user interface components
+
+ - UI components and their interactions
+ - Forms, buttons, navigation elements
+ - Visual feedback and loading states
+ - Responsive design considerations
+ - Accessibility features
+
+
+
+ Map user journeys and interactions
+
+ - Step-by-step user workflows
+ - Click paths and navigation flows
+ - User decision points
+ - Input validation and error messaging
+ - Success and failure scenarios
+
+
+
+ Document user experience elements
+
+ - Page layouts and information architecture
+ - Interactive elements and their behaviors
+ - Tooltips, help text, and guidance
+ - Confirmation dialogs and warnings
+ - Progress indicators and status updates
+
+
+
+ Capture visual and behavioral patterns
+
+ - Color schemes and theming
+ - Animation and transitions
+ - Keyboard shortcuts and accessibility
+ - Mobile vs desktop experiences
+ - Browser-specific considerations
+
+
+
+
+
Business Logic Extraction
- Map workflows
+ Map workflows from user perspective
- - User journey
+ - User journey through the feature
- Decision points and branching
- - State transitions
- - Roles and permissions
+ - State transitions visible to users
+ - Roles and permissions affecting UI
Document business rules
- - Validation logic
+ - Validation logic and user feedback
- Formulas and algorithms
- Business process implementations
- Compliance requirements
@@ -92,8 +138,8 @@
- Primary use cases
- Edge cases
- - Error scenarios
- - Performance factors
+ - Error scenarios and user recovery
+ - Performance factors affecting UX
@@ -199,38 +245,117 @@
-
- Workflow branches here: review existing docs or generate new docs.
-
- Path 1: Review and Recommend
- Used when a document is provided for review.
-
- Compare provided docs against codebase analysis.
- Identify inaccuracies, omissions, and areas for improvement.
- Categorize issues by severity (Critical, Major, Minor).
- Formulate a structured recommendation in chat.
- Do not write files.
- Final output is only the recommendation.
-
-
-
- Path 2: Generate Documentation
- Used when new documentation is requested.
-
- Select a template from `2_documentation_patterns.xml`.
- Structure the document with clear sections and examples.
- Create `DOCS-TEMP-[feature].md` with generated content.
- Apply tone and examples from `7_user_friendly_examples.xml`.
-
-
-
+
+
+ Extract Feature Details
+ Analyze and extract comprehensive details for documentation team
+
+
+ Compile Technical Details
+
+ List all technical components and their relationships
+ Document APIs, data structures, and algorithms
+ Extract configuration options and their impacts
+ Identify error handling and edge cases
+ Note performance characteristics and limitations
+
+
+
+ Extract Non-Technical Information
+
+ Describe complete user experience and workflows
+ Document UI interactions and visual elements
+ Explain business logic in plain language
+ Identify user benefits and use cases
+ Document common scenarios with UI context
+ Note prerequisites and user-facing dependencies
+ Capture error messages and user guidance
+
+
+
+ Create Extraction Report
+
+ Organize findings into clear categories
+ Separate technical and non-technical information
+ Include code snippets and examples where helpful
+ Create `EXTRACTION-[feature].md` with findings
+ Highlight areas that need special attention in documentation
+
+
+ - Executive summary of the feature
+ - UI/UX analysis and user experience
+ - Technical details section
+ - Non-technical/user-facing details
+ - User workflows and interactions
+ - Configuration and setup information
+ - Common use cases with UI context
+ - Error handling and user guidance
+ - Potential documentation considerations
+
+
+
+
+
+
+ Verify Documentation Accuracy
+ Check existing documentation against codebase reality
+
+
+ Analyze Provided Documentation
+
+ Parse the documentation to identify claims and descriptions
+ Extract technical specifications mentioned
+ Note user-facing features and workflows described
+ Identify configuration options and examples provided
+
+
+
+ Verify Against Codebase
+
+ Check technical claims against actual implementation
+ Verify API endpoints, parameters, and responses
+ Confirm configuration options and defaults
+ Validate code examples and snippets
+ Check if described workflows match implementation
+
+
+
+ Create Verification Report
+
+ Categorize findings by severity (Critical, Major, Minor)
+ List all inaccuracies with correct information
+ Identify missing important information
+ Note outdated or deprecated content
+ Provide specific corrections and suggestions
+ Create `VERIFICATION-[feature].md` with findings
+
+
+ - Verification summary (Accurate/Needs Updates)
+ - Critical inaccuracies that could mislead users
+ - Technical corrections needed
+ - Missing information that should be added
+ - Suggestions for clarity improvements
+ - Overall recommendations
+
+
+
+
+
- Code paths analyzed
- Business logic documented
- Integration points mapped
- Security addressed
- Audience needs met
- Metadata and links are complete
+
+ All code paths analyzed
+ Technical details comprehensively extracted
+ Non-technical information clearly explained
+ Use cases and examples provided
+ Report organized for documentation team use
+
+
+ All documentation claims verified
+ Inaccuracies identified and corrected
+ Missing information noted
+ Suggestions for improvement provided
+ Clear verification report created
+
\ No newline at end of file
diff --git a/.roo/rules-docs-extractor/3_analysis_techniques.xml b/.roo/rules-docs-extractor/3_analysis_techniques.xml
index 4ab4cb17cc..b9ef93d1f3 100644
--- a/.roo/rules-docs-extractor/3_analysis_techniques.xml
+++ b/.roo/rules-docs-extractor/3_analysis_techniques.xml
@@ -3,7 +3,191 @@
Techniques for analyzing code to extract documentation.
+
+
+
+ Find and analyze UI components and their interactions
+
+
+
+ Search for UI component files
+
+
+src
+\.(tsx|jsx|vue)$|@Component|export.*component
+*.tsx
+
+
+
+
+src
+
+ ]]>
+
+
+
+ Analyze styling and visual elements
+
+
+src/styles
+true
+
+
+
+
+src
+className=|style=|styled\.|makeStyles|@apply
+
+ ]]>
+
+
+
+
+
+
+ Map user interactions and navigation flows
+
+
+ Route definitions and navigation
+ Form submissions and validations
+ Button clicks and event handlers
+ State changes and UI updates
+ Loading and error states
+
+
+
+src
+Route.*path=|router\.push|navigate\(|Link.*to=
+
+
+
+
+src
+onClick=|onSubmit=|onChange=|handleClick|handleSubmit
+
+
+
+
+src
+validate|validation|required|pattern=|minLength|maxLength
+
+ ]]>
+
+
+
+
+ Analyze how the system communicates with users
+
+
+ Error messages and alerts
+ Success notifications
+ Loading indicators
+ Tooltips and help text
+ Confirmation dialogs
+ Progress indicators
+
+
+
+src
+toast|notification|alert|message|error.*message|success.*message
+
+
+
+
+src
+loading|isLoading|pending|spinner|skeleton|placeholder
+
+
+
+
+src
+modal|dialog|confirm|popup|overlay
+
+ ]]>
+
+
+
+
+ Check for accessibility features and compliance
+
+
+ ARIA labels and roles
+ Keyboard navigation support
+ Screen reader compatibility
+ Focus management
+ Color contrast considerations
+
+
+
+src
+aria-|role=|tabIndex|alt=|title=|accessibilityLabel
+
+
+
+
+src
+focus\(|blur\(|onFocus|onBlur|autoFocus|focusable
+
+ ]]>
+
+
+
+
+ Analyze responsive design and mobile experience
+
+
+ Breakpoint definitions
+ Mobile-specific components
+ Touch event handlers
+ Viewport configurations
+ Media queries
+
+
+
+src
+@media|breakpoint|mobile|tablet|desktop|responsive
+
+
+
+
+src
+onTouch|swipe|gesture|tap|press
+
+ ]]>
+
+
+
+
+
+ Use semantic search to find conceptually related code when available.
+
+
+ Finding code by concept rather than keywords
+ Discovering implementations across different naming conventions
+ When pattern-based search isn't finding expected results
+
+
+
+user authentication login security JWT token validation
+
+
+
+
+payment processing transaction billing invoice checkout
+
+ ]]>
+ This is an optional tool - use when semantic understanding would help find related code that keyword search might miss
+
+
Analyze entry points to understand feature flow.
@@ -14,23 +198,60 @@
Map decision branches.Document input validation.
-
-
-main function app.listen server.start router controller handler
-
-
-
-
-src/controllers/feature.controller.ts
-
+
+
+ Start by exploring directory structure
+
+
+src
+false
+
+
+
+src/controllers
+true
+
+ ]]>
+
+
+
+ Search for specific patterns
+ src(app\.(get|post|put|delete)|@(Get|Post|Put|Delete)|router\.(get|post|put|delete))
- ]]>
+ ]]>
+
+
+
+ Read known entry points directly
+
+
+src/app.ts
+
+
+
+
+src/controllers/feature.controller.ts
+
+ ]]>
+
+
+
+ Use semantic search as an alternative discovery method
+
+
+main entry point application startup initialization bootstrap
+
+ ]]>
+
+
@@ -76,24 +297,39 @@ type\s+(Query|Mutation|Subscription)\s*{[^}]+}|@(Query|Mutation|Resolver)
Message queue integrationsFilesystem operations
-
+
+ Start with package.json to understand dependencies
+
+
+package.json
+
+ ]]>
+
+
+
+ Follow import chains to map dependencies
+ src^import\s+.*from\s+['"]([^'"]+)['"]|require\s*\(\s*['"]([^'"]+)['"]\s*\)
-
-
-
-package.json
-
-
+ ]]>
+
+
+
+ Find external API integrations
+ src(fetch|axios|http\.request|request\(|\.get\(|\.post\()
- ]]>
+ ]]>
+
+
diff --git a/.roo/rules-docs-extractor/4_tool_usage_guide.xml b/.roo/rules-docs-extractor/4_tool_usage_guide.xml
index d746141daa..5049917273 100644
--- a/.roo/rules-docs-extractor/4_tool_usage_guide.xml
+++ b/.roo/rules-docs-extractor/4_tool_usage_guide.xml
@@ -3,125 +3,117 @@
Guidance on using tools for documentation extraction.
-
-
- codebase_search
- Initial code discovery.
-
-
- Find feature entry points
-
-authentication login user session JWT token
-
- ]]>
-
-
- Find business logic
-
-calculate pricing discount tax invoice billing
-
- ]]>
-
-
- Find configuration
-
-config settings environment variables .env process.env
-
- ]]>
-
-
-
+
+
+ Use the most appropriate tools for the situation
+
+ Start with what you know - file names, directory structure, or keywords
+ Use multiple discovery methods to build understanding
+ Adapt your approach based on the codebase structure
+
+
-
- list_code_definition_names
- Understand code structure.
-
- Use on core feature directories.
- Analyze implementation and test directories.
- Look for naming patterns.
-
-
-src/features/authentication
-
- ]]>
-
+
+
+ Explore directory structure and find relevant files
+
+ - Starting exploration of a feature area
+ - Understanding project organization
+ - Finding configuration or test files
+
+
-
- read_file
- Analyze specific implementations.
-
- Read main feature files.
- Follow imports to find dependencies.
- Read test files for expected behavior.
- Examine config and type definition files.
-
-
-
-
- src/controllers/auth.controller.ts
-
-
- src/services/auth.service.ts
-
-
- src/models/user.model.ts
-
-
- src/types/auth.types.ts
-
-
- src/__tests__/auth.test.ts
-
-
-
- ]]>
-
+
+ Examine specific files in detail
+
+ - Analyzing implementation details
+ - Understanding configuration
+ - Reading documentation or comments
+
+ Read multiple related files together for better context
+
-
- search_files
- Find specific patterns.
-
-
- Find API endpoints
-
-src
-@(Get|Post|Put|Delete|Patch)\(['"]([^'"]+)['"]|router\.(get|post|put|delete|patch)\(['"]([^'"]+)['"]
-
- ]]>
-
-
- Find error handling
-
-src
-throw new \w+Error|catch \(|\.catch\(|try \{
-
- ]]>
-
-
- Find config usage
-
-src
-process\.env\.\w+|config\.get\(['"]([^'"]+)['"]|getConfig\(\)
-
- ]]>
-
-
-
-
+
+ Find specific patterns or text
+
+ - Locating API endpoints
+ - Finding configuration usage
+ - Tracking down error handling
+ - Discovering cross-references
+
+
+
+
+ Get overview of code structure
+
+ - Understanding module organization
+ - Identifying main components
+ - Finding test coverage
+
+
+
+
+ Semantic search when available
+
+ - Finding conceptually related code
+ - Discovering implementations by functionality
+ - When keyword search isn't sufficient
+
+ Optional - use when semantic understanding is needed
+
+
+
+
+
+ Start from high-level structure and drill down
+
+ List files in feature directory
+ Identify main entry points
+ Follow imports and dependencies
+ Examine implementation details
+
+
+
+
+ Use tests to understand expected behavior
+
+ Find test files for the feature
+ Read test descriptions and scenarios
+ Trace back to implementation
+ Verify behavior matches tests
+
+
+
+
+ Start with configuration to understand setup
+
+ Find configuration files
+ Identify feature flags and settings
+ Trace usage in code
+ Document impacts of each setting
+
+
+
+
+ Map external interfaces first
+
+ Search for route definitions
+ Find API controllers or handlers
+ Trace to business logic
+ Document request/response flow
+
+
+
+
- Create documentation file for new docs.
- Not used for reviews. Feedback for reviews is provided in chat.
- DOCS-TEMP-[feature-name].md
+ Create extraction or verification report files.
+ Generates reports for documentation teams, not final documentation.
+
+ - For extraction: EXTRACTION-[feature-name].md
+ - For verification: VERIFICATION-[feature-name].md
+ Use descriptive feature name in filename.Include table of contents.
@@ -130,7 +122,7 @@
-DOCS-TEMP-authentication-system.md
+EXTRACTION-authentication-system.md
# Authentication System Documentation
@@ -184,47 +176,72 @@ The authentication system provides secure user authentication using JWT tokens..
- Find all files related to a feature.
+ Find all files related to a feature using various methods.
-
-
- Start with semantic search.
-
-feature implementation main logic
-
- ]]>
-
-
- List directory structure.
+
+
+ Start by exploring likely directories
-src/features
+src
+false
+
+
+
+
+src/features/[feature-name]true
]]>
-
-
- Find related tests.
+
+
+
+ Search for feature-related patterns
+
+src
+feature-name|FeatureName
+
+
+
srcdescribe\(['"].*Feature.*['"]|test\(['"].*feature.*['"]*.test.ts
]]>
-
-
- Find config files.
+
+
+
+ Find configuration files
+
+config
+true
+
+
+
.feature.*config|settings.*feature*.json
]]>
-
-
+
+
+
+ Use semantic search if available and helpful
+
+
+feature implementation main logic
+
+ ]]>
+ This is optional - use when other methods aren't sufficient
+
+
diff --git a/.roo/rules-docs-extractor/5_complete_extraction_examples.xml b/.roo/rules-docs-extractor/5_complete_extraction_examples.xml
index 3975b5b262..8c644e2f03 100644
--- a/.roo/rules-docs-extractor/5_complete_extraction_examples.xml
+++ b/.roo/rules-docs-extractor/5_complete_extraction_examples.xml
@@ -1,42 +1,54 @@
- Examples of the documentation extraction workflow.
+ Examples of both documentation extraction and verification workflows demonstrating flexible discovery methods and comprehensive UI/UX analysis.
- Extract documentation for a JWT-based authentication system, including login, token refresh, and RBAC.
+ Extract comprehensive documentation for a JWT-based authentication system, including technical implementation, UI/UX elements, and user workflows.
- Discover feature
+ Initialize and discover feature using flexible methods
-authentication JWT login logout token refresh auth middleware
-
+
+
+src
+false
+
+ ]]>
+ Look for auth-related directories like auth/, authentication/, or security/
+
+src/auth
+true
+
]]>
- - Auth controllers, services, middleware, models, and routes.
+ - Auth controllers, services, middleware, models, and routes
+ - Login components and forms
+ - Session management UI
- Analyze structure
+ Analyze code structure and architecturesrc/auth
]]>
- - Identify main classes/functions.
- - Map auth flow.
- - Find token generation/validation logic.
+ - Identify main classes/functions
+ - Map authentication flow
+ - Find token generation/validation logic
+ - Locate UI components
- Read core files
+ Read core implementation files
@@ -61,20 +73,74 @@
- Extract API endpoints
+ UI/UX Analysis - Discover UI components
+
+
+src/components
+(Login|Auth|Session|Password).*\.(tsx?|jsx?)
+*.tsx
+
+ ]]>
+
+
+
+ src/components/LoginForm.tsx
+
+
+ src/components/SessionManager.tsx
+
+
+ src/components/PasswordReset.tsx
+
+
+
+ ]]>
+
+
+
+ UI/UX Analysis - Map user interactions
+
+src/components
+onClick|onSubmit|onChange|handleSubmit|validate
+
+ ]]>
+
+ - Form validation patterns
+ - User feedback mechanisms
+ - Error handling UI
+ - Loading states
+
+
+
+
+ UI/UX Analysis - Visual patterns and accessibility
+
+src
+className=|style=|theme\.|aria-|role=
+*.tsx
+
+ ]]>
+
+src/styles
+\.login|\.auth|\.session
+*.css
+
+ ]]>
+
+
+
+ Extract API endpoints and configurationsrc/auth@(Post|Get)\(['"]\/auth\/[^'"]+['"]|router\.(post|get)\(['"]\/auth\/[^'"]+['"]
]]>
-
- - POST /auth/login, POST /auth/logout, POST /auth/refresh, GET /auth/profile, POST /auth/register
-
-
-
-
- Extract configurationsrc
@@ -83,542 +149,573 @@
]]>
-
- Analyze security
+
+ Optional: Use semantic search for deeper insights
-src/auth
-bcrypt|hash|salt|encrypt|sanitize|validate|@IsEmail|@MinLength
-
+
+
+authentication error handling user feedback messages
+
]]>
+ Used when specific patterns don't capture all relevant error handling
-
- Generate docs
+
+ Create comprehensive extraction report
-DOCS-TEMP-authentication-system.md
+EXTRACTION-authentication-system.md
-# Authentication System Documentation
+# Authentication System - Feature Extraction Report
-## Table of Contents
-1. [Overview](#overview)
-2. [Quick Start](#quick-start)
-3. [Architecture](#architecture)
-4. [API Reference](#api-reference)
-5. [Configuration](#configuration)
-6. [Security](#security)
-7. [User Guide](#user-guide)
-8. [Developer Guide](#developer-guide)
-9. [Troubleshooting](#troubleshooting)
+## Executive Summary
+The authentication system is a JWT-based security implementation that handles user registration, login, session management, and access control. It provides a comprehensive user experience with visual feedback, accessibility features, and robust error handling.
----
+## UI/UX Analysis
-## Overview
+### User Interface Components
-### Purpose
-The authentication system provides secure user authentication using JWT (JSON Web Tokens) with support for:
-- User registration and login
-- Token-based authentication
-- Refresh token rotation
-- Role-based access control (RBAC)
-- Session management
-- Password reset functionality
+#### 1. Login Page (`src/components/LoginForm.tsx`)
+**Visual Layout:**
+- Centered card design with shadow (400px width)
+- Company logo at top
+- Form fields with floating labels
+- Primary blue theme (#1976d2)
-### Key Features
-- **JWT Authentication**: Stateless authentication using signed tokens
-- **Refresh Tokens**: Long-lived tokens for seamless user experience
-- **Role-Based Access**: Fine-grained permission control
-- **Security**: bcrypt password hashing, rate limiting, CSRF protection
-- **Multi-device Support**: Token management across devices
+**Interactive Elements:**
+- Email input field
+ - Real-time validation (regex: /^[^\s@]+@[^\s@]+\.[^\s@]+$/)
+ - Error state: Red border and helper text
+ - Success state: Green checkmark icon
+- Password field
+ - Show/hide toggle button (eye icon)
+ - Minimum 8 characters validation
+ - Caps lock warning indicator
+- "Remember me" checkbox with 30-day persistence
+- "Forgot password?" link (underlined on hover)
+- Submit button
+ - Disabled state: Gray background until valid input
+ - Loading state: Spinner replaces text
+ - Success state: Checkmark animation
-### Version Information
-- **Current Version**: 2.1.0
-- **Minimum Node.js**: 14.0.0
-- **Dependencies**:
- - jsonwebtoken: ^9.0.0
- - bcrypt: ^5.1.0
- - passport: ^0.6.0
+**User Feedback:**
+- Loading overlay with spinner during authentication
+- Error messages appear with slide-down animation
+- Success toast notification (3s duration)
+- Form shake animation on error
----
+#### 2. Registration Form (`src/components/RegisterForm.tsx`)
+**Multi-Step Design:**
+- Progress bar showing 3 steps
+- Smooth slide transitions between steps
+- Back/Next navigation buttons
-## Quick Start
+**Step 1 - Account Info:**
+- Email field with async availability check
+- Password field with strength meter (5 levels)
+- Password confirmation with match validation
-### For Users
-1. Register a new account:
- ```bash
- POST /api/auth/register
- {
- "email": "user@example.com",
- "password": "SecurePassword123!",
- "name": "John Doe"
- }
- ```
+**Step 2 - Personal Info:**
+- First/Last name fields
+- Optional phone with format mask
+- Country dropdown with flag icons
-2. Login to receive tokens:
- ```bash
- POST /api/auth/login
- {
- "email": "user@example.com",
- "password": "SecurePassword123!"
- }
- ```
+**Step 3 - Terms & Submit:**
+- Terms of service scrollable text
+- Privacy policy link (opens modal)
+- Checkbox required for submission
+- Review summary before final submit
-3. Use the access token in subsequent requests:
- ```bash
- Authorization: Bearer
- ```
+**Visual Feedback:**
+- Field validation on blur
+- Progress saved in localStorage
+- Success confetti animation
+- Auto-redirect countdown (5s)
-### For Developers
-```typescript
-// Import authentication module
-import { AuthModule } from './auth/auth.module';
+#### 3. Session Management (`src/components/SessionManager.tsx`)
+**Device List UI:**
+- Card-based layout for each session
+- Device icons (FontAwesome)
+ - fa-mobile for mobile
+ - fa-desktop for desktop
+ - fa-tablet for tablet
+- Information displayed:
+ - Device name and browser
+ - IP address (partially masked)
+ - Last active (relative time)
+ - Location (city, country)
-// Configure in app module
-@Module({
- imports: [
- AuthModule.forRoot({
- jwtSecret: process.env.JWT_SECRET,
- jwtExpiration: '15m',
- refreshExpiration: '7d'
- })
- ]
-})
-export class AppModule {}
+**Interactive Features:**
+- Current device highlighted with blue border
+- Hover state shows "Revoke" button
+- Confirmation modal with device details
+- Bulk selection with checkboxes
+- "Revoke All" with double confirmation
+
+### User Experience Elements
+
+#### Visual Patterns
+**Theme System:**
+```css
+--primary-color: #1976d2;
+--error-color: #d32f2f;
+--success-color: #388e3c;
+--warning-color: #f57c00;
+--text-primary: rgba(0, 0, 0, 0.87);
+--text-secondary: rgba(0, 0, 0, 0.6);
```
----
+**Animations:**
+- Page transitions: 300ms ease-in-out
+- Button hover: scale(1.02)
+- Error shake: 0.5s horizontal
+- Success checkmark: SVG path animation
+- Loading spinner: 1s rotation
-## Architecture
+**Responsive Breakpoints:**
+- Mobile: < 768px (single column)
+- Tablet: 768px - 1024px
+- Desktop: > 1024px
-### System Overview
+#### Accessibility Features
+**Keyboard Navigation:**
+- Tab order follows visual flow
+- Enter key submits forms
+- Escape closes modals
+- Arrow keys in dropdowns
+
+**Screen Reader Support:**
+- ARIA labels on all inputs
+- Live regions for errors
+- Role attributes for custom components
+- Descriptive button text
+
+**Visual Accessibility:**
+- 4.5:1 contrast ratio minimum
+- Focus indicators (2px outline)
+- Error icons for colorblind users
+- Scalable fonts (rem units)
+
+### User Workflows
+
+#### 1. First-Time Registration
```
-┌─────────────┐ ┌──────────────┐ ┌─────────────┐
-│ Client │────▶│ Auth Guard │────▶│ Service │
-└─────────────┘ └──────────────┘ └─────────────┘
- │ │
- ▼ ▼
- ┌──────────────┐ ┌─────────────┐
- │ JWT Strategy │ │ Database │
- └──────────────┘ └─────────────┘
+Start → Landing Page → "Get Started" CTA
+ ↓
+Registration Form (Step 1)
+ → Email validation (async)
+ → Password strength check
+ → Real-time feedback
+ ↓
+Personal Info (Step 2)
+ → Optional fields clearly marked
+ → Format validation
+ ↓
+Terms Agreement (Step 3)
+ → Must scroll to enable checkbox
+ → Review summary
+ ↓
+Submit → Loading → Success
+ → Confetti animation
+ → Welcome email sent
+ → Auto-redirect (5s)
+ ↓
+Dashboard (First-time tour)
```
-### Components
-- **AuthController**: Handles HTTP requests for authentication endpoints
-- **AuthService**: Core authentication logic and token management
-- **JwtStrategy**: Passport strategy for JWT validation
-- **AuthGuard**: Route protection middleware
-- **UserService**: User management and database operations
-
-### Token Flow
-1. User provides credentials
-2. System validates credentials against database
-3. Generate access token (short-lived) and refresh token (long-lived)
-4. Client stores tokens securely
-5. Access token used for API requests
-6. Refresh token used to obtain new access token
-
----
-
-## API Reference
-
-### Authentication Endpoints
-
-#### `POST /api/auth/register`
-Register a new user account.
-
-**Request Body**:
-```json
-{
- "email": "string (required)",
- "password": "string (required, min 8 chars)",
- "name": "string (required)",
- "role": "string (optional, default: 'user')"
-}
+#### 2. Returning User Login
+```
+Start → Login Page
+ ↓
+Enter Credentials
+ → Email autocomplete
+ → Password manager integration
+ → "Remember me" option
+ ↓
+Submit → Loading (avg 1.2s)
+ ↓
+Success → Dashboard
+ OR
+Error → Inline feedback
+ → Retry with guidance
+ → "Forgot password?" option
```
-**Response** (201 Created):
-```json
-{
- "user": {
- "id": "uuid",
- "email": "user@example.com",
- "name": "John Doe",
- "role": "user",
- "createdAt": "2024-01-01T00:00:00Z"
- },
- "tokens": {
- "accessToken": "jwt_token",
- "refreshToken": "refresh_token",
- "expiresIn": 900
- }
-}
+#### 3. Password Reset Flow
+```
+Login Page → "Forgot password?"
+ ↓
+Modal Dialog
+ → Email input
+ → Captcha (if multiple attempts)
+ ↓
+Submit → "Check email" message
+ ↓
+Email Received (< 1 min)
+ → Secure link (1hr expiry)
+ ↓
+Reset Page
+ → New password requirements shown
+ → Strength meter
+ → Confirmation field
+ ↓
+Submit → Success → Login redirect
```
-**Error Responses**:
-- `400 Bad Request`: Invalid input data
-- `409 Conflict`: Email already exists
+## Technical Details
-#### `POST /api/auth/login`
-Authenticate user and receive tokens.
+### Core Components
+1. **AuthController** (`src/auth/auth.controller.ts`)
+ - REST endpoints with validation decorators
+ - Rate limiting middleware
+ - CORS configuration
-**Request Body**:
-```json
-{
- "email": "string (required)",
- "password": "string (required)"
-}
+2. **AuthService** (`src/auth/auth.service.ts`)
+ - JWT token generation/validation
+ - Bcrypt password hashing
+ - Session management logic
+
+3. **Security Implementation**
+ - JWT RS256 algorithm
+ - Refresh token rotation
+ - CSRF double-submit cookies
+ - XSS protection headers
+
+### API Endpoints
+| Method | Endpoint | Description | Rate Limit |
+|--------|----------|-------------|------------|
+| POST | /auth/register | New user registration | 3/hour |
+| POST | /auth/login | User authentication | 5/min |
+| POST | /auth/refresh | Token refresh | 10/min |
+| POST | /auth/logout | Session termination | None |
+| GET | /auth/profile | Current user data | None |
+| POST | /auth/reset-password | Password reset | 3/hour |
+
+### Configuration
+```env
+# Required
+JWT_SECRET=minimum-32-character-secret
+DATABASE_URL=postgresql://...
+
+# Optional with defaults
+JWT_EXPIRATION=15m
+REFRESH_TOKEN_EXPIRATION=7d
+BCRYPT_ROUNDS=10
+SESSION_MAX_AGE=30d
+MAX_SESSIONS_PER_USER=5
```
-**Response** (200 OK):
-```json
-{
- "user": {
- "id": "uuid",
- "email": "user@example.com",
- "name": "John Doe",
- "role": "user"
- },
- "tokens": {
- "accessToken": "jwt_token",
- "refreshToken": "refresh_token",
- "expiresIn": 900
- }
-}
-```
+## Non-Technical Information
-**Error Responses**:
-- `401 Unauthorized`: Invalid credentials
-- `429 Too Many Requests`: Rate limit exceeded
+### Business Rules
+1. **Account Creation**
+ - Unique email required
+ - Password: 8+ chars, mixed case, number, special
+ - Email verification within 24 hours
+ - Terms acceptance mandatory
-#### `POST /api/auth/refresh`
-Refresh access token using refresh token.
+2. **Session Management**
+ - Max 5 concurrent sessions
+ - Idle timeout: 30 minutes
+ - Absolute timeout: 7 days
+ - Device trust for 30 days
-**Request Body**:
-```json
-{
- "refreshToken": "string (required)"
-}
-```
+3. **Security Policies**
+ - Account lockout: 5 failed attempts (15 min)
+ - Password history: Last 3 not reusable
+ - 2FA optional but recommended
+ - Suspicious login notifications
-**Response** (200 OK):
-```json
-{
- "accessToken": "new_jwt_token",
- "expiresIn": 900
-}
-```
+### Common User Scenarios
-#### `POST /api/auth/logout`
-Invalidate refresh token.
+#### Mobile Experience
+- Touch-optimized buttons (44px min)
+- Biometric login (Face ID/Touch ID)
+- Simplified navigation menu
+- Offline detection with retry
+- Push notification for new sessions
-**Headers**:
-- `Authorization: Bearer `
+#### Error Recovery
+- Network timeout: Auto-retry with backoff
+- Session expired: Smooth re-login flow
+- Form errors: Contextual help text
+- Server errors: Friendly messages with support link
-**Request Body**:
-```json
-{
- "refreshToken": "string (required)"
-}
-```
+### Performance Metrics
+- Login response: 200ms (p50), 500ms (p95)
+- Page load: 1.2s (3G), 400ms (4G)
+- Token validation: < 10ms
+- Session check: < 50ms
-**Response** (200 OK):
-```json
-{
- "message": "Logged out successfully"
-}
-```
+## Documentation Recommendations
----
+### Critical Areas for User Documentation
+1. **Getting Started Guide**
+ - Screenshots of each registration step
+ - Common email provider settings
+ - Password manager setup
-## Configuration
+2. **Troubleshooting Section**
+ - "Why can't I log in?" flowchart
+ - Browser compatibility matrix
+ - Cookie/JavaScript requirements
-### Environment Variables
+3. **Security Best Practices**
+ - How to spot phishing attempts
+ - Importance of unique passwords
+ - When to revoke sessions
-| Variable | Type | Default | Description |
-|----------|------|---------|-------------|
-| `JWT_SECRET` | string | - | Secret key for signing JWT tokens (required) |
-| `JWT_EXPIRATION` | string | '15m' | Access token expiration time |
-| `REFRESH_TOKEN_EXPIRATION` | string | '7d' | Refresh token expiration time |
-| `BCRYPT_ROUNDS` | number | 10 | Number of bcrypt hashing rounds |
-| `AUTH_RATE_LIMIT` | number | 5 | Max login attempts per minute |
-| `ENABLE_2FA` | boolean | false | Enable two-factor authentication |
+### Developer Integration Guide
+1. **API Authentication**
+ - Bearer token format
+ - Refresh token flow diagram
+ - Error response examples
-### Configuration File (auth.config.ts)
-```typescript
-export const authConfig = {
- jwt: {
- secret: process.env.JWT_SECRET,
- signOptions: {
- expiresIn: process.env.JWT_EXPIRATION || '15m',
- issuer: 'your-app-name',
- audience: 'your-app-users'
- }
- },
- bcrypt: {
- rounds: parseInt(process.env.BCRYPT_ROUNDS || '10')
- },
- session: {
- maxDevices: 5,
- inactivityTimeout: '30d'
- }
-};
-```
+2. **SDK Examples**
+ - JavaScript/TypeScript
+ - Python
+ - Mobile (iOS/Android)
----
+## Integration Points
+- Email service for password reset and notifications
+- Session storage (Redis optional, in-memory default)
+- Rate limiting middleware
+- CORS configuration for cross-origin requests
+- Logging service for audit trails
-## Security
-
-### Authentication Flow
-1. **Password Storage**: Passwords hashed using bcrypt with configurable rounds
-2. **Token Security**: JWT tokens signed with RS256 algorithm
-3. **Refresh Token Rotation**: New refresh token issued on each refresh
-4. **Rate Limiting**: Prevents brute force attacks on login endpoint
-
-### Security Best Practices
-- Store tokens securely (httpOnly cookies recommended)
-- Implement CSRF protection for cookie-based auth
-- Use HTTPS in production
-- Rotate JWT secrets periodically
-- Implement account lockout after failed attempts
-- Enable 2FA for sensitive accounts
-
-### Common Vulnerabilities Addressed
-- **SQL Injection**: Parameterized queries
-- **XSS**: Input sanitization and validation
-- **CSRF**: Token validation
-- **Brute Force**: Rate limiting and account lockout
-- **Token Hijacking**: Short expiration times and refresh rotation
-
----
-
-## User Guide
-
-### Registration Process
-1. Navigate to registration page
-2. Enter email, password, and name
-3. Verify email (if enabled)
-4. Login with credentials
-
-### Managing Sessions
-- View active sessions in account settings
-- Revoke sessions from other devices
-- Set session timeout preferences
-
-### Password Management
-- Change password from profile settings
-- Reset forgotten password via email
-- Password requirements:
- - Minimum 8 characters
- - At least one uppercase letter
- - At least one number
- - At least one special character
-
----
-
-## Developer Guide
-
-### Protecting Routes
-```typescript
-// Use AuthGuard decorator
-@UseGuards(AuthGuard('jwt'))
-@Get('protected')
-async getProtectedData() {
- return { data: 'This is protected' };
-}
-
-// Role-based protection
-@UseGuards(AuthGuard('jwt'), RolesGuard)
-@Roles('admin')
-@Get('admin')
-async getAdminData() {
- return { data: 'Admin only' };
-}
-```
-
-### Custom Authentication Logic
-```typescript
-// Extend AuthService
-export class CustomAuthService extends AuthService {
- async validateUser(email: string, password: string): Promise {
- // Add custom validation logic
- const user = await super.validateUser(email, password);
-
- // Additional checks
- if (user.suspended) {
- throw new UnauthorizedException('Account suspended');
- }
-
- return user;
- }
-}
-```
-
-### Testing Authentication
-```typescript
-describe('AuthController', () => {
- it('should login user', async () => {
- const response = await request(app.getHttpServer())
- .post('/auth/login')
- .send({
- email: 'test@example.com',
- password: 'TestPass123!'
- })
- .expect(200);
-
- expect(response.body).toHaveProperty('tokens.accessToken');
- });
-});
-```
-
----
-
-## Troubleshooting
-
-### Common Issues
-
-#### Invalid Token Error
-**Problem**: "JsonWebTokenError: invalid token"
-**Solutions**:
-- Verify token format (Bearer prefix)
-- Check token expiration
-- Ensure JWT_SECRET matches
-
-#### Login Rate Limit
-**Problem**: "429 Too Many Requests"
-**Solutions**:
-- Wait for rate limit window to reset
-- Check AUTH_RATE_LIMIT configuration
-- Implement exponential backoff
-
-#### CORS Issues
-**Problem**: "Access blocked by CORS policy"
-**Solutions**:
-- Configure CORS middleware
-- Add origin to allowed list
-- Check preflight requests
-
-### Debug Mode
-Enable debug logging:
-```bash
-DEBUG=auth:* npm start
-```
-
-### Support
-- GitHub Issues: [github.com/yourapp/issues](https://github.com/yourapp/issues)
-- Documentation: [docs.yourapp.com/auth](https://docs.yourapp.com/auth)
-- Email: support@yourapp.com
-
----
-
-## Changelog
-
-### v2.1.0 (2024-01-15)
-- Added refresh token rotation
-- Improved rate limiting
-- Fixed security vulnerability in password reset
-
-### v2.0.0 (2023-12-01)
-- Breaking: Changed token format
-- Added 2FA support
-- Improved session management
-
-### Migration Guide (v1.x to v2.x)
-1. Update JWT_SECRET format
-2. Run token migration script
-3. Update client-side token handling
-
----
-
-## References
-- [JWT.io](https://jwt.io) - JWT Documentation
-- [OWASP Authentication Guide](https://owasp.org/www-project-cheat-sheets/cheatsheets/Authentication_Cheat_Sheet)
-- [Passport.js Documentation](http://www.passportjs.org/docs/)
+## Summary for Documentation Team
+This extraction report provides comprehensive details about the authentication system's current implementation. The system offers a complete user experience with visual feedback, accessibility features, and robust security measures. Key areas for user documentation include the multi-step registration process, session management features, and security policies. The technical implementation uses industry-standard JWT tokens with proper security measures.
-450
+354
]]>
- Use semantic search to find related files.
- Read multiple files for context.
- Extract API docs from route definitions.
- Use tests to understand behavior.
- Document security measures.
- Include troubleshooting for common errors.
+ Use flexible discovery methods - directory exploration and pattern search are primary tools
+ Comprehensive UI/UX analysis is essential for complete documentation
+ Document visual elements, interactions, and user feedback mechanisms
+ Include accessibility and responsive design considerations
+ Semantic search (codebase_search) is optional for deeper insights when needed
+ Organize findings to support documentation team's work
-
+
- Extract documentation for database models, relationships, and migrations.
+ Verify user-provided documentation about authentication UI/UX against the actual implementation.
- Find DB files
-
-database schema model entity migration table column relationship
-
- ]]>
+ User provides documentation to verify
+
+ "Please verify our login documentation:
+
+ 'The login form provides a seamless experience with instant validation. Users see a green checkmark when their email is valid. The password field includes a strength indicator. After 3 failed attempts, users must wait 5 minutes before trying again.'"
+
- Analyze models
-
-src/models
-@(Entity|Table|Model)|class\s+\w+\s+extends\s+(Model|BaseEntity)
-
- ]]>
+ Analyze the documentation claims
+
+ Claims to verify:
+ - Instant email validation with green checkmark
+ - Password strength indicator on login
+ - 3 failed attempts triggers 5-minute wait
+
- Extract relationships
+ Find login UI components using directory exploration
+
+src/components
+false
+
+ ]]>
-src/models
-@(OneToMany|ManyToOne|OneToOne|ManyToMany|BelongsTo|HasMany)
+src/components
+Login|SignIn|Auth.*Form
+*.tsx
]]>
- Document migrations
+ Examine login form implementation
+
+
+
+ src/components/LoginForm.tsx
+
+
+ src/components/LoginForm.css
+
+
+
+ ]]>
+
+ - Email validation exists but shows red X, not green checkmark
+ - No password strength indicator on login form (only on registration)
+ - Account lockout is after 5 attempts, not 3
+ - Lockout duration is 15 minutes, not 5
+
+
+
+
+ Verify validation behavior
+
+src/components
+validateEmail|emailValid|checkmark|strength.*indicator
+
+ ]]>
+
+src/auth
+failed.*attempts|lockout|rate.*limit
+
+ ]]>
+
+
+
+ Create verification report
+
+VERIFICATION-login-documentation.md
+
+# Login Documentation - Verification Report
+
+## Overall Assessment: Needs Significant Updates
+
+## Summary
+The login documentation contains several inaccuracies about the UI/UX implementation that could confuse users and lead to poor user experience.
+
+## Critical Inaccuracies
+
+### 1. Email Validation Feedback
+**Documentation States**: "Users see a green checkmark when their email is valid"
+**Actual Implementation**: Red X icon for invalid emails, no positive feedback
+- Location: `src/components/LoginForm.tsx:45-52`
+- Current behavior: Only shows error states
+- Missing: Success indicator implementation
+- **Impact**: Users don't get positive reinforcement for correct input
+
+### 2. Password Strength Indicator
+**Documentation States**: "The password field includes a strength indicator"
+**Actual Implementation**: No strength indicator on login form
+- Location: Checked `src/components/LoginForm.tsx`
+- Strength indicator only exists in `RegisterForm.tsx`
+- Login form has basic password field only
+- **Impact**: Sets incorrect user expectations
+
+### 3. Failed Login Attempts
+**Documentation States**: "After 3 failed attempts, users must wait 5 minutes"
+**Actual Implementation**: 5 attempts, 15-minute lockout
+- Location: `src/auth/services/auth.service.ts:234`
+- Code: `MAX_LOGIN_ATTEMPTS = 5`
+- Code: `LOCKOUT_DURATION = 15 * 60 * 1000 // 15 minutes`
+- **Impact**: Users may be confused about actual security policy
+
+## UI/UX Elements Found But Not Documented
+
+### 1. Loading States
+- Spinner overlay during authentication
+- Button disabled state during submission
+- These improve perceived performance
+
+### 2. Remember Me Feature
+- 30-day persistent session option
+- Stored in secure cookie
+- Not mentioned in documentation
+
+### 3. Caps Lock Warning
+- Visual indicator when caps lock is on
+- Helps prevent login failures
+- Important accessibility feature
+
+## Recommendations
+
+### Immediate Corrections Needed
+1. **Email Validation**:
+ ```
+ CORRECT: "The email field shows a red error icon for invalid formats. Valid emails are accepted without visual confirmation."
+ ```
+
+2. **Password Features**:
+ ```
+ CORRECT: "The login form has a standard password field with show/hide toggle. Password strength indicators are only shown during registration."
+ ```
+
+3. **Security Policy**:
+ ```
+ CORRECT: "After 5 failed login attempts, accounts are temporarily locked for 15 minutes to prevent brute force attacks."
+ ```
+
+### Suggested Additions
+1. Document the loading states and visual feedback
+2. Explain the "Remember Me" functionality
+3. Mention the Caps Lock warning feature
+4. Add screenshots of actual UI states
+
+## Technical References
+- Login Form Component: `src/components/LoginForm.tsx`
+- Styles: `src/components/LoginForm.css`
+- Auth Service: `src/auth/services/auth.service.ts`
+- Rate Limiting: `src/middleware/rateLimiter.ts`
+
+## Visual Discrepancies
+- Documentation implies more visual feedback than implemented
+- Color scheme in docs doesn't match actual theme
+- Missing documentation for error message styling
+
+## Conclusion
+The documentation needs updates to accurately reflect the current login experience. The actual implementation is more security-focused (5 attempts, 15-min lockout) but less visually rich (no success indicators) than documented.
+
+95
+
+ ]]>
+
+
+
+
+ Always verify UI/UX claims against actual component implementation
+ Check both visual elements and behavioral logic
+ Look for undocumented features that users might expect
+ Provide specific corrections with code references
+ Consider the impact of inaccuracies on user experience
+
+
+
+
+
+ Extract comprehensive API documentation including endpoints, request/response formats, and error handling.
+
+
+
+
+ Discover API structure using flexible methods
+
+
+src
+false
+
+ ]]>
-migrations
+src/apitrue
]]>
-
- Generate schema documentation
-
-
-
-
-
-
-
- Extract comprehensive API documentation including all endpoints,
- request/response formats, authentication, and examples.
-
-
-
-
- Find all API routes
+
+ Find all API routes using pattern searchsrc
@@ -627,8 +724,8 @@ DEBUG=auth:* npm start
]]>
-
- Extract request validation
+
+ Extract request validation schemassrc
@@ -637,296 +734,148 @@ DEBUG=auth:* npm start
]]>
-
- Find response schemas
-
-src
-@ApiResponse|swagger|openapi|response\.json\(|res\.send\(
-
- ]]>
-
-
- Document authentication requirements
+ Analyze error handling and responsessrc
-@(UseGuards|Authorized|Public)|passport\.authenticate|requireAuth
+@ApiResponse|response\.status\(|res\.status\(|throw new.*Error
]]>
- Generate OpenAPI/Swagger documentation
-
- - OpenAPI 3.0 specification
- - Postman collection
- - API client examples
- - cURL commands
- - SDK usage examples
-
+ Optional: Semantic search for middleware and auth
+
+
+API middleware authentication authorization guards
+
+ ]]>
+
+
+
+ Generate API extraction report
+
-
+
- Document React/Vue/Angular components including props, events,
- slots, styling, and usage examples.
+ Document a React component library including props, styling, accessibility, and usage patterns.
- Find component files
+ Discover component structure
+
+src/components
+true
+
+ ]]>
+
+
+
+ Analyze component interfaces and propssrc/components
-export\s+(default\s+)?(function|class|const)\s+\w+|@Component
+interface\s+\w+Props|type\s+\w+Props|export\s+(default\s+)?function|export\s+const*.tsx
]]>
-
- Extract component props/inputs
+
+ Extract styling and theme usagesrc/components
-interface\s+\w+Props|type\s+\w+Props|@Input\(\)|props:\s*{
-
- ]]>
-
-
-
- Find component usage examples
-
-src
-
+styled\.|makeStyles|className=|sx=|css=
]]>
- Document styling and themes
+ Document accessibility featuressrc/components
-styled\.|makeStyles|@apply|className=|style=
+aria-|role=|tabIndex|alt=|htmlFor=
]]>
- Extract Storybook stories
+ Find usage examples and storiessrc
-export\s+default\s+{.*title:|\.stories\.
-*.stories.tsx
+\.stories\.|\.story\.|examples?/|demo/
+*.tsx
]]>
- Generate component documentation
+ Create component library report
-
-
- Document all configuration options, environment variables,
- feature flags, and their impacts on system behavior.
-
-
-
-
- Find configuration files
-
-.
-false
-
- ]]>
-
- - .env.example
- - config/
- - settings.json
- - app.config.ts
-
-
-
-
- Extract environment variables
-
-.
-process\.env\.(\w+)|getenv\(['"](\w+)['"]\)
-
- ]]>
-
-
-
- Find feature flags
-
-src
-feature\.|featureFlag|isEnabled\(['"]|flags\.
-
- ]]>
-
-
-
- Document configuration impacts
-
- - How each config affects behavior
- - Dependencies between configs
- - Performance implications
- - Security considerations
- - Default values and overrides
-
-
-
-
- Generate configuration guide
-
-
-
-
-
-
- Review a user-provided documentation section for accuracy against the codebase
- and provide recommendations for improvement in the chat.
-
-
-
- User provides documentation for review
-
- "Here's our current draft for the JWT_SECRET setting. Can you check it for accuracy? 'The `JWT_SECRET` is an optional key for enhancing security.'"
-
-
-
- Analyze relevant code
-
-JWT_SECRET configuration implementation
-
- ]]>
-
- - Code where `JWT_SECRET` is read (e.g., `process.env.JWT_SECRET`)
- - Logic that fails if the secret is missing
- - Default values or error handling related to the secret
-
-
-
- Formulate and provide feedback in chat
-
-
-I have reviewed the documentation section provided for the `JWT_SECRET` setting. Here are my recommendations for improvement:
-
-**Overall Assessment**: The current draft is critically inaccurate and could lead to security vulnerabilities if followed.
-
-**Recommendations for Improvement**:
-
-* **Critical Inaccuracy**:
- * The documentation states that `JWT_SECRET` is optional. However, the application will fail to start if it is not provided. It is a **required** setting for the application to function securely.
- * **Suggestion**: "The `JWT_SECRET` is a **required** environment variable used to sign and verify JSON Web Tokens. The application will not run without it."
-
-This feedback can be copied and pasted for your documentation team.
-
-
- ]]>
- No file is written. The feedback is provided directly to the user in the chat interface.
-
-
-
-
-
-
- Ensure all aspects are documented
-
- Technical implementation details
- Business logic and rules
- User workflows and journeys
- API specifications
- Configuration options
- Security measures
- Performance characteristics
- Error handling
- Testing strategies
- Deployment procedures
-
-
-
-
- Tailor content for different readers
-
-
- Focus on how-to guides and troubleshooting
-
-
- Include code examples and technical details
-
-
- Emphasize configuration and maintenance
-
-
- Highlight business value and metrics
-
-
-
-
-
- Create documentation that's easy to update
+
+
+ Use the most appropriate discovery method
- Use clear section headers
- Include version information
- Add last-updated timestamps
- Cross-reference related sections
- Provide migration guides
+ Start with directory exploration for well-organized codebases
+ Use pattern search for specific syntax or naming conventions
+ Apply file-based search when you know exact locations
+ Reserve semantic search for complex conceptual queries
-
- Include practical examples throughout
-
- Code snippets with syntax highlighting
- API request/response pairs
- Configuration examples
- Command-line usage
- Error scenarios and solutions
-
+
+ Ensure complete UI/UX documentation
+
+ Visual design and layout
+ Interactive elements and states
+ User feedback mechanisms
+ Accessibility features
+ Responsive behavior
+ Animation and transitions
+ Error states and recovery
+ Loading and progress indicators
+
+
+
+
+ Verify all aspects of documentation claims
+
+ Technical accuracy of code examples
+ UI element descriptions match implementation
+ User workflows reflect actual behavior
+ Configuration values are current
+ Error messages match code
+ Performance claims are realistic
+
-
-
-
- Table of contents with working links
- All sections properly formatted
- Code examples are syntactically correct
- No placeholder text remaining
- Version information included
- Cross-references are valid
- Metadata is complete
- File follows naming convention
-
-
\ No newline at end of file
diff --git a/.roo/rules-docs-extractor/6_communication_guidelines.xml b/.roo/rules-docs-extractor/6_communication_guidelines.xml
index 908b1fcfb6..8691f2519c 100644
--- a/.roo/rules-docs-extractor/6_communication_guidelines.xml
+++ b/.roo/rules-docs-extractor/6_communication_guidelines.xml
@@ -61,29 +61,48 @@
Warn about complex dependency chains.
-
-
+
+
+
+
-
+**Overall Assessment**: [Accurate/Needs Updates/Contains Critical Errors]
+
+**Summary of Findings**:
+- Critical Inaccuracies: [number]
+- Technical Corrections Needed: [number]
+- Missing Information: [number]
+- Clarity Improvements: [number]
+
+**Most Important Issues**:
+1. [Critical issue that could mislead users]
+2. [Important technical inaccuracy]
+3. [Key missing information]
+
+See the full verification report for detailed corrections and suggestions.
+ ]]>
+
@@ -204,43 +223,55 @@ Status: Stable
- Summary of documented feature.
- Key findings.
- File location.
- Next step suggestions (if applicable).
+ Summary of analysis performed.
+ Key findings or issues identified.
+ Report file location.
+ Recommended next steps.
-
-
+The extraction report contains all details needed for comprehensive documentation.
+ ]]>
+
+
diff --git a/.roo/rules-pr-reviewer/1_workflow.xml b/.roo/rules-pr-reviewer/1_workflow.xml
index 0594e191be..444694a520 100644
--- a/.roo/rules-pr-reviewer/1_workflow.xml
+++ b/.roo/rules-pr-reviewer/1_workflow.xml
@@ -26,8 +26,6 @@
Fetch Pull Request Information
- By default, review pull requests from the https://github.com/RooCodeInc/Roo-Code repository.
-
If the user provides a PR number or URL, extract the necessary information:
- Repository owner and name
- Pull request number
@@ -35,10 +33,11 @@
Use the GitHub CLI to fetch the PR details:
- gh pr view [PR_NUMBER] --repo [owner]/[repo] --json number,title,body,author,state,url,headRefName,baseRefName,mergeable,isDraft,createdAt,updatedAt
+ gh pr view [PR_NUMBER] --repo [owner]/[repo] --json number,title,body,author,state,url,headRefName,baseRefName,headRefOid,mergeable,isDraft,createdAt,updatedAt
Parse the JSON output to understand the PR's current state and metadata.
+ IMPORTANT: Save the headRefOid value as it will be needed for submitting the review via the API.
@@ -126,7 +125,7 @@
Also fetch review details:
- gh pr reviews [PR_NUMBER] --repo [owner]/[repo]
+ gh api repos/[owner]/[repo]/pulls/[PR_NUMBER]/reviews
Create a mental or written list of:
@@ -283,7 +282,7 @@
- Avoid including internal evaluation terminology (e.g., scores or internal tags) in public comments.
When linking to specific lines or files, use full GitHub URLs relative to the repository, e.g.
- `https://github.com/RooCodeInc/Roo-Code/blob/main/src/api/providers/human-relay.ts#L50`.
+ `https://github.com/[owner]/[repo]/blob/[branch]/[path/to/file]#L[line-number]`.
Present your findings as a numbered list organized by priority:
@@ -374,23 +373,59 @@
Submit Review
- Based on user preference, submit the review using GitHub CLI:
+ Based on user preference, submit the review using the GitHub API to support inline comments:
- Note: The GitHub CLI has limited support for creating reviews with inline comments.
- For comprehensive reviews with line-specific comments, we'll need to:
+ 1. Construct the review payload with inline comments. For each comment, you need:
+ - The file path (relative to repository root)
+ - The line number where the comment should appear
+ - The comment body text
+ - The side ("RIGHT" for new code, "LEFT" for old code)
- 1. Create individual comments on specific lines (if needed):
+ 2. Submit the review using the GitHub API with heredoc syntax:
- gh pr comment [PR_NUMBER] --repo [owner]/[repo] --body "[comment text]"
+ gh api -X POST repos/[owner]/[repo]/pulls/[PR_NUMBER]/reviews --input - <
- 2. Or create a general review comment summarizing all findings:
-
- gh pr review [PR_NUMBER] --repo [owner]/[repo] --comment --body "[review summary with all findings]"
-
+ The review will be created with all inline comments attached to specific lines of code.
- Note: For line-specific comments, you may need to use the GitHub web interface or API directly,
- as the gh CLI has limited support for inline review comments.
+ Example for a review:
+
+ gh api -X POST repos/RooCodeInc/Roo-Code/pulls/6378/reviews --input - <
+
diff --git a/.roo/rules-pr-reviewer/2_best_practices.xml b/.roo/rules-pr-reviewer/2_best_practices.xml
index d4aa27736c..f367f25b60 100644
--- a/.roo/rules-pr-reviewer/2_best_practices.xml
+++ b/.roo/rules-pr-reviewer/2_best_practices.xml
@@ -1,6 +1,7 @@
- ALWAYS create a todo list at the start to track the review workflow (Step 1)
- Use GitHub CLI (`gh`) commands instead of MCP tools for all GitHub operations
+ - ALWAYS fetch the PR's headRefOid in Step 2 - this is required for API review submission
- ALWAYS fetch existing comments and reviews BEFORE reviewing any code (Step 5)
- Create a list of all existing feedback before starting your review
- Check out the PR locally using `gh pr checkout` for better context understanding
@@ -27,9 +28,13 @@
- Present findings in a numbered list format for clarity
- Group feedback by priority (critical, important, minor)
- Always preview comments with the user before submitting
+ - Use the GitHub API for submitting reviews to support inline comments
+ - Construct proper JSON payloads with commit_id, body, event, and comments array
+ - Each inline comment needs: path, body, line number, and side (RIGHT for new code)
+ - Use COMMENT when submitting the review
+ - Use heredoc syntax (--input - <
\ No newline at end of file
diff --git a/.roo/rules-pr-reviewer/3_common_mistakes_to_avoid.xml b/.roo/rules-pr-reviewer/3_common_mistakes_to_avoid.xml
index 2b97f50845..0aee6e6099 100644
--- a/.roo/rules-pr-reviewer/3_common_mistakes_to_avoid.xml
+++ b/.roo/rules-pr-reviewer/3_common_mistakes_to_avoid.xml
@@ -1,6 +1,7 @@
- Not creating a todo list at the start to track the review workflow
- Using MCP tools instead of GitHub CLI commands for GitHub operations
+ - Forgetting to fetch headRefOid in Step 2 - this is REQUIRED for API review submission
- Starting to review code WITHOUT first fetching existing comments and reviews
- Failing to create a list of existing feedback before reviewing
- Not systematically checking each existing comment against the current code
@@ -28,6 +29,15 @@
- Creating tasks without specific context or file references
- Choosing inappropriate modes when creating tasks for suggestions
- Not updating the todo list after completing each step
- - Forgetting that GitHub CLI has limited support for inline review comments
- Not including --repo flag when using gh commands for non-default repositories
+ - Using wrong commit_id in review payload (must use headRefOid from PR info)
+ - Forgetting to specify "side": "RIGHT" for comments on new code
+ - Using incorrect line numbers that don't match the actual diff
+ - Not escaping special characters in JSON payload properly
+ - Not using COMMENT as the event type in the review payload
+ - Not constructing proper file paths relative to repository root
+ - Submitting empty comments array when inline comments are needed
+ - Forgetting to use <
\ No newline at end of file
diff --git a/.roo/rules/rules.md b/.roo/rules/rules.md
index 2323f03354..5726770a28 100644
--- a/.roo/rules/rules.md
+++ b/.roo/rules/rules.md
@@ -4,7 +4,7 @@
- Before attempting completion, always make sure that any code changes have test coverage
- Ensure all tests pass before submitting changes
- - The vitest framework is used for testing; the `describe`, `test`, `it`, etc functions are defined by default in `tsconfig.json` and therefore don't need to be imported
+ - The vitest framework is used for testing; the `vi`, `describe`, `test`, `it`, etc functions are defined by default in `tsconfig.json` and therefore don't need to be imported from `vitest`
- Tests must be run from the same directory as the `package.json` file that specifies `vitest` in `devDependencies`
- Run tests with: `npx vitest run `
- Do NOT run tests from project root - this causes "vitest: command not found" error
@@ -18,6 +18,7 @@
- Never disable any lint rules without explicit user approval
3. Styling Guidelines:
+
- Use Tailwind CSS classes instead of inline style objects for new markup
- VSCode CSS variables must be added to webview-ui/src/index.css before using them in Tailwind classes
- Example: `` instead of style objects
diff --git a/.roomodes b/.roomodes
index 46229bd269..d027cec83f 100644
--- a/.roomodes
+++ b/.roomodes
@@ -90,9 +90,18 @@ customModes:
source: project
- slug: docs-extractor
name: 📚 Docs Extractor
- roleDefinition: You are Roo, a comprehensive documentation extraction specialist focused on analyzing and documenting all technical and non-technical information about features and components within codebases.
- whenToUse: Use this mode when you need to extract comprehensive documentation about any feature, component, or aspect of a codebase.
- description: Extract comprehensive documentation.
+ roleDefinition: |-
+ You are Roo, a documentation analysis specialist with two primary functions:
+ 1. Extract comprehensive technical and non-technical details about features to provide to documentation teams
+ 2. Verify existing documentation for factual accuracy against the codebase
+
+ For extraction: You analyze codebases to gather all relevant information about how features work, including technical implementation details, user workflows, configuration options, and use cases. You organize this information clearly for documentation teams to use.
+
+ 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 when you need to either extract detailed information about a feature for documentation teams, or verify existing documentation for accuracy against the codebase.
+ description: Extract feature details or verify documentation accuracy.
groups:
- read
- - edit
@@ -196,6 +205,21 @@ customModes:
- command
- mcp
source: project
+ - slug: pr-reviewer
+ name: 🔍 PR Reviewer
+ roleDefinition: |-
+ You are Roo, a pull request reviewer specializing in code quality, structure, and translation consistency. Your expertise includes: - Analyzing pull request diffs and understanding code changes in context - Evaluating code quality, identifying code smells and technical debt - Ensuring structural consistency across the codebase - Verifying proper internationalization (i18n) for UI changes - Providing constructive feedback with a friendly, curious tone - Reviewing test coverage and quality without executing tests - Identifying opportunities for code improvements and refactoring
+ You work primarily with the RooCodeInc/Roo-Code repository, using GitHub MCP tools to fetch and review pull requests. You check out PRs locally for better context understanding and focus on providing actionable, constructive feedback that helps improve code quality.
+ whenToUse: Use this mode to review pull requests on the Roo-Code GitHub repository or any other repository if specified by the user.
+ description: Review PRs for code quality, structure, and i18n compliance.
+ groups:
+ - read
+ - - edit
+ - fileRegex: \.md$
+ description: Markdown files only
+ - mcp
+ - command
+ source: project
- slug: mode-writer
name: ✍️ Mode Writer
roleDefinition: |-
@@ -227,17 +251,3 @@ customModes:
- command
- mcp
source: project
- - slug: pr-reviewer
- name: 🔍 PR Reviewer
- roleDefinition: |-
- You are Roo, a pull request reviewer specializing in code quality, structure, and translation consistency. Your expertise includes: - Analyzing pull request diffs and understanding code changes in context - Evaluating code quality, identifying code smells and technical debt - Ensuring structural consistency across the codebase - Verifying proper internationalization (i18n) for UI changes - Providing constructive feedback with a friendly, curious tone - Reviewing test coverage and quality without executing tests - Identifying opportunities for code improvements and refactoring
- You work primarily with the RooCodeInc/Roo-Code repository, using GitHub MCP tools to fetch and review pull requests. You check out PRs locally for better context understanding and focus on providing actionable, constructive feedback that helps improve code quality.
- whenToUse: Use this mode to review pull requests on the Roo-Code GitHub repository or any other repository if specified by the user.
- groups:
- - read
- - - edit
- - fileRegex: \.md$
- description: Markdown files only
- - mcp
- - command
- source: project
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9892ca1cc5..56b2ac7b6c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,65 @@
# Roo Code Changelog
+## [3.25.4] - 2025-07-30
+
+- feat: add SambaNova provider integration (#6077 by @snova-jorgep, PR by @snova-jorgep)
+- feat: add Doubao provider integration (thanks @AntiMoron!)
+- feat: set horizon-alpha model max tokens to 32k for OpenRouter (thanks @app/roomote!)
+- feat: add zai-org/GLM-4.5-FP8 model to Chutes AI provider (#6440 by @leakless21, PR by @app/roomote)
+- feat: add symlink support for AGENTS.md file loading (thanks @app/roomote!)
+- feat: optionally add task history context to prompt enhancement (thanks @liwilliam2021!)
+- fix: remove misleading task resumption message (#5850 by @KJ7LNW, PR by @KJ7LNW)
+- feat: add pattern to support Databricks /invocations endpoints (thanks @adambrand!)
+- fix: resolve navigator global error by updating mammoth and bluebird dependencies (#6356 by @hishtadlut, PR by @app/roomote)
+- feat: enhance token counting by extracting text from messages using VSCode LM API (#6112 by @sebinseban, PR by @NaccOll)
+- feat: auto-refresh marketplace data when organization settings change (thanks @app/roomote!)
+- fix: kill button for execute_command tool (thanks @daniel-lxs!)
+
+## [3.25.3] - 2025-07-30
+
+- Allow queueing messages with images
+- Increase Claude Code default max output tokens to 16k (#6125 by @bpeterson1991, PR by @app/roomote)
+- Add docs link for slash commands
+- 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!)
+- 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!)
+
+## [3.25.2] - 2025-07-29
+
+- Fix: Show diff view before approval when background edits are disabled (thanks @daniel-lxs!)
+- Add support for organization-level MCP controls
+- Fix zap icon hover state
+
+## [3.25.1] - 2025-07-29
+
+- Add support for GLM-4.5-Air model to Chutes AI provider (#6376 by @matbgn, PR by @app/roomote)
+- Improve subshell validation for commands
+
+## [3.25.0] - 2025-07-29
+
+- Add message queueing (thanks @app/roomote!)
+- Add custom slash commands
+- Add options for URL Context and Grounding with Google Search to the Gemini provider (thanks @HahaBill!)
+- Add image support to read_file tool (thanks @samhvw8!)
+- 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 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 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)
+- Ensure form-data >= 4.0.4
+- Fix filter out non-text tab inputs (Kilo-Org/kilocode#712 by @szermatt, PR by @hassoncs)
+
## [3.24.0] - 2025-07-25
- Add Hugging Face provider with support for open source models (thanks @TGlide!)
diff --git a/README.md b/README.md
index d4b5ecb073..38e58264cf 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@
+ {!apiConfiguration?.sambaNovaApiKey && (
+
+ {t("settings:providers.getSambaNovaApiKey")}
+
+ )}
+ >
+ )
+}
diff --git a/webview-ui/src/components/settings/providers/__tests__/Gemini.spec.tsx b/webview-ui/src/components/settings/providers/__tests__/Gemini.spec.tsx
index cc3f4bd9f0..eaa540c5fb 100644
--- a/webview-ui/src/components/settings/providers/__tests__/Gemini.spec.tsx
+++ b/webview-ui/src/components/settings/providers/__tests__/Gemini.spec.tsx
@@ -127,4 +127,51 @@ describe("Gemini", () => {
expect(mockSetApiConfigurationField).toHaveBeenCalledWith("enableGrounding", true)
})
})
+
+ describe("fromWelcomeView prop", () => {
+ it("should hide URL context and grounding checkboxes when fromWelcomeView is true, but keep custom base URL", () => {
+ render(
+ ,
+ )
+
+ // Should still render custom base URL checkbox
+ expect(screen.getByTestId("checkbox-custom-base-url")).toBeInTheDocument()
+ // Should not render URL context and grounding checkboxes
+ expect(screen.queryByTestId("checkbox-url-context")).not.toBeInTheDocument()
+ expect(screen.queryByTestId("checkbox-grounding-search")).not.toBeInTheDocument()
+ })
+
+ it("should show all checkboxes when fromWelcomeView is false", () => {
+ render(
+ ,
+ )
+
+ // Should render all checkboxes
+ expect(screen.getByTestId("checkbox-custom-base-url")).toBeInTheDocument()
+ expect(screen.getByTestId("checkbox-url-context")).toBeInTheDocument()
+ expect(screen.getByTestId("checkbox-grounding-search")).toBeInTheDocument()
+ })
+
+ it("should show all checkboxes when fromWelcomeView is undefined (default behavior)", () => {
+ render(
+ ,
+ )
+
+ // Should render all checkboxes (default behavior)
+ expect(screen.getByTestId("checkbox-custom-base-url")).toBeInTheDocument()
+ expect(screen.getByTestId("checkbox-url-context")).toBeInTheDocument()
+ expect(screen.getByTestId("checkbox-grounding-search")).toBeInTheDocument()
+ })
+ })
})
diff --git a/webview-ui/src/components/settings/providers/index.ts b/webview-ui/src/components/settings/providers/index.ts
index 6c6fdddaee..13420b2679 100644
--- a/webview-ui/src/components/settings/providers/index.ts
+++ b/webview-ui/src/components/settings/providers/index.ts
@@ -3,6 +3,7 @@ export { Bedrock } from "./Bedrock"
export { Chutes } from "./Chutes"
export { ClaudeCode } from "./ClaudeCode"
export { DeepSeek } from "./DeepSeek"
+export { Doubao } from "./Doubao"
export { Gemini } from "./Gemini"
export { Glama } from "./Glama"
export { Groq } from "./Groq"
@@ -15,6 +16,7 @@ export { OpenAI } from "./OpenAI"
export { OpenAICompatible } from "./OpenAICompatible"
export { OpenRouter } from "./OpenRouter"
export { Requesty } from "./Requesty"
+export { SambaNova } from "./SambaNova"
export { Unbound } from "./Unbound"
export { Vertex } from "./Vertex"
export { VSCodeLM } from "./VSCodeLM"
diff --git a/webview-ui/src/components/ui/hooks/useSelectedModel.ts b/webview-ui/src/components/ui/hooks/useSelectedModel.ts
index 8dceb6e117..6bda83ab94 100644
--- a/webview-ui/src/components/ui/hooks/useSelectedModel.ts
+++ b/webview-ui/src/components/ui/hooks/useSelectedModel.ts
@@ -34,6 +34,10 @@ import {
litellmDefaultModelId,
claudeCodeDefaultModelId,
claudeCodeModels,
+ sambaNovaModels,
+ sambaNovaDefaultModelId,
+ doubaoModels,
+ doubaoDefaultModelId,
} from "@roo-code/types"
import type { RouterModels } from "@roo/api"
@@ -174,6 +178,11 @@ function getSelectedModel({
const info = deepSeekModels[id as keyof typeof deepSeekModels]
return { id, info }
}
+ case "doubao": {
+ const id = apiConfiguration.apiModelId ?? doubaoDefaultModelId
+ const info = doubaoModels[id as keyof typeof doubaoModels]
+ return { id, info }
+ }
case "moonshot": {
const id = apiConfiguration.apiModelId ?? moonshotDefaultModelId
const info = moonshotModels[id as keyof typeof moonshotModels]
@@ -224,6 +233,11 @@ function getSelectedModel({
const info = claudeCodeModels[id as keyof typeof claudeCodeModels]
return { id, info: { ...openAiModelInfoSaneDefaults, ...info } }
}
+ case "sambanova": {
+ const id = apiConfiguration.apiModelId ?? sambaNovaDefaultModelId
+ const info = sambaNovaModels[id as keyof typeof sambaNovaModels]
+ return { id, info }
+ }
// case "anthropic":
// case "human-relay":
// case "fake-ai":
diff --git a/webview-ui/src/context/ExtensionStateContext.tsx b/webview-ui/src/context/ExtensionStateContext.tsx
index c1eb998c79..61da05aff5 100644
--- a/webview-ui/src/context/ExtensionStateContext.tsx
+++ b/webview-ui/src/context/ExtensionStateContext.tsx
@@ -35,6 +35,7 @@ export interface ExtensionStateContextType extends ExtensionState {
openedTabs: Array<{ label: string; isActive: boolean; path?: string }>
commands: Command[]
organizationAllowList: OrganizationAllowList
+ organizationSettingsVersion: number
cloudIsAuthenticated: boolean
sharingEnabled: boolean
maxConcurrentFileReads?: number
@@ -143,6 +144,8 @@ export interface ExtensionStateContextType extends ExtensionState {
setIncludeDiagnosticMessages: (value: boolean) => void
maxDiagnosticMessages?: number
setMaxDiagnosticMessages: (value: number) => void
+ includeTaskHistoryInEnhance?: boolean
+ setIncludeTaskHistoryInEnhance: (value: boolean) => void
}
export const ExtensionStateContext = createContext(undefined)
@@ -226,6 +229,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
cloudIsAuthenticated: false,
sharingEnabled: false,
organizationAllowList: ORGANIZATION_ALLOW_ALL,
+ organizationSettingsVersion: -1,
autoCondenseContext: true,
autoCondenseContextPercent: 100,
profileThresholds: {},
@@ -266,6 +270,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
project: {},
global: {},
})
+ const [includeTaskHistoryInEnhance, setIncludeTaskHistoryInEnhance] = useState(false)
const setListApiConfigMeta = useCallback(
(value: ProviderSettingsEntry[]) => setState((prevState) => ({ ...prevState, listApiConfigMeta: value })),
@@ -299,6 +304,10 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
if ((newState as any).followupAutoApproveTimeoutMs !== undefined) {
setFollowupAutoApproveTimeoutMs((newState as any).followupAutoApproveTimeoutMs)
}
+ // Update includeTaskHistoryInEnhance if present in state message
+ if ((newState as any).includeTaskHistoryInEnhance !== undefined) {
+ setIncludeTaskHistoryInEnhance((newState as any).includeTaskHistoryInEnhance)
+ }
// Handle marketplace data if present in state message
if (newState.marketplaceItems !== undefined) {
setMarketplaceItems(newState.marketplaceItems)
@@ -398,6 +407,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
screenshotQuality: state.screenshotQuality,
routerModels: extensionRouterModels,
cloudIsAuthenticated: state.cloudIsAuthenticated ?? false,
+ organizationSettingsVersion: state.organizationSettingsVersion ?? -1,
marketplaceItems,
marketplaceInstalledMetadata,
profileThresholds: state.profileThresholds ?? {},
@@ -509,6 +519,8 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
setMaxDiagnosticMessages: (value) => {
setState((prevState) => ({ ...prevState, maxDiagnosticMessages: value }))
},
+ includeTaskHistoryInEnhance,
+ setIncludeTaskHistoryInEnhance,
}
return {children}
diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json
index b20b280ce6..da0eb00a44 100644
--- a/webview-ui/src/i18n/locales/ca/chat.json
+++ b/webview-ui/src/i18n/locales/ca/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} Llançat",
"description": "Roo Code {{version}} porta noves funcions potents i millores significatives per millorar el vostre flux de treball de desenvolupament.",
"whatsNew": "Novetats",
- "feature1": "Proveïdor de Hugging Face: Accedeix a molts models de codi obert excel·lents directament a través del nou proveïdor de Hugging Face amb integració perfecta i selecció de models.",
- "feature2": "Controls de Comandament en Línia: Nous controls d'aprovació automàtica i denegació per a l'execució de comandaments et donen control precís sobre les operacions de terminal amb permisos personalitzables.",
- "feature3": "Suport per a Regles AGENTS.md: Afegeix suport per a un fitxer AGENTS.md estàndard de la comunitat a l'arrel del projecte.",
+ "feature1": "Cua de Missatges: Posa en cua múltiples missatges mentre Roo està treballant, permetent-te continuar planificant el teu flux de treball sense interrupcions.",
+ "feature2": "Comandaments de Barra Personalitzats: Crea comandaments de barra personalitzats per a accés ràpid a prompts i fluxos de treball utilitzats freqüentment, amb gestió completa de la interfície d'usuari.",
+ "feature3": "Eines Gemini Millorades: Noves capacitats de context d'URL i fonamentació de cerca de Google proporcionen als models Gemini informació web en temps real i capacitats de recerca millorades.",
"hideButton": "Amaga l'anunci",
"detailsDiscussLinks": "Obtén més detalls i uneix-te a les discussions a Discord i Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Gestionar ordres de barra",
"title": "Ordres de Barra",
- "description": "Crea ordres de barra personalitzades per accedir ràpidament a indicacions i fluxos de treball utilitzats amb freqüència.",
+ "description": "Crea ordres de barra personalitzades per accedir ràpidament a indicacions i fluxos de treball utilitzats amb freqüència. Documentació",
"globalCommands": "Ordres Globals",
"workspaceCommands": "Ordres de l'Espai de Treball",
"globalCommand": "Ordre global",
diff --git a/webview-ui/src/i18n/locales/ca/marketplace.json b/webview-ui/src/i18n/locales/ca/marketplace.json
index 1c4f1f805c..e603da9730 100644
--- a/webview-ui/src/i18n/locales/ca/marketplace.json
+++ b/webview-ui/src/i18n/locales/ca/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Cap"
},
+ "sections": {
+ "organizationMcps": "MCPs de {{organization}}",
+ "marketplace": "Mercat"
+ },
"type-group": {
"modes": "Modes",
"mcps": "Servidors MCP"
diff --git a/webview-ui/src/i18n/locales/ca/prompts.json b/webview-ui/src/i18n/locales/ca/prompts.json
index 1f67068df0..5730211daa 100644
--- a/webview-ui/src/i18n/locales/ca/prompts.json
+++ b/webview-ui/src/i18n/locales/ca/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "Utilitzar la configuració d'API seleccionada actualment",
"testPromptPlaceholder": "Introduïu un prompt per provar la millora",
"previewButton": "Previsualització de la millora del prompt",
- "testEnhancement": "Prova la millora"
+ "testEnhancement": "Prova la millora",
+ "includeTaskHistory": "Inclou l'historial de tasques com a context",
+ "includeTaskHistoryDescription": "Quan està activat, els últims 10 missatges de la conversa actual s'inclouran com a context en millorar els prompts, ajudant a generar suggeriments més rellevants i conscients del context."
},
"condense": {
"apiConfiguration": "Configuració de l'API per a la condensació de context",
diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json
index 3c1ca9e193..77e3ecb498 100644
--- a/webview-ui/src/i18n/locales/ca/settings.json
+++ b/webview-ui/src/i18n/locales/ca/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Obtenir clau API de Chutes",
"deepSeekApiKey": "Clau API de DeepSeek",
"getDeepSeekApiKey": "Obtenir clau API de DeepSeek",
+ "doubaoApiKey": "Clau API de Doubao",
+ "getDoubaoApiKey": "Obtenir clau API de Doubao",
"moonshotApiKey": "Clau API de Moonshot",
"getMoonshotApiKey": "Obtenir clau API de Moonshot",
"moonshotBaseUrl": "Punt d'entrada de Moonshot",
"geminiApiKey": "Clau API de Gemini",
"getGroqApiKey": "Obtenir clau API de Groq",
"groqApiKey": "Clau API de Groq",
+ "getSambaNovaApiKey": "Obtenir clau API de SambaNova",
+ "sambaNovaApiKey": "Clau API de SambaNova",
"getHuggingFaceApiKey": "Obtenir clau API de Hugging Face",
"huggingFaceApiKey": "Clau API de Hugging Face",
"huggingFaceModelId": "ID del model",
diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json
index a273bcf3b5..36c03c9309 100644
--- a/webview-ui/src/i18n/locales/de/chat.json
+++ b/webview-ui/src/i18n/locales/de/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} veröffentlicht",
"description": "Roo Code {{version}} bringt mächtige neue Funktionen und bedeutende Verbesserungen, um deinen Entwicklungsworkflow zu verbessern.",
"whatsNew": "Was ist neu",
- "feature1": "Hugging Face Provider: Greife direkt über den neuen Hugging Face Provider auf viele großartige Open-Source-Modelle zu mit nahtloser Integration und Modellauswahl.",
- "feature2": "Inline-Befehlssteuerung: Neue Auto-Genehmigung und Verweigerungssteuerung für die Befehlsausführung geben dir präzise Kontrolle über Terminal-Operationen mit anpassbaren Berechtigungen.",
- "feature3": "AGENTS.md Regeln-Unterstützung: Fügt Unterstützung für eine Community-Standard AGENTS.md-Datei im Projektstamm hinzu.",
+ "feature1": "Nachrichten-Warteschlange: Stelle mehrere Nachrichten in die Warteschlange, während Roo arbeitet, damit du deinen Workflow ohne Unterbrechung weiter planen kannst.",
+ "feature2": "Benutzerdefinierte Slash-Befehle: Erstelle personalisierte Slash-Befehle für schnellen Zugriff auf häufig verwendete Prompts und Workflows mit vollständiger UI-Verwaltung.",
+ "feature3": "Erweiterte Gemini-Tools: Neue URL-Kontext- und Google-Such-Grundlagen-Funktionen bieten Gemini-Modellen Echtzeit-Web-Informationen und erweiterte Recherche-Fähigkeiten.",
"hideButton": "Ankündigung ausblenden",
"detailsDiscussLinks": "Erhalte mehr Details und diskutiere auf Discord und Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Slash-Befehle verwalten",
"title": "Slash-Befehle",
- "description": "Erstelle benutzerdefinierte Slash-Befehle für schnellen Zugriff auf häufig verwendete Prompts und Workflows.",
+ "description": "Erstelle benutzerdefinierte Slash-Befehle für schnellen Zugriff auf häufig verwendete Prompts und Workflows. Dokumentation",
"globalCommands": "Globale Befehle",
"workspaceCommands": "Arbeitsbereich-Befehle",
"globalCommand": "Globaler Befehl",
diff --git a/webview-ui/src/i18n/locales/de/marketplace.json b/webview-ui/src/i18n/locales/de/marketplace.json
index be83e6d6d3..da89627e31 100644
--- a/webview-ui/src/i18n/locales/de/marketplace.json
+++ b/webview-ui/src/i18n/locales/de/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Keine"
},
+ "sections": {
+ "organizationMcps": "MCPs von {{organization}}",
+ "marketplace": "Marktplatz"
+ },
"type-group": {
"modes": "Modi",
"mcps": "MCP-Server"
diff --git a/webview-ui/src/i18n/locales/de/prompts.json b/webview-ui/src/i18n/locales/de/prompts.json
index 229178abb3..ce5fe66110 100644
--- a/webview-ui/src/i18n/locales/de/prompts.json
+++ b/webview-ui/src/i18n/locales/de/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "Aktuell ausgewählte API-Konfiguration verwenden",
"testPromptPlaceholder": "Gib einen Prompt ein, um die Verbesserung zu testen",
"previewButton": "Vorschau der Prompt-Verbesserung",
- "testEnhancement": "Verbesserung testen"
+ "testEnhancement": "Verbesserung testen",
+ "includeTaskHistory": "Aufgabenverlauf als Kontext einbeziehen",
+ "includeTaskHistoryDescription": "Wenn aktiviert, werden die letzten 10 Nachrichten aus der aktuellen Unterhaltung als Kontext beim Verbessern von Prompts einbezogen, um relevantere und kontextbewusste Vorschläge zu generieren."
},
"condense": {
"apiConfiguration": "API-Konfiguration für die Kontextverdichtung",
diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json
index 50fa86a70b..cd1e9ef584 100644
--- a/webview-ui/src/i18n/locales/de/settings.json
+++ b/webview-ui/src/i18n/locales/de/settings.json
@@ -225,6 +225,8 @@
"awsCustomArnDesc": "Stellen Sie sicher, dass die Region in der ARN mit Ihrer oben ausgewählten AWS-Region übereinstimmt.",
"openRouterApiKey": "OpenRouter API-Schlüssel",
"getOpenRouterApiKey": "OpenRouter API-Schlüssel erhalten",
+ "doubaoApiKey": "Doubao API-Schlüssel",
+ "getDoubaoApiKey": "Doubao API-Schlüssel erhalten",
"apiKeyStorageNotice": "API-Schlüssel werden sicher im VSCode Secret Storage gespeichert",
"glamaApiKey": "Glama API-Schlüssel",
"getGlamaApiKey": "Glama API-Schlüssel erhalten",
@@ -259,6 +261,8 @@
"geminiApiKey": "Gemini API-Schlüssel",
"getGroqApiKey": "Groq API-Schlüssel erhalten",
"groqApiKey": "Groq API-Schlüssel",
+ "getSambaNovaApiKey": "SambaNova API-Schlüssel erhalten",
+ "sambaNovaApiKey": "SambaNova API-Schlüssel",
"getHuggingFaceApiKey": "Hugging Face API-Schlüssel erhalten",
"huggingFaceApiKey": "Hugging Face API-Schlüssel",
"huggingFaceModelId": "Modell-ID",
diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json
index fed2ec6f43..b33ddd4ab4 100644
--- a/webview-ui/src/i18n/locales/en/chat.json
+++ b/webview-ui/src/i18n/locales/en/chat.json
@@ -274,9 +274,9 @@
"title": "🎉 Roo Code {{version}} Released",
"description": "Roo Code {{version}} brings powerful new features and significant improvements to enhance your development workflow.",
"whatsNew": "What's New",
- "feature1": "Hugging Face Provider: Access tons of great open source models directly through the new Hugging Face provider with seamless integration and model selection.",
- "feature2": "Inline Command Controls: New auto-approve and deny controls for command execution give you precise control over terminal operations with customizable permissions.",
- "feature3": "AGENTS.md Rules Support: Adds support for a community standard AGENTS.md file in the root of the project.",
+ "feature1": "Message Queueing: Queue multiple messages while Roo is working, allowing you to continue planning your workflow without interruption.",
+ "feature2": "Custom Slash Commands: Create personalized slash commands for quick access to frequently used prompts and workflows, with full UI management.",
+ "feature3": "Enhanced Gemini Tools: New URL context and Google Search grounding capabilities provide Gemini models with real-time web information and enhanced research abilities.",
"hideButton": "Hide announcement",
"detailsDiscussLinks": "Get more details and discuss in Discord and Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Manage slash commands",
"title": "Slash Commands",
- "description": "Create custom slash commands for quick access to frequently used prompts and workflows.",
+ "description": "Create custom slash commands for quick access to frequently used prompts and workflows. Docs",
"globalCommands": "Global Commands",
"workspaceCommands": "Workspace Commands",
"globalCommand": "Global command",
diff --git a/webview-ui/src/i18n/locales/en/marketplace.json b/webview-ui/src/i18n/locales/en/marketplace.json
index 7c20060598..1bce41b986 100644
--- a/webview-ui/src/i18n/locales/en/marketplace.json
+++ b/webview-ui/src/i18n/locales/en/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "None"
},
+ "sections": {
+ "organizationMcps": "{{organization}} MCPs",
+ "marketplace": "Marketplace"
+ },
"type-group": {
"modes": "Modes",
"mcps": "MCP Servers"
diff --git a/webview-ui/src/i18n/locales/en/prompts.json b/webview-ui/src/i18n/locales/en/prompts.json
index 5d0e6ff8db..0ea5e133b8 100644
--- a/webview-ui/src/i18n/locales/en/prompts.json
+++ b/webview-ui/src/i18n/locales/en/prompts.json
@@ -93,7 +93,9 @@
"useCurrentConfig": "Use currently selected API configuration",
"testPromptPlaceholder": "Enter a prompt to test the enhancement",
"previewButton": "Preview Prompt Enhancement",
- "testEnhancement": "Test Enhancement"
+ "testEnhancement": "Test Enhancement",
+ "includeTaskHistory": "Include task history as context",
+ "includeTaskHistoryDescription": "When enabled, the last 10 messages from the current conversation will be included as context when enhancing prompts, helping to generate more relevant and context-aware suggestions."
},
"condense": {
"apiConfiguration": "API Configuration for Context Condensing",
diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json
index fa4bd4b35a..651e2a7966 100644
--- a/webview-ui/src/i18n/locales/en/settings.json
+++ b/webview-ui/src/i18n/locales/en/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Get Chutes API Key",
"deepSeekApiKey": "DeepSeek API Key",
"getDeepSeekApiKey": "Get DeepSeek API Key",
+ "doubaoApiKey": "Doubao API Key",
+ "getDoubaoApiKey": "Get Doubao API Key",
"moonshotApiKey": "Moonshot API Key",
"getMoonshotApiKey": "Get Moonshot API Key",
"moonshotBaseUrl": "Moonshot Entrypoint",
"geminiApiKey": "Gemini API Key",
"getGroqApiKey": "Get Groq API Key",
"groqApiKey": "Groq API Key",
+ "getSambaNovaApiKey": "Get SambaNova API Key",
+ "sambaNovaApiKey": "SambaNova API Key",
"getHuggingFaceApiKey": "Get Hugging Face API Key",
"huggingFaceApiKey": "Hugging Face API Key",
"huggingFaceModelId": "Model ID",
diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json
index 0a1655ccaa..156af85012 100644
--- a/webview-ui/src/i18n/locales/es/chat.json
+++ b/webview-ui/src/i18n/locales/es/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} publicado",
"description": "Roo Code {{version}} trae poderosas nuevas funcionalidades y mejoras significativas para mejorar tu flujo de trabajo de desarrollo.",
"whatsNew": "Novedades",
- "feature1": "Proveedor de Hugging Face: Accede a toneladas de excelentes modelos de código abierto directamente a través del nuevo proveedor de Hugging Face con integración perfecta y selección de modelos.",
- "feature2": "Controles de Comando en Línea: Nuevos controles de auto-aprobación y denegación para la ejecución de comandos te dan control preciso sobre las operaciones de terminal con permisos personalizables.",
- "feature3": "Soporte para Reglas AGENTS.md: Añade soporte para un archivo AGENTS.md estándar de la comunidad en la raíz del proyecto.",
+ "feature1": "Cola de Mensajes: Pon en cola múltiples mensajes mientras Roo está trabajando, permitiéndote continuar planificando tu flujo de trabajo sin interrupciones.",
+ "feature2": "Comandos de Barra Personalizados: Crea comandos de barra personalizados para acceso rápido a prompts y flujos de trabajo utilizados frecuentemente, con gestión completa de la interfaz de usuario.",
+ "feature3": "Herramientas Gemini Mejoradas: Nuevas capacidades de contexto de URL y fundamentación de búsqueda de Google proporcionan a los modelos Gemini información web en tiempo real y capacidades de investigación mejoradas.",
"hideButton": "Ocultar anuncio",
"detailsDiscussLinks": "Obtén más detalles y participa en Discord y Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Gestionar comandos de barra",
"title": "Comandos de Barra",
- "description": "Crea comandos de barra personalizados para acceder rápidamente a prompts y flujos de trabajo utilizados con frecuencia.",
+ "description": "Crea comandos de barra personalizados para acceder rápidamente a prompts y flujos de trabajo utilizados con frecuencia. Documentación",
"globalCommands": "Comandos Globales",
"workspaceCommands": "Comandos del Espacio de Trabajo",
"globalCommand": "Comando global",
diff --git a/webview-ui/src/i18n/locales/es/marketplace.json b/webview-ui/src/i18n/locales/es/marketplace.json
index 39a45407ae..9cad65e0bb 100644
--- a/webview-ui/src/i18n/locales/es/marketplace.json
+++ b/webview-ui/src/i18n/locales/es/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Ninguno"
},
+ "sections": {
+ "organizationMcps": "MCPs de {{organization}}",
+ "marketplace": "Mercado"
+ },
"type-group": {
"modes": "Modos",
"mcps": "Servidores MCP"
diff --git a/webview-ui/src/i18n/locales/es/prompts.json b/webview-ui/src/i18n/locales/es/prompts.json
index 50ab1cdb76..26ee72b4b5 100644
--- a/webview-ui/src/i18n/locales/es/prompts.json
+++ b/webview-ui/src/i18n/locales/es/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "Usar la configuración de API actualmente seleccionada",
"testPromptPlaceholder": "Ingresa una solicitud para probar la mejora",
"previewButton": "Vista previa de la mejora de solicitud",
- "testEnhancement": "Probar mejora"
+ "testEnhancement": "Probar mejora",
+ "includeTaskHistory": "Incluir historial de tareas como contexto",
+ "includeTaskHistoryDescription": "Cuando está habilitado, los últimos 10 mensajes de la conversación actual se incluirán como contexto al mejorar solicitudes, ayudando a generar sugerencias más relevantes y conscientes del contexto."
},
"condense": {
"apiConfiguration": "Configuración de API para la condensación de contexto",
diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json
index f3502ed059..232a52ce5d 100644
--- a/webview-ui/src/i18n/locales/es/settings.json
+++ b/webview-ui/src/i18n/locales/es/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Obtener clave API de Chutes",
"deepSeekApiKey": "Clave API de DeepSeek",
"getDeepSeekApiKey": "Obtener clave API de DeepSeek",
+ "doubaoApiKey": "Clave API de Doubao",
+ "getDoubaoApiKey": "Obtener clave API de Doubao",
"moonshotApiKey": "Clave API de Moonshot",
"getMoonshotApiKey": "Obtener clave API de Moonshot",
"moonshotBaseUrl": "Punto de entrada de Moonshot",
"geminiApiKey": "Clave API de Gemini",
"getGroqApiKey": "Obtener clave API de Groq",
"groqApiKey": "Clave API de Groq",
+ "getSambaNovaApiKey": "Obtener clave API de SambaNova",
+ "sambaNovaApiKey": "Clave API de SambaNova",
"getHuggingFaceApiKey": "Obtener clave API de Hugging Face",
"huggingFaceApiKey": "Clave API de Hugging Face",
"huggingFaceModelId": "ID del modelo",
diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json
index a8b022f239..959db06b39 100644
--- a/webview-ui/src/i18n/locales/fr/chat.json
+++ b/webview-ui/src/i18n/locales/fr/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} est sortie",
"description": "Roo Code {{version}} apporte de puissantes nouvelles fonctionnalités et des améliorations significatives pour améliorer ton flux de travail de développement.",
"whatsNew": "Quoi de neuf",
- "feature1": "Fournisseur Hugging Face : Accédez à des tonnes d'excellents modèles open source directement via le nouveau fournisseur Hugging Face avec une intégration transparente et une sélection de modèles.",
- "feature2": "Contrôles de Commande en Ligne : De nouveaux contrôles d'approbation automatique et de refus pour l'exécution de commandes vous donnent un contrôle précis sur les opérations de terminal avec des permissions personnalisables.",
- "feature3": "Support des Règles AGENTS.md : Ajoute le support d'un fichier AGENTS.md standard de la communauté à la racine du projet.",
+ "feature1": "File d'Attente de Messages : Mettez en file d'attente plusieurs messages pendant que Roo travaille, vous permettant de continuer à planifier votre flux de travail sans interruption.",
+ "feature2": "Commandes Slash Personnalisées : Créez des commandes slash personnalisées pour un accès rapide aux prompts et flux de travail fréquemment utilisés, avec une gestion complète de l'interface utilisateur.",
+ "feature3": "Outils Gemini Améliorés : De nouvelles capacités de contexte d'URL et de fondation de recherche Google fournissent aux modèles Gemini des informations web en temps réel et des capacités de recherche améliorées.",
"hideButton": "Masquer l'annonce",
"detailsDiscussLinks": "Obtenez plus de détails et participez aux discussions sur Discord et Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Gérer les commandes slash",
"title": "Commandes Slash",
- "description": "Créez des commandes slash personnalisées pour accéder rapidement aux prompts et flux de travail fréquemment utilisés.",
+ "description": "Créez des commandes slash personnalisées pour accéder rapidement aux prompts et flux de travail fréquemment utilisés. Documentation",
"globalCommands": "Commandes Globales",
"workspaceCommands": "Commandes de l'Espace de Travail",
"globalCommand": "Commande globale",
diff --git a/webview-ui/src/i18n/locales/fr/marketplace.json b/webview-ui/src/i18n/locales/fr/marketplace.json
index 05a17150f7..77a4dc19e9 100644
--- a/webview-ui/src/i18n/locales/fr/marketplace.json
+++ b/webview-ui/src/i18n/locales/fr/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Aucun"
},
+ "sections": {
+ "organizationMcps": "MCPs de {{organization}}",
+ "marketplace": "Marché"
+ },
"type-group": {
"modes": "Modes",
"mcps": "Serveurs MCP"
diff --git a/webview-ui/src/i18n/locales/fr/prompts.json b/webview-ui/src/i18n/locales/fr/prompts.json
index d48ef28fa4..3b43280c00 100644
--- a/webview-ui/src/i18n/locales/fr/prompts.json
+++ b/webview-ui/src/i18n/locales/fr/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "Utiliser la configuration API actuellement sélectionnée",
"testPromptPlaceholder": "Entrez un prompt pour tester l'amélioration",
"previewButton": "Aperçu de l'amélioration du prompt",
- "testEnhancement": "Tester l'amélioration"
+ "testEnhancement": "Tester l'amélioration",
+ "includeTaskHistory": "Inclure l'historique des tâches comme contexte",
+ "includeTaskHistoryDescription": "Lorsque activé, les 10 derniers messages de la conversation actuelle seront inclus comme contexte lors de l'amélioration des prompts, aidant à générer des suggestions plus pertinentes et conscientes du contexte."
},
"condense": {
"apiConfiguration": "Configuration de l'API pour la condensation du contexte",
diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json
index 16af2bce24..a97bf4d727 100644
--- a/webview-ui/src/i18n/locales/fr/settings.json
+++ b/webview-ui/src/i18n/locales/fr/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Obtenir la clé API Chutes",
"deepSeekApiKey": "Clé API DeepSeek",
"getDeepSeekApiKey": "Obtenir la clé API DeepSeek",
+ "doubaoApiKey": "Clé API Doubao",
+ "getDoubaoApiKey": "Obtenir la clé API Doubao",
"moonshotApiKey": "Clé API Moonshot",
"getMoonshotApiKey": "Obtenir la clé API Moonshot",
"moonshotBaseUrl": "Point d'entrée Moonshot",
"geminiApiKey": "Clé API Gemini",
"getGroqApiKey": "Obtenir la clé API Groq",
"groqApiKey": "Clé API Groq",
+ "getSambaNovaApiKey": "Obtenir la clé API SambaNova",
+ "sambaNovaApiKey": "Clé API SambaNova",
"getHuggingFaceApiKey": "Obtenir la clé API Hugging Face",
"huggingFaceApiKey": "Clé API Hugging Face",
"huggingFaceModelId": "ID du modèle",
diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json
index 163dbaa81b..21d81e4b88 100644
--- a/webview-ui/src/i18n/locales/hi/chat.json
+++ b/webview-ui/src/i18n/locales/hi/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} रिलीज़ हुआ",
"description": "Roo Code {{version}} आपके विकास वर्कफ़्लो को बेहतर बनाने के लिए शक्तिशाली नई सुविधाएं और महत्वपूर्ण सुधार लेकर आया है।",
"whatsNew": "नया क्या है",
- "feature1": "Hugging Face प्रदाता: नए Hugging Face प्रदाता के माध्यम से सहज एकीकरण और मॉडल चयन के साथ सीधे बहुत सारे बेहतरीन ओपन सोर्स मॉडल तक पहुंचें।",
- "feature2": "इनलाइन कमांड नियंत्रण: कमांड निष्पादन के लिए नए ऑटो-अप्रूव और डिनाई नियंत्रण आपको अनुकूलन योग्य अनुमतियों के साथ टर्मिनल संचालन पर सटीक नियंत्रण देते हैं।",
- "feature3": "AGENTS.md नियम समर्थन: प्रोजेक्ट की रूट में कम्युनिटी स्टैंडर्ड AGENTS.md फ़ाइल के लिए समर्थन जोड़ता है।",
+ "feature1": "संदेश कतार: Roo के काम करते समय कई संदेशों को कतार में रखें, जिससे आप बिना रुकावट के अपने वर्कफ़्लो की योजना बना सकते हैं।",
+ "feature2": "कस्टम स्लैश कमांड: अक्सर उपयोग किए जाने वाले प्रॉम्प्ट और वर्कफ़्लो तक त्वरित पहुंच के लिए व्यक्तिगत स्लैश कमांड बनाएं, पूर्ण UI प्रबंधन के साथ।",
+ "feature3": "उन्नत Gemini उपकरण: नए URL संदर्भ और Google खोज आधार क्षमताएं Gemini मॉडल को वास्तविक समय वेब जानकारी और बेहतर अनुसंधान क्षमताएं प्रदान करती हैं।",
"hideButton": "घोषणा छुपाएं",
"detailsDiscussLinks": "Discord और Reddit पर अधिक विवरण प्राप्त करें और चर्चाओं में शामिल हों 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "स्लैश कमांड प्रबंधित करें",
"title": "स्लैश कमांड",
- "description": "बार-बार उपयोग किए जाने वाले प्रॉम्प्ट और वर्कफ़्लो तक त्वरित पहुंच के लिए कस्टम स्लैश कमांड बनाएं।",
+ "description": "बार-बार उपयोग किए जाने वाले प्रॉम्प्ट और वर्कफ़्लो तक त्वरित पहुंच के लिए कस्टम स्लैश कमांड बनाएं। दस्तावेज़",
"globalCommands": "वैश्विक कमांड",
"workspaceCommands": "कार्यक्षेत्र कमांड",
"globalCommand": "वैश्विक कमांड",
diff --git a/webview-ui/src/i18n/locales/hi/marketplace.json b/webview-ui/src/i18n/locales/hi/marketplace.json
index 07d5be7eb3..3b752d6dbd 100644
--- a/webview-ui/src/i18n/locales/hi/marketplace.json
+++ b/webview-ui/src/i18n/locales/hi/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "कोई नहीं"
},
+ "sections": {
+ "organizationMcps": "{{organization}} MCPs",
+ "marketplace": "मार्केटप्लेस"
+ },
"type-group": {
"modes": "मोड",
"mcps": "MCP सर्वर"
diff --git a/webview-ui/src/i18n/locales/hi/prompts.json b/webview-ui/src/i18n/locales/hi/prompts.json
index ff409f41f5..bd403adde9 100644
--- a/webview-ui/src/i18n/locales/hi/prompts.json
+++ b/webview-ui/src/i18n/locales/hi/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "वर्तमान में चयनित API कॉन्फ़िगरेशन का उपयोग करें",
"testPromptPlaceholder": "वृद्धि का परीक्षण करने के लिए एक प्रॉम्प्ट दर्ज करें",
"previewButton": "प्रॉम्प्ट वृद्धि का पूर्वावलोकन",
- "testEnhancement": "वृद्धि का परीक्षण करें"
+ "testEnhancement": "वृद्धि का परीक्षण करें",
+ "includeTaskHistory": "कार्य इतिहास को संदर्भ के रूप में शामिल करें",
+ "includeTaskHistoryDescription": "जब सक्षम किया जाता है, तो वर्तमान बातचीत के अंतिम 10 संदेश प्रॉम्प्ट को बेहतर बनाते समय संदर्भ के रूप में शामिल किए जाएंगे, जो अधिक प्रासंगिक और संदर्भ-जागरूक सुझाव उत्पन्न करने में मदद करेगा।"
},
"condense": {
"apiConfiguration": "संदर्भ संघनन के लिए API कॉन्फ़िगरेशन",
diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json
index 2c9193cf57..baacd0fcd9 100644
--- a/webview-ui/src/i18n/locales/hi/settings.json
+++ b/webview-ui/src/i18n/locales/hi/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Chutes API कुंजी प्राप्त करें",
"deepSeekApiKey": "DeepSeek API कुंजी",
"getDeepSeekApiKey": "DeepSeek API कुंजी प्राप्त करें",
+ "doubaoApiKey": "डौबाओ API कुंजी",
+ "getDoubaoApiKey": "डौबाओ API कुंजी प्राप्त करें",
"moonshotApiKey": "Moonshot API कुंजी",
"getMoonshotApiKey": "Moonshot API कुंजी प्राप्त करें",
"moonshotBaseUrl": "Moonshot प्रवेश बिंदु",
"geminiApiKey": "Gemini API कुंजी",
"getGroqApiKey": "Groq API कुंजी प्राप्त करें",
"groqApiKey": "Groq API कुंजी",
+ "getSambaNovaApiKey": "SambaNova API कुंजी प्राप्त करें",
+ "sambaNovaApiKey": "SambaNova API कुंजी",
"getHuggingFaceApiKey": "Hugging Face API कुंजी प्राप्त करें",
"huggingFaceApiKey": "Hugging Face API कुंजी",
"huggingFaceModelId": "मॉडल ID",
diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json
index 2ee922887c..fd594480a8 100644
--- a/webview-ui/src/i18n/locales/id/chat.json
+++ b/webview-ui/src/i18n/locales/id/chat.json
@@ -277,9 +277,9 @@
"title": "🎉 Roo Code {{version}} Dirilis",
"description": "Roo Code {{version}} menghadirkan fitur-fitur baru yang kuat dan peningkatan signifikan untuk meningkatkan alur kerja pengembangan Anda.",
"whatsNew": "Yang Baru",
- "feature1": "Penyedia Hugging Face: Akses banyak model open source yang luar biasa secara langsung melalui penyedia Hugging Face baru dengan integrasi yang mulus dan pemilihan model.",
- "feature2": "Kontrol Perintah Inline: Kontrol persetujuan otomatis dan penolakan baru untuk eksekusi perintah memberi Anda kontrol yang tepat atas operasi terminal dengan izin yang dapat disesuaikan.",
- "feature3": "Dukungan Aturan AGENTS.md: Menambahkan dukungan untuk file AGENTS.md standar komunitas di root proyek.",
+ "feature1": "Antrian Pesan: Antrikan beberapa pesan saat Roo sedang bekerja, memungkinkan Anda melanjutkan perencanaan alur kerja tanpa gangguan.",
+ "feature2": "Perintah Slash Kustom: Buat perintah slash yang dipersonalisasi untuk akses cepat ke prompt dan alur kerja yang sering digunakan, dengan manajemen UI lengkap.",
+ "feature3": "Alat Gemini yang Ditingkatkan: Kemampuan konteks URL baru dan dasar pencarian Google memberikan model Gemini informasi web real-time dan kemampuan penelitian yang ditingkatkan.",
"hideButton": "Sembunyikan pengumuman",
"detailsDiscussLinks": "Dapatkan detail lebih lanjut dan bergabung dalam diskusi di Discord dan Reddit 🚀"
},
@@ -361,7 +361,7 @@
"slashCommands": {
"tooltip": "Kelola perintah slash",
"title": "Perintah Slash",
- "description": "Buat perintah slash kustom untuk akses cepat ke prompt dan alur kerja yang sering digunakan.",
+ "description": "Buat perintah slash kustom untuk akses cepat ke prompt dan alur kerja yang sering digunakan. Dokumentasi",
"globalCommands": "Perintah Global",
"workspaceCommands": "Perintah Workspace",
"globalCommand": "Perintah global",
diff --git a/webview-ui/src/i18n/locales/id/marketplace.json b/webview-ui/src/i18n/locales/id/marketplace.json
index fc663101d3..e1a3c450a1 100644
--- a/webview-ui/src/i18n/locales/id/marketplace.json
+++ b/webview-ui/src/i18n/locales/id/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Tidak Ada"
},
+ "sections": {
+ "organizationMcps": "MCP {{organization}}",
+ "marketplace": "Marketplace"
+ },
"type-group": {
"modes": "Mode",
"mcps": "Server MCP"
diff --git a/webview-ui/src/i18n/locales/id/prompts.json b/webview-ui/src/i18n/locales/id/prompts.json
index 52736ad69b..b4d45459f0 100644
--- a/webview-ui/src/i18n/locales/id/prompts.json
+++ b/webview-ui/src/i18n/locales/id/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "Gunakan konfigurasi API yang sedang dipilih",
"testPromptPlaceholder": "Masukkan prompt untuk menguji peningkatan",
"previewButton": "Pratinjau Peningkatan Prompt",
- "testEnhancement": "Uji Peningkatan"
+ "testEnhancement": "Uji Peningkatan",
+ "includeTaskHistory": "Sertakan riwayat tugas sebagai konteks",
+ "includeTaskHistoryDescription": "Ketika diaktifkan, 10 pesan terakhir dari percakapan saat ini akan disertakan sebagai konteks saat meningkatkan prompt, membantu menghasilkan saran yang lebih relevan dan sadar konteks."
},
"condense": {
"apiConfiguration": "Konfigurasi API untuk Peringkasan Konteks",
diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json
index a9df9d4fee..14ca952007 100644
--- a/webview-ui/src/i18n/locales/id/settings.json
+++ b/webview-ui/src/i18n/locales/id/settings.json
@@ -257,12 +257,16 @@
"getChutesApiKey": "Dapatkan Chutes API Key",
"deepSeekApiKey": "DeepSeek API Key",
"getDeepSeekApiKey": "Dapatkan DeepSeek API Key",
+ "doubaoApiKey": "Kunci API Doubao",
+ "getDoubaoApiKey": "Dapatkan Kunci API Doubao",
"moonshotApiKey": "Kunci API Moonshot",
"getMoonshotApiKey": "Dapatkan Kunci API Moonshot",
"moonshotBaseUrl": "Titik Masuk Moonshot",
"geminiApiKey": "Gemini API Key",
"getGroqApiKey": "Dapatkan Groq API Key",
"groqApiKey": "Groq API Key",
+ "getSambaNovaApiKey": "Dapatkan SambaNova API Key",
+ "sambaNovaApiKey": "SambaNova API Key",
"getHuggingFaceApiKey": "Dapatkan Kunci API Hugging Face",
"huggingFaceApiKey": "Kunci API Hugging Face",
"huggingFaceModelId": "ID Model",
diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json
index 314261d95d..5b92e06322 100644
--- a/webview-ui/src/i18n/locales/it/chat.json
+++ b/webview-ui/src/i18n/locales/it/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Rilasciato Roo Code {{version}}",
"description": "Roo Code {{version}} porta nuove potenti funzionalità e miglioramenti significativi per potenziare il tuo flusso di lavoro di sviluppo.",
"whatsNew": "Novità",
- "feature1": "Provider Hugging Face: Accedi a tantissimi ottimi modelli open source direttamente tramite il nuovo provider Hugging Face con integrazione perfetta e selezione dei modelli.",
- "feature2": "Controlli Comando Inline: Nuovi controlli di approvazione automatica e rifiuto per l'esecuzione dei comandi ti danno controllo preciso sulle operazioni del terminale con permessi personalizzabili.",
- "feature3": "Supporto Regole AGENTS.md: Aggiunge il supporto per un file AGENTS.md standard della comunità nella radice del progetto.",
+ "feature1": "Coda Messaggi: Metti in coda più messaggi mentre Roo sta lavorando, permettendoti di continuare a pianificare il tuo flusso di lavoro senza interruzioni.",
+ "feature2": "Comandi Slash Personalizzati: Crea comandi slash personalizzati per accesso rapido a prompt e flussi di lavoro utilizzati frequentemente, con gestione completa dell'interfaccia utente.",
+ "feature3": "Strumenti Gemini Migliorati: Nuove capacità di contesto URL e fondamenta di ricerca Google forniscono ai modelli Gemini informazioni web in tempo reale e capacità di ricerca migliorate.",
"hideButton": "Nascondi annuncio",
"detailsDiscussLinks": "Ottieni maggiori dettagli e partecipa alle discussioni su Discord e Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Gestisci comandi slash",
"title": "Comandi Slash",
- "description": "Crea comandi slash personalizzati per accedere rapidamente a prompt e flussi di lavoro utilizzati frequentemente.",
+ "description": "Crea comandi slash personalizzati per accedere rapidamente a prompt e flussi di lavoro utilizzati frequentemente. Documentazione",
"globalCommands": "Comandi Globali",
"workspaceCommands": "Comandi dello Spazio di Lavoro",
"globalCommand": "Comando globale",
diff --git a/webview-ui/src/i18n/locales/it/marketplace.json b/webview-ui/src/i18n/locales/it/marketplace.json
index ab4aa459fa..e0e0efcb60 100644
--- a/webview-ui/src/i18n/locales/it/marketplace.json
+++ b/webview-ui/src/i18n/locales/it/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Nessuno"
},
+ "sections": {
+ "organizationMcps": "MCP di {{organization}}",
+ "marketplace": "Mercato"
+ },
"type-group": {
"modes": "Modalità",
"mcps": "Server MCP"
diff --git a/webview-ui/src/i18n/locales/it/prompts.json b/webview-ui/src/i18n/locales/it/prompts.json
index e6356f828b..57c144a650 100644
--- a/webview-ui/src/i18n/locales/it/prompts.json
+++ b/webview-ui/src/i18n/locales/it/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "Usa la configurazione API attualmente selezionata",
"testPromptPlaceholder": "Inserisci un prompt per testare il miglioramento",
"previewButton": "Anteprima miglioramento prompt",
- "testEnhancement": "Testa miglioramento"
+ "testEnhancement": "Testa miglioramento",
+ "includeTaskHistory": "Includi cronologia attività come contesto",
+ "includeTaskHistoryDescription": "Quando abilitato, gli ultimi 10 messaggi della conversazione corrente verranno inclusi come contesto durante il miglioramento dei prompt, aiutando a generare suggerimenti più rilevanti e consapevoli del contesto."
},
"condense": {
"apiConfiguration": "Configurazione API per la condensazione del contesto",
diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json
index 143435ddef..df66398156 100644
--- a/webview-ui/src/i18n/locales/it/settings.json
+++ b/webview-ui/src/i18n/locales/it/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Ottieni chiave API Chutes",
"deepSeekApiKey": "Chiave API DeepSeek",
"getDeepSeekApiKey": "Ottieni chiave API DeepSeek",
+ "doubaoApiKey": "Chiave API Doubao",
+ "getDoubaoApiKey": "Ottieni chiave API Doubao",
"moonshotApiKey": "Chiave API Moonshot",
"getMoonshotApiKey": "Ottieni chiave API Moonshot",
"moonshotBaseUrl": "Punto di ingresso Moonshot",
"geminiApiKey": "Chiave API Gemini",
"getGroqApiKey": "Ottieni chiave API Groq",
"groqApiKey": "Chiave API Groq",
+ "getSambaNovaApiKey": "Ottieni chiave API SambaNova",
+ "sambaNovaApiKey": "Chiave API SambaNova",
"getHuggingFaceApiKey": "Ottieni chiave API Hugging Face",
"huggingFaceApiKey": "Chiave API Hugging Face",
"huggingFaceModelId": "ID modello",
diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json
index b2b37e6059..0ed516f2b7 100644
--- a/webview-ui/src/i18n/locales/ja/chat.json
+++ b/webview-ui/src/i18n/locales/ja/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} リリース",
"description": "Roo Code {{version}}は、開発ワークフローを向上させる強力な新機能と重要な改善をもたらします。",
"whatsNew": "新機能",
- "feature1": "Hugging Face プロバイダー: 新しいHugging Faceプロバイダーを通じて、シームレスな統合とモデル選択により、多数の優れたオープンソースモデルに直接アクセスできます。",
- "feature2": "インラインコマンドコントロール: コマンド実行のための新しい自動承認と拒否コントロールにより、カスタマイズ可能な権限でターミナル操作を正確に制御できます。",
- "feature3": "AGENTS.mdルールサポート: プロジェクトルートにコミュニティ標準のAGENTS.mdファイルのサポートを追加します。",
+ "feature1": "メッセージキュー: Rooが作業中に複数のメッセージをキューに入れ、ワークフローの計画を中断することなく続行できます。",
+ "feature2": "カスタムスラッシュコマンド: よく使用するプロンプトやワークフローへの迅速なアクセスのために、パーソナライズされたスラッシュコマンドを作成し、完全なUI管理を提供します。",
+ "feature3": "強化されたGeminiツール: 新しいURLコンテキストとGoogle検索グラウンディング機能により、Geminiモデルにリアルタイムのウェブ情報と強化された研究能力を提供します。",
"hideButton": "通知を非表示",
"detailsDiscussLinks": "詳細はDiscordとRedditでご確認・ディスカッションください 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "スラッシュコマンドを管理",
"title": "スラッシュコマンド",
- "description": "よく使用するプロンプトやワークフローに素早くアクセスするためのカスタムスラッシュコマンドを作成します。",
+ "description": "よく使用するプロンプトやワークフローに素早くアクセスするためのカスタムスラッシュコマンドを作成します。ドキュメント",
"globalCommands": "グローバルコマンド",
"workspaceCommands": "ワークスペースコマンド",
"globalCommand": "グローバルコマンド",
diff --git a/webview-ui/src/i18n/locales/ja/marketplace.json b/webview-ui/src/i18n/locales/ja/marketplace.json
index 72388d5224..6eca7414f3 100644
--- a/webview-ui/src/i18n/locales/ja/marketplace.json
+++ b/webview-ui/src/i18n/locales/ja/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "なし"
},
+ "sections": {
+ "organizationMcps": "{{organization}} MCPs",
+ "marketplace": "マーケットプレイス"
+ },
"type-group": {
"modes": "モード",
"mcps": "MCPサーバー"
diff --git a/webview-ui/src/i18n/locales/ja/prompts.json b/webview-ui/src/i18n/locales/ja/prompts.json
index e9f108f615..15cb64dcf2 100644
--- a/webview-ui/src/i18n/locales/ja/prompts.json
+++ b/webview-ui/src/i18n/locales/ja/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "現在選択されているAPI設定を使用",
"testPromptPlaceholder": "強化をテストするプロンプトを入力してください",
"previewButton": "プロンプト強化のプレビュー",
- "testEnhancement": "強化をテスト"
+ "testEnhancement": "強化をテスト",
+ "includeTaskHistory": "タスク履歴をコンテキストとして含める",
+ "includeTaskHistoryDescription": "有効にすると、現在の会話の最後の10メッセージがプロンプト強化時にコンテキストとして含まれ、より関連性が高くコンテキストを意識した提案の生成に役立ちます。"
},
"condense": {
"apiConfiguration": "コンテキスト圧縮のためのAPI構成",
diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json
index ead916c13b..2e39a420b0 100644
--- a/webview-ui/src/i18n/locales/ja/settings.json
+++ b/webview-ui/src/i18n/locales/ja/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Chutes APIキーを取得",
"deepSeekApiKey": "DeepSeek APIキー",
"getDeepSeekApiKey": "DeepSeek APIキーを取得",
+ "doubaoApiKey": "Doubao APIキー",
+ "getDoubaoApiKey": "Doubao APIキーを取得",
"moonshotApiKey": "Moonshot APIキー",
"getMoonshotApiKey": "Moonshot APIキーを取得",
"moonshotBaseUrl": "Moonshot エントリーポイント",
"geminiApiKey": "Gemini APIキー",
"getGroqApiKey": "Groq APIキーを取得",
"groqApiKey": "Groq APIキー",
+ "getSambaNovaApiKey": "SambaNova APIキーを取得",
+ "sambaNovaApiKey": "SambaNova APIキー",
"getHuggingFaceApiKey": "Hugging Face APIキーを取得",
"huggingFaceApiKey": "Hugging Face APIキー",
"huggingFaceModelId": "モデルID",
diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json
index 07a15bfc8d..95f783b085 100644
--- a/webview-ui/src/i18n/locales/ko/chat.json
+++ b/webview-ui/src/i18n/locales/ko/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} 출시",
"description": "Roo Code {{version}}은 개발 워크플로우를 향상시키는 강력한 새 기능과 중요한 개선사항을 제공합니다.",
"whatsNew": "새로운 기능",
- "feature1": "Hugging Face 프로바이더: 새로운 Hugging Face 프로바이더를 통해 원활한 통합과 모델 선택으로 수많은 훌륭한 오픈 소스 모델에 직접 액세스하세요.",
- "feature2": "인라인 명령 제어: 명령 실행을 위한 새로운 자동 승인 및 거부 제어로 사용자 정의 가능한 권한으로 터미널 작업을 정밀하게 제어할 수 있습니다.",
- "feature3": "AGENTS.md 규칙 지원: 프로젝트 루트에 커뮤니티 표준 AGENTS.md 파일에 대한 지원을 추가합니다.",
+ "feature1": "메시지 대기열: Roo가 작업하는 동안 여러 메시지를 대기열에 넣어 워크플로우 계획을 중단 없이 계속할 수 있습니다.",
+ "feature2": "사용자 정의 슬래시 명령: 자주 사용하는 프롬프트와 워크플로우에 빠르게 액세스할 수 있는 개인화된 슬래시 명령을 생성하고, 완전한 UI 관리를 제공합니다.",
+ "feature3": "향상된 Gemini 도구: 새로운 URL 컨텍스트 및 Google 검색 기반 기능으로 Gemini 모델에 실시간 웹 정보와 향상된 연구 기능을 제공합니다.",
"hideButton": "공지 숨기기",
"detailsDiscussLinks": "Discord와 Reddit에서 자세한 내용을 확인하고 토론에 참여하세요 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "슬래시 명령 관리",
"title": "슬래시 명령",
- "description": "자주 사용하는 프롬프트와 워크플로우에 빠르게 액세스할 수 있는 사용자 정의 슬래시 명령을 만듭니다.",
+ "description": "자주 사용하는 프롬프트와 워크플로우에 빠르게 액세스할 수 있는 사용자 정의 슬래시 명령을 만듭니다. 문서",
"globalCommands": "전역 명령",
"workspaceCommands": "작업 공간 명령",
"globalCommand": "전역 명령",
diff --git a/webview-ui/src/i18n/locales/ko/marketplace.json b/webview-ui/src/i18n/locales/ko/marketplace.json
index 54ec83863f..2ef3353a64 100644
--- a/webview-ui/src/i18n/locales/ko/marketplace.json
+++ b/webview-ui/src/i18n/locales/ko/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "없음"
},
+ "sections": {
+ "organizationMcps": "{{organization}} MCPs",
+ "marketplace": "마켓플레이스"
+ },
"type-group": {
"modes": "모드",
"mcps": "MCP 서버"
diff --git a/webview-ui/src/i18n/locales/ko/prompts.json b/webview-ui/src/i18n/locales/ko/prompts.json
index 688ddd18a9..d21107be43 100644
--- a/webview-ui/src/i18n/locales/ko/prompts.json
+++ b/webview-ui/src/i18n/locales/ko/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "현재 선택된 API 구성 사용",
"testPromptPlaceholder": "향상을 테스트할 프롬프트 입력",
"previewButton": "프롬프트 향상 미리보기",
- "testEnhancement": "향상 테스트"
+ "testEnhancement": "향상 테스트",
+ "includeTaskHistory": "작업 기록을 컨텍스트로 포함",
+ "includeTaskHistoryDescription": "활성화하면 현재 대화의 마지막 10개 메시지가 프롬프트 향상 시 컨텍스트로 포함되어 더 관련성 높고 컨텍스트를 인식하는 제안을 생성하는 데 도움이 됩니다."
},
"condense": {
"apiConfiguration": "컨텍스트 압축을 위한 API 구성",
diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json
index 909551f629..55bc169088 100644
--- a/webview-ui/src/i18n/locales/ko/settings.json
+++ b/webview-ui/src/i18n/locales/ko/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Chutes API 키 받기",
"deepSeekApiKey": "DeepSeek API 키",
"getDeepSeekApiKey": "DeepSeek API 키 받기",
+ "doubaoApiKey": "Doubao API 키",
+ "getDoubaoApiKey": "Doubao API 키 받기",
"moonshotApiKey": "Moonshot API 키",
"getMoonshotApiKey": "Moonshot API 키 받기",
"moonshotBaseUrl": "Moonshot 엔트리포인트",
"geminiApiKey": "Gemini API 키",
"getGroqApiKey": "Groq API 키 받기",
"groqApiKey": "Groq API 키",
+ "getSambaNovaApiKey": "SambaNova API 키 받기",
+ "sambaNovaApiKey": "SambaNova API 키",
"getGeminiApiKey": "Gemini API 키 받기",
"getHuggingFaceApiKey": "Hugging Face API 키 받기",
"huggingFaceApiKey": "Hugging Face API 키",
diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json
index 2ab00fe309..4bfaf467f6 100644
--- a/webview-ui/src/i18n/locales/nl/chat.json
+++ b/webview-ui/src/i18n/locales/nl/chat.json
@@ -250,9 +250,9 @@
"title": "🎉 Roo Code {{version}} uitgebracht",
"description": "Roo Code {{version}} brengt krachtige nieuwe functies en significante verbeteringen om je ontwikkelingsworkflow te verbeteren.",
"whatsNew": "Wat is er nieuw",
- "feature1": "Hugging Face Provider: Krijg toegang tot talloze geweldige open source modellen direct via de nieuwe Hugging Face provider met naadloze integratie en modelselectie.",
- "feature2": "Inline Commando Controles: Nieuwe auto-goedkeuring en weigering controles voor commando-uitvoering geven je precieze controle over terminal operaties met aanpasbare permissies.",
- "feature3": "AGENTS.md Regels Ondersteuning: Voegt ondersteuning toe voor een community standaard AGENTS.md bestand in de root van het project.",
+ "feature1": "Berichtenwachtrij: Zet meerdere berichten in de wachtrij terwijl Roo werkt, zodat je je workflow kunt blijven plannen zonder onderbreking.",
+ "feature2": "Aangepaste Slash Commando's: Maak gepersonaliseerde slash commando's voor snelle toegang tot veelgebruikte prompts en workflows, met volledige UI-beheer.",
+ "feature3": "Verbeterde Gemini Tools: Nieuwe URL-context en Google Search grounding mogelijkheden bieden Gemini modellen realtime webinformatie en verbeterde onderzoeksmogelijkheden.",
"hideButton": "Aankondiging verbergen",
"detailsDiscussLinks": "Krijg meer details en doe mee aan discussies op Discord en Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Slash-opdrachten beheren",
"title": "Slash-opdrachten",
- "description": "Maak aangepaste slash-opdrachten voor snelle toegang tot veelgebruikte prompts en workflows.",
+ "description": "Maak aangepaste slash-opdrachten voor snelle toegang tot veelgebruikte prompts en workflows. Documentatie",
"globalCommands": "Globale Opdrachten",
"workspaceCommands": "Werkruimte Opdrachten",
"globalCommand": "Globale opdracht",
diff --git a/webview-ui/src/i18n/locales/nl/marketplace.json b/webview-ui/src/i18n/locales/nl/marketplace.json
index b378375397..1d84492f5a 100644
--- a/webview-ui/src/i18n/locales/nl/marketplace.json
+++ b/webview-ui/src/i18n/locales/nl/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Geen"
},
+ "sections": {
+ "organizationMcps": "MCP's van {{organization}}",
+ "marketplace": "Marktplaats"
+ },
"type-group": {
"modes": "Modi",
"mcps": "MCP-servers"
diff --git a/webview-ui/src/i18n/locales/nl/prompts.json b/webview-ui/src/i18n/locales/nl/prompts.json
index 7c8ba28605..43af1ada59 100644
--- a/webview-ui/src/i18n/locales/nl/prompts.json
+++ b/webview-ui/src/i18n/locales/nl/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "Huidige API-configuratie gebruiken",
"testPromptPlaceholder": "Voer een prompt in om de verbetering te testen",
"previewButton": "Voorbeeld promptverbetering",
- "testEnhancement": "Test verbetering"
+ "testEnhancement": "Test verbetering",
+ "includeTaskHistory": "Taakgeschiedenis als context opnemen",
+ "includeTaskHistoryDescription": "Wanneer ingeschakeld, worden de laatste 10 berichten van het huidige gesprek opgenomen als context bij het verbeteren van prompts, wat helpt bij het genereren van meer relevante en contextbewuste suggesties."
},
"condense": {
"apiConfiguration": "API-configuratie voor contextcondensatie",
diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json
index 1df4607fff..9815390ecb 100644
--- a/webview-ui/src/i18n/locales/nl/settings.json
+++ b/webview-ui/src/i18n/locales/nl/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Chutes API-sleutel ophalen",
"deepSeekApiKey": "DeepSeek API-sleutel",
"getDeepSeekApiKey": "DeepSeek API-sleutel ophalen",
+ "doubaoApiKey": "Doubao API-sleutel",
+ "getDoubaoApiKey": "Doubao API-sleutel ophalen",
"moonshotApiKey": "Moonshot API-sleutel",
"getMoonshotApiKey": "Moonshot API-sleutel ophalen",
"moonshotBaseUrl": "Moonshot-ingangspunt",
"geminiApiKey": "Gemini API-sleutel",
"getGroqApiKey": "Groq API-sleutel ophalen",
"groqApiKey": "Groq API-sleutel",
+ "getSambaNovaApiKey": "SambaNova API-sleutel ophalen",
+ "sambaNovaApiKey": "SambaNova API-sleutel",
"getGeminiApiKey": "Gemini API-sleutel ophalen",
"getHuggingFaceApiKey": "Hugging Face API-sleutel ophalen",
"huggingFaceApiKey": "Hugging Face API-sleutel",
diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json
index 2ccef3fb3e..10ee653582 100644
--- a/webview-ui/src/i18n/locales/pl/chat.json
+++ b/webview-ui/src/i18n/locales/pl/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} wydany",
"description": "Roo Code {{version}} wprowadza potężne nowe funkcje i znaczące ulepszenia, aby ulepszyć Twój przepływ pracy programistycznej.",
"whatsNew": "Co nowego",
- "feature1": "Dostawca Hugging Face: Uzyskaj dostęp do mnóstwa wspaniałych modeli open source bezpośrednio przez nowego dostawcę Hugging Face z bezproblemową integracją i wyborem modeli.",
- "feature2": "Kontrole Poleceń Inline: Nowe kontrole automatycznego zatwierdzania i odrzucania dla wykonywania poleceń dają ci precyzyjną kontrolę nad operacjami terminala z konfigurowalnymi uprawnieniami.",
- "feature3": "Wsparcie Reguł AGENTS.md: Dodaje wsparcie dla standardowego pliku AGENTS.md społeczności w katalogu głównym projektu.",
+ "feature1": "Kolejka Wiadomości: Umieszczaj wiele wiadomości w kolejce podczas pracy Roo, pozwalając na kontynuowanie planowania przepływu pracy bez przerw.",
+ "feature2": "Niestandardowe Polecenia Slash: Twórz spersonalizowane polecenia slash dla szybkiego dostępu do często używanych promptów i przepływów pracy, z pełnym zarządzaniem interfejsu użytkownika.",
+ "feature3": "Ulepszone Narzędzia Gemini: Nowe możliwości kontekstu URL i ugruntowania wyszukiwania Google zapewniają modelom Gemini informacje internetowe w czasie rzeczywistym i ulepszone możliwości badawcze.",
"hideButton": "Ukryj ogłoszenie",
"detailsDiscussLinks": "Uzyskaj więcej szczegółów i dołącz do dyskusji na Discord i Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Zarządzaj poleceniami slash",
"title": "Polecenia Slash",
- "description": "Twórz niestandardowe polecenia slash dla szybkiego dostępu do często używanych promptów i przepływów pracy.",
+ "description": "Twórz niestandardowe polecenia slash dla szybkiego dostępu do często używanych promptów i przepływów pracy. Dokumentacja",
"globalCommands": "Polecenia Globalne",
"workspaceCommands": "Polecenia Obszaru Roboczego",
"globalCommand": "Polecenie globalne",
diff --git a/webview-ui/src/i18n/locales/pl/marketplace.json b/webview-ui/src/i18n/locales/pl/marketplace.json
index 44bdd290d3..a9d0b2a009 100644
--- a/webview-ui/src/i18n/locales/pl/marketplace.json
+++ b/webview-ui/src/i18n/locales/pl/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Brak"
},
+ "sections": {
+ "organizationMcps": "MCPs {{organization}}",
+ "marketplace": "Rynek"
+ },
"type-group": {
"modes": "Tryby",
"mcps": "Serwery MCP"
diff --git a/webview-ui/src/i18n/locales/pl/prompts.json b/webview-ui/src/i18n/locales/pl/prompts.json
index c627f3a84d..7bd71f49b0 100644
--- a/webview-ui/src/i18n/locales/pl/prompts.json
+++ b/webview-ui/src/i18n/locales/pl/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "Użyj aktualnie wybranej konfiguracji API",
"testPromptPlaceholder": "Wprowadź podpowiedź, aby przetestować ulepszenie",
"previewButton": "Podgląd ulepszenia podpowiedzi",
- "testEnhancement": "Testuj ulepszenie"
+ "testEnhancement": "Testuj ulepszenie",
+ "includeTaskHistory": "Uwzględnij historię zadań jako kontekst",
+ "includeTaskHistoryDescription": "Gdy włączone, ostatnie 10 wiadomości z bieżącej rozmowy zostanie uwzględnione jako kontekst podczas ulepszania podpowiedzi, pomagając generować bardziej trafne i świadome kontekstu sugestie."
},
"condense": {
"apiConfiguration": "Konfiguracja API do kondensacji kontekstu",
diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json
index 0f8158c67f..457dda7d84 100644
--- a/webview-ui/src/i18n/locales/pl/settings.json
+++ b/webview-ui/src/i18n/locales/pl/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Uzyskaj klucz API Chutes",
"deepSeekApiKey": "Klucz API DeepSeek",
"getDeepSeekApiKey": "Uzyskaj klucz API DeepSeek",
+ "doubaoApiKey": "Klucz API Doubao",
+ "getDoubaoApiKey": "Uzyskaj klucz API Doubao",
"moonshotApiKey": "Klucz API Moonshot",
"getMoonshotApiKey": "Uzyskaj klucz API Moonshot",
"moonshotBaseUrl": "Punkt wejścia Moonshot",
"geminiApiKey": "Klucz API Gemini",
"getGroqApiKey": "Uzyskaj klucz API Groq",
"groqApiKey": "Klucz API Groq",
+ "getSambaNovaApiKey": "Uzyskaj klucz API SambaNova",
+ "sambaNovaApiKey": "Klucz API SambaNova",
"getGeminiApiKey": "Uzyskaj klucz API Gemini",
"getHuggingFaceApiKey": "Uzyskaj klucz API Hugging Face",
"huggingFaceApiKey": "Klucz API Hugging Face",
diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json
index c1999d06f1..b286f5c0ad 100644
--- a/webview-ui/src/i18n/locales/pt-BR/chat.json
+++ b/webview-ui/src/i18n/locales/pt-BR/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} Lançado",
"description": "Roo Code {{version}} traz novos recursos poderosos e melhorias significativas para aprimorar seu fluxo de trabalho de desenvolvimento.",
"whatsNew": "O que há de novo",
- "feature1": "Provedor Hugging Face: Acesse toneladas de excelentes modelos de código aberto diretamente através do novo provedor Hugging Face com integração perfeita e seleção de modelos.",
- "feature2": "Controles de Comando Inline: Novos controles de aprovação automática e negação para execução de comandos oferecem controle preciso sobre operações de terminal com permissões personalizáveis.",
- "feature3": "Suporte a Regras AGENTS.md: Adiciona suporte para um arquivo AGENTS.md padrão da comunidade na raiz do projeto.",
+ "feature1": "Fila de Mensagens: Coloque várias mensagens na fila enquanto o Roo está trabalhando, permitindo que você continue planejando seu fluxo de trabalho sem interrupção.",
+ "feature2": "Comandos de Barra Personalizados: Crie comandos de barra personalizados para acesso rápido a prompts e fluxos de trabalho usados frequentemente, com gerenciamento completo da interface do usuário.",
+ "feature3": "Ferramentas Gemini Aprimoradas: Novas capacidades de contexto de URL e fundamentação de pesquisa do Google fornecem aos modelos Gemini informações web em tempo real e capacidades de pesquisa aprimoradas.",
"hideButton": "Ocultar anúncio",
"detailsDiscussLinks": "Obtenha mais detalhes e participe da discussão no Discord e Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Gerenciar comandos de barra",
"title": "Comandos de Barra",
- "description": "Crie comandos de barra personalizados para acesso rápido a prompts e fluxos de trabalho usados com frequência.",
+ "description": "Crie comandos de barra personalizados para acesso rápido a prompts e fluxos de trabalho usados com frequência. Documentação",
"globalCommands": "Comandos Globais",
"workspaceCommands": "Comandos do Espaço de Trabalho",
"globalCommand": "Comando global",
diff --git a/webview-ui/src/i18n/locales/pt-BR/marketplace.json b/webview-ui/src/i18n/locales/pt-BR/marketplace.json
index 5f472d4e80..67e23c6ad3 100644
--- a/webview-ui/src/i18n/locales/pt-BR/marketplace.json
+++ b/webview-ui/src/i18n/locales/pt-BR/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Nenhum"
},
+ "sections": {
+ "organizationMcps": "MCPs da {{organization}}",
+ "marketplace": "Marketplace"
+ },
"type-group": {
"modes": "Modos",
"mcps": "Servidores MCP"
diff --git a/webview-ui/src/i18n/locales/pt-BR/prompts.json b/webview-ui/src/i18n/locales/pt-BR/prompts.json
index e5989d2894..5bc3234c4d 100644
--- a/webview-ui/src/i18n/locales/pt-BR/prompts.json
+++ b/webview-ui/src/i18n/locales/pt-BR/prompts.json
@@ -94,7 +94,9 @@
"useCurrentConfig": "Usar configuração de API atualmente selecionada",
"testPromptPlaceholder": "Digite um prompt para testar o aprimoramento",
"previewButton": "Visualizar aprimoramento do prompt",
- "testEnhancement": "Testar aprimoramento"
+ "testEnhancement": "Testar aprimoramento",
+ "includeTaskHistory": "Incluir histórico de tarefas como contexto",
+ "includeTaskHistoryDescription": "Quando habilitado, as últimas 10 mensagens da conversa atual serão incluídas como contexto ao aprimorar prompts, ajudando a gerar sugestões mais relevantes e conscientes do contexto."
},
"condense": {
"apiConfiguration": "Configuração da API para condensação de contexto",
diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json
index 01f793f7ef..2e6473ebcb 100644
--- a/webview-ui/src/i18n/locales/pt-BR/settings.json
+++ b/webview-ui/src/i18n/locales/pt-BR/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Obter chave de API Chutes",
"deepSeekApiKey": "Chave de API DeepSeek",
"getDeepSeekApiKey": "Obter chave de API DeepSeek",
+ "doubaoApiKey": "Chave de API Doubao",
+ "getDoubaoApiKey": "Obter chave de API Doubao",
"moonshotApiKey": "Chave de API Moonshot",
"getMoonshotApiKey": "Obter chave de API Moonshot",
"moonshotBaseUrl": "Ponto de entrada Moonshot",
"geminiApiKey": "Chave de API Gemini",
"getGroqApiKey": "Obter chave de API Groq",
"groqApiKey": "Chave de API Groq",
+ "getSambaNovaApiKey": "Obter chave de API SambaNova",
+ "sambaNovaApiKey": "Chave de API SambaNova",
"getGeminiApiKey": "Obter chave de API Gemini",
"getHuggingFaceApiKey": "Obter chave de API Hugging Face",
"huggingFaceApiKey": "Chave de API Hugging Face",
diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json
index 06c1e5a0e9..af3e9aadf8 100644
--- a/webview-ui/src/i18n/locales/ru/chat.json
+++ b/webview-ui/src/i18n/locales/ru/chat.json
@@ -250,9 +250,9 @@
"title": "🎉 Выпущен Roo Code {{version}}",
"description": "Roo Code {{version}} приносит мощные новые функции и значительные улучшения для совершенствования вашего рабочего процесса разработки.",
"whatsNew": "Что нового",
- "feature1": "Провайдер Hugging Face: Получите доступ к множеству отличных моделей с открытым исходным кодом напрямую через новый провайдер Hugging Face с бесшовной интеграцией и выбором моделей.",
- "feature2": "Встроенные элементы управления командами: Новые элементы управления автоматическим одобрением и отклонением для выполнения команд дают вам точный контроль над операциями терминала с настраиваемыми разрешениями.",
- "feature3": "Поддержка правил AGENTS.md: Добавляет поддержку стандартного файла AGENTS.md сообщества в корне проекта.",
+ "feature1": "Очередь сообщений: Ставьте несколько сообщений в очередь, пока Roo работает, позволяя вам продолжать планировать рабочий процесс без прерывания.",
+ "feature2": "Пользовательские слэш-команды: Создавайте персонализированные слэш-команды для быстрого доступа к часто используемым промптам и рабочим процессам с полным управлением пользовательского интерфейса.",
+ "feature3": "Улучшенные инструменты Gemini: Новые возможности контекста URL и основы поиска Google предоставляют моделям Gemini информацию в реальном времени и расширенные возможности исследования.",
"hideButton": "Скрыть объявление",
"detailsDiscussLinks": "Подробнее и обсуждение в Discord и Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Управление слэш-командами",
"title": "Слэш-команды",
- "description": "Создавайте пользовательские слэш-команды для быстрого доступа к часто используемым промптам и рабочим процессам.",
+ "description": "Создавайте пользовательские слэш-команды для быстрого доступа к часто используемым промптам и рабочим процессам. Документация",
"globalCommands": "Глобальные команды",
"workspaceCommands": "Команды рабочего пространства",
"globalCommand": "Глобальная команда",
diff --git a/webview-ui/src/i18n/locales/ru/marketplace.json b/webview-ui/src/i18n/locales/ru/marketplace.json
index f32d855406..299ebbf603 100644
--- a/webview-ui/src/i18n/locales/ru/marketplace.json
+++ b/webview-ui/src/i18n/locales/ru/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Нет"
},
+ "sections": {
+ "organizationMcps": "MCPs {{organization}}",
+ "marketplace": "Маркетплейс"
+ },
"type-group": {
"modes": "Режимы",
"mcps": "MCP серверы"
diff --git a/webview-ui/src/i18n/locales/ru/prompts.json b/webview-ui/src/i18n/locales/ru/prompts.json
index c96d4b54a1..cc9210c678 100644
--- a/webview-ui/src/i18n/locales/ru/prompts.json
+++ b/webview-ui/src/i18n/locales/ru/prompts.json
@@ -91,7 +91,9 @@
"useCurrentConfig": "Использовать текущую конфигурацию API",
"testPromptPlaceholder": "Введите промпт для тестирования улучшения",
"previewButton": "Просмотреть улучшенный промпт",
- "testEnhancement": "Тестировать улучшение"
+ "testEnhancement": "Тестировать улучшение",
+ "includeTaskHistory": "Включить историю задач как контекст",
+ "includeTaskHistoryDescription": "При включении последние 10 сообщений из текущего разговора будут включены как контекст при улучшении промптов, помогая генерировать более релевантные и контекстно-осведомленные предложения."
},
"condense": {
"apiConfiguration": "Конфигурация API для сжатия контекста",
diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json
index 202c769912..e847c1a817 100644
--- a/webview-ui/src/i18n/locales/ru/settings.json
+++ b/webview-ui/src/i18n/locales/ru/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Получить Chutes API-ключ",
"deepSeekApiKey": "DeepSeek API-ключ",
"getDeepSeekApiKey": "Получить DeepSeek API-ключ",
+ "doubaoApiKey": "Doubao API-ключ",
+ "getDoubaoApiKey": "Получить Doubao API-ключ",
"moonshotApiKey": "Moonshot API-ключ",
"getMoonshotApiKey": "Получить Moonshot API-ключ",
"moonshotBaseUrl": "Точка входа Moonshot",
"geminiApiKey": "Gemini API-ключ",
"getGroqApiKey": "Получить Groq API-ключ",
"groqApiKey": "Groq API-ключ",
+ "getSambaNovaApiKey": "Получить SambaNova API-ключ",
+ "sambaNovaApiKey": "SambaNova API-ключ",
"getGeminiApiKey": "Получить Gemini API-ключ",
"getHuggingFaceApiKey": "Получить Hugging Face API-ключ",
"huggingFaceApiKey": "Hugging Face API-ключ",
diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json
index 8f1a803973..e6868b5db1 100644
--- a/webview-ui/src/i18n/locales/tr/chat.json
+++ b/webview-ui/src/i18n/locales/tr/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} Yayınlandı",
"description": "Roo Code {{version}}, geliştirme iş akışınızı geliştirmek için güçlü yeni özellikler ve önemli iyileştirmeler getiriyor.",
"whatsNew": "Yenilikler",
- "feature1": "Hugging Face Sağlayıcısı: Yeni Hugging Face sağlayıcısı aracılığıyla sorunsuz entegrasyon ve model seçimi ile tonlarca harika açık kaynak modeline doğrudan erişin.",
- "feature2": "Satır İçi Komut Kontrolleri: Komut yürütme için yeni otomatik onay ve reddetme kontrolleri, özelleştirilebilir izinlerle terminal işlemleri üzerinde hassas kontrol sağlar.",
- "feature3": "AGENTS.md Kuralları Desteği: Projenin kökünde topluluk standardı AGENTS.md dosyası için destek ekler.",
+ "feature1": "Mesaj Kuyruğu: Roo çalışırken birden fazla mesajı kuyruğa alın, iş akışınızı kesintisiz olarak planlamaya devam etmenizi sağlar.",
+ "feature2": "Özel Slash Komutları: Sık kullanılan promptlara ve iş akışlarına hızlı erişim için kişiselleştirilmiş slash komutları oluşturun, tam UI yönetimi ile.",
+ "feature3": "Gelişmiş Gemini Araçları: Yeni URL bağlamı ve Google Arama temellendirilmesi yetenekleri, Gemini modellerine gerçek zamanlı web bilgileri ve gelişmiş araştırma yetenekleri sağlar.",
"hideButton": "Duyuruyu gizle",
"detailsDiscussLinks": "Discord ve Reddit'te daha fazla ayrıntı alın ve tartışmalara katılın 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Eğik çizgi komutlarını yönet",
"title": "Eğik Çizgi Komutları",
- "description": "Sık kullanılan komut istemleri ve iş akışlarına hızlı erişim için özel eğik çizgi komutları oluşturun.",
+ "description": "Sık kullanılan komut istemleri ve iş akışlarına hızlı erişim için özel eğik çizgi komutları oluşturun. Belgeler",
"globalCommands": "Genel Komutlar",
"workspaceCommands": "Çalışma Alanı Komutları",
"globalCommand": "Genel komut",
diff --git a/webview-ui/src/i18n/locales/tr/marketplace.json b/webview-ui/src/i18n/locales/tr/marketplace.json
index 279ae2c38a..44b8cb98b2 100644
--- a/webview-ui/src/i18n/locales/tr/marketplace.json
+++ b/webview-ui/src/i18n/locales/tr/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Hiçbiri"
},
+ "sections": {
+ "organizationMcps": "{{organization}} MCP'leri",
+ "marketplace": "Marketplace"
+ },
"type-group": {
"modes": "Modlar",
"mcps": "MCP Sunucuları"
diff --git a/webview-ui/src/i18n/locales/tr/prompts.json b/webview-ui/src/i18n/locales/tr/prompts.json
index 9b7e2c569f..eec283977c 100644
--- a/webview-ui/src/i18n/locales/tr/prompts.json
+++ b/webview-ui/src/i18n/locales/tr/prompts.json
@@ -91,7 +91,9 @@
"useCurrentConfig": "Şu anda seçili API yapılandırmasını kullan",
"testPromptPlaceholder": "Geliştirmeyi test etmek için bir prompt girin",
"previewButton": "Prompt geliştirmesini önizle",
- "testEnhancement": "Geliştirmeyi test et"
+ "testEnhancement": "Geliştirmeyi test et",
+ "includeTaskHistory": "Görev geçmişini bağlam olarak dahil et",
+ "includeTaskHistoryDescription": "Etkinleştirildiğinde, mevcut konuşmanın son 10 mesajı promptları geliştirirken bağlam olarak dahil edilecek ve daha alakalı ve bağlam farkında öneriler üretmeye yardımcı olacaktır."
},
"condense": {
"apiConfiguration": "Bağlam Yoğunlaştırma için API Yapılandırması",
diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json
index 2801734a98..3dfa94128a 100644
--- a/webview-ui/src/i18n/locales/tr/settings.json
+++ b/webview-ui/src/i18n/locales/tr/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Chutes API Anahtarı Al",
"deepSeekApiKey": "DeepSeek API Anahtarı",
"getDeepSeekApiKey": "DeepSeek API Anahtarı Al",
+ "doubaoApiKey": "Doubao API Anahtarı",
+ "getDoubaoApiKey": "Doubao API Anahtarı Al",
"moonshotApiKey": "Moonshot API Anahtarı",
"getMoonshotApiKey": "Moonshot API Anahtarı Al",
"moonshotBaseUrl": "Moonshot Giriş Noktası",
"geminiApiKey": "Gemini API Anahtarı",
"getGroqApiKey": "Groq API Anahtarı Al",
"groqApiKey": "Groq API Anahtarı",
+ "getSambaNovaApiKey": "SambaNova API Anahtarı Al",
+ "sambaNovaApiKey": "SambaNova API Anahtarı",
"getHuggingFaceApiKey": "Hugging Face API Anahtarı Al",
"huggingFaceApiKey": "Hugging Face API Anahtarı",
"huggingFaceModelId": "Model ID",
diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json
index 44c96af46b..2b86060ceb 100644
--- a/webview-ui/src/i18n/locales/vi/chat.json
+++ b/webview-ui/src/i18n/locales/vi/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} Đã phát hành",
"description": "Roo Code {{version}} mang đến các tính năng mạnh mẽ mới và cải tiến đáng kể để nâng cao quy trình phát triển của bạn.",
"whatsNew": "Có gì mới",
- "feature1": "Nhà cung cấp Hugging Face: Truy cập hàng tấn mô hình mã nguồn mở tuyệt vời trực tiếp thông qua nhà cung cấp Hugging Face mới với tích hợp liền mạch và lựa chọn mô hình.",
- "feature2": "Điều khiển Lệnh Inline: Các điều khiển tự động phê duyệt và từ chối mới cho việc thực thi lệnh cung cấp cho bạn quyền kiểm soát chính xác các hoạt động terminal với quyền có thể tùy chỉnh.",
- "feature3": "Hỗ trợ Quy tắc AGENTS.md: Thêm hỗ trợ cho tệp AGENTS.md tiêu chuẩn cộng đồng trong thư mục gốc của dự án.",
+ "feature1": "Hàng đợi Tin nhắn: Xếp hàng nhiều tin nhắn trong khi Roo đang làm việc, cho phép bạn tiếp tục lập kế hoạch quy trình làm việc mà không bị gián đoạn.",
+ "feature2": "Lệnh Slash Tùy chỉnh: Tạo các lệnh slash được cá nhân hóa để truy cập nhanh vào các prompt và quy trình làm việc thường dùng, với quản lý UI đầy đủ.",
+ "feature3": "Công cụ Gemini Nâng cao: Khả năng ngữ cảnh URL mới và nền tảng tìm kiếm Google cung cấp cho các mô hình Gemini thông tin web thời gian thực và khả năng nghiên cứu nâng cao.",
"hideButton": "Ẩn thông báo",
"detailsDiscussLinks": "Nhận thêm chi tiết và thảo luận tại Discord và Reddit 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "Quản lý lệnh gạch chéo",
"title": "Lệnh Gạch Chéo",
- "description": "Tạo lệnh gạch chéo tùy chỉnh để truy cập nhanh vào các lời nhắc và quy trình làm việc thường dùng.",
+ "description": "Tạo lệnh gạch chéo tùy chỉnh để truy cập nhanh vào các lời nhắc và quy trình làm việc thường dùng. Tài liệu",
"globalCommands": "Lệnh Toàn Cục",
"workspaceCommands": "Lệnh Không Gian Làm Việc",
"globalCommand": "Lệnh toàn cục",
diff --git a/webview-ui/src/i18n/locales/vi/marketplace.json b/webview-ui/src/i18n/locales/vi/marketplace.json
index fcb5beefc4..7a51d0a29b 100644
--- a/webview-ui/src/i18n/locales/vi/marketplace.json
+++ b/webview-ui/src/i18n/locales/vi/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "Không có"
},
+ "sections": {
+ "organizationMcps": "MCP của {{organization}}",
+ "marketplace": "Marketplace"
+ },
"type-group": {
"modes": "Chế độ",
"mcps": "Máy chủ MCP"
diff --git a/webview-ui/src/i18n/locales/vi/prompts.json b/webview-ui/src/i18n/locales/vi/prompts.json
index d3b7e75f3c..d7a38cda6f 100644
--- a/webview-ui/src/i18n/locales/vi/prompts.json
+++ b/webview-ui/src/i18n/locales/vi/prompts.json
@@ -91,7 +91,9 @@
"useCurrentConfig": "Sử dụng cấu hình API hiện tại đã chọn",
"testPromptPlaceholder": "Nhập lời nhắc để kiểm tra việc nâng cao",
"previewButton": "Xem trước nâng cao lời nhắc",
- "testEnhancement": "Kiểm tra cải tiến"
+ "testEnhancement": "Kiểm tra cải tiến",
+ "includeTaskHistory": "Bao gồm lịch sử tác vụ làm ngữ cảnh",
+ "includeTaskHistoryDescription": "Khi được bật, 10 tin nhắn cuối cùng từ cuộc trò chuyện hiện tại sẽ được bao gồm làm ngữ cảnh khi nâng cao lời nhắc, giúp tạo ra các gợi ý phù hợp và nhận thức ngữ cảnh hơn."
},
"condense": {
"apiConfiguration": "Cấu hình API để cô đọng ngữ cảnh",
diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json
index 24cc994e82..b25142db5c 100644
--- a/webview-ui/src/i18n/locales/vi/settings.json
+++ b/webview-ui/src/i18n/locales/vi/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "Lấy khóa API Chutes",
"deepSeekApiKey": "Khóa API DeepSeek",
"getDeepSeekApiKey": "Lấy khóa API DeepSeek",
+ "doubaoApiKey": "Khóa API Doubao",
+ "getDoubaoApiKey": "Lấy khóa API Doubao",
"moonshotApiKey": "Khóa API Moonshot",
"getMoonshotApiKey": "Lấy khóa API Moonshot",
"moonshotBaseUrl": "Điểm vào Moonshot",
"geminiApiKey": "Khóa API Gemini",
"getGroqApiKey": "Lấy khóa API Groq",
"groqApiKey": "Khóa API Groq",
+ "getSambaNovaApiKey": "Lấy khóa API SambaNova",
+ "sambaNovaApiKey": "Khóa API SambaNova",
"getHuggingFaceApiKey": "Lấy Khóa API Hugging Face",
"huggingFaceApiKey": "Khóa API Hugging Face",
"huggingFaceModelId": "ID Mô hình",
diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json
index c1acb3ef41..dc21acee0b 100644
--- a/webview-ui/src/i18n/locales/zh-CN/chat.json
+++ b/webview-ui/src/i18n/locales/zh-CN/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} 已发布",
"description": "Roo Code {{version}} 带来强大的新功能和重大改进,提升您的开发工作流程。",
"whatsNew": "新特性",
- "feature1": "Hugging Face 提供商: 通过新的 Hugging Face 提供商直接访问大量优秀的开源模型,具备无缝集成和模型选择功能。",
- "feature2": "内联命令控制: 新的自动批准和拒绝命令执行控制,为您提供对终端操作的精确控制和可自定义权限。",
- "feature3": "AGENTS.md 规则支持: 添加对项目根目录中社区标准 AGENTS.md 文件的支持。",
+ "feature1": "消息队列: 在 Roo 工作时将多个消息排队,让你可以不间断地继续规划工作流程。",
+ "feature2": "自定义斜杠命令: 创建个性化斜杠命令,快速访问常用提示词和工作流程,具备完整的 UI 管理功能。",
+ "feature3": "增强的 Gemini 工具: 新的 URL 上下文和 Google 搜索基础功能为 Gemini 模型提供实时网络信息和增强的研究能力。",
"hideButton": "隐藏公告",
"detailsDiscussLinks": "在 Discord 和 Reddit 获取更多详情并参与讨论 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "管理斜杠命令",
"title": "斜杠命令",
- "description": "创建自定义斜杠命令,快速访问常用提示词和工作流程。",
+ "description": "创建自定义斜杠命令,快速访问常用提示词和工作流程。文档",
"globalCommands": "全局命令",
"workspaceCommands": "工作区命令",
"globalCommand": "全局命令",
diff --git a/webview-ui/src/i18n/locales/zh-CN/marketplace.json b/webview-ui/src/i18n/locales/zh-CN/marketplace.json
index 598da383d4..996da334d5 100644
--- a/webview-ui/src/i18n/locales/zh-CN/marketplace.json
+++ b/webview-ui/src/i18n/locales/zh-CN/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "无"
},
+ "sections": {
+ "organizationMcps": "{{organization}} MCPs",
+ "marketplace": "Marketplace"
+ },
"type-group": {
"modes": "模式",
"mcps": "MCP 服务"
diff --git a/webview-ui/src/i18n/locales/zh-CN/prompts.json b/webview-ui/src/i18n/locales/zh-CN/prompts.json
index 157ba5d7ea..c21c22b7bd 100644
--- a/webview-ui/src/i18n/locales/zh-CN/prompts.json
+++ b/webview-ui/src/i18n/locales/zh-CN/prompts.json
@@ -91,7 +91,9 @@
"useCurrentConfig": "使用当前选择的API配置",
"testPromptPlaceholder": "输入提示词以测试增强效果",
"previewButton": "测试提示词增强",
- "testEnhancement": "测试增强"
+ "testEnhancement": "测试增强",
+ "includeTaskHistory": "包含任务历史作为上下文",
+ "includeTaskHistoryDescription": "启用后,当前对话的最后 10 条消息将作为上下文包含在增强提示词时,有助于生成更相关和上下文感知的建议。"
},
"condense": {
"apiConfiguration": "用于上下文压缩的 API 配置",
diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json
index f0ca8bab37..3c64a33d9d 100644
--- a/webview-ui/src/i18n/locales/zh-CN/settings.json
+++ b/webview-ui/src/i18n/locales/zh-CN/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "获取 Chutes API 密钥",
"deepSeekApiKey": "DeepSeek API 密钥",
"getDeepSeekApiKey": "获取 DeepSeek API 密钥",
+ "doubaoApiKey": "豆包 API 密钥",
+ "getDoubaoApiKey": "获取豆包 API 密钥",
"moonshotApiKey": "Moonshot API 密钥",
"getMoonshotApiKey": "获取 Moonshot API 密钥",
"moonshotBaseUrl": "Moonshot 服务站点",
"geminiApiKey": "Gemini API 密钥",
"getGroqApiKey": "获取 Groq API 密钥",
"groqApiKey": "Groq API 密钥",
+ "getSambaNovaApiKey": "获取 SambaNova API 密钥",
+ "sambaNovaApiKey": "SambaNova API 密钥",
"getHuggingFaceApiKey": "获取 Hugging Face API 密钥",
"huggingFaceApiKey": "Hugging Face API 密钥",
"huggingFaceModelId": "模型 ID",
diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json
index afa08f281f..fc38009186 100644
--- a/webview-ui/src/i18n/locales/zh-TW/chat.json
+++ b/webview-ui/src/i18n/locales/zh-TW/chat.json
@@ -265,9 +265,9 @@
"title": "🎉 Roo Code {{version}} 已發布",
"description": "Roo Code {{version}} 帶來強大的新功能和重大改進,提升您的開發工作流程。",
"whatsNew": "新功能",
- "feature1": "Hugging Face 提供者:透過新的 Hugging Face 提供者直接存取大量優秀的開源模型,具備無縫整合和模型選擇功能。",
- "feature2": "內嵌命令控制:新的自動核准和拒絕命令執行控制,為您提供對終端機操作的精確控制和可自訂權限。",
- "feature3": "AGENTS.md 規則支援:新增對專案根目錄中社群標準 AGENTS.md 檔案的支援。",
+ "feature1": "訊息佇列:在 Roo 工作時將多個訊息排入佇列,讓您可以不間斷地繼續規劃工作流程。",
+ "feature2": "自訂斜線命令:建立個人化斜線命令,快速存取常用提示和工作流程,具備完整的 UI 管理功能。",
+ "feature3": "增強的 Gemini 工具:新的 URL 上下文和 Google 搜尋基礎功能為 Gemini 模型提供即時網路資訊和增強的研究能力。",
"hideButton": "隱藏公告",
"detailsDiscussLinks": "在 Discord 和 Reddit 取得更多詳細資訊並參與討論 🚀"
},
@@ -355,7 +355,7 @@
"slashCommands": {
"tooltip": "管理斜線指令",
"title": "斜線指令",
- "description": "建立自訂斜線指令,快速存取常用提示詞和工作流程。",
+ "description": "建立自訂斜線指令,快速存取常用提示詞和工作流程。說明文件",
"globalCommands": "全域指令",
"workspaceCommands": "工作區指令",
"globalCommand": "全域指令",
diff --git a/webview-ui/src/i18n/locales/zh-TW/marketplace.json b/webview-ui/src/i18n/locales/zh-TW/marketplace.json
index 1ac6ed53c2..dd3d30cc2f 100644
--- a/webview-ui/src/i18n/locales/zh-TW/marketplace.json
+++ b/webview-ui/src/i18n/locales/zh-TW/marketplace.json
@@ -35,6 +35,10 @@
},
"none": "無"
},
+ "sections": {
+ "organizationMcps": "{{organization}} MCPs",
+ "marketplace": "Marketplace"
+ },
"type-group": {
"modes": "模式",
"mcps": "MCP 伺服器"
diff --git a/webview-ui/src/i18n/locales/zh-TW/prompts.json b/webview-ui/src/i18n/locales/zh-TW/prompts.json
index 3a2bae4af5..47a32d7d83 100644
--- a/webview-ui/src/i18n/locales/zh-TW/prompts.json
+++ b/webview-ui/src/i18n/locales/zh-TW/prompts.json
@@ -91,7 +91,9 @@
"useCurrentConfig": "使用目前選擇的 API 設定",
"testPromptPlaceholder": "輸入提示詞以測試增強效果",
"previewButton": "預覽提示詞增強",
- "testEnhancement": "測試增強"
+ "testEnhancement": "測試增強",
+ "includeTaskHistory": "包含工作歷史作為內容",
+ "includeTaskHistoryDescription": "啟用後,目前對話的最後 10 則訊息將作為內容包含在增強提示詞時,有助於產生更相關和內容感知的建議。"
},
"condense": {
"apiConfiguration": "用於上下文壓縮的 API 設定",
diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json
index ca812f2697..5067968297 100644
--- a/webview-ui/src/i18n/locales/zh-TW/settings.json
+++ b/webview-ui/src/i18n/locales/zh-TW/settings.json
@@ -253,12 +253,16 @@
"getChutesApiKey": "取得 Chutes API 金鑰",
"deepSeekApiKey": "DeepSeek API 金鑰",
"getDeepSeekApiKey": "取得 DeepSeek API 金鑰",
+ "doubaoApiKey": "豆包 API 金鑰",
+ "getDoubaoApiKey": "取得豆包 API 金鑰",
"moonshotApiKey": "Moonshot API 金鑰",
"getMoonshotApiKey": "取得 Moonshot API 金鑰",
"moonshotBaseUrl": "Moonshot 服務站點",
"geminiApiKey": "Gemini API 金鑰",
"getGroqApiKey": "取得 Groq API 金鑰",
"groqApiKey": "Groq API 金鑰",
+ "getSambaNovaApiKey": "取得 SambaNova API 金鑰",
+ "sambaNovaApiKey": "SambaNova API 金鑰",
"getHuggingFaceApiKey": "取得 Hugging Face API 金鑰",
"huggingFaceApiKey": "Hugging Face API 金鑰",
"huggingFaceModelId": "模型 ID",
diff --git a/webview-ui/src/utils/__tests__/command-validation.spec.ts b/webview-ui/src/utils/__tests__/command-validation.spec.ts
index 63a460ffaf..29370c471f 100644
--- a/webview-ui/src/utils/__tests__/command-validation.spec.ts
+++ b/webview-ui/src/utils/__tests__/command-validation.spec.ts
@@ -11,6 +11,7 @@ import {
getSingleCommandDecision,
CommandValidator,
createCommandValidator,
+ containsSubshell,
} from "../command-validation"
describe("Command Validation", () => {
@@ -20,6 +21,14 @@ describe("Command Validation", () => {
expect(parseCommand("npm test || npm run build")).toEqual(["npm test", "npm run build"])
expect(parseCommand("npm test; npm run build")).toEqual(["npm test", "npm run build"])
expect(parseCommand("npm test | npm run build")).toEqual(["npm test", "npm run build"])
+ expect(parseCommand("npm test & npm run build")).toEqual(["npm test", "npm run build"])
+ })
+
+ it("handles & operator for background execution", () => {
+ expect(parseCommand("ls & whoami")).toEqual(["ls", "whoami"])
+ expect(parseCommand("ls & whoami & pwd")).toEqual(["ls", "whoami", "pwd"])
+ expect(parseCommand("ls && whoami & pwd || echo done")).toEqual(["ls", "whoami", "pwd", "echo done"])
+ expect(parseCommand("ls&whoami")).toEqual(["ls", "whoami"])
})
it("preserves quoted content", () => {
@@ -31,6 +40,67 @@ describe("Command Validation", () => {
it("handles subshell patterns", () => {
expect(parseCommand("npm test $(echo test)")).toEqual(["npm test", "echo test"])
expect(parseCommand("npm test `echo test`")).toEqual(["npm test", "echo test"])
+ expect(parseCommand("diff <(sort f1) <(sort f2)")).toEqual(["diff", "sort f1", "sort f2"])
+ })
+
+ it("detects additional subshell patterns", () => {
+ // Test $[] arithmetic expansion detection
+ expect(parseCommand("echo $[1 + 2]")).toEqual(["echo $[1 + 2]"])
+
+ // Verify containsSubshell detects all subshell patterns
+ expect(containsSubshell("echo $[1 + 2]")).toBe(true) // $[] arithmetic expansion
+ expect(containsSubshell("echo $((1 + 2))")).toBe(true) // $(()) arithmetic expansion
+ expect(containsSubshell("echo $(date)")).toBe(true) // $() command substitution
+ expect(containsSubshell("echo `date`")).toBe(true) // backtick substitution
+ expect(containsSubshell("diff <(sort f1) <(sort f2)")).toBe(true) // process substitution
+ expect(containsSubshell("echo hello")).toBe(false) // no subshells
+ })
+
+ it("detects subshell grouping patterns", () => {
+ // Basic subshell grouping with shell operators
+ expect(containsSubshell("(ls; rm file)")).toBe(true)
+ expect(containsSubshell("(cd /tmp && rm -rf *)")).toBe(true)
+ expect(containsSubshell("(command1 || command2)")).toBe(true)
+ expect(containsSubshell("(ls | grep test)")).toBe(true)
+ expect(containsSubshell("(sleep 10 & echo done)")).toBe(true)
+
+ // Nested subshells
+ expect(containsSubshell("(cd /tmp && (rm -rf * || echo failed))")).toBe(true)
+
+ // Multiple operators in subshell
+ expect(containsSubshell("(cmd1; cmd2 && cmd3 | cmd4)")).toBe(true)
+
+ // Subshell with spaces
+ expect(containsSubshell("( ls ; rm file )")).toBe(true)
+ })
+
+ it("does NOT detect legitimate parentheses usage", () => {
+ // Function calls should not be flagged as subshells
+ expect(containsSubshell("myfunction(arg1, arg2)")).toBe(false)
+ expect(containsSubshell("func( arg1, arg2 )")).toBe(false)
+
+ // Simple parentheses without operators
+ expect(containsSubshell("(simple text)")).toBe(false)
+
+ // Parentheses in strings
+ expect(containsSubshell('echo "this (has) parentheses"')).toBe(false)
+
+ // Empty parentheses
+ expect(containsSubshell("()")).toBe(false)
+ })
+
+ it("handles mixed subshell patterns", () => {
+ // Mixed subshell types
+ expect(containsSubshell("(echo $(date); rm file)")).toBe(true)
+
+ // Subshell with command substitution
+ expect(containsSubshell("(ls `pwd`; echo done)")).toBe(true)
+
+ // No subshells
+ expect(containsSubshell("echo hello world")).toBe(false)
+
+ // Empty string
+ expect(containsSubshell("")).toBe(false)
})
it("handles empty and whitespace input", () => {
@@ -629,7 +699,6 @@ echo "Successfully converted $count .jsx files to .tsx"`
})
})
})
-
describe("Unified Command Decision Functions", () => {
describe("getSingleCommandDecision", () => {
const allowedCommands = ["npm", "echo", "git"]
@@ -712,8 +781,8 @@ describe("Unified Command Decision Functions", () => {
expect(getCommandDecision("npm install && dangerous", allowedCommands, deniedCommands)).toBe("ask_user")
})
- it("returns auto_deny for subshell commands only when they contain denied prefixes", () => {
- // Subshells without denied prefixes should not be auto-denied
+ it("properly validates subshell commands by checking all parsed commands", () => {
+ // Subshells without denied prefixes should be auto-approved if all commands are allowed
expect(getCommandDecision("npm install $(echo test)", allowedCommands, deniedCommands)).toBe("auto_approve")
expect(getCommandDecision("npm install `echo test`", allowedCommands, deniedCommands)).toBe("auto_approve")
@@ -727,7 +796,7 @@ describe("Unified Command Decision Functions", () => {
expect(getCommandDecision("npm test $(echo hello)", allowedCommands, deniedCommands)).toBe("auto_deny")
})
- it("allows subshell commands when no denylist is present", () => {
+ it("properly validates subshell commands when no denylist is present", () => {
expect(getCommandDecision("npm install $(echo test)", allowedCommands)).toBe("auto_approve")
expect(getCommandDecision("npm install `echo test`", allowedCommands)).toBe("auto_approve")
})
@@ -844,12 +913,12 @@ describe("Unified Command Decision Functions", () => {
it("detects subshells correctly", () => {
const details = validator.getValidationDetails("npm install $(echo test)")
expect(details.hasSubshells).toBe(true)
- expect(details.decision).toBe("auto_approve") // not blocked since echo doesn't match denied prefixes
+ expect(details.decision).toBe("auto_approve") // all commands are allowed
// Test with denied prefix in subshell
const detailsWithDenied = validator.getValidationDetails("npm install $(npm test)")
expect(detailsWithDenied.hasSubshells).toBe(true)
- expect(detailsWithDenied.decision).toBe("auto_deny") // blocked due to npm test in subshell
+ expect(detailsWithDenied.decision).toBe("auto_deny") // npm test is denied
})
it("handles complex command chains", () => {
@@ -955,9 +1024,9 @@ describe("Unified Command Decision Functions", () => {
// Multiple subshells, one with denied prefix
expect(validator.validateCommand("echo $(date) $(rm file)")).toBe("auto_deny")
- // Nested subshells - inner commands are extracted and not in allowlist
+ // Nested subshells - validates individual parsed commands
expect(validator.validateCommand("echo $(echo $(date))")).toBe("ask_user")
- expect(validator.validateCommand("echo $(echo $(rm file))")).toBe("auto_deny")
+ expect(validator.validateCommand("echo $(echo $(rm file))")).toBe("ask_user") // complex nested parsing with mixed validation results
})
it("handles complex commands with subshells", () => {
diff --git a/webview-ui/src/utils/command-validation.ts b/webview-ui/src/utils/command-validation.ts
index b403d41d8c..700aed554b 100644
--- a/webview-ui/src/utils/command-validation.ts
+++ b/webview-ui/src/utils/command-validation.ts
@@ -36,18 +36,18 @@ type ShellToken = string | { op: string } | { command: string }
*
* ## Command Processing Pipeline:
*
- * 1. **Subshell Detection**: Commands containing $() or `` are blocked if denylist exists
- * 2. **Command Parsing**: Split chained commands (&&, ||, ;, |) into individual commands
- * 3. **Pattern Matching**: For each command, find longest matching prefixes in both lists
- * 4. **Decision Logic**: Apply longest prefix match rule to determine approval/denial
- * 5. **Aggregation**: Combine decisions (any denial blocks the entire command chain)
+ * 1. **Subshell Detection**: Commands containing dangerous patterns like $(), ``, or (cmd1; cmd2) are flagged as security risks
+ * 2. **Command Parsing**: Split chained commands (&&, ||, ;, |, &) into individual commands for separate validation
+ * 3. **Pattern Matching**: For each individual command, find the longest matching prefix in both allowlist and denylist
+ * 4. **Decision Logic**: Apply longest prefix match rule - more specific (longer) matches take precedence
+ * 5. **Aggregation**: Combine individual decisions - if any command is denied, the entire chain is denied
*
* ## Security Considerations:
*
- * - **Subshell Protection**: Prevents command injection via $(command) or `command`
- * - **Chain Analysis**: Each command in a chain (cmd1 && cmd2) is validated separately
- * - **Case Insensitive**: All matching is case-insensitive for consistency
- * - **Whitespace Handling**: Commands are trimmed and normalized before matching
+ * - **Subshell Protection**: Detects and blocks command injection attempts via command substitution, process substitution, and subshell grouping
+ * - **Chain Analysis**: Each command in a chain (cmd1 && cmd2) is validated separately to prevent bypassing via chaining
+ * - **Case Insensitive**: All pattern matching is case-insensitive for consistent behavior across different input styles
+ * - **Whitespace Handling**: Commands are trimmed and normalized before matching to prevent whitespace-based bypasses
*
* ## Configuration Merging:
*
@@ -58,15 +58,74 @@ type ShellToken = string | { op: string } | { command: string }
* This allows users to have personal defaults while projects can define specific restrictions.
*/
+/**
+ * Detect subshell usage and command substitution patterns that could be security risks.
+ *
+ * Subshells allow executing commands in isolated environments and can be used to bypass
+ * command validation by hiding dangerous commands inside substitution patterns.
+ *
+ * Detected patterns:
+ * - $() - command substitution: executes command and substitutes output
+ * - `` - backticks (legacy command substitution): same as $() but older syntax
+ * - <() - process substitution (input): creates temporary file descriptor for command output
+ * - >() - process substitution (output): creates temporary file descriptor for command input
+ * - $(()) - arithmetic expansion: evaluates mathematical expressions (can contain commands)
+ * - $[] - arithmetic expansion (alternative syntax): same as $(()) but older syntax
+ * - (cmd1; cmd2) - subshell grouping: executes multiple commands in isolated subshell
+ *
+ * @param source - The command string to analyze for subshell patterns
+ * @returns true if any subshell patterns are detected, false otherwise
+ *
+ * @example
+ * ```typescript
+ * // Command substitution - executes 'date' and substitutes its output
+ * containsSubshell("echo $(date)") // true
+ *
+ * // Backtick substitution - legacy syntax for command substitution
+ * containsSubshell("echo `date`") // true
+ *
+ * // Process substitution - creates file descriptor for command output
+ * containsSubshell("diff <(sort f1)") // true
+ *
+ * // Arithmetic expansion - can contain command execution
+ * containsSubshell("echo $((1+2))") // true
+ * containsSubshell("echo $[1+2]") // true
+ *
+ * // Subshell grouping - executes commands in isolated environment
+ * containsSubshell("(ls; rm file)") // true
+ * containsSubshell("(cd /tmp && rm -rf *)") // true
+ *
+ * // Safe patterns that should NOT be flagged
+ * containsSubshell("func(arg1, arg2)") // false - function call, not subshell
+ * containsSubshell("echo hello") // false - no subshell patterns
+ * containsSubshell("(simple text)") // false - no shell operators in parentheses
+ * ```
+ */
+export function containsSubshell(source: string): boolean {
+ // Check for command substitution, process substitution, and arithmetic expansion patterns
+ // These patterns allow executing commands and substituting their output, which can bypass validation
+ const commandSubstitutionPatterns = /(\$\()|`|(<\(|>\()|(\$\(\()|(\$\[)/.test(source)
+
+ // Check for subshell grouping: parentheses containing shell command operators
+ // Pattern explanation: \( = literal opening paren, [^)]* = any chars except closing paren,
+ // [;&|]+ = one or more shell operators (semicolon, ampersand, pipe), [^)]* = any chars except closing paren, \) = literal closing paren
+ // This detects dangerous patterns like: (cmd1; cmd2), (cmd1 && cmd2), (cmd1 || cmd2), (cmd1 | cmd2), (cmd1 & cmd2)
+ // But avoids false positives like function calls: func(arg1, arg2) - no shell operators inside
+ const subshellGroupingPattern = /\([^)]*[;&|]+[^)]*\)/.test(source)
+
+ // Return true if any subshell pattern is detected
+ return commandSubstitutionPatterns || subshellGroupingPattern
+}
+
/**
* Split a command string into individual sub-commands by
- * chaining operators (&&, ||, ;, or |) and newlines.
+ * chaining operators (&&, ||, ;, |, or &) and newlines.
*
* Uses shell-quote to properly handle:
* - Quoted strings (preserves quotes)
- * - Subshell commands ($(cmd) or `cmd`)
+ * - Subshell commands ($(cmd), `cmd`, <(cmd), >(cmd))
* - PowerShell redirections (2>&1)
- * - Chain operators (&&, ||, ;, |)
+ * - Chain operators (&&, ||, ;, |, &)
* - Newlines as command separators
*/
export function parseCommand(command: string): string[] {
@@ -89,6 +148,36 @@ export function parseCommand(command: string): string[] {
return allCommands
}
+/**
+ * Helper function to restore placeholders in a command string
+ */
+function restorePlaceholders(
+ command: string,
+ quotes: string[],
+ redirections: string[],
+ arrayIndexing: string[],
+ arithmeticExpressions: string[],
+ parameterExpansions: string[],
+ variables: string[],
+ subshells: string[],
+): string {
+ let result = command
+ // Restore quotes
+ result = result.replace(/__QUOTE_(\d+)__/g, (_, i) => quotes[parseInt(i)])
+ // Restore redirections
+ result = result.replace(/__REDIR_(\d+)__/g, (_, i) => redirections[parseInt(i)])
+ // Restore array indexing expressions
+ result = result.replace(/__ARRAY_(\d+)__/g, (_, i) => arrayIndexing[parseInt(i)])
+ // Restore arithmetic expressions
+ result = result.replace(/__ARITH_(\d+)__/g, (_, i) => arithmeticExpressions[parseInt(i)])
+ // Restore parameter expansions
+ result = result.replace(/__PARAM_(\d+)__/g, (_, i) => parameterExpansions[parseInt(i)])
+ // Restore variable references
+ result = result.replace(/__VAR_(\d+)__/g, (_, i) => variables[parseInt(i)])
+ result = result.replace(/__SUBSH_(\d+)__/g, (_, i) => subshells[parseInt(i)])
+ return result
+}
+
/**
* Parse a single line of commands (internal helper function)
*/
@@ -103,7 +192,6 @@ function parseCommandLine(command: string): string[] {
const arithmeticExpressions: string[] = []
const variables: string[] = []
const parameterExpansions: string[] = []
- const processSubstitutions: string[] = []
// First handle PowerShell redirections by temporarily replacing them
let processedCommand = command.replace(/\d*>&\d*/g, (match) => {
@@ -118,6 +206,12 @@ function parseCommandLine(command: string): string[] {
return `__ARITH_${arithmeticExpressions.length - 1}__`
})
+ // Handle $[...] arithmetic expressions (alternative syntax)
+ processedCommand = processedCommand.replace(/\$\[[^\]]*\]/g, (match) => {
+ arithmeticExpressions.push(match)
+ return `__ARITH_${arithmeticExpressions.length - 1}__`
+ })
+
// Handle parameter expansions: ${...} patterns (including array indexing)
// This covers ${var}, ${var:-default}, ${var:+alt}, ${#var}, ${var%pattern}, etc.
processedCommand = processedCommand.replace(/\$\{[^}]+\}/g, (match) => {
@@ -126,9 +220,9 @@ function parseCommandLine(command: string): string[] {
})
// Handle process substitutions: <(...) and >(...)
- processedCommand = processedCommand.replace(/[<>]\([^)]+\)/g, (match) => {
- processSubstitutions.push(match)
- return `__PROCSUB_${processSubstitutions.length - 1}__`
+ processedCommand = processedCommand.replace(/[<>]\(([^)]+)\)/g, (_, inner) => {
+ subshells.push(inner.trim())
+ return `__SUBSH_${subshells.length - 1}__`
})
// Handle simple variable references: $varname pattern
@@ -144,7 +238,7 @@ function parseCommandLine(command: string): string[] {
return `__VAR_${variables.length - 1}__`
})
- // Then handle subshell commands
+ // Then handle subshell commands $() and back-ticks
processedCommand = processedCommand
.replace(/\$\((.*?)\)/g, (_, inner) => {
subshells.push(inner.trim())
@@ -170,29 +264,23 @@ function parseCommandLine(command: string): string[] {
// Simple fallback: split by common operators
const fallbackCommands = processedCommand
- .split(/(?:&&|\|\||;|\|)/)
+ .split(/(?:&&|\|\||;|\||&)/)
.map((cmd) => cmd.trim())
.filter((cmd) => cmd.length > 0)
// Restore all placeholders for each command
- return fallbackCommands.map((cmd) => {
- let result = cmd
- // Restore quotes
- result = result.replace(/__QUOTE_(\d+)__/g, (_, i) => quotes[parseInt(i)])
- // Restore redirections
- result = result.replace(/__REDIR_(\d+)__/g, (_, i) => redirections[parseInt(i)])
- // Restore array indexing expressions
- result = result.replace(/__ARRAY_(\d+)__/g, (_, i) => arrayIndexing[parseInt(i)])
- // Restore arithmetic expressions
- result = result.replace(/__ARITH_(\d+)__/g, (_, i) => arithmeticExpressions[parseInt(i)])
- // Restore parameter expansions
- result = result.replace(/__PARAM_(\d+)__/g, (_, i) => parameterExpansions[parseInt(i)])
- // Restore process substitutions
- result = result.replace(/__PROCSUB_(\d+)__/g, (_, i) => processSubstitutions[parseInt(i)])
- // Restore variable references
- result = result.replace(/__VAR_(\d+)__/g, (_, i) => variables[parseInt(i)])
- return result
- })
+ return fallbackCommands.map((cmd) =>
+ restorePlaceholders(
+ cmd,
+ quotes,
+ redirections,
+ arrayIndexing,
+ arithmeticExpressions,
+ parameterExpansions,
+ variables,
+ subshells,
+ ),
+ )
}
const commands: string[] = []
@@ -201,13 +289,13 @@ function parseCommandLine(command: string): string[] {
for (const token of tokens) {
if (typeof token === "object" && "op" in token) {
// Chain operator - split command
- if (["&&", "||", ";", "|"].includes(token.op)) {
+ if (["&&", "||", ";", "|", "&"].includes(token.op)) {
if (currentCommand.length > 0) {
commands.push(currentCommand.join(" "))
currentCommand = []
}
} else {
- // Other operators (>, &) are part of the command
+ // Other operators (>) are part of the command
currentCommand.push(token.op)
}
} else if (typeof token === "string") {
@@ -231,24 +319,18 @@ function parseCommandLine(command: string): string[] {
}
// Restore quotes and redirections
- return commands.map((cmd) => {
- let result = cmd
- // Restore quotes
- result = result.replace(/__QUOTE_(\d+)__/g, (_, i) => quotes[parseInt(i)])
- // Restore redirections
- result = result.replace(/__REDIR_(\d+)__/g, (_, i) => redirections[parseInt(i)])
- // Restore array indexing expressions
- result = result.replace(/__ARRAY_(\d+)__/g, (_, i) => arrayIndexing[parseInt(i)])
- // Restore arithmetic expressions
- result = result.replace(/__ARITH_(\d+)__/g, (_, i) => arithmeticExpressions[parseInt(i)])
- // Restore parameter expansions
- result = result.replace(/__PARAM_(\d+)__/g, (_, i) => parameterExpansions[parseInt(i)])
- // Restore process substitutions
- result = result.replace(/__PROCSUB_(\d+)__/g, (_, i) => processSubstitutions[parseInt(i)])
- // Restore variable references
- result = result.replace(/__VAR_(\d+)__/g, (_, i) => variables[parseInt(i)])
- return result
- })
+ return commands.map((cmd) =>
+ restorePlaceholders(
+ cmd,
+ quotes,
+ redirections,
+ arrayIndexing,
+ arithmeticExpressions,
+ parameterExpansions,
+ variables,
+ subshells,
+ ),
+ )
}
/**
@@ -390,7 +472,7 @@ export type CommandDecision = "auto_approve" | "auto_deny" | "ask_user"
*
* **Decision Logic:**
* 1. **Subshell Protection**: If subshells ($() or ``) are present and denylist exists → auto-deny
- * 2. **Command Parsing**: Split command chains (&&, ||, ;, |) into individual commands
+ * 2. **Command Parsing**: Split command chains (&&, ||, ;, |, &) into individual commands
* 3. **Individual Validation**: For each sub-command, apply longest prefix match rule
* 4. **Aggregation**: Combine decisions using "any denial blocks all" principle
*
@@ -430,14 +512,6 @@ export function getCommandDecision(
): CommandDecision {
if (!command?.trim()) return "auto_approve"
- // Check if subshells contain denied prefixes
- if ((command.includes("$(") || command.includes("`")) && deniedCommands?.length) {
- const mainCommandLower = command.toLowerCase()
- if (deniedCommands.some((denied) => mainCommandLower.includes(denied.toLowerCase()))) {
- return "auto_deny"
- }
- }
-
// Parse into sub-commands (split by &&, ||, ;, |)
const subCommands = parseCommand(command)
@@ -610,7 +684,7 @@ export class CommandValidator {
hasSubshells: boolean
} {
const subCommands = parseCommand(command)
- const hasSubshells = command.includes("$(") || command.includes("`")
+ const hasSubshells = containsSubshell(command)
const allowedMatches = subCommands.map((cmd) => ({
command: cmd,