* 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
* 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