@claudexor/workspace 4.8.1 → 5.0.1

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.
Files changed (136) hide show
  1. package/dist/anchor-store.d.ts +20 -9
  2. package/dist/anchor-store.d.ts.map +1 -1
  3. package/dist/anchor-store.js +96 -16
  4. package/dist/anchor-store.js.map +1 -1
  5. package/dist/capture-failure.d.ts.map +1 -1
  6. package/dist/capture-failure.js +7 -2
  7. package/dist/capture-failure.js.map +1 -1
  8. package/dist/capture-inventory.d.ts +10 -0
  9. package/dist/capture-inventory.d.ts.map +1 -0
  10. package/dist/capture-inventory.js +63 -0
  11. package/dist/capture-inventory.js.map +1 -0
  12. package/dist/capture-objects.d.ts +32 -0
  13. package/dist/capture-objects.d.ts.map +1 -0
  14. package/dist/capture-objects.js +129 -0
  15. package/dist/capture-objects.js.map +1 -0
  16. package/dist/cleanup-fault.d.ts +18 -0
  17. package/dist/cleanup-fault.d.ts.map +1 -0
  18. package/dist/cleanup-fault.js +45 -0
  19. package/dist/cleanup-fault.js.map +1 -0
  20. package/dist/continuation-evidence.d.ts +61 -15
  21. package/dist/continuation-evidence.d.ts.map +1 -1
  22. package/dist/continuation-evidence.js +151 -36
  23. package/dist/continuation-evidence.js.map +1 -1
  24. package/dist/continuation-facts.d.ts +93 -0
  25. package/dist/continuation-facts.d.ts.map +1 -0
  26. package/dist/continuation-facts.js +162 -0
  27. package/dist/continuation-facts.js.map +1 -0
  28. package/dist/directory-workspace.d.ts.map +1 -1
  29. package/dist/directory-workspace.js +1 -3
  30. package/dist/directory-workspace.js.map +1 -1
  31. package/dist/files-io.d.ts.map +1 -1
  32. package/dist/files-io.js +1 -7
  33. package/dist/files-io.js.map +1 -1
  34. package/dist/fs-presence.d.ts +12 -0
  35. package/dist/fs-presence.d.ts.map +1 -0
  36. package/dist/fs-presence.js +35 -0
  37. package/dist/fs-presence.js.map +1 -0
  38. package/dist/git-nested-repositories.d.ts.map +1 -1
  39. package/dist/git-nested-repositories.js +11 -2
  40. package/dist/git-nested-repositories.js.map +1 -1
  41. package/dist/git-observed.d.ts +75 -0
  42. package/dist/git-observed.d.ts.map +1 -0
  43. package/dist/git-observed.js +172 -0
  44. package/dist/git-observed.js.map +1 -0
  45. package/dist/git-result.d.ts +36 -0
  46. package/dist/git-result.d.ts.map +1 -0
  47. package/dist/git-result.js +96 -0
  48. package/dist/git-result.js.map +1 -0
  49. package/dist/git-run.d.ts +11 -0
  50. package/dist/git-run.d.ts.map +1 -1
  51. package/dist/git-run.js +24 -0
  52. package/dist/git-run.js.map +1 -1
  53. package/dist/git-snapshot.d.ts +40 -0
  54. package/dist/git-snapshot.d.ts.map +1 -0
  55. package/dist/git-snapshot.js +238 -0
  56. package/dist/git-snapshot.js.map +1 -0
  57. package/dist/git-transient-capture.d.ts +63 -16
  58. package/dist/git-transient-capture.d.ts.map +1 -1
  59. package/dist/git-transient-capture.js +170 -57
  60. package/dist/git-transient-capture.js.map +1 -1
  61. package/dist/git.d.ts +46 -21
  62. package/dist/git.d.ts.map +1 -1
  63. package/dist/git.js +164 -103
  64. package/dist/git.js.map +1 -1
  65. package/dist/index.d.ts +9 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +9 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/lanes.d.ts +2 -1
  70. package/dist/lanes.d.ts.map +1 -1
  71. package/dist/lanes.js +7 -6
  72. package/dist/lanes.js.map +1 -1
  73. package/dist/manager.d.ts +21 -7
  74. package/dist/manager.d.ts.map +1 -1
  75. package/dist/manager.js +30 -17
  76. package/dist/manager.js.map +1 -1
  77. package/dist/object-compose.d.ts +58 -0
  78. package/dist/object-compose.d.ts.map +1 -0
  79. package/dist/object-compose.js +444 -0
  80. package/dist/object-compose.js.map +1 -0
  81. package/dist/object-materialize.d.ts +52 -0
  82. package/dist/object-materialize.d.ts.map +1 -0
  83. package/dist/object-materialize.js +467 -0
  84. package/dist/object-materialize.js.map +1 -0
  85. package/dist/object-occupied.d.ts +27 -0
  86. package/dist/object-occupied.d.ts.map +1 -0
  87. package/dist/object-occupied.js +131 -0
  88. package/dist/object-occupied.js.map +1 -0
  89. package/dist/object-revert.d.ts +45 -0
  90. package/dist/object-revert.d.ts.map +1 -0
  91. package/dist/object-revert.js +265 -0
  92. package/dist/object-revert.js.map +1 -0
  93. package/dist/object-saved-files.d.ts +50 -0
  94. package/dist/object-saved-files.d.ts.map +1 -0
  95. package/dist/object-saved-files.js +176 -0
  96. package/dist/object-saved-files.js.map +1 -0
  97. package/dist/object-sparse.d.ts +22 -0
  98. package/dist/object-sparse.d.ts.map +1 -0
  99. package/dist/object-sparse.js +72 -0
  100. package/dist/object-sparse.js.map +1 -0
  101. package/dist/object-store-leases.d.ts +41 -0
  102. package/dist/object-store-leases.d.ts.map +1 -0
  103. package/dist/object-store-leases.js +277 -0
  104. package/dist/object-store-leases.js.map +1 -0
  105. package/dist/object-store-roots.d.ts +25 -0
  106. package/dist/object-store-roots.d.ts.map +1 -0
  107. package/dist/object-store-roots.js +114 -0
  108. package/dist/object-store-roots.js.map +1 -0
  109. package/dist/object-store.d.ts +110 -0
  110. package/dist/object-store.d.ts.map +1 -0
  111. package/dist/object-store.js +404 -0
  112. package/dist/object-store.js.map +1 -0
  113. package/dist/object-transfer.d.ts +41 -0
  114. package/dist/object-transfer.d.ts.map +1 -0
  115. package/dist/object-transfer.js +267 -0
  116. package/dist/object-transfer.js.map +1 -0
  117. package/dist/plain-diff-capture.d.ts +1 -2
  118. package/dist/plain-diff-capture.d.ts.map +1 -1
  119. package/dist/plain-diff-capture.js +2 -7
  120. package/dist/plain-diff-capture.js.map +1 -1
  121. package/dist/plain-diff.d.ts +0 -4
  122. package/dist/plain-diff.d.ts.map +1 -1
  123. package/dist/plain-diff.js +2 -44
  124. package/dist/plain-diff.js.map +1 -1
  125. package/dist/raw-patch.d.ts.map +1 -1
  126. package/dist/raw-patch.js +5 -8
  127. package/dist/raw-patch.js.map +1 -1
  128. package/dist/run-expiry.d.ts +3 -0
  129. package/dist/run-expiry.d.ts.map +1 -0
  130. package/dist/run-expiry.js +15 -0
  131. package/dist/run-expiry.js.map +1 -0
  132. package/dist/thread-tree.d.ts +36 -2
  133. package/dist/thread-tree.d.ts.map +1 -1
  134. package/dist/thread-tree.js +87 -11
  135. package/dist/thread-tree.js.map +1 -1
  136. package/package.json +5 -5
