export type UltragoalChangeStatus = "added" | "modified" | "deleted" | "renamed" | "copied" | "unknown"; export type UltragoalChangeCategory = "code" | "generated-binding" | "tool" | "settings-registry" | "prompt-doc-behavior" | "docs-static" | "other"; export interface UltragoalChangeSetPath { path: string; status: UltragoalChangeStatus; oldPath?: string; category?: UltragoalChangeCategory; [key: string]: unknown; } export interface UltragoalChangeSet { source: "checkpoint-git" | "review-pr" | "review-branch" | "review-worktree" | "review-spec"; baseRef?: string; headRef?: string; mergeBase?: string; paths: UltragoalChangeSetPath[]; rawDiffStat?: string; rawDiff?: string; untrackedContentHash?: string; untrackedContentHashVerified?: boolean; captureIncomplete?: boolean; trusted: true; [key: string]: unknown; } export declare function normalizeRepoPath(value: string): string; export declare function normalizeChangeSetPath(value: string): string; export declare function categorizeComputerChangePath(pathValue: string): UltragoalChangeCategory; export declare function computeUltragoalReviewSourceHash(changeSet: UltragoalChangeSet | undefined): string | undefined; export declare function spawnText(command: string[], options: { cwd: string; timeoutMs?: number; }): Promise<{ ok: boolean; stdout: string; stderr: string; }>; export declare function resolveGitBase(cwd: string, branch?: string): Promise; export declare function parseGitNameStatus(output: string): UltragoalChangeSetPath[]; export declare function parseGitUntrackedPaths(output: string): UltragoalChangeSetPath[]; export declare function ciDevChangedPathRows(): UltragoalChangeSetPath[]; export declare function mergeChangeSetPaths(groups: UltragoalChangeSetPath[][]): UltragoalChangeSetPath[]; export declare function computeCheckpointChangeSet(cwd: string): Promise; /** * A content witness of overall repository state. HEAD and porcelain status are * retained for cheap structural diagnostics, but the authoritative comparison * also digests every tracked and non-ignored untracked path. A same-status edit * therefore cannot pass the capture boundary merely because Git's status text * stayed unchanged. */ type RepositoryStateWitnessTestHook = (phase: "after-initial", cwd: string) => void | Promise; /** @internal Test-only seam; production capture has no injected mutation hook. */ export declare function __setRepositoryStateWitnessTestHookForTests(hook: RepositoryStateWitnessTestHook | undefined): void; export declare function parseUnifiedDiffPaths(diff: string): UltragoalChangeSetPath[]; export {};