import { type JsonRecord } from "../utils/value.js"; import type { CodexPlanUpdate, CodexRequestParams, CodexTurn } from "./codex-protocol.js"; import type { AgentEmit, AgentPermissionMode } from "./types.js"; export type CodexModelSettings = { model?: string; reasoningEffort?: string; }; export type CodexAppPhase = "spawn" | "initialize" | "idle" | "thread/start" | "turn/start" | "turn/running" | "terminating" | "exited"; export type CodexAppProcessFailureDetails = { phase: CodexAppPhase | string; code: number | null; signal: NodeJS.Signals | null; stderr: string; cause?: unknown; source?: "spawn" | "exit" | "stdin" | "timeout"; diagnosticId?: string; cleanupConfirmed?: boolean; cleanupBarrier?: Promise; }; /** 可安全向网页和本机状态暴露的 app-server 进程故障。 */ export declare class CodexAppProcessError extends Error { readonly phase: string; readonly code: number | null; readonly signal: NodeJS.Signals | null; readonly stderr: string; readonly source: "spawn" | "exit" | "stdin" | "timeout"; readonly diagnosticId: string; cleanupConfirmed: boolean; cleanupBarrier?: Promise; constructor(details: CodexAppProcessFailureDetails); } export declare function isCodexAppProcessError(error: unknown): error is CodexAppProcessError; /** 去掉凭证、图片、用户目录及控制符,只保留有界的 stderr 尾部。 */ export declare function sanitizeCodexDiagnosticText(value: unknown, maxChars?: number): string; /** Append stderr only after redaction so the in-memory tail never holds raw payloads. */ export declare function appendCodexDiagnosticTail(current: string, chunk: unknown, maxChars?: number): string; /** 封装 Codex app-server 的 JSON-RPC 通信与事件转换。 */ export declare class CodexAppClient { private child; private emit; private onExit; private nextId; private buffer; private currentThreadId; private currentTurnId; private textOnlyThreadId; private textOnlyTurnStarted; private imageInputThreadId; private imageInputFiles; private imageInputTurnStarted; private textByItem; private lastUsage; private pending; private activeTurns; private completedTurns; private finalTextByTurn; private pendingDeltas; private plansByTurn; private approvalRequests; private phase; private stderrTail; private logicalClosed; private osExitSeen; private failDelivered; private terminationExpected; private exitDelivered; private terminalError; private exitPromise; private resolveExit; /** 保存 app-server 子进程和事件出口。 */ private constructor(); /** 启动并初始化 Codex app-server。 */ static start(emit: AgentEmit, onExit: () => void, initializeTimeoutMs?: number): Promise; /** 创建新的 Codex 线程。 */ startThread(cwd?: string, permissionMode?: AgentPermissionMode, modelSettings?: CodexModelSettings): Promise; /** A private one-turn text task cannot inherit integrations or gain access to the customer's workspace. */ startTextOnlyThread(cwd?: string, modelSettings?: CodexModelSettings): Promise; startTextOnlyTurn(threadId: string, prompt: string, outputSchema: JsonRecord, modelSettings?: CodexModelSettings): Promise; /** One attached-image turn with exactly the same zero-tool restrictions as text-only work. */ startImageInputThread(cwd: string, images: string[], modelSettings?: CodexModelSettings): Promise; startImageInputTurn(threadId: string, prompt: string, outputSchema: JsonRecord, modelSettings?: CodexModelSettings): Promise; /** 恢复已有 Codex 线程。 */ resumeThread(threadId: string, cwd?: string, permissionMode?: AgentPermissionMode, modelSettings?: CodexModelSettings): Promise; /** 查询 Codex 线程列表。 */ listThreads(params: CodexRequestParams<"thread/list">): Promise<{ data: import("./codex-protocol.js").CodexThread[]; nextCursor: string | null; backwardsCursor: string | null; }>; /** 读取指定 Codex 线程。 */ readThread(threadId: string, includeTurns?: boolean): Promise<{ thread: import("./codex-protocol.js").CodexThread; }>; /** 归档指定 Codex 线程。 */ archiveThread(threadId: string): Promise>; /** 返回指定线程在当前进程中收到的最新任务计划。 */ planUpdates(threadId: string): CodexPlanUpdate[]; /** 清理已归档线程的任务计划缓存。 */ clearPlanUpdates(threadId: string): void; /** 启动一个 Codex turn 并等待完成通知。 */ startTurn(threadId: string, prompt: string, images: string[], permissionMode: AgentPermissionMode, onTurn?: (turnId: string) => void, outputSchema?: JsonRecord, modelSettings?: CodexModelSettings): Promise; /** 中断当前正在运行的 Codex turn。 */ interruptCurrentTurn(): Promise; /** 终止失去响应的 app-server,让后续队列可以在新进程继续。 */ terminate(message?: string, diagnostics?: { persistDiagnostic?: boolean; phase?: CodexAppPhase | string; }): Promise; /** 仅供 worker 隔离等待真实 OS exit;不包含 stderr 或其它诊断内容。 */ waitForExit(): Promise; /** 回复网页端已经确认的 Codex 权限请求。 */ resolveApproval(requestId: string, decision: string): boolean; /** 发送 JSON-RPC 请求并保存待处理 Promise。 */ private request; /** 发送无需响应的 JSON-RPC 通知。 */ private notify; /** 将 JSON-RPC 消息写入 app-server 标准输入。 */ private write; /** 按行解析 app-server 标准输出。 */ private read; /** 分派单条 JSON-RPC 响应、请求或通知。 */ private handle; /** 转换并广播 app-server 通知。 */ private handleNotification; /** 合并并广播 Agent 文本或执行输出增量。 */ private emitDelta; /** 合并短时间内的文本增量,减少 SSE 传输和前端渲染次数。 */ private flushDelta; /** * app-server 的流式通知偶尔会在本地重连时丢失。定期读取线程的最终 * 状态,保证被中断的 turn 不会只因少了一条通知而永久占着 Flow C 队列。 */ private scheduleTurnReconciliation; /** 清除 turn 等待器与其轮询计时器。 */ private clearActiveTurn; /** 自动回复 app-server 发起的授权或交互请求。 */ private answerServerRequest; /** 完成指定 JSON-RPC 请求。 */ private resolve; /** 拒绝指定 JSON-RPC 请求。 */ private reject; /** 只在内存保存 stderr 尾部;原文绝不直接发往网页或写入日志。 */ private recordStderr; /** error/exit/stdin 统一且只执行一次的进程收尾。 */ private handleProcessFailure; private noteOsExit; private deliverExit; /** 拒绝进程退出时仍未完成的请求与 turn。 */ private failAll; } /** 只有正常 completed 才能被调用方视为可用脚本。 */ export declare function isTerminalTurnStatus(status: unknown): boolean; /** interrupted 也必须作为失败传回,不能被误当成空的成功响应。 */ export declare function turnFailure(turn: Pick): Error | null; /** 补偿轮询发现终态时,尽量取回已完成的结构化文本。 */ export declare function turnText(turn: CodexTurn): string; /** Disable integrations by name without copying credentials, logs, or normalized nullable transport options. */ export declare function textOnlyCodexConfig(config: JsonRecord, skillPaths: string[], modelSettings?: CodexModelSettings): JsonRecord;