@claudexor/workspace 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,24 @@
1
+ import { type CaptureResult } from "@claudexor/core";
2
+ import { type GitCapability as GitCapabilityValue } from "@claudexor/schema";
3
+ export interface GitProbeDependencies {
4
+ resolveGit?: () => string | null;
5
+ runVersion?: (executable: string) => Promise<CaptureResult>;
6
+ runXcodeSelect?: () => Promise<CaptureResult>;
7
+ }
8
+ export interface GitCapabilityProblem {
9
+ code: "git_missing" | "git_developer_tools_stub" | "git_failed";
10
+ reason: string;
11
+ remediation: string | null;
12
+ }
13
+ /** Canonical user-safe problem for every Git capability consumer. */
14
+ export declare function gitCapabilityProblem(capability: GitCapabilityValue): GitCapabilityProblem | null;
15
+ export declare function resolveGitExecutable(path?: string): string | null;
16
+ /** Probe the actual Git executable used by this daemon, not path/file presence. */
17
+ export declare function probeGitCapability(dependencies?: GitProbeDependencies): Promise<GitCapabilityValue>;
18
+ export declare class GitCapabilityError extends Error {
19
+ readonly capability: GitCapabilityValue;
20
+ readonly code: string;
21
+ constructor(capability: GitCapabilityValue);
22
+ }
23
+ export declare function requireGitCapability(capability: GitCapabilityValue): void;
24
+ //# sourceMappingURL=git-capability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-capability.d.ts","sourceRoot":"","sources":["../src/git-capability.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAiB,KAAK,aAAa,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM5F,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5D,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,GAAG,0BAA0B,GAAG,YAAY,CAAC;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,IAAI,CAahG;AAOD,wBAAgB,oBAAoB,CAClC,IAAI,SAA6C,GAChD,MAAM,GAAG,IAAI,CAUf;AAWD,mFAAmF;AACnF,wBAAsB,kBAAkB,CACtC,YAAY,GAAE,oBAAyB,GACtC,OAAO,CAAC,kBAAkB,CAAC,CA2E7B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAG/B,QAAQ,CAAC,UAAU,EAAE,kBAAkB;IAFnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAqB,UAAU,EAAE,kBAAkB,EAMlD;CACF;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAEzE"}
@@ -0,0 +1,135 @@
1
+ import { accessSync, constants, realpathSync } from "node:fs";
2
+ import { delimiter, join } from "node:path";
3
+ import { composeBaseEnv, isLaunchableExecutable, labelStreams, runCaptureRaw, } from "@claudexor/core";
4
+ import { GitCapability } from "@claudexor/schema";
5
+ const INSTALL_COMMAND_LINE_TOOLS = "Install Apple Command Line Tools with `xcode-select --install`, then retry.";
6
+ const INSTALL_GIT = "Install Git and make it available on PATH, then retry.";
7
+ /** Canonical user-safe problem for every Git capability consumer. */
8
+ export function gitCapabilityProblem(capability) {
9
+ if (capability.status === "available")
10
+ return null;
11
+ const reason = capability.status === "developer_tools_stub"
12
+ ? "Git is unavailable because Apple Command Line Tools are not installed."
13
+ : capability.status === "missing"
14
+ ? "Git is not installed or is not available on this engine's PATH."
15
+ : "Git was found but could not run successfully in this engine environment.";
16
+ return {
17
+ code: `git_${capability.status}`,
18
+ reason,
19
+ remediation: capability.remediation,
20
+ };
21
+ }
22
+ function appleDeveloperToolsStub(detail) {
23
+ const normalized = detail.toLowerCase();
24
+ return normalized.includes("xcode-select") && normalized.includes("developer tools");
25
+ }
26
+ export function resolveGitExecutable(path = composeBaseEnv("mirror_native").PATH ?? "") {
27
+ for (const entry of path.split(delimiter)) {
28
+ const candidate = join(entry || ".", "git");
29
+ try {
30
+ if (isLaunchableExecutable(candidate))
31
+ return realpathSync(candidate);
32
+ }
33
+ catch {
34
+ // Continue to the next PATH entry.
35
+ }
36
+ }
37
+ return null;
38
+ }
39
+ function executableFile(path) {
40
+ try {
41
+ accessSync(path, constants.X_OK);
42
+ return true;
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ }
48
+ /** Probe the actual Git executable used by this daemon, not path/file presence. */
49
+ export async function probeGitCapability(dependencies = {}) {
50
+ const executable = (dependencies.resolveGit ?? resolveGitExecutable)();
51
+ if (!executable) {
52
+ return GitCapability.parse({
53
+ status: "missing",
54
+ version: null,
55
+ detail: "No executable named git was found on PATH.",
56
+ remediation: INSTALL_GIT,
57
+ });
58
+ }
59
+ try {
60
+ // On clean macOS `/usr/bin/git` is an Apple launcher whose execution can
61
+ // open the developer-tools installer. Ask xcode-select first; this probe is
62
+ // non-mutating and prevents a readiness refresh from surprising the user.
63
+ if (executable === "/usr/bin/git" &&
64
+ (dependencies.runXcodeSelect !== undefined || executableFile("/usr/bin/xcode-select"))) {
65
+ const xcodeSelect = await (dependencies.runXcodeSelect ??
66
+ (() => runCaptureRaw("/usr/bin/xcode-select", ["--print-path"], {
67
+ timeoutMs: 10_000,
68
+ inheritEnv: "mirror_native",
69
+ })))();
70
+ if (xcodeSelect.code !== 0 || !xcodeSelect.stdout.trim()) {
71
+ return GitCapability.parse({
72
+ status: "developer_tools_stub",
73
+ version: null,
74
+ detail: labelStreams(xcodeSelect.stderr, xcodeSelect.stdout),
75
+ remediation: INSTALL_COMMAND_LINE_TOOLS,
76
+ });
77
+ }
78
+ }
79
+ const result = await (dependencies.runVersion ??
80
+ ((path) => runCaptureRaw(path, ["--version"], {
81
+ timeoutMs: 10_000,
82
+ inheritEnv: "mirror_native",
83
+ })))(executable);
84
+ const detail = labelStreams(result.stderr, result.stdout);
85
+ if (result.code === 0) {
86
+ return GitCapability.parse({
87
+ status: "available",
88
+ version: result.stdout.trim() || null,
89
+ detail: null,
90
+ remediation: null,
91
+ });
92
+ }
93
+ if (appleDeveloperToolsStub(`${result.stderr}\n${result.stdout}`)) {
94
+ return GitCapability.parse({
95
+ status: "developer_tools_stub",
96
+ version: null,
97
+ detail,
98
+ remediation: INSTALL_COMMAND_LINE_TOOLS,
99
+ });
100
+ }
101
+ return GitCapability.parse({
102
+ status: "failed",
103
+ version: null,
104
+ detail,
105
+ remediation: INSTALL_GIT,
106
+ });
107
+ }
108
+ catch (error) {
109
+ const missing = error?.code === "ENOENT";
110
+ return GitCapability.parse({
111
+ status: missing ? "missing" : "failed",
112
+ version: null,
113
+ detail: error instanceof Error ? error.message : String(error),
114
+ remediation: INSTALL_GIT,
115
+ });
116
+ }
117
+ }
118
+ export class GitCapabilityError extends Error {
119
+ capability;
120
+ code;
121
+ constructor(capability) {
122
+ const problem = gitCapabilityProblem(capability);
123
+ if (!problem)
124
+ throw new Error("GitCapabilityError requires an unavailable capability");
125
+ super([problem.reason, problem.remediation].filter(Boolean).join(" "));
126
+ this.capability = capability;
127
+ this.name = "GitCapabilityError";
128
+ this.code = problem.code;
129
+ }
130
+ }
131
+ export function requireGitCapability(capability) {
132
+ if (capability.status !== "available")
133
+ throw new GitCapabilityError(capability);
134
+ }
135
+ //# sourceMappingURL=git-capability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-capability.js","sourceRoot":"","sources":["../src/git-capability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { WorkspaceError } from "@claudexor/core";
2
+ import { probeGitCapability } from "./git-capability.js";
3
+ export interface GitCommandResult {
4
+ code: number | null;
5
+ stdout: string;
6
+ stderr: string;
7
+ }
8
+ export type GitRunner = (repo: string, args: string[], input?: string) => Promise<GitCommandResult>;
9
+ export interface EnsureGitRepositoryResult {
10
+ /** True when `git init` ran (the folder was not a repository). */
11
+ initialized: boolean;
12
+ /** True when a baseline commit was created (fresh repo or unborn HEAD). */
13
+ baselineCommitted: boolean;
14
+ /** Always false in v2: Claudexor never changes a project's `.gitignore`. */
15
+ gitignoreSeeded: boolean;
16
+ /** HEAD sha after the call. */
17
+ headSha: string;
18
+ }
19
+ export interface GitInitializationProgress {
20
+ initialized: boolean;
21
+ baselineCommitted: boolean;
22
+ gitignoreSeeded: false;
23
+ headSha: string | null;
24
+ failedStage: "init" | "add" | "commit" | "head";
25
+ }
26
+ /** A Git-boundary setup failed after it may already have changed repository
27
+ * metadata. Callers must disclose this progress before terminal failure. */
28
+ export declare class GitInitializationError extends WorkspaceError {
29
+ readonly progress: GitInitializationProgress;
30
+ constructor(message: string, progress: GitInitializationProgress);
31
+ }
32
+ export interface EnsureGitRepositoryDependencies {
33
+ probeCapability?: typeof probeGitCapability;
34
+ runGit?: GitRunner;
35
+ }
36
+ /**
37
+ * Establish the write-mode Git boundary. The caller supplies the canonical Git
38
+ * runner so command execution remains owned by git.ts while this module owns
39
+ * only the initialization transaction and its partial-progress receipt.
40
+ */
41
+ export declare function initializeGitRepository(repo: string, runGit: GitRunner, probeCapability?: typeof probeGitCapability): Promise<EnsureGitRepositoryResult>;
42
+ //# sourceMappingURL=git-initialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-initialization.d.ts","sourceRoot":"","sources":["../src/git-initialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,qBAAqB,CAAC;AAE/E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAEpG,MAAM,WAAW,yBAAyB;IACxC,kEAAkE;IAClE,WAAW,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,iBAAiB,EAAE,OAAO,CAAC;IAC3B,4EAA4E;IAC5E,eAAe,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,KAAK,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACjD;AAED;4EAC4E;AAC5E,qBAAa,sBAAuB,SAAQ,cAAc;IAGtD,QAAQ,CAAC,QAAQ,EAAE,yBAAyB;IAF9C,YACE,OAAO,EAAE,MAAM,EACN,QAAQ,EAAE,yBAAyB,EAI7C;CACF;AAED,MAAM,WAAW,+BAA+B;IAC9C,eAAe,CAAC,EAAE,OAAO,kBAAkB,CAAC;IAC5C,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,EACjB,eAAe,GAAE,OAAO,kBAAuC,GAC9D,OAAO,CAAC,yBAAyB,CAAC,CA2EpC"}
@@ -0,0 +1,79 @@
1
+ import { WorkspaceError } from "@claudexor/core";
2
+ import { probeGitCapability, requireGitCapability } from "./git-capability.js";
3
+ /** A Git-boundary setup failed after it may already have changed repository
4
+ * metadata. Callers must disclose this progress before terminal failure. */
5
+ export class GitInitializationError extends WorkspaceError {
6
+ progress;
7
+ constructor(message, progress) {
8
+ super(message);
9
+ this.progress = progress;
10
+ this.name = "GitInitializationError";
11
+ }
12
+ }
13
+ /**
14
+ * Establish the write-mode Git boundary. The caller supplies the canonical Git
15
+ * runner so command execution remains owned by git.ts while this module owns
16
+ * only the initialization transaction and its partial-progress receipt.
17
+ */
18
+ export async function initializeGitRepository(repo, runGit, probeCapability = probeGitCapability) {
19
+ requireGitCapability(await probeCapability());
20
+ const inside = await runGit(repo, ["rev-parse", "--is-inside-work-tree"]);
21
+ const isRepo = inside.code === 0 && inside.stdout.trim() === "true";
22
+ const hasHead = isRepo && (await runGit(repo, ["rev-parse", "--verify", "HEAD"])).code === 0;
23
+ if (isRepo && hasHead) {
24
+ const head = await runGit(repo, ["rev-parse", "HEAD"]);
25
+ if (head.code !== 0)
26
+ throw new WorkspaceError(`git rev-parse HEAD failed: ${head.stderr.trim()}`);
27
+ return {
28
+ initialized: false,
29
+ baselineCommitted: false,
30
+ gitignoreSeeded: false,
31
+ headSha: head.stdout.trim(),
32
+ };
33
+ }
34
+ let initialized = false;
35
+ const partial = (failedStage, baselineCommitted = false, headSha = null) => ({
36
+ initialized,
37
+ baselineCommitted,
38
+ gitignoreSeeded: false,
39
+ headSha,
40
+ failedStage,
41
+ });
42
+ if (!isRepo) {
43
+ const init = await runGit(repo, ["init"]);
44
+ if (init.code !== 0) {
45
+ // `git init` is not transactional: it can leave config/hooks/refs before
46
+ // rejecting a later step. Disclose possible partial metadata even though
47
+ // initialization did not complete.
48
+ throw new GitInitializationError(`git init failed: ${init.stderr.trim()}`, partial("init"));
49
+ }
50
+ initialized = true;
51
+ }
52
+ const add = await runGit(repo, ["add", "-A"]);
53
+ if (add.code !== 0)
54
+ throw new GitInitializationError(`git add failed during repository initialization: ${add.stderr.trim()}`, partial("add"));
55
+ const commit = await runGit(repo, [
56
+ "-c",
57
+ "user.name=Claudexor",
58
+ "-c",
59
+ "user.email=noreply@claudexor.local",
60
+ "commit",
61
+ "--allow-empty",
62
+ "--no-verify",
63
+ "-m",
64
+ "claudexor: initialize repository baseline",
65
+ ]);
66
+ if (commit.code !== 0)
67
+ throw new GitInitializationError(`baseline commit failed during repository initialization: ${commit.stderr.trim()}`, partial("commit"));
68
+ const head = await runGit(repo, ["rev-parse", "HEAD"]);
69
+ if (head.code !== 0) {
70
+ throw new GitInitializationError(`git rev-parse HEAD failed after repository initialization: ${head.stderr.trim()}`, partial("head", true));
71
+ }
72
+ return {
73
+ initialized,
74
+ baselineCommitted: true,
75
+ gitignoreSeeded: false,
76
+ headSha: head.stdout.trim(),
77
+ };
78
+ }
79
+ //# sourceMappingURL=git-initialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-initialization.js","sourceRoot":"","sources":["../src/git-initialization.ts"],"names":[],"mappings":"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"}
package/dist/git.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { type EnsureGitRepositoryDependencies, type EnsureGitRepositoryResult } from "./git-initialization.js";
2
+ export { GitInitializationError, type EnsureGitRepositoryDependencies, type EnsureGitRepositoryResult, } from "./git-initialization.js";
1
3
  /** BYTE-FAITHFUL git capture: raw buffers, never readline — CR
2
4
  * bytes in CRLF diff content survive, and no trailing newline is fabricated
3
5
  * (trim-based consumers like revParse are unaffected: git ends its own
@@ -9,16 +11,6 @@ export declare function git(repo: string, args: string[], input?: string): Promi
9
11
  }>;
10
12
  export declare function isGitRepo(repo: string): Promise<boolean>;
11
13
  export declare function revParse(repo: string, ref: string): Promise<string>;
12
- export interface EnsureGitRepositoryResult {
13
- /** True when `git init` ran (the folder was not a repository). */
14
- initialized: boolean;
15
- /** True when a baseline commit was created (fresh repo or unborn HEAD). */
16
- baselineCommitted: boolean;
17
- /** Always false in v2: Claudexor never changes a project's `.gitignore`. */
18
- gitignoreSeeded: boolean;
19
- /** HEAD sha after the call. */
20
- headSha: string;
21
- }
22
14
  /**
23
15
  * Make a project folder usable as a git boundary for write-mode runs.
24
16
  *
@@ -32,7 +24,7 @@ export interface EnsureGitRepositoryResult {
32
24
  * The baseline commit is authored as "Claudexor" deterministically — it is a
33
25
  * tool-created commit and must not depend on (or pollute) user git identity.
34
26
  */
