- Extract magic numbers into named constants (VIEWPORT_BUFFER_AT_BOTTOM, VIEWPORT_BUFFER_SCROLLED_UP, VIEWPORT_BUFFER_TOP)
- Add detailed comments explaining how followOutput='smooth' relates to the scroll lock fix
- Implement debouncing (300ms) for isAtBottom state to prevent rapid viewport buffer changes
- Add hysteresis to avoid performance issues during rapid scrolling
This maintains the balance between memory efficiency and proper scroll lock behavior while addressing all reviewer concerns.
- Use dynamic increaseViewportBy bottom value based on scroll position
- When at bottom, use larger value (10,000px) to maintain scroll lock
- When scrolled up, use smaller value (1,000px) for memory efficiency
- Add followOutput='smooth' for better scroll behavior
- Fixes scroll lock issues introduced in PR #6697
* Reorganizes the task header for cleanliness and in preparation for Cloud link
* More task ehader visual tweaks
* Translations for new task header
* Fixes TaskHeader color
* Removes stray string
* Fixes tests
* Iterates on visual details
* More visual tweaks
* Missing localization call
* Fixes tests
---------
Co-authored-by: Bruno Bergher <me@brunobergher.comexport>
* feat: Implement code indexing support multi-folder workspaces similar to task history
* fix: add missing mock for onDidChangeActiveTextEditor in tests
* fix: prevent empty mode names from being saved (fixes#5766)
- Add frontend validation in ModesView to prevent empty names from being saved
- Add onBlur handler to restore original name if field is left empty
- Add backend validation in CustomModesManager.updateCustomMode using modeConfigSchema
- Provide user feedback when validation fails
- Trim whitespace from mode names before validation
This prevents YAML parsing errors caused by empty mode name fields.
* fix: improve UX by allowing users to empty mode name field
- Remove restriction that prevented users from emptying the name field
- Remove onBlur handler that automatically restored original name
- Allow backend validation to handle empty names and show appropriate errors
- Users can now type freely but invalid saves are prevented by backend validation
Addresses feedback from @daniel-lxs in PR #5767
* fix: allow emptying mode name field but prevent saving when invalid
- Modified onBlur handler to check if name is empty before saving
- If empty, revert to original name instead of saving empty value
- This provides better UX as requested in PR review
* fix: add proper JSON formatting to source map writes for Windows compatibility
---------
Co-authored-by: Roo Code <roomote@roocode.com>
* feat: Before requesting, ensure checkpoint is initialized
* Generate a checkpoint before modifying the code
* refactor: streamline checkpoint handling and enhance getCheckpoints method
* Blocked waiting for checkpoint initialization timing to change
* cancel checkpoint restore limit
* fix: ensure checkpoint service is undefined on initialization error and improve checkpoint diff handling
* refactor: simplify checkpoint service initialization and cleanup unused variables in CheckpointMenu
* fix: prevent race condition in checkpoint service initialization
- Only assign service to cline.checkpointService after successful initialization
- Add proper cleanup on initialization failure
- Prevents service from being in inconsistent state if Git check fails
* fix: remove checkpoint save from presentAssistantMessage for update_todo_list case
---------
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
- Added organizationSettingsVersion to ExtensionState type
- Modified ClineProvider to include version in state sent to webview
- Updated CloudService callback to trigger marketplace refresh on settings change
- Added logic to MarketplaceView to detect version changes and request data refresh
- Added comprehensive tests for the new functionality
This ensures marketplace items (MCPs and modes) stay in sync when organization settings are updated in the cloud.
---------
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: John Richmond <5629+jr@users.noreply.github.com>
* feat: add prompt caching support for LiteLLM (#5791)
- Add litellmUsePromptCache configuration option to provider settings
- Implement cache control headers in LiteLLM handler when enabled
- Add UI checkbox for enabling prompt caching (only shown for supported models)
- Track cache read/write tokens in usage data
- Add comprehensive test for prompt caching functionality
- Reuse existing translation keys for consistency across languages
This allows LiteLLM users to benefit from prompt caching with supported models
like Claude 3.7, reducing costs and improving response times.
* fix: improve LiteLLM prompt caching to work for multi-turn conversations
- Convert system message to structured format with cache_control
- Handle both string and array content types for user messages
- Apply cache_control to content items, not just message level
- Update tests to match new message structure
This ensures prompt caching works correctly for all messages in a conversation,
not just the initial system prompt and first user message.
* fix: resolve TypeScript linter error for cache_control property
Use type assertion to handle cache_control property that's not in OpenAI types