syntax = "proto3"; package sunbeam.code.v1; // Sol's coding agent service. Bidirectional streaming between // the `sunbeam code` TUI client and Sol's server-side agent loop. service CodeAgent { rpc Session(stream ClientMessage) returns (stream ServerMessage); } // ── Client → Sol ─────────────────────────────────────────────── message ClientMessage { oneof payload { StartSession start = 1; UserInput input = 2; ToolResult tool_result = 3; ToolApproval approval = 4; EndSession end = 5; } } message StartSession { string project_path = 1; string prompt_md = 2; string config_toml = 3; string git_branch = 4; string git_status = 5; repeated string file_tree = 6; string model = 7; repeated ToolDef client_tools = 8; } message UserInput { string text = 1; } message ToolResult { string call_id = 1; string result = 2; bool is_error = 3; } message ToolApproval { string call_id = 1; bool approved = 2; } message EndSession {} // ── Sol → Client ─────────────────────────────────────────────── message ServerMessage { oneof payload { SessionReady ready = 1; TextDelta delta = 2; TextDone done = 3; ToolCall tool_call = 4; ApprovalNeeded approval = 5; Status status = 6; SessionEnd end = 7; Error error = 8; } } message SessionReady { string session_id = 1; string room_id = 2; string model = 3; bool resumed = 4; repeated HistoryEntry history = 5; } message HistoryEntry { string role = 1; // "user" or "assistant" string content = 2; } message TextDelta { string text = 1; } message TextDone { string full_text = 1; uint32 input_tokens = 2; uint32 output_tokens = 3; } message ToolCall { string call_id = 1; string name = 2; string args_json = 3; bool is_local = 4; bool needs_approval = 5; } message ApprovalNeeded { string call_id = 1; string name = 2; string args_json = 3; string summary = 4; } message Status { string message = 1; StatusKind kind = 2; } enum StatusKind { INFO = 0; TOOL_RUNNING = 1; TOOL_DONE = 2; THINKING = 3; } message SessionEnd { string summary = 1; } message Error { string message = 1; bool fatal = 2; } message ToolDef { string name = 1; string description = 2; string schema_json = 3; }