35
- export declare function ensureGitRepository(repo: string): Promise<EnsureGitRepositoryResult>;
27
+ export declare function ensureGitRepository(repo: string, dependencies?: EnsureGitRepositoryDependencies): Promise<EnsureGitRepositoryResult>;
36
28
  export declare function statusPorcelain(repo: string): Promise<string>;
37
29
  /**
38
30
  * Capture the full dirty working tree (tracked AND untracked) as a dangling
@@ -55,6 +47,24 @@ export declare function snapshotTree(repo: string): Promise<string>;
55
47
  * `--binary`: binary changes carry an APPLYABLE payload instead of
56
48
  * degrading to a "Binary files differ" stub that silently loses the work. */
57
49
  export declare function diffTrees(repo: string, baseSha: string, endSha: string): Promise<string>;
50
+ /**
51
+ * Capture the current worktree against an exact base without writing its blobs
52
+ * into the user's Git object database. In-place harness output is untrusted
53
+ * until the secret fence has inspected the resulting patch; `snapshotTree`
54
+ * would otherwise leave a dangling raw-secret blob even when artifact
55
+ * persistence later refused the patch.
56
+ *
57
+ * Git still owns filename, mode, symlink, binary, ignored-file, and untracked
58
+ * semantics. A scratch index plus an isolated temporary object directory holds
59
+ * the candidate tree only for the duration of `git diff`; the real object
60
+ * directory is read-only through Git's alternates mechanism.
61
+ */
62
+ export interface TransientDiffCapture {
63
+ patch: string;
64
+ binarySecretLike: boolean;
65
+ }
66
+ export declare function captureWorkingTreeTransient(repo: string, baseSha: string, pathExcludes?: string[]): Promise<TransientDiffCapture>;
67
+ export declare function diffWorkingTreeTransient(repo: string, baseSha: string, pathExcludes?: string[]): Promise<string>;
58
68
  /**
59
69
  * Materialize a patch against an exact base in a scratch index and return the
60
70
  * resulting tree id. The live index and worktree are never consulted or
@@ -62,34 +72,11 @@ export declare function diffTrees(repo: string, baseSha: string, endSha: string)
62
72
  * concurrently staged user path can never be swept into a Claudexor commit.
63
73
  */
