import type { AgentHarnessRequest } from "../types.js"; /** Turn-scoped capabilities the block explains, each gated by the host. */ export interface SessionContextCapabilities { readonly backgroundSubagents?: boolean; readonly subagentInstances?: readonly { id: string; name: string; route?: string; status: string; turns: number; ageMs: number; jobId?: string; recoveryBlocked?: boolean; pendingQuestion?: { question: string; options?: string[]; }; }[]; /** The host persists memory itself; the model must not edit its state. */ readonly hostManagedMemory?: boolean; /** * `Exec`/`Bash` carry the `background` field on this turn. Must come from the * same predicate that injects the schema — guidance for a capability the * model cannot see is worse than none. */ readonly backgroundProcessJobs?: boolean; /** * `Monitor`/`MonitorStop` are registered on this turn. Must come from the same * predicate that injects them. */ readonly monitors?: boolean; } /** * Host-owned delivery guidance for the current turn. * * The line this block draws is between IDENTITY and ROUTE. Which surface the * turn is on -- DM vs. named channel, and which one -- is model-visible, because * an agent that cannot tell a shared channel from a private DM cannot apply the * behaviour it is configured for. The exact route stays host-owned: the thread to * deliver into, the `replyTo` conversation id, callback URLs, and delivery * tokens. An opted-in MCP server gets an opaque destination-bound claim * capability instead, and a model may promise a later reply only after such a * tool confirms that the continuation was registered. * * The one exception to "never the route" is an interactive console turn (the * web console or the terminal TUI): its conversation id IS disclosed. There the * id is the surface the user is already on rather than a route to a different * one -- no send tool can target another `web:*` thread -- and host-side tools * that bind work to the thread (background jobs, monitors, operator task * records) need the model to quote it. Without it a console turn read as a * scheduled/webhook run and an agent asked to start supervised work could only * reply that it had no conversation to bind it to. */ export declare function sessionContextBlock(request: Pick, capabilities?: SessionContextCapabilities): string; //# sourceMappingURL=session-context.d.ts.map