@codetreker/daynight 0.0.0-stage → 0.2.3

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 +122 -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 +40 -4
  47. package/README.md +0 -3
@@ -0,0 +1,390 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { setImmediate } from "node:timers/promises";
3
+ import { GitCommandError } from "./git.js";
4
+ import { GitHubApiError, pollRepository } from "./github.js";
5
+ const key = (identity) => JSON.stringify([identity.host, identity.githubId, identity.number]);
6
+ const target = (pr) => JSON.stringify([pr.desiredRevision, pr.headSha, pr.baseRef]);
7
+ const repositoryKey = (identity) => JSON.stringify([identity.host, identity.githubId]);
8
+ const message = (error) => error instanceof Error ? error.message : String(error);
9
+ const isCurrent = (review, pr) => pr.state === "open" && !pr.draft && !pr.cleanupPending &&
10
+ review.revision === pr.desiredRevision && review.headSha === pr.headSha && review.baseRef === pr.baseRef;
11
+ const uncertainGit = (error) => {
12
+ if (error instanceof GitCommandError && !error.completed)
13
+ return true;
14
+ if (error instanceof AggregateError && error.errors.some(uncertainGit))
15
+ return true;
16
+ return error instanceof Error && error.cause !== undefined && uncertainGit(error.cause);
17
+ };
18
+ const stopped = { operationsStopped: true };
19
+ const excluded = { processesExcluded: true };
20
+ const retryDelay = (configuration, attempts) => Math.min(600_000, configuration.retryDelayMs * 2 ** Math.min(30, Math.max(0, attempts - 1)));
21
+ /** Owns one foreground scheduling lifetime; dependencies retain command and process ownership. */
22
+ export const runCoordinator = async (options) => {
23
+ const { configuration, store, client, git, runner, processes, log } = options;
24
+ const lifetime = new AbortController();
25
+ const signal = AbortSignal.any([options.signal, lifetime.signal]);
26
+ const now = options.now === undefined ? Date.now : options.now;
27
+ const repositories = configuration.repositories.map((item) => ({ configuration: item, local: null, polling: false, nextPollAt: 0, blocked: false }));
28
+ const localRepositories = new Map();
29
+ const reservations = new Map();
30
+ const blocked = new Set();
31
+ const cleanupRetryAt = new Map();
32
+ const waiting = new Map();
33
+ const checkAdmissions = new Map();
34
+ const pending = new Set();
35
+ let workers = 0;
36
+ let safeToReleaseLock = true;
37
+ let wake;
38
+ const notify = () => { wake?.(); };
39
+ const context = (review) => {
40
+ const repository = store.getRepository(review);
41
+ return { repository: repository === null ? `${review.host}/${review.githubId}` : repository.remote, number: review.number,
42
+ reviewId: review.id, revision: review.revision, attempt: review.attemptCount };
43
+ };
44
+ const report = (review, phase, text, error, retryAt) => {
45
+ log({ ...context(review), phase, message: text, level: error === undefined ? "info" : "error",
46
+ ...(error === undefined ? {} : { error }), ...(retryAt === undefined ? {} : { retryAt }) });
47
+ };
48
+ const interrupt = (review, error) => {
49
+ blocked.add(key(review));
50
+ safeToReleaseLock = false;
51
+ const current = store.getReview(review.id);
52
+ if (current.status === "preparing" || current.status === "running" || current.status === "interrupted")
53
+ store.markInterrupted(current.id, message(error), now());
54
+ report(current, "interrupted", "The PR is blocked until its previous operations and processes are explicitly excluded.", error);
55
+ };
56
+ const track = (operation, release) => {
57
+ const task = operation().catch((error) => {
58
+ safeToReleaseLock = false;
59
+ log({ level: "error", phase: "coordinator", message: "An operation failed while recording its final state; retained state requires inspection.", error });
60
+ }).finally(() => { release(); pending.delete(task); notify(); });
61
+ pending.add(task);
62
+ };
63
+ const checksRetryAt = (error) => Math.max(now() + configuration.pollIntervalMs, error instanceof GitHubApiError && error.retryAt !== null ? error.retryAt : 0);
64
+ const checkCandidate = async (repository, pr, admission) => {
65
+ const prKey = key(pr);
66
+ try {
67
+ const checks = await client.getPullRequestChecks(repository.local.repository, pr.number, signal);
68
+ const candidate = waiting.get(prKey);
69
+ if (signal.aborted || checkAdmissions.get(prKey) !== admission || candidate === undefined || target(candidate.pullRequest) !== admission.target)
70
+ return;
71
+ const ready = checks.ready && checks.headSha === pr.headSha && checks.baseRef === pr.baseRef;
72
+ if (!admission.reported || admission.ready !== ready)
73
+ log({ level: "info", phase: "ci", repository: repository.configuration.coordinate,
74
+ number: pr.number, revision: pr.desiredRevision, message: ready ? "All CI checks passed for the waiting PR target." : "The PR is waiting for all CI checks to finish and pass." });
75
+ admission.ready = ready;
76
+ admission.reported = true;
77
+ admission.nextCheckAt = checksRetryAt();
78
+ }
79
+ catch (error) {
80
+ if (signal.aborted || checkAdmissions.get(prKey) !== admission)
81
+ return;
82
+ admission.ready = false;
83
+ admission.nextCheckAt = checksRetryAt(error);
84
+ log({ level: "error", phase: "ci", repository: repository.configuration.coordinate, number: pr.number, revision: pr.desiredRevision,
85
+ message: "CI checks could not be read; review admission remains closed.", error, retryAt: admission.nextCheckAt });
86
+ }
87
+ };
88
+ const cancelIneligible = () => {
89
+ for (const [prKey, reservation] of reservations) {
90
+ if (reservation.kind !== "review" || reservation.reviewId === undefined)
91
+ continue;
92
+ const review = store.getReview(reservation.reviewId);
93
+ const pr = store.getPullRequest(review);
94
+ if (pr.state !== "open" || pr.draft)
95
+ reservation.controller.abort(new Error(`PR ${pr.number} is ${pr.state !== "open" ? pr.state : "Draft"}.`));
96
+ if (blocked.has(prKey))
97
+ reservation.controller.abort(new Error("The PR has unresolved operations."));
98
+ }
99
+ for (const review of store.listActiveReviews()) {
100
+ if (review.status !== "retry_wait" || reservations.has(key(review)) || blocked.has(key(review)))
101
+ continue;
102
+ if (!isCurrent(review, store.getPullRequest(review))) {
103
+ store.supersedeReview(review.id, stopped, now());
104
+ report(review, "superseded", "The waiting review was replaced by the latest observed PR state.");
105
+ }
106
+ }
107
+ };
108
+ for (const pr of store.listCleanupCandidates()) {
109
+ try {
110
+ await processes.recover();
111
+ }
112
+ catch (error) {
113
+ const retainedRepository = store.getRepository(pr);
114
+ blocked.add(key(pr));
115
+ safeToReleaseLock = false;
116
+ log({ level: "error", phase: "recovery", repository: retainedRepository.remote, number: pr.number,
117
+ message: "The PR's cleanup and worktree reuse are blocked until its previous operations and processes are explicitly excluded.", error });
118
+ }
119
+ }
120
+ // Persist uncertainty before requesting the runtime's explicit startup recovery proof.
121
+ for (const review of store.listActiveReviews()) {
122
+ if (review.status === "retry_wait")
123
+ continue;
124
+ const interrupted = store.markInterrupted(review.id, "A previous coordinator stopped before this operation was resolved.", now());
125
+ try {
126
+ const proof = await processes.recover(interrupted);
127
+ const recoveredAt = now();
128
+ const recovered = store.resolveInterrupted(interrupted.id, proof, recoveredAt, recoveredAt);
129
+ report(recovered, "recovery", "Previous processes and operations were excluded; the persisted target may be reconciled.");
130
+ }
131
+ catch (error) {
132
+ interrupt(interrupted, error);
133
+ }
134
+ }
135
+ const poll = async (repository) => {
136
+ try {
137
+ if (repository.local === null) {
138
+ repository.local = await git.ensureRepository(repository.configuration, signal);
139
+ const existing = localRepositories.get(repositoryKey(repository.local.repository));
140
+ if (existing !== undefined && existing !== repository) {
141
+ repository.blocked = true;
142
+ throw new Error(`Configured repository ${repository.configuration.coordinate} resolves to the same GitHub repository as ${existing.configuration.coordinate}.`);
143
+ }
144
+ localRepositories.set(repositoryKey(repository.local.repository), repository);
145
+ log({ level: "info", phase: "repository", repository: repository.configuration.coordinate, message: "The dedicated review clone is ready." });
146
+ }
147
+ const previous = store.getRepository(repository.local.repository);
148
+ const pollingClient = { ...client, resolveRepository: async (input, abortSignal) => {
149
+ const resolved = await client.resolveRepository(input, abortSignal);
150
+ if (repositoryKey(resolved) !== repositoryKey(repository.local.repository)) {
151
+ repository.blocked = true;
152
+ throw new Error(`Configured repository ${repository.configuration.coordinate} changed its stable GitHub identity after clone validation.`);
153
+ }
154
+ return resolved;
155
+ } };
156
+ const observed = await pollRepository(store, repository.configuration, pollingClient, { now, signal });
157
+ if (previous === null || previous.startPrNumber === null)
158
+ log({ level: "info", phase: "initialize", repository: repository.configuration.coordinate,
159
+ message: `Permanently excluding PR numbers through ${observed.startPrNumber}.` });
160
+ cancelIneligible();
161
+ repository.nextPollAt = now() + configuration.pollIntervalMs;
162
+ }
163
+ catch (error) {
164
+ if (uncertainGit(error)) {
165
+ repository.blocked = true;
166
+ safeToReleaseLock = false;
167
+ }
168
+ const retryAt = Math.max(now() + configuration.pollIntervalMs, error instanceof GitHubApiError && error.retryAt !== null ? error.retryAt : 0);
169
+ repository.nextPollAt = retryAt;
170
+ if (!signal.aborted || uncertainGit(error))
171
+ log({ level: "error", phase: "poll", repository: repository.configuration.coordinate,
172
+ message: repository.blocked ? "Repository preparation is blocked and requires intervention." : "Repository polling failed; the previous complete observation remains in effect.", error, retryAt });
173
+ }
174
+ };
175
+ const endAttempt = async (review, outcome, error, aborted) => {
176
+ let proof;
177
+ try {
178
+ proof = await processes.exclude(review, outcome);
179
+ }
180
+ catch (exclusionError) {
181
+ interrupt(review, new AggregateError(error === undefined ? [exclusionError] : [error, exclusionError], "Agent processes could not be excluded."));
182
+ return;
183
+ }
184
+ const time = now();
185
+ if (outcome?.completed === true && !aborted) {
186
+ const completed = store.completeReview(outcome.attempt, proof, time);
187
+ report(completed, "completed", "The exact completion marker was accepted after all managed agent processes stopped.");
188
+ return;
189
+ }
190
+ const reason = error === undefined ? new Error(`Copilot review did not complete: exit=${outcome?.exitCode}, signal=${outcome?.signal}, interruption=${outcome?.interruption}; ${outcome?.errors.map(message).join("; ")}`) : error;
191
+ const retryAt = time + retryDelay(configuration, review.attemptCount);
192
+ let ended;
193
+ if (aborted) {
194
+ store.markInterrupted(review.id, message(reason), time);
195
+ ended = store.resolveInterrupted(review.id, { ...proof, ...stopped }, retryAt, time);
196
+ }
197
+ else
198
+ ended = store.retryReview({ reviewId: review.id, attempt: review.attemptCount }, proof, { error: message(reason), retryAt }, time);
199
+ report(ended, ended.status, ended.status === "failed" ? "The captured revision exhausted its attempt budget and remains suppressed." : "The incomplete attempt was retained for reconciliation or superseded by the latest target.", reason, ended.retryAt === null ? undefined : ended.retryAt);
200
+ };
201
+ const reviewPullRequest = async (repository, review, reservation) => {
202
+ try {
203
+ const local = repository.local;
204
+ const worktree = await git.prepareWorktree(store, local, review.id, excluded, reservation.controller.signal);
205
+ if (worktree.kind === "changed") {
206
+ store.supersedeReview(review.id, stopped, now());
207
+ report(review, "superseded", "The PR target changed while its worktree was being prepared.");
208
+ return;
209
+ }
210
+ reservation.controller.signal.throwIfAborted();
211
+ const observation = await client.getPullRequest(local.repository, review.number, reservation.controller.signal);
212
+ const pr = store.observePullRequest(local.repository, observation, now());
213
+ cancelIneligible();
214
+ if (!isCurrent(store.getReview(review.id), pr)) {
215
+ store.supersedeReview(review.id, stopped, now());
216
+ report(review, "superseded", "The captured target is no longer ready immediately before agent launch.");
217
+ return;
218
+ }
219
+ let checks;
220
+ try {
221
+ checks = await client.getPullRequestChecks(local.repository, review.number, reservation.controller.signal);
222
+ }
223
+ catch (error) {
224
+ reservation.controller.signal.throwIfAborted();
225
+ const time = now();
226
+ const deferred = store.deferPreparation(review.id, stopped, { error: message(error), retryAt: checksRetryAt(error) }, time);
227
+ report(deferred, "ci", "CI checks could not be revalidated before agent launch; no agent attempt was consumed.", error, deferred.retryAt === null ? undefined : deferred.retryAt);
228
+ return;
229
+ }
230
+ reservation.controller.signal.throwIfAborted();
231
+ if (!isCurrent(store.getReview(review.id), store.getPullRequest(review))) {
232
+ store.supersedeReview(review.id, stopped, now());
233
+ report(review, "superseded", "The PR target changed while its CI checks were being revalidated.");
234
+ return;
235
+ }
236
+ if (!checks.ready || checks.headSha !== review.headSha || checks.baseRef !== review.baseRef) {
237
+ const time = now();
238
+ const deferred = store.deferPreparation(review.id, stopped, { error: "The captured PR target no longer has passing CI checks.", retryAt: checksRetryAt() }, time);
239
+ report(deferred, "ci", "The PR is waiting for passing CI checks before agent launch; no agent attempt was consumed.", undefined, deferred.retryAt === null ? undefined : deferred.retryAt);
240
+ return;
241
+ }
242
+ const previous = store.listReviews(review).filter((item) => item.id !== review.id && item.status !== "completed").at(-1);
243
+ const input = { signal: reservation.controller.signal, onProcess: processes.onProcess, stopProcess: processes.stop,
244
+ ...(previous === undefined ? {} : { previousReview: previous }) };
245
+ report(review, "launch", "Launching the PR's persisted Copilot session.");
246
+ const outcome = await runner.run(store, review.id, worktree, input);
247
+ const current = store.getReview(review.id);
248
+ await endAttempt(current, outcome, undefined, reservation.controller.signal.aborted);
249
+ }
250
+ catch (error) {
251
+ const current = store.getReview(review.id);
252
+ if (uncertainGit(error)) {
253
+ interrupt(current, error);
254
+ return;
255
+ }
256
+ if (current.status === "running") {
257
+ await endAttempt(current, undefined, error, reservation.controller.signal.aborted);
258
+ return;
259
+ }
260
+ if (current.status !== "preparing")
261
+ throw error;
262
+ const time = now();
263
+ const retryAt = time + retryDelay(configuration, current.attemptCount);
264
+ const deferred = store.deferPreparation(current.id, stopped, { error: message(error), retryAt }, time);
265
+ report(deferred, "preparation", "Worktree or agent preparation stopped; no additional agent attempt was consumed.", error, deferred.retryAt === null ? undefined : deferred.retryAt);
266
+ }
267
+ };
268
+ const cleanup = async (repository, pr, reservation) => {
269
+ try {
270
+ const outcome = await git.cleanupWorktree(store, repository.local, pr, { ...excluded, ...stopped }, reservation.controller.signal);
271
+ cleanupRetryAt.delete(key(pr));
272
+ log({ level: "info", phase: "cleanup", repository: repository.configuration.coordinate, number: pr.number,
273
+ message: outcome.kind === "cleaned" ? "The closed PR's worktree was removed." : "The PR reopened; its worktree is retained for the next review." });
274
+ }
275
+ catch (error) {
276
+ if (uncertainGit(error)) {
277
+ blocked.add(key(pr));
278
+ safeToReleaseLock = false;
279
+ }
280
+ const retryAt = now() + configuration.retryDelayMs;
281
+ cleanupRetryAt.set(key(pr), retryAt);
282
+ log({ level: "error", phase: "cleanup", repository: repository.configuration.coordinate, number: pr.number,
283
+ message: blocked.has(key(pr)) ? "Cleanup has an uncertain Git outcome and is blocked." : "Worktree cleanup failed and remains pending.", error, retryAt });
284
+ }
285
+ };
286
+ const abort = () => { for (const reservation of reservations.values())
287
+ reservation.controller.abort(signal.reason); notify(); };
288
+ signal.addEventListener("abort", abort, { once: true });
289
+ try {
290
+ while (!signal.aborted) {
291
+ const time = now();
292
+ cancelIneligible();
293
+ for (const repository of repositories) {
294
+ if (signal.aborted)
295
+ break;
296
+ if (repository.polling || repository.blocked || repository.nextPollAt > time)
297
+ continue;
298
+ repository.polling = true;
299
+ track(() => poll(repository), () => { repository.polling = false; });
300
+ }
301
+ for (const pr of store.listCleanupCandidates()) {
302
+ if (signal.aborted)
303
+ break;
304
+ const prKey = key(pr);
305
+ const repository = localRepositories.get(repositoryKey(pr));
306
+ if (repository === undefined || repository.blocked || reservations.has(prKey) || blocked.has(prKey) || (cleanupRetryAt.get(prKey) ?? 0) > time)
307
+ continue;
308
+ const reservation = { kind: "cleanup", controller: new AbortController() };
309
+ reservations.set(prKey, reservation);
310
+ track(() => cleanup(repository, pr, reservation), () => { reservations.delete(prKey); });
311
+ }
312
+ const eligible = new Set();
313
+ for (const candidate of store.listCandidates(time)) {
314
+ const pr = candidate.pullRequest;
315
+ const prKey = key(pr);
316
+ const repository = localRepositories.get(repositoryKey(pr));
317
+ if (repository === undefined || repository.blocked || reservations.has(prKey) || blocked.has(prKey))
318
+ continue;
319
+ eligible.add(prKey);
320
+ // Updating a waiting target keeps its queue position; successors rejoin after admission.
321
+ waiting.set(prKey, candidate);
322
+ }
323
+ for (const prKey of waiting.keys())
324
+ if (!eligible.has(prKey)) {
325
+ waiting.delete(prKey);
326
+ checkAdmissions.delete(prKey);
327
+ }
328
+ for (const [prKey, candidate] of waiting) {
329
+ if (signal.aborted || workers >= configuration.maxConcurrentWorker)
330
+ break;
331
+ const pr = candidate.pullRequest;
332
+ const repository = localRepositories.get(repositoryKey(pr));
333
+ let admission = checkAdmissions.get(prKey);
334
+ if (admission === undefined || admission.target !== target(pr)) {
335
+ admission = { target: target(pr), checking: false, ready: false, nextCheckAt: 0, reported: false };
336
+ checkAdmissions.set(prKey, admission);
337
+ }
338
+ if (!admission.checking && admission.nextCheckAt <= time) {
339
+ const checking = admission;
340
+ checking.checking = true;
341
+ checking.ready = false;
342
+ track(() => checkCandidate(repository, pr, checking), () => { checking.checking = false; });
343
+ }
344
+ if (admission.checking || !admission.ready)
345
+ continue;
346
+ waiting.delete(prKey);
347
+ checkAdmissions.delete(prKey);
348
+ const review = store.reserveReview(pr, { reviewId: randomUUID(), sessionId: randomUUID(), maxAttempts: configuration.maxAttempts }, time);
349
+ if (review === null)
350
+ continue;
351
+ const reservation = { kind: "review", controller: new AbortController(), reviewId: review.id };
352
+ reservations.set(prKey, reservation);
353
+ workers++;
354
+ report(review, "reserved", "Reserved this PR across worktree preparation and agent execution.");
355
+ track(() => reviewPullRequest(repository, review, reservation), () => { reservations.delete(prKey); workers--; });
356
+ }
357
+ const deadlines = repositories.filter((repository) => !repository.polling && !repository.blocked).map((repository) => repository.nextPollAt);
358
+ if (workers < configuration.maxConcurrentWorker)
359
+ for (const review of store.listActiveReviews()) {
360
+ if (review.status === "retry_wait" && review.retryAt !== null && review.retryAt > now() && !blocked.has(key(review)))
361
+ deadlines.push(review.retryAt);
362
+ }
363
+ if (workers < configuration.maxConcurrentWorker)
364
+ for (const admission of checkAdmissions.values()) {
365
+ if (!admission.checking)
366
+ deadlines.push(admission.nextCheckAt);
367
+ }
368
+ for (const [prKey, deadline] of cleanupRetryAt)
369
+ if (!blocked.has(prKey) && deadline > now())
370
+ deadlines.push(deadline);
371
+ const delay = deadlines.length === 0 ? 2_147_483_647 : Math.min(2_147_483_647, Math.max(0, Math.min(...deadlines) - now()));
372
+ await new Promise((resolve) => {
373
+ const timer = setTimeout(() => { wake = undefined; resolve(); }, delay);
374
+ wake = () => { clearTimeout(timer); wake = undefined; resolve(); };
375
+ if (signal.aborted)
376
+ wake();
377
+ });
378
+ // Completed polls can wake only microtasks when their next deadline is already due.
379
+ await setImmediate();
380
+ }
381
+ }
382
+ finally {
383
+ lifetime.abort(new Error("The coordinator is stopping."));
384
+ abort();
385
+ signal.removeEventListener("abort", abort);
386
+ await Promise.all(pending);
387
+ }
388
+ return { safeToReleaseLock };
389
+ };
390
+ //# sourceMappingURL=coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../src/coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { ChildProcess } from "node:child_process";
2
+ import type { PreparedWorktree } from "./git.js";
3
+ import type { RuntimePaths } from "./paths.js";
4
+ import type { AttemptIdentity, ReviewState, Store } from "./store.js";
5
+ export type PreviousReview = Pick<ReviewState, "id" | "revision" | "headSha" | "baseRef">;
6
+ export type CopilotAttemptOutcome = {
7
+ attempt: AttemptIdentity;
8
+ sessionId: string;
9
+ sessionMode: "create" | "resume";
10
+ stdoutLogPath: string;
11
+ stderrLogPath: string;
12
+ completed: boolean;
13
+ directProcessClosed: boolean;
14
+ captureComplete: boolean;
15
+ exitCode: number | null;
16
+ signal: NodeJS.Signals | null;
17
+ lastNonemptyLine: string | null;
18
+ interruption: "aborted" | "timeout" | null;
19
+ launchFailure: "command-not-found" | null;
20
+ errors: Error[];
21
+ };
22
+ export type CopilotRunnerOptions = {
23
+ paths: RuntimePaths;
24
+ processOwner: string;
25
+ timeoutMs: number;
26
+ terminationGraceMs?: number;
27
+ maxLineCharacters?: number;
28
+ now?: () => number;
29
+ environment?: NodeJS.ProcessEnv;
30
+ command?: {
31
+ file: string;
32
+ args?: readonly string[];
33
+ };
34
+ };
35
+ export type CopilotRunOptions = {
36
+ signal?: AbortSignal;
37
+ previousReview?: PreviousReview;
38
+ onProcess?: (child: ChildProcess, attempt: AttemptIdentity) => void;
39
+ stopProcess?: (child: ChildProcess, attempt: AttemptIdentity) => Promise<void>;
40
+ };
41
+ /** Runs one persisted attempt; the caller retains scheduling, final state transitions, and descendant-process exclusion. */
42
+ export declare const createCopilotRunner: (options: CopilotRunnerOptions) => {
43
+ run: (store: Store, reviewId: string, worktree: PreparedWorktree, input?: CopilotRunOptions) => Promise<CopilotAttemptOutcome>;
44
+ };