* 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
* Fix CLINE_ENVIRONMENT configuration not being passed to webview
## Problem
The CLINE_ENVIRONMENT configuration set in launch.json was not being properly passed to the webview, causing the webview to break when trying to access environment-specific configurations.
This resulted in:
Webview using incorrect API URLs (always defaulting to production)
Broken authentication flows in development/staging environments
Inconsistent behavior between the main extension and webview components
## Root Cause
The issue occurred because:
Duplicate Configuration Logic: The webview had its own separate config.ts file that was trying to read process.env.CLINE_ENVIRONMENT directly
Environment Variable Propagation: While Vite was configured to pass CLINE_ENVIRONMENT to the build process, the webview's runtime code couldn't access this environment variable properly
Configuration Mismatch: The main extension and webview were using different configuration sources, leading to inconsistent environment settings
* fix credit uri
* replace apiBaseUrl with appBaseUrl
* local option
* fallback changed to app
* change to app url
* merge fixes
---------
Co-authored-by: 0xtoshii <94262432+0xToshii@users.noreply.github.com>
* refactor(hosts): Simplify the host provider interface for callers
- Streamline API to reduce complexity for consuming code
- Update all references across core, controller, and integration modules
- Consolidate provider patterns for easier usage
- Rename host-providers.ts to host-provider.ts
# Conflicts:
# src/core/controller/index.ts
# src/extension.ts
# src/integrations/git/commit-message-generator.ts
* Add comment
* In the tests, reset the HostProvider to prevent it complaining that it is being reinitialized
* Update comment
* Fix imports
* Refactor: Git commit message generation as a module
Implement Git commit message generation as a module
Refactors the Git commit message generation functionality into a separate module for better organization and maintainability.
The changes include:
- Moving the commit message generation logic from `src/core/controller/index.ts` to a new module `src/integrations/git/commit-message-generator.ts`.
- Adding a command to abort commit message generation.
- Updating the `cline.generateGitCommitMessage` command to use the new module.
- Adding a context key to disable the generate commit message button when a commit is generating.
This refactoring improves the codebase by:
- Separating concerns: The commit message generation logic is now isolated in its own module, making it easier to understand and maintain.
- Improving testability: The new module can be tested independently of the controller.
- Promoting code reuse: The commit message generation logic can be reused in other parts of the application if needed.
* clean up
* changeset added
* Pass the system prompt through a file when using Claude Code
* Support older versions and return better errors
* Add tests
* Add changeset
* Remove outdated docs
* Use a unique file name and clean the file
* Address comments
* Diable checkpoints on tasks where the init timed out, fix settings link
* early warning message
* Added checkpointTrackerErrorMessage to HistoryItem
* Updated some comments related to checkpoints timeouts
* changeset, timer cleanup
* timer cleanup
* add provider handler options types and only pass those fields when building
* use separate fields for plan and act mode for ephemeral model settings
* post merge issues fixed: bedrock and cline api build handlers; current mode reading in controller/index.ts; adding a couple fields to welcomeView migration
* add in moonshotApiKey to settings-conversion after main merge
* fix type errors
* fix frontend types
* fix code after merge conflicts; switch groq provider to plan/act paradigm
* consolidate to Mode type
* remove promise resolve
* move huggingface provider into the new schema
* add new providers to migration function
* use normalizeApiConfiguration for settings menu provider value to avoid undefined state error
* Fix the structure for the hosts package.
Right now we support two host platforms: vscode using the internal host bridge service (inside the same process), and other platforms using the external host bridge (using gRPC over local sockets).
The structure of the two packages should mirror each other
```
hosts/
vscode/
VscodeDiffViewProvider
VscodeWebViewProvider
etc ...
external/
ExternalDiffViewProvider
ExternalWebViewProvider
etc ...
```
* Fix imports
* Fix imports
* Fix imports
* Add eslint check for more vscode API calls
Add eslint checks to prevent vscode API calls from being reintroduced after they were switched to the host bridge.
The ones that are not enabled are not completely migrated, so they are not turned on because it would cause too many warnings, and make developers used to ignoring them.
* Update eslint-rules/no-direct-vscode-api.js
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Update warning message text
* Move the check for if the file is being included in the linter check or not into its own function
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* fix: disabled servers should not be started
* refactor to dedupe
* add changeset
* Update moody-crabs-relate.md
* minor comment tweaks
* use unknown instead of any
* Move logic to save the diff document and get the diff content to the platform specific diff view providers.
Add getDocumentText to the diff service.
The ExternalDiffViewProvider should be using its activeDiffEditorId (not the activeDiffEditor, which is the vscode Editor object)
* Check activeDiffEditorId
* Update src/integrations/editor/DiffViewProvider.ts
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Use await with this.saveDocument()
* Remove test file
---------
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
* Use await when calling async function showMessage.
Use await when calling `windowClient.showMessage`, otherwise the caller doesn't wait for the request to complete and any exceptions are lost.
For the host bridge RPCs, you don't need to do `ShowMessageRequest.create({...})`, you can just pass the request directly like: `{...}. The Message.create() was needed for the ProtoBus because of the way it was implemented, it couldn't be type-checked by the compiled. It's not needed elsewhere.
* Dont use await, because it blocks until the message is dismissed
* Dont need `?.selectedOption`, the response cannot be null
* Dont use await
* Add truncate document to the hostbridge diff service.
# Conflicts:
# src/standalone/ExternalDiffviewProvider.ts
* Fix typo
* Add host bridge rpcs for the diff service
* Add saveDocument and closeDiff to the host bridge.
* Formatting
* Use the host bridge in ExternalDiffviewProvider
* Make comments less verbose
* Unify error handling and display
Several improvements to error handling and reporting within the Cline extension, focusing on providing more informative error messages to the user and improving telemetry data.
- **Error Handling:**
- Introduces a `ClineError` class to encapsulate Cline-specific errors, providing structured data about the error (status code, request ID, etc.).
- The `ErrorService` now creates and logs `ClineError` instances, improving error reporting to Sentry and telemetry.
- Removes redundant error formatting logic from `src/core/task/utils.ts`, relying on the `ClineError` class for consistent error representation.
- The Cline API handler now throws the raw error, allowing the `ClineError` class to handle the error formatting.
- **UI Improvements:**
- Introduces new UI components (`ErrorRow`, `ErrorBlockTitle`) to display error messages in a more user-friendly format within the chat interface.
- Displays credit limit errors with detailed information and a link to purchase credits.
- Improves the display of rate limit errors and authentication errors.
- Adds specific handling for PowerShell-related errors, providing a link to a troubleshooting guide.
- **Telemetry:**
- Captures provider API errors using `ClineError` data, providing more detailed information about the error in telemetry reports.
- **Other Changes:**
- Fixes an import path in `src/services/posthog/PostHogClientProvider.ts`.
- Adds tests for the new UI components.
- Adds `error` field to `ClineMessage` to transport `ClineError` instances to the webview.
These changes aim to provide a better user experience by displaying more informative error messages and improving the overall reliability of the Cline extension.
* include provider id
* includes model and provider id
* fix test
* return gracefully for empty response
* Handle auth state changes in all extension windows
Addresses an issue where authentication state changes (login/logout) were not being properly propagated across all extension windows.
The `onDidChange` event handler for `clineAccountId` secret now checks if the secret was added/updated (login) or removed (logout).
- If the secret exists, `restoreRefreshTokenAndRetrieveAuthInfo` is called to restore auth info (login from another window).
- If the secret is removed, `handleDeauth` is called to handle logout for all windows.
This ensures that all extension windows are kept in sync with the current authentication state.
* changeset
* Add a way to reset state for the platform specific diff view providers.
Add the abstract method `resetDiffView()` to the DiffViewProvider.
On Vscode it reset the active diff editor and decorations.
On External diff view providers, it reset the diff editor ID.
* Add a way to truncate the document to the platform specific diff view providers.
This is used when the last update is recieved to remove any content from the bottom of the document.
* Move `closeDiffView` to the platform specific diff view classes.
* Update comment
* Use await for async function
* Move setting the cursor position into replaceText