@codetreker/daynight 0.25.4 → 0.27.2

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 (214) hide show
  1. package/README.md +160 -11
  2. package/config.example.yml +3 -0
  3. package/dist/api/client.d.ts +3 -2
  4. package/dist/api/client.js +10 -6
  5. package/dist/api/client.js.map +1 -1
  6. package/dist/api/parse.d.ts +3 -2
  7. package/dist/api/parse.js +59 -10
  8. package/dist/api/parse.js.map +1 -1
  9. package/dist/api/types.d.ts +75 -1
  10. package/dist/api/worker-mode.d.ts +6 -0
  11. package/dist/api/worker-mode.js +14 -0
  12. package/dist/api/worker-mode.js.map +1 -0
  13. package/dist/cli/commands.js +2 -0
  14. package/dist/cli/commands.js.map +1 -1
  15. package/dist/commands/controller/command-controls.d.ts +4 -0
  16. package/dist/commands/controller/command-controls.js +33 -0
  17. package/dist/commands/controller/command-controls.js.map +1 -0
  18. package/dist/commands/controller/definition.d.ts +3 -0
  19. package/dist/commands/controller/definition.js +22 -0
  20. package/dist/commands/controller/definition.js.map +1 -0
  21. package/dist/commands/controller/independent.d.ts +3 -0
  22. package/dist/commands/controller/independent.js +344 -0
  23. package/dist/commands/controller/independent.js.map +1 -0
  24. package/dist/commands/controller/index.d.ts +12 -0
  25. package/dist/commands/controller/index.js +73 -0
  26. package/dist/commands/controller/index.js.map +1 -0
  27. package/dist/commands/controller/launch-ticket.d.ts +49 -0
  28. package/dist/commands/controller/launch-ticket.js +99 -0
  29. package/dist/commands/controller/launch-ticket.js.map +1 -0
  30. package/dist/commands/controller/lifecycle-store.d.ts +84 -0
  31. package/dist/commands/controller/lifecycle-store.js +278 -0
  32. package/dist/commands/controller/lifecycle-store.js.map +1 -0
  33. package/dist/commands/controller/local-client.d.ts +44 -0
  34. package/dist/commands/controller/local-client.js +75 -0
  35. package/dist/commands/controller/local-client.js.map +1 -0
  36. package/dist/commands/controller/local-content.d.ts +23 -0
  37. package/dist/commands/controller/local-content.js +103 -0
  38. package/dist/commands/controller/local-content.js.map +1 -0
  39. package/dist/commands/controller/process-proof.d.ts +13 -0
  40. package/dist/commands/controller/process-proof.js +121 -0
  41. package/dist/commands/controller/process-proof.js.map +1 -0
  42. package/dist/commands/controller/providers/claude.d.ts +2 -0
  43. package/dist/commands/controller/providers/claude.js +470 -0
  44. package/dist/commands/controller/providers/claude.js.map +1 -0
  45. package/dist/commands/controller/providers/codex.d.ts +2 -0
  46. package/dist/commands/controller/providers/codex.js +254 -0
  47. package/dist/commands/controller/providers/codex.js.map +1 -0
  48. package/dist/commands/controller/providers/controls-claude.d.ts +26 -0
  49. package/dist/commands/controller/providers/controls-claude.js +138 -0
  50. package/dist/commands/controller/providers/controls-claude.js.map +1 -0
  51. package/dist/commands/controller/providers/controls-codex.d.ts +38 -0
  52. package/dist/commands/controller/providers/controls-codex.js +199 -0
  53. package/dist/commands/controller/providers/controls-codex.js.map +1 -0
  54. package/dist/commands/controller/providers/controls-copilot.d.ts +20 -0
  55. package/dist/commands/controller/providers/controls-copilot.js +143 -0
  56. package/dist/commands/controller/providers/controls-copilot.js.map +1 -0
  57. package/dist/commands/controller/providers/controls.d.ts +21 -0
  58. package/dist/commands/controller/providers/controls.js +53 -0
  59. package/dist/commands/controller/providers/controls.js.map +1 -0
  60. package/dist/commands/controller/providers/copilot-interactions.d.ts +47 -0
  61. package/dist/commands/controller/providers/copilot-interactions.js +295 -0
  62. package/dist/commands/controller/providers/copilot-interactions.js.map +1 -0
  63. package/dist/commands/controller/providers/copilot-projection.d.ts +11 -0
  64. package/dist/commands/controller/providers/copilot-projection.js +93 -0
  65. package/dist/commands/controller/providers/copilot-projection.js.map +1 -0
  66. package/dist/commands/controller/providers/copilot-runtime.d.ts +9 -0
  67. package/dist/commands/controller/providers/copilot-runtime.js +127 -0
  68. package/dist/commands/controller/providers/copilot-runtime.js.map +1 -0
  69. package/dist/commands/controller/providers/copilot.d.ts +2 -0
  70. package/dist/commands/controller/providers/copilot.js +309 -0
  71. package/dist/commands/controller/providers/copilot.js.map +1 -0
  72. package/dist/commands/controller/providers/interactions.d.ts +3 -0
  73. package/dist/commands/controller/providers/interactions.js +79 -0
  74. package/dist/commands/controller/providers/interactions.js.map +1 -0
  75. package/dist/commands/controller/providers/native-rpc.d.ts +28 -0
  76. package/dist/commands/controller/providers/native-rpc.js +85 -0
  77. package/dist/commands/controller/providers/native-rpc.js.map +1 -0
  78. package/dist/commands/controller/providers/projection.d.ts +23 -0
  79. package/dist/commands/controller/providers/projection.js +99 -0
  80. package/dist/commands/controller/providers/projection.js.map +1 -0
  81. package/dist/commands/controller/providers/turns.d.ts +7 -0
  82. package/dist/commands/controller/providers/turns.js +21 -0
  83. package/dist/commands/controller/providers/turns.js.map +1 -0
  84. package/dist/commands/controller/providers/types.d.ts +44 -0
  85. package/dist/commands/controller/providers/types.js +2 -0
  86. package/dist/commands/controller/providers/types.js.map +1 -0
  87. package/dist/commands/controller/recovery.d.ts +6 -0
  88. package/dist/commands/controller/recovery.js +22 -0
  89. package/dist/commands/controller/recovery.js.map +1 -0
  90. package/dist/commands/controller/relay.d.ts +18 -0
  91. package/dist/commands/controller/relay.js +299 -0
  92. package/dist/commands/controller/relay.js.map +1 -0
  93. package/dist/commands/controller/resume.d.ts +18 -0
  94. package/dist/commands/controller/resume.js +193 -0
  95. package/dist/commands/controller/resume.js.map +1 -0
  96. package/dist/commands/controller/runtime.d.ts +5 -0
  97. package/dist/commands/controller/runtime.js +455 -0
  98. package/dist/commands/controller/runtime.js.map +1 -0
  99. package/dist/commands/controller/windows-job.d.ts +3 -0
  100. package/dist/commands/controller/windows-job.js +59 -0
  101. package/dist/commands/controller/windows-job.js.map +1 -0
  102. package/dist/commands/controller/wire-display.d.ts +5 -0
  103. package/dist/commands/controller/wire-display.js +11 -0
  104. package/dist/commands/controller/wire-display.js.map +1 -0
  105. package/dist/commands/skill/skills/using-daynight/SKILL.md +52 -162
  106. package/dist/commands/skill/skills/using-daynight/references/authorization.md +36 -0
  107. package/dist/commands/skill/skills/using-daynight/references/autopilot-managed-task.md +77 -193
  108. package/dist/commands/skill/skills/using-daynight/references/create-task.md +31 -186
  109. package/dist/commands/skill/skills/using-daynight/references/final-acceptance.md +25 -0
  110. package/dist/commands/skill/skills/using-daynight/references/goal.md +46 -243
  111. package/dist/commands/skill/skills/using-daynight/references/handbook.md +37 -294
  112. package/dist/commands/skill/skills/using-daynight/references/handoff.md +33 -91
  113. package/dist/commands/skill/skills/using-daynight/references/project-management.md +24 -0
  114. package/dist/commands/skill/skills/using-daynight/references/run-task.md +18 -59
  115. package/dist/commands/skill/skills/using-daynight/references/setup.md +16 -0
  116. package/dist/commands/skill/skills/using-daynight/references/task-content.md +80 -177
  117. package/dist/commands/skill/skills/using-daynight/references/task-execution.md +34 -126
  118. package/dist/commands/skill/skills/using-daynight/references/task-management.md +135 -0
  119. package/dist/commands/skill/skills/using-daynight/references/write-safety.md +34 -0
  120. package/dist/commands/task/command.js +5 -3
  121. package/dist/commands/task/command.js.map +1 -1
  122. package/dist/commands/task/definition.js +4 -2
  123. package/dist/commands/task/definition.js.map +1 -1
  124. package/dist/commands/task/rendering.d.ts +1 -0
  125. package/dist/commands/task/rendering.js +10 -1
  126. package/dist/commands/task/rendering.js.map +1 -1
  127. package/dist/commands/worker/backend.d.ts +7 -0
  128. package/dist/commands/worker/backend.js +7 -0
  129. package/dist/commands/worker/backend.js.map +1 -0
  130. package/dist/commands/worker/backends/grant-renewal.d.ts +13 -0
  131. package/dist/commands/worker/backends/grant-renewal.js +42 -0
  132. package/dist/commands/worker/backends/grant-renewal.js.map +1 -0
  133. package/dist/commands/worker/backends/session-api.d.ts +66 -0
  134. package/dist/commands/worker/backends/session-api.js +84 -0
  135. package/dist/commands/worker/backends/session-api.js.map +1 -0
  136. package/dist/commands/worker/backends/web-process.d.ts +79 -0
  137. package/dist/commands/worker/backends/web-process.js +156 -0
  138. package/dist/commands/worker/backends/web-process.js.map +1 -0
  139. package/dist/commands/worker/backends/web-store.d.ts +49 -0
  140. package/dist/commands/worker/backends/web-store.js +323 -0
  141. package/dist/commands/worker/backends/web-store.js.map +1 -0
  142. package/dist/commands/worker/backends/web-types.d.ts +83 -0
  143. package/dist/commands/worker/backends/web-types.js +3 -0
  144. package/dist/commands/worker/backends/web-types.js.map +1 -0
  145. package/dist/commands/worker/backends/web.d.ts +26 -0
  146. package/dist/commands/worker/backends/web.js +178 -0
  147. package/dist/commands/worker/backends/web.js.map +1 -0
  148. package/dist/commands/worker/config.js +12 -5
  149. package/dist/commands/worker/config.js.map +1 -1
  150. package/dist/commands/worker/control.d.ts +2 -0
  151. package/dist/commands/worker/control.js +11 -4
  152. package/dist/commands/worker/control.js.map +1 -1
  153. package/dist/commands/worker/coordinator.d.ts +10 -1
  154. package/dist/commands/worker/coordinator.js +153 -24
  155. package/dist/commands/worker/coordinator.js.map +1 -1
  156. package/dist/commands/worker/herdr/agents.js +5 -4
  157. package/dist/commands/worker/herdr/agents.js.map +1 -1
  158. package/dist/commands/worker/herdr/arguments.js +9 -4
  159. package/dist/commands/worker/herdr/arguments.js.map +1 -1
  160. package/dist/commands/worker/herdr/claude-input.d.ts +2 -0
  161. package/dist/commands/worker/herdr/claude-input.js +20 -0
  162. package/dist/commands/worker/herdr/claude-input.js.map +1 -0
  163. package/dist/commands/worker/herdr/command.d.ts +11 -2
  164. package/dist/commands/worker/herdr/command.js +23 -8
  165. package/dist/commands/worker/herdr/command.js.map +1 -1
  166. package/dist/commands/worker/herdr/instance.d.ts +5 -1
  167. package/dist/commands/worker/herdr/instance.js +31 -1
  168. package/dist/commands/worker/herdr/instance.js.map +1 -1
  169. package/dist/commands/worker/herdr/preflight.d.ts +1 -1
  170. package/dist/commands/worker/herdr/preflight.js +34 -15
  171. package/dist/commands/worker/herdr/preflight.js.map +1 -1
  172. package/dist/commands/worker/herdr/version-probe.d.ts +13 -0
  173. package/dist/commands/worker/herdr/version-probe.js +21 -0
  174. package/dist/commands/worker/herdr/version-probe.js.map +1 -0
  175. package/dist/commands/worker/herdr.js +7 -7
  176. package/dist/commands/worker/herdr.js.map +1 -1
  177. package/dist/commands/worker/index.d.ts +2 -0
  178. package/dist/commands/worker/index.js +1 -1
  179. package/dist/commands/worker/index.js.map +1 -1
  180. package/dist/commands/worker/prompts.js +5 -1
  181. package/dist/commands/worker/prompts.js.map +1 -1
  182. package/dist/commands/worker/remote.d.ts +3 -1
  183. package/dist/commands/worker/remote.js +4 -0
  184. package/dist/commands/worker/remote.js.map +1 -1
  185. package/dist/commands/worker/reporter.d.ts +14 -0
  186. package/dist/commands/worker/reporter.js +174 -0
  187. package/dist/commands/worker/reporter.js.map +1 -0
  188. package/dist/commands/worker/repositories.js +2 -2
  189. package/dist/commands/worker/repositories.js.map +1 -1
  190. package/dist/commands/worker/runtime.d.ts +2 -0
  191. package/dist/commands/worker/runtime.js +76 -11
  192. package/dist/commands/worker/runtime.js.map +1 -1
  193. package/dist/commands/worker/setup-environment.d.ts +2 -1
  194. package/dist/commands/worker/setup-environment.js +10 -4
  195. package/dist/commands/worker/setup-environment.js.map +1 -1
  196. package/dist/commands/worker/setup.js +5 -5
  197. package/dist/commands/worker/setup.js.map +1 -1
  198. package/dist/commands/worker/store.d.ts +2 -1
  199. package/dist/commands/worker/store.js +19 -9
  200. package/dist/commands/worker/store.js.map +1 -1
  201. package/dist/commands/worker/telemetry.d.ts +22 -0
  202. package/dist/commands/worker/telemetry.js +265 -0
  203. package/dist/commands/worker/telemetry.js.map +1 -0
  204. package/dist/commands/worker/types.d.ts +4 -1
  205. package/dist/session/controller-protocol.d.ts +245 -0
  206. package/dist/session/controller-protocol.js +218 -0
  207. package/dist/session/controller-protocol.js.map +1 -0
  208. package/dist/session/controls.d.ts +28 -0
  209. package/dist/session/controls.js +37 -0
  210. package/dist/session/controls.js.map +1 -0
  211. package/dist/session/protocol.d.ts +290 -0
  212. package/dist/session/protocol.js +307 -0
  213. package/dist/session/protocol.js.map +1 -0
  214. package/package.json +7 -2
