export declare const FOUNDATION_HOST_CAPABILITIES: readonly ["foundationGate", "validateEditScope"]; export type FoundationHostCapability = (typeof FOUNDATION_HOST_CAPABILITIES)[number]; export interface FoundationGateOptions { foundation: string; appSrc: string; buildCmd?: string | null; baseline?: string | null; urls?: string[]; loginUrl?: string | null; /** Ask the host to provide a fresh, manager-owned screenshot directory. */ captureScreenshots?: boolean; } export interface FoundationGateCheckResult { gate: string; pass: boolean; exitCode: number | null; ms: number; stdout: string; stderr: string; } export interface FoundationGateData { summary: { gates: number; failed: number; }; results: FoundationGateCheckResult[]; } export interface FoundationGateResult { ok: boolean; exitCode: number | null; signal: NodeJS.Signals | null; timedOut: boolean; aborted: boolean; durationMs: number; data?: FoundationGateData; stdout: string; stderr: string; summary: string; error?: string; command: { file: string; args: string[]; }; /** Host-owned screenshot directory, present only for capture runs. */ screenshotDir?: string; /** Bounded absolute PNG paths collected by the host after the gate exits. */ screenshotPaths?: string[]; } export interface FoundationExecResult { stdout: string; stderr: string; exitCode: number | null; signal: NodeJS.Signals | null; timedOut: boolean; aborted: boolean; } export type FoundationExecRunner = (file: string, args: string[], options: { cwd: string; env: NodeJS.ProcessEnv; timeoutMs: number; maxBuffer: number; signal?: AbortSignal; shell: false; }) => Promise; export interface RunFoundationGateOptions { timeoutMs?: number; signal?: AbortSignal; runner?: FoundationExecRunner; /** Host-selected directory outside the checkout; scripts cannot choose it. */ screenshotDir?: string; } export declare function runFoundationGate(cwd: string, input: FoundationGateOptions, options?: RunFoundationGateOptions): Promise; export declare const FOUNDATION_ALWAYS_DENIED_PREFIXES: readonly ["third_party/", ".github/", "vendor/", ".git/", ".pi/", "node_modules/"]; export interface ValidateEditScopeOptions { allowGlobs: string[]; denyGlobs?: string[]; } export interface ValidateEditScopeResult { ok: boolean; changedPaths: string[]; violatingPaths: string[]; violations: Array<{ path: string; reason: string; }>; summary: string; error?: string; } export type FoundationGitRunner = (file: string, args: string[], options: { cwd: string; timeoutMs: number; maxBuffer: number; signal?: AbortSignal; shell: false; }) => Promise<{ stdout: string; }>; export interface ValidateEditScopeHostOptions { signal?: AbortSignal; runner?: FoundationGitRunner; /** Host-owned initial HEAD; includes committed workflow changes in validation. */ baseRef?: string; } export declare function collectChangedPaths(cwd: string, options?: ValidateEditScopeHostOptions): Promise; export declare function parsePorcelainV1Z(porcelain: string): string[]; export declare function parseNameStatusZ(output: string): string[]; export declare function resolveGitHead(cwd: string, options?: ValidateEditScopeHostOptions): Promise; export declare function validateEditScope(cwd: string, input: ValidateEditScopeOptions, options?: ValidateEditScopeHostOptions): Promise;