@claudexor/workspace 4.8.2 → 5.0.2
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.
- package/dist/anchor-store.d.ts +20 -9
- package/dist/anchor-store.d.ts.map +1 -1
- package/dist/anchor-store.js +89 -14
- package/dist/anchor-store.js.map +1 -1
- package/dist/capture-failure.d.ts.map +1 -1
- package/dist/capture-failure.js +7 -2
- package/dist/capture-failure.js.map +1 -1
- package/dist/capture-inventory.d.ts +10 -0
- package/dist/capture-inventory.d.ts.map +1 -0
- package/dist/capture-inventory.js +63 -0
- package/dist/capture-inventory.js.map +1 -0
- package/dist/capture-objects.d.ts +32 -0
- package/dist/capture-objects.d.ts.map +1 -0
- package/dist/capture-objects.js +129 -0
- package/dist/capture-objects.js.map +1 -0
- package/dist/cleanup-fault.d.ts +18 -0
- package/dist/cleanup-fault.d.ts.map +1 -0
- package/dist/cleanup-fault.js +45 -0
- package/dist/cleanup-fault.js.map +1 -0
- package/dist/continuation-evidence.d.ts +61 -15
- package/dist/continuation-evidence.d.ts.map +1 -1
- package/dist/continuation-evidence.js +151 -36
- package/dist/continuation-evidence.js.map +1 -1
- package/dist/continuation-facts.d.ts +93 -0
- package/dist/continuation-facts.d.ts.map +1 -0
- package/dist/continuation-facts.js +162 -0
- package/dist/continuation-facts.js.map +1 -0
- package/dist/directory-workspace.d.ts +6 -1
- package/dist/directory-workspace.d.ts.map +1 -1
- package/dist/directory-workspace.js +21 -3
- package/dist/directory-workspace.js.map +1 -1
- package/dist/files-io.d.ts.map +1 -1
- package/dist/files-io.js +1 -7
- package/dist/files-io.js.map +1 -1
- package/dist/fs-presence.d.ts +12 -0
- package/dist/fs-presence.d.ts.map +1 -0
- package/dist/fs-presence.js +35 -0
- package/dist/fs-presence.js.map +1 -0
- package/dist/git-nested-repositories.d.ts.map +1 -1
- package/dist/git-nested-repositories.js +11 -2
- package/dist/git-nested-repositories.js.map +1 -1
- package/dist/git-observed.d.ts +75 -0
- package/dist/git-observed.d.ts.map +1 -0
- package/dist/git-observed.js +172 -0
- package/dist/git-observed.js.map +1 -0
- package/dist/git-result.d.ts +36 -0
- package/dist/git-result.d.ts.map +1 -0
- package/dist/git-result.js +96 -0
- package/dist/git-result.js.map +1 -0
- package/dist/git-run.d.ts +11 -0
- package/dist/git-run.d.ts.map +1 -1
- package/dist/git-run.js +24 -0
- package/dist/git-run.js.map +1 -1
- package/dist/git-snapshot.d.ts +40 -0
- package/dist/git-snapshot.d.ts.map +1 -0
- package/dist/git-snapshot.js +238 -0
- package/dist/git-snapshot.js.map +1 -0
- package/dist/git-transient-capture.d.ts +63 -16
- package/dist/git-transient-capture.d.ts.map +1 -1
- package/dist/git-transient-capture.js +170 -57
- package/dist/git-transient-capture.js.map +1 -1
- package/dist/git.d.ts +46 -21
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +164 -103
- package/dist/git.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/lanes.d.ts +2 -1
- package/dist/lanes.d.ts.map +1 -1
- package/dist/lanes.js +7 -6
- package/dist/lanes.js.map +1 -1
- package/dist/manager.d.ts +21 -7
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +30 -17
- package/dist/manager.js.map +1 -1
- package/dist/object-compose.d.ts +58 -0
- package/dist/object-compose.d.ts.map +1 -0
- package/dist/object-compose.js +444 -0
- package/dist/object-compose.js.map +1 -0
- package/dist/object-materialize.d.ts +52 -0
- package/dist/object-materialize.d.ts.map +1 -0
- package/dist/object-materialize.js +467 -0
- package/dist/object-materialize.js.map +1 -0
- package/dist/object-occupied.d.ts +27 -0
- package/dist/object-occupied.d.ts.map +1 -0
- package/dist/object-occupied.js +131 -0
- package/dist/object-occupied.js.map +1 -0
- package/dist/object-revert.d.ts +45 -0
- package/dist/object-revert.d.ts.map +1 -0
- package/dist/object-revert.js +265 -0
- package/dist/object-revert.js.map +1 -0
- package/dist/object-saved-files.d.ts +50 -0
- package/dist/object-saved-files.d.ts.map +1 -0
- package/dist/object-saved-files.js +176 -0
- package/dist/object-saved-files.js.map +1 -0
- package/dist/object-sparse.d.ts +22 -0
- package/dist/object-sparse.d.ts.map +1 -0
- package/dist/object-sparse.js +72 -0
- package/dist/object-sparse.js.map +1 -0
- package/dist/object-store-leases.d.ts +41 -0
- package/dist/object-store-leases.d.ts.map +1 -0
- package/dist/object-store-leases.js +277 -0
- package/dist/object-store-leases.js.map +1 -0
- package/dist/object-store-roots.d.ts +25 -0
- package/dist/object-store-roots.d.ts.map +1 -0
- package/dist/object-store-roots.js +114 -0
- package/dist/object-store-roots.js.map +1 -0
- package/dist/object-store.d.ts +110 -0
- package/dist/object-store.d.ts.map +1 -0
- package/dist/object-store.js +404 -0
- package/dist/object-store.js.map +1 -0
- package/dist/object-transfer.d.ts +41 -0
- package/dist/object-transfer.d.ts.map +1 -0
- package/dist/object-transfer.js +267 -0
- package/dist/object-transfer.js.map +1 -0
- package/dist/plain-diff-capture.d.ts +1 -2
- package/dist/plain-diff-capture.d.ts.map +1 -1
- package/dist/plain-diff-capture.js +2 -7
- package/dist/plain-diff-capture.js.map +1 -1
- package/dist/plain-diff.d.ts +0 -4
- package/dist/plain-diff.d.ts.map +1 -1
- package/dist/plain-diff.js +2 -44
- package/dist/plain-diff.js.map +1 -1
- package/dist/raw-patch.d.ts.map +1 -1
- package/dist/raw-patch.js +5 -8
- package/dist/raw-patch.js.map +1 -1
- package/dist/run-expiry.d.ts +3 -0
- package/dist/run-expiry.d.ts.map +1 -0
- package/dist/run-expiry.js +15 -0
- package/dist/run-expiry.js.map +1 -0
- package/dist/thread-tree.d.ts +36 -2
- package/dist/thread-tree.d.ts.map +1 -1
- package/dist/thread-tree.js +87 -11
- package/dist/thread-tree.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-workspace.d.ts","sourceRoot":"","sources":["../src/directory-workspace.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"directory-workspace.d.ts","sourceRoot":"","sources":["../src/directory-workspace.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,aAAa,EAGlB,KAAK,wBAAwB,EAC9B,MAAM,mBAAmB,CAAC;AAkB3B,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8B7B;AAED,mFAAmF;AACnF,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BhB;AAED;;;kFAGkF;AAClF,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,CAe9D;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3B;AAED;;oEAEoE;AACpE,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA0FlC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { WorkspaceFilesManifest, WorkspaceEnvelope, } from "@claudexor/schema";
|
|
4
|
-
import {
|
|
4
|
+
import { nowIso, sha256 } from "@claudexor/util";
|
|
5
|
+
import { envelopeBaseOf } from "./envelope-custody.js";
|
|
5
6
|
import { directoryInventory, materializeWorkspaceFile, readWorkspaceFile, sameWorkspaceFile, workspaceFilePath, } from "./files-io.js";
|
|
6
7
|
export async function createDirectoryEnvelope(input) {
|
|
7
8
|
const executionRoot = input.inPlace ? input.sourceRoot : join(input.envelopeRoot, "tree");
|
|
@@ -57,6 +58,25 @@ export async function prepareDirectoryWorkspace(input) {
|
|
|
57
58
|
};
|
|
58
59
|
await writeFile(join(envelopeRoot, "directory-baseline.json"), JSON.stringify(baseline) + "\n");
|
|
59
60
|
}
|
|
61
|
+
/** What an isolated copy held when it was prepared, read from its own baseline
|
|
62
|
+
* (never a second source scan); null for live directory work. A selected path
|
|
63
|
+
* is missing only when no entry of that exact path was recorded: a copied empty
|
|
64
|
+
* directory or symbolic link is present, and `.` names the source root itself. */
|
|
65
|
+
export async function directoryPreparation(env) {
|
|
66
|
+
if (env.workspace_kind !== "directory" || env.worktree_path === env.repo_root)
|
|
67
|
+
return null;
|
|
68
|
+
const baseline = JSON.parse(await readFile(join(envelopeBaseOf(env), "directory-baseline.json"), "utf8"));
|
|
69
|
+
if (baseline.isolation !== "envelope")
|
|
70
|
+
return null;
|
|
71
|
+
const present = new Set(baseline.entries.map((entry) => entry.path));
|
|
72
|
+
const count = (kind) => baseline.entries.filter((entry) => entry.state.kind === kind).length;
|
|
73
|
+
return {
|
|
74
|
+
source_root: baseline.sourceRoot,
|
|
75
|
+
scope_paths: baseline.scopePaths,
|
|
76
|
+
copied: { files: count("file"), directories: count("directory"), symlinks: count("symlink") },
|
|
77
|
+
missing_paths: baseline.scopePaths.filter((path) => path !== "." && !present.has(path)),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
60
80
|
/** Complete bytes live under the run artifact tree; a preview is never apply input.
|
|
61
81
|
* The manifest's source is the tree its baseline was read from (a delegated
|
|
62
82
|
* run's bound execution root), never a caller-supplied identity. */
|
|
@@ -115,8 +135,6 @@ export async function captureDirectoryWorkspace(input) {
|
|
|
115
135
|
const manifestPath = "final/files/manifest.json";
|
|
116
136
|
await mkdir(join(input.runRoot, "final/files"), { recursive: true });
|
|
117
137
|
const text = JSON.stringify(manifest) + "\n";
|
|
118
|
-
if (containsSecretLikeToken(text))
|
|
119
|
-
throw new Error("Manifest contains credential material; no result was published");
|
|
120
138
|
const path = join(input.runRoot, manifestPath);
|
|
121
139
|
await writeFile(`${path}.pending`, text);
|
|
122
140
|
await rename(`${path}.pending`, path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-workspace.js","sourceRoot":"","sources":["../src/directory-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"directory-workspace.js","sourceRoot":"","sources":["../src/directory-workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/files-io.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files-io.d.ts","sourceRoot":"","sources":["../src/files-io.ts"],"names":[],"mappings":"AAcA,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGhF,qFAAqF;AACrF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,eAAe,UAAQ,GACtB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,kFAAkF;AAClF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"files-io.d.ts","sourceRoot":"","sources":["../src/files-io.ts"],"names":[],"mappings":"AAcA,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGhF,qFAAqF;AACrF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,eAAe,UAAQ,GACtB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,kFAAkF;AAClF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA2CpC;AAED,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,EACxC,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAC3B,OAAO,CAQT;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,GAAE,SAAS,MAAM,EAAO,GAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CA8B1C;AAED,mFAAmF;AACnF,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,kBAAkB,EACzB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
package/dist/files-io.js
CHANGED
|
@@ -3,7 +3,7 @@ import { constants } from "node:fs";
|
|
|
3
3
|
import { chmod, lstat, mkdir, open, readlink, readdir, rename, rm, symlink, } from "node:fs/promises";
|
|
4
4
|
import { dirname, join, resolve, sep } from "node:path";
|
|
5
5
|
import { WorkspaceScopePath } from "@claudexor/schema";
|
|
6
|
-
import { newId
|
|
6
|
+
import { newId } from "@claudexor/util";
|
|
7
7
|
/** Resolve relative entries without following an ancestor link into another tree. */
|
|
8
8
|
export async function workspaceFilePath(root, relative, readingPreimage = false) {
|
|
9
9
|
WorkspaceScopePath.parse(relative);
|
|
@@ -45,13 +45,11 @@ export async function readWorkspaceFile(path, contentDir) {
|
|
|
45
45
|
const temp = contentDir ? join(contentDir, newId("pending")) : null;
|
|
46
46
|
let output = null;
|
|
47
47
|
const hash = createHash("sha256");
|
|
48
|
-
const scanner = contentDir ? sensitiveResourcePolicy.createContentScanner() : null;
|
|
49
48
|
let sizeBytes = 0;
|
|
50
49
|
try {
|
|
51
50
|
output = temp ? await open(temp, "wx", 0o600) : null;
|
|
52
51
|
for await (const chunk of input.createReadStream({ autoClose: false })) {
|
|
53
52
|
hash.update(chunk);
|
|
54
|
-
scanner?.write(chunk.toString("latin1"));
|
|
55
53
|
sizeBytes += chunk.length;
|
|
56
54
|
if (output)
|
|
57
55
|
await output.writeFile(chunk);
|
|
@@ -64,8 +62,6 @@ export async function readWorkspaceFile(path, contentDir) {
|
|
|
64
62
|
stat.ctimeMs !== after.ctimeMs)
|
|
65
63
|
throw new Error(`File changed while being captured: ${path}`);
|
|
66
64
|
const digest = hash.digest("hex");
|
|
67
|
-
if (scanner?.finish())
|
|
68
|
-
throw new Error("File contains credential material; no artifact was published");
|
|
69
65
|
if (output && temp && contentDir) {
|
|
70
66
|
await output.sync();
|
|
71
67
|
await output.close();
|
|
@@ -102,8 +98,6 @@ export async function directoryInventory(root, paths, contentDir, excluded = [])
|
|
|
102
98
|
return;
|
|
103
99
|
visited.add(relative);
|
|
104
100
|
const path = await workspaceFilePath(root, relative);
|
|
105
|
-
if (contentDir && sensitiveResourcePolicy.classifyPath(relative).sensitive)
|
|
106
|
-
throw new Error("Selected file uses a credential-resource path; no artifact was published");
|
|
107
101
|
const state = await readWorkspaceFile(path, contentDir);
|
|
108
102
|
if (!state)
|
|
109
103
|
return;
|
package/dist/files-io.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files-io.js","sourceRoot":"","sources":["../src/files-io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,MAAM,EACN,EAAE,EACF,OAAO,GACR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"files-io.js","sourceRoot":"","sources":["../src/files-io.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Stats } from "node:fs";
|
|
2
|
+
/** Whether something is at `path`, following a symlink as `existsSync` does, but
|
|
3
|
+
* with only ENOENT and ENOTDIR read as absence: any other failure is thrown. */
|
|
4
|
+
export declare function existsStrict(path: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* What lstat finds at `path`, or undefined when nothing is there: no entry
|
|
7
|
+
* (ENOENT), or a parent that is not a directory (ENOTDIR). Any other failure (a
|
|
8
|
+
* parent that cannot be searched, an I/O error) says nothing about presence and is
|
|
9
|
+
* thrown, never read as absence.
|
|
10
|
+
*/
|
|
11
|
+
export declare function lstatPresent(path: string): Stats | undefined;
|
|
12
|
+
//# sourceMappingURL=fs-presence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-presence.d.ts","sourceRoot":"","sources":["../src/fs-presence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAO1D;gFACgF;AAChF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAO5D"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { lstatSync, statSync } from "node:fs";
|
|
2
|
+
const absence = (error) => {
|
|
3
|
+
const code = error?.code;
|
|
4
|
+
return code === "ENOENT" || code === "ENOTDIR";
|
|
5
|
+
};
|
|
6
|
+
/** Whether something is at `path`, following a symlink as `existsSync` does, but
|
|
7
|
+
* with only ENOENT and ENOTDIR read as absence: any other failure is thrown. */
|
|
8
|
+
export function existsStrict(path) {
|
|
9
|
+
try {
|
|
10
|
+
statSync(path);
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (absence(error))
|
|
15
|
+
return false;
|
|
16
|
+
throw error;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* What lstat finds at `path`, or undefined when nothing is there: no entry
|
|
21
|
+
* (ENOENT), or a parent that is not a directory (ENOTDIR). Any other failure (a
|
|
22
|
+
* parent that cannot be searched, an I/O error) says nothing about presence and is
|
|
23
|
+
* thrown, never read as absence.
|
|
24
|
+
*/
|
|
25
|
+
export function lstatPresent(path) {
|
|
26
|
+
try {
|
|
27
|
+
return lstatSync(path, { throwIfNoEntry: false });
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (absence(error))
|
|
31
|
+
return undefined;
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=fs-presence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-presence.js","sourceRoot":"","sources":["../src/fs-presence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAc,MAAM,SAAS,CAAC;AAE1D,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,EAAE;IACjC,MAAM,IAAI,GAAI,KAAsC,EAAE,IAAI,CAAC;IAC3D,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC;AACjD,CAAC,CAAC;AAEF;gFACgF;AAChF,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACjC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACrC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-nested-repositories.d.ts","sourceRoot":"","sources":["../src/git-nested-repositories.ts"],"names":[],"mappings":"AAsCA;;;;;;;;;;;;GAYG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"git-nested-repositories.d.ts","sourceRoot":"","sources":["../src/git-nested-repositories.ts"],"names":[],"mappings":"AAsCA;;;;;;;;;;;;GAYG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBnB;AAED;2EAC2E;AAC3E,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAElE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WorkspaceError } from "@claudexor/core";
|
|
2
|
-
import { gitEnv } from "./git-run.js";
|
|
2
|
+
import { gitEnv, SCRATCH_INDEX_CONFIG } from "./git-run.js";
|
|
3
3
|
/** Submodule paths the working tree's own `.gitmodules` declares, relative to
|
|
4
4
|
* the worktree top (where the file lives, whatever directory the capture runs
|
|
5
5
|
* in): a submodule the candidate added on purpose is captured as its commit
|
|
@@ -41,7 +41,16 @@ async function declaredSubmodulePaths(repo, env) {
|
|
|
41
41
|
* of their `git add` with `nestedRepositoryExcludes` instead of failing.
|
|
42
42
|
*/
|
|
43
43
|
export async function untrackedNestedRepositories(repo, env, pathspec, label) {
|
|
44
|
-
const listed = await gitEnv(repo, [
|
|
44
|
+
const listed = await gitEnv(repo, [
|
|
45
|
+
...SCRATCH_INDEX_CONFIG,
|
|
46
|
+
"ls-files",
|
|
47
|
+
"--others",
|
|
48
|
+
"--exclude-standard",
|
|
49
|
+
"--full-name",
|
|
50
|
+
"-z",
|
|
51
|
+
"--",
|
|
52
|
+
...pathspec,
|
|
53
|
+
], env);
|
|
45
54
|
if (listed.code !== 0) {
|
|
46
55
|
throw new WorkspaceError(`${label} could not list untracked files: ${listed.stderr.trim()}`);
|
|
47
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-nested-repositories.js","sourceRoot":"","sources":["../src/git-nested-repositories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"git-nested-repositories.js","sourceRoot":"","sources":["../src/git-nested-repositories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAE5D;;;;;yEAKyE;AACzE,KAAK,UAAU,sBAAsB,CACnC,IAAY,EACZ,GAA2B;IAE3B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;IACnE,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,IAAI,EACJ;QACE,QAAQ;QACR,QAAQ;QACR,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa;QAClC,QAAQ;QACR,cAAc;QACd,yBAAyB;KAC1B,EACD,GAAG,CACJ,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACxC,iFAAiF;IACjF,OAAO,IAAI,GAAG,CACZ,MAAM,CAAC,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACpD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CACrC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAY,EACZ,GAA2B,EAC3B,QAAkB,EAClB,KAAa;IAEb,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,IAAI,EACJ;QACE,GAAG,oBAAoB;QACvB,UAAU;QACV,UAAU;QACV,oBAAoB;QACpB,aAAa;QACb,IAAI;QACJ,IAAI;QACJ,GAAG,QAAQ;KACZ,EACD,GAAG,CACJ,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,cAAc,CAAC,GAAG,KAAK,oCAAoC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;SACzB,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;2EAC2E;AAC3E,MAAM,UAAU,wBAAwB,CAAC,KAAe;IACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { WorkspaceError, type CaptureProjection } from "@claudexor/core";
|
|
2
|
+
/** Typed classes of a Git child failure on an object path (capture, store, delivery). */
|
|
3
|
+
export type GitOperationFailureCode = "capture_space_insufficient" | "capture_git_stalled" | "capture_git_signal" | "capture_read_failed" | "capture_object_missing" | "capture_failed";
|
|
4
|
+
/** A Git child failed on an object path. Its facts are typed; prose is never parsed downstream. */
|
|
5
|
+
export declare class GitOperationError extends WorkspaceError {
|
|
6
|
+
readonly code: GitOperationFailureCode;
|
|
7
|
+
readonly signal?: string;
|
|
8
|
+
readonly stallMs?: number;
|
|
9
|
+
readonly requiredBytes?: number;
|
|
10
|
+
readonly availableBytes?: number;
|
|
11
|
+
constructor(code: GitOperationFailureCode, message: string, facts?: {
|
|
12
|
+
signal?: string;
|
|
13
|
+
stallMs?: number;
|
|
14
|
+
requiredBytes?: number;
|
|
15
|
+
availableBytes?: number;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/** Default stall bound: no output and no probe progress for this long kills the
|
|
19
|
+
* child. Generous on purpose: a silent read of a huge file on a slow, nearly
|
|
20
|
+
* full disk is honest work; only true inactivity this long is a hang. */
|
|
21
|
+
export declare const GIT_STALL_MS = 600000;
|
|
22
|
+
/**
|
|
23
|
+
* The stall bound of a child whose only work is bytes it reads: hashing prints
|
|
24
|
+
* nothing and moves no disk blocks, so no observation can tell it from a hang, and
|
|
25
|
+
* a flat bound would refuse any result above what ten minutes can hash.
|
|
26
|
+
*/
|
|
27
|
+
export declare function proofStallMs(bytes: number): number;
|
|
28
|
+
/**
|
|
29
|
+
* What the blobs of `tree` hold in bytes, from object headers alone (no content is
|
|
30
|
+
* read): the most that re-hashing its tracked files reads without a sign, since a
|
|
31
|
+
* blob the repository already holds is neither printed nor written again. Zero when
|
|
32
|
+
* Git cannot say, which leaves the flat bound.
|
|
33
|
+
*/
|
|
34
|
+
export declare function treeBlobBytes(repo: string, tree: string, env?: Record<string, string | null>): Promise<number>;
|
|
35
|
+
export interface ObservedGitOptions {
|
|
36
|
+
/** Environment patch; `null` removes an inherited variable. */
|
|
37
|
+
env?: Record<string, string | null>;
|
|
38
|
+
input?: string;
|
|
39
|
+
/** Receives stdout instead of the bounded in-memory capture (patch and pack bytes). */
|
|
40
|
+
stdout?: CaptureProjection;
|
|
41
|
+
stallMs?: number;
|
|
42
|
+
/** Extra progress evidence polled by the stall watchdog (for example bytes written). */
|
|
43
|
+
progress?: () => number;
|
|
44
|
+
/** Short operation name for typed failure messages. */
|
|
45
|
+
label: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ObservedGitResult {
|
|
48
|
+
code: number | null;
|
|
49
|
+
stdout: string;
|
|
50
|
+
stderr: string;
|
|
51
|
+
}
|
|
52
|
+
/** Machine classes of Git's C-locale stderr for a non-zero exit (no model prose is read).
|
|
53
|
+
* EDQUOT reads "Disk quota exceeded" on Linux and "Disc quota exceeded" on macOS. */
|
|
54
|
+
export declare function classifyGitFailure(stderr: string): GitOperationFailureCode;
|
|
55
|
+
/**
|
|
56
|
+
* Run one Git child on an object path. There is no wall-clock limit: a large
|
|
57
|
+
* honest operation may take long, so only a STALL (no output and no probe
|
|
58
|
+
* progress for `stallMs`) kills it. A stall, an external signal and a
|
|
59
|
+
* non-zero exit become typed {@link GitOperationError}s; callers that accept
|
|
60
|
+
* a non-zero exit (for example a refused `git apply`) pass `allowFailure`.
|
|
61
|
+
*/
|
|
62
|
+
export declare function gitObserved(repo: string, args: string[], options: ObservedGitOptions & {
|
|
63
|
+
allowFailure?: boolean;
|
|
64
|
+
}): Promise<ObservedGitResult>;
|
|
65
|
+
/**
|
|
66
|
+
* Progress evidence for a Git child that writes files without stdout (checkout,
|
|
67
|
+
* `add`, clone): free blocks on the filesystem it writes move as it writes. A
|
|
68
|
+
* busy filesystem can only make a stall look like progress, never the reverse.
|
|
69
|
+
*/
|
|
70
|
+
export declare function diskProgress(path: string): () => number;
|
|
71
|
+
/** Stream stdout straight to a file (patch and pack bytes never become a JS string). */
|
|
72
|
+
export declare function fileSink(path: string): CaptureProjection & {
|
|
73
|
+
bytes: () => number;
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=git-observed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-observed.d.ts","sourceRoot":"","sources":["../src/git-observed.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,cAAc,EACd,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAEzB,yFAAyF;AACzF,MAAM,MAAM,uBAAuB,GAC/B,4BAA4B,GAC5B,qBAAqB,GACrB,oBAAoB,GACpB,qBAAqB,GACrB,wBAAwB,GACxB,gBAAgB,CAAC;AAErB,mGAAmG;AACnG,qBAAa,iBAAkB,SAAQ,cAAc;IACnD,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,YACE,IAAI,EAAE,uBAAuB,EAC7B,OAAO,EAAE,MAAM,EACf,KAAK,GAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;KACpB,EASP;CACF;AAED;;yEAEyE;AACzE,eAAO,MAAM,YAAY,SAAU,CAAC;AAKpC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAM,GACtC,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;IACxB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD;qFACqF;AACrF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,CAgB1E;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,kBAAkB,GAAG;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACvD,OAAO,CAAC,iBAAiB,CAAC,CA4D5B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CAQvD;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG;IAAE,KAAK,EAAE,MAAM,MAAM,CAAA;CAAE,CAmBlF"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { closeSync, openSync, statfsSync, writeSync } from "node:fs";
|
|
2
|
+
import { assertCaptureComplete, runCaptureRaw, WorkspaceError, } from "@claudexor/core";
|
|
3
|
+
/** A Git child failed on an object path. Its facts are typed; prose is never parsed downstream. */
|
|
4
|
+
export class GitOperationError extends WorkspaceError {
|
|
5
|
+
code;
|
|
6
|
+
signal;
|
|
7
|
+
stallMs;
|
|
8
|
+
requiredBytes;
|
|
9
|
+
availableBytes;
|
|
10
|
+
constructor(code, message, facts = {}) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "GitOperationError";
|
|
13
|
+
this.code = code;
|
|
14
|
+
if (facts.signal !== undefined)
|
|
15
|
+
this.signal = facts.signal;
|
|
16
|
+
if (facts.stallMs !== undefined)
|
|
17
|
+
this.stallMs = facts.stallMs;
|
|
18
|
+
if (facts.requiredBytes !== undefined)
|
|
19
|
+
this.requiredBytes = facts.requiredBytes;
|
|
20
|
+
if (facts.availableBytes !== undefined)
|
|
21
|
+
this.availableBytes = facts.availableBytes;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** Default stall bound: no output and no probe progress for this long kills the
|
|
25
|
+
* child. Generous on purpose: a silent read of a huge file on a slow, nearly
|
|
26
|
+
* full disk is honest work; only true inactivity this long is a hang. */
|
|
27
|
+
export const GIT_STALL_MS = 600_000;
|
|
28
|
+
/** The slowest honest rate of a child with nothing to show: about 1 MiB/s. */
|
|
29
|
+
const SLOWEST_BYTES_PER_MS = 1024;
|
|
30
|
+
/**
|
|
31
|
+
* The stall bound of a child whose only work is bytes it reads: hashing prints
|
|
32
|
+
* nothing and moves no disk blocks, so no observation can tell it from a hang, and
|
|
33
|
+
* a flat bound would refuse any result above what ten minutes can hash.
|
|
34
|
+
*/
|
|
35
|
+
export function proofStallMs(bytes) {
|
|
36
|
+
return GIT_STALL_MS + Math.ceil(bytes / SLOWEST_BYTES_PER_MS);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* What the blobs of `tree` hold in bytes, from object headers alone (no content is
|
|
40
|
+
* read): the most that re-hashing its tracked files reads without a sign, since a
|
|
41
|
+
* blob the repository already holds is neither printed nor written again. Zero when
|
|
42
|
+
* Git cannot say, which leaves the flat bound.
|
|
43
|
+
*/
|
|
44
|
+
export async function treeBlobBytes(repo, tree, env = {}) {
|
|
45
|
+
let bytes = 0;
|
|
46
|
+
let carry = "";
|
|
47
|
+
const count = (line) => {
|
|
48
|
+
if (/^\d+$/.test(line))
|
|
49
|
+
bytes += Number(line);
|
|
50
|
+
};
|
|
51
|
+
const listed = await gitObserved(repo, ["ls-tree", "-r", "--format=%(objectsize)", tree], {
|
|
52
|
+
env,
|
|
53
|
+
label: "ls-tree --format=%(objectsize)",
|
|
54
|
+
allowFailure: true,
|
|
55
|
+
stdout: {
|
|
56
|
+
write(chunk) {
|
|
57
|
+
const lines = (carry + chunk.toString("latin1")).split("\n");
|
|
58
|
+
carry = lines.pop() ?? "";
|
|
59
|
+
lines.forEach(count);
|
|
60
|
+
},
|
|
61
|
+
end: () => "",
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
count(carry);
|
|
65
|
+
return listed.code === 0 ? bytes : 0;
|
|
66
|
+
}
|
|
67
|
+
/** Git's own diagnostics are read in the C locale so failure classes never depend on translation. */
|
|
68
|
+
const C_LOCALE = { LC_ALL: "C", LANGUAGE: "C" };
|
|
69
|
+
/** Machine classes of Git's C-locale stderr for a non-zero exit (no model prose is read).
|
|
70
|
+
* EDQUOT reads "Disk quota exceeded" on Linux and "Disc quota exceeded" on macOS. */
|
|
71
|
+
export function classifyGitFailure(stderr) {
|
|
72
|
+
if (/No space left on device|ENOSPC|Dis[ck] quota exceeded/i.test(stderr))
|
|
73
|
+
return "capture_space_insufficient";
|
|
74
|
+
if (/\bmissing (?:blob|tree|commit|tag|object)\b|\bbad object\b|unable to read [0-9a-f]{40,64}|not a valid object name|invalid object [0-9a-f]{40,64}|did not receive expected object|object [0-9a-f]{40,64} is missing/i.test(stderr))
|
|
75
|
+
return "capture_object_missing";
|
|
76
|
+
if (/read error|Input\/output error|unable to index file|short read|could not open .* for reading/i.test(stderr))
|
|
77
|
+
return "capture_read_failed";
|
|
78
|
+
return "capture_failed";
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Run one Git child on an object path. There is no wall-clock limit: a large
|
|
82
|
+
* honest operation may take long, so only a STALL (no output and no probe
|
|
83
|
+
* progress for `stallMs`) kills it. A stall, an external signal and a
|
|
84
|
+
* non-zero exit become typed {@link GitOperationError}s; callers that accept
|
|
85
|
+
* a non-zero exit (for example a refused `git apply`) pass `allowFailure`.
|
|
86
|
+
*/
|
|
87
|
+
export async function gitObserved(repo, args, options) {
|
|
88
|
+
const stallMs = options.stallMs ?? GIT_STALL_MS;
|
|
89
|
+
const watchdog = new AbortController();
|
|
90
|
+
let lastActivity = Date.now();
|
|
91
|
+
let lastProgress = options.progress?.() ?? 0;
|
|
92
|
+
let stalled = false;
|
|
93
|
+
const timer = setInterval(() => {
|
|
94
|
+
const progress = options.progress?.() ?? 0;
|
|
95
|
+
if (progress !== lastProgress) {
|
|
96
|
+
lastProgress = progress;
|
|
97
|
+
lastActivity = Date.now();
|
|
98
|
+
}
|
|
99
|
+
if (Date.now() - lastActivity >= stallMs) {
|
|
100
|
+
stalled = true;
|
|
101
|
+
watchdog.abort();
|
|
102
|
+
}
|
|
103
|
+
}, Math.max(50, Math.min(2_000, Math.floor(stallMs / 4))));
|
|
104
|
+
timer.unref?.();
|
|
105
|
+
try {
|
|
106
|
+
const result = await runCaptureRaw("git", ["-C", repo, ...args], {
|
|
107
|
+
env: { ...C_LOCALE, ...options.env },
|
|
108
|
+
input: options.input,
|
|
109
|
+
windowsConsole: "none",
|
|
110
|
+
abortSignal: watchdog.signal,
|
|
111
|
+
cancelSignal: "SIGKILL",
|
|
112
|
+
cancelKillDelayMs: 0,
|
|
113
|
+
// Output is activity whether it is buffered or goes to a sink.
|
|
114
|
+
onOutput: () => {
|
|
115
|
+
lastActivity = Date.now();
|
|
116
|
+
},
|
|
117
|
+
...(options.stdout ? { stdoutProjection: options.stdout } : {}),
|
|
118
|
+
});
|
|
119
|
+
assertCaptureComplete(result);
|
|
120
|
+
if (stalled) {
|
|
121
|
+
throw new GitOperationError("capture_git_stalled", `git ${options.label} made no progress for ${stallMs} ms and was stopped`, { stallMs });
|
|
122
|
+
}
|
|
123
|
+
if (result.signal) {
|
|
124
|
+
throw new GitOperationError("capture_git_signal", `git ${options.label} was terminated by ${result.signal}`, { signal: result.signal });
|
|
125
|
+
}
|
|
126
|
+
if (result.code !== 0 && !options.allowFailure) {
|
|
127
|
+
throw new GitOperationError(classifyGitFailure(result.stderr), `git ${options.label} failed: ${result.stderr.trim().slice(0, 2_000)}`);
|
|
128
|
+
}
|
|
129
|
+
return { code: result.code, stdout: result.stdout, stderr: result.stderr };
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
clearInterval(timer);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Progress evidence for a Git child that writes files without stdout (checkout,
|
|
137
|
+
* `add`, clone): free blocks on the filesystem it writes move as it writes. A
|
|
138
|
+
* busy filesystem can only make a stall look like progress, never the reverse.
|
|
139
|
+
*/
|
|
140
|
+
export function diskProgress(path) {
|
|
141
|
+
return () => {
|
|
142
|
+
try {
|
|
143
|
+
return Number(statfsSync(path).bavail);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/** Stream stdout straight to a file (patch and pack bytes never become a JS string). */
|
|
151
|
+
export function fileSink(path) {
|
|
152
|
+
const fd = openSync(path, "w", 0o600);
|
|
153
|
+
let bytes = 0;
|
|
154
|
+
let closed = false;
|
|
155
|
+
return {
|
|
156
|
+
write(chunk) {
|
|
157
|
+
let done = 0;
|
|
158
|
+
while (done < chunk.length)
|
|
159
|
+
done += writeSync(fd, chunk, done, chunk.length - done);
|
|
160
|
+
bytes += chunk.length;
|
|
161
|
+
},
|
|
162
|
+
end() {
|
|
163
|
+
if (!closed) {
|
|
164
|
+
closed = true;
|
|
165
|
+
closeSync(fd);
|
|
166
|
+
}
|
|
167
|
+
return "";
|
|
168
|
+
},
|
|
169
|
+
bytes: () => bytes,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=git-observed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-observed.js","sourceRoot":"","sources":["../src/git-observed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type GitObjectFormat, type GitObjectResult as GitObjectResultValue } from "@claudexor/schema";
|
|
2
|
+
/**
|
|
3
|
+
* The canonical descriptor of digest v1 (E). Keys are fixed and sorted, values
|
|
4
|
+
* are lowercase object ids, so equal results always serialize to equal bytes.
|
|
5
|
+
*/
|
|
6
|
+
export declare function gitResultDescriptor(input: {
|
|
7
|
+
object_format: GitObjectFormat;
|
|
8
|
+
base_tree: string;
|
|
9
|
+
candidate_tree: string;
|
|
10
|
+
}): string;
|
|
11
|
+
export declare function gitResultDigest(input: {
|
|
12
|
+
object_format: GitObjectFormat;
|
|
13
|
+
base_tree: string;
|
|
14
|
+
candidate_tree: string;
|
|
15
|
+
}): string;
|
|
16
|
+
export declare function makeGitObjectResult(input: {
|
|
17
|
+
object_format: GitObjectFormat;
|
|
18
|
+
base_tree: string;
|
|
19
|
+
candidate_tree: string;
|
|
20
|
+
base_commit: string | null;
|
|
21
|
+
store_boundary_commit: string | null;
|
|
22
|
+
}): GitObjectResultValue;
|
|
23
|
+
/** A recorded result whose digest does not match its own descriptor is never trusted. */
|
|
24
|
+
export declare function verifiedGitObjectResult(value: unknown): GitObjectResultValue | null;
|
|
25
|
+
export declare function repositoryObjectFormat(repo: string, env?: Record<string, string>): Promise<GitObjectFormat>;
|
|
26
|
+
/** The object format of the repository holding `dir`; null when `dir` is in none. */
|
|
27
|
+
export declare function repositoryObjectFormatOrNull(dir: string): Promise<GitObjectFormat | null>;
|
|
28
|
+
/** The tree of a commit-ish (or a tree itself), resolved without reading blobs. */
|
|
29
|
+
export declare function treeOf(repo: string, rev: string, env?: Record<string, string>): Promise<string>;
|
|
30
|
+
/**
|
|
31
|
+
* The user commit a captured base relies on: a Claudexor dirty snapshot is not
|
|
32
|
+
* referenced by any user ref, so its own closure must enter the project store
|
|
33
|
+
* and its single parent is the boundary; any other commit is its own boundary.
|
|
34
|
+
*/
|
|
35
|
+
export declare function storeBoundaryCommit(repo: string, commit: string | null, env?: Record<string, string>): Promise<string | null>;
|
|
36
|
+
//# sourceMappingURL=git-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-result.d.ts","sourceRoot":"","sources":["../src/git-result.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,eAAe,IAAI,oBAAoB,EAC7C,MAAM,mBAAmB,CAAC;AAI3B;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,aAAa,EAAE,eAAe,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAOT;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,aAAa,EAAE,eAAe,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAET;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,aAAa,EAAE,eAAe,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC,GAAG,oBAAoB,CAMvB;AAED,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAInF;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,OAAO,CAAC,eAAe,CAAC,CAW1B;AAED,qFAAqF;AACrF,wBAAsB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAM/F;AAED,mFAAmF;AACnF,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,OAAO,CAAC,MAAM,CAAC,CAUjB;AAKD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB"}
|