64
74
  export declare function materializePatchTree(repo: string, baseSha: string, diff: string): Promise<string>;
65
- /** Why a revert was refused, decided by the PRODUCER (which branch failed), not
66
- * by regexing the human `reason` downstream (QA-051/W3):
67
- * - `postimage_diverged`: the reverse `--check` failed because the turn-owned
68
- * postimage no longer matches (files changed after the turn);
69
- * - `reverse_apply_failed`: the reverse apply itself failed after a clean
70
- * preflight. */
71
- export type RevertRefusalReason = "postimage_diverged" | "reverse_apply_failed";
72
- export interface RevertResult {
73
- reverted: boolean;
74
- /** Turn-added files removed to restore the pre-turn state (`.claudexor` preserved). */
75
- removed: string[];
76
- reason?: string;
77
- /** Typed refusal class set at the point of failure; absent on success. */
78
- reasonCode?: RevertRefusalReason;
79
- }
80
- /**
81
- * Server-owned in-place revert: restore the live working tree to a recorded
82
- * pre-turn snapshot, but ONLY when the tree still matches the recorded post-turn
83
- * snapshot (i.e. the user hasn't edited since) — otherwise it fails loudly and
84
- * touches nothing. Reverts tracked modifications/deletions AND removes files the
85
- * turn added; `.claudexor` (run artifacts) is always preserved.
86
- */
87
- export declare function revertWorkingTreeTo(repo: string, preTurnSha: string, expectedPostSha: string): Promise<RevertResult>;
88
- /** Reverse an immutable turn patch. This is the GC-independent production
89
- * path used by external revert anchors; the SHA-based wrapper remains useful
90
- * while capturing and testing snapshots. */
91
- export declare function revertWorkingTreePatch(repo: string, patch: string): Promise<RevertResult>;
92
75
  export declare function worktreeAdd(repo: string, path: string, branch: string, baseSha: string): Promise<void>;
