@codetreker/daynight 0.21.9 → 0.21.11

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 (72) hide show
  1. package/README.md +204 -27
  2. package/dist/api/client.d.ts +3 -1
  3. package/dist/api/client.js +12 -1
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/parse.d.ts +2 -1
  6. package/dist/api/parse.js +8 -0
  7. package/dist/api/parse.js.map +1 -1
  8. package/dist/api/types.d.ts +7 -0
  9. package/dist/cli/commands.js +2 -0
  10. package/dist/cli/commands.js.map +1 -1
  11. package/dist/commands/worker/cleanup.d.ts +6 -0
  12. package/dist/commands/worker/cleanup.js +173 -0
  13. package/dist/commands/worker/cleanup.js.map +1 -0
  14. package/dist/commands/worker/config.d.ts +21 -0
  15. package/dist/commands/worker/config.js +144 -0
  16. package/dist/commands/worker/config.js.map +1 -0
  17. package/dist/commands/worker/coordinator.d.ts +34 -0
  18. package/dist/commands/worker/coordinator.js +508 -0
  19. package/dist/commands/worker/coordinator.js.map +1 -0
  20. package/dist/commands/worker/definition.d.ts +2 -0
  21. package/dist/commands/worker/definition.js +14 -0
  22. package/dist/commands/worker/definition.js.map +1 -0
  23. package/dist/commands/worker/diagnostics.d.ts +20 -0
  24. package/dist/commands/worker/diagnostics.js +56 -0
  25. package/dist/commands/worker/diagnostics.js.map +1 -0
  26. package/dist/commands/worker/execution.d.ts +41 -0
  27. package/dist/commands/worker/execution.js +255 -0
  28. package/dist/commands/worker/execution.js.map +1 -0
  29. package/dist/commands/worker/herdr/agents.d.ts +185 -0
  30. package/dist/commands/worker/herdr/agents.js +654 -0
  31. package/dist/commands/worker/herdr/agents.js.map +1 -0
  32. package/dist/commands/worker/herdr/arguments.d.ts +8 -0
  33. package/dist/commands/worker/herdr/arguments.js +58 -0
  34. package/dist/commands/worker/herdr/arguments.js.map +1 -0
  35. package/dist/commands/worker/herdr/command.d.ts +22 -0
  36. package/dist/commands/worker/herdr/command.js +115 -0
  37. package/dist/commands/worker/herdr/command.js.map +1 -0
  38. package/dist/commands/worker/herdr/instance.d.ts +56 -0
  39. package/dist/commands/worker/herdr/instance.js +322 -0
  40. package/dist/commands/worker/herdr/instance.js.map +1 -0
  41. package/dist/commands/worker/herdr/preflight.d.ts +40 -0
  42. package/dist/commands/worker/herdr/preflight.js +251 -0
  43. package/dist/commands/worker/herdr/preflight.js.map +1 -0
  44. package/dist/commands/worker/herdr/rpc.d.ts +29 -0
  45. package/dist/commands/worker/herdr/rpc.js +186 -0
  46. package/dist/commands/worker/herdr/rpc.js.map +1 -0
  47. package/dist/commands/worker/herdr.d.ts +95 -0
  48. package/dist/commands/worker/herdr.js +35 -0
  49. package/dist/commands/worker/herdr.js.map +1 -0
  50. package/dist/commands/worker/index.d.ts +10 -0
  51. package/dist/commands/worker/index.js +14 -0
  52. package/dist/commands/worker/index.js.map +1 -0
  53. package/dist/commands/worker/prompts.d.ts +4 -0
  54. package/dist/commands/worker/prompts.js +64 -0
  55. package/dist/commands/worker/prompts.js.map +1 -0
  56. package/dist/commands/worker/remote.d.ts +18 -0
  57. package/dist/commands/worker/remote.js +134 -0
  58. package/dist/commands/worker/remote.js.map +1 -0
  59. package/dist/commands/worker/runtime.d.ts +8 -0
  60. package/dist/commands/worker/runtime.js +246 -0
  61. package/dist/commands/worker/runtime.js.map +1 -0
  62. package/dist/commands/worker/store.d.ts +55 -5
  63. package/dist/commands/worker/store.js +381 -26
  64. package/dist/commands/worker/store.js.map +1 -1
  65. package/dist/commands/worker/types.d.ts +37 -1
  66. package/dist/commands/worker/worktrees.d.ts +1 -0
  67. package/dist/commands/worker/worktrees.js +9 -0
  68. package/dist/commands/worker/worktrees.js.map +1 -1
  69. package/dist/config/document.d.ts +1 -1
  70. package/dist/config/document.js +1 -0
  71. package/dist/config/document.js.map +1 -1
  72. package/package.json +2 -2
