From 67d0fdd8356a9dd35f446e56286d078cf4185f54 Mon Sep 17 00:00:00 2001 From: Merge Resolver Date: Fri, 22 Aug 2025 16:50:43 -0600 Subject: [PATCH] feat: Add subtask todo list support and Featherless AI provider - Introduced optional todo list parameter for subtasks to streamline task planning. - Enhanced Vertex AI with grounding features including Google Search and URL context. - Added Featherless AI provider for access to open-source models. - Improved context window error handling with automatic recovery. - Implemented "Show installed only" filter in the marketplace for better management. - Added prompt caching for Kimi K2 on Groq and improved discoverability of global custom instructions. - Updated documentation and release notes for version 3.25.21, 3.25.22, and 3.25.23. --- .../1_main_workflow.xml | 184 ++++++---- .../2_content_standards.xml | 342 ++++++++++++++++++ .../2_formatting_standards.xml | 240 ------------ .../3_pr_analysis.xml | 125 ------- .../3_user_interactions.xml | 276 ++++++++++++++ .../4_special_workflows.xml | 201 ---------- .../5_tool_usage.xml | 163 --------- .../rules-release-notes-writer/6_examples.xml | 259 ------------- .../7_documentation_handling.xml | 169 --------- .../8_user_confirmation_workflow.xml | 207 ----------- .../available-tools/new-task.md | 30 ++ .../intelligent-context-condensing.mdx | 33 ++ docs/features/marketplace.mdx | 6 + docs/features/task-todo-list.mdx | 44 ++- docs/providers/featherless.md | 77 ++++ docs/providers/vertex.md | 132 +++++-- docs/update-notes/index.md | 4 + docs/update-notes/v3.25.21.mdx | 66 ++++ docs/update-notes/v3.25.22.mdx | 20 + docs/update-notes/v3.25.23.mdx | 18 + docs/update-notes/v3.25.mdx | 51 ++- sidebars.ts | 4 + static/img/v3.25.21/v3.25.21.png | Bin 0 -> 31778 bytes 23 files changed, 1180 insertions(+), 1471 deletions(-) create mode 100644 .roo/rules-release-notes-writer/2_content_standards.xml delete mode 100644 .roo/rules-release-notes-writer/2_formatting_standards.xml delete mode 100644 .roo/rules-release-notes-writer/3_pr_analysis.xml create mode 100644 .roo/rules-release-notes-writer/3_user_interactions.xml delete mode 100644 .roo/rules-release-notes-writer/4_special_workflows.xml delete mode 100644 .roo/rules-release-notes-writer/5_tool_usage.xml delete mode 100644 .roo/rules-release-notes-writer/6_examples.xml delete mode 100644 .roo/rules-release-notes-writer/7_documentation_handling.xml delete mode 100644 .roo/rules-release-notes-writer/8_user_confirmation_workflow.xml create mode 100644 docs/providers/featherless.md create mode 100644 docs/update-notes/v3.25.21.mdx create mode 100644 docs/update-notes/v3.25.22.mdx create mode 100644 docs/update-notes/v3.25.23.mdx create mode 100644 static/img/v3.25.21/v3.25.21.png diff --git a/.roo/rules-release-notes-writer/1_main_workflow.xml b/.roo/rules-release-notes-writer/1_main_workflow.xml index 366dc6e3..527a7ecb 100644 --- a/.roo/rules-release-notes-writer/1_main_workflow.xml +++ b/.roo/rules-release-notes-writer/1_main_workflow.xml @@ -1,8 +1,8 @@ Automates creating release notes for new Roo Code versions. Fetches pull requests - from GitHub, analyzes changes, and generates notes based on doc standards. - Also handles Discord formatting, version-only requests, and auto-detection of missing versions. + from GitHub, analyzes changes, generates user-focused notes, and handles Discord + formatting. Supports version-only requests and auto-detection of missing versions. @@ -14,6 +14,10 @@ Discord release notes for X.Y.Z Generate Discord format from existing files + + Combined Discord announcement for X.Y.Z, X.Y.Z, and X.Y.Z + Generate combined Discord format from multiple release files + ^v?[\d.]+$ Extract PR list and ask how to proceed @@ -24,6 +28,23 @@ + + ISO 8601: YYYY-MM-DD + + - YYYY = 4-digit year (e.g., 2025) + - MM = 2-digit MONTH (01-12) - NOT the day! + - DD = 2-digit day (01-31) + + + 2025-07-18 (July 18, 2025) + 2025-01-13 (January 13, 2025) + 2025-18-07 (Invalid - would mean 18th month) + + + When PR list provided directly: Use new Date().toISOString().split('T')[0] + + + @@ -59,21 +80,20 @@ Handle user-provided PR list User provides PR numbers directly - - MUST execute date validation: - - Use new Date().toISOString().split('T')[0] for current date - - Validate format YYYY-MM-DD where MM is month (01-12) - - Common error: Confusing MM-DD order - + Validate date format (MM is month, not day) Fetch PRs from GitHub User provided PR list - - - gh api for release dates - - gh pr list for merged PRs in date range - + + + + @@ -89,46 +109,68 @@ PR in list Create investigation subtask - - Investigate PR #[number] for release notes v[version]. - 1. Get PR details (gh pr view) - 2. Extract linked issues - 3. Get issue details - 4. Categorize change - 5. Identify documentation needs (new features, behavior changes, deprecations) - 6. Append to temp_pr_analysis.md using insert_content line 0 - - Include documentation flags: - - docs-new: Completely new feature - - docs-update: Existing docs need updating - - docs-example: New examples needed - - docs-migration: Breaking changes - - CRITICAL: Never create/overwrite files, only append. - + + + Read and organize PR findings Features, QOL Improvements, Bug Fixes, Provider Updates - QOL Improvements must come before Bug Fixes + QOL Improvements MUST come before Bug Fixes Confirm feature highlighting with user -
See user_confirmation_workflow for detailed process
+ ask_followup_question + Must get explicit confirmation before writing notes
Create release notes file docs/update-notes/vX.Y.Z.mdx - - - Proper documentation links for features - - See documentation_handling for link patterns - @@ -153,39 +195,46 @@ new_task with mode="documentation-writer"
- - - - Cross-reference with changelog if exists -
Compare generated notes with changelog entries
-
- - - User review loop - User approves or cancels - - - Create PR - - Make changes - - Show files - - -
Generate Discord format from existing release files + + - Remove PR links and numbers + - Convert /path to https://docs.roocode.com/path + - Add footer link with markdown format + - Handle compression if requested + - Wrap entire output in markdown code block + + + Title format: # 🚀 Roo Code X.Y.Z Release Notes + Include summary in intro sentence listing key features + Use "Feature Highlights" instead of "Major Features" + Never use the word "powerful" + No version numbers in body text (only header/footer) + No "Happy coding!" or similar closings + Footer: 📚 **Full Release Notes** [vX.Y.Z](link) + + Formatted text wrapped in ```markdown code block (no files created) + + + + Generate combined Discord format from multiple release files - Parse version numbers from request - Verify files exist - Apply Discord transformations: - - Remove PR links - - Convert internal links to full URLs - - Add footer link - - Handle compression if requested - - Output formatted text (no files created) + Read all specified release note files + Merge and deduplicate features across versions + Create unified summary sentence + Apply Discord formatting rules + + Title format: # 🚀 Roo Code X.Y.Z-X.Y.Z Release Updates + Intro sentence summarizes all key features from all versions + Combine similar sections across versions + Footer with links to each version: [vX.Y.Z](link) | [vX.Y.Z](link) + Wrap entire output in ```markdown code block + + Combined formatted text (no files created) @@ -193,12 +242,7 @@ Spawn PR extraction subtask Subtask writes PR list to temp_pr_list.md - Ask user how to proceed: - - Create full release notes - - Show PR list - - Select specific PRs - - Cancel - + Ask user how to proceed @@ -206,10 +250,9 @@ Auto-detect missing versions Find most recent release notes - Read changelog (or GitHub releases) + Read changelog or GitHub releases Identify missing versions Ask which to process - Process selected versions sequentially @@ -227,5 +270,8 @@ Focus on user benefits, not technical implementation + + QOL Improvements section MUST come before Bug Fixes +
\ No newline at end of file diff --git a/.roo/rules-release-notes-writer/2_content_standards.xml b/.roo/rules-release-notes-writer/2_content_standards.xml new file mode 100644 index 00000000..8cc54fdf --- /dev/null +++ b/.roo/rules-release-notes-writer/2_content_standards.xml @@ -0,0 +1,342 @@ + + + Formatting, content standards, and PR analysis patterns for release notes. + Ensures consistent, user-focused documentation in docs/update-notes. + + + + + + vX.Y.Z.mdx + v3.20.3.mdx + + + vX.Y.mdx + v3.20.mdx + Summarizes a release cycle + + + + + + + + + + # Roo Code X.Y.Z Release Notes (YYYY-MM-DD) + + - Include version number + - Include release date in ISO 8601 format + - Date from GitHub tag OR current date if PR list provided + + + + + Below title + This release adds context condensing, improves performance, and fixes UI bugs. + + + + + + + What changed? (Identify core feature) + Why did it change? (Problem solved) + How does this impact users? (Concrete benefits) + + + + + New functionality changing user experience + Own ## heading with expanded description + + + + + UI/UX enhancements, workflow optimizations + Under ## QOL Improvements + MUST come before Bug Fixes section + + + + Resolves issues, fixes errors + Under ## Bug Fixes as bullet points + MUST come after QOL Improvements section + + + + API provider changes + Under ## Provider Updates + + + + + Completely new feature requiring new page + Existing documentation needs updating + New examples or use cases to add + Migration guide needed for breaking changes + + + + + + Major features with details + **📚 Documentation**: See [Feature Guide](/docs/path/to/feature) for detailed usage. + ]]> + + + + Smaller fixes and improvements + + + + + (thanks username!) + (thanks author, reporter!) + + - Omit @ from GitHub usernames + - Place inside parentheses before PR link + - Include both PR author and issue reporter + - List PR author first + + + + + ([#PR_NUMBER](https://github.com/RooCodeInc/Roo-Code/pull/PR_NUMBER)) + + In intro paragraph or bullet points + At end of each bullet point + + + + + + + 1. Major feature sections (each with own heading) + 2. ## QOL Improvements + 3. ## Bug Fixes + 4. ## Misc Improvements + 5. ## Provider Updates + 6. ## Documentation Updates + + QOL Improvements MUST always come before Bug Fixes + + + + docs/update-notes/index.md + [X.Y.Z](/update-notes/vX.Y.Z) (YYYY-MM-DD) + + - List chronologically, newest first + - Use absolute paths from /docs/ + - Omit .md extension + - Include release date in ISO 8601 format + + + + + sidebars.ts + 'update-notes/vX.Y.Z' + + - Add to "Update Notes" category + - Use Docusaurus ID format + - Maintain chronological order + + + + + Integrate patch releases into parent minor/major file + + - Add changes to corresponding existing sections + - Maintain consistent formatting and section order + - Append new items to end of respective sections + - Consolidate duplicate fixes across patches + - Update summary sentence if significant features added + + + + + User benefits, not implementation details + Present tense ("adds" not "added") + + RefactoredImproved + ImplementedAdded + Optimized algorithmMade faster + Fixed race conditionFixed timing issue + + + + + + [Feature Name](/docs/path/to/feature) + **📚 Documentation**: See [Feature Guide](/docs/path) for detailed usage instructions. + ]]> + **🔄 Migration Guide**: If upgrading from v[OLD], see our [migration guide](/docs/migration/vX-to-vY). + ]]> + + + - Modes: /docs/features/modes/[mode-slug] + - Tools: /docs/advanced-usage/available-tools#[tool-name] + - MCP: /docs/features/mcp/ + - Providers: /docs/providers/ + + + - Use absolute paths from /docs/ root + - No .md extensions in links + - All major features must have documentation links + + + + + - "Summary" or "Highlights" sections + - Version numbers in docs outside update-notes + - Temporal references like "as of version X.Y.Z" + - Marketing language or buzzwords + - Generic headings like "## Changes" or "## Updates" + + + + + Special formatting rules for Discord announcements to ensure readability + and engagement in chat format. + + + + + ```markdown ... ``` + Entire announcement wrapped in markdown code block + + + + # 🚀 Roo Code X.Y.Z Release Notes + # 🚀 Roo Code X.Y.Z-X.Y.Z Release Updates + + - Always include rocket emoji + - Use "Release Notes" for single version + - Use "Release Updates" for combined versions + + + + + We've shipped [updates/an update] with [feature summary]! + + - Must summarize key features + - No marketing language ("powerful", "revolutionary") + - Be specific about what's included + + + We've shipped an update with subtask todo lists, Vertex AI grounding, and performance improvements! + We've shipped three updates with subtask todo lists, Vertex AI grounding features, Kimi K2 prompt caching, and the new Featherless provider! + + + + + + 1. ## ✨ Feature Highlights (not "Major Features") + 2. ## 🎯 Provider Updates + 3. ## 💪 QOL Improvements + 4. ## 🐛 Bug Fixes + 5. ## 🔧 Additional Improvements + + + - Use emojis for section headers + - "Feature Highlights" instead of "Major Features" + - Keep descriptions concise for chat readability + + + + + When user requests compression or content is too long + User says "compress" or "condense" + + + - Replace all sections below "Feature Highlights" with single paragraph + - Count actual number of improvements (not estimate) + - List specific contributor names from the releases + - Use "Other Improvements and Fixes" as section title + - Include all contributor acknowledgments in one place + + + + + + 📚 **Full Release Notes** [vX.Y.Z](https://docs.roocode.com/update-notes/vX.Y.Z) + 📚 **Full Release Notes** [vX.Y.Z](link) | [vX.Y.Z](link) | [vX.Y.Z](link) + + - Use book emoji + - Bold "Full Release Notes" + - Markdown link format with version as link text + - Pipe separator for multiple versions + + + + + + No version numbers in body text (only header/footer) + Never use the word "powerful" or similar marketing terms + Remove all PR numbers and links + Keep contributor thanks but remove PR references + No closing phrases like "Happy coding!" + Use bullet points (•) instead of asterisks (*) + Group minor items if over 2000 characters + + + + ([#PR](link)) + (remove entirely) + + /docs/path/to/feature + https://docs.roocode.com/path/to/feature + + ## Major Features + ## ✨ Feature Highlights + + Happy coding! 🦘 + (remove entirely) + + + \ No newline at end of file diff --git a/.roo/rules-release-notes-writer/2_formatting_standards.xml b/.roo/rules-release-notes-writer/2_formatting_standards.xml deleted file mode 100644 index f5cd646f..00000000 --- a/.roo/rules-release-notes-writer/2_formatting_standards.xml +++ /dev/null @@ -1,240 +0,0 @@ - - - Formatting and content standards for release notes in docs/update-notes. - Ensures consistent and clear release documentation. - - - - - vX.Y.Z.mdx - v3.20.3.mdx - Full version for patch releases. - - - - vX.Y.mdx - v3.20.mdx - Major.minor version to summarize a release cycle. - - - - - - All release notes must include frontmatter with a description, keywords, and a social share image. The title is generated automatically from the first H1 heading. - - - - - - # Roo Code X.Y.Z Release Notes (YYYY-MM-DD) - - Include version number. - Include release date in ISO 8601 format: YYYY-MM-DD. - Date must be the actual release date from GitHub tag OR current date if PR list provided. - CRITICAL: Month comes before day (MM-DD not DD-MM). Example: 2025-07-18 is July 18th. - - - - When PR list is provided directly (not fetched from GitHub), the mode MUST: - 1. Execute the "determine_release_date" phase - 2. Use new Date().toISOString().split('T')[0] to get current date - 3. Validate that the month is 01-12 before using the date - - - ISO 8601 format: YYYY-MM-DD where: - - YYYY = 4-digit year (e.g., 2025) - - MM = 2-digit MONTH (01-12) - NOT the day! - - DD = 2-digit day (01-31) - - - - 2025-07-18 (July 18, 2025) - 2025-01-13 (January 13, 2025) - 2025-18-07 (Invalid - would mean 18th month) - 2025-13-01 (Invalid - would mean 13th month) - - - - - Below title. - One sentence summarizing key changes. - This release adds context condensing, improves performance, and fixes UI bugs. - - - - - Major features with details. - **📚 Documentation**: See [Feature Guide](/docs/path/to/feature) for detailed usage instructions. - ]]> - - Include documentation link for all major features - Use absolute paths from /docs/ root - No .md extensions in links - - - - - Smaller fixes and improvements. - - - - - - - - Major feature names (e.g., "## Context Condensing is Now Default") - ## QOL Improvements - ## Bug Fixes - ## Misc Improvements - ## Provider Updates - ## Documentation Updates - - - CRITICAL: QOL Improvements must always come before Bug Fixes - - - - ## Changes - ## Updates - ## Highlights - Generic; do not use. - - - - - (thanks username!) - - (thanks username1, username2!) - For multiple contributors (PR author + issue reporter). - - - Omit @ from GitHub usernames. - Place inside parentheses before PR link. - Include both PR author and issue reporter. - List PR author first. - Separate usernames with commas. - - - - PR author only - (thanks john-doe!) - - - PR author + issue reporter - (thanks john-doe, jane-smith!) - - - - - - ([#PR_NUMBER](https://github.com/RooCodeInc/Roo-Code/pull/PR_NUMBER)) - - In intro paragraph or bullet points. - At end of each bullet point. - - - - - docs/update-notes/index.md - [X.Y.Z](/update-notes/vX.Y.Z) (YYYY-MM-DD) - - List chronologically, newest first. - Use absolute paths from /docs/. - Omit .md extension. - Include release date in ISO 8601 format (YYYY-MM-DD). - CRITICAL: Verify date format - month before day. - - - - - sidebars.ts - 'update-notes/vX.Y.Z' - - Add to "Update Notes" category. - Use Docusaurus ID format. - Maintain chronological order. - - - - - When creating patch releases, intelligently integrate changes into the parent minor/major file. - - Add changes to their corresponding existing sections (Bug Fixes to Bug Fixes, etc.) - Do not include patch version numbers or PR links in combined notes - Maintain consistent formatting and section order - Append new items to the end of their respective sections - Consolidate duplicate fixes across patches - Update summary sentence if significant features were added - - - Read and parse existing combined notes structure - Map new changes to appropriate sections - Strip PR references from new items - Use apply_diff to insert items at the end of each section - - - - - - User-focused - Focus on benefits, not implementation. - - - - Clear and concise - Use plain language, no jargon. - - - - Present tense - Write "adds" not "added". - - - - Documentation links - Link to relevant docs for all major features. - - - - Consistent formatting - Follow established patterns. - - - - Accurate - Verify statements against changes. - - - - - "Summary" or "Highlights" sections. - Version numbers in docs outside update-notes. - Temporal references like "as of version X.Y.Z". - Marketing language or buzzwords. - - \ No newline at end of file diff --git a/.roo/rules-release-notes-writer/3_pr_analysis.xml b/.roo/rules-release-notes-writer/3_pr_analysis.xml deleted file mode 100644 index f997256f..00000000 --- a/.roo/rules-release-notes-writer/3_pr_analysis.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - Patterns for analyzing PRs and converting technical changes into user-focused release notes. - - - - - What changed? - Identify the core feature affected - - - Why did it change? - Understand the problem solved (check linked issues for bug fixes) - - - How does this impact users? - State concrete benefits in plain language - - - - - - New functionality changing user experience - Own ## heading with expanded description - Usually requires docs-new or docs-update - - - UI/UX enhancements, workflow optimizations - Under ## QOL Improvements - MUST come before Bug Fixes section - - - Resolves issues, fixes errors - Under ## Bug Fixes as bullet points - MUST come after QOL Improvements section - - - API provider changes - Under ## Provider Updates - - - - - - - - - - - - - Always include PR author (from gh pr view) - Include issue reporter if PR fixes an issue - Format: (thanks author, reporter!) - No @ symbols in usernames - - - - Technical jargon, implementation details - User benefits, plain language, concrete improvements - - RefactoredImproved - ImplementedAdded - Optimized algorithmMade faster - Fixed race conditionFixed timing issue - - - - - Format for PR investigation findings - - Append to temp_pr_analysis.md using insert_content line 0 - - - - - - adds, implements, introduces, new - New files in src/, new commands, new tools - - - - changes, updates, modifies, improves - Modified tool behavior, changed defaults - - - - removes, deprecates, deletes - Deleted features, removed commands - - - - - \ No newline at end of file diff --git a/.roo/rules-release-notes-writer/3_user_interactions.xml b/.roo/rules-release-notes-writer/3_user_interactions.xml new file mode 100644 index 00000000..e5f1261e --- /dev/null +++ b/.roo/rules-release-notes-writer/3_user_interactions.xml @@ -0,0 +1,276 @@ + + + User confirmation workflows and interaction patterns for obtaining approval + at critical points to prevent repeated edits and ensure accuracy. + + + + + After PR analysis, before writing release notes + Verify which features to highlight + + + + + After creating patch notes, before updating combined notes + Ensure patch notes are final before propagating + NEVER update combined notes until explicit confirmation + + + + + After identifying documentation flags + Confirm documentation update requirements + + + + + After all updates complete + Final confirmation before PR creation + + + + + + User provides only version number + + Extract PR list via subtask + Present options to user + + + + + + User says "latest" + + Detect missing versions from changelog + Present found versions + + + + + + Each adjustment triggers new confirmation cycle + + User requests change + Apply specific change only + Show result of change + Ask for confirmation before proceeding + + + Reorder sections + Change feature emphasis (expanded vs grouped) + Edit descriptions or benefits + Add missing items + + + + + Discord release notes for X.Y.Z + + Generate Discord format for one version + Combine multiple versions + Compress minor items if over 2000 chars or on request + + + User says "compress", "condense", or content exceeds 2000 chars + + Keep Feature Highlights section intact + Count all improvements below Feature Highlights + Replace all sections with single "Other Improvements and Fixes" paragraph + Include contributor acknowledgments in compressed section + + + Verify actual count of improvements (not estimate) + Ensure all contributors are acknowledged + Maintain markdown code block wrapper + + + + + + + Combined Discord announcement for multiple versions + + Identify all versions to combine + Read release notes for each version + Merge and format according to Discord rules + Present formatted output in markdown code block + + + Title uses version range (X.Y.Z-X.Y.Z) + Intro sentence summarizes all versions + Features merged and deduplicated + No version numbers in body text + Footer has links to each version + Entire output wrapped in ```markdown block + No "Happy coding!" or similar closings + "Feature Highlights" not "Major Features" + + + + + + + Never assume approval - require explicit confirmation + + + For patch releases, always confirm before updating combined notes + + + Show concrete examples in confirmation questions + + + Provide clear options covering common scenarios + + + Order suggestions by likelihood or importance + + + Keep confirmation cycles focused on specific decisions + + + Track confirmation state to avoid re-asking + + + + + + Release notes file doesn't exist for Discord format + + + The release notes for v[VERSION] don't exist yet. Would you like to: + + Create the release notes first + Process a different version + Cancel the Discord format request + + + + + + + No PRs found in date range + + + No PRs found for the specified date range. This might mean: + + Try a wider date range + Check if the version tag exists + Manually provide PR numbers + Cancel and investigate + + + + + + \ No newline at end of file diff --git a/.roo/rules-release-notes-writer/4_special_workflows.xml b/.roo/rules-release-notes-writer/4_special_workflows.xml deleted file mode 100644 index f1db8335..00000000 --- a/.roo/rules-release-notes-writer/4_special_workflows.xml +++ /dev/null @@ -1,201 +0,0 @@ - - - Specialized workflows for Discord formatting, version-only requests, and auto-detection of missing versions. - - - - - Discord release notes for X.Y.Z - Discord announcement for X.Y.Z, A.B.C - Generate Discord format for vX.Y.Z - - - - - Parse version numbers -
Support single or multiple versions, with or without 'v' prefix
-
- - - Verify release files exist - - If missing, offer to: - - Process existing versions only - - Create missing release notes first - - Cancel request - - - - - Apply Discord transformations - - Remove all PR links and numbers (#XXXX) - Convert /path to https://docs.roocode.com/path - Preserve structure and contributor acknowledgments - Add footer: [Full X.Y.Z Release Notes](link) - - - - - - - - Handle multiple versions - - - - - - - - - Output formatted text - No files created, only display for copying - Alert if exceeds Discord's 2000 character limit - -
-
- - - - ^v?[\d.]+$ - 3.23.14, v3.23.14 - - - - - Spawn PR extraction subtask - - Extract PRs for version [VERSION]. - 1. Find previous version - 2. Get date range from tags - 3. Search merged PRs - 4. Write to temp_pr_list.md - - - - - Read PR list and present options - - Create full release notes with all PRs - Show me the PR list first - Let me specify which PRs to include - Cancel - I just needed the PR list - - - - - Process based on user choice - - Full notes: Continue standard workflow - Show list: Display and ask again - Select PRs: Accept list and filter - Cancel: Complete without creating notes - - - - - - - - latest - create release notes for latest - - - - - Find most recent release notes - list_files in docs/update-notes - Highest version number - - - - Locate and parse changelog - - CHANGELOG.md - changelog.md - docs/CHANGELOG.md - - - Ask user for location or use GitHub releases - - - - - Identify missing versions - - Compare changelog versions with existing release notes - Filter to versions newer than last documented - - - - - Confirm with user - - All missing versions ([list]) - Just the most recent version - Let me select specific versions - Show changelog entries first - - - - - Process selected versions - Oldest to newest - - For patch releases: Get confirmation before updating combined notes - - - - - - - Extract PRs for version X.Y.Z - - Parse version, find previous version - Get date range: gh api for tag dates - Search PRs: gh pr list --search "merged:DATE1..DATE2" - Format and write to temp_pr_list.md - Report completion - - - - - - After generating notes, before PR creation - - Check if changelog has entry for version - Compare items (in changelog but not notes, vice versa) - Present analysis with "No changes needed" as first option - Apply user's choice if changes requested - - - - - - All workflows must integrate user confirmation at key points - - - After PR analysis, before writing notes - After patch notes creation, before combined update - After identifying documentation needs - Before creating final PR - - - Never proceed to next phase without explicit user confirmation - - -
\ No newline at end of file diff --git a/.roo/rules-release-notes-writer/5_tool_usage.xml b/.roo/rules-release-notes-writer/5_tool_usage.xml deleted file mode 100644 index 8e359489..00000000 --- a/.roo/rules-release-notes-writer/5_tool_usage.xml +++ /dev/null @@ -1,163 +0,0 @@ - - - Essential tool usage patterns for the release notes workflow. - - - - - list_files - Find previous versions, check file existence - - - execute_command (gh cli) - Fetch GitHub data (tags, PRs, issues) - - - new_task - Create subtasks for PR investigation and documentation updates - - - ask_followup_question - Confirm features and get user approval at key points - - - write_to_file / apply_diff - Create and update documentation - - - - - - Get release date for a version tag - - - - - Find merged PRs in date range - - - - - Get PR details including linked issues - - - - - Get issue reporter for acknowledgment - - - - - - - new_task with mode="release-notes-writer" - - - - - After release notes completion, if doc flags exist - - - - - When user requests Discord format - - - - - - - write_to_file - docs/update-notes/vX.Y.Z.mdx - Frontmatter, title with date, content sections - - - - apply_diff - docs/update-notes/index.md - Add new version to chronological list - - - - apply_diff - sidebars.ts - Add 'update-notes/vX.Y.Z' to Update Notes section - - - - apply_diff - docs/update-notes/vX.Y.mdx - Merge patch changes into minor/major release file - User must confirm patch notes are final - - - Strip PR links - - Add to existing sections - - Maintain chronological order - - QOL Improvements before Bug Fixes - - - - - - - Parent creates temp files with write_to_file - Subtasks append with insert_content line 0 - Never use write_to_file in subtasks for temp files - - - - Create comprehensive todo at workflow start - Update after each major phase - Mark complete only when verified - - - \ No newline at end of file diff --git a/.roo/rules-release-notes-writer/6_examples.xml b/.roo/rules-release-notes-writer/6_examples.xml deleted file mode 100644 index c3ef7287..00000000 --- a/.roo/rules-release-notes-writer/6_examples.xml +++ /dev/null @@ -1,259 +0,0 @@ - - - Essential examples demonstrating the main workflow patterns. - - - - Create release notes for version 3.20.3 - - 1. Find previous version (3.20.2) - 2. Get release dates from GitHub tags - 3. Search for merged PRs between dates - 4. Create subtasks to investigate each PR (including doc needs) - 5. Ask user which features to highlight - 6. Compile findings into release notes (QOL before Bugs) - 7. For patch: Get user confirmation before updating combined notes - 8. Update all documentation files - 9. Create documentation update task if needed - 10. Ask user to review and create PR - - - - Includes documentation identification - - User confirmation at key points - - QOL Improvements before Bug Fixes - - Documentation task creation - - - - - 3.23.15 -PRs: #1234, #1235, #1236 - - 1. Detect PR list provided - 2. Skip GitHub date range search - 3. Use current date (CRITICAL: YYYY-MM-DD format) - 4. Process provided PRs directly - 5. Continue with standard workflow - - - - Bypasses PR discovery phase - - Must validate date format - - Common error: Wrong month/day order - - - - - Discord release notes for 3.23.14 - - 1. Detect Discord-only pattern - 2. Check if v3.23.14.mdx exists - 3. Read file and apply transformations - 4. Output formatted text (no files created) - - - - Remove: ([#1234](link)) → (empty) - - Convert: [text](/path) → [text](https://docs.roocode.com/path) - - Add: Footer with full release notes link - - - - - Combine Discord release notes for 3.23.14 and 3.23.15 - - 1. Parse multiple versions - 2. Process each version - 3. Detect "combine" keyword - 4. Merge by category with version tags - 5. Output unified announcement - - - ## Bug Fixes - * **File Handling**: Fixed errors (v3.23.14) (thanks user1!) - * **API Calls**: Added retry logic (v3.23.15) (thanks user2!) - - - - - 3.23.14 - - 1. Detect version-only pattern - 2. Spawn PR extraction subtask - 3. Subtask fetches PR list - 4. Ask user how to proceed - 5. Based on choice: - - Create full notes - - Show PR list - - Select specific PRs - - Cancel - - - - - latest - - 1. Find last documented: v3.23.14 - 2. Read CHANGELOG.md - 3. Find missing: 3.23.15, 3.23.16 - 4. Ask which to process - 5. Create notes for selected versions - - - - No changelog → Check GitHub releases - - No new versions → "Up to date!" - - - - - Investigate PR #1234 for release notes v3.20.3 - - 1. Get PR details: gh pr view 1234 - 2. Find linked issue: "Fixes #987" - 3. Get issue details: gh issue view 987 - 4. Categorize: Bug Fix - 5. Analyze documentation needs - 6. Write to temp_pr_analysis.md: - - - - - - Investigate PR #1235 for release notes v3.20.3 - - - - - After PR analysis, before writing notes - -I've analyzed all PRs for v3.20.3. Here are the changes I found: - -**Major Features:** -- MCP Server Support: Enables custom MCP server integration -- Fast Edit Mode: New editing mode for quick changes - -**Bug Fixes:** 5 fixes -- Context condensing errors with large files -- Terminal output streaming issues -- File path resolution on Windows - -**QOL Improvements:** 3 improvements -- Improved error messages for API failures -- Added keyboard shortcuts for common actions -- Better progress indicators during long operations - -**Other Changes:** 2 items - -Which features should I highlight with expanded sections in the release notes? - -Highlight all major features as listed above -Focus on MCP Server Support and Fast Edit Mode -Keep all changes in grouped sections (no expanded features) -Let me specify which features to expand - - - ]]> - - - - After creating patch notes, before updating combined - -I've created the release notes for v3.20.3. The file includes: - -- 5 bug fixes -- 3 QOL improvements -- 2 other changes - -Would you like to: -1. Review the release notes before I update the combined v3.20 notes? -2. Make any adjustments to the content or ordering? -3. Proceed with updating all documentation files? - -Show me the release notes file for review -The content looks good, proceed with all updates -Let me make some adjustments first -Change the emphasis on certain features - - - ]]> - - - - After completing release notes with doc needs - -documentation-writer - -Update documentation for Roo Code v3.20.3 release. - -Based on the release notes, the following documentation updates are needed: - -### New Documentation Required -- **MCP Server Support**: Custom MCP server integration (docs-new) - - Suggested location: /docs/features/mcp/custom-servers - - Key points to cover: Setup, configuration, examples - -### Updates to Existing Documentation -- **Fast Edit Mode**: Update editing modes documentation (docs-update) - - Current location: /docs/features/modes - - Changes needed: Add fast edit mode section - -### Examples to Add -- **MCP Server Examples**: Integration examples (docs-example) - - Target page: /docs/features/mcp/custom-servers - - Use case: Common server configurations - -Release notes reference: /update-notes/v3.20.3 - -Please: -1. Review each flagged item -2. Create or update the appropriate documentation pages -3. Add examples where indicated -4. Ensure all new features are properly documented -5. Update any changed behaviors or deprecated features -6. Add cross-references between related documentation - - - ]]> - - - - Updating v3.20.mdx with v3.20.3 changes - - 1. Read existing v3.20.mdx - 2. Parse new changes from v3.20.3.mdx - 3. Strip PR links from new items - 4. Add to appropriate sections - 5. Use apply_diff to update - - - - Append to existing sections - - No PR numbers in combined notes - - Maintain section order - - - \ No newline at end of file diff --git a/.roo/rules-release-notes-writer/7_documentation_handling.xml b/.roo/rules-release-notes-writer/7_documentation_handling.xml deleted file mode 100644 index 5d24273c..00000000 --- a/.roo/rules-release-notes-writer/7_documentation_handling.xml +++ /dev/null @@ -1,169 +0,0 @@ - - - Guidelines for identifying changes that require documentation updates and - coordinating with the documentation-writer mode to ensure comprehensive coverage. - - - - - - During PR analysis, identify changes that may require documentation updates - - - - - New commands or tools added - New configuration options - New modes or capabilities - New API endpoints or integrations - - Flag as "Requires Documentation" - - - - - Changed default settings - Modified workflow patterns - Updated command syntax - Altered tool behavior - - Flag as "Documentation Update Needed" - - - - - Removed features - Deprecated commands - Legacy mode removal - - Flag as "Documentation Removal/Update" - - - - - - - - - - - - - - - - Collect all documentation-flagged items - - - - - Create documentation task after release notes completion - new_task - - - - - - - - All major features in release notes should link to their documentation - - - - - [Feature Name](/docs/path/to/feature) - Within feature descriptions - - - - **📚 Documentation**: See [Feature Guide](/docs/path) for detailed usage instructions. - ]]> - After feature description - - - - **🔄 Migration Guide**: If upgrading from v[OLD], see our [migration guide](/docs/migration/vX-to-vY). - ]]> - For breaking changes - - - - - - When mentioning a mode, link to /docs/features/modes/[mode-slug] - - - When mentioning a tool, link to /docs/advanced-usage/available-tools#[tool-name] - - - When mentioning MCP servers, link to /docs/features/mcp/ - - - When mentioning providers, link to /docs/providers/ - - - - - - - All new features have documentation links - Breaking changes include migration guides - Examples reference documentation for details - Documentation task created with all flagged items - Links use absolute paths from /docs/ root - No .md extensions in links - - - \ No newline at end of file diff --git a/.roo/rules-release-notes-writer/8_user_confirmation_workflow.xml b/.roo/rules-release-notes-writer/8_user_confirmation_workflow.xml deleted file mode 100644 index 10665874..00000000 --- a/.roo/rules-release-notes-writer/8_user_confirmation_workflow.xml +++ /dev/null @@ -1,207 +0,0 @@ - - - Workflow for obtaining user confirmation at critical points, especially for - patch releases and feature highlighting, to prevent repeated edits. - - - - - After PR analysis is complete, before writing release notes - Verify which features to highlight and their priority - - - Analyze all PRs and categorize changes - Comprehensive list of all changes by category - - - - Present findings and ask for feature priorities - ask_followup_question - - - - - Continue asking until clear confirmation - User provides explicit feature selection - - - - - - After creating patch release notes, before updating combined notes - Ensure patch notes are finalized before propagating changes - - - Complete patch release notes file - docs/update-notes/vX.Y.Z.mdx - - - - Present for review - ask_followup_question - - - - - Handle review feedback - - - - - - - - - Repeat confirmation after each adjustment - - NEVER update combined notes until user explicitly confirms - the patch release notes are final - - - - - - - Only after patch notes are confirmed final - Prevent repeated edits to both patch and combined files - - - Read confirmed patch notes - - - - Update combined vX.Y.mdx file - - Strip PR numbers and links - Merge into existing sections - Maintain chronological order - - - - - Update all indexes and sidebars - - - - Final confirmation - - - - - - - - - Each adjustment request triggers a new confirmation cycle - - - - User requests change - Apply specific change only - Show result of change - Ask for confirmation before proceeding - Only move to next phase after explicit approval - - - - - Move sections without changing content - - - Convert between expanded and grouped format - - - Modify feature descriptions or benefits - - - Include additional PR or feature - - - - - - - Never assume approval - require explicit confirmation - - - Show concrete examples in confirmation questions - - - Provide clear options that cover common scenarios - - - Keep confirmation cycles focused on specific decisions - - - Track confirmation state to avoid re-asking - - - \ No newline at end of file diff --git a/docs/advanced-usage/available-tools/new-task.md b/docs/advanced-usage/available-tools/new-task.md index dd4ff01c..c49a3bae 100644 --- a/docs/advanced-usage/available-tools/new-task.md +++ b/docs/advanced-usage/available-tools/new-task.md @@ -25,6 +25,7 @@ The tool accepts these parameters: - `mode` (required): The slug of the mode to start the new task in (e.g., "code", "ask", "architect") - `message` (required): The initial user message or instructions for this new task +- `todos` (optional): Initial todo list in markdown checklist format --- @@ -98,6 +99,20 @@ When the `new_task` tool is invoked, it follows this process: --- +## Configuration + +Streamline hierarchical task planning with the optional todo list parameter for subtasks: + +- **Pass Todo Lists**: Include predefined todo lists when creating subtasks +- **Maintain Context**: Pass along context to the subtask in the form of a todo list +- **Optional Enforcement**: The "New Task Require Todos" setting in VS Code can enforce todo lists for all new subtasks if desired + +Subtask todo lists configuration in VS Code settings + +This feature works out of the box, and you can optionally configure VS Code settings to require todos for all new tasks. + +--- + ## Examples When Used - When a front-end developer needs to architect a new feature, implement the code, and document it, they can create separate tasks for each phase with results flowing from one phase to the next. @@ -132,3 +147,18 @@ Breaking down a complex feature into architectural planning and implementation: Design the database schema and system architecture for our new e-commerce platform. ``` + +Creating a task with an initial todo list: +``` + +code +Build a REST API for user management + +[ ] Set up Express server +[ ] Create user model +[ ] Implement CRUD endpoints +[ ] Add authentication middleware +[ ] Write API tests + + +``` diff --git a/docs/features/intelligent-context-condensing.mdx b/docs/features/intelligent-context-condensing.mdx index ddd5e6e8..003bc5bf 100644 --- a/docs/features/intelligent-context-condensing.mdx +++ b/docs/features/intelligent-context-condensing.mdx @@ -119,6 +119,33 @@ This customization ensures that the context condensing process retains the infor --- +## Automatic Error Recovery + +When Roo Code encounters context window limit errors, it now automatically recovers to keep your work flowing: + +### How Error Recovery Works + +1. **Error Detection**: Roo Code detects context window errors from multiple providers (OpenAI, Anthropic, Cerebras, and others) +2. **Automatic Truncation**: The system automatically reduces the context by 25% +3. **Retry Mechanism**: After truncation, Roo Code retries your request (up to 3 attempts) +4. **Seamless Continuation**: Your work continues without manual intervention + +This automatic recovery ensures that: +- You don't lose work due to context limit errors +- Long conversations can continue smoothly +- The system intelligently manages context without requiring manual restarts + +### When Recovery Triggers + +The automatic recovery activates when: +- The API returns a context window exceeded error +- The conversation approaches the maximum token limit +- Multiple providers report similar context-related errors + +This feature works alongside Intelligent Context Condensing to provide multiple layers of context management, ensuring your conversations can continue even in challenging scenarios. + +--- + ## Technical Implementation ### Token Counting @@ -135,3 +162,9 @@ Roo Code uses a sophisticated token counting system that: - This reservation can be overridden by model-specific settings - The system automatically calculates available space while maintaining this reservation +### Error Handling Strategy +- **Multi-Provider Support**: Recognizes context errors from OpenAI, Anthropic, Cerebras, and other providers +- **Progressive Reduction**: Reduces context by 25% on each retry attempt +- **Retry Limits**: Maximum of 3 automatic retry attempts before requiring manual intervention +- **State Preservation**: Maintains conversation state during recovery attempts + diff --git a/docs/features/marketplace.mdx b/docs/features/marketplace.mdx index b01395cd..14822ea7 100644 --- a/docs/features/marketplace.mdx +++ b/docs/features/marketplace.mdx @@ -97,6 +97,12 @@ You can browse all available items in the marketplace view. To find specific ite - **Search**: Use the search bar to find items by name or description. - **Filter by Type**: Show only MCPs or only Modes. - **Filter by Tags**: Find items related to specific technologies or tasks. +- **Show Installed Only**: Use the "Installed" checkbox to filter the view to show only items you've already installed, making it easier to manage and review your installed extensions. + +The "Show installed only" filter is particularly useful when: +- You want to quickly see what MCPs or modes you have installed +- You need to manage or remove installed items +- You're reviewing your project or global configurations ### Installing an Item diff --git a/docs/features/task-todo-list.mdx b/docs/features/task-todo-list.mdx index 221045ea..4c502308 100644 --- a/docs/features/task-todo-list.mdx +++ b/docs/features/task-todo-list.mdx @@ -73,26 +73,54 @@ Todo lists appear in multiple places: 2. **Interactive Tool Block**: An interface within the chat via the `UpdateTodoListToolBlock` component that allows you to: - View all todo items with their current status - - Edit item descriptions when Roo presents updates for approval - - Stage changes using the "Edit" button (applied only when Roo next updates the list) + - Click the "Edit" button to enter edit mode where you can: + - Modify task descriptions directly + - Change task status using dropdown selectors + - Delete tasks with the × button + - Add new tasks with the "+ Add Todo" button + - Stage changes that are applied when Roo next updates the list - View the progression as Roo manages the todo workflow Interactive todo list tool block in chat 3. **Environment Details**: Todo lists appear as a "REMINDERS" table in the environment_details section, giving the AI persistent access to current todo state. Note: If the `todoListEnabled` setting is disabled, the reminders section will not appear in environment details. +### Expanded Todo View + +When you click on the collapsed todo summary in the task header, a floating panel appears with enhanced functionality: +- **Backdrop overlay**: Click outside the panel to close it +- **Full todo list display**: Shows all todos with their current status indicators +- **Auto-scroll**: Automatically scrolls to the current in-progress task +- **Smooth animations**: Collapse and expand transitions for better user experience +- **Persistent state**: Maintains your scroll position when reopening + ### Understanding Task Status Roo Code automatically manages status progression based on task progress. Each todo item has one of three states: -**Pending**: Shows an empty checkbox, indicating the task hasn't been started yet -![Pending todo item with empty checkbox](../../static/img/task-todo-list/task-todo-list-4.png) +**Pending**: Shows an empty circle with a border, indicating the task hasn't been started yet +![Pending todo item with empty circle](../../static/img/task-todo-list/task-todo-list-4.png) + +**In Progress**: Displays a filled yellow circle, showing the task is currently being worked on +![In progress todo item with yellow circle](../../static/img/task-todo-list/task-todo-list-5.png) + +**Completed**: Features a filled green circle, confirming the task is fully finished +![Completed todo item with green circle](../../static/img/task-todo-list/task-todo-list-6.png) + +### Editing Todo Lists During Approval + +When Roo presents a todo list update for approval, you have full control through the Edit mode: -**In Progress**: Displays a yellow dot indicator, showing the task is currently being worked on -![In progress todo item with yellow dot indicator](../../static/img/task-todo-list/task-todo-list-5.png) +1. **Click "Edit"** to enter edit mode +2. **Make your changes**: + - Edit task descriptions inline + - Change status using the dropdown menu (Pending/In Progress/Completed) + - Remove tasks with the × button + - Add new tasks with the "+ Add Todo" button at the bottom +3. **Save or Cancel** your changes +4. **Approve or Reject** the overall update -**Completed**: Features a green checkmark, confirming the task is fully finished -![Completed todo item with green checkmark](../../static/img/task-todo-list/task-todo-list-6.png) +Note: Your edits are staged and only applied when Roo processes the next todo list update. This maintains Roo's control over the workflow while giving you input on task details. --- diff --git a/docs/providers/featherless.md b/docs/providers/featherless.md new file mode 100644 index 00000000..9f1a1eb0 --- /dev/null +++ b/docs/providers/featherless.md @@ -0,0 +1,77 @@ +--- +sidebar_label: Featherless AI +description: Configure Featherless AI's open-source models in Roo Code. Access free DeepSeek, Qwen, and other high-performance models through an OpenAI-compatible API. +keywords: + - featherless + - featherless ai + - roo code + - api provider + - deepseek + - qwen + - free models + - open source ai + - reasoning models + - kimi k2 +image: /img/social-share.jpg +--- + +# Using Featherless AI With Roo Code + +Featherless AI provides access to high-performance open-source models including DeepSeek, Qwen, and other large language models. All models are currently free to use, making it an excellent choice for budget-conscious developers. + +**Website:** [https://featherless.ai](https://featherless.ai) + +--- + +## Getting an API Key + +1. **Sign Up/Sign In:** Go to [Featherless AI](https://featherless.ai). Create an account or sign in. +2. **Navigate to API Keys:** Access the [API keys page](https://featherless.ai/account/api-keys) in your account. +3. **Create a Key:** Generate a new API key. Give it a descriptive name (e.g., "Roo Code"). +4. **Copy the Key:** **Important:** Copy the API key immediately. It will only be shown once. Store it securely. + +--- + +## Supported Models + +Roo Code supports the following Featherless models: + +* `deepseek-ai/DeepSeek-R1-0528` (Default) - DeepSeek R1 reasoning model with `` tag support +* `deepseek-ai/DeepSeek-V3-0324` - DeepSeek V3 model +* `moonshotai/Kimi-K2-Instruct` - Kimi K2 instruction-following model +* `openai/gpt-oss-120b` - GPT-OSS 120B parameter model +* `Qwen/Qwen3-Coder-480B-A35B-Instruct` - Qwen3 specialized coding model + +### Model Capabilities + +All models support: +- **Context Window:** ~32,678 tokens +- **Max Output:** 4,096 tokens +- **Pricing:** Free (no cost for input/output tokens) + +:::info +**DeepSeek R1 Models:** The DeepSeek R1 models (like `DeepSeek-R1-0528`) include special reasoning capabilities with `` tag support for step-by-step problem solving. These models automatically separate reasoning from regular output. +::: + +--- + +## Configuration in Roo Code + +1. **Open Roo Code Settings:** Click the gear icon () in the Roo Code panel. +2. **Select Provider:** Choose "Featherless AI" from the "API Provider" dropdown. +3. **Enter API Key:** Paste your Featherless API key into the "Featherless API Key" field. +4. **Select Model:** Choose your desired model from the "Model" dropdown. + +--- + +## Tips and Notes + +* **Free Tier:** All models are currently free with no usage costs, making Featherless ideal for experimentation and development. +* **Model Selection:** Choose models based on your needs: + - **DeepSeek R1 models:** Best for complex reasoning and problem-solving tasks + - **DeepSeek V3:** General-purpose model for various tasks + - **Qwen3 Coder:** Optimized for code generation and programming tasks + - **Kimi K2:** Balanced instruction-following model + - **GPT-OSS:** Large general-purpose model +* **OpenAI Compatibility:** Featherless uses an OpenAI-compatible API format for easy integration. +* **Limitations:** No image support or prompt caching available on any model. \ No newline at end of file diff --git a/docs/providers/vertex.md b/docs/providers/vertex.md index ecb5bd1a..e48abd81 100644 --- a/docs/providers/vertex.md +++ b/docs/providers/vertex.md @@ -36,28 +36,53 @@ Roo Code supports accessing models through Google Cloud Platform's Vertex AI, a ## Supported Models -Roo Code supports the following models through Vertex AI (based on source code): - -* **Google Gemini Models:** - * `gemini-2.5-flash-preview-05-20` - * `gemini-2.0-flash-001` - * `gemini-2.5-pro-exp-03-25` - * `gemini-2.0-pro-exp-02-05` - * `gemini-2.0-flash-lite-001` - * `gemini-2.0-flash-thinking-exp-01-21` - * `gemini-1.5-flash-002` - * `gemini-1.5-pro-002` -* **Anthropic Claude Models:** - * `claude-opus-4-1@20250805` - * `claude-opus-4@20250514` - * `claude-sonnet-4@20250514` - * `claude-3-7-sonnet@20250219:thinking` - * `claude-3-7-sonnet@20250219` - * `claude-3-5-sonnet-v2@20241022` - * `claude-3-5-sonnet@20240620` - * `claude-3-5-haiku@20241022` - * `claude-3-opus@20240229` - * `claude-3-haiku@20240307` +Roo Code supports the following models through Vertex AI: + +### Default Model +If no model is specified, Roo Code defaults to `claude-sonnet-4@20250514`. + +### Google Gemini Models + +#### Standard Models +* `gemini-2.5-flash` - Production version with prompt caching support +* `gemini-2.5-flash-preview-05-20` - Preview with 1M context window +* `gemini-2.5-flash-preview-04-17` - Preview without caching +* `gemini-2.5-flash-lite-preview-06-17` - Lite version with lower pricing +* `gemini-2.5-pro` - Production version with reasoning support +* `gemini-2.5-pro-preview-03-25` - Pro preview version +* `gemini-2.5-pro-preview-05-06` - Pro preview version +* `gemini-2.5-pro-preview-06-05` - Pro preview with reasoning support +* `gemini-2.5-pro-exp-03-25` - Experimental version (free) +* `gemini-2.0-flash-001` - 2.0 Flash model +* `gemini-2.0-flash-lite-001` - 2.0 Flash lite version +* `gemini-2.0-flash-thinking-exp-01-21` - Thinking/reasoning model +* `gemini-2.0-pro-exp-02-05` - 2.0 Pro experimental +* `gemini-1.5-flash-002` - 1.5 Flash model +* `gemini-1.5-pro-002` - 1.5 Pro model + +#### Thinking/Reasoning Models +These models support enhanced reasoning capabilities with the `:thinking` suffix: +* `gemini-2.5-flash-preview-05-20:thinking` +* `gemini-2.5-flash-preview-04-17:thinking` + +:::info +**Thinking Models:** Models with `:thinking` suffix enable step-by-step reasoning. The suffix is stripped before sending to the API but enables reasoning features in Roo Code. You'll need to enable the reasoning budget in settings to use these models effectively. +::: + +### Anthropic Claude Models +* `claude-opus-4-1@20250805` +* `claude-opus-4@20250514` +* `claude-sonnet-4@20250514` (Default) +* `claude-3-7-sonnet@20250219` +* `claude-3-7-sonnet@20250219:thinking` - With reasoning support +* `claude-3-5-sonnet-v2@20241022` +* `claude-3-5-sonnet@20240620` +* `claude-3-5-haiku@20241022` +* `claude-3-opus@20240229` +* `claude-3-haiku@20240307` + +### Other Models +* `llama-4-maverick-17b-128e-instruct-maas` - Meta Llama 4 model with 128K context window Refer to the [Google Cloud documentation on Vertex AI Models](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models) for the most up-to-date list of available models and their IDs. @@ -68,16 +93,67 @@ Refer to the [Google Cloud documentation on Vertex AI Models](https://cloud.goog 1. **Open Roo Code Settings:** Click the gear icon () in the Roo Code panel. 2. **Select Provider:** Choose "GCP Vertex AI" from the "API Provider" dropdown. 3. **Configure Authentication:** - * **If using Application Default Credentials (ADC):** No further action is needed here. ADC will be used automatically if configured correctly (see Prerequisites). - * **If *not* using ADC (Service Account Key):** - * **Option A: Paste JSON Content:** Paste the entire content of your Service Account JSON key file into the **Google Cloud Credentials** field. - * **Option B: Provide File Path:** Enter the absolute path to your downloaded Service Account JSON key file in the **Google Cloud Key File Path** field. + + Roo Code uses the following authentication priority: + 1. **Google Cloud Credentials (JSON):** If provided, this takes precedence + 2. **Google Cloud Key File Path:** If provided and no JSON credentials, this is used + 3. **Application Default Credentials (ADC):** Used as fallback when neither above is provided + + **Option 1 - Using ADC (Simplest):** + * Install the Google Cloud CLI and run `gcloud auth application-default login` + * No further configuration needed in Roo Code + + **Option 2 - Using Service Account Key:** + * Either paste the JSON content directly into **Google Cloud Credentials** field + * Or provide the file path in **Google Cloud Key File Path** field + 4. **Enter Project ID:** Enter your Google Cloud Project ID. 5. **Select Region:** Choose the region where your Vertex AI resources are located (e.g., `us-east5`). 6. **Select Model:** Choose your desired model from the "Model" dropdown. + +--- + +## Advanced Features + +### Gemini-Specific Features + +When using Gemini models through Vertex AI, additional grounding features become available: + +#### URL Context + +Enable URL context to allow Gemini models to access and analyze web content directly. This feature allows Roo to: + +- Read and understand web pages in real-time +- Analyze documentation from URLs +- Review online code repositories +- Access current information from websites + +**Enabling URL Context:** +1. Select a Gemini model in your Vertex AI configuration +2. Enable the "URL Context" option that appears +3. Save your settings + +#### Google Search Grounding + +Enable Google Search grounding to enhance Gemini's responses with real-time search results. This provides: + +- Up-to-date information from web searches +- Fact-checking capabilities +- Current event awareness +- Enhanced accuracy for technical queries + +**Enabling Search Grounding:** +1. Select a Gemini model in your Vertex AI configuration +2. Enable the "Google Search Grounding" option that appears +3. Save your settings + +:::note +URL Context and Google Search Grounding options only appear when a Gemini model is selected. These features may incur additional costs. +::: + --- ## Tips and Notes -* **Permissions:** Ensure your Google Cloud account has the necessary permissions to access Vertex AI and the specific models you want to use. -* **Pricing:** Refer to the [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing) page for details. +* **Permissions:** Ensure your Google Cloud account has the necessary permissions to access Vertex AI and the specific models you want to use. +* **Pricing:** Refer to the [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing) page for details. \ No newline at end of file diff --git a/docs/update-notes/index.md b/docs/update-notes/index.md index f8b7c94a..52a8f683 100644 --- a/docs/update-notes/index.md +++ b/docs/update-notes/index.md @@ -19,6 +19,10 @@ This section contains notes about recent updates to Roo Code, listed by version ## Version 3.25 +* [3.25](/update-notes/v3.25) (Combined) +* [3.25.23](/update-notes/v3.25.23) (2025-08-22) +* [3.25.22](/update-notes/v3.25.22) (2025-08-22) +* [3.25.21](/update-notes/v3.25.21) (2025-01-22) * [3.25.20](/update-notes/v3.25.20) (2025-08-20) * [3.25.19](/update-notes/v3.25.19) (2025-08-19) * [3.25.18](/update-notes/v3.25.18) (2025-08-19) diff --git a/docs/update-notes/v3.25.21.mdx b/docs/update-notes/v3.25.21.mdx new file mode 100644 index 00000000..5c7fad00 --- /dev/null +++ b/docs/update-notes/v3.25.21.mdx @@ -0,0 +1,66 @@ +--- +description: Vertex AI grounding features, subtask todo lists, and the new Featherless provider. +keywords: + - roo code 3.25.21 + - vertex ai grounding + - subtask todos + - featherless provider +image: /img/social-share.jpg +--- + +# Roo Code 3.25.21 Release Notes (2025-01-22) + +This release enables grounding features for Vertex AI, adds subtask todo list support, and includes the new Featherless provider. + +## Subtask Todo Lists + +Streamline hierarchical task planning with the new optional todo list parameter for subtasks ([#6775](https://github.com/RooCodeInc/Roo-Code/pull/6775)): + +- **Pass Todo Lists**: Include predefined todo lists when creating subtasks +- **Maintain Context**: Pass along context to the subtask in the form of a todo list +- **Optional Enforcement**: The "New Task Require Todos" setting in VS Code can enforce todo lists for all new subtasks if desired + +Subtask todo lists configuration in VS Code settings + +This feature works out of the box, and you can optionally configure VS Code settings to require todos for all new tasks. + +> **📚 Documentation**: See [Task Todo List](/features/task-todo-list) for detailed information about todo list management. + +## Vertex AI Grounding Features + +Vertex AI users can now access powerful grounding capabilities previously exclusive to the Gemini provider (thanks anguslees!) ([#6777](https://github.com/RooCodeInc/Roo-Code/pull/6777)): + +- **Google Search Grounding**: Get real-time information from web searches directly in your AI responses +- **URL Context**: Provide specific web pages as context for more accurate, up-to-date responses +- **Enhanced Accuracy**: Combine AI capabilities with current web information for better results + +These features bring Vertex AI to feature parity with Gemini for grounding capabilities. + +> **📚 Documentation**: See [Vertex AI Provider](/providers/vertex) for configuration details. + +## Provider Updates + +* **Featherless Provider**: Access a wide range of open-source models through the new Featherless AI platform (thanks DarinVerheijke!) ([#7235](https://github.com/RooCodeInc/Roo-Code/pull/7235)) + +## QOL Improvements + +* **Context Window Error Handling**: Improved error detection and automatic recovery when hitting context limits - the system now detects errors from multiple providers (OpenAI, Anthropic, Cerebras) and automatically truncates context by 25% before retrying (up to 3 attempts) ([#6967](https://github.com/RooCodeInc/Roo-Code/pull/6967)) +* **Marketplace Filter**: New "Show installed only" checkbox to easily view and manage your installed MCPs and modes (thanks semidark!) ([#7007](https://github.com/RooCodeInc/Roo-Code/pull/7007)) +* **DeepSeek Context**: Updated DeepSeek models to support 128k context window ([#7269](https://github.com/RooCodeInc/Roo-Code/pull/7269)) + +## Bug Fixes + +* **OpenAI Responses**: Fixed GPT-5 subtask results not being provided correctly in OpenAI Responses API ([#7305](https://github.com/RooCodeInc/Roo-Code/pull/7305)) +* **Temperature Handling**: Fixed temperature parameter issues for OpenAI Compatible providers ([#7188](https://github.com/RooCodeInc/Roo-Code/pull/7188)) +* **Provider Validation**: Added 'roo' provider to key validation function ([#7239](https://github.com/RooCodeInc/Roo-Code/pull/7239)) +* **UI Stability**: Fixed context condense UI crash when handling null/undefined token values ([#6916](https://github.com/RooCodeInc/Roo-Code/pull/6916)) +* **Storage Checks**: Improved filesystem checks for better storage handling (thanks elianiva!) ([#7164](https://github.com/RooCodeInc/Roo-Code/pull/7164)) + +## Misc Improvements + +* **MDM Authentication**: Clear feedback when authentication is required by your organization's MDM policy ([#7291](https://github.com/RooCodeInc/Roo-Code/pull/7291)) +* **Security Updates**: Updated mermaid dependency to v11.10.0 ([#7231](https://github.com/RooCodeInc/Roo-Code/pull/7231)) and tmp dependency to v0.2.4 ([#6762](https://github.com/RooCodeInc/Roo-Code/pull/6762)) +* **Task Tracking**: Pass task ID in Roo provider request headers ([#7303](https://github.com/RooCodeInc/Roo-Code/pull/7303)) +* **Error Handling**: Removed exceptions from RooHandler constructor ([#7302](https://github.com/RooCodeInc/Roo-Code/pull/7302)) +* **Cloud Services**: Various internal improvements for cloud services ([#7299](https://github.com/RooCodeInc/Roo-Code/pull/7299), [#7258](https://github.com/RooCodeInc/Roo-Code/pull/7258)) +* **Build Optimization**: Marked non-English package files as linguist-generated ([#7271](https://github.com/RooCodeInc/Roo-Code/pull/7271)) \ No newline at end of file diff --git a/docs/update-notes/v3.25.22.mdx b/docs/update-notes/v3.25.22.mdx new file mode 100644 index 00000000..4c3a9194 --- /dev/null +++ b/docs/update-notes/v3.25.22.mdx @@ -0,0 +1,20 @@ +--- +description: Adds prompt caching for Kimi K2 on Groq and improves discoverability of global custom instructions. +keywords: + - roo code 3.25.22 + - kimi k2 groq caching + - global custom instructions +image: /img/social-share.jpg +--- + +# Roo Code 3.25.22 Release Notes (2025-08-22) + +This release adds prompt caching support for Kimi K2 on Groq and improves the discoverability of global custom instructions. + +## Features + +* **Prompt Caching for Kimi K2 on Groq**: Added support for prompt caching with the Kimi K2 model on Groq, providing a 50% discount on cached input tokens for improved cost efficiency ([#7324](https://github.com/RooCodeInc/Roo-Code/pull/7324)) + +## QOL Improvements + +* **Global Custom Instructions Documentation**: Added helpful documentation links in the UI to make global custom instructions more discoverable and easier to understand ([#7114](https://github.com/RooCodeInc/Roo-Code/pull/7114)) \ No newline at end of file diff --git a/docs/update-notes/v3.25.23.mdx b/docs/update-notes/v3.25.23.mdx new file mode 100644 index 00000000..36879f2d --- /dev/null +++ b/docs/update-notes/v3.25.23.mdx @@ -0,0 +1,18 @@ +--- +description: This release adds custom base URL support for Requesty and DeepSeek V3.1 model to Chutes AI. +keywords: + - roo code 3.25.23 + - requesty provider + - deepseek v3.1 + - chutes ai +image: /img/social-share.jpg +--- + +# Roo Code 3.25.23 Release Notes (2025-08-22) + +This release adds custom base URL support for Requesty and DeepSeek V3.1 model to Chutes AI. + +## Provider Updates + +* **Requesty Provider**: Added support for custom base URLs, allowing you to connect to self-hosted or alternative Requesty endpoints ([#7337](https://github.com/RooCodeInc/Roo-Code/pull/7337)) +* **Chutes AI**: Added DeepSeek V3.1 model support, expanding the available model options for Chutes AI users ([#7295](https://github.com/RooCodeInc/Roo-Code/pull/7295)) \ No newline at end of file diff --git a/docs/update-notes/v3.25.mdx b/docs/update-notes/v3.25.mdx index 56198eb3..03db0247 100644 --- a/docs/update-notes/v3.25.mdx +++ b/docs/update-notes/v3.25.mdx @@ -1,5 +1,5 @@ --- -description: Roo Code 3.25 introduces Sonic stealth model with 262K context, custom slash commands, Gemini web tools, image support, message queueing, Cerebras AI provider, cost limits, and many quality-of-life improvements. +description: Roo Code 3.25 introduces Sonic stealth model with 262K context, custom slash commands, Gemini web tools, image support, message queueing, Cerebras AI provider, cost limits, Vertex AI grounding, subtask todo lists, and many quality-of-life improvements. keywords: - roo code 3.25 - sonic model @@ -9,12 +9,40 @@ keywords: - message queueing - cerebras provider - cost limits + - vertex ai grounding + - subtask todos image: /img/social-share.jpg --- # Roo Code 3.25 Release Notes -This release brings powerful new capabilities to Roo Code, including the Sonic stealth model with 262,144-token context and 72-hour free access, custom slash commands for workflow automation, enhanced Gemini models with web access, comprehensive image support, seamless message queueing for uninterrupted conversations, the new Cerebras AI provider, and auto-approved cost limits for budget control. +This release brings powerful new capabilities to Roo Code, including the Sonic stealth model with 262,144-token context and 72-hour free access, custom slash commands for workflow automation, enhanced Gemini models with web access, comprehensive image support, seamless message queueing for uninterrupted conversations, the new Cerebras AI provider, auto-approved cost limits for budget control, Vertex AI grounding features, and subtask todo list support. + +### Vertex AI Grounding Features + +Vertex AI users can now access powerful grounding capabilities previously exclusive to the Gemini provider (thanks anguslees!) ([#6777](https://github.com/RooCodeInc/Roo-Code/pull/6777)): + +- **Google Search Grounding**: Get real-time information from web searches directly in your AI responses +- **URL Context**: Provide specific web pages as context for more accurate, up-to-date responses +- **Enhanced Accuracy**: Combine AI capabilities with current web information for better results + +These features bring Vertex AI to feature parity with Gemini for grounding capabilities. + +> **📚 Documentation**: See [Vertex AI Provider](/providers/vertex) for configuration details. + +### Subtask Todo Lists + +Streamline hierarchical task planning with the new optional todo list parameter for subtasks ([#6775](https://github.com/RooCodeInc/Roo-Code/pull/6775)): + +- **Pass Todo Lists**: Include predefined todo lists when creating subtasks +- **Maintain Context**: Pass along context to the subtask in the form of a todo list +- **Optional Enforcement**: The "New Task Require Todos" setting in VS Code can enforce todo lists for all new subtasks if desired + +Subtask todo lists configuration in VS Code settings + +This feature works out of the box, and you can optionally configure VS Code settings to require todos for all new tasks. + +> **📚 Documentation**: See [Task Todo List](/features/task-todo-list) for detailed information about todo list management. ### Custom Slash Commands @@ -97,6 +125,11 @@ This feature provides peace of mind when using expensive models or running long Small changes that make a big difference in your daily workflow: +* **Prompt Caching for Kimi K2 on Groq**: Added support for prompt caching with the Kimi K2 model on Groq, providing a 50% discount on cached input tokens for improved cost efficiency ([#7324](https://github.com/RooCodeInc/Roo-Code/pull/7324)) +* **Global Custom Instructions Documentation**: Added helpful documentation links in the UI to make global custom instructions more discoverable and easier to understand ([#7114](https://github.com/RooCodeInc/Roo-Code/pull/7114)) +* **Context Window Error Handling**: Improved error detection and automatic recovery when hitting context limits - the system now detects errors from multiple providers (OpenAI, Anthropic, Cerebras) and automatically truncates context by 25% before retrying (up to 3 attempts) ([#6967](https://github.com/RooCodeInc/Roo-Code/pull/6967)) +* **Marketplace Filter**: New "Show installed only" checkbox to easily view and manage your installed MCPs and modes (thanks semidark!) ([#7007](https://github.com/RooCodeInc/Roo-Code/pull/7007)) +* **DeepSeek Context**: Updated DeepSeek models to support 128k context window ([#7269](https://github.com/RooCodeInc/Roo-Code/pull/7269)) * **Sonnet 1M Context Support**: Enable 1M token context window for Claude 3.5 Sonnet and Claude Sonnet 4 when using AWS Bedrock, allowing you to process much larger documents and have longer conversations ([#7032](https://github.com/RooCodeInc/Roo-Code/pull/7032)) * **Internationalization**: The Account button now displays in your selected language instead of always showing in English (thanks zhangtony239!) ([#6978](https://github.com/RooCodeInc/Roo-Code/pull/6978)) * **Agent File Flexibility**: Roo Code now recognizes both AGENT.md and AGENTS.md files for agent rules, with AGENTS.md checked first for compatibility (thanks Brendan-Z!) ([#6913](https://github.com/RooCodeInc/Roo-Code/pull/6913)) @@ -143,6 +176,11 @@ Small changes that make a big difference in your daily workflow: Critical fixes that improve stability and compatibility: +* **OpenAI Responses**: Fixed GPT-5 subtask results not being provided correctly in OpenAI Responses API ([#7305](https://github.com/RooCodeInc/Roo-Code/pull/7305)) +* **Temperature Handling**: Fixed temperature parameter issues for OpenAI Compatible providers ([#7188](https://github.com/RooCodeInc/Roo-Code/pull/7188)) +* **Provider Validation**: Added 'roo' provider to key validation function ([#7239](https://github.com/RooCodeInc/Roo-Code/pull/7239)) +* **UI Stability**: Fixed context condense UI crash when handling null/undefined token values ([#6916](https://github.com/RooCodeInc/Roo-Code/pull/6916)) +* **Storage Checks**: Improved filesystem checks for better storage handling (thanks elianiva!) ([#7164](https://github.com/RooCodeInc/Roo-Code/pull/7164)) * **Scrollbar Jumping**: Fixed the frustrating scrollbar jumping issue in long conversations over 500 messages (thanks shlgug, adambrand!) ([#7064](https://github.com/RooCodeInc/Roo-Code/pull/7064)) * **Multi-Folder Workspaces**: Fixed workspace path handling and "file not found" errors in multi-folder VS Code workspaces (thanks NaccOll!) ([#6903](https://github.com/RooCodeInc/Roo-Code/pull/6903), [#6902](https://github.com/RooCodeInc/Roo-Code/pull/6902)) * **Task Execution Stability**: Improved stability during long-running tasks, helping with the "grey screen" issue (thanks catrielmuller, MuriloFP!) ([#7035](https://github.com/RooCodeInc/Roo-Code/pull/7035)) @@ -202,6 +240,9 @@ Critical fixes that improve stability and compatibility: ### Provider Updates +* **Requesty Provider**: Added support for custom base URLs, allowing you to connect to self-hosted or alternative Requesty endpoints ([#7337](https://github.com/RooCodeInc/Roo-Code/pull/7337)) +* **Chutes AI**: Added DeepSeek V3.1 model support, expanding the available model options for Chutes AI users ([#7295](https://github.com/RooCodeInc/Roo-Code/pull/7295)) +* **Featherless Provider**: Access a wide range of open-source models through the new Featherless AI platform (thanks DarinVerheijke!) ([#7235](https://github.com/RooCodeInc/Roo-Code/pull/7235)) * **Sonic Model Integration**: Added support for the Sonic stealth model through Roo Code Cloud provider ([#7207](https://github.com/RooCodeInc/Roo-Code/pull/7207), [#7212](https://github.com/RooCodeInc/Roo-Code/pull/7212), [#7218](https://github.com/RooCodeInc/Roo-Code/pull/7218)): - 262,144-token context window for processing large documents and codebases - Free 72-hour access period for evaluation @@ -237,6 +278,12 @@ Critical fixes that improve stability and compatibility: ### Misc. Improvements +* **MDM Authentication**: Clear feedback when authentication is required by your organization's MDM policy ([#7291](https://github.com/RooCodeInc/Roo-Code/pull/7291)) +* **Security Updates**: Updated mermaid dependency to v11.10.0 ([#7231](https://github.com/RooCodeInc/Roo-Code/pull/7231)) and tmp dependency to v0.2.4 ([#6762](https://github.com/RooCodeInc/Roo-Code/pull/6762)) +* **Task Tracking**: Pass task ID in Roo provider request headers ([#7303](https://github.com/RooCodeInc/Roo-Code/pull/7303)) +* **Error Handling**: Removed exceptions from RooHandler constructor ([#7302](https://github.com/RooCodeInc/Roo-Code/pull/7302)) +* **Cloud Services**: Various internal improvements for cloud services ([#7299](https://github.com/RooCodeInc/Roo-Code/pull/7299), [#7258](https://github.com/RooCodeInc/Roo-Code/pull/7258)) +* **Build Optimization**: Marked non-English package files as linguist-generated ([#7271](https://github.com/RooCodeInc/Roo-Code/pull/7271)) * **Cloud Integration**: Reverted to using the npm package version of @roo-code/cloud for improved build stability and maintenance ([#6795](https://github.com/RooCodeInc/Roo-Code/pull/6795)) * **Slash Command Interpolation**: Skip interpolation for non-existent commands ([#6475](https://github.com/RooCodeInc/Roo-Code/pull/6475)) * **Linter Coverage**: Applied to locale README files (thanks liwilliam2021!) ([#6477](https://github.com/RooCodeInc/Roo-Code/pull/6477)) diff --git a/sidebars.ts b/sidebars.ts index bab00c3e..963c4f46 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -161,6 +161,7 @@ const sidebars: SidebarsConfig = { 'providers/cerebras', 'providers/deepseek', 'providers/doubao', + 'providers/featherless', 'providers/fireworks', 'providers/chutes', 'providers/gemini', @@ -213,6 +214,9 @@ const sidebars: SidebarsConfig = { label: '3.25', items: [ { type: 'doc', id: 'update-notes/v3.25', label: '3.25 Combined' }, + { type: 'doc', id: 'update-notes/v3.25.23', label: '3.25.23' }, + { type: 'doc', id: 'update-notes/v3.25.22', label: '3.25.22' }, + { type: 'doc', id: 'update-notes/v3.25.21', label: '3.25.21' }, { type: 'doc', id: 'update-notes/v3.25.20', label: '3.25.20' }, { type: 'doc', id: 'update-notes/v3.25.19', label: '3.25.19' }, { type: 'doc', id: 'update-notes/v3.25.18', label: '3.25.18' }, diff --git a/static/img/v3.25.21/v3.25.21.png b/static/img/v3.25.21/v3.25.21.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4b43e8810ff9cac08ef5287b16657493c94cb8 GIT binary patch literal 31778 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 literal 0 HcmV?d00001