import type { CodexAppTurnInput } from '../../types.js'; export interface CodexVersion { major: number; minor: number; patch: number; } export interface CodexAppTurnStartParams { threadId: string; input: Array>; cwd: string; approvalPolicy: 'never'; sandboxPolicy: { type: 'dangerFullAccess'; }; additionalContext?: CodexAppTurnInput['additionalContext']; clientUserMessageId?: string; } /** Resolve a runner `final` marker without ever mistaking Codex app-server's * native turn id for botmux's stable logical turn. Legacy runner envelopes do * not carry a client id, so the worker-owned current turn is their authority. */ export declare function resolveCodexAppFinalTurnIdentity(payload: { turnId?: unknown; nativeTurnId?: unknown; }, currentBotmuxTurnId: string | undefined, fallbackTurnId: string): { ok: true; turnId: string; nativeTurnId?: string; } | { ok: false; reason: 'turn_mismatch'; markerTurnId: string; currentBotmuxTurnId?: string; }; export declare function parseCodexVersion(output: string): CodexVersion | undefined; export declare function codexVersionAtLeast(version: CodexVersion, major: number, minor: number, patch: number): boolean; /** additionalContext first shipped in 0.135.0; clientUserMessageId followed in * 0.136.0. Older serde structs can silently ignore unknown fields, so callers * must gate before replacing the legacy prompt rather than relying on errors. */ export declare function supportsCodexAppCleanInput(version: CodexVersion | undefined): boolean; export declare function supportsClientUserMessageId(version: CodexVersion | undefined): boolean; export declare function isCodexAppTurnInput(value: unknown): value is CodexAppTurnInput; export declare function buildCodexAppTurnStartParams(opts: { threadId: string; cwd: string; legacyContent: string; codexAppInput?: CodexAppTurnInput; codexVersion?: CodexVersion; structuredDisabled?: boolean; pathExists?: (path: string) => boolean; }): { params: CodexAppTurnStartParams; structured: boolean; skippedImages: string[]; }; /** Safe retry is intentionally narrow. A protocol-level rejection naming the * experimental field means the request did not start a turn. Generic transport, * timeout, model, or turn errors must never be retried (duplicate work risk). */ export declare function isCleanInputCapabilityError(error: unknown): boolean; //# sourceMappingURL=codex-app-turn.d.ts.map