/** * Wire types shared by the gateway host UI service (`src/gateway/ui.ts`) * and the browser client (`src/client/*`). Pure data interfaces with zero * imports so both compile units can consume them safely. * * @module dsh-subagent-codex-plus/shared/types */ /** One queued Codex submission as the browser sees it. */ export interface GatewayQueueItemView { /** App-server queue submission id. */ readonly id: string; /** Human-readable text of the queued submission. */ readonly text: string; } /** One durable dsh session ↔ Codex thread binding. */ export interface GatewayBindingView { readonly sessionId: string; readonly codexThreadId: string; } /** Per-session gateway state snapshot. */ export interface GatewaySessionView { readonly sessionId: string; /** Whether this session is currently attached (live gateway). */ readonly attached: boolean; /** Durable Codex thread id when attached or bound. */ readonly threadId?: string; /** CodexGateway phase: stopped | starting | ready | failed. */ readonly phase: string; /** Whether a Codex turn is currently running. */ readonly running: boolean; /** * Codex tool call currently executing while a turn is running (long-tool * heartbeat). Present only while a tool item is open; clients derive the * elapsed time from `startedAt` so the "已运行 X 分 Y 秒" line ticks live. */ readonly tool?: { /** Tool name as reported by Codex (e.g. `shell_command`). */ readonly name: string; /** Epoch ms when the tool call started. */ readonly startedAt: number; }; /** Pending queue (FIFO order). */ readonly queue: readonly GatewayQueueItemView[]; /** Last action error surfaced to the UI, if any. */ readonly error?: string; } /** Response of `GET /api/codex-plus/state`. */ export interface GatewayStateResponse { readonly ok: true; /** State of the requested session, or null when it is not live. */ readonly session: GatewaySessionView | null; /** Every durable binding (for cross-session display). */ readonly bindings: readonly GatewayBindingView[]; } /** Response of any `/api/codex-plus/*` action. */ export interface GatewayActionResponse { readonly ok: boolean; readonly error?: string; /** Refreshed session state after the action, when a session was addressed. */ readonly session?: GatewaySessionView | null; } /** Request body of `POST /api/codex-plus/attach`. */ export interface GatewayAttachRequest { readonly sessionId: string; /** Optional existing Codex thread to resume; absent creates one. */ readonly threadId?: string; } /** Request body of session-addressed actions. */ export interface GatewaySessionRequest { readonly sessionId: string; } /** Request body of `POST /api/codex-plus/queue/delete`. */ export interface GatewayQueueDeleteRequest extends GatewaySessionRequest { readonly id: string; } /** Request body of `POST /api/codex-plus/queue/update`. */ export interface GatewayQueueUpdateRequest extends GatewaySessionRequest { /** Queue submission id whose input text is replaced. */ readonly id: string; /** New text for the queued submission. */ readonly text: string; } /** Request body of `POST /api/codex-plus/queue/reorder`. */ export interface GatewayQueueReorderRequest extends GatewaySessionRequest { /** New FIFO order of queue submission ids. */ readonly ids: readonly string[]; } /** Request body of `POST /api/codex-plus/steer`. */ export interface GatewaySteerRequest extends GatewaySessionRequest { /** Text inserted directly into the active turn (not queued). */ readonly text: string; }