- 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
* 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>
* feat: Add file context tracking system
This commit adds a comprehensive file context tracking system that monitors file operations (reads, edits) by both Roo and users. The system helps prevent stale context issues and improves checkpoint management.
Key features:
- Track files accessed via tools, mentions, or edits
- Monitor file changes outside of Roo using file watchers
- Store file operation metadata with timestamps
- Trigger checkpoints automatically when files are modified
- Prevent false positives by distinguishing between Roo and user edits
The implementation includes:
- New FileContextTracker class to manage file operations
- Type definitions for file metadata tracking
- Integration with all file-related tools
- File mention tracking in the mentions system
- Improved checkpoint triggering based on file modifications
* Update src/core/context-tracking/FileContextTracker.ts
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Update src/core/context-tracking/FileContextTracker.ts
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* test: Add mocks for getFileContextTracker in Cline tests
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
* fix: addLineNumbers handling of empty content
Empty files should not have line numbers, but non-empty files with empty content at a specific line offset should.
- If content is empty, return empty string for empty files
- If content is empty but startLine > 1, return line number for empty content at that offset
This ensures that the model does not think the file contains a single empty line.
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* refactor: improve readFileTool XML output format
- Remove unnecessary XML indentation that could confuse the model
- Separate file content from notices and errors using dedicated tags
- Add line range information to content tags
- Handle empty files properly with self-closing tags
- Add comprehensive test coverage
Fixes#2278
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* fix: always show line numbers in read_file XML output
- Always display line numbers in non-range reads
- Improve XML formatting with consistent newlines for better readability
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* test: update tests to match new XML format with line numbers
- Update test expectations to match the new XML format with newlines
- Update tests to expect line numbers attribute in content tags
- Modify test assertions to check for the correct line range values
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* fix: consistent blank line handling in addLineNumbers
- Add newline to all output
- Handle trailing newlines and empty lines consistently
- Add test cases for blank lines:
- Multiple blank lines within content
- Multiple trailing blank lines
- Only blank lines with offset
- Trailing newlines
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* test: use actual addLineNumbers in read-file-xml tests
- Modified extract-text mock to preserve actual addLineNumbers implementation
- Removed mock implementation of addLineNumbers
- Updated test data to account for trailing newline
- Removed unnecessary mock verification
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* test: ensure actual addLineNumbers function is called in tests
- Replace direct mocking of addLineNumbers with spy on actual implementation
- Add verification to ensure the real function is called when appropriate
- Add skipAddLineNumbersCheck option for cases where function should not be called
- Update test cases to use appropriate verification options
- Fix numberedFileContent to include trailing newline for consistency
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* fix: modify readLines to process data directly instead of line by line
- Direct data processing provides more accurate results by preserving exact content with carriage returns
- Improved performance through minimal buffering and efficient string operations
- Use string indexes to find newlines while maintaining their original format
- Handle all edge cases correctly with preserved line endings
- Add tests for various edge cases including empty files, single lines, and different line endings
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* test: remove unused mockInputContent variable
Remove unused variable declaration to appease ellipsis-dev linter requirements.
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>
* refactor: Change read_file result format to XML
Modifies how the result of the `read_file` tool is presented
in the conversation history sent to the AI model.
Previously, the format was:
[read_file for 'path/to/file'] Result:
{content_or_error}
This commit changes the format to use XML tags for better
structure and potentially easier parsing by the model:
<file>
<path>path/to/file</path>
<content>
{content_or_error}
</content>
</file>
This change only affects the `read_file` tool result formatting
within the user context message constructed in `src/core/Cline.ts`.
Other tool result formats remain unchanged.
* fix: Update error message for better clarity in multi-search-replace strategy
Refines the error message returned when no sufficiently similar match is found during the multi-search-replace operation. The message now includes a clearer instruction to use the read_file tool for obtaining the latest file content before attempting to apply the diff again.
* refactor: Update readFileTool to return results in XML format
Modifies the `readFileTool` function to format the output as XML, enhancing the structure of the returned file content. This change aligns with previous updates to ensure consistent result formatting across tools.
* refactor: Simplify result handling for tool responses in Cline
This update refines the handling of tool responses in the `Cline` class by removing the XML formatting for `read_file` results and consolidating the logic for pushing results to the user message content. The changes ensure that all tool results are processed uniformly, improving code clarity and maintainability.
* test: Update read_file tests to validate XML formatted results
This commit modifies the assertions in the `read_file` tool tests to check for the expected XML format in the results. The changes ensure that the output structure aligns with recent updates to the tool's response formatting, enhancing test accuracy and reliability.
* test: Refactor assertions in read_file tests to use expected XML variable
This commit updates the `read_file` tool tests to utilize a predefined variable for the expected XML output, improving readability and maintainability of the test code. The changes ensure consistency in the expected results across multiple test cases.