/** * Pool de concorrência: executa N tarefas com no máximo `limit` em voo. * * Existe porque `Promise.all` sobre um batch inteiro não tem teto: no template * `fullstack`, o batch `[security-review, database-design, product-spec]` faz * 3 chamadas simultâneas ao provider, e um plano maior escala sem limite. * Provider com rate limit apertado devolve 429, o 429 vira healing, o healing * vira retry, e o retry gasta mais token do que a execução serial gastaria. * * Preserva a ordem dos resultados (índice de entrada = índice de saída), como * `Promise.all`, para que quem chama continue casando resultado com tarefa. */ /** * Concorrência default: 3 tarefas em voo. Escolhido para caber com folga no * limite de requisições por minuto dos planos iniciais dos providers, sem * serializar um grafo inteiro. */ export declare const DEFAULT_MAX_CONCURRENCY = 3; /** Concorrência para modelo local: 1. GPU única não ganha nada com paralelismo. */ export declare const LOCAL_MAX_CONCURRENCY = 1; /** * Executa `tasks` respeitando o teto. `limit <= 0` ou maior que o número de * tarefas equivale a rodar tudo junto. Uma tarefa que rejeita NÃO derruba as * outras: a rejeição é propagada apenas no índice dela, e quem chama decide. */ export declare function runWithConcurrency(tasks: Array<() => Promise>, limit: number): Promise>; /** * Instrumentação para teste: além dos resultados, devolve o pico real de * tarefas em voo. É a única forma honesta de provar que o teto foi respeitado * (contar chamadas não prova simultaneidade). */ export declare function runWithConcurrencyTracked(tasks: Array<() => Promise>, limit: number): Promise<{ results: Array<{ ok: true; value: T; } | { ok: false; error: unknown; }>; peakInFlight: number; }>; //# sourceMappingURL=concurrency.d.ts.map