@codetreker/daynight 0.25.4 → 0.26.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 (170) hide show
  1. package/README.md +108 -4
  2. package/config.example.yml +3 -0
  3. package/dist/api/client.js +2 -2
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/parse.js +14 -2
  6. package/dist/api/parse.js.map +1 -1
  7. package/dist/api/types.d.ts +4 -1
  8. package/dist/api/worker-mode.d.ts +6 -0
  9. package/dist/api/worker-mode.js +14 -0
  10. package/dist/api/worker-mode.js.map +1 -0
  11. package/dist/cli/commands.js +2 -0
  12. package/dist/cli/commands.js.map +1 -1
  13. package/dist/commands/controller/command-controls.d.ts +4 -0
  14. package/dist/commands/controller/command-controls.js +33 -0
  15. package/dist/commands/controller/command-controls.js.map +1 -0
  16. package/dist/commands/controller/definition.d.ts +3 -0
  17. package/dist/commands/controller/definition.js +22 -0
  18. package/dist/commands/controller/definition.js.map +1 -0
  19. package/dist/commands/controller/independent.d.ts +3 -0
  20. package/dist/commands/controller/independent.js +344 -0
  21. package/dist/commands/controller/independent.js.map +1 -0
  22. package/dist/commands/controller/index.d.ts +12 -0
  23. package/dist/commands/controller/index.js +73 -0
  24. package/dist/commands/controller/index.js.map +1 -0
  25. package/dist/commands/controller/launch-ticket.d.ts +49 -0
  26. package/dist/commands/controller/launch-ticket.js +99 -0
  27. package/dist/commands/controller/launch-ticket.js.map +1 -0
  28. package/dist/commands/controller/lifecycle-store.d.ts +84 -0
  29. package/dist/commands/controller/lifecycle-store.js +278 -0
  30. package/dist/commands/controller/lifecycle-store.js.map +1 -0
  31. package/dist/commands/controller/local-client.d.ts +44 -0
  32. package/dist/commands/controller/local-client.js +75 -0
  33. package/dist/commands/controller/local-client.js.map +1 -0
  34. package/dist/commands/controller/local-content.d.ts +23 -0
  35. package/dist/commands/controller/local-content.js +103 -0
  36. package/dist/commands/controller/local-content.js.map +1 -0
  37. package/dist/commands/controller/process-proof.d.ts +13 -0
  38. package/dist/commands/controller/process-proof.js +121 -0
  39. package/dist/commands/controller/process-proof.js.map +1 -0
  40. package/dist/commands/controller/providers/claude.d.ts +2 -0
  41. package/dist/commands/controller/providers/claude.js +470 -0
  42. package/dist/commands/controller/providers/claude.js.map +1 -0
  43. package/dist/commands/controller/providers/codex.d.ts +2 -0
  44. package/dist/commands/controller/providers/codex.js +254 -0
  45. package/dist/commands/controller/providers/codex.js.map +1 -0
  46. package/dist/commands/controller/providers/controls-claude.d.ts +26 -0
  47. package/dist/commands/controller/providers/controls-claude.js +138 -0
  48. package/dist/commands/controller/providers/controls-claude.js.map +1 -0
  49. package/dist/commands/controller/providers/controls-codex.d.ts +38 -0
  50. package/dist/commands/controller/providers/controls-codex.js +199 -0
  51. package/dist/commands/controller/providers/controls-codex.js.map +1 -0
  52. package/dist/commands/controller/providers/controls-copilot.d.ts +20 -0
  53. package/dist/commands/controller/providers/controls-copilot.js +143 -0
  54. package/dist/commands/controller/providers/controls-copilot.js.map +1 -0
  55. package/dist/commands/controller/providers/controls.d.ts +21 -0
  56. package/dist/commands/controller/providers/controls.js +53 -0
  57. package/dist/commands/controller/providers/controls.js.map +1 -0
  58. package/dist/commands/controller/providers/copilot-interactions.d.ts +47 -0
  59. package/dist/commands/controller/providers/copilot-interactions.js +295 -0
  60. package/dist/commands/controller/providers/copilot-interactions.js.map +1 -0
  61. package/dist/commands/controller/providers/copilot-projection.d.ts +11 -0
  62. package/dist/commands/controller/providers/copilot-projection.js +93 -0
  63. package/dist/commands/controller/providers/copilot-projection.js.map +1 -0
  64. package/dist/commands/controller/providers/copilot-runtime.d.ts +9 -0
  65. package/dist/commands/controller/providers/copilot-runtime.js +127 -0
  66. package/dist/commands/controller/providers/copilot-runtime.js.map +1 -0
  67. package/dist/commands/controller/providers/copilot.d.ts +2 -0
  68. package/dist/commands/controller/providers/copilot.js +309 -0
  69. package/dist/commands/controller/providers/copilot.js.map +1 -0
  70. package/dist/commands/controller/providers/interactions.d.ts +3 -0
  71. package/dist/commands/controller/providers/interactions.js +79 -0
  72. package/dist/commands/controller/providers/interactions.js.map +1 -0
  73. package/dist/commands/controller/providers/native-rpc.d.ts +28 -0
  74. package/dist/commands/controller/providers/native-rpc.js +85 -0
  75. package/dist/commands/controller/providers/native-rpc.js.map +1 -0
  76. package/dist/commands/controller/providers/projection.d.ts +23 -0
  77. package/dist/commands/controller/providers/projection.js +99 -0
  78. package/dist/commands/controller/providers/projection.js.map +1 -0
  79. package/dist/commands/controller/providers/turns.d.ts +7 -0
  80. package/dist/commands/controller/providers/turns.js +21 -0
  81. package/dist/commands/controller/providers/turns.js.map +1 -0
  82. package/dist/commands/controller/providers/types.d.ts +44 -0
  83. package/dist/commands/controller/providers/types.js +2 -0
  84. package/dist/commands/controller/providers/types.js.map +1 -0
  85. package/dist/commands/controller/recovery.d.ts +6 -0
  86. package/dist/commands/controller/recovery.js +22 -0
  87. package/dist/commands/controller/recovery.js.map +1 -0
  88. package/dist/commands/controller/relay.d.ts +18 -0
  89. package/dist/commands/controller/relay.js +299 -0
  90. package/dist/commands/controller/relay.js.map +1 -0
  91. package/dist/commands/controller/resume.d.ts +18 -0
  92. package/dist/commands/controller/resume.js +193 -0
  93. package/dist/commands/controller/resume.js.map +1 -0
  94. package/dist/commands/controller/runtime.d.ts +5 -0
  95. package/dist/commands/controller/runtime.js +455 -0
  96. package/dist/commands/controller/runtime.js.map +1 -0
  97. package/dist/commands/controller/windows-job.d.ts +3 -0
  98. package/dist/commands/controller/windows-job.js +59 -0
  99. package/dist/commands/controller/windows-job.js.map +1 -0
  100. package/dist/commands/controller/wire-display.d.ts +5 -0
  101. package/dist/commands/controller/wire-display.js +11 -0
  102. package/dist/commands/controller/wire-display.js.map +1 -0
  103. package/dist/commands/worker/backend.d.ts +7 -0
  104. package/dist/commands/worker/backend.js +7 -0
  105. package/dist/commands/worker/backend.js.map +1 -0
  106. package/dist/commands/worker/backends/grant-renewal.d.ts +13 -0
  107. package/dist/commands/worker/backends/grant-renewal.js +42 -0
  108. package/dist/commands/worker/backends/grant-renewal.js.map +1 -0
  109. package/dist/commands/worker/backends/session-api.d.ts +66 -0
  110. package/dist/commands/worker/backends/session-api.js +84 -0
  111. package/dist/commands/worker/backends/session-api.js.map +1 -0
  112. package/dist/commands/worker/backends/web-process.d.ts +79 -0
  113. package/dist/commands/worker/backends/web-process.js +156 -0
  114. package/dist/commands/worker/backends/web-process.js.map +1 -0
  115. package/dist/commands/worker/backends/web-store.d.ts +49 -0
  116. package/dist/commands/worker/backends/web-store.js +323 -0
  117. package/dist/commands/worker/backends/web-store.js.map +1 -0
  118. package/dist/commands/worker/backends/web-types.d.ts +83 -0
  119. package/dist/commands/worker/backends/web-types.js +3 -0
  120. package/dist/commands/worker/backends/web-types.js.map +1 -0
  121. package/dist/commands/worker/backends/web.d.ts +26 -0
  122. package/dist/commands/worker/backends/web.js +178 -0
  123. package/dist/commands/worker/backends/web.js.map +1 -0
  124. package/dist/commands/worker/config.js +12 -5
  125. package/dist/commands/worker/config.js.map +1 -1
  126. package/dist/commands/worker/control.d.ts +2 -0
  127. package/dist/commands/worker/control.js +11 -4
  128. package/dist/commands/worker/control.js.map +1 -1
  129. package/dist/commands/worker/coordinator.d.ts +7 -0
  130. package/dist/commands/worker/coordinator.js +138 -19
  131. package/dist/commands/worker/coordinator.js.map +1 -1
  132. package/dist/commands/worker/herdr/agents.js +5 -4
  133. package/dist/commands/worker/herdr/agents.js.map +1 -1
  134. package/dist/commands/worker/herdr/arguments.js +9 -4
  135. package/dist/commands/worker/herdr/arguments.js.map +1 -1
  136. package/dist/commands/worker/herdr/claude-input.d.ts +2 -0
  137. package/dist/commands/worker/herdr/claude-input.js +20 -0
  138. package/dist/commands/worker/herdr/claude-input.js.map +1 -0
  139. package/dist/commands/worker/herdr/instance.js +1 -1
  140. package/dist/commands/worker/herdr/instance.js.map +1 -1
  141. package/dist/commands/worker/herdr/preflight.d.ts +1 -1
  142. package/dist/commands/worker/herdr/preflight.js +31 -10
  143. package/dist/commands/worker/herdr/preflight.js.map +1 -1
  144. package/dist/commands/worker/herdr.js +5 -1
  145. package/dist/commands/worker/herdr.js.map +1 -1
  146. package/dist/commands/worker/prompts.js +5 -1
  147. package/dist/commands/worker/prompts.js.map +1 -1
  148. package/dist/commands/worker/repositories.js +2 -2
  149. package/dist/commands/worker/repositories.js.map +1 -1
  150. package/dist/commands/worker/runtime.js +62 -10
  151. package/dist/commands/worker/runtime.js.map +1 -1
  152. package/dist/commands/worker/setup-environment.d.ts +2 -1
  153. package/dist/commands/worker/setup-environment.js +10 -4
  154. package/dist/commands/worker/setup-environment.js.map +1 -1
  155. package/dist/commands/worker/setup.js +5 -5
  156. package/dist/commands/worker/setup.js.map +1 -1
  157. package/dist/commands/worker/store.d.ts +2 -1
  158. package/dist/commands/worker/store.js +19 -9
  159. package/dist/commands/worker/store.js.map +1 -1
  160. package/dist/commands/worker/types.d.ts +4 -1
  161. package/dist/session/controller-protocol.d.ts +245 -0
  162. package/dist/session/controller-protocol.js +218 -0
  163. package/dist/session/controller-protocol.js.map +1 -0
  164. package/dist/session/controls.d.ts +28 -0
  165. package/dist/session/controls.js +37 -0
  166. package/dist/session/controls.js.map +1 -0
  167. package/dist/session/protocol.d.ts +290 -0
  168. package/dist/session/protocol.js +307 -0
  169. package/dist/session/protocol.js.map +1 -0
  170. package/package.json +7 -2
