@codetreker/daynight 0.37.2 → 0.39.0

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 (98) hide show
  1. package/README.md +207 -60
  2. package/dist/api/client.d.ts +8 -3
  3. package/dist/api/client.js +25 -3
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/index.d.ts +1 -0
  6. package/dist/api/index.js +1 -0
  7. package/dist/api/index.js.map +1 -1
  8. package/dist/api/parse.d.ts +2 -2
  9. package/dist/api/parse.js +30 -24
  10. package/dist/api/parse.js.map +1 -1
  11. package/dist/api/task-steps.d.ts +6 -0
  12. package/dist/api/task-steps.js +48 -0
  13. package/dist/api/task-steps.js.map +1 -0
  14. package/dist/api/types.d.ts +29 -9
  15. package/dist/cli/application.js +6 -0
  16. package/dist/cli/application.js.map +1 -1
  17. package/dist/commands/cleanup-operation.d.ts +3 -0
  18. package/dist/commands/cleanup-operation.js +12 -0
  19. package/dist/commands/cleanup-operation.js.map +1 -0
  20. package/dist/commands/controller/provider-display.d.ts +2 -0
  21. package/dist/commands/controller/provider-display.js +63 -0
  22. package/dist/commands/controller/provider-display.js.map +1 -0
  23. package/dist/commands/controller/runtime.js +4 -2
  24. package/dist/commands/controller/runtime.js.map +1 -1
  25. package/dist/commands/skill/skills/using-daynight/SKILL.md +1 -1
  26. package/dist/commands/skill/skills/using-daynight/references/authorization.md +1 -1
  27. package/dist/commands/skill/skills/using-daynight/references/autopilot-managed-task.md +4 -3
  28. package/dist/commands/skill/skills/using-daynight/references/handoff.md +25 -15
  29. package/dist/commands/skill/skills/using-daynight/references/task-management.md +1 -1
  30. package/dist/commands/skill/usage.md +43 -5
  31. package/dist/commands/task/command.js +8 -1
  32. package/dist/commands/task/command.js.map +1 -1
  33. package/dist/commands/task/definition.js +23 -1
  34. package/dist/commands/task/definition.js.map +1 -1
  35. package/dist/commands/task/step-diagnostics.d.ts +6 -0
  36. package/dist/commands/task/step-diagnostics.js +63 -0
  37. package/dist/commands/task/step-diagnostics.js.map +1 -0
  38. package/dist/commands/task/step-rendering.d.ts +5 -0
  39. package/dist/commands/task/step-rendering.js +40 -0
  40. package/dist/commands/task/step-rendering.js.map +1 -0
  41. package/dist/commands/task/step.d.ts +8 -0
  42. package/dist/commands/task/step.js +49 -0
  43. package/dist/commands/task/step.js.map +1 -0
  44. package/dist/commands/worker/backends/grant-renewal.js +1 -1
  45. package/dist/commands/worker/backends/grant-renewal.js.map +1 -1
  46. package/dist/commands/worker/backends/session-api.d.ts +1 -1
  47. package/dist/commands/worker/backends/session-api.js +4 -4
  48. package/dist/commands/worker/backends/session-api.js.map +1 -1
  49. package/dist/commands/worker/backends/sqlite/002-resource-observations.sql +6 -0
  50. package/dist/commands/worker/backends/web-process.js +13 -3
  51. package/dist/commands/worker/backends/web-process.js.map +1 -1
  52. package/dist/commands/worker/backends/web-record.js +2 -18
  53. package/dist/commands/worker/backends/web-record.js.map +1 -1
  54. package/dist/commands/worker/backends/web-store.d.ts +4 -13
  55. package/dist/commands/worker/backends/web-store.js +44 -52
  56. package/dist/commands/worker/backends/web-store.js.map +1 -1
  57. package/dist/commands/worker/backends/web-types.d.ts +0 -13
  58. package/dist/commands/worker/backends/web-types.js +0 -1
  59. package/dist/commands/worker/backends/web-types.js.map +1 -1
  60. package/dist/commands/worker/backends/web.d.ts +5 -1
  61. package/dist/commands/worker/backends/web.js +279 -127
  62. package/dist/commands/worker/backends/web.js.map +1 -1
  63. package/dist/commands/worker/cleanup-error.d.ts +5 -0
  64. package/dist/commands/worker/cleanup-error.js +9 -0
  65. package/dist/commands/worker/cleanup-error.js.map +1 -0
  66. package/dist/commands/worker/cleanup-schedule.d.ts +3 -0
  67. package/dist/commands/worker/cleanup-schedule.js +11 -0
  68. package/dist/commands/worker/cleanup-schedule.js.map +1 -0
  69. package/dist/commands/worker/cleanup.d.ts +1 -3
  70. package/dist/commands/worker/cleanup.js +56 -43
  71. package/dist/commands/worker/cleanup.js.map +1 -1
  72. package/dist/commands/worker/coordinator.js +241 -97
  73. package/dist/commands/worker/coordinator.js.map +1 -1
  74. package/dist/commands/worker/execution.d.ts +1 -1
  75. package/dist/commands/worker/execution.js +2 -2
  76. package/dist/commands/worker/execution.js.map +1 -1
  77. package/dist/commands/worker/prompts.js +2 -2
  78. package/dist/commands/worker/prompts.js.map +1 -1
  79. package/dist/commands/worker/runtime.js +1 -1
  80. package/dist/commands/worker/runtime.js.map +1 -1
  81. package/dist/commands/worker/sqlite/006-cleanup-schedules.sql +14 -0
  82. package/dist/commands/worker/sqlite/007-resource-cleanup-intent.sql +2 -0
  83. package/dist/commands/worker/store.d.ts +5 -1
  84. package/dist/commands/worker/store.js +41 -0
  85. package/dist/commands/worker/store.js.map +1 -1
  86. package/dist/commands/worker/types.d.ts +8 -0
  87. package/dist/commands/worker/worktrees.d.ts +1 -0
  88. package/dist/commands/worker/worktrees.js +88 -34
  89. package/dist/commands/worker/worktrees.js.map +1 -1
  90. package/dist/repository/context.js +2 -3
  91. package/dist/repository/context.js.map +1 -1
  92. package/dist/repository/discovery-error.d.ts +5 -0
  93. package/dist/repository/discovery-error.js +18 -0
  94. package/dist/repository/discovery-error.js.map +1 -0
  95. package/dist/repository/index.d.ts +1 -0
  96. package/dist/repository/index.js +1 -0
  97. package/dist/repository/index.js.map +1 -1
  98. package/package.json +2 -2
