@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
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { existsSync, linkSync, mkdirSync, openSync, closeSync, readSync, readdirSync, renameSync, rmSync, statSync, statfsSync, fstatSync, } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
import { fileSink, gitObserved, GitOperationError } from "./git-observed.js";
|
|
5
|
+
/** Margin kept free on the destination filesystem beyond what a copy needs. */
|
|
6
|
+
const SPACE_MARGIN_BYTES = 64 * 1024 * 1024;
|
|
7
|
+
/** Copies of big blobs stream in bounded memory: Git treats every blob above this as "big". */
|
|
8
|
+
const STREAMING_THRESHOLD = ["-c", "core.bigFileThreshold=1m"];
|
|
9
|
+
export function looseObjectPath(objectsDir, oid) {
|
|
10
|
+
return join(objectsDir, oid.slice(0, 2), oid.slice(2));
|
|
11
|
+
}
|
|
12
|
+
const PACK_INDEX_HEADER = 8 + 256 * 4;
|
|
13
|
+
/** The object count of a version-2 pack index: its fanout total, one fixed read. */
|
|
14
|
+
function readPackIndexCount(fd, idxPath) {
|
|
15
|
+
const header = Buffer.alloc(PACK_INDEX_HEADER);
|
|
16
|
+
if (readSync(fd, header, 0, header.length, 0) !== header.length)
|
|
17
|
+
throw new Error(`short pack index ${idxPath}`);
|
|
18
|
+
if (header.readUInt32BE(0) !== 0xff744f63 || header.readUInt32BE(4) !== 2)
|
|
19
|
+
throw new Error(`unsupported pack index ${idxPath}`);
|
|
20
|
+
return header.readUInt32BE(8 + 255 * 4);
|
|
21
|
+
}
|
|
22
|
+
function packIndexObjectCount(idxPath) {
|
|
23
|
+
const fd = openSync(idxPath, "r");
|
|
24
|
+
try {
|
|
25
|
+
return readPackIndexCount(fd, idxPath);
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
closeSync(fd);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Object ids of a version-2 pack index, read in bounded chunks (no whole-file read). */
|
|
32
|
+
export function packIndexObjectIds(idxPath, hashLength) {
|
|
33
|
+
const fd = openSync(idxPath, "r");
|
|
34
|
+
try {
|
|
35
|
+
const count = readPackIndexCount(fd, idxPath);
|
|
36
|
+
// v2 layout: header, fanout, sorted oids, crc32s, offsets, large offsets, checksums.
|
|
37
|
+
if (fstatSync(fd).size < PACK_INDEX_HEADER + count * (hashLength + 8) + 2 * hashLength)
|
|
38
|
+
throw new Error(`short pack index ${idxPath}`);
|
|
39
|
+
const oids = [];
|
|
40
|
+
const chunk = Buffer.alloc(hashLength * 4096);
|
|
41
|
+
for (let index = 0; index < count;) {
|
|
42
|
+
const take = Math.min(4096, count - index);
|
|
43
|
+
const read = readSync(fd, chunk, 0, take * hashLength, PACK_INDEX_HEADER + index * hashLength);
|
|
44
|
+
if (read !== take * hashLength)
|
|
45
|
+
throw new Error(`short pack index ${idxPath}`);
|
|
46
|
+
for (let entry = 0; entry < take; entry += 1)
|
|
47
|
+
oids.push(chunk.toString("hex", entry * hashLength, (entry + 1) * hashLength));
|
|
48
|
+
index += take;
|
|
49
|
+
}
|
|
50
|
+
return oids;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
closeSync(fd);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function sameDevice(a, b) {
|
|
57
|
+
try {
|
|
58
|
+
return statSync(a).dev === statSync(b).dev;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Hard-link errors meaning "this filesystem cannot link here": the caller streams instead. */
|
|
65
|
+
const LINK_UNAVAILABLE = new Set(["EXDEV", "EPERM", "ENOTSUP", "EOPNOTSUPP", "EMLINK", "ENOSYS"]);
|
|
66
|
+
/** Publish `source` at `target` by hard link, never overwriting; false when the
|
|
67
|
+
* filesystem refuses hard links (FAT/exFAT, some network mounts), so the
|
|
68
|
+
* objects are streamed as a pack instead of failing the capture. */
|
|
69
|
+
function tryLink(source, target) {
|
|
70
|
+
if (existsSync(target))
|
|
71
|
+
return true;
|
|
72
|
+
const temp = `${target}.tmp-${randomUUID()}`;
|
|
73
|
+
try {
|
|
74
|
+
linkSync(source, temp);
|
|
75
|
+
renameSync(temp, target);
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (LINK_UNAVAILABLE.has(error.code ?? ""))
|
|
80
|
+
return false;
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
rmSync(temp, { force: true });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Bytes free for an unprivileged writer on the filesystem holding `path`;
|
|
88
|
+
* null when the platform or filesystem cannot report it (free space unknown). */
|
|
89
|
+
export function availableBytes(path) {
|
|
90
|
+
try {
|
|
91
|
+
const stats = statfsSync(path);
|
|
92
|
+
const free = Number(stats.bavail) * Number(stats.bsize);
|
|
93
|
+
return Number.isFinite(free) ? free : null;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** A write that ran out of space is the typed space refusal, wherever it happened. */
|
|
100
|
+
function typedSpaceFailure(error, label) {
|
|
101
|
+
const code = error?.code;
|
|
102
|
+
if (code !== "ENOSPC" && code !== "EDQUOT")
|
|
103
|
+
return error;
|
|
104
|
+
return new GitOperationError("capture_space_insufficient", `${label} ran out of space: ${error.message}`);
|
|
105
|
+
}
|
|
106
|
+
/** On-disk sizes of the given objects at an endpoint (missing objects count zero). */
|
|
107
|
+
export async function objectDiskSizes(endpoint, oids) {
|
|
108
|
+
const sizes = new Map();
|
|
109
|
+
if (oids.length === 0)
|
|
110
|
+
return sizes;
|
|
111
|
+
const result = await gitObserved(endpoint.cwd, ["cat-file", "--batch-check=%(objectname) %(objectsize:disk)"], { env: endpoint.env, input: `${oids.join("\n")}\n`, label: "cat-file --batch-check" });
|
|
112
|
+
for (const line of result.stdout.split("\n")) {
|
|
113
|
+
const [oid, size] = line.split(" ");
|
|
114
|
+
if (oid && size && /^\d+$/.test(size))
|
|
115
|
+
sizes.set(oid, Number(size));
|
|
116
|
+
}
|
|
117
|
+
return sizes;
|
|
118
|
+
}
|
|
119
|
+
/** The subset of `oids` an endpoint lacks (its own objects plus any alternates its env names). */
|
|
120
|
+
export async function missingObjects(endpoint, oids) {
|
|
121
|
+
if (oids.length === 0)
|
|
122
|
+
return [];
|
|
123
|
+
const result = await gitObserved(endpoint.cwd, ["cat-file", "--batch-check=%(objectname)"], {
|
|
124
|
+
env: endpoint.env,
|
|
125
|
+
input: `${oids.join("\n")}\n`,
|
|
126
|
+
label: "cat-file --batch-check",
|
|
127
|
+
});
|
|
128
|
+
return result.stdout
|
|
129
|
+
.split("\n")
|
|
130
|
+
.filter((line) => line.endsWith(" missing"))
|
|
131
|
+
.map((line) => line.slice(0, -" missing".length));
|
|
132
|
+
}
|
|
133
|
+
/** Refuse before writing when the destination cannot hold what is about to be
|
|
134
|
+
* copied. Unknown free space refuses nothing: a write that then runs out of
|
|
135
|
+
* space still ends as the same typed refusal (see typedSpaceFailure). */
|
|
136
|
+
export function assertSpaceFor(destinationDir, requiredBytes, label) {
|
|
137
|
+
if (requiredBytes <= 0)
|
|
138
|
+
return;
|
|
139
|
+
const free = availableBytes(destinationDir);
|
|
140
|
+
if (free !== null && free < requiredBytes + SPACE_MARGIN_BYTES) {
|
|
141
|
+
throw new GitOperationError("capture_space_insufficient", `${label} needs ${requiredBytes} bytes plus a ${SPACE_MARGIN_BYTES}-byte margin; ${free} bytes are free`, { requiredBytes: requiredBytes + SPACE_MARGIN_BYTES, availableBytes: free });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Make every object of `oids` present in `to`. Whole source packs whose objects
|
|
146
|
+
* are all wanted are adopted by hard link on one filesystem; wanted loose
|
|
147
|
+
* objects are linked; the rest are streamed as one self-contained pack (no
|
|
148
|
+
* deltas, big-blob streaming on both sides), so no child holds a large blob in
|
|
149
|
+
* memory and no JS string ever holds object bytes. A streamed pack is staged
|
|
150
|
+
* inside the destination object directory (`tmp_*`, which Git's own prune
|
|
151
|
+
* reclaims after a crash), so its publication is a same-filesystem rename even
|
|
152
|
+
* when the source lives on another volume.
|
|
153
|
+
*/
|
|
154
|
+
export async function transferObjects(from, to, oids, hashLength) {
|
|
155
|
+
try {
|
|
156
|
+
return await transferObjectsUnchecked(from, to, oids, hashLength);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
throw typedSpaceFailure(error, "object copy");
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async function transferObjectsUnchecked(from, to, oids, hashLength) {
|
|
163
|
+
const result = {
|
|
164
|
+
linkedPacks: 0,
|
|
165
|
+
linkedLoose: 0,
|
|
166
|
+
streamedObjects: 0,
|
|
167
|
+
copiedBytes: 0,
|
|
168
|
+
};
|
|
169
|
+
let wanted = new Set(await missingObjects(to, [...new Set(oids)]));
|
|
170
|
+
if (wanted.size === 0)
|
|
171
|
+
return result;
|
|
172
|
+
const sizes = await objectDiskSizes(from, [...wanted]);
|
|
173
|
+
let linkable = sameDevice(from.objectsDir, to.objectsDir);
|
|
174
|
+
// Adopt whole packs only on one filesystem: a cross-device copy of a pack
|
|
175
|
+
// with foreign objects would cost more than streaming just the wanted ones.
|
|
176
|
+
const packDir = join(from.objectsDir, "pack");
|
|
177
|
+
if (linkable && existsSync(packDir)) {
|
|
178
|
+
mkdirSync(join(to.objectsDir, "pack"), { recursive: true });
|
|
179
|
+
for (const name of readdirSync(packDir)) {
|
|
180
|
+
if (!name.endsWith(".idx"))
|
|
181
|
+
continue;
|
|
182
|
+
const idx = join(packDir, name);
|
|
183
|
+
const pack = idx.slice(0, -4) + ".pack";
|
|
184
|
+
if (!existsSync(pack))
|
|
185
|
+
continue;
|
|
186
|
+
// A pack holding more objects than are wanted can never be adopted whole.
|
|
187
|
+
const count = packIndexObjectCount(idx);
|
|
188
|
+
if (count === 0 || count > wanted.size)
|
|
189
|
+
continue;
|
|
190
|
+
const members = packIndexObjectIds(idx, hashLength);
|
|
191
|
+
if (!members.every((oid) => wanted.has(oid)))
|
|
192
|
+
continue;
|
|
193
|
+
const packTarget = join(to.objectsDir, "pack", name.slice(0, -4) + ".pack");
|
|
194
|
+
if (!tryLink(pack, packTarget)) {
|
|
195
|
+
linkable = false;
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
// The .idx makes a pack visible; without it the linked .pack is inert.
|
|
199
|
+
if (!tryLink(idx, join(to.objectsDir, "pack", name))) {
|
|
200
|
+
rmSync(packTarget, { force: true });
|
|
201
|
+
linkable = false;
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
for (const oid of members)
|
|
205
|
+
wanted.delete(oid);
|
|
206
|
+
result.linkedPacks += 1;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (linkable) {
|
|
210
|
+
for (const oid of [...wanted]) {
|
|
211
|
+
const source = looseObjectPath(from.objectsDir, oid);
|
|
212
|
+
if (!existsSync(source))
|
|
213
|
+
continue;
|
|
214
|
+
mkdirSync(join(to.objectsDir, oid.slice(0, 2)), { recursive: true });
|
|
215
|
+
if (!tryLink(source, looseObjectPath(to.objectsDir, oid)))
|
|
216
|
+
break;
|
|
217
|
+
wanted.delete(oid);
|
|
218
|
+
result.linkedLoose += 1;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (wanted.size > 0) {
|
|
222
|
+
const required = [...wanted].reduce((sum, oid) => sum + (sizes.get(oid) ?? 0), 0);
|
|
223
|
+
assertSpaceFor(to.objectsDir, required, "object copy");
|
|
224
|
+
const staging = join(to.objectsDir, `tmp_claudexor-${randomUUID()}`);
|
|
225
|
+
mkdirSync(staging, { recursive: true, mode: 0o700 });
|
|
226
|
+
try {
|
|
227
|
+
const base = join(staging, "transfer");
|
|
228
|
+
const sink = fileSink(`${base}.pack`);
|
|
229
|
+
try {
|
|
230
|
+
await gitObserved(from.cwd, [...STREAMING_THRESHOLD, "pack-objects", "--stdout", "-q", "--window=0", "--depth=0"], {
|
|
231
|
+
env: from.env,
|
|
232
|
+
input: `${[...wanted].join("\n")}\n`,
|
|
233
|
+
stdout: sink,
|
|
234
|
+
label: "pack-objects",
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
finally {
|
|
238
|
+
sink.end();
|
|
239
|
+
}
|
|
240
|
+
result.copiedBytes += sink.bytes();
|
|
241
|
+
const indexed = await gitObserved(to.cwd, [...STREAMING_THRESHOLD, "index-pack", `${base}.pack`], { env: to.env, label: "index-pack", progress: () => statSafe(`${base}.idx`) });
|
|
242
|
+
const name = indexed.stdout.trim().split(/\s+/).pop() ?? "";
|
|
243
|
+
if (!/^[0-9a-f]{40,64}$/.test(name)) {
|
|
244
|
+
throw new GitOperationError("capture_failed", "index-pack returned no pack name");
|
|
245
|
+
}
|
|
246
|
+
mkdirSync(join(to.objectsDir, "pack"), { recursive: true });
|
|
247
|
+
// The .idx makes a pack visible; it moves last.
|
|
248
|
+
renameSync(`${base}.pack`, join(to.objectsDir, "pack", `pack-${name}.pack`));
|
|
249
|
+
renameSync(`${base}.idx`, join(to.objectsDir, "pack", `pack-${name}.idx`));
|
|
250
|
+
result.streamedObjects += wanted.size;
|
|
251
|
+
wanted = new Set();
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
rmSync(staging, { recursive: true, force: true });
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
function statSafe(path) {
|
|
260
|
+
try {
|
|
261
|
+
return statSync(path).size;
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
return 0;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=object-transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-transfer.js","sourceRoot":"","sources":["../src/object-transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import type { CapturedWorkspaceDiff } from "./manager.js";
|
|
|
3
3
|
/** Drain the entire diff but retain only the preview. Four-line lookahead keeps
|
|
4
4
|
* structural header recognition and exact owned-directory exclusion intact;
|
|
5
5
|
* even a single enormous hunk line is bounded before it becomes a string.
|
|
6
|
-
|
|
6
|
+
*/
|
|
7
7
|
export declare class PlainDiffProjection implements CaptureProjection {
|
|
8
8
|
private baseline;
|
|
9
9
|
private root;
|
|
@@ -17,7 +17,6 @@ export declare class PlainDiffProjection implements CaptureProjection {
|
|
|
17
17
|
private preview;
|
|
18
18
|
private truncated;
|
|
19
19
|
get complete(): boolean;
|
|
20
|
-
readonly binarySecretPaths: Set<string>;
|
|
21
20
|
constructor(baseline: string, root: string, artifactRelative?: string | null | undefined);
|
|
22
21
|
write(chunk: Buffer): void;
|
|
23
22
|
private consume;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plain-diff-capture.d.ts","sourceRoot":"","sources":["../src/plain-diff-capture.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE/F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"plain-diff-capture.d.ts","sourceRoot":"","sources":["../src/plain-diff-capture.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE/F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAO1D;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,iBAAiB;IAczD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,gBAAgB,CAAC;IAf3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,YACU,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,YAAA,EACtC;IAEJ,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEzB;IAED,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,SAAS;IAuCjB,GAAG,IAAI,MAAM,CAKZ;CACF;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAgDhC"}
|
|
@@ -2,13 +2,13 @@ import { existsSync } from "node:fs";
|
|
|
2
2
|
import { StringDecoder } from "node:string_decoder";
|
|
3
3
|
import { assertCaptureComplete, runCaptureRaw } from "@claudexor/core";
|
|
4
4
|
import { incompleteWorkspaceCapture } from "./capture-failure.js";
|
|
5
|
-
import { excludePlainDiffPathPrefix,
|
|
5
|
+
import { excludePlainDiffPathPrefix, relativizePlainDiffHeaders } from "./plain-diff.js";
|
|
6
6
|
const PROJECTION_CHARS = 200_000; // Existing legacy non-Git preview contract.
|
|
7
7
|
const TRUNCATED = "\n... [diff truncated]\n";
|
|
8
8
|
/** Drain the entire diff but retain only the preview. Four-line lookahead keeps
|
|
9
9
|
* structural header recognition and exact owned-directory exclusion intact;
|
|
10
10
|
* even a single enormous hunk line is bounded before it becomes a string.
|
|
11
|
-
|
|
11
|
+
*/
|
|
12
12
|
export class PlainDiffProjection {
|
|
13
13
|
baseline;
|
|
14
14
|
root;
|
|
@@ -24,7 +24,6 @@ export class PlainDiffProjection {
|
|
|
24
24
|
get complete() {
|
|
25
25
|
return !this.truncated;
|
|
26
26
|
}
|
|
27
|
-
binarySecretPaths = new Set();
|
|
28
27
|
constructor(baseline, root, artifactRelative) {
|
|
29
28
|
this.baseline = baseline;
|
|
30
29
|
this.root = root;
|
|
@@ -76,9 +75,6 @@ export class PlainDiffProjection {
|
|
|
76
75
|
else if (line.text.startsWith("@@"))
|
|
77
76
|
this.inHunk = true;
|
|
78
77
|
if (!this.excluded) {
|
|
79
|
-
if (binary)
|
|
80
|
-
for (const path of plainDiffFlaggedBinaries(line.text, this.root))
|
|
81
|
-
this.binarySecretPaths.add(path);
|
|
82
78
|
const text = line.text + (line.newline ? "\n" : "");
|
|
83
79
|
const room = PROJECTION_CHARS - this.preview.length;
|
|
84
80
|
this.preview += text.slice(0, room);
|
|
@@ -122,7 +118,6 @@ export async function capturePlainDiff(baseline, root, artifactRelative) {
|
|
|
122
118
|
}));
|
|
123
119
|
return {
|
|
124
120
|
diff: result.stdout,
|
|
125
|
-
binarySecretPaths: [...projection.binarySecretPaths],
|
|
126
121
|
captureIncomplete: !projection.complete,
|
|
127
122
|
...(!projection.complete
|
|
128
123
|
? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plain-diff-capture.js","sourceRoot":"","sources":["../src/plain-diff-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAA0B,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,
|
|
1
|
+
{"version":3,"file":"plain-diff-capture.js","sourceRoot":"","sources":["../src/plain-diff-capture.ts"],"names":[],"mappings":"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"}
|
package/dist/plain-diff.d.ts
CHANGED
|
@@ -9,8 +9,4 @@ export declare function relativizePlainDiffHeaders(text: string, baselineRoot: s
|
|
|
9
9
|
* every depth and would hide unrelated user files that happen to share an
|
|
10
10
|
* engine-generated envelope basename. Ambiguous/unparsed blocks stay captured. */
|
|
11
11
|
export declare function excludePlainDiffPathPrefix(text: string, relativeDir: string): string;
|
|
12
|
-
/** `diff -ruN` carries no binary payload, so inspect each live binary
|
|
13
|
-
* postimage directly and name the ones a persisted copy must disclose.
|
|
14
|
-
* Oversized, non-regular, or unreadable bytes are unprovable and are named too. */
|
|
15
|
-
export declare function plainDiffFlaggedBinaries(text: string, liveRoot: string): string[];
|
|
16
12
|
//# sourceMappingURL=plain-diff.d.ts.map
|
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":"AAIA,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,CAiCpF"}
|
package/dist/plain-diff.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { join
|
|
1
|
+
import { cpSync, existsSync, mkdirSync, readdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
3
|
import { parseUnifiedDiff } from "@claudexor/core";
|
|
4
|
-
import { containsSecretLikeToken } from "@claudexor/util";
|
|
5
|
-
const MAX_BINARY_SECRET_SCAN_BYTES = 32 * 1024 * 1024;
|
|
6
4
|
/** Legacy live convergence capture only. Explicit directory workspaces use a selected footprint. */
|
|
7
5
|
export function snapshotLegacyDirectoryBaseline(repoRoot, base) {
|
|
8
6
|
const baseline = join(base, "baseline");
|
|
@@ -109,44 +107,4 @@ export function excludePlainDiffPathPrefix(text, relativeDir) {
|
|
|
109
107
|
}
|
|
110
108
|
return filtered;
|
|
111
109
|
}
|
|
112
|
-
/** `diff -ruN` carries no binary payload, so inspect each live binary
|
|
113
|
-
* postimage directly and name the ones a persisted copy must disclose.
|
|
114
|
-
* Oversized, non-regular, or unreadable bytes are unprovable and are named too. */
|
|
115
|
-
export function plainDiffFlaggedBinaries(text, liveRoot) {
|
|
116
|
-
const root = resolve(liveRoot);
|
|
117
|
-
const flagged = [];
|
|
118
|
-
for (const file of parseUnifiedDiff(text).files) {
|
|
119
|
-
if (!file.binaryStub || file.deleted || !file.newPath)
|
|
120
|
-
continue;
|
|
121
|
-
const source = resolve(root, file.newPath);
|
|
122
|
-
if (source !== root && !source.startsWith(root + sep)) {
|
|
123
|
-
flagged.push(file.newPath);
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
let fd;
|
|
127
|
-
try {
|
|
128
|
-
fd = openSync(source, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
129
|
-
}
|
|
130
|
-
catch (error) {
|
|
131
|
-
if (error.code !== "ENOENT")
|
|
132
|
-
flagged.push(file.newPath);
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
try {
|
|
136
|
-
const stat = fstatSync(fd);
|
|
137
|
-
const bytes = stat.isFile() && stat.size <= MAX_BINARY_SECRET_SCAN_BYTES ? readFileSync(fd) : null;
|
|
138
|
-
if (bytes === null ||
|
|
139
|
-
bytes.length > MAX_BINARY_SECRET_SCAN_BYTES ||
|
|
140
|
-
containsSecretLikeToken(bytes.toString("latin1")))
|
|
141
|
-
flagged.push(file.newPath);
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
flagged.push(file.newPath);
|
|
145
|
-
}
|
|
146
|
-
finally {
|
|
147
|
-
closeSync(fd);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return flagged;
|
|
151
|
-
}
|
|
152
110
|
//# sourceMappingURL=plain-diff.js.map
|
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/dist/raw-patch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-patch.d.ts","sourceRoot":"","sources":["../src/raw-patch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAI3B,qBAAa,oBAAqB,SAAQ,KAAK;aAE3B,IAAI,EAAE,mBAAmB;IAD3C,YACkB,IAAI,EAAE,mBAAmB,EACzC,OAAO,EAAE,MAAM,EAIhB;CACF;AAuBD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,EACpC,KAAK,EAAE,YAAY,GAClB,mBAAmB,GAAG,IAAI,CAS5B;AAED,oFAAoF;AACpF,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACtC,GAAG,OAAO,CAAC;IAAE,mBAAmB,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"raw-patch.d.ts","sourceRoot":"","sources":["../src/raw-patch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAI3B,qBAAa,oBAAqB,SAAQ,KAAK;aAE3B,IAAI,EAAE,mBAAmB;IAD3C,YACkB,IAAI,EAAE,mBAAmB,EACzC,OAAO,EAAE,MAAM,EAIhB;CACF;AAuBD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,EACpC,KAAK,EAAE,YAAY,GAClB,mBAAmB,GAAG,IAAI,CAS5B;AAED,oFAAoF;AACpF,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACtC,GAAG,OAAO,CAAC;IAAE,mBAAmB,EAAE,MAAM,CAAA;CAAE,CAAC,CAuH3C"}
|
package/dist/raw-patch.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isAbsolute, resolve } from "node:path";
|
|
2
2
|
import { parseUnifiedDiff } from "@claudexor/core";
|
|
3
|
-
import {
|
|
3
|
+
import { sha256 } from "@claudexor/util";
|
|
4
4
|
import { applyPatchProtected, git, materializePatchTree, revParse } from "./git.js";
|
|
5
5
|
export class RawPatchRefusalError extends Error {
|
|
6
6
|
code;
|
|
@@ -32,10 +32,10 @@ export function captureRawPatchEnvelope(enabled, previous, event) {
|
|
|
32
32
|
return previous;
|
|
33
33
|
if (!enabled || !event.patch_envelope || previous)
|
|
34
34
|
refuse("raw_patch_missing_evidence", "expected exactly one enabled patch envelope");
|
|
35
|
-
//
|
|
36
|
-
// materializes in the isolated candidate tree and reaches saved artifacts
|
|
37
|
-
// through the shared
|
|
38
|
-
//
|
|
35
|
+
// Credential-shaped CONTENT is no refusal. The envelope is memory-only; it
|
|
36
|
+
// materializes in the isolated candidate tree and reaches saved artifacts
|
|
37
|
+
// through the shared exact capture. Scope, preimage and digest evidence are
|
|
38
|
+
// still enforced by consumeRawPatchEnvelope.
|
|
39
39
|
return event.patch_envelope;
|
|
40
40
|
}
|
|
41
41
|
/** Validate and materialize a raw patch only inside its isolated candidate tree. */
|
|
@@ -115,9 +115,6 @@ export async function consumeRawPatchEnvelope(input) {
|
|
|
115
115
|
declared.set(item.path, item.expected_blob_oid);
|
|
116
116
|
}
|
|
117
117
|
for (const path of actualPaths) {
|
|
118
|
-
if (sensitiveResourcePolicy.classifyPath(path).sensitive) {
|
|
119
|
-
refuse("raw_patch_outside_scope", `${path} is outside the packet's exact editable scope`);
|
|
120
|
-
}
|
|
121
118
|
const presence = expectedPresence.get(path);
|
|
122
119
|
const file = editable.get(path);
|
|
123
120
|
const expected = declared.get(path);
|
package/dist/raw-patch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-patch.js","sourceRoot":"","sources":["../src/raw-patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"raw-patch.js","sourceRoot":"","sources":["../src/raw-patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-expiry.d.ts","sourceRoot":"","sources":["../src/run-expiry.ts"],"names":[],"mappings":"AAGA,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAQvD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { lstatSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/** A run whose files retention reclaimed: its directory keeps only `tombstone.yaml`. */
|
|
4
|
+
export function runFilesExpired(runDir) {
|
|
5
|
+
try {
|
|
6
|
+
lstatSync(join(runDir, "tombstone.yaml"));
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
catch (error) {
|
|
10
|
+
if (error.code === "ENOENT")
|
|
11
|
+
return false;
|
|
12
|
+
throw error;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=run-expiry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-expiry.js","sourceRoot":"","sources":["../src/run-expiry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,wFAAwF;AACxF,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/thread-tree.d.ts
CHANGED
|
@@ -27,7 +27,41 @@ export declare function advanceThreadWorktree(projectRoot: string, threadId: str
|
|
|
27
27
|
/** Whether an isolated thread's directory is still on disk: its purge failed
|
|
28
28
|
* after the journal commit, and the next retention pass retries it. */
|
|
29
29
|
export declare function threadWorktreeDirExists(projectRoot: string, threadId: string): boolean;
|
|
30
|
+
/** The repository a purge attempt asked, kept by its caller for the next one:
|
|
31
|
+
* the common Git directory, and that directory's inode, which tells it apart
|
|
32
|
+
* from another repository later put at the same path. Unlike the device
|
|
33
|
+
* number, an inode survives a restart; null where the filesystem has none. */
|
|
34
|
+
export interface PurgeRepositoryRecord {
|
|
35
|
+
gitDir: string;
|
|
36
|
+
identity: string | null;
|
|
37
|
+
}
|
|
30
38
|
/** Explicit purge of daemon-owned isolated-thread resources. Lifecycle
|
|
31
|
-
* authority lives in the journal; the generic orphan sweeper never guesses.
|
|
32
|
-
|
|
39
|
+
* authority lives in the journal; the generic orphan sweeper never guesses.
|
|
40
|
+
* Git drops the worktree registration and then the branch before the
|
|
41
|
+
* directory goes: a refusal (a locked worktree, a held ref lock) throws with
|
|
42
|
+
* the directory still on disk, so the purge stays pending instead of reporting
|
|
43
|
+
* what Git still records as deleted. What is already gone counts as done, but
|
|
44
|
+
* only where it was looked for: in the repository the worktree's own `.git`
|
|
45
|
+
* file names (`worktreeRepository`), else the one an earlier attempt recorded
|
|
46
|
+
* (`repository`), else the project folder's. Git deletes that file with the
|
|
47
|
+
* worktree and a project folder can be replaced, so the repository asked goes
|
|
48
|
+
* to `recordRepository` before Git's first change in it, wherever it was
|
|
49
|
+
* found: a retry after a refused branch deletion asks the same repository,
|
|
50
|
+
* not whatever is at the project path by then. That holds after Git deleted
|
|
51
|
+
* the registration but not the directory too: the `.git` file left behind
|
|
52
|
+
* names a registration that is gone, and when it was in the recorded
|
|
53
|
+
* repository, still at its path, that one is asked. Where Git has nothing of the
|
|
54
|
+
* thread to change, nothing is recorded. A repository that cannot be
|
|
55
|
+
* reached, or a recorded one replaced at its path, keeps the purge pending. A
|
|
56
|
+
* link above the thread directory is refused (`ownedProjectRuntimeDir`); one
|
|
57
|
+
* at the directory or its tree is unlinked first, so Git sees a missing
|
|
58
|
+
* worktree and neither Git nor rm follows it. `worktreeRecorded`: the thread
|
|
59
|
+
* record names a worktree; a thread that never had one leaves no Git state to
|
|
60
|
+
* look for. Returns the common Git directory the cleanup asked, null when
|
|
61
|
+
* there was none. */
|
|
62
|
+
export declare function purgeThreadWorktree(projectRoot: string, threadId: string, { worktreeRecorded, repository, recordRepository, }?: {
|
|
63
|
+
worktreeRecorded?: boolean;
|
|
64
|
+
repository?: PurgeRepositoryRecord | null;
|
|
65
|
+
recordRepository?: (repository: PurgeRepositoryRecord) => Promise<void>;
|
|
66
|
+
}): Promise<string | null>;
|
|
33
67
|
//# sourceMappingURL=thread-tree.d.ts.map
|