syntax = "proto3";

package axcode.v1;

import "google/protobuf/struct.proto";

service AxCodeHeadless {
  rpc Health(HealthRequest) returns (HealthResponse);

  rpc CreateSession(CreateSessionRequest) returns (JsonResponse);
  rpc SendRuntimeCommand(SendRuntimeCommandRequest) returns (RuntimeCommandResponse);
  rpc LoadBootstrap(BootstrapRequest) returns (JsonResponse);
  rpc LoadSessionEvidence(LoadSessionEvidenceRequest) returns (JsonResponse);

  rpc ListSessions(QueryRequest) returns (JsonResponse);
  rpc GetSessionStatus(QueryRequest) returns (JsonResponse);
  rpc GetSession(SessionRequest) returns (JsonResponse);
  rpc UpdateSession(SessionJsonRequest) returns (JsonResponse);
  rpc DeleteSession(SessionRequest) returns (JsonResponse);
  rpc ListSessionMessages(SessionQueryRequest) returns (JsonResponse);
  rpc GetSessionMessage(SessionMessageRequest) returns (JsonResponse);
  rpc DeleteSessionMessage(SessionMessageRequest) returns (JsonResponse);
  rpc ListSessionChildren(SessionRequest) returns (JsonResponse);
  rpc GetSessionGoal(SessionRequest) returns (JsonResponse);
  rpc GetSessionTodo(SessionRequest) returns (JsonResponse);
  rpc GetSessionDiff(SessionQueryRequest) returns (JsonResponse);
  rpc ForkSession(SessionJsonRequest) returns (JsonResponse);
  rpc ShareSession(SessionRequest) returns (JsonResponse);
  rpc UnshareSession(SessionRequest) returns (JsonResponse);
  rpc SummarizeSession(SessionJsonRequest) returns (JsonResponse);

  rpc ListAgents(QueryRequest) returns (JsonResponse);
  rpc ListSkills(QueryRequest) returns (JsonResponse);
  rpc WriteAppLog(JsonRequest) returns (JsonResponse);
  rpc DisposeInstance(EmptyRequest) returns (JsonResponse);
  rpc RestartInstance(EmptyRequest) returns (JsonResponse);
  rpc ListProjects(QueryRequest) returns (JsonResponse);
  rpc GetCurrentProject(QueryRequest) returns (JsonResponse);
  rpc GetPath(QueryRequest) returns (JsonResponse);
  rpc GetVcs(QueryRequest) returns (JsonResponse);
  rpc ListCommands(QueryRequest) returns (JsonResponse);
  rpc GetProjectContext(QueryRequest) returns (JsonResponse);
  rpc CreateProjectContextTemplate(JsonRequest) returns (JsonResponse);
  rpc WarmupProjectMemory(EmptyRequest) returns (JsonResponse);
  rpc ClearProjectMemory(EmptyRequest) returns (JsonResponse);
  rpc GetDebugEnginePendingPlans(QueryRequest) returns (JsonResponse);
  rpc ListFiles(QueryRequest) returns (JsonResponse);
  rpc ReadFile(QueryRequest) returns (JsonResponse);
  rpc GetFileStatus(QueryRequest) returns (JsonResponse);
  rpc FindText(QueryRequest) returns (JsonResponse);
  rpc FindFiles(QueryRequest) returns (JsonResponse);
  rpc FindSymbols(QueryRequest) returns (JsonResponse);
  rpc ListToolIDs(QueryRequest) returns (JsonResponse);
  rpc ListTools(QueryRequest) returns (JsonResponse);

  rpc ListPermissions(QueryRequest) returns (JsonResponse);
  rpc ReplyPermission(RequestJsonRequest) returns (JsonResponse);
  rpc ListQuestions(QueryRequest) returns (JsonResponse);
  rpc ReplyQuestion(RequestJsonRequest) returns (JsonResponse);
  rpc RejectQuestion(RequestRequest) returns (JsonResponse);

  rpc GetConfig(QueryRequest) returns (JsonResponse);
  rpc UpdateConfig(JsonRequest) returns (JsonResponse);
  rpc ListConfigProviders(QueryRequest) returns (JsonResponse);
  rpc GetAutonomousMode(QueryRequest) returns (JsonResponse);
  rpc SetAutonomousMode(JsonRequest) returns (JsonResponse);
  rpc GetIsolationMode(QueryRequest) returns (JsonResponse);
  rpc SetIsolationMode(JsonRequest) returns (JsonResponse);
  rpc GetSmartLlmRouting(QueryRequest) returns (JsonResponse);
  rpc SetSmartLlmRouting(JsonRequest) returns (JsonResponse);
  rpc GetMcpStatus(QueryRequest) returns (JsonResponse);
  rpc ListMcpResources(QueryRequest) returns (JsonResponse);
  rpc AddMcpServer(McpAddRequest) returns (JsonResponse);
  rpc StartMcpAuth(NamedRequest) returns (JsonResponse);
  rpc CompleteMcpAuth(McpAuthCallbackRequest) returns (JsonResponse);
  rpc AuthenticateMcp(NamedRequest) returns (JsonResponse);
  rpc RemoveMcpAuth(NamedRequest) returns (JsonResponse);
  rpc ConnectMcp(NamedRequest) returns (JsonResponse);
  rpc DisconnectMcp(NamedRequest) returns (JsonResponse);
  rpc ListProviders(QueryRequest) returns (JsonResponse);
  rpc GetProviderAuth(QueryRequest) returns (JsonResponse);
  rpc SetAuth(ProviderAuthRequest) returns (JsonResponse);
  rpc RemoveAuth(ProviderRequest) returns (JsonResponse);
  rpc ProviderOauthAuthorize(ProviderJsonRequest) returns (JsonResponse);
  rpc ProviderOauthCallback(ProviderJsonRequest) returns (JsonResponse);
  rpc GetLspStatus(QueryRequest) returns (JsonResponse);
  rpc GetFormatterStatus(QueryRequest) returns (JsonResponse);

  rpc ListPty(QueryRequest) returns (JsonResponse);
  rpc CreatePty(JsonRequest) returns (JsonResponse);
  rpc GetPty(IdRequest) returns (JsonResponse);
  rpc UpdatePty(IdJsonRequest) returns (JsonResponse);
  rpc RemovePty(IdRequest) returns (JsonResponse);
  rpc ConnectPty(stream PtyClientEvent) returns (stream PtyServerEvent);

  rpc ListTaskQueue(QueryRequest) returns (JsonResponse);
  rpc EnqueueTaskQueue(JsonRequest) returns (JsonResponse);
  rpc EditTaskQueue(IdJsonRequest) returns (JsonResponse);
  rpc TaskQueueCommand(CommandRequest) returns (JsonResponse);
  rpc ReorderTaskQueue(ReorderRequest) returns (JsonResponse);
  rpc RemoveTaskQueue(IdRequest) returns (JsonResponse);

  rpc ListScheduledTasks(QueryRequest) returns (JsonResponse);
  rpc CreateScheduledTask(JsonRequest) returns (JsonResponse);
  rpc UpdateScheduledTask(IdJsonRequest) returns (JsonResponse);
  rpc ScheduledTaskCommand(CommandRequest) returns (JsonResponse);
  rpc RunScheduledTaskNow(IdRequest) returns (JsonResponse);
  rpc RemoveScheduledTask(IdRequest) returns (JsonResponse);

  rpc ListWorkflowTemplates(EmptyRequest) returns (JsonResponse);
  rpc GetWorkflowTemplate(TemplateRequest) returns (JsonResponse);
  rpc SaveWorkflowTemplate(JsonRequest) returns (JsonResponse);
  rpc PromoteWorkflowTemplate(TemplateRequest) returns (JsonResponse);

  rpc ListWorkflowRuns(QueryRequest) returns (JsonResponse);
  rpc WorkflowRunDashboard(QueryRequest) returns (JsonResponse);
  rpc WorkflowRunEvalCases(EmptyRequest) returns (JsonResponse);
  rpc CreateWorkflowRun(JsonRequest) returns (JsonResponse);
  rpc GetWorkflowRun(RunRequest) returns (JsonResponse);
  rpc WorkflowRunArtifacts(RunQueryRequest) returns (JsonResponse);
  rpc WorkflowRunEvalSummary(RunJsonRequest) returns (JsonResponse);
  rpc WorkflowRunEvalCase(RunJsonRequest) returns (JsonResponse);
  rpc SaveWorkflowRunTemplate(RunJsonRequest) returns (JsonResponse);
  rpc WorkflowRunCommand(WorkflowRunCommandRequest) returns (JsonResponse);

  rpc ListWorkflowRoutines(EmptyRequest) returns (JsonResponse);
  rpc RunWorkflowRoutine(JsonRequest) returns (JsonResponse);

  rpc SubscribeEvents(SubscribeEventsRequest) returns (stream RuntimeEvent);
}

