diff --git a/.changeset/config.json b/.changeset/config.json index 310bc510947..f69a7d1c34d 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -7,5 +7,5 @@ "access": "restricted", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": ["@roo-code/cli"] + "ignore": ["@klaus-code/cli"] } diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e83e44cd66d..e32452bacb6 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,5 +1,5 @@ -### Roo Code Task Context (Optional) +### Klaus Code Task Context (Optional) diff --git a/.github/workflows/evals.yml b/.github/workflows/evals.yml index b99fd7659ef..3c734e4b7e5 100644 --- a/.github/workflows/evals.yml +++ b/.github/workflows/evals.yml @@ -64,10 +64,10 @@ jobs: docker compose run --rm runner docker ps - name: Run database migrations - run: docker compose run --rm runner pnpm --filter @roo-code/evals db:migrate + run: docker compose run --rm runner pnpm --filter @klaus-code/evals db:migrate - name: Run evals - run: docker compose run --rm runner pnpm --filter @roo-code/evals cli --ci + run: docker compose run --rm runner pnpm --filter @klaus-code/evals cli --ci - name: Cleanup if: always() diff --git a/.github/workflows/website-deploy.yml b/.github/workflows/website-deploy.yml deleted file mode 100644 index 20eea4288a9..00000000000 --- a/.github/workflows/website-deploy.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Deploy roocode.com - -on: - push: - branches: - - main - paths: - - 'apps/web-roo-code/**' - workflow_dispatch: - -env: - VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} - -jobs: - check-secrets: - runs-on: ubuntu-latest - outputs: - has-vercel-token: ${{ steps.check.outputs.has-vercel-token }} - steps: - - name: Check if VERCEL_TOKEN exists - id: check - run: | - if [ -n "${{ secrets.VERCEL_TOKEN }}" ]; then - echo "has-vercel-token=true" >> $GITHUB_OUTPUT - else - echo "has-vercel-token=false" >> $GITHUB_OUTPUT - fi - - deploy: - runs-on: ubuntu-latest - needs: check-secrets - if: ${{ needs.check-secrets.outputs.has-vercel-token == 'true' }} - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Setup Node.js and pnpm - uses: ./.github/actions/setup-node-pnpm - - name: Install Vercel CLI - run: npm install --global vercel@canary - - name: Pull Vercel Environment Information - run: npx vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} - - name: Build Project Artifacts - run: npx vercel build --prod --token=${{ secrets.VERCEL_TOKEN }} - - name: Deploy Project Artifacts to Vercel - run: npx vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }} diff --git a/.github/workflows/website-preview.yml b/.github/workflows/website-preview.yml deleted file mode 100644 index 65cf3e54189..00000000000 --- a/.github/workflows/website-preview.yml +++ /dev/null @@ -1,89 +0,0 @@ -name: Preview roocode.com - -on: - push: - branches-ignore: - - main - paths: - - "apps/web-roo-code/**" - pull_request: - paths: - - "apps/web-roo-code/**" - workflow_dispatch: - -env: - VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} - -jobs: - check-secrets: - runs-on: ubuntu-latest - outputs: - has-vercel-token: ${{ steps.check.outputs.has-vercel-token }} - steps: - - name: Check if VERCEL_TOKEN exists - id: check - run: | - if [ -n "${{ secrets.VERCEL_TOKEN }}" ]; then - echo "has-vercel-token=true" >> $GITHUB_OUTPUT - else - echo "has-vercel-token=false" >> $GITHUB_OUTPUT - fi - - preview: - runs-on: ubuntu-latest - needs: check-secrets - if: ${{ needs.check-secrets.outputs.has-vercel-token == 'true' }} - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Setup Node.js and pnpm - uses: ./.github/actions/setup-node-pnpm - - name: Install Vercel CLI - run: npm install --global vercel@canary - - name: Pull Vercel Environment Information - run: npx vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} - - name: Build Project Artifacts - run: npx vercel build --token=${{ secrets.VERCEL_TOKEN }} - - name: Deploy Project Artifacts to Vercel - id: deploy - run: | - DEPLOYMENT_URL=$(npx vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }}) - echo "deployment_url=$DEPLOYMENT_URL" >> $GITHUB_OUTPUT - echo "Preview deployed to: $DEPLOYMENT_URL" - - - name: Comment PR with preview link - if: github.event_name == 'pull_request' - uses: actions/github-script@v7 - with: - script: | - const deploymentUrl = '${{ steps.deploy.outputs.deployment_url }}'; - const commentIdentifier = ''; - - const { data: comments } = await github.rest.issues.listComments({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number, - }); - - const existingComment = comments.find(comment => - comment.body.includes(commentIdentifier) - ); - - const comment = commentIdentifier + '\n🚀 **Preview deployed!**\n\nYour changes have been deployed to Vercel:\n\n**Preview URL:** ' + deploymentUrl + '\n\nThis preview will be updated automatically when you push new commits to this PR.'; - - if (existingComment) { - await github.rest.issues.updateComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: existingComment.id, - body: comment - }); - } else { - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number, - body: comment - }); - } diff --git a/.roo/commands/cli-release.md b/.roo/commands/cli-release.md index 70b3698528d..eb57e8d2fea 100644 --- a/.roo/commands/cli-release.md +++ b/.roo/commands/cli-release.md @@ -1,5 +1,5 @@ --- -description: "Create a new release of the Roo Code CLI" +description: "Create a new release of the Klaus Code CLI" argument-hint: "[version-description]" mode: code --- diff --git a/.roo/commands/release.md b/.roo/commands/release.md index 2e09783a58e..2cee9ab6533 100644 --- a/.roo/commands/release.md +++ b/.roo/commands/release.md @@ -1,5 +1,5 @@ --- -description: "Create a new release of the Roo Code extension" +description: "Create a new release of the Klaus Code extension" argument-hint: patch | minor | major mode: code --- diff --git a/.roo/skills/evals-context/SKILL.md b/.roo/skills/evals-context/SKILL.md index 985b788b94f..ac818646de2 100644 --- a/.roo/skills/evals-context/SKILL.md +++ b/.roo/skills/evals-context/SKILL.md @@ -1,6 +1,6 @@ --- name: evals-context -description: Provides context about the Roo Code evals system structure in this monorepo. Use when tasks mention "evals", "evaluation", "eval runs", "eval exercises", or working with the evals infrastructure. Helps distinguish between the evals execution system (packages/evals, apps/web-evals) and the public website evals display page (apps/web-roo-code/src/app/evals). +description: Provides context about the Klaus Code evals system structure in this monorepo. Use when tasks mention "evals", "evaluation", "eval runs", "eval exercises", or working with the evals infrastructure. Helps distinguish between the evals execution system (packages/evals, apps/web-evals) and the internal eval results display. --- # Evals Codebase Context @@ -12,7 +12,6 @@ Use this skill when the task involves: - Modifying or debugging the evals execution infrastructure - Adding new eval exercises or languages - Working with the evals web interface (apps/web-evals) -- Modifying the public evals display page on roocode.com - Understanding where evals code lives in this monorepo ## When NOT to Use This Skill @@ -31,7 +30,6 @@ This monorepo has **two distinct evals-related locations** that can cause confus | --------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | | **Evals Execution System** | `packages/evals/` | Core eval infrastructure: CLI, DB schema, Docker configs | | **Evals Management UI** | `apps/web-evals/` | Next.js app for creating/monitoring eval runs (localhost:3446) | -| **Website Evals Page** | `apps/web-roo-code/src/app/evals/` | Public roocode.com page displaying eval results | | **External Exercises Repo** | [Roo-Code-Evals](https://github.com/RooCodeInc/Roo-Code-Evals) | Actual coding exercises (NOT in this monorepo) | ## Directory Structure Reference @@ -84,18 +82,6 @@ apps/web-evals/ │ └── lib/ # Utilities and schemas ``` -### `apps/web-roo-code/src/app/evals/` - Public Website Evals Page - -``` -apps/web-roo-code/src/app/evals/ -├── page.tsx # Fetches and displays public eval results -├── evals.tsx # Main evals display component -├── plot.tsx # Visualization component -└── types.ts # EvalRun type (extends packages/evals types) -``` - -This page **displays** eval results on the public roocode.com website. It imports types from `@roo-code/evals` but does NOT run evals. - ## Architecture Overview The evals system is a distributed evaluation platform that runs AI coding tasks in isolated VS Code environments: @@ -115,7 +101,7 @@ The evals system is a distributed evaluation platform that runs AI coding tasks **Key components:** - **Controller**: Orchestrates eval runs, spawns runners, manages task queue (p-queue) -- **Runner**: Isolated Docker container with VS Code + Roo Code extension + language runtimes +- **Runner**: Isolated Docker container with VS Code + Klaus Code extension + language runtimes - **Redis**: Pub/sub for real-time events (NOT task queuing) - **PostgreSQL**: Stores runs, tasks, metrics @@ -141,13 +127,6 @@ Edit files in [`apps/web-evals/src/`](apps/web-evals/src/): - [`app/runs/new/new-run.tsx`](apps/web-evals/src/app/runs/new/new-run.tsx) - New run form - [`actions/runs.ts`](apps/web-evals/src/actions/runs.ts) - Run server actions -### Modifying the Public Evals Display Page - -Edit files in [`apps/web-roo-code/src/app/evals/`](apps/web-roo-code/src/app/evals/): - -- [`evals.tsx`](apps/web-roo-code/src/app/evals/evals.tsx) - Display component -- [`plot.tsx`](apps/web-roo-code/src/app/evals/plot.tsx) - Charts - ### Database Schema Changes 1. Edit [`packages/evals/src/db/schema.ts`](packages/evals/src/db/schema.ts) @@ -179,10 +158,10 @@ cd packages/evals && npx vitest run cd apps/web-evals && npx vitest run ``` -## Key Types/Exports from `@roo-code/evals` +## Key Types/Exports from `@klaus-code/evals` The package exports are defined in [`packages/evals/src/index.ts`](packages/evals/src/index.ts): - Database queries: `getRuns`, `getTasks`, `getTaskMetrics`, etc. - Schema types: `Run`, `Task`, `TaskMetrics` -- Used by both `apps/web-evals` and `apps/web-roo-code` +- Used by `apps/web-evals` diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 549a1174a92..b8d7f53b348 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -17,7 +17,7 @@ { "label": "watch:webview", "type": "shell", - "command": "pnpm --filter @roo-code/vscode-webview dev", + "command": "pnpm --filter @klaus-code/vscode-webview dev", "group": "build", "problemMatcher": { "owner": "vite", diff --git a/CHANGELOG.md b/CHANGELOG.md index 9eb498b7f50..e2334a97f9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +BELOW is text written before FORK +================================= + # Roo Code Changelog ## [3.42.0] - 2026-01-22 @@ -22,14 +25,14 @@ - Fix: Remove custom condensing model option (PR #10901 by @hannesrudolph) - Unify user content tags to for consistent prompt formatting (#10658 by @hannesrudolph, PR #10723 by @app/roomote) - Clarify linked SKILL.md file handling in prompts (PR #10907 by @hannesrudolph) -- Fix: Padding on Roo Code Cloud teaser (PR #10889 by @app/roomote) +- Fix: Padding on Klaus Code Cloud teaser (PR #10889 by @app/roomote) ## [3.41.3] - 2026-01-18 - Fix: Thinking block word-breaking to prevent horizontal scroll in the chat UI (PR #10806 by @roomote) -- Add Claude-like CLI flags and authentication fixes for the Roo Code CLI (PR #10797 by @cte) +- Add Claude-like CLI flags and authentication fixes for the Klaus Code CLI (PR #10797 by @cte) - Improve CLI authentication by using a redirect instead of a fetch (PR #10799 by @cte) -- Fix: Roo Code Router fixes for the CLI (PR #10789 by @cte) +- Fix: Klaus Code Router fixes for the CLI (PR #10789 by @cte) - Release CLI v0.0.48 with latest improvements (PR #10800 by @cte) - Release CLI v0.0.47 (PR #10798 by @cte) - Revert E2E tests enablement to address stability issues (PR #10794 by @cte) @@ -91,10 +94,10 @@ ## [3.39.3] - 2026-01-10 -![3.39.3 Release - Roo Code Router](/releases/3.39.3-release.png) +![3.39.3 Release - Klaus Code Router](/releases/3.39.3-release.png) -- Rename Roo Code Cloud Provider to Roo Code Router for clearer branding (PR #10560 by @roomote) -- Update Roo Code Router service name throughout the codebase (PR #10607 by @mrubens) +- Rename Klaus Code Cloud Provider to Klaus Code Router for clearer branding (PR #10560 by @roomote) +- Update Klaus Code Router service name throughout the codebase (PR #10607 by @mrubens) - Update router name in types for consistency (PR #10605 by @mrubens) - Improve ExtensionHost code organization and cleanup (PR #10600 by @cte) - Add local installation option to CLI release script for testing (PR #10597 by @cte) @@ -116,8 +119,8 @@ - Chore: Stop overriding tool allow/deny lists for Gemini (PR #10592 by @hannesrudolph) - Chore: Change default CLI model to anthropic/claude-opus-4.5 (PR #10544 by @mrubens) - Chore: Update Terms of Service effective January 9, 2026 (PR #10568 by @mrubens) -- Chore: Move more types to @roo-code/types for CLI support (PR #10583 by @cte) -- Chore: Add functionality to @roo-code/core for CLI support (PR #10584 by @cte) +- Chore: Move more types to @klaus-code/types for CLI support (PR #10583 by @cte) +- Chore: Add functionality to @klaus-code/core for CLI support (PR #10584 by @cte) - Chore: Add slash commands useful for CLI development (PR #10586 by @cte) ## [3.39.1] - 2026-01-08 @@ -139,8 +142,8 @@ - Filter @ mention file search results using .rooignore (#10169 by @jerrill-johnson-bitwerx, PR #10174 by @roomote) - Add image support documentation to read_file native tool description (#10440 by @nabilfreeman, PR #10442 by @roomote) - Add zai-glm-4.7 to Cerebras models (PR #10500 by @sebastiand-cerebras) -- VSCode shim and basic CLI for running Roo Code headlessly (PR #10452 by @cte) -- Add CLI installer for headless Roo Code (PR #10474 by @cte) +- VSCode shim and basic CLI for running Klaus Code headlessly (PR #10452 by @cte) +- Add CLI installer for headless Klaus Code (PR #10474 by @cte) - Add option to use CLI for evals (PR #10456 by @cte) - Remember last Roo model selection in web-evals and add evals skill (PR #10470 by @hannesrudolph) - Tweak the style of follow up suggestion modes (PR #9260 by @mrubens) @@ -205,7 +208,7 @@ - Fix: Drain queued messages while waiting for ask to prevent message loss (PR #10315 by @hannesrudolph) - Feat: Add grace retry for empty assistant messages to improve reliability (PR #10297 by @hannesrudolph) - Feat: Enable mergeToolResultText for all OpenAI-compatible providers for better tool result handling (PR #10299 by @hannesrudolph) -- Feat: Enable mergeToolResultText for Roo Code Router (PR #10301 by @hannesrudolph) +- Feat: Enable mergeToolResultText for Klaus Code Router (PR #10301 by @hannesrudolph) - Feat: Strengthen native tool-use guidance in prompts for improved model behavior (PR #10311 by @hannesrudolph) - UX: Account-centric signup flow for improved onboarding experience (PR #10306 by @brunobergher) @@ -499,7 +502,7 @@ - Native tool calling support expanded across many providers: Bedrock (PR #9698 by @mrubens), Cerebras (PR #9692 by @mrubens), Chutes with auto-detection from API (PR #9715 by @daniel-lxs), DeepInfra (PR #9691 by @mrubens), DeepSeek and Doubao (PR #9671 by @daniel-lxs), Groq (PR #9673 by @daniel-lxs), LiteLLM (PR #9719 by @daniel-lxs), Ollama (PR #9696 by @mrubens), OpenAI-compatible providers (PR #9676 by @daniel-lxs), Requesty (PR #9672 by @daniel-lxs), Unbound (PR #9699 by @mrubens), Vercel AI Gateway (PR #9697 by @mrubens), Vertex Gemini (PR #9678 by @daniel-lxs), and xAI with new Grok 4 Fast and Grok 4.1 Fast models (PR #9690 by @mrubens) - Fix: Preserve tool_use blocks in summary for parallel tool calls (#9700 by @SilentFlower, PR #9714 by @SilentFlower) - Default Grok Code Fast to native tools for better performance (PR #9717 by @mrubens) -- UX improvements to the Roo Code Router-centric onboarding flow (PR #9709 by @brunobergher) +- UX improvements to the Klaus Code Router-centric onboarding flow (PR #9709 by @brunobergher) - UX toolbar cleanup and settings consolidation for a cleaner interface (PR #9710 by @brunobergher) - Add model-specific tool customization via `excludedTools` and `includedTools` configuration (PR #9641 by @daniel-lxs) - Add new `apply_patch` native tool for more efficient file editing operations (PR #9663 by @hannesrudolph) @@ -557,13 +560,13 @@ - Set native tools as default for minimax-m2 and claude-haiku-4.5 (PR #9586 by @daniel-lxs) - Make single file read only apply to XML tools (PR #9600 by @mrubens) - Enhance web-evals dashboard with dynamic tool columns and UX improvements (PR #9592 by @hannesrudolph) -- Revert "Add support for Roo Code Cloud as an embeddings provider" while we fix some issues (PR #9602 by @mrubens) +- Revert "Add support for Klaus Code Cloud as an embeddings provider" while we fix some issues (PR #9602 by @mrubens) ## [3.34.4] - 2025-11-25 ![3.34.4 Release - BFL Image Generation](/releases/3.34.4-release.png) -- Add new Black Forest Labs image generation models, free on Roo Code Cloud and also available on OpenRouter (PR #9587 and #9589 by @mrubens) +- Add new Black Forest Labs image generation models, free on Klaus Code Cloud and also available on OpenRouter (PR #9587 and #9589 by @mrubens) - Fix: Preserve dynamic MCP tool names in native mode API history to prevent tool name mismatches (PR #9559 by @daniel-lxs) - Fix: Preserve tool_use blocks in summary message during condensing with native tools to maintain conversation context (PR #9582 by @daniel-lxs) @@ -575,9 +578,9 @@ - Add Claude Opus 4.5 model to Claude Code provider (PR #9560 by @mrubens) - Add Claude Opus 4.5 model to Bedrock provider (#9571 by @pisicode, PR #9572 by @roomote) - Enable caching for Opus 4.5 model to improve performance (#9567 by @iainRedro, PR #9568 by @roomote) -- Add support for Roo Code Cloud as an embeddings provider (PR #9543 by @mrubens) +- Add support for Klaus Code Cloud as an embeddings provider (PR #9543 by @mrubens) - Fix ask_followup_question streaming issue and add missing tool cases (PR #9561 by @daniel-lxs) -- Add contact links to About Roo Code settings page (PR #9570 by @roomote) +- Add contact links to About Klaus Code settings page (PR #9570 by @roomote) - Switch from asdf to mise-en-place in bare-metal evals setup script (PR #9548 by @cte) ## [3.34.2] - 2025-11-24 @@ -586,7 +589,7 @@ - Add support for Claude Opus 4.5 in Anthropic and Vertex providers (PR #9541 by @daniel-lxs) - Add support for Claude Opus 4.5 in OpenRouter with prompt caching and reasoning budget (PR #9540 by @daniel-lxs) -- Add Roo Code Cloud as an image generation provider (PR #9528 by @mrubens) +- Add Klaus Code Cloud as an image generation provider (PR #9528 by @mrubens) - Fix: Gracefully skip unsupported content blocks in Gemini transformer (PR #9537 by @daniel-lxs) - Fix: Flush LiteLLM cache when credentials change on refresh (PR #9536 by @daniel-lxs) - Fix: Ensure XML parser state matches tool protocol on config update (PR #9535 by @daniel-lxs) @@ -598,7 +601,7 @@ - Show the prompt for image generation in the UI (PR #9505 by @mrubens) - Fix double todo list display issue (PR #9517 by @mrubens) - Add tracking for cloud synced messages (PR #9518 by @mrubens) -- Enable the Roo Code Router in evals (PR #9492 by @cte) +- Enable the Klaus Code Router in evals (PR #9492 by @cte) ## [3.34.0] - 2025-11-21 @@ -678,7 +681,7 @@ - Use VSCode theme color for outline button borders (PR #9336 by @app/roomote) - Replace broken badgen.net badges with shields.io (PR #9318 by @app/roomote) - Add max git status files setting to evals (PR #9322 by @mrubens) -- Roo Code Router pricing page and changes elsewhere (PR #9195 by @brunobergher) +- Klaus Code Router pricing page and changes elsewhere (PR #9195 by @brunobergher) ## [3.32.1] - 2025-11-14 @@ -704,7 +707,7 @@ ![3.31.3 Release - Kangaroo Decrypting a Message](/releases/3.31.3-release.png) - Fix: OpenAI Native encrypted_content handling and remove gpt-5-chat-latest verbosity flag (#9225 by @politsin, PR by @hannesrudolph) -- Fix: Roo Code Router Anthropic input token normalization to avoid double-counting (thanks @hannesrudolph!) +- Fix: Klaus Code Router Anthropic input token normalization to avoid double-counting (thanks @hannesrudolph!) - Refactor: Rename sliding-window to context-management and truncateConversationIfNeeded to manageContext (thanks @hannesrudolph!) ## [3.31.2] - 2025-11-12 @@ -844,7 +847,7 @@ - Add token-budget based file reading with intelligent preview to avoid context overruns (thanks @daniel-lxs!) - Enable browser-use tool for all image-capable models (#8116 by @hannesrudolph, PR by @app/roomote!) -- Add dynamic model loading for Roo Code Router (thanks @app/roomote!) +- Add dynamic model loading for Klaus Code Router (thanks @app/roomote!) - Fix: Respect nested .gitignore files in search_files (#7921 by @hannesrudolph, PR by @daniel-lxs) - Fix: Preserve trailing newlines in stripLineNumbers for apply_diff (#8020 by @liyi3c, PR by @app/roomote) - Fix: Exclude max tokens field for models that don't support it in export (#7944 by @hannesrudolph, PR by @elianiva) @@ -1002,7 +1005,7 @@ - UX: Responsive Auto-Approve (thanks @brunobergher!) - Add telemetry retry queue for network resilience (thanks @daniel-lxs!) - Fix: Transform keybindings in nightly build to fix command+y shortcut (thanks @app/roomote!) -- New code-supernova stealth model in the Roo Code Router (thanks @mrubens!) +- New code-supernova stealth model in the Klaus Code Router (thanks @mrubens!) ## [3.28.3] - 2025-09-16 @@ -1040,8 +1043,8 @@ ![3.28.1 Release - Kangaroo riding rocket to the clouds](/releases/3.28.1-release.png) -- Announce Roo Code Cloud! -- Add cloud task button for opening tasks in Roo Code Cloud (thanks @app/roomote!) +- Announce Klaus Code Cloud! +- Add cloud task button for opening tasks in Klaus Code Cloud (thanks @app/roomote!) - Make Posthog telemetry the default (thanks @mrubens!) - Show notification when the checkpoint initialization fails (thanks @app/roomote!) - Bust cache in generated image preview (thanks @mrubens!) @@ -1050,9 +1053,9 @@ ## [3.28.0] - 2025-09-10 -![3.28.0 Release - Continue tasks in Roo Code Cloud](/releases/3.28.0-release.png) +![3.28.0 Release - Continue tasks in Klaus Code Cloud](/releases/3.28.0-release.png) -- feat: Continue tasks in Roo Code Cloud (thanks @brunobergher!) +- feat: Continue tasks in Klaus Code Cloud (thanks @brunobergher!) - feat: Support connecting to Cloud without redirect handling (thanks @mrubens!) - feat: Add toggle to control task syncing to Cloud (thanks @jr!) - feat: Add click-to-edit, ESC-to-cancel, and fix padding consistency for chat messages (#7788 by @hannesrudolph, PR by @app/roomote) @@ -1090,7 +1093,7 @@ ![3.26.7 Release - OpenAI Service Tiers](/releases/3.26.7-release.png) - Feature: Add OpenAI Responses API service tiers (flex/priority) with UI selector and pricing (thanks @hannesrudolph!) -- Feature: Add DeepInfra as a model provider in Roo Code (#7661 by @Thachnh, PR by @Thachnh) +- Feature: Add DeepInfra as a model provider in Klaus Code (#7661 by @Thachnh, PR by @Thachnh) - Feature: Update kimi-k2-0905-preview and kimi-k2-turbo-preview models on the Moonshot provider (thanks @CellenLee!) - Feature: Add kimi-k2-0905-preview to Groq, Moonshot, and Fireworks (thanks @daniel-lxs and Cline!) - Fix: Prevent countdown timer from showing in history for answered follow-up questions (#7624 by @XuyiK, PR by @daniel-lxs) @@ -1213,11 +1216,11 @@ ## [3.25.19] - 2025-08-19 -- Fix issue where new users couldn't select the Roo Code Router (thanks @daniel-lxs!) +- Fix issue where new users couldn't select the Klaus Code Router (thanks @daniel-lxs!) ## [3.25.18] - 2025-08-19 -- Add new stealth Sonic model through the Roo Code Router +- Add new stealth Sonic model through the Klaus Code Router - Fix: respect enableReasoningEffort setting when determining reasoning usage (#7048 by @ikbencasdoei, PR by @app/roomote) - Fix: prevent duplicate LM Studio models with case-insensitive deduplication (#6954 by @fbuechler, PR by @daniel-lxs) - Feat: simplify ask_followup_question prompt documentation (thanks @daniel-lxs!) @@ -1432,7 +1435,7 @@ ## [3.23.19] - 2025-07-23 -- Add Roo Code Cloud Waitlist CTAs (thanks @brunobergher!) +- Add Klaus Code Cloud Waitlist CTAs (thanks @brunobergher!) - Split commands on newlines when evaluating auto-approve - Smarter auto-deny of commands @@ -2052,7 +2055,7 @@ - Fix display issue of the programming language dropdown in the code block component (thanks @zhangtony239) - MCP server errors are now captured and shown in a new "Errors" tab (thanks @robertheadley) - Error logging will no longer break MCP functionality if the server is properly connected (thanks @ksze) -- You can now toggle the `terminal.integrated.inheritEnv` VSCode setting directly for the Roo Code settings (thanks @KJ7LNW) +- You can now toggle the `terminal.integrated.inheritEnv` VSCode setting directly for the Klaus Code settings (thanks @KJ7LNW) - Add `gemini-2.5-pro-preview-05-06` to the Vertex and Gemini providers (thanks @zetaloop) - Ensure evals exercises are up-to-date before running evals (thanks @shariqriazz) - Lots of general UI improvements (thanks @elianiva) @@ -2069,7 +2072,7 @@ ## [3.15.4] - 2025-05-04 -- Fix a nasty bug that would cause Roo Code to hang, particularly in orchestrator mode +- Fix a nasty bug that would cause Klaus Code to hang, particularly in orchestrator mode - Improve Gemini caching efficiency ## [3.15.3] - 2025-05-02 @@ -2108,8 +2111,8 @@ - Improve the auto-approve toggle buttons for some high-contrast VSCode themes - Offload expensive count token operations to a web worker (thanks @samhvw8) - Improve support for mult-root workspaces (thanks @snoyiatk) -- Simplify and streamline Roo Code's quick actions -- Allow Roo Code settings to be imported from the welcome screen (thanks @julionav) +- Simplify and streamline Klaus Code's quick actions +- Allow Klaus Code settings to be imported from the welcome screen (thanks @julionav) - Remove unused types (thanks @wkordalski) - Improve the performance of mode switching (thanks @dlab-anton) - Fix importing & exporting of custom modes (thanks @julionav) @@ -2273,7 +2276,7 @@ - Improve readFileTool XML output format (thanks @KJ7LNW!) - Add o1-pro support (thanks @arthurauffray!) - Follow symlinked rules files/directories to allow for more flexible rule setups -- Focus Roo Code in the sidebar when running tasks in the sidebar via the API +- Focus Klaus Code in the sidebar when running tasks in the sidebar via the API - Improve subtasks UI ## [3.11.10] - 2025-04-08 @@ -2295,7 +2298,7 @@ - Enhance Rust tree-sitter parser with advanced language structures (thanks @KJ7LNW!) - Persist settings on api.setConfiguration (thanks @gtaylor!) - Add deep links to settings sections -- Add command to focus Roo Code input field (thanks @axkirillov!) +- Add command to focus Klaus Code input field (thanks @axkirillov!) - Add resize and hover actions to the browser (thanks @SplittyDev!) - Add resumeTask and isTaskInHistory to the API (thanks @franekp!) - Fix bug displaying boolean/numeric suggested answers @@ -2344,7 +2347,7 @@ - Fix issue where prompts and settings tabs were not scrollable when accessed from dropdown menus - Update AWS region dropdown menu to the most recent data (thanks @Smartsheet-JB-Brown!) - Fix prompt enhancement for Bedrock (thanks @Smartsheet-JB-Brown!) -- Allow processes to access the Roo Code API via a unix socket +- Allow processes to access the Klaus Code API via a unix socket - Improve zh-TW Traditional Chinese translations (thanks @PeterDaveHello!) - Add support for Azure AI Inference Service with DeepSeek-V3 model (thanks @thomasjeung!) - Fix off-by-one error in tree-sitter line numbers @@ -2381,7 +2384,7 @@ - Fix list_code_definition_names to support files (thanks @KJ7LNW!) - Refactor tool-calling logic to make the code a lot easier to work with (thanks @diarmidmackenzie, @bramburn, @KJ7LNW, and everyone else who helped!) - Prioritize “Add to Context” in the code actions and include line numbers (thanks @samhvw8!) -- Add an activation command that other extensions can use to interface with Roo Code (thanks @gtaylor!) +- Add an activation command that other extensions can use to interface with Klaus Code (thanks @gtaylor!) - Preserve language characters in file @-mentions (thanks @aheizi!) - Browser tool improvements (thanks @afshawnlotfi!) - Display info about partial reads in the chat row @@ -2473,7 +2476,7 @@ ## [3.9.0] - 2025-03-18 -- Internationalize Roo Code into Catalan, German, Spanish, French, Hindi, Italian, Japanese, Korean, Polish, Portuguese, Turkish, Vietnamese, Simplified Chinese, and Traditional Chinese (thanks @feifei325!) +- Internationalize Klaus Code into Catalan, German, Spanish, French, Hindi, Italian, Japanese, Korean, Polish, Portuguese, Turkish, Vietnamese, Simplified Chinese, and Traditional Chinese (thanks @feifei325!) - Bring back support for MCP over SSE (thanks @aheizi!) - Add a text-to-speech option to have Roo talk to you as it works (thanks @heyseth!) - Choose a specific provider when using OpenRouter (thanks PhunkyBob!) @@ -2553,17 +2556,17 @@ ## [3.8.0] - 2025-03-07 -- Add opt-in telemetry to help us improve Roo Code faster (thanks Cline!) +- Add opt-in telemetry to help us improve Klaus Code faster (thanks Cline!) - Fix terminal overload / gray screen of death, and other terminal issues - Add a new experimental diff editing strategy that applies multiple diff edits at once (thanks @qdaxb!) -- Add support for a .rooignore to prevent Roo Code from read/writing certain files, with a setting to also exclude them from search/lists (thanks Cline!) +- Add support for a .rooignore to prevent Klaus Code from read/writing certain files, with a setting to also exclude them from search/lists (thanks Cline!) - Update the new_task tool to return results to the parent task on completion, supporting better orchestration (thanks @shaybc!) - Support running Roo in multiple editor windows simultaneously (thanks @samhvw8!) - Make checkpoints asynchronous and exclude more files to speed them up - Redesign the settings page to make it easier to navigate - Add credential-based authentication for Vertex AI, enabling users to easily switch between Google Cloud accounts (thanks @eonghk!) - Update the DeepSeek provider with the correct baseUrl and track caching correctly (thanks @olweraltuve!) -- Add a new “Human Relay” provider that allows you to manually copy information to a Web AI when needed, and then paste the AI's response back into Roo Code (thanks @NyxJae)! +- Add a new “Human Relay” provider that allows you to manually copy information to a Web AI when needed, and then paste the AI's response back into Klaus Code (thanks @NyxJae)! - Add observability for OpenAI providers (thanks @refactorthis!) - Support speculative decoding for LM Studio local models (thanks @adamwlarson!) - Improve UI for mode/provider selectors in chat @@ -2652,7 +2655,7 @@ ## [3.7.0] - 2025-02-24 -- Introducing Roo Code 3.7, with support for the new Claude Sonnet 3.7. Because who cares about skipping version numbers anymore? Thanks @lupuletic and @cte for the PRs! +- Introducing Klaus Code 3.7, with support for the new Claude Sonnet 3.7. Because who cares about skipping version numbers anymore? Thanks @lupuletic and @cte for the PRs! ## [3.3.26] - 2025-02-27 @@ -2841,7 +2844,7 @@ - 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! +- New Klaus Code community Discord at https://roocode.com/discord! ## [3.2.8] @@ -2873,9 +2876,9 @@ ## [3.2.0 - 3.2.2] -- **Name Change From Roo Cline to Roo Code:** We're excited to announce our new name! After growing beyond 50,000 installations, we've rebranded from Roo Cline to Roo Code to better reflect our identity as we chart our own course. +- **Name Change From Roo Cline to Klaus Code:** We're excited to announce our new name! After growing beyond 50,000 installations, we've rebranded from Roo Cline to Klaus Code to better reflect our identity as we chart our own course. -- **Custom Modes:** Create your own personas for Roo Code! While our built-in modes (Code, Architect, Ask) are still here, you can now shape entirely new ones: +- **Custom Modes:** Create your own personas for Klaus Code! While our built-in modes (Code, Architect, Ask) are still here, you can now shape entirely new ones: - Define custom prompts - Choose which tools each mode can access - Create specialized assistants for any workflow @@ -2934,7 +2937,7 @@ Join us at https://www.reddit.com/r/RooCode to share your custom modes and be pa ## [3.0.0] -- This release adds chat modes! Now you can ask Roo Code questions about system architecture or the codebase without immediately jumping into writing code. You can even assign different API configuration profiles to each mode if you prefer to use different models for thinking vs coding. Would love feedback in the new Roo Code Reddit! https://www.reddit.com/r/RooCode +- This release adds chat modes! Now you can ask Klaus 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 Klaus Code Reddit! https://www.reddit.com/r/RooCode ## [2.2.46] diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000000..fa587dff79e --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,100 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +**For human developers**: See [DEVELOPMENT.md](DEVELOPMENT.md) for complete build instructions, environment setup, and release procedures. + +## Project Overview + +Klaus Code is an AI-powered VS Code extension that assists with coding tasks. It's a TypeScript monorepo using pnpm workspaces and Turborepo. + +## Build and Development Commands + +```bash +# Install dependencies +pnpm install + +# Run all linting +pnpm lint + +# Run all type checking +pnpm check-types + +# Run all tests +pnpm test + +# Format code +pnpm format + +# Build all packages +pnpm build + +# Build and package VSIX +pnpm vsix + +# Clean all build artifacts +pnpm clean +``` + +### Running Individual Tests + +Tests use Vitest. Run tests from within the correct workspace directory: + +```bash +# Backend tests (src/) +cd src && npx vitest run path/to/test-file.test.ts + +# Webview UI tests +cd webview-ui && npx vitest run src/path/to/test-file.test.ts +``` + +Do NOT run `npx vitest run src/...` from the project root - this causes "vitest: command not found" errors. + +### Development Mode + +Press F5 in VS Code to launch the extension in debug mode. Changes hot reload automatically. + +## Repository Structure + +- `src/` - Main VS Code extension (backend) + - `api/providers/` - LLM provider integrations (Anthropic, OpenAI, Gemini, Bedrock, etc.) + - `core/` - Agent core logic + - `task/Task.ts` - Main agent task orchestration + - `tools/` - Tool implementations (ReadFile, WriteToFile, ExecuteCommand, etc.) + - `webview/ClineProvider.ts` - Bridge between extension and webview + - `config/ContextProxy.ts` - State management for settings + - `prompts/` - System prompt construction + - `services/` - Supporting services (MCP, code indexing, checkpoints, etc.) + - `integrations/` - VS Code integrations (terminal, editor, workspace) +- `webview-ui/` - React frontend (Vite, Tailwind, Radix UI) +- `packages/` - Shared packages + - `types/` - Shared TypeScript types + - `core/` - Core utilities + - `cloud/` - Cloud service integration + - `telemetry/` - Telemetry service +- `apps/` - Additional applications (CLI, e2e tests, web apps) + +## Architecture Notes + +### Settings View Pattern + +When working on `SettingsView`, inputs must bind to the local `cachedState`, NOT the live `useExtensionState()`. The `cachedState` acts as a buffer for user edits, isolating them from the `ContextProxy` source-of-truth until the user explicitly clicks "Save". Wiring inputs directly to the live state causes race conditions. + +### JSON File Writing + +Use `safeWriteJson(filePath, data)` from `src/utils/safeWriteJson.ts` instead of `JSON.stringify` with file-write operations. This utility: +- Creates parent directories automatically +- Prevents data corruption via atomic writes with locking +- Streams writes to minimize memory footprint + +Test files are exempt from this rule. + +### Styling + +Use Tailwind CSS classes instead of inline style objects. VSCode CSS variables must be added to `webview-ui/src/index.css` before using them in Tailwind classes. + +## Code Quality Rules + +- Never disable lint rules without explicit user approval +- Ensure all tests pass before submitting changes +- The `vi`, `describe`, `test`, `it` functions from Vitest are globally available (defined in tsconfig.json) - no need to import them diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 869b59a16da..b69c6ddcf7d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,9 +11,9 @@ -# Contributing to Roo Code +# Contributing to Klaus 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. +Klaus 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 @@ -52,7 +52,7 @@ Our roadmap guides the project's direction. Align your contributions with these Mention alignment with these areas in your PRs. -### 3. Join the Roo Code Community +### 3. Join the Klaus 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). @@ -79,7 +79,7 @@ All contributions start with a GitHub Issue using our skinny templates. ### 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). +- For docs, visit [Klaus Code Docs](https://github.com/RooCodeInc/Roo-Code-Docs). ### Reporting Bugs @@ -87,7 +87,7 @@ All contributions start with a GitHub Issue using our skinny templates. - 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 + - Klaus 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 @@ -126,7 +126,6 @@ pnpm install ### 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. @@ -138,4 +137,4 @@ pnpm install ## Legal -By contributing, you agree your contributions will be licensed under the Apache 2.0 License, consistent with Roo Code's licensing. +By contributing, you agree your contributions will be licensed under the Apache 2.0 License, consistent with Klaus Code's licensing. diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 00000000000..4d3d8ad89cf --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,307 @@ +# Klaus Code Development Guide + +> Developer documentation for building and releasing Klaus Code + +## Table of Contents + +- [Prerequisites](#prerequisites) +- [Environment Setup](#environment-setup) +- [Building from Source](#building-from-source) +- [Development Workflow](#development-workflow) +- [Creating a Release](#creating-a-release) +- [Troubleshooting](#troubleshooting) + +--- + +## Prerequisites + +### Required Software + +- **Node.js**: v20.19.2 (specified in `.nvmrc`) +- **pnpm**: v10.8.1 (package manager) +- **Git**: For version control + +### Verify Prerequisites + +```bash +node --version # Should be v20.19.2 +npm --version # Should be 10.x or higher +git --version +``` + +--- + +## Environment Setup + +### 1. Install Node.js + +Use Node Version Manager (nvm) for easy Node.js version management: + +```bash +# Install nvm (if not already installed) +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash + +# Install and use the correct Node.js version +nvm install 20.19.2 +nvm use 20.19.2 +``` + +Alternatively, download Node.js v20.19.2 from [nodejs.org](https://nodejs.org/). + +### 2. Install pnpm + +```bash +npm install -g pnpm@10.8.1 +``` + +Verify installation: + +```bash +pnpm --version # Should output: 10.8.1 +``` + +### 3. Clone the Repository + +```bash +git clone https://github.com/PabloVitasso/Klaus-Code.git +cd Klaus-Code +``` + +### 4. Install Dependencies + +```bash +pnpm install +``` + +This will: +- Install all workspace dependencies +- Run bootstrap scripts +- Set up husky git hooks + +**Note**: The build scripts for some dependencies are ignored by default for security. This is normal. + +--- + +## Building from Source + +### Quick Build + +```bash +# Build all packages +pnpm build + +# Create VSIX package +pnpm vsix +``` + +The VSIX file will be created in `bin/klaus-code-.vsix`. + +### Build Output + +``` +bin/ +└── klaus-code-3.42.0.vsix (34 MB) +``` + +--- + +## Development Workflow + +### Run in Development Mode + +Press `F5` in VS Code to launch the extension in debug mode: + +1. Open the project in VS Code +2. Press `F5` (or **Run** → **Start Debugging**) +3. A new VS Code window opens with Klaus Code loaded +4. Changes to the webview hot-reload automatically +5. Changes to the core extension also hot-reload + +### Available Scripts + +```bash +# Linting +pnpm lint + +# Type checking +pnpm check-types + +# Run tests +pnpm test + +# Format code +pnpm format + +# Clean build artifacts +pnpm clean +``` + +### Running Individual Tests + +Tests use Vitest. Run from the correct workspace: + +```bash +# Backend tests +cd src && npx vitest run path/to/test.test.ts + +# Webview UI tests +cd webview-ui && npx vitest run src/path/to/test.test.ts +``` + +**Important**: Do NOT run `npx vitest run src/...` from project root - this causes errors. + +--- + +## Creating a Release + +### 1. Build the VSIX + +```bash +# Clean previous builds +pnpm clean + +# Build everything +pnpm build + +# Create VSIX package +pnpm vsix +``` + +### 2. Test the VSIX Locally + +#### Option A: Automated Installation + +```bash +pnpm install:vsix +``` + +This will: +- Uninstall any existing version +- Build the latest VSIX +- Install the new VSIX +- Prompt you to restart VS Code + +#### Option B: Manual Installation + +```bash +# Install via VS Code CLI +code --install-extension bin/klaus-code-3.42.0.vsix + +# Or use the VS Code UI: +# 1. Open VS Code +# 2. Extensions view (Ctrl+Shift+X) +# 3. Click "..." → "Install from VSIX..." +# 4. Select bin/klaus-code-3.42.0.vsix +``` + +### 3. Verify the Installation + +1. Open VS Code +2. Check that "Klaus Code" appears in the activity bar +3. Test core functionality: + - Create a new task + - Test the Claude Code provider (if configured) + - Verify settings panel loads + +### 4. Create a GitHub Release + +```bash +# Tag the release +git tag -a v3.42.0 -m "Release v3.42.0" + +# Push the tag +git push origin v3.42.0 +``` + +Then create a GitHub release: +1. Go to https://github.com/PabloVitasso/Klaus-Code/releases +2. Click "Draft a new release" +3. Select the tag `v3.42.0` +4. Upload `bin/klaus-code-3.42.0.vsix` +5. Write release notes +6. Publish + +--- + +## Troubleshooting + +### pnpm not found + +```bash +npm install -g pnpm@10.8.1 +``` + +### Build fails with "vitest: command not found" + +You're running tests from the wrong directory. See [Running Individual Tests](#running-individual-tests). + +### VSIX build warnings about bundle size + +This is normal. The extension includes all dependencies. To reduce size: + +```bash +# Bundle the extension (advanced) +pnpm bundle +pnpm vsix +``` + +### Hot reload not working in debug mode + +1. Restart the debug session (Ctrl+Shift+F5) +2. Check the VS Code debug console for errors +3. Ensure you're running from the project root + +### Dependencies installation issues + +```bash +# Clear cache and reinstall +pnpm store prune +rm -rf node_modules +pnpm install +``` + +### TypeScript errors + +```bash +# Check types +pnpm check-types + +# Fix common issues +pnpm format +pnpm lint +``` + +--- + +## Project Structure + +``` +Klaus-Code/ +├── src/ # Main VS Code extension +│ ├── api/ # LLM provider integrations +│ ├── core/ # Agent core logic +│ ├── services/ # Supporting services +│ └── integrations/ # VS Code integrations +├── webview-ui/ # React frontend +├── packages/ # Shared packages +│ ├── types/ # Shared TypeScript types +│ ├── core/ # Core utilities +│ ├── cloud/ # Cloud integration +│ └── telemetry/ # Telemetry service +├── bin/ # Built VSIX packages +└── DEVELOPMENT.md # This file +``` + +For more details, see [CLAUDE.md](CLAUDE.md) for AI-specific development guidance. + +--- + +## Additional Resources + +- **Project Repository**: https://github.com/PabloVitasso/Klaus-Code +- **Original Fork Source**: https://github.com/RooCodeInc/Roo-Code +- **VS Code Extension API**: https://code.visualstudio.com/api + +--- + +*Last updated: 2026-01-23* diff --git a/PRIVACY.md b/PRIVACY.md index 02e8e151034..438174730d2 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -1,29 +1,29 @@ -# Roo Code Privacy Policy +# Klaus Code Privacy Policy **Last Updated: September 11th, 2025** -Roo Code respects your privacy and is committed to transparency about how we handle your data. Below is a simple breakdown of where key pieces of data go—and, importantly, where they don’t. +Klaus Code respects your privacy and is committed to transparency about how we handle your data. Below is a simple breakdown of where key pieces of data go—and, importantly, where they don’t. ### **Where Your Data Goes (And Where It Doesn’t)** -- **Code & Files**: Roo Code accesses files on your local machine when needed for AI-assisted features. When you send commands to Roo Code, relevant files may be transmitted to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. If you select Roo Code Cloud as the model provider (proxy mode), your code may transit Roo Code servers only to forward it to the upstream provider. We do not store your code; it is deleted immediately after forwarding. Otherwise, your code is sent directly to the provider. AI providers may store data per their privacy policies. -- **Commands**: Any commands executed through Roo Code happen on your local environment. However, when you use AI-powered features, the relevant code and context from your commands may be transmitted to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not have access to or store this data, but AI providers may process it per their privacy policies. -- **Prompts & AI Requests**: When you use AI-powered features, your prompts and relevant project context are sent to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not store or process this data. These AI providers have their own privacy policies and may store data per their terms of service. If you choose Roo Code Cloud as the provider (proxy mode), prompts may transit Roo Code servers only to forward them to the upstream model and are not stored. +- **Code & Files**: Klaus Code accesses files on your local machine when needed for AI-assisted features. When you send commands to Klaus Code, relevant files may be transmitted to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. If you select Klaus Code Cloud as the model provider (proxy mode), your code may transit Klaus Code servers only to forward it to the upstream provider. We do not store your code; it is deleted immediately after forwarding. Otherwise, your code is sent directly to the provider. AI providers may store data per their privacy policies. +- **Commands**: Any commands executed through Klaus Code happen on your local environment. However, when you use AI-powered features, the relevant code and context from your commands may be transmitted to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not have access to or store this data, but AI providers may process it per their privacy policies. +- **Prompts & AI Requests**: When you use AI-powered features, your prompts and relevant project context are sent to your chosen AI model provider (e.g., OpenAI, Anthropic, OpenRouter) to generate responses. We do not store or process this data. These AI providers have their own privacy policies and may store data per their terms of service. If you choose Klaus Code Cloud as the provider (proxy mode), prompts may transit Klaus Code servers only to forward them to the upstream model and are not stored. - **API Keys & Credentials**: If you enter an API key (e.g., to connect an AI model), it is stored locally on your device and never sent to us or any third party, except the provider you have chosen. -- **Telemetry (Usage Data)**: We collect anonymous feature usage and error data to help us improve Roo Code. This telemetry is powered by PostHog and includes your VS Code machine ID, feature usage patterns, and exception reports. This telemetry does **not** collect personally identifiable information, your code, or AI prompts. You can opt out of this telemetry at any time through the settings. -- **Marketplace Requests**: When you browse or search the Marketplace for Model Configuration Profiles (MCPs) or Custom Modes, Roo Code makes a secure API call to Roo Code's backend servers to retrieve listing information. These requests send only the query parameters (e.g., extension version, search term) necessary to fulfill the request and do not include your code, prompts, or personally identifiable information. +- **Telemetry (Usage Data)**: We collect anonymous feature usage and error data to help us improve Klaus Code. This telemetry is powered by PostHog and includes your VS Code machine ID, feature usage patterns, and exception reports. This telemetry does **not** collect personally identifiable information, your code, or AI prompts. You can opt out of this telemetry at any time through the settings. +- **Marketplace Requests**: When you browse or search the Marketplace for Model Configuration Profiles (MCPs) or Custom Modes, Klaus Code makes a secure API call to Klaus Code's backend servers to retrieve listing information. These requests send only the query parameters (e.g., extension version, search term) necessary to fulfill the request and do not include your code, prompts, or personally identifiable information. ### **How We Use Your Data (If Collected)** -- We use telemetry to understand feature usage and improve Roo Code. +- We use telemetry to understand feature usage and improve Klaus Code. - We do **not** sell or share your data. - We do **not** train any models on your data. ### **Your Choices & Control** - You can run models locally to prevent data being sent to third-parties. -- Telemetry collection is enabled by default to help us improve Roo Code, but you can opt out at any time through the settings. -- You can delete Roo Code to stop all data collection. +- Telemetry collection is enabled by default to help us improve Klaus Code, but you can opt out at any time through the settings. +- You can delete Klaus Code to stop all data collection. ### **Security & Updates** @@ -31,8 +31,8 @@ We take reasonable measures to secure your data, but no system is 100% secure. I ### **Contact Us** -For any privacy-related questions, reach out to us at support@roocode.com. +For any privacy-related questions, reach out to us at support@***.tbd --- -By using Roo Code, you agree to this Privacy Policy. +By using Klaus Code, you agree to this Privacy Policy. diff --git a/README.md b/README.md index 75f37762f93..9b7d694d85b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,35 @@ +# Klaus Code + +> A fork of [Roo Code](https://github.com/RooCodeInc/Roo-Code) that preserves the Claude Code provider feature. + +## Fork Notice + +This is **Klaus Code**, a community fork of Roo Code. + +### Why this fork exists + +Roo Code removed the Claude Code provider in [commit 7f854c0](https://github.com/RooCodeInc/Roo-Code/commit/7f854c0dd7ed25dac68a2310346708b4b64b48d9). This fork restores and maintains that feature, allowing users to authenticate with Claude Code OAuth tokens. + +### Key differences from upstream + +- **Claude Code Provider**: Restored and maintained +- **Branding**: Renamed from "Roo Code" to "Klaus Code" + +### Original project + +- **Roo Code original link**: https://github.com/RooCodeInc/Roo-Code +- **Roo Code documentation**: https://docs.roocode.com + +### For Developers + +- **[Development Guide](DEVELOPMENT.md)**: Build instructions, environment setup, and release process + +--- + +## Below is the original content before fork: + +--- +

VS Code Marketplace X @@ -173,4 +205,4 @@ We love community contributions! Get started by reading our [CONTRIBUTING.md](CO --- -**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! +**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/SECURITY.md b/SECURITY.md index 8057b38bda7..404b492d563 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,7 @@ We actively patch only the most recent minor release of Roo Code. Older version ## Reporting a Vulnerability -Email security@roocode.com with: +Email security@***.tbd with: - A short summary of the issue - Steps to reproduce or a proof of concept diff --git a/apps/cli/CHANGELOG.md b/apps/cli/CHANGELOG.md index 0babc28fd80..37062491b21 100644 --- a/apps/cli/CHANGELOG.md +++ b/apps/cli/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -All notable changes to the `@roo-code/cli` package will be documented in this file. +All notable changes to the `@klaus-code/cli` package will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). @@ -33,12 +33,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Skip onboarding flow when a provider is explicitly specified via `--provider` flag or saved in settings - Unified permission flags: Combined `-y`, `--yes`, and `--dangerously-skip-permissions` into a single option for Claude Code-like CLI compatibility -- Improved Roo Code Router authentication flow and error messaging +- Improved Klaus Code Router authentication flow and error messaging ### Fixed - Removed unnecessary timeout that could cause issues with long-running tasks -- Fixed authentication token validation for Roo Code Router provider +- Fixed authentication token validation for Klaus Code Router provider ## [0.0.45] - 2026-01-08 diff --git a/apps/cli/README.md b/apps/cli/README.md index d4405364405..791f0edd4f5 100644 --- a/apps/cli/README.md +++ b/apps/cli/README.md @@ -1,16 +1,16 @@ -# @roo-code/cli +# @klaus-code/cli -Command Line Interface for Roo Code - Run the Roo Code agent from the terminal without VSCode. +Command Line Interface for Klaus Code - Run the Klaus Code agent from the terminal without VSCode. ## Overview -This CLI uses the `@roo-code/vscode-shim` package to provide a VSCode API compatibility layer, allowing the main Roo Code extension to run in a Node.js environment. +This CLI uses the `@klaus-code/vscode-shim` package to provide a VSCode API compatibility layer, allowing the main Klaus Code extension to run in a Node.js environment. ## Installation ### Quick Install (Recommended) -Install the Roo Code CLI with a single command: +Install the Klaus Code CLI with a single command: ```bash curl -fsSL https://raw.githubusercontent.com/RooCodeInc/Roo-Code/main/apps/cli/install.sh | sh @@ -59,7 +59,7 @@ pnpm install pnpm --filter roo-cline bundle # Build the cli. -pnpm --filter @roo-code/cli build +pnpm --filter @klaus-code/cli build ``` ## Usage @@ -101,12 +101,12 @@ In non-interactive mode: - Followup questions show a 60-second timeout, then auto-select the first suggestion - Typing any key cancels the timeout and allows manual input -### Roo Code Cloud Authentication +### Klaus Code Cloud Authentication -To use Roo Code Cloud features (like the provider proxy), you need to authenticate: +To use Klaus Code Cloud features (like the provider proxy), you need to authenticate: ```bash -# Log in to Roo Code Cloud (opens browser) +# Log in to Klaus Code Cloud (opens browser) roo auth login # Check authentication status @@ -118,7 +118,7 @@ roo auth logout The `auth login` command: -1. Opens your browser to authenticate with Roo Code Cloud +1. Opens your browser to authenticate with Klaus Code Cloud 2. Receives a secure token via localhost callback 3. Stores the token in `~/.config/roo/credentials.json` @@ -128,7 +128,7 @@ Tokens are valid for 90 days. The CLI will prompt you to re-authenticate when yo ``` ┌──────┐ ┌─────────┐ ┌───────────────┐ -│ CLI │ │ Browser │ │ Roo Code Cloud│ +│ CLI │ │ Browser │ │ Klaus Code Cloud│ └──┬───┘ └────┬────┘ └───────┬───────┘ │ │ │ │ Open auth URL │ │ @@ -167,7 +167,7 @@ Tokens are valid for 90 days. The CLI will prompt you to re-authenticate when yo | Command | Description | | ----------------- | ---------------------------------- | -| `roo auth login` | Authenticate with Roo Code Cloud | +| `roo auth login` | Authenticate with Klaus Code Cloud | | `roo auth logout` | Clear stored authentication token | | `roo auth status` | Show current authentication status | @@ -187,7 +187,7 @@ The CLI will look for API keys in environment variables if not provided via `--a | Variable | Description | | ----------------- | -------------------------------------------------------------------- | -| `ROO_WEB_APP_URL` | Override the Roo Code Cloud URL (default: `https://app.roocode.com`) | +| `ROO_WEB_APP_URL` | Override the Klaus Code Cloud URL (default: `https://app.roocode.com`) | ## Architecture @@ -219,7 +219,7 @@ The CLI will look for API keys in environment variables if not provided via `--a 2. **ExtensionHost** (`extension-host.ts`): - - Creates a VSCode API mock using `@roo-code/vscode-shim` + - Creates a VSCode API mock using `@klaus-code/vscode-shim` - Intercepts `require('vscode')` to return the mock - Loads and activates the extension bundle - Manages bidirectional message flow diff --git a/apps/cli/docs/AGENT_LOOP.md b/apps/cli/docs/AGENT_LOOP.md index a7b1d9eed40..13164c95908 100644 --- a/apps/cli/docs/AGENT_LOOP.md +++ b/apps/cli/docs/AGENT_LOOP.md @@ -1,6 +1,6 @@ # CLI Agent Loop -This document explains how the Roo Code CLI detects and tracks the agent loop state. +This document explains how the Klaus Code CLI detects and tracks the agent loop state. ## Overview @@ -298,10 +298,10 @@ client.sendMessage({ ## Type Guards -The CLI uses type guards from `@roo-code/types` for categorization: +The CLI uses type guards from `@klaus-code/types` for categorization: ```typescript -import { isIdleAsk, isInteractiveAsk, isResumableAsk, isNonBlockingAsk } from "@roo-code/types" +import { isIdleAsk, isInteractiveAsk, isResumableAsk, isNonBlockingAsk } from "@klaus-code/types" const ask = message.ask if (isInteractiveAsk(ask)) { diff --git a/apps/cli/eslint.config.mjs b/apps/cli/eslint.config.mjs index 694bf736642..df8d6227c5e 100644 --- a/apps/cli/eslint.config.mjs +++ b/apps/cli/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@roo-code/config-eslint/base" +import { config } from "@klaus-code/config-eslint/base" /** @type {import("eslint").Linter.Config} */ export default [...config] diff --git a/apps/cli/install.sh b/apps/cli/install.sh index 1b01e51aa58..3ffb36baa8c 100755 --- a/apps/cli/install.sh +++ b/apps/cli/install.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Roo Code CLI Installer +# Klaus Code CLI Installer # Usage: curl -fsSL https://raw.githubusercontent.com/RooCodeInc/Roo-Code/main/apps/cli/install.sh | sh # # Environment variables: @@ -267,7 +267,7 @@ verify_install() { # Print success message print_success() { echo "" - printf "${GREEN}${BOLD}✓ Roo Code CLI installed successfully!${NC}\n" + printf "${GREEN}${BOLD}✓ Klaus Code CLI installed successfully!${NC}\n" echo "" echo " Installation: $INSTALL_DIR" echo " Binary: $BIN_DIR/roo" @@ -287,7 +287,7 @@ main() { echo "" printf "${BLUE}${BOLD}" echo " ╭─────────────────────────────────╮" - echo " │ Roo Code CLI Installer │" + echo " │ Klaus Code CLI Installer │" echo " ╰─────────────────────────────────╯" printf "${NC}" echo "" diff --git a/apps/cli/package.json b/apps/cli/package.json index 6348bbe020a..1352b25af3d 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,12 +1,12 @@ { - "name": "@roo-code/cli", + "name": "@klaus-code/cli", "version": "0.0.49", - "description": "Roo Code CLI - Run the Roo Code agent from the command line", + "description": "Klaus Code CLI - Run the Klaus Code agent from the command line", "private": true, "type": "module", "main": "dist/index.js", "bin": { - "roo": "dist/index.js" + "klaus": "dist/index.js" }, "scripts": { "format": "prettier --write 'src/**/*.ts'", @@ -14,8 +14,8 @@ "check-types": "tsc --noEmit", "test": "vitest run", "build": "tsup", - "build:extension": "pnpm --filter roo-cline bundle", - "build:all": "pnpm --filter roo-cline bundle && tsup", + "build:extension": "pnpm --filter klaus-code bundle", + "build:all": "pnpm --filter klaus-code bundle && tsup", "dev": "tsup --watch", "start": "ROO_AUTH_BASE_URL=http://localhost:3000 ROO_SDK_BASE_URL=http://localhost:3001 ROO_CODE_PROVIDER_URL=http://localhost:8080/proxy node dist/index.js", "start:production": "node dist/index.js", @@ -24,9 +24,9 @@ }, "dependencies": { "@inkjs/ui": "^2.0.0", - "@roo-code/core": "workspace:^", - "@roo-code/types": "workspace:^", - "@roo-code/vscode-shim": "workspace:^", + "@klaus-code/core": "workspace:^", + "@klaus-code/types": "workspace:^", + "@klaus-code/vscode-shim": "workspace:^", "@trpc/client": "^11.8.1", "@vscode/ripgrep": "^1.15.9", "commander": "^12.1.0", @@ -40,8 +40,8 @@ "zustand": "^5.0.0" }, "devDependencies": { - "@roo-code/config-eslint": "workspace:^", - "@roo-code/config-typescript": "workspace:^", + "@klaus-code/config-eslint": "workspace:^", + "@klaus-code/config-typescript": "workspace:^", "@types/node": "^24.1.0", "@types/react": "^19.1.6", "ink-testing-library": "^4.0.0", diff --git a/apps/cli/scripts/release.sh b/apps/cli/scripts/release.sh index 7e736db3dbc..49ff4f301a8 100755 --- a/apps/cli/scripts/release.sh +++ b/apps/cli/scripts/release.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Roo Code CLI Release Script +# Klaus Code CLI Release Script # # Usage: # ./apps/cli/scripts/release.sh [options] [version] @@ -235,7 +235,7 @@ build() { pnpm bundle step "3/8" "Building CLI..." - pnpm --filter @roo-code/cli build + pnpm --filter @klaus-code/cli build info "Build complete" } @@ -265,7 +265,7 @@ create_tarball() { node -e " const pkg = require('$CLI_DIR/package.json'); const newPkg = { - name: '@roo-code/cli', + name: '@klaus-code/cli', version: '$VERSION', type: 'module', dependencies: { @@ -568,7 +568,7 @@ EOF fi gh release create "$TAG" \ - --title "Roo Code CLI v$VERSION" \ + --title "Klaus Code CLI v$VERSION" \ --notes "$RELEASE_NOTES" \ --prerelease \ --target "$COMMIT_SHA" \ @@ -667,7 +667,7 @@ main() { echo "" printf "${BLUE}${BOLD}" echo " ╭─────────────────────────────────╮" - echo " │ Roo Code CLI Release Script │" + echo " │ Klaus Code CLI Release Script │" echo " ╰─────────────────────────────────╯" printf "${NC}" diff --git a/apps/cli/src/__tests__/index.test.ts b/apps/cli/src/__tests__/index.test.ts index aa9649373d0..6f1c45d2d6e 100644 --- a/apps/cli/src/__tests__/index.test.ts +++ b/apps/cli/src/__tests__/index.test.ts @@ -10,7 +10,7 @@ * Run with: RUN_CLI_INTEGRATION_TESTS=true OPENROUTER_API_KEY=sk-or-v1-... pnpm test */ -// pnpm --filter @roo-code/cli test src/__tests__/index.test.ts +// pnpm --filter @klaus-code/cli test src/__tests__/index.test.ts import path from "path" import fs from "fs" diff --git a/apps/cli/src/agent/__tests__/extension-client.test.ts b/apps/cli/src/agent/__tests__/extension-client.test.ts index 3d87a30200f..7e37a89f267 100644 --- a/apps/cli/src/agent/__tests__/extension-client.test.ts +++ b/apps/cli/src/agent/__tests__/extension-client.test.ts @@ -5,7 +5,7 @@ import { isResumableAsk, isInteractiveAsk, isNonBlockingAsk, -} from "@roo-code/types" +} from "@klaus-code/types" import { AgentLoopState, detectAgentState } from "../agent-state.js" import { createMockClient } from "../extension-client.js" diff --git a/apps/cli/src/agent/__tests__/extension-host.test.ts b/apps/cli/src/agent/__tests__/extension-host.test.ts index 2354e3ab75d..fdc854f7b4d 100644 --- a/apps/cli/src/agent/__tests__/extension-host.test.ts +++ b/apps/cli/src/agent/__tests__/extension-host.test.ts @@ -1,15 +1,15 @@ -// pnpm --filter @roo-code/cli test src/agent/__tests__/extension-host.test.ts +// pnpm --filter @klaus-code/cli test src/agent/__tests__/extension-host.test.ts import { EventEmitter } from "events" import fs from "fs" -import type { ExtensionMessage, WebviewMessage } from "@roo-code/types" +import type { ExtensionMessage, WebviewMessage } from "@klaus-code/types" import { type ExtensionHostOptions, ExtensionHost } from "../extension-host.js" import { ExtensionClient } from "../extension-client.js" import { AgentLoopState } from "../agent-state.js" -vi.mock("@roo-code/vscode-shim", () => ({ +vi.mock("@klaus-code/vscode-shim", () => ({ createVSCodeAPI: vi.fn(() => ({ context: { extensionPath: "/test/extension" }, })), diff --git a/apps/cli/src/agent/agent-state.ts b/apps/cli/src/agent/agent-state.ts index ca4a099ccab..d6a8679bc25 100644 --- a/apps/cli/src/agent/agent-state.ts +++ b/apps/cli/src/agent/agent-state.ts @@ -2,14 +2,14 @@ * Agent Loop State Detection * * This module provides the core logic for detecting the current state of the - * Roo Code agent loop. The state is determined by analyzing the clineMessages + * Klaus Code agent loop. The state is determined by analyzing the clineMessages * array, specifically the last message's type and properties. * * Key insight: The agent loop stops whenever a message with `type: "ask"` arrives, * and the specific `ask` value determines what kind of response the agent is waiting for. */ -import { ClineMessage, ClineAsk, isIdleAsk, isResumableAsk, isInteractiveAsk, isNonBlockingAsk } from "@roo-code/types" +import { ClineMessage, ClineAsk, isIdleAsk, isResumableAsk, isInteractiveAsk, isNonBlockingAsk } from "@klaus-code/types" // ============================================================================= // Agent Loop State Enum diff --git a/apps/cli/src/agent/ask-dispatcher.ts b/apps/cli/src/agent/ask-dispatcher.ts index 8d57e4547cd..5c0dc27d741 100644 --- a/apps/cli/src/agent/ask-dispatcher.ts +++ b/apps/cli/src/agent/ask-dispatcher.ts @@ -23,8 +23,8 @@ import { isInteractiveAsk, isResumableAsk, isNonBlockingAsk, -} from "@roo-code/types" -import { debugLog } from "@roo-code/core/cli" +} from "@klaus-code/types" +import { debugLog } from "@klaus-code/core/cli" import { FOLLOWUP_TIMEOUT_SECONDS } from "@/types/index.js" diff --git a/apps/cli/src/agent/events.ts b/apps/cli/src/agent/events.ts index 9b374310ad7..62ab445d5cf 100644 --- a/apps/cli/src/agent/events.ts +++ b/apps/cli/src/agent/events.ts @@ -8,7 +8,7 @@ import { EventEmitter } from "events" -import { ClineMessage, ClineAsk } from "@roo-code/types" +import { ClineMessage, ClineAsk } from "@klaus-code/types" import type { AgentStateInfo } from "./agent-state.js" diff --git a/apps/cli/src/agent/extension-client.ts b/apps/cli/src/agent/extension-client.ts index c2d77dfdd91..aa0cb40828a 100644 --- a/apps/cli/src/agent/extension-client.ts +++ b/apps/cli/src/agent/extension-client.ts @@ -1,5 +1,5 @@ /** - * Roo Code Client + * Klaus Code Client * * This is the main entry point for the client library. It provides a high-level * API for: @@ -27,7 +27,7 @@ * ``` */ -import type { ExtensionMessage, WebviewMessage, ClineAskResponse, ClineMessage, ClineAsk } from "@roo-code/types" +import type { ExtensionMessage, WebviewMessage, ClineAskResponse, ClineMessage, ClineAsk } from "@klaus-code/types" import { StateStore } from "./state-store.js" import { MessageProcessor, parseExtensionMessage } from "./message-processor.js" @@ -84,7 +84,7 @@ export interface ExtensionClientConfig { // ============================================================================= /** - * ExtensionClient is the main interface for interacting with the Roo Code extension. + * ExtensionClient is the main interface for interacting with the Klaus Code extension. * * Basic usage: * ```typescript diff --git a/apps/cli/src/agent/extension-host.ts b/apps/cli/src/agent/extension-host.ts index e1f55a30d1f..9b063bd0de3 100644 --- a/apps/cli/src/agent/extension-host.ts +++ b/apps/cli/src/agent/extension-host.ts @@ -1,5 +1,5 @@ /** - * ExtensionHost - Loads and runs the Roo Code extension in CLI mode + * ExtensionHost - Loads and runs the Klaus Code extension in CLI mode * * This class is a thin coordination layer responsible for: * 1. Creating the vscode-shim mock @@ -22,9 +22,9 @@ import type { ReasoningEffortExtended, RooCodeSettings, WebviewMessage, -} from "@roo-code/types" -import { createVSCodeAPI, IExtensionHost, ExtensionHostEventMap, setRuntimeConfigValues } from "@roo-code/vscode-shim" -import { DebugLogger } from "@roo-code/core/cli" +} from "@klaus-code/types" +import { createVSCodeAPI, IExtensionHost, ExtensionHostEventMap, setRuntimeConfigValues } from "@klaus-code/vscode-shim" +import { DebugLogger } from "@klaus-code/core/cli" import type { SupportedProvider } from "@/types/index.js" import type { User } from "@/lib/sdk/index.js" diff --git a/apps/cli/src/agent/json-event-emitter.ts b/apps/cli/src/agent/json-event-emitter.ts index a1a404e5556..b586cd92805 100644 --- a/apps/cli/src/agent/json-event-emitter.ts +++ b/apps/cli/src/agent/json-event-emitter.ts @@ -14,7 +14,7 @@ * - `done` flag instead of partial:false */ -import type { ClineMessage } from "@roo-code/types" +import type { ClineMessage } from "@klaus-code/types" import type { JsonEvent, JsonEventCost, JsonFinalOutput } from "@/types/json-events.js" diff --git a/apps/cli/src/agent/message-processor.ts b/apps/cli/src/agent/message-processor.ts index 2b9fd13602f..19e222b6c36 100644 --- a/apps/cli/src/agent/message-processor.ts +++ b/apps/cli/src/agent/message-processor.ts @@ -17,8 +17,8 @@ * - "invoke": Command invocations */ -import { ExtensionMessage, ClineMessage } from "@roo-code/types" -import { debugLog } from "@roo-code/core/cli" +import { ExtensionMessage, ClineMessage } from "@klaus-code/types" +import { debugLog } from "@klaus-code/core/cli" import type { StateStore } from "./state-store.js" import type { TypedEventEmitter, AgentStateChangeEvent, WaitingForInputEvent, TaskCompletedEvent } from "./events.js" diff --git a/apps/cli/src/agent/output-manager.ts b/apps/cli/src/agent/output-manager.ts index 0863546f6c4..8997ac48e78 100644 --- a/apps/cli/src/agent/output-manager.ts +++ b/apps/cli/src/agent/output-manager.ts @@ -13,7 +13,7 @@ * - Can be disabled for TUI mode where Ink controls the terminal */ -import { ClineMessage, ClineSay } from "@roo-code/types" +import { ClineMessage, ClineSay } from "@klaus-code/types" import { Observable } from "./events.js" diff --git a/apps/cli/src/agent/state-store.ts b/apps/cli/src/agent/state-store.ts index 68dcfc40698..71410bbb9bf 100644 --- a/apps/cli/src/agent/state-store.ts +++ b/apps/cli/src/agent/state-store.ts @@ -12,7 +12,7 @@ * - Queryable: Current state is always accessible */ -import { ClineMessage, ExtensionState } from "@roo-code/types" +import { ClineMessage, ExtensionState } from "@klaus-code/types" import { detectAgentState, AgentStateInfo, AgentLoopState } from "./agent-state.js" import { Observable } from "./events.js" diff --git a/apps/cli/src/commands/cli/run.ts b/apps/cli/src/commands/cli/run.ts index 663ed5cf750..d45e70955f5 100644 --- a/apps/cli/src/commands/cli/run.ts +++ b/apps/cli/src/commands/cli/run.ts @@ -4,7 +4,7 @@ import { fileURLToPath } from "url" import { createElement } from "react" -import { setLogger } from "@roo-code/vscode-shim" +import { setLogger } from "@klaus-code/vscode-shim" import { FlagOptions, @@ -83,7 +83,7 @@ export async function run(promptArg: string | undefined, flagOptions: FlagOption exitOnComplete: effectiveExitOnComplete, } - // Roo Code Cloud Authentication + // Klaus Code Cloud Authentication if (isOnboardingEnabled) { let { onboardingProviderChoice } = settings @@ -112,12 +112,12 @@ export async function run(promptArg: string | undefined, flagOptions: FlagOption extensionHostOptions.apiKey = rooToken extensionHostOptions.user = me.user } catch { - console.error("[CLI] Your Roo Code Router token is not valid.") + console.error("[CLI] Your Klaus Code Router token is not valid.") console.error("[CLI] Please run: roo auth login") process.exit(1) } } else { - console.error("[CLI] Your Roo Code Router token is missing.") + console.error("[CLI] Your Klaus Code Router token is missing.") console.error("[CLI] Please run: roo auth login") process.exit(1) } @@ -139,7 +139,7 @@ export async function run(promptArg: string | undefined, flagOptions: FlagOption if (!extensionHostOptions.apiKey) { if (extensionHostOptions.provider === "roo") { - console.error("[CLI] Error: Authentication with Roo Code Cloud failed or was cancelled.") + console.error("[CLI] Error: Authentication with Klaus Code Cloud failed or was cancelled.") console.error("[CLI] Please run: roo auth login") console.error("[CLI] Or use --api-key to provide your own API key.") } else { diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index 5b663c2bdcd..001fa09ba3a 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -8,7 +8,7 @@ const program = new Command() program .name("roo") - .description("Roo Code CLI - starts an interactive session by default, use -p/--print for non-interactive output") + .description("Klaus Code CLI - starts an interactive session by default, use -p/--print for non-interactive output") .version(VERSION) program @@ -37,11 +37,11 @@ program ) .action(run) -const authCommand = program.command("auth").description("Manage authentication for Roo Code Cloud") +const authCommand = program.command("auth").description("Manage authentication for Klaus Code Cloud") authCommand .command("login") - .description("Authenticate with Roo Code Cloud") + .description("Authenticate with Klaus Code Cloud") .option("-v, --verbose", "Enable verbose output", false) .action(async (options: { verbose: boolean }) => { const result = await login({ verbose: options.verbose }) @@ -50,7 +50,7 @@ authCommand authCommand .command("logout") - .description("Log out from Roo Code Cloud") + .description("Log out from Klaus Code Cloud") .option("-v, --verbose", "Enable verbose output", false) .action(async (options: { verbose: boolean }) => { const result = await logout({ verbose: options.verbose }) diff --git a/apps/cli/src/lib/utils/context-window.ts b/apps/cli/src/lib/utils/context-window.ts index c1224c8b1ec..2f17d6cc318 100644 --- a/apps/cli/src/lib/utils/context-window.ts +++ b/apps/cli/src/lib/utils/context-window.ts @@ -1,4 +1,4 @@ -import type { ProviderSettings } from "@roo-code/types" +import type { ProviderSettings } from "@klaus-code/types" import type { RouterModels } from "@/ui/store.js" diff --git a/apps/cli/src/lib/utils/provider.ts b/apps/cli/src/lib/utils/provider.ts index 64aec430c1b..4747070b1b7 100644 --- a/apps/cli/src/lib/utils/provider.ts +++ b/apps/cli/src/lib/utils/provider.ts @@ -1,4 +1,4 @@ -import { RooCodeSettings } from "@roo-code/types" +import { RooCodeSettings } from "@klaus-code/types" import type { SupportedProvider } from "@/types/index.js" diff --git a/apps/cli/src/types/constants.ts b/apps/cli/src/types/constants.ts index 5b3dc577786..3020a411bba 100644 --- a/apps/cli/src/types/constants.ts +++ b/apps/cli/src/types/constants.ts @@ -1,4 +1,4 @@ -import { reasoningEffortsExtended } from "@roo-code/types" +import { reasoningEffortsExtended } from "@klaus-code/types" export const DEFAULT_FLAGS = { mode: "code", @@ -21,6 +21,6 @@ export const ASCII_ROO = ` _,' ___ // \\\\ ,/' \`\\_,` -export const AUTH_BASE_URL = process.env.ROO_AUTH_BASE_URL ?? "https://app.roocode.com" +export const AUTH_BASE_URL = process.env.ROO_AUTH_BASE_URL ?? "https://app.tbd" -export const SDK_BASE_URL = process.env.ROO_SDK_BASE_URL ?? "https://cloud-api.roocode.com" +export const SDK_BASE_URL = process.env.ROO_SDK_BASE_URL ?? "https://cloud-api.tbd" diff --git a/apps/cli/src/types/types.ts b/apps/cli/src/types/types.ts index 05392ccca86..e3e721a25d2 100644 --- a/apps/cli/src/types/types.ts +++ b/apps/cli/src/types/types.ts @@ -1,4 +1,4 @@ -import type { ProviderName, ReasoningEffortExtended } from "@roo-code/types" +import type { ProviderName, ReasoningEffortExtended } from "@klaus-code/types" import type { OutputFormat } from "./json-events.js" export const supportedProviders = [ diff --git a/apps/cli/src/ui/__tests__/store.test.ts b/apps/cli/src/ui/__tests__/store.test.ts index 5b8b4fbf774..b8222df10a5 100644 --- a/apps/cli/src/ui/__tests__/store.test.ts +++ b/apps/cli/src/ui/__tests__/store.test.ts @@ -1,4 +1,4 @@ -import { RooCodeSettings } from "@roo-code/types" +import { RooCodeSettings } from "@klaus-code/types" import { useCLIStore } from "../store.js" diff --git a/apps/cli/src/ui/components/Header.tsx b/apps/cli/src/ui/components/Header.tsx index 040e2759188..f059c2eb8ee 100644 --- a/apps/cli/src/ui/components/Header.tsx +++ b/apps/cli/src/ui/components/Header.tsx @@ -1,7 +1,7 @@ import { memo } from "react" import { Text, Box } from "ink" -import type { TokenUsage } from "@roo-code/types" +import type { TokenUsage } from "@klaus-code/types" import { ASCII_ROO } from "@/types/constants.js" @@ -32,7 +32,7 @@ function Header({ const { columns } = useTerminalSize() const homeDir = process.env.HOME || process.env.USERPROFILE || "" - const title = `Roo Code CLI v${version}` + const title = `Klaus Code CLI v${version}` const remainingDashes = Math.max(0, columns - `── ${title} `.length) return ( diff --git a/apps/cli/src/ui/components/MetricsDisplay.tsx b/apps/cli/src/ui/components/MetricsDisplay.tsx index 9508f07ce24..4414b41f00e 100644 --- a/apps/cli/src/ui/components/MetricsDisplay.tsx +++ b/apps/cli/src/ui/components/MetricsDisplay.tsx @@ -1,7 +1,7 @@ import { memo } from "react" import { Text, Box } from "ink" -import type { TokenUsage } from "@roo-code/types" +import type { TokenUsage } from "@klaus-code/types" import * as theme from "../theme.js" import ProgressBar from "./ProgressBar.js" diff --git a/apps/cli/src/ui/components/TodoChangeDisplay.tsx b/apps/cli/src/ui/components/TodoChangeDisplay.tsx index f41049122af..c688e1dc952 100644 --- a/apps/cli/src/ui/components/TodoChangeDisplay.tsx +++ b/apps/cli/src/ui/components/TodoChangeDisplay.tsx @@ -1,7 +1,7 @@ import { memo } from "react" import { Box, Text } from "ink" -import type { TodoItem } from "@roo-code/types" +import type { TodoItem } from "@klaus-code/types" import * as theme from "../theme.js" diff --git a/apps/cli/src/ui/components/TodoDisplay.tsx b/apps/cli/src/ui/components/TodoDisplay.tsx index 5eb962cac3d..10aaace7b99 100644 --- a/apps/cli/src/ui/components/TodoDisplay.tsx +++ b/apps/cli/src/ui/components/TodoDisplay.tsx @@ -1,7 +1,7 @@ import { memo } from "react" import { Box, Text } from "ink" -import type { TodoItem } from "@roo-code/types" +import type { TodoItem } from "@klaus-code/types" import * as theme from "../theme.js" import ProgressBar from "./ProgressBar.js" diff --git a/apps/cli/src/ui/components/__tests__/TodoChangeDisplay.test.tsx b/apps/cli/src/ui/components/__tests__/TodoChangeDisplay.test.tsx index a26c66e3df3..623b8e86c74 100644 --- a/apps/cli/src/ui/components/__tests__/TodoChangeDisplay.test.tsx +++ b/apps/cli/src/ui/components/__tests__/TodoChangeDisplay.test.tsx @@ -1,6 +1,6 @@ import { render } from "ink-testing-library" -import type { TodoItem } from "@roo-code/types" +import type { TodoItem } from "@klaus-code/types" import TodoChangeDisplay from "../TodoChangeDisplay.js" diff --git a/apps/cli/src/ui/components/__tests__/TodoDisplay.test.tsx b/apps/cli/src/ui/components/__tests__/TodoDisplay.test.tsx index f48bfe8401a..72a6eab7b3c 100644 --- a/apps/cli/src/ui/components/__tests__/TodoDisplay.test.tsx +++ b/apps/cli/src/ui/components/__tests__/TodoDisplay.test.tsx @@ -1,6 +1,6 @@ import { render } from "ink-testing-library" -import type { TodoItem } from "@roo-code/types" +import type { TodoItem } from "@klaus-code/types" import TodoDisplay from "../TodoDisplay.js" import { resetNerdFontCache } from "../Icon.js" diff --git a/apps/cli/src/ui/components/autocomplete/triggers/HistoryTrigger.tsx b/apps/cli/src/ui/components/autocomplete/triggers/HistoryTrigger.tsx index 443fdfa9797..15db6b06748 100644 --- a/apps/cli/src/ui/components/autocomplete/triggers/HistoryTrigger.tsx +++ b/apps/cli/src/ui/components/autocomplete/triggers/HistoryTrigger.tsx @@ -168,7 +168,7 @@ export function createHistoryTrigger(config: HistoryTriggerConfig): Autocomplete } /** - * Convert HistoryItem from @roo-code/types to HistoryResult. + * Convert HistoryItem from @klaus-code/types to HistoryResult. * Use this to adapt history items from the store to the trigger's expected type. */ export function toHistoryResult(item: { diff --git a/apps/cli/src/ui/components/onboarding/OnboardingScreen.tsx b/apps/cli/src/ui/components/onboarding/OnboardingScreen.tsx index 86c15f5b274..d858de2ebe9 100644 --- a/apps/cli/src/ui/components/onboarding/OnboardingScreen.tsx +++ b/apps/cli/src/ui/components/onboarding/OnboardingScreen.tsx @@ -16,7 +16,7 @@ export function OnboardingScreen({ onSelect }: OnboardingScreenProps) { Welcome! How would you like to connect to an LLM provider? setSearchQuery(e.target.value)} - className="w-full rounded-full border border-input bg-background px-10 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2" - /> - -

