@codetreker/daynight 0.0.0-stage → 0.2.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 (47) hide show
  1. package/dist/cli.d.ts +17 -0
  2. package/dist/cli.js +164 -0
  3. package/dist/cli.js.map +1 -0
  4. package/dist/config.d.ts +32 -0
  5. package/dist/config.js +263 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/coordinator.d.ts +39 -0
  8. package/dist/coordinator.js +390 -0
  9. package/dist/coordinator.js.map +1 -0
  10. package/dist/copilot.d.ts +44 -0
  11. package/dist/copilot.js +263 -0
  12. package/dist/copilot.js.map +1 -0
  13. package/dist/diagnostics.d.ts +1 -0
  14. package/dist/diagnostics.js +16 -0
  15. package/dist/diagnostics.js.map +1 -0
  16. package/dist/git.d.ts +41 -0
  17. package/dist/git.js +539 -0
  18. package/dist/git.js.map +1 -0
  19. package/dist/github.d.ts +70 -0
  20. package/dist/github.js +675 -0
  21. package/dist/github.js.map +1 -0
  22. package/dist/instance-lock.d.ts +5 -0
  23. package/dist/instance-lock.js +115 -0
  24. package/dist/instance-lock.js.map +1 -0
  25. package/dist/main.d.ts +2 -0
  26. package/dist/main.js +12 -0
  27. package/dist/main.js.map +1 -0
  28. package/dist/paths.d.ts +33 -0
  29. package/dist/paths.js +155 -0
  30. package/dist/paths.js.map +1 -0
  31. package/dist/processes.d.ts +23 -0
  32. package/dist/processes.js +182 -0
  33. package/dist/processes.js.map +1 -0
  34. package/dist/repositories.d.ts +15 -0
  35. package/dist/repositories.js +159 -0
  36. package/dist/repositories.js.map +1 -0
  37. package/dist/review-list.d.ts +5 -0
  38. package/dist/review-list.js +123 -0
  39. package/dist/review-list.js.map +1 -0
  40. package/dist/runtime.d.ts +24 -0
  41. package/dist/runtime.js +77 -0
  42. package/dist/runtime.js.map +1 -0
  43. package/dist/store.d.ts +136 -0
  44. package/dist/store.js +579 -0
  45. package/dist/store.js.map +1 -0
  46. package/package.json +33 -3
  47. package/README.md +0 -3