message EmptyRequest {}

message HealthRequest {}

message HealthResponse {
  string status = 1;
}

message CreateSessionRequest {
  google.protobuf.Struct session = 1;
}

message SendRuntimeCommandRequest {
  string type = 1;
  string mode = 2;
  string session_id = 3;
  google.protobuf.Struct body = 4;
}

message RuntimeCommandResponse {
  bool accepted = 1;
  uint32 status = 2;
  google.protobuf.Value body = 3;
}

message LoadSessionEvidenceRequest {
  string session_id = 1;
  google.protobuf.Struct parameters = 2;
}

message SessionRequest {
  string session_id = 1;
}

message SessionQueryRequest {
  string session_id = 1;
  google.protobuf.Struct parameters = 2;
}

message SessionJsonRequest {
  string session_id = 1;
  google.protobuf.Struct body = 2;
}

message SessionMessageRequest {
  string session_id = 1;
  string message_id = 2;
}

message BootstrapRequest {
  google.protobuf.Struct include = 1;
  uint32 session_list_start = 2;
}

message JsonRequest {
  google.protobuf.Struct body = 1;
}

message JsonResponse {
  google.protobuf.Value value = 1;
}

message RequestRequest {
  string request_id = 1;
}

message RequestJsonRequest {
  string request_id = 1;
  google.protobuf.Struct body = 2;
}

