diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 7e140ec08cc..489533de694 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -64,7 +64,7 @@ body: attributes: value: | --- - Optional (for contributors): You can stop here if you're just proposing the improvement. + Optional: You can stop here if you're just proposing the improvement. - type: textarea id: acceptance-criteria diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index e83e44cd66d..00000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,75 +0,0 @@ - - -### Related GitHub Issue - - - -Closes: # - -### Roo Code Task Context (Optional) - - - -### Description - - - -### Test Procedure - - - -### Pre-Submission Checklist - - - -- [ ] **Issue Linked**: This PR is linked to an approved GitHub Issue (see "Related GitHub Issue" above). -- [ ] **Scope**: My changes are focused on the linked issue (one major feature/fix per PR). -- [ ] **Self-Review**: I have performed a thorough self-review of my code. -- [ ] **Testing**: New and/or updated tests have been added to cover my changes (if applicable). -- [ ] **Documentation Impact**: I have considered if my changes require documentation updates (see "Documentation Updates" section below). -- [ ] **Contribution Guidelines**: I have read and agree to the [Contributor Guidelines](/CONTRIBUTING.md). - -### Screenshots / Videos - - - -### Documentation Updates - - - -### Additional Notes - - - -### Get in Touch - - diff --git a/.github/workflows/update-contributors.yml b/.github/workflows/update-contributors.yml deleted file mode 100644 index 5709bdc10a0..00000000000 --- a/.github/workflows/update-contributors.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: Update Contributors # Refresh contrib.rocks image cache - -on: - workflow_dispatch: - -permissions: - contents: write - pull-requests: write - -jobs: - refresh-contrib-cache: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Bump cacheBust in all README files - run: | - set -euo pipefail - TS="$(date +%s)" - # Target only the root README.md and localized READMEs under locales/*/README.md - mapfile -t FILES < <(git ls-files README.md 'locales/*/README.md' || true) - - if [ "${#FILES[@]}" -eq 0 ]; then - echo "No target README files found." >&2 - exit 1 - fi - - UPDATED=0 - for f in "${FILES[@]}"; do - if grep -q 'cacheBust=' "$f"; then - # Use portable sed in GNU environment of ubuntu-latest - sed -i -E "s/cacheBust=[0-9]+/cacheBust=${TS}/g" "$f" - echo "Updated cacheBust in $f" - UPDATED=1 - else - echo "Warning: cacheBust parameter not found in $f" >&2 - fi - done - - if [ "$UPDATED" -eq 0 ]; then - echo "No files were updated. Ensure READMEs embed contrib.rocks with cacheBust param." >&2 - exit 1 - fi - - - name: Detect changes - id: changes - run: | - if git diff --quiet; then - echo "changed=false" >> $GITHUB_OUTPUT - else - echo "changed=true" >> $GITHUB_OUTPUT - fi - - - name: Create Pull Request - if: steps.changes.outputs.changed == 'true' - uses: peter-evans/create-pull-request@v7 - with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: "docs: update contributors list [skip ci]" - committer: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>" - branch: refresh-contrib-cache - delete-branch: true - title: "Refresh contrib.rocks image cache (all READMEs)" - body: | - Automated refresh of the contrib.rocks image cache by bumping the cacheBust parameter in README.md and locales/*/README.md. - base: main diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b25d32598a..06432ae25d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1274,7 +1274,6 @@ - Reposition Add Image button inside ChatTextArea (thanks @roomote!) - Bring back a way to temporarily and globally pause auto-approve without losing your toggle state (thanks @brunobergher!) - Makes text area buttons appear only when there's text (thanks @brunobergher!) -- CONTRIBUTING.md tweaks and issue template rewrite (thanks @hannesrudolph!) - Bump axios from 1.9.0 to 1.12.0 (thanks @dependabot!) ## [3.28.2] - 2025-09-14 @@ -1734,7 +1733,6 @@ - Fix Claude model detection by name for API protocol selection (thanks @daniel-lxs!) - Move marketplace icon from overflow menu to top navigation - Optional setting to prevent completion with open todos -- Added YouTube to website footer (thanks @thill2323!) ## [3.23.14] - 2025-07-17 @@ -2128,7 +2126,6 @@ - Fix bug with context condensing in Amazon Bedrock - Fix UTF-8 encoding in ExecaTerminalProcess (thanks @mr-ryan-james!) - Set sidebar name bugfix (thanks @chrarnoldus!) -- Fix link to CONTRIBUTING.md in feature request template (thanks @cannuri!) - Add task metadata to Unbound and improve caching logic (thanks @pugazhendhi-m!) ## [3.19.0] - 2025-05-29 @@ -3096,7 +3093,6 @@ - Ask and Architect modes can now edit markdown files - Custom modes can now be restricted to specific file patterns (for example, a technical writer who can only edit markdown files 👋) - Support for configuring the Bedrock provider with AWS Profiles -- New Roo Code community Discord at https://roocode.com/discord! ## [3.2.8] @@ -3136,8 +3132,6 @@ - Create specialized assistants for any workflow - Just type "Create a new mode for " or visit the Prompts tab in the top menu to get started -Join us at https://www.reddit.com/r/RooCode to share your custom modes and be part of our next chapter! - ## [3.1.7] - DeepSeek-R1 support (thanks @philipnext!) @@ -3185,12 +3179,8 @@ Join us at https://www.reddit.com/r/RooCode to share your custom modes and be pa ## [3.0.1] -- Fix the reddit link and a small visual glitch in the chat input - ## [3.0.0] -- This release adds chat modes! Now you can ask Roo Code questions about system architecture or the codebase without immediately jumping into writing code. You can even assign different API configuration profiles to each mode if you prefer to use different models for thinking vs coding. Would love feedback in the new Roo Code Reddit! https://www.reddit.com/r/RooCode - ## [2.2.46] - Only parse @-mentions in user input (not in files) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 328bb5c1b2e..00000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,90 +0,0 @@ -
- - -English • [Català](locales/ca/CODE_OF_CONDUCT.md) • [Deutsch](locales/de/CODE_OF_CONDUCT.md) • [Español](locales/es/CODE_OF_CONDUCT.md) • [Français](locales/fr/CODE_OF_CONDUCT.md) • [हिंदी](locales/hi/CODE_OF_CONDUCT.md) • [Bahasa Indonesia](locales/id/CODE_OF_CONDUCT.md) • [Italiano](locales/it/CODE_OF_CONDUCT.md) • [日本語](locales/ja/CODE_OF_CONDUCT.md) - - - - -[한국어](locales/ko/CODE_OF_CONDUCT.md) • [Nederlands](locales/nl/CODE_OF_CONDUCT.md) • [Polski](locales/pl/CODE_OF_CONDUCT.md) • [Português (BR)](locales/pt-BR/CODE_OF_CONDUCT.md) • [Русский](locales/ru/CODE_OF_CONDUCT.md) • [Türkçe](locales/tr/CODE_OF_CONDUCT.md) • [Tiếng Việt](locales/vi/CODE_OF_CONDUCT.md) • [简体中文](locales/zh-CN/CODE_OF_CONDUCT.md) • [繁體中文](locales/zh-TW/CODE_OF_CONDUCT.md) - - -
- -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to make participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual attention or - advances -- Trolling, insulting/derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or electronic - address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at support@roocode.com. All complaints -will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from [Cline's version][cline_coc] of the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 869b59a16da..00000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,141 +0,0 @@ -
- - -English • [Català](locales/ca/CONTRIBUTING.md) • [Deutsch](locales/de/CONTRIBUTING.md) • [Español](locales/es/CONTRIBUTING.md) • [Français](locales/fr/CONTRIBUTING.md) • [हिंदी](locales/hi/CONTRIBUTING.md) • [Bahasa Indonesia](locales/id/CONTRIBUTING.md) • [Italiano](locales/it/CONTRIBUTING.md) • [日本語](locales/ja/CONTRIBUTING.md) - - - - -[한국어](locales/ko/CONTRIBUTING.md) • [Nederlands](locales/nl/CONTRIBUTING.md) • [Polski](locales/pl/CONTRIBUTING.md) • [Português (BR)](locales/pt-BR/CONTRIBUTING.md) • [Русский](locales/ru/CONTRIBUTING.md) • [Türkçe](locales/tr/CONTRIBUTING.md) • [Tiếng Việt](locales/vi/CONTRIBUTING.md) • [简体中文](locales/zh-CN/CONTRIBUTING.md) • [繁體中文](locales/zh-TW/CONTRIBUTING.md) - - -
- -# Contributing to Roo Code - -Roo Code is a community-driven project, and we deeply value every contribution. To streamline collaboration, we operate on an [Issue-First](#issue-first-approach) basis, meaning all [Pull Requests (PRs)](#submitting-a-pull-request) must first be linked to a GitHub Issue. Please review this guide carefully. - -## Table of Contents - -- [Before You Contribute](#before-you-contribute) -- [Finding & Planning Your Contribution](#finding--planning-your-contribution) -- [Development & Submission Process](#development--submission-process) -- [Legal](#legal) - -## Before You Contribute - -### 1. Code of Conduct - -All contributors must adhere to our [Code of Conduct](./CODE_OF_CONDUCT.md). - -### 2. Project Roadmap - -Our roadmap guides the project's direction. Align your contributions with these key goals: - -### Reliability First - -- Ensure diff editing and command execution are consistently reliable. -- Reduce friction points that deter regular usage. -- Guarantee smooth operation across all locales and platforms. -- Expand robust support for a wide variety of AI providers and models. - -### Enhanced User Experience - -- Streamline the UI/UX for clarity and intuitiveness. -- Continuously improve the workflow to meet the high expectations developers have for daily-use tools. - -### Leading on Agent Performance - -- Establish comprehensive evaluation benchmarks (evals) to measure real-world productivity. -- Make it easy for everyone to easily run and interpret these evals. -- Ship improvements that demonstrate clear increases in eval scores. - -Mention alignment with these areas in your PRs. - -### 3. Join the Roo Code Community - -- **Primary:** Join our [Discord](https://discord.gg/roocode) and DM **Hannes Rudolph (`hrudolph`)**. -- **Alternative:** Experienced contributors can engage directly via [GitHub Projects](https://github.com/orgs/RooCodeInc/projects/1). - -## Finding & Planning Your Contribution - -### Types of Contributions - -- **Bug Fixes:** Addressing code issues. -- **New Features:** Adding functionality. -- **Documentation:** Improving guides and clarity. - -### Issue-First Approach - -All contributions start with a GitHub Issue using our skinny templates. - -- **Check existing issues**: Search [GitHub Issues](https://github.com/RooCodeInc/Roo-Code/issues). -- **Create an issue** using: - - **Enhancements:** "Enhancement Request" template (plain language focused on user benefit). - - **Bugs:** "Bug Report" template (minimal repro + expected vs actual + version). -- **Want to work on it?** Comment "Claiming" on the issue and DM **Hannes Rudolph (`hrudolph`)** on [Discord](https://discord.gg/roocode) to get assigned. Assignment will be confirmed in the thread. -- **PRs must link to the issue.** Unlinked PRs may be closed. - -### Deciding What to Work On - -- Check the [GitHub Project](https://github.com/orgs/RooCodeInc/projects/1) for "Issue [Unassigned]" issues. -- For docs, visit [Roo Code Docs](https://github.com/RooCodeInc/Roo-Code-Docs). - -### Reporting Bugs - -- Check for existing reports first. -- Create a new bug using the ["Bug Report" template](https://github.com/RooCodeInc/Roo-Code/issues/new/choose) with: - - Clear, numbered reproduction steps - - Expected vs actual result - - Roo Code version (required); API provider/model if relevant -- **Security issues**: Report privately via [security advisories](https://github.com/RooCodeInc/Roo-Code/security/advisories/new). - -## Development & Submission Process - -### Development Setup - -1. **Fork & Clone:** - -``` -git clone https://github.com/YOUR_USERNAME/Roo-Code.git -``` - -2. **Install Dependencies:** - -``` -pnpm install -``` - -3. **Debugging:** Open with VS Code (`F5`). - -### Writing Code Guidelines - -- One focused PR per feature or fix. -- Follow ESLint and TypeScript best practices. -- Write clear, descriptive commits referencing issues (e.g., `Fixes #123`). -- Provide thorough testing (`npm test`). -- Rebase onto the latest `main` branch before submission. - -### Submitting a Pull Request - -- Begin as a **Draft PR** if seeking early feedback. -- Clearly describe your changes following the Pull Request Template. -- Link the issue in the PR description/title (e.g., "Fixes #123"). -- Provide screenshots/videos for UI changes. -- Indicate if documentation updates are necessary. - -### Pull Request Policy - -- Must reference an assigned GitHub Issue. To get assigned: comment "Claiming" on the issue and DM **Hannes Rudolph (`hrudolph`)** on [Discord](https://discord.gg/roocode). Assignment will be confirmed in the thread. -- Unlinked PRs may be closed. -- PRs should pass CI tests, align with the roadmap, and have clear documentation. - -### Review Process - -- **Daily Triage:** Quick checks by maintainers. -- **Weekly In-depth Review:** Comprehensive assessment. -- **Iterate promptly** based on feedback. - -## Legal - -By contributing, you agree your contributions will be licensed under the Apache 2.0 License, consistent with Roo Code's licensing. diff --git a/README.md b/README.md index 498a847aeb7..0346dfc457a 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,11 @@

VS Code Marketplace X - YouTube - Join Discord - Join r/RooCode

-

- Get help fast → Join Discord • Prefer async? → Join r/RooCode -

- # Roo Code > Your AI-Powered Dev Team, Right in Your Editor -## What's New in v3.53.0 - -> ### The Roo Code plugin is not going away. -> -> You may have seen the [recent announcement](https://x.com/mattrubens/status/2046636598859559114) that Roo Code hit 3 million installs and the original team is going all-in on Roomote. We know that news was hard for a lot of you. This plugin means a lot to us and to you, and we hear you. -> -> The good news: **a community team has stepped up to carry Roo Code forward**, and we're working with them on an official handoff so the plugin you rely on keeps getting maintained and improved. - -**What's new in this release:** - -- Add GPT-5.5 support via the OpenAI Codex provider. -- Add Claude Opus 4.7 support on Vertex AI. -- Add previous checkpoint navigation controls in chat so you can step back through prior checkpoints more easily. -
🌐 Available languages @@ -49,7 +28,7 @@ - [简体中文](locales/zh-CN/README.md) - [繁體中文](locales/zh-TW/README.md) - ... -
+ --- @@ -75,115 +54,24 @@ Roo Code adapts to how you work: Learn more: [Using Modes](https://docs.roocode.com/basic-usage/using-modes) • [Custom Modes](https://docs.roocode.com/advanced-usage/custom-modes) -## Tutorial & Feature Videos - -
- -| | | | -| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -|
Installing Roo Code |
Configuring Profiles |
Codebase Indexing | -|
Custom Modes |
Checkpoints |
Context Management | - -
-

-More quick tutorial and feature videos... -

- ## Resources - **[Documentation](https://docs.roocode.com):** The official guide to installing, configuring, and mastering Roo Code. -- **[YouTube Channel](https://youtube.com/@roocodeyt?feature=shared):** Watch tutorials and see features in action. -- **[Discord Server](https://discord.gg/roocode):** Join the community for real-time help and discussion. -- **[Reddit Community](https://www.reddit.com/r/RooCode):** Share your experiences and see what others are building. - **[GitHub Issues](https://github.com/RooCodeInc/Roo-Code/issues):** Report bugs and track development. -- **[Feature Requests](https://github.com/RooCodeInc/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop):** Have an idea? Share it with the developers. - ---- - -## Local Setup & Development - -1. **Clone** the repo: - -```sh -git clone https://github.com/RooCodeInc/Roo-Code.git -``` - -2. **Install dependencies**: - -```sh -pnpm install -``` - -3. **Run the extension**: - -There are several ways to run the Roo Code extension: - -### Development Mode (F5) - -For active development, use VSCode's built-in debugging: - -Press `F5` (or go to **Run** → **Start Debugging**) in VSCode. This will open a new VSCode window with the Roo Code extension running. - -- Changes to the webview will appear immediately. -- Changes to the core extension will also hot reload automatically. - -### Automated VSIX Installation - -To build and install the extension as a VSIX package directly into VSCode: - -```sh -pnpm install:vsix [-y] [--editor=] -``` - -This command will: - -- Ask which editor command to use (code/cursor/code-insiders) - defaults to 'code' -- Uninstall any existing version of the extension. -- Build the latest VSIX package. -- Install the newly built VSIX. -- Prompt you to restart VS Code for changes to take effect. - -Options: - -- `-y`: Skip all confirmation prompts and use defaults -- `--editor=`: Specify the editor command (e.g., `--editor=cursor` or `--editor=code-insiders`) - -### Manual VSIX Installation - -If you prefer to install the VSIX package manually: - -1. First, build the VSIX package: - ```sh - pnpm vsix - ``` -2. A `.vsix` file will be generated in the `bin/` directory (e.g., `bin/roo-cline-.vsix`). -3. Install it manually using the VSCode CLI: - ```sh - code --install-extension bin/roo-cline-.vsix - ``` - ---- - -We use [changesets](https://github.com/changesets/changesets) for versioning and publishing. Check our `CHANGELOG.md` for release notes. --- ## Disclaimer -**Please note** that Roo Code, Inc does **not** make any representations or warranties regarding any code, models, or other tools provided or made available in connection with Roo Code, any associated third-party tools, or any resulting outputs. You assume **all risks** associated with the use of any such tools or outputs; such tools are provided on an **"AS IS"** and **"AS AVAILABLE"** basis. Such risks may include, without limitation, intellectual property infringement, cyber vulnerabilities or attacks, bias, inaccuracies, errors, defects, viruses, downtime, property loss or damage, and/or personal injury. You are solely responsible for your use of any such tools or outputs (including, without limitation, the legality, appropriateness, and results thereof). +The Roo Code Extension was shut down on May 15th. ---- +- If you're looking for an alternative, check out [ZooCode](https://github.com/Zoo-Code-Org/Zoo-Code/) (a fork started by the Roo Code community) and [Cline](https://cline.bot/) (from where Roo Code originated). +- If you were a paying user and have billing questions, please write [billing@roocode.com](mailto:billing@roocode.com). -## Contributing - -We love community contributions! Get started by reading our [CONTRIBUTING.md](CONTRIBUTING.md). +**Please note** that Roo Code, Inc does **not** make any representations or warranties regarding any code, models, or other tools provided or made available in connection with Roo Code, any associated third-party tools, or any resulting outputs. You assume **all risks** associated with the use of any such tools or outputs; such tools are provided on an **"AS IS"** and **"AS AVAILABLE"** basis. Such risks may include, without limitation, intellectual property infringement, cyber vulnerabilities or attacks, bias, inaccuracies, errors, defects, viruses, downtime, property loss or damage, and/or personal injury. You are solely responsible for your use of any such tools or outputs (including, without limitation, the legality, appropriateness, and results thereof). --- ## License [Apache 2.0 © 2025 Roo Code, Inc.](./LICENSE) - ---- - -**Enjoy Roo Code!** Whether you keep it on a short leash or let it roam autonomously, we can’t wait to see what you build. If you have questions or feature ideas, drop by our [Reddit community](https://www.reddit.com/r/RooCode/) or [Discord](https://discord.gg/roocode). Happy coding! diff --git a/apps/cli/README.md b/apps/cli/README.md index 95f7f717c93..6c9b73fa697 100644 --- a/apps/cli/README.md +++ b/apps/cli/README.md @@ -53,21 +53,6 @@ roo upgrade rm -rf ~/.roo/cli ~/.local/bin/roo ``` -### Development Installation - -For contributing or development: - -```bash -# From the monorepo root. -pnpm install - -# Build the main extension first. -pnpm --filter roo-cline bundle - -# Build the CLI. -pnpm --filter @roo-code/cli build -``` - ## Usage ### Interactive Mode (Default) diff --git a/apps/docs/docs/advanced-usage/local-development-setup.mdx b/apps/docs/docs/advanced-usage/local-development-setup.mdx deleted file mode 100644 index 5d036c25c7c..00000000000 --- a/apps/docs/docs/advanced-usage/local-development-setup.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -description: Learn how to set up Roo Code for local development, build from source, and contribute to the project. Complete developer setup guide. -keywords: - - local development - - build from source - - Roo Code development - - contribute - - developer setup -sidebar_label: Local Development Setup ---- - -## Local Setup & Development - -:::note Developer Information Only -This section is for developers contributing to Roo Code or those who wish to build and run the extension from source. -::: - -To set up Roo Code for local development: - -1. **Clone the repository:** - ```bash - git clone https://github.com/RooCodeInc/Roo-Code.git - cd Roo-Code - ``` - -2. **Install dependencies:** - Roo Code uses `pnpm` for package management. - ```bash - pnpm install - ``` - -3. **Run the extension for development:** - You have two primary methods: - - * **Directly in VS Code (Recommended for active development):** - * Open the cloned `Roo-Code` folder in VS Code. - * Press `F5` (or select **Run** → **Start Debugging** from the menu). This opens a new VS Code window (Extension Development Host) with Roo Code running. - * Changes to the webview code (under `webview-ui/`) will often update live. - * Changes to the core extension code (under `src/`) typically require restarting the Extension Development Host window. - - * **Building and Installing a VSIX package:** - This method is useful for testing the packaged extension or distributing development builds. - 1. Build the VSIX file: - ```bash - pnpm vsix - ``` - A `.vsix` file (e.g., `roo-cline-.vsix`) will be created in the `bin/` directory. - - 2. Install the VSIX in VS Code: - * **Using the command line:** - ```bash - code --install-extension bin/roo-cline-.vsix - ``` - (Replace `` with the actual version number in the filename). - * **Using the VS Code interface:** - * Open the Extensions view (`Ctrl+Shift+X` or `Cmd+Shift+X`). - * Click the "..." (More Actions) menu in the Extensions view sidebar. - * Select "Install from VSIX..." - * Browse to and select the generated `.vsix` file from the `bin/` directory. - - VS Code's Install from VSIX dialog - *Installing a development VSIX using VS Code's "Install from VSIX..." dialog.* \ No newline at end of file diff --git a/apps/docs/docs/advanced-usage/roo-code-nightly.mdx b/apps/docs/docs/advanced-usage/roo-code-nightly.mdx index 4e619702e39..bd49717d728 100644 --- a/apps/docs/docs/advanced-usage/roo-code-nightly.mdx +++ b/apps/docs/docs/advanced-usage/roo-code-nightly.mdx @@ -11,8 +11,6 @@ sidebar_label: Roo Code Nightly # Roo Code Nightly -For users who want the latest features and updates, Roo Code offers a prerelease build called **Roo Code Nightly**, which is automatically published whenever changes are merged into our main development branch. This means it always reflects the latest code. It's designed for users who want to access the newest features and contribute to early testing. - --- ## Understanding Nightly vs. Other Prereleases @@ -50,4 +48,4 @@ To install Roo Code Nightly: Roo Code Nightly extension in VS Code Marketplace *Roo Code Nightly in the VS Code Marketplace.* -You can have both the stable version of Roo Code and Roo Code Nightly installed simultaneously. \ No newline at end of file +You can have both the stable version of Roo Code and Roo Code Nightly installed simultaneously. diff --git a/apps/docs/docs/faq.md b/apps/docs/docs/faq.md index b094f31a2e2..1dc68904d17 100644 --- a/apps/docs/docs/faq.md +++ b/apps/docs/docs/faq.md @@ -172,12 +172,9 @@ Codebase Indexing requires an OpenAI API key for generating embeddings and a Qdr - Check your internet connection. - Check the status of your chosen API provider. - Try restarting VS Code. -- If the problem persists, report the issue on [GitHub](https://github.com/RooCodeInc/Roo-Code/issues) or [Discord](https://discord.gg/roocode). ### I'm seeing an error message. What does it mean? -The error message should provide some information about the problem. If you're unsure how to resolve it, seek help in [Discord](https://discord.gg/roocode). - ### Roo Code made changes I didn't want. How do I undo them? Roo Code uses VS Code's built-in file editing capabilities. You can use the standard "Undo" command (Ctrl/Cmd + Z) to revert changes. Also, if experimental checkpoints are enabled, Roo can revert changes made to a file. @@ -206,5 +203,3 @@ If Roo Code fails to write to `.md` files with errors like "Failed to open diff - Restart VS Code after making these changes ### How do I report a bug or suggest a feature? - -Please report bugs or suggest features on the Roo Code [Issues page](https://github.com/RooCodeInc/Roo-Code/issues) and [Feature Requests page](https://github.com/RooCodeInc/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop). diff --git a/apps/docs/docs/features/api-configuration-profiles.mdx b/apps/docs/docs/features/api-configuration-profiles.mdx index 06d8ff1d4c3..946855e4eed 100644 --- a/apps/docs/docs/features/api-configuration-profiles.mdx +++ b/apps/docs/docs/features/api-configuration-profiles.mdx @@ -16,23 +16,6 @@ API Configuration Profiles allow you to create and switch between different sets Having multiple configuration profiles lets you quickly switch between different AI providers, models, and settings without reconfiguring everything each time you want to change your setup. ::: -
- -
-
- --- ## How It Works @@ -103,7 +86,6 @@ The API configuration dropdown now supports pinning your favorite profiles for q This feature makes it easier to navigate between commonly used profiles, especially when you have many configurations. - ### Editing and Deleting Profiles Profile editing interface diff --git a/apps/docs/docs/features/auto-approving-actions.mdx b/apps/docs/docs/features/auto-approving-actions.mdx index e72f7db9188..2085a5d7707 100644 --- a/apps/docs/docs/features/auto-approving-actions.mdx +++ b/apps/docs/docs/features/auto-approving-actions.mdx @@ -14,23 +14,6 @@ keywords: Auto-approve settings speed up your workflow by eliminating repetitive confirmation prompts, but they significantly increase security risks. -
- -
-
- --- ## Quick Start Guide @@ -76,7 +59,6 @@ The dropdown shows a grid of permission tiles. Controls: - All / None (bottom-left): bulk select or clear permissions without changing Enabled - Permission tiles: choose which actions can run without prompts; tiles disable only when Enabled is off. Some permissions take effect only if your model supports the capability. - ### Available Permissions | Permission | What it does | Risk level | diff --git a/apps/docs/docs/features/boomerang-tasks.mdx b/apps/docs/docs/features/boomerang-tasks.mdx index b8399dc759b..13636464942 100644 --- a/apps/docs/docs/features/boomerang-tasks.mdx +++ b/apps/docs/docs/features/boomerang-tasks.mdx @@ -13,24 +13,6 @@ sidebar_label: 'Boomerang Tasks' Boomerang Tasks (also known as subtasks or task orchestration) allow you to break down complex projects into smaller, manageable pieces using the built-in **`🪃 Orchestrator` Mode (aka Boomerang Mode)**. Think of it like delegating parts of your work to specialized assistants. Each subtask runs in its own context, often using a different Roo Code mode tailored for that specific job (like [`💻 Code`](/basic-usage/using-modes#code-mode-default), [`🏗️ Architect`](/basic-usage/using-modes#architect-mode), or [`🪲 Debug`](/basic-usage/using-modes#debug-mode)). The Orchestrator mode manages this process. -
- -
- -
- :::info Orchestrator Mode is Built-In The `🪃 Orchestrator` mode (previously achieved via a custom "Boomerang Mode") is now a built-in mode specifically designed to orchestrate workflows by breaking down tasks and delegating them to other modes. You no longer need to create a custom mode for this functionality. @@ -112,7 +94,6 @@ You can [customize the Orchestrator mode](/features/custom-modes) to add capabil Adding capabilities to the Orchestrator mode should be done thoughtfully. The limited default capabilities help maintain focus on orchestration rather than implementation details. ::: - [^1]: This context is passed via the `message` parameter of the [`new_task`](/advanced-usage/available-tools/new-task) tool when the Orchestrator mode delegates the task. [^2]: The mode for the subtask is specified via the `mode` parameter of the [`new_task`](/advanced-usage/available-tools/new-task) tool during initiation by the Orchestrator mode. -[^3]: This summary is passed via the `result` parameter of the [`attempt_completion`](/advanced-usage/available-tools/attempt-completion) tool when the subtask finishes. \ No newline at end of file +[^3]: This summary is passed via the `result` parameter of the [`attempt_completion`](/advanced-usage/available-tools/attempt-completion) tool when the subtask finishes. diff --git a/apps/docs/docs/features/checkpoints.mdx b/apps/docs/docs/features/checkpoints.mdx index 4c646b9946f..54e62300b8f 100644 --- a/apps/docs/docs/features/checkpoints.mdx +++ b/apps/docs/docs/features/checkpoints.mdx @@ -19,22 +19,6 @@ Checkpoints let you: - Compare different implementation approaches - Revert to previous project states without losing work -
- -
-
:::info Important Notes diff --git a/apps/docs/docs/features/code-actions.mdx b/apps/docs/docs/features/code-actions.mdx index 7f5286e9fb8..3895abd7235 100644 --- a/apps/docs/docs/features/code-actions.mdx +++ b/apps/docs/docs/features/code-actions.mdx @@ -14,22 +14,6 @@ keywords: Code Actions provide instant access to Roo Code's AI assistance directly within your code editor through VSCode's lightbulb (quick fix) system. This context-aware feature automatically detects relevant code situations and offers appropriate AI-powered actions without requiring you to switch to the chat interface. -
- -
-
--- diff --git a/apps/docs/docs/features/codebase-indexing.mdx b/apps/docs/docs/features/codebase-indexing.mdx index 90ba8bc764e..35557aec7f0 100644 --- a/apps/docs/docs/features/codebase-indexing.mdx +++ b/apps/docs/docs/features/codebase-indexing.mdx @@ -16,25 +16,6 @@ import Codicon from '@site/src/components/Codicon'; Codebase Indexing transforms how Roo Code understands your project by creating a semantic search index using AI embeddings. Instead of searching for exact text matches, it understands the *meaning* of your queries, helping Roo find relevant code even when you don't know specific function names or file locations. -
- -
- -
- --- ## What It Does @@ -48,7 +29,6 @@ When enabled, the indexing system: This enables natural language queries like "user authentication logic" or "database connection handling" to find relevant code across your entire project. - --- ## Quick Start Guide @@ -364,4 +344,4 @@ Planned improvements: - Enhanced filtering options - Team collaboration features - VS Code native search integration -- Incremental re-indexing optimizations \ No newline at end of file +- Incremental re-indexing optimizations diff --git a/apps/docs/docs/features/custom-modes.mdx b/apps/docs/docs/features/custom-modes.mdx index 6fa9a04568d..1aa0a78b39d 100644 --- a/apps/docs/docs/features/custom-modes.mdx +++ b/apps/docs/docs/features/custom-modes.mdx @@ -13,31 +13,12 @@ keywords: Roo Code allows you to create **custom modes** to tailor Roo's behavior to specific tasks or workflows. Custom modes can be either **global** (available across all projects) or **project-specific** (defined within a single project). -
- -
- -
- :::tip Sticky Models for Efficient Workflow Each mode—including custom ones—features **Sticky Models**. This means Roo Code automatically remembers and selects the last model you used with a particular mode. This lets you assign different preferred models to different tasks without constant reconfiguration, as Roo switches between models when you change modes. ::: -:::info Discover Community Modes -Looking for ready-to-use custom modes? Visit the [Roo Code Marketplace](/features/marketplace) to browse and install community-contributed modes with a single click. The marketplace offers specialized modes for various tasks like React development, documentation writing, testing, and more—all created and shared by the Roo Code community. +:::info Discover Modes +Looking for ready-to-use custom modes? Visit the [Roo Code Marketplace](/features/marketplace) to browse and install modes with a single click. The marketplace offers specialized modes for various tasks like React development, documentation writing, testing, and more. ::: --- @@ -616,7 +597,6 @@ In the table below, the 'Pattern (Conceptual / YAML-like)' column shows patterns | `docs/.*\.md$` | `"docs/.*\\.md$"` | `docs/guide.md`, `docs/api/reference.md` | `guide.md`, `src/docs/notes.md` | | `^(?!.*(test\|spec))\.(js\|ts)$` | `"^(?!.*(test\|spec))\\.(js\|ts)$"` | `app.js`, `utils.ts` | `app.test.js`, `utils.spec.js`, `app.jsx` | - **Key Regex Building Blocks:** * `\.`: Matches a literal dot. (YAML: `\.`, JSON: `\\.`) * `$`: Matches the end of the string. @@ -660,4 +640,3 @@ In addition to mode-specific rules directories, there's also a generic `.roo/rul - **Mode not appearing:** After creating or importing a mode, you may need to reload the VS Code window for it to appear in the mode selector. - **Invalid regex patterns:** If your `fileRegex` pattern is invalid, you'll receive an error message. Test your patterns using online regex testers before applying them. - **Precedence confusion:** Remember that project modes completely override global modes with the same slug - no properties are merged. - diff --git a/apps/docs/docs/features/intelligent-context-condensing.mdx b/apps/docs/docs/features/intelligent-context-condensing.mdx index 8e9924b33cf..b86eb6947c3 100644 --- a/apps/docs/docs/features/intelligent-context-condensing.mdx +++ b/apps/docs/docs/features/intelligent-context-condensing.mdx @@ -14,23 +14,6 @@ import Codicon from '@site/src/components/Codicon'; The Intelligent Context Condensing feature helps manage long conversations by summarizing earlier parts of the dialogue. This prevents important information from being lost when the context window nears its limit. This feature is **enabled by default**. -
- -
- -
--- ## How It Works diff --git a/apps/docs/docs/features/marketplace.mdx b/apps/docs/docs/features/marketplace.mdx index 446a8f8559e..959a3dc3017 100644 --- a/apps/docs/docs/features/marketplace.mdx +++ b/apps/docs/docs/features/marketplace.mdx @@ -1,45 +1,29 @@ --- -description: Discover and install community-contributed MCP servers and custom modes from the Roo Code Marketplace to extend your AI coding assistant's capabilities. +description: Discover and install MCP servers and custom modes from the Roo Code Marketplace to extend your AI coding assistant's capabilities. keywords: - Roo Code Marketplace - MCP servers - custom modes - extensions - - community tools + - tools - AI integrations --- import Codicon from '@site/src/components/Codicon'; # Roo Code Marketplace -
- -
-
--- ## Overview -The Roo Code Marketplace is a central hub for discovering and installing community-contributed extensions, known as MCPs (Model Context Protocol) and Modes. It allows you to easily extend the functionality of Roo Code to fit your specific needs and workflows. +The Roo Code Marketplace is a central hub for discovering and installing extensions, known as MCPs (Model Context Protocol) and Modes. It allows you to easily extend the functionality of Roo Code to fit your specific needs and workflows. ### Key Features - **Discoverability**: Browse a curated list of MCPs and Modes. - **Simple Installation**: Install and remove items with a single click. -- **Community-Driven**: Access a growing collection of extensions from the Roo Code community. +- **Curated Extensions**: Access a growing collection of ready-to-use extensions. - **Project & Global Scopes**: Install items for a specific project or for all your projects. --- @@ -50,8 +34,6 @@ The Roo Code Marketplace is available directly within the Roo Code extension in --- - - ## Marketplace Items The marketplace offers two types of items: @@ -172,4 +154,4 @@ If an installed item isn't working: ### For Modes - [Using Modes](/basic-usage/using-modes) - Learn about built-in modes and how to switch between them -- [Custom Modes](/features/custom-modes) - Create and configure your own specialized modes \ No newline at end of file +- [Custom Modes](/features/custom-modes) - Create and configure your own specialized modes diff --git a/apps/docs/docs/features/mcp/recommended-mcp-servers.md b/apps/docs/docs/features/mcp/recommended-mcp-servers.md index a9716ab106a..0ce8e4686a7 100644 --- a/apps/docs/docs/features/mcp/recommended-mcp-servers.md +++ b/apps/docs/docs/features/mcp/recommended-mcp-servers.md @@ -12,9 +12,9 @@ sidebar_label: Recommended MCP Servers # Recommended MCP Servers -While Roo Code can connect to any Model Context Protocol (MCP) server that follows the specification, the community has already built several high-quality servers that work out-of-the-box. This page curates the servers we **actively recommend** and provides step-by-step setup instructions so you can get productive in minutes. +While Roo Code can connect to any Model Context Protocol (MCP) server that follows the specification, several high-quality servers work out-of-the-box. This page curates the servers we **actively recommend** and provides step-by-step setup instructions so you can get productive in minutes. -> We'll keep this list up-to-date. If you maintain a server you'd like us to consider, please open a pull-request. +> We'll keep this list up-to-date. --- diff --git a/apps/docs/docs/features/mcp/using-mcp-in-roo.mdx b/apps/docs/docs/features/mcp/using-mcp-in-roo.mdx index 71b28bc794e..6c4e724b424 100644 --- a/apps/docs/docs/features/mcp/using-mcp-in-roo.mdx +++ b/apps/docs/docs/features/mcp/using-mcp-in-roo.mdx @@ -21,23 +21,6 @@ For a deeper dive, check out [What is MCP?](/features/mcp/what-is-mcp). Model Context Protocol (MCP) extends Roo Code's capabilities by connecting to external tools and services. This guide covers everything you need to know about using MCP with Roo Code. -
- -
-
- --- ## Configuring MCP Servers @@ -339,7 +322,6 @@ When enabled, Roo Code will automatically approve this specific tool without pro Roo Code does not come with any pre-installed MCP servers. You'll need to find and install them separately. -* **Community Repositories:** Check for community-maintained lists of MCP servers on GitHub * **Ask Roo:** You can ask Roo Code to help you find or even create MCP servers (when "[Enable MCP Server Creation](#enabling-or-disabling-mcp-server-creation)" is enabled) * **Build Your Own:** Create custom MCP servers using the SDK to extend Roo Code with your own tools diff --git a/apps/docs/docs/features/shell-integration.mdx b/apps/docs/docs/features/shell-integration.mdx index baecfe6c43f..3b45e21428b 100644 --- a/apps/docs/docs/features/shell-integration.mdx +++ b/apps/docs/docs/features/shell-integration.mdx @@ -13,25 +13,6 @@ import Codicon from '@site/src/components/Codicon'; Terminal Shell Integration is a key feature that enables Roo Code to execute commands in your terminal and intelligently process their output. This bidirectional communication between the AI and your development environment unlocks powerful automation capabilities. -
- -
- -
- --- ## What is Shell Integration? @@ -331,7 +312,6 @@ For optimal shell integration with WSL, we recommend: --- - #### Cygwin (bash, zsh) Cygwin provides a Unix-like environment on Windows systems. To configure Cygwin as your terminal in VS Code: @@ -447,9 +427,6 @@ For fellow Windows users running Fish terminal within a Cygwin environment, here This setup works reliably on Windows systems using Cygwin, Fish, and the Starship prompt, and should assist users with similar configurations. - - - #### Ctrl+C Behavior **Issue**: If text is already typed in the terminal when Roo tries to run a command, Roo will press Ctrl+C first to clear the line, which can interrupt running processes. @@ -540,5 +517,3 @@ The [VS Code Terminal Integration Test Extension](https://github.com/KJ7LNW/vsce - What you’ll see: a chat notice that real-time streaming and exit‑code detection may be limited. - Fix: turn ON [Use Inline Terminal (recommended)](#use-inline-terminal-recommended) or follow the Troubleshooting steps above to restore VS Code shell integration. Command execution fallback notification example - - diff --git a/apps/docs/docs/features/skills.mdx b/apps/docs/docs/features/skills.mdx index 9687ce13072..2ff232f9885 100644 --- a/apps/docs/docs/features/skills.mdx +++ b/apps/docs/docs/features/skills.mdx @@ -13,25 +13,6 @@ keywords: Skills package task-specific instructions that Roo loads on-demand when your request matches the skill's purpose. Unlike custom instructions that apply to everything, skills activate only when needed—making Roo more effective at specialized tasks without cluttering the base prompt. -
- -
- -
- --- ## Why It Matters @@ -234,7 +215,6 @@ Roo automatically discovers skills: You don't need to register or configure skills—just create the directory structure. - #### Symlink support Skills support symbolic links for sharing skill libraries across projects: diff --git a/apps/docs/docs/features/slash-commands.mdx b/apps/docs/docs/features/slash-commands.mdx index dfd85038bce..6e66e217f0c 100644 --- a/apps/docs/docs/features/slash-commands.mdx +++ b/apps/docs/docs/features/slash-commands.mdx @@ -14,25 +14,6 @@ keywords: Create custom slash commands to automate repetitive tasks and extend Roo Code's functionality with simple markdown files. -
- -
- -
- :::tip Quick Start Type `/` in chat to select a command. To create or manage commands, open Settings > Slash Commands. You can still store commands in `.roo/commands/` (project) or `~/.roo/commands/` (global). ::: @@ -293,8 +274,7 @@ Generate a README.md file that includes: 3. Usage examples 4. API documentation 5. Configuration options -6. Contributing guidelines -7. License information +6. License information Base it on the current project structure and existing code. ``` @@ -443,4 +423,4 @@ The slash menu includes mode-switching commands (like `/code`, `/ask`) that fund - [Using Modes](/basic-usage/using-modes) - Learn about Roo Code's different operational modes - [Custom Instructions](/features/custom-instructions) - Set persistent instructions for Roo Code - [Keyboard Shortcuts](/features/keyboard-shortcuts) - Quick access to commands -- [Task Management](/features/task-todo-list) - Manage complex workflows \ No newline at end of file +- [Task Management](/features/task-todo-list) - Manage complex workflows diff --git a/apps/docs/docs/features/task-todo-list.mdx b/apps/docs/docs/features/task-todo-list.mdx index c50441d0131..cdd307f1c60 100644 --- a/apps/docs/docs/features/task-todo-list.mdx +++ b/apps/docs/docs/features/task-todo-list.mdx @@ -20,24 +20,6 @@ Todo lists are automatically created for complex tasks, multi-step workflows, or See [When Roo Creates Todo Lists](#when-roo-creates-todo-lists) for detailed information about automatic and manual triggers. ::: -
- -
- -
- --- ## Use Case @@ -177,4 +159,4 @@ When enabled, this setting prevents task completion when there are uncompleted t You can disable todo lists entirely through the `todoListEnabled` setting. When disabled: - Roo will not create todo lists for any tasks - The REMINDERS section will not appear in environment details -- Existing todo lists will remain visible but won't be updated \ No newline at end of file +- Existing todo lists will remain visible but won't be updated diff --git a/apps/docs/docs/features/worktrees.mdx b/apps/docs/docs/features/worktrees.mdx index fac2ebdd9d6..1b7a48f074e 100644 --- a/apps/docs/docs/features/worktrees.mdx +++ b/apps/docs/docs/features/worktrees.mdx @@ -20,22 +20,6 @@ This is particularly powerful for agentic coding workflows where you might want - Run multiple tasks on different branches simultaneously - Maintain separate environments for development and debugging -
- -
-
:::note Requirements @@ -115,7 +99,6 @@ The worktrees list shows: 1. Navigate to Settings → Worktrees 2. Click the trash icon next to the worktree you want to delete - ### Copying Files with .worktreeinclude By default, Git worktrees only include files tracked by Git. Untracked files like `node_modules`, `.env`, or build artifacts aren't copied. The `.worktreeinclude` feature solves this problem. diff --git a/apps/docs/docs/getting-started/installing.mdx b/apps/docs/docs/getting-started/installing.mdx index 005ca00c3d0..f714cd76e85 100644 --- a/apps/docs/docs/getting-started/installing.mdx +++ b/apps/docs/docs/getting-started/installing.mdx @@ -13,22 +13,6 @@ import KangarooIcon from '@site/src/components/KangarooIcon'; # Installing Roo Code -
- -
- Roo Code is a VS Code extension that brings AI-powered coding assistance directly to your editor. Install using one of these methods: 1. **VS Code Marketplace (Recommended)** - fastest method for standard VS Code and Cursor users 2. **Open VSX Registry** - for VS Code-compatible editors like VSCodium @@ -62,12 +46,10 @@ For VS Code-compatible editors without Marketplace access (like VSCodium and Win Open VSX Registry with Roo Code extension ready to install - ## Roo Code Nightly For information on installing Roo Code Nightly (our prerelease build published on each merge to main), please see the [Roo Code Nightly](/advanced-usage/roo-code-nightly) guide in the Advanced Usage section. - ## Manual Installation from VSIX If you prefer to download and install the VSIX file directly: @@ -90,8 +72,6 @@ If you prefer to download and install the VSIX file directly: ## Local Setup & Development -For instructions on setting up Roo Code for local development, building from source, or contributing, please see the [Local Development Setup](/advanced-usage/local-development-setup) guide in the Advanced Usage section. - --- ## Troubleshooting @@ -116,6 +96,4 @@ For instructions on setting up Roo Code for local development, building from sou If you encounter issues not covered here: -* Join our [Discord community](https://discord.gg/roocode) for real-time support * Submit issues on [GitHub](https://github.com/RooCodeInc/Roo-Code/issues) -* Visit our [Reddit community](https://www.reddit.com/r/RooCode) \ No newline at end of file diff --git a/apps/docs/docs/index.mdx b/apps/docs/docs/index.mdx index 4987ed5645d..c8b20ab458b 100644 --- a/apps/docs/docs/index.mdx +++ b/apps/docs/docs/index.mdx @@ -13,6 +13,12 @@ keywords: # Roo Code Docs +:::warning Extension Shutdown +The Roo Code Extension was shut down on May 15th. +- If you're looking for an alternative, check out [ZooCode](https://github.com/Zoo-Code-Org/Zoo-Code/) (a fork started by the Roo Code community) and [Cline](https://cline.bot/) (from where Roo Code originated). +- If you were a paying user and have billing questions, please write [billing@roocode.com](mailto:billing@roocode.com). +::: + Roo Code is an open-source AI coding agent for VS Code designed to take full advantage of advanced large-language models and change how you create software at a fundamental level. It's powerful, customizable, and model-agnostic, with actual file system access, terminal control, and multi-step workflows. Roo's approach is to trade tokens for quality. If you want the best and most effective AI coding experience available, this is it. @@ -42,44 +48,6 @@ The most successful Roo users tend to embrace the following ideas: - [Install the Extension](/getting-started/installing) - [Connect an LLM Provider](/getting-started/connecting-api-provider) - -## Tutorial & Feature Videos - - - -

- More quick tutorial and feature videos... -

- ## Additional Resources -- [Discord Server](https://discord.gg/roocode): Join the community for real-time help and discussion. -- [Reddit Community](https://www.reddit.com/r/RooCode): Share your experiences and see what others are building. -- [YouTube Channel](https://youtube.com/@roocodeyt?feature=shared): Watch tutorials and see features in action. - [GitHub Issues](https://github.com/RooCodeInc/Roo-Code/issues): Report bugs and track development. -- [Feature Requests](https://github.com/RooCodeInc/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop): Have an idea? Share it with the team. diff --git a/apps/docs/docs/providers/openai-chatgpt-plus-pro.md b/apps/docs/docs/providers/openai-chatgpt-plus-pro.md index 5d1c0f0da68..679e45fcf6f 100644 --- a/apps/docs/docs/providers/openai-chatgpt-plus-pro.md +++ b/apps/docs/docs/providers/openai-chatgpt-plus-pro.md @@ -12,23 +12,6 @@ keywords: - subscription --- -
- -
- --- ## Quickstart: Connect your subscription to Roo Code diff --git a/apps/docs/docs/providers/requesty.md b/apps/docs/docs/providers/requesty.md index c6c2045e173..199c8520859 100644 --- a/apps/docs/docs/providers/requesty.md +++ b/apps/docs/docs/providers/requesty.md @@ -55,8 +55,3 @@ For the complete, up-to-date model list with pricing, see [Requesty's model list * **Prompt Caching:** Some providers support prompt caching. [Search models with caching](https://app.requesty.ai/router/list). --- - -## Relevant resources - -- [Requesty Youtube channel](https://www.youtube.com/@requestyAI): -- [Requesty Discord](https://requesty.ai/discord) diff --git a/apps/docs/docs/reporting-errors.md b/apps/docs/docs/reporting-errors.md index 02235baac1b..b0353bf5b82 100644 --- a/apps/docs/docs/reporting-errors.md +++ b/apps/docs/docs/reporting-errors.md @@ -35,7 +35,7 @@ The Error Details modal offers two buttons, each serving different needs: - Provider and model being used - The specific error message - **Use when:** You want to quickly share the error in Discord or a brief support email. + **Use when:** You want to quickly share the error in a brief support email. 2. **Get detailed error info** - Opens a full diagnostic report with: @@ -55,7 +55,6 @@ The Error Details modal offers two buttons, each serving different needs: After copying error information: - **Email**: Send to [support@roocode.com](mailto:support@roocode.com) -- **Discord**: Share in the [#support channel](https://discord.gg/roocode) - **GitHub Issues**: File at [github.com/RooCodeInc/Roo-Code/issues](https://github.com/RooCodeInc/Roo-Code/issues) Include a brief description of what you were trying to do when the error occurred. The exported diagnostics handle the technical details. diff --git a/apps/docs/docs/tutorial-videos.json b/apps/docs/docs/tutorial-videos.json deleted file mode 100644 index e1b8e5a2dab..00000000000 --- a/apps/docs/docs/tutorial-videos.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "videos": [ - { - "id": "Mcq3r1EPZ-4", - "title": "Installing Roo Code" - }, - { - "id": "ZBML8h5cCgo", - "title": "Configuring Profiles" - }, - { - "id": "VAbadUDhH5c", - "title": "Setting up MCP Servers" - }, - { - "id": "bWtIxGsl2cQ", - "title": "Auto Approve Feature" - }, - { - "id": "iiAv1eKOaxk", - "title": "Custom Modes" - }, - { - "id": "Ho30nyY332E", - "title": "Checkpoints" - }, - { - "id": "r1bpod1VWhg", - "title": "Codebase Indexing" - }, - { - "id": "9k8OAXlszak", - "title": "Context Condensing" - }, - { - "id": "WatooxMlW0U", - "title": "Roo Marketplace" - }, - { - "id": "6h5vB9PpoPk", - "title": "Todo Lists" - }, - { - "id": "IOpmeUGLpg0", - "title": "Slash Commands" - }, - { - "id": "cAjzTs0194c", - "title": "Browser Use" - }, - { - "id": "_Op3VfLPEu8", - "title": "Code Actions" - }, - { - "id": "rkWBHeG9A-4", - "title": "Terminal Integration" - }, - { - "id": "HmnNSasv7T8", - "title": "Context Management" - }, - { - "id": "BRrhcYYSh9M", - "title": "Worktrees" - }, - { - "id": "1992Rpfc800", - "title": "Skills" - } - ] -} diff --git a/apps/docs/docs/tutorial-videos.mdx b/apps/docs/docs/tutorial-videos.mdx deleted file mode 100644 index bc47a84a57c..00000000000 --- a/apps/docs/docs/tutorial-videos.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: Watch comprehensive video tutorials to learn how to use Roo Code effectively. From basics to advanced features, master AI-assisted development. -keywords: - - Roo Code tutorials - - video tutorials - - AI coding tutorials - - learn Roo Code - - video guides ---- - -import VideoGrid from '@site/src/components/VideoGrid'; - -# Tutorial Videos - -Learn how to build powerful applications and enhance your development workflow with these hands-on Roo Code tutorials. Big thanks to all of the creators! - - \ No newline at end of file diff --git a/apps/docs/docs/update-notes/v3.0.1.md b/apps/docs/docs/update-notes/v3.0.1.md index 1bd80ae32c9..a820e1479ce 100644 --- a/apps/docs/docs/update-notes/v3.0.1.md +++ b/apps/docs/docs/update-notes/v3.0.1.md @@ -1,9 +1,7 @@ --- -description: Roo Code 3.0.1 fixes the community Reddit link and resolves a minor visual glitch in the chat input area for improved user experience. keywords: - roo code - v3.0.1 - - reddit link fix - visual glitch - chat input - patch release @@ -19,5 +17,4 @@ This patch release fixes a link and a minor visual glitch. ## Fixes -- Fixed the community Reddit link. - Fixed a small visual glitch in the chat input area. diff --git a/apps/docs/docs/update-notes/v3.0.md b/apps/docs/docs/update-notes/v3.0.md index 9241d2259ea..b3cadeda7a2 100644 --- a/apps/docs/docs/update-notes/v3.0.md +++ b/apps/docs/docs/update-notes/v3.0.md @@ -1,5 +1,4 @@ --- -description: Roo Code 3.0 introduces Chat Modes for specialized interactions, launches Reddit community, and includes various UI fixes and compatibility updates. keywords: - roo code - v3.0 @@ -7,7 +6,6 @@ keywords: - ask mode - architect mode - code mode - - reddit community - ui fixes - release cycle - release notes @@ -25,13 +23,11 @@ This release cycle marked the introduction of Chat Modes in Roo Code, allowing u - Ask questions about system architecture or the codebase. - Engage in higher-level discussions before code implementation. - Assign different API configuration profiles to each mode, enabling the use of different models for thinking versus coding. -- **Roo Code Reddit Community:** Launched the [Roo Code Reddit](https://www.reddit.com/r/RooCode) for feedback and community interaction. --- ## Bug Fixes & Minor Updates -- **Reddit Link Fix (v3.0.1):** Corrected the Reddit link in the application. - **Chat Input Visual Glitch (v3.0.1):** Fixed a small visual glitch in the chat input. - **Button Alignment Tweaks (v3.0.2):** Made minor adjustments to button alignment in the chat input. - **VSCode Engine Requirement (v3.0.3):** Updated the required VSCode engine to `^1.84.0` to align with Cline. diff --git a/apps/docs/docs/update-notes/v3.18.0.mdx b/apps/docs/docs/update-notes/v3.18.0.mdx index 7e760c6ba06..b486e413406 100644 --- a/apps/docs/docs/update-notes/v3.18.0.mdx +++ b/apps/docs/docs/update-notes/v3.18.0.mdx @@ -15,8 +15,6 @@ Watch a quick overview:
` - }}> - {video.title} -
-
-
-
-
- {video.title} -
-
- ))} -
- - ) -} diff --git a/apps/docs/src/constants.ts b/apps/docs/src/constants.ts index 695863ed1b4..01d04a62faf 100644 --- a/apps/docs/src/constants.ts +++ b/apps/docs/src/constants.ts @@ -7,16 +7,12 @@ export const GITHUB_REPO_URL = "https://github.com/RooCodeInc/Roo-Code" export const GITHUB_ISSUES_URL = `${GITHUB_REPO_URL}/issues` export const GITHUB_NEW_ISSUE_URL = `${GITHUB_ISSUES_URL}/new` -// Community links -export const DISCORD_URL = "https://discord.gg/roocode" -export const REDDIT_URL = "https://www.reddit.com/r/RooCode/" export const TWITTER_URL = "https://x.com/roocode" export const BLUESKY_URL = "https://bsky.app/profile/roocode.bsky.social" // GitHub links export const GITHUB_MAIN_REPO_URL = "https://github.com/RooCodeInc/Roo-Code" export const GITHUB_ISSUES_MAIN_URL = `${GITHUB_MAIN_REPO_URL}/issues` -export const GITHUB_FEATURES_URL = `${GITHUB_MAIN_REPO_URL}/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop` // Download links export const VSCODE_MARKETPLACE_URL = "https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" diff --git a/apps/docs/src/css/custom.css b/apps/docs/src/css/custom.css index 4fc7935fcb2..7d90e9dc44e 100644 --- a/apps/docs/src/css/custom.css +++ b/apps/docs/src/css/custom.css @@ -2400,54 +2400,6 @@ a.breadcrumbs__link:hover { } } -/* ============================================ - CUSTOM TUTORIAL VIDEOS SIDEBAR STYLES - ============================================ */ - -/* Move external link icons to the right for Tutorial Videos */ -.menu__list-item a[href^="https://www.youtube.com/watch"] -{ - display: flex !important; - justify-content: space-between !important; - align-items: center !important; - padding-right: 0.5rem !important; - width: 100% !important; -} - -/* Ensure the link text takes up available space */ -.menu__list-item a[href^="https://www.youtube.com/watch"] .menu__link-text -{ - flex: 1 !important; - overflow: hidden !important; - text-overflow: ellipsis !important; - white-space: nowrap !important; - margin-right: 0.5rem !important; -} - -/* Move the external link icon (svg) to the right */ -.menu__list-item a[href^="https://www.youtube.com/watch"] svg -{ - order: 2 !important; - margin-left: auto !important; - margin-right: 0 !important; - flex-shrink: 0 !important; - width: 13px !important; - height: 13px !important; - opacity: 0.6 !important; -} - -/* Show icon more prominently on hover */ -.menu__list-item a[href^="https://www.youtube.com/watch"]:hover svg -{ - opacity: 1 !important; -} - -/* Ensure consistent spacing for all tutorial video links */ -.menu__list-item:has(> a[href^="https://www.youtube.com/watch"]) -{ - margin-bottom: 0 !important; -} - /* ============================================ FIX: SEARCH INPUT TINY BUBBLE ON MOBILE ============================================ */ diff --git a/apps/docs/src/theme/Footer/Links/MultiColumn/index.tsx b/apps/docs/src/theme/Footer/Links/MultiColumn/index.tsx index acbc2c0c787..bc4507496ea 100644 --- a/apps/docs/src/theme/Footer/Links/MultiColumn/index.tsx +++ b/apps/docs/src/theme/Footer/Links/MultiColumn/index.tsx @@ -23,11 +23,6 @@ function ColumnLinkItem({ item }: { item: ColumnItemType }) { } function Column({ column }: { column: ColumnType }) { - // Skip Community section since social icons are now in the brand area - if (column.title === "Community") { - return null - } - return (
{column.title}
diff --git a/apps/web-roo-code/package.json b/apps/web-roo-code/package.json index 19a51c74109..6ab0605f140 100644 --- a/apps/web-roo-code/package.json +++ b/apps/web-roo-code/package.json @@ -10,7 +10,7 @@ "postbuild": "next-sitemap --config next-sitemap.config.cjs", "start": "next start", "clean": "rimraf .next .turbo", - "test": "vitest run", + "test": "vitest run --passWithNoTests", "test:watch": "vitest" }, "dependencies": { diff --git a/apps/web-roo-code/src/components/blog/BlogContent.tsx b/apps/web-roo-code/src/components/blog/BlogContent.tsx index 37ad977b269..b10d541b6f7 100644 --- a/apps/web-roo-code/src/components/blog/BlogContent.tsx +++ b/apps/web-roo-code/src/components/blog/BlogContent.tsx @@ -3,68 +3,16 @@ import * as React from "react" import ReactMarkdown from "react-markdown" import remarkGfm from "remark-gfm" -import { Play } from "lucide-react" -import { YouTubeModal, isYouTubeUrl, extractYouTubeVideoId, extractYouTubeTimestamp } from "./YouTubeModal" - -type HastLikeNode = { - type?: unknown - tagName?: unknown - url?: unknown - properties?: unknown - children?: unknown -} - -function getNodeUrl(node: HastLikeNode): string | null { - // mdast link node (remark) - if (node.type === "link" && typeof node.url === "string") return node.url - - // hast anchor element (rehype) - if (node.type === "element" && node.tagName === "a") { - const props = node.properties as { href?: unknown } | undefined - if (typeof props?.href === "string") return props.href - } - - return null -} - -function nodeHasYouTubeLink(node: unknown): boolean { - if (!node || typeof node !== "object") return false - - const anyNode = node as HastLikeNode - const url = getNodeUrl(anyNode) - if (url && isYouTubeUrl(url)) { - return true - } - - const children = (anyNode as { children?: unknown }).children - if (Array.isArray(children)) { - return children.some(nodeHasYouTubeLink) - } - - return false -} interface BlogContentProps { /** The markdown content to render */ content: string } -/** - * State for the currently active YouTube video modal - */ -interface YouTubeModalState { - isOpen: boolean - videoId: string - startTime: number - title: string -} - /** * BlogContent component * - * Renders markdown content with special handling for YouTube links. - * YouTube links open in a modal with embedded video player instead of - * navigating away from the page. + * Renders markdown content with site-specific typography and link behavior. * * @example * ```tsx @@ -72,169 +20,81 @@ interface YouTubeModalState { * ``` */ export function BlogContent({ content }: BlogContentProps) { - const [youtubeModal, setYoutubeModal] = React.useState({ - isOpen: false, - videoId: "", - startTime: 0, - title: "", - }) - - /** - * Opens the YouTube modal with the specified video - */ - const openYouTubeModal = React.useCallback((url: string, linkText: string) => { - const videoId = extractYouTubeVideoId(url) - if (!videoId) return - - const startTime = extractYouTubeTimestamp(url) - - setYoutubeModal({ - isOpen: true, - videoId, - startTime, - title: linkText, - }) - }, []) - - /** - * Closes the YouTube modal - */ - const closeYouTubeModal = React.useCallback(() => { - setYoutubeModal((prev) => ({ ...prev, isOpen: false })) - }, []) - return ( - <> -

, - h2: ({ node: _node, ...props }) =>

, - h3: ({ node: _node, ...props }) =>

, - // Custom link component with YouTube modal support - a: ({ href, children, node: _node }) => { - const url = href ?? "" - const linkText = - typeof children === "string" - ? children - : Array.isArray(children) - ? children.join("") - : "YouTube Video" - - // Check if this is a YouTube link - if (isYouTubeUrl(url)) { - return ( - - ) - } - - // Regular external link - opens in new tab - return ( - - {children} - - ) - }, - // Styled blockquotes - blockquote: ({ node, ...props }) => { - const children = (node as { children?: unknown[] } | undefined)?.children - const lastNonTextChild = Array.isArray(children) - ? [...children].reverse().find((c) => { - if (!c || typeof c !== "object") return false - const anyChild = c as { type?: unknown } - // mdast uses "paragraph"; hast uses "element" - return anyChild.type === "paragraph" || anyChild.type === "element" - }) - : null - const isAttributedQuote = nodeHasYouTubeLink(lastNonTextChild) - - return ( -
renderer. - "[&>p]:m-0 [&>p+ p]:mt-4", - isAttributedQuote - ? [ - // Quote text reads well in italics, but the attribution line shouldn't. - "[&>p:not(:last-child)]:italic", - "[&>p:last-child]:not-italic", - ].join(" ") - : "italic", - ].join(" ")} - {...props} - /> - ) - }, - // Code blocks - code: ({ className, children, node: _node, ...props }) => { - const isInline = !className - if (isInline) { - return ( - - {children} - - ) - } +

, + h2: ({ node: _node, ...props }) =>

, + h3: ({ node: _node, ...props }) =>

, + // Regular external links open in a new tab. + a: ({ href, children }) => { + return ( + + {children} + + ) + }, + // Styled blockquotes + blockquote: ({ ...props }) => { + return ( +
renderer. + "[&>p]:m-0 [&>p+ p]:mt-4", + "italic", + ].join(" ")} + {...props} + /> + ) + }, + // Code blocks + code: ({ className, children, node: _node, ...props }) => { + const isInline = !className + if (isInline) { return ( - + {children} ) - }, - // Strong text - strong: ({ node: _node, ...props }) => , - // Paragraphs - p: ({ node: _node, ...props }) =>