@@ -0,0 +1,508 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import path from "node:path";
3
+ import { lstat } from "node:fs/promises";
4
+ import { ApiError } from "../../api/client.js";
5
+ import { resolvePhysicalDirectory } from "../../platform/filesystem.js";
6
+ import { createCleanupDriver } from "./cleanup.js";
7
+ import { createExecutionDriver, isWorkerCancellation, ownedWorkspace, workerOperation } from "./execution.js";
8
+ import { HerdrAgentActionError } from "./herdr.js";
9
+ import { isUnstartedPending } from "./store.js";
10
+ const claimKey = (task) => `${task.serverOrigin}/${task.projectId}/${task.taskId}/${task.claimId}`;
11
+ const taskKey = (task) => `${task.serverOrigin}/${task.projectId}/${task.taskId}`;
12
+ const errorText = (error) => error instanceof Error ? error.message : String(error);
13
+ const same = (left, right) => JSON.stringify(left) === JSON.stringify(right);
14
+ const exists = async (target) => {
15
+ try {
16
+ await lstat(target);
17
+ return true;
18
+ }
19
+ catch (error) {
20
+ if (error instanceof Error && "code" in error && error.code === "ENOENT")
21
+ return false;
22
+ throw error;
23
+ }
24
+ };
25
+ const physicalPath = async (target) => {
26
+ const resolved = await resolvePhysicalDirectory(target);
27
+ return path.join(resolved.ancestorPath, ...resolved.missingComponents);
28
+ };
29
+ const sleep = (milliseconds) => new Promise((resolve) => { setTimeout(resolve, milliseconds); });
30
+ const unknownUserScope = "The original authenticated execution owner is unknown; only an exact current own claim can establish it.";
31
+ const changedUserScope = "The current authenticated user does not match the original execution owner.";
32
+ const unscopedCleanup = "The original authenticated owner of this committed cleanup is unknown; cleanup remains paused.";
33
+ const scopePauseReasons = new Set([unknownUserScope, changedUserScope, unscopedCleanup]);
34
+ const removalBoundary = (task) => ({ control: task.control !== null, terminal: task.cleanup?.kind === "terminal", deleted: task.cleanup?.worktreeDeleted === true, done: task.status === "done" });
35
+ const unsettledRemoval = (task) => (task.control !== null || task.cleanup?.kind === "terminal") && task.cleanup?.worktreeDeleted !== true;
36
+ export const createWorkerCoordinator = (options) => {
37
+ const now = options.now === undefined ? Date.now : options.now;
38
+ const deps = { store: options.store, git: options.git, herdr: options.herdr, platform: options.platform, buildPrompt: options.buildPrompt, emit: options.emit, now };
39
+ const execution = createExecutionDriver(deps);
40
+ const cleanup = createCleanupDriver(deps);
41
+ const normalSignal = options.signal === undefined ? new AbortController().signal : options.signal;
42
+ const tails = new Map();
43
+ let nextRepository = 0;
44
+ let shuttingDown = false;
45
+ let ticking = false;
46
+ const serializeTask = async (identity, action) => {
47
+ const key = taskKey(identity);
48
+ const previous = tails.get(key) ?? Promise.resolve();
49
+ let release;
50
+ const gate = new Promise((resolve) => { release = resolve; });
51
+ const tail = previous.then(() => gate);
52
+ tails.set(key, tail);
53
+ await previous;
54
+ try {
55
+ return await action();
56
+ }
57
+ finally {
58
+ release();
59
+ if (tails.get(key) === tail)
60
+ tails.delete(key);
61
+ }
62
+ };
63
+ const latest = (task) => {
64
+ const result = options.store.getTask(task);
65
+ if (result === null)
66
+ throw new Error("The local execution disappeared.");
67
+ return result;
68
+ };
69
+ const capacity = () => options.store.listUnfinishedTasks().filter((task) => task.status === "active").length;
70
+ const workerLocalTasks = () => options.store.listUnfinishedTasks().filter((task) => task.workerId === options.workerId);
71
+ const currentOriginTasks = () => workerLocalTasks().filter((task) => task.serverOrigin === options.serverOrigin);
72
+ const readResources = async (signal) => {
73
+ const resources = await workerOperation((operation) => options.herdr.tasks.listResources(operation), signal);
74
+ for (const workspace of resources) {
75
+ const task = options.store.getTask(workspace.owner);
76
+ if (task === null || task.status === "done" || task.workerId !== options.workerId || task.worktreeId !== workspace.owner.worktreeId)
77
+ continue;
78
+ if (task.resources.herdr === null && task.nativeExecution?.workspaceSubmission === "not-submitted" && task.nativeExecution.launchSubmission === "never-submitted") {
79
+ const observed = options.store.recordObservedUnattemptedWorkspace({ ...workspace.owner, workerId: options.workerId }, now());
80
+ if (observed !== null)
81
+ options.emit({ kind: "resource-provenance-unknown", task: observed, message: "An existing workspace has no original local creation attempt; native launch provenance requires observation." });
82
+ }
83
+ }
84
+ return resources;
85
+ };
86
+ const pauseForScope = (task, reason) => {
87
+ const originalReason = task.recovery.pauseReason;
88
+ const retainedReason = originalReason !== null && !scopePauseReasons.has(originalReason) ? originalReason : reason;
89
+ if (task.status === "pending" && !isUnstartedPending(task))
90
+ task = options.store.activatePausedRecovery(task, retainedReason, now());
91
+ else if (originalReason !== retainedReason)
92
+ task = options.store.pauseTask(task, retainedReason, now());
93
+ options.emit({ kind: "scope-paused", task, message: reason });
94
+ return task;
95
+ };
96
+ const completeTerminal = (task, absent, authenticatedUserId) => {
97
+ if (task.userId === null)
98
+ return task;
99
+ if (task.cleanup?.kind !== "terminal" || !task.cleanup.agentStopped || !task.cleanup.workspaceClosed || !task.cleanup.worktreeDeleted || task.cleanup.result === null)
100
+ return task;
101
+ if (task.control !== null && task.control.submission !== "confirmed") {
102
+ if (!absent || authenticatedUserId !== task.userId)
103
+ return task;
104
+ task = options.store.confirmControlOwnershipEnded(task, { completeOwnClaimInventory: true, claimAbsent: true }, now());
105
+ }
106
+ return options.store.completeTask(task, now());
107
+ };
108
+ const publishSummary = async (task, remoteTask) => {
109
+ const worker = remoteTask.properties.worker;
110
+ if (worker === null || worker.claimId !== task.claimId || task.cleanup !== null || task.control !== null || task.nativeExecution === null)
111
+ return;
112
+ options.store.reconcileExecutionSummary(task, { version: remoteTask.version.toString(), herdr: worker.herdr, nativeSessionId: worker.nativeSessionId, phase: worker.phase }, now());
113
+ task = latest(task);
114
+ const prior = task.nativeExecution.summary;
115
+ if (prior?.submission === "unknown")
116
+ return;
117
+ const phase = task.recovery.pauseReason !== null ? "paused" : task.nativeExecution.promptSubmission === "submitted" ? "executing" : "preparing";
118
+ const target = { herdr: task.resources.herdr, nativeSessionId: task.resources.nativeSession?.sessionId ?? null, phase };
119
+ if (same(target, { herdr: worker.herdr, nativeSessionId: worker.nativeSessionId, phase: worker.phase }))
120
+ return;
121
+ if (prior?.submission === "rejected" && prior.version === remoteTask.version.toString())
122
+ return;
123
+ options.store.markExecutionSummarySubmitting(task, { ...target, version: remoteTask.version.toString() }, now());
124
+ try {
125
+ await options.remote.update(remoteTask, target, normalSignal);
126
+ options.store.recordExecutionSummaryOutcome(task, remoteTask.version.toString(), "confirmed", now());
127
+ }
128
+ catch (error) {
129
+ if (error instanceof ApiError && !error.outcomeUnconfirmed) {
130
+ if (error.confirmedRefusal)
131
+ options.store.recordExecutionSummaryOutcome(task, remoteTask.version.toString(), "rejected", now());
132
+ else
133
+ options.store.recordExecutionSummaryNotSubmitted(task, remoteTask.version.toString(), { notSubmitted: true }, now());
134
+ }
135
+ options.emit({ kind: "summary-error", task: latest(task), message: "The execution summary was not confirmed; an uncertain write will not be replayed.", error });
136
+ }
137
+ };
138
+ const acknowledgeInventoryClaim = (remoteTask, authenticatedUserId) => {
139
+ const worker = remoteTask.properties.worker;
140
+ const identity = { serverOrigin: options.serverOrigin, projectId: remoteTask.projectId, taskId: remoteTask.id, claimId: worker.claimId, workerId: worker.workerId, worktreeId: worker.worktreeId };
141
+ const present = options.store.getTask(identity);
142
+ const attempt = options.store.getClaimAttempt(identity);
143
+ if (attempt !== null && attempt.claimId === worker.claimId) {
144
+ if (attempt.userId !== authenticatedUserId || worker.userId !== authenticatedUserId)
145
+ throw new Error("The original claim request belongs to another authenticated user; its scope cannot be replaced.");
146
+ if (attempt.taskId !== remoteTask.id || attempt.workerId !== worker.workerId || attempt.worktreeId !== worker.worktreeId || attempt.configuration.agent !== worker.agent)
147
+ throw new Error("The observed grant does not match the original claim request and frozen agent.");
148
+ // An uncleared original request has not crossed the pending commit gate;
149
+ // its absent local row proves this producer has not started resources.
150
+ const fresh = present === null && worker.herdr === null && worker.nativeSessionId === null && worker.phase === "preparing";
151
+ const task = options.store.registerPending(identity, { kind: fresh ? "new" : "recovered", configuration: attempt.configuration }, now(), authenticatedUserId);
152
+ options.emit({ kind: "pending-recovered", task, message: "The original claim grant and saved configuration were committed locally before resource preparation." });
153
+ return;
154
+ }
155
+ if (present !== null) {
156
+ const originalIdentityMatches = present.workerId === worker.workerId && present.worktreeId === worker.worktreeId && (present.configuration === null || present.configuration.agent === worker.agent);
157
+ if (present.userId === null && originalIdentityMatches && present.control === null && present.cleanup?.kind !== "terminal")
158
+ options.store.bindUserScope(present, authenticatedUserId, now());
159
+ }
160
+ };
161
+ const recordRecovered = async (remoteTask, resources, authenticatedUserId) => {
162
+ const worker = remoteTask.properties.worker;
163
+ const identity = { serverOrigin: options.serverOrigin, projectId: remoteTask.projectId, taskId: remoteTask.id, claimId: worker.claimId, workerId: worker.workerId, worktreeId: worker.worktreeId };
164
+ const present = options.store.getTask(identity);
165
+ if (present !== null)
166
+ return present;
167
+ const project = options.store.getProject(identity);
168
+ if (project === null)
169
+ throw new Error(`The original project binding for recovered claim ${worker.claimId} is unavailable.`);
170
+ const runtimeTrace = worker.herdr !== null || worker.nativeSessionId !== null || resources.some(({ owner }) => owner.serverOrigin === identity.serverOrigin && owner.projectId === identity.projectId && owner.taskId === identity.taskId && owner.claimId === identity.claimId);
171
+ const configured = options.repositories.find(({ project: selected }) => selected.serverOrigin === identity.serverOrigin && selected.projectId === identity.projectId);
172
+ // Capture original identities before filesystem reads: cleanup may finish while
173
+ // these reads are in flight, and Git creation may precede the binding commit.
174
+ const predecessors = workerLocalTasks().filter((task) => task.taskId === identity.taskId && claimKey(task) !== claimKey(identity))
175
+ .map((task) => ({ task, worktreePath: task.resources.worktree?.worktreePath ?? path.join(task.repositoryPath, ".worktrees", "daynight", task.taskId) }));
176
+ const fixedPath = path.join(project.localPath, ".worktrees", "daynight", identity.taskId);
177
+ const prospectiveFresh = !runtimeTrace && worker.phase === "preparing";
178
+ const matchingPredecessors = [];
179
+ const deferForRemoval = () => {
180
+ for (const previous of matchingPredecessors) {
181
+ const current = options.store.getTask(previous);
182
+ if (current === null)
183
+ throw new Error("The original predecessor execution record disappeared.");
184
+ if (unsettledRemoval(previous) || unsettledRemoval(current) || !same(removalBoundary(previous), removalBoundary(current))) {
185
+ options.emit({ kind: "handoff-waiting", task: current, message: `New claim ${identity.claimId} in project ${identity.projectId} is waiting for the original worktree removal boundary to settle.` });
186
+ return true;
187
+ }
188
+ }
189
+ return false;
190
+ };
191
+ let pathTrace = await exists(fixedPath);
192
+ if (prospectiveFresh && predecessors.length > 0) {
193
+ const target = await physicalPath(fixedPath);
194
+ for (const { task: previous, worktreePath } of predecessors) {
195
+ try {
196
+ if (await physicalPath(worktreePath) === target)
197
+ matchingPredecessors.push(previous);
198
+ }
199
+ catch (error) {
200
+ if (isWorkerCancellation(error, normalSignal))
201
+ throw error;
202
+ if (error instanceof Error && "code" in error && (error.code === "EACCES" || error.code === "EPERM"))
203
+ throw error;
204
+ options.emit({ kind: "worktree-conflict", task: previous, message: "The original predecessor path could not be inspected.", error });
205
+ }
206
+ }
207
+ if (deferForRemoval())
208
+ return null;
209
+ if (pathTrace)
210
+ for (const previous of matchingPredecessors) {
211
+ try {
212
+ const original = await workerOperation((operation) => options.git.findWorktree(previous, operation), normalSignal);
213
+ pathTrace = original === null ? await exists(fixedPath) : false;
214
+ break;
215
+ }
216
+ catch (error) {
217
+ if (isWorkerCancellation(error, normalSignal))
218
+ throw error;
219
+ if (error instanceof Error && "code" in error && (error.code === "EACCES" || error.code === "EPERM"))
220
+ throw error;
221
+ pathTrace = await exists(fixedPath);
222
+ options.emit({ kind: "worktree-conflict", task: previous, message: "The occupied task path could not be attributed to its previous claim; the new execution remains unverified.", error });
223
+ }
224
+ }
225
+ }
226
+ if (pathTrace)
227
+ pathTrace = await exists(fixedPath);
228
+ // No filesystem await may separate this boundary check from materialization.
229
+ if (prospectiveFresh && deferForRemoval())
230
+ return null;
231
+ const trace = runtimeTrace || pathTrace;
232
+ const configuration = configured?.configuration;
233
+ const fresh = !trace && configuration !== undefined && configuration.agent === worker.agent && worker.phase === "preparing";
234
+ const task = options.store.registerPending(identity, fresh ? { kind: "new", configuration } : { kind: "recovered", configuration: null }, now(), authenticatedUserId);
235
+ options.emit({ kind: fresh ? "pending-recovered" : "recovery-paused", task, message: fresh ? "Recovered the actual remote claim before resource creation and froze its effective configuration." : "Recovered an existing claim without its original frozen configuration; execution is paused." });
236
+ return task;
237
+ };
238
+ const reconcileTask = async (input, remoteTask, resources, authenticatedUserId) => {
239
+ await serializeTask(input, async () => {
240
+ let task = latest(input);
241
+ let currentResources = resources;
242
+ if (task.status === "done")
243
+ return;
244
+ if (task.control !== null || task.cleanup?.kind === "terminal") {
245
+ if (task.userId === null) {
246
+ pauseForScope(task, unscopedCleanup);
247
+ return;
248
+ }
249
+ task = await cleanup.advance(task, resources, "terminal", now() + 600_000, normalSignal);
250
+ completeTerminal(task, remoteTask === undefined, authenticatedUserId);
251
+ return;
252
+ }
253
+ if (task.userId === null || task.userId !== authenticatedUserId) {
254
+ pauseForScope(task, task.userId === null ? unknownUserScope : changedUserScope);
255
+ return;
256
+ }
257
+ if (remoteTask === undefined && isUnstartedPending(task)) {
258
+ if (ownedWorkspace(task, resources) !== undefined)
259
+ throw new Error("The pending execution has unexpected Herdr resources; its unstarted state cannot authorize cleanup completion.");
260
+ task = options.store.completeUnstartedPending(task, { completeOwnClaimInventory: true, claimAbsent: true, authenticatedUserId }, now());
261
+ options.emit({ kind: "done-unstarted", task, message: "The claim ended before activation or resource creation; local responsibility is complete." });
262
+ return;
263
+ }
264
+ if (remoteTask === undefined) {
265
+ task = await cleanup.advance(task, resources, "terminal", now() + 600_000, normalSignal);
266
+ completeTerminal(task, true, authenticatedUserId);
267
+ return;
268
+ }
269
+ if (task.cleanup?.kind === "shutdown") {
270
+ task = await cleanup.advance(task, resources, "shutdown", task.cleanup.deadline, normalSignal);
271
+ if (!task.cleanup.agentStopped || !task.cleanup.workspaceClosed || task.cleanup.result === null)
272
+ return;
273
+ task = options.store.resumeAfterShutdown(task, now());
274
+ currentResources = await readResources(normalSignal);
275
+ }
276
+ const worker = remoteTask.properties.worker;
277
+ if (worker.workerId !== task.workerId || worker.worktreeId !== task.worktreeId || worker.platform !== options.platform || (task.configuration !== null && worker.agent !== task.configuration.agent)) {
278
+ task = options.store.pauseTask(task, "The authoritative claim identity, actual platform or original frozen native kind does not match this execution.", now());
279
+ options.emit({ kind: "paused", task, message: task.recovery.pauseReason });
280
+ return;
281
+ }
282
+ if (task.configuration === null) {
283
+ if (task.status === "pending")
284
+ task = options.store.activatePausedRecovery(task, task.recovery.pauseReason ?? "The original frozen execution configuration is missing.", now());
285
+ options.emit({ kind: "paused", task, message: task.recovery.pauseReason ?? "The original frozen execution configuration is missing." });
286
+ return;
287
+ }
288
+ if (task.recovery.pauseReason !== null && scopePauseReasons.has(task.recovery.pauseReason))
289
+ task = options.store.clearPause(task, now());
290
+ if (task.status === "pending" && task.nativeExecution?.launchSubmission !== "never-submitted")
291
+ task = task.recovery.pauseReason === null
292
+ ? options.store.activateTask(task, now())
293
+ : options.store.activatePausedRecovery(task, task.recovery.pauseReason, now());
294
+ if (task.status === "pending") {
295
+ if (capacity() >= options.maxConcurrent || workerLocalTasks().some((other) => other.status === "active" && other.taskId === task.taskId))
296
+ return;
297
+ task = options.store.activateTask(task, now());
298
+ }
299
+ try {
300
+ task = await execution.advance(task, currentResources, normalSignal);
301
+ }
302
+ catch (error) {
303
+ if (isWorkerCancellation(error, normalSignal))
304
+ throw error;
305
+ if (error instanceof HerdrAgentActionError && error.submission === "unknown" && ["workspace.create", "workspace.close", "tab.create", "pane.close"].includes(error.action)) {
306
+ task = latest(task);
307
+ options.emit({ kind: "resource-unknown", task, message: "A resource mutation has an uncertain outcome; the next complete resource observation will reconcile its original identity.", error });
308
+ }
309
+ else {
310
+ task = options.store.pauseTask(task, errorText(error), now());
311
+ options.emit({ kind: "paused", task, message: "Execution paused with its original resources and capacity retained.", error });
312
+ }
313
+ }
314
+ await publishSummary(latest(task), remoteTask);
315
+ });
316
+ };
317
+ const claimOne = async (repository, resources, authenticatedUserId) => {
318
+ if (options.store.getClaimAttempt(repository.project) !== null) {
319
+ options.emit({ kind: "claim-unknown", message: `Project ${repository.project.projectId} has an unresolved original claim request; no claim is replayed.` });
320
+ return false;
321
+ }
322
+ for await (const candidate of options.remote.candidates(repository.project.projectId, options.platform, normalSignal)) {
323
+ if (shuttingDown || capacity() >= options.maxConcurrent)
324
+ return false;
325
+ if (options.store.listUnfinishedTasks().some((task) => task.serverOrigin === options.serverOrigin && task.projectId === candidate.projectId && task.taskId === candidate.id))
326
+ continue;
327
+ const descriptor = { claimId: randomUUID(), workerId: options.workerId, worktreeId: randomUUID(), machine: options.machine, platform: options.platform, agent: repository.configuration.agent };
328
+ options.store.beginClaimAttempt(repository.project, { taskId: candidate.id, claimId: descriptor.claimId, workerId: options.workerId, worktreeId: descriptor.worktreeId, userId: authenticatedUserId, expectedVersion: candidate.version.toString(), configuration: repository.configuration });
329
+ let granted;
330
+ try {
331
+ granted = await options.remote.claim(candidate, descriptor, normalSignal);
332
+ }
333
+ catch (error) {
334
+ if (error instanceof ApiError && !error.outcomeUnconfirmed) {
335
+ options.store.rejectClaimAttempt(repository.project, descriptor.claimId, error.confirmedRefusal ? { definiteRejection: true } : { notSubmitted: true });
336
+ options.emit({ kind: "claim-rejected", message: `Claim refused for project ${candidate.projectId}, task ${candidate.id}; no resources started.`, error });
337
+ continue;
338
+ }
339
+ options.emit({ kind: "claim-unknown", message: `Claim outcome unknown for project ${candidate.projectId}, task ${candidate.id}, claim ${descriptor.claimId}; the original request is durably fenced.`, error });
340
+ return false;
341
+ }
342
+ const worker = granted.properties.worker;
343
+ if (worker === null || worker.userId !== authenticatedUserId)
344
+ throw new Error("The granted claim does not match the verified authenticated user.");
345
+ const task = options.store.registerPending({ serverOrigin: options.serverOrigin, projectId: granted.projectId, taskId: granted.id, claimId: descriptor.claimId, workerId: options.workerId, worktreeId: descriptor.worktreeId }, { kind: "new", configuration: repository.configuration }, now(), authenticatedUserId);
346
+ options.emit({ kind: "pending", task, message: "Actual remote claim committed locally before activating or creating resources." });
347
+ await reconcileTask(task, granted, resources, authenticatedUserId);
348
+ return true;
349
+ }
350
+ return false;
351
+ };
352
+ return {
353
+ serializeTask,
354
+ advanceCommittedCleanups: async (identity) => {
355
+ if (shuttingDown)
356
+ return;
357
+ normalSignal.throwIfAborted();
358
+ const committed = workerLocalTasks().filter((task) => (task.cleanup !== null || task.control !== null) && (identity === undefined || claimKey(task) === claimKey(identity)));
359
+ const results = await Promise.allSettled(committed.map((input) => serializeTask(input, async () => {
360
+ normalSignal.throwIfAborted();
361
+ let task = latest(input);
362
+ if (task.status === "done" || (task.cleanup === null && task.control === null))
363
+ return;
364
+ if (task.userId === null && (task.control !== null || task.cleanup?.kind === "terminal")) {
365
+ pauseForScope(task, unscopedCleanup);
366
+ return;
367
+ }
368
+ if (task.cleanup?.result !== null && task.cleanup?.agentStopped && task.cleanup.workspaceClosed && (task.cleanup.kind === "shutdown" || task.cleanup.worktreeDeleted)) {
369
+ completeTerminal(task, false);
370
+ return;
371
+ }
372
+ task = options.store.beginCleanup(task, { kind: task.control !== null ? "terminal" : task.cleanup.kind, deadline: task.cleanup?.deadline ?? now() + 600_000 }, now());
373
+ await workerOperation((operation) => options.herdr.ensureInstance(operation), normalSignal);
374
+ const resources = await readResources(normalSignal);
375
+ task = await cleanup.advance(task, resources, task.cleanup.kind, task.cleanup.deadline, normalSignal);
376
+ completeTerminal(task, false);
377
+ })));
378
+ for (let index = 0; index < results.length; index += 1) {
379
+ const result = results[index];
380
+ if (result.status === "rejected" && !normalSignal.aborted) {
381
+ let task = latest(committed[index]);
382
+ if (task.cleanup !== null)
383
+ task = options.store.recordCleanupError(task, errorText(result.reason), now());
384
+ options.emit({ kind: "cleanup-error", task, message: "Committed local cleanup remains active and will continue independently of remote inventory.", error: result.reason });
385
+ }
386
+ }
387
+ normalSignal.throwIfAborted();
388
+ },
389
+ cleanupTask: async (identity, kind = "terminal") => serializeTask(identity, async () => {
390
+ await workerOperation((operation) => options.herdr.ensureInstance(operation));
391
+ const resources = await readResources();
392
+ const task = latest(identity);
393
+ if (task.userId === null && (kind === "terminal" || task.control !== null || task.cleanup?.kind === "terminal"))
394
+ return pauseForScope(task, unscopedCleanup);
395
+ return cleanup.advance(task, resources, kind, now() + 600_000);
396
+ }),
397
+ tick: async () => {
398
+ if (shuttingDown)
399
+ return;
400
+ if (ticking)
401
+ throw new Error("A worker reconciliation is already running.");
402
+ ticking = true;
403
+ try {
404
+ normalSignal.throwIfAborted();
405
+ const authenticatedUserId = await options.remote.currentUserId(normalSignal);
406
+ const projects = options.store.listProjects().filter((project) => project.serverOrigin === options.serverOrigin);
407
+ const inventory = await options.remote.ownInventory(projects, options.workerId, normalSignal);
408
+ if (inventory.some((task) => task.properties.worker === null || task.properties.worker.userId !== authenticatedUserId || task.properties.worker.workerId !== options.workerId))
409
+ throw new Error("The own-claim inventory does not match its verified authenticated user and worker scope.");
410
+ for (const task of inventory)
411
+ acknowledgeInventoryClaim(task, authenticatedUserId);
412
+ const byClaim = new Map(inventory.map((task) => [claimKey({ serverOrigin: options.serverOrigin, projectId: task.projectId, taskId: task.id, claimId: task.properties.worker.claimId }), task]));
413
+ await workerOperation((operation) => options.herdr.ensureInstance(operation), normalSignal);
414
+ let resources = await readResources(normalSignal);
415
+ for (const task of inventory)
416
+ await recordRecovered(task, resources, authenticatedUserId);
417
+ for (const workspace of resources) {
418
+ const owner = workspace.owner;
419
+ if (owner.serverOrigin !== options.serverOrigin || options.store.getTask(owner) !== null)
420
+ continue;
421
+ if (options.store.getProject(owner) === null) {
422
+ options.emit({ kind: "orphan-unattributed", message: `Owned workspace ${workspace.workspaceId} has no persisted project binding; its resources were retained.` });
423
+ continue;
424
+ }
425
+ options.store.registerPending({ ...owner, workerId: options.workerId }, { kind: "recovered", configuration: null }, now(), null);
426
+ }
427
+ const existing = currentOriginTasks().sort((left, right) => Number(right.status === "active") - Number(left.status === "active"));
428
+ for (const task of existing) {
429
+ try {
430
+ await reconcileTask(task, byClaim.get(claimKey(task)), resources, authenticatedUserId);
431
+ }
432
+ catch (error) {
433
+ if (isWorkerCancellation(error, normalSignal))
434
+ throw error;
435
+ options.emit({ kind: "reconciliation-error", task: latest(task), message: "The original execution remains owned locally; reconciliation will preserve its recorded progress.", error });
436
+ }
437
+ }
438
+ resources = await readResources(normalSignal);
439
+ let misses = 0;
440
+ while (!shuttingDown && options.repositories.length > 0 && capacity() < options.maxConcurrent && misses < options.repositories.length) {
441
+ normalSignal.throwIfAborted();
442
+ const repository = options.repositories[nextRepository % options.repositories.length];
443
+ nextRepository = (nextRepository + 1) % options.repositories.length;
444
+ const claimed = await claimOne(repository, resources, authenticatedUserId);
445
+ misses = claimed ? 0 : misses + 1;
446
+ }
447
+ }
448
+ finally {
449
+ ticking = false;
450
+ }
451
+ },
452
+ shutdown: async () => {
453
+ shuttingDown = true;
454
+ await Promise.all([...tails.values()]);
455
+ const tasks = workerLocalTasks();
456
+ const deadline = now() + 600_000;
457
+ const results = await Promise.allSettled(tasks.map((input) => serializeTask(input, async () => {
458
+ let task = latest(input);
459
+ if (task.status === "done")
460
+ return;
461
+ if (isUnstartedPending(task)) {
462
+ await workerOperation((operation) => options.herdr.ensureInstance(operation));
463
+ await readResources();
464
+ task = latest(input);
465
+ if (isUnstartedPending(task))
466
+ return;
467
+ }
468
+ if (task.userId === null && (task.control !== null || task.cleanup?.kind === "terminal")) {
469
+ pauseForScope(task, unscopedCleanup);
470
+ throw new Error(unscopedCleanup);
471
+ }
472
+ task = options.store.beginCleanup(task, { kind: task.control !== null || task.cleanup?.kind === "terminal" ? "terminal" : "shutdown", deadline }, now());
473
+ await workerOperation((operation) => options.herdr.ensureInstance(operation));
474
+ while (true) {
475
+ const resources = await readResources();
476
+ task = await cleanup.advance(task, resources, task.cleanup.kind, task.cleanup.deadline);
477
+ if (task.cleanup.agentStopped && task.cleanup.workspaceClosed) {
478
+ completeTerminal(task, false);
479
+ return;
480
+ }
481
+ await sleep(Math.max(1, Math.min(250, task.cleanup.deadline - now())));
482
+ }
483
+ })));
484
+ let stopped = true;
485
+ for (let index = 0; index < results.length; index += 1) {
486
+ const result = results[index];
487
+ if (result.status === "rejected") {
488
+ stopped = false;
489
+ options.emit({ kind: "shutdown-error", task: latest(tasks[index]), message: "Original agent stop could not be confirmed; its resources were retained.", error: result.reason });
490
+ }
491
+ }
492
+ try {
493
+ await workerOperation((operation) => options.herdr.ensureInstance(operation));
494
+ const remaining = await readResources();
495
+ if (remaining.length > 0) {
496
+ stopped = false;
497
+ options.emit({ kind: "shutdown-error", message: "The private Herdr instance still contains task resources, including any resources without an unfinished local execution; stop cannot be confirmed." });
498
+ }
499
+ }
500
+ catch (error) {
501
+ stopped = false;
502
+ options.emit({ kind: "shutdown-error", message: "The private Herdr instance cannot be inspected; original stop is not confirmed.", error });
503
+ }
504
+ return stopped;
505
+ },
506
+ };
507
+ };
508
+ //# sourceMappingURL=coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../../src/commands/worker/coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CommandDefinition } from "../../cli/schema.js";
2
+ export declare const workerDefinition: CommandDefinition;
@@ -0,0 +1,14 @@
1
+ const help = { names: ["-h", "--help"], description: "Show this help", action: "help" };
2
+ export const workerDefinition = {
3
+ name: "worker",
4
+ description: "Run automatically claimed tasks in dedicated worktrees and Herdr",
5
+ commands: [{
6
+ name: "run",
7
+ description: "Run the foreground task worker until interrupted",
8
+ options: [help],
9
+ details: "Read worker settings from ~/.daynight/config.yml at startup.\nState: ~/.daynight/worker/ (fixed to the current user's home directory).\nCtrl+C stops the original agents while preserving unfinished claims, worktrees and native history.",
10
+ }],
11
+ options: [help],
12
+ details: "Run daynight worker run --help for command usage.",
13
+ };
14
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../src/commands/worker/definition.ts"],"names":[],"mappings":"AAEA,MAAM,IAAI,GAAkB,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAEvG,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,kEAAkE;IAC/E,QAAQ,EAAE,CAAC;YACT,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,kDAAkD;YAC/D,OAAO,EAAE,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,4OAA4O;SACtP,CAAC;IACF,OAAO,EAAE,CAAC,IAAI,CAAC;IACf,OAAO,EAAE,mDAAmD;CAC7D,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { TaskPlatform } from "../../api/types.js";
2
+ import type { WorkerPaths } from "./paths.js";
3
+ import type { LocalTask } from "./types.js";
4
+ export type WorkerDiagnostic = {
5
+ kind: string;
6
+ message: string;
7
+ task?: LocalTask;
8
+ error?: unknown;
9
+ };
10
+ export declare const createWorkerDiagnostics: (options: {
11
+ paths: WorkerPaths;
12
+ workerId: string;
13
+ platform: TaskPlatform;
14
+ log?: (message: string) => void;
15
+ secrets?: readonly string[];
16
+ }) => Promise<{
17
+ emit: (event: WorkerDiagnostic) => void;
18
+ flush: () => Promise<void>;
19
+ filename: string;
20
+ }>;