diff --git a/.gitignore b/.gitignore
index 1dbcdc6a362..7a3d553aea4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,6 +42,11 @@ logs
# Turborepo
.turbo
+# Nix
+result
+result-*
+.direnv
+
# IntelliJ and Qodo plugin folders
.idea/
.qodo/
diff --git a/.roo/commands/roo-resolve-conflicts.md b/.roo/commands/roo-resolve-conflicts.md
index 4a3a80bdd34..38b2038658c 100644
--- a/.roo/commands/roo-resolve-conflicts.md
+++ b/.roo/commands/roo-resolve-conflicts.md
@@ -11,10 +11,10 @@ Resolve merge conflicts for a specific pull request by analyzing git history, co
1. **Provide a PR number** (e.g., `#123` or just `123`)
2. The workflow will automatically:
- - Fetch PR information (title, description, branches)
- - Checkout the PR branch
- - Rebase onto the target branch to reveal conflicts
- - Analyze and resolve conflicts using git history
+ - Fetch PR information (title, description, branches)
+ - Checkout the PR branch
+ - Rebase onto the target branch to reveal conflicts
+ - Analyze and resolve conflicts using git history
## Workflow Steps
@@ -39,6 +39,7 @@ git status --porcelain | grep "^UU"
### 3. Analyze Each Conflict
For each conflicted file:
+
- Read the conflict markers
- Run `git blame` on conflicting sections
- Fetch commit messages for context
@@ -47,6 +48,7 @@ For each conflicted file:
### 4. Apply Resolution Strategy
Based on the analysis:
+
- **Bugfixes** generally take precedence over features
- **Recent changes** are often more relevant (unless older is a security fix)
- **Combine** non-conflicting changes when possible
diff --git a/.roo/commands/roo-translate.md b/.roo/commands/roo-translate.md
index 3f974948946..28a8dc67c84 100644
--- a/.roo/commands/roo-translate.md
+++ b/.roo/commands/roo-translate.md
@@ -9,32 +9,35 @@ Perform translation and localization tasks for the Roo Code extension. This comm
## Quick Start
1. **Identify the translation scope:**
- - If a specific language code is provided (e.g., `de`, `zh-CN`), focus on that language
- - If `all` is specified, translate to all supported languages
- - If a string key is provided, locate and translate that specific string
- - If a file path is provided, work with that translation file
+
+ - If a specific language code is provided (e.g., `de`, `zh-CN`), focus on that language
+ - If `all` is specified, translate to all supported languages
+ - If a string key is provided, locate and translate that specific string
+ - If a file path is provided, work with that translation file
2. **Supported languages:** ca, de, en, es, fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, tr, vi, zh-CN, zh-TW
3. **Translation locations:**
- - Core Extension: `src/i18n/locales/`
- - WebView UI: `webview-ui/src/i18n/locales/`
+ - Core Extension: `src/i18n/locales/`
+ - WebView UI: `webview-ui/src/i18n/locales/`
## Workflow
1. If adding new strings:
- - Add the English string first
- - Ask for confirmation before translating to other languages
- - Use `apply_diff` for efficient file updates
+
+ - Add the English string first
+ - Ask for confirmation before translating to other languages
+ - Use `apply_diff` for efficient file updates
2. If updating existing strings:
- - Identify all affected language files
- - Update English first, then propagate changes
+
+ - Identify all affected language files
+ - Update English first, then propagate changes
3. Validate your changes:
- ```bash
- node scripts/find-missing-translations.js
- ```
+ ```bash
+ node scripts/find-missing-translations.js
+ ```
## Key Guidelines
diff --git a/.roo/skills/roo-conflict-resolution/SKILL.md b/.roo/skills/roo-conflict-resolution/SKILL.md
index 7b123a8107b..4807180522f 100644
--- a/.roo/skills/roo-conflict-resolution/SKILL.md
+++ b/.roo/skills/roo-conflict-resolution/SKILL.md
@@ -105,16 +105,16 @@ Verify the resolution and prepare for commit:
## Git Commands Reference
-| Command | Purpose |
-|---------|---------|
-| `gh pr checkout [PR_NUMBER] --force` | Force checkout the PR branch |
-| `git fetch origin main` | Get the latest main branch |
-| `GIT_EDITOR=true git rebase origin/main` | Rebase current branch onto main (non-interactive) |
-| `git blame -L [start],[end] [commit] -- [file]` | Get commit information for specific lines |
-| `git show --format="%H%n%an%n%ae%n%ad%n%s%n%b" --no-patch [sha]` | Get commit metadata |
-| `git show [sha] -- [file]` | Get the actual changes made in a commit |
-| `git ls-files -u` | List unmerged files with stage information |
-| `GIT_EDITOR=true git rebase --continue` | Continue rebase after resolving conflicts |
+| Command | Purpose |
+| ---------------------------------------------------------------- | ------------------------------------------------- |
+| `gh pr checkout [PR_NUMBER] --force` | Force checkout the PR branch |
+| `git fetch origin main` | Get the latest main branch |
+| `GIT_EDITOR=true git rebase origin/main` | Rebase current branch onto main (non-interactive) |
+| `git blame -L [start],[end] [commit] -- [file]` | Get commit information for specific lines |
+| `git show --format="%H%n%an%n%ae%n%ad%n%s%n%b" --no-patch [sha]` | Get commit metadata |
+| `git show [sha] -- [file]` | Get the actual changes made in a commit |
+| `git ls-files -u` | List unmerged files with stage information |
+| `GIT_EDITOR=true git rebase --continue` | Continue rebase after resolving conflicts |
## Best Practices
@@ -141,12 +141,12 @@ Look beyond the immediate conflict to understand related changes in tests, docum
## Resolution Heuristics
-| Category | Rule | Exception |
-|----------|------|-----------|
-| Bugfix vs Feature | Bugfixes generally take precedence | When features include the fix |
-| Recent vs Old | More recent changes are often more relevant | When older changes are security patches |
-| Test Updates | Changes with test updates are likely more complete | - |
-| Formatting vs Logic | Logic changes take precedence over formatting | - |
+| Category | Rule | Exception |
+| ------------------- | -------------------------------------------------- | --------------------------------------- |
+| Bugfix vs Feature | Bugfixes generally take precedence | When features include the fix |
+| Recent vs Old | More recent changes are often more relevant | When older changes are security patches |
+| Test Updates | Changes with test updates are likely more complete | - |
+| Formatting vs Logic | Logic changes take precedence over formatting | - |
## Common Pitfalls
diff --git a/.roo/skills/roo-translation/SKILL.md b/.roo/skills/roo-translation/SKILL.md
index 2660e39ba90..dafffb78c97 100644
--- a/.roo/skills/roo-translation/SKILL.md
+++ b/.roo/skills/roo-translation/SKILL.md
@@ -29,10 +29,10 @@ Localize all strings into the following locale files: ca, de, en, es, fr, hi, id
The VSCode extension has two main areas that require localization:
-| Component | Path | Purpose |
-|-----------|------|---------|
-| **Core Extension** | `src/i18n/locales/` | Extension backend strings |
-| **WebView UI** | `webview-ui/src/i18n/locales/` | User interface strings |
+| Component | Path | Purpose |
+| ------------------ | ------------------------------ | ------------------------- |
+| **Core Extension** | `src/i18n/locales/` | Extension backend strings |
+| **WebView UI** | `webview-ui/src/i18n/locales/` | User interface strings |
## Brand Voice, Tone, and Word Choice
@@ -77,17 +77,19 @@ This guidance file is loaded at runtime and should be consulted for the latest b
### Trans Component Example
Translation string:
+
```json
"changeSettings": "You can always change this at the bottom of the settings"
```
React component usage:
+
```tsx
- }}
+ i18nKey="welcome:telemetry.changeSettings"
+ components={{
+ settingsLink: ,
+ }}
/>
```
@@ -105,19 +107,21 @@ React component usage:
1. First add or modify English strings, then ask for confirmation before translating to all other languages
2. Use this process for each localization task:
- 1. Identify where the string appears in the UI/codebase
- 2. Understand the context and purpose of the string
- 3. Update English translation first
- 4. Use the `search_files` tool to find JSON keys that are near new keys in English translations but do not yet exist in the other language files for `apply_diff` SEARCH context
- 5. Create appropriate translations for all other supported languages utilizing the `search_files` result using `apply_diff` without reading every file
- 6. Do not output the translated text into the chat, just modify the files
- 7. Validate your changes with the missing translations script
+
+ 1. Identify where the string appears in the UI/codebase
+ 2. Understand the context and purpose of the string
+ 3. Update English translation first
+ 4. Use the `search_files` tool to find JSON keys that are near new keys in English translations but do not yet exist in the other language files for `apply_diff` SEARCH context
+ 5. Create appropriate translations for all other supported languages utilizing the `search_files` result using `apply_diff` without reading every file
+ 6. Do not output the translated text into the chat, just modify the files
+ 7. Validate your changes with the missing translations script
3. Flag or comment if an English source string is incomplete ("please see this...") to avoid truncated or unclear translations
4. For UI elements, distinguish between:
- - Button labels: Use short imperative commands ("Save", "Cancel")
- - Tooltip text: Can be slightly more descriptive
+
+ - Button labels: Use short imperative commands ("Save", "Cancel")
+ - Tooltip text: Can be slightly more descriptive
5. Preserve the original perspective: If text is a user command directed at the software, ensure the translation maintains this direction
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 494d88331bc..cce5fc91552 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -177,6 +177,7 @@
- Fix: Reset invalid model selection when using OpenAI Codex provider (PR #10777 by @hannesrudolph)
- Fix: Add openai-codex to providers that don't require an API key (PR #10786 by @roomote)
- Fix: Detect Gemini models with space-separated names for proper thought signature injection in LiteLLM (PR #10787 by @daniel-lxs)
+- Add Nix flake for reproducible development environment with Node.js, pnpm, and native build dependencies
## [3.41.1] - 2026-01-16
diff --git a/README.md b/README.md
index 6f024db235e..56c047c5ecd 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,7 @@
- [简体中文](locales/zh-CN/README.md)
- [繁體中文](locales/zh-TW/README.md)
- ...
-
+
---
@@ -148,6 +148,32 @@ If you prefer to install the VSIX package manually:
code --install-extension bin/roo-cline-.vsix
```
+### Nix Flake
+
+A `flake.nix` is provided for [Nix](https://nixos.org/) users:
+
+```sh
+nix develop # Enter dev shell with all dependencies
+pnpm install # Install npm packages
+pnpm build # Build the project
+pnpm test # Run tests
+pnpm vsix # Create VSIX package
+```
+
+To build and install the extension directly:
+
+```sh
+nix build .#vsix && code --install-extension result/*.vsix
+```
+
+The dev shell provides Node.js 20.x, pnpm, ripgrep, and build tools for native modules.
+
+After updating dependencies, run `nix run .#update-deps` to update `flake.lock` and the pnpm dependency hash.
+
+If flakes aren't enabled, prefix commands with: `nix --extra-experimental-features 'nix-command flakes' `
+
+> **Note:** Roo Code is also available as a pre-built extension in [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/applications/editors/vscode/extensions/rooveterinaryinc.roo-cline/default.nix) via `vscode-extensions.rooveterinaryinc.roo-cline`.
+
---
We use [changesets](https://github.com/changesets/changesets) for versioning and publishing. Check our `CHANGELOG.md` for release notes.
diff --git a/apps/web-roo-code/src/app/pricing/page.tsx b/apps/web-roo-code/src/app/pricing/page.tsx
index a46b5c67cc5..6851b47b6a1 100644
--- a/apps/web-roo-code/src/app/pricing/page.tsx
+++ b/apps/web-roo-code/src/app/pricing/page.tsx
@@ -291,11 +291,7 @@ export default function PricingPage() {
To pay for Cloud Agents running time (${PRICE_CREDITS}/hour)
To pay for AI model inference costs (
-
+
varies by model
)
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 00000000000..5a9df81916a
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,61 @@
+{
+ "nodes": {
+ "flake-utils": {
+ "inputs": {
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1731533236,
+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1768564909,
+ "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "nixpkgs": "nixpkgs"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 00000000000..1d1bd1736a9
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,375 @@
+# Roo Code Nix Flake
+#
+# Provides a reproducible development environment
+#
+# Usage:
+# nix develop # Enter dev shell
+# nix run # Show welcome banner
+# nix fmt # Format nix files
+# nix flake check # Run all checks (lint, typecheck, test)
+#
+# Build and install extension:
+# nix build .#vsix && code --install-extension result/*.vsix
+#
+# Inside dev shell:
+# pnpm install # Install npm packages
+# pnpm build # Build the project
+# pnpm test # Run tests
+# pnpm vsix # Create VS Code extension
+# eslint # Lint files (eslint and eslint_d available)
+# pnpm lint # Run linting via pnpm scripts
+#
+# Maintenance:
+# nix run .#update-deps # Update flake.lock and pnpmDeps hash
+#
+# If flakes aren't enabled, prefix commands with:
+# nix --extra-experimental-features 'nix-command flakes'
+#
+# See README.md section "Nix Flake" for more information
+
+{
+ description = "Roo Code - AI-Powered Dev Team, Right in Your Editor";
+
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+ flake-utils.url = "github:numtide/flake-utils";
+ };
+
+ outputs =
+ {
+ self,
+ nixpkgs,
+ flake-utils,
+ }:
+ let
+ versionFromPackageJson = (builtins.fromJSON (builtins.readFile ./src/package.json)).version;
+
+ in
+ flake-utils.lib.eachDefaultSystem (
+ system:
+ let
+ pkgs = nixpkgs.legacyPackages.${system};
+ lib = pkgs.lib;
+
+ nodejs = pkgs.nodejs_20;
+ # Use pnpm_9 if available, otherwise fall back to pnpm
+ # pnpm 10.26.1 is available and newer than required 10.8.1, so we'll use that
+ pnpm = pkgs.pnpm;
+
+ ignoredPaths = [
+ ".direnv"
+ "result"
+ "result-dev"
+ "node_modules"
+ ".turbo"
+ "dist"
+ "bin"
+ ".vscode"
+ ".cursor"
+ ];
+
+ src = lib.cleanSourceWith {
+ src = lib.cleanSource ./.;
+ filter =
+ path: type:
+ let
+ baseName = builtins.baseNameOf path;
+ in
+ !(builtins.elem baseName ignoredPaths);
+ };
+
+ # Chromium is only available on Linux in nixpkgs
+ chromiumPath = if pkgs.stdenv.isLinux then "${pkgs.chromium}/bin/chromium" else null;
+
+ basePnpmAttrs = {
+ inherit src;
+ strictDeps = true;
+ nativeBuildInputs = [
+ nodejs
+ pnpm
+ pkgs.pnpmConfigHook
+ ];
+ pnpmDeps = self.packages.${system}.pnpmDeps;
+ };
+
+ roo-code-welcome = pkgs.writeShellApplication {
+ name = "roo-code-welcome";
+ runtimeInputs = [
+ pkgs.jp2a
+ nodejs
+ pnpm
+ ];
+ text = ''
+ echo ""
+ if [ -f "./src/assets/images/roo.png" ]; then
+ jp2a --colors --width=40 ./src/assets/images/roo.png 2>/dev/null || echo "🦘 Roo Code"
+ else
+ echo "🦘 Roo Code Development Environment"
+ fi
+ echo ""
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
+ echo "Node.js: $(node --version)"
+ echo "pnpm: $(pnpm --version)"
+ echo ""
+ echo "📦 pnpm install - Install dependencies"
+ echo "🔧 pnpm build - Build the project"
+ echo "📋 pnpm test - Run tests (from root)"
+ echo "📦 pnpm vsix - Create VS Code extension"
+ echo ""
+ echo "💡 Tip: For webview-ui tests, run from webview-ui directory:"
+ echo " cd webview-ui && pnpm test "
+ echo ""
+ echo "For VS Code debugging: Press F5"
+ echo ""
+ '';
+ };
+
+ mkPnpmCheck =
+ name: script: extraAttrs:
+ pkgs.stdenvNoCC.mkDerivation (
+ basePnpmAttrs
+ // {
+ name = "roo-code-${name}";
+ buildPhase = ''
+ runHook preBuild
+ export HOME=$TMPDIR
+ # Disable pnpm self-management (pnpm is provided by Nix)
+ echo "manage-package-manager-versions=false" >> .npmrc
+ pnpm run ${script}
+ runHook postBuild
+ '';
+ installPhase = ''
+ mkdir -p $out
+ echo "${name} passed" > $out/result
+ '';
+ }
+ // extraAttrs
+ );
+
+ in
+ {
+ formatter = pkgs.nixfmt-tree;
+
+ devShells.default = pkgs.mkShell {
+ name = "roo-code-dev";
+
+ packages =
+ with pkgs;
+ [
+ nodejs
+ pnpm
+ git
+ python3
+ pkg-config
+ gnumake
+ # turbo is installed via pnpm as a devDependency (version 2.7.6 in package.json)
+ # We don't include system turbo to avoid version conflicts
+ # Users should run 'pnpm install' first to get the correct turbo version
+ ripgrep
+ jp2a
+ nodePackages.typescript-language-server
+ nodePackages.eslint
+ nodePackages.eslint_d
+ nil
+ ]
+ ++ lib.optionals stdenv.isLinux [
+ chromium
+ ];
+
+ buildInputs =
+ with pkgs;
+ [
+ openssl
+ ]
+ ++ lib.optionals stdenv.isLinux [
+ stdenv.cc.cc.lib
+ ];
+
+ env = {
+ PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = "1";
+ RIPGREP_PATH = "${pkgs.ripgrep}/bin/rg";
+ NODE_ENV = "development";
+ }
+ // lib.optionalAttrs pkgs.stdenv.isLinux {
+ PUPPETEER_EXECUTABLE_PATH = chromiumPath;
+ };
+
+ shellHook = ''
+ ${lib.getExe roo-code-welcome}
+ '';
+ };
+
+ packages =
+ let
+ version = versionFromPackageJson;
+ in
+ {
+ # Pre-fetch pnpm dependencies (for reproducible builds)
+ # Update hash when pnpm-lock.yaml changes:
+ # 1. Set hash = lib.fakeHash;
+ # 2. Run: nix build .#pnpmDeps
+ # 3. Copy the "got:" hash from the error message
+ pnpmDeps = pkgs.fetchPnpmDeps {
+ pname = "roo-code-pnpm-deps";
+ inherit version src;
+ fetcherVersion = 2;
+ hash = "sha256-l6MAzyVUiiqiKLvacP0tZZs4WNlcmm3TrtRwauE3TLE=";
+ };
+
+ vsix = pkgs.stdenvNoCC.mkDerivation (
+ basePnpmAttrs
+ // {
+ pname = "roo-code-vsix";
+ inherit version;
+
+ buildPhase = ''
+ runHook preBuild
+ export HOME=$TMPDIR
+ # Disable pnpm self-management (pnpm is provided by Nix)
+ echo "manage-package-manager-versions=false" >> .npmrc
+ pnpm run vsix
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out
+ cp -v bin/*.vsix $out/
+ runHook postInstall
+ '';
+
+ meta = with lib; {
+ description = "AI-powered autonomous coding agent that lives in your editor";
+ homepage = "https://github.com/RooCodeInc/Roo-Code";
+ license = licenses.asl20;
+ platforms = platforms.unix;
+ };
+ }
+ );
+
+ default = self.packages.${system}.vsix;
+ };
+
+ apps = {
+ welcome = {
+ type = "app";
+ program = lib.getExe roo-code-welcome;
+ };
+
+ build-vsix = {
+ type = "app";
+ program = lib.getExe (
+ pkgs.writeShellApplication {
+ name = "build-vsix";
+ text = ''
+ echo "Building VSIX..."
+ nix build .#vsix --print-out-paths
+ '';
+ }
+ );
+ };
+
+ update-deps = {
+ type = "app";
+ program = lib.getExe (
+ pkgs.writeShellApplication {
+ name = "update-deps";
+ runtimeInputs = [
+ pkgs.gnused
+ pkgs.gnugrep
+ ];
+ text = ''
+ # Safety check: ensure flake.nix has no uncommitted changes
+ if ! git diff --quiet flake.nix 2>/dev/null; then
+ echo "Error: flake.nix has uncommitted changes. Commit or stash them first."
+ exit 1
+ fi
+
+ echo "==> Updating flake inputs (nixpkgs, flake-utils)..."
+ nix flake update
+
+ echo ""
+ echo "==> Updating pnpmDeps hash..."
+
+ # Set hash to empty to trigger rebuild
+ sed -i 's|hash = "sha256-[^"]*";|hash = "";|' flake.nix
+
+ # Build and capture the error output
+ if output=$(nix build .#pnpmDeps 2>&1); then
+ echo "Build succeeded - hash unchanged"
+ # Restore the original hash since build succeeded
+ git checkout flake.nix 2>/dev/null || true
+ exit 0
+ fi
+
+ # Extract the correct hash from "got: sha256-..." (with fallback patterns)
+ new_hash=$(echo "$output" | grep -oP 'got:\s+\Ksha256-[A-Za-z0-9+/=]+' | head -1)
+
+ # Fallback: try alternative pattern if first didn't match
+ if [ -z "$new_hash" ]; then
+ new_hash=$(echo "$output" | grep -oE 'sha256-[A-Za-z0-9+/=]+' | tail -1)
+ fi
+
+ if [ -z "$new_hash" ]; then
+ echo "Error: Could not extract hash from build output"
+ echo "$output"
+ # Restore flake.nix since we failed
+ git checkout flake.nix 2>/dev/null || true
+ exit 1
+ fi
+
+ # Update flake.nix with the new hash
+ sed -i "s|hash = \"\";|hash = \"$new_hash\";|" flake.nix
+
+ echo "Updated pnpmDeps hash to: $new_hash"
+ echo ""
+ echo "Run 'nix fmt' to format, then commit flake.nix and flake.lock"
+ '';
+ }
+ );
+ };
+
+ default = self.apps.${system}.welcome;
+ };
+
+ checks = {
+ lint = mkPnpmCheck "lint" "lint" { };
+ typecheck = mkPnpmCheck "typecheck" "check-types" { };
+ test = mkPnpmCheck "test" "test" (
+ {
+ CI = "true";
+ PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = "1";
+ }
+ // lib.optionalAttrs pkgs.stdenv.isLinux {
+ nativeBuildInputs = basePnpmAttrs.nativeBuildInputs ++ [ pkgs.chromium ];
+ PUPPETEER_EXECUTABLE_PATH = chromiumPath;
+ }
+ );
+
+ format = pkgs.stdenvNoCC.mkDerivation {
+ name = "roo-code-format-check";
+ src = ./.;
+ strictDeps = true;
+
+ nativeBuildInputs = [ pkgs.nixfmt-tree ];
+
+ buildPhase = ''
+ runHook preBuild
+ nixfmt --check flake.nix
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ mkdir -p $out
+ echo "Format check passed" > $out/result
+ '';
+ };
+ };
+ }
+ )
+ // {
+ overlays.default = final: prev: {
+ roo-code-vsix = self.packages.${final.system}.vsix;
+ };
+ };
+}
diff --git a/locales/ca/README.md b/locales/ca/README.md
index be4aae4cc0b..31412494eab 100644
--- a/locales/ca/README.md
+++ b/locales/ca/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/de/README.md b/locales/de/README.md
index 634996646d2..d55d84abb3a 100644
--- a/locales/de/README.md
+++ b/locales/de/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/es/README.md b/locales/es/README.md
index 67641511493..f044c3ef92c 100644
--- a/locales/es/README.md
+++ b/locales/es/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/fr/README.md b/locales/fr/README.md
index 36e693f0414..f8596d0dd23 100644
--- a/locales/fr/README.md
+++ b/locales/fr/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/hi/README.md b/locales/hi/README.md
index 27cb624213c..58d05ad3f0a 100644
--- a/locales/hi/README.md
+++ b/locales/hi/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/id/README.md b/locales/id/README.md
index 0d208c18a39..872c393e84c 100644
--- a/locales/id/README.md
+++ b/locales/id/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/it/README.md b/locales/it/README.md
index 69a7393967e..eaf6843a2c9 100644
--- a/locales/it/README.md
+++ b/locales/it/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/ja/README.md b/locales/ja/README.md
index dd5332b9619..8217fe2e5f0 100644
--- a/locales/ja/README.md
+++ b/locales/ja/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/ko/README.md b/locales/ko/README.md
index 1070244b783..133fa315250 100644
--- a/locales/ko/README.md
+++ b/locales/ko/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/nl/README.md b/locales/nl/README.md
index 52e7138f8c7..4ab74bb297c 100644
--- a/locales/nl/README.md
+++ b/locales/nl/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/pl/README.md b/locales/pl/README.md
index 8f79597598f..c1aa50257fa 100644
--- a/locales/pl/README.md
+++ b/locales/pl/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/pt-BR/README.md b/locales/pt-BR/README.md
index 50269e00ed8..def50a82f95 100644
--- a/locales/pt-BR/README.md
+++ b/locales/pt-BR/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/ru/README.md b/locales/ru/README.md
index a323ff417c2..161cfd8d495 100644
--- a/locales/ru/README.md
+++ b/locales/ru/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/tr/README.md b/locales/tr/README.md
index 2847a23c068..a9a52fa1755 100644
--- a/locales/tr/README.md
+++ b/locales/tr/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/vi/README.md b/locales/vi/README.md
index aa9b4ff6746..cbe82367b13 100644
--- a/locales/vi/README.md
+++ b/locales/vi/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/zh-CN/README.md b/locales/zh-CN/README.md
index ef26871f316..b88ad8d8970 100644
--- a/locales/zh-CN/README.md
+++ b/locales/zh-CN/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/zh-TW/README.md b/locales/zh-TW/README.md
index db94c425c9d..243abb22f28 100644
--- a/locales/zh-TW/README.md
+++ b/locales/zh-TW/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/package.json b/package.json
index de8dff751cb..c4b90743408 100644
--- a/package.json
+++ b/package.json
@@ -46,7 +46,7 @@
"prettier": "^3.4.2",
"rimraf": "^6.0.1",
"tsx": "^4.19.3",
- "turbo": "^2.5.6",
+ "turbo": "^2.7.6",
"typescript": "5.8.3"
},
"lint-staged": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 42a502c8c52..3d47d0e517a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -75,8 +75,8 @@ importers:
specifier: ^4.19.3
version: 4.19.4
turbo:
- specifier: ^2.5.6
- version: 2.5.6
+ specifier: ^2.7.6
+ version: 2.7.6
typescript:
specifier: 5.8.3
version: 5.8.3
@@ -543,7 +543,7 @@ importers:
version: 5.2.0(eslint@9.27.0(jiti@2.4.2))
eslint-plugin-turbo:
specifier: ^2.4.4
- version: 2.5.6(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.6)
+ version: 2.5.6(eslint@9.27.0(jiti@2.4.2))(turbo@2.7.6)
globals:
specifier: ^16.0.0
version: 16.1.0
@@ -10228,38 +10228,38 @@ packages:
resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
- turbo-darwin-64@2.5.6:
- resolution: {integrity: sha512-3C1xEdo4aFwMJAPvtlPqz1Sw/+cddWIOmsalHFMrsqqydcptwBfu26WW2cDm3u93bUzMbBJ8k3zNKFqxJ9ei2A==}
+ turbo-darwin-64@2.7.6:
+ resolution: {integrity: sha512-bYu0qnWju2Ha3EbIkPCk1SMLT3sltKh1P/Jy5FER6BmH++H5z+T5MHh3W1Xoers9rk4N1VdKvog9FO1pxQyjhw==}
cpu: [x64]
os: [darwin]
- turbo-darwin-arm64@2.5.6:
- resolution: {integrity: sha512-LyiG+rD7JhMfYwLqB6k3LZQtYn8CQQUePbpA8mF/hMLPAekXdJo1g0bUPw8RZLwQXUIU/3BU7tXENvhSGz5DPA==}
+ turbo-darwin-arm64@2.7.6:
+ resolution: {integrity: sha512-KCxTf3Y1hgNLYIWRLw8bwH8Zie9RyCGoxAlXYsCBI/YNqBSR+ZZK9KYzFxAqDaVaNvTwLFv3rJRGsXOFWg4+Uw==}
cpu: [arm64]
os: [darwin]
- turbo-linux-64@2.5.6:
- resolution: {integrity: sha512-GOcUTT0xiT/pSnHL4YD6Yr3HreUhU8pUcGqcI2ksIF9b2/r/kRHwGFcsHgpG3+vtZF/kwsP0MV8FTlTObxsYIA==}
+ turbo-linux-64@2.7.6:
+ resolution: {integrity: sha512-vjoU8zIfNgvJR3cMitgw7inEoi6bmuVuFawDl5yKtxjAEhDktFdRBpGS3WojD4l3BklBbIK689ssXcGf21LxRA==}
cpu: [x64]
os: [linux]
- turbo-linux-arm64@2.5.6:
- resolution: {integrity: sha512-10Tm15bruJEA3m0V7iZcnQBpObGBcOgUcO+sY7/2vk1bweW34LMhkWi8svjV9iDF68+KJDThnYDlYE/bc7/zzQ==}
+ turbo-linux-arm64@2.7.6:
+ resolution: {integrity: sha512-TcMpBvTqZf+1DptrVYLbZls7WY1UVNDTGaf0bo7/GCgWYv5eZHCVo4Td7kCJeDU4glbXg67REX0md0S0V6ghMg==}
cpu: [arm64]
os: [linux]
- turbo-windows-64@2.5.6:
- resolution: {integrity: sha512-FyRsVpgaj76It0ludwZsNN40ytHN+17E4PFJyeliBEbxrGTc5BexlXVpufB7XlAaoaZVxbS6KT8RofLfDRyEPg==}
+ turbo-windows-64@2.7.6:
+ resolution: {integrity: sha512-1/MhkYldiihjneY8QnnDMbAkHXn/udTWSVYS94EMlkE9AShozsLTTOT1gDOpX06EfEW5njP09suhMvxbvwuwpQ==}
cpu: [x64]
os: [win32]
- turbo-windows-arm64@2.5.6:
- resolution: {integrity: sha512-j/tWu8cMeQ7HPpKri6jvKtyXg9K1gRyhdK4tKrrchH8GNHscPX/F71zax58yYtLRWTiK04zNzPcUJuoS0+v/+Q==}
+ turbo-windows-arm64@2.7.6:
+ resolution: {integrity: sha512-0wDVnUJLFAWm4ZzOQFDkbyyUqaszorTGf3Rdc22IRIyJTTLd6ajqdb+cWD89UZ1RKr953+PZR1gqgWQY4PDuhA==}
cpu: [arm64]
os: [win32]
- turbo@2.5.6:
- resolution: {integrity: sha512-gxToHmi9oTBNB05UjUsrWf0OyN5ZXtD0apOarC1KIx232Vp3WimRNy3810QzeNSgyD5rsaIDXlxlbnOzlouo+w==}
+ turbo@2.7.6:
+ resolution: {integrity: sha512-PO9AvJLEsNLO+EYhF4zB+v10hOjsJe5kJW+S6tTbRv+TW7gf1Qer4mfjP9h3/y9h8ZiPvOrenxnEgDtFgaM5zw==}
hasBin: true
turndown@7.2.0:
@@ -16627,11 +16627,11 @@ snapshots:
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
- eslint-plugin-turbo@2.5.6(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.6):
+ eslint-plugin-turbo@2.5.6(eslint@9.27.0(jiti@2.4.2))(turbo@2.7.6):
dependencies:
dotenv: 16.0.3
eslint: 9.27.0(jiti@2.4.2)
- turbo: 2.5.6
+ turbo: 2.7.6
eslint-scope@8.3.0:
dependencies:
@@ -21275,32 +21275,32 @@ snapshots:
tunnel@0.0.6: {}
- turbo-darwin-64@2.5.6:
+ turbo-darwin-64@2.7.6:
optional: true
- turbo-darwin-arm64@2.5.6:
+ turbo-darwin-arm64@2.7.6:
optional: true
- turbo-linux-64@2.5.6:
+ turbo-linux-64@2.7.6:
optional: true
- turbo-linux-arm64@2.5.6:
+ turbo-linux-arm64@2.7.6:
optional: true
- turbo-windows-64@2.5.6:
+ turbo-windows-64@2.7.6:
optional: true
- turbo-windows-arm64@2.5.6:
+ turbo-windows-arm64@2.7.6:
optional: true
- turbo@2.5.6:
+ turbo@2.7.6:
optionalDependencies:
- turbo-darwin-64: 2.5.6
- turbo-darwin-arm64: 2.5.6
- turbo-linux-64: 2.5.6
- turbo-linux-arm64: 2.5.6
- turbo-windows-64: 2.5.6
- turbo-windows-arm64: 2.5.6
+ turbo-darwin-64: 2.7.6
+ turbo-darwin-arm64: 2.7.6
+ turbo-linux-64: 2.7.6
+ turbo-linux-arm64: 2.7.6
+ turbo-windows-64: 2.7.6
+ turbo-windows-arm64: 2.7.6
turndown@7.2.0:
dependencies: