Compare commits

..

2133 commits

Author SHA1 Message Date
Matt Rubens
b867ec9145
Remove roocode.com web app (#12375)
Some checks failed
Code QA Roo Code / platform-unit-test (windows-latest) (push) Has been cancelled
Code QA Roo Code / check-translations (push) Has been cancelled
Code QA Roo Code / knip (push) Has been cancelled
Code QA Roo Code / compile (push) Has been cancelled
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy docs to GitHub Pages / build (push) Has been cancelled
Nightly Publish / publish-nightly (push) Has been cancelled
Deploy docs to GitHub Pages / deploy (push) Has been cancelled
2026-05-15 14:04:45 -04:00
Matt Rubens
8b94decaef
Redirect roocode.com to roomote.dev (#12374) 2026-05-15 13:55:24 -04:00
Hannes Rudolph
f49f0ce56a
Release v3.54.0 (#12369) 2026-05-15 11:42:49 -06:00
Matt Rubens
d82583c91b
Update README.md 2026-05-15 13:30:03 -04:00
Matt Rubens
6ae816f244
Remove stale roocode.github.io docs references (#12372) 2026-05-15 13:29:02 -04:00
Matt Rubens
f5cad409a1
Update package.json 2026-05-15 13:22:06 -04:00
Matt Rubens
15542fcbbf
Update docs links to GitHub Pages (#12371) 2026-05-15 13:20:20 -04:00
Matt Rubens
d229002cdd
Update README.md 2026-05-15 13:07:01 -04:00
Matt Rubens
06777a513e
Update README.md 2026-05-15 13:06:24 -04:00
Matt Rubens
5641ccd58d
Fix docs GitHub Pages base URL (#12370) 2026-05-15 13:05:47 -04:00
Bruno Bergher
e921f9d21e
Remove contributor and community references (#12347)
Some checks failed
Code QA Roo Code / check-translations (push) Has been cancelled
Code QA Roo Code / knip (push) Has been cancelled
Code QA Roo Code / compile (push) Has been cancelled
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Has been cancelled
Code QA Roo Code / platform-unit-test (windows-latest) (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy docs to GitHub Pages / build (push) Has been cancelled
Nightly Publish / publish-nightly (push) Has been cancelled
Deploy roocode.com / check-secrets (push) Has been cancelled
Deploy docs to GitHub Pages / deploy (push) Has been cancelled
Deploy roocode.com / deploy (push) Has been cancelled
* Remove contributor and community references

* shutdown notice

* Allow empty web app test suite
2026-05-12 16:33:09 +01:00
Bruno Bergher
28acb6acf2
Add docs app and GitHub Pages deploy (#12344)
* Add docs app and Pages deploy

* Configure knip for docs app
2026-05-12 14:23:21 +01:00
Bruno Bergher
2428199851
Remove corporate extension support links (#12341)
* Remove corporate extension support links

* Remove welcome provider left inset

* Update retired provider sunset message

* Scope Roo retired provider message

* Add final release upgrade announcement

* Localize final release announcement
2026-05-12 14:23:08 +01:00
Matt Rubens
8922418600
Remove Roo Code Cloud and evals (#12328)
Some checks are pending
Code QA Roo Code / check-translations (push) Waiting to run
Code QA Roo Code / knip (push) Waiting to run
Code QA Roo Code / compile (push) Waiting to run
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Waiting to run
Code QA Roo Code / platform-unit-test (windows-latest) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Nightly Publish / publish-nightly (push) Waiting to run
Deploy roocode.com / check-secrets (push) Waiting to run
Deploy roocode.com / deploy (push) Blocked by required conditions
* Remove Roo Code Cloud and evals

* Remove unused onboarding and web helper files

* Update ChatView welcome tests after cloud removal
2026-05-11 22:43:45 -04:00
Matt Rubens
22d845cecb
Remove the MCP marketplace (#12326)
* Remove the MCP marketplace

* Remove unused URL utility
2026-05-11 18:19:08 -04:00
Matt Rubens
ff16c9c297
Remove all telemetry (#12324)
* Remove all telemetry

* Fix webview tests after telemetry removal

* Fix embedder tests after telemetry removal

* Fix tests after telemetry removal
2026-05-11 17:34:58 -04:00
Matt Rubens
3d37e054dd
Remove MDM and organization membership enforcement (#12323) 2026-05-11 15:42:02 -04:00
Bruno Bergher
ad25634905
web: Simplifies the website to be almost strictly about the extension (#12180)
Some checks failed
Code QA Roo Code / check-translations (push) Has been cancelled
Code QA Roo Code / knip (push) Has been cancelled
Code QA Roo Code / compile (push) Has been cancelled
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Has been cancelled
Code QA Roo Code / platform-unit-test (windows-latest) (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Nightly Publish / publish-nightly (push) Has been cancelled
Deploy roocode.com / check-secrets (push) Has been cancelled
Deploy roocode.com / deploy (push) Has been cancelled
* Remove pricing/enterprise and Roo Code for pages

* Remove cloud team and router pages

* Refine homepage hero and CTA sections

* nav

* more footer

* Fix knip by removing orphaned web files
2026-04-24 14:56:42 +01:00
github-actions[bot]
96d6e43643
Changeset version bump (#12172)
Some checks are pending
Code QA Roo Code / platform-unit-test (windows-latest) (push) Waiting to run
Code QA Roo Code / check-translations (push) Waiting to run
Code QA Roo Code / knip (push) Waiting to run
Code QA Roo Code / compile (push) Waiting to run
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Nightly Publish / publish-nightly (push) Waiting to run
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-23 15:26:28 -06:00
Hannes Rudolph
14922f127e
Release v3.53.0 (#12171)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-04-23 15:02:08 -06:00
Hannes Rudolph
142f3fb335
feat(openai-codex): add GPT-5.5 model (#12170) 2026-04-23 13:54:33 -06:00
roomote-v0[bot]
c4547d25c5
feat(web): redesign Roomote announcement banner with violet branding (#12161)
Some checks failed
Code QA Roo Code / check-translations (push) Has been cancelled
Code QA Roo Code / knip (push) Has been cancelled
Code QA Roo Code / compile (push) Has been cancelled
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Has been cancelled
Code QA Roo Code / platform-unit-test (windows-latest) (push) Has been cancelled
Deploy roocode.com / check-secrets (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Nightly Publish / publish-nightly (push) Has been cancelled
Deploy roocode.com / deploy (push) Has been cancelled
Co-authored-by: Roo Code <roomote@roocode.com>
2026-04-21 11:40:35 -06:00
roomote-v0[bot]
b4f2a242bc
feat(blog): add sunsetting roo code blog post (#12160)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-04-21 11:40:27 -06:00
Chiranjeevisantosh Madugundi
2bb826039b
feat(chat): add previous checkpoint navigation controls and i18n (#12139)
Some checks are pending
Code QA Roo Code / check-translations (push) Waiting to run
Code QA Roo Code / knip (push) Waiting to run
Code QA Roo Code / compile (push) Waiting to run
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Waiting to run
Code QA Roo Code / platform-unit-test (windows-latest) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Nightly Publish / publish-nightly (push) Waiting to run
2026-04-20 16:12:10 -06:00
Chiranjeevisantosh Madugundi
3e202ebf5b
feat(vertex): add Claude Opus 4.7 support (#12135) 2026-04-20 11:42:10 -06:00
Bruno Bergher
cb83656718
Roomote banner (#12119)
Some checks failed
Code QA Roo Code / check-translations (push) Has been cancelled
Code QA Roo Code / knip (push) Has been cancelled
Code QA Roo Code / compile (push) Has been cancelled
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Has been cancelled
Code QA Roo Code / platform-unit-test (windows-latest) (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Nightly Publish / publish-nightly (push) Has been cancelled
Deploy roocode.com / check-secrets (push) Has been cancelled
Deploy roocode.com / deploy (push) Has been cancelled
* Roomote banner

* fix(web): use published @roo-code/types in web-roo-code

---------

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-04-14 18:48:08 -04:00
github-actions[bot]
8b12f21439
Changeset version bump (#12110)
Some checks are pending
Code QA Roo Code / check-translations (push) Waiting to run
Code QA Roo Code / knip (push) Waiting to run
Code QA Roo Code / compile (push) Waiting to run
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Waiting to run
Code QA Roo Code / platform-unit-test (windows-latest) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Nightly Publish / publish-nightly (push) Waiting to run
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-13 16:57:35 -06:00
Hannes Rudolph
9f251fde70
Release v3.52.1 (#12109) 2026-04-13 16:13:55 -06:00
roomote-v0[bot]
319b5576c7
chore: remove hiring announcement from VS Code extension (#12108)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-04-13 15:57:28 -06:00
roomote-v0[bot]
7adbfec2a4
feat: add correct JSON schema for .roomodes configuration files (#11791)
Some checks failed
Code QA Roo Code / check-translations (push) Has been cancelled
Code QA Roo Code / knip (push) Has been cancelled
Code QA Roo Code / compile (push) Has been cancelled
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Has been cancelled
Code QA Roo Code / platform-unit-test (windows-latest) (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Nightly Publish / publish-nightly (push) Has been cancelled
Deploy roocode.com / check-secrets (push) Has been cancelled
Deploy roocode.com / deploy (push) Has been cancelled
Co-authored-by: Roo Code <roomote@roocode.com>
2026-04-08 16:37:14 -06:00
github-actions[bot]
9cfaf38d8a
Changeset version bump (#12085)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-04-08 15:16:12 -06:00
Ronald
92a1be40df
fix: Qwen Bad Request 400 (#12067) (#12083) 2026-04-08 14:34:45 -06:00
Hannes Rudolph
5b93bc7dc3
Release v3.52.0 (#12082) 2026-04-08 14:33:47 -06:00
Enrico Carlesso
5432fa2689
feat: migrate xAI provider to Responses API with reusable transform utils (#11962)
Co-authored-by: Enrico Carlesso <ecarlesso@twitter.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-04-08 11:38:13 -06:00
Ksandr
eafed9705c
Fix/minimax context window and models (#12069) 2026-04-08 08:44:36 -06:00
Kamil Jopek
c3cae397a1
feat: add Poe as an AI provider (#12015)
Some checks failed
Code QA Roo Code / platform-unit-test (ubuntu-latest) (push) Has been cancelled
Code QA Roo Code / platform-unit-test (windows-latest) (push) Has been cancelled
Code QA Roo Code / knip (push) Has been cancelled
Code QA Roo Code / compile (push) Has been cancelled
Code QA Roo Code / check-translations (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Nightly Publish / publish-nightly (push) Has been cancelled
2026-04-05 23:37:29 -04:00
Peter Dave Hello
137d3f4fd8
Add OpenAI GPT-5.4 mini and nano models (#11946) 2026-03-18 22:27:26 -06:00
Enrico Carlesso
08f3a2bb39
feat: add xAI grok-4.20 models and update default (Fixes #11955) (#11956) 2026-03-18 22:25:20 -06:00
github-actions[bot]
44fd975b17
Changeset version bump
changeset version bump

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-07 19:36:55 -07:00
roomote-v0[bot]
4ab1d81f55
Release v3.51.1
chore: add changeset for v3.51.1

Co-authored-by: Roo Code <roomote@roocode.com>
2026-03-07 19:17:54 -07:00
roomote-v0[bot]
7ae9c4efd2
feat: add gpt-5.4 to ChatGPT Plus/Pro (Codex) model catalog (#11876) 2026-03-07 19:00:39 -07:00
cscvenkatmadurai
0892455db2
feat(bedrock): add Cohere Embed v4 model and improve credential handling (Fixes #11823) (#11824)
feat(bedrock): add Cohere Embed v4 model and improve credential handling

- Add cohere.embed-v4:0 (1536-dim) to Bedrock embedding model profiles
- Add v4-specific request format (embedding_types: ["float"]) and response
  parsing (embeddings.float[0]) in BedrockEmbedder
- Replace fromEnv() with fromNodeProviderChain() for default credential
  chain when no AWS profile is specified, supporting SSO, IMDS, ECS, and
  other credential sources with built-in memoization
- Add unit tests for Cohere v4 request/response handling, credential
  provider selection, and v3 regression coverage

Fixes #11823
2026-03-05 18:45:17 -07:00
Niklas Volcz
0e56afc764
Add Gemini 3.1 Pro customtools model to Vertex AI provider (#11857) 2026-03-05 15:21:12 -07:00
github-actions[bot]
5eec588653
Changeset version bump (#11731)
changeset version bump

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-05 15:18:22 -07:00
Hannes Rudolph
58c535319e
Release v3.51.0 (#11870)
chore: add changeset for v3.51.0
2026-03-05 14:58:45 -07:00
Peter Dave Hello
0612739ba1
Add OpenAI GPT-5.3 chat latest and GPT-5.4 model support (#11848) 2026-03-05 14:15:55 -07:00
AJ Juaire
52ce796e42
feat: add ROO_ACTIVE env variable to terminal env settings (#11862) 2026-03-04 17:23:52 -07:00
Chris Estreich
3e237e6061
chore(cli): prepare release v0.1.17 (#11860) 2026-03-04 12:27:57 -08:00
Chris Estreich
0b0b33e6a2
feat(cli): support --create-with-session-id and UUID session validation (#11859)
feat(cli): add create-with-session-id support

rename public task id flag to --create-with-session-id

validate session ids as UUIDs for create/resume and stdin start.taskId

add integration coverage for create+resume loading correct session
2026-03-04 10:32:16 -08:00
Chris Estreich
0db51d8bfa
chore(cli): prepare release v0.1.16 (#11852) 2026-03-03 23:37:56 -08:00
John Richmond
7dc83a522e
Allow selecting a specific shell (#11851)
* Allow selecting a specific shell

Add --terminal-shell CLI flag to specify which shell ExecaTerminalProcess
uses for inline command execution. The shell path is validated at the CLI
layer and passed through the standard settings mechanism (BaseTerminal
static getter/setter), matching how all other CLI terminal settings flow
through the system.

* test(cli): make shell path access test cross-platform
2026-03-03 23:31:34 -08:00
Chris Estreich
9a58f76299
Add CLI integration coverage for stdin stream routing/race invariants (#11846)
Add integration coverage for stdin stream routing and race invariants
2026-03-02 23:11:54 -08:00
Chris Estreich
f9da48f73a
chore(cli): prepare release v0.1.15 (#11845) 2026-03-02 23:05:05 -08:00
Chris Estreich
06afe4206b
Fix CLI follow-up routing after completion asks (#11844)
Fix stdin follow-up routing for completion asks in CLI stream mode
2026-03-02 22:52:39 -08:00
Chris Estreich
02598bc4a5
chore(cli): prepare release v0.1.14 (#11843) 2026-03-02 21:54:26 -08:00
Chris Estreich
d0480360cb
cli: ensure full command output is streamed before done (#11842) 2026-03-02 21:50:18 -08:00
Hannes Rudolph
459f27015d
fix: prevent redundant skill reloading in conversation (#11838) 2026-03-02 16:47:19 -07:00
Hannes Rudolph
d6611f8f69
chore(cli): prepare release v0.1.13 (#11837)
* chore(cli): prepare release v0.1.13

* Update CHANGELOG.md

---------

Co-authored-by: Chris Estreich <cestreich@gmail.com>
2026-03-02 14:50:33 -08:00
Hannes Rudolph
af1e12c76d
feat: expose skills as slash commands with skill fallback execution (#11834)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-03-02 15:10:32 -07:00
Chris Estreich
ce73d05646
Release: v1.115.0 (#11833)
chore: bump version to v1.115.0
2026-03-02 13:35:52 -08:00
Chris Estreich
3c7544c104
chore(cli): prepare release v0.1.12 (#11836) 2026-03-02 13:34:19 -08:00
Chris Estreich
7ea91fa79e
fix(cli): ignore model-provided timeout in CLI runtime (#11835)
In CLI runtime, stdin harnesses expect command lifetime to be governed
solely by commandExecutionTimeout (user setting), not model-provided
background timeouts. Extract resolveAgentTimeoutMs() and return 0 when
ROO_CLI_RUNTIME=1.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 13:25:31 -08:00
Chris Estreich
941e6de743
chore(cli): prepare release v0.1.11 (#11832) 2026-03-02 12:59:23 -08:00
Chris Estreich
95ea01f9a5
feat(cli): support images in stdin stream commands (#11831)
feat(cli): support images in stdin stream start and message commands

Add optional `images` field (array of base64 data URIs) to the `start` and
`message` CLI stdin stream commands, allowing callers to attach images to
prompts. The images are validated, forwarded through the extension host, and
included in queued messages.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 12:57:21 -08:00
Chris Estreich
5a4ab2b13f
Fix upgrade version detection (#11829) 2026-03-02 09:43:40 -08:00
Chris Estreich
b00c260dc0
Release: v1.114.0 (#11822)
chore: bump version to v1.114.0
2026-03-02 00:13:15 -08:00
Chris Estreich
737edbc5ab
chore(cli): prepare release v0.1.10 (#11821) 2026-03-02 00:07:27 -08:00
Chris Estreich
eb2147148e
feat(cli): include exitCode in command tool_result events (#11820)
Propagate the command exit code through the JSON event emitter so CLI
consumers can distinguish between successful and failed command
executions without parsing output text.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 00:03:05 -08:00
Chris Estreich
7118a14188
Fix knip checks (#11819) 2026-03-01 23:21:13 -08:00
Chris Estreich
571cae2368
chore(cli): prepare release v0.1.9 (#11818) 2026-03-01 22:28:49 -08:00
Chris Estreich
e6ad7949d6
Fix stdin-stream cancel race and add integration test suite (#11817)
Add stdin stream integration tests and fix startup cancel race
2026-03-01 22:27:01 -08:00
Chris Estreich
a7cebac2d8
chore(cli): prepare release v0.1.8 (#11816) 2026-03-01 19:59:18 -08:00
Chris Estreich
787f02e526
Increase command execution timeout (#11815) 2026-03-01 19:56:16 -08:00
Chris Estreich
ec979585e8
Fix stdin stream queued messages and command output streaming (#11814)
Fix stdin stream queue handling and command output streaming
2026-03-01 19:53:59 -08:00
Chris Estreich
b75f484663
chore(cli): prepare release v0.1.7 (#11812) 2026-03-01 12:03:56 -08:00
Chris Estreich
52d606bab3
Handle stdin-stream control-flow errors gracefully (#11811) 2026-03-01 12:01:40 -08:00
roomote[bot]
193053110b
fix: remove Netflix logo from homepage (#11787)
fix: remove Netflix logo from homepage company logos

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-27 12:19:25 -08:00
Chris Estreich
54721a3155
Release: v1.113.0 (#11782)
chore: bump version to v1.113.0
2026-02-26 22:26:23 -08:00
Chris Estreich
b55409c0b0
Add cli types (#11781) 2026-02-26 22:06:55 -08:00
Chris Estreich
50c8101754
chore(cli): prepare release v0.1.6 (#11780) 2026-02-26 21:45:27 -08:00
Daniel
a7c8275e85
fix: forward task configuration through stdin-prompt-stream (#11778)
fix: forward task configuration through stdin-prompt-stream protocol

The stdin-prompt-stream `start` command only accepted `prompt` — any
`configuration` passed via the cloud worker's StartNewTask was silently
dropped. This meant custom modes (e.g. `ask-artifacts`), disabled tools,
and other task-level settings never reached the extension when running
via the CLI harness.

Changes:
- Add optional `configuration` field to the `start` stdin command
- Parse and forward it in `runStdinStreamMode`
- Thread it through `ExtensionHost.runTask` → `newTask` webview message
  → `ClineProvider.createTask` (which already calls `setValues`)
- Add `taskConfiguration` field to `WebviewMessage` type

Backward-compatible: older CLIs ignore the extra field; older workers
that don't send `configuration` trigger no change in behavior.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: cte <cestreich@gmail.com>
2026-02-26 21:41:14 -08:00
Chris Estreich
81047a65b6
fix(cli): scope sessions and resume flags to current workspace (#11774)
fix(cli): scope sessions to current workspace
2026-02-26 21:32:23 -08:00
Chris Estreich
2f4ce367c4
CLI: improve stream recovery and add configurable consecutive mistake limit (#11775)
* cli: improve stream error recovery and add mistake-limit flag

* More progress
2026-02-26 21:09:38 -08:00
Chris Estreich
96d77fd2c8
chore(cli): prepare release v0.1.5 (#11772) 2026-02-26 15:48:24 -08:00
Chris Estreich
de0e3632d2
feat(cli): add session resume/history and upgrade command (#11768)
feat(cli): add session history/resume and upgrade command
2026-02-26 13:55:46 -08:00
Chris Estreich
e25b1f2768
chore(cli): prepare release v0.1.4 (#11751) 2026-02-25 22:50:56 -08:00
Chris Estreich
bcdc842eda
Recover from unhandled exceptions in the cli (#11750) 2026-02-25 22:48:58 -08:00
roomote[bot]
4e8cc6eaee
feat: update cloud settings refresh interval to one hour (#11749)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-25 21:05:56 -08:00
Chris Estreich
0aea65d1e6
chore(cli): prepare release v0.1.3 (#11740) 2026-02-25 01:27:33 -08:00
Chris Estreich
efbba9e8d5
Fix cli task resumption (#11739) 2026-02-25 01:24:05 -08:00
Chris Estreich
191053cec5
chore(cli): prepare release v0.1.2 (#11737) 2026-02-24 23:32:12 -08:00
Chris Estreich
70cbc716e8
fix(cli): streaming deltas, task ID propagation, cancel recovery, and misc fixes (#11736)
* fix(cli): streaming deltas, task ID propagation, cancel recovery, and misc fixes

- Stream tool_use ask messages (command, tool, mcp) as structured deltas
  instead of full snapshots in json-event-emitter
- Generate task ID upfront and propagate through runTask/createTask so
  currentTaskId is available in extension state immediately
- Wait for resumable state after cancel before processing follow-up
  messages to prevent race conditions in stdin-stream
- Add ROO_CODE_DISABLE_TELEMETRY=1 env var to disable cloud telemetry
- Provide valid empty JSON Schema for custom tools without parameters
  to fix strict-mode API validation
- Skip paths outside cwd in RooProtectedController to avoid RangeError
- Silently handle abort during exponential backoff retry countdown
- Enable customTools experiment in extension host

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add start() to TaskStub in single-open-invariant test

The ClineProvider.createTask change to call task.start() after
addClineToStack requires the test's TaskStub mock to have this method.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:29:50 -08:00
roomote[bot]
6f65a26694
Release v3.50.5 (#11730)
chore: add changeset for v3.50.5

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-24 15:01:53 -07:00
Peter Dave Hello
2541449924
Add OpenAI's GPT-5.3-Codex model support (#11728)
* Add OpenAI's GPT-5.3-Codex model support

Reference:
- https://openai.com/index/introducing-gpt-5-3-codex/
- https://developers.openai.com/api/docs/models/gpt-5.3-codex

* chore: add changeset for GPT-5.3-Codex support

* fix: rename CodeAccordian to CodeAccordion in FileChangesPanel

---------

Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: Robot Tom <bot@example.com>
2026-02-24 14:46:27 -07:00
Peter Dave Hello
d0e72b7b3e
Fix spelling/grammar and casing inconsistencies (#11485) 2026-02-24 14:22:22 -07:00
roomote[bot]
b73dc15fda
fix(marketing): restore Linear integration page (#11725)
fix(marketing): restore Linear integration page removed in revert

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-24 08:54:49 -08:00
Chris Estreich
48d7e29ed8
chore(cli): prepare release v0.1.1 (#11723) 2026-02-23 23:15:53 -08:00
Chris Estreich
29caab9d0d
feat: warm Roo models on CLI startup (#11722)
When the CLI is configured with the Roo provider, proactively fetch
and warm the model list during activation so that model information
is available before the first prompt is sent. The warmup has a 10s
timeout and failures are logged only in debug mode so they never
block normal operation.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 23:13:26 -08:00
github-actions[bot]
aca95ccd04
Changeset version bump (#11672)
* changeset version bump

* Revise CHANGELOG for recent version updates

Updated changelog for versions 3.50.4 to 3.48.0, including new features, fixes, and improvements.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-02-21 17:25:27 -05:00
roomote[bot]
ab61ee2cd6
Release v3.50.4 (#11671)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-21 17:19:42 -05:00
roomote[bot]
62a7bd7354
feat: add MiniMax M2.5 model (#11458)
* feat: add MiniMax M2.5 model and set as default

* fix: update MiniMax M2.5 contextWindow to 204_800

* Delete .changeset/add-minimax-m25.md

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-02-20 22:34:18 -05:00
Matt Rubens
2df6e38998
Add pnpm version 10.8.1 to .tool-versions 2026-02-20 22:15:16 -05:00
github-actions[bot]
ae09ee5a64
Changeset version bump (#11642)
changeset version bump

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-20 12:16:35 -07:00
Hannes Rudolph
6b3097cb31
Revert "ci: trigger code-qa workflow on pull_request_review approval" (#11639)
Revert "ci: trigger code-qa workflow on pull_request_review approval (#11636)"

This reverts commit a55c85a8ec.
2026-02-20 12:00:30 -07:00
roomote[bot]
6bd6dc61a4
Release v3.50.3 (#11638)
chore: add changeset for v3.50.3

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-20 11:34:24 -07:00
Hannes Rudolph
a55c85a8ec
ci: trigger code-qa workflow on pull_request_review approval (#11636) 2026-02-20 11:33:43 -07:00
github-actions[bot]
2991bc9a39
Changeset version bump (#11634)
changeset version bump

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-20 10:47:38 -07:00
roomote[bot]
93415c7204
fix: correct Vertex AI claude-sonnet-4-6 model ID (#11626)
fix: correct Vertex AI claude-sonnet-4-6 model ID by removing date suffix

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-20 10:46:58 -07:00
pugazhendhi-m
4288b0a72f
feat: restore Unbound as a provider (#11624)
* feat: restore Unbound as a provider

* Adds translations

* fix: add unbound to ClineProvider test expectations

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:37:13 -07:00
roomote[bot]
9918e837ba
Release v3.50.2 (#11631)
chore: add changeset for v3.50.2

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-20 09:05:38 -07:00
roomote[bot]
b34678488e
fix: prevent git templates from leaking into shadow checkpoint repos (#8629)
Pass --template="" to git init and strip GIT_TEMPLATE_DIR from the
environment so system/user git hooks and other template files never
get copied into the shadow repository used for checkpoints.

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-20 08:39:10 -07:00
RussellZager
618aa6652b
Inline terminal rendering parity with the VSCode Terminal (#11361)
* fix: render ANSI escape codes in inline terminal output

Fixes #10699

## Problem
The inline terminal output displayed raw ANSI bracket codes ([1m, [32m, etc.)
instead of rendering colors and formatting. This was caused by:
1. Backend: strip-ansi removing the ESC byte but leaving bracket remnants
2. Frontend: CodeBlock/Shiki having no ANSI rendering capability

## Solution
1. Backend: Replace strip-ansi with targeted removal of only VSCode shell
   integration sequences (OSC 633/133), preserving standard ANSI SGR codes
2. Frontend: Add new TerminalOutput component using ansi-to-html library
   that converts ANSI sequences to styled HTML spans
3. Map ANSI colors to VSCode terminal theme CSS variables for consistent
   theming across light/dark themes

## Testing
- Verified XSS prevention (escapeXML: true)
- Verified theme compatibility
- Added unit tests for both backend and frontend changes
- Updated existing tests to expect ANSI codes in output

Bundle size impact: ~3KB gzipped (ansi-to-html library)

Co-authored-by: Zman771 <605281+Zman771@users.noreply.github.com>

* fix: add eslint-disable for intentional ANSI control regex

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Zman771 <605281+Zman771@users.noreply.github.com>
Co-authored-by: Russell Zager <rzager@google.com>
2026-02-20 00:19:56 -07:00
roomote[bot]
27095553ca
fix(bedrock): enable prompt caching for custom ARN and default to ON (#11373)
* fix(bedrock): enable prompt caching for custom ARN and default to ON

- Set supportsPromptCache to true for custom-arn model info in useSelectedModel.ts
- Change awsUsePromptCache default from false to true using nullish coalescing
- Add tests for custom-arn prompt caching support

Closes #10846

* fix(bedrock): align backend awsUsePromptCache default with UI (?? true)

The backend treated undefined awsUsePromptCache as falsy (OFF) while the
UI checkbox defaulted to true via nullish coalescing. This caused the UI
to show prompt caching as ON but the backend to keep it OFF for new users.

Apply the same ?? true default in the backend so both sides agree.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-20 00:06:52 -07:00
github-actions[bot]
3a7a01f2f7
Changeset version bump (#11623)
changeset version bump

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-19 23:56:40 -07:00
Sazid Al Bayazid
492006d53d
feat: add visual feedback to copy button in task actions (#11403)
* feat: add visual feedback to copy button in task actions

The copy button now shows a checkmark for 2 seconds after copying to provide visual feedback.
Fixes #11401

* fix: change Check icon import name in TaskActions and update test

- Fix Check icon import name from Check to CheckIcon for consistency in TaskActions.tsx
- Add test to verify check icon is shown when showCopyFeedback is true
- Mock useCopyToClipboard hook in TaskActions.spec.tsx to test copy button functionality

This change resolves the import inconsistency and adds a test to ensure the copy button correctly shows a check icon after successful copy.
2026-02-19 23:55:22 -07:00
Chiranjeevisantosh Madugundi
5db2062d0c
feat: show aggregated +/− line counts in FileChangesPanel header (#11618)
* feat: show aggregated +/− line counts in FileChangesPanel header

* feat(FileChangesPanel): show merged diff relative to final file state

* fix(webview): restrict readFileContent to paths inside the workspace

* fix: add workspace-boundary validation to readFileContent to prevent path traversal

* fix(tests): mock isPathOutsideWorkspace in readFileContent spec

* fix(tests): mock isPathOutsideWorkspace in readFileContent spec

* fix: use path.resolve/path.sep in readFileContent test mock for cross-platform compatibility

The isPathOutsideWorkspace mock used hardcoded Unix-style path comparisons
(/mock/workspace with forward slashes), which fails on Windows where
path.resolve() produces paths with drive letters (C:\mock\workspace\...).

Replace manual string normalization with path.resolve() and path.sep so the
mock behaves correctly on both Windows and Unix.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-19 23:22:20 -07:00
roomote[bot]
0d5b932d2e
feat: disable apply_diff and enable edit tool for Vertex and Gemini providers (#11619)
* feat: disable apply_diff and enable edit tool for Vertex and Gemini providers

* feat: disable apply_diff and enable edit tool for Anthropic provider

* feat: disable apply_diff and enable edit tool for Anthropic Vertex provider

* fix: remove out-of-scope Anthropic/Anthropic-Vertex changes

The PR scope is Gemini and Vertex providers only. Reverting the
Anthropic and Anthropic-Vertex tool preference changes that were
not part of the stated scope.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-19 23:02:44 -07:00
Daniel
318bb928e0
feat: add timeout parameter to execute_command tool (#11622)
feat: add `timeout` parameter to `execute_command` tool

Allow the agent to specify a per-command timeout in seconds. When
exceeded, the command continues running in the background (like clicking
"Run in Background") and the output collected so far is returned,
rather than aborting. This is useful for long-running processes like dev
servers or file watchers that may never exit on their own.

The agent timeout runs independently of the user-configured abort
timeout — the user timeout remains active as a safety net even after
the agent moves on.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-19 23:43:09 -05:00
Ashank Sundaram
ea7da97a40
fix(openai): handle done-only/content-part responses (#11621)
* fix(openai-codex): handle done-only/content-part responses

* fix(openai): align native done-event stream fallbacks with codex

* fix(openai): address stream fallback review feedback
2026-02-19 19:24:26 -07:00
Ashank Sundaram
9a8af61936
feat(openai-codex): add gpt-5.3-codex-spark model metadata (#11620) 2026-02-19 18:41:48 -07:00
roomote[bot]
d00f1a2bb8
feat: remove Roomote Control from extension (#11271)
* feat: remove Roomote Control from extension

Remove all Roomote Control (remote control) functionality:

- Remove BridgeOrchestrator and entire bridge directory from @roo-code/cloud
- Remove remoteControlEnabled, featureRoomoteControlEnabled from extension state
- Remove extensionBridgeEnabled from CloudUserInfo and user settings
- Remove roomoteControlEnabled from organization/user feature schemas
- Remove enableBridge from Task and ClineProvider
- Remove remote control toggle from CloudView UI
- Remove remoteControlEnabled message handler
- Remove extension bridge disconnect on logout/deactivate
- Update CloudTaskButton to show for all logged-in users
- Remove remote control translation strings from all locales
- Update all related tests

CLO-765

* fix: remove dead getOrganizationMetadata and unused socket.io-client dep

* Readmes

* Readmes

* Types

* fix: remove leftover Roomote Control references from locale READMEs and stale BridgeOrchestrator mock

* Removes cloudtaskbutton

* fix: remove orphaned qrcode packages and dead openInCloud translation keys

* pnpmlock

* Revert these

* Revert these

* Revert these

* Remove socket.io

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: cte <cestreich@gmail.com>
2026-02-19 16:33:39 -08:00
rossdonald
159bf2e9f1
fix: make settings search results same width as search input (#11617)
Changed the settings search results to be the same width as the search input. This ensures the results dropdown does not overflow outside of the parent panel.
2026-02-19 15:19:20 -07:00
github-actions[bot]
d8cfbfdb05
Changeset version bump (#11610)
changeset version bump

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-19 13:18:17 -07:00
roomote[bot]
8743020f4e
Release v3.50.0 (#11609)
* chore: add changeset for v3.50.0

* chore: add v3.50.0 announcement translations for all locales

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-19 13:04:18 -07:00
Peter Dave Hello
b64334b2bd
Add Gemini 3.1 Pro support and set Gemini default model (#11608)
Add Gemini 3.1 model entries for Gemini and Vertex providers.

Include the Gemini custom-tools endpoint model id in Gemini provider.
Update geminiDefaultModelId to gemini-3.1-pro-preview.

References:
- https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview
- https://ai.google.dev/gemini-api/docs/pricing
- https://ai.google.dev/gemini-api/docs/thinking
- https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-1-pro
- https://cloud.google.com/vertex-ai/generative-ai/pricing
- https://cloud.google.com/blog/products/ai-machine-learning/gemini-3-1-pro-on-gemini-cli-gemini-enterprise-and-vertex-ai
- https://deepmind.google/models/model-cards/gemini-3-1-pro/
- https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-pro/
2026-02-19 12:16:22 -07:00
roomote[bot]
aff46b14e2
chore: remove integration tests (#11598)
* chore: remove integration test files

* chore: remove integration test job from CI workflow

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-02-19 01:16:40 -07:00
Chris Estreich
00c35e691f
chore(cli): prepare release v0.1.0 (#11599) 2026-02-19 00:06:22 -08:00
Chris Estreich
ffec9ac1ec
feat(cli): NDJSON stdin protocol, list subcommands, modularize run.ts (#11597)
* feat(cli): add NDJSON stdin protocol, list subcommands, and modularize run.ts

Overhaul the stdin prompt stream from raw text lines to a structured NDJSON
command protocol (start/message/cancel/ping/shutdown) with requestId
correlation, ack/done/error lifecycle events, and queue telemetry. Add list
subcommands (commands, modes, models) for programmatic discovery. Extract
stdin stream logic from run.ts into stdin-stream.ts and add shared isRecord
guard utility. Includes unit tests for all new modules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(core): fix Task.ts bug affecting CLI operation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 00:04:34 -08:00
github-actions[bot]
c974443379
Changeset version bump (#11596)
changeset version bump

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-19 00:48:19 -07:00
roomote[bot]
5f87f83d97
Release v3.49.0 (#11595)
* chore: add changeset for v3.49.0

* i18n: translate v3.49.0 announcement strings to all supported languages

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-19 00:30:08 -07:00
roomote[bot]
b598efb422
feat: add per-task file-based history store for cross-instance safety (#11490)
* feat: add per-task file-based history store for cross-instance safety

Implement TaskHistoryStore service that stores each task's HistoryItem
as an individual JSON file in its existing task directory. This prevents
silent data loss when multiple VS Code windows write to the shared
globalState taskHistory array concurrently.

Key changes:
- New TaskHistoryStore class with per-task file writes via safeWriteJson
- Index file (_index.json) for fast startup reads
- Reconciliation logic to detect and fix drift between instances
- fs.watch for cross-instance reactivity
- Debounced index writes (2s window) for streaming performance
- Migration from globalState on first startup
- Write-through to globalState during transition period
- Fallback lookups from globalState for backward compatibility

Files created:
- src/core/task-persistence/TaskHistoryStore.ts
- src/core/task-persistence/__tests__/TaskHistoryStore.spec.ts
- src/core/task-persistence/__tests__/TaskHistoryStore.crossInstance.spec.ts

Files modified:
- src/shared/globalFileNames.ts (added historyItem, historyIndex)
- src/core/task-persistence/index.ts (export TaskHistoryStore)
- src/core/webview/ClineProvider.ts (integrate store, remove write lock)
- Test files updated for new store-based approach

* fix: address review feedback - reconcile lock, init promise, write-through serialization

- reconcile() now runs through withLock() to prevent interleaving with
  upsert/delete at async boundaries
- Added initialized promise so callers can await store readiness before
  reading (getStateToPostToWebview now awaits it)
- Write-through to globalState now happens inside the store lock via
  onWrite callback, preventing concurrent call races on the transition
  period fallback
- Removed separate updateGlobalState("taskHistory") calls from
  ClineProvider since the onWrite callback handles it serialized

* fix: add TaskHistoryStore to task-persistence mock in Task.persistence.spec.ts

The test mocks task-persistence with an explicit factory that was
missing the new TaskHistoryStore export, causing all 9 tests to fail
with "No TaskHistoryStore export is defined on the mock".

* perf: debounce globalState write-through to avoid full-array writes on every mutation

Instead of writing the entire HistoryItem[] array to globalState on
every upsert/delete (expensive with 5000+ tasks), the write-through
is now debounced with a 5-second window. Per-task file writes remain
immediate (~200 bytes each). The globalState is flushed on dispose
to ensure no data loss on shutdown.

This makes the hot path during streaming (token count updates) write
only the per-task file, not the full array.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-19 00:01:31 -07:00
Hannes Rudolph
f864270547
fix(chat): redesign rehydration scroll lifecycle (#11483)
* fix(chat): stabilize rehydration scroll-to-bottom convergence

* fix(chat): preserve user escape hatch during initial settle

* refactor(chat): reduce scroll fix PR scope and remove debug plumbing

* fix(chat): redesign rehydration scroll lifecycle

* refactor(chat): extract scroll lifecycle into useScrollLifecycle hook

- Extract ~400 lines of scroll lifecycle logic from ChatView.tsx into
  a dedicated useScrollLifecycle hook, reducing ChatView scroll-related
  refs from ~17 to 0 and making the logic testable in isolation.

- Reduce INITIAL_LOAD_SETTLE_HARD_CAP_MS from 10s to 5s. If rehydration
  takes longer, there is likely a rendering performance issue worth
  investigating separately.

- Document the scrollToIndex reversal: PR #6780 removed scrollToIndex
  due to jitter from stale numeric indices. The "LAST" constant used
  here resolves at call time, avoiding that issue.

- All 6 existing scroll regression tests pass unchanged.

* fix(chat): harden scroll lifecycle pointer intent and settle phase fallback

* test(chat): stabilize ChatView scroll debug repro flake

* refactor(chat): simplify hydration scroll lifecycle

* fix(chat): start existing task at latest message bottom

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-18 23:51:12 -07:00
James Mtendamema
67ea856fd0
feat: add per-workspace indexing opt-in and stop/cancel control (#11456)
* feat: add per-workspace indexing opt-in and stop/cancel control

- Add codeIndexWorkspaceEnabled flag in workspaceState (default: false)
- Thread AbortController/AbortSignal through orchestrator → scanner
- Add Stop Indexing button and Stopping state to UI
- Fix handleSettingsChange() to abort active scan when disabling toggle
- Add translations for all 18 locales

* fix: correct abort handling in indexing scanner and orchestrator

- Re-throw AbortError in scanner's file processing catch block to prevent
  abort signals from being silently swallowed as file errors
- Reorder stopWatcher() before setSystemState() in orchestrator abort
  catch path to ensure watcher cleanup before state transition
- Update scanner test to assert AbortError propagation on mid-scan abort

* fix: optimize workspace check ordering, translate new i18n keys, fix abort handling

- Move workspace-enabled check before _recreateServices() in initialize()
  to avoid creating Qdrant/embedder connections for disabled workspaces
- Translate new i18n keys (indexingStopped, indexingStoppedPartial, stopping,
  stopIndexingButton, stoppingButton, workspaceToggleLabel,
  workspaceDisabledMessage) in all 17 non-English locales
- Re-throw AbortError in scanner catch block to prevent silent swallowing
- Reorder stopWatcher() before setSystemState() in orchestrator abort path
- Update scanner test to assert AbortError propagation on mid-scan abort
- Fix recoverFromError test for workspace-enabled check ordering

* fix: per-folder enablement key, abort-safe dispose and back-pressure, translate i18n

Addresses 0xMink review feedback:
- Store workspace enablement keyed by folder path to support multi-root
  workspaces (codeIndexWorkspaceEnabled:<path> instead of single boolean)
- Add test proving folder A enabled does not enable folder B
- dispose() now calls stopIndexing() to abort orphaned scans on folder removal
- Scanner back-pressure loop checks abort signal to avoid spin-waiting
- Move workspace-enabled check before _recreateServices() in initialize()
- Translate new i18n keys in all 17 non-English locales
- Fix abort handling in orchestrator and scanner catch blocks

* fix: flush debounced cache writes on abort to preserve indexing progress

* feat: add global auto-enable default for backward-compatible workspace indexing

* fix: stop/start indexer when auto-enable default changes effective state

* fix: URI-keyed enablement, throw AbortError in back-pressure, stopWatcher on early-return

* fix: iterate all managers when auto-enable default changes in multi-root workspaces

---------

Co-authored-by: James Mtendamema <jmtendamema@geologicai.com>
2026-02-18 23:09:17 -07:00
Chiranjeevisantosh Madugundi
d7359ff228
Add file changes panel per conversation (#11494)
* Add file changes panel per conversation

Closes #11493

* Add unit tests for file changes and consolidate specs in src/__tests__

Closes #11493

* fix(chat): only show approved file diffs in conversation panel
2026-02-18 23:08:45 -07:00
John Richmond
00075684fd
Release: v1.112.0 (#11589)
chore: bump version to v1.112.0
2026-02-18 16:01:44 -08:00
github-actions[bot]
b91b20536e
Changeset version bump (#11586)
changeset version bump

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-18 16:36:38 -07:00
roomote[bot]
d9b42f57fb
fix: bump @roo-code/types metadata version to 1.111.0 after revert regression (#11588)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-18 15:44:02 -07:00
roomote[bot]
2d21e80add
Release v3.48.1 (#11584)
chore: add changeset for v3.48.1

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-18 13:30:09 -07:00
Peter Dave Hello
7bc966ee00
Fix Bedrock Claude Sonnet 4.6 model ID, cc #11509 (#11569)
Replace the incorrect Sonnet 4.6 Bedrock ID with the AWS-supported
model ID in the model registry and Bedrock capability lists.

Remove references to the deprecated dated ID and update Bedrock
tests to validate the corrected Sonnet 4.6 identifier.
2026-02-18 12:23:13 -07:00
roomote[bot]
d575295883
feat: add DeleteQueuedMessage IPC command (#11464)
* feat: add DeleteQueuedMessage IPC command for queue removal

* Delete .changeset/delete-queued-message-ipc.md

* fix: add try/catch to DeleteQueuedMessage IPC handler and early return in deleteQueuedMessage

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-02-18 10:42:48 -07:00
Daniel
bfbfaf6d46
fix: await MCP server initialization before returning McpHub instance (#11518)
* fix: await MCP server initialization before returning McpHub instance

MCP tools were unavailable on the first task turn when started via IPC
because McpHub's constructor fired initializeGlobalMcpServers() and
initializeProjectMcpServers() without awaiting them. getInstance()
returned a hub with servers still in "connecting" state.

Store the combined initialization promise and expose waitUntilReady(),
then await it in McpServerManager.getInstance() so the hub is only
returned after all servers have connected or timed out.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: assign McpHub instance only after waitUntilReady() resolves

Closes race condition where concurrent callers of getInstance() could
receive a hub that has not finished initialization. The hub is now
created in a local variable and only assigned to this.instance after
waitUntilReady() completes.

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-17 17:32:15 -07:00
github-actions[bot]
44df43063f
Changeset version bump (#11513)
* changeset version bump

* fix: update changelog-config to support multi-line entries and restore full v3.48.0 CHANGELOG

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-02-17 14:25:31 -07:00
Peter Dave Hello
1b699d9040
fix: simplify 1M context locale copy for Claude 4 models (#11514)
Update 1M context locale copy for Claude 4 models

Refresh 1M context beta descriptions so locale text matches
current model support in Anthropic, Bedrock, and Vertex.

Use a shorter model scope string to keep UI copy readable and
easier to maintain while staying accurate.
2026-02-17 14:01:02 -07:00
Chris Estreich
be2b414785
chore(cli): prepare release v0.0.55 (#11516) 2026-02-17 12:58:20 -08:00
Chris Estreich
17d534e3ff
In cli stdin stream mode we should not create new tasks (#11515) 2026-02-17 12:56:53 -08:00
Hannes Rudolph
24958f3a3d
Release v3.48.0 (#11511)
chore: add changeset for v3.48.0
2026-02-17 13:26:35 -07:00
Peter Dave Hello
90e2451ad1
Add Anthropic Claude Sonnet 4.6 support across providers (#11509)
* Add Anthropic Claude Sonnet 4.6 support across providers

Add model definitions and capability flags for Anthropic, Bedrock,
Vertex, OpenRouter, and Vercel AI Gateway.

Update Anthropic handler and UI model selection logic to support Claude
Sonnet 4.6 1M context behavior and tier pricing.

Add focused tests for provider handlers, fetchers, and selected-model
hooks.

Keep Bedrock UI tier pricing parity as-is because this is a
pre-existing issue for Opus 4.6 and will be handled separately.

Reference:
- https://www.anthropic.com/news/claude-sonnet-4-6
- https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison

* Delete .changeset/soft-carpets-hunt.md

---------

Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-02-17 12:28:18 -07:00
roomote[bot]
dc243e4cf9
feat(web): add blog section with initial posts (#11127)
* feat(web): add blog section with 4 initial posts

Implements MKT-66 through MKT-74:

Content Layer (MKT-67):
- Markdown files in src/content/blog with Zod-validated frontmatter
- Pacific Time scheduling evaluated at request-time (no deploy needed)
- gray-matter for parsing, react-markdown + remark-gfm for rendering

Blog Pages (MKT-68, MKT-69):
- Index page at /blog with dynamic SSR
- Post page at /blog/[slug] with dynamic SSR
- Breadcrumb navigation and prev/next post navigation

SEO (MKT-70):
- Full OpenGraph and Twitter card metadata
- Schema.org JSON-LD (Article, BreadcrumbList, CollectionPage)
- Canonical URLs pointing to roocode.com/blog

Analytics (MKT-74):
- PostHog blog_post_viewed and blog_index_viewed events
- Referrer tracking for attribution

Navigation (MKT-72):
- Updated nav-bar and footer to link to internal /blog
- Blog link in Resources dropdown

Sitemap (MKT-71):
- Dynamic blog paths with PT scheduling check

Initial Posts:
- PRDs Are Becoming Artifacts of the Past (Jan 12)
- Code Review Got Faster, Not Easier (Jan 19)
- Vibe Coders Build and Rebuild (Jan 26)
- Async Agents Change the Speed vs Quality Calculus (Feb 2)

* fix(test): update HistoryPreview tests to match refactored component

The HistoryPreview component was refactored to use useGroupedTasks and
TaskGroupItem instead of rendering TaskItem directly. This updates the
test file to properly mock the new dependencies:
- Mock useGroupedTasks hook to provide grouped task data
- Mock TaskGroupItem instead of TaskItem
- Update assertions to test for task groups instead of individual tasks

* feat(blog): add Vercel-inspired patterns and Tone of Voice alignment

- Add reading time display to blog posts
- Create BlogPostCTA component with 4 variants (default, extension, cloud, enterprise)
- Add zebra striping to tables in blog posts
- Add CTA to blog landing and paginated pages
- Remove 'Posted' prefix from dates
- Update blog description: 'How teams use agents to iterate, review, and ship PRs with proof'
- Add BlogPostList and BlogPagination components
- Add 100+ new blog posts from content pipeline

* feat(blog): add source badges for podcast content (Office Hours, After Hours, Roo Cast)

- Add BlogSource type to types.ts
- Export BlogSource from blog index
- Add SourceBadge component to BlogPostList with colored badges
- Each podcast has distinct color: blue (Office Hours), purple (After Hours), emerald (Roo Cast)

* feat(blog): add source field to all blog posts (Roo Cast, Office Hours, After Hours)

- Add add-blog-sources.ts script to build title→source mapping
- Updated 122 blog posts with correct podcast sources
- Sources: Roo Cast (52), Office Hours (62), After Hours (8)

* feat(blog): add source badges with consistent styling

- Add source field to Zod validation schema
- Source badges use same styling as tag badges (rounded, greyscale)
- Badges display on /blog landing page for Office Hours, After Hours, Roo Cast

* feat(blog): improve schema.org structured data for SEO

- Change @type from Article to BlogPosting (more specific)
- Add image property using OG image URL
- Add wordCount for AEO optimization

* feat(blog): timestamped YouTube quotes + attribution polish

* chore(blog): update 'Series A team' to 'Series A - C team' and fix 'Tovin' to 'Tovan'

- Changed 22 instances of 'Series A team' to 'Series A - C team' across 20 blog posts
- Changed 12 instances of 'Tovin' to 'Tovan' across 4 blog posts

This broadens the messaging to better represent teams that Roo Code serves (Series A through C).

* ci: retry CI after timeout

* blog: featured posts + copy edits

* blog: remove draft posts from web content

* fix(blog): loop HTML tag stripping to prevent incomplete sanitization

The single-pass .replace(/<[^>]+>/g, "") in calculateReadingTime() was
flagged by CodeQL as vulnerable to incomplete multi-character sanitization.
Input like "<scr<script>ipt>" would still contain "<script" after one pass.

Added a stripHtmlTags() helper that loops the replacement until stable,
plus a final pass to remove any remaining angle brackets.

* fix(blog): replace iterative HTML tag stripping with single-pass angle bracket removal

The CodeQL scanner flagged the iterative stripHtmlTags function for
incomplete multi-character sanitization. The regex /<[^>]+>/g only
matches complete tags, so partial fragments like <script (without a
closing >) could survive intermediate loop iterations.

Since this function is only used for word counting in
calculateReadingTime, replace the multi-step approach with a simple
single-pass removal of all < and > characters. This eliminates the
incomplete sanitization pattern entirely.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Michael Preuss <michael@roocode.com>
2026-02-16 20:37:54 -05:00
SannidhyaSah
3e24e21c3d
fix: preserve condensation summary during task resume (#11487) (#11488)
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
2026-02-16 10:21:52 -07:00
rossdonald
77ed60a173
fix: add follow_up param validation in AskFollowupQuestionTool (#11484)
Added strict validation for the `follow_up` parameter to
check for presence and type (Array). Added test cases
covering missing, null, and invalid type scenarios.
Refactored parameter error handling into a helper method to reduce
duplication.
2026-02-16 10:14:37 -07:00
Hannes Rudolph
6ef149d567
docs: remove reapplication-plan.md (#11481) 2026-02-15 11:23:23 -07:00
Chris Estreich
aaee5a2c02
chore(cli): prepare release v0.0.54 (#11477) 2026-02-14 23:40:07 -08:00
Chris Estreich
27a78833c8
Add stdin stream mode for the cli (#11476)
* Add stdin stream mode for the cli

* fix: clear jsonEmitter state between tasks in stdin-prompt-stream mode

* fix: use consistent user role for prompt echo partials in stream-json mode

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-14 23:36:20 -08:00
Hannes Rudolph
04ffb64bb7
Reapply Batches 3-4: Skills, browser removal, provider removals (6 major-conflict cherry-picks) (#11475) 2026-02-14 22:06:24 -07:00
Hannes Rudolph
bcb8c81916
Reapply Batch 2: 9 minor-conflict non-AI-SDK cherry-picks (#11474)
* fix: correct Bedrock model ID for Claude Opus 4.6 (#11232)

Remove the :0 suffix from the Claude Opus 4.6 model ID to match
the correct AWS Bedrock model identifier.

The model ID was "anthropic.claude-opus-4-6-v1:0" but should be
"anthropic.claude-opus-4-6-v1" per AWS Bedrock documentation.

Fixes #11231

Co-authored-by: Roo Code <roomote@roocode.com>

* fix: guard against empty-string baseURL in provider constructors (#11233)

When the 'custom base URL' checkbox is unchecked in the UI, the setting
is set to '' (empty string). Providers that passed this directly to their
SDK constructors caused 'Failed to parse URL' errors because the SDK
treated '' as a valid but broken base URL override.

- gemini.ts: use || undefined (was passing raw option)
- openai-native.ts: use || undefined (was passing raw option)
- openai.ts: change ?? to || for fallback default
- deepseek.ts: change ?? to || for fallback default
- moonshot.ts: change ?? to || for fallback default

Adds test coverage for Gemini and OpenAI Native constructors verifying
empty-string baseURL is coerced to undefined.

* fix: make defaultTemperature required in getModelParams to prevent silent temperature overrides (#11218)

* fix: DeepSeek temperature defaulting to 0 instead of 0.3

Pass defaultTemperature: DEEP_SEEK_DEFAULT_TEMPERATURE to getModelParams() in
DeepSeekHandler.getModel() to ensure the correct default temperature (0.3)
is used when no user configuration is provided.

Closes #11194

* refactor: make defaultTemperature required in getModelParams

Make the defaultTemperature parameter required in getModelParams() instead
of defaulting to 0. This prevents providers with their own non-zero default
temperature (like DeepSeek's 0.3) from being silently overridden by the
implicit 0 default.

Every provider now explicitly declares its temperature default, making the
temperature resolution chain clear:
  user setting → model default → provider default

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>

* feat: batch consecutive tool calls in chat UI with shared utility (#11245)

* feat: group consecutive list_files tool calls into single UI block

Consolidate consecutive listFilesTopLevel/listFilesRecursive ask messages
into a single 'Roo wants to view multiple directories' block, matching the
existing read_file batching pattern.

* chore: add missing translation keys for all locales

* refactor: consolidate duplicate listFiles batch-handling blocks in ChatRow

Merge the separate listFilesTopLevel and listFilesRecursive case blocks
into a single combined case with shared batch-detection logic, selecting
the icon and translation key based on the tool type. This removes the
duplicated isBatchDirRequest check and BatchListFilesPermission render.

* feat: batch consecutive file-edit tool calls into single UI block

Add edit-file batching in ChatView groupedMessages that consolidates
consecutive editedExistingFile, appliedDiff, newFileCreated,
insertContent, and searchAndReplace asks into a single BatchDiffApproval
block. Move batchDiffs detection in ChatRow above the switch statement
so it applies to any file-edit tool type.

* refactor: extract batchConsecutive utility, fix batch UI issues

- Extract generic batchConsecutive() utility from 3 identical while-loops
- Fix React key collisions in BatchListFilesPermission, BatchFilePermission, BatchDiffApproval
- Normalize language prop to "shellsession" (was "shell-session" for top-level)
- Remove unused _batchedMessages property from synthetic messages
- Remove dead didViewMultipleDirectories i18n key from all 18 locale files
- Add batch button text for listFilesTopLevel/listFilesRecursive
- Add batchConsecutive utility tests (6 cases)

* fix: audit improvements for batch tool-call UI

- Make batchConsecutive() generic instead of ClineMessage-specific
- Add batch-aware button text for edit-file batches ("Save All"/"Deny All")
- Add dedicated list-batch/edit-batch i18n keys (stop reusing read-batch)
- Add JSON.parse defense-in-depth in all three synthesizers
- Fix mixed list_files batch icon to default to FolderTree
- Add 6 missing test cases (all-match, immutability, spy, single-dir)

* chore: minor type cleanup (out-of-scope housekeeping)

- Trim unused recursive/isOutsideWorkspace from DirPermissionItem interface
- Remove 4 pre-existing `as any` casts in ChatView.tsx:
  - window cast → precise inline type
  - checkpoint bracket access → removed unnecessary casts
  - condensing message → `as ClineMessage`
  - debounce cancel → `.clear()` (correct API)
- Update BatchListFilesPermission test data to match trimmed interface

* i18n: add list-batch and edit-batch translations for all locales

* feat: add IPC query handlers for commands, modes, and models (#11279)

Add GetCommands, GetModes, and GetModels to the IPC protocol so external
clients can fetch slash commands, available modes, and Roo provider models
without going through the internal webview message channel.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add lock toggle to pin API config across all modes in workspace (#11295)

* feat: add lock toggle to pin API config across all modes in workspace

Add a lock/unlock toggle inside the API config selector popover (next to
the settings gear) that, when enabled, applies the selected API
configuration to all modes in the current workspace.

- Add lockApiConfigAcrossModes to ExtensionState and WebviewMessage types
- Store setting in workspaceState (per-workspace, not global)
- When locked, activateProviderProfile sets config for all modes
- Lock icon in ApiConfigSelector popover bottom bar next to gear
- Full i18n: English + 17 locale translations (all mention workspace scope)
- 9 new tests: 2 ClineProvider, 2 handler, 5 UI (77 total pass)

* refactor: replace write-fan-out with read-time override for lock API config

The original lock implementation used setModeConfig() fan-out to write the
locked config to ALL modes globally. Since the lock flag lives in workspace-
scoped workspaceState but modeApiConfigs are in global secrets, this caused
cross-workspace data destruction.

Replaced with read-time guards:
- handleModeSwitch: early return when lock is on (skip per-mode config load)
- createTaskWithHistoryItem: skip mode-based config restoration under lock
- activateProviderProfile: removed fan-out block
- lockApiConfigAcrossModes handler: simplified to flag + state post only
- Fixed pre-existing workspaceState mock gap in ClineProvider.spec.ts and
  ClineProvider.sticky-profile.spec.ts

* fix: validate Gemini thinkingLevel against model capabilities and handle empty streams (#11303)

* fix: validate Gemini thinkingLevel against model capabilities and handle empty streams

getGeminiReasoning() now validates the selected effort against the model's
supportsReasoningEffort array before sending it as thinkingLevel. When a
stale settings value (e.g. 'medium' from a different model) is not in the
supported set, it falls back to the model's default reasoningEffort.

GeminiHandler.createMessage() now tracks whether any text content was
yielded during streaming and handles NoOutputGeneratedError gracefully
instead of surfacing the cryptic 'No output generated' error.

* fix: guard thinkingLevel fallback against 'none' effort and add i18n TODO

The array validation fallback in getGeminiReasoning() now only triggers
when the selected effort IS a valid Gemini thinking level but not in
the model's supported set. Values like 'none' (explicit no-reasoning
signal) are no longer overridden by the model default.

Also adds a TODO for moving the empty-stream message to i18n.

* fix: track tool_call_start in hasContent to avoid false empty-stream warning

Tool-only responses (no text) are valid content. Without this,
agentic tool-call responses would incorrectly trigger the empty
response warning message.

* chore(cli): prepare release v0.0.53 (#11425)

* feat: add GLM-5 model support to Z.ai provider (#11440)

* chore: regenerate pnpm-lock.yaml

* fix: resolve type errors and remove AI SDK test contamination

* docs: update progress.txt with rebuilt Batch 2 status

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:40:07 -07:00
Hannes Rudolph
b2b77809ff
Reapply Batch 1: 22 clean non-AI-SDK cherry-picks (#11473)
* fix: add image content support to MCP tool responses (#10874)

Co-authored-by: Roo Code <roomote@roocode.com>

* fix: transform tool blocks to text before condensing (EXT-624) (#10975)

* refactor(read_file): Codex-inspired read_file refactor EXT-617 (#10981)

* feat: allow import settings in initial welcome screen (#10994)

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>

* fix(code-index): remove deprecated text-embedding-004 and migrate to gemini-embedding-001 (#11038)

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>

* chore: treat extension .env as optional (#11116)

* fix: sanitize tool_use_id in tool_result blocks to match API history (#11131)

Tool IDs from providers like Gemini/OpenRouter contain special characters
(e.g., 'functions.read_file:0') that are sanitized when saving tool_use
blocks to API history. However, tool_result blocks were using the original
unsanitized IDs, causing ToolResultIdMismatchError.

This fix ensures tool_result blocks use sanitizeToolUseId() to match the
sanitized tool_use IDs in conversation history.

Fixes EXT-711

* fix: queue messages during command execution instead of losing them (#11140)

* IPC fixes for task cancellation and queued messages (#11162)

* feat: add support for AGENTS.local.md personal override files (#11183)

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* fix(cli): resolve race condition causing provider switch during mode changes (#11205)

When using slash commands with `mode:` frontmatter (e.g., `/cli-release`
with `mode: code`), the CLI would fail with "Could not resolve
authentication method" from the Anthropic SDK, even when using a
non-Anthropic provider like `--provider roo`.

Root cause: In `markWebviewReady()`, the `webviewDidLaunch` message was
sent before `updateSettings`, creating a race condition. The
`webviewDidLaunch` handler's "first-time init" sync would read
`getState()` before CLI-provided settings were applied to the context
proxy. Since `getState()` defaults `apiProvider` to "anthropic" when
unset, this default was saved to the provider profile. When a slash
command triggered `handleModeSwitch()`, it found this corrupted profile
with `apiProvider: "anthropic"` (but no API key) and activated it,
overwriting the CLI's working roo provider configuration.

Fix:
1. Reorder `markWebviewReady()` to send `updateSettings` before
   `webviewDidLaunch`, ensuring the context proxy has CLI-provided
   values when the initialization handler runs.
2. Guard the first-time init sync with `checkExistKey(apiConfiguration)`
   to prevent saving a profile with only the default "anthropic"
   fallback and no actual API keys configured.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

* chore: remove dead toolFormat code from getEnvironmentDetails (#11207)

Remove the toolFormat constant and <tool_format> line from environment
details output. Native tool calling is now the only supported protocol,
making this code unnecessary.

Fixes #11206

Co-authored-by: Roo Code <roomote@roocode.com>

* feat: extract translation and merge resolver modes into reusable skills (#11215)

* feat: extract translation and merge resolver modes into reusable skills

- Add roo-translation skill with comprehensive i18n guidelines
- Add roo-conflict-resolution skill for intelligent merge conflict resolution
- Add /roo-translate slash command as shortcut for translation skill
- Add /roo-resolve-conflicts slash command as shortcut for conflict resolution skill

The existing translate and merge-resolver modes are preserved. These new skills
and commands provide reusable access to the same functionality.

Closes CLO-722

* feat: add guidances directory with translator guidance file

- Add .roo/guidances/roo-translator.md for brand voice, tone, and word choice guidance
- Update roo-translation skill to reference the guidance file

The guidance file serves as a placeholder for translation style guidelines
that will be interpolated at runtime.

* fix: rename guidances directory to guidance (singular)

* fix: remove language-specific section from translator guidance

The guidance file should focus on brand voice, tone, and word choice only.

* fix: remove language-specific guidelines section from skill file

* Update .roo/skills/roo-translation/SKILL.md

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* feat: add Claude Opus 4.6 support across all providers (#11224)

* feat: add Claude Opus 4.6 support across all providers

Add Claude Opus 4.6 (claude-opus-4-6) model definitions and 1M context
support across Anthropic, Bedrock, Vertex AI, OpenRouter, and Vercel AI
Gateway providers.

- Anthropic: 128K max output, /5 pricing, 1M context tiers
- Bedrock: anthropic.claude-opus-4-6-v1:0 with 1M context + global inference
- Vertex: claude-opus-4-6 with 1M context tiers
- OpenRouter: prompt caching + reasoning budget sets
- Vercel AI Gateway: Opus 4.5 and 4.6 added to capability sets
- UI: 1M context checkbox for Opus 4.6 on all providers
- i18n: Updated 1M context descriptions across 18 locales

Also adds Opus 4.5 to Vercel AI Gateway (previously missing) and
OpenRouter maxTokens overrides for Opus 4.5/4.6.

Closes #11223

* fix: apply tier pricing when 1M context is enabled on Bedrock

When awsBedrock1MContext is enabled for tiered models like Opus 4.6,
also apply the 1M tier pricing (inputPrice, outputPrice, cache prices)
instead of only updating contextWindow. This ensures cost calculations
and UI display use the correct >200K rates.

* feat: add gpt-5.3-codex model to OpenAI Codex provider (#11225)

feat: add gpt-5.3-codex model and make it default for OpenAI Codex provider

Co-authored-by: Roo Code <roomote@roocode.com>

* fix: prevent parent task state loss during orchestrator delegation (#11281)

* fix: make removeClineFromStack() delegation-aware to prevent orphaned parent tasks (#11302)

* fix: make removeClineFromStack() delegation-aware to prevent orphaned parent tasks

When a delegated child task is removed via removeClineFromStack() (e.g., Clear
Task, navigate to history, start new task), the parent task was left orphaned
in "delegated" status with a stale awaitingChildId. This made the parent
unresumable without manual history repair.

This fix captures parentTaskId and childTaskId before abort/dispose, then
repairs the parent metadata (status -> active, clear awaitingChildId) when
the popped task is a delegated child and awaitingChildId matches.

Parent lookup + updateTaskHistory are wrapped in try/catch so failures are
non-fatal (logged but do not block the pop).

Closes #11301

* fix: add skipDelegationRepair opt-out to removeClineFromStack() for nested delegation

---------

Co-authored-by: Roo Code <roomote@roocode.com>

* fix(reliability): prevent webview postMessage crashes and make dispose idempotent (#11313)

* fix(reliability): prevent webview postMessage crashes and make dispose idempotent

Closes: #11311

1. postMessageToWebview() now catches rejections from
   webview.postMessage() so that messages sent after the webview is
   disposed do not surface as unhandled promise rejections.

2. dispose() is guarded by a _disposed flag so that repeated calls
   (e.g. during rapid extension deactivation) are no-ops.

3. CloudService mock in ClineProvider.spec.ts updated to include
   off() — a pre-existing gap exposed by the new dispose test.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add early _disposed check in postMessageToWebview

Skip the postMessage call entirely when the provider is already disposed,
avoiding unnecessary try/catch execution. Added test coverage for this path.

* chore: trigger CI

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>

* fix: resolve race condition in new_task delegation that loses parent task history (#11331)

* fix: resolve race condition in new_task delegation that loses parent task history

When delegateParentAndOpenChild creates a child task via createTask(), the
Task constructor fires startTask() as a fire-and-forget async call. The child
immediately begins its task loop and eventually calls saveClineMessages() →
updateTaskHistory(), which reads globalState, modifies it, and writes back.

Meanwhile, delegateParentAndOpenChild persists the parent's delegation
metadata (status: 'delegated', delegatedToId, awaitingChildId, childIds) via
a separate updateTaskHistory() call AFTER createTask() returns.

These two concurrent read-modify-write operations on globalState race: the
last writer wins, overwriting the other's changes. When the child's write
lands last, the parent's delegation fields are lost, making the parent task
unresumable when the child finishes.

Fix: create the child task with startTask: false, persist the parent's
delegation metadata first, then manually call child.start(). This ensures
the parent metadata is safely in globalState before the child begins writing.

* docs: clarify Task.start() only handles new tasks, not history resume

* fix: serialize taskHistory writes and fix delegation status overwrite race (#11335)

Add a promise-chain mutex (withTaskHistoryLock) to serialize all
read-modify-write operations on taskHistory, preventing concurrent
interleaving from silently dropping entries.

Reorder reopenParentFromDelegation to close the child instance
before marking it completed, so the abort path's stale 'active'
status write no longer overwrites the 'completed' state.

Covered by new tests: RPD-04/05/06, UTH-02/04, and a full mutex
concurrency suite.

* Fix task resumption in the API module (#11369)

* chore: clean up repo-facing mode rules (#11410)

* fix: add maxReadFileLine to ExtensionState type for webview compatibility

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: 0xMink <dennis@dennismink.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-14 13:47:12 -07:00
Daniel
d52b6834e3
Add back post-revert bug fixes and features (Step 2) (#11463)
* fix: cancel backend auto-approval timeout when auto-approve is toggled off mid-countdown (#11439)

Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>

* fix: prevent chat history loss during cloud/settings navigation (#11371) (#11372)

Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>

* fix: preserve pasted images in chatbox during chat activity (#11375)

Co-authored-by: Roo Code <roomote@roocode.com>

* fix: resolve chat scroll anchoring and task-switch scroll race condit… (#11385)

* fix: avoid zsh process-substitution false positives in assignments (#11365)

* fix(editor): make tab close best-effort in DiffViewProvider.open (#11363)

* fix(checkpoints): canonicalize core.worktree comparison to prevent Windows path mismatch failures (#11346)

* fix: prevent double notification sound playback (#11283)

* fix: prevent false unsaved changes prompt with OpenAI Compatible headers (#8230) (#11334)

fix: prevent false unsaved changes prompt with OpenAI Compatible headers

Mark automatic header syncs in ApiOptions and OpenAICompatible as
non-user actions (isUserAction: false) and enhance SettingsView change
detection to skip automatic syncs with semantically equal values.

Root cause: two components (ApiOptions and OpenAICompatible) manage
openAiHeaders state and automatically sync it back on mount/remount.
These syncs were treated as user changes, triggering a false dirty state.

Co-authored-by: Robert McIntyre <robertjmcintyre@users.noreply.github.com>

* fix: remove noisy console.warn logs from NativeToolCallParser (#11264)

Remove two console.warn messages that fire excessively when loading tasks
from history:
- 'Attempting to finalize unknown tool call' in finalizeStreamingToolCall()
- 'Received chunk for unknown tool call' in processStreamingChunk()

The defensive null-return behavior is preserved; only the log output is removed.

* refactor: remove footgun prompting (file-based system prompt override) (#11387)

* refactor: delete orphaned per-provider caching transform files (#11388)

* feat: add disabledTools setting to globally disable native tools (#11277)

* feat: add disabledTools setting to globally disable native tools

Add a disabledTools field to GlobalSettings that allows disabling specific
native tools by name. This enables cloud agents to be configured with
restricted tool access.

Schema:
- Add disabledTools: z.array(toolNamesSchema).optional() to globalSettingsSchema
- Add disabledTools to organizationDefaultSettingsSchema.pick()
- Add disabledTools to ExtensionState Pick type

Prompt generation (tool filtering):
- Add disabledTools to BuildToolsOptions interface
- Pass disabledTools through filterSettings to filterNativeToolsForMode()
- Remove disabled tools from allowedToolNames set in filterNativeToolsForMode()

Execution-time validation (safety net):
- Extract disabledTools from state in presentAssistantMessage
- Convert disabledTools to toolRequirements format for validateToolUse()

Wiring:
- Add disabledTools to ClineProvider getState() and getStateToPostToWebview()
- Pass disabledTools to all buildNativeToolsArrayWithRestrictions() call sites

EXT-778

* fix: check toolRequirements before ALWAYS_AVAILABLE_TOOLS

Moves the toolRequirements check before the ALWAYS_AVAILABLE_TOOLS
early-return in isToolAllowedForMode(). This ensures disabledTools
can block always-available tools (switch_mode, new_task, etc.) at
execution time, making the validation layer consistent with the
filtering layer.

* feat: add support for .agents/skills directory (#11181)

* feat: add support for .agents/skills directory

This change adds support for discovering skills from the .agents/skills
directory, following the Agent Skills convention for sharing skills
across different AI coding tools.

Priority order (later entries override earlier ones):
1. Global ~/.agents/skills (shared across AI coding tools, lowest priority)
2. Project .agents/skills
3. Global ~/.roo/skills (Roo-specific)
4. Project .roo/skills (highest priority)

Changes:
- Add getGlobalAgentsDirectory() and getProjectAgentsDirectoryForCwd()
  functions to roo-config
- Update SkillsManager.getSkillsDirectories() to include .agents/skills
- Update SkillsManager.setupFileWatchers() to watch .agents/skills
- Add tests for new functionality

* fix: clarify skill priority comment to match actual behavior

* fix: clarify skill priority comment to explain Map.set replacement mechanism

---------

Co-authored-by: Roo Code <roomote@roocode.com>

* feat(history): render nested subtasks as recursive tree (#11299)

* feat(history): render nested subtasks as recursive tree

* fix(lockfile): resolve missing ai-sdk provider entry

* fix: address review feedback — dedupe countAll, increase SubtaskRow max-h

- HistoryView: replace local countAll with imported countAllSubtasks from types.ts
- SubtaskRow: increase nested children max-h from 500px to 2000px to match TaskGroupItem

* perf(refactor): consolidate getState calls in resolveWebviewView (#11320)

* perf(refactor): consolidate getState calls in resolveWebviewView

Replace three separate this.getState().then() calls with a single
await this.getState() and destructuring. This avoids running the
full getState() method (CloudService calls, ContextProxy reads, etc.)
three times during webview view resolution.

* fix: keep getState consolidation non-blocking to avoid delaying webview render

---------

Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>

* fix: harden command auto-approval against inline JS false positives (#11382)

* feat: rename search_and_replace tool to edit and unify edit-family UI (#11296)

* Revert "refactor: delete orphaned per-provider caching transform files (#11388)"

This reverts commit 13a45b0361.

* chore: regenerate built-in-skills.ts with updated formatting

* fix: add missing maxReadFileLine property to test baseState

The ExtensionState type now requires maxReadFileLine property (added in commit 63e3f769a).
Update the test to include this property with the default value of -1 (unlimited reading).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* feat: add pnpm serve command for code-server development (#10964)

Co-authored-by: Roo Code <roomote@roocode.com>

* chore: remove Feature Request from issue template options (#11141)

Co-authored-by: Roo Code <roomote@roocode.com>

* refactor(docs-extractor): simplify mode to focus on raw fact extraction (#11129)

* Add cli support for linux (#11167)

* fix: replace heredocs with echo statements in cli-release workflow (#11168)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

* Drop MacOS-13 cli support (#11169)

* fix(cli): correct example in install script (#11170)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

* feat: add Kimi K2.5 model to Fireworks provider (#11177)

* feat(cli): improve dev experience and roo provider API key support (#11203)

- Allow --api-key and ROO_API_KEY env var for the roo provider instead of
  requiring cloud auth token
- Switch dev/start scripts to use tsx for running directly from source
  without building first
- Fix path resolution (version.ts, extension.ts, extension-host.ts) to
  work from both source and bundled locations
- Disable debug log file (~/.roo/cli-debug.log) unless --debug is passed
- Update README with complete env var table and dev workflow docs

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

* Roo Code CLI v0.0.50 (#11204)

* Roo Code CLI v0.0.50

* docs(cli): add --exit-on-error to changelog

---------

Co-authored-by: Roo Code <roomote@roocode.com>

* feat(cli): update default model from Opus 4.5 to Opus 4.6 (#11273)

Co-authored-by: Roo Code <roomote@roocode.com>

* feat(web): replace Roomote Control with Linear Integration in cloud features grid (#11280)

Co-authored-by: Roo Code <roomote@roocode.com>

* Add linux-arm64 for the roo cli (#11314)

* chore: clean up repo-facing mode rules (#11410)

* Make CLI auto-approve by default with require-approval opt-in (#11424)

Co-authored-by: Roo Code <roomote@roocode.com>

* Add new code owners to CODEOWNERS file

* Update next.js (#11108)

* feat(web): Replace bespoke navigation menu with shadcn navigation menu (#11117)

Co-authored-by: Roo Code <roomote@roocode.com>

---------

Co-authored-by: SannidhyaSah <sah_sannidhya@outlook.com>
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: 0xMink <dennis@dennismink.com>
Co-authored-by: Robert McIntyre <robertjmcintyre@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2026-02-13 18:40:28 -05:00
roomote[bot]
594ed62f96
fix: restore @hannesrudolph and @daniel-lxs as default code owners (#11469)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-13 15:32:05 -07:00
Daniel
6cfa82f571
Revert to pre-AI-SDK state (January 29, 2026) (#11462)
Revert to pre-AI-SDK state (commit 67e568f6b)

This commit reverts the codebase to the state before AI SDK migration work began.

Target commit: 67e568f6b - refactor: replace fetch_instructions with skill tool and built-in skills (#10913)
Date: January 29, 2026

This removes approximately 152 commits of AI SDK migration work.
A follow-up PR will add back bug fixes and features that are unrelated to AI SDK.

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-13 16:45:18 -05:00
roomote[bot]
5507f5ab64
feat: extract translation and merge resolver modes into reusable skills (#11215)
* feat: extract translation and merge resolver modes into reusable skills

- Add roo-translation skill with comprehensive i18n guidelines
- Add roo-conflict-resolution skill for intelligent merge conflict resolution
- Add /roo-translate slash command as shortcut for translation skill
- Add /roo-resolve-conflicts slash command as shortcut for conflict resolution skill

The existing translate and merge-resolver modes are preserved. These new skills
and commands provide reusable access to the same functionality.

Closes CLO-722

* feat: add guidances directory with translator guidance file

- Add .roo/guidances/roo-translator.md for brand voice, tone, and word choice guidance
- Update roo-translation skill to reference the guidance file

The guidance file serves as a placeholder for translation style guidelines
that will be interpolated at runtime.

* fix: rename guidances directory to guidance (singular)

* fix: remove language-specific section from translator guidance

The guidance file should focus on brand voice, tone, and word choice only.

* fix: remove language-specific guidelines section from skill file

* Update .roo/skills/roo-translation/SKILL.md

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-02-13 09:28:20 -08:00
Hannes Rudolph
b4d9f92b4d
Revert "Fix provider 400s: strip reasoning_details from messages, $ref from tool schemas" (#11453) 2026-02-12 19:51:21 -07:00
Hannes Rudolph
3965cd9743
fix: stabilize token/cache accounting across providers and routed Roo metadata (#11448) 2026-02-12 16:10:43 -07:00
Hannes Rudolph
b7857bcd6a
fix: harden delegation lifecycle against race conditions with per-task metadata, mutual-exclusion guards, and multi-layer failure recovery (#11379)
* fix: race conditions in subtask delegation system

Comprehensive fix for race conditions and error handling gaps in the subtask
delegation system. Addresses multiple failure modes that could leave parent
tasks permanently stuck in 'delegated' status, causing nested subtasks to hang.

Key fixes:
- Remove initialStatus from taskMetadata rebuild (eliminates status overwrites)
- Persist delegation metadata to per-task files (resolves globalState eviction)
- Add delegationInProgress mutex guard (prevents concurrent delegation ops)
- TOCTOU race fixes with fresh re-reads before writes
- Abort-aware pWaitFor predicate (prevents false 60s timeout on user input)
- Remove silent .catch(() => {}) — all errors now logged unless task is aborting
- Single-attempt delegation with parent repair on failure (no retry band-aids)
- Cancel debouncedEmitTokenUsage in dispose() (prevents zombie callbacks)
- new_task isolation truncation for parallel tool calls

* fix: write all 6 delegation fields in every saveDelegationMeta call site

* fix: align delegation tests with single-attempt implementation (no retry)
2026-02-12 13:06:25 -05:00
0xMink
9e46d3e10c
Fix provider 400s: strip reasoning_details from messages, $ref from tool schemas (#11431)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-12 12:00:52 -05:00
SannidhyaSah
6c9ff49dd8
fix: cancel backend auto-approval timeout when auto-approve is toggled off mid-countdown (#11439)
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
2026-02-12 10:38:11 -05:00
roomote[bot]
cdf481c8f9
feat: add GLM-5 model support to Z.ai provider (#11440) 2026-02-12 09:14:52 -05:00
Hannes Rudolph
897c372d2d
refactor: unify cache control with centralized breakpoints and universal provider options (#11426) 2026-02-12 00:21:25 -07:00
Hannes Rudolph
fa9dff4a06
refactor: remove browser use functionality entirely (#11392) 2026-02-11 18:11:21 -07:00
Chris Estreich
f54f224a26
chore(cli): prepare release v0.0.53 (#11425) 2026-02-11 16:43:12 -08:00
Chris Estreich
6c8b9dfa26
Make CLI auto-approve by default with require-approval opt-in (#11424)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-11 16:12:05 -08:00
Chris Estreich
bd4cd07e88
Release: v1.111.0 (#11421) 2026-02-11 15:55:31 -08:00
Chris Estreich
77b76a891f
Handle cancel/resume abort races without crashing (#11422) 2026-02-11 15:55:08 -08:00
Daniel
b51af98278
fix: make delegation reopen flow Roo v2-native (#11418) 2026-02-11 16:38:57 -05:00
Hannes Rudolph
b759b92f01
refactor: remove built-in skills and built-in skills mechanism (#11414) 2026-02-11 14:32:57 -07:00
Hannes Rudolph
d2c52c9e09
chore: clean up repo-facing mode rules (#11410) 2026-02-11 12:15:55 -07:00
Daniel
e6f0e79c38
feat: implement ModelMessage storage layer with AI SDK response messages (#11409)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 13:58:39 -05:00
Matt Rubens
dcb33c47ad
Revert "feat: wire RooMessage storage into Task.ts and all providers" (#11394) 2026-02-10 23:57:42 -05:00
Daniel
a7ba3b5af5
feat: wire RooMessage storage into Task.ts and all providers (#11386) 2026-02-10 21:25:48 -07:00
Hannes Rudolph
4e659b459d
refactor: remove footgun prompting (file-based system prompt override) (#11387) 2026-02-10 18:32:01 -07:00
Hannes Rudolph
5800363903
refactor: delete orphaned per-provider caching transform files (#11388) 2026-02-10 17:39:45 -07:00
Hannes Rudolph
8a69e9e04d
feat: rename search_and_replace tool to edit and unify edit-family UI (#11296) 2026-02-10 17:32:35 -07:00
Hannes Rudolph
097f648349
fix: resolve chat scroll anchoring and task-switch scroll race condit… (#11385) 2026-02-10 16:40:13 -07:00
Hannes Rudolph
8d57da8bc8
roofactor: Migrate Roo provider to AI SDK (#11383) 2026-02-10 16:16:32 -07:00
Hannes Rudolph
08a96af22c
fix: harden command auto-approval against inline JS false positives (#11382) 2026-02-10 14:44:10 -07:00
Daniel
50e5d98f5b
feat: RooMessage type system and storage layer for ModelMessage migration (#11380)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-10 16:41:35 -05:00
Danger Mouse
4438fdadc6
Second Quick Fix for Azure Foundry (#11374) 2026-02-10 10:39:55 -07:00
roomote[bot]
b971fe1a63
fix: preserve pasted images in chatbox during chat activity (#11375)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-10 12:37:41 -05:00
Daniel
cdd1a4dabf
refactor: migrate NativeOllamaHandler to AI SDK (#11355) 2026-02-10 10:36:28 -07:00
Hannes Rudolph
4272a69726
refactor: unify Gemini/Vertex error handling via handleAiSdkError() (#11364) 2026-02-10 11:19:37 -05:00
SannidhyaSah
ff89965f59
fix: prevent chat history loss during cloud/settings navigation (#11371) (#11372)
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
2026-02-10 10:41:53 -05:00
Hannes Rudolph
d4cf3211e7
fix: avoid zsh process-substitution false positives in assignments (#11365) 2026-02-10 10:01:48 -05:00
0xMink
7df1a18ccb
fix(editor): make tab close best-effort in DiffViewProvider.open (#11363) 2026-02-10 09:52:30 -05:00
0xMink
c1a8767adc
fix(checkpoints): canonicalize core.worktree comparison to prevent Windows path mismatch failures (#11346) 2026-02-10 09:51:38 -05:00
Chris Estreich
b02924530c
Fix task resumption in the API module (#11369) 2026-02-10 00:28:17 -08:00
Daniel
5773af8ddd
feat: Refactor OpenRouter provider to use Vercel AI SDK (#10778)
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-02-09 20:50:33 -07:00
Hannes Rudolph
2f9849071d
fix: surface actual API error messages instead of generic NoOutputGeneratedError (#11359) 2026-02-09 19:47:04 -07:00
Hannes Rudolph
938e6994a2
refactor: migrate Qwen Code provider to AI SDK (#11356)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-09 18:45:27 -07:00
Hannes Rudolph
b6bf829ad9
feat: migrate MiniMax provider to AI SDK (#11357) 2026-02-09 18:33:22 -07:00
Hannes Rudolph
b7d6e4933d
refactor: migrate OpenAI Codex to AI SDK and use Responses API instructions field (#11352) 2026-02-09 16:50:40 -07:00
Daniel
34a278e9a2
feat: migrate VercelAiGatewayHandler to AI SDK (#11353) 2026-02-09 18:50:21 -05:00
Daniel
a4914c438c
feat: migrate OpenAiHandler to AI SDK (#11351)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-09 18:49:34 -05:00
Daniel
7a38b99232
feat: migrate Requesty provider to AI SDK (@requesty/ai-sdk) (#11350) 2026-02-09 16:29:32 -07:00
Hannes Rudolph
f51e91ac76
fix: prevent double notification sound playback (#11283) 2026-02-09 16:17:36 -07:00
Hannes Rudolph
7da429da19
Revert "feat: add task header highlight for visual status indication" (#11349)
Revert "feat: add task header highlight for visual status indication (#11305)"

This reverts commit 5313cb503a.
2026-02-09 15:29:10 -07:00
Daniel
c74acf36ef
feat: migrate LiteLLM provider to AI SDK (@ai-sdk/openai-compatible) (#11348)
* feat: migrate LiteLLM provider to AI SDK (@ai-sdk/openai-compatible)

- Replace raw OpenAI SDK (RouterProvider) with Vercel AI SDK's
  createOpenAICompatible via OpenAICompatibleHandler base class
- Retain dynamic model fetching from LiteLLM server via /v1/model/info
- Use centralized getModelMaxOutputTokens() to cap output tokens at 20%
  of context window, preventing overflow errors
- Remove LiteLLM-specific workarounds (Gemini thought signature injection,
  prompt cache control headers) now handled by the proxy or AI SDK
- Rewrite tests to mock AI SDK (streamText, generateText) instead of
  raw OpenAI SDK

* fix: call fetchModel() in completePrompt() before execution

Addresses review feedback - completePrompt() now fetches models
before executing to ensure correct model info for token limits,
matching the behavior of createMessage().
2026-02-09 15:20:42 -07:00
roomote[bot]
70775f0ec1
fix: make removeClineFromStack() delegation-aware to prevent orphaned parent tasks (#11302)
* fix: make removeClineFromStack() delegation-aware to prevent orphaned parent tasks

When a delegated child task is removed via removeClineFromStack() (e.g., Clear
Task, navigate to history, start new task), the parent task was left orphaned
in "delegated" status with a stale awaitingChildId. This made the parent
unresumable without manual history repair.

This fix captures parentTaskId and childTaskId before abort/dispose, then
repairs the parent metadata (status -> active, clear awaitingChildId) when
the popped task is a delegated child and awaitingChildId matches.

Parent lookup + updateTaskHistory are wrapped in try/catch so failures are
non-fatal (logged but do not block the pop).

Closes #11301

* fix: add skipDelegationRepair opt-out to removeClineFromStack() for nested delegation

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-09 16:54:13 -05:00
Daniel
bb86eb8651
refactor: migrate LM Studio provider to Vercel AI SDK (#11347)
* refactor: migrate LM Studio provider to Vercel AI SDK

Migrate LmStudioHandler from raw OpenAI SDK to Vercel AI SDK via
OpenAICompatibleHandler base class.

Changes:
- Extend OpenAICompatibleHandler instead of BaseProvider
- Use createOpenAICompatible from @ai-sdk/openai-compatible
- Use streamText/generateText from ai package
- Add extractReasoningMiddleware for <think> tag extraction parity
- Pass draft_model via providerOptions for speculative decoding
- Remove unused getLmStudioModels function (active version in fetchers/)
- Update all tests to mock AI SDK instead of OpenAI SDK

* fix: wrap completePrompt with handleAiSdkError for consistent error handling

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-09 16:47:49 -05:00
Daniel
24039c78b5
refactor: migrate AnthropicVertexHandler to AI SDK (#11345)
Replace @anthropic-ai/vertex-sdk with @ai-sdk/google-vertex/anthropic,
using streamText/generateText from the Vercel AI SDK for consistent
provider behavior.

Changes:
- Use createVertexAnthropic from @ai-sdk/google-vertex/anthropic
- Use streamText/generateText instead of direct Anthropic API calls
- Add AI SDK transform utilities for message/tool conversion
- Handle cache control via AI SDK providerOptions
- Handle thinking/reasoning via providerOptions.anthropic.thinking
- Add thought signature and redacted thinking block tracking
- Set isAiSdkProvider() to return true
- Remove unused deps: @anthropic-ai/vertex-sdk, google-auth-library
- Rewrite tests to mock AI SDK instead of @anthropic-ai/vertex-sdk
2026-02-09 16:11:42 -05:00
Danger Mouse
571be71005
Pr 11144 (#11315)
* Latest main branch snapshot from API

* feat: add dedicated Azure OpenAI provider using @ai-sdk/azure package

* feat: add Azure provider UI component and translations

* feat: add Azure provider translations for all locales

* chore: add missing Azure placeholder translations

* Delete .changeset/azure-ai-sdk-migration.md

* fix: add Azure provider validation for onboarding workflow

- Add azureApiKey to SECRET_STATE_KEYS for proper configuration detection
- Add Azure validation case in validateModelsAndKeysProvided
- Add validation translations for azureResourceName and azureDeploymentName across all 18 locales

This fixes the issue where the Finish button does nothing when setting up Azure provider in the onboarding workflow.

* feat(azure): add model metadata, model picker, rename to Azure AI Foundry

- Add static model metadata for 29 Azure models (from models.dev)
  with Roo-specific flags (reasoning, tools, verbosity) matching
  openAiNativeModels
- Add model picker dropdown to Azure provider settings for model
  capability detection (context window, max tokens, pricing)
- Rename provider label from 'Azure OpenAI' to 'Azure AI Foundry'
  across all 18 locales
- Make API key optional (supports Azure managed identity / Entra ID)
- Update default API version from 2024-08-01-preview to 2025-04-01-preview
- Fix maxOutputTokens validation (filter invalid values <= 0)
- Handler separates deployment name (API calls) from model ID
  (capability lookup) with azureDefaultModelInfo (gpt-4o) fallback
- Remove unhelpful 'Get Azure AI Foundry Access' button
- Prevent stale model IDs from other providers carrying over
- Suppress validation errors on fresh provider selection

* fix(azure): add missing isAiSdkProvider() override for reasoning block preservation

* Azure Fixes for Hannes

* Quick Fix for Respones API Only (for Hannes)

* fix: use explicit azureOpenAiDefaultApiVersion fallback when apiVersion is empty

Addresses review feedback: the UI placeholder shows '2025-04-01-preview' via
azureOpenAiDefaultApiVersion, so the handler should use the same constant as
fallback instead of silently deferring to the SDK's internal default.

* fix: remove stale Cerebras references (retired provider)

* fix: add missing retiredProviderMessage translations for all locales

* fix: do not map promptCacheMissTokens to cacheWriteTokens for Azure

Azure uses OpenAI-compatible caching which does not report cache write
tokens separately. promptCacheMissTokens represents tokens NOT found in
cache (processed from scratch), not tokens written to cache. This aligns
the Azure handler with the OpenAI native handler behavior.

---------

Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-02-09 14:11:12 -07:00
Daniel
b8ef352808
feat: migrate OpenAI Native provider to @ai-sdk/openai (#11330)
* feat: migrate OpenAI Native provider to @ai-sdk/openai

Replace the raw OpenAI SDK (openai) usage in OpenAiNativeHandler with
@ai-sdk/openai and AI SDK's streamText/generateText, following the same
pattern used by other migrated providers (Groq, xAI, Fireworks, etc.).

Key changes:
- Use createOpenAI from @ai-sdk/openai with provider.responses() for
  the Responses API
- Use streamText/generateText from ai for streaming and completions
- Pass OpenAI-specific features via providerOptions.openai (store,
  reasoningEffort, reasoningSummary, textVerbosity, serviceTier,
  promptCacheRetention, parallelToolCalls, include)
- Capture responseId, serviceTier, and encrypted reasoning content
  from providerMetadata after streaming
- Preserve getEncryptedContent() and getResponseId() for Task.ts
- Preserve service tier pricing adjustment in cost calculation
- Mark as isAiSdkProvider: true
- Eliminate ~1100 lines of manual SSE parsing, raw fetch fallback,
  and event handling code
- Rewrite all 3 test files to use AI SDK mocking pattern

* fix: remove non-existent cacheWriteTokens from providerMetadata

The OpenAI Responses API does not report cache write tokens separately.
Remove the reference to providerMetadata?.openai?.cacheWriteTokens which
does not exist in the @ai-sdk/openai provider metadata schema.

* fix: filter standalone encrypted reasoning items from messages

Task.ts buildCleanConversationHistory injects standalone reasoning items
with { type: 'reasoning', encrypted_content: '...' } into the messages
array. These have no 'role' property and would be silently dropped by
convertToAiSdkMessages. Filter them explicitly to prevent confusion.

Note: Encrypted reasoning content round-tripping for stateless continuity
is a known limitation of the AI SDK migration. The @ai-sdk/openai
provider does not support injecting raw Responses API reasoning items.
Plain-text reasoning round-tripping works correctly via isAiSdkProvider().

* fix: restore reasoning round-trip for OpenAI Responses API via AI SDK

- Strip plain-text reasoning blocks from assistant messages before
  convertToAiSdkMessages() to eliminate 'Non-OpenAI reasoning parts'
  warnings from @ai-sdk/openai Responses provider

- Re-inject encrypted reasoning items as AI SDK reasoning parts with
  providerOptions.openai.itemId and reasoningEncryptedContent, restoring
  reasoning continuity that was silently broken after the migration

- Restructure createMessage() into a 5-step pipeline:
  collect → filter → strip → convert → inject

- Add 21 new tests for both plain-text stripping and encrypted
  reasoning injection

---------

Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-02-09 13:27:58 -07:00
Daniel
7c58f29975
fix: resolve race condition in new_task delegation that loses parent task history (#11331)
* fix: resolve race condition in new_task delegation that loses parent task history

When delegateParentAndOpenChild creates a child task via createTask(), the
Task constructor fires startTask() as a fire-and-forget async call. The child
immediately begins its task loop and eventually calls saveClineMessages() →
updateTaskHistory(), which reads globalState, modifies it, and writes back.

Meanwhile, delegateParentAndOpenChild persists the parent's delegation
metadata (status: 'delegated', delegatedToId, awaitingChildId, childIds) via
a separate updateTaskHistory() call AFTER createTask() returns.

These two concurrent read-modify-write operations on globalState race: the
last writer wins, overwriting the other's changes. When the child's write
lands last, the parent's delegation fields are lost, making the parent task
unresumable when the child finishes.

Fix: create the child task with startTask: false, persist the parent's
delegation metadata first, then manually call child.start(). This ensures
the parent metadata is safely in globalState before the child begins writing.

* docs: clarify Task.start() only handles new tasks, not history resume
2026-02-09 13:13:04 -07:00
0xMink
62a0106ce0
fix(reliability): prevent webview postMessage crashes and make dispose idempotent (#11313)
* fix(reliability): prevent webview postMessage crashes and make dispose idempotent

Closes: #11311

1. postMessageToWebview() now catches rejections from
   webview.postMessage() so that messages sent after the webview is
   disposed do not surface as unhandled promise rejections.

2. dispose() is guarded by a _disposed flag so that repeated calls
   (e.g. during rapid extension deactivation) are no-ops.

3. CloudService mock in ClineProvider.spec.ts updated to include
   off() — a pre-existing gap exposed by the new dispose test.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add early _disposed check in postMessageToWebview

Skip the postMessage call entirely when the provider is already disposed,
avoiding unnecessary try/catch execution. Added test coverage for this path.

* chore: trigger CI

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-09 13:03:24 -05:00
Hannes Rudolph
115d6c5fce
fix: serialize taskHistory writes and fix delegation status overwrite race (#11335)
Add a promise-chain mutex (withTaskHistoryLock) to serialize all
read-modify-write operations on taskHistory, preventing concurrent
interleaving from silently dropping entries.

Reorder reopenParentFromDelegation to close the child instance
before marking it completed, so the abort path's stale 'active'
status write no longer overwrites the 'completed' state.

Covered by new tests: RPD-04/05/06, UTH-02/04, and a full mutex
concurrency suite.
2026-02-09 10:59:46 -07:00
Daniel
2b72a585dc
fix: prevent false unsaved changes prompt with OpenAI Compatible headers (#8230) (#11334)
fix: prevent false unsaved changes prompt with OpenAI Compatible headers

Mark automatic header syncs in ApiOptions and OpenAICompatible as
non-user actions (isUserAction: false) and enhance SettingsView change
detection to skip automatic syncs with semantically equal values.

Root cause: two components (ApiOptions and OpenAICompatible) manage
openAiHeaders state and automatically sync it back on mount/remount.
These syncs were treated as user changes, triggering a false dirty state.

Co-authored-by: Robert McIntyre <robertjmcintyre@users.noreply.github.com>
2026-02-09 12:40:36 -05:00
Daniel
1e0fc89fa1
refactor: migrate Anthropic provider to @ai-sdk/anthropic (#11287)
* refactor: migrate Anthropic provider to @ai-sdk/anthropic

Replace the raw @anthropic-ai/sdk implementation with @ai-sdk/anthropic
(Vercel AI SDK) for consistency with other providers (Bedrock, DeepSeek,
Mistral, etc.).

Changes:
- Replace Anthropic() client with createAnthropic() from @ai-sdk/anthropic
- Replace manual stream parsing with streamText() + processAiSdkStreamPart()
- Replace client.messages.create() with generateText() for completePrompt()
- Use convertToAiSdkMessages() and convertToolsForAiSdk() for format conversion
- Handle prompt caching via AI SDK providerOptions (cacheControl on messages)
- Handle extended thinking via providerOptions.anthropic.thinking
- Add getThoughtSignature() and getRedactedThinkingBlocks() for thinking
  signature round-tripping (matching Bedrock pattern, improves on original
  which had a TODO for this)
- Add isAiSdkProvider() returning true
- Update tests to mock @ai-sdk/anthropic and ai instead of raw SDK

* fix: address PR review - remove apiKey fallback and use system+systemProviderOptions pattern
2026-02-09 11:51:27 -05:00
Hannes Rudolph
ef2fec9a23
refactor: remove 9 low-usage providers and add retired-provider UX (#11297)
* refactor: remove 9 low-usage providers (Phase 0)

Remove Cerebras, Chutes, DeepInfra, Doubao, Featherless, Groq,
Hugging Face, IO Intelligence, and Unbound providers from the codebase.

Each provider removal includes: handler, tests, model definitions,
type schemas, UI settings components, fetchers, i18n references,
and all wiring in shared registration/config files.

- Delete 42 provider-specific files (handlers, tests, fetchers, UI components)
- Remove @ai-sdk/cerebras and @ai-sdk/groq npm dependencies
- Clean provider references from 68 shared files across src/, packages/types/,
  webview-ui/, and apps/cli/
- Remove ~490 dead i18n translation keys across 36 locale files
- Add docs/ai-sdk-migration-guide.md with updated migration status
- All TypeScript checks pass, 6505 tests pass with 0 failures

* feat: show retired-provider message for removed provider profiles

Preserve API profiles that reference removed providers instead of
silently stripping their apiProvider. When a user selects a profile
configured for a retired provider, the settings UI now shows an
empathetic message explaining the removal instead of the provider
configuration form.

- Add retiredProviderNames array and isRetiredProvider() helper to
  packages/types/src/provider-settings.ts
- Update ProviderSettingsManager sanitization to preserve retired
  providers (only strip truly unknown values)
- Update ContextProxy sanitization to preserve retired providers
- Render retired-provider message in ApiOptions.tsx when selected
  provider is in the retired list
- Add tests for sanitization, ContextProxy, and UI behavior

* feat: add retired-provider warning banner in chat view

* Revert "feat: add retired-provider warning banner in chat view"

This reverts commit dd593e1056.

* feat: show retired-provider message as inline chat response

* fix: show retired provider warning on home screen

Move WarningRow outside {task && ...} conditional so it renders
regardless of task state. Preserve user input on retired provider
intercept so text isn't lost when switching providers.

- Move showRetiredProviderWarning WarningRow to unconditional render
  area near ProfileViolationWarning
- Remove setInputValue/setSelectedImages clearing from retired
  provider early return in handleSendMessage
- Delete unused RetiredProviderWarning.tsx (dead code)

* fix: address PR review — passthrough retired-provider fields and i18n strings

- Use passthrough() in saveConfig() and load() so legacy provider-specific
  fields (e.g. groqApiKey, deepInfraModelId) are preserved instead of
  silently stripped by strict Zod parse()
- Move hardcoded English strings in ApiOptions.tsx and ChatView.tsx to
  i18n translation keys (settings:providers.retiredProviderMessage,
  chat:retiredProvider.{title,message,openSettings})
- Update tests to assert legacy provider-specific fields survive
  save and load round-trips

* i18n: add retired-provider translations for all 17 locales

Translate providers.retiredProviderMessage (settings) and
retiredProvider.{title,message,openSettings} (chat) into ca, de, es,
fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, tr, vi, zh-CN, zh-TW.

* test: update ApiOptions retired-provider test to expect i18n key
2026-02-09 09:40:59 -07:00
Hannes Rudolph
7afa43635f
feat: batch consecutive tool calls in chat UI with shared utility (#11245)
* feat: group consecutive list_files tool calls into single UI block

Consolidate consecutive listFilesTopLevel/listFilesRecursive ask messages
into a single 'Roo wants to view multiple directories' block, matching the
existing read_file batching pattern.

* chore: add missing translation keys for all locales

* refactor: consolidate duplicate listFiles batch-handling blocks in ChatRow

Merge the separate listFilesTopLevel and listFilesRecursive case blocks
into a single combined case with shared batch-detection logic, selecting
the icon and translation key based on the tool type. This removes the
duplicated isBatchDirRequest check and BatchListFilesPermission render.

* feat: batch consecutive file-edit tool calls into single UI block

Add edit-file batching in ChatView groupedMessages that consolidates
consecutive editedExistingFile, appliedDiff, newFileCreated,
insertContent, and searchAndReplace asks into a single BatchDiffApproval
block. Move batchDiffs detection in ChatRow above the switch statement
so it applies to any file-edit tool type.

* refactor: extract batchConsecutive utility, fix batch UI issues

- Extract generic batchConsecutive() utility from 3 identical while-loops
- Fix React key collisions in BatchListFilesPermission, BatchFilePermission, BatchDiffApproval
- Normalize language prop to "shellsession" (was "shell-session" for top-level)
- Remove unused _batchedMessages property from synthetic messages
- Remove dead didViewMultipleDirectories i18n key from all 18 locale files
- Add batch button text for listFilesTopLevel/listFilesRecursive
- Add batchConsecutive utility tests (6 cases)

* fix: audit improvements for batch tool-call UI

- Make batchConsecutive() generic instead of ClineMessage-specific
- Add batch-aware button text for edit-file batches ("Save All"/"Deny All")
- Add dedicated list-batch/edit-batch i18n keys (stop reusing read-batch)
- Add JSON.parse defense-in-depth in all three synthesizers
- Fix mixed list_files batch icon to default to FolderTree
- Add 6 missing test cases (all-match, immutability, spy, single-dir)

* chore: minor type cleanup (out-of-scope housekeeping)

- Trim unused recursive/isOutsideWorkspace from DirPermissionItem interface
- Remove 4 pre-existing `as any` casts in ChatView.tsx:
  - window cast → precise inline type
  - checkpoint bracket access → removed unnecessary casts
  - condensing message → `as ClineMessage`
  - debounce cancel → `.clear()` (correct API)
- Update BatchListFilesPermission test data to match trimmed interface

* i18n: add list-batch and edit-batch translations for all locales
2026-02-09 11:28:04 -05:00
Hannes Rudolph
5313cb503a
feat: add task header highlight for visual status indication (#11305)
* feat: add task header highlight setting for visual status indication

Add a 'Task Header Highlight' toggle under Settings > UI that colors the
task header based on its current state:
- Green (--vscode-charts-green) when task completes (completion_result)
- Yellow (--vscode-charts-yellow) when user attention is needed (follow-up
  questions, tool approvals, etc.)

The highlight is skipped for subtasks and partial/streaming messages,
matching the same defensive logic used by sound notifications.

CSS classes with !important and --vscode-foreground variable overrides
ensure all child text, icons, SVGs, and the context progress bar use
appropriate contrasting colors.

Includes tests (37 passing) and translations for all 18 locales.

* fix: address review feedback - accessibility contrast and deduplicated logic

- Replace theme-dependent --vscode-charts-green/yellow backgrounds with
  hardcoded colors (#15803d, #ca8a04) that guarantee WCAG AA 4.5:1 contrast
- Extract shared lastRelevantMessage useMemo to deduplicate findLastIndex
  filtering between isTaskComplete and highlightClass
2026-02-09 11:08:41 -05:00
0xMink
2789baba96
perf(refactor): consolidate getState calls in resolveWebviewView (#11320)
* perf(refactor): consolidate getState calls in resolveWebviewView

Replace three separate this.getState().then() calls with a single
await this.getState() and destructuring. This avoids running the
full getState() method (CloudService calls, ContextProxy reads, etc.)
three times during webview view resolution.

* fix: keep getState consolidation non-blocking to avoid delaying webview render

---------

Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-09 10:11:38 -05:00
Chris Estreich
99a2e3b1ed
chore(cli): prepare release v0.0.52 (#11324)
* chore(cli): prepare release v0.0.52

* Update CHANGELOG for build cleanup and Linux support

Removed unused dependency from build configuration and added Linux support.
2026-02-08 21:04:59 -08:00
Chris Estreich
4bc3d62d1f
Add linux-arm64 for the roo cli (#11314) 2026-02-08 20:20:37 -08:00
Hannes Rudolph
12cddc9697
fix: validate Gemini thinkingLevel against model capabilities and handle empty streams (#11303)
* fix: validate Gemini thinkingLevel against model capabilities and handle empty streams

getGeminiReasoning() now validates the selected effort against the model's
supportsReasoningEffort array before sending it as thinkingLevel. When a
stale settings value (e.g. 'medium' from a different model) is not in the
supported set, it falls back to the model's default reasoningEffort.

GeminiHandler.createMessage() now tracks whether any text content was
yielded during streaming and handles NoOutputGeneratedError gracefully
instead of surfacing the cryptic 'No output generated' error.

* fix: guard thinkingLevel fallback against 'none' effort and add i18n TODO

The array validation fallback in getGeminiReasoning() now only triggers
when the selected effort IS a valid Gemini thinking level but not in
the model's supported set. Values like 'none' (explicit no-reasoning
signal) are no longer overridden by the model default.

Also adds a TODO for moving the empty-stream message to i18n.

* fix: track tool_call_start in hasContent to avoid false empty-stream warning

Tool-only responses (no text) are valid content. Without this,
agentic tool-call responses would incorrectly trigger the empty
response warning message.
2026-02-07 22:25:36 -07:00
Hannes Rudolph
7db4bfef5a
feat(history): render nested subtasks as recursive tree (#11299)
* feat(history): render nested subtasks as recursive tree

* fix(lockfile): resolve missing ai-sdk provider entry

* fix: address review feedback — dedupe countAll, increase SubtaskRow max-h

- HistoryView: replace local countAll with imported countAllSubtasks from types.ts
- SubtaskRow: increase nested children max-h from 500px to 2000px to match TaskGroupItem
2026-02-07 21:39:45 -07:00
Hannes Rudolph
5d17f56db7
feat: add lock toggle to pin API config across all modes in workspace (#11295)
* feat: add lock toggle to pin API config across all modes in workspace

Add a lock/unlock toggle inside the API config selector popover (next to
the settings gear) that, when enabled, applies the selected API
configuration to all modes in the current workspace.

- Add lockApiConfigAcrossModes to ExtensionState and WebviewMessage types
- Store setting in workspaceState (per-workspace, not global)
- When locked, activateProviderProfile sets config for all modes
- Lock icon in ApiConfigSelector popover bottom bar next to gear
- Full i18n: English + 17 locale translations (all mention workspace scope)
- 9 new tests: 2 ClineProvider, 2 handler, 5 UI (77 total pass)

* refactor: replace write-fan-out with read-time override for lock API config

The original lock implementation used setModeConfig() fan-out to write the
locked config to ALL modes globally. Since the lock flag lives in workspace-
scoped workspaceState but modeApiConfigs are in global secrets, this caused
cross-workspace data destruction.

Replaced with read-time guards:
- handleModeSwitch: early return when lock is on (skip per-mode config load)
- createTaskWithHistoryItem: skip mode-based config restoration under lock
- activateProviderProfile: removed fan-out block
- lockApiConfigAcrossModes handler: simplified to flag + state post only
- Fixed pre-existing workspaceState mock gap in ClineProvider.spec.ts and
  ClineProvider.sticky-profile.spec.ts
2026-02-07 20:31:22 -07:00
Hannes Rudolph
6826e20da2
fix: prevent parent task state loss during orchestrator delegation (#11281) 2026-02-07 15:24:54 -07:00
Daniel
f179ba1b9e
refactor: migrate zai provider to AI SDK (#11263)
* refactor: migrate zai provider to AI SDK using zhipu-ai-provider

* Update src/api/providers/zai.ts

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* fix: remove unused zai-format.ts (knip)

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-02-07 10:27:11 -07:00
Hannes Rudolph
97c10387ee
chore: update AI SDK packages to latest versions (#11286) 2026-02-07 08:16:38 -07:00
Matt Rubens
7fc42d70ea
Add new code owners to CODEOWNERS file 2026-02-07 00:53:27 -05:00
roomote[bot]
4d87a004a5
fix: add stub-baseten-native esbuild plugin to nightly build config (#11285)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-06 23:11:08 -05:00
John Richmond
d7714e4e07
chore: bump version to v1.110.0 (#11278) 2026-02-06 17:52:48 -08:00
Daniel
43a3073545
refactor: migrate baseten provider to AI SDK (#11261)
* refactor: migrate baseten provider to AI SDK

* refactor(baseten): migrate to native @ai-sdk/baseten package

Replace OpenAICompatibleHandler with dedicated @ai-sdk/baseten package,
following the same pattern used by other native AI SDK providers (groq,
deepseek, etc.). This uses createBaseten() for provider initialization
and extends BaseProvider directly instead of the generic OpenAI-compatible
handler.
2026-02-06 20:02:17 -05:00
roomote[bot]
f279537892
feat(web): replace Roomote Control with Linear Integration in cloud features grid (#11280)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-06 16:55:50 -08:00
Chris Estreich
9b39d2242a
feat: add IPC query handlers for commands, modes, and models (#11279)
Add GetCommands, GetModes, and GetModels to the IPC protocol so external
clients can fetch slash commands, available modes, and Roo provider models
without going through the internal webview message channel.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:29:49 -08:00
Daniel
6d2459c7e8
feat: add disabledTools setting to globally disable native tools (#11277)
* feat: add disabledTools setting to globally disable native tools

Add a disabledTools field to GlobalSettings that allows disabling specific
native tools by name. This enables cloud agents to be configured with
restricted tool access.

Schema:
- Add disabledTools: z.array(toolNamesSchema).optional() to globalSettingsSchema
- Add disabledTools to organizationDefaultSettingsSchema.pick()
- Add disabledTools to ExtensionState Pick type

Prompt generation (tool filtering):
- Add disabledTools to BuildToolsOptions interface
- Pass disabledTools through filterSettings to filterNativeToolsForMode()
- Remove disabled tools from allowedToolNames set in filterNativeToolsForMode()

Execution-time validation (safety net):
- Extract disabledTools from state in presentAssistantMessage
- Convert disabledTools to toolRequirements format for validateToolUse()

Wiring:
- Add disabledTools to ClineProvider getState() and getStateToPostToWebview()
- Pass disabledTools to all buildNativeToolsArrayWithRestrictions() call sites

EXT-778

* fix: check toolRequirements before ALWAYS_AVAILABLE_TOOLS

Moves the toolRequirements check before the ALWAYS_AVAILABLE_TOOLS
early-return in isToolAllowedForMode(). This ensures disabledTools
can block always-available tools (switch_mode, new_task, etc.) at
execution time, making the validation layer consistent with the
filtering layer.
2026-02-06 15:51:18 -08:00
Hannes Rudolph
ca7e3b6161
feat: migrate Bedrock provider to AI SDK (#11243)
* feat: migrate Bedrock provider to AI SDK

Replace the raw AWS SDK (@aws-sdk/client-bedrock-runtime) Bedrock handler
with the Vercel AI SDK (@ai-sdk/amazon-bedrock). Reduces provider from
1,633 lines to 575 lines (65% reduction).

Key changes:
- Use streamText()/generateText() instead of ConverseStreamCommand/ConverseCommand
- Use createAmazonBedrock() with native auth (access key, secret, session,
  profile via credentialProvider, API key, VPC endpoint as baseURL)
- Reasoning config via providerOptions.bedrock.reasoningConfig
- Anthropic beta headers via providerOptions.bedrock.anthropicBeta
- Thinking signature captured from providerMetadata.bedrock.signature
  on reasoning-delta stream events
- Thinking signature round-tripped via providerOptions.bedrock.signature
  on reasoning parts in convertToAiSdkMessages()
- Redacted thinking captured from providerMetadata.bedrock.redactedData
- isAiSdkProvider() returns true for reasoning block preservation
- Keep: getModel, ARN parsing, cross-region inference, cost calculation,
  service tier pricing, 1M context beta

Tests: 83 tests skipped (mock old AWS SDK internals, need rewrite for
AI SDK mocking). 106 tests pass. 0 tests fail.

* fix: address review feedback for Bedrock AI SDK migration

- Wire usePromptCache into AI SDK via providerOptions.bedrock.cachePoint
  on system prompt and last two user messages
- Remove debug logger.info that fires on every stream event with
  providerMetadata
- Tighten isThrottlingError to match 'rate limit' instead of broad
  'rate'/'limit' substrings that false-positive on context length errors
- Use shared handleAiSdkError utility for consistent error handling
  with status code preservation for retry logic

* fix: bedrock AI SDK migration - fix usage metrics, rewrite tests, remove dead code

- Fix reasoningTokens always 0 (usage.details?.reasoningTokens → usage.reasoningTokens)
- Fix cacheReadInputTokens always 0 (read from usage.inputTokenDetails instead of providerMetadata)
- Fix invokedModelId not extracted for prompt router cost calculation
- Rewrite all 6 skipped bedrock test suites for AI SDK mocking pattern (140 tests pass)
- Remove dead code: bedrock-converse-format.ts, cache-strategy/ (6 files, ~2700 lines)

* chore: remove dead @anthropic-ai/bedrock-sdk dep and stale AWS SDK mocks

* chore: update pnpm-lock.yaml after removing @anthropic-ai/bedrock-sdk

* fix: compute cache point indices from original Anthropic messages before AI SDK conversion

The previous approach naively targeted the last 2 user messages in the
post-conversion AI SDK array, but convertToAiSdkMessages() splits user
messages containing tool_results into separate tool + user messages,
causing cache points to land on the wrong messages (tiny text fragments
instead of the intended meaty user turns).

Now we identify the last 2 user messages in the original Anthropic
message array (matching the Anthropic provider's caching strategy) and
build a parallel-walk mapping to apply cachePoint to the correct
corresponding AI SDK message.

* perf: optimize prompt caching with 3-point message strategy + anchor for 20-block window

Previous approach only cached the last 2 user messages (using 2 of 4
available cache checkpoints for messages). This left significant cache
savings on the table for longer conversations.

New strategy uses up to 3 message cache points (+ 1 system = 4 total):
- Last user message: write to cache for next request
- Second-to-last user message: read from cache for current request
- Anchor message at ~1/3 position: ensures the 20-block lookback window
  from the second-to-last breakpoint hits a stable cache entry, covering
  all assistant/tool messages in the middle of the conversation

Also extracted the parallel-walk mapping logic into a reusable
applyCachePointsToAiSdkMessages() helper method.

Industry benchmarks show 70-95% token cache rates are achievable;
this change should significantly improve our 39% baseline for longer
multi-turn conversations.

* chore: remove stale bedrock-sdk external, fix arnInfo property name, remove unused exports

---------

Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-06 18:39:17 -05:00
roomote[bot]
0e5407aa76
fix: make defaultTemperature required in getModelParams to prevent silent temperature overrides (#11218)
* fix: DeepSeek temperature defaulting to 0 instead of 0.3

Pass defaultTemperature: DEEP_SEEK_DEFAULT_TEMPERATURE to getModelParams() in
DeepSeekHandler.getModel() to ensure the correct default temperature (0.3)
is used when no user configuration is provided.

Closes #11194

* refactor: make defaultTemperature required in getModelParams

Make the defaultTemperature parameter required in getModelParams() instead
of defaulting to 0. This prevents providers with their own non-zero default
temperature (like DeepSeek's 0.3) from being silently overridden by the
implicit 0 default.

Every provider now explicitly declares its temperature default, making the
temperature resolution chain clear:
  user setting → model default → provider default

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-06 18:38:31 -05:00
Daniel
00b1a7ed4d
refactor: migrate chutes provider to AI SDK (#11267) 2026-02-06 18:37:36 -05:00
Daniel
36a986db1d
refactor: migrate featherless provider to AI SDK (#11265)
* refactor: migrate featherless provider to AI SDK

* fix: merge consecutive same-role messages in featherless R1 path

convertToAiSdkMessages does not merge consecutive same-role messages
like convertToR1Format did. When the system prompt is prepended as a
user message and the conversation already starts with a user message,
DeepSeek R1 can reject the request.

Add mergeConsecutiveSameRoleMessages helper that collapses adjacent
Anthropic messages sharing the same role before AI SDK conversion.
Includes a test that verifies no two successive messages share a role.
2026-02-06 18:36:50 -05:00
Daniel
a3a9048741
refactor: migrate io-intelligence provider to AI SDK (#11262)
Migrates the IO Intelligence provider from legacy BaseOpenAiCompatibleProvider
(direct openai SDK) to OpenAICompatibleHandler (Vercel AI SDK).

- Extends OpenAICompatibleHandler instead of BaseOpenAiCompatibleProvider
- Uses getModelParams for model parameter resolution
- Updates tests to mock ai module's streamText/generateText
2026-02-06 18:35:41 -05:00
Chris Estreich
a9e9c0207e
chore(cli): prepare release v0.0.51 (#11274) 2026-02-06 13:50:50 -08:00
roomote[bot]
06b25185e2
feat(cli): update default model from Opus 4.5 to Opus 4.6 (#11273)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-06 13:27:35 -08:00
Daniel
8ef61bd32b
fix: remove noisy console.warn logs from NativeToolCallParser (#11264)
Remove two console.warn messages that fire excessively when loading tasks
from history:
- 'Attempting to finalize unknown tool call' in finalizeStreamingToolCall()
- 'Received chunk for unknown tool call' in processStreamingChunk()

The defensive null-return behavior is preserved; only the log output is removed.
2026-02-06 11:18:46 -08:00
github-actions[bot]
78e64115e8
Changeset version bump (#11258)
* changeset version bump

* Update CHANGELOG for version 3.47.3

Updated version number and removed redundant patch changes for 3.47.3.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-02-06 11:39:26 -05:00
Matt Rubens
1cdb5f4ce3
Release v3.47.3 (#11257)
chore: add changeset for v3.47.3
2026-02-06 11:34:57 -05:00
Matt Rubens
dd6e32eb18
Revert "refactor(task): append environment details into existing blocks" (#11256)
Revert "refactor(task): append environment details into existing blocks (#11198)"

This reverts commit b0dc6ae918.
2026-02-06 11:22:38 -05:00
Matt Rubens
5fd156de7b
Revert "chore: remove unused stripAppendedEnvironmentDetails and helpers" (#11255)
Revert "chore: remove unused stripAppendedEnvironmentDetails and helpers (#11…"

This reverts commit 2d5e633781.
2026-02-06 11:22:06 -05:00
roomote[bot]
2053de7b40
feat: remove Enable URL context and Enable Grounding with Google search checkboxes (#11253)
Remove the "Enable URL context" and "Enable Grounding with Google search"
checkboxes from Gemini and Vertex provider settings, along with:

- enableUrlContext and enableGrounding fields from provider settings schemas
- URL context and Google Search tool injection in completePrompt methods
- Associated translation keys from all 18 locale files
- Related test cases updated to reflect the removal
- simplifySettings prop removed from Gemini and Vertex components
  (it was only used for the removed checkboxes in those components)

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-06 09:43:54 -05:00
github-actions[bot]
5b0897beb9
Changeset version bump (#11240)
* changeset version bump

* Update CHANGELOG for version 3.47.2

Updated version number and added patch changes for 3.47.2.

* Update CHANGELOG for version 3.47.1

Updated changelog for version 3.47.1 with fixes and cleanup.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-02-05 18:01:39 -08:00
Matt Rubens
5f9c243d64
Release: v1.109.0 (#11241)
chore: bump version to v1.109.0
2026-02-05 18:00:16 -08:00
Matt Rubens
dfb4e39306
Release v3.47.2 (#11239)
chore: add changeset for v3.47.2
2026-02-05 17:56:28 -08:00
Hannes Rudolph
87f6d908c6
fix: capture and round-trip thinking signature for Bedrock Claude (#11238)
* fix: capture and round-trip thinking signature for Bedrock Claude models

Bedrock handler streams reasoning text from Claude's extended thinking but
never captures the cryptographic signature. This causes 400 errors on
multi-turn conversations with tool use: 'Expected thinking or
redacted_thinking, but found tool_use'.

Changes:
- bedrock.ts: Capture reasoningContent.signature from Converse API stream
  deltas, implement getThoughtSignature() so Task.ts stores it as a proper
  thinking content block
- bedrock-converse-format.ts: Convert thinking blocks to Bedrock's
  reasoningContent format with signature, skip reasoning/redacted_thinking/
  thoughtSignature blocks that aren't valid for the API

* fix: add redacted_thinking round-trip, fix interface types, add tests

Address PR review feedback:
- Update ContentBlockDeltaEvent interface to include signature and
  redactedContent fields (removes type assertions)
- Add 6 tests for thinking/reasoning block conversions in
  bedrock-converse-format.ts

Also add redacted_thinking round-trip support:
- bedrock.ts: Capture redactedContent from stream deltas, base64 encode,
  expose via getRedactedThinkingBlocks()
- Task.ts: Insert redacted_thinking blocks after thinking block in
  assistant messages
- bedrock-converse-format.ts: Convert redacted_thinking blocks back to
  reasoningContent.redactedContent (base64 → Uint8Array)
2026-02-05 17:53:00 -08:00
Hannes Rudolph
6a32b2e6fe
fix: restore Gemini thought signature round-tripping after AI SDK migration (#11237)
PR #11180 migrated Gemini/Vertex providers to the AI SDK and deleted
gemini-format.ts which contained the working thought signature round-trip
logic (originally added in PR #10590). This broke all Gemini 3 tool use
with a 400 error: 'Function call is missing a thought_signature'.

Changes:
- Gemini/Vertex handlers: capture thoughtSignature from providerMetadata
  on tool-call stream events, expose via getThoughtSignature()
- convertToAiSdkMessages(): extract thoughtSignature content blocks from
  history, attach as providerOptions on first tool-call part (per Gemini 3
  parallel call rules)
- Add 3 tests verifying thought signature round-trip behavior
2026-02-05 18:17:13 -07:00
roomote[bot]
a266834ee2
feat: add support for .agents/skills directory (#11181)
* feat: add support for .agents/skills directory

This change adds support for discovering skills from the .agents/skills
directory, following the Agent Skills convention for sharing skills
across different AI coding tools.

Priority order (later entries override earlier ones):
1. Global ~/.agents/skills (shared across AI coding tools, lowest priority)
2. Project .agents/skills
3. Global ~/.roo/skills (Roo-specific)
4. Project .roo/skills (highest priority)

Changes:
- Add getGlobalAgentsDirectory() and getProjectAgentsDirectoryForCwd()
  functions to roo-config
- Update SkillsManager.getSkillsDirectories() to include .agents/skills
- Update SkillsManager.setupFileWatchers() to watch .agents/skills
- Add tests for new functionality

* fix: clarify skill priority comment to match actual behavior

* fix: clarify skill priority comment to explain Map.set replacement mechanism

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-05 16:40:06 -08:00
github-actions[bot]
590fef711c
Changeset version bump (#11236)
* changeset version bump

* Update CHANGELOG for version 3.47.1

Updated changelog for version 3.47.1 with patch changes.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: John Richmond <5629+jr@users.noreply.github.com>
2026-02-05 16:17:47 -08:00
John Richmond
08f3b5ac17
Release v3.47.1 (#11234)
chore: add changeset for v3.47.1
2026-02-05 15:47:26 -08:00
Hannes Rudolph
23d34154d0
fix: guard against empty-string baseURL in provider constructors (#11233)
When the 'custom base URL' checkbox is unchecked in the UI, the setting
is set to '' (empty string). Providers that passed this directly to their
SDK constructors caused 'Failed to parse URL' errors because the SDK
treated '' as a valid but broken base URL override.

- gemini.ts: use || undefined (was passing raw option)
- openai-native.ts: use || undefined (was passing raw option)
- openai.ts: change ?? to || for fallback default
- deepseek.ts: change ?? to || for fallback default
- moonshot.ts: change ?? to || for fallback default

Adds test coverage for Gemini and OpenAI Native constructors verifying
empty-string baseURL is coerced to undefined.
2026-02-05 15:30:59 -08:00
roomote[bot]
8c6d1ef15d
fix: correct Bedrock model ID for Claude Opus 4.6 (#11232)
Remove the :0 suffix from the Claude Opus 4.6 model ID to match
the correct AWS Bedrock model identifier.

The model ID was "anthropic.claude-opus-4-6-v1:0" but should be
"anthropic.claude-opus-4-6-v1" per AWS Bedrock documentation.

Fixes #11231

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-05 15:08:31 -08:00
Hannes Rudolph
2d5e633781
chore: remove unused stripAppendedEnvironmentDetails and helpers (#11226)
Remove three functions from appendEnvironmentDetails.ts that were
defined and tested but never imported or called in production code:

- stripAppendedEnvironmentDetails (exported, 0 call sites)
- stripEnvDetailsFromText (private helper)
- stripEnvDetailsFromToolResult (private helper)

Also removes the corresponding describe block (7 tests) from the
spec file. The remaining 19 tests pass.
2026-02-05 13:18:11 -08:00
Matt Rubens
5c5686d98b
Update CHANGELOG for Claude Opus 4.6 support
Updated the changelog to reflect additional contributors for Claude Opus 4.6 support.
2026-02-05 12:55:59 -08:00
github-actions[bot]
c23e2717a4
Changeset version bump (#11229)
* changeset version bump

* Update CHANGELOG for version 3.47.0 release

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-02-05 12:54:40 -08:00
Matt Rubens
846d66880a
Release v3.47.0 (#11227)
chore: add changeset for v3.47.0
2026-02-05 12:50:52 -08:00
Hannes Rudolph
b0dc6ae918
refactor(task): append environment details into existing blocks (#11198)
* refactor(task): append environment details into existing blocks

Add appendEnvironmentDetails() helper that merges environment details
into the last text block or tool_result instead of adding a standalone
trailing text block.

This avoids message shapes that can break interleaved-thinking models
like DeepSeek reasoner, which expect specific message structures.

Changes:
- Add appendEnvironmentDetails() and removeEnvironmentDetailsBlocks() helpers
- Update Task.resumeAfterDelegation() to use the helper
- Update Task.recursivelyMakeClineRequests() to use the helper
- Add comprehensive unit tests (26 test cases)

* fix: use named import for Anthropic SDK to match codebase convention
2026-02-05 12:33:00 -08:00
roomote[bot]
d5b7fdcfa7
feat: add gpt-5.3-codex model to OpenAI Codex provider (#11225)
feat: add gpt-5.3-codex model and make it default for OpenAI Codex provider

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-05 12:28:45 -08:00
roomote[bot]
f73b103b87
chore: remove dead toolFormat code from getEnvironmentDetails (#11207)
Remove the toolFormat constant and <tool_format> line from environment
details output. Native tool calling is now the only supported protocol,
making this code unnecessary.

Fixes #11206

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-05 12:28:34 -08:00
Hannes Rudolph
47bba1c2f7
feat: add Claude Opus 4.6 support across all providers (#11224)
* feat: add Claude Opus 4.6 support across all providers

Add Claude Opus 4.6 (claude-opus-4-6) model definitions and 1M context
support across Anthropic, Bedrock, Vertex AI, OpenRouter, and Vercel AI
Gateway providers.

- Anthropic: 128K max output, /5 pricing, 1M context tiers
- Bedrock: anthropic.claude-opus-4-6-v1:0 with 1M context + global inference
- Vertex: claude-opus-4-6 with 1M context tiers
- OpenRouter: prompt caching + reasoning budget sets
- Vercel AI Gateway: Opus 4.5 and 4.6 added to capability sets
- UI: 1M context checkbox for Opus 4.6 on all providers
- i18n: Updated 1M context descriptions across 18 locales

Also adds Opus 4.5 to Vercel AI Gateway (previously missing) and
OpenRouter maxTokens overrides for Opus 4.5/4.6.

Closes #11223

* fix: apply tier pricing when 1M context is enabled on Bedrock

When awsBedrock1MContext is enabled for tiered models like Opus 4.6,
also apply the 1M tier pricing (inputPrice, outputPrice, cache prices)
instead of only updating contextWindow. This ensures cost calculations
and UI display use the correct >200K rates.
2026-02-05 13:18:40 -07:00
Hannes Rudolph
1b75d59a68
fix(ai-sdk): preserve reasoning parts in message conversion (#11217)
* fix(ai-sdk): preserve reasoning parts in message conversion

* fix(ai-sdk): convert message-level reasoning_content to reasoning part

* fix(task): remove invalid openai-compatible from reasoning allowlist

* feat: add isAiSdkProvider() method for dynamic AI SDK provider detection

- Add isAiSdkProvider() method to ApiHandler interface
- Default implementation in BaseProvider returns false
- Override to return true in 11 AI SDK providers:
  deepseek, fireworks, mistral, groq, xai, cerebras,
  sambanova, huggingface, gemini, vertex, openai-compatible
- Update Task.ts to use dynamic detection instead of hardcoded Set
- Add method to FakeAIHandler and update test mocks

* fix: handle reasoning parts in flattenAiSdkMessagesToStringContent

- Strip reasoning parts when flattening messages for string-only models
- Allow flattening when message contains only text and reasoning parts
- Add tests for reasoning part handling in string-only model contexts

This addresses the review feedback about ensuring flattenAiSdkMessagesToStringContent
works correctly when reasoning parts are present (e.g., SambaNova DeepSeek).

---------

Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-05 10:48:21 -07:00
Matt Rubens
934f34ea87
Revert "fix(ai-sdk): preserve reasoning parts in message conversion" (#11216)
Revert "fix(ai-sdk): preserve reasoning parts in message conversion (#11196)"

This reverts commit 227b9796d3.
2026-02-05 07:40:36 -08:00
Hannes Rudolph
227b9796d3
fix(ai-sdk): preserve reasoning parts in message conversion (#11196)
* fix(ai-sdk): preserve reasoning parts in message conversion

* fix(ai-sdk): convert message-level reasoning_content to reasoning part

* fix(task): remove invalid openai-compatible from reasoning allowlist
2026-02-04 22:00:11 -08:00
Chris Estreich
aa49871a5d
fix(cli): resolve race condition causing provider switch during mode changes (#11205)
When using slash commands with `mode:` frontmatter (e.g., `/cli-release`
with `mode: code`), the CLI would fail with "Could not resolve
authentication method" from the Anthropic SDK, even when using a
non-Anthropic provider like `--provider roo`.

Root cause: In `markWebviewReady()`, the `webviewDidLaunch` message was
sent before `updateSettings`, creating a race condition. The
`webviewDidLaunch` handler's "first-time init" sync would read
`getState()` before CLI-provided settings were applied to the context
proxy. Since `getState()` defaults `apiProvider` to "anthropic" when
unset, this default was saved to the provider profile. When a slash
command triggered `handleModeSwitch()`, it found this corrupted profile
with `apiProvider: "anthropic"` (but no API key) and activated it,
overwriting the CLI's working roo provider configuration.

Fix:
1. Reorder `markWebviewReady()` to send `updateSettings` before
   `webviewDidLaunch`, ensuring the context proxy has CLI-provided
   values when the initialization handler runs.
2. Guard the first-time init sync with `checkExistKey(apiConfiguration)`
   to prevent saving a profile with only the default "anthropic"
   fallback and no actual API keys configured.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 18:26:41 -08:00
Chris Estreich
6214f4c162
Roo Code CLI v0.0.50 (#11204)
* Roo Code CLI v0.0.50

* docs(cli): add --exit-on-error to changelog

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-04 18:14:15 -08:00
Hannes Rudolph
dcba685097
refactor(docs-extractor): simplify mode to focus on raw fact extraction (#11129) 2026-02-04 17:14:31 -08:00
Daniel
afe51e0fe8
feat: migrate Gemini and Vertex providers to AI SDK (#11180)
* feat: migrate Gemini and Vertex providers to AI SDK

- Migrate GeminiHandler from @google/genai to @ai-sdk/google
- Create standalone VertexHandler using @ai-sdk/google-vertex
- Use shared AI SDK utilities (streamText, generateText, convertToAiSdkMessages)
- Support thinkingConfig via providerOptions.google.thinkingConfig
- Support Google Search and URL Context grounding tools
- Preserve cost calculation with tiered pricing
- Remove gemini-format.ts (AI SDK handles message conversion)

EXT-643

* fix: remove unused import and implement allowedFunctionNames tool filtering

- Remove unused handleAiSdkError import from gemini.ts
- Implement tool filtering based on allowedFunctionNames in both
  GeminiHandler and VertexHandler createMessage methods
- Filter tools before converting to AI SDK format to restrict
  model access to only allowed functions
2026-02-04 17:31:48 -07:00
Chris Estreich
6e56619417
feat(cli): improve dev experience and roo provider API key support (#11203)
- Allow --api-key and ROO_API_KEY env var for the roo provider instead of
  requiring cloud auth token
- Switch dev/start scripts to use tsx for running directly from source
  without building first
- Fix path resolution (version.ts, extension.ts, extension-host.ts) to
  work from both source and bundled locations
- Disable debug log file (~/.roo/cli-debug.log) unless --debug is passed
- Update README with complete env var table and dev workflow docs

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 16:17:29 -08:00
roomote[bot]
1da2b1c457
feat: add support for AGENTS.local.md personal override files (#11183)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-02-04 12:53:13 -08:00
Daniel
7f6272afb9
feat: add Kimi K2.5 model to Fireworks provider (#11177) 2026-02-03 14:15:31 -05:00
Bruno Bergher
54ea34e2c1
ux: improve Skills and Slash Commands settings UI with multi-mode support (#11157)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-03 12:11:58 -05:00
roomote[bot]
460cff4c3b
feat: migrate HuggingFace provider to AI SDK (#11156)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-03 11:59:26 -05:00
github-actions[bot]
658034323b
Changeset version bump (#11176)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-02-03 11:57:43 -05:00
Matt Rubens
957600ab8c
chore: add changeset for v3.46.2 (#11175) 2026-02-03 11:46:34 -05:00
Chris Estreich
4647d0f3c5
fix(cli): correct example in install script (#11170)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:04:41 -08:00
Chris Estreich
1c7ccb7b3d
Drop MacOS-13 cli support (#11169) 2026-02-02 22:33:56 -08:00
Chris Estreich
304b1c213c
fix: replace heredocs with echo statements in cli-release workflow (#11168)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 22:02:57 -08:00
Chris Estreich
4592133624
Add cli support for linux (#11167) 2026-02-02 21:00:52 -08:00
roomote[bot]
e90e6178e3
feat: migrate xAI provider to use dedicated @ai-sdk/xai package (#11158)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-02 23:56:07 -05:00
roomote[bot]
67fb150727
feat: use custom Base URL for OpenRouter model list fetch (#11154)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-02 23:03:47 -05:00
roomote[bot]
c5874fc764
feat: migrate SambaNova provider to AI SDK (#11153)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-02-02 23:02:32 -05:00
Daniel
b4b8cef859
fix: transform tool blocks to text before condensing (EXT-624) (#10975) 2026-02-02 22:31:09 -05:00
roomote[bot]
1e790b0d39
fix(code-index): remove deprecated text-embedding-004 and migrate to gemini-embedding-001 (#11038)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-02-02 22:30:07 -05:00
Chris Estreich
cfb6041648
chore: bump version to v1.107.0 (#11164) 2026-02-02 11:16:27 -08:00
Chris Estreich
e5fa5e8e46
IPC fixes for task cancellation and queued messages (#11162) 2026-02-02 11:13:56 -08:00
Daniel
b020f6be43
feat(api): migrate Mistral provider to AI SDK (#11089)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-02-02 10:45:51 -05:00
Matt Rubens
ede1d29299
fix: queue messages during command execution instead of losing them (#11140) 2026-01-31 12:47:28 -05:00
roomote[bot]
8cf82cd3a9
chore: remove Feature Request from issue template options (#11141)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-31 11:30:54 -05:00
roomote[bot]
e46fae7ad7
fix: add image content support to MCP tool responses (#10874)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-31 07:22:59 -05:00
github-actions[bot]
f97a5c2212
Changeset version bump (#11136)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-31 00:37:38 -05:00
Matt Rubens
db0bcbec89
chore: add changeset for v3.46.1 (#11135) 2026-01-31 00:33:09 -05:00
SannidhyaSah
16fbabf2a4
feat: add mode dropdown to change skill mode dynamically (#10513) (#11102)
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
2026-01-31 00:22:49 -05:00
Daniel
3400499917
fix: sanitize tool_use_id in tool_result blocks to match API history (#11131)
Tool IDs from providers like Gemini/OpenRouter contain special characters
(e.g., 'functions.read_file:0') that are sanitized when saving tool_use
blocks to API history. However, tool_result blocks were using the original
unsanitized IDs, causing ToolResultIdMismatchError.

This fix ensures tool_result blocks use sanitizeToolUseId() to match the
sanitized tool_use IDs in conversation history.

Fixes EXT-711
2026-01-30 23:15:25 -05:00
roomote[bot]
fa93109b76
feat: allow import settings in initial welcome screen (#10994)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-30 20:55:13 -05:00
Hannes Rudolph
20d1f1f282
chore: treat extension .env as optional (#11116) 2026-01-30 16:15:50 -07:00
github-actions[bot]
946ae80561
Changeset version bump (#11122)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-30 15:26:38 -05:00
Matt Rubens
5945d02800
Release v3.46.0 (#11121) 2026-01-30 15:17:58 -05:00
Daniel
b5ae557834
feat(api): migrate Fireworks provider to AI SDK (#11118) 2026-01-30 14:52:49 -05:00
roomote[bot]
0cd257af89
feat(web): Replace bespoke navigation menu with shadcn navigation menu (#11117)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-30 09:38:46 -08:00
Matt Rubens
d8f65b655d
feat: add pnpm serve command for code-server development (#10964)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-30 10:02:43 -05:00
Daniel
e771a4936b
feat: migrate Groq provider to @ai-sdk/groq (#11088) 2026-01-30 09:45:21 -05:00
Chris Estreich
fd46e31134
Update next.js (#11108) 2026-01-30 02:08:45 -08:00
Hannes Rudolph
cc86049f10
refactor(read_file): Codex-inspired read_file refactor EXT-617 (#10981) 2026-01-29 15:16:32 -07:00
Daniel
0f43cc9814
feat: migrate Cerebras provider to AI SDK (#11086) 2026-01-29 17:07:59 -05:00
Daniel
4b1d78fe0a
feat: migrate DeepSeek to @ai-sdk/deepseek + fix AI SDK tool streaming (#11079) 2026-01-29 15:56:51 -05:00
Hannes Rudolph
f848795775
refactor: replace fetch_instructions with skill tool and built-in skills (#11084)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-29 12:47:36 -07:00
Hannes Rudolph
0c53f1937a
Revert "refactor: replace fetch_instructions with skill tool and built-in skills" (#11083) 2026-01-29 11:46:58 -07:00
Hannes Rudolph
67e568f6bb
refactor: replace fetch_instructions with skill tool and built-in skills (#10913) 2026-01-29 07:48:08 -07:00
Matt Rubens
40b2bdc4d0
Revert "feat(vscode-lm): add image support for VS Code LM API provider" (#11068) 2026-01-29 01:41:20 -05:00
roomote[bot]
49aac7ea00
feat(vscode-lm): add image support for VS Code LM API provider (#11065)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-29 01:34:09 -05:00
Alik Aslanyan
31bed9cebe
Add React Compiler integration to webview-ui (#9565) 2026-01-29 01:32:27 -05:00
Daniel
8d38e60187
feat: Add OpenAI-compatible base provider and migrate Moonshot to AI SDK (#11063) 2026-01-29 01:29:33 -05:00
Daniel
ed35b09aad
Enable parallel tool calls by default (#11031) 2026-01-29 01:29:15 -05:00
SannidhyaSah
010aba24b7
feat: add skills management UI to settings panel (#10513) (#10844)
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-29 01:25:36 -05:00
roomote[bot]
c983e26280
feat(marketing): add Linear integration page (#11028)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Michael Preuss <michael@roocode.com>
2026-01-28 16:06:08 -08:00
Hannes Rudolph
d7fa963b13
docs: clarify read_command_output search param should be omitted when not filtering (#11056) 2026-01-28 13:30:01 -07:00
roomote[bot]
8640fd1472
fix: calculate header percentage based on available input space (#11054)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-28 15:29:34 -05:00
Daniel
fe722dad23
feat: add AI SDK dependencies and message conversion utilities (#11047) 2026-01-28 14:05:53 -05:00
Daniel
f5004ac40a
fix: prevent time-travel bug in parallel tool calling (#11046) 2026-01-28 13:25:02 -05:00
Hannes Rudolph
e7965d9b45
feat: lossless terminal output with on-demand retrieval (#10944) 2026-01-27 22:12:19 -07:00
roomote[bot]
a44842f16f
fix: include reserved output tokens in task header percentage calculation (#11034)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-27 23:37:48 -05:00
github-actions[bot]
c6d0306550
Changeset version bump (#11037)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-27 23:05:16 -05:00
Matt Rubens
7632807021
Release v3.45.0 (#11036) 2026-01-27 22:59:23 -05:00
Hannes Rudolph
d748de6fae
feat(condense v2.1): add smart code folding (#10942)
* feat(condense): add smart code folding with tree-sitter signatures

At context condensation time, use tree-sitter to generate folded code
signatures (function definitions, class declarations) for files read
during the conversation. Each file is included as its own <system-reminder>
block in the condensed summary, preserving structural awareness without
consuming excessive tokens.

- Add getFilesReadByRoo() method to FileContextTracker
- Create generateFoldedFileContext() using tree-sitter parsing
- Update summarizeConversation() to accept array of file sections
- Each file gets its own content block in the summary message
- Add comprehensive test coverage (12 tests)

* fix: skip tree-sitter error strings in folded file context

- Add isTreeSitterErrorString helper to detect error messages
- Skip files that return error strings instead of embedding them
- Add test for error string handling

* refactor: move generateFoldedFileContext() inside summarizeConversation()

- Update summarizeConversation() to accept filesReadByRoo, cwd, rooIgnoreController instead of pre-generated sections
- Move folded file context generation inside summarizeConversation() (lines 319-339)
- Update ContextManagementOptions type and manageContext() to pass new parameters
- Remove generateFoldedFileContext from Task.ts imports - folding now handled internally
- Update all tests to use new parameter signature
- Reduces Task.ts complexity by moving folding logic to summarization module

* fix: prioritize most recently read files in folded context

Files are now sorted by roo_read_date descending before folded context
generation, so if the character budget runs out, the most relevant
(recently read) files are included and older files are skipped.

* refactor: improve code quality in condense module

- Convert summarizeConversation to use options object instead of 11 positional params
- Extract duplicated getFilesReadByRoo error handling into helper method
- Remove unnecessary re-export of generateFoldedFileContext
- Update all test files to use new options object pattern

* fix: address roomote feedback - batch error logging and early budget exit

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-01-27 18:47:24 -05:00
github-actions[bot]
7607c684e9
Changeset version bump (#11027)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-27 15:52:37 -05:00
Matt Rubens
e9043723d3
Release v3.44.2 (#11025) 2026-01-27 15:43:20 -05:00
Daniel
17d3456e96
fix: remove duplicate tool_call emission from Responses API providers (#11008) 2026-01-27 13:33:15 -05:00
Daniel
b9cf163b87
fix: use relative paths in isPathInIgnoredDirectory to fix worktree indexing (#11009) 2026-01-27 12:43:47 -05:00
roomote[bot]
d6d00dedec
Fix local model validation error for Ollama models (#10893)
fix: prevent false validation error for local Ollama models

The validation logic was checking against an empty router models object
that was initialized but never populated for Ollama. This caused false
validation errors even when models existed locally.

Now only validates against router models if they actually contain data,
preventing the false error when using local Ollama models.

Fixes ROO-581

Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-27 16:50:05 +00:00
Matt Rubens
dc5e765e9c
Revert "Revert "Enable parallel tool calling with new_task isolation safeguards"" (#11006) 2026-01-27 10:31:03 -05:00
github-actions[bot]
2078537201
Changeset version bump (#11005)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-27 10:28:20 -05:00
Matt Rubens
7b54a733e7
Release v3.44.1 (#11003) 2026-01-27 10:22:03 -05:00
Matt Rubens
5b3626f1a6
Revert "Enable parallel tool calling with new_task isolation safeguards" (#11004) 2026-01-27 10:20:12 -05:00
Seb Duerr
6e08ae4bfd
Add temperature=0.9 and top_p=0.95 to zai-glm-4.7 model (#10945)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-27 09:57:21 -05:00
MP
5100d15830
Add quality checks to marketing site deployment workflows (#10959)
Co-authored-by: cte <cestreich@gmail.com>
2026-01-27 00:56:30 -08:00
Daniel
2584504b9b
Enable parallel tool calling with new_task isolation safeguards (#10979)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-01-27 00:26:49 -05:00
Daniel
f5d32e771a
Fix LiteLLM tool ID validation errors for Bedrock proxy (#10990) 2026-01-26 23:54:48 -05:00
github-actions[bot]
3edf71e29a
Changeset version bump (#10989)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-26 23:26:46 -05:00
Matt Rubens
826e6da416
chore: add changeset for v3.44.0 (#10987) 2026-01-26 23:19:13 -05:00
roomote[bot]
2391a0f065
fix: use --force by default when deleting worktrees (#10986)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-26 23:10:23 -05:00
Hannes Rudolph
2f92cb7a8d
fix: prevent nested condensing from including previously-condensed content (#10985) 2026-01-26 22:34:04 -05:00
Daniel
dd245cc40c
fix: VS Code LM token counting returns 0 outside requests, breaking context condensing (EXT-620) (#10983)
- Modified VsCodeLmHandler.internalCountTokens() to create temporary cancellation tokens when needed
- Token counting now works both during and outside of active requests
- Added 4 new tests to verify the fix and prevent regression
- Resolves issue where VS Code LM API users experienced context overflow errors
2026-01-26 19:43:10 -05:00
Daniel
27708f3038
feat: new_task tool creates checkpoint the same way write_to_file does (#10982) 2026-01-26 17:21:49 -07:00
Hannes Rudolph
bd29766406
fix: record truncation event when condensation fails but truncation succeeds (#10984) 2026-01-26 17:19:27 -07:00
Hannes Rudolph
7534e19c60
chore: remove POWER_STEERING experiment remnants (#10980) 2026-01-26 15:26:47 -07:00
Peter Dave Hello
953c7773c0
Update and improve zh-TW Traditional Chinese locale and docs (#10953) 2026-01-25 07:07:23 -05:00
roomote[bot]
b472c15220
fix: restore opaque background to settings section headers (#10951)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-25 01:49:27 -05:00
roomote[bot]
c28478eda7
feat: add wildcard support for MCP alwaysAllow configuration (#10948)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-24 22:42:47 -05:00
Bruno Bergher
c56f0f43c7
ux: improve worktree selector and creation UX (#10940)
* Delete modal

* Restructured

* Much more prominent

* UI

* i18n

* Fixes i18n

* Remove mergeresultmodel

* i18n

* tests

* knip

* code review
2026-01-24 22:06:37 +00:00
roomote[bot]
c7910a99c7
fix(types): remove unsupported Fireworks model tool fields (#10937)
fix(types): remove unsupported tool capability fields from Fireworks model metadata

Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-24 07:39:09 -05:00
Bruno Bergher
5848db66be
ux: Improve subtask visibility and navigation in history and chat views (#10864)
* Taskheader

* Subtask messages

* View subtask

* subtasks in history items

* i18n

* Table

* Lighter visuals

* bug

* fix: Align tests with implementation behavior

* refactor: extract CircularProgress component from TaskHeader

- Created reusable CircularProgress component for displaying percentage as a ring
- Moved inline SVG calculation from TaskHeader.tsx to dedicated component
- Added comprehensive tests for CircularProgress component (14 tests)
- Component supports customizable size, strokeWidth, and className
- Includes proper accessibility attributes (progressbar role, aria-valuenow)

* chore: update StandardTooltip default delay to 600ms

As mentioned in the PR description, increased the tooltip delay to 600ms
for less intrusive tooltips. The delay is still configurable via the
delay prop for components that need a different value.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-24 07:21:25 -05:00
Thanh Nguyen
3b703b8b53
feat: update Fireworks provider with new models (#10679)
Fixes #10674

Added new models:
- MiniMax M2.1 (minimax-m2p1)
- DeepSeek V3.2 (deepseek-v3p2)
- GLM-4.7 (glm-4p7)
- Llama 3.3 70B Instruct (llama-v3p3-70b-instruct)
- Llama 4 Maverick Instruct (llama4-maverick-instruct-basic)
- Llama 4 Scout Instruct (llama4-scout-instruct-basic)

All models include correct pricing, context windows, and capabilities.
2026-01-24 07:07:48 -05:00
Daniel
84f7409f3c
feat: remove MCP SERVERS section from system prompt (#10895)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-24 01:16:26 -05:00
Daniel
f9a3a178db
fix: truncate AWS Bedrock toolUseId to 64 characters (#10902) 2026-01-24 00:49:33 -05:00
Daniel
3877d02498
Replace hyphen encoding with fuzzy matching for MCP tool names (#10775) 2026-01-24 00:49:13 -05:00
github-actions[bot]
83f123f270
Changeset version bump (#10934)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-23 23:57:16 -05:00
Matt Rubens
4bff2ab191
chore: add changeset for v3.43.0 (#10933) 2026-01-23 23:47:44 -05:00
Hannes Rudolph
b042866ee1
fix: auto-migrate v1 condensing prompt and handle invalid providers on import (#10931) 2026-01-23 22:32:04 -05:00
Michaelzag
4e67357ab5
fix: use json-stream-stringify for pretty-printing MCP config files (#9864)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-23 19:19:35 -08:00
rossdonald
dd561142e9
Skip thoughtSignature blocks during markdown export #10199 (#10932) 2026-01-23 19:18:58 -08:00
roomote[bot]
f09718c5f4
Fix duplicate model display for OpenAI Codex provider (#10930)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-23 19:18:22 -08:00
Hannes Rudolph
a08bd766ff
refactor: remove legacy XML tool calling code (getToolDescription) (#10929)
- Remove getToolDescription() method from MultiSearchReplaceDiffStrategy
- Remove getToolDescription() from DiffStrategy interface
- Remove unused ToolDescription type from shared/tools.ts
- Remove unused eslint-disable directive
- Update test mocks to remove getToolDescription references
- Remove getToolDescription tests from multi-search-replace.spec.ts

Native tools are now defined in src/core/prompts/tools/native-tools/ using
the OpenAI function format. The removed code was dead since XML-style tool
calling was replaced with native tool calling.
2026-01-23 19:13:55 -05:00
Daniel
339f5aad48
fix: convert orphaned tool_results to text blocks after condensing (#10927)
* fix: convert orphaned tool_results to text blocks after condensing

When condensing occurs after assistant sends tool_uses but before user responds,
the tool_use blocks get condensed away. User messages containing tool_results that
reference condensed tool_use_ids become orphaned and get filtered out by
getEffectiveApiHistory, causing user feedback to be lost.

This fix enhances the existing check in addToApiConversationHistory to detect when
the previous effective message is not an assistant and converts any tool_result
blocks to text blocks, preventing them from being filtered as orphans.

The conversion happens at the latest possible moment (message insertion) because:
- Tool results are created before we know if condensing will occur
- We need actual effective history state to make the decision
- This is the last checkpoint before orphan filtering happens

* Only include environment details in summary for automatic condensing

For automatic condensing (during attemptApiRequest), environment details
are included in the summary because the API request is already in progress
and the next user message won't have fresh environment details injected.

For manual condensing (via condenseContext button), environment details
are NOT included because fresh details will be injected on the very next
turn via getEnvironmentDetails() in recursivelyMakeClineRequests().

This uses the existing isAutomaticTrigger flag to differentiate behavior.

---------

Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-01-23 19:04:36 -05:00
Hannes Rudolph
526488e5b6
chore: remove MULTI_FILE_APPLY_DIFF experiment (#10925)
* chore: remove MULTI_FILE_APPLY_DIFF experiment

Remove the 'Enable concurrent file edits' experimental feature that
allowed editing multiple files in a single apply_diff call.

- Remove multiFileApplyDiff from experiment types and config
- Delete MultiFileSearchReplaceDiffStrategy class and tests
- Delete MultiApplyDiffTool wrapper and tests
- Remove experiment-specific code paths in Task.ts, generateSystemPrompt.ts, and presentAssistantMessage.ts
- Remove special handling in ExperimentalSettings.tsx
- Remove translations from all 18 locale files

The existing MultiSearchReplaceDiffStrategy continues to handle
multiple SEARCH/REPLACE blocks within a single file.

* fix: remove unused EXPERIMENT_IDS/experiments import from Task.ts

Addresses review feedback: removes the unused imports from
src/core/task/Task.ts that were left over after removing the
MULTI_FILE_APPLY_DIFF experiment routing code.
2026-01-23 18:39:24 -05:00
Hannes Rudolph
f7434dec72
chore: remove POWER_STEERING experimental feature (#10926)
- Remove powerSteering from experimentIds array and schema in packages/types
- Remove POWER_STEERING from EXPERIMENT_IDS and experimentConfigsMap
- Remove power steering conditional block from getEnvironmentDetails
- Remove POWER_STEERING entry from all 18 locale settings.json files
- Update related test files to remove power steering references
2026-01-23 18:07:58 -05:00
Daniel
2d2ed15bfb
Remove Merge button from worktrees (#10924)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-23 16:55:46 -05:00
Hannes Rudolph
85f42dca83
chore: remove diffEnabled and fuzzyMatchThreshold settings (#10298) 2026-01-23 16:39:08 -05:00
roomote[bot]
1daac839ec
docs: fix CLI README to use correct command syntax (#10923)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-23 13:24:48 -08:00
Hannes Rudolph
0ff826d21d
feat(condense): improve condensation with environment details, accurate token counts, and lazy evaluation (#10920) 2026-01-23 13:52:47 -07:00
Hannes Rudolph
cf5d42e1e1
Intelligent Context Condensation v2 (#10873) 2026-01-23 12:33:35 -07:00
Hannes Rudolph
d1e74cb3e3
feat: add pnpm install:vsix:nightly command (#10912) 2026-01-23 10:35:32 -07:00
roomote[bot]
763734a193
fix: correct Gemini 3 pricing for Flash and Pro models (#10487)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-23 10:35:23 -07:00
Erdem
6e009971d9
feat: Update Z.AI models with new variants and pricing (#10860)
Co-authored-by: erdemgoksel <erdemgoksel@MAU-BILISIM42>
2026-01-23 08:12:03 -07:00
Hannes Rudolph
1f7be769ee
feat: Move condense prompt editor to Context Management tab (#10909) 2026-01-23 00:20:59 -05:00
github-actions[bot]
f7bf7a4840
Changeset version bump (#10911)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-22 23:56:42 -05:00
Matt Rubens
f38bac9fe6
Release v3.42.0 (#10910) 2026-01-22 23:52:33 -05:00
Hannes Rudolph
6eb3d5dd0a
chore(prompts): clarify linked SKILL.md file handling (#10907) 2026-01-22 22:32:25 -05:00
Daniel
3ab1d08159
Fix EXT-553: Remove percentage-based progress tracking for worktree file copying (#10905)
* Fix EXT-553: Remove percentage-based progress tracking for worktree file copying

- Removed totalBytes from CopyProgress interface
- Removed Math.min() clamping that caused stuck-at-100% issue
- Changed UI from progress bar to spinner with activity indicator
- Shows 'item — X MB copied' instead of percentage
- Updated all 18 locale files
- Uses native cp with polling (no new dependencies)

* fix: translate copyingProgress text in all 17 non-English locale files

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-22 21:17:16 -05:00
Hannes Rudolph
9d65772d24
fix(condense): remove custom condensing model option (#10901)
* fix(condense): remove custom condensing model option

Remove the ability to specify a different model/API configuration for
condensing conversations. Modern conversations include provider-specific
data (tool calls, reasoning blocks, thought signatures) that only the
originating model can properly understand and summarize.

Changes:
- Remove condensingApiHandler parameter from summarizeConversation()
- Remove condensingApiConfigId from context management and Task
- Remove API config dropdown for CONDENSE in settings UI
- Update telemetry to remove usedCustomApiHandler parameter
- Update related tests

Users can still customize the CONDENSE prompt text; only model selection
is removed.

* fix: remove condensingApiConfigId from types and test fixtures

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-22 20:06:04 -05:00
Daniel
f98dc1389e
feat: hide worktree feature from menus (#10899) 2026-01-22 17:35:21 -05:00
Hannes Rudolph
be0e8c2665
chore: clean up XML legacy code and native-only comments (#10900) 2026-01-22 15:56:11 -05:00
roomote[bot]
f6006c998d
Fix: Enforce file restrictions for all editing tools (#10896)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-22 14:17:42 -05:00
MP
5c1c16c16e
fix: rename bot to 'Roomote' and fix spacing in Slack demo (#10898) 2026-01-22 14:10:57 -05:00
Chris Estreich
13e090ef81
fix: prevent task abortion when resuming via IPC/bridge (#10892) 2026-01-22 02:31:51 -08:00
Matt Rubens
94459adba1
Open the worktreeinclude file after creating it (#10891)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-01-22 03:22:45 -05:00
roomote[bot]
73b1b38eb1
Fix padding on Roo Code Cloud upsell (#10889)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-22 03:00:26 -05:00
Hannes Rudolph
1feefb6f43
fix(openai): prevent double emission of text/reasoning in native and codex handlers (#10888) 2026-01-22 01:22:29 -05:00
roomote[bot]
21bd7609a9
feat: add HubSpot tracking with consent-based loading (#10885)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-21 22:54:07 -05:00
Daniel
971885d8e7
feat: add size-based progress tracking for worktree file copying (#10871) 2026-01-21 22:53:12 -05:00
MP
d87abe8efc
feat(web): redesign Slack page Featured Workflow section with YouTube… (#10880)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-21 22:47:42 -05:00
Matt Rubens
2305888746
Fix marketing site preview logic (#10886) 2026-01-21 21:58:21 -05:00
Hannes Rudolph
5e0bb5af26
refactor: unify export path logic and default to Downloads (#10882) 2026-01-21 21:34:48 -05:00
Hannes Rudolph
3f332d8e2b
refactor: migrate context condensing prompt to customSupportPrompts and cleanup legacy code (#10881) 2026-01-21 21:33:46 -05:00
Daniel
7f854c0dd7
feat: remove Claude Code provider (#10883) 2026-01-21 21:32:56 -05:00
roomote[bot]
5bd26eb1d9
fix: Handle mode selector empty state on workspace switch (#9674)
* fix: handle mode selector empty state on workspace switch

When switching between VS Code workspaces, if the current mode from
workspace A is not available in workspace B, the mode selector would
show an empty string. This fix adds fallback logic to automatically
switch to the default "code" mode when the current mode is not found
in the available modes list.

Changes:
- Import defaultModeSlug from @roo/modes
- Add fallback logic in selectedMode useMemo to detect when current
  mode is not available and automatically switch to default mode
- Add tests to verify the fallback behavior works correctly
- Export defaultModeSlug in test mock for consistent behavior

* fix: prevent infinite loop by moving fallback notification to useEffect

* fix: prevent infinite loop by using ref to track notified invalid mode

* refactor: clean up comments in ModeSelector fallback logic

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-01-21 20:47:51 -05:00
MP
bef796de87
Copy: update /slack page messaging (#10869)
copy: update /slack page messaging

- Update trial CTA to 'Start a free 14 day Team trial'
- Replace 'humans' with 'your team' in value props subtitle
- Shorten value prop titles for consistent one-line display
- Improve Thread-aware and Open to all descriptions
2026-01-21 18:30:57 -05:00
Hannes Rudolph
fa92ec4586
fix: resolve race condition in context condensing prompt input (#10876) 2026-01-21 15:11:39 -07:00
MP
9ab279ae42
Pr 10853 (#10854)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-21 00:15:17 -05:00
Hannes Rudolph
8de9337e63
chore: remove XML tool calling support (#10841)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-20 20:25:08 -05:00
Hannes Rudolph
e356d058e9
feat: standardize model selectors across all providers (#10294)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-20 16:22:49 -07:00
roomote[bot]
a060915d18
feat: add Kimi K2 thinking model to VertexAI provider (#9269)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-20 13:41:04 -08:00
roomote[bot]
c7ce8aae81
feat: enable prompt caching for Cerebras zai-glm-4.7 model (#10670)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-20 13:40:39 -08:00
Chris Estreich
04256be956
Git worktree management (#10458)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-01-20 13:39:24 -08:00
roomote[bot]
ead1658441
Fix broken link on pricing page (#10847)
* fix: update broken pricing link to /models page

* Update apps/web-roo-code/src/app/pricing/page.tsx

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
2026-01-20 18:03:51 +00:00
Hannes Rudolph
06039400cd
perf(webview): avoid resending taskHistory in state updates (#10842)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-01-19 21:22:32 -07:00
Hannes Rudolph
1a1827d806
feat(openai-codex): add ChatGPT subscription usage limits dashboard (#10813) 2026-01-19 11:55:40 -07:00
roomote[bot]
0f08867656
refactor: unify user content tags to <user_message> (#10723)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-18 22:04:00 -05:00
Chris Estreich
ea62173792
fix(cli): fix quiet mode tests by capturing console before host creation (#10827) 2026-01-18 10:07:49 -08:00
Chris Estreich
4093bff3ae
fix(cli): set integrationTest to true in ExtensionHost constructor (#10826) 2026-01-18 09:32:10 -08:00
Chris Estreich
fdf32bd55e
chore(cli): prepare release v0.0.49 (#10825) 2026-01-18 09:23:16 -08:00
Chris Estreich
6cc2a4c30e
Support different cli output formats: text, json, streaming json (#10812)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-18 09:19:08 -08:00
roomote[bot]
a148862a06
feat: warn users when too many MCP tools are enabled (#10772)
* feat: warn users when too many MCP tools are enabled

- Add WarningRow component for displaying generic warnings with icon, title, message, and optional docs link
- Add TooManyToolsWarning component that shows when users have more than 40 MCP tools enabled
- Add MAX_MCP_TOOLS_THRESHOLD constant (40)
- Add i18n translations for the warning message
- Integrate warning into ChatView to display after task header
- Add comprehensive tests for both components

Closes ROO-542

* Moves constant to the right place

* Move it to the backend

* i18n

* Add actionlink that takes you to MCP settings in this case

* Add to MCP settings too

* Bump max tools up to 60 since github itself has 50+

* DRY

* Fix test

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-18 09:22:09 -05:00
github-actions[bot]
719e6cb35b
Changeset version bump (#10823)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-18 08:05:06 -05:00
Seb Duerr
1e104e1eb0
Removal of glm4 6 (#10815)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-18 08:02:19 -05:00
Matt Rubens
695ba468ff
chore: add changeset for v3.41.3 (#10822) 2026-01-18 08:01:31 -05:00
roomote[bot]
802b40a790
Fix thinking block word-breaking to prevent horizontal scroll (#10806)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-17 12:15:27 -05:00
Chris Estreich
6608ed618a
chore(cli): prepare release v0.0.48 (#10800) 2026-01-16 23:29:54 -08:00
Chris Estreich
98d35f7cfc
Use a redirect instead of a fetch for cli auth (#10799) 2026-01-16 23:26:04 -08:00
Chris Estreich
f6c77c1643
Release cli v0.0.47 (#10798) 2026-01-16 23:02:17 -08:00
Chris Estreich
8fa2c1d598
Claude-like cli flags, auth fixes (#10797)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-16 22:54:24 -08:00
Chris Estreich
87a5afa629
Revert "feat(e2e): Enable E2E tests - 39 passing tests" (#10794)
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-01-16 17:22:43 -08:00
Chris Estreich
f58b908293
Roo Code Router fixes for the cli (#10789)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-01-16 17:16:44 -08:00
github-actions[bot]
c1f7099698
Changeset version bump (#10790)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-16 18:03:24 -05:00
Matt Rubens
cad0320315
Release v3.41.2 (#10788) 2026-01-16 17:58:04 -05:00
Daniel
95be704ebf
fix(litellm): detect Gemini models with space-separated names for thought signature injection (#10787) 2026-01-16 17:43:51 -05:00
roomote[bot]
c40c882561
fix: add openai-codex to providers that don't require API key (#10786)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-16 17:13:50 -05:00
Hannes Rudolph
9533f0be3c
fix(openai-codex): reset invalid model selection (#10777) 2026-01-16 14:55:01 -07:00
Bruno Bergher
9bf7173725
feat: add button to open markdown in VSCode preview (#10773)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-16 10:56:19 -05:00
github-actions[bot]
8b9f02aa0d
Changeset version bump (#10768)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-16 00:48:45 -05:00
Matt Rubens
7e3fcd7212
Release v3.41.1 (#10767) 2026-01-16 00:44:43 -05:00
Daniel
ddac338fdd
fix: Gemini thought signature validation errors (#10694)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-15 23:25:42 -05:00
Daniel
e34d93e2cb
fix: truncate call_id to 64 chars for OpenAI Responses API (#10763) 2026-01-15 23:09:54 -05:00
Daniel
bbb6a6e4b4
fix: prevent duplicate tool_use IDs causing API 400 errors (#10760) 2026-01-15 23:08:21 -05:00
Daniel
df42655fc9
fix: flatten top-level anyOf/oneOf/allOf in MCP tool schemas (#10726) 2026-01-15 23:05:00 -05:00
Daniel
3a884ee01e
fix: filter out empty text blocks from user messages for Gemini compatibility (#10728) 2026-01-15 23:03:16 -05:00
Daniel
bbf3196837
fix: filter Ollama models without native tool support (#10735) 2026-01-15 23:01:25 -05:00
roomote[bot]
245e0f66c6
feat: add settings tab titles to search index (#10761)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-15 22:59:40 -05:00
T
f48ea389df
Feat/issue 5376 aggregate subtask costs (#10757) 2026-01-15 16:44:55 -05:00
Hannes Rudolph
f2b16d400d
fix: handle missing tool identity in OpenAI Native streams (#10719) 2026-01-15 11:42:34 -07:00
Matt Rubens
4ee494b08c
Release: v1.106.0 (#10749) 2026-01-15 01:44:14 -05:00
roomote[bot]
724571c7bd
feat: clarify Slack and Linear are Cloud Team only features (#10748)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-15 01:16:30 -05:00
github-actions[bot]
5183be22a4
Changeset version bump (#10747)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-15 00:44:59 -05:00
Matt Rubens
afc588b8d3
Release v3.41.0 (#10746) 2026-01-15 00:39:13 -05:00
Archimedes
dba76f51e7
fix(e2e): add alwaysAllow config for MCP time server tools (#10733) 2026-01-14 23:50:17 -05:00
Daniel
d7b7e17a21
fix(litellm): inject dummy thought signatures on ALL tool calls for Gemini (#10743) 2026-01-14 23:49:22 -05:00
Hannes Rudolph
4ebbca08b0
feat: add OpenAI Codex provider with OAuth subscription authentication (#10736)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-14 23:48:51 -05:00
Hannes Rudolph
739b91ec40
Clear terminal output buffers to prevent memory leaks (#7666) 2026-01-14 21:24:14 -07:00
Archimedes
dbf206f06b
feat(e2e): Enable E2E tests - 39 passing tests (#10720)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-01-14 12:15:54 -08:00
Hannes Rudolph
b04597faa6
feat(providers): add gpt-5.2-codex model to openai-native provider (#10731) 2026-01-14 13:02:56 -07:00
Matt Rubens
4b17f985b4
Release: v1.105.0 (#10722) 2026-01-14 10:01:05 -05:00
github-actions[bot]
d689de34f8
Changeset version bump (#10714)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-14 00:00:52 -05:00
Matt Rubens
8fdd96be3c
Release v3.40.1 (#10713) 2026-01-13 23:55:39 -05:00
Hannes Rudolph
9b1c8500d9
feat(gemini): add allowedFunctionNames support to prevent mode switch errors (#10708)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-13 23:49:57 -05:00
github-actions[bot]
d74bad9121
Changeset version bump (#10706)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-13 18:35:32 -05:00
Matt Rubens
fdc6104031
chore: add changeset for v3.40.0 (#10705) 2026-01-13 18:24:15 -05:00
Daniel
440924ad62
fix: clear approval buttons when API request starts (ROO-526) (#10702) 2026-01-13 18:15:04 -05:00
Bruno Bergher
83037104c6
ux: improve stop button visibility and streamline error handling (#10696)
* Restores the send button in the message edit mode

* Makes the stop button more prominent
2026-01-13 18:14:08 +00:00
Bruno Bergher
749026a44b
ux: Further improve error display (#10692)
* Ensures error details are shown for all errors (except diff, which has its own case)

* More details

* litellm is a proxy
2026-01-13 15:43:51 +00:00
Daniel
78821a3951
fix: use placeholder for empty tool result content to fix Gemini API validation (#10672) 2026-01-13 01:39:25 -05:00
Daniel
2d4dba0286
fix: omit parallel_tool_calls when not explicitly enabled (COM-406) (#10671) 2026-01-13 01:37:41 -05:00
Bruno Bergher
a12163d762
ux: Standard stop button 🟥 (#10639)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-01-13 01:25:17 -05:00
Daniel
b514996208
fix(path): return empty string from getReadablePath when path is empty - ROO-437 (#10638) 2026-01-12 18:49:37 -05:00
Daniel
621d9500de
fix: sanitize tool_use IDs to match API validation pattern (#10649) 2026-01-12 18:04:58 -05:00
Patrick Decat
a682908a25
fix: encode hyphens in MCP tool names before sanitization (#10644) 2026-01-12 17:06:40 -05:00
Daniel
f439496147
fix: correct Gemini 3 thought signature injection format via OpenRouter (#10640) 2026-01-12 17:05:00 -05:00
Archimedes
55b732485b
perf: optimize message block cloning in presentAssistantMessage (#10616) 2026-01-12 10:22:50 -08:00
Daniel
4c2d1f0c68
feat: display edit_file errors in UI after consecutive failures (#10581) 2026-01-12 10:35:43 -05:00
Bruno Bergher
e23e1ecc94
ux: UI improvements to search settings (#10633)
* UI changs

* Update webview-ui/src/components/marketplace/MarketplaceView.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* i18n

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-01-12 06:59:49 -05:00
Matt Rubens
632b86cfbe
Basic settings search (#10619)
* Prototype of a simpler searchable settings

* Fix tests

* UI improvements

* Input tweaks

* Update webview-ui/src/components/settings/SettingsSearch.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* fix: remove duplicate Escape key handler dead code

* Cleanup

* Fix tests

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-11 14:57:41 -05:00
github-actions[bot]
611bb70166
Changeset version bump (#10609)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-10 13:35:16 -05:00
Matt Rubens
f1bbd29bda
Update router name in types (#10610) 2026-01-10 13:34:25 -05:00
Matt Rubens
9c91fb3304
chore: add changeset for v3.39.3 (#10608) 2026-01-10 13:20:44 -05:00
Matt Rubens
352616a6de
Update Roo Code Router service name (#10607) 2026-01-10 13:14:42 -05:00
Matt Rubens
fa5fe75b3b
Update router name in types (#10605) 2026-01-10 12:52:41 -05:00
Matt Rubens
f99d116ec7
chore: bump version to v1.102.0 (#10604) 2026-01-10 11:41:09 -05:00
roomote[bot]
75d895845e
Rename Roo Code Cloud Provider to Roo Code Router (#10560)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-10 11:32:21 -05:00
Chris Estreich
a33117a83f
Some cleanup in ExtensionHost (#10600)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-10 02:29:33 -08:00
Chris Estreich
fc21101a99
More file organization for the cli (#10599) 2026-01-09 23:22:51 -08:00
Chris Estreich
e8ed344b0f
Allow the cli release script to install locally for testing (#10597) 2026-01-09 20:40:46 -08:00
Chris Estreich
ea9717d7ba
Add a TUI (#10480)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2026-01-09 19:19:58 -08:00
github-actions[bot]
1e62b5ddf1
Changeset version bump (#10596)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-09 21:49:20 -05:00
Matt Rubens
658da2c029
Release v3.39.2 (#10595) 2026-01-09 21:29:03 -05:00
Hannes Rudolph
5a82c334ae
chore: disable edit_file tool for Gemini/Vertex (#10594) 2026-01-09 21:24:15 -05:00
roomote[bot]
d97e540ac6
fix(cerebras): ensure all tools have consistent strict mode values (#10589)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-09 18:50:16 -07:00
Hannes Rudolph
84789445cd
chore(gemini): stop overriding tool allow/deny lists (#10592) 2026-01-09 18:47:35 -07:00
Hannes Rudolph
e39abbffa1
fix: make edit_file matching more resilient (#10585) 2026-01-09 20:32:13 -05:00
Hannes Rudolph
168cfcaba5
fix: round-trip Gemini thought signatures for tool calls (#10590) 2026-01-09 20:03:58 -05:00
Hannes Rudolph
108f78db6c
feat: add debug setting to settings page (#10580)
* feat: add debug mode toggle to settings

* Update About component with debug mode description

* i18n: add debug mode strings to settings locales

* Update debug mode description in all locales

* fix: post state to webview after debugSetting update

This addresses the review feedback that the debugSetting handler was not
posting updated state back to the webview, which could cause the UI to
stay stale until another state refresh occurred.

* fix: clarify debug mode description to specify task header location

Updated debugMode.description across all 18 locales to clarify that
debug buttons appear in the task header, per review feedback.

* fix: remove redundant postStateToWebview call after debug setting update

* Update src/core/webview/webviewMessageHandler.ts

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-01-09 18:06:02 -05:00
Chris Estreich
237fa89b7e
Add some slash commands that are useful for cli development (#10586) 2026-01-09 13:12:22 -08:00
Chris Estreich
a4eb15b5a8
Add some functionality to @roo-code/core for the cli (#10584) 2026-01-09 13:05:15 -08:00
Chris Estreich
3171ffc809
Move more types to @roo-code/types (for the cli) (#10583) 2026-01-09 11:59:06 -08:00
Daniel
907b94bc40
fix(openai): remove convertToSimpleMessages to fix tool calling for OpenAI-compatible providers (#10575) 2026-01-09 12:03:46 -05:00
Daniel
b7bd859473
feat: improve error messaging for stream termination errors from provider (#10548) 2026-01-09 10:03:12 -05:00
Daniel
7b771a209e
fix: merge approval feedback into tool result instead of pushing duplicate (ROO-410) (#10519) 2026-01-09 10:01:52 -05:00
Daniel
ade10e275f
fix(vscode-lm): order text parts before tool calls in assistant messages (#10573) 2026-01-09 10:01:26 -05:00
Matt Rubens
2ff08b5e5c
Update Terms of Service (effective January 9, 2026) (#10568)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-09 02:03:58 -05:00
Daniel
9ac449919e
fix: ensure assistant message content is never undefined for Gemini compatibility (#10559) 2026-01-08 20:32:30 -05:00
Matt Rubens
caa37792ca
chore(cli): change default model to anthropic/claude-opus-4.5 (#10544) 2026-01-08 18:01:15 -05:00
github-actions[bot]
eb7d8f4f2c
Changeset version bump (#10558)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-08 17:49:25 -05:00
Matt Rubens
58b04417b7
Release v3.39.1 (#10557) 2026-01-08 17:45:49 -05:00
Daniel
ef4b95060b
fix: stabilize file paths during native tool call streaming (#10555) 2026-01-08 17:38:58 -05:00
Daniel
e3c0cd64dc
fix: disable Gemini thought signature persistence to prevent corrupted signature errors (#10554) 2026-01-08 17:36:45 -05:00
Daniel
1d9f7f2aa6
fix: change minItems from 2 to 1 for Anthropic API compatibility (#10551) 2026-01-08 15:30:24 -05:00
Matt Rubens
93bccfe9a0
Update changelog for version 3.39.0 release 2026-01-08 12:11:22 -05:00
github-actions[bot]
2cd4c2e2d5
Changeset version bump (#10546)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-08 09:54:01 -05:00
Matt Rubens
9ddbc9b00d
fix: add @roo-code/cli to changeset ignore list (#10545) 2026-01-08 09:39:21 -05:00
roomote[bot]
a10b450380
feat: Change "Get Started" button label to "Create Roo Account" (#10543)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-08 09:29:44 -05:00
Matt Rubens
f84beade7a
Release v3.39.0 (#10537) 2026-01-08 01:52:53 -05:00
Danny Ricciotti
b2941d54df
🐛 Fix glitchy kangaroo bounce animation on welcome screen (#10035)
The kangaroo logo on the welcome screen had a visual glitch where it would instantly jump to the top position when hovering, instead of smoothly starting the bounce from its resting position.

Changes:
- Added custom smooth-bounce keyframe animation in index.css that explicitly starts from translateY(0)
- Updated RooHero component to use hover state tracking with the new animation
- Removed Tailwind's animate-bounce class which was causing the glitch

The animation now smoothly bounces from the resting position without any jarring visual jumps.
2026-01-07 22:34:17 -05:00
Seb Duerr
710e7dd358
feat(types): add zai-glm-4.7 to Cerebras models (#10500)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-07 19:29:54 -07:00
roomote[bot]
1573edf295
fix: make command chaining examples shell-aware for Windows compatibility (#10434)
* fix: make command chaining examples shell-aware for Windows compatibility

Addresses Issue #10352 where Roo Code generates Unix-style command
chaining (&&) even on Windows systems using PowerShell or cmd.exe.

Changes:
- Add getCommandChainOperator() to detect the user shell and return
  the appropriate command chaining syntax:
  - Unix shells (bash, zsh, etc.): &&
  - PowerShell: ;
  - cmd.exe: &
- Update getRulesSection() to use shell-specific chaining in examples
- Add informative note for non-Unix shells about different syntaxes
- Add comprehensive tests for shell detection and command chaining

* feat: add Unix utility guidance for Windows shells

Addresses feedback from issue #10352 about sed and other Unix-specific
utilities being suggested on Windows. The system prompt now includes
guidance for PowerShell and cmd.exe users to use native alternatives:

PowerShell:
- Select-String instead of grep
- Get-Content instead of cat
- Remove-Item instead of rm
- Copy-Item instead of cp
- Move-Item instead of mv
- -replace operator or [regex] instead of sed

cmd.exe:
- type instead of cat
- del instead of rm
- copy instead of cp
- move instead of mv
- find/findstr instead of grep

* Apply suggestion from @roomote[bot]

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* fix: use && for cmd.exe to preserve conditional execution semantics

- Update getCommandChainOperator() to return && for cmd.exe (already done)
- Update getCommandChainNote() to document && instead of & for cmd.exe
- Update JSDoc to reflect cmd.exe uses && for conditional execution
- Update tests to expect && for cmd.exe

cmd.exe supports && for conditional execution (run next command only if
previous succeeds), which provides the same semantics as Unix shells.

* fix: update PowerShell note to use && for cmd.exe reference

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2026-01-07 20:57:08 -05:00
roomote[bot]
ca0c9010d5
fix: use task stored API config as fallback for rate limit (#10266)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-07 17:21:08 -07:00
roomote[bot]
75525817ec
feat: filter @ mention file search results using .rooignore (#10174)
* feat: filter @ mention file search results using .rooignore

- Modify searchFiles case in webviewMessageHandler.ts to filter results using RooIgnoreController
- Use existing RooIgnoreController from current task if available, otherwise create a temporary one
- Respect showRooIgnoredFiles setting to allow users to toggle this behavior
- Add comprehensive test coverage for the new filtering behavior

Fixes #10169

* fix: dispose temporary RooIgnoreController to prevent resource leak

Addresses Rooviewer feedback: the temporary RooIgnoreController created
when no task exists was never disposed, causing file watchers to accumulate.

Changes:
- Track temporary controller separately with tempController variable
- Wrap filtering logic in try/finally block
- Call dispose() in finally block to ensure cleanup
- Add test cases to verify dispose is called for temp controllers
- Verify task's controller is NOT disposed (only temp ones)

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2026-01-07 18:37:32 -05:00
roomote[bot]
e3b90fb182
feat: add xhigh reasoning effort to OpenAI compatible endpoints (#10061)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-07 14:32:30 -07:00
roomote[bot]
d7d3f4099b
fix: handle PowerShell ENOENT error in os-name on Windows (#9897)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-07 13:07:25 -05:00
Hannes Rudolph
43f7ce025f
feat: add support for image file @mentions (#10189)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-07 11:44:04 -05:00
roomote[bot]
e287a82144
fix: remove legacy Claude 2 series models from Bedrock provider (#10501)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-07 11:30:37 -05:00
Hannes Rudolph
9700eab792
feat: implement sticky provider profile for task-level API config persistence (#10018) 2026-01-07 09:03:44 -07:00
roomote[bot]
7bbdcdf5d0
feat: rename YOLO to BRRR (#10507)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-07 10:03:37 -05:00
Hannes Rudolph
41c5ff6076
feat(web-evals): remember last Roo model selection + add evals skill (#10470)
* feat(web-evals): remember last Roo model selection

* fix(web-evals): reset model selections on provider switch and fix lint warning

- Add useEffect to reset model selections when switching between providers
  This prevents OpenRouter model IDs from persisting when switching to Roo,
  which was causing Roo's stored selection to be overwritten with wrong IDs

- Remove unused 'executionMethod' from onSubmit dependency array to fix
  react-hooks/exhaustive-deps warning

* fix(web-evals): add missing executionMethod to test cases

* fix(web-evals): harden localStorage + keep provider selections
2026-01-07 08:00:34 -07:00
Matt Rubens
2d22804d4a
Tweak the style of the follow up suggestion modes (#9260) 2026-01-07 00:35:28 -05:00
roomote[bot]
7f2978abad
fix: add missing description fields for debugProxy configuration (#10505)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-06 20:46:53 -05:00
roomote[bot]
781ed1e178
feat: add Kimi K2 thinking model to Fireworks AI provider (#9202)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-06 20:31:56 -05:00
Daniel
741b2680b5
fix: prevent duplicate tool_result blocks causing API errors (#10497) 2026-01-06 18:27:27 -05:00
Hannes Rudolph
503f40241d
feat(proxy): add debug-mode proxy routing (#10467) 2026-01-06 13:17:50 -07:00
Chris Estreich
861139ca24
Add a cli installer (#10474)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2026-01-06 03:27:44 -08:00
Daniel
6b13d1d84e
fix: add additionalProperties: false to MCP tool schemas for OpenAI Responses API (#10472) 2026-01-06 00:26:17 -05:00
Daniel
6f0948137f
fix: preserve tool_use blocks for all tool_results in kept messages during condensation (#10471) 2026-01-06 00:22:33 -05:00
Chris Estreich
424bce6078
Add an option to use our cli for evals (#10456)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-05 11:33:19 -08:00
Chris Estreich
b11d53adf4
VSCode shim + basic cli (#10452)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-05 10:24:05 -08:00
roomote[bot]
f2276bebc4
fix: add explicit deduplication for duplicate tool_result blocks (#10466)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2026-01-05 11:24:07 -05:00
roomote[bot]
cbc0ae4726
feat: add image support documentation to read_file native tool description (#10442)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-05 09:43:28 -05:00
github-actions[bot]
d23824dba5
Changeset version bump (#10451)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-03 19:23:17 -05:00
Matt Rubens
b4302c708f
chore: add changeset for v3.38.3 (#10450) 2026-01-03 19:19:37 -05:00
roomote[bot]
c307dc7756
fix: add maxConcurrentFileReads limit to native read_file tool schema (#10449)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2026-01-03 19:08:37 -05:00
Matt Rubens
1459f0113b
Release: v1.99.0 (#10447) 2026-01-03 15:12:51 -05:00
Matt Rubens
08c3431fc5
feat: recursively load .roo/rules and AGENTS.md from subdirectories (#10446)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-03 15:05:48 -05:00
roomote[bot]
586cf47fb2
fix: add type check for lastMessage.text in TTS useEffect (#10431)
fix: add type check for lastMessage.text before calling startsWith

Fixes #10430

The TTS useEffect was calling .startsWith() on lastMessage.text after only
checking if it was truthy. If text was a non-string truthy value (array,
object, or number), this would crash with "Q.text.startsWith is not a function".

Changed the truthy check to an explicit type check: typeof lastMessage.text === "string"

Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-01 15:11:15 -08:00
Hannes Rudolph
3074ccc278
fix(claude-code): stop frequent sign-ins by hardening OAuth refresh (#10410)
* fix(claude-code): prevent sign-outs on oauth refresh

* test(claude-code): restore fetch after mocking

* refactor(claude-code): replace while(true) with bounded for loop for clarity

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-01 07:52:01 -08:00
github-actions[bot]
2068531801
Changeset version bump (#10417)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-31 00:21:30 -08:00
Matt Rubens
1179662674
Release v3.38.2 (#10416) 2025-12-31 00:17:23 -08:00
Matt Rubens
dea33f978c
fix: prevent write_to_file from creating files at truncated paths (#10415)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-31 00:12:24 -08:00
Hannes Rudolph
ca1bc18a21
Fix rate limit wait display (#10389)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-30 21:56:32 -08:00
Hannes Rudolph
c37aa02b21
chore: remove human-relay provider (#10388)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-30 15:38:46 -07:00
Hannes Rudolph
ed13921732
feat(skills): align with Agent Skills spec (#10409) 2025-12-30 15:35:12 -07:00
John Richmond
6d8fa39319
Release: v1.96.0 (#10395)
chore: bump version to v1.96.0
2025-12-29 20:58:43 -08:00
SannidhyaSah
0e9a765662
docs: Replace Todo Lists video with Context Management video (#10375)
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
2025-12-29 20:34:06 -08:00
Seb Duerr
19b7dac719
fix: update Cerebras maxTokens to 16384 (#10387) 2025-12-29 19:56:59 -08:00
github-actions[bot]
c193f59819
Changeset version bump (#10385)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-29 15:51:38 -08:00
Matt Rubens
958705a71c
chore: add changeset for v3.38.1 (#10384) 2025-12-29 15:47:01 -08:00
Daniel
ca8fd5c867
fix: flush pending tool results before condensing context (#10379) 2025-12-29 15:43:02 -08:00
Hannes Rudolph
6ba793137d
Revert "feat: enable mergeToolResultText for all OpenAI-compatible providers (#10299)" (#10381) 2025-12-29 16:07:24 -07:00
roomote[bot]
e851b9355e
fix: correct GitHub repository URL in marketing page (#10377)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-29 10:11:28 -08:00
John Richmond
a42387e0af
Handle custom tool use similarly to MCP tools for ipc schema purposes (#10364) 2025-12-29 08:58:41 -08:00
roomote[bot]
a18c9b7a56
Improve error message when read_file is used on directory (#10371)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-28 21:57:41 -08:00
roomote[bot]
add06a2e7b
docs: clarify path to Security Settings in privacy policy (#10367)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-28 18:19:03 +01:00
roomote[bot]
7980cd39f6
fix: enforce maxConcurrentFileReads limit in read_file tool (#10363)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-27 15:47:07 -08:00
github-actions[bot]
ba1dd3c723
Changeset version bump (#10362)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-27 12:25:42 -08:00
Matt Rubens
5c5ddd37e8
Release v3.38.0 (#10361) 2025-12-27 12:19:48 -08:00
Matt Rubens
25f76ce25e
Revert "fix: capture extended thinking signatures for tool use continuations" (#10360) 2025-12-27 11:44:46 -08:00
Matt Rubens
c61dd7ad31
Remove the mergeToolResultText in the Roo provider for now (#10359) 2025-12-27 11:28:29 -08:00
roomote[bot]
13370a2ad1
feat: add optional mode field to slash command front matter (#10344)
* feat: add optional mode field to slash command front matter

- Add mode field to Command interface
- Update command parsing to extract mode from frontmatter
- Modify RunSlashCommandTool to automatically switch mode when specified
- Add comprehensive tests for mode field parsing and switching
- Update existing tests to include mode field

* Make it work for manual slash commands too

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-26 17:17:54 -08:00
Daniel
2eebf3c2c4
fix: capture extended thinking signatures for tool use continuations (#10351) 2025-12-26 17:11:03 -05:00
Chris Estreich
0d50ed649f
Add support for npm packages and .env files to custom tools (#10336)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-26 09:43:35 -08:00
Matt Rubens
343d5e9dcb
Add support for skills (#10335)
* Add support for skills

* fix: use type-only import for ClineProvider and relative paths in skills section

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-25 20:28:41 -08:00
roomote[bot]
a510223a09
feat: remove simpleReadFileTool completely (#10254)
- Delete simpleReadFileTool.ts file
- Delete simple-read-file.ts prompt description file
- Delete single-file-read-models.ts types file
- Remove imports and usage from presentAssistantMessage.ts
- Remove imports and usage from prompts/tools/index.ts
- Remove export from packages/types/src/index.ts

This removes all traces of the legacy single-file read tool implementation that was used for specific models. All models now use the standard read_file tool.

Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-25 09:57:46 -08:00
roomote[bot]
a07d28c7e6
feat: remove OpenRouter Transforms feature (#10341)
- Remove openRouterUseMiddleOutTransform checkbox from settings UI
- Remove openRouterUseMiddleOutTransform from TypeScript types
- Remove transforms parameter logic from OpenRouter handler
- Remove setting from EVALS_SETTINGS
- Remove translation keys from all locale files (18 locales)

Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-25 09:53:48 -08:00
github-actions[bot]
1e71015e54
Changeset version bump (#10317)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-23 15:13:13 -08:00
Matt Rubens
5c7939becd
chore: add changeset for v3.37.1 (#10316) 2025-12-23 15:09:27 -08:00
Bruno Bergher
57cafa535a
ux: Provider-centric signup (#10306)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-23 14:59:29 -08:00
Hannes Rudolph
6afc59b928
fix(openai): send native tool definitions by default (#10314)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-23 15:57:18 -07:00
Hannes Rudolph
dfa7c357c2
fix(task): drain queued messages while waiting for ask (#10315) 2025-12-23 15:40:41 -07:00
Hannes Rudolph
53e1ff0058
fix: preserve reasoning_details shape to prevent malformed responses (#10313) 2025-12-23 14:58:35 -07:00
Hannes Rudolph
ded6486a46
feat: enable mergeToolResultText for all OpenAI-compatible providers (#10299) 2025-12-23 14:19:33 -07:00
Hannes Rudolph
9b99890c35
feat(prompts): strengthen native tool-use guidance (#10311) 2025-12-23 14:13:40 -07:00
John Richmond
40812dcb64
Release: v1.95.0 (#10309)
chore: bump version to v1.95.0
2025-12-23 10:21:55 -08:00
Hannes Rudolph
0f3df0e932
feat: add grace retry for empty assistant messages (#10297)
Implements grace retry error handling for 'no assistant messages' API
errors, following the same pattern as PR #10196 for 'no tools used'.

- Add consecutiveNoAssistantMessagesCount counter to Task.ts
- First failure: silent retry (grace retry)
- After 2+ consecutive failures: show MODEL_NO_ASSISTANT_MESSAGES error
- Add UI handling in ChatRow.tsx with ErrorRow component
- Add localized strings to all 18 locale files
- Add comprehensive tests for the grace retry behavior
2025-12-23 07:02:40 -08:00
Hannes Rudolph
71f312b488
feat: enable mergeToolResultText for Roo Code Cloud provider (#10301) 2025-12-23 00:57:55 -07:00
github-actions[bot]
30090de2e9
Changeset version bump (#10296)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-22 21:06:54 -08:00
Matt Rubens
dd44f8fb8c
Release v3.37.0 (#10295)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-12-22 21:03:15 -08:00
Hannes Rudolph
89e9261367
fix: preserve reasoning_content in condense summary for DeepSeek-reasoner (#10292) 2025-12-22 21:25:17 -07:00
Hannes Rudolph
a8ac2ced02
fix: emit tool_call_end events in BaseOpenAiCompatibleProvider (#10293) 2025-12-22 21:25:07 -07:00
Hannes Rudolph
eeaf33ce4e
refactor(zai): merge environment_details into tool result instead of system message (#10289) 2025-12-22 20:20:29 -07:00
Hannes Rudolph
f21ec127b1
fix: add CRLF line ending normalization to search_replace and search_and_replace tools (#10288)
- Normalize file content to LF after reading to ensure consistent matching
- Normalize search/replace strings to handle CRLF from model output
- Add comprehensive CRLF normalization tests for both tools
- Consistent with existing edit_file tool behavior
2025-12-22 19:19:24 -08:00
Hannes Rudolph
e7c1851a8b
feat(minimax): move environment_details to system message for thinking models (#10284) 2025-12-22 19:59:42 -07:00
Hannes Rudolph
bd78a63844
feat(evals): add message log deduper utility (#10286) 2025-12-22 19:42:38 -07:00
Hannes Rudolph
44a7ba5072
fix: improve reasoning_details accumulation and serialization (#10285) 2025-12-22 19:33:02 -07:00
Hannes Rudolph
518a4402a7
feat(zai): add GLM-4.7 model with thinking mode support (#10282)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-22 18:01:16 -08:00
Daniel
d00d9edec5
feat: deprecate XML tool protocol selection, force native for new tasks (#10281)
- Disable tool protocol selector UI in ApiOptions.tsx
- Force native protocol for all new tasks in resolveToolProtocol()
- Keep locked protocol support for resumed tasks that used XML
- Remove models without supportsNativeTools: true from providers:
  - baseten.ts: removed 6 models
  - bedrock.ts: removed 2 embedding models
  - featherless.ts: removed 3 models, updated default
  - groq.ts: removed 5 models
  - sambanova.ts: removed 2 models
  - vertex.ts: removed 7 models
  - vercel-ai-gateway.ts: added supportsNativeTools: true
- Update tests to expect native format output
2025-12-22 17:49:50 -08:00
Daniel
9b06a98b85
fix: emit tool_call_end events in OpenAI handler when streaming ends (#10280) 2025-12-22 17:00:58 -05:00
Hannes Rudolph
f462eeb80c
fix(chutes): add graceful fallback for model parsing (#10279)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-12-22 12:59:13 -07:00
Daniel
7fae76ec86
fix: move array-specific properties into anyOf variant in normalizeToolSchema (#10276)
* fix: move array-specific properties into anyOf variant in normalizeToolSchema

Fixes read_file tool schema rejection with GPT-5-mini which requires
items property to be inside the { type: 'array' } variant when using
anyOf for nullable arrays.

Resolves ROO-262

* refactor: extract array-specific properties constant and helper function
2025-12-22 11:01:43 -08:00
Daniel
6b141fbb25
fix: disable strict mode for MCP tools to preserve optional parameters (#10220)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-22 13:21:31 -05:00
Daniel
529e0d7a94
fix: enable Requesty refresh models with credentials (#10273) 2025-12-22 12:43:42 -05:00
roomote[bot]
e3cd031f17
feat: remove parallel_tool_calls parameter from litellm provider (#10274)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-22 09:11:47 -08:00
roomote[bot]
a148b0b7f3
feat: add Cloud Team page with comprehensive team features (#10267)
* feat: add Cloud Team page with features and pricing integration

* Copy tweaks

* Visual tweaks

* Content adjustments

* Update apps/web-roo-code/src/app/cloud/team/page.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-12-22 16:52:00 +00:00
Hannes Rudolph
08eed65aff
fix(evals): add missing packages/core to Dockerfile.runner (#10272) 2025-12-22 08:42:49 -08:00
Chris Estreich
2bb375534c
Add custom tool definitions to @roo-code/types (#10233)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-21 15:15:42 -08:00
Chris Estreich
3beeac6f58
Remove the "test" custom tools (#10255)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-21 14:19:25 -08:00
Chris Estreich
5ae4d4d635
Custom tool calling (#10083) 2025-12-21 12:43:06 -08:00
github-actions[bot]
78dc34498b
Changeset version bump (#10225)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-19 22:58:47 -05:00
Matt Rubens
d2814da574
Release v3.36.16 (#10224) 2025-12-19 22:54:57 -05:00
Hannes Rudolph
5c798a9877
fix: normalize tool schemas for VS Code LM API to fix error 400 (#10221) 2025-12-19 17:36:59 -07:00
github-actions[bot]
f7adc4b1cf
Changeset version bump (#10219)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-19 12:41:05 -08:00
Chris Estreich
ccbb25d62b
Release v3.36.15 (#10218) 2025-12-19 12:34:19 -08:00
Daniel
bade9326c6
fix: enable native tool calls for Requesty provider (ROO-235) (#10211) 2025-12-19 12:28:26 -08:00
Daniel
aabee0fb0b
fix: force additionalProperties false for strict mode compatibility (#10210) 2025-12-19 12:18:38 -08:00
Hannes Rudolph
397328cb53
feat: merge native tool defaults for openai-compatible provider (#10213) 2025-12-19 12:18:10 -08:00
Bruno Bergher
bb358fb8f9
ux: add downloadable error diagnostics from chat errors (#10188)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-19 11:50:40 -08:00
Bruno Bergher
6e2b85214e
ux: improve API error handling and visibility (#10204)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-12-19 11:38:56 -08:00
Hannes Rudolph
61903f9588
feat(providers): add native tool calling support to LM Studio and Qwen-Code (#10208) 2025-12-19 12:50:09 -05:00
Hannes Rudolph
3f1f8be2d1
feat(vertex): add 1M context window beta support for Claude Sonnet 4 (#10209) 2025-12-19 12:24:45 -05:00
Patrick Decat
2dec78ccb4
fix: refresh models button not flushing cache properly (#9870) 2025-12-19 12:03:50 -05:00
github-actions[bot]
3c05cae722
Changeset version bump (#10201)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-18 18:52:16 -08:00
Chris Estreich
4b9d9b7c09
Release v3.36.14 (#10200) 2025-12-18 17:48:44 -08:00
Daniel
c3a4d14b6b
fix: strip unsupported JSON Schema format values for OpenAI compatibility (#10198) 2025-12-18 16:57:06 -08:00
Hannes Rudolph
9c03476a0f
feat(vertex): add native tool calling for Claude models on Vertex AI (#10197)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-12-18 16:09:55 -08:00
Hannes Rudolph
e2d1599f9c
feat: improve 'no tools used' error handling with grace retry (#10196)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-12-18 15:29:01 -07:00
github-actions[bot]
b37b231dfc
Changeset version bump (#10195)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-18 13:11:30 -08:00
Chris Estreich
7789b40000
Release v3.36.13 (#10194) 2025-12-18 13:07:38 -08:00
Daniel
3a2ad6b0e1
feat(telemetry): add PostHog exception tracking for consecutive mistake errors (#10193) 2025-12-18 12:59:37 -08:00
Daniel
3e0d9c65e8
feat: lock task tool protocol for consistent task resumption (#10192)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-18 11:54:26 -08:00
Hannes Rudolph
8251170b84
feat: Replace edit_file tool alias with edit_file tool (#9983) 2025-12-18 12:48:30 -07:00
Daniel
157a097032
feat(vscode-lm): add native tool support (#10191) 2025-12-18 11:25:54 -08:00
Chris Estreich
e84e3346dd
Release: v1.93.0 (#10190) 2025-12-18 10:30:31 -08:00
Daniel
d92d729219
fix(litellm): merge default model info with router models for NTC support (#10187)
* feat(types): add defaultToolProtocol: native to providers

- Added supportsNativeTools: true and defaultToolProtocol: native to all chutes models
- Added defaultToolProtocol: native to moonshot models (already had supportsNativeTools)
- Added defaultToolProtocol: native to litellm default model (already had supportsNativeTools)
- Added defaultToolProtocol: native to minimax models (already had supportsNativeTools)

This enables native tool calling by default for these providers, reducing
the number of users falling back to XML tool protocol unnecessarily.

* fix(litellm): merge only native tool defaults with router models

Only merges supportsNativeTools and defaultToolProtocol from litellmDefaultModelInfo,
not prices or other model-specific info that could be incorrect for different models.
2025-12-18 11:46:45 -05:00
Matt Rubens
3cb2c1de66
Revert "Revert "feat: change defaultToolProtocol default from xml to native"" (#10186)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-18 10:31:33 -05:00
github-actions[bot]
d3768690be
Changeset version bump (#10182)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-18 01:15:07 -08:00
Chris Estreich
17b1680e38
Release v3.36.12 (#10181) 2025-12-18 01:08:19 -08:00
Hannes Rudolph
06c5c7f980
feat: update OpenAI and Gemini tool preferences (#10170) 2025-12-17 19:46:33 -08:00
roomote[bot]
f899de1f53
fix: add userAgentAppId to Bedrock embedder for code indexing (#10166)
Adds userAgentAppId configuration to the BedrockRuntimeClient in the
code indexing embedder, matching the implementation pattern already
used in the main Bedrock API provider.

This enables proper user agent identification in CloudTrail AWS requests
when using Bedrock for code indexing embeddings.

Fixes #10165

Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-17 20:20:36 -05:00
Daniel
45dbe4d028
feat(telemetry): extract error messages from JSON payloads for better PostHog grouping (#10163) 2025-12-17 13:59:17 -08:00
github-actions[bot]
495664c261
Changeset version bump (#10162)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-17 13:28:34 -08:00
Chris Estreich
09552fa49b
Release v3.36.11 (#10161) 2025-12-17 13:08:25 -08:00
Daniel
2a2411d37c
fix: enable native tools by default for OpenAI compatible provider (#10159) 2025-12-17 13:02:45 -08:00
Daniel
aa3b4ae9cc
fix: normalize MCP tool schemas for Bedrock and OpenAI strict mode (#10148) 2025-12-17 13:01:48 -08:00
Hannes Rudolph
0b86796b8f
[feat] Claude Code Provider Native Tool Calling (#10077)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-12-17 12:57:27 -08:00
roomote[bot]
9e9d77934c
feat: enable native tool calling by default for Z.ai models (#10158)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-17 12:26:17 -08:00
roomote[bot]
eac0d62cfc
fix: support AWS GovCloud and China region ARNs in Bedrock provider (#10157)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-17 14:50:11 -05:00
Daniel
affa5f2019
fix(ROO-202): refresh Roo models cache with session token on auth state change (#10156) 2025-12-17 14:23:24 -05:00
Daniel
ed631dccc3
fix: remove dots and colons from MCP tool names for Bedrock compatibility (#10152) 2025-12-17 08:47:52 -08:00
Daniel
4693b9eb06
fix(bedrock): convert tool_result to XML text when native tools disabled (#10155) 2025-12-17 08:46:34 -08:00
github-actions[bot]
752a95087e
Changeset version bump (#10154)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-17 11:23:17 -05:00
Matt Rubens
275ccf6729
Release v3.36.10 (#10153) 2025-12-17 11:19:03 -05:00
Hannes Rudolph
cc3bc35091
feat: add gemini-3-flash-preview model (#10151) 2025-12-17 11:07:56 -05:00
Hannes Rudolph
970deead5b
fix(deepseek): preserve reasoning_content during tool call sequences (#10141)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-17 11:05:55 -05:00
John Richmond
2863b1c3f1
Update next.js to ~15.2.8 (#10140) 2025-12-16 21:28:51 -08:00
Hannes Rudolph
d274812332
feat(deepseek): implement interleaved thinking mode for deepseek-reasoner (#9969) 2025-12-16 15:13:43 -08:00
Hannes Rudolph
f414ba41a6
fix: correct token counting for context truncation display (#9961) 2025-12-16 16:12:02 -07:00
github-actions[bot]
efef269a67
Changeset version bump (#10137)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-16 13:16:10 -08:00
Chris Estreich
6270c4b156
Release v3.36.9 (#10138) 2025-12-16 13:05:57 -08:00
github-actions[bot]
b4c6758546
Changeset version bump (#10120)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-16 12:44:20 -08:00
Hannes Rudolph
84c5d2fd61
feat(evals): improve evals UI with tool groups and duration fix (#10133)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-16 12:43:39 -08:00
Daniel
c7cdf8398e
fix: validate tool_result IDs in delegation resume flow (#10135) 2025-12-16 12:42:58 -08:00
roomote[bot]
caf6142201
feat: add full error details to streaming failure dialog (#10131)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: cte <cestreich@gmail.com>
2025-12-16 10:34:16 -08:00
Daniel
a7b192adca
fix: normalize tool call IDs for cross-provider compatibility via OpenRouter (#10102) 2025-12-16 09:34:35 -08:00
Daniel
93bc8c4f1d
fix: add additionalProperties: false to nested MCP tool schemas (#10109) 2025-12-16 09:22:16 -08:00
Chris Estreich
596783d365
Release v3.36.8 (#10119) 2025-12-15 21:55:37 -08:00
Daniel
a9a15b37fd
feat: enable native tools by default for multiple providers (#10059) 2025-12-15 21:37:00 -08:00
Daniel
6619d46377
feat(anthropic): enable native tools by default and add telemetry tracking (#10021) 2025-12-15 21:32:44 -08:00
Hannes Rudolph
69307ba62e
fix: prevent race condition from deleting wrong API messages (#10113)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-12-15 21:23:05 -08:00
roomote[bot]
ef3c88c47e
feat: remove strict ARN validation for Bedrock custom ARN users (#10110)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-15 23:25:41 -05:00
Matt Rubens
a6caa551d0
Remove the description from bedrock service tiers (#10118) 2025-12-15 23:05:05 -05:00
Matt Rubens
be894a6fc6
Release: v1.92.0 (#10116) 2025-12-15 22:03:49 -05:00
Matt Rubens
3502f41e75
Add config to control public sharing (#10105)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-15 21:58:15 -05:00
John Richmond
bf81fa7237
feat(read-file): implement incremental token-budgeted file reading (#10052) 2025-12-15 14:41:42 -08:00
Bruno Bergher
1ff5d1deb6
web: Fixes link to provider pricing page (#10107) 2025-12-15 13:28:25 -08:00
roomote[bot]
5929e2686f
feat: add metadata to error details dialog (#10050)
* feat: add metadata to error details dialog

- Prepends extension version, provider, model, and repository info to error details
- Helps users provide better bug reports with context
- Uses useExtensionState and useSelectedModel hooks for data

* Tweaks

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
2025-12-15 19:05:43 +00:00
Daniel
1f3ab2b493
fix: prevent duplicate MCP tools error by deduplicating servers at source (#10096) 2025-12-15 14:02:04 -05:00
github-actions[bot]
1d4fc52485
Changeset version bump (#10092)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-15 09:47:42 -05:00
Matt Rubens
12d9fadf47
chore: add changeset for v3.36.7 (#10091) 2025-12-15 09:43:37 -05:00
Chris Estreich
c7139167ce
Move isToolAllowedForMode out of shared directory (#10089) 2025-12-15 02:18:08 -08:00
Hannes Rudolph
325410955c
feat(web-evals): improve run logs and formatters (#10081) 2025-12-14 17:36:00 -08:00
John Richmond
a80a74aa02
Capture more of OpenRouter's provider specific error details (#10073)
* Capture more of OpenRouter's provider specific error details

* Actually match the openrouter structure
2025-12-14 13:28:32 -08:00
roomote[bot]
9f3122fe28
feat: add AWS Bedrock service tier support (#9955)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-14 15:26:44 -05:00
roomote[bot]
1be8a99b89
feat: Add Amazon Nova 2 Lite model to Bedrock provider (#9830)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-14 15:26:18 -05:00
Hannes Rudolph
e4b9568dc9
feat(openrouter): add improvements to openrouter provider (#10082) 2025-12-14 12:29:34 -07:00
Hannes Rudolph
0fbbe66496
feat: remove auto-approve toggles for to-do and retry actions (#10062) 2025-12-13 19:26:06 -07:00
Hannes Rudolph
a3b258ad62
fix: use JavaScript-based hover for checkpoint menu visibility (#10056) 2025-12-12 14:06:16 -08:00
github-actions[bot]
4771de1ebc
Changeset version bump (#10058)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-12 14:04:24 -08:00
Chris Estreich
0742335478
Release v3.36.6 (#10057) 2025-12-12 13:52:54 -08:00
Daniel
3521270888
feat: sanitize MCP server/tool names for API compatibility (#10054) 2025-12-12 13:46:50 -08:00
John Richmond
f60c14e716
Release: v1.91.0 (#10055)
chore: bump version to v1.91.0
2025-12-12 13:07:32 -08:00
roomote[bot]
8da4d3d8d8
feat: add WorkspaceTaskVisibility type for organization cloud settings (#10020)
* feat: add WorkspaceTaskVisibility type and workspaceTaskVisibility property to OrganizationCloudSettings

* refactor: create workspaceTaskVisibilitySchema and derive WorkspaceTaskVisibility type from it

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-12 12:45:28 -08:00
Daniel
0f8fac9eb5
fix: show tool protocol dropdown for LiteLLM provider (#10053) 2025-12-12 11:33:23 -08:00
Daniel
ba7c5535ba
feat: add tool alias support for model-specific tool customization (#9989)
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2025-12-12 11:05:21 -08:00
Daniel
23a214c519
fix: extract raw error message from OpenRouter metadata (#10039)
OpenRouter wraps upstream provider errors in a generic message but includes
the actual error in metadata.raw. This change:

- Adds OpenRouterErrorResponse interface for proper typing
- Creates handleStreamingError() helper for DRY error handling
- Extracts metadata.raw for actionable error messages in PostHog
- Includes nested error structure so getErrorMessage() can extract raw message

Before: PostHog receives '400 Provider returned error' (generic)
After: PostHog receives 'Model xyz not found' (actionable)

This enables proper error tracking and debugging via PostHog telemetry.
2025-12-12 10:42:36 -08:00
roomote[bot]
d976a9b296
fix: cancel auto-approval timeout when user starts typing (#9937)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-12 10:25:14 -05:00
Bruno Bergher
495b5c6c6e
ux: improve auto-approve timer visibility in follow-up suggestions (#10048)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-12 09:51:00 -05:00
github-actions[bot]
f97b5155ac
Changeset version bump (#10038)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-11 15:09:55 -07:00
Chris Estreich
4dabd52767
Release v3.36.5 (#10037) 2025-12-11 13:44:39 -08:00
Chris Estreich
5072ff1408
Revert the 3.6.5 release (we halted it) (#10036) 2025-12-11 13:26:15 -08:00
Chris Estreich
7766b91360
Revert "fix: merge settings and versionedSettings for Roo provider models" (#10034) 2025-12-11 13:19:37 -08:00
Hannes Rudolph
c513df5ade
fix: merge settings and versionedSettings for Roo provider models (#10030) 2025-12-11 13:14:12 -08:00
github-actions[bot]
21c2d93ba9
Changeset version bump (#10032)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-11 13:08:38 -08:00
Chris Estreich
526e1954ba
Release v3.36.5 (#10029) 2025-12-11 13:02:56 -08:00
Daniel
8a68b04c27
fix: filter orphaned tool_results when more results than tool_uses (#10027) 2025-12-11 12:48:40 -08:00
Hannes Rudolph
51dbccf2e6
feat: add gpt-5.2 model to openai-native provider (#10024) 2025-12-11 13:16:31 -07:00
Daniel
87317091ee
fix: add missing tool_result blocks to prevent API errors (#10015) 2025-12-11 12:02:06 -08:00
Hannes Rudolph
47320dca62
fix: handle empty Gemini responses and reasoning loops (#10007) 2025-12-11 08:55:47 -08:00
roomote[bot]
f9cfc66803
fix: add general API endpoints for Z.ai provider (#9894)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-11 07:38:26 -08:00
Chris Estreich
a1d3a43aa5
Update roomotes.yml (#10008) 2025-12-10 20:43:28 -08:00
Hannes Rudolph
6a30d9488e
chore: remove list_code_definition_names tool (#10005)
Co-authored-by: cte <cestreich@gmail.com>
2025-12-10 20:32:06 -08:00
Hannes Rudolph
0cbaed7e7b
feat: add toggle for Enter key behavior in chat input (#10002) 2025-12-10 20:31:43 -08:00
Hannes Rudolph
483e70c47b
fix: apply versioned settings on nightly builds (#9997) 2025-12-10 14:28:13 -08:00
Chris Estreich
2a70a2ec0e
@roo-code/types v1.90.0 (#9998) 2025-12-10 14:14:38 -08:00
Hannes Rudolph
f05dd59a2b
Remove Glama provider (#9801) 2025-12-10 14:08:29 -08:00
Daniel
1cf6ae6c93
feat(telemetry): add app version to exception captures and filter 402 errors (#9996)
Co-authored-by: cte <cestreich@gmail.com>
2025-12-10 14:06:51 -08:00
github-actions[bot]
380a57823c
Changeset version bump (#9995)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-12-10 11:46:28 -08:00
Chris Estreich
2cd772cb7f
Release v3.36.4 (#9994) 2025-12-10 11:38:54 -08:00
Daniel
fda020a418
fix: filter out 429 rate limit errors from API error telemetry (#9987)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: cte <cestreich@gmail.com>
2025-12-10 11:32:00 -08:00
Daniel
5a4315f58f
fix: prevent premature rawChunkTracker clearing for MCP tools (#9993) 2025-12-10 10:53:25 -08:00
roomote[bot]
e092e77901
Fix: Correct TODO list display order in chat view (ROO-107) (#9991)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-10 10:43:03 -08:00
roomote[bot]
ab18bf3e50
feat: add error details modal with on-demand display (#9985)
* feat: add error details modal with on-demand display

- Add errorDetails prop to ErrorRow component
- Show Info icon on hover in error header when errorDetails is provided
- Display detailed error message in modal dialog on Info icon click
- Add Copy to Clipboard button in error details modal
- Update generic error case to show localized message with details on demand
- Add i18n translations for error details UI

* UI Tweaks

* Properly handles error details

* i18n

* Lighter visual treatment for errors

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
2025-12-10 16:41:17 +00:00
Chris Estreich
36ef6034e0
Add missing release notes for v3.36.3 (#9979) 2025-12-09 22:43:11 -08:00
Chris Estreich
03912d8399
Delete changeset files (#9977) 2025-12-09 22:29:33 -08:00
Hannes Rudolph
048e7f3502
feat(gemini): add minimal and medium reasoning effort levels (#9973)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: cte <cestreich@gmail.com>
2025-12-09 21:50:14 -08:00
Chris Estreich
0cf5b28569
v3.36.3 (#9972) 2025-12-09 21:16:27 -08:00
Hannes Rudolph
df5fdefea3
fix: respect explicit supportsReasoningEffort array values (#9970) 2025-12-09 20:59:13 -08:00
Daniel
f472a8298e
fix: validate and fix tool_result IDs before API requests (#9952)
Co-authored-by: cte <cestreich@gmail.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2025-12-09 20:37:37 -08:00
Daniel
24eb6ae984
feat: add API error telemetry to OpenRouter provider (#9953)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-09 16:30:29 -08:00
Hannes Rudolph
29d6f6d281
fix: always show tool protocol selector for openai-compatible (#9966) 2025-12-09 16:22:58 -08:00
Matt Rubens
ada7411cd3
Tweaks to baseten model definitions (#9866) 2025-12-09 16:17:52 -08:00
Matt Rubens
721b02e58c
Add a way to save screenshots from the browser tool (#9963)
* Add a way to save screenshots from the browser tool

* fix: use cross-platform paths in BrowserSession screenshot tests

* fix: validate screenshot paths to prevent filesystem escape

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-09 16:12:36 -08:00
Hannes Rudolph
1898848d95
feat(deepseek): update DeepSeek models to V3.2 with new pricing (#9962)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-12-09 15:46:04 -08:00
Hannes Rudolph
4608c979e0
fix: return undefined instead of 0 for disabled API timeout (#9960) 2025-12-09 15:32:26 -07:00
Matt Rubens
0068d1fee3
Revert "feat: change defaultToolProtocol default from xml to native" (#9956) 2025-12-09 13:09:28 -08:00
Hannes Rudolph
83787a76ef
feat(roo): add versioned settings support with minPluginVersion gating (#9934) 2025-12-09 12:54:15 -08:00
Hannes Rudolph
f89a6bef30
fix: display actual API error message instead of generic text on retry (#9954) 2025-12-09 12:53:20 -08:00
Hannes Rudolph
e142906e7d
feat: add announcement support CTA and social icons (#9945) 2025-12-09 11:09:15 -08:00
Bruno Bergher
8a98f140dc
feat: Make Architect save to /plans and gitignore it (#9944)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-09 06:51:43 -08:00
Hannes Rudolph
c103a4a639
feat: streaming tool stats + token usage throttling (#9926)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-08 19:40:12 -08:00
roomote[bot]
54a52655ac
feat: forbid time estimates in architect mode (#9931)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-08 19:06:07 -08:00
Matt Rubens
5bde2e52de
Remove defaultTemperature from Roo provider configuration (#9932)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-08 18:31:49 -08:00
Daniel
2efebf5da9
fix: add finish_reason processing to xai.ts provider (#9929) 2025-12-08 18:03:40 -08:00
Dennise Bartlett
3356267aa0
Add timeout to OpenAI Compatible Provider Client (#9898) 2025-12-08 17:36:53 -08:00
Hannes Rudolph
de00ab10e2
refactor: consolidate ThinkingBudget components and fix disable handling (#9930) 2025-12-08 17:23:49 -08:00
Matt Rubens
93a43e427e
Try to make OpenAI errors more useful (#9639) 2025-12-08 17:21:29 -08:00
roomote[bot]
375c103bd3
fix: exclude apply_diff from native tools when diffEnabled is false (#9920)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-08 17:20:44 -08:00
Daniel
ee48b3a1ae
fix: suppress 'ask promise was ignored' error in handleError (#9914) 2025-12-08 17:19:45 -08:00
Daniel
88a0bed27f
fix: process finish_reason to emit tool_call_end events (#9927) 2025-12-08 13:27:55 -08:00
Hannes Rudolph
754b701cc8
feat: configure tool preferences for xAI models (#9923) 2025-12-08 11:33:55 -08:00
Chris Estreich
6f602fc88e
Improve cloud job error logging for RCC provider errors (#9924) 2025-12-08 11:15:34 -08:00
Hannes Rudolph
fba8508b10
feat: add search_replace native tool for single-replacement operations (#9918)
Adds a new search_replace tool that performs a single search and replace
operation on a file, requiring the old_string to uniquely identify the
target text with 3-5 lines of context.

Parameters:
- file_path: Path to file (relative or absolute)
- old_string: Text to find (must be unique in file)
- new_string: Replacement text (must differ from old_string)
2025-12-08 10:45:55 -08:00
Andrew Ginns
efbf427631
feat: add xhigh reasoning effort for gpt-5.1-codex-max (#9900)
* feat: add xhigh reasoning effort for gpt-5.1-codex-max

* fix: Address openai-native.spec.ts test failure

* chore: Localisation of 'Extra high'

* chore: revert unrelated CustomModesManager refactoring

---------

Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2025-12-08 10:17:25 -08:00
Hannes Rudolph
1370cb04f7
fix: use foreground color for context-management icons (#9912) 2025-12-08 08:17:47 -07:00
roomote[bot]
bea7626a9d
fix: add Kimi, MiniMax, and Qwen model configurations for Bedrock (#9905)
* fix: add Kimi, MiniMax, and Qwen model configurations for Bedrock

- Add moonshot.kimi-k2-thinking with 32K max tokens and 256K context
- Add minimax.minimax-m2 with 16K max tokens and 230K context
- Add qwen.qwen3-next-80b-a3b with 8K max tokens and 262K context
- Add qwen.qwen3-coder-480b-a35b-v1:0 with 8K max tokens and 262K context

All models configured with native tool support and appropriate pricing.

Fixes #9902

* fix: add preserveReasoning flag and update Kimi K2 context window

- Added preserveReasoning: true to moonshot.kimi-k2-thinking model
- Added preserveReasoning: true to minimax.minimax-m2 model
- Updated Kimi K2 context window from 256_000 to 262_144

These changes ensure:
1. Reasoning traces are properly preserved for both models
2. Roo correctly recognizes task completion
3. Tool calls within reasoning traces are handled appropriately
4. Context window matches AWS Console specification

* fix: update MiniMax M2 context window to 196_608 for Bedrock

Based on AWS CLI testing, the actual context window limit for MiniMax M2
on Bedrock is 196,608 tokens, not 230,000 as initially configured.

* Update packages/types/src/providers/bedrock.ts

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-12-08 10:16:43 -05:00
Matt Rubens
1f7e1ee630
Make eval runs deleteable (#9909) 2025-12-07 23:30:28 -05:00
Hannes Rudolph
8aa13467d3
Refactor: Unified context-management architecture with improved UX (#9795)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-12-07 17:43:48 -05:00
roomote[bot]
946fd0390f
feat: change defaultToolProtocol default from xml to native (#9892)
* feat: change defaultToolProtocol to default to native instead of xml

* fix: add missing getMcpHub mock to Subtask Rate Limiting tests

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-06 11:51:16 -05:00
Matt Rubens
2eae32104e
Default to using native tools when supported on openrouter (#9878) 2025-12-05 23:01:33 -05:00
Matt Rubens
4a5cbcba86
Stop making count_tokens requests (#9884) 2025-12-05 22:53:35 -05:00
Daniel
dd92453276
refactor: decouple tools from system prompt (#9784) 2025-12-05 16:26:47 -05:00
Hannes Rudolph
9d5eca92aa
Update xAI models catalog (#9872) 2025-12-05 16:21:59 -05:00
Hannes Rudolph
9f4dcfc0e6
fix: sanitize removed/invalid API providers to prevent infinite loop (#9869) 2025-12-05 16:03:19 -05:00
Bruno Bergher
d285d01853
web: Product pages (#9865)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-12-05 14:01:41 -05:00
Alex Ker
642a187030
(update): Add DeepSeek V3-2 Support for Baseten Provider (#9861)
Co-authored-by: AlexKer <AlexKer@users.noreply.github.com>
2025-12-05 12:11:08 -05:00
Chris Estreich
5c501600cd
Better error logs for parseToolCall exceptions (#9857) 2025-12-04 23:06:58 -08:00
github-actions[bot]
65c750d1be
Changeset version bump (#9856)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-05 01:07:34 -05:00
Matt Rubens
1b151c0c26
Release v3.36.2 (#9855) 2025-12-05 01:03:48 -05:00
Chris Estreich
6bdefb8de3
Fix chutes model fetching (#9854) 2025-12-05 00:57:06 -05:00
Hannes Rudolph
e633c62e70
chore: restrict gpt-5 tool set to apply_patch (#9853) 2025-12-05 00:35:45 -05:00
Hannes Rudolph
a3de2935b3
feat: add dynamic settings support for Roo models from API (#9852) 2025-12-04 23:57:00 -05:00
github-actions[bot]
247bf017e0
Changeset version bump (#9840)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-04 22:44:20 -05:00
Matt Rubens
39a549f056
Release v3.36.1 (#9851) 2025-12-04 22:39:24 -05:00
Matt Rubens
3e3fa327e9
Delete .changeset/symlink-commands.md 2025-12-04 22:38:58 -05:00
Hannes Rudolph
bea7d81510
feat: add gpt-5.1-codex-max model to OpenAI provider (#9848) 2025-12-04 22:30:07 -05:00
Daniel
9f111e174b
fix: handle unknown/invalid native tool calls to prevent extension freeze (#9834) 2025-12-04 22:21:09 -05:00
Matt Rubens
79458600aa
Revert "Exclude the ID from Roo reasoning details" (#9850) 2025-12-04 22:16:01 -05:00
Hannes Rudolph
c10d1d9ffc
feat(web-evals): add multi-model launch and UI improvements (#9845)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-04 20:48:38 -05:00
Hannes Rudolph
630c8bce90
FIX + feat: add MessageManager layer for centralized history coordination (#9842) 2025-12-04 20:48:31 -05:00
Hannes Rudolph
a1d392f5cc
fix: prevent cascading truncation loop by only truncating visible messages (#9844) 2025-12-04 20:41:49 -05:00
Matt Rubens
581256dec0
Exclude the ID from Roo reasoning details (#9847) 2025-12-04 20:40:27 -05:00
Matt Rubens
b9e2fd16b7
Revert "fix: sanitize reasoning_details IDs to remove invalid characters" (#9846) 2025-12-04 20:16:58 -05:00
John Richmond
c719117fb4
Be safer about large file reads (#9843)
validateFileTokenBudget wasn't being called considering
the output budget.
2025-12-04 13:35:26 -08:00
Hannes Rudolph
8433eafb05
feat(evals-ui): Add filtering, bulk delete, tool consolidation, and run notes (#9837) 2025-12-04 14:28:37 -07:00
Daniel
ae655c5d29
fix: sanitize reasoning_details IDs to remove invalid characters (#9839) 2025-12-04 15:53:10 -05:00
Matt Rubens
63f6fecb1a
feat: add symlink support for slash commands in .roo/commands folder (#9838)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-04 15:41:10 -05:00
Hannes Rudolph
61aabe715c
ChatView: smoother stick-to-bottom during streaming (#8999) 2025-12-04 14:38:17 -05:00
Chris Estreich
ffff38be2c
Always enabled reasoning for models that require it (#9836) 2025-12-04 10:52:47 -08:00
Bruno Bergher
29385e01d7
fix: Overly round follow-up question suggestions (#9829)
Not that rounded
2025-12-04 16:31:04 +00:00
Matt Rubens
3178113402
Ignore input to the execa terminal process (#9827) 2025-12-04 10:55:58 -05:00
Bruno Bergher
0ed5f3ccd4
web: New Pricing Page (#9821)
* Removes Pro, restructures pricing page

* Solves provider/credits

* Update apps/web-roo-code/src/app/pricing/page.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* Updates agent landing pages to not mention a trial that doesn't exist

* Updates agent-specific landing pages to reflect new home and trial

* Indicate the agent landing page the user came from

* Clean up the carousel

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-12-04 15:40:07 +00:00
Bruno Bergher
0eddc97d13
ux: improved error messages and documentation links (#9777)
* Minor ui tweaks

* Basic setup for richer API request errors

* Better errors messages and contact link

* i18n

* Update webview-ui/src/i18n/locales/en/chat.json

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* Update webview-ui/src/i18n/locales/en/chat.json

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* Empty better than null

* Update webview-ui/src/i18n/locales/nl/chat.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* i18n

* Start retryAttempt at 1

* Reverse retryAttempt number, just ommit it from the message

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-12-04 15:25:23 +00:00
github-actions[bot]
7df268ce48
Changeset version bump (#9828)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-04 09:22:15 -05:00
Matt Rubens
a698875315
Release v3.36.0 (#9814) 2025-12-04 09:17:33 -05:00
Seb Duerr
94c997c9d6
Fix/cerebras conservative max tokens (#9804)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-04 00:43:22 -05:00
Matt Rubens
573cfc31fd
Default to native tools for all models in the Roo provider (#9811)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-04 00:40:53 -05:00
Matt Rubens
d065b881e3
Fix the download count on the homepage (#9807) 2025-12-03 23:46:00 -05:00
John Richmond
72a6805b4b
Update next.js (#9799) 2025-12-03 20:17:28 -08:00
Hannes Rudolph
837ce3f334
chore: hide parallel tool calls experiment and disable feature (#9798) 2025-12-03 17:07:13 -07:00
roomote[bot]
ec551b1ae0
feat: add reasoning_details support to Roo provider (#9796)
- Add currentReasoningDetails accumulator to track reasoning details
- Add getReasoningDetails() method to expose accumulated details
- Handle reasoning_details array format in streaming responses
- Accumulate reasoning details by type-index key
- Support reasoning.text, reasoning.summary, and reasoning.encrypted types
- Maintain backward compatibility with legacy reasoning format
- Follows same pattern as OpenRouter provider

Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-03 18:47:21 -05:00
Daniel
ce229012a3
refactor: remove insert_content tool (#9751)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-03 16:33:22 -05:00
Chris Estreich
1879200964
Fix Vercel AI Gateway model fetching (#9791)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-03 11:46:15 -08:00
roomote[bot]
86edc01cb1
fix: remove omission detection logic to fix false positives (#9787)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-03 13:20:22 -05:00
Hannes Rudolph
23605bed93
fix: restore context when rewinding after condense (#8295) (#9665) 2025-12-03 11:40:39 -05:00
Matt Rubens
a4f4f35b46
Use search_and_replace for minimax (#9780) 2025-12-03 11:37:56 -05:00
github-actions[bot]
48dc4d98e3
Changeset version bump (#9783)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-03 11:27:41 -05:00
Matt Rubens
40a8e0cc11
Release v3.35.5 (#9781) 2025-12-03 11:23:39 -05:00
Matt Rubens
822343ccdf
Update model key for minimax in MODEL_DEFAULTS (#9778)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-03 10:58:46 -05:00
roomote[bot]
18117f0723
ux: Updates to CloudView (#9776)
* refactor: remove TabHeader and onDone callback from CloudView

- Removed TabHeader component from CloudView as it is no longer needed
- Removed onDone prop from CloudView component definition and usage
- Updated all test files to reflect the removal of onDone prop
- Kept Button import that was accidentally removed initially

* Updates upsell copy to reflect today's product

* Update webview-ui/src/components/cloud/CloudView.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update webview-ui/src/i18n/locales/ko/cloud.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update webview-ui/src/i18n/locales/zh-CN/cloud.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Test fixes

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-12-03 13:36:33 +00:00
SannidhyaSah
873a763ea7
feat: Add provider routing selection for OpenRouter embeddings (#9144) (#9693)
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
2025-12-02 22:59:55 -05:00
Chris Estreich
648e009b8d
Update the evals keygen command (#9754) 2025-12-02 19:44:11 -08:00
Matt Rubens
5b94eec473
Convert the Roo provider tools for OpenAI (#9769) 2025-12-02 22:34:23 -05:00
github-actions[bot]
74d1ed7276
Changeset version bump (#9764)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-02 19:49:48 -05:00
Matt Rubens
fbc0f80961
chore: add changeset for v3.35.4 (#9763) 2025-12-02 19:45:22 -05:00
Daniel
aa40988e11
fix: handle malformed native tool calls to prevent hanging (#9758)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-02 19:40:43 -05:00
roomote[bot]
9a1d7a673b
fix: remove reasoning toggles for GLM-4.5 and GLM-4.6 on z.ai provider (#9752)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-02 14:20:48 -05:00
Hannes Rudolph
be69ef901e
Refactor: Remove line_count parameter from write_to_file tool (#9667) 2025-12-02 13:39:37 -05:00
github-actions[bot]
c91a19fbe7
Changeset version bump (#9745)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-02 10:37:38 -05:00
Matt Rubens
562a799c5b
chore: add changeset for v3.35.3 (#9743) 2025-12-02 10:30:50 -05:00
Matt Rubens
aa507ad990
Add vendor confidentiality section to the system prompt for stealth models (#9742)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-12-02 10:23:54 -05:00
Bruno Bergher
9975a41be4
web: Homepage changes (#9675)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-12-02 10:10:45 -05:00
Matt Rubens
152af1474e
Switch to new welcome view (#9741) 2025-12-02 10:02:12 -05:00
github-actions[bot]
906c6f0de4
Changeset version bump (#9738)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-02 00:37:34 -05:00
Matt Rubens
954a6cbb43
chore: add changeset for v3.35.2 (#9737) 2025-12-02 00:34:18 -05:00
Matt Rubens
6f0addfab7
Assume all LiteLLM models support native tools (#9736) 2025-12-02 00:22:48 -05:00
Matt Rubens
700fe42669
Look for a tag in the Roo provider to default the model to native tool calling (#9735) 2025-12-02 00:12:57 -05:00
Matt Rubens
d2b274a9af
Allow models to contain default temperature (#9734) 2025-12-01 23:29:42 -05:00
Chris Estreich
b2b4f6411f
Pass app version to provider (#9730) 2025-12-01 16:04:33 -08:00
github-actions[bot]
ba7340f460
Changeset version bump (#9729)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-01 18:31:54 -05:00
Matt Rubens
e7043e5cea
chore: add changeset for v3.35.1 (#9728) 2025-12-01 18:27:12 -05:00
Chris Estreich
3f4f7c0c41
Better IPC error logging (#9727) 2025-12-01 15:02:34 -08:00
Daniel
edd7cc0986
fix: flush pending tool results before task delegation (#9726)
When tools are called in parallel (e.g., update_todo_list + new_task),
the tool results accumulate in userMessageContent but aren't saved to
API history until all tools complete. When new_task triggers delegation,
the parent is disposed before these pending results are saved, causing
400 errors when the parent resumes (missing tool_result for tool_use).

This fix:
- Adds flushPendingToolResultsToHistory() method in Task.ts that saves
  pending userMessageContent to API history
- Calls this method in delegateParentAndOpenChild() before disposing the
  parent task
- Safe for both native/XML protocols and sequential/parallel execution
  (returns early if there's nothing to flush)
2025-12-01 17:32:54 -05:00
Chris Estreich
9b18014b4b
chore: bump version to v1.89.0 (#9718) 2025-12-01 14:25:48 -08:00
github-actions[bot]
35d4634b80
Changeset version bump (#9725)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-01 16:51:25 -05:00
Matt Rubens
bfb3386785
chore: add changeset for v3.35.0 (#9724) 2025-12-01 16:44:24 -05:00
roomote[bot]
9dac7e7b63
fix: prevent navigation buttons from wrapping on smaller screens (#9721)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-01 16:39:28 -05:00
Daniel
ad28e12818
feat: add native tool support for LiteLLM provider (#9719) 2025-12-01 16:35:08 -05:00
Matt Rubens
be7659461a
Support tool calling in native ollama provider (#9696)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-01 15:28:01 -05:00
Matt Rubens
faa6c40ac1
Bedrock native tool calling (#9698) 2025-12-01 15:26:34 -05:00
Matt Rubens
8244f70d7b
Default grok code fast to native tools (#9717) 2025-12-01 15:07:05 -05:00
Matt Rubens
b5acebccf5
Add native tool support for vercel ai gateway (#9697)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-01 14:52:05 -05:00
Matt Rubens
eb120543e1
Add native tools support to Unbound (#9699)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-01 14:50:01 -05:00
Matt Rubens
0a2d1a41e4
Add NTC support for Cerebras (#9692) 2025-12-01 14:49:53 -05:00
Daniel
34c524f78e
feat(chutes): detect native tool support from API supported_features (#9715)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-12-01 12:57:26 -05:00
Silentflower
bf3e4d8f1f
fix: preserve tool_use blocks in summary for parallel tool calls (#9714)
Co-authored-by: huajiwuyan <huajiwuyan@gmail.com>
2025-12-01 11:17:45 -05:00
Matt Rubens
af7470908d
Remove TabContent wrapper from Modes and MCP (#9712) 2025-12-01 11:06:21 -05:00
Matt Rubens
48d3e4d2e8
Release: v1.88.0 (#9713) 2025-12-01 10:47:24 -05:00
Matt Rubens
75903052ae
Update a couple provider labels (#9711)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-01 10:44:12 -05:00
Bruno Bergher
49aad8576e
ux: Toolbar cleanup and settings consolidation (#9710)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-12-01 09:43:15 -05:00
Bruno Bergher
f26d5a479f
ux: Improvements to the new, RCC Provider centric onboarding flow (#9709)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-12-01 09:39:39 -05:00
Matt Rubens
4591e960ed
Add native tool calling for deepinfra (#9691) 2025-11-29 20:05:21 -05:00
Matt Rubens
ae29777062
Add Grok 4 Fast and Grok 4.1 Fast, plus xAI native tool calling (#9690)
* Add Grok 4 Fast and Grok 4.1 Fast

* Add native tool calling support
2025-11-29 19:41:42 -05:00
Hannes Rudolph
d2017c80cf
Add web-evals updates and kill run functionality (#9681)
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-29 13:08:56 -07:00
Hannes Rudolph
f9eb6d9cf3
feat: add debug buttons to view API and UI history (#9684)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-11-28 23:18:15 -05:00
Hannes Rudolph
933534896a
feat: add apply_patch native tool (#9663)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-28 23:07:03 -05:00
roomote[bot]
c688a6466e
fix: display install count in millions instead of thousands (#9677)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-28 20:36:34 -05:00
Daniel
127ecf6ddd
feat: enable native tool calls for Vertex Gemini models (#9678)
Add supportsNativeTools: true to all Gemini-based models in the Vertex
provider. The VertexHandler extends GeminiHandler which already has full
native tool handling logic implemented.

Models updated:
- gemini-3-pro-preview
- gemini-2.5-flash-preview-05-20:thinking
- gemini-2.5-flash-preview-05-20
- gemini-2.5-flash
- gemini-2.5-flash-preview-04-17:thinking
- gemini-2.5-flash-preview-04-17
- gemini-2.5-pro-preview-03-25
- gemini-2.5-pro-preview-05-06
- gemini-2.5-pro-preview-06-05
- gemini-2.5-pro
- gemini-2.5-pro-exp-03-25
- gemini-2.0-pro-exp-02-05
- gemini-2.0-flash-001
- gemini-2.0-flash-lite-001
- gemini-2.0-flash-thinking-exp-01-21
- gemini-1.5-flash-002
- gemini-1.5-pro-002
- gemini-2.5-flash-lite-preview-06-17
2025-11-28 13:48:55 -05:00
Daniel
59ee1c9d04
feat: add native tools support for OpenAI-compatible providers (#9676)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-28 11:59:32 -05:00
Daniel
5d020991bd
feat(groq): enable native tool support for models that support function calling (#9673)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-28 11:02:34 -05:00
Matt Rubens
53d1f43cc1
Include tool format in environment details (#9661) 2025-11-28 10:50:00 -05:00
Daniel
bd2c50142c
feat: add native tool support to Requesty provider (#9672)
- Import resolveToolProtocol and TOOL_PROTOCOL from @roo-code/types
- Add tools and tool_choice to completion params when native protocol is enabled
- Handle tool_call_partial chunks in streaming response
- Add comprehensive tests for native tool support
2025-11-28 10:38:58 -05:00
Daniel
b111d125c0
feat: enable native tool support for DeepSeek and Doubao models (#9671)
Add supportsNativeTools: true to DeepSeek and Doubao model definitions,
enabling native OpenAI-compatible tool calling for these providers.

Both providers already extend OpenAiHandler which has built-in support
for native tools, so this change is all that's needed to enable the feature.
2025-11-28 10:38:03 -05:00
Hannes Rudolph
e682c039de
feat: add search_and_replace tool for batch text replacements (#9549)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-27 21:19:10 -07:00
Hannes Rudolph
9b5f6392df
Metadata‑driven subtasks (no UI changes): automatic parent resume and single‑open safety (#9090) 2025-11-27 21:18:42 -07:00
Hannes Rudolph
3f0a6971ca
feat(web-evals): add task log viewing, export failed logs, and new run options (#9637)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-11-27 21:15:31 -07:00
Daniel
5a6dd58fcb
feat: add model-specific tool customization via excludedTools and includedTools (#9641)
* feat: add model-specific tool customization via excludedTools and includedTools

- Add excludedTools and includedTools to ModelInfo schema
- Implement applyModelToolCustomization helper to filter tools based on model config
- Integrate model tool filtering into filterNativeToolsForMode for native protocol
- Add comprehensive tests for tool customization functionality
- Wire up modelInfo through buildNativeToolsArray and Task.ts

This allows providers to override which native tools are available on a per-model basis via MODEL_DEFAULTS, enabling better control over tool selection for models with specific needs.

* feat: add customTools for opt-in only tools

- Add customTools array to ToolGroupConfig for defining opt-in only tools
- Update getToolsForMode() to exclude customTools from default tool set
- Modify applyModelToolCustomization() to include customTools only via includedTools
- Add tests for customTools functionality
- Add comprehensive documentation with usage examples

customTools allows defining tools that are NOT available by default,
even when a mode includes their group. These tools are only available
when explicitly included via a model's includedTools configuration.

This enables:
- Gradual rollout of experimental tools
- Model-specific specialized capabilities
- Safe experimentation without affecting default tool sets

* Add assertions for customTools tests per review feedback

* test: add tests for including customTools via includedTools

* Update src/core/prompts/tools/__tests__/filter-tools-for-mode.spec.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-11-27 13:45:32 -05:00
github-actions[bot]
b149e69823
Changeset version bump (#9658)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-27 13:02:36 -05:00
Matt Rubens
b8f2da10c2
chore: add changeset for v3.34.8 (#9657) 2025-11-27 12:58:36 -05:00
Daniel
d2d311e501
fix: race condition in new_task tool for native protocol (#9655)
The pendingNewTaskToolCallId was being set AFTER startSubtask() returned.
However, startSubtask() contains a 500ms delay during which the subtask
could complete. If the subtask completed during this window, completeSubtask()
would be called before pendingNewTaskToolCallId was set, causing it to
fall through to the XML protocol path and add a text message instead of
a proper tool_result block, breaking the API conversation structure.

This fix moves the pendingNewTaskToolCallId assignment to happen BEFORE
calling startSubtask(), ensuring the ID is set before the subtask starts.
If the subtask creation fails, the pending ID is cleared.
2025-11-27 12:30:55 -05:00
github-actions[bot]
400d0cd183
Changeset version bump (#9654)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-27 10:57:38 -05:00
Matt Rubens
1e34d3ded6
chore: add changeset for v3.34.7 (#9651) 2025-11-27 10:54:19 -05:00
Matt Rubens
520d4fb0be
Add 'taking you to cloud' screen after provider welcome (#9652) 2025-11-27 10:44:12 -05:00
Matt Rubens
5b64aa95f6
Support native tools in the anthropic provider (#9644)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-27 00:42:54 -05:00
Matt Rubens
254bd23c90
Moonshot native tool call support (#9646) 2025-11-27 00:08:36 -05:00
Matt Rubens
fb94eb3814
Enable native tool calling for z.ai (#9645) 2025-11-27 00:08:09 -05:00
Hannes Rudolph
f5ce56c696
fix(claude-code): disable native tools and temperature support (#9643) 2025-11-26 23:56:24 -05:00
Matt Rubens
b31e755739
Fix openrouter tool calls (#9642) 2025-11-26 22:29:49 -05:00
Daniel
4cdec7db8d
fix: create parent directories early in write_to_file to prevent ENOENT errors (#9640) 2025-11-26 19:53:10 -05:00
Daniel
867a5c79f9
fix: OpenRouter GPT-5 strict schema validation for read_file tool (#9633) 2025-11-26 19:37:36 -05:00
github-actions[bot]
ba09228015
Changeset version bump (#9632)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-26 18:10:00 -05:00
Matt Rubens
c1707422d4
Release v3.34.6 (#9631) 2025-11-26 18:05:34 -05:00
Matt Rubens
339a869ea9
Add fine grained tool streaming for OpenRouter Anthropic (#9629) 2025-11-26 18:02:16 -05:00
Hannes Rudolph
fb9c57e1d9
fix: filter non-Anthropic content blocks before sending to Vertex API (#9618) 2025-11-26 17:47:04 -05:00
Daniel
87d646316e
fix: convert line_ranges strings to lineRanges objects in native tool calls (#9627) 2025-11-26 17:34:54 -05:00
Daniel
b1765361dd
fix: defer new_task tool_result until subtask completes for native protocol (#9628) 2025-11-26 17:25:04 -05:00
roomote[bot]
7e17982c40
feat(bedrock): allow global inference selection when cross-region is enabled (#9616)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-26 17:13:19 -05:00
Hannes Rudolph
3208f6f6dc
feat: wire MULTIPLE_NATIVE_TOOL_CALLS experiment to OpenAI parallel_tool_calls (#9621) 2025-11-26 17:12:54 -05:00
Hannes Rudolph
240bc0b6b1
feat(mistral): add native tool calling support (#9625) 2025-11-26 17:12:04 -05:00
roomote[bot]
16f36896e2
fix: update default settings for inline terminal and codebase indexing (#9622)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-26 17:10:27 -05:00
Daniel
f3889195d7
fix: prevent model cache from persisting empty API responses (#9623) 2025-11-26 16:59:24 -05:00
Daniel
3cd3357808
fix: exclude access_mcp_resource tool when MCP has no resources (#9615) 2025-11-26 15:18:15 -05:00
Daniel
a8a44510d5
fix: restore content undefined check in WriteToFileTool.handlePartial() (#9614) 2025-11-26 11:16:47 -05:00
George Goranov
56c630ca92
Feature/bedrock embeddings support (#9475)
* feat: add AWS Bedrock support for codebase indexing

- Add bedrock as a new EmbedderProvider type
- Add AWS Bedrock embedding model profiles (titan-embed-text models)
- Create BedrockEmbedder class with support for Titan and Cohere models
- Add Bedrock configuration support to config manager and interfaces
- Update service factory to create BedrockEmbedder instances
- Add comprehensive tests for BedrockEmbedder
- Add localization strings for Bedrock support

Closes #8658

* fix: add missing bedrockOptions to loadConfiguration return type

* Fix various issues that the original PR missed.

* Remove debug logs

* Rename AWS Bedrock -> Amazon Bedrock

* Remove some 'as any's

* Revert README changes

* Add translations

* More translations

* Remove leftover code from a debugging session.

* fix: add bedrock to codebaseIndexModelsSchema and update brace-expansion override

- Add bedrock provider to codebaseIndexModelsSchema type definition to fix empty model dropdown in UI
- Update pnpm override for brace-expansion from '>=2.0.2' to '^2.0.2' to resolve ESM/CommonJS compatibility issues

* Improvements to AWS Bedrock embeddings support

- Enhanced bedrock.ts embedder implementation
- Added comprehensive test coverage in bedrock.spec.ts
- Updated config-manager.ts for better Bedrock configuration handling
- Improved service-factory.ts integration
- Updated embeddingModels.ts with Bedrock models
- Enhanced CodeIndexPopover.tsx UI for Bedrock options
- Added auto-populate test for CodeIndexPopover
- Updated pnpm-lock.yaml dependencies

* Restore openrouter config

* Remove debug log

* Fix config-manager.spec.ts unit test.

* Add translations for "optional"

* Revert unnecessary change related to open ia embedder

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Smartsheet-JB-Brown <jb.brown@smartsheet.com>
2025-11-26 08:58:58 -05:00
github-actions[bot]
3806b3d27d
Changeset version bump (#9604)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-26 00:51:15 -05:00
Matt Rubens
8a2d28fc55
chore: add changeset for v3.34.5 (#9603) 2025-11-26 00:46:00 -05:00
Hannes Rudolph
4442397507
feat(web-evals): enhance dashboard with dynamic tool columns and UX improvements (#9592)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-26 00:15:29 -05:00
Matt Rubens
3c989d3591
Revert "Add support for Roo Code Cloud as an embeddings provider" (#9602) 2025-11-26 00:08:39 -05:00
Matt Rubens
71e761e21b
Make single file read only apply to xml tools (#9600) 2025-11-26 00:08:00 -05:00
Matt Rubens
0fe55b9403
fix: update API handler when toolProtocol changes (#9599) 2025-11-25 23:54:12 -05:00
roomote[bot]
099ea6dc6a
feat: add Bedrock Opus 4.5 to global inference model list (#9595)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-25 22:22:56 -05:00
Daniel
05f35735f0
feat: enable multiple native tool calls per turn with failure guardrails (#9273) 2025-11-25 20:21:13 -05:00
Daniel
f173c9c2dc
feat: set native tools as default for minimax-m2 and claude-haiku-4.5 (#9586) 2025-11-25 16:24:02 -05:00
github-actions[bot]
37d2f59b2e
Changeset version bump (#9591)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-25 15:27:48 -05:00
Matt Rubens
a177cd8720
chore: add changeset for v3.34.4 (#9590) 2025-11-25 15:23:40 -05:00
Matt Rubens
0ba830bece
Add BFL models to openrouter (#9589) 2025-11-25 15:15:40 -05:00
Matt Rubens
c18b262d12
Make it clear that BFL Flux 2 is free (#9588) 2025-11-25 15:04:43 -05:00
Matt Rubens
e4847ed8d9
Add support for images api (#9587) 2025-11-25 14:18:14 -05:00
Daniel
311940b085
fix: preserve tool_use blocks in summary message during condensing with native tools (#9582) 2025-11-25 13:17:26 -05:00
Daniel
774b492eff
fix: preserve dynamic MCP tool names in native mode API history (#9559) 2025-11-25 13:16:34 -05:00
github-actions[bot]
86cdbff0a5
Changeset version bump (#9579)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-25 10:24:00 -05:00
Matt Rubens
a66cd8a841
chore: add changeset for v3.34.3 (#9578) 2025-11-25 10:19:29 -05:00
roomote[bot]
ed91271e76
feat: add Claude Opus 4.5 model to Bedrock provider (#9572)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-25 09:29:51 -05:00
roomote[bot]
9437103427
feat: Add contact links to About Roo Code settings page (#9570)
* feat: add contact links to About settings page

* Tweaks

* i18n

* Update webview-ui/src/components/settings/__tests__/About.spec.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-11-25 08:54:12 -05:00
roomote[bot]
2945b30191
fix: enable caching for Opus 4.5 model (#9568)
Added claude-opus-4-5-20251101 to the cache control switch statements
to enable prompt caching, matching the behavior of other Claude models.

Fixes #9567

Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-25 07:15:58 -05:00
Daniel
8949c2f6fe
Fix ask_followup_question streaming issue and add missing tool cases (#9561) 2025-11-25 00:11:16 -05:00
Matt Rubens
02425143d2
Add Opus 4.5 to Claude Code provider (#9560) 2025-11-25 00:06:57 -05:00
Daniel
0327f12751
feat: implement streaming for native tool calls (#9542) 2025-11-24 23:12:39 -05:00
Chris Estreich
cad6145241
Switch from asdf to mise-en-place in bare-metal evals setup script (#9548) 2025-11-24 15:39:47 -08:00
Matt Rubens
fb4f23537a
Add support for Roo Code Cloud as an embeddings provider (#9543) 2025-11-24 17:21:30 -05:00
github-actions[bot]
1e13533633
Changeset version bump (#9546)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-24 17:16:55 -05:00
Matt Rubens
68183c2658
Release v3.34.2 (#9545) 2025-11-24 17:13:17 -05:00
Daniel
a81c4216c7
feat: add claude-opus-4.5 to Anthropic and Vertex providers (#9541) 2025-11-24 16:06:00 -05:00
Daniel
c1ce48a416
feat: add claude-opus-4.5 to OpenRouter prompt caching and reasoning budget models (#9540) 2025-11-24 15:53:35 -05:00
Daniel
5336246f4d
fix: gracefully skip unsupported content blocks in Gemini transformer (#9537)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-24 15:14:21 -05:00
Matt Rubens
a8b366f3dd
Add Roo Code Cloud as an imagegen provider (#9528) 2025-11-24 15:11:35 -05:00
Daniel
a20d047417
fix: flush LiteLLM cache when credentials change on refresh (#9536) 2025-11-24 12:09:50 -05:00
Daniel
3ac5bec3fc
fix: ensure XML parser state matches tool protocol on config update (#9535) 2025-11-24 10:01:29 -05:00
Seb Duerr
becdb1ac1c
feat: update Cerebras models (#9527)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-24 00:57:40 -05:00
Daniel
b531075626
fix: support reasoning_details format for Gemini 3 models (#9506) 2025-11-24 00:47:25 -05:00
github-actions[bot]
d96f939dca
Changeset version bump (#9523)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-23 13:36:31 -05:00
Matt Rubens
c2d7f04c9d
3.34.1 (#9522) 2025-11-23 13:22:19 -05:00
Matt Rubens
1558df65b5
Track cloud synced messages (#9518) 2025-11-23 13:17:26 -05:00
Matt Rubens
98b06d84be
Remove double todo list (#9517) 2025-11-23 12:54:14 -05:00
Matt Rubens
cdc72750e4
Show the prompt for image gen (#9505) 2025-11-22 11:04:42 -05:00
Chris Estreich
2ca9eac9e0
Enable the Roo Code Cloud provider in evals (#9492) 2025-11-22 00:06:03 -08:00
github-actions[bot]
529c686804
Changeset version bump (#9496)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-21 23:05:41 -05:00
Matt Rubens
bc0daab6b1
chore: add changeset and announcement for v3.34.0 (#9495) 2025-11-21 23:02:15 -05:00
Matt Rubens
e31743c7e7
Revert "Revert "Wait to experiment until state is hydrated"" (#9494) 2025-11-21 22:06:32 -05:00
Daniel
513eebc9a9
Enhance native tool descriptions with examples and clarifications (#9486) 2025-11-21 21:59:54 -05:00
Hannes Rudolph
204c71c62f
Update webview-ui Vite config (#9493) 2025-11-21 18:46:35 -07:00
Matt Rubens
af021623cd
Try to fix build (#9490) 2025-11-21 19:15:54 -05:00
Matt Rubens
01971fa54e
Revert "Wait to experiment until state is hydrated" (#9491) 2025-11-21 19:13:32 -05:00
Matt Rubens
8d1602c1c7
Change baseten default model to glm for now (#9489) 2025-11-21 18:42:40 -05:00
Matt Rubens
e5648e8d14
Wait to experiment until state is hydrated (#9488) 2025-11-21 18:40:50 -05:00
Matt Rubens
16f8d30a7b
Pin the Roo provider to the top of the list (#9485) 2025-11-21 18:35:39 -05:00
Daniel
f6d3fdfff6
fix: copy model-level capabilities to OpenRouter endpoint models (#9483) 2025-11-21 16:05:26 -07:00
Alex Ker
fa764ba7f1
(feat): Add Baseten Provider (#9461)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: AlexKer <AlexKer@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-21 17:49:15 -05:00
Matt Rubens
7edc86bb52
Test a provider-oriented welcome screen (#9484)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-11-21 17:37:30 -05:00
Daniel
1dd223d240
fix: Make cancel button immediately responsive during streaming (#9448) 2025-11-21 17:34:17 -05:00
Daniel
842a4af17c
fix: implement model cache refresh to prevent stale disk cache (#9478) 2025-11-21 17:32:52 -05:00
Daniel
999ea686ab
fix: resolve apply_diff performance regression from PR #9456 (#9474) 2025-11-21 17:31:47 -05:00
Hannes Rudolph
ee93530076
Browser Use 2.0 (#8941)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-21 17:26:15 -05:00
Matt Rubens
8472bbb43b
Improvements to base openai compatible (#9462)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-21 16:42:19 -05:00
Daniel
a65e7807b1
fix: add fallback to yield tool calls regardless of finish_reason (#9476) 2025-11-21 16:04:38 -05:00
Matt Rubens
852e293610
Release: v1.87.0 (#9477) 2025-11-21 12:15:01 -05:00
github-actions[bot]
038f830bf6
Changeset version bump (#9460)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-20 23:23:10 -05:00
Matt Rubens
7977782d87
chore: add changeset for v3.33.3 (#9459) 2025-11-20 23:18:37 -05:00
Daniel
a49e81f37c
fix: improve search and replace symbol parsing (#9456) 2025-11-20 23:05:14 -05:00
Daniel
905181810e
feat: implement Minimax as Anthropic-compatible provider (#9455) 2025-11-20 22:53:00 -05:00
Daniel
3da6f81fac
fix: improve markdown formatting and add reasoning support (#9458) 2025-11-20 22:52:35 -05:00
Daniel
08027ad4fa
fix: send tool_result blocks for skipped tools in native protocol (#9457) 2025-11-20 22:52:27 -05:00
Daniel
5c5a893b50
Fix preserveReasoning flag to control API reasoning inclusion (#9453)
* feat: store reasoning in conversation history for all providers

* refactor: address review feedback

- Move comments inside else block
- Combine reasoning checks into single if block
- Make comments more concise

* refactor: make comments more concise

* Fix preserveReasoning flag to control API reasoning inclusion

Changes:
1. Removed hardcoded <think> tag logic in streaming
   - Previously hardcoded reasoning into assistant message text
   - Now passes reasoning to addToApiConversationHistory as parameter

2. Updated buildCleanConversationHistory to respect preserveReasoning flag
   - When preserveReasoning: true → reasoning block included in API requests
   - When preserveReasoning: false/undefined → reasoning stripped from API
   - Reasoning stored in history for all cases

3. Added temporary debug logs to base-openai-compatible-provider.ts
   - Shows preserveReasoning flag value
   - Logs reasoning blocks in incoming messages
   - Logs <think> tags in converted messages sent to API

* Fix: Use api.getModel() directly instead of cachedStreamingModel

Addresses review comment: cachedStreamingModel is set during streaming but
buildCleanConversationHistory is called before streaming starts. Using the
cached value could cause stale model info when switching models between requests.

Now directly uses this.api.getModel().info.preserveReasoning to ensure we
always check the current model's flag, not a potentially stale cached value.

* Clean up comments in Task.ts

Removed outdated comment regarding model's preserveReasoning flag.

* fix: remove unnecessary reasoningBlock variable in task reasoning logic
2025-11-20 20:31:49 -05:00
Daniel
7715158d51
Store reasoning in conversation history for all providers (#9451) 2025-11-20 19:59:53 -05:00
roomote[bot]
d389771d75
chore: update tar-fs to 3.1.1 via pnpm override (#9450)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-20 15:16:30 -08:00
John Richmond
341863f8cd
Update glob to ^11.1.0 (#9449) 2025-11-20 14:45:02 -08:00
Daniel
97cdc41937
fix: prevent duplicate environment_details when resuming cancelled tasks (#9442)
- Filter out complete environment_details blocks before appending fresh ones
- Check for both opening and closing tags to ensure we're matching complete blocks
- Prevents stale environment data from being kept during task resume
- Add tests to verify deduplication logic and edge cases
2025-11-20 17:03:02 -05:00
roomote[bot]
1589cc1849
feat: add Google Gemini 3 Pro Image Preview to image generation models (#9440)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-20 14:19:37 -05:00
Hannes Rudolph
f7d6daedff
Fix OpenAI Native parallel tool calls for native protocol (#9433)
Fixes an issue where using the OpenAI Native provider together with Native Tool Calling could cause OpenAI’s Responses API to fail with errors like:
2025-11-20 09:38:33 -07:00
Matt Rubens
1201b0fd8d
Revert "Fix Marketplace crash by removing wildcard activation event" (#9432) 2025-11-20 10:49:41 -05:00
Hannes Rudolph
6a98ffb817
Fix Marketplace crash by removing wildcard activation event (#9423) 2025-11-20 10:29:07 -05:00
Daniel
0851769450
Improve read_file tool description with examples (#9422)
* Improve read_file tool description with examples

- Add explicit JSON structure documentation
- Include three concrete examples (single file, with line ranges, multiple files)
- Clarify that 'path' is required and 'line_ranges' is optional
- Better explain line range format (1-based inclusive)

This addresses agent confusion by providing clear examples similar to the XML tool definition.

* Make read_file tool dynamic based on partialReadsEnabled setting

- Convert read_file from static export to createReadFileTool() factory function
- Add getNativeTools() function that accepts partialReadsEnabled parameter
- Create buildNativeToolsArray() helper to encapsulate tool building logic
- Update Task.ts to build native tools dynamically using maxReadFileLine setting
- When partialReadsEnabled is false, line_ranges parameter is excluded from schema
- Examples and descriptions adjust based on whether line ranges are supported

This matches the behavior of the XML tool definition which dynamically adjusts
its documentation based on settings, reducing confusion for agents.
2025-11-20 07:21:48 -05:00
github-actions[bot]
4ae0fc5f02
Changeset version bump (#9421)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-20 00:00:36 -05:00
Matt Rubens
783b6b1bd0
Release v3.33.2 (#9420) 2025-11-19 23:56:08 -05:00
Matt Rubens
575b09f834
Show zero price for free models (#9419) 2025-11-19 23:18:38 -05:00
Daniel
5260123689
perf: reduce excessive getModel() calls & implement disk cache fallback (#9410) 2025-11-19 23:13:39 -05:00
John Richmond
f1bf4360fc
Add a RCC credit balance display (#9386)
* Add a RCC credit balance display

* Replace the provider docs with the balance when logged in

* PR feedback

---------

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-19 21:36:19 -05:00
Hannes Rudolph
e618d881d6
feat: enable native tool calling for gemini provider (#9343)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-19 16:14:24 -05:00
roomote[bot]
ee19904b29
feat: migrate PostHog client to ph.roocode.com (#9402)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-19 14:44:22 -05:00
Daniel
61fc39176d
fix: preserve user images in native tool call results (#9401) 2025-11-19 14:39:17 -05:00
github-actions[bot]
18c4d1ac41
Changeset version bump (#9384)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-19 00:04:54 -05:00
Matt Rubens
ce5479a4ca
Release v3.33.1 (#9383) 2025-11-19 00:00:32 -05:00
Hannes Rudolph
840f421673
Fix Gemini thought signature validation and token counting errors (#9380)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-18 23:30:10 -05:00
Daniel
89068c4ff9
fix: Include nativeArgs in tool repetition detection (#9377)
* fix: Include nativeArgs in tool repetition detection

Fixes false positive 'stuck in a loop' error for native protocol tools
like read_file that store parameters in nativeArgs instead of params.

Previously, the ToolRepetitionDetector only compared the params object,
which was empty for native protocol tools. This caused all read_file
calls to appear identical, triggering false loop detection even when
reading different files.

Changes:
- Updated serializeToolUse() to include nativeArgs in comparison
- Added comprehensive tests for native protocol scenarios
- Maintains backward compatibility with XML protocol tools

Closes: Issue reported in Discord about read_file loop detection

* Try to use safe-stable-stringify in the tool repetition detector

---------

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-18 21:20:29 -05:00
roomote[bot]
7c079453dc
feat: add toolProtocol property to PostHog tool usage telemetry (#9374)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-18 20:29:58 -05:00
Daniel
271d01bada
fix: Update tools to return structured JSON for native protocol (#9373) 2025-11-18 20:01:15 -05:00
Hannes Rudolph
55e9c880d0
fix: gemini maxOutputTokens and reasoning config (#9375)
* fix: gemini maxOutputTokens and reasoning config

* test: tighten gemini reasoning typings
2025-11-18 19:52:50 -05:00
Daniel
0d72471956
fix: ensure no XML parsing when protocol is native (#9371)
* fix: ensure no XML parsing when protocol is native

* refactor: remove redundant non-null assertions
2025-11-18 18:30:57 -05:00
Matt Rubens
bc6fad1f9d
Add native tool calling support to OpenAI-compatible (#9369)
* Add native tool calling support to OpenAI-compatible

* Fix OpenAI strict mode schema validation by adding converter methods to BaseProvider

- Add convertToolsForOpenAI() and convertToolSchemaForOpenAI() methods to BaseProvider
- These methods ensure all properties are in required array and convert nullable types
- Remove line_ranges from required array in read_file tool (converter handles it)
- Update OpenAiHandler and BaseOpenAiCompatibleProvider to use helper methods
- Eliminates code duplication across multiple tool usage sites
- Fixes: OpenAI completion error: 400 Invalid schema for function 'read_file'

---------

Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-18 18:20:51 -05:00
Daniel
b0c254cf5a
fix: exclude XML tool examples from MODES section when native protocol enabled (#9367) 2025-11-18 15:48:37 -05:00
Chris Estreich
045c2d6b3b
Retry eval tasks if API instability detected (#9365) 2025-11-18 11:45:54 -08:00
Daniel
1fa12f6aa6
fix: resolve native tool protocol race condition causing 400 errors (#9363) 2025-11-18 13:43:10 -05:00
github-actions[bot]
67b6a8bb76
Changeset version bump (#9362)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-18 12:31:51 -05:00
Matt Rubens
bb31b04dba
chore: add changeset and announcement for v3.33.0 (#9360) 2025-11-18 12:26:41 -05:00
Matt Rubens
f455493af0
Remove the Roo model defaults (#9340) 2025-11-18 12:14:38 -05:00
Daniel
4bfd0709e4
fix: pass tool protocol parameter to lineCountTruncationError (#9358) 2025-11-18 11:29:19 -05:00
Hannes Rudolph
9538d82333
Add Gemini 3 Pro Preview model (#9357) 2025-11-18 11:29:10 -05:00
Hannes Rudolph
f8d6e12aa7
feat: enable native tool calling for openai-native provider (#9348)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-18 11:01:04 -05:00
Daniel
f5d3ac0e23
fix: sync parser state with profile/model changes (#9355) 2025-11-18 09:44:16 -05:00
Hannes Rudolph
f7c2e8d164
Improve Google Gemini defaults, temperature, and cost reporting (#9327) 2025-11-17 23:38:38 -07:00
roomote[bot]
aa2a17fce3
feat: update cloud agent CTA to point to setup page (#9338)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-18 01:29:32 -05:00
roomote[bot]
78ea1f1466
fix: use VSCode theme color for outline button borders (#9336)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
2025-11-18 01:28:56 -05:00
Matt Rubens
c4f1ce5f91
Fix the type of the list files recursive parameter (#9337) 2025-11-18 01:00:37 -05:00
Matt Rubens
dbaaef756e
Remove experimental setting for native tool calls (#9333) 2025-11-17 23:37:36 -05:00
Daniel
c5b18c1581
feat: add tool protocol selector to advanced settings (#9324)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-17 22:53:58 -05:00
Daniel
e742511d90
fix: prevent infinite loop when attempt_completion succeeds (#9325) 2025-11-17 18:24:48 -05:00
Matt Rubens
3091506942
Release: v1.86.0 (#9323) 2025-11-17 15:25:18 -05:00
Matt Rubens
51352824b5
Add max git status files to evals settings (#9322) 2025-11-17 15:24:15 -05:00
Hannes Rudolph
cbd26dfeb9
feat: Move Import/Export to Modes view toolbar (#8686) Cleanup of Mode Edit view (#9077) 2025-11-17 14:19:03 -05:00
Daniel
3631a02c8b
feat: add git status to environment details (#9310) 2025-11-17 14:10:32 -05:00
Daniel
fc19e7620b
fix: preserve tool blocks for native protocol in conversation history (#9319) 2025-11-17 14:07:17 -05:00
roomote[bot]
0e51a1ab9b
fix: Replace broken badgen.net badges with shields.io (#9318)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-17 14:03:28 -05:00
Matt Rubens
3e0bd0ea55
Move the native tool call toggle to experimental settings (#9297)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-17 09:41:30 -05:00
Bruno Bergher
7a06902dd8
web: Roo Code Cloud Provider pricing page and changes elsewhere (#9195)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-16 00:25:37 -05:00
Daniel
744f4bd4c8
feat: implement dynamic tool protocol resolution with proper precedence hierarchy (#9286)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-15 14:35:04 -05:00
Matt Rubens
4e316e0de8
Fix duplicate import (#9281) 2025-11-15 09:08:48 -05:00
Daniel
bc99f41a51
fix: prevent duplicate tool_result blocks in native tool protocol (#9248) 2025-11-14 23:04:02 -05:00
Daniel
375351616d
fix: format tool responses for native protocol (#9270)
* fix: format tool responses for native protocol

- Add toolResultFormatting utilities for protocol detection
- ReadFileTool now builds both XML and native formats
- Native format returns clean, readable text without XML tags
- Legacy conversation history conversion is protocol-aware
- All tests passing (55 total)

* refactor: use isNativeProtocol from @roo-code/types

Remove duplicate implementation and import from types package instead
2025-11-14 22:43:56 -05:00
Daniel
0a305310e5
refactor: centralize toolProtocol configuration checks (#9279)
* refactor: centralize toolProtocol configuration checks

- Created src/utils/toolProtocol.ts with getToolProtocolFromSettings() utility
- Replaced all direct vscode.workspace.getConfiguration() calls with centralized utility
- Updated 6 files to use the new utility function
- All tests pass and TypeScript compilation succeeds

* refactor: use isNativeProtocol function from types package
2025-11-14 20:24:40 -05:00
github-actions[bot]
64b1b62f5f
Changeset version bump (#9280)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-14 20:07:17 -05:00
Matt Rubens
924d815929
Release v3.32.1 (#9278) 2025-11-14 20:03:43 -05:00
Daniel
b2f204f123
Disable XML parser for native tool protocol (#9277) 2025-11-14 19:53:22 -05:00
Daniel
44b96f9d10
feat(openai-native): add abort controller for request cancellation (#9276) 2025-11-14 19:38:30 -05:00
Daniel
93c6d97017
Fix duplicate tool blocks causing 'tool has already been used' error (#9275) 2025-11-14 19:37:40 -05:00
Daniel
1b196461f3
fix: prevent duplicate tool_result blocks in native protocol mode for read_file (#9272)
When read_file encountered errors (e.g., file not found), it would call
handleError() which internally calls pushToolResult(), then continue to
call pushToolResult() again with the final XML. In native protocol mode,
this created two tool_result blocks with the same tool_call_id, causing
400 errors on subsequent API calls.

This fix replaces handleError() with task.say() for error notifications.
The agent still receives error details through the XML in the single
final pushToolResult() call.

This change works for both protocols:
- Native: Only one tool_result per tool_call_id (fixes duplicate issue)
- XML: Only one text block with complete XML (cleaner than before)

Agent visibility preserved: Errors are included in the XML response
sent to the agent via pushToolResult().

Tests: All 44 tests passing. Updated test to verify say() is called.
2025-11-14 17:47:39 -05:00
Hannes Rudolph
4a9ff8f4ef
[FIX] Fix OpenAI Native handling of encrypted reasoning blocks to prevent error when condensing (#9263) 2025-11-14 12:54:15 -05:00
github-actions[bot]
da461182ae
Changeset version bump (#9265)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-14 01:40:26 -05:00
Matt Rubens
37337fd958
Release v3.32.0 (#9264) 2025-11-14 01:36:13 -05:00
Matt Rubens
ee64f44d2b
Revert "refactor(task): switch to <feedback> wrapper to prevent focus drift after context-management event (condense/truncate)" (#9261) 2025-11-14 00:43:45 -05:00
Hannes Rudolph
161345c6fa
revert out of scope changes from #9252 (#9258) 2025-11-14 00:19:09 -05:00
Hannes Rudolph
31f7372897
feat(openai): OpenAI Responses: model-driven prompt caching and generic reasoning options refactor (#9259) 2025-11-14 00:13:49 -05:00
Daniel
d139eff9fc
fix: prevent consecutive user messages on streaming retry (#9249) 2025-11-13 22:31:26 -05:00
Daniel
38e3529c1e
fix: make line_ranges optional in read_file tool schema (#9254)
The OpenAI tool schema required both 'path' and 'line_ranges' in FileEntry,
but the TypeScript type definition marks lineRanges as optional. This caused
the AI to fail when trying to read files without specifying line_ranges.

Changes:
- Updated read_file tool schema to only require 'path' parameter
- line_ranges remains available but optional, matching TypeScript types
- Aligns with implementation which treats lineRanges as optional throughout

Fixes issue where read_file tool kept failing with missing parameters.
2025-11-13 21:56:51 -05:00
Hannes Rudolph
01cb12f167
Add GPT-5.1 models and clean up reasoning effort logic (#9252)
* Reasoning effort: capability-driven; add disable/none/minimal; remove GPT-5 minimal special-casing; document UI semantics; remove temporary logs

* Remove Unused supportsReasoningNone

* Roo reasoning: omit field on 'disable'; UI: do not flip enableReasoningEffort when selecting 'disable'

* Update packages/types/src/model.ts

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* Update webview-ui/src/components/settings/SimpleThinkingBudget.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-11-13 20:54:41 -05:00
Hannes Rudolph
c49f9ab846
Fix broken share button (#9253)
fix(webview-ui): make Share button popover work by forwarding ref in LucideIconButton

- Convert LucideIconButton to forwardRef so Radix PopoverTrigger(asChild) receives a focusable element
- Enables Share popover and shareCurrentTask flow
- Verified with ShareButton/TaskActions Vitest suites
2025-11-13 20:51:27 -05:00
Daniel
258830967a
fix: Filter native tools by mode restrictions (#9246)
* fix: filter native tools by mode restrictions

Native tools are now filtered based on mode restrictions before being sent to the API, matching the behavior of XML tools. Previously, all native tools were sent to the API regardless of mode, causing the model to attempt using disallowed tools.

Changes:
- Created filterNativeToolsForMode() and filterMcpToolsForMode() utility functions
- Extracted filtering logic from Task.ts into dedicated module
- Applied same filtering approach used for XML tools in system prompt
- Added comprehensive test coverage (10 tests)

Impact:
- Model only sees tools allowed by current mode
- No more failed tool attempts due to mode restrictions
- Consistent behavior between XML and Native protocols
- Better UX with appropriate tool suggestions per mode

* refactor: eliminate repetitive tool checking using group-based approach

- Add getAvailableToolsInGroup() helper to check tools by group instead of individually
- Refactor filterNativeToolsForMode() to reuse getToolsForMode() instead of duplicating logic
- Simplify capabilities.ts by using group-based checks (60% reduction)
- Refactor rules.ts to use group helper (56% reduction)
- Remove debug console.log statements
- Update tests and snapshots

Benefits:
- Eliminates code duplication
- Leverages existing TOOL_GROUPS structure
- More maintainable - new tools in groups work automatically
- All tests passing (26/26)

* fix: add fallback to default mode when mode config not found

Ensures the agent always has functional tools even if:
- A custom mode is deleted while tasks still reference it
- Mode configuration becomes corrupted
- An invalid mode slug is provided

Without this fallback, the agent would have zero tools (not even
ask_followup_question or attempt_completion), completely breaking it.
2025-11-13 20:50:57 -05:00
Hannes Rudolph
aaab2bf4d4
refactor(task): switch to <feedback> wrapper to prevent focus drift after context-management event (condense/truncate) (#9237)
* refactor(task): wrap initial user message in <feedback> instead of <task> to prevent focus drift after context-management

Rationale: After a successful context-management event, framing the next user block as feedback reduces model focus drift. Mentions parsing already supports <feedback>, and tool flows (attemptCompletion, responses) are aligned. No change to loop/persistence.

* refactor(mentions): drop <task> parsing; standardize on <feedback>; update tests
2025-11-13 20:02:57 -05:00
Matt Rubens
ad1e9a82f9
Add enum support to configuration schema (#9247) 2025-11-13 17:06:25 -05:00
Hannes Rudolph
8d14e90d8a
docs: include PR numbers in release guide (#9236) 2025-11-13 15:25:08 -05:00
Daniel
5069ce92a0
fix: change tool_choice from required to auto for native protocol (#9242) 2025-11-13 15:16:15 -05:00
Daniel
237c324fcd
fix: resolve 400 error with native tools on OpenRouter (#9238) 2025-11-13 15:10:38 -05:00
Matt Rubens
d270ea1983
Consistently use Package.name for better support of the nightly app (#9240) 2025-11-13 15:07:14 -05:00
Daniel
5e6e601b0a
Add native tool call support (#9159)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-11-13 12:48:35 -05:00
github-actions[bot]
2b26cf3011
Changeset version bump (#9233)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-13 09:51:25 -05:00
Matt Rubens
7fedd7a8f0
Release v3.31.3 (#9232) 2025-11-13 09:46:49 -05:00
roomote[bot]
ee9b255176
docs: remove Contributors section from README files (#9198)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-13 09:40:47 -05:00
Hannes Rudolph
7730c6f862
OpenAI Native: gate encrypted_content include; remove gpt-5-chat-latest verbosity flag (fixes #9225) (#9231)
openai-native: include reasoning.encrypted_content only when reasoningEffort is set; prevent Responses API error on non-reasoning models. types: remove supportsVerbosity from gpt-5-chat-latest to avoid invalid verbosity error. Fixes #9225
2025-11-13 09:29:31 -05:00
Hannes Rudolph
4e6cdad052
Fix: Roo Anthropic input token normalization (avoid double-count) (#9224) 2025-11-13 01:46:11 -05:00
Hannes Rudolph
bb6cac4980
rename: sliding-window -> context-management; truncateConversationIfNeeded -> manageContext (#9206) 2025-11-12 22:16:25 -05:00
github-actions[bot]
bbad2dcfdb
Changeset version bump (#9217)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-12 22:09:53 -05:00
Matt Rubens
dc1cee66bd
chore: add changeset for v3.31.2 (#9216) 2025-11-12 22:03:27 -05:00
Hannes Rudolph
0fdbd392e8
Migrate conversation continuity to plugin-side encrypted reasoning items (Responses API) (#9203)
* Migrate conversation continuity to plugin-side encrypted reasoning items (Responses API)

Summary
We moved continuity off OpenAI servers and now maintain conversation state locally by persisting and replaying encrypted reasoning items. Requests are stateless (store=false) while retaining the performance/caching benefits of the Responses API.

Why
This aligns with how Roo manages context and simplifies our Responses API implementation while keeping all the benefits of continuity, caching, and latency improvements.

What changed
- All OpenAI models now use the Responses API; system instructions are passed via the top-level instructions field; requests include store=false and include=["reasoning.encrypted_content"].
- We persist encrypted reasoning items (type: "reasoning", encrypted_content, optional id) into API history and replay them on subsequent turns.
- Reasoning summaries default to summary: "auto" when supported; text.verbosity only when supported.
- Atomic persistence via safeWriteJson.

Removed
- previous_response_id flows, suppressPreviousResponseId/skipPrevResponseIdOnce, persistGpt5Metadata(), and GPT‑5 response ID metadata in UI messages.

Kept
- taskId and mode metadata for cross-provider features.

Result
- ZDR-friendly, stateless continuity with equal or better performance and a simpler codepath.

* fix(webview): remove unused metadata prop from ReasoningBlock render

* Responses API: retain response id for troubleshooting (not continuity)

Continuity is stateless via encrypted reasoning items that we persist and replay. We now capture the top-level response id in OpenAiNativeHandler and persist the assistant message id into api_conversation_history.json solely for debugging/correlation with provider logs; it is not used for continuity or control flow.

Also: silence request-body debug logging to avoid leaking prompts.

* remove DEPRECATED tests

* chore: remove unused Task types file to satisfy knip CI

* fix(task): properly type cleanConversationHistory and createMessage args in Task to address Dan's review
2025-11-12 19:50:24 -05:00
Hannes Rudolph
387d1ba50f
fix: migrate Issue Fixer to REST + ProjectsV2 (#9207)
* fix(issue-fixer): migrate to REST for issue/comments and add ProjectsV2; remove Projects Classic mentions

* Update .roo/rules-issue-fixer/4_github_cli_usage.xml

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* Update .roo/rules-issue-fixer/4_github_cli_usage.xml

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-11-12 19:46:26 -05:00
Hannes Rudolph
8902facf49
fix: Apply updated API profile settings when provider/model unchanged (#9208) (#9210)
fix: apply updated API profile settings when provider/model unchanged (#9208)
2025-11-12 19:45:51 -05:00
Chris Estreich
62d8cc0d66
Batch settings updates from the webview to the extension host (#9165)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-12 12:29:06 -08:00
Daniel
e70c1754bd
fix: replace rate-limited badges with badgen.net (#9200) 2025-11-12 13:54:25 -05:00
Daniel
7323bba658
fix: include mcpServers in getState() for auto-approval (#9199) 2025-11-12 13:03:54 -05:00
github-actions[bot]
69d4efc335
Changeset version bump (#9154)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-11 20:32:50 -05:00
Bruno Bergher
dc37f6ae76
Add custom Button component with variant system (#9150)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-11 20:14:54 -05:00
Hannes Rudolph
2c917243d1
fix: Model switch re-applies selected profile (sync task.apiConfiguration) (#9179) (#9181) 2025-11-11 20:11:16 -05:00
Chris Estreich
6e6341346e
Move auto-approval from ChatView to Task (#9157) 2025-11-10 17:01:50 -08:00
roomote[bot]
23856a5874
feat: sync reviewer landing page copy - variant B to variant A (#9158)
- Updated variant A content to match variant B messaging
- Both variants now show the same improved copy focused on catching meaningful bugs
- Emphasizes depth over token-saving and repository-aware analysis

Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-10 18:23:24 -05:00
roomote[bot]
b2143912cf
feat: sync reviewer landing page copy - variant B to variant A (#9158)
- Updated variant A content to match variant B messaging
- Both variants now show the same improved copy focused on catching meaningful bugs
- Emphasizes depth over token-saving and repository-aware analysis

Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-10 18:17:44 -05:00
Daniel
cb9abcf955
Add native tool definitions (#9156) 2025-11-10 17:31:05 -05:00
Daniel
e8ac3bf359
Gate XML out when native tool protocol is ON (#9107) 2025-11-10 14:59:15 -05:00
Matt Rubens
fefec6ce0f
Release: v1.85.0 (#9155) 2025-11-10 12:52:06 -05:00
Matt Rubens
2943b83ae9
chore: add changeset for v3.31.1 (#9153) 2025-11-10 11:52:10 -05:00
Daniel
4cd5c9022e
fix: prevent command_output ask from blocking in cloud/headless environments (#9152) 2025-11-10 11:47:26 -05:00
Matt Rubens
b09d0a7640
IPC command for sending messages to the current task (#9149) 2025-11-10 11:44:04 -05:00
roomote[bot]
62636add14
feat: add Google Tag Manager to marketing website (#9148)
* feat: add Google Tag Manager to marketing website using Next.js Script component

* refactor: remove Google Ads implementation in favor of Tag Manager

* fix: wrap GTM script in consent-checking client component for GDPR compliance

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-10 01:51:53 -08:00
roomote[bot]
4da9c3adb1
fix: improve mobile responsiveness of hero section on /reviewer page (#9138)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-08 17:47:06 -05:00
github-actions[bot]
e98f4b9057
Changeset version bump (#9112)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-07 23:30:28 -05:00
Matt Rubens
f93aafefe1
Release v3.31.0 (#9111) 2025-11-07 23:14:51 -05:00
Daniel
78fc2126d3
fix: prevent context condensing on settings save when provider/model unchanged (#9108)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-07 22:58:02 -05:00
Bruno Bergher
fff5cf804f
ux: Improvements to to-do lists and task headers (#9096)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-07 17:26:20 -05:00
Daniel
fc2147ab4f
fix: prevent crash when streaming chunks have null choices array (#9105) 2025-11-07 13:18:38 -05:00
Bruno Bergher
ca64953061
ux: Less Caffeine (#9104)
Prevents stress on Roo's hip bones
2025-11-07 18:09:34 +00:00
Daniel
247b06186f
feat: Add comprehensive error logging to Roo Cloud provider (#9098)
feat: add comprehensive error logging to Roo Cloud provider

- Add detailed error logging in handleOpenAIError() to capture error details before transformation
- Enhanced getRooModels() to log HTTP response details on failed requests
- Added error context logging to RooHandler streaming and model loading
- All existing tests passing (48 total)
2025-11-07 08:53:10 -08:00
roomote[bot]
2abdad6d55
fix: respect custom OpenRouter URL for all API operations (#8951)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-07 10:35:12 -05:00
github-actions[bot]
47415fa19a
Changeset version bump (#9094)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-06 23:18:40 -05:00
Matt Rubens
6e3e8a96ef
chore: add changeset for v3.30.3 (#9092) 2025-11-06 23:15:10 -05:00
renovate[bot]
49e57ed0fa
chore(deps): update dependency @changesets/cli to v2.29.7 (#8490)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-06 16:46:09 -05:00
roomote[bot]
4eebcf0d98
fix: prevent notification sound on attempt_completion with queued messages (#8540)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-06 16:44:52 -05:00
Daniel
b17760bf57
feat: auto-switch to imported mode with architect fallback (#9003)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Seth Miller <sethmillerp@gmail.com>
Co-authored-by: heyseth <sethmillerp@gmail.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-06 16:40:27 -05:00
Daniel
37ac53ed4a
fix: prevent shell injection in pre-push hook environment loading (#9059) 2025-11-06 16:40:03 -05:00
roomote[bot]
1ba0150f7a
fix: use system role for OpenAI Compatible provider when streaming is disabled (#8216)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-06 16:39:20 -05:00
roomote[bot]
eedc2649ff
Clarify: setting 0 disables Error & Repetition Limit (#8965)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-06 16:25:12 -05:00
Hannes Rudolph
0fd7023ea7
feat(chat): Improve diff appearance in main chat view (#8932)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-06 16:18:01 -05:00
Daniel
d631aa643c
fix(task): auto-retry on empty assistant response (#9076) (#9083) 2025-11-06 16:15:31 -05:00
roomote[bot]
bf048492fb
feat: add MiniMax-M2-Stable model and enable prompt caching (#9072)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-11-06 12:34:53 -08:00
Bruno Bergher
7bb7b75a0f
ux: Home screen visuals (#9057)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-06 12:34:33 -08:00
Daniel
63b4a785c1
feat: add kimi-k2-thinking model to moonshot provider (#9079) 2025-11-06 12:14:57 -05:00
github-actions[bot]
7320d79c08
Changeset version bump (#9066)
* changeset version bump

* Revise CHANGELOG for version 3.30.2

Updated changelog for version 3.30.2 with new features and fixes.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-05 23:12:44 -05:00
Matt Rubens
7e3b599b1a
Release v3.30.2 (#9065)
chore: add changeset for v3.30.2
2025-11-05 23:08:55 -05:00
Hannes Rudolph
65230f1f5c
feat: Global Inference for Bedrock models (#8750) (#8940)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-05 15:56:19 -05:00
Bruno Bergher
39448f4010
web: Agent Landing Page A/B testing toolkit (#9018)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-05 15:40:04 -05:00
roomote[bot]
413ab1a95c
feat: add Qwen3 embedding models (0.6B and 4B) to OpenRouter support (#9060)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-05 15:35:25 -05:00
AJ Juaire
c6a02bb8da
Fix Bedrock user agent to report full SDK details (#9043) 2025-11-05 14:08:58 -05:00
Daniel
d4aeca4205
Fix dynamic provider model validation to prevent cross-contamination (#9054) 2025-11-05 14:07:52 -05:00
Daniel
3eee340aa3
feat: add conditional test running to pre-push hook (#9055) 2025-11-05 12:06:22 -05:00
dleffel
e86acef844
chore: simplify Google Analytics to standard implementation (#9044)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-05 11:24:32 -05:00
roomote[bot]
6965e5c791
fix: update Opus 4.1 max tokens from 8K to 32K (#9046)
Aligns claude-opus-4-1-20250805 max token limit with claude-opus-4-20250514,
both models now supporting 32K output tokens (overridable to 8K when
enableReasoningEffort is false).

Fixes #9045

Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-05 00:24:46 -05:00
Seb Duerr
ae9f3fe984
Update cerebras.ts (#9024) 2025-11-04 22:43:44 -05:00
Seth Miller
097bc699ba
fix(checkpoints): resolve incorrect commit location when GIT_DIR set in Dev Containers (#8811) 2025-11-04 22:10:07 -05:00
Hannes Rudolph
ea339738e5
Set Claude Sonnet 4.5 as default for key providers (#8922) 2025-11-04 22:07:24 -05:00
roomote[bot]
200a7c8aa9
fix: keep pinned models fixed at top of scrollable list (#8813)
* fix: keep pinned models fixed at top of scrollable list

- Separated pinned and unpinned configs into different containers
- Pinned configs now stay fixed at the top
- Only unpinned configs are scrollable
- Added tests to verify the fixed behavior

Fixes #8812

* fix: resolve sticky header visual artifact in ApiConfigSelector

- Changed sticky header background from bg-vscode-editorWidget-background to bg-vscode-dropdown-background to match popover container
- Moved separator logic into sticky container as conditional bottom border to prevent scroll artifacts
- Updated tests to match new separator structure
- All 21 tests passing

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-04 22:01:06 -05:00
Daniel
f1caf3f36e
feat: add file path tooltips with centralized PathTooltip component (#9030)
- Add PathTooltip component that wraps StandardTooltip with proper styling
- Use maxWidth='min(300px,100vw)' via inline style to override defaults
- Apply '[text-wrap:wrap]' class to override text-balance behavior
- Add formatPathTooltip helper for consistent path content formatting
- Update CodeAccordian, ChatRow, and BatchFilePermission to use PathTooltip
- Centralizes tooltip behavior and reduces duplication

Supersedes PR #8797.
2025-11-04 21:59:19 -05:00
Daniel
e25b4e62d1
fix: eliminate UI flicker during task cancellation (#9037)
* fix: eliminate UI flicker during task cancellation

- Modify ClineProvider.createTaskWithHistoryItem() to detect when rehydrating current task
- Implement in-place task replacement to avoid empty stack state that causes UI flicker
- Add comprehensive unit tests for flicker-free cancel behavior
- Maintain backward compatibility and proper event listener cleanup

Fixes the jarring navigation to home view when cancelling tasks

* fix: ensure proper garbage collection of old task during flicker-free rehydration

- Call abortTask(true) on old task before replacement to stop processes and mark as abandoned
- This ensures proper cleanup and prevents memory leaks during task cancellation
- Add test verification for abortTask cleanup
2025-11-04 21:40:39 -05:00
github-actions[bot]
54745fc234
Changeset version bump (#9034)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-04 15:39:04 -05:00
Matt Rubens
035c67c83c
chore: add changeset for v3.30.1 (#9033) 2025-11-04 15:33:54 -05:00
Matt Rubens
77971a5e8f
Revert "fix: prevent UI flicker and enable resumption after task cancellation" (#9032) 2025-11-04 15:29:14 -05:00
Daniel
f717863a32
fix: correct OpenRouter Mistral model dimension from 3072 to 1536 (#9028) 2025-11-04 12:29:04 -05:00
github-actions[bot]
8e4b145681
Changeset version bump (#9005)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-11-03 16:27:21 -08:00
Matt Rubens
65bb672d23
chore: add changeset for v3.30.0 (#9006) 2025-11-03 16:09:23 -08:00
Chris Estreich
8a6bdf9092
v3.29.6 (#9004) 2025-11-03 15:34:37 -08:00
roomote[bot]
d59b815e98
feat(web): add /pr-fixer page and Cloud Agents footer (#8996)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: Bruno Bergher <me@brunobergher.com>
2025-11-03 15:50:46 -05:00
SannidhyaSah
7add32e203
docs: Update readme to link the new Custom Modes video (#9000)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Sannidhya <sann@Sannidhyas-MacBook-Pro.local>
2025-11-03 15:48:15 -05:00
Daniel
58edc71672
fix: prevent UI flicker and enable resumption after task cancellation (#8986) 2025-11-03 15:40:39 -05:00
Hannes Rudolph
5c738de7ce
fix: update terminal settings documentation link (#8997) 2025-11-03 13:17:16 -05:00
Daniel
ce88b0272a
feat: add preserveReasoning flag to include reasoning in API history (#8934) 2025-11-03 10:38:39 -05:00
Hannes Rudolph
f7856ef5cc
Terminal settings: Cleanup terminal settings tab and change default terminal to inline (#8342)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-03 10:38:09 -05:00
roomote[bot]
5fb36d9c85
feat: implement Google Consent Mode v2 with cookieless pings (#8987)
* feat: implement Google Consent Mode v2 with cookieless pings

- Add consent defaults before gtag.js loads (required for Consent Mode v2)
- Enable cookieless pings with url_passthrough for Google Ads
- Implement consent update logic for all consent categories
- Support both granted and denied consent states
- Maintain backward compatibility with existing consent manager

* fix: remove shouldLoad from useEffect dependency array to prevent re-initialization loop

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-02 20:59:09 -08:00
Matt Rubens
5b753f5855
Don't output newline-only reasoning (#8990)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-02 23:17:59 -05:00
Matt Rubens
613255c09a
Handle <think> tags in the base OpenAI-compatible provider (#8989) 2025-11-02 22:22:49 -05:00
Matt Rubens
8d98b303b3
Union a hard-coded list of chutes models with the dynamic list (#8988) 2025-11-02 21:47:43 -05:00
roomote[bot]
d863010673
feat: add MiniMax M2 model to Fireworks.ai provider (#8962)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-02 21:43:58 -05:00
roomote[bot]
8dc8452123
feat: add GLM-4.6 model to Fireworks provider (#8754)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-02 21:41:24 -05:00
David Markey
34f45f1b28
feat: add OpenRouter embedding provider support (#8973)
* feat: add OpenRouter embedding provider support

Implement comprehensive OpenRouter embedding provider support for codebase indexing with the following features:

- New OpenRouterEmbedder class with full API compatibility
- Support for OpenRouter's OpenAI-compatible embedding endpoint
- Rate limiting and retry logic with exponential backoff
- Base64 embedding handling to bypass OpenAI package limitations
- Global rate limit state management across embedder instances
- Configuration updates for API key storage and provider selection
- UI integration for OpenRouter provider settings
- Comprehensive test suite with mocking
- Model dimension support for OpenRouter's embedding models

This adds OpenRouter as the 7th supported embedding provider alongside OpenAI, Ollama, OpenAI-compatible, Gemini, Mistral, and Vercel AI Gateway.

* Add translation key

* Fix mutex double release bug

* Add translations

* Add more translations

* Fix failing tests

* code-index(openrouter): fix HTTP-Referer header to RooCodeInc/Roo-Code; i18n: add and wire OpenRouter Code Index strings; test: assert default headers in embedder

---------

Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-11-02 19:12:28 -05:00
roomote[bot]
d0e519de3f
feat: convert Chutes to dynamic/router provider (#8980)
* feat: convert Chutes to dynamic/router provider

- Add chutes to dynamicProviders array in provider-settings
- Add chutes entry to dynamicProviderExtras in api.ts
- Create fetcher function for Chutes models API
- Convert ChutesHandler to extend RouterProvider
- Update tests to work with dynamic provider setup
- Export chutesDefaultModelInfo for RouterProvider constructor

* fix: address security and code quality issues from review

- Fix potential API key leakage in error logging
- Add temperature support check before setting temperature
- Improve code consistency with RouterProvider patterns

* fix: add chutes to routerModels initialization

- Fix TypeScript error in webviewMessageHandler
- Ensure chutes is included in RouterName Record type

* Fixes

* Support reasoning

* Fix tests

* Remove reasoning checkbox

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-02 16:28:33 -05:00
Thibault Jaigu
ca10cba3c4
fix: create new Requesty profile during OAuth (#8699)
Co-authored-by: John Costa <john@requesty.ai>
2025-11-02 01:07:16 -04:00
Daniel
25c6f46e71
fix: prevent message loss during queue drain race condition (#8955) 2025-11-02 01:05:45 -04:00
Daniel
31de103e7d
feat: optimize router model fetching with single-provider filtering (#8956) 2025-11-02 01:04:34 -04:00
Matt Rubens
388d40524d
Capture the reasoning content in base-openai-compatible for GLM 4.6 (#8976) 2025-11-02 01:00:33 -04:00
github-actions[bot]
d7ea6d679e
Changeset version bump (#8968)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-01 15:36:42 -04:00
Matt Rubens
d28d40d0a7
chore: add changeset for v3.29.5 (#8967) 2025-11-01 15:33:06 -04:00
roomote[bot]
89d67efc6d
fix: add keyword index for type field to fix Qdrant codebase_search error (#8964)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-01 13:20:56 -04:00
Bruno Bergher
eb68c65296
web: Attempt at compliant, cookie-less anonymous tracking for the website (#8957) 2025-10-31 15:19:35 -04:00
Matt Rubens
416fa5727e
Fix cost and token tracking between provider styles (#8954) 2025-10-31 15:14:29 -04:00
github-actions[bot]
4a096e1cb9
Changeset version bump (#8907)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-30 23:22:28 -04:00
Matt Rubens
6e4e22f2cb
Release v3.29.5 (#8942) 2025-10-30 23:15:28 -04:00
roomote[bot]
81d5f63b72
fix: remove search_and_replace tool from codebase (#8892)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2025-10-30 22:51:29 -04:00
Daniel
c66fed9611
feat: improve @ file search for large projects (#8805)
* feat: improve @ file search for large projects

- Increase default file limit from 5,000 to 10,000 (configurable up to 500,000)
- Respect VSCode search settings (useIgnoreFiles, useGlobalIgnoreFiles, useParentIgnoreFiles)
- Add 'maximumIndexedFilesForFileSearch' configuration setting
- Add tests for new functionality

Conservative default of 10k keeps memory usage low while still providing 2x
improvement. Users with large projects can opt-in to higher limits (up to 500k).

This is a simplified alternative to PR #5723 that solves the same problem
without the complexity of caching. Ripgrep is already fast enough for
10k+ files, and the benefit of caching doesn't justify 2,200+ lines of
additional code and maintenance burden.

Fixes #5721

* fix: add missing translations for maximumIndexedFilesForFileSearch setting

* test: improve file-search tests to verify configuration behavior
2025-10-30 22:16:42 -04:00
roomote[bot]
bb640bfee7
feat: rename MCP Errors tab to Logs for mixed-level messages (#8894)
- Update McpView.tsx to use "logs" tab ID instead of "errors"
- Rename translation key from tabs.errors to tabs.logs in all locales
- Change empty state message from "No errors found" to "No logs yet"

This better reflects that the tab shows all server messages (info, warnings, errors), not just errors.

Fixes #8893

Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-30 22:12:34 -04:00
roomote[bot]
b284eddf40
fix: prevent infinite loop when canceling during auto-retry (#8902)
* fix: prevent infinite loop when canceling during auto-retry

- Add abort check after backoffAndAnnounce in first-chunk retry logic
- Add abort check after backoffAndAnnounce in mid-stream retry logic
- Properly handle task abortion to break retry loops

Fixes #8901

* docs: add critical comments explaining abort checks

- Document the importance of abort checks after backoff
- Explain how these checks prevent infinite loops
- Add context for future maintainability

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-30 19:12:30 -04:00
Dicha Zelianivan Arkana
f583be3c30
fix(context): truncate type definition to match max read line (#8509)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-30 16:55:55 -04:00
Daniel
9dfa496659
fix: make code index initialization non-blocking at activation (#8933) 2025-10-30 16:01:40 -04:00
Seth Miller
f9d6fe7985
Fix: Enhanced codebase index recovery and reuse ('Start Indexing' button now reuses existing Qdrant index) (#8588)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-30 15:59:51 -04:00
roomote[bot]
626471d103
feat: add We're hiring link to announcement modal (#8931)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-30 11:47:55 -04:00
John Richmond
59ab1f3f3c
roo provider: update session token on every request (#8923)
* roo provider: update session token on every request

* Cleanup: remove unused imports

* Also refresh token before completePrompt()
2025-10-29 22:35:51 -07:00
Daniel
ed45d1c081
feat: add zai-glm-4.6 model to Cerebras and set gpt-oss-120b as default (#8920)
* feat: add zai-glm-4.6 model and update gpt-oss-120b for Cerebras

- Add zai-glm-4.6 with 128K context window and 40K max tokens
- Set zai-glm-4.6 as default Cerebras model
- Update gpt-oss-120b to 128K context and 40K max tokens

* feat: add zai-glm-4.6 model to Cerebras provider

- Add zai-glm-4.6 with 128K context window and 40K max tokens
- Set zai-glm-4.6 as default Cerebras model
- Model provides ~2000 tokens/s for general-purpose tasks

* add [SOON TO BE DEPRECATED] warning for Q3C

* chore: set gpt-oss-120b as default Cerebras model

* Fix cerebras test: update expected default model to gpt-oss-120b

* Apply suggestion from @mrubens

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>

---------

Co-authored-by: kevint-cerebras <kevin.taylor@cerebras.net>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-29 17:22:16 -04:00
Daniel
bd5807bac1
fix: Gate auth-driven Roo model refresh to active provider only (#8915) 2025-10-29 16:23:39 -04:00
Matt Rubens
ff0c65af10
Release v3.29.4 (#8906) 2025-10-29 10:00:02 -04:00
Maosghoul
414345ce7d
Feat: Add Minimax Provider (fixes #8818) (#8820)
Co-authored-by: xiaose <xiaose@minmaxi.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-29 09:51:51 -04:00
Seth Miller
f839d4c27b
fix: prevent MCP server restart when toggling tool permissions (#8633)
* fix: prevent MCP server restart when toggling tool permissions

Add isProgrammaticUpdate flag to distinguish between programmatic config
updates and user-initiated file changes. Skip file watcher processing
during programmatic updates to prevent unnecessary server restarts.

* fix(mcp): prevent server reconnection when toggling disabled state

Fixed bug where MCP servers would reconnect instead of staying disabled when toggled off. The issue was that toggleServerDisabled() used stale in-memory config instead of reading the fresh config from disk after writing the disabled flag.

Changes:
Added readServerConfigFromFile() helper to read and validate server config from disk
Updated disable path to read fresh config before calling connectToServer()
Updated enable path to read fresh config before calling connectToServer()
This ensures the disabled: true flag is properly read, causing connectToServer() to create a disabled placeholder connection instead of actually connecting the server.

+ refactor(mcp): use safeWriteJson for atomic config writes

Replace JSON.stringify + fs.writeFile with safeWriteJson in McpHub.ts
to prevent data corruption through atomic writes with file locking.

* fix(mcp): prevent race condition in isProgrammaticUpdate flag

Replace multiple independent reset timers with a single timer that gets
cleared and rescheduled on each programmatic config update. This prevents
the flag from being reset prematurely when multiple rapid updates occur,
which could cause unwanted server restarts during the file watcher's
debounce period.

+ fix(mcp): ensure isProgrammaticUpdate flag cleanup with try-finally

Wrap safeWriteJson() calls in try-finally blocks to guarantee the
isProgrammaticUpdate flag is always reset, even if the write operation
fails. This prevents the flag from being stuck at true indefinitely,
which would cause subsequent user-initiated config changes to be
silently ignored.
2025-10-28 19:42:22 -04:00
Hannes Rudolph
82b0b04b59
docs(vscode-lm): clarify VS Code LM API integration warning (#8493)
* docs(vscode-lm): clarify VS Code LM API integration blurb, provider wording, and error guidance

* fix(vscode-lm): update settings UI warning; revert package description change

* Restored

* restored

* i18n(vscode-lm): unify vscodeLmWarning text across all locales

* i18n(vscode-lm): translate vscodeLmWarning across locales
2025-10-28 19:38:18 -04:00
Dicha Zelianivan Arkana
06af804c2e
fix(modes): custom modes under custom path not showing (#8499) 2025-10-28 19:36:56 -04:00
Chris Estreich
520b2f63da
Prevent a noisy cloud agent exception (#8577) 2025-10-28 19:35:31 -04:00
Daniel
06a5c2dd19
fix: auto-sync enableReasoningEffort with reasoning dropdown selection (#8890) 2025-10-28 14:55:08 -04:00
github-actions[bot]
b5fd805cf0
Changeset version bump (#8879)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-28 13:01:05 -04:00
Daniel
be119bcc5a
Add exponential backoff for mid-stream retry failures (#8888)
* Add exponential backoff for mid-stream retry failures

- Extend StackItem with retryAttempt counter
- Extract shared backoffAndAnnounce helper for consistent retry UX
- Apply exponential backoff to mid-stream failures when auto-approval enabled
- Add debug throw for testing mid-stream retry path

* Add abort check in retry countdown loop

Allows early exit from exponential backoff if task is cancelled during delay
2025-10-28 12:55:13 -04:00
Matt Rubens
a3101aa92b
Add how it works section to reviewer landing page (#8884) 2025-10-28 10:37:40 -04:00
Matt Rubens
11f1c06413
chore: add changeset for v3.29.3 (#8878) 2025-10-27 23:32:38 -04:00
Matt Rubens
0d3817505e
Focus textbox and add newlines after adding to context (#8877) 2025-10-27 23:26:34 -04:00
roomote[bot]
49fde41616
feat: update Gemini models with latest 09-2025 versions (#8486)
* feat: update Gemini models with latest 09-2025 versions

- Add gemini-flash-latest and gemini-flash-lite-latest models
- Add gemini-2.5-flash-preview-09-2025 and gemini-2.5-flash-lite-preview-09-2025
- Reorganize models list with most recent versions at the top
- Maintain all existing models for backward compatibility

Fixes #8485

* fix: restore missing maxThinkingTokens and supportsReasoningBudget for gemini-2.5-pro-preview-03-25

Backward compatibility regression fix - these properties were accidentally
removed during reorganization and are required to preserve existing
reasoning-budget controls for users pinned to this model version.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-27 22:04:08 -04:00
Daniel
86190d8e2d
feat: Add supportsReasoning property for Z.ai GLM binary thinking mode (#8872)
* feat: Add supportsReasoning property for Z.ai GLM binary thinking mode

- Add supportsReasoning to ModelInfo schema for binary reasoning models
- Update GLM-4.5 and GLM-4.6 models to use supportsReasoning: true
- Implement thinking parameter support in ZAiHandler for Deep Thinking API
- Update ThinkingBudget component to show simple toggle for supportsReasoning models
- Add comprehensive tests for binary reasoning functionality

Closes #8465

* refactor: rename supportsReasoning to supportsReasoningBinary for clarity

- Rename supportsReasoning -> supportsReasoningBinary in model schema
- Update Z.AI GLM model configurations to use supportsReasoningBinary
- Update Z.AI provider logic in createStream and completePrompt methods
- Update ThinkingBudget UI component and tests
- Update all test comments and expectations

This change improves naming clarity by distinguishing between:
- supportsReasoningBinary: Simple on/off reasoning toggle
- supportsReasoningBudget: Advanced reasoning with token budget controls
- supportsReasoningEffort: Advanced reasoning with effort levels
2025-10-27 21:55:26 -04:00
Matt Rubens
b72d55ef45
Enabled reasoning in Roo provider (#8874) 2025-10-27 21:15:02 -04:00
roomote[bot]
3cbdbc2af6
feat: add settings to configure time and cost in system prompt (#8451)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-10-27 18:40:16 -04:00
Daniel
fceb413047
Fix LiteLLM test failures after merge (#8870)
* Use monotonic clock for rate limiting

* Fix LiteLLM test failures after merge

- Remove supportsComputerUse from LiteLLM implementation as it's no longer part of ModelInfo interface
- Update test expectations to include cacheWritesPrice and cacheReadsPrice fields
- Fix test for max_output_tokens preference functionality

---------

Co-authored-by: Christiaan Arnoldus <christiaan.arnoldus@outlook.com>
2025-10-27 16:27:26 -05:00
Christiaan Arnoldus
c232057e54
Use monotonic clock for rate limiting (#8456) 2025-10-27 17:01:54 -04:00
roomote[bot]
bde2c3cec6
fix: use max_output_tokens when available in LiteLLM fetcher (#8455)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-27 16:58:45 -04:00
roomote[bot]
13d20bbe8b
fix: process queued messages after context condensing completes (#8478)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-27 16:57:34 -04:00
Daniel
cff65b4f5e
fix: resolve checkpoint menu popover overflow (#8867) 2025-10-27 16:01:44 -04:00
github-actions[bot]
7926dcf00e
Changeset version bump (#8866)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-27 15:06:47 -04:00
Matt Rubens
edcf6d9356
chore: add changeset for v3.29.2 (#8865) 2025-10-27 15:02:42 -04:00
Matt Rubens
84cf332f19
Make sure not to show prices for free models (#8864) 2025-10-27 14:58:43 -04:00
roomote[bot]
e76ac42455
feat: add LongCat-Flash-Thinking-FP8 models to Chutes AI provider (#8426)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-27 13:48:10 -04:00
roomote[bot]
634b1df175
fix: Remove specific Claude model version from settings descriptions (#8437)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-10-27 12:11:01 -04:00
Matt Rubens
b92a22b0c1
Fix caching logic in Roo provider (#8860) 2025-10-27 10:12:28 -04:00
github-actions[bot]
bd1f890589
Changeset version bump (#8855)
* changeset version bump

* Update CHANGELOG for version 3.29.1 release

Updated version number and added release notes for 3.29.1.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-26 22:28:01 -04:00
Matt Rubens
0e0b5c7056
Release v3.29.1 (#8854)
chore: add changeset for v3.29.1
2025-10-26 22:24:11 -04:00
Matt Rubens
f5d7ba1959
Fix provider model loading race conditions (#8836) 2025-10-26 00:56:01 -04:00
roomote[bot]
8870348bd3
feat: add Google Ads conversion tracking to reviewer page (#8831)
* feat: add Google Ads conversion tracking to reviewer page

* fix: add asChild prop to first button to prevent invalid HTML nesting

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-25 21:23:05 -07:00
roomote[bot]
f7009e9b94
fix: change Add to Context keybinding to avoid Redo conflict (#8653)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-25 23:53:45 -04:00
roomote[bot]
98b8d5b005
fix: adjust GLM-4.6-turbo max output tokens to prevent context limit errors (#8822)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-25 14:08:27 -04:00
github-actions[bot]
97331bcb2e
Changeset version bump (#8807)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-24 17:51:45 -04:00
Matt Rubens
6428d099fa
chore: add changeset for v3.29.0 (#8806)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-10-24 17:46:06 -04:00
Dicha Zelianivan Arkana
aae255d1b8
fix(export): exclude max tokens field for models that don't support it (#8464) 2025-10-24 16:20:31 -04:00
Daniel
a84f7ef77f
fix: respect nested .gitignore files in search_files (#8804) 2025-10-24 16:16:22 -04:00
Drake Thomsen
b33c082300
Chore: Update magistral-medium-latest in mistral.ts (#8364)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-24 16:12:54 -04:00
Matt Rubens
19e06900ee
Fix checkpoints test (#8803) 2025-10-24 10:18:19 -04:00
roomote[bot]
ad56791c3e
fix: preserve trailing newlines in stripLineNumbers for apply_diff (#8227)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-24 10:16:00 -04:00
Matt Rubens
1a9e7ca233
Handle Roo provider pricing correctly (#8802) 2025-10-24 10:07:14 -04:00
Daniel
485b551cf3
Improve checkpoint menu translations for PR #7841 (#8796)
Co-authored-by: Bruno Bergher <me@brunobergher.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: NaccOll <wuyoubin0504@gmail.com>
2025-10-24 10:03:03 -04:00
roomote[bot]
ab9a48578c
feat: add dynamic model loading for Roo Code Cloud provider (#8728)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-24 00:58:34 -04:00
NaccOll
f4121e2568
Add checkpoint initialization timeout settings and fix checkpoint timeout warnings (#8019)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-23 22:18:58 -04:00
Daniel
3349c02595
feat: improve auto-approve button responsiveness (#8798)
- Add responsive breakpoint at 300px for compact view
- Icon correctly reflects state (X when off, ✓ when on) at all screen sizes
- Show abbreviated labels on very narrow screens (< 300px)
- Add triggerLabelOffShort translation key to all locales

Fixes issues from PR #8152:
- Icon always showing checkmark on narrow screens
- Breakpoint activating too early (was 400px)
- Incorrect Tailwind class ordering
2025-10-23 21:25:57 -04:00
Daniel
4f084f89e4
fix: retry API requests on stream failures instead of aborting task (#8794) 2025-10-23 16:54:51 -05:00
Chris Estreich
ac88d66194
Remove a very verbose error for cloud agents (#8795) 2025-10-23 12:37:45 -07:00
Daniel
93c13e2d13
feat: add token-budget based file reading with intelligent preview (#8789)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-10-23 15:35:43 -04:00
Daniel
b9110dc243
fix: always show checkpoint restore options regardless of change detection (#8758) 2025-10-23 10:30:39 -04:00
roomote[bot]
8187a8e189
fix: update X/Twitter username from roo_code to roocode (#8780)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-22 16:27:08 -04:00
Hannes Rudolph
026cbd58d3
feat: add 'anthropic/claude-haiku-4.5' to prompt caching models (#8764)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-22 11:05:26 -04:00
Bruno Bergher
a97cda1da0
web: Updates CTA link in /reviewer to send people to /cloud-agents/welcome (#8774) 2025-10-22 11:02:55 -04:00
Bruno Bergher
c74e42bde4
web: Dynamic OpenGraph images (#8773)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-22 10:04:28 -04:00
Mohammad Danaee nia
9ac1d6ea14
feat: add GLM-4.6-turbo model to chutes ai provider (#8502)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-10-22 09:59:51 -04:00
Matt Rubens
6173a59fb1
Update text for clarity in reviewer page (#8753) 2025-10-22 09:37:17 -04:00
Matt Rubens
6fa6c3c1e6
Skip failing tools tests (#8767) 2025-10-22 01:07:02 -04:00
roomote[bot]
d9ed33db67
Enable browser-use tool for all image-capable models (#8121)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-21 22:23:42 -04:00
Hannes Rudolph
34392dd4dd
Z.ai: add GLM-4.5-X, AirX, Flash (expand model coverage) (#8745)
* feat(zai): add GLM-4.5-X, AirX, Flash; sync with Z.ai docs; keep canonical api line keys

* feat(zai): add GLM-4.5V vision model (supportsImages, pricing, 16K max output); add tests

* feat(types,zai): sync Z.AI international model map and tests
- Update pricing, context window, and capabilities for:
  glm-4.5-x, glm-4.5-airx, glm-4.5-flash, glm-4.5v, glm-4.6
- Add glm-4-32b-0414-128k
- Align tests with new model specs

* fix(zai): align handler generics with expanded model ids to satisfy CI compile step

* chore(zai): remove tier pricing blocks for Z.ai models

* fix(zai): simplify names in zaiApiLineConfigs for clarity

* chore(zai): set default temperature to 0.6

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-21 14:58:07 -06:00
Hannes Rudolph
6ffdd440ce
Remove GPT‑5 instructions/reasoning_summary from UI message metadata to prevent ui_messages.json bloat (#8756)
chore(gpt5): stop persisting instructions/reasoning_summary in UI message metadata

Problem: ui_messages.json was getting bloated with unused or duplicated content (system 'instructions' and 'reasoning_summary') that we do not read back. Root cause: earlier OpenAI Responses API implementation persisted these fields to per-message metadata; however, 'instructions' are already sent as top-level request instructions and 'reasoning_summary' is surfaced live via streaming events. Neither field is consumed from storage. Changes: (1) Task.persistGpt5Metadata now stores only previous_response_id; (2) removed instructions and reasoning_summary from types; (3) updated Zod schema; (4) persistence layer writes messages as-is (no sanitizer); (5) tests green. Impact: smaller ui_messages.json, no runtime behavior change for requests. Migration: old metadata fields will be ignored by schema.
2025-10-21 14:55:29 -06:00
Bruno Bergher
f3a505fd36
web: Landing page for the reviewerFirst pass (#8740)
* First pass

* SEO

* Update apps/web-roo-code/src/app/reviewer/page.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-10-20 23:24:17 -04:00
Chris Estreich
4e6c717915
Try a 5s status mutation timeout (#8734) 2025-10-20 15:36:05 -07:00
laz-001
e04b27973d
Fix link text for Roomote Control in README (#8742) 2025-10-20 17:00:39 -04:00
roomote[bot]
3c7437e22a
docs: update Configuring Profiles video link (#8189)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-20 14:06:28 -04:00
Bruno Bergher
a8f87d2b1d
web: Leftover white bg (#8719)
Leftover white bg
2025-10-18 06:49:35 -04:00
Matt Rubens
f360c4e08b
Add Intercom as a subprocessor (#8718) 2025-10-17 22:49:49 -04:00
Hannes Rudolph
c8d1a9d699
Normalize docs-extractor audience tags; remove admin/stakeholder; strip tool invocations (#8717)
docs(extractor): normalize audience to type="user"; remove admin/stakeholder; strip tool invocation examples
2025-10-17 19:17:38 -04:00
github-actions[bot]
868117eeae
Changeset version bump (#8716)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-17 17:11:29 -04:00
Matt Rubens
7dcfca7df5
chore: add changeset for v3.28.18 (#8715) 2025-10-17 17:06:19 -04:00
Matt Rubens
236957b818
Revert cloud agents for now (#8713) 2025-10-17 16:59:16 -04:00
Bruno Bergher
f30caf277c
web: Mobile image in /cloud (#8705) 2025-10-17 13:06:42 -04:00
Christiaan Arnoldus
3aa9762d04
Update image generation model selection (#8698) 2025-10-17 10:07:27 -04:00
Matt Rubens
49349e5661
Left align the welcome title (#8700) 2025-10-17 09:40:34 -04:00
Matt Rubens
4405f5a0b3
Remove request content from UI messages (#8696) 2025-10-17 07:34:27 -04:00
Hannes Rudolph
0e7a878fa5
feat: Z AI: only two coding endpoints (#8687) (#8693) 2025-10-17 00:33:53 -04:00
Bruno Bergher
0978ba3996
feat: Cloud agents in extension (#8470)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-17 00:18:16 -04:00
roomote[bot]
6d6b836480
feat: Add userAgent to Bedrock client for version tracking (#8663)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-16 23:08:38 -04:00
Bruno Bergher
9aee31f28a
web: Cloud page and updates to Pricing to explain Cloud Agent Credits (#8605)
* Adds mention of Cloud agents to /pricing

* Credit pricing FAQ

* Skeleton of a /cloud page and more pricing page tweaks

* Lint

* Update apps/web-roo-code/src/app/cloud/page.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* Code review

* Updates copy to new credit system

* Moves Terms of Service to be backed by a markdown file, easier to read/edit/diff

* Updated ToS

* Twerm copy tweaks

* Cloud screenshot and style adjustments

* Style tweaks

* Styles

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-10-16 16:01:19 -07:00
Chris Hasson
270dce5050
fix(editor): prevent file editing issues when git diff views are open (#8676)
* fix(editor): prevent file editing issues when git diff views are open

Add scheme checks to ensure only file:// URIs are matched when finding editors,
avoiding issues with git diffs and other schemes. Includes error logging for
failed editor lookups.

* Remove the warnings

* fix(editor): enforce file:// scheme in editor lookups to prevent git diff issues

---------

Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-15 21:43:47 -04:00
github-actions[bot]
1a3a873002
Changeset version bump (#8675)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-15 19:07:09 -04:00
Matt Rubens
932beabbb0
Release v3.28.17 (#8674) 2025-10-15 19:04:03 -04:00
Daniel
e5216c689e
Add Claude Haiku 4.5 (#8673) 2025-10-15 15:55:32 -05:00
Peter Dave Hello
6b8c21f873
fix(i18n): Update zh-TW run command title (#8631) 2025-10-12 12:59:48 -05:00
github-actions[bot]
3a47c55a2e
Changeset version bump (#8593)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-09 23:57:36 -04:00
Matt Rubens
06189f65ab
chore: add changeset for v3.28.16 (#8592) 2025-10-09 23:51:41 -04:00
Colby Serpa
bdc91b2aef
feat: Add Claude Sonnet 4.5 1M context window support for Claude Code… (#8586)
feat: Add Claude Sonnet 4.5 1M context window support for Claude Code provider
2025-10-09 19:08:16 -04:00
Matt Rubens
507a600ee9
Revert "Clamp GPT-5 max output tokens to 20% of context window" (#8582) 2025-10-09 13:00:51 -04:00
Chris Estreich
b011b63c93
Identify cloud tasks in the extension bridge (#8539) 2025-10-08 20:54:08 -07:00
Matt Rubens
eeaafef786
Revert "feat: Experiment: Show a bit of stats in Cloud tab to help users discover there's more in Cloud" (#8559) 2025-10-07 21:37:10 -04:00
Bruno Bergher
cd8036d2d8
feat: Experiment: Show a bit of stats in Cloud tab to help users discover there's more in Cloud (#8415)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: SannidhyaSah <sah_sannidhya@outlook.com>
Co-authored-by: John Richmond <5629+jr@users.noreply.github.com>
2025-10-07 17:48:23 -04:00
Matt Rubens
5a3f911321
Release: v1.82.0 (#8535) 2025-10-06 11:31:13 -04:00
Matt Rubens
28b642d28c
Add the parent task ID in telemetry (#8532) 2025-10-06 11:30:01 -04:00
Matt Rubens
85b0e8a280
Release: v1.81.0 (#8519) 2025-10-05 10:17:44 -04:00
Matt Rubens
960958a6da
fix: add ollama and lmstudio to MODELS_BY_PROVIDER (#8511)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-05 10:16:09 -04:00
Daniel
97f968673f
Clamp GPT-5 max output tokens to 20% of context window (#8495) 2025-10-03 12:41:51 -04:00
github-actions[bot]
8c6587a690
Changeset version bump (#8492)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-10-03 10:32:44 -04:00
Matt Rubens
5a4aab13c4
chore: add changeset for v3.28.15 (#8491) 2025-10-03 10:22:59 -04:00
renovate[bot]
18e5c194e7
chore(deps): update dependency glob to v11.0.3 (#7767)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-03 10:01:15 -04:00
renovate[bot]
7b4f074b9e
chore(deps): update dependency vite to v6.3.6 [security] (#7838)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-03 10:00:33 -04:00
roomote[bot]
38c8028528
fix: properly reset cost limit tracking when user clicks "Reset and Continue" (#6890)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-03 09:56:34 -04:00
roomote[bot]
1de480b383
fix: improve save button activation in prompts settings (#5780) (#8267)
Co-authored-by: MuriloFP <muriloferreira2@gmail.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-03 09:55:54 -04:00
Matt Rubens
7ba8e33d03
Deprecate free grok 4 fast (#8481)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-10-03 00:14:38 -04:00
Mohammad Danaee nia
8622d93f59
feat: add new DeepSeek and GLM models with detailed descriptions to the Chutes provider (#8467) 2025-10-02 11:44:13 -04:00
John Richmond
13534cc8b7
Release: v1.80.0 (#8442)
chore: bump version to v1.80.0
2025-10-01 10:12:22 -07:00
roomote[bot]
c8a8188f8c
feat: add UsageStats schema and type (#8441)
feat: add UsageStats schema and type to cloud.ts

Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-01 09:50:50 -07:00
Bruno Bergher
9bcd9918af
fix: Addresses overeager 'there are unsaved changes' dialog in settings (#8410)
Fixes overeager 'there are unsaved changes' dialog in settings
2025-10-01 07:39:12 -04:00
Matt Rubens
f8ed7a7931
Add structured data to the homepage (#8427)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-09-30 23:53:20 -04:00
roomote[bot]
3e47e88c01
fix: show send button when only images are selected in chat textarea (#8423)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-30 17:12:53 -04:00
Matt Rubens
c552027960
Include reasoning messages in cloud tasks (#8401) 2025-09-30 15:49:30 -04:00
SannidhyaSah
e33efc6242
chore: Remove unsupported Gemini 2.5 Flash Image Preview free model (#8359) 2025-09-30 15:33:01 -04:00
Matt Rubens
9af9d5b021
A couple more sonnet 4.5 fixes (#8421) 2025-09-30 14:28:23 -04:00
github-actions[bot]
9f41ee098d
Changeset version bump (#8414)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-30 09:38:32 -04:00
Matt Rubens
4ec921c57d
chore: add changeset for v3.28.14 (#8413) 2025-09-30 09:33:50 -04:00
roomote[bot]
9e98d1aef6
feat: add GLM-4.6 model support for z.ai provider (#8408)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-30 09:26:34 -04:00
github-actions[bot]
702b269a1b
Changeset version bump (#8394)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-29 19:25:10 -04:00
Matt Rubens
d25a8d713e
chore: add changeset for v3.28.13 (#8393) 2025-09-29 19:21:58 -04:00
Daniel
7b7bb49572
fix: remove topP parameter from Bedrock inference config (#8388)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-29 19:17:47 -04:00
Matt Rubens
8111da66bd
Fix Vertex Sonnet 4.5 (#8391) 2025-09-29 19:16:52 -04:00
github-actions[bot]
2502058046
Changeset version bump (#8376)
* changeset version bump

* Revise changelog for version 3.28.12

Updated version number and consolidated patch notes.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-29 18:10:33 -04:00
Matt Rubens
8b74af9938
chore: add changeset for v3.28.12 (#8385) 2025-09-29 18:01:34 -04:00
Daniel
b26449575d
fix: Anthropic Sonnet 4.5 model id + Bedrock 1M context checkbox (#8384)
fix(anthropic): use claude-sonnet-4-5 id
fix(bedrock): enable 1M context checkbox for Sonnet 4.5 via shared list
closes #8379
closes #8381
2025-09-29 17:49:50 -04:00
github-actions[bot]
f3b3751b48
Changeset version bump (#8375)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-29 14:55:02 -04:00
Matt Rubens
46f0ae6982
chore: add changeset for v3.28.11 (#8374) 2025-09-29 14:51:29 -04:00
Daniel
6759687180
fix: correct Claude Sonnet 4.5 model ID format (#8373) 2025-09-29 14:47:00 -04:00
roomote[bot]
c57539d4b5
fix: correct AWS Bedrock Claude Sonnet 4.5 model identifier (#8372)
Fixes #8371 - Updates the model ID from anthropic.claude-4.5-sonnet-v1:0
to anthropic.claude-sonnet-4-5-20250929-v1:0 to match AWS Bedrock naming convention

Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-29 14:41:43 -04:00
github-actions[bot]
de77055720
Changeset version bump (#8370)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-29 14:10:35 -04:00
Matt Rubens
06ccab6dd7
chore: add changeset for v3.28.10 (#8369) 2025-09-29 14:04:52 -04:00
Daniel
6a91385f05
feat: add Claude 4.5 Sonnet model across all providers (#8368) 2025-09-29 14:04:40 -04:00
Hannes Rudolph
c943ba7875
ci: refresh contrib.rocks cache workflow (#8083) 2025-09-29 13:17:05 -04:00
Bruno Bergher
ded23b72b7
web: Testimonials (#8360)
* Adds lots of testimonials, 5-stars from marketplace

* Fits more testimonials in one page

* Testimonial heading tweak
2025-09-29 06:12:42 -04:00
Matt Rubens
a57528dc8e
Make chat icons shrink-0 (#8343) 2025-09-26 23:33:29 -04:00
roomote[bot]
602901fa0f
fix: use max_completion_tokens for GPT-5 models in LiteLLM provider (#6980)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-09-26 23:16:20 -04:00
Matt Rubens
b5c58b64aa
Track when telemetry settings change (#8339) 2025-09-26 22:48:33 -04:00
github-actions[bot]
28a7e4cd5c
Changeset version bump (#8337)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-26 15:56:15 -04:00
Matt Rubens
5458e8e05f
chore: add changeset for v3.28.9 (#8336) 2025-09-26 15:49:47 -04:00
Matt Rubens
8a7d90e43b
Upgrade Supernova (#8330) 2025-09-26 15:37:36 -04:00
roomote[bot]
5e218febdb
fix: remove <thinking> tags from prompts for cleaner output and fewer tokens (#8319)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2025-09-26 10:30:09 -04:00
Bruno Bergher
a1e6948b1b
web: More website copy tweaks (#8326)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-26 10:12:00 -04:00
Daniel
87d50a78cb
refactor: remove pr-reviewer mode (#8222) 2025-09-25 17:44:49 -05:00
Bruno Bergher
7fd01ab2a0
wip: Website Improvements (#8303)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-25 16:31:04 -04:00
Matt Rubens
8485548f53
Show the Roo provider on the welcome screen (#8317) 2025-09-25 16:13:04 -04:00
John Costa
a0d6a4b4f9
removing user hint when refreshing models (#7710) 2025-09-25 15:22:16 -04:00
Hannes Rudolph
ab0644d367
Correct tool use suggestion to improve model adherence to suggestion (#8315)
* Correct tool use suggestion to improve model adherence to suggestion

* tweak
2025-09-25 11:53:31 -06:00
roomote[bot]
d959e88a97
feat: Add telemetry tracking to DismissibleUpsell component (#8309)
* feat: add telemetry tracking to DismissibleUpsell component

- Added UPSELL_DISMISSED and UPSELL_CLICKED events to TelemetryEventName enum
- Updated DismissibleUpsell component to track clicks and dismissals with telemetry
- Added telemetry tests to DismissibleUpsell test suite
- Events include upsellId in the payload for tracking specific upsells

* refactor(webview): make handleDismiss synchronous in DismissibleUpsell

test(webview): add scenario where dismissOnClick=true without onClick tracks only UPSELL_DISMISSED; update tests; all tests passing locally

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-25 13:29:43 -04:00
roomote[bot]
43c1de0d7e
feat: log out from cloud when resetting extension state (#8312)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-25 12:24:46 -04:00
github-actions[bot]
bf1aafad9b
Changeset version bump (#8306)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-25 10:25:30 -04:00
Matt Rubens
37a175c4ed
Release v3.28.8 (#8305) 2025-09-25 10:15:34 -04:00
Matt Rubens
b75f8dd274
Add a couple more free models to the Roo provider (#8304) 2025-09-25 10:00:40 -04:00
Hannes Rudolph
798801d582
Fix frequent "No tool used" errors by clarifying tool-use rules (#8292) 2025-09-25 09:24:46 -04:00
Hannes Rudolph
2f1b94f430
fix: include initial ask in condense summarization (#8293) (#8298)
* fix: include initial ask in condense summarization (#8293)

---------

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-24 23:14:44 -06:00
Matt Rubens
d3d0967fc3
Show cloud switcher and option to add a team when logged in (#8291) 2025-09-24 16:42:06 -04:00
Chris Estreich
25f61943ca
Set port 3446 for web-evals in production mode (#8288) 2025-09-24 08:43:05 -07:00
Bruno Bergher
205f3e4242
web: Opengraph image (#8285)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-24 09:18:55 -04:00
github-actions[bot]
8dbd8c4b1b
Changeset version bump (#8271)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-23 19:14:03 -04:00
Matt Rubens
c5269f3262
chore: add changeset for v3.28.7 (#8268) 2025-09-23 18:59:42 -04:00
Matt Rubens
fc4ee93585
Remove org switcher tooltip (#8269) 2025-09-23 18:59:06 -04:00
Bruno Bergher
d8dd19a6ed
ux: Collapse thinking blocks by default (but control all of them with a keyboard shortcut) (#8254)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-23 18:48:04 -04:00
roomote[bot]
35791d03d3
fix: checkpoint restore popover positioning issue (#8219) (#8220)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-09-23 18:35:46 -04:00
Matt Rubens
0682629ac8
Cloud account switcher (#8223)
* Cloud account switcher

* Bare metal evals fixes (#8224)

Co-authored-by: Roo Code <roomote@roocode.com>

* Rounded icons in chat account switcher

* Visual tweaks to CloudView

* Remove hardcoded timeout

* Safer check

* PR feedback

* Fix test

* Check for org mismatches in handleCredentialsChange

* Cloud: use the existing auth event flow to handle org switching

* Cleanup: broadcast() might be confusingly named.

---------

Co-authored-by: Chris Estreich <cestreich@gmail.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: John Richmond <5629+jr@users.noreply.github.com>
2025-09-23 18:18:28 -04:00
roomote[bot]
382ab63ea1
feat: add zai-org/GLM-4.5-turbo model to Chutes provider (#8157)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-23 17:33:44 -04:00
Matt Rubens
f47a2b8b1d
Add image for 3.28.5 (#8266) 2025-09-23 14:19:35 -04:00
github-actions[bot]
44cbee5e75
Changeset version bump (#8262)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-23 14:02:01 -04:00
Matt Rubens
606167209d
chore: add changeset for v3.28.6 (#8263) 2025-09-23 13:54:18 -04:00
Chris Estreich
19c36068cb
Follow-up questions should trigger the "interactive" state (#8259) 2025-09-23 13:47:00 -04:00
Matt Rubens
8e9a266256
chore: add changeset for v3.28.6 (#8261) 2025-09-23 13:43:44 -04:00
Daniel
1a4fb7f91c
feat(types): add GPT-5-Codex model (#8260) 2025-09-23 13:35:44 -04:00
roomote[bot]
807cc999a5
feat: add package.nls.json checking to find-missing-translations script (#8255)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-23 11:10:23 -04:00
roomote[bot]
12f94fc727
fix: respect Ollama Modelfile num_ctx configuration (#7798)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-09-22 23:08:09 -04:00
roomote[bot]
60ba5411b7
fix: prevent checkpoint text from wrapping in non-English languages (#8207)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-22 23:02:43 -04:00
Daniel
9dabb85007
Fix: Improve reasoning block formatting for better readability (#7868) 2025-09-22 23:02:11 -04:00
Chris Estreich
0e1b23d09c
Bare metal evals fixes (#8224)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-22 12:54:56 -07:00
Bruno Bergher
6c2aa63cfd
feat: Add keyboard shortcut for toggling auto-approve (Cmd/Ctrl+Alt+A) (#8214)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-22 11:26:29 -04:00
Matt Rubens
6a4dab0dfa
Remove language selection and word wrap toggle from CodeBlock (#8208) 2025-09-21 23:05:08 -04:00
github-actions[bot]
ceb9d2b9f2
Changeset version bump (#8199)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-09-20 14:29:01 -07:00
Matt Rubens
95e42350d0
Release v3.28.5 (#8198)
chore: add changeset for v3.28.5
2025-09-20 16:33:28 -04:00
Matt Rubens
32d7e6f2ad
Add an announcement for Supernova (#8197)
* Add an announcement for Supernova

* Remove duplicate keys
2025-09-20 16:28:28 -04:00
Matt Rubens
1533efc1ea
Wrap code blocks by default (#8194) 2025-09-20 12:08:09 -04:00
Hannes Rudolph
d956cdb727
Fix duplicate rehydrate during reasoning; centralize rehydrate and preserve cancel metadata (#8171)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-09-20 00:34:21 -04:00
Jorge Piedrahita Ortiz
d6cb396271
update sambanova models (#8186)
* update sambanova models

* fix typo
2025-09-19 22:50:37 -04:00
roomote[bot]
c0e2c5ef5b
fix: apply tiered pricing for Gemini models via Vertex AI (#8018)
* fix: apply tiered pricing for Gemini models via Vertex AI

- Modified calculateCost method to handle models where cacheReadsPrice is only defined in tiers
- Added comprehensive tests for Vertex AI tiered pricing calculation
- Fixes issue where local cost calculation always showed highest tier rates

Fixes #8017

* Delete src/api/providers/__tests__/vertex-tiered-pricing.spec.ts

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-09-19 22:49:42 -04:00
James Edward Dillard
c1e0cdc3cd
Updating the privacy policy to allow us to send occasional emails (#8180)
* Updating the privacy policy to allow us to send onboarding and occasional marketing emails.

* docs: Clarified unsubscribe behavior and updated the Last Updated date

* docs: update Last Updated date in Privacy Policy page
2025-09-19 22:47:21 -04:00
roomote[bot]
f7a6589719
fix: support dash prefix in parseMarkdownChecklist for todo lists (#8055)
- Updated regex pattern to support optional dash prefix (e.g., "- [ ] Task")
- Added comprehensive test coverage for both formats
- Fixes issue where todo lists with dash prefixes were not being parsed correctly

Fixes #8054

Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-19 22:45:46 -04:00
github-actions[bot]
b75ef1dd83
Changeset version bump (#8183)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-19 16:55:05 -04:00
Matt Rubens
8214672517
chore: add changeset for v3.28.4 (#8182) 2025-09-19 16:51:21 -04:00
Matt Rubens
ac4eda9450
Supernova (#8175)
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-09-19 13:31:54 -07:00
Bruno Bergher
07684c017d
bug: Incorrect copy for "Run" command when approving execution (#8179) 2025-09-19 14:40:23 -04:00
Bruno Bergher
f934363beb
ux: Redesigned Message Feed (#7985)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-19 09:30:13 -04:00
Matt Rubens
513fce3f59
Add cookie policy (#8165) 2025-09-18 16:43:44 -04:00
Matt Rubens
765e3a06f1
Add a list of sub-processors (#8163) 2025-09-18 16:11:45 -04:00
roomote[bot]
87b45def18
Fix: Transform keybindings in nightly build to fix command+y shortcut (#8070)
* fix: transform keybindings command references in nightly build

The keybindings section was not being transformed during the nightly build process, causing command+y keybinding to reference the wrong command name (roo-cline.addToContext instead of roo-code-nightly.addToContext).

- Added keybindings schema to types.ts
- Updated generatePackageJson to transform keybindings command references
- This ensures keybindings work correctly in the nightly build

* fix: only include keybindings in output when they exist

Updated generatePackageJson to conditionally add keybindings to avoid including undefined values in the generated package.json. Fixed eslint-disable comment placement.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-17 19:27:43 -04:00
Chris Estreich
a255c95bd0
Get the model id property for a given provider (#8009) 2025-09-17 15:24:27 -07:00
John Richmond
b1c104e20f
Release: v1.78.0 (#8089)
chore: bump version to v1.78.0
2025-09-17 14:43:39 -07:00
roomote[bot]
961338e0ef
Add organizationFeaturesSchema with roomoteControlEnabled (#8085)
feat: add organizationFeaturesSchema with roomoteControlEnabled

- Add organizationFeaturesSchema with optional roomoteControlEnabled boolean
- Integrate features property into organizationSettingsSchema as optional
- Add comprehensive tests for new schema validation
- Maintain backward compatibility with existing organization settings

Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-17 14:31:12 -07:00
Hannes Rudolph
c837025d48
Docs: Overhaul README (#8005)
* docs: overhaul README for clarity and impact

* fix: update badge links and styles in README for improved visibility

* docs(README): stronger CTAs for Discord/Reddit; restore Modes/Roles incl. cloud agents

* docs(readme): add support CTA; refine modes section; clarify custom modes wording

- add centered help/links CTA under badges: [README.md](README.md:8-10)
- expand feature list to explicitly include modes: [README.md](README.md:45)
- rename section header “Modes and Roles” → “Modes”: [README.md](README.md:52)
- update wording to “Custom Modes: build specialized modes for your team or workflow”: [README.md](README.md:60)

* docs: implement @jdilla1277 suggestions for English README

- Updated header to "Your AI-Powered Dev Team, Right in Your Editor" (removed Cline reference)
- Changed line 44 to "Generate Code from natural language descriptions and specs" for better SEO
- Removed "not the other way around" phrase from line 54
- Replaced "Cloud Agents" with "Roomote Control" on line 61

As requested by @hannesrudolph, these changes are only applied to the English README.

* docs: clarify Roomote Control description and update related links in README

* Reworked the contributor list. Made translastion corrections.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-17 14:32:42 -06:00
Daniel
7b1e3a0ee5
feat(cloud): Add telemetry retry queue for network resilience (#7597)
* feat(cloud): Add telemetry retry queue for network resilience

- Implement RetryQueue class with workspace-scoped persistence
- Queue failed telemetry events for automatic retry
- Retry events every 60 seconds with fresh auth tokens
- FIFO eviction when queue reaches 100 events
- Persist queue across VS Code restarts

This ensures telemetry data isn't lost during network failures or temporary server issues.
Migrated from RooCodeInc/Roo-Code-Cloud#744

* fix: address PR review feedback for retry queue

- Fix retry order to use consistent FIFO processing
- Add retry limit enforcement with max retries check
- Add configurable request timeout (default 30s)
- Add comprehensive tests for retryAll() method
- Add request-max-retries-exceeded event
- Fix timeout test to avoid timing issues

* fix: resolve TypeScript errors in RetryQueue tests

* fix(cloud): Address PR feedback for telemetry retry queue

- Handle HTTP error status codes (500s, 401/403, 429) as failures that trigger retry
- Remove queuing of backfill operations since they're user-initiated
- Fix race condition in concurrent retry processing with isProcessing flag
- Add specialized retry logic for 429 with Retry-After header support
- Clean up unnecessary comments
- Add comprehensive tests for new status code handling
- Add temporary debug logs with emojis for testing

* refactor: address PR feedback for telemetry retry queue

- Remove unused X-Organization-Id header from auth header provider
- Simplify enqueue() API by removing operation parameter
- Fix error retry logic: only retry 5xx, 429, and network failures
- Stop retrying 4xx client errors (400, 401, 403, 404, 422)
- Implement queue-wide pause for 429 rate limiting
- Add auth state management integration:
  - Pause queue when not in active-session
  - Clear queue on logout or user change
  - Preserve queue when same user logs back in
- Remove debug comments
- Fix ESLint no-case-declarations error with proper block scope
- Update tests for all new behaviors
2025-09-17 09:21:31 -07:00
Bruno Bergher
6ac6a928cd
ux: Responsive Auto-Approve (#8032)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-09-17 10:55:16 -04:00
James Edward Dillard
dcc6db00c7
feat(web): update homepage headline and tagline for remote control capabilities (#7911) 2025-09-16 22:22:26 -04:00
Matt Rubens
2263d86a20
Types 1.77.0 (#8031) 2025-09-16 15:20:38 -04:00
Matt Rubens
dd20af23bb
Release: v1.76.0 (#8030) 2025-09-16 14:39:11 -04:00
roomote[bot]
2819120216
feat: add GDPR-compliant cookie consent banner (#8022)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <me@brunobergher.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-16 14:34:19 -04:00
roomote[bot]
6d8de53c8f
fix: skip flaky Windows test in custom-system-prompt.spec.ts (#8023)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-16 13:47:56 -04:00
roomote[bot]
297c85ff87
feat: remove web-docs app (#8027)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-16 12:39:34 -04:00
github-actions[bot]
4fe051f4b5
Changeset version bump (#8026)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-16 12:19:46 -04:00
Matt Rubens
3c2fd1d3d3
Release v3.28.3 (#8025) 2025-09-16 12:10:20 -04:00
roomote[bot]
fc9c395af2
feat: Replace + icon with edit icon for New Task button (#7942)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-16 11:55:17 -04:00
roomote[bot]
cde738a450
fix: handle square bracket HTML entities in Gemini responses (#7577)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-16 11:53:52 -04:00
roomote[bot]
6fe90713ab
fix: filter out Claude Code built-in tools (ExitPlanMode, BashOutput, KillBash) (#7818)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-16 11:51:17 -04:00
Bruno Bergher
3d45d4aa13
feat: Bring back a way to temporarily and globally pause auto-approve without losing your toggle state (#8024)
* Visual improvements and code cleanup (removes duplication)

* Brings back an 'enabled' toggle for auto-approve
2025-09-16 08:59:17 -04:00
roomote[bot]
c987417889
feat: Reposition Add Image button inside ChatTextArea (#7989)
* feat: move Add Image button inside ChatTextArea

- Moved Add Image button from bottom toolbar to top-right inside text area
- Repositioned Enhance Prompt button to be above Send button (bottom-right)
- Both buttons now follow similar positioning pattern as Send button
- Maintains consistent button styling and transitions

* fix: corrected C# tree-sitter query (#7813)

* feat: Move slash commands to Settings tab with gear icon for discoverability (#7988)

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <me@brunobergher.com>
Co-authored-by: Mubeen Zulfiqar <mubeen_zulfiqar@yahoo.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>

* Add Z.ai coding plan support (#8003)

* chore(deps): bump axios from 1.9.0 to 1.12.0 (#7963)

Bumps [axios](https://github.com/axios/axios) from 1.9.0 to 1.12.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.9.0...v1.12.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.12.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix context menu is obscured when edit message. (#7951)

* feat: add keyboard shortcut for "Add to Context" action (#7908)

Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>

* fix: handle ByteString conversion errors in OpenAI embedders (#8008)

* CONTRIBUTING.md tweaks and issue template rewrite (#8014)

* Visual tweaks

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Mubeen Zulfiqar <mubeen_zulfiqar@yahoo.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Bruno Bergher <me@brunobergher.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: NaccOll <wuyoubin0504@gmail.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2025-09-16 07:41:37 -04:00
Hannes Rudolph
ee58c5d0fa
CONTRIBUTING.md tweaks and issue template rewrite (#8014) 2025-09-16 00:29:45 -04:00
Daniel
759454b455
fix: handle ByteString conversion errors in OpenAI embedders (#8008) 2025-09-15 22:56:20 -04:00
roomote[bot]
beb0a59470
feat: add keyboard shortcut for "Add to Context" action (#7908)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-15 22:53:40 -04:00
NaccOll
358519db38
Fix context menu is obscured when edit message. (#7951) 2025-09-15 22:43:31 -04:00
dependabot[bot]
68c5be8030
chore(deps): bump axios from 1.9.0 to 1.12.0 (#7963)
Bumps [axios](https://github.com/axios/axios) from 1.9.0 to 1.12.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.9.0...v1.12.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.12.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-15 15:48:36 -07:00
Daniel
3fe2918e67
Add Z.ai coding plan support (#8003) 2025-09-15 17:53:20 -04:00
roomote[bot]
94b4511053
feat: Move slash commands to Settings tab with gear icon for discoverability (#7988)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <me@brunobergher.com>
Co-authored-by: Mubeen Zulfiqar <mubeen_zulfiqar@yahoo.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-15 15:41:00 -04:00
Mubeen Zulfiqar
1b4819c086
fix: corrected C# tree-sitter query (#7813) 2025-09-15 14:10:45 -04:00
Bruno Bergher
9d33c109c9
ux: Makes text area buttons appear only when there's text (#7987) 2025-09-15 11:01:25 -04:00
github-actions[bot]
d54ff8a604
Changeset version bump (#7980)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-14 15:16:24 -04:00
Matt Rubens
3be0a96851
chore: add changeset for v3.28.2 (#7979) 2025-09-14 15:12:15 -04:00
Matt Rubens
c79cb297a5
Remove chevrons from chat buttons (#7970) 2025-09-14 15:02:42 -04:00
Chris Estreich
b309a6ad8b
Disable Roomote Control on logout (#7976) 2025-09-14 10:47:16 -07:00
Bruno Bergher
9ea7173a3e
ux: Smaller and more subtle auto-approve UI (#7894)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Bruno Bergher <me@brunobergher.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: ItsOnlyBinary <ItsOnlyBinary@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: John Richmond <5629+jr@users.noreply.github.com>
2025-09-14 10:20:28 -04:00
Daniel
d09689bf9b
feat: add Qwen3 Next 80B A3B models to chutes provider (#7948) 2025-09-13 23:07:57 -04:00
roomote[bot]
b576dd9008
fix: include API key in Ollama /api/tags requests (#7903)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-13 22:55:49 -04:00
roomote[bot]
80d82e65f0
fix: make nested git repository warning persistent with path info (#7885)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-09-13 22:39:52 -04:00
Matt Rubens
72bc790d6a
Add a little padding to the cloudview (#7954) 2025-09-12 23:35:27 -04:00
Daniel
c4c478023d
fix: preserve original first message context during conversation condensing (#7939) 2025-09-12 12:52:02 -04:00
Daniel
08d7f80e22
Fix message queue re-queue loop in Task.ask() (#7823) 2025-09-11 18:17:48 -07:00
roomote[bot]
03709fd9a5
fix: restrict @-mention parsing to line-start or whitespace boundaries (#7876)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-11 19:37:10 -04:00
Matt Rubens
9c43282c58
Remove Roo Code 3.25 release announcement
Removed the section about Roo Code 3.25 release notes.
2025-09-11 16:47:49 -04:00
github-actions[bot]
0cbc66a09e
Changeset version bump (#7917)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-11 16:34:02 -04:00
Matt Rubens
9d296ec46b
chore: add changeset for v3.28.1 (#7916) 2025-09-11 16:30:42 -04:00
Matt Rubens
200d79e818
In-app announcement for Roo Code Cloud (#7914)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-09-11 16:28:21 -04:00
Daniel
3dfa5269ff
Fix: Preserve first message during conversation condensing (#7910) 2025-09-11 16:00:41 -04:00
Matt Rubens
33fe6fb9c6
Make Posthog telemetry the default (#7909)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-09-11 15:50:40 -04:00
roomote[bot]
a9e22f0df0
fix: center active mode in selector dropdown on open (#7883)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-09-11 15:16:43 -04:00
roomote[bot]
ad8551868e
feat: Add cloud task button for opening tasks in Roo Code Cloud (#7572)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: Bruno Bergher <me@brunobergher.com>
2025-09-11 15:08:14 -04:00
Matt Rubens
8fee3127ff
Bust cache in generated image preview (#7860)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-10 17:26:16 -04:00
roomote[bot]
3b1a6d1825
feat: show notification when the checkpoint initialization fails (#7766)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-09-10 17:08:45 -04:00
github-actions[bot]
9da9785eb2
Changeset version bump (#7859)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-10 16:38:49 -04:00
Matt Rubens
a7befef848
v3.28.0 (#7858) 2025-09-10 16:34:08 -04:00
Bruno Bergher
469a70fe5d
feat: In-extension dismissible upsells for Roo Code Cloud (#7850)
* First pass at separate upsell dialog

* Revert PR #7188 - Restore temperature parameter to fix TabbyApi/ExLlamaV2 crashes (#7594)

* fix: reduce CodeBlock button z-index to prevent overlap with popovers (#7783)

Fixes #7703 - CodeBlock language dropdown and copy button were appearing above popovers due to z-index: 100. Reduced to z-index: 40 to maintain proper layering hierarchy while keeping buttons functional.

* Make ollama models info transport work like lmstudio (#7679)

* feat: add click-to-edit, ESC-to-cancel, and fix padding consistency for chat messages (#7790)

* feat: add click-to-edit, ESC-to-cancel, and fix padding consistency

- Enable click-to-edit for past messages by making message text clickable
- Add ESC key handler to cancel edit mode in ChatTextArea
- Fix padding consistency between past and queued message editors
- Adjust right padding for edit mode to accommodate cancel button

Fixes #7788

* fix: adjust padding and layout for ChatTextArea in edit mode

* refactor: replace hardcoded pr-[72px] with standard Tailwind pr-20 class

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>

* Let people paste in the auth redirect url (#7805)

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Bruno Bergher <me@brunobergher.com>

* fix: resolve chat message edit/delete duplication issues (#7793)

* fix: add GIT_EDITOR env var to merge-resolver mode for non-interactive rebase (#7819)

* UI: Render reasoning as plain italic (match <thinking>) (#7752)

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>

* Add taskSyncEnabled to userSettingsConfigSchema (#7827)

feat: add taskSyncEnabled to userSettingsConfigSchema

Co-authored-by: Roo Code <roomote@roocode.com>

* Release: v1.75.0 (#7829)

chore: bump version to v1.75.0

* fix: prevent negative cost values and improve label visibility in evals chart (#7830)

Co-authored-by: Roo Code <roomote@roocode.com>

* Fix Groq context window display (#7839)

* feat: add DismissibleUpsell component for dismissible messages

- Created DismissibleUpsell component with variant support (banner/default)
- Added dismissedUpsells to GlobalState for persistence
- Implemented message handlers for dismissing and retrieving dismissed upsells
- Added comprehensive tests for the component
- Uses VSCode extension globalState for persistent storage

* fix: Apply PR feedback for DismissibleUpsell component

- Changed from className to separate 'id' and 'className' props for better semantics
- Added i18n support for accessibility labels (aria-label and title)
- Fixed memory leak by adding mounted flag to prevent state updates after unmount
- Fixed race condition by sending dismiss message before hiding component
- Fixed inefficient array operations in webviewMessageHandler
- Added comprehensive test coverage for edge cases including:
  - Multiple rapid dismissals
  - Component unmounting during async operations
  - Invalid/malformed message handling
  - Proper message sending before unmount
- Added null checks for message data to handle edge cases gracefully

* New Cloud upsell dialog in task share and cloud view, shared component

* Properly working DismissibleUpsell

* Working upsell for long-running tasks

* CTA in AutoApproveMenu

* Home page CTA

* Fixes the autoapprove upsell and some tests

* Visual and copy fixes

* Test fix

* Translations

* Stray className attribute

* Cloud view fixes in a left-aligned layout

* Removes unnecessary test

* Less flaky tests

* Fixes sharebutton behavior and updates associated tests

* Update webview-ui/src/i18n/locales/it/cloud.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Fix dismissed flicker

* Fix long task upsell

---------

Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: ItsOnlyBinary <ItsOnlyBinary@users.noreply.github.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: John Richmond <5629+jr@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-09-10 13:06:13 -07:00
John Richmond
80af39dc74
separate task sync roomote control (#7799)
* feat: separate Task Sync and Roomote Control settings

- Add new taskSyncEnabled setting to control task content syncing
- Keep remoteControlEnabled for Roomote Control functionality
- Task Sync controls whether task content is sent to cloud
- Roomote Control controls whether cloud can send instructions back
- Roomote Control now depends on Task Sync being enabled
- Usage metrics (tokens, cost) always reported regardless of settings
- Update UI with two separate toggles and clear descriptions
- Add info text explaining usage metrics are always reported

* feat: add missing translations for Task Sync and Roomote Control settings

- Added taskSync, taskSyncDescription, remoteControlRequiresTaskSync, and usageMetricsAlwaysReported keys to all non-English cloud.json files
- Updated cloudBenefit keys to match English structure
- Ensured all languages have consistent translation keys for the new Task Sync and Roomote Control features

* Cloud: cleanup taskSyncEnabled additions

* fix: correct indentation localization files

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-10 12:43:11 -07:00
Matt Rubens
7cd6520302
Fix Groq context window display (#7839) 2025-09-10 00:50:57 -04:00
roomote[bot]
48d592f433
fix: prevent negative cost values and improve label visibility in evals chart (#7830)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-09 17:50:37 -04:00
John Richmond
d2e07ec8b9
Release: v1.75.0 (#7829)
chore: bump version to v1.75.0
2025-09-09 14:08:05 -07:00
roomote[bot]
de0cd99aa7
Add taskSyncEnabled to userSettingsConfigSchema (#7827)
feat: add taskSyncEnabled to userSettingsConfigSchema

Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-09 13:53:25 -07:00
roomote[bot]
bbd3d9883b
UI: Render reasoning as plain italic (match <thinking>) (#7752)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-09-09 13:18:33 -04:00
Daniel
39030bf273
fix: add GIT_EDITOR env var to merge-resolver mode for non-interactive rebase (#7819) 2025-09-09 12:42:04 -04:00
Daniel
88b5d66cb8
fix: resolve chat message edit/delete duplication issues (#7793) 2025-09-09 12:26:44 -04:00
Matt Rubens
5780659ae5
Let people paste in the auth redirect url (#7805)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Bruno Bergher <me@brunobergher.com>
2025-09-09 09:50:50 -04:00
roomote[bot]
195f4eb245
feat: add click-to-edit, ESC-to-cancel, and fix padding consistency for chat messages (#7790)
* feat: add click-to-edit, ESC-to-cancel, and fix padding consistency

- Enable click-to-edit for past messages by making message text clickable
- Add ESC key handler to cancel edit mode in ChatTextArea
- Fix padding consistency between past and queued message editors
- Adjust right padding for edit mode to accommodate cancel button

Fixes #7788

* fix: adjust padding and layout for ChatTextArea in edit mode

* refactor: replace hardcoded pr-[72px] with standard Tailwind pr-20 class

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-09-08 22:50:21 -04:00
ItsOnlyBinary
76c6745649
Make ollama models info transport work like lmstudio (#7679) 2025-09-08 22:48:22 -04:00
Daniel
0188159762
fix: reduce CodeBlock button z-index to prevent overlap with popovers (#7783)
Fixes #7703 - CodeBlock language dropdown and copy button were appearing above popovers due to z-index: 100. Reduced to z-index: 40 to maintain proper layering hierarchy while keeping buttons functional.
2025-09-08 22:46:59 -04:00
Daniel
0ce4e891fd
Revert PR #7188 - Restore temperature parameter to fix TabbyApi/ExLlamaV2 crashes (#7594) 2025-09-08 10:30:02 -04:00
renovate[bot]
25717817a6
chore(deps): update dependency eslint-plugin-turbo to v2.5.6 (#7764)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-07 20:19:10 -04:00
renovate[bot]
4e5e3ed200
chore(deps): update dependency nock to v14.0.10 (#6465)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-07 14:47:38 -04:00
renovate[bot]
8f2d40d177
chore(deps): update dependency @changesets/cli to v2.29.6 (#7376)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-07 14:45:49 -04:00
renovate[bot]
408ea44ea2
chore(deps): update dependency esbuild to v0.25.9 (#5455)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-07 14:45:36 -04:00
renovate[bot]
888bd2d570
chore(deps): update dependency eslint-config-prettier to v10.1.8 (#6464)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-07 14:45:21 -04:00
Chris Estreich
247da38b02
Add model info to eval runs table (#7749) 2025-09-06 22:10:08 -07:00
ssweens
18cf33f96d
Feature/update vertex ai models and regions (#7727) 2025-09-06 22:18:55 -04:00
roomote[bot]
9378a4e2ad
feat: show dash instead of zero for missing data on evals page (#7748)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-06 17:15:10 -04:00
roomote[bot]
079b37a85d
feat: replace cloud waitlist ad with direct Cloud link in navigation (#7742)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-06 13:05:01 -04:00
roomote[bot]
e8deedd91b
fix: update DeepSeek pricing to new unified rates effective Sept 5, 2025 (#7687)
- Updated deepseek-chat pricing: $0.56 input (cache miss), $0.07 (cache hit), $1.68 output
- Updated deepseek-reasoner pricing: same unified rates as deepseek-chat
- Both models now have identical pricing as per DeepSeek announcement
- Pricing takes effect at 16:00 UTC, Sept 5th, 2025

Fixes #7685

Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-05 18:46:00 -04:00
github-actions[bot]
8864651c95
Changeset version bump (#7716)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-05 18:20:26 -04:00
Matt Rubens
e3facc1ee9
Bump to 3.27.0 (#7719) 2025-09-05 18:15:59 -04:00
roomote[bot]
ed765a3e7d
feat(checkpoints): create checkpoint when user sends a message (#7713)
* feat(checkpoints): create checkpoint on user message send

* fix(checkpoints): suppress implicit user-message checkpoint row; keep current checkpoint updated without a chat row

* Fix checkpoint suppression for user messages

- Propagate suppressMessage flag through event chain properly
- Update ChatView to check checkpoint metadata for suppressMessage flag
- Ensure checkpoint messages are created but not rendered when suppressed
- Fix bug where checkpointSave(false) should have been checkpointSave(true)

* fix: only create checkpoint on user message when files have changed

- Changed allowEmpty from true to false in checkpointSave call
- Checkpoints will now only be created when there are actual file changes
- This avoids creating empty commits in the shadow git repository

* test: update checkpoint test to include suppressMessage parameter

- Fixed test expectation to match the new function signature
- saveCheckpoint now expects both allowEmpty and suppressMessage parameters

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-09-05 18:07:59 -04:00
Matt Rubens
ae01a90151
chore: add changeset for v3.26.8 (#7715) 2025-09-05 16:24:44 -04:00
Daniel
49b50c8997
fix: preserve context by retrying with full conversation on invalid previous_response_id (#7714) 2025-09-05 16:09:14 -04:00
Ton Hoang Nguyen (Bill)
c206da4a26
fix: Tackling Race/State condition issue by Changing the Code Design for Gemini Grounding Sources (#7434)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-05 15:03:09 -04:00
Daniel
687b37943a
fix: resolve CI e2e test ETIMEDOUT errors when downloading VS Code (#7583) 2025-09-05 14:54:22 -04:00
NaccOll
1e403a7c92
fix: identify mcp and slash command config path in multiple folder workspace (#6904) 2025-09-05 14:52:48 -04:00
Daniel
0510c03684
fix: prevent stack overflow in codebase indexing for large projects (#7712) 2025-09-05 14:51:38 -04:00
NaccOll
e559ac64bd
Edit/Delete User Message (#7447) 2025-09-05 14:50:18 -04:00
roomote[bot]
2b533993ff
fix: handle array paths from VSCode terminal profiles (#7697)
* fix: handle array paths from VSCode terminal profiles

- Updated terminal profile interfaces to support string | string[] for path property
- Added normalizeShellPath helper to safely extract first element from array paths
- Modified isShellAllowed to handle both string and array inputs
- Updated getWindowsShellFromVSCode, getMacShellFromVSCode, and getLinuxShellFromVSCode to use normalizeShellPath
- Added comprehensive tests for array path handling

Fixes #7695

* feat: add validateShellPath export for robust shell validation

- Created validateShellPath as a public API for shell path validation
- Refactored internal validation logic into isShellAllowedInternal
- Added comprehensive test coverage for all edge cases
- Maintains backward compatibility with deprecated isShellAllowed
- Handles arrays, strings, null, undefined, and nested arrays gracefully

* Simplify roomote's work a little

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: John Richmond <5629+jr@users.noreply.github.com>
2025-09-05 11:41:00 -07:00
roomote[bot]
2c8c140551
feat: add Kimi K2-0905 model to Chutes provider (#7701)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-05 09:22:22 -04:00
Daniel
55ea32842b
Fix: Improve WelcomeView styling and readability (#7682)
* fix: improve WelcomeView styling and readability

- Reduced excessive padding from p-16 to p-6
- Removed excessive bold text throughout
- Made provider cards more compact with smaller icons (32x32px)
- Increased introduction text size from text-sm to text-base for better visibility
- Centered the main greeting title
- Improved visual hierarchy with proper text sizing and spacing
- Added subtle borders and improved color contrast

* fix: remove undefined color class from incentive text

Removed the text-vscode-warningForeground class as it wasn't defined in index.css. The incentive text now uses default color which looks good.
2025-09-05 07:55:15 -04:00
github-actions[bot]
90e7d09596
Changeset version bump (#7690)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-05 00:06:19 -04:00
John Richmond
467c9f597d
Use an allowlist to keep the prompt default shell sane (#7681) 2025-09-05 00:00:52 -04:00
Daniel
4ad1a26492
feat: Add Kimi K2 0905 model to Groq, Moonshot, and Fireworks providers (#7693) 2025-09-04 23:57:39 -04:00
Matt Rubens
146d849ede
Delete .changeset/petite-rats-admire.md 2025-09-04 23:48:36 -04:00
Matt Rubens
282a75bc97
Release v3.26.7 (#7691) 2025-09-04 23:45:24 -04:00
Matt Rubens
2b7325170e
Fix test 2025-09-04 23:27:49 -04:00
CellenLee
d9f80f175f
feat: update kimi-k2-0905-preview and kimi-k2-turbo-preview (#7663) 2025-09-04 23:27:15 -04:00
WangXiaolong
bca6e86d2b
fix: Fix the issue of Moonshot's maximum return token count being limited to 1024 (#7673)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-09-04 23:19:58 -04:00
Daniel
de12ec169b
fix: prevent countdown timer from showing in history for answered follow-up questions (#7686) 2025-09-04 23:19:05 -04:00
Hannes Rudolph
571d1a4833
feat: OpenAI Responses API service tiers (flex/priority) — UI selector, pricing, and tests (#7646)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-09-04 23:14:01 -04:00
roomote[bot]
65146b1b12
fix: add error transform to cryptic openAI SDK errors when API key is invalid (#7586)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-09-04 23:12:28 -04:00
roomote[bot]
7935c94827
fix: validate MCP tool exists before execution (#7632)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-09-04 17:44:31 -04:00
Thach Nguyen
72502d8f1a
feat: Add DeepInfra as a model provider in Roo Code (#7677) 2025-09-04 17:28:45 -04:00
Peter Dave Hello
b48b0be061
Minor zh-TW Traditional Chinese locale typo fix (#7672) 2025-09-04 12:24:56 -04:00
Matt Rubens
b50104cc59
Handle zsh glob qualifiers correctly (#7667) 2025-09-04 11:14:25 -04:00
Matt Rubens
966ed76ce2
Handle zsh process substitution correctly (#7658) 2025-09-04 01:14:52 -04:00
Matt Rubens
e1dfe25321
Remove unused slack notif (#7655) 2025-09-04 01:06:08 -04:00
Matt Rubens
a0384f35d5
Delete .github/workflows/discord-pr-notify.yml 2025-09-03 23:18:11 -04:00
github-actions[bot]
08a825f9bb
Changeset version bump (#7651)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-03 23:04:52 -04:00
Matt Rubens
e2c1a20a23
Release v3.26.6 (#7650) 2025-09-03 22:57:15 -04:00
roomote[bot]
e7f599bfb9
fix: use askApproval wrapper in insert_content and search_and_replace tools (#7649)
Fixes issue where isWriteProtected was incorrectly passed as the partial flag
to task.ask(), causing "Current ask promise was ignored (#1)" error.

Both tools now use the askApproval wrapper function which correctly handles
the parameter ordering, passing undefined for progressStatus and isWriteProtected
as the fourth parameter.

Fixes #7648

Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-03 22:35:40 -04:00
WangXiaolong
0126c5dd46
feat: add Kimi K2 Turbo model configuration to moonshotModels (#7593)
* feat: add Kimi K2 Turbo model configuration to moonshotModels

* feat: update Kimi K2 Turbo pricing and cache read prices
2025-09-03 20:11:38 -04:00
淡草
1f5ee4307e
fix: preserve scroll position when switching tabs in settings (#7587)
* fix: preserve scroll position when switching tabs in settings

* ui(settings): restore scroll synchronously to prevent flicker; dx(ui): name TabContent for clearer DevTools

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-09-03 19:43:05 -04:00
Chris Estreich
c25cfdeaef
Publish token usage metrics (#7637) 2025-09-03 13:51:27 -07:00
John Richmond
f12f1934a7
Cloud: remove extension_bridge_enabled for personal users (#7638) 2025-09-03 13:49:55 -07:00
Matt Rubens
8dbd30af6c
Release: v1.73.0 (#7636) 2025-09-03 16:13:32 -04:00
Chris Estreich
280b75d2eb
Focus the extension when receiving bridge commands (#7633) 2025-09-03 12:23:50 -07:00
roomote[bot]
d7896924a9
feat: add run_slash_command tool for executing slash commands (#7473)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-09-03 14:14:55 -04:00
github-actions[bot]
130ce2936e
Changeset version bump (#7630)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-03 09:49:02 -04:00
github-actions[bot]
c0b9e7adcf
Update contributors list (#7629)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-09-03 09:46:27 -04:00
Matt Rubens
7f5d82f8c6
chore: add changeset for v3.26.5 (#7628) 2025-09-03 09:45:20 -04:00
Mohammad Danaee nia
84bc7035ee
Update chutes.ts to add Qwen3 235B A22B Thinking 2507 model (#7578)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-03 09:27:24 -04:00
Chris Estreich
43ff486d42
Publish subtask events (#7626) 2025-09-03 04:05:54 -07:00
Chris Estreich
bcb71dbebf
More socket-io client logging improvements (#7620) 2025-09-03 00:59:48 -07:00
Chris Estreich
aa4144e10e
More socket-io client fixes from PR feedback (#7619) 2025-09-03 00:41:56 -07:00
Chris Estreich
c1509da9bd
Fix socket-io client event handling (#7618) 2025-09-03 00:39:26 -07:00
Matt Rubens
f8973d9539
Never give up in socket transport (#7616) 2025-09-03 02:47:15 -04:00
Chris Estreich
641c058587
Send custom modes to the extension bridge (#7612) 2025-09-02 23:11:45 -07:00
Chris Estreich
5196c75017
Move message queue to the extension host (#7604)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-09-02 19:12:18 -07:00
Daniel
7e24600877
feat: add auto-approve support for MCP access_resource tool (#7606) 2025-09-02 21:49:21 -04:00
Hannes Rudolph
d1baa6e849
fix: add cache reporting support for OpenAI-Native provider (#7602)
* fix: add cache reporting support for OpenAI-Native provider

- Add normalizeUsage method to properly extract cache tokens from Responses API
- Support both detailed token shapes (input_tokens_details) and legacy fields
- Calculate cache read/write tokens with proper fallbacks
- Include reasoning tokens when available in output_tokens_details
- Ensure accurate cost calculation using uncached input tokens

This fixes the issue where caching information was not being reported
when using the OpenAI-Native provider with the Responses API.

* fix: improve cache token normalization and add comprehensive tests

- Add fallback to derive total input tokens from details when totals are missing
- Remove unused convertToOpenAiMessages import
- Add comment explaining cost calculation alignment with Gemini provider
- Add comprehensive test coverage for normalizeUsage method covering:
  - Detailed token shapes with cached/miss tokens
  - Legacy field names and SSE-only events
  - Edge cases including missing totals with details-only
  - Cost calculation with uncached input tokens

* fix: address PR review comments

- Remove incorrect fallback to missFromDetails for cache write tokens
- Fix cost calculation to pass total input tokens (calculateApiCostOpenAI handles subtraction)
- Improve readability by extracting cache detail checks to intermediate variables
- Remove redundant ?? undefined
- Update tests to reflect correct behavior (miss tokens are not cache writes)
- Add clarifying comments about cache miss vs cache write tokens
2025-09-02 19:59:16 -04:00
John Richmond
59d6e74ec0
Cloud: fix provider syncing (#7603)
ClineProvider creation was moved before CloudService which broke
the old way of doing things.
2025-09-02 15:18:21 -07:00
Bruno Bergher
2e59347a9d
Shows a pill with the base Roo Code Cloud URL when not pointing to pr… (#7555)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-09-01 21:38:05 -04:00
roomote[bot]
fe2b6126c6
feat: add configurable embedding batch size for code indexing (#7464)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-09-01 21:36:56 -04:00
github-actions[bot]
ae8a639d6f
Changeset version bump (#7580)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-01 11:41:52 -04:00
github-actions[bot]
5092cdf247
Update contributors list (#7462)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-09-01 11:39:10 -04:00
Matt Rubens
00d26ee4bf
v3.26.4 (#7579) 2025-09-01 11:37:37 -04:00
Christiaan Arnoldus
97cfb962a0
Fix claudeCode.notFound translation key (#7571)
I think I saw someone post a screenshot where "errors.claudeCode.notFound" was shown untranslated.
2025-09-01 08:53:14 -04:00
Matt Rubens
c97027427b
Disconnect extension bridge on logout (#7563)
* Disconnect extension bridge on logout

* Remove bad test

* Cleanup
2025-09-01 08:50:52 -04:00
roomote[bot]
63b71d8299
feat: add Ollama API key support for Turbo mode (#7425)
* feat: add Ollama API key support for Turbo mode

- Add ollamaApiKey field to ProviderSettings schema
- Add ollamaApiKey to SECRET_STATE_KEYS for secure storage
- Update Ollama and NativeOllama providers to use API key for authentication
- Add UI field for Ollama API key (shown when custom base URL is provided)
- Add test coverage for API key functionality

This enables users to use Ollama Turbo with datacenter-grade hardware by providing an API key for authenticated Ollama instances or cloud services.

* fix: use VSCodeTextField for Ollama API key field

Remove non-existent ApiKeyField import and use standard VSCodeTextField with password type, matching other provider implementations

* Add missing translation keys for Ollama API key support

- Add providers.ollama.apiKey and providers.ollama.apiKeyHelp to all 18 language files
- Support for authenticated Ollama instances and cloud services
- Relates to PR #7425

* refactor: improve type safety for Ollama client configuration

- Replace 'any' type with proper OllamaOptions (Config) type
- Import Config type from ollama package for better type checking

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-08-30 19:20:31 -04:00
roomote[bot]
f5e0525536
feat: rename Account tab to Cloud tab (#7558)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-30 18:57:00 -04:00
Daniel
fad219e001
feat: optimize memory usage for image handling in webview (#7556)
* feat: optimize memory usage for image handling in webview

- Replace base64 image data with webview URIs to reduce memory footprint
- Add proper resource roots to webview for workspace file access
- Implement convertToWebviewUri method for safe file-to-URI conversion
- Update ImageViewer to handle both webview URIs and file paths separately
- Add image message type for proper image rendering in chat
- Improve error handling and display for failed image loads
- Add comprehensive tests for ImageViewer component
- Format display paths as relative for better readability

This change significantly reduces memory usage by avoiding base64 encoding
of images and instead using VSCode's webview URI system for direct file
access. Images are now loaded on-demand from disk rather than being held
in memory as base64 strings.

* fix: address PR review comments

- Use safeJsonParse instead of JSON.parse in ChatRow.tsx
- Add type definition for parsed image info
- Add more specific error types in ClineProvider.ts
- Add comprehensive JSDoc comments to ImageBlock.tsx
- Improve error handling and type safety

* fix: address MrUbens' review comments

- Remove hardcoded 'rc1' pattern in formatDisplayPath, use generic workspace detection
- Internationalize 'No image data' text using i18n system

* chore: remove useless comment

* chore(i18n): add image.noData to all locales to fix translation check

* test: update ImageViewer.spec to align with i18n key and flexible path formatting
2025-08-30 15:57:30 -04:00
Piotr Wilkin (ilintar)
47f594f27b
fix: special tokens should not break task processing (#7540) 2025-08-30 10:40:40 -04:00
Chris Estreich
c7d7ad8197
Fix evals (#7547) 2025-08-29 20:10:58 -07:00
Matt Rubens
0e95f9312c
Putting the Roo in Roo-leases (#7546) 2025-08-29 23:00:59 -04:00
Chris Estreich
20929b0f16
Mode and provider profile selector (#7545) 2025-08-29 16:48:06 -07:00
github-actions[bot]
a1f9b7d55e
Changeset version bump (#7542)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-29 18:53:07 -04:00
Matt Rubens
63e40d2cc8
chore: add changeset for v3.26.3 (#7541) 2025-08-29 18:49:37 -04:00
Daniel
c3d84d295d
refactor: flatten image generation settings structure (#7536) 2025-08-29 18:35:24 -04:00
roomote[bot]
01458f1646
feat: sync extension bridge settings with cloud (#7535)
- Use CloudService.getUserSettings() for remoteControlEnabled instead of global state
- Update CloudService.updateUserSettings when toggling remote control
- Add BridgeOrchestrator.connectOrDisconnect handling in settings update handler
- Remove dependency on contentProxy/globalSettings for remote control state
---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: John Richmond <5629+jr@users.noreply.github.com>
2025-08-29 11:08:58 -07:00
roomote[bot]
b22a618ee2
feat: add optional input image parameter to image generation tool (#7525)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-08-29 11:08:21 -04:00
Chris Estreich
1d46bd1bbc
Implement deferred task subscriptions (#7517) 2025-08-29 02:43:06 -07:00
Chris Estreich
1e4c46fe6f
Refactor the extension bridge (#7515) 2025-08-29 00:28:38 -07:00
Chris Estreich
cd9e92fa9b
Move @roo-code/cloud to the Roo-Code repo (#7503) 2025-08-28 11:18:45 -07:00
Chris Hasson
aee531a143
Show console logging in vitests when the --no-silent flag is set (#7467)
By default, all of the tests run in silent mode with monkey-patched the console logging so no console logging will ever appear in test output.
This confuses the agent- sometimes it will add console logging to help it debug things, and it won't see the logs that it expects.

Adds src/utils/vitest-verbosity.ts to handle verbosity resolution and console logging.
Modifies src/vitest.config.ts and webview-ui/vitest.config.ts to integrate the new verbosity control.
Removes manual console suppression from src/vitest.setup.ts and webview-ui/vitest.setup.ts as it's now handled dynamically.

Co-authored-by: Chris Hasson <noreply@example.com>
2025-08-28 12:51:21 -04:00
github-actions[bot]
88409029aa
Changeset version bump (#7491)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-28 11:21:07 -04:00
Daniel
622da63de0
fix: prevent dirty state on initial mount in ImageGenerationSettings (#7495) 2025-08-28 11:05:49 -04:00
Matt Rubens
6ef9dbd873
Add padding to image model picker (#7494) 2025-08-28 10:27:41 -04:00
Daniel
8e666078e4
feat: update OpenRouter API to support input/output modalities and filter image generation models (#7492) 2025-08-28 10:19:46 -04:00
Matt Rubens
bea0684487
Support free imagegen (#7493) 2025-08-28 10:00:01 -04:00
Matt Rubens
43597b3a20
Release v3.26.2 (#7490) 2025-08-28 09:46:09 -04:00
Matt Rubens
548d3b48a9
Make the default image filename more generic (#7479) 2025-08-28 02:22:38 -04:00
Daniel
2092fb1a50
feat: add image generation tool with OpenRouter integration (#7474)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: cte <cestreich@gmail.com>
2025-08-28 01:57:48 -04:00
Matt Rubens
d1122ea707
Bump cloud to 0.25.0 (#7475) 2025-08-27 23:52:25 -04:00
Daniel
2204457cc5
Fix GPT-5 Responses API issues with condensing and image support (#7067)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2025-08-27 23:30:43 -04:00
roomote[bot]
d4a16f469c
fix: exclude browser scroll actions from repetition detection (#7471)
- Modified ToolRepetitionDetector to skip repetition detection for browser_action scroll_down and scroll_up actions
- Added isBrowserScrollAction() helper method to identify scroll actions
- Added comprehensive tests for the new behavior
- Fixes issue where multiple scroll actions were incorrectly flagged as being stuck in a loop

Resolves: https://github.com/RooCodeInc/Roo-Code/discussions/7470

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-27 20:56:36 -04:00
roomote[bot]
3cb489d305
fix: hide .rooignore'd files from environment details by default (#7369)
* fix: change default showRooIgnoredFiles to false to hide ignored files

- Changed default value from true to false across all files
- Updated tests to reflect the new default behavior
- This prevents ignored files from appearing in environment details

Fixes #7368

* fix: update tests to match new showRooIgnoredFiles default

* fix: update test expectation to match new showRooIgnoredFiles default value

The PR changed the default value of showRooIgnoredFiles from true to false,
so the test needs to expect false instead of true when calling formatFilesList.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-27 18:09:06 -04:00
Matt Rubens
0f6079a3a3
Add type for RooCodeEventName.TaskSpawned (#7465) 2025-08-27 17:40:06 -04:00
github-actions[bot]
d23bc015f3
Changeset version bump (#7460)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-27 13:41:54 -04:00
Matt Rubens
bf9e44743f
Update 3.26.1 changeset (#7463) 2025-08-27 13:37:52 -04:00
github-actions[bot]
68e4629861
Update contributors list (#7109)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-08-27 13:34:14 -04:00
Matt Rubens
94f3b2a35b
Remove dot before model display (#7461) 2025-08-27 13:33:48 -04:00
Matt Rubens
1ad2129964
Add support for Vercel embeddings (#7445)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-27 13:30:19 -04:00
roomote[bot]
33a8573b02
feat: update tooltip component to match native VSCode tooltip shadow styling (#7457)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: cte <cestreich@gmail.com>
2025-08-27 10:27:40 -07:00
Daniel
faf5734bdc
feat: show model ID in API configuration dropdown (#7423) 2025-08-27 13:19:30 -04:00
Matt Rubens
46b6fdd21e
chore: add changeset for v3.26.1 (#7459) 2025-08-27 13:15:10 -04:00
Chris Estreich
c479678d8e
Always set remoteControlEnabled to true for cloud agents (#7448) 2025-08-27 02:43:51 -07:00
Chris Estreich
02f551cec5
Update @roo-code/cloud to enable roomote control for cloud agents (#7446)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-08-27 00:53:40 -07:00
Chris Estreich
f02a2bb05d
Random chat text area cleanup (#7436) 2025-08-26 20:48:24 -07:00
Matt Rubens
3528f51304
fix: remove duplicate cache display in task header (#7443) 2025-08-26 22:11:35 -04:00
Daniel
ff1f4f0398
fix: use anthropic protocol for token counting when using anthropic models via Vercel AI Gateway (#7433)
- Added condition in getApiProtocol to return 'anthropic' for vercel-ai-gateway when modelId starts with 'anthropic/'
- Added tests for Vercel AI Gateway provider protocol detection

This ensures proper token counting for Anthropic models accessed through Vercel AI Gateway, as Anthropic and OpenAI count tokens differently (Anthropic excludes cache tokens from input count, OpenAI includes them).
2025-08-26 20:22:37 -04:00
Daniel
11c454ffa2
feat: Enable on-disk storage for Qdrant vectors and HNSW index (#7182) 2025-08-26 17:02:55 -04:00
Josh
934bfd0a54
feat: Add Vercel AI Gateway provider integration (#7396)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: cte <cestreich@gmail.com>
2025-08-26 13:41:02 -07:00
github-actions[bot]
7c91e4f259
Changeset version bump (#7429)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-26 16:28:21 -04:00
Matt Rubens
f9921ff194
chore: add changeset for v3.26.0 (#7428) 2025-08-26 16:23:27 -04:00
Matt Rubens
572fa5080d
Sonic -> Grok Code Fast (#7426) 2025-08-26 16:17:47 -04:00
Matt Rubens
a79c3d04a6
Follow symlinks in rooignore checks (#7405) 2025-08-26 10:12:20 -04:00
Matt Rubens
8684877097
Update list of default allowed commands (#7404) 2025-08-26 00:56:03 -04:00
Matt Rubens
296edfc829
Mark code-workspace files as protected (#7403) 2025-08-26 00:09:14 -04:00
Hannes Rudolph
0cfd314c00
feat: update /init command to focus only on non-obvious discoveries (#7400)
* feat: update /init command to focus only on non-obvious discoveries

- Emphasize that only non-obvious information discovered by reading files should be included
- Update all mode-specific examples to show truly non-obvious rules
- Add CRITICAL section explaining what qualifies as non-obvious
- Exclude standard patterns and framework defaults
- Focus on gotchas, hidden requirements, and counterintuitive patterns

* fix: ensure /init command checks for and updates existing AGENTS.md files

- Check for existing AGENTS.md in root directory
- Check for existing AGENTS.md in all .roo/rules-*/ directories
- Read and improve existing files rather than replacing them
- Update discovery phase to explicitly look for these files

* refactor: clean up /init command to properly handle existing AGENTS.md files

- Consolidate all AGENTS.md path checking into step 1 with CRITICAL emphasis
- Add explicit instructions for deep dive improvement of existing files
- Remove redundant mentions throughout the workflow
- Emphasize iterating and enhancing existing files, not just appending
- Add clear guidance on cleaning up outdated info and reorganizing
- Make discovery phase the single source of truth for file checking

* fix: strengthen /init command to aggressively remove obvious information

- Add explicit instructions to DELETE obvious information first
- Emphasize that files should get SHORTER, not longer
- Use stronger language: CRITICALLY EVALUATE, AGGRESSIVELY DELETE
- Make clear that standard practices must be removed even if previously included
- Add success metric: files should be more concise and valuable
- Goal is to fix the tendency to just append instead of clean up

* fix: ensure .roo directory is created in project root, not system root

CRITICAL FIX: Paths were being interpreted as absolute, causing .roo to be created at system root

- Clarify all paths are relative to PROJECT/WORKSPACE root
- Add explicit warnings that .roo must be in project root, not system root
- Update example to show proper project structure
- Add IMPORTANT notes throughout emphasizing relative paths
- Fix prevents accidental creation of /.roo at system level

* test: update built-in-commands test to match new init command content

- Replace 'mode-specific rule directories' with 'non-obvious'
- Replace 'analysis_workflow' with 'discovered by reading files'
- Tests now align with the new focus on non-obvious discoveries
2025-08-25 21:01:51 -06:00
Daniel
91f3dd90fb
fix: preserve user input when selecting follow-up choices (#7394) 2025-08-25 17:18:08 -04:00
Daniel
c75f184022
feat: Hide static providers with no models from provider list (#7392) 2025-08-25 17:17:07 -04:00
Matt Rubens
2c82f4c950
Add a built-in /init slash command (#7381)
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2025-08-25 16:53:32 -04:00
Chris Estreich
c7d2b72cab
Fix build error (#7397) 2025-08-25 12:18:59 -07:00
James Edward Dillard
2bd9f47f1b
update privacy policy to account for stealth model (#7255)
* docs(privacy): add proxy-mode exception when Roo Code is selected as provider; no storage, transit-only; update dates

* Apply suggestion from @jdilla1277

* Apply suggestion from @jdilla1277

changed name to roo code cloud

* Apply suggestion from @jdilla1277

updated provider to Roo Code Cloud
2025-08-25 15:17:03 -04:00
roomote[bot]
2e99d5bf1b
feat: Add Qwen Code CLI API Support with OAuth Authentication (#7380)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: cte <cestreich@gmail.com>
2025-08-25 10:43:48 -07:00
Matt Rubens
3dd3d7bf17
Handle substitution patterns in command validation (#7390) 2025-08-25 12:41:01 -04:00
Hannes Rudolph
3c233f3be0
fix: add todos parameter to new_task tool usage in issue-fixer mode (#7391) 2025-08-25 12:36:06 -04:00
Daniel Trugman
0c481a3cf9
Fix requesty model listing (#7378)
* Fix requesty model listing

* Delete .changeset/spotty-queens-crash.md

---------

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-24 20:12:43 -04:00
roomote[bot]
8367b1ac92
feat: add Deepseek v3.1 to Fireworks AI provider (#7375)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-24 18:43:06 -04:00
Hannes Rudolph
1322e9a981
fix: resolve newTaskRequireTodos setting not working correctly (#7363)
* fix: resolve newTaskRequireTodos setting not working correctly

- Use dynamic Package.name instead of hardcoded namespace values
- Show todos parameter as optional/required based on setting value
- Remove hardcoded new_task example from shared tool use section
- Update tests to use Package.name pattern

The setting now works correctly for both regular and nightly builds
without requiring hardcoded namespace values.

* test: update snapshots after removing hardcoded new_task example

The snapshots needed updating because the hardcoded new_task example
was removed from the shared tool use section

* fix: remove namespace prefix from newTaskRequireTodos setting

The setting name should not include the namespace prefix in package.json
as VSCode automatically adds the extension's namespace. This was preventing
the setting from appearing in the VSCode settings UI.

* fix: restore prefixed setting id roo-cline.newTaskRequireTodos for Settings UI visibility

* docs(newTaskTool): explain dynamic Package.name config namespace\n\ntest(newTaskTool): verify config uses Package.name variant (roo-code-nightly)

* refactor: simplify new-task prompt generation

- Replace complex template literals with two complete prompt constants
- Remove nested ternary operators for better readability
- Hide todos parameter completely when disabled (not shown as optional)
- Update tests to reflect new behavior
- Reduce code from 105 to 66 lines for better maintainability

* test: update snapshots after removing optional todos parameter

The todos parameter is now conditionally required based on the newTaskRequireTodos setting, so the snapshots needed to be updated to reflect the new tool documentation format.

---------

Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-24 17:33:58 -04:00
renovate[bot]
8109e365b2
chore(deps): update dependency drizzle-kit to v0.31.4 (#5453)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-24 16:27:57 -04:00
Dicha Zelianivan Arkana
fc70012f54
fix(ui): make auto approve toggle trigger stay (#7318)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-23 10:54:23 -07:00
roomote[bot]
b433d1f7a2
fix: handle Mistral thinking content as reasoning chunks (#7106)
* fix: handle Mistral thinking content as reasoning chunks

- Add TypeScript interfaces for Mistral content types (text and thinking)
- Update createMessage to yield reasoning chunks for thinking content
- Update completePrompt to filter out thinking content in non-streaming mode
- Add comprehensive tests for reasoning content handling
- Follow the pattern used by other providers (Anthropic, OpenAI, Gemini, etc.)

Fixes #6842

* fix: resolve TypeScript type issue in completePrompt method

* fix: handle Mistral thinking content chunks in streaming responses

- Added ContentChunkWithThinking type helper to handle thinking chunks
- Properly converts thinking content to reasoning chunks in streaming
- Filters out thinking content in non-streaming completePrompt responses
- Confirmed that Mistral API does send thinking chunks with type 'thinking'
- Works with Mistral SDK v1.9.18

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-23 06:33:43 -07:00
Christiaan Arnoldus
8e4c0ae99d
Show cache read and write prices for OpenRouter inference providers (#7176) 2025-08-22 14:43:34 -07:00
github-actions[bot]
0fdd15728d
Changeset version bump (#7339)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-22 13:54:38 -07:00
Matt Rubens
777a9d9142
chore: add changeset for v3.25.23 (#7338) 2025-08-22 13:47:44 -07:00
Daniel
d175272c76
feat: add custom base URL support for Requesty provider (#7337)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: John Costa <john@requesty.ai>
Co-authored-by: Thibault Jaigu <thibault.jaigu@gmail.com>
2025-08-22 13:43:08 -07:00
roomote[bot]
262033ddd0
feat: add DeepSeek V3.1 model to Chutes AI provider (#7295)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-22 12:18:55 -07:00
Hannes Rudolph
7137c1902f
Revert "feat: enable loading Roo modes from multiple files in .roo/roo_modes directory" (#7332)
Revert "feat: enable loading Roo modes from multiple files in .roo/roo_modes …"

This reverts commit faece9e26f.
2025-08-22 11:44:15 -07:00
github-actions[bot]
b1f2d39faf
Changeset version bump (#7327)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-22 10:03:00 -07:00
Matt Rubens
8e26d5f004
chore: add changeset for v3.25.22 (#7326) 2025-08-22 09:59:56 -07:00
Daniel
faab314a88
feat: add prompt caching support for Kimi K2 on Groq (#7324)
Ported from upstream Cline repository PR #5697
Original PR: https://github.com/cline/cline/pull/5697

- Added GroqUsage interface to handle cached token fields
- Implemented proper cost calculation with cache read discounts
- Enabled prompt caching for Kimi K2 model with 50% discount on cached tokens
- Updated tests to verify caching functionality

Co-authored-by: Cline Contributors <cline@github.com>
2025-08-22 09:40:21 -07:00
roomote[bot]
f14e6acaf0
feat: add documentation links for global custom instructions in UI (#7114)
* feat: add documentation links for global custom instructions in UI

- Updated translation strings to include links to global rules documentation
- Added VSCodeLink components in ModesView to render clickable documentation links
- Helps users discover global custom instructions feature as suggested in GitHub discussion #7111

* fix: address PR feedback - update all language files and improve documentation links

- Added <0> placeholders to all 17 non-English translation files for global rules links
- Updated documentation anchors to use #global-rules-directory and #setting-up-global-rules
- Added aria-label attributes to all VSCodeLink components for better accessibility
- Improved UTM campaign parameter naming for clearer tracking

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-22 08:40:22 -07:00
Matt Rubens
9b8f3b95ec
Update changelog with correct .roo/modes/ path 2025-08-21 21:37:51 -07:00
github-actions[bot]
9a8ac61d8a
Changeset version bump (#7307)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-08-21 21:33:56 -07:00
Chris Estreich
5febc54418
v3.25.21 (#7306) 2025-08-21 20:30:27 -07:00
Chris Estreich
175edeff25
Pass task ID in the Roo provider request headers (#7303) 2025-08-21 20:27:21 -07:00
Daniel
d06d970208
fix: ensure subtask results are provided to GPT-5 in OpenAI Responses API (#7305)
When a subtask completes and the parent task resumes, set skipPrevResponseIdOnce = true
to ensure the next API call sends the full conversation including the subtask result.
This fixes the issue where GPT-5 would only receive the new message without the subtask
result context when using previous_response_id.

Fixes #7251
2025-08-21 20:16:16 -07:00
roomote[bot]
4222036c58
feat: remove assistantMessageParser experiment flag and enable for all users (#7300)
- Remove assistantMessageParser from experiment definitions in packages/types
- Remove ASSISTANT_MESSAGE_PARSER from shared experiments configuration
- Update Task.ts to always initialize and use AssistantMessageParser
- Remove conditional logic that checked for experiment flag
- Remove unused parseAssistantMessage import
- Update test files to remove assistantMessageParser references
- All tests passing successfully

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-21 15:30:42 -07:00
roomote[bot]
9fe06db921
fix: update DeepSeek models context window to 128k (#7269)
* fix: update DeepSeek models context window to 128k

- Updated deepseek-chat and deepseek-reasoner models from 64k to 128k context window
- Updated corresponding test expectations
- Aligns with DeepSeek API documentation at https://api-docs.deepseek.com/quick_start/pricing/

Fixes #7268

* feat: update deepseek-reasoner maxTokens to 64K based on official documentation

* fix: use default maxTokens values instead of maximum for DeepSeek models

- deepseek-chat: 4096 (4K default) instead of 8192 (8K max)
- deepseek-reasoner: 32768 (32K default) instead of 65536 (64K max)
- Updated tests to match new default values
- Updated description to clarify default vs max output tokens

* fix: use maximum output tokens for both DeepSeek models

- deepseek-chat: 8192 (8K max)
- deepseek-reasoner: 65536 (64K max)
- Updated tests to match maximum values
- Updated description to reflect 64K max output

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-21 15:03:35 -07:00
Daniel
44fd6432dc
refactor: Remove exceptions from RooHandler constructor (#7302) 2025-08-21 14:56:47 -07:00
roomote[bot]
0bc1183c71
feat: enable grounding features for Vertex AI (#6777)
* feat: enable grounding features for Vertex AI

- Add enableUrlContext and enableGrounding options to vertexSchema in provider-settings.ts
- Update Vertex.tsx UI component to include URL context and grounding checkboxes
- Add comprehensive tests for the new grounding features in Vertex.spec.tsx
- Reuse existing localization strings from Gemini provider

Fixes #6776

* fix: address review feedback - hide grounding features in welcome view and only show for Gemini models

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-21 13:02:45 -07:00
Hannes Rudolph
4664955127
feat: add optional todos parameter to new_task tool with experimental setting (#6329) (#6775)
* feat: add optional todos parameter to new_task tool with experimental setting (#6329)

- Add optional todos parameter to new_task tool for hierarchical task planning
- Implement experimental setting to optionally require todos parameter
- Add clean state-based UI rendering to avoid spurious messages
- Export and reuse parseMarkdownChecklist function
- Add comprehensive test coverage for both optional and required modes
- Maintain full backward compatibility (todos optional by default)

* fix: update new_task tool example to include todos parameter

- Updated the example in tool-use.ts to show the todos parameter
- This prevents AI confusion about whether todos is a valid parameter
- The example now demonstrates the complete tool usage pattern

* fix: make new_task tool definition dynamic based on experimental setting

- Tool description now changes based on newTaskRequireTodos setting
- When disabled: shows todos as (optional)
- When enabled: shows todos as (required) with no mention of configuration
- Added tests to verify dynamic behavior
- Ensures AI models get unambiguous instructions based on current settings

* fix: add translations for newTaskRequireTodos experimental setting

- Added translations for all 17 supported languages
- Ensures consistent UI experience across all locales

* test: update snapshots for new_task tool example with todos parameter

- Updated 13 snapshot files to reflect the new tool-use example
- All tests now pass with the updated example format

* Update src/core/tools/newTaskTool.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix: address PR review comments

- Replace any[] with TodoItem[] type in ExtensionStateContext.tsx for better type safety
- Remove redundant initialTodos parameter from startTask call in Task.ts (todos already set in constructor)
- Improve code clarity in newTaskTool.ts by checking provider reference early and reusing state

# Conflicts:
#	src/core/task/Task.ts
#	webview-ui/src/context/ExtensionStateContext.tsx

* fix: revert order of operations in startTask to fix integration test timeout

The change in order of operations (calling say() before postStateToWebview()) was causing the XML content file test to timeout. Reverting to the original order fixes the issue.

* fix: hide todos parameter from new_task tool prompt when experiment is disabled

- Modified getNewTaskDescription to completely omit todos parameter when experiment is off
- Updated tests to verify todos parameter is not shown at all when disabled
- Ensures tool prompt remains unchanged when experimental setting is disabled
- Maintains backward compatibility while providing cleaner prompt interface

* fix: update snapshots for new_task tool todos parameter

- Updated snapshots in add-custom-instructions.spec.ts
- Updated snapshots in system-prompt.spec.ts
- All tests now passing with the new todos parameter documentation

* feat: move newTaskRequireTodos from experimental to VSCode settings

- Added newTaskRequireTodos as a VSCode configuration property in src/package.json
- Added description in src/package.nls.json
- Updated newTaskTool.ts to read from VSCode configuration instead of experiments
- Removed NEW_TASK_REQUIRE_TODOS from experimental settings in src/shared/experiments.ts
- Removed newTaskRequireTodos from packages/types/src/experiment.ts
- Updated tests to use VSCode configuration mocking instead of experiments
- Removed references from experiments test file
- Maintains backward compatibility (defaults to false)

* fix: make new_task tool description dynamically reflect VSCode setting

- Updated new-task.ts to check args.settings instead of args.experiments
- Added newTaskRequireTodos to SystemPromptSettings interface
- Pass newTaskRequireTodos setting through Task.ts and generateSystemPrompt.ts
- Updated all related tests to use settings instead of experiments
- Fixed TypeScript errors in test files by adding newTaskRequireTodos property

This ensures the tool description correctly shows todos parameter as required/optional
based on the VSCode setting value, fixing the issue where Roo would try to use
new_task without the todos parameter when it was required.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Merge Resolver <merge-resolver@roo-code.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-21 13:02:05 -07:00
Chris Estreich
ef340806c7
Evals web app fixes / tweaks (#7299) 2025-08-21 12:36:33 -07:00
Daniel
4216618c72
feat: add MDM authentication notification when navigation is blocked (#7291)
- Show VSCode warning when users under MDM policy try to leave AccountView without auth
- Add showMdmAuthRequiredNotification message type to WebviewMessage interface
- Implement handler in webviewMessageHandler to display localized warning
- Add 'Your organization requires authentication' translation in all 17 languages
- Fix translation key path to use common:mdm.info.organization_requires_auth
2025-08-21 11:12:04 -07:00
roomote[bot]
6fd261d3b6
feat: mark non-English package.nls.*.json files as linguist-generated (#7271)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-21 02:56:55 -07:00
renovate[bot]
4fdbcb5d78
fix(deps): update dependency tmp to v0.2.4 [security] (#6762)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-21 02:28:00 -07:00
roomote[bot]
b2fdb9ac57
fix: handle null/undefined token values in ContextCondenseRow to prevent UI crash (#6916)
* fix: handle null/undefined token values in ContextCondenseRow to prevent UI crash

- Added null/undefined checks for prevContextTokens, newContextTokens, and cost
- Default to 0 when values are null or undefined
- Added comprehensive test coverage for edge cases
- Fixes #6914

* Delete webview-ui/src/components/chat/__tests__/ContextCondenseRow.spec.tsx

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-08-21 02:21:41 -07:00
Daniel
a5b143bb44
feat: add OpenAI context window error handling (#6967)
* feat: add OpenAI context window error handling

- Add comprehensive context window error detection for OpenAI, OpenRouter, Anthropic, and Cerebras
- Implement automatic retry with aggressive context truncation (25% reduction)
- Use proper profile settings for condensing operations
- Add robust error handling with try-catch blocks

Based on PR #5479 from cline/cline repository

* fix: address PR review comments

- Improved type safety by using Record<string, any> instead of direct any casts
- Enhanced Anthropic error detection with message pattern matching
- Added comprehensive unit tests for context-error-handling module
- Added named constant FORCED_CONTEXT_REDUCTION_PERCENT
- Added MAX_CONTEXT_WINDOW_RETRIES limit to prevent infinite loops
- Added logging for context window exceeded errors
- Extracted getCurrentProfileId helper method to reduce duplication
- All tests passing (3438 tests)

* fix: address PR review comments for context window error handling

- Improve Anthropic error detection with more specific patterns and error codes
- Add comprehensive unit tests for context-error-handling module
- Add logging for context window errors with detailed information
- Fix comment for FORCED_CONTEXT_REDUCTION_PERCENT constant
- Fix TypeScript error for untyped error parameter
- Maintain existing getCurrentProfileId helper method

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-21 02:20:49 -07:00
roomote[bot]
007b58db77
feat: add "Installed" filter to Roo Marketplace (#7007)
* feat: add "Installed" filter to Roo Marketplace

- Added installed boolean filter to ViewState interface
- Implemented UI checkbox for "Show installed only" filter
- Updated filterItems method to filter by installation status
- Added translation strings for the new filter
- Updated tests to include the new filter property

Fixes #7004

* fix: add missing translations for "Installed" filter in marketplace

- Added "filters.installed.label" and "filters.installed.description" keys
- Updated all backend marketplace.json files (src/i18n/locales/*/marketplace.json)
- Updated all frontend marketplace.json files (webview-ui/src/i18n/locales/*/marketplace.json)
- All translation checks now pass successfully

* fix: improve code quality for installed filter feature

- Replace plain HTML checkbox with UI library Checkbox component for consistency
- Add proper TypeScript typing for installedMetadata (MarketplaceInstalledMetadata)
- Optimize filterItems method to avoid unnecessary object copying
- Remove dead code for subcomponent filtering

* refactor: improve installed filter UI and functionality

- Replace checkbox with dropdown for better UX
- Place dropdown inline with search field for better layout
- Add three filter options: All Items, Installed Only, Not Installed
- Update filter logic to handle all three states
- Improve translation labels to clarify it's a filter
- Optimize filterItems method for better performance
- Add proper TypeScript types throughout

* fix: ensure both filter dropdowns have matching height

- Set both Select and Button components to h-7 for visual consistency
- Installation status dropdown and tags dropdown now have identical height
- Improved visual alignment for better UX

* chore: remove redundant useEffect in MarketplaceListView to prevent re-render loop; rely on state manager handleMessage sync

* i18n: update tri-state Installed filter translations across all locales

- Replace checkbox-based installed keys with dropdown keys:
  { label, all, installed, notInstalled }
- Updated both frontend and backend marketplace.json files for all non-English locales
- Ensures translation completeness for CI check

* i18n: change Installed option text to 'Installed' (remove 'Only') across all locales (frontend + backend)

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-21 02:17:41 -07:00
Dicha Zelianivan Arkana
ce052dbd7e
refactor(storage): better fs check (#7164)
* refactor(storage): better fs check

* fix(storage): fs check inconsistencies

* test(storage): more thorough testing
2025-08-21 02:15:52 -07:00
roomote[bot]
090737c516
fix: omit temperature parameter when not explicitly set for OpenAI Compatible providers (#7188)
* fix: omit temperature parameter when not explicitly set for OpenAI Compatible providers

- Modified OpenAiHandler to only include temperature when modelTemperature is defined
- Modified BaseOpenAiCompatibleProvider to only include temperature when modelTemperature is defined
- Added tests to verify temperature is omitted when undefined
- Updated existing tests to explicitly set temperature where needed

This allows backend services (LiteLLM, vLLM) to use their configured default temperatures
instead of being forced to use temperature=0 when "Use custom temperature" is unchecked.

Fixes #7187

* test: update tests to match new temperature handling behavior

- Remove temperature parameter expectations from provider tests
- Tests now expect temperature to be omitted when not explicitly set
- Aligns with PR #7188 changes to fix OpenAI Compatible provider behavior

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-21 02:14:03 -07:00
roomote[bot]
faece9e26f
feat: enable loading Roo modes from multiple files in .roo/roo_modes directory (#7203)
* feat: enable loading Roo modes from multiple files in .roo/roo_modes directory

- Add support for loading modes from .roo/roo_modes directory (both global and project)
- Implement proper precedence: project .roo/roo_modes > .roomodes > global .roo/roo_modes > settings
- Update file watchers to monitor .roo/roo_modes directories
- Preserve original source file when updating modes
- Add comprehensive tests for the new functionality

Fixes #7202

* refactor: rename .roo/roo_modes to .roo/modes for cleaner directory structure

- Changed ROO_MODES_DIR constant from "roo_modes" to "modes"
- Updated all references in CustomModesManager.ts
- Updated all test descriptions and mocks in CustomModesManager.spec.ts
- All tests passing successfully

* fix: normalize sourceFile paths to use forward slashes in exported YAML

- Fixes Windows test failure where backslashes in sourceFile paths were causing test assertions to fail
- Ensures cross-platform compatibility by normalizing all paths to use forward slashes in YAML exports

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-21 02:12:56 -07:00
renovate[bot]
f44661feb7
fix(deps): update dependency mermaid to v11.10.0 [security] (#7231)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-21 02:09:08 -07:00
Chris Estreich
241df17483
Add MODELS_BY_PROVIDER for use in @roo-code/cloud (#7258) 2025-08-20 11:26:51 -07:00
DarinVerheijke
57ea6257dd
feat: Featherless provider (#7235)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: cte <cestreich@gmail.com>
2025-08-20 10:42:57 -07:00
github-actions[bot]
c608392a85
Changeset version bump (#7246)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-19 23:07:50 -07:00
Matt Rubens
1fa647134f
chore: add changeset for v3.25.20 (#7245) 2025-08-19 23:04:46 -07:00
Matt Rubens
94fa33bd63
Add announcement for Sonic model (#7244) 2025-08-19 23:02:27 -07:00
github-actions[bot]
1f7ae548ed
Changeset version bump (#7243)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-19 19:37:02 -07:00
Matt Rubens
6e65aeeb13
chore: add changeset for v3.25.19 (#7242) 2025-08-19 19:33:19 -07:00
Daniel
912eefd7b3
Fix: Add 'roo' provider to checkExistKey function (#7239) 2025-08-19 19:13:44 -07:00
github-actions[bot]
c249ff81e9
Changeset version bump (#7220)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-19 17:45:45 -07:00
Matt Rubens
613abe08fc
More changes (#7232) 2025-08-19 14:00:28 -07:00
NaccOll
21e9d24ba7
feat: add new models and update configurations for vscode-lm (#7201) 2025-08-19 13:24:29 -07:00
roomote[bot]
b06005d321
fix: add missing zaiApiKey and doubaoApiKey to SECRET_STATE_KEYS (#7083)
Fixes first-time initialization issue with Z AI and Doubao providers
where the API keys were not recognized as valid secret keys, causing
the configuration to fail during initial setup.

Fixes #7082

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-19 12:54:44 -07:00
Matt Rubens
5d54ce9667
chore: add changeset for v3.25.18 (#7223) 2025-08-19 11:04:31 -07:00
Daniel
9a7ddab1bc
feat: simple read_file tool for single-file-only models (#7222) 2025-08-19 10:57:57 -07:00
Matt Rubens
865fb18334
Release v3.25.18 (#7219) 2025-08-19 09:24:20 -07:00
Matt Rubens
ede26b8036
Increase sonic max_tokens to 16384 (#7218) 2025-08-19 07:19:50 -07:00
Chris Estreich
532728ee85
Expose thinking tokens for roo/sonic (#7212)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-19 07:01:01 -07:00
Matt Rubens
fd3535c21a
Add support for Sonic model (#7207)
Co-authored-by: cte <cestreich@gmail.com>
2025-08-19 00:53:32 -07:00
roomote[bot]
87c42c1f26
fix: respect enableReasoningEffort setting when determining reasoning usage (#7049)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-08-18 15:07:06 -07:00
Daniel
b975ced81b
feat: simplify ask_followup_question prompt documentation (#7191) 2025-08-18 09:12:16 -07:00
Daniel
e7e827a3f8
fix: prevent duplicate LM Studio models with case-insensitive deduplication (#7185)
* fix: prevent duplicate LM Studio models with case-insensitive deduplication

- Keep both listDownloadedModels and listLoaded APIs to support JIT loading
- Implement case-insensitive deduplication to prevent duplicates
- When duplicates are found, prefer loaded model data for accurate runtime info
- Add test coverage for deduplication logic
- Addresses feedback about LM Studio's JIT Model Loading feature (v0.3.5+)

Fixes #6954

* fix: correct deduplication logic to prefer loaded models

- When a loaded model ID is found in any downloaded model key (case-insensitive)
- Remove the downloaded model and replace with the loaded model
- This ensures loaded models with runtime info take precedence
- Updated tests to verify the correct deduplication behavior

* fix: improve deduplication logic and add comprehensive test coverage

- Enhanced deduplication to use path segment matching instead of simple substring
- Prevents false positives like 'llama' matching 'codellama'
- Added comprehensive test cases for edge cases and multiple scenarios
- Maintains support for JIT Model Loading feature
2025-08-18 08:17:43 -07:00
Matt Rubens
a8aea14078
chore: bump version to v1.53.0 (#7171) 2025-08-17 23:30:45 -07:00
github-actions[bot]
d941cee055
Changeset version bump (#7170)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-17 22:26:16 -07:00
Matt Rubens
fae811cc62
Release v3.25.17 (#7169) 2025-08-17 22:22:33 -07:00
Matt Rubens
185365af5d
Fix terminal reuse logic (#7157) 2025-08-16 23:10:59 -07:00
github-actions[bot]
0d90facc53
Changeset version bump (#7152)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-16 19:54:59 -07:00
Matt Rubens
6b57c1bd3d
Release v3.25.16 (#7151) 2025-08-16 19:51:42 -07:00
Chris Estreich
2a974e8bf6
Emit event when a task ask requires interaction (#7128)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-08-16 02:46:51 -07:00
Daniel
f3864ffebb
fix: use native Ollama API instead of OpenAI compatibility layer (#7137) 2025-08-15 23:31:58 -04:00
roomote[bot]
45ac7ee6cf
feat: add support for OpenAI gpt-5-chat-latest model (#7058)
* feat: add support for OpenAI gpt-5-chat-latest model

- Added gpt-5-chat-latest model configuration to openAiNativeModels
- Updated OpenAiNativeHandler to recognize gpt-5-chat-latest as a Responses API model
- Added comprehensive tests for the new model
- Model is optimized for conversational AI and non-reasoning tasks

Fixes #7057

* fix: remove redundant condition and unnecessary test file

- Remove redundant gpt-5-chat-latest check in isResponsesApiModel since startsWith('gpt-5') already covers it
- Remove unnecessary dedicated test file for gpt-5-chat-latest

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-15 23:15:55 -04:00
Will Li
438c8e377a
Make enhance with task history default to true (#7140) 2025-08-15 22:40:46 -04:00
Matt Rubens
52c58ea666
Bump cloud version to 0.16.0 (#7135) 2025-08-15 14:25:32 -04:00
Matt Rubens
6274273982
Release: v1.51.0 (#7130) 2025-08-15 12:42:53 -04:00
Matt Rubens
9a734d0cab
Add an API for resuming tasks by ID (#7122) 2025-08-15 12:03:58 -04:00
Chris Estreich
44086e4a86
Add support for task page event population (#7117) 2025-08-14 23:17:05 -07:00
roomote[bot]
0d0bba2eb7
fix: add type check before calling .match() on diffItem.content (#6905) (#6906)
* fix: add type check before calling .match() on diffItem.content

Fixes #6905 - Error during diff application "v.content.match is not a function"

- Added type check to ensure diffItem.content is a string before calling .match()
- Added comprehensive tests for handling non-string content values
- Prevents runtime errors when content is null, undefined, or other non-string types

* fix: validate content type earlier in diff parsing

- Move type check to where content is first extracted from XML
- Remove redundant check since content is now guaranteed to be string
- Add test for early content validation

* chore: remove comments

* fix: add TelemetryService mock to multiApplyDiffTool tests

* fix: add captureDiffApplicationError to TelemetryService mock

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-08-14 20:05:45 -04:00
Daniel
bfdd158129
Fix: Enable save button for provider dropdown and checkbox changes (#7113)
* fix: enable save button for provider dropdown and checkbox changes

The save button wasn't enabling when users changed provider settings like
dropdowns and checkboxes because setApiConfigurationField was treating all
changes from undefined to a defined value as 'initial sync' and not marking
the form as dirty.

Added an optional isUserAction parameter (defaults to true) to distinguish:
- User actions (should enable save button) - the default
- Automatic initialization (shouldn't enable save button) - pass false

This fixes the issue where changing provider dropdowns, checkboxes with
default values, and other settings wouldn't enable the save button.

* fix: remove incorrect isUserAction=false from apiModelId sync

The useEffect that syncs apiModelId with selectedModelId was incorrectly
passing isUserAction=false, which prevented the save button from enabling
when users selected a different model. Since this effect responds to all
selectedModelId changes (including user selections), it should use the
default isUserAction=true behavior.

* test: fix ThinkingBudget test to expect isUserAction parameter

The test now correctly expects setApiConfigurationField to be called
with three arguments including the isUserAction=false parameter for
automatic thinking token adjustments.
2025-08-14 19:48:25 -04:00
NaccOll
3f4af18bf7
fix: Use cline.cwd as primary source for workspace path in codebaseSearchTool (#6902)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-08-14 18:17:14 -04:00
NaccOll
57389bff36
Hotfix multiple folder workspace checkpoint (#6903) 2025-08-14 18:16:54 -04:00
roomote[bot]
6540f2be5c
fix: prevent XML entity decoding in diff tools (#7107) (#7108)
* fix: prevent XML entity decoding in diff tools

- Add parseXmlForDiff function with processEntities: false to preserve exact content
- Update multiApplyDiffTool to use parseXmlForDiff instead of parseXml
- Add comprehensive tests for entity handling in parseXmlForDiff

This fixes the issue where fast-xml-parser was decoding HTML entities like &
causing mismatches in diff tools when comparing against original file content.

Fixes #7107

* refactor: eliminate code duplication between parseXml and parseXmlForDiff

- Refactored parseXml to accept optional ParseXmlOptions parameter
- parseXmlForDiff now delegates to parseXml with processEntities: false
- Added explanatory comment in multiApplyDiffTool.ts about why parseXmlForDiff is used
- Improved JSDoc documentation with specific use cases for parseXmlForDiff

This maintains backward compatibility while eliminating code duplication.
parseXml continues to be used for general XML parsing (file reads, follow-up questions),
while parseXmlForDiff is specifically for diff operations where entity processing must be disabled.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-14 17:46:52 -04:00
Catriel Müller
342123d351
Refactor task execution system: improve call stack management (#7035) 2025-08-14 15:43:44 -04:00
github-actions[bot]
2a105a5881
Changeset version bump (#7104)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-14 12:52:06 -04:00
Dicha Zelianivan Arkana
62d023d016
feat(web): fill missing SEO-related values (#7096)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-14 12:51:13 -04:00
github-actions[bot]
1ee9e01d6c
Update contributors list (#6883)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-08-14 12:50:55 -04:00
Matt Rubens
a6feb27093
Release v3.25.15 (#7103) 2025-08-14 12:49:21 -04:00
Daniel
253d5acc09
fix: add /evals page to sitemap generation (#7102)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-08-14 12:48:32 -04:00
Abdullah Hilson
3d2673bb28
feat: implement sitemap generation in TypeScript and remove XML file (#6206)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-08-14 11:53:16 -04:00
f14XuanLv
e5d93f2bca
fix: reset condensing state when switching tasks (#6922)
Previously, when users initiated context condensing and switched to another task before completion, the 'condensing context' indicator would persist on the new task.

This fix ensures the condensing state is properly reset in the task switching effect, preventing the indicator from appearing incorrectly on different tasks.
2025-08-14 10:21:31 -04:00
Chris Estreich
48af73dba9
Fix publish-npm script (#7093) 2025-08-14 03:17:56 -07:00
Chris Estreich
c56b95bc60
Task metadata (#7092) 2025-08-14 03:14:17 -07:00
roomote[bot]
dcbb7a673f
fix: remove 500-message limit to prevent scrollbar jumping in long conversations (#7064)
- Removed array slicing logic that limited messages to 500
- This eliminates array index shifting that caused Virtuoso to lose scroll position
- Virtuoso is designed to efficiently handle large lists through virtualization
- Fixes the scrollbar jumping issue reported in #7063 and #7052

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-13 21:21:32 -04:00
Christiaan Arnoldus
a203a90bb7
Fix allowedMaxRequests and allowedMaxCost values not showing in the settings UI (#6925) 2025-08-13 21:07:05 -04:00
github-actions[bot]
ca6f261cce
Changeset version bump (#7061)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-13 16:09:47 -04:00
Matt Rubens
46085581d5
Release v3.25.14 (#7060) 2025-08-13 15:42:13 -04:00
roomote[bot]
23afdfca03
fix: only include verbosity parameter for models that support it (#7055)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-13 15:33:18 -04:00
Daniel
7ed833cb5d
Fix: AWS Bedrock 1M context - Move anthropic_beta to additionalModelRequestFields (#7056) 2025-08-13 15:26:50 -04:00
Chris Estreich
962df868bd
Fix webview in dev mode (#7044) 2025-08-13 01:40:00 -07:00
Chris Estreich
9ffc2b0a36
Move cloud types from @roo-code/types to @roo-code/cloud (#7038) 2025-08-13 00:10:29 -07:00
Matt Rubens
6f81b775c7
Revert "Fix token usage / cost often being underreported" (#7039) 2025-08-13 01:33:57 -04:00
github-actions[bot]
140310f055
Changeset version bump (#7034)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-12 23:11:43 -04:00
roomote[bot]
667773be10
fix: add i18n support for Account button title (#6978)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-12 22:59:01 -04:00
Matt Rubens
49020da566
Release v3.25.13 (#7033) 2025-08-12 22:57:54 -04:00
Matt Rubens
13d1a5bc8f
Add Sonnet 1M context checkbox (#7032) 2025-08-12 22:51:30 -04:00
Peter Dave Hello
4c018663de
Remove deprecated GPT-4.5 Preview model (#6948) 2025-08-12 22:45:00 -04:00
roomote[bot]
8bd8f5dc59
feat: add support for AGENT.md alongside AGENTS.md (#6913)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-12 21:20:59 -04:00
roomote[bot]
7b0f489ea2
fix: add --no-messages flag to ripgrep to suppress file access errors (#6757)
Fixes #6756

When ripgrep encounters file access errors (e.g., permission denied), it would cause the search_files tool to return empty results. Adding the --no-messages flag suppresses these error messages while still showing pattern syntax errors, allowing the search to continue and return valid results from accessible files.

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-12 17:51:06 -04:00
github-actions[bot]
245bc2a2e6
Changeset version bump (#7019)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-12 16:15:51 -04:00
Matt Rubens
2083d11586
chore: add changeset for v3.25.12 (#7018) 2025-08-12 16:11:51 -04:00
roomote[bot]
f6f5fa3ede
feat: add OpenAI gpt-oss models to Amazon Bedrock dropdown (#6783)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-12 15:50:06 -04:00
Daniel
8e7a2e7bdb
feat: Update Claude Sonnet 4 context window to 1 million tokens (#7005)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-08-12 14:40:42 -04:00
roomote[bot]
bbe3362359
fix: ensure JSON files respect .rooignore during indexing (#6691)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-08-12 12:52:08 -04:00
roomote[bot]
f9e85a5e84
feat: add configurable API request timeout for local providers (#6531)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-08-12 11:48:45 -04:00
Matt Rubens
cee7c9894c
Add minimal reasoning support to OpenRouter (#6998)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-12 11:46:31 -04:00
Peter Dave Hello
01e417e0e5
Update and improve zh-TW Traditional Chinese locale (#6946) 2025-08-12 11:42:49 -04:00
roomote[bot]
1d8b51d7c9
fix: truncate long model names in model selector to prevent overflow (#6985)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-12 10:08:36 -04:00
Matt Rubens
3acb3ba21e
Adding requesty base url (#6992)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: John Costa <john@requesty.ai>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-12 10:04:35 -04:00
NaccOll
2730ef96b8
fix: improve checkpoint service initialization handling (#6860) 2025-08-12 09:57:25 -04:00
Chris Estreich
12d1959bbd
Switch to the UnifiedBridgeService (#6976) 2025-08-12 03:39:11 -07:00
Matt Rubens
5f3c67fa91
Bump cloud to 0.10.0 (#6968) 2025-08-12 00:04:52 -04:00
Alfredo Medrano
b6dd6e5210
fix: add --no-sandbox flag to browser launch options (#6686) 2025-08-11 23:25:58 -04:00
roomote[bot]
e02ac08089
feat: add new Chutes provider models (#6699)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-11 23:24:40 -04:00
Chris Estreich
65674d5191
Bump @roo-code/cloud to v0.9.0 (#6964) 2025-08-11 16:11:30 -10:00
roomote[bot]
5e07bc42d0
feat: exclude GPT-5 models from 20% context window output token cap (#6963)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-11 22:04:58 -04:00
roomote[bot]
4eb407585d
feat: add task.expand and task.collapse translations (#6962)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-11 22:03:20 -04:00
Chris Estreich
a7ad887621
Handle bridge config fetch errors (#6961) 2025-08-11 15:17:17 -10:00
roomote[bot]
bd39fe6fd4
fix: correct tool repetition detector to not block first tool call when limit is 1 (#6836)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-11 17:36:30 -04:00
Chris Estreich
b1300e5550
Bring back roomote control (#6796)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-11 17:28:08 -04:00
github-actions[bot]
4ae9014466
Changeset version bump (#6955)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-11 17:09:37 -04:00
Matt Rubens
6cc4b20bf3
Release v3.25.11 (#6952) 2025-08-11 17:04:55 -04:00
Christiaan Arnoldus
b30372d5ca
Fix token usage / cost often being underreported (#6122)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-08-11 16:55:16 -04:00
Ertan Dagistanli
1018b885ab
Add IO Intelligence Provider (#6875)
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-08-11 16:54:35 -04:00
Matt Rubens
bce579f4c1
Remove translation roomote (#6945) 2025-08-11 15:39:28 -04:00
Daniel
76e5a726a3
feat: add native OpenAI provider support for Codex Mini model (#5386) (#6931)
Co-authored-by: Luis Daniel Riccio Silva <danriccio@Dans-MacBook-Pro.local>
2025-08-11 11:16:01 -04:00
Matt Rubens
f53fd39014
Add submitUserMessage to Task (#6895) 2025-08-10 03:13:15 -04:00
roomote[bot]
3ee607202e
fix: Clearify codebase_search path parameter optional and clarify tool descriptions (#6877)
* fix: make search_files path parameter optional and clarify tool descriptions

- Made path parameter optional in search_files tool (defaults to workspace root)
- Updated search_files description with clearer examples
- Improved codebase_search description to clarify when to use path parameter
- Updated test snapshots to reflect the changes

This addresses confusion where LLMs were unnecessarily specifying paths when searching from project root

* revert: remove search_files changes, keep only codebase_search improvements

- Reverted all changes to src/core/prompts/tools/search-files.ts
- Reverted all changes to src/core/tools/searchFilesTool.ts
- Updated test snapshots to reflect the reverted search_files tool
- Kept the codebase_search tool description improvements as intended

* Update codebase-search.ts

Simplify codebase_search tool documentation

- Condensed description to eliminate repetitive explanations about user wording
- Reduced from 2 examples to 1 comprehensive example showing optional path usage
- Streamlined parameter descriptions to remove redundancy
- Maintained all critical requirements (English queries, semantic search, path optionality)
- Reduced documentation size by ~40% while preserving clarity

* fix: add workspace directory context to codebase_search path parameter

- Added ToolArgs import and parameter to getCodebaseSearchDescription function
- Updated path parameter description to include '(relative to the current workspace directory ${args.cwd})'
- Updated index.ts to pass args to getCodebaseSearchDescription
- Maintains consistency with other tool descriptions like list_files and search_files

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
2025-08-09 16:22:18 -04:00
Hannes Rudolph
cda67a86f5
GPT5 OpenAI Fix (#6864)
* fix: add explicit max_output_tokens for GPT-5 Responses API

- Added max_output_tokens parameter to GPT-5 request body using model.maxTokens
- This prevents GPT-5 from defaulting to very large token limits (e.g., 120k)
- Updated tests to expect max_output_tokens in GPT-5 request bodies
- Fixed test for handling unhandled stream events by properly mocking SDK fallback

* fix: add missing translations for reasoningEffort.minimal in Indonesian and Dutch locales

* fix: correct GPT-5 response ID persistence and usage

- Renamed metadata field from 'previous_response_id' to 'response_id' for clarity
- Fixed logic to correctly use the response_id from the previous message as previous_response_id for the next request
- This resolves the 'Previous response with id not found' errors that occurred after multiple turns in the same session

* feat: add robust error handling for GPT-5 previous_response_id failures

- Automatically retry without previous_response_id when it's not found (400 error)
- Clear stored lastResponseId to prevent reusing stale IDs
- Handle errors in both SDK and SSE fallback paths
- Log warnings when retrying to help with debugging

* fix: handle GPT-5 response ID race condition with nano model

- Add promise-based synchronization for response ID persistence
- Wait for pending response ID from previous request before using it
- Resolve promise when response ID is received or cleared
- Add 100ms timeout to avoid blocking too long on ID resolution
- Properly clean up resolver on errors to prevent memory leaks

This fixes the race condition where fast nano model responses could cause
the next request to be initiated before the response ID was fully persisted.

* fix: address PR review comments for GPT-5 implementation

- Extract usage normalization helper to reduce duplication
- Suppress conversation continuity for first message (but respect explicit metadata)
- Deduplicate response ID resolver logic
- Remove dead enableGpt5ReasoningSummary option references
- DRY up GPT-5 event/usage handling with normalizeGpt5Usage helper
- Centralize default GPT-5 reasoning effort using model info
- Fix Indonesian locale minimal string misplacement
- Add clarifying comments for Developer prefix usage
- Add TODO for future verbosity UI capability gating
- Fix failing test in reasoning.spec.ts

* fix(openai-native): address Roomote inline feedback\n\n- Delegate standard GPT-5 SSE event types to shared processor to reduce duplication\n- Add JSDoc for response ID accessors\n- Standardize key error messages for GPT-5 Responses API fallback\n- Extract persistGpt5Metadata() in Task to simplify metadata writes\n- Add malformed JSON SSE parsing test\n

* fix(openai-native,gpt5): correct usage cost calc (use calculateApiCostOpenAI incl. cache); enforce 'skip once' continuity via suppressPreviousResponseId; dedupe responseId resolver on SSE 400; feat: gate reasoning.summary by enableGpt5ReasoningSummary; centralize default reasoning effort; types/ui: add ModelInfo.supportsVerbosity and gate Verbosity UI by capability; refactor: avoid duplicate usage emission in SSE done/completed

* fix(gpt5): default enableGpt5ReasoningSummary=true to preserve tests and expected behavior

* fix(gpt5): canonicalize GPT-5 metadata key to previous_response_id and align enableGpt5ReasoningSummary default docs

* fix(openai-native): remove review artifact comments and guard GPT-5 in completePrompt
2025-08-09 14:52:06 -04:00
John Richmond
cdc31f7c26
Bedrock: workaround LiteLLM passthrough issues (#6778)
Explicitly setting requestTimeout seems to be required for it to be
possible to use the Bedrock provider with LiteLLM
Bedrock passthrough.
2025-08-09 14:29:18 -04:00
Hannes Rudolph
75b861c845
fix(mcp): Revert changes causing startup issues and remove refresh notifications (#6878)
* Revert "fix: prevent unnecessary MCP server refresh on settings save (#6772) (#6779)"

This reverts commit 8d05bc179b.

* fix(mcp): Revert changes causing startup issues and temporarily disable notifications

- Reverted PR #6779 which prevented unnecessary MCP server refreshes but caused startup failures
- Temporarily disabled MCP notification popups as a stopgap solution
- Added TODO comments explaining the temporary nature of disabled notifications
- This allows MCP servers to function properly while a more robust solution is developed

* test(mcp): restore mcpEnabled toggle coverage to verify delegation to McpHub

* refactor(mcp): remove info notifications during refresh; rely on UI indicator
2025-08-09 14:28:05 -04:00
github-actions[bot]
ad0e33e2d9
Changeset version bump (#6826)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-07 17:43:14 -04:00
github-actions[bot]
5f6891322a
Update contributors list (#6636)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-08-07 17:41:07 -04:00
Matt Rubens
d0b1fbf049
chore: add changeset for v3.25.10 (#6825) 2025-08-07 17:39:09 -04:00
roomote[bot]
dc57552ade
feat: add GPT-5 model support (#6819)
* feat: add GPT-5 model support

- Added GPT-5 models (gpt-5-2025-08-07, gpt-5-mini-2025-08-07, gpt-5-nano-2025-08-07)
- Added nectarine-alpha-new-reasoning-effort-2025-07-25 experimental model
- Set gpt-5-2025-08-07 as default OpenAI Native model
- Implemented GPT-5 specific handling with streaming and reasoning effort support

* fix: remove hardcoded temperature from GPT-5 handler

- Updated handleGPT5Message to use configurable temperature
- Now uses this.options.modelTemperature ?? OPENAI_NATIVE_DEFAULT_TEMPERATURE
- Maintains consistency with other model handlers

* feat: add reasoning effort support for all OpenAI models

* fix: update test to expect new default model gpt-5-2025-08-07

* feat: increase GPT-5 models context window to 400,000

- Updated context window from 256,000 to 400,000 for gpt-5-2025-08-07
- Updated context window from 256,000 to 400,000 for gpt-5-mini-2025-08-07
- Updated context window from 256,000 to 400,000 for gpt-5-nano-2025-08-07
- Updated context window from 256,000 to 400,000 for nectarine-alpha-new-reasoning-effort-2025-07-25

As requested by @daniel-lxs in PR #6819

* revert: remove GPT-5 models, keep only nectarine experimental model

- Removed gpt-5-2025-08-07, gpt-5-mini-2025-08-07, gpt-5-nano-2025-08-07
- Kept nectarine-alpha-new-reasoning-effort-2025-07-25 experimental model
- Reverted default model back to gpt-4o
- Updated tests and changeset accordingly

* feat: add GPT-5 models with updated context windows

- Added gpt-5-2025-08-07, gpt-5-mini-2025-08-07, gpt-5-nano-2025-08-07 models
- All GPT-5 models configured with 400,000 context window
- Updated nectarine model context window to 256,000
- All models configured with reasoning effort support
- Set gpt-5-2025-08-07 as default OpenAI Native model
- Added GPT-5 model handling in openai-native.ts
- Updated tests to reflect new default model

* fix: restore reasoning effort support for o1 series models

- Added supportsReasoningEffort: true to o1, o1-preview, and o1-mini models
- This restores the ability to use reasoning effort parameters with these models
- The existing code in openai-native.ts already handles reasoning effort correctly

* Revert "fix: restore reasoning effort support for o1 series models"

This reverts commit 7251237ae8.

* fix: restore reasoning effort support for o3 and o4 models

- Added supportsReasoningEffort: true to o3, o3-high, o3-low models
- Added supportsReasoningEffort: true to o4-mini, o4-mini-high, o4-mini-low models
- Added supportsReasoningEffort: true to o3-mini, o3-mini-high, o3-mini-low models
- These models have both supportsReasoningEffort and reasoningEffort properties

* Revert "fix: restore reasoning effort support for o3 and o4 models"

This reverts commit a75a2b8a69.

* fix: restore reasoning effort support for o3 and o4 models

- Added supportsReasoningEffort: true to o3, o3-high, o3-low models
- Added supportsReasoningEffort: true to o4-mini, o4-mini-high, o4-mini-low models
- Added supportsReasoningEffort: true to o3-mini, o3-mini-high, o3-mini-low models

* fix: adjust reasoning effort support for o3/o4 models

- Keep supportsReasoningEffort only for base o3, o4-mini, and o3-mini models
- Remove supportsReasoningEffort from -high and -low variants
- Position supportsReasoningEffort right before reasoningEffort property

* fix: remove nectarine experimental model

- Removed nectarine-alpha-new-reasoning-effort-2025-07-25 from openai.ts
- Removed nectarine handling from openai-native.ts (renamed to handleGpt5Message)
- Removed associated changeset file
- Keep GPT-5 models with developer role handling

* feat: implement full GPT-5 support with verbosity and minimal reasoning

- Add all three GPT-5 models with accurate pricing (.25/0 for gpt-5, /bin/sh.25/ for mini, /bin/sh.05//bin/sh.40 for nano)
- Implement verbosity control (low/medium/high) that passes through to API
- Add minimal reasoning effort support for fastest response times
- GPT-5 models use developer role instead of system role
- Set gpt-5-2025-08-07 as default OpenAI Native model
- Add Responses API infrastructure for future migration
- Update tests to verify all GPT-5 features
- All 27 tests passing

Note: UI controls for verbosity still need to be added in a follow-up PR

* feat: add verbosity setting for GPT-5 models

- Add VerbosityLevel type definition to model types
- Add verbosity field to ProviderSettings schema
- Create Verbosity UI component for settings
- Add verbosity labels to all localization files
- Integrate verbosity handling in model parameters transformation
- Update OpenAI native handler to support verbosity for GPT-5
- Add comprehensive tests for verbosity setting
- Update existing GPT-5 tests to use verbosity from settings

* Delete .roorules

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: hannesrudolph <hrudolph@gmail.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-08-07 16:57:12 -04:00
roomote[bot]
72668fef8d
fix: add missing MCP error translation keys (#6821)
* fix: add missing MCP error translation keys

- Added refresh_after_disable translation key
- Added refresh_after_enable translation key
- Added disconnect_servers_partial translation key
- Updated all 18 locale files with the missing keys
- Fixes the "errors.refresh_after_disable" display issue in MCP server management

* fix: remove fallback English strings from MCP error translations

As requested by @mrubens, removed the || operator and fallback English strings from:
- t("mcp:errors.disconnect_servers_partial")
- t("mcp:errors.refresh_after_disable")
- t("mcp:errors.refresh_after_enable")

The translation system will now rely solely on the localized strings without fallbacks.

* fix: translate MCP error messages to all locales

- Translated "refresh_after_disable" error message
- Translated "refresh_after_enable" error message
- Translated "disconnect_servers_partial" error message with count placeholder
- All 17 non-English locales now have proper translations instead of English text

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-07 14:42:12 -04:00
Hannes Rudolph
7ea1ae570a
fix: use CDATA sections in XML examples to prevent parser errors (#4852) (#6811) 2025-08-07 12:42:29 -04:00
github-actions[bot]
6b4ac52d00
Changeset version bump (#6810)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-07 10:22:46 -04:00
Matt Rubens
cd8f862fc2
chore: add changeset for v3.25.9 (#6809) 2025-08-07 10:19:18 -04:00
Matt Rubens
518c558d56
Fix rounding of max tokens (#6808) 2025-08-07 10:11:01 -04:00
roomote[bot]
212297755f
feat: add GLM-4.5 and OpenAI gpt-oss models to Fireworks provider (#6784)
* feat: add GLM-4.5 and OpenAI gpt-oss models to Fireworks provider

- Added GLM-4.5 (355B/32B active) and GLM-4.5-Air (106B/12B active) models from Z.ai
- Added gpt-oss-20b and gpt-oss-120b models from OpenAI
- All models configured with 128K context window
- Added comprehensive test coverage for all new models

Fixes #6753

* fix: update GLM-4.5 model IDs to use p instead of hyphen

- Changed glm-4-5 to glm-4p5
- Changed glm-4-5-air to glm-4p5-air
- Updated corresponding test cases

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-07 09:42:22 -04:00
roomote[bot]
15b0f50dd9
feat: focus chat input when clicking plus button in extension menu (#6689)
* feat: focus chat input when clicking plus button in extension menu

- Added focusInput action after chatButtonClicked in plusButtonClicked handler
- This ensures the text area in ChatView gets focused when users click the + button
- Improves user experience by allowing immediate typing after creating new chat

* fix: replace unreliable setTimeout with sequential message passing

- Removed setTimeout with hardcoded 100ms delay
- Now sending focusInput action immediately after chatButtonClicked
- This ensures proper sequencing without arbitrary timing delays
- More reliable approach that doesn't depend on timing assumptions

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-07 09:33:25 -04:00
Chris Estreich
cb0a58e4a4
Support linking to @roo-code/cloud in Roo-Code repo (#6799)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-08-07 01:09:21 -10:00
Chris Estreich
37330b0209
Bring back "Use @roo-code/cloud from npm" (#6795) 2025-08-06 20:51:41 -10:00
github-actions[bot]
a198b6aebc
Changeset version bump (#6790)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-06 21:00:33 -07:00
Matt Rubens
ba13c5e5bf
Release v3.25.8 (#6789) 2025-08-06 20:56:25 -07:00
Hannes Rudolph
8d05bc179b
fix: prevent unnecessary MCP server refresh on settings save (#6772) (#6779) 2025-08-06 17:37:51 -07:00
Daniel
c99ccf0bb0
fix: Replace scrollToIndex with scrollTo to fix scroll jitter (#6780) 2025-08-06 17:24:18 -07:00
Matt Rubens
c52fdc4397
Clamp default model max tokens to 20% of context window (#6761) 2025-08-06 13:51:10 -07:00
roomote[bot]
2b647ed9a1
fix: handle current directory path "." correctly in codebase_search tool (#6517)
* fix: handle current directory path "." correctly in codebase_search tool

- Fix path filtering logic in QdrantVectorStore.search() to properly handle current directory representations
- When directoryPrefix is ".", "./", "", or similar, set filter to undefined to search entire workspace
- Add comprehensive tests covering various current directory path formats including cross-platform support
- Resolves issue where codebase_search with path="." returned no results

Fixes #6514

* fix: normalize directory prefix handling in Qdrant vector store

* fix: normalize paths starting with './' and fix OS-dependency issue

- Use forward slash for splitting after toPosix() conversion
- Remove leading './' from paths like './src' to normalize them to 'src'
- Update test expectations to match correct behavior

* refactor: use path.posix.normalize instead of custom toPosix method

- Replaced directoryPrefix.toPosix() with path.posix.normalize()
- Added proper handling of backslashes before normalization
- Updated test mock to include posix.normalize method
- All tests passing (381 tests in code-index service)

* refactor: address review comments - improve path normalization

- Keep check for './' after normalization as path.posix.normalize('./') returns './'
- Use actual Node.js path.posix implementation in tests instead of custom mock
- Apply path.posix.normalize to cleanedPrefix for consistency

All 381 code-index tests pass

* fix: apply path.posix.normalize when cleaning prefix to avoid redundant normalization

Addresses review comment from @mrubens to normalize the path at line 385 instead of normalizing twice

* fix: correct current directory detection logic

The issue was that the condition checked for an empty string after normalization,
but path.posix.normalize('') actually returns '.', not ''. This caused the
current directory check to fail when an empty string was passed.

Removed the redundant empty string check since normalize('') returns '.' which
is already handled by the first condition.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: hannesrudolph <hrudolph@gmail.com>
2025-08-06 06:28:28 -07:00
roomote[bot]
34fb5b7c37
fix: recover from error state when Qdrant becomes available (#6661)
* fix: recover from error state when Qdrant becomes available

- Add recoverFromError method to CodeIndexManager to clear error state and reset internal services
- Update startIndexing handler to check for error state and recover before initialization
- Add comprehensive tests for error recovery functionality

Fixes #6660

* fix: address PR review comments for code indexing error recovery

- Add race condition protection for multiple rapid clicks on Start Indexing button
- Add error handling for setSystemState in recoverFromError method
- Enhance JSDoc documentation for recoverFromError method
- Add test cases for recoverFromError idempotency and error handling

* refactor: move error recovery logic into startIndexing method

- Moved error recovery from webviewMessageHandler into CodeIndexManager.startIndexing()
- This ensures error recovery happens whenever indexing is started, not just from UI
- Added race condition prevention flag within CodeIndexManager
- Simplified webviewMessageHandler by removing error state checking
- The startIndexing method now automatically recovers from error state before proceeding

* fix: remove await from startIndexing calls and update JSDoc

- startIndexing should never be awaited as it's a long-running background process
- Added JSDoc warning to never await this method
- Updated webviewMessageHandler to not await startIndexing calls

* fix: use platform-agnostic paths in code-index manager tests for Windows compatibility

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-08-06 06:26:34 -07:00
Chris Estreich
142cdb5cb1
Revert "Use @roo-code/cloud from npm" (#6742)
Revert "Use @roo-code/cloud from npm (#6611)"

This reverts commit a1439c1f96.
2025-08-05 16:13:11 -10:00
roomote[bot]
7a865e26c4
fix: prevent disabled MCP servers from starting processes and show correct status (#6084)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: hannesrudolph <hrudolph@gmail.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-08-05 16:55:30 -07:00
roomote[bot]
263e317ebd
feat: reduce Gemini 2.5 Pro minimum thinking budget to 128 (#6588)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-05 15:43:20 -07:00
roomote[bot]
1237eb825b
fix: trim whitespace from OpenAI base URL to fix model detection (#6560)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-05 14:22:29 -07:00
roomote[bot]
7b6c6a8196
fix: improve handling of net::ERR_ABORTED errors in URL fetching (#6635)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-08-05 14:21:58 -07:00
Nitesh
4f4328d97c
Add swift files to fallback list (#6724) 2025-08-05 14:19:23 -07:00
xyOz
6892427e34
Fix: Resolve Memory Leak in ChatView Virtual Scrolling Implementation (#6697)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-08-05 14:08:52 -07:00
Matt Rubens
2e77ce1684
Update CHANGELOG.md 2025-08-05 12:08:23 -07:00
github-actions[bot]
31df9bd20c
Changeset version bump (#6738)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-05 12:06:47 -07:00
Matt Rubens
1805b75b43
Stop making types private (#6737) 2025-08-05 11:56:16 -07:00
Matt Rubens
beacbd73a9
Delete bad changeset (#6736) 2025-08-05 11:47:33 -07:00
Matt Rubens
e5f117ded6
Revert "Changesets config tweak (#6733)" (#6735) 2025-08-05 11:42:22 -07:00
Daniel
98e0a2d5c6
feat: add OpenAI GPT OSS model to Cerebras providers (#6734) 2025-08-05 11:25:02 -07:00
Matt Rubens
f4b7c895e3
Changesets config tweak (#6733) 2025-08-05 11:23:02 -07:00
Matt Rubens
f0d2a54aad
v3.25.7 (#6730) 2025-08-05 11:12:13 -07:00
Daniel
6331f5769b
feat: add GPT-OSS 120b and 20b models to Groq provider (#6732) 2025-08-05 11:10:23 -07:00
roomote[bot]
24584f54ec
feat: clean up task list in HistoryPreview and History components (#6687)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <me@brunobergher.comexport>
Co-authored-by: Bruno Bergher <me@brunobergher.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-05 11:05:55 -07:00
roomote[bot]
477b85de03
feat: add support for Claude Opus 4.1 (claude-opus-4-1-20250805) (#6728)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-08-05 10:55:03 -07:00
Matt Rubens
c632b22e56
Revert "Extension bridge (#6677)" (#6729) 2025-08-05 10:45:45 -07:00
Bruno Bergher
ea79dfeb66
Redesigned Task Header (#6561)
* Reorganizes the task header for cleanliness and in preparation for Cloud link

* More task ehader visual tweaks

* Translations for new task header

* Fixes TaskHeader color

* Removes stray string

* Fixes tests

* Iterates on visual details

* More visual tweaks

* Missing localization call

* Fixes tests

---------

Co-authored-by: Bruno Bergher <me@brunobergher.comexport>
2025-08-05 06:26:25 -07:00
NaccOll
d90bab71ff
feat: code indexing support multiple folder similar with task history (#6204)
* feat: Implement code indexing support multi-folder workspaces similar to task history

* fix: add missing mock for onDidChangeActiveTextEditor in tests
2025-08-04 19:39:37 -07:00
roomote[bot]
8a35b64b9b
fix: prevent MCP server creation when setting is disabled (#6613)
* fix: prevent MCP server creation when setting is disabled

- Modified getFetchInstructionsDescription to conditionally include create_mcp_server task
- Updated getToolDescriptionsForMode to pass enableMcpServerCreation parameter
- Added tests to verify the conditional behavior
- Updated snapshot test to reflect the new expected behavior

Fixes #6607

* fix: address review comments - add JSDoc, null test, and clarify default behavior

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-04 19:29:38 -07:00
ershang-fireworks
4a9222b50e
Add the fireworks AI provider (#6652)
* add fireworks provider

* add tests

* Update packages/types/src/providers/fireworks.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* fix typo

* another typo

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-08-04 19:27:12 -07:00
Chris Estreich
1d714c8ce4
Extension bridge (#6677)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-04 13:58:14 -07:00
roomote[bot]
7ca4901024
fix: prevent empty mode names from being saved (fixes #5766) (#5767)
* fix: prevent empty mode names from being saved (fixes #5766)

- Add frontend validation in ModesView to prevent empty names from being saved
- Add onBlur handler to restore original name if field is left empty
- Add backend validation in CustomModesManager.updateCustomMode using modeConfigSchema
- Provide user feedback when validation fails
- Trim whitespace from mode names before validation

This prevents YAML parsing errors caused by empty mode name fields.

* fix: improve UX by allowing users to empty mode name field

- Remove restriction that prevented users from emptying the name field
- Remove onBlur handler that automatically restored original name
- Allow backend validation to handle empty names and show appropriate errors
- Users can now type freely but invalid saves are prevented by backend validation

Addresses feedback from @daniel-lxs in PR #5767

* fix: allow emptying mode name field but prevent saving when invalid

- Modified onBlur handler to check if name is empty before saving
- If empty, revert to original name instead of saving empty value
- This provides better UX as requested in PR review

* fix: add proper JSON formatting to source map writes for Windows compatibility

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-04 11:03:34 -07:00
Chris Estreich
c34e412771
Bump @roo-code/types to v1.44.0 (#6675) 2025-08-04 07:58:11 -10:00
Kaan
4e8b17486b
feat(ui): Make mode selection dropdowns responsive (#6422) 2025-08-04 11:56:05 -04:00
jues
a921d059e1
Add Z AI provider (#6657)
Co-authored-by: wangshan <shan.wang@aminer.cn>
2025-08-04 10:06:46 -04:00
axb
f24c1e69a3
use assistantMessageParser class instead of parseAssistantMessage (#5341)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-08-04 10:02:30 -04:00
NaccOll
603c6c6aea
style: update highlightLayer style and align to textarea (#6648) 2025-08-04 08:52:21 -05:00
roomote[bot]
2882d99ea8
Remove 'Initial Checkpoint' terminology, use 'Checkpoint' consistently (#6643)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-04 00:23:08 -04:00
Chris Estreich
a1439c1f96
Use @roo-code/cloud from npm (#6611) 2025-08-03 16:43:33 -10:00
Chris Estreich
fd7550f463
Bump @roo-code/types to v1.43.0 (#6640) 2025-08-03 16:38:40 -10:00
NaccOll
a5b55dac8b
Changing checkpoint timing and ensuring checkpoints work (#6359)
* feat: Before requesting, ensure checkpoint is initialized

* Generate a checkpoint before modifying the code

* refactor: streamline checkpoint handling and enhance getCheckpoints method

* Blocked waiting for checkpoint initialization timing to change

* cancel checkpoint restore limit

* fix: ensure checkpoint service is undefined on initialization error and improve checkpoint diff handling

* refactor: simplify checkpoint service initialization and cleanup unused variables in CheckpointMenu

* fix: prevent race condition in checkpoint service initialization

- Only assign service to cline.checkpointService after successful initialization
- Add proper cleanup on initialization failure
- Prevents service from being in inconsistent state if Git check fails

* fix: remove checkpoint save from presentAssistantMessage for update_todo_list case

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-08-03 19:21:45 -04:00
NaccOll
a88238f68b
feat: conditionally include reminder section based on todo list config (#6411)
* feat: conditionally include reminder section based on todo list configuration

* feat: add tests for REMINDERS section based on todoListEnabled configuration
2025-08-03 08:26:33 -04:00
Matt Rubens
82a007a211
Fix the UI for approving chained commands (#6623) 2025-08-03 02:15:45 -04:00
Chris Estreich
3f966dfaa3
Bump @roo-code/types to v1.42.0 (#6610) 2025-08-02 13:27:59 -07:00
Chris Estreich
b2d2a2c5d2
Task and TaskProvider event emitter cleanup + a few new events (#6606)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-02 11:12:44 -07:00
github-actions[bot]
8513263a67
Changeset version bump (#6579)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-01 21:32:31 -04:00
github-actions[bot]
c666340bd6
Update contributors list (#6506)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-08-01 21:30:54 -04:00
roomote[bot]
b5a54ba48d
Release v3.25.6 (#6578)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-01 21:28:49 -04:00
roomote[bot]
19c157e51c
feat: set horizon-beta model max tokens to 32k for OpenRouter (#6577)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-01 21:11:24 -04:00
roomote[bot]
69685c779d
chore: bump @roo-code/types to v1.41.0 (#6568)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-01 13:14:55 -07:00
John Richmond
8353ca2519
Cloud: support syncing provider profiles from the cloud (#6540) 2025-08-01 16:00:09 -04:00
github-actions[bot]
f7b2bb0384
Changeset version bump (#6565)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-01 15:39:30 -04:00
Matt Rubens
b9cd1e1b2c
Release v3.25.5 (#6564) 2025-08-01 15:34:27 -04:00
Kevin Taylor
88272e9b02
Add Qwen 3 Coder from Cerebras (#6562)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-01 15:29:33 -04:00
Daniel
7cbb37df74
fix: Fix VB.NET indexing by implementing fallback chunking system (#6552) 2025-08-01 14:55:45 -04:00
Matt Rubens
ebfd384ac4
More tolerant search/replace match (#6537)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-08-01 11:58:57 -04:00
Matt Rubens
305a5da369
Clean up the auto-approve UI (#6538)
* Clean up the auto-approve UI

* Update webview-ui/src/components/settings/AutoApproveSettings.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* Fix

* Translations

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-08-01 07:49:42 -04:00
Will Li
836371c36a
fix: linter not applied to locales/*/README.md (#6477)
fix
2025-07-31 22:00:32 -04:00
Matt Rubens
5c05762333
Revert "Migrate evals database when deploying roo-code-website" (#6525) 2025-07-31 19:27:55 -04:00
thill2323
c6e7ac41fc
Phase 1 website updates (#6085)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-31 19:08:06 -04:00
John Richmond
6e835de82f
Cloud service cleanup callbacks / move to events (#6519)
* Cloud: use events in SettingsService

* Cloud: simplify AuthService events

* Cloud: convert CloudService to an EventEmitter

* Apply suggestions from code review

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-07-31 18:30:30 -04:00
Kevin Taylor
079fc22a66
Add Cerebras as a provider (#6392) 2025-07-31 18:17:54 -04:00
Daniel
5041880da0
fix: handle Qdrant deletion errors gracefully to prevent indexing interruption (#6296) 2025-07-31 16:20:11 -04:00
Chris Hasson
1da82b2db0
Add auto-approved cost limits (#6484)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-31 15:33:09 -04:00
Piotr Wilkin (ilintar)
1a013b4416
fix: LM Studio model context length (#5075) (#6183)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-31 15:31:04 -04:00
Daniel
74672fafcb
fix: restore message sending when clicking save button (#6487) 2025-07-31 11:36:40 -04:00
Matt Rubens
de359a465c
Handle more variations of chaining and subshell command validation (#6486) 2025-07-31 11:28:43 -04:00
roomote[bot]
816dc75681
fix: improve Claude Code ENOENT error handling with installation guidance (#5867)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-31 10:45:16 -04:00
roomote[bot]
e13083e532
Skip interpolation for non-existent slash commands (#6475)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-31 01:21:19 -04:00
github-actions[bot]
2f8fd889a5
Changeset version bump (#6474)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-31 00:13:50 -04:00
Matt Rubens
f04e7b0cc5
Release v3.25.4 (#6473) 2025-07-31 00:08:06 -04:00
Matt Rubens
d70adaced9
Revert experiments with nightly marketplace config (#6472) 2025-07-30 23:37:42 -04:00
roomote[bot]
c47e857048
feat: set horizon-alpha model max tokens to 32k for OpenRouter (#6470)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-30 23:27:18 -04:00
KJ7LNW
01f5320b4d
fix: Remove misleading task resumption message (#5851)
Co-authored-by: Eric Wheeler <roo-code@z.ewheeler.org>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-30 22:53:06 -04:00
renovate[bot]
b7410dce8c
chore(deps): update dependency lint-staged to v16.1.2 (#4965)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-30 22:49:35 -04:00
renovate[bot]
4d9cf8f721
fix(deps): update dependency recharts to v2.15.4 (#4971)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-30 22:49:19 -04:00
Daniel
ccd8ab9ffc
Fix: Kill button for execute_command tool (#6457) 2025-07-30 22:24:43 -04:00
roomote[bot]
38c6c7a101
feat: add zai-org/GLM-4.5-FP8 model to Chutes AI provider (#6441)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-30 22:23:51 -04:00
github-actions[bot]
b71cd44c1c
Update contributors list (#6360)
docs: update contributors list [skip ci]

Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-07-30 20:23:02 -04:00
renovate[bot]
c21ef368d7
chore(deps): update dependency @changesets/cli to v2.29.5 (#4936)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-30 20:18:38 -04:00
Chris Estreich
796ee5c0e3
Migrate evals database when deploying roo-code-website (#6146)
Evals db migrate
2025-07-30 20:12:21 -04:00
Chris Estreich
cb6dccab95
Miscellaneous cleanup (#6453) 2025-07-30 16:10:53 -07:00
roomote[bot]
b8dc31581c
feat: add symlink support for AGENTS.md file loading (#6326)
* feat: add symlink support for AGENTS.md file loading

- Add safeReadFileFollowingSymlinks function to handle symlink resolution
- Update loadAgentRulesFile to use the new symlink-aware function
- Add comprehensive tests for both symlink and regular file scenarios
- Ensures AGENTS.md can be a symlink pointing to actual rules file

* refactor: use existing symlink resolution pattern for AGENTS.md

- Extracted resolveSymlinkPath function to handle symlink resolution
- Removed duplicate safeReadFileFollowingSymlinks function
- Updated loadAgentRulesFile to use resolveSymlinkPath + safeReadFile
- Updated tests to match new implementation
- Maintains same functionality while reusing existing patterns

* fix: simplify symlink resolution for AGENTS.md to fix Windows compatibility

- Remove duplicate resolveSymlinkPath function as suggested by @mrubens
- Use simpler inline symlink resolution in loadAgentRulesFile
- Update tests to match simplified implementation
- This should fix the failing Windows unit tests while maintaining functionality

* refactor: use existing resolveSymLink function for AGENTS.md symlink support

- Remove duplicate inline symlink resolution logic
- Reuse existing resolveSymLink function with MAX_DEPTH protection
- Adapt loadAgentRulesFile to work with resolveSymLink's fileInfo interface
- Fix test to properly mock fs.stat for resolved symlink targets
- All tests pass (36/36)

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-30 18:57:15 -04:00
Hannes Rudolph
ded0180112
feat: diagnose nightly freeze by disabling contributes (#6450) 2025-07-30 16:41:56 -06:00
roomote[bot]
5f4ccbcc34
fix: resolve navigator global error by updating mammoth and bluebird dependencies (#6363)
- Update mammoth from ^1.8.0 to ^1.9.1
- Add pnpm override to force bluebird >=3.7.2 (was 3.4.7)
- Fixes PendingMigrationError: navigator is now a global in nodejs
- Resolves extension crashes in VS Code nightly builds

Fixes #6356

Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-30 18:32:31 -04:00
Adam Brand
7a07088802
Add pattern to support Databricks /invocations endpoints (#6317)
For using other models in Azure (e.g., Claude); you have to use Databricks, and the other patterns didn't match that.
2025-07-30 18:31:26 -04:00
NaccOll
181993f639
feat: enhance token counting by extracting text from messages using VSCode LM API (#6424) 2025-07-30 16:56:01 -04:00
Will Li
83280a0d40
feat: Add Task History Context to Prompt Enhancement (#6343) 2025-07-30 16:54:33 -04:00
AntiMoron
4b45a4e7f2
Support new LLM provider: Doubao (#6345)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-30 16:54:16 -04:00
Hannes Rudolph
4015a58951
fix: Use separate changelog for nightly builds to prevent marketplace freezing (#6449) 2025-07-30 16:53:35 -04:00
roomote[bot]
2217a3d548
feat: auto-refresh marketplace data when organization settings change (#6446)
- Added organizationSettingsVersion to ExtensionState type
- Modified ClineProvider to include version in state sent to webview
- Updated CloudService callback to trigger marketplace refresh on settings change
- Added logic to MarketplaceView to detect version changes and request data refresh
- Added comprehensive tests for the new functionality

This ensures marketplace items (MCPs and modes) stay in sync when organization settings are updated in the cloud.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: John Richmond <5629+jr@users.noreply.github.com>
2025-07-30 13:52:28 -07:00
Jorge Piedrahita Ortiz
75f93c41cf
feat: add SambaNova provider integration (#6188) 2025-07-30 12:47:12 -04:00
github-actions[bot]
f3d2504117
Changeset version bump (#6438)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-30 11:34:15 -04:00
Matt Rubens
6f9fea3ab9
chore: add changeset for v3.25.3 (#6435) 2025-07-30 11:14:46 -04:00
Hannes Rudolph
5724cb2bbb
docs: clarify apply_diff tool descriptions to emphasize surgical edits (#6278)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-30 10:52:20 -04:00
Chris Hasson
fcbff29d04
fix(chat): Prevent input clearing when clicking chat buttons (#6222)
Co-authored-by: Chris Hasson <noreply@example.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-30 10:51:03 -04:00
Daniel
0b9010a688
Remove event types mention from PR reviewer rules (#6428) 2025-07-30 10:49:41 -04:00
Matt Rubens
14a116e1f2
Update the auto-translate prompt (#6430) 2025-07-30 10:46:44 -04:00
Matt Rubens
d7c1c74fef
Hide Gemini checkboxes on the welcome view (#6415) 2025-07-30 10:46:18 -04:00
roomote[bot]
09cf6d0996
Remove "(prev Roo Cline)" from extension title in all languages (#6426)
feat: remove "(prev Roo Cline)" from extension title in all languages

- Updated all package.nls.*.json files to remove "(prev Roo Cline)" references from extension display names
- Updated all localized README.md files to remove "(prev Roo Cline)" references from titles
- Updated main README.md to remove "(prev Roo Cline)" reference from title
- Affects 18 language files and 18 README files across all supported locales

Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-30 09:06:44 -04:00
roomote[bot]
6331944ed1
feat: add translation check action to pull_request.opened event (#6393)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-29 21:35:05 -07:00
Matt Rubens
f49d8bc199
Allow queueing images (#6414) 2025-07-29 23:57:55 -04:00
Matt Rubens
8f7ac57e47
Add docs link for slash commands (#6409) 2025-07-29 22:46:37 -04:00
Daniel
51836bdafb
Update PR reviewer rules and mode configuration (#6391) 2025-07-29 22:20:47 -04:00
roomote[bot]
fd5bdc7cb1
feat: increase Claude Code default max output tokens to 16k (#6312)
feat: increase Claude Code default max output tokens from 8k to 16k

- Changed CLAUDE_CODE_DEFAULT_MAX_OUTPUT_TOKENS from 8000 to 16000
- Users can still lower it to 8k via environment variable if needed
- Addresses issue #6125 regarding output token limits

Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-29 21:07:25 -04:00
github-actions[bot]
e654ced135
Changeset version bump (#6390)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-29 18:09:58 -04:00
Matt Rubens
d1cbc79cb5
Release v3.25.2 (#6389) 2025-07-29 18:06:36 -04:00
Matt Rubens
3d3d4aea65
Fix zap hover (#6388) 2025-07-29 18:00:32 -04:00
Daniel
1cc9f15df1
fix: show diff view before approval when PREVENT_FOCUS_DISRUPTION is disabled (#6386) 2025-07-29 17:52:30 -04:00
John Richmond
7b0a7e544d
Bump types to 1.40.0 (#6387) 2025-07-29 14:41:31 -07:00
John Richmond
6a42e91b15
Cloud: add organization MCP controls (#6378)
- Add option to hide mcps from the marketplace
- Add ability to define new organization mcps
2025-07-29 14:11:51 -07:00
github-actions[bot]
43021d33e2
Changeset version bump (#6385)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-29 17:10:43 -04:00
Matt Rubens
c5ba16323a
Release v3.25.1 (#6384) 2025-07-29 16:20:04 -04:00
roomote[bot]
039154e938
feat: add zai-org/GLM-4.5-Air model to Chutes AI provider (#6377)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-29 16:14:11 -04:00
Matt Rubens
2c2a7842c4
Improvements to subshell validation (#6379) 2025-07-29 15:30:07 -04:00
Hannes Rudolph
82a3212180
docs: update docs extractor mode configuration and rules (#6373) 2025-07-29 11:29:31 -06:00
github-actions[bot]
b117c0fe52
Changeset version bump (#6362)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-29 11:57:04 -04:00
github-actions[bot]
f955dc4aab
Update contributors list (#6302)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-07-29 11:54:21 -04:00
roomote[bot]
8c77ca1aed
fix: exclude rules-{slug} folder from mode export paths (#6186)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-29 11:53:57 -04:00
Matt Rubens
4a934f4407
chore: add changeset for v3.25.0 (#6358)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-29 11:52:57 -04:00
Daniel
d07fe6a17f
feat: make PR reviewer rules generic (#6357) 2025-07-29 11:33:19 -04:00
Christiaan Arnoldus
0ea81a19f6
Remove duplicated assignment (#6355) 2025-07-29 10:54:44 -04:00
Chris Hasson
c26752be17
fix(environment): Filter out non-text tab inputs (#6350)
Co-authored-by: Chris Hasson <noreply@example.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-29 10:14:11 -04:00
Chris Estreich
cc0f9e3604
Add .roomotes.yml (#6346) 2025-07-29 02:05:56 -07:00
Matt Rubens
00a3738d30
Better command highlighting (#6336) 2025-07-29 01:42:17 -04:00
Matt Rubens
e117208c29
Command argument hints and change release engineer to a command (#6333) 2025-07-29 00:42:28 -04:00
Matt Rubens
9baac07bf3
Ensure form-data >= 4.0.4 (#6332) 2025-07-28 23:41:55 -04:00
Sam Hoang Van
017622d3e3
feat(tools): add image support to read_file tool (#5172)
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-28 23:23:33 -04:00
roomote[bot]
93930643c6
feat: Add experimental setting to prevent editor focus disruption (#6214)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-28 23:14:53 -04:00
roomote[bot]
8b9303c015
feat: make task mode sticky to task (#6177)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: hannesrudolph <hrudolph@gmail.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-28 23:06:14 -04:00
roomote[bot]
e3a8e03905
feat: add ESC key handling for modes, API provider, and indexing settings popovers (#6175)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-28 23:04:23 -04:00
Matt Rubens
41aaf07861
Parse mentions from all user inputs (#6331) 2025-07-28 22:52:39 -04:00
Matt Rubens
e9561743a3
Support inserting mentions after a slash command (#6327)
* Support inserting mentions after a slash command

* Highlight slash commands
2025-07-28 20:58:00 -04:00
Daniel
cd26fc493f
feat: Update PR reviewer mode to use todo lists and GitHub CLI (#6328)
- Add todo list initialization and tracking throughout the review workflow
- Replace all MCP GitHub server calls with gh CLI commands
- Fix duplicate step numbering issue
- Update best practices and common mistakes documentation
- Add notes about GitHub CLI limitations for inline comments
2025-07-28 20:56:57 -04:00
Daniel
f90fc2fd5f
Restore PR reviewer (#6324)
Restore PR reviewer mode with updated rules structure
2025-07-28 19:21:14 -05:00
Matt Rubens
ddb9950776
Fix slash command highlighting (#6325) 2025-07-28 19:52:25 -04:00
roomote[bot]
7b756e391f
fix: empty README.vscode.md to test marketplace freezing issue (#6315)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-28 15:18:32 -06:00
Matt Rubens
182679d34c
Add support for slash command frontmatter descriptions (#6314) 2025-07-28 17:03:10 -04:00
Hannes Rudolph
03ce1e58a3
feat(mode-writer): add validation and cohesion checking for mode creation (#6313)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-28 16:45:42 -04:00
roomote[bot]
b27673e41f
fix: normalize Windows paths to forward slashes in mode export (#6308)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-28 16:41:00 -04:00
Hannes Rudolph
4effcecd83
Improve issue-writer mode initialization workflow (#6311) 2025-07-28 16:30:26 -04:00
Matt Rubens
785fcac625
Add a UI for managing slash commands (#6286)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-28 15:57:32 -04:00
Murilo Pires
a0018c9d04
feat: add prompt caching support for LiteLLM (#5791) (#6074)
* feat: add prompt caching support for LiteLLM (#5791)

- Add litellmUsePromptCache configuration option to provider settings
- Implement cache control headers in LiteLLM handler when enabled
- Add UI checkbox for enabling prompt caching (only shown for supported models)
- Track cache read/write tokens in usage data
- Add comprehensive test for prompt caching functionality
- Reuse existing translation keys for consistency across languages

This allows LiteLLM users to benefit from prompt caching with supported models
like Claude 3.7, reducing costs and improving response times.

* fix: improve LiteLLM prompt caching to work for multi-turn conversations

- Convert system message to structured format with cache_control
- Handle both string and array content types for user messages
- Apply cache_control to content items, not just message level
- Update tests to match new message structure

This ensures prompt caching works correctly for all messages in a conversation,
not just the initial system prompt and first user message.

* fix: resolve TypeScript linter error for cache_control property

Use type assertion to handle cache_control property that's not in OpenAI types
2025-07-28 12:56:06 -07:00
roomote[bot]
499d12ccc0
fix: remove demo GIF from VS Code README to prevent marketplace freezing (#6305)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-28 15:52:31 -04:00
roomote[bot]
1f3a107369
fix: hide Test ErrorBoundary button in production mode (#6216)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-28 14:46:05 -04:00
roomote[bot]
878b0bd8d8
Fix keyboard shortcuts for non-QWERTY layouts (#6162)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-28 14:45:35 -04:00
Hannes Rudolph
6c87ce8cd7
Revert "fix: optimize README for VS Code marketplace to prevent UI freezing" (#6303) 2025-07-28 14:31:01 -04:00
roomote[bot]
6a336c6de3
fix: optimize README for VS Code marketplace to prevent UI freezing (#6275)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-28 12:16:53 -06:00
Ton Hoang Nguyen (Bill)
342ee70fb4
Feat: Adding Gemini tools - URL Context and Grounding with Google Search (#5959)
* feat: Adding more settings and control over Gemini

- with topP, topK, maxOutputTokens
- allow users to enable URL context and Grounding Research

* feat: Adding parameter titles and descriptions + translation to all languages

* feat: adding more translations

* feat: adding `contextLimit` implementation from `maxContextWindow` PR + working with profile-specific thresholding

* feat: max value for context limit to model's limit + converting description and titles to settings for translation purposes

* feat: all languages translated

* feat: changing profile-specific threshold in context management setting will also change in Gemini context management

- sync between Context Management Settting <-> Gemini Context Management with regards to thresholding

* feat: max value of maxOutputTokens is model's maxTokens + adding more tests

* feat: improve unit tests and adding `data-testid` to slider and checkbox components

* fix: small changes in geminiContextManagement descriptions + minor fix

* fix: Switching from "Gemini Context Management" to "Token Management

- better naming and correct purpose

* fix: input field showed NaN -> annoying UX

* fix: Removing redundant "tokens" after the "set context limit"'s checkbox + removing the lengthy description

* fix: Changing the translation to be consistent with the english one

* fix: more translations

* fix: translations

* fix: removing contextLimit and token management related code

- due to the decision in: https://github.com/RooCodeInc/Roo-Code/issues/3717

* fix: removing `contextLimit` test and removing token management in translations

* fix: changing from `Advanced Features` to `Tools` to be consistent with Gemini docs/AI studio

* fix: adding `try-catch` block for `generateContentStream`

* feat: Include citations + improved type safety

* feat: adding citation for streams (generateContextStream)

* fix: set default values for `topP`, `topK` and `maxOutputTokens`

* fix: changing UI/UX according to the review/feedback from `daniel-lxs`

* fix: updating the `Gemini.spec.tsx` unit test

- testing when it is hidden
- testing when users click on the collapsible trigger and model configuration appears

* fix: more changes from the feedback/review from `daniel-lxs`

* fix: adding sources at the end of the stream to preserve

* fix: change the description for grounding with google search and url context

* fix: adding translations

* fix: removing redundant extra translations - a mistake made by the agent

* fix: remove duplicate translation keys in geminiSections and geminiParameters

- Fixed duplicate keys in 13 localization files (es, fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, tr, vi)
- Removed second occurrence of geminiSections and geminiParameters keys
- Kept first occurrence which contains more comprehensive descriptions
- All JSON files validated for syntax correctness
- Translation completeness verified with missing translations script

Resolves duplicate key issue identified in PR #4895

* fix: delete topK, topP and maxOutputTokens from Gemini

* fix: deleting topK, topP and maxOutputTokens from translations/locales

* fix: adjust spacing between labels and descriptions + sentence casing

* fix: adding maxOutputTokens back and removing unknown type

* fix: internalizing error Gemini error message

* fix: updating tests in Gemini and Vertex to adjust to the new error logging

* fix: address PR review feedback for Gemini tools feature

- Fix Hindi translation grammatical error in settings.json
- Internationalize 'Sources:' string and error messages in gemini.ts
- Add comprehensive error scenario tests to gemini-handler.spec.ts
- Remove unused currentModelId prop from Gemini component
- Update all locale files with new translation keys

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-27 14:34:55 -04:00
roomote[bot]
f546e6ed1d
feat: Add support for message queueing (#6167)
* feat: Add support for message queueing

* fix: address PR review feedback for message queueing feature

- Restore original ChatView tests from main branch
- Fix broken test by updating ChatTextArea mock
- Add comprehensive tests for message queueing (simplified due to mocking constraints)
- Fix race condition using useRef and setTimeout in queue processing
- Extract QueuedMessage interface to shared types.ts file
- Replace inline styles with Tailwind classes in QueuedMessages
- Add i18n support for 'Queued Messages:' text
- Add keyboard navigation for removing queued messages
- Add JSDoc for fromQueue parameter in handleSendMessage

* refactor: move QueuedMessage interface to packages/types

- Move QueuedMessage interface from local types.ts to packages/types/src/message.ts
- Update imports in ChatView.tsx and QueuedMessages.tsx to use @roo-code/types
- Remove local types.ts file to follow codebase conventions

* fix: add id field when creating queued messages

- Generate unique id using timestamp when adding messages to queue
- Fixes TypeScript error after moving QueuedMessage interface

* Stop disabling sending

* Translations

* Fix tests

* Improved styling

* Remove unused string

* Test cleanup

* fix: address message queueing issues

- Fix race condition in queue processing by re-checking queue state inside setTimeout
- Add error handling for queue operations with retry mechanism
- Replace array index with stable message.id for React keys in QueuedMessages
- Generate more unique IDs using timestamp + random component

* feat: add inline editing for queued messages

- Add ability to edit queued messages by clicking on them
- Support Enter to save and Escape to cancel edits
- Add textarea that auto-resizes based on content
- Add hover effect to indicate messages are editable
- Add translation for click to edit tooltip

* feat: add scrollbar and fix height for queued messages

- Add max-height of 300px with scrollbar to queue container
- Add flex-shrink-0 to prevent message items from being squished
- Ensure consistent height for message items when multiple messages are queued

* feat: add translations for queued message edit tooltip

- Add 'queuedMessages.clickToEdit' translation key to all 18 language files
- Provides localized tooltip text for the click-to-edit functionality

* fix: improve message queue processing reliability

- Fix race condition by removing nested setState and setTimeout
- Add retry limit (3 attempts) to prevent infinite loops
- Add proper cleanup on component unmount
- Clear queue when starting new task
- Prevent queue processing during API errors
- Fix ESLint warnings for React hooks dependencies

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-27 14:32:53 -04:00
Hannes Rudolph
b73c17a375
Update issue writer rules and workflow configurations (#6230) 2025-07-27 10:20:41 -06:00
Hannes Rudolph
7a6e852248
feat: sync API config selector style with mode selector from PR #6140 (#6148)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-27 01:15:10 -04:00
Hannes Rudolph
8625b451f4
feat: Add search functionality to mode selector popup and reorganize layout (#6140)
Co-authored-by: Roo Code Translate Mode
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-27 01:13:57 -04:00
Matt Rubens
5d4e3819e4
Support for custom slash commands (#6263) 2025-07-26 23:16:46 -04:00
Daniel
43f649b03f
fix: prevent scrollbar flickering in chat view during content streaming (#6266) 2025-07-26 22:55:12 -04:00
Daniel
623fa2a025
test: update list-files test for fixed hidden files bug (#6261)
test: update list-files test to reflect fixed hidden files bug
2025-07-26 21:15:34 -04:00
roomote[bot]
91c21a1bba
fix: add text wrapping to command patterns in Manage Command Permissions (#6255)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-26 18:41:02 -04:00
Murilo Pires
f530a71371
# fix: list_files recursive mode now works for dot directories (#5176)
* feat: add Issue Fixer Orchestrator mode

* The `list_files` tool with `recursive: true` was returning empty results when targeting directories that start with a dot (e.g., `.roo-memory`). This happened because the recursive mode was applying a blanket exclusion pattern `!**/.*//**` that excluded all files inside any hidden directory, even when the user explicitly requested to list that directory.

- `src/services/glob/list-files.ts`

- **Modified `buildRecursiveArgs()`**: Removed the problematic `!**/.*//**` exclusion pattern for hidden directories in recursive mode
- **Enhanced `listFilteredDirectories()`**: Added `isTargetDir` parameter to distinguish between explicitly targeted directories and discovered subdirectories
- **Updated `shouldIncludeDirectory()`**: Always include explicitly targeted directories (even if hidden), while still applying ignore rules to subdirectories found during traversal

- **Before**: `list_files` with `path: ".roo-memory"` and `recursive: true` → Empty results
- **After**: `list_files` with `path: ".roo-memory"` and `recursive: true` → Returns directory contents
- **Preserved**: Hidden subdirectories discovered during traversal are still filtered out

This maintains consistency with `.gitignore` and `.rooignore` mechanisms while ensuring explicitly targeted directories are always processed.

Fixes #2992

* Update src/services/glob/list-files.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* fix: list_files recursive mode now works correctly for hidden directories

- Fixed ripgrep exclusion pattern from `!**/.*//**` to `!**/.*/**`
- Hidden directories (like .git/) now appear in recursive listings but their contents are excluded
- Contents of hidden directories are only shown when explicitly targeting that directory
- Prevents context window overflow from massive hidden directories like .git/
- Maintains consistent behavior: show directory exists, avoid flooding with contents

Fixes #2992

* fix(glob): show top-level hidden directories in list_files

- Modified list-files.ts to show hidden directories at top level
- Added test coverage for hidden directory visibility behavior
- Maintains existing functionality while fixing the .roo directory issue

Addresses PR #5176 feedback with simplified implementation

* fix(glob): include top-level files when recursively listing ignored directories

- Fix issue where files at root level of directories in DIRS_TO_IGNORE were excluded
- Add explicit include patterns (* and **/*) when targeting ignored directories
- Modify exclusion pattern to use !*/dir/** instead of !**/dir/** for target directory
- Add comprehensive test case for .roo/temp scenario

Fixes #5176

* fix(list-files): improve handling of explicitly targeted ignored directories

- Fixed issue where recursive listing would skip files in explicitly targeted directories that are in DIRS_TO_IGNORE
- When targeting a directory like 'temp' that's in the ignore list, we now skip adding exclusion patterns for it
- This ensures all files in the target directory are listed while still preventing recursion into nested directories with the same ignored name
- Also fixed path resolution to convert relative paths from ripgrep to absolute paths

* fix(tests): add missing mocks for list-files tests

* refactor: improve list-files implementation

- Remove redundant path resolution in listFilesWithRipgrep
- Convert CRITICAL_IGNORE_PATTERNS to Set for better performance
- Standardize error message format across all console.warn calls

* fix: update tests to handle cross-platform path resolution

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-26 17:30:56 -05:00
Daniel
4d0550c855
fix: restore working settings link in command permissions tooltip (#6253)
- Replace broken command URI with onClick handler that posts message
- Command URIs don't work in webview context, must use postMessage
- Restores original working implementation from PR #5798
- Directs to autoApprove section where command permissions are configured

The bug was introduced in commit 77bc9e6f when the tooltip was updated
to use command URI instead of the working onClick pattern.
2025-07-26 18:21:53 -04:00
Daniel
478869e37a
feat: add markdown table rendering support (#6252) 2025-07-26 15:31:01 -05:00
github-actions[bot]
62160758fc
Changeset version bump (#6239)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-26 00:41:54 -04:00
Matt Rubens
daccdb365c
Kick off release (#6238) 2025-07-26 00:36:55 -04:00
github-actions[bot]
a1dbd1aac9
Update contributors list (#6110)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-07-26 00:30:11 -04:00
Matt Rubens
31fee35409
Delete .changeset/kind-horses-sniff.md 2025-07-26 00:26:39 -04:00
Matt Rubens
55d23e0d26
chore: add changeset for v3.24.0 (#6237) 2025-07-26 00:22:11 -04:00
Matt Rubens
97ec777e9c
Clean up some of the hugging face provider settings (#6236) 2025-07-25 23:36:25 -04:00
Daniel
0504199ce4
refactor: consolidate HuggingFace models API into providers/fetchers (#6228)
refactor: move HuggingFace models API to providers/fetchers

- Moved getHuggingFaceModels functionality from src/api/huggingface-models.ts to src/api/providers/fetchers/huggingface.ts
- Added getHuggingFaceModelsWithMetadata function to maintain the same API interface
- Updated import in webviewMessageHandler.ts to use the new location
- Deleted the now redundant src/api/huggingface-models.ts file

This consolidates all HuggingFace-related API logic into a single location within the providers/fetchers directory structure.
2025-07-25 20:39:18 -04:00
Daniel
440ec30d66
fix: add error message when no workspace folder is open for code indexing (#6227)
* fix: add error message when no workspace folder is open for code indexing

- Add 'Indexing requires an open workspace folder' error message in orchestrator.ts
- Replace hardcoded error string with translatable message using i18n
- Add translations for the error message in all 18 supported languages
- Ensures proper error handling when users attempt code indexing without a workspace

* fix: add workspace folder checks for code indexing operations

- Add null checks for codeIndexManager in webviewMessageHandler
- Show translated error message when no workspace folder is open
- Prevents crashes when users try to use indexing features without a workspace
- Uses existing translation key from orchestrator

* Update src/i18n/locales/ca/embeddings.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-25 20:14:35 -04:00
Thomas G. Lopes
31d16dcc33
Hugging Face provider: add more details (#6190)
* add more details

* format details better

* fix tests

* fix: address PR #6190 review feedback

- Move huggingface-models.ts to src/api/providers/fetchers/huggingface.ts
- Remove 'any' types and add proper TypeScript interfaces
- Add missing i18n keys and translations for all languages
- Replace magic numbers with named constants
- Add JSDoc documentation for HuggingFaceModel interface
- Improve error handling in API endpoint
- Update model capabilities display to match other providers
- Remove tool calling display (not used)
- Add comprehensive test coverage for new UI features

* fix: preserve HuggingFace provider details in model response

- Store raw HuggingFace models in cache to preserve provider information
- Export getCachedRawHuggingFaceModels to retrieve full model data
- Update huggingface-models.ts to return cached raw models when available
- Include provider name in model descriptions
- Always add provider-specific variants to show all available providers
- Remove console.log statements from fetcher

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-25 20:09:09 -04:00
Chris Hasson
912d795358
fix(chat): Cancel auto-approve timer when editing follow-up suggestion (#6226)
Co-authored-by: Chris Hasson <noreply@example.com>
2025-07-25 18:27:40 -04:00
Daniel
490538f9df
fix: prevent duplicate command patterns by trimming full command (#6224) 2025-07-25 17:49:23 -04:00
roomote[bot]
c61bd95bbe
fix: restore list styles for markdown lists in chat interface (#6095)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-25 16:51:45 -04:00
Hannes Rudolph
c68f8f591e
feat: Add terminal command permissions UI to chat interface (#5480) (#5798)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-25 16:49:51 -04:00
roomote[bot]
f45d9be709
fix: respect maxReadFileLine setting for file mentions to prevent context exhaustion (#6073)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-25 16:45:45 -04:00
John Richmond
d62a260576
Add support for bedrock api keys (#6132)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-25 01:04:49 -04:00
Nahim EL ATMANI
b1406342a8
Fix Ollama API URL normalization by removing trailing slashes (#6079)
Co-authored-by: Nahim El Atmani <2959826+Naam@users.noreply.github.com>
2025-07-25 00:41:35 -04:00
KJ7LNW
d54e3fcdfc
fix: allow auto-approve checkbox to be toggled at any time (#6061)
Co-authored-by: Eric Wheeler <roo-code@z.ewheeler.org>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-25 00:41:12 -04:00
KJ7LNW
25857a4809
feat: add efficiency warning for single SEARCH/REPLACE blocks in apply_diff (#6055)
Co-authored-by: Eric Wheeler <roo-code@z.ewheeler.org>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-25 00:40:43 -04:00
Matt Rubens
02118c5e7f
Add type for allowing org members to view all tasks (#6193) 2025-07-24 22:16:43 -04:00
Chris Estreich
7f70145cb1
Expose default modes in @roo-code/types (#6184) 2025-07-24 22:13:40 -04:00
roomote[bot]
2170c61e3c
feat: add Google Analytics tag to marketing website (#6179)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-24 14:18:03 -04:00
Daniel
a82455715c
fix: Fix Hugging Face provider setup not transitioning from welcome view (#6173)
fix: add Hugging Face API key to SECRET_STATE_KEYS and fix validation

- Added huggingFaceApiKey to SECRET_STATE_KEYS array to ensure it's properly handled as a secret
- Fixed validateModelsAndKeysProvided to check for huggingFaceModelId when validating Hugging Face provider
- This fixes the issue where the welcome view wouldn't transition to chat view after configuring Hugging Face
2025-07-24 11:06:53 -04:00
Hannes Rudolph
1e17b3b3bb
feat: add confirmation dialog and proper cleanup for marketplace mode removal (#6136)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-24 00:57:10 -04:00
roomote[bot]
3977bbc0ce
feat: add support for Agent Rules standard via AGENTS.md (#5966) (#5969)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-24 00:42:11 -04:00
Matt Rubens
d48be230a2
Update next.config.ts 2025-07-23 19:22:14 -04:00
Murilo Pires
c47de36b05
Fix/website logo theme persistence (#6040)
* feat: add Issue Fixer Orchestrator mode

* fix: persist logo theme state on page navigation and refresh

- Add mounted state to prevent hydration mismatch
- Use theme as fallback when resolvedTheme is not available
- Ensure logo matches the persisted theme on initial page load

Fixes issue where logo would revert to dark version after page refresh
even when light theme was selected
2025-07-23 16:41:02 -04:00
Matt Rubens
bcad858b2f
basic hugging face provider (#6134)
* basic hugging face provider

* fetch hf models and providers

* save provider to config

* Update translations

---------

Co-authored-by: Thomas G. Lopes <26071571+TGlide@users.noreply.github.com>
2025-07-23 15:19:23 -04:00
Hannes Rudolph
0323256006
feat: Add settings to control diagnostic messages (#5524) (#5582)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-23 14:49:41 -04:00
github-actions[bot]
d720d35483
Changeset version bump (#6131)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-23 13:56:21 -04:00
Matt Rubens
ba541ab848
chore: add changeset for v3.23.19 (#6130) 2025-07-23 13:53:26 -04:00
Bruno Bergher
4f8c9688a2
Roo Code Cloud Waitlist CTAs (#6104)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <me@brunobergher.comexport>
2025-07-23 13:28:30 -04:00
Matt Rubens
4042fb0fd0
Smarter auto-deny (#6123) 2025-07-23 12:02:31 -04:00
Matt Rubens
9d434c2db9
Split commands on newlines (#6121) 2025-07-23 11:21:06 -04:00
github-actions[bot]
714fafd328
Changeset version bump (#6111)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-23 09:07:14 -04:00
github-actions[bot]
637ba34958
Update contributors list (#5699)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-07-23 09:05:39 -04:00
Matt Rubens
a197c859f0
chore: add changeset for v3.23.18 (#6109) 2025-07-23 09:04:14 -04:00
KJ7LNW
3e89b06f25
debug: Add ErrorBoundary component for better error handling (#5085)
Co-authored-by: Eric Wheeler <roo-code@z.ewheeler.org>
2025-07-23 08:45:35 -04:00
Daniel
b0820ac755
fix: resolve 'Bad substitution' error in command parsing (#5743) 2025-07-23 08:43:36 -04:00
Christiaan Arnoldus
1c26bbc5ab
Fix todo list toggle not working (#6103) 2025-07-23 08:39:27 -04:00
Chris Estreich
9956cc1f48
Use SIGKILL for command execution timeouts in the "execa" variant (#6071) 2025-07-23 01:47:10 -07:00
github-actions[bot]
2411c8faa4
Changeset version bump (#6092)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-22 21:45:53 -04:00
roomote[bot]
dbc8119601
Release v3.23.17 (#6091)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-22 21:38:44 -04:00
Daniel
aa0e6d31d8
feat: add merge-resolver mode for intelligent conflict resolution (#6090) 2025-07-22 21:31:36 -04:00
Murilo Pires
0cb76d9ae9
fix: add Git installation check for checkpoints feature (#3109) (#5920)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-22 21:31:20 -04:00
roomote[bot]
8dcc078d85
feat: add Qwen/Qwen3-235B-A22B-Instruct-2507 model to Chutes AI provider (#6052)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-22 21:17:14 -04:00
Murilo Pires
c6a29f3f27
feat: add llama-4-maverick model to Vertex AI provider (#5808) (#6023)
* feat: add llama-4-maverick model to Vertex AI provider (#5808)

* fix: update llama-4-maverick pricing to correct values
2025-07-22 19:26:18 -04:00
Hannes Rudolph
2b8228ef0c
docs: clarify when to use update_todo_list tool (#5926)
* docs: clarify when to use update_todo_list tool

Added 'complicated' to the condition for when to use the update_todo_list tool,
making it clearer that the tool should be used for tasks that are either
complicated OR involve multiple steps.

* fix: update vscode mock and snapshots for update_todo_list tool changes

- Add missing RelativePattern export to vscode mock
- Fix onDidChangeWorkspaceFolders function in workspace mock
- Update test snapshots to reflect new "complicated" text in update_todo_list tool documentation
- Build tree-sitter WASM files to fix parsing tests

Fixes failing CI tests related to PR #5926 documentation changes.

* Delete package-lock.json

* revert: remove unrelated changes to src/__mocks__/vscode.js

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-22 17:37:27 -04:00
roomote[bot]
dbde23c84e
fix: add case sensitivity mention to suggested fixes in apply_diff error message (#6076)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-22 14:15:28 -07:00
roomote[bot]
5629199d51
Add jump icon for newly created files (#5738)
* feat: add jump icon for newly created files

- Add jump icon to newFileCreated tool case in ChatRow.tsx
- Matches existing pattern from readFile case for consistent UX
- Allows users to quickly open newly created files
- Fixes issue #5736

* fix: remove duplicate file path display in newFileCreated case

- Removed redundant ToolUseBlock that was showing file path twice
- Added onJumpToFile prop to CodeAccordian component to support jump icon
- Jump icon now appears in CodeAccordian header for newFileCreated files
- Maintains consistent UX with existing file operations while avoiding duplication

Fixes feedback from @daniel-lxs about duplicate elements being shown

* fix: address PR feedback for jump icon on new files

- Fix openFile message to use correct path format with './' prefix
- Remove duplicate chevron icon when jump icon is present
- Add aria-label for accessibility
- Fix styling: use mr-1 to match progressStatus icon
- Remove redundant margin style from jump icon

---------

Co-authored-by: Roo Code <roo@roocode.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-22 13:26:32 -04:00
Chris Estreich
984d368f7a
Fix evals; broken by #5865 (#6065) 2025-07-22 09:18:38 -07:00
John Richmond
e78d9541ca
Bugfix: Cloud: be more specific about session error codes (#6051)
InvalidClientTokenError indicates an unrecoverable state for
the session, so we need to be more exact about triggering it. A recent
Clerk outage resulted in a lot of 429 responses which should really cause
inactive-session, not a full clear to logged-out.
2025-07-22 07:16:15 -07:00
Matt Rubens
df6c57d293
feat: add moonshot provider (#6046)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: CellenLee <99465814+CellenLee@users.noreply.github.com>
2025-07-22 00:37:24 -04:00
roomote[bot]
b1bc085aa6
Add todo list tool enable checkbox to provider advanced settings (#6032)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-21 23:27:28 -04:00
Daniel
7e34fbcb0c
fix: add bedrock to ANTHROPIC_STYLE_PROVIDERS and restore vertex Claude model checking (#6019) 2025-07-21 22:27:20 -04:00
Matt Rubens
8334f0869f
Update the max_tokens fallback logic in the sliding window (#5993) 2025-07-21 22:26:39 -04:00
roomote[bot]
0500894b34
fix: sort symlinked rules files by symlink names, not target names (#5903)
* fix: sort symlinked rules files alphabetically

- Add alphabetical sorting to readTextFilesFromDirectory function
- Sort by basename of filename (case-insensitive) for consistent order
- Fixes issue where symlinked rules were read in random order
- Add test case to verify alphabetical sorting behavior

Fixes #4131

* chore: remove solution-indicating comment per PR feedback

* fix: sort symlinks by their symlink names, not target names

- Modified readTextFilesFromDirectory to store both original symlink path and resolved target path
- Updated resolveDirectoryEntry and resolveSymLink to track both paths
- Sort files by original path (symlink name) but read content from resolved path
- Added test to verify symlinks are sorted by their names, not their target names
- This ensures consistent alphabetical ordering when using symlinks in rules directories

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-21 19:37:42 -04:00
roomote[bot]
2eb586b422
fix: properly distinguish between user cancellations and API failures (#6025)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-21 11:16:38 -07:00
Hannes Rudolph
464a3ffa5f
fix: resolve global mode export not including rules files (#5834) (#5837)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-21 11:16:11 -07:00
KJ7LNW
9fce90be9d
fix: add run parameter to vitest command in rules (#5991)
When running vitest without the run parameter, it enters watch mode and waits for user input (like pressing q to quit), causing tests to hang in the terminal.

This change updates the documentation to specify using npx vitest run instead of just npx vitest to ensure tests run to completion without requiring user interaction.

Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
Co-authored-by: Eric Wheeler <roo-code@z.ewheeler.org>
2025-07-20 22:48:11 -04:00
roomote[bot]
cfda8392fb
feat: auto-omit MCP content when no servers are configured (#5889)
* feat: auto-omit MCP content when no servers are configured

- Modify system prompt generation to detect when no MCP servers are defined
- Only include MCP sections when mode has mcp group AND servers exist
- Pass undefined mcpHub to capabilities and tools when no servers available
- Reduces system prompt verbosity when MCP functionality is not in use

* fix: add missing Uri and RelativePattern exports to VSCode mocks

- Added Uri and RelativePattern exports to global VSCode mock in __mocks__/vscode.js
- Fixed McpHub.spec.ts VSCode mock to include Uri and RelativePattern
- Fixed Task.spec.ts VSCode mock to include Uri and RelativePattern with proper TypeScript typing
- Resolves unhandled rejection errors in unit tests caused by missing VSCode API mocks

* fix: add proper TypeScript typing for RelativePattern in McpHub test mock

* fix: resolve unit test failures in PR #5889

- Fix VSCode mock onDidChangeWorkspaceFolders to accept callback parameter
- Update MCP test mocks to properly test auto-omit functionality
- Update test snapshots to reflect new MCP content omission behavior
- All core functionality tests now passing

* chore: remove package-lock.json as project uses npm

* fix: remove unrelated mock changes from PR

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-20 15:25:26 -04:00
SannidhyaSah
de13d8a5cf
fix: move context condensing prompt to Prompts section (#4924) (#5279)
* feat: move context condensing prompt from context to prompts page

* fix: remove unused imports after lint fixes
2025-07-19 22:24:08 -04:00
roomote[bot]
c96b399dd7
feat: add configurable timeout for evals (5-10 min) (#5865)
* feat: add configurable timeout for evals (5-10 min)

- Add timeout field to CreateRun schema with min 5, max 10, default 5
- Add timeout slider UI component to /runs/new page
- Update database schema to include timeout column in runs table
- Create migration to add timeout column with default value of 5
- Update runTask.ts to use configurable timeout from run settings
- Pass timeout parameter through the createRun action

* fix: remove unused EVALS_TIMEOUT import

* fix: add timeout field to createRun calls in copyRun test

- Added timeout: 5 to both createRun calls in copyRun.spec.ts
- This fixes the test failure caused by the new required timeout field in the runs schema
- The timeout field was added in the configurable timeout feature but the test was not updated

* fix: use configurable timeout for Redis key expiration in registerRunner

- Updated registerRunner function to accept timeoutSeconds parameter
- Modified call in runTask.ts to pass configurable timeout instead of hardcoded EVALS_TIMEOUT
- Removed unused EVALS_TIMEOUT import from redis.ts
- Ensures Redis keys remain valid for the entire duration of task execution (up to 10 minutes)

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: hannesrudolph <hrudolph@gmail.com>
2025-07-19 22:20:23 -04:00
Murilo Pires
1b12108172
fix: enable export, share, and copy buttons during API operations (#5324) (#5849)
* feat: add Issue Fixer Orchestrator mode

* fix: allow export task history while API is active (#5324)

- Add exportAlwaysEnabled prop to TaskActions component
- Export button remains enabled when exportAlwaysEnabled is true
- Other action buttons still respect buttonsDisabled state
- Add tests to verify the new behavior

This fixes the regression where users couldn't export task history
during API operations, which is a common debugging workflow.

* fix: simplify export button to always be enabled

The export functionality is not impacted by the model streaming state,
so the button should always be enabled. Removed the unnecessary
exportAlwaysEnabled prop and simplified the implementation.

- Remove exportAlwaysEnabled prop from TaskActions
- Remove disabled attribute from export button entirely
- Update TaskHeader to remove exportAlwaysEnabled prop usage
- Update tests to reflect that export is always enabled

* fix: enable export, share, and copy buttons during API operations

- Export, share, and copy buttons now remain enabled when API is active
- Delete button still respects buttonsDisabled state for safety
- Removed unnecessary exportAlwaysEnabled prop
- Updated tests to reflect new behavior

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-19 19:25:17 -04:00
roomote[bot]
37300ef0c5
fix: add character limit to prevent terminal output context explosion (#5777)
* fix: add character limit to prevent terminal output context explosion

- Enhanced truncateOutput function to accept character limits alongside line limits
- Character limits take priority over line limits to prevent context window explosion
- Added terminalOutputCharacterLimit setting (default: 100,000 characters)
- Updated all terminal output processing to use both limits
- Added comprehensive tests for character limit functionality

Fixes #5775

* feat: add terminal output character limit setting to UI

- Add character limit slider to Terminal Settings UI (default: 50,000)
- Update ExtensionStateContext to manage character limit state
- Add validation for positive character limit values
- Add English translation and translations for all 17 supported languages
- Connect UI to backend through proper message handling
- Character limit takes precedence over line limit to prevent memory issues

* fix: update test expectations for character limit edge cases

- Fix multi-byte character test to account for JavaScript's string length behavior
- Fix newline content test to match actual slice behavior
- Tests now correctly validate the truncateOutput function's character limit handling

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-19 13:26:25 -04:00
SannidhyaSah
7ddc4e64f3
feat: Add Mistral embedding provider (#5932) (#5946)
* feat: add Mistral embedding provider with OpenAI Compatible Wrapper

- Implement MistralEmbedder class using OpenAI-compatible API
- Add comprehensive unit tests with 100% coverage
- Update type definitions for Mistral provider support
- Integrate Mistral option in UI components and configuration
- Add internationalization support for Mistral provider
- Fix API key storage and retrieval for embedding providers
- Update service factory to support Mistral embeddings
- Add proper error handling and validation

This implementation allows users to use Mistral's embedding models
through the existing OpenAI-compatible wrapper approach, providing
a seamless integration experience.

* feat: add Mistral embedding provider support

- Implement MistralEmbedder class with API integration
- Add Mistral models to embedding model configurations
- Update UI to include Mistral provider option
- Add comprehensive unit tests for Mistral embedder
- Update type definitions and interfaces
- Add internationalization support for Mistral provider

* fix: add missing translations for Mistral embedding provider

* fix: address PR review feedback - improve translations and add clarifying comment
2025-07-19 13:24:24 -04:00
github-actions[bot]
e2970265dd
Changeset version bump (#5953)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-19 11:58:06 -04:00
Matt Rubens
fe3a7ab0f0
Release v3.23.16 (#5952) 2025-07-19 11:55:18 -04:00
roomote[bot]
539b716b4f
feat: enhance release engineer mode to include issue numbers and reporters in changelog (#5940)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-19 11:42:59 -04:00
Daniel
cc369da2d5
feat: add batch limiting to code indexer (#5891)
feat: add batch limiting to code indexer to control memory usage

- Add MAX_PENDING_BATCHES constant (20) to limit concurrent batches
- Implement backpressure mechanism to pause file parsing when limit reached
- Prevent memory overflow during large codebase indexing
2025-07-19 09:37:37 -04:00
Daniel
020c2337dd
feat: add global rate limiting for OpenAI-compatible embeddings (#5854)
* feat: add global rate limiting for OpenAI-compatible embeddings

- Implement shared rate limit state across all embedder instances
- Add exponential backoff (5s base, up to 5 minutes max)
- Track consecutive rate limit errors with auto-reset after 60s
- Add thread-safe mutex for concurrent access
- Remove verbose logging to prevent log flooding during retries
- Add comprehensive test coverage for rate limiting behavior

This prevents multiple parallel batches from overwhelming APIs with
restrictive rate limits by coordinating delays globally.

* fix: restore original logging while keeping rate limit logging silent

- Restored all original console.warn and console.error calls that were inadvertently removed
- Only the rate limit retry warning remains silent (no console output)
- Fixed test expectation to use correct error variable
- All existing logging behavior is preserved
2025-07-19 09:37:01 -04:00
roomote[bot]
e28fad131a
feat: mark non-English translation files as linguist-generated (#5943)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-19 01:07:27 -04:00
roomote[bot]
5a459d0516
Fix Docker port conflicts for evals services (#5909)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-19 00:10:10 -04:00
github-actions[bot]
64d35dc357
Changeset version bump (#5935)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-18 20:21:26 -04:00
Matt Rubens
5ed73385c3
chore: add changeset for v3.23.15 patch release (#5934) 2025-07-18 20:15:21 -04:00
thill2323
f6906f6e87
Added YouTube to website footer (#5929) 2025-07-18 20:02:35 -04:00
roomote[bot]
90148401e9
Add command timeout allowlist with IPC support (#5910)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-18 16:48:39 -04:00
roomote[bot]
b6bded9818
feat: add configurable delay for Go diagnostics to prevent premature error reporting (#5863)
* feat: add configurable delay for Go diagnostics to prevent premature error reporting

- Add diagnosticsDelayMs setting (default: 2000ms) to allow linters time to process
- Add diagnosticsEnabled setting to optionally disable diagnostic checking entirely
- Update DiffViewProvider.saveChanges() to use configurable delay before checking diagnostics
- Update all tool files (writeToFile, searchAndReplace, insertContent, applyDiff, multiApplyDiff) to pass diagnostic settings
- Add comprehensive tests for new diagnostic functionality
- Fixes issue where Go diagnostics errors were submitted to LLM before linter could clean up unused imports

Resolves #5859

* fix: add missing TypeScript type definitions for diagnostic settings

- Add diagnosticsDelayMs and diagnosticsEnabled to globalSettingsSchema
- Include properties in ExtensionState Pick type
- Add default values to EVALS_SETTINGS
- Fix VSCode mock to include DiagnosticSeverity for tests
- Resolves compilation errors in ClineProvider and webviewMessageHandler

* fix: update test mocks to support diagnostic settings in tool tests

- Add providerRef mock to insertContentTool and writeToFileTool tests
- Update mocks to include diagnosticsEnabled and diagnosticsDelayMs settings
- Fix test expectations to match new implementation with diagnostic configuration
- Resolves failing unit tests for insertContentTool.spec.ts and writeToFileTool.spec.ts

* fix: remove package-lock.json file (project uses pnpm)

* refactor: use existing writeDelayMs instead of diagnosticsDelayMs

- Remove diagnosticsDelayMs setting in favor of existing writeDelayMs
- Add min(0) validation for writeDelayMs in global settings schema
- Add error handling around delay function calls in DiffViewProvider
- Create DEFAULT_WRITE_DELAY_MS constant (1000ms) to replace repeated defaults
- Update all tool files to pass writeDelayMs instead of diagnosticsDelayMs
- Remove diagnosticsDelayMs from webview message handlers and types
- Update test files to use writeDelayMs instead of diagnosticsDelayMs

This refactoring consolidates diagnostic delay functionality to use the
existing writeDelayMs setting as requested in PR feedback.

* fix: resolve failing unit tests and TypeScript compilation errors

- Fix DiffViewProvider test to expect correct default delay (1000ms instead of 2000ms)
- Fix TypeScript type errors in ClineProvider test mock state object
- Correct terminalPowershellCounter and terminalZdotdir types to boolean
- Fix pinnedApiConfigs type from array to Record<string, boolean>

* fix: remove unrelated changes from ClineProvider.spec.ts

- Removed extensive unrelated property additions to mock state
- Kept only diagnosticsEnabled property which is related to Go diagnostics delay feature
- Removed unused DEFAULT_WRITE_DELAY_MS import
- Restored original structure and organization of mock state object

This addresses the feedback to remove unrelated changes while preserving
the necessary diagnostic functionality for the Go diagnostics delay feature.

* refactor: move DEFAULT_WRITE_DELAY_MS to packages/types/src/global-settings.ts

- Move DEFAULT_WRITE_DELAY_MS constant from src/shared/constants.ts to packages/types/src/global-settings.ts
- Update all import statements in affected files to use @roo-code/types
- Delete src/shared/constants.ts file as it is no longer needed
- Files updated:
  - src/integrations/editor/DiffViewProvider.ts
  - src/core/webview/ClineProvider.ts
  - src/core/tools/multiApplyDiffTool.ts
  - src/core/tools/applyDiffTool.ts
  - src/core/tools/searchAndReplaceTool.ts
  - src/core/tools/insertContentTool.ts
  - src/core/tools/writeToFileTool.ts

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-18 16:12:00 -04:00
Hannes Rudolph
8c349767fa
feat: Add Issue Investigator mode and enhance Issue Writer mode (#5913) 2025-07-18 14:43:14 -04:00
Matt Rubens
a6e16e80d9
Prevent completion with open todos (#5716)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-18 11:31:31 -04:00
roomote[bot]
38d8edf05a
feat: move marketplace icon from overflow menu to top navigation (#5864)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-07-17 22:05:49 -04:00
Randal L. Schwartz
670d79be62
feat: Add description and whenToUse fields to custom modes in .roomodes (#5862) 2025-07-17 20:38:44 -04:00
Daniel
a28d50e20c
fix: detect Claude models by name for API protocol selection (#5840)
* fix: detect Claude models by name for API protocol selection

- Modified getApiProtocol to accept modelId parameter
- Added check for 'claude' in model name (case-insensitive)
- Updated Task.ts to pass model ID to getApiProtocol
- Added comprehensive tests for the new logic

Fixes #5830

* fix: limit Claude model detection to vertex and bedrock providers only

- Modified getApiProtocol to only detect Claude models by name when provider is vertex or bedrock
- Added comprehensive unit tests for getApiProtocol function as requested in PR review
- This ensures Claude models are only auto-detected for providers that need it
2025-07-17 18:27:52 -04:00
Murilo Pires
a7771a3c11
Fix/issue fixer pr template (#5839) 2025-07-17 16:03:24 -04:00
github-actions[bot]
2f4d833ebc
Changeset version bump (#5836)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-07-17 11:53:04 -07:00
Chris Estreich
921d7ca6c4
Log API-initiated tasks to a tmp directory (#5833) 2025-07-17 11:47:21 -07:00
Hannes Rudolph
d2b51c1b41
refactor: remove orchestrator modes and update GitHub CLI usage (#5832) 2025-07-17 14:28:09 -04:00
github-actions[bot]
88f1af2ebe
Changeset version bump (#5829)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-07-17 11:01:01 -07:00
Chris Estreich
4b1c9021d6
v3.23.13 (#5827) 2025-07-17 10:46:55 -07:00
Chris Estreich
80fcd1ba74
Allow command execution timeout to be set via IPC task execution (#5825)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-17 10:41:40 -07:00
Daniel
c417f43b18
feat: Update Ollama UI to use text inputs (#5818) 2025-07-17 13:40:05 -04:00
Will Li
fb374b3e94
Message edit/delete overhaul (#5538)
* improved chat row first pass

* big UI improvements

* working functionality

* tests working

* ok finally tests working for real!

* translations

* add back hidden flag

* remove option to skip notif

* fixed image issue

* ui fix

* put back edit flag

* oops test fix

* reduce margins

* code review
2025-07-17 10:16:57 -04:00
Hannes Rudolph
6cf376f832
fix: Resolve confusing auto-approve checkbox states (#5602)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-16 17:52:29 -04:00
Daniel
2458751424
fix: prevent empty mode names from being saved (#5766) (#5794) 2025-07-16 17:50:14 -04:00
Christiaan Arnoldus
a92ee567df
Format time in ISO 8601 (#5793) 2025-07-16 15:58:11 -04:00
Daniel
a7a6bcb30f
fix: resolve DirectoryScanner memory leak and improve file limit handling (#5785) 2025-07-16 15:06:26 -04:00
Matt Rubens
0f994fcf22
Fix settings dirty check (#5779) 2025-07-16 10:57:34 -04:00
Daniel
8c8888a977
feat: increase Ollama API timeout values and extract as constants (#5778)
- Increase embedding request timeout from 10s to 60s
- Increase validation request timeouts from 5s to 30s
- Extract timeout values as module-level constants for better maintainability
- OLLAMA_EMBEDDING_TIMEOUT_MS = 60000 (60 seconds)
- OLLAMA_VALIDATION_TIMEOUT_MS = 30000 (30 seconds)
2025-07-16 09:30:33 -04:00
Murilo Pires
d513b9c0e1
fix: Exclude Terraform and Terragrunt cache directories from checkpoints (#4601) (#5750)
* feat: add Issue Fixer Orchestrator mode

* fix: Exclude Terraform and Terragrunt cache directories from checkpoints (#4601)
2025-07-15 19:50:55 -04:00
Matt Rubens
db718533c6
Move less commonly used provider settings into an advanced dropdown (#5762) 2025-07-15 19:00:14 -04:00
Murilo Pires
93f88b45b6
feat: Add configurable error & repetition limit with unified control (#5654) (#5752)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-15 18:25:43 -04:00
axb
5557d77a96
list-files must include at least the first-level directory contents (#5303)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-15 17:34:03 -04:00
Chris Estreich
b75377416a
Update evals repo link (#5758) 2025-07-15 13:00:50 -07:00
flameboy
9db64de363
Feature/vertex ai model name conversion (#5728)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-15 14:15:33 -04:00
ChuKhaLi
9b6fb36d6f
fix(litellm): handle baseurl with paths correctly (#5697)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-15 14:14:16 -04:00
Matt Rubens
d0452d0d5c
Add telemetry for todos (#5746) 2025-07-15 10:47:50 -04:00
roomote[bot]
ab1756961c
feat: add undo functionality for enhance prompt feature (fixes #5741) (#5742)
Co-authored-by: Roo <roo@roocode.dev>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-15 10:26:34 -04:00
roomote[bot]
29b7d06dd2
Fix max_tokens limit for moonshotai/kimi-k2-instruct on Groq (#5740)
Co-authored-by: Roo Code Bot <roo-code-bot@example.com>
2025-07-15 08:56:46 -04:00
github-actions[bot]
5d1270a1fe
Changeset version bump (#5735)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-15 08:20:17 -04:00
Matt Rubens
fdd1139c2b
Add changeset for v3.23.12 patch release (#5734) 2025-07-15 08:17:24 -04:00
Matt Rubens
8a3dcfb593
Update the max-token calculation in model-params to use the shared logic (#5720) 2025-07-15 02:20:22 -04:00
github-actions[bot]
301977b2dc
Changeset version bump (#5719)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-15 00:37:59 -04:00
Matt Rubens
bc0a98bc5d
chore: add changeset for v3.23.11 patch release (#5718) 2025-07-15 00:35:05 -04:00
Matt Rubens
5762964b56
Add Kimi K2 model and better support (#5717) 2025-07-15 00:31:18 -04:00
Roomote Agent
36d56e8db9
Fix: Remove invalid skip-checkout parameter from GitHub Actions workflows (#5676)
fix: remove invalid skip-checkout parameter from GitHub Actions workflows

- Removed skip-checkout parameter from nightly-publish.yml
- Removed skip-checkout parameter from marketplace-publish.yml
- Removed skip-checkout parameter from changeset-release.yml

The setup-node-pnpm action only accepts: node-version, pnpm-version, skip-install, and install-args.
The skip-checkout parameter was causing warnings in workflow runs.

Fixes #5674
2025-07-14 20:58:13 -04:00
Roomote Agent
8f5c130e21
feat: add Cmd+Shift+. keyboard shortcut for previous mode switching (#5695)
* feat: add Cmd+Shift+. keyboard shortcut for previous mode switching

- Add switchToPreviousMode function that cycles backwards through modes array
- Update handleKeyDown to detect Cmd+Shift+. keyboard combination
- Update modeShortcutText to display both next and previous mode shortcuts
- Add forPreviousMode translation key to all 18 language files
- Implements backwards mode cycling using modulo arithmetic for proper array wrapping

Fixes #5692

* fix: correct keyboard shortcut detection for Cmd+Shift+. (previous mode)

When Shift is pressed with the period key, event.key becomes ">" instead of ".".
Fixed line 1576 to check for event.key === ">" for proper Cmd+Shift+. detection.

Fixes keyboard shortcut issue reported in PR comment.

* fix: use event.code for cross-platform keyboard shortcut compatibility

- Replace event.key checks with event.code === "Period" for both shortcuts
- Fixes keyboard layout compatibility issue where Shift+Period produces different characters on non-US layouts
- Consolidates both shortcuts into a single conditional block for better maintainability
- Addresses feedback from @daniel-lxs in PR #5695
2025-07-14 20:44:45 -04:00
github-actions[bot]
88c4261829
Changeset version bump (#5708)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-14 16:45:39 -04:00
Matt Rubens
adb3a7bbae
chore: add changeset for v3.23.10 patch release (#5707) 2025-07-14 16:38:54 -04:00
Matt Rubens
1a24cd60f9
Add padding to the index model options (#5706) 2025-07-14 16:35:45 -04:00
Daniel
5cab585eb3
fix: prioritize built-in model dimensions over custom dimensions (#5705) 2025-07-14 16:20:34 -04:00
Matt Rubens
0c014f0028
Update CHANGELOG.md 2025-07-14 15:03:35 -04:00
github-actions[bot]
6702871c4e
Changeset version bump (#5702)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-14 14:52:28 -04:00
Matt Rubens
e7b90a8c5b
chore: add changeset for v3.23.9 patch release (#5701) 2025-07-14 14:44:46 -04:00
Matt Rubens
1187a7c50e
Tweaks to command timeout error (#5700) 2025-07-14 14:38:01 -04:00
github-actions[bot]
98fe2a1220
Update contributors list (#5639)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-07-14 14:12:59 -04:00
SannidhyaSah
824c49487b
feat: enable Claude Code provider to run natively on Windows (#5615) 2025-07-14 14:12:39 -04:00
Roomote Bot
e0196320b5
feat: Add configurable timeout for command execution (#5668)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-14 14:12:12 -04:00
Daniel
d7787a2de3
feat: add gemini-embedding-001 model to code-index service (#5698)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-14 14:10:40 -04:00
Roomote Bot
f71275ef55
fix: resolve vector dimension mismatch error when switching embedding models (#5616) (#5617)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-14 14:10:09 -04:00
chris-garrett
a163053430
fix: [5424] return the cwd in the exec tool's response so that the model is not lost after subsequent calls (#5667) 2025-07-13 22:36:25 -04:00
github-actions[bot]
62f97b917a
Changeset version bump (#5670)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-13 14:51:05 -04:00
Matt Rubens
1ca7a64170
chore: add changeset for v3.23.8 patch release (#5669) 2025-07-13 14:46:38 -04:00
Matt Rubens
e84dd0a2cf
Skip all MCP CI tests (#5645) 2025-07-12 22:23:28 -04:00
Matt Rubens
5fab8521cd
More tweaks to chatview layout (#5643) 2025-07-12 20:05:18 -04:00
Matt Rubens
10f3e30126
Remove duplicate PR link in issue fixer workflow (#5638) 2025-07-12 15:38:04 -04:00
Matt Rubens
14473ea1e9
Updated string for denied command (#5637) 2025-07-12 15:02:15 -04:00
Matt Rubens
b4874f2aa2
Bump types to 1.32.0 (#5636) 2025-07-12 14:29:37 -04:00
Roomote Bot
2220a2d2ba
Add navigation link to history tab in HistoryPreview (#5630)
* feat: add navigation link to history tab in HistoryPreview

- Add 'View all history' link at bottom of history preview
- Include internationalization support with new translation key
- Use consistent styling with VSCode theme colors
- Navigate to history tab using switchTab message format

* feat: add viewAllHistory translation to all language files

* Tweaks and translations

* Fix test

---------

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-12 13:47:13 -04:00
Daniel
5bffebde58
feat: add enable/disable toggle for code indexing (#5599) 2025-07-12 12:55:50 -04:00
Matt Rubens
cdacdfd54b
Add a command denylist (#5614)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-12 12:36:04 -04:00
Daniel
84bfd76924
test: disable flaky MCP directory_tree test (#5627)
The test 'Should request MCP filesystem directory_tree tool and complete successfully' has been timing out after 45s in CI. Disabling it temporarily to unblock the test suite while we investigate the root cause.
2025-07-12 10:38:55 -05:00
github-actions[bot]
50e45a2bc6
Changeset version bump (#5613)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-11 23:43:52 -04:00
github-actions[bot]
1c60ec6ea8
Update contributors list (#5498)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-07-11 23:40:46 -04:00
Matt Rubens
65df6723a2
chore: prepare v3.23.7 patch release (#5612) 2025-07-11 23:39:22 -04:00
Daniel
32308d79c4
feat: add comprehensive error telemetry to code-index service (#5595) 2025-07-11 23:01:50 -04:00
Hannes Rudolph
39b83070c3
feat: Enable dynamic tool selection in architect mode for context discovery (#5607)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-11 22:47:45 -04:00
Hannes Rudolph
f5dfbf1fc2
feat(claude-code): add configurable max output tokens setting (#5610)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-11 22:31:50 -04:00
Murilo Pires
9aa2e6ea54
Fix/issue 2897 mermaid syntax warning (#5530) 2025-07-11 17:46:38 -04:00
Daniel
0ecae9d4f1
fix: exclude cache tokens from context window calculation (#5603)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-11 16:54:51 -04:00
Chris Estreich
99448fc913
Minor fixes for local (non-Docker) evals (#5604)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-11 12:15:21 -07:00
Matt Rubens
b03d03d860
Add Devstral Medium (#5590) 2025-07-11 09:33:24 -04:00
Matt Rubens
f7b8345e19
Link to marketplace from modes and MCP tab (#5580) 2025-07-11 01:05:32 -04:00
sensei-woo
406b366f4a
Update ChatTextArea.tsx (#5586)
* Update ChatTextArea.tsx

fix issue 5583

* refactor(ui): move TTS stop button to bottom control bar

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-10 20:00:31 -04:00
Daniel
50598b22b5
fix(i18n): Correct translation fallback logic for embedding errors (#5574)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-10 15:47:47 -04:00
Matt Rubens
76a3fdc256
Clean up MCP tool disabling (#5576) 2025-07-10 14:36:09 -04:00
Matt Rubens
6fa918c275
Improve the display of codebase search results (#5571) 2025-07-10 12:30:06 -04:00
Noritaka Kobayashi
ab55854702
chore: fix typos in comment & document (#5569) 2025-07-10 11:33:26 -04:00
Daniel
97b917eac8
fix: handle Qdrant vector dimension mismatch when switching embedding models (#5562) (#5565) 2025-07-10 11:29:25 -04:00
Matt Rubens
356d421344
Run nightly build on push (#5563) 2025-07-10 10:12:16 -04:00
Matt Rubens
a7b5cbd722
Soften the language for incompatible profiles (#5561) 2025-07-10 09:47:47 -04:00
shubhamgupta731
4771864a8c
Expand Vertex AI region config to include all available regions in GCP Vertex AI (#5557)
Co-authored-by: Shubham Gupta <shubham@porter.in>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-10 09:27:28 -04:00
github-actions[bot]
5cfd98dc33
Changeset version bump (#5560)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-10 07:10:05 -04:00
Matt Rubens
cdde7b3aa8
Grok 4 (#5559) 2025-07-10 07:07:16 -04:00
Will Li
08c9420350
fix (#5540) 2025-07-09 20:57:10 -04:00
github-actions[bot]
6e473f5449
Changeset version bump (#5537)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-09 19:39:48 -04:00
Matt Rubens
e64fb150b5
chore: add changeset for v3.23.5 patch release (#5536) 2025-07-09 19:31:50 -04:00
Daniel
45f3d88ddf
fix(embeddings): Translate error messages before sending to UI (#5535)
fix(embeddings): translate error messages before sending to UI

- Import t() function from i18n module
- Wrap error messages with t() translation function in _initializeEmbedder()
- Ensures proper localization of error messages in the UI
- Falls back to original message if no translation exists
2025-07-09 19:22:05 -04:00
Matt Rubens
be1eaa51eb
Make account tab visible (#5534)
* Make account tab visible

* Fix order
2025-07-09 19:21:47 -04:00
Vivek Soni
7a8848de3b
fix: use decodeURIComponent in openFile (#5504)
* fix: use decodeURIComponent in openFile

* feat: add error handling for decodeURIComponent and tests

- Added try-catch block around decodeURIComponent to handle invalid escape sequences
- Falls back to original path if decoding fails
- Added comprehensive unit tests for the openFile function
- Tests cover invalid URI encoding, valid encoding, and various edge cases

* fix: update test to handle dynamic workspace paths in CI

* fix: handle Windows path separators in open-file tests

---------

Co-authored-by: Vivek Soni <vivex@Viveks-MacBook-Air-2.local>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-09 19:08:35 -04:00
github-actions[bot]
5f0860798e
Changeset version bump (#5531)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
2025-07-09 15:01:52 -07:00
Chris Estreich
ffb998bb11
v3.23.4 (#5529) 2025-07-09 14:41:24 -07:00
Daniel
dd00fc8a0f
feat: Replace title attributes with StandardTooltip in ChatTextArea (#5528)
feat: Replace title attributes with StandardTooltip in ChatTextArea buttons

- Added StandardTooltip wrapper for Stop TTS button
- Replaced title attributes with StandardTooltip for Enhance Prompt button
- Replaced title attributes with StandardTooltip for Send Message button
- Replaced title attributes with StandardTooltip for Add Images button

Note: The stopTts translation key needs to be added to the localization files
2025-07-09 16:24:53 -05:00
Matt Rubens
8824a719eb
Fix nightly build again (#5527) 2025-07-09 16:50:29 -04:00
Daniel
12ae900660
fix: handle null/empty custom modes files to prevent 'Cannot read properties of null' error (#5526)
* fix: handle null/empty custom modes files to prevent 'Cannot read properties of null' error

- Fix SimpleInstaller to ensure existingData is always an object after yaml.parse
- Fix CustomModesManager.parseYamlSafely to return empty object instead of null
- Ensure customModes array is always initialized in both install and remove operations
- Add tests for empty/null file handling scenarios
- Update existing tests to match correct behavior

* fix: handle null/undefined settings in updateModesInFile and loadModesFromFile

- Ensure settings object exists before accessing customModes property
- Initialize customModes as empty array if undefined
- Prevent 'Cannot read properties of null' error during mode import
- Add proper validation in loadModesFromFile before schema check
2025-07-09 15:49:32 -05:00
Matt Rubens
c6412b4339
Add modes to the overflow menu (#5525) 2025-07-09 16:27:55 -04:00
dlab-anton
76b13dfd7a
feat ui/ux: overflow button in header actions (#3060)
Co-authored-by: hannesrudolph <hrudolph@gmail.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-09 16:07:18 -04:00
Matt Rubens
dfcba654a6
Tweak alignment of indexing dot (#5523) 2025-07-09 16:03:20 -04:00
Roomote Bot
a732f18ea5
fix: respect .gitignore patterns for directories in list_files tool (#5393) (#5394)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-09 16:02:56 -04:00
Matt Rubens
2b7c266546
Update icons in chattextarea (#5520)
* Update icons in chattextarea

* fix: update icons in ChatTextArea and IndexingStatusBadge components

* fix: update Camera icon to Image and fix alignment

- Changed Camera icon to Image icon from lucide-react
- Fixed alignment issue by adjusting gap and removing extra margin
- Updated tests to work with new Lucide icon structure

* fix: revert alignment changes for Image icon

- Keep original alignment with gap-0.5 and mr-1 to match send and enhance buttons

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-09 15:03:04 -04:00
github-actions[bot]
fed603a927
Changeset version bump (#5511)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-09 10:21:10 -04:00
Matt Rubens
d040112a93
Remove feature3 from announcement (#5510) 2025-07-09 10:15:17 -04:00
github-actions[bot]
a201a70a68
Changeset version bump (#5509)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-09 09:57:36 -04:00
Daniel
58cacc3cf0
fix: reset user response flag on new ask messages to fix auto-approval (#5508)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-09 09:54:26 -04:00
github-actions[bot]
0e0da80f88
Changeset version bump (#5506)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-09 08:14:35 -04:00
Matt Rubens
e028d68f57
Always show the code indexing dot (#5505) 2025-07-09 08:11:40 -04:00
github-actions[bot]
e022b1de7d
Changeset version bump (#5500)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-09 00:16:16 -04:00
Matt Rubens
8bc73bcaca
Remove changeset that is preventing release (#5499) 2025-07-09 00:12:23 -04:00
Matt Rubens
7fe1c0f47a
feat: prepare v3.23.0 release (#5497) 2025-07-09 00:05:23 -04:00
Roomote Bot
9b0f3b2435
feat: add User-Agent header to API providers (#5492) 2025-07-08 23:19:56 -04:00
Murilo Pires
fa60a31578
Indexing field validation (#5483)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-08 23:15:37 -04:00
Ruakij
a2815e2026
Fix #3652: Allow insertContentTool to create new files with content (#4382)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-08 23:14:28 -04:00
Hannes Rudolph
0028c56711
fix: strengthen codebase_search enforcement throughout conversations (#5486) 2025-07-08 23:12:53 -04:00
Matt Rubens
f59e837bb0
Hide message editing temporarily (#5494) 2025-07-08 23:11:39 -04:00
github-actions[bot]
f232476f9b
Update contributors list (#5374)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-07-08 23:09:36 -04:00
Daniel
09e348e21c
Move codebase indexing out of experimental (#5481) 2025-07-08 23:07:36 -04:00
Daniel
cb4652e45e
fix: remove flaky SearchableSelect clear button test (#5489)
- Removed test 'clears search value when clicking the clear button'
- Test was failing in full test suite due to timing/isolation issues
- Component functionality is verified to work correctly
- All tests now pass (540 passed, 1 skipped)
2025-07-08 20:38:15 -04:00
Hannes Rudolph
2a3e40e3f6
update internal orchestrator modes definitions to remove tool access (#5487)
Reorder and update orchestrator mode definitions

Moved the 'issue-fixer-orchestrator' mode below 'pr-fixer-orchestrator' and updated their 'groups' fields to empty lists for consistency. No functional changes to mode logic.
2025-07-08 20:37:37 -04:00
Will Li
15586d3846
Fixed auto question timer unmount (#5368)
* fixed bug

* expanded tests and made better mock

* code review: refactor & race conditions

* code review, some refactor and reset timer on task switch

* rename to onCancelAutoApproval
2025-07-08 20:19:22 -04:00
Will Li
917b2cc882
Simplify edit panel (#5488)
fix
2025-07-08 20:11:04 -04:00
Matt Rubens
15f3876940
Bump types to 1.31.0 (#5484) 2025-07-08 19:20:38 -04:00
gongzhongqiang
8c1aec1912
Add Search/Filter Functionality to API Provider Selection in Settings (#5278)
* Enhance provider selection with search functionality

* fix: add SearchableSelect mock to SettingsView.spec.tsx

- Added SearchableSelect to the @/components/ui mock in SettingsView.spec.tsx
- This resolves test failures after the SearchableSelect component was introduced
- All 497 tests now pass successfully

* test: add comprehensive tests for SearchableSelect component

* feat: address PR feedback

* fix: internationalize SearchableSelect placeholder in test mock

- Replace hardcoded 'Select...' with i18n key 'settings:common.select'
- Ensures consistency with actual component usage
- Addresses PR review feedback

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-08 19:16:56 -04:00
Matt Rubens
83da295fb1
Fix auto-approve todo settings (#5482) 2025-07-08 18:48:59 -04:00
Roomote Bot
3289322734
fix: enforce file restrictions for all edit tools in architect mode (#5445) (#5447) 2025-07-08 16:49:25 -04:00
Murilo Pires
26c2fbbc07
fix: improve chat UI - add camera icon margin and make placeholder no… (#5477)
fix: improve chat UI - add camera icon margin and make placeholder non-selectable
2025-07-08 17:28:12 -03:00
Matt Rubens
a5324268dc
Remove unnecessary useEffect from sharebutton (#5476) 2025-07-08 16:01:39 -04:00
Matt Rubens
d116dbf0f1
Only show share modal from sharebutton (#5475) 2025-07-08 15:49:23 -04:00
Roomote Bot
e9dca0acb9
Mark test snapshot files as linguist-generated (#5474)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-08 15:33:03 -04:00
Murilo Pires
150d71256f
Chat index UI enhancements (#5451)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-08 13:19:02 -06:00
Daniel
c551e17327
refactor: remove legacy codebaseIndexOpenAiCompatibleModelDimension property (#5459) 2025-07-08 14:43:03 -04:00
Matt Rubens
0606c56bf1
Make the default architect prompt create a todo list (#5472) 2025-07-08 13:59:48 -04:00
Matt Rubens
32ce45d8bc
Add a hint about using todos for complicated tasks (#5473) 2025-07-08 13:45:38 -04:00
Matt Rubens
6ab57fae43
Remove modifier checks from prompt history navigation (#5467) 2025-07-08 11:19:46 -04:00
Will Li
a9a87c2e0f
Make the prompts editable now (#5359) 2025-07-08 10:42:16 -04:00
bbenshalom
edce187c03
fix typescript compiler watch path inconsistency (#5155) 2025-07-08 10:40:01 -04:00
Matt Rubens
08a0c897ef
Remove warning about writing not being allowed (#5461) 2025-07-07 23:55:29 -04:00
Hannes Rudolph
d4abe73875
fix: add embedder validation to prevent misleading status indicators (#4398) (#5404)
* fix: add embedder validation to prevent misleading status indicators (#4398)

* fix: address PR feedback and fix critical issues

- Fixed settings-save flow to save before validation
- Fixed Error constructor usage in scanner.ts
- Fixed segment identification in file-watcher.ts
- Added missing translation keys for embedder validation errors

* fix: add missing Ollama translation keys

- Added missing ollama.title, description, and settings keys
- Fixed translation check failure in CI/CD pipeline
- Synchronized all 17 non-English locale files

* feat: add proactive embedder validation on provider switch

- Validate embedder connection when switching providers
- Prevent misleading 'Indexed' status when embedder is unavailable
- Show immediate error feedback for invalid configurations
- Add comprehensive test coverage for validation flow

This ensures users get immediate feedback when configuring embedders,
preventing confusion when providers like Ollama are not accessible.

* fix: improve error handling and validation in code indexing process

* refactor: extract common embedder validation and error handling logic

- Created shared/validation-helpers.ts with centralized error handling utilities
- Refactored OpenAI, OpenAI-Compatible, and Ollama embedders to use shared helpers
- Eliminated duplicate error handling code across embedders
- Improved maintainability and consistency of error handling
- Fixed test compatibility in manager.spec.ts
- All 2721 tests passing

* refactor: simplify validation helpers by removing unnecessary wrapper functions

- Removed getErrorMessageForConnectionError and inlined logic into handleValidationError
- Removed isRateLimitError, logRateLimitRetry, and logEmbeddingError wrapper functions
- Updated openai.ts and openai-compatible.ts to inline rate limit checking and logging
- Reduced code complexity while maintaining all functionality
- All 311 tests continue to pass

* fix: add missing invalidResponse i18n key and fix French translation

- Added missing 'invalidResponse' key to all locale files
- Fixed French translation: changed 'and accessible' to 'et accessible'
- Ensures proper error messages are displayed when embedder returns invalid responses

* fix: restore removed score settings in webviewMessageHandler

- Restored codebaseIndexSearchMaxResults and codebaseIndexSearchMinScore settings that were unintentionally removed
- Keep embedder validation related changes

* fix: revert unintended changes to file-watcher and scanner

- Reverted point ID generation back to using line numbers instead of segmentHash
- Restored { cause: deleteError } parameter in scanner error handling
- These changes were unrelated to the embedder validation feature

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-07 18:46:35 -04:00
axb
7645aad435
add todo tool (#5182)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-07 14:07:39 -04:00
Murilo Pires
6ec017ca65
fix: correct export/import of OpenAI Compatible codebase indexing set… (#5383) 2025-07-07 11:53:33 -04:00
Kevin van Dijk
36b3cdc833
Fix model search being prefilled on dropdown (#5449) 2025-07-07 11:48:49 -04:00
Hannes Rudolph
7d31966978
fix: resolve workspace path inconsistency in code indexing for multi-workspace scenarios (#4397) (#5403)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-07 11:29:57 -04:00
John Richmond
ad201cc058
Cloud: support static cloud settings (#5435)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-06 23:21:52 -04:00
Roomote
25be23354a
Add description field to create_mode instructions (#5433)
* Add description field to create_mode instructions

- Include description field in optional but recommended fields list
- Add description field to YAML example with clear guidance
- Description field already exists in ModeConfig schema but was missing from instructions
- Provides short, human-readable description of what the mode does (1-2 sentences)

* Update description field guidance to 5 words instead of 1-2 sentences

- Changed description field guidance from '1-2 sentences' to '5 words'
- Updated YAML example to show concise 5-word description
- Addresses feedback from @mrubens in PR comment #3041823916
2025-07-06 11:00:29 -04:00
Roomote
8f216c3f88
Fix new_task tool streaming issue (#5432) 2025-07-06 09:17:18 -04:00
Shariq Riaz
9faf28acac
fix: use actual max_completion_tokens from OpenRouter API (#5240)
- Update parseOpenRouterModel to always use actual max_completion_tokens from OpenRouter API
- Remove artificial restriction that only reasoning budget and Anthropic models get their actual max tokens
- Fall back to 20% of context window when max_completion_tokens is null
- Update getModelMaxOutputTokens to use same fallback logic for consistency
- Update tests to reflect new behavior
- Fixes issue where reserved tokens showed ~209k instead of actual model limits (e.g. GPT-4o: 16,384)
2025-07-06 04:15:05 -04:00
Daniel
5b1ca51ec0
feat: optimize file listing when maxWorkspaceFiles is 0 (#5421)
- Add early return in listFiles() when limit is 0 to avoid unnecessary file scanning
- Update getEnvironmentDetails() to show appropriate message when workspace files context is disabled
- Add test coverage for maxWorkspaceFiles=0 scenario
- Clean up test files to remove unnecessary mocking complexity

This optimization improves performance when users set maxWorkspaceFiles to 0, completely bypassing file system operations.
2025-07-05 11:28:16 -04:00
Daniel
49af895c1f
fix: restore search score threshold slider (#5410)
fix: restore search score threshold slider and fix value persistence (#5041)

- Add codebaseIndexSearchMinScore to WebviewMessage type definition
- Include codebaseIndexSearchMinScore in saveCodeIndexSettingsAtomic handler
- Initialize codebaseIndexSearchMinScore in ExtensionStateContext
- Fix logical OR operators to use nullish coalescing for proper 0 value handling
- Ensure search threshold values persist correctly when saving settings

This restores the deleted feature from PR #5041 and fixes the issue where
the search score threshold value was being reset upon saving.
2025-07-05 08:04:55 -04:00
Murilo Pires
4a78f51fe5
Feat/issue 5149 configurable max search results (#5402)
* feat: add configurable max search results for codebase indexing (#5149)

- Add codebaseIndexSearchMaxResults to configuration schema with validation (10-1000)
- Update Qdrant client to accept maxResults parameter in search method
- Add UI slider in Experimental Settings to configure max search results
- Rename constants to DEFAULT_MAX_SEARCH_RESULTS and DEFAULT_SEARCH_MIN_SCORE for clarity
- Add translations for new setting across all 17 supported languages
- Add comprehensive test coverage for config manager, Qdrant client, and UI components

fix: settings persistence for codebase index configuration

- Add new updateCodebaseIndexConfig message type to properly merge config updates
- Update SettingsView to send entire codebaseIndexConfig object instead of just enabled flag
- Add backend handler to merge configuration updates instead of overwriting
- Add tests for the new message handler functionality

This ensures the max search results setting persists correctly when saved.

* fix: correct property name in updateCodebaseIndexConfig message

The frontend was sending 'config' but the backend expects 'codebaseIndexConfig'.
This mismatch was preventing the max search results setting from persisting.

* feat: refactor codebase index constants and update search result defaults

* feat(chat): add advanced settings for maximum search results configuration

* refactor: remove updateCodebaseIndexConfig and integrate max search results into saveCodeIndexSettingsAtomic

- Removed updateCodebaseIndexConfig message type and handler as per PR feedback
- Added codebaseIndexSearchMaxResults to codeIndexSettings type in WebviewMessage.ts
- Updated saveCodeIndexSettingsAtomic to save codebaseIndexSearchMaxResults
- Fixed SettingsView.tsx to use codebaseIndexEnabled message instead of updateCodebaseIndexConfig

* Delete webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx

* refactor: remove updateCodebaseIndexConfig tests to streamline codebase indexing logic

* revert this

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-04 20:55:15 -04:00
Murilo Pires
9da5166f56
Pr fixer improvements (#5407)
* feat: add Issue Fixer Orchestrator mode

* feat(pr-fixer-orchestrator): enhance workflow safety and user control

- Add user approval checkpoint before committing changes
- Implement large diff handling (>2000 lines) with automatic summarization
- Replace dangerous `git add -A` with selective file staging
- Enforce context preservation in shared temp directory for all delegated tasks
- Add exact PR template format specification
- Update best practices to reflect new safety measures

BREAKING CHANGE: Workflow now requires explicit user approval before commits

* removed files that were added accidently
2025-07-04 20:53:40 -04:00
Murilo Pires
7c4fc55fc5
PR-Reviewer improvements (#5406)
* feat: add Issue Fixer Orchestrator mode

* feat: enhance PR Reviewer mode as orchestrator with critical review capabilities

- Transform PR Reviewer into an orchestrator mode that delegates analysis tasks
- Add comprehensive rule files for workflow, guidelines, and patterns
- Implement file-based context management system in .roo/temp/pr-*/
- Add GitHub MCP tool integration with CLI fallback strategy
- Include critical review guidelines for pattern consistency and redundancy detection
- Update file permissions to support temporary context files
2025-07-04 20:53:13 -04:00
Murilo Pires
6982b1916c
feat: Add pre-commit review and PR template to issue-fixer-orchestrator (#5405)
* feat: Add pre-commit review and PR template to issue-fixer-orchestrator

- Add user confirmation step before committing changes
- Handle large diffs (>2000 lines) with summary generation
- Save PR message to temp directory instead of creating PR directly
- Implement exact Roo Code PR template format
- Add post-commit options for flexible PR creation
- Update best practices and communication guidelines
- Document new commit and PR workflow patterns

* removed files that were added accidently
2025-07-04 20:50:36 -04:00
Murilo Pires
f478a5c72c
fix: resolve Go duplicate references in tree-sitter queries (#5367) (#5377)
* fix: resolve Go duplicate references in tree-sitter queries (#5367)

- Replace broad statement captures with function-scoped queries
- Eliminates overlapping captures that caused duplicate references
- Improves search quality and indexing performance for Go projects
- Add test to validate no duplicate line ranges are captured
- Maintains backward compatibility with existing functionality

Fixes #5367

* fix: resolve Go codebase indexing with language-specific thresholds

- Update Go tree-sitter queries to capture full declarations instead of just identifiers
- Implement language-specific character thresholds (50 chars for Go vs 100 default)
- Fix inspectGo.spec.ts test to match new query behavior
- Add comprehensive test coverage for Go indexing fix

This ensures Go files are properly indexed for semantic search while preventing
duplicate references. All tests now pass.

* fix: implement universal 50-character threshold for code indexing

- Changed MIN_BLOCK_CHARS from 100 to 50 in parser.ts
- Updated tests to expect single-block captures for small Go files
- Removed language-specific threshold logic
- Fixes Go files not being indexed due to high character threshold

Fixes #5367

* test: replace Go-specific test with generic MIN_BLOCK_CHARS test

- Remove go-indexing-fix.spec.ts as requested in PR feedback
- Add generic test in parser.spec.ts to verify 50-character threshold
- Test ensures content under 50 chars is filtered, 50+ chars is indexed
- Applies to all languages, not just Go

* fix: update markdown tests for MIN_BLOCK_CHARS change from 100 to 50
2025-07-04 20:49:40 -04:00
Murilo Pires
a83e8c0553
feat: add markdown support to codebase indexing (#4660) (#5378)
* feat: add markdown support to codebase indexing (#4660)

* fix: implement chunking for large markdown sections and fix Qdrant deduplication issue (#4660)

- Modified parseMarkdownContent to chunk large sections (>1150 chars)
- Added support for chunking header-less markdown files
- Fixed _chunkTextByLines to handle oversized lines properly
- Added defensive check for parseMarkdown returning undefined
- Fixed Qdrant ID generation to use segmentHash instead of file:line
  - This was the root cause: chunks were being deduplicated
  - Each chunk now gets a unique ID even from the same line
- Added comprehensive tests for all edge cases
- Ensures all markdown content is properly indexed in Qdrant

* fix: remove redundant supported-extensions test file

As identified in PR review, the supported-extensions.spec.ts file only tests
the contents of an array, which is already implicitly covered by the functional
tests in parser.spec.ts. Removing this reduces maintenance overhead without
sacrificing test quality.

* test: address PR review feedback

- Remove redundant test 'should handle large markdown documentation folders efficiently'
  that only verified the scanner could iterate over mocked files
- Add test to verify unique point IDs are generated for each block from the same file,
  ensuring the segmentHash-based ID generation prevents collisions

* fix: add segmentHash to vector point payload and refactor tests

- Add segmentHash to payload in scanner.ts to fix vector point ID generation
- Split parser.spec.ts tests into focused unit tests (mocked dependencies)
- Move integration tests to new markdownIntegration.spec.ts file
- Each test suite now has clear, distinct responsibilities
- Fixes issue #4660: vector point ID collisions for large Markdown files

* refactor: move redundant tests

* feat: enhance markdown processing with consistent chunking logic and segment hashing

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-04 13:58:25 -04:00
Justin Halsall
7a0a6deb93
Port: feat(chat): add copy prompt button to task actions (#5392)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-04 11:16:57 -04:00
Matt Rubens
055d2bcb87
Try to implement nightly app publishing (#5396)
Co-authored-by: matt <matt@roocode.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2025-07-04 11:16:45 -04:00
lhish
8e7d9e092d
fix(tools): Resolve intermittent hangs and lack of clear error feedback in apply_diff tool (#5391)
* fix(tools): Resolve intermittent hangs and lack of clear error feedback in apply_diff tool (#5390)

* fix: show user-friendly error message for XML parsing failures

- Keep detailed XML structure instructions only for LLM via pushToolResult
- Show simple error message to user via cline.say
- Aligns with established error handling pattern in codebase

* feat: add telemetry for XML parsing errors

- Track XML parsing errors using captureDiffApplicationError
- Include consecutive mistake count for better error analysis
- Helps monitor and debug XML parsing issues in production

---------

Co-authored-by: Example User <user@example.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-04 10:02:28 -04:00
Matt Rubens
7ae74404f4
Fix inconsistent descriptions in slash commands (#5388) 2025-07-04 01:08:37 -04:00
Daniel
f96021fa6b
fix: resolve UI issues with checkbox state and popover visibility (#5387) 2025-07-03 22:01:10 -04:00
Hannes Rudolph
ede228e152
fix: prevent chatbox focus loss during automated file editing (#4574) (#5349)
* fix: prevent chatbox focus loss during automated file editing (#4574)

- Add preserveFocus: true to DiffViewProvider openDiffEditor method
- Implement comprehensive focus preservation during cursor positioning and scrolling
- Make scrollToFirstDiff async with focus restoration capabilities
- Update all tool files to use async scrollToFirstDiff
- Add comprehensive unit and E2E tests for focus preservation

Fixes #4574

* refactor: extract focus restoration logic and improve consistency

- Created restoreEditorFocus() helper method to eliminate code duplication
- Changed preserveFocus from false to true for consistent behavior
- Added error handling with silent logging for focus restoration failures
- Added null checks for undefined activeTextEditor cases

* Delete apps/vscode-e2e/src/suite/tools/focus-preservation.test.ts

It doesn't seem to be testing anything

* refactor: remove focus restoration logic to simplify diff editor interactions

* refactor: remove unnecessary await from scrollToFirstDiff calls

---------

Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-03 20:43:06 -04:00
Daniel
e508eaf3df
Fix code index secret persistence and improve settings UX (#5158)
* Fix code index secret persistence with async VSCode storage

- Add async secret methods to CodeIndexConfigManager
- Implement direct VSCode secret storage access bypassing ContextProxy cache
- Update loadConfiguration to use async secret loading
- Modify webview message handler to use new async secret storage
- Add public secret methods to CodeIndexManager
- Enhance debugging throughout secret flow

This fixes the issue where API keys were saved but not loaded immediately
into services due to ContextProxy cache synchronization issues.

* Fix code index secret persistence and test failures

- Add async secret handling to CodeIndexConfigManager with new methods:
  - getSecretAsync(), storeSecretAsync() for individual secrets
  - loadSecretsAsync(), storeSecretsAsync() for batch operations
- Update doesConfigChangeRequireRestart() to check OpenAI Compatible modelDimension changes
- Fix all failing tests by using setupSecretMocks() helper consistently
- Update manager.spec.ts to properly mock _recreateServices to avoid real service creation

This ensures API keys and other secrets are properly loaded from VSCode's async secret storage
and that configuration changes requiring service restart are correctly detected.

* feat: improve code index settings secret handling in UI

- Show placeholder dots (••••••••••••••••) in password fields when secrets are already set
- Only send modified secret fields to prevent overwriting existing secrets with empty values
- Track which fields have been modified by the user
- Add requestCodeIndexSecretStatus message handler to check if secrets exist
- Fix console.log to handle empty string keys without errors
- Ensure changing one setting doesn't clear other unmodified secrets

* refactor: disconnect code index from unified settings system

- Rename handleExternalSettingsChange to handleSettingsChange for clarity
- Remove handleSettingsChange call from ClineProvider (not related to code index)
- Remove codebaseIndexConfig from general settings save in SettingsView
- Delete unused codebaseIndexConfig message handler
- Remove codebaseIndexConfig from WebviewMessage type definition
- Code index settings are now fully independent with their own dedicated UI

* feat: separate code index enable/disable from indexing settings

- Move 'Enable codebase indexing' toggle to global settings in Experimental section
- Keep indexing-specific settings (API keys, URLs, models) in dedicated Code Index Settings component
- Add codebaseIndexEnabled handler to webview message handler
- Update translations with new settings title and disabled message
- Ensure code index service properly responds to enable/disable changes
- Maintain backward compatibility with existing codebaseIndexConfig structure

* refactor: remove ContextProxy.getVSCodeContext() and pass ExtensionContext directly

- Updated CodeIndexConfigManager to accept vscode.ExtensionContext in constructor
- Modified CodeIndexManager to pass context directly to CodeIndexConfigManager
- Updated webviewMessageHandler to use provider.context.secrets directly
- Removed getVSCodeContext() method from ContextProxy
- Updated all related tests to reflect these changes
- Fixed CodeIndexSettings webview tests after UI changes

* refactor: streamline secret handling by removing async methods and utilizing ContextProxy directly

* feat: translations and popover component

* refactor: simplify test mocks and improve checkbox handling in CodeIndexSettings tests

* refactor: remove debug logging from CodeIndexConfigManager, CodeIndexManager, CodeIndexServiceFactory, and QdrantVectorStore

* fix: merge missing translation keys from main after rebase

- Add advancedConfigLabel, searchMinScoreLabel, searchMinScoreDescription, searchMinScoreResetTooltip keys
- Update startIndexingButton and clearIndexDataButton labels to match main
- Preserve all CodeIndexPopover translations added in this PR

* Revert "fix: merge missing translation keys from main after rebase"

This reverts commit beb1de4924ac1475731fcd06d994ddb96eb1e5fd.

* fix: add missing translation keys from main branch after rebase

- Added codeIndex.advancedConfigLabel
- Added codeIndex.searchMinScoreLabel
- Added codeIndex.searchMinScoreDescription
- Added codeIndex.searchMinScoreResetTooltip

These keys exist on main but were missing from non-English locales after rebase.

* fix: remove clickIndicatorMessage, fix toggle message type, and clean up translation key inconsistencies

* refactor: streamline settings management in CodeIndexPopover and improve secret handling

* refactor: remove debug logging from configuration checks in CodeIndexConfigManager and webviewMessageHandler

* fix: translations

* refactor: remove CodeIndexSettings component and associated tests
2025-07-03 18:33:20 -04:00
Daniel
b7d5a964c7
fix: enhance PR reviewer mode to prevent duplicate comments (#5382)
- Reorganized workflow to fetch existing comments BEFORE code review (Step 4)
- Added dedicated Step 6 to verify existing comments against current code
- Updated best practices to emphasize checking resolved comments first
- Enhanced common mistakes to highlight duplicate comment prevention
- Added tracking of resolved vs pending comments in the review process
2025-07-03 14:50:38 -04:00
Hannes Rudolph
2ecf2ce5ad
feat: improve docs-extractor mode rules for better documentation extraction (#5381)
- Enhanced extraction workflow with clearer step-by-step instructions
- Improved documentation patterns for better structure recognition
- Refined analysis techniques for comprehensive coverage
- Updated tool usage guide with practical examples
- Added complete extraction examples for common scenarios
- Improved communication guidelines for clearer output
- Enhanced user-friendly examples with better formatting
2025-07-03 14:50:09 -04:00
Murilo Pires
a3106bf9a5
feat: add Issue Fixer Orchestrator mode (#5379) 2025-07-03 14:49:25 -04:00
Hannes Rudolph
329690cf54
feat: Delete .roo/rules-{mode} folder when custom mode is deleted (#5210) (#5317)
* feat: Add folder deletion when custom mode is deleted (#5210)

* fix: address PR feedback - fix Korean translation typo and add missing German translation

* fix: use os.homedir() instead of vscode.env.userHome

* fix: use dynamic home directory in webview tests for cross-platform compatibility

* fix: normalize path separators in tests for Windows compatibility

* feat: implement DeleteModeDialog component for mode deletion confirmation

* fix: use ref to store current modeToDelete value for consistent state handling

* feat: add error handling for rules folder deletion and localize error messages

* Update src/i18n/locales/ja/common.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update src/i18n/locales/zh-CN/common.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* fix: remove redundant rulesFolderExists from deleteCustomModeCheck response

* fix: update webviewMessageHandler tests to match fs import style

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-03 13:00:07 -04:00
Hannes Rudolph
7e8c1d71a4
feat: add issue-fixer-orchestrator mode (#5366)
* Add issue-fixer-orchestrator mode

* fix: address PR review comments

- Restore multi-line YAML formatting for mode-writer roleDefinition
- Fix duplicate numbering in workflow XML (4. -> 5., 5. -> 6.)

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-03 10:58:58 -04:00
SeeD
abea1920ac
Fix: Chat UI consistency and layout shifts (#5237) 2025-07-03 00:02:00 -04:00
SannidhyaSah
e4b051bb71
fix: prevent completion sound from replaying when reopening completed tasks (#4885) (#5249) 2025-07-02 23:59:51 -04:00
SannidhyaSah
37619d7850
fix: support full endpoint URLs in OpenAI Compatible provider (#5212) (#5214)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-02 23:58:35 -04:00
SannidhyaSah
87aa688f33
feat: add Gemini embedding provider for codebase indexing (#5228)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-02 23:51:42 -04:00
WuWen
19cd001f8d
fix access_mcp_resource fails to handle images correctly (#5254) 2025-07-02 23:50:15 -04:00
Matt Rubens
1cb69d2dc6
Remove reference to file that no longer exists (#5360) 2025-07-02 22:25:58 -04:00
Daniel
c72f4a4b5e
docs: add compact testing guidelines to project rules (#5353) 2025-07-02 18:48:50 -04:00
github-actions[bot]
6355cb010c
Changeset version bump (#5358)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-02 17:20:21 -04:00
github-actions[bot]
7704463a7b
Update contributors list (#5213)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-07-02 17:16:31 -04:00
Matt Rubens
cb44e6dda4
v3.22.6 (#5357) 2025-07-02 17:15:40 -04:00
dleffel
a57b0b6dc4
feat: integrate security one-pager into website (#5234)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-02 16:39:02 -04:00
Matt Rubens
1be6fce1a6
Check for protected files in single apply diff (#5348) 2025-07-02 13:52:13 -04:00
Matt Rubens
3993406ebd
Add .vscode/ to the list of write-protected files/directories (#5347) 2025-07-02 13:17:20 -04:00
Christiaan Arnoldus
89d28a5e66
Give Mermaid buttons a light background in light mode (#5342) 2025-07-02 10:58:35 -04:00
John Richmond
05040414c2
Cloud: support alternate auth token from environment (#5323) 2025-07-01 22:23:23 -04:00
Hannes Rudolph
70726bcd21
feat: Import export modes (#5074)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-01 17:13:44 -04:00
Matt Rubens
b4dc3a486e
Add optional share links to templates (#5318) 2025-07-01 17:11:19 -04:00
Hannes Rudolph
1acbd45dc2
refactor: update issue-fixer mode to use GitHub CLI instead of MCP (#5320) 2025-07-01 17:04:57 -04:00
Matt Rubens
a1ae29cdcd
Suppress mermaid error rendering (#5308) 2025-07-01 15:50:24 -04:00
DEV×PAIN
0ee3680fb4
feat(dx): streamline extension installation and documentation (#4284) 2025-07-01 15:50:05 -04:00
SannidhyaSah
ff1e8ac2ee
fix: remove context size from environment details (#5165) (#5312)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-07-01 15:14:50 -04:00
Will Li
781beeb30f
Auto approve follow up questions (#5296) 2025-07-01 14:43:16 -04:00
Hannes Rudolph
a348a2ae9a
feat: add user-configurable search score threshold slider for semantic search (#5027) (#5041)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-01 14:41:23 -04:00
Murilo Pires
933f28fe32
fix: Exclude cache files from rules compilation (#5283)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-01 10:33:32 -04:00
Hannes Rudolph
adb3ee9a11
feat: add translation orchestration to PR Fixer mode (#5280)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-01 10:32:38 -04:00
Hannes Rudolph
6b7cfdc6ac
feat: add translation workflow to issue-fixer mode (#5281) 2025-07-01 10:32:23 -04:00
roomote
951f2d0fad
Fix #5294: Prevent Architect mode from providing time estimates (#5295)
* Fixes #5294: Add instruction to Architect mode to avoid time estimates

- Updated Architect mode custom instructions to explicitly prohibit providing time estimates
- Added clear guidance to focus on actionable plans without speculating about implementation timeframes
- Updated test snapshot to reflect the new instruction
- All tests passing

* More tweaks to prompt

---------

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-01 09:42:46 -04:00
Andrew Shu
569b276d93
feat: adding default headers and testing for litellm fetcher (#5242)
* chore: adding x-title header and testing for litellm

* chore: indentation fi and headers order fix

* chore: spacing fix

* chore: removed white space

* fix: allow user headers to override default headers and clean up formatting

- Reorder header spread in router-provider.ts so user-provided openAiHeaders can override DEFAULT_HEADERS
- Remove unnecessary blank lines after imports for consistency
- This matches the pattern used in openai.ts where DEFAULT_HEADERS come first

---------

Co-authored-by: Brendan-Z <brendanzhou.99@gmail.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-30 20:23:11 -04:00
Hannes Rudolph
18c3f5dc33
feat: change default mode to architect for new installations (#5289)
* feat: change default mode to architect for new installations

- Reordered modes array to put architect mode first
- Updated test to reflect architect as the default mode
- Maintains backward compatibility for existing users

* test: update snapshots and fix tests for architect default mode

- Update all snapshot tests to reflect architect as the default mode
- Fix mode destructuring in validateToolUse tests
- All tests now pass with the new default mode configuration

* docs: add comment explaining mode ordering for default selection

Addresses PR review feedback to clarify that the first mode in the array
serves as the default for new installations

* fix: Update integration test to use lowercase mode name

The test was using 'Ask' (capitalized) but modes are now lowercase 'ask'.
This was causing the test to timeout as the mode validation failed.
2025-06-30 17:46:56 -04:00
Hannes Rudolph
298908fe1d
fix: ensure VersionIndicator only shows on welcome screen (#5288)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-30 14:07:00 -04:00
SannidhyaSah
24eb6e4c29
fix: prevent Qdrant URL field from auto-filling with default value (#5217)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-30 10:56:49 -04:00
Murilo Pires
b9626a7eff
fix: cap API retry exponential backoff at 10 minutes (#5171)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-30 10:56:34 -04:00
Hannes Rudolph
904e956179
feat: add persistent version indicator on chat screen (#5115) (#5128)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-30 10:53:55 -04:00
Kevin Zhao
000a9e5268
feat: update AWS Bedrock cross-region inference profile mapping, Closed issue #2704 (#4973) 2025-06-30 10:49:32 -04:00
roomote
fb711a097c
Fixes #4903: Consistent cancellation error messages for thinking vs streaming phases (#4904)
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-06-30 10:48:57 -04:00
takakoutso
562a007438
feat: Add automatic configuration import on extension startup (#4848)
Co-authored-by: Roo Code <chris@roocode.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-30 10:45:51 -04:00
Murilo Pires
64279166c4
fix: resolve URL loading timeout issues in @ mentions (#5160)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-30 10:40:53 -04:00
PaperBoardOfficial
8c493b393f
fixed profile context condensation threshold (#5230) 2025-06-30 10:37:18 -04:00
roomote
cd60bb3a7e
Fixes #5206: Update apply_diff tool documentation to accurately reflect multi-file capabilities (#5232)
* Fixes #5206

* Fix failing test: Update snapshot after documentation changes

- Updated system-prompt.spec.ts snapshot to match new tool descriptions
- Changes reflect updated multi-file diff strategy documentation
- Addresses test failure mentioned in PR #5232 comment by @mrubens
2025-06-30 09:01:44 -04:00
github-actions[bot]
b45252d490
Changeset version bump (#5225)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-06-29 01:06:59 -04:00
Matt Rubens
5cda9e453b
Bring back more gemini cli types (#5227) 2025-06-29 00:45:40 -04:00
Matt Rubens
0c89162199
Try to avoid type error from removing gemini-cli (#5226) 2025-06-29 00:16:58 -04:00
Matt Rubens
a480937b22
Add changeset for v3.22.5 patch release (#5224) 2025-06-28 23:56:48 -04:00
Matt Rubens
d64e677f88
Remove Gemini CLI provider (#5223) 2025-06-28 23:48:28 -04:00
Matt Rubens
f763a5119b
Revert "Stop double-capturing cloud telemetry" (#5220) 2025-06-28 16:03:56 -04:00
Will Li
dc44e7a40b
Git Repo URL telemetry link fix: only Https (#5202)
* https parsing in URL sanatizing for git repo

* fix: remove duplicate JSDoc and add SSH to HTTPS conversion test

- Remove duplicate JSDoc comment from convertGitUrlToHttps function
- Add test case to verify getGitRepositoryInfo converts SSH URLs to HTTPS format

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-28 09:32:27 -04:00
Matt Rubens
8bb7ef083f
Stop double-capturing cloud telemetry (#5211) 2025-06-28 00:49:01 -04:00
github-actions[bot]
fa693e1f06
Changeset version bump (#5205)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-06-27 20:20:03 -04:00
github-actions[bot]
ad89e83280
Update contributors list (#5129)
Co-authored-by: mrubens <2600+mrubens@users.noreply.github.com>
2025-06-27 20:17:16 -04:00
3125 changed files with 306884 additions and 108887 deletions

View file

@ -1,9 +1,9 @@
const getReleaseLine = async (changeset) => {
const [firstLine] = changeset.summary
const lines = changeset.summary
.split("\n")
.map((l) => l.trim())
.filter(Boolean)
return `- ${firstLine}`
return lines.map((line) => (line.startsWith("- ") ? line : `- ${line}`)).join("\n")
}
const getDependencyReleaseLine = async () => {

View file

@ -7,5 +7,5 @@
"access": "restricted",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
"ignore": ["@roo-code/cli"]
}

15
.changeset/v3.54.0.md Normal file
View file

@ -0,0 +1,15 @@
---
"roo-cline": minor
---
- Remove: Roo Code Cloud and eval infrastructure from the extension, CLI, workflows, and package surfaces so the release is focused on the standalone extension (PR #12328 by @mrubens)
- Remove: All telemetry collection and analytics plumbing across the extension, website, shared types, provider flows, and related tests (PR #12324 by @mrubens)
- Remove: MDM and organization membership enforcement, including host wiring, webview state, user-facing messages, and locale strings (PR #12323 by @mrubens)
- Remove: The MCP marketplace, marketplace services, webview marketplace UI, package contributions, and related localized copy (PR #12326 by @mrubens)
- Update: Extension-facing support, diagnostics, and announcement content for the final Roo Code release, including GitHub help paths and links to Roomote, ZooCode, and Cline (PR #12341 by @brunobergher)
- Add: A cleaned docs app with GitHub Pages deployment support (PR #12344 by @brunobergher)
- Fix: Configure the docs GitHub Pages base URL so deployed assets and canonical paths load correctly under the repository Pages path (PR #12370 by @mrubens)
- Update: Point docs links in the root README, localized READMEs, and web app copy to the current GitHub Pages docs URL (PR #12371 by @mrubens)
- Remove: Stale `roocode.github.io` docs references, including the old CNAME and outdated docs README and robots.txt URLs (PR #12372 by @mrubens)
- Update: The website to focus almost entirely on the Roo Code extension and remove cloud, team, enterprise, provider, pricing, Slack, and Linear product pages (PR #12180 by @brunobergher)
- Remove: Contributor, community, social channel, and tutorial references from README files, docs, website copy, issue templates, and workflows (PR #12347 by @brunobergher)

View file

@ -76,15 +76,18 @@ src/node_modules
!pnpm-workspace.yaml
!scripts/bootstrap.mjs
!apps/web-evals/
!apps/cli/
!src/
!webview-ui/
!packages/evals/.docker/entrypoints/runner.sh
!packages/build/
!packages/cloud/
!packages/config-eslint/
!packages/config-typescript/
!packages/core/
!packages/evals/
!packages/ipc/
!packages/telemetry/
!packages/types/
!packages/vscode-shim/
!packages/cloud/
!locales/

View file

@ -3,3 +3,4 @@ POSTHOG_API_KEY=key-goes-here
# Roo Code Cloud / Local Development
CLERK_BASE_URL=https://epic-chamois-85.clerk.accounts.dev
ROO_CODE_API_URL=http://localhost:3000
ROO_CODE_PROVIDER_URL=http://localhost:8080/proxy/v1

22
.gitattributes vendored
View file

@ -1,3 +1,25 @@
demo.gif filter=lfs diff=lfs merge=lfs -text
assets/docs/demo.gif filter=lfs diff=lfs merge=lfs -text
src/assets/docs/demo.gif filter=lfs diff=lfs merge=lfs -text
# Test snapshot files - mark as linguist-generated to exclude from GitHub language statistics
*.snap linguist-generated=true
# Non-English translation files - mark as linguist-generated to exclude from GitHub language statistics
# Package NLS files - mark non-English ones as generated
src/package.nls.*.json linguist-generated=true
# Exclude the base English file from being marked as generated
src/package.nls.json linguist-generated=false
# Root locales directory (contains only non-English translations)
locales/** linguist-generated=true
# Mark all locale directories as generated first
src/i18n/locales/** linguist-generated=true
webview-ui/src/i18n/locales/** linguist-generated=true
# Then explicitly mark English directories as NOT generated (override the above)
src/i18n/locales/en/** linguist-generated=false
webview-ui/src/i18n/locales/en/** linguist-generated=false
# This approach uses gitattributes' last-match-wins rule to exclude English while including all other locales

2
.github/CODEOWNERS vendored
View file

@ -1,2 +1,2 @@
# These owners will be the default owners for everything in the repo
* @mrubens @cte @jr
* @mrubens @cte @jr @hannesrudolph @daniel-lxs

View file

@ -1,12 +1,66 @@
name: Bug Report
description: Clearly report a bug with detailed repro steps
description: Report a broken behavior in plain language with a minimal reproduction
labels: ["bug"]
title: "[BUG] "
body:
- type: markdown
attributes:
value: |
**Thanks for your report!** Please check existing issues first:
👉 https://github.com/RooCodeInc/Roo-Code/issues
Thank you for your report! Please search existing issues first:
https://github.com/RooCodeInc/Roo-Code/issues
- type: textarea
id: problem
attributes:
label: Problem (one or two sentences)
description: Describe what went wrong in plain language.
placeholder: 'Example: "Expected the task to start, but nothing happened and no message appeared."'
validations:
required: true
- type: textarea
id: context
attributes:
label: Context (who is affected and when)
description: Who sees this and in what situation? Keep it non-technical.
placeholder: 'Example: "Happens to new users when starting a run from the New Run page with dark theme enabled."'
validations:
required: true
- type: textarea
id: steps
attributes:
label: Reproduction steps
description: Provide clear, numbered steps so we can reproduce.
placeholder: |
1) Environment/setup (OS, extension version, relevant settings)
2) Exact actions (clicks, inputs, commands)
3) What you observed after each step
validations:
required: true
- type: input
id: expected
attributes:
label: Expected result
placeholder: e.g., "The task starts and shows progress."
validations:
required: true
- type: input
id: actual
attributes:
label: Actual result
placeholder: e.g., "The button appears disabled and no progress is shown."
validations:
required: true
- type: textarea
id: variations
attributes:
label: Variations tried (optional)
description: Different browsers, devices, providers, or settings you tried.
placeholder: e.g., "Tried Chrome/Firefox, disabling dark theme, switching providers."
- type: input
id: version
@ -19,17 +73,17 @@ body:
- type: dropdown
id: provider
attributes:
label: API Provider
label: API Provider (optional)
options:
- Anthropic
- AWS Bedrock
- Amazon Bedrock
- Chutes AI
- DeepSeek
- Glama
- Featherless AI
- Fireworks AI
- Google Gemini
- Google Vertex AI
- Groq
- Human Relay Provider
- LiteLLM
- LM Studio
- Mistral AI
@ -38,51 +92,28 @@ body:
- OpenAI Compatible
- OpenRouter
- Requesty
- SambaNova
- Unbound
- VS Code Language Model API
- xAI (Grok)
- Not Applicable / Other
validations:
required: true
- type: input
id: model
attributes:
label: Model Used
label: Model Used (optional)
description: Exact model name (e.g., Claude 3.7 Sonnet). Use N/A if irrelevant.
validations:
required: true
- type: textarea
id: steps
id: roo-code-tasks
attributes:
label: 🔁 Steps to Reproduce
description: |
Help us see what you saw. Give clear, numbered steps:
1. Setup (OS, extension version, settings)
2. Exact actions (clicks, input, files, commands)
3. What happened after each step
Think like you're writing a recipe. Without this, we can't reproduce the issue.
validations:
required: true
- type: textarea
id: what-happened
attributes:
label: 💥 Outcome Summary
description: |
Recap what went wrong in one or two lines.
Example: "Expected code to run, but got an empty response and no error."
placeholder: Expected ___, but got ___.
validations:
required: true
label: Roo Code Task Links (optional)
description: If you have any publicly shared Roo Code task links that demonstrate the issue, paste them here.
placeholder: Paste your Roo Code share links here, one per line
- type: textarea
id: logs
attributes:
label: 📄 Relevant Logs or Errors (Optional)
description: Paste API logs, terminal output, or errors here. Use triple backticks (```) for code formatting.
render: shell
label: Relevant logs or errors (optional)
description: Paste relevant output or errors. Use triple backticks (```) for formatting.
render: shell

View file

@ -1,8 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Feature Request
url: https://github.com/RooCodeInc/Roo-Code/discussions/categories/feature-requests
about: Share and vote on feature requests for Roo Code
- name: Leave a Review
url: https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details
about: Enjoying Roo Code? Leave a review here!

View file

@ -1,61 +1,47 @@
name: Detailed Feature Proposal
description: Report a specific problem that needs solving in Roo Code
labels: ["proposal", "enhancement"]
name: Enhancement Request
description: Propose an improvement in plain language focused on user benefit
labels: ["enhancement"]
title: "[ENHANCEMENT] "
body:
- type: markdown
attributes:
value: |
**Thank you for submitting a feature request for Roo Code!**
This template helps you describe problems that need solving. Focus on the problem - the Roo team will work to design solutions unless you want to contribute the implementation yourself.
**Quality over speed:** We prefer detailed, clear problem descriptions over quick ones. Vague requests often get closed or require multiple rounds of clarification, which wastes everyone's time.
**Before submitting:**
- Search existing [Issues](https://github.com/RooCodeInc/Roo-Code/issues) and [Discussions](https://github.com/RooCodeInc/Roo-Code/discussions) to avoid duplicates
- For general ideas, use [GitHub Discussions](https://github.com/RooCodeInc/Roo-Code/discussions/categories/feature-requests) instead of this template.
- type: markdown
attributes:
value: |
## ❌ Common mistakes that lead to request rejection:
- **Vague problem descriptions:** "UI is bad" -> Should be: "Submit button is invisible on dark theme"
- **Missing user impact:** "This would be cool" -> Should explain who benefits and how
- **No specific context:** Describe exactly when and how the problem occurs
Thank you for helping improve Roo Code!
Please focus on the problem and the desired behavior in plain language.
- type: textarea
id: problem-description
id: problem
attributes:
label: What specific problem does this solve?
description: |
**Be concrete and detailed.** Explain the problem from a user's perspective.
✅ **Good examples (specific, clear impact):**
- "When running large tasks, users wait 5+ minutes because tasks execute sequentially instead of in parallel, blocking productivity"
- "AI can only read one file per request, forcing users to make multiple requests for multi-file projects, increasing wait time from 30s to 5+ minutes"
- "Dark theme users can't see the submit button because it uses white text on light grey background"
❌ **Poor examples (vague, unclear impact):**
- "The UI looks weird" -> What specifically looks weird? On which screen? What's the impact?
- "System prompt is not good" -> What's wrong with it? What behaviour does it cause? What should it do instead?
- "Performance could be better" -> Where? How slow is it currently? What's the user impact?
**Your problem description should answer:**
- Who is affected? (all users, specific user types, etc.)
- When does this happen? (specific scenarios/steps)
- What's the current behaviour vs expected behaviour?
- What's the impact? (time wasted, errors caused, etc.)
placeholder: Be specific about the problem, who it affects, and the impact. Avoid generic statements like "it's slow" or "it's confusing."
label: Problem (one or two sentences)
description: What problem are users facing?
placeholder: e.g., "Users often click Copy Run by mistake and duplicate runs unintentionally."
validations:
required: true
- type: textarea
id: context
attributes:
label: Context (who is affected and when)
description: Who encounters this and in what situation?
placeholder: e.g., "Happens when browsing the Runs list; most visible for new users."
validations:
required: true
- type: textarea
id: additional-context
id: desired
attributes:
label: Additional context (optional)
description: Mockups, screenshots, links, user quotes, or other relevant information that supports your proposal.
label: Desired behavior (conceptual, not technical)
description: Describe what should happen in simple terms.
placeholder: e.g., "Ask for confirmation before copying a run."
validations:
required: true
- type: textarea
id: constraints
attributes:
label: Constraints / preferences (optional)
description: Any considerations like performance, accessibility, or UX expectations.
placeholder: e.g., "Keep it quick and unobtrusive; keyboard accessible."
- type: checkboxes
id: checklist
@ -64,128 +50,42 @@ body:
options:
- label: I've searched existing Issues and Discussions for duplicates
required: true
- label: This describes a specific problem with clear impact and context
- label: This describes a specific problem with clear context and impact
required: true
- type: textarea
id: roo-code-tasks
attributes:
label: Roo Code Task Links (optional)
description: If you explored this with Roo Code, share public task links for context.
placeholder: Paste your Roo Code share links here, one per line
- type: markdown
attributes:
value: |
---
## 🛠️ **Optional: Contributing & Technical Analysis**
**🎯 Just reporting a problem?** You can click "Submit new issue" right now! The sections below are only needed if you want to contribute a solution via pull request.
**⚠️ Only continue if you want to:**
- Propose a specific solution design
- Implement the feature yourself via pull request
- Provide technical analysis to help with implementation
**For contributors who continue:**
- A maintainer (especially @hannesrudolph) will review this proposal. **Do not start implementation until approved and assigned.** We're a small team with limited resources, so every code addition needs careful consideration. We're always happy to receive clear, actionable proposals though!
- Join [Discord](https://discord.gg/roocode) and DM **Hannes Rudolph** (`hrudolph`) for guidance on implementation
- Check our [Roadmap](https://github.com/orgs/RooCodeInc/projects/1/views/1?query=sort%3Aupdated-desc+is%3Aopen&filterQuery=is%3Aissue%2Copen%2Cclosed+label%3A%22feature+request%22+status%3A%22Issue+%5BUnassigned%5D%22%2C%22Issue+%5BIn+Progress%5D%22) to see open feature requests ready to be implemented or currently being worked on
- type: checkboxes
id: willingness-to-contribute
attributes:
label: Interested in implementing this?
description: |
**Important:** If you check "Yes" below, the technical sections become REQUIRED.
We need detailed technical analysis from contributors to ensure quality implementation.
options:
- label: Yes, I'd like to help implement this feature
required: false
- type: checkboxes
id: implementation-approval
attributes:
label: Implementation requirements
options:
- label: I understand this needs approval before implementation begins
required: false
- type: textarea
id: proposed-solution
attributes:
label: How should this be solved? (REQUIRED if contributing, optional otherwise)
description: |
**If you want to implement this feature, this section is REQUIRED.**
**Describe your solution in detail.** Explain not just what to build, but how it should work.
✅ **Good examples:**
- "Add parallel task execution: Allow up to 3 tasks to run simultaneously with a queue system for additional tasks. Show progress for each active task in the UI."
- "Enable multi-file AI processing: Modify the request handler to accept multiple files in a single request and process them together, reducing round trips."
- "Fix button contrast: Change submit button to use primary colour on dark theme (white text on blue background) instead of current grey."
❌ **Poor examples:**
- "Make it faster" -> How? What specific changes?
- "Improve the UI" -> Which part? What specific improvements?
- "Fix the prompt" -> What should the new prompt do differently?
**Your solution should explain:**
- What exactly will change?
- How will users interact with it?
- What will the new behaviour look like?
placeholder: Describe the specific changes and how they will work. Include user interaction details if relevant.
Optional: You can stop here if you're just proposing the improvement.
- type: textarea
id: acceptance-criteria
attributes:
label: How will we know it works? (Acceptance Criteria - REQUIRED if contributing, optional otherwise)
description: |
**If you want to implement this feature, this section is REQUIRED.**
**This is crucial - don't skip it.** Define what "working" looks like with specific, testable criteria.
**Format suggestion:**
```
Given [context/situation]
label: Acceptance criteria (optional)
description: Define what “working” looks like with specific, testable outcomes.
placeholder: |
Given [context]
When [user action]
Then [expected result]
And [additional expectations]
But [what should NOT happen]
```
**Example:**
```
Given I have 5 large tasks to run
When I start all of them
Then they execute in parallel (max 3 at once, can be configured)
And I see progress for each active task
And queued tasks show "waiting" status
But the UI doesn't freeze or become unresponsive
```
placeholder: |
Define specific, testable criteria. What should users be able to do? What should happen? What should NOT happen?
Use the Given/When/Then format above or your own clear structure.
- type: textarea
id: technical-considerations
id: proposed-solution
attributes:
label: Technical considerations (REQUIRED if contributing, optional otherwise)
description: |
**If you want to implement this feature, this section is REQUIRED.**
Share technical insights that could help planning:
- Implementation approach or architecture changes
- Performance implications
- Compatibility concerns
- Systems that might be affected
- Potential blockers you can foresee
placeholder: e.g., "Will need to refactor task manager", "Could impact memory usage on large files", "Requires a large portion of code to be rewritten"
label: Proposed approach (optional)
description: If you have an idea, describe it briefly in plain language.
- type: textarea
id: trade-offs-and-risks
id: risks
attributes:
label: Trade-offs and risks (REQUIRED if contributing, optional otherwise)
description: |
**If you want to implement this feature, this section is REQUIRED.**
What could go wrong or what alternatives did you consider?
- Alternative approaches and why you chose this one
- Potential negative impacts (performance, UX, etc.)
- Breaking changes or migration concerns
- Edge cases that need careful handling
placeholder: 'e.g., "Alternative: use library X but it is 500KB larger", "Risk: might slow older devices", "Breaking: changes API response format"'
label: Trade-offs / risks (optional)
description: Potential downsides or alternatives considered.

View file

@ -1,67 +0,0 @@
<!--
Thank you for contributing to Roo Code!
Before submitting your PR, please ensure:
- It's linked to an approved GitHub Issue.
- You've reviewed our [Contributing Guidelines](../CONTRIBUTING.md).
-->
### Related GitHub Issue
<!-- Every PR MUST be linked to an approved issue. -->
Closes: # <!-- Replace with the issue number, e.g., Closes: #123 -->
### Description
<!--
Briefly summarize the changes in this PR and how they address the linked issue.
The issue should cover the "what" and "why"; this section should focus on:
- The "how": key implementation details, design choices, or trade-offs made.
- Anything specific reviewers should pay attention to in this PR.
-->
### Test Procedure
<!--
Detail the steps to test your changes. This helps reviewers verify your work.
- How did you test this specific implementation? (e.g., unit tests, manual testing steps)
- How can reviewers reproduce your tests or verify the fix/feature?
- Include relevant testing environment details if applicable.
-->
### Pre-Submission Checklist
<!-- Go through this checklist before marking your PR as ready for review. -->
- [ ] **Issue Linked**: This PR is linked to an approved GitHub Issue (see "Related GitHub Issue" above).
- [ ] **Scope**: My changes are focused on the linked issue (one major feature/fix per PR).
- [ ] **Self-Review**: I have performed a thorough self-review of my code.
- [ ] **Testing**: New and/or updated tests have been added to cover my changes (if applicable).
- [ ] **Documentation Impact**: I have considered if my changes require documentation updates (see "Documentation Updates" section below).
- [ ] **Contribution Guidelines**: I have read and agree to the [Contributor Guidelines](/CONTRIBUTING.md).
### Screenshots / Videos
<!--
For UI changes, please provide before-and-after screenshots or a short video of the *actual results*.
This greatly helps in understanding the visual impact of your changes.
-->
### Documentation Updates
<!--
Does this PR necessitate updates to user-facing documentation?
- [ ] No documentation updates are required.
- [ ] Yes, documentation updates are required. (Please describe what needs to be updated or link to a PR in the docs repository).
-->
### Additional Notes
<!-- Add any other context, questions, or information for reviewers here. -->
### Get in Touch
<!--
Please provide your Discord username for reviewers or maintainers to reach you if they have questions about your PR
-->

View file

@ -31,8 +31,6 @@ jobs:
ref: ${{ env.GIT_REF }}
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
with:
skip-checkout: 'true'
# Check if there are any new changesets to process
- name: Check for changesets

394
.github/workflows/cli-release.yml vendored Normal file
View file

@ -0,0 +1,394 @@
name: CLI Release
on:
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g., 0.1.0). Leave empty to use package.json version.'
required: false
type: string
dry_run:
description: 'Dry run (build and test but do not create release).'
required: false
type: boolean
default: false
jobs:
# Build CLI for each platform.
build:
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
platform: darwin-arm64
runs-on: macos-latest
- os: ubuntu-latest
platform: linux-x64
runs-on: ubuntu-latest
- os: ubuntu-24.04-arm
platform: linux-arm64
runs-on: ubuntu-24.04-arm
runs-on: ${{ matrix.runs-on }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
- name: Get version
id: version
run: |
if [ -n "${{ inputs.version }}" ]; then
VERSION="${{ inputs.version }}"
else
VERSION=$(node -p "require('./apps/cli/package.json').version")
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag=cli-v$VERSION" >> $GITHUB_OUTPUT
echo "Using version: $VERSION"
- name: Build extension bundle
run: pnpm bundle
- name: Build CLI
run: pnpm --filter @roo-code/cli build
- name: Create release tarball
id: tarball
env:
VERSION: ${{ steps.version.outputs.version }}
PLATFORM: ${{ matrix.platform }}
run: |
RELEASE_DIR="roo-cli-${PLATFORM}"
TARBALL="roo-cli-${PLATFORM}.tar.gz"
# Clean up any previous build.
rm -rf "$RELEASE_DIR"
rm -f "$TARBALL"
# Create directory structure.
mkdir -p "$RELEASE_DIR/bin"
mkdir -p "$RELEASE_DIR/lib"
mkdir -p "$RELEASE_DIR/extension"
# Copy CLI dist files.
echo "Copying CLI files..."
cp -r apps/cli/dist/* "$RELEASE_DIR/lib/"
# Create package.json for npm install.
echo "Creating package.json..."
node -e "
const pkg = require('./apps/cli/package.json');
const newPkg = {
name: '@roo-code/cli',
version: '$VERSION',
type: 'module',
dependencies: {
'@inkjs/ui': pkg.dependencies['@inkjs/ui'],
'@trpc/client': pkg.dependencies['@trpc/client'],
'commander': pkg.dependencies.commander,
'fuzzysort': pkg.dependencies.fuzzysort,
'ink': pkg.dependencies.ink,
'p-wait-for': pkg.dependencies['p-wait-for'],
'react': pkg.dependencies.react,
'superjson': pkg.dependencies.superjson,
'zustand': pkg.dependencies.zustand
}
};
console.log(JSON.stringify(newPkg, null, 2));
" > "$RELEASE_DIR/package.json"
# Copy extension bundle.
echo "Copying extension bundle..."
cp -r src/dist/* "$RELEASE_DIR/extension/"
# Add package.json to extension directory for CommonJS.
echo '{"type": "commonjs"}' > "$RELEASE_DIR/extension/package.json"
# Find and copy ripgrep binary.
echo "Looking for ripgrep binary..."
RIPGREP_PATH=$(find node_modules -path "*/@vscode/ripgrep/bin/rg" -type f 2>/dev/null | head -1)
if [ -n "$RIPGREP_PATH" ] && [ -f "$RIPGREP_PATH" ]; then
echo "Found ripgrep at: $RIPGREP_PATH"
mkdir -p "$RELEASE_DIR/node_modules/@vscode/ripgrep/bin"
cp "$RIPGREP_PATH" "$RELEASE_DIR/node_modules/@vscode/ripgrep/bin/"
chmod +x "$RELEASE_DIR/node_modules/@vscode/ripgrep/bin/rg"
mkdir -p "$RELEASE_DIR/bin"
cp "$RIPGREP_PATH" "$RELEASE_DIR/bin/"
chmod +x "$RELEASE_DIR/bin/rg"
else
echo "Warning: ripgrep binary not found"
fi
# Create the wrapper script
echo "Creating wrapper script..."
printf '%s\n' '#!/usr/bin/env node' \
'' \
"import { fileURLToPath } from 'url';" \
"import { dirname, join } from 'path';" \
'' \
'const __filename = fileURLToPath(import.meta.url);' \
'const __dirname = dirname(__filename);' \
'' \
'// Set environment variables for the CLI' \
"process.env.ROO_CLI_ROOT = join(__dirname, '..');" \
"process.env.ROO_EXTENSION_PATH = join(__dirname, '..', 'extension');" \
"process.env.ROO_RIPGREP_PATH = join(__dirname, 'rg');" \
'' \
'// Import and run the actual CLI' \
"await import(join(__dirname, '..', 'lib', 'index.js'));" \
> "$RELEASE_DIR/bin/roo"
chmod +x "$RELEASE_DIR/bin/roo"
# Create empty .env file.
touch "$RELEASE_DIR/.env"
# Create tarball.
echo "Creating tarball..."
tar -czvf "$TARBALL" "$RELEASE_DIR"
# Clean up release directory.
rm -rf "$RELEASE_DIR"
# Create checksum.
if command -v sha256sum &> /dev/null; then
sha256sum "$TARBALL" > "${TARBALL}.sha256"
elif command -v shasum &> /dev/null; then
shasum -a 256 "$TARBALL" > "${TARBALL}.sha256"
fi
echo "tarball=$TARBALL" >> $GITHUB_OUTPUT
echo "Created: $TARBALL"
ls -la "$TARBALL"
- name: Verify tarball
env:
PLATFORM: ${{ matrix.platform }}
run: |
TARBALL="roo-cli-${PLATFORM}.tar.gz"
# Create temp directory for verification.
VERIFY_DIR=$(mktemp -d)
# Extract and verify structure.
tar -xzf "$TARBALL" -C "$VERIFY_DIR"
echo "Verifying tarball contents..."
ls -la "$VERIFY_DIR/roo-cli-${PLATFORM}/"
# Check required files exist.
test -f "$VERIFY_DIR/roo-cli-${PLATFORM}/bin/roo" || { echo "Missing bin/roo"; exit 1; }
test -f "$VERIFY_DIR/roo-cli-${PLATFORM}/lib/index.js" || { echo "Missing lib/index.js"; exit 1; }
test -f "$VERIFY_DIR/roo-cli-${PLATFORM}/package.json" || { echo "Missing package.json"; exit 1; }
test -d "$VERIFY_DIR/roo-cli-${PLATFORM}/extension" || { echo "Missing extension directory"; exit 1; }
echo "Tarball verification passed!"
# Cleanup.
rm -rf "$VERIFY_DIR"
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: cli-${{ matrix.platform }}
path: |
roo-cli-${{ matrix.platform }}.tar.gz
roo-cli-${{ matrix.platform }}.tar.gz.sha256
retention-days: 7
# Create GitHub release with all platform artifacts.
release:
needs: build
runs-on: ubuntu-latest
if: ${{ !inputs.dry_run }}
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get version
id: version
run: |
if [ -n "${{ inputs.version }}" ]; then
VERSION="${{ inputs.version }}"
else
VERSION=$(node -p "require('./apps/cli/package.json').version")
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag=cli-v$VERSION" >> $GITHUB_OUTPUT
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Prepare release files
run: |
mkdir -p release
find artifacts -name "*.tar.gz" -exec cp {} release/ \;
find artifacts -name "*.sha256" -exec cp {} release/ \;
ls -la release/
- name: Extract changelog
id: changelog
env:
VERSION: ${{ steps.version.outputs.version }}
run: |
CHANGELOG_FILE="apps/cli/CHANGELOG.md"
if [ -f "$CHANGELOG_FILE" ]; then
# Extract content between version headers.
CONTENT=$(awk -v version="$VERSION" '
BEGIN { found = 0; content = ""; target = "[" version "]" }
/^## \[/ {
if (found) { exit }
if (index($0, target) > 0) { found = 1; next }
}
found { content = content $0 "\n" }
END { print content }
' "$CHANGELOG_FILE")
if [ -n "$CONTENT" ]; then
echo "Found changelog content"
echo "content<<EOF" >> $GITHUB_OUTPUT
echo "$CONTENT" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
else
echo "No changelog content found for version $VERSION"
echo "content=" >> $GITHUB_OUTPUT
fi
else
echo "No changelog file found"
echo "content=" >> $GITHUB_OUTPUT
fi
- name: Generate checksums summary
id: checksums
run: |
echo "checksums<<EOF" >> $GITHUB_OUTPUT
cat release/*.sha256 >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Check for existing release
id: check_release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG: ${{ steps.version.outputs.tag }}
run: |
if gh release view "$TAG" &> /dev/null; then
echo "exists=true" >> $GITHUB_OUTPUT
else
echo "exists=false" >> $GITHUB_OUTPUT
fi
- name: Delete existing release
if: steps.check_release.outputs.exists == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG: ${{ steps.version.outputs.tag }}
run: |
echo "Deleting existing release $TAG..."
gh release delete "$TAG" --yes || true
git push origin ":refs/tags/$TAG" || true
- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION: ${{ steps.version.outputs.version }}
TAG: ${{ steps.version.outputs.tag }}
CHANGELOG_CONTENT: ${{ steps.changelog.outputs.content }}
CHECKSUMS: ${{ steps.checksums.outputs.checksums }}
run: |
NOTES_FILE=$(mktemp)
if [ -n "$CHANGELOG_CONTENT" ]; then
echo "## What's New" >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo "$CHANGELOG_CONTENT" >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
fi
echo "## Installation" >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo '```bash' >> "$NOTES_FILE"
echo "curl -fsSL https://raw.githubusercontent.com/RooCodeInc/Roo-Code/main/apps/cli/install.sh | sh" >> "$NOTES_FILE"
echo '```' >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo "Or install a specific version:" >> "$NOTES_FILE"
echo '```bash' >> "$NOTES_FILE"
echo "ROO_VERSION=$VERSION curl -fsSL https://raw.githubusercontent.com/RooCodeInc/Roo-Code/main/apps/cli/install.sh | sh" >> "$NOTES_FILE"
echo '```' >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo "## Requirements" >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo "- Node.js 20 or higher" >> "$NOTES_FILE"
echo "- macOS Apple Silicon (M1/M2/M3/M4), Linux x64, or Linux ARM64" >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo "## Usage" >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo '```bash' >> "$NOTES_FILE"
echo "# Run a task" >> "$NOTES_FILE"
echo 'roo "What is this project?"' >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo "# See all options" >> "$NOTES_FILE"
echo "roo --help" >> "$NOTES_FILE"
echo '```' >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo "## Platform Support" >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo "This release includes binaries for:" >> "$NOTES_FILE"
echo '- `roo-cli-darwin-arm64.tar.gz` - macOS Apple Silicon (M1/M2/M3)' >> "$NOTES_FILE"
echo '- `roo-cli-linux-x64.tar.gz` - Linux x64' >> "$NOTES_FILE"
echo '- `roo-cli-linux-arm64.tar.gz` - Linux ARM64' >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo "## Checksums" >> "$NOTES_FILE"
echo "" >> "$NOTES_FILE"
echo '```' >> "$NOTES_FILE"
echo "$CHECKSUMS" >> "$NOTES_FILE"
echo '```' >> "$NOTES_FILE"
gh release create "$TAG" \
--title "Roo Code CLI v$VERSION" \
--notes-file "$NOTES_FILE" \
--prerelease \
release/*
rm -f "$NOTES_FILE"
echo "Release created: https://github.com/${{ github.repository }}/releases/tag/$TAG"
# Summary job for dry runs
summary:
needs: build
runs-on: ubuntu-latest
if: ${{ inputs.dry_run }}
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Show build summary
run: |
echo "## Dry Run Complete" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "The following artifacts were built:" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
find artifacts -name "*.tar.gz" | while read f; do
SIZE=$(ls -lh "$f" | awk '{print $5}')
echo "- $(basename $f) ($SIZE)" >> $GITHUB_STEP_SUMMARY
done
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Checksums" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
cat artifacts/*/*.sha256 >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY

View file

@ -58,50 +58,3 @@ jobs:
uses: ./.github/actions/setup-node-pnpm
- name: Run unit tests
run: pnpm test
check-openrouter-api-key:
runs-on: ubuntu-latest
outputs:
exists: ${{ steps.openrouter-api-key-check.outputs.defined }}
steps:
- name: Check if OpenRouter API key exists
id: openrouter-api-key-check
shell: bash
run: |
if [ "${{ secrets.OPENROUTER_API_KEY }}" != '' ]; then
echo "defined=true" >> $GITHUB_OUTPUT;
else
echo "defined=false" >> $GITHUB_OUTPUT;
fi
integration-test:
runs-on: ubuntu-latest
needs: [check-openrouter-api-key]
if: needs.check-openrouter-api-key.outputs.exists == 'true'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
- name: Create .env.local file
working-directory: apps/vscode-e2e
run: echo "OPENROUTER_API_KEY=${{ secrets.OPENROUTER_API_KEY }}" > .env.local
- name: Run integration tests
working-directory: apps/vscode-e2e
run: xvfb-run -a pnpm test:ci
notify-slack-on-failure:
runs-on: ubuntu-latest
needs: [check-translations, knip, compile, unit-test, integration-test]
if: ${{ always() && github.event_name == 'push' && github.ref == 'refs/heads/main' && contains(needs.*.result, 'failure') }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Send Slack notification on failure
uses: ./.github/actions/slack-notify
with:
webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
channel: "#ci"
workflow-name: "Code QA"
failed-jobs: ${{ toJSON(needs) }}

View file

@ -1,26 +0,0 @@
name: Discord PR Notifier
on:
workflow_dispatch:
pull_request_target:
types: [opened]
jobs:
notify:
runs-on: ubuntu-latest
if: github.head_ref != 'changeset-release/main'
steps:
- name: Send Discord Notification
run: |
PAYLOAD=$(jq -n \
--arg title "${{ github.event.pull_request.title }}" \
--arg url "${{ github.event.pull_request.html_url }}" \
--arg author "${{ github.event.pull_request.user.login }}" \
'{
content: ("🚀 **New PR:** " + $title + "\n🔗 <" + $url + ">\n👤 **Author:** " + $author),
thread_name: ($title + " by " + $author)
}')
curl -X POST "${{ secrets.DISCORD_WEBHOOK }}" \
-H "Content-Type: application/json" \
-d "$PAYLOAD"

55
.github/workflows/docs-pages.yml vendored Normal file
View file

@ -0,0 +1,55 @@
name: Deploy docs to GitHub Pages
on:
push:
branches:
- main
paths:
- "apps/docs/**"
- ".github/workflows/docs-pages.yml"
- ".github/actions/setup-node-pnpm/**"
- "package.json"
- "pnpm-lock.yaml"
- "pnpm-workspace.yaml"
workflow_dispatch:
concurrency:
group: docs-pages
cancel-in-progress: true
permissions:
contents: read
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
with:
install-args: "--frozen-lockfile"
- name: Run type check
run: pnpm --filter @roo-code/docs check-types
- name: Run lint
run: pnpm --filter @roo-code/docs lint
- name: Build docs
run: pnpm --filter @roo-code/docs build
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: apps/docs/build
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

View file

@ -1,74 +0,0 @@
name: Evals
on:
pull_request:
types: [labeled]
workflow_dispatch:
env:
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
jobs:
evals:
# Run if triggered manually or if PR has 'evals' label.
if: github.event_name == 'workflow_dispatch' || contains(github.event.label.name, 'evals')
runs-on: blacksmith-16vcpu-ubuntu-2404
timeout-minutes: 45
defaults:
run:
working-directory: packages/evals
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Create environment
run: |
cat > .env.local << EOF
OPENROUTER_API_KEY=${{ secrets.OPENROUTER_API_KEY || 'test-key-for-build' }}
EOF
cat > .env.development << EOF
NODE_ENV=development
DATABASE_URL=postgresql://postgres:password@db:5432/evals_development
REDIS_URL=redis://redis:6379
HOST_EXECUTION_METHOD=docker
EOF
- name: Build image
uses: docker/build-push-action@v6
with:
context: .
file: packages/evals/Dockerfile.runner
tags: evals-runner:latest
cache-from: type=gha
cache-to: type=gha,mode=max
push: false
load: true
- name: Tag image
run: docker tag evals-runner:latest evals-runner
- name: Start containers
run: |
docker compose up -d db redis
timeout 60 bash -c 'until docker compose exec -T db pg_isready -U postgres; do sleep 2; done'
timeout 60 bash -c 'until docker compose exec -T redis redis-cli ping | grep -q PONG; do sleep 2; done'
docker compose run --rm runner sh -c 'nc -z db 5432 && echo "✓ Runner -> Database connection successful"'
docker compose run --rm runner sh -c 'nc -z redis 6379 && echo "✓ Runner -> Redis connection successful"'
docker compose run --rm runner docker ps
- name: Run database migrations
run: docker compose run --rm runner pnpm --filter @roo-code/evals db:migrate
- name: Run evals
run: docker compose run --rm runner pnpm --filter @roo-code/evals cli --ci
- name: Cleanup
if: always()
run: docker compose down -v --remove-orphans

View file

@ -25,8 +25,6 @@ jobs:
ref: ${{ env.GIT_REF }}
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
with:
skip-checkout: 'true'
- name: Configure Git
run: |
git config user.name "github-actions[bot]"

View file

@ -1,17 +1,13 @@
name: Nightly Publish
on:
workflow_run:
workflows: ["Code QA Roo Code"]
types:
- completed
push:
branches: [main]
workflow_dispatch: # Allows manual triggering.
jobs:
publish-nightly:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
permissions:
contents: read # No tags pushed → read is enough.
@ -24,7 +20,6 @@ jobs:
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
with:
skip-checkout: 'true'
install-args: '--frozen-lockfile'
- name: Forge numeric Nightly version
id: version

View file

@ -1,46 +0,0 @@
name: Update Contributors
on:
push:
branches:
- main
workflow_dispatch:
jobs:
update-contributors:
runs-on: ubuntu-latest
permissions:
contents: write # Needed for pushing changes.
pull-requests: write # Needed for creating PRs.
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
- name: Disable Husky
run: |
echo "HUSKY=0" >> $GITHUB_ENV
git config --global core.hooksPath /dev/null
- name: Update contributors and format
run: |
pnpm update-contributors
npx prettier --write README.md
if git diff --quiet; then echo "changes=false" >> $GITHUB_OUTPUT; else echo "changes=true" >> $GITHUB_OUTPUT; fi
id: check-changes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create Pull Request
if: steps.check-changes.outputs.changes == 'true'
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "docs: update contributors list [skip ci]"
committer: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>"
branch: update-contributors
delete-branch: true
title: "Update contributors list"
body: |
Automated update of contributors list and related files
This PR was created automatically by a GitHub Action workflow and includes all changed files.
base: main

View file

@ -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 }}

View file

@ -1,84 +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 = '<!-- roo-preview-comment -->';
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)
);
if (existingComment) {
return;
}
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.';
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: comment
});

10
.gitignore vendored
View file

@ -3,6 +3,7 @@ dist
out
out-*
node_modules
package-lock.json
coverage/
mock/
@ -17,6 +18,7 @@ bin/
# Local prompts and rules
/local-prompts
AGENTS.local.md
# Test environment
.test_env
@ -45,3 +47,11 @@ logs
.qodo/
.vercel
.roo/mcp.json
# Qdrant
qdrant_storage/
# Architect plans
plans/
roo-cli-*.tar.gz*

View file

@ -18,6 +18,19 @@ fi
$pnpm_cmd run check-types
# Use dotenvx to securely load .env.local and run commands that depend on it
if [ -f ".env.local" ]; then
# Check if RUN_TESTS_ON_PUSH is set to true and run tests with dotenvx
if npx dotenvx get RUN_TESTS_ON_PUSH -f .env.local 2>/dev/null | grep -q "^true$"; then
npx dotenvx run -f .env.local -- $pnpm_cmd run test
fi
else
# Fallback: run tests if RUN_TESTS_ON_PUSH is set in regular environment
if [ "$RUN_TESTS_ON_PUSH" = "true" ]; then
$pnpm_cmd run test
fi
fi
# Check for new changesets.
NEW_CHANGESETS=$(find .changeset -name "*.md" ! -name "README.md" | wc -l | tr -d ' ')
echo "Changeset files: $NEW_CHANGESETS"

View file

@ -0,0 +1,86 @@
---
description: "Prepare a new release of the Roo Code CLI"
argument-hint: "[version-description]"
mode: code
---
1. Identify changes since the last CLI release:
- Get the last CLI release tag: `gh release list --limit 10 | grep "cli-v"`
- View changes since last release: `git log cli-v<last-version>..HEAD -- apps/cli --oneline`
- Or for uncommitted changes: `git diff --stat -- apps/cli`
2. Review and summarize the changes to determine an appropriate changelog entry. Group changes by type:
- **Added**: New features
- **Changed**: Changes to existing functionality
- **Fixed**: Bug fixes
- **Removed**: Removed features
- **Tests**: New or updated tests
3. Bump the version in `apps/cli/package.json`:
- Increment the patch version (e.g., 0.0.43 → 0.0.44) for bug fixes and minor changes
- Increment the minor version (e.g., 0.0.43 → 0.1.0) for new features
- Increment the major version (e.g., 0.0.43 → 1.0.0) for breaking changes
4. Update `apps/cli/CHANGELOG.md` with a new entry:
- Add a new section at the top (below the header) following this format:
```markdown
## [X.Y.Z] - YYYY-MM-DD
### Added
- Description of new features
### Changed
- Description of changes
### Fixed
- Description of bug fixes
```
- Use the current date in YYYY-MM-DD format
- Include links to relevant source files where helpful
- Describe changes from the user's perspective
5. Create a release branch and commit the changes:
```bash
# Ensure you're on main and up to date
git checkout main
git pull origin main
# Create a new branch for the release
git checkout -b cli-release-v<version>
# Commit the version bump and changelog update
git add apps/cli/package.json apps/cli/CHANGELOG.md
git commit -m "chore(cli): prepare release v<version>"
# Push the branch to origin
git push -u origin cli-release-v<version>
```
6. Create a pull request for the release:
```bash
gh pr create --title "chore(cli): prepare release v<version>" \
--body "## CLI Release v<version>
This PR prepares the CLI release v<version>.
### Changes
- Version bump in package.json
- Changelog update
### Checklist
- [ ] Version number is correct
- [ ] Changelog entry is complete and accurate
- [ ] All CI checks pass" \
--base main
```

80
.roo/commands/commit.md Normal file
View file

@ -0,0 +1,80 @@
---
description: "Commit and push changes with a descriptive message"
argument-hint: "[optional-context]"
mode: code
---
1. Analyze the current changes to understand what needs to be committed:
```bash
# Check for staged and unstaged changes
git status --short
# View the diff of all changes (staged and unstaged)
git diff HEAD
```
2. Based on the diff output, formulate a commit message following conventional commit format:
- **feat**: New feature or functionality
- **fix**: Bug fix
- **refactor**: Code restructuring without behavior change
- **docs**: Documentation changes
- **test**: Adding or updating tests
- **chore**: Maintenance tasks, dependencies, configs
- **style**: Formatting, whitespace, no logic changes
Format: `type(scope): brief description`
Examples:
- `feat(api): add user authentication endpoint`
- `fix(ui): resolve button alignment on mobile`
- `refactor(core): simplify error handling logic`
- `docs(readme): update installation instructions`
3. Stage all unstaged changes:
```bash
git add -A
```
4. Commit with the generated message:
```bash
git commit -m "type(scope): brief description"
```
**If pre-commit hooks fail:**
- Review the error output (linter errors, type checking errors, etc.)
- Fix the identified issues in the affected files
- Re-stage the fixes: `git add -A`
- Retry the commit: `git commit -m "type(scope): brief description"`
5. Push to the remote repository:
```bash
git push
```
**If pre-push hooks fail:**
- Review the error output (test failures, linter errors, etc.)
- Fix the identified issues in the affected files
- Stage and commit the fixes using steps 3-4
- Retry the push: `git push`
**Tips for good commit messages:**
- Keep the first line under 72 characters
- Use imperative mood ("add", "fix", "update", not "added", "fixes", "updated")
- Be specific but concise
- If multiple unrelated changes exist, consider splitting into separate commits
**Common hook failures and fixes:**
- **Linter errors**: Run the project's linter (e.g., `npm run lint` or `pnpm lint`) to see all issues, then fix them
- **Type checking errors**: Run type checker (e.g., `npx tsc --noEmit`) to identify type issues
- **Test failures**: Run tests (e.g., `npm test` or `pnpm test`) to identify failing tests and fix them
- **Format issues**: Run formatter (e.g., `npm run format` or `pnpm format`) to auto-fix formatting

45
.roo/commands/release.md Normal file
View file

@ -0,0 +1,45 @@
---
description: "Create a new release of the Roo Code extension"
argument-hint: patch | minor | major
mode: code
---
1. Identify the SHA corresponding to the most recent release using GitHub CLI: `gh release view --json tagName,targetCommitish,publishedAt`
2. Analyze changes since the last release using: `gh pr list --state merged --base main --json number,title,author,url,mergedAt,closingIssuesReferences --limit 1000 -q '[.[] | select(.mergedAt > "TIMESTAMP") | {number, title, author: .author.login, url, mergedAt, issues: .closingIssuesReferences}] | sort_by(.number)'`
3. For each PR with linked issues, fetch the issue details to get the issue reporter: `gh issue view ISSUE_NUMBER --json number,author -q '{number, reporter: .author.login}'`
4. Summarize the changes. If the user did not specify, ask them whether this should be a major, minor, or patch release.
5. Create a changeset in .changeset/v[version].md instead of directly modifying package.json. The format is:
```
---
"roo-cline": patch|minor|major
---
[list of changes]
```
- Always include contributor attribution and the PR number: use "(PR #<prNumber> by @username)".
- For PRs that close issues, include both the issue number and the PR number and authors: "- Fix: Description (#123 by @reporter, PR #456 by @contributor)"
- For PRs without linked issues, include the PR number and author: "- Add support for feature (PR #456 by @contributor)"
- Provide brief descriptions of each item to explain the change
- Order the list from most important to least important
- Example formats:
- With issue: "- Fix: Resolve memory leak in extension (#456 by @issueReporter, PR #789 by @prAuthor)"
- Without issue: "- Add support for Gemini 2.5 Pro caching (PR #789 by @contributor)"
- CRITICAL: Include EVERY SINGLE PR in the changeset - don't assume you know which ones are important. Count the total PRs to verify completeness and cross-reference the list to ensure nothing is missed.
6. If the generate_image tool is available, create a release image at `releases/[version]-release.png`
- The image should feature a realistic-looking kangaroo doing something human-like that relates to the main highlight of the release
- Pass `releases/template.png` as the reference image for aspect ratio and kangaroo style
- Add the generated image to .changeset/v[version].md before the list of changes with format: `![X.Y.Z Release - Description](/releases/X.Y.Z-release.png)`
7. If a major or minor release:
- Ask the user what the three most important areas to highlight are in the release
- Update the English version relevant announcement files and documentation (webview-ui/src/components/chat/Announcement.tsx, README.md, and the `latestAnnouncementId` in src/core/webview/ClineProvider.ts)
- Ask the user to confirm that the English version looks good to them before proceeding
- Use the new_task tool to create a subtask in `translate` mode with detailed instructions of which content needs to be translated into all supported languages (The READMEs as well as the translation strings)
8. Create a new branch for the release preparation: `git checkout -b release/v[version]`
9. Commit and push the changeset file and any documentation updates to the repository: `git add . && git commit -m "chore: add changeset for v[version]" && git push origin release/v[version]`
10. Create a pull request for the release: `gh pr create --title "Release v[version]" --body "Release preparation for v[version]. This PR includes the changeset and any necessary documentation updates." --base main --head release/v[version]`
11. The GitHub Actions workflow will automatically:
- Create a version bump PR when changesets are merged to main
- Update the CHANGELOG.md with proper formatting
- Publish the release when the version bump PR is merged

View file

@ -0,0 +1,72 @@
---
description: "Resolve merge conflicts intelligently using git history analysis"
argument-hint: "#PR-number"
mode: merge-resolver
---
Resolve merge conflicts for a specific pull request by analyzing git history, commit messages, and code changes to make intelligent resolution decisions.
## Quick Start
1. **Provide a PR number** (e.g., `#123` or just `123`)
2. The workflow will automatically:
- Fetch PR information (title, description, branches)
- Checkout the PR branch
- Rebase onto the target branch to reveal conflicts
- Analyze and resolve conflicts using git history
## Workflow Steps
### 1. Initialize PR Resolution
```bash
# Fetch PR info
gh pr view [PR_NUMBER] --json title,body,headRefName,baseRefName
# Checkout and rebase
gh pr checkout [PR_NUMBER] --force
git fetch origin main
GIT_EDITOR=true git rebase origin/main
```
### 2. Identify Conflicts
```bash
git status --porcelain | grep "^UU"
```
### 3. Analyze Each Conflict
For each conflicted file:
- Read the conflict markers
- Run `git blame` on conflicting sections
- Fetch commit messages for context
- Determine the intent behind each change
### 4. Apply Resolution Strategy
Based on the analysis:
- **Bugfixes** generally take precedence over features
- **Recent changes** are often more relevant (unless older is a security fix)
- **Combine** non-conflicting changes when possible
- **Preserve** test updates alongside code changes
### 5. Complete Resolution
```bash
git add [resolved-files]
GIT_EDITOR=true git rebase --continue
```
## Key Guidelines
- Always escape conflict markers with `\` when using `apply_diff`
- Document resolution decisions in the summary
- Verify no syntax errors after resolution
- Preserve valuable changes from both sides when possible
## Examples
- `/roo-resolve-conflicts #123` - Resolve conflicts for PR #123
- `/roo-resolve-conflicts 456` - Resolve conflicts for PR #456

View file

@ -0,0 +1,50 @@
---
description: "Translate and localize strings in the Roo Code extension"
argument-hint: "[language-code or 'all'] [string-key or file-path]"
mode: translate
---
Perform translation and localization tasks for the Roo Code extension. This command activates the translation workflow with comprehensive i18n guidelines.
## Quick Start
1. **Identify the translation scope:**
- If a specific language code is provided (e.g., `de`, `zh-CN`), focus on that language
- If `all` is specified, translate to all supported languages
- If a string key is provided, locate and translate that specific string
- If a file path is provided, work with that translation file
2. **Supported languages:** ca, de, en, es, fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, tr, vi, zh-CN, zh-TW
3. **Translation locations:**
- Core Extension: `src/i18n/locales/`
- WebView UI: `webview-ui/src/i18n/locales/`
## Workflow
1. If adding new strings:
- Add the English string first
- Ask for confirmation before translating to other languages
- Use `apply_diff` for efficient file updates
2. If updating existing strings:
- Identify all affected language files
- Update English first, then propagate changes
3. Validate your changes:
```bash
node scripts/find-missing-translations.js
```
## Key Guidelines
- Use informal speech (e.g., "du" not "Sie" in German)
- Keep technical terms like "token", "Prompt" in English
- Preserve all `{{variable}}` placeholders exactly
- Use `apply_diff` instead of `write_to_file` for existing files
## Examples
- `/roo-translate de` - Focus on German translations
- `/roo-translate all welcome.title` - Translate a specific key to all languages
- `/roo-translate zh-CN src/i18n/locales/zh-CN/core.json` - Work on specific file

View file

@ -0,0 +1,15 @@
# Roo Code Translation Guidance
This file contains brand voice, tone, and word choice guidelines for Roo Code translations.
## Brand Voice
<!-- Add brand voice guidelines here -->
## Tone
<!-- Add tone guidelines here -->
## Word Choice
<!-- Add word choice preferences here -->

6
.roo/roomotes.yml Normal file
View file

@ -0,0 +1,6 @@
version: "1.0"
commands:
- name: Install dependencies
run: pnpm install
timeout: 60

67
.roo/rules-debug/cli.md Normal file
View file

@ -0,0 +1,67 @@
# CLI Debugging with File-Based Logging
When debugging the CLI, `console.log` will break the TUI (Terminal User Interface). Use file-based logging to capture debug output without interfering with the application's display.
## File-Based Logging Strategy
1. **Write logs to a temporary file instead of console**:
- Create a log file at a known location, e.g., `/tmp/roo-cli-debug.log`
- Use `fs.appendFileSync()` to write timestamped log entries
- Example logging utility:
```typescript
import fs from "fs"
const DEBUG_LOG = "/tmp/roo-cli-debug.log"
function debugLog(message: string, data?: unknown) {
const timestamp = new Date().toISOString()
const entry = data
? `[${timestamp}] ${message}: ${JSON.stringify(data, null, 2)}\n`
: `[${timestamp}] ${message}\n`
fs.appendFileSync(DEBUG_LOG, entry)
}
```
2. **Clear the log file before each debugging session**:
- Run `echo "" > /tmp/roo-cli-debug.log` or use `fs.writeFileSync(DEBUG_LOG, "")` at app startup during debugging
## Iterative Debugging Workflow
Follow this feedback loop to systematically narrow down issues:
1. **Add targeted logging** at suspected problem areas based on your hypotheses
2. **Instruct the user** to reproduce the issue using the CLI normally
3. **Read the log file** after the user completes testing:
- Run `cat /tmp/roo-cli-debug.log` to retrieve the captured output
4. **Analyze the log output** to gather clues about:
- Execution flow and timing
- Variable values at key points
- Which code paths were taken
- Error conditions or unexpected states
5. **Refine your logging** based on findings—add more detail where needed, remove noise
6. **Ask the user to test again** with updated logging
7. **Repeat** until the root cause is identified
## Best Practices
- Log entry/exit points of functions under investigation
- Include relevant variable values and state information
- Use descriptive prefixes to categorize logs: `[STATE]`, `[EVENT]`, `[ERROR]`, `[FLOW]`
- Log both the "happy path" and error handling branches
- When dealing with async operations, log before and after `await` statements
- For user interactions, log the received input and the resulting action
## Example Debug Session
```typescript
// Add logging to investigate a picker selection issue
debugLog("[FLOW] PickerSelect onSelect called", { selectedIndex, item })
debugLog("[STATE] Current selection state", { currentValue, isOpen })
// After async operation
const result = await fetchOptions()
debugLog("[FLOW] fetchOptions completed", { resultCount: result.length })
```
Then ask: "Please reproduce the issue by [specific steps]. When you're done, let me know and I'll analyze the debug logs."

View file

@ -1,238 +1,113 @@
<extraction_workflow>
<mode_overview>
The Docs Extractor mode performs comprehensive analysis of features and components
to generate multi-audience documentation. It extracts technical details, business logic,
user workflows, and all related information to create documentation suitable for
end-users, developers, administrators, and stakeholders.
</mode_overview>
<overview>
Extract raw facts from a codebase about a feature or aspect.
Output is structured data for documentation teams to use.
Do NOT write documentation. Do NOT format prose. Do NOT make structure decisions.
</overview>
<initialization_phase>
<process>
<step number="1">
<title>Understand Documentation Request</title>
<title>Identify Target</title>
<actions>
<action>Parse the user's request to identify the feature or component.</action>
<action>Determine if the user has provided a documentation section for review or is requesting new documentation.</action>
<action>Default to user-friendly documentation unless technical docs are specifically requested.</action>
<action>Focus on practical benefits and real-world usage.</action>
<action>Note any specific aspects the user wants emphasized.</action>
<action>Parse the user's request to identify the feature/aspect</action>
<action>Clarify scope if ambiguous (ask one question max)</action>
</actions>
<note>The user will specify what they want documented in their initial message. The workflow branches based on whether a review is requested or new documentation is to be generated.</note>
</step>
<step number="2">
<title>Initial Feature Discovery</title>
<title>Discover Code</title>
<actions>
<action>Use semantic search to find all related code</action>
<action>Identify entry points and main components</action>
<action>Map high-level architecture</action>
</actions>
<tool_use><![CDATA[
<codebase_search>
<query>[feature name] implementation main entry point</query>
</codebase_search>
]]></tool_use>
</step>
</initialization_phase>
<analysis_phases>
<phase name="code_analysis">
<title>Technical Implementation Analysis</title>
<steps>
<step>
<action>Analyze source code structure</action>
<details>
- Identify classes, functions, and modules
- Extract method signatures and parameters
- Document return types and data structures
- Map inheritance and composition relationships
</details>
</step>
<step>
<action>Extract API specifications</action>
<details>
- REST endpoints with methods and parameters
- GraphQL schemas and resolvers
- WebSocket events and handlers
- RPC interfaces and protocols
</details>
</step>
<step>
<action>Document configuration options</action>
<details>
- Environment variables
- Configuration files and schemas
- Feature flags and toggles
- Runtime parameters
</details>
</step>
</steps>
</phase>
<phase name="business_logic_analysis">
<title>Business Logic and Workflow Extraction</title>
<steps>
<step>
<action>Map user workflows</action>
<details>
- User journey through the feature
- Decision points and branching logic
- State transitions and lifecycle
- User roles and permissions
</details>
</step>
<step>
<action>Document business rules</action>
<details>
- Validation logic and constraints
- Calculation formulas and algorithms
- Business process implementations
- Compliance and regulatory requirements
</details>
</step>
<step>
<action>Identify use cases</action>
<details>
- Primary use cases and scenarios
- Edge cases and special conditions
- Error scenarios and recovery
- Performance considerations
</details>
</step>
</steps>
</phase>
<phase name="integration_analysis">
<title>Dependencies and Integration Analysis</title>
<steps>
<step>
<action>Map external dependencies</action>
<details>
- Third-party libraries and versions
- External services and APIs
- Database connections and schemas
- Message queues and event systems
</details>
</step>
<step>
<action>Document integration points</action>
<details>
- Incoming webhooks and callbacks
- Outgoing API calls
- Event publishers and subscribers
- Shared data stores and caches
</details>
</step>
<step>
<action>Analyze data flow</action>
<details>
- Input data sources and formats
- Data transformations and mappings
- Output formats and destinations
- Data retention and lifecycle
</details>
</step>
</steps>
</phase>
<phase name="quality_analysis">
<title>Quality and Testing Analysis</title>
<steps>
<step>
<action>Assess test coverage</action>
<details>
- Unit test coverage and quality
- Integration test scenarios
- End-to-end test flows
- Performance test results
</details>
</step>
<step>
<action>Document error handling</action>
<details>
- Error types and codes
- Exception handling strategies
- Fallback mechanisms
- Recovery procedures
</details>
</step>
<step>
<action>Identify quality metrics</action>
<details>
- Code complexity metrics
- Performance benchmarks
- Security vulnerability assessments
- Maintainability indices
</details>
</step>
</steps>
</phase>
<phase name="security_analysis">
<title>Security and Compliance Analysis</title>
<steps>
<step>
<action>Document security measures</action>
<details>
- Authentication mechanisms
- Authorization and access control
- Data encryption methods
- Security headers and policies
</details>
</step>
<step>
<action>Identify vulnerabilities</action>
<details>
- Known security issues
- Potential attack vectors
- Mitigation strategies
- Security best practices
</details>
</step>
<step>
<action>Compliance requirements</action>
<details>
- Regulatory compliance (GDPR, HIPAA, etc.)
- Industry standards adherence
- Audit trail requirements
- Data privacy considerations
</details>
</step>
</steps>
</phase>
</analysis_phases>
<documentation_generation>
<note>This phase has two paths: Reviewing existing docs or Generating new docs. The path taken is determined in the initialization phase.</note>
<step number="1">
<title>Path 1: Review and Recommend Improvements</title>
<note>This path is followed if the user provided a documentation section for review.</note>
<actions>
<action>Compare the provided documentation against the analysis of the codebase.</action>
<action>Identify inaccuracies (technical, logical), omissions, and areas for improvement.</action>
<action>Categorize inaccuracies by severity (e.g., Critical, Major, Minor, Suggestion).</action>
<action>Formulate a structured recommendation in the chat, suitable for being copied to the docs team.</action>
<action>Do not write any files or make changes yourself.</action>
<action>The final output in the chat should ONLY be the structured recommendation, without any preceding conversational text.</action>
<action>Use codebase_search to find relevant files</action>
<action>Identify entry points, components, and related code</action>
<action>Map the boundaries of the feature</action>
</actions>
</step>
<step number="2">
<title>Path 2: Generate New Documentation</title>
<note>This path is followed if the user requested new documentation.</note>
<step number="3">
<title>Extract Facts</title>
<actions>
<action>Choose a documentation style (e.g., user-focused or comprehensive) from `2_documentation_patterns.xml`.</action>
<action>Structure the documentation with clear sections, examples, and user-friendly elements.</action>
<action>Create a `DOCS-TEMP-[feature].md` file with the generated content.</action>
<action>Use a conversational tone and practical examples from `7_user_friendly_examples.xml`.</action>
<action>Read code and extract facts into categories (see fact_categories)</action>
<action>Record file paths as sources for each fact</action>
<action>Do NOT interpret, summarize, or explain - just extract</action>
</actions>
</step>
</documentation_generation>
<completion_criteria>
<criterion>All code paths have been analyzed</criterion>
<criterion>Business logic is fully documented</criterion>
<criterion>Integration points are mapped</criterion>
<criterion>Security considerations are addressed</criterion>
<criterion>Documentation serves all target audiences</criterion>
<criterion>Metadata and cross-references are complete</criterion>
</completion_criteria>
<step number="4">
<title>Output Structured Data</title>
<actions>
<action>Write extraction to .roo/extraction/EXTRACT-[feature].yaml</action>
<action>Use the output schema (see output_format.xml)</action>
</actions>
</step>
</process>
<fact_categories>
<category name="identity">
<extracts>
<extract>Feature name as it appears in code</extract>
<extract>File paths where feature is implemented</extract>
<extract>Entry points (commands, UI elements, API endpoints)</extract>
</extracts>
</category>
<category name="behavior">
<extracts>
<extract>What the feature does (from code logic)</extract>
<extract>Inputs it accepts</extract>
<extract>Outputs it produces</extract>
<extract>Side effects (files created, state changed, etc.)</extract>
</extracts>
</category>
<category name="configuration">
<extracts>
<extract>Settings/options that affect behavior</extract>
<extract>Default values</extract>
<extract>Valid ranges or allowed values</extract>
<extract>Where configured (settings file, env var, UI)</extract>
</extracts>
</category>
<category name="constraints">
<extracts>
<extract>Prerequisites and dependencies</extract>
<extract>Limitations (what it cannot do)</extract>
<extract>Permissions required</extract>
<extract>Compatibility requirements</extract>
</extracts>
</category>
<category name="errors">
<extracts>
<extract>Error conditions in code</extract>
<extract>Error messages (exact text)</extract>
<extract>Recovery paths in code</extract>
</extracts>
</category>
<category name="ui">
<extracts>
<extract>UI components involved</extract>
<extract>User-visible labels and text</extract>
<extract>Interaction patterns</extract>
</extracts>
</category>
<category name="integration">
<extracts>
<extract>Other features this interacts with</extract>
<extract>External APIs or services called</extract>
<extract>Events emitted or consumed</extract>
</extracts>
</category>
</fact_categories>
<rules>
<rule>Extract facts, not opinions</rule>
<rule>Include source file paths for every fact</rule>
<rule>Use code identifiers and exact strings from source</rule>
<rule>Do NOT paraphrase - quote when possible</rule>
<rule>Do NOT decide what's important - extract everything relevant</rule>
<rule>Do NOT format for end users - output is for docs team</rule>
</rules>
</extraction_workflow>

View file

@ -1,419 +0,0 @@
<documentation_patterns>
<overview>
Standard patterns and templates for structuring extracted documentation
to serve end-users with clear, practical information.
</overview>
<output_structure>
<user_focused_template><![CDATA[
# [Feature Name]
[Brief, clear description of what the feature does and why it matters to users]
### Key Features
- [Feature 1 - written in user-friendly terms]
- [Feature 2 - focus on benefits]
- [Feature 3 - avoid technical jargon]
---
## Why This Matters
[Explain the problem this solves with a real-world example, like:]
**[Before scenario]**: [Description of the old/manual way]
- [Pain point 1]
- [Pain point 2]
**[With this feature]**: [Description of the improved experience]
## How it Works
[Simple explanation of the feature's operation, avoiding implementation details]
[Include visual representation if helpful - suggest where diagrams would help]
---
## Configuration
[User-friendly explanation of settings]
1. **[Setting Name]**:
- **Setting**: `[Technical name if needed]`
- **Description**: [What this does in plain language]
- **Default**: [Default value and what it means]
2. **[Setting Name]**:
- **Setting**: `[Technical name if needed]`
- **Description**: [What this does in plain language]
- **Default**: [Default value and what it means]
---
## Benefits
- **[Benefit 1]**: [Explanation of how this helps]
- **[Benefit 2]**: [Explanation of how this helps]
- **[Benefit 3]**: [Explanation of how this helps]
## Common Questions
**"[Common user question]"**
- [Clear, helpful answer]
- [Additional tips if relevant]
**"[Common user question]"**
- [Clear, helpful answer]
- [Additional tips if relevant]
**"[Common user question]"**
- [Clear, helpful answer]
- [Additional tips if relevant]
## Need Help?
If you run into issues:
1. [First troubleshooting step]
2. [Second troubleshooting step]
3. [Where to get help - e.g., GitHub Issues link]
]]></user_focused_template>
<comprehensive_template><![CDATA[
# [Feature Name] Documentation
## Table of Contents
1. [Overview](#overview)
2. [Quick Start](#quick-start)
3. [Architecture](#architecture)
4. [API Reference](#api-reference)
5. [Configuration](#configuration)
6. [User Guide](#user-guide)
7. [Developer Guide](#developer-guide)
8. [Administrator Guide](#administrator-guide)
9. [Security](#security)
10. [Performance](#performance)
11. [Troubleshooting](#troubleshooting)
12. [FAQ](#faq)
13. [Changelog](#changelog)
14. [References](#references)
[Rest of comprehensive template remains available for technical documentation needs]
]]></comprehensive_template>
</output_structure>
<user_friendly_patterns>
<before_after_examples>
<template><![CDATA[
**Previously**: When Roo needed to understand your project, you'd see multiple requests like:
- "Can I read `src/app.js`?" → You approve
- "Now can I read `src/utils.js`?" → You approve
- "And can I read `src/config.json`?" → You approve
**Now**: Roo asks once to read all related files together, getting the full picture immediately.
]]></template>
</before_after_examples>
<visual_separators>
<use_case>Between major sections</use_case>
<format>---</format>
<purpose>Improve readability and scanning</purpose>
</visual_separators>
<conversational_questions>
<template><![CDATA[
## Common Questions
**"Why would I want to disable this feature?"**
- You're using a less capable AI model that works better with single files
- You want more control over which files are accessed
- You're working with very large files that might exceed memory limits
**"What happens if some files are blocked?"**
- Roo will read the files you approve and work with those
- Files blocked by `.rooignore` will be automatically excluded
- You can still approve/deny individual files in the batch
]]></template>
</conversational_questions>
<practical_examples>
<guideline>Show real tool output or interface elements</guideline>
<guideline>Use actual file paths and settings names</guideline>
<guideline>Include common error messages and solutions</guideline>
</practical_examples>
<benefit_focused_lists>
<template><![CDATA[
## Benefits
- **Faster Results**: Get answers in one step instead of multiple back-and-forth approvals
- **Better Context**: Roo understands relationships between files immediately
- **Less Interruption**: Approve once and let Roo work uninterrupted
]]></template>
</benefit_focused_lists>
<troubleshooting_section>
<template><![CDATA[
## Troubleshooting
**"Roo is asking for too many files at once"**
- Lower the concurrent file limit in settings
- You can still approve or deny individual files in the batch dialog
**"The feature isn't working as expected"**
- Check that "Enable concurrent file reads" is turned on in settings
- Verify your concurrent file limit is set appropriately (default: 100)
- Some AI models may not support this feature effectively
]]></template>
</troubleshooting_section>
<help_section>
<template><![CDATA[
## Need Help?
If you run into issues:
1. Check the [FAQ section](/faq) for common solutions
2. Report problems on [GitHub Issues](https://github.com/RooCodeInc/Roo-Code/issues)
3. Include what you were trying to do and any error messages
]]></template>
</help_section>
</user_friendly_patterns>
<audience_specific_sections>
<audience type="end_users">
<focus_areas>
<area>Step-by-step tutorials with screenshots</area>
<area>Common use case examples</area>
<area>Troubleshooting guides for user errors</area>
<area>Feature benefits and value propositions</area>
</focus_areas>
<writing_style>
<guideline>Use simple, non-technical language</guideline>
<guideline>Include visual aids and examples</guideline>
<guideline>Focus on outcomes rather than implementation</guideline>
<guideline>Provide clear action steps</guideline>
</writing_style>
</audience>
<audience type="developers">
<focus_areas>
<area>Code examples and snippets</area>
<area>API specifications and contracts</area>
<area>Integration patterns and best practices</area>
<area>Performance optimization techniques</area>
</focus_areas>
<writing_style>
<guideline>Use precise technical terminology</guideline>
<guideline>Include code samples in multiple languages</guideline>
<guideline>Document edge cases and limitations</guideline>
<guideline>Provide debugging and testing guidance</guideline>
</writing_style>
</audience>
<audience type="administrators">
<focus_areas>
<area>Deployment and configuration procedures</area>
<area>Monitoring and maintenance tasks</area>
<area>Security hardening guidelines</area>
<area>Backup and disaster recovery</area>
</focus_areas>
<writing_style>
<guideline>Focus on operational aspects</guideline>
<guideline>Include command-line examples</guideline>
<guideline>Document automation opportunities</guideline>
<guideline>Emphasize security and compliance</guideline>
</writing_style>
</audience>
<audience type="stakeholders">
<focus_areas>
<area>Business value and ROI</area>
<area>Feature capabilities and limitations</area>
<area>Competitive advantages</area>
<area>Risk assessment and mitigation</area>
</focus_areas>
<writing_style>
<guideline>Use business-oriented language</guideline>
<guideline>Include metrics and KPIs</guideline>
<guideline>Focus on strategic benefits</guideline>
<guideline>Provide executive summaries</guideline>
</writing_style>
</audience>
</audience_specific_sections>
<metadata_patterns>
<version_info>
<template><![CDATA[
### Version Compatibility Matrix
| Component | Min Version | Recommended | Max Version | Notes |
|-----------|-------------|-------------|-------------|-------|
| [Component] | [version] | [version] | [version] | [notes] |
]]></template>
</version_info>
<deprecation_notice>
<template><![CDATA[
> ⚠️ **Deprecation Notice**
>
> This feature/method is deprecated as of version [X.Y.Z].
> - **Deprecated**: [date]
> - **Removal Target**: [version/date]
> - **Migration Path**: [See migration guide](#migration)
> - **Replacement**: [new feature/method]
]]></template>
</deprecation_notice>
<security_warning>
<template><![CDATA[
> 🔒 **Security Consideration**
>
> [Description of security concern]
> - **Risk Level**: [High/Medium/Low]
> - **Affected Versions**: [versions]
> - **Mitigation**: [steps to address]
> - **References**: [CVE/advisory links]
]]></template>
</security_warning>
<performance_note>
<template><![CDATA[
> ⚡ **Performance Impact**
>
> [Description of performance consideration]
> - **Impact**: [metrics/benchmarks]
> - **Optimization**: [recommended approach]
> - **Trade-offs**: [considerations]
]]></template>
</performance_note>
</metadata_patterns>
<code_documentation_patterns>
<api_endpoint>
<template><![CDATA[
### `[METHOD] /api/[path]`
**Description**: [What this endpoint does]
**Authentication**: [Required/Optional] - [Type]
**Parameters**:
| Name | Type | Required | Description | Example |
|------|------|----------|-------------|---------|
| [param] | [type] | [Yes/No] | [description] | [example] |
**Request Body**:
```json
{
"field": "value"
}
```
**Response**:
- **Success (200)**:
```json
{
"status": "success",
"data": {}
}
```
- **Error (4xx/5xx)**:
```json
{
"error": "error_code",
"message": "Human readable message"
}
```
**Example**:
```bash
curl -X [METHOD] https://api.example.com/[path] \
-H "Authorization: Bearer [token]" \
-H "Content-Type: application/json" \
-d '{"field": "value"}'
```
]]></template>
</api_endpoint>
<function_documentation>
<template><![CDATA[
### `functionName(parameters)`
**Purpose**: [What this function does]
**Parameters**:
- `param1` (Type): [Description]
- `param2` (Type, optional): [Description] - Default: [value]
**Returns**: `Type` - [Description of return value]
**Throws**:
- `ErrorType`: [When this error occurs]
**Example**:
```typescript
const result = functionName(value1, value2);
// Expected output: [description]
```
**Notes**:
- [Important consideration 1]
- [Important consideration 2]
]]></template>
</function_documentation>
<configuration_option>
<template><![CDATA[
### `CONFIG_NAME`
**Type**: `string | number | boolean`
**Default**: `default_value`
**Environment Variable**: `APP_CONFIG_NAME`
**Description**: [What this configuration controls]
**Valid Values**:
- `value1`: [Description]
- `value2`: [Description]
**Example**:
```yaml
config:
name: value
```
**Impact**: [What changes when this is modified]
]]></template>
</configuration_option>
</code_documentation_patterns>
<cross_reference_patterns>
<internal_link>
<format>[Link Text](#section-anchor)</format>
<example>[See Configuration Guide](#configuration)</example>
</internal_link>
<external_link>
<format>[Link Text](https://external.url)</format>
<example>[Official Documentation](https://docs.example.com)</example>
</external_link>
<related_feature>
<template><![CDATA[
> 📌 **Related Features**
> - [Feature A](../feature-a/README.md): [How it relates]
> - [Feature B](../feature-b/README.md): [How it relates]
]]></template>
</related_feature>
<see_also>
<template><![CDATA[
> 👉 **See Also**
> - [Related Topic 1](#anchor1)
> - [Related Topic 2](#anchor2)
> - [External Resource](https://example.com)
]]></template>
</see_also>
</cross_reference_patterns>
</documentation_patterns>

View file

@ -0,0 +1,85 @@
<verification_workflow>
<overview>
Compare provided documentation against actual codebase implementation.
Output is a structured diff of claims vs reality.
Do NOT rewrite the docs. Do NOT suggest wording. Just report discrepancies.
</overview>
<process>
<step number="1">
<title>Receive Documentation</title>
<actions>
<action>User provides documentation to verify (text, file, or URL)</action>
<action>Identify the feature/aspect being documented</action>
</actions>
</step>
<step number="2">
<title>Extract Claims</title>
<actions>
<action>Parse the documentation into discrete claims</action>
<action>Tag each claim with a category (behavior, config, constraint, etc.)</action>
<action>Record the exact quote from the documentation</action>
</actions>
</step>
<step number="3">
<title>Verify Against Code</title>
<actions>
<action>For each claim, find the relevant code</action>
<action>Compare claim to actual implementation</action>
<action>Record: ACCURATE, INACCURATE, OUTDATED, MISSING_CONTEXT, or UNVERIFIABLE</action>
<action>For inaccuracies, record what the code actually does</action>
</actions>
</step>
<step number="4">
<title>Output Verification Report</title>
<actions>
<action>Write verification to .roo/extraction/VERIFY-[feature].yaml</action>
<action>Use the output schema (see output_format.xml)</action>
</actions>
</step>
</process>
<verification_statuses>
<status name="ACCURATE">
<meaning>Claim matches implementation</meaning>
</status>
<status name="INACCURATE">
<meaning>Claim contradicts implementation</meaning>
<requires>What the code actually does</requires>
</status>
<status name="OUTDATED">
<meaning>Claim was once true but code has changed</meaning>
<requires>Current behavior</requires>
</status>
<status name="MISSING_CONTEXT">
<meaning>Claim is true but omits important information</meaning>
<requires>The missing context</requires>
</status>
<status name="UNVERIFIABLE">
<meaning>Cannot find code to verify this claim</meaning>
<requires>Search paths attempted</requires>
</status>
</verification_statuses>
<claim_categories>
<category>behavior</category>
<category>configuration</category>
<category>constraint</category>
<category>error_handling</category>
<category>ui</category>
<category>integration</category>
<category>prerequisite</category>
</claim_categories>
<rules>
<rule>Verify facts, not writing quality</rule>
<rule>Report what code does, not what docs should say</rule>
<rule>Include source file paths as evidence</rule>
<rule>Do NOT suggest documentation rewrites</rule>
<rule>Do NOT evaluate if docs are "good" - only if they're accurate</rule>
<rule>Quote exact code when showing discrepancies</rule>
</rules>
</verification_workflow>

View file

@ -1,410 +0,0 @@
<analysis_techniques>
<overview>
Comprehensive techniques for analyzing code and extracting documentation-worthy
information from various aspects of a codebase.
</overview>
<code_analysis_techniques>
<technique name="entry_point_analysis">
<description>
Identify and analyze main entry points to understand feature flow
</description>
<steps>
<step>Search for main functions, controllers, or route handlers</step>
<step>Trace execution flow from entry to exit</step>
<step>Map decision branches and conditionals</step>
<step>Document input validation and preprocessing</step>
</steps>
<tools><![CDATA[
<!-- Find entry points -->
<codebase_search>
<query>main function app.listen server.start router controller handler</query>
</codebase_search>
<!-- Analyze specific entry point -->
<read_file>
<path>src/controllers/feature.controller.ts</path>
</read_file>
<!-- Find all routes -->
<search_files>
<path>src</path>
<regex>(app\.(get|post|put|delete)|@(Get|Post|Put|Delete)|router\.(get|post|put|delete))</regex>
</search_files>
]]></tools>
</technique>
<technique name="api_extraction">
<description>
Extract API specifications from code implementations
</description>
<patterns>
<pattern type="rest">
<search_regex><![CDATA[
(app|router)\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]
]]></search_regex>
<extraction>
- HTTP method
- Route path
- Path parameters
- Query parameters
- Request body schema
- Response schemas
- Status codes
</extraction>
</pattern>
<pattern type="graphql">
<search_regex><![CDATA[
type\s+(Query|Mutation|Subscription)\s*{[^}]+}|@(Query|Mutation|Resolver)
]]></search_regex>
<extraction>
- Schema types
- Resolvers
- Input types
- Return types
- Field arguments
</extraction>
</pattern>
</patterns>
</technique>
<technique name="dependency_mapping">
<description>
Map all dependencies and integration points
</description>
<analysis_points>
<point>Import statements and require calls</point>
<point>Package.json dependencies</point>
<point>External API calls</point>
<point>Database connections</point>
<point>Message queue integrations</point>
<point>File system operations</point>
</analysis_points>
<tools><![CDATA[
<!-- Find all imports -->
<search_files>
<path>src</path>
<regex>^import\s+.*from\s+['"]([^'"]+)['"]|require\s*\(\s*['"]([^'"]+)['"]\s*\)</regex>
</search_files>
<!-- Analyze package dependencies -->
<read_file>
<path>package.json</path>
</read_file>
<!-- Find external API calls -->
<search_files>
<path>src</path>
<regex>(fetch|axios|http\.request|request\(|\.get\(|\.post\()</regex>
</search_files>
]]></tools>
</technique>
<technique name="data_model_extraction">
<description>
Extract data models, schemas, and type definitions
</description>
<sources>
<source type="typescript">
<patterns>
- interface definitions
- type aliases
- class declarations
- enum definitions
</patterns>
</source>
<source type="database">
<patterns>
- Schema definitions
- Migration files
- Model definitions (ORM)
- SQL CREATE statements
</patterns>
</source>
<source type="validation">
<patterns>
- JSON Schema
- Joi/Yup schemas
- Validation decorators
- Custom validators
</patterns>
</source>
</sources>
<extraction_example><![CDATA[
<!-- Find TypeScript interfaces -->
<search_files>
<path>src</path>
<regex>^export\s+(interface|type|class|enum)\s+(\w+)</regex>
</search_files>
<!-- Find database models -->
<search_files>
<path>src/models</path>
<regex>@(Entity|Table|Model)|class\s+\w+\s+extends\s+(Model|BaseEntity)</regex>
</search_files>
]]></extraction_example>
</technique>
<technique name="business_logic_extraction">
<description>
Identify and document business rules and logic
</description>
<indicators>
<indicator>Complex conditional statements</indicator>
<indicator>Calculation functions</indicator>
<indicator>Validation rules</indicator>
<indicator>State machines</indicator>
<indicator>Business-specific constants</indicator>
<indicator>Domain-specific algorithms</indicator>
</indicators>
<documentation_focus>
<focus>Why the logic exists (business requirement)</focus>
<focus>When the logic applies (conditions)</focus>
<focus>What the logic does (transformation)</focus>
<focus>Edge cases and exceptions</focus>
<focus>Business impact of changes</focus>
</documentation_focus>
</technique>
<technique name="error_handling_analysis">
<description>
Document error handling strategies and recovery mechanisms
</description>
<analysis_areas>
<area>Try-catch blocks and error boundaries</area>
<area>Custom error classes and types</area>
<area>Error codes and messages</area>
<area>Logging strategies</area>
<area>Fallback mechanisms</area>
<area>Retry logic</area>
<area>Circuit breakers</area>
</analysis_areas>
<search_patterns><![CDATA[
<!-- Find error handling -->
<search_files>
<path>src</path>
<regex>try\s*{|catch\s*\(|throw\s+new|class\s+\w*Error\s+extends</regex>
</search_files>
<!-- Find error constants -->
<search_files>
<path>src</path>
<regex>ERROR_|_ERROR|ErrorCode|errorCode</regex>
</search_files>
]]></search_patterns>
</technique>
<technique name="security_analysis">
<description>
Identify security measures and potential vulnerabilities
</description>
<security_checks>
<check category="authentication">
<patterns>
- JWT implementation
- Session management
- OAuth flows
- API key handling
</patterns>
</check>
<check category="authorization">
<patterns>
- Role-based access control
- Permission checks
- Resource ownership validation
- Access control lists
</patterns>
</check>
<check category="data_protection">
<patterns>
- Encryption usage
- Hashing algorithms
- Sensitive data handling
- PII protection
</patterns>
</check>
<check category="input_validation">
<patterns>
- Input sanitization
- SQL injection prevention
- XSS protection
- CSRF tokens
</patterns>
</check>
</security_checks>
</technique>
<technique name="performance_analysis">
<description>
Identify performance characteristics and optimization opportunities
</description>
<analysis_points>
<point>Database query patterns (N+1 queries)</point>
<point>Caching strategies</point>
<point>Async/await usage</point>
<point>Batch processing</point>
<point>Resource pooling</point>
<point>Memory management</point>
<point>Algorithm complexity</point>
</analysis_points>
<metrics_to_document>
<metric>Time complexity of algorithms</metric>
<metric>Space complexity</metric>
<metric>Database query counts</metric>
<metric>API response times</metric>
<metric>Memory usage patterns</metric>
<metric>Concurrent request handling</metric>
</metrics_to_document>
</technique>
<technique name="test_coverage_analysis">
<description>
Analyze test coverage and quality
</description>
<test_types>
<type name="unit_tests">
<location>__tests__, *.test.ts, *.spec.ts</location>
<analysis>Function-level coverage</analysis>
</type>
<type name="integration_tests">
<location>integration/, e2e/</location>
<analysis>Feature workflow coverage</analysis>
</type>
<type name="api_tests">
<location>api-tests/, *.api.test.ts</location>
<analysis>Endpoint coverage</analysis>
</type>
</test_types>
<coverage_analysis><![CDATA[
<!-- Find test files -->
<search_files>
<path>src</path>
<regex>\.(test|spec)\.(ts|js|tsx|jsx)$</regex>
<file_pattern>*.test.ts</file_pattern>
</search_files>
<!-- Analyze test descriptions -->
<search_files>
<path>src</path>
<regex>(describe|it|test)\s*\(\s*['"`]([^'"`]+)['"`]</regex>
</search_files>
]]></coverage_analysis>
</technique>
<technique name="configuration_extraction">
<description>
Extract all configuration options and their impacts
</description>
<configuration_sources>
<source>Environment variables (.env files)</source>
<source>Configuration files (config.json, settings.yml)</source>
<source>Command-line arguments</source>
<source>Feature flags</source>
<source>Build-time constants</source>
</configuration_sources>
<documentation_requirements>
<requirement>Default values</requirement>
<requirement>Valid value ranges</requirement>
<requirement>Impact on behavior</requirement>
<requirement>Dependencies between configs</requirement>
<requirement>Security implications</requirement>
</documentation_requirements>
</technique>
</code_analysis_techniques>
<workflow_analysis>
<technique name="user_journey_mapping">
<description>
Map complete user workflows through the feature
</description>
<steps>
<step>Identify user entry points (UI, API, CLI)</step>
<step>Trace user actions through the system</step>
<step>Document decision points and branches</step>
<step>Map data transformations at each step</step>
<step>Identify exit points and outcomes</step>
</steps>
<deliverables>
<deliverable>User flow diagrams</deliverable>
<deliverable>Step-by-step procedures</deliverable>
<deliverable>Decision trees</deliverable>
<deliverable>State transition diagrams</deliverable>
</deliverables>
</technique>
<technique name="integration_flow_analysis">
<description>
Document how the feature integrates with other systems
</description>
<integration_types>
<type>Synchronous API calls</type>
<type>Asynchronous messaging</type>
<type>Event-driven interactions</type>
<type>Batch processing</type>
<type>Real-time streaming</type>
</integration_types>
<documentation_focus>
<focus>Integration protocols and formats</focus>
<focus>Authentication mechanisms</focus>
<focus>Error handling and retries</focus>
<focus>Data transformation requirements</focus>
<focus>SLA and performance expectations</focus>
</documentation_focus>
</technique>
</workflow_analysis>
<metadata_extraction>
<technique name="version_compatibility">
<sources>
<source>Package.json engines field</source>
<source>README compatibility sections</source>
<source>Migration guides</source>
<source>Breaking change documentation</source>
</sources>
<extraction_pattern><![CDATA[
<!-- Find version requirements -->
<search_files>
<path>.</path>
<regex>"engines":|"peerDependencies":|requires?\s+\w+\s+version|compatible\s+with</regex>
</search_files>
]]></extraction_pattern>
</technique>
<technique name="deprecation_tracking">
<indicators>
<indicator>@deprecated annotations</indicator>
<indicator>TODO: deprecate comments</indicator>
<indicator>Legacy code markers</indicator>
<indicator>Migration warnings</indicator>
</indicators>
<documentation_requirements>
<requirement>Deprecation date</requirement>
<requirement>Removal timeline</requirement>
<requirement>Migration path</requirement>
<requirement>Alternative solutions</requirement>
</documentation_requirements>
</technique>
</metadata_extraction>
<quality_indicators>
<indicator name="documentation_completeness">
<checks>
<check>All public APIs documented</check>
<check>Examples provided for complex features</check>
<check>Error scenarios covered</check>
<check>Configuration options explained</check>
<check>Security considerations addressed</check>
</checks>
</indicator>
<indicator name="code_quality_metrics">
<metrics>
<metric>Cyclomatic complexity</metric>
<metric>Code duplication</metric>
<metric>Test coverage percentage</metric>
<metric>Documentation coverage</metric>
<metric>Technical debt indicators</metric>
</metrics>
</indicator>
</quality_indicators>
</analysis_techniques>

View file

@ -0,0 +1,133 @@
<output_format>
<overview>
Structured data output formats for extraction and verification.
All output is YAML. No prose. No markdown formatting.
This data feeds into documentation-writer mode.
</overview>
<extraction_schema>
<description>Schema for EXTRACT-[feature].yaml files</description>
<template>
feature:
name: [feature name from code]
slug: [lowercase-hyphenated identifier]
extracted_at: [ISO timestamp]
source_files:
- [list of primary files]
identity:
entry_points:
- type: [command|ui|api|event]
name: [identifier]
location: [file:line]
components:
- name: [component name]
file: [path]
purpose: [one line from code comments or inferred]
behavior:
primary_action: [what it does - from code]
inputs:
- name: [input name]
type: [data type]
required: [true|false]
source: [file:line]
outputs:
- name: [output name]
type: [data type]
source: [file:line]
side_effects:
- description: [what changes]
source: [file:line]
configuration:
- name: [setting name]
key: [config key path]
type: [data type]
default: [default value]
valid_values: [list or range]
effect: [what it changes]
source: [file:line]
constraints:
prerequisites:
- description: [requirement]
source: [file:line]
limitations:
- description: [what cannot be done]
source: [file:line]
permissions:
- description: [permission needed]
source: [file:line]
errors:
- condition: [when this error occurs]
message: "[exact error message text]"
code: [error code if any]
source: [file:line]
ui:
components:
- name: [component name]
type: [button|panel|input|etc]
label: "[visible text]"
source: [file:line]
interactions:
- trigger: [user action]
result: [what happens]
source: [file:line]
integration:
internal:
- feature: [other feature name]
relationship: [how they interact]
source: [file:line]
external:
- service: [external service]
api: [endpoint or method]
source: [file:line]
</template>
</extraction_schema>
<verification_schema>
<description>Schema for VERIFY-[feature].yaml files</description>
<template>
verification:
feature: [feature name]
doc_source: [where the docs came from]
verified_at: [ISO timestamp]
summary:
total_claims: [count]
accurate: [count]
inaccurate: [count]
outdated: [count]
missing_context: [count]
unverifiable: [count]
claims:
- id: [claim-1]
quote: "[exact text from documentation]"
category: [behavior|configuration|constraint|error_handling|ui|integration|prerequisite]
status: [ACCURATE|INACCURATE|OUTDATED|MISSING_CONTEXT|UNVERIFIABLE]
evidence:
code_file: [file:line]
actual_behavior: [what code does - only if status is not ACCURATE]
code_quote: "[relevant code snippet]"
</template>
</verification_schema>
<output_rules>
<rule>Use YAML, not JSON or markdown</rule>
<rule>Include source file:line for every fact</rule>
<rule>Quote exact strings from code using double quotes</rule>
<rule>Use null for unknown/missing values, not empty strings</rule>
<rule>Keep descriptions factual and brief - one line max</rule>
<rule>Do NOT add commentary, suggestions, or explanations</rule>
</output_rules>
<file_naming>
<extraction>EXTRACT-[feature-slug].yaml</extraction>
<verification>VERIFY-[feature-slug].yaml</verification>
<location>.roo/extraction/</location>
</file_naming>
</output_format>

View file

@ -1,398 +0,0 @@
<tool_usage_guide>
<overview>
Specific guidance on using tools effectively for comprehensive documentation extraction,
with emphasis on gathering complete information across all aspects of a feature.
</overview>
<tool_sequence>
<priority level="1">
<tool>codebase_search</tool>
<purpose>Initial discovery of feature-related code</purpose>
<usage_patterns>
<pattern>
<scenario>Finding feature entry points</scenario>
<example><![CDATA[
<codebase_search>
<query>authentication login user session JWT token</query>
</codebase_search>
]]></example>
</pattern>
<pattern>
<scenario>Locating business logic</scenario>
<example><![CDATA[
<codebase_search>
<query>calculate pricing discount tax invoice billing</query>
</codebase_search>
]]></example>
</pattern>
<pattern>
<scenario>Finding configuration</scenario>
<example><![CDATA[
<codebase_search>
<query>config settings environment variables .env process.env</query>
</codebase_search>
]]></example>
</pattern>
</usage_patterns>
</priority>
<priority level="2">
<tool>list_code_definition_names</tool>
<purpose>Understanding code structure and organization</purpose>
<best_practices>
<practice>Use on directories containing core feature logic</practice>
<practice>Analyze both implementation and test directories</practice>
<practice>Look for patterns in naming conventions</practice>
</best_practices>
<example><![CDATA[
<list_code_definition_names>
<path>src/features/authentication</path>
</list_code_definition_names>
]]></example>
</priority>
<priority level="3">
<tool>read_file</tool>
<purpose>Deep analysis of specific implementations</purpose>
<strategy>
<step>Read main feature files first</step>
<step>Follow imports to understand dependencies</step>
<step>Read test files to understand expected behavior</step>
<step>Examine configuration and type definition files</step>
</strategy>
<batch_reading><![CDATA[
<read_file>
<args>
<file>
<path>src/controllers/auth.controller.ts</path>
</file>
<file>
<path>src/services/auth.service.ts</path>
</file>
<file>
<path>src/models/user.model.ts</path>
</file>
<file>
<path>src/types/auth.types.ts</path>
</file>
<file>
<path>src/__tests__/auth.test.ts</path>
</file>
</args>
</read_file>
]]></batch_reading>
</priority>
<priority level="4">
<tool>search_files</tool>
<purpose>Finding specific patterns and implementations</purpose>
<use_cases>
<use_case>
<description>Find all API endpoints</description>
<example><![CDATA[
<search_files>
<path>src</path>
<regex>@(Get|Post|Put|Delete|Patch)\(['"]([^'"]+)['"]|router\.(get|post|put|delete|patch)\(['"]([^'"]+)['"]</regex>
</search_files>
]]></example>
</use_case>
<use_case>
<description>Find error handling patterns</description>
<example><![CDATA[
<search_files>
<path>src</path>
<regex>throw new \w+Error|catch \(|\.catch\(|try \{</regex>
</search_files>
]]></example>
</use_case>
<use_case>
<description>Find configuration usage</description>
<example><![CDATA[
<search_files>
<path>src</path>
<regex>process\.env\.\w+|config\.get\(['"]([^'"]+)['"]|getConfig\(\)</regex>
</search_files>
]]></example>
</use_case>
</use_cases>
</priority>
</tool_sequence>
<documentation_generation_tools>
<tool name="write_to_file">
<purpose>Create the final documentation file when generating new documentation from scratch.</purpose>
<note>This tool is NOT used when reviewing a user-provided document section. In that scenario, feedback is provided directly in the chat.</note>
<file_naming>DOCS-TEMP-[feature-name].md</file_naming>
<best_practices>
<practice>Use descriptive feature names in filename</practice>
<practice>Include table of contents with anchors</practice>
<practice>Use consistent markdown formatting</practice>
<practice>Include code examples with syntax highlighting</practice>
</best_practices>
<example><![CDATA[
<write_to_file>
<path>DOCS-TEMP-authentication-system.md</path>
<content>
# Authentication System Documentation
## Table of Contents
1. [Overview](#overview)
2. [Architecture](#architecture)
...
## Overview
The authentication system provides secure user authentication using JWT tokens...
</content>
<line_count>...</line_count>
</write_to_file>
]]></example>
</tool>
<tool name="ask_followup_question">
<purpose>Clarify requirements when multiple interpretations exist</purpose>
<when_to_use>
<scenario>Multiple features with similar names exist</scenario>
<scenario>Documentation depth needs clarification</scenario>
<scenario>Target audience priorities need definition</scenario>
</when_to_use>
<examples>
<example><![CDATA[
<ask_followup_question>
<question>Which aspects of the authentication system should I focus on?</question>
<follow_up>
<suggest>Complete authentication flow including JWT tokens, session management, and OAuth integration</suggest>
<suggest>Only the JWT token implementation and validation</suggest>
<suggest>OAuth2 integration with external providers</suggest>
<suggest>Password reset and account recovery workflows</suggest>
</follow_up>
</ask_followup_question>
]]></example>
<example><![CDATA[
<ask_followup_question>
<question>What level of technical detail should the documentation include?</question>
<follow_up>
<suggest>High-level overview suitable for all audiences</suggest>
<suggest>Detailed technical implementation for developers</suggest>
<suggest>API reference with code examples</suggest>
<suggest>Complete coverage for all audience types</suggest>
</follow_up>
</ask_followup_question>
]]></example>
</examples>
</tool>
</documentation_generation_tools>
<analysis_strategies>
<strategy name="comprehensive_file_discovery">
<description>
Systematic approach to finding all files related to a feature
</description>
<steps>
<step>
<action>Start with semantic search</action>
<tool_use><![CDATA[
<codebase_search>
<query>feature implementation main logic core functionality</query>
</codebase_search>
]]></tool_use>
</step>
<step>
<action>List directory structure</action>
<tool_use><![CDATA[
<list_files>
<path>src/features</path>
<recursive>true</recursive>
</list_files>
]]></tool_use>
</step>
<step>
<action>Find related tests</action>
<tool_use><![CDATA[
<search_files>
<path>src</path>
<regex>describe\(['"].*Feature.*['"]|test\(['"].*feature.*['"]</regex>
<file_pattern>*.test.ts</file_pattern>
</search_files>
]]></tool_use>
</step>
<step>
<action>Locate configuration files</action>
<tool_use><![CDATA[
<search_files>
<path>.</path>
<regex>feature.*config|settings.*feature</regex>
<file_pattern>*.json</file_pattern>
</search_files>
]]></tool_use>
</step>
</steps>
</strategy>
<strategy name="dependency_chain_analysis">
<description>
Follow import chains to understand all dependencies
</description>
<process>
<step>Read main feature file</step>
<step>Extract all imports</step>
<step>Read each imported file</step>
<step>Recursively analyze their imports</step>
<step>Build dependency graph</step>
</process>
<import_patterns><![CDATA[
<!-- TypeScript/JavaScript imports -->
<search_files>
<path>src/feature</path>
<regex>import\s+(?:{[^}]+}|\*\s+as\s+\w+|\w+)\s+from\s+['"]([^'"]+)['"]</regex>
</search_files>
<!-- CommonJS requires -->
<search_files>
<path>src/feature</path>
<regex>require\(['"]([^'"]+)['"]\)</regex>
</search_files>
]]></import_patterns>
</strategy>
<strategy name="api_documentation_extraction">
<description>
Extract complete API documentation from code
</description>
<extraction_points>
<point>Route definitions</point>
<point>Request/response schemas</point>
<point>Authentication requirements</point>
<point>Rate limiting rules</point>
<point>Error responses</point>
</extraction_points>
<tools_sequence>
<sequence>
<step>Find all route files</step>
<step>Extract route definitions</step>
<step>Find associated controllers</step>
<step>Analyze request validation</step>
<step>Document response formats</step>
</sequence>
</tools_sequence>
</strategy>
<strategy name="test_driven_documentation">
<description>
Use tests to understand expected behavior
</description>
<benefits>
<benefit>Tests show real usage examples</benefit>
<benefit>Test descriptions explain functionality</benefit>
<benefit>Edge cases are often tested</benefit>
<benefit>Expected outputs are documented</benefit>
</benefits>
<extraction_approach><![CDATA[
<!-- Find test descriptions -->
<search_files>
<path>__tests__</path>
<regex>(describe|it|test)\(['"]([^'"]+)['"]</regex>
</search_files>
<!-- Extract test scenarios -->
<read_file>
<path>__tests__/feature.test.ts</path>
</read_file>
]]></extraction_approach>
</strategy>
</analysis_strategies>
<common_patterns>
<pattern name="configuration_documentation">
<search_locations>
<location>.env.example</location>
<location>config/*.json</location>
<location>src/config/*</location>
<location>README.md (configuration section)</location>
</search_locations>
<extraction_regex><![CDATA[
# Environment variables
process\.env\.(\w+)
# Config object access
config\.(\w+)\.(\w+)
# Default values
\w+\s*=\s*process\.env\.\w+\s*\|\|\s*['"]([^'"]+)['"]
]]></extraction_regex>
</pattern>
<pattern name="error_documentation">
<error_patterns>
<pattern>Custom error classes</pattern>
<pattern>Error code constants</pattern>
<pattern>Error message templates</pattern>
<pattern>HTTP status codes</pattern>
</error_patterns>
<search_approach><![CDATA[
<search_files>
<path>src</path>
<regex>class\s+\w*Error\s+extends|new Error\(|throw new|ERROR_CODE|HTTP_STATUS</regex>
</search_files>
]]></search_approach>
</pattern>
<pattern name="security_documentation">
<security_aspects>
<aspect>Authentication methods</aspect>
<aspect>Authorization rules</aspect>
<aspect>Data encryption</aspect>
<aspect>Input validation</aspect>
<aspect>Rate limiting</aspect>
</security_aspects>
<indicators><![CDATA[
<search_files>
<path>src</path>
<regex>@Authorized|requireAuth|checkPermission|encrypt|decrypt|sanitize|validate|rateLimit</regex>
</search_files>
]]></indicators>
</pattern>
</common_patterns>
<output_optimization>
<guideline name="structured_sections">
<description>Organize output for easy navigation</description>
<structure>
- Clear hierarchy with numbered sections
- Consistent heading levels
- Table of contents with links
- Cross-references between sections
</structure>
</guideline>
<guideline name="code_examples">
<description>Include relevant code examples</description>
<best_practices>
- Use syntax highlighting
- Show both request and response
- Include error cases
- Provide language-specific examples
</best_practices>
</guideline>
<guideline name="visual_aids">
<description>Suggest where diagrams would help</description>
<diagram_types>
- Architecture diagrams
- Sequence diagrams
- Data flow diagrams
- State machines
</diagram_types>
</guideline>
<guideline name="metadata_inclusion">
<description>Always include important metadata</description>
<required_metadata>
- Version compatibility
- Last updated date
- Feature status (stable/beta/deprecated)
- Performance characteristics
- Security considerations
</required_metadata>
</guideline>
</output_optimization>
</tool_usage_guide>

View file

@ -1,943 +0,0 @@
<complete_extraction_examples>
<overview>
Complete examples demonstrating the full documentation extraction workflow
for different types of features and components.
</overview>
<example name="authentication_system_extraction">
<scenario>
Extract comprehensive documentation for a JWT-based authentication system
including login, logout, token refresh, and role-based access control.
</scenario>
<workflow>
<step number="1">
<description>Initial feature discovery</description>
<tool_use><![CDATA[
<codebase_search>
<query>authentication JWT login logout token refresh auth middleware</query>
</codebase_search>
]]></tool_use>
<expected_findings>
- Auth controller files
- JWT service implementations
- Middleware functions
- User model with auth fields
- Auth route definitions
</expected_findings>
</step>
<step number="2">
<description>Analyze authentication structure</description>
<tool_use><![CDATA[
<list_code_definition_names>
<path>src/auth</path>
</list_code_definition_names>
]]></tool_use>
<analysis>
- Identify main classes and functions
- Map authentication flow
- Find token generation/validation logic
</analysis>
</step>
<step number="3">
<description>Read core implementation files</description>
<tool_use><![CDATA[
<read_file>
<args>
<file>
<path>src/auth/auth.controller.ts</path>
</file>
<file>
<path>src/auth/auth.service.ts</path>
</file>
<file>
<path>src/auth/jwt.strategy.ts</path>
</file>
<file>
<path>src/auth/auth.guard.ts</path>
</file>
<file>
<path>src/models/user.model.ts</path>
</file>
</args>
</read_file>
]]></tool_use>
</step>
<step number="4">
<description>Extract API endpoints</description>
<tool_use><![CDATA[
<search_files>
<path>src/auth</path>
<regex>@(Post|Get)\(['"]\/auth\/[^'"]+['"]|router\.(post|get)\(['"]\/auth\/[^'"]+['"]</regex>
</search_files>
]]></tool_use>
<findings>
- POST /auth/login
- POST /auth/logout
- POST /auth/refresh
- GET /auth/profile
- POST /auth/register
</findings>
</step>
<step number="5">
<description>Document configuration</description>
<tool_use><![CDATA[
<search_files>
<path>src</path>
<regex>JWT_SECRET|JWT_EXPIRATION|AUTH_.*|process\.env\.\w*AUTH\w*</regex>
</search_files>
]]></tool_use>
</step>
<step number="6">
<description>Analyze security measures</description>
<tool_use><![CDATA[
<search_files>
<path>src/auth</path>
<regex>bcrypt|hash|salt|encrypt|sanitize|validate|@IsEmail|@MinLength</regex>
</search_files>
]]></tool_use>
</step>
<step number="7">
<description>Generate documentation</description>
<tool_use><![CDATA[
<write_to_file>
<path>DOCS-TEMP-authentication-system.md</path>
<content>
# Authentication System Documentation
## Table of Contents
1. [Overview](#overview)
2. [Quick Start](#quick-start)
3. [Architecture](#architecture)
4. [API Reference](#api-reference)
5. [Configuration](#configuration)
6. [Security](#security)
7. [User Guide](#user-guide)
8. [Developer Guide](#developer-guide)
9. [Troubleshooting](#troubleshooting)
---
## Overview
### Purpose
The authentication system provides secure user authentication using JWT (JSON Web Tokens) with support for:
- User registration and login
- Token-based authentication
- Refresh token rotation
- Role-based access control (RBAC)
- Session management
- Password reset functionality
### Key Features
- **JWT Authentication**: Stateless authentication using signed tokens
- **Refresh Tokens**: Long-lived tokens for seamless user experience
- **Role-Based Access**: Fine-grained permission control
- **Security**: bcrypt password hashing, rate limiting, CSRF protection
- **Multi-device Support**: Token management across devices
### Version Information
- **Current Version**: 2.1.0
- **Minimum Node.js**: 14.0.0
- **Dependencies**:
- jsonwebtoken: ^9.0.0
- bcrypt: ^5.1.0
- passport: ^0.6.0
---
## Quick Start
### For Users
1. Register a new account:
```bash
POST /api/auth/register
{
"email": "user@example.com",
"password": "SecurePassword123!",
"name": "John Doe"
}
```
2. Login to receive tokens:
```bash
POST /api/auth/login
{
"email": "user@example.com",
"password": "SecurePassword123!"
}
```
3. Use the access token in subsequent requests:
```bash
Authorization: Bearer <access_token>
```
### For Developers
```typescript
// Import authentication module
import { AuthModule } from './auth/auth.module';
// Configure in app module
@Module({
imports: [
AuthModule.forRoot({
jwtSecret: process.env.JWT_SECRET,
jwtExpiration: '15m',
refreshExpiration: '7d'
})
]
})
export class AppModule {}
```
---
## Architecture
### System Overview
```
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Client │────▶│ Auth Guard │────▶│ Service │
└─────────────┘ └──────────────┘ └─────────────┘
│ │
▼ ▼
┌──────────────┐ ┌─────────────┐
│ JWT Strategy │ │ Database │
└──────────────┘ └─────────────┘
```
### Components
- **AuthController**: Handles HTTP requests for authentication endpoints
- **AuthService**: Core authentication logic and token management
- **JwtStrategy**: Passport strategy for JWT validation
- **AuthGuard**: Route protection middleware
- **UserService**: User management and database operations
### Token Flow
1. User provides credentials
2. System validates credentials against database
3. Generate access token (short-lived) and refresh token (long-lived)
4. Client stores tokens securely
5. Access token used for API requests
6. Refresh token used to obtain new access token
---
## API Reference
### Authentication Endpoints
#### `POST /api/auth/register`
Register a new user account.
**Request Body**:
```json
{
"email": "string (required)",
"password": "string (required, min 8 chars)",
"name": "string (required)",
"role": "string (optional, default: 'user')"
}
```
**Response** (201 Created):
```json
{
"user": {
"id": "uuid",
"email": "user@example.com",
"name": "John Doe",
"role": "user",
"createdAt": "2024-01-01T00:00:00Z"
},
"tokens": {
"accessToken": "jwt_token",
"refreshToken": "refresh_token",
"expiresIn": 900
}
}
```
**Error Responses**:
- `400 Bad Request`: Invalid input data
- `409 Conflict`: Email already exists
#### `POST /api/auth/login`
Authenticate user and receive tokens.
**Request Body**:
```json
{
"email": "string (required)",
"password": "string (required)"
}
```
**Response** (200 OK):
```json
{
"user": {
"id": "uuid",
"email": "user@example.com",
"name": "John Doe",
"role": "user"
},
"tokens": {
"accessToken": "jwt_token",
"refreshToken": "refresh_token",
"expiresIn": 900
}
}
```
**Error Responses**:
- `401 Unauthorized`: Invalid credentials
- `429 Too Many Requests`: Rate limit exceeded
#### `POST /api/auth/refresh`
Refresh access token using refresh token.
**Request Body**:
```json
{
"refreshToken": "string (required)"
}
```
**Response** (200 OK):
```json
{
"accessToken": "new_jwt_token",
"expiresIn": 900
}
```
#### `POST /api/auth/logout`
Invalidate refresh token.
**Headers**:
- `Authorization: Bearer <access_token>`
**Request Body**:
```json
{
"refreshToken": "string (required)"
}
```
**Response** (200 OK):
```json
{
"message": "Logged out successfully"
}
```
---
## Configuration
### Environment Variables
| Variable | Type | Default | Description |
|----------|------|---------|-------------|
| `JWT_SECRET` | string | - | Secret key for signing JWT tokens (required) |
| `JWT_EXPIRATION` | string | '15m' | Access token expiration time |
| `REFRESH_TOKEN_EXPIRATION` | string | '7d' | Refresh token expiration time |
| `BCRYPT_ROUNDS` | number | 10 | Number of bcrypt hashing rounds |
| `AUTH_RATE_LIMIT` | number | 5 | Max login attempts per minute |
| `ENABLE_2FA` | boolean | false | Enable two-factor authentication |
### Configuration File (auth.config.ts)
```typescript
export const authConfig = {
jwt: {
secret: process.env.JWT_SECRET,
signOptions: {
expiresIn: process.env.JWT_EXPIRATION || '15m',
issuer: 'your-app-name',
audience: 'your-app-users'
}
},
bcrypt: {
rounds: parseInt(process.env.BCRYPT_ROUNDS || '10')
},
session: {
maxDevices: 5,
inactivityTimeout: '30d'
}
};
```
---
## Security
### Authentication Flow
1. **Password Storage**: Passwords hashed using bcrypt with configurable rounds
2. **Token Security**: JWT tokens signed with RS256 algorithm
3. **Refresh Token Rotation**: New refresh token issued on each refresh
4. **Rate Limiting**: Prevents brute force attacks on login endpoint
### Security Best Practices
- Store tokens securely (httpOnly cookies recommended)
- Implement CSRF protection for cookie-based auth
- Use HTTPS in production
- Rotate JWT secrets periodically
- Implement account lockout after failed attempts
- Enable 2FA for sensitive accounts
### Common Vulnerabilities Addressed
- **SQL Injection**: Parameterized queries
- **XSS**: Input sanitization and validation
- **CSRF**: Token validation
- **Brute Force**: Rate limiting and account lockout
- **Token Hijacking**: Short expiration times and refresh rotation
---
## User Guide
### Registration Process
1. Navigate to registration page
2. Enter email, password, and name
3. Verify email (if enabled)
4. Login with credentials
### Managing Sessions
- View active sessions in account settings
- Revoke sessions from other devices
- Set session timeout preferences
### Password Management
- Change password from profile settings
- Reset forgotten password via email
- Password requirements:
- Minimum 8 characters
- At least one uppercase letter
- At least one number
- At least one special character
---
## Developer Guide
### Protecting Routes
```typescript
// Use AuthGuard decorator
@UseGuards(AuthGuard('jwt'))
@Get('protected')
async getProtectedData() {
return { data: 'This is protected' };
}
// Role-based protection
@UseGuards(AuthGuard('jwt'), RolesGuard)
@Roles('admin')
@Get('admin')
async getAdminData() {
return { data: 'Admin only' };
}
```
### Custom Authentication Logic
```typescript
// Extend AuthService
export class CustomAuthService extends AuthService {
async validateUser(email: string, password: string): Promise<User> {
// Add custom validation logic
const user = await super.validateUser(email, password);
// Additional checks
if (user.suspended) {
throw new UnauthorizedException('Account suspended');
}
return user;
}
}
```
### Testing Authentication
```typescript
describe('AuthController', () => {
it('should login user', async () => {
const response = await request(app.getHttpServer())
.post('/auth/login')
.send({
email: 'test@example.com',
password: 'TestPass123!'
})
.expect(200);
expect(response.body).toHaveProperty('tokens.accessToken');
});
});
```
---
## Troubleshooting
### Common Issues
#### Invalid Token Error
**Problem**: "JsonWebTokenError: invalid token"
**Solutions**:
- Verify token format (Bearer prefix)
- Check token expiration
- Ensure JWT_SECRET matches
#### Login Rate Limit
**Problem**: "429 Too Many Requests"
**Solutions**:
- Wait for rate limit window to reset
- Check AUTH_RATE_LIMIT configuration
- Implement exponential backoff
#### CORS Issues
**Problem**: "Access blocked by CORS policy"
**Solutions**:
- Configure CORS middleware
- Add origin to allowed list
- Check preflight requests
### Debug Mode
Enable debug logging:
```bash
DEBUG=auth:* npm start
```
### Support
- GitHub Issues: [github.com/yourapp/issues](https://github.com/yourapp/issues)
- Documentation: [docs.yourapp.com/auth](https://docs.yourapp.com/auth)
- Email: support@yourapp.com
---
## Changelog
### v2.1.0 (2024-01-15)
- Added refresh token rotation
- Improved rate limiting
- Fixed security vulnerability in password reset
### v2.0.0 (2023-12-01)
- Breaking: Changed token format
- Added 2FA support
- Improved session management
### Migration Guide (v1.x to v2.x)
1. Update JWT_SECRET format
2. Run token migration script
3. Update client-side token handling
---
## References
- [JWT.io](https://jwt.io) - JWT Documentation
- [OWASP Authentication Guide](https://owasp.org/www-project-cheat-sheets/cheatsheets/Authentication_Cheat_Sheet)
- [Passport.js Documentation](http://www.passportjs.org/docs/)
</content>
<line_count>450</line_count>
</write_to_file>
]]></tool_use>
</step>
</workflow>
<key_takeaways>
<takeaway>Start with semantic search to find all related files</takeaway>
<takeaway>Read multiple files together for context</takeaway>
<takeaway>Extract API documentation from route definitions</takeaway>
<takeaway>Use tests to understand expected behavior</takeaway>
<takeaway>Document security measures comprehensively</takeaway>
<takeaway>Include troubleshooting based on common errors</takeaway>
</key_takeaways>
</example>
<example name="database_schema_extraction">
<scenario>
Extract documentation for database models, relationships, migrations,
and data access patterns.
</scenario>
<workflow>
<step number="1">
<description>Find database-related files</description>
<tool_use><![CDATA[
<codebase_search>
<query>database schema model entity migration table column relationship</query>
</codebase_search>
]]></tool_use>
</step>
<step number="2">
<description>Analyze model definitions</description>
<tool_use><![CDATA[
<search_files>
<path>src/models</path>
<regex>@(Entity|Table|Model)|class\s+\w+\s+extends\s+(Model|BaseEntity)</regex>
</search_files>
]]></tool_use>
</step>
<step number="3">
<description>Extract relationships</description>
<tool_use><![CDATA[
<search_files>
<path>src/models</path>
<regex>@(OneToMany|ManyToOne|OneToOne|ManyToMany|BelongsTo|HasMany)</regex>
</search_files>
]]></tool_use>
</step>
<step number="4">
<description>Document migrations</description>
<tool_use><![CDATA[
<list_files>
<path>migrations</path>
<recursive>true</recursive>
</list_files>
]]></tool_use>
</step>
<step number="5">
<description>Generate schema documentation</description>
<output>
- Entity relationship diagrams
- Table schemas with column types
- Index definitions
- Foreign key constraints
- Migration history
- Query patterns and optimizations
</output>
</step>
</workflow>
</example>
<example name="api_endpoint_extraction">
<scenario>
Extract comprehensive API documentation including all endpoints,
request/response formats, authentication, and examples.
</scenario>
<workflow>
<step number="1">
<description>Find all API routes</description>
<tool_use><![CDATA[
<search_files>
<path>src</path>
<regex>(app|router)\.(get|post|put|patch|delete|all)\s*\(\s*['"`]([^'"`]+)['"`]</regex>
</search_files>
]]></tool_use>
</step>
<step number="2">
<description>Extract request validation</description>
<tool_use><![CDATA[
<search_files>
<path>src</path>
<regex>@(Body|Query|Param|Headers)\(|joi\.object|yup\.object|zod\.object</regex>
</search_files>
]]></tool_use>
</step>
<step number="3">
<description>Find response schemas</description>
<tool_use><![CDATA[
<search_files>
<path>src</path>
<regex>@ApiResponse|swagger|openapi|response\.json\(|res\.send\(</regex>
</search_files>
]]></tool_use>
</step>
<step number="4">
<description>Document authentication requirements</description>
<tool_use><![CDATA[
<search_files>
<path>src</path>
<regex>@(UseGuards|Authorized|Public)|passport\.authenticate|requireAuth</regex>
</search_files>
]]></tool_use>
</step>
<step number="5">
<description>Generate OpenAPI/Swagger documentation</description>
<output_format>
- OpenAPI 3.0 specification
- Postman collection
- API client examples
- cURL commands
- SDK usage examples
</output_format>
</step>
</workflow>
</example>
<example name="frontend_component_extraction">
<scenario>
Document React/Vue/Angular components including props, events,
slots, styling, and usage examples.
</scenario>
<workflow>
<step number="1">
<description>Find component files</description>
<tool_use><![CDATA[
<search_files>
<path>src/components</path>
<regex>export\s+(default\s+)?(function|class|const)\s+\w+|@Component</regex>
<file_pattern>*.tsx</file_pattern>
</search_files>
]]></tool_use>
</step>
<step number="2">
<description>Extract component props/inputs</description>
<tool_use><![CDATA[
<search_files>
<path>src/components</path>
<regex>interface\s+\w+Props|type\s+\w+Props|@Input\(\)|props:\s*{</regex>
</search_files>
]]></tool_use>
</step>
<step number="3">
<description>Find component usage examples</description>
<tool_use><![CDATA[
<search_files>
<path>src</path>
<regex><ComponentName|import.*ComponentName</regex>
</search_files>
]]></tool_use>
</step>
<step number="4">
<description>Document styling and themes</description>
<tool_use><![CDATA[
<search_files>
<path>src/components</path>
<regex>styled\.|makeStyles|@apply|className=|style=</regex>
</search_files>
]]></tool_use>
</step>
<step number="5">
<description>Extract Storybook stories</description>
<tool_use><![CDATA[
<search_files>
<path>src</path>
<regex>export\s+default\s+{.*title:|\.stories\.</regex>
<file_pattern>*.stories.tsx</file_pattern>
</search_files>
]]></tool_use>
</step>
<step number="6">
<description>Generate component documentation</description>
<output>
- Component API reference
- Props table with types and defaults
- Event documentation
- Styling guidelines
- Usage examples
- Accessibility notes
- Browser compatibility
</output>
</step>
</workflow>
</example>
<example name="configuration_system_extraction">
<scenario>
Document all configuration options, environment variables,
feature flags, and their impacts on system behavior.
</scenario>
<workflow>
<step number="1">
<description>Find configuration files</description>
<tool_use><![CDATA[
<list_files>
<path>.</path>
<recursive>false</recursive>
</list_files>
]]></tool_use>
<look_for>
- .env.example
- config/
- settings.json
- app.config.ts
</look_for>
</step>
<step number="2">
<description>Extract environment variables</description>
<tool_use><![CDATA[
<search_files>
<path>.</path>
<regex>process\.env\.(\w+)|getenv\(['"](\w+)['"]\)</regex>
</search_files>
]]></tool_use>
</step>
<step number="3">
<description>Find feature flags</description>
<tool_use><![CDATA[
<search_files>
<path>src</path>
<regex>feature\.|featureFlag|isEnabled\(['"]|flags\.</regex>
</search_files>
]]></tool_use>
</step>
<step number="4">
<description>Document configuration impacts</description>
<analysis>
- How each config affects behavior
- Dependencies between configs
- Performance implications
- Security considerations
- Default values and overrides
</analysis>
</step>
<step number="5">
<description>Generate configuration guide</description>
<output>
- Complete configuration reference
- Environment setup guide
- Docker/Kubernetes configs
- CI/CD pipeline variables
- Production deployment checklist
</output>
</step>
</workflow>
</example>
<example name="documentation_review_example">
<scenario>
Review a user-provided documentation section for accuracy against the codebase
and provide recommendations for improvement in the chat.
</scenario>
<workflow>
<step number="1">
<description>User provides documentation for review</description>
<user_input>
"Here's our current draft for the JWT_SECRET setting. Can you check it for accuracy? 'The `JWT_SECRET` is an optional key for enhancing security.'"
</user_input>
</step>
<step number="2">
<description>Analyze relevant code</description>
<tool_use><![CDATA[
<codebase_search>
<query>JWT_SECRET configuration implementation</query>
</codebase_search>
]]></tool_use>
<expected_findings>
- Code where `JWT_SECRET` is read (e.g., `process.env.JWT_SECRET`)
- Logic that fails if the secret is missing
- Default values or error handling related to the secret
</expected_findings>
</step>
<step number="3">
<description>Formulate and provide feedback in chat</description>
<tool_use><![CDATA[
<attempt_completion>
<result>
I have reviewed the documentation section provided for the `JWT_SECRET` setting. Here are my recommendations for improvement:
**Overall Assessment**: The current draft is critically inaccurate and could lead to security vulnerabilities if followed.
**Recommendations for Improvement**:
* **Critical Inaccuracy**:
* The documentation states that `JWT_SECRET` is optional. However, the application will fail to start if it is not provided. It is a **required** setting for the application to function securely.
* **Suggestion**: "The `JWT_SECRET` is a **required** environment variable used to sign and verify JSON Web Tokens. The application will not run without it."
This feedback can be copied and pasted for your documentation team.
</result>
</attempt_completion>
]]></tool_use>
<note>No file is written. The feedback is provided directly to the user in the chat interface.</note>
</step>
</workflow>
</example>
<best_practices>
<practice name="comprehensive_coverage">
<description>Ensure all aspects are documented</description>
<checklist>
<item>Technical implementation details</item>
<item>Business logic and rules</item>
<item>User workflows and journeys</item>
<item>API specifications</item>
<item>Configuration options</item>
<item>Security measures</item>
<item>Performance characteristics</item>
<item>Error handling</item>
<item>Testing strategies</item>
<item>Deployment procedures</item>
</checklist>
</practice>
<practice name="multi_audience_writing">
<description>Tailor content for different readers</description>
<audiences>
<audience type="end_users">
Focus on how-to guides and troubleshooting
</audience>
<audience type="developers">
Include code examples and technical details
</audience>
<audience type="administrators">
Emphasize configuration and maintenance
</audience>
<audience type="stakeholders">
Highlight business value and metrics
</audience>
</audiences>
</practice>
<practice name="maintainable_documentation">
<description>Create documentation that's easy to update</description>
<guidelines>
<guideline>Use clear section headers</guideline>
<guideline>Include version information</guideline>
<guideline>Add last-updated timestamps</guideline>
<guideline>Cross-reference related sections</guideline>
<guideline>Provide migration guides</guideline>
</guidelines>
</practice>
<practice name="example_driven">
<description>Include practical examples throughout</description>
<example_types>
<type>Code snippets with syntax highlighting</type>
<type>API request/response pairs</type>
<type>Configuration examples</type>
<type>Command-line usage</type>
<type>Error scenarios and solutions</type>
</example_types>
</practice>
</best_practices>
<output_validation>
<checklist>
<item>Table of contents with working links</item>
<item>All sections properly formatted</item>
<item>Code examples are syntactically correct</item>
<item>No placeholder text remaining</item>
<item>Version information included</item>
<item>Cross-references are valid</item>
<item>Metadata is complete</item>
<item>File follows naming convention</item>
</checklist>
</output_validation>
</complete_extraction_examples>

View file

@ -1,323 +0,0 @@
<communication_guidelines>
<overview>
Guidelines for communicating with users and formatting documentation output
during the extraction process.
</overview>
<user_interaction>
<initial_understanding>
<principle>Users will specify what they want documented in their initial message</principle>
<principle>Start working immediately based on their request</principle>
<principle>Only ask for clarification if genuinely ambiguous</principle>
</initial_understanding>
<clarification_only_when_needed>
<when_to_ask>
<scenario>Multiple features with identical names found</scenario>
<scenario>Request is genuinely ambiguous (rare)</scenario>
<scenario>User explicitly asks for options</scenario>
</when_to_ask>
<question_example><![CDATA[
<ask_followup_question>
<question>I found multiple authentication systems. Which one should I document?</question>
<follow_up>
<suggest>JWT-based authentication system (src/auth/jwt/*)</suggest>
<suggest>OAuth2 integration (src/auth/oauth/*)</suggest>
<suggest>Basic authentication middleware (src/middleware/basic-auth.ts)</suggest>
<suggest>All authentication features comprehensively</suggest>
</follow_up>
</ask_followup_question>
]]></question_example>
</clarification_only_when_needed>
<progress_updates>
<when_to_update>
<trigger>Starting major analysis phase</trigger>
<trigger>Completed significant extraction</trigger>
<trigger>Found unexpected complexity</trigger>
<trigger>Discovered related features</trigger>
</when_to_update>
<update_format>
<template>
Analyzing [component/feature]...
- Found [X] files related to [feature]
- Identified [Y] API endpoints
- Discovered [Z] configuration options
</template>
</update_format>
</progress_updates>
<findings_communication>
<important_discoveries>
<discovery type="security_issue">
Alert user to potential security concerns found during analysis
</discovery>
<discovery type="deprecated_code">
Note deprecated features that need migration documentation
</discovery>
<discovery type="missing_documentation">
Highlight areas where code lacks inline documentation
</discovery>
<discovery type="complex_dependencies">
Warn about intricate dependency chains affecting the feature
</discovery>
</important_discoveries>
<review_findings>
<template><![CDATA[
I have reviewed the documentation section provided. Here are my recommendations for improvement:
**Overall Assessment**: [Brief summary of the document's quality]
**Recommendations for Improvement**:
* **Critical Inaccuracies**:
* [Inaccuracy 1]: The documentation states [X], but the code implements [Y].
* [Inaccuracy 2]: ...
* **Major Omissions**:
* The documentation is missing information about [Missing Feature/Concept].
* ...
* **Suggestions for Clarity**:
* The section on [Topic] could be clarified by [Suggestion].
* ...
This feedback can be copied and pasted for your documentation team.
]]></template>
</review_findings>
</findings_communication>
</user_interaction>
<output_formatting>
<markdown_standards>
<heading_hierarchy>
<rule>Use # for main title only</rule>
<rule>Use ## for major sections</rule>
<rule>Use ### for subsections</rule>
<rule>Use #### sparingly for minor subsections</rule>
<rule>Never skip heading levels</rule>
</heading_hierarchy>
<code_blocks>
<rule>Always specify language for syntax highlighting</rule>
<rule>Use appropriate language identifiers (typescript, javascript, json, yaml, bash)</rule>
<rule>Include file paths as comments when relevant</rule>
<example><![CDATA[
```typescript
// src/auth/auth.service.ts
export class AuthService {
async validateUser(email: string, password: string): Promise<User> {
// Implementation
}
}
```
]]></example>
</code_blocks>
<tables>
<rule>Use tables for structured data like configurations</rule>
<rule>Include headers with proper alignment</rule>
<rule>Keep cell content concise</rule>
<example><![CDATA[
| Variable | Type | Default | Description |
|----------|------|---------|-------------|
| `JWT_SECRET` | string | - | Secret key for JWT signing |
| `JWT_EXPIRATION` | string | '15m' | Token expiration time |
]]></example>
</tables>
<lists>
<rule>Use bullet points for unordered lists</rule>
<rule>Use numbers for sequential steps</rule>
<rule>Nest lists with proper indentation</rule>
<rule>Keep list items parallel in structure</rule>
</lists>
</markdown_standards>
<cross_references>
<internal_links>
<format>[Link text](#section-anchor)</format>
<rule>Use lowercase, hyphenated anchors</rule>
<rule>Test all internal links</rule>
</internal_links>
<external_links>
<format>[Link text](https://example.com)</format>
<rule>Use HTTPS when available</rule>
<rule>Link to official documentation</rule>
</external_links>
<file_references>
<format>`path/to/file.ts`</format>
<rule>Use relative paths from project root</rule>
<rule>Use backticks for inline file references</rule>
</file_references>
</cross_references>
<special_sections>
<alerts>
<type name="warning">
<format>> ⚠️ **Warning**: [message]</format>
<use_for>Security concerns, breaking changes, deprecations</use_for>
</type>
<type name="note">
<format>> 📝 **Note**: [message]</format>
<use_for>Important information, clarifications</use_for>
</type>
<type name="tip">
<format>> 💡 **Tip**: [message]</format>
<use_for>Best practices, optimization suggestions</use_for>
</type>
</alerts>
<metadata_blocks>
<version_info><![CDATA[
---
Feature: Authentication System
Version: 2.1.0
Last Updated: 2024-01-15
Status: Stable
---
]]></version_info>
</metadata_blocks>
</special_sections>
</output_formatting>
<documentation_tone>
<general_principles>
<principle>Be conversational and approachable</principle>
<principle>Use active voice and "you" to address the reader</principle>
<principle>Lead with benefits, not features</principle>
<principle>Use concrete examples and scenarios</principle>
<principle>Keep paragraphs short and scannable</principle>
<principle>Avoid unnecessary technical details</principle>
</general_principles>
<user_focused_tone>
<guideline>Write as if explaining to a colleague who isn't technical</guideline>
<guideline>Use analogies and comparisons to familiar concepts</guideline>
<guideline>Focus on "what" and "why" before "how"</guideline>
<guideline>Include practical examples users can relate to</guideline>
<guideline>Address common concerns and questions directly</guideline>
</user_focused_tone>
<audience_specific_tone>
<audience type="default_user">
<tone>Friendly, helpful, encouraging</tone>
<vocabulary>Plain language, minimal jargon</vocabulary>
<examples>Real-world scenarios, before/after comparisons</examples>
<structure>Problem → Solution → Benefits → How to use</structure>
</audience>
<audience type="developers">
<tone>Technical when needed, but still approachable</tone>
<vocabulary>Use standard programming terminology</vocabulary>
<examples>Include code snippets and implementation details</examples>
</audience>
<audience type="end_users">
<tone>Friendly, instructional, step-by-step</tone>
<vocabulary>Avoid technical jargon, explain concepts simply</vocabulary>
<examples>Use screenshots and real-world scenarios</examples>
</audience>
<audience type="administrators">
<tone>Professional, operational focus</tone>
<vocabulary>Use IT/DevOps terminology</vocabulary>
<examples>Include command-line examples and configurations</examples>
</audience>
<audience type="stakeholders">
<tone>Business-oriented, value-focused</tone>
<vocabulary>Use business terminology, avoid implementation details</vocabulary>
<examples>Include metrics, ROI, and business benefits</examples>
</audience>
</audience_specific_tone>
</documentation_tone>
<completion_message>
<structure>
<element>Summary of what was documented</element>
<element>Key findings or insights</element>
<element>File location and name</element>
<element>Suggestions for next steps (if applicable)</element>
</structure>
<example><![CDATA[
I've completed the comprehensive documentation extraction for the authentication system.
**Documentation Generated**: `DOCS-TEMP-authentication-system.md`
**Key Findings**:
- The system uses JWT tokens with refresh token rotation
- Found 5 main API endpoints for authentication
- Identified 12 configuration options
- Documented security measures including bcrypt hashing and rate limiting
- Included troubleshooting for 3 common issues
**Coverage**:
- ✅ Technical implementation details
- ✅ API reference with examples
- ✅ Configuration guide
- ✅ Security considerations
- ✅ User and developer guides
- ✅ Troubleshooting section
The documentation is structured for multiple audiences and includes all requested metadata, version information, and cross-references.
]]></example>
<example_review><![CDATA[
I have completed the review of the provided documentation section.
**Action Taken**:
- Analyzed the provided text against the current codebase for accuracy.
- Identified several areas for improvement and outlined them as a recommendation.
**Next Steps**:
- The detailed feedback has been provided in the chat. You can copy and paste it to your documentation team. No files were created.
]]></example_review>
</completion_message>
<error_handling>
<common_scenarios>
<scenario type="feature_not_found">
<response>
I couldn't find a feature matching "[feature name]". Here are some similar features I found:
- [List similar features]
Would you like me to document one of these instead?
</response>
</scenario>
<scenario type="insufficient_code_documentation">
<response>
The code for [feature] has limited inline documentation. I'll extract what I can from:
- Code structure and naming
- Test files
- Related documentation
- Usage patterns
</response>
</scenario>
<scenario type="complex_feature">
<response>
This feature is quite complex with [X] components. Would you like me to:
- Document everything comprehensively (may result in a large document)
- Focus on the core functionality
- Split into multiple documentation files
</response>
</scenario>
</common_scenarios>
</error_handling>
<quality_checks>
<before_completion>
<check>All sections have content (no placeholders)</check>
<check>Code examples are syntactically correct</check>
<check>Links and cross-references work</check>
<check>Tables are properly formatted</check>
<check>Version information is included</check>
<check>File naming follows convention</check>
</before_completion>
</quality_checks>
</communication_guidelines>

View file

@ -1,254 +0,0 @@
<user_friendly_examples>
<overview>
Examples and patterns for creating documentation that prioritizes user experience
and practical understanding over technical completeness.
</overview>
<writing_principles>
<principle name="lead_with_benefits">
<bad>The concurrent file read feature uses parallel processing to read multiple files.</bad>
<good>Read multiple files at once, saving time and reducing interruptions.</good>
</principle>
<principle name="use_scenarios">
<bad>This feature improves efficiency.</bad>
<good>Instead of approving 10 file reads one by one, approve them all at once and get your answer faster.</good>
</principle>
<principle name="avoid_implementation_details">
<bad>The feature uses a thread pool with configurable concurrency limits to process file I/O operations.</bad>
<good>Roo can read up to 100 files at once (you can change this limit in settings).</good>
</principle>
<principle name="conversational_tone">
<bad>Users must configure the concurrent file read limit parameter.</bad>
<good>You can adjust how many files Roo reads at once in the settings.</good>
</principle>
</writing_principles>
<structure_examples>
<example name="feature_introduction">
<template><![CDATA[
# [Feature Name]
[One-sentence description of what it does for the user]
### Key Features
- [Benefit 1 - what users can do]
- [Benefit 2 - what problem it solves]
- [Benefit 3 - how it makes life easier]
---
]]></template>
</example>
<example name="why_it_matters">
<template><![CDATA[
## Why This Matters
**Without [feature]**: [Description of the painful old way]
- [Specific pain point]
- [Another pain point]
- [Time/effort wasted]
**With [feature]**: [Description of the better experience]
]]></template>
</example>
<example name="configuration_section">
<template><![CDATA[
## Configuration
You can customize this feature in Roo's settings:
1. **[Human-friendly setting name]**
- What it does: [Plain language explanation]
- Default: [Default value] (this works well for most users)
- When to change: [Specific scenarios when users might want to adjust this]
2. **[Another setting]**
- What it does: [Plain language explanation]
- Default: [Default value]
- Try changing this if: [Specific use case]
]]></template>
</example>
<example name="common_questions">
<template><![CDATA[
## Common Questions
**"[Actual question users ask]"**
[Direct, helpful answer]
[Optional: Additional tip or context]
**"[Another real question]"**
[Answer that addresses the concern]
[Optional: Link to more info]
**"[Technical question simplified]"**
[Non-technical explanation]
[Optional: "For developers:" with technical details]
]]></template>
</example>
<example name="troubleshooting">
<template><![CDATA[
## Troubleshooting
### [Problem symptom users would recognize]
**What's happening**: [Brief explanation]
**Quick fix**: [Immediate solution]
**If that doesn't work**: [Alternative solution]
### [Another common issue]
**You might see this when**: [Scenario]
**Solution**:
1. [First step]
2. [Second step]
3. [If needed, third step]
]]></template>
</example>
<example name="help_section">
<template><![CDATA[
## Need Help?
Still having issues? Here's how to get help:
1. **Check our FAQ**: [Link to FAQ] - answers to common questions
2. **Report a bug**: [GitHub Issues link] - we typically respond within 24 hours
3. **Join the community**: [Discord/Forum link] - get help from other users
When reporting an issue, please include:
- What you were trying to do
- What happened instead
- Any error messages you saw
]]></template>
</example>
</structure_examples>
<tone_examples>
<friendly_explanations>
<example context="explaining a limit">
<technical>The system imposes a hard limit of 100 concurrent operations.</technical>
<friendly>Roo can handle up to 100 files at once - more than enough for most projects!</friendly>
</example>
<example context="describing an error">
<technical>Error: Maximum concurrency threshold exceeded.</technical>
<friendly>Oops! That's too many files at once. Try lowering the file limit in settings.</friendly>
</example>
<example context="explaining a benefit">
<technical>Reduces API call overhead through request batching.</technical>
<friendly>Get answers faster by reading all the files Roo needs in one go.</friendly>
</example>
</friendly_explanations>
<visual_elements>
<use_emojis_sparingly>
<when>Error messages: ⚠️</when>
<when>Tips: 💡</when>
<when>Important notes: 📝</when>
<when>Security: 🔒</when>
</use_emojis_sparingly>
<use_formatting>
<bold>For emphasis on key points</bold>
<code>For settings names, file paths, or commands</code>
<blockquotes>For important callouts or warnings</blockquotes>
</use_formatting>
</visual_elements>
</tone_examples>
<real_world_example>
<title>Concurrent File Reads Documentation</title>
<content><![CDATA[
# Concurrent File Reads
The Concurrent File Reads feature allows Roo to read multiple files from your workspace in a single step. This significantly improves efficiency when working on tasks that require context from several files.
### Key Features
- Read up to 100 files in a single request
- Enabled by default for a faster, more streamlined workflow
- Configurable to match your preferences and system capabilities
---
## Why This Matters
**Previously**: When Roo needed to understand your project, you'd see multiple requests like:
- "Can I read `src/app.js`?" → You approve
- "Now can I read `src/utils.js`?" → You approve
- "And can I read `src/config.json`?" → You approve
**With concurrent file reads**: Roo asks once to read all related files together, getting the full picture immediately and providing better assistance faster.
## How it Works
When you ask Roo to perform a task that involves multiple files, it will automatically identify the relevant files and read them together. This is especially useful for:
- Understanding components split across multiple files
- Refactoring code with dependencies
- Answering questions that require broad project context
The [`read_file`](/advanced-usage/available-tools/read-file) tool automatically accepts multiple files in a single request.
---
## Configuration
You can customize this feature in Roo's settings:
1. **Enable/Disable Concurrent File Reads**
- What it does: Controls whether Roo can read multiple files at once
- Default: Enabled (recommended for most users)
- When to disable: If using a less capable AI model or wanting more control
2. **Concurrent File Reads Limit**
- What it does: Sets the maximum number of files Roo can read at once
- Default: 100 files
- When to adjust: Lower if you have memory constraints, raise for very large projects
---
## Benefits
- **Faster Results**: Get comprehensive answers without multiple approval steps
- **Better Context**: Roo understands file relationships immediately
- **Less Interruption**: Approve once and continue working while Roo analyzes
## Common Questions
**"Roo is asking for too many files at once"**
- Lower the concurrent file limit in settings
- You can still approve or deny individual files in the batch dialog
**"Some files were denied but others approved"**
- This is normal - Roo works with the files you approve
- Files might be blocked by your `.rooignore` settings
**"Will this use more memory?"**
- Yes, but the impact is usually minimal
- If you notice slowdowns, try reducing the file limit
## Need Help?
If you run into issues:
1. Check the [FAQ section](/faq) for common solutions
2. Report problems on [GitHub Issues](https://github.com/RooCodeInc/Roo-Code/issues)
3. Include what you were trying to do and any error messages
]]></content>
</real_world_example>
<checklist>
<item>Does it start with benefits, not features?</item>
<item>Are technical terms explained or avoided?</item>
<item>Does it use "you" to address the reader?</item>
<item>Are there practical examples or scenarios?</item>
<item>Is the tone conversational and friendly?</item>
<item>Are sections short and scannable?</item>
<item>Does it answer common user questions?</item>
<item>Is help easily accessible?</item>
</checklist>
</user_friendly_examples>

View file

@ -1,198 +0,0 @@
<workflow>
<step number="1">
<name>Understand Test Requirements</name>
<instructions>
Use ask_followup_question to determine what type of integration test is needed:
<ask_followup_question>
<question>What type of integration test would you like me to create or work on?</question>
<follow_up>
<suggest>New E2E test for a specific feature or workflow</suggest>
<suggest>Fix or update an existing integration test</suggest>
<suggest>Create test utilities or helpers for common patterns</suggest>
<suggest>Debug failing integration tests</suggest>
</follow_up>
</ask_followup_question>
</instructions>
</step>
<step number="2">
<name>Gather Test Specifications</name>
<instructions>
Based on the test type, gather detailed requirements:
For New E2E Tests:
- What specific user workflow or feature needs testing?
- What are the expected inputs and outputs?
- What edge cases or error scenarios should be covered?
- Are there specific API interactions to validate?
- What events should be monitored during the test?
For Existing Test Issues:
- Which test file is failing or needs updates?
- What specific error messages or failures are occurring?
- What changes in the codebase might have affected the test?
For Test Utilities:
- What common patterns are being repeated across tests?
- What helper functions would improve test maintainability?
Use multiple ask_followup_question calls if needed to gather complete information.
</instructions>
</step>
<step number="3">
<name>Explore Existing Test Patterns</name>
<instructions>
Use codebase_search FIRST to understand existing test patterns and similar functionality:
For New Tests:
- Search for similar test scenarios in apps/vscode-e2e/src/suite/
- Find existing test utilities and helpers
- Identify patterns for the type of functionality being tested
For Test Fixes:
- Search for the failing test file and related code
- Find similar working tests for comparison
- Look for recent changes that might have broken the test
Example searches:
- "file creation test mocha" for file operation tests
- "task completion waitUntilCompleted" for task monitoring patterns
- "api message validation" for API interaction tests
After codebase_search, use:
- read_file on relevant test files to understand structure
- list_code_definition_names on test directories
- search_files for specific test patterns or utilities
</instructions>
</step>
<step number="4">
<name>Analyze Test Environment and Setup</name>
<instructions>
Examine the test environment configuration:
1. Read the test runner configuration:
- apps/vscode-e2e/package.json for test scripts
- apps/vscode-e2e/src/runTest.ts for test setup
- Any test configuration files
2. Understand the test workspace setup:
- How test workspaces are created
- What files are available during tests
- How the extension API is accessed
3. Review existing test utilities:
- Helper functions for common operations
- Event listening patterns
- Assertion utilities
- Cleanup procedures
Document findings including:
- Test environment structure
- Available utilities and helpers
- Common patterns and best practices
</instructions>
</step>
<step number="5">
<name>Design Test Structure</name>
<instructions>
Plan the test implementation based on gathered information:
For New Tests:
- Define test suite structure with suite/test blocks
- Plan setup and teardown procedures
- Identify required test data and fixtures
- Design event listeners and validation points
- Plan for both success and failure scenarios
For Test Fixes:
- Identify the root cause of the failure
- Plan the minimal changes needed to fix the issue
- Consider if the test needs to be updated due to code changes
- Plan for improved error handling or debugging
Create a detailed test plan including:
- Test file structure and organization
- Required setup and cleanup
- Specific assertions and validations
- Error handling and edge cases
</instructions>
</step>
<step number="6">
<name>Implement Test Code</name>
<instructions>
Implement the test following established patterns:
CRITICAL: Never write a test file with a single write_to_file call.
Always implement tests in parts:
1. Start with the basic test structure (suite, setup, teardown)
2. Add individual test cases one by one
3. Implement helper functions separately
4. Add event listeners and validation logic incrementally
Follow these implementation guidelines:
- Use suite() and test() blocks following Mocha TDD style
- Always use the global api object for extension interactions
- Implement proper async/await patterns with waitFor utility
- Use waitUntilCompleted and waitUntilAborted helpers for task monitoring
- Listen to and validate appropriate events (message, taskCompleted, etc.)
- Test both positive flows and error scenarios
- Validate message content using proper type assertions
- Create reusable test utilities when patterns emerge
- Use meaningful test descriptions that explain the scenario
- Always clean up tasks with cancelCurrentTask or clearCurrentTask
- Ensure tests are independent and can run in any order
</instructions>
</step>
<step number="7">
<name>Run and Validate Tests</name>
<instructions>
Execute the tests to ensure they work correctly:
ALWAYS use the correct working directory and commands:
- Working directory: apps/vscode-e2e
- Test command: npm run test:run
- For specific tests: TEST_FILE="filename.test" npm run test:run
- Example: cd apps/vscode-e2e && TEST_FILE="apply-diff.test" npm run test:run
Test execution process:
1. Run the specific test file first
2. Check for any failures or errors
3. Analyze test output and logs
4. Debug any issues found
5. Re-run tests after fixes
If tests fail:
- Add console.log statements to track execution flow
- Log important events like task IDs, file paths, and AI responses
- Check test output carefully for error messages and stack traces
- Verify file creation in correct workspace directories
- Ensure proper event handling and timeouts
</instructions>
</step>
<step number="8">
<name>Document and Complete</name>
<instructions>
Finalize the test implementation:
1. Add comprehensive comments explaining complex test logic
2. Document any new test utilities or patterns created
3. Ensure test descriptions clearly explain what is being tested
4. Verify all cleanup procedures are in place
5. Confirm tests can run independently and in any order
Provide the user with:
- Summary of tests created or fixed
- Instructions for running the tests
- Any new patterns or utilities that can be reused
- Recommendations for future test improvements
</instructions>
</step>
</workflow>

View file

@ -1,303 +0,0 @@
<test_patterns>
<mocha_tdd_structure>
<description>Standard Mocha TDD structure for integration tests</description>
<pattern>
<name>Basic Test Suite Structure</name>
<example>
```typescript
import { suite, test, suiteSetup, suiteTeardown } from 'mocha';
import * as assert from 'assert';
import * as vscode from 'vscode';
import { waitFor, waitUntilCompleted, waitUntilAborted } from '../utils/testUtils';
suite('Feature Name Tests', () => {
let testWorkspaceDir: string;
let testFiles: { [key: string]: string } = {};
suiteSetup(async () => {
// Setup test workspace and files
testWorkspaceDir = vscode.workspace.workspaceFolders![0].uri.fsPath;
// Create test files in workspace
});
suiteTeardown(async () => {
// Cleanup test files and tasks
await api.cancelCurrentTask();
});
test('should perform specific functionality', async () => {
// Test implementation
});
});
```
</example>
</pattern>
<pattern>
<name>Event Listening Pattern</name>
<example>
```typescript
test('should handle task completion events', async () => {
const events: any[] = [];
const messageListener = (message: any) => {
events.push({ type: 'message', data: message });
};
const taskCompletedListener = (result: any) => {
events.push({ type: 'taskCompleted', data: result });
};
api.onDidReceiveMessage(messageListener);
api.onTaskCompleted(taskCompletedListener);
try {
// Perform test actions
await api.startTask('test prompt');
await waitUntilCompleted();
// Validate events
assert(events.some(e => e.type === 'taskCompleted'));
} finally {
// Cleanup listeners
api.onDidReceiveMessage(() => {});
api.onTaskCompleted(() => {});
}
});
```
</example>
</pattern>
<pattern>
<name>File Creation Test Pattern</name>
<example>
```typescript
test('should create files in workspace', async () => {
const fileName = 'test-file.txt';
const expectedContent = 'test content';
await api.startTask(`Create a file named ${fileName} with content: ${expectedContent}`);
await waitUntilCompleted();
// Check multiple possible locations
const possiblePaths = [
path.join(testWorkspaceDir, fileName),
path.join(process.cwd(), fileName),
// Add other possible locations
];
let fileFound = false;
let actualContent = '';
for (const filePath of possiblePaths) {
if (fs.existsSync(filePath)) {
actualContent = fs.readFileSync(filePath, 'utf8');
fileFound = true;
break;
}
}
assert(fileFound, `File ${fileName} not found in any expected location`);
assert.strictEqual(actualContent.trim(), expectedContent);
});
```
</example>
</pattern>
</mocha_tdd_structure>
<api_interaction_patterns>
<pattern>
<name>Basic Task Execution</name>
<example>
```typescript
// Start a task and wait for completion
await api.startTask('Your prompt here');
await waitUntilCompleted();
```
</example>
</pattern>
<pattern>
<name>Task with Auto-Approval Settings</name>
<example>
```typescript
// Enable auto-approval for specific actions
await api.updateSettings({
alwaysAllowWrite: true,
alwaysAllowExecute: true
});
await api.startTask('Create and execute a script');
await waitUntilCompleted();
```
</example>
</pattern>
<pattern>
<name>Message Validation</name>
<example>
```typescript
const messages: any[] = [];
api.onDidReceiveMessage((message) => {
messages.push(message);
});
await api.startTask('test prompt');
await waitUntilCompleted();
// Validate specific message types
const toolMessages = messages.filter(m =>
m.type === 'say' && m.say === 'api_req_started'
);
assert(toolMessages.length > 0, 'Expected tool execution messages');
```
</example>
</pattern>
</api_interaction_patterns>
<error_handling_patterns>
<pattern>
<name>Task Abortion Handling</name>
<example>
```typescript
test('should handle task abortion', async () => {
await api.startTask('long running task');
// Abort after short delay
setTimeout(() => api.abortTask(), 1000);
await waitUntilAborted();
// Verify task was properly aborted
const status = await api.getTaskStatus();
assert.strictEqual(status, 'aborted');
});
```
</example>
</pattern>
<pattern>
<name>Error Message Validation</name>
<example>
```typescript
test('should handle invalid input gracefully', async () => {
const errorMessages: any[] = [];
api.onDidReceiveMessage((message) => {
if (message.type === 'error' || message.text?.includes('error')) {
errorMessages.push(message);
}
});
await api.startTask('invalid prompt that should fail');
await waitFor(() => errorMessages.length > 0, 5000);
assert(errorMessages.length > 0, 'Expected error messages');
});
```
</example>
</pattern>
</error_handling_patterns>
<utility_patterns>
<pattern>
<name>File Location Helper</name>
<example>
```typescript
function findFileInWorkspace(fileName: string, workspaceDir: string): string | null {
const possiblePaths = [
path.join(workspaceDir, fileName),
path.join(process.cwd(), fileName),
path.join(os.tmpdir(), fileName),
// Add other common locations
];
for (const filePath of possiblePaths) {
if (fs.existsSync(filePath)) {
return filePath;
}
}
return null;
}
```
</example>
</pattern>
<pattern>
<name>Event Collection Helper</name>
<example>
```typescript
class EventCollector {
private events: any[] = [];
constructor(private api: any) {
this.setupListeners();
}
private setupListeners() {
this.api.onDidReceiveMessage((message: any) => {
this.events.push({ type: 'message', timestamp: Date.now(), data: message });
});
this.api.onTaskCompleted((result: any) => {
this.events.push({ type: 'taskCompleted', timestamp: Date.now(), data: result });
});
}
getEvents(type?: string) {
return type ? this.events.filter(e => e.type === type) : this.events;
}
clear() {
this.events = [];
}
}
```
</example>
</pattern>
</utility_patterns>
<debugging_patterns>
<pattern>
<name>Comprehensive Logging</name>
<example>
```typescript
test('should log execution flow for debugging', async () => {
console.log('Starting test execution');
const events: any[] = [];
api.onDidReceiveMessage((message) => {
console.log('Received message:', JSON.stringify(message, null, 2));
events.push(message);
});
console.log('Starting task with prompt');
await api.startTask('test prompt');
console.log('Waiting for task completion');
await waitUntilCompleted();
console.log('Task completed, events received:', events.length);
console.log('Final workspace state:', fs.readdirSync(testWorkspaceDir));
});
```
</example>
</pattern>
<pattern>
<name>State Validation</name>
<example>
```typescript
function validateTestState(description: string) {
console.log(`=== ${description} ===`);
console.log('Workspace files:', fs.readdirSync(testWorkspaceDir));
console.log('Current working directory:', process.cwd());
console.log('Task status:', api.getTaskStatus?.() || 'unknown');
console.log('========================');
}
```
</example>
</pattern>
</debugging_patterns>
</test_patterns>

View file

@ -1,104 +0,0 @@
<best_practices>
<test_structure>
- Always use suite() and test() blocks following Mocha TDD style
- Use descriptive test names that explain the scenario being tested
- Implement proper setup and teardown in suiteSetup() and suiteTeardown()
- Create test files in the VSCode workspace directory during suiteSetup()
- Store file paths in a test-scoped object for easy reference across tests
- Ensure tests are independent and can run in any order
- Clean up all test files and tasks in suiteTeardown() to avoid test pollution
</test_structure>
<api_interactions>
- Always use the global api object for extension interactions
- Implement proper async/await patterns with the waitFor utility
- Use waitUntilCompleted and waitUntilAborted helpers for task monitoring
- Set appropriate auto-approval settings (alwaysAllowWrite, alwaysAllowExecute) for the functionality being tested
- Listen to and validate appropriate events (message, taskCompleted, taskAborted, etc.)
- Always clean up tasks with cancelCurrentTask or clearCurrentTask after tests
- Use meaningful timeouts that account for actual task execution time
</api_interactions>
<file_system_handling>
- Be aware that files may be created in the workspace directory (/tmp/roo-test-workspace-*) rather than expected locations
- Always check multiple possible file locations when verifying file creation
- Use flexible file location checking that searches workspace directories
- Verify files exist after creation to catch setup issues early
- Account for the fact that the workspace directory is created by runTest.ts
- The AI may use internal tools instead of the documented tools - verify outcomes rather than methods
</file_system_handling>
<event_handling>
- Add multiple event listeners (taskStarted, taskCompleted, taskAborted) for better debugging
- Don't rely on parsing AI messages to detect tool usage - the AI's message format may vary
- Use terminal shell execution events (onDidStartTerminalShellExecution, onDidEndTerminalShellExecution) for command tracking
- Tool executions are reported via api_req_started messages with type="say" and say="api_req_started"
- Focus on testing outcomes (files created, commands executed) rather than message parsing
- There is no "tool_result" message type - tool results appear in "completion_result" or "text" messages
</event_handling>
<error_scenarios>
- Test both positive flows and error scenarios
- Validate message content using proper type assertions
- Implement proper error handling and edge cases
- Use try-catch blocks around critical test operations
- Log important events like task IDs, file paths, and AI responses for debugging
- Check test output carefully for error messages and stack traces
</error_scenarios>
<test_reliability>
- Remove unnecessary waits for specific tool executions - wait for task completion instead
- Simplify message handlers to only capture essential error information
- Use the simplest possible test structure that verifies the outcome
- Avoid complex message parsing logic that depends on AI behavior
- Terminal events are more reliable than message parsing for command execution verification
- Keep prompts simple and direct - complex instructions may confuse the AI
</test_reliability>
<debugging_and_troubleshooting>
- Add console.log statements to track test execution flow
- Log important events like task IDs, file paths, and AI responses
- Use codebase_search first to find similar test patterns before writing new tests
- Create helper functions for common file location checks
- Use descriptive variable names for file paths and content
- Always log the expected vs actual locations when tests fail
- Add comprehensive comments explaining complex test logic
</debugging_and_troubleshooting>
<test_utilities>
- Create reusable test utilities when patterns emerge
- Implement helper functions for common operations like file finding
- Use event collection utilities for consistent event handling
- Create assertion helpers for common validation patterns
- Document any new test utilities or patterns created
- Share common utilities across test files to reduce duplication
</test_utilities>
<ai_interaction_considerations>
- Keep prompts simple and direct - complex instructions may lead to unexpected behavior
- Allow for variations in how the AI accomplishes tasks
- The AI may not always use the exact tool you specify in the prompt
- Be prepared to adapt tests based on actual AI behavior rather than expected behavior
- The AI may interpret instructions creatively - test results rather than implementation details
- The AI will not see the files in the workspace directory, you must tell it to assume they exist and proceed
</ai_interaction_considerations>
<test_execution>
- ALWAYS use the correct working directory: apps/vscode-e2e
- The test command is: npm run test:run
- To run specific tests use environment variable: TEST_FILE="filename.test" npm run test:run
- Example: cd apps/vscode-e2e && TEST_FILE="apply-diff.test" npm run test:run
- Never use npm test directly as it doesn't exist
- Always check available scripts with npm run if unsure
- Run tests incrementally during development to catch issues early
</test_execution>
<code_organization>
- Never write a test file with a single write_to_file tool call
- Always implement tests in parts: structure first, then individual test cases
- Group related tests in the same suite
- Use consistent naming conventions for test files and functions
- Separate test utilities into their own files when they become substantial
- Follow the existing project structure and conventions
</code_organization>
</best_practices>

View file

@ -1,109 +0,0 @@
<common_mistakes_to_avoid>
<test_structure_mistakes>
- Writing a test file with a single write_to_file tool call instead of implementing in parts
- Not using proper Mocha TDD structure with suite() and test() blocks
- Forgetting to implement suiteSetup() and suiteTeardown() for proper cleanup
- Creating tests that depend on each other or specific execution order
- Not cleaning up tasks and files after test completion
- Using describe/it blocks instead of the required suite/test blocks
</test_structure_mistakes>
<api_interaction_mistakes>
- Not using the global api object for extension interactions
- Forgetting to set auto-approval settings (alwaysAllowWrite, alwaysAllowExecute) when testing functionality that requires user approval
- Not implementing proper async/await patterns with waitFor utilities
- Using incorrect timeout values that are too short for actual task execution
- Not properly cleaning up tasks with cancelCurrentTask or clearCurrentTask
- Assuming the AI will use specific tools instead of testing outcomes
</api_interaction_mistakes>
<file_system_mistakes>
- Assuming files will be created in the expected location without checking multiple paths
- Not accounting for the workspace directory being created by runTest.ts
- Creating test files in temporary directories instead of the VSCode workspace directory
- Not verifying files exist after creation during setup
- Forgetting that the AI may not see files in the workspace directory
- Not using flexible file location checking that searches workspace directories
</file_system_mistakes>
<event_handling_mistakes>
- Relying on parsing AI messages to detect tool usage instead of using proper event listeners
- Expecting tool results in "tool_result" message type (which doesn't exist)
- Not listening to terminal shell execution events for command tracking
- Depending on specific message formats that may vary
- Not implementing proper event cleanup after tests
- Parsing complex AI conversation messages instead of focusing on outcomes
</event_handling_mistakes>
<test_execution_mistakes>
- Using npm test instead of npm run test:run
- Not using the correct working directory (apps/vscode-e2e)
- Running tests from the wrong directory
- Not checking available scripts with npm run when unsure
- Forgetting to use TEST_FILE environment variable for specific tests
- Not running tests incrementally during development
</test_execution_mistakes>
<debugging_mistakes>
- Not adding sufficient logging to track test execution flow
- Not logging important events like task IDs, file paths, and AI responses
- Not using codebase_search to find similar test patterns before writing new tests
- Not checking test output carefully for error messages and stack traces
- Not validating test state at critical points
- Assuming test failures are due to code issues without checking test logic
</debugging_mistakes>
<ai_interaction_mistakes>
- Using complex instructions that may confuse the AI
- Expecting the AI to use exact tools specified in prompts
- Not allowing for variations in how the AI accomplishes tasks
- Testing implementation details instead of outcomes
- Not adapting tests based on actual AI behavior
- Forgetting to tell the AI to assume files exist in the workspace directory
</ai_interaction_mistakes>
<reliability_mistakes>
- Adding unnecessary waits for specific tool executions
- Using complex message parsing logic that depends on AI behavior
- Not using the simplest possible test structure
- Depending on specific AI message formats
- Not using terminal events for reliable command execution verification
- Making tests too brittle by depending on exact AI responses
</reliability_mistakes>
<workspace_mistakes>
- Not understanding that files may be created in /tmp/roo-test-workspace-* directories
- Assuming the AI can see files in the workspace directory
- Not checking multiple possible file locations when verifying creation
- Creating files outside the VSCode workspace during tests
- Not properly setting up the test workspace in suiteSetup()
- Forgetting to clean up workspace files in suiteTeardown()
</workspace_mistakes>
<message_handling_mistakes>
- Expecting specific message types for tool execution results
- Not understanding that ClineMessage types have specific values
- Trying to parse tool execution from AI conversation messages
- Not checking packages/types/src/message.ts for valid message types
- Depending on message parsing instead of outcome verification
- Not using api_req_started messages to verify tool execution
</message_handling_mistakes>
<timeout_and_timing_mistakes>
- Using timeouts that are too short for actual task execution
- Not accounting for AI processing time in test timeouts
- Waiting for specific tool executions instead of task completion
- Not implementing proper retry logic for flaky operations
- Using fixed delays instead of condition-based waiting
- Not considering that some operations may take longer in CI environments
</timeout_and_timing_mistakes>
<test_data_mistakes>
- Not creating test files in the correct workspace directory
- Using hardcoded paths that don't work across different environments
- Not storing file paths in test-scoped objects for easy reference
- Creating test data that conflicts with other tests
- Not cleaning up test data properly after tests complete
- Using test data that's too complex for the AI to handle reliably
</test_data_mistakes>
</common_mistakes_to_avoid>

View file

@ -1,209 +0,0 @@
<test_environment_and_tools>
<test_framework>
<description>VSCode E2E testing framework using Mocha and VSCode Test</description>
<key_components>
- Mocha TDD framework for test structure
- VSCode Test framework for extension testing
- Custom test utilities and helpers
- Event-driven testing patterns
- Workspace-based test execution
</key_components>
</test_framework>
<directory_structure>
<test_files_location>apps/vscode-e2e/src/suite/</test_files_location>
<test_utilities>apps/vscode-e2e/src/utils/</test_utilities>
<test_runner>apps/vscode-e2e/src/runTest.ts</test_runner>
<package_config>apps/vscode-e2e/package.json</package_config>
<type_definitions>packages/types/</type_definitions>
</directory_structure>
<test_execution_commands>
<working_directory>apps/vscode-e2e</working_directory>
<commands>
<run_all_tests>npm run test:run</run_all_tests>
<run_specific_test>TEST_FILE="filename.test" npm run test:run</run_specific_test>
<example>cd apps/vscode-e2e && TEST_FILE="apply-diff.test" npm run test:run</example>
<check_scripts>npm run</check_scripts>
</commands>
<important_notes>
- Never use npm test directly as it doesn't exist
- Always use the correct working directory
- Use TEST_FILE environment variable for specific tests
- Check available scripts with npm run if unsure
</important_notes>
</test_execution_commands>
<api_object>
<description>Global api object for extension interactions</description>
<key_methods>
<task_management>
- api.startTask(prompt: string): Start a new task
- api.cancelCurrentTask(): Cancel the current task
- api.clearCurrentTask(): Clear the current task
- api.abortTask(): Abort the current task
- api.getTaskStatus(): Get current task status
</task_management>
<event_listeners>
- api.onDidReceiveMessage(callback): Listen to messages
- api.onTaskCompleted(callback): Listen to task completion
- api.onTaskAborted(callback): Listen to task abortion
- api.onTaskStarted(callback): Listen to task start
- api.onDidStartTerminalShellExecution(callback): Terminal start events
- api.onDidEndTerminalShellExecution(callback): Terminal end events
</event_listeners>
<settings>
- api.updateSettings(settings): Update extension settings
- api.getSettings(): Get current settings
</settings>
</key_methods>
</api_object>
<test_utilities>
<wait_functions>
<waitFor>
<description>Wait for a condition to be true</description>
<usage>await waitFor(() => condition, timeout)</usage>
<example>await waitFor(() => fs.existsSync(filePath), 5000)</example>
</waitFor>
<waitUntilCompleted>
<description>Wait until current task is completed</description>
<usage>await waitUntilCompleted()</usage>
<timeout>Default timeout for task completion</timeout>
</waitUntilCompleted>
<waitUntilAborted>
<description>Wait until current task is aborted</description>
<usage>await waitUntilAborted()</usage>
<timeout>Default timeout for task abortion</timeout>
</waitUntilAborted>
</wait_functions>
<helper_patterns>
<file_location_helper>
<description>Helper to find files in multiple possible locations</description>
<usage>Use when files might be created in different workspace directories</usage>
</file_location_helper>
<event_collector>
<description>Utility to collect and analyze events during test execution</description>
<usage>Use for comprehensive event tracking and validation</usage>
</event_collector>
<assertion_helpers>
<description>Custom assertion functions for common test patterns</description>
<usage>Use for consistent validation across tests</usage>
</assertion_helpers>
</helper_patterns>
</test_utilities>
<workspace_management>
<workspace_creation>
<description>Test workspaces are created by runTest.ts</description>
<location>/tmp/roo-test-workspace-*</location>
<access>vscode.workspace.workspaceFolders![0].uri.fsPath</access>
</workspace_creation>
<file_creation_strategy>
<setup_phase>Create all test files in suiteSetup() before any tests run</setup_phase>
<location>Always create files in the VSCode workspace directory</location>
<verification>Verify files exist after creation to catch setup issues early</verification>
<cleanup>Clean up all test files in suiteTeardown() to avoid test pollution</cleanup>
<storage>Store file paths in a test-scoped object for easy reference</storage>
</file_creation_strategy>
<ai_visibility>
<important_note>The AI will not see the files in the workspace directory</important_note>
<solution>Tell the AI to assume files exist and proceed as if they do</solution>
<verification>Always verify outcomes rather than relying on AI file visibility</verification>
</ai_visibility>
</workspace_management>
<message_types>
<description>Understanding message types for proper event handling</description>
<reference>Check packages/types/src/message.ts for valid message types</reference>
<key_message_types>
<api_req_started>
<type>say</type>
<say>api_req_started</say>
<description>Indicates tool execution started</description>
<text_content>JSON with tool name and execution details</text_content>
<usage>Most reliable way to verify tool execution</usage>
</api_req_started>
<completion_result>
<description>Contains tool execution results</description>
<usage>Tool results appear here, not in "tool_result" type</usage>
</completion_result>
<text_messages>
<description>General AI conversation messages</description>
<caution>Format may vary, don't rely on parsing these for tool detection</caution>
</text_messages>
</key_message_types>
</message_types>
<auto_approval_settings>
<description>Settings to enable automatic approval of AI actions</description>
<critical_settings>
<alwaysAllowWrite>Enable for file creation/modification tests</alwaysAllowWrite>
<alwaysAllowExecute>Enable for command execution tests</alwaysAllowExecute>
<alwaysAllowBrowser>Enable for browser-related tests</alwaysAllowBrowser>
</critical_settings>
<usage>
```typescript
await api.updateSettings({
alwaysAllowWrite: true,
alwaysAllowExecute: true
});
```
</usage>
<importance>Without proper auto-approval settings, the AI won't be able to perform actions without user approval</importance>
</auto_approval_settings>
<debugging_tools>
<console_logging>
<description>Use console.log for tracking test execution flow</description>
<best_practices>
- Log test phase transitions
- Log important events and data
- Log file paths and workspace state
- Log expected vs actual outcomes
</best_practices>
</console_logging>
<state_validation>
<description>Helper functions to validate test state at critical points</description>
<includes>
- Workspace file listing
- Current working directory
- Task status
- Event counts
</includes>
</state_validation>
<error_analysis>
<description>Tools for analyzing test failures</description>
<techniques>
- Stack trace analysis
- Event timeline reconstruction
- File system state comparison
- Message flow analysis
</techniques>
</error_analysis>
</debugging_tools>
<performance_considerations>
<timeouts>
<description>Appropriate timeout values for different operations</description>
<task_completion>Use generous timeouts for task completion (30+ seconds)</task_completion>
<file_operations>Shorter timeouts for file system operations (5-10 seconds)</file_operations>
<event_waiting>Medium timeouts for event waiting (10-15 seconds)</event_waiting>
</timeouts>
<resource_management>
<description>Proper cleanup to avoid resource leaks</description>
<event_listeners>Always clean up event listeners after tests</event_listeners>
<tasks>Cancel or clear tasks in teardown</tasks>
<files>Remove test files to avoid disk space issues</files>
</resource_management>
</performance_considerations>
</test_environment_and_tools>

View file

@ -1,62 +1,41 @@
<workflow>
<step number="1">
<name>Determine Workflow Type and Retrieve Context</name>
<name>Retrieve Issue Context</name>
<instructions>
First, determine what type of work is needed. The user will provide either:
- An issue number/URL (e.g., "#123" or GitHub issue URL) - for new implementation
- A PR number/URL (e.g., "#456" or GitHub PR URL) - for addressing review feedback
- A description of changes needed for an existing PR
The user should provide a full GitHub issue URL (e.g., "https://github.com/owner/repo/issues/123") for implementation.
For Issue-based workflow:
Extract the issue number and retrieve it:
Parse the URL to extract:
- Owner (organization or username)
- Repository name
- Issue number
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_issue</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"issue_number": [extracted number]
}
</arguments>
</use_mcp_tool>
For example, from https://github.com/RooCodeInc/Roo-Code/issues/123:
- Owner: RooCodeInc
- Repo: Roo-Code
- Issue: 123
For PR Review workflow:
Extract the PR number and retrieve it:
Then retrieve the issue:
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_pull_request</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"pull_number": [extracted number]
}
</arguments>
</use_mcp_tool>
<execute_command>
<command>gh api repos/[owner]/[repo]/issues/[issue-number] --jq '{number,title,body,state,labels,assignees,milestone,createdAt:.created_at,updatedAt:.updated_at,closedAt:.closed_at,author:.user.login}'</command>
</execute_command>
Then get PR review comments:
If the command fails with an authentication error (e.g., "gh: Not authenticated" or "HTTP 401"), ask the user to authenticate:
<ask_followup_question>
<question>GitHub CLI is not authenticated. Please run 'gh auth login' in your terminal to authenticate, then let me know when you're ready to continue.</question>
<follow_up>
<suggest>I've authenticated, please continue</suggest>
<suggest>I need help with authentication</suggest>
<suggest>Let's use a different approach</suggest>
</follow_up>
</ask_followup_question>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_pull_request_reviews</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"pull_number": [extracted number]
}
</arguments>
</use_mcp_tool>
Analyze the issue to determine:
1. All requirements and acceptance criteria
2. Technical details mentioned
3. Any linked issues or discussions
Analyze the context to determine:
1. Type of work (new issue implementation vs PR feedback)
2. All requirements and acceptance criteria
3. Specific changes requested (for PR reviews)
4. Technical details mentioned
5. Any linked issues or discussions
Note: For PR review feedback, users should use the dedicated pr-fixer mode instead.
</instructions>
</step>
@ -69,23 +48,20 @@
- Community suggestions
- Any decisions or changes to requirements
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_issue_comments</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"issue_number": [issue number]
}
</arguments>
</use_mcp_tool>
<execute_command>
<command>gh api repos/[owner]/[repo]/issues/[issue-number]/comments --paginate --jq '.[].body'</command>
</execute_command>
Also check for:
1. Related issues mentioned in the body or comments
2. Linked pull requests
3. Referenced discussions
If related PRs are mentioned, view them:
<execute_command>
<command>gh pr view [pr-number] --repo [owner]/[repo]</command>
</execute_command>
Document all requirements and constraints found.
</instructions>
</step>
@ -109,16 +85,9 @@
- Identify patterns to follow
- Find related components and utilities
For PR Reviews:
- Search for files mentioned in review comments
- Find related files that use similar patterns
- Locate test files for modified functionality
- Identify files that import/depend on changed code
Example searches based on issue type:
- Bug: Search for error messages, function names, component names
- Feature: Search for similar functionality, API endpoints, UI components
- PR Review: Search for patterns mentioned in feedback
CRITICAL: Always read multiple related files together to understand:
- Current code patterns and conventions
@ -133,10 +102,15 @@
- read_file to examine specific implementations (read multiple files at once)
- search_files for specific patterns or error messages
Also use GitHub tools:
- list_commits to see recent changes to affected files
- get_commit to understand specific changes
- list_pull_requests to find related PRs
Also use GitHub CLI to check recent changes:
<execute_command>
<command>gh api repos/[owner]/[repo]/commits?path=[file-path]&per_page=10 --jq '.[].sha + " " + .[].commit.message'</command>
</execute_command>
Search for related PRs:
<execute_command>
<command>gh pr list --repo [owner]/[repo] --search "[relevant search terms]" --limit 10</command>
</execute_command>
Document:
- All files that need modification
@ -217,7 +191,6 @@
Use appropriate tools:
- apply_diff for targeted changes
- write_to_file for new files
- search_and_replace for systematic updates
After each significant change, run relevant tests:
- execute_command to run test suites
@ -252,11 +225,70 @@
- [ ] No linting errors
If any criteria fail, return to implementation step.
</instructions>
</step>
<step number="7">
<name>Run Tests and Checks</name>
</instructions>
</step>
<step number="7">
<name>Check for Translation Requirements</name>
<instructions>
After implementing changes, analyze if any translations are required:
Translation is needed if the implementation includes:
1. New user-facing text strings in UI components
2. New error messages or user notifications
3. Updated documentation files that need localization
4. New command descriptions or tooltips
5. Changes to announcement files or release notes
6. New configuration options with user-visible descriptions
Check for these patterns:
- Hard-coded strings in React components (.tsx/.jsx files)
- New entries needed in i18n JSON files
- Updated markdown documentation files
- New VSCode command contributions
- Changes to user-facing configuration schemas
If translations are required:
<new_task>
<mode>translate</mode>
<message>Translation needed for issue #[issue-number] implementation.
The following changes require translation into all supported languages:
**Files with new/updated user-facing content:**
- [List specific files and what content needs translation]
- [Include context about where the strings appear]
- [Note any special formatting or constraints]
**Translation scope:**
- [Specify if it's new strings, updated strings, or both]
- [List specific JSON keys that need attention]
- [Note any markdown files that need localization]
**Context for translators:**
- [Explain the feature/fix being implemented]
- [Provide context about how the text is used]
- [Note any technical terms or constraints]
Please ensure all translations maintain consistency with existing terminology and follow the project's localization guidelines.</message>
<todos>
[ ] Identify all user-facing strings that need translation
[ ] Update i18n JSON files for all supported languages
[ ] Translate any markdown documentation files
[ ] Verify translations maintain consistency with existing terminology
[ ] Test translations in the application context
</todos>
</new_task>
Wait for the translation task to complete before proceeding to testing.
If no translations are required, continue to the next step.
</instructions>
</step>
<step number="8">
<name>Run Tests and Checks</name>
<instructions>
Run comprehensive tests to ensure quality:
@ -289,7 +321,7 @@
</instructions>
</step>
<step number="8">
<step number="9">
<name>Prepare Summary</name>
<instructions>
Create a comprehensive summary of the implementation:
@ -341,7 +373,7 @@
</instructions>
</step>
<step number="9">
<step number="10">
<name>Prepare for Pull Request</name>
<instructions>
If user wants to create a pull request, prepare everything needed:
@ -412,13 +444,13 @@
**Branch:** [branch-name]
**Title:** [PR title]
**Target:** RooCodeInc/Roo-Code (main branch)
**Target:** [owner]/[repo] (main branch)
Here's the PR description:
[Show prepared PR description]
Would you like me to create this pull request to RooCodeInc/Roo-Code?</question>
Would you like me to create this pull request to [owner]/[repo]?</question>
<follow_up>
<suggest>Yes, create the pull request</suggest>
<suggest>Let me review the PR description first</suggest>
@ -429,49 +461,31 @@
</instructions>
</step>
<step number="10">
<step number="11">
<name>Create Pull Request</name>
<instructions>
Once user approves, create the pull request using GitHub MCP:
Once user approves, create the pull request using GitHub CLI:
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>create_pull_request</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"title": "[Type]: [Brief description] (#[issue-number])",
"head": "[user-fork-owner]:[branch-name]",
"base": "main",
"body": "[Complete PR description from step 9]",
"draft": false,
"maintainer_can_modify": true
}
</arguments>
</use_mcp_tool>
If the user doesn't have push access to [owner]/[repo], fork the repository:
<execute_command>
<command>gh repo fork [owner]/[repo] --clone</command>
</execute_command>
Note: The "head" parameter format depends on where the branch exists:
- If user has push access: "branch-name"
- If working from a fork: "username:branch-name"
Create the pull request:
<execute_command>
<command>gh pr create --repo [owner]/[repo] --base main --title "[Type]: [Brief description] (#[issue-number])" --body "[Complete PR description from step 10]" --maintainer-can-modify</command>
</execute_command>
The gh CLI will automatically handle the fork workflow if needed.
After PR creation:
1. Capture the PR number and URL from the response
1. Capture the PR number and URL from the command output
2. Link the PR to the issue by commenting on the issue
3. Inform the user of the successful creation
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>add_issue_comment</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"issue_number": [original issue number],
"body": "PR #[new PR number] has been created to address this issue: [PR URL]"
}
</arguments>
</use_mcp_tool>
<execute_command>
<command>gh issue comment [original issue number] --repo [owner]/[repo] --body "PR #[new PR number] has been created to address this issue"</command>
</execute_command>
Final message to user:
```
@ -492,13 +506,13 @@
</instructions>
</step>
<step number="11">
<step number="12">
<name>Monitor PR Checks</name>
<instructions>
After the PR is created, monitor the CI/CD checks to ensure they pass:
<execute_command>
<command>gh pr checks --watch</command>
<command>gh pr checks [PR number] --repo [owner]/[repo] --watch</command>
</execute_command>
This command will:

View file

@ -12,4 +12,8 @@
- Update documentation when needed
- Add tests for any new functionality
- Check for accessibility issues (for UI changes)
- Delegate translation tasks to translate mode when implementing user-facing changes
- Always check for hard-coded strings and internationalization needs
- When using new_task to delegate work, always include a comprehensive todos list
- Wait for translation completion before proceeding to final testing
</best_practices>

View file

@ -0,0 +1,245 @@
<github_cli_usage>
<overview>
This mode uses the GitHub CLI (gh) for all GitHub operations.
The mode assumes the user has gh installed and authenticated. If authentication errors occur,
the mode will prompt the user to authenticate.
Users must provide full GitHub issue URLs (e.g., https://github.com/owner/repo/issues/123)
so the mode can extract the repository information dynamically.
</overview>
<url_parsing>
<pattern>https://github.com/[owner]/[repo]/issues/[number]</pattern>
<extraction>
- Owner: The organization or username
- Repo: The repository name
- Number: The issue number
</extraction>
</url_parsing>
<authentication_handling>
<approach>Assume authenticated, handle errors gracefully</approach>
<when>Only check authentication if a gh command fails with auth error</when>
<error_patterns>
- "gh: Not authenticated"
- "HTTP 401"
- "HTTP 403: Resource not accessible"
</error_patterns>
</authentication_handling>
<primary_commands>
<command name="gh_issue_view">
<purpose>Retrieve the issue details at the start using the REST Issues API.</purpose>
<when>Always use first to get the full issue content</when>
<syntax>gh api repos/[owner]/[repo]/issues/[issue-number] --jq '{number,title,body,state,labels,assignees,milestone,createdAt:.created_at,updatedAt:.updated_at,closedAt:.closed_at,author:.user.login}'</syntax>
<example>
<execute_command>
<command>gh api repos/octocat/hello-world/issues/123 --jq '{number,title,body,state,labels,assignees,milestone,createdAt:.created_at,updatedAt:.updated_at,closedAt:.closed_at,author:.user.login}'</command>
</execute_command>
</example>
</command>
<command name="gh_issue_comments">
<purpose>Get additional context and requirements from issue comments.</purpose>
<when>Always use after viewing issue to see full discussion</when>
<syntax>gh api repos/[owner]/[repo]/issues/[issue-number]/comments --paginate --jq '.[].body'</syntax>
<example>
<execute_command>
<command>gh api repos/octocat/hello-world/issues/123/comments --paginate --jq '.[].body'</command>
</execute_command>
</example>
</command>
<command name="gh_repo_view_commits">
<purpose>Find recent changes to affected files</purpose>
<when>Use during codebase exploration</when>
<syntax>gh api repos/[owner]/[repo]/commits?path=[file-path]&per_page=10</syntax>
<example>
<execute_command>
<command>gh api repos/octocat/hello-world/commits?path=src/api/index.ts&per_page=10 --jq '.[].sha + " " + .[].commit.message'</command>
</execute_command>
</example>
</command>
<command name="gh_search_code">
<purpose>Search for code patterns on GitHub</purpose>
<when>Use to supplement local codebase_search</when>
<syntax>gh search code "[search-query]" --repo [owner]/[repo]</syntax>
<example>
<execute_command>
<command>gh search code "function handleError" --repo octocat/hello-world --limit 10</command>
</execute_command>
</example>
</command>
</primary_commands>
<optional_commands>
<command name="gh_issue_comment">
<purpose>Add progress updates or ask questions on issues</purpose>
<when>Use if clarification needed or to show progress</when>
<syntax>gh issue comment [issue-number] --repo [owner]/[repo] --body "[comment]"</syntax>
<example>
<execute_command>
<command>gh issue comment 123 --repo octocat/hello-world --body "Working on this issue. Found the root cause in the theme detection logic."</command>
</execute_command>
</example>
</command>
<command name="gh_pr_list">
<purpose>Find related or similar PRs</purpose>
<when>Use to understand similar changes</when>
<syntax>gh pr list --repo [owner]/[repo] --search "[search-terms]"</syntax>
<example>
<execute_command>
<command>gh pr list --repo octocat/hello-world --search "dark theme" --limit 10</command>
</execute_command>
</example>
</command>
<command name="gh_pr_diff">
<purpose>View the diff of a pull request</purpose>
<when>Use to understand changes in a PR</when>
<syntax>gh pr diff [pr-number] --repo [owner]/[repo]</syntax>
<example>
<execute_command>
<command>gh pr diff 456 --repo octocat/hello-world</command>
</execute_command>
</example>
</command>
</optional_commands>
<projects_v2_commands>
<command name="gh_projects_v2_for_issue">
<purpose>Inspect associations with GitHub Projects (new Projects experience) for a given issue</purpose>
<when>Use when project context is relevant to understanding priority, ownership, or workflow</when>
<syntax>gh api graphql -f query='
query($owner:String!, $repo:String!, $number:Int!) {
repository(owner:$owner, name:$repo) {
issue(number:$number) {
projectsV2(first:20) {
nodes {
title
url
}
}
}
}
}
' -F owner=[owner] -F repo=[repo] -F number=[issue-number]</syntax>
<note>
This uses the projectsV2 field from the new GitHub Projects experience for issue-level project context.
</note>
</command>
</projects_v2_commands>
<pull_request_commands>
<command name="gh_pr_create">
<purpose>Create a pull request</purpose>
<when>Use in step 11 after user approval</when>
<important>
- Target the repository from the provided URL
- Use "main" as the base branch unless specified otherwise
- Include issue number in PR title
- Use --maintainer-can-modify flag
</important>
<syntax>gh pr create --repo [owner]/[repo] --base main --title "[title]" --body "[body]" --maintainer-can-modify</syntax>
<example>
<execute_command>
<command>gh pr create --repo octocat/hello-world --base main --title "fix: Resolve dark theme button visibility (#123)" --body "## Description
Fixes #123
[Full PR description]" --maintainer-can-modify</command>
</execute_command>
</example>
<note>
If working from a fork, ensure the fork is set as the remote and push the branch there first.
The gh CLI will automatically handle the fork workflow.
</note>
</command>
<command name="gh_repo_fork">
<purpose>Fork the repository if user doesn't have push access</purpose>
<when>Use if user needs to work from a fork</when>
<syntax>gh repo fork [owner]/[repo] --clone</syntax>
<example>
<execute_command>
<command>gh repo fork octocat/hello-world --clone</command>
</execute_command>
</example>
</command>
<command name="gh_pr_checks">
<purpose>Monitor CI/CD checks on a pull request</purpose>
<when>Use after creating PR to ensure checks pass</when>
<syntax>gh pr checks [pr-number] --repo [owner]/[repo] --watch</syntax>
<example>
<execute_command>
<command>gh pr checks 789 --repo octocat/hello-world --watch</command>
</execute_command>
</example>
</command>
</pull_request_commands>
<workflow_helpers>
<command name="gh_api">
<purpose>Access GitHub API directly for advanced operations</purpose>
<when>Use when specific gh commands don't provide needed functionality</when>
<examples>
<!-- Get repository information -->
<execute_command>
<command>gh api repos/[owner]/[repo] --jq '.default_branch'</command>
</execute_command>
<!-- Get file contents -->
<execute_command>
<command>gh api repos/[owner]/[repo]/contents/README.md --jq '.content' | base64 -d</command>
</execute_command>
<!-- Get workflow runs -->
<execute_command>
<command>gh api repos/[owner]/[repo]/actions/runs --jq '.workflow_runs[0:5] | .[] | .id, .status, .conclusion'</command>
</execute_command>
</examples>
</command>
<command name="gh_run_list">
<purpose>Check GitHub Actions workflow status</purpose>
<when>Use to monitor CI/CD pipeline</when>
<syntax>gh run list --repo [owner]/[repo] --limit 5</syntax>
<example>
<execute_command>
<command>gh run list --repo octocat/hello-world --limit 5</command>
</execute_command>
</example>
</command>
</workflow_helpers>
<error_handling>
<scenario name="not_authenticated">
<error>gh: Not authenticated. Run 'gh auth login' to authenticate.</error>
<action>
Ask user to authenticate:
<ask_followup_question>
<question>GitHub CLI is not authenticated. Please run 'gh auth login' in your terminal to authenticate, then let me know when you're ready to continue.</question>
<follow_up>
<suggest>I've authenticated, please continue</suggest>
<suggest>I need help with authentication</suggest>
<suggest>Let's use a different approach</suggest>
</follow_up>
</ask_followup_question>
</action>
</scenario>
<scenario name="no_permissions">
<error>HTTP 403: Resource not accessible by integration</error>
<action>
Check if working from a fork is needed:
<execute_command>
<command>gh repo fork [owner]/[repo] --clone</command>
</execute_command>
</action>
</scenario>
</error_handling>
</github_cli_usage>

View file

@ -1,88 +0,0 @@
<github_mcp_tools_usage>
<primary_tools>
<tool name="get_issue">
<purpose>Retrieve the issue details at the start</purpose>
<when>Always use first to get the full issue content</when>
</tool>
<tool name="get_issue_comments">
<purpose>Get additional context and requirements</purpose>
<when>Always use after get_issue to see full discussion</when>
</tool>
<tool name="list_commits">
<purpose>Find recent changes to affected files</purpose>
<when>Use during codebase exploration</when>
</tool>
<tool name="search_code">
<purpose>Find code patterns on GitHub</purpose>
<when>Use to supplement local codebase_search</when>
</tool>
</primary_tools>
<optional_tools>
<tool name="add_issue_comment">
<purpose>Add progress updates or ask questions</purpose>
<when>Use if clarification needed or to show progress</when>
</tool>
<tool name="list_pull_requests">
<purpose>Find related or similar PRs</purpose>
<when>Use to understand similar changes</when>
</tool>
<tool name="get_pull_request">
<purpose>Get details of related PRs</purpose>
<when>Use when issue references specific PRs</when>
</tool>
</optional_tools>
<pull_request_tools>
<tool name="create_pull_request">
<purpose>Create a pull request to RooCodeInc/Roo-Code</purpose>
<when>Use in step 10 after user approval</when>
<important>
- Always target RooCodeInc/Roo-Code repository
- Use "main" as the base branch unless specified otherwise
- Include issue number in PR title
- Set maintainer_can_modify to true
</important>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>create_pull_request</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"title": "fix: Resolve dark theme button visibility (#123)",
"head": "username:fix/issue-123-dark-theme-button",
"base": "main",
"body": "## Description\n\nFixes #123\n\n[Full PR description]",
"draft": false,
"maintainer_can_modify": true
}
</arguments>
</use_mcp_tool>
</example>
</tool>
<tool name="fork_repository">
<purpose>Fork the repository if user doesn't have push access</purpose>
<when>Use if user needs to work from a fork</when>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>fork_repository</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code"
}
</arguments>
</use_mcp_tool>
</example>
</tool>
</pull_request_tools>
</github_mcp_tools_usage>

View file

@ -4,6 +4,7 @@
2. Push to appropriate branch (fork or direct)
3. Prepare comprehensive PR description
4. Get user approval before creating PR
5. Extract owner and repo from the provided GitHub URL
</preparation>
<pr_title_format>
@ -22,9 +23,30 @@
- Screenshots/demos if applicable
</pr_description_template>
<creating_pr_with_cli>
Use GitHub CLI to create the pull request:
<execute_command>
<command>gh pr create --repo [owner]/[repo] --base main --title "[title]" --body "[description]" --maintainer-can-modify</command>
</execute_command>
If working from a fork, ensure you've forked first:
<execute_command>
<command>gh repo fork [owner]/[repo] --clone</command>
</execute_command>
The gh CLI automatically handles fork workflows.
</creating_pr_with_cli>
<after_creation>
1. Comment on original issue with PR link
1. Comment on original issue with PR link:
<execute_command>
<command>gh issue comment [issue-number] --repo [owner]/[repo] --body "PR #[pr-number] has been created to address this issue"</command>
</execute_command>
2. Inform user of successful creation
3. Provide next steps and tracking info
4. Monitor PR checks:
<execute_command>
<command>gh pr checks [pr-number] --repo [owner]/[repo] --watch</command>
</execute_command>
</after_creation>
</pull_request_workflow>

View file

@ -1,14 +1,4 @@
<github_communication_guidelines>
<pr_comments>
- Keep comments concise and focused on technical substance
- Avoid overly verbose explanations unless specifically requested
- Sound human and conversational, not robotic
- Address specific feedback points directly
- Use bullet points for multiple changes
- Reference line numbers or specific code when relevant
- Example: "Updated the error handling in `validateInput()` to catch edge cases as requested. Also added the missing null check on line 45."
</pr_comments>
<issue_comments>
- Provide brief status updates when working on complex issues
- Ask specific questions if requirements are unclear

View file

@ -1,30 +0,0 @@
<pr_review_workflow>
<handling_feedback>
When working on PR review feedback:
1. Read all review comments carefully
2. Identify specific changes requested
3. Group related feedback into logical changes
4. Address each point systematically
5. Test changes thoroughly
6. Respond to each review comment when pushing updates
7. Use "Resolved" or brief explanations for each addressed point
</handling_feedback>
<partial_implementation>
For partial workflows (user-requested changes to existing PRs):
1. Focus only on the specific changes requested
2. Don't refactor unrelated code unless explicitly asked
3. Maintain consistency with existing PR approach
4. Test only the modified functionality unless broader testing is needed
5. Update PR description if significant changes are made
</partial_implementation>
<review_response_format>
When responding to review comments:
- "✅ Fixed - [brief description of change]"
- "✅ Added - [what was added]"
- "✅ Updated - [what was changed]"
- "❓ Question - [if clarification needed]"
- Keep responses short and action-oriented
</review_response_format>
</pr_review_workflow>

View file

@ -0,0 +1,205 @@
<pr_template_instructions>
<overview>
This file contains the official Roo Code PR template that must be used when creating pull requests.
All PRs must follow this exact format to ensure consistency and proper documentation.
</overview>
<pr_body_template>
<description>
The PR body must follow this exact Roo Code PR template with all required sections.
Replace placeholder content in square brackets with actual information.
</description>
<template><![CDATA[
<!--
Thank you for contributing to Roo Code!
Before submitting your PR, please ensure:
- It's linked to an approved GitHub Issue.
- You've reviewed our [Contributing Guidelines](../CONTRIBUTING.md).
-->
### Related GitHub Issue
<!-- Every PR MUST be linked to an approved issue. -->
Closes: #[ISSUE_NUMBER] <!-- Replace with the issue number, e.g., Closes: #123 -->
### Roo Code Task Context (Optional)
<!--
If you used Roo Code to help create this PR, you can share public task links here.
This helps reviewers understand your development process and provides additional context.
Example: https://app.roocode.com/share/task-id
-->
[TASK_CONTEXT]
### Description
<!--
Briefly summarize the changes in this PR and how they address the linked issue.
The issue should cover the "what" and "why"; this section should focus on:
- The "how": key implementation details, design choices, or trade-offs made.
- Anything specific reviewers should pay attention to in this PR.
-->
[DESCRIPTION_CONTENT]
### Test Procedure
<!--
Detail the steps to test your changes. This helps reviewers verify your work.
- How did you test this specific implementation? (e.g., unit tests, manual testing steps)
- How can reviewers reproduce your tests or verify the fix/feature?
- Include relevant testing environment details if applicable.
-->
[TEST_PROCEDURE_CONTENT]
### Pre-Submission Checklist
<!-- Go through this checklist before marking your PR as ready for review. -->
- [x] **Issue Linked**: This PR is linked to an approved GitHub Issue (see "Related GitHub Issue" above).
- [x] **Scope**: My changes are focused on the linked issue (one major feature/fix per PR).
- [x] **Self-Review**: I have performed a thorough self-review of my code.
- [x] **Testing**: New and/or updated tests have been added to cover my changes (if applicable).
- [x] **Documentation Impact**: I have considered if my changes require documentation updates (see "Documentation Updates" section below).
- [x] **Contribution Guidelines**: I have read and agree to the [Contributor Guidelines](/CONTRIBUTING.md).
### Screenshots / Videos
<!--
For UI changes, please provide before-and-after screenshots or a short video of the *actual results*.
This greatly helps in understanding the visual impact of your changes.
-->
[SCREENSHOTS_CONTENT]
### Documentation Updates
<!--
Does this PR necessitate updates to user-facing documentation?
- [ ] No documentation updates are required.
- [ ] Yes, documentation updates are required. (Please describe what needs to be updated or link to a PR in the docs repository).
-->
[DOCUMENTATION_UPDATES_CONTENT]
### Additional Notes
<!-- Add any other context, questions, or information for reviewers here. -->
[ADDITIONAL_NOTES_CONTENT]
### Get in Touch
<!--
Please provide your Discord username for reviewers or maintainers to reach you if they have questions about your PR
-->
[DISCORD_USERNAME]
]]></template>
</pr_body_template>
<github_cli_commands>
<description>
Valid GitHub CLI commands for creating PRs with the proper template
</description>
<create_pr_command>
<description>Create a PR using the filled template</description>
<command><![CDATA[
gh pr create \
--repo [owner]/[repo] \
--base main \
--title "[Type]: [Brief description] (#[issue-number])" \
--body-file pr-body.md \
--maintainer-can-modify
]]></command>
<note>The PR body should be saved to a temporary file first, then referenced with --body-file</note>
</create_pr_command>
<create_pr_inline>
<description>Alternative: Create PR with inline body (for shorter content)</description>
<command><![CDATA[
gh pr create \
--repo [owner]/[repo] \
--base main \
--title "[Type]: [Brief description] (#[issue-number])" \
--body "[Complete PR body content]" \
--maintainer-can-modify
]]></command>
<note>Use this only if the body content doesn't contain special characters that need escaping</note>
</create_pr_inline>
<fork_if_needed>
<description>Fork repository if user doesn't have push access</description>
<command><![CDATA[
gh repo fork [owner]/[repo] --clone=false
]]></command>
<note>The --clone=false flag prevents cloning since we're already in the repo</note>
</fork_if_needed>
</github_cli_commands>
<pr_title_format>
<description>PR titles should follow conventional commit format</description>
<formats>
<format type="bug_fix">fix: [brief description] (#[issue-number])</format>
<format type="feature">feat: [brief description] (#[issue-number])</format>
<format type="docs">docs: [brief description] (#[issue-number])</format>
<format type="refactor">refactor: [brief description] (#[issue-number])</format>
<format type="test">test: [brief description] (#[issue-number])</format>
<format type="chore">chore: [brief description] (#[issue-number])</format>
</formats>
</pr_title_format>
<placeholder_guidance>
<description>How to fill in the template placeholders</description>
<placeholders>
<placeholder name="ISSUE_NUMBER">
<description>The GitHub issue number being addressed</description>
<example>123</example>
</placeholder>
<placeholder name="TASK_CONTEXT">
<description>Optional Roo Code task links if used during development</description>
<example>https://app.roocode.com/share/task-abc123</example>
<default>_No Roo Code task context for this PR_</default>
</placeholder>
<placeholder name="DESCRIPTION_CONTENT">
<description>Detailed explanation of implementation approach</description>
<guidance>
- Focus on HOW you solved the problem
- Mention key design decisions
- Highlight any trade-offs made
- Point out areas needing special review attention
</guidance>
</placeholder>
<placeholder name="TEST_PROCEDURE_CONTENT">
<description>Steps to verify the changes work correctly</description>
<guidance>
- List specific test commands run
- Describe manual testing performed
- Include steps for reviewers to reproduce tests
- Mention test environment details if relevant
</guidance>
</placeholder>
<placeholder name="SCREENSHOTS_CONTENT">
<description>Visual evidence of changes for UI modifications</description>
<default>_No UI changes in this PR_</default>
</placeholder>
<placeholder name="DOCUMENTATION_UPDATES_CONTENT">
<description>Documentation impact assessment</description>
<default>- [x] No documentation updates are required.</default>
</placeholder>
<placeholder name="ADDITIONAL_NOTES_CONTENT">
<description>Any extra context for reviewers</description>
<default>_No additional notes_</default>
</placeholder>
<placeholder name="DISCORD_USERNAME">
<description>Discord username for communication</description>
<example>@username</example>
</placeholder>
</placeholders>
</placeholder_guidance>
</pr_template_instructions>

View file

@ -0,0 +1,98 @@
<workflow_instructions>
<mode_overview>
This mode investigates GitHub issues to find the probable root cause and suggest a theoretical solution. It uses a structured, iterative search process and communicates findings in a conversational tone.
</mode_overview>
<initialization_steps>
<step number="1">
<action>Understand the user's request</action>
<details>
The user will provide a GitHub issue URL or number. Your first step is to fetch the issue details using the `gh` CLI.
</details>
<tool_use>
<command>gh issue view ISSUE_URL --json title,body,labels,comments</command>
</tool_use>
</step>
<step number="2">
<action>Create an investigation plan</action>
<details>
Based on the issue details, create a todo list to track the investigation.
</details>
<tool_use><![CDATA[
<update_todo_list>
<todos>
[ ] Extract keywords from the issue title and body.
[ ] Perform initial codebase search with keywords.
[ ] Analyze search results and form a hypothesis.
[ ] Attempt to disprove the hypothesis.
[ ] Formulate a theoretical solution.
[ ] Draft a comment for the user.
</todos>
</update_todo_list>
]]></tool_use>
</step>
</initialization_steps>
<main_workflow>
<phase name="investigation">
<description>
Systematically search the codebase to identify the root cause. This is an iterative process.
</description>
<steps>
<step>
<title>Extract Keywords</title>
<description>Identify key terms, function names, error messages, and concepts from the issue title, body, and comments.</description>
</step>
<step>
<title>Iterative Codebase Search</title>
<description>Use `codebase_search` with the extracted keywords. Start broad and then narrow down your search based on the results. Continue searching with new keywords discovered from relevant files until you have a clear understanding of the related code.</description>
<tool_use>
<command>codebase_search</command>
</tool_use>
</step>
<step>
<title>Form a Hypothesis</title>
<description>Based on the search results, form a hypothesis about the probable cause of the issue. Document this hypothesis.</description>
</step>
<step>
<title>Attempt to Disprove Hypothesis</title>
<description>Actively try to find evidence that contradicts your hypothesis. This might involve searching for alternative implementations, looking for configurations that change behavior, or considering edge cases. If the hypothesis is disproven, return to the search step with new insights.</description>
</step>
</steps>
</phase>
<phase name="solution">
<description>Formulate a solution and prepare to communicate it.</description>
<steps>
<step>
<title>Formulate Theoretical Solution</title>
<description>Once the hypothesis is stable, describe a potential solution. Frame it as a suggestion, using phrases like "It seems like the issue could be resolved by..." or "A possible fix would be to...".</description>
</step>
<step>
<title>Draft Comment</title>
<description>Draft a comment for the GitHub issue that explains your findings and suggested solution in a conversational, human-like tone. Start the comment with "Hey @roomote-agent,".</description>
</step>
</steps>
</phase>
<phase name="user_confirmation">
<description>Ask the user for confirmation before posting any comments.</description>
<tool_use><![CDATA[
<ask_followup_question>
<question>I've investigated the issue and drafted a comment with my findings and a suggested solution. Would you like me to post it to the GitHub issue?</question>
<follow_up>
<suggest>Yes, please post the comment to the issue.</suggest>
<suggest>Show me the draft comment first.</suggest>
<suggest>No, do not post the comment.</suggest>
</follow_up>
</ask_followup_question>
]]></tool_use>
</phase>
</main_workflow>
<completion_criteria>
<criterion>A probable cause has been identified and validated.</criterion>
<criterion>A theoretical solution has been proposed.</criterion>
<criterion>The user has decided whether to post a comment on the issue.</criterion>
</completion_criteria>
</workflow_instructions>

View file

@ -0,0 +1,60 @@
<best_practices>
<general_principles>
<principle priority="high">
<name>Be Methodical</name>
<description>Follow the workflow steps precisely. Do not skip the hypothesis validation step. A rigorous process leads to more accurate conclusions.</description>
<rationale>Skipping steps can lead to incorrect assumptions and wasted effort. The goal is to be confident in the proposed solution.</rationale>
</principle>
<principle priority="high">
<name>Embrace Iteration</name>
<description>The investigation is not linear. Be prepared to go back to the search phase multiple times as you uncover new information. Each search should build on the last.</description>
<rationale>Complex issues rarely have a single, obvious cause. Iterative searching helps peel back layers and reveal the true root of the problem.</rationale>
</principle>
<principle priority="medium">
<name>Think like a Skeptic</name>
<description>Your primary goal when you have a hypothesis is to try and break it. Actively look for evidence that you are wrong. This makes your final conclusion much stronger.</description>
<rationale>Confirmation bias is a common pitfall. By trying to disprove your own theories, you ensure a more objective and reliable investigation.</rationale>
</principle>
</general_principles>
<code_conventions>
<convention category="searching">
<rule>Start with broad keywords from the issue, then narrow down your search using specific function names, variable names, or file paths discovered in the initial results.</rule>
<examples>
<good>Initial search: "user authentication fails". Follow-up search: "getUserById invalid token".</good>
<bad>Searching for a generic term like "error" without context.</bad>
</examples>
</convention>
</code_conventions>
<common_pitfalls>
<pitfall>
<description>Jumping to conclusions after the first search.</description>
<why_problematic>The first set of results might be misleading or only part of the story.</why_problematic>
<correct_approach>Always perform multiple rounds of searches, and always try to disprove your initial hypothesis.</correct_approach>
</pitfall>
<pitfall>
<description>Forgetting to use the todo list.</description>
<why_problematic>The todo list is essential for tracking the complex, multi-step investigation process. Without it, you can lose track of your progress and findings.</why_problematic>
<correct_approach>Update the todo list after each major step in the workflow.</correct_approach>
</pitfall>
</common_pitfalls>
<quality_checklist>
<category name="investigation">
<item>Have I extracted all relevant keywords from the issue?</item>
<item>Have I performed at least two rounds of codebase searches?</item>
<item>Have I genuinely tried to disprove my hypothesis?</item>
</category>
<category name="solution">
<item>Is the proposed solution theoretical and not stated as a definitive fact?</item>
<item>Is the explanation clear and easy to understand?</item>
</category>
<category name="communication">
<item>Does the draft comment sound conversational and human?</item>
<item>Does the draft comment start with "Hey @roomote-agent,"?</item>
<item>Have I avoided technical jargon where possible?</item>
<item>Is the tone helpful and not condescending?</item>
</category>
</quality_checklist>
</best_practices>

View file

@ -0,0 +1,45 @@
<common_patterns>
<pattern name="bug_investigation">
<usage>For investigating bug reports where something is broken.</usage>
<template>
<workflow>
<step>1. Identify the exact error message from the issue.</step>
<step>2. Search for the error message in the codebase using `codebase_search`.</step>
<step>3. Analyze the code that throws the error to understand the context.</step>
<step>4. Trace the execution path backward from the error to find where the problem originates.</step>
<step>5. Form a hypothesis about the incorrect logic or state.</step>
<step>6. Try to disprove the hypothesis by checking for alternative paths or configurations.</step>
<step>7. Propose a code change to correct the logic.</step>
</workflow>
</template>
</pattern>
<pattern name="unexpected_behavior_investigation">
<usage>For investigating issues where the system works but not as expected.</usage>
<template>
<workflow>
<step>1. Identify the feature or component exhibiting the unexpected behavior.</step>
<step>2. Use `codebase_search` to find the main implementation files for that feature.</step>
<step>3. Read the relevant code to understand the intended logic.</step>
<step>4. Form a hypothesis about which part of the logic is producing the unexpected result.</step>
<step>5. Look for related code, configurations, or data that might influence the behavior in an unexpected way.</step>
<step>6. Try to disprove the hypothesis. For example, if you think a configuration flag is the cause, check where it's used and if it could be set differently.</step>
<step>7. Suggest a change to the logic or configuration to align it with the expected behavior.</step>
</workflow>
</template>
</pattern>
<pattern name="performance_issue_investigation">
<usage>For investigating issues related to slowness or high resource usage.</usage>
<template>
<workflow>
<step>1. Identify the specific action or process that is slow.</step>
<step>2. Use `codebase_search` to find the code responsible for that action.</step>
<step>3. Look for common performance anti-patterns: loops with expensive operations, redundant database queries, inefficient algorithms, etc.</step>
<step>4. Form a hypothesis about the performance bottleneck.</step>
<step>5. Try to disprove the hypothesis. Could another part of the system be contributing to the slowness?</step>
<step>6. Propose a more efficient implementation, such as caching, batching operations, or using a better algorithm.</step>
</workflow>
</template>
</pattern>
</common_patterns>

View file

@ -0,0 +1,84 @@
<tool_usage_guide>
<tool_priorities>
<priority level="1">
<tool>gh issue view</tool>
<when>Always use first to get the issue context.</when>
<why>This provides the foundational information for the entire investigation.</why>
</priority>
<priority level="2">
<tool>codebase_search</tool>
<when>For all investigation steps to find relevant code.</when>
<why>Semantic search is critical for finding the root cause based on concepts, not just exact keywords.</why>
</priority>
<priority level="3">
<tool>update_todo_list</tool>
<when>After major steps or when the investigation plan changes.</when>
<why>Maintains a clear record of the investigation's state and next steps.</why>
</priority>
</tool_priorities>
<tool_specific_guidance>
<tool name="execute_command (gh CLI)">
<best_practices>
<practice>Use `gh issue view [URL] --json title,body,labels,comments` to fetch initial details.</practice>
<practice>Use `gh issue comment [URL] --body "..."` to add comments, but only after explicit user approval.</practice>
<practice>Always wrap the comment body in quotes to handle special characters.</practice>
<practice>When posting a comment, the body must start with "Hey @roomote-agent," exactly.</practice>
</best_practices>
<example><![CDATA[
<execute_command>
<command>gh issue view https://github.com/RooCodeInc/Roo-Code/issues/123 --json title,body</command>
</execute_command>
]]></example>
<example><![CDATA[
<execute_command>
<command>gh issue comment https://github.com/RooCodeInc/Roo-Code/issues/123 --body "Hey @roomote-agent, I've investigated and proposed a theoretical fix above."</command>
</execute_command>
]]></example>
</tool>
<tool name="codebase_search">
<best_practices>
<practice>Extract multiple keywords from the issue. Combine them in your search query.</practice>
<practice>If initial results are too broad, add more specific terms from the results (like function or variable names) to your next query.</practice>
<practice>Use this tool iteratively. Don't rely on a single search.</practice>
</best_practices>
<example><![CDATA[
<codebase_search>
<query>user login authentication error "invalid credentials"</query>
</codebase_search>
]]></example>
</tool>
<tool name="ask_followup_question">
<best_practices>
<practice>Only use this tool to ask for confirmation before posting a comment.</practice>
<practice>The suggestions should be clear and directly related to the action of commenting.</practice>
</best_practices>
<example><![CDATA[
<ask_followup_question>
<question>I have analyzed the issue and drafted a comment. Would you like me to post it?</question>
<follow_up>
<suggest>Yes, go ahead and post the comment.</suggest>
<suggest>Let me see the comment first before you post it.</suggest>
<suggest>No, do not post anything. I will handle it.</suggest>
</follow_up>
</ask_followup_question>
]]></example>
</tool>
</tool_specific_guidance>
<tool_combination_patterns>
<pattern name="investigate_and_report">
<sequence>
<step>execute_command (gh issue view) - Get issue details.</step>
<step>update_todo_list - Create an investigation plan.</step>
<step>codebase_search - Perform initial search.</step>
<step>read_file - Analyze relevant file contents.</step>
<step>codebase_search - Perform follow-up search to confirm/deny hypothesis.</step>
<step>ask_followup_question - Ask user to confirm before commenting.</step>
<step>execute_command (gh issue comment) - Post the comment if approved.</step>
</sequence>
</pattern>
</tool_combination_patterns>
</tool_usage_guide>

View file

@ -0,0 +1,99 @@
<complete_examples>
<example name="investigating_a_login_bug">
<scenario>
A user has reported a bug where they are unable to log in with valid credentials, but no error message is shown.
</scenario>
<user_request>
"Please investigate issue #456. Users are reporting that they can't log in."
</user_request>
<workflow>
<step number="1">
<description>Fetch issue details from GitHub.</description>
<tool_use><![CDATA[
<execute_command>
<command>gh issue view 456 --json title,body,comments</command>
</execute_command>
]]></tool_use>
<expected_outcome>Get the title "Login fails silently" and body "Users with valid credentials are not able to log in. The page just refreshes without any error message."</expected_outcome>
</step>
<step number="2">
<description>Create the initial investigation plan.</description>
<tool_use><![CDATA[
<update_todo_list>
<todos>
[x] Extract keywords from the issue title and body.
[-] Perform initial codebase search with keywords.
[ ] Analyze search results and form a hypothesis.
[ ] Attempt to disprove the hypothesis.
[ ] Formulate a theoretical solution.
[ ] Draft a comment for the user.
</todos>
</update_todo_list>
]]></tool_use>
</step>
<step number="3">
<description>Perform initial codebase search using keywords "login", "authentication", "silent fail".</description>
<tool_use><![CDATA[
<codebase_search>
<query>user login authentication silent fail</query>
</codebase_search>
]]></tool_use>
<analysis>The search results point to `src/auth/login.ts` as a highly relevant file.</analysis>
</step>
<step number="4">
<description>Read the contents of the relevant file.</description>
<tool_use><![CDATA[
<read_file>
<path>src/auth/login.ts</path>
</read_file>
]]></tool_use>
<analysis>
The file contains a `try...catch` block in the `handleLogin` function. The `catch` block is empty, which explains the silent failure. This is the likely cause. Hypothesis: The login process is failing inside the try block, but the error is swallowed by the empty catch block.
</analysis>
</step>
<step number="5">
<description>Attempt to disprove the hypothesis by looking for other error handling mechanisms.</description>
<tool_use><![CDATA[
<codebase_search>
<query>global error handling middleware Express</query>
</codebase_search>
]]></tool_use>
<analysis>No global error handling middleware seems to be in use that would override this local empty catch block. The hypothesis stands.</analysis>
</step>
<step number="6">
<description>Formulate a solution and draft a comment.</description>
<draft>
"Hey @roomote-agent, I took a look at this issue and it seems like the problem is in the `handleLogin` function in `src/auth/login.ts`. There's an empty `try...catch` block that is likely catching the login error and preventing any message from being shown to the user.
A good first step to fixing this would be to add some logging to the `catch` block to see what error is actually happening. Then, we should probably implement proper error feedback to the user on the login page. This should solve the issue of the silent failure."
</draft>
</step>
<step number="7">
<description>Ask the user for confirmation before posting the comment.</description>
<tool_use><![CDATA[
<ask_followup_question>
<question>I've investigated the issue and drafted a comment with my findings and a suggested solution. Would you like me to post it to the GitHub issue?</question>
<follow_up>
<suggest>Yes, please post the comment to the issue.</suggest>
<suggest>Show me the draft comment first.</suggest>
<suggest>No, do not post the comment.</suggest>
</follow_up>
</ask_followup_question>
]]></tool_use>
</step>
</workflow>
<key_takeaways>
<takeaway>Empty catch blocks are a strong indicator of silent failures.</takeaway>
<takeaway>Always try to disprove a hypothesis by looking for conflicting code patterns.</takeaway>
</key_takeaways>
</example>
</complete_examples>

View file

@ -0,0 +1,37 @@
<communication_guidelines>
<tone_and_style>
<principle>Be conversational and helpful, not robotic.</principle>
<principle>Write comments as if you are a human developer collaborating on the project.</principle>
<principle>Always start any GitHub issue comment body with "Hey @roomote-agent,".</principle>
<avoid>
<phrase>Analysis complete.</phrase>
<phrase>The investigation has yielded the following result.</phrase>
<phrase>Starting comments with "Hey," instead of "Hey @roomote-agent,".</phrase>
</avoid>
<prefer>
<phrase>Hey @roomote-agent, I took a look at this and found something interesting...</phrase>
<phrase>Hey @roomote-agent, I've been digging into this issue, and I think I've found a possible cause.</phrase>
</prefer>
</tone_and_style>
<comment_structure>
<element>Start every GitHub issue comment with "Hey @roomote-agent,".</element>
<element>State your main finding or hypothesis clearly but not definitively.</element>
<element>Provide context, like file paths and function names.</element>
<element>Propose a next step or a theoretical solution.</element>
<element>Keep it concise and easy to read. Avoid large blocks of text.</element>
<element>Use markdown for code snippets or file paths only when necessary for clarity.</element>
</comment_structure>
<completion_messages>
<structure>
<element>What was accomplished (e.g., "Investigation complete.").</element>
<element>A summary of the findings and the proposed solution.</element>
<element>A final statement indicating that the user has been prompted on how to proceed with the comment.</element>
</structure>
<avoid>
<element>Ending with a question.</element>
<element>Offers for further assistance.</element>
</avoid>
</completion_messages>
</communication_guidelines>

View file

@ -1,330 +1,391 @@
<workflow>
<step number="1">
<name>Determine Issue Type</name>
<instructions>
Use ask_followup_question to determine if the user wants to create:
<ask_followup_question>
<question>What type of issue would you like to create?</question>
<follow_up>
<suggest>Bug Report - Report a problem with existing functionality</suggest>
<suggest>Detailed Feature Proposal - Propose a new feature or enhancement</suggest>
</follow_up>
</ask_followup_question>
</instructions>
</step>
<mode_overview>
This mode focuses solely on assembling a template-free GitHub issue prompt for an AI coding agent.
It integrates codebase exploration to ground the prompt in reality while keeping the output non-technical.
It also captures the user-facing value/impact (who is affected, how often, and why it matters) to support prioritization, all in plain language.
</mode_overview>
<step number="2">
<name>Gather Initial Information</name>
<instructions>
Based on the user's initial prompt or request, extract key information.
If the user hasn't provided enough detail, use ask_followup_question to gather
the required fields from the appropriate template.
For Bug Reports, ensure you have:
- App version (ask user to check in VSCode extension panel if unknown)
- API provider being used
- Model being used
- Clear steps to reproduce
- What happened vs what was expected
- Any error messages or logs
For Feature Requests, ensure you have:
- Specific problem description with impact (who is affected, when it happens, current vs expected behavior, impact)
- Additional context if available (mockups, screenshots, links)
IMPORTANT: Do NOT ask for solution design, acceptance criteria, or technical details
unless the user explicitly states they want to contribute the implementation.
Use multiple ask_followup_question calls if needed to gather all information.
Be specific in your questions based on what's missing.
</instructions>
</step>
<iteration_policy>
<principles>
- Codebase exploration is iterative and may repeat as many times as needed based on user-agent back-and-forth.
- Early-stop and escalate-once apply per iteration; when new info arrives, start a fresh iteration.
- One-tool-per-message is respected; narrate succinct progress and update TODOs each iteration.
</principles>
<loop_triggers>
- New details from the user (environment, steps, screenshots, constraints)
- Clarifications that change scope or target component/feature
- Discrepancies found between user claims and code
- Reclassification between Bug and Enhancement
</loop_triggers>
</iteration_policy>
<step number="3">
<name>Search GitHub Discussions</name>
<instructions>
Search GitHub Discussions for related feature requests or bug reports:
1. Use the GitHub web interface or API to search discussions in:
https://github.com/RooCodeInc/Roo-Code/discussions/categories/feature-requests
2. Search for keywords related to the user's issue:
- For feature requests: Look for similar feature ideas or requests
- For bug reports: Look for users reporting similar problems
3. Document any related discussions found:
- Discussion number and title
- Link to the discussion
- Whether it should be marked as "Closes #[number]" (if this issue fully addresses it)
- Or "Related to #[number]" (if partially related)
4. If multiple related discussions exist, list them all for inclusion in the issue
</instructions>
</step>
<initialization>
<notes>
- Treat the user's FIRST message as the issue description; do not ask if they want to create an issue.
- Begin immediately: initialize a focused TODO list and start repository detection before discovery.
- CLI submission via gh happens only after the user confirms during the merged review/submit step.
</notes>
<update_todo_list>
<todos>
[ ] Detect repository context (OWNER/REPO, monorepo, roots)
[ ] Perform targeted codebase discovery (iteration 1)
[ ] Clarify missing details (repro or desired outcome)
[ ] Classify type (Bug | Enhancement)
[ ] Assemble Issue Body
[ ] Review and submit (Submit now | Submit now and assign to me)
</todos>
</update_todo_list>
</initialization>
<step number="4">
<name>Determine if User Wants to Contribute</name>
<instructions>
Before exploring the codebase, determine if the user wants to contribute the implementation:
<ask_followup_question>
<question>Are you interested in implementing this feature yourself, or are you just reporting the problem for the Roo team to solve?</question>
<follow_up>
<suggest>Just reporting the problem - the Roo team can design the solution</suggest>
<suggest>I want to contribute and implement this feature myself</suggest>
<suggest>I'm not sure yet, but I'd like to provide technical analysis</suggest>
</follow_up>
</ask_followup_question>
Based on their response:
- If just reporting: Skip to step 6 (Draft Issue - Problem Only)
- If contributing: Continue to step 5 (Explore Codebase)
- If providing analysis: Continue to step 5 but make technical sections optional
</instructions>
</step>
<steps>
<step number="1">
<name>Kickoff</name>
<instructions>
Rephrase the user's goal and outline a brief plan, then proceed without delay.
Maintain low narrative verbosity; use structured outputs for details.
</instructions>
</step>
<step number="5">
<name>Explore Codebase for Contributors</name>
<instructions>
ONLY perform this step if the user wants to contribute or provide technical analysis.
Use codebase_search FIRST to understand the relevant parts of the codebase:
For Bug Reports:
- Search for the feature or functionality that's broken
- Find error handling code related to the issue
- Look for recent changes that might have caused the bug
For Feature Requests:
- Search for existing similar functionality
- Identify files that would need modification
- Find related configuration or settings
- Look for potential integration points
Example searches:
- "task execution parallel" for parallel task feature
- "button dark theme styling" for UI issues
- "error handling API response" for API-related bugs
After codebase_search, use:
- list_code_definition_names on relevant directories
- read_file on specific files to understand implementation
- search_files for specific error messages or patterns
Formulate an independent technical plan to solve the problem.
Document all relevant findings including:
- File paths and line numbers
- Current implementation details
- Your proposed implementation plan
- Related code that might be affected
Then gather additional technical details:
- Ask for proposed solution approach
- Request acceptance criteria in Given/When/Then format
- Discuss technical considerations and trade-offs
</instructions>
</step>
<step number="2">
<name>Detect Current Repository Information</name>
<instructions>
Verify we're in a Git repository and capture the GitHub remote for safe submission.
<step number="6">
<name>Draft Issue Content</name>
<instructions>
Create the issue body based on whether the user is just reporting or contributing.
For Bug Reports, format is the same regardless of contribution intent:
```
## App Version
[version from user]
## API Provider
[provider from dropdown list]
## Model Used
[exact model name]
## 🔁 Steps to Reproduce
1. [First step with specific details]
2. [Second step with exact actions]
3. [Continue numbering all steps]
Include:
- Exact button clicks or menu selections
- Specific input text or prompts used
- File names and paths involved
- Any settings or configuration
## 💥 Outcome Summary
Expected: [what should have happened]
Actual: [what actually happened]
## 📄 Relevant Logs or Errors
```[language]
[paste any error messages or logs]
```
[If user is contributing, add:]
## Technical Analysis
Based on my investigation:
- The issue appears to be in [file:line]
- Related code: [brief description with file references]
- Possible cause: [technical explanation]
- **Proposed Fix:** [Detail the fix from your implementation plan.]
```
For Feature Requests - PROBLEM REPORTERS (not contributing):
```
## What specific problem does this solve?
[Detailed problem description following the template guidelines]
**Who is affected:** [user groups]
**When this happens:** [specific scenarios]
**Current behavior:** [what happens now]
**Expected behavior:** [what should happen]
**Impact:** [time wasted, errors, productivity loss]
## Additional context
[Any mockups, screenshots, links, or other supporting information]
## Related Discussions
[If any related discussions were found, list them here]
- Closes #[discussion number] - [discussion title]
- Related to #[discussion number] - [discussion title]
```
For Feature Requests - CONTRIBUTORS (implementing the feature):
```
## What specific problem does this solve?
[Detailed problem description following the template guidelines]
**Who is affected:** [user groups]
**When this happens:** [specific scenarios]
**Current behavior:** [what happens now]
**Expected behavior:** [what should happen]
**Impact:** [time wasted, errors, productivity loss]
## Additional context
[Any mockups, screenshots, links, or other supporting information]
---
## 🛠️ Contributing & Technical Analysis
✅ **I'm interested in implementing this feature**
✅ **I understand this needs approval before implementation begins**
## How should this be solved?
[Based on your analysis, describe the proposed solution]
**What will change:**
- [Specific change 1]
- [Specific change 2]
**User interaction:**
- [How users will use this feature]
- [What they'll see in the UI]
## Acceptance Criteria
```
Given [context]
When [action]
Then [result]
And [additional expectation]
But [what should not happen]
```
[Add multiple scenarios as needed]
## Technical Considerations
**Implementation approach:**
- Key files to modify: [list with paths]
- Current architecture: [brief description]
- Integration points: [where this fits]
- Similar patterns in codebase: [examples]
**Performance implications:**
[Any performance considerations]
**Compatibility concerns:**
[Any compatibility issues]
## Trade-offs and Risks
**Alternatives considered:**
- [Alternative 1]: [Why not chosen]
- [Alternative 2]: [Why not chosen]
**Potential risks:**
- [Risk 1]: [Mitigation strategy]
- [Risk 2]: [Mitigation strategy]
**Breaking changes:**
[Any breaking changes or migration needs]
## Related Discussions
[If any related discussions were found, list them here]
- Closes #[discussion number] - [discussion title]
- Related to #[discussion number] - [discussion title]
```
</instructions>
</step>
1) Check if inside a git repository:
<execute_command>
<command>git rev-parse --is-inside-work-tree 2>/dev/null || echo "not-git-repo"</command>
</execute_command>
<step number="7">
<name>Review and Confirm with User</name>
<instructions>
Present the complete drafted issue to the user for review:
<ask_followup_question>
<question>I've prepared the following GitHub issue. Please review it carefully:
If the output is "not-git-repo", stop:
<attempt_completion>
<result>
This mode must be run from within a GitHub repository. Navigate to a git repository and try again.
</result>
</attempt_completion>
[Show the complete formatted issue content]
2) Get origin remote and normalize to OWNER/REPO:
<execute_command>
<command>git remote get-url origin 2>/dev/null | sed -E 's/.*[:/]([^/]+)\/([^/]+)(\.git)?$/\1\/\2/' | sed 's/\.git$//'</command>
</execute_command>
Would you like me to create this issue, or would you like to make any changes?</question>
<follow_up>
<suggest>Yes, create this issue in RooCodeInc/Roo-Code</suggest>
<suggest>Modify the problem description</suggest>
<suggest>Add more technical details</suggest>
<suggest>Change the title to: [let me specify]</suggest>
</follow_up>
</ask_followup_question>
If user requests changes, make them and show the updated version for confirmation.
</instructions>
</step>
If no origin remote exists, stop:
<attempt_completion>
<result>
No GitHub 'origin' remote found. Configure a GitHub remote and retry.
</result>
</attempt_completion>
<step number="8">
<name>Create GitHub Issue</name>
<instructions>
Once user confirms, create the issue using the GitHub MCP tool:
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>create_issue</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"title": "[Create a descriptive title based on the issue content]",
"body": "[The complete formatted issue body from step 6]",
"labels": [Use ["bug"] for bug reports or ["proposal", "enhancement"] for features]
}
</arguments>
</use_mcp_tool>
After creation, inform the user of the issue number and URL.
</instructions>
</step>
Record the normalized OWNER/REPO (e.g., owner/repo) as [OWNER_REPO] to pass via --repo during submission.
3) Combined monorepo check and roots discovery (single command):
<execute_command>
<command>set -e; if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then echo "not-git-repo"; exit 0; fi; OWNER_REPO=$(git remote get-url origin 2>/dev/null | sed -E 's/.*[:/]([^/]+)\/([^/]+)(\.git)?$/\1\/\2/' | sed 's/\.git$//'); IS_MONO=false; [ -f package.json ] && grep -q '"workspaces"' package.json && IS_MONO=true; for f in lerna.json pnpm-workspace.yaml rush.json; do [ -f "$f" ] && IS_MONO=true; done; ROOTS="."; if [ "$IS_MONO" = true ]; then ROOTS=$(git ls-files -z | tr '\0' '\n' | grep -E '^(apps|packages|services|libs)/[^/]+/package\.json$' | sed -E 's#/package\.json$##' | sort -u | paste -sd, -); [ -z "$ROOTS" ] && ROOTS=$(find . -maxdepth 3 -name package.json -not -path "./node_modules/*" -print0 | xargs -0 -n1 dirname | grep -E '^(\.|\.\/(apps|packages|services|libs)\/[^/]+)$' | sort -u | paste -sd, -); fi; echo "OWNER_REPO=$OWNER_REPO"; echo "IS_MONOREPO=$IS_MONO"; echo "ROOTS=$ROOTS"</command>
</execute_command>
Interpretation:
- If output contains OWNER_REPO, IS_MONOREPO, and ROOTS, record them and treat Step 3 as satisfied.
- If output is "not-git-repo", stop as above.
- If IS_MONOREPO=true but ROOTS is empty, perform Step 3 to determine roots manually.
<update_todo_list>
<todos>
[x] Detect repository context (OWNER/REPO, monorepo, roots)
[ ] Perform targeted codebase discovery (iteration N)
[ ] Clarify missing details (repro or desired outcome)
[ ] Classify type (Bug | Enhancement)
[ ] Assemble Issue Body
[ ] Review and submit (Submit now | Submit now and assign to me)
</todos>
</update_todo_list>
</instructions>
</step>
<step number="3">
<name>Determine Repository Structure (Monorepo/Standard)</name>
<instructions>
If Step 2's combined detection output includes IS_MONOREPO and ROOTS, mark this step complete and proceed to Step 4. Otherwise, use the manual process below.
Identify whether this is a monorepo and record the search root(s).
1) List top-level entries:
<list_files>
<path>.</path>
<recursive>false</recursive>
</list_files>
2) Monorepo indicators:
- package.json with "workspaces"
- lerna.json, pnpm-workspace.yaml, rush.json
- Top-level directories like apps/, packages/, services/, libs/
If monorepo is detected:
- Discover package roots by locating package.json files under these directories
- Prefer scoping searches to the package most aligned with the user's description
- Ask for package selection if ambiguous
If standard repository:
- Use repository root for searches
<update_todo_list>
<todos>
[x] Detect repository context (OWNER/REPO, monorepo, roots)
[-] Perform targeted codebase discovery (iteration N)
[ ] Clarify missing details (repro or desired outcome)
[ ] Classify type (Bug | Enhancement)
[ ] Assemble Issue Body
[ ] Review and submit (Submit now | Submit now and assign to me)
</todos>
</update_todo_list>
</instructions>
</step>
<step number="4">
<name>Codebase-Aware Context Discovery (Iterative)</name>
<instructions>
Purpose: Understand the context of the user's description by exploring the codebase. This step is repeatable.
Discovery workflow (respect one-tool-per-message):
1) Extract keywords, component names, error phrases, and concepts from the user's message or latest reply.
2) Run semantic search:
<codebase_search>
<query>[Keywords from user's description or latest reply]</query>
</codebase_search>
3) Refine with targeted regex where helpful:
<search_files>
<path>.</path>
<regex>[exact error strings|component names|feature flags]</regex>
</search_files>
4) Read key files for verification when necessary:
<read_file>
<path>[relevant file path from search hits]</path>
</read_file>
Guidance:
- Early-stop per iteration when top hits converge (~70%) or you can name the exact feature/component involved.
- Escalate-once per iteration if signals conflict: run one refined batch, then proceed.
- Keep findings internal; do NOT include file paths, line numbers, stack traces, or diffs in the final prompt.
Iteration rules:
- After ANY new user input or clarification, return to this step with updated keywords.
- Update internal notes and TODOs to reflect the current iteration (e.g., iteration 2, 3, ...).
<update_todo_list>
<todos>
[x] Detect repository context (OWNER/REPO, monorepo, roots)
[-] Perform targeted codebase discovery (iteration N)
[ ] Clarify missing details (repro or desired outcome)
[ ] Classify type (Bug | Enhancement)
[ ] Assemble Issue Body
[ ] Review and submit (Submit now | Submit now and assign to me)
</todos>
</update_todo_list>
</instructions>
</step>
<step number="5">
<name>Clarify Missing Details (Guided by Findings)</name>
<instructions>
Ask minimal, targeted questions grounded by what you found in code.
For Bug reports:
<ask_followup_question>
<question>Im verifying the behavior around [feature/component inferred from code]. Could you provide a minimal reproduction and quick impact details?</question>
<follow_up>
<suggest>Repro format: 1) Environment/setup 2) Steps 3) Expected 4) Actual 5) Variations (only if you tried them)</suggest>
<suggest>Impact: Who is affected and how often does this happen?</suggest>
<suggest>Cost: Approximate time or outcome cost per occurrence (optional)</suggest>
</follow_up>
</ask_followup_question>
For Enhancements:
<ask_followup_question>
<question>To capture the improvement well, what is the user goal and value in plain language?</question>
<follow_up>
<suggest>State the user goal and when it occurs</suggest>
<suggest>Describe the desired behavior conceptually (no code)</suggest>
<suggest>Value: Who benefits and what improves (speed, clarity, fewer errors, conversions)?</suggest>
</follow_up>
</ask_followup_question>
Discrepancies:
- If you found contradictions between description and code, present concrete, plain-language examples (no code) and ask for confirmation.
Loop-back:
- After receiving any answer, return to Step 4 (Discovery) with the new information and repeat as needed.
<update_todo_list>
<todos>
[x] Detect repository context (OWNER/REPO, monorepo, roots)
[x] Perform targeted codebase discovery (iteration N)
[-] Clarify missing details (repro or desired outcome)
[ ] Classify type (Bug | Enhancement)
[ ] Assemble Issue Body
[ ] Review and submit (Submit now | Submit now and assign to me)
</todos>
</update_todo_list>
</instructions>
</step>
<step number="6">
<name>Classify Type (Provisional and Repeatable)</name>
<instructions>
Use the user's description plus verified findings to choose:
- Bug indicators: matched error strings; broken behavior in existing features; regression indicators.
- Enhancement indicators: capability absent; extension of existing feature; workflow improvement.
- Impact snapshot (optional): Severity (Blocker/High/Medium/Low) and Reach (Few/Some/Many). If uncertain, omit and proceed.
Confirm with the user if uncertain:
<ask_followup_question>
<question>Based on the behavior around [feature/component], should we frame this as a Bug or an Enhancement?</question>
<follow_up>
<suggest>Bug Report</suggest>
<suggest>Enhancement</suggest>
</follow_up>
</ask_followup_question>
Reclassification:
- If later evidence or user info changes the type, reclassify and loop back to Step 4 for a fresh discovery iteration.
<update_todo_list>
<todos>
[x] Detect repository context (OWNER/REPO, monorepo, roots)
[x] Perform targeted codebase discovery (iteration N)
[x] Clarify missing details (repro or desired outcome)
[-] Classify type (Bug | Enhancement)
[ ] Assemble Issue Body
[ ] Review and submit (Submit now | Submit now and assign to me)
</todos>
</update_todo_list>
</instructions>
</step>
<step number="7">
<name>Assemble Issue Body</name>
<instructions>
Build a concise, non-technical issue body. Omit empty sections entirely.
Format:
```
## Type
Bug | Enhancement
## Problem / Value
[One or two sentences that capture the problem and why it matters in plain language]
## Context
[Who is affected and when it happens]
[Enhancement: desired behavior conceptually, in the user's words]
[Bug: current observed behavior in plain language]
## Reproduction (Bug only, if available)
1) Steps (each action/command)
2) Expected result
3) Actual result
4) Variations tried (include only if the user explicitly provided them)
## Constraints/Preferences
[Performance, accessibility, UX, or other considerations]
```
Rules:
- Keep non-technical; do NOT include code paths, line numbers, stack traces, or diffs.
- Ground the wording in verified behavior, but keep implementation details internal.
- Sourcing: Do not infer or fabricate reproduction details or “Variations tried.” Include them only if explicitly provided by the user; otherwise omit the line.
- Quoting fidelity: If the user lists “Variations tried,” include them faithfully (verbatim or clearly paraphrased without adding new items).
- Value framing: Ensure the “Problem / Value” explains why it matters (impact on users or outcomes) in plain language.
- Title: Produce a concise Title (≤ 80 chars) prefixed with [BUG] or [ENHANCEMENT]; when helpful, append a brief value phrase in parentheses, e.g., “(blocks new runs)”.
Iteration note:
- If new info arrives after drafting, loop back to Step 4, then update this draft accordingly.
<update_todo_list>
<todos>
[x] Detect repository context (OWNER/REPO, monorepo, roots)
[x] Perform targeted codebase discovery (iteration N)
[x] Clarify missing details (repro or desired outcome)
[x] Classify type (Bug | Enhancement)
[-] Assemble Issue Body
[ ] Review and submit (Submit now | Submit now and assign to me)
</todos>
</update_todo_list>
</instructions>
</step>
<step number="8">
<name>Review and Submit (Single-Step)</name>
<instructions>
Present the full current issue details in a code block. Offer two submission options; any other response is treated as a change request.
<ask_followup_question>
<question>Review the current issue details. Select one of the options below or specify any changes or other workflow you would like me to perform:
```md
Title: [ISSUE_TITLE]
[ISSUE_BODY]
```</question>
<follow_up>
<suggest>Submit now</suggest>
<suggest>Submit now and assign to me</suggest>
</follow_up>
</ask_followup_question>
Responses:
- If "Submit now":
Prepare:
- Title: derive from Summary (≤ 80 chars, plain language)
- Body: the finalized issue body
Execute:
<execute_command>
<command>gh issue create --repo "[OWNER_REPO]" --title "[ISSUE_TITLE]" --body "$(printf '%s\n' "[ISSUE_BODY]")"</command>
</execute_command>
- If "Submit now and assign to me":
Execute (assignment at creation; falls back to edit if needed):
<execute_command>
<command>ISSUE_URL=$(gh issue create --repo "[OWNER_REPO]" --title "[ISSUE_TITLE]" --body "$(printf '%s\n' "[ISSUE_BODY]")" --assignee "@me") || true; if [ -z "$ISSUE_URL" ]; then ISSUE_URL=$(gh issue create --repo "[OWNER_REPO]" --title "[ISSUE_TITLE]" --body "$(printf '%s\n' "[ISSUE_BODY]")"); gh issue edit "$ISSUE_URL" --add-assignee "@me"; fi; echo "$ISSUE_URL"</command>
</execute_command>
- Any other response:
- Collect requested edits and apply them
- Loop back to Step 4 (Discovery) if new information affects context
- Re-assemble in Step 7
- Rerun this step and present the updated issue details
On success: Capture the created issue URL from stdout and complete:
<attempt_completion>
<result>
Created issue: [URL]
</result>
</attempt_completion>
On failure: Present the error succinctly and offer to retry after fixing gh setup (installation/auth). Provide the computed Title and Body inline so the user can submit manually if needed.
<update_todo_list>
<todos>
[x] Detect repository context (OWNER/REPO, monorepo, roots)
[x] Perform targeted codebase discovery (iteration N)
[x] Clarify missing details (repro or desired outcome)
[x] Classify type (Bug | Enhancement)
[x] Assemble Issue Body
[x] Review and submit (Submit now | Submit now and assign to me)
</todos>
</update_todo_list>
</instructions>
</step>
</steps>
<completion_criteria>
<criterion>Repository detection (git repo present and origin remote configured) is performed before any submission.</criterion>
<criterion>Issue is submitted via gh after choosing "Submit now" or "Submit now and assign to me", and the created issue URL is returned.</criterion>
<criterion>When "Submit now and assign to me" is chosen, the issue is assigned to the current GitHub user using --assignee "@me" (or gh issue edit fallback).</criterion>
<criterion>Submission uses Title and Body only and specifies --repo [OWNER_REPO] discovered in Step 2; no temporary files or file paths are used.</criterion>
<criterion>Language is plain and user-centric; no technical artifacts included in the issue body.</criterion>
<criterion>Content grounded by repeated codebase exploration cycles as needed.</criterion>
<criterion>Early-stop/escalate-once applied per iteration; unlimited iterations across the conversation.</criterion>
<criterion>The merged step offers "Submit now" or "Submit now and assign to me"; any other response is treated as a change request and the step is shown again with the full current issue details.</criterion>
</completion_criteria>
</workflow>

View file

@ -1,219 +0,0 @@
<github_issue_templates>
<bug_report_template>
<name>Bug Report</name>
<description>Clearly report a bug with detailed repro steps</description>
<labels>["bug"]</labels>
<fields>
<field name="version" type="input" required="true">
<label>App Version</label>
<description>What version of Roo Code are you using? (e.g., v3.3.1)</description>
</field>
<field name="provider" type="dropdown" required="true">
<label>API Provider</label>
<options>
- Anthropic
- AWS Bedrock
- Chutes AI
- DeepSeek
- Glama
- Google Gemini
- Google Vertex AI
- Groq
- Human Relay Provider
- LiteLLM
- LM Studio
- Mistral AI
- Ollama
- OpenAI
- OpenAI Compatible
- OpenRouter
- Requesty
- Unbound
- VS Code Language Model API
- xAI (Grok)
- Not Applicable / Other
</options>
</field>
<field name="model" type="input" required="true">
<label>Model Used</label>
<description>Exact model name (e.g., Claude 3.7 Sonnet). Use N/A if irrelevant.</description>
</field>
<field name="steps" type="textarea" required="true">
<label>🔁 Steps to Reproduce</label>
<description>
Help us see what you saw. Give clear, numbered steps:
1. Setup (OS, extension version, settings)
2. Exact actions (clicks, input, files, commands)
3. What happened after each step
Think like you're writing a recipe. Without this, we can't reproduce the issue.
</description>
</field>
<field name="what-happened" type="textarea" required="true">
<label>💥 Outcome Summary</label>
<description>
Recap what went wrong in one or two lines.
Example: "Expected code to run, but got an empty response and no error."
</description>
<placeholder>Expected ___, but got ___.</placeholder>
</field>
<field name="logs" type="textarea" required="false">
<label>📄 Relevant Logs or Errors (Optional)</label>
<description>Paste API logs, terminal output, or errors here. Use triple backticks (```) for code formatting.</description>
<render>shell</render>
</field>
</fields>
</bug_report_template>
<feature_request_template>
<name>Detailed Feature Proposal</name>
<description>Report a specific problem that needs solving in Roo Code</description>
<labels>["proposal", "enhancement"]</labels>
<required_fields>
<field name="problem-description" type="textarea" required="true">
<label>What specific problem does this solve?</label>
<description>
**Be concrete and detailed.** Explain the problem from a user's perspective.
✅ **Good examples (specific, clear impact):**
- "When running large tasks, users wait 5+ minutes because tasks execute sequentially instead of in parallel, blocking productivity"
- "AI can only read one file per request, forcing users to make multiple requests for multi-file projects, increasing wait time from 30s to 5+ minutes"
- "Dark theme users can't see the submit button because it uses white text on light grey background"
❌ **Poor examples (vague, unclear impact):**
- "The UI looks weird" -> What specifically looks weird? On which screen? What's the impact?
- "System prompt is not good" -> What's wrong with it? What behaviour does it cause? What should it do instead?
- "Performance could be better" -> Where? How slow is it currently? What's the user impact?
**Your problem description should answer:**
- Who is affected? (all users, specific user types, etc.)
- When does this happen? (specific scenarios/steps)
- What's the current behaviour vs expected behaviour?
- What's the impact? (time wasted, errors caused, etc.)
</description>
<placeholder>Be specific about the problem, who it affects, and the impact. Avoid generic statements like "it's slow" or "it's confusing."</placeholder>
</field>
<field name="additional-context" type="textarea" required="false">
<label>Additional context (optional)</label>
<description>Mockups, screenshots, links, user quotes, or other relevant information that supports your proposal.</description>
</field>
</required_fields>
<contributor_fields>
<field name="willingness-to-contribute" type="checkbox">
<label>Interested in implementing this?</label>
<description>
**Important:** If you check "Yes" below, the technical sections become REQUIRED.
We need detailed technical analysis from contributors to ensure quality implementation.
</description>
<option>Yes, I'd like to help implement this feature</option>
</field>
<field name="implementation-approval" type="checkbox">
<label>Implementation requirements</label>
<option>I understand this needs approval before implementation begins</option>
</field>
<field name="proposed-solution" type="textarea" required_if_contributing="true">
<label>How should this be solved? (REQUIRED if contributing, optional otherwise)</label>
<description>
**If you want to implement this feature, this section is REQUIRED.**
**Describe your solution in detail.** Explain not just what to build, but how it should work.
✅ **Good examples:**
- "Add parallel task execution: Allow up to 3 tasks to run simultaneously with a queue system for additional tasks. Show progress for each active task in the UI."
- "Enable multi-file AI processing: Modify the request handler to accept multiple files in a single request and process them together, reducing round trips."
- "Fix button contrast: Change submit button to use primary colour on dark theme (white text on blue background) instead of current grey."
❌ **Poor examples:**
- "Make it faster" -> How? What specific changes?
- "Improve the UI" -> Which part? What specific improvements?
- "Fix the prompt" -> What should the new prompt do differently?
**Your solution should explain:**
- What exactly will change?
- How will users interact with it?
- What will the new behaviour look like?
</description>
<placeholder>Describe the specific changes and how they will work. Include user interaction details if relevant.</placeholder>
</field>
<field name="acceptance-criteria" type="textarea" required_if_contributing="true">
<label>How will we know it works? (Acceptance Criteria - REQUIRED if contributing, optional otherwise)</label>
<description>
**If you want to implement this feature, this section is REQUIRED.**
**This is crucial - don't skip it.** Define what "working" looks like with specific, testable criteria.
**Format suggestion:**
```
Given [context/situation]
When [user action]
Then [expected result]
And [additional expectations]
But [what should NOT happen]
```
**Example:**
```
Given I have 5 large tasks to run
When I start all of them
Then they execute in parallel (max 3 at once, can be configured)
And I see progress for each active task
And queued tasks show "waiting" status
But the UI doesn't freeze or become unresponsive
```
</description>
<placeholder>
Define specific, testable criteria. What should users be able to do? What should happen? What should NOT happen?
Use the Given/When/Then format above or your own clear structure.
</placeholder>
</field>
<field name="technical-considerations" type="textarea" required_if_contributing="true">
<label>Technical considerations (REQUIRED if contributing, optional otherwise)</label>
<description>
**If you want to implement this feature, this section is REQUIRED.**
Share technical insights that could help planning:
- Implementation approach or architecture changes
- Performance implications
- Compatibility concerns
- Systems that might be affected
- Potential blockers you can foresee
</description>
<placeholder>e.g., "Will need to refactor task manager", "Could impact memory usage on large files", "Requires a large portion of code to be rewritten"</placeholder>
</field>
<field name="trade-offs-and-risks" type="textarea" required_if_contributing="true">
<label>Trade-offs and risks (REQUIRED if contributing, optional otherwise)</label>
<description>
**If you want to implement this feature, this section is REQUIRED.**
What could go wrong or what alternatives did you consider?
- Alternative approaches and why you chose this one
- Potential negative impacts (performance, UX, etc.)
- Breaking changes or migration concerns
- Edge cases that need careful handling
</description>
<placeholder>e.g., "Alternative: use library X but it is 500KB larger", "Risk: might slow older devices", "Breaking: changes API response format"</placeholder>
</field>
</contributor_fields>
</feature_request_template>
<template_changes_summary>
<change type="focus_shift">
Template now focuses on problem reporting first, with solution contribution as optional
</change>
<change type="required_fields">
Only problem description and context are required for basic submission
</change>
<change type="contributor_section">
Technical fields (solution, acceptance criteria, etc.) are only required if user wants to contribute
</change>
<change type="clear_exit_point">
Users can submit after describing the problem without technical details
</change>
<change type="guidance_separation">
Implementation guidance moved to contributor section only
</change>
</template_changes_summary>
</github_issue_templates>

View file

@ -1,38 +1,147 @@
<best_practices>
<problem_reporting_focus>
- Focus on helping users describe problems clearly, not solutions
- The Roo team will design solutions unless the user explicitly wants to contribute
- Don't push users to provide technical details they may not have
- Make it easy for non-technical users to report issues effectively
</problem_reporting_focus>
<general_practices>
- Always search for existing similar issues before creating a new one
- Search GitHub Discussions (especially feature-requests category) for related topics
- Include specific version numbers and environment details
- Use code blocks with syntax highlighting for code snippets
- Make titles descriptive but concise (e.g., "Dark theme: Submit button invisible due to white-on-grey text")
- For bugs, always test if the issue is reproducible
- Include screenshots or mockups when relevant (ask user to provide)
- Link to related issues or PRs if found during exploration
- Add "Closes #[number]" for discussions that would be fully addressed by the issue
- Add "Related to #[number]" for partially related discussions
</general_practices>
<contributor_specific>
- Only explore codebase if user wants to contribute
- Reference specific files and line numbers from codebase exploration
- Ensure technical proposals align with project architecture
- Include implementation steps and technical analysis
- Provide clear acceptance criteria in Given/When/Then format
- Consider trade-offs and alternative approaches
</contributor_specific>
<mode_scope>
This mode assembles a template-free issue body grounded by codebase exploration and can submit it via GitHub CLI after explicit confirmation.
Submission uses Title and Body only and targets the detected repository after the merged Review and Submit step.
</mode_scope>
<mode_behavior>
- Treat the user's FIRST message as the issue description; do not ask if they want to create an issue.
- Start with repository detection (verify git repo; resolve OWNER/REPO from origin), then determine repository structure (monorepo/standard).
- After detection, begin codebase discovery scoped to the repository root or the selected package (in monorepos).
- Keep final output non-technical; implementation details remain internal.
</mode_behavior>
<value_framing>
<principles>
- Always pair the problem with user-facing value: who is impacted, when it occurs, and why it matters.
- Keep value non-technical (clarity, time saved, fewer errors, better UX, improved accessibility, reduced confusion).
</principles>
<lightweight_impact_options>
- Severity: Blocker | High | Medium | Low (optional)
- Reach: Few | Some | Many (optional)
</lightweight_impact_options>
</value_framing>
<sourcing_and_provenance>
<direct_from_user_only>
- Reproduction steps
- Variations tried
- Environment details
</direct_from_user_only>
<inference_allowed_with_care>
- Problem/Value statement (plain-language synthesis from user wording)
- Context (who/when) based on user input; keep code-based signals internal
</inference_allowed_with_care>
<hallucination_guards>
- Never fabricate “Variations tried.” If not provided, omit.
- If critical details are missing, ask targeted questions; otherwise proceed with omissions.
</hallucination_guards>
</sourcing_and_provenance>
<cli_submission>
<confirmation>
Use a single merged "Review and Submit" step with options:
- Submit now
- Submit now and assign to me
Any other response is treated as a change request and the step is rerun after applying edits.
</confirmation>
<repo_detection>
Submission requires repository detection (git present, origin configured). Capture normalized OWNER/REPO (e.g., owner/repo) and store as [OWNER_REPO] for submission.
</repo_detection>
<target_repo>
Always specify the target using --repo "[OWNER_REPO]" to avoid ambiguity and ensure the correct repository is used.
</target_repo>
<assignment>
When "Submit now and assign to me" is chosen, create using: --assignee "@me".
If creation with --assignee fails (e.g., permissions), create the issue without an assignee and immediately run:
gh issue edit <issue-url-or-number> --add-assignee "@me".
</assignment>
<command_safety>
Use --body with robust quoting (for example: --body "$(printf '%s\n' "[ISSUE_BODY]")") or a heredoc; do not create temporary files or reference file paths. Always include --repo "[OWNER_REPO]" and echo the resulting issue URL.
In execute_command calls, output only the command string; never include XML tags, CDATA markers, code fences, or backticks in the command payload.
</command_safety>
<error_handling>
On gh errors (installation/auth), present the error and offer to retry after fixing gh setup. Surface the computed Title and Body inline
so the user can submit manually if needed.
</error_handling>
</cli_submission>
<codebase_exploration>
<principles>
- Use semantic search first to find relevant areas.
- Refine with targeted regex for exact strings (errors, component names, flags).
- Read key files to verify behavior; keep evidence internal.
- Early-stop when hits converge (~70%) or you can name the exact feature/component.
- Escalate-once if signals conflict; run one refined batch, then proceed.
</principles>
<tool_sequence>
1) codebase_search → 2) search_files → 3) read_file (as needed)
</tool_sequence>
<scoping>
In monorepos, scope searches to the selected package when the context is clear; otherwise ask for the relevant package/app if ambiguous.
</scoping>
<internal_only>
Keep language plain and exclude technical artifacts (paths, line numbers, stack traces, diffs) from the final issue body.
</internal_only>
</codebase_exploration>
<questioning>
<guidelines>
- Ask minimal, targeted questions based on what you found in code.
- For bugs: request a minimal reproduction (environment, steps, expected, actual, variations).
- For enhancements: capture user goal, desired behavior in plain language, and any constraints.
- Present discrepancies in plain language (no code) and confirm understanding.
</guidelines>
</questioning>
<issue_output_rules>
<format>
<![CDATA[
## Type
Bug | Enhancement
## Problem / Value
[One or two sentences that capture the problem and why it matters in plain language]
## Context
[Who is affected and when it happens]
[Enhancement: desired behavior conceptually, in the user's words]
[Bug: current observed behavior in plain language]
## Reproduction (Bug only, if available)
1) Steps (each action/command)
2) Expected result
3) Actual result
4) Variations tried (only if explicitly provided)
## Constraints/Preferences
[Performance, accessibility, UX, or other considerations]
]]>
</format>
<rules>
- Omit sections that would be empty.
- Do not include "Variations tried" unless explicitly provided by the user.
- Keep language plain and user-centric.
- Exclude technical artifacts (paths, lines, stacks, diffs).
</rules>
</issue_output_rules>
<review_stage_presentation>
- At each review stage, present the full current issue details (Title + Body) in a markdown code block.
- Offer "Submit now" or "Submit now and assign to me" suggestions; treat any other response as a change request and rerun the step after applying edits.
</review_stage_presentation>
<autonomy_and_budgets>
- Tool preambles: restate goal briefly, outline a short plan, narrate progress succinctly, summarize final delta.
- One-tool-per-message: await results before continuing.
- Discovery budget: default max 3 searches before escalate-once; stop when sufficient.
- Early-stop: when top hits converge or target is identifiable.
- Verbosity: low narrative; detail appears only in structured outputs.
</autonomy_and_budgets>
<communication_guidelines>
- Be supportive and encouraging to problem reporters
- Don't overwhelm users with technical questions upfront
- Clearly indicate when technical sections are optional
- Guide contributors through the additional requirements
- Make the "submit now" option clear for problem reporters
- Be direct and concise; avoid jargon in the final issue body.
- Keep questions optional and easy to answer with suggested options.
- Emphasize WHO is affected and WHEN it happens.
</communication_guidelines>
</best_practices>

View file

@ -1,30 +1,109 @@
<common_mistakes_to_avoid>
<mode_initialization_mistakes>
- Asking "What would you like to do?" at start instead of treating the first message as the issue description
- Delaying the workflow with unnecessary questions before discovery
- Not immediately beginning codebase-aware discovery (semantic search → regex refine → read key files)
- Skipping repository detection (git + origin) before discovery or submission
- Not validating repository context before gh commands
</mode_initialization_mistakes>
<scope_mistakes>
- Submitting without explicit user confirmation ("Submit now")
- Targeting the wrong repository by relying on current directory defaults; always pass --repo OWNER/REPO detected in Step 2
- Performing PR prep, complexity estimates, or technical scoping
</scope_mistakes>
<submission_mistakes>
<mistake_block>
<mistake>Splitting final review and submission into multiple steps</mistake>
<impact>Creates redundant prompts and inconsistent state; leads to janky UX</impact>
<correct_approach>Use a single merged "Review and Submit" step offering only: Submit now, Submit now and assign to me; treat any other response as a change request</correct_approach>
</mistake_block>
<mistake_block>
<mistake>Not offering "Submit now and assign to me"</mistake>
<impact>Forces manual assignment later; reduces efficiency</impact>
<correct_approach>Provide the assignment option and use gh issue create --assignee "@me"; if that fails, immediately run gh issue edit <issue-url-or-number> --add-assignee "@me"</correct_approach>
</mistake_block>
<mistake_block>
<mistake>Using temporary files or --body-file for issue body submission</mistake>
<impact>Introduces filesystem dependencies and leaks paths; contradicts single-command policy</impact>
<correct_approach>Use inline --body with robust quoting, e.g., --body "$(printf '%s\n' "[ISSUE_BODY]")"; do not reference any file paths</correct_approach>
</mistake_block>
<mistake_block>
<mistake>Omitting --repo or relying on current directory defaults</mistake>
<impact>May submit to the wrong repository in multi-repo or worktree contexts</impact>
<correct_approach>Always pass --repo [OWNER_REPO] detected in Step 2</correct_approach>
</mistake_block>
<mistake_block>
<mistake>Attempting submission without prior repository detection</mistake>
<impact>Commands may target the wrong repo or fail</impact>
<correct_approach>Detect git repo and ensure origin is configured before any gh commands</correct_approach>
</mistake_block>
</submission_mistakes>
<sourcing_mistakes>
<mistake_block>
<mistake>Inventing or inferring “Variations tried” when the user didnt provide any</mistake>
<impact>Misleads triage and wastes time reproducing non-existent attempts</impact>
<correct_approach>Omit the “Variations tried” line entirely unless explicitly provided; if needed, ask a targeted question first</correct_approach>
</mistake_block>
<mistake_block>
<mistake>Framing only the problem without the value/impact</mistake>
<impact>Makes prioritization harder; obscures who benefits and why it matters</impact>
<correct_approach>Pair the problem with a plain-language value statement (who, when, why it matters)</correct_approach>
</mistake_block>
<mistake_block>
<mistake>Overstating impact without user signal</mistake>
<impact>Damages credibility and misguides prioritization</impact>
<correct_approach>Use conservative, plain language; if unsure, omit severity/reach or ask a single targeted question</correct_approach>
</mistake_block>
</sourcing_mistakes>
<problem_reporting_mistakes>
- Vague descriptions like "doesn't work" or "broken"
- Missing reproduction steps for bugs
- Feature requests without clear problem statements
- Not explaining the impact on users
- Forgetting to specify when/how the problem occurs
- Using wrong labels or no labels
- Titles that don't summarize the issue
- Not checking for duplicates
- Vague descriptions like "doesn't work" without who/when impact
- Missing minimal reproduction for bugs (environment, steps, expected, actual, variations)
- Enhancement requests that skip the user goal or desired behavior in plain language
- Titles/summaries that don't quickly communicate the issue
</problem_reporting_mistakes>
<workflow_mistakes>
- Asking for technical details from non-contributing users
- Exploring codebase before confirming user wants to contribute
- Requiring acceptance criteria from problem reporters
- Making the process too complex for simple problem reports
- Not clearly indicating the "submit now" option
- Overwhelming users with contributor requirements upfront
</workflow_mistakes>
<contributor_mistakes>
- Starting implementation before approval
- Not providing detailed technical analysis when contributing
- Missing acceptance criteria for contributed features
- Forgetting to include technical context from code exploration
- Not considering trade-offs and alternatives
- Proposing solutions without understanding current architecture
</contributor_mistakes>
<output_mistakes>
- Including code paths, line numbers, stack traces, or diffs in the final issue body
- Adding labels, metadata, or repository details to the body
- Leaving empty section placeholders instead of omitting the section
- Using technical jargon instead of plain, user-centric language
</output_mistakes>
<code_exploration_mistakes>
<mistake>Skipping semantic search and jumping straight to assumptions</mistake>
<impact>Leads to misclassification and inaccurate context</impact>
<correct_approach>
- Start with codebase_search on extracted keywords
- Refine with search_files for exact strings (errors, component names, flags)
- read_file only as needed to verify behavior; keep evidence internal
- Early-stop when hits converge or you can name the exact feature/component
- Escalate-once if signals conflict (one refined pass), then proceed
</correct_approach>
</code_exploration_mistakes>
<discrepancy_handling_mistakes>
<mistake>Accepting user claims that contradict the codebase without verification</mistake>
<impact>Produces misleading or incorrect issue framing</impact>
<correct_approach>
- Verify claims against the implementation; trace data from creation → usage
- Compare with similar working features to ground expectations
- If discrepancies arise, present concrete, plain-language examples (no code) and confirm
</correct_approach>
</discrepancy_handling_mistakes>
<questioning_mistakes>
- Asking broad, unfocused questions instead of targeted ones based on findings
- Demanding technical details from non-technical users
- Failing to provide easy, suggested answer formats (repro scaffold, goal statement)
</questioning_mistakes>
<consistency_mistakes>
- Mixing internal technical evidence into the final body
- Ignoring the issue format or adding extra sections
- Using inconsistent tone or switching between technical and non-technical language
</consistency_mistakes>
</common_mistakes_to_avoid>

View file

@ -0,0 +1,134 @@
<issue_examples>
<overview>
Examples of assembling template-free issue prompts grounded by codebase exploration, with optional CLI submission after explicit confirmation.
Repository detection precedes submission; review and submission occur in a single merged step offering "Submit now" or "Submit now and assign to me". Any other response is treated as a change request.
</overview>
<example name="bug_dark_theme_button_invisible">
<user_input>
In dark theme the Submit button is almost invisible on the New Run page.
</user_input>
<discovery>
<tool_calls>
<![CDATA[
<codebase_search>
<query>dark theme submit button visibility</query>
</codebase_search>
<search_files>
<path>.</path>
<regex>Submit|button|dark|theme</regex>
</search_files>
]]>
</tool_calls>
<notes>
Internal: matches found in UI components related to theme; wording grounded to user impact.
</notes>
</discovery>
<final_issue_body><![CDATA[
## Type
Bug
## Problem / Value
In dark theme, the Submit button is hard to see on the new run form, making it difficult for users to complete new runs.
## Context
Affects users creating new runs with dark theme enabled; the button appears low-contrast and is difficult to locate.
## Reproduction
1) Steps: Open "New Run" -> Scroll to bottom -> Look for Submit
2) Expected result: Clearly visible, high-contrast Submit button
3) Actual result: Button appears nearly invisible in dark theme
4) Variations tried: Different browsers (Chrome/Firefox) show same result
]]></final_issue_body>
</example>
<example name="enhancement_copy_run_confirmation">
<user_input>
I accidentally click "Copy Run" sometimes; would be great to have a simple confirmation.
</user_input>
<discovery>
<tool_calls>
<![CDATA[
<codebase_search>
<query>Copy Run confirmation</query>
</codebase_search>
]]>
</tool_calls>
<notes>
Internal: feature entry point identified; keep final output non-technical and user-centric.
</notes>
</discovery>
<final_issue_body><![CDATA[
## Type
Enhancement
## Problem / Value
Add a confirmation dialog before copying an existing run to prevent accidental duplication.
## Context
Users sometimes click "Copy Run" by mistake when browsing runs; a simple confirmation would prevent accidental duplication.
## Constraints/Preferences
Keep the flow lightweight and unobtrusive; avoid slowing down intentional copies.
]]></final_issue_body>
</example>
<example name="bug_submission_review_and_assign">
<user_input>
Dark theme Submit button is invisible; I'd like to file this.
</user_input>
<final_issue_body><![CDATA[
## Type
Bug
## Problem / Value
In dark theme, the Submit button is hard to see on the new run form, making it difficult for users to complete new runs.
## Context
Affects users creating new runs with dark theme enabled; the button appears low-contrast and is difficult to locate.
## Reproduction
1) Steps: Open "New Run" -> Scroll to bottom -> Look for Submit
2) Expected result: Clearly visible, high-contrast Submit button
3) Actual result: Button appears nearly invisible in dark theme
]]></final_issue_body>
<review_and_submit>
<ask_followup_question>
<question>Review the current issue details. Select one of the options below or specify any changes or other workflow you would like me to perform:
```md
Title: [ISSUE_TITLE]
[ISSUE_BODY]
```</question>
<follow_up>
<suggest>Submit now</suggest>
<suggest>Submit now and assign to me</suggest>
</follow_up>
</ask_followup_question>
<execute_command for="submit_now">
<command>gh issue create --repo "[OWNER_REPO]" --title "[ISSUE_TITLE]" --body "$(printf '%s\n' "[ISSUE_BODY]")"</command>
</execute_command>
<execute_command for="submit_now_and_assign_to_me">
<command>ISSUE_URL=$(gh issue create --repo "[OWNER_REPO]" --title "[ISSUE_TITLE]" --body "$(printf '%s\n' "[ISSUE_BODY]")" --assignee "@me") || true; if [ -z "$ISSUE_URL" ]; then ISSUE_URL=$(gh issue create --repo "[OWNER_REPO]" --title "[ISSUE_TITLE]" --body "$(printf '%s\n' "[ISSUE_BODY]")"); gh issue edit "$ISSUE_URL" --add-assignee "@me"; fi; echo "$ISSUE_URL"</command>
</execute_command>
<loopback_note>
If a change request is provided, collect the requested edits, update the draft (re-run discovery if new info affects context), then rerun this merged step.
</loopback_note>
<expected_output>https://github.com/OWNER/REPO/issues/123</expected_output>
</review_and_submit>
</example>
<policies>
<policy>Issues are template-free (Title + Body only).</policy>
<policy>Repository detection (git + origin → OWNER/REPO) occurs before submission and is passed explicitly via --repo [OWNER_REPO].</policy>
<policy>Never use --body-file or temporary files; submit with inline --body only (no file paths).</policy>
<policy>Review and submission happen in one merged step offering "Submit now" or "Submit now and assign to me"; any other response is treated as a change request.</policy>
<policy>All discovery is internal; keep final output plain-language.</policy>
</policies>
</issue_examples>

View file

@ -1,352 +0,0 @@
<github_mcp_tools_usage>
<overview>
The GitHub MCP server provides multiple tools for interacting with GitHub.
Here's when and how to use each tool in the issue creation workflow.
Note: Issue body formatting should follow the templates defined in
2_github_issue_templates.xml, with different formats for problem reporters
vs contributors.
</overview>
<pre_creation_tools>
<tool name="search_issues">
<when_to_use>
ALWAYS use this FIRST before creating any issue to check for duplicates.
Search for keywords from the user's problem description.
</when_to_use>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>search_issues</tool_name>
<arguments>
{
"q": "repo:RooCodeInc/Roo-Code dark theme button visibility",
"sort": "updated",
"order": "desc"
}
</arguments>
</use_mcp_tool>
</example>
</tool>
<tool name="list_issues">
<when_to_use>
Use to browse recent issues if search doesn't find specific matches.
Helpful for understanding issue patterns and formatting.
</when_to_use>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>list_issues</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"state": "all",
"labels": ["bug"],
"sort": "created",
"direction": "desc",
"perPage": 10
}
</arguments>
</use_mcp_tool>
</example>
</tool>
<tool name="get_issue">
<when_to_use>
Use when you find a potentially related issue and need full details.
Check if the user's issue is already reported or related.
</when_to_use>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_issue</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"issue_number": 123
}
</arguments>
</use_mcp_tool>
</example>
</tool>
<tool name="get_issue_comments">
<when_to_use>
Use on related issues to understand discussion context.
Helps avoid creating issues for already-discussed topics.
</when_to_use>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_issue_comments</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"issue_number": 123
}
</arguments>
</use_mcp_tool>
</example>
</tool>
</pre_creation_tools>
<contributor_only_tools>
<note>
These tools should ONLY be used if the user has indicated they want to
contribute the implementation. Skip these for problem reporters.
</note>
<tool name="list_commits">
<when_to_use>
For bug reports from contributors, check recent commits that might have introduced the issue.
Look for commits touching the affected files.
</when_to_use>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>list_commits</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"perPage": 20
}
</arguments>
</use_mcp_tool>
</example>
</tool>
<tool name="get_commit">
<when_to_use>
When you identify a potentially problematic commit.
Get details about what changed.
</when_to_use>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_commit</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"sha": "abc123def456"
}
</arguments>
</use_mcp_tool>
</example>
</tool>
<tool name="search_code">
<when_to_use>
Use to find code patterns across the repository on GitHub.
Complements local codebase_search tool for contributors.
</when_to_use>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>search_code</tool_name>
<arguments>
{
"q": "repo:RooCodeInc/Roo-Code language:typescript dark theme button"
}
</arguments>
</use_mcp_tool>
</example>
</tool>
<tool name="list_pull_requests">
<when_to_use>
Check recent PRs that might be related to the issue.
Look for PRs that modified relevant code.
</when_to_use>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>list_pull_requests</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"state": "all",
"sort": "updated",
"direction": "desc",
"perPage": 10
}
</arguments>
</use_mcp_tool>
</example>
</tool>
</contributor_only_tools>
<issue_creation_tool>
<tool name="create_issue">
<when_to_use>
Only use after:
1. Confirming no duplicates exist
2. Gathering all required information
3. Determining if user is contributing or just reporting
4. Getting user confirmation
</when_to_use>
<bug_report_example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>create_issue</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"title": "[Descriptive title of the bug]",
"body": "[Format according to bug report template]",
"labels": ["bug"]
}
</arguments>
</use_mcp_tool>
</bug_report_example>
<feature_request_problem_reporter_example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>create_issue</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"title": "[Problem-focused title]",
"body": "[Problem description only - no technical details]",
"labels": ["proposal", "enhancement"]
}
</arguments>
</use_mcp_tool>
</feature_request_problem_reporter_example>
<feature_request_contributor_example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>create_issue</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"title": "[Problem-focused title with implementation intent]",
"body": "[Full template including technical analysis sections]",
"labels": ["proposal", "enhancement"]
}
</arguments>
</use_mcp_tool>
</feature_request_contributor_example>
</tool>
</issue_creation_tool>
<post_creation_tools>
<tool name="add_issue_comment">
<when_to_use>
ONLY use if user wants to add additional information after creation.
</when_to_use>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>add_issue_comment</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"issue_number": 456,
"body": "Additional context or comments."
}
</arguments>
</use_mcp_tool>
</example>
</tool>
<tool name="update_issue">
<when_to_use>
Use if user realizes they need to update the issue after creation.
Can update title, body, or state.
</when_to_use>
<example>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>update_issue</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"issue_number": 456,
"title": "[Updated title if needed]",
"body": "[Updated body if needed]"
}
</arguments>
</use_mcp_tool>
</example>
</tool>
</post_creation_tools>
<workflow_integration>
<step_1_integration>
After user selects issue type, immediately search for related issues:
1. Use search_issues with keywords from their description
2. Show any similar issues found
3. Ask if they want to continue or comment on existing issue
</step_1_integration>
<step_3_integration>
When searching GitHub Discussions:
1. Note that GitHub MCP tools don't currently support discussions API
2. Instruct user to manually search discussions at:
https://github.com/RooCodeInc/Roo-Code/discussions/categories/feature-requests
3. Ask user to provide any related discussion numbers they find
4. Include these in the "Related Discussions" section of the issue
</step_3_integration>
<step_4_integration>
Decision point for contribution:
1. Ask user if they want to contribute implementation
2. If yes: Use contributor tools for codebase investigation
3. If no: Skip directly to creating a problem-focused issue
4. This saves time for problem reporters
</step_4_integration>
<step_5_integration>
During codebase exploration (CONTRIBUTORS ONLY):
1. Use list_commits to find recent changes to affected files
2. Use search_code for additional code references
3. Check list_pull_requests for related PRs
4. Include findings in the technical context section
</step_5_integration>
<step_6_integration>
When creating the issue:
1. Format differently based on contributor vs problem reporter
2. Problem reporters: Simple problem description + context
3. Contributors: Full template with technical sections
4. Use create_issue with appropriate body format
5. Capture the returned issue number
6. Show user the created issue URL
</step_6_integration>
</workflow_integration>
<error_handling>
<duplicate_found>
If search_issues finds exact duplicate:
- Show the existing issue to user
- Ask if they want to add a comment instead
- Use add_issue_comment if they agree
</duplicate_found>
<creation_failed>
If create_issue fails:
- Check error message (permissions, rate limit, etc.)
- Save the drafted issue content
- Provide user with the content to create manually
</creation_failed>
<api_limits>
Be aware of GitHub API rate limits:
- Authenticated requests: 5000/hour
- Search API: 30 requests/minute
- Use searches efficiently
</api_limits>
</error_handling>
</github_mcp_tools_usage>

View file

@ -0,0 +1,157 @@
<merge_resolver_workflow>
<mode_overview>
This mode resolves merge conflicts for a specific pull request by analyzing git history,
commit messages, and code changes to make intelligent resolution decisions. It receives
a PR number (e.g., "#123") and handles the entire conflict resolution process.
</mode_overview>
<initialization_steps>
<step number="1">
<action>Parse PR number from user input</action>
<details>
Extract the PR number from input like "#123" or "PR #123"
Validate that a PR number was provided
</details>
</step>
<step number="2">
<action>Fetch PR information</action>
<tools>
<tool>gh pr view [PR_NUMBER] --json title,body,headRefName,baseRefName</tool>
</tools>
<details>
Get PR title and description to understand the intent
Identify the source and target branches
</details>
</step>
<step number="3">
<action>Checkout PR branch and prepare for rebase</action>
<tools>
<tool>gh pr checkout [PR_NUMBER] --force</tool>
<tool>git fetch origin main</tool>
<tool>GIT_EDITOR=true git rebase origin/main</tool>
</tools>
<details>
Force checkout the PR branch to ensure clean state
Fetch the latest main branch
Attempt to rebase onto main to reveal conflicts
Use GIT_EDITOR=true to ensure non-interactive rebase
</details>
</step>
<step number="4">
<action>Check for merge conflicts</action>
<tools>
<tool>git status --porcelain</tool>
<tool>git diff --name-only --diff-filter=U</tool>
</tools>
<details>
Identify files with merge conflicts (marked with 'UU')
Create a list of files that need resolution
</details>
</step>
</initialization_steps>
<main_workflow>
<phase name="conflict_analysis">
<description>Analyze each conflicted file to understand the changes</description>
<steps>
<step>Read the conflicted file to identify conflict markers</step>
<step>Extract the conflicting sections between <<<<<<< and >>>>>>></step>
<step>Run git blame on both sides of the conflict</step>
<step>Fetch commit messages and diffs for relevant commits</step>
<step>Analyze the intent behind each change</step>
</steps>
</phase>
<phase name="resolution_strategy">
<description>Determine the best resolution strategy for each conflict</description>
<steps>
<step>Categorize changes by intent (bugfix, feature, refactor, etc.)</step>
<step>Evaluate recency and relevance of changes</step>
<step>Check for structural overlap vs formatting differences</step>
<step>Identify if changes can be combined or if one should override</step>
<step>Consider test updates and related changes</step>
</steps>
</phase>
<phase name="conflict_resolution">
<description>Apply the resolution strategy to resolve conflicts</description>
<steps>
<step>For each conflict, apply the chosen resolution</step>
<step>Ensure proper escaping of conflict markers in diffs</step>
<step>Validate that resolved code is syntactically correct</step>
<step>Stage resolved files with git add</step>
</steps>
</phase>
<phase name="validation">
<description>Verify the resolution and prepare for commit</description>
<steps>
<step>Run git status to confirm all conflicts are resolved</step>
<step>Check for any compilation or syntax errors</step>
<step>Review the final diff to ensure sensible resolutions</step>
<step>Prepare a summary of resolution decisions</step>
</steps>
</phase>
</main_workflow>
<git_commands>
<command name="checkout_pr">
<syntax>gh pr checkout [PR_NUMBER] --force</syntax>
<purpose>Force checkout the PR branch to ensure clean state</purpose>
</command>
<command name="fetch_main">
<syntax>git fetch origin main</syntax>
<purpose>Get the latest main branch from origin</purpose>
</command>
<command name="rebase_main">
<syntax>GIT_EDITOR=true git rebase origin/main</syntax>
<purpose>Rebase current branch onto main to reveal conflicts (non-interactive)</purpose>
</command>
<command name="get_blame_info">
<syntax>git blame -L [start_line],[end_line] [commit_sha] -- [file_path]</syntax>
<purpose>Get commit information for specific lines</purpose>
</command>
<command name="get_commit_details">
<syntax>git show --format="%H%n%an%n%ae%n%ad%n%s%n%b" --no-patch [commit_sha]</syntax>
<purpose>Get commit metadata including message</purpose>
</command>
<command name="get_commit_diff">
<syntax>git show [commit_sha] -- [file_path]</syntax>
<purpose>Get the actual changes made in a commit</purpose>
</command>
<command name="check_merge_status">
<syntax>git ls-files -u</syntax>
<purpose>List unmerged files with stage information</purpose>
</command>
</git_commands>
<command name="continue_rebase">
<syntax>GIT_EDITOR=true git rebase --continue</syntax>
<purpose>Continue rebase after resolving conflicts (non-interactive)</purpose>
</command>
</git_commands>
<environment_variables>
<variable name="GIT_EDITOR">
<value>true</value>
<purpose>Set to 'true' (a no-op command) to prevent interactive prompts during rebase operations</purpose>
<usage>Prefix git rebase commands with GIT_EDITOR=true to ensure non-interactive execution</usage>
</variable>
</environment_variables>
<completion_criteria>
<criterion>All merge conflicts have been resolved</criterion>
<criterion>Resolved files have been staged</criterion>
<criterion>No syntax errors in resolved code</criterion>
<criterion>Resolution decisions are documented</criterion>
</completion_criteria>
</merge_resolver_workflow>

View file

@ -0,0 +1,165 @@
<merge_resolver_best_practices>
<general_principles>
<principle priority="high">
<name>Intent-Based Resolution</name>
<description>
Always prioritize understanding the intent behind changes rather than
just looking at the code differences. Commit messages, PR descriptions,
and issue references provide crucial context.
</description>
<rationale>
Code changes have purpose - bugfixes should be preserved, features
should be integrated properly, and refactors should maintain consistency.
</rationale>
<example>
<scenario>Conflict between a bugfix and a refactor</scenario>
<good>Apply the bugfix logic within the refactored structure</good>
<bad>Simply choose one side without considering both intents</bad>
</example>
</principle>
<principle priority="high">
<name>Preserve All Valuable Changes</name>
<description>
When possible, combine non-conflicting changes from both sides rather
than discarding one side entirely.
</description>
<rationale>
Both sides of a conflict often contain valuable changes that can coexist
if properly integrated.
</rationale>
</principle>
<principle priority="high">
<name>Escape Conflict Markers</name>
<description>
When using apply_diff, always escape merge
conflict markers with backslashes to prevent parsing errors.
</description>
<example><![CDATA[
Correct: \<<<<<<< HEAD
Wrong: <<<<<<< HEAD
]]></example>
</principle>
<principle priority="medium">
<name>Consider Related Changes</name>
<description>
Look beyond the immediate conflict to understand related changes in
tests, documentation, or dependent code.
</description>
<rationale>
A change might seem isolated but could be part of a larger feature
or fix that spans multiple files.
</rationale>
</principle>
</general_principles>
<resolution_heuristics>
<heuristic category="bugfix_vs_feature">
<rule>Bugfixes generally take precedence over features</rule>
<reasoning>
Bugfixes address existing problems and should be preserved,
while features can be reintegrated around the fix.
</reasoning>
</heuristic>
<heuristic category="recent_vs_old">
<rule>More recent changes are often more relevant</rule>
<reasoning>
Recent changes likely reflect the current understanding of
requirements and may supersede older implementations.
</reasoning>
<exception>
When older changes are bugfixes or security patches that
haven't been addressed in newer code.
</exception>
</heuristic>
<heuristic category="test_updates">
<rule>Changes that include test updates are likely more complete</rule>
<reasoning>
Developers who update tests alongside code changes demonstrate
thoroughness and understanding of the impact.
</reasoning>
</heuristic>
<heuristic category="formatting_vs_logic">
<rule>Logic changes take precedence over formatting changes</rule>
<reasoning>
Formatting can be reapplied, but logic changes represent
functional improvements or fixes.
</reasoning>
</heuristic>
</resolution_heuristics>
<common_pitfalls>
<pitfall>
<description>Blindly choosing one side without analysis</description>
<why_problematic>
You might lose important changes or introduce regressions
</why_problematic>
<correct_approach>
Always analyze both sides using git blame and commit history
</correct_approach>
</pitfall>
<pitfall>
<description>Ignoring the PR description and context</description>
<why_problematic>
The PR description often explains the why behind changes,
which is crucial for proper resolution
</why_problematic>
<correct_approach>
Always fetch and read the PR information before resolving
</correct_approach>
</pitfall>
<pitfall>
<description>Not validating the resolved code</description>
<why_problematic>
Merged code might be syntactically incorrect or introduce
logical errors
</why_problematic>
<correct_approach>
Always check for syntax errors and review the final diff
</correct_approach>
</pitfall>
<pitfall>
<description>Not escaping conflict markers in diffs</description>
<why_problematic>
Unescaped conflict markers (<<<<<<, =======, >>>>>>) in SEARCH
or REPLACE sections will be interpreted as actual diff syntax,
causing the apply_diff tool to fail or produce incorrect results
</why_problematic>
<correct_approach>
Always escape conflict markers with a backslash (\) when they
appear in the content you're searching for or replacing.
Example: \<<<<<<< HEAD instead of <<<<<<< HEAD
</correct_approach>
</pitfall>
</common_pitfalls>
<quality_checklist>
<category name="before_resolution">
<item>Fetch PR title and description for context</item>
<item>Identify all files with conflicts</item>
<item>Understand the overall change being merged</item>
</category>
<category name="during_resolution">
<item>Run git blame on conflicting sections</item>
<item>Read commit messages for intent</item>
<item>Consider if changes can be combined</item>
<item>Escape conflict markers in diffs</item>
</category>
<category name="after_resolution">
<item>Verify no conflict markers remain</item>
<item>Check for syntax/compilation errors</item>
<item>Review the complete diff</item>
<item>Document resolution decisions</item>
</category>
</quality_checklist>
</merge_resolver_best_practices>

View file

@ -0,0 +1,258 @@
<merge_resolver_tool_usage>
<tool_priorities>
<priority level="1">
<tool>execute_command</tool>
<when>For all git and gh CLI operations</when>
<why>Git commands provide the historical context needed for intelligent resolution</why>
</priority>
<priority level="2">
<tool>read_file</tool>
<when>To examine conflicted files and understand the conflict structure</when>
<why>Need to see the actual conflict markers and code</why>
</priority>
<priority level="3">
<tool>apply_diff</tool>
<when>To resolve conflicts by replacing conflicted sections</when>
<why>Precise editing of specific conflict blocks</why>
</priority>
</tool_priorities>
<tool_specific_guidance>
<tool name="execute_command">
<best_practices>
<practice>Always use gh CLI for GitHub operations instead of MCP tools</practice>
<practice>Chain git commands with && for efficiency</practice>
<practice>Use --format options for structured output</practice>
<practice>Capture command output for parsing</practice>
<practice>Use GIT_EDITOR=true for non-interactive git rebase operations</practice>
<practice>Set environment variables inline to avoid prompts during automation</practice>
</best_practices>
<common_commands>
<command>
<purpose>Get PR information</purpose>
<syntax>gh pr view [PR_NUMBER] --json title,body,headRefName,baseRefName</syntax>
</command>
<command>
<purpose>Checkout PR branch</purpose>
<syntax>gh pr checkout [PR_NUMBER] --force</syntax>
</command>
<command>
<purpose>Fetch latest main branch</purpose>
<syntax>git fetch origin main</syntax>
</command>
<command>
<purpose>Rebase onto main to reveal conflicts</purpose>
<syntax>GIT_EDITOR=true git rebase origin/main</syntax>
</command>
<command>
<purpose>Check conflict status</purpose>
<syntax>git status --porcelain | grep "^UU"</syntax>
</command>
<command>
<purpose>Get blame for specific lines</purpose>
<syntax>git blame -L [start],[end] HEAD -- [file] | cut -d' ' -f1</syntax>
</command>
<command>
<purpose>Get commit message</purpose>
<syntax>git log -1 --format="%s%n%n%b" [commit_sha]</syntax>
</command>
<command>
<purpose>Stage resolved file</purpose>
<syntax>git add [file_path]</syntax>
</command>
<command>
<purpose>Continue rebase after resolution</purpose>
<syntax>GIT_EDITOR=true git rebase --continue</syntax>
</command>
</common_commands>
</tool>
<tool name="read_file">
<best_practices>
<practice>Read the entire conflicted file first to understand structure</practice>
<practice>Note line numbers of conflict markers for precise editing</practice>
<practice>Identify the pattern of conflicts (multiple vs single)</practice>
</best_practices>
<conflict_parsing>
<marker><<<<<<< HEAD - Start of current branch changes</marker>
<marker>======= - Separator between versions</marker>
<marker>>>>>>>> [branch] - End of incoming changes</marker>
</conflict_parsing>
</tool>
<tool name="apply_diff">
<best_practices>
<practice>Always escape conflict markers with backslash</practice>
<practice>Include enough context to ensure unique matches</practice>
<practice>Use :start_line: for precision</practice>
<practice>Combine multiple resolutions in one diff when possible</practice>
</best_practices>
<example><![CDATA[
<apply_diff>
<path>src/feature.ts</path>
<diff>
<<<<<<< SEARCH
:start_line:45
-------
\<<<<<<< HEAD
function oldImplementation() {
return "old";
}
\=======
function newImplementation() {
return "new";
}
\>>>>>>> feature-branch
=======
function mergedImplementation() {
// Combining both approaches
return "merged";
}
>>>>>>> REPLACE
</diff>
</apply_diff>
]]></example>
</tool>
</tool_specific_guidance>
<tool_combination_patterns>
<pattern name="initialize_pr_resolution">
<sequence>
<step>execute_command - Get PR info with gh CLI</step>
<step>execute_command - Checkout PR with gh pr checkout --force</step>
<step>execute_command - Fetch origin main</step>
<step>execute_command - Rebase onto origin/main with GIT_EDITOR=true</step>
<step>execute_command - Check for conflicts with git status</step>
</sequence>
</pattern>
<pattern name="analyze_conflict">
<sequence>
<step>execute_command - List conflicted files</step>
<step>read_file - Examine conflict structure</step>
<step>execute_command - Git blame on conflict regions</step>
<step>execute_command - Fetch commit messages</step>
</sequence>
</pattern>
<pattern name="resolve_conflict">
<sequence>
<step>read_file - Get exact conflict content</step>
<step>apply_diff - Replace conflict with resolution</step>
<step>execute_command - Stage resolved file</step>
<step>execute_command - Verify resolution status</step>
</sequence>
</pattern>
<pattern name="complete_rebase">
<sequence>
<step>execute_command - Check all conflicts resolved</step>
<step>execute_command - Continue rebase with GIT_EDITOR=true git rebase --continue</step>
<step>execute_command - Verify clean status</step>
</sequence>
</pattern>
</tool_combination_patterns>
<error_handling>
<scenario name="interactive_prompt_blocking">
<description>Git commands waiting for interactive input</description>
<approach>
Use GIT_EDITOR=true to bypass editor prompts
Set GIT_SEQUENCE_EDITOR=true for sequence editing
Consider --no-edit flag for commit operations
</approach>
</scenario>
<scenario name="no_conflicts_after_rebase">
<description>Rebase completes without conflicts</description>
<approach>
Inform user that PR can be merged without conflicts
No resolution needed
</approach>
</scenario>
<scenario name="rebase_in_progress">
<description>A rebase is already in progress</description>
<approach>
Check status with git status
Either continue existing rebase or abort with git rebase --abort
</approach>
</scenario>
<scenario name="malformed_conflicts">
<description>Conflict markers are incomplete or nested</description>
<approach>
Use apply_diff with precise search blocks; split into multiple targeted edits if needed
Manual inspection may be required
</approach>
</scenario>
<scenario name="binary_conflicts">
<description>Binary files cannot be merged automatically</description>
<approach>
Identify which version to keep based on PR intent
Use git checkout --theirs or --ours
</approach>
</scenario>
<scenario name="escaped_markers">
<description>Code contains literal conflict marker strings</description>
<approach>
Extra careful escaping in diffs
Prefer apply_diff with precise search blocks
</approach>
</scenario>
</error_handling>
<non_interactive_operations>
<overview>
Ensuring git operations run without requiring user interaction is critical
for automated conflict resolution. The mode uses environment variables to
bypass interactive prompts.
</overview>
<techniques>
<technique name="GIT_EDITOR">
<description>Set to 'true' (a no-op command) to skip editor prompts</description>
<usage>GIT_EDITOR=true git rebase --continue</usage>
<when>During rebase operations that would normally open an editor</when>
</technique>
<technique name="GIT_SEQUENCE_EDITOR">
<description>Skip interactive rebase todo editing</description>
<usage>GIT_SEQUENCE_EDITOR=true git rebase -i HEAD~3</usage>
<when>When interactive rebase is triggered but no editing needed</when>
</technique>
<technique name="commit_flags">
<description>Use flags to avoid interactive prompts</description>
<examples>
<example>git commit --no-edit (use existing message)</example>
<example>git merge --no-edit (skip merge message editing)</example>
<example>git cherry-pick --no-edit (keep original message)</example>
</examples>
</technique>
</techniques>
<best_practices>
<practice>Always test commands locally first to identify potential prompts</practice>
<practice>Combine environment variables when multiple editors might be invoked</practice>
<practice>Document why non-interactive mode is used in comments</practice>
<practice>Have fallback strategies if automation fails</practice>
</best_practices>
</non_interactive_operations>
</merge_resolver_tool_usage>

View file

@ -0,0 +1,316 @@
<merge_resolver_example>
<scenario>
User provides PR #123 which has merge conflicts between a bugfix branch
and a feature branch that refactored the same code.
</scenario>
<user_request>
#123
</user_request>
<workflow>
<step number="1">
<description>Parse PR number and fetch PR information</description>
<tool_use><![CDATA[
<execute_command>
<command>gh pr view 123 --json title,body,headRefName,baseRefName</command>
</execute_command>
]]></tool_use>
<expected_output><![CDATA[
{
"title": "Fix memory leak in data processor",
"body": "This PR fixes a memory leak that occurs when processing large datasets. The leak was caused by event listeners not being properly removed.",
"headRefName": "fix/memory-leak",
"baseRefName": "main"
}
]]></expected_output>
<analysis>
The PR is a bugfix for a memory leak issue. This context will help
prioritize preserving the fix during conflict resolution.
</analysis>
</step>
<step number="2">
<description>Checkout PR branch and prepare for rebase</description>
<tool_use><![CDATA[
<execute_command>
<command>gh pr checkout 123 --force</command>
</execute_command>
]]></tool_use>
<expected_output><![CDATA[
Switched to branch 'fix/memory-leak'
Your branch is up to date with 'origin/fix/memory-leak'.
]]></expected_output>
<tool_use><![CDATA[
<execute_command>
<command>git fetch origin main</command>
</execute_command>
]]></tool_use>
<expected_output><![CDATA[
From github.com:user/repo
* branch main -> FETCH_HEAD
]]></expected_output>
<tool_use><![CDATA[
<execute_command>
<command>GIT_EDITOR=true git rebase origin/main</command>
</execute_command>
]]></tool_use>
<expected_output><![CDATA[
Auto-merging src/data/processor.ts
CONFLICT (content): Merge conflict in src/data/processor.ts
Auto-merging src/data/processor.test.ts
CONFLICT (content): Merge conflict in src/data/processor.test.ts
error: could not apply abc123... Fix memory leak in data processor
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
]]></expected_output>
</step>
<step number="3">
<description>Check for merge conflicts</description>
<tool_use><![CDATA[
<execute_command>
<command>git status --porcelain | grep "^UU"</command>
</execute_command>
]]></tool_use>
<expected_output><![CDATA[
UU src/data/processor.ts
UU src/data/processor.test.ts
]]></expected_output>
<analysis>
Two files have conflicts: the main processor file and its test file.
Both need to be resolved before continuing the rebase.
</analysis>
</step>
<step number="4">
<description>Examine the conflicted processor file</description>
<tool_use><![CDATA[
<read_file>
<path>src/data/processor.ts</path>
</read_file>
]]></tool_use>
<expected_output><![CDATA[
45 | export class DataProcessor {
46 | private listeners: Map<string, EventListener> = new Map();
47 |
48 | <<<<<<< HEAD
49 | async processData(data: DataInput): Promise<ProcessedData> {
50 | // Refactored to use async/await
51 | const result = await this.transform(data);
52 | return result;
53 | }
54 | =======
55 | processData(data: any[]): ProcessedData {
56 | const listener = this.createListener();
57 | this.listeners.set(data.id, listener);
58 |
59 | return this.transform(data);
60 | }
61 | >>>>>>> abc123 (Fix memory leak in data processor)
62 |
63 | cleanup() {
64 | <<<<<<< HEAD
65 | // TODO: Implement cleanup
66 | =======
67 | // Fix: Clear all listeners to prevent memory leak
68 | this.listeners.forEach(listener => {
69 | listener.removeAllListeners();
70 | });
71 | this.listeners.clear();
72 | >>>>>>> abc123 (Fix memory leak in data processor)
73 | }
74 | }
]]></expected_output>
</step>
<step number="5">
<description>Analyze the conflicts using git blame</description>
<tool_use><![CDATA[
<execute_command>
<command>git blame -L 49,53 HEAD -- src/data/processor.ts | cut -d' ' -f1 | sort -u | xargs -I {} git log -1 --format="%h %s" {}</command>
</execute_command>
]]></tool_use>
<expected_output><![CDATA[
def456 Refactor: Convert processData to async/await pattern
]]></expected_output>
<tool_use><![CDATA[
<execute_command>
<command>git log -1 --format="%h %s" abc123</command>
</execute_command>
]]></tool_use>
<expected_output><![CDATA[
abc123 Fix: Add listener cleanup to prevent memory leak
]]></expected_output>
<analysis>
HEAD (main after rebase): Has async/await refactor but missing listener logic
Incoming (bugfix branch): Adds listener tracking and cleanup for memory leak fix
Resolution strategy: Combine both changes - keep async/await refactor
but include the listener tracking and cleanup logic.
</analysis>
</step>
<step number="6">
<description>Resolve the conflicts</description>
<tool_use><![CDATA[
<apply_diff>
<path>src/data/processor.ts</path>
<diff>
<<<<<<< SEARCH
:start_line:48
-------
\<<<<<<< HEAD
async processData(data: DataInput): Promise<ProcessedData> {
// Refactored to use async/await
const result = await this.transform(data);
return result;
}
\=======
processData(data: any[]): ProcessedData {
const listener = this.createListener();
this.listeners.set(data.id, listener);
return this.transform(data);
}
\>>>>>>> abc123 (Fix memory leak in data processor)
=======
async processData(data: DataInput): Promise<ProcessedData> {
// Create and track listener for cleanup (memory leak fix)
const listener = this.createListener();
this.listeners.set(data.id, listener);
// Refactored to use async/await
const result = await this.transform(data);
return result;
}
>>>>>>> REPLACE
<<<<<<< SEARCH
:start_line:63
-------
cleanup() {
\<<<<<<< HEAD
// TODO: Implement cleanup
\=======
// Fix: Clear all listeners to prevent memory leak
this.listeners.forEach(listener => {
listener.removeAllListeners();
});
this.listeners.clear();
\>>>>>>> abc123 (Fix memory leak in data processor)
}
=======
cleanup() {
// Fix: Clear all listeners to prevent memory leak
this.listeners.forEach(listener => {
listener.removeAllListeners();
});
this.listeners.clear();
}
>>>>>>> REPLACE
</diff>
</apply_diff>
]]></tool_use>
<explanation>
Combined both changes: kept the async/await refactor from main
while preserving the memory leak fix (listener tracking and cleanup)
from the bugfix branch.
</explanation>
</step>
<step number="7">
<description>Resolve test file conflicts</description>
<tool_use><![CDATA[
<read_file>
<path>src/data/processor.test.ts</path>
</read_file>
]]></tool_use>
<!-- Similar process for test file -->
<tool_use><![CDATA[
<apply_diff>
<path>src/data/processor.test.ts</path>
<diff>
<!-- Test resolution would go here -->
</diff>
</apply_diff>
]]></tool_use>
</step>
<step number="8">
<description>Stage resolved files and continue rebase</description>
<tool_use><![CDATA[
<execute_command>
<command>git add src/data/processor.ts src/data/processor.test.ts</command>
</execute_command>
]]></tool_use>
<tool_use><![CDATA[
<execute_command>
<command>GIT_EDITOR=true git rebase --continue</command>
</execute_command>
]]></tool_use>
<expected_output><![CDATA[
[detached HEAD def789] Fix memory leak in data processor
2 files changed, 12 insertions(+), 2 deletions(-)
Successfully rebased and updated refs/heads/fix/memory-leak.
]]></expected_output>
</step>
<step number="9">
<description>Final validation</description>
<tool_use><![CDATA[
<execute_command>
<command>git status</command>
</execute_command>
]]></tool_use>
<expected_output><![CDATA[
On branch fix/memory-leak
Your branch is ahead of 'origin/fix/memory-leak' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
]]></expected_output>
<tool_use><![CDATA[
<execute_command>
<command>git diff origin/main --stat</command>
</execute_command>
]]></tool_use>
<expected_output><![CDATA[
src/data/processor.ts | 8 ++++++--
src/data/processor.test.ts | 4 ++--
2 files changed, 8 insertions(+), 4 deletions(-)
]]></expected_output>
</step>
</workflow>
<completion><![CDATA[
<attempt_completion>
<result>
Successfully resolved merge conflicts for PR #123 "Fix memory leak in data processor".
Resolution Summary:
- src/data/processor.ts: Combined the async/await refactor with the memory leak fix by preserving listener tracking and cleanup logic within the refactored async method
- src/data/processor.test.ts: Updated tests to work with the async implementation while maintaining memory leak test coverage
Both the feature refactor and the critical bugfix have been preserved in the resolution. The rebase has been completed successfully and the branch is ready to be pushed.
</result>
</attempt_completion>
]]></completion>
<key_takeaways>
<takeaway>Always checkout PR with --force and rebase to reveal conflicts</takeaway>
<takeaway>Fetch PR context to understand the intent of changes</takeaway>
<takeaway>Use git blame and commit messages to understand the history</takeaway>
<takeaway>Combine non-conflicting improvements when possible</takeaway>
<takeaway>Prioritize bugfixes while accommodating refactors</takeaway>
<takeaway>Use GIT_EDITOR=true to ensure non-interactive rebase operations</takeaway>
<takeaway>Complete the rebase process with GIT_EDITOR=true git rebase --continue</takeaway>
<takeaway>Validate that both sets of changes work together</takeaway>
</key_takeaways>
</merge_resolver_example>

View file

@ -0,0 +1,153 @@
<merge_resolver_communication>
<tone_and_style>
<principle>Be direct and technical when explaining resolution decisions</principle>
<principle>Focus on the rationale behind each conflict resolution</principle>
<principle>Provide clear summaries of what was merged and why</principle>
<avoid>
<phrase>I'll help you resolve these conflicts...</phrase>
<phrase>Let me handle this for you...</phrase>
<phrase>Don't worry about the conflicts...</phrase>
</avoid>
<prefer>
<phrase>Analyzing PR #123 for merge conflicts...</phrase>
<phrase>Resolving conflicts based on commit history analysis...</phrase>
<phrase>Applied resolution strategy: [specific strategy]</phrase>
</prefer>
</tone_and_style>
<initial_response>
<structure>
<element>Acknowledge the PR number</element>
<element>State that you're fetching PR information</element>
<element>Indicate the analysis will begin</element>
</structure>
<example>
Fetching information for PR #123 to understand the context and identify merge conflicts...
</example>
</initial_response>
<progress_updates>
<when>During each major phase of resolution</when>
<format>
<update>Analyzing [X] conflicted files...</update>
<update>Running git blame on [file] to understand change history...</update>
<update>Resolving conflicts in [file] by [strategy]...</update>
<update>Validating resolved changes...</update>
</format>
<include_details>
<detail>Number of conflicts found</detail>
<detail>Files being processed</detail>
<detail>Resolution strategy being applied</detail>
</include_details>
</progress_updates>
<conflict_explanations>
<guideline>Explain each significant resolution decision</guideline>
<guideline>Reference specific commits when relevant</guideline>
<guideline>Justify why certain changes were kept or merged</guideline>
<format>
<explanation>
Conflict in [file]:
- HEAD: [brief description of changes]
- Incoming: [brief description of changes]
- Resolution: [what was decided and why]
</explanation>
</format>
</conflict_explanations>
<error_handling>
<scenario name="no_pr_number">
<response>
Expected a PR number (e.g., "#123" or "123"). Please provide the PR number to resolve conflicts for.
</response>
</scenario>
<scenario name="no_conflicts">
<response>
PR #[number] does not have any merge conflicts. The branch can be merged without conflict resolution.
</response>
</scenario>
<scenario name="pr_not_found">
<response>
Could not find PR #[number]. Please verify the PR number and ensure you have access to the repository.
</response>
</scenario>
<scenario name="complex_conflicts">
<response>
Found complex conflicts in [file] that require careful analysis. Examining commit history to determine the best resolution strategy...
</response>
</scenario>
</error_handling>
<completion_messages>
<structure>
<element>State that conflicts are resolved</element>
<element>Provide resolution summary</element>
<element>List files that were resolved</element>
<element>Mention key decisions made</element>
</structure>
<template><![CDATA[
Successfully resolved merge conflicts for PR #[number] "[title]".
Resolution Summary:
- [file1]: [brief description of resolution]
- [file2]: [brief description of resolution]
[Key decision explanation if applicable]
All conflicts have been resolved and files have been staged for commit.
]]></template>
<avoid>
<element>Questions about next steps</element>
<element>Offers to do additional work</element>
<element>Uncertain language about the resolution</element>
</avoid>
</completion_messages>
<decision_documentation>
<principle>Document why specific resolutions were chosen</principle>
<principle>Reference commit SHAs when they influenced decisions</principle>
<principle>Explain trade-offs when both sides had valid changes</principle>
<examples>
<example>
Preserved bugfix from commit abc123 while adapting it to the refactored structure from def456
</example>
<example>
Combined both implementations as they addressed different aspects of the same feature
</example>
<example>
Chose the more recent implementation as it included additional error handling
</example>
</examples>
</decision_documentation>
<special_cases>
<case name="binary_files">
<message>
Binary file conflict in [file]. Based on PR intent "[title]", choosing [which version] version.
</message>
</case>
<case name="deleted_vs_modified">
<message>
Conflict: [file] was deleted in one branch but modified in another. Based on the changes, [keeping/removing] the file because [reason].
</message>
</case>
<case name="whitespace_only">
<message>
Conflict in [file] involves only whitespace/formatting. Applying consistent formatting from [which] branch.
</message>
</case>
</special_cases>
</merge_resolver_communication>

View file

@ -1,142 +0,0 @@
<mode_creation_workflow>
<overview>
This workflow guides you through creating a new custom mode to be used in the Roo Code Software,
from initial requirements gathering to final implementation.
</overview>
<detailed_steps>
<step number="1">
<title>Gather Requirements</title>
<description>
Understand what the user wants the mode to accomplish
</description>
<actions>
<action>Ask about the mode's primary purpose and use cases</action>
<action>Identify what types of tasks the mode should handle</action>
<action>Determine what tools and file access the mode needs</action>
<action>Clarify any special behaviors or restrictions</action>
</actions>
<example>
<ask_followup_question>
<question>What is the primary purpose of this new mode? What types of tasks should it handle?</question>
<follow_up>
<suggest>A mode for writing and maintaining documentation</suggest>
<suggest>A mode for database schema design and migrations</suggest>
<suggest>A mode for API endpoint development and testing</suggest>
<suggest>A mode for performance optimization and profiling</suggest>
</follow_up>
</ask_followup_question>
</example>
</step>
<step number="2">
<title>Design Mode Configuration</title>
<description>
Create the mode definition with all required fields
</description>
<required_fields>
<field name="slug">
<description>Unique identifier (lowercase, hyphens allowed)</description>
<best_practice>Keep it short and descriptive (e.g., "api-dev", "docs-writer")</best_practice>
</field>
<field name="name">
<description>Display name with optional emoji</description>
<best_practice>Use an emoji that represents the mode's purpose</best_practice>
</field>
<field name="roleDefinition">
<description>Detailed description of the mode's role and expertise</description>
<best_practice>
Start with "You are Roo Code, a [specialist type]..."
List specific areas of expertise
Mention key technologies or methodologies
</best_practice>
</field>
<field name="groups">
<description>Tool groups the mode can access</description>
<options>
<option name="read">File reading and searching tools</option>
<option name="edit">File editing tools (can be restricted by regex)</option>
<option name="command">Command execution tools</option>
<option name="browser">Browser interaction tools</option>
<option name="mcp">MCP server tools</option>
</options>
</field>
</required_fields>
<recommended_fields>
<field name="whenToUse">
<description>Clear description for the Orchestrator</description>
<best_practice>Explain specific scenarios and task types</best_practice>
</field>
</recommended_fields>
<important_note>
Do not include customInstructions in the .roomodes configuration.
All detailed instructions should be placed in XML files within
the .roo/rules-[mode-slug]/ directory instead.
</important_note>
</step>
<step number="3">
<title>Implement File Restrictions</title>
<description>
Configure appropriate file access permissions
</description>
<example>
<comment>Restrict edit access to specific file types</comment>
<code>
groups:
- read
- - edit
- fileRegex: \.(md|txt|rst)$
description: Documentation files only
- command
</code>
</example>
<guidelines>
<guideline>Use regex patterns to limit file editing scope</guideline>
<guideline>Provide clear descriptions for restrictions</guideline>
<guideline>Consider the principle of least privilege</guideline>
</guidelines>
</step>
<step number="4">
<title>Create XML Instruction Files</title>
<description>
Design structured instruction files in .roo/rules-[mode-slug]/
</description>
<file_structure>
<file name="1_workflow.xml">Main workflow and step-by-step processes</file>
<file name="2_best_practices.xml">Guidelines and conventions</file>
<file name="3_common_patterns.xml">Reusable code patterns and examples</file>
<file name="4_tool_usage.xml">Specific tool usage instructions</file>
<file name="5_examples.xml">Complete workflow examples</file>
</file_structure>
<xml_best_practices>
<practice>Use semantic tag names that describe content</practice>
<practice>Nest tags hierarchically for better organization</practice>
<practice>Include code examples in CDATA sections when needed</practice>
<practice>Add comments to explain complex sections</practice>
</xml_best_practices>
</step>
<step number="5">
<title>Test and Refine</title>
<description>
Verify the mode works as intended
</description>
<checklist>
<item>Mode appears in the mode list</item>
<item>File restrictions work correctly</item>
<item>Instructions are clear and actionable</item>
<item>Mode integrates well with Orchestrator</item>
<item>All examples are accurate and helpful</item>
</checklist>
</step>
</detailed_steps>
<quick_reference>
<command>Create mode in .roomodes for project-specific modes</command>
<command>Create mode in global custom_modes.yaml for system-wide modes</command>
<command>Use list_files to verify .roo folder structure</command>
<command>Test file regex patterns with search_files</command>
</quick_reference>
</mode_creation_workflow>

View file

@ -1,220 +0,0 @@
<xml_structuring_best_practices>
<overview>
XML tags help Claude parse prompts more accurately, leading to higher-quality outputs.
This guide covers best practices for structuring mode instructions using XML.
</overview>
<why_use_xml_tags>
<benefit type="clarity">
Clearly separate different parts of your instructions and ensure well-structured content
</benefit>
<benefit type="accuracy">
Reduce errors caused by Claude misinterpreting parts of your instructions
</benefit>
<benefit type="flexibility">
Easily find, add, remove, or modify parts of instructions without rewriting everything
</benefit>
<benefit type="parseability">
Having Claude use XML tags in its output makes it easier to extract specific parts of responses
</benefit>
</why_use_xml_tags>
<core_principles>
<principle name="consistency">
<description>Use the same tag names throughout your instructions</description>
<example>
Always use <step> for workflow steps, not sometimes <action> or <task>
</example>
</principle>
<principle name="semantic_naming">
<description>Tag names should clearly describe their content</description>
<good_examples>
<tag>detailed_steps</tag>
<tag>error_handling</tag>
<tag>validation_rules</tag>
</good_examples>
<bad_examples>
<tag>stuff</tag>
<tag>misc</tag>
<tag>data1</tag>
</bad_examples>
</principle>
<principle name="hierarchical_nesting">
<description>Nest tags to show relationships and structure</description>
<example>
<workflow>
<phase name="preparation">
<step>Gather requirements</step>
<step>Validate inputs</step>
</phase>
<phase name="execution">
<step>Process data</step>
<step>Generate output</step>
</phase>
</workflow>
</example>
</principle>
</core_principles>
<common_tag_patterns>
<pattern name="workflow_structure">
<usage>For step-by-step processes</usage>
<template><![CDATA[
<workflow>
<overview>High-level description</overview>
<prerequisites>
<prerequisite>Required condition 1</prerequisite>
<prerequisite>Required condition 2</prerequisite>
</prerequisites>
<steps>
<step number="1">
<title>Step Title</title>
<description>What this step accomplishes</description>
<actions>
<action>Specific action to take</action>
</actions>
<validation>How to verify success</validation>
</step>
</steps>
</workflow>
]]></template>
</pattern>
<pattern name="examples_structure">
<usage>For providing code examples and demonstrations</usage>
<template><![CDATA[
<examples>
<example name="descriptive_name">
<description>What this example demonstrates</description>
<context>When to use this approach</context>
<code language="typescript">
// Your code example here
</code>
<explanation>
Key points about the implementation
</explanation>
</example>
</examples>
]]></template>
</pattern>
<pattern name="guidelines_structure">
<usage>For rules and best practices</usage>
<template><![CDATA[
<guidelines category="category_name">
<guideline priority="high">
<rule>The specific rule or guideline</rule>
<rationale>Why this is important</rationale>
<exceptions>When this doesn't apply</exceptions>
</guideline>
</guidelines>
]]></template>
</pattern>
<pattern name="tool_usage_structure">
<usage>For documenting how to use specific tools</usage>
<template><![CDATA[
<tool_usage tool="tool_name">
<purpose>What this tool accomplishes</purpose>
<when_to_use>Specific scenarios for this tool</when_to_use>
<syntax>
<command>The exact command format</command>
<parameters>
<parameter name="param1" required="true">
<description>What this parameter does</description>
<type>string|number|boolean</type>
<example>example_value</example>
</parameter>
</parameters>
</syntax>
<examples>
<example scenario="common_use_case">
<code>Actual usage example</code>
<output>Expected output</output>
</example>
</examples>
</tool_usage>
]]></template>
</pattern>
</common_tag_patterns>
<formatting_guidelines>
<guideline name="indentation">
Use consistent indentation (2 or 4 spaces) for nested elements
</guideline>
<guideline name="line_breaks">
Add line breaks between major sections for readability
</guideline>
<guideline name="comments">
Use XML comments <!-- like this --> to explain complex sections
</guideline>
<guideline name="cdata_sections">
Use CDATA for code blocks or content with special characters:
<![CDATA[<code><![CDATA[your code here]]></code>]]>
</guideline>
<guideline name="attributes_vs_elements">
Use attributes for metadata, elements for content:
<example type="good">
<step number="1" priority="high">
<description>The actual step content</description>
</step>
</example>
</guideline>
</formatting_guidelines>
<anti_patterns>
<anti_pattern name="flat_structure">
<description>Avoid completely flat structures without hierarchy</description>
<bad><![CDATA[
<instructions>
<item1>Do this</item1>
<item2>Then this</item2>
<item3>Finally this</item3>
</instructions>
]]></bad>
<good><![CDATA[
<instructions>
<steps>
<step order="1">Do this</step>
<step order="2">Then this</step>
<step order="3">Finally this</step>
</steps>
</instructions>
]]></good>
</anti_pattern>
<anti_pattern name="inconsistent_naming">
<description>Don't mix naming conventions</description>
<bad>
Mixing camelCase, snake_case, and kebab-case in tag names
</bad>
<good>
Pick one convention (preferably snake_case for XML) and stick to it
</good>
</anti_pattern>
<anti_pattern name="overly_generic_tags">
<description>Avoid tags that don't convey meaning</description>
<bad>data, info, stuff, thing, item</bad>
<good>user_input, validation_result, error_message, configuration</good>
</anti_pattern>
</anti_patterns>
<integration_tips>
<tip>
Reference XML content in instructions:
"Using the workflow defined in &lt;workflow&gt; tags..."
</tip>
<tip>
Combine XML structure with other techniques like multishot prompting
</tip>
<tip>
Use XML tags in expected outputs to make parsing easier
</tip>
<tip>
Create reusable XML templates for common patterns
</tip>
</integration_tips>
</xml_structuring_best_practices>

View file

@ -1,261 +0,0 @@
<mode_configuration_patterns>
<overview>
Common patterns and templates for creating different types of modes, with examples from existing modes in the Roo-Code software.
</overview>
<mode_types>
<type name="specialist_mode">
<description>
Modes focused on specific technical domains or tasks
</description>
<characteristics>
<characteristic>Deep expertise in a particular area</characteristic>
<characteristic>Restricted file access based on domain</characteristic>
<characteristic>Specialized tool usage patterns</characteristic>
</characteristics>
<example_template><![CDATA[
- slug: api-specialist
name: 🔌 API Specialist
roleDefinition: >-
You are Roo Code, an API development specialist with expertise in:
- RESTful API design and implementation
- GraphQL schema design
- API documentation with OpenAPI/Swagger
- Authentication and authorization patterns
- Rate limiting and caching strategies
- API versioning and deprecation
You ensure APIs are:
- Well-documented and discoverable
- Following REST principles or GraphQL best practices
- Secure and performant
- Properly versioned and maintainable
whenToUse: >-
Use this mode when designing, implementing, or refactoring APIs.
This includes creating new endpoints, updating API documentation,
implementing authentication, or optimizing API performance.
groups:
- read
- - edit
- fileRegex: (api/.*\.(ts|js)|.*\.openapi\.yaml|.*\.graphql|docs/api/.*)$
description: API implementation files, OpenAPI specs, and API documentation
- command
- mcp
]]></example_template>
</type>
<type name="workflow_mode">
<description>
Modes that guide users through multi-step processes
</description>
<characteristics>
<characteristic>Step-by-step workflow guidance</characteristic>
<characteristic>Heavy use of ask_followup_question</characteristic>
<characteristic>Process validation at each step</characteristic>
</characteristics>
<example_template><![CDATA[
- slug: migration-guide
name: 🔄 Migration Guide
roleDefinition: >-
You are Roo Code, a migration specialist who guides users through
complex migration processes:
- Database schema migrations
- Framework version upgrades
- API version migrations
- Dependency updates
- Breaking change resolutions
You provide:
- Step-by-step migration plans
- Automated migration scripts
- Rollback strategies
- Testing approaches for migrations
whenToUse: >-
Use this mode when performing any kind of migration or upgrade.
This mode will analyze the current state, plan the migration,
and guide you through each step with validation.
groups:
- read
- edit
- command
]]></example_template>
</type>
<type name="analysis_mode">
<description>
Modes focused on code analysis and reporting
</description>
<characteristics>
<characteristic>Read-heavy operations</characteristic>
<characteristic>Limited or no edit permissions</characteristic>
<characteristic>Comprehensive reporting outputs</characteristic>
</characteristics>
<example_template><![CDATA[
- slug: security-auditor
name: 🔒 Security Auditor
roleDefinition: >-
You are Roo Code, a security analysis specialist focused on:
- Identifying security vulnerabilities
- Analyzing authentication and authorization
- Reviewing data validation and sanitization
- Checking for common security anti-patterns
- Evaluating dependency vulnerabilities
- Assessing API security
You provide detailed security reports with:
- Vulnerability severity ratings
- Specific remediation steps
- Security best practice recommendations
whenToUse: >-
Use this mode to perform security audits on codebases.
This mode will analyze code for vulnerabilities, check
dependencies, and provide actionable security recommendations.
groups:
- read
- command
- - edit
- fileRegex: (SECURITY\.md|\.github/security/.*|docs/security/.*)$
description: Security documentation files only
]]></example_template>
</type>
<type name="creative_mode">
<description>
Modes for generating new content or features
</description>
<characteristics>
<characteristic>Broad file creation permissions</characteristic>
<characteristic>Template and boilerplate generation</characteristic>
<characteristic>Interactive design process</characteristic>
</characteristics>
<example_template><![CDATA[
- slug: component-designer
name: 🎨 Component Designer
roleDefinition: >-
You are Roo Code, a UI component design specialist who creates:
- Reusable React/Vue/Angular components
- Component documentation and examples
- Storybook stories
- Unit tests for components
- Accessibility-compliant interfaces
You follow design system principles and ensure components are:
- Highly reusable and composable
- Well-documented with examples
- Fully tested
- Accessible (WCAG compliant)
- Performance optimized
whenToUse: >-
Use this mode when creating new UI components or refactoring
existing ones. This mode helps design component APIs, implement
the components, and create comprehensive documentation.
groups:
- read
- - edit
- fileRegex: (components/.*|stories/.*|__tests__/.*\.test\.(tsx?|jsx?))$
description: Component files, stories, and component tests
- browser
- command
]]></example_template>
</type>
</mode_types>
<permission_patterns>
<pattern name="documentation_only">
<description>For modes that only work with documentation</description>
<configuration><![CDATA[
groups:
- read
- - edit
- fileRegex: \.(md|mdx|rst|txt)$
description: Documentation files only
]]></configuration>
</pattern>
<pattern name="test_focused">
<description>For modes that work with test files</description>
<configuration><![CDATA[
groups:
- read
- command
- - edit
- fileRegex: (__tests__/.*|__mocks__/.*|.*\.test\.(ts|tsx|js|jsx)$|.*\.spec\.(ts|tsx|js|jsx)$)
description: Test files and mocks
]]></configuration>
</pattern>
<pattern name="config_management">
<description>For modes that manage configuration</description>
<configuration><![CDATA[
groups:
- read
- - edit
- fileRegex: (.*\.config\.(js|ts|json)|.*rc\.json|.*\.yaml|.*\.yml|\.env\.example)$
description: Configuration files (not .env)
]]></configuration>
</pattern>
<pattern name="full_stack">
<description>For modes that need broad access</description>
<configuration><![CDATA[
groups:
- read
- edit # No restrictions
- command
- browser
- mcp
]]></configuration>
</pattern>
</permission_patterns>
<naming_conventions>
<convention category="slug">
<rule>Use lowercase with hyphens</rule>
<good>api-dev, test-writer, docs-manager</good>
<bad>apiDev, test_writer, DocsManager</bad>
</convention>
<convention category="name">
<rule>Use title case with descriptive emoji</rule>
<good>🔧 API Developer, 📝 Documentation Writer</good>
<bad>api developer, DOCUMENTATION WRITER</bad>
</convention>
<convention category="emoji_selection">
<common_emojis>
<emoji meaning="testing">🧪</emoji>
<emoji meaning="documentation">📝</emoji>
<emoji meaning="design">🎨</emoji>
<emoji meaning="debugging">🪲</emoji>
<emoji meaning="building">🏗️</emoji>
<emoji meaning="security">🔒</emoji>
<emoji meaning="api">🔌</emoji>
<emoji meaning="database">🗄️</emoji>
<emoji meaning="performance"></emoji>
<emoji meaning="configuration">⚙️</emoji>
</common_emojis>
</convention>
</naming_conventions>
<integration_guidelines>
<guideline name="orchestrator_compatibility">
<description>Ensure whenToUse is clear for Orchestrator mode</description>
<checklist>
<item>Specify concrete task types the mode handles</item>
<item>Include trigger keywords or phrases</item>
<item>Differentiate from similar modes</item>
<item>Mention specific file types or areas</item>
</checklist>
</guideline>
<guideline name="mode_boundaries">
<description>Define clear boundaries between modes</description>
<checklist>
<item>Avoid overlapping responsibilities</item>
<item>Make handoff points explicit</item>
<item>Use switch_mode when appropriate</item>
<item>Document mode interactions</item>
</checklist>
</guideline>
</integration_guidelines>
</mode_configuration_patterns>

View file

@ -1,367 +0,0 @@
<instruction_file_templates>
<overview>
Templates and examples for creating XML instruction files that provide
detailed guidance for each mode's behavior and workflows.
</overview>
<file_organization>
<principle>Number files to indicate execution order</principle>
<principle>Use descriptive names that indicate content</principle>
<principle>Keep related instructions together</principle>
<standard_structure>
<file>1_workflow.xml - Main workflow and processes</file>
<file>2_best_practices.xml - Guidelines and conventions</file>
<file>3_common_patterns.xml - Reusable code patterns</file>
<file>4_tool_usage.xml - Specific tool instructions</file>
<file>5_examples.xml - Complete workflow examples</file>
<file>6_error_handling.xml - Error scenarios and recovery</file>
<file>7_communication.xml - User interaction guidelines</file>
</standard_structure>
</file_organization>
<workflow_file_template>
<description>Template for main workflow files (1_workflow.xml)</description>
<template><![CDATA[
<workflow_instructions>
<mode_overview>
Brief description of what this mode does and its primary purpose
</mode_overview>
<initialization_steps>
<step number="1">
<action>Understand the user's request</action>
<details>
Parse the user's input to identify:
- Primary objective
- Specific requirements
- Constraints or limitations
</details>
</step>
<step number="2">
<action>Gather necessary context</action>
<tools>
<tool>codebase_search - Find relevant existing code</tool>
<tool>list_files - Understand project structure</tool>
<tool>read_file - Examine specific implementations</tool>
</tools>
</step>
</initialization_steps>
<main_workflow>
<phase name="analysis">
<description>Analyze the current state and requirements</description>
<steps>
<step>Identify affected components</step>
<step>Assess impact of changes</step>
<step>Plan implementation approach</step>
</steps>
</phase>
<phase name="implementation">
<description>Execute the planned changes</description>
<steps>
<step>Create/modify necessary files</step>
<step>Ensure consistency across codebase</step>
<step>Add appropriate documentation</step>
</steps>
</phase>
<phase name="validation">
<description>Verify the implementation</description>
<steps>
<step>Check for errors or inconsistencies</step>
<step>Validate against requirements</step>
<step>Ensure no regressions</step>
</steps>
</phase>
</main_workflow>
<completion_criteria>
<criterion>All requirements have been addressed</criterion>
<criterion>Code follows project conventions</criterion>
<criterion>Changes are properly documented</criterion>
<criterion>No breaking changes introduced</criterion>
</completion_criteria>
</workflow_instructions>
]]></template>
</workflow_file_template>
<best_practices_template>
<description>Template for best practices files (2_best_practices.xml)</description>
<template><![CDATA[
<best_practices>
<general_principles>
<principle priority="high">
<name>Principle Name</name>
<description>Detailed explanation of the principle</description>
<rationale>Why this principle is important</rationale>
<example>
<scenario>When this applies</scenario>
<good>Correct approach</good>
<bad>What to avoid</bad>
</example>
</principle>
</general_principles>
<code_conventions>
<convention category="naming">
<rule>Specific naming convention</rule>
<examples>
<good>goodExampleName</good>
<bad>bad_example-name</bad>
</examples>
</convention>
<convention category="structure">
<rule>How to structure code/files</rule>
<template>
// Example structure
</template>
</convention>
</code_conventions>
<common_pitfalls>
<pitfall>
<description>Common mistake to avoid</description>
<why_problematic>Explanation of issues it causes</why_problematic>
<correct_approach>How to do it properly</correct_approach>
</pitfall>
</common_pitfalls>
<quality_checklist>
<category name="before_starting">
<item>Understand requirements fully</item>
<item>Check existing implementations</item>
</category>
<category name="during_implementation">
<item>Follow established patterns</item>
<item>Write clear documentation</item>
</category>
<category name="before_completion">
<item>Review all changes</item>
<item>Verify requirements met</item>
</category>
</quality_checklist>
</best_practices>
]]></template>
</best_practices_template>
<tool_usage_template>
<description>Template for tool usage files (4_tool_usage.xml)</description>
<template><![CDATA[
<tool_usage_guide>
<tool_priorities>
<priority level="1">
<tool>codebase_search</tool>
<when>Always use first to find relevant code</when>
<why>Semantic search finds functionality better than keywords</why>
</priority>
<priority level="2">
<tool>read_file</tool>
<when>After identifying files with codebase_search</when>
<why>Get full context of implementations</why>
</priority>
</tool_priorities>
<tool_specific_guidance>
<tool name="apply_diff">
<best_practices>
<practice>Always read file first to ensure exact content match</practice>
<practice>Make multiple changes in one diff when possible</practice>
<practice>Include line numbers for accuracy</practice>
</best_practices>
<example><![CDATA[
<apply_diff>
<path>src/config.ts</path>
<diff>
<<<<<<< SEARCH
:start_line:10
-------
export const config = {
apiUrl: 'http://localhost:3000',
timeout: 5000
};
=======
export const config = {
apiUrl: process.env.API_URL || 'http://localhost:3000',
timeout: parseInt(process.env.TIMEOUT || '5000'),
retries: 3
};
>>>>>>> REPLACE
</diff>
</apply_diff>
]]></example>
</tool>
<tool name="ask_followup_question">
<best_practices>
<practice>Provide 2-4 specific, actionable suggestions</practice>
<practice>Order suggestions by likelihood or importance</practice>
<practice>Make suggestions complete (no placeholders)</practice>
</best_practices>
<example><![CDATA[
<ask_followup_question>
<question>Which database system should I configure for this project?</question>
<follow_up>
<suggest>PostgreSQL with the default configuration</suggest>
<suggest>MySQL 8.0 with InnoDB storage engine</suggest>
<suggest>SQLite for local development only</suggest>
<suggest>MongoDB for document-based storage</suggest>
</follow_up>
</ask_followup_question>
]]></example>
</tool>
</tool_specific_guidance>
<tool_combination_patterns>
<pattern name="explore_then_modify">
<sequence>
<step>codebase_search - Find relevant files</step>
<step>list_code_definition_names - Understand structure</step>
<step>read_file - Get full context</step>
<step>apply_diff or write_to_file - Make changes</step>
</sequence>
</pattern>
<pattern name="verify_then_proceed">
<sequence>
<step>list_files - Check file exists</step>
<step>read_file - Verify current content</step>
<step>ask_followup_question - Confirm approach</step>
<step>apply_diff - Implement changes</step>
</sequence>
</pattern>
</tool_combination_patterns>
</tool_usage_guide>
]]></template>
</tool_usage_template>
<examples_file_template>
<description>Template for example files (5_examples.xml)</description>
<template><![CDATA[
<complete_examples>
<example name="descriptive_example_name">
<scenario>
Detailed description of the use case this example covers
</scenario>
<user_request>
The initial request from the user
</user_request>
<workflow>
<step number="1">
<description>First step description</description>
<tool_use><![CDATA[
<codebase_search>
<query>search query here</query>
</codebase_search>
]]></tool_use>
<expected_outcome>What we learn from this step</expected_outcome>
</step>
<step number="2">
<description>Second step description</description>
<tool_use><![CDATA[
<read_file>
<path>path/to/file.ts</path>
</read_file>
]]></tool_use>
<analysis>How we interpret the results</analysis>
</step>
<step number="3">
<description>Implementation step</description>
<tool_use><![CDATA[
<apply_diff>
<path>path/to/file.ts</path>
<diff>
<<<<<<< SEARCH
:start_line:1
-------
original content
=======
new content
>>>>>>> REPLACE
</diff>
</apply_diff>
]]></tool_use>
</step>
</workflow>
<completion><![CDATA[
<attempt_completion>
<result>
Summary of what was accomplished and how it addresses the user's request
</result>
</attempt_completion>
]]></completion>
<key_takeaways>
<takeaway>Important lesson from this example</takeaway>
<takeaway>Pattern that can be reused</takeaway>
</key_takeaways>
</example>
</complete_examples>
]]></template>
</examples_file_template>
<communication_template>
<description>Template for communication guidelines (7_communication.xml)</description>
<template><![CDATA[
<communication_guidelines>
<tone_and_style>
<principle>Be direct and technical, not conversational</principle>
<principle>Focus on actions taken and results achieved</principle>
<avoid>
<phrase>Great! I'll help you with that...</phrase>
<phrase>Certainly! Let me...</phrase>
<phrase>Sure thing!</phrase>
</avoid>
<prefer>
<phrase>I'll analyze the codebase to...</phrase>
<phrase>Implementing the requested changes...</phrase>
<phrase>The analysis shows...</phrase>
</prefer>
</tone_and_style>
<user_interaction>
<when_to_ask_questions>
<scenario>Missing critical information</scenario>
<scenario>Multiple valid approaches exist</scenario>
<scenario>Potential breaking changes</scenario>
</when_to_ask_questions>
<question_format>
<guideline>Be specific about what you need</guideline>
<guideline>Provide actionable options</guideline>
<guideline>Explain implications of choices</guideline>
</question_format>
</user_interaction>
<progress_updates>
<when>During long-running operations</when>
<format>
<update>Analyzing [X] files for [purpose]...</update>
<update>Implementing [feature] in [location]...</update>
<update>Validating changes against [criteria]...</update>
</format>
</progress_updates>
<completion_messages>
<structure>
<element>What was accomplished</element>
<element>Key changes made</element>
<element>Any important notes or warnings</element>
</structure>
<avoid>
<element>Questions at the end</element>
<element>Offers for further assistance</element>
<element>Conversational closings</element>
</avoid>
</completion_messages>
</communication_guidelines>
]]></template>
</communication_template>
</instruction_file_templates>

View file

@ -1,96 +0,0 @@
<![CDATA[
<api_documentation_example>
<scenario>
Generate OpenAPI documentation for a REST API with user management endpoints
</scenario>
<workflow>
<step number="1">
<description>Discover API endpoints</description>
<tool_use><![CDATA[
<codebase_search>
<query>express router app.get app.post app.put app.delete @Route @Get @Post</query>
</codebase_search>
]]></tool_use>
<result>Found routes in src/routes/users.ts</result>
</step>
<step number="2">
<description>Analyze endpoint implementation</description>
<tool_use><![CDATA[
<read_file>
<path>src/routes/users.ts</path>
</read_file>
]]></tool_use>
</step>
<step number="3">
<description>Generate OpenAPI specification</description>
<tool_use><![CDATA[
<write_to_file>
<path>docs/api/openapi.yaml</path>
<content>
openapi: 3.0.0
info:
title: User Management API
version: 1.0.0
description: API for managing user accounts
servers:
- url: https://api.example.com/v1
description: Production server
- url: http://localhost:3000/v1
description: Development server
paths:
/users:
get:
summary: List all users
operationId: listUsers
tags:
- Users
parameters:
- name: page
in: query
schema:
type: integer
default: 1
- name: limit
in: query
schema:
type: integer
default: 20
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
users:
type: array
items:
$ref: '#/components/schemas/User'
pagination:
$ref: '#/components/schemas/Pagination'
components:
schemas:
User:
type: object
required:
- id
- email
properties:
id:
type: string
format: uuid
email:
type: string
format: email
name:
type: string
createdAt:
type: string
format: date-time

View file

@ -1,207 +0,0 @@
<mode_testing_validation>
<overview>
Guidelines for testing and validating newly created modes to ensure they function correctly and integrate well with the Roo Code ecosystem.
</overview>
<validation_checklist>
<category name="configuration_validation">
<item priority="critical">
<check>Mode slug is unique and follows naming conventions</check>
<validation>No spaces, lowercase, hyphens only</validation>
</item>
<item priority="critical">
<check>All required fields are present and non-empty</check>
<fields>slug, name, roleDefinition, groups</fields>
</item>
<item priority="critical">
<check>No customInstructions field in .roomodes</check>
<validation>All instructions must be in XML files in .roo/rules-[slug]/</validation>
</item>
<item priority="high">
<check>File restrictions use valid regex patterns</check>
<test_method><![CDATA[
<search_files>
<path>.</path>
<regex>your_file_regex_here</regex>
</search_files>
]]></test_method>
</item>
<item priority="high">
<check>whenToUse clearly differentiates from other modes</check>
<validation>Compare with existing mode descriptions</validation>
</item>
</category>
<category name="instruction_validation">
<item>
<check>XML files are well-formed and valid</check>
<validation>No syntax errors, proper closing tags</validation>
</item>
<item>
<check>Instructions follow XML best practices</check>
<validation>Semantic tag names, proper nesting</validation>
</item>
<item>
<check>Examples use correct tool syntax</check>
<validation>Tool parameters match current API</validation>
</item>
<item>
<check>File paths in examples are consistent</check>
<validation>Use project-relative paths</validation>
</item>
</category>
<category name="functional_testing">
<item>
<check>Mode appears in mode list</check>
<test>Switch to the new mode and verify it loads</test>
</item>
<item>
<check>Tool permissions work as expected</check>
<test>Try using each tool group and verify access</test>
</item>
<item>
<check>File restrictions are enforced</check>
<test>Attempt to edit allowed and restricted files</test>
</item>
<item>
<check>Mode handles edge cases gracefully</check>
<test>Test with minimal input, errors, edge cases</test>
</item>
</category>
</validation_checklist>
<testing_workflow>
<step number="1">
<title>Configuration Testing</title>
<actions>
<action>Verify mode appears in available modes list</action>
<action>Check that mode metadata displays correctly</action>
<action>Confirm mode can be activated</action>
</actions>
<verification><![CDATA[
<ask_followup_question>
<question>I've created the mode configuration. Can you see the new mode in your mode list?</question>
<follow_up>
<suggest>Yes, I can see the new mode and switch to it</suggest>
<suggest>No, the mode doesn't appear in the list</suggest>
<suggest>The mode appears but has errors when switching</suggest>
</follow_up>
</ask_followup_question>
]]></verification>
</step>
<step number="2">
<title>Permission Testing</title>
<test_cases>
<test case="read_permissions">
<action>Use read tools on various files</action>
<expected>All read operations should work</expected>
</test>
<test case="edit_restrictions">
<action>Try editing allowed file types</action>
<expected>Edits succeed for matching patterns</expected>
</test>
<test case="edit_restrictions_negative">
<action>Try editing restricted file types</action>
<expected>FileRestrictionError for non-matching files</expected>
</test>
</test_cases>
</step>
<step number="3">
<title>Workflow Testing</title>
<actions>
<action>Execute main workflow from start to finish</action>
<action>Test each decision point</action>
<action>Verify error handling</action>
<action>Check completion criteria</action>
</actions>
</step>
<step number="4">
<title>Integration Testing</title>
<areas>
<area>Orchestrator mode compatibility</area>
<area>Mode switching functionality</area>
<area>Tool handoff between modes</area>
<area>Consistent behavior with other modes</area>
</areas>
</step>
</testing_workflow>
<common_issues>
<issue type="configuration">
<problem>Mode doesn't appear in list</problem>
<causes>
<cause>Syntax error in YAML</cause>
<cause>Invalid mode slug</cause>
<cause>File not saved</cause>
</causes>
<solution>Check YAML syntax, validate slug format</solution>
</issue>
<issue type="permissions">
<problem>File restriction not working</problem>
<causes>
<cause>Invalid regex pattern</cause>
<cause>Escaping issues in regex</cause>
<cause>Wrong file path format</cause>
</causes>
<solution>Test regex pattern, use proper escaping</solution>
<example><![CDATA[
# Wrong: *.ts (glob pattern)
# Right: .*\.ts$ (regex pattern)
]]></example>
</issue>
<issue type="behavior">
<problem>Mode not following instructions</problem>
<causes>
<cause>Instructions not in .roo/rules-[slug]/ folder</cause>
<cause>XML parsing errors</cause>
<cause>Conflicting instructions</cause>
</causes>
<solution>Verify file locations and XML validity</solution>
</issue>
</common_issues>
<debugging_tools>
<tool name="list_files">
<usage>Verify instruction files exist in correct location</usage>
<command><![CDATA[
<list_files>
<path>.roo</path>
<recursive>true</recursive>
</list_files>
]]></command>
</tool>
<tool name="read_file">
<usage>Check mode configuration syntax</usage>
<command><![CDATA[
<read_file>
<path>.roomodes</path>
</read_file>
]]></command>
</tool>
<tool name="search_files">
<usage>Test file restriction patterns</usage>
<command><![CDATA[
<search_files>
<path>.</path>
<regex>your_file_pattern_here</regex>
</search_files>
]]></command>
</tool>
</debugging_tools>
<best_practices>
<practice>Test incrementally as you build the mode</practice>
<practice>Start with minimal configuration and add complexity</practice>
<practice>Document any special requirements or dependencies</practice>
<practice>Consider edge cases and error scenarios</practice>
<practice>Get feedback from potential users of the mode</practice>
</best_practices>
</mode_testing_validation>

View file

@ -1,6 +1,6 @@
<workflow_instructions>
<mode_overview>
This mode is designed to help resolve issues in existing pull requests. It analyzes PR feedback from GitHub, checks for failing tests and merge conflicts, gathers context, and guides the user toward a solution.
This mode is designed to help resolve issues in existing pull requests. It analyzes PR feedback from GitHub, checks for failing tests and merge conflicts, gathers context, and guides the user toward a solution. All GitHub operations are performed using the GitHub CLI.
</mode_overview>
<initialization_steps>
@ -13,9 +13,9 @@
<step number="2">
<action>Gather PR context</action>
<tools>
<tool>use_mcp_tool (github): get_pull_request, get_pull_request_comments</tool>
<tool>gh cli: Check workflow status and logs for failing tests.</tool>
<tool>gh cli: Check for merge conflicts.</tool>
<tool>gh pr view [PR_NUMBER] --repo [owner]/[repo] --json number,title,author,state,body,url,headRefName,baseRefName,files,additions,deletions,changedFiles,comments,reviews</tool>
<tool>gh pr checks [PR_NUMBER] --repo [owner]/[repo] - Check workflow status for failing tests</tool>
<tool>gh pr view [PR_NUMBER] --repo [owner]/[repo] --json mergeable,mergeStateStatus - Check for merge conflicts</tool>
</tools>
</step>
</initialization_steps>
@ -24,9 +24,9 @@
<phase name="analysis">
<description>Analyze the gathered information to identify the core problems.</description>
<steps>
<step>Summarize review comments and requested changes.</step>
<step>Identify the root cause of failing tests by analyzing logs.</step>
<step>Determine if merge conflicts exist.</step>
<step>Summarize review comments and requested changes from gh pr view output.</step>
<step>Identify the root cause of failing tests by analyzing workflow logs with 'gh run view'.</step>
<step>Determine if merge conflicts exist from mergeable status.</step>
</steps>
</phase>
@ -41,17 +41,27 @@
<phase name="implementation">
<description>Execute the user's chosen course of action.</description>
<steps>
<step>Check out the PR branch locally using 'gh pr checkout'.</step>
<step>Apply code changes based on review feedback.</step>
<step>Fix failing tests.</step>
<step>Resolve conflicts by rebasing the PR branch and force-pushing.</step>
<step>Check out the PR branch locally using 'gh pr checkout [PR_NUMBER] --repo [owner]/[repo] --force'.</step>
<step>Determine if the PR is from a fork by checking 'gh pr view [PR_NUMBER] --repo [owner]/[repo] --json isCrossRepository'.</step>
<step>Apply code changes based on review feedback using file editing tools.</step>
<step>Fix failing tests by modifying test files or source code as needed.</step>
<step>For conflict resolution: Delegate to merge-resolver mode using new_task with the PR number.</step>
<step>If changes affect user-facing content (i18n files, UI components, announcements), delegate translation updates using the new_task tool with translate mode.</step>
<step>Review modified files with 'git status --porcelain' to ensure no temporary files are included.</step>
<step>Stage files selectively using 'git add -u' (for modified tracked files) or 'git add <specific-files>' (for new files).</step>
<step>Verify staged files with 'git diff --cached --name-only' before committing.</step>
<step>Commit changes using git commands with descriptive messages.</step>
<step>Push changes to the correct remote (origin for same-repo PRs, fork remote for cross-repo PRs) using 'git push --force-with-lease'.</step>
</steps>
</phase>
<phase name="validation">
<description>Verify that the pushed changes resolve the issues.</description>
<steps>
<step>Use 'gh pr checks --watch' to monitor the CI/CD pipeline and ensure all workflows execute successfully.</step>
<step>Use 'gh pr checks [PR_NUMBER] --repo [owner]/[repo] --watch' to monitor check status in real-time until all checks complete.</step>
<step>If needed, check specific workflow runs with 'gh run list --pr [PR_NUMBER] --repo [owner]/[repo]' for detailed CI/CD pipeline status.</step>
<step>Verify that all translation updates (if any) have been completed and committed.</step>
<step>Confirm PR is ready for review by checking mergeable state with 'gh pr view [PR_NUMBER] --repo [owner]/[repo] --json mergeable,mergeStateStatus'.</step>
</steps>
</phase>
</main_workflow>
@ -60,5 +70,6 @@
<criterion>All actionable review comments have been addressed.</criterion>
<criterion>All tests are passing.</criterion>
<criterion>The PR is free of merge conflicts.</criterion>
<criterion>All required translations have been completed and committed (if changes affect user-facing content).</criterion>
</completion_criteria>
</workflow_instructions>

View file

@ -10,37 +10,56 @@
<description>Address issues one at a time (e.g., fix tests first, then address comments). This makes the process more manageable and easier to validate.</description>
<rationale>Tackling all issues at once can be complex and error-prone.</rationale>
</principle>
<principle priority="high">
<name>Handle Fork Remotes Correctly</name>
<description>Always check if a PR comes from a fork (cross-repository) before pushing changes. Use 'gh pr view --json isCrossRepository' to determine the correct remote.</description>
<rationale>Pushing to the wrong remote (e.g., origin instead of fork) will fail for cross-repository PRs.</rationale>
<example>
<scenario>PR from a fork</scenario>
<good>Check isCrossRepository, add fork remote if needed, push to fork</good>
<bad>Always push to origin without checking PR source</bad>
</example>
</principle>
<principle priority="high">
<name>Safe File Staging</name>
<description>Always review files before staging to avoid committing temporary files, build artifacts, or system files. Use selective git commands that respect .gitignore.</description>
<rationale>Committing unwanted files can expose sensitive data, clutter the repository, and cause CI/CD failures.</rationale>
<example>
<scenario>Staging files for commit</scenario>
<good>Use 'git add -u' to stage only modified tracked files, or explicitly list files to add</good>
<bad>Use 'git add .' which stages everything including temp files</bad>
</example>
<checklist>
<item>Review git status before staging</item>
<item>Check for temporary files (.swp, .DS_Store, *.tmp)</item>
<item>Exclude build artifacts (dist/, build/, *.pyc)</item>
<item>Avoid IDE-specific files (.idea/, .vscode/)</item>
<item>Verify .gitignore is properly configured</item>
</checklist>
</principle>
</general_principles>
<code_conventions>
<convention category="merge_conflicts">
<rule>How to correctly escape conflict markers when using apply_diff.</rule>
<rule>Delegate merge conflict resolution to the merge-resolver mode.</rule>
<template>
When removing merge conflict markers from files, you must **escape** them in your `SEARCH` section by prepending a backslash (`\`) at the beginning of the line. This prevents the system from mistaking them for actual diff syntax.
When merge conflicts are detected, do not attempt to resolve them manually. Instead, use the new_task tool to create a task for the merge-resolver mode:
**Correct Format Example:**
```
<<<<<<< SEARCH
content before
\<<<<<<< HEAD <-- Note the backslash here
content after
=======
replacement content
>>>>>>> REPLACE
```xml
<new_task>
<mode>merge-resolver</mode>
<message>#[PR_NUMBER]</message>
</new_task>
```
Without escaping, the system confuses your content with real diff markers.
The merge-resolver mode will:
- Checkout the PR branch
- Perform the rebase
- Intelligently resolve conflicts based on commit history and intent
- Push the resolved changes
- Return control back to pr-fixer mode
You may include multiple diff blocks in a single request, but if any of the following markers appear within your `SEARCH` or `REPLACE` content, they must be escaped:
```
\<<<<<<< SEARCH
\=======
\>>>>>>> REPLACE
```
Only these three need to be escaped when used in content.
This ensures consistent and intelligent conflict resolution across all PRs.
</template>
</convention>
</code_conventions>

View file

@ -24,31 +24,113 @@
</command>
</template>
</pattern>
<pattern name="resolving_conflicts_rebase">
<usage>A sequence of commands to resolve merge conflicts locally using rebase.</usage>
<pattern name="detecting_conflicts">
<usage>Commands to detect merge conflicts.</usage>
<template>
<command tool="git">git checkout main</command>
<command tool="git">git pull origin main</command>
<command tool="git">git checkout <pr_branch></command>
<command tool="git">git rebase main</command>
<comment>After resolving conflicts manually, continue the rebase.</comment>
<command tool="git">git rebase --continue</command>
<comment>Force push with lease is preferred for safety.</comment>
<command tool="git">git push --force-with-lease</command>
<comment>If force-with-lease fails, a regular force push can be used.</comment>
<command tool="git">git push --force</command>
<comment>Check PR mergeable status</comment>
<command tool="gh">gh pr view <pr_number> --json mergeable,mergeStateStatus</command>
<comment>If mergeable is false or mergeStateStatus is CONFLICTING, delegate to merge-resolver</comment>
</template>
</pattern>
<pattern name="delegating_conflict_resolution">
<usage>Delegate merge conflict resolution to the merge-resolver mode.</usage>
<template>
<comment>When conflicts are detected, create a new task for merge-resolver</comment>
<command tool="new_task"><![CDATA[
<new_task>
<mode>merge-resolver</mode>
<message>#<pr_number></message>
</new_task>
]]></command>
<comment>Wait for merge-resolver to complete before continuing with other fixes</comment>
</template>
</pattern>
<pattern name="checking_out_pr">
<usage>Command to check out a pull request branch locally.</usage>
<usage>Check out a pull request branch locally.</usage>
<template>
<command tool="gh">gh pr checkout <pr_number_or_url></command>
<command tool="gh">gh pr checkout <pr_number_or_url> --force</command>
<comment>Alternative if gh checkout fails:</comment>
<command tool="git">git fetch origin pull/<pr_number>/head:<branch_name> && git checkout <branch_name></command>
</template>
</pattern>
<pattern name="watching_pr_checks">
<usage>After pushing changes, use this command to monitor the CI/CD pipeline in real-time.</usage>
<pattern name="determine_push_remote">
<usage>Determine the correct remote to push to (handles forks).</usage>
<template>
<command tool="gh">gh pr checks --watch</command>
<comment>Get PR metadata to check if it's from a fork</comment>
<command tool="gh">gh pr view <pr_number> --json headRepositoryOwner,headRefName,isCrossRepository</command>
<comment>If isCrossRepository is true, it's from a fork</comment>
<command tool="git">git remote -v</command>
<comment>Check if fork remote exists, otherwise add it</comment>
<command tool="git">git remote add fork https://github.com/<fork_owner>/<repo_name>.git</command>
<comment>Use appropriate remote based on PR source</comment>
</template>
</pattern>
<pattern name="real_time_monitoring">
<usage>Monitor PR checks in real-time as they run.</usage>
<template>
<command tool="gh">gh pr checks <pr_number> --watch</command>
<comment>Continuously monitor check status with automatic updates</comment>
<alternative>For one-time status check: gh pr checks <pr_number> --json state,conclusion,name,detailsUrl</alternative>
<command tool="gh">gh run list --pr <pr_number> --json databaseId,status,conclusion</command>
</template>
</pattern>
<pattern name="safe_push_operations">
<usage>Push operations that handle both origin and fork remotes correctly.</usage>
<template>
<comment>First determine the correct remote (origin or fork)</comment>
<command tool="gh">gh pr view <pr_number> --json headRepositoryOwner,headRefName,isCrossRepository</command>
<comment>If isCrossRepository is false, push to origin</comment>
<command tool="git">git push --force-with-lease origin <branch_name></command>
<comment>If isCrossRepository is true, push to fork remote</comment>
<command tool="git">git push --force-with-lease fork <branch_name></command>
<comment>If force-with-lease fails, fetch and retry</comment>
<command tool="git">git fetch <remote> <branch_name></command>
<command tool="git">git push --force <remote> <branch_name></command>
</template>
</pattern>
<pattern name="automated_commit_operations">
<usage>Commit operations that work in automated environments while respecting .gitignore.</usage>
<template>
<comment>Review what files have been modified</comment>
<command tool="git">git status --porcelain</command>
<comment>Add only tracked files that were modified (respects .gitignore)</comment>
<command tool="git">git add -u</command>
<comment>If you need to add specific new files, list them explicitly</comment>
<command tool="git">git add <specific_file_path></command>
<command tool="git">git commit -m "<commit_message>"</command>
</template>
</pattern>
<pattern name="safe_file_staging">
<usage>Safely stage files for commit while avoiding temporary files and respecting .gitignore.</usage>
<template>
<comment>First, check what files are currently modified or untracked</comment>
<command tool="git">git status --porcelain</command>
<comment>Review the output to identify files that should NOT be committed:</comment>
<comment>- Files starting with . (hidden files like .DS_Store, .swp)</comment>
<comment>- Build artifacts (dist/, build/, *.pyc, *.o)</comment>
<comment>- IDE files (.idea/, .vscode/, *.iml)</comment>
<comment>- Temporary files (*.tmp, *.temp, *~)</comment>
<comment>Option 1: Stage only modified tracked files (safest)</comment>
<command tool="git">git add -u</command>
<comment>Option 2: Stage specific files by path</comment>
<command tool="git">git add src/file1.ts src/file2.ts</command>
<comment>Option 3: Use pathspec to add files matching a pattern</comment>
<command tool="git">git add '*.ts' '*.tsx' --</command>
<comment>Option 4: Interactive staging to review each change</comment>
<command tool="git">git add -p</command>
<comment>Always verify what's staged before committing</comment>
<command tool="git">git diff --cached --name-only</command>
</template>
</pattern>
</common_patterns>

View file

@ -1,7 +1,7 @@
<tool_usage_guide>
<tool_priorities>
<priority level="1">
<tool>use_mcp_tool (server: github)</tool>
<tool>gh pr view</tool>
<when>Use at the start to get all review comments and PR metadata.</when>
<why>Provides the core context of what needs to be fixed from a human perspective.</why>
</priority>
@ -11,6 +11,11 @@
<why>Quickly identifies if there are failing automated checks that need investigation.</why>
</priority>
<priority level="3">
<tool>new_task (mode: translate)</tool>
<when>When changes affect user-facing content, i18n files, or UI components that require translation.</when>
<why>Ensures translation consistency across all supported languages when PR fixes involve user-facing changes.</why>
</priority>
<priority level="4">
<tool>gh pr checks --watch</tool>
<when>After pushing a fix, to confirm that the changes have resolved the CI/CD failures.</when>
<why>Provides real-time feedback on whether the fix was successful.</why>
@ -18,14 +23,16 @@
</tool_priorities>
<tool_specific_guidance>
<tool name="use_mcp_tool (github: get_pull_request)">
<tool name="gh pr view">
<best_practices>
<practice>Always fetch details to get the branch name, owner, repo slug, and mergeable state.</practice>
<practice>Always fetch details with --json to get structured data: gh pr view [PR_NUMBER] --repo [owner]/[repo] --json number,title,author,state,body,url,headRefName,baseRefName,files,additions,deletions,changedFiles,comments,reviews,mergeable,mergeStateStatus,isCrossRepository</practice>
<practice>Parse the JSON output to extract branch name, owner, repo slug, and mergeable state.</practice>
</best_practices>
</tool>
<tool name="use_mcp_tool (github: get_pull_request_comments)">
<tool name="gh pr comments">
<best_practices>
<practice>Use gh pr view --json comments to get all comments in structured format.</practice>
<practice>Parse all comments to create a checklist of required changes.</practice>
<practice>Ignore comments that are not actionable or have been resolved.</practice>
</best_practices>
@ -35,6 +42,42 @@
<best_practices>
<practice>Use this command to get the exact error messages from failing tests.</practice>
<practice>Search the log for keywords like 'error', 'failed', or 'exception' to quickly find the root cause.</practice>
<practice>Always specify run ID explicitly to avoid interactive selection prompts: gh run view [RUN_ID] --log-failed</practice>
<practice>Get run IDs with: gh run list --pr [PR_NUMBER] --repo [owner]/[repo]</practice>
</best_practices>
</tool>
<tool name="gh pr checkout">
<best_practices>
<practice>Use --force flag: 'gh pr checkout [PR_NUMBER] --repo [owner]/[repo] --force'</practice>
<practice>If gh checkout fails, use: git fetch origin pull/[PR_NUMBER]/head:[branch_name]</practice>
</best_practices>
</tool>
<tool name="git operations">
<best_practices>
<practice>Use --force-with-lease for safer force pushing.</practice>
<practice>Use GIT_EDITOR=true to prevent interactive prompts during rebases.</practice>
<practice>Always determine the correct remote before pushing (origin vs fork).</practice>
</best_practices>
<remote_handling>
<step>Check if PR is from a fork: 'gh pr view [PR_NUMBER] --repo [owner]/[repo] --json isCrossRepository'</step>
<step>If isCrossRepository is true, add fork remote if needed</step>
<step>Push to appropriate remote: 'git push --force-with-lease [remote] [branch]'</step>
</remote_handling>
<conflict_resolution>
<step>Delegate to merge-resolver mode using new_task</step>
<step>Provide the PR number (e.g., "#123") as the message</step>
<step>The merge-resolver mode will handle all conflict resolution automatically</step>
</conflict_resolution>
</tool>
<tool name="gh pr checks">
<best_practices>
<practice>Use --watch flag to monitor checks in real-time: 'gh pr checks [PR_NUMBER] --repo [owner]/[repo] --watch'</practice>
<practice>For one-time status checks, use --json flag: 'gh pr checks [PR_NUMBER] --repo [owner]/[repo] --json state,conclusion,name'</practice>
<practice>The --watch flag automatically updates the display as check statuses change.</practice>
<practice>Use 'gh run list --pr [PR_NUMBER] --repo [owner]/[repo]' to get detailed workflow status if needed.</practice>
</best_practices>
</tool>
@ -45,5 +88,69 @@
<practice>Example suggestions: "Address review comments first.", "Tackle the failing tests.", "Resolve merge conflicts."</practice>
</best_practices>
</tool>
<tool name="new_task (mode: translate)">
<best_practices>
<practice>Use when PR fixes involve changes to user-facing strings, i18n files, or UI components.</practice>
<practice>Provide specific details about what content needs translation in the message.</practice>
<practice>Include file paths and descriptions of the changes made.</practice>
<practice>List all affected languages that need updates.</practice>
<practice>Wait for translation completion before proceeding to validation phase.</practice>
</best_practices>
<when_to_use>
<trigger>Changes to webview-ui/src/i18n/locales/en/*.json files</trigger>
<trigger>Changes to src/i18n/locales/en/*.json files</trigger>
<trigger>Modifications to UI components with user-facing text</trigger>
<trigger>Updates to announcement files or documentation requiring localization</trigger>
<trigger>Addition of new error messages or user notifications</trigger>
</when_to_use>
<example_usage><![CDATA[
<new_task>
<mode>translate</mode>
<message>Translation updates needed for PR #1234 fixes. Please translate the following changes:
Files modified:
- webview-ui/src/i18n/locales/en/common.json: Added new error message "connection_failed"
- webview-ui/src/components/settings/ApiSettings.tsx: Updated button text from "Save" to "Save Configuration"
Please ensure all supported languages (ca, de, es, fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, tr, vi, zh-CN, zh-TW) are updated with appropriate translations for these changes.</message>
</new_task>
]]></example_usage>
</tool>
<tool name="new_task (mode: merge-resolver)">
<best_practices>
<practice>Use when PR has merge conflicts that need to be resolved.</practice>
<practice>Simply provide the PR number (e.g., "#123") as the message.</practice>
<practice>The merge-resolver mode will handle checkout, rebase, conflict resolution, and pushing.</practice>
<practice>Wait for merge-resolver to complete before continuing with other PR fixes.</practice>
</best_practices>
<when_to_use>
<trigger>When gh pr view shows mergeable: false or mergeStateStatus: CONFLICTING</trigger>
<trigger>When git rebase fails with conflicts</trigger>
<trigger>When git status shows unmerged paths</trigger>
</when_to_use>
<example_usage><![CDATA[
<new_task>
<mode>merge-resolver</mode>
<message>#1234</message>
</new_task>
]]></example_usage>
</tool>
</tool_specific_guidance>
<github_cli_reference>
<command_group name="pr_operations">
<command>gh pr view [PR_NUMBER] --repo [owner]/[repo] --json [fields]</command>
<command>gh pr checkout [PR_NUMBER] --repo [owner]/[repo] --force</command>
<command>gh pr checks [PR_NUMBER] --repo [owner]/[repo] [--watch|--json]</command>
<command>gh pr comment [PR_NUMBER] --repo [owner]/[repo] --body "[text]"</command>
</command_group>
<command_group name="workflow_operations">
<command>gh run list --pr [PR_NUMBER] --repo [owner]/[repo]</command>
<command>gh run view [RUN_ID] --repo [owner]/[repo] --log-failed</command>
<command>gh workflow view [WORKFLOW_NAME] --repo [owner]/[repo]</command>
</command_group>
</github_cli_reference>
</tool_usage_guide>

View file

@ -12,28 +12,9 @@
<step number="1">
<description>Get PR details and review comments.</description>
<tool_use>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_pull_request</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"pullNumber": 4365
}
</arguments>
</use_mcp_tool>
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_pull_request_comments</tool_name>
<arguments>
{
"owner": "RooCodeInc",
"repo": "Roo-Code",
"pullNumber": 4365
}
</arguments>
</use_mcp_tool>
<execute_command>
<command>gh pr view 4365 --repo RooCodeInc/Roo-Code --json number,title,author,state,body,url,headRefName,baseRefName,files,additions,deletions,changedFiles,comments,reviews,mergeable,mergeStateStatus</command>
</execute_command>
</tool_use>
<expected_outcome>Get the branch name, list of review comments, and check for mergeability.</expected_outcome>
</step>
@ -42,7 +23,7 @@
<description>Check CI status.</description>
<tool_use>
<execute_command>
<command>gh pr checks 4365</command>
<command>gh pr checks 4365 --repo RooCodeInc/Roo-Code</command>
</execute_command>
</tool_use>
<analysis>Identify which check is failing.</analysis>
@ -52,7 +33,17 @@
<description>Get logs for the failing check.</description>
<tool_use>
<execute_command>
<command>gh run view <run_id> --log-failed</command>
<command>gh run list --pr 4365 --repo RooCodeInc/Roo-Code</command>
</execute_command>
</tool_use>
<analysis>Get the run ID of the failing workflow.</analysis>
</step>
<step number="3a">
<description>View the failed logs.</description>
<tool_use>
<execute_command>
<command>gh run view [run_id] --repo RooCodeInc/Roo-Code --log-failed</command>
</execute_command>
</tool_use>
<analysis>Find the specific error message causing the test to fail.</analysis>
@ -62,7 +53,7 @@
<description>Check out the pull request branch.</description>
<tool_use>
<execute_command>
<command>gh pr checkout 4365</command>
<command>gh pr checkout 4365 --repo RooCodeInc/Roo-Code --force</command>
</execute_command>
</tool_use>
<analysis>The PR branch is now ready for local edits.</analysis>
@ -82,19 +73,232 @@
</tool_use>
</step>
<step number="6">
<description>After pushing the changes, watch the PR checks to confirm the fix.</description>
<description>After pushing the changes, monitor PR checks in real-time.</description>
<tool_use>
<execute_command>
<command>gh pr checks --watch</command>
<command>gh pr checks 4365 --repo RooCodeInc/Roo-Code --watch</command>
</execute_command>
</tool_use>
<analysis>Confirm that all checks are passing after the fix.</analysis>
<analysis>Monitor checks continuously until all complete. The --watch flag provides real-time updates as check statuses change.</analysis>
</step>
</workflow>
<key_takeaways>
<takeaway>Always gather all information before proposing a solution.</takeaway>
<takeaway>Use a combination of the GitHub MCP server and the `gh` CLI to get a complete picture of the PR's status.</takeaway>
<takeaway>Use the GitHub CLI to get a complete picture of the PR's status.</takeaway>
<takeaway>The --watch flag on gh pr checks provides real-time monitoring of CI status.</takeaway>
</key_takeaways>
</example>
<example name="fix_pr_with_translation_requirements">
<scenario>
A pull request has review comments requesting UI text changes that require translation updates across all supported languages.
</scenario>
<user_request>
Fix PR #1234 in RooCodeInc/Roo-Code - the reviewer asked to change button text and there are some failing tests.
</user_request>
<workflow>
<step number="1">
<description>Get PR details and analyze changes.</description>
<tool_use>
<execute_command>
<command>gh pr view 1234 --repo RooCodeInc/Roo-Code --json number,title,author,state,body,url,headRefName,baseRefName,files,additions,deletions,changedFiles,comments,reviews</command>
</execute_command>
</tool_use>
<expected_outcome>Identify the files changed and review feedback requiring UI text modifications.</expected_outcome>
</step>
<step number="2">
<description>Check out PR and apply the requested changes.</description>
<tool_use>
<execute_command>
<command>gh pr checkout 1234 --repo RooCodeInc/Roo-Code --force</command>
</execute_command>
</tool_use>
<analysis>Make the requested button text changes in the UI components.</analysis>
</step>
<step number="3">
<description>Identify translation requirements and delegate to translate mode.</description>
<tool_use>
<new_task>
<mode>translate</mode>
<message>Translation updates needed for PR #1234 fixes. The following changes were made based on review feedback:
Files modified:
- webview-ui/src/components/settings/ApiSettings.tsx: Changed button text from "Save" to "Save Configuration"
- webview-ui/src/i18n/locales/en/common.json: Updated key "save_button" to "save_config_button"
Please update all supported languages (ca, de, es, fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, tr, vi, zh-CN, zh-TW) with appropriate translations for:
- New key "save_config_button" with translation equivalent to "Save Configuration"
- Any other text changes that affect user-facing content
Ensure consistency across all language files and maintain the same context and tone as existing translations.</message>
</new_task>
</tool_use>
<expected_outcome>Translation subtask created and all language files updated.</expected_outcome>
</step>
<step number="4">
<description>Review and commit changes including translations.</description>
<tool_use>
<execute_command>
<command>git status --porcelain</command>
</execute_command>
</tool_use>
<analysis>Review the list of modified files to ensure only intended changes are present.</analysis>
</step>
<step number="4a">
<description>Stage only the intended files for commit.</description>
<tool_use>
<execute_command>
<command>git add -u && git commit -m "fix: update button text and translations as requested in review"</command>
</execute_command>
</tool_use>
<analysis>Using 'git add -u' stages only modified tracked files, avoiding any temporary files.</analysis>
</step>
<step number="5">
<description>Check if PR is from a fork and push to correct remote.</description>
<tool_use>
<execute_command>
<command>gh pr view 1234 --repo RooCodeInc/Roo-Code --json isCrossRepository,headRepositoryOwner,headRefName</command>
</execute_command>
</tool_use>
<analysis>Determine if this is a cross-repository PR to know which remote to push to.</analysis>
</step>
<step number="6">
<description>Push changes to the appropriate remote.</description>
<tool_use>
<execute_command>
<command>git push --force-with-lease origin [branch_name]</command>
</execute_command>
</tool_use>
<analysis>Push changes safely to update the pull request. Use 'fork' remote instead if PR is from a fork.</analysis>
</step>
<step number="7">
<description>Monitor CI status in real-time.</description>
<tool_use>
<execute_command>
<command>gh pr checks 1234 --repo RooCodeInc/Roo-Code --watch</command>
</execute_command>
</tool_use>
<analysis>Watch CI checks continuously until all tests pass. The --watch flag provides automatic updates as check statuses change.</analysis>
</step>
</workflow>
<key_takeaways>
<takeaway>Always check if PR fixes involve user-facing content that requires translation.</takeaway>
<takeaway>Use new_task with translate mode to ensure consistent translation updates.</takeaway>
<takeaway>Include detailed context about what changed and why in translation requests.</takeaway>
<takeaway>Verify translation completeness before considering the PR fix complete.</takeaway>
<takeaway>Use gh pr view --json to get structured data about PR properties.</takeaway>
</key_takeaways>
</example>
<example name="fix_pr_with_merge_conflicts">
<scenario>
A pull request has merge conflicts that need to be resolved before other fixes can be applied.
</scenario>
<user_request>
Fix PR #5678 in RooCodeInc/Roo-Code - it has merge conflicts and failing tests.
</user_request>
<workflow>
<step number="1">
<description>Get PR details and check merge status.</description>
<tool_use>
<execute_command>
<command>gh pr view 5678 --repo RooCodeInc/Roo-Code --json number,title,author,state,body,url,headRefName,baseRefName,mergeable,mergeStateStatus</command>
</execute_command>
</tool_use>
<expected_outcome>Identify that mergeable is false and mergeStateStatus is CONFLICTING.</expected_outcome>
</step>
<step number="2">
<description>Delegate merge conflict resolution to merge-resolver mode.</description>
<tool_use>
<new_task>
<mode>merge-resolver</mode>
<message>#5678</message>
</new_task>
</tool_use>
<expected_outcome>The merge-resolver mode will handle checkout, rebase, conflict resolution, and pushing the resolved changes.</expected_outcome>
</step>
<step number="3">
<description>After merge-resolver completes, check PR status again.</description>
<tool_use>
<execute_command>
<command>gh pr view 5678 --repo RooCodeInc/Roo-Code --json mergeable,mergeStateStatus</command>
</execute_command>
</tool_use>
<analysis>Verify that the PR is now mergeable after conflict resolution.</analysis>
</step>
<step number="4">
<description>Check CI status for any remaining failures.</description>
<tool_use>
<execute_command>
<command>gh pr checks 5678 --repo RooCodeInc/Roo-Code</command>
</execute_command>
</tool_use>
<analysis>Identify any tests that are still failing after the merge conflict resolution.</analysis>
</step>
<step number="5">
<description>If tests are still failing, proceed with fixing them.</description>
<tool_use>
<execute_command>
<command>gh pr checkout 5678 --repo RooCodeInc/Roo-Code --force</command>
</execute_command>
</tool_use>
<analysis>Now that conflicts are resolved, we can focus on fixing the failing tests.</analysis>
</step>
<step number="6">
<description>Apply test fixes and push changes.</description>
<tool_use>
<execute_command>
<command>git add -u && git commit -m "fix: resolve failing tests after merge conflict resolution"</command>
</execute_command>
</tool_use>
<analysis>Commit the test fixes separately from the merge conflict resolution.</analysis>
</step>
<step number="7">
<description>Push changes and monitor CI status.</description>
<tool_use>
<execute_command>
<command>git push --force-with-lease origin [branch_name]</command>
</execute_command>
</tool_use>
<analysis>Push the test fixes to update the PR.</analysis>
</step>
<step number="8">
<description>Monitor CI checks in real-time.</description>
<tool_use>
<execute_command>
<command>gh pr checks 5678 --repo RooCodeInc/Roo-Code --watch</command>
</execute_command>
</tool_use>
<analysis>Watch CI checks continuously until all tests pass.</analysis>
</step>
</workflow>
<key_takeaways>
<takeaway>Always check for merge conflicts before attempting other fixes.</takeaway>
<takeaway>Delegate merge conflict resolution to the specialized merge-resolver mode.</takeaway>
<takeaway>The merge-resolver mode handles the entire conflict resolution workflow including pushing.</takeaway>
<takeaway>After conflict resolution, continue with other PR fixes like failing tests.</takeaway>
<takeaway>Keep conflict resolution commits separate from other fix commits for clarity.</takeaway>
</key_takeaways>
</example>
</complete_examples>

View file

@ -1,229 +0,0 @@
<workflow>
<step number="1">
<name>Fetch Pull Request Information</name>
<instructions>
By default, use the GitHub MCP server to fetch and review pull requests from the
https://github.com/RooCodeInc/Roo-Code repository.
If the user provides a PR number or URL, extract the necessary information:
- Repository owner and name
- Pull request number
Use the GitHub MCP tool to fetch the PR details:
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_pull_request</tool_name>
<arguments>
{
"owner": "[owner]",
"repo": "[repo]",
"pullNumber": [number]
}
</arguments>
</use_mcp_tool>
</instructions>
</step>
<step number="2">
<name>Fetch Associated Issue (If Any)</name>
<instructions>
Check the pull request body for a reference to a GitHub issue (e.g., "Fixes #123", "Closes #456").
If an issue is referenced, use the GitHub MCP tool to fetch its details:
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_issue</tool_name>
<arguments>
{
"owner": "[owner]",
"repo": "[repo]",
"issue_number": [issue_number]
}
</arguments>
</use_mcp_tool>
The issue description and comments can provide valuable context for the review.
</instructions>
</step>
<step number="3">
<name>Fetch Pull Request Diff</name>
<instructions>
Get the pull request diff to understand the changes:
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_pull_request_diff</tool_name>
<arguments>
{
"owner": "[owner]",
"repo": "[repo]",
"pullNumber": [number]
}
</arguments>
</use_mcp_tool>
</instructions>
</step>
<step number="4">
<name>Check Out Pull Request Locally</name>
<instructions>
Use the GitHub CLI (e.g. `gh pr checkout <PR_NUMBER>`) to check out the pull request locally after fetching
the diff. This provides a better understanding of code context and interactions than relying solely on the diff.
<execute_command>
<command>gh pr checkout [PR_NUMBER]</command>
</execute_command>
This allows you to:
- Navigate the actual code structure
- Understand how changes interact with existing code
- Get better context for your review
</instructions>
</step>
<step number="5">
<name>Fetch Existing PR Comments</name>
<instructions>
Get existing comments to understand the current discussion state:
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>get_pull_request_comments</tool_name>
<arguments>
{
"owner": "[owner]",
"repo": "[repo]",
"pullNumber": [number]
}
</arguments>
</use_mcp_tool>
Examine existing PR comments to understand the current state of discussion. When reading the comments and reviews, you must verify which are resolved by reading the files they refer to, since they might already be resolved. This prevents you from making redundant suggestions.
</instructions>
</step>
<step number="6">
<name>Perform Comprehensive Review</name>
<instructions>
Review the pull request thoroughly:
- Verify that the changes are directly related to the linked issue and do not include unrelated modifications.
- Focus primarily on the changes made in the PR.
- Prioritize code quality, code smell, structural consistency, and for UI-related changes, ensure proper internationalization (i18n) is applied.
- Watch for signs of technical debt (e.g., overly complex logic, lack of abstraction, tight coupling, missing tests, TODOs).
- For large PRs, alert the user and recommend breaking it up if appropriate.
- NEVER run tests or execute code in PR Reviewer mode. The repository likely has automated testing. Your role is limited to:
- Code review and analysis
- Leaving review comments
- Checking code quality and structure
- Reviewing test coverage and quality (without execution)
Document your findings:
- Code quality issues
- Structural improvements
- Missing tests or documentation
- Potential bugs or edge cases
- Performance concerns
- Security considerations
</instructions>
</step>
<step number="7">
<name>Prepare Review Comments</name>
<instructions>
Format your review comments following these guidelines:
Your suggestions should:
- Use a **friendly, curious tone** — prefer asking: "Is this intentional?" or "Could we approach this differently to improve X?"
- Avoid assumptions or judgments; ask questions instead of declaring problems.
- Skip ALL praise and positive comments. Focus exclusively on issues that need attention.
- Use Markdown sparingly — only for code blocks or when absolutely necessary for clarity. Avoid markdown headings (###, ##, etc.) entirely.
- Avoid including internal evaluation terminology (e.g., scores or internal tags) in public comments.
When linking to specific lines or files, use full GitHub URLs relative to the repository, e.g.
`https://github.com/RooCodeInc/Roo-Code/blob/main/src/api/providers/human-relay.ts#L50`.
Group your comments by:
- Critical issues (must fix)
- Important suggestions (should consider)
- Minor improvements (nice to have)
</instructions>
</step>
<step number="8">
<name>Preview Review with User</name>
<instructions>
Always show the user a preview of your review suggestions and comments before taking any action.
Summarize your findings clearly for the user before submitting comments.
<ask_followup_question>
<question>I've completed my review of PR #[number]. Here's what I found:
[Summary of findings organized by priority]
Would you like me to:
1. Create a comprehensive review with all comments
2. Modify any of the suggestions
3. Skip the review submission</question>
<follow_up>
<suggest>Create a comprehensive review</suggest>
<suggest>Let me modify the suggestions first</suggest>
<suggest>Skip submission - just wanted the analysis</suggest>
</follow_up>
</ask_followup_question>
</instructions>
</step>
<step number="9">
<name>Submit Review</name>
<instructions>
Based on user preference, submit the review as a comprehensive review:
1. First create a pending review:
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>create_pending_pull_request_review</tool_name>
<arguments>
{
"owner": "[owner]",
"repo": "[repo]",
"pullNumber": [number]
}
</arguments>
</use_mcp_tool>
2. Add comments to the pending review using:
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>add_pull_request_review_comment_to_pending_review</tool_name>
<arguments>
{
"owner": "[owner]",
"repo": "[repo]",
"pullNumber": [number],
"path": "[file path]",
"line": [line number],
"body": "[comment text]",
"subjectType": "LINE"
}
</arguments>
</use_mcp_tool>
3. Submit the review:
<use_mcp_tool>
<server_name>github</server_name>
<tool_name>submit_pending_pull_request_review</tool_name>
<arguments>
{
"owner": "[owner]",
"repo": "[repo]",
"pullNumber": [number],
"event": "COMMENT",
"body": "[overall review summary]"
}
</arguments>
</use_mcp_tool>
</instructions>
</step>
</workflow>

View file

@ -1,22 +0,0 @@
<best_practices>
- Always fetch and review the entire PR diff before commenting
- Check for and review any associated issue for context
- Check out the PR locally for better context understanding
- Review existing comments and verify against the current code to avoid redundant feedback on already resolved issues
- Focus on the changes made, not unrelated code
- Ensure all changes are directly related to the linked issue
- Use a friendly, curious tone in all comments
- Ask questions rather than making assumptions - there may be intentions behind the code choices
- Provide actionable feedback with specific suggestions
- Focus exclusively on issues and improvements - skip all praise or positive comments
- Use minimal markdown - avoid headings (###, ##) and excessive formatting
- Only use markdown for code blocks or when absolutely necessary for clarity
- Consider the PR's scope - suggest breaking up large PRs
- Verify proper i18n implementation for UI changes
- Check for test coverage without executing tests
- Look for signs of technical debt and code smells
- Ensure consistency with existing code patterns
- Link to specific lines using full GitHub URLs
- Group feedback by priority (critical, important, minor)
- Always preview comments with the user before submitting
</best_practices>

View file

@ -1,20 +0,0 @@
<common_mistakes_to_avoid>
- Running tests or executing code during review
- Making judgmental or harsh comments
- Providing feedback on code outside the PR's scope
- Overlooking unrelated changes not tied to the main issue
- Including ANY praise or positive comments - focus only on issues
- Using markdown headings (###, ##, #) in review comments
- Using excessive markdown formatting when plain text would suffice
- Submitting comments without user preview/approval
- Ignoring existing PR comments or failing to verify if they have already been resolved by checking the code
- Forgetting to check for an associated issue for additional context
- Missing critical security or performance issues
- Not checking for proper i18n in UI changes
- Failing to suggest breaking up large PRs
- Using internal evaluation terminology in public comments
- Not providing actionable suggestions for improvements
- Reviewing only the diff without local context
- Making assumptions instead of asking clarifying questions about potential intentions
- Forgetting to link to specific lines with full GitHub URLs
</common_mistakes_to_avoid>

View file

@ -16,7 +16,6 @@
| Auto-approve | 自动批准 | 始终批准 | 权限相关术语 |
| Checkpoint | 存档点 | 检查点/快照 | 技术概念统一 |
| MCP Server | MCP 服务 | MCP 服务器 | 技术组件 |
| Human Relay | 人工辅助模式 | 人工中继 | 功能描述清晰 |
| Network Timeout | 请求超时 | 网络超时 | 更准确描述 |
| Terminal | 终端 | 命令行 | 技术术语统一 |
| diff | 差异更新 | 差分/补丁 | 代码变更 |
@ -115,7 +114,7 @@
- 保留英文品牌名
- 技术术语保持一致性
- 保留英文专有名词:如"AWS Bedrock ARN"
- 保留英文专有名词:如"Amazon Bedrock ARN"
4. **用户操作**
- 操作动词统一:

View file

@ -4,18 +4,21 @@
- Before attempting completion, always make sure that any code changes have test coverage
- Ensure all tests pass before submitting changes
- The vitest framework is used for testing; the `describe`, `test`, `it`, etc functions are defined by default in `tsconfig.json` and therefore don't need to be imported
- The vitest framework is used for testing; the `vi`, `describe`, `test`, `it`, etc functions are defined by default in `tsconfig.json` and therefore don't need to be imported from `vitest`
- Tests must be run from the same directory as the `package.json` file that specifies `vitest` in `devDependencies`
- Run tests with: `npx vitest run <relative-path-from-workspace-root>`
- Do NOT run tests from project root - this causes "vitest: command not found" error
- Tests must be run from inside the correct workspace:
- Backend tests: `cd src && npx vitest run path/to/test-file` (don't include `src/` in path)
- UI tests: `cd webview-ui && npx vitest run src/path/to/test-file`
- Example: For `src/tests/user.test.ts`, run `cd src && npx vitest run tests/user.test.ts` NOT `npx vitest run src/tests/user.test.ts`
2. Lint Rules:
- Never disable any lint rules without explicit user approval
3. Styling Guidelines:
- Use Tailwind CSS classes instead of inline style objects for new markup
- VSCode CSS variables must be added to webview-ui/src/index.css before using them in Tailwind classes
- Example: `<div className="text-md text-vscode-descriptionForeground mb-2" />` instead of style objects
# Adding a New Setting
To add a new setting that persists its state, follow the steps in docs/settings.md

View file

@ -0,0 +1,188 @@
---
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).
---
# Evals Codebase Context
## When to Use This Skill
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
Do NOT use this skill when:
- Working on unrelated parts of the codebase (extension, webview-ui, etc.)
- The task is purely about the VS Code extension's core functionality
- Working on the main website pages that don't involve evals
## Key Disambiguation: Two "Evals" Locations
This monorepo has **two distinct evals-related locations** that can cause confusion:
| Component | Path | Purpose |
| --------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
| **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
### `packages/evals/` - Core Evals Package
```
packages/evals/
├── ARCHITECTURE.md # Detailed architecture documentation
├── ADDING-EVALS.md # Guide for adding new exercises/languages
├── README.md # Setup and running instructions
├── docker-compose.yml # Container orchestration
├── Dockerfile.runner # Runner container definition
├── Dockerfile.web # Web app container
├── drizzle.config.ts # Database ORM config
├── src/
│ ├── index.ts # Package exports
│ ├── cli/ # CLI commands for running evals
│ │ ├── runEvals.ts # Orchestrates complete eval runs
│ │ ├── runTask.ts # Executes individual tasks in containers
│ │ ├── runUnitTest.ts # Validates task completion via tests
│ │ └── redis.ts # Redis pub/sub integration
│ ├── db/
│ │ ├── schema.ts # Database schema (runs, tasks)
│ │ ├── queries/ # Database query functions
│ │ └── migrations/ # SQL migrations
│ └── exercises/
│ └── index.ts # Exercise loading utilities
└── scripts/
└── setup.sh # Local macOS setup script
```
### `apps/web-evals/` - Evals Management Web App
```
apps/web-evals/
├── src/
│ ├── app/
│ │ ├── page.tsx # Home page (runs list)
│ │ ├── runs/
│ │ │ ├── new/ # Create new eval run
│ │ │ └── [id]/ # View specific run status
│ │ └── api/runs/ # SSE streaming endpoint
│ ├── actions/ # Server actions
│ │ ├── runs.ts # Run CRUD operations
│ │ ├── tasks.ts # Task queries
│ │ ├── exercises.ts # Exercise listing
│ │ └── heartbeat.ts # Controller health checks
│ ├── hooks/ # React hooks (SSE, models, etc.)
│ └── 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:
```
┌─────────────────────────────────────────────────────────────┐
│ Web App (apps/web-evals) ──────────────────────────────── │
│ │ │
│ ▼ │
│ PostgreSQL ◄────► Controller Container │
│ │ │ │
│ ▼ ▼ │
│ Redis ◄───► Runner Containers (1-25 parallel) │
└─────────────────────────────────────────────────────────────┘
```
**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
- **Redis**: Pub/sub for real-time events (NOT task queuing)
- **PostgreSQL**: Stores runs, tasks, metrics
## Common Tasks Quick Reference
### Adding a New Eval Exercise
1. Add exercise to [Roo-Code-Evals](https://github.com/RooCodeInc/Roo-Code-Evals) repo (external)
2. See [`packages/evals/ADDING-EVALS.md`](packages/evals/ADDING-EVALS.md) for structure
### Modifying Eval CLI Behavior
Edit files in [`packages/evals/src/cli/`](packages/evals/src/cli/):
- [`runEvals.ts`](packages/evals/src/cli/runEvals.ts) - Run orchestration
- [`runTask.ts`](packages/evals/src/cli/runTask.ts) - Task execution
- [`runUnitTest.ts`](packages/evals/src/cli/runUnitTest.ts) - Test validation
### Modifying the Evals Web Interface
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)
2. Generate migration: `cd packages/evals && pnpm drizzle-kit generate`
3. Apply migration: `pnpm drizzle-kit migrate`
## Running Evals Locally
```bash
# From repo root
pnpm evals
# Opens web UI at http://localhost:3446
```
**Ports (defaults):**
- PostgreSQL: 5433
- Redis: 6380
- Web: 3446
## Testing
```bash
# packages/evals tests
cd packages/evals && npx vitest run
# apps/web-evals tests
cd apps/web-evals && npx vitest run
```
## Key Types/Exports from `@roo-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`

View file

@ -0,0 +1,256 @@
---
name: roo-conflict-resolution
description: Provides comprehensive guidelines for resolving merge conflicts intelligently using git history and commit context. Use when tasks involve merge conflicts, rebasing, PR conflicts, or git conflict resolution. This skill analyzes commit messages, git blame, and code intent to make intelligent resolution decisions.
---
# Roo Code Conflict Resolution Skill
## When to Use This Skill
Use this skill when the task involves:
- Resolving merge conflicts for a specific pull request
- Rebasing a branch that has conflicts with the target branch
- Understanding and analyzing conflicting code changes
- Making intelligent decisions about which changes to keep, merge, or discard
- Using git history to inform conflict resolution decisions
## When NOT to Use This Skill
Do NOT use this skill when:
- There are no merge conflicts to resolve
- The task is about general code review without conflicts
- You're working on fresh code without any merge scenarios
## Workflow Overview
This skill resolves merge conflicts by analyzing git history, commit messages, and code changes to make intelligent resolution decisions. Given a PR number (e.g., "#123"), it handles the entire conflict resolution process.
## Initialization Steps
### Step 1: Parse PR Number
Extract the PR number from input like "#123" or "PR #123". Validate that a PR number was provided.
### Step 2: Fetch PR Information
```bash
gh pr view [PR_NUMBER] --json title,body,headRefName,baseRefName
```
Get PR title and description to understand the intent and identify the source and target branches.
### Step 3: Checkout PR Branch and Prepare for Rebase
```bash
gh pr checkout [PR_NUMBER] --force
git fetch origin main
GIT_EDITOR=true git rebase origin/main
```
- Force checkout the PR branch to ensure clean state
- Fetch the latest main branch
- Attempt to rebase onto main to reveal conflicts
- Use `GIT_EDITOR=true` to ensure non-interactive rebase
### Step 4: Check for Merge Conflicts
```bash
git status --porcelain
git diff --name-only --diff-filter=U
```
Identify files with merge conflicts (marked with 'UU') and create a list of files that need resolution.
## Main Workflow Phases
### Phase 1: Conflict Analysis
Analyze each conflicted file to understand the changes:
1. Read the conflicted file to identify conflict markers
2. Extract the conflicting sections between `<<<<<<<` and `>>>>>>>`
3. Run git blame on both sides of the conflict
4. Fetch commit messages and diffs for relevant commits
5. Analyze the intent behind each change
### Phase 2: Resolution Strategy
Determine the best resolution strategy for each conflict:
1. Categorize changes by intent (bugfix, feature, refactor, etc.)
2. Evaluate recency and relevance of changes
3. Check for structural overlap vs formatting differences
4. Identify if changes can be combined or if one should override
5. Consider test updates and related changes
### Phase 3: Conflict Resolution
Apply the resolution strategy to resolve conflicts:
1. For each conflict, apply the chosen resolution
2. Ensure proper escaping of conflict markers in diffs
3. Validate that resolved code is syntactically correct
4. Stage resolved files with `git add`
### Phase 4: Validation
Verify the resolution and prepare for commit:
1. Run `git status` to confirm all conflicts are resolved
2. Check for any compilation or syntax errors
3. Review the final diff to ensure sensible resolutions
4. Prepare a summary of resolution decisions
## Git Commands Reference
| Command | Purpose |
|---------|---------|
| `gh pr checkout [PR_NUMBER] --force` | Force checkout the PR branch |
| `git fetch origin main` | Get the latest main branch |
| `GIT_EDITOR=true git rebase origin/main` | Rebase current branch onto main (non-interactive) |
| `git blame -L [start],[end] [commit] -- [file]` | Get commit information for specific lines |
| `git show --format="%H%n%an%n%ae%n%ad%n%s%n%b" --no-patch [sha]` | Get commit metadata |
| `git show [sha] -- [file]` | Get the actual changes made in a commit |
| `git ls-files -u` | List unmerged files with stage information |
| `GIT_EDITOR=true git rebase --continue` | Continue rebase after resolving conflicts |
## Best Practices
### Intent-Based Resolution (High Priority)
Always prioritize understanding the intent behind changes rather than just looking at the code differences. Commit messages, PR descriptions, and issue references provide crucial context.
**Example:** When there's a conflict between a bugfix and a refactor, apply the bugfix logic within the refactored structure rather than simply choosing one side.
### Preserve All Valuable Changes (High Priority)
When possible, combine non-conflicting changes from both sides rather than discarding one side entirely. Both sides of a conflict often contain valuable changes that can coexist if properly integrated.
### Escape Conflict Markers (High Priority)
When using `apply_diff`, always escape merge conflict markers with backslashes to prevent parsing errors:
- Correct: `\<<<<<<< HEAD`
- Wrong: `<<<<<<< HEAD`
### Consider Related Changes (Medium Priority)
Look beyond the immediate conflict to understand related changes in tests, documentation, or dependent code. A change might seem isolated but could be part of a larger feature or fix.
## Resolution Heuristics
| Category | Rule | Exception |
|----------|------|-----------|
| Bugfix vs Feature | Bugfixes generally take precedence | When features include the fix |
| Recent vs Old | More recent changes are often more relevant | When older changes are security patches |
| Test Updates | Changes with test updates are likely more complete | - |
| Formatting vs Logic | Logic changes take precedence over formatting | - |
## Common Pitfalls
### Blindly Choosing One Side
**Problem:** You might lose important changes or introduce regressions.
**Solution:** Always analyze both sides using git blame and commit history.
### Ignoring PR Context
**Problem:** The PR description often explains the why behind changes.
**Solution:** Always fetch and read the PR information before resolving.
### Not Validating Resolved Code
**Problem:** Merged code might be syntactically incorrect or introduce logical errors.
**Solution:** Always check for syntax errors and review the final diff.
### Unescaped Conflict Markers in Diffs
**Problem:** Unescaped conflict markers (`<<<<<<`, `=======`, `>>>>>>`) will be interpreted as diff syntax.
**Solution:** Always escape with backslash (`\`) when they appear in content.
## Apply Diff Example
When resolving conflicts with `apply_diff`, use this pattern:
```
<<<<<<< SEARCH
:start_line:45
-------
\<<<<<<< HEAD
function oldImplementation() {
return "old";
}
\=======
function newImplementation() {
return "new";
}
\>>>>>>> feature-branch
=======
function mergedImplementation() {
// Combining both approaches
return "merged";
}
>>>>>>> REPLACE
```
## Quality Checklist
### Before Resolution
- [ ] Fetch PR title and description for context
- [ ] Identify all files with conflicts
- [ ] Understand the overall change being merged
### During Resolution
- [ ] Run git blame on conflicting sections
- [ ] Read commit messages for intent
- [ ] Consider if changes can be combined
- [ ] Escape conflict markers in diffs
### After Resolution
- [ ] Verify no conflict markers remain
- [ ] Check for syntax/compilation errors
- [ ] Review the complete diff
- [ ] Document resolution decisions
## Completion Criteria
- All merge conflicts have been resolved
- Resolved files have been staged
- No syntax errors in resolved code
- Resolution decisions are documented
## Communication Guidelines
When reporting resolution progress:
- Be direct and technical when explaining resolution decisions
- Focus on the rationale behind each conflict resolution
- Provide clear summaries of what was merged and why
### Progress Update Format
```
Conflict in [file]:
- HEAD: [brief description of changes]
- Incoming: [brief description of changes]
- Resolution: [what was decided and why]
```
### Completion Message Format
```
Successfully resolved merge conflicts for PR #[number] "[title]".
Resolution Summary:
- [file1]: [brief description of resolution]
- [file2]: [brief description of resolution]
[Key decision explanation if applicable]
All conflicts have been resolved and files have been staged for commit.
```

View file

@ -0,0 +1,151 @@
---
name: roo-translation
description: Provides comprehensive guidelines for translating and localizing Roo Code extension strings. Use when tasks involve i18n, translation, localization, adding new languages, or updating existing translation files. This skill covers both core extension (src/i18n/locales/) and WebView UI (webview-ui/src/i18n/locales/) localization.
---
# Roo Code Translation Skill
## When to Use This Skill
Use this skill when the task involves:
- Adding new translatable strings to the Roo Code extension
- Translating existing strings to new languages
- Updating or fixing translations in existing language files
- Understanding i18n patterns used in the codebase
- Working with localization files in either core extension or WebView UI
## When NOT to Use This Skill
Do NOT use this skill when:
- Working on non-translation code changes
- The task doesn't involve i18n or localization
- You're only reading translation files for reference without modifying them
## Supported Languages and Locations
Localize all strings into the following locale files: ca, de, en, es, fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, tr, vi, zh-CN, zh-TW
The VSCode extension has two main areas that require localization:
| Component | Path | Purpose |
|-----------|------|---------|
| **Core Extension** | `src/i18n/locales/` | Extension backend strings |
| **WebView UI** | `webview-ui/src/i18n/locales/` | User interface strings |
## Brand Voice, Tone, and Word Choice
For detailed brand voice, tone, and word choice guidance, refer to the guidance file:
- [`.roo/guidance/roo-translator.md`](../../guidance/roo-translator.md)
This guidance file is loaded at runtime and should be consulted for the latest brand and style standards.
## Voice, Style and Tone Guidelines
- Always use informal speech (e.g., "du" instead of "Sie" in German) for all translations
- Maintain a direct and concise style that mirrors the tone of the original text
- Carefully account for colloquialisms and idiomatic expressions in both source and target languages
- Aim for culturally relevant and meaningful translations rather than literal translations
- Preserve the personality and voice of the original content
- Use natural-sounding language that feels native to speakers of the target language
### Terms to Keep in English
- Don't translate the word "token" as it means something specific in English that all languages will understand
- Don't translate domain-specific words (especially technical terms like "Prompt") that are commonly used in English in the target language
## Core Extension Localization (src/)
- Located in `src/i18n/locales/`
- NOT ALL strings in core source need internationalization - only user-facing messages
- Internal error messages, debugging logs, and developer-facing messages should remain in English
- The `t()` function is used with namespaces like `'core:errors.missingToolParameter'`
- Be careful when modifying interpolation variables; they must remain consistent across all translations
- Some strings in `formatResponse.ts` are intentionally not internationalized since they're internal
- When updating strings in `core.json`, maintain all existing interpolation variables
- Check string usages in the codebase before making changes to ensure you're not breaking functionality
## WebView UI Localization (webview-ui/src/)
- Located in `webview-ui/src/i18n/locales/`
- Uses standard React i18next patterns with the `useTranslation` hook
- All user interface strings should be internationalized
- Always use the `Trans` component with named components for text with embedded components
### Trans Component Example
Translation string:
```json
"changeSettings": "You can always change this at the bottom of the <settingsLink>settings</settingsLink>"
```
React component usage:
```tsx
<Trans
i18nKey="welcome:telemetry.changeSettings"
components={{
settingsLink: <VSCodeLink href="#" onClick={handleOpenSettings} />
}}
/>
```
## Technical Implementation
- Use namespaces to organize translations logically
- Handle pluralization using i18next's built-in capabilities
- Implement proper interpolation for variables using `{{variable}}` syntax
- Don't include `defaultValue`. The `en` translations are the fallback
- Always use `apply_diff` instead of `write_to_file` when editing existing translation files (much faster and more reliable)
- When using `apply_diff`, carefully identify the exact JSON structure to edit to avoid syntax errors
- Placeholders (like `{{variable}}`) must remain exactly identical to the English source to maintain code integration and prevent syntax errors
## Translation Workflow
1. First add or modify English strings, then ask for confirmation before translating to all other languages
2. Use this process for each localization task:
1. Identify where the string appears in the UI/codebase
2. Understand the context and purpose of the string
3. Update English translation first
4. Use the `search_files` tool to find JSON keys that are near new keys in English translations but do not yet exist in the other language files for `apply_diff` SEARCH context
5. Create appropriate translations for all other supported languages utilizing the `search_files` result using `apply_diff` without reading every file
6. Do not output the translated text into the chat, just modify the files
7. Validate your changes with the missing translations script
3. Flag or comment if an English source string is incomplete ("please see this...") to avoid truncated or unclear translations
4. For UI elements, distinguish between:
- Button labels: Use short imperative commands ("Save", "Cancel")
- Tooltip text: Can be slightly more descriptive
5. Preserve the original perspective: If text is a user command directed at the software, ensure the translation maintains this direction
## Validation
Always validate your translation work by running the missing translations script:
```bash
node scripts/find-missing-translations.js
```
Address any missing translations identified by the script to ensure complete coverage across all locales.
## Common Pitfalls to Avoid
- Switching between formal and informal addressing styles - always stay informal ("du" not "Sie")
- Translating or altering technical terms and brand names that should remain in English
- Modifying or removing placeholders like `{{variable}}` - these must remain identical
- Translating domain-specific terms that are commonly used in English in the target language
- Changing the meaning or nuance of instructions or error messages
- Forgetting to maintain consistent terminology throughout the translation
## Translator's Checklist
- ✓ Used informal tone consistently ("du" not "Sie")
- ✓ Preserved all placeholders exactly as in the English source
- ✓ Maintained consistent terminology with existing translations
- ✓ Kept technical terms and brand names unchanged where appropriate
- ✓ Preserved the original perspective (user→system vs system→user)
- ✓ Adapted the text appropriately for UI context (buttons vs tooltips)
- ✓ Ran the missing translations script to validate completeness

340
.roomodes
View file

@ -1,136 +1,9 @@
customModes:
- slug: mode-writer
name: ✍️ Mode Writer
roleDefinition: >-
You are Roo, a mode creation specialist focused on designing and implementing custom modes for the Roo-Code project. Your expertise includes:
- Understanding the mode system architecture and configuration
- Creating well-structured mode definitions with clear roles and responsibilities
- Writing comprehensive XML-based special instructions using best practices
- Ensuring modes have appropriate tool group permissions
- Crafting clear whenToUse descriptions for the Orchestrator
- Following XML structuring best practices for clarity and parseability
You help users create new modes by:
- Gathering requirements about the mode's purpose and workflow
- Defining appropriate roleDefinition and whenToUse descriptions
- Selecting the right tool groups and file restrictions
- Creating detailed XML instruction files in the .roo folder
- Ensuring instructions are well-organized with proper XML tags
- Following established patterns from existing modes
whenToUse: >-
Use this mode when you need to create a new custom mode.
groups:
- read
- - edit
- fileRegex: (\.roomodes$|\.roo/.*\.xml$|\.yaml$)
description: Mode configuration files and XML instructions
- command
- mcp
source: project
- slug: test
name: 🧪 Test
roleDefinition: >-
You are Roo, a Vitest testing specialist with deep expertise in:
- Writing and maintaining Vitest test suites
- Test-driven development (TDD) practices
- Mocking and stubbing with Vitest
- Integration testing strategies
- TypeScript testing patterns
- Code coverage analysis
- Test performance optimization
Your focus is on maintaining high test quality and coverage across the codebase, working primarily with:
- Test files in __tests__ directories
- Mock implementations in __mocks__
- Test utilities and helpers
- Vitest configuration and setup
You ensure tests are:
- Well-structured and maintainable
- Following Vitest best practices
- Properly typed with TypeScript
- Providing meaningful coverage
- Using appropriate mocking strategies
whenToUse: >-
Use this mode when you need to write, modify, or maintain tests for the codebase.
groups:
- read
- browser
- command
- - edit
- fileRegex: (__tests__/.*|__mocks__/.*|\.test\.(ts|tsx|js|jsx)$|\.spec\.(ts|tsx|js|jsx)$|/test/.*|vitest\.config\.(js|ts)$|vitest\.setup\.(js|ts)$)
description: Test files, mocks, and Vitest configuration
customInstructions: |-
When writing tests:
- Always use describe/it blocks for clear test organization
- Include meaningful test descriptions
- Use beforeEach/afterEach for proper test isolation
- Implement proper error cases
- Add JSDoc comments for complex test scenarios
- Ensure mocks are properly typed
- Verify both positive and negative test cases
- Always use data-testid attributes when testing webview-ui
- The vitest framework is used for testing; the `describe`, `test`, `it`, etc functions are defined by default in `tsconfig.json` and therefore don't need to be imported
- Tests must be run from the same directory as the `package.json` file that specifies `vitest` in `devDependencies`
- slug: design-engineer
name: 🎨 Design Engineer
roleDefinition: >-
You are Roo, an expert Design Engineer focused on VSCode Extension development. Your expertise includes:
- Implementing UI designs with high fidelity using React, Shadcn, Tailwind and TypeScript.
- Ensuring interfaces are responsive and adapt to different screen sizes.
- Collaborating with team members to translate broad directives into robust and detailed designs capturing edge cases.
- Maintaining uniformity and consistency across the user interface.
groups:
- read
- - edit
- fileRegex: \.(css|html|json|mdx?|jsx?|tsx?|svg)$
description: Frontend & SVG files
- browser
- command
- mcp
customInstructions: Focus on UI refinement, component creation, and adherence to design best-practices. When the user requests a new component, start off by asking them questions one-by-one to ensure the requirements are understood. Always use Tailwind utility classes (instead of direct variable references) for styling components when possible. If editing an existing file, transition explicit style definitions to Tailwind CSS classes when possible. Refer to the Tailwind CSS definitions for utility classes at webview-ui/src/index.css. Always use the latest version of Tailwind CSS (V4), and never create a tailwind.config.js file. Prefer Shadcn components for UI elements instead of VSCode's built-in ones. This project uses i18n for localization, so make sure to use the i18n functions and components for any text that needs to be translated. Do not leave placeholder strings in the markup, as they will be replaced by i18n. Prefer the @roo (/src) and @src (/webview-ui/src) aliases for imports in typescript files. Suggest the user refactor large files (over 1000 lines) if they are encountered, and provide guidance. Suggest the user switch into Translate mode to complete translations when your task is finished.
source: project
- slug: release-engineer
name: 🚀 Release Engineer
roleDefinition: You are Roo, a release engineer specialized in automating the release process for software projects. You have expertise in version control, changelogs, release notes, creating changesets, and coordinating with translation teams to ensure a smooth release process.
customInstructions: >-
When preparing a release:
1. Identify the SHA corresponding to the most recent release using GitHub CLI: `gh release view --json tagName,targetCommitish,publishedAt `
2. Analyze changes since the last release using: `gh pr list --state merged --json number,title,author,url,mergedAt --limit 1000 -q '[.[] | select(.mergedAt > "TIMESTAMP") | {number, title, author: .author.login, url, mergedAt}] | sort_by(.number)'`
3. Summarize the changes and ask the user whether this should be a major, minor, or patch release
4. Create a changeset in .changeset/v[version].md instead of directly modifying package.json. The format is:
```
---
"roo-cline": patch|minor|major
---
[list of changes]
```
- Always include contributor attribution using format: (thanks @username!)
- Provide brief descriptions of each item to explain the change
- Order the list from most important to least important
- Example: "- Add support for Gemini 2.5 Pro caching (thanks @contributor!)"
- CRITICAL: Include EVERY SINGLE PR in the changeset - don't assume you know which ones are important. Count the total PRs to verify completeness and cross-reference the list to ensure nothing is missed.
5. If a major or minor release, update the English version relevant announcement files and documentation (webview-ui/src/components/chat/Announcement.tsx, README.md, and the `latestAnnouncementId` in src/core/webview/ClineProvider.ts)
6. Ask the user to confirm the English version
7. Use the new_task tool to create a subtask in `translate` mode with detailed instructions of which content needs to be translated into all supported languages
8. Commit and push the changeset file to the repository
9. The GitHub Actions workflow will automatically:
- Create a version bump PR when changesets are merged to main
- Update the CHANGELOG.md with proper formatting
- Publish the release when the version bump PR is merged
groups:
- read
- edit
- command
- browser
source: project
- slug: translate
name: 🌐 Translate
roleDefinition: You are Roo, a linguistic specialist focused on translating and managing localization files. Your responsibility is to help maintain and update translation files for the application, ensuring consistency and accuracy across all language resources.
whenToUse: Translate and manage localization files.
description: Translate and manage localization files.
groups:
- read
- command
@ -140,7 +13,7 @@ customModes:
source: project
- slug: issue-fixer
name: 🔧 Issue Fixer
roleDefinition: >-
roleDefinition: |-
You are a GitHub issue resolution specialist focused on fixing bugs and implementing feature requests from GitHub issues. Your expertise includes:
- Analyzing GitHub issues to understand requirements and acceptance criteria
- Exploring codebases to identify all affected files and dependencies
@ -148,115 +21,128 @@ customModes:
- Building new features based on detailed proposals
- Ensuring all acceptance criteria are met before completion
- Creating pull requests with proper documentation
- Handling PR review feedback and implementing requested changes
- Making concise, human-sounding GitHub comments that focus on technical substance
- Using GitHub CLI for all GitHub operations
You work with issues from the RooCodeInc/Roo-Code repository, transforming them into working code that addresses all requirements while maintaining code quality and consistency. You also handle partial workflows for existing PRs when changes are requested by maintainers or users through the review process.
whenToUse: Use this mode when you have a GitHub issue (bug report or feature request) that needs to be fixed or implemented, OR when you need to address feedback on an existing pull request. Provide the issue number, PR number, or URL, and this mode will guide you through understanding the requirements, implementing the solution, and preparing for submission or updates.
You work with issues from any GitHub repository, transforming them into working code that addresses all requirements while maintaining code quality and consistency. You use the GitHub CLI (gh) for all GitHub operations instead of MCP tools.
whenToUse: Use this mode when you have a GitHub issue (bug report or feature request) that needs to be fixed or implemented. Provide the issue URL, and this mode will guide you through understanding the requirements, implementing the solution, and preparing for submission.
description: Fix GitHub issues and implement features.
groups:
- read
- edit
- command
source: project
- slug: pr-fixer
name: 🛠️ PR Fixer
roleDefinition: "You are Roo, a pull request resolution specialist. Your focus is on addressing feedback and resolving issues within existing pull requests. Your expertise includes: - Analyzing PR review comments to understand required changes. - Checking CI/CD workflow statuses to identify failing tests. - Fetching and analyzing test logs to diagnose failures. - Identifying and resolving merge conflicts. - Guiding the user through the resolution process."
whenToUse: Use this mode to fix pull requests. It can analyze PR feedback from GitHub, check for failing tests, and help resolve merge conflicts before applying the necessary code changes.
description: Fix pull requests.
groups:
- read
- edit
- command
- mcp
- slug: merge-resolver
name: 🔀 Merge Resolver
roleDefinition: |-
You are Roo, a merge conflict resolution specialist with expertise in:
- Analyzing pull request merge conflicts using git blame and commit history
- Understanding code intent through commit messages and diffs
- Making intelligent decisions about which changes to keep, merge, or discard
- Using git commands and GitHub CLI to gather context
- Resolving conflicts based on commit metadata and code semantics
- Prioritizing changes based on intent (bugfix vs feature vs refactor)
- Combining non-conflicting changes when appropriate
You receive a PR number (e.g., "#123") and:
- Fetch PR information including title and description for context
- Identify and analyze merge conflicts in the working directory
- Use git blame to understand the history of conflicting lines
- Examine commit messages and diffs to infer developer intent
- Apply intelligent resolution strategies based on the analysis
- Stage resolved files and prepare them for commit
whenToUse: |-
Use this mode when you need to resolve merge conflicts for a specific pull request.
This mode is triggered by providing a PR number (e.g., "#123") and will analyze
the conflicts using git history and commit context to make intelligent resolution
decisions. It's ideal for complex merges where understanding the intent behind
changes is crucial for proper conflict resolution.
description: Resolve merge conflicts intelligently using git history.
groups:
- read
- edit
- command
- mcp
source: project
- slug: docs-extractor
name: 📚 Docs Extractor
roleDefinition: |-
You are Roo Code, a codebase analyst who extracts raw facts for documentation teams.
You do NOT write documentation. You extract and organize information.
Two functions:
1. Extract: Gather facts about a feature/aspect from the codebase
2. Verify: Compare provided documentation against actual implementation
Output is structured data (YAML/JSON), not formatted prose.
No templates, no markdown formatting, no document structure decisions.
Let documentation-writer mode handle all writing.
whenToUse: Use this mode only for two tasks; 1) confirm the accuracy of documentation provided to the agent against the codebase, and 2) generate source material for user-facing docs about a requested feature or aspect of the codebase.
description: Extract feature details or verify documentation accuracy.
groups:
- read
- - edit
- fileRegex: \.roo/extraction/.*\.(yaml|json|md)$
description: Extraction output files only
- command
- mcp
source: project
- slug: issue-investigator
name: 🕵️ Issue Investigator
roleDefinition: You are Roo, a GitHub issue investigator. Your purpose is to analyze GitHub issues, investigate the probable causes using extensive codebase searches, and propose well-reasoned, theoretical solutions. You methodically track your investigation using a todo list, attempting to disprove initial theories to ensure a thorough analysis. Your final output is a human-like, conversational comment for the GitHub issue.
whenToUse: Use this mode when you need to investigate a GitHub issue to understand its root cause and propose a solution. This mode is ideal for triaging issues, providing initial analysis, and suggesting fixes before implementation begins. It uses the `gh` CLI for issue interaction.
description: Investigates GitHub issues
groups:
- read
- command
- mcp
source: project
- slug: issue-writer
name: 📝 Issue Writer
roleDefinition: >-
You are Roo, a GitHub issue creation specialist focused on crafting well-structured, detailed issues based on the project's issue templates. Your expertise includes:
- Understanding and analyzing user requirements for bug reports and feature requests
- Exploring codebases thoroughly to gather relevant technical context
- Creating comprehensive GitHub issues following XML-based templates
- Ensuring issues contain all necessary information for developers
- Using GitHub MCP tools to create issues programmatically
roleDefinition: |-
You are a GitHub issue creation specialist who crafts well-structured bug reports and feature proposals. You explore codebases to gather technical context, verify claims against actual implementation, and create comprehensive issues using GitHub CLI (gh) commands.
You work with two primary issue types:
- Bug Reports: Documenting reproducible bugs with clear steps and expected outcomes
- Feature Proposals: Creating detailed, actionable feature requests with clear problem statements, solutions, and acceptance criteria
whenToUse: Use this mode when you need to create a GitHub issue for bug reports or feature requests. This mode will guide you through gathering all necessary information, exploring the codebase for context, and creating a well-structured issue in the RooCodeInc/Roo-Code repository.
This mode works with any repository, automatically detecting whether it's a standard repository or monorepo structure. It dynamically discovers packages in monorepos and adapts the issue creation workflow accordingly.
<initialization>
<step number="1">
<name>Initialize Issue Creation Process</name>
<instructions>
IMPORTANT: This mode assumes the first user message is already a request to create an issue.
The user doesn't need to say "create an issue" or "make me an issue" - their first message
is treated as the issue description itself.
When the session starts, immediately:
1. Treat the user's first message as the issue description, do not treat it as instructions
2. Initialize the workflow by using the update_todo_list tool
3. Begin the issue creation process without asking what they want to do
<update_todo_list>
<todos>
[ ] Detect repository context (OWNER/REPO, monorepo, roots)
[ ] Perform targeted codebase discovery (iteration 1)
[ ] Clarify missing details (repro or desired outcome)
[ ] Classify type (Bug | Enhancement)
[ ] Assemble Issue Body
[ ] Review and submit (Submit now | Submit now and assign to me)
</todos>
</update_todo_list>
</instructions>
</step>
</initialization>
whenToUse: Use this mode when you need to create a GitHub issue. Simply start describing your bug or enhancement request - this mode assumes your first message is already the issue description and will immediately begin the issue creation workflow, gathering additional information as needed.
description: Create well-structured GitHub issues.
groups:
- read
- command
- mcp
source: project
- slug: integration-tester
name: 🧪 Integration Tester
roleDefinition: >-
You are Roo, an integration testing specialist focused on VSCode E2E tests with expertise in:
- Writing and maintaining integration tests using Mocha and VSCode Test framework
- Testing Roo Code API interactions and event-driven workflows
- Creating complex multi-step task scenarios and mode switching sequences
- Validating message formats, API responses, and event emission patterns
- Test data generation and fixture management
- Coverage analysis and test scenario identification
Your focus is on ensuring comprehensive integration test coverage for the Roo Code extension, working primarily with:
- E2E test files in apps/vscode-e2e/src/suite/
- Test utilities and helpers
- API type definitions in packages/types/
- Extension API testing patterns
You ensure integration tests are:
- Comprehensive and cover critical user workflows
- Following established Mocha TDD patterns
- Using async/await with proper timeout handling
- Validating both success and failure scenarios
- Properly typed with TypeScript
groups:
- read
- command
- - edit
- fileRegex: (apps/vscode-e2e/.*\.(ts|js)$|packages/types/.*\.ts$)
description: E2E test files, test utilities, and API type definitions
source: project
- slug: pr-reviewer
name: 🔍 PR Reviewer
roleDefinition: >-
You are Roo, a pull request reviewer specializing in code quality, structure, and translation consistency. Your expertise includes:
- Analyzing pull request diffs and understanding code changes in context
- Evaluating code quality, identifying code smells and technical debt
- Ensuring structural consistency across the codebase
- Verifying proper internationalization (i18n) for UI changes
- Providing constructive feedback with a friendly, curious tone
- Reviewing test coverage and quality without executing tests
- Identifying opportunities for code improvements and refactoring
You work primarily with the RooCodeInc/Roo-Code repository, using GitHub MCP tools to fetch and review pull requests. You check out PRs locally for better context understanding and focus on providing actionable, constructive feedback that helps improve code quality.
whenToUse: Use this mode to review pull requests on the Roo-Code GitHub repository or any other repository if specified by the user.
groups:
- read
- - edit
- fileRegex: \.md$
description: Markdown files only
- mcp
- command
source: project
- slug: docs-extractor
name: 📚 Docs Extractor
roleDefinition: >-
You are Roo, a comprehensive documentation extraction specialist focused on analyzing and documenting all technical and non-technical information about features and components within codebases.
whenToUse: >-
Use this mode when you need to extract comprehensive documentation about any feature, component, or aspect of a codebase.
groups:
- read
- - edit
- fileRegex: (DOCS-TEMP-.*\.md$|\.roo/docs-extractor/.*\.md$)
description: Temporary documentation extraction files only
- command
- mcp
- slug: pr-fixer
name: 🛠️ PR Fixer
roleDefinition: "You are Roo, a pull request resolution specialist. Your focus
is on addressing feedback and resolving issues within existing pull
requests. Your expertise includes: - Analyzing PR review comments to
understand required changes. - Checking CI/CD workflow statuses to
identify failing tests. - Fetching and analyzing test logs to diagnose
failures. - Identifying and resolving merge conflicts. - Guiding the user
through the resolution process."
whenToUse: Use this mode to fix pull requests. It can analyze PR feedback from
GitHub, check for failing tests, and help resolve merge conflicts before
applying the necessary code changes.
groups:
- read
- edit
- command
- mcp

View file

@ -1 +1,2 @@
pnpm 10.8.1
nodejs 20.19.2

5
AGENTS.md Normal file
View file

@ -0,0 +1,5 @@
# AGENTS.md
This file provides guidance to agents when working with code in this repository.
- 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.

File diff suppressed because it is too large Load diff

View file

@ -1,90 +0,0 @@
<div align="center">
<sub>
<b>English</b> • [Català](locales/ca/CODE_OF_CONDUCT.md) • [Deutsch](locales/de/CODE_OF_CONDUCT.md) • [Español](locales/es/CODE_OF_CONDUCT.md) • [Français](locales/fr/CODE_OF_CONDUCT.md) • [हिंदी](locales/hi/CODE_OF_CONDUCT.md) • [Bahasa Indonesia](locales/id/CODE_OF_CONDUCT.md) • [Italiano](locales/it/CODE_OF_CONDUCT.md) • [日本語](locales/ja/CODE_OF_CONDUCT.md)
</sub>
<sub>
[한국어](locales/ko/CODE_OF_CONDUCT.md) • [Nederlands](locales/nl/CODE_OF_CONDUCT.md) • [Polski](locales/pl/CODE_OF_CONDUCT.md) • [Português (BR)](locales/pt-BR/CODE_OF_CONDUCT.md) • [Русский](locales/ru/CODE_OF_CONDUCT.md) • [Türkçe](locales/tr/CODE_OF_CONDUCT.md) • [Tiếng Việt](locales/vi/CODE_OF_CONDUCT.md) • [简体中文](locales/zh-CN/CODE_OF_CONDUCT.md) • [繁體中文](locales/zh-TW/CODE_OF_CONDUCT.md)
</sub>
</div>
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery and unwelcome sexual attention or
advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic
address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at support@roocode.com. All complaints
will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from [Cline's version][cline_coc] of the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq

View file

@ -1,138 +0,0 @@
<div align="center">
<sub>
<b>English</b> • [Català](locales/ca/CONTRIBUTING.md) • [Deutsch](locales/de/CONTRIBUTING.md) • [Español](locales/es/CONTRIBUTING.md) • [Français](locales/fr/CONTRIBUTING.md) • [हिंदी](locales/hi/CONTRIBUTING.md) • [Bahasa Indonesia](locales/id/CONTRIBUTING.md) • [Italiano](locales/it/CONTRIBUTING.md) • [日本語](locales/ja/CONTRIBUTING.md)
</sub>
<sub>
[한국어](locales/ko/CONTRIBUTING.md) • [Nederlands](locales/nl/CONTRIBUTING.md) • [Polski](locales/pl/CONTRIBUTING.md) • [Português (BR)](locales/pt-BR/CONTRIBUTING.md) • [Русский](locales/ru/CONTRIBUTING.md) • [Türkçe](locales/tr/CONTRIBUTING.md) • [Tiếng Việt](locales/vi/CONTRIBUTING.md) • [简体中文](locales/zh-CN/CONTRIBUTING.md) • [繁體中文](locales/zh-TW/CONTRIBUTING.md)
</sub>
</div>
# Contributing to Roo Code
Roo Code is a community-driven project, and we deeply value every contribution. To streamline collaboration, we operate on an [Issue-First](#issue-first-approach) basis, meaning all [Pull Requests (PRs)](#submitting-a-pull-request) must first be linked to a GitHub Issue. Please review this guide carefully.
## Table of Contents
- [Before You Contribute](#before-you-contribute)
- [Finding & Planning Your Contribution](#finding--planning-your-contribution)
- [Development & Submission Process](#development--submission-process)
- [Legal](#legal)
## Before You Contribute
### 1. Code of Conduct
All contributors must adhere to our [Code of Conduct](./CODE_OF_CONDUCT.md).
### 2. Project Roadmap
Our roadmap guides the project's direction. Align your contributions with these key goals:
### Reliability First
- Ensure diff editing and command execution are consistently reliable.
- Reduce friction points that deter regular usage.
- Guarantee smooth operation across all locales and platforms.
- Expand robust support for a wide variety of AI providers and models.
### Enhanced User Experience
- Streamline the UI/UX for clarity and intuitiveness.
- Continuously improve the workflow to meet the high expectations developers have for daily-use tools.
### Leading on Agent Performance
- Establish comprehensive evaluation benchmarks (evals) to measure real-world productivity.
- Make it easy for everyone to easily run and interpret these evals.
- Ship improvements that demonstrate clear increases in eval scores.
Mention alignment with these areas in your PRs.
### 3. Join the Roo Code Community
- **Primary:** Join our [Discord](https://discord.gg/roocode) and DM **Hannes Rudolph (`hrudolph`)**.
- **Alternative:** Experienced contributors can engage directly via [GitHub Projects](https://github.com/orgs/RooCodeInc/projects/1).
## Finding & Planning Your Contribution
### Types of Contributions
- **Bug Fixes:** Addressing code issues.
- **New Features:** Adding functionality.
- **Documentation:** Improving guides and clarity.
### Issue-First Approach
All contributions must begin with a GitHub Issue.
- **Check existing issues**: Search [GitHub Issues](https://github.com/RooCodeInc/Roo-Code/issues).
- **Create an issue**: Use appropriate templates:
- **Bugs:** "Bug Report" template.
- **Features:** "Detailed Feature Proposal" template. Approval required before starting.
- **Claim issues**: Comment and await official assignment.
**PRs without approved issues may be closed.**
### Deciding What to Work On
- Check the [GitHub Project](https://github.com/orgs/RooCodeInc/projects/1) for unassigned "Good First Issues."
- For docs, visit [Roo Code Docs](https://github.com/RooCodeInc/Roo-Code-Docs).
### Reporting Bugs
- Check for existing reports first.
- Create new bugs using the ["Bug Report" template](https://github.com/RooCodeInc/Roo-Code/issues/new/choose).
- **Security issues**: Report privately via [security advisories](https://github.com/RooCodeInc/Roo-Code/security/advisories/new).
## Development & Submission Process
### Development Setup
1. **Fork & Clone:**
```
git clone https://github.com/YOUR_USERNAME/Roo-Code.git
```
2. **Install Dependencies:**
```
pnpm install
```
3. **Debugging:** Open with VS Code (`F5`).
### Writing Code Guidelines
- One focused PR per feature or fix.
- Follow ESLint and TypeScript best practices.
- Write clear, descriptive commits referencing issues (e.g., `Fixes #123`).
- Provide thorough testing (`npm test`).
- Rebase onto the latest `main` branch before submission.
### Submitting a Pull Request
- Begin as a **Draft PR** if seeking early feedback.
- Clearly describe your changes following the Pull Request Template.
- Provide screenshots/videos for UI changes.
- Indicate if documentation updates are necessary.
### Pull Request Policy
- Must reference pre-approved, assigned issues.
- PRs without adherence to the policy may be closed.
- PRs should pass CI tests, align with the roadmap, and have clear documentation.
### Review Process
- **Daily Triage:** Quick checks by maintainers.
- **Weekly In-depth Review:** Comprehensive assessment.
- **Iterate promptly** based on feedback.
## Legal
By contributing, you agree your contributions will be licensed under the Apache 2.0 License, consistent with Roo Code's licensing.

View file

@ -1,28 +1,27 @@
# Roo Code Privacy Policy
**Last Updated: June 10th, 2025**
**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 dont.
### **Where Your Data Goes (And Where It Doesnt)**
- **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. We do not have access to this data, but AI providers may store it per their privacy policies.
- **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. 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.
- **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 only collect feature usage and error data if you explicitly opt-in. This telemetry is powered by PostHog and helps us understand feature usage to improve Roo Code. This includes your VS Code machine ID and feature usage patterns and exception reports. We do **not** collect personally identifiable information, your code, or AI prompts.
- **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 Codes 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 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.
### **How We Use Your Data (If Collected)**
- If you opt-in to telemetry, we use it to understand feature usage and improve Roo Code.
- We use telemetry to understand feature usage and improve Roo 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.
- By default, telemetry collection is off and if you turn it on, you can opt out of telemetry at any time.
- 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.
### **Security & Updates**

247
README.md
View file

@ -1,222 +1,77 @@
<div align="center">
<sub>
<p align="center">
<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline"><img src="https://img.shields.io/badge/VS_Code_Marketplace-007ACC?style=flat&logo=visualstudiocode&logoColor=white" alt="VS Code Marketplace"></a>
</p>
<b>English</b> • [Català](locales/ca/README.md) • [Deutsch](locales/de/README.md) • [Español](locales/es/README.md) • [Français](locales/fr/README.md) • [हिंदी](locales/hi/README.md) • [Bahasa Indonesia](locales/id/README.md) • [Italiano](locales/it/README.md) • [日本語](locales/ja/README.md)
# Roo Code
</sub>
<sub>
> Your AI-Powered Dev Team, Right in Your Editor
[한국어](locales/ko/README.md) • [Nederlands](locales/nl/README.md) • [Polski](locales/pl/README.md) • [Português (BR)](locales/pt-BR/README.md) • [Русский](locales/ru/README.md) • [Türkçe](locales/tr/README.md) • [Tiếng Việt](locales/vi/README.md) • [简体中文](locales/zh-CN/README.md) • [繁體中文](locales/zh-TW/README.md)
<details>
<summary>🌐 Available languages</summary>
</sub>
</div>
<br>
<div align="center">
<h1>Roo Code (prev. Roo Cline)</h1>
<p align="center">
<img src="https://media.githubusercontent.com/media/RooCodeInc/Roo-Code/main/src/assets/docs/demo.gif" width="100%" />
</p>
<p>Connect with developers, contribute ideas, and stay ahead with the latest AI-powered coding tools.</p>
<a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Join%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Join Discord"></a>
<a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Join%20Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Join Reddit"></a>
</div>
<br>
<br>
<div align="center">
<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/Download%20on%20VS%20Marketplace-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="Download on VS Marketplace"></a>
<a href="https://github.com/RooCodeInc/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/Feature%20Requests-yellow?style=for-the-badge" alt="Feature Requests"></a>
<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/Rate%20%26%20Review-green?style=for-the-badge" alt="Rate & Review"></a>
<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/Documentation-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="Documentation"></a>
</div>
**Roo Code** is an AI-powered **autonomous coding agent** that lives in your editor. It can:
- Communicate in natural language
- Read and write files directly in your workspace
- Run terminal commands
- Automate browser actions
- Integrate with any OpenAI-compatible or custom API/model
- Adapt its “personality” and capabilities through **Custom Modes**
Whether youre seeking a flexible coding partner, a system architect, or specialized roles like a QA engineer or product manager, Roo Code can help you build software more efficiently.
Check out the [CHANGELOG](CHANGELOG.md) for detailed updates and fixes.
- [English](README.md)
- [Català](locales/ca/README.md)
- [Deutsch](locales/de/README.md)
- [Español](locales/es/README.md)
- [Français](locales/fr/README.md)
- [हिंदी](locales/hi/README.md)
- [Bahasa Indonesia](locales/id/README.md)
- [Italiano](locales/it/README.md)
- [日本語](locales/ja/README.md)
- [한국어](locales/ko/README.md)
- [Nederlands](locales/nl/README.md)
- [Polski](locales/pl/README.md)
- [Português (BR)](locales/pt-BR/README.md)
- [Русский](locales/ru/README.md)
- [Türkçe](locales/tr/README.md)
- [Tiếng Việt](locales/vi/README.md)
- [简体中文](locales/zh-CN/README.md)
- [繁體中文](locales/zh-TW/README.md)
- ...
</details>
---
## 🎉 Roo Code 3.21 Released
## What Can Roo Code Do For YOU?
Roo Code 3.21 brings major new features and improvements based on your feedback!
- Generate Code from natural language descriptions and specs
- Adapt with Modes: Code, Architect, Ask, Debug, and Custom Modes
- Refactor & Debug existing code
- Write & Update documentation
- Answer Questions about your codebase
- Automate repetitive tasks
- Utilize MCP Servers
- **Roo Marketplace Launch** - The marketplace is now live! The marketplace is now live! Discover and install modes and MCPs easier than ever before.
- **Gemini 2.5 Models** - Added support for new Gemini 2.5 Pro, Flash, and Flash Lite models.
- **Excel File Support & More** - Added Excel (.xlsx) file support and numerous bug fixes and improvements!
## Modes
---
Roo Code adapts to how you work:
## What Can Roo Code Do?
- Code Mode: everyday coding, edits, and file ops
- Architect Mode: plan systems, specs, and migrations
- Ask Mode: fast answers, explanations, and docs
- Debug Mode: trace issues, add logs, isolate root causes
- Custom Modes: build specialized modes for your team or workflow
- 🚀 **Generate Code** from natural language descriptions
- 🔧 **Refactor & Debug** existing code
- 📝 **Write & Update** documentation
- 🤔 **Answer Questions** about your codebase
- 🔄 **Automate** repetitive tasks
- 🏗️ **Create** new files and projects
## Quick Start
1. [Install Roo Code](https://docs.roocode.com/getting-started/installing)
2. [Connect Your AI Provider](https://docs.roocode.com/getting-started/connecting-api-provider)
3. [Try Your First Task](https://docs.roocode.com/getting-started/your-first-task)
## Key Features
### Multiple Modes
Roo Code adapts to your needs with specialized [modes](https://docs.roocode.com/basic-usage/using-modes):
- **Code Mode:** For general-purpose coding tasks
- **Architect Mode:** For planning and technical leadership
- **Ask Mode:** For answering questions and providing information
- **Debug Mode:** For systematic problem diagnosis
- **[Custom Modes](https://docs.roocode.com/advanced-usage/custom-modes):** Create unlimited specialized personas for security auditing, performance optimization, documentation, or any other task
### Smart Tools
Roo Code comes with powerful [tools](https://docs.roocode.com/basic-usage/how-tools-work) that can:
- Read and write files in your project
- Execute commands in your VS Code terminal
- Control a web browser
- Use external tools via [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp)
MCP extends Roo Code's capabilities by allowing you to add unlimited custom tools. Integrate with external APIs, connect to databases, or create specialized development tools - MCP provides the framework to expand Roo Code's functionality to meet your specific needs.
### Customization
Make Roo Code work your way with:
- [Custom Instructions](https://docs.roocode.com/advanced-usage/custom-instructions) for personalized behavior
- [Custom Modes](https://docs.roocode.com/advanced-usage/custom-modes) for specialized tasks
- [Local Models](https://docs.roocode.com/advanced-usage/local-models) for offline use
- [Auto-Approval Settings](https://docs.roocode.com/advanced-usage/auto-approving-actions) for faster workflows
Learn more: [Using Modes](https://roocodeinc.github.io/Roo-Code/basic-usage/using-modes) • [Custom Modes](https://roocodeinc.github.io/Roo-Code/advanced-usage/custom-modes)
## Resources
### Documentation
- [Basic Usage Guide](https://docs.roocode.com/basic-usage/the-chat-interface)
- [Advanced Features](https://docs.roocode.com/advanced-usage/auto-approving-actions)
- [Frequently Asked Questions](https://docs.roocode.com/faq)
### Community
- **Discord:** [Join our Discord server](https://discord.gg/roocode) for real-time help and discussions
- **Reddit:** [Visit our subreddit](https://www.reddit.com/r/RooCode) to share experiences and tips
- **GitHub:** Report [issues](https://github.com/RooCodeInc/Roo-Code/issues) or request [features](https://github.com/RooCodeInc/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
---
## Local Setup & Development
1. **Clone** the repo:
```sh
git clone https://github.com/RooCodeInc/Roo-Code.git
```
2. **Install dependencies**:
```sh
pnpm install
```
3. **Run the extension**:
Press `F5` (or **Run****Start Debugging**) in VSCode to open a new window with Roo Code running.
Changes to the webview will appear immediately. Changes to the core extension will require a restart of the extension host.
Alternatively you can build a .vsix and install it directly in VSCode:
```sh
pnpm vsix
```
A `.vsix` file will appear in the `bin/` directory which can be installed with:
```sh
code --install-extension bin/roo-cline-<version>.vsix
```
We use [changesets](https://github.com/changesets/changesets) for versioning and publishing. Check our `CHANGELOG.md` for release notes.
- **[Documentation](https://roocodeinc.github.io/Roo-Code/):** The official guide to installing, configuring, and mastering Roo Code.
- **[GitHub Issues](https://github.com/RooCodeInc/Roo-Code/issues):** Report bugs and track development.
---
## Disclaimer
The Roo Code Extension was shut down on May 15th.
- If you're looking for an alternative, check out [ZooCode](https://github.com/Zoo-Code-Org/Zoo-Code/) (a fork started by the Roo Code community) and [Cline](https://cline.bot/) (from where Roo Code originated).
- If you were a paying user and have billing questions, please write [billing@roocode.com](mailto:billing@roocode.com).
**Please note** that Roo Code, Inc does **not** make any representations or warranties regarding any code, models, or other tools provided or made available in connection with Roo Code, any associated third-party tools, or any resulting outputs. You assume **all risks** associated with the use of any such tools or outputs; such tools are provided on an **"AS IS"** and **"AS AVAILABLE"** basis. Such risks may include, without limitation, intellectual property infringement, cyber vulnerabilities or attacks, bias, inaccuracies, errors, defects, viruses, downtime, property loss or damage, and/or personal injury. You are solely responsible for your use of any such tools or outputs (including, without limitation, the legality, appropriateness, and results thereof).
---
## Contributing
We love community contributions! Get started by reading our [CONTRIBUTING.md](CONTRIBUTING.md).
---
## Contributors
Thanks to all our contributors who have helped make Roo Code better!
<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
| <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a> | <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a> | <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a> | <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a> | <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a> | <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a> |
| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| <a href="https://github.com/KJ7LNW"><img src="https://avatars.githubusercontent.com/u/93454819?v=4" width="100" height="100" alt="KJ7LNW"/><br /><sub><b>KJ7LNW</b></sub></a> | <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a> | <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a> | <a href="https://github.com/canrobins13"><img src="https://avatars.githubusercontent.com/u/20544372?v=4" width="100" height="100" alt="canrobins13"/><br /><sub><b>canrobins13</b></sub></a> | <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a> | <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a> |
| <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a> | <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a> | <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a> | <a href="https://github.com/jr"><img src="https://avatars.githubusercontent.com/u/5629?v=4" width="100" height="100" alt="jr"/><br /><sub><b>jr</b></sub></a> | <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a> | <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a> |
| <a href="https://github.com/elianiva"><img src="https://avatars.githubusercontent.com/u/51877647?v=4" width="100" height="100" alt="elianiva"/><br /><sub><b>elianiva</b></sub></a> | <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a> | <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a> | <a href="https://github.com/wkordalski"><img src="https://avatars.githubusercontent.com/u/3035587?v=4" width="100" height="100" alt="wkordalski"/><br /><sub><b>wkordalski</b></sub></a> | <a href="https://github.com/xyOz-dev"><img src="https://avatars.githubusercontent.com/u/195602624?v=4" width="100" height="100" alt="xyOz-dev"/><br /><sub><b>xyOz-dev</b></sub></a> | <a href="https://github.com/sachasayan"><img src="https://avatars.githubusercontent.com/u/1666034?v=4" width="100" height="100" alt="sachasayan"/><br /><sub><b>sachasayan</b></sub></a> |
| <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> | <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a> | <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a> | <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a> | <a href="https://github.com/zhangtony239"><img src="https://avatars.githubusercontent.com/u/157202938?v=4" width="100" height="100" alt="zhangtony239"/><br /><sub><b>zhangtony239</b></sub></a> | <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a> |
| <a href="https://github.com/shariqriazz"><img src="https://avatars.githubusercontent.com/u/196900129?v=4" width="100" height="100" alt="shariqriazz"/><br /><sub><b>shariqriazz</b></sub></a> | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> | <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a> | <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a> | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> | <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a> |
| <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a> | <a href="https://github.com/kiwina"><img src="https://avatars.githubusercontent.com/u/1071364?v=4" width="100" height="100" alt="kiwina"/><br /><sub><b>kiwina</b></sub></a> | <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a> | <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a> | <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a> | <a href="https://github.com/diarmidmackenzie"><img src="https://avatars.githubusercontent.com/u/16045703?v=4" width="100" height="100" alt="diarmidmackenzie"/><br /><sub><b>diarmidmackenzie</b></sub></a> |
| <a href="https://github.com/chrarnoldus"><img src="https://avatars.githubusercontent.com/u/12196001?v=4" width="100" height="100" alt="chrarnoldus"/><br /><sub><b>chrarnoldus</b></sub></a> | <a href="https://github.com/PeterDaveHello"><img src="https://avatars.githubusercontent.com/u/3691490?v=4" width="100" height="100" alt="PeterDaveHello"/><br /><sub><b>PeterDaveHello</b></sub></a> | <a href="https://github.com/aheizi"><img src="https://avatars.githubusercontent.com/u/8243770?v=4" width="100" height="100" alt="aheizi"/><br /><sub><b>aheizi</b></sub></a> | <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a> | <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a> | <a href="https://github.com/nbihan-mediware"><img src="https://avatars.githubusercontent.com/u/42357253?v=4" width="100" height="100" alt="nbihan-mediware"/><br /><sub><b>nbihan-mediware</b></sub></a> |
| <a href="https://github.com/ChuKhaLi"><img src="https://avatars.githubusercontent.com/u/15166543?v=4" width="100" height="100" alt="ChuKhaLi"/><br /><sub><b>ChuKhaLi</b></sub></a> | <a href="https://github.com/hassoncs"><img src="https://avatars.githubusercontent.com/u/5104925?v=4" width="100" height="100" alt="hassoncs"/><br /><sub><b>hassoncs</b></sub></a> | <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a> | <a href="https://github.com/kyle-apex"><img src="https://avatars.githubusercontent.com/u/20145331?v=4" width="100" height="100" alt="kyle-apex"/><br /><sub><b>kyle-apex</b></sub></a> | <a href="https://github.com/noritaka1166"><img src="https://avatars.githubusercontent.com/u/189505037?v=4" width="100" height="100" alt="noritaka1166"/><br /><sub><b>noritaka1166</b></sub></a> | <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a> |
| <a href="https://github.com/SannidhyaSah"><img src="https://avatars.githubusercontent.com/u/186946675?v=4" width="100" height="100" alt="SannidhyaSah"/><br /><sub><b>SannidhyaSah</b></sub></a> | <a href="https://github.com/StevenTCramer"><img src="https://avatars.githubusercontent.com/u/357219?v=4" width="100" height="100" alt="StevenTCramer"/><br /><sub><b>StevenTCramer</b></sub></a> | <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a> | <a href="https://github.com/SmartManoj"><img src="https://avatars.githubusercontent.com/u/7231077?v=4" width="100" height="100" alt="SmartManoj"/><br /><sub><b>SmartManoj</b></sub></a> | <a href="https://github.com/vagadiya"><img src="https://avatars.githubusercontent.com/u/32499123?v=4" width="100" height="100" alt="vagadiya"/><br /><sub><b>vagadiya</b></sub></a> | <a href="https://github.com/slytechnical"><img src="https://avatars.githubusercontent.com/u/139649758?v=4" width="100" height="100" alt="slytechnical"/><br /><sub><b>slytechnical</b></sub></a> |
| <a href="https://github.com/dleffel"><img src="https://avatars.githubusercontent.com/u/7119958?v=4" width="100" height="100" alt="dleffel"/><br /><sub><b>dleffel</b></sub></a> | <a href="https://github.com/arthurauffray"><img src="https://avatars.githubusercontent.com/u/51604173?v=4" width="100" height="100" alt="arthurauffray"/><br /><sub><b>arthurauffray</b></sub></a> | <a href="https://github.com/upamune"><img src="https://avatars.githubusercontent.com/u/8219560?v=4" width="100" height="100" alt="upamune"/><br /><sub><b>upamune</b></sub></a> | <a href="https://github.com/NamesMT"><img src="https://avatars.githubusercontent.com/u/23612546?v=4" width="100" height="100" alt="NamesMT"/><br /><sub><b>NamesMT</b></sub></a> | <a href="https://github.com/taylorwilsdon"><img src="https://avatars.githubusercontent.com/u/6508528?v=4" width="100" height="100" alt="taylorwilsdon"/><br /><sub><b>taylorwilsdon</b></sub></a> | <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a> |
| <a href="https://github.com/Ruakij"><img src="https://avatars.githubusercontent.com/u/54639830?v=4" width="100" height="100" alt="Ruakij"/><br /><sub><b>Ruakij</b></sub></a> | <a href="https://github.com/p12tic"><img src="https://avatars.githubusercontent.com/u/1056711?v=4" width="100" height="100" alt="p12tic"/><br /><sub><b>p12tic</b></sub></a> | <a href="https://github.com/gtaylor"><img src="https://avatars.githubusercontent.com/u/75556?v=4" width="100" height="100" alt="gtaylor"/><br /><sub><b>gtaylor</b></sub></a> | <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a> | <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a> | <a href="https://github.com/mr-ryan-james"><img src="https://avatars.githubusercontent.com/u/9344431?v=4" width="100" height="100" alt="mr-ryan-james"/><br /><sub><b>mr-ryan-james</b></sub></a> |
| <a href="https://github.com/heyseth"><img src="https://avatars.githubusercontent.com/u/8293842?v=4" width="100" height="100" alt="heyseth"/><br /><sub><b>heyseth</b></sub></a> | <a href="https://github.com/taisukeoe"><img src="https://avatars.githubusercontent.com/u/1506707?v=4" width="100" height="100" alt="taisukeoe"/><br /><sub><b>taisukeoe</b></sub></a> | <a href="https://github.com/avtc"><img src="https://avatars.githubusercontent.com/u/10050240?v=4" width="100" height="100" alt="avtc"/><br /><sub><b>avtc</b></sub></a> | <a href="https://github.com/dlab-anton"><img src="https://avatars.githubusercontent.com/u/20571486?v=4" width="100" height="100" alt="dlab-anton"/><br /><sub><b>dlab-anton</b></sub></a> | <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a> | <a href="https://github.com/kcwhite"><img src="https://avatars.githubusercontent.com/u/3812801?v=4" width="100" height="100" alt="kcwhite"/><br /><sub><b>kcwhite</b></sub></a> |
| <a href="https://github.com/ronyblum"><img src="https://avatars.githubusercontent.com/u/20314054?v=4" width="100" height="100" alt="ronyblum"/><br /><sub><b>ronyblum</b></sub></a> | <a href="https://github.com/teddyOOXX"><img src="https://avatars.githubusercontent.com/u/121077180?v=4" width="100" height="100" alt="teddyOOXX"/><br /><sub><b>teddyOOXX</b></sub></a> | <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a> | <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a> | <a href="https://github.com/zeozeozeo"><img src="https://avatars.githubusercontent.com/u/108888572?v=4" width="100" height="100" alt="zeozeozeo"/><br /><sub><b>zeozeozeo</b></sub></a> | <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a> |
| <a href="https://github.com/franekp"><img src="https://avatars.githubusercontent.com/u/9804230?v=4" width="100" height="100" alt="franekp"/><br /><sub><b>franekp</b></sub></a> | <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a> | <a href="https://github.com/axkirillov"><img src="https://avatars.githubusercontent.com/u/32141102?v=4" width="100" height="100" alt="axkirillov"/><br /><sub><b>axkirillov</b></sub></a> | <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a> | <a href="https://github.com/bramburn"><img src="https://avatars.githubusercontent.com/u/11090413?v=4" width="100" height="100" alt="bramburn"/><br /><sub><b>bramburn</b></sub></a> | <a href="https://github.com/olearycrew"><img src="https://avatars.githubusercontent.com/u/6044920?v=4" width="100" height="100" alt="olearycrew"/><br /><sub><b>olearycrew</b></sub></a> |
| <a href="https://github.com/brunobergher"><img src="https://avatars.githubusercontent.com/u/328388?v=4" width="100" height="100" alt="brunobergher"/><br /><sub><b>brunobergher</b></sub></a> | <a href="https://github.com/snoyiatk"><img src="https://avatars.githubusercontent.com/u/3056569?v=4" width="100" height="100" alt="snoyiatk"/><br /><sub><b>snoyiatk</b></sub></a> | <a href="https://github.com/GitlyHallows"><img src="https://avatars.githubusercontent.com/u/136527758?v=4" width="100" height="100" alt="GitlyHallows"/><br /><sub><b>GitlyHallows</b></sub></a> | <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a> | <a href="https://github.com/Chenjiayuan195"><img src="https://avatars.githubusercontent.com/u/30591313?v=4" width="100" height="100" alt="Chenjiayuan195"/><br /><sub><b>Chenjiayuan195</b></sub></a> | <a href="https://github.com/julionav"><img src="https://avatars.githubusercontent.com/u/45607850?v=4" width="100" height="100" alt="julionav"/><br /><sub><b>julionav</b></sub></a> |
| <a href="https://github.com/SplittyDev"><img src="https://avatars.githubusercontent.com/u/4216049?v=4" width="100" height="100" alt="SplittyDev"/><br /><sub><b>SplittyDev</b></sub></a> | <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a> | <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a> | <a href="https://github.com/ross"><img src="https://avatars.githubusercontent.com/u/12789?v=4" width="100" height="100" alt="ross"/><br /><sub><b>ross</b></sub></a> | <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a> | <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a> |
| <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a> | <a href="https://github.com/forestyoo"><img src="https://avatars.githubusercontent.com/u/2929056?v=4" width="100" height="100" alt="forestyoo"/><br /><sub><b>forestyoo</b></sub></a> | <a href="https://github.com/GOODBOY008"><img src="https://avatars.githubusercontent.com/u/13617900?v=4" width="100" height="100" alt="GOODBOY008"/><br /><sub><b>GOODBOY008</b></sub></a> | <a href="https://github.com/hatsu38"><img src="https://avatars.githubusercontent.com/u/16137809?v=4" width="100" height="100" alt="hatsu38"/><br /><sub><b>hatsu38</b></sub></a> | <a href="https://github.com/hongzio"><img src="https://avatars.githubusercontent.com/u/11085613?v=4" width="100" height="100" alt="hongzio"/><br /><sub><b>hongzio</b></sub></a> | <a href="https://github.com/im47cn"><img src="https://avatars.githubusercontent.com/u/67424112?v=4" width="100" height="100" alt="im47cn"/><br /><sub><b>im47cn</b></sub></a> |
| <a href="https://github.com/shoopapa"><img src="https://avatars.githubusercontent.com/u/45986634?v=4" width="100" height="100" alt="shoopapa"/><br /><sub><b>shoopapa</b></sub></a> | <a href="https://github.com/jwcraig"><img src="https://avatars.githubusercontent.com/u/241358?v=4" width="100" height="100" alt="jwcraig"/><br /><sub><b>jwcraig</b></sub></a> | <a href="https://github.com/nevermorec"><img src="https://avatars.githubusercontent.com/u/22953064?v=4" width="100" height="100" alt="nevermorec"/><br /><sub><b>nevermorec</b></sub></a> | <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a> | <a href="https://github.com/axmo"><img src="https://avatars.githubusercontent.com/u/2386344?v=4" width="100" height="100" alt="axmo"/><br /><sub><b>axmo</b></sub></a> | <a href="https://github.com/asychin"><img src="https://avatars.githubusercontent.com/u/178776568?v=4" width="100" height="100" alt="asychin"/><br /><sub><b>asychin</b></sub></a> |
| <a href="https://github.com/amittell"><img src="https://avatars.githubusercontent.com/u/1388680?v=4" width="100" height="100" alt="amittell"/><br /><sub><b>amittell</b></sub></a> | <a href="https://github.com/Yoshino-Yukitaro"><img src="https://avatars.githubusercontent.com/u/67864326?v=4" width="100" height="100" alt="Yoshino-Yukitaro"/><br /><sub><b>Yoshino-Yukitaro</b></sub></a> | <a href="https://github.com/Yikai-Liao"><img src="https://avatars.githubusercontent.com/u/110762732?v=4" width="100" height="100" alt="Yikai-Liao"/><br /><sub><b>Yikai-Liao</b></sub></a> | <a href="https://github.com/zxdvd"><img src="https://avatars.githubusercontent.com/u/107175?v=4" width="100" height="100" alt="zxdvd"/><br /><sub><b>zxdvd</b></sub></a> | <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a> | <a href="https://github.com/tmsjngx0"><img src="https://avatars.githubusercontent.com/u/40481136?v=4" width="100" height="100" alt="tmsjngx0"/><br /><sub><b>tmsjngx0</b></sub></a> |
| <a href="https://github.com/Githubguy132010"><img src="https://avatars.githubusercontent.com/u/145768128?v=4" width="100" height="100" alt="Githubguy132010"/><br /><sub><b>Githubguy132010</b></sub></a> | <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a> | <a href="https://github.com/maekawataiki"><img src="https://avatars.githubusercontent.com/u/26317009?v=4" width="100" height="100" alt="maekawataiki"/><br /><sub><b>maekawataiki</b></sub></a> | <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a> | <a href="https://github.com/zetaloop"><img src="https://avatars.githubusercontent.com/u/36418285?v=4" width="100" height="100" alt="zetaloop"/><br /><sub><b>zetaloop</b></sub></a> | <a href="https://github.com/cdlliuy"><img src="https://avatars.githubusercontent.com/u/17263036?v=4" width="100" height="100" alt="cdlliuy"/><br /><sub><b>cdlliuy</b></sub></a> |
| <a href="https://github.com/user202729"><img src="https://avatars.githubusercontent.com/u/25191436?v=4" width="100" height="100" alt="user202729"/><br /><sub><b>user202729</b></sub></a> | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> | <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a> | <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a> | <a href="https://github.com/seedlord"><img src="https://avatars.githubusercontent.com/u/20932878?v=4" width="100" height="100" alt="seedlord"/><br /><sub><b>seedlord</b></sub></a> | <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a> |
| <a href="https://github.com/robertheadley"><img src="https://avatars.githubusercontent.com/u/1780455?v=4" width="100" height="100" alt="robertheadley"/><br /><sub><b>robertheadley</b></sub></a> | <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a> | <a href="https://github.com/qingyuan1109"><img src="https://avatars.githubusercontent.com/u/841732?v=4" width="100" height="100" alt="qingyuan1109"/><br /><sub><b>qingyuan1109</b></sub></a> | <a href="https://github.com/pokutuna"><img src="https://avatars.githubusercontent.com/u/57545?v=4" width="100" height="100" alt="pokutuna"/><br /><sub><b>pokutuna</b></sub></a> | <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a> | <a href="https://github.com/village-way"><img src="https://avatars.githubusercontent.com/u/11625846?v=4" width="100" height="100" alt="village-way"/><br /><sub><b>village-way</b></sub></a> |
| <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a> | <a href="https://github.com/nobu007"><img src="https://avatars.githubusercontent.com/u/8529529?v=4" width="100" height="100" alt="nobu007"/><br /><sub><b>nobu007</b></sub></a> | <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a> | <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a> | <a href="https://github.com/mlopezr"><img src="https://avatars.githubusercontent.com/u/8202027?v=4" width="100" height="100" alt="mlopezr"/><br /><sub><b>mlopezr</b></sub></a> | <a href="https://github.com/mecab"><img src="https://avatars.githubusercontent.com/u/1580772?v=4" width="100" height="100" alt="mecab"/><br /><sub><b>mecab</b></sub></a> |
| <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a> | <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a> | <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a> | <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a> | <a href="https://github.com/linegel"><img src="https://avatars.githubusercontent.com/u/1746296?v=4" width="100" height="100" alt="linegel"/><br /><sub><b>linegel</b></sub></a> | <a href="https://github.com/edwin-truthsearch-io"><img src="https://avatars.githubusercontent.com/u/211044285?v=4" width="100" height="100" alt="edwin-truthsearch-io"/><br /><sub><b>edwin-truthsearch-io</b></sub></a> |
| <a href="https://github.com/EamonNerbonne"><img src="https://avatars.githubusercontent.com/u/803518?v=4" width="100" height="100" alt="EamonNerbonne"/><br /><sub><b>EamonNerbonne</b></sub></a> | <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a> | <a href="https://github.com/dflatline"><img src="https://avatars.githubusercontent.com/u/60121893?v=4" width="100" height="100" alt="dflatline"/><br /><sub><b>dflatline</b></sub></a> | <a href="https://github.com/Deon588"><img src="https://avatars.githubusercontent.com/u/12716437?v=4" width="100" height="100" alt="Deon588"/><br /><sub><b>Deon588</b></sub></a> | <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a> | <a href="https://github.com/devxpain"><img src="https://avatars.githubusercontent.com/u/170700110?v=4" width="100" height="100" alt="devxpain"/><br /><sub><b>devxpain</b></sub></a> |
| <a href="https://github.com/CW-B-W"><img src="https://avatars.githubusercontent.com/u/76680670?v=4" width="100" height="100" alt="CW-B-W"/><br /><sub><b>CW-B-W</b></sub></a> | <a href="https://github.com/chadgauth"><img src="https://avatars.githubusercontent.com/u/2413356?v=4" width="100" height="100" alt="chadgauth"/><br /><sub><b>chadgauth</b></sub></a> | <a href="https://github.com/thecolorblue"><img src="https://avatars.githubusercontent.com/u/13137?v=4" width="100" height="100" alt="thecolorblue"/><br /><sub><b>thecolorblue</b></sub></a> | <a href="https://github.com/bogdan0083"><img src="https://avatars.githubusercontent.com/u/7077307?v=4" width="100" height="100" alt="bogdan0083"/><br /><sub><b>bogdan0083</b></sub></a> | <a href="https://github.com/benashby"><img src="https://avatars.githubusercontent.com/u/1023089?v=4" width="100" height="100" alt="benashby"/><br /><sub><b>benashby</b></sub></a> | <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a> |
| <a href="https://github.com/atlasgong"><img src="https://avatars.githubusercontent.com/u/68199735?v=4" width="100" height="100" alt="atlasgong"/><br /><sub><b>atlasgong</b></sub></a> | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> | <a href="https://github.com/alasano"><img src="https://avatars.githubusercontent.com/u/14372930?v=4" width="100" height="100" alt="alasano"/><br /><sub><b>alasano</b></sub></a> | <a href="https://github.com/QuinsZouls"><img src="https://avatars.githubusercontent.com/u/40646096?v=4" width="100" height="100" alt="QuinsZouls"/><br /><sub><b>QuinsZouls</b></sub></a> | <a href="https://github.com/HadesArchitect"><img src="https://avatars.githubusercontent.com/u/1742301?v=4" width="100" height="100" alt="HadesArchitect"/><br /><sub><b>HadesArchitect</b></sub></a> | <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a> |
| <a href="https://github.com/nexon33"><img src="https://avatars.githubusercontent.com/u/47557266?v=4" width="100" height="100" alt="nexon33"/><br /><sub><b>nexon33</b></sub></a> | <a href="https://github.com/adilhafeez"><img src="https://avatars.githubusercontent.com/u/13196462?v=4" width="100" height="100" alt="adilhafeez"/><br /><sub><b>adilhafeez</b></sub></a> | <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a> | <a href="https://github.com/adamhill"><img src="https://avatars.githubusercontent.com/u/188638?v=4" width="100" height="100" alt="adamhill"/><br /><sub><b>adamhill</b></sub></a> | <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a> | <a href="https://github.com/AlexandruSmirnov"><img src="https://avatars.githubusercontent.com/u/210187997?v=4" width="100" height="100" alt="AlexandruSmirnov"/><br /><sub><b>AlexandruSmirnov</b></sub></a> |
| <a href="https://github.com/samsilveira"><img src="https://avatars.githubusercontent.com/u/109295696?v=4" width="100" height="100" alt="samsilveira"/><br /><sub><b>samsilveira</b></sub></a> | <a href="https://github.com/01Rian"><img src="https://avatars.githubusercontent.com/u/109045233?v=4" width="100" height="100" alt="01Rian"/><br /><sub><b>01Rian</b></sub></a> | <a href="https://github.com/RSO"><img src="https://avatars.githubusercontent.com/u/139663?v=4" width="100" height="100" alt="RSO"/><br /><sub><b>RSO</b></sub></a> | <a href="https://github.com/SECKainersdorfer"><img src="https://avatars.githubusercontent.com/u/155164204?v=4" width="100" height="100" alt="SECKainersdorfer"/><br /><sub><b>SECKainersdorfer</b></sub></a> | <a href="https://github.com/R-omk"><img src="https://avatars.githubusercontent.com/u/1633879?v=4" width="100" height="100" alt="R-omk"/><br /><sub><b>R-omk</b></sub></a> | <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a> |
| <a href="https://github.com/OlegOAndreev"><img src="https://avatars.githubusercontent.com/u/149705?v=4" width="100" height="100" alt="OlegOAndreev"/><br /><sub><b>OlegOAndreev</b></sub></a> | <a href="https://github.com/kvokka"><img src="https://avatars.githubusercontent.com/u/15954013?v=4" width="100" height="100" alt="kvokka"/><br /><sub><b>kvokka</b></sub></a> | <a href="https://github.com/ecmasx"><img src="https://avatars.githubusercontent.com/u/135958728?v=4" width="100" height="100" alt="ecmasx"/><br /><sub><b>ecmasx</b></sub></a> | <a href="https://github.com/mollux"><img src="https://avatars.githubusercontent.com/u/3983285?v=4" width="100" height="100" alt="mollux"/><br /><sub><b>mollux</b></sub></a> | <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a> | <a href="https://github.com/markijbema"><img src="https://avatars.githubusercontent.com/u/624143?v=4" width="100" height="100" alt="markijbema"/><br /><sub><b>markijbema</b></sub></a> |
| <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a> | <a href="https://github.com/monkeyDluffy6017"><img src="https://avatars.githubusercontent.com/u/9354193?v=4" width="100" height="100" alt="monkeyDluffy6017"/><br /><sub><b>monkeyDluffy6017</b></sub></a> | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> | <a href="https://github.com/shtse8"><img src="https://avatars.githubusercontent.com/u/8020099?v=4" width="100" height="100" alt="shtse8"/><br /><sub><b>shtse8</b></sub></a> | <a href="https://github.com/Rexarrior"><img src="https://avatars.githubusercontent.com/u/25753287?v=4" width="100" height="100" alt="Rexarrior"/><br /><sub><b>Rexarrior</b></sub></a> | <a href="https://github.com/KanTakahiro"><img src="https://avatars.githubusercontent.com/u/64513424?v=4" width="100" height="100" alt="KanTakahiro"/><br /><sub><b>KanTakahiro</b></sub></a> |
| <a href="https://github.com/ksze"><img src="https://avatars.githubusercontent.com/u/381556?v=4" width="100" height="100" alt="ksze"/><br /><sub><b>ksze</b></sub></a> | <a href="https://github.com/Jdo300"><img src="https://avatars.githubusercontent.com/u/67338327?v=4" width="100" height="100" alt="Jdo300"/><br /><sub><b>Jdo300</b></sub></a> | <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a> | <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a> | <a href="https://github.com/pfitz"><img src="https://avatars.githubusercontent.com/u/3062911?v=4" width="100" height="100" alt="pfitz"/><br /><sub><b>pfitz</b></sub></a> | <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |
<!-- END CONTRIBUTORS SECTION -->
## License
[Apache 2.0 © 2025 Roo Code, Inc.](./LICENSE)
---
**Enjoy Roo Code!** Whether you keep it on a short leash or let it roam autonomously, we cant 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!
[Apache 2.0 © 2026 Roo Code, Inc.](./LICENSE)

391
apps/cli/CHANGELOG.md Normal file
View file

@ -0,0 +1,391 @@
# Changelog
All notable changes to the `@roo-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).
## [0.1.17] - 2026-03-04
### Added
- **Custom Session ID Support**: New `--create-with-session-id` flag allows specifying a custom UUID session ID when creating tasks. Session IDs are now validated as UUIDs for both create and resume operations, as well as for `start.taskId` in stdin-stream mode.
### Tests
- Added integration coverage for create+resume loading the correct session.
## [0.1.16] - 2026-03-04
### Added
- **Custom Shell Selection**: New `--terminal-shell` flag to specify which shell to use for inline command execution. The shell path is validated at the CLI layer and passed through the standard settings mechanism.
### Tests
- Added integration coverage for stdin stream routing and race invariants.
## [0.1.15] - 2026-03-03
### Fixed
- **Follow-up Routing for Completion Asks**: Fixed routing of follow-up messages when the agent asks for clarification (ask_followup_question) in stdin-stream mode. Messages sent after a completion ask are now correctly delivered to the agent instead of being queued.
## [0.1.14] - 2026-03-03
### Fixed
- **Command Output Streaming**: Ensure full command output is streamed before the done event is emitted, preventing truncated output in stdin-stream mode.
## [0.1.13] - 2026-03-02
### Added
- **Skills as Slash Commands**: Skills are now exposed as slash commands, so you can invoke skill workflows directly from command-style input.
- **Skill Fallback Execution**: When a slash command does not match a command file but matches a skill slug, the CLI can resolve and execute that skill path.
### Changed
- **Slash Command Resolution Priority**: Command precedence is preserved, with skill fallback only used when no matching slash command is found.
### Tests
- Added and updated tests for slash command + skill fallback behavior, including command precedence and duplicate skill-slug handling.
## [0.1.12] - 2026-03-02
### Fixed
- **Command Timeout Handling**: CLI runtime now correctly ignores model-provided background timeouts for commands, ensuring command lifetime is governed solely by the `--timeout` setting.
## [0.1.11] - 2026-03-02
### Added
- **Image Support in Stdin Stream**: The `start` and `message` commands in stdin-stream mode now support an optional `images` field (array of base64 data URIs) to attach images to prompts.
### Fixed
- **Upgrade Version Detection**: Fixed version detection in the `upgrade` command to correctly identify when updates are available.
## [0.1.10] - 2026-03-02
### Added
- **Command Exit Code in Events**: The `tool_result` event for command executions now includes an `exitCode` field, allowing CLI consumers to programmatically distinguish between successful and failed command executions without parsing output text.
## [0.1.9] - 2026-03-02
### Fixed
- **Stdin Stream Cancel Race**: Fixed a race condition during startup cancellation in stdin-stream mode that could cause unexpected behavior when canceling tasks immediately after starting them.
### Tests
- **Integration Test Suite**: Added comprehensive integration test suite for stdin-stream protocol covering cancel, followup, multi-message queue, and shutdown scenarios.
## [0.1.8] - 2026-03-02
### Changed
- **Command Execution Timeout**: Increased timeout for command execution to improve reliability for long-running operations.
### Fixed
- **Stdin Stream Queue Handling**: Fixed stdin stream queued messages and command output streaming to ensure messages are properly processed.
## [0.1.7] - 2026-03-01
### Fixed
- **Stdin Stream Control Flow**: Gracefully handle control-flow errors in stdin-stream mode to prevent unexpected crashes during cancellation and shutdown sequences.
### Changed
- **Type Definitions**: Refactored and simplified JSON event type definitions for better type safety.
## [0.1.6] - 2026-02-27
### Added
- **Consecutive Mistake Limit**: New `--mistake-limit` flag to configure the maximum number of consecutive mistakes before the agent pauses for intervention.
### Changed
- **Workspace-Scoped Sessions**: The `list sessions` command and `--resume` flag now only show and resume sessions from the current workspace directory.
### Fixed
- **Task Configuration Forwarding**: Task configuration (custom modes, disabled tools, etc.) passed via the stdin-prompt-stream protocol is now correctly forwarded to the extension host instead of being silently dropped.
- **Stream Error Recovery**: Improved recovery from streaming errors to prevent task interruption.
## [0.1.5] - 2026-02-26
### Added
- **Session History**: New `list sessions` subcommand to view recent CLI sessions with task IDs, timestamps, and initial prompts.
- **Session Resume**: New `--resume <taskId>` flag to continue a previous session from where it left off.
- **Upgrade Command**: New `upgrade` command to check for and install the latest CLI version.
## [0.1.4] - 2026-02-26
### Fixed
- **Exception Handling**: Improved recovery from unhandled exceptions in the CLI to prevent unexpected crashes.
## [0.1.3] - 2026-02-25
### Fixed
- **Task Resumption**: Fixed an issue where resuming a previously suspended task could fail due to state initialization timing in the extension host.
## [0.1.2] - 2026-02-25
### Changed
- **Streaming Deltas**: Tool use ask messages (command, tool, mcp) are now streamed as structured deltas instead of full snapshots in json-event-emitter for improved efficiency.
- **Task ID Propagation**: Task ID is now generated upfront and propagated through runTask/createTask so currentTaskId is available in extension state immediately.
- **Custom Tools**: Enabled customTools experiment in extension host.
### Fixed
- **Cancel Recovery**: Wait for resumable state after cancel before processing follow-up messages to prevent race conditions in stdin-stream.
- **Custom Tool Schema**: Provide valid empty JSON Schema for custom tools without parameters to fix strict-mode API validation.
- **Path Handling**: Skip paths outside cwd in RooProtectedController to avoid RangeError.
- **Retry Handling**: Silently handle abort during exponential backoff retry countdown.
- Fixed spelling/grammar and casing inconsistencies.
### Added
- **Telemetry Control**: Added `ROO_CODE_DISABLE_TELEMETRY=1` environment variable to disable cloud telemetry.
## [0.1.1] - 2026-02-24
### Added
- **Roo Model Warmup**: When configured with the Roo provider, the CLI now proactively fetches and warms the model list during activation so that model information is available before the first prompt is sent. The warmup has a 10s timeout and failures are logged only in debug mode.
- **Unbound Provider**: Added Unbound as an available provider option.
## [0.1.0] - 2026-02-19
### Added
- **NDJSON Stdin Protocol**: Overhauled the stdin prompt stream from raw text lines to a structured NDJSON command protocol (`start`/`message`/`cancel`/`ping`/`shutdown`) with requestId correlation, ack/done/error lifecycle events, and queue telemetry. See [`stdin-stream.ts`](src/ui/stdin-stream.ts) for implementation.
- **List Subcommands**: New `list` subcommands (`commands`, `modes`, `models`) for programmatic discovery of available CLI capabilities.
- **Shared Utilities**: Added `isRecord` guard utility for improved type safety.
### Changed
- **Modularized Architecture**: Extracted stdin stream logic from `run.ts` into dedicated [`stdin-stream.ts`](src/ui/stdin-stream.ts) module for better code organization and maintainability.
### Fixed
- Fixed a bug in `Task.ts` affecting CLI operation.
## [0.0.55] - 2026-02-17
### Fixed
- **Stdin Stream Mode**: Fixed issue where new tasks were incorrectly being created in stdin-prompt-stream mode. The mode now properly reuses the existing task for subsequent prompts instead of creating new tasks.
## [0.0.54] - 2026-02-15
### Added
- **Stdin Stream Mode**: New `stdin-prompt-stream` mode that reads prompts from stdin, allowing batch processing and piping multiple tasks. Each line of stdin is processed as a separate prompt with streaming JSON output. See [`stdin-prompt-stream.ts`](src/ui/stdin-prompt-stream.ts) for implementation.
### Fixed
- Fixed JSON emitter state not being cleared between tasks in stdin-prompt-stream mode
- Fixed inconsistent user role for prompt echo partials in stream-json mode
## [0.0.53] - 2026-02-12
### Changed
- **Auto-Approve by Default**: The CLI now auto-approves all actions (tools, commands, browser, MCP) by default. Followup questions auto-select the first suggestion after a 60-second timeout.
- **New `--require-approval` Flag**: Replaced `-y`/`--yes`/`--dangerously-skip-permissions` flags with a new `-a, --require-approval` flag for users who want manual approval prompts before actions execute.
### Fixed
- Spamming the escape key to cancel a running task no longer crashes the cli.
## [0.0.52] - 2026-02-09
### Added
- **Linux Support**: Added support for `linux-arm64`.
## [0.0.51] - 2026-02-06
### Changed
- **Default Model Update**: Changed the default model from Opus 4.5 to Opus 4.6 for improved performance and capabilities
## [0.0.50] - 2026-02-05
### Added
- **Linux Support**: The CLI now supports Linux platforms in addition to macOS
- **Roo Provider API Key Support**: Allow `--api-key` flag and `ROO_API_KEY` environment variable for the roo provider instead of requiring cloud auth token
- **Exit on Error**: New `--exit-on-error` flag to exit immediately on API request errors instead of retrying, useful for CI/CD pipelines
### Changed
- **Improved Dev Experience**: Dev scripts now use `tsx` for running directly from source without building first
- **Path Resolution Fixes**: Fixed path resolution in [`version.ts`](src/lib/utils/version.ts), [`extension.ts`](src/lib/utils/extension.ts), and [`extension-host.ts`](src/agent/extension-host.ts) to work from both source and bundled locations
- **Debug Logging**: Debug log file (`~/.roo/cli-debug.log`) is now disabled by default unless `--debug` flag is passed
- Updated README with complete environment variable table and dev workflow documentation
### Fixed
- Corrected example in install script
### Removed
- Dropped macOS 13 support
## [0.0.49] - 2026-01-18
### Added
- **Output Format Options**: New `--output-format` flag to control CLI output format for scripting and automation:
- `text` (default) - Human-readable interactive output
- `json` - Single JSON object with all events and final result at task completion
- `stream-json` - NDJSON (newline-delimited JSON) for real-time streaming of events
- See [`json-events.ts`](src/types/json-events.ts) for the complete event schema
- New [`JsonEventEmitter`](src/agent/json-event-emitter.ts) for structured output generation
## [0.0.48] - 2026-01-17
### Changed
- Simplified authentication callback flow by using HTTP redirects instead of POST requests with CORS headers for improved browser compatibility
## [0.0.47] - 2026-01-17
### Added
- **Workspace flag**: New `-w, --workspace <path>` option to specify a custom workspace directory instead of using the current working directory
- **Oneshot mode**: New `--oneshot` flag to exit upon task completion, useful for scripting and automation (can also be saved in settings via [`CliSettings.oneshot`](src/types/types.ts))
### Changed
- Skip onboarding flow when a provider is explicitly specified via `--provider` flag or saved in settings
- Unified permission flags: Combined approval-skipping flags into a single option for Claude Code-like CLI compatibility
- Improved Roo 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
## [0.0.45] - 2026-01-08
### Changed
- **Major Refactor**: Extracted ~1400 lines from [`App.tsx`](src/ui/App.tsx) into reusable hooks and utilities for better maintainability:
- [`useExtensionHost`](src/ui/hooks/useExtensionHost.ts) - Extension host connection and lifecycle management
- [`useMessageHandlers`](src/ui/hooks/useMessageHandlers.ts) - Message processing and state updates
- [`useTaskSubmit`](src/ui/hooks/useTaskSubmit.ts) - Task submission logic
- [`useGlobalInput`](src/ui/hooks/useGlobalInput.ts) - Global keyboard shortcut handling
- [`useFollowupCountdown`](src/ui/hooks/useFollowupCountdown.ts) - Auto-approval countdown logic
- [`useFocusManagement`](src/ui/hooks/useFocusManagement.ts) - Input focus state management
- [`usePickerHandlers`](src/ui/hooks/usePickerHandlers.ts) - Picker component event handling
- [`uiStateStore`](src/ui/stores/uiStateStore.ts) - UI-specific state (showExitHint, countdown, etc.)
- Tool data utilities ([`extractToolData`](src/ui/utils/toolDataUtils.ts), `formatToolOutput`, etc.)
- [`HorizontalLine`](src/ui/components/HorizontalLine.tsx) component
- **Performance Optimizations**:
- Added RAF-style scroll throttling to reduce state updates
- Stabilized `useExtensionHost` hook return values with `useCallback`/`useMemo`
- Added streaming message debouncing to batch rapid partial updates
- Added shallow array equality checks to prevent unnecessary re-renders
- Simplified [`ModeTool`](src/ui/components/tools/ModeTool.tsx) layout to horizontal with mode suffix
- Simplified logging by removing verbose debug output and adding first/last partial message logging pattern
- Updated Nerd Font icon codepoints in [`Icon`](src/ui/components/Icon.tsx) component
### Added
- `#` shortcut in help trigger for quick access to task history autocomplete
### Fixed
- Fixed a crash in message handling
- Added protected file warning in tool approval prompts
- Enabled `alwaysAllowWriteProtected` for non-interactive mode
### Removed
- Removed unused `renderLogger.ts` utility file
### Tests
- Updated extension-host tests to expect `[Tool Request]` format
- Updated Icon tests to expect single-char Nerd Font icons
## [0.0.44] - 2026-01-08
### Added
- **Tool Renderer Components**: Specialized renderers for displaying tool outputs with optimized formatting for each tool type. Each renderer provides a focused view of its data structure.
- [`FileReadTool`](src/ui/components/tools/FileReadTool.tsx) - Display file read operations with syntax highlighting
- [`FileWriteTool`](src/ui/components/tools/FileWriteTool.tsx) - Show file write/edit operations with diff views
- [`SearchTool`](src/ui/components/tools/SearchTool.tsx) - Render search results with context
- [`CommandTool`](src/ui/components/tools/CommandTool.tsx) - Display command execution with output
- [`BrowserTool`](src/ui/components/tools/BrowserTool.tsx) - Show browser automation actions
- [`ModeTool`](src/ui/components/tools/ModeTool.tsx) - Display mode switching operations
- [`CompletionTool`](src/ui/components/tools/CompletionTool.tsx) - Show task completion status
- [`GenericTool`](src/ui/components/tools/GenericTool.tsx) - Fallback renderer for other tools
- **History Trigger**: New `#` trigger for task history autocomplete with fuzzy search support. Type `#` at the start of a line to browse and resume previous tasks.
- [`HistoryTrigger.tsx`](src/ui/components/autocomplete/triggers/HistoryTrigger.tsx) - Trigger implementation with fuzzy filtering
- Shows task status, mode, and relative timestamps
- Supports keyboard navigation for quick task selection
- **Release Confirmation Prompt**: The release script now prompts for confirmation before creating a release.
### Fixed
- Task history picker selection and navigation issues
- Mode switcher keyboard handling bug
### Changed
- Reorganized test files into `__tests__` directories for better project structure
- Refactored utility modules into dedicated `utils/` directory
## [0.0.43] - 2026-01-07
### Added
- **Toast Notification System**: New toast notifications for user feedback with support for info, success, warning, and error types. Toasts auto-dismiss after a configurable duration and are managed via Zustand store.
- New [`ToastDisplay`](src/ui/components/ToastDisplay.tsx) component for rendering toast messages
- New [`useToast`](src/ui/hooks/useToast.ts) hook for managing toast state and displaying notifications
- **Global Input Sequences Registry**: Centralized system for handling keyboard shortcuts at the application level, preventing conflicts with input components.
- New [`globalInputSequences.ts`](src/ui/utils/globalInputSequences.ts) utility module
- Support for Kitty keyboard protocol (CSI u encoding) for better terminal compatibility
- Built-in sequences for `Ctrl+C` (exit) and `Ctrl+M` (mode cycling)
- **Local Tarball Installation**: The install script now supports installing from a local tarball via the `ROO_LOCAL_TARBALL` environment variable, useful for offline installation or testing pre-release builds.
### Changed
- **MultilineTextInput**: Updated to respect global input sequences, preventing the component from consuming shortcuts meant for application-level handling.
### Tests
- Added comprehensive tests for the toast notification system
- Added tests for global input sequence matching
## [0.0.42] - 2025-01-07
The cli is alive!

240
apps/cli/README.md Normal file
View file

@ -0,0 +1,240 @@
# @roo-code/cli
Command Line Interface for Roo Code - Run the Roo 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.
## Installation
### Quick Install (Recommended)
Install the Roo Code CLI with a single command:
```bash
curl -fsSL https://raw.githubusercontent.com/RooCodeInc/Roo-Code/main/apps/cli/install.sh | sh
```
**Requirements:**
- Node.js 20 or higher
- macOS Apple Silicon (M1/M2/M3/M4) or Linux x64
**Custom installation directory:**
```bash
ROO_INSTALL_DIR=/opt/roo-code ROO_BIN_DIR=/usr/local/bin curl -fsSL ... | sh
```
**Install a specific version:**
```bash
ROO_VERSION=0.1.0 curl -fsSL https://raw.githubusercontent.com/RooCodeInc/Roo-Code/main/apps/cli/install.sh | sh
```
### Updating
Re-run the install script to update to the latest version:
```bash
curl -fsSL https://raw.githubusercontent.com/RooCodeInc/Roo-Code/main/apps/cli/install.sh | sh
```
Or run:
```bash
roo upgrade
```
### Uninstalling
```bash
rm -rf ~/.roo/cli ~/.local/bin/roo
```
## Usage
### Interactive Mode (Default)
By default, the CLI auto-approves actions and runs in interactive TUI mode:
```bash
export OPENROUTER_API_KEY=sk-or-v1-...
roo "What is this project?" -w ~/Documents/my-project
```
You can also run without a prompt and enter it interactively in TUI mode:
```bash
roo -w ~/Documents/my-project
```
In interactive mode:
- Tool executions are auto-approved
- Commands are auto-approved
- Followup questions show suggestions with a 60-second timeout, then auto-select the first suggestion
- Browser and MCP actions are auto-approved
### Approval-Required Mode (`--require-approval`)
If you want manual approval prompts, enable approval-required mode:
```bash
roo "Refactor the utils.ts file" --require-approval -w ~/Documents/my-project
```
In approval-required mode:
- Tool, command, browser, and MCP actions prompt for yes/no approval
- Followup questions wait for manual input (no auto-timeout)
### Print Mode (`--print`)
Use `--print` for non-interactive execution and machine-readable output:
```bash
# Prompt is required
roo --print "Summarize this repository"
# Create a new task with a specific session ID (UUID)
roo --print --create-with-session-id 018f7fc8-7c96-7f7c-98aa-2ec4ff7f6d87 "Summarize this repository"
```
### Stdin Stream Mode (`--stdin-prompt-stream`)
For programmatic control (one process, multiple prompts), use `--stdin-prompt-stream` with `--print`.
Send NDJSON commands via stdin:
```bash
printf '{"command":"start","requestId":"1","prompt":"1+1=?"}\n' | roo --print --stdin-prompt-stream --output-format stream-json
# Optional: provide taskId per start command
printf '{"command":"start","requestId":"1","taskId":"018f7fc8-7c96-7f7c-98aa-2ec4ff7f6d87","prompt":"1+1=?"}\n' | roo --print --stdin-prompt-stream --output-format stream-json
```
## Options
| Option | Description | Default |
| --------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------- |
| `[prompt]` | Your prompt (positional argument, optional) | None |
| `--prompt-file <path>` | Read prompt from a file instead of command line argument | None |
| `--create-with-session-id <session-id>` | Create a new task using the provided session ID (UUID) | None |
| `-w, --workspace <path>` | Workspace path to operate in | Current directory |
| `-p, --print` | Print response and exit (non-interactive mode) | `false` |
| `--stdin-prompt-stream` | Read NDJSON control commands from stdin (requires `--print`) | `false` |
| `-e, --extension <path>` | Path to the extension bundle directory | Auto-detected |
| `-d, --debug` | Enable debug output (includes detailed debug information, prompts, paths, etc) | `false` |
| `-a, --require-approval` | Require manual approval before actions execute | `false` |
| `-k, --api-key <key>` | API key for the LLM provider | From env var |
| `--provider <provider>` | API provider (anthropic, openai, openrouter, etc.) | `openrouter` |
| `-m, --model <model>` | Model to use | `anthropic/claude-opus-4.6` |
| `--mode <mode>` | Mode to start in (code, architect, ask, debug, etc.) | `code` |
| `--terminal-shell <path>` | Absolute shell path for inline terminal command execution | Auto-detected shell |
| `-r, --reasoning-effort <effort>` | Reasoning effort level (unspecified, disabled, none, minimal, low, medium, high, xhigh) | `medium` |
| `--consecutive-mistake-limit <n>` | Consecutive error/repetition limit before guidance prompt (`0` disables the limit) | `10` |
| `--ephemeral` | Run without persisting state (uses temporary storage) | `false` |
| `--oneshot` | Exit upon task completion | `false` |
| `--output-format <format>` | Output format with `--print`: `text`, `json`, or `stream-json` | `text` |
## Environment Variables
The CLI will look for API keys in environment variables if not provided via `--api-key`:
| Provider | Environment Variable |
| ----------------- | --------------------------- |
| anthropic | `ANTHROPIC_API_KEY` |
| openai-native | `OPENAI_API_KEY` |
| openrouter | `OPENROUTER_API_KEY` |
| gemini | `GOOGLE_API_KEY` |
| vercel-ai-gateway | `VERCEL_AI_GATEWAY_API_KEY` |
## Architecture
```
┌─────────────────┐
│ CLI Entry │
│ (index.ts) │
└────────┬────────┘
┌─────────────────┐
│ ExtensionHost │
│ (extension- │
│ host.ts) │
└────────┬────────┘
┌────┴────┐
│ │
▼ ▼
┌───────┐ ┌──────────┐
│vscode │ │Extension │
│-shim │ │ Bundle │
└───────┘ └──────────┘
```
## How It Works
1. **CLI Entry Point** (`index.ts`): Parses command line arguments and initializes the ExtensionHost
2. **ExtensionHost** (`extension-host.ts`):
- Creates a VSCode API mock using `@roo-code/vscode-shim`
- Intercepts `require('vscode')` to return the mock
- Loads and activates the extension bundle
- Manages bidirectional message flow
3. **Message Flow**:
- CLI → Extension: `emit("webviewMessage", {...})`
- Extension → CLI: `emit("extensionWebviewMessage", {...})`
## Development
```bash
# Run directly from source (no build required)
pnpm dev --provider openrouter --api-key $OPENROUTER_API_KEY --print "Hello"
# Run tests
pnpm test
# Type checking
pnpm check-types
# Linting
pnpm lint
```
## Releasing
Official releases are created via the GitHub Actions workflow at `.github/workflows/cli-release.yml`.
To trigger a release:
1. Go to **Actions** → **CLI Release**
2. Click **Run workflow**
3. Optionally specify a version (defaults to `package.json` version)
4. Click **Run workflow**
The workflow will:
1. Build the CLI on all platforms (macOS Apple Silicon, Linux x64)
2. Create platform-specific tarballs with bundled ripgrep
3. Verify each tarball
4. Create a GitHub release with all tarballs attached
### Local Builds
For local development and testing, use the build script:
```bash
# Build tarball for your current platform
./apps/cli/scripts/build.sh
# Build and install locally
./apps/cli/scripts/build.sh --install
# Fast build (skip verification)
./apps/cli/scripts/build.sh --skip-verify
```

Some files were not shown because too many files have changed in this diff Show more