File size: 6,699 Bytes
ea39c0e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | syntax = "proto3";
package codex.code_mode.v1;
// Hosts stateful JavaScript execution and delegates nested tool calls to the
// session owner. Large tool inputs and outputs stay off the session event
// stream so independent HTTP/2 streams can make progress concurrently.
service CodeModeHost {
// Opens a session lease. The first event is always SessionOpened; dropping
// this stream closes the session and terminates its active cells.
rpc OpenSession(OpenSessionRequest) returns (stream SessionEvent);
rpc CloseSession(CloseSessionRequest) returns (CloseSessionResponse);
// Each subscription owns an independent stream of matching invocations. An
// empty tool_names filter matches every tool. Each invocation is routed to
// exactly one matching subscription, even when filters overlap.
rpc SubscribeToToolCalls(SubscribeToToolCallsRequest)
returns (stream ToolCall);
// Each result receives its own HTTP/2 stream, preventing a large response
// from blocking unrelated tool completions or session control events.
rpc CompleteToolCall(CompleteToolCallRequest)
returns (CompleteToolCallResponse);
rpc AcknowledgeNotification(AcknowledgeNotificationRequest)
returns (AcknowledgeNotificationResponse);
// Emits ExecutionStarted immediately, followed by one ExecutionOutcome when
// the execution yields, completes, or is terminated.
rpc Execute(ExecuteRequest) returns (stream ExecuteEvent);
rpc Wait(WaitRequest) returns (WaitResponse);
// Acknowledges that a canceled wait has retired before another wait starts.
rpc CancelWait(CancelWaitRequest) returns (CancelWaitResponse);
rpc Terminate(TerminateRequest) returns (WaitResponse);
}
message OpenSessionRequest {
optional SessionCellExecutionLimits cell_execution_limits = 1;
}
message SessionCellExecutionLimits {
optional uint64 max_yield_time_ms = 1;
optional uint64 max_heap_size_bytes = 2;
}
message SessionEvent {
oneof event {
SessionOpened opened = 1;
ToolCallCancelled tool_call_cancelled = 2;
Notification notification = 3;
NotificationCancelled notification_cancelled = 4;
CellClosed cell_closed = 5;
}
}
message SessionOpened {
string session_id = 1;
}
message CloseSessionRequest {
string session_id = 1;
}
message CloseSessionResponse {}
message SubscribeToToolCallsRequest {
string session_id = 1;
repeated ToolName tool_names = 2;
}
message ToolCall {
string session_id = 1;
// Correlates callbacks with Execute before ExecutionStarted is received.
string execution_id = 2;
string cell_id = 3;
string invocation_id = 4;
string runtime_tool_call_id = 5;
ToolName tool_name = 6;
ToolKind tool_kind = 7;
optional bytes input_json = 8;
// Starts at one and increases independently for each execution.
uint64 sequence = 9;
// The host tool invocation span's W3C parent context for this streamed callback.
// gRPC metadata is fixed when the subscription stream opens, so each call
// carries its own context in the message.
optional string traceparent = 10;
}
message CompleteToolCallRequest {
string session_id = 1;
string invocation_id = 2;
oneof outcome {
ToolCallSucceeded succeeded = 3;
ToolCallFailed failed = 4;
}
}
message ToolCallSucceeded {
bytes output_json = 1;
}
message ToolCallFailed {
string message = 1;
}
message CompleteToolCallResponse {}
message ToolCallCancelled {
string invocation_id = 1;
// Cancellation can arrive before the corresponding ToolCall because session
// control events and tool subscriptions use independent HTTP/2 streams.
}
message Notification {
string notification_id = 1;
string execution_id = 2;
string cell_id = 3;
string call_id = 4;
string text = 5;
}
message NotificationCancelled {
string notification_id = 1;
}
message AcknowledgeNotificationRequest {
string session_id = 1;
string notification_id = 2;
}
message AcknowledgeNotificationResponse {}
message CellClosed {
string execution_id = 1;
string cell_id = 2;
// Last tool-call sequence issued before closure. Clients may retire the cell
// immediately and reject tool calls delivered after its closure.
uint64 final_tool_call_sequence = 3;
}
message ExecuteRequest {
string session_id = 1;
// Chosen by the client so callbacks can be correlated before cell admission.
string execution_id = 2;
string tool_call_id = 3;
string source = 4;
repeated ToolDefinition enabled_tools = 5;
optional uint64 yield_time_ms = 6;
optional uint64 max_output_tokens = 7;
}
message ExecuteEvent {
oneof event {
ExecutionStarted started = 1;
ExecutionOutcome outcome = 2;
}
}
message ExecutionStarted {
string execution_id = 1;
string cell_id = 2;
}
message WaitRequest {
string session_id = 1;
string cell_id = 2;
string wait_id = 3;
uint64 yield_time_ms = 4;
}
message WaitResponse {
oneof state {
ExecutionOutcome live_cell = 1;
ExecutionOutcome missing_cell = 2;
}
}
message CancelWaitRequest {
string session_id = 1;
string wait_id = 2;
}
message CancelWaitResponse {}
message TerminateRequest {
string session_id = 1;
string cell_id = 2;
}
message ExecutionOutcome {
string cell_id = 1;
repeated ContentItem content_items = 2;
// Elapsed monotonic time from receipt of this Execute, Wait, or Terminate
// request until its outcome is ready, before serialization and delivery.
// Includes nested tool waits, but not background time between requests.
// Always supplied by the host; zero is a valid measurement.
uint64 code_mode_host_duration_ns = 6;
oneof outcome {
ExecutionYielded yielded = 3;
ExecutionTerminated terminated = 4;
ExecutionCompleted completed = 5;
}
}
message ExecutionYielded {}
message ExecutionTerminated {}
message ExecutionCompleted {
optional string error_text = 1;
}
message ToolDefinition {
string name = 1;
ToolName tool_name = 2;
string description = 3;
ToolKind kind = 4;
optional bytes input_schema_json = 5;
optional bytes output_schema_json = 6;
}
message ToolName {
string name = 1;
optional string namespace = 2;
}
enum ToolKind {
TOOL_KIND_UNSPECIFIED = 0;
TOOL_KIND_FUNCTION = 1;
TOOL_KIND_FREEFORM = 2;
}
message ContentItem {
oneof item {
TextContent text = 1;
ImageContent image = 2;
AudioContent audio = 3;
}
}
message TextContent {
string text = 1;
}
message ImageContent {
string image_url = 1;
optional ImageDetail detail = 2;
}
message AudioContent {
string audio_url = 1;
}
enum ImageDetail {
IMAGE_DETAIL_UNSPECIFIED = 0;
IMAGE_DETAIL_AUTO = 1;
IMAGE_DETAIL_LOW = 2;
IMAGE_DETAIL_HIGH = 3;
IMAGE_DETAIL_ORIGINAL = 4;
}
|