codex-rs/app-server-client/README.md
Shared in-process app-server client used by conversational CLI surfaces:
codex-execcodex-tuiThis crate centralizes startup and lifecycle management for an in-process
codex-app-server runtime, so CLI clients do not need to duplicate:
Callers pass both the app-server SessionSource and the initialize
client_info.name explicitly when starting the facade.
That keeps thread metadata (for example in thread/list and thread/read)
aligned with the originating runtime without baking TUI/exec-specific policy
into the shared client layer.
The in-process path uses typed channels:
ClientRequest / ClientNotificationInProcessServerEvent
ServerRequestServerNotificationLegacyNotificationJSON serialization is still used at external transport boundaries (stdio/websocket), but the in-process hot path is typed.
Typed requests still receive app-server responses through the JSON-RPC result envelope internally. That is intentional: the in-process path is meant to preserve app-server semantics while removing the process boundary, not to introduce a second response contract.
The client facade starts an already-initialized in-process runtime, but thread bootstrap still follows normal app-server flow:
thread/start or thread/resumeSessionConfigured
legacy eventSurfaces such as TUI and exec may therefore need a short bootstrap phase where they reconcile startup response data with later events.
DEFAULT_IN_PROCESS_CHANNEL_CAPACITY by default.shutdown() performs a bounded graceful shutdown and then aborts if timeout
is exceeded.If the client falls behind on event consumption, the worker emits
InProcessServerEvent::Lagged and may reject pending server requests so
approval flows do not hang indefinitely behind a saturated queue.