/** * Prazo por nó. * * `node.timeoutMs` é escrito por TODO o caminho de planejamento (templates do * Planner, os quatro modos do Commander, os três nós de tool) e vira * `TaskContract.budget.maxTimeMs`. Nada no runtime lia esses campos: um * provider pendurado ou uma tool externa registrada por `ToolRegistry.register` * travava o nó até o timeout HTTP do cliente de modelo, e uma tool sem cliente * HTTP nenhum travava indefinidamente. Prazo declarado e não aplicado é pior * que prazo ausente, porque o plano afirma um limite que não existe. * * Prazo e CANCELAMENTO andam juntos aqui, e a diferença entre os dois importa: * * - **Prazo** (`timeoutMs`) interrompe a ESPERA de um nó. Ele não cancela a * requisição por si: o que se ganha é o nó parar de bloquear o grafo, e a * falha ser classificável (`timeout` já é `recoverable` no `Healer`). * - **Cancelamento** (`signal`) é do RUN inteiro, e chega até a requisição: o * `AbortSignal` é combinado com o timeout HTTP em `llm/client.ts`, então a * chamada em voo é abortada de verdade em vez de continuar consumindo cota * de um run que ninguém mais espera. Cancelamento antes de começar não gasta * a chamada. * * As duas rejeições são de tipos distintos (`DeadlineExceededError` e * `RunAbortedError`) porque o healing decide coisas diferentes: prazo estourado * é retentável, run cancelado não é (`non-recoverable` no `Healer`, pela mesma * regra dos tetos: cancelar de novo não muda o resultado). */ /** Erro de cancelamento do run, distinto de estouro de prazo e de falha do trabalho. */ export declare class RunAbortedError extends Error { readonly label: string; constructor(label: string, reason?: string); } /** Erro de prazo, para o caller distinguir estouro de prazo de falha do trabalho. */ export declare class DeadlineExceededError extends Error { readonly label: string; readonly timeoutMs: number; constructor(label: string, timeoutMs: number); } /** Piso de prazo. Abaixo disto o prazo derrubaria trabalho legítimo. */ export declare const MIN_DEADLINE_MS = 1000; /** * Resolve o prazo efetivo de um nó: o MENOR entre o do contrato e o do nó, * quando os dois existem. Valor ausente, zero ou negativo significa "sem * prazo", nunca "prazo zero" — a mesma regra de "ausência não é aprovação" * aplicada a um teto. */ export declare function resolveDeadlineMs(candidates: Array): number | undefined; /** * Executa `work` com prazo. Sem prazo, devolve `work` intocado: nenhum timer, * nenhuma diferença de comportamento para quem não declarou limite. * * A promise perdedora recebe um `catch` vazio de propósito — sem ele, o * trabalho que falha DEPOIS do prazo derrubaria o processo com * `unhandledRejection`, transformando um nó lento num crash do run. */ export declare function withDeadline(work: () => Promise, timeoutMs: number | undefined, label: string, signal?: AbortSignal): Promise; //# sourceMappingURL=deadline.d.ts.map