package/dist/git.js ADDED
@@ -0,0 +1,539 @@
1
+ import path from "node:path";
2
+ import { lstat, mkdir, mkdtemp, readFile, readdir, rm, writeFile } from "node:fs/promises";
3
+ import { remoteIdentity } from "./config.js";
4
+ import { ancestorIdentities, resolvePhysicalDirectory } from "./paths.js";
5
+ import { executeCommand, prepareGitHubAuthentication, sanitizedProcessError } from "./github.js";
6
+ export class GitCommandError extends Error {
7
+ completed;
8
+ constructor(message, cause, completed) {
9
+ super(message, { cause });
10
+ this.name = "GitCommandError";
11
+ this.completed = completed;
12
+ }
13
+ }
14
+ const localGitEnvironment = new Set([
15
+ "GIT_ALTERNATE_OBJECT_DIRECTORIES", "GIT_CONFIG", "GIT_CONFIG_PARAMETERS", "GIT_CONFIG_COUNT",
16
+ "GIT_OBJECT_DIRECTORY", "GIT_DIR", "GIT_WORK_TREE", "GIT_IMPLICIT_WORK_TREE", "GIT_GRAFT_FILE",
17
+ "GIT_INDEX_FILE", "GIT_NO_REPLACE_OBJECTS", "GIT_REPLACE_REF_BASE", "GIT_PREFIX", "GIT_SHALLOW_FILE", "GIT_COMMON_DIR",
18
+ ]);
19
+ /** Child overrides: undefined entries erase inherited selectors before prepared settings apply. */
20
+ export const isolatedGitEnvironment = (inherited, prepared) => {
21
+ const environment = {};
22
+ for (const name of Object.keys(inherited)) {
23
+ const upper = name.toUpperCase();
24
+ if (localGitEnvironment.has(upper) || /^GIT_CONFIG_(?:KEY|VALUE)_\d+$/.test(upper) || upper.startsWith("GIT_TRACE") || upper === "GIT_CURL_VERBOSE") {
25
+ environment[name] = undefined;
26
+ }
27
+ }
28
+ return Object.assign(environment, prepared);
29
+ };
30
+ const isMissing = (error) => error instanceof Error && "code" in error && error.code === "ENOENT";
31
+ const requireSha = (sha) => {
32
+ if (!/^(?:[a-f\d]{40}|[a-f\d]{64})$/.test(sha))
33
+ throw new Error("Git returned an invalid commit object ID.");
34
+ return sha;
35
+ };
36
+ const requireUuid = (value) => {
37
+ if (!/^[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}$/i.test(value))
38
+ throw new Error("A review must have a UUID.");
39
+ };
40
+ const existingDirectory = async (target) => {
41
+ const directory = await resolvePhysicalDirectory(target);
42
+ if (directory.missingComponents.length !== 0)
43
+ throw new Error(`Filesystem directory ${target} is missing.`);
44
+ return directory;
45
+ };
46
+ const sameDirectory = async (first, second) => (await existingDirectory(first)).ancestorIdentity === (await existingDirectory(second)).ancestorIdentity;
47
+ const ordinaryDirectory = async (target) => {
48
+ try {
49
+ const entry = await lstat(target);
50
+ if (entry.isSymbolicLink() || !entry.isDirectory())
51
+ throw new Error(`Managed worktree path ${target} must be an ordinary directory.`);
52
+ return true;
53
+ }
54
+ catch (error) {
55
+ if (isMissing(error))
56
+ return false;
57
+ throw error;
58
+ }
59
+ };
60
+ const parseWorktrees = (output) => {
61
+ const entries = [];
62
+ let current = null;
63
+ for (const field of output.split("\0")) {
64
+ if (field === "") {
65
+ if (current !== null)
66
+ entries.push(current);
67
+ current = null;
68
+ continue;
69
+ }
70
+ if (field.startsWith("worktree ")) {
71
+ if (current !== null)
72
+ throw new Error("Git returned an incomplete worktree entry.");
73
+ current = { path: field.slice(9), locked: null };
74
+ }
75
+ else if (field === "locked" || field.startsWith("locked ")) {
76
+ if (current === null)
77
+ throw new Error("Git returned a lock outside a worktree entry.");
78
+ current.locked = field === "locked" ? "" : field.slice(7);
79
+ }
80
+ }
81
+ if (current !== null)
82
+ throw new Error("Git returned incomplete worktree output.");
83
+ return entries;
84
+ };
85
+ export const createGitManager = (options) => {
86
+ if (!path.isAbsolute(options.temporaryDirectory))
87
+ throw new Error("The Git temporary directory must be absolute.");
88
+ const execute = options.execute === undefined ? executeCommand : options.execute;
89
+ const now = options.now === undefined ? Date.now : options.now;
90
+ const timeoutMs = options.timeoutMs === undefined ? 120_000 : options.timeoutMs;
91
+ const maxBufferBytes = options.maxBufferBytes === undefined ? 16 * 1024 * 1024 : options.maxBufferBytes;
92
+ for (const [label, value] of [["Git command timeout", timeoutMs], ["Git output limit", maxBufferBytes]]) {
93
+ if (!Number.isSafeInteger(value) || value <= 0 || value > 2_147_483_647)
94
+ throw new Error(`${label} must be a positive supported integer.`);
95
+ }
96
+ let context;
97
+ const gitContext = () => {
98
+ if (context === undefined)
99
+ context = (async () => {
100
+ await mkdir(options.temporaryDirectory, { recursive: true });
101
+ const directory = await mkdtemp(path.join(options.temporaryDirectory, "git-context-"));
102
+ const hooksDirectory = path.join(directory, "hooks");
103
+ const graftsFile = path.join(directory, "grafts");
104
+ await mkdir(hooksDirectory);
105
+ await writeFile(graftsFile, "", { flag: "wx" });
106
+ return { hooksDirectory, gitEnvironment: {
107
+ GIT_NO_REPLACE_OBJECTS: "1", GIT_GRAFT_FILE: graftsFile,
108
+ GIT_CONFIG_COUNT: "3",
109
+ GIT_CONFIG_KEY_0: "core.sparseCheckout", GIT_CONFIG_VALUE_0: "false",
110
+ GIT_CONFIG_KEY_1: "core.sparseCheckoutCone", GIT_CONFIG_VALUE_1: "false",
111
+ GIT_CONFIG_KEY_2: "index.sparse", GIT_CONFIG_VALUE_2: "false",
112
+ } };
113
+ })();
114
+ return context;
115
+ };
116
+ const run = async (args, signal, host) => {
117
+ signal?.throwIfAborted();
118
+ const context = await gitContext();
119
+ const environment = isolatedGitEnvironment(process.env, context.gitEnvironment);
120
+ environment.GIT_TERMINAL_PROMPT = "0";
121
+ const prefix = ["-c", `core.hooksPath=${context.hooksDirectory}`, "-c", "core.fsmonitor=false", "-c", "submodule.recurse=false"];
122
+ if (host !== undefined) {
123
+ const authentication = await prepareGitHubAuthentication(host, execute, { timeoutMs, maxBufferBytes, ...(signal === undefined ? {} : { signal }) });
124
+ Object.assign(environment, authentication.environment);
125
+ prefix.push("-c", `credential.https://${host}.helper=`, "-c", `credential.https://${host}.helper=!\"gh\" auth git-credential`);
126
+ }
127
+ let result;
128
+ try {
129
+ result = await execute("git", [...prefix, ...args], { timeoutMs, maxBufferBytes, environment, ...(signal === undefined ? {} : { signal }) });
130
+ }
131
+ catch (cause) {
132
+ throw new GitCommandError("Git command did not complete; its effects must be reconciled before retry.", host === undefined ? cause : sanitizedProcessError(cause), false);
133
+ }
134
+ if (result.error !== null || signal?.aborted) {
135
+ const failure = result.error;
136
+ const completed = !signal?.aborted && failure !== null && "code" in failure && typeof failure.code === "number" &&
137
+ !("killed" in failure && failure.killed === true) && !("signal" in failure && failure.signal !== null && failure.signal !== undefined);
138
+ throw new GitCommandError("Git operation failed; its effects must be reconciled before retry.", host === undefined ? failure ?? signal?.reason : sanitizedProcessError(failure ?? signal?.reason), completed);
139
+ }
140
+ return result.stdout;
141
+ };
142
+ const git = (root, args, signal) => run(["-C", root, ...args], signal);
143
+ const command = async (root, args, signal) => (await git(root, args, signal)).replace(/\r?\n$/, "");
144
+ const rootAndCommon = async (root, signal) => {
145
+ const requested = await existingDirectory(root);
146
+ const top = await command(requested.ancestorPath, ["rev-parse", "--show-toplevel"], signal);
147
+ if (!(await sameDirectory(requested.ancestorPath, top)))
148
+ throw new Error(`Configured repository ${root} is not its exact Git worktree root.`);
149
+ const common = await command(requested.ancestorPath, ["rev-parse", "--path-format=absolute", "--git-common-dir"], signal);
150
+ return { root: requested.ancestorPath, commonDirectory: (await existingDirectory(common)).ancestorPath };
151
+ };
152
+ const ensureRepository = async (configuration, signal) => {
153
+ signal?.throwIfAborted();
154
+ const repository = await options.client.resolveRepository(configuration, signal);
155
+ signal?.throwIfAborted();
156
+ const target = await resolvePhysicalDirectory(configuration.path);
157
+ if (target.missingComponents.length !== 0) {
158
+ await mkdir(path.dirname(configuration.path), { recursive: true });
159
+ await mkdir(configuration.path);
160
+ const reserved = await existingDirectory(configuration.path);
161
+ try {
162
+ await run(["clone", "--origin=origin", "--no-tags", `--template=${(await gitContext()).hooksDirectory}`, "--", `https://${configuration.host}/${configuration.owner}/${configuration.name}.git`, reserved.ancestorPath], signal, configuration.host);
163
+ }
164
+ catch (cause) {
165
+ if (cause instanceof GitCommandError && cause.completed) {
166
+ try {
167
+ if (await ordinaryDirectory(configuration.path)) {
168
+ const current = await existingDirectory(configuration.path);
169
+ if (current.ancestorIdentity !== reserved.ancestorIdentity)
170
+ throw new Error("The reserved clone destination changed identity.");
171
+ if (!(await ordinaryDirectory(reserved.ancestorPath)) || (await existingDirectory(reserved.ancestorPath)).ancestorIdentity !== reserved.ancestorIdentity) {
172
+ throw new Error("The physical clone destination changed identity.");
173
+ }
174
+ await rm(reserved.ancestorPath, { recursive: true });
175
+ }
176
+ }
177
+ catch (cleanupError) {
178
+ throw new AggregateError([cause, cleanupError], `Clone failed and its exclusive destination ${configuration.path} could not be safely removed.`);
179
+ }
180
+ throw new Error(`Cannot clone repository into ${configuration.path}; the failed exclusive destination was removed.`, { cause });
181
+ }
182
+ throw new Error(`Cannot clone repository into ${configuration.path}; the reserved destination is retained because the process outcome is uncertain.`, { cause });
183
+ }
184
+ }
185
+ const directories = await rootAndCommon(configuration.path, signal);
186
+ const origins = (await command(directories.root, ["config", "--local", "--get-all", "remote.origin.url"], signal)).split(/\r?\n/);
187
+ if (origins.length !== 1 || origins[0] === "")
188
+ throw new Error("The configured repository must have exactly one origin URL.");
189
+ const identity = remoteIdentity(origins[0], "Git origin");
190
+ if (identity.host !== configuration.host)
191
+ throw new Error("The configured repository origin has a different GitHub host.");
192
+ const originRepository = await options.client.resolveRepository({ ...configuration, ...identity, remote: origins[0] }, signal);
193
+ if (originRepository.host !== repository.host || originRepository.githubId !== repository.githubId)
194
+ throw new Error("The configured repository origin identifies a different GitHub repository.");
195
+ return { configuration, repository, ...directories,
196
+ rootIdentity: (await existingDirectory(directories.root)).ancestorIdentity,
197
+ commonIdentity: (await existingDirectory(directories.commonDirectory)).ancestorIdentity };
198
+ };
199
+ const validateLocal = async (local, signal) => {
200
+ const directories = await rootAndCommon(local.root, signal);
201
+ if ((await existingDirectory(directories.root)).ancestorIdentity !== local.rootIdentity ||
202
+ (await existingDirectory(directories.commonDirectory)).ancestorIdentity !== local.commonIdentity) {
203
+ throw new Error("The configured Git root or common directory changed identity.");
204
+ }
205
+ };
206
+ const validateStoredRepository = async (store, local) => {
207
+ const repository = store.getRepository(local.repository);
208
+ if (repository === null || !await sameDirectory(repository.localPath, local.root)) {
209
+ throw new Error("The local Git repository does not match its durable repository registration.");
210
+ }
211
+ };
212
+ const worktreeEntries = async (local, signal) => parseWorktrees(await git(local.root, ["worktree", "list", "--porcelain", "-z"], signal));
213
+ const worktreePath = (local, number) => path.join(local.root, ".worktrees", `pr-${number}`);
214
+ const entryFor = async (entries, target, exists) => {
215
+ for (const entry of entries) {
216
+ if (path.resolve(entry.path) === target)
217
+ return entry;
218
+ if (exists && await ordinaryDirectory(entry.path) && await sameDirectory(entry.path, target))
219
+ return entry;
220
+ }
221
+ return null;
222
+ };
223
+ const readOrdinaryFile = async (target) => {
224
+ try {
225
+ const entry = await lstat(target);
226
+ if (!entry.isFile() || entry.isSymbolicLink())
227
+ throw new Error(`Git metadata ${target} must be an ordinary file.`);
228
+ return (await readFile(target, "utf8")).replace(/\r?\n$/, "");
229
+ }
230
+ catch (error) {
231
+ if (isMissing(error))
232
+ return null;
233
+ throw error;
234
+ }
235
+ };
236
+ const fileIdentity = async (target) => {
237
+ const entry = await lstat(target, { bigint: true });
238
+ if (!entry.isFile() || entry.isSymbolicLink())
239
+ throw new Error(`Git pointer ${target} must be an ordinary file.`);
240
+ return `${entry.dev}:${entry.ino}`;
241
+ };
242
+ const canonicalMissingPath = async (target) => {
243
+ const parent = await resolvePhysicalDirectory(path.dirname(target));
244
+ return path.join(parent.ancestorPath, ...parent.missingComponents, path.basename(target));
245
+ };
246
+ const ownedAdministrativeDirectory = async (local, target, sessionId, exists, signal) => {
247
+ const pointerFile = path.join(target, ".git");
248
+ let pointerIdentity = null;
249
+ if (exists) {
250
+ try {
251
+ pointerIdentity = await fileIdentity(pointerFile);
252
+ }
253
+ catch (cause) {
254
+ throw new Error(`Cannot validate managed Git pointer ${pointerFile}.`, { cause });
255
+ }
256
+ }
257
+ const family = path.join(local.commonDirectory, "worktrees");
258
+ if (!await ordinaryDirectory(family))
259
+ throw new Error("The managed worktree has no linked administrative family.");
260
+ const matches = [];
261
+ for (const entry of await readdir(family, { withFileTypes: true })) {
262
+ if (!entry.isDirectory() || entry.isSymbolicLink())
263
+ continue;
264
+ const directory = path.join(family, entry.name);
265
+ if (await readOrdinaryFile(path.join(directory, "locked")) !== `daynight:${sessionId}`)
266
+ continue;
267
+ const backpointer = await readOrdinaryFile(path.join(directory, "gitdir"));
268
+ if (backpointer === null)
269
+ continue;
270
+ const resolvedPointer = path.resolve(directory, backpointer);
271
+ let matchesPointer;
272
+ if (exists) {
273
+ try {
274
+ matchesPointer = await fileIdentity(resolvedPointer) === pointerIdentity;
275
+ }
276
+ catch (error) {
277
+ if (isMissing(error))
278
+ continue;
279
+ throw error;
280
+ }
281
+ }
282
+ else
283
+ matchesPointer = await canonicalMissingPath(resolvedPointer) === pointerFile;
284
+ if (!matchesPointer)
285
+ continue;
286
+ const common = await readOrdinaryFile(path.join(directory, "commondir"));
287
+ if (common === null || !await sameDirectory(path.resolve(directory, common), local.commonDirectory)) {
288
+ throw new Error("The managed worktree administrative registration has a different common directory.");
289
+ }
290
+ matches.push((await existingDirectory(directory)).ancestorPath);
291
+ }
292
+ if (matches.length !== 1)
293
+ throw new Error("The managed worktree administrative registration is missing or ambiguous.");
294
+ const directory = matches[0];
295
+ if (await sameDirectory(directory, local.commonDirectory))
296
+ throw new Error("The managed worktree cannot use primary Git administration.");
297
+ if (exists) {
298
+ const actual = await command(target, ["rev-parse", "--absolute-git-dir"], signal);
299
+ if (!await sameDirectory(actual, directory))
300
+ throw new Error("The managed worktree Git pointer does not match its own administrative registration.");
301
+ }
302
+ return directory;
303
+ };
304
+ const ownedGit = (owned, args, signal) => {
305
+ if (owned.administrativeDirectory === null || !owned.exists)
306
+ throw new Error("An existing bound worktree is required for Git worktree operations.");
307
+ return run(["--git-dir", owned.administrativeDirectory, "--work-tree", owned.target, "-C", owned.target, ...args], signal);
308
+ };
309
+ const emptyTrackedSubmodules = async (owned, signal) => {
310
+ const target = owned.target;
311
+ const leaf = await existingDirectory(target);
312
+ const tracked = await ownedGit(owned, ["ls-files", "--stage", "-z"], signal);
313
+ for (const entry of tracked.split("\0")) {
314
+ const match = /^160000 [a-f\d]+ [0-3]\t([\s\S]+)$/.exec(entry);
315
+ if (match === null)
316
+ continue;
317
+ const directory = path.resolve(target, match[1]);
318
+ if (!await ordinaryDirectory(directory))
319
+ continue;
320
+ const physical = await existingDirectory(directory);
321
+ if (!(await ancestorIdentities(physical.ancestorPath)).has(leaf.ancestorIdentity) || physical.ancestorIdentity === leaf.ancestorIdentity) {
322
+ throw new Error("An initialized submodule points outside the owned worktree.");
323
+ }
324
+ signal?.throwIfAborted();
325
+ await rm(directory, { recursive: true });
326
+ await mkdir(directory);
327
+ }
328
+ };
329
+ const inspectOwned = async (local, pullRequest, signal) => {
330
+ await validateLocal(local, signal);
331
+ const target = worktreePath(local, pullRequest.number);
332
+ if (pullRequest.worktreePath !== null && pullRequest.worktreePath !== target)
333
+ throw new Error("The persisted PR worktree path does not match its fixed repository location.");
334
+ await ordinaryDirectory(path.dirname(target));
335
+ const exists = await ordinaryDirectory(target);
336
+ const entries = await worktreeEntries(local, signal);
337
+ const entry = await entryFor(entries, target, exists);
338
+ if ((exists || entry !== null) && pullRequest.worktreePath === null)
339
+ throw new Error(`Unowned existing worktree path ${target} must be preserved.`);
340
+ if (entry === null) {
341
+ if (exists)
342
+ throw new Error(`Unregistered existing worktree path ${target} must be preserved.`);
343
+ return { target, exists, entry, administrativeDirectory: null };
344
+ }
345
+ if (pullRequest.sessionId === null || entry.locked !== `daynight:${pullRequest.sessionId}`)
346
+ throw new Error("The PR worktree ownership lock does not match its persisted session.");
347
+ const administrativeDirectory = await ownedAdministrativeDirectory(local, target, pullRequest.sessionId, exists, signal);
348
+ if (exists) {
349
+ const directories = await rootAndCommon(target, signal);
350
+ if (!(await sameDirectory(directories.commonDirectory, local.commonDirectory)))
351
+ throw new Error("The managed worktree belongs to a different repository.");
352
+ }
353
+ return { target, exists, entry, administrativeDirectory };
354
+ };
355
+ const currentPreparation = (store, local, reviewId) => {
356
+ const review = store.getReview(reviewId);
357
+ if (review === null || review.status !== "preparing" || review.host !== local.repository.host || review.githubId !== local.repository.githubId)
358
+ throw new Error("A preparing review reservation for this repository is required.");
359
+ const pullRequest = store.getPullRequest(review);
360
+ if (pullRequest === null || pullRequest.sessionId === null || pullRequest.state !== "open" || pullRequest.draft || pullRequest.cleanupPending || pullRequest.desiredRevision !== review.revision || pullRequest.headSha !== review.headSha || pullRequest.baseRef !== review.baseRef)
361
+ throw new Error("The review target is no longer ready for worktree preparation.");
362
+ const other = store.listActiveReviews().some((active) => active.host === review.host && active.githubId === review.githubId && active.number === review.number && active.id !== review.id);
363
+ if (other)
364
+ throw new Error("Another active review blocks worktree preparation.");
365
+ return { review, pullRequest };
366
+ };
367
+ const refresh = async (store, local, number, signal) => {
368
+ const observed = await options.client.getPullRequest(local.repository, number, signal);
369
+ if (observed.number !== number)
370
+ throw new Error("GitHub returned a different PR during worktree reconciliation.");
371
+ const current = store.observePullRequest(local.repository, observed, now());
372
+ if (current === null)
373
+ throw new Error("The PR is permanently excluded by the repository cutoff.");
374
+ return current;
375
+ };
376
+ const eligible = (review, current) => current.state === "open" && !current.draft && !current.cleanupPending && review.revision === current.desiredRevision && review.headSha === current.headSha && review.baseRef === current.baseRef;
377
+ const privateRef = (review, suffix) => `refs/daynight/reviews/${review.id}/${suffix}`;
378
+ const findRef = async (local, ref, signal) => {
379
+ const listed = await command(local.root, ["for-each-ref", "--format=%(objectname)", ref], signal);
380
+ if (listed === "")
381
+ return null;
382
+ if (listed.includes("\n"))
383
+ throw new Error("The review reference is not unique.");
384
+ return requireSha(listed);
385
+ };
386
+ const pin = async (local, ref, sha, signal) => {
387
+ const existing = await findRef(local, ref, signal);
388
+ if (existing !== null) {
389
+ if (existing !== sha)
390
+ throw new Error("An immutable review reference does not match its captured commit.");
391
+ return;
392
+ }
393
+ await git(local.root, ["update-ref", ref, sha, "0".repeat(sha.length)], signal);
394
+ };
395
+ const prepareWorktree = async (store, local, reviewId, proof, signal) => {
396
+ if (proof.processesExcluded !== true)
397
+ throw new Error("Previous agent processes must be excluded before worktree preparation.");
398
+ requireUuid(reviewId);
399
+ await validateStoredRepository(store, local);
400
+ let { review, pullRequest } = currentPreparation(store, local, reviewId);
401
+ const fresh = await refresh(store, local, review.number, signal);
402
+ if (!eligible(review, fresh))
403
+ return { kind: "changed" };
404
+ const before = await inspectOwned(local, fresh, signal);
405
+ if (review.baseSha === null) {
406
+ const existingHead = await findRef(local, privateRef(review, "head"), signal);
407
+ const existingBase = await findRef(local, privateRef(review, "base"), signal);
408
+ if (existingHead !== null && existingHead !== review.headSha)
409
+ throw new Error("The immutable head reference does not match this review.");
410
+ let baseSha = existingBase;
411
+ if (baseSha === null) {
412
+ await git(local.root, ["check-ref-format", `refs/heads/${review.baseRef}`], signal);
413
+ const shallow = await command(local.root, ["rev-parse", "--is-shallow-repository"], signal);
414
+ const headRef = `refs/daynight/incoming/${review.id}/head`;
415
+ const baseRef = `refs/daynight/incoming/${review.id}/base`;
416
+ await run(["-C", local.root, "fetch", "--atomic", "--no-recurse-submodules", "--no-tags", "--no-write-fetch-head", "--no-auto-maintenance", "--refmap=", ...(shallow === "true" ? ["--unshallow"] : []), "--", `https://${local.configuration.host}/${local.configuration.owner}/${local.configuration.name}.git`, `+refs/pull/${review.number}/head:${headRef}`, `+refs/heads/${review.baseRef}:${baseRef}`], signal, local.configuration.host);
417
+ const fetchedHead = requireSha(await command(local.root, ["rev-parse", `${headRef}^{commit}`], signal));
418
+ baseSha = requireSha(await command(local.root, ["rev-parse", `${baseRef}^{commit}`], signal));
419
+ const observed = await refresh(store, local, review.number, signal);
420
+ if (!eligible(review, observed) || fetchedHead !== review.headSha)
421
+ return { kind: "changed" };
422
+ }
423
+ ({ review, pullRequest } = currentPreparation(store, local, reviewId));
424
+ await pin(local, privateRef(review, "head"), requireSha(review.headSha), signal);
425
+ await pin(local, privateRef(review, "base"), baseSha, signal);
426
+ review = store.pinReviewBase(review.id, baseSha, now());
427
+ }
428
+ const headSha = requireSha(review.headSha);
429
+ const baseSha = requireSha(review.baseSha);
430
+ await pin(local, privateRef(review, "head"), headSha, signal);
431
+ await pin(local, privateRef(review, "base"), baseSha, signal);
432
+ const mergeBases = (await command(local.root, ["merge-base", "--all", headSha, baseSha], signal)).split(/\r?\n/).map(requireSha).sort();
433
+ const previousMergeBase = await findRef(local, privateRef(review, "merge-base"), signal);
434
+ const mergeBaseSha = previousMergeBase === null ? mergeBases[0] : previousMergeBase;
435
+ if (!mergeBases.includes(mergeBaseSha))
436
+ throw new Error("The pinned merge base no longer matches the captured commits.");
437
+ await pin(local, privateRef(review, "merge-base"), mergeBaseSha, signal);
438
+ if (!eligible(review, await refresh(store, local, review.number, signal)))
439
+ return { kind: "changed" };
440
+ ({ review, pullRequest } = currentPreparation(store, local, reviewId));
441
+ let owned = await inspectOwned(local, pullRequest, signal);
442
+ if (owned.target !== before.target)
443
+ throw new Error("The managed worktree destination changed during preparation.");
444
+ if (owned.entry === null) {
445
+ if (!(await ordinaryDirectory(path.dirname(owned.target))))
446
+ await mkdir(path.dirname(owned.target));
447
+ currentPreparation(store, local, reviewId);
448
+ store.registerWorktree(pullRequest, owned.target);
449
+ await git(local.root, ["worktree", "add", "--detach", "--lock", "--reason", `daynight:${pullRequest.sessionId}`, "--", owned.target, headSha], signal);
450
+ }
451
+ else if (!owned.exists) {
452
+ currentPreparation(store, local, reviewId);
453
+ await git(local.root, ["worktree", "remove", "--force", "--force", "--", owned.target], signal);
454
+ currentPreparation(store, local, reviewId);
455
+ await git(local.root, ["worktree", "add", "--detach", "--lock", "--reason", `daynight:${pullRequest.sessionId}`, "--", owned.target, headSha], signal);
456
+ }
457
+ else if (review.attemptCount === 0) {
458
+ currentPreparation(store, local, reviewId);
459
+ await emptyTrackedSubmodules(owned, signal);
460
+ currentPreparation(store, local, reviewId);
461
+ owned = await inspectOwned(local, pullRequest, signal);
462
+ await ownedGit(owned, ["read-tree", "--empty"], signal);
463
+ currentPreparation(store, local, reviewId);
464
+ owned = await inspectOwned(local, pullRequest, signal);
465
+ await ownedGit(owned, ["read-tree", "--reset", "-u", "--no-sparse-checkout", headSha], signal);
466
+ currentPreparation(store, local, reviewId);
467
+ owned = await inspectOwned(local, pullRequest, signal);
468
+ await ownedGit(owned, ["checkout", "--detach", "--force", headSha], signal);
469
+ currentPreparation(store, local, reviewId);
470
+ owned = await inspectOwned(local, pullRequest, signal);
471
+ currentPreparation(store, local, reviewId);
472
+ await emptyTrackedSubmodules(owned, signal);
473
+ currentPreparation(store, local, reviewId);
474
+ owned = await inspectOwned(local, pullRequest, signal);
475
+ await ownedGit(owned, ["clean", "-ffdx"], signal);
476
+ }
477
+ owned = await inspectOwned(local, store.getPullRequest(pullRequest), signal);
478
+ const actualHead = (await ownedGit(owned, ["rev-parse", "HEAD"], signal)).replace(/\r?\n$/, "");
479
+ const symbolicHead = (await ownedGit(owned, ["rev-parse", "--symbolic-full-name", "HEAD"], signal)).replace(/\r?\n$/, "");
480
+ if (review.attemptCount === 0 && (actualHead !== headSha || symbolicHead !== "HEAD"))
481
+ throw new Error("The prepared worktree is not detached at the captured PR head.");
482
+ return { kind: "prepared", path: owned.target, headSha, baseSha, mergeBaseSha, gitEnvironment: { ...(await gitContext()).gitEnvironment } };
483
+ };
484
+ const cleanupWorktree = async (store, local, identity, proof, signal) => {
485
+ if (proof.operationsStopped !== true || proof.processesExcluded !== true)
486
+ throw new Error("Stopped operations and excluded agent processes are required for cleanup.");
487
+ const requireCleanup = () => {
488
+ if (identity.host !== local.repository.host || identity.githubId !== local.repository.githubId)
489
+ throw new Error("Cleanup identity belongs to a different repository.");
490
+ const pr = store.getPullRequest(identity);
491
+ if (pr === null || !pr.cleanupPending || pr.worktreePath === null)
492
+ throw new Error("The PR has no unresolved worktree cleanup.");
493
+ if (store.listActiveReviews().some((review) => review.host === pr.host && review.githubId === pr.githubId && review.number === pr.number))
494
+ throw new Error("An active review blocks worktree cleanup.");
495
+ return pr;
496
+ };
497
+ await validateStoredRepository(store, local);
498
+ const initial = requireCleanup();
499
+ const cancelReopened = () => {
500
+ const current = requireCleanup();
501
+ if (current.state !== "open")
502
+ return false;
503
+ store.cancelCleanup(identity, current.worktreePath, proof);
504
+ return true;
505
+ };
506
+ try {
507
+ await refresh(store, local, identity.number, signal);
508
+ if (cancelReopened())
509
+ return { kind: "reopened" };
510
+ const pr = requireCleanup();
511
+ const owned = await inspectOwned(local, pr, signal);
512
+ if (cancelReopened())
513
+ return { kind: "reopened" };
514
+ if (owned.entry !== null)
515
+ await git(local.root, ["worktree", "remove", "--force", "--force", "--", owned.target], signal);
516
+ else if (owned.exists)
517
+ throw new Error("An unregistered worktree cannot be removed.");
518
+ if (cancelReopened())
519
+ return { kind: "reopened" };
520
+ requireCleanup();
521
+ store.completeCleanup(identity, owned.target, proof);
522
+ return { kind: "cleaned" };
523
+ }
524
+ catch (error) {
525
+ try {
526
+ const current = store.getPullRequest(identity);
527
+ if (current !== null && current.cleanupPending && current.worktreePath === initial.worktreePath) {
528
+ store.recordCleanupError(identity, initial.worktreePath, error instanceof Error ? error.message : String(error));
529
+ }
530
+ }
531
+ catch (recordingError) {
532
+ throw new AggregateError([error, recordingError], "Worktree cleanup failed and its error could not be recorded.", { cause: error });
533
+ }
534
+ throw error;
535
+ }
536
+ };
537
+ return { ensureRepository, prepareWorktree, cleanupWorktree };
538
+ };
539
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}