/** * adapters/hosting/responsesWire — the Responses protocol, as an `HttpWire`. * * ── What this is, and what it deliberately is not ──────────────────────────── * This file speaks the **Responses** wire protocol: a request carries `input` * as text or as message items, a reply is a `response` object with an id and a * status, and a stream is a LIFECYCLE of named events that open the response, * announce output, carry deltas, and close each part before closing the * response itself. * * That protocol is nobody's product. It is the shape a Responses-speaking * client sends and expects, and several hosted runtimes speak it. So it lives * here as a dialect on its own, and the runtimes that CONFIGURE it — their * paths, their ports, their probe bodies, their session aliases — live in their * own files beside this one. Keeping the split means the next runtime that * speaks Responses is a configuration rather than a copy, and it means no * vendor's spelling ends up in the protocol. * * ── The subset ─────────────────────────────────────────────────────────────── * A text turn, streamed or not, with a session. Deliberately not the whole * Responses API: tool calls, reasoning items, image/file input, structured * output and function-call output are NOT carried, and each is REFUSED by name * rather than dropped — a request whose content this dialect cannot represent * is answered 400 before a turn is paid for, never answered 200 with the parts * it happened to understand. * * @example A host that speaks Responses on paths of its own choosing * httpHost({ * name: 'myResponsesHost', * wire: responsesWire({ defaultModel: 'my-agent' }), * invokePath: '/responses', * healthPath: '/health', * }); */ import type { HttpWire } from '../../hosting/httpHost.js'; /** Body fields that may carry a session id, in the order they are consulted. */ export declare const DEFAULT_SESSION_FIELDS: readonly string[]; /** * What a caller is told when a handler THREW. * * A thrown error's message is the author's note to their own logs — a query, a * path, a token in a connection string — and none of it is the caller's. A * handler that CHOSE to fail chose its words for the caller, so those travel * unchanged. The host tells this dialect which happened; it never guesses from * the message. */ export declare const PUBLIC_FAILURE_MESSAGE = "The agent could not complete this request."; export interface ResponsesWireOptions { /** Model label echoed in `response` objects when the request names none. */ readonly defaultModel?: string; /** * Body fields that carry a session id, in precedence order. The first one * present and non-empty wins. Default `['conversation', 'session_id']`. * * A runtime with its own spelling passes its own list — that is the seam a * hosting contract configures rather than forks this file for. */ readonly sessionFields?: readonly string[]; /** Body for the health probe. Default `{ status: 'ok' }`. */ readonly health?: unknown; } type JsonObject = Readonly>; /** The turn's text: a bare string, or the user message items that carry it. */ export declare function readResponsesInput(input: unknown): string; /** The session this request claims, by whichever of its aliases it used. */ export declare function readResponsesSession(body: JsonObject, fields: readonly string[]): string | undefined; /** * An `HttpWire` speaking the Responses protocol. * * Pair it with `httpHost` and the paths your deployment contract names. The * host keeps its own promises — draining, aborting on disconnect, failing a * handler that throws or answers nothing — and this supplies only the dialect. */ export declare function responsesWire(options?: ResponsesWireOptions): HttpWire; export {};