/** * runCjs — shared execFileAsync wrapper for all .cjs tool invocations. * * Implements DRY: AbortSignal propagation, timeout, cwd binding, and * stdout/stderr capture are applied consistently across all tools. * * Timeout guidance: collate 30s (large stores); store/validate 10s; config 5s. * * @param toolPath Absolute path to the .cjs tool. * @param argv Arguments to pass after "node ". * @param signal AbortSignal from tool execute — propagated to subprocess. * @param timeoutMs Subprocess timeout in milliseconds. * @param projectRoot Directory containing .forge/ — cwd for the subprocess so * findProjectRoot() in the .cjs tool resolves correctly. */ export declare function runCjs(toolPath: string, argv: string[], signal: AbortSignal | undefined, timeoutMs: number, projectRoot: string): Promise<{ stdout: string; stderr: string; }>; /** Token-compression telemetry attached to tool results (details.compression). */ export interface CompressionStats { tool: string; before: number; after: number; saved: number; }