diff --git a/package.json b/package.json index 9a8299abb9..b1f6f58a8f 100644 --- a/package.json +++ b/package.json @@ -319,7 +319,7 @@ "compile-tests": "node ./scripts/build-tests.js", "watch-tests": "tsc -p . -w --outDir out", "check-types": "npm run protos && npx tsc --noEmit && cd webview-ui && npx tsc -b --noEmit", - "lint": "biome lint --no-errors-on-unmatched --files-ignore-unknown=true --diagnostic-level=error && buf lint", + "lint": "biome lint --no-errors-on-unmatched --files-ignore-unknown=true --diagnostic-level=error && scripts/proto-lint.sh", "format": "biome format --changed --no-errors-on-unmatched --files-ignore-unknown=true --diagnostic-level=error", "format:fix": "biome check --changed --no-errors-on-unmatched --files-ignore-unknown=true --write", "fix:all": "biome check --no-errors-on-unmatched --files-ignore-unknown=true --write --diagnostic-level=error --unsafe", diff --git a/proto/cline/account.proto b/proto/cline/account.proto index 2ee65aa46f..8b37c6fe07 100644 --- a/proto/cline/account.proto +++ b/proto/cline/account.proto @@ -1,10 +1,12 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; // Service for account-related operations service AccountService { @@ -12,20 +14,18 @@ service AccountService { // Generates a secure nonce for state validation, stores it in secrets, // and opens the authentication URL in the external browser. rpc accountLoginClicked(EmptyRequest) returns (String); - + // Handles the user clicking the logout button in the UI. // Clears API keys and user state. rpc accountLogoutClicked(EmptyRequest) returns (Empty); // Subscribe to auth status update events (when authentication state changes) - rpc subscribeToAuthStatusUpdate(EmptyRequest) - returns (stream AuthState); - + rpc subscribeToAuthStatusUpdate(EmptyRequest) returns (stream AuthState); + // Handles authentication state changes from the Firebase context. // Updates the user info in global state and returns the updated value. - rpc authStateChanged(AuthStateChangedRequest) - returns (AuthState); - + rpc authStateChanged(AuthStateChangedRequest) returns (AuthState); + // Fetches all user credits data // (balance, usage transactions, payment transactions) rpc getUserCredits(EmptyRequest) returns (UserCreditsData); diff --git a/proto/cline/browser.proto b/proto/cline/browser.proto index e8e2fcd9fa..7ba8ff2346 100644 --- a/proto/cline/browser.proto +++ b/proto/cline/browser.proto @@ -1,10 +1,12 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; service BrowserService { rpc getBrowserConnectionInfo(EmptyRequest) returns (BrowserConnectionInfo); diff --git a/proto/cline/checkpoints.proto b/proto/cline/checkpoints.proto index 5660f4b20a..414ea646a5 100644 --- a/proto/cline/checkpoints.proto +++ b/proto/cline/checkpoints.proto @@ -1,11 +1,13 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; import "google/protobuf/timestamp.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; service CheckpointsService { rpc checkpointDiff(Int64Request) returns (Empty); @@ -31,13 +33,13 @@ message CheckpointEvent { CHECKPOINT_COMMIT = 1; CHECKPOINT_RESTORE = 2; } - + OperationType operation = 1; string cwd_hash = 2; bool is_active = 3; google.protobuf.Timestamp timestamp = 4; optional string task_id = 5; - optional string commit_hash = 6; + optional string commit_hash = 6; } message PathHashMap { diff --git a/proto/cline/commands.proto b/proto/cline/commands.proto index 6647d3fc9b..ea5e8cbd91 100644 --- a/proto/cline/commands.proto +++ b/proto/cline/commands.proto @@ -1,12 +1,14 @@ syntax = "proto3"; package cline; -import "cline/common.proto"; -option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; -option java_multiple_files = true; -// Service for running IDE commands, for example context menu actions, +import "cline/common.proto"; + +option go_package = "github.com/cline/grpc-go/cline"; +option java_multiple_files = true; +option java_package = "bot.cline.proto"; + +// Service for running IDE commands, for example context menu actions, // commands, etc. // In contrast to the rest of the ProtoBus services, these are // intended to be called by the IDE directly instead of through the webview, diff --git a/proto/cline/common.proto b/proto/cline/common.proto index 060817459b..83014ecce2 100644 --- a/proto/cline/common.proto +++ b/proto/cline/common.proto @@ -1,18 +1,16 @@ syntax = "proto3"; package cline; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; -message Metadata { -} +message Metadata {} -message EmptyRequest { -} +message EmptyRequest {} -message Empty { -} +message Empty {} message StringRequest { string value = 2; diff --git a/proto/cline/dictation.proto b/proto/cline/dictation.proto index b90f17eebc..9b4a16c907 100644 --- a/proto/cline/dictation.proto +++ b/proto/cline/dictation.proto @@ -1,10 +1,12 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; service DictationService { rpc startRecording(EmptyRequest) returns (RecordingResult); diff --git a/proto/cline/file.proto b/proto/cline/file.proto index 39c86829a9..20c50928de 100644 --- a/proto/cline/file.proto +++ b/proto/cline/file.proto @@ -1,10 +1,12 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; // Service for file-related operations service FileService { @@ -13,10 +15,10 @@ service FileService { // Opens a file in the editor rpc openFile(StringRequest) returns (Empty); - + // Opens an image in the system viewer rpc openImage(StringRequest) returns (Empty); - + // Opens a mention (file, path, git commit, problem, terminal, or URL) rpc openMention(StringRequest) returns (Empty); @@ -25,34 +27,34 @@ service FileService { // Creates a rule file from either global or workspace rules directory rpc createRuleFile(RuleFileRequest) returns (RuleFile); - + // Search git commits in the workspace rpc searchCommits(StringRequest) returns (GitCommits); // Select images and other files from the file system and returns as data URLs & paths respectively rpc selectFiles(BooleanRequest) returns (StringArrays); - + // Convert URIs to workspace-relative paths rpc getRelativePaths(RelativePathsRequest) returns (RelativePaths); // Search for files in the workspace with fuzzy matching rpc searchFiles(FileSearchRequest) returns (FileSearchResults); - + // Toggle a Cline rule (enable or disable) rpc toggleClineRule(ToggleClineRuleRequest) returns (ToggleClineRules); // Toggle a Cursor rule (enable or disable) rpc toggleCursorRule(ToggleCursorRuleRequest) returns (ClineRulesToggles); - + // Toggle a Windsurf rule (enable or disable) rpc toggleWindsurfRule(ToggleWindsurfRuleRequest) returns (ClineRulesToggles); - + // Refreshes all rule toggles (Cline, External, and Workflows) rpc refreshRules(EmptyRequest) returns (RefreshedRules); // Opens a task's conversation history file on disk rpc openDiskConversationHistory(StringRequest) returns (Empty); - + // Toggles a workflow on or off rpc toggleWorkflow(ToggleWorkflowRequest) returns (ClineRulesToggles); @@ -61,7 +63,7 @@ service FileService { // Open a file in editor by a relative path rpc openFileRelativePath(StringRequest) returns (Empty); - + // Opens or creates a focus chain checklist markdown file for editing rpc openFocusChainFile(StringRequest) returns (Empty); } @@ -79,8 +81,8 @@ message RefreshedRules { // Request to toggle a Windsurf rule message ToggleWindsurfRuleRequest { Metadata metadata = 1; - string rule_path = 2; // Path to the rule file - bool enabled = 3; // Whether to enable or disable the rule + string rule_path = 2; // Path to the rule file + bool enabled = 3; // Whether to enable or disable the rule } // Request to convert a list of URIs to relative paths @@ -103,25 +105,25 @@ enum FileSearchType { // Request for file search operations message FileSearchRequest { Metadata metadata = 1; - string query = 2; // Search query string - optional string mentions_request_id = 3; // Optional request ID for tracking requests - optional int32 limit = 4; // Optional limit for results (default: 20) - optional FileSearchType selected_type = 5; // Optional selected type filter - optional string workspace_hint = 6; // Optional workspace name to search in + string query = 2; // Search query string + optional string mentions_request_id = 3; // Optional request ID for tracking requests + optional int32 limit = 4; // Optional limit for results (default: 20) + optional FileSearchType selected_type = 5; // Optional selected type filter + optional string workspace_hint = 6; // Optional workspace name to search in } // Result for file search operations message FileSearchResults { - repeated FileInfo results = 1; // Array of file/folder results - optional string mentions_request_id = 2; // Echo of the request ID for tracking + repeated FileInfo results = 1; // Array of file/folder results + optional string mentions_request_id = 2; // Echo of the request ID for tracking } // File information structure for search results message FileInfo { - string path = 1; // Relative path from workspace root - string type = 2; // "file" or "folder" - optional string label = 3; // Display name (usually basename) - optional string workspace_name = 4; // Workspace this result came from + string path = 1; // Relative path from workspace root + string type = 2; // "file" or "folder" + optional string label = 3; // Display name (usually basename) + optional string workspace_name = 4; // Workspace this result came from } // Response for searchCommits @@ -141,25 +143,25 @@ message GitCommit { // Unified request for all rule file operations message RuleFileRequest { Metadata metadata = 1; - bool is_global = 2; // Common field for all operations + bool is_global = 2; // Common field for all operations optional string rule_path = 3; // Path field for deleteRuleFile (optional) - optional string filename = 4; // Filename field for createRuleFile (optional) - optional string type = 5; // Type of the file to create (optional) + optional string filename = 4; // Filename field for createRuleFile (optional) + optional string type = 5; // Type of the file to create (optional) } // Result for rule file operations with meaningful data only message RuleFile { - string file_path = 1; // Path to the rule file - string display_name = 2; // Filename for display purposes - bool already_exists = 3; // For createRuleFile, indicates if file already existed + string file_path = 1; // Path to the rule file + string display_name = 2; // Filename for display purposes + bool already_exists = 3; // For createRuleFile, indicates if file already existed } // Request to toggle a Cline rule message ToggleClineRuleRequest { Metadata metadata = 1; - bool is_global = 2; // Whether this is a global rule or workspace rule - string rule_path = 3; // Path to the rule file - bool enabled = 4; // Whether to enable or disable the rule + bool is_global = 2; // Whether this is a global rule or workspace rule + string rule_path = 3; // Path to the rule file + bool enabled = 4; // Whether to enable or disable the rule } // Maps from filepath to enabled/disabled status, matching app's ClineRulesToggles type @@ -176,8 +178,8 @@ message ToggleClineRules { // Request to toggle a Cursor rule message ToggleCursorRuleRequest { Metadata metadata = 1; - string rule_path = 2; // Path to the rule file - bool enabled = 3; // Whether to enable or disable the rule + string rule_path = 2; // Path to the rule file + bool enabled = 3; // Whether to enable or disable the rule } // Request to toggle a workflow on or off diff --git a/proto/cline/hooks.proto b/proto/cline/hooks.proto index 6118e5a333..88d0c3dd0a 100644 --- a/proto/cline/hooks.proto +++ b/proto/cline/hooks.proto @@ -1,9 +1,10 @@ syntax = "proto3"; package cline; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; // Input message for all hooks message HookInput { diff --git a/proto/cline/mcp.proto b/proto/cline/mcp.proto index f95003c84a..231eb5eb7c 100644 --- a/proto/cline/mcp.proto +++ b/proto/cline/mcp.proto @@ -1,10 +1,12 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; service McpService { rpc toggleMcpServer(ToggleMcpServerRequest) returns (McpServers); @@ -16,11 +18,11 @@ service McpService { rpc toggleToolAutoApprove(ToggleToolAutoApproveRequest) returns (McpServers); rpc refreshMcpMarketplace(EmptyRequest) returns (McpMarketplaceCatalog); rpc openMcpSettings(EmptyRequest) returns (Empty); - + // Subscribe to MCP marketplace catalog updates rpc subscribeToMcpMarketplaceCatalog(EmptyRequest) returns (stream McpMarketplaceCatalog); rpc getLatestMcpServers(Empty) returns (McpServers); - + // Subscribe to MCP server updates rpc subscribeToMcpServers(EmptyRequest) returns (stream McpServers); } @@ -72,7 +74,7 @@ message McpResourceTemplate { } enum McpServerStatus { - // Protobuf enums (in proto3) must have a zero value defined, which serves as the default if the field isn't explicitly set. + // Protobuf enums (in proto3) must have a zero value defined, which serves as the default if the field isn't explicitly set. // To align with the required nature of the TypeScript type and avoid an unnecessary UNSPECIFIED state, we map one of the existing statuses to this zero value. MCP_SERVER_STATUS_DISCONNECTED = 0; // default MCP_SERVER_STATUS_CONNECTED = 1; diff --git a/proto/cline/models.proto b/proto/cline/models.proto index 61da7b3905..eb93b62659 100644 --- a/proto/cline/models.proto +++ b/proto/cline/models.proto @@ -1,11 +1,13 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; import "google/protobuf/field_mask.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; // Service for model-related operations service ModelsService { @@ -56,15 +58,15 @@ message LanguageModelChatSelector { // Price tier for tiered pricing models message PriceTier { - int64 token_limit = 1; // Upper limit (inclusive) of input tokens for this price - double price = 2; // Price per million tokens for this tier + int64 token_limit = 1; // Upper limit (inclusive) of input tokens for this price + double price = 2; // Price per million tokens for this tier } // Thinking configuration for models that support thinking/reasoning message ThinkingConfig { - optional int64 max_budget = 1; // Max allowed thinking budget tokens - optional double output_price = 2; // Output price per million tokens when budget > 0 - repeated PriceTier output_price_tiers = 3; // Optional: Tiered output price when budget > 0 + optional int64 max_budget = 1; // Max allowed thinking budget tokens + optional double output_price = 2; // Output price per million tokens when budget > 0 + repeated PriceTier output_price_tiers = 3; // Optional: Tiered output price when budget > 0 } // Model tier for tiered pricing structures @@ -120,7 +122,6 @@ message SapAiCoreModelDeployment { string deployment_id = 2; } - // Response for SAP AI Core models with orchestration availability message SapAiCoreModelsResponse { repeated SapAiCoreModelDeployment deployments = 1; @@ -137,18 +138,18 @@ message UpdateApiConfigurationRequest { // Only fields specified in update_mask will be updated from api_configuration message UpdateApiConfigurationPartialRequest { Metadata metadata = 1; - + // The API configuration with values to update. // Only fields listed in update_mask will be applied from this configuration. ModelsApiConfiguration api_configuration = 2; - + // Mask specifying which top-level fields from api_configuration to update. // Field names should use camelCase (e.g., "apiKey", "planModeApiProvider"). // If a field is in the mask but not set in api_configuration, it will be cleared (set to undefined). google.protobuf.FieldMask update_mask = 3; } - // Model info for OCA (OpenAI-compatible) models exposed by the OCA provider +// Model info for OCA (OpenAI-compatible) models exposed by the OCA provider message OcaModelInfo { // Maximum completion tokens per request supported by this model optional int64 max_tokens = 1; @@ -182,7 +183,7 @@ message OcaModelInfo { string model_name = 17; } - // Aggregated OCA model catalog keyed by model identifier +// Aggregated OCA model catalog keyed by model identifier message OcaCompatibleModelInfo { // key: canonical model id as reported by OCA (e.g., "openai/gpt-4o-mini") // value: OcaModelInfo describing that model @@ -373,7 +374,7 @@ message ModelsApiConfiguration { optional string plan_mode_hugging_face_model_id = 123; optional OpenRouterModelInfo plan_mode_hugging_face_model_info = 124; optional string plan_mode_huawei_cloud_maas_model_id = 125; - optional OpenRouterModelInfo plan_mode_huawei_cloud_maas_model_info = 126; + optional OpenRouterModelInfo plan_mode_huawei_cloud_maas_model_info = 126; optional string plan_mode_baseten_model_id = 127; optional OpenRouterModelInfo plan_mode_baseten_model_info = 128; optional string plan_mode_vercel_ai_gateway_model_id = 129; @@ -381,7 +382,6 @@ message ModelsApiConfiguration { optional string plan_mode_oca_model_id = 131; optional OcaModelInfo plan_mode_oca_model_info = 132; - // Act mode configurations optional ApiProvider act_mode_api_provider = 200; optional string act_mode_api_model_id = 201; diff --git a/proto/cline/oca_account.proto b/proto/cline/oca_account.proto index f7b234e7ce..2be87c8c71 100644 --- a/proto/cline/oca_account.proto +++ b/proto/cline/oca_account.proto @@ -1,10 +1,12 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; // Service for account-related operations service OcaAccountService { @@ -12,18 +14,15 @@ service OcaAccountService { // Generates a secure nonce for state validation, stores it in secrets, // and opens the authentication URL in the external browser. rpc ocaAccountLoginClicked(EmptyRequest) returns (String); - + // Handles the user clicking the logout button in the UI. // Clears API keys and user state. rpc ocaAccountLogoutClicked(EmptyRequest) returns (Empty); // Subscribe to auth status update events (when authentication state changes) - rpc ocaSubscribeToAuthStatusUpdate(EmptyRequest) - returns (stream OcaAuthState); - + rpc ocaSubscribeToAuthStatusUpdate(EmptyRequest) returns (stream OcaAuthState); } - message OcaAuthState { optional OcaUserInfo user = 1; optional string api_key = 2; @@ -34,4 +33,4 @@ message OcaUserInfo { string uid = 1; optional string display_name = 2; optional string email = 3; -} \ No newline at end of file +} diff --git a/proto/cline/slash.proto b/proto/cline/slash.proto index f683fc0556..debea09e10 100644 --- a/proto/cline/slash.proto +++ b/proto/cline/slash.proto @@ -1,10 +1,12 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; // SlashService provides methods for managing slash service SlashService { diff --git a/proto/cline/state.proto b/proto/cline/state.proto index d2fe5cfda1..6786f16602 100644 --- a/proto/cline/state.proto +++ b/proto/cline/state.proto @@ -1,11 +1,13 @@ syntax = "proto3"; package cline; + +import "cline/browser.proto"; import "cline/common.proto"; import "cline/models.proto"; -import "cline/browser.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; service StateService { rpc getLatestState(EmptyRequest) returns (State); @@ -91,130 +93,130 @@ message Secrets { } message Settings { - optional string aws_region = 1; - optional bool aws_use_cross_region_inference = 2; - optional bool aws_bedrock_use_prompt_cache = 3; - optional string aws_bedrock_endpoint = 4; - optional string aws_profile = 5; - optional string aws_authentication = 6; - optional bool aws_use_profile = 7; - optional string vertex_project_id = 8; - optional string vertex_region = 9; - optional string requesty_base_url = 10; - optional string open_ai_base_url = 11; + optional string aws_region = 1; + optional bool aws_use_cross_region_inference = 2; + optional bool aws_bedrock_use_prompt_cache = 3; + optional string aws_bedrock_endpoint = 4; + optional string aws_profile = 5; + optional string aws_authentication = 6; + optional bool aws_use_profile = 7; + optional string vertex_project_id = 8; + optional string vertex_region = 9; + optional string requesty_base_url = 10; + optional string open_ai_base_url = 11; // map open_ai_headers = 12; - optional string ollama_base_url = 13; - optional string ollama_api_options_ctx_num = 14; - optional string lm_studio_base_url = 15; - optional string lm_studio_max_tokens = 16; - optional string anthropic_base_url = 17; - optional string gemini_base_url = 18; - optional string azure_api_version = 19; - optional string open_router_provider_sorting = 20; - optional AutoApprovalSettings auto_approval_settings = 21; - optional BrowserSettings browser_settings = 24; - optional string lite_llm_base_url = 25; - optional bool lite_llm_use_prompt_cache = 26; - optional int32 fireworks_model_max_completion_tokens = 27; - optional int32 fireworks_model_max_tokens = 28; - optional string qwen_api_line = 29; - optional string moonshot_api_line = 30; - optional string zai_api_line = 31; - optional string telemetry_setting = 32; - optional string asksage_api_url = 33; - optional bool plan_act_separate_models_setting = 34; - optional bool enable_checkpoints_setting = 35; - optional int32 request_timeout_ms = 36; - optional int32 shell_integration_timeout = 37; - optional string default_terminal_profile = 38; - optional int32 terminal_output_line_limit = 39; - optional string sap_ai_core_token_url = 40; - optional string sap_ai_core_base_url = 41; - optional string sap_ai_resource_group = 42; - optional bool sap_ai_core_use_orchestration_mode = 43; - optional string claude_code_path = 44; - optional string qwen_code_oauth_path = 45; - optional bool strict_plan_mode_enabled = 46; - optional bool yolo_mode_toggled = 47; - optional bool use_auto_condense = 48; - optional string preferred_language = 49; - optional OpenaiReasoningEffort openai_reasoning_effort = 50; - optional PlanActMode mode = 51; - optional DictationSettings dictation_settings = 52; - optional FocusChainSettings focus_chain_settings = 53; - optional string custom_prompt = 54; - optional string dify_base_url = 55; - optional double auto_condense_threshold = 56; - optional string oca_base_url = 57; - optional ApiProvider plan_mode_api_provider = 58; - optional string plan_mode_api_model_id = 59; - optional int64 plan_mode_thinking_budget_tokens = 60; - optional string plan_mode_reasoning_effort = 61; - optional LanguageModelChatSelector plan_mode_vs_code_lm_model_selector = 62; - optional bool plan_mode_aws_bedrock_custom_selected = 63; - optional string plan_mode_aws_bedrock_custom_model_base_id = 64; - optional string plan_mode_open_router_model_id = 65; - optional OpenRouterModelInfo plan_mode_open_router_model_info = 66; - optional string plan_mode_open_ai_model_id = 67; - optional OpenAiCompatibleModelInfo plan_mode_open_ai_model_info = 68; - optional string plan_mode_ollama_model_id = 69; - optional string plan_mode_lm_studio_model_id = 70; - optional string plan_mode_lite_llm_model_id = 71; - optional LiteLLMModelInfo plan_mode_lite_llm_model_info = 72; - optional string plan_mode_requesty_model_id = 73; - optional OpenRouterModelInfo plan_mode_requesty_model_info = 74; - optional string plan_mode_together_model_id = 75; - optional string plan_mode_fireworks_model_id = 76; - optional string plan_mode_sap_ai_core_model_id = 77; - optional string plan_mode_sap_ai_core_deployment_id = 78; - optional string plan_mode_groq_model_id = 79; - optional OpenRouterModelInfo plan_mode_groq_model_info = 80; - optional string plan_mode_baseten_model_id = 81; - optional OpenRouterModelInfo plan_mode_baseten_model_info = 82; - optional string plan_mode_hugging_face_model_id = 83; - optional OpenRouterModelInfo plan_mode_hugging_face_model_info = 84; - optional string plan_mode_huawei_cloud_maas_model_id = 85; - optional OpenRouterModelInfo plan_mode_huawei_cloud_maas_model_info = 86; - optional string plan_mode_oca_model_id = 87; - optional OcaModelInfo plan_mode_oca_model_info = 88; - optional ApiProvider act_mode_api_provider = 89; - optional string act_mode_api_model_id = 90; - optional int64 act_mode_thinking_budget_tokens = 91; - optional string act_mode_reasoning_effort = 92; - optional LanguageModelChatSelector act_mode_vs_code_lm_model_selector = 93; - optional bool act_mode_aws_bedrock_custom_selected = 94; - optional string act_mode_aws_bedrock_custom_model_base_id = 95; - optional string act_mode_open_router_model_id = 96; - optional OpenRouterModelInfo act_mode_open_router_model_info = 97; - optional string act_mode_open_ai_model_id = 98; - optional OpenAiCompatibleModelInfo act_mode_open_ai_model_info = 99; - optional string act_mode_ollama_model_id = 100; - optional string act_mode_lm_studio_model_id = 101; - optional string act_mode_lite_llm_model_id = 102; - optional LiteLLMModelInfo act_mode_lite_llm_model_info = 103; - optional string act_mode_requesty_model_id = 104; - optional OpenRouterModelInfo act_mode_requesty_model_info = 105; - optional string act_mode_together_model_id = 106; - optional string act_mode_fireworks_model_id = 107; - optional string act_mode_sap_ai_core_model_id = 108; - optional string act_mode_sap_ai_core_deployment_id = 109; - optional string act_mode_groq_model_id = 110; - optional OpenRouterModelInfo act_mode_groq_model_info = 111; - optional string act_mode_baseten_model_id = 112; - optional OpenRouterModelInfo act_mode_baseten_model_info = 113; - optional string act_mode_hugging_face_model_id = 114; - optional OpenRouterModelInfo act_mode_hugging_face_model_info = 115; - optional string act_mode_huawei_cloud_maas_model_id = 116; - optional OpenRouterModelInfo act_mode_huawei_cloud_maas_model_info = 117; - optional string plan_mode_vercel_ai_gateway_model_id = 118; - optional OpenRouterModelInfo plan_mode_vercel_ai_gateway_model_info = 119; - optional string act_mode_vercel_ai_gateway_model_id = 120; - optional OpenRouterModelInfo act_mode_vercel_ai_gateway_model_info = 121; - optional string act_mode_oca_model_id = 122; - optional OcaModelInfo act_mode_oca_model_info = 123; - optional int32 max_consecutive_mistakes = 124; - optional bool subagents_enabled = 125; - optional int32 subagent_terminal_output_line_limit = 126; + optional string ollama_base_url = 13; + optional string ollama_api_options_ctx_num = 14; + optional string lm_studio_base_url = 15; + optional string lm_studio_max_tokens = 16; + optional string anthropic_base_url = 17; + optional string gemini_base_url = 18; + optional string azure_api_version = 19; + optional string open_router_provider_sorting = 20; + optional AutoApprovalSettings auto_approval_settings = 21; + optional BrowserSettings browser_settings = 24; + optional string lite_llm_base_url = 25; + optional bool lite_llm_use_prompt_cache = 26; + optional int32 fireworks_model_max_completion_tokens = 27; + optional int32 fireworks_model_max_tokens = 28; + optional string qwen_api_line = 29; + optional string moonshot_api_line = 30; + optional string zai_api_line = 31; + optional string telemetry_setting = 32; + optional string asksage_api_url = 33; + optional bool plan_act_separate_models_setting = 34; + optional bool enable_checkpoints_setting = 35; + optional int32 request_timeout_ms = 36; + optional int32 shell_integration_timeout = 37; + optional string default_terminal_profile = 38; + optional int32 terminal_output_line_limit = 39; + optional string sap_ai_core_token_url = 40; + optional string sap_ai_core_base_url = 41; + optional string sap_ai_resource_group = 42; + optional bool sap_ai_core_use_orchestration_mode = 43; + optional string claude_code_path = 44; + optional string qwen_code_oauth_path = 45; + optional bool strict_plan_mode_enabled = 46; + optional bool yolo_mode_toggled = 47; + optional bool use_auto_condense = 48; + optional string preferred_language = 49; + optional OpenaiReasoningEffort openai_reasoning_effort = 50; + optional PlanActMode mode = 51; + optional DictationSettings dictation_settings = 52; + optional FocusChainSettings focus_chain_settings = 53; + optional string custom_prompt = 54; + optional string dify_base_url = 55; + optional double auto_condense_threshold = 56; + optional string oca_base_url = 57; + optional ApiProvider plan_mode_api_provider = 58; + optional string plan_mode_api_model_id = 59; + optional int64 plan_mode_thinking_budget_tokens = 60; + optional string plan_mode_reasoning_effort = 61; + optional LanguageModelChatSelector plan_mode_vs_code_lm_model_selector = 62; + optional bool plan_mode_aws_bedrock_custom_selected = 63; + optional string plan_mode_aws_bedrock_custom_model_base_id = 64; + optional string plan_mode_open_router_model_id = 65; + optional OpenRouterModelInfo plan_mode_open_router_model_info = 66; + optional string plan_mode_open_ai_model_id = 67; + optional OpenAiCompatibleModelInfo plan_mode_open_ai_model_info = 68; + optional string plan_mode_ollama_model_id = 69; + optional string plan_mode_lm_studio_model_id = 70; + optional string plan_mode_lite_llm_model_id = 71; + optional LiteLLMModelInfo plan_mode_lite_llm_model_info = 72; + optional string plan_mode_requesty_model_id = 73; + optional OpenRouterModelInfo plan_mode_requesty_model_info = 74; + optional string plan_mode_together_model_id = 75; + optional string plan_mode_fireworks_model_id = 76; + optional string plan_mode_sap_ai_core_model_id = 77; + optional string plan_mode_sap_ai_core_deployment_id = 78; + optional string plan_mode_groq_model_id = 79; + optional OpenRouterModelInfo plan_mode_groq_model_info = 80; + optional string plan_mode_baseten_model_id = 81; + optional OpenRouterModelInfo plan_mode_baseten_model_info = 82; + optional string plan_mode_hugging_face_model_id = 83; + optional OpenRouterModelInfo plan_mode_hugging_face_model_info = 84; + optional string plan_mode_huawei_cloud_maas_model_id = 85; + optional OpenRouterModelInfo plan_mode_huawei_cloud_maas_model_info = 86; + optional string plan_mode_oca_model_id = 87; + optional OcaModelInfo plan_mode_oca_model_info = 88; + optional ApiProvider act_mode_api_provider = 89; + optional string act_mode_api_model_id = 90; + optional int64 act_mode_thinking_budget_tokens = 91; + optional string act_mode_reasoning_effort = 92; + optional LanguageModelChatSelector act_mode_vs_code_lm_model_selector = 93; + optional bool act_mode_aws_bedrock_custom_selected = 94; + optional string act_mode_aws_bedrock_custom_model_base_id = 95; + optional string act_mode_open_router_model_id = 96; + optional OpenRouterModelInfo act_mode_open_router_model_info = 97; + optional string act_mode_open_ai_model_id = 98; + optional OpenAiCompatibleModelInfo act_mode_open_ai_model_info = 99; + optional string act_mode_ollama_model_id = 100; + optional string act_mode_lm_studio_model_id = 101; + optional string act_mode_lite_llm_model_id = 102; + optional LiteLLMModelInfo act_mode_lite_llm_model_info = 103; + optional string act_mode_requesty_model_id = 104; + optional OpenRouterModelInfo act_mode_requesty_model_info = 105; + optional string act_mode_together_model_id = 106; + optional string act_mode_fireworks_model_id = 107; + optional string act_mode_sap_ai_core_model_id = 108; + optional string act_mode_sap_ai_core_deployment_id = 109; + optional string act_mode_groq_model_id = 110; + optional OpenRouterModelInfo act_mode_groq_model_info = 111; + optional string act_mode_baseten_model_id = 112; + optional OpenRouterModelInfo act_mode_baseten_model_info = 113; + optional string act_mode_hugging_face_model_id = 114; + optional OpenRouterModelInfo act_mode_hugging_face_model_info = 115; + optional string act_mode_huawei_cloud_maas_model_id = 116; + optional OpenRouterModelInfo act_mode_huawei_cloud_maas_model_info = 117; + optional string plan_mode_vercel_ai_gateway_model_id = 118; + optional OpenRouterModelInfo plan_mode_vercel_ai_gateway_model_info = 119; + optional string act_mode_vercel_ai_gateway_model_id = 120; + optional OpenRouterModelInfo act_mode_vercel_ai_gateway_model_info = 121; + optional string act_mode_oca_model_id = 122; + optional OcaModelInfo act_mode_oca_model_info = 123; + optional int32 max_consecutive_mistakes = 124; + optional bool subagents_enabled = 125; + optional int32 subagent_terminal_output_line_limit = 126; } message DictationSettings { @@ -369,7 +371,6 @@ message UpdateTerminalConnectionTimeoutResponse { optional int32 timeout_ms = 1; } - message ProcessInfo { int32 process_id = 1; optional string version = 2; diff --git a/proto/cline/task.proto b/proto/cline/task.proto index 64e393ab1e..1e28084ee6 100644 --- a/proto/cline/task.proto +++ b/proto/cline/task.proto @@ -1,11 +1,13 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; import "cline/state.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; service TaskService { // Cancels the currently running task @@ -102,7 +104,7 @@ message TaskItem { // Request for ask response operation message AskResponseRequest { Metadata metadata = 1; - string response_type = 2; + string response_type = 2; string text = 3; repeated string images = 4; repeated string files = 5; diff --git a/proto/cline/ui.proto b/proto/cline/ui.proto index b874f1b814..78b8e04186 100644 --- a/proto/cline/ui.proto +++ b/proto/cline/ui.proto @@ -1,10 +1,12 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; // Enum for ClineMessage type enum ClineMessageType { @@ -198,7 +200,7 @@ message ClineMessage { bool is_operation_outside_workspace = 12; int32 conversation_history_index = 13; ConversationHistoryDeletedRange conversation_history_deleted_range = 14; - + // Additional fields for specific ask/say types ClineSayTool say_tool = 15; ClineSayBrowserAction say_browser_action = 16; @@ -214,52 +216,52 @@ message ClineMessage { service UiService { // Scrolls to a specific settings section in the settings view rpc scrollToSettings(StringRequest) returns (KeyValuePair); - + // Sets the terminal execution mode (vscodeTerminal or backgroundExec) rpc setTerminalExecutionMode(BooleanRequest) returns (KeyValuePair); - + // Marks the current announcement as shown and returns whether an announcement should still be shown rpc onDidShowAnnouncement(EmptyRequest) returns (Boolean); - + // Subscribe to addToInput events (when user adds content via context menu) rpc subscribeToAddToInput(EmptyRequest) returns (stream String); - + // Subscribe to MCP button clicked events rpc subscribeToMcpButtonClicked(EmptyRequest) returns (stream Empty); - + // Subscribe to history button click events rpc subscribeToHistoryButtonClicked(EmptyRequest) returns (stream Empty); - + // Subscribe to chat button clicked events (when the chat button is clicked in VSCode) rpc subscribeToChatButtonClicked(EmptyRequest) returns (stream Empty); - + // Subscribe to account button click events rpc subscribeToAccountButtonClicked(EmptyRequest) returns (stream Empty); - + // Subscribe to settings button clicked events rpc subscribeToSettingsButtonClicked(EmptyRequest) returns (stream Empty); - + // Subscribe to partial message updates (streaming Cline messages as they're built) rpc subscribeToPartialMessage(EmptyRequest) returns (stream ClineMessage); - + // Initialize webview when it launches rpc initializeWebview(EmptyRequest) returns (Empty); - + // Subscribe to relinquish control events rpc subscribeToRelinquishControl(EmptyRequest) returns (stream Empty); - + // Subscribe to focus chat input events rpc subscribeToFocusChatInput(EmptyRequest) returns (stream Empty); - + // Subscribe to webview visibility change events rpc subscribeToDidBecomeVisible(EmptyRequest) returns (stream Empty); // Returns the HTML for the webview index page. This is only used by external clients, not by the vscode webview. rpc getWebviewHtml(EmptyRequest) returns (String); - + // Opens a URL in the default browser rpc openUrl(StringRequest) returns (Empty); - + // Opens the Cline walkthrough rpc openWalkthrough(EmptyRequest) returns (Empty); } diff --git a/proto/cline/web.proto b/proto/cline/web.proto index 1bdc34c5df..272d46475e 100644 --- a/proto/cline/web.proto +++ b/proto/cline/web.proto @@ -1,10 +1,12 @@ syntax = "proto3"; package cline; + import "cline/common.proto"; + option go_package = "github.com/cline/grpc-go/cline"; -option java_package = "bot.cline.proto"; option java_multiple_files = true; +option java_package = "bot.cline.proto"; service WebService { rpc checkIsImageUrl(StringRequest) returns (IsImageUrl); diff --git a/proto/host/diff.proto b/proto/host/diff.proto index db7bf04c83..43395d513c 100644 --- a/proto/host/diff.proto +++ b/proto/host/diff.proto @@ -1,12 +1,13 @@ syntax = "proto3"; package host; -option go_package = "github.com/cline/grpc-go/host"; -option java_package = "bot.cline.host.proto"; -option java_multiple_files = true; import "cline/common.proto"; +option go_package = "github.com/cline/grpc-go/host"; +option java_multiple_files = true; +option java_package = "bot.cline.host.proto"; + // Provides methods for diff views. service DiffService { // Open the diff view/editor. @@ -54,7 +55,7 @@ message GetDocumentTextRequest { } message GetDocumentTextResponse { - optional string content = 1; + optional string content = 1; } message ReplaceTextRequest { diff --git a/proto/host/env.proto b/proto/host/env.proto index 6dcdeb93cc..d4d76429a3 100644 --- a/proto/host/env.proto +++ b/proto/host/env.proto @@ -1,12 +1,13 @@ syntax = "proto3"; package host; -option go_package = "github.com/cline/grpc-go/host"; -option java_package = "bot.cline.host.proto"; -option java_multiple_files = true; import "cline/common.proto"; +option go_package = "github.com/cline/grpc-go/host"; +option java_multiple_files = true; +option java_package = "bot.cline.host.proto"; + // Provides methods for working with the user's environment. service EnvService { // Writes text to the system clipboard. @@ -19,7 +20,7 @@ service EnvService { rpc getHostVersion(cline.EmptyRequest) returns (GetHostVersionResponse); // Returns a URI that will redirect to the host environment. - // e.g. vscode://saoudrizwan.claude-dev, idea://, pycharm://, etc. + // e.g. vscode://saoudrizwan.claude-dev, idea://, pycharm://, etc. // If the host does not support URIs it should return empty. rpc getIdeRedirectUri(cline.EmptyRequest) returns (cline.String); @@ -36,14 +37,14 @@ service EnvService { message GetHostVersionResponse { // The name of the host platform, e.g VSCode, IntelliJ Ultimate Edition, etc. - optional string platform = 1; + optional string platform = 1; // The version of the host platform, e.g. 1.103.0 for VSCode, or 2025.1.1.1 for JetBrains IDEs. optional string version = 2; // The type of the cline host environment, e.g. 'VSCode Extension', 'Cline for JetBrains', 'CLI' // This is different from the platform because there are many JetBrains IDEs, but they all use the same // plugin. optional string cline_type = 3; - // The version of the cline host environment, e.g. 33.2.10 for extension, or 1.0.6 for JetBrains. + // The version of the cline host environment, e.g. 33.2.10 for extension, or 1.0.6 for JetBrains. optional string cline_version = 4; } @@ -57,5 +58,5 @@ message GetTelemetrySettingsResponse { } message TelemetrySettingsEvent { - Setting is_enabled = 1; + Setting is_enabled = 1; } diff --git a/proto/host/testing.proto b/proto/host/testing.proto index 91f100d65e..3492a911f8 100644 --- a/proto/host/testing.proto +++ b/proto/host/testing.proto @@ -1,17 +1,17 @@ syntax = "proto3"; package host; + option go_package = "github.com/cline/grpc-go/host"; -option java_package = "bot.cline.host.proto"; option java_multiple_files = true; +option java_package = "bot.cline.host.proto"; // This is for use in integration tests to get the contents of the webview. service TestingService { rpc getWebviewHtml(GetWebviewHtmlRequest) returns (GetWebviewHtmlResponse); } -message GetWebviewHtmlRequest { -} +message GetWebviewHtmlRequest {} message GetWebviewHtmlResponse { optional string html = 1; diff --git a/proto/host/window.proto b/proto/host/window.proto index 1ad003c9aa..80f2ecccfa 100644 --- a/proto/host/window.proto +++ b/proto/host/window.proto @@ -1,9 +1,10 @@ syntax = "proto3"; package host; + option go_package = "github.com/cline/grpc-go/host"; -option java_package = "bot.cline.host.proto"; option java_multiple_files = true; +option java_package = "bot.cline.host.proto"; // Provides methods for working with IDE windows and editors. service WindowService { @@ -86,7 +87,6 @@ message ShowMessageRequestOptions { repeated string items = 1; optional bool modal = 2; optional string detail = 3; - } message SelectedResponse { diff --git a/proto/host/workspace.proto b/proto/host/workspace.proto index 68bc0b958b..111db03d05 100644 --- a/proto/host/workspace.proto +++ b/proto/host/workspace.proto @@ -1,18 +1,19 @@ syntax = "proto3"; package host; -option go_package = "github.com/cline/grpc-go/host"; -option java_package = "bot.cline.host.proto"; -option java_multiple_files = true; import "cline/common.proto"; +option go_package = "github.com/cline/grpc-go/host"; +option java_multiple_files = true; +option java_package = "bot.cline.host.proto"; + // Provides methods for working with workspaces/projects. service WorkspaceService { // Returns a list of the top level directories of the workspace. rpc getWorkspacePaths(GetWorkspacePathsRequest) returns (GetWorkspacePathsResponse); - // Saves an open document if it's open in the editor and has unsaved changes. + // Saves an open document if it's open in the editor and has unsaved changes. // Returns true if the document was saved, returns false if the document was not found, or did not // need to be saved. rpc saveOpenDocumentIfDirty(SaveOpenDocumentIfDirtyRequest) returns (SaveOpenDocumentIfDirtyResponse); @@ -24,7 +25,7 @@ service WorkspaceService { rpc openProblemsPanel(OpenProblemsPanelRequest) returns (OpenProblemsPanelResponse); // Opens the IDE file explorer panel and selects a file or directory. - rpc openInFileExplorerPanel(OpenInFileExplorerPanelRequest) returns (OpenInFileExplorerPanelResponse); + rpc openInFileExplorerPanel(OpenInFileExplorerPanelRequest) returns (OpenInFileExplorerPanelResponse); // Opens and focuses the Cline sidebar panel in the host IDE. rpc openClineSidebarPanel(OpenClineSidebarPanelRequest) returns (OpenClineSidebarPanelResponse); @@ -53,7 +54,7 @@ message SaveOpenDocumentIfDirtyRequest { optional string file_path = 2; } message SaveOpenDocumentIfDirtyResponse { - // Returns true if the document was saved. + // Returns true if the document was saved. optional bool was_saved = 1; } @@ -67,8 +68,8 @@ message GetDiagnosticsResponse { // Request for host-side workspace search (files/folders) used by mentions autocomplete message SearchWorkspaceItemsRequest { - string query = 1; // Search query string - optional int32 limit = 2; // Optional limit for results (default decided by host) + string query = 1; // Search query string + optional int32 limit = 2; // Optional limit for results (default decided by host) // Optional selected type filter enum SearchItemType { FILE = 0; @@ -80,9 +81,9 @@ message SearchWorkspaceItemsRequest { // Response for host-side workspace search message SearchWorkspaceItemsResponse { message SearchItem { - string path = 1; // Workspace-relative path using platform separators + string path = 1; // Workspace-relative path using platform separators SearchWorkspaceItemsRequest.SearchItemType type = 2; - optional string label = 3; // Optional display label (e.g., basename) + optional string label = 3; // Optional display label (e.g., basename) } repeated SearchItem items = 1; } @@ -100,9 +101,9 @@ message OpenTerminalResponse {} // Execute a command in the terminal message ExecuteCommandInTerminalRequest { - string command = 1; // The command to execute + string command = 1; // The command to execute } message ExecuteCommandInTerminalResponse { - bool success = 1; // Whether the command was successfully sent to the terminal + bool success = 1; // Whether the command was successfully sent to the terminal } diff --git a/scripts/proto-lint.sh b/scripts/proto-lint.sh new file mode 100755 index 0000000000..b8192c5300 --- /dev/null +++ b/scripts/proto-lint.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -u + +buf lint + +if ! buf format -w --exit-code; then + echo Proto files were formatted +fi + +if grep -rn "rpc .*[A-Z][A-Z].*[(]" --include="*.proto"; then + # See https://github.com/cline/cline/pull/7054 + echo Error: Proto RPC names cannot contain repeated capital letters + exit 1 +fi +