Introduces a new skill definition for the `code-simplifier` in the `.cline/skills` directory. This skill provides a framework for refining code clarity, consistency, and maintainability while strictly preserving functionality and adhering to project-specific standards.
* chore: add grit rule to enforce Logger service over console calls
Add a new Grit linting rule that detects direct console method usage
(log, debug, error, warn, info) and prompts developers to use the
Logger service instead for consistent logging practices.
The rule is configured in biome.jsonc to apply to most source files
while excluding test files, webview-ui, evals, standalone, e2e tests,
and scripts where direct console usage may be acceptable.
* support variadic args
* wip: migrate console to Logger
* migrate rest of console logger
* Switch to Logger
* Migrations
* shared
* use shared
* revert format change
* Update tests to stub Logger instead of console
* verbose in dev mode
Add vscode-remote: scheme to the valid URI filter for drag & drop operations.
This allows files from SSH Remote workspaces to be dropped into the chat.
Fixes#7606
- cline command permission flag can now parse subshells correctly and
validate that subshells don't contain disallowed commands.
Co-authored-by: Max Paulus 🥪 <max@cline.bot>
- Users with ChatGPT Plus or Pro subscriptions can now use GPT-5 models directly through Cline without needing an API key. Authentication is handled via OAuth through OpenAI's authentication system.
- Grok models are now moving out of free tier and into paid plans.
- Introduces comprehensive Jupyter Notebook support for Cline, enabling AI-assisted editing of `.ipynb` files with full cell-level context awareness.
- Bugs in DiffViewProvider for file editing
- Ollama's recommended models to use correct identifiers
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* feat(rules): Write technical design / implementation plan doc.
* update frontmatter plan
* feat(rules): Initial implementation based on plan doc.
* feat(rules): Add tool-call path harvesting for path-scoped Cline Rules.
* chore(rules): exclude internal paths-frontmatter plan doc from PR
* fix(rules): use latest user message for paths frontmatter context
* feat(rules): Implement conditional_rules_applied say type.
* feat(rules): changes as per Cline's code review feedback
* feat(rules): npm run changeset
* feat(rules): Changes as per ellipsis-dev feedback.
* feat(rules): Changes as per code review feedback (i.e. don't bloat the task context).
* feat(rules): Fix failing unit tests.
* refactor(diff): return result object with line tracking metadata
Change constructNewFileContent to return an object containing newContent
and line number information instead of just the string content. Add
charIndexToLineNumber helper function to support tracking where changes
occur in the file.
Update all callers and tests to access the newContent property from
the result object.
* minor fix
* fix: hide line numbers when not available from backend
* chore: add changeset
* feat: add startLineNumbers support to ApplyPatchHandler
* fix: split V4A @@ chunks into separate Patch objects for proper line numbers
* fix(DiffEditRow): preserve +/- prefix in diff line display for backwards compatibility
* fix line numbers
* feat: update free onboarding models with Kat Coder Pro and Devstral
- Replace xAI Grok Code Fast 1 with KwaiKAT Kat Coder Pro as primary free model
- Add Mistral Devstral 2512 as additional free model option
- Update model specifications (context window, image/cache support)
* Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix initial prompt bugs
- going straight to act wasn't working in interactive mode.
- slash command autocomplete wasn't working in the initial prompt
- refactored some naming to be more clear
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
---------
Co-authored-by: Max Paulus 🥪 <max@cline.bot>
Co-authored-by: CandiedUniverse <132302818+candieduniverse@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* fix: restore switchToSpecializedEditor for Jupyter notebook diff views
This restores the notebook diff view functionality that was accidentally
removed during rebase. The method was incorrectly identified as dead code,
but it was being called in update() when isFinal is true.
Restored functionality:
- Abstract method definition in DiffViewProvider
- Call to switchToSpecializedEditor() in update() after final content
- Full implementation in VscodeDiffViewProvider for notebook diff views
- Temporary file management for modified content
- File system watcher for synchronization
- Proper cleanup in resetDiffView()
- No-op implementations in ExternalDiffViewProvider and FileEditProvider
- Test stub in DiffViewProvider.test.ts
* fix: open notebooks in Jupyter editor after save, strip outputs for LLM
- Override showFile in VscodeDiffViewProvider to open .ipynb files
with the Jupyter notebook editor instead of leaving stale diff view
- Remove notebook check that was skipping showFile in base class
- Add getOriginalContentForLLM() to return sanitized notebook content
- Strip notebook outputs from finalContent to reduce LLM context size
fix: sanitize notebook content in write responses to prevent context explosion
Previously, after editing a notebook, the full file content (including all
base64-encoded images and HTML table outputs) was sent back to the LLM in
the <final_file_content> response. This caused context to explode to ~200K
tokens for simple edits on notebooks with rendered outputs.
Changes:
- Add stripAllOutputs option to sanitizeNotebookForLLM()
- Apply sanitization in DiffViewProvider.saveChanges() for finalContent
- Add getOriginalContentForLLM() for diff error responses
- Strip all outputs (not just images) in write paths since outputs
aren't needed for editing - they regenerate when cells run
Results: 95% reduction in context usage for notebook write responses
(196KB → 9KB in testing).
* chore: add changeset for Jupyter notebook diff view fix
* fix: show error message when Jupyter extension is missing for notebook diffs
* refactor: move os require to top-level import
---------
Co-authored-by: Max <maxpaulus43@gmail.com>
Adds a detailed comment explaining that each VS Code window has its own
StateManager cache, which is why settings like plan/act mode don't sync
between running instances. The cache is populated from disk only during
initialize() and never re-read, providing natural isolation.
* fix: prevent duplicate diff errors when parallel tool calling is enabled
When a `replace_in_file` diff fails during streaming with parallel tool
calling enabled (GPT-5/Codex models), the same error message was being
added to userMessageContent on each streaming chunk, causing hundreds of
duplicates and context window overflow.
Root cause: The duplicate prevention added in 09276ebf4 used the
`didAlreadyUseTool` flag, but this flag is intentionally not set when
parallel tool calling is enabled (per 00e9d6f52). This was because
`didAlreadyUseTool` is designed to block subsequent tools, which is the
opposite of what parallel tool calling needs.
The fix adds per-call_id tracking via `diffErrorPushedForCallIds` Set:
- Track which specific tool calls have already had their error pushed
- Works for both parallel and non-parallel tool calling
- Different parallel tool calls can each report their own errors
- Same call_id only pushes error once, regardless of streaming chunks
This is compatible with the parallel tool calling design because GPT-5
models (which auto-enable parallel tool calling) use native tool calling
and always have a call_id. The mechanism is separate from didAlreadyUseTool
which controls flow (blocking tools) vs this which prevents duplicates.
Related commits:
- 09276ebf4: fix: prevent duplicate error messages during streamed edit
tool failures (only worked when parallel tool calling disabled)
- 00e9d6f52: feat: add experimental parallel tool calling support
(deliberately excluded didAlreadyUseTool from parallel mode)
* test: add unit tests for diffErrorPushedForCallIds duplicate prevention
Tests cover:
- Basic Set behavior (initialization, tracking, clearing)
- Duplicate prevention logic for parallel tool calling
- Edge cases (empty/undefined call_id, rapid streaming chunks)
- Reset behavior between API requests
* Add changeset
* refactor: rename diffErrorPushedForCallIds to errorPushedForCallIds
Generalizes the tracking mechanism per reviewer feedback from @abeatrix.
The more generic name allows the same pattern to be reused for other
tool handlers that may need duplicate error prevention in the future,
not just diff-related errors.
No functional changes - just renaming.
When file operations use the approval flow (isFinal=false), the document
content was not being properly finalized before user approval. This caused
content duplication when shortening files - old content at the end was
preserved instead of being replaced.
Root cause: FileProviderOperations passed isFinal=false to
DiffViewProvider.update(), which:
1. Popped the last line (treated as "incomplete" for streaming)
2. Limited the replacement range to currentLine + 1
3. Skipped truncation of trailing content
Fix: Always pass isFinal=true to update() since the content IS complete.
The isFinal parameter in FileProviderOperations now only controls whether
to save after the update, not the update behavior itself.
This follows the philosophy of dd35448a9 by fixing at the source rather
than adding cleanup logic.
* style: improve OAuth success page design
* fix: hide thinking budget slider for OpenAI Codex provider
OpenAI Codex models use discrete reasoning effort levels (low/medium/high)
controlled via the global OpenAI Reasoning Effort setting, not token-based
thinking budgets like Anthropic models.
* fix: hide thinking toggle with display:none instead of disabled state
* fix: hide cost display for OpenAI Codex provider
Subscription-based provider has no per-token costs, so showing $0.00 is misleading.
* fix: disable delete button for favorited history item
- Add useMemo hook to memoize favorite state calculation, improving performance by avoiding repeated computations of `pendingFavoriteToggles[item.id] ?? item.isFavorited`
- Disable delete button for favorited items but keep delete button for standardized UI display
- Replace multiple inline favorite state checks with centralized `isFavoritedItem` variable for better code maintainability
- Simplify favorite toggle logic by using memoized value
This change ensures favorited items cannot be deleted and reduces unnecessary re-renders when favorite state is accessed.
* isFavoritedItem
* docs: fix outdated Ollama model names in documentation
Fixes#7918
- Updated qwen3-coder-30b to qwen2.5-coder:32b (correct identifier)
- Replaced devstral-small with codellama:34b-code (existing model)
- Changed ollama run to ollama pull for initial download
* chore: add changeset for Ollama model names fix
* Jupyter Notebook Enhancements
* fix: implement dynamic notebook instructions for replace_in_file
Leverages the new dynamic prompt infrastructure to conditionally inject Jupyter Notebook-specific instructions into the `replace_in_file` tool. This ensures that the model receives guidance on handling JSON structure in `.ipynb` files only when the `enhancedNotebookInteractionEnabled` setting is active, keeping the default prompt clean for other users.
- Added `enhancedNotebookInteractionEnabled` to global settings and system prompt context
- Updated `replace_in_file` tool to use a dynamic instruction function that appends notebook rules based on context
- Wired up state management to pass the setting value to the prompt builder
* refactor: unify notebook output sanitization across two code paths
Previously, context menu commands (Add to Cline, Explain, etc.) wiped ALL
notebook outputs, while file mentions preserved text and only truncated images.
Additionally, when outputs weren't cleared, massive base64-encoded image data
was sent directly to the LLM, flooding context with garbage.
Changes:
- Create shared notebook-utils.ts with sanitization logic
- Update extract-text.ts to use shared utility
- Update commandUtils.ts to sanitize instead of clearing outputs
Both paths now truncate base64 image data with "[IMAGE DATA TRUNCATED]"
while preserving useful text outputs like print statements and errors.
* feat(improve): unify prompt sending behavior for improveWithCline
Refactor improveWithCline to build a single prompt and handle sending uniformly: for notebooks, populate existing task if available and send immediately; otherwise, create new task. This unifies behavior across selected text and notebook contexts, removing dependency on sendAddToInputEvent and simplifying logic. Minor formatting tweaks in extension.ts for notebook context string.
* refactor: remove notebook_cell_json from proto, move notebook context to dedicated commands
The contributor's original implementation added notebook_cell_json to the
CommandContext proto, which was then populated in getContextForCommand() for
any notebook file when enhancedNotebookInteractionEnabled was set.
This couples notebook-specific functionality to the general command proto,
which feels heavy for a niche feature. Protos should stay clean and general.
Changes:
- Remove notebook_cell_json field from CommandContext proto
- Export findMatchingNotebookCell() from commandUtils.ts
- Update Jupyter commands (JupyterGenerateCell, JupyterExplainCell,
JupyterImproveCell) in extension.ts to fetch cell JSON directly and
bundle it into the notebookContext parameter
- Update command files to use only notebookContext parameter
- Remove notebook-specific handling from getContextForCommand()
Result: Notebook context only flows through dedicated Jupyter commands.
Regular commands (Add to Cline, Fix, etc.) work the same for all file types.
The proto stays clean and general-purpose.
Note: This removes the behavior where regular commands would get notebook
context when used on .ipynb files with enhancedNotebookInteractionEnabled.
That feature is now exclusive to the dedicated Jupyter menu commands.
* feat: improve notebook handling for empty notebooks
- Add semicolon to import statement for consistency
- Prevent errors by checking cell count before accessing notebook cells
- Add fallback in getContextForCommand for active notebook editor when no text editor is available
- Ensures robustness when dealing with empty or cell-less notebooks in the VSCode extension
* refactor: extract common notebook context logic for Jupyter commands
Extracted duplicated code into a helper function `getNotebookCommandContext` to handle active notebook checks, context retrieval, and cell JSON fetching. This reduces duplication in `JupyterGenerateCell` and `JupyterExplainCell` commands, improving code maintainability and readability. Minor import semicolon fix for consistency.
* fix: block notebook edits when enhanced interaction disabled
Prevent crashes when enhancedNotebookInteractionEnabled is false by blocking .ipynb file edits in WriteToFileToolHandler. Added validation to return an error message instructing the user to enable the setting, and set didRejectTool to stop the operation. Reading notebooks remains unaffected.
* fix(mentions): reorder parameters in parseMentions signature
Reordered the parameters in the parseMentions function to move the default parameter to the end of the argument list. This change ensures consistency in the function signature and correctly aligns arguments at the call site in the Task class.
This update was done to fix failing tests.
* Created proper diff views for vscode nd removed unnecessary logs
* feat: make replace_in_file prompt dynamic based on open files
Add editorTabs to SystemPromptContext to expose open/visible files.
Populate editorTabs in Task using HostProvider.
Conditionally include notebook-specific instructions in replace_in_file tool only when .ipynb files are open or visible.
Refactor replace_in_file prompt construction for better readability.
* feat: enable enhanced notebook interaction by default
Remove enhancedNotebookInteractionEnabled feature flag and enable notebook support globally.
Update tool handlers to process notebook cells automatically.
Update file extraction logic to support .ipynb files natively.
Clean up settings UI and state management.
* fix: restore accidentally removed promptContext fields
Commit ec68e7c2a accidentally removed enableParallelToolCalling and
terminalExecutionMode from promptContext when refactoring to add
editorTabs. These fields are still in SystemPromptContext interface
and actively used by system prompt templates.
* fix: complete feature flag removal from package.json
Commit a1dc73f93 removed the enhancedNotebookInteractionEnabled flag
from runtime code but forgot to update package.json. The Jupyter menu
items were hidden because the when conditions checked a setting that
defaulted to false.
- Remove config check from notebook menu item when conditions
- Remove unused setting definition
* fix: change changeset from minor to patch
* fix: code quality improvements in VscodeDiffViewProvider
- Use proper ES6 import for os module instead of require()
- Remove dead commented-out code (closeCurrentTextDiffEditor)
- Improve comment explaining the render delay
* fix: watch specific temp file instead of entire directory
* test: update snapshots for replace_in_file whitespace change
The PR's refactoring of replace_in_file.ts changed indentation in
the tool description from tabs to spaces. Updating snapshots to
match.
* fix: remove merge artifact marginTop from checkpoints div
* test: update DiffViewProvider test stub for new abstract method
* fix: remove dead notebook diff view code (switchToSpecializedEditor)
The switchToSpecializedEditor() method was declared as abstract and
implemented in all DiffViewProvider subclasses, but was never called
from anywhere. This meant ~180 lines of notebook diff view code
(temp file management, file watchers, cleanup) would never execute.
Removing this dead code. The notebook diff view feature will need a
follow-up PR to properly integrate it by calling the method from the
update() flow when isFinal is true.
---------
Co-authored-by: Robin Newhouse <robin@cline.bot>
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
Change trigger from every push to:
- PR open/reopen only (removed synchronize)
- Manual /test-jetbrains comment command
This prevents the bot from posting a comment on every single commit,
which was cluttering PR conversations.
* feat: add OpenAI Codex provider for ChatGPT Plus/Pro subscriptions
Add a new provider that allows users with ChatGPT Plus or Pro subscriptions
to use GPT-5 models directly through Cline without needing an API key.
Key features:
- OAuth authentication via OpenAI (PKCE flow)
- Routes requests to chatgpt.com/backend-api/codex/responses
- Subscription-based pricing (no per-token costs)
- Models: gpt-5.2-codex, gpt-5.1-codex-max, gpt-5.1-codex-mini, gpt-5.2
New files:
- src/integrations/openai-codex/oauth.ts: OAuth manager with PKCE, token storage/refresh
- src/core/api/providers/openai-codex.ts: API handler for Codex backend
- src/core/controller/account/openAiCodexSignIn.ts: Sign-in RPC handler
- src/core/controller/account/openAiCodexSignOut.ts: Sign-out RPC handler
- webview-ui/src/components/settings/providers/OpenAiCodexProvider.tsx: Settings UI
* fix: force native tool calling for Responses API providers
Providers using OpenAI's Responses API (openai-codex, some openai-native
models) require native tool calling. XML tools don't work with these APIs,
causing duplicate tool calls and malformed arguments.
Changes:
- Add openai-codex to isNextGenModelProvider() list so native variant
matchers recognize it
- Force enableNativeToolCalls=true when model uses ApiFormat.OPENAI_RESPONSES,
regardless of user setting
- Document Responses API provider requirements in CLAUDE.md
* chore: rename OpenAI Codex provider label to ChatGPT Codex Subscription
* fix: use shared fetch wrapper for proxy support in OpenAI Codex provider
* revert: remove CLAUDE.md changes from this PR
* fix: restore .clinerules/general.md to match main
* chore: rename provider label to OpenAI Codex (ChatGPT Plus/Pro)
* chore: add network.md reference to clinerules
* feat: show VS Code notifications for OpenAI Codex OAuth success/failure
* Fixed provider logic to handle Azure Commercial and Azure Government based on domain suffix.
* Adjusted region logic for simple long term modifications for other soverign cloud regions.
* feat: add cloud storage and sync system infrastructure
Add cloud storage capabilities with support for R2 and S3 adapters:
- Add ClineBlobStorage class for cloud-based state persistence
- Implement R2 and S3 storage adapters with AWS4 signing
- Initialize sync system on extension activation and dispose on teardown
- Refactor StateManager to integrate with secret storage
- Add required dependencies: aws4fetch for AWS request signing and yaml for configuration parsing
This enables uploading Cline state across devices using cloud storage providers when configured.
* refactor: remove yaml dependency and refactor storage/backfill logic
Replace YAML serialization with JSON for API conversation history storage.
Refactor backfill worker to read task IDs from history file instead of
filesystem directory scanning, improving performance and consistency.
Changes:
- Remove yaml package dependency (^2.8.2)
- Switch from YAML.stringify to JSON.stringify in saveApiConversationHistory
- Refactor listTaskIds to read from task history state file
- Add timestamp-based filtering using taskId parsing
- Remove filesystem-based directory scanning logic
- Remove unused getFileMtime function and useQueue option
This simplifies dependencies and aligns storage format across the codebase
while improving backfill efficiency by avoiding directory traversal.
* clean up
* clean up
* feat(worker): add queue cleanup and size enforcement mechanisms
- Add cleanupFailedItems() method to remove failed items exceeding max retries or age threshold
- Add enforceMaxSize() method to enforce maximum queue size with priority-based eviction
- Add maxQueueSize and maxFailedAgeMs configuration options (configurable via env vars)
- Run cleanup before processing to prevent unbounded queue growth, even when blob storage is misconfigured
This prevents the sync queue from growing indefinitely in misconfigured environments by automatically evicting stale failed items and enforcing a maximum queue size (default: 1000 items, 7-day failed item retention).
* feat(sync): add remote config support for blob store settings
- Add support for remote config blob store settings with env var fallback
- Pass blob store configuration through SyncWorkerOptions to init
- Extract getBlobStoreSettingsFromEnv() helper for environment-based config
- Update blob storage initialization to accept settings parameter
- Replace ClineBlobStorage.isConfigured() with blobStorage.isReady()
- Move backfill flag from env var to options parameter
- Ensure proper initialization flow with settings validation
This change enables dynamic blob store configuration from remote config
while maintaining backward compatibility with environment variables as
a fallback mechanism.
* apply feedback
* apply feedback
* remove global fetch import
* remove secretStorage init. use const
* use a single pass with forEach instead of filter-map-delete loops
* Schema changes for prompt uploading
* Fix types and add tests
* Add tests
* Remove test
* Addapt to the BlobStoreSettings
* Add tests
* Add the missing fields
* Extend tests
---------
Co-authored-by: abeatrix <beatrix@cline.bot>
* feat: add cloud storage and sync system infrastructure
Add cloud storage capabilities with support for R2 and S3 adapters:
- Add ClineBlobStorage class for cloud-based state persistence
- Implement R2 and S3 storage adapters with AWS4 signing
- Initialize sync system on extension activation and dispose on teardown
- Refactor StateManager to integrate with secret storage
- Add required dependencies: aws4fetch for AWS request signing and yaml for configuration parsing
This enables uploading Cline state across devices using cloud storage providers when configured.
* refactor: remove yaml dependency and refactor storage/backfill logic
Replace YAML serialization with JSON for API conversation history storage.
Refactor backfill worker to read task IDs from history file instead of
filesystem directory scanning, improving performance and consistency.
Changes:
- Remove yaml package dependency (^2.8.2)
- Switch from YAML.stringify to JSON.stringify in saveApiConversationHistory
- Refactor listTaskIds to read from task history state file
- Add timestamp-based filtering using taskId parsing
- Remove filesystem-based directory scanning logic
- Remove unused getFileMtime function and useQueue option
This simplifies dependencies and aligns storage format across the codebase
while improving backfill efficiency by avoiding directory traversal.
* clean up
* clean up
* feat(worker): add queue cleanup and size enforcement mechanisms
- Add cleanupFailedItems() method to remove failed items exceeding max retries or age threshold
- Add enforceMaxSize() method to enforce maximum queue size with priority-based eviction
- Add maxQueueSize and maxFailedAgeMs configuration options (configurable via env vars)
- Run cleanup before processing to prevent unbounded queue growth, even when blob storage is misconfigured
This prevents the sync queue from growing indefinitely in misconfigured environments by automatically evicting stale failed items and enforcing a maximum queue size (default: 1000 items, 7-day failed item retention).
* feat(sync): add remote config support for blob store settings
- Add support for remote config blob store settings with env var fallback
- Pass blob store configuration through SyncWorkerOptions to init
- Extract getBlobStoreSettingsFromEnv() helper for environment-based config
- Update blob storage initialization to accept settings parameter
- Replace ClineBlobStorage.isConfigured() with blobStorage.isReady()
- Move backfill flag from env var to options parameter
- Ensure proper initialization flow with settings validation
This change enables dynamic blob store configuration from remote config
while maintaining backward compatibility with environment variables as
a fallback mechanism.
* apply feedback
* apply feedback
* remove global fetch import
* remove secretStorage init. use const
* use a single pass with forEach instead of filter-map-delete loops
---------
Co-authored-by: Tomás Barreiro <52393857+BarreiroT@users.noreply.github.com>
I belive the file is duplicated of src/core/api/providers/dify.ts file.
new DifyHandler is imported from src/core/api/providers/dify.ts and the removed dify file is not being used
Some GPT-5.1/5.2 (codex) models can trigger OpenAI Responses API errors like: 'function_call was provided without its required reasoning item'.
Root cause: PromptRegistry selects the first matching variant; our native-gpt-5 matcher previously let any 'codex' model bypass the gpt-5.1/gpt-5.2 exclusion, so gpt-5.2-codex could incorrectly match NATIVE_GPT_5 instead of NATIVE_GPT_5_1.
Change: route all GPT-5.1 and GPT-5.2 models (including codex variants) to NATIVE_GPT_5_1; keep GPT-5 (and gpt-5-codex) on the less strict NATIVE_GPT_5.
This was observed as a hard-to-reproduce, sporadic error, but we want the safer routing available for anyone hitting it.
Wrap the call to `HostProvider.logToChannel` in a try/catch block so that logging does not throw when the host provider is not ready or unavailable.
Remove the now‑unused `ErrorService` imports and logging calls, keeping the logger focused on its core responsibility while preventing unnecessary failures during startup or testing. P.S: ErrorService is not enabled
* feat: support native tool call for ollama and lmstudio
Implemented conditional exposure of native tools in the system prompt based on `enableNativeToolCalls`. Updated the XS variant used by ollama and lmstudio configuration to match local models only and removed obsolete tool references. Added comprehensive tool overrides for both native and non‑native scenarios.
* add changeset
* update snippets and templates
* feat(cli): add version to root cobra command
Expose --version by setting the root command version.
* feat(cli): include core version in CLI version output
Format the CLI version string to show both CLI and core versions for clarity
* feat(cli): centralize version string output for CLI
Add a shared VersionString helper and use it for the
version command and Cobra version template, while
keeping the root command version to CLI only.
* feat: add git worktree management UI
Adds a worktrees view accessible from the navbar that allows users to:
- View all existing worktrees with their branch and path info
- Create new worktrees from local/remote branches or new branches
- Switch between worktrees (opens folder in VS Code)
- Delete worktrees with confirmation
Implementation includes:
- New proto definitions for worktree service RPCs
- Controller handlers for CRUD operations
- Git worktree utility functions
- WorktreesView React component with full UI
- Navbar integration with worktree button
* feat: enhance worktree creation error handling in WorktreesView
Adds error state management for worktree creation in the WorktreesView component. Introduces a new state variable to capture and display error messages when worktree creation fails, improving user feedback during the process.
* feat: add worktree defaults retrieval to WorktreeService and UI
Introduces a new RPC method `getWorktreeDefaults` to fetch suggested defaults for branch names and paths when creating new worktrees. Updates the WorktreesView component to utilize this method, enhancing the user experience by auto-generating branch names and paths. Additionally, integrates tooltips for improved UI interactions and adds a close button to the worktree creation modal.
* feat: implement .worktreeinclude file management in WorktreeService
Adds new RPC methods to the WorktreeService for managing .worktreeinclude files, including retrieving the status of the file and creating it with specified content. Updates the WorktreesView component to handle the creation and status checking of .worktreeinclude, enhancing user experience by automating file management for worktrees. Additionally, modifies the UI to reflect these changes, including updated tooltips and improved error handling.
* feat: add checkout branch functionality to WorktreeService and UI
Introduces a new RPC method `checkoutBranch` to the WorktreeService for switching branches within the current worktree. Updates the WorktreesView component to support this functionality, enhancing user experience by allowing seamless branch switching. Additionally, refines the UI layout for better responsiveness and improves loading/error state handling.
* feat: reposition New Worktree button for improved UI layout
Moves the New Worktree button to a fixed position at the bottom of the WorktreesView component, enhancing accessibility and user experience. The button is now styled to occupy the full width, ensuring better visibility and interaction within the UI.
* feat: update documentation links in WorktreesView component
Modifies the documentation links in the WorktreesView component to point to the correct feature sections, ensuring users have access to accurate resources. Additionally, adds the "features/worktrees" entry in the documentation JSON for better organization.
* feat: add worktree merging functionality and UI enhancements
Introduces a new feature for merging worktrees, allowing users to merge changes from a worktree's branch into the main branch with options to delete the worktree post-merge. Updates the WorktreesView component to include a merge modal, handling merge conflicts, and integrating with the WorktreeService for seamless operations. Additionally, enhances documentation to reflect these changes.
* refactor: replace exec with simple-git for worktree operations
Refactors the worktree management code to utilize the simple-git library instead of child_process exec for executing Git commands. This change enhances code readability and maintainability by providing a more streamlined interface for Git operations in the checkoutBranch, mergeWorktree, and git-worktree modules. Additionally, it improves error handling and reduces the complexity of command execution.
* feat: enhance mergeWorktree functionality to check target worktree status
Implements a check for uncommitted changes in the target worktree before merging, ensuring that users are informed if the target branch has uncommitted changes. This update improves error handling and user feedback during the merge process by verifying the state of both the source and target worktrees. Additionally, it integrates the listWorktrees utility to identify the correct worktree for the target branch.
* refactor: optimize worktree loading to prevent UI flickering
Enhances the loadWorktrees function in WorktreesView to only update the component's state if the fetched data has changed, reducing unnecessary re-renders and preventing flickering. This change improves the user experience by providing a smoother interface when loading worktrees. Additionally, simplifies the polling mechanism for updates.
* feat: update merge conflict display and task creation flow in WorktreesView
Enhances the merge conflict notification by providing a clearer list of conflicting files, including a summary for additional files. Additionally, modifies the task creation flow to close the worktrees view upon task creation, improving user experience during the merge process.
* fix: improve tooltip functionality and clean up WorktreesView component
Enhances the tooltip for the current worktree indicator to provide additional context for users. Additionally, removes the display of commit hashes in the worktree list to streamline the UI, improving overall clarity and user experience.
* feat: add symlink functionality for .worktreeinclude to sync with .gitignore
Introduces a new section in the documentation explaining how to create a symlink from .gitignore to .worktreeinclude. This allows users to automatically sync patterns between the two files, simplifying worktree setup. Additionally, includes a note for users needing different patterns to create a regular .worktreeinclude file instead.
* fix: simplify merge request button in WorktreesView component
Removes the "Merge" text from the button label in the WorktreesView component, streamlining the user interface. This change focuses on clarity by allowing the button to simply prompt users to "Ask Cline to Resolve," enhancing the overall user experience during merge conflict resolution.
* Update docs/features/worktrees.mdx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update webview-ui/src/components/worktrees/WorktreesView.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fixes docs not rendering
* perf(worktree): optimize file copying for .worktreeinclude
Address performance feedback - worktree creation was taking ~20 seconds
for large directories like node_modules (50k+ files).
Optimizations:
- Use native `cp -r` for entire directories (10-20x faster)
- Parallelize file copying with batches of 100 (5-10x faster)
- Parallelize directory traversal with Promise.all
The old implementation copied files sequentially which caused the
bottleneck. Now directories like node_modules are copied using the
system's native cp command, and individual files are copied in
parallel batches.
Also adds unit tests for the worktree-include module.
* feat(worktree): add multi-root and subfolder workspace warnings
- Detect and warn when multiple workspace folders are open (worktrees not supported in multi-root)
- Detect and warn when a subfolder of a git repo is open instead of the root, showing the actual git root path
- Fix UI overflow on narrow widths by using min-h-32 instead of fixed h-32
* refactor(worktree): auto-fill defaults when create modal opens
* fix(worktree): add cursor pointer to create modal close button
* feat(worktree): add clear buttons to create modal input fields
* feat(worktree): add quick launch button on home page
Extract CreateWorktreeModal as reusable component with openAfterCreate prop.
Add New Worktree Window button to WelcomeSection that creates a worktree
and opens it in a new window. Shows current worktree branch and path info.
* refactor(ui): polish home screen and worktree modal
- Update HistoryPreview: rename to Recent, move View All to header with chevron
- Remove logo pop-in animation from HomeHeader
- Remove info icon tooltip from What can I do for you heading
- Remove fade-in animations from WelcomeSection
- Move worktree button below history preview with more spacing
- Update CreateWorktreeModal copy and reduce spacing between fields
- Add Current label with branch icon above path in worktree info
* feat(worktree): auto-open Cline sidebar on worktree launch
When switching to a worktree via quick launch button, automatically
open the Cline sidebar in the new/reloaded window. Uses globalState
to pass the target path between windows, reading directly from
context.globalState at startup to bypass StateManager cache timing.
* fix(worktree): improve quick launch UX
- Make current branch/path clickable to navigate to worktrees view
- Fix word wrap for long branch names and paths
- Show .worktreeinclude warning in create modal with learn more link
* chore: ignore .worktrees directory and CLAUDE.local.md
* feat(worktree): add delete confirmation modal
* refactor(ui): remove worktrees button from title bar
* fix(worktree): improve .worktreeinclude warning styling
* docs(worktrees): update for new UI features
- Document quick launch button on home screen
- Update getting started to reflect auto-filled defaults
- Document Cline auto-open behavior when switching worktrees
- Update delete section with confirmation modal details
- Add limitations section for multi-root and subfolder workspaces
* fix(worktree): rename Main badge to Primary
* feat(worktree): add worktrees button to sidebar header
Adds a git-branch icon button to the Cline sidebar header for quick
access to the Worktrees view. Also updates docs to mention this new
entry point and adds a typical workflow section.
* fix(worktree): UI polish
- Change New Worktree Window tooltip to show above button instead of below
- Add break-all to branch names for long branch text wrapping
- Simplify merge button tooltip and modal title (remove 'and close')
* fix(e2e): update tests to match renamed Recent header
* fix(worktree): improve non-git repo message
* fix(worktree): wrap path instead of truncating
* fix(e2e): update auth test to use aria-label instead of removed class
* fix(worktree): add option to delete branch when deleting worktree
- Update delete modal copy to accurately describe behavior
- Add checkbox to optionally delete branch (unchecked by default)
- Show warning about unpushed commits when checkbox is checked
- Update proto, handler, and UI to support delete_branch option
* fix: remove worktrees menu button from sidebar
Remove the worktrees button from the VS Code extension menu bar.
* fix(ui): temporarily disable new worktree button, add tooltip to current worktree
Comment out "New Worktree Window" button until worktree creation is stable.
Add tooltip to current worktree info with "View and manage git worktrees.
Great for running parallel Cline tasks."
* feat: add worktree-exp feature flag for worktrees feature
Put the worktrees feature behind a feature flag (worktree-exp) that
defaults to false. When enabled, users can toggle the feature in
settings. The home page worktree section only shows when both the
feature flag is enabled and the user setting is on.
* feat: add telemetry for worktree feature usage
Track worktree feature engagement:
- worktree.view_opened: when users open worktrees view (with source)
- worktree.created: when worktrees are created (with total count)
- worktree.merge_attempted: when merge is attempted (success/conflicts)
* fix: replace DangerButton with Button variant="danger"
DangerButton component was removed from main. Use the standard
Button component with variant="danger" instead.
* Fix merge conflict artifacts
* Revert "fix(e2e): increase getSidebar timeout for slower macOS CI runners"
This reverts commit 19479a019c.
* fix: clean up shadow git checkpoint data when deleting worktrees
* fix: add worktreesEnabled to proto and fix duplicate import
* fix: revert e2e test changes to match main
* fix: revert Navbar.tsx to match main (JetBrains compat)
* fix: revert package.json navigation order to match main
* fix: properly add worktrees_enabled to proto without moving fields
* fix(e2e): update tests to match UI changes
- Change "Recent Tasks" to "Recent" to match HistoryPreview header
- Use aria-label selector for BannerCarousel instead of animate-fade-in class
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Juan Pablo <juan@cline.bot>
* feat(telemetry): add exit code to terminal execution telemetry
Include process exit code in standalone terminal execution telemetry
to help diagnose failure types. Common codes like 127 (command not found)
and 126 (permission denied) provide valuable debugging information.
- Add optional exitCode parameter to captureTerminalExecution
- Only include exitCode when it has a meaningful value
- Update comments to clarify failure diagnosis purpose
* feat(temp): add centralized temp file manager with auto-cleanup
Introduce ClineTempManager to handle all Cline temporary files:
- Uses "cline-" prefix for easy identification
- Automatically cleans up files older than 50 hours on activation
- Enforces 2GB total size cap to prevent disk bloat
- Cross-platform support (macOS, Windows, Linux)
Refactor CommandOrchestrator and StandaloneTerminalManager to use the
new centralized temp file management instead of direct os.tmpdir() calls.
* feat: add periodic temp file cleanup every 24 hours
- Add startPeriodicCleanup() and stopPeriodicCleanup() methods to ClineTempManager
- Start 24-hour cleanup interval on extension activation
- Stop cleanup interval on extension deactivation
- Use unref() on interval to prevent blocking Node exit
* minor fix
* minor fix
* fix: centralize temp cleanup and scan full temp dir
Move initial cleanup into startPeriodicCleanup, ensure temp
directory exists, and process all temp files with safer error
handling to avoid misses and race deletions.
* minor fix
* chore: shows arrow for history item details on hover only
Add subtle bottom border to history items for better visual separation and improve expand/collapse icon visibility by hiding it by default and showing it only on hover with a smooth opacity transition. This creates a cleaner interface while maintaining discoverability of the expand functionality.
Changes:
- Add border-bottom with low opacity accent color to history items
- Hide expand/collapse chevron icon by default
- Show chevron on hover with smooth opacity transition
* align checkbox
Add explicit checks in the Native GPT‑5 variant to enable the variant for
`gpt‑oss` model IDs and reject non‑next‑generation providers. The provider
list in `model-utils.ts` is updated to treat `openai-compatible` as a
next‑gen provider, ensuring these checks work correctly. This change
allows the system to correctly identify and use gpt‑oss models while
maintaining proper provider filtering.
The PR's safelyTruncateDocument() skips calling truncateDocument() when
there's nothing to truncate. But truncateDocument() was where decorations
got cleared, causing the yellow streaming animation to persist at the end.
Fix: Add onFinalUpdate() hook that's always called after the final update.
VscodeDiffViewProvider overrides it to clear decorations.
* fix: DiffViewProvider line boundary validation and content concatenation
Two bugs in DiffViewProvider caused file editing failures:
1. **Line boundary validation errors (#8423, #8429)**
JetBrains hosts using gRPC strictly validate line numbers. When
truncateDocument() was called with a line number >= document line count,
it caused "truncateDocument INTERNAL: Wrong line" errors. This occurred
when new content had >= lines than the original, making truncation
unnecessary but still attempted.
2. **Content concatenation on final update**
When replacing content without a trailing newline, the old content at
line N+1 was concatenated to the new content. For example, writing
"Hello World" to a file containing "line1\nline2\n" resulted in
"Hello Worldline2" instead of just "Hello World".
1. Added `getDocumentLineCount()` abstract method to all DiffViewProvider
implementations to query the current document line count.
2. Added `safelyTruncateDocument()` private helper that validates line
numbers before calling truncateDocument():
```typescript
private async safelyTruncateDocument(lineNumber: number): Promise<void> {
const lineCount = await this.getDocumentLineCount()
if (lineNumber < lineCount) {
await this.truncateDocument(lineNumber)
}
}
```
3. Extended the replacement range on final update to cover the entire
document, preventing content concatenation:
```typescript
const endLine = isFinal
? await this.getDocumentLineCount()
: currentLine + 1
```
- src/integrations/editor/DiffViewProvider.ts
- Added abstract getDocumentLineCount() method
- Added safelyTruncateDocument() boundary validation helper
- Modified update() to extend final replacement range
- src/hosts/vscode/VscodeDiffViewProvider.ts
- Implemented getDocumentLineCount() using editor.document.lineCount
- src/hosts/external/ExternalDiffviewProvider.ts
- Implemented getDocumentLineCount() by counting lines from getDocumentText()
- src/integrations/editor/FileEditProvider.ts
- Implemented getDocumentLineCount() from documentContent
- src/integrations/editor/__tests__/DiffViewProvider.test.ts (new)
- Added 4 unit tests for boundary validation and concatenation fix
Fixes#8423, #8429
* fix: preserve trailing newlines in file edits
Trailing newlines were being incorrectly stripped during file edits due to
trimEnd() calls in handlers. This caused files to lose their final newline
even when the original file had one.
Changes:
- Remove trimEnd() from WriteToFileToolHandler and ApplyPatchHandler that
was stripping trailing newlines before content reached the editor
- Remove dead code in DiffViewProvider.update() that tried to restore
newlines after the document was already written
- Add trailing newline fix-up in VscodeDiffViewProvider to handle VS Code's
applyEdit sometimes normalizing newlines on full-document replacements
- Fix FileEditProvider.replaceText() to preserve trailing newlines when
replacing to end of document
* fix: preserve trailing newlines in diff text ops
Align splitLines with JS split behavior and keep trailing
newline segments when replacing to end of document to avoid
dropping final line breaks.
Fixes#8004
When storage persistence fails (common on Windows with OneDrive/Dropbox/NAS),
the Controller was calling StateManager.reInitialize() to "recover". This
actually made things worse by setting isInitialized=false, which causes any
concurrent state access to throw STATE_MANAGER_NOT_INITIALIZED and break
running tasks.
The fix: just log the error. Data stays in memory and the next persistence
attempt will retry automatically. No need to alarm users with warnings since
nothing is actually lost.
Fix error message handling during streaming by removing previous partial
error messages and only pushing the final error result when streaming is
complete. This prevents multiple error messages from being displayed for
the same plan mode tool restriction and ensures errors are only finalized
after streaming ends.
* chore: enable APPLY_PATCH tool for native gpt-5 and codex variant
Replace FILE_NEW and FILE_EDIT tools with APPLY_PATCH for the native-gpt-5 model configuration that works better with codex and gpt-5 models
* Update changeset
* update snapshot
* Fix the Feature Flag null check
* Pass null instead of undefined
* Update the cacheInfo so we don't fetch twice simultaneously
* Fix the featureFlagsService binding
* refactor: rename VS Code LM API provider to GitHub Copilot
- Change dropdown label from "VS Code LM API" to "GitHub Copilot"
- Simplify description to focus on Copilot as the primary use case
- Remove experimental warning since the integration is stable
- Add link to Copilot extension in VS Marketplace
* fix: add font-size inherit to global anchor styles
Ensures links inherit font size from their parent element instead of
using a potentially different default size.
* Changed the "Notes" column for "Enable notifications" from "Helpful for terminal work" to "Accessible directly in the Auto Approve menu" to make it clear that users don't need to navigate to General Settings anymore.
Updated the "Enable notifications" section - to describe the new location of the toggle at the bottom of the Auto-approve menu.
A link to a short video showing the toggle was added.
* updated as per issue 7810 and noted in previous commit.
* edit - remove extra link to video in /auto-approve.mdx
---------
Co-authored-by: Juan Pablo Flores <juan@cline.bot>
#8335 introduced the use_skill tool, but there was no corresponding output in the chat interface (just an empty chat row).
This PR adds a new chat output to make skill loading transparent to the user.
* Fix local CLI install to rebuild cleanly
* fix(install): copy package.json for standalone startup
Ensure the extension package.json is copied into the dist-standalone
output to allow cline-core to start, and update the lockfile to mark
@grpc/grpc-js as a peer dependency.
* fix: keep diff view during apply patch approval
Stream patch parsing to render a diff view before approval step, and update file ops to avoid applying create/move/delete changes prematurely until request was approved.
* reset provider state after patch operations and improve file tracking
- Add provider.reset() call after user rejection to ensure clean state
- Move provider.reset() after successful patch application to prevent state leakage
- Defer file context tracking until after all patch operations complete
- Set didEditFile flag when processing results instead of during operations
This ensures the provider maintains a clean state between file operations and prevents potential issues with stale state affecting subsequent patches.
<budget:token_budget>200000</budget:token_budget>
* feedback
* feat: add auto-generation of state proto
Add lint-staged hook to automatically regenerate proto/cline/state.proto
when src/shared/storage/state-keys.ts changes. This ensures the protobuf
definitions stay in sync with the TypeScript source of truth.
Changes:
- Add generate-state-proto.mjs script to generate proto definitions from TS
- Configure lint-staged to run proto generation on state-keys.ts changes
- Update state.proto with regenerated field numbers and new OpenTelemetry fields
This automation prevents drift between TypeScript state definitions and
their protobuf representations, reducing manual maintenance burden.
* PlanActMode
* feat(proto): change thinking budget token fields to int64
Change plan_mode_thinking_budget_tokens and act_mode_thinking_budget_tokens
from int32 to int64 to support larger token budget values. Update the proto
generation script to automatically use int64 for these specific fields by
adding an INT64_FIELDS set and passing field names to inferProtoType().
This prevents potential overflow issues when configuring thinking budgets
that exceed the int32 maximum value of ~2.1 billion tokens.
* feat(proto): change auto_condense_threshold type from int32 to double
Changed the auto_condense_threshold field type from int32 to double in the
state.proto file to support decimal values. Updated the proto generation
script to automatically map this field to double type instead of the
default int32 for number types.
* add documentation for proto field generation
Add inline documentation to state.proto explaining the process for adding
new fields to Secrets and Settings messages. Also add a note in state-keys.ts
clarifying that the generate-state-proto.mjs script runs automatically on
commit. Remove redundant sync comment from API_HANDLER_SETTINGS_FIELDS.
* fix comment format
* open_ai_headers
* Remove the remote config auth listener
* Introduce a throttle RemoteConfigService
* Add changeset
* Change the interval to an hour
* Refactor
* Reintroduce comment and remove await
* Move the fetchRemoteConfig to the initTask function
* fix: remove error_retry when duplicate or retry succeeds
Improve error_retry message consolidation by:
- Removing duplicate error_retry messages, keeping only the latest attempt
- Removing error_retry messages entirely when followed by successful api_req_started
(unless marked as failed)
- Enhanced message lookahead logic to skip over api_req_retried messages when
determining what follows an error_retry
This provides cleaner message output during retry sequences and successful retry
recovery scenarios.
* add changeset
* only display last retry error
* add anthropic--claude-4.5-opus into sap provider.
Signed-off-by: Lize Cai <lize.cai@sap.com>
* add changeset
Signed-off-by: Lize Cai <lize.cai@sap.com>
---------
Signed-off-by: Lize Cai <lize.cai@sap.com>
- Change overflow-visible to overflow-hidden in CompletionOutputRow and PlanCompletionOutputRow to prevent content overflow issues
- Adjust inline code file path button alignment by removing vertical translation classes and adding inline display
- Improve icon positioning in MarkdownBlock by using inline and align-middle classes
These changes fix visual rendering issues where content was overflowing containers and buttons were misaligned in the chat completion output components.
- Add gpt-5.2-codex OpenAI model support
- Add create-pull-request skill
- Fix the selection of remotely configured providers
- Fix act_mode_respond to prevent consecutive calls
- Fix invalid tool call IDs when switching between model formats
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* fix: normalize tool call IDs for OpenAI messages
Transform tool call IDs to meet OpenAI length/prefix limits and apply the same logic to both `tool_calls[].id` and `tool_call_id` so they always match, preventing invalid parameter errors. Also enforce 53-char `fc_` IDs for the Responses API and add a helper to detect that format.
Ensure that whatever ID is produced for the tool_calls[].id in the assistant message matches what's produced for tool_call_id in the tool result message.
* add changeset
* refactor: move isOpenAIResponseToolId and fix tool ID truncation
- Move isOpenAIResponseToolId helper function from openai-response-format.ts
to openai-format.ts where it's actually used, making it private
- Fix transformToolCallId to use MAX_TOOL_CALL_ID_LENGTH constant for
calculating slice offset, ensuring IDs stay under the 40-char limit
- Add clarifying comment explaining the truncation logic
* fix: correct function call ID prefix check in OpenAI response format
Fix startsWith check to use "fc_" instead of "fc" to properly detect
* Fix tool call length
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
---------
Co-authored-by: Robin Newhouse <robin@cline.bot>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Reduce the amount of sent banner requests
* Revert not fetching if no token is provided
* Remove redundant null
* Make a single call
* Make another request if forceRefresh is true
* Add a separate catch
* Allow switching between remote configured providers and only display valid providers
* Add changeset
* Return the provider set by the remote config
* Address comments
* Address comment
* Validate when updating settings
* Refactor
* Revert
* Use a more descriptive name
* Fix types
* Check we have remote configured providers, not only that the array is there
- Remove SystemPromptSection.MCP from Gemini-3 component order
- Disable feedback section in XS variant component overrides
- Update variant validator to allow disabled overrides without requiring them in componentOrder/tools list
The validator now correctly handles overrides with `enabled: false`, treating them as valid configuration even when the component/tool isn't included in the active lists.
- Add telemetry to track usage of skills feature
- Add version headers to Cline backend requests
- Phase in Responses API usage instead of defaulting for every supported model
- Fix workflow slash command search to be case-insensitive
- Fix model display in ModelPickerModal when using LiteLLM
- Fix LiteLLM model fetching with default base URL
- Fix crash when OpenAI-compatible APIs send usage chunks with empty or null choices arrays at end of streaming
- Fix model ID for Kat Coder Pro Free model
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* feat(ui): add new row components and unify ChatRow styling with tailwinds and lucid icons
- Add new ClineCompactIcon component for consistent branding
- Replace VSCode codicons with lucide-react icons for better consistency
- Browser session: SquareMousePointerIcon
- File operations: FilePlus2Icon, PencilIcon, SquareMinusIcon
- Terminal: TerminalIcon
- Loading states: LoaderCircleIcon
- Error states: CircleXIcon
- Extract ChatRow styles to separate CSS file for better maintainability
- Improve code block styling with theme-aware backgrounds and borders
- Update icon sizing and stroke weights for visual consistency
This change modernizes the UI by standardizing icon usage across components and improves code organization by separating styles into dedicated CSS files.
* feat(ui): integrate CompletionOutputRow and reasoning display in ChatRow
Updates the ChatRow component to support specialized rendering for task completion and model reasoning.
- Integrates `CompletionOutputRow` and `PlanCompletionOutputRow` for structured completion states.
- Adds `ThinkingRow` integration and props for handling `reasoningContent`.
- Updates `ChatRowProps` to include mode and request status tracking.
- Refines Storybook mocks to demonstrate reasoning steps and detailed completion results.
* feat(webview): group low-stakes tool executions in chat view
- Update `ChatView` to apply `groupLowStakesTools` to the message list, consolidating passive tool usage.
- Overhaul `MessageRenderer` to support rendering grouped tool messages with specific display info (icons, labels) for actions like `readFile`, `listFiles`, and `searchFiles`.
- Add logic to format search regex patterns for better readability.
- Implement utility checks for calculating costs and pending states within tool groups.
- This change reduces UI clutter by visually collapsing repetitive information-gathering steps.
* refactor(ui): update checkpoint control UI and restore menu
- Replace `VSCodeButton` with local `Button` component and use Lucide `BookmarkIcon`
- Migrate styled text components to utility classes for consistent styling
- Redesign the checkpoint restore popover to prioritize "Restore Files & Task"
- Add `showMoreOptions` state to manage menu visibility and interaction logic
* refactor(chat): rename CSS file for CompletionOutputRow
Renames `ChatRow.css` to `CompletionOutputRow.css` to align with the component naming convention. This change includes updating the import in `CompletionOutputRow.tsx` to reference the correctly named stylesheet.
* clean up PlanCompletionOutputRow
* clean up
* clean up
* update e2e
* update displayName
* fix blinking cursor position
* use classnames
* Completion notch
* clean up header class
* Move Command Output component to CommandOutputRow
* Fix shimmering animation
* update TypewriterText story title
* clean up notch style
* Seperate ToolGroupRenderer into individual component. Clean up styles and message utils.
* fix truncation display
* update styles for open file links
* apply feedback - fix CompletionOutputRow & ThinkingRow
* Display old Ask block for tools
* combine title and action buttons into CompletionOutputRow & PlanCompletionOutputRow
* remove animation from Cline icon
* update styles and animation
* adjust spacing
* Fix shimmering animation
* clean up
* clean up and simplify component styles
* clean up import names
* fix markdown block and use tailwind styles
* clean up spacing
* hide scrollbar
* remove expand handler
* cline logo position
* fix(chat): align logo to top in request progress indicator
Changed ClineLogoWhite component alignment from `self-end` to `self-start`
in the chat row's request progress view. This ensures the logo aligns to
the top rather than the bottom when displaying in-progress requests,
improving visual consistency with the adjacent message content.
* fix DiffEditRow title truncation
* Keep Cline logo for output text
* fix(chat): add invisible spacer for non-rendered rows
Replace `null` returns with an `aria-hidden` 1px spacer to keep chat row layout stable, and simplify summary header styling by moving inline styles into a className.
* update activity indicators and button styling for tool group
- Replace codicon with icon component for activity indicators
- Scale down Cline logo and remove border divider for cleaner layout
- Add disabled state styling to ThinkingRow button (cursor-text, full opacity)
- Fix TooltipTrigger by using asChild prop instead of disabled
- Adjust CheckmarkControl bottom margin for better alignment
These changes improve visual consistency and fix accessibility issues with tooltip triggers and button states.
<budget:token_budget>200000</budget:token_budget>
* revert: show cline logo during stream only
* remove streaming thinking title
* spacing
* apply feedback: remove border for thinking, fix overflow typewriter text
* fix(ui): align thinking text and reasoning content positions
- Add ml-1 margin to both thinking text and ThinkingRow for consistent left alignment
- Remove default button padding from ThinkingRow with p-0
* fix(ui): simplify ToolGroupRenderer and remove OptionsButtons top padding
- Remove collapse/expand functionality from ToolGroupRenderer (always expanded)
- Remove chevron icon and left-align summary text with file list
- Standardize font size to 13px for summary, icons, and file names
- Remove font-editor to use default font family
- Remove "Thinking:" prefix from tooltips
- Add padding and spacing for better visual hierarchy
- Remove top padding from OptionsButtons
* fix(ui): restore CodeAccordian padding and overflow
* fix(ui): reduce spacing between header and content text
* fix(ui): restore task completion buttons to original style
- Restore SuccessButton component
- Move buttons outside the green card
- Use SuccessButton for both View Changes and Explain Changes
- Full-width stacked buttons with proper spacing
* fix(ui): polish Task Completed and Plan Created card styling
- Remove hover border color change
- Fix last paragraph bottom margin
- Add proper top padding for header and content
- Add horizontal padding to header row
- Remove unnecessary conditional padding
* fix(ui): style tweaks for copy button and checkpoint label
- Make Task Completed copy button green to match header
- Reduce Checkpoint label font size to 9px
* fix(ui): prevent TypewriterText from jumping on completion
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
Add optimizeDeps configuration with force flag to ensure Vite
re-optimizes dependencies on every build. This resolves potential
issues with stale or inconsistent dependency resolution in the
webview build process.
* refactor: simplify API configuration management and state handling
Refactored `StateManager` and `ApiConfiguration` handling to use a more maintainable, data-driven approach. Replaced manual key mapping in `setApiConfiguration` with automated categorization based on static definitions.
- Updated `buildApiHandler` and `createHandlerForProvider` to accept `Partial<ApiConfiguration>`, improving flexibility.
- Introduced `categorizeApiConfigurationKeys` and other helpers to separate settings from secrets automatically.
- Centralized secret key definitions in `state-keys.ts` to reduce boilerplate and potential for errors when adding new providers.
- Cleaned up redundant imports and type definitions across the core API and storage modules.
* apply feedback
* clean up
* refactor: consolidate API configuration types and state key definitions
- Rename `ApiHandlerSecrets` to `Secrets` for consistency across codebase
- Merge `ApiHandlerOptions` with `ApiHandlerSettings` to reduce duplication
- Extract `GlobalStateAndSettingKeys` as a computed constant from state field definitions
- Consolidate remote configuration fields into `REMOTE_CONFIG_EXTRA_FIELDS` group
- Remove redundant type definitions and improve type safety in state management
This refactoring simplifies the type system by eliminating duplicate interfaces
and ensures consistent naming conventions throughout the storage and API layers.
* Clean up
* rename type with default
* type safe
* add unit test
* Apply suggestions from code review
Co-authored-by: Tomás Barreiro <52393857+BarreiroT@users.noreply.github.com>
* apply feedback
---------
Co-authored-by: Tomás Barreiro <52393857+BarreiroT@users.noreply.github.com>
* add requirements
* add requirements checklist
* feat: add logic (only) for enterprise to control local MCP config via remote config
* when allowlist is empty, allow all local servers; when a server is on allowlist, load regardless of whether from github
* fix comment, use Object.keys(remoteConfig).length to check if remote config is on or not
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
* Fixed bugs within cline cli and removed extra console.log
* Removed old models from using Responses API
* Revertred last commit'
* Added changeset
---------
Co-authored-by: celestial-vault <58194240+celestial-vault@users.noreply.github.com>
* [NOOP] Update BannerService to integrate with the webview.
Update the BannerService to convert the banners to the BannerCardData format for the webview.
Add a field for the banners in the `ExtensionState`.
In the WelcomeSection, get the banners from the extension state and show them in the webview.
NOOP- this is a currently a no-op because the controller is not yet populating the `banners` field in the extension state. I will submit that in a second PR because we need the handlers for the dismissal logic before we can start displaying the banners.
# Conflicts:
# src/shared/ExtensionMessage.ts
* Update tests
* Validate the banner action type before sending it to the webview
* Handle dimiss for API banners
When an API banner is dismissed, use the `dismissBanner` protobus handler.
Add warning comments saying not to use the old banner version system. This not scalable as it requires a different protobus handlers for each type of banner. You can get the same effect by using the banner ID and appending a version number to the ID.
* Send the banners from the extension to the webview
The controllers populates the banners in the extension state.
Add a check for buttons with empty titles because they don't render properly and this is an error in the banner configuration if it happens.
* Add handler to Link action button in the webview.
* Fix handler for ShowApiSettings in the webview
* Made change to not allow old models to use Responses API
* Added changeset
* Removing oca from nextGenModelProvier so that we remove native tool calls for now
* Adding back oca as a nextGenModelProvider
* Prevent loop when getting user organization
* Do not restore user info if the org he is switching to is already active
* Add changeset
* Fix reference array
* Add field to settings and handle side effects
* Avoid fetching and applying remote config if it's disabled
* Refactor and apply configured org settings when the user opted out of another one he owns
* Refactor
Fix check
* Add toggle to the account view
* Add changeset
* Fix can disable remote config
* clean canDisableRemoteConfig
* fix: guard against null/empty choices in streaming responses
Some OpenAI-compatible APIs (DeepSeek, Groq, OpenWebUI, etc.) send
usage chunks at the end of streaming with empty or null choices arrays.
This was causing crashes with 'Cannot read properties of undefined'.
Added optional chaining on chunk.choices across all 24 affected
provider files to safely handle these usage-only chunks.
Fixes#8384
* chore: add changeset
Update Claude 3.5 Haiku model to support image processing as per
Anthropic API release notes.
Fixes#2009
Co-authored-by: Yuri Chukhlib <yurii.chukhlib@viber.com>
When the @ mention context menu shows "No results found" and the user
presses Escape, the menu was not closing because setShowContextMenu(false)
was not being called.
Fixes#5532
Co-authored-by: Yuri Chukhlib <yurii.chukhlib@viber.com>
Some LLM providers (notably Claude Sonnet 4.5 via VS Code LM API) insert
spurious spaces before file extensions (e.g., "file .ts" instead of "file.ts").
This fix adds heuristic normalization to remove spaces immediately before
file extensions while preserving legitimate spaces in filenames.
Fixes#7827
Co-authored-by: Yuri Chukhlib <yurii.chukhlib@viber.com>
Users can now find workflows regardless of letter casing (e.g., searching "/testhook" finds "Testhook").
Fixes#7834
Co-authored-by: Yuri Chukhlib <yurii.chukhlib@viber.com>
- Enable configuring an OTEL collector at runtime
- Removing Minimax-2.1 from free model list as the free trial has ended
- Improved image display in MCP responses
- Auto-sync remote MCP servers from remote config to local settings
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* feat(mcp): improve image display in MCP responses
- Truncate data URIs to show prefix + first 20 chars with [IMAGE] label
- Apply truncation in all display modes (rich, plain, markdown)
- Click data URI images to open in VS Code editor (like mermaid diagrams)
- Expand images to 100% width of response container
- Persist collapsed/expanded state per-response without syncing all instances
* fix(settings): remove Collapse MCP Responses setting from UI
The setting is now implicit - collapsing any MCP response saves the
preference for future responses. Removes confusing sync behavior
between the Settings toggle and individual response toggles.
* feat: add remote config sync with extension mcp marketplace for new remote servers
* refactor: extract getMcpSettingsFilePath into disk.ts to be reused
* refactor: rename helper method to avoid ambiguity
* address formatting suggestion by ellipsis-dev for the code itself that was moved
* refactor: add flag pattern to prevent race condition from triggering unnecessary watcher events
* fix: do not re-throw error
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
* Replace process.env usage with a BUILD_CONSTANTS variable
* Update import
* revert doc update
* Enable configuring an OTEL collector at runtime
* Refactor
* Refactor
* Add changeset
* Do not build IS_STANDALONE
* Add comment
* Update the `.env.example` file
* Remove `true` from the selected options and revert env.example
* Use `true` for runtime variables
- Add Skills system for reusable, on-demand agent instructions
- Add new websearch tooling in Cline provider
- Add zai-glm-4.7 to Cerebras model list
- Add model refresh and improve reasoning support for Vercel AI Gateway
- Revert #8341 due to regressions in diff view/document truncation (see #8423, #8429)
- Fixed extension crash when using context menu selector
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* docs: add Skills feature documentation
Add comprehensive documentation for the Agent Skills feature including:
- Overview of what skills are and why they're useful
- How to create skills with SKILL.md and YAML frontmatter
- Global vs project skill locations
- Managing skills via the UI toggle interface
- Real example (data-analysis skill)
- Bundling supporting files and scripts
- Comparison with Rules and Workflows
Oh. Add a new Skills tab to the Rules/Workflows modal that allows users to
view and toggle skills (global and workspace), create new skills from
templates, and delete existing skills. The tab only appears when the
skillsEnabled setting is on.
Changes:
- Add proto definitions for skills operations (refreshSkills, toggleSkill,
createSkillFile, deleteSkillFile) with corresponding message types
- Add globalSkillsToggles to Settings and localSkillsToggles to LocalState
- Implement controller handlers for skills operations
- Add skills toggle state management to ExtensionStateContext
- Add Skills tab component to ClineRulesToggleModal
- Update RuleRow and NewRuleRow components to support skill type
- Implement lazy discovery for skills in UseSkillToolHandler (skills are
discovered on-demand at execution time and filtered by toggle state)
- Use Tailwind CSS classes for styling consistency
* fix: prevent duplicate diff error messages during file edits
Remove existing diff_error messages before displaying new ones to avoid
showing the same error multiple times when streaming file edits. This
ensures users only see the error once per occurrence, improving the UX
during tool execution with parallel tool calling disabled.
* Update src/core/task/tools/handlers/WriteToFileToolHandler.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Add experimental "Enable Skills" toggle in Settings > Features that
controls whether the Skills system is active. When disabled (default),
no directory scanning occurs and the use_skill tool is not exposed.
- Add skillsEnabled to Settings interface and ExtensionState
- Add skills_enabled to proto definitions
- Gate skill discovery in Task.attemptApiRequest()
- Add UI toggle in FeatureSettingsSection
feat(skills): add reusable Skills system and standardize global skills location
- Implement Skills system for reusable agent instructions loaded from project and global directories
- Support skill discovery and loading via stateless utilities
- Parse YAML frontmatter for skill metadata (name, description)
- Add use_skill tool for on-demand instruction loading
- List available skills in system prompt; global skills override project skills
- Define skills as directories with a SKILL.md file
- Add unit tests for skill utilities
- Global skills in ~/.cline/skills
- Introduce getClineHomePath() and update docs and tests for new path
* since npm nightly worked, make npm main
* fix ripgrep, split npm and jetbrains packaging
* cli nightly package version update
---------
Co-authored-by: Andrei Edell <andrei@nugbase.com>
* feat(vercel-ai-gateway): add model refresh and reasoning support
- Add refreshVercelAiGatewayModelsRpc to ModelsService for fetching models
- Fix model ID/info references to use Vercel-specific parameters instead of OpenRouter
- Add reasoning effort and Gemini thinking level configuration support
- Skip reasoning content for incompatible models (devstral, grok-4)
- Improve model selection UI with keyboard navigation (ArrowUp/Down/Enter)
- Add model refresh functionality to settings interface
This enables proper model discovery and improves reasoning capabilities for Vercel AI Gateway provider, while fixing incorrect parameter references that were using OpenRouter naming conventions.
* refactor
* refactor
* refactor
* refactor
* refactor
* feat: hide the delete server ui when user and the remote mcp server is managed by remote config
* feat: add message to user if they are managed by remote config
- Add zai-glm-4.7 to Cerebras model list\n- Update model metadata (context window + descriptions)\n- Update Cerebras provider docs\n- Include changeset for release notes
* Made changes for adding responses suppport
* removed some logs
* Made change to disallow format
* Added logging for cline
* Fixed codex prompts
* Made changes to make cline work
* Removed extra changes
* Added reasoning effort also to chat completions
* Made changes to fix issues with cline based on bugbash
* removed extra console.log statements
* Added extra changes to make reasoningEffortOptions working properly(outputs undefined)
* Made changes to code that make it cleaner
* created utility function for responses
* Removed extra console.log lines
* Fixed issues with tests not working
* Added changeset
* Update webview-ui/src/components/settings/providers/OcaModelPicker.tsx
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* removing openai-native changes
* Switched to using api format instead of supportsResponsesApi and supportChatApi
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* feat: remove kwaipilot/kat-coder-pro from free models list
Remove the KwaiPilot KAT-Coder Pro model from the OpenRouter
free models picker, likely due to availability changes or
model deprecation.
* changes
- Added experimental support for Background Edits (allows editing files in background without opening the diff view)
- Updated free model to MiniMax M2.1 (replacing MiniMax M2)
- Added support for Azure based identity authentication in OpenAI Compatible provider and Azure OpenAI
- Add `supportsReasoning` property to Baseten models
- Prevent expired token usage in authenticated requests
- Exclude binary files without extensions from diffs
- Preserve file endings and trailing newlines
- Fix Cerebras rate limiting
- Fix Auto Compact for Claude Code provider
- Make Workspace and Favorites history filters independent
- Fix remote MCP server connection failures (404 response handling)
- Disable native tool calling for Deepseek 3.2 speciale
- Show notification instead of opening sidebar on update
- Fix Baseten model selector
- Modify prompts for parallel tool usage in Claude and Gemini 3 models
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Introduced a new feature, Background Edit, allowing file changes without opening the diff editor.
* Updated documentation to explain how to enable and use Background Edit, including its benefits and relationship with other features.
Updates the Minimax model identifier from `minimax/minimax-m2` to `minimax/minimax-m2.1` in the OpenRouter model picker configuration. Additionally, updates the Cline provider to ensure the new model version is correctly recognized as a free model for cost calculation purposes.
* feat(hooks): Initial implementation of UI output in the CLI
* feat(hooks): Display hooks UI output in the CLI nicely
* feat(hooks): Improvements to the hooks CLI implementation
* feat(hooks): Changes as per Cline's code review of hooks CLI PR
* feat(hooks): Make comments more concise and to the point
* feat(hooks): Minor improvements to code complexity
* feat(cli): polish hook status output (headers, paths, spacing)
- Align hook headings with ToolRenderer-style language
- Prefer workspace-relative paths for hook scripts
- Document hook_output_stream suppression + future grouping
- Add unit tests for rendering + path formatting
* feat(hooks): Isolate hook handlers and harden path handling
- Move hook-specific SAY handling into say_handlers_hooks.go
- Use os.UserHomeDir + filepath.Rel for more portable hook path shortening
- Document why hooks render from state stream (ordering/reordering)
- Standardize on filepath for filesystem paths in cline-clients
- Avoid silently ignoring os.Getwd() errors in dev fallback resolution
* feat(hooks): Add pendingToolInfo to hook status in the CLI
* feat(hooks): Fix verbose output to CLI
* feat(hooks): Add changeset commit.
* feat(hooks): code review feedback - make paths OS-agnostic
* feat(hooks): code review feedback - use strings.Builder
* feat(hooks): code review feedback - no need to normalize say type
* feat(hooks): code review feedback - define HookOutputStreamMeta type
* feat(hooks): code review feedback - remove dynamic import
* feat(hooks): code review feedback - turn repetitive logic into helper function and make say type names reflect proto field names
* feat(hooks): code review feedback - remove unrelated changes
* feat(hooks): prepend hook script path with repo name
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* fix: sap provider - support replace credentials in orchestration mode without the need to reload vscode
* feat: support azure identity authentication
Signed-off-by: patst <patrick.steinig@googlemail.com>
* feat: support azure identity authentication
Signed-off-by: patst <patrick.steinig@googlemail.com>
* chore: format changes
* set azureIdentity in state
* ADD Openai Compat Azure AD managed identity support: added proto messages def for azure identity, updated OpenAI APi key missing if azure identity is checked, ...
* feat: Support Azure Identity DefaultCredential for AzureOpenAI (OpenAI Compatible provider)
* fixed azure identity version and missing state setting in proto
* added missing state setting in proto
---------
Signed-off-by: patst <patrick.steinig@googlemail.com>
Co-authored-by: patst <patrick.steinig@googlemail.com>
Co-authored-by: Wenceslas Wolfersperger <wenceslas.wolfersperger@idorsia.com>
* fix: sap provider - use messages_history field instead of messages because of placeholder_values usage templating error
* fix: sap provider - use messages_history field instead of messages because of placeholder_values usage templating error
* fix: sap provider - use messages_history field instead of messages because of placeholder_values usage templating error
* fix: sap provider - use messages_history field instead of messages because of placeholder_values usage templating error
* feat: add MiniMax model support for OpenRouter and Vercel AI Gateway
Add MiniMax M2, M2.1, and M2.1-lightning models to the list of models
that require special system prompt handling in OpenRouter stream.
Also extend Vercel AI Gateway to apply the same system prompt format
for MiniMax models as used for Anthropic models.
* adding changes with debug logs
* feat: add Select UI component and Storybook story
Add @radix-ui/react-select dependency and introduce a Select Storybook
story to document and validate the new dropdown UI component.
* update position
* feat(prompts): enable parallel tool usage for claude and gemini 3 models
- Update TOOL USE section to allow multiple independent tools per response
- Add rules clarifying when parallel vs sequential tool usage is appropriate
- Specify MCP operations should still be used one at a time
- Update test snapshots to reflect prompt changes
* Change prompts based on whether parallel tool calling is enabled
- GPT5 family: leave as is because parallel tool calling is always enabled
- Gemini 3 family: many or one tool depending on toggle
- Claude 4+ family: many tool or empty instruction to not collide with claude "under the hood" system prompt, which already suggests multi-tool use
* Revert non-parallel behavior to use working prompt.
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
* feat: add MCP server checks with utility function
Add hasEnabledMcpServers() utility function to standardize MCP server detection across prompt variants. Conditionally include MCP-specific instructions only when MCP servers are enabled, avoiding unnecessary prompts when no servers are configured.
* Update prompt test snapshots
---------
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
- Import @vscode/codicons CSS and font files in StorybookDecorator to ensure icons render correctly in the Storybook environment.
- Move the global `index.css` import from `preview.ts` to `StorybookDecorator.tsx` to consolidate style initialization.
Reverts the signature check from #8291 that dropped blocks without
signatures, restoring the fallback to GEMINI_DUMMY_THOUGHT_SIGNATURE
from #8122 to support transferring history from other models to Gemini.
* fix: Baseten model selector issue in ModelPickerModal
Fixed an issue where Baseten model cannot be selected when running in ModelPickerModal.
Refactor ModelPickerModal to reuse ThinkingBudgetSlider component
- Remove duplicated thinking budget slider UI components and logic
- Replace with shared ThinkingBudgetSlider component for consistency
- Clean up unused constants and helper functions
- Simplify provider-specific configuration handling
* clean up styled spans
* fix
* fix: add supportsReasoning property to Baseten models
- Add supportsReasoning field to model configurations in basetenModels
- Implement detection logic for reasoning support via supported_parameters
- Mark reasoning-capable models (DeepSeek-R1, Qwen3, etc.) with supportsReasoning: true
- Update model refresh logic to populate supportsReasoning based on static config or parameter detection
This fixes issues where Baseten models are showing Thinking not supported in the UI.
* add changeset
* simplify
* clean up
* typo
Cerebras rate limiter estimates token consumption using max_completion_tokens upfront, so requesting the model maximum (e.g., 64K) reserves that quota even if actual usage is low. This causes users to hit rate limits prematurely during agentic workflows with many short tool-use responses.
Uses 16K as default which is sufficient for most agentic tool use while preserving rate limit headroom.
Co-authored-by: Seb Duerr <sebastian.duerr@cerebras.net>
- Add MiniMax-M2.1 model with 192K context window and prompt caching
- Add MiniMax-M2.1-lightning variant with higher output pricing
- Update default model from MiniMax-M2 to MiniMax-M2.1
* fix(mcp): handle 404 responses from streamableHttp servers
The MCP SDK sends a GET request to check for SSE stream support when
connecting to streamableHttp servers. Per the MCP spec, servers that
don't support SSE should return 405 (Method Not Allowed), but many
servers incorrectly return 404 (Not Found).
The SDK only gracefully handles 405 responses, so servers returning 404
cause connection failures with "Failed to open SSE stream: Not Found".
This was exposed by the SDK upgrade from 1.22.0 to 1.25.1 in v3.46.0,
which added stricter SSE stream initialization checks.
This fix wraps the fetch function to normalize 404 -> 405 for GET
requests, allowing Cline to work with non-compliant servers while
they update to return proper 405 responses.
Fixes#8320Fixes#7577
* chore: add changeset
Only show a notification when the extension updates, instead of
automatically focusing the Cline sidebar. This prevents the extension
from stealing focus on VS Code launch.
When using background exec mode, commands run in the system default shell
(cmd.exe on Windows, /bin/bash on Unix) rather than the VS Code configured
shell. This ensures the system prompt accurately reflects which shell will
be used for command execution.
- Add getEffectiveShell() function to determine actual shell used
- Pass terminalExecutionMode through SystemPromptContext
- Use system default shell info when backgroundExec mode is active
Co-authored-by: Ara <arafat.da.khan@gmail.com>
Update command cancellation to modify existing message instead of sending new say() to avoid interfering with pending ask() dialogs.
- Extend updateClineMessage to support text updates
- Find last command_output message and append cancellation notice
- Add missing cleanupFileBased() calls for background tracking paths
- Use shared findLastIndex utility
Co-authored-by: Ara <arafat.da.khan@gmail.com>
* fix(api): filter Gemini reasoning details by tool call ID
Filter reasoning details in the OpenAI format transformer to ensure they
only include entries matching the specific tool call ID. This prevents
"Function call is missing a thought_signature" errors when using Gemini
models, where mismatched reasoning details would cause API validation
failures.
* fix(gemini): drop invalid thought signatures and corrupted reasoning_details
- Gemini direct: drop tool_use/thinking blocks when signature is missing
- OpenRouter: keep only tool reasoning_details matching tool id
- Skip reasoning.encrypted entries missing data to avoid 400s (#8214)
* fix(core): sanitize Gemini tool calls in OpenRouter stream
Gemini models require thought signatures for tool calls. When switching providers mid-conversation, historical tool calls may lack these reasoning details, causing subsequent requests to fail.
This change implements a filter for Gemini models that:
- Identifies assistant messages with tool calls but no reasoning details.
- Drops those tool calls while preserving textual content.
- Removes the corresponding tool response messages to maintain conversation integrity.
* fix: make Workspace and Favorites history filters independent
Move Workspace and Favorites filters out of the VSCodeRadioGroup into
their own container. This fixes the regression where selecting one filter
would prevent selecting the other, since VSCodeRadioGroup enforces mutual
exclusivity. The filters now work as independent toggles while maintaining
visual continuity with the sort options above.
Fixes#8289
* add changeset
* deep planning demo
* deep-planning-demo cleanup
* Update docs/features/slash-commands/deep-planning.mdx
Co-authored-by: Juan Pablo Flores <juan@cline.bot>
* Update docs/features/slash-commands/deep-planning.mdx
Co-authored-by: Juan Pablo Flores <juan@cline.bot>
---------
Co-authored-by: Juan Pablo Flores <juan@cline.bot>
Update terminal troubleshooting docs to prominently recommend
Background Execution Mode as the primary solution for terminal
integration problems. This provides a simpler fix for most users
before diving into more complex troubleshooting steps.
- Add tip boxes with step-by-step instructions for enabling
Background Exec mode in both terminal guide documents
- Clarify that detailed troubleshooting is for users who
specifically need VSCode's integrated terminal
* feat(telemetry): add terminal type tracking to telemetry events
Add terminalType parameter to terminal telemetry methods to differentiate
between VSCode and standalone terminal execution contexts. This enables
better analysis of terminal output capture success rates across different
environments.
- Add TerminalType, VscodeOutputMethod, and StandaloneOutputMethod types
- Update captureTerminalExecution to require terminalType parameter
- Update captureTerminalOutputFailure to require terminalType parameter
- Add terminalType option to OrchestrationOptions interface
- Update all call sites in VscodeTerminalProcess with "vscode" type
* feat(terminal): add terminal type tracking to telemetry events
Pass terminal type (standalone vs vscode) to telemetry capture calls
for terminal hang and user intervention events. This enables better
analysis of terminal behavior differences between execution modes.
* feat: add telemetry tracking for standalone terminal execution
Add telemetry capture for terminal process completion and errors in
StandaloneTerminalProcess to track execution success/failure metrics.
- Track successful completions (exit code 0 or null) and failures
- Capture error events separately with child_process_error identifier
- Use "standalone" terminal type for metric categorization
* feat: remove z-ai/glm-4.6 from free models list
Remove the Zhipu AI GLM-4.6 model from the free models selection in the OpenRouter model picker component. This change updates the available free model options for users.
* update changelog
- Added GLM 4.7 model
- Enhanced background terminal execution with command tracking, log file output, zombie process prevention (10-minute timeout), and clickable log paths in UI
- Apply Patch tool for GPT-5+ models (replacing current diff edit tools)
- Duplicate error messages during streaming for Diff Edit tool when Parallel Tool Calling is not enabled
- Banner carousel styling and dismiss functionality
- Typos in Gemini system prompt overrides
- Model picker favorites ordering, star toggle, and keyboard navigation for OpenRouter and Vercel AI Gateway providers
- Fetch remote config values from the cache
- Anthropic handler to use metadata for reasoning support
- Bedrock provider to use metadata for reasoning support
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
When the triage bot identifies a likely regression from a recent PR or
commit, it will now apply the "Regression" label to help the team
prioritize and route these issues to the responsible developer.
- Add glm-4.7 model configuration for both international and mainland ZAi
- Update default model from glm-4.5 to glm-4.7
- Add missing cacheReadsPrice property to glm-4.6 model configs
* refactor(terminal): centralize constants and implement output capping
- Move terminal-related constants (timeouts, compiling markers, and size limits) to a centralized constants file.
- Implement output capping in VscodeTerminalProcess to prevent memory exhaustion by truncating fullOutput when it exceeds MAX_FULL_OUTPUT_SIZE.
- Update terminal process logic to use centralized constants for consistency across VS Code and standalone terminal implementations.
- Clean up imports and formatting in the task core.
* update pricing
* fix(terminal): improve compilation marker detection accuracy
Extract compilation detection logic into isCompilingOutput() function
that checks markers at the START of lines only, rather than anywhere
in the output. This prevents false positives from file names, error
messages, or code snippets that happen to contain marker words.
* update pricing
* refactor(chat): simplify log file link display to show filename only
- Extract filename from full path for cleaner display
- Change from banner-style div to compact ghost button
- Add full path as tooltip for reference
- Improve styling with smaller text and border-based separator
* feat: add graceful process termination with SIGKILL fallback
Extract process termination logic into a reusable utility that handles
graceful shutdown:
- Send SIGTERM first to allow processes to clean up
- Wait for configurable timeout (default 2 seconds)
- Fall back to SIGKILL if process doesn't exit gracefully
- Support cross-platform termination via tree-kill
Update StandaloneTerminalProcess to use the new async terminate method
and update ITerminalProcess interface to allow async termination.
* feat(terminal): simplify compilation output detection to match markers anywhere
Change isCompilingOutput to use simple string includes() instead of
line-by-line startsWith() matching. This allows detecting compilation
markers anywhere in the output rather than only at the start of lines,
making detection more permissive and the code simpler.
* update pricing
* fix(ui): use theme-aware colors for shell integration warning banner
* fix(ui): improve log file path banner styling and wrapping
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* feat: add SessionStart hook for Claude Code on the web
Adds a session-start hook that runs in remote environments to:
- Install all dependencies (npm run install:all)
- Generate gRPC/protobuf types (npm run protos)
This enables Claude Code web sessions to properly run tests and linters.
* feat: add .worktreeinclude for Claude Code worktrees
Ensures environment files and local settings are copied to new worktrees:
- .env files
- .clineignore
- Local Claude settings
* fix: include node_modules and generated files in worktreeinclude
Copying these to worktrees saves significant setup time:
- node_modules: skips npm install (~1-2 min)
- src/generated/, src/shared/proto/: skips proto generation
* feat: install gh CLI and add GITHUB_TOKEN support in session hook
- Rename session-start.sh to claude-code-for-web-setup.sh
- Install latest gh CLI from GitHub releases
- Check for GITHUB_TOKEN and inform Claude about gh availability
- Enables using `gh issue`, `gh pr` commands when token is configured
* refactor: make .worktreeinclude a symlink to .gitignore
When scrolled to bottom, the up button wasn't reliably scrolling all
the way to the top because Virtuoso's virtual rendering doesn't have
all items rendered. Added a delayed follow-up scroll to ensure we
reach the actual top after items render.
* fix(ui): center View All button under task history list
* fix(ui): use VSCodeRadio for workspace and favorites filters on history page
* fix(ui): move Select All/None buttons to bottom of history page with secondary style
* fix(ui): prevent MCP server toggle from triggering row expand/collapse
* fix(ui): show connecting status when enabling MCP server
* fix(ui): show connecting status during MCP server restart
* fix(ui): add cursor pointer on hover for expandable MCP server rows
Instead of auto-generating release notes from PRs, extract the
changelog entry for the version being released and append the
Full Changelog comparison link.
When starting a task in a location that can't use checkpoints (e.g., Desktop,
Documents, Downloads, or home directory), the checkpoint message was still
appearing in the chat without a SHA. This happened because the code added
the message before checking if initialization had failed.
Now we check for `checkpointManagerErrorMessage` before showing the checkpoint
message, so users in unsupported locations won't see a broken checkpoint element.
* Revert "feat: enhanced compact task complete ui (#8025)"
This reverts commit cc36c67fc9.
* feat(ui): add green styling to task completed row
- Add green border and tinted green background to task completion container
- Add copyButtonStyle prop to WithCopyButton for custom positioning
- Revert previous compact task UI changes in favor of simpler styling
* fix(mcp): resolve race condition when updating Cline-specific MCP settings
Fixes a bug where toggling auto-approve for MCP tools or changing timeout
settings would cause the UI to flash and revert, making the toggles appear
unresponsive.
The root cause was a race condition between two state update mechanisms:
1. RPC Response: Returns updated servers immediately to the webview
2. File Watcher: Detects the settings file change and triggers a second
update ~100ms later, potentially overwriting the first
Additionally, the file watcher was triggering full server restarts even
for settings changes that don't affect the MCP transport connection.
Changes:
- Add `isUpdatingClineSettings` flag to skip file watcher processing
when we're making internal settings changes
- Add `configsRequireRestart()` method to distinguish between settings
that require server restart vs Cline-specific UI settings
- Only notify webview when actual connection changes occur
- Update in-memory state for timeout changes without server restart
- Add comprehensive documentation for future Cline-specific settings
* chore: add changeset
* fix: update comments and sync all Cline-specific settings in-memory
* feat: add background edit mode with webview diff display
- Replace editor-based diff preview with webview DiffEditRow component
- Remove unused partialPreviewState and related methods from ApplyPatchHandler
- Integrate FileEditProvider in Task for background file edits when enabled
- Add comprehensive Storybook stories for diff edit row states
Test Plan:
1. Go to Features Setting to turn on `Background Edit`
2. Start a task that would perform file edits
3. Verify the diff edits will be performed in the background instead of stealing focus from your editor
4. Verify the new stories in Storybook for the new DiffEditRow components
* backgroundEditEnabled
* changeset
* clean up
* clear time out
* fix storybook
* refactor: banner system with data-driven architecture
Add new banner data structures and types to support a flexible, backend-driven
banner system. This enables dynamic banner management while maintaining
consistent UI rendering.
Changes:
- Add BannerCardData interface for banner configuration with support for icons,
severity levels, actions, and platform/user filtering
- Add BannerActionType enum defining action handlers (link, settings, CLI
install, model selection)
- Add BannerAction interface for button/link definitions
- Refactor banner rendering logic to use data-driven approach instead of
hardcoded implementations
- Update BannerCarousel component to handle new action types dynamically
This allows the backend to construct banner JSON that the frontend renders
consistently through the BannerCarousel component when ready.
* apply feedback
* update e2e test
* Add BackendBanner struct with converter
* clean up types
* clean up
- Remove hardcoded shouldEnableReasoning check in AwsBedrockHandler
- Use modelInfo.supportsReasoning from metadata to determine if reasoning should be enabled
- Update src/shared/api.ts to include supportsReasoning: true for all relevant Bedrock models (Claude 3.7, 3.5 Sonnet/Haiku, Opus, and 1m variants)
- Ensure consistency with other providers by keeping model capabilities in metadata
* feat: make banner providers filtering determined by what is selected instead of existing provider keys
* refactor: address feedback, use default case for string comparison
Add backgroundEditEnabled setting to global state and settings infrastructure.
This includes:
- Proto definition for the update settings request
- State management in controller and state helpers
- Extension state interface updates
- Default value of false in webview context
Building block for ENG-1367. Setting is not yet used in the UI or anywhere in the app yet. It will be done in the follow-up PR where the feature is implemented.
- Add error_level field to telemetry proto messages
- Move getConfiguration usage from core services to vscode hostbridge provider
- Remove migrateDisableBrowserToolSetting and migrateChromeExecutablePathSetting methods
- Remove direct vscode imports from core/task and services/browser
- Update getTelemetrySettings to retrieve and return telemetryLevel from vscode config
This refactoring centralizes vscode-specific configuration access in the hostbridge provider layer, improving separation of concerns and making core services less coupled to the vscode API. Plus the cline configurations has already been set to be empty in the package.json for vs code extension.
Add early return in WriteToFileToolHandler catch block when tool has
already failed once during streaming when enableParallelToolCalling is not enabled. This prevents the same error
message from being repeatedly added to userMessages array on each
new streaming chunk received.
* Refactor Anthropic handler to use metadata for cache_control behavior
Replace hardcoded switch statement with model.info.supportsPromptCache check, following the same pattern as OpenAI Native and Vertex providers.
* Refactor Anthropic handler to use metadata for reasoning support
Replace modelId substring checks with model.info.supportsReasoning flag, and add supportsReasoning: true to all models that support extended thinking (3-7, 4-, 4-5).
When YOLO mode is enabled and the maximum consecutive mistakes
threshold is reached, automatically fail the task instead of
waiting for user input. This prevents the task from hanging
indefinitely in automated/unattended scenarios.
Displays an error message suggesting to use a more capable model
and ends the task loop with a failure signal.
- Add check for yoloModeToggled flag to prevent waiting for user input
- Auto-respond with tool usage instructions when in yolo mode
- Log the auto-response action for transparency
- Maintain existing functionality for non-yolo mode operations
* Improve Model Picker Modal UI and provider persistence
* Replace fuzzy search with multi-word substring matching in model picker
* feat(model-picker): add thinking slider, provider dropdown portal, and UI improvements
- Add thinking budget slider with min/max constraints
- Render provider dropdown via portal with flip logic for positioning
- Add getProviderInfo helper for settings-only providers
- Use ArrowLeftRight icon for plan/act split toggle
- Close provider list when typing in search
- Fix selection backgrounds with linear-gradient layering
- Improve row heights and icon positioning
* refactor(model-picker): replace Fuse.js with multi-word substring search
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
Replaced the global `--disable-extensions` flag with specific
`--disable-extension` flags for `saoudrizwan.claude-dev` and
`saoudrizwan.claude-dev-nightly`. This allows testing the extension
under development alongside other installed extensions while
preventing conflicts with production or nightly versions of Cline.
* feat: replace diff edit tools with APPLY_PATCH tool for gpt-5+ with native tool calling
Replace FILE_NEW and FILE_EDIT tools with APPLY_PATCH in the native-gpt-5-1 variant configuratiob as that's the format the GPT 5 models are trained on.
* update snapshot
* Update ApplyPatchHandler UI and new line bug
* Remote configured OTEL
* Configure the OpenTelemetryTelemetryProvider for Remote Config and remove it when resetting the confiig
* Address comments
* Fix tests
* Refactor
* Address comments
* Refactor openTelemetryOtlpHeaders and add comment
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
* docs: update multi-root workspace documentation for clarity and consistency
* docs: remove experimental label from multi-root workspace feature
Update documentation to reflect that multi-root workspaces are no
longer considered experimental while still noting the existing
limitations with Cline rules and checkpoints.
* docs: update multi-root workspace examples to clarify workspace config file locations
* docs: add guidance on using VSCode's files.exclude to manage generated folders in multi-root workspaces
---------
Co-authored-by: Tony Loehr <turingxo@gmail.com>
- Added Gemini 3 Flash Preview to the recommended models list in the OpenRouter model picker.
- Updated the "What's New" modal to announce the availability of the new model and provide a quick-start button.
* feat: add new model configuration
Add support for the new Gemini 3 Flash Preview model with reasoning
capabilities. Updates both vertex and gemini model configurations with
pricing, token limits, and thinking level settings.
* update pricing
---------
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* feat(model-picker): add tooltips to plan/act mode tabs
Show "Plan mode" and "Act mode" tooltips when hovering over the P and A
tabs in the split mode view of the model picker.
* fix(model-picker): remove focus outline from search input
* feat(model-picker): add checkmark to selected model and responsive provider
- Add checkmark icon on the right side of the selected model row
- Hide model provider name on viewports under 280px for better space usage
* fix(model-picker): remove double hover dim on provider row
* fix(model-picker): improve provider list styling consistency
- Reduce vertical padding to match model list rows
- Move checkmark to right side
- Use consistent font size
* fix(modals): add consistent arrow pointers to all popup modals
- Refactor ServersToggleModal to use same fixed positioning as other modals
- Add arrow pointer to ModelPickerModal
- Fix arrow z-index (1001) to seamlessly cover modal border
- Add viewport resize handling to ModelPickerModal for arrow repositioning
- Consistent styling across all three popup modals
* refactor(modals): unify modal styling and structure across components
- Introduce ModalContainer component for consistent styling in ServersToggleModal and ClineRulesToggleModal
- Simplify modal structure by removing unnecessary fragments and applying consistent fixed positioning
- Enhance arrow pointer implementation for better visual alignment across all modals
- Ensure responsive design and maintainability with updated styled components
* fix(modals): align modal widths with chat content and fix z-index
- Reduced modal inset from 15px to 10px to match chat content width
- Lowered modal z-index from 1000 to 49 so tooltips appear on top
- Adjusted modal positioning for consistency across all three modals
* fix(model-picker): update icon usage and tooltip content for thinking and split modes
- Replace Sparkles icon with Brain for extended thinking toggle
- Update tooltip messages to reflect current functionality for thinking and split modes
- Adjust padding in provider list item for better alignment
- Add min-height and box-sizing to search container for improved layout
* fix(model-picker): improve row heights, icons, and selection backgrounds
- Add min-height to search container for consistent row sizing
- Increase provider list padding from 4.5px to 6px
- Swap icon positions and use ArrowLeftRight for plan/act split toggle
- Fix transparent selection background on some themes using linear-gradient
* fix(model-picker): close provider list when typing in search
* fix(modals): adjust modal positioning
* refactor(modals): extract shared PopupModalContainer component
Consolidates duplicated modal container styling into a reusable component.
Removes ~130 lines of redundant code across ModelPickerModal, ServersToggleModal,
and ClineRulesToggleModal.
- Add side spacing for small viewports (calc(100%-2rem) instead of w-full)
- Apply rounded corners at all viewport sizes (not just sm:)
- Remove redundant "NEW" badge (title already says "New in v...")
- Remove redundant "Dismiss" button (X close button is sufficient)
- Reduce excess bottom padding for tighter layout
- Add cursor-pointer to dialog close button for better UX
- Clean up unused imports (PLATFORM_CONFIG, PlatformType, isVscode)
GLM models output thinking content in text tags when reasoning is enabled, which is not currently supported by the UI. Disabling reasoning for these models ensures cleaner output.
* fix: restore local MCP server connections blocked by enterprise config logic
The enterprise MCP allowlist feature (commit 3409fa744) inadvertently
blocked all local stdio-based MCP servers for regular users.
The bug: the validation logic applied enterprise restrictions to everyone
by default, when it should only apply when enterprise config is present.
* chore: add changeset
- Add snapshot file for native tools returned by system prompt getter function
- Remove inline comment from test:unit npm script that was breaking the command "npm run test:unit -- --update-snapshots"
Introduces a "Value or Provider" pattern to tool specifications, allowing the `instruction` field to be either a static string or a function of `SystemPromptContext`. This enables dynamic configuration of tool prompts based on runtime context (e.g., user settings) without hardcoding logic in the prompt builder.
- Updated `ClineToolSpecParameter` to support `string | ((context) => string)`
- Added `resolveInstruction` helper to handle dynamic resolution
- Refactored `PromptBuilder` to resolve instructions using the current context
- GLM-4.6
- kat-coder-pro
- Add parsing of env variable patterns to the mcpconfig.json
- TLS Proxy support issues for VSCode
- Add supportsReasoning flag to OpenAI reasoning models
- Fix thinking not available for some models in the OpenAI provider
- Fix invalid signature field issues when switching between Gemini and Anthropic providers
- Extract OpenRouter model filtering into reusable utility and use it in different model pickers
- Fix a11y for auto approve checkbox
- Improve ModelPickerModal provider list layout
- Migrate WhatsNewModal to new shared dialogue component
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* docs: update explanations for Explain Changes feature and command in VS Code
* fix: update Enterprise card link to point to the correct overview page
- this will help the community to onboard to the CLI quicker and me more
open to contributing to it.
Co-authored-by: Max Paulus 🥪 <max@cline.bot>
Co-authored-by: Tony Loehr <turingxo@gmail.com>
- Add Zhipu AI's GLM-4.6 agentic coding model as a free option
- Add KwaiKAT's KAT-Coder Pro model as a free option
- Update filter to preserve kat-coder-pro in Cline provider model list
The IS_STANDALONE environment variable is statically rewritten to
"true" or "false" strings by esbuild. Using a truthy check caused
"false" to be evaluated as true, incorrectly enabling the standalone
proxy configuration.
* feat(webview): migrate WhatsNewModal to new shared component
- Add @radix-ui/react-dialog dependency
- Replace custom modal implementation with Radix Dialog primitives
- Remove commented-out code and unused imports
- Update Storybook stories to include showAnnouncement state
- Add version to mock state for stories
The new Dialog UI component allows us to reuse the component with unified behavior and styles if needed
* replace deprecated VS Code toolkits component with shared components
* Clean up Modal component
* clean up
- Add dummy thought signature fallback for Gemini API when signature is missing
- Filter out thinking blocks without signatures before sending to Anthropic API
- Update signature field cleaning to apply to non-thinking blocks only
- Remove unused DEFAULT_CACHE_TTL_SECONDS constant
This ensures proper message conversion between providers by using Gemini's
documented dummy signature "skip_thought_signature_validator" when original
signature is unavailable, and prevents invalid thinking blocks from being
sent to Anthropic's API which requires valid signatures.
Move provider list inside scrollable container and hide model content
when provider list is expanded. This improves UX by preventing layout
overflow and providing cleaner visual separation between provider
selection and model browsing states.
* feat: add ability for enterprise to disable user from adding MCP servers via remote config
* use a proper type check instead of an as any assertion
* feat: check remote mcp server url against user configured mcp server and do not parse servers not on the allow list if no personal server allowed
* feat: Enforce remote config's local MCP market place settings and filter by allowlist and source (#8068)
* feat: add parse/load enforcement for local mcp market place servers
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
* feat(hooks): Add telemetry for hooks
feat(hooks): Simplify hooks telemetry implementation and improve safety
feat(hooks): Changes as per Cline's code review
* feat(hooks): Changes as per PR feedback.
* fix: auto approve screen reader a11y
prevoius impl contained 2 tab stops per checkbox and read a generic
"Checkbox" label when focues on the checkbox input. This can be
confusing for a visually impaired person using a screen reader
* chore: changeset
* chore: remove unused imports
---------
Co-authored-by: CandiedUniverse <132302818+candieduniverse@users.noreply.github.com>
- Expose `getAvailableSlashCommands` rpc endpoint to UI clients
- Made slash command menu and context menu accessible and screenreader-friendly
- Made expanding/collapsing UI components accessible
- Model identity and routing for devstral-2512 free model
- Extension pricing/UI bug where extension incorrectly shows zero price for devstral-2512
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* fix: update OpenRouter model ID and filter logic for devstral-2512
- Update the model ID for devstral-2512 to include the ':free' suffix
- Modify the filter logic in providerUtils to handle devstral-2512 models
and ensure they are not excluded when using the Cline provider
- Also ensure the default OpenRouter model is preserved in the filter
* Mistral change
* Mistral change
* Mistral change
* accessibility: screen reader support for slash and context menus
* remove unnecessary selection announcement
* changeset run
* chore: clear announcement to avoid interfering with dom queries
* chore: resolve conflict
* refactor: move terminal integration from core to vscode host
- Relocate terminal-related code from core/integrations to hosts/vscode/terminal
- Move TerminalManager, TerminalProcess, TerminalRegistry, and related utilities
- Update import paths across the codebase to reference new locations
- Remove unused shellIntegrationWarningTracker and shouldShowBackgroundTerminalSuggestion from Controller
- This change better separates VSCode-specific terminal handling from core logic
* Mistral change
* refactor: consolidate terminal types into types.ts
- Move ActiveBackgroundCommand, AskResponse, CommandExecutorCallbacks, CommandExecutorConfig from ICommandExecutor.ts to types.ts
- Move OrchestrationOptions, OrchestrationResult from CommandOrchestrator.ts to types.ts
- Delete ICommandExecutor.ts (all types now in types.ts)
- Update imports in CommandExecutor.ts, CommandOrchestrator.ts, index.ts, and src/core/task/index.ts
- types.ts is now the single source of truth for all terminal-related types
* refactor: consolidate ITerminalProcess into types.ts
- Move ITerminalProcess, TerminalProcessEvents from ITerminalProcess.ts to types.ts
- Delete ITerminalProcess.ts (all types now in types.ts)
- Update imports in VscodeTerminalProcess.ts, StandaloneTerminalProcess.ts
- Update exports in index.ts
- types.ts is now the single source of truth for ALL terminal-related types
Close the modal automatically when users click "Try Devstral" or
"Try GPT-5.2" buttons to improve UX flow. Also update Devstral
button text to clarify it's free.
- OpenAI GPT-5.2
- Devstral-2 `devstral-2512` (formerly stealth model "Microwave")
- Improvements to chat modal model picker
- Amazon Nova 2 Lite
- DeepSeek 3.2 to native tool calling allow list
- Responses API support for Codex models in OpenAI provider (requires native tool calling)
- Xmas Special Santa Cline
- Welcome screen UI enhancements
- Initial checkpoint commit now non-blocking for improved responsiveness in large repositories
- Gemini Vertex models erroring when thinking parameters are not supported
- Restrictive file permissions for secrets.json
- Ollama streaming requests not aborting when task is cancelled
- OpenAI provider to centralize temperature configuration and include missing GPT-5 model settings
- OpenAI native handler to use metadata for model capabilities
- Vertex provider to use metadata for model capabilities
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* feat: add inline model picker modal
* fix: add together to SETTINGS_ONLY_PROVIDERS, remove sapaicore
* Fix bedrock thinking support and add together to dynamic providers
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
Previously, tool results were tracked using the tool name as a key. This caused a critical bug during parallel tool execution: if the same tool (e.g., `read_file`) was called multiple times in a single turn, subsequent calls would overwrite the previous ones in the `toolUseIdMap`. This resulted in missing tool results for all but the last call.
This commit changes the tracking mechanism to use the unique `call_id` provided by the LLM as the key. This ensures that every tool call is tracked independently, regardless of the tool name.
Specific changes:
- Updated `toolUseIdMap` in `Task.ts` to store `call_id -> tool_id` instead of `tool_name -> tool_id`.
- Updated `ToolResultUtils.ts` to retrieve tool IDs using `block.call_id`.
- Removed legacy MCP-specific logic that manually mapped the generic `use_mcp_tool` name to an ID. This is no longer necessary (and would be incorrect) as MCP tools now also use the robust `call_id` tracking, enabling parallel execution for them as well.
* feat: add experimental parallel tool calling support
Add a new experimental setting that allows models to call multiple tools
in a single response. This is automatically enabled for GPT-5 models.
- Add enableParallelToolCalling setting (off by default)
- Conditionally enforce didAlreadyUseTool flag based on setting
- Move checkpoint from per-tool to per-response
- Add UI toggle in Feature Settings section
* feat: enable parallel tool calling for GPT-5 in prompts and API (#8028)
* feat: enable parallel tool calling for GPT-5 in prompts and API
Update system prompts for GPT-5 and next-gen variants to instruct
models they may use multiple tools in a single response for independent
operations.
Fix OpenAI API to send parallel_tool_calls: true for GPT-5 models,
which was previously hardcoded to false for all models.
Related: #8020
Changes:
- Updated 5 prompt variant files to allow parallel tool use
- Added enableParallelToolCalls param to getOpenAIToolParams()
- Updated openai-native.ts to enable for GPT-5 model family
* Update system test snapshots for parallel tool calling
* Revert changes to MCP prompts
---------
Co-authored-by: Robin Newhouse <robin@cline.bot>
* feat: Added Devstral 2 Models
* feat(mistral): fix proxy support and add new model definitions
- Fix HTTPClient fetcher to properly extract URL and options from Request
objects, enabling proxy support in standalone mode (JetBrains/CLI)
- Add duplex option for body streams required by Node.js/undici
- Rename devstral-small-latest to labs-devstral-small-2512
- Add mistral-large-2512 model (256K context, $0.5/$1.5 pricing)
- Add ministral-14b-2512 model (256K context, $0.2/$0.2 pricing)
---------
Co-authored-by: omercelik <omercelik@users.noreply.github.com>
The Claude Code CLI returns tool arguments as complete objects, but the
StreamResponseHandler expects string chunks for streaming. This caused
tool calls to fail with "missing parameter" errors because the object
was being concatenated with a string, resulting in "[object Object]".
This change stringifies the tool arguments in the Claude Code provider
before yielding them, ensuring they are correctly parsed by the
StreamResponseHandler.
* enterprise docs
* tested for accuracy
* Reorganize Enterprise docs structure
- Consolidate member management under team-management/
- Unify all configuration under configuration/ with two clear paths:
- remote-configuration/ for simple cloud-based setup
- infrastructure-configuration/ for advanced enterprise features
- Create comprehensive overview pages explaining the differences
- Update all internal links to reflect new paths
- Preserve all existing content while eliminating redundancy
- Maintain clear separation between admin and member documentation
* removed trailing backslash
* fix docs.json
* enterprise docs reformat
* monday update
* tidied up managing members section
* fixed deployment guide
* simplify rules
* workflow cleanup
* rules tweak
* Update docs/enterprise-solutions/configuration/overview.mdx
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* fix other features
* fixed provider docs
* fixed monitoring
* fix providers
* updated cta and rbac
* fix enterprise overview
* enterprise-docs
* hid self-hosted section for now
* addressed format fixed
* docs: restructure monitoring navigation and move telemetry
- Remove unnecessary OpenTelemetry dropdown wrapper in Enterprise navigation
- Move Cline Telemetry from control-other-cline-features to monitoring section
- Update all internal documentation links to new telemetry path
- Simplify Control Other Cline Features section to focus on Yolo Mode only
- Group related monitoring features (overview, telemetry, opentelemetry) together
This creates a more cohesive navigation structure where telemetry-related
features are adjacent and eliminates unnecessary nested dropdowns.
* docs: rename Basic Telemetry to Cline Telemetry and add link
- Rename all instances of 'Basic Telemetry' to 'Cline Telemetry' for consistency
- Add href link to Cline Telemetry card in Monitoring Options section
- Update section headings and subheadings to use 'Cline Telemetry'
- Ensures consistent naming across monitoring documentation
* docs: restructure Enterprise YOLO Mode to focus on administrator controls
- Change title from 'Yolo Mode' to 'YOLO Mode' for consistency
- Add reference link to /features/yolo-mode for general documentation
- Remove duplicate content about basic YOLO Mode functionality
- Focus exclusively on Enterprise administrator configuration and controls
- Add comprehensive policy recommendations by organization size
- Include security implications, monitoring requirements, and compliance considerations
- Provide detailed technical implementation guidance
- Update overview.mdx card description to reflect enterprise focus
* docs: hide self-hosted/infrastructure configuration references
- Remove choosing-your-deployment from Enterprise navigation
- Remove self-hosted references from enterprise-solutions/overview.mdx
- Remove self-hosted comparison and warning from remote-configuration/overview.mdx
- Remove Info boxes linking to infrastructure config from provider pages (AWS, Google, LiteLLM)
- Remove Self-Hosted OpenTelemetry Collector section from opentelemetry.mdx
- Remove self-hosted deployment section from control-other-cline-features/overview.mdx
All self-hosted/infrastructure configuration documentation remains intact but is no longer
navigable or linked from SaaS provider configuration pages. This allows easy restoration
when features become available.
* clarified domain and seat info
* fixed getOpenTabs function
* Update getOpenTabs.ts
* Update package.json
* Revert package-lock files to main
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Juan Pablo Flores <juan@cline.bot>
* fix: prevent logout on network errors during token refresh
When network errors occur at startup (e.g., opening laptop while offline),
users were being logged out because the token refresh failed and returned
null to AuthService.
Now on network errors or max retries exceeded, we return the stored auth
data instead of clearing the session. This keeps users logged in with
their existing credentials. If the token is truly invalid, the actual API
request will fail later when the user tries to use Cline, rather than
logging them out preemptively at startup.
* chore: add changeset
This change removes hardcoded switch statements in VertexHandler and moves model-specific configurations (like reasoning support and prompt caching) into the centralized model metadata in src/shared/api.ts.
Benefits:
- Decouples handler logic from specific model IDs
- Centralizes model capabilities for easier maintenance
- Simplifies adding future Vertex models
- Improves type safety
Related: ENG-1408, ENG-1385
* feat: hide whats new modal header image for now
* feature: change set
* feat: xmas special santa cline
* fix: minor change to actual svg
* Fix colors
---------
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* fix: make initial checkpoint commit non-blocking while preventing tool execution races
- Captures the initial checkpoint commit promise in the Task class
- Ensures executeTool waits for the initial commit to complete before running any tools
- Resolves race condition where tools could modify files before the initial state was fully captured
* feat: allow read-only tools to bypass initial checkpoint block
- Defines READ_ONLY_TOOLS allowlist in shared/tools.ts
- Updates Task executor to check tool name against whitelist
- Allows exploration tools (list_files, read_file, browser_action, etc.) to run in parallel with initial commit
- Maintains blocking for state-modifying tools (write_to_file) to ensure data integrity
* feat(banners): add dismiss functionality to banner carousel
- Add onDismiss callback to BannerData interface
- Implement dismiss button (X icon) in BannerCarousel component
- Add onDismiss handlers for info, model, and CLI banners
- Update banner version in state when user dismisses a banner
- Fix carousel index bounds handling when banners are removed
- Refactor carousel handlers with useCallback for better performance
* Fix imports
* feat(banners): show dismiss X only on last card in carousel
* feat(hooks): Implement PreCompact hook
feat(hooks): Continuing implementation of PreCompact hook
feat(hooks): PreCompact supports contextModification
Fixes as per Cline code reviewing the PreCompact implementation
feat(hooks): Tweaking the PreCompact hook behavior while testing
feat(hooks): Implement PreCompact hook in handleContextWindowExceededError code path
feat(hooks): Implement conversation history temp file in task directory for PreCompact to access
feat(hooks): Implement context window temp file in task history directory for PreCompact to access
feat(hooks): Refactor complex function into helpers
* feat(hooks): Improvements from Cline code reviewing the change set
feat(hooks): Refactor duplicate logic into common utility function
feat(hooks): Improve compaction strategy naming
feat(hooks): Deduplicate a small piece of logic
feat(hooks): DRY for getNextTruncationRange()
feat(hooks): Fix contextModification for PreCompact hook
feat(hooks): Improvements as per Cline's code review feedback
feat(hooks): Improving code quality/reduce complexity
feat(hooks): Further code improvements as per Cline code reviewing
* feat(hooks): Changes as per PR feedback
* Prevent multiple simultaneos refreshes when retrieving auth info
* refactor
* Track logout events
* Add changeset
* Persist the startedAt date
* Fix bug
* Use snake case for event properties
* Log failed refresh request information
* feat(cli): Add hooks_enabled support to CLI settings
- Add hooks_enabled field to Settings proto message (field 134)
- Add hooks_enabled parsing to CLI settings parser
- Enables users to toggle hooks via -s hooks_enabled=true/false flag
Fixes missing CLI support for hooks that was available in the VSCode extension
* feat(hooks): Enable hooks in the CLI
* Add include back in after resolving merge conflict
* feat(hooks): Changes as per human code review feedback.
---------
Co-authored-by: NightTrek <Daniels@dual4t.com>
* Add the cline distribution type to the telemetry
In the telemetry we currently have the IDE name, but because there are so many variants of VSCode and JetBrains, it's not easy to group them by VSCode extension or JetBrains plugin. Add this field to the telemetry.
* update unit tests
* Update src/services/telemetry/TelemetryService.ts
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Update src/services/telemetry/TelemetryService.ts
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Update unit tests
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
This change removes hardcoded switch statements in OpenAiNativeHandler and moves model-specific configurations (like streaming support, system role, and tools support) into the centralized model metadata in src/shared/api.ts.
Benefits:
- Decouples handler logic from specific model IDs
- Centralizes model capabilities for easier maintenance
- Simplifies adding future OpenAI models
- Improves type safety with updated getModel() signature
Related: #7920
* implementing prompt injection for web_search and associated web fetch handler
* remove printing of the ms took
* ui showing query user is searching for
* updating the fields we pass in api request
* updating text for search tool
Move VSCode terminal impls into the src/hosts/vscode package. The VSCode specific code needs to be contained in this directory.
The `src/shared` package is for things shared with the extension and the _webview_; everything in src/ that's _not_ under `src/hosts` is shared with VSCode, JB, CLI implicitly.
ref CLIENTS-34
* feat(terminal): add shared terminal types and interfaces
Add shared terminal module with types and interfaces that enable
terminal management across VSCode, CLI, and JetBrains environments.
- Define ITerminal, ITerminalManager, and TerminalInfo interfaces
- Add TerminalProcessResultPromise for async command execution
- Include StandaloneTerminalOptions for non-VSCode environments
- Prepare module structure for standalone implementations
* feat(terminal): export standalone terminal implementations
Enable exports for standalone terminal classes that were previously
commented out as placeholders:
- StandaloneTerminal
- StandaloneTerminalManager
- StandaloneTerminalProcess
- StandaloneTerminalRegistry
These implementations are now ready for use outside the terminal module.
* fix: resolve TerminalInfo type incompatibility in settings update
- Remove unused TerminalInfo import from both updateSettings files
- Use `as any` cast to handle type mismatch between VSCode and standalone TerminalInfo
- Replace busyTerminals array with busyTerminalsCount to avoid type issues
- Add null-safe access when getting busy terminals length
* feat: import StandaloneTerminalManager from bundled cline-core
Replace standalone enhanced-terminal.js with import from the bundled
TypeScript version in cline-core.js. This consolidates terminal
management code and removes the need to separately include the
runtime file in the VS Code extension package.
- Re-export StandaloneTerminalManager from cline-core.ts
- Update vscode-impls.js to import from cline-core.js
- Remove .vscodeignore exception for enhanced-terminal.js
* feat: simplify standalone terminal manager initialization
Replace global injection pattern with environment variable detection
for determining terminal execution mode. The Task class now directly
instantiates StandaloneTerminalManager when IS_STANDALONE=true instead
of relying on a globally injected instance.
- Remove StandaloneTerminalManager re-export from cline-core.ts
- Simplify vscode-impls.js createTerminal to return stub object
- Use IS_STANDALONE env var for terminal manager selection in Task
- Remove global.standaloneTerminalManager injection pattern
* Fix Standalone build
* Fix Standalone build
* fix: use subagentTerminalOutputLineLimit in StandaloneTerminalManager.processOutput
Match the VSCode TerminalManager logic to properly use subagentTerminalOutputLineLimit (2000) for subagent commands instead of always falling back to terminalOutputLineLimit (500).
* feat: add TerminalManager to HostProvider for dependency injection
- Add TerminalManagerCreator type and createTerminalManager to HostProvider
- Extract ITerminalManager interface to shared/terminal/types for abstraction
- Refactor TerminalManager to implement ITerminalManager interface
- Create StandaloneTerminalManager for non-VSCode environments
- Update TerminalRegistry to use ITerminalManager via HostProvider
- Enable terminal management to work across different host environments
* feat: refactor terminal manager to use ITerminalManager interface
- Replace concrete TerminalManager/StandaloneTerminalManager types with ITerminalManager interface
- Use HostProvider.createTerminalManager() for host-agnostic terminal creation
- Simplify terminal execution mode logic in Task constructor
- Add dynamic imports for StandaloneTerminalManager when backgroundExec mode is used
- Improve logging for terminal manager selection
Add validation to ensure native tool calling is enabled when using
OpenAI Responses API format. Previously, the code would silently fall
back to completion stream when tools were not provided, which could
lead to unexpected behavior.
- Add explicit error when tools are missing for Responses API format
- Update tools parameter type to non-optional in createResponseStream
- Split shell commands to avoid parsing issues with parentheses in author names
- Clarify that hotfixes always use patch version bumps
- Add (hotfix) suffix to release notes commit message format
- Skip npm install step (automation handles lockfile)
- Add pbcopy step to copy tag to clipboard for GitHub Actions
- Add direct link to publish workflow
Add a workflow for creating hotfix releases by cherry-picking commits
from main onto release tags. Includes steps for selecting commits,
creating release notes, version bumping, and tagging.
The taskMetrics.totalCost was incorrectly initialized to 0 instead of
undefined in commit 09692d7d3. This broke cost display for providers
like Anthropic that don't return totalCost in their usage chunks.
When totalCost is 0, the fallback to calculateApiCostAnthropic() in
updateApiReqMsg doesn't trigger because the nullish coalescing operator
(??) only falls back for null/undefined, not 0.
By initializing totalCost to undefined:
- Providers that return totalCost (like OpenRouter) use that value
- Providers that don't (like Anthropic) fall back to calculating cost
from token counts and model pricing info
* refactor: Move OpenAI temperature to model metadata
- Added `temperature` field to `openAiNativeModels` in `api.ts`.
- Updated `OpenAiNativeHandler` to use `model.info.temperature` instead of hardcoded values in switch cases.
- This allows for centralized configuration of model temperatures.
* refactor: Consolidate OpenAI native streaming logic
- Simplified `createCompletionStream` in `OpenAiNativeHandler` by consolidating duplicated logic for streaming models (`gpt-5`, `o3`, `o4`).
- Introduced `systemRole`, `includeReasoning`, and `includeTools` flags to handle model-specific configurations.
- Preserved distinct handling for non-streaming `o1` models.
* cleanup recovering by removing unnecessary recursion; rename parameter for reconstructTaskHistory for clarity, and add stdout logging in error blocks
* Don't return empty array on IO error. Instead, continue throwing error because this is indeed an error and not something that can be corrected by data reconciliation.
* JB Integration Workflow: use pull_request_target to support remote repo PRs
* also sanitize the branch name and title really hard to avoid json injections
* ok lets be extra double paranoid with the sanitization
* ok lets be even more extra safer by also not logging the head_ref
---------
Co-authored-by: Andrei Edell <andrei@nugbase.com>
* docs: add contributing guide for model family
Add detailed CONTRIBUTING.md documentation for system prompt configuration
and model family management. The guide covers:
- Architecture overview with key concepts (model families, variants, matchers)
- Glossary of terms (native/XML tool calling, API formats, components)
- Step-by-step instructions for creating new model families
- Configuration guides for system prompts and tool calling
- API request/response shape configuration
- Testing procedures and best practices
This documentation helps contributors understand the fallback system design
principle (GENERIC fallback) and provides practical examples for extending
support to new model providers and families.
* fix typo
---------
Co-authored-by: Robin Newhouse <robin@cline.bot>
Previously, clicking cancel would break out of the stream loop but
leave the HTTP connection open. Ollama would continue generating in
the background, keeping the GPU busy and blocking subsequent requests
until completion.
Now we call the Ollama SDK's abort() method to immediately close the
connection.
Fixes#7468
* feat: add OpenAI Response API support and Codex model compatibility
- Add ApiFormat enum to proto definitions with OPENAI_RESPONSES format
- Update model info messages to include api_format field across providers
- Refactor OpenAI native handler to conditionally use Response API based on model's api_format
- Add Codex model support in GPT-5 and GPT-5-1 prompt variants with appropriate exclusions
- Remove hardcoded useResponseFormat parameter in favor of model-driven API selection
This enables ChatGPT Codex models to use the Response API format when tools are provided, while maintaining backward compatibility with existing chat completion models.
* add comments
* tabs
* feat: enable native tool calling for deepseek 3.2
Add isDeepSeek32ModelFamily() function to identify DeepSeek 3.2 models and integrate it into the isNextGenModelFamily() check. This classifies DeepSeek 3.2 as a next-generation model family, enabling native tool calling support.
* typo
* feat(prompt): add command output limiting guidance to capabilities
Add guidance in the system prompt instructing the model to proactively
limit command output when anticipating large results. Includes examples
like piping to grep/head/tail or using more specific arguments.
Idea by @AraTheBoss
* chore: add changeset
* refactor: move command output limiting guidance to execute_command tool
Move the guidance from capabilities.ts to execute_command.ts where it
belongs. Extract into a shared COMMAND_BEST_PRACTICES constant to avoid
duplication across model variants (GENERIC, NATIVE_GPT_5, NATIVE_NEXT_GEN,
GEMINI_3).
When API requests fail and auto-retry is enabled, multiple error_retry
messages were shown (e.g., "Attempt 1 of 3", "Attempt 2 of 3", etc.).
This change consolidates them to only show the latest retry message,
reducing visual clutter during retry sequences.
* feat: add auto-recovery for corrupted task history state
Add automatic reconstruction of task history when JSON parsing fails.
Changes:
- Modified `reconstructTaskHistory()` to return reconstruction result or null
- Enhanced `readTaskHistoryFromState()` with automatic corruption recovery
- Added recursive reconstruction attempt with loop prevention flag
- Wrapped JSON parsing in try-catch to handle corruption gracefully
When task history state file is corrupted, the system now automatically
attempts to reconstruct history from existing task folders, providing
better resilience against file corruption issues.
* feat: Add telemetry tracking for extension storage errors
Replace console.error logging with structured telemetry capture for extension storage operations. This change:
- Adds a new EXTENSION_STORAGE_ERROR telemetry event type to track storage-related failures
- Implements captureExtensionStorageError method with error message truncation to prevent excessive data
- Replaces three console.error calls in readTaskHistoryFromState with telemetry events
This improves error monitoring and provides better insights into extension storage failures while maintaining data efficiency through message truncation.
* fix: improve type safety and error handling in task history
Add explicit return type to reconstructTaskHistory() function and refactor error handling in readTaskHistoryFromState() with nested try-catch blocks to better distinguish between file read errors and JSON parse errors. This improves error recovery and makes error tracking more precise through separate telemetry calls.
* add param to reconstructTaskHistory for manually called action
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
- Removed advanced-patterns.mdx and testing-and-debugging.mdx files
- Updated docs.json to remove these pages from navigation
- Updated hooks/index.mdx to remove corresponding Card components
- Simplified Hooks documentation to focus on core concepts: Overview, Hook Reference, and Samples
- Update package version from 3.39.1 to 3.39.2
- Upgrade @changesets/* packages to latest versions
- Update @inquirer/external-editor to 1.0.2
- Upgrade js-yaml from v3 to v4 in @changesets/parse
Fixed the message structure to match the OpenAI Responses API format.
Updated Message ID placement: The message id is stored and set at the message level, not inside the content array.
This fixes an error occuring in the current code when reasoning item is followed by a message text block: 400 Item 'rs_...' of type 'reasoning' was provided without its required following item."
* feat(storage): add mode and token metrics to storage messages
Add mode (plan/act) tracking to ApiProviderInfo and ClineMessageModelInfo interfaces, ensuring each storage message contains the operational mode used during API requests.
Refactor token metrics tracking by consolidating cache write/read tokens, input/output tokens, and total cost into a centralized taskMetrics object. This enables better tracking and storage of token usage and costs throughout the task lifecycle, including for partial/cancelled streams.
Updated api_req_started and api_req_finished messages to include comprehensive token metrics, allowing for accurate cost reporting even when streams are cancelled or fail mid-execution.
* update unit tests with mode
* store task metrics per assistant turn
- Reorder thinking level checks to prioritize high over low
- Auto-set thinking level to LOW for Gemini 3 Pro models when not specified
- Add clarifying comment for thinking budget usage
- Ensure thinking level is always defined for Gemini 3 models to prevent errors
This change ensures Gemini 3 Pro models always have a thinking level set (required by the API) and removes the thinking budget when a level is specified, as they are mutually exclusive parameters.
* add atomic write file using write to temp file + rename to avoid situations where invalid data is written to files due to process interrupt
* adjust concurrency test for windows to expect error
* Add JSON ending to temporary file and don't await unlink
The quotes around the package name "claude-dev" in all changeset files were removed to adhere to the correct YAML format. This ensures proper parsing and consistency across the changeset files.
* v3.39.0 Release Notes
* v3.39.0 Release Notes
* feat: enhance Announcement component with new microwave model and account login functionality
- Updated Announcement component to include a new free microwave model button
- Adjusted active tab logic in OpenRouterModelPicker to default to "free" if a free model is selected
* Add demo link
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
- Remove "Configure notification settings" link and move the toggle directly into the auto-approve menu
- Remove notification setting from General Settings since it now lives in auto-approve menu
- Remove hover:opacity-80 from icon button variant to prevent dimming on hover
- Make docs link font size inherit and separator line thinner
* Remove popups from auto approve settings
* feat(ui): add documentation link to auto-approve modal
Add a "Docs" link in the auto-approve modal that directs users to
the auto-approve documentation page on docs.cline.bot.
* Remove popups from auto approve settings
* Remove popups from auto approve settings
* Remove popups from auto approve settings
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
Right now we are logging the provider type by logging the name of the constructor, but in the compiled code this is obfuscated so it is just some random characters.
Add a name property to the telemetry provider interface.
* fix(hooks): Trigger UserPromptSubmit hook when continuing a completed task
* fix(hooks): Make prompt formating consistent for all UserPromptSubmit entrypoints
* fix(hooks): Code reviewing w/ Cline before submitting PR for human review
* fix(hooks): Improve type safety
* fix(hooks): Add unit tests for buildUserFeedbackContent
* fix(hooks): Minor Cline code review changes
* fix(hooks): Fix test assertion technique
* fix(hooks): Simplify PR
* feat(hooks): Consolidate constants to a shared location as per PR feedback
Relocate OptionsButtons component to be a sibling of WithCopyButton
rather than a child. This fixes the component hierarchy for followup
and completion_result message types, ensuring proper rendering and
interaction behavior. Also adds QuoteButton support to completion_result.
Replace delayed scroll-to-settings approach with direct section targeting.
Settings sections can now be opened directly via navigateToSettings(section)
parameter, eliminating the need for setTimeout-based scrolling workarounds.
* feat: add banners ui, dismissal state handling and event log
* feat: add cli as ide type, clean up some code
* feat: wire up controller and UI for banners
* audit every rule check to ensure it is doing correct filtering and working locally
* seperate out frontend code
* clean up
* fix proto file
* fix quality check errors
* fix banner service tests
* feat: use json polling approach for active banners
* fix: build error
* fix ci
* fix quality check
* use BannerService.isInitialized() instead
* do not log error when banner array is empty, only when missing or not defined
* do not hash instance id
* fix(ui): memoize highlighted text
Optimize UserMessage and TaskHeader components by using useMemo to cache highlighted text results. This prevents unnecessary recalculations of text highlighting on every render, improving performance when text or editedText props haven't changed.
Changes:
- Add useMemo hook to UserMessage component for highlightText result
- Replace inline highlightText calls with memoized values
- Reduces redundant text processing during re-renders
* add changeset
* fix(ui): Add bottom padding for last message item
- Add conditional className to message wrapper div
- Apply `pb-2.5` bottom margin only when message is last in group
* add changeset
* feat(cli): add active task check before entering follow mode
Add validation in FollowConversationUntilCompletion to check if a task
is currently running before entering follow mode. If no active task
exists, display a user-friendly message and exit gracefully instead of
waiting indefinitely.
Also includes minor whitespace formatting cleanup in related functions.
* Fix detached process conditions
* Fix detached process conditions
* Adding stealth
Update system prompt to guide AI toward using non-interactive command variants
to avoid interrupting workflow. This includes using flags like --no-pager,
auto-confirming prompts with -y when safe, and providing input via
flags/arguments rather than stdin.
* Allow slash commands anywhere in message input
Previously, slash commands could only be typed at the beginning of a
message. This change allows users to type slash commands anywhere in
the message, similar to how @ mentions work.
Changes:
- Update shouldShowSlashCommandsMenu() to show suggestions when slash
is preceded by whitespace (not just at start)
- Update insertSlashCommand() to find the slash nearest to cursor
- Update extension-side parseSlashCommands() to find commands anywhere
in tag content using a safer regex that avoids matching URLs/paths
- Update highlight layer to highlight slash commands anywhere
- Only the FIRST slash command per message is processed/highlighted
to maintain consistency with backend behavior
- Fix backspace deletion to work for slash commands anywhere in text
* Add changeset
* Add sticky user message header for better navigation
When users scroll down through a long conversation, a sticky header now appears showing their most recent message that has scrolled out of view. Clicking the header scrolls back to that message.
Key changes:
- New StickyUserMessage component that appears when user messages scroll past viewport
- Track scrolled-past user messages via scroll position detection in useScrollBehavior
- Add data-message-ts attributes to enable message element lookup
- Adjust TaskHeader padding for consistent alignment with sticky header
- Minor styling tweaks to UserMessage and FocusChain for visual consistency
* Fix type error: accept null for lastUserMessage prop
* Replace color-mix() with brightness filter for better compatibility
Use hover:brightness-110 instead of color-mix() for the sticky message
hover effect, as color-mix() may not be supported in all VS Code webview
contexts.
* Address Copilot review feedback for sticky user message
- Remove unused slide-down animation CSS
- Extract magic number 32 to STICKY_HEADER_HEIGHT constant
- Use cn() utility for conditional className in MessagesArea
- Add keyboard accessibility (role, tabIndex, onKeyDown) to StickyUserMessage
* Address additional Copilot review feedback
- Fix virtualized element detection: only consider missing elements as scrolled past
if we've already found visible elements after them (fixes incorrect sticky header
appearing when scrolling to top of long conversations)
- Rename truncatedText to messageText for accuracy (truncation happens via CSS)
* fix(terminal): Add shell option for cmd.exe to prevent double quote escaping
Added shell: true option specifically for cmd.exe to prevent double quotes
from being over escaped during command execution. This resolves Windows-specific
issues with terminal command handling while maintaining compatibility with
other shells.
* chore: Add changeset for terminal command execution fix
The cost badge was using opacity:0 to hide itself when there's no cost,
but still rendered "$0.0000" which took up horizontal space. This caused
the "API Request..." label to wrap to a second line unnecessarily.
Now the badge renders empty content when hidden, taking up no width
while still maintaining its height contribution to the row layout.
* feat(providers): add thinking level config to Vertex and Anthropic model support
- Pass thinking level configuration (plan/act mode) to Vertex provider through VertexHandlerOptions interface
- Add support for @-versioned Anthropic model IDs (e.g., claude-haiku-4-5@20251001) in cache control logic
This enables mode-specific thinking level configuration for the Vertex provider by propagating geminiPlanModeThinkingLevel and geminiActModeThinkingLevel settings based on the current mode. Also extends Anthropic model compatibility with newer versioning format.
* reasoning
* sonnet
* yield signature delta
Remove /s flag and extra quoting from cmd.exe shell arguments.
The previous approach with /s /c and quoted command was causing
issues with proper command execution in Windows cmd.exe.
* add dynamic model fetching for litellm provider and get rid of manual model config; also implement dynamic modelinfo lookup
* don't clear the models list when a fetch fails
* feat(telemetry): Add OpenTelemetry metrics infrastructure
Implement OpenTelemetry metrics support (counters, histograms, gauges) while maintaining backward compatibility with PostHog dashboards.
Changes:
- Updated ITelemetryProvider interface with recordCounter, recordHistogram, and recordGauge methods
- Implemented full OpenTelemetry metrics in OpenTelemetryTelemetryProvider with lazy instrument creation
- Added stub implementations in PostHogTelemetryProvider for backward compatibility
- Updated NoOpTelemetryProvider with metric method stubs
- Added comprehensive documentation in METRICS_IMPLEMENTATION_SUMMARY.md
Architecture:
- Dual instrumentation: existing PostHog events remain unchanged
- OpenTelemetry gets proper metrics for quantitative analysis
- Each provider handles metrics appropriately for its platform
Next steps:
- Add helper methods to TelemetryService for recording metrics with standard attributes
- Update high-priority capture methods (tokens, API performance) to call metric recording
- Validate with OpenTelemetry collector setup
* refactor(telemetry): add structured metrics and improve error handling
- Add userId and userEmail tracking to TelemetryService
- Implement helper methods (recordCounter, recordHistogram, recordGauge) with standardized attributes
- Add structured metrics for turns, tokens, costs, cache usage, and API performance
- Remove default case from TelemetryProviderFactory switch to enable exhaustive type checking
- Improve error handling by moving unsupported provider type logging outside switch
- Ensure all metric recordings include standard attributes (userId, email, metadata)
This refactoring enables better observability by recording key metrics (counters, histograms, gauges) across all telemetry providers while maintaining consistent attribute propagation and error isolation.
* fix: add logs back in to no-op provider
* fix: use Logger instead of console
* fix: remove unreachable code
* fix: satisfy compiler for config.type
* fix: remove metrics implementation summary
* chore: update telemetry to include mode in conversation turn events
- Added mode parameter to captureConversationTurnEvent in TelemetryService.
- Updated related telemetry metrics to include mode for better tracking.
- Adjusted tests to verify mode is correctly captured in telemetry events.
* fix: call signatures from merge detritus
* feat(telemetry): add optional description parameter to metric recording methods
Add optional `description` parameter to `recordCounter`, `recordHistogram`,
and `recordGauge` methods across the telemetry service layer. This enables
providers to include descriptive metadata when recording metrics.
Changes:
- Updated ITelemetryProvider interface methods to accept description parameter
- Modified TelemetryService private methods to pass description to providers
- Updated NoOpTelemetryProvider stub implementation
- Enhanced FakeProvider test implementation to capture descriptions
- Updated test assertions to verify description parameter handling
This change maintains backward compatibility as the description parameter
is optional.
* feat(telemetry): update recordGauge method to handle null values for metric retirement
- Modified the `recordGauge` method in `ITelemetryProvider` and its implementations to accept `null` as a valid value, allowing for the retirement of gauge series.
- Updated the `TelemetryService` to ensure proper cleanup of gauge entries when the series ends.
- Enhanced the `FakeProvider` test to validate the new behavior of gauge recording and retirement.
- Adjusted related tests to confirm that previous series are retired correctly when new values are recorded.
This change improves the management of gauge metrics, preventing stale entries and ensuring accurate telemetry data.
* refactor(telemetry): remove user email from telemetry service and related tests
- Removed the user email property from the TelemetryService and its associated methods, streamlining user attribute handling.
- Updated tests to reflect the removal of email, ensuring that metrics and events no longer rely on this attribute.
- Adjusted documentation in ITelemetryProvider to clarify the attributes used in metric recording.
This change enhances data privacy and simplifies the telemetry data model.
* feat(telemetry): enhance task metrics tracking with new counters and histograms
- Introduced new maps to track task turn counts, tool call counts, and error counts.
- Added methods to increment task counters and reset aggregates for better metric management.
- Updated existing telemetry capture methods to utilize the new counters and record histograms for task-related metrics.
- Enhanced tests to validate the new histogram entries for task turns, tool calls, and errors.
This change improves the granularity of telemetry data, allowing for more detailed analysis of task performance and error rates.
* refactor(telemetry): improve token usage handling in TelemetryService
- Updated conditions for recording cache write/read tokens and total cost to check for finite values, ensuring proper handling of undefined or null values.
- Introduced default values for token counts and total cost to prevent potential errors in metric recording.
- Enhanced readability by using descriptive variable names for token values.
This change enhances the robustness of telemetry data collection by ensuring that only valid numeric values are recorded.
* feat(telemetry): centralize metric definitions in TelemetryService
- Introduced a static METRICS object in TelemetryService to define all metric names, improving maintainability and readability.
- Updated existing telemetry recording methods to utilize the new METRICS constants, ensuring consistency across metric names.
- Enhanced tests to validate the use of METRICS constants in assertions for counters and histograms.
This change streamlines metric management and reduces the risk of errors due to hardcoded strings.
* refactor(telemetry): improve gauge observation handling in OpenTelemetryTelemetryProvider
- Replaced direct access to gauge values with a snapshot method to enhance data integrity during observable gauge callbacks.
- Introduced a new `snapshotGaugeSeries` method to encapsulate the logic for retrieving gauge data, improving code readability and maintainability.
- Updated the observable gauge callback to utilize the new snapshot method, ensuring that the latest values are accurately observed.
This change streamlines the process of observing gauge metrics, reducing potential errors and improving the overall telemetry data collection.
* refactor(telemetry): add required parameter to metric recording methods
- Updated `recordCounter`, `recordHistogram`, and `recordGauge` methods across the telemetry service and providers to include an optional `required` parameter, allowing for more flexible metric recording.
- Adjusted implementations in `NoOpTelemetryProvider`, `OpenTelemetryTelemetryProvider`, `PostHogTelemetryProvider`, and `FakeProvider` to handle the new parameter.
- Enhanced tests to validate the behavior of the `required` parameter in metric recording.
This change improves the control over metric recording conditions, enhancing the telemetry data collection process.
* fixed testing system
---------
Co-authored-by: NightTrek <Daniels@dual4t.com>
Co-authored-by: Daniel Steigman <35793213+NightTrek@users.noreply.github.com>
- Remove intermediate response extraction to preserve full error structure
- Add fallback to error.response.message and error.response.status
- Stringify error object in logException for better console output
* add a refresh guard flag (
* Implemented atomic refresh handling
Replaced the boolean flag with a Promise
- When a refresh is needed, the code first checks if _refreshPromise exists
- If it exists, concurrent calls wait for the same Promise to complete and then return the refreshed token
- If it doesn't exist, a new Promise is created and stored in _refreshPromise
- The Promise is cleared in the finally block after completion
* fix: feature-flags cache persistence during auth transitions
Restructured feature flags polling and cache management to prevent empty cache states during authentication transitions:
- Move cache timestamp update to after successful population in poll() method to ensure cache validity reflects actual data availability
- Remove cache.clear() from reset() method to preserve existing flag values until new data is fetched
- Split polling logic in AuthService to explicitly handle authenticated vs unauthenticated states
- Poll feature flags immediately after reset for authenticated users to ensure cache is populated
This prevents temporary cache misses when users log in/out while maintaining cache freshness guarantees.
* remove reset method and usage in auth flow
Remove the FeatureFlagsService.reset() method and its call during user
authentication. The feature flags polling mechanism is sufficient to
keep flags up-to-date for authenticated users without requiring an
explicit cache reset on auth state changes.
Changes:
- Remove reset() method from FeatureFlagsService
- Remove featureFlagsService.reset() call from AuthService after user identification
- Rely solely on poll() to manage feature flags cache updates
* feat: implement edit tools conversion adapter
Add logic to transform `apply_patch` tool calls into specific `write_to_file` and `replace_in_file` operations. This adapter bridges the gap between patch-based model outputs and atomic file system tools.
- Implement `transformToolCallMessages` to parse patch content:
- Converts "Add File" patches to `write_to_file`.
- Converts "Update File" patches to `replace_in_file` with search/replace blocks.
- Add logic to reconstruct tool result messages to match the expected V4A patch format (including `<final_file_content>`).
- Add comprehensive unit tests in `src/core/api/adapters/__tests__/adapters.test.ts` covering add/update operations, multiple tool blocks, and result reconstruction.
* fix typos
* typo
* fix: ensure reasoning signature is accessible at top level
Extract signature from nested summary object and promote it to the top-level
reasoning structure when not already present. This ensures consistent access
to the signature field across all providers, regardless of where it's initially
provided in the reasoning details. The fomatter that each provider runs would then reconstruct the messages in the format they need.
* clean up
- Simplified plan_mode_respond instruction text by removing redundant explanations and usage field
- Fixed incorrect MODEL_FAMILY references in native-gpt-5-1 config (was using NATIVE_GPT_5 instead of NATIVE_GPT_5_1)
- Added call_id to reasoning handler output for tracking and OpenAI Response API (unreleased)
The prompt simplification makes the response parameter instruction more concise while maintaining clarity. The model family correction ensures the GPT-5-1 variant uses the correct identifier throughout.
* feat(hooks): Add hooks tab to Rules & Workflows modal
* feat(hooks): Implement hooks tab content in Rules & Workflows modal
* feat(hooks): Enable creating new hooks in modal from dropdown selection list
* feat(hooks): Change hook template scripts to use bash
* feat(hooks): Windows not yet supported for hooks, so grey-out toggle on windows
* feat(hooks): Improvements to PR as per Cline reviewing the changes before code review
* feat(hooks): Implement tests for hook management (what the UI does under the hood)
* feat(hooks): Changes as per code review feedback from humans
- Add cline-bot icon font assets (SVG, TTF, WOFF) generated from IcoMoon
- Register custom icon font in VS Code extension manifest
- Replace PNG-based command icon with font-based cline-icon
- Update terminal icon references from generic "robot" to "cline-icon"
This provides a consistent branded icon across the extension and improves visual identity by using the official Cline bot logo instead of the generic robot icon from codicon that was updated by VS Code.
* chore: clear onboarding models on deactivate
* feat(storybook): add OnboardingView story
- Added OnboardingView component to Storybook with new story
- Integrated onboarding models from shared constants
- Updated MockApp to conditionally render OnboardingView based on onboardingModels state
- Renamed WelcomeScreen story to Welcome for clarity
- Added interaction tests for onboarding buttons (Get Started/Use your own API key)
- Configured onboarding models in mock state to support new story
This enables visual testing and documentation of the user onboarding flow within Storybook.
* Update Storybook missing vscode theme color
* Update task name
* typo
* fix: parse mentions/commands in tool results and before auto-condense
**Changes:**
- Move `loadContext` call before auto-condense check to ensure slash commands and mentions are parsed before context condensing occurs
- Extract parsing logic into reusable `parseInputBlock` helper function
- Add recursive handling for `tool_result` blocks containing nested content arrays
- Remove duplicate `loadContext` calls from conditional branches
**Why:**
Previously, mentions (@file.ts) and slash commands in tool results (like attempt_completion feedback) were not expanded because parsing only handled top-level text blocks. Tool handlers return content arrays within tool_result blocks per Anthropic's API format.
Additionally, `loadContext` was called after the auto-condense check, meaning if condensing was triggered, user commands wouldn't be parsed and could be lost during summarization.
**Result:**
- All user feedback with @mentions or /commands is properly expanded regardless of nesting level
- Commands are detected before context management operations
- Cleaner code flow with single parsing point
* preserve array structure in backward-compatible tool results
When using the backward-compatible "cline" tool use ID, spread array
content directly into userMessageContent instead of wrapping it in
createToolResultBlock. This prevents array content from being
JSON.stringify'd and losing its block structure (e.g., tool_result
blocks with array content).
Previously, array content like [{type: "tool_result", content: [...]}]
was being converted to {type: "text", text: "[...]"}, which prevented
loadContext from properly parsing tool_result blocks.
* clean up
* fix(task): preserve block structure when processing string content
Instead of returning only the processed content, now properly updates the
block.content property with the processed text wrapped in an array and
returns the complete block object. This ensures the block structure is
maintained throughout the processing pipeline rather than being discarded.
* kimik2 thinking added to static model dropdown
* numerical separators
* don't set kimi k2 thinking as default
---------
Co-authored-by: AlexKer <AlexKer@users.noreply.github.com>
Update RuleRow component to use isDisabled for both the switch disabled state and tooltip visibility, ensuring required rules cannot be toggled off by users. Previously used separate logic that may have miscalibrated disabling for required remote rules.
* fix: Centralize reasoning details within thinking blocks
This commit refactors how reasoning details are managed across the system, integrating them directly into `ClineAssistantThinkingBlock` to improve consistency and reduce complexity.
Previously, `reasoning_details` were often explicitly deleted or inconsistently handled, leading to their loss or difficulty in tracking. This change ensures that reasoning details are always associated with their corresponding thinking blocks.
Key changes include:
- `StreamResponseHandler`: The `ReasoningHandler`'s `getCurrentReasoning` method now directly returns a `ClineAssistantThinkingBlock` which encapsulates the reasoning content and its `summary` (formerly `details`). The separate `getThinkingBlock` method has been removed.
- `convertToOpenAiMessages`: Explicit deletion of `part.reasoning_details` for `thinking` parts is replaced by setting it to `undefined` with a comment, indicating that these details are now expected to be part of the thinking block in the stream.
- `Task`: Simplified streaming logic by directly consuming the `ClineAssistantThinkingBlock` from `reasonsHandler.getCurrentReasoning()`. Redundant temporary variables for reasoning content and details have been removed.
This refactoring centralizes the management of reasoning details, providing a more robust and streamlined approach to handling assistant thinking processes.
* fix(api): attach reasoning details to tool blocks and improve logging
Updates validity of reasoning details within tool blocks and enhances debugging visibility.
- Modify `StreamResponseHandler` to append reasoning details/summary to finalized tool use blocks.
- Update `convertToOpenAiMessages` to extract and aggregate `reasoning_details` from tool messages instead of discarding them.
- Add `Logger.debug` calls in `ClineHandler` and OpenAI transformation for better observability of message chunks and conversion.
- Remove redundant `continue` statements in `ClineHandler` stream processing loop.
* clean up
* remove Logger
* feat: Enable native tool calling for Baseten and Kimi K2 models
Introduces native tool calling capabilities for Baseten and Kimi K2 models, aligning with the OpenAI Chat Completions API specification for function calling.
This change includes:
- Updating the `ApiHandler` interface and `createMessage` methods to accept an optional `tools` parameter.
- Implementing a `ToolCallProcessor` to incrementally build and emit tool call payloads from streaming deltas.
- Modifying the `BasetenHandler` to pass `tools` to the Baseten API and process `tool_calls` deltas.
- Updating the `ClineHandler` to process `tool_calls` deltas received from the Kimi K2 model.
- Enhancing the `CompletionStreamChunk` to include `ToolCall` and `ToolCallDelta` types.
- Marking Baseten and Kimi K2 models in their respective definitions with `native_tool_calling: true`.
- Adjustments to streaming logic in handlers to allow multiple delta types (content, tool_calls, reasoning) to be processed from a single chunk.
* add changeset
* clean up
Ensure the UI displays accurate token usage and costs by updating the API request message when the stream completes. This commit adds a call to updateApiReqMsg followed by saving messages and posting state to the webview, which occurs before finalizing tool calls. This ensures users see the final usage statistics (input/output tokens, cache tokens, and total cost) reflected in the interface immediately after stream processing.
* fix: await presentAssistantMessage calls to prevent race condition
Add await to all presentAssistantMessage() calls to ensure proper
sequencing of message presentation. Previously, the method was called
without awaiting, which could cause race conditions when streaming
tool use content blocks. This ensures that message presentation
completes before continuing execution, particularly important when
handling multiple content blocks or tool interactions.
* revert pr change
Add overflow-y-auto to the modal container to allow scrolling when content exceeds viewport height. This fixes an issue where modal content would be inaccessible on smaller screens or with large rule sets.
* feat: add support for Responses API for openai-native provider [ENG-1227]
- Upgrade openai dependency to v6.9.0 to use the Responses API
- Implement internal handling for reasoning/thinking and redacted output
- Align Anthropic handler message types with the latest SDK interfaces
- Clean up obsolete tooling imports related to tool-use handling
- Enable newer OpenAI capabilities while keeping provider APIs consistent
* Add openai_native_response_api feature flag
* clean up
* clean up 2
* add back gpt-5.1 models
* use call_id
* fix: Remove 'signature' from sanitizeAnthropicContentBlock
Remove 'signature' from sanitizeAnthropicContentBlock as the signature field is required by Anthropic when thinking is enabled.
* Add Changeset
* empty commit
---------
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* refactor(webview-ui): replace custom UI toggle with shadcn Switch component
- Add @radix-ui/react-switch dependency (v1.2.6) https://ui.shadcn.com/docs/components/switch
- Refactor ClineRulesToggleModal to use Radix Switch instead of VSCode buttons
- Improve button styling with reduced padding and adjusted icon sizes
- Enhance form layout with conditional rendering based on expansion state
- Update input field styling with better focus states and border handling
This change provides a more consistent UI experience by leveraging Radix UI's
accessible Switch component while maintaining the same functionality.
* clean up
* clean up
* update switch color
* adjust
* revert unrelated changes
* size
* toggle
* Update webview-ui/src/components/cline-rules/RuleRow.tsx
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>
* v3.38.0 Release Notes
- Gemini 3 Pro Preview model
- AquaVoice Avalon model for voice-to-text dictation
- Automatic context truncation when AWS Bedrock token usage rate limits are exceeded
- SAP AI SDK JS packages upgraded to latest major version
- SAP provider OrchestrationClient now matches OrchestrationModuleConfig type and no longer uses invalid promptTemplating property
- Removed new_task tool from system prompts, updated slash command prompts, and added helper function for native tool calling validation
* Update CHANGELOG.md
---------
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
- Add `google/gemini-3-pro-preview` to `CLINE_ONBOARDING_MODELS`.
- Configure model details including context window, pricing, and capabilities (images, prompt cache).
- Enable users to select the new Gemini 3.0 Pro model during setup.
* feat: add thought signature support for Gemini SDK
Update @google/genai dependency from v1.15.0 to v1.30.0, including nested deps like google-auth-library. Enhance API interfaces with JSDoc comments and new fields such as signature, id, and redacted_data in ApiStreamThinkingChunk to support thought signatures from Gemini SDK as requested. This improves integration with Gemini's reasoning capabilities and ensures compatibility with updated SDK features.
* add changeset
* meaning val check
* typo
* either
* Do not use think budget with gemini-3
This commit addresses two issues related to how reasoning messages are processed and displayed.
Previously, the `say` function was called on every iteration of the reasoning stream loop, even if the current chunk contained no new reasoning content. This caused unnecessary UI updates and could lead to errors if a task was cancelled mid-stream. The `say` call is now conditional, only executing when new `chunk.reasoning` is available.
Additionally, the final reasoning block was only appended to the assistant's message history if a signature was present. This meant reasoning could be lost from the UI if the task was cancelled before a signature was generated. The logic is now updated to append the reasoning block if either a message or a signature exists.
* refactor(task): improve background command cancellation with better error handling
Enhance the cancelBackgroundCommand method with:
- Consolidated early return conditions for cleaner code
- Proper async/await for process termination
- Comprehensive error handling with try-catch blocks for each operation
- Improved logging for termination success/failure scenarios
- Updated cancellation notification message
- Use finally block to ensure notification is always sent
Improve StandaloneTerminalProcess.terminate() with:
- Better guard clauses and early returns
- Enhanced error handling for SIGTERM and SIGKILL operations
- More detailed logging for graceful vs forced termination
- Fallback to SIGKILL if SIGTERM fails immediately
Fix critical issue where terminate() method was not accessible on the merged promise object returned by executeCommand, preventing Task.cancelBackgroundCommand() from properly killing background processes.
* Fix: add cancel ui
* Fix: add cancel ui
* Fix: add cancel ui
* Fix: add cancel ui
Fixes#7470
When Terminal Execution Mode is set to "Background Exec", commands with
double quotes were being incorrectly escaped on Windows cmd.exe, causing
commands like `echo "\""` or `type "test.txt"` to fail.
The issue was that cmd.exe requires the /s flag and outer quotes when
passing commands with special characters via spawn(). Changed from
`["/c", command]` to `["/s", "/c", `"${command}"`]` for cmd.exe only.
This is a minimal Windows-specific fix that:
- Only affects Windows cmd.exe (PowerShell and Unix shells unchanged)
- Uses standard Windows cmd.exe syntax for proper quote handling
- No changes to process execution flow or behavior
- Change `UpdateProviderPartial` persist flag from false to true in `applyModelChange`
- Add missing newline at end of state.proto file
This ensures that model changes are properly persisted to storage when users
update their provider configuration through the wizard.
* feat(bedrock): add context window error detection and retry handling
Add proper context window error detection for AWS Bedrock provider to enable automatic retry with context truncation. Previously, context window errors were yielded as error text instead of being thrown, preventing the retry mechanism from handling them.
Changes:
- Detect ValidationException errors matching context window patterns in both Converse API and stream processing
- Throw context window errors instead of yielding them as text to trigger retry logic
- Add checkIsBedrockContextWindowError() function to identify Bedrock-specific context limit errors
- Support multiple error message patterns (input too long, context exceed, maximum tokens, etc.)
- Handle nested error structures from Vercel AI SDK and AWS SDK
This enables automatic context management when Bedrock models hit token limits, improving reliability and user experience.
* Fix: raise errors
Remove automatic enablement of native tool calls for next-gen models and providers. The feature should be controlled exclusively by explicit user settings (feature flag and global state) rather than being automatically inferred based on the model type during experimental state.
Changes:
- Removed `isNextGenModelProvider` import (no longer needed)
- Eliminated `inferredNativeToolCalls` logic that auto-enabled the feature for next-gen models
- Simplified `enableNativeToolCalls` to only check explicit feature flag and global state settings
- Makes behavior more predictable and user-controlled
* fix: ensure tool arguments are streamed during file operations
- Update userMessageContentReady condition to include streaming tool arguments, not just new content blocks
- Add null check for input object in tool-use-handler to prevent errors
- Improve partial JSON parsing with better fallback handling
- Replace console.log with Logger.debug for tool call chunks
- Add clarifying comments for lock mechanism and streaming behavior
This fixes an issue where new file content was not being properly streamed to tools during write operations, causing the UI to stop updating while tool arguments were being received.
* Add changeset
* typo
* fix(task): reset content index to execute tool blocks during streaming
Reset the currentStreamingContentIndex to the first tool block position
when tool blocks are present in the assistant message. This ensures that
tool blocks are properly executed instead of being skipped when the index
advances past them or goes out of bounds during content streaming.
Previously, the index could advance beyond tool blocks, causing them to
remain unexecuted. Now, when tool blocks are detected, the index is
explicitly set to textBlocks.length (the start of tool blocks) and
userMessageContentReady is set to false to trigger execution.
* fix(task): reset stream index to enable tool block execution
Reset currentStreamingContentIndex to the first tool block position when
tool blocks are present in the assistant message. This ensures that
presentAssistantMessage processes tool blocks instead of text blocks
during streaming, allowing tool blocks to be executed properly while
streaming is in progress.
The index is set to textBlocks.length, which points to where tool blocks
start in the content array, enabling correct sequential processing of
tools during the streaming phase.
* fix(streaming): improve tool execution flow and prevent control flow fall-through
- Add continue statements after yielding content in cline provider to prevent unintended fall-through behavior
- Mark all streamed tool uses as partial to ensure proper state tracking
- Allow complete tool blocks to bypass presentation lock for immediate execution during streaming
- Simplify userMessageContentReady reset logic and remove redundant tool_call check
These changes improve tool execution responsiveness by allowing completed tools to execute without waiting for the presentation lock, while ensuring proper control flow and state management throughout the streaming process.
* revert WriteToFileToolHandler
* fix: do not add MCP tool with invalid names as native tools
- Filter out MCP tools with names >= 64 characters to avoid provider API rejection
- Reduce nanoid length from default (21) to 5 characters for server UIDs
Provider APIs reject tool registration when tool names exceed 64 characters.
This change prevents registration errors by skipping tools with long names
and generating shorter UIDs to minimize the constructed name length
(uid + identifier + tool name).
* Add Changeset
* Update src/services/mcp/McpHub.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update src/core/prompts/system-prompt/registry/ClineToolSet.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: correct TaskTimeline height
- Remove TIMELINE_HEIGHT constant in favor of h-full and h-4 utilities
- Replace inline styles with Tailwind classes for better maintainability
- Change timeline blocks from rounded-xs to rounded-full for consistency
- Fix timeline display being cut off due to incorrect height constraints
This refactor resolves the visual layout issue where timeline items were
truncated while improving code consistency by leveraging Tailwind's
utility-first approach throughout the component.
* add changeset
* fix(hooks): Fix cancel: true returned by TaskResume
* fix(hooks): Prevent TaskCancel from being triggered twice by TaskStart cancel and by TaskResume cancel scenarios
Use React.memo to wrap CreditsHistoryTable, reducing unnecessary re-renders
when props are unchanged and improving performance of the account view that makes it looks like it glinches.
* refactor: replace Anthropic MessageParam with ClineStorageMessage type
Replace Anthropic SDK's MessageParam type with the new ClineStorageMessage type across API providers and tests in the effort of storing api messages in a type safe environment that we can expand from and avoid adding undocumented properties to Anthropc Message type that are not visible to the downstream services.
This change:
- Removes dependency on @anthropic-ai/sdk types in multiple providers
- Introduces ClineStorageMessage from shared messages module
- Updates method signatures in Dify, OpenAI, LiteLLM, and ClaudeCode handlers
- Updates corresponding test files to use the new type
This decouples the codebase from Anthropic-specific types and standardizes message handling using an internal storage format across all providers that improves type-safety, preparing for the properties added by the Response API use.
As ClineStorageMessage is an extension of the Anthropic Message type, everything should work the same with no breaking changes. Green CI is expected.
* clean up
* fix(hooks): Reorder the UI elements so that PreToolUse appears above tool
* fix(hooks): Prevent PreToolUse hook from migrating down the screen
* fix(hooks): PreToolUse reordering should apply to 'tool', 'command', 'use_mcp_server', and 'browser_action_launch' message types
* feat: support feature flag payload & dynamic onboarding model list
- Updated proto to use OnboardingModelGroup instead of bool flag for flexible onboarding
- Added getClineOnboardingModels function with caching and remote overrides for dynamic model fetching
- Modified controller to fetch and pass onboarding models to webview
- Updated UI to use dynamic models for selection, enabling flexible onboarding
- Enhanced feature flag service to support non-boolean payloads for better configurability
* clearOnboardingModelsCache
* feat: upgrade sap-ai-sdk major version
* feat: upgrade sap-ai-sdk major version
* feat: upgrade sap-ai-sdk major version
* feat: upgrade sap-ai-sdk major version
* feat: upgrade sap-ai-sdk major version
* feat: upgrade sap-ai-sdk major version
* feat: upgrade sap-ai-sdk major version
* feat: upgrade sap-ai-sdk major version
* feat: upgrade sap-ai-sdk major version
* feat: upgrade sap-ai-sdk major version
* feat: upgrade sap-ai-sdk major version
* fix(hooks): Run PreToolUse only after approval; get it working for read_file first
* fix(hooks): Run PreToolUse only after approval; get it working for six more tools now
* fix(hooks): Run PreToolUse only after approval; get it working for the remaining six tools now
* fix(hooks): Implement HookExecution type to avoid using 'any'
* v3.37.0 Release Notes
- GPT-5.1 with model-specific prompting: tailored system prompts, tool usage, focus chain, and deep-planning optimizations
- Nous Research provider with Hermes 4 model family and custom system prompts
- Model-family breakouts for deep-planning prompting, laying groundwork for enhanced slash commands
- Expanded HTTP proxy support throughout the codebase
- Improved focus chain prompting for frontier models (Anthropic, OpenAI, Gemini, xAI)
- Duplicate tool results prevention through existence checking
- XML entity escaping in model content processor
- Commit message generation in command palette
- OpenAI Compatible provider temperature parameter type conversion
- Added missing proto generation step in CONTRIBUTING.md
- New `npm run dev` script for streamlined terminal workflow (fixes#7335)
* Adding image optimizations
* Adding image optimizations
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
Fixes issue where 'cline auth' command would lose all configuration due to process termination race condition.
Root cause: StateManager uses 500ms debounced persistence, but CLI process terminated before setTimeout callback could fire.
Solution: Implemented explicit flushPendingState() mechanism:
- Added StateManager.flushPendingState() method for immediate persistence
- Refactored to extract shared persistence logic (DRY)
- Added flushPendingState gRPC endpoint
- CLI now calls flush instead of using 5s sleep workaround
Results:
- Deterministic persistence (no race condition)
- Faster auth flow (~2s vs 7s)
- Cleaner, more maintainable code
* Remove Qwen3 coder from Cerebras providers
* Update Cerebras Docs to include new model `zai-glm-4.6` and remove `qwen-3-coder-480b-free` and `qwen-3-coder-480b` entries.
---------
Co-authored-by: Juan Pablo <juan@cline.bot>
- Use Anthropic SDK types and return Array<Messages.MessageParam>
- Replace removeReasoningDetails with removeUnknownParams
- Strip unsupported fields (e.g., reasoning_details) and normalize role
- Keep string content unchanged; map array content to known blocks
- Continue adding ephemeral cache_control to targeted user messages
This ensures only Anthropic-supported fields are sent, improving type safety and preventing API errors.
* feat: add AGENTS.md support
* Update webview-ui/src/components/cline-rules/RuleRow.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update webview-ui/src/components/cline-rules/ClineRulesToggleModal.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update font size for documentation link in ClineRulesToggleModal component
* docs: add support for AGENTS.md standard in Cline rules documentation
* fix: delete agents.md
* Add AGENTS.md support
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Follow up from https://github.com/cline/cline/pull/7399
- Only add the redacted reasoning block when a reasoningSignature is present,
instead of checking message length. This aligns with Claude extended thinking
requirements and prevents unsignatured reasoning content from being sent.
- Remove leftover thinkingDeltaAccumulator from the Anthropic provider.
* refactor(api): standardize reasoning yield types across providers
- Unify reasoning output format in Anthropic, Cline, and Minimax handlers
- Change "ant_thinking" and "reasoning_details" to "reasoning" type
- Add signature and redacted_data properties for consistency
- Wrap message_start cases in braces for scoping
- Consolidate yields to reduce redundancy and improve maintainability
* VercelAIGatewayHandler
* feat: add model information tracking to tasks and messages
Add modelId field to TaskResponse and TaskItem proto messages, and introduce ClineModelInfo message type to track provider and model IDs throughout the system. Update API transform functions to use ClineStorageMessage types and refactor message handling to support model information tracking.
This enables better tracking and auditing of which AI models are used for specific tasks and messages, improving observability and allowing for model-specific analytics.
* clean up protos
* remove console log
* minimax
* use new interface
* clean up
CLINE_ENVIRONMENT_OVERRIDE was removed in https://github.com/cline/cline/pull/6621 accidentally. This PR adds it back:
Prioritize CLINE_ENVIRONMENT_OVERRIDE over CLINE_ENVIRONMENT when
setting the runtime environment at module load.
This enables temporary/test-specific environment selection without
modifying the base env var. Existing behavior is unchanged when the
override is not set. Updated inline comment for clarity.
* refactor: Extract provider and model info into method in WriteToFileToolHandler
- Introduce private getModelInfo method to centralize extraction of providerId and modelId
- Replace duplicated telemetry extraction logic across multiple function calls
- Update telemetry service invocations to use the new method's return values for consistency and reduced code duplication/script>
* Update src/core/task/tools/handlers/WriteToFileToolHandler.ts
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>
Add `isNativeToolCall` parameter to telemetry service to track when
assistant turns and provider API errors occur with native tool calls
enabled. This enables better analytics and debugging of native tool
call behavior across conversation turns.
Remove the static _baseUrl field and replace all references with direct calls to ClineEnv.config().apiBaseUrl. This ensures the base URL updates correctly when configuration changes, fixing an issue where the URL remained static even after configuration updates.
* add remotely configured rules and workflows
* fix toggles state not being passes to webview on updates; minor format updates
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
* fix: prevent duplicate tool results by adding existence check
Add a check in ToolResultUtils to skip adding a tool result if one already exists for the same tool_use_id, logging a warning to avoid redundant entries in userMessageContent and maintain message integrity. Introduces Logger import for warning output.
* add changeset
* docs: add guidance for handling strings with quotes in JSON payloads in hooks documentation
- Introduced a new section on using jq's --arg flag for proper escaping of unescaped quote characters in JSON output.
- Provided a code example demonstrating how to handle complex strings or nested JSON structures safely.
This update enhances the documentation by clarifying how to manage JSON payloads effectively within hooks.
* docs: clarify context modification behavior in hooks documentation
- Updated the explanation regarding context modifications and their effect on AI decisions.
- Emphasized the need to return `cancel: true` in PreToolUse hooks to block actions effectively.
This change enhances the clarity of the documentation, ensuring users understand how to implement immediate effects in their hooks.
---------
Co-authored-by: CandiedUniverse <132302818+candieduniverse@users.noreply.github.com>
* Renamed Nous proto config strings
* Revert "feat: migrate terminal execution mode default to background" (#7412)
This reverts commit 0b7393f50e.
---------
Co-authored-by: Ara <arafat.da.khan@gmail.com>
* fix(openai): ensure temperature parameter is explicitly converted to number
Changed temperature assignment to explicitly check for undefined and convert
the value to Number type before use. This prevents potential type issues when
the temperature configuration is provided as a string or other non-number type,
ensuring consistent numeric handling for the OpenAI API.
* set 0 tempature to undefined
* add changeset
* feat: add feature flag to toggle between new and old onboarding view
Add a new feature flag `show_onboarding_flow` that controls whether users see the new onboarding experience or the legacy welcome view. This enables A/B testing and gradual rollout of the new onboarding flow, and gives me better control when model list has changed and the onboarding model list is outdated.
Changes:
- Add ONBOARDING feature flag (enabled by default)
- Add showOnboardingFlow to ExtensionState and proto definitions
- Add getOnboardingEnabled() method to FeatureFlagsService
- Update App component to conditionally render OnboardingView or WelcomeView based on flag
- Extend ExtensionStateContext with showOnboardingFlow state management
This allows for controlled rollout and easy rollback if issues arise with the new onboarding experience.
* default true
* default to false unless e2e test
* showOnboardingFlow default to off
* refactor(task): replace HTML escaping logic with model-specific content fixes
Updated ExecuteCommandToolHandler and WriteToFileToolHandler to utilize a new utility function, applyModelContentFixes, for handling model-specific quirks. This change centralizes the logic for fixing escaped characters and invalid characters, improving maintainability and consistency across command execution and file writing processes. Additionally, introduced ModelContentProcessor to encapsulate the new content processing logic.
* test(ModelContentProcessor): add comprehensive unit tests for applyModelContentFixes
Introduced a new test suite for the ModelContentProcessor, covering various scenarios for the applyModelContentFixes function. Tests include model ID detection, file type handling, orchestration logic, and integration with real-world use cases, ensuring robust validation of content processing for different model types and file formats.
* fix: add changeset for XML escaping bug fix
* refactor(ModelContentProcessor): make modelId parameter optional in applyModelContentFixes
Updated the applyModelContentFixes function to accept an optional modelId parameter, allowing for fixes to be applied even when the model ID is not provided. Adjusted related logic in ExecuteCommandToolHandler and added a test case to verify this new behavior.
- Add one-time migration to set all users to backgroundExec mode
- Change default terminal execution mode from vscodeTerminal to backgroundExec
- Update UI labels to clarify background mode is recommended
- Add migration sentinel flag to prevent re-running
This migration improves the default user experience by using background
terminal execution, which provides a cleaner UI and better performance
compared to the interactive VSCode terminal mode. Existing users will be
automatically migrated once, while new users will get the improved default.
* docs(dictation): remove Windows support from system requirements
- Add note indicating dictation is currently unavailable on Windows
- Remove Windows FFmpeg installation instructions from the list
- Clarify that Windows support is planned for a future release
This update reflects the current state of the feature and sets proper user expectations about platform availability.
* Update docs/features/dictation.mdx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
- Add step 4 in Local Development Instructions to run npm run protos
- Add proto generation step in Extension section
- Create new npm run dev script that runs protos + watch
- Update Terminal Workflow documentation to mention npm run dev
Fixes#7335
Add cleanup logic to cancel any active background command when aborting a task. This ensures background processes are properly terminated before the task abort completes, preventing orphaned background commands.
* fix(models): ensure thinking config has default maxBudget value
- Add ANTHROPIC_MAX_THINKING_BUDGET import and use as fallback
- Check for both "include_reasoning" and "reasoning" parameters
- Set default maxBudget when thinking is supported but value not provided
- Ensures thinking models always have valid budget configuration
This prevents issues when OpenRouter API doesn't return thinking_config.maxBudget, ensuring all thinking-enabled models have a proper budget value set as it's used to determine if a model support thinking in some part of our code.
* update thinkingConfig placeholder
* feat(auth): new onboarding UI
- Add optional `strict` parameter to `createAuthRequest()` to prevent opening new auth windows when already authenticated
- Update onboarding flow with new UI text and button labels ("Login to Cline", "I have my own key", "Ready")
- Add new onboarding data models and step configuration for improved user experience
- Update all e2e tests to reflect new button labels and authentication flow
- Remove obsolete `closeBanners` utility function
- Refactor authentication logic to support strict mode for better control over auth window behavior
This change improves the authentication UX by preventing duplicate auth windows and provides a more streamlined onboarding experience with clearer call-to-action buttons.
* Debug buttons
* Update model list
* Add search box
* improve model selection with names and improved search
- Add name field to ModelInfo interface for better model identification
- Populate model name from OpenRouter API response
- Improve model search filtering to exclude embedding models
- Add case-insensitive search for better UX
- Enhance UI with badges for model capabilities and pricing
- Update styling for better visual hierarchy and selected state
- Display model names in search results for clarity
This improves the onboarding experience by making model selection more informative and user-friendly with better search capabilities and visual feedback.
* clean up
* async onboarding
* Update langauge
* spacing
* search result info text
* update e2e test
* update badge
* style(onboarding): adjust max-width constraint placement
Move max-width constraint from parent container to content wrapper div to improve responsive layout behavior. This ensures the full width is utilized at the top level while constraining only the scrollable content area.
Changes:
- Added w-full to root container for proper width handling
- Removed max-w-lg from middle container
- Applied max-w-lg to content wrapper instead
* Update search box placeholder text
* remove unused description field
* clean up
* Fix search box reset state
* feat: add loading screen to onboarding flow
- Add loading state (step 2) during authentication process
- Simplify welcomeViewCompleted logic by removing auth service check
- Move welcomeViewCompleted state update to auth success handler
- Display loading spinner during sign-in to improve UX
- Ensure auth status update occurs in finally block for reliability
The loading screen provides visual feedback while authentication completes, preventing users from seeing incomplete UI states during the sign-in process.
* update AuthServiceMock
* capture onboarding events
* smaller badge radius
* radius-xs = 4px & add speed label
* update to MiniMax M2
* refactor(ui): simplify SettingsView tab system
- Remove ResizeObserver-based compact mode detection and related state
- Replace dynamic CSS class constants with inline Tailwind classes using cn utility
- Remove debounce dependency and handleTabChange callback
- Simplify tab rendering logic by removing conditional compact/full mode rendering
- Clean up unused imports (debounce, useRef) and state management
- Streamline component architecture for better maintainability
- simplify ModelDescriptionMarkdown
This refactoring reduces complexity while maintaining the same visual functionality, making the code easier to understand and maintain.
* clean up
* simplify calls to updateApiConfiguration by moving the logic around which mode to update to the RPC; change proto field name; use new calls in MoonshotProvider, and update calls in LiteLlmProvider
* remove console logs
* fix: function declarations tool converter for native tool calling
- Replace crypto-based ID generation with nanoid in McpHub that is causing invalid function name issue with Gemini models
- Refactor Google tool parameter schema mapping with typed constant
- Improve parameter properties handling in toolSpecFunctionDeclarations
- Add support for nested properties and enum values
- Skip $schema property during parameter processing
This change fix type safety for Google Gemini function calling parameter definitions.
* disable native tool calling by default
* Always starts with a letter
* whoops
* reuse id
* fix run time package issue
Removes "gemini" and "xai" from the list of providers considered "next-gen" in `isNextGenModelProvider`.
This change prevents Cline from attempting to use native tool callings with these providers until existing issues are resolved.
Remove "grok-code" from isGrok4ModelFamily function to exclude it from the next-gen model list, disabling native tool calling for grok-code as it does not work well with the model.
* feat: refactor APPLY_PATCH tool
Replace separate file creation and editing tools with unified APPLY_PATCH tool for the native-gpt-5 model variant. This consolidation simplifies file operations through a single patch-based interface.
Changes:
- Replace FILE_NEW and FILE_EDIT tools with APPLY_PATCH in config for gpt-5 with native tool calling
- Disable EDITING_FILES system prompt section (no longer needed)
- Remove EDITING_FILES section from base template
- Refactor ApplyPatchHandler with improved architecture:
- Extract patch parsing logic into PatchParser utility class
- Extract file operations into FileProviderOperations utility
- Extract path resolution into PathResolver utility
- Add comprehensive error handling with DiffError types
- Improve type safety with shared Patch types
- Add extensive test coverage for PatchParser including:
- Edge cases (empty files, large files, unicode)
- Error conditions (malformed patches, invalid operations)
- Complex scenarios (multiple chunks, context matching)
- Export PATCH_MARKERS and BASH_WRAPPERS for reusability
This refactoring improves maintainability, testability, and provides a more robust patch application system for the GPT-5 model variant when native tool calling is enabled.
* Add diagnostic to result
* Update unit tests
* add feedback
* typo
* captureToolUsage
* fix test
* fix test
* Update ClineMessage
* update diff editor on stream
* revert content partial stream
* Disable Apply patch and add native gpt snap shot
* Remove delete action and make preserveEscaping conditional
* Add delete function to diff provider
* Update UI for file deletion
* fix: sanitize Anthropic message and removes reasoning_details field
- Extract duplicate Anthropic message formatting code into sanitizeAnthropicMessages function
- Remove code duplication between AnthropicHandler and VertexHandler
- Add support for claude-sonnet-4-5-20250929:1m model
- Remove unused MessageParam import from anthropic provider
* add changeset
* Create thinking content block for gemini
- Add: Hooks allow you to inject custom logic into Cline's workflow
- Add: new provider AIhubmix
- Add: Use http_proxy, https_proxy and no_proxy in JetBrains
- Fix: Oca Token Refresh logic
- Fix: issues where assistant message with empty content is added to conversation history
- Fix: bug where the checkbox shows in the model selector dropdown
- Fix: Switch from defaultUserAgentProvider to customUserAgent for Bedrock
- Fix: support for `<think>` tags for better compatibility with open-source models, and refinements to the GLM-4.6 system prompt
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* docs(features): add comprehensive hooks documentation
Add detailed documentation for the Hooks feature, including:
- Overview of hooks functionality and use cases
- Getting started guide with step-by-step setup instructions
- Hook types and lifecycle explanations
- JSON communication format and examples
- Validation and blocking capabilities
- Best practices and implementation patterns
Update docs navigation to include the new hooks documentation page
in the features section.
* docs(features): reorganize and clarify Hooks documentation
- add frontmatter description and insert demo GIF in Getting Started
- reorganize Hook Types into Task Lifecycle and Communication categories
- convert tables into dedicated sections per hook with explicit "Input Fields" examples
- add JSON input/output examples and clarify execution timing, limits, and context behavior
- remove embedded bash examples and Advanced Topics clutter; streamline troubleshooting and security warning
* Update docs/features/hooks.mdx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* docs: reorganize hooks documentation into four categories
Restructure the hooks documentation to improve clarity and organization:
- Change from two categories to four logical categories: Tool Execution,
User Interaction, Task Lifecycle, and API Response
- Reorder hooks by category based on trigger points and use cases
- Add complete JSON examples with all base fields for each hook type
- Enhance descriptions with clearer use case explanations
- Improve consistency across hook documentation format
This reorganization makes it easier for developers to find the right hook
for their specific needs and understand the complete data structure they
will receive.
* docs: enhance TaskStart hook example with JSON payload handling
Replace basic "Hello World" example with practical demonstration of reading JSON input from stdin and using jq to inspect payload structure and field types. Added explanatory text to help developers understand hook input/output mechanics before building complex logic.
* Update docs/features/hooks.mdx
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* comments out preCompact and taskComplete
* fix: clarify description of hook types in documentation
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: CandiedUniverse <132302818+candieduniverse@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* initial CLI samples
* Add GitHub integration and root cause analysis samples to CLI documentation
* docs(cline-cli): restructure samples into nested documentation group
Convert the single samples page into a grouped navigation structure with three separate sample pages:
- Overview (main samples page)
- GitHub Issue RCA
- GitHub Integration
Add redirect from the old `/cline-cli/samples` path to the new `/cline-cli/samples/overview` location to maintain backward compatibility with existing links.
* docs: improve GitHub issue RCA sample docs with better structure and links
Reorganize documentation with source code links, move demo video to prominent position,
simplify explanations, and add tutorial references for better discoverability.
* docs: improve github-issue-rca documentation and add download instructions
- Remove redundant "Demo Video" heading from mdx documentation
- Add "Getting the Script" section to README with two options:
- Option 1: Clone/view repository with direct link to script
- Option 2: Direct download using curl with example commands
These changes make it easier for users to quickly access and download
the analyze-issue.sh script without needing to navigate the repository
structure, improving the overall user experience.
* docs: update GitHub Root Cause Analysis sample links and enhance README with installation instructions
* docs(samples): improve GitHub integration setup guide and add prerequisites
Enhanced the GitHub integration sample documentation with:
- Added prerequisites section listing required knowledge and resources
- Improved setup instructions with direct curl commands for downloading files
- Added prominent warning callout for editing GITORG and GITREPO variables
- Included beginner-friendly note recommending simpler sample first
- Updated documentation link to point directly to GitHub repository
- Provided two options for adding analysis script (download or copy)
- Enhanced formatting and clarity throughout the guide
These changes make the sample more accessible to new users and reduce
setup friction by providing copy-paste commands and clearer guidance.
* docs(samples): consolidate CLI samples documentation and enhance GitHub integration README with improved image formatting
* Apply suggestion from @Copilot
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Apply suggestion from @Copilot
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* removes bookmarks and creates padding for images
* Update image source in README for CLI sample
* Add GitHub CLI samples and update docs navigation
- Add GitHub Issue RCA sample (docs/cline-cli/samples/github-issue-rca.mdx)
- Add GitHub Actions integration sample (docs/cline-cli/samples/github-integration.mdx)
- Add samples overview page (docs/cline-cli/samples/overview.mdx)
- Update docs.json to include new CLI samples navigation entries
* docs: simplify "Getting the Script" section in GitHub Issue RCA sample
Reorder options so curl download is Option 1 and the full script view is Option 2.
Remove the clone/view-repo entry, move the chmod +x instruction into a Note
after the script accordion, and clarify the Basic Usage intro text.
* docs: tidy GitHub Integration sample — remove redundant workflow placement note, simplify script copy options, fix GitHub Action capitalization and related-samples link
* docs: remove GitHub Integration and GitHub Issue RCA sample READMEs
---------
Co-authored-by: Juan Pablo <juan@cline.bot>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Invert the boolean condition for TooltipContent's hidden prop to properly
show the tooltip when organization has remote configuration enabled.
Previously, the tooltip was hidden when it should be visible and vice versa.
Change the default value of `nativeToolCallEnabled` from `false` to `true` in the global state initialization. This enables native tool calling functionality by default when no previous state exists, improving the out-of-box experience for users.
Remove redundant highlight import and simplify provider search results
mapping in ApiOptions component. Search results now directly map to
items without applying highlighting, reducing unnecessary dependencies
and simplifying the code.
* Add global rules and workflows to the remote config schema
Add a way for the admin to configure global cline rules and workflows for their users.
* Add GCP Vertex provider to remote config
Add config settings for the GCP Vertex provider
Better documentation in shared/net
Better docs, wire up when running standalone.
Use esbuild to statically decide which proxying we are doing.
Add the changeset.
Add the ability to mock this fetch.
* Fixes Hicap model selector dropdown display
Fixes a bug where the checkbox was showing in the model selector dropdown.
The z-index was being improperly applied to the VSCodeTextField, causing the dropdown to be obscured. This change moves the z-index styling to be applied directly to the style attribute of the VSCodeTextField component, resolving the display issue.
* Update .changeset/proud-humans-itch.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Switch Navbar actions to the shared Button component and tooptip to use the new shadcn tooltip component so the navbar render correctly and spacing matches the previous design.
Re-add the Native Tool Call checkbox setting to the FeatureSettingsSection
that was accidentally removed in PR #7126 due to merge conflicts.
The setting allows users to enable/disable native tool calling through the
API when the feature flag is enabled. The UI includes an experimental
warning and descriptive text explaining the functionality.
Changes:
- Add nativeToolCallSetting to useExtensionState destructuring
- Add conditional checkbox UI for Native Tool Call feature
- Include experimental warning and feature description
* fix(task): prevent empty assistant messages in conversation history
Add conditional check to only append assistant content to API conversation
history when the content array is not empty. This prevents unnecessary empty
assistant messages from cluttering the conversation history and potentially
causing issues with the API.
Changes:
- Wrap addToApiConversationHistory call in length check
- Add explanatory comment for the conditional logic
* add changeset
* filter mcp marketplace results based on remote config
* add info ui banner for mcp marketplace remote config state
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
* feat: add AIhubmix provider integration
- Add AIhubmix as a new provider with full API integration
- Implement AIhubmixHandler for API interactions
- Add model fetching functionality via getAihubmixModels
- Create UI components for AIhubmix configuration
- Update proto definitions and API configuration
- Add changeset for version tracking
* docs: add AIhubmix integration documentation
* fix: add plan/act mode fields for AIhubmix and Hicap providers
- Add planModeAihubmixModelId and planModeAihubmixModelInfo
- Add actModeAihubmixModelId and actModeAihubmixModelInfo
- Add planModeHicapModelId and planModeHicapModelInfo
- Add actModeHicapModelId and actModeHicapModelInfo
- Ensures model selection works correctly in both plan and act modes
* merge
* Delete AIHUBMIX_INTEGRATION.md
* fix: bot
* Update providerUtils.ts
This fixes a flaky e2e test by adding an explicit wait for the slash
commands menu to be visible before attempting to interact with it.
Changes:
- Add data-testid to SlashCommandMenu component for test targeting
- Add waitFor() call in test to ensure menu is visible before Tab press
* fix: enable Add Header button in OpenAICompatibleProvider
Implement functionality for the Add Header button that was previously disabled. The button now:
- Enables when headers are not managed by remote configuration
- Creates new header entries with auto-incremented keys (header1, header2, etc.)
- Updates the API configuration state with the new header
This allows users to add custom headers to their OpenAI-compatible provider configuration unless restricted by organization settings.
* add changeset
* Feat:
* add hicap as provider option
* add new variable to handle hicapApiKey
* add variable to handle hicapModelId in Plan and Act mode
* get hicap available model from Hicap Endpoint
* create hicap provider (ui)
* hicap handler
* rebase main into this branch and fixing errors
* add changeset
* fix typo with hicap api key
* resolve comments from cline team on PR
* revert some delete console logs
* HicapModelPicker changed styled components for tailwind format, remove unnecessary hicapModelId migration, refreshHicapModel use setGlobalState function
* rebase main branch
* Remove redundant test code that's very confusing
* feat: add vscodeTerminalExecutionMode to TaskConfig and apply timeout
Add vscodeTerminalExecutionMode parameter to TaskConfig and thread it through ToolExecutor and Task classes. Apply default 30-second timeout to commands executed in backgroundExec mode, similar to existing yolo mode behavior.
This change enables different execution strategies for VSCode terminal commands and ensures background executions have appropriate timeout protection to prevent hanging processes.
- Add anthropic--claude-4.5-sonnet model definition to sapAiCoreModels
- Update SAP AI Core provider to handle Claude 4.5 Sonnet in anthropicModels array
- Enable caching support for Claude 4.5 Sonnet using converse-stream endpoint
- Add Claude 4.5 Sonnet to streamCompletionSonnet37 method for proper response handling
Fixes#7216
Co-authored-by: Wahaj Ahmed Khan <“wahaj.khan@sap.com”>
- Add provider parameter to captureToolUsage() and captureDiffEditFailure() methods in TelemetryService
- Update all 11 tool handlers to extract and pass provider information
- Extract provider using plan/act mode differentiation from state manager
- Update UIHelpers.ts captureTelemetry wrapper to include provider
- Update test file to include provider parameter in test calls
This enables tracking which API provider (anthropic, openai, etc.) was used for each tool execution.
* fix: react-remark rendering in ModelDescriptionMarkdown
- Add useRemark hook to properly parse and render markdown content that was removed in last git commit
- Extract props interface to ModelDescriptionMarkdownProps for better type safety
- Add useEffect to reactively update markdown when content changes
- Set fixed height (h-20) for collapsed state to improve layout consistency
- Replace raw markdown text display with processed reactContent
This change ensures markdown formatting (links, bold, italics, etc.) is correctly rendered in model descriptions instead of showing raw markdown syntax.
* changeset
* feat(hooks): Initial implementation of hooks UI using background terminal UI
* Hooks UI improvements
* Hook discovery improvements
* Separate hooks UI into separate files
* Fix failing tests
* Add missing docs
* Hooks hardening and handling edge cases
* Improvements to hooks error messaging
* Improve TaskCancel hook UI
* Simplify and improve console.log() output from hooks
* Changes from usability feedback
* test: verify linting fixes
* fix: resolve cancel functionality in PostToolUse hook using flag pattern
* fix: add cancel button support for TaskResume and UserPromptSubmit hooks
* Getting things working again
* Fixing cancel behaviors
* Trying another fix
* Demoed
* Add examples to .clinerules/hooks/ directory
* Refactored away loadTaskStateWithoutWorkflow
* Fix unsafe return in finally block
Refactored PostToolUse hook execution to avoid using return statement
in finally block, which the linter flags as unsafe. Instead of early
return, wrapped the hook logic in a conditional check for abort status.
This resolves the biome lint error:
lint/correctness/noUnsafeFinally - Unsafe usage of 'return' in finally block
* Remove unnecessary files from branch
* remove cancelHookExecution() in favor of cancelTask()
* Remove unnecessary polling pattern for hook cancellation
* Fixing cancel behavior
* Fixing cancel behavior
* Fix resume
* Sqaush commits to improve merge tool behavior
Plan out the work needed to resolve race conditions
Fix race conditions (1)
Fix race conditions (2)
Fix race conditions (3)
Fix race conditions (4)
Fix race conditions (5)
Fix unit tests
Updated implementation plan doc
Code quality improvement
Temporary logging to troubleshoot race conditions in hooks UI blocks
Fix streaming output for hooks
Remove in-progress planning file
Revert breakage
Remove unneeded arg output in PreToolUse hook UI
Fix race condition with PreToolUse and PostToolUse hooks
Fix PreToolUse attempt_completion use case
Fix ChatTextArea prompt input
Fixed part of the rersume bug
Clean-up before code review
Change cancel button to abort button
Fixed TaskCancel behavior
Fixing resume behavior (partially fixed)
Make notch arrow visible in hooks block up expand/contract toggle
Prevent cancel/abort from clearing unsent user message
Change 'Cancelled' to 'Aborted' in hook UI block
Use color styles consistent with background terminal
Fix npm compile issue
Remove unneeded hot-cold tracking from hooks
Remove unused constant as per PR feedback
Minor changes
Skip combineHookSequences() if hooks feature setting not enabled
Improve mutex pattern for general use and fix additional race condition
Refactor to reduce duplication (keep it DRY)
Refactor to reduce duplication (keep it DRY) part 2
Fix tests
Skip some tests on Windows (not yet supported)
Hooks unsupported on Windows
Fix broken unit tests
* Fix broken unit tests
* Bee and Eve fixing 'API Request...' test in e2e tests
* Add comment as per ellipsis-dev PR feedback
* Changes as per PR feedback from Evan
* Remove if that always resolves to true
* Don't use vscode API; use cross-compatible solutions instead
* Remove mention of obsolete clineAsk handler
- Add native tool calling support with configurable setting.
- Auto-approve is now always-on with a redesigned expanding menu. Settings simplified and notifications moved to General Settings.
- added zai-glm-4.6 as a Cerebras model
- Created GPT5 family specific system prompt template
- Fix: show reasoning budget slider to models with valid thinking config
- Requesty base URL, and API key fixes
- Delete all Auth Tokens when logging out
- Support for <think> tags for models that prefer that over <thinking>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* feat: add native tool call setting with feature flag support
Add a new native tool call setting that allows users to enable/disable native tool calling functionality. The setting is controlled by both a user preference and a feature flag, providing flexibility for gradual rollout. Changes include:
- Added native_tool_call_enabled field to UpdateSettingsRequest proto
- Implemented state management for the setting in controller and storage
- Added UI toggle in feature settings section
- Updated task execution logic to check both user setting and feature flag
- Extended extension state interface to include the new setting
* Add changeset
Previously, hasThinkingBudget would return true for empty objects ({}),
causing incorrect behavior. Now checks both for truthiness and that the
object contains at least one key.
Also updates thinkingConfig assignment logic to avoid setting empty
objects and converts imports to type-only imports for better tree-shaking.
Refine TaskHeader controls so actions wrap naturally and the cost
label scales down on narrow viewports.
Update tooltip content to wrap flexibly, tweak padding,
add collision padding, and cap width on small screens.
Introduce xs and xxs breakpoint variables to support responsive styles.
* fix: set free pricing for featured models in Cline provider
Add isFree flag to featured models and ensure free models have $0 pricing when using Cline provider. This updates the OpenRouterModelPicker to automatically set input, output, and cache prices to zero for free featured models, preventing confusing info display to users.
* update
* fix
* fix: adjust mode toggle hover and colors
- add hover state to plan/act toggle buttons with toolbar hover color
- set inactive text color to text-foreground
- align toggle styling with previous design
* feat: toggle spacing fix and transparent color
* SwitchContainer to tailwind
* revert
---------
Co-authored-by: Jose R. Perez <trupix@gmail.com>
- extend replace_in_file and write_to_file specs with a native GPT-5 variant to support the model
- swap native GPT-5 config to use write_to_file and replace_in_file tools instead of apply_patch tool
* refactor: use hashed keys for MCP server names in native tool identifiers
- Replace server names with unique hashed keys in MCP tool names to avoid length issues and ensure uniqueness.
- Add McpHub methods to generate and retrieve server names from keys.
- Update McpServer type to include uid field.
- Modify tool-use-handler to resolve server names from keys during tool execution.
* Add server name to tool description
* Fix collision case
* clean up on error
* fix(cli): Fix config set overwriting all settings instead of merging
ENG-1115
This fix resolves the issue where 'cline config set' would overwrite all
settings instead of merging with existing values.
Changes:
1. CLI (cli/pkg/cli/config.go): Changed setCommand to use
UpdateSettingsPartial() instead of UpdateSettings()
2. Server (src/core/controller/state/updateSettingsCli.ts): Added defensive
checks for defaultTerminalProfile to prevent undefined errors
3. Added merge.go with proper settings merge logic
The fix follows git-style behavior where 'cline config set key=value'
merges with existing settings, preserving all other values.
Tested and verified:
- Setting max-requests to 999 works
- Setting edit-files-externally preserves max-requests
- Multiple successive config sets preserve all previous values
* fix: use optional proto bools to fix config set field overwrite
Root cause: Non-optional bool fields in AutoApprovalSettings proto were
transmitting zero values (false) even when not set by user, causing the
server-side merge to overwrite existing settings.
Solution: Made 'enabled' and 'enableNotifications' fields optional in proto,
matching the pattern used by AutoApprovalActions fields. This allows proper
server-side merge detection using 'field !== undefined' checks.
Changes:
- proto/cline/state.proto: Added optional keyword to two bool fields
- cli/pkg/cli/task/settings_parser.go: Use boolPtr() for optional fields
- cli/pkg/cli/task/manager.go: Fix UpdateTaskAutoApprovalAction to use boolPtr()
- Removed client-side merge logic (merge.go, UpdateSettingsPartial method)
- Simplified config.go to use UpdateSettings() directly
This approach is simpler and more maintainable than the previous client-side
merge solution, relying on the existing server-side merge logic that already
handles undefined values correctly.
* fix: Address celestial-vault feedback on proto optional fields
- Remove unnecessary error suppression in updateSettingsCli.ts
- Make max_requests optional in AutoApprovalSettings proto
- Update Go parser to use int32Ptr() for optional max_requests
- Remove hardcoded MaxRequests default in UpdateTaskAutoApprovalAction
This prevents the CLI from overwriting user-configured maxRequests values
and maintains consistency with other optional fields (enabled, enableNotifications).
* fix: Remove error suppression for missing terminal manager in updateSettingsCli
Addresses celestial-vault's feedback on ENG-1115 PR.
Previously, the check 'if (controller.task && controller.task.terminalManager)'
silently suppressed errors when a task existed but terminalManager was missing.
Now properly throws an error if task exists without terminalManager (error case),
while allowing terminal profile updates when no task is running (normal case).
* refactor(ui): update BrowserSessionRow URL bar spacing
Replace inline styles with Tailwind CSS classes for the URL bar component in BrowserSessionRow. This change:
- Removes the `urlTextStyle` CSSProperties object
- Converts inline style objects to Tailwind utility classes using `cn()`
- Maintains the same visual appearance and conditional styling
- Improves code maintainability and consistency with the project's styling approach
* width
---------
Co-authored-by: Jose R. Perez <trupix@gmail.com>
* fix(ui): hide tooltip arrow for auto approve menu item
Remove the arrow from the tooltip in AutoApproveMenuItem by setting showArrow={false} on TooltipContent. This improves the visual appearance of the tooltip for auto-approve action descriptions.
* clean up
---------
Co-authored-by: Jose R. Perez <trupix@gmail.com>
* fix(ui): align toolbar buttons and improve modal visibility control
- Remove inconsistent top margin (mt-0.5, mt-1) from toolbar buttons for consistent vertical alignment
- Add explicit `open` prop to ServersToggleModal Popover for better visibility state control
- Replace inline style with Tailwind class (mb-2.5) for consistent spacing
- Restructure ClineRulesToggleModal layout with proper flex container hierarchy
- Standardize icon sizing and remove redundant flex classes
- Remove trailing whitespace in ServersToggleModal
These changes ensure toolbar buttons align properly and modal visibility states are managed consistently across the chat interface.
* remove space
---------
Co-authored-by: Jose R. Perez <trupix@gmail.com>
* feat: add Requesty OAuth with custom base URL support
* fix: changing base url to undefined when user unselected base url checkbox
* chore: adding change set
* chore: minor style changes to requesty provider
---------
Co-authored-by: John Costa <john@requesty.ai>
* fix: improve CheckpointError layout and Alert component flex behavior
- Add explicit sizing and spacing classes to AlertTriangleIcon in CheckpointError
- Refactor Alert component to use flex layout instead of absolute positioning
- Reduce padding from p-4 to p-2 and adjust gap spacing for tighter layout
- Remove absolute positioning from dismiss button and icon elements
- Update AlertTitle to use grow class for proper flex behavior
This fixes layout issues with the CheckpointError component on flex containers by replacing absolute positioning with flexbox, resulting in more predictable and responsive behavior.
* alert styles
* title
* scaffold banner api calls
* feat: add basic json rules local evaludation
* use another way to fetch ide name and version
* refine rules as well as rules evaluations in BannerService
* refactor: refactor BannerService so it is unit testable
* feat: add tests to banner service
* refactor: use separate initialize and get for banner service
* refactor: use Logger.error to log errors
* refactor: rename personal to personal only
* fix: move import to the top
* fix: remove unnecessary wrapper
* move banner initialization to common.ts
* fix test
* fix: move import statement to the top in common.ts
* fix: remove feature targeting from rulesets
* fix: remove this._controller check in BannerService
* fix: add getProviderName in AuthService
* fix: include the owner role, treat it same as admin in applying banner rules
* fix: Removing language selection from voice mode to support aqua voice
* fix: Removing language selection from voice mode to support aqua voice
* fix: Removing language selection from voice mode to support aqua voice
* fix: bug fixes
* fix: bug fixes
GPT-5 with native tool calling support has updated to use the new apply_patch tool. Before we can confirm the new tool works consistently, the old GPT-5 variant without native tool calling enabled should continue to use the current file edit tools.
Replace styled-components with Tailwind CSS classes in ModelDescriptionMarkdown component. Remove react-remark dependency in favor of simpler rendering approach. Update component to use shadcn/ui Button component instead of VSCodeLink for "See more" action. Add displayName for better debugging. Remove duplicate and unused styled markdown implementation from OpenRouterModelPicker and RequestyModelPicker.
This change improves consistency with the project's UI component library and codebase clean up.
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* (WIP)feat(api): add tool calling support to openai API handlers
Add ChatCompletionTool parameter to createMessage interface and implement tool calling functionality across API providers. Includes new StreamingToolCallHandler for processing tool call deltas and utility functions for converting tool specifications to OpenAI format.
* Replace path with absolutePath
* Simplify tool spec
* Parse stream and use variant matcher
* Simplify StreamingToolCallHandler
* Add CLINE_NEXT_GEN
* Enable parallel_tool_calls
* ApplyPatchHandler
* Simplify ApplyPatchHandler
* store tool use chunk
* feat(anthropic): add streaming tool use support with OpenAI-compatible format
Add comprehensive support for streaming tool use blocks from Anthropic API:
- Add tool_use case handler in AnthropicHandler to convert streaming tool
calls to OpenAI-compatible format during content block start events
- Implement ToolUseHandler class to accumulate and parse streaming tool use
deltas with incremental JSON parsing support
- Add proper handling for undefined tool message content in openai-format
converter to prevent errors
- Integrate ToolUseHandler into TaskState for managing streaming tool calls
across the request lifecycle
This enables real-time processing of tool calls as they stream from Anthropic's
API while maintaining compatibility with OpenAI's tool calling format.
* feat(anthropic): add tool support with OpenAI tool conversion
Add support for passing tools to Anthropic API with automatic conversion from OpenAI tool format. Implements tool_choice configuration to force tool usage when tools are provided.
Changes:
- Add tools parameter to createMessage method in AnthropicHandler
- Implement openAIToolToAnthropic converter to transform OpenAI ChatCompletionTool format to Anthropic Tool format
- Set tool_choice to "any" when tools are provided to ensure Claude uses one of the available tools
- Fix tool result handling to avoid invalid tool_use_id "cline" by converting to text blocks for backward compatibility
- Add documentation for tool_choice options (none, auto, any)
This enables proper tool calling functionality with Anthropic models while maintaining compatibility with the existing OpenAI tool definitions.
* oops
* fix: remove .mjs extensions from import paths
Remove `.mjs` file extensions from OpenAI and Anthropic SDK import paths to ensure compatibility with current module resolution. This updates imports across multiple files:
- openai/resources/chat/completions.mjs → openai/resources/chat/completions
- @anthropic-ai/sdk/resources/index.mjs → @anthropic-ai/sdk/resources/index
* revert styles.css change from merge main
* Update config and fix tests
* gpt-5 variant for cline provider only
* Fix GPT-5 web fetch tool
* Add native next gen for supported openai providers
* add native tool calling support to more openai comp providers
* list supported providers for gpt-5
* clean up
* Update ApplyPatchHandler
* clean up
* Update ask_followup_question
* Add system prompt test for cline claude 4.5 sonnet
* noToolsUsed
* Add support to gemini api provider
* add native tool calling to more providers
* Skip XML parsing
* clean up
* add back TASK_PROGRESS_PARAMETER to native tools
* feature flag NATIVE_TOOL_CALLS_NEXT_GEN_MODELS
* add allowNativeToolCalls to system prompt context
* add grok-code
* feat(context): ensure tool_result blocks follow tool_use blocks
Add validation to ensure every tool_use block in assistant messages has a corresponding tool_result in the following user message. When tool_result blocks are missing, they are automatically added with "result missing" content to maintain proper message pairing required by the Anthropic API.
This prevents API errors caused by orphaned tool_use blocks and ensures conversation history integrity after context management operations.
* feat(task): refactor ApplyPatchHandler to use FileEditProvider with revert support
Refactor the ApplyPatchHandler to use FileEditProvider and DiffViewProvider
for file operations instead of direct filesystem access. This change adds:
- State tracking for applied commits to enable rollback functionality
- Automatic revert of changes when user denies approval or errors occur
- Enhanced response format that includes full file contents after patching
- Consistent file reading through DiffViewProvider for better editor integration
- Proper cleanup of applied state after successful operations
This improves the patch application workflow by ensuring changes can be
safely reverted and provides better visibility into the applied changes.
The refactoring also aligns file operations with the existing editor
integration patterns used elsewhere in the codebase.
* Finalizing...
* MCP tools converter
* remove ClineDefaultTool.MCP_USE
* Update snapshot
* comments
* use diffViewProvider
* Fix MCP tool use with images
* fix mcp tool converter with reserved keys
* Fix apply patch streaming issue
* add vercel-ai-gateway to supported provider & clean up
* simplfy apply patch handler
* Turn off thinking when native tools are enabled for anthropic provider
* clean up ToolUseHandler
* anthropic tool_choice logic
* improve tool result ordering
- Extract anthropic message mapping logic into a separate variable for better readability
- Add MessageParam import from Anthropic SDK
- Update ensureToolResultsFollowToolUse to maintain tool_result order matching tool_use blocks
- Improve documentation to clarify tool result ordering requirements
This refactoring improves code maintainability by separating the message transformation logic and ensures tool results are properly ordered to match their corresponding tool use blocks in the conversation flow.
<budget:token_budget>200000</budget:token_budget>
* refactor tool result validation for improved efficiency
Simplify ensureToolResultsFollowToolUse method by streamlining the logic
for validating and reordering tool_result blocks. Changes include:
- Use early returns to reduce nesting and improve readability
- Process tool results and other blocks in a single pass instead of multiple iterations
- Eliminate unnecessary deep cloning by mutating content array directly
- Add flag-based update detection to avoid unnecessary array rebuilding
- Simplify the reordering logic while maintaining the same validation rules
This refactoring maintains the same functional behavior (ensuring tool_result
blocks follow their corresponding tool_use blocks) while reducing complexity
and improving performance through more efficient array operations.
<budget:token_budget>200000</budget:token_budget>
* attempt_completion
* use helper function
* remove FreeModelIDs from merge conflicts
* clean up
* Add NATIVE_GPT_5 & exclude gpt-5-chat
* shouldAutoApproveToolWithPath for apply patch
* add openai-native to supported provider
* add lightweight incremental chunk extraction
* update apply patch handler
* revert version regex
* Fix browser action
* feat(proto-python): add script-generated Python gRPC stubs, Go-like client, docs, and PyPI publish workflow
- add scripts/build-python-proto.mjs
- invokes python -m grpc_tools.protoc over proto/**/*.proto
- outputs to src/generated/grpc-python
- mirrors Go layout under client/: connection.py, cline_client.py, services/_client.py
- supports PYTHON env override (use a venv interpreter easily)
- generates src/generated/grpc-python/pyproject.toml so output can be pip installed (pip install -e src/generated/grpc-python)
- package.json
- add protos-python script to run the generator
- docs
- add docs/exploring-clines-tools/python-protos.mdx with venv setup, generation steps, and import examples
- emphasize: everything in src/generated is produced by scripts (do not commit manual edits)
- CI: publish to PyPI only
- add .github/workflows/publish-grpc-python.yml
- workflow generates code via script, builds wheel/sdist from src/generated/grpc-python, and uploads to PyPI
- requires repo secret: PYPI_API_TOKEN (TWINE_USERNAME=__token__)
- optional version override input for workflow_dispatch
Notes:
- generation strictly produces all content under src/generated/grpc-python (including pyproject.toml)
- default package name in generated pyproject is cline-grpc-python (adjustable in the script if needed)
- recommended usage on macOS: PYTHON=/Users/nturumel/projects/oracle-github/cline/.venv-proto/bin/python npm run protos-python
* Delete .github/workflows/publish-grpc-python.yml
* Delete docs/exploring-clines-tools/python-protos.mdx
* Update tired-banks-show.md
---------
Co-authored-by: Andrei Eternal <206184+Garoth@users.noreply.github.com>
* refactor: replace HeroUI Alert with shadcn Alert component
Replace HeroUI Alert component with a new custom Alert component in CheckpointError. The new component provides better control over styling and behavior, removes the dismiss functionality from CheckpointError, and uses a cleaner structure with AlertTitle and AlertDescription. This change improves consistency with the UI design system and simplifies the error display logic.
* Add storybook for TaskHeader with CheckpointError
* clean up
* Add Cerebras GLM 4.6 model support and set as default
- Add zai-glm-4.6 model configuration with 128k context window
- Set GLM 4.6 as default Cerebras model (replacing qwen-3-coder-480b-free)
- Configure 40k max tokens and 2,000 tokens/s performance
* add changeset
* feat(ci): configure OpenTelemetry exporters for production
Set default OpenTelemetry log and metric exporters to console,otlp in both nightly and release workflows to ensure proper telemetry collection in production environment.
* ci: remove OTEL_METRIC_EXPORT_INTERVAL from publish workflows
Removed the OTEL_METRIC_EXPORT_INTERVAL environment variable from both nightly and stable publish workflows as it's no longer needed for the publishing process.
* Set up Tailwind v4
npx @tailwindcss/upgrade 1 ↵
≈ tailwindcss v4.1.13
│ Searching for CSS files in the current directory and its subdirectories…
│ Migrating stylesheets…
│ ↳ Migrated stylesheet: `./src/index.css`
│ Updating dependencies…
│ ↳ Updated package: `tailwindcss`
│ ↳ Updated package: `@tailwindcss/vite`
│ Migrating templates…
│ ↳ Migrated templates for: `./src/index.css`
│ Verify the changes and commit them to your repository.
* Migrate HeroUITooltip to radix-ui shadcn components
* import main.css
* Update e2e test text
* clean up
* Update mode switch test
* Fix auto approve modal z-index number
* Unify styles with theme
* fix spacing and sizes
* update logo id
* Fix e2e test
* Clean up
* npm install tailwindcss @tailwindcss/vite
* npx @tailwindcss/upgrade
≈ tailwindcss v4.1.14
│ ↳ Upgrading from Tailwind CSS `v4.1.14`
│ Searching for CSS files in the current directory and its subdirectories…
│ Migrating stylesheets…
│ ↳ Migrated stylesheet: `./webview-ui/src/index.css`
│ Updating dependencies…
│ ↳ Updated package: `tailwindcss`
│ ↳ Updated package: `@tailwindcss/vite`
│ Migrating templates…
│ ↳ Migrated templates for: `./webview-ui/src/index.css`
│ Verify the changes and commit them to your repository.
* clean up
* clean up
* Remove DRY code and update descriptionForeground class name
* Update TaskHeader classnames
* unify font size
* clean up
* update test with clear test id
* size
* Fix tooltip trigger in settings
* Apply feedback - hide arrow for autoapprove menu
* Align chat toolbox icon stylings
* update data-testid
* set
* CheckpointError
* feat: arrow alignment issues
* text-wrap tooltip
* feat: mcp tooltip arrow fix
---------
Co-authored-by: Jose R. Perez <trupix@gmail.com>
- Added support for MiniMax provider with MiniMax-M2 model
- Remove Cline/code-supernova-1-million model
- Changes to allow users to manually enter model names (eg. presets) when using OpenRouter
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Update OpenRouterModelPicker to include Minimax M2 models even when they
have the :free suffix. Previously, all :free models were filtered out for
the Cline provider, but Minimax models should be available regardless of
their pricing tier to ensure users have access to these specific models.
* refactor: remove CodeSupernova model and related code
Remove the deprecated cline/code-supernova-1-million model from the codebase:
- Delete clineCodeSupernovaModelInfo export from shared API
- Remove CodeSupernova model entry from CLINE_STEALTH_MODELS
- Remove CodeSupernova announcement UI and related state management
- Clean up unused imports (EmptyRequest, AccountServiceClient)
- Update import formatting in refreshOpenRouterModels
This model is no longer supported and has been replaced by other offerings.
* hel
* fix: bug fixes
* fix(scripts): fix proto-lint script execution on Windows
On Windows, directly calling 'scripts/proto-lint.sh' fails because it's not recognized as an internal or external command. This change wraps the script in an npm run command to ensure cross-platform compatibility. Added a new 'lint:proto' script for better organization.
* Update lint:proto script path to use relative path
* bash
wip:
wip:
wip:
fix: Adding oca auth state instead of using model id check
fix: Adding oca auth state instead of using model id check
chore: Undoing debug changes
* remove un-implemented tests and create foundation for running cline in cli for exercism
* running version for python language
* remove unused code and reorder benchmark adapter
* remove optional helper functions from BenchmarkAdapter
* unskipping tests for java and javascript
* updating db schema
* updating output to match schema
* functional tests for all languages
* clean up unused commit and stored result
* nits
* small changes to wording
* adding to the test outputs
* using stdin for cline task send
* adding results dir to gitignore
* updating readme
* small nits for readme
* Remove Windows setup accordion and streamline instructions for finding Claude Code path
* fix: update image source for Cline chat prompt to use a public URL
* v3.34.0 Release Notes
- Cline Teams is now free through 2025 for unlimited users. Includes Jetbrains, RBAC, centralized billing and more.
- Use the “exacto” versions of GLM-4.6, Kimi-K2, and Qwen3-Coder in the Cline provider for the best balance of cost, speed, accuracy and tool-calling.
* fix: Adding Fallbacks
* fix: Adding Fallbacks
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* added opinionated preferences for open source model providers
* moving to apits instead of refreshopenroutermodels
* aras recommendations
* zai fix
* changed name and removed free models
* fix: Adding Fallbacks
---------
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* refactor(task): use background terminal for subagent command execution
Replace VSCode terminal with StandaloneTerminalManager for CLI subagent
commands to enable hidden background execution. Falls back to standard
TerminalManager if standalone module is unavailable.
This change allows subagent commands to run in a background terminal
instead of visible VSCode terminals, improving user experience by
reducing terminal clutter during subagent operations.
* fix: added links
* Update src/core/task/index.ts
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
* Update src/core/task/index.ts
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
---------
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
* fix: add Read More for long task in header
- Truncate task description to first 3 lines by default and add a
Read More/Show Less toggle to expand/collapse the full text
- Compute highlighted text based on expansion state; introduce local
isHighlightedTextExpanded state
- Increase task details container max height (max-h-20 -> max-h-80) for
better readability when expanded
- Remove unused useAutoCondense from context destructuring
Improves UX by preventing long task text from overwhelming the UI while
giving users control to view more when needed. Also includes minor cleanup.
* update
* Set to 25vh instead
* highlightText
* feat(ui): task text expansion with click-outside collapse
- Replace "Read More/Show Less" button with click-to-expand interaction
- Add click-outside listener to automatically collapse expanded text
- Apply gradient mask to truncated text for better visual indication
- Optimize rendering by removing conditional text highlighting
- Refactor layout to use single container with dynamic height constraints
This improves UX by making text expansion more intuitive and reducing visual clutter from the toggle button.
* update changeset
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* Update the remote config when the user logs in
Subscribe to changes in the auth state, and fetch the remote config when the user logs in.
Move the error handling into `fetchRemoteConfig` to remove duplication.
* Update src/core/storage/remote-config/fetch.ts
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>
* terminal shift enter support
* not needed
* detecting windows
* removing enhancedkeyboard
* removing enhanced keyboard
* ghostty
* proper ghostty support
* docs for posterity
* better logging
* removing md
* doctor command
* adding arguments for sync/async for doctor and keyboard setup - and moved keyboard setup to doctor command
* doctor help
* cleaning up logging and making things more explicit
* language and positioning
* standardizing color codes in plain mode
* wow even more hidden rendering - removed
* fixing stdin for restrictive shell environments
* refactor(settings): migrate BedrockProvider to Tailwind and extract constants
- Extract Claude models and AWS regions into reusable constants
- Add className prop support to DebouncedTextField component
- Replace inline styles with Tailwind CSS classes throughout BedrockProvider
- Improve code maintainability and consistency with modern styling approach
This refactoring improves code organization by moving hardcoded lists to
constants and standardizes the styling approach across the settings UI
components.
* lock icons
* update prompting around first task message and summarization prompt and add file read parsing
* replace first user message to handle issue of refousing on old task after condense
* add line about focusing on initial task for history
* adding prompting around our removing of context history and verbosity
* prompting changes
* fix spelling nit in prompting
* update displayPath,absolutePath logic to match read file tool handler
* increment the auto approval usage
* terminal shift enter support
* not needed
* detecting windows
* removing enhancedkeyboard
* removing enhanced keyboard
* ghostty
* proper ghostty support
* docs for posterity
* better logging
* removing md
* doctor command
* adding arguments for sync/async for doctor and keyboard setup - and moved keyboard setup to doctor command
* doctor help
* cleaning up logging and making things more explicit
* language and positioning
Remove unnecessary console.info debug statements from config methods and fix log message formatting. Add explicit "no-op" case to TelemetryProviderFactory for cleaner telemetry provider selection logic.
* Enhance documentation: Add supported model providers and installation details for Cline CLI
* Refactor supported model providers list for clarity and consistency
* refactor: convert config module to singleton class
Replaced functional config getters with a singleton ClineEndpoint class to improve encapsulation, enable dynamic environment updates, and eliminate static caching for better flexibility in configuration management. Updated import in cline provider accordingly.
* feat(config): add runtime environment switching support
Add ability to dynamically change Cline environment at runtime through settings:
- Add `cline_env` field to UpdateSettingsRequest proto message
- Refactor ClineEndpoint.setEnvironment() to accept string and parse environment
- Initialize environment with default value to prevent undefined state
- Add early return in constructor when valid environment is set
- Update updateSettings handler to process cline_env changes
- Replace direct clineEnvConfig usage with ClineEnv singleton pattern
- Ensure consistent environment access across auth and remote config modules
This enables users to switch between production, staging, and local environments without restarting the extension, improving developer experience and testing workflows.
* clean up
* Add trusted testers
* UpdateSettingsCli
* style(docs): update background color scheme to neutral tones
Update documentation background colors from purple-tinted theme to neutral gray tones. Changed light mode from lavender (#F0E6FF) to off-white (#fafaf9) and dark mode from pure black (#000000) to dark gray (#0f0f0f) for improved visual consistency.
* refactor(docs): remove gradient decoration from theme config
Remove the "decoration": "gradient" property from the documentation
theme configuration. This simplifies the theme settings by removing
the gradient decoration option from the color configuration object.
* docs: change documentation font family to Geist Mono
Replace Roboto with Geist Mono as the default font family in the documentation configuration. This updates the visual styling of the documentation to use a monospace font, which may improve readability for code-heavy content.
* docs: update branding and restructure navigation
- Replace robot panel logos with new Cline brand logos
- Add icons to navbar links (Docs, GitHub, Discord)
- Restructure navigation from groups to tabs format
- Add icons to navigation items for improved UX
- Include new Docs link in navbar with book icon
This update modernizes the documentation appearance and improves navigation hierarchy for better user experience.
* docs: restructure navigation with hierarchical groups and pages
Restructured documentation navigation from flat menu to organized groups:
- Removed redundant "Docs" link from navbar
- Migrated from "menu" to "groups/pages" structure
- Added comprehensive page organization with nested groups:
* Introduction, Getting Started, Features
* Prompting Skills, Cline's Tools, Enterprise Solutions
* MCP Servers, Provider Configuration
- Organized features into logical subgroups (@ Mentions, Commands,
Customization, Slash Commands)
- Improved documentation discoverability and hierarchy
This change provides better content organization and easier navigation
for users exploring different aspects of Cline documentation.
* docs: remove contextual options from documentation config
Remove the contextual configuration section containing the "copy" option from docs.json. This simplifies the documentation configuration by removing unused contextual menu options.
* docs(multiroot): improve workspace documentation with limitations and technical details
- Add important note about experimental limitations affecting Cline rules and checkpoints
- Add "How it works" section explaining automatic workspace detection and tracking
- Reorganize technical behavior section with detailed subsections for workspace detection, path resolution, and command execution
- Document workspace hint syntax for explicit file references (@workspaceName:path)
- Standardize heading capitalization to sentence case for consistency
- Improve overall content organization and clarity for better user understanding
This update provides users with clearer information about the multiroot feature's current state, its limitations, and how to effectively use workspace hints when working with multiple project folders.
* docs: restructure overview page with enhanced visual layout
- Convert plain markdown sections to CardGroup and Card components with icons
- Add tabbed interface for Plan & Act Mode explanation
- Update description from "development assistant" to "coding agent"
- Reorganize content for improved readability and visual hierarchy
- Enhance feature presentations with icon-based cards
Improves user experience by transforming the overview documentation into a more visually appealing and scannable format using modern documentation components.
* docs: improve installation guide with enhanced structure and UX
Restructure the Cline installation documentation to improve readability and user experience:
- Add prominent note highlighting 2-minute installation time
- Convert prerequisites into visual card components for better clarity
- Transform installation steps into structured Step components for easier following
- Add manual installation instructions for JetBrains IDEs
- Include feature compatibility accordion for JetBrains users
- Enhance visual hierarchy with improved component usage (CardGroup, Steps, Accordion)
- Simplify language and improve descriptions throughout
This makes the installation process clearer for new users and reduces friction during onboarding.
* style(docs): remove text opacity reduction for better readability
* docs: refactor model selection guide with visual step-by-step instructions
- Replace tab-based layout with linear step-by-step flow
- Add screenshots for each configuration step (config, provider, API, model)
- Reorganize content structure for improved clarity and user experience
- Add quickstart options and streamlined provider recommendations
- Improve navigation with visual aids to help users configure Cline faster
* docs: add installation screenshots and context management guide
* docs: flatten provider config structure in documentation
Remove the "Alternative Providers" grouping and move all provider configuration pages (OpenRouter, Cerebras, DeepSeek, Groq, xAI Grok, Mistral AI, Doubao, Fireworks, and ZAI) to the main provider configuration list. This simplifies the documentation navigation by treating all providers equally rather than categorizing some as alternatives.
* docs: restructure context management docs and improve content clarity
**Changes:**
- Reorganized documentation structure by moving context management from
`/best-practices` to `/prompting` section for better categorization
- Added URL redirect to maintain backward compatibility for old links
- Updated navigation references in welcome page to point to new location
- Improved readability of context management explanations with more
narrative, conversational prose
- Enhanced context window documentation by adding cache tokens indicator
and using emoji-based formatting for better visual clarity
- Streamlined Cline Memory Bank setup instructions from 4 to 3 steps
- Updated context bar screenshot to use newer image asset
**Why:**
Better documentation organization and improved user experience through
clearer explanations of how Cline builds and manages context during tasks.
* docs(context-management): convert Quick Reference to Info component
Replace blockquote formatting with Info component for the Quick Reference
section in the context management documentation. This improves visual
presentation and maintains consistency with documentation standards.
Also removes trailing whitespace at the end of the file for cleaner
formatting.
* docs: add Cline Enterprise overview and restructure enterprise section
- Add comprehensive enterprise overview documentation covering security,
governance, observability, and developer experience features
- Rename "Enterprise & Security" navigation group to "Enterprise"
- Consolidate enterprise documentation by replacing 4 pages with 2:
new overview page and security concerns
- Document BYOI (Bring Your Own Inference), SSO authentication, and
role-based access control capabilities
This restructuring provides a clearer entry point for enterprise users
and consolidates previously scattered enterprise information into a
cohesive overview document.
* docs(enterprise): streamline enterprise overview and update font
- Change documentation font from Geist Mono to Geist Sans
- Add enterprise website link card for detailed information
- Remove Developer Experience, Proven at Scale, and Pricing sections
- Consolidate Flexible Inference section content
- Simplify enterprise overview to focus on core capabilities
These changes reduce redundancy by directing users to the enterprise
website for pricing and detailed features while keeping the docs
focused on technical implementation and core capabilities.
* clean-images
* Update docs/getting-started/installing-cline.mdx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update docs/styles.css
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* docs(cline-cli): add platform availability warning to overview
Add a prominent warning callout indicating that Cline CLI is currently in preview and only supports macOS and Linux, with Windows support coming soon. This sets clear expectations for users about platform compatibility.
Also remove redundant introductory text in the "What you can build with this" section to improve content clarity.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* ready for review
* WIP: late-breaking cli arg change fix-ups (still more to double-check)
* updates for late-breaking CLI changes
* updated docs to match yesterday's usage updates
* docs(cli): restructure documentation and add dedicated installation guide
- Extract installation instructions into separate installation.mdx page
- Simplify overview.mdx to focus on use cases and getting started
- Improve cli-reference.mdx with quick help commands section
- Reorganize content for better information architecture
- Make documentation more user-friendly and action-oriented
This restructuring separates concerns: installation details are now in their
own page, the overview focuses on what Cline CLI can do, and the reference
page is more accessible with inline help examples before the full manual.
---------
Co-authored-by: Juan Pablo <juan@cline.bot>
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* feat: add banner to install Cline for CLI and experimental subagents feature
* Update snapshots
* Fix copy
* Style fixes
* A few small changes to cli detection, prompting, cleanup
* Prompting tweaks and npm command update
* Prompting, bug fix
* Prompt changes around command syntax
* Command parsing and flag substitution for easier subagent invocation
* Added terminal output slider setting for subagents
* Improved CLI subagent settings injection
* Added max_consecutive_mistakes setting and cli flag
* Terminal line limit added to enchanced terminal, prompting and settings tweaks
* feat: Add OpenTelemetry settings schema and state infrastructure (1/5) (#6826)
* feat: Add OpenTelemetry settings schema and state infrastructure (1/5)
- Add 16 OpenTelemetry configuration fields to Settings interface
- Add 17 OpenTelemetry fields to RemoteConfig schema
- Add state persistence helpers for OpenTelemetry settings
- Foundation for dynamic OpenTelemetry configuration
Part 1 of 5 in the telemetry settings refactor series.
* chore: add changeset for OpenTelemetry schema
* fix: Address PR review feedback for OpenTelemetry settings
- Remove | undefined from 8 OpenTelemetry fields with default values
- Add default values in state-helpers.ts for all non-optional fields
- Add OpenTelemetry field mappings to remote-config/utils.ts
- Add comprehensive test coverage for OpenTelemetry fields in schema.test.ts
- Update changeset terminology from 'Otel' to 'OpenTelemetry'
Addresses feedback from:
- sjf: Remote config transformation and test coverage
- celestial-vault: Type cleanup and default values
- Copilot: Terminology improvement
* Prompting changes
* Fixed system prompt empty sections issue, fixed rebase mistake
* Added telemetry for CLI subagent use in IDEs
* Platform aware banner, fixed settings layout issues
* Post rebase fixes & changes to accomodate new terminal UI
* Cline Icon SVG in ChatRow - WIP
* Fixed outputLine limit issue
* Fixed rebase merge conflict remnant
* Rebase fix
* Cleanup and changes to instructions for new CLI users
* Added CLI documentation link
* Small prompt adjustments
* One more bullet point
* Updated remaining npm install command
* Updated subagent command format for CLI release spec
* Added check to prevent subagents from getting subagent prompt
* Added subagent slash command
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Remove workdir
* Update src/core/prompts/system-prompt/variants/xs/overrides.ts
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* removed logging
* Updated expected version output
* Removed checkCliInstallation check in getStateToPostToWebview
* removed more logging
* fix: force subagents to use terminal stuff
---------
Co-authored-by: Kevin Bond <kevin@cline.bot>
Co-authored-by: Daniel Steigman <35793213+NightTrek@users.noreply.github.com>
Co-authored-by: Andrei Eternal <206184+Garoth@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: canvrno <46584286+canvrno@users.noreply.github.com>
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* build: add npm package build script with telemetry injection
Add a new build script that automates the NPM package creation process with proper telemetry key injection. The script:
- Validates required environment variables (TELEMETRY_SERVICE_API_KEY, ERROR_SERVICE_API_KEY)
- Verifies Node.js can access environment variables
- Builds Go CLI binaries for all platforms
- Compiles standalone package with esbuild
- Verifies telemetry keys are properly injected into compiled code
- Provides colored output and detailed error messages
Added npm script `build:npm` to package.json for easy invocation.
This ensures consistent builds with telemetry properly configured for production deployments.
* feat(hostbridge): add telemetry settings support for CLI mode
Add GetTelemetrySettings and SubscribeToTelemetrySettings methods to EnvService to handle telemetry configuration in CLI mode.
- GetTelemetrySettings retrieves telemetry status from POSTHOG_TELEMETRY_ENABLED environment variable
- SubscribeToTelemetrySettings provides a stream for telemetry setting updates, sending initial state and keeping stream open
- In CLI mode, telemetry settings are static and determined by environment variable at startup
This enables proper telemetry control and monitoring in CLI environments.
* feat(hooks): Implement UserPromptSubmit hook
* feat(hooks): Add tests for UserPromptSubmit hook
* feat(hooks): Add fixture-based tests for UserPromptSubmit
* feat(hooks): More UserPromptSubmit tests
* feat(hooks): Change as per ellipsis-dev code review feedback on the PR
* Apply the complete hooks.proto and hook-factory.ts changes
* Update remote config schema
Update the schema to make models field optional, so we can use undefined to mean unset like the other fields.
* Make the OpenAI headers an otional field
* Update src/shared/remote-config/__tests__/schema.test.ts
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>
* WIP npm publish setup
* verbose startup + error if cline core not found
* working npm release
* modifications for linux npm package to work
* remove publish npm workflow for now
* readme & package.json tweaks
* fix old reference to compile-standalone-cli in test workflow
---------
Co-authored-by: Andrei Edell <andrei@nugbase.com>
* feat: Add OpenTelemetry settings schema and state infrastructure (1/5)
- Add 16 OpenTelemetry configuration fields to Settings interface
- Add 17 OpenTelemetry fields to RemoteConfig schema
- Add state persistence helpers for OpenTelemetry settings
- Foundation for dynamic OpenTelemetry configuration
Part 1 of 5 in the telemetry settings refactor series.
* chore: add changeset for OpenTelemetry schema
* fix: Address PR review feedback for OpenTelemetry settings
- Remove | undefined from 8 OpenTelemetry fields with default values
- Add default values in state-helpers.ts for all non-optional fields
- Add OpenTelemetry field mappings to remote-config/utils.ts
- Add comprehensive test coverage for OpenTelemetry fields in schema.test.ts
- Update changeset terminology from 'Otel' to 'OpenTelemetry'
Addresses feedback from:
- sjf: Remote config transformation and test coverage
- celestial-vault: Type cleanup and default values
- Copilot: Terminology improvement
* feat(hooks): Add comprehensive testing utilities for hooks system
Introduces reusable testing infrastructure to reduce code duplication
and improve test maintainability across the hooks system.
New Utilities:
- setupHookTests(): Standard test environment with automatic cleanup
- createTestHook(): Platform-agnostic hook creation
- buildPreToolUseInput() / buildPostToolUseInput(): Type-safe input builders
- assertHookOutput(): Consistent assertion helper
- MockHookRunner: Fast mock for integration tests without process spawning
- loadFixture(): Fixture loading and platform handling
Benefits:
- Eliminates ~300+ lines of duplicated setup code
- Provides consistent patterns across test files
- Enables platform-neutral testing (Unix/Windows)
- Supports both unit tests (real execution) and integration tests (mocks)
These utilities will be used in subsequent PRs to refactor existing
tests and add comprehensive error scenario coverage.
Related: Part 1 of hooks testing infrastructure improvements
* feat(hooks): Update tests to reflect future plans for Windows implementation
* docs(multiroot-workspace): enhance documentation with limitations and technical details
- Add important note about experimental limitations (Cline rules and checkpoints)
- Expand technical behavior section with workspace detection, path resolution, and command execution details
- Document workspace hints syntax (@workspaceName:path/to/file) for explicit file referencing
- Reorganize content with improved section structure and "How it works" overview
- Normalize heading capitalization for consistency
- Remove outdated experimental date marker
These changes provide users with clearer understanding of multiroot workspace functionality, current limitations, and advanced features like workspace hints for precise file targeting across multiple project folders.
* Update docs/features/multiroot-workspace.mdx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: reasoning_details not consolidated for how openrouter expects in requests
* Fix openai models getting different shape for ReasoningDetail with encrypted data
* Show richer error
* Only use last encrypted reasoning chunk for openai format reasoning details preservation
* Fix tests
* feat: Modular telemetry architecture with Jitsu provider support
- Add dual-provider telemetry architecture supporting both Jitsu and PostHog
- Implement JitsuTelemetryProvider with full API compatibility
- Add required telemetry bypass for critical system health events
- Create modular event handler base class for future extensibility
- Add Jitsu configuration with environment variable controls
- Update TelemetryService to support multiple providers with error isolation
- Add .env.example template for development setup
- Maintain backward compatibility with existing PostHog integration
- Enable easy PostHog removal via POSTHOG_TELEMETRY_ENABLED=false
- Install dotenv for local development environment support
Key benefits:
- Dual tracking during transition period
- Error isolation between providers
- Memory efficient static method architecture
- Easy provider enable/disable via environment variables
- Wednesday deployment ready for Jitsu migration
* fix(build): Load environment variables from .env file during development builds
- Add dotenv.config() to esbuild.mjs to load .env variables
- Include all telemetry-related environment variables in build injection:
- TELEMETRY_SERVICE_API_KEY (PostHog)
- ERROR_SERVICE_API_KEY (PostHog error tracking)
- JITSU_WRITE_KEY (Jitsu telemetry)
- JITSU_HOST (Jitsu host URL)
- JITSU_ENABLED (Jitsu provider control)
- POSTHOG_TELEMETRY_ENABLED (PostHog provider control)
This ensures telemetry services work correctly in development builds
by properly injecting API keys and configuration from .env file.
Also updates TelemetryService tests to support multi-provider architecture.
* fix(telemetry): Replace Record<string, unknown> with proper JSON-serializable types
- Add TelemetryPrimitive, TelemetryValue, TelemetryObject, and TelemetryProperties types to ITelemetryProvider
- Update JitsuTelemetryProvider to use TelemetryProperties instead of Record<string, unknown>
- Update PostHogTelemetryProvider to use TelemetryProperties instead of Record<string, unknown>
- Update TelemetryService to use TelemetryProperties for type-safe telemetry data
- Ensures all telemetry properties are JSON-serializable, preventing runtime errors
- Fixes TypeScript compatibility issue between Jitsu's JSONObject type and Record<string, unknown>
* moved and organized the telemetry files and updated the example env file to be more descriptive
* refactor: remove Jitsu telemetry provider
- Remove Jitsu provider implementation and config files
- Remove Jitsu environment variables from .env.example
- Remove Jitsu build configuration from esbuild.mjs
- Update TelemetryProviderFactory to only support PostHog
- Uninstall @jitsu/js dependency
- Add .env to .gitignore to prevent committing local env files
* chore: add changeset for Jitsu removal
* removed jitsu
* fix: update import paths after PostHogClientProvider relocation
* fix: remove race condition in captureToProviders and reorganize PostHog providers
- Changed captureToProviders from async to synchronous method
- Removed unnecessary Promise.allSettled overhead since provider.log() and provider.logRequired() are synchronous
- Changed from .map() to .forEach() for better clarity
- Moved PostHog provider files into posthog/ subdirectory for better organization
- Updated all import paths to reflect new folder structure
* refactor(telemetry): remove unnecessary addProperties method and improve type safety
- Remove addProperties helper method that used 'any' types
- Replace with inline typed spread operations in capture(), captureRequired(), and identifyAccount()
- Fix type errors in captureConversationTurnEvent and captureBrowserError
- All telemetry properties now properly typed as TelemetryProperties
- Ensures OpenTelemetry compatibility through type system enforcement
* refactor: remove dotenv dependency and use launch.json envFile
- Remove dotenv import and config() call from esbuild.mjs
- Add envFile parameter to all launch.json configurations to load .env
- Remove dotenv from package.json devDependencies
Environment variables are now loaded via VSCode's envFile feature for local
development, while CI/production continues to inject via GitHub Actions.
This provides cleaner separation between build-time and runtime environment
handling.
* feat(telemetry): add browser telemetry properties and improve typing
- Add remoteBrowserHost and endpoint fields to browser telemetry events
- Replace generic Record<string, unknown> with TelemetryObject type in EventHandlerBase for better type safety
- Import TelemetryObject type from ITelemetryProvider
These changes enhance browser telemetry tracking capabilities and improve type consistency across the telemetry service.
* feat(telemetry): add OpenTelemetry integration
Add comprehensive OpenTelemetry support alongside existing PostHog telemetry:
- Add OpenTelemetry provider with metrics and logs/events support
- Support multiple exporters: console, OTLP (gRPC/HTTP/Protobuf), and Prometheus
- Implement flexible configuration via environment variables
- Add detailed .env.example documentation with usage examples
- Integrate with existing telemetry infrastructure via TelemetryClient
- Support independent or parallel operation with PostHog
- Add proper attribute flattening for OpenTelemetry primitives
- Include configurable export intervals and protocols
This enables users to export telemetry data to any OpenTelemetry-compatible
backend (Grafana, Jaeger, etc.) while maintaining backward compatibility
with PostHog integration.
* add changeset
* Update packages
* .vscodeignore
* fixed type error
* fix(telemetry): Fix OpenTelemetry gRPC exporter endpoint format
- Strip http:// prefix from gRPC endpoints (gRPC requires 'localhost:4317' not 'http://localhost:4317')
- Clean up debug logging from OpenTelemetry provider classes
- Add helpful comment to .env.example about gRPC endpoint format
This fixes the issue where metrics were being recorded in-memory but silently
failing to export to the OpenTelemetry collector. Metrics now flow end-to-end
from the extension through the collector to Prometheus.
Verified working with test infrastructure at ~/code/@cline/cline-otel-testing
* merged from main and handled conflcits
* fix: ensure exportTimeoutMillis is less than exportIntervalMillis in OpenTelemetry metrics
Changed the timeout calculation to dynamically compute as 80% of the export interval,
capped at 30 seconds. This fixes the error: 'exportIntervalMillis must be greater than
or equal to exportTimeoutMillis' that occurred when the configured interval was less
than 30 seconds.
* feat(otel): add insecure gRPC connection support for development
- Add OTEL_EXPORTER_OTLP_INSECURE config option
- Support insecure (non-TLS) gRPC connections for local testing
- Update OpenTelemetryClientProvider to use grpcCredentials.createInsecure()
- Add comprehensive debug logging for troubleshooting
- Tested and validated with local OTel collector
This enables testing of OTLP gRPC protocol without TLS certificates,
useful for local development and testing environments.
* feat(otel): add comprehensive debug logging for troubleshooting
- Add configuration summary logging at initialization
- Log all exporter creation steps with success/failure status
- Log connection details (protocol, endpoint, insecure mode)
- Log header presence (keys only, not values for security)
- Add try-catch blocks around exporter creation with error logging
- Log reader/processor counts for validation
- Improve visibility for TLS handshake and authentication issues
* test: validate HTTP/Protobuf protocol with path appending fix
- Tested HTTP/Protobuf exporter with binary encoding
- Confirmed path appending fix works for /v1/metrics and /v1/logs
- Validated bearer token authentication over HTTP/Protobuf
- All exports successful with complete data fidelity
- Documented test results in scenario-5-http-protobuf.md
Test Status: ✅ PASSED - HTTP/Protobuf production ready
* pre-cleanup
* refactor(telemetry): clean up OpenTelemetry provider architecture
Major refactoring to improve code quality, maintainability, and align with domain-driven design principles:
**Architecture Improvements:**
- Created OpenTelemetryExporterFactory with pure functions for exporter creation
- Extracted exporter logic from OpenTelemetryClientProvider into factory
- Removed Prometheus support (not a requirement)
- Simplified diagnostic logging with minimal wrapper gated by TEL_DEBUG_DIAGNOSTICS flag
**Interface & Provider Updates:**
- Extended ITelemetryProvider with optional incrementCounter() and recordHistogram() methods
- No OpenTelemetry types leak into provider interface (provider-agnostic)
- Implemented no-op metric stubs in PostHogTelemetryProvider
- Removed eventCounter from OpenTelemetryTelemetryProvider (was incorrectly tracking events as metrics)
- Added lazy counter/histogram creation with Map caches in OpenTelemetry provider
- Logs are now the primary telemetry path, metrics are optional/future-ready
**Code Quality:**
- ~50% reduction in complexity through factory pattern
- Clear separation of concerns between interface, implementation, client management, and exporter creation
- Improved testability with pure functions and lazy instrument creation
- Better maintainability with cleaner code structure
**Configuration:**
- Updated .env.example with comprehensive OpenTelemetry documentation
- Added TEL_DEBUG_DIAGNOSTICS flag for enabling diagnostic logging
- Clarified all configuration options with detailed comments
- Removed Prometheus references
**Verified Working:**
- All protocols tested and working: gRPC, HTTP/JSON, HTTP/Protobuf
- Bearer token authentication validated
- Console exporter functional
- Maintains full compatibility with TelemetryService interface
* OTel: make flattenProperties circular-safe with depth guard and array truncation
Use WeakSet to detect circular references; add MAX_DEPTH=10; limit arrays to 100 items with _truncated and _original_length flags; handle Date via toISOString and Error via message; skip __proto__, constructor, prototype keys; wrap JSON.stringify in try/catch.
* security: restrict sensitive OTel logging to debug mode only
Only log OTLP endpoints and header information when TEL_DEBUG_DIAGNOSTICS=true or IS_DEV=true. In production mode, only show whether these values are configured without exposing actual values. This prevents sensitive infrastructure details and authentication information from appearing in production logs.
* removed debug logging from non debug mode
* feat: add batch configuration for OpenTelemetry log processor
Add configurable batch settings for BatchLogRecordProcessor to allow tuning for different use cases:
- OTEL_LOG_BATCH_SIZE: Maximum logs per batch (default: 512)
- OTEL_LOG_BATCH_TIMEOUT: Maximum wait time in ms (default: 5000)
- OTEL_LOG_MAX_QUEUE_SIZE: Maximum queue size (default: 2048)
Benefits:
- High-volume scenarios can increase queue size to prevent dropped events
- Real-time monitoring can reduce timeout for faster exports
- Low-volume scenarios can reduce batch size to minimize delays
All settings are optional with sensible defaults matching OpenTelemetry SDK standards. Configuration is validated to ensure positive values.
* feat(telemetry): add build-time OpenTelemetry environment variable injection
Add support for injecting OpenTelemetry configuration at build time from
GitHub Actions secrets, following the same pattern as PostHog telemetry.
This enables production builds to have default OpenTelemetry collector
configuration while still allowing runtime overrides.
Changes:
1. esbuild.mjs:
- Added build-time injection for 7 OpenTelemetry environment variables:
* OTEL_TELEMETRY_ENABLED - Enable/disable OpenTelemetry
* OTEL_LOGS_EXPORTER - Logs exporter type (console/otlp)
* OTEL_METRICS_EXPORTER - Metrics exporter type (console/otlp)
* OTEL_EXPORTER_OTLP_PROTOCOL - OTLP protocol (grpc/http/json/http/protobuf)
* OTEL_EXPORTER_OTLP_ENDPOINT - Collector endpoint URL
* OTEL_EXPORTER_OTLP_HEADERS - Authentication headers (e.g., bearer tokens)
* OTEL_METRIC_EXPORT_INTERVAL - Metric export interval in milliseconds
- Variables are read from process.env at build time and injected into
the bundle via esbuild's define option
- Follows exact same pattern as existing PostHog API key injection
2. .github/workflows/publish.yml:
- Added OpenTelemetry environment variables to 'Package and Publish Extension' step
- Variables are populated from GitHub Actions secrets
- Applied to both release and pre-release builds
3. .github/workflows/publish-nightly.yml:
- Added same OpenTelemetry environment variables to nightly builds
- Ensures consistent configuration across all build types
How it works:
- Build Time (Production):
* GitHub Actions reads secrets and sets environment variables
* esbuild.mjs injects these values into the bundled code
* Production builds ship with default OpenTelemetry configuration
- Runtime (Development):
* Developers use .env file with their own configuration
* No changes needed to existing development workflow
- Runtime (Production):
* Users can override build-time defaults by setting environment variables
* Runtime values take complete precedence over build-time defaults
* Enterprise users can point to their own collectors
Next steps:
- Add GitHub secrets to repository (Settings → Secrets and variables → Actions)
- Required secrets: OTEL_TELEMETRY_ENABLED, OTEL_LOGS_EXPORTER,
OTEL_EXPORTER_OTLP_PROTOCOL, OTEL_EXPORTER_OTLP_ENDPOINT,
OTEL_EXPORTER_OTLP_HEADERS
- Optional secrets: OTEL_METRICS_EXPORTER, OTEL_METRIC_EXPORT_INTERVAL
Benefits:
- Consistent with existing PostHog telemetry pattern
- Secure: production secrets stay in GitHub, not in code
- Flexible: users can override defaults at runtime
- Development-friendly: .env file continues to work as before
- Production-ready: default collector configuration for all users
* removed ai slop
* updated lock file
* fix: use ExtensionRegistryInfo.version for cross-platform compatibility
Replace process.env.npm_package_version with ExtensionRegistryInfo.version
in OpenTelemetry service version to ensure compatibility across VSCode,
JetBrains, and CLI environments.
Addresses PR #6605 inline comment from Sarah Fortune (sjf)
* fix: restore package-lock.json with proper biome dependencies
Fixes CI test failures caused by corrupted biome package entries.
Restores package-lock.json from main and reinstalls to properly
update OpenTelemetry dependencies while preserving biome integrity.
Addresses PR #6605 comment from Sarah Fortune (sjf) about test failures
---------
Co-authored-by: NightTrek <Daniels@dual4t.com>
Co-authored-by: Daniel Steigman <35793213+NightTrek@users.noreply.github.com>
* Remove MULTI_ROOT_WORKSPACE feature flag
The multi-root workspace feature is now rolled out to 100% of users,
so the feature flag is no longer needed.
Changes:
- Removed MULTI_ROOT_WORKSPACE from FeatureFlag enum
- Removed getMultiRootEnabled() method from FeatureFlagsService
- Updated isMultiRootEnabled() to only check user setting
- Set multiRootSetting.featureFlag to true (always enabled)
- Updated tests to remove feature flag stubs
* Add changeset for multi-root feature flag removal
* starting instance before anything else
* auth wizard from root if no credentials
* removing debug logs
* better design
* moving more things to verbose flag
* ensuring that when a new cline instance is started and there are no others, that it is set as default
* auth wizard should always have an instance at the beginning with ensuredefaultinstance
* setting welcome state to true when user inputs credentials
* feat: add version information injection to CLI build script
- Extract version from package.json
- Capture git commit hash, build date, and builder info
- Inject version info into CLI binaries via Go ldflags
- Update both cline and cline-host builds with version data
* chore: add changeset for CLI version injection
* pass remote config state to frontend and disable corresponding UI components
* move state-keys to shared folder
* fix field potentially undefined type error
* move workspace types to shared folder
* fix url validation runtime error
* add lock and tooltip to api provider dropdown and remove filtering
* normie friendly root command
* control c logic
* prompt to cline root works
* ask question tool streaming
* simplified & unified tool handling and approval messages, and supporting edge case with attempt completion calling terminal command
* function to fetch remote config
* remove logs
* return undefined if no org and update expected response structure
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
* Initial implementation of hooks foundation
* Remove duplicate property
* Resolving/implementing TODOs and complexity refactors as per qlty test failures
* Implement tests for hooks changes
* Fix unit tests for CI windows machine (executable files need file extension)
* Adding README and improved examples in .clinerules/hooks/
* feat(install): improve CLI release detection and error handling
- Redirect error messages to stderr for proper error stream handling
- Filter releases to only match tags ending in '-cli' suffix when fetching latest
- Add explicit .tar.gz extension matching in download URL detection
- Improve error messages to be more specific about missing packages
- Add informative messages about which CLI release is being installed
This ensures the install script correctly identifies CLI-specific releases
and provides better feedback when releases or platform packages are not found.
The stderr redirection prevents error messages from being captured in command
substitutions.
* feat(install): improve shell detection and PATH configuration
- Add support for fish shell and XDG_CONFIG_HOME standard
- Check if bin directory is already in current PATH before modifying config
- Detect shell from $SHELL variable instead of relying on version variables
- Create default config file if none exists for the detected shell
- Use grep -Fq for more reliable PATH entry detection
- Support multiple possible config file locations per shell (zsh, bash, fish)
This improves the installation experience across different shell environments
and prevents duplicate PATH entries when re-running the installer.
* refactor
* better install script
---------
Co-authored-by: pashpashpash <nik@nugbase.com>
* CLI auth wizard
Default Cline model, better menu UX, display active provider and model at main menu
Model switcher for BYO providers
Provider switching, UI changes
List configured providers now shows all providers user has configured
Added remove provider feature
Changes to model picker for BYO providers
Model fetch filtering tweaks
Only update model fields for provider when possible
Consolidated provider field mapping
Change to not set provider as active when updating model
Dont set Cline as active provider when setting Cline model
Added model fetching for OpenAI provider (req API key)
Added model fetching for Ollama provider
Added support for model listing from providers.go for models without remote fetch
Moved auth specific code out of manager
Bedrock fields, OpenAI Native BaseURL
More graceful fetch failure
Fixed auth callback issue
* Added model list feature for AWS
AWS - Profile only support in CLI for now, UX changes (WIP
Remove Save and Exit option
Auto enable filtering/search in model lists
Added cancel option for some menus
* add first version of auto-retry failed requests
Remove auto-retry as an option and do it by default for all errors that aren't credit issues for cline provider
Fix error retry showing for insufficient credits error
remove lastAutoRetryDelay
Fixes
Fixes
Fix
Fix
remove retrymessage for consistent UI
* Create lucky-mayflies-arrive.md
* Fix autoRetryAttempt counter not getting reset
* ci: add workflow to auto-label JetBrains plugin issues
Add GitHub Actions workflow that automatically applies the 'JetBrains' label to issues when the JetBrains Plugin type is selected in the issue template. The workflow triggers on issue creation and edits, parsing the issue body to detect the plugin type selection and applying the appropriate label for better issue categorization and triage.
* Update .github/workflows/label-jetbrains-issues.yml
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* adding CLI
* Update .github/workflows/label-jetbrains-issues.yml
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>
* Add JP and Global inference profile options to AWS BedrockAdd a comment on lines R5 to R7Add diff commentMarkdown input: edit mode selected.WritePreviewAdd a suggestionHeadingBoldItalicQuoteCodeLinkUnordered listNumbered listTask listMentionReferenceSaved repliesAdd FilesPaste, drop, or click to add filesCancelCommentStart a reviewReturn to code
* Adding Improvements to VSCode multi root workspaces
* Added markdown support to focus chain text, allowing the model to display more interesting focus chains
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* wip
* overshooting now
* no more overshooting
* static markdown rendering for non streamed cli stuff
* more aesthetic
* plain text support, and more consistent markdown experience
* moving instance info into renderer
* refactor: user different secret keys for each auth provider
* Add changeset
* refactor
* refactor: use a constant for the secret key
* refactor: improve fallback handling
* Move MCP marketplace catalog from global state to disk cache
* add cleanup function to remove catalog from vs code storage
* type fixes
* move disk related functions to disk file
* add try/catch around file/json operations
* fix weird tab formatting
* fixed ispartial handling for all cases, and cleaned up output to not have emojis
* consolidating rendermessage function
* timestamps for checkpoints only
* removing useless comments
* showing terminal commands
* terminal command + browser +mcp
* removing unused timestamp argument
* feat(logging): replace HostProvider with node-machine-id for machine identification
Replace custom HostProvider.env.getMachineId() implementation with the
node-machine-id npm package for retrieving machine identifiers. This
simplifies the codebase by using a well-maintained library instead of
custom host provider logic.
Changes:
- Add node-machine-id dependency (^1.1.12)
- Remove dotenv dev dependency (no longer needed)
- Update distinctId service to use node-machine-id directly
- Refactor tests to stub node-machine-id instead of HostProvider
- Remove HostProvider mock utilities from tests
This change improves maintainability and reduces custom code while
maintaining the same functionality for generating stable machine IDs.
* Removing dead code
* Add Bedrock global and jp inference profile support.
* Update package-lock.json after merging latest main
Regenerated package-lock.json to reflect the latest dependency changes
from the merged main branch updates.
* Revert "Update package-lock.json after merging latest main"
This reverts commit 2fa79acd38.
* add checkpoint id to messages
* adding command to allow restoring a checkpoint using ts
* add validation of the type for git restore
* validation logic that checkpoint id is valid
* feat: Modular telemetry architecture with Jitsu provider support
- Add dual-provider telemetry architecture supporting both Jitsu and PostHog
- Implement JitsuTelemetryProvider with full API compatibility
- Add required telemetry bypass for critical system health events
- Create modular event handler base class for future extensibility
- Add Jitsu configuration with environment variable controls
- Update TelemetryService to support multiple providers with error isolation
- Add .env.example template for development setup
- Maintain backward compatibility with existing PostHog integration
- Enable easy PostHog removal via POSTHOG_TELEMETRY_ENABLED=false
- Install dotenv for local development environment support
Key benefits:
- Dual tracking during transition period
- Error isolation between providers
- Memory efficient static method architecture
- Easy provider enable/disable via environment variables
- Wednesday deployment ready for Jitsu migration
* fix(build): Load environment variables from .env file during development builds
- Add dotenv.config() to esbuild.mjs to load .env variables
- Include all telemetry-related environment variables in build injection:
- TELEMETRY_SERVICE_API_KEY (PostHog)
- ERROR_SERVICE_API_KEY (PostHog error tracking)
- JITSU_WRITE_KEY (Jitsu telemetry)
- JITSU_HOST (Jitsu host URL)
- JITSU_ENABLED (Jitsu provider control)
- POSTHOG_TELEMETRY_ENABLED (PostHog provider control)
This ensures telemetry services work correctly in development builds
by properly injecting API keys and configuration from .env file.
Also updates TelemetryService tests to support multi-provider architecture.
* fix(telemetry): Replace Record<string, unknown> with proper JSON-serializable types
- Add TelemetryPrimitive, TelemetryValue, TelemetryObject, and TelemetryProperties types to ITelemetryProvider
- Update JitsuTelemetryProvider to use TelemetryProperties instead of Record<string, unknown>
- Update PostHogTelemetryProvider to use TelemetryProperties instead of Record<string, unknown>
- Update TelemetryService to use TelemetryProperties for type-safe telemetry data
- Ensures all telemetry properties are JSON-serializable, preventing runtime errors
- Fixes TypeScript compatibility issue between Jitsu's JSONObject type and Record<string, unknown>
* moved and organized the telemetry files and updated the example env file to be more descriptive
* refactor: remove Jitsu telemetry provider
- Remove Jitsu provider implementation and config files
- Remove Jitsu environment variables from .env.example
- Remove Jitsu build configuration from esbuild.mjs
- Update TelemetryProviderFactory to only support PostHog
- Uninstall @jitsu/js dependency
- Add .env to .gitignore to prevent committing local env files
* chore: add changeset for Jitsu removal
* removed jitsu
* fix: update import paths after PostHogClientProvider relocation
* fix: remove race condition in captureToProviders and reorganize PostHog providers
- Changed captureToProviders from async to synchronous method
- Removed unnecessary Promise.allSettled overhead since provider.log() and provider.logRequired() are synchronous
- Changed from .map() to .forEach() for better clarity
- Moved PostHog provider files into posthog/ subdirectory for better organization
- Updated all import paths to reflect new folder structure
* refactor(telemetry): remove unnecessary addProperties method and improve type safety
- Remove addProperties helper method that used 'any' types
- Replace with inline typed spread operations in capture(), captureRequired(), and identifyAccount()
- Fix type errors in captureConversationTurnEvent and captureBrowserError
- All telemetry properties now properly typed as TelemetryProperties
- Ensures OpenTelemetry compatibility through type system enforcement
* refactor: remove dotenv dependency and use launch.json envFile
- Remove dotenv import and config() call from esbuild.mjs
- Add envFile parameter to all launch.json configurations to load .env
- Remove dotenv from package.json devDependencies
Environment variables are now loaded via VSCode's envFile feature for local
development, while CI/production continues to inject via GitHub Actions.
This provides cleaner separation between build-time and runtime environment
handling.
* feat(telemetry): add browser telemetry properties and improve typing
- Add remoteBrowserHost and endpoint fields to browser telemetry events
- Replace generic Record<string, unknown> with TelemetryObject type in EventHandlerBase for better type safety
- Import TelemetryObject type from ITelemetryProvider
These changes enhance browser telemetry tracking capabilities and improve type consistency across the telemetry service.
- Add LogoutReason enum to track different logout scenarios
- Update handleDeauth() calls to include logout reasons
- Move auth storage cleanup from Controller to AuthService for better encapsulation
- Add telemetry events to capture logout reasons for analytics
* Dont use continue-on-error in the GH workflow
Using continue-on-error makes the tests appear as passed even when they failed and this is confusing
* Increase timeout for getOpenTabs test
* Dont run any tests if the build step failed
* Update .github/workflows/test.yml
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Fix getOpenTabs on tabs
```
Extension host test runner error 1 test failed.
1 failing
1) Hostbridge - Window - getOpenTabs
should return all tabs including deleted files:
Error: EBUSY: resource busy or locked, rmdir 'C:\Users\RUNNER~1\AppData\Local\Temp\vscode-test-O06Qnd'
```
The test is failing because the clean can't delete the temp directory it created, just surround it with try/catch.
* Add debug logs to the openTabsTest
* Increase the timeout on the e2e tests
I see this test timing out, so try increasing the timeout
https://github.com/cline/cline/actions/runs/18209633465/job/51847553463?pr=6628
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* refactor: replace featureFlagsService with isMultiRootEnabled utility
Replace direct usage of featureFlagsService.getMultiRootEnabled() with the
isMultiRootEnabled() utility function throughout the codebase. This change:
- Centralizes multi-root feature flag logic in a single utility function
- Removes dependency on featureFlagsService in task and tool modules
- Passes stateManager to isMultiRootEnabled() for consistent state access
- Improves code maintainability by reducing coupling to the feature flags service
The refactoring affects Task class initialization, system prompt generation,
workspace root formatting, and auto-approve functionality.
* cancel button
* do not initialize duplicate statemanager in migration; use vscode api directly
* make state manager a singleton
* move statemanager init to common.ts
* adding cli args to cline core for ports and cline directory
* added locking
* data dir is correct
* final touches
* added better sqlite3 dep
* fs
* making help text more accurate
* touch instance at the end
* shutdown impl
* moving SETTINGS_SUBFOLDER const to vscode-context
* not calling process exit in protobus or hostbridge, handling that in cline core with proper graceful shutdown
* hostbridge port default
* package lock
* sigh, biome auto updated and daniels mcp hub change caused issues. locking biome
* fixed package-lock
With the introduction of better sqlite, this script needs to set the correct path for platform specific node modules. The logic is copied from the JB plugin (the vscode extension does not set the node modules path).
* feat(focus-chain): Render checklist items as markdown
This change introduces markdown rendering for both the header and individual items in the focus chain checklist. It leverages the existing MarkdownBlock component and adds a 'compact' mode to ensure proper alignment and spacing.
* feat: Add LightMarkdown component for memory-efficient rendering
- Create ultra-lightweight LightMarkdown component as memory-efficient alternative to MarkdownBlock
- Support bold (**text**), italic (*text*), and headers (# text) with cached regex patterns
- Replace MarkdownBlock with LightMarkdown in ChecklistRenderer and FocusChain components
- Eliminate heavy remark/rehype pipeline, AST parsing, and syntax highlighting for simple text formatting
- Significantly reduce memory usage and GC pressure in focus chain and checklist rendering
- Fix linting errors and ensure proper React element handling
This optimizes memory usage for components that only need basic markdown formatting,
while preserving full MarkdownBlock functionality where advanced features are needed.
* LightMarkdown: super-lightweight emphasis parser (bold/italic only); single-pass O(n) scan with memoization; remove headers; disable underscore emphasis to avoid snake_case false positives
* Add experimental support for VSCode multi root workspaces
* Add Claude Sonnet 4.5 to Claude Code provider
* Add Glm 4.6 to Z AI provider
Updated version to 3.32.6
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- Move external @import statements before Tailwind imports to prevent PostCSS errors
- Add comprehensive documentation explaining import order requirements
- Fix build failure caused by '@import must precede all other statements' error
The issue occurred because Tailwind CSS v4 expands its imports into thousands of
lines of generated CSS, causing external imports to appear after CSS rules in
the final compiled output, violating CSS specifications.
* v3.28.5 Release Notes
* changeset version bump
* Updating CHANGELOG.md format
* Update changelog for patch release
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* Add task-specific settings caching to StateManager (#6171)
* Add task-specific settings caching to StateManager
Implement per-task settings storage with automatic loading/clearing:
- Add taskStateCache for isolated task settings
- Load task settings on task creation and reinitialize
- Clear task settings cache when tasks end
- Prioritize task cache over global state in getters
* update error wording for taskSettings read failure
* add missing return statement in promise.all
* fix: persist pending task settings before clearing cache
Changed clearTaskSettings to be async and ensure any pending task state
changes are persisted to storage before clearing the in-memory cache.
This prevents potential data loss when a task ends with unpersisted
settings still in the pending state queue.
- Made clearTaskSettings async and added optional taskId parameter
- Added logic to persist pending task state batch before clearing
- Updated controller to await clearTaskSettings and pass taskId
* add ability to set task setting overrides in newtask rpc
* spread proto object keys that don't need to be transformed and filter undefined values
* use most Settings fields in TaskSettings proto and convert fields that do not directly map to the application typescripts type of Settings
* accept taskSettings in newTask RPC and save them to task state
* remove test taskSettings in useMessageHandlers
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* Change to hide deleted files from the visible files/tabs environment_details
* Moved filtering logic to extension
---------
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* Commit message generator shouldn't create it's own StateManager, just use the one from the webview.
* Use the correct Cline logo
* Move it into the vscode specific directory, it uses too many VSCode APIs to work cross-platform.
* Fixing regex parsing for workspace hints
* Fixing regex parsing for workspace hints
* test
---------
Co-authored-by: Kevin Bond <kevin@Mac.hsd1.ca.comcast.net>
* fix: keep fuzzy search active in chat input after selecting Add File/Folder
* fix: mentions, strip leading '/' and enforce file/folder-only results
* fix: improve readability of filteredDynamic
* fix: improve readability of selectedTypeValue
* first pass of removing all related code
# Conflicts:
# src/hosts/external/ExternalWebviewProvider.ts
# src/hosts/vscode/VscodeWebviewProvider.ts
* remove more things
* rename all sidebarWebviews to webview
* remove null from getInstance and remove null checks
* remove client id logic and update RPC subscriptions to match this
* add back extension.test.ts without irrelevant webview panel tests
* Refresh CI cache - fix proto compilation
* add comment to try to invalidate CI cache
* add clean script to test.yml for test-platform-integration
* remove clean script didn't work
* finally found the error in the code - linter wasn't highlighting it
* Don't delete unrelated tests in this PR
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
* docs: update what-is-cline to use generic IDE references
Updated documentation to replace VS Code-specific references with generic "IDE" terms, making it applicable to modern IDEs beyond VS Code for broader compatibility.
* docs: expand Cline installation guide with comprehensive setup instructions
- Add prerequisites section with account creation and editor compatibility
- Include detailed installation steps for VS Code/Cursor and JetBrains IDEs
- Add troubleshooting sections for common installation issues
- Expand editor support information and setup guidance
- Improve documentation structure with tabs and accordions for better UX
* docs: remove font weight and reorder getting started pages
- Remove font weight property from fonts configuration
- Reorder getting started pages to place installation before model selection guide
* fixes title font-weight to original values
* docs: improve JetBrains plugin installation link text
Replace generic URL text with descriptive "JetBrains Marketplace" link text for better user experience and accessibility in the Cline installation guide.
* docs: add voice mode feature documentation and cross-references
Add comprehensive documentation for Voice Mode feature including setup instructions, use cases, and technical requirements. Also add cross-reference tip in plan-and-act.mdx to promote voice mode usage during planning discussions.
* docs: rename voice-mode to dictation for clarity
Rename voice-mode.mdx to dictation.mdx and update all references throughout the documentation to use "Dictation" instead of "Voice Mode" for more accurate terminology and better user understanding.
* feat(docs): add YOLO mode documentation
Add comprehensive documentation for YOLO mode feature, covering auto-approval functionality, safety warnings, use cases, and best practices for autonomous operation.
* docs: reorganize navigation structure and add redirect for JetBrains install page
- Remove JetBrains installation page from getting-started section
- Reorder Features section with @ Mentions first, followed by alphabetically sorted individual features
- Move Slash Commands group after individual features and add workflows page
- Add yolo-mode feature to the end
- Add redirect from old JetBrains install path to main installation guide
* docs: improve JetBrains logo visibility and simplify dictation instructions
- Remove Frame wrapper around JetBrains logo for cleaner markup
- Add CSS styling to ensure JetBrains logo visibility in dark mode with background, border, and hover effects
- Simplify dictation instructions by removing redundant recording state description
* improving test workflow
* testing pipeline improvement
* testing new run
* adding missing protos
* adding previous cache + restoring dev dep version
* restoring webview package lock
* scripts update
* fixing old flaky test
* fixing old flaky test
* changeset update
* adding test-platform-integration again
* adding quality check for integration platform
* fix: returning undefined when URL is not valid
This can happen when the user is typing, and once it was set there was
no way of changing it.
* adding change set
This workflow didn't work if the PR title contained quotes, e.g.
https://github.com/cline/cline/pull/6523 - Don't show VS Code LM provider on non-VSCode platforms
* Fix ellipsis warning
# Conflicts:
# src/services/test/TestServer.ts
* [disk.ts] Replace uses of context.globalStorageUri with HostProvider.get().globalStorageFsPath
This is part of removing dependencies on the VSCode API fom the codebase except for in platform specific code in src/hosts/vscode and src/extension.ts.
Remove unused vscode context param.
* Remove constructors that just call super()
* Replace uses of context.globalStorageUri with HostProvider.get().globalStorageFsPath for task directory
This is part of removing dependencies on the VSCode API fom the codebase except for in platform specific code in src/hosts/vscode and src/extension.ts.
Remove unused vscode context param.
* Fix test ModelContextTracker.test.ts
* Fix test FileContextTracker.test.ts
Fixes the error below. The integraion tests are compiled to CommonJS and cannot import an .mjs directly.
```
> claude-dev@3.32.0 compile-tests
> node ./scripts/build-tests.js
node:child_process:957
throw err;
^
Error: Command failed: tsc -p ./tsconfig.test.json --outDir out
at genericNodeError (node:internal/errors:983:15)
at wrappedFn (node:internal/errors:537:14)
at checkExecSyncError (node:child_process:882:11)
at execSync (node:child_process:954:15)
at Object.<anonymous> (/Users/sjf/cline/scripts/build-tests.js:56:1)
at Module._compile (node:internal/modules/cjs/loader:1734:14)
at Object..js (node:internal/modules/cjs/loader:1899:10)
at Module.load (node:internal/modules/cjs/loader:1469:32)
at Function._load (node:internal/modules/cjs/loader:1286:12)
at TracingChannel.traceSync (node:diagnostics_channel:322:14) {
status: 2,
signal: null,
output: [
null,
"src/core/task/index.ts(3,65): error TS7016: Could not find a declaration file for module '@anthropic-ai/sdk/resources/index.mjs'. '/Users/sjf/cline/node_modules/@anthropic-ai/sdk/resources/index.mjs' implicitly has an 'any' type.\n" +
" There are types at '/Users/sjf/cline/node_modules/@anthropic-ai/sdk/resources/index.d.ts', but this result could not be resolved under your current 'moduleResolution' setting. Consider updating to 'node16', 'nodenext', or 'bundler'.\n",
''
],
pid: 22680,
stdout: "src/core/task/index.ts(3,65): error TS7016: Could not find a declaration file for module '@anthropic-ai/sdk/resources/index.mjs'. '/Users/sjf/cline/node_modules/@anthropic-ai/sdk/resources/index.mjs' implicitly has an 'any' type.\n" +
" There are types at '/Users/sjf/cline/node_modules/@anthropic-ai/sdk/resources/index.d.ts', but this result could not be resolved under your current 'moduleResolution' setting. Consider updating to 'node16', 'nodenext', or 'bundler'.\n",
stderr: ''
}
Node.js v23.11.0
```
Add a `type` field to the PlatConfig with type of the IDE: VSCode, standalone, etc.
Make the info banner conditional on the type.
Quiet the gRPC logs on startup.
* Added the new code-supernova-1-million stealth model, available for free and delivering a 1 million token context window
* Changes to inform Cline about commands that are available on your system
Updated version to 3.32.0
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
Remove API request failure assertions that cause test timeouts on Windows due to longer API request failure times, while preserving other test functionality
- Rename OpenDiskTaskHistoryButton to OpenDiskConversationHistoryButton
- Add HeroTooltip for consistent UI experience
- Update protobuf service and backend handler
* feat(chat): add scroll to top functionality
- Add scroll to top button when action buttons are not visible
- Pass virtuosoRef to ActionButtons component for scroll control
- Enhance scroll button logic to handle both up and down directions
* Update aria-label
- Auto-detect available CLI tools in system PATH
- Add detected tools to environment context for AI models
- Include comprehensive list of common developer tools (gh, docker, aws, etc.)
- Cross-platform support using 'which' on Unix and 'where' on Windows
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* changeset version bump
* Updating CHANGELOG.md format
* Update package.json
* Update changelog for version 3.31.0
Updated version to 3.31.0 and added new features and improvements.
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* Minor UX fixes for voice mode
* Minor UX fixes for voice mode
* Minor UX fixes for voice mode
* Fix alignment of stop icon
---------
Co-authored-by: frostbournesb <frostbournesb@protonmail.com>
* add infobanner
* fix type and update docs url
* restructure test to not include brittle elements; it is not clear why this banner was even added to auth tests
* move update info banner logic into rpc
* Add docs for opening cline in right sidebar
* use frame tags
* change to gifs
* docs(customization): refactor sidebar instructions with Steps component
Updated opening-cline-in-sidebar.mdx to replace numbered lists with structured <Steps> components for improved readability. Also updated image sources and added a link for Cursor alignment guidance.
---------
Co-authored-by: Juan Pablo <juan@cline.bot>
* Fix chatfield buttons positioning
* Fix task header icons being cut off at bottom
* Fix copy for focus chain
* Fix focus chain text overflowing and being hidden
* Remove transition animation
* Fix token stats
* Tweak task header styles
* Fix focus chain progress bar direction
* Hide checkpoint text unless hovered
* Make copy button smaller and muted
* Use new focus chain design
* Make timeline blocks circles
* Move focus chain down and fix pencil icon positioning
* fix: update fontsource import path to resolve 401 errors
Replace specific weight imports with node_modules path reference to fix accessibility issues with @fontsource/azeret-mono font files in webview
* update path
* feat: add multi-root workspace support for auto-approve file reads
Add logic to handle auto-approval of file read operations in multi-root workspace scenarios. When multi-root is enabled and multiple workspaces are present, the system now checks if a file is located in any workspace rather than just the current working directory. This ensures proper auto-approval behavior across all workspace roots while maintaining backward compatibility for single-root workspaces.
* Fixing pulsing border
- Set isCompactMode initial state to true instead of false
- Replace CSS variable with Tailwind class for settings title
- Prevents layout shifts and UI glitching during component initialization
Remove autoCondenseThreshold prop and hardcode useAutoCondense to false in TaskHeader component to temporarily disable the configurable auto-condense threshold from UI
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
- refreshOcaModels:
- Add explicit auth guard: show a user-facing error if no OCA access token is present and return a typed error via OcaCompatibleModelInfo.
- Switch axios invocation to use getAxiosSettings() (fetch adapter) instead of proxy agents.
- Replace getProxyAgents import with getAxiosSettings.
- OcaAuthProvider:
- Migrate all axios calls (discovery + token POSTs) to use getAxiosSettings().
- Add explicit error when no id_token is returned from OCA during the auth code exchange to improve diagnostics.
- utils/constants:
- Rotate DEFAULT_IDCS_CLIENT_ID to a new value.
- utils/utils:
- Create getAxiosSettings() helper (uses axios fetch adapter) and remove proxy agent–specific helpers.
- Revise createOcaHeaders to avoid direct vscode + package.json coupling:
- Use HostProvider.env.getHostVersion for host/IDE details.
- Use ExtensionRegistryInfo.version for the extension version.
- Set headers: client=Cline, client-version, client-ide, client-ide-version, opc-request-id.
- Note: import of HttpsProxyAgent remains but is now unused; consider removing to avoid lint/TS warnings.
Rationale
- Reliability/UX: Users now receive a clear error when attempting to refresh OCA models without being authenticated.
- Portability: Replacing direct vscode and package.json usage in headers with HostProvider + ExtensionRegistryInfo reduces coupling and makes code host-agnostic.
- Network config simplification: Standardize axios setup through a single getAxiosSettings() helper and the fetch adapter.
- Auth robustness: Explicitly surface the absence of id_token to speed up troubleshooting OIDC flows.
Potential behavior changes
- Proxy handling: getProxyAgents() was removed in favor of the axios fetch adapter via getAxiosSettings(). If explicit HTTP(S)_PROXY env-based proxying is required, follow-up work may be needed to reintroduce agent support or configure fetch-compatible proxying.
Files touched
- src/core/controller/models/refreshOcaModels.ts
- src/services/auth/oca/providers/OcaAuthProvider.ts
- src/services/auth/oca/utils/constants.ts
- src/services/auth/oca/utils/utils.ts
* feat: add multi-root workspace setting with feature flag support
Add user-configurable multi-root workspace setting that works in conjunction with feature flags. Includes proto definition, state management, and UI toggle in settings panel.
- Add multi_root_enabled field to UpdateSettingsRequest proto
- Implement multiRootSetting with user preference and feature flag state
- Add ClineFeatureSetting interface for feature flag + user setting pattern
- Create settings UI toggle with feature flag override indication
- Update state helpers to properly handle boolean conversion
* remove docs
* remove env vars
* fix: poll feature flags for all users instead of just authenticated users
Move feature flags polling outside the authenticated user check to ensure all users (logged in and anonymous) receive up-to-date feature flags. Reset flags only for authenticated users to maintain proper user-specific configuration.
* add changeset
Changes in the cline repo have the potential to cause breakages in the JetBrains repo. The creator of the PR might not found out until some time later that they have made a change that causes problems for JetBrains.
This workflow will trigger the workflow .github/workflows/test-changes-from-cline-repo.yml in the JetBrains repo, that runs the JetBrains integration tests. When the tests complete, the workflow will leave a comment on the PR with the results of the tests.
* Update TaskHeader UI
- Create new FocusChainContainer component for todo list management
- Add onSendMessage prop to TaskHeader and TaskSection components
- Refactor TaskHeader to use new FocusChainContainer
- Update tooltip styling and Tailwind configuration
- Improve task progress visualization and interaction handling
* use tailwind
* Remove edit thread btn
* Add interactive auto-compact marker to context window bar
- Add state management for auto-compact marker position (default 75%)
- Make context window bar clickable to reposition marker
- Wrap entire bar in tooltip instead of just marker
- Add click handler to calculate percentage from mouse position
- Fix cost display conditional and remove redundant CSS property
* Prevent event bubbling in task header button clicks
Add preventDefault and stopPropagation to all task header button click handlers to prevent unintended parent element interactions. Also standardize styling by replacing inline styles with Tailwind classes and update text color class for consistency.
* Clean up
* Add CheckpointError component and clean up task header UI
- Add new CheckpointError component for error handling
- Remove commented code from FocusChainContainer
- Add rounded corners to focus chain container
- Refactor formatLargeNumber function with default parameter handling
- Clean up token display formatting in TaskHeader
* Add configurable auto-condense threshold for context window management
- Add autoCondenseThreshold setting to control when context window compaction occurs
- Update ContextManager to accept threshold percentage parameter (0-100%)
- Add ContextWindowDetails component to display context usage in task header
- Extend protobuf schema and state management for new threshold setting
- Default threshold set to 75% when auto-condense is enabled
* v2 style
* Dynamic marker & remove HeroTooltip
* Update styles
* feat: enhance task header UX with expanded progress bar hitbox smart boundary detection timeline block hover dimming effects optimized spacing and standard confirmation dialog styling
* Extract TaskHeader styles to CSS module
Move inline styles from TaskHeader component to external CSS module file for better maintainability and separation of concerns.
* migrate to tailwind
* migrate inline styes to tailwind for FocusChain
* fix(ui): fix useEffect cleanup and add key prop to InfoRow
- Return cleanup function from useEffect instead of nested setTimeout
- Add key prop to InfoRow component to ensure proper re-rendering
- Improves component lifecycle management and prevents memory leaks
* price tag and warning positioning
* clean up & persist expand state
* debounce
* add keyboard navigation for auto condense threshold slider
Add arrow key controls to adjust auto condense threshold with 5% steps (10% with Shift). Include focus management, accessibility attributes, and click-outside handling for improved UX.
* feat: small vertical positioning adjustment
* add changeset
* Update Task Action Button Text
* clean up
* Update storybook
* Apply styling feedback
* clean up
* feat: accordian style metadata for context window bar tooltip
* fix: notch slide fix
* fix: add cleanup for animation frames and timeouts in AutoCondenseMarker
Add proper cleanup functions to useEffect hooks to prevent memory leaks by canceling animation frames and clearing timeouts when component unmounts or dependencies change.
* Fix animation on mount
* remove handleBlur
* fix: change the order of the instructional text
* fix: remove the color from the tooltip percentage value
* clean up
* simplify
* useAutoCondense
* remove highlights
* set maxAllowedSize
* Auto Compact
* remove fork button
* feat: add configurable auto-condense threshold setting
Add auto_condense_threshold parameter to control when context window compaction occurs. The threshold is configurable as a percentage (0-1 range) of the total context window size, allowing users to customize when automatic condensing triggers instead of using a fixed maximum size.
Changes:
- Add autoCondenseThreshold field to protobuf UpdateSettingsRequest
- Update ApiProviderInfo interface to include autoCondenseThreshold
- Modify shouldCompactContextWindow to accept threshold percentage parameter
- Add threshold validation and state management in updateSettings
- Include autoCondenseThreshold in controller state and UI data flow
* autoCondenseThreshold
* fix package
---------
Co-authored-by: Jose R. Perez <trupix@gmail.com>
* Add ClineAuthProvider and integrate with AuthService
- Add new ClineAuthProvider class for Cline-specific authentication
- Update AuthService to support both Firebase and Cline auth providers
- Switch default provider from Firebase to Cline
- Add dynamic auth URL fetching for Cline provider
- Update type definitions to support multiple provider types
* Add API auth URL configuration and update Cline auth flow
- Add apiAuthUrl to environment configs for all environments
- Update ClineAuthProvider to use new token exchange API endpoint
- Add shared Cline API utilities and types
- Refactor auth service to handle access tokens with expiration
- Update mock auth service and test fixtures for new auth flow
* add changeset
* wip
* refactor authentication service and improve token handling
- Add null check for auth token in ClineAccountService
- Update authorization header format to use 'workos:' prefix
- Replace hardcoded API endpoints with CLINE_API_ENDPOINT constants
- Refactor ClineAuthInfo interface to use accessToken terminology
- Remove Firebase auth provider dependency
- Simplify auth callback handling and token storage
- Improve error handling for missing authentication tokens
* refactor(auth): standardize workos token prefix handling
Centralize workos: prefix application in AuthService.getAuthToken() method instead of duplicating across multiple API call sites. This ensures consistent authentication token formatting and simplifies maintenance by having a single source of truth for token prefixing.
* Remove unused code
* update mock responses
* Set Firebase Auth Provider as default
* Update src/shared/cline/api.ts
Co-authored-by: Tomás Barreiro <52393857+BarreiroT@users.noreply.github.com>
* remove docs
* refactor(auth): replace type union with IAuthProvider interface
- Replace AvailableAuthProvider type union with IAuthProvider interface for better extensibility
- Add ServiceConfig type for provider configuration
- Remove hardcoded providerName field in favor of provider.name property
- Update method signatures to use IAuthProvider interface
- Improve error messages and code comments for clarity
- Add TODO for mock auth provider implementation
---------
Co-authored-by: Tomás Barreiro <52393857+BarreiroT@users.noreply.github.com>
* feat: add configurable auto-condense threshold setting
Add auto_condense_threshold parameter to control when context window compaction occurs. The threshold is configurable as a percentage (0-1 range) of the total context window size, allowing users to customize when automatic condensing triggers instead of using a fixed maximum size.
Changes:
- Add autoCondenseThreshold field to protobuf UpdateSettingsRequest
- Update ApiProviderInfo interface to include autoCondenseThreshold
- Modify shouldCompactContextWindow to accept threshold percentage parameter
- Add threshold validation and state management in updateSettings
- Include autoCondenseThreshold in controller state and UI data flow
* updateSettings
* refactor: extract stealth models to reusable function
Move hardcoded stealth model addition from inline code to a dedicated `appendStealthModels` function. This improves code organization by centralizing stealth model management and ensures consistent application across both fresh API responses and cached model data.
* refactor(controller): integrate stealth models into OpenRouter handling
- Added import and integrated appendClineStealthModels in readOpenRouterModels
- Improved error handling with try-catch in readOpenRouterModels
- Refactored refreshOpenRouterModels to use controller method and renamed functions
- Renamed STEALTH_MODELS to CLINE_STEALTH_MODELS and made appendClineStealthModels exportable
* await cached models for immediate UI availability
Changed the initialization to synchronously await and post last cached OpenRouter models, improving UI responsiveness by making them available as soon as possible instead of relying on a promise chain.
Remove sticky positioning and z-index styling from SectionHeader component to fix overlapping content issues during scroll. Also clean up unused imports and update description text styling to use semantic class.
* feat(oca): add Oracle Code Assist provider; auth, models, settings
- Implement OCA API handler (src/core/api/providers/oca.ts)
- OpenAI-compatible chat.completions with custom fetch injecting OCA headers
- Optional reasoning (thinking) budget and ephemeral prompt caching
- LiteLLM session tracking and usage streaming; cost via /spend/calculate
- Guarded client init; clear error when OCA access token is missing
- Wire provider into core API and controller
- Register provider (src/core/api/index.ts)
- Controller flows for OCA account login/logout and auth status subscription
- refreshOcaModels command and model config plumbing
- Add protobuf surfaces
- proto/cline/models.proto and proto/cline/ocaAccount.proto
- Extend proto/cline/state.proto for settings/state
- Persist settings/state and helpers
- Update StateManager, state-keys, state-helpers, updateSettings
- Misc
- Add changeset entry
- Minor .gitignore and commit-message generator tweak
feat: New redirect server
feat(oca): add Oracle Code Assist provider; auth, models, settings
- Implement OCA API handler (src/core/api/providers/oca.ts)
- OpenAI-compatible chat.completions with custom fetch injecting OCA headers
- Optional reasoning (thinking) budget and ephemeral prompt caching
- LiteLLM session tracking and usage streaming; cost via /spend/calculate
- Guarded client init; clear error when OCA access token is missing
- Wire provider into core API and controller
- Register provider (src/core/api/index.ts)
- Controller flows for OCA account login/logout and auth status subscription
- refreshOcaModels command and model config plumbing
- Add protobuf surfaces
- proto/cline/models.proto and proto/cline/ocaAccount.proto
- Extend proto/cline/state.proto for settings/state
- Persist settings/state and helpers
- Update StateManager, state-keys, state-helpers, updateSettings
- Misc
- Add changeset entry
- Minor .gitignore and commit-message generator tweak
feat: New redirect server
update UI and add NPS survey link
papercuts
fix model dropdown height
fix: Fix 1
fix: removing ui
feat(AuthManager): Adding an AuthManager
fix: fixing rebase
* fix: Removing AuthManager, simplifyng auth service initialization
* changeset version bump
* Updating CHANGELOG.md format
* Update changelog for v3.29.2 release
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Kevin Bond <kevin@Mac.hsd1.ca.comcast.net>
Move duplicated code to utils.ts
Replace context.globalStorageUri with the HostProvider.globalStorageFsPath.
This is part of removing dependencies on the VSCode API fom the codebase except for in platform specific code in src/hosts/vscode and src/extension.ts.
* changeset version bump
* Updating CHANGELOG.md format
* Update changelog for release
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Kevin Bond <kevin@Mac.hsd1.ca.comcast.net>
* Replace context.globalStorageUri with the HostProvider in CheckpointTracker
Replace context.globalStorageUri with the HostProvider.globalStorageFsPath.
Remove globalStoragePath param, it doesn't need to be passed around anymore.
Remove unused param taskId from shadowGit
* Remove globalStoragePath param from checkpoint manager.
Now tht the global storage path is available from the HostProvider anywhere, it doesn't need to be passed around.
* fix: test e2e click “Show Code Actions” button then wait for listbox on macOS
* fix: trigger code actions during test with shortcut
* fix: add reasonable timeout to the menu and listbox call in test
* test: refactor chat e2e tests to support multiple workspace types
- Convert single test functions to parameterized test suite using describe blocks
- Add workspace type iteration for both chat messaging and slash command tests
- Consolidate test structure to run against different workspace configurations
- Maintain existing test logic while improving test coverage and organization
- consolidate chat input tests into single comprehensive test
Merged three separate chat input tests (slash commands, @ mentions, and partial completion) into one comprehensive test to reduce test setup time and improve test efficiency. Simplified test structure while maintaining all original functionality checks.
* update keybindings
Add a the field `globalStorageFsPath` to replace the VSCode `context.globalStorageUri`
Remove duplicated code for getting the cache directory.
Add a util function to the HostProvider to get sub-directories of the global storage dir, and ensure that the sub-directory is created.
Move all the logic for waiting for the host bridge into `hostbridge-client.ts`
Add some comments
Use try/finally, remove unused param, log the error message when the health check fails.
* fix: CreditLimitError should use server returned url when available
- Add useMemo hook for dashboard URL computation
- Display credit balance, spent, and promotions when available
- Replace inline styles with Tailwind CSS classes
- Simplify TaskServiceClient call by removing unnecessary properties
- Add proper conditional rendering for credit information
- Improve code organization and readability
* changeset added
* props
* Update storybook
* Updated Baseten models to use dynamic fetching, added docs
* removed unused function, supportsImages
* added parsePrice into model-utils.ts
* updated toolcalling comment
* updated tools to fetch from API
* fixed conflicts and updated supportTools
* applied npm run format:fix
* added bedrock stuff back in that was breaking test
---------
Co-authored-by: AlexKer <AlexKer@users.noreply.github.com>
Add detailed documentation for end-to-end testing with Playwright including:
- Test execution commands and debug mode usage
- Test structure overview with file descriptions
- Writing test guidelines with fixtures and best practices
- Mock API server setup and workspace configuration
- Interactive debugging features and troubleshooting tips
Updates both CONTRIBUTING.md and E2E README to provide complete guidance for contributors working with the test suite.
* feat: add Storybook configuration
- Bump package version from 3.28.3 to 3.28.4
- Add comprehensive Storybook setup with React-Vite framework and TypeScript support
- Configure Storybook with custom viewport settings and environment variables
- Add extensive story files for chat components, MCP displays, and browser automation
- Update gitignore files to exclude Storybook build artifacts and logs
* Add docs and changeset
* feat: refactor Storybook decorator to support state overrides and custom styling
- Extract ExtensionStateProviderWithOverrides component to safely use useExtensionState within provider context
- Add optional classNames parameter to createStorybookDecorator for custom styling
- Import cn utility from @heroui/react for className merging
- Fix margin class from m-x-auto to mx-auto
* Add message to mock history
---------
Co-authored-by: Jose R. Perez <trupix@gmail.com>
Removed favorited_model_ids field from API configuration models in proto files and migrated storage handling to global state key management.
Cleans up configuration separation by removing non-API-related data from model definitions. Enables more consistent state handling across the application.
* Use the correct version number in cline-core
cline-core should use the same version number as the extension because they share the same code for the core functionality.
Use the version number from the ExtensionRegistryInfo instead of from the standalone package.json
* Use node:fs instead of fs
* Refactor API configuration to use proto enums and structured types
- Replace JSON string fields with proper proto message types
- Convert snake_case field names to camelCase for consistency
- Use ApiProvider enum instead of string for provider fields
- Add structured types for model info and selectors
- Remove deprecated settings conversion module
- Update proto conversions to handle new structured format
* fix types errors caused by changing to generic string
* Add a field to the HostProvider `extensionFsPath`
Replace vscode.ExtensionContext `extensionUri` with `HostProvider.extensionFsPath`.
This part of removing uses of the VSCode API fom the codebase except for in platform specific code (these are src/hosts/vscode and src/extension.ts).
* Remove extra leading slash from webview URL on JetBrains
* Remove vscode.Uri from the WebviewProvider
Replace `vscode.Uri` with URL strings.
Replace Uri with Url in variable names.
* Add task-specific settings caching to StateManager
Implement per-task settings storage with automatic loading/clearing:
- Add taskStateCache for isolated task settings
- Load task settings on task creation and reinitialize
- Clear task settings cache when tasks end
- Prioritize task cache over global state in getters
* update error wording for taskSettings read failure
* add missing return statement in promise.all
* fix: persist pending task settings before clearing cache
Changed clearTaskSettings to be async and ensure any pending task state
changes are persisted to storage before clearing the in-memory cache.
This prevents potential data loss when a task ends with unpersisted
settings still in the pending state queue.
- Made clearTaskSettings async and added optional taskId parameter
- Added logic to persist pending task state batch before clearing
- Updated controller to await clearTaskSettings and pass taskId
* fix process.env access in build script
- Add CLINE_ENVIRONMENT=production to esbuild define config
- Remove fallback empty strings for API keys in build config
- Simplify optional chaining to direct property access for process.env
- Ensure consistent environment variable handling across config files
* verify CI secrets
* revert temp test
* Don't construct the redirect URL in the webview.
Add an RPC to the ProtoBus to get the URI to redirect back to the host IDE.
Support for JetBrains will be added in a second PR.
* Remove the uriScheme and extension name from the ExtensionStateContext.
These are being used to construct the IDE redirect URI, but this is not a cross-platform compatible way to do this.
* Update the host bridge to return the whole URL to redirect to the IDE
Return the whole redirect URI instead of just the URI scheme. VSCode needs the whole URI to redirect back to VSCode and open the cline extension.
* Update js doc
* Remove unused propertu uriScheme
All uses of vscode.env.uriScheme have been moved to platform specific code, so add it to linter rules for vscode API.
* add global state var for yolo mode
* setting and updating yolo mode in autoApprover
* use approveAll variable in autoAPprove class
* add logic for automatically handling plan_mode_respond tool calls
* remove follow up question tool in yolo mode
* conditional parameter inclusion for execute_command in yolo mode
* logic for having terminal command continue in background once timer is up for yolo mode
* prompt adjustment for the timeout param
* changing function signature
* full template changes to support context
* merge conflict fix for system_info
* fixing default values
* update where we resolve template to TemplateEngine
* template engine test update
* test changes, adding types
* updating TemplateEngine test scoping
* add missing ide param in test
* clean up variable naming
* Add descriptive aria-labels to mcp server screen
* Improve screen reader accessibility for cline rules page and its tabs
* Fix: Have screen readers read the new rule / new workflow file labels consistently (previously it always announced new rule file regardless of the actual file type)
* Add changeset
* Fix: Add descriptive aria-labels to unlabelled buttons in the history preview screen
* Fix: Add descriptive aria-labels to unlabelled buttons in the history view screen
* Add changeset
* Add environment variable injection to esbuild config
Inject TELEMETRY_SERVICE_API_KEY, ERROR_SERVICE_API_KEY, and CLINE_ENVIRONMENT
at build time for production builds.
* add changeset
* update
* changeset version bump
* Updating CHANGELOG.md format
* Update CHANGELOG for version 3.28.4
Consolidate changelog entries for version 3.28.4 and improve clarity.
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* fix: detectedShell returns non-string on some Windows machines leading to indefinite API request hanging
* Fix bug causing API request to hang on Windows
### Problem
The `--no-stash` flag was originally added to work around issues where teammates hadn't installed Biome after our migration from Prettier. When the formatter failed, lint-staged's default stashing behavior would remove staged changes, causing frustration.
However, this workaround now causes a different problem: lint-staged runs formatters on files containing both staged AND unstaged changes. When Biome formats these files, it inadvertently stages unstaged modifications, effectively merging work-in-progress changes into commits.
### Solution
Remove the `--no-stash` flag to restore lint-staged's default behavior:
- Stash unstaged changes before running formatters
- Run formatters only on staged content
- Restore the stash after formatting
This ensures that only intentionally staged changes are included in commits, preventing accidental inclusion of work-in-progress modifications.
### Context
It's been sufficient time since the Prettier → Biome migration that all team members should have the proper tooling installed. The original workaround is no longer needed and is now causing more problems than it solves.
* changeset version bump
* Updating CHANGELOG.md format
* Updated changelog for release
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* feat: generate commit for staged changes if any
- Replace getWorkingState with getGitDiff function that return diff for staged changes only with unstaged change as fallback
- Add structured PROMPT constant with system and message templates
- Wrap generation logic in try-catch for better error handling
- Move input validation and progress handling into main generate function
- Improve error messages with more descriptive context
* changeset added
* clean up
* changeset version bump
* Updating CHANGELOG.md format
* Prepare for release v3.28.2
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* changeset version bump
* Updating CHANGELOG.md format
* Prepare changelog for release
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* Use the correct IDE name in the API request
The IDE name is influences the model's response, so use the correct name instead of using VSCode on all platforms.
* Include the IDE type in the system info
* Move the ide name into the SystemPromptContext
Remove the legacy system prompt test, otherwise it would be need to be updated for these changes, but it is already deprecrated.
* Register commands and view to use centralized ExtensionRegistryInfo
Replace hardcoded package.json imports and string literals with a centralized
ExtensionRegistryInfo object that provides extension name and command
definitions. This improves maintainability and ensures consistency across
the codebase.
* update view id
* Fix environment variable serialization in vite config
Wrap all process.env values with JSON.stringify to ensure proper
string serialization and prevent undefined values from breaking
the build configuration.
* fix: using baseURL to fetch models and get API key
* change set
* fix: keeping /v1 in URL
This is because `URL` constructor, strips the path when giving two
arguments.
* When using the AuthHandler redirect to the host IDE after logging in.
Add an RPC to the host bridge to the URI scheme for the host IDE.
Add a redirect to the login succeeded page.
* Typo
* Add Active Workspaces info to system information
Update system_info.ts to include active workspaces in the system prompt, providing AI assistants with context about all currently open workspace directories. This enhancement helps the AI understand the full scope of the user's development environment beyond just the current working directory.
* add changeset
* Add Active Workspaces info to system information
Update system_info.ts to include active workspaces in the system prompt, providing AI assistants with context about all currently open workspace directories. This enhancement helps the AI understand the full scope of the user's development environment beyond just the current working directory.
* add changeset
* Update test for single workspace
* IS_TEST
* Adding MultiRoot support scaffolding to tasks and adding support for multi root checkpoint manager
* Adding MultiRoot support scaffolding to tasks and adding support for multi root checkpoint manager
* Adding MultiRoot support scaffolding to tasks and adding support for multi root checkpoint manager
* Adding MultiRoot support scaffolding to tasks and adding support for multi root checkpoint manager
* Adding MultiRoot support scaffolding to tasks and adding support for multi root checkpoint manager
* Adding MultiRoot support scaffolding to tasks and adding support for multi root checkpoint manager
* Refactor feature flags to use centralized service instead of state manager
- Replace direct state manager access with featureFlagsService calls
- Remove feature flag polling from webview initialization
- Move feature flag polling to main initialization flow
- Centralize focus chain feature flag logic in FeatureFlagsService
* Update system prompt snapshots
---------
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* changeset version bump
* Updating CHANGELOG.md format
* Changelog and Anncouncements update for release
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* dev: PostHog config to use separate API keys for telemetry and error tracking
- Update PostHogErrorProvider to use dedicated errorTrackingApiKey
- Add comprehensive documentation and type definitions
- Support environment variables with fallback to public keys
- Improve code organization with clearer naming conventions
* changeset added
* Update GitHub Workflow
* debug
* revert debug and set process env for browser
* undefined environment variables fallback to public keys
* update workflow
* update provider factories with config validation and no-op logging
- Add PostHog config validation to determine provider type
- Replace "none" type with "no-op" for consistency
- Enhance NoOpProvider implementations with actual logging
- Update factory logic to use validated config checks
- Improve error handling and fallback behavior
* Update .github/workflows/publish.yml
Co-authored-by: Dennise Bartlett <bartlett.dc.1@gmail.com>
* Update workflow
* clean up
* update env vars in vite config
* Fix error handling recursion and update PostHog configuration
- Prevent infinite recursion in ClineError.transform() by checking for existing ClineError instances
- Use errorTrackingApiKey instead of apiKey for PostHog error provider initialization
- Replace Logger calls with console methods in NoOpErrorProvider to avoid circular dependencies
- Update dev environment detection logic to exclude CI check for more reliable configuration
* Remove console.error from unsupported error provider fallback
Remove unnecessary error logging when falling back to NoOpErrorProvider
for unsupported error provider types in ErrorProviderFactory.
* Update PostHog config to handle local and test environments
- Change dev environment detection to include local environment
- Add test environment detection for E2E and unit tests
- Disable PostHog validation in test environments to enable mocking
* add fallback back
* remove hardcoded keys
* Posthog secrets to Nightly workflow
---------
Co-authored-by: Dennise Bartlett <bartlett.dc.1@gmail.com>
* dev: extension isolation in VS Code launch configs and E2E tests
- Replace specific extension disabling with --disable-extensions flag to avoid conflicts or bugs caused by other extensions
- Add channel configuration support for stable/insiders testing
- Enhance E2E test interface with channel selection capability
- Ensure better isolation during development and testing
* Update e2e test fixtures: configure workspace settings and allow .vscode tracking
- Add workbench.secondarySideBar.defaultVisibility setting to multiroots workspace
- Remove .vscode from gitignore to allow VS Code configuration tracking
* Update nightly extension container name and e2e test setup
- Set activity bar title for nightly builds in package.json
- Remove unnecessary extension development flags from e2e tests as the test is set up to test from the vsix package it builds
* remove "--no-dependencies"
* activitybar title
* add back extensionDevelopmentPath
* Improve error handling and validation in taskHistory storage operations
- Add user-facing error message when StateManager initialization fails
- Replace empty string check with proper JSON parsing error handling in task history reading
- Add validation to ensure task history migration writes data correctly before clearing old state
* add missing return statement
* split up error check cases for write validation
* added telemetry around uexpected API responses
* feat(cline): capture real HTTP request ID (X-Request-ID) in ClineHandler via custom fetch; expose getLastRequestId(); prefer true requestId over generationId in Task telemetry for empty-assistant-message
* Delete PR_BODY_nighttrek_api_error_tracking.md
* refactor(ts): improve type safety for request ID capture and empty-assistant diagnostics
cline.ts: strongly type custom fetch override using Parameters<typeof fetch>/ReturnType<typeof fetch>; safe URL extraction for string|URL|Request; removed any casts.
task/index.ts: encapsulate requestId retrieval via getApiRequestIdSafe(); avoid any; no behavior change. Scope limited to PR 6066-related changes.
* Add multi-root workspace support to e2e diff editor tests
- Extract shared diff editor test logic into reusable function
- Add WorkspaceType interface and workspace fixture configuration
- Create test.code-workspace file for multi-root workspace testing
- Add workspace_2 fixture directory with README
- Update test helpers to support both single and multi-root workspaces
- Add dedicated test case for diff editor in multi-root workspace
* Add verbose logging control and improve workspace parameter naming in e2e tests
- Add CLINE_E2E_TESTS_VERBOSE environment variable to control mock server logging
- Replace console.log with conditional log function in ClineApiServerMock
- Rename 'workspace' parameter to 'workspaceType' for clarity
- Rename 'workspace' function parameter to 'workspacePath' for better semantics
* Add doc string
* rename
* Replace hardcoded extension identifiers with dynamic package.json values
Replace hardcoded "saoudrizwan.claude-dev" and "claude-dev" strings with
dynamically imported package name and publisher from package.json across
extension activation, webview providers, commands, and test services.
* Refactor command registration to use centralized registry
- Add new registry.ts module to centralize command name management
- Replace hardcoded command strings with registry-based command names
- Import getClineCommands function to generate consistent command identifiers
- Improve maintainability by centralizing command name definitions
* Add nightly release automation with GitHub Actions
- Add GitHub workflow to publish nightly releases daily at 00:00 UTC
- Add publish:marketplace:nightly npm script
- Create publish-nightly.mjs script to handle version updates and publishing
- Script converts package to "cline-nightly" with timestamp-based versioning
- Publishes to both VS Code Marketplace and OpenVSX Registry
* Update file name
* Remove input tag
* Change nightly build schedule from midnight to 4 AM PST
- Change nightly build schedule from midnight to 4 AM PST
- Add check to skip build if no commits in last 24 hours
- Disable nightly extension in VS Code debug configs to avoid conflicts
* add if: github.repository == 'cline/cline'
* dev: Configure auto-fix and import organization on save in VSCode
Add editor.codeActionsOnSave settings to automatically fix linting issues,
remove unused imports, and organize imports using Biome when saving files.
* biome specific
* Remove Host Bridge watch service
Replace the host bridge file watch service with native JS module chokidar.
Remove the watch service and references to it.
* Remove references to watch service from host provider
- Add clean:build to remove build artifacts (dist, dist-standalone, webview-ui/build, src/generated, out/)
- Add clean:deps to remove node_modules directories (root and webview-ui)
- Add clean:all to run both clean:build and clean:deps
- Rename original clean command to clean:build for better organization
* correctly set ext thinking tokens when max output set to default
-1, unset temperature on anthropic models in ext thinking mode
* fix wrong parenthesis location
Remove the extension telemetry config check from PostHogTelemetryProvider, which was looking at the wrong location which never get sets.
We should rely on setOptIn() for user preference management via UI which gets invoked when webview called the updateTelemetryState method in TelemetryService, which gets called in src/core/controller/ui/initializeWebview.ts
* Add vscode.env.onDidChangeTelemetryEnabled to the Host Bridge
Add a streaming method to the host bridge that returns a message when
the host telemetry setting is changed.
Replace uses of vscode.env.onDidChangeTelemetryEnabled with `subscribeToTelemetrySettings`.
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Remove debug logs
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Binaries will be the cwd.
When tools fail with an error, log the exception to the console. This makes debugging cline-core easier.
# Conflicts:
# src/services/ripgrep/index.ts
# src/standalone/cline-core.ts
* Fix check for debug build in package-standalone script
* Support node modules that include binaries
Add support to the scripts/package-standalone.js for node modules that use platform-specific binary modules.
By default the script bundles the module for all platforms, this can be disabled with -s for single platform builds.
The module for each platform will be bundled into standalone.zip in platform specific directories:
```
binaries/linux-arm64/node_modules
binaries/darwin-x64/node_modules
binaries/win32-x64/node_modules
binaries/darwin-arm64/node_modules
binaries/linux-x64/node_modules
```
When running cline-core add the correct directory to the NODE_PATH, e.g.
```
$ export NODE_PATH=./node_modules/:./binaries/darwin-arm64/node_modules/
cline:/tmp/1$ node cline-core.js
Loading stubs...
Finished loading stubs
Loading stub impls...
Finished loading stub impls...
Cline environment: production
XS variant configuration warnings: [
'Component overrides for unused components: TOOL_USE_SECTION, TOOLS_SECTION, MCP_SECTION, TODO_SECTION, FEEDBACK_SECTION',
'Missing recommended components: TOOL_USE_SECTION'
]
[2025-09-05T19:53:00.853] #bot.cline.server.ts Running standalone cline 0.0.1
[2025-09-05T19:53:00.854] #bot.cline.server.ts Using settings dir: /Users/sjf/.cline/data
Finished loading vscode context...
[2025-09-05T19:53:00.858] #bot.cline.server.ts
Starting cline-core service...
sjfsjf created DBBBBBBBBB: Database {
name: '/tmp/db.sql',
open: true,
inTransaction: false,
readonly: false,
memory: false
}
```
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Support node modules that include binaries
Add support to the scripts/package-standalone.js for node modules that use platform-specific binary modules.
By default the script bundles the module for all platforms, this can be disabled with -s for single platform builds.
The module for each platform will be bundled into standalone.zip in platform specific directories:
```
binaries/linux-arm64/node_modules
binaries/darwin-x64/node_modules
binaries/win32-x64/node_modules
binaries/darwin-arm64/node_modules
binaries/linux-x64/node_modules
```
When running cline-core add the correct directory to the NODE_PATH, e.g.
```
$ export NODE_PATH=./node_modules/:./binaries/darwin-arm64/node_modules/
cline:/tmp/1$ node cline-core.js
Loading stubs...
Finished loading stubs
Loading stub impls...
Finished loading stub impls...
Cline environment: production
XS variant configuration warnings: [
'Component overrides for unused components: TOOL_USE_SECTION, TOOLS_SECTION, MCP_SECTION, TODO_SECTION, FEEDBACK_SECTION',
'Missing recommended components: TOOL_USE_SECTION'
]
[2025-09-05T19:53:00.853] #bot.cline.server.ts Running standalone cline 0.0.1
[2025-09-05T19:53:00.854] #bot.cline.server.ts Using settings dir: /Users/sjf/.cline/data
Finished loading vscode context...
[2025-09-05T19:53:00.858] #bot.cline.server.ts
Starting cline-core service...
sjfsjf created DBBBBBBBBB: Database {
name: '/tmp/db.sql',
open: true,
inTransaction: false,
readonly: false,
memory: false
}
```
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Remove test code
* Use the correct target directory for the binaries
The directory structure that the JB host expects is does
not exactly match ${arch}-${os}
* Update package-standalone script
Warn if there is module that needs binaries, but it is not being used.
Reset the binaries dir before packaging.
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Fix styling for TelemetryBanner and SettingsView
- Replace styled-components with Tailwind classes in TelemetryBanner
- Add performance optimizations to SettingsView with memoization and debouncing
- Update Tailwind config to support new banner color variables
- Improve component structure and reduce bundle size
* use lodash
* memo content map
* Update E2E test
* Add key prop to ClineAccountView
Add key prop to ClineAccountView to force re-render on user change
Add key={clineUser.uid} to ClineAccountView component to ensure proper
component re-mounting when user changes, preventing stale state issues.
* changeset added
* add grok coder free model to cline provider (#5808)
* add free grok-coder-free model to cline provider
* add changeset
* fix typo
* checkpoints class created
* Added saveCheckpoint to Checkpoint class
* Rebased and updated for new ClineMessages
* Moved things around, started on saveCheckpoint
* implemented handler for checking and initializing the checkpointTracker if not already done
* Moved restoreCheckpoint and handleSucessfullRestore to checkpoints class
* Moved presentMultiDiff, not yet connected
* Migrated doesLatestTaskCompletionHaveNewChanges and compelted migration on presentMultifileDiff
* Better init handling
* moved fileContextTracker to new checkpoints class
* Checkpoints state management
* refactoring and cleanup in saveCheckpoint, init handler
* More saveCheckpoint refactoring
* Added sayTs return to say function for better async clineMessages updates
* Refactor checkpoint system with timestamp tracking and dependency separation
* More refactoring
* Friendship ended with checkpointTracker, checkpointManager is new best friend
* Better error handling
* checkpointTrackerErrorMessage > checkpointManagerErrorMessage
* Addressed possible race condition with message(Ts)
* Better error handling and 15s timeout changes
* Remove checkpoint delegation methods and call checkpoint manager directly
* updating checkpoints protos
* cleanup
* Restored autoApprove entry to task class
* cleanup
* cleanup
* Post-rebase fixes
* Migrated timeout and state changes from PR #5015
* Extract toolExecutor callback functions to private methods for readability
* Updated info/error messages to use HostProvider
* post rebase fixes
* Compare/diff button fix
* Fix lint errors
* Update webview-ui/src/components/chat/task-header/TaskHeader.tsx
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
* Update src/integrations/checkpoints/index.ts
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Fixed bad merge, updated focus change for compatability with new say()
* Fixed error message propagation issue
---------
Co-authored-by: pashpashpash <nik@cline.bot>
Co-authored-by: Kevin Bond <kevin@Mac.hsd1.ca.comcast.net>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
- Recognize GPT-5 IDs (including openai/gpt-5) in model family detection and variants
- Add GPT-5 (OpenAI) to integration matrix and unit tests
- Update snapshot test instructions to use npm run test:unit -- --update-snapshots
- Fix PromptBuilder: don’t early-return on missing params; init to [] to keep output consistent
- Tidy test diff formatting (braces, explicit returns)
- Polish load_mcp_documentation tool description
* Add 200k context window variant for Claude Sonnet 4 to OpenRouter and Cline providers
* v3.26.7 Release Notes
* Fix grok-code-fast-1 info
* v3.27.0 Release Notes
* Add new kimi model to groq and moonshot providers
* v3.27.1 Release Notes
* adding new kimi model to groq and moonshot providers
* added fireworks provider too
* fixing fireworks test
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* Fixed issue where slash command feature would remove first word after the command name
* Removed slashCommandsQueryRef
* Add fix for mentions as well
* Updated mentions test
---------
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
Some environments do not return a value for the vscode machine ID.
For these cases we are generating a UUID. But the UUID was not being stored, so a new one was being created everytime the extension started.
Start storing the generated ID in the global state.
I am changing the name of the key to be more descriptive, because we only want to store the generated ID. If there is an actual machine ID, we should just use that and not store it. The old key name was only ever been read, it was never written, so this will have no affect on existing users.
* fix: only focus chat input when in chat view
- Only focus chat input when chat view is visible, not when hidden (in other view)
- Wrap onDone callback in arrow function for consistency
- Replace inline styles with Tailwind classes for button container
* update gap value
Remove process.env.CI check and rely only on IS_DEV flag to determine whether to use development or production PostHog configuration.
This is because process.env.CI is always true during the publish GitHub workflow.
* Add telemetry tracking for terminal hang detection and user interventions
- Add terminal hang detection with configurable timeouts for buffer stuck, stream timeout, and completion waiting stages
- Track user interventions when clicking "Process while Running" button
- Add telemetry for terminal output failures with specific failure reasons
- Implement comprehensive monitoring of terminal process lifecycle events
- Add metrics for shell integration usage and terminal operation performance
* Remove Shortcut of Cline from its title
* Remove Shortcut of Cline from its title
* Remove Shortcut of Cline from its title
* docs: Update Claude Code documentation to include Pro plans alongside Max plans
* Add JetBrains installation documentation
- Create comprehensive installation guide for JetBrains IDEs
- Include both marketplace and manual installation methods
- Document supported IDEs and key differences from VSCode
- Add alpha status note and terminal integration limitations
- Update docs.json navigation to include new page
* Add images to JetBrains installation documentation
- Add demo GIF showing Cline in action in JetBrains IDE
- Add screenshot of JetBrains marketplace download page
- Add screenshot of Install Plugin from Disk dialog
- Add screenshot of file selection dialog with zip file
- Complete visual walkthrough of installation process
* Update JetBrains demo to high-quality GIF
- Replace jetbrains-demo.gif with jetbrains-demo-hifi.gif
- Improved visual quality for better user experience
* Add JetBrains settings dialog screenshot
- Add screenshot showing the main settings dialog
- Provides visual guidance for accessing IDE settings
- Complete visual walkthrough now includes 5 screenshots
* Add JetBrains logo and finalize documentation
- Add JetBrains logo at top of page with proper styling
- Update content with user revisions (BYOK note, streamlined structure)
- Complete visual installation walkthrough with 5 images
- Ready for PR review
* Update early access messaging
- Change from 'You're getting early access' to 'Cline is in early access'
- More professional and product-focused messaging
- Maintains excitement while being clearer about the product status
* Update installation link for Cline plugin
---------
Co-authored-by: pashpashpash <nik@cline.bot>
* docs: Update Claude Code documentation to include Pro plans alongside Max plans
* Add JetBrains installation documentation
- Create comprehensive installation guide for JetBrains IDEs
- Include both marketplace and manual installation methods
- Document supported IDEs and key differences from VSCode
- Add alpha status note and terminal integration limitations
- Update docs.json navigation to include new page
* Add images to JetBrains installation documentation
- Add demo GIF showing Cline in action in JetBrains IDE
- Add screenshot of JetBrains marketplace download page
- Add screenshot of Install Plugin from Disk dialog
- Add screenshot of file selection dialog with zip file
- Complete visual walkthrough of installation process
* Update JetBrains demo to high-quality GIF
- Replace jetbrains-demo.gif with jetbrains-demo-hifi.gif
- Improved visual quality for better user experience
* Add JetBrains settings dialog screenshot
- Add screenshot showing the main settings dialog
- Provides visual guidance for accessing IDE settings
- Complete visual walkthrough now includes 5 screenshots
* Add JetBrains logo and finalize documentation
- Add JetBrains logo at top of page with proper styling
- Update content with user revisions (BYOK note, streamlined structure)
- Complete visual installation walkthrough with 5 images
- Ready for PR review
- Add "retry" action type to ButtonActionType
- Update api_req_failed button config to use retry action with disabled sending
- Implement retry handler in useMessageHandlers to send simple approval and clear input state
Add properties to the telemetry events for the host environment name and version.
Add a .create() function to the TelemetryService because we can't use async in the constructor. (Getting the host platform version is async).
getMachineId was not returning the correct value and a new distint ID was getting generated every time the extension started.
Add tests and logging for distinctId.ts
* Add TASK_PROGRESS_PARAMETER to various tools and update descriptions
- Introduced TASK_PROGRESS_PARAMETER to enhance task tracking across multiple tools.
- Updated tool descriptions for clarity and consistency, including detailed instructions and usage examples.
- Adjusted existing parameters to improve user guidance and ensure proper tool functionality.
* update snapshots
* do not remove new lines within section around divider
---------
Co-authored-by: abeatrix <beatrix@cline.bot>
* Fix write_to_file tool diff streaming
* Fix discrepencies with original tool execution logic
* Fix attempt completion command leading to 'ask promise was ignored' error
* Fix input not being cleared when hitting approve button
* Pass all options to the handlers
* Do not pass all options
* Have onRetryAttempt as a common option
* Update the Gemini CLI
* Throw a RetriableError and extract retry delays from the error responses
* Add changeset
* Throw a RetriableError if extracting the delay fails
* Improve parseRetryDelay
* Add fallback
* Refactor services architecture with provider pattern and factory classes
- Extract telemetry, error handling, and feature flags into separate service modules
- Implement provider pattern with factory classes for better abstraction
- Move PostHog-specific implementations to dedicated provider classes
- Add interfaces for telemetry, error, and feature flags providers
- Update imports across codebase to use new service structure
- Add unit tests for telemetry service
* Refactor service providers and centralize distinct ID management
- Move provider interfaces to dedicated providers/ subdirectories
- Extract distinct ID management to shared logging/distinctId module
- Simplify PostHogClientProvider by removing distinct ID parameter
- Update service factories to use centralized distinct ID
- Reorganize test files to __tests__/ directories
- Remove redundant distinct ID handling across services
* merge main
* clean up
* add grok coder free model to cline provider (#5808)
* add free grok-coder-free model to cline provider
* add changeset
* fix typo
* v3.26.6 Release Notes (#5788)
* changeset version bump
* Updating CHANGELOG.md format
* Update CHANGELOG.md for version 3.26.6 with user-friendly descriptions
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: pashpashpash <nik@cline.bot>
* Remove top padding from ActionButtons component (#5806)
Eliminate unnecessary top padding in the chat view.
* removing middle out from params to or / cline providers (#5811)
* Dify.ai integration (#5761)
* add focus chain settings to statemanager initialize function (#5798)
* add custom gpt-5 system prompt (#5757)
* gpt-5 system prompt
* add changeset
* Focus chain telemetry tweaks (#5810)
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* Remove eslint-rules test patterns from Mocha spec configuration (#5812)
Update the "spec" array in .mocharc.json to exclude "eslint-rules/__tests__/**/*.test.ts",
as that directory has been removed.
* Increase horizontal margin in AutoApproveBar component (#5813)
Update the mx-[5px] to mx-[15px] in the div's className to adjust horizontal spacing for improved layout alignment.
* fix: remove hardcoded Ollama host from options (#5816)
* fix: remove hardcoded Ollama host from options
Updates the Ollama handler to remove the hardcoded "http://localhost:11434" as the `ollamaBaseUrl` fallback option for the host to allow the Ollama SDK to handle the default endpoint configured on users' machine.
Reason: Ollama allows cross-origin requests from 127.0.0.1 and 0.0.0.0 by default. However, when we use localhost, the browser would resolve it through DNS, which can result in different IP addresses.
Docs: https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-expose-ollama-on-my-network
* add changeset
* deep-planning prompt PowerShell (#5699)
* Windows/Powershell specific deep planning prompt changes
* Prompt adjustments
---------
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* Changes to condenseToolResponse & summarizeTask prompting (#5817)
* Condense & deep planning prompt adjustments
* Removed ps prompting ready for PR
* rebase
* Fixed typo on one word
---------
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* rename CacheService to StateManager (#5681)
* rename CacheService to StateManager
* fix types
* infer state key types from existing interfaces (#5815)
* fix: AutoApproveModal positioning and scrolling behavior (#5819)
* fix: AutoApproveModal positioning and scrolling behavior
- Add dynamic positioning calculation to prevent modal overflow
- Implement proper flex layout with scrollable content container
- Ensure minimum usable height and top margin constraints
- Fix modal positioning when button is near viewport edges
* Add changeset
* clean up
* template-based system prompt (#5731)
* Refactor system prompt architecture with new template-based system
- Move existing system prompt files to legacy directory
- Implement new modular system with PromptBuilder, PromptRegistry, and TemplateEngine
- Add component-based prompt structure with reusable parts (capabilities, rules, tool_use, etc.)
- Create variant-specific templates for generic and next-gen models
- Add comprehensive test suite with snapshots for different model configurations
- Introduce template engine with placeholder support for dynamic prompt generation
* Refactor system prompt architecture with modular tool definitions
- Extract tool specifications into dedicated modules under tools/
- Add ClineToolSet class for managing tool variants by model family
- Restructure prompt components with centralized index exports
- Update prompt builder and registry to support new tool architecture
- Reorganize shared utilities and type definitions
- Update all test snapshots to reflect new prompt structure
* Update snapshots
* reorg
* Update template format
* clean up
* typos
* focus chain section
* fix task progress in attempt_completion
* Implement tool retrieval with fallback options in PromptBuilder
- Added `getToolByNameWithFallback` and `getToolsForVariantWithFallback` methods to `ClineToolSet` for improved tool resolution.
- Updated `getToolsPrompts` in `PromptBuilder` to utilize these new methods, allowing for better handling of tool requests with fallback to generic tools.
- Enhanced sorting and filtering of tools based on context requirements and requested order.
* update fild structure
* clean up
* fix static test string
* Update snapshot names
* Update unit test
* Remove unused placeholders and update docs
* Update README on how to add new tool
* Remove task_progress reference from attempt_completion tool description when focus chain is disabled
* Upgrade posthog-node to v5.8.0 and add exception filtering
- Update posthog-node from v4.8.1 to v5.8.0
- Add EventMessage import for type safety
- Implement posthogEventFilter to only capture exceptions from Cline extension
- Filter exceptions by checking for "cline" in error messages or "saoudrizwan" in stack frames
* Use env var keys
- Add PostHogClientConfig to ErrorProviderFactory with proper validation
- Update PostHogErrorProvider to use dedicated client instead of shared one
- Add API key validation in PostHogFeatureFlagsProvider before client creation
- Enhance error handling with fallback to NoOpErrorProvider instead of throwing
- Standardize configuration passing across telemetry, error, and feature flag services
* Upadte filter
* update filter
* update imports
* use secret
* disable enableExceptionAutocapture
* removes vscode.env.machineId
* initializeDistinctId
* use get trap as workaround
* on exit
---------
Co-authored-by: pashpashpash <nik@cline.bot>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Toshii <94262432+0xToshii@users.noreply.github.com>
Co-authored-by: Yunus Emre AYHAN <ayhanyunusemre@gmail.com>
Co-authored-by: celestial-vault <58194240+celestial-vault@users.noreply.github.com>
Co-authored-by: canvrno <46584286+canvrno@users.noreply.github.com>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* Adding frequency penalty for gemini models
* Adding frequency penalty for gemini models
* Adding frequency penalty for gemini models
* Adding frequency penalty for gemini models
* Adding frequency penalty for gemini models
Cline-core is setting some of these values in the models proto to the javascript Number.MAX_SAFE_VALUE, which won't fit in int32, so these protobuf messages fail to serialize to and can't be transported.
Just change all the int32s in this file to int64 beceause this is the second time this same issue has occured.
Fixes:
```
2025-08-28 16:30:03,824 [ 3479] WARN - bot.cline.services.ProtoBusProxyService - Stream cline.ModelsService.subscribeToOpenRouterModels encountered error
io.grpc.StatusException: INTERNAL: invalid int32: 9007199254740991
at io.grpc.Status.asException(Status.java:548)
at io.grpc.kotlin.ClientCalls$rpcImpl$1$1$1.onClose(ClientCalls.kt:300)
at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:564)
at io.grpc.internal.ClientCallImpl.access$100(ClientCallImpl.java:72)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:729)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:710)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Wor
```
* fix: Harden PromptRegistry with health checks and generic fallback
- Perform registry health check after loading (validate GENERIC, log counts/warnings)
- Always try GENERIC when family-specific variant is missing
- Enhance error diagnostics with available variants and registry state
- Ensure GENERIC variant exists; create minimal fallback if loading fails
- Minor test style cleanup and variants index update to support reliability
* simpilfy
* variants
* Fix import
* type safe
* remove lazy loading
* load and set variants
* fix import location
* fix: sap provider - show models when resource group field is empty
* fix: sap provider - show models when resource group field is empty
* fix: sap provider - show models when resource group field is empty
* Update snapshots for system prompt tests
- Add detailed README.md explaining integration test workflow, snapshot testing, and troubleshooting
- Unit tests should fail when snapshots are mismatched
- Update all test snapshots across different model configurations (Anthropic Claude, OpenAI GPT)
- Refresh section title comparison data for prompt structure validation
- Improve test documentation with clear examples and failure handling guidance
* make old prompts static
* Fix old vs new comparasion mismatch
* Remove action buttons from showing for followup and plan_mode_respond
Set primaryText, secondaryText, and primaryAction to undefined for followup and plan_mode_respond button configurations to disable default approve/reject behavior.
* add changeset
* add grok coder free model to cline provider (#5808)
* add free grok-coder-free model to cline provider
* add changeset
* fix typo
* v3.26.6 Release Notes (#5788)
* changeset version bump
* Updating CHANGELOG.md format
* Update CHANGELOG.md for version 3.26.6 with user-friendly descriptions
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: pashpashpash <nik@cline.bot>
* Remove top padding from ActionButtons component (#5806)
Eliminate unnecessary top padding in the chat view.
* removing middle out from params to or / cline providers (#5811)
* Dify.ai integration (#5761)
* add focus chain settings to statemanager initialize function (#5798)
* add custom gpt-5 system prompt (#5757)
* gpt-5 system prompt
* add changeset
* Focus chain telemetry tweaks (#5810)
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* Remove eslint-rules test patterns from Mocha spec configuration (#5812)
Update the "spec" array in .mocharc.json to exclude "eslint-rules/__tests__/**/*.test.ts",
as that directory has been removed.
* Increase horizontal margin in AutoApproveBar component (#5813)
Update the mx-[5px] to mx-[15px] in the div's className to adjust horizontal spacing for improved layout alignment.
* fix: remove hardcoded Ollama host from options (#5816)
* fix: remove hardcoded Ollama host from options
Updates the Ollama handler to remove the hardcoded "http://localhost:11434" as the `ollamaBaseUrl` fallback option for the host to allow the Ollama SDK to handle the default endpoint configured on users' machine.
Reason: Ollama allows cross-origin requests from 127.0.0.1 and 0.0.0.0 by default. However, when we use localhost, the browser would resolve it through DNS, which can result in different IP addresses.
Docs: https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-expose-ollama-on-my-network
* add changeset
* deep-planning prompt PowerShell (#5699)
* Windows/Powershell specific deep planning prompt changes
* Prompt adjustments
---------
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* Changes to condenseToolResponse & summarizeTask prompting (#5817)
* Condense & deep planning prompt adjustments
* Removed ps prompting ready for PR
* rebase
* Fixed typo on one word
---------
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* rename CacheService to StateManager (#5681)
* rename CacheService to StateManager
* fix types
* infer state key types from existing interfaces (#5815)
* fix: AutoApproveModal positioning and scrolling behavior (#5819)
* fix: AutoApproveModal positioning and scrolling behavior
- Add dynamic positioning calculation to prevent modal overflow
- Implement proper flex layout with scrollable content container
- Ensure minimum usable height and top margin constraints
- Fix modal positioning when button is near viewport edges
* Add changeset
* clean up
* template-based system prompt (#5731)
* Refactor system prompt architecture with new template-based system
- Move existing system prompt files to legacy directory
- Implement new modular system with PromptBuilder, PromptRegistry, and TemplateEngine
- Add component-based prompt structure with reusable parts (capabilities, rules, tool_use, etc.)
- Create variant-specific templates for generic and next-gen models
- Add comprehensive test suite with snapshots for different model configurations
- Introduce template engine with placeholder support for dynamic prompt generation
* Refactor system prompt architecture with modular tool definitions
- Extract tool specifications into dedicated modules under tools/
- Add ClineToolSet class for managing tool variants by model family
- Restructure prompt components with centralized index exports
- Update prompt builder and registry to support new tool architecture
- Reorganize shared utilities and type definitions
- Update all test snapshots to reflect new prompt structure
* Update snapshots
* reorg
* Update template format
* clean up
* typos
* focus chain section
* fix task progress in attempt_completion
* Implement tool retrieval with fallback options in PromptBuilder
- Added `getToolByNameWithFallback` and `getToolsForVariantWithFallback` methods to `ClineToolSet` for improved tool resolution.
- Updated `getToolsPrompts` in `PromptBuilder` to utilize these new methods, allowing for better handling of tool requests with fallback to generic tools.
- Enhanced sorting and filtering of tools based on context requirements and requested order.
* update fild structure
* clean up
* fix static test string
* Update snapshot names
* Update unit test
* Remove unused placeholders and update docs
* Update README on how to add new tool
* Remove task_progress reference from attempt_completion tool description when focus chain is disabled
* consolidate field declarations for globalstate, workspacestate, and secret keys
* remove old cacheservice file
* read_file tool call change for all models (#5830)
* feat: refactor UseCustomPrompt into reusable component, add to Ollama (#5818)
* feat: refactor UseCustomPrompt into reusable component, add to Ollama
Refactor custom prompt checkbox functionality from LMStudioProvider and OllamaProvider into a shared UseCustomPrompt component to reduce code duplication and improve maintainability.
* Add changeset
* replace key with providerId
* clean up
* Rename UseCustomPrompt to UseCustomPromptCheckbox and update imports
Rename UseCustomPrompt.tsx to UseCustomPromptCheckbox.tsx for better clarity
and update import paths in LMStudioProvider and OllamaProvider components.
* use StateManager in auxilary access of cline state instead of using vscode api directly
* fix default formatter that was erroneously changed
* feat: sap provider - support orchestration mode (#5541)
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap ai core - add orchestration
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - support orchestration modee
* feat: sap provider - support orchestration modee
* feat: sap provider - support orchestration modee
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: support doorway mapping semantic model [CCSTAHEL-2197]
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* Update docs/provider-config/sap-aicore.mdx
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* feat: sap provider - support orchestration model
* feat: support doorway mapping semantic model [CCSTAHEL-2197]
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* fix converse api image data to base64 string.
Signed-off-by: Lize Cai <lize.cai@sap.com>
---------
Signed-off-by: Lize Cai <lize.cai@sap.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Lize Cai <lize.cai@sap.com>
* add in new sap field from main merge in the right place
---------
Signed-off-by: Lize Cai <lize.cai@sap.com>
Co-authored-by: pashpashpash <nik@cline.bot>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
Co-authored-by: Toshii <94262432+0xToshii@users.noreply.github.com>
Co-authored-by: Yunus Emre AYHAN <ayhanyunusemre@gmail.com>
Co-authored-by: canvrno <46584286+canvrno@users.noreply.github.com>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
Co-authored-by: yuvalman <yuval.manor@sap.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Lize Cai <lize.cai@sap.com>
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap ai core - add orchestration
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - support orchestration modee
* feat: sap provider - support orchestration modee
* feat: sap provider - support orchestration modee
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: support doorway mapping semantic model [CCSTAHEL-2197]
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* Update docs/provider-config/sap-aicore.mdx
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* feat: sap provider - support orchestration model
* feat: support doorway mapping semantic model [CCSTAHEL-2197]
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* feat: sap provider - support orchestration model
* fix converse api image data to base64 string.
Signed-off-by: Lize Cai <lize.cai@sap.com>
---------
Signed-off-by: Lize Cai <lize.cai@sap.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Lize Cai <lize.cai@sap.com>
* feat: refactor UseCustomPrompt into reusable component, add to Ollama
Refactor custom prompt checkbox functionality from LMStudioProvider and OllamaProvider into a shared UseCustomPrompt component to reduce code duplication and improve maintainability.
* Add changeset
* replace key with providerId
* clean up
* Rename UseCustomPrompt to UseCustomPromptCheckbox and update imports
Rename UseCustomPrompt.tsx to UseCustomPromptCheckbox.tsx for better clarity
and update import paths in LMStudioProvider and OllamaProvider components.
* Refactor system prompt architecture with new template-based system
- Move existing system prompt files to legacy directory
- Implement new modular system with PromptBuilder, PromptRegistry, and TemplateEngine
- Add component-based prompt structure with reusable parts (capabilities, rules, tool_use, etc.)
- Create variant-specific templates for generic and next-gen models
- Add comprehensive test suite with snapshots for different model configurations
- Introduce template engine with placeholder support for dynamic prompt generation
* Refactor system prompt architecture with modular tool definitions
- Extract tool specifications into dedicated modules under tools/
- Add ClineToolSet class for managing tool variants by model family
- Restructure prompt components with centralized index exports
- Update prompt builder and registry to support new tool architecture
- Reorganize shared utilities and type definitions
- Update all test snapshots to reflect new prompt structure
* Update snapshots
* reorg
* Update template format
* clean up
* typos
* focus chain section
* fix task progress in attempt_completion
* Implement tool retrieval with fallback options in PromptBuilder
- Added `getToolByNameWithFallback` and `getToolsForVariantWithFallback` methods to `ClineToolSet` for improved tool resolution.
- Updated `getToolsPrompts` in `PromptBuilder` to utilize these new methods, allowing for better handling of tool requests with fallback to generic tools.
- Enhanced sorting and filtering of tools based on context requirements and requested order.
* update fild structure
* clean up
* fix static test string
* Update snapshot names
* Update unit test
* Remove unused placeholders and update docs
* Update README on how to add new tool
* Remove task_progress reference from attempt_completion tool description when focus chain is disabled
* Condense & deep planning prompt adjustments
* Removed ps prompting ready for PR
* rebase
* Fixed typo on one word
---------
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* fix: remove hardcoded Ollama host from options
Updates the Ollama handler to remove the hardcoded "http://localhost:11434" as the `ollamaBaseUrl` fallback option for the host to allow the Ollama SDK to handle the default endpoint configured on users' machine.
Reason: Ollama allows cross-origin requests from 127.0.0.1 and 0.0.0.0 by default. However, when we use localhost, the browser would resolve it through DNS, which can result in different IP addresses.
Docs: https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-expose-ollama-on-my-network
* add changeset
* use css variables for highlight styling and remove theme subscription along with vscode theme to highlight pipeline logic
* changeset
* Remove monaco-vscode-textmate-theme-converter
* Remove unnecessary markdown css
* Remove package-lock.json from version control
* re-add package-lock
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* Pass all options to the handlers
* Add changeset
* Do not pass all options
* Have onRetryAttempt as a common option
* Do not duplicate the onRetryAttempt definition
* feat: Integrate Qwen Code API with OAuth authentication
- Add Qwen Code API provider with OAuth2 authentication flow
- Implement QwenCodeProvider component for settings UI
- Add qwenCodeOauthPath to CacheService state management
- Update protobuf models with QWEN_CODE provider type
- Fix protobuf enum values (VSCODE_LM changed from 15 to 33)
- Add comprehensive API configuration conversion support
- Update build scripts to use system protoc for Windows compatibility
- Optimize VSIX packaging by excluding reference codebase
- Follow camelCase convention: qwen_code_oauth_path qwenCodeOauthPath
* docs: Add Qwen Code API integration documentation
- Document OAuth2 authentication flow and features
- Highlight enterprise-grade security capabilities
- Include setup instructions for credential management
- Emphasize automatic token refresh and caching features
* cleanup: Clean up build configuration for production release
- Revert protoc path to use grpc-tools instead of exposing system path
- Restore vscode:prepublish script for proper VS Code marketplace publication
- Remove reference codebase exclusion from .vscodeignore for cleaner packaging
* refactor: Remove Windows platform check from build-proto script
- Remove unnecessary isWindows variable and platform-specific logic
- Simplify TS_PROTO_PLUGIN to use standard require.resolve approach
- Improve cross-platform compatibility and code clarity
* restore: Restore Windows platform check in build-proto script
- Add back isWindows platform detection variable
- Restore Windows-specific TS_PROTO_PLUGIN logic using .cmd file
- Maintain cross-platform compatibility for Windows builds
* Update ApiOptions.tsx
* Remove Qwen Code API integration section
* Revert README
* Fix protos order
* Revert change
* Remove validation for qwen code
---------
Co-authored-by: Ara <arafat.da.khan@gmail.com>
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* remove middle out for gpt5
* refactor: using standard family identifier functions
* fix: making sure to lowercase all model ids
* changeset
---------
Co-authored-by: pashpashpash <nik@nugbase.com>
* feat: sap provider - support reasoning effort for open ai models
* feat: sap provider - support reasoning effort for open ai models
* feat: sap provider - support reasoning effort for open ai models
* feat: sap provider - support reasoning effort for open ai models
* feat: sap provider - support reasoning effort for open ai models
* fix converse api image data to base64 string.
Signed-off-by: Lize Cai <lize.cai@sap.com>
* add test cases
Signed-off-by: Lize Cai <lize.cai@sap.com>
---------
Signed-off-by: Lize Cai <lize.cai@sap.com>
- Updated contextWindow for deepseek-chat and deepseek-reasoner models from 64_000 to 128_000
- Modified context-window-utils.ts to handle DeepSeek models with 128K context window instead of 64K
- This change aligns with DeepSeek's official API documentation and improves model performance
* changeset version bump
* Updating CHANGELOG.md format
* Update CHANGELOG.md for version 3.26.3 release
- Add user-friendly descriptions for compact system prompt feature
- Add proper version formatting with brackets
- Improve clarity of LM Studio and token usage tracking features
* package lock
* changelog
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: pashpashpash <nik@cline.bot>
* Build the extension on every commit push
* Publish using the vsix path
* Fix tag resolution
* Remove `while ;`
* Remove test trigger
* use while true;
* Update package.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Use high capacity runner
* add if check to only run in the Cline repo
* Conditionally select a runner
---------
Co-authored-by: Dennise Bartlett <bartlett.dc.1@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Add compact system prompt for local models
- Introduce compact system prompt for local models (lm studio, ollama)
- Add ApiProviderInfo { modelId, providerId } to API
- Persist promptType in global state and propagate to webview
(updateSettings, state keys/helpers, ExtensionMessage, UI context)
- Wire provider info through task pipeline to buildSystemPrompt
* isLocalModelFamily
* Add custom prompt support and LM Studio API improvements
* Enable token usage tracking in LM Studio stream responses
This change adds the stream_options parameter with include_usage: true to LM Studio API requests, allowing the system to receive token usage information along with streaming responses. This enables better tracking of token consumption for LM Studio model interactions.
* update compact system prompt
* feat: Support compact system prompt for LM studio models and token usage tracking
* clean up
* Update UI helper text
* fix: improve OpenRouter model info parsing
Refactor OpenRouter model fetching to include `OpenRouterRawModelInfo` and `OpenRouterSupportedParams` types for better clarity and type safety. This allows for more accurate parsing of model capabilities, including support for "thinking" (reasoning) configurations.
The thinking config is now only set if the model explicitly supports the `include_reasoning` parameter. Additionally, the budget slider in the UI is now displayed for OpenRouter models that support thinking, not just specific Claude models. This provides a more dynamic and accurate representation of model features.
* add changelog
* Set thinking budget for stream
* fix: add support to *.go files in deep-planning feature
* fix: add support to *.go files in deep-planning feature
* adding go to the todos section
---------
Co-authored-by: 0xtoshii <94262432+0xToshii@users.noreply.github.com>
* Change default strict plan mode setting to enabled
- Updated default from false to true in state-helpers.ts (primary backend default)
- Updated fallback default in controller/index.ts (Task initialization)
- Updated frontend default in ExtensionStateContext.tsx for consistency
- Fixed linting issue with forEach callback return value
- New users will now have strict plan mode enabled by default
- Prevents file edits in Plan Mode, enforcing cleaner separation of planning vs execution
* added changeset
---------
Co-authored-by: pashpashpash <nik@cline.bot>
* truncate first user message
* base swapping
* linting
* menu
* apply biome fixes and add back in removed comments
* undo biome invalid changes
* updating feature section comment
* button to enable auto compact just for next gen models
* fix
* fix default model id
* fix tests
* Add changeset for fireworks provider fix
* add docs for fireworks provider
* add empty line to doc
* format
* fix model selector
* remove unnecessary
* fix test
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
* feat: sap provider - show deployed models from the ai core service instance alongside sap provider's supported models in cline
Keep previous clineMessages if the incoming state targets the same currentTaskItem and has no messages, preventing message loss on state sync/refresh while still accepting new messages when present.
* feat(telemetry): Add MCP tool usage tracking
This commit introduces telemetry for MCP tool calls to monitor usage, success rates, and errors.
- Adds a new telemetry event 'task.mcp_tool_called'.
- Captures the server name, tool name, and status (started, success, error).
- Integrates telemetry calls into the McpHub to track tool execution lifecycle.
* chore: Add changeset for MCP telemetry
* refactor(telemetry): Clean up MCP tool usage tracking
This commit refactors the MCP tool usage tracking to be cleaner and more efficient.
- Removes null checks for 'ulid' in the 'callTool' method.
- Passes argument keys to the telemetry service for better monitoring without compromising user privacy.
* feat(telemetry): Add rules and workflow usage tracking
This commit implements telemetry tracking for Cline rules and workflow interactions to understand user engagement patterns:
- Add captureSlashCommandUsed() method to track slash command and workflow activations
- Add captureClineRuleToggled() method to track rule toggle events
- Update parseSlashCommands() to require ULID parameter and track command usage
- Add telemetry calls to toggleClineRule() with proper path sanitization
- Distinguish between builtin commands and workflow types
- Include task ULID context for tracking rule changes within tasks
- Sanitize file paths to include only filenames for privacy protection
* chore: Add changeset for rules and workflow telemetry
* Update src/core/controller/file/toggleClineRule.ts
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
* Apply suggestion from @Copilot
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fixed import lol
* added more consistent event name to match the events type
---------
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
The context window is now being set to `Number.MAX_SAFE_INTEGER` to represent infinity. https://github.com/cline/cline/blob/01c4ead15548c906cc690ef030ee447720ccb5b0/src/shared/api.ts#L219-L220
However, this is larger than the max value of int32 and cannot be serialized over the ProtoBus. Update the max token and context window sizes to be int64.
```2025-08-14 18:28:36,492 [ 4334] WARN - bot.cline.services.ProtoBusProxyService - Stream cline.ModelsService.subscribeToOpenRouterModels encountered error
io.grpc.StatusException: INTERNAL: invalid int32: 9007199254740991
at io.grpc.Status.asException(Status.java:548)
at io.grpc.kotlin.ClientCalls$rpcImpl$1$1$1.onClose(ClientCalls.kt:300)
at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:564)
at io.grpc.internal.ClientCallImpl.access$100(ClientCallImpl.java:72)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:729)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:710)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
```
When the user clicks on a directory file mention, it should open that directory in the explorer panel in the IDE. Add an RPC for this to the host bridge.
I had to change the logic to check if the mention is a directory or not because the current check was not working properly anymore. So, just file.stat to check if its a directory instead of checking if the path ends in /.
* changeset version bump
* Updating CHANGELOG.md format
* Update CHANGELOG.md and announcement for version 3.26.0
- Add user-friendly descriptions for Z AI provider, Cline Sonic Alpha model, LM Studio improvements, and Ollama fixes
- Include attribution for external contributor @jues
- Update announcement component with new 3.26 features
- Move previous 3.25 features to Previous Updates section
* announcement
* announcement
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: pashpashpash <nik@cline.bot>
* microwave alpha stealth model
* microwave alpha stealth model
* swapped name to sonic
* pricing set to zero
* added case for sonic model to set temperature settings
* bumping max tokens to 16k for sonic
* sonic model does not have image support
---------
Co-authored-by: abeatrix <beatrix@cline.bot>
Add an RPC that returns details about the currently active editor. Right now it just returns the file path.
Update the place where this is used.
Remove commented out code that references `vscode.window.activeTextEditor`.
* Remove unused files
I used knip to find unused code- these files are not referenced anywhere in the codebase.
Dead code is a maintence burden, I am removing this unused code.
* Add knip config file
Add knip file with entry points for the extension, cline-core and the ProtoBus and HostBridge services.
Exclude test files, etc.
Exclude the `src/shared` directory because knip can't analyze the webview-ui react app properly.
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Formatting
* Get the extension version from the ExtensionContext
The extension packageJson is available from the ExtensionContext, don't need to do `vscode.extensions.getExtension`.
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Enable biome rules: noUnusedVariables, noUnusedFunctionParameters, noUnusedImports
* Apply new rules with format
* remove unused currentReplaceContent
* update nextTerminalId
* fix all format issues
* update biome config
* add back applyContextOptimizations and killAllChromeBrowsers
- Added --write flag to biome format command in postprotos script
- This automatically fixes formatting issues instead of just reporting them
- Prevents build failures due to quote style and other formatting inconsistencies
* Support LM Studio local models with max tokens set
Add configurable max tokens parameter for LM Studio provider across proto definitions, API handlers, storage, and UI components. Improved error handling for model fetching to use v0 api.
* changeset added
* clean up
* update
* Use loaded context length for LM Studio model configuration
- Add loaded_context_length field to LMStudioApiModel interface
- Prioritize loaded_context_length over max_context_length in UI
- Update context window display to show actual loaded context
- Refactor model selection logic and endpoint memoization
- Auto-update max tokens when loaded context differs from config
* Add DropdownContainer
* fix: request_id extraction in ClineError handling
Add back the removed fallback chain to extract request_id from multiple possible locations
in error objects, checking error.request_id and error.response.request_id
before falling back to the existing header extraction method.
* fix: override initial error struct with real request_id instead of overriding request_id with undefined
---------
Co-authored-by: Auroter <seangherardi@gmail.com>
* Add support for Z AI GLM-4.5 and GLM-4.5 air
* Add changeset for Z AI provider
* add entrypoints for Z AI provider, add cacheReadsPrice and cacheWritesPrice
* fix old naming convention
* fix value in proto
* fix proto conversion and secret persistence
* Fix GitHub Actions errors: Add zaiApiKey and zaiApiLine to state-helpers.ts and remove unused state.ts
- Added missing zaiApiKey to readStateFromDisk, resetGlobalState functions and apiConfiguration object
- Added missing zaiApiLine to readStateFromDisk and apiConfiguration object
- Removed unused state.ts file that was causing ESLint errors with direct VS Code API calls
- All type definitions for zaiApiKey and zaiApiLine were already present in state-keys.ts
- This resolves the TypeScript errors in GitHub Actions for CacheService.ts
---------
Co-authored-by: wangshan <shan.wang@aminer.cn>
Co-authored-by: Ara <arafat.da.khan@gmail.com>
* Migrate to Biome for linting/formatting and simplify hooks
- Add biome.jsonc and @biomejs CLI; configure VS Code to use Biome for format/fix and imports
- Replace verbose Husky pre-commit with lint-staged runner
- Remove ESLint setup and custom rule package (no-direct-vscode-api) and its tests
- Update package.json/package-lock and webview-ui package to reflect tooling change
- Add VS Code host typings and grit definitions under src/hosts
Rationale: unify lint/format tooling, speed up pre-commit checks, and reduce maintenance overhead from custom ESLint rules.
* remove eslint dependencies
* preserve eslint rules
* clean up
* update files list
* add docs
* fix build
* clean up
* update VSCode API usage detection in Grit rule
This commit updates the Grit rule for detecting VSCode API usage:
- Narrow down the list of monitored VSCode API methods
- Add more specific diagnostic messages for direct API usage
- Introduce a new check for `workspaceFolders` property
- Exclude `src/extension.ts` from the Grit rule in Biome configuration
The changes aim to improve code abstraction and provide clearer guidance for replacing direct VSCode API calls.
* adds new cacheService rule
* add back pre-commit
* Remove ESLint custom rule and update linting references
Remove custom ESLint rule for VSCode state API enforcement along with its tests, remove ESLint extension recommendation, and update documentation to use generic "linter" terminology instead of ESLint-specific references.
* update vscode.d.ts for IntelliSense
* remove format on save
* clean up default values
* update to 2.1.4
* buf lint
* format
* Switch the DiffViewProvider to use the util `openFile`
This part of the work to migrate the vscode API calls `vscode.window.tabGroups.close`,
`vscode.window.tabGroups.all` and `vscode.window.activeTextEditor` to the host bridge.
`openFile` contains logic that uses these APIs to avoid re-avoiding tabs in the IDE. The end goal
is to move all this logic into `vscode/hostbridge/showTextDocument.ts`.
I am going to switch all the places that use `showTextDocument` over to use `openFile`.
Once everywhere that was using `showTextDocument` has been switched, and is verified to
work the same as before I will move the tab logic in `vscode/hostbridge/showTextDocument.ts`.
* Update src/integrations/editor/DiffViewProvider.ts
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Switch export-markdown to use the util `openFile`.
* Apply suggestion from @ellipsis-dev[bot]
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Move tab logic into vscode/showTextDocument
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
- Extract getPackageDefinition() from loadProtoDescriptorSet() in proto-utils
- Add int64 encoding option to handle numbers properly
- Create test-hostbridge-server.ts with mock gRPC service implementations
- Add -h flag to runclinecore.sh to start test server
- Include testing.md documentation for cline rules
* adding option to have custom requesty base url
fix
changeset
* finish state changes
* cleanup
---------
Co-authored-by: John Costa <john@requesty.ai>
* feat: Use hostbridge machine ID for posthog distinctId across hosts; VS Code only settings link in warning,, generic warning on other hosts.
* fix: block cline-core until hostbridge health is SERVING; exit on failure; initialize telemetry PostHog with hostbridge machineId;
* fix: posthog prefer host-provided UUID when running via HostBridge; fall back to VS Code's machineId, then a random UUID
* fix: add logging to waitForHostBridgeReady
* fix: log error in initialize
* Allow hosts to trigger the 'Add to Cline' action
Other platforms need a way to trigger the context menu actions and commands that are available currently in Vscode.
Add a service to the ProtoBus for this called `CommandService`, currently it just has the 'Add to Cline' action.
IDEs that are running cline with cline-core can trigger these actions and commands over gRPC.
Move the code for handling the 'Add to Cline' out of extension.ts into
`src/controller/commands/addToCline.ts`. This same handler will be used for the RPC.
Switch the handler over to use the proto Diagnostics types as it is host-agnostic.
* Fix getDiagnostics.test.ts on windows.
Use `toPosix()` on the fspath.
* Update src/extension.ts
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>
These utils will be to build the 'Add to Cline' context menu action for external hosts. The context menu action only deals with diagnostics for a single file, so the current utils need to be adapted.
Export util functions for converting vscode diagnostics to Host Bridge diagnostics.
Export a util for converting diagnostics for a single file from `diagnostics/index.ts`.
* Close page to stop e2e test on teardown
* Configure Playwright to retain videos on failure and simplify teardown
- Enable video recording that only saves on test failures
- Remove complex cleanup logic from global teardown
- Streamline server shutdown to not block teardown process
* change build.js to build.mjs which fixes ES module load error
* speed up
---------
Co-authored-by: Brian Pierce <brian@cline.bot>
* base
* working state reduction & summarization flow wo duplicate calls
* stop injecting into user message
* focus on latest message
* edge case for cancelled stream post summarization tool call
* fix merge
* Add 1m context window model variant for claude sonnet 4
* Fix cost calculation for 1m tier
* Add new 1m context window announcement
* Create beige-bobcats-watch.md
* Add bedrock support for 1m context
`cline-core` cannot depend on its environment being set up properly
by its parent process. Run the terminal commands in a login shell so
that the PATH etc. will be setup correctly.
* Change the host bridge RPC closeDiff to closeAllDiffs
In the vscode diff view provider when the diff is closed, it
closes _all_ open diff views.
I thought in the HostBridge, we would just only be closing the
current diff, but we do need to close all the open diff view
because there can be checkpoint diffs open as well.
* Update proto/host/diff.proto
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Update src/integrations/editor/DiffViewProvider.ts
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>
* Move the logic for showing the multi-file diffs out of the Task class which >2000 lines long.
Split the logic up into functions, add tests.
Use try/finally to ensure that `sendRelinquishControlEvent` is always sent when the function returns.
* Fix warning about use of !!
* Fix tests
Remove asserts on console logs because they are not able to be stubbed properly.
Move test file to correct directory.
* Formatting
* fix: request_id was being incorrectly extracted from the API response -- it can always be found in the response header under X-Request-ID
* fix: leave error alone, no need to re-create it
* Update src/services/error/ClineError.ts
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
---------
Co-authored-by: Bee <68532117+abeatrix@users.noreply.github.com>
* Add VSCode theme colors to Tailwind config
- Add comprehensive VSCode theme color palette to Tailwind config
- Replace hardcoded VSCode CSS variables with Tailwind utility classes for HomeHeader
- Update button and text styling to use new theme-aware classes
* format
Guard ActionButtons when no task; fix scroll deps/empty state
- Return null from ActionButtons if no task to avoid rendering controls without context
- Add missing setExpandedRows dependency and remove unnecessary deps to prevent stale closures and re-renders
- Hide “scroll to bottom” button when there are no messages
- Clean up unused index-tracking logic in scrollToMessage
Add an RPC to the Host Bridge to open a diff for multiple files, this is
used when comparing check points or to display the changes cline has made
when it is finished editing.
Switch the file mentions unit test to an integration test because
now it is pulling vscode dependencies and they cannot be mocked
in the unit tests.
* Refactor action buttons: centralize state, remove useButtonState
- Replace useButtonState hook with centralized ButtonConfig logic in ActionButtons, mapping task/ask/tool states to button enablement and labels
- Update ActionButtons API to accept task, messages, mode; compute streaming/enablement internally; remove isStreaming prop
- Always render ActionButtons from ChatView; adjust props accordingly
- Update useIsStreaming call to pass task instead of enableButtons/primaryText
- Clean up useMessageHandlers to reset UI state consistently (input, quotes, files, images, autoscroll)
- Remove deprecated hook and align types
Why: unify and simplify button behavior across task lifecycle, reduce duplicated state/props, and make streaming/approval flows more predictable.
* clean up
* Refactor input clearing and streaming detection logic
This commit:
- Separates input clearing logic into a separate useEffect in ActionButtons
- Removes StreamingIndicator component and its useIsStreaming hook
* Revert newly added button states
Remove switch_to_act_mode button config and associated plan mode conditionals in getButtonConfig function, will do any UI change in follow-up
* simplify further
* Add test suite for button configuration logic
This commit introduces a new test file for the `buttonConfig` module, covering various scenarios such as:
- Default button configurations
- Streaming and partial message handling
- Error recovery states
- Tool approval states
- Command execution states
- Specific ask state configurations
- API request state testing
The tests ensure robust button configuration selection based on different message types and states.
* update button styles
* move rest of state to cacheService
* finish moving state to cache
* remove console logs
* fix types
* don't type cast
* add eslint rule banning use of direct storage apis
* fix types
* move vscode state eslint rule to separate rule since it's error and the others aren't
* fix eslint rules parsing
The diff view is supposed to return any new errors or warnings after the
file is edited. The ExternalDiffViewProvider was just returning *all*
the errors.
When the DiffViewProvider is being reset, reset *all* the properties.
Add unit tests for diagnostics functionality
Refactoring:
- Move diagnostics into the parent DiffViewProvider, remove duplicate implementations in VscodeDiffViewProvider and ExternalDiffViewProvider
- Move duplicated code for converting FileDiagnostics to string to `diagnosticsToProblemsString`.
- Use a single implementation of `getDiagnostics` and `diagnosticsToProblemsString` using the HostBridge protos.
* remove workspace tracker
* remove console log
* fix search when clicking folder option
* create enum for searchType
* use hostbridge for active files
* use util function for relative path
* Fix into interests error where false security warning is being triggered
* Don't use activate() in cline-core
Have separate code paths to set up the extension and cline-core.
This means the cline-core is not running all the vscode setup and is
only using one `Controller` (the one from the WebviewProvider).
Move the shared logic into common.ts.
* Comments and logging
* fix: mode switch styling
Replace the use of `--vscode-toolbar-hoverBackground` which is a `-hoverBackground` that tends to be transperant or opacity change on some themes. Replace it with `-background` which uses solid color instead. See https://code.visualstudio.com/api/references/theme-color
- Update Plan/Act mode switch colors var for better visibility across themes
- Remove hover effects from switch options
- Add background classes to active switch options
* changeset added
* add: caching support for bedrock (claude)
* refactor: gemini message handling to adhere closer to original implementation (and make implicit caching clear)
* remove: unused bedrock conversion functions
* fix: payload for converse stream (older claude models)
remove: caching support flag for older claude models
* add: changeset
* Update package-lock.json
* fix: show credits purchase component when user runs out of credits and we receive 402 status from server
* revert unnecessary change
* Create many-adults-end.md
The ExternalWebviewProvider has to return /something/ for `getWebview()` or
the rest of the code thinks that is not set up and it won't generate the HTML
for IntelliJ.
The Vscode webview panel, `resolveWebview()` and other Vscode specific parts are
planned to be moved out of the WebviewProvider and into VscodeWebviewProvider,
but that depends other changes to how the webview is initialized in extension.ts
to need to happen first.
Move the WebviewProvider out of index.ts and into a file name `WebviewProvider`,
this follows best practises.
* feat: add client-specific targeting for addToInput events
- Add client-specific targeting for addToInput events
- Update subscribeToAddToInput to accept client ID parameter
- Replace global event broadcasting with targeted client messaging
- Remove automatic sidebar focus when adding code to chat
- Use last active webview instance for context menu actions
- Maintain backward compatibility with subscription management
* add changeset
* remove debug profiler
* e2e test
* add type
* Add e2e test
* update teardown
* preparing for gpt5 release
* Update generic system prompt with needs_more_exploration param for plan mode
* changeset
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* feat: migrate diff edit diagnostics to hostbridge; Migrate diagnostics functionality from direct VS Code API calls to the hostbridge layer to enable multi-host support (VS Code + IntelliJ).
* remove test logging
* refactor: migrate diagnostics to workspace service and host separation
* Add walkthrough button and enable quick wins for new users
- Add openWalkthrough RPC method to ui.proto
- Enable quick wins display for users with <3 tasks in history
- Add "Take a Tour" button in HomeHeader when quick wins are shown
- Update WelcomeSection to pass shouldShowQuickWins prop to HomeHeader
* Adding Gpt-oss through groq
* Adding Gpt-oss through groq
* Support prompt caching and thinking for Opus 4.1
* Support prompt caching and thinking for Opus 4.1
* Support prompt caching and thinking for Opus 4.1
- Remove teardown dependency on e2e tests to fix execution order
- Move server cleanup before file operations in teardown
- Add proper error handling and logging for cleanup operations
There is one place in the McpHub that sends messages mcp notification messages directly to the webview (not using the ProtoBus).
There is nowhere in the webview that is listening for this message, so this code is not doing anything.
* kimi working
* fixed description rendering
* nit
* changeset
* revert openai version in package.json
* revert package-lock.json
* added space back in
* maintained previous protofield map order
* fixed import error due to location change from main
* updated Mode import for BasetenModelPicker
* revert readme since baseten is openai compatible
* refactored extensionStateContext
* added didOutputUsage flag
* fixed frontend loading
* no support for images on llama
* shifted VSCode Option order
* deleted typo
---------
Co-authored-by: Alex Ker <alexker@mac.mynetworksettings.com>
Co-authored-by: Alex Ker <alexker@Alexs-MacBook-Pro.local>
* Simplify the GrpcHandler
* Use two functions handleUnaryRequest and handleStreamingRequest, instead of creating a GrpcHandler object and calling class methods on it.
* Remove redundant try/catch and empty finally blocks. Each of the two handler functions has it's own try/catch.
* Each of the two functions is responsible for posting the result to the webview- Instead of unary and streaming responses being handled at different levels.
* Use the GrpcRequest and GrpcCancel types.
* Update comment
* fix: clear streamingFailedMessage when user manually retries
- Clear streamingFailedMessage when user manually retries
- Convert imports to type-only where appropriate
- Reorder imports for better organization
- Add explicit type annotations for better type safety
- Move node:timers/promises import to top
* add changeset
* merge main and reset fail flag
* revert autoformat
**Centralize callback URI management** through the HostProvider instead of having it in multiple places in the codebase.
**Simplify error handling** by making the callback URI required rather than optional
The changes are related to **authentication callback URI handling** in the Cline extension. Here's what's being modified:
- Simplified callback URI retrieval
- Changed return type from `Promise<string | undefined>` to `Promise<string>`
- Now throws an error if AuthHandler is not enabled instead of returning undefined
- Added a new `getCallbackUri` property that returns a `Promise<string>`
- This allows the host provider to supply callback URIs for authentication
- Implemented callback URI provider
- Updated to use HostProvider for callback URI
- Updated to match new signature
* feat: support file mentions with spaces using quoted syntax
This change allows users to reference files with spaces in their names, which was previously impossible due to the space-delimited mention syntax.
File names with spaces can be @ mentioned by quoting the file name, e.g. @"/path with spaces/file.txt".
- Update mention regex in `src/shared/context-mentions.ts` to accept quoted file paths
- Add support for quoted file paths that can contain spaces.
- Allow multiple trailing punctuation chars; previously only a single limited punctuation characters were allowed.
- Maintain support for unquoted paths, URLs, git hashes, and special keywords
- Update `src/core/mentions/index.ts` to handle quoted file names in mention parsing
- Process quoted file paths by removing quotes when accessing the file system
- Preserve existing functionality for all other mention types
- Update `webview-ui/src/utils/context-mentions.ts` to auto-quote file names with spaces
- `insertMention()` and `insertMentionDirectly()` now wrap file paths containing spaces in quotes
- Non-file mentions (URLs, keywords) remain unquoted
- Add comprehensive unit tests:
- New test file `src/core/mentions/__tests__/index.test.ts` covering all mention types
- New test file `webview-ui/src/utils/__tests__/context-mentions.test.ts` for webview mention insertion
- Expanded `src/shared/__tests__/context-mentions.test.ts` to cover quoted paths and edge cases
* Use const instead of var
- Replace fixed 100ms timeout with pWaitFor polling mechanism
- Set 2-second timeout with 50ms polling interval
- Test now waits exactly as long as needed for tabs to be created
* Move remaining uses of vscode.window.show*Message to the HostBridge
Switch over the remaining uses.
Turn on the linter check to prevent these APIs being reintroduced later.
Exclude test files from the linter check.
* Update unit test
- Replace database icon with MCP server icon (codicon-server)
- Remove shadow-sm class for a flatter appearance
- Maintain consistent button styling with VSCodeButton components
- Add tooltips using HeroTooltip
* Fix errors in tests:
```
[TerminalProcess] Terminal ID: Cline
Error capturing terminal output: Error: Failed to read from clipboard: HostProvider not setup. Call HostProvider.initialize() first.
at readTextFromClipboard (/Users/sjf/cline/out/src/utils/env.js:39:15)
at getLatestTerminalOutput (/Users/sjf/cline/out/src/integrations/terminal/get-latest-output.js:35:69)
at TerminalProcess.emitCurrentTerminalContents (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:26:92)
at TerminalProcess.runWithoutShellIntegration (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:366:20)
at async TerminalProcess.run (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:47:13)
✔ should execute a command that lists files
[TerminalProcess] Starting command: "sleep 0.5 && echo 'Done sleeping'"
[TerminalProcess] Shell integration available: false
[TerminalProcess] Terminal ID: Cline
Error capturing terminal output: Error: Failed to read from clipboard: HostProvider not setup. Call HostProvider.initialize() first.
at readTextFromClipboard (/Users/sjf/cline/out/src/utils/env.js:39:15)
at getLatestTerminalOutput (/Users/sjf/cline/out/src/integrations/terminal/get-latest-output.js:35:69)
at TerminalProcess.emitCurrentTerminalContents (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:26:92)
at TerminalProcess.runWithoutShellIntegration (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:366:20)
at async TerminalProcess.run (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:47:13)
at async Context.<anonymous> (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.test.js:119:13)
FakeTimers: clearTimeout was invoked to clear a native timer instead of one created by this library.
To automatically clean-up native timers, use `shouldClearNativeTimers`.
✔ should handle a longer running command (3007ms)
[TerminalProcess] Starting command: "echo 'Line 1' 'Line 2'"
[TerminalProcess] Shell integration available: false
[TerminalProcess] Terminal ID: Cline
Error capturing terminal output: Error: Failed to read from clipboard: HostProvider not setup. Call HostProvider.initialize() first.
at readTextFromClipboard (/Users/sjf/cline/out/src/utils/env.js:39:15)
at getLatestTerminalOutput (/Users/sjf/cline/out/src/integrations/terminal/get-latest-output.js:35:69)
at TerminalProcess.emitCurrentTerminalContents (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:26:92)
at TerminalProcess.runWithoutShellIntegration (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:366:20)
at async TerminalProcess.run (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:47:13)
✔ should execute a command with arguments
[TerminalProcess] Starting command: "echo "Line 1" && echo 'Line 2'"
[TerminalProcess] Shell integration available: false
[TerminalProcess] Terminal ID: Cline
Error capturing terminal output: Error: Failed to read from clipboard: HostProvider not setup. Call HostProvider.initialize() first.
at readTextFromClipboard (/Users/sjf/cline/out/src/utils/env.js:39:15)
at getLatestTerminalOutput (/Users/sjf/cline/out/src/integrations/terminal/get-latest-output.js:35:69)
at TerminalProcess.emitCurrentTerminalContents (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:26:92)
at TerminalProcess.runWithoutShellIntegration (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:366:20)
at async TerminalProcess.run (/Users/sjf/cline/out/src/integrations/terminal/TerminalProcess.js:47:13)
✔ should execute a command with quotes
```
* Create brown-papayas-protect.md
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* feat: use auth callback handling with custom AuthHandler
- Add AuthHandler class to manage OAuth flow with local HTTP server
- Move callback logic from extension.ts to SharingUriHandler, making that shared between the original and new authentication ways
- Enabling Custom HTTP for "core only" environments
- Async starting and stopping HTTP server
* test: Fix and re-enable unit tests
Re-enable unit tests in CI workflow that were previously disabled
The cline-api test requires VSCode SDK which cannot be easily mocked in unit tests,
so it has been moved to integration tests where the full VSCode environment is available.
The @google/genai module is ES6-only which causes issues when running integration tests
compiled to CommonJS. A mock implementation has been added and the module resolution
is intercepted in test-setup.js to use the mock instead.
The bedrock unit tests for getModelId() functionality are removed as they were failing
and fixing them is out of scope for this PR.
- Move cline-api.test.ts from exports to test directory as it depends on VSCode SDK
- Add gemini-mock.test.ts to mock @google/genai ES6 module for CommonJS compatibility
- Add module interception in test-setup.js to redirect @google/genai to mock
- Remove failing bedrock unit tests introduced in PR #4209 (out of scope)
* Update src/api/providers/__tests__/bedrock.test.ts
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Formatting
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* fix: E2E test stability by reordering sidebar and notification setup
- Extract editor menu locator to variable for better readability
- Move sidebar opening to page fixture to ensure it's available earlier
- Wait for chat input visibility before disabling notifications
- Prevents race conditions in test initialization
* fix
* remove chatSettings object
* use cache for apiCongfiguration state
* add state persistence debounced, batch state updates, make setters synchronous
* fix types after merge conflicts
* fix global state reset
* remove clearCache; make dispose function private; remove vscode api dependency; call reInitialize in reset functions instead of dispose/initialize
When the webview is built wuth build:test:
* don't compact the compiled code
* don't minify
* use inline source maps (the embedded JCEF browser can't load source maps from .map files).
* fix: use Uri.from to generate valid diff URI
* fix the conflicts for VscodeDiffViewProvider.ts has been moved
---------
Co-authored-by: wangyj20 <wangyj20@asiainfo.com>
* refactor: e2e test setup to use Playwright projects with global server
- Replace globalSetup/globalTeardown with Playwright projects configuration
- Rename setup.ts to global.setup.ts and teardown.ts to global.teardown.ts
- Convert ClineApiServerMock to use shared global server instance
- Add proper dependency management between setup, tests, and cleanup phases
- Improve server connection tracking and cleanup handling
* Rename Playwright test project names to match
* IS_DEV
* update helpers
- Rename isGitHubAction to isCI for broader CI detection
- Adjust timeout logic to use CI or Windows conditions
- Reduce expect timeout from 40s/20s to 5s/2s for faster feedback
- Decrease streaming chunk delay from 50ms to 20ms in server mock
* Add mock api service and E2E test infrastructure
- Create AuthServiceMock for testing with mock user data and API responses
- Add AuthProvider interface to standardize authentication providers
- Implement E2E test fixtures with mock server and workspace setup
- Add comprehensive E2E tests for authentication and core functionality
- Export DEFAULT_CLINE_APP_URL config and make getEnvironmentConfig more flexible
- Update AuthService to use mock implementation during E2E tests
* format
* import
* refactor mock server
* rename data
* wait for text
* wait for edit
* increase timeout for windows
* clean up
* rename test and add orgs
* Move the OutputChannel to the HostProvider
Replace `OutputChannel.appendLine` with `HostProvider.logToChannel`.
Remove places where the cline OutputChannel was being passed around. Now it is stored in the HostProvider, so we don't need to do this.
# Conflicts:
# src/hosts/vscode/VscodeWebviewProvider.ts
* Dont log the timestamp in logger.ts, the cline-core logger already outputs the timestamp
* Fix imports
* Add Huawei Cloud MaaS Provider
* Fix case error
* Add missing modelid
* add huawei specific modelId and modelInfo
* add huawei specific model id and model info in state.proto
* more huawei maas specific change
* refactor & fix: improve account view with better states management
The previous AccountView implementation suffered from several critical state management issues:
- Incorrect info on display: The active account is not ready when component is mounted because the fetching only start on mount but doesn't get reset correctly
- Excessive re-renders: All data was fetched on component mount, causing cascading state updates
- Race conditions: Multiple concurrent API calls and state dependencies created unpredictable behavior, e.g. 403 rate limits errors
- Monolithic state management: All account data, organizations, and auth state was managed in a single massive component
- Poor user experience: Users saw empty states and loading flickers when switching between organizations
- Tight coupling: User and org info logic was deeply embedded within the account view that cause Effect dependency loops
Solution: Centralized Authentication Context
- Extracted auth logic into dedicated ClineAuthContext with organizations state management
- Eliminated prop drilling by providing clineUser, organizations, and activeOrganization at the context level
- Reduced component re-renders by managing auth state separately from UI state
- Performed authentication guard at higher level and only displays user account to authenticated user. The component will get dismounted when user is not autheticated.
- Move handleSignIn and handleSignout into individual functions instead as they are regular functions with no state dependency
* 60secs
* Optimize state updates in AccountView to prevent unnecessary re-renders
Remove conditional checks before setState calls and use functional updates
with deep equality comparison to avoid redundant state changes and
dependency array bloat in useCallback hooks.
* add docs
* fix format
* fix error test
* setuser on logout
* Fix styled-components prop warnings
- Fix styled-components shouldForwardProp warnings by filtering non-DOM props
- Clean up unused imports in ChatTextArea and other components
* use mjs
* later
* remove unused imports
* Fix: webview panel state change steals focus
Fix webview visibility detection to check both visible and active states before taking focus. If a panel is visible but not active (focused), it should not steals editor focus.
Also removes unused import & add type imports
* add changeset
* Improve token counting for Claude models in VSCode LM provider
- Reorder imports for better organization
- Add extractTextFromMessage helper method
- Add isClaudeModel detection method
- Use 4:1 character-to-token ratio for Claude models instead of VSCode's inaccurate counting
- Fallback to existing VSCode LM token counting for non-Claude models
* Update version to 3.18.3-r1 and refactor token calculation in VsCodeLmHandler
* 3.19.5-r1
* Add smart jobs impress changeset for VSCode LM API token counting fix
---------
Co-authored-by: Jonathan Barazany <jbarazany@microsoft.com>
* Add a check to the proto scripts to warn about using int64 types.
Javascript cannot represent the full range of int64. So, when the protos are deserialized from JSON int64's are converted to strings. The typescript code is expecting a number and not a string, and this causes errors.
This was noticed before now because in the vscode protobus and hostbridge, the proto messages are not serialized and deserialized, they are just passed around as JS objects.
However, in IntelliJ the protos are serialized when they are sent through the ProtoBus. When the response messages contains and int64, it is deserialized to a string instead of a number for safety. This is causes parts of Cline to fail in IntelliJ, e.g. the task history view won't load because `Task.getTotalTasksSize()` returns a string when it is expecting a number.
* Make checkProtos shorter
* Update scripts/build-proto.mjs
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Update scripts/build-proto.mjs
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Update scripts/build-proto.mjs
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Fix typo
* Fix typo
* Fix bad merge
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* feat: add openFile host bridge for vscode.open command
* fix: simplify openFile hostbridge to follow gRPC best practices:
- Remove success boolean field from OpenFileResponse proto
- Use gRPC exceptions for error handling instead of success/failure booleans
- Simplify hostbridge implementation to just move existing vscode.open code
* fix: remove create wrapper from openFile call
* fix proto merge conflict
* Use npm `open` to open URLs in the external browser
# Conflicts:
# src/utils/env.ts
# Conflicts:
# src/utils/env.ts
* Change log statement
* Use the simple-open-url module to open URLs in the system browser.
Log failures of ProtoBus RPCs
* Remove vscode hostbridge handler for openExternal
* Rm unused imports
* Switch back to `open` module.
Update esbuild.js to ES6 and move to esbuild.mjs
* Update src/utils/env.ts
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* remove IS_DEV from e2e setup build
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: abeatrix <beatrix@cline.bot>
* Reorganized proto directory structure to match package naming convention
Moved cline package protos from the proto directory to proto/cline/ directory
Host package protos remain in proto/host/ directory
Updated all import statements across codebase to reflect new proto paths
Removed proto linter exception for package/directory mismatch rule
Fix Vscode proto indexing errors by setting the proto path in the Vscode settings.
* Update imports to use new package
Update imports from @shared/proto/<thing> to @share/proto/cline/<thing>
* Fix Qwen API option inconsistency
Refactor Qwen API region handling with enum and improved type safety
Changes:
- Replace string literals with QwenApiRegions enum for better type safety
- Add default region initialization in QwenHandler constructor
- Extract useChinaApi() method for cleaner conditional logic
- Update UI dropdown to use enum values with proper memoization
- Improve code maintainability and reduce magic strings
* changeset added
* Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix type with conversion
* Refactor Qwen model defaults to use first model dynamically
Move type definitions and enums after model objects and set default
models by selecting the first key from each model object instead of
hardcoding specific model IDs.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fix organization state reset when switching between accounts
Move user authentication check into getUserOrganizations callback to properly reset state when switching between personal and organization accounts. This prevents stale organization data from persisting across account switches.
* add changeset
* Add error handling and refactor credit display components
Fix issues with balance display out of sync on org change or when API calls received 405 (rate limited) error
- Add error handling for failed API calls in getUserCredits and getOrganizationCredits
- Extract animated credit display logic into reusable StyledCreditDisplay component
- Simplify AccountView by removing inline credit animation code
- Improve organization state management and loading behavior
* Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* format
* reset on mount
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fix for files being deleted when switching modes or closing tasks
* changeset
* Added check to see if we are waiting for API response
* More targetted fix
* Create hot-onions-promise.md
* Delete .changeset/hot-onions-promise.md
---------
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
- Fix AccountView state management when user is not authenticated or is authenticated after the webview is loaded
- Add proper loading state reset and conditional data fetching
* Display credit balance for all accounts
The credit balance display was previously only shown for personal accounts. This change removes the check for `activeOrganization === null` and displays the credit balance and "Add Credits" button for all account types, including organization accounts. A divider is added above the balance section for visual separation once the backend change is deployed.
* changeset
* Improve refresh logic
Refactors the `AccountView` component to properly display and manage credits for both user and organization accounts. It introduces the `getOrganizationCredits` API call to fetch organization-specific credits and updates the UI accordingly. The refresh logic has also been improved to ensure data consistency and prevent unnecessary API calls.
Key changes:
- Implemented `getOrganizationCredits` to fetch credits for the active organization.
- Modified the credit display to show organization credits when an organization is active.
- Updated the refresh logic to use `useCallback` and `debounce` for better performance and to prevent race conditions.
- Added a periodic refresh to update account data every 30 seconds.
- Improved error handling and loading state management.
- Removed the interval ref and replaced it with a simpler useEffect for periodic refresh.
- Added last fetch time to the UI.
* clean up
* deepEqual
* org management
* prevent race condition
* Remove compiled files that were committed by mistake
* Don't JSON encode the grpc message request.
The original grpc-client-base.ts encoded the request message using
```
function encodeRequest(request: any): any {
if (request === null || request === undefined) {
return {}
} else if (typeof request.toJSON === "function") {
return request.toJSON()
} else if (typeof request === "object") {
return { ...request }
} else {
return { value: request }
}
```
But the request object don't have a .toJSON method, so it was not actually converting them
to JSON properly.
Don't JSON encode request to keeo the same behaviour as before.
* Update gitignore
* fix: Generate type-safe code for the Vscode Protobus service
This commit establishes a fully type-safe ProtoBus system by fixing the streaming
response handler type definitions and completing the protobuf-driven architecture.
Key improvements:
• **Complete type safety**: ProtoBus is now completely type-safe with compile-time
validation of all gRPC service definitions, request/response types, and handler
signatures
• **Simplified message creation**: No longer need to manually call `Message.create({...})`
- the generated code handles message instantiation automatically
• **Automated proto parsing**: Eliminated manual parsing of proto files - the build
system now automatically generates TypeScript definitions from protobuf schemas
• **Proto files as source of truth**: Service names, method names, and message types
are now definitively controlled by the proto files, ensuring consistency across
the entire codebase
• **Handler type checking**: ProtoBus handlers are fully type-checked including:
- Request and response type validation
- Handler method name verification against proto definitions
- Streaming vs unary handler signature enforcement
This establishes a robust, type-safe foundation for all gRPC communication between
the extension host and webview components.
* Remove commented out code in script
* Just call handlers directly
description: Simplify and refine code for clarity, consistency, and maintainability while preserving all functionality. Focuses on recently modified code unless instructed otherwise.
---
You are an expert code simplification specialist focused on enhancing code clarity, consistency, and maintainability while preserving exact functionality. Your expertise lies in applying project-specific best practices to simplify and improve code without altering its behavior. You prioritize readable, explicit code over overly compact solutions. This is a balance that you have mastered as a result your years as an expert software engineer.
You will analyze recently modified code and apply refinements that:
1.**Preserve Functionality**: Never change what the code does - only how it does it. All original features, outputs, and behaviors must remain intact.
2.**Apply Project Standards**: Follow the established coding standards from the project's configuration files (e.g., `.clinerules/`, `.editorconfig`, linter configs, README, CONTRIBUTING) including patterns like:
- Consistent import/include ordering and organization
- Idiomatic function and method declaration style for the language
- Explicit type annotations where the language supports them
5.**Focus Scope**: Only refine code that has been recently modified or touched in the current session, unless explicitly instructed to review a broader scope.
Your refinement process:
1. Identify the recently modified code sections
2. Analyze for opportunities to improve elegance and consistency
3. Apply project-specific best practices and coding standards
4. Ensure all functionality remains unchanged
5. Verify the refined code is simpler and more maintainable
6. Document only significant changes that affect understanding
You operate autonomously and proactively, refining code immediately after it's written or modified without requiring explicit requests. Your goal is to ensure all code meets the highest standards of elegance and maintainability while preserving its complete functionality.
description: Create a GitHub pull request following project conventions. Use when the user asks to create a PR, submit changes for review, or open a pull request. Handles commit analysis, branch management, and PR creation using the gh CLI tool.
---
# Create Pull Request
This skill guides you through creating a well-structured GitHub pull request that follows project conventions and best practices.
## Prerequisites Check
Before proceeding, verify the following:
### 1. Check if `gh` CLI is installed
```bash
gh --version
```
If not installed, inform the user:
> The GitHub CLI (`gh`) is required but not installed. Please install it:
> - macOS: `brew install gh`
> - Other: https://cli.github.com/
### 2. Check if authenticated with GitHub
```bash
gh auth status
```
If not authenticated, guide the user to run `gh auth login`.
### 3. Verify clean working directory
```bash
git status
```
If there are uncommitted changes, ask the user whether to:
- Commit them as part of this PR
- Stash them temporarily
- Discard them (with caution)
## Gather Context
### 1. Identify the current branch
```bash
git branch --show-current
```
Ensure you're not on `main` or `master`. If so, ask the user to create or switch to a feature branch.
### 2. Find the base branch
```bash
git remote show origin | grep "HEAD branch"
```
This is typically `main` or `master`.
### 3. Analyze recent commits relevant to this PR
```bash
git log origin/main..HEAD --oneline --no-decorate
```
Review these commits to understand:
- What changes are being introduced
- The scope of the PR (single feature/fix or multiple changes)
- Whether commits should be squashed or reorganized
### 4. Review the diff
```bash
git diff origin/main..HEAD --stat
```
This shows which files changed and helps identify the type of change.
## Information Gathering
Before creating the PR, you need the following information. Check if it can be inferred from:
- Commit messages
- Branch name (e.g., `fix/issue-123`, `feature/new-login`)
- Changed files and their content
If any critical information is missing, use `ask_followup_question` to ask the user:
### Required Information
1.**Related Issue Number**: Look for patterns like `#123`, `fixes #123`, or `closes #123` in commit messages
2.**Description**: What problem does this solve? Why were these changes made?
3.**Type of Change**: Bug fix, new feature, breaking change, refactor, cosmetic, documentation, or workflow
4.**Test Procedure**: How was this tested? What could break?
### Example clarifying question
If the issue number is not found:
> I couldn't find a related issue number in the commit messages or branch name. What GitHub issue does this PR address? (Enter the issue number, e.g., "123" or "N/A" for small fixes)
## Git Best Practices
Before creating the PR, consider these best practices:
### Commit Hygiene
1.**Atomic commits**: Each commit should represent a single logical change
2.**Clear commit messages**: Follow conventional commit format when possible
3.**No merge commits**: Prefer rebasing over merging to keep history clean
### Branch Management
1.**Rebase on latest main** (if needed):
```bash
git fetch origin
git rebase origin/main
```
2. **Squash if appropriate**: If there are many small "WIP" commits, consider interactive rebase:
```bash
git rebase -i origin/main
```
Only suggest this if commits appear messy and the user is comfortable with rebasing.
### Push Changes
Ensure all commits are pushed:
```bash
git push origin HEAD
```
If the branch was rebased, you may need:
```bash
git push origin HEAD --force-with-lease
```
## Create the Pull Request
**IMPORTANT**: Read and use the PR template at `.github/pull_request_template.md`. The PR body format must **strictly match** the template structure. Do not deviate from the template format.
When filling out the template:
- Replace `#XXXX` with the actual issue number, or keep as `#XXXX` if no issue exists (for small fixes)
- Fill in all sections with relevant information gathered from commits and context
- Mark the appropriate "Type of Change" checkbox(es)
- Complete the "Pre-flight Checklist" items that apply
### Create PR with gh CLI
```bash
gh pr create --title "PR_TITLE" --body "PR_BODY" --base main
```
Alternatively, create as draft if the user wants review before marking ready:
```bash
gh pr create --title "PR_TITLE" --body "PR_BODY" --base main --draft
```
## Post-Creation
After creating the PR:
1. **Display the PR URL** so the user can review it
2. **Remind about CI checks**: Tests and linting will run automatically
3. **Suggest next steps**:
- Add reviewers if needed: `gh pr edit --add-reviewer USERNAME`
- Add labels if needed: `gh pr edit --add-label "bug"`
## Error Handling
### Common Issues
1. **No commits ahead of main**: The branch has no changes to submit
- Ask if the user meant to work on a different branch
2. **Branch not pushed**: Remote doesn't have the branch
- Push the branch first: `git push -u origin HEAD`
3. **PR already exists**: A PR for this branch already exists
- Show the existing PR: `gh pr view`
- Ask if they want to update it instead
4. **Merge conflicts**: Branch conflicts with base
- Guide user through resolving conflicts or rebasing
## Summary Checklist
Before finalizing, ensure:
- [ ] `gh` CLI is installed and authenticated
- [ ] Working directory is clean
- [ ] All commits are pushed
- [ ] Branch is up-to-date with base branch
- [ ] Related issue number is identified, or placeholder is used
This file is the secret sauce for working effectively in this codebase. It captures tribal knowledge—the nuanced, non-obvious patterns that make the difference between a quick fix and hours of back-and-forth & human intervention.
**When to add to this file:**
- User had to intervene, correct, or hand-hold
- Multiple back-and-forth attempts were needed to get something working
- You discovered something that required reading many files to understand
- A change touched files you wouldn't have guessed
- Something worked differently than you expected
- User explicitly asks to "add this to CLAUDE.md"
**Proactively suggest additions** when any of the above happen—don't wait to be asked.
**What NOT to add:** Stuff you can figure out from reading a few files, obvious patterns, or standard practices. This file should be high-signal, not comprehensive.
## Miscellaneous
- This is a VS Code extension—check `package.json` for available scripts before trying to verify builds (e.g., `npm run compile`, not `npm run build`).
- When creating PRs, if the change is user-facing and significant enough to warrant a changelog entry, run `npm run changeset` and create a patch changeset. Never create minor or major version bumps. Skip changesets for trivial fixes, internal refactors, or minor UI tweaks that users wouldn't notice.
- When adding new feature flags, see this PR as a reference https://github.com/cline/cline/pull/7566
- Additional instructions about making requests: @.clinerules/network.md
## gRPC/Protobuf Communication
The extension and webview communicate via gRPC-like protocol over VS Code message passing.
**Proto files live in `proto/`** (e.g., `proto/cline/task.proto`, `proto/cline/ui.proto`)
- Each feature domain has its own `.proto` file
- For simple data, use shared types in `proto/cline/common.proto` (`StringRequest`, `Empty`, `Int64Request`)
- For complex data, define custom messages in the feature's `.proto` file
When adding a new provider (e.g., "openai-codex"), you must update the proto conversion layer in THREE places or the provider will silently reset to Anthropic:
1.`proto/cline/models.proto` - Add to the `ApiProvider` enum (e.g., `OPENAI_CODEX = 40;`)
2.`convertApiProviderToProto()` in `src/shared/proto-conversions/models/api-configuration-conversion.ts` - Add case mapping string to proto enum
3.`convertProtoToApiProvider()` in the same file - Add case mapping proto enum back to string
**Why this matters:** Without these, the provider string hits the `default` case and returns `ANTHROPIC`. The webview, provider list, and handler all work fine, but the state silently resets when it round-trips through proto serialization. No error is thrown.
**Other files to update when adding a provider:**
-`src/shared/api.ts` - Add to `ApiProvider` union type, define models
-`src/shared/providers/providers.json` - Add to provider list for dropdown
-`src/core/api/index.ts` - Register handler in `createHandlerForProvider()`
-`webview-ui/src/components/settings/utils/providerUtils.ts` - Add cases in `getModelsForProvider()` and `normalizeApiConfiguration()`
-`webview-ui/src/utils/validate.ts` - Add validation case
## Responses API Providers (OpenAI Codex, OpenAI Native)
Providers using OpenAI's Responses API require native tool calling. XML tools don't work with the Responses API.
**Symptoms of broken native tool calling:**
- Tools get called multiple times (e.g., `ask_followup_question` asks the same question twice)
- Tool arguments get duplicated or malformed
- The model responds but tools aren't recognized
**Root causes to check:**
1.**Provider missing from `isNextGenModelProvider()`** in `src/utils/model-utils.ts`. The native variant matchers (e.g., `native-gpt-5/config.ts`) call this function. If your provider isn't in the list, the matcher returns false and falls back to XML tools.
2.**Model missing `apiFormat: ApiFormat.OPENAI_RESPONSES`** in its model info (`src/shared/api.ts`). This property signals that the model requires native tool calling. The task runner in `src/core/task/index.ts` checks this and forces `enableNativeToolCalls: true` regardless of user settings.
**When adding a new Responses API provider:**
1. Add provider to `isNextGenModelProvider()` list in `src/utils/model-utils.ts`
2. Set `apiFormat: ApiFormat.OPENAI_RESPONSES` on all models that use the Responses API
3. The variant matcher and task runner will handle the rest automatically
## Adding Tools to System Prompt
This is tricky—multiple prompt variants and configs. **Always search for existing similar tools first and follow their pattern.** Look at the full chain from prompt definition → variant configs → handler → UI before implementing.
1.**Add to `ClineDefaultTool` enum** in `src/shared/tools.ts`
2.**Tool definition** in `src/core/prompts/system-prompt/tools/` (create file like `generate_explanation.ts`)
- Define variants for each `ModelFamily` (generic, next-gen, xs, etc.)
- **Fallback behavior**: If a variant isn't defined for a model family, `ClineToolSet.getToolByNameWithFallback()` automatically falls back to GENERIC. So you only need to export `[GENERIC]` unless the tool needs model-specific behavior.
3.**Register in `src/core/prompts/system-prompt/tools/init.ts`** - Import and spread into `allToolVariants`
4.**Add to variant configs** - Each model family has its own config in `src/core/prompts/system-prompt/variants/*/config.ts`. Add your tool's enum to the `.tools()` list:
**How overrides work:** Variants can override components via `componentOverrides` in their `config.ts`, or provide a custom template in `template.ts` (e.g., `next-gen/template.ts` exports `rules_template`). If no override, the shared component from `components/` is used.
**Example: Adding a rule to RULES section**
1. Check if variant overrides rules: look for `rules_template` in `variants/*/template.ts` or `componentOverrides.RULES` in `config.ts`
2. If shared: modify `components/rules.ts`
3. If overridden: modify that variant's template
4. XS variant is special—has heavily condensed inline content in `template.ts`
**After any changes, regenerate snapshots:**
```bash
UPDATE_SNAPSHOTS=true npm run test:unit
```
Snapshots live in `__tests__/__snapshots__/`. Tests validate across model families and context variations (browser, MCP, focus chain).
Adding a new key to global state requires updates in multiple places. Missing any step causes silent failures.
Required steps:
1. Type definition in `src/shared/storage/state-keys.ts` - Add to `GlobalState` or `Settings` interface
2. Read from globalState in `src/core/storage/utils/state-helpers.ts`:
- Add `const myKey = context.globalState.get<GlobalStateAndSettings["myKey"]>("myKey")` in `readGlobalStateFromDisk()`
- Add to the return object: `myKey: myKey ?? defaultValue,`
3. StateManager handles read/write via `setGlobalState()`/`getGlobalStateKey()` after initialization
Common mistake: Adding only the return value without the `context.globalState.get()` call. This compiles but the value is always `undefined` on load.
## StateManager Cache vs Direct globalState Access
StateManager uses an in-memory cache populated during `StateManager.initialize(context)` in `common.ts`. For most state, use `controller.stateManager.setGlobalState()`/`getGlobalStateKey()`.
Exception: State needed immediately at extension startup (before cache is ready)
When Window A sets state and immediately opens Window B, the new window's StateManager cache is populated from `context.globalState` during initialization. If you need to read state in Window B right at startup (e.g., in `common.ts` during `initialize()`), read directly from `context.globalState.get()` instead of StateManager's cache.
Example pattern (see `lastShownAnnouncementId` and `worktreeAutoOpenPath`):
This is only needed for cross-window state read during the brief startup window before StateManager cache is fully usable. Normal state access after initialization should use StateManager.
## ChatRow Cancelled/Interrupted States
When a ChatRow displays a loading/in-progress state (spinner), you must handle what happens when the task is cancelled. This is non-obvious because cancellation doesn't update the message content—you have to infer it from context.
**The pattern:**
1. A message has a `status` field (e.g., `"generating"`, `"complete"`, `"error"`) stored in `message.text` as JSON
2. When cancelled mid-operation, the status stays `"generating"` forever—no one updates it
3. To detect cancellation, check TWO conditions:
-`!isLast` — if this message is no longer the last message, something else happened after it (interrupted)
-`lastModifiedMessage?.ask === "resume_task" || "resume_completed_task"` — task was just cancelled and is waiting to resume
-`!isLast` catches: cancelled → resumed → did other stuff → this old message is stale
-`lastModifiedMessage?.ask === "resume_task"` catches: just cancelled, hasn't resumed yet, this message is still technically "last"
**See also:**`BrowserSessionRow.tsx` uses similar pattern with `isLastApiReqInterrupted` and `isLastMessageResume`.
**Backend side:** When streaming is cancelled, clean up properly (close tabs, clear comments, etc.) by checking `taskState.abort` after the streaming function returns.
"cancel":boolean,// Required: false to continue, true to block execution
"contextModification":"string",// Optional: Context for future AI decisions
"errorMessage":"string"// Optional: Error details if blocking
}
```
**Note**: The `cancel` field works as follows:
-`false` (or omitted): Allow execution to continue
-`true`: Block execution and show error message to user
## Hook Execution Limits
- **Timeout**: Hooks must complete within 30 seconds (configurable via `HOOK_EXECUTION_TIMEOUT_MS`)
- **Context Size**: Context modifications are limited to 50KB (configurable via `MAX_CONTEXT_MODIFICATION_SIZE`)
- **Error Handling**: Expected errors (file not found, permission denied, not a directory) are handled silently; unexpected file system errors are propagated
if [[ "$tool_name" == "write_to_file" && "$path" == *.js ]]; then
echo '{"cancel": true, "errorMessage": "Project rule: Use .ts files only"}'
exit 0
fi
echo '{"cancel": false}'
```
**All hooks must allow execution for the tool to proceed.** Hooks may execute concurrently.
## Multi-Root Workspaces
If you have multiple workspace roots, you can place hooks in each root's `.clinerules/hooks/` directory. All hooks (global and workspace) may execute concurrently. Their results will be combined:
- **cancel**: If ANY hook returns `true`, execution is blocked
- **contextModification**: All context modifications are concatenated
- **errorMessage**: All error messages are concatenated
**Note:** No execution order is guaranteed between hooks from different directories.
## Troubleshooting
### Hook Not Running
- Ensure the "Enable Hooks" setting is checked
- Verify the hook file is executable (`chmod +x hookname`)
- Check the hook file has no syntax errors
- Look for errors in VSCode's Output panel (Cline channel)
### Hook Timing Out
- Reduce complexity of the hook script
- Avoid expensive operations (network calls, heavy computations)
- Consider moving complex logic to a background process
### Context Not Affecting Behavior
- Remember: context affects FUTURE decisions, not the current tool
- Ensure context modifications are clear and actionable
- Check that context isn't being truncated (50KB limit)
## Security Considerations
- Hooks run with the same permissions as VSCode
- Be cautious with hooks from untrusted sources
- Review hook scripts before enabling them
- Consider using `.gitignore` to avoid committing sensitive hook logic
- Hooks can access all workspace files and environment variables
## Best Practices
1.**Keep hooks fast** - Aim for <100ms execution time
2.**Make context actionable** - Be specific about what the AI should do
3.**Use structured prefixes** - Help the AI categorize context
To ensure Cline works correctly in all environments (VSCode, JetBrains, CLI) and with various network configurations (especially corporate proxies), strictly follow these guidelines for all network activity.
In extension code, do NOT use the global `fetch` or a default `axios` instance. (Note, `shared/net.ts` is exempt from these rules because it sets up the fetch wrappers.) In Webview code, you SHOULD use global `fetch`.
Global `fetch` and default `axios` do not automatically pick up proxy configurations in all environments (specifically JetBrains and CLI). You MUST use the provided utilities in `@/shared/net` which handle proxy agent configuration. In the webview, the browser/embedder handles proxies.
## Guidelines
### 1. Using `fetch`
Instead of `fetch(...)`, import the proxy-aware wrapper:
<important>If using the direct approach, pipe outputs through `cat` to avoid interactive terminals. If the user's shell is not bash/zsh, adjust the command and chaining
syntax accordingly.</important>
```powershell
$B=$null;foreach($cin'main','master','origin/main','origin/master'){gitrev-parse--verify-q$c*>$null;if($LASTEXITCODE-eq0){$B=$c;break}};if(-not$B){$B='HEAD'};functionr([string]$b){gitrev-parse--abbrev-refHEAD;'=== STATUS ===';gitstatus--porcelain|cat;'=== COMMIT MESSAGES ===';gitlog"$b"..HEAD--oneline|cat;'=== CHANGED FILES ===';gitdiff "$b"--name-only|cat;'=== FULL DIFF ===';gitdiff "$b"|cat};$out=r $B|Out-String;$lines=($out-split"`r?`n").Count;if($lines-gt500){$out|Set-Content-NoNewlinecline-git-analysis.temp;'::OUTPUT_FILE=cline-git-analysis.temp'}else{$out}
```
## Step 2: Silent, Structured Analysis Phase
- Analyze all git output without providing commentary or narration
Also get the commit messages already on the tag (to identify previously cherry-picked commits). Note: Run these as separate commands to avoid shell parsing issues with parentheses in author names:
```bash
LAST_TAG=$(git tag --sort=-v:refname | head -1)
PREV_TAG=$(git tag --sort=-v:refname | head -2 | tail -1)
**Present the list** to the user in a numbered format with commit hash, subject, and author. For any commits whose subject line already appears in the tag's history (previously cherry-picked in an earlier hotfix) or are "Release Notes" commits, add `(already in previous hotfix)` or `(release notes - skip)` after them so the user knows to skip those.
Ask which commits to include in the hotfix.
Use the ask_followup_question tool to let the user specify which commits they want (by number or hash).
## Step 3: Analyze Selected Commits
For each selected commit:
1. Get the full commit message: `git show --no-patch --format="%B" <hash>`
2. Get the diff to understand the change: `git show <hash> --stat`
3. Find the associated PR if any: `gh pr list --search "<hash>" --state merged --json number,title --jq '.[0]'`
Build a mental model of what these changes do for the changelog.
## Step 4: Determine New Version Number
Parse the current version from package.json and the last tag:
```bash
LAST_TAG=$(git tag --sort=-v:refname | head -1)
echo"Last release: $LAST_TAG"
cat package.json | grep '"version"'
```
Hotfixes always increment the patch version (e.g., 3.40.0 -> 3.40.1, or 3.40.1 -> 3.40.2).
**Ask the user to confirm the new version number.**
## Step 5: Create Release Notes Commit on Main
On the main branch, create a commit that updates:
1.**CHANGELOG.md** - Add a new section for the hotfix version at the top:
```markdown
## [3.40.1]
- Description of fix 1
- Description of fix 2
```
Write clear, user-friendly descriptions based on your analysis of the commits.
2. **package.json** - Update the version field to the new version
3. **Delete changesets** for the commits being included in the hotfix. This prevents the changeset bot from including duplicate entries in the next regular release.
Find and delete the changeset files associated with the selected commits:
```bash
ls .changeset/
```
Each changeset file in `.changeset/` corresponds to a PR. Read them to identify which ones belong to the commits you're hotfixing, then delete those files.
**Skip running `npm run install:all`** - the automation handles outdated lockfiles.
Commit with message format: `v{VERSION} Release Notes (hotfix)`
In the commit body, mention:
- This is for a hotfix release
- List the cherry-picked commits that will be included
```bash
git add CHANGELOG.md package.json .changeset/
git commit -m "v3.40.1 Release Notes (hotfix)
Hotfix release including:
- <commit1-hash>: <description>
- <commit2-hash>: <description>
"
```
Push to main:
```bash
git push origin main
```
## Step 6: Build the Hotfix on the Tag
Checkout the last release tag (detached HEAD):
```bash
LAST_TAG=$(git tag --sort=-v:refname | head -1)
git checkout $LAST_TAG
```
Cherry-pick the selected commits in order:
```bash
git cherry-pick <commit1-hash>
git cherry-pick <commit2-hash>
# ... etc
```
Finally, cherry-pick the release notes commit you just pushed to main:
```bash
# Get the hash of the release notes commit (should be HEAD of main)
RELEASE_NOTES_COMMIT=$(git rev-parse main)
git cherry-pick $RELEASE_NOTES_COMMIT
```
## Step 7: Tag and Push
After all cherry-picks are applied successfully:
```bash
# Tag the new release
git tag v{VERSION}
# Push the tag to remote
git push origin v{VERSION}
```
## Step 8: Return to Main and Summary
Return to main branch:
```bash
git checkout main
```
**Copy a Slack announcement message to clipboard** with the version and PR links for each included fix:
```
VS Code Hotfix v{VERSION} Published
- Description of fix 1 https://github.com/cline/cline/pull/{PR_NUMBER}
- Description of fix 2 https://github.com/cline/cline/pull/{PR_NUMBER}
```
Present a final summary:
- New version: v{VERSION}
- Tag pushed: yes
- Commits included: (list them)
- Slack message copied to clipboard: yes
Remind the user to:
1. Manually trigger the publish release GitHub Action at: https://github.com/cline/cline/actions/workflows/publish.yml (paste `v{VERSION}` as the tag)
2. Post the Slack message to announce the hotfix
## Important Notes
- This workflow does NOT create a release branch - only tags
- The release notes commit goes to main first, then gets cherry-picked to the tag
- This keeps main's history accurate while allowing hotfix releases from tags
- If cherry-pick conflicts occur, resolve them before continuing
**Important:** All bug reports must be reproducible using Claude 3.5 Sonnet. Cline uses complex prompts so less capable models may not work as expected.
- type:textarea
id:what-happened
attributes:
label:What happened?
description:Also tell us, what did you expect to happen?
placeholder:Tell us what you see!
validations:
required:true
- type:textarea
id:steps
attributes:
label:Steps to reproduce
description:How do you trigger this bug? Please walk us through it step by step.
value:|
1.
2.
3.
validations:
required:true
- type:textarea
id:logs
attributes:
label:Relevant API REQUEST output
description:Please copy and paste any relevant output. This will be automatically formatted into code, so no need for backticks.
render:shell
- type:input
id:provider-model
attributes:
label:Provider/Model
description:What provider and model were you using when the issue occurred?
description:What version of Cline are you using? (You can find this at the bottom of the Settings view)
placeholder:"e.g., 1.2.3"
validations:
required:true
- type:textarea
id:additional-context
attributes:
label:Additional context
description:Add any other context about the problem here, such as screenshots or related issues.
- type:markdown
attributes:
value:|
**Important:** All bug reports must be reproducible using Claude Sonnet 4.5. Cline uses complex prompts so less capable models may not work as expected.
- type:dropdown
id:plugin-type
attributes:
label:Plugin Type
description:Which plugin are you reporting a bug for?
options:
- VSCode Extension
- JetBrains Plugin
- CLI
default:0
validations:
required:true
- type:input
id:cline-version
attributes:
label:Cline Version
description:What version of Cline are you using? (You can find this at the bottom of the Settings view)
placeholder:'e.g., 1.2.3'
validations:
required:true
- type:textarea
id:what-happened
attributes:
label:What happened?
description:Also tell us, what did you expect to happen?
placeholder:Tell us what you see!
validations:
required:true
- type:textarea
id:steps
attributes:
label:Steps to reproduce
description:How do you trigger this bug? Please walk us through it step by step.
value:|
1.
2.
3.
validations:
required:false
- type:input
id:provider-model
attributes:
label:Provider/Model
description:What provider and model were you using when the issue occurred?
description:Propose a new feature or improvement, and optionally offer to implement feature as a contributor
labels:["proposal"]
body:
- type:markdown
attributes:
value:|
**Feature Proposal & Contribution for Cline**
Thank you for proposing a feature or improvement for Cline! This template helps us understand the problem, evaluate the solution, and coordinate implementation.
**For detailed proposals:** Please provide comprehensive information to enable fast prioritization and discussion.
**For contribution offers:** You can indicate your willingness to implement the feature yourself.
Before submitting:
- Search existing [Issues](https://github.com/cline/cline/issues) and [Discussions](https://github.com/cline/cline/discussions) to avoid duplicates
- Read the [Contributing Guide](https://github.com/cline/cline/blob/main/CONTRIBUTING.md) if you plan to contribute
- Don't start implementation until the proposal is reviewed and approved
- type:textarea
id:problem-description
attributes:
label:What problem does this solve?
description:|
Describe the problem clearly from a user's point of view. Focus on why this matters, who it affects, and when it occurs.
✅ Good examples:
- "LLM provider returns 400 error when nearing the context window instead of truncating"
- "Submit button is invisible in dark mode"
- "Users can't easily share their Cline configurations with team members"
❌ Avoid vague descriptions:
- "Performance is bad"
- "UI needs work"
Your description should include:
- Who is affected?
- When does it happen?
- What's the current vs expected behavior?
- What is the impact?
placeholder:Be specific about the problem, who it affects, and the impact.
validations:
required:true
- type:textarea
id:proposed-solution
attributes:
label:What's the proposed solution?
description:|
Describe how the problem should be solved. Be specific about UX, system behavior, and any flows that would change.
✅ Good examples:
- "Add error handling immediately after attempting to create the llm stream and retry after manually truncating"
- "Update button styling to ensure contrast in all themes"
- "Add export/import functionality in settings with JSON format"
❌ Avoid vague solutions:
- "Improve performance"
- "Fix the bug"
Your solution should include:
- What exactly will change?
- How will users interact with it?
- What's the expected outcome?
placeholder:Describe the proposed changes and how they solve the problem.
validations:
required:false
- type:dropdown
id:contribution-intent
attributes:
label:Are you interested in implementing this?
description:Let us know if you'd like to contribute to this feature
options:
- "No, just proposing the idea"
- "Yes, I'd like to implement this myself"
- "Yes, I'd like to collaborate with others"
- "Maybe, depending on complexity and guidance"
validations:
required:false
- type:textarea
id:implementation-approach
attributes:
label:Implementation approach (if contributing)
description:|
**Only fill this out if you selected "Yes" above.**
How do you plan to implement this? Include:
- High-level technical approach
- Files/components that would be affected
- Any new dependencies required
- Potential challenges or considerations you've identified
This helps us provide better guidance and ensures alignment before you start coding.
placeholder:"My implementation approach would be..."
- type:checkboxes
id:checklist
attributes:
label:Proposal checklist
options:
- label:I've checked for existing issues or related proposals
required:true
- label:I understand this needs review before implementation can start
required:true
- type:checkboxes
id:contribution-checklist
attributes:
label:Contribution checklist (if contributing)
description:Only check these if you plan to contribute
options:
- label:I've read the [Contributing Guide](https://github.com/cline/cline/blob/main/CONTRIBUTING.md)
- label:I'm willing to make changes based on feedback
- label:I understand the code review process and requirements
⚠️ Important: Before submitting this PR, please ensure you have:
-Opened an issue and discussed your proposed changes with the community / contributors
-Received approval from a core Cline contributor prior to proceeding with the implementation
- Link the associated issue in the "Related Issue" section
-For feature requests: Created a discussion in our Feature Requests discussions board https://github.com/cline/cline/discussions/categories/feature-requests and received approval from core maintainers before implementation
-For all changes: Link the associated issue/discussion in the "Related Issue" section below
Limited exceptions:
Small bug fixes, typo corrections, minor wording improvements, or simple type fixes that don't change functionality may be submitted directly.
Small bug fixes, typo corrections, minor wording improvements, or simple type fixes that don't change functionality may be submitted directly without prior discussion.
Why this requirement?
We deeply appreciate all community contributions - they are the core reason we're able to operate successfully and keep innovating! We welcome community input and want to make it as easy as possible for people to submit quality work. This process helps our core maintainers review new ideas faster and saves contributor time by ensuring you have the go-ahead before spending time on implementation.
We deeply appreciate all community contributions - they are essential to Cline's success! To ensure the best use of everyone's time and maintain project direction, we use our Feature Requests discussions board to gauge community interest and validate feature ideas before implementation begins. This helps us focus development efforts on features that will benefit the most users.
Search thoroughly for existing issues that match this one:
gh issue list --search "<keywords from the issue>" --state all --limit 30
gh issue list --search "<error messages>" --state all --limit 20
gh issue list --search "<affected feature/component>" --state all --limit 20
For each relevant issue you find, read it including its comments:
gh issue view <number> --comments
You're looking for:
- **Duplicates**: Issues describing the same problem. Link to them and explain why you think they're duplicates. If closed, check how they were resolved - the solution might apply here.
- **Related issues**: Similar problems or context that could help. Pull useful information from their comments (workarounds others found, debugging steps that helped, maintainer explanations). Link to them and explain the connection.
If there are closed issues with solutions, surface those solutions prominently - this might immediately solve the user's problem.
### Analyze recent changes (ALWAYS DO THIS)
Many issues are regressions from recent releases. **Always** check what changed recently:
gh release list --limit 10
gh pr list --state merged --limit 50 --json number,title,mergedAt,author,body
Look for PRs merged in the last few weeks that might correlate with the issue. If you find a likely connection:
- If you find a regression, call it out explicitly: which PR/commit likely caused it, who authored it, what changed, and suggest a fix direction if you can see one.
- If you don't find anything related, still mention it: "I analyzed recent PRs and releases but didn't find any changes that seem related to this issue."
### Search the codebase
Find the relevant code:
- Use grep/find to locate code related to the issue
- Key areas: `src/api/` (providers/models), `src/core/prompts/` (tools/prompts), platform-specific code for VS Code vs JetBrains
### Find documentation
Cline docs are at **https://docs.cline.bot/** and built with Mintlify from the `docs/` directory.
The URL structure maps directly to the file structure:
Cross-reference with GitHub usernames. Include in your response (@mention, do NOT assign):
| SME | Reason |
|-----|--------|
| @username1 | Authored PR #X which modified this area |
| @username2 | Primary contributor to affected file |
## Weak model detection
Many issues are caused by users running small or non-frontier models that don't tool-call reliably. Signs include:
- Model failing to use tools correctly
- Nonsensical or malformed responses
- User is running a small/local model or older model version
If this looks like a weak model issue, kindly suggest they try reproducing with Claude Sonnet and report back if it persists. Link to https://docs.cline.bot/getting-started/selecting-your-model if helpful. Still label and triage normally.
## Your comment
Write a single comment as a helpful community member. Be conversational, not robotic. Include what's relevant:
- **Helpful response** - Answer their question, suggest a fix, provide a workaround. If you found solutions in related closed issues, surface those prominently.
- **Duplicates and related issues** - Link to any you found and explain why they're duplicates/related. Summarize useful context from their comments.
- **Regression analysis** - If this looks like a regression, explain what change likely caused it, link to the PR/commit, and tag the author.
- **Clarifying questions** - If you need more info, ask specific questions. Don't ask for things already provided.
- **SME table** - Include the table above if this needs engineering attention. Don't tag people for questions with obvious answers or weak-model issues.
- **Context for maintainers** - Relevant code paths, what you found. Keep it concise.
- **Docs links** - If there's relevant documentation, link to it naturally in your response as a recommendation (e.g., "For more details, check out [the Ollama setup guide](url)"). Do NOT add a "Sources" section at the end - integrate doc links into your response where they're helpful.
- **Possible Duplicates section** - ALWAYS include a "Possible Duplicates" section at the end of your comment listing issues that might be duplicates so maintainers can quickly close if appropriate. If none found, say "No obvious duplicates found."
## Labels
First, retrieve all available labels and read their descriptions to understand what each is for:
gh label list --json name,description --limit 100
Then apply the appropriate labels based on your analysis. Only use labels from the list above—do not create new labels.
- **This is a one-time automated response** - you will NOT see their reply or respond again. Never say things like "I can help you", "let me know", "once I have that info", or "I can give you more targeted help" - you won't be there to follow up. If you ask clarifying questions, frame them for the maintainers who will follow up, e.g., "If you can share X, that would help the maintainers diagnose this."
- Don't be formulaic. Respond to what the issue actually needs.
- Surface solutions from past issues - often the fastest path to helping.
- Connecting regressions to specific changes is extremely valuable.
You're a GitHub PR reviewer for the open source Cline repository. Your goal is to give the PR author helpful feedback and give maintainers the context they need to review efficiently.
Cross-reference git authors with GitHub usernames. Include an SME table in your response:
| SME | Reason |
|-----|--------|
| @username1 | Authored PR #X which modified this area |
| @username2 | Primary contributor to affected file (15 commits in 6 months) |
| @username3 | Reviewed similar PR #Y with extensive feedback |
## Deep code review
This is the most important part. Don't just look for syntax issues - understand what the PR is trying to achieve and whether the implementation is the right approach.
Step 1: Understand the intent
Read the PR description and understand what the author is trying to accomplish. What problem are they solving? What feature are they adding?
Step 2: Form your own opinion first
Before analyzing their code, think about how YOU would implement this feature or fix. What files would you touch? What patterns would you follow? What edge cases would you handle?
Step 3: Compare approaches
Now look at their implementation. How does it compare to what you would have done?
- Is their approach better in some ways? Note what they did well.
- Is their approach missing something? Be specific about what and why.
- Are there edge cases they haven't considered?
- Does it follow the patterns established in similar parts of the codebase?
Step 4: Look at the bigger picture
- What other files or systems does this change interact with?
- Could this break anything else?
- Is there additional work needed beyond this PR to complete the feature?
- Does this fit well with the overall architecture?
Step 5: Find reference implementations
Look for similar changes in the codebase:
```bash
git log --oneline --all --grep="<relevant keywords>" | head -20
git log --oneline -- <similar files> | head -20
```
If this is adding a new API provider, look at how other providers are implemented.
If this is adding a new feature, look at how similar features were added.
Note where their implementation aligns with or diverges from established patterns.
Step 6: Standard code review checks
- DRY: Is there duplicated code that could be extracted?
- Error handling: Are errors handled appropriately?
- Security: Any injection risks, credential exposure, unsafe dependencies?
- Performance: Any obvious inefficiencies, memory leaks, N+1 patterns?
- Types: Is TypeScript used correctly? Any unsafe type assertions?
- Naming: Are variables and functions named clearly?
- Comments: Is complex logic explained? Are there outdated comments?
## Inline code suggestions
For specific code improvements, use GitHub's suggestion syntax via `gh api`.
This creates suggestions the author can commit with one click.
Single-line suggestion:
```bash
gh api repos/${{ github.repository }}/pulls/${{ steps.pr.outputs.number }}/reviews \
"body": "This can be simplified:\n\n```suggestion\nconst simplified = doThing();\n```"
}
]'
```
Use inline suggestions for concrete improvements. Use regular comments for questions or broader feedback.
## Post your review
After your investigation, post a single helpful comment that helps the author and gives maintainers context.
Start with a warm thank you for their contribution. Be conversational, not robotic.
Include what's relevant:
- In-depth explanation of what the PR does - Be comprehensive. A maintainer should be able to read this section and fully understand the author's intent, why they made the changes, how they implemented it, and what files/systems are affected. Don't just summarize - explain.
- Related issues/PRs you found that provide useful context (link to them)
- Your review findings (issues to address, suggestions, etc.)
- Clear next steps for the author
Include a "For Maintainers" section with:
- Anything else useful to help the maintainer resolve this PR
- Related issues/PRs with context on why they're relevant
- Open issues this PR might fix that weren't linked in the description
- Your recommendation: merge as-is, needs changes, needs discussion, close, etc.
- SME table - who should review this and why
For the SME table:
| SME | Reason |
|-----|--------|
| @username | Primary contributor to affected files |
- This is a one-time automated response - you will NOT see their reply or respond again. Never say things like "let me know if you have questions", "I can help you with", or "feel free to ask" - you won't be there to follow up. Frame any questions for the maintainers who will follow up.
- Be helpful and welcoming - Many contributors are new to the project
- Be specific - Point to exact lines and suggest fixes, don't give vague feedback
- Think deeply - Don't just surface-level review, understand the intent and evaluate the approach
- Use inline suggestions - Make it easy for authors to accept changes
- You're a first-pass reviewer - A human maintainer will do final approval
"gh api repos/${{ github.repository }}/pulls/${{ steps.pr.outputs.number }}/comments *",
"gh api repos/${{ github.repository }}/pulls/${{ steps.pr.outputs.number }}/reviews *"
]
}
run:|
npx cline --yolo 'You'\''re a GitHub PR reviewer for the open source Cline repository. Your goal is to give the PR author helpful feedback and give maintainers the context they need to review efficiently.
Cross-reference git authors with GitHub usernames. Include an SME table in your response:
| SME | Reason |
|-----|--------|
| @username1 | Authored PR #X which modified this area |
| @username2 | Primary contributor to affected file (15 commits in 6 months) |
| @username3 | Reviewed similar PR #Y with extensive feedback |
## Bash command usage
Don'\''t use operators like `|`, `&&`, or `;` - run each command separately and analyze the output.
When referencing command outputs, quote them properly to avoid formatting issues.
## Deep code review
This is the most important part. Don'\''t just look for syntax issues - understand what the PR is trying to achieve and whether the implementation is the right approach.
Step 1: Understand the intent
Read the PR description and understand what the author is trying to accomplish. What problem are they solving? What feature are they adding?
Step 2: Form your own opinion first
Before analyzing their code, think about how YOU would implement this feature or fix. What files would you touch? What patterns would you follow? What edge cases would you handle?
Step 3: Compare approaches
Now look at their implementation. How does it compare to what you would have done?
- Is their approach better in some ways? Note what they did well.
- Is their approach missing something? Be specific about what and why.
- Are there edge cases they haven'\''t considered?
- Does it follow the patterns established in similar parts of the codebase?
Step 4: Look at the bigger picture
- What other files or systems does this change interact with?
- Could this break anything else?
- Is there additional work needed beyond this PR to complete the feature?
- Does this fit well with the overall architecture?
Step 5: Find reference implementations
Look for similar changes in the codebase:
```bash
git log --oneline --all --grep='\''<relevant keywords>'\'' | head -20
git log --oneline -- <similar files> | head -20
```
If this is adding a new API provider, look at how other providers are implemented.
If this is adding a new feature, look at how similar features were added.
Note where their implementation aligns with or diverges from established patterns.
Step 6: Standard code review checks
- DRY: Is there duplicated code that could be extracted?
- Error handling: Are errors handled appropriately?
- Security: Any injection risks, credential exposure, unsafe dependencies?
- Performance: Any obvious inefficiencies, memory leaks, N+1 patterns?
- Types: Is TypeScript used correctly? Any unsafe type assertions?
- Naming: Are variables and functions named clearly?
- Comments: Is complex logic explained? Are there outdated comments?
## Inline code suggestions
For specific code improvements, use GitHub'\''s suggestion syntax via `gh api`.
This creates suggestions the author can commit with one click.
Single-line suggestion:
```bash
gh api repos/'"${GITHUB_REPO}"'/pulls/'"${PR_NUMBER}"'/reviews \
"body": "This can be simplified:\n\n```suggestion\nconst simplified = doThing();\n```"
}
]'\''
```
Use inline suggestions for concrete improvements. Use regular comments for questions or broader feedback.
## Post your review
After your investigation, post a single helpful comment that helps the author and gives maintainers context.
Start with a warm thank you for their contribution. Be conversational, not robotic.
Include what'\''s relevant:
- In-depth explanation of what the PR does - Be comprehensive. A maintainer should be able to read this section and fully understand the author'\''s intent, why they made the changes, how they implemented it, and what files/systems are affected. Don'\''t just summarize - explain.
- Related issues/PRs you found that provide useful context (link to them)
- Your review findings (issues to address, suggestions, etc.)
- Clear next steps for the author
Include a '\''For Maintainers'\'' section with:
- Anything else useful to help the maintainer resolve this PR
- Related issues/PRs with context on why they'\''re relevant
- Open issues this PR might fix that weren'\''t linked in the description
- Your recommendation: merge as-is, needs changes, needs discussion, close, etc.
- SME table - who should review this and why
For the SME table:
| SME | Reason |
|-----|--------|
| @username | Primary contributor to affected files |
- This is a one-time automated response - you will NOT see their reply or respond again. Never say things like '\''let me know if you have questions'\'', '\''I can help you with'\'', or '\''feel free to ask'\'' - you won'\''t be there to follow up. Frame any questions for the maintainers who will follow up.
- Be helpful and welcoming - Many contributors are new to the project
- Be specific - Point to exact lines and suggest fixes, don'\''t give vague feedback
- Think deeply - Don'\''t just surface-level review, understand the intent and evaluate the approach
- Use inline suggestions - Make it easy for authors to accept changes
- You'\''re a first-pass reviewer - A human maintainer will do final approval'
@@ -14,14 +14,11 @@ Bug reports help make Cline better for everyone! Before creating a new issue, pl
## Before Contributing
All contributions must begin with a GitHub Issue, unless the change is for small bug fixes, typo corrections, minor wording improvements, or simple type fixes that don't change functionality.
- **Contributions:** Use the "Contribution Request" template to propose what you'd like to work on.
- **Bugs:** "Bug Report" template for reporting issues.
- **Features:** "Detailed Feature Proposal" template for suggesting new features.
- **Wait for approval**: A core Cline contributor must approve your contribution request before you start implementation.
- **Claim issues**: Once approved, the issue will be assigned to you.
**For features and contributions**:
-First check the [Feature Requests discussions board](https://github.com/cline/cline/discussions/categories/feature-requests) for similar ideas
-If your idea is new, create a new feature request
- Wait for approval from core maintainers before starting implementation
- Once approved, feel free to begin working on a PR with the help of our community!
**PRs without approved issues may be closed.**
@@ -49,7 +46,11 @@ We also welcome contributions to our [documentation](https://github.com/cline/cl
```bash
npm run install:all
```
4. Launch by pressing `F5` (or `Run`->`Start Debugging`) to open a new VSCode window with the extension loaded. (You may need to install the [esbuild problem matchers extension](https://marketplace.visualstudio.com/items?itemName=connor4312.esbuild-problem-matchers) if you run into issues building the project.)
4. Generate Protocol Buffer files (required before first build):
```bash
npm run protos
```
5. Launch by pressing `F5` (or `Run`->`Start Debugging`) to open a new VSCode window with the extension loaded. (You may need to install the [esbuild problem matchers extension](https://marketplace.visualstudio.com/items?itemName=connor4312.esbuild-problem-matchers) if you run into issues building the project.)
@@ -77,7 +78,6 @@ We also welcome contributions to our [documentation](https://github.com/cline/cl
4. Testing
- Run `npm run test` to run tests locally.
- Before submitting PR, run `npm run format:fix` to format your code
- Run `npm run test:ci` to run tests locally
### Extension
@@ -89,8 +89,10 @@ We also welcome contributions to our [documentation](https://github.com/cline/cl
2. **Local Development**
- Run `npm run install:all` to install dependencies
- Run `npm run protos` to generate Protocol Buffer files (required before first build)
- Run `npm run test` to run tests locally
- Run → Start Debugging or `>Debug: Select and Start Debugging` and wait for a new VS Code instance to open
- **Terminal Workflow**: Use `npm run dev` (generates protos + runs watch mode) or `npm run watch` (if protos already generated)
- Before submitting PR, run `npm run format:fix` to format your code
3. **Linux-specific Setup**
@@ -150,7 +152,7 @@ Anyone can contribute code to Cline, but we ask that you follow these guidelines
- Run `npm run lint` to check code style
- Run `npm run format` to automatically format code
- All PRs must pass CI checks which include both linting and formatting
- Address any ESLint warnings or errors before submitting
- Address any warnings or errors from linter before submitting
- Follow TypeScript best practices and maintain type safety
3. **Testing**
@@ -160,6 +162,36 @@ Anyone can contribute code to Cline, but we ask that you follow these guidelines
- Update existing tests if your changes affect them
- Include both unit tests and integration tests where appropriate
**End-to-End (E2E) Testing**
Cline includes comprehensive E2E tests using Playwright that simulate real user interactions with the extension in VS Code:
- **Running E2E tests:**
```bash
npm run test:e2e # Build and run all E2E tests
npm run e2e # Run tests without rebuilding
npm run test:e2e -- --debug # Run with interactive debugger
```
- **Writing E2E tests:**
- Tests are located in `src/test/e2e/`
- Use the `e2e` fixture for single-root workspace tests
- Use `e2eMultiRoot` fixture for multi-root workspace tests
- Follow existing patterns in `auth.test.ts`, `chat.test.ts`, `diff.test.ts`, and `editor.test.ts`
- See `src/test/e2e/README.md` for detailed documentation
- **Debug mode features:**
- Interactive Playwright Inspector for step-by-step debugging
- Record new interactions and generate test code automatically
- Visual VS Code instance for manual testing
- Element inspection and selector validation
- **Test environment:**
- Automated VS Code setup with Cline extension loaded
- Mock API server for backend testing
- Temporary workspaces with test fixtures
- Video recording for failed tests
4. **Version Management with Changesets**
- Create a changeset for any user-facing changes using `npm run changeset`
@@ -30,9 +30,9 @@ English | <a href="https://github.com/cline/cline/blob/main/locales/es/README.md
</table>
</div>
Meet Cline (pronounced /klaɪn/, like "Klein"), an AI assistant that can use your **CLI** a**N**d **E**ditor.
Meet Cline, an AI assistant that can use your **CLI** a**N**d **E**ditor.
Thanks to[Claude 3.7 Sonnet's agentic coding capabilities](https://www.anthropic.com/claude/sonnet),Cline can handle complex software development tasks step-by-step. With tools that let him create & edit files, explore large projects, use the browser, and execute terminal commands (after you grant permission), he can assist you in ways that go beyond code completion or tech support. Cline can even use the Model Context Protocol (MCP) to create new tools and extend his own capabilities. While autonomous AI scripts traditionally run in sandboxed environments, this extension provides a human-in-the-loop GUI to approve every file change and terminal command, providing a safe and accessible way to explore the potential of agentic AI.
Thanks to[Claude Sonnet's agentic coding capabilities](https://www.anthropic.com/claude/sonnet),Cline can handle complex software development tasks step-by-step. With tools that let him create & edit files, explore large projects, use the browser, and execute terminal commands (after you grant permission), he can assist you in ways that go beyond code completion or tech support. Cline can even use the Model Context Protocol (MCP) to create new tools and extend his own capabilities. While autonomous AI scripts traditionally run in sandboxed environments, this extension provides a human-in-the-loop GUI to approve every file change and terminal command, providing a safe and accessible way to explore the potential of agentic AI.
1. Enter your task and add images to convert mockups into functional apps or fix bugs with screenshots.
2. Cline starts by analyzing your file structure & source code ASTs, running regex searches, and reading relevant files to get up to speed in existing projects. By carefully managing what information is added to context, Cline can provide valuable assistance even for large, complex projects without overwhelming the context window.
4. When a task is completed, Cline will present the result to you with a terminal command like`open -a "Google Chrome" index.html`, which you run with a click of a button.
> [!TIP]
> Use the`CMD/CTRL + Shift + P`shortcut to open the command palette and type"Cline: Open In New Tab"to open the extension as a tab in your editor. This lets you use Cline side-by-side with your file explorer, and see how he changes your workspace more clearly.
> Follow [this guide](https://docs.cline.bot/features/customization/opening-cline-in-sidebar) to open Cline on the right side of your editor. This lets you use Cline side-by-side with your file explorer, and see how he changes your workspace more clearly.
---
@@ -87,7 +87,7 @@ All changes made by Cline are recorded in your file's Timeline, providing an eas
### Use the Browser
With Claude 3.5 Sonnet's new [Computer Use](https://www.anthropic.com/news/3-5-models-and-computer-use) capability, Cline can launch a browser, click elements, type text, and scroll, capturing screenshots and console logs at each step. This allows for interactive debugging, end-to-end testing, and even general web use! This gives him autonomy to fixing visual bugs and runtime issues without you needing to handhold and copy-pasting error logs yourself.
With Claude Sonnet's new [Computer Use](https://www.anthropic.com/news/3-5-models-and-computer-use) capability, Cline can launch a browser, click elements, type text, and scroll, capturing screenshots and console logs at each step. This allows for interactive debugging, end-to-end testing, and even general web use! This gives him autonomy to fixing visual bugs and runtime issues without you needing to handhold and copy-pasting error logs yourself.
Try asking Cline to "test the app", and watch as he runs a command like `npm run dev`, launches your locally running dev server in a browser, and performs a series of tests to confirm that everything works. [See a demo here.](https://x.com/sdrzn/status/1850880547825823989)
@@ -141,6 +141,11 @@ For example, when working with a local web server, you can use 'Restore Workspac
To contribute to the project, start with our [Contributing Guide](CONTRIBUTING.md) to learn the basics. You can also join our [Discord](https://discord.gg/cline) to chat with other contributors in the `#contributors` channel. If you're looking for full-time work, check out our open positions on our [careers page](https://cline.bot/join-us)!
## Enterprise
Get the same Cline experience with enterprise-grade controls: SSO (SAML/OIDC), global policies and configuration, observability with audit trails, private networking (VPC/private link), and self-hosted or on-prem deployments, and enterprise support. Learn more at our [enterprise page](https://cline.bot/enterprise) or [talk to us](https://cline.bot/contact-sales).
The CLI is a **standalone terminal interface** for the Cline AI coding assistant, written in Go. It provides the same autonomous coding capabilities as the VS Code extension but runs entirely in the terminal.
| `env.go` | Clipboard access, version info, shutdown coordination |
| `window.go` | UI stubs (no-ops or console output) |
**Why this exists:** The same cline-core logic runs in VS Code and CLI. In VS Code, the "host" is the extension with editor APIs. In CLI, hostbridge emulates these capabilities with terminal-appropriate implementations.
---
## Key Design Decisions
1.**Two-process model:**`cline` CLI manages instances; `cline-core` is the actual AI engine (Node.js). This allows reusing the same core as the VS Code extension.
2.**Self-registration via SQLite:**`cline-core` registers itself in a SQLite database on startup. The CLI discovers instances by reading this database, enabling multi-instance support.
3.**Host bridge abstraction:** The `cline-host` process provides platform-specific operations (clipboard, workspace paths) via gRPC, allowing `cline-core` to remain host-agnostic.
4.**Streaming-first UI:** The CLI uses gRPC streaming to display AI responses in real-time with typewriter-style rendering.
5.**Dual stream handling:** Task manager subscribes to both state updates and partial messages, using deduplication to prevent duplicate rendering.
// Optional quality-of-life: allow skipping with -short when artifacts are absent
fmt.Fprintf(os.Stderr,"[e2e] skipping (-short) due to missing artifacts:\n %s\n",strings.Join(missing,"\n "))
os.Exit(0)
}
fmt.Fprintf(os.Stderr,"Missing required build artifacts for E2E tests:\n %s\n\nPlease build them first:\n npm run compile-standalone\n npm run compile-cli\n",strings.Join(missing,"\n "))
Try: cat README.md | cline "Summarize this for me:"
**cline** is a command-line interface for orchestrating multiple Cline AI coding agents. Cline is an autonomous AI agent who can read, write, and execute code across your projects. He operates through a client-server architecture where **Cline Core** runs as a standalone service, and the CLI acts as a scriptable interface for managing tasks, instances, and agent interactions.
The CLI is designed for both interactive use and automation, making it ideal for CI/CD pipelines, parallel task execution, and terminal-based workflows. Multiple frontends (CLI, VSCode, JetBrains) can attach to the same Cline Core instance, enabling seamless task handoff between environments.
# MODES OF OPERATION
**Instant Task Mode**
: The simplest invocation: **cline "prompt here"** immediately spawns an instance, creates a task, and enters chat mode. This is equivalent to running **cline instance new && cline task new && cline task chat** in sequence.
**Subcommand Mode**
: Advanced usage with explicit control: **cline \<command\> [subcommand] [options]** provides fine-grained control over instances, tasks, authentication, and configuration.
# AGENT BEHAVIOR
Cline operates in two primary modes:
**ACT MODE**
: Cline actively uses tools to accomplish tasks. He can read files, write code, execute commands, use a headless browser, and more. This is the default mode for task execution.
**PLAN MODE**
: Cline gathers information and creates a detailed plan before implementation. He explores the codebase, asks clarifying questions, and presents a strategy for user approval before switching to ACT MODE.
# INSTANT TASK OPTIONS
When using the instant task syntax **cline "prompt"** the following options are available:
**-o**, **\--oneshot**
: Full autonomous mode. Cline completes the task and stops following after completion. Example: cline -o "what's 6 + 8?"
**-s**, **\--setting** *setting**value*
: Override a setting for this task
**-y**, **\--no-interactive**, **\--yolo**
: Enable fully autonomous mode. Disables all interactivity:
- ask_followup_question tool is disabled
- attempt_completion happens automatically
- execute_command runs in non-blocking mode with timeout
: Additional workspace paths. Can be specified multiple times to include multiple directories. The current working directory is always included as the first workspace. Example: cline -w /path/to/other/project "refactor shared code"
When you use **-F json**, the CLI prints each client message as JSON.
Each message is a **ClineMessage** object.
Required fields:
- **type**: "ask" or "say"
- **text**: message text
- **ts**: Unix epoch timestamp in milliseconds
Optional fields (omitted when empty):
- **reasoning**: reasoning text
- **say**: say subtype (present when type is "say")
- **ask**: ask subtype (present when type is "ask")
- **partial**: streaming flag
- **images**: list of image URIs
- **files**: list of file paths
- **lastCheckpointHash**: git checkpoint hash
- **isCheckpointCheckedOut**: checkpoint checkout flag
- **isOperationOutsideWorkspace**: workspace safety flag
**-h**, **\--help**
: Display help information for the command.
**-v**, **\--verbose**
: Enable verbose output for debugging.
# COMMANDS
## Authentication
**cline auth** [*provider*] [*key*]
**cline a** [*provider*] [*key*]
: Configure authentication for AI model providers. Launches an interactive wizard if no arguments provided. If provider is specified without a key, prompts for the key or launches the appropriate OAuth flow.
## Instance Management
Cline Core instances are independent agent processes that can run in the background. Multiple instances can run simultaneously, enabling parallel task execution.
**cline instance**
**cline i**
: Display instance management help.
**cline instance new** [**-d**|**\--default**]
**cline i n** [**-d**|**\--default**]
: Spawn a new Cline Core instance. Use **\--default** to set it as the default instance for subsequent commands.
**cline instance list**
**cline i l**
: List all running Cline Core instances with their addresses and status.
**cline instance default***address*
**cline i d***address*
: Set the default instance to avoid specifying **\--address** in task commands.
**cline t v** [**-f**|**\--follow**] [**-c**|**\--follow-complete**]
: Display the current conversation. Use **\--follow** to stream updates in real-time, or **\--follow-complete** to follow until task completion.
**cline task restore***checkpoint*
**cline t r***checkpoint*
: Restore the task to a previous checkpoint state.
**cline task pause**
**cline t p**
: Pause task execution.
## Configuration
Configuration can be set globally. Override these global settings for a task using the **\--setting** flag
**cline config**
**cline c**
**cline config set***key**value*
**cline c s***key**value*
: Set a configuration variable.
**cline config get***key*
**cline c g***key*
: Read a configuration variable.
**cline config list**
**cline c l**
: List all configuration variables and their values.
# TASK SETTINGS
Task settings are persisted in the *~/.cline/x/tasks* directory. When resuming a task with **cline task open**, task settings are automatically restored.
Common settings include:
**yolo**
: Enable autonomous mode (true/false)
**mode**
: Starting mode (act/plan)
# NOTES & EXAMPLES
The **cline task send** and **cline task new** commands support reading from stdin, enabling powerful pipeline compositions:
```bash
cat requirements.txt | cline task send
echo"Refactor this code"| cline -y
```
## Instance Management
Manage multiple Cline instances:
```bash
# Start a new instance and make it default
cline instance new --default
# List all running instances
cline instance list
# Kill a specific instance
cline instance kill localhost:50052
# Kill all CLI instances
cline instance kill --all-cli
```
## Task History
Work with task history:
```bash
# List previous tasks
cline task list
# Resume a previous task
cline task open 1760501486669
# View conversation history
cline task view
# Start interactive chat with this task
cline task chat
```
# ENVIRONMENT
**CLINE_COMMAND_PERMISSIONS**
: JSON configuration for restricting which shell commands Cline can execute. When set, commands are validated against allow/deny patterns before execution. When not set, all commands are allowed.
- **allow** (array of strings): Glob patterns for allowed commands. If specified, only matching commands are permitted. Uses `*` to match any characters and `?` to match a single character. Setting allow on anything will deny all others.
- **deny** (array of strings): Glob patterns for denied commands. Deny rules take precedence over allow rules.
- **allowRedirects** (boolean): Whether to allow shell redirects (`>`, `>>`, `<`, etc.). Defaults to false.
**Rule evaluation:**
1. Check for dangerous characters (backticks outside single quotes, unquoted newlines)
2. Parse command into segments split by operators (`&&`, `||`, `|`, `;`)
3. If redirects detected and `allowRedirects` is not true, command is denied
4. Each segment is validated against deny rules first, then allow rules
5. Subshell contents (`$(...)` and `(...)`) are recursively validated
6. All segments must pass for the command to be allowed
returncline.ApiProvider_BEDROCK,fmt.Errorf("bedrock provider is not supported for quick setup due to complex authentication requirements. Please use interactive setup: cline auth")
}
// Map provider string to enum using existing function
// getTerminalHeight returns the terminal height (rows)
funcgetTerminalHeight()int{
_,height,err:=term.GetSize(int(os.Stdout.Fd()))
iferr!=nil||height<=0{
return25// safe fallback for non-TTY or errors
}
returnheight
}
// calculateSelectHeight computes appropriate height for Select component
// Reserves space for title, search UI, and margins
funccalculateSelectHeight()int{
height:=getTerminalHeight()
// Reserve ~10 rows for UI chrome (title, search, margins)
visibleRows:=height-10
// Clamp between 8 (minimum usable) and 25 (maximum before unwieldy)
ifvisibleRows<8{
return8
}
ifvisibleRows>25{
return25
}
returnvisibleRows
}
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.