- 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.
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.
* 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>
* 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
* 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
* 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
* 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>
* 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>
* 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>
* 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
- 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
* 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>
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>
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>
* 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>
* 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>
* 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.