message ProviderRequest {
  string provider_id = 1;
}

message ProviderJsonRequest {
  string provider_id = 1;
  google.protobuf.Struct body = 2;
}

message ProviderAuthRequest {
  string provider_id = 1;
  google.protobuf.Struct auth = 2;
}

message IdRequest {
  string id = 1;
}

message IdJsonRequest {
  string id = 1;
  google.protobuf.Struct body = 2;
}

message NamedRequest {
  string name = 1;
}

message McpAddRequest {
  string name = 1;
  google.protobuf.Struct config = 2;
}

message McpAuthCallbackRequest {
  string name = 1;
  string code = 2;
}

message QueryRequest {
  google.protobuf.Struct parameters = 1;
}

message CommandRequest {
  string id = 1;
  string command = 2;
}

message ReorderRequest {
  string id = 1;
  int32 position = 2;
}

message TemplateRequest {
  string template_id = 1;
}

message RunRequest {
  string run_id = 1;
}

message RunQueryRequest {
  string run_id = 1;
  google.protobuf.Struct parameters = 2;
}

message RunJsonRequest {
  string run_id = 1;
  google.protobuf.Struct body = 2;
}

message WorkflowRunCommandRequest {
  string run_id = 1;
  string command = 2;
  google.protobuf.Struct body = 3;
}

message SubscribeEventsRequest {
  repeated string types = 1;
  string session_id = 2;
}

message RuntimeEvent {
  string type = 1;
  google.protobuf.Value properties = 2;
  google.protobuf.Value event = 3;
}

message PtyClientEvent {
  string pty_id = 1;
  uint32 cursor = 2;
  string type = 3;
  string data = 4;
  uint32 cols = 5;
  uint32 rows = 6;
  uint32 code = 7;
  string reason = 8;
}

message PtyServerEvent {
  string type = 1;
  string data = 2;
  uint32 cursor = 3;
  uint32 from = 4;
  google.protobuf.Struct gap = 5;
  uint32 code = 6;
  string reason = 7;
}
