Add a new configurable setting to control command execution delays in terminals.
When set to a non-zero value, this adds a sleep delay after command execution
via PROMPT_COMMAND in bash/zsh and start-sleep in PowerShell.
The default value is 0, which disables the delay completely. This setting
replaces the previous hardcoded delay of 50ms that was added as a workaround
for VSCode bug #237208.
Fixes: #2017
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* Directly use provider rateLimitSeconds and remove uneeded default
* remove a bunch of unused rateLimitSeconds references
* rateLimitSettings field def in GlobalSettingsRecord isn't needed for migration
Implements a solution for the Vite port collision issue that allows easier development of Roo across multiple instances of VSCode in different Roo repository directories.
This may also fix crashes and strange behavior between multiple running instances that would otherwise create port conflicts. This is solved using the following automated process:
- When Vite automatically selects an alternative port, a custom plugin automatically writes the port to a '.vite-port' file in the repository root
- ClineProvider automatically reads the port from this file, falling back gracefully to port 5173 if the file doesn't exist
- No user intervention is necessary as the entire process is handled automatically
- Added detailed logging for debugging
- Added .vite-port to .gitignore
The extension now connects to the correct Vite development server port automatically, even when the default port (5173) is already in use.
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
Co-authored-by: Eric Wheeler <roo-code@z.ewheeler.org>
* Remove unused imports
* Restore protected status for mcpHub property
* More mcpHub tidy-up
* Remove need for access to private "view" property
Increase type flexibility so we can directly use postMessageToWebview()
* Make ensureCacheDirectoryExists private again
expose new public writeDataToCache() method to commonize code.
also decided to leave updateApiConfiguration as public, since widely used in diverse ways.
* Match naming of readModelsFromCache.
Symmetric naming of functions that complement each other.
* Decision: Leave readModelsFromCache as public
* Make updateGlobalState and setGlobalState private again
Stop using deprecated (private) method. Use contextProxy set/getValue methods instead.
Utility functions provided for brevity.
* Add clarifying comment to explain presence of utility functions
* Prefer this/provider.log over outputChannel.appendLine
log is already public, outputChannel should be private.
But also prefer log internally for the additional value of console logging, plus code brevity.
* Lock down access to properties as far as reasonably possible
* PR feedback - don't relax type checks
---------
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
Problem:
Closing auxiliary windows (e.g., from "open in editor") could prematurely dispose the shared singleton McpHub instance, shutting down MCP servers unexpectedly while other panels (like the sidebar) might still be active.
Solution:
Implemented reference counting directly within the McpHub class to manage its own lifecycle based on active clients (ClineProvider instances).
- Added `refCount`, `registerClient()`, and `unregisterClient()` methods to McpHub.
- McpHub now disposes itself only when the last registered client unregisters (`refCount` reaches 0).
- ClineProvider instances now call `mcpHub.registerClient()` upon initialization and `mcpHub.unregisterClient()` upon disposal.
- Removed the direct `mcpHub.dispose()` call from ClineProvider.dispose.
Benefit:
This ensures the shared McpHub instance remains active as long as at least one ClineProvider instance is using it. Cleanup now correctly occurs only when the last provider is closed or during full extension deactivation. This centralizes the resource's lifecycle logic within the resource class itself.
Files Changed:
- src/services/mcp/McpHub.ts
- src/core/webview/ClineProvider.ts
* Browser Automation Improvements
* Added multi-tab remote Chrome support
* Added support for hover
* Properly caching remote browser host in global state
* Cleanup functions
* Updated for changes after merge
* Added www. exception for common tabs
* Update src/core/webview/ClineProvider.ts
* Revert README changes
---------
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
* support project-level mcp config
* switch the toasts to English
fix test
(cherry picked from commit 26941dcaae)
* add i18n for project mcp
(cherry picked from commit 792a8225c1)
* optimize McpHub.ts
* fix merge main into head
* fix project mcp
* partial update mcp config
* fix toggleToolAlwaysAllow
* Modify mcp to support project and global of the same name
* fix ut
* remove unused mcp log
* i18n for mcp
* Revert README changes
---------
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
* feat: add pinning functionality for API configurations
Added the ability to pin/unpin API configurations, enabling prioritized appearance in dropdown menus.
- modified state management to support storing pinned configurations persistently.
- Updated UI components to display and toggle pin states
- Adjusted backend handling for syncing pinned configuration states across sessions.
* refactor: add support for loading API configurations by ID
- Introduced a new method `loadConfigById` in `ConfigManager` to load API configurations using their unique ID.
- Refactored the dropdown and pin logic to work with ID
- Added tests to verify the new functionality for loading configurations by ID.
* fix: preserve existing API config ID on updates
- Ensure that the existing ID is retained when updating an API config.
- Prevents unintentional ID changes during configuration updates.
* Fix theme issues
---------
Co-authored-by: james <james@systemslogiq.com>
Co-authored-by: cte <cestreich@gmail.com>
* feat: Add the openAiR1FormatEnabled field to enable this switch in OpenAI compatible mode to support the current QWQ and future additional classes of R1 models.
* feat: Add the openAiR1FormatEnabled field to enable this switch in OpenAI compatible mode to support the current QWQ and future additional classes of R1 models.
* fix: add miss i18n
* fix: add miss i18n
* fix: remove the redundant call
---------
Co-authored-by: xiong <yueminxiong.xym@alibaba-inc.com>
* Add Requesty OAuth flow
* New 1-click onboarding flow
* Requesty: Use correct default model info
* When called from the onboard flow, created the default profile
Glama OAuth handler changed for consistency.
* Add router images
* Shuffle the routers
* Translate
* Appease knip
---------
Co-authored-by: Daniel Trugman <dtrugman@gmail.com>
When previewing system instructions, getDiffStrategy was not receiving the
MULTI_SEARCH_AND_REPLACE flag, causing the instructions to show the wrong diff
strategy description. Now correctly passing the flag to ensure the proper diff
strategy description is shown in system instructions.
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* feat read file range
feat: add file truncation with code structure preview
Add configurable line limit for large file handling with source code structure preview. This improves performance and memory usage while maintaining code readability.
Key changes:
Add maxReadFileLine setting (default: 4500) with UI controls
Create efficient line counter utility using streams
Add parseSourceCodeDefinitionsForFile for single file parsing
Show truncation notice with code structure for large files
Add comprehensive tests for new functionality
Move file extensions to shared constant
add line number
pr comment
Return definition ranges from tree-sitter
make treesitter always add line
add line number to rg search
enhance tree siter output & fix test
update snapshot
fix test
* Add translations, tweak range
---------
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
* batch clear history
* catch Task not found error
* fix deleteMultipleTasksWithIds
* add i18n for batch clear history
* add i18n for history
* debug
* remove unused logs
* fix trans
* fix trans
* Cleanup
---------
Co-authored-by: aheizi <aheiz@outlook.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
* fix: clarify PowerShell command completion workaround
The command completion detection approach in PowerShell requires an output
string to allow duplicate commands to execute in some versions of code.
Update the string to explicitly indicate it is a Roo PowerShell workaround,
making it clear in terminal output that this is intentional behavior rather
than a side effect.
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* cleanup: improve terminal logging and error handling
No functional changes - purely improves error handling and logging clarity.
Terminal.ts:
- Handle undefined process state in setActiveStream without throwing
- Add terminal IDs to all log messages for better traceability
- Improve error message clarity in shell integration timeout
TerminalRegistry.ts:
- Reorganize shell execution event handlers for better flow
- Log shell execution events before processing for reliable debugging
- Add detailed context to terminal not found scenarios
- Include command and execution state in error messages
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* feat: make terminal shell integration timeout configurable
Users with long shell startup times were encountering "Shell Integration Unavailable" errors due to the hard-coded 4s timeout. The timeout is now configurable through Advanced Settings (1-60s).
Thanks @filthy for troubleshooting and @kiwina for suggesting making the timeout configurable.
Fixes#1654
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* critical fix: race condition that prevents command completion
Terminal running state is now managed in TerminalRegistry instead of Terminal to prevent race between stream close and shell completion.
While this race may not trigger on current VSCode versions, newer releases with additional terminal fixes may expose the issue. This proactively prevents "Shell execution end event received, but process is not running" errors.
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* fix: improve command execution path reporting
Enhance clarity of command execution context and error reporting:
- Check to see if the directory changed because of the command
- Clarify execution path message
- Add explicit message when command exits with non-zero code
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* system instructions: clarify terminal directory operations
Clear guidance for the AI system on:
- Working directory constraints
- Path handling requirements
- Tool vs terminal directory behavior
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
* test: update snapshots for system prompt working directory instructions
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>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
feat: add multiple workspaces support
- Add getWorkspacePath function to centralize workspace directory path retrieval
- Use the new workspace directory retrieval logic in Cline, Mentions, ClineProvider, and WorkspaceTracker
- Update WorkspaceFile on tab switch and prevent redundant updates by checking prevWorkSpacePath
- Fix the bug that loads the contents of the previous tab when quickly switching tabs
- Optimize getWorkspacePath return value for better reliability
Co-authored-by: xiong <yueminxiong.xym@alibaba-inc.com>
* Add text-to-speech functionality
* Add speed config option to text-to-speech
* Fix test case for tts speed slider
* Fix test case for tts speed slider (really)
* Disabled error message logging in tts.ts
* ignore markdown and mermaid diagrams in TTS
* add ttsEnabled and ttsSpeed to GlobalStateKey
* fix failing webview test for save button
* Translations
* Fix tests
---------
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>