sub2api/proto/src/exa/extension_server_pb/extension_server.proto
win 84555dcb44 feat: Complete Phase 1 upstream API integration with real Anthropic API calls
- Injected HTTPUpstream service into LanguageServerService
- Implemented real upstream API requests via callUpstreamAPI()
- Added SSE streaming response handler for streaming messages
- Complete error handling and structured logging
- Support for masquerading headers (User-Agent, Authorization)
- Request/response body marshaling and streaming
- Thread-safe session management with metadata storage

Core implementation:
- LanguageServerService now depends on HTTPUpstream for all HTTP operations
- HTTP requests sent to configured Anthropic API endpoint
- SSE event parsing and forwarding to clients via update channels
- Proper context and timeout handling for streaming operations

Phase 1 Status: 95% complete
- Upstream API integration:  DONE
- Wire dependency injection:  TODO
- Masquerading layer:  TODO (Phase 2)

Next steps:
1. Add Wire provider for LanguageServerService
2. Register HTTP routes in application startup
3. Implement device fingerprinting and token refresh
4. End-to-end testing with real Anthropic API

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-04-10 21:10:45 +08:00

585 lines
18 KiB
Protocol Buffer

syntax = "proto3";
package exa.extension_server_pb;
option go_package = "github.com/user/antigravity-client/gen/exa/extension_server_pb";
import "exa/codeium_common_pb/codeium_common.proto";
import "exa/gemini_coder/proto/trajectory.proto";
import "exa/jetski_cortex_pb/jetski_cortex.proto";
import "exa/language_server_pb/language_server.proto";
import "exa/unified_state_sync_pb/unified_state_sync.proto";
enum ActiveEditorType {
ACTIVE_EDITOR_TYPE_UNSPECIFIED = 0;
ACTIVE_EDITOR_TYPE_TEXT_EDITOR = 1;
ACTIVE_EDITOR_TYPE_TERMINAL = 2;
}
enum SoundType {
SOUND_TYPE_UNSPECIFIED = 0;
SOUND_TYPE_CASCADE_DONE = 1;
}
enum EditNotebookOperation {
EDIT_NOTEBOOK_OPERATION_UNSPECIFIED = 0;
EDIT_NOTEBOOK_OPERATION_INSERT_AFTER = 1;
EDIT_NOTEBOOK_OPERATION_INSERT_BEFORE = 2;
EDIT_NOTEBOOK_OPERATION_REPLACE_CELLS = 3;
EDIT_NOTEBOOK_OPERATION_DELETE_CELLS = 4;
EDIT_NOTEBOOK_OPERATION_OVERWRITE_NOTEBOOK = 5;
}
message IsAgentManagerEnabledRequest {
}
message IsAgentManagerEnabledResponse {
bool enabled = 1;
}
message ConversationPickerRequest {
exa.jetski_cortex_pb.CascadeTrajectorySummaries summaries = 1;
string current_cascade_id = 2;
string current_workspace_normalized_path = 3;
string current_workspace_uri = 4;
}
message ConversationPickerResponse {
optional string chat_message = 1;
optional string selected_cascade_id = 2;
repeated string deleted_cascade_ids = 3;
}
message StartAudioRecordingRequest {
}
message EndAudioRecordingRequest {
}
message EndAudioRecordingResponse {
string transcription = 1;
}
message StartAudioRecordingResponse {
}
message GetCurrentAudioRecordingRequest {
}
message GetCurrentAudioRecordingResponse {
float average_volume = 2;
}
message LanguageServerStartedRequest {
int32 https_port = 1;
int32 lsp_port = 2;
string csrf_token = 4;
int32 http_port = 5;
}
message LanguageServerStartedResponse {
}
message OpenSettingRequest {
string setting_id = 1;
}
message OpenSettingResponse {
}
message OpenFilePointerRequest {
string file_uri = 1;
int32 start_line = 2;
int32 start_col = 3;
int32 end_line = 4;
int32 end_col = 5;
bool is_cascade_diff = 6;
}
message OpenFilePointerResponse {
}
message InsertCodeAtCursorRequest {
string text = 1;
exa.extension_server_pb.ActiveEditorType editor_type = 2;
}
message InsertCodeAtCursorResponse {
}
message EventMetadataRecord {
string key = 1;
string value = 2;
}
message LogEventRequest {
exa.codeium_common_pb.ProductEventType event = 1;
string event_string = 3;
repeated exa.extension_server_pb.EventMetadataRecord metadata = 2;
}
message LogEventResponse {
}
message CheckTerminalShellSupportRequest {
}
message CheckTerminalShellSupportResponse {
bool has_shell_integration = 1;
string shell_name = 2;
string shell_path = 3;
}
message ExecuteCommandRequest {
string command_line = 5;
string cwd = 3;
string terminal_id = 4;
bool sandbox_override = 6;
optional string conversation_id = 7;
}
message ShowTerminalRequest {
string terminal_id = 1;
}
message ShowTerminalResponse {
}
message OpenVirtualFileRequest {
string text = 1;
bool show_markdown_preview = 2;
}
message OpenVirtualFileResponse {
}
message SaveDocumentRequest {
string uri = 1;
optional string conversation_id = 2;
}
message SaveDocumentResponse {
}
message ReadTerminalRequest {
string process_id = 1;
optional string conversation_id = 2;
}
message ReadTerminalResponse {
string contents = 1;
}
message OpenTerminalRequest {
string process_id = 1;
}
message OpenTerminalResponse {
}
message SendTerminalInputRequest {
string terminal_id = 1;
string input = 2;
optional string conversation_id = 3;
}
message SendTerminalInputResponse {
bool success = 1;
optional string error = 2;
}
message TerminateCommandRequest {
string terminal_id = 1;
optional string conversation_id = 2;
}
message TerminateCommandResponse {
}
message GetLintErrorsRequest {
message AwaitNewLintsConfig {
string acknowledger_id = 1;
int32 timeout_ms = 2;
int32 grace_period_ms = 3;
bool include_saved = 4;
}
optional exa.extension_server_pb.GetLintErrorsRequest.AwaitNewLintsConfig await_new_lints_config = 1;
optional string conversation_id = 5;
}
message GetLintErrorsResponse {
repeated exa.codeium_common_pb.CodeDiagnostic lint_errors = 1;
repeated exa.codeium_common_pb.CodeDiagnostic persistent_lint_errors = 2;
}
message OpenDiffZonesRequest {
string cascade_id = 1;
repeated exa.language_server_pb.ValidationState validation_states = 2;
bool write_new_state = 3;
repeated uint32 step_indices = 4;
optional string trace_id = 5;
}
message OpenDiffZonesResponse {
}
message OpenExternalUrlRequest {
string url = 1;
bool use_ide_browser = 2;
}
message OpenExternalUrlResponse {
}
message HandleAsyncPostMessageRequest {
string message_type = 1;
string message_content = 2;
}
message HandleAsyncPostMessageResponse {
string response_content = 1;
}
message PlaySoundRequest {
exa.extension_server_pb.SoundType sound_type = 1;
}
message PlaySoundResponse {
}
message OpenAntigravityRulesFileRequest {
bool is_workspace_rules = 1;
}
message OpenAntigravityRulesFileResponse {
}
message OpenPluginPageRequest {
string plugin_id = 4;
}
message OpenPluginPageResponse {
}
message OpenPluginConfigModalRequest {
string plugin_id = 3;
}
message OpenPluginConfigModalResponse {
}
message TerminalResearchResultRequest {
gemini_coder.Step last_step = 1;
}
message TerminalResearchResultResponse {
}
message OpenConfigurePluginsPageRequest {
}
message OpenConfigurePluginsPageResponse {
}
message WriteCascadeEditRequest {
string uri = 1;
string target_content = 2;
}
message WriteCascadeEditResponse {
}
message EditNotebookRequest {
message Cell {
string kind = 1;
string content = 2;
}
string absolute_path_uri = 1;
exa.extension_server_pb.EditNotebookOperation operation = 2;
string anchor_cell_id = 3;
int32 anchor_cell_index = 4;
repeated exa.extension_server_pb.EditNotebookRequest.Cell cells = 5;
int32 delete_count = 6;
}
message EditNotebookResponse {
message ModifiedCell {
string cell_id = 1;
string kind = 2;
string content = 3;
int32 index = 4;
}
repeated exa.extension_server_pb.EditNotebookResponse.ModifiedCell modified_cells = 1;
int32 total_cell_count = 2;
}
message ReadNotebookRequest {
string absolute_path_uri = 1;
repeated int32 cell_indices = 2;
repeated string cell_ids = 3;
}
message ReadNotebookResponse {
string flattened_content = 1;
int32 read_cell_count = 2;
}
message ExecuteNotebookRequest {
string absolute_path_uri = 1;
repeated string cell_ids = 2;
repeated int32 cell_indices = 3;
bool stop_on_error = 4;
bool restart_kernel = 5;
}
message ExecuteNotebookResponse {
enum CellStatus {
CELL_STATUS_UNSPECIFIED = 0;
CELL_STATUS_SUCCESS = 1;
CELL_STATUS_FAILURE = 2;
}
enum ExecutionStatus {
EXECUTION_STATUS_UNSPECIFIED = 0;
EXECUTION_STATUS_SUCCESS = 1;
EXECUTION_STATUS_FAILURE = 2;
EXECUTION_STATUS_PARTIAL_SUCCESS = 3;
}
message CellOutput {
string cell_id = 1;
int32 cell_index = 2;
exa.extension_server_pb.ExecuteNotebookResponse.CellStatus status = 3;
string output_text = 4;
bool output_text_truncated = 5;
bool generated_images = 6;
string error_trace = 7;
}
exa.extension_server_pb.ExecuteNotebookResponse.ExecutionStatus status = 1;
int32 executed_cells_count = 2;
repeated exa.extension_server_pb.ExecuteNotebookResponse.CellOutput cell_outputs = 3;
string error_trace = 4;
}
message OpenConversationWorkspaceQuickPickRequest {
string cascade_id = 1;
repeated string workspace_uris = 2;
}
message OpenConversationWorkspaceQuickPickResponse {
bool open_in_current_window = 1;
}
message FindAllReferencesRequest {
string file_uri = 1;
string symbol = 2;
uint32 line = 3;
uint32 occurrence_index = 4;
}
message FindAllReferencesResponse {
repeated exa.codeium_common_pb.LspReference references = 1;
}
message GetDefinitionRequest {
repeated exa.extension_server_pb.GetDefinitionRequestItem request = 1;
}
message GetDefinitionRequestItem {
string file_uri = 1;
exa.codeium_common_pb.DocumentPosition position = 2;
string line_content = 3;
}
message GetDefinitionResponse {
repeated exa.extension_server_pb.GetDefinitionResponseItem response = 1;
}
message GetDefinitionResponseItem {
repeated exa.codeium_common_pb.LspReference definitions = 1;
optional exa.codeium_common_pb.GRPCStatus status = 2;
}
message HandleProposeCodeExtensionVerificationRequest {
gemini_coder.Step step = 1;
}
message HandleProposeCodeExtensionVerificationResponse {
}
message UpdateCascadeTrajectorySummariesRequest {
exa.jetski_cortex_pb.CascadeTrajectorySummaries summaries = 1;
}
message UpdateCascadeTrajectorySummariesResponse {
}
message RunExtensionCodeRequest {
string code = 1;
}
message RunExtensionCodeResponse {
string output = 1;
}
message UpdateDetailedViewWithCascadeInputRequest {
exa.language_server_pb.HandleStreamingCommandRequest request = 1;
exa.language_server_pb.HandleStreamingCommandResponse response = 2;
}
message UpdateDetailedViewWithCascadeInputResponse {
}
message GetSecretValueRequest {
string key = 1;
}
message GetSecretValueResponse {
string value = 1;
}
message StoreSecretValueRequest {
string key = 1;
string value = 2;
}
message StoreSecretValueResponse {
}
message GetBrowserOnboardingPortRequest {
}
message GetBrowserOnboardingPortResponse {
uint32 port = 1;
}
message GetChromeDevtoolsMcpUrlRequest {
}
message GetChromeDevtoolsMcpUrlResponse {
string url = 1;
}
message FocusManagerWindow {
optional string cascade_id = 1;
}
message FocusEditorWindow {
optional string cascade_id = 1;
}
message FocusIDEWindowRequest {
oneof window_type {
exa.extension_server_pb.FocusEditorWindow editor = 1;
exa.extension_server_pb.FocusManagerWindow manager = 2;
}
}
message FocusIDEWindowResponse {
}
message LaunchBrowserRequest {
string extension_path = 1;
bool launch_in_foreground = 2;
}
message LaunchBrowserResponse {
string cdp_address = 1;
}
message RestartUserStatusUpdaterRequest {
}
message RestartUserStatusUpdaterResponse {
}
message RecordErrorRequest {
exa.codeium_common_pb.ErrorTrace error_trace = 1;
}
message RecordErrorResponse {
}
message SubscribeToUnifiedStateSyncTopicRequest {
string topic = 1;
}
message UnifiedStateSyncUpdate {
oneof update_type {
exa.unified_state_sync_pb.Topic initial_state = 1;
exa.unified_state_sync_pb.AppliedUpdate applied_update = 2;
}
}
message PushUnifiedStateSyncUpdateRequest {
exa.unified_state_sync_pb.UpdateRequest update = 1;
}
message PushUnifiedStateSyncUpdateResponse {
}
message BroadcastConversationDeletionRequest {
string deleted_cascade_id = 1;
}
message BroadcastConversationDeletionResponse {
}
message HeartbeatRequest {
}
message HeartbeatResponse {
}
service ExtensionServerService {
rpc LanguageServerStarted(exa.extension_server_pb.LanguageServerStartedRequest) returns (exa.extension_server_pb.LanguageServerStartedResponse);
rpc OpenSetting(exa.extension_server_pb.OpenSettingRequest) returns (exa.extension_server_pb.OpenSettingResponse);
rpc OpenFilePointer(exa.extension_server_pb.OpenFilePointerRequest) returns (exa.extension_server_pb.OpenFilePointerResponse);
rpc InsertCodeAtCursor(exa.extension_server_pb.InsertCodeAtCursorRequest) returns (exa.extension_server_pb.InsertCodeAtCursorResponse);
rpc LogEvent(exa.extension_server_pb.LogEventRequest) returns (exa.extension_server_pb.LogEventResponse);
rpc CheckTerminalShellSupport(exa.extension_server_pb.CheckTerminalShellSupportRequest) returns (exa.extension_server_pb.CheckTerminalShellSupportResponse);
rpc ExecuteCommand(exa.extension_server_pb.ExecuteCommandRequest) returns (stream exa.codeium_common_pb.TerminalShellCommandStreamChunk);
rpc ShowTerminal(exa.extension_server_pb.ShowTerminalRequest) returns (exa.extension_server_pb.ShowTerminalResponse);
rpc SendTerminalInput(exa.extension_server_pb.SendTerminalInputRequest) returns (exa.extension_server_pb.SendTerminalInputResponse);
rpc TerminateCommand(exa.extension_server_pb.TerminateCommandRequest) returns (exa.extension_server_pb.TerminateCommandResponse);
rpc OpenVirtualFile(exa.extension_server_pb.OpenVirtualFileRequest) returns (exa.extension_server_pb.OpenVirtualFileResponse);
rpc SaveDocument(exa.extension_server_pb.SaveDocumentRequest) returns (exa.extension_server_pb.SaveDocumentResponse);
rpc ReadTerminal(exa.extension_server_pb.ReadTerminalRequest) returns (exa.extension_server_pb.ReadTerminalResponse);
rpc OpenTerminal(exa.extension_server_pb.OpenTerminalRequest) returns (exa.extension_server_pb.OpenTerminalResponse);
rpc GetLintErrors(exa.extension_server_pb.GetLintErrorsRequest) returns (exa.extension_server_pb.GetLintErrorsResponse);
rpc OpenDiffZones(exa.extension_server_pb.OpenDiffZonesRequest) returns (exa.extension_server_pb.OpenDiffZonesResponse);
rpc OpenExternalUrl(exa.extension_server_pb.OpenExternalUrlRequest) returns (exa.extension_server_pb.OpenExternalUrlResponse);
rpc HandleAsyncPostMessage(exa.extension_server_pb.HandleAsyncPostMessageRequest) returns (exa.extension_server_pb.HandleAsyncPostMessageResponse);
rpc PlaySound(exa.extension_server_pb.PlaySoundRequest) returns (exa.extension_server_pb.PlaySoundResponse);
rpc OpenAntigravityRulesFile(exa.extension_server_pb.OpenAntigravityRulesFileRequest) returns (exa.extension_server_pb.OpenAntigravityRulesFileResponse);
rpc OpenPluginPage(exa.extension_server_pb.OpenPluginPageRequest) returns (exa.extension_server_pb.OpenPluginPageResponse);
rpc OpenPluginConfigModal(exa.extension_server_pb.OpenPluginConfigModalRequest) returns (exa.extension_server_pb.OpenPluginConfigModalResponse);
rpc OpenConfigurePluginsPage(exa.extension_server_pb.OpenConfigurePluginsPageRequest) returns (exa.extension_server_pb.OpenConfigurePluginsPageResponse);
rpc OpenConversationWorkspaceQuickPick(exa.extension_server_pb.OpenConversationWorkspaceQuickPickRequest) returns (exa.extension_server_pb.OpenConversationWorkspaceQuickPickResponse);
rpc FindAllReferences(exa.extension_server_pb.FindAllReferencesRequest) returns (exa.extension_server_pb.FindAllReferencesResponse);
rpc GetDefinition(exa.extension_server_pb.GetDefinitionRequest) returns (exa.extension_server_pb.GetDefinitionResponse);
rpc TerminalResearchResult(exa.extension_server_pb.TerminalResearchResultRequest) returns (exa.extension_server_pb.TerminalResearchResultResponse);
rpc WriteCascadeEdit(exa.extension_server_pb.WriteCascadeEditRequest) returns (exa.extension_server_pb.WriteCascadeEditResponse);
rpc EditNotebook(exa.extension_server_pb.EditNotebookRequest) returns (exa.extension_server_pb.EditNotebookResponse);
rpc ReadNotebook(exa.extension_server_pb.ReadNotebookRequest) returns (exa.extension_server_pb.ReadNotebookResponse);
rpc ExecuteNotebook(exa.extension_server_pb.ExecuteNotebookRequest) returns (exa.extension_server_pb.ExecuteNotebookResponse);
rpc StartAudioRecording(exa.extension_server_pb.StartAudioRecordingRequest) returns (exa.extension_server_pb.StartAudioRecordingResponse);
rpc EndAudioRecording(exa.extension_server_pb.EndAudioRecordingRequest) returns (exa.extension_server_pb.EndAudioRecordingResponse);
rpc GetCurrentAudioRecording(exa.extension_server_pb.GetCurrentAudioRecordingRequest) returns (exa.extension_server_pb.GetCurrentAudioRecordingResponse);
rpc HandleProposeCodeExtensionVerification(exa.extension_server_pb.HandleProposeCodeExtensionVerificationRequest) returns (exa.extension_server_pb.HandleProposeCodeExtensionVerificationResponse);
rpc UpdateCascadeTrajectorySummaries(exa.extension_server_pb.UpdateCascadeTrajectorySummariesRequest) returns (exa.extension_server_pb.UpdateCascadeTrajectorySummariesResponse);
rpc RunExtensionCode(exa.extension_server_pb.RunExtensionCodeRequest) returns (exa.extension_server_pb.RunExtensionCodeResponse);
rpc UpdateDetailedViewWithCascadeInput(exa.extension_server_pb.UpdateDetailedViewWithCascadeInputRequest) returns (exa.extension_server_pb.UpdateDetailedViewWithCascadeInputResponse);
rpc GetSecretValue(exa.extension_server_pb.GetSecretValueRequest) returns (exa.extension_server_pb.GetSecretValueResponse);
rpc StoreSecretValue(exa.extension_server_pb.StoreSecretValueRequest) returns (exa.extension_server_pb.StoreSecretValueResponse);
rpc LaunchBrowser(exa.extension_server_pb.LaunchBrowserRequest) returns (exa.extension_server_pb.LaunchBrowserResponse);
rpc RestartUserStatusUpdater(exa.extension_server_pb.RestartUserStatusUpdaterRequest) returns (exa.extension_server_pb.RestartUserStatusUpdaterResponse);
rpc ShowConversationPicker(exa.extension_server_pb.ConversationPickerRequest) returns (exa.extension_server_pb.ConversationPickerResponse);
rpc GetBrowserOnboardingPort(exa.extension_server_pb.GetBrowserOnboardingPortRequest) returns (exa.extension_server_pb.GetBrowserOnboardingPortResponse);
rpc GetChromeDevtoolsMcpUrl(exa.extension_server_pb.GetChromeDevtoolsMcpUrlRequest) returns (exa.extension_server_pb.GetChromeDevtoolsMcpUrlResponse);
rpc FocusIDEWindow(exa.extension_server_pb.FocusIDEWindowRequest) returns (exa.extension_server_pb.FocusIDEWindowResponse);
rpc SmartFocusConversation(exa.language_server_pb.SmartFocusConversationRequest) returns (exa.language_server_pb.SmartFocusConversationResponse);
rpc IsAgentManagerEnabled(exa.extension_server_pb.IsAgentManagerEnabledRequest) returns (exa.extension_server_pb.IsAgentManagerEnabledResponse);
rpc RecordError(exa.extension_server_pb.RecordErrorRequest) returns (exa.extension_server_pb.RecordErrorResponse);
rpc SubscribeToUnifiedStateSyncTopic(exa.extension_server_pb.SubscribeToUnifiedStateSyncTopicRequest) returns (stream exa.extension_server_pb.UnifiedStateSyncUpdate);
rpc PushUnifiedStateSyncUpdate(exa.extension_server_pb.PushUnifiedStateSyncUpdateRequest) returns (exa.extension_server_pb.PushUnifiedStateSyncUpdateResponse);
rpc BroadcastConversationDeletion(exa.extension_server_pb.BroadcastConversationDeletionRequest) returns (exa.extension_server_pb.BroadcastConversationDeletionResponse);
rpc Heartbeat(exa.extension_server_pb.HeartbeatRequest) returns (exa.extension_server_pb.HeartbeatResponse);
}