Fixes#5188
This commit resolves a race condition where user messages would sometimes
or always disappear after AI file edits, depending on whether the edit
succeeded or failed.
Root Cause:
The webview message handler was not properly awaiting the handleWebviewAskResponse
call, creating a race condition where subsequent user messages could be lost
if the AI was still processing or in an unstable state.
Solution:
1. Fixed webviewMessageHandler.ts to properly await handleWebviewAskResponse
and added error handling to prevent message loss even during failures
2. Enhanced Task.ts to immediately save user feedback messages to chat history
for messageResponse types, ensuring persistence regardless of timing
Changes:
- src/core/webview/webviewMessageHandler.ts: Added await and try-catch for askResponse handling
- src/core/task/Task.ts: Enhanced handleWebviewAskResponse to immediately save user feedback
- src/core/webview/__tests__/message-race-condition.test.ts: Added comprehensive test coverage
The fix ensures:
- Proper async handling prevents race conditions
- User messages are immediately persisted to chat history
- Graceful error handling prevents message loss during failures
- Both success and failure scenarios are properly handled
## Fix terminal keyboard shortcut error when adding content to context
**Fixes:** [#2276](https://github.com/RooCodeInc/Roo-Code/issues/2276)
**Problem:**
- Using keyboard shortcuts to add terminal content to context threw error: "Cannot read properties of undefined (reading 'selection')"
- Context menu worked correctly, but keyboard shortcuts failed
**Root Cause:**
- Command handler accessed `args.selection` without null checking
- When triggered via keyboard shortcut, VS Code passes `undefined` for `args` parameter
- When triggered via context menu, VS Code passes an object with `selection` property
**Solution:**
- Changed `args.selection` to `args?.selection` using optional chaining
- Maintains existing fallback behavior when no selection is available
- Preserves backward compatibility with context menu functionality
**Files Modified:**
- `src/activate/registerTerminalActions.ts` - Added null safety for args parameter
**Testing:**
- ✅ Keyboard shortcuts now work without errors
- ✅ Context menu functionality preserved
- ✅ Fallback to `Terminal.getTerminalContents()` works in both scenarios
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>
* fix: resolve Claude Code token counting inefficiency and enable caching (#5104)
- Remove 1.5x fudge factor from Claude Code token counting
- Enable prompt caching support for all Claude Code models
- Add comprehensive tests for token counting and caching
- Update existing tests to reflect accurate token counting
This fixes the extreme token inefficiency where simple messages would
jump from ~40k to over 60k tokens, causing API hangs when approaching
the artificial 120k limit. Claude Code now properly utilizes its full
200k context window with accurate token counting.
* fix: address PR review comments
- Extract IMAGE_TOKEN_ESTIMATE as a named constant for clarity
- Update token counting tests to use exact counts instead of ranges for deterministic testing
- Fix test expectations to match actual tokenizer output
* Remove token counting changes, keep only cache support
- Removed custom countTokens override from claude-code.ts
- Deleted claude-code-token-counting.spec.ts test file
- Kept cache token collection and reporting functionality
- Kept supportsPromptCache: true for all Claude Code models
- Kept claude-code-caching.spec.ts tests
This focuses the PR on enabling cache support without modifying token counting behavior.
* fix: update webview test to expect supportsPromptCache=true for Claude Code models
---------
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
* dotroo: improve translation workflow to reduce unnecessary file reads
Update translation workflow guidelines to use search_files instead of reading
each translation file individually. This approach is more efficient and
reduces context token usage while maintaining translation accuracy.
The improved workflow:
- Uses search_files to find JSON structure in translation files
- Creates proper context for apply_diff without reading every file
- Only reads specific files when their structure differs
- Validates changes with the missing translations script
Fixes: #5125
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* Update 001-general-rules.md
---------
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
Co-authored-by: Eric Wheeler <roo-code@z.ewheeler.org>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
* Fix temperature parameter error for Azure OpenAI reasoning models
* Fix tests: Update O3 family model tests to expect temperature: undefined
- Updated failing tests in openai.spec.ts to expect temperature: undefined for O3 models
- This aligns with the PR changes that remove temperature parameter for Azure OpenAI o1, o3, and o4 models
- All 4 previously failing tests now pass
---------
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
* fix: handle YAML parsing edge cases in CustomModesManager
- Add BOM (Byte Order Mark) stripping for UTF-8 and UTF-16
- Normalize invisible characters including non-breaking spaces
- Replace fancy quotes and dashes with standard characters
- Remove zero-width characters that can cause parsing issues
- Add comprehensive test coverage for all edge cases
This fixes the YAML parsing limitations documented in PR #237 by
implementing proper preprocessing before parsing YAML content.
* fix: address PR review comments
- Fix BOM handling to correctly handle UTF-16 (all BOMs appear as \uFEFF when decoded)
- Optimize cleanInvisibleCharacters with single regex pass for better performance
- Prevent duplicate error messages by marking errors as already handled
- Refactor test file to use mockFsReadFile helper function to reduce duplication
- Fix YAML indentation in tests (use spaces instead of tabs)
- Add ESLint disable comment for character class warning (regex is correct)
* fix: prevent YAML line breaks by setting lineWidth to 0
- Added lineWidth: 0 option to all yaml.stringify() calls
- Prevents automatic line wrapping at 80 characters
- Improves readability of YAML output for long strings
- Applied to CustomModesManager, SimpleInstaller, and migrateSettings
* fix: add defaultStringType option to yaml.stringify calls
- Added defaultStringType: 'PLAIN' to minimize formatting changes
- This helps preserve plain scalars when possible
- Works alongside lineWidth: 0 to prevent automatic line wrapping
* refactor: extract problematic characters regex as a named constant
- Move regex pattern to PROBLEMATIC_CHARS_REGEX static constant
- Add comprehensive documentation for each character range
- Improves maintainability and makes the pattern reusable
* test: add comprehensive edge case tests for YAML parsing
- Add test for mixed line endings (CRLF vs LF)
- Add test for multiple BOMs in sequence
- Add test for deeply nested structures with problematic characters
- Ensures robustness across different real-world scenarios
* feat(i18n): add error messages for custom modes in multiple languages
* fix: update tests to expect i18n keys instead of hardcoded strings
- Update CustomModesManager tests to expect translation keys
- Fix YAML edge case tests to match new i18n error messages
- All tests now pass with the i18n integration
* refactor: use strip-bom package and fix error handling
- Replace custom stripBOM method with existing strip-bom package
- Fix duplicate error handling in parseYamlSafely by returning empty object instead of re-throwing
- Addresses review comments from PR #5099
---------
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
* fix: resolve intermittent reasoning content not displayed for Claude Code provider (#5111)
- Modified fallback logic in stream parsing to handle all message types, not just assistant messages
- Added proper parsing attempts for partial data before yielding
- Improved error logging to help debug streaming issues
- Added debug logging (controlled by DEBUG_CLAUDE_CODE env var) to trace message types
This ensures reasoning/thinking content from Claude 3.5 Sonnet 4.0 is properly displayed in all cases.
* fix: disable reasoning budget UI controls for Claude Code provider (#5111)
- Set supportsReasoningBudget to false for all Claude Code models
- Claude Code CLI doesn't support thinking/reasoning parameters
- UI controls were misleading users since they had no effect
* fix: update Claude Code models configuration
- Add missing requiredReasoningBudget: false to claude-3-5-sonnet-20241022 and claude-3-5-haiku-20241022
- Revert run.ts changes as they are not needed for fixing the UI issue
- The UI issue is resolved by properly disabling reasoning budget support in model configuration
* feat: add reasoning effort support to Claude Code models and integrate into model selection
---------
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
This PR adds filtering of git repository properties from telemetry data and includes git info in telemetry properties, with comprehensive tests.
Behavior:
PostHogTelemetryClient now filters out repositoryUrl, repositoryName, and defaultBranch from telemetry events.
ClineProvider includes git repository information in telemetry properties, filtered by clients.
Functions:
Added isPropertyCapturable() in BaseTelemetryClient to allow property filtering.
Implemented getGitRepositoryInfo() and getWorkspaceGitInfo() in git.ts to extract git info.
Tests:
Added tests for isPropertyCapturable() in PostHogTelemetryClient.test.ts.
Added tests for getGitRepositoryInfo() and getWorkspaceGitInfo() in git.spec.ts.
Co-authored-by: Bruno Bergher <me@brunobergher.comexport>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
* 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>
* Added Enable Roo Code quick fixes setting to disable quick fixes.
* Fix: Address PR review comments and failing tests for #4878
* Fix localization consistency and add test coverage
- Add missing period to French translation for consistency
- Add test case for disabled enableCodeActions setting
- Fix existing test mock setup for proper configuration handling
---------
Co-authored-by: hannesrudolph <hrudolph@gmail.com>
Co-authored-by: RooCode <roocode@RooCodes-Virtual-Machine.local>