76
+ /** Disposable candidate checkout with private refs/index/objects. The source
77
+ * repository is only an object alternate, so harness `git add`/`commit` cannot
78
+ * write candidate blobs or refs into the user's repository. */
79
+ export declare function isolatedCloneAdd(repo: string, path: string, branch: string, baseSha: string): Promise<void>;
93
80
  /** Recreate a worktree for an EXISTING branch (recovery: dir lost, branch survived). */
94
81
  export declare function worktreeAddExisting(repo: string, path: string, branch: string): Promise<void>;
95
82
  export declare function worktreeRemove(repo: string, path: string): Promise<void>;
@@ -128,20 +115,4 @@ export declare function reversePatchAndIndexProtected(repo: string, diff: string
128
115
  export declare function worktreePrune(repo: string): Promise<void>;
129
116
  /** Delete a local branch (best-effort GC of per-attempt claudexor/* branches). */
130
117
  export declare function branchDelete(repo: string, branch: string): Promise<void>;
131
- /**
132
- * Stage everything (so untracked files appear) and return the diff vs the
133
- * recorded BASE sha — NOT the worktree HEAD. A harness that commits inside the
134
- * worktree (Claude Code does this routinely) advances HEAD; diffing vs HEAD
135
- * would then hide the committed work and report an empty no-op diff, silently
136
- * losing the candidate's real output. Diffing the staged tree vs base_sha
137
- * captures all net change since the run started regardless of intermediate
138
- * commits. Git op failures throw loudly instead of masquerading as "no changes".
139
- */
140
- export declare function diffStaged(worktreePath: string, baseSha?: string,
141
- /** Additional EXACT-path pathspec excludes (e.g. the generated CLAUDE.md
142
- * bridge, excluded by the caller only when it was created THIS run and its
143
- * bytes still equal CLAUDE_BRIDGE_CONTENT). Each must already be a git
144
- * pathspec magic term like `:(exclude,top)<path>`. Applied to BOTH the scratch
145
- * `add -A` and the diff, so an excluded path is neither staged nor reported. */
146
- extraExcludes?: readonly string[]): Promise<string>;
147
118
  //# sourceMappingURL=git.d.ts.map
package/dist/git.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}