import type { JsonSchema } from "./anthropic.js"; import { type DialectRefusalSignal } from "./tool-dialects.js"; /** Result of inspecting a buffered native Chat completion for leaked dialect text. */ export type OpenAiChatDialectOutcome = { status: "none"; } | { status: "parsed"; body: Record; dialect: string; } | { status: "detected"; dialect: string; } /** A recovered call names a tool on the operator's destructive list — refused, never committed. */ | { status: "refused-destructive"; dialect: string; refused: string[]; }; type ToolSchemas = Map; export interface RecoveredOpenAiChat { text: string; calls: Array<{ id: string; name: string; input: Record; }>; } /** Optional production seam: validate/repair reconstructed calls before any native bytes emit. */ export type RecoveredOpenAiChatProcessor = (recovered: RecoveredOpenAiChat) => Promise; /** * Recover leaked tool-call text in an otherwise valid, buffered OpenAI Chat completion. * * Existing native `tool_calls` always win. Recovery is parsing only: the closed marker vocabulary * and coercion rules remain owned by `tool-dialects.ts`, and an unparseable marker is reported to * the caller so it can fail the candidate cleanly. */ export declare function inspectDialectInOpenAiChat(input: Record, schemas: ToolSchemas, isDestructive: (name: string) => boolean, processRecovered?: RecoveredOpenAiChatProcessor): Promise; /** * Native OpenAI Chat streaming dialect adapter. * * Text is re-emitted only up to `scanForMarker().safeLen`, so a marker split across deltas never * leaks a prefix. Once a marker lands, the envelope is withheld until it can become native Chat * `tool_calls`; a detected-but-unparseable envelope becomes an OpenAI error frame. The outer * final-wire commit probe then decides whether that error is still an invisible failover or an * honest post-commit stream error. */ export declare function recoverDialectInOpenAiChatStream(upstream: ReadableStream, schemas: ToolSchemas, isDestructive: (name: string) => boolean, onRecovered?: (dialect: string) => void, processRecovered?: RecoveredOpenAiChatProcessor, refusalSignal?: DialectRefusalSignal): ReadableStream; export {};