Commit Graph

6 Commits

  • code-mode: Remove Session::is_alive() (#29732)
    Remove this unused API. This API is insidious in that it implies that
    alive state should be determinable from the caller, and implies that a
    preflight should indicate routing. Lets drop this, and handle errors
    correctly from a failed session in the future.
  • code-mode: preserve initial yield at completion (#29289)
    ## Summary
    
    - Retain the first pre-observation `yield_control()` boundary when a
    cell completes before observation.
    - Deliver the preserved yield before the buffered completion.
    - Keep later unattached yields as no-ops.
    
    ## Why
    
    Create followed by the initial wait must preserve the former execute
    response boundary even when the script runs to completion first.
    
    ## Impact
    
    The first wait observes the same initial yield boundary as before create
    and observe were decoupled.
    
    ## Validation
    
    - Focused initial-yield signature regression passed.
    - Stack-tip validation: `just test -p codex-code-mode -p
    codex-code-mode-protocol` (70 passed).
    - Parent branch:
    `cconger/code-mode-runtime-compact-03e2-observation-delivery`.
  • code-mode: make session shutdown authoritative (#29287)
    ## Summary
    
    - Give each session and cell a hierarchical cancellation token.
    - Track cell tasks so shutdown waits for admitted actors without polling
    the registry.
    - Make shutdown authoritative across concurrent admission and
    non-cooperative callbacks.
    
    ## Why
    
    A best-effort registry scan can miss cells admitted concurrently or
    blocked behind the registry lock.
    
    ## Impact
    
    Session shutdown reliably stops every admitted cell and rejects new work
    once shutdown begins.
    
    ## Validation
    
    - Stack-tip validation: `just test -p codex-code-mode -p
    codex-code-mode-protocol` (70 passed).
    - Parent branch: `cconger/code-mode-runtime-compact-03c-terminal-state`.
  • code-mode: linearize cell terminal state (#29286)
    ## Summary
    
    - Introduce a single cell terminal-state machine for completion and
    termination.
    - Make stored-value commits atomic with the winning terminal outcome.
    - Buffer terminal results for later observation and cover
    termination-before-commit behavior.
    
    ## Why
    
    Completion, termination, observation, and stored-value updates must
    agree on one linearized outcome under cancellation races.
    
    ## Impact
    
    Terminal delivery becomes deterministic and terminated cells cannot
    commit state after termination wins.
    
    ## Validation
    
    - Focused terminal-state regression passed.
    - Stack-tip validation: `just test -p codex-code-mode -p
    codex-code-mode-protocol` (70 passed).
    - Parent branch:
    `cconger/code-mode-runtime-compact-03b-session-runtime`.
  • code-mode: move session ownership into runtime (#29285)
    ## Summary
    
    - Move code-mode cell ownership and shared stored values from
    `CodeModeService` into `SessionRuntime`.
    - Keep the protocol-facing execute/wait behavior behind the existing
    service adapter.
    - Add runtime-level ownership and isolation coverage.
    
    ## Why
    
    This establishes a transport-neutral session boundary before later
    lifecycle and create/observe changes.
    
    ## Impact
    
    No intended model-facing behavior change. This is an ownership and
    layering refactor.
    
    ## Validation
    
    - Stack-tip validation: `just test -p codex-code-mode -p
    codex-code-mode-protocol` (70 passed).
    - Parent branch: `cconger/code-mode-runtime-compact-03a-runtime-types`.
  • code-mode: define transport-neutral runtime types (#29170)
    ## Summary
    
    - introduce a private `session_runtime` boundary for cell creation
    requests, observation modes, lifecycle events, output items, and tool
    metadata
    - update the cell actor and in-process service to use those
    transport-neutral types
    - keep cell ID allocation on the owning session side
    
    ## Motivation
    
    Cell lifecycle vocabulary currently lives inside the cell actor
    implementation. That makes the service adapter and future session
    runtime depend on actor-specific types, increasing the size and
    complexity of the runtime ownership change.
    
    This is the first reviewable slice of the session-runtime stack. It
    separates the transport-neutral data model without moving lifecycle
    ownership or changing behavior.
    
    Later slices will move session state behind this boundary, harden
    terminal and shutdown behavior, and split cell creation from
    observation.
    
    ## Behavior
    
    There are no public API or user-visible behavior changes in this PR.
    
    In particular:
    
    - `CodeModeSession::execute` and `wait` are unchanged
    - cell IDs remain allocated by the owning session
    - cell admission, observation, termination, and shutdown behavior are
    unchanged