@claudexor/workspace 3.10.5 → 3.12.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.
- package/dist/directory-workspace.d.ts +38 -0
- package/dist/directory-workspace.d.ts.map +1 -0
- package/dist/directory-workspace.js +134 -0
- package/dist/directory-workspace.js.map +1 -0
- package/dist/envelope-recovery.d.ts +5 -0
- package/dist/envelope-recovery.d.ts.map +1 -1
- package/dist/envelope-recovery.js +20 -1
- package/dist/envelope-recovery.js.map +1 -1
- package/dist/files-apply.d.ts +16 -0
- package/dist/files-apply.d.ts.map +1 -0
- package/dist/files-apply.js +179 -0
- package/dist/files-apply.js.map +1 -0
- package/dist/files-io.d.ts +10 -0
- package/dist/files-io.d.ts.map +1 -0
- package/dist/files-io.js +165 -0
- package/dist/files-io.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/manager.d.ts +12 -25
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +41 -58
- package/dist/manager.js.map +1 -1
- package/dist/plain-diff.d.ts +2 -0
- package/dist/plain-diff.d.ts.map +1 -1
- package/dist/plain-diff.js +17 -2
- package/dist/plain-diff.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { WorkspaceFilesManifest, WorkspaceEnvelope, type AccessProfile } from "@claudexor/schema";
|
|
2
|
+
export declare function createDirectoryEnvelope(input: {
|
|
3
|
+
sourceRoot: string;
|
|
4
|
+
envelopeRoot: string;
|
|
5
|
+
envelopeId: string;
|
|
6
|
+
homeDir: string;
|
|
7
|
+
harnessConfigDirs: Record<string, string>;
|
|
8
|
+
taskId: string;
|
|
9
|
+
attemptId: string;
|
|
10
|
+
scopePaths?: string[];
|
|
11
|
+
inPlace?: boolean;
|
|
12
|
+
accessProfile?: AccessProfile;
|
|
13
|
+
}): Promise<WorkspaceEnvelope>;
|
|
14
|
+
/** Uses the existing envelope's baseline/tree directories, never another store. */
|
|
15
|
+
export declare function prepareDirectoryWorkspace(input: {
|
|
16
|
+
sourceRoot: string;
|
|
17
|
+
executionRoot: string;
|
|
18
|
+
envelopeRoot: string;
|
|
19
|
+
scopePaths: string[];
|
|
20
|
+
inPlace: boolean;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
export interface CapturedWorkspaceFiles {
|
|
23
|
+
manifest: WorkspaceFilesManifest;
|
|
24
|
+
manifestPath: string;
|
|
25
|
+
manifestSha256: string;
|
|
26
|
+
changedPaths: string[];
|
|
27
|
+
noChanges: boolean | null;
|
|
28
|
+
}
|
|
29
|
+
/** Complete bytes live under the run artifact tree; a preview is never apply input. */
|
|
30
|
+
export declare function captureDirectoryWorkspace(input: {
|
|
31
|
+
executionRoot: string;
|
|
32
|
+
envelopeRoot: string;
|
|
33
|
+
runRoot: string;
|
|
34
|
+
observedPaths?: string[];
|
|
35
|
+
excludedPaths?: string[];
|
|
36
|
+
sourceRoot?: string;
|
|
37
|
+
}): Promise<CapturedWorkspaceFiles>;
|
|
38
|
+
//# sourceMappingURL=directory-workspace.d.ts.map
|
|
@@ -0,0 +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,EAGnB,MAAM,mBAAmB,CAAC;AAiB3B,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,CA0B7B;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,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,uFAAuF;AACvF,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;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA4FlC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { WorkspaceFilesManifest, WorkspaceEnvelope, } from "@claudexor/schema";
|
|
4
|
+
import { containsSecretLikeToken, nowIso, sha256 } from "@claudexor/util";
|
|
5
|
+
import { directoryInventory, materializeWorkspaceFile, readWorkspaceFile, sameWorkspaceFile, workspaceFilePath, } from "./files-io.js";
|
|
6
|
+
export async function createDirectoryEnvelope(input) {
|
|
7
|
+
const executionRoot = input.inPlace ? input.sourceRoot : join(input.envelopeRoot, "tree");
|
|
8
|
+
const scopePaths = input.scopePaths ?? [];
|
|
9
|
+
await prepareDirectoryWorkspace({
|
|
10
|
+
...input,
|
|
11
|
+
executionRoot,
|
|
12
|
+
scopePaths,
|
|
13
|
+
inPlace: input.inPlace === true,
|
|
14
|
+
});
|
|
15
|
+
return WorkspaceEnvelope.parse({
|
|
16
|
+
id: input.envelopeId,
|
|
17
|
+
task_id: input.taskId,
|
|
18
|
+
attempt_id: input.attemptId,
|
|
19
|
+
repo_root: input.sourceRoot,
|
|
20
|
+
worktree_path: executionRoot,
|
|
21
|
+
base_ref: null,
|
|
22
|
+
base_sha: null,
|
|
23
|
+
branch_name: null,
|
|
24
|
+
workspace_kind: "directory",
|
|
25
|
+
scope_paths: scopePaths,
|
|
26
|
+
home_dir: input.homeDir,
|
|
27
|
+
harness_config_dirs: input.harnessConfigDirs,
|
|
28
|
+
policy_profile: input.accessProfile ?? "workspace_write",
|
|
29
|
+
dirty_policy: "snapshot",
|
|
30
|
+
created_at: nowIso(),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** Uses the existing envelope's baseline/tree directories, never another store. */
|
|
34
|
+
export async function prepareDirectoryWorkspace(input) {
|
|
35
|
+
const { sourceRoot, executionRoot, envelopeRoot, scopePaths, inPlace } = input;
|
|
36
|
+
const content = join(envelopeRoot, "baseline", "content");
|
|
37
|
+
const entries = await directoryInventory(sourceRoot, scopePaths, inPlace ? undefined : content);
|
|
38
|
+
if (!inPlace) {
|
|
39
|
+
await mkdir(executionRoot, { recursive: true });
|
|
40
|
+
for (const [path, state] of entries) {
|
|
41
|
+
await materializeWorkspaceFile(await workspaceFilePath(executionRoot, path), state, state.kind === "file" ? join(content, state.sha256.slice(7)) : undefined);
|
|
42
|
+
}
|
|
43
|
+
const current = await directoryInventory(sourceRoot, scopePaths);
|
|
44
|
+
if (current.size !== entries.size ||
|
|
45
|
+
[...entries].some(([path, state]) => !sameWorkspaceFile(state, current.get(path) ?? null)))
|
|
46
|
+
throw new Error("Selected source footprint changed while the directory copy was prepared");
|
|
47
|
+
}
|
|
48
|
+
const baseline = {
|
|
49
|
+
sourceRoot,
|
|
50
|
+
scopePaths,
|
|
51
|
+
isolation: inPlace ? "live" : "envelope",
|
|
52
|
+
entries: [...entries].map(([path, state]) => ({ path, state })),
|
|
53
|
+
};
|
|
54
|
+
await writeFile(join(envelopeRoot, "directory-baseline.json"), JSON.stringify(baseline) + "\n");
|
|
55
|
+
}
|
|
56
|
+
/** Complete bytes live under the run artifact tree; a preview is never apply input. */
|
|
57
|
+
export async function captureDirectoryWorkspace(input) {
|
|
58
|
+
const baseline = JSON.parse(await readFile(join(input.envelopeRoot, "directory-baseline.json"), "utf8"));
|
|
59
|
+
const before = new Map(baseline.entries.map(({ path, state }) => [path, state]));
|
|
60
|
+
const contentPrefix = "final/files/content";
|
|
61
|
+
const content = join(input.runRoot, contentPrefix);
|
|
62
|
+
const paths = baseline.isolation === "envelope"
|
|
63
|
+
? ["."]
|
|
64
|
+
: [...baseline.scopePaths, ...(input.observedPaths ?? [])];
|
|
65
|
+
const after = await directoryInventory(input.executionRoot, paths, content, input.excludedPaths);
|
|
66
|
+
const entries = [];
|
|
67
|
+
const excluded = (path) => (input.excludedPaths ?? []).some((prefix) => path === prefix || path.startsWith(prefix + "/"));
|
|
68
|
+
const observed = (input.observedPaths ?? []).filter((path) => path !== ".");
|
|
69
|
+
for (const path of [...new Set([...before.keys(), ...after.keys(), ...observed])].sort()) {
|
|
70
|
+
if (excluded(path))
|
|
71
|
+
continue;
|
|
72
|
+
const old = before.get(path);
|
|
73
|
+
if (old?.kind === "file" && baseline.isolation === "envelope") {
|
|
74
|
+
const saved = await readWorkspaceFile(join(input.envelopeRoot, "baseline", "content", old.sha256.slice(7)), content);
|
|
75
|
+
if (saved?.kind !== "file" ||
|
|
76
|
+
saved.sha256 !== old.sha256 ||
|
|
77
|
+
saved.sizeBytes !== old.sizeBytes)
|
|
78
|
+
throw new Error(`Baseline bytes no longer match: ${path}`);
|
|
79
|
+
}
|
|
80
|
+
const withRef = (state, retained) => state?.kind === "file" && retained
|
|
81
|
+
? { ...state, artifactPath: `${contentPrefix}/${state.sha256.slice(7)}` }
|
|
82
|
+
: state;
|
|
83
|
+
let knownAbsent = baseline.scopePaths.some((scope) => scope === "." || path === scope || path.startsWith(scope + "/"));
|
|
84
|
+
// New output outside the input footprint may add an absent target, but
|
|
85
|
+
// an existing unselected file is not a captured baseline to overwrite.
|
|
86
|
+
if (!old && !knownAbsent && baseline.isolation === "envelope")
|
|
87
|
+
knownAbsent =
|
|
88
|
+
(await readWorkspaceFile(await workspaceFilePath(baseline.sourceRoot, path, true))) ===
|
|
89
|
+
null;
|
|
90
|
+
entries.push({
|
|
91
|
+
path,
|
|
92
|
+
before: old
|
|
93
|
+
? withRef(old, baseline.isolation === "envelope")
|
|
94
|
+
: knownAbsent
|
|
95
|
+
? null
|
|
96
|
+
: "unknown",
|
|
97
|
+
after: withRef(after.get(path) ?? null, true),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const manifest = WorkspaceFilesManifest.parse({
|
|
101
|
+
version: 1,
|
|
102
|
+
sourceRoot: input.sourceRoot ?? baseline.sourceRoot,
|
|
103
|
+
executionRoot: input.executionRoot,
|
|
104
|
+
isolation: baseline.isolation,
|
|
105
|
+
scopePaths: baseline.scopePaths,
|
|
106
|
+
complete: true,
|
|
107
|
+
entries,
|
|
108
|
+
});
|
|
109
|
+
const manifestPath = "final/files/manifest.json";
|
|
110
|
+
await mkdir(join(input.runRoot, "final/files"), { recursive: true });
|
|
111
|
+
const text = JSON.stringify(manifest) + "\n";
|
|
112
|
+
if (containsSecretLikeToken(text))
|
|
113
|
+
throw new Error("Manifest contains credential material; no result was published");
|
|
114
|
+
const path = join(input.runRoot, manifestPath);
|
|
115
|
+
await writeFile(`${path}.pending`, text);
|
|
116
|
+
await rename(`${path}.pending`, path);
|
|
117
|
+
const changedPaths = entries
|
|
118
|
+
.filter((entry) => !sameWorkspaceFile(entry.before, entry.after))
|
|
119
|
+
.map((entry) => entry.path);
|
|
120
|
+
return {
|
|
121
|
+
manifest,
|
|
122
|
+
manifestPath,
|
|
123
|
+
manifestSha256: sha256(text),
|
|
124
|
+
changedPaths,
|
|
125
|
+
noChanges: entries.some((entry) => entry.before !== "unknown" && !sameWorkspaceFile(entry.before, entry.after))
|
|
126
|
+
? false
|
|
127
|
+
: changedPaths.length > 0
|
|
128
|
+
? null
|
|
129
|
+
: baseline.isolation === "envelope" || baseline.scopePaths.includes(".")
|
|
130
|
+
? true
|
|
131
|
+
: null,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=directory-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-workspace.js","sourceRoot":"","sources":["../src/directory-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
export interface EnvelopeRecoveryRecord {
|
|
2
2
|
envelopeId: string;
|
|
3
3
|
workspaceMode: "in_place" | "isolated";
|
|
4
|
+
workspaceKind?: "git" | "directory";
|
|
4
5
|
}
|
|
5
6
|
/** Read only the identity needed to dispose a crashed envelope. The caller
|
|
6
7
|
* decides whether missing legacy data is safe to fall back from. */
|
|
7
8
|
export declare function readEnvelopeRecoveryRecord(base: string): EnvelopeRecoveryRecord | null;
|
|
9
|
+
/** `ps` start time for a pid, or null when unavailable. Pid+start-time
|
|
10
|
+
* equality is the recycling-proof liveness identity for envelope owners
|
|
11
|
+
* (command names/titles mutate; the kernel start time never does). */
|
|
12
|
+
export declare function processStartTime(pid: number): string | null;
|
|
8
13
|
//# sourceMappingURL=envelope-recovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope-recovery.d.ts","sourceRoot":"","sources":["../src/envelope-recovery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"envelope-recovery.d.ts","sourceRoot":"","sources":["../src/envelope-recovery.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,UAAU,GAAG,UAAU,CAAC;IACvC,aAAa,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;CACrC;AAED;oEACoE;AACpE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAqBtF;AAED;;sEAEsE;AACtE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS3D"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
1
2
|
import { readFileSync } from "node:fs";
|
|
2
3
|
import { join } from "node:path";
|
|
3
4
|
/** Read only the identity needed to dispose a crashed envelope. The caller
|
|
@@ -9,7 +10,25 @@ export function readEnvelopeRecoveryRecord(base) {
|
|
|
9
10
|
(parsed.workspace_mode !== "in_place" && parsed.workspace_mode !== "isolated")) {
|
|
10
11
|
return null;
|
|
11
12
|
}
|
|
12
|
-
return {
|
|
13
|
+
return {
|
|
14
|
+
envelopeId: parsed.envelope_id,
|
|
15
|
+
workspaceMode: parsed.workspace_mode,
|
|
16
|
+
...(parsed.workspace_kind === "directory" ? { workspaceKind: "directory" } : {}),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** `ps` start time for a pid, or null when unavailable. Pid+start-time
|
|
24
|
+
* equality is the recycling-proof liveness identity for envelope owners
|
|
25
|
+
* (command names/titles mutate; the kernel start time never does). */
|
|
26
|
+
export function processStartTime(pid) {
|
|
27
|
+
try {
|
|
28
|
+
const out = execFileSync("ps", ["-p", String(pid), "-o", "lstart="], {
|
|
29
|
+
encoding: "utf8",
|
|
30
|
+
}).trim();
|
|
31
|
+
return out.length > 0 ? out : null;
|
|
13
32
|
}
|
|
14
33
|
catch {
|
|
15
34
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope-recovery.js","sourceRoot":"","sources":["../src/envelope-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"envelope-recovery.js","sourceRoot":"","sources":["../src/envelope-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC;oEACoE;AACpE,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAIvE,CAAC;QACF,IACE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;YACtC,CAAC,MAAM,CAAC,cAAc,KAAK,UAAU,IAAI,MAAM,CAAC,cAAc,KAAK,UAAU,CAAC,EAC9E,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,WAAW;YAC9B,aAAa,EAAE,MAAM,CAAC,cAAc;YACpC,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;sEAEsE;AACtE,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE;YACnE,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { WorkspaceFilesManifest, type WorkspaceFileChange } from "@claudexor/schema";
|
|
2
|
+
export declare function readWorkspaceFilesManifest(runRoot: string, path: string, expectedSha256: string): Promise<WorkspaceFilesManifest>;
|
|
3
|
+
export declare function verifyWorkspaceFiles(manifest: WorkspaceFilesManifest, artifactRoot: string): Promise<void>;
|
|
4
|
+
export declare function selectedWorkspaceChanges(manifest: WorkspaceFilesManifest, paths?: readonly string[]): WorkspaceFileChange[];
|
|
5
|
+
export declare function deliverableWorkspaceChanges(manifest: WorkspaceFilesManifest, paths?: readonly string[]): WorkspaceFileChange[];
|
|
6
|
+
export declare function materializeWorkspaceBaseline(root: string, manifest: WorkspaceFilesManifest, artifactRoot: string): Promise<void>;
|
|
7
|
+
export interface ApplyWorkspaceFilesResult {
|
|
8
|
+
applied: boolean;
|
|
9
|
+
alreadyApplied: boolean;
|
|
10
|
+
treeMutated: boolean;
|
|
11
|
+
appliedPaths: string[];
|
|
12
|
+
detail?: string;
|
|
13
|
+
}
|
|
14
|
+
/** Caller supplies the shared delivery mutation lease. Never reverse unrelated edits. */
|
|
15
|
+
export declare function applyWorkspaceFiles(targetRoot: string, manifest: WorkspaceFilesManifest, artifactRoot: string, paths?: readonly string[]): Promise<ApplyWorkspaceFilesResult>;
|
|
16
|
+
//# sourceMappingURL=files-apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files-apply.d.ts","sourceRoot":"","sources":["../src/files-apply.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAS3B,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,sBAAsB,CAAC,CAKjC;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,sBAAsB,EAChC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,sBAAsB,EAChC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GACxB,mBAAmB,EAAE,CAUvB;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,sBAAsB,EAChC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GACxB,mBAAmB,EAAE,CAEvB;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,sBAAsB,EAChC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkBD,yFAAyF;AACzF,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,sBAAsB,EAChC,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GACxB,OAAO,CAAC,yBAAyB,CAAC,CAsHpC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { chmod, lstat, mkdir, readFile, rename, rm, rmdir } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { WorkspaceFilesManifest, } from "@claudexor/schema";
|
|
4
|
+
import { newId, sha256 } from "@claudexor/util";
|
|
5
|
+
import { materializeWorkspaceFile, readWorkspaceFile, sameWorkspaceFile, workspaceFilePath, } from "./files-io.js";
|
|
6
|
+
export async function readWorkspaceFilesManifest(runRoot, path, expectedSha256) {
|
|
7
|
+
const text = await readFile(await workspaceFilePath(runRoot, path), "utf8");
|
|
8
|
+
if (sha256(text) !== expectedSha256)
|
|
9
|
+
throw new Error("Files manifest digest does not match the work product");
|
|
10
|
+
return WorkspaceFilesManifest.parse(JSON.parse(text));
|
|
11
|
+
}
|
|
12
|
+
export async function verifyWorkspaceFiles(manifest, artifactRoot) {
|
|
13
|
+
WorkspaceFilesManifest.parse(manifest);
|
|
14
|
+
for (const entry of manifest.entries) {
|
|
15
|
+
for (const state of [entry.before, entry.after]) {
|
|
16
|
+
if (state === "unknown" || state?.kind !== "file" || !state.artifactPath)
|
|
17
|
+
continue;
|
|
18
|
+
const actual = await readWorkspaceFile(await workspaceFilePath(artifactRoot, state.artifactPath));
|
|
19
|
+
if (actual?.kind !== "file" ||
|
|
20
|
+
actual.sha256 !== state.sha256 ||
|
|
21
|
+
actual.sizeBytes !== state.sizeBytes)
|
|
22
|
+
throw new Error(`Artifact bytes do not match the manifest: ${entry.path}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function selectedWorkspaceChanges(manifest, paths) {
|
|
27
|
+
const changed = manifest.entries.filter((entry) => !sameWorkspaceFile(entry.before, entry.after));
|
|
28
|
+
if (paths === undefined)
|
|
29
|
+
return changed;
|
|
30
|
+
for (const path of paths) {
|
|
31
|
+
if (!changed.some((entry) => entry.path === path || entry.path.startsWith(path + "/")))
|
|
32
|
+
throw new Error(`Selected path has no recorded change: ${path}`);
|
|
33
|
+
}
|
|
34
|
+
return changed.filter((entry) => paths.some((path) => entry.path === path || entry.path.startsWith(path + "/")));
|
|
35
|
+
}
|
|
36
|
+
export function deliverableWorkspaceChanges(manifest, paths) {
|
|
37
|
+
return selectedWorkspaceChanges(manifest, paths).filter((entry) => entry.before !== "unknown");
|
|
38
|
+
}
|
|
39
|
+
export async function materializeWorkspaceBaseline(root, manifest, artifactRoot) {
|
|
40
|
+
for (const entry of manifest.entries) {
|
|
41
|
+
if (entry.before === "unknown")
|
|
42
|
+
continue;
|
|
43
|
+
if (entry.before === null)
|
|
44
|
+
continue;
|
|
45
|
+
await materializeWorkspaceFile(await workspaceFilePath(root, entry.path), entry.before, entry.before.kind === "file" && entry.before.artifactPath
|
|
46
|
+
? await workspaceFilePath(artifactRoot, entry.before.artifactPath)
|
|
47
|
+
: undefined);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function ensureTargetParents(root, relative, mutated) {
|
|
51
|
+
const parts = relative.split("/").slice(0, -1);
|
|
52
|
+
for (let count = 1; count <= parts.length; count += 1) {
|
|
53
|
+
const path = await workspaceFilePath(root, parts.slice(0, count).join("/"));
|
|
54
|
+
const state = await readWorkspaceFile(path);
|
|
55
|
+
if (state === null) {
|
|
56
|
+
await mkdir(path);
|
|
57
|
+
mutated();
|
|
58
|
+
}
|
|
59
|
+
else if (state.kind !== "directory")
|
|
60
|
+
throw new Error(`Target parent changed: ${path}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Caller supplies the shared delivery mutation lease. Never reverse unrelated edits. */
|
|
64
|
+
export async function applyWorkspaceFiles(targetRoot, manifest, artifactRoot, paths) {
|
|
65
|
+
const result = {
|
|
66
|
+
applied: false,
|
|
67
|
+
alreadyApplied: false,
|
|
68
|
+
treeMutated: false,
|
|
69
|
+
appliedPaths: [],
|
|
70
|
+
};
|
|
71
|
+
if (manifest.isolation === "live")
|
|
72
|
+
return {
|
|
73
|
+
...result,
|
|
74
|
+
detail: "Direct results are already in place; no separate apply is available",
|
|
75
|
+
};
|
|
76
|
+
try {
|
|
77
|
+
await verifyWorkspaceFiles(manifest, artifactRoot);
|
|
78
|
+
// Entries with an unknown preimage are retained as custody/disclosure
|
|
79
|
+
// facts, but can never authorize overwriting an existing target. They are
|
|
80
|
+
// therefore excluded from the mutation set while safe selected entries
|
|
81
|
+
// remain deliverable.
|
|
82
|
+
const selected = selectedWorkspaceChanges(manifest, paths);
|
|
83
|
+
const refusedUnknown = selected.filter((entry) => entry.before === "unknown");
|
|
84
|
+
const entries = selected.filter((entry) => entry.before !== "unknown");
|
|
85
|
+
const current = new Map();
|
|
86
|
+
for (const entry of entries)
|
|
87
|
+
current.set(entry.path, await readWorkspaceFile(await workspaceFilePath(targetRoot, entry.path, true)));
|
|
88
|
+
const pendingEntries = entries.filter((entry) => !sameWorkspaceFile(entry.after, current.get(entry.path) ?? null));
|
|
89
|
+
if (pendingEntries.length === 0) {
|
|
90
|
+
const detail = refusedUnknown.length > 0
|
|
91
|
+
? `Unknown preimage retains custody: ${refusedUnknown.map((entry) => entry.path).join(", ")}`
|
|
92
|
+
: undefined;
|
|
93
|
+
return entries.length === 0 && refusedUnknown.length > 0
|
|
94
|
+
? { ...result, detail }
|
|
95
|
+
: { ...result, applied: true, alreadyApplied: true, detail };
|
|
96
|
+
}
|
|
97
|
+
for (const entry of pendingEntries) {
|
|
98
|
+
if (!sameWorkspaceFile(entry.before, current.get(entry.path) ?? null))
|
|
99
|
+
return { ...result, detail: `Target preimage changed: ${entry.path}` };
|
|
100
|
+
}
|
|
101
|
+
// Child removals precede directory replacement; creations establish parents first.
|
|
102
|
+
const ordered = [
|
|
103
|
+
...pendingEntries
|
|
104
|
+
.filter((entry) => entry.after === null)
|
|
105
|
+
.sort((a, b) => b.path.split("/").length - a.path.split("/").length),
|
|
106
|
+
...pendingEntries
|
|
107
|
+
.filter((entry) => entry.after !== null)
|
|
108
|
+
.sort((a, b) => a.path.split("/").length - b.path.split("/").length),
|
|
109
|
+
];
|
|
110
|
+
for (const entry of ordered) {
|
|
111
|
+
const target = await workspaceFilePath(targetRoot, entry.path);
|
|
112
|
+
if (!sameWorkspaceFile(entry.before, await readWorkspaceFile(target)))
|
|
113
|
+
return { ...result, detail: `Target changed during delivery: ${entry.path}` };
|
|
114
|
+
const after = entry.after;
|
|
115
|
+
if (after === null) {
|
|
116
|
+
if (entry.before !== "unknown" && entry.before?.kind === "directory")
|
|
117
|
+
await rmdir(target);
|
|
118
|
+
else
|
|
119
|
+
await rm(target);
|
|
120
|
+
}
|
|
121
|
+
else if (after.kind === "directory") {
|
|
122
|
+
if (entry.before !== null &&
|
|
123
|
+
entry.before !== "unknown" &&
|
|
124
|
+
entry.before.kind !== "directory") {
|
|
125
|
+
await rm(target);
|
|
126
|
+
result.treeMutated = true;
|
|
127
|
+
}
|
|
128
|
+
await ensureTargetParents(targetRoot, entry.path, () => {
|
|
129
|
+
result.treeMutated = true;
|
|
130
|
+
});
|
|
131
|
+
await mkdir(target, { recursive: true, mode: after.mode });
|
|
132
|
+
if (entry.before === null)
|
|
133
|
+
result.treeMutated = true;
|
|
134
|
+
await chmod(target, after.mode);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
await ensureTargetParents(targetRoot, entry.path, () => {
|
|
138
|
+
result.treeMutated = true;
|
|
139
|
+
});
|
|
140
|
+
const temp = join(dirname(target), `.${newId("claudexor-file")}`);
|
|
141
|
+
try {
|
|
142
|
+
await materializeWorkspaceFile(temp, after, after.kind === "file" && after.artifactPath
|
|
143
|
+
? await workspaceFilePath(artifactRoot, after.artifactPath)
|
|
144
|
+
: undefined);
|
|
145
|
+
if (!sameWorkspaceFile(entry.before, await readWorkspaceFile(target)))
|
|
146
|
+
return { ...result, detail: `Target changed while output was prepared: ${entry.path}` };
|
|
147
|
+
const existing = await lstat(target).catch((error) => {
|
|
148
|
+
if (error.code === "ENOENT")
|
|
149
|
+
return null;
|
|
150
|
+
throw error;
|
|
151
|
+
});
|
|
152
|
+
if (existing?.isDirectory()) {
|
|
153
|
+
await rmdir(target);
|
|
154
|
+
result.treeMutated = true;
|
|
155
|
+
}
|
|
156
|
+
await rename(temp, target);
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
await rm(temp, { force: true });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
result.treeMutated = true;
|
|
163
|
+
result.appliedPaths.push(entry.path);
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
...result,
|
|
167
|
+
applied: true,
|
|
168
|
+
...(refusedUnknown.length > 0
|
|
169
|
+
? {
|
|
170
|
+
detail: `Unknown preimage retains custody: ${refusedUnknown.map((entry) => entry.path).join(", ")}`,
|
|
171
|
+
}
|
|
172
|
+
: {}),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
return { ...result, detail: error instanceof Error ? error.message : String(error) };
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=files-apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files-apply.js","sourceRoot":"","sources":["../src/files-apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type WorkspaceFileState } from "@claudexor/schema";
|
|
2
|
+
/** Resolve relative entries without following an ancestor link into another tree. */
|
|
3
|
+
export declare function workspaceFilePath(root: string, relative: string, readingPreimage?: boolean): Promise<string>;
|
|
4
|
+
/** One streaming reader supplies both the digest and optional immutable bytes. */
|
|
5
|
+
export declare function readWorkspaceFile(path: string, contentDir?: string): Promise<WorkspaceFileState | null>;
|
|
6
|
+
export declare function sameWorkspaceFile(a: WorkspaceFileState | null | "unknown", b: WorkspaceFileState | null): boolean;
|
|
7
|
+
export declare function directoryInventory(root: string, paths: readonly string[], contentDir?: string, excluded?: readonly string[]): Promise<Map<string, WorkspaceFileState>>;
|
|
8
|
+
/** Materialize exactly one immutable state; callers own target preimage checks. */
|
|
9
|
+
export declare function materializeWorkspaceFile(path: string, state: WorkspaceFileState, contentPath?: string): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=files-io.d.ts.map
|
|
@@ -0,0 +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,CA+CpC;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,CAgC1C;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
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { chmod, lstat, mkdir, open, readlink, readdir, rename, rm, symlink, } from "node:fs/promises";
|
|
4
|
+
import { dirname, join, resolve, sep } from "node:path";
|
|
5
|
+
import { WorkspaceScopePath } from "@claudexor/schema";
|
|
6
|
+
import { newId, sensitiveResourcePolicy } from "@claudexor/util";
|
|
7
|
+
/** Resolve relative entries without following an ancestor link into another tree. */
|
|
8
|
+
export async function workspaceFilePath(root, relative, readingPreimage = false) {
|
|
9
|
+
WorkspaceScopePath.parse(relative);
|
|
10
|
+
const base = resolve(root);
|
|
11
|
+
const path = resolve(base, relative);
|
|
12
|
+
if (path !== base && !path.startsWith(base + sep))
|
|
13
|
+
throw new Error("File path escapes its root");
|
|
14
|
+
let current = base;
|
|
15
|
+
for (const part of relative.split("/").slice(0, -1)) {
|
|
16
|
+
current = join(current, part);
|
|
17
|
+
const stat = await lstat(current).catch((error) => {
|
|
18
|
+
if (error.code === "ENOENT" || (readingPreimage && error.code === "ENOTDIR"))
|
|
19
|
+
return null;
|
|
20
|
+
throw error;
|
|
21
|
+
});
|
|
22
|
+
if (stat && (stat.isSymbolicLink() || (!stat.isDirectory() && !readingPreimage)))
|
|
23
|
+
throw new Error(`File ancestor is not a directory: ${current}`);
|
|
24
|
+
}
|
|
25
|
+
return path;
|
|
26
|
+
}
|
|
27
|
+
/** One streaming reader supplies both the digest and optional immutable bytes. */
|
|
28
|
+
export async function readWorkspaceFile(path, contentDir) {
|
|
29
|
+
const stat = await lstat(path).catch((error) => {
|
|
30
|
+
if (error.code === "ENOENT" || error.code === "ENOTDIR")
|
|
31
|
+
return null;
|
|
32
|
+
throw error;
|
|
33
|
+
});
|
|
34
|
+
if (!stat)
|
|
35
|
+
return null;
|
|
36
|
+
if (stat.isSymbolicLink())
|
|
37
|
+
return { kind: "symlink", target: await readlink(path) };
|
|
38
|
+
if (stat.isDirectory())
|
|
39
|
+
return { kind: "directory", mode: stat.mode & 0o777 };
|
|
40
|
+
if (!stat.isFile())
|
|
41
|
+
throw new Error(`Unsupported filesystem entry: ${path}`);
|
|
42
|
+
if (contentDir)
|
|
43
|
+
await mkdir(contentDir, { recursive: true });
|
|
44
|
+
const input = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
45
|
+
const temp = contentDir ? join(contentDir, newId("pending")) : null;
|
|
46
|
+
let output = null;
|
|
47
|
+
const hash = createHash("sha256");
|
|
48
|
+
const scanner = contentDir ? sensitiveResourcePolicy.createContentScanner() : null;
|
|
49
|
+
let sizeBytes = 0;
|
|
50
|
+
try {
|
|
51
|
+
output = temp ? await open(temp, "wx", 0o600) : null;
|
|
52
|
+
for await (const chunk of input.createReadStream({ autoClose: false })) {
|
|
53
|
+
hash.update(chunk);
|
|
54
|
+
scanner?.write(chunk.toString("latin1"));
|
|
55
|
+
sizeBytes += chunk.length;
|
|
56
|
+
if (output)
|
|
57
|
+
await output.writeFile(chunk);
|
|
58
|
+
}
|
|
59
|
+
const after = await lstat(path);
|
|
60
|
+
if (stat.dev !== after.dev ||
|
|
61
|
+
stat.ino !== after.ino ||
|
|
62
|
+
stat.size !== sizeBytes ||
|
|
63
|
+
stat.mtimeMs !== after.mtimeMs ||
|
|
64
|
+
stat.ctimeMs !== after.ctimeMs)
|
|
65
|
+
throw new Error(`File changed while being captured: ${path}`);
|
|
66
|
+
const digest = hash.digest("hex");
|
|
67
|
+
if (scanner?.finish())
|
|
68
|
+
throw new Error("File contains credential material; no artifact was published");
|
|
69
|
+
if (output && temp && contentDir) {
|
|
70
|
+
await output.sync();
|
|
71
|
+
await output.close();
|
|
72
|
+
await rename(temp, join(contentDir, digest));
|
|
73
|
+
}
|
|
74
|
+
return { kind: "file", sha256: `sha256:${digest}`, sizeBytes, mode: stat.mode & 0o777 };
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
await input.close();
|
|
78
|
+
await output?.close().catch(() => undefined);
|
|
79
|
+
if (temp)
|
|
80
|
+
await rm(temp, { force: true });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function sameWorkspaceFile(a, b) {
|
|
84
|
+
if (a === "unknown")
|
|
85
|
+
return false;
|
|
86
|
+
if (a === null || b === null)
|
|
87
|
+
return a === b;
|
|
88
|
+
if (a.kind !== b.kind)
|
|
89
|
+
return false;
|
|
90
|
+
if (a.kind === "file" && b.kind === "file")
|
|
91
|
+
return a.sha256 === b.sha256 && a.sizeBytes === b.sizeBytes && a.mode === b.mode;
|
|
92
|
+
if (a.kind === "directory" && b.kind === "directory")
|
|
93
|
+
return a.mode === b.mode;
|
|
94
|
+
return a.kind === "symlink" && b.kind === "symlink" && a.target === b.target;
|
|
95
|
+
}
|
|
96
|
+
export async function directoryInventory(root, paths, contentDir, excluded = []) {
|
|
97
|
+
const entries = new Map();
|
|
98
|
+
const visited = new Set();
|
|
99
|
+
const walk = async (relative) => {
|
|
100
|
+
if (visited.has(relative) ||
|
|
101
|
+
excluded.some((prefix) => relative === prefix || relative.startsWith(prefix + "/")))
|
|
102
|
+
return;
|
|
103
|
+
visited.add(relative);
|
|
104
|
+
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
|
+
const state = await readWorkspaceFile(path, contentDir);
|
|
108
|
+
if (!state)
|
|
109
|
+
return;
|
|
110
|
+
if (relative !== ".")
|
|
111
|
+
entries.set(relative, state);
|
|
112
|
+
if (state.kind === "directory") {
|
|
113
|
+
for (const name of (await readdir(path)).sort())
|
|
114
|
+
await walk(relative === "." ? name : `${relative}/${name}`);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
for (const relative of paths) {
|
|
118
|
+
WorkspaceScopePath.parse(relative);
|
|
119
|
+
const parts = relative.split("/");
|
|
120
|
+
for (let count = 1; count < parts.length; count += 1) {
|
|
121
|
+
const parent = parts.slice(0, count).join("/");
|
|
122
|
+
const state = await readWorkspaceFile(await workspaceFilePath(root, parent));
|
|
123
|
+
if (state?.kind === "directory")
|
|
124
|
+
entries.set(parent, state);
|
|
125
|
+
}
|
|
126
|
+
await walk(relative);
|
|
127
|
+
}
|
|
128
|
+
return entries;
|
|
129
|
+
}
|
|
130
|
+
/** Materialize exactly one immutable state; callers own target preimage checks. */
|
|
131
|
+
export async function materializeWorkspaceFile(path, state, contentPath) {
|
|
132
|
+
await mkdir(dirname(path), { recursive: true });
|
|
133
|
+
if (state.kind === "directory") {
|
|
134
|
+
await mkdir(path, { recursive: true, mode: state.mode });
|
|
135
|
+
await chmod(path, state.mode);
|
|
136
|
+
}
|
|
137
|
+
else if (state.kind === "symlink") {
|
|
138
|
+
await symlink(state.target, path);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
if (!contentPath)
|
|
142
|
+
throw new Error("File state has no immutable content");
|
|
143
|
+
const source = await open(contentPath, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
144
|
+
let target = null;
|
|
145
|
+
const hash = createHash("sha256");
|
|
146
|
+
let bytes = 0;
|
|
147
|
+
try {
|
|
148
|
+
target = await open(path, "wx", state.mode);
|
|
149
|
+
for await (const chunk of source.createReadStream({ autoClose: false })) {
|
|
150
|
+
hash.update(chunk);
|
|
151
|
+
bytes += chunk.length;
|
|
152
|
+
await target.writeFile(chunk);
|
|
153
|
+
}
|
|
154
|
+
if (`sha256:${hash.digest("hex")}` !== state.sha256 || bytes !== state.sizeBytes)
|
|
155
|
+
throw new Error("File artifact does not match its recorded hash and size");
|
|
156
|
+
await target.chmod(state.mode);
|
|
157
|
+
await target.sync();
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
await source.close();
|
|
161
|
+
await target?.close();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=files-io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files-io.js","sourceRoot":"","sources":["../src/files-io.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,4 +8,7 @@ export * from "./anchor-store.js";
|
|
|
8
8
|
export * from "./manager.js";
|
|
9
9
|
export * from "./lanes.js";
|
|
10
10
|
export * from "./thread-tree.js";
|
|
11
|
+
export * from "./directory-workspace.js";
|
|
12
|
+
export * from "./files-io.js";
|
|
13
|
+
export * from "./files-apply.js";
|
|
11
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,4 +8,7 @@ export * from "./anchor-store.js";
|
|
|
8
8
|
export * from "./manager.js";
|
|
9
9
|
export * from "./lanes.js";
|
|
10
10
|
export * from "./thread-tree.js";
|
|
11
|
+
export * from "./directory-workspace.js";
|
|
12
|
+
export * from "./files-io.js";
|
|
13
|
+
export * from "./files-apply.js";
|
|
11
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
|
package/dist/manager.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import type { AccessProfile, DirtyPolicy, WorkspaceEnvelope } from "@claudexor/schema";
|
|
1
|
+
import type { AccessProfile, DirtyPolicy, WorkspaceEnvelope, WorkspaceKind } from "@claudexor/schema";
|
|
2
2
|
import { type LaneHomeEnv } from "./lanes.js";
|
|
3
|
+
import { type CapturedWorkspaceFiles } from "./directory-workspace.js";
|
|
3
4
|
export interface CreateEnvelopeOptions {
|
|
4
5
|
taskId: string;
|
|
5
6
|
attemptId: string;
|
|
6
7
|
baseRef?: string;
|
|
7
8
|
accessProfile?: AccessProfile;
|
|
8
9
|
dirtyPolicy?: DirtyPolicy;
|
|
10
|
+
workspaceKind?: WorkspaceKind;
|
|
11
|
+
scopePaths?: string[];
|
|
9
12
|
/**
|
|
10
13
|
* Run against the live `repoRoot` directly instead of an isolated git worktree.
|
|
11
14
|
* Used for external stateful environments that may not be git repositories
|
|
@@ -20,26 +23,13 @@ export interface CreateEnvelopeOptions {
|
|
|
20
23
|
* per-harness config dirs, and dirty-tree handling. Claudexor owns these
|
|
21
24
|
* envelopes (it does not rely on a harness's native --worktree).
|
|
22
25
|
*/
|
|
23
|
-
|
|
24
|
-
* equality is the recycling-proof liveness identity for envelope owners
|
|
25
|
-
* (command names/titles mutate; the kernel start time never does). */
|
|
26
|
-
export declare function processStartTime(pid: number): string | null;
|
|
26
|
+
export { processStartTime } from "./envelope-recovery.js";
|
|
27
27
|
export declare class WorkspaceManager {
|
|
28
28
|
private readonly repoRoot;
|
|
29
29
|
private readonly runtimeRoot;
|
|
30
30
|
private readonly artifactOwnership;
|
|
31
|
-
/**
|
|
32
|
-
*
|
|
33
|
-
* (`ensureClaudeBridge` returned `created: true`) during THIS run. The
|
|
34
|
-
* diff-exclusion of the generated `CLAUDE.md` bridge is gated on this recorded
|
|
35
|
-
* fact — not on content alone (A-3 residual): byte-equality cannot tell "we
|
|
36
|
-
* wrote this bridge this run" from "a candidate rewrote a PRE-EXISTING
|
|
37
|
-
* committed CLAUDE.md to exactly CLAUDE_BRIDGE_CONTENT", and excluding the
|
|
38
|
-
* latter would silently drop the candidate's real edit. This state is
|
|
39
|
-
* intentionally in-memory and per-manager: if a daemon upgrade recreates the
|
|
40
|
-
* manager mid-run the fact is lost, and its ABSENCE fails toward CAPTURE
|
|
41
|
-
* (exclude only on positive proof), matching the safe-direction doctrine.
|
|
42
|
-
*/
|
|
31
|
+
/** Current-prep bridge ownership, also persisted beside owner.json for recovery.
|
|
32
|
+
* Only a bridge created here and still byte-identical is excluded from capture. */
|
|
43
33
|
private readonly bridgeCreatedEnvelopes;
|
|
44
34
|
constructor(repoRoot: string, options?: {
|
|
45
35
|
runtimeRoot?: string;
|
|
@@ -55,14 +45,6 @@ export declare class WorkspaceManager {
|
|
|
55
45
|
ensureArtifactDirectory(env: WorkspaceEnvelope): string;
|
|
56
46
|
ownedArtifactRelativeDirectory(env: WorkspaceEnvelope): string | null;
|
|
57
47
|
create(opts: CreateEnvelopeOptions): Promise<WorkspaceEnvelope>;
|
|
58
|
-
/**
|
|
59
|
-
* Best-effort baseline copy of the live tree for in-place diff(). Copies each
|
|
60
|
-
* top-level entry individually while skipping only VCS/heavy ephemeral dirs.
|
|
61
|
-
* The baseline is external, so project `.claudexor/` content is ordinary user
|
|
62
|
-
* state and is copied like every other project path. On any failure the
|
|
63
|
-
* baseline is absent and diff() returns empty; reviewers still read the tree.
|
|
64
|
-
*/
|
|
65
|
-
private snapshotBaseline;
|
|
66
48
|
/** Env vars that scope a child harness to this envelope (HOME + per-harness config dirs). */
|
|
67
49
|
envFor(env: WorkspaceEnvelope): Record<string, string>;
|
|
68
50
|
/**
|
|
@@ -96,6 +78,11 @@ export declare class WorkspaceManager {
|
|
|
96
78
|
binarySecretLike: boolean;
|
|
97
79
|
}>;
|
|
98
80
|
diff(env: WorkspaceEnvelope): Promise<string>;
|
|
81
|
+
/** Directory work products retain full files, independently of diff previews. */
|
|
82
|
+
captureFiles(env: WorkspaceEnvelope, runRoot: string, options?: {
|
|
83
|
+
observedPaths?: string[];
|
|
84
|
+
sourceRoot?: string;
|
|
85
|
+
}): Promise<CapturedWorkspaceFiles>;
|
|
99
86
|
/** The created-this-run bridge fact for diff(): in-memory set first, else
|
|
100
87
|
* the persisted envelope-id-bound marker (survives manager recreation). */
|
|
101
88
|
private bridgeCreatedFact;
|
package/dist/manager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,aAAa,EACd,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AA4BlC,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,qBAAa,gBAAgB;IASzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAR3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAEtD;uFACmF;IACnF,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqB;IAE5D,YACmB,QAAQ,EAAE,MAAM,EACjC,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,EAMvC;IAED,OAAO,CAAC,aAAa;IAIrB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAiBpB,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAEtD;IAED,8BAA8B,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAEpE;IAEK,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyJpE;IAED,6FAA6F;IAC7F,MAAM,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUrD;IAED;;;;;;;;;;;;OAYG;IACH,eAAe,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAyBtE;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,CAEtF;IAEK,WAAW,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC;QACjD,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC,CAoGD;IAEK,IAAI,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAElD;IAED,iFAAiF;IAC3E,YAAY,CAChB,GAAG,EAAE,iBAAiB,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;KAChB,GACL,OAAO,CAAC,sBAAsB,CAAC,CAWjC;IAED;gFAC4E;IAC5E,OAAO,CAAC,iBAAiB;IAKnB,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DnD;IAED;;;;;;;OAOG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCpE;CACF"}
|
package/dist/manager.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { cpSync, existsSync, mkdtempSync, readdirSync, rmSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, mkdtempSync, readdirSync, rmSync, writeFileSync } from "node:fs";
|
|
3
2
|
import { tmpdir } from "node:os";
|
|
4
3
|
import { join, sep } from "node:path";
|
|
5
4
|
import { WorkspaceEnvelope as WorkspaceEnvelopeSchema } from "@claudexor/schema";
|
|
@@ -7,8 +6,9 @@ import { runCaptureRaw, WorkspaceError } from "@claudexor/core";
|
|
|
7
6
|
import { containsSecretLikeToken, ensureDir, newId, nowIso, projectRuntimeDir, } from "@claudexor/util";
|
|
8
7
|
import { ensureLaneHomeEnv } from "./lanes.js";
|
|
9
8
|
import { ArtifactOwnership } from "./artifact-ownership.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { captureDirectoryWorkspace, createDirectoryEnvelope, } from "./directory-workspace.js";
|
|
10
|
+
import { processStartTime, readEnvelopeRecoveryRecord } from "./envelope-recovery.js";
|
|
11
|
+
import { excludePlainDiffPathPrefix, plainDiffBinarySecretLike, relativizePlainDiffHeaders, snapshotLegacyDirectoryBaseline, } from "./plain-diff.js";
|
|
12
12
|
import { CLAUDE_BRIDGE_BASENAME, bridgeCreatedMarkerMatches, ensureClaudeBridge, isGeneratedClaudeBridge, writeBridgeCreatedMarker, } from "./claude-bridge.js";
|
|
13
13
|
import { branchDelete, captureWorkingTreeTransient, isolatedCloneAdd, isGitRepo, revParse, snapshotTree, statusPorcelain, stashCreate, worktreePrune, worktreeRemove, } from "./git.js";
|
|
14
14
|
/**
|
|
@@ -16,36 +16,13 @@ import { branchDelete, captureWorkingTreeTransient, isolatedCloneAdd, isGitRepo,
|
|
|
16
16
|
* per-harness config dirs, and dirty-tree handling. Claudexor owns these
|
|
17
17
|
* envelopes (it does not rely on a harness's native --worktree).
|
|
18
18
|
*/
|
|
19
|
-
|
|
20
|
-
* equality is the recycling-proof liveness identity for envelope owners
|
|
21
|
-
* (command names/titles mutate; the kernel start time never does). */
|
|
22
|
-
export function processStartTime(pid) {
|
|
23
|
-
try {
|
|
24
|
-
const out = execFileSync("ps", ["-p", String(pid), "-o", "lstart="], {
|
|
25
|
-
encoding: "utf8",
|
|
26
|
-
}).trim();
|
|
27
|
-
return out.length > 0 ? out : null;
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
19
|
+
export { processStartTime } from "./envelope-recovery.js";
|
|
33
20
|
export class WorkspaceManager {
|
|
34
21
|
repoRoot;
|
|
35
22
|
runtimeRoot;
|
|
36
23
|
artifactOwnership;
|
|
37
|
-
/**
|
|
38
|
-
*
|
|
39
|
-
* (`ensureClaudeBridge` returned `created: true`) during THIS run. The
|
|
40
|
-
* diff-exclusion of the generated `CLAUDE.md` bridge is gated on this recorded
|
|
41
|
-
* fact — not on content alone (A-3 residual): byte-equality cannot tell "we
|
|
42
|
-
* wrote this bridge this run" from "a candidate rewrote a PRE-EXISTING
|
|
43
|
-
* committed CLAUDE.md to exactly CLAUDE_BRIDGE_CONTENT", and excluding the
|
|
44
|
-
* latter would silently drop the candidate's real edit. This state is
|
|
45
|
-
* intentionally in-memory and per-manager: if a daemon upgrade recreates the
|
|
46
|
-
* manager mid-run the fact is lost, and its ABSENCE fails toward CAPTURE
|
|
47
|
-
* (exclude only on positive proof), matching the safe-direction doctrine.
|
|
48
|
-
*/
|
|
24
|
+
/** Current-prep bridge ownership, also persisted beside owner.json for recovery.
|
|
25
|
+
* Only a bridge created here and still byte-identical is excluded from capture. */
|
|
49
26
|
bridgeCreatedEnvelopes = new Set();
|
|
50
27
|
constructor(repoRoot, options = {}) {
|
|
51
28
|
this.repoRoot = repoRoot;
|
|
@@ -120,7 +97,18 @@ export class WorkspaceManager {
|
|
|
120
97
|
created_at: nowIso(),
|
|
121
98
|
envelope_id: envelopeId,
|
|
122
99
|
workspace_mode: workspaceMode,
|
|
100
|
+
workspace_kind: opts.workspaceKind,
|
|
123
101
|
}) + "\n");
|
|
102
|
+
if (opts.workspaceKind === "directory") {
|
|
103
|
+
return createDirectoryEnvelope({
|
|
104
|
+
...opts,
|
|
105
|
+
sourceRoot: this.repoRoot,
|
|
106
|
+
envelopeRoot: base,
|
|
107
|
+
envelopeId,
|
|
108
|
+
homeDir,
|
|
109
|
+
harnessConfigDirs,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
124
112
|
// In-place mode: mutate the live repoRoot directly (no isolated checkout).
|
|
125
113
|
// Used for thread turns (chat-first: the next turn sees this one's work) and
|
|
126
114
|
// for stateful external environments where runtime state is the deliverable.
|
|
@@ -134,7 +122,7 @@ export class WorkspaceManager {
|
|
|
134
122
|
const readOnly = opts.accessProfile === "readonly";
|
|
135
123
|
const baseSha = !readOnly && gitRepo ? await snapshotTree(this.repoRoot) : null;
|
|
136
124
|
if (!readOnly && !gitRepo)
|
|
137
|
-
this.
|
|
125
|
+
snapshotLegacyDirectoryBaseline(this.repoRoot, base);
|
|
138
126
|
return WorkspaceEnvelopeSchema.parse({
|
|
139
127
|
id: envelopeId,
|
|
140
128
|
task_id: opts.taskId,
|
|
@@ -217,28 +205,6 @@ export class WorkspaceManager {
|
|
|
217
205
|
}
|
|
218
206
|
return envelope;
|
|
219
207
|
}
|
|
220
|
-
/**
|
|
221
|
-
* Best-effort baseline copy of the live tree for in-place diff(). Copies each
|
|
222
|
-
* top-level entry individually while skipping only VCS/heavy ephemeral dirs.
|
|
223
|
-
* The baseline is external, so project `.claudexor/` content is ordinary user
|
|
224
|
-
* state and is copied like every other project path. On any failure the
|
|
225
|
-
* baseline is absent and diff() returns empty; reviewers still read the tree.
|
|
226
|
-
*/
|
|
227
|
-
snapshotBaseline(base) {
|
|
228
|
-
const baseline = join(base, "baseline");
|
|
229
|
-
const skip = new Set([".git", "node_modules", "__pycache__", ".venv", "venv"]);
|
|
230
|
-
try {
|
|
231
|
-
ensureDir(baseline);
|
|
232
|
-
for (const entry of readdirSync(this.repoRoot)) {
|
|
233
|
-
if (skip.has(entry))
|
|
234
|
-
continue;
|
|
235
|
-
cpSync(join(this.repoRoot, entry), join(baseline, entry), { recursive: true });
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
catch {
|
|
239
|
-
/* baseline unavailable -> diff() falls back to empty */
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
208
|
/** Env vars that scope a child harness to this envelope (HOME + per-harness config dirs). */
|
|
243
209
|
envFor(env) {
|
|
244
210
|
return {
|
|
@@ -304,6 +270,8 @@ export class WorkspaceManager {
|
|
|
304
270
|
return ensureLaneHomeEnv(this.runtimeRoot, threadId, harnessId, profileId);
|
|
305
271
|
}
|
|
306
272
|
async captureDiff(env) {
|
|
273
|
+
if (env.workspace_kind === "directory")
|
|
274
|
+
throw new WorkspaceError("Directory results use captureFiles; a text diff is not their work product");
|
|
307
275
|
if (env.policy_profile === "readonly") {
|
|
308
276
|
return { diff: "", binarySecretLike: false };
|
|
309
277
|
}
|
|
@@ -394,6 +362,19 @@ export class WorkspaceManager {
|
|
|
394
362
|
async diff(env) {
|
|
395
363
|
return (await this.captureDiff(env)).diff;
|
|
396
364
|
}
|
|
365
|
+
/** Directory work products retain full files, independently of diff previews. */
|
|
366
|
+
async captureFiles(env, runRoot, options = {}) {
|
|
367
|
+
if (env.workspace_kind !== "directory")
|
|
368
|
+
throw new WorkspaceError("captureFiles requires a directory workspace");
|
|
369
|
+
const owned = this.ownedArtifactRelativeDirectory(env);
|
|
370
|
+
return captureDirectoryWorkspace({
|
|
371
|
+
executionRoot: env.worktree_path,
|
|
372
|
+
envelopeRoot: this.envelopeBase(env.task_id, env.attempt_id),
|
|
373
|
+
runRoot,
|
|
374
|
+
...options,
|
|
375
|
+
excludedPaths: owned ? [owned] : [],
|
|
376
|
+
});
|
|
377
|
+
}
|
|
397
378
|
/** The created-this-run bridge fact for diff(): in-memory set first, else
|
|
398
379
|
* the persisted envelope-id-bound marker (survives manager recreation). */
|
|
399
380
|
bridgeCreatedFact(env) {
|
|
@@ -410,7 +391,7 @@ export class WorkspaceManager {
|
|
|
410
391
|
const inPlace = env.worktree_path === env.repo_root;
|
|
411
392
|
if (inPlace)
|
|
412
393
|
this.artifactOwnership.removeDirectory(env);
|
|
413
|
-
if (!inPlace) {
|
|
394
|
+
if (!inPlace && env.workspace_kind !== "directory") {
|
|
414
395
|
const privateClone = existsSync(join(this.envelopeBase(env.task_id, env.attempt_id), "private-clone-v1"));
|
|
415
396
|
if (!privateClone) {
|
|
416
397
|
try {
|
|
@@ -453,7 +434,7 @@ export class WorkspaceManager {
|
|
|
453
434
|
catch {
|
|
454
435
|
/* best-effort */
|
|
455
436
|
}
|
|
456
|
-
if (!inPlace) {
|
|
437
|
+
if (!inPlace && env.workspace_kind !== "directory") {
|
|
457
438
|
try {
|
|
458
439
|
await worktreePrune(this.repoRoot);
|
|
459
440
|
}
|
|
@@ -478,15 +459,17 @@ export class WorkspaceManager {
|
|
|
478
459
|
throw new WorkspaceError(`refusing to dispose orphan ${taskId}/${attemptId}: artifact ownership exists without valid recovery identity`);
|
|
479
460
|
}
|
|
480
461
|
const inPlace = recovery?.workspaceMode === "in_place";
|
|
462
|
+
const directory = recovery?.workspaceKind === "directory";
|
|
481
463
|
const envelope = WorkspaceEnvelopeSchema.parse({
|
|
482
464
|
id: recovery?.envelopeId ?? newId("env"),
|
|
483
465
|
task_id: taskId,
|
|
484
466
|
attempt_id: attemptId,
|
|
485
467
|
repo_root: this.repoRoot,
|
|
486
|
-
base_ref: "HEAD",
|
|
487
|
-
base_sha: inPlace ? null : "0000000000000000000000000000000000000000",
|
|
468
|
+
base_ref: directory ? null : "HEAD",
|
|
469
|
+
base_sha: directory || inPlace ? null : "0000000000000000000000000000000000000000",
|
|
470
|
+
workspace_kind: recovery?.workspaceKind,
|
|
488
471
|
worktree_path: inPlace ? this.repoRoot : join(base, "tree"),
|
|
489
|
-
branch_name: inPlace ? "inplace" : `claudexor/${taskId}/${attemptId}`,
|
|
472
|
+
branch_name: directory ? null : inPlace ? "inplace" : `claudexor/${taskId}/${attemptId}`,
|
|
490
473
|
home_dir: join(base, "home"),
|
|
491
474
|
harness_config_dirs: {
|
|
492
475
|
codex_home: join(base, "home", ".codex"),
|
package/dist/manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/plain-diff.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** Legacy live convergence capture only. Explicit directory workspaces use a selected footprint. */
|
|
2
|
+
export declare function snapshotLegacyDirectoryBaseline(repoRoot: string, base: string): void;
|
|
1
3
|
/** Rewrite only structural GNU/BSD `diff -ruN` headers to git-style paths.
|
|
2
4
|
* Missing-side headers become `/dev/null`, making added/deleted files exactly
|
|
3
5
|
* reversible with `git apply --no-index`; hunk content is never rewritten. */
|
package/dist/plain-diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plain-diff.d.ts","sourceRoot":"","sources":["../src/plain-diff.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plain-diff.d.ts","sourceRoot":"","sources":["../src/plain-diff.ts"],"names":[],"mappings":"AAiBA,oGAAoG;AACpG,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAYpF;AAED;;8EAE8E;AAC9E,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,MAAM,CAkDR;AAED;;;kFAGkF;AAClF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA6BpF;AAED;kFACkF;AAClF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CA0BjF"}
|
package/dist/plain-diff.js
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
-
import { closeSync, constants, existsSync, fstatSync, openSync, readFileSync } from "node:fs";
|
|
2
|
-
import { resolve, sep } from "node:path";
|
|
1
|
+
import { closeSync, constants, cpSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readdirSync, } from "node:fs";
|
|
2
|
+
import { join, resolve, sep } from "node:path";
|
|
3
3
|
import { parseUnifiedDiff } from "@claudexor/core";
|
|
4
4
|
import { containsSecretLikeToken } from "@claudexor/util";
|
|
5
5
|
const MAX_BINARY_SECRET_SCAN_BYTES = 32 * 1024 * 1024;
|
|
6
|
+
/** Legacy live convergence capture only. Explicit directory workspaces use a selected footprint. */
|
|
7
|
+
export function snapshotLegacyDirectoryBaseline(repoRoot, base) {
|
|
8
|
+
const baseline = join(base, "baseline");
|
|
9
|
+
const skip = new Set([".git", "node_modules", "__pycache__", ".venv", "venv"]);
|
|
10
|
+
try {
|
|
11
|
+
mkdirSync(baseline, { recursive: true });
|
|
12
|
+
for (const entry of readdirSync(repoRoot)) {
|
|
13
|
+
if (!skip.has(entry))
|
|
14
|
+
cpSync(join(repoRoot, entry), join(baseline, entry), { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
/* Existing captureDiff reports unavailable legacy capture. */
|
|
19
|
+
}
|
|
20
|
+
}
|
|
6
21
|
/** Rewrite only structural GNU/BSD `diff -ruN` headers to git-style paths.
|
|
7
22
|
* Missing-side headers become `/dev/null`, making added/deleted files exactly
|
|
8
23
|
* reversible with `git apply --no-index`; hunk content is never rewritten. */
|
package/dist/plain-diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plain-diff.js","sourceRoot":"","sources":["../src/plain-diff.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"plain-diff.js","sourceRoot":"","sources":["../src/plain-diff.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claudexor/workspace",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.12.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "WorkspaceEnvelope manager: git worktree + scoped HOME/harness-config isolation + dirty policy.",
|
|
6
6
|
"type": "module",
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@claudexor/
|
|
20
|
-
"@claudexor/
|
|
21
|
-
"@claudexor/util": "3.
|
|
19
|
+
"@claudexor/core": "3.12.0",
|
|
20
|
+
"@claudexor/schema": "3.12.0",
|
|
21
|
+
"@claudexor/util": "3.12.0"
|
|
22
22
|
},
|
|
23
23
|
"repository": {
|
|
24
24
|
"type": "git",
|