@@ -0,0 +1,156 @@
1
+ import { spawn } from "node:child_process";
2
+ import { open, mkdir, readFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { createHash, randomBytes } from "node:crypto";
5
+ import { controllerExecutionDirectory, controllerTicketPath, readLaunchTicket, writeLaunchTicket } from "../../controller/launch-ticket.js";
6
+ import { readControllerSnapshot } from "../../controller/lifecycle-store.js";
7
+ import { requestController } from "../../controller/local-client.js";
8
+ import { captureProcessProof } from "../../controller/process-proof.js";
9
+ import { writeControllerCredential } from "./session-api.js";
10
+ export const createWebControllerLauncher = (options) => {
11
+ const current = (task) => { const latest = options.store.getTask(task); if (latest?.webExecution == null)
12
+ throw new Error("The web execution identity disappeared."); return latest; };
13
+ const tails = new Map();
14
+ const serialize = async (task, action) => {
15
+ const key = task.webExecution?.executionId ?? task.claimId;
16
+ const previous = tails.get(key) ?? Promise.resolve();
17
+ let release;
18
+ const gate = new Promise(resolve => { release = resolve; });
19
+ const tail = previous.then(() => gate);
20
+ tails.set(key, tail);
21
+ await previous;
22
+ try {
23
+ return await action();
24
+ }
25
+ finally {
26
+ release();
27
+ if (tails.get(key) === tail)
28
+ tails.delete(key);
29
+ }
30
+ };
31
+ const methods = {
32
+ prepare: async (input, prompt, signal) => {
33
+ let task = current(input);
34
+ let execution = task.webExecution;
35
+ if (execution.ticketPath !== null) {
36
+ const ticket = await readLaunchTicket(options.homeDirectory, execution.launchId);
37
+ if (execution.nativeHome === null)
38
+ options.store.updateWebExecution(task, { nativeHome: ticket.nativeHome }, options.now());
39
+ return ticket;
40
+ }
41
+ try {
42
+ const existing = await readLaunchTicket(options.homeDirectory, execution.launchId);
43
+ if (existing.executionId !== execution.executionId || existing.claimId !== task.claimId || existing.executionGeneration !== execution.executionGeneration || existing.controllerInstanceId !== execution.controllerInstanceId || existing.initialOperationId !== execution.initialOperationId || existing.sessionId !== execution.sessionId || existing.initialPrompt !== execution.initialPrompt)
44
+ throw new Error("An existing launch ticket does not match the durable execution intent.");
45
+ options.store.updateWebExecution(task, { ticketPath: controllerTicketPath(options.homeDirectory, execution.launchId), nativeHome: existing.nativeHome }, options.now());
46
+ return existing;
47
+ }
48
+ catch (error) {
49
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT"))
50
+ throw error;
51
+ }
52
+ if (execution.initialPrompt === null) {
53
+ task = options.store.updateWebExecution(task, { initialPrompt: prompt }, options.now());
54
+ execution = task.webExecution;
55
+ }
56
+ if (task.resources.worktree === null || task.configuration === null || task.userId === null)
57
+ throw new Error("Controller launch requires its original worktree, provider and owner.");
58
+ if (execution.sessionId === null) {
59
+ const registered = await options.sessionApi.register(task, execution, signal);
60
+ task = options.store.updateWebExecution(task, { sessionId: registered.sessionId }, options.now());
61
+ execution = task.webExecution;
62
+ }
63
+ const directory = controllerExecutionDirectory(options.homeDirectory, execution.executionId);
64
+ await mkdir(directory, { recursive: true, mode: 0o700 });
65
+ const credentialFile = path.join(directory, "credential.json");
66
+ const previous = readControllerSnapshot(path.join(directory, "journal.sqlite"));
67
+ const stop = previous !== null && previous.executionGeneration !== execution.executionGeneration && previous.nativeStopped && previous.stoppedAt !== null ? { generation: previous.executionGeneration, instanceId: previous.controllerInstanceId, recordId: execution.launchId, stoppedAt: previous.stoppedAt } : undefined;
68
+ const grant = await options.sessionApi.grant(task, execution, signal, stop);
69
+ await writeControllerCredential(credentialFile, grant);
70
+ const endpointKey = createHash("sha256").update(`${options.homeDirectory}:${execution.launchId}`).digest("hex").slice(0, 20);
71
+ const ipcEndpoint = process.platform === "win32" ? `\\\\.\\pipe\\daynight-${endpointKey}` : path.join(options.homeDirectory, ".daynight", "c", `${endpointKey}.sock`);
72
+ if (process.platform !== "win32" && Buffer.byteLength(ipcEndpoint) > (process.platform === "darwin" ? 103 : 107))
73
+ throw new Error("The controller IPC endpoint exceeds this platform's socket path limit.");
74
+ if (process.platform !== "win32")
75
+ await mkdir(path.dirname(ipcEndpoint), { recursive: true, mode: 0o700 });
76
+ if (task.resources.worktree === null || task.configuration === null || task.userId === null)
77
+ throw new Error("The frozen launch binding disappeared.");
78
+ const nativeHome = execution.nativeHome ?? (task.configuration.agent === "codex" ? process.env.CODEX_HOME ?? path.join(options.homeDirectory, ".codex")
79
+ : task.configuration.agent === "claude" ? process.env.CLAUDE_CONFIG_DIR ?? path.join(options.homeDirectory, ".claude")
80
+ : process.env.COPILOT_HOME ?? path.join(options.homeDirectory, ".copilot"));
81
+ if (execution.nativeHome === null)
82
+ execution = options.store.updateWebExecution(task, { nativeHome }, options.now()).webExecution;
83
+ const initialPrompt = execution.initialPrompt ?? prompt;
84
+ const ticket = { schemaVersion: 1, launchId: execution.launchId, executionId: execution.executionId, controllerId: execution.controllerId, controllerInstanceId: execution.controllerInstanceId, sessionId: execution.sessionId, executionGeneration: execution.executionGeneration, serverOrigin: task.serverOrigin, projectId: task.projectId, taskId: task.taskId, claimId: task.claimId, workerId: task.workerId, worktreeId: task.worktreeId, userId: task.userId, provider: task.configuration.agent, cwd: task.resources.worktree.worktreePath, nativeHome, configuration: task.configuration, initialOperationId: execution.initialOperationId, initialPrompt, resumeNativeSessionId: task.resources.nativeSession?.sessionId ?? null, credentialFile, ipcEndpoint, ipcSecret: randomBytes(32).toString("hex"), createdAt: new Date(options.now()).toISOString() };
85
+ const ticketPath = await writeLaunchTicket(options.homeDirectory, ticket);
86
+ options.store.updateWebExecution(task, { ticketPath, initialPrompt }, options.now());
87
+ return ticket;
88
+ },
89
+ launch: async (input, ticket, signal) => {
90
+ let task = current(input);
91
+ if (task.webExecution.launchSubmission !== "not-submitted")
92
+ return;
93
+ // A reusable grant also supports the first hello, including a lost bootstrap handshake.
94
+ await writeControllerCredential(ticket.credentialFile, await options.sessionApi.grant(task, { ...task.webExecution, launchSubmission: "unknown" }, signal));
95
+ const directory = controllerExecutionDirectory(options.homeDirectory, ticket.executionId);
96
+ const log = await open(path.join(directory, "controller.log"), "a", 0o600);
97
+ try {
98
+ signal.throwIfAborted();
99
+ task = options.store.updateWebExecution(task, { launchSubmission: "unknown" }, options.now());
100
+ const child = spawn(process.execPath, [path.join(options.packageDirectory, "dist", "main.js"), "controller", ticket.provider, "--launch-id", ticket.launchId], { cwd: ticket.cwd, env: { ...process.env, HOME: options.homeDirectory, USERPROFILE: options.homeDirectory }, detached: process.platform !== "win32", stdio: ["ignore", log.fd, log.fd], windowsHide: true });
101
+ await new Promise((resolve, reject) => { child.once("spawn", resolve); child.once("error", reject); });
102
+ child.unref();
103
+ if (child.pid === undefined)
104
+ throw new Error("Controller spawn did not establish its process identity.");
105
+ const proof = await captureProcessProof(child.pid);
106
+ task = options.store.updateWebExecution(task, { controllerProcess: proof }, options.now());
107
+ const deadline = Date.now() + 30000;
108
+ while (Date.now() < deadline) {
109
+ signal.throwIfAborted();
110
+ try {
111
+ const response = await requestController(ticket, { kind: "observe" }, { signal, timeoutMs: 1000 });
112
+ options.store.updateWebExecution(task, { launchSubmission: "acknowledged", nativeProcesses: response.snapshot.nativeProcesses }, options.now());
113
+ return;
114
+ }
115
+ catch {
116
+ if (child.exitCode !== null || child.signalCode !== null)
117
+ throw new Error("Controller exited before its authenticated initialization; inspect its private log.");
118
+ }
119
+ await new Promise(resolve => setTimeout(resolve, 100));
120
+ }
121
+ throw new Error("Controller startup outcome is unknown; the original process and launch intent are retained.");
122
+ }
123
+ finally {
124
+ await log.close();
125
+ }
126
+ },
127
+ refreshGrant: async (input, ticket, signal) => {
128
+ const task = current(input);
129
+ if (task.webExecution.launchId !== ticket.launchId || task.cleanup?.agentStopped)
130
+ return;
131
+ let expiresAt;
132
+ try {
133
+ expiresAt = JSON.parse(await readFile(ticket.credentialFile, "utf8")).expiresAt;
134
+ }
135
+ catch {
136
+ throw new Error("Controller credential state is unavailable; it cannot be silently replaced.");
137
+ }
138
+ if (typeof expiresAt !== "string" || !Number.isFinite(Date.parse(expiresAt)))
139
+ throw new Error("Controller credential expiry is invalid.");
140
+ if (Date.parse(expiresAt) - options.now() > 120_000)
141
+ return;
142
+ const grant = await options.sessionApi.grant(task, task.webExecution, signal);
143
+ const latest = current(task);
144
+ if (latest.webExecution.launchId !== ticket.launchId || latest.cleanup?.agentStopped)
145
+ return;
146
+ signal.throwIfAborted();
147
+ await writeControllerCredential(ticket.credentialFile, grant);
148
+ },
149
+ };
150
+ return {
151
+ prepare: (...args) => serialize(args[0], () => methods.prepare(...args)),
152
+ launch: (...args) => serialize(args[0], () => methods.launch(...args)),
153
+ refreshGrant: (...args) => serialize(args[0], () => methods.refreshGrant(...args)),
154
+ };
155
+ };
156
+ //# sourceMappingURL=web-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-process.js","sourceRoot":"","sources":["../../../../src/commands/worker/backends/web-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { ExecutionConfiguration as FrozenExecutionConfiguration, WorkerProject, ResourceOwner } from "../types.js";
2
+ import type { LocalTask, ClaimIdentity, CleanupState, WorktreeBinding, WebExecutionState } from "./web-types.js";
3
+ export declare const openWebExecutionStore: (filename: string) => {
4
+ close: () => void;
5
+ getTask: (identity: ClaimIdentity) => LocalTask | null;
6
+ listUnfinishedTasks: () => LocalTask[];
7
+ register: (input: ResourceOwner & {
8
+ project: WorkerProject;
9
+ serverOrigin: string;
10
+ workerId: string;
11
+ userId: string;
12
+ configuration: FrozenExecutionConfiguration;
13
+ }, now: number) => LocalTask;
14
+ clearShutdown: (identity: ClaimIdentity, now: number) => LocalTask;
15
+ beginRecovery: (identity: ClaimIdentity, now: number) => LocalTask;
16
+ authorizeRecoveryRetry: (identity: ClaimIdentity, now: number) => LocalTask;
17
+ bindNativeSession: (identity: ClaimIdentity, reference: {
18
+ source: "controller";
19
+ sessionId: string;
20
+ }, now: number) => LocalTask;
21
+ completeTask: (identity: ClaimIdentity, now: number) => LocalTask;
22
+ initializeWebExecution: (identity: ClaimIdentity, now: number) => LocalTask;
23
+ updateWebExecution: (identity: ClaimIdentity, patch: Partial<WebExecutionState>, now: number) => LocalTask;
24
+ beginWebGeneration: (identity: ClaimIdentity, previous: {
25
+ executionGeneration: string;
26
+ controllerInstanceId: string;
27
+ nativeSessionId: string | null;
28
+ nativeStopped: boolean;
29
+ }, now: number) => LocalTask;
30
+ confirmBackendResourcesClosed: (identity: ClaimIdentity, proof: {
31
+ controllerStopped: true;
32
+ endpointClosed: true;
33
+ }, now: number) => LocalTask;
34
+ bindWorktree: (identity: ClaimIdentity, binding: WorktreeBinding, now: number) => LocalTask;
35
+ beginCleanup: (identity: ClaimIdentity, input: {
36
+ kind: CleanupState["kind"];
37
+ deadline: number;
38
+ }, now: number) => LocalTask;
39
+ markCleanupInputSubmitting: (identity: ClaimIdentity, now: number) => LocalTask;
40
+ recordCleanupInputOutcome: (identity: ClaimIdentity, input: "submitted" | "rejected" | "unavailable", now: number) => LocalTask;
41
+ recordCleanupResult: (identity: ClaimIdentity, result: NonNullable<CleanupState["result"]>, error: string | null, now: number) => LocalTask;
42
+ confirmAgentStopped: (identity: ClaimIdentity, proof: {
43
+ agentStopped: true;
44
+ }, now: number) => LocalTask;
45
+ confirmWorktreeDeleted: (identity: ClaimIdentity, proof: {
46
+ worktreeDeleted: true;
47
+ }, now: number) => LocalTask;
48
+ };
49
+ export type WebExecutionStore = ReturnType<typeof openWebExecutionStore>;
@@ -0,0 +1,323 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import path from "node:path";
3
+ import Database from "better-sqlite3";
4
+ import { canonicalId } from "../../../api/parse.js";
5
+ import { normalizeServerUrl } from "../../../config/server.js";
6
+ import { validateWorkerAgentMode, workerAgentControlMode } from "../../../api/worker-mode.js";
7
+ import { backendResourcesClosed, taskAgentControlMode } from "./web-types.js";
8
+ const integer = (value, name, minimum = 0) => {
9
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < minimum)
10
+ throw new Error(`${name} must be a safe integer of at least ${minimum}.`);
11
+ return value;
12
+ };
13
+ const text = (value, name, empty = false) => {
14
+ if (typeof value !== "string" || (!empty && value.trim().length === 0))
15
+ throw new Error(`${name} must be ${empty ? "a" : "a nonempty"} string.`);
16
+ return value;
17
+ };
18
+ const id = (value, name) => {
19
+ const normalized = canonicalId(text(value, name));
20
+ if (normalized === null)
21
+ throw new Error(`${name} must be a UUID.`);
22
+ return normalized;
23
+ };
24
+ const absolutePath = (value, name) => {
25
+ const result = text(value, name);
26
+ if (!path.isAbsolute(result))
27
+ throw new Error(`${name} must be absolute.`);
28
+ return result;
29
+ };
30
+ const bool = (value, name) => {
31
+ if (typeof value !== "boolean")
32
+ throw new Error(`${name} must be boolean.`);
33
+ return value;
34
+ };
35
+ const oneOf = (value, choices, name) => {
36
+ if (typeof value !== "string" || !choices.includes(value))
37
+ throw new Error(`${name} is invalid.`);
38
+ return value;
39
+ };
40
+ const record = (value, fields, name) => {
41
+ if (typeof value !== "object" || value === null || Array.isArray(value))
42
+ throw new Error(`${name} must be an object.`);
43
+ if (Object.keys(value).length !== fields.length || fields.some((field) => !Object.hasOwn(value, field)))
44
+ throw new Error(`${name} has invalid fields.`);
45
+ return value;
46
+ };
47
+ const nullable = (value, parse) => value === null ? null : parse(value);
48
+ const version = (value) => {
49
+ if (typeof value !== "string" || !/^[1-9][0-9]*$/.test(value) || BigInt(value) > 9223372036854775807n)
50
+ throw new Error("Remote version must be a positive int64 decimal string.");
51
+ return value;
52
+ };
53
+ const parseConfiguration = (value) => {
54
+ const data = record(value, ["agent", "agentControlMode", "model", "args", "recoveryLimit"], "Frozen execution configuration");
55
+ if (!Array.isArray(data.args))
56
+ throw new Error("Agent arguments must be an array.");
57
+ const agentControlMode = workerAgentControlMode(data);
58
+ return { agent: validateWorkerAgentMode(data.agent, agentControlMode), agentControlMode, model: nullable(data.model, (entry) => text(entry, "Model")),
59
+ args: data.args.map((entry) => text(entry, "Agent argument", true)), recoveryLimit: integer(data.recoveryLimit, "Recovery limit") };
60
+ };
61
+ const parseWorktree = (value) => {
62
+ const data = record(value, ["repositoryPath", "commonDirectory", "worktreePath", "branch"], "Worktree binding");
63
+ return { repositoryPath: absolutePath(data.repositoryPath, "Repository path"), commonDirectory: absolutePath(data.commonDirectory, "Git common directory"), worktreePath: absolutePath(data.worktreePath, "Worktree path"), branch: text(data.branch, "Worktree branch") };
64
+ };
65
+ const parseCleanupBaseline = (value) => {
66
+ const data = record(value, ["stateChangeSeq", "completionSeq"], "Cleanup completion baseline");
67
+ return { stateChangeSeq: integer(data.stateChangeSeq, "Cleanup state-change sequence"), completionSeq: integer(data.completionSeq, "Cleanup completion sequence") };
68
+ };
69
+ const parseExecutionSummary = (value) => { if (value !== null)
70
+ throw new Error("Web execution summaries are derived from fresh remote inventory."); return value; };
71
+ const parseWebExecution = (value) => {
72
+ const data = record(value, ["executionId", "registrationId", "controllerId", "controllerInstanceId", "launchId", "sessionId", "executionGeneration", "initialOperationId", "initialPrompt", "launchSubmission", "controllerProcess", "nativeProcesses", "cleanupOperationId", "ticketPath", ...["summary", "initialInputState", "activity", "nativeHome", "restartAfterShutdown"].filter(key => typeof value === "object" && value !== null && Object.hasOwn(value, key))], "Web execution");
73
+ for (const key of ["executionId", "registrationId", "controllerId", "controllerInstanceId", "launchId", "initialOperationId"])
74
+ id(data[key], key);
75
+ for (const key of ["sessionId", "cleanupOperationId"])
76
+ nullable(data[key], entry => id(entry, key));
77
+ version(data.executionGeneration);
78
+ oneOf(data.launchSubmission, ["not-submitted", "unknown", "acknowledged"], "Controller launch submission");
79
+ nullable(data.initialPrompt, entry => text(entry, "Initial prompt"));
80
+ nullable(data.ticketPath, entry => absolutePath(entry, "Controller ticket"));
81
+ const proof = (value) => { const hasJob = typeof value === "object" && value !== null && "jobObjectName" in value; const p = record(value, ["pid", "parentPid", "processGroupId", "startedAt", "commandHash", ...(hasJob ? ["jobObjectName"] : [])], "Process proof"); if (hasJob && (typeof p.jobObjectName !== "string" || !/^Local\\Daynight-[0-9a-f-]{36}$/.test(p.jobObjectName)))
82
+ throw new Error("Invalid Windows job identity."); integer(p.pid, "Process ID", 1); integer(p.parentPid, "Parent ID"); nullable(p.processGroupId, entry => integer(entry, "Process group", 1)); text(p.startedAt, "Process creation"); if (typeof p.commandHash !== "string" || !/^[a-f0-9]{64}$/.test(p.commandHash))
83
+ throw new Error("Invalid process command proof."); };
84
+ if (data.controllerProcess !== null)
85
+ proof(data.controllerProcess);
86
+ if (!Array.isArray(data.nativeProcesses))
87
+ throw new Error("Native process evidence must be an array.");
88
+ data.nativeProcesses.forEach(proof);
89
+ data.restartAfterShutdown ??= false;
90
+ bool(data.restartAfterShutdown, "Orderly controller restart");
91
+ data.nativeHome ??= null;
92
+ nullable(data.nativeHome, entry => absolutePath(entry, "Native profile home"));
93
+ data.summary ??= null;
94
+ data.initialInputState ??= "unknown";
95
+ data.activity ??= "unknown";
96
+ nullable(data.summary, parseExecutionSummary);
97
+ oneOf(data.initialInputState, ["not_submitted", "dispatching", "provider_accepted", "confirmed", "failed", "unknown"], "Initial input state");
98
+ oneOf(data.activity, ["initializing", "idle", "working", "waiting_input", "stopped", "unknown"], "Controller activity");
99
+ return data;
100
+ };
101
+ const parseCleanup = (value) => {
102
+ const web = typeof value === "object" && value !== null && "mode" in value && value.mode === "web";
103
+ const data = record(value, ["kind", "startedAt", "deadline", "input", "baseline", "result", "error", "agentStopped", "workspaceClosed", "worktreeDeleted", ...(web ? ["mode", "backendResourcesClosed"] : [])], "Cleanup state");
104
+ if (web && data.workspaceClosed !== null)
105
+ throw new Error("Web cleanup cannot carry a Herdr workspace closure.");
106
+ const result = { kind: oneOf(data.kind, ["terminal", "shutdown"], "Cleanup kind"), startedAt: integer(data.startedAt, "Cleanup start"), deadline: integer(data.deadline, "Cleanup deadline"),
107
+ input: oneOf(data.input, ["not-submitted", "unknown", "submitted", "rejected", "unavailable"], "Cleanup input state"),
108
+ baseline: nullable(data.baseline, parseCleanupBaseline),
109
+ result: nullable(data.result, (entry) => oneOf(entry, ["completed", "timed-out", "failed", "unavailable"], "Cleanup result")), error: nullable(data.error, (entry) => text(entry, "Cleanup error")),
110
+ agentStopped: bool(data.agentStopped, "Agent stopped"), workspaceClosed: web && data.workspaceClosed === null ? null : bool(data.workspaceClosed, "Workspace closed"), ...(web ? { mode: "web", backendResourcesClosed: bool(data.backendResourcesClosed, "Backend resources closed") } : {}), worktreeDeleted: bool(data.worktreeDeleted, "Worktree deleted") };
111
+ if (result.deadline < result.startedAt || result.deadline - result.startedAt > 600_000)
112
+ throw new Error("Cleanup deadline must be within ten minutes of its original start.");
113
+ if ((backendResourcesClosed(result) && !result.agentStopped) || (result.worktreeDeleted && !backendResourcesClosed(result)))
114
+ throw new Error("Cleanup progress is out of order.");
115
+ if (result.baseline !== null && result.input !== "submitted")
116
+ throw new Error("A cleanup completion baseline requires confirmed input submission.");
117
+ return result;
118
+ };
119
+ const same = (left, right) => JSON.stringify(left) === JSON.stringify(right);
120
+ const key = (identity) => [identity.projectId, identity.taskId, identity.claimId].map(value => id(value, "Execution identity")).join("/");
121
+ const validate = (task) => {
122
+ record(task, ["projectId", "taskId", "claimId", "worktreeId", "serverOrigin", "workerId", "userId", "status", "repoUrl", "repositoryPath", "configuration", "resources", "nativeExecution", "webExecution", "recovery", "cleanup", "control", "createdAt", "updatedAt"], "Web execution record");
123
+ key(task);
124
+ normalizeServerUrl(task.serverOrigin);
125
+ id(task.workerId, "Worker ID");
126
+ id(task.worktreeId, "Worktree ID");
127
+ nullable(task.userId, value => id(value, "Execution owner"));
128
+ if (task.configuration === null || task.configuration.agentControlMode !== "web")
129
+ throw new Error("Web execution requires its frozen configuration.");
130
+ parseConfiguration(task.configuration);
131
+ text(task.repoUrl, "Repository URL");
132
+ absolutePath(task.repositoryPath, "Repository path");
133
+ integer(task.createdAt, "Execution creation time");
134
+ integer(task.updatedAt, "Execution update time");
135
+ record(task.resources, ["mode", "worktree", "herdr", "nativeSession"], "Web resources");
136
+ if (task.resources.mode !== "web" || task.resources.herdr !== null || task.nativeExecution !== null || task.control !== null)
137
+ throw new Error("Web execution contains incompatible backend resources.");
138
+ if (task.resources.nativeSession !== null) {
139
+ const native = record(task.resources.nativeSession, ["source", "sessionId"], "Native session");
140
+ if (native.source !== "controller")
141
+ throw new Error("The native session does not belong to the Controller.");
142
+ id(native.sessionId, "Native session ID");
143
+ }
144
+ record(task.recovery, ["count", "pauseReason", "retryAuthorized"], "Recovery state");
145
+ integer(task.recovery.count, "Recovery count");
146
+ nullable(task.recovery.pauseReason, value => text(value, "Recovery pause"));
147
+ bool(task.recovery.retryAuthorized, "Recovery authorization");
148
+ oneOf(task.status, ["pending", "active", "done"], "Web execution state");
149
+ nullable(task.resources.worktree, parseWorktree);
150
+ nullable(task.cleanup, parseCleanup);
151
+ nullable(task.webExecution, parseWebExecution);
152
+ return task;
153
+ };
154
+ // This store contains Controller delivery and stop evidence only. Claim scheduling remains in the minimal Worker store.
155
+ export const openWebExecutionStore = (filename) => {
156
+ const db = new Database(filename);
157
+ try {
158
+ db.pragma("journal_mode = WAL");
159
+ db.pragma("synchronous = FULL");
160
+ db.exec("CREATE TABLE IF NOT EXISTS executions (identity TEXT PRIMARY KEY NOT NULL, data TEXT NOT NULL CHECK(json_valid(data))) STRICT;");
161
+ }
162
+ catch (error) {
163
+ db.close();
164
+ throw error;
165
+ }
166
+ const getTask = (identity) => {
167
+ const row = db.prepare("SELECT data FROM executions WHERE identity = ?").get(key(identity));
168
+ return row === undefined ? null : validate(JSON.parse(row.data));
169
+ };
170
+ const write = (task) => { validate(task); db.prepare("INSERT INTO executions(identity,data) VALUES (?,?) ON CONFLICT(identity) DO UPDATE SET data=excluded.data").run(key(task), JSON.stringify(task)); return getTask(task); };
171
+ const change = (identity, now, operation) => db.transaction(() => {
172
+ const task = getTask(identity);
173
+ if (task === null || task.status === "done")
174
+ throw new Error("The original Web execution is missing or done.");
175
+ return write({ ...operation(task), updatedAt: integer(now, "Execution time") });
176
+ }).immediate();
177
+ const requireOrdinary = (task) => { if (task.cleanup !== null || task.configuration === null)
178
+ throw new Error("Cleanup fences ordinary execution."); };
179
+ const needCleanup = (task) => { if (task.cleanup === null)
180
+ throw new Error("Cleanup has not started."); return task.cleanup; };
181
+ return {
182
+ close: () => { db.close(); }, getTask,
183
+ listUnfinishedTasks: () => db.prepare("SELECT data FROM executions").all().map(row => validate(JSON.parse(row.data))).filter(task => task.status !== "done"),
184
+ register: (input, now) => db.transaction(() => {
185
+ const existing = getTask(input);
186
+ if (existing !== null) {
187
+ if (existing.worktreeId !== input.worktreeId || existing.serverOrigin !== input.serverOrigin || existing.workerId !== input.workerId || existing.userId !== input.userId || existing.configuration?.agent !== input.configuration.agent || existing.repositoryPath !== input.project.localPath || existing.repoUrl !== input.project.repoUrl)
188
+ throw new Error("The frozen Web execution does not match the original claim.");
189
+ return existing;
190
+ }
191
+ return write({ projectId: input.projectId, taskId: input.taskId, claimId: input.claimId, worktreeId: input.worktreeId, serverOrigin: input.serverOrigin, workerId: input.workerId, userId: input.userId, status: "active", repoUrl: input.project.repoUrl, repositoryPath: input.project.localPath, configuration: { ...input.configuration, agentControlMode: "web" }, resources: { mode: "web", worktree: null, herdr: null, nativeSession: null }, nativeExecution: null, webExecution: null, recovery: { count: 0, pauseReason: null, retryAuthorized: false }, cleanup: null, control: null, createdAt: now, updatedAt: now });
192
+ }).immediate(),
193
+ clearShutdown: (identity, now) => change(identity, now, task => {
194
+ const cleanup = task.cleanup;
195
+ if (cleanup === null)
196
+ return task;
197
+ if (cleanup.kind !== "shutdown" || !cleanup.agentStopped || !backendResourcesClosed(cleanup))
198
+ throw new Error("The original cleanup has not completed.");
199
+ return { ...task, cleanup: null, webExecution: task.webExecution === null ? null : { ...task.webExecution, restartAfterShutdown: true } };
200
+ }),
201
+ beginRecovery: (identity, now) => change(identity, now, (task) => {
202
+ requireOrdinary(task);
203
+ if (task.status !== "active")
204
+ throw new Error("Only an active execution can recover.");
205
+ const recovery = task.recovery;
206
+ if (recovery.pauseReason !== null && !recovery.retryAuthorized)
207
+ throw new Error("The paused execution requires an explicit recovery retry.");
208
+ if (task.configuration === null)
209
+ throw new Error("The original frozen execution configuration is missing.");
210
+ if (recovery.count >= task.configuration.recoveryLimit && !recovery.retryAuthorized)
211
+ throw new Error("The execution recovery budget is exhausted.");
212
+ return { ...task, recovery: { count: integer(recovery.count + 1, "Recovery count"), pauseReason: null, retryAuthorized: false } };
213
+ }),
214
+ authorizeRecoveryRetry: (identity, now) => change(identity, now, task => { requireOrdinary(task); return { ...task, recovery: { ...task.recovery, retryAuthorized: true } }; }),
215
+ bindNativeSession: (identity, reference, now) => change(identity, now, task => {
216
+ id(reference.sessionId, "Native session");
217
+ if (task.resources.nativeSession !== null && task.resources.nativeSession.sessionId !== reference.sessionId)
218
+ throw new Error("The original native session cannot be replaced.");
219
+ return { ...task, resources: { ...task.resources, nativeSession: reference } };
220
+ }),
221
+ completeTask: (identity, now) => change(identity, now, task => {
222
+ const cleanup = needCleanup(task);
223
+ if (cleanup.kind !== "terminal" || !cleanup.agentStopped || !backendResourcesClosed(cleanup) || !cleanup.worktreeDeleted)
224
+ throw new Error("Web completion requires original resources to be stopped and removed.");
225
+ return { ...task, status: "done" };
226
+ }),
227
+ initializeWebExecution: (identity, now) => change(identity, now, task => {
228
+ if (task.configuration?.agentControlMode !== "web" || task.status !== "active")
229
+ throw new Error("Web execution requires its active frozen claim.");
230
+ if (task.webExecution != null)
231
+ return task;
232
+ return { ...task, nativeExecution: null, webExecution: { executionId: randomUUID(), registrationId: randomUUID(), controllerId: randomUUID(), controllerInstanceId: randomUUID(), launchId: randomUUID(), sessionId: null, executionGeneration: "1", initialOperationId: randomUUID(), initialPrompt: null, launchSubmission: "not-submitted", controllerProcess: null, nativeProcesses: [], restartAfterShutdown: false, cleanupOperationId: null, ticketPath: null, nativeHome: null, summary: null, initialInputState: "not_submitted", activity: "initializing" } };
233
+ }),
234
+ updateWebExecution: (identity, patch, now) => change(identity, now, task => {
235
+ if (task.configuration?.agentControlMode !== "web" || task.webExecution == null)
236
+ throw new Error("The web execution identity is missing.");
237
+ const previous = task.webExecution;
238
+ if (patch.restartAfterShutdown !== undefined && patch.restartAfterShutdown !== previous.restartAfterShutdown)
239
+ throw new Error("Orderly restart provenance requires confirmed shutdown.");
240
+ for (const key of ["executionGeneration", "controllerInstanceId", "launchId"])
241
+ if (patch[key] !== undefined && patch[key] !== previous[key])
242
+ throw new Error("A new web generation requires verified original process stop.");
243
+ for (const key of ["executionId", "registrationId", "controllerId", "initialOperationId"])
244
+ if (patch[key] !== undefined && patch[key] !== previous[key])
245
+ throw new Error("The web execution identity cannot be replaced.");
246
+ if (previous.nativeHome !== null && patch.nativeHome !== undefined && patch.nativeHome !== previous.nativeHome)
247
+ throw new Error("The original native profile cannot change.");
248
+ if (previous.initialPrompt !== null && patch.initialPrompt !== undefined && patch.initialPrompt !== previous.initialPrompt)
249
+ throw new Error("The original managed prompt cannot change.");
250
+ if (previous.sessionId !== null && patch.sessionId !== undefined && patch.sessionId !== previous.sessionId)
251
+ throw new Error("The registered session cannot change.");
252
+ return { ...task, webExecution: parseWebExecution({ ...previous, ...patch }) };
253
+ }),
254
+ beginWebGeneration: (identity, previous, now) => change(identity, now, task => {
255
+ requireOrdinary(task);
256
+ const execution = task.webExecution;
257
+ if (execution == null || task.configuration?.agentControlMode !== "web" || previous.executionGeneration !== execution.executionGeneration || previous.controllerInstanceId !== execution.controllerInstanceId || !previous.nativeStopped || previous.nativeSessionId === null || previous.nativeSessionId !== task.resources.nativeSession?.sessionId)
258
+ throw new Error("Web recovery requires the exact stopped generation and native identity.");
259
+ return { ...task, webExecution: { ...execution, executionGeneration: String(BigInt(execution.executionGeneration) + 1n), controllerInstanceId: randomUUID(), launchId: randomUUID(), launchSubmission: "not-submitted", controllerProcess: null, nativeProcesses: [], restartAfterShutdown: false, cleanupOperationId: null, ticketPath: null, activity: "initializing" } };
260
+ }),
261
+ confirmBackendResourcesClosed: (identity, proof, now) => change(identity, now, task => {
262
+ const cleanup = needCleanup(task);
263
+ if (cleanup.mode !== "web" || !cleanup.agentStopped || proof.controllerStopped !== true || proof.endpointClosed !== true)
264
+ throw new Error("Web resource closure requires stopped original controller and endpoint.");
265
+ return { ...task, cleanup: { ...cleanup, backendResourcesClosed: true } };
266
+ }),
267
+ bindWorktree: (identity, binding, now) => change(identity, now, (task) => {
268
+ if (task.status !== "active")
269
+ throw new Error("Resource creation requires an active execution.");
270
+ const value = parseWorktree(binding);
271
+ if (value.repositoryPath !== task.repositoryPath)
272
+ throw new Error("The worktree repository does not match the original project binding.");
273
+ if (task.resources.worktree !== null && !same(task.resources.worktree, value))
274
+ throw new Error("The execution already has a different worktree binding.");
275
+ return { ...task, resources: { ...task.resources, worktree: value } };
276
+ }),
277
+ beginCleanup: (identity, input, now) => change(identity, now, (task) => {
278
+ oneOf(input.kind, ["terminal", "shutdown"], "Cleanup kind");
279
+ const existing = task.cleanup;
280
+ if (existing !== null)
281
+ return { ...task, cleanup: { ...existing, kind: existing.kind === "terminal" ? "terminal" : input.kind } };
282
+ if (task.control !== null && input.kind !== "terminal")
283
+ throw new Error("A source control intent requires terminal cleanup.");
284
+ return { ...task, status: "active", cleanup: parseCleanup({ kind: input.kind, startedAt: now, deadline: input.deadline, input: "not-submitted", baseline: null, result: null, error: null, agentStopped: false, workspaceClosed: taskAgentControlMode(task) === "web" ? null : false, ...(taskAgentControlMode(task) === "web" ? { mode: "web", backendResourcesClosed: false } : {}), worktreeDeleted: false }) };
285
+ }),
286
+ markCleanupInputSubmitting: (identity, now) => change(identity, now, (task) => {
287
+ const cleanup = needCleanup(task);
288
+ if (cleanup.input !== "not-submitted" || cleanup.agentStopped || cleanup.result !== null)
289
+ throw new Error("Cleanup input cannot be submitted again or after cleanup completion or agent stop.");
290
+ if (now >= cleanup.deadline)
291
+ throw new Error("The original cleanup deadline has elapsed; no new input may be submitted.");
292
+ return { ...task, cleanup: { ...cleanup, input: "unknown" } };
293
+ }),
294
+ recordCleanupInputOutcome: (identity, input, now) => change(identity, now, (task) => {
295
+ const cleanup = needCleanup(task);
296
+ oneOf(input, ["submitted", "rejected", "unavailable"], "Cleanup input outcome");
297
+ if (cleanup.input !== "unknown" && !(cleanup.input === "not-submitted" && input === "unavailable") && cleanup.input !== input)
298
+ throw new Error("The cleanup input outcome conflicts with the original submission.");
299
+ return { ...task, cleanup: { ...cleanup, input } };
300
+ }),
301
+ recordCleanupResult: (identity, result, error, now) => change(identity, now, (task) => {
302
+ const cleanup = needCleanup(task);
303
+ oneOf(result, ["completed", "timed-out", "failed", "unavailable"], "Cleanup result");
304
+ if (cleanup.result !== null && cleanup.result !== result)
305
+ throw new Error("The original cleanup result cannot be replaced.");
306
+ if (result === "timed-out" && now < cleanup.deadline)
307
+ throw new Error("The original cleanup deadline has not elapsed.");
308
+ return { ...task, cleanup: { ...cleanup, result, error: error === null ? null : text(error, "Cleanup error") } };
309
+ }),
310
+ confirmAgentStopped: (identity, proof, now) => change(identity, now, (task) => {
311
+ if (proof.agentStopped !== true)
312
+ throw new Error("The caller must confirm the original agent has stopped.");
313
+ return { ...task, cleanup: { ...needCleanup(task), agentStopped: true } };
314
+ }),
315
+ confirmWorktreeDeleted: (identity, proof, now) => change(identity, now, (task) => {
316
+ const cleanup = needCleanup(task);
317
+ if (cleanup.kind !== "terminal" || !backendResourcesClosed(cleanup) || proof.worktreeDeleted !== true)
318
+ throw new Error("Worktree deletion requires confirmed workspace closure and terminal cleanup.");
319
+ return { ...task, cleanup: { ...cleanup, worktreeDeleted: true } };
320
+ }),
321
+ };
322
+ };
323
+ //# sourceMappingURL=web-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-store.js","sourceRoot":"","sources":["../../../../src/commands/worker/backends/web-store.ts"],"names":[],"mappings":"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"}