Commit graph

105 commits

Author SHA1 Message Date
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
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
Noritaka Kobayashi
ab55854702
chore: fix typos in comment & document (#5569) 2025-07-10 11:33:26 -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
axb
7645aad435
add todo tool (#5182)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-07 14:07:39 -04:00
Roomote
8f216c3f88
Fix new_task tool streaming issue (#5432) 2025-07-06 09:17:18 -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
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
WuWen
19cd001f8d
fix access_mcp_resource fails to handle images correctly (#5254) 2025-07-02 23:50:15 -04:00
Matt Rubens
1be6fce1a6
Check for protected files in single apply diff (#5348) 2025-07-02 13:52:13 -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
Matt Rubens
719d661478
Add optional mode suggestions to follow-up questions (#5200) 2025-06-27 16:26:17 -04:00
Thomas Brugman
245c8f3269
Fix: Allow write_to_file to handle newline-only and empty content (#3550)
* Fix: Allow write_to_file to handle newline-only and empty content

* fix: update writeToFileTool to return early without error on missing or empty parameters

* fix: preserve newlines in content parameters and update error handling in writeToFileTool tests

* fix: update parseAssistantMessage and parseAssistantMessageV2 to preserve newlines in content parameters while stripping leading and trailing newlines

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-23 18:43:49 -04:00
roomote
6ed217c716
Fixes #4882: Remove experimental setting for command execution in attempt_completion (#4884)
* Fixes #4882: Remove experimental setting for command execution in attempt_completion

- Remove DISABLE_COMPLETION_COMMAND from experiments system
- Permanently disable command execution in attempt_completion tool
- Update tool prompts to remove command parameter and examples
- Remove experimental UI toggle and localization entries (18+ languages)
- Update tests to reflect permanent behavior
- Remove experiment-specific test file

Command execution is now permanently disabled in attempt_completion.
Users must use execute_command tool separately before attempt_completion.

* refactor: simplify getAttemptCompletionDescription by removing unnecessary variables

* test: fix tests by regenerating snaps

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-20 17:48:01 -04:00
Chris Estreich
c6d1cee448
Disable flakey tests (#4911) 2025-06-19 18:39:39 -07:00
Matt Rubens
d8b468adbf
Remove warning about commands switching working directory (#4795) 2025-06-17 14:58:03 -04:00
Matt Rubens
48c9bd5fae
Encourage use of start_line in multi-file diff to match legacy diff (#4777) 2025-06-17 10:40:37 -04:00
Chris Estreich
62c3914034
Farewell jest (#4607)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-06-16 21:39:45 -07:00
Matt Rubens
8dd99a0254
Support config policies that require use of cloud (#4762)
* Support config policies that require use of cloud

* Switch to vitest
2025-06-16 18:31:22 -04:00
Matt Rubens
254baa8704
Fix errant maxReadFileLine default (#4683) 2025-06-13 23:30:28 -04:00
Matt Rubens
1a4c6892a3
Make listing tools respect auto-approve settings for outside of the workspace (#4682) 2025-06-13 23:12:31 -04:00
Daniel
feb2fa8443
Fix multi-file diff error handling and UI feedback (#4674)
fix: improve multi-file diff error handling and UI feedback

- Fix nested array issue in multi-file-search-replace strategy
- Consolidate diff error reporting to single message
- Fix infinite spinner on single file diff failures
2025-06-13 20:09:04 -04:00
Matt Rubens
7d0b22f9e6
Add logic to prevent auto-approving edits of configuration files (#4667)
* Add logic to prevent auto-approving edits of configuration files

* Fix tests

* Update patterns
2025-06-13 19:58:55 -04:00
Matt Rubens
10b2fb32ed
Adjust searching outside of the workspace to respect the auto-approve… (#4670)
Adjust searching outside of the workspace to respect the auto-approve checkbox
2025-06-13 18:49:39 -04:00
Matt Rubens
ca0338af15
Limit search_files to only look within the workspace (#4642) 2025-06-13 12:10:43 -04:00
Sam Hoang Van
7bed94454a
feat: Enhance apply_diff with XML for multi-file/multi-diff operations & batch UI (#3342)
* feat: add BatchDiffApproval component for multi-file diff application

- Introduced a new component `BatchDiffApproval` to handle the approval of batch changes across multiple files.
- Integrated the `BatchDiffApproval` component into `ChatRow` to display batch diff requests.
- Updated experimental settings to include a toggle for multi-file apply diff functionality.
- Enhanced localization files to support new strings related to batch changes in multiple languages.
- Updated tests to cover the new multi-file apply diff feature.

* revert this

* fix: update applyDiff parameter type to accept string or DiffItem

* refactor: keep original file name for apply diff tool

* revert this

* Update src/core/webview/__tests__/ClineProvider.test.ts

* revert this

* fix: keep the original path if the experiment is disabled

* test: add dynamic strategy selection tests for MultiSearchReplaceDiffStrategy and MultiFileSearchReplaceDiffStrategy

* fix: mock applyDiffTool module and ensure legacy tool resolves successfully in tests

* remove this

* ellipsis suggestion

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

* refactor: mirror concurrent file reads

---------

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-06-12 12:36:34 -04:00
KJ7LNW
53e7e6beaa
feat: Allow escaping of context mentions (#4362)
* allow escaping of context mentions

* refactor: update comment

---------

Co-authored-by: cannuri <91494156+cannuri@users.noreply.github.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-06-12 11:49:19 -04:00
Ruakij
8f58737550
Fix #4113: Move relPath & newContent checks in writeToFileTool earlie… (#4378)
Fix #4113: Move relPath & newContent checks in writeToFileTool earlier and run after they exist or block is non-partial
Add tests covering the issue.
2025-06-12 11:48:14 -04:00
Sam Hoang Van
a9c1dad2ce
feat(mcp): improve mcp with McpExecution, make UX like terminal execute (#3485)
* feat: add MCP viewer and enhanced UI

- Add McpExecutionStatus type with discriminated union for execution states
- Implement McpExecution component with live status updates and collapsible output
- Replace inline MCP UI in ChatRow with dedicated McpExecution component
- Add comprehensive test coverage for useMcpToolTool
- Enhance CodeAccordian to support custom headers
- Improve combineCommandSequences to handle MCP execution flows

* refactor: merge loops in combineCommandSequences for better efficiency

- Reduced from 3 separate loops to 1 main processing loop
- Improved time complexity from O(n²) to O(n)
- Reduced total passes through array from 4 to 2
- Better memory access patterns and cache utilization

* feat: enhance JSON parsing and rendering in McpExecution component

* feat: add mock implementations for react-markdown and remark-gfm

* fix: remove unreachable return statement in ChatRowContent component

* feat(i18n): add execution status messages and error handling for invalid JSON arguments

* test: add parameter validation tests for missing server_name and tool_name

* Update McpExecution component to show server name in header and tool name in approval section

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-12 00:46:07 -04:00
Chris Estreich
395f55b31f
Convert jest tests to vitest and disable default watch mode for vitest (#4568)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-06-11 14:48:01 -07:00
Matt Rubens
1d63fb6773
Run prettier on src (#4478) 2025-06-09 17:10:33 -04:00
Hannes Rudolph
67d238afd0
feat: add experimental flag to disable command execution in attempt_c… (#4352)
* feat: add experimental flag to disable command execution in attempt_completion tool

* fix: remove deprecation phase comments from attemptCompletionTool

* feat: add translations for disable completion command experiment

* fix: revert unintended package.json change

* Rename attempt-completion.experiment.test.ts to attempt-completion.test.ts

* fix: address PR feedback - restore autoCondenseContext in tests and remove type assertion

---------

Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-06-08 07:14:57 -07:00
Sam Hoang Van
6baf28c328
feat(tools): add support for reading PDF, DOCX, and IPYNB files in read_file tool (#4288)
- Allow specific binary formats (.pdf, .docx, .ipynb) to be processed by extractTextFromFile
- Block unsupported binary files with existing "Binary file" notice
- Update tests to cover both supported and unsupported binary file scenarios
- Refactor test mocks for better maintainability and coverage
2025-06-03 11:59:34 -04:00
xyOz
eb9c4aa03d
releasing memory in apply diff (#4193) 2025-06-01 23:08:46 -04:00
Matt Rubens
caf54dcc3d
Run prettier on src/ (#4221) 2025-06-01 22:56:47 -04:00
Matt Rubens
0f00982a2b
Revert "Revert "fix: prevent dump of an entire file into the context on user edit "" (#4219)
Revert "Revert "fix: prevent dump of an entire file into the context on user …"

This reverts commit 98f5542021.
2025-06-01 22:05:20 -04:00
Taylor Wilsdon
7e125f86c6
feat: Add support for Streamable HTTP Transport MCP servers (#4210)
* Implement support for streamable-http transport type mcp servers

* add streamable-http mock in same fashion as sse - which does not seem to currently be actually leveraged

* rename mock to resolve kebabcase vs camelCase

* fix (seemingly unrelatd) test failure in writeToFileTool.test.ts

* fix tests
2025-06-01 21:54:38 -04:00
Matt Rubens
98f5542021
Revert "fix: prevent dump of an entire file into the context on user edit " (#4211)
Revert "fix: prevent dump of an entire file into the context on user edit  (#…"

This reverts commit 5e50c5543b.
2025-06-01 16:51:32 -04:00
KJ7LNW
5e50c5543b
fix: prevent dump of an entire file into the context on user edit (#3654)
* refactor: Add pushToolWriteResult method to DiffViewProvider

Previously, each tool file contained duplicate code for formatting file write
responses and conditionally sending user_feedback_diff messages. This led to
inconsistent implementations and made changes difficult to maintain.

This refactoring centralizes the response formatting and messaging logic in the
DiffViewProvider class, which now:
- Stores results from saveChanges() in class properties
- Only sends user_feedback_diff when user edits exist
- Configures XMLBuilder with no indentation for cleaner output

Tool files now make a single method call instead of duplicating logic.

Fixes: #3647
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>

* fix: conditionally show user edits message in file write response

Make the 'If the user's edits have addressed part of the task...' message
conditional based on whether there are actual user edits. This prevents
showing irrelevant guidance when no user edits were made to the file.

Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>

---------

Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
Co-authored-by: Eric Wheeler <roo-code@z.ewheeler.org>
2025-06-01 09:55:40 -04:00
Sam Hoang Van
9ba0cd5c7a
feat(read_file): enhance file reading capabilities with multi-file support and improved parameter handling (#2886)
* feat(read_file): enhance file reading capabilities with multi-file support and improved parameter handling

fix(read_file): change return to continue on approval rejection in readFileTool

Enhance readFileTool with improved error handling and validation

- Introduced a FileEntry interface for better type management.
- Added validation for start_line and end_line to ensure proper ranges.
- Implemented RooIgnore validation before processing files.
- Enhanced error handling with dedicated functions for file and global errors.
- Streamlined file reading logic to handle binary files, definitions-only mode, and line thresholds more effectively.
- Improved user feedback for empty files and read limits.

chore: update Jest snapshot for system prompt tool usage

Refactor read-file tool to support XML input format and multiple line ranges

- Updated the `getReadFileDescription` function to reflect new XML structure for file reading requests.
- Modified `readFileTool` to parse XML input, allowing multiple line ranges for each file.
- Removed old parsing logic that handled line ranges as separate parameters.
- Implemented validation for line ranges and ensured proper error handling for file access.
- Adjusted approval messaging to accommodate new line range format.
- Enhanced error handling to provide consistent feedback for file read errors.

update from KJ7LNW  comment

feat: add maxConcurrentFileReads setting to enhance read_file tool performance

feat: enhance readFileTool with XML parsing and file processing state tracking

feat: enhance readFileTool to include user feedback handling and processing state tracking

chore: clean up read_file tool documentation by removing extra newlines

feat: update read_file tool tests to handle user feedback and approval states

feat: add tests for feedback message formatting and XML special character handling in read_file tool

Implement code changes to enhance functionality and improve performance

feat: increase max concurrent file reads and adjust slider range in settings

feat: increase default max concurrent file reads from 5 to 15 across settings and context management

fix(read_file): enhance legacy path handling and remove duplicate parameters

feat(read_file): enhance file description handling and add support for multiple files in messages

done poc for new ux

idea 1

* fix the test

* fix: normalize locale file formatting to use tabs

- Applied prettier formatting to all locale JSON files
- Fixed mixed indentation (spaces/tabs) to use consistent tabs
- Aligns with project's prettier configuration

* fix(settings): improve checkbox handling and slider configuration in ConcurrentFileReadsExperiment

* fix(read_file): enhance description to include partial reads support

* fix(read_file): update description for partial reads and improve example clarity

* fix: suggestions

* fix: translations

* test: update system prompt snapshots for multi-file read tool

* fix: remove batch permission question from readFile tool translations

---------

Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-05-30 17:09:42 -04:00
Ruakij
201fb3b5a2
Fix: Ensure write_to_file creates empty files when content is empty (#3871)
* Fix #3650: Allow empty content in write_to_file tool

Change validation from !newContent to newContent === undefined
to allow empty strings while still rejecting undefined values.

* Add unit tests for writeToFileTool
2025-05-29 08:52:26 -04:00
Chris Estreich
7820b7517a
Roo Code Cloud (#4069)
Co-authored-by: John Richmond <5629+jr@users.noreply.github.com>
2025-05-28 20:43:30 -07:00
Matt Rubens
4cf240f3db
Check rooignore for insert_content and search_and_replace (#4094) 2025-05-28 22:36:19 -04:00
Sam Hoang Van
e8b4dda922
feat: Make checkpoint on new task (#3834)
* feat: Make checkpoint on new task

Ensures that invoking the `newTaskTool` always creates a checkpoint, even if no files have changed. This provides a consistent state snapshot before a sub-task is initiated.

* refactor: remove delay

---------

Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-05-28 13:13:42 -04:00
Chris Estreich
e66136f1aa
Add a new @roo-code/types package and use it everywhere (#3912) 2025-05-26 12:06:45 -07:00
Matt Rubens
2053d27d63
Default to full file reads (#3936) 2025-05-24 15:17:48 -04:00
Matt Rubens
ca85162235
Handle partial messages in the codebase search tool (#3934) 2025-05-24 14:33:29 -04:00
Daniel
61e122dc34
Codebase indexing (Clean history) (#3137)
* feat: apply changes from local main

* fix: add missing types

* feat: deduplicate code blocks coming out of parser

* feat: implement a cache manager to improve cache handling

* refactor: move code index service initialization to extension and remove await from indexing process

* fix: return undefined instead of throwing if no workspace is detected

* feat: allow auto approve if it is active for read tools

* refactor: improve UI of the results and allow opening the ranges directly in the editor

* refactor: use dependency injection to improve performance

* feat: implement result filtering by directory path

* refactor: centralize path normalization logic

* refactor: remove unnecessary barrel file

* refactor: prevent restarting the service if no settings change

* fix: the indexing process should never be awaited

* refactor: cleanup unused method

* refactor: remove batch limits for ollama

* refactor(parser): simplify method signatures and improve chunking logic

- Remove redundant min/max chars parameters
- Add better handling for oversized lines
- Improve chunking logic with segment handling
- Clean up method signatures and parameter ordering

* fix(settings): make select inputs full width in CodeIndexSettings

* refactor: increase max list file limit

* feat(ui): improve codebase search result display formatting

* test: add tests for cache and config managers

* test: create unit tests for parser and scanner

* feat(parser): improve segment hash uniqueness

- Added startCharIndex to segment hash calculation in _chunkTextByLines
- Track character position when splitting oversized lines
- Ensures unique identification of segments from same line

* feat(file-watcher): add error logging and optional ignoreController injection

* fix: allow getting the state if the service is disabled

* fix: set the embedding models when cline provider is initialized

* feat: use zod to validate form

* feat(file-watcher): enhance file watcher for batched deletions and improved vector store interactions

Improve file watcher to handle file deletions in batches and optimize vector store operations.

* feat(CodeIndexSettings): move OpenAI key input to a conditional rendering block

* feat(CodeIndexSettings): update button visibility based on indexing status

* feat(file-watcher): refactor vscode mock and enhance file watcher tests

* fix(CodeIndexManager): do not await startIndexing on configuration changes

* feat(types): add codeIndexOpenAiKey and codeIndexQdrantApiKey to ProviderSettings and IpcMessage

* feat(FileWatcher): enhance file processing with batch operations and new status handling

* fix(webviewMessageHandler): handle errors during CodeIndexManager initialization

* refactor(CodeIndexManager): streamline service creation by consolidating into a single method

* feat(CodeIndex): implement minimum search score configuration and update search methods

* refactor(CodeIndexSettings): replace ApiConfiguration with ProviderSettings and update related methods

* refactor: move contants to centralized file

* refactor(constants): rename CODEBASE_INDEX_SEARCH_MIN_SCORE to SEARCH_MIN_SCORE

* feat(QdrantVectorStore): enhance search functionality with new query structure and indexing

* feat(FileWatcher): implement batch processing and retry logic for upserting points

* fix(CodeIndexSettings): rename setProviderSettingsField to setApiConfigurationField and move model label

* fix(ChatRow): remove limit from search query messages

* refactor(CodebaseSearchResult): remove unused props from component

* feat: implement batch processing for file events in FileWatcher

- Introduced a new mechanism to accumulate file events (create, change, delete) and process them in batches.
- Added debounce functionality to optimize processing frequency.
- Emitted events for batch processing start, progress updates, and completion with detailed summaries.
- Refactored existing processing logic to handle batch deletions and upserts efficiently.
- Enhanced error handling and logging for better traceability during batch operations.

* feat(CodeIndex): implement batch processing and update progress reporting

* fix: define a default url for qdrant

* feat(CodeIndexManager): add initialization check and update startIndexing logic

* feat(CodeIndexSettings): validate Qdrant URL and update settings commitment logic

* feat: refactor progress calculation and update progress bar rendering

* refactor: remove webview provider and related methods

* fix: simplify indexing status update by directly using update values

* feat: integrate .gitignore support into file processing and scanning logic

* fix: update clearCacheFile method to write an empty object instead of deleting the cache file

* Revert this

* Run prettier

* fix: add new dependencies for qdrant client and directory scanner

* feat: add codebase search functionality to localization files

* feat: add localization strings for codebase indexing settings

* feat: integrate CodeIndexSettings into ExperimentalSettings and update settings localization

* refactor: remove console logs from various components for cleaner output

* feat: enhance capabilities section and codebase search tool description

* feat: add code indexing localization for multiple languages

* fix: correct indentation for CodeIndexSettings component in ExperimentalSettings

* refactor: update unit tests to properly test current functionality

* feat: add mock implementation for p-limit and update Jest config

* feat: track file creation, change, and deletion events in accumulatedEvents

* refactor: simplify file watcher tests by removing waitForFileProcessingToFinish and using direct event accumulation

* refactor: mock ContextProxy's getValue method to return current config name in ClineProvider tests

* refactor: mock missing properties required by codebase indexing manager

---------

Co-authored-by: cte <cestreich@gmail.com>
2025-05-23 19:07:19 -06:00
Noritaka Kobayashi
6a6df08fbd
refactor: import multiple times (#3745) 2025-05-20 09:19:44 -04:00
Chris Estreich
d3c469391f
Show LLM streaming file write content (#3241) 2025-05-13 09:47:33 -07:00