/** * The bounded wait every runtime-validation command runs under. * * Stated ONCE and exported so no call site writes its own number: a bound * hard-coded per caller is how two callers end up disagreeing about how long * "too long" is, and the drain's progress guarantee then depends on which one * you happened to read. Generous, because a validation command is host-authored * and may legitimately be a whole suite — what matters is that it is FINITE. */ export declare const RUNTIME_COMMAND_TIMEOUT_MS: number; /** * Terminate a timed-out child, INCLUDING anything it spawned. * * On win32 this runner wraps package-manager shims in `cmd.exe /d /s /c` (see * `resolveRuntimeValidationSpawnCommand`), so the process we hold a handle to is * the shell, not the tool: `child.kill()` reaps the wrapper and leaves the npm → * node grandchildren running, which is the orphan case the bound exists to * prevent. `taskkill /T` walks the tree instead. Everywhere else the executable * is spawned DIRECTLY — no wrapper, so no tree of our making — and the signal * pair is the whole story. A command that itself forks a daemon on POSIX is * beyond what this can promise without a process group, and is left stated * rather than silently assumed. * * `platform` is a parameter so both branches are reachable from a test on either * OS; the taskkill spawn failing (absent, denied) falls back to SIGKILL rather * than leaving the child alive. */ export declare function killRuntimeCommandTree(child: { pid?: number; kill: (signal?: NodeJS.Signals) => boolean; }, platform?: NodeJS.Platform): void; export declare function runCommand(command: string[], cwd: string, timeoutMs?: number): Promise<{ status: "confirmed" | "not_confirmed" | "inconclusive"; summary: string; evidence: string[]; }>; export declare function resolveRuntimeValidationSpawnCommand(command: string[], platform?: NodeJS.Platform, shellCommand?: string): { command: string; args: string[]; }; //# sourceMappingURL=runtimeCommand.d.ts.map