/** * Wrapper fino do `maestro-cli`: resolução do binário, spawn com captura de * stdout/stderr, timeout e mapeamento dos exit codes para mensagens PT-BR. * * Exit codes do maestro-cli (CLI 0.17.4): 0 ok, 1 generic, 2 usage, 3 app * desktop não rodando, 4 app desatualizado, 5 timeout. O wrapper mapeia e * traduz; nunca esconde o stderr original. */ import { type ChildProcess, type SpawnOptions } from 'node:child_process'; import type { MaestroEvent, MaestroExitStatus, MaestroCli, MaestroResult } from './types.js'; /** * Fallback Windows: o maestro-cli é bundled com o desktop app e nem sempre * está no PATH. O `.js` é executável via `node`. */ export declare const MAESTRO_FALLBACK_JS: string; export declare const INSTALL_HINT = "Instale o Maestro (runmaestro.ai) e garanta `maestro-cli` no PATH."; /** Procura um executável no PATH (com extensões do Windows). */ export declare function findInPath(executable: string): string | undefined; /** Resolve o binário do maestro-cli: PATH primeiro, fallback do desktop app. */ export declare function resolveMaestroCli(): MaestroCli | null; /** Classifica o exit code do maestro-cli em um status conhecido. */ export declare function exitStatus(code: number): MaestroExitStatus; /** Mensagem PT-BR para o exit code do maestro-cli. */ export declare function exitMessage(code: number): string; /** Assinatura do spawn, injetável nos testes (nunca spawnar maestro-cli real). */ export type SpawnFn = (command: string, args: string[], options: SpawnOptions) => ChildProcess; export interface RunMaestroOptions { /** Binário/prefixo resolvidos; sem isso, `resolveMaestroCli()` roda. */ cli?: MaestroCli; cwd?: string; env?: NodeJS.ProcessEnv; /** 0 (default) = sem teto. */ timeoutMs?: number; /** Injectável para testes. */ spawnImpl?: SpawnFn; } /** * Executa o maestro-cli e captura stdout/stderr. `runMaestro` NÃO parseia * eventos: é o caminho de chamadas pontuais (create-agent, list, show...). */ export declare function runMaestro(args: string[], opts?: RunMaestroOptions): Promise; /** * Executa o maestro-cli com `--json` e entrega cada evento parseado via * callback. Resolve no evento `complete`/`goal_complete` OU no fechamento do * processo, o que vier primeiro: stream longo não fica preso esperando o * processo fechar quando o próprio Maestro já declarou o fim. */ export declare function streamMaestro(args: string[], onEvent: (event: MaestroEvent) => void, opts?: RunMaestroOptions): Promise; //# sourceMappingURL=cli.d.ts.map