mirror of
https://github.com/openai/codex.git
synced 2026-10-20 17:38:45 +00:00
Recover gRPC code-mode sessions after missing-session errors (#52235)
## Why A host can reject a request for an unknown session while its lease streams remain open. Keeping that session binding prevents subsequent execution from recovering. ## What changed Invalidate the session when `Execute` (including its response stream), `Wait`, or `Terminate` returns `NOT_FOUND`, allowing the next execution to open a fresh session. Return the failed call's error without replaying execution. Document that these RPCs reserve `NOT_FOUND` for unknown sessions, while `CompleteToolCall` can use it for a missing invocation. ## Testing Add regression coverage for recovery with lease streams still open, no replay of failed execution, and preservation of session state after `INVALID_ARGUMENT`. Add a cancellation-race test confirming that a late tool-completion `NOT_FOUND` leaves the session open. GitOrigin-RevId: 85b38fdbd6d59268447b6aa6a85ea7c60ec869a7
This commit is contained in:
@@ -5,6 +5,10 @@ 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.
|
||||
//
|
||||
// Execute (including its stream), Wait, and Terminate reserve NOT_FOUND for an
|
||||
// unknown session_id. Clients may retire the session binding on this status.
|
||||
// Missing cells use WaitResponse.missing_cell instead.
|
||||
service CodeModeHost {
|
||||
// Opens a session lease. The first event is always SessionOpened; dropping
|
||||
// this stream closes the session and terminates its active cells.
|
||||
@@ -19,6 +23,7 @@ service CodeModeHost {
|
||||
|
||||
// Each result receives its own HTTP/2 stream, preventing a large response
|
||||
// from blocking unrelated tool completions or session control events.
|
||||
// NOT_FOUND may identify a missing invocation rather than a missing session.
|
||||
rpc CompleteToolCall(CompleteToolCallRequest)
|
||||
returns (CompleteToolCallResponse);
|
||||
rpc AcknowledgeNotification(AcknowledgeNotificationRequest)
|
||||
|
||||
Reference in New Issue
Block a user