, - // Lists - ul: ({ node: _node, ...props }) =>

    , - ol: ({ node: _node, ...props }) =>
      , - // Tables with zebra striping (visible in both light and dark mode) - table: ({ node: _node, ...props }) => ( -
      - - - ), - thead: ({ node: _node, ...props }) => , - tbody: ({ node: _node, ...props }) => , - tr: ({ node: _node, ...props }) => ( - - ), - th: ({ node: _node, ...props }) => ( -
      - ), - td: ({ node: _node, ...props }) => , - }}> - {content} - - - {/* YouTube Video Modal */} - - + } + return ( + + {children} + + ) + }, + // Strong text + strong: ({ node: _node, ...props }) => , + // Paragraphs + p: ({ node: _node, ...props }) =>

      , + // Lists + ul: ({ node: _node, ...props }) =>

        , + ol: ({ node: _node, ...props }) =>
          , + // Tables with zebra striping (visible in both light and dark mode) + table: ({ node: _node, ...props }) => ( +
          + + + ), + thead: ({ node: _node, ...props }) => , + tbody: ({ node: _node, ...props }) => , + tr: ({ node: _node, ...props }) => ( + + ), + th: ({ node: _node, ...props }) => ( +
          + ), + td: ({ node: _node, ...props }) => , + }}> + {content} + ) } diff --git a/apps/web-roo-code/src/components/blog/YouTubeModal.test.ts b/apps/web-roo-code/src/components/blog/YouTubeModal.test.ts deleted file mode 100644 index fed89f170bf..00000000000 --- a/apps/web-roo-code/src/components/blog/YouTubeModal.test.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { describe, it, expect } from "vitest" -import { extractYouTubeVideoId, extractYouTubeTimestamp, isYouTubeUrl } from "./YouTubeModal" - -describe("isYouTubeUrl", () => { - it("should return true for youtube.com/watch URLs", () => { - expect(isYouTubeUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ")).toBe(true) - expect(isYouTubeUrl("http://youtube.com/watch?v=dQw4w9WgXcQ")).toBe(true) - expect(isYouTubeUrl("https://youtube.com/watch?v=abc123_-XYZ")).toBe(true) - }) - - it("should return true for youtu.be URLs", () => { - expect(isYouTubeUrl("https://youtu.be/dQw4w9WgXcQ")).toBe(true) - expect(isYouTubeUrl("http://youtu.be/abc123_-XYZ")).toBe(true) - }) - - it("should return true for youtube.com/embed URLs", () => { - expect(isYouTubeUrl("https://www.youtube.com/embed/dQw4w9WgXcQ")).toBe(true) - }) - - it("should return true for youtube.com/v URLs", () => { - expect(isYouTubeUrl("https://www.youtube.com/v/dQw4w9WgXcQ")).toBe(true) - }) - - it("should return false for non-YouTube URLs", () => { - expect(isYouTubeUrl("https://www.google.com")).toBe(false) - expect(isYouTubeUrl("https://vimeo.com/123456")).toBe(false) - expect(isYouTubeUrl("https://example.com/youtube.com")).toBe(false) - }) - - it("should return false for invalid URLs", () => { - expect(isYouTubeUrl("not a url")).toBe(false) - expect(isYouTubeUrl("")).toBe(false) - }) -}) - -describe("extractYouTubeVideoId", () => { - it("should extract video ID from youtube.com/watch URLs", () => { - expect(extractYouTubeVideoId("https://www.youtube.com/watch?v=dQw4w9WgXcQ")).toBe("dQw4w9WgXcQ") - expect(extractYouTubeVideoId("https://www.youtube.com/watch?v=abc123_-XYZ&list=PLxyz")).toBe("abc123_-XYZ") - expect(extractYouTubeVideoId("https://www.youtube.com/watch?feature=share&v=dQw4w9WgXcQ")).toBe("dQw4w9WgXcQ") - }) - - it("should extract video ID from youtu.be URLs", () => { - expect(extractYouTubeVideoId("https://youtu.be/dQw4w9WgXcQ")).toBe("dQw4w9WgXcQ") - expect(extractYouTubeVideoId("https://youtu.be/abc123_-XYZ?t=42")).toBe("abc123_-XYZ") - }) - - it("should extract video ID from youtube.com/embed URLs", () => { - expect(extractYouTubeVideoId("https://www.youtube.com/embed/dQw4w9WgXcQ")).toBe("dQw4w9WgXcQ") - }) - - it("should extract video ID from youtube.com/v URLs", () => { - expect(extractYouTubeVideoId("https://www.youtube.com/v/dQw4w9WgXcQ")).toBe("dQw4w9WgXcQ") - }) - - it("should return null for non-YouTube URLs", () => { - expect(extractYouTubeVideoId("https://www.google.com")).toBeNull() - expect(extractYouTubeVideoId("https://vimeo.com/123456")).toBeNull() - }) - - it("should return null for invalid URLs", () => { - expect(extractYouTubeVideoId("not a url")).toBeNull() - expect(extractYouTubeVideoId("")).toBeNull() - }) -}) - -describe("extractYouTubeTimestamp", () => { - describe("numeric timestamps (seconds)", () => { - it("should extract timestamp in seconds from youtube.com URLs", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=42")).toBe(42) - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?t=120&v=dQw4w9WgXcQ")).toBe(120) - }) - - it("should extract timestamp from youtu.be URLs", () => { - expect(extractYouTubeTimestamp("https://youtu.be/dQw4w9WgXcQ?t=42")).toBe(42) - expect(extractYouTubeTimestamp("https://youtu.be/dQw4w9WgXcQ?t=3600")).toBe(3600) - }) - - it("should extract timestamp from start= URLs", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ&start=42")).toBe(42) - expect(extractYouTubeTimestamp("https://www.youtube.com/embed/dQw4w9WgXcQ?start=120")).toBe(120) - }) - - it("should extract timestamp from fragment (#t=) URLs", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ#t=42")).toBe(42) - }) - }) - - describe("h/m/s format timestamps", () => { - it("should parse hours, minutes, and seconds", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=1h2m3s")).toBe(3723) // 1*3600 + 2*60 + 3 - }) - - it("should parse minutes and seconds", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=2m30s")).toBe(150) // 2*60 + 30 - }) - - it("should parse seconds only", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=45s")).toBe(45) - }) - - it("should parse hours and minutes", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=1h30m")).toBe(5400) // 1*3600 + 30*60 - }) - - it("should parse hours only", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=2h")).toBe(7200) // 2*3600 - }) - - it("should be case-insensitive", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=1H2M3S")).toBe(3723) - }) - }) - - describe("colon-separated timestamps", () => { - it("should parse mm:ss format", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=1:23")).toBe(83) - }) - - it("should parse hh:mm:ss format", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=1:02:03")).toBe(3723) - }) - }) - - describe("edge cases", () => { - it("should return 0 when no timestamp is present", () => { - expect(extractYouTubeTimestamp("https://www.youtube.com/watch?v=dQw4w9WgXcQ")).toBe(0) - expect(extractYouTubeTimestamp("https://youtu.be/dQw4w9WgXcQ")).toBe(0) - }) - - it("should return 0 for non-YouTube URLs", () => { - expect(extractYouTubeTimestamp("https://www.google.com")).toBe(0) - }) - - it("should return 0 for invalid URLs", () => { - expect(extractYouTubeTimestamp("not a url")).toBe(0) - expect(extractYouTubeTimestamp("")).toBe(0) - }) - }) -}) diff --git a/apps/web-roo-code/src/components/blog/YouTubeModal.tsx b/apps/web-roo-code/src/components/blog/YouTubeModal.tsx deleted file mode 100644 index da173d9c548..00000000000 --- a/apps/web-roo-code/src/components/blog/YouTubeModal.tsx +++ /dev/null @@ -1,171 +0,0 @@ -"use client" - -import * as React from "react" -import { Dialog, DialogContent, DialogTitle } from "@/components/ui/modal" - -/** - * YouTube URL patterns and utilities - */ - -/** Regular expression to match YouTube URLs and extract video ID */ -const YOUTUBE_URL_REGEX = /(?:youtube\.com\/(?:[^/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?/\s]{11})/i - -/** - * Regular expression to extract timestamp from YouTube URLs. - * - * Supports: - * - query params: `t=123`, `t=1h2m3s`, `start=123`, `t=1:23`, `t=1:02:03` - * - fragment params: `#t=123` (less common but seen in some links) - */ -const TIMESTAMP_REGEX = /(?:[?&#](?:t|start)=)([0-9hms:]+)/i - -/** - * Extracts the video ID from a YouTube URL - * Supports various YouTube URL formats: - * - https://www.youtube.com/watch?v=VIDEO_ID - * - https://youtu.be/VIDEO_ID - * - https://www.youtube.com/embed/VIDEO_ID - * - https://www.youtube.com/v/VIDEO_ID - * - * @param url - The YouTube URL to parse - * @returns The video ID or null if not found - */ -export function extractYouTubeVideoId(url: string): string | null { - const match = url.match(YOUTUBE_URL_REGEX) - return match?.[1] ?? null -} - -/** - * Parses a YouTube timestamp string to seconds - * Supports formats like: - * - "123" (seconds) - * - "1h2m3s" (hours, minutes, seconds) - * - "2m30s" (minutes and seconds) - * - "45s" (seconds only) - * - * @param timestamp - The timestamp string - * @returns The timestamp in seconds - */ -function parseTimestampToSeconds(timestamp: string): number { - // If it's just a number, it's already in seconds - if (/^\d+$/.test(timestamp)) { - return parseInt(timestamp, 10) - } - - // Parse colon-separated formats: - // - "mm:ss" - // - "hh:mm:ss" - const colonMatch = timestamp.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/) - if (colonMatch) { - const a = parseInt(colonMatch[1] ?? "0", 10) - const b = parseInt(colonMatch[2] ?? "0", 10) - const c = colonMatch[3] ? parseInt(colonMatch[3], 10) : null - - if (c === null) return a * 60 + b - return a * 3600 + b * 60 + c - } - - // Parse h/m/s format - let totalSeconds = 0 - const hours = timestamp.match(/(\d+)h/i) - const minutes = timestamp.match(/(\d+)m/i) - const seconds = timestamp.match(/(\d+)s/i) - - if (hours?.[1]) totalSeconds += parseInt(hours[1], 10) * 3600 - if (minutes?.[1]) totalSeconds += parseInt(minutes[1], 10) * 60 - if (seconds?.[1]) totalSeconds += parseInt(seconds[1], 10) - - return totalSeconds -} - -/** - * Extracts the start time (in seconds) from a YouTube URL - * - * @param url - The YouTube URL to parse - * @returns The start time in seconds or 0 if not found - */ -export function extractYouTubeTimestamp(url: string): number { - const match = url.match(TIMESTAMP_REGEX) - if (!match?.[1]) return 0 - return parseTimestampToSeconds(match[1]) -} - -/** - * Checks if a URL is a YouTube URL - * - * @param url - The URL to check - * @returns True if the URL is a YouTube URL - */ -export function isYouTubeUrl(url: string): boolean { - return YOUTUBE_URL_REGEX.test(url) -} - -interface YouTubeModalProps { - /** Whether the modal is open */ - open: boolean - /** Callback when the modal open state changes */ - onOpenChange: (open: boolean) => void - /** The YouTube video ID */ - videoId: string - /** The start time in seconds (optional) */ - startTime?: number - /** The video title for accessibility (optional) */ - title?: string -} - -/** - * YouTubeModal component - * - * A modal dialog that embeds a YouTube video player. - * Supports starting playback at a specific timestamp. - * - * @example - * ```tsx - * - * ``` - */ -export function YouTubeModal({ open, onOpenChange, videoId, startTime = 0, title }: YouTubeModalProps) { - // Build the YouTube embed URL with parameters - const embedUrl = React.useMemo(() => { - const params = new URLSearchParams({ - autoplay: "1", - rel: "0", // Don't show related videos from other channels - modestbranding: "1", // Minimal YouTube branding - }) - - if (startTime > 0) { - params.set("start", startTime.toString()) - } - - return `https://www.youtube.com/embed/${videoId}?${params.toString()}` - }, [videoId, startTime]) - - return ( - - - {/* Visually hidden title for accessibility */} - {title ?? "YouTube Video"} -
          - {/* 16:9 aspect ratio container */} - {open && ( -