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