@@ -1,5 +1,6 @@
1
+ import { CLEANUP_OPERATION_MS, cleanupOperation } from "../../cleanup-operation.js";
1
2
  import path from "node:path";
2
- import { unlink } from "node:fs/promises";
3
+ import { lstat, unlink } from "node:fs/promises";
3
4
  import { randomUUID } from "node:crypto";
4
5
  import { controllerExecutionDirectory, readLaunchTicket } from "../../controller/launch-ticket.js";
5
6
  import { requestController } from "../../controller/local-client.js";
@@ -7,7 +8,8 @@ import { readControllerOperation, readControllerSnapshot, recordStoppedControlle
7
8
  import { confirmControllerProcessesStopped, stopControllerProcesses } from "../../controller/process-proof.js";
8
9
  import { workerOperation } from "../execution.js";
9
10
  import { workerCleanupPrompt } from "../prompts.js";
10
- import { backendResourcesClosed, taskAgentControlMode } from "./web-types.js";
11
+ import { WorkerCleanupError } from "../cleanup-error.js";
12
+ import { taskAgentControlMode } from "./web-types.js";
11
13
  export const createWebExecutionBackend = (options) => {
12
14
  const request = options.request ?? requestController;
13
15
  const current = (task) => { const latest = options.store.getTask(task); if (latest === null || taskAgentControlMode(latest) !== "web")
@@ -30,157 +32,307 @@ export const createWebExecutionBackend = (options) => {
30
32
  if (!(error instanceof Error && "code" in error && error.code === "ENOENT"))
31
33
  throw error;
32
34
  }
35
+ try {
36
+ await lstat(endpoint);
37
+ }
38
+ catch (error) {
39
+ if (error instanceof Error && "code" in error && error.code === "ENOENT")
40
+ return;
41
+ throw error;
42
+ }
43
+ throw new Error("The original controller endpoint still exists after cleanup.");
44
+ };
45
+ const matchesGeneration = (task, snapshot) => {
46
+ const execution = task.webExecution;
47
+ return snapshot.executionId === execution.executionId && snapshot.claimId === task.claimId && snapshot.sessionId === execution.sessionId
48
+ && snapshot.executionGeneration === execution.executionGeneration && snapshot.controllerInstanceId === execution.controllerInstanceId;
33
49
  };
34
50
  return {
35
51
  advance: async (input, signal) => {
36
52
  let task = current(input);
53
+ if (task.recovery.pauseReason !== null && !task.recovery.retryAuthorized)
54
+ return task;
37
55
  if (task.cleanup !== null || task.control !== null || task.configuration === null)
38
56
  throw new Error("Ordinary Web execution is fenced by cleanup or management.");
39
- if (task.resources.worktree === null)
40
- task = options.store.bindWorktree(task, await workerOperation(operation => options.git.prepareWorktree({ projectId: task.projectId, repoUrl: task.repoUrl, localPath: task.repositoryPath }, task, operation), signal), options.now());
41
- else
42
- await workerOperation(operation => options.git.verifyWorktree({ projectId: task.projectId, repoUrl: task.repoUrl, localPath: task.repositoryPath }, task, operation), signal);
43
- task = options.store.initializeWebExecution(task, options.now());
44
- let ticket = await options.launcher.prepare(task, task.webExecution.initialPrompt ?? options.buildPrompt(task, options.platform), signal);
45
- task = current(task);
46
- await options.launcher.launch(task, ticket, signal);
47
- task = current(task);
48
- let snapshot;
49
- let orderlyRestart = false;
57
+ const retryAttempt = task.recovery.retryAuthorized;
58
+ let recovering = retryAttempt;
59
+ const pause = (error) => options.store.pauseRecovery(task, error instanceof Error ? error.message : String(error), options.now());
60
+ const originalSnapshot = () => {
61
+ const saved = readControllerSnapshot(journal(task)), execution = task.webExecution;
62
+ if (saved === null || saved.executionId !== execution.executionId || saved.claimId !== task.claimId || saved.sessionId !== execution.sessionId || saved.executionGeneration !== execution.executionGeneration || saved.controllerInstanceId !== execution.controllerInstanceId)
63
+ throw new Error("The original controller generation evidence is unavailable.");
64
+ return saved;
65
+ };
50
66
  try {
51
- snapshot = (await request(ticket, { kind: "observe" }, { signal, timeoutMs: 2000 })).snapshot;
52
- }
53
- catch (error) {
54
- const saved = readControllerSnapshot(journal(task));
55
- if (saved !== null)
67
+ if (retryAttempt && task.recovery.pauseReason !== null) {
68
+ // Authorization permits one replacement generation only after proving the old writer stopped.
69
+ if (task.webExecution === null || task.resources.nativeSession === null)
70
+ throw new Error("Web retry requires the original native session identity.");
71
+ if (task.webExecution.launchSubmission === "not-submitted" && BigInt(task.webExecution.executionGeneration) > 1n) {
72
+ // Preparation may fail after allocating a generation but before any writer is launched.
73
+ const previous = readControllerSnapshot(journal(task));
74
+ if (previous === null || previous.controllerProcess === null || previous.lifecycle !== "stopped" || !previous.nativeStopped || previous.stoppedAt === null)
75
+ throw new Error("Unsubmitted recovery requires the original complete stopped generation evidence.");
76
+ if (!await confirmControllerProcessesStopped(previous.controllerProcess, previous.nativeProcesses))
77
+ throw new Error("Unsubmitted recovery requires complete original controller and native process stop.");
78
+ signal.throwIfAborted();
79
+ if (JSON.stringify(readControllerSnapshot(journal(task))) !== JSON.stringify(previous))
80
+ throw new Error("The original stopped generation changed during unsubmitted recovery verification.");
81
+ task = options.store.retryUnsubmittedWebGeneration(task, previous, options.now());
82
+ }
83
+ else {
84
+ const saved = originalSnapshot();
85
+ if (saved.nativeSessionId === null || saved.nativeSessionId !== task.resources.nativeSession.sessionId)
86
+ throw new Error("Web retry requires the original native session identity.");
87
+ task = remember(task, saved);
88
+ const proof = task.webExecution.controllerProcess;
89
+ if (proof === null || !await confirmControllerProcessesStopped(proof, task.webExecution.nativeProcesses))
90
+ throw new Error("Web retry requires complete original controller and native process stop.");
91
+ const ticket = await readLaunchTicket(options.homeDirectory, task.webExecution.launchId);
92
+ const stopped = await recordStoppedControllerGeneration(journal(task), ticket);
93
+ task = options.store.beginWebGeneration(task, stopped, options.now());
94
+ }
95
+ }
96
+ else if (!retryAttempt && task.webExecution !== null && task.webExecution.launchSubmission !== "not-submitted" && task.recovery.count >= task.configuration.recoveryLimit) {
97
+ // Older versions recorded exhaustion without a pause. Inspect before any launch preparation.
98
+ try {
99
+ const saved = originalSnapshot();
100
+ task = remember(task, saved);
101
+ const proof = task.webExecution.controllerProcess;
102
+ if (proof === null)
103
+ throw new Error("The exhausted execution has no complete original process stop evidence.");
104
+ const stopped = await confirmControllerProcessesStopped(proof, task.webExecution.nativeProcesses);
105
+ if (stopped) {
106
+ if (!task.webExecution.restartAfterShutdown || saved.error !== null)
107
+ return pause(new Error("The execution recovery budget is exhausted."));
108
+ }
109
+ else {
110
+ if (["stopped", "stopping", "failed", "paused"].includes(saved.lifecycle))
111
+ throw new Error("The exhausted execution is stopped or failed, but complete original process stop is unproven.");
112
+ const ticket = await readLaunchTicket(options.homeDirectory, task.webExecution.launchId);
113
+ const observed = (await request(ticket, { kind: "observe" }, { signal, timeoutMs: 2000 })).snapshot;
114
+ if (observed.lifecycle !== "ready" && observed.lifecycle !== "working" && observed.lifecycle !== "starting")
115
+ throw new Error(observed.error ?? "The exhausted controller is not healthy.");
116
+ task = remember(task, observed);
117
+ }
118
+ }
119
+ catch (error) {
120
+ signal.throwIfAborted();
121
+ return pause(error);
122
+ }
123
+ }
124
+ if (task.resources.worktree === null)
125
+ task = options.store.bindWorktree(task, await workerOperation(operation => options.git.prepareWorktree({ projectId: task.projectId, repoUrl: task.repoUrl, localPath: task.repositoryPath }, task, operation), signal), options.now());
126
+ else
127
+ await workerOperation(operation => options.git.verifyWorktree({ projectId: task.projectId, repoUrl: task.repoUrl, localPath: task.repositoryPath }, task, operation), signal);
128
+ task = options.store.initializeWebExecution(task, options.now());
129
+ let ticket = await options.launcher.prepare(task, task.webExecution.initialPrompt ?? options.buildPrompt(task, options.platform), signal);
130
+ task = current(task);
131
+ await options.launcher.launch(task, ticket, signal);
132
+ task = current(task);
133
+ let snapshot;
134
+ try {
135
+ snapshot = (await request(ticket, { kind: "observe" }, { signal, timeoutMs: 2000 })).snapshot;
136
+ }
137
+ catch (error) {
138
+ signal.throwIfAborted();
139
+ // A retry never grants a second generation when its first observation fails.
140
+ if (retryAttempt)
141
+ throw error;
142
+ const saved = originalSnapshot();
56
143
  task = remember(task, saved);
57
- const proof = task.webExecution.controllerProcess;
58
- if (proof === null || !await confirmControllerProcessesStopped(proof, task.webExecution.nativeProcesses))
59
- throw new Error("The original controller is unreachable; its native writer may still be alive and will not be replaced.", { cause: error });
60
- if (saved?.nativeSessionId == null)
61
- throw new Error("The stopped native launch has no proven session identity; recovery cannot create another conversation.");
62
- const stopped = await recordStoppedControllerGeneration(journal(task), ticket);
63
- if (task.recovery.pauseReason !== null && !task.recovery.retryAuthorized)
64
- return task;
65
- orderlyRestart = task.webExecution.restartAfterShutdown;
66
- if (!orderlyRestart)
67
- task = options.store.beginRecovery(task, options.now());
68
- task = options.store.beginWebGeneration(task, stopped, options.now());
69
- ticket = await options.launcher.prepare(task, task.webExecution.initialPrompt, signal);
70
- await options.launcher.launch(current(task), ticket, signal);
71
- snapshot = (await request(ticket, { kind: "observe" }, { signal, timeoutMs: 2000 })).snapshot;
144
+ const proof = task.webExecution.controllerProcess;
145
+ if (proof === null || !await confirmControllerProcessesStopped(proof, task.webExecution.nativeProcesses))
146
+ throw new Error("The original controller is unreachable; its native writer may still be alive and will not be replaced.", { cause: error });
147
+ if (saved.nativeSessionId === null)
148
+ throw new Error("The stopped native launch has no proven session identity; recovery cannot create another conversation.");
149
+ const stopped = await recordStoppedControllerGeneration(journal(task), ticket);
150
+ if (!task.webExecution.restartAfterShutdown)
151
+ task = options.store.beginRecovery(task, options.now());
152
+ if (task.recovery.pauseReason !== null)
153
+ return task;
154
+ recovering = true;
155
+ task = options.store.beginWebGeneration(task, stopped, options.now());
156
+ ticket = await options.launcher.prepare(task, task.webExecution.initialPrompt, signal);
157
+ await options.launcher.launch(current(task), ticket, signal);
158
+ snapshot = (await request(ticket, { kind: "observe" }, { signal, timeoutMs: 2000 })).snapshot;
159
+ }
160
+ task = remember(current(task), snapshot);
161
+ if (snapshot.lifecycle === "failed" || snapshot.lifecycle === "paused" || snapshot.lifecycle === "stopped" || snapshot.lifecycle === "stopping") {
162
+ recovering = true;
163
+ throw new Error(snapshot.error ?? "The native controller is paused or stopped.");
164
+ }
165
+ if ((snapshot.lifecycle === "ready" || snapshot.lifecycle === "working") && snapshot.initialInputState === "not_submitted" && BigInt(task.webExecution.executionGeneration) > 1n) {
166
+ recovering = true;
167
+ throw new Error("Recovery cannot resubmit the original managed assignment.");
168
+ }
169
+ if (snapshot.lifecycle === "ready" || snapshot.lifecycle === "working") {
170
+ if (task.recovery.retryAuthorized)
171
+ task = options.store.completeRecoveryRetry(task, snapshot, options.now());
172
+ recovering = false;
173
+ }
174
+ await options.launcher.refreshGrant(task, ticket, signal);
175
+ if (snapshot.lifecycle === "starting")
176
+ return options.store.updateWebExecution(task, { activity: "initializing" }, options.now());
177
+ if (snapshot.initialInputState === "not_submitted") {
178
+ const response = await request(ticket, { kind: "submit_initial", operationId: task.webExecution.initialOperationId }, { signal, timeoutMs: 30000 });
179
+ task = remember(task, response.snapshot);
180
+ }
181
+ options.emit({ kind: "web-observed", task, message: `Original ${ticket.provider} controller generation ${ticket.executionGeneration} is bound to session ${ticket.sessionId}.` });
182
+ return current(task);
72
183
  }
73
- task = remember(current(task), snapshot);
74
- await options.launcher.refreshGrant(task, ticket, signal);
75
- if (snapshot.lifecycle === "starting")
76
- return task;
77
- if (snapshot.lifecycle === "failed" || snapshot.lifecycle === "paused")
78
- throw new Error(snapshot.error ?? "The native controller is paused.");
79
- if (task.recovery.pauseReason !== null && !task.recovery.retryAuthorized)
80
- return task;
81
- if (task.recovery.retryAuthorized && !orderlyRestart)
82
- task = options.store.beginRecovery(task, options.now());
83
- if (snapshot.initialInputState === "not_submitted") {
84
- const response = await request(ticket, { kind: "submit_initial", operationId: task.webExecution.initialOperationId }, { signal, timeoutMs: 30000 });
85
- task = remember(task, response.snapshot);
184
+ catch (error) {
185
+ if (!signal.aborted && (recovering && (retryAttempt || current(task).recovery.count >= task.configuration.recoveryLimit)))
186
+ pause(error);
187
+ throw error;
86
188
  }
87
- options.emit({ kind: "web-observed", task, message: `Original ${ticket.provider} controller generation ${ticket.executionGeneration} is bound to session ${ticket.sessionId}.` });
88
- return current(task);
89
189
  },
90
190
  cleanup: async (input, kind, deadline, signal = new AbortController().signal, immediateStop = false) => {
91
- const startedAt = options.now();
92
- // An elapsed caller deadline has zero remaining budget, including immediate shutdown.
93
- let task = options.store.beginCleanup(current(input), { kind, deadline: Math.max(startedAt, deadline) }, startedAt);
94
- if (task.resources.worktree === null) {
95
- const found = await workerOperation(operation => options.git.findWorktree({ projectId: task.projectId, repoUrl: task.repoUrl, localPath: task.repositoryPath }, task, operation), signal);
96
- if (found !== null)
97
- task = options.store.bindWorktree(task, found, options.now());
98
- }
99
- const execution = task.webExecution;
100
- if (execution == null && task.configuration === null)
101
- throw new Error("The recovered Web claim has no original launch provenance; its native writer and worktree are retained.");
102
- if (!task.cleanup.agentStopped) {
103
- if (execution == null || execution.launchSubmission === "not-submitted") {
104
- task = options.store.recordCleanupInputOutcome(task, "unavailable", options.now());
105
- task = options.store.recordCleanupResult(task, "unavailable", "No controller launch was submitted.", options.now());
106
- task = options.store.confirmAgentStopped(task, { agentStopped: true }, options.now());
107
- task = options.store.confirmBackendResourcesClosed(task, { controllerStopped: true, endpointClosed: true }, options.now());
108
- }
109
- else {
110
- if (execution.ticketPath === null)
111
- throw new Error("The original launch ticket is missing; cleanup retains its unknown native writer.");
112
- const ticket = await readLaunchTicket(options.homeDirectory, execution.launchId);
113
- let response;
191
+ let stage = "observation";
192
+ try {
193
+ const startedAt = options.now();
194
+ let task = current(input);
195
+ if (task.status !== "done" && kind === "shutdown" && task.cleanup === null && task.recovery.retryAuthorized && task.recovery.pauseReason === null)
196
+ task = options.store.pauseRecovery(task, "The explicit recovery attempt stopped before a successful observation.", options.now());
197
+ if (task.status !== "done" && kind === "shutdown" && task.cleanup === null && task.recovery.pauseReason === null && task.configuration !== null && task.recovery.count >= task.configuration.recoveryLimit && task.webExecution !== null && task.webExecution.launchSubmission !== "not-submitted") {
198
+ // Shutdown provenance must not turn an already exhausted writer into a healthy orderly restart.
114
199
  try {
115
- response = await request(ticket, { kind: "observe" }, { signal, timeoutMs: 1000 });
116
- }
117
- catch {
118
200
  const saved = readControllerSnapshot(journal(task));
119
- if (saved !== null)
120
- task = remember(task, saved);
201
+ if (saved === null || !matchesGeneration(task, saved) || saved.controllerProcess === null)
202
+ throw new Error("The exhausted execution has no original generation evidence before shutdown.");
203
+ if (["failed", "paused", "stopped", "stopping"].includes(saved.lifecycle) || await confirmControllerProcessesStopped(saved.controllerProcess, saved.nativeProcesses))
204
+ task = options.store.pauseRecovery(task, "The execution recovery budget is exhausted.", options.now());
121
205
  }
122
- const reachable = response !== undefined;
123
- if (response !== undefined)
124
- task = remember(task, response.snapshot);
125
- const proof = task.webExecution.controllerProcess;
126
- if (proof === null)
127
- throw new Error("The original controller process proof is missing; cleanup cannot infer stop.");
128
- let stopped = await confirmControllerProcessesStopped(proof, task.webExecution.nativeProcesses);
129
- if (!immediateStop && !stopped && task.cleanup.result === null && options.now() < task.cleanup.deadline) {
130
- if (!reachable)
131
- throw new Error("The original controller is unavailable; cleanup retains its fixed deadline and process proof.");
132
- if (task.webExecution.cleanupOperationId === null)
133
- task = options.store.updateWebExecution(task, { cleanupOperationId: randomUUID() }, options.now());
134
- if (task.cleanup.input === "not-submitted") {
135
- task = options.store.markCleanupInputSubmitting(task, options.now());
136
- await request(ticket, { kind: "cleanup", operationId: task.webExecution.cleanupOperationId, prompt: workerCleanupPrompt(task, task.cleanup.deadline), deadline: task.cleanup.deadline }, { signal, timeoutMs: 30000 });
206
+ catch (error) {
207
+ signal.throwIfAborted();
208
+ task = options.store.pauseRecovery(task, error instanceof Error ? error.message : String(error), options.now());
209
+ }
210
+ }
211
+ if (task.status !== "done")
212
+ task = options.store.beginCleanup(task, { kind, deadline: Math.max(startedAt, deadline) }, startedAt);
213
+ const intent = task.cleanup;
214
+ if (intent === null)
215
+ throw new Error("The original cleanup intent is missing.");
216
+ const execution = task.webExecution;
217
+ if (execution === null && task.configuration === null)
218
+ throw new Error("The recovered Web claim has no original launch provenance; its resources are retained.");
219
+ stage = "agent-stop";
220
+ let launched = false;
221
+ if (execution !== null) {
222
+ let saved = readControllerSnapshot(journal(task));
223
+ if (saved !== null && !matchesGeneration(task, saved)) {
224
+ if (execution.launchSubmission !== "not-submitted" || saved.executionId !== execution.executionId || saved.claimId !== task.claimId
225
+ || saved.controllerProcess === null || BigInt(saved.executionGeneration) + 1n !== BigInt(execution.executionGeneration)
226
+ || !await confirmControllerProcessesStopped(saved.controllerProcess, saved.nativeProcesses))
227
+ throw new Error("The original controller generation cannot be identified and stopped from its journal.");
228
+ saved = null;
229
+ }
230
+ launched = saved !== null || execution.launchSubmission !== "not-submitted";
231
+ if (launched) {
232
+ const ticket = await readLaunchTicket(options.homeDirectory, execution.launchId);
233
+ if (ticket.executionId !== execution.executionId || ticket.claimId !== task.claimId || ticket.sessionId !== execution.sessionId
234
+ || ticket.executionGeneration !== execution.executionGeneration || ticket.controllerInstanceId !== execution.controllerInstanceId
235
+ || ticket.worktreeId !== task.worktreeId || ticket.workerId !== task.workerId || ticket.serverOrigin !== task.serverOrigin)
236
+ throw new Error("The cleanup ticket does not identify the original execution.");
237
+ let response;
238
+ try {
239
+ response = await request(ticket, { kind: "observe" }, { signal, timeoutMs: CLEANUP_OPERATION_MS });
137
240
  }
138
- const operation = readControllerOperation(journal(task), task.webExecution.cleanupOperationId);
139
- if (operation?.state === "provider_accepted" || operation?.state === "confirmed") {
140
- if (task.cleanup.input === "unknown")
141
- task = options.store.recordCleanupInputOutcome(task, "submitted", options.now());
142
- if (operation.state === "confirmed")
143
- task = options.store.recordCleanupResult(task, "completed", null, options.now());
241
+ catch (error) {
242
+ signal.throwIfAborted();
243
+ const observed = readControllerSnapshot(journal(task));
244
+ if (observed !== null) {
245
+ if (!matchesGeneration(task, observed))
246
+ throw new Error("The original controller journal belongs to a different generation.", { cause: error });
247
+ saved = observed;
248
+ }
144
249
  }
145
- else if (operation !== null && ["failed", "rejected", "expired"].includes(operation.state))
146
- task = options.store.recordCleanupResult(task, "failed", operation.error, options.now());
147
- if (task.cleanup.result === null)
148
- return task;
149
- }
150
- if (task.cleanup.result === null)
151
- task = options.store.recordCleanupResult(task, stopped || immediateStop ? "unavailable" : "timed-out", stopped || immediateStop ? "Original processes stopped before cleanup completion was established." : "The original cleanup deadline elapsed.", options.now());
152
- if (!stopped) {
153
- if (reachable)
250
+ const reachable = response !== undefined;
251
+ if (response !== undefined) {
252
+ if (!matchesGeneration(task, response.snapshot))
253
+ throw new Error("The observed controller belongs to a different generation.");
254
+ saved = response.snapshot;
255
+ }
256
+ if (saved?.nativeSessionId != null && task.status !== "done")
257
+ task = options.store.bindNativeSession(task, { source: "controller", sessionId: saved.nativeSessionId }, options.now());
258
+ if (saved?.controllerProcess != null && execution.controllerProcess !== null) {
259
+ const original = execution.controllerProcess, observed = saved.controllerProcess;
260
+ if (observed.pid !== original.pid || observed.startedAt !== original.startedAt || observed.commandHash !== original.commandHash
261
+ || observed.processGroupId !== original.processGroupId)
262
+ throw new Error("The original controller process identity conflicts with its journal.");
263
+ }
264
+ const proof = saved?.controllerProcess ?? execution.controllerProcess;
265
+ const native = saved?.nativeProcesses ?? execution.nativeProcesses;
266
+ if (proof === null)
267
+ throw new Error("The original controller process identity is missing; cleanup cannot infer stop.");
268
+ let stopped = await confirmControllerProcessesStopped(proof, native);
269
+ if (!immediateStop && task.status !== "done" && !stopped && options.now() < intent.deadline) {
270
+ if (!reachable)
271
+ throw new Error("The original controller is unavailable; cleanup retains its fixed deadline and process identity.");
272
+ if (task.webExecution.cleanupOperationId === null)
273
+ task = options.store.updateWebExecution(task, { cleanupOperationId: randomUUID() }, options.now());
274
+ const operationId = task.webExecution.cleanupOperationId;
275
+ let operation = readControllerOperation(journal(task), operationId);
276
+ if (operation === null) {
277
+ try {
278
+ await request(ticket, { kind: "cleanup", operationId, prompt: workerCleanupPrompt(task, intent.deadline), deadline: intent.deadline }, { signal, timeoutMs: Math.max(1, Math.min(CLEANUP_OPERATION_MS, intent.deadline - options.now())) });
279
+ }
280
+ catch (error) {
281
+ signal.throwIfAborted();
282
+ operation = readControllerOperation(journal(task), operationId);
283
+ if (operation === null)
284
+ throw error;
285
+ }
286
+ operation = readControllerOperation(journal(task), operationId);
287
+ }
288
+ if (operation !== null && (operation.kind !== "cleanup" || operation.executionGeneration !== execution.executionGeneration))
289
+ throw new Error("The cleanup operation belongs to a different controller generation.");
290
+ if (operation === null || !["confirmed", "failed", "rejected", "expired"].includes(operation.state))
291
+ return { task, complete: false };
292
+ }
293
+ if (!stopped) {
294
+ if (reachable)
295
+ try {
296
+ await request(ticket, { kind: "stop", deadline: options.now() + CLEANUP_OPERATION_MS }, { signal, timeoutMs: CLEANUP_OPERATION_MS });
297
+ }
298
+ catch { /* OS process observation remains authoritative after an IPC loss. */ }
299
+ signal.throwIfAborted();
154
300
  try {
155
- await request(ticket, { kind: "stop", deadline: options.now() + 5000 }, { signal, timeoutMs: 5000 });
301
+ await stopControllerProcesses(proof, native, Date.now() + CLEANUP_OPERATION_MS);
302
+ }
303
+ catch (error) {
304
+ if (!await confirmControllerProcessesStopped(proof, native))
305
+ throw error;
156
306
  }
157
- catch { /* OS process proof remains authoritative after an IPC loss. */ }
158
- await stopControllerProcesses(proof, task.webExecution.nativeProcesses, Date.now() + 5000);
159
- stopped = await confirmControllerProcessesStopped(proof, task.webExecution.nativeProcesses);
307
+ stopped = await confirmControllerProcessesStopped(proof, native);
308
+ }
309
+ if (!stopped)
310
+ throw new Error("The original controller or its native processes still exist.");
311
+ if (saved !== null)
312
+ await recordStoppedControllerGeneration(journal(task), ticket);
313
+ stage = "backend-close";
314
+ await removeEndpoint(ticket.ipcEndpoint);
160
315
  }
161
- if (!stopped)
162
- throw new Error("Complete original controller process stop is not proven.");
163
- await recordStoppedControllerGeneration(journal(task), ticket);
164
- task = options.store.confirmAgentStopped(task, { agentStopped: true }, options.now());
165
- await removeEndpoint(ticket.ipcEndpoint);
166
- task = options.store.confirmBackendResourcesClosed(task, { controllerStopped: true, endpointClosed: true }, options.now());
167
316
  }
168
- }
169
- if (!backendResourcesClosed(task.cleanup))
170
- throw new Error("The original Web backend resources are not closed.");
171
- // Shutdown proves stop but leaves any terminal finalization for normal reconciliation.
172
- if (kind === "shutdown")
173
- return task;
174
- if (task.cleanup.kind === "terminal" && !task.cleanup.worktreeDeleted) {
175
- if (execution && execution.launchSubmission !== "not-submitted") {
317
+ signal.throwIfAborted();
318
+ if (kind === "shutdown")
319
+ return { task, complete: true };
320
+ if (launched) {
321
+ stage = "archive";
176
322
  if (!options.archive)
177
323
  throw new Error("Session archive uploader is unavailable; the original worktree is retained.");
178
324
  await options.archive(task, journal(task), signal);
179
325
  }
180
- await workerOperation(operation => options.git.removeWorktree({ projectId: task.projectId, repoUrl: task.repoUrl, localPath: task.repositoryPath }, task, operation), signal);
181
- task = options.store.confirmWorktreeDeleted(task, { worktreeDeleted: true }, options.now());
326
+ stage = "worktree-removal";
327
+ const project = { projectId: task.projectId, repoUrl: task.repoUrl, localPath: task.repositoryPath };
328
+ await cleanupOperation(operation => options.git.removeWorktree(project, task, operation), signal);
329
+ if (await cleanupOperation(operation => options.git.findWorktree(project, task, operation), signal) !== null)
330
+ throw new Error("The original task still has Git worktree resources after cleanup.");
331
+ return { task, complete: true };
332
+ }
333
+ catch (error) {
334
+ throw new WorkerCleanupError(stage, error);
182
335
  }
183
- return task;
184
336
  },
185
337
  };
186
338
  };
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../../src/commands/worker/backends/web.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,iCAAiC,EAA2B,MAAM,qCAAqC,CAAC;AAClK,OAAO,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAyB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAqC,MAAM,gBAAgB,CAAC;AAUjH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAA0B,EAAE,EAAE;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,iBAAiB,CAAC;IACrD,MAAM,OAAO,GAAG,CAAC,IAAe,EAAa,EAAE,GAAG,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,KAAK,IAAI,IAAI,oBAAoB,CAAC,MAAM,CAAC,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACxO,MAAM,OAAO,GAAG,CAAC,IAAe,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAa,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC9J,MAAM,QAAQ,GAAG,CAAC,KAAgB,EAAE,QAA4B,EAAa,EAAE;QAC7E,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAa,CAAC,iBAAiB,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACjT,IAAI,QAAQ,CAAC,eAAe,KAAK,IAAI;YAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClK,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,cAAc,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE;QAC/D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,OAAO;QACzC,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAAE,MAAM,KAAK,CAAC;QAAC,CAAC;IAC7I,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,KAAgB,EAAE,MAAmB,EAAsB,EAAE;YAC3E,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YACjK,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,IAAI;gBAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;;gBACxQ,MAAM,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;YACnL,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACjE,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAa,CAAC,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3I,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACpD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,QAA4B,CAAC;YACjC,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC;gBAAC,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAC,CAAC;YACtG,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpD,IAAI,KAAK,KAAK,IAAI;oBAAE,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACjD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAa,CAAC,iBAAiB,CAAC;gBACnD,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,iCAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,YAAa,CAAC,eAAe,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,wGAAwG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBACvP,IAAI,KAAK,EAAE,eAAe,IAAI,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,wGAAwG,CAAC,CAAC;gBAC9J,MAAM,OAAO,GAAG,MAAM,iCAAiC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC/E,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe;oBAAE,OAAO,IAAI,CAAC;gBACtF,cAAc,GAAG,IAAI,CAAC,YAAa,CAAC,oBAAoB,CAAC;gBACzD,IAAI,CAAC,cAAc;oBAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC7E,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACtE,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAa,CAAC,aAAc,EAAE,MAAM,CAAC,CAAC;gBACzF,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7D,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YAChG,CAAC;YACD,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;YACzC,MAAM,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1D,IAAI,QAAQ,CAAC,SAAS,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YACnD,IAAI,QAAQ,CAAC,SAAS,KAAK,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,kCAAkC,CAAC,CAAC;YAC9I,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe;gBAAE,OAAO,IAAI,CAAC;YACtF,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,IAAI,CAAC,cAAc;gBAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9G,IAAI,QAAQ,CAAC,iBAAiB,KAAK,eAAe,EAAE,CAAC;gBACnD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,CAAC,YAAa,CAAC,kBAAkB,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBACrJ,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,MAAM,CAAC,QAAQ,0BAA0B,MAAM,CAAC,mBAAmB,wBAAwB,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;YAClL,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAgB,EAAE,IAA0B,EAAE,QAAgB,EAAE,MAAM,GAAgB,IAAI,eAAe,EAAE,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,EAAsB,EAAE;YAC/K,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAChC,sFAAsF;YACtF,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACpH,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAAC,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;gBAAC,IAAI,KAAK,KAAK,IAAI;oBAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC;YACvT,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;YACpC,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC,CAAC;YACjL,IAAI,CAAC,IAAI,CAAC,OAAQ,CAAC,YAAY,EAAE,CAAC;gBAChC,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,gBAAgB,KAAK,eAAe,EAAE,CAAC;oBACxE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBACnF,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,qCAAqC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBACpH,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBACtF,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC7H,CAAC;qBAAM,CAAC;oBACN,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI;wBAAE,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;oBACxI,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;oBACjF,IAAI,QAAyD,CAAC;oBAC9D,IAAI,CAAC;wBAAC,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAAC,CAAC;oBAC3F,MAAM,CAAC;wBAAC,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;wBAAC,IAAI,KAAK,KAAK,IAAI;4BAAE,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAAC,CAAC;oBAChH,MAAM,SAAS,GAAG,QAAQ,KAAK,SAAS,CAAC;oBACzC,IAAI,QAAQ,KAAK,SAAS;wBAAE,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACrE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAa,CAAC,iBAAiB,CAAC;oBACnD,IAAI,KAAK,KAAK,IAAI;wBAAE,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;oBACpH,IAAI,OAAO,GAAG,MAAM,iCAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,YAAa,CAAC,eAAe,CAAC,CAAC;oBACjG,IAAI,CAAC,aAAa,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAQ,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAQ,CAAC,QAAQ,EAAE,CAAC;wBAC1G,IAAI,CAAC,SAAS;4BAAE,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;wBACjI,IAAI,IAAI,CAAC,YAAa,CAAC,kBAAkB,KAAK,IAAI;4BAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;wBACvJ,IAAI,IAAI,CAAC,OAAQ,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;4BAC5C,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;4BACrE,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,YAAa,CAAC,kBAAmB,EAAE,MAAM,EAAE,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;wBAC7N,CAAC;wBACD,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAa,CAAC,kBAAmB,CAAC,CAAC;wBACjG,IAAI,SAAS,EAAE,KAAK,KAAK,mBAAmB,IAAI,SAAS,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;4BACjF,IAAI,IAAI,CAAC,OAAQ,CAAC,KAAK,KAAK,SAAS;gCAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;4BACxH,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW;gCAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;wBACxH,CAAC;6BAAM,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;4BAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;wBACvL,IAAI,IAAI,CAAC,OAAQ,CAAC,MAAM,KAAK,IAAI;4BAAE,OAAO,IAAI,CAAC;oBACjD,CAAC;oBACD,IAAI,IAAI,CAAC,OAAQ,CAAC,MAAM,KAAK,IAAI;wBAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,IAAI,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,IAAI,aAAa,CAAC,CAAC,CAAC,uEAAuE,CAAC,CAAC,CAAC,wCAAwC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBACxS,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,IAAI,SAAS;4BAAE,IAAI,CAAC;gCAAC,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;4BAAC,CAAC;4BAAC,MAAM,CAAC,CAAC,+DAA+D,CAAC,CAAC;wBACtM,MAAM,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAa,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;wBAC5F,OAAO,GAAG,MAAM,iCAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,YAAa,CAAC,eAAe,CAAC,CAAC;oBAC/F,CAAC;oBACD,IAAI,CAAC,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;oBAC1F,MAAM,iCAAiC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC/D,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBACtF,MAAM,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBACzC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC7H,CAAC;YACH,CAAC;YACD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAQ,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAClH,uFAAuF;YACvF,IAAI,IAAI,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YACrC,IAAI,IAAI,CAAC,OAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,OAAQ,CAAC,eAAe,EAAE,CAAC;gBACxE,IAAI,SAAS,IAAI,SAAS,CAAC,gBAAgB,KAAK,eAAe,EAAE,CAAC;oBAChE,IAAI,CAAC,OAAO,CAAC,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;oBACrH,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBACrD,CAAC;gBACD,MAAM,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC9K,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9F,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../../src/commands/worker/backends/web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type WorkerCleanupStage = "observation" | "agent-stop" | "backend-close" | "archive" | "worktree-removal";
2
+ export declare class WorkerCleanupError extends Error {
3
+ readonly stage: WorkerCleanupStage;
4
+ constructor(stage: WorkerCleanupStage, cause: unknown);
5
+ }
@@ -0,0 +1,9 @@
1
+ export class WorkerCleanupError extends Error {
2
+ stage;
3
+ constructor(stage, cause) {
4
+ super(`Worker cleanup ${stage} failed: ${cause instanceof Error ? cause.message : String(cause)}`, { cause });
5
+ this.stage = stage;
6
+ this.name = "WorkerCleanupError";
7
+ }
8
+ }
9
+ //# sourceMappingURL=cleanup-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup-error.js","sourceRoot":"","sources":["../../../src/commands/worker/cleanup-error.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACtB,KAAK;IAA1B,YAAqB,KAAyB,EAAE,KAAc;QAC5D,KAAK,CAAC,kBAAkB,KAAK,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;qBAD3F,KAAK;QAExB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import type { WorkerStore } from "./store.js";
2
+ import type { CleanupScheduleRecord, ResourceOwner } from "./types.js";
3
+ export declare const ensureCleanupSchedule: (store: WorkerStore, owner: ResourceOwner, now: number) => CleanupScheduleRecord;
@@ -0,0 +1,11 @@
1
+ // Retain resource ownership and the original policy deadline across retries.
2
+ export const ensureCleanupSchedule = (store, owner, now) => {
3
+ const previous = store.getCleanupSchedule(owner);
4
+ if (previous !== null) {
5
+ if (previous.worktreeId !== owner.worktreeId)
6
+ throw new Error("The cleanup claim has conflicting worktree identities.");
7
+ return previous;
8
+ }
9
+ return store.saveCleanupSchedule(owner, { deadline: now + 600_000, failures: 0, nextAttemptAt: now, stage: "observation", lastError: null });
10
+ };
11
+ //# sourceMappingURL=cleanup-schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup-schedule.js","sourceRoot":"","sources":["../../../src/commands/worker/cleanup-schedule.ts"],"names":[],"mappings":"AAGA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAkB,EAAE,KAAoB,EAAE,GAAW,EAAyB,EAAE;IACpH,MAAM,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,QAAQ,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxH,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/I,CAAC,CAAC"}
@@ -1,4 +1,3 @@
1
- import type { HerdrOwnedWorkspace } from "./herdr.js";
2
1
  import type { ExecutionDependencies } from "./execution.js";
3
2
  import type { LocalTask, ResourceOwner, WorkerProject } from "./types.js";
4
3
  export type CleanupInput = {
@@ -7,6 +6,5 @@ export type CleanupInput = {
7
6
  task?: LocalTask;
8
7
  };
9
8
  export declare const createCleanupDriver: (deps: Omit<ExecutionDependencies, "readTask">) => {
10
- advance: (input: CleanupInput, resources: readonly HerdrOwnedWorkspace[], deleteWorktree: boolean, signal?: AbortSignal) => Promise<boolean>;
11
- remaining: (owner: ResourceOwner) => number;
9
+ advance: (input: CleanupInput, deleteWorktree: boolean, signal?: AbortSignal) => Promise<void>;
12
10
  };