export type Injector = (text: string) => void | Promise<void>;
export interface DispatchOptions {
    projectFolder: string;
    basename: string;
    nodeId: string;
    expectedIter: number;
    injector: Injector;
    prompt: string;
    beforeSnapshot: Record<string, unknown>;
    outputs: string[];
    whitelist: string[];
    signal: AbortSignal;
    timeoutMs?: number;
    getTerminalRef?: () => object | null;
}
export type DispatchResult = {
    kind: 'success';
    newSnapshot: Record<string, unknown>;
    varsDiff: {
        key: string;
        old: unknown;
        new: unknown;
    }[];
    missingOutputs?: string[];
} | {
    kind: 'failed';
    reason: string;
} | {
    kind: 'cancelled';
};
/**
 * v-j 起的完成判定：
 *   1. 写 cwd train.json snapshot（业务变量）
 *   2. inject prompt — 系统指令告诉 LLM 完成后改 `.ccweb/tracks/<basename>.run-state.json`
 *      中 nodes[nodeId].done=true，或失败时 nodes[nodeId].failed=true + reason='...'
 *   3. polling run-state.json mtime；每次变化读 nodes[nodeId]：
 *        - failed=true → 立即 kind:'failed' + LLM 给的 reason
 *        - done=true → kind:'success'，仍读 train.json 拿 varsDiff；outputs 检查降级
 *          为 missingOutputs warning（不阻进下一节点，由 runtime 选择处理）
 *   4. timeout / signal aborted / PTY ref 变化 走原有 fail-fast 路径
 *
 * **不再**依赖 train.json mtime 作为完成信号 —— LLM 多步调用过程中会反复改 train.json，
 * mtime 触发完成会让 LLM 第一次 Edit 就被强制结束节点。
 */
export declare function dispatchLlmCall(opts: DispatchOptions): Promise<DispatchResult>;
//# sourceMappingURL=llm-dispatcher.d.ts.map