This PR addresses Issue #10239 by:
1. Adding line_range parameter support to simpleReadFileTool
- Models using the simple read_file tool can now use <line_range>start-end</line_range>
- Enables incremental file reading for models that previously could not continue reading truncated files
2. Improving truncation notices across both tools to include:
- The exact next line number to continue from
- A concrete example of the syntax to use (e.g., <line_range>501-1000</line_range>)
3. Updated tool description in simple-read-file.ts to document the new parameter
Files modified:
- src/core/prompts/tools/simple-read-file.ts
- src/core/tools/simpleReadFileTool.ts
- src/core/tools/ReadFileTool.ts
- src/shared/tools.ts (added line_range to toolParamNames)
* 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
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.