@@ -0,0 +1,444 @@
1
+ import { appendFileSync, closeSync, existsSync, mkdtempSync, openSync, readSync, rmSync, statSync, writeFileSync, } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { randomUUID } from "node:crypto";
5
+ import { diskProgress, fileSink, gitObserved } from "./git-observed.js";
6
+ import { SCRATCH_INDEX_CONFIG } from "./git-run.js";
7
+ /**
8
+ * Settings pinned on every diff Claudexor generates for delivery (rev 13): only
9
+ * what makes a patch unapplicable or misaddressed. Pairing (diff.renames,
10
+ * diff.renameLimit) and hunk shape (diff.algorithm, diff.context, ...) stay
11
+ * inherited from the repository, exactly as today's capture-time diff.
12
+ */
13
+ export const PINNED_DIFF_CONFIG = [
14
+ "-c",
15
+ "diff.relative=false",
16
+ "-c",
17
+ "diff.suppressBlankEmpty=false",
18
+ ];
19
+ export const PINNED_DIFF_FLAGS = [
20
+ "--no-color",
21
+ "--no-ext-diff",
22
+ "--no-textconv",
23
+ "--submodule=short",
24
+ "--src-prefix=a/",
25
+ "--dst-prefix=b/",
26
+ ];
27
+ export function parseRawRecords(stdout) {
28
+ const fields = stdout.split("\0");
29
+ const records = [];
30
+ for (let index = 0; index < fields.length;) {
31
+ const meta = fields[index];
32
+ if (!meta) {
33
+ index += 1;
34
+ continue;
35
+ }
36
+ if (!meta.startsWith(":"))
37
+ throw new Error(`unexpected raw diff record: ${meta.slice(0, 80)}`);
38
+ const [oldMode = "", newMode = "", oldOid = "", newOid = "", statusField = ""] = meta
39
+ .slice(1)
40
+ .split(" ");
41
+ const status = statusField.charAt(0);
42
+ const score = statusField.length > 1 ? Number(statusField.slice(1)) : null;
43
+ const pairing = status === "R" || status === "C";
44
+ const src = fields[index + 1] ?? "";
45
+ const dst = pairing ? (fields[index + 2] ?? "") : null;
46
+ records.push({ status, score, src, dst, oldMode, newMode, oldOid, newOid });
47
+ index += pairing ? 3 : 2;
48
+ }
49
+ return records;
50
+ }
51
+ function literal(path) {
52
+ return `:(literal,top)${path}`;
53
+ }
54
+ /** Pathspecs per Git command line: bounded by count AND by total characters, so
55
+ * a batch stays well inside the ~32K-character Windows command line (Git, -C,
56
+ * the repository path and the pinned flags take the rest). */
57
+ const PATH_BATCH = 200;
58
+ const PATH_BATCH_CHARS = 16_384;
59
+ /** Literal pathspecs for `paths`, in command-line-sized batches. */
60
+ export function pathspecBatches(paths) {
61
+ const out = [];
62
+ let batch = [];
63
+ let chars = 0;
64
+ for (const path of paths) {
65
+ const spec = literal(path);
66
+ if (batch.length >= PATH_BATCH ||
67
+ (batch.length > 0 && chars + spec.length >= PATH_BATCH_CHARS)) {
68
+ out.push(batch);
69
+ batch = [];
70
+ chars = 0;
71
+ }
72
+ batch.push(spec);
73
+ chars += spec.length + 1;
74
+ }
75
+ if (batch.length > 0)
76
+ out.push(batch);
77
+ return out;
78
+ }
79
+ function refusal(code, message, paths) {
80
+ const sorted = [...new Set(paths)].sort();
81
+ return {
82
+ code,
83
+ message: message.slice(0, 4_000),
84
+ paths: sorted.slice(0, 200),
85
+ pathCount: sorted.length,
86
+ };
87
+ }
88
+ const STRICT_UTF8 = new TextDecoder("utf-8", { fatal: true });
89
+ /** The paths `to` changed from `from`, with what it holds for each (mode and blob; a
90
+ * deletion's are zero), and those whose name is not valid UTF-8: Git's output is
91
+ * read as UTF-8 and a pathspec is written as UTF-8, so such a name, read back with
92
+ * U+FFFD, would reach the filesystem under another name. Each name's own bytes are
93
+ * decoded strictly, so a name that really holds U+FFFD is valid like any other. */
94
+ async function changedPaths(repo, from, to, env) {
95
+ const chunks = [];
96
+ await gitObserved(repo, ["diff-tree", "-r", "--raw", "-z", "--no-renames", "--no-abbrev", from, to], {
97
+ env,
98
+ label: "diff-tree --raw",
99
+ stdout: { write: (chunk) => void chunks.push(Buffer.from(chunk)), end: () => "" },
100
+ });
101
+ const raw = Buffer.concat(chunks);
102
+ // Without pairing every record is two fields, ":<modes> <oids> <status>" and its path.
103
+ const undecodable = new Set();
104
+ for (let start = 0, field = 0; start < raw.length; field += 1) {
105
+ const found = raw.indexOf(0, start);
106
+ const end = found === -1 ? raw.length : found;
107
+ if (field % 2 === 1) {
108
+ const name = raw.subarray(start, end);
109
+ try {
110
+ STRICT_UTF8.decode(name);
111
+ }
112
+ catch {
113
+ undecodable.add(name.toString("utf8"));
114
+ }
115
+ }
116
+ start = end + 1;
117
+ }
118
+ const entries = new Map(parseRawRecords(raw.toString("utf8")).map((record) => [
119
+ record.src,
120
+ `${record.newMode} ${record.newOid}`,
121
+ ]));
122
+ return { entries, undecodable };
123
+ }
124
+ /** Whether a directory prefix of `path` is in `paths`. */
125
+ function underAny(path, paths) {
126
+ for (let cut = path.lastIndexOf("/"); cut > 0; cut = path.lastIndexOf("/", cut - 1))
127
+ if (paths.has(path.slice(0, cut)))
128
+ return true;
129
+ return false;
130
+ }
131
+ /**
132
+ * A tree holding exactly the entries of `paths` in `tree`. `paths` are read through
133
+ * bounded pathspec batches and written from stdin, so a diff of two such trees is
134
+ * limited to them by no command-line argument and without a pathspec's prefix
135
+ * match, which also takes in every path below a name that is a directory on the
136
+ * other side.
137
+ */
138
+ async function reducedTree(tree, paths, scratch, run) {
139
+ const wanted = new Set(paths);
140
+ let info = "";
141
+ for (const chunk of pathspecBatches(paths)) {
142
+ const listing = await run(["ls-tree", "-r", "-z", tree, "--", ...chunk], "ls-tree (reduced)");
143
+ for (const entry of listing.stdout.split("\0").filter(Boolean))
144
+ if (wanted.has(entry.slice(entry.indexOf("\t") + 1)))
145
+ info += `${entry}\0`;
146
+ }
147
+ const index = join(scratch, `reduced-${randomUUID()}`);
148
+ await run(["update-index", "--add", "-z", "--index-info"], "update-index (reduced)", {
149
+ input: info,
150
+ index,
151
+ });
152
+ return (await run(["write-tree"], "write-tree (reduced)", { index })).stdout.trim();
153
+ }
154
+ /**
155
+ * Compose candidate C (relative to base B) onto target T without Git merge
156
+ * machinery (rev 14 A). Trivial paths come from a three-way read into a
157
+ * temporary index; paths both sides changed, plus rename/copy endpoints the
158
+ * target changed, get today's exact records applied with `git apply --cached`
159
+ * onto T's entries. Rename/copy discovery runs only behind the gate. All
160
+ * patch bytes flow through a file, never a JS string. The worktree is untouched.
161
+ */
162
+ export async function composeOnTarget(input) {
163
+ const scratch = mkdtempSync(join(tmpdir(), "claudexor-compose-"));
164
+ const env = { ...input.env, GIT_INDEX_FILE: join(scratch, "index"), GIT_OPTIONAL_LOCKS: "0" };
165
+ const stats = {
166
+ unmerged: 0,
167
+ discovery: false,
168
+ closure: 0,
169
+ components: 0,
170
+ records: 0,
171
+ };
172
+ // Index and object writes (read-tree, update-index, apply, write-tree) show as disk activity.
173
+ const progress = diskProgress(input.repo);
174
+ const git = (args, label, extra = {}) => gitObserved(input.repo, [...SCRATCH_INDEX_CONFIG, ...args], { env, label, progress, ...extra });
175
+ const reduced = (tree, paths) => reducedTree(tree, paths, scratch, (args, label, extra = {}) => gitObserved(input.repo, [...SCRATCH_INDEX_CONFIG, ...args], {
176
+ env: extra.index ? { ...env, GIT_INDEX_FILE: extra.index } : env,
177
+ label,
178
+ progress,
179
+ ...(extra.input === undefined ? {} : { input: extra.input }),
180
+ }));
181
+ try {
182
+ const read = await git(["read-tree", "-m", "-i", "--aggressive", input.base, input.target, input.candidate], "read-tree -m (three-way)", { allowFailure: true });
183
+ if (read.code !== 0) {
184
+ return {
185
+ ok: false,
186
+ stats,
187
+ refusal: refusal("delivery_conflict", `three-way read refused: ${read.stderr.trim()}`, []),
188
+ };
189
+ }
190
+ const unmergedListing = await git(["ls-files", "-u", "-z"], "ls-files -u");
191
+ const unmerged = new Set(unmergedListing.stdout
192
+ .split("\0")
193
+ .filter(Boolean)
194
+ .map((entry) => entry.slice(entry.indexOf("\t") + 1)));
195
+ stats.unmerged = unmerged.size;
196
+ // Step 2: the gate. Two tree comparisons; no blob is read.
197
+ const targetListed = await changedPaths(input.repo, input.base, input.target, env);
198
+ const candidateListed = await changedPaths(input.repo, input.base, input.candidate, env);
199
+ const targetChanged = targetListed.entries;
200
+ const candidateChanged = candidateListed.entries;
201
+ // Only a name this operation addresses must be valid UTF-8: one the result changed,
202
+ // or (below) one the closure takes in. Every other target entry stays byte-opaque,
203
+ // moved only by Git's own tree reads.
204
+ const undecodable = new Set([...targetListed.undecodable, ...candidateListed.undecodable]);
205
+ const encodingRefusal = (addressed) => {
206
+ const named = [...new Set(addressed)].filter((path) => undecodable.has(path));
207
+ return named.length === 0
208
+ ? null
209
+ : {
210
+ ok: false,
211
+ stats,
212
+ refusal: refusal("result_path_encoding", "a path the result changes, or one this operation must address with it, has a name that is not valid UTF-8, so Claudexor cannot address it on the filesystem; nothing was written", named),
213
+ };
214
+ };
215
+ const candidateRefusal = encodingRefusal(candidateChanged.keys());
216
+ if (candidateRefusal)
217
+ return candidateRefusal;
218
+ const shared = [...targetChanged.keys()].some((path) => candidateChanged.has(path));
219
+ if (!shared && unmerged.size === 0) {
220
+ const tree = (await git(["write-tree"], "write-tree")).stdout.trim();
221
+ return { ok: true, tree, stats };
222
+ }
223
+ stats.discovery = true;
224
+ // Today's full record listing under the repository's own pairing config.
225
+ const listed = await git([
226
+ ...PINNED_DIFF_CONFIG,
227
+ "diff",
228
+ "--raw",
229
+ "-z",
230
+ "--no-abbrev",
231
+ ...PINNED_DIFF_FLAGS,
232
+ input.base,
233
+ input.candidate,
234
+ ], "diff --raw (discovery)");
235
+ const records = parseRawRecords(listed.stdout);
236
+ const pairing = records.filter((record) => record.dst !== null);
237
+ // Step 3: closure over pairing records with an endpoint T changed or already in U,
238
+ // and over everything either side changed below a path in U (a directory that
239
+ // became a file travels with the deletions under it). A path both sides changed
240
+ // alike stays out: T already holds its outcome.
241
+ const u = new Set(unmerged);
242
+ const changed = [...new Set([...targetChanged.keys(), ...candidateChanged.keys()])];
243
+ for (let moved = true; moved;) {
244
+ moved = false;
245
+ for (const record of pairing) {
246
+ const ends = [record.src, record.dst];
247
+ if (ends.some((path) => targetChanged.has(path) || u.has(path))) {
248
+ for (const path of ends) {
249
+ if (!u.has(path)) {
250
+ u.add(path);
251
+ moved = true;
252
+ }
253
+ }
254
+ }
255
+ }
256
+ for (const path of changed) {
257
+ if (u.has(path) || !underAny(path, u))
258
+ continue;
259
+ if (targetChanged.get(path) === candidateChanged.get(path))
260
+ continue;
261
+ u.add(path);
262
+ moved = true;
263
+ }
264
+ }
265
+ stats.closure = u.size;
266
+ // The closure holds every pairing endpoint the patch addresses.
267
+ const closureRefusal = encodingRefusal(u);
268
+ if (closureRefusal)
269
+ return closureRefusal;
270
+ const patchFile = join(scratch, "u.patch");
271
+ writeFileSync(patchFile, "");
272
+ const append = async (args, label) => {
273
+ const part = join(scratch, `part-${stats.records}.patch`);
274
+ const sink = fileSink(part);
275
+ try {
276
+ await gitObserved(input.repo, args, { env, label, stdout: sink, progress });
277
+ }
278
+ finally {
279
+ sink.end();
280
+ }
281
+ stats.records += 1;
282
+ appendPart(patchFile, part);
283
+ };
284
+ // Step 4: pairing components, regenerated record-exact and set-checked.
285
+ const inU = pairing.filter((record) => u.has(record.src) && u.has(record.dst));
286
+ for (const component of pairingComponents(inU)) {
287
+ stats.components += 1;
288
+ const copies = component.some((record) => record.status === "C");
289
+ const lowest = Math.min(...component.map((record) => record.score ?? 100));
290
+ const pairingFlags = copies
291
+ ? [`--find-copies=${lowest}%`, "--find-copies-harder"]
292
+ : [`--find-renames=${lowest}%`];
293
+ const kinds = [...new Set(component.map((record) => record.status))].sort().join("");
294
+ const paths = [...new Set(component.flatMap((record) => [record.src, record.dst]))];
295
+ // A component cannot be split (its destinations would lose their sources), so
296
+ // one too long for a command line is limited by two trees holding exactly
297
+ // its paths, which show a diff the same file pairs.
298
+ const limit = async () => pathspecBatches(paths).length <= 1
299
+ ? [input.base, input.candidate, "--", ...paths.map(literal)]
300
+ : [await reduced(input.base, paths), await reduced(input.candidate, paths)];
301
+ const limited = await limit();
302
+ const regenerated = parseRawRecords((await git([
303
+ ...PINNED_DIFF_CONFIG,
304
+ "diff",
305
+ "--raw",
306
+ "-z",
307
+ "--no-abbrev",
308
+ ...PINNED_DIFF_FLAGS,
309
+ ...pairingFlags,
310
+ `--diff-filter=${kinds}`,
311
+ ...limited,
312
+ ], "diff --raw (component)")).stdout);
313
+ const key = (record) => `${record.status}${record.score}\0${record.src}\0${record.dst}`;
314
+ const expected = new Set(component.map(key));
315
+ const actual = new Set(regenerated.map(key));
316
+ if (expected.size !== actual.size || [...expected].some((entry) => !actual.has(entry))) {
317
+ return {
318
+ ok: false,
319
+ stats,
320
+ refusal: refusal("delivery_pairing_mismatch", "a path-limited regeneration of the result's rename/copy records did not reproduce them exactly", paths),
321
+ };
322
+ }
323
+ await append([
324
+ ...PINNED_DIFF_CONFIG,
325
+ "diff",
326
+ "--binary",
327
+ ...PINNED_DIFF_FLAGS,
328
+ ...pairingFlags,
329
+ `--diff-filter=${kinds}`,
330
+ ...limited,
331
+ ], "diff --binary (component)");
332
+ }
333
+ // Step 5: non-pairing records over U minus rename endpoints minus copy destinations.
334
+ const excluded = new Set();
335
+ for (const record of inU) {
336
+ if (record.status === "R")
337
+ excluded.add(record.src);
338
+ excluded.add(record.dst);
339
+ }
340
+ const plain = [...u].filter((path) => !excluded.has(path) && candidateChanged.has(path)).sort();
341
+ if (plain.length > 0) {
342
+ // Two trees of exactly these paths: each record once, none a prefix drags in.
343
+ await append([
344
+ ...PINNED_DIFF_CONFIG,
345
+ "diff",
346
+ "--binary",
347
+ "--no-renames",
348
+ ...PINNED_DIFF_FLAGS,
349
+ await reduced(input.base, plain),
350
+ await reduced(input.candidate, plain),
351
+ ], "diff --binary (records)");
352
+ }
353
+ // Step 6: reset U to T's entries, then one all-or-nothing apply from the file.
354
+ const zero = "0".repeat(input.base.length);
355
+ let info = "";
356
+ for (const path of u)
357
+ info += `0 ${zero}\t${path}\0`;
358
+ for (const chunk of pathspecBatches([...u])) {
359
+ const listing = await git(["ls-tree", "-r", "-z", input.target, "--", ...chunk], "ls-tree (target entries)");
360
+ for (const entry of listing.stdout.split("\0").filter(Boolean)) {
361
+ const path = entry.slice(entry.indexOf("\t") + 1);
362
+ if (u.has(path))
363
+ info += `${entry}\0`;
364
+ }
365
+ }
366
+ await git(["update-index", "-z", "--index-info"], "update-index --index-info", { input: info });
367
+ if (statSync(patchFile).size > 0) {
368
+ const applied = await git(["apply", "--cached", "--whitespace=nowarn", patchFile], "apply --cached", { allowFailure: true });
369
+ if (applied.code !== 0) {
370
+ return {
371
+ ok: false,
372
+ stats,
373
+ refusal: refusal("delivery_conflict", `the result does not apply onto the current target by git apply rules: ${applied.stderr.trim()}`, [...u]),
374
+ };
375
+ }
376
+ }
377
+ const remaining = await git(["ls-files", "-u", "-z"], "ls-files -u");
378
+ if (remaining.stdout.length > 0) {
379
+ const paths = remaining.stdout
380
+ .split("\0")
381
+ .filter(Boolean)
382
+ .map((entry) => entry.slice(entry.indexOf("\t") + 1));
383
+ return {
384
+ ok: false,
385
+ stats,
386
+ refusal: refusal("delivery_conflict", "paths stayed unmerged after composition", paths),
387
+ };
388
+ }
389
+ const tree = (await git(["write-tree"], "write-tree")).stdout.trim();
390
+ return { ok: true, tree, stats };
391
+ }
392
+ finally {
393
+ rmSync(scratch, { recursive: true, force: true });
394
+ }
395
+ }
396
+ /** Stream one patch part onto the composed patch file (bounded chunks, no string). */
397
+ function appendPart(target, part) {
398
+ if (!existsSync(part))
399
+ return;
400
+ const size = statSync(part).size;
401
+ if (size === 0)
402
+ return;
403
+ const fd = openSync(part, "r");
404
+ try {
405
+ const chunk = Buffer.alloc(1 << 20);
406
+ for (let offset = 0; offset < size;) {
407
+ const read = readSync(fd, chunk, 0, chunk.length, offset);
408
+ if (read <= 0)
409
+ break;
410
+ appendFileSync(target, chunk.subarray(0, read));
411
+ offset += read;
412
+ }
413
+ }
414
+ finally {
415
+ closeSync(fd);
416
+ }
417
+ }
418
+ /** Group pairing records into components by shared endpoints (union-find on paths). */
419
+ function pairingComponents(records) {
420
+ const parent = new Map();
421
+ const find = (path) => {
422
+ let root = path;
423
+ while (parent.get(root) !== undefined && parent.get(root) !== root)
424
+ root = parent.get(root);
425
+ parent.set(path, root);
426
+ return root;
427
+ };
428
+ for (const record of records) {
429
+ for (const path of [record.src, record.dst])
430
+ if (!parent.has(path))
431
+ parent.set(path, path);
432
+ const a = find(record.src);
433
+ const b = find(record.dst);
434
+ if (a !== b)
435
+ parent.set(a, b);
436
+ }
437
+ const groups = new Map();
438
+ for (const record of records) {
439
+ const root = find(record.src);
440
+ groups.set(root, [...(groups.get(root) ?? []), record]);
441
+ }
442
+ return [...groups.values()];
443
+ }
444
+ //# sourceMappingURL=object-compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-compose.js","sourceRoot":"","sources":["../src/object-compose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { GitResultRefusal } from "@claudexor/schema";
2
+ import { type GitOperationFailureCode } from "./git-observed.js";
3
+ export interface MaterializeInput {
4
+ /** Top-level directory of the worktree to update. */
5
+ worktree: string;
6
+ /** Tree the worktree holds now (the delivery's T, a revert's S). */
7
+ from: string;
8
+ /** Tree to write (the delivery's M, a revert's R). */
9
+ to: string;
10
+ /** `temporary`: the user's index stays untouched (apply-only, revert);
11
+ * `real`: index and worktree move together (commit-class delivery). */
12
+ index: "temporary" | "real";
13
+ }
14
+ export type MaterializeResult = {
15
+ ok: true;
16
+ changed: number;
17
+ treeMutated: boolean;
18
+ } | {
19
+ ok: false;
20
+ refusal: GitResultRefusal;
21
+ /** The target no longer holds `from`, whatever part of `to` reached it. */
22
+ treeMutated: boolean;
23
+ /** Written paths whose content proof failed or could not run. */
24
+ unproven?: string[];
25
+ };
26
+ /** The typed refusal of a Git child's failure on an object path. */
27
+ export declare function gitFaultRefusalCode(code: GitOperationFailureCode): GitResultRefusal["code"];
28
+ export { proofStallMs } from "./git-observed.js";
29
+ /** The same refusals for a dry run: what a checkout from `from` to `to` would answer
30
+ * here before writing (a path holding what Git does not track, or one outside the
31
+ * sparse-checkout patterns). */
32
+ export declare function occupiedByWrite(worktree: string, from: string, to: string, env?: Record<string, string>): Promise<GitResultRefusal | null>;
33
+ /**
34
+ * Write `to` over a worktree that holds `from` (rev 11 C): a two-tree
35
+ * `read-tree -m -u` that refuses "not uptodate" when a path it must change no
36
+ * longer holds `from` (a live preimage recheck) and streams big blobs to disk.
37
+ * It runs with the sparse-checkout patterns off: with them on, Git reapplies them
38
+ * to every entry and deletes a clean file outside them that holds no skip-worktree
39
+ * mark (a conflict resolved there), a path this write never addressed. Off, only
40
+ * the paths `from` and `to` differ in move; every other entry keeps its file, and its
41
+ * mark unless Git itself clears it (Git clears the skip-worktree mark of a present
42
+ * file when it reads a sparse checkout's index). What Git does not track is refused
43
+ * first: a file at a path `to` adds (ignored, so outside `from`) would be
44
+ * overwritten, and no revert could bring it back. So is an addressed path outside
45
+ * the patterns: a snapshot's `add -A` skips it, so neither a take-back nor a revert
46
+ * could tell what it holds. A write that cannot fit refuses too, with nothing
47
+ * written. Afterwards every written path is proven by content, the way `git status`
48
+ * compares it (Git's clean conversion through an index), not by a stat refresh.
49
+ * Its temporary index's scratch goes last, never replacing the outcome.
50
+ */
51
+ export declare function materializeTree(input: MaterializeInput): Promise<MaterializeResult>;
52
+ //# sourceMappingURL=object-materialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-materialize.d.ts","sourceRoot":"","sources":["../src/object-materialize.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAML,KAAK,uBAAuB,EAC7B,MAAM,mBAAmB,CAAC;AAU3B,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX;2EACuE;IACvE,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GACnD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,gBAAgB,CAAC;IAC1B,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAQN,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAE3F;AAaD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAoGjD;;gCAEgC;AAChC,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC/B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAgBlC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAEnF"}