@@ -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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"}
@@ -0,0 +1,83 @@
1
+ import type { InitialInputState } from "../../../session/protocol.js";
2
+ import type { ControllerSnapshot } from "../../controller/lifecycle-store.js";
3
+ import type { ProcessProof } from "../../controller/process-proof.js";
4
+ import type { WorkerPhase } from "../../../api/types.js";
5
+ import type { ClaimIdentity, ExecutionConfiguration, ResourceOwner, WorktreeBinding } from "../types.js";
6
+ export type ExecutionSummary = {
7
+ version: string;
8
+ herdr: null;
9
+ nativeSessionId: string | null;
10
+ phase: WorkerPhase;
11
+ submission: "unknown" | "confirmed" | "rejected";
12
+ };
13
+ export type RecoveryState = {
14
+ count: number;
15
+ pauseReason: string | null;
16
+ retryAuthorized: boolean;
17
+ };
18
+ export type CleanupState = {
19
+ kind: "terminal" | "shutdown";
20
+ startedAt: number;
21
+ deadline: number;
22
+ input: "not-submitted" | "unknown" | "submitted" | "rejected" | "unavailable";
23
+ baseline: {
24
+ stateChangeSeq: number;
25
+ completionSeq: number;
26
+ } | null;
27
+ result: "completed" | "timed-out" | "failed" | "unavailable" | null;
28
+ error: string | null;
29
+ agentStopped: boolean;
30
+ workspaceClosed: boolean | null;
31
+ mode?: "web";
32
+ backendResourcesClosed?: boolean;
33
+ worktreeDeleted: boolean;
34
+ };
35
+ export type WebExecutionState = {
36
+ executionId: string;
37
+ registrationId: string;
38
+ controllerId: string;
39
+ controllerInstanceId: string;
40
+ launchId: string;
41
+ sessionId: string | null;
42
+ executionGeneration: string;
43
+ initialOperationId: string;
44
+ initialPrompt: string | null;
45
+ launchSubmission: "not-submitted" | "unknown" | "acknowledged";
46
+ controllerProcess: ProcessProof | null;
47
+ nativeProcesses: readonly ProcessProof[];
48
+ restartAfterShutdown: boolean;
49
+ cleanupOperationId: string | null;
50
+ ticketPath: string | null;
51
+ nativeHome: string | null;
52
+ summary: ExecutionSummary | null;
53
+ initialInputState: InitialInputState;
54
+ activity: ControllerSnapshot["activity"];
55
+ };
56
+ export type LocalTask = ResourceOwner & {
57
+ serverOrigin: string;
58
+ workerId: string;
59
+ userId: string | null;
60
+ status: "pending" | "active" | "done";
61
+ repoUrl: string;
62
+ repositoryPath: string;
63
+ configuration: ExecutionConfiguration | null;
64
+ resources: {
65
+ mode: "web";
66
+ worktree: WorktreeBinding | null;
67
+ herdr: null;
68
+ nativeSession: {
69
+ source: "controller";
70
+ sessionId: string;
71
+ } | null;
72
+ };
73
+ recovery: RecoveryState;
74
+ cleanup: CleanupState | null;
75
+ control: null;
76
+ webExecution: WebExecutionState | null;
77
+ nativeExecution: null;
78
+ createdAt: number;
79
+ updatedAt: number;
80
+ };
81
+ export type { ClaimIdentity, WorktreeBinding };
82
+ export declare const taskAgentControlMode: (_task: LocalTask) => "web";
83
+ export declare const backendResourcesClosed: (cleanup: CleanupState) => boolean;
@@ -0,0 +1,3 @@
1
+ export const taskAgentControlMode = (_task) => "web";
2
+ export const backendResourcesClosed = (cleanup) => cleanup.backendResourcesClosed === true;
3
+ //# sourceMappingURL=web-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-types.js","sourceRoot":"","sources":["../../../../src/commands/worker/backends/web-types.ts"],"names":[],"mappings":"AAuCA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAgB,EAAS,EAAE,CAAC,KAAK,CAAC;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAqB,EAAW,EAAE,CAAC,OAAO,CAAC,sBAAsB,KAAK,IAAI,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { requestController } from "../../controller/local-client.js";
2
+ import { type WorkerGitManager } from "../execution.js";
3
+ import { type CleanupState, type LocalTask } from "./web-types.js";
4
+ import type { WebExecutionStore } from "./web-store.js";
5
+ import type { TaskPlatform } from "../../../api/types.js";
6
+ import type { createWebControllerLauncher } from "./web-process.js";
7
+ export type WebBackendOptions = {
8
+ homeDirectory: string;
9
+ store: WebExecutionStore;
10
+ git: WorkerGitManager;
11
+ launcher: ReturnType<typeof createWebControllerLauncher>;
12
+ platform: TaskPlatform;
13
+ buildPrompt: (task: LocalTask, platform: TaskPlatform) => string;
14
+ emit: (event: {
15
+ kind: string;
16
+ message: string;
17
+ task?: LocalTask;
18
+ }) => void;
19
+ now: () => number;
20
+ request?: typeof requestController;
21
+ };
22
+ export declare const createWebExecutionBackend: (options: WebBackendOptions) => {
23
+ advance: (input: LocalTask, signal: AbortSignal) => Promise<LocalTask>;
24
+ cleanup: (input: LocalTask, kind: CleanupState["kind"], deadline: number, signal?: AbortSignal, immediateStop?: boolean) => Promise<LocalTask>;
25
+ };
26
+ export type WebExecutionBackend = ReturnType<typeof createWebExecutionBackend>;