- {filteredAndSortedModels.length} of {nonDeprecatedCount} models -
- - -
-
- - -
-
- - - - -
-
- {loading && ( -
- -

Loading model list...

-
- )} - - {error && ( -
- -

Oops, couldn't load the model list.

-

Try again in a bit please.

-
- )} - - {!loading && !error && filteredAndSortedModels.length === 0 && ( -
- -

No models match your search.

-

- Keep in mind we don't have every model under the sun – only the ones we think - are worth using. -
- You can always use a third-party provider to access a wider selection. -

-
- )} - - {!loading && !error && filteredAndSortedModels.length > 0 && ( -
- {filteredAndSortedModels.map((model) => ( - - ))} -
- )} -
-
- - - {/* FAQ Section */} -
- -
-
-

Frequently Asked Questions

-
-
- {faqs.map((faq, index) => ( -
-

{faq.question}

-

{faq.answer}

-
- ))} -
-
-
- - ) -} diff --git a/apps/web-roo-code/src/app/provider/pricing/components/model-card.tsx b/apps/web-roo-code/src/app/provider/pricing/components/model-card.tsx deleted file mode 100644 index 26f35457912..00000000000 --- a/apps/web-roo-code/src/app/provider/pricing/components/model-card.tsx +++ /dev/null @@ -1,190 +0,0 @@ -import { ModelWithTotalPrice } from "@/lib/types/models" -import { formatCurrency, formatTokens } from "@/lib/formatters" -import { - ArrowLeftToLine, - ArrowRightToLine, - Building2, - Check, - Expand, - Gift, - HardDriveDownload, - HardDriveUpload, - RulerDimensionLine, - ChevronDown, - ChevronUp, -} from "lucide-react" -import { useState } from "react" - -interface ModelCardProps { - model: ModelWithTotalPrice -} - -export function ModelCard({ model }: ModelCardProps) { - // Prices are per token, multiply by 1M to get price per million tokens - const inputPrice = parseFloat(model.pricing.input) * 1_000_000 - const outputPrice = parseFloat(model.pricing.output) * 1_000_000 - const cacheReadPrice = parseFloat(model.pricing.input_cache_read || "0") * 1_000_000 - const cacheWritePrice = parseFloat(model.pricing.input_cache_write || "0") * 1_000_000 - - const free = model.tags.includes("free") - // Filter tags to only show vision and reasoning - const displayTags = model.tags.filter((tag) => tag === "vision" || tag === "reasoning") - - // Mobile collapsed/expanded state - const [expanded, setExpanded] = useState(false) - - return ( -
- {/* Header: always visible */} -
-

- {model.name} - {free && ( - - - Free! - - )} -

-

- {model.description} -

-
- - {/* Content - pinned to bottom */} -
- - - {/* Provider: always visible if present */} - {model.owned_by && ( - - - - - )} - - {/* Context Window: always visible */} - - - - - - {/* Max Output Tokens: always visible on >=sm, expandable on mobile */} - - - - - - {/* Input Price: always visible */} - - - - - - {/* Output Price: always visible */} - - - - - - {/* Cache pricing: only visible on mobile when expanded, always visible on >=sm */} - {cacheReadPrice > 0 && ( - - - - - )} - - {cacheWritePrice > 0 && ( - - - - - )} - - {/* Tags row: only show if there are vision or reasoning tags */} - {displayTags.length > 0 && ( - - - - - )} - - {/* Mobile-only toggle row */} - - - - -
- - Provider - {model.owned_by}
- - Context Window - {formatTokens(model.context_window)}
- - Max Output Tokens - {formatTokens(model.max_tokens)}
- - Input Price - - {inputPrice === 0 ? "Free" : `${formatCurrency(inputPrice)}/1M tokens`} -
- - Output Price - - {outputPrice === 0 ? "Free" : `${formatCurrency(outputPrice)}/1M tokens`} -
- - Cache Read - {formatCurrency(cacheReadPrice)}/1M tokens
- - Cache Write - {formatCurrency(cacheWritePrice)}/1M tokens
Features - {displayTags.map((tag) => ( - - - {tag} - - ))} -
- -
-
-
- ) -} diff --git a/apps/web-roo-code/src/app/reviewer/content-b.ts b/apps/web-roo-code/src/app/reviewer/content-b.ts deleted file mode 100644 index 0c2f76a2f53..00000000000 --- a/apps/web-roo-code/src/app/reviewer/content-b.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { type AgentPageContent } from "@/app/shared/agent-page-content" - -// Workaround for next/image choking on these for some reason -import hero from "/public/heroes/agent-reviewer.png" - -// Re-export for convenience -export type { AgentPageContent } - -export const content: AgentPageContent = { - agentName: "PR Reviewer", - hero: { - icon: "GitPullRequest", - heading: "Code reviews that catch what other AI tools (and most humans) miss.", - paragraphs: [ - "Run-of-the-mill, token-saving AI code review tools will surely catch syntax errors and style issues, but they'll usually miss the bugs that actually matter: logic flaws, security vulnerabilities, and misunderstood requirements.", - "Roo Code's PR Reviewer uses advanced reasoning models and full repository context to find the issues that slip through—before they reach production.", - ], - image: { - url: hero.src, - width: 800, - height: 474, - alt: "Example of a code review generated by Roo Code PR Reviewer", - }, - crossAgentLink: { - text: "Works great with", - links: [ - { - text: "PR Fixer Agent", - href: "/pr-fixer", - icon: "Wrench", - }, - ], - }, - cta: { - buttonText: "Try now for free", - disclaimer: "", - tracking: "&agent=reviewer", - }, - }, - howItWorks: { - heading: "How It Works", - steps: [ - { - title: "1. Connect Your Repository", - description: - "Link your GitHub repository and configure which branches and pull requests should be reviewed.", - icon: "GitPullRequest", - }, - { - title: "2. Add Your API Key", - description: - "Provide your AI provider API key and set your review preferences, custom rules, and quality standards.", - icon: "Key", - }, - { - title: "3. Get Review Comments", - description: - "Every pull request gets detailed GitHub comments in minutes from a Roo Code agent highlighting issues and suggesting improvements.", - icon: "MessageSquareCode", - }, - ], - }, - whyBetter: { - heading: "Why Roo's PR Reviewer is different", - features: [ - { - title: "Bring your own key, get uncompromised reviews", - paragraphs: [ - "Most AI review tools use fixed pricing, which means they skimp on tokens to protect their margins. That leads to shallow analysis and missed issues.", - "With Roo, you bring your own API key. We optimize prompts for depth, not cost-cutting, so reviews focus on real problems like business logic, security vulnerabilities, and architectural issues.", - ], - icon: "Blocks", - }, - { - title: "Advanced reasoning that understands what matters", - description: - "We leverage state-of-the-art reasoning models with sophisticated workflows: diff analysis, context gathering, impact mapping, and contract validation. This catches the subtle bugs that surface-level tools miss—misunderstood requirements, edge cases, and integration risks.", - icon: "ListChecks", - }, - { - title: "Repository-aware, not snippet-aware", - description: - "Roo analyzes your entire codebase context—dependency graphs, code ownership, team conventions, and historical patterns. It understands how changes interact with existing systems, not just whether individual lines look correct.", - icon: "BookMarked", - }, - ], - }, - cta: { - heading: "Ready for better code reviews?", - description: "Start finding the issues that matter with AI-powered reviews built for depth, not cost-cutting.", - buttonText: "Try now for free", - }, -} diff --git a/apps/web-roo-code/src/app/reviewer/content.ts b/apps/web-roo-code/src/app/reviewer/content.ts deleted file mode 100644 index 0c2f76a2f53..00000000000 --- a/apps/web-roo-code/src/app/reviewer/content.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { type AgentPageContent } from "@/app/shared/agent-page-content" - -// Workaround for next/image choking on these for some reason -import hero from "/public/heroes/agent-reviewer.png" - -// Re-export for convenience -export type { AgentPageContent } - -export const content: AgentPageContent = { - agentName: "PR Reviewer", - hero: { - icon: "GitPullRequest", - heading: "Code reviews that catch what other AI tools (and most humans) miss.", - paragraphs: [ - "Run-of-the-mill, token-saving AI code review tools will surely catch syntax errors and style issues, but they'll usually miss the bugs that actually matter: logic flaws, security vulnerabilities, and misunderstood requirements.", - "Roo Code's PR Reviewer uses advanced reasoning models and full repository context to find the issues that slip through—before they reach production.", - ], - image: { - url: hero.src, - width: 800, - height: 474, - alt: "Example of a code review generated by Roo Code PR Reviewer", - }, - crossAgentLink: { - text: "Works great with", - links: [ - { - text: "PR Fixer Agent", - href: "/pr-fixer", - icon: "Wrench", - }, - ], - }, - cta: { - buttonText: "Try now for free", - disclaimer: "", - tracking: "&agent=reviewer", - }, - }, - howItWorks: { - heading: "How It Works", - steps: [ - { - title: "1. Connect Your Repository", - description: - "Link your GitHub repository and configure which branches and pull requests should be reviewed.", - icon: "GitPullRequest", - }, - { - title: "2. Add Your API Key", - description: - "Provide your AI provider API key and set your review preferences, custom rules, and quality standards.", - icon: "Key", - }, - { - title: "3. Get Review Comments", - description: - "Every pull request gets detailed GitHub comments in minutes from a Roo Code agent highlighting issues and suggesting improvements.", - icon: "MessageSquareCode", - }, - ], - }, - whyBetter: { - heading: "Why Roo's PR Reviewer is different", - features: [ - { - title: "Bring your own key, get uncompromised reviews", - paragraphs: [ - "Most AI review tools use fixed pricing, which means they skimp on tokens to protect their margins. That leads to shallow analysis and missed issues.", - "With Roo, you bring your own API key. We optimize prompts for depth, not cost-cutting, so reviews focus on real problems like business logic, security vulnerabilities, and architectural issues.", - ], - icon: "Blocks", - }, - { - title: "Advanced reasoning that understands what matters", - description: - "We leverage state-of-the-art reasoning models with sophisticated workflows: diff analysis, context gathering, impact mapping, and contract validation. This catches the subtle bugs that surface-level tools miss—misunderstood requirements, edge cases, and integration risks.", - icon: "ListChecks", - }, - { - title: "Repository-aware, not snippet-aware", - description: - "Roo analyzes your entire codebase context—dependency graphs, code ownership, team conventions, and historical patterns. It understands how changes interact with existing systems, not just whether individual lines look correct.", - icon: "BookMarked", - }, - ], - }, - cta: { - heading: "Ready for better code reviews?", - description: "Start finding the issues that matter with AI-powered reviews built for depth, not cost-cutting.", - buttonText: "Try now for free", - }, -} diff --git a/apps/web-roo-code/src/app/reviewer/page.tsx b/apps/web-roo-code/src/app/reviewer/page.tsx deleted file mode 100644 index 776ded6847f..00000000000 --- a/apps/web-roo-code/src/app/reviewer/page.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import type { Metadata } from "next" - -import { SEO } from "@/lib/seo" -import { ogImageUrl } from "@/lib/og" -import { AgentLandingContent } from "@/app/shared/AgentLandingContent" -import { getContentVariant } from "@/app/shared/getContentVariant" -import { content as contentA } from "./content" -import { content as contentB } from "./content-b" - -const TITLE = "PR Reviewer" -const DESCRIPTION = - "Get comprehensive AI-powered PR reviews that save you time, not tokens. Bring your own API key and leverage advanced reasoning, repository-aware analysis, and actionable feedback to keep your PR queue moving." -const OG_DESCRIPTION = "AI-powered PR reviews that save you time, not tokens" -const PATH = "/reviewer" - -export const metadata: Metadata = { - title: TITLE, - description: DESCRIPTION, - alternates: { - canonical: `${SEO.url}${PATH}`, - }, - openGraph: { - title: TITLE, - description: DESCRIPTION, - url: `${SEO.url}${PATH}`, - siteName: SEO.name, - images: [ - { - url: ogImageUrl(TITLE, OG_DESCRIPTION), - width: 1200, - height: 630, - alt: TITLE, - }, - ], - locale: SEO.locale, - type: "website", - }, - twitter: { - card: SEO.twitterCard, - title: TITLE, - description: DESCRIPTION, - images: [ogImageUrl(TITLE, OG_DESCRIPTION)], - }, - keywords: [ - ...SEO.keywords, - "PR reviewer", - "code review", - "pull request review", - "AI code review", - "GitHub PR review", - "automated code review", - "repository-aware review", - "bring your own key", - "BYOK AI", - "code quality", - "development workflow", - "cloud agents", - "AI development team", - ], -} - -export default async function AgentReviewerPage({ searchParams }: { searchParams: Promise<{ v?: string }> }) { - const params = await searchParams - const content = getContentVariant(params, { - A: contentA, - B: contentB, - }) - - return -} diff --git a/apps/web-roo-code/src/app/robots.ts b/apps/web-roo-code/src/app/robots.ts deleted file mode 100644 index fcdda5031e8..00000000000 --- a/apps/web-roo-code/src/app/robots.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { MetadataRoute } from "next" -import { SEO } from "@/lib/seo" - -export default function robots(): MetadataRoute.Robots { - return { - rules: { - userAgent: "*", - allow: "/", - }, - sitemap: `${SEO.url}/sitemap.xml`, - host: SEO.url, - } -} diff --git a/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx b/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx deleted file mode 100644 index 4db166b9199..00000000000 --- a/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx +++ /dev/null @@ -1,235 +0,0 @@ -"use client" - -import { - ArrowRight, - GitPullRequest, - Wrench, - Key, - MessageSquareCode, - Blocks, - ListChecks, - BookMarked, - History, - LucideIcon, -} from "lucide-react" -import Image from "next/image" -import Link from "next/link" - -import { Button } from "@/components/ui" -import { AnimatedBackground, UseExamplesSection } from "@/components/homepage" -import { EXTERNAL_LINKS } from "@/lib/constants" -import { type AgentPageContent, type IconName } from "./agent-page-content" - -/** - * Maps icon names to actual Lucide icon components - */ -const iconMap: Record = { - GitPullRequest, - Wrench, - Key, - MessageSquareCode, - Blocks, - ListChecks, - BookMarked, - History, -} - -/** - * Converts an icon name string to a Lucide icon component - */ -function getIcon(iconName?: IconName): LucideIcon | undefined { - return iconName ? iconMap[iconName] : undefined -} - -export function AgentLandingContent({ content }: { content: AgentPageContent }) { - return ( - <> - {/* Hero Section */} -
- -
-
- - - {content.hero.image && ( -
-
- {content.hero.image.alt -
-
- )} -
-
-
- - {/* How It Works Section */} -
-
-
-
-
-
-
-

- {content.howItWorks.heading} -

-
-
- -
-
    - {content.howItWorks.steps.map((step, index) => { - const Icon = getIcon(step.icon) - return ( -
  • - {Icon && } -

    - {step.title} -

    -
    - {step.description} -
    -
  • - ) - })} -
-
-
-
- - {/* Why Better Section */} -
-
-
-
-
-
-
-

- {content.whyBetter.heading} -

-
-
- -
-
    - {content.whyBetter.features.map((feature, index) => { - const Icon = getIcon(feature.icon) - return ( -
  • - {Icon && } -

    - {feature.title} -

    -
    - {feature.description &&

    {feature.description}

    } - {feature.paragraphs && - feature.paragraphs.map((paragraph, pIndex) => ( -

    {paragraph}

    - ))} -
    -
  • - ) - })} -
-
-
-
- - - - {/* CTA Section */} -
-
-
-

{content.cta.heading}

-

- {content.cta.description} -

- -
-
-
- - ) -} diff --git a/apps/web-roo-code/src/app/shared/agent-page-content.ts b/apps/web-roo-code/src/app/shared/agent-page-content.ts deleted file mode 100644 index 01a64e85472..00000000000 --- a/apps/web-roo-code/src/app/shared/agent-page-content.ts +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Supported icon names that can be used in agent page content. - * These strings are mapped to actual Lucide components in the client. - */ -export type IconName = - | "GitPullRequest" - | "Wrench" - | "Key" - | "MessageSquareCode" - | "Blocks" - | "ListChecks" - | "BookMarked" - | "History" - -/** - * Generic content structure for agent landing pages. - * This interface can be reused across different agent pages (PR Reviewer, PR Fixer, etc.) - * to maintain consistency and enable A/B testing capabilities. - * - * Note: Icons are referenced by string names (not components) to support - * serialization from Server Components to Client Components. - */ -export interface AgentPageContent { - agentName: string - hero: { - /** Optional icon name to display in the hero section */ - icon?: IconName - heading: string - paragraphs: string[] - image?: { - url: string - width: number - height: number - alt?: string - } - crossAgentLink: { - text: string - links: Array<{ - text: string - href: string - icon?: IconName - }> - } - cta: { - buttonText: string - disclaimer: string - tracking: string - } - } - howItWorks: { - heading: string - steps: Array<{ - title: string - /** Supports rich text content including React components */ - description: string | React.ReactNode - icon?: IconName - }> - } - whyBetter: { - heading: string - features: Array<{ - title: string - /** Supports rich text content including React components */ - description?: string | React.ReactNode - /** Supports rich text content including React components */ - paragraphs?: Array - icon?: IconName - }> - } - cta: { - heading: string - description: string - buttonText: string - } -} diff --git a/apps/web-roo-code/src/app/shared/getContentVariant.ts b/apps/web-roo-code/src/app/shared/getContentVariant.ts deleted file mode 100644 index 0d8fccdde45..00000000000 --- a/apps/web-roo-code/src/app/shared/getContentVariant.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { AgentPageContent } from "./agent-page-content" - -/** - * Selects the appropriate content variant based on the query parameter. - * - * @param searchParams - The search parameters from the page props - * @param variants - A record mapping variant letters to content objects - * @returns The selected content variant, defaulting to variant 'A' if not found or invalid - * - * @example - * ```tsx - * const content = getContentVariant(searchParams, { - * A: contentA, - * B: contentB, - * C: contentC, - * }) - * ``` - */ -export function getContentVariant( - searchParams: { v?: string }, - variants: Record, -): AgentPageContent { - const variant = searchParams.v?.toUpperCase() - - // Return the specified variant if it exists, otherwise default to 'A' - if (variant && variants[variant]) { - return variants[variant] - } - - // Ensure 'A' variant always exists as fallback - if (!variants.A) { - throw new Error("Content variants must include variant 'A' as the default") - } - - return variants.A -} diff --git a/apps/web-roo-code/src/app/shell.tsx b/apps/web-roo-code/src/app/shell.tsx deleted file mode 100644 index 84a42bed21b..00000000000 --- a/apps/web-roo-code/src/app/shell.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { getGitHubStars, getVSCodeDownloads } from "@/lib/stats" - -import { NavBar, Footer } from "@/components/chromes" - -// Invalidate cache when a request comes in, at most once every hour. -export const revalidate = 3600 - -export default async function Shell({ children }: { children: React.ReactNode }) { - const [stars, downloads] = await Promise.all([getGitHubStars(), getVSCodeDownloads()]) - - return ( -
- -
{children}
-
-
- ) -} diff --git a/apps/web-roo-code/src/app/slack/page.tsx b/apps/web-roo-code/src/app/slack/page.tsx deleted file mode 100644 index c1fb39cb3e2..00000000000 --- a/apps/web-roo-code/src/app/slack/page.tsx +++ /dev/null @@ -1,401 +0,0 @@ -import { - ArrowRight, - Brain, - CreditCard, - GitBranch, - GraduationCap, - Link2, - MessageSquare, - Settings, - Shield, - Slack, - Users, - Zap, -} from "lucide-react" -import type { LucideIcon } from "lucide-react" -import type { Metadata } from "next" - -import { AnimatedBackground } from "@/components/homepage" -import { SlackThreadDemo } from "@/components/slack/slack-thread-demo" -import { Button } from "@/components/ui" -import { EXTERNAL_LINKS } from "@/lib/constants" -import { SEO } from "@/lib/seo" -import { ogImageUrl } from "@/lib/og" - -const TITLE = "Roo Code for Slack" -const DESCRIPTION = - "Mention @Roomote in any channel to explain code, plan features, or ship a PR, all without leaving the conversation." -const OG_DESCRIPTION = "Your AI Team in Slack" -const PATH = "/slack" - -export const metadata: Metadata = { - title: TITLE, - description: DESCRIPTION, - alternates: { - canonical: `${SEO.url}${PATH}`, - }, - openGraph: { - title: TITLE, - description: DESCRIPTION, - url: `${SEO.url}${PATH}`, - siteName: SEO.name, - images: [ - { - url: ogImageUrl(TITLE, OG_DESCRIPTION), - width: 1200, - height: 630, - alt: TITLE, - }, - ], - locale: SEO.locale, - type: "website", - }, - twitter: { - card: SEO.twitterCard, - title: TITLE, - description: DESCRIPTION, - images: [ogImageUrl(TITLE, OG_DESCRIPTION)], - }, - keywords: [ - ...SEO.keywords, - "slack integration", - "slack bot", - "AI in slack", - "code assistant slack", - "@Roomote", - "team collaboration", - ], -} - -// Invalidate cache when a request comes in, at most once every hour. -export const revalidate = 3600 - -type ValueProp = { - icon: LucideIcon - title: string - description: string -} - -const VALUE_PROPS: ValueProp[] = [ - { - icon: GitBranch, - title: "Discussion to PR.", - description: - "Your team discusses a feature in Slack. @Roomote turns the discussion into a plan. Then builds it. All without leaving the conversation.", - }, - { - icon: Brain, - title: "Thread-aware.", - description: - '@Roomote reads the full thread before responding. Ask "Can we add caching here?" and it knows exactly what code you mean.', - }, - { - icon: Link2, - title: "Chain agents.", - description: - "Start with a Planner to spec it out. Then call the Coder to build it. Multi-step workflows, one Slack thread.", - }, - { - icon: Users, - title: "Open to all.", - description: - "Anyone on your team can ask @Roomote to fix bugs, build features, or investigate issues. Engineering gets looped in only when needed.", - }, - { - icon: GraduationCap, - title: "Built-in learning.", - description: "Public channel mentions show everyone how to leverage agents. Learn by watching.", - }, - { - icon: Shield, - title: "Safe by design.", - description: "Agents never touch main/master directly. They produce branches and PRs. You approve.", - }, -] - -type WorkflowStep = { - step: number - title: string - description: string -} - -const WORKFLOW_STEPS: WorkflowStep[] = [ - { - step: 1, - title: "Turn the discussion into a plan", - description: "Your team discusses a feature. When it gets complex, summon the Planner agent.", - }, - { - step: 2, - title: "Refine the plan in the thread", - description: - "The team reviews the spec in the thread, suggests changes, asks questions. Mention @Roomote again to refine.", - }, - { - step: 3, - title: "Build the plan", - description: "Once the plan looks good, hand it off to the Coder agent to implement.", - }, - { - step: 4, - title: "Review and ship", - description: "The Coder creates a branch and opens a PR. The team reviews, and the feature ships.", - }, -] - -type OnboardingStep = { - icon: LucideIcon - title: string - description: string - link?: { - href: string - text: string - } -} - -const ONBOARDING_STEPS: OnboardingStep[] = [ - { - icon: CreditCard, - title: "1. Team Plan", - description: "Slack requires a Team plan.", - link: { - href: EXTERNAL_LINKS.CLOUD_APP_TEAM_TRIAL, - text: "Start a free trial", - }, - }, - { - icon: Settings, - title: "2. Connect", - description: 'Sign in to Roo Code Cloud and go to Settings. Click "Connect" next to Slack.', - }, - { - icon: Slack, - title: "3. Authorize", - description: "Authorize the Roo Code app to access your Slack workspace.", - }, - { - icon: MessageSquare, - title: "4. Add to channels", - description: "Add @Roomote to the channels where you want it available.", - }, -] - -export default function SlackPage(): JSX.Element { - return ( - <> - {/* Hero Section */} -
- -
-
-
-
- - Powered by Roo Code Cloud -
-

- @Roomote: Your AI Team in Slack -

-

- Mention @Roomote in any channel to explain code, plan features, or ship a PR, all - without leaving the conversation. -

- -
- -
- -
-
-
-
- - {/* Value Props Section */} -
-
-
-
-
-
-

- Why your team will love using Roo Code in Slack -

-

- AI agents that understand context, chain together for complex work, and keep your team in - control. -

-
-
- {VALUE_PROPS.map((prop, index) => { - const Icon = prop.icon - return ( -
-
- -
-

{prop.title}

-

{prop.description}

-
- ) - })} -
-
-
- - {/* Featured Workflow Section */} -
-
-
-
-
- -
-
- - Featured Workflow -
-

- Thread to Shipped Feature -

-

- Turn Slack discussions into working code. No context lost, no meetings needed. -

-
- -
-
- {/* YouTube Video Embed */} -
-