@evalops/maestro 0.10.21 → 0.10.23

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 (154) hide show
  1. package/dist/agent/agent.d.ts +1 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/agent.js +15 -4
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/swarm/executor.d.ts.map +1 -1
  6. package/dist/agent/swarm/executor.js +68 -3
  7. package/dist/agent/swarm/executor.js.map +1 -1
  8. package/dist/agent/swarm/types.d.ts +3 -0
  9. package/dist/agent/swarm/types.d.ts.map +1 -1
  10. package/dist/agent/swarm/types.js.map +1 -1
  11. package/dist/agent/transport.d.ts.map +1 -1
  12. package/dist/agent/transport.js +7 -1
  13. package/dist/agent/transport.js.map +1 -1
  14. package/dist/audit/logger.d.ts +1 -1
  15. package/dist/bootstrap/tools-setup.d.ts.map +1 -1
  16. package/dist/bootstrap/tools-setup.js +3 -2
  17. package/dist/bootstrap/tools-setup.js.map +1 -1
  18. package/dist/cli/commands/a2a.d.ts.map +1 -1
  19. package/dist/cli/commands/a2a.js +141 -8
  20. package/dist/cli/commands/a2a.js.map +1 -1
  21. package/dist/cli/commands/codex.d.ts.map +1 -1
  22. package/dist/cli/commands/codex.js +4 -3
  23. package/dist/cli/commands/codex.js.map +1 -1
  24. package/dist/cli/commands/hosted-runner.d.ts +1 -0
  25. package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
  26. package/dist/cli/commands/hosted-runner.js +31 -2
  27. package/dist/cli/commands/hosted-runner.js.map +1 -1
  28. package/dist/cli/commands/run.d.ts.map +1 -1
  29. package/dist/cli/commands/run.js +2 -9
  30. package/dist/cli/commands/run.js.map +1 -1
  31. package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -1
  32. package/dist/cli-tui/commands/a2a-handlers.js +55 -0
  33. package/dist/cli-tui/commands/a2a-handlers.js.map +1 -1
  34. package/dist/cli.js +3925 -2024
  35. package/dist/codex/compatibility.d.ts +17 -1
  36. package/dist/codex/compatibility.d.ts.map +1 -1
  37. package/dist/codex/compatibility.js +57 -1
  38. package/dist/codex/compatibility.js.map +1 -1
  39. package/dist/guardian/config.d.ts +8 -6
  40. package/dist/guardian/config.d.ts.map +1 -1
  41. package/dist/guardian/config.js +33 -7
  42. package/dist/guardian/config.js.map +1 -1
  43. package/dist/guardian/runner.d.ts.map +1 -1
  44. package/dist/guardian/runner.js +54 -9
  45. package/dist/guardian/runner.js.map +1 -1
  46. package/dist/mcp/config.d.ts.map +1 -1
  47. package/dist/mcp/config.js +2 -0
  48. package/dist/mcp/config.js.map +1 -1
  49. package/dist/mcp/fathom-cua.d.ts +3 -0
  50. package/dist/mcp/fathom-cua.d.ts.map +1 -0
  51. package/dist/mcp/fathom-cua.js +158 -0
  52. package/dist/mcp/fathom-cua.js.map +1 -0
  53. package/dist/mcp/index.d.ts +1 -0
  54. package/dist/mcp/index.d.ts.map +1 -1
  55. package/dist/mcp/index.js +1 -0
  56. package/dist/mcp/index.js.map +1 -1
  57. package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts +58 -0
  58. package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts.map +1 -0
  59. package/dist/node_modules/@evalops/contracts/dist/artifacts.js +191 -0
  60. package/dist/node_modules/@evalops/contracts/dist/artifacts.js.map +1 -0
  61. package/dist/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +10 -10
  62. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
  63. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  64. package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
  65. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  66. package/dist/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +1 -1
  67. package/dist/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +3 -3
  68. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  69. package/dist/node_modules/@evalops/tui/package.json +1 -1
  70. package/dist/platform/a2a-cockpit.d.ts +90 -0
  71. package/dist/platform/a2a-cockpit.d.ts.map +1 -0
  72. package/dist/platform/a2a-cockpit.js +302 -0
  73. package/dist/platform/a2a-cockpit.js.map +1 -0
  74. package/dist/platform/a2a-fleet.d.ts +14 -0
  75. package/dist/platform/a2a-fleet.d.ts.map +1 -1
  76. package/dist/platform/a2a-fleet.js +66 -1
  77. package/dist/platform/a2a-fleet.js.map +1 -1
  78. package/dist/platform/a2a-ownership.d.ts +27 -0
  79. package/dist/platform/a2a-ownership.d.ts.map +1 -0
  80. package/dist/platform/a2a-ownership.js +149 -0
  81. package/dist/platform/a2a-ownership.js.map +1 -0
  82. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  83. package/dist/platform/a2a-task-ledger.js +29 -5
  84. package/dist/platform/a2a-task-ledger.js.map +1 -1
  85. package/dist/server/agent-trajectory-replay-lab.d.ts +36 -0
  86. package/dist/server/agent-trajectory-replay-lab.d.ts.map +1 -0
  87. package/dist/server/agent-trajectory-replay-lab.js +48 -0
  88. package/dist/server/agent-trajectory-replay-lab.js.map +1 -0
  89. package/dist/server/any-agent-control-plane-proof.d.ts +42 -0
  90. package/dist/server/any-agent-control-plane-proof.d.ts.map +1 -0
  91. package/dist/server/any-agent-control-plane-proof.js +175 -0
  92. package/dist/server/any-agent-control-plane-proof.js.map +1 -0
  93. package/dist/server/app-context.d.ts +1 -0
  94. package/dist/server/app-context.d.ts.map +1 -1
  95. package/dist/server/app-context.js.map +1 -1
  96. package/dist/server/handlers/a2a-cockpit.d.ts +3 -0
  97. package/dist/server/handlers/a2a-cockpit.d.ts.map +1 -0
  98. package/dist/server/handlers/a2a-cockpit.js +71 -0
  99. package/dist/server/handlers/a2a-cockpit.js.map +1 -0
  100. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  101. package/dist/server/handlers/headless-sessions.js +17 -2
  102. package/dist/server/handlers/headless-sessions.js.map +1 -1
  103. package/dist/server/handlers/session-artifacts.d.ts.map +1 -1
  104. package/dist/server/handlers/session-artifacts.js +14 -58
  105. package/dist/server/handlers/session-artifacts.js.map +1 -1
  106. package/dist/server/handlers/session-replay-lab.d.ts +13 -0
  107. package/dist/server/handlers/session-replay-lab.d.ts.map +1 -0
  108. package/dist/server/handlers/session-replay-lab.js +80 -0
  109. package/dist/server/handlers/session-replay-lab.js.map +1 -0
  110. package/dist/server/handlers/stats.js +1 -1
  111. package/dist/server/handlers/stats.js.map +1 -1
  112. package/dist/server/handlers/status.d.ts +44 -3
  113. package/dist/server/handlers/status.d.ts.map +1 -1
  114. package/dist/server/handlers/status.js +227 -17
  115. package/dist/server/handlers/status.js.map +1 -1
  116. package/dist/server/headless-runtime-service.d.ts +17 -0
  117. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  118. package/dist/server/headless-runtime-service.js +143 -3
  119. package/dist/server/headless-runtime-service.js.map +1 -1
  120. package/dist/server/hosted-agent-runtime-progress.d.ts +17 -0
  121. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  122. package/dist/server/hosted-agent-runtime-progress.js +352 -15
  123. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  124. package/dist/server/routes.d.ts.map +1 -1
  125. package/dist/server/routes.js +14 -0
  126. package/dist/server/routes.js.map +1 -1
  127. package/dist/services/intelligent-router/index.d.ts +1 -1
  128. package/dist/services/intelligent-router/index.d.ts.map +1 -1
  129. package/dist/services/intelligent-router/index.js +1 -1
  130. package/dist/services/intelligent-router/index.js.map +1 -1
  131. package/dist/services/intelligent-router/normalize.d.ts +10 -2
  132. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  133. package/dist/services/intelligent-router/normalize.js +20 -1
  134. package/dist/services/intelligent-router/normalize.js.map +1 -1
  135. package/dist/services/intelligent-router/service.d.ts.map +1 -1
  136. package/dist/services/intelligent-router/service.js +35 -0
  137. package/dist/services/intelligent-router/service.js.map +1 -1
  138. package/dist/services/intelligent-router/types.d.ts +13 -0
  139. package/dist/services/intelligent-router/types.d.ts.map +1 -1
  140. package/dist/services/intelligent-router/types.js +1 -0
  141. package/dist/services/intelligent-router/types.js.map +1 -1
  142. package/dist/telemetry/cli-command-aggregator.d.ts +1 -0
  143. package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -1
  144. package/dist/telemetry/cli-command-aggregator.js +23 -0
  145. package/dist/telemetry/cli-command-aggregator.js.map +1 -1
  146. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  147. package/dist/telemetry/maestro-event-bus.js +11 -5
  148. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  149. package/dist/telemetry/maestro-event-catalog.d.ts +15 -1
  150. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  151. package/dist/telemetry/maestro-event-catalog.js +30 -0
  152. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  153. package/dist/version.json +2 -2
  154. package/package.json +289 -283
@@ -1,14 +1,216 @@
1
1
  import { execSync } from "node:child_process";
2
2
  import { existsSync } from "node:fs";
3
3
  import { join } from "node:path";
4
- import { isDatabaseConfigured, isDbAvailable } from "../../db/client.js";
4
+ import { isDatabaseConfigured, testConnection } from "../../db/client.js";
5
5
  import { getAsyncHookCount, getHookConcurrencySnapshot, } from "../../hooks/index.js";
6
6
  import { getProjectOnboardingState, markProjectOnboardingSeen, } from "../../onboarding/project-onboarding.js";
7
7
  import { backgroundTaskManager } from "../../tools/background-tasks.js";
8
8
  import { respondWithApiError, sendJson } from "../server-utils.js";
9
- export function getStatusSnapshot(options = {}) {
9
+ const DATABASE_STATUS_CACHE_TTL_MS = 5_000;
10
+ const DATABASE_STATUS_PROBE_TIMEOUT_MS = 500;
11
+ const DATABASE_STATUS_PROBE_RETRY_AFTER_MS = 30_000;
12
+ let databaseHealthCache = null;
13
+ let databaseHealthProbe = null;
14
+ let databaseHealthProbeStartedAt = 0;
15
+ let databaseHealthProbeGeneration = 0;
16
+ function startDatabaseHealthProbe() {
17
+ const now = Date.now();
18
+ if (databaseHealthProbe &&
19
+ now - databaseHealthProbeStartedAt < DATABASE_STATUS_PROBE_RETRY_AFTER_MS) {
20
+ return databaseHealthProbe;
21
+ }
22
+ const generation = databaseHealthProbeGeneration + 1;
23
+ databaseHealthProbeGeneration = generation;
24
+ databaseHealthProbeStartedAt = now;
25
+ const probe = testConnection()
26
+ .then((connected) => {
27
+ if (databaseHealthProbeGeneration === generation) {
28
+ databaseHealthCache = { connected, checkedAt: Date.now() };
29
+ }
30
+ return connected;
31
+ })
32
+ .catch(() => {
33
+ if (databaseHealthProbeGeneration === generation) {
34
+ databaseHealthCache = { connected: false, checkedAt: Date.now() };
35
+ }
36
+ return false;
37
+ })
38
+ .finally(() => {
39
+ if (databaseHealthProbe === probe) {
40
+ databaseHealthProbe = null;
41
+ databaseHealthProbeStartedAt = 0;
42
+ }
43
+ });
44
+ databaseHealthProbe = probe;
45
+ return probe;
46
+ }
47
+ async function waitForDatabaseProbe(probe, fallback) {
48
+ let timeout;
49
+ try {
50
+ return await Promise.race([
51
+ probe,
52
+ new Promise((resolve) => {
53
+ timeout = setTimeout(() => {
54
+ resolve(fallback);
55
+ }, DATABASE_STATUS_PROBE_TIMEOUT_MS);
56
+ if (typeof timeout === "object" && "unref" in timeout) {
57
+ timeout.unref();
58
+ }
59
+ }),
60
+ ]);
61
+ }
62
+ finally {
63
+ if (timeout) {
64
+ clearTimeout(timeout);
65
+ }
66
+ }
67
+ }
68
+ async function getDatabaseHealthSnapshot() {
69
+ const configured = isDatabaseConfigured();
70
+ if (!configured) {
71
+ return { configured: false, connected: false };
72
+ }
73
+ const now = Date.now();
74
+ if (databaseHealthCache &&
75
+ now - databaseHealthCache.checkedAt <= DATABASE_STATUS_CACHE_TTL_MS) {
76
+ return { configured: true, connected: databaseHealthCache.connected };
77
+ }
78
+ const connected = await waitForDatabaseProbe(startDatabaseHealthProbe(), false);
79
+ return { configured: true, connected };
80
+ }
81
+ export function resetStatusDatabaseHealthCacheForTests() {
82
+ databaseHealthCache = null;
83
+ databaseHealthProbe = null;
84
+ databaseHealthProbeStartedAt = 0;
85
+ databaseHealthProbeGeneration = 0;
86
+ }
87
+ function maxHealthLevel(levels) {
88
+ if (levels.includes("unhealthy"))
89
+ return "unhealthy";
90
+ if (levels.includes("degraded"))
91
+ return "degraded";
92
+ return "healthy";
93
+ }
94
+ function latencySlo(apiLatencyMs) {
95
+ const status = apiLatencyMs > 3000
96
+ ? "unhealthy"
97
+ : apiLatencyMs > 1000
98
+ ? "degraded"
99
+ : "healthy";
100
+ return {
101
+ id: "api_latency",
102
+ label: "API latency",
103
+ status,
104
+ target: "p50 snapshot <= 1000ms",
105
+ observed: `${Math.max(0, Math.round(apiLatencyMs))}ms`,
106
+ ...(status === "healthy"
107
+ ? {}
108
+ : { detail: "Status endpoint latency exceeded the local operator SLO." }),
109
+ };
110
+ }
111
+ function databaseSlo(database) {
112
+ if (!database.configured) {
113
+ return {
114
+ id: "database",
115
+ label: "Database",
116
+ status: "healthy",
117
+ target: "connected when configured",
118
+ observed: "unconfigured",
119
+ detail: "Local mode does not require a database connection.",
120
+ };
121
+ }
122
+ if (database.reachable === false) {
123
+ return {
124
+ id: "database",
125
+ label: "Database",
126
+ status: "unhealthy",
127
+ target: "reachable when configured",
128
+ observed: "unreachable",
129
+ detail: "Configured database failed an explicit reachability check.",
130
+ };
131
+ }
132
+ if (database.connected || database.reachable === true) {
133
+ return {
134
+ id: "database",
135
+ label: "Database",
136
+ status: "healthy",
137
+ target: "reachable when configured",
138
+ observed: database.connected ? "connected" : "reachable",
139
+ };
140
+ }
141
+ if (database.initialized === false) {
142
+ return {
143
+ id: "database",
144
+ label: "Database",
145
+ status: "healthy",
146
+ target: "reachable when configured",
147
+ observed: "configured, idle",
148
+ detail: "Database is configured, but no query has initialized the lazy client yet.",
149
+ };
150
+ }
151
+ return {
152
+ id: "database",
153
+ label: "Database",
154
+ status: "unhealthy",
155
+ target: "reachable when configured",
156
+ observed: "disconnected",
157
+ detail: "Configured database is not currently reachable.",
158
+ };
159
+ }
160
+ function backgroundTaskSlo(backgroundTasks) {
161
+ const failed = backgroundTasks?.failed ?? 0;
162
+ const restarting = backgroundTasks?.restarting ?? 0;
163
+ const status = failed > 0 ? "unhealthy" : restarting > 0 ? "degraded" : "healthy";
164
+ return {
165
+ id: "background_tasks",
166
+ label: "Background tasks",
167
+ status,
168
+ target: "0 failed, 0 restarting",
169
+ observed: `${backgroundTasks?.running ?? 0} running, ${failed} failed, ${restarting} restarting`,
170
+ ...(status === "healthy"
171
+ ? {}
172
+ : { detail: "Background task supervisor has unhealthy work." }),
173
+ };
174
+ }
175
+ function hookQueueSlo(hooks) {
176
+ const queued = hooks.concurrency.queued;
177
+ const active = hooks.concurrency.active;
178
+ const max = hooks.concurrency.max;
179
+ const status = queued > max ? "unhealthy" : queued > 0 ? "degraded" : "healthy";
180
+ return {
181
+ id: "hook_queue",
182
+ label: "Hook queue",
183
+ status,
184
+ target: "0 queued hooks",
185
+ observed: `${active}/${max} active, ${queued} queued, ${hooks.asyncInFlight} async`,
186
+ ...(status === "healthy"
187
+ ? {}
188
+ : {
189
+ detail: "Hook execution is backing up behind the concurrency gate.",
190
+ }),
191
+ };
192
+ }
193
+ export function buildRunHealthSnapshot(input) {
194
+ const slos = [
195
+ latencySlo(input.apiLatencyMs),
196
+ databaseSlo(input.database),
197
+ backgroundTaskSlo(input.backgroundTasks),
198
+ hookQueueSlo(input.hooks),
199
+ ];
200
+ const diagnostics = slos
201
+ .filter((slo) => slo.status !== "healthy")
202
+ .map((slo) => `${slo.label}: ${slo.observed}`);
203
+ return {
204
+ status: maxHealthLevel(slos.map((slo) => slo.status)),
205
+ slos,
206
+ diagnostics,
207
+ generatedAt: new Date(input.generatedAt ?? Date.now()).toISOString(),
208
+ };
209
+ }
210
+ export async function getStatusSnapshot(options = {}) {
10
211
  const startedAt = Date.now();
11
212
  const cwd = process.cwd();
213
+ const database = await getDatabaseHealthSnapshot();
12
214
  let gitBranch = null;
13
215
  let gitStatus = null;
14
216
  try {
@@ -34,6 +236,16 @@ export function getStatusSnapshot(options = {}) {
34
236
  catch {
35
237
  // Not a git repository or git not available
36
238
  }
239
+ const backgroundTasks = backgroundTaskManager.getHealthSnapshot({
240
+ maxEntries: 5,
241
+ logLines: 2,
242
+ });
243
+ const hooks = {
244
+ asyncInFlight: getAsyncHookCount(),
245
+ concurrency: getHookConcurrencySnapshot(),
246
+ };
247
+ const lastUpdated = Date.now();
248
+ const lastLatencyMs = lastUpdated - startedAt;
37
249
  return {
38
250
  cwd,
39
251
  git: gitBranch ? { branch: gitBranch, status: gitStatus } : null,
@@ -47,23 +259,21 @@ export function getStatusSnapshot(options = {}) {
47
259
  version: process.version,
48
260
  staticCacheMaxAgeSeconds: options.staticCacheMaxAge,
49
261
  },
50
- database: {
51
- configured: isDatabaseConfigured(),
52
- connected: isDbAvailable(),
53
- },
54
- backgroundTasks: backgroundTaskManager.getHealthSnapshot({
55
- maxEntries: 5,
56
- logLines: 2,
262
+ database,
263
+ backgroundTasks,
264
+ hooks,
265
+ runHealth: buildRunHealthSnapshot({
266
+ apiLatencyMs: lastLatencyMs,
267
+ backgroundTasks,
268
+ database,
269
+ hooks,
270
+ generatedAt: lastUpdated,
57
271
  }),
58
- hooks: {
59
- asyncInFlight: getAsyncHookCount(),
60
- concurrency: getHookConcurrencySnapshot(),
61
- },
62
- lastUpdated: Date.now(),
63
- lastLatencyMs: Date.now() - startedAt,
272
+ lastUpdated,
273
+ lastLatencyMs,
64
274
  };
65
275
  }
66
- export function handleStatus(req, res, cors, options = {}) {
276
+ export async function handleStatus(req, res, cors, options = {}) {
67
277
  try {
68
278
  const method = (req.method ?? "GET").toUpperCase();
69
279
  const url = new URL(req.url ?? "/api/status", "http://localhost");
@@ -73,7 +283,7 @@ export function handleStatus(req, res, cors, options = {}) {
73
283
  sendJson(res, 200, { success: true }, cors, req);
74
284
  return;
75
285
  }
76
- const status = getStatusSnapshot(options);
286
+ const status = await getStatusSnapshot(options);
77
287
  sendJson(res, 200, status, cors, req);
78
288
  }
79
289
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/server/handlers/status.ts"],"names":[],"mappings":"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","sourcesContent":["import { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { join } from \"node:path\";\nimport { isDatabaseConfigured, isDbAvailable } from \"../../db/client.js\";\nimport {\n\tgetAsyncHookCount,\n\tgetHookConcurrencySnapshot,\n} from \"../../hooks/index.js\";\nimport {\n\tgetProjectOnboardingState,\n\tmarkProjectOnboardingSeen,\n} from \"../../onboarding/project-onboarding.js\";\nimport { backgroundTaskManager } from \"../../tools/background-tasks.js\";\nimport { respondWithApiError, sendJson } from \"../server-utils.js\";\n\nexport function getStatusSnapshot(\n\toptions: { staticCacheMaxAge?: number } = {},\n) {\n\tconst startedAt = Date.now();\n\tconst cwd = process.cwd();\n\n\tlet gitBranch = null;\n\tlet gitStatus = null;\n\ttry {\n\t\tgitBranch = execSync(\"git rev-parse --abbrev-ref HEAD\", {\n\t\t\tcwd,\n\t\t\tencoding: \"utf-8\",\n\t\t\tstdio: [\"pipe\", \"pipe\", \"ignore\"],\n\t\t}).trim();\n\n\t\tconst status = execSync(\"git status --porcelain\", {\n\t\t\tcwd,\n\t\t\tencoding: \"utf-8\",\n\t\t\tstdio: [\"pipe\", \"pipe\", \"ignore\"],\n\t\t});\n\t\tconst lines = status.trim().split(\"\\n\").filter(Boolean);\n\t\tgitStatus = {\n\t\t\tmodified: lines.filter((l: string) => l.startsWith(\" M\")).length,\n\t\t\tadded: lines.filter((l: string) => l.startsWith(\"A \")).length,\n\t\t\tdeleted: lines.filter((l: string) => l.startsWith(\" D\")).length,\n\t\t\tuntracked: lines.filter((l: string) => l.startsWith(\"??\")).length,\n\t\t\ttotal: lines.length,\n\t\t};\n\t} catch {\n\t\t// Not a git repository or git not available\n\t}\n\n\treturn {\n\t\tcwd,\n\t\tgit: gitBranch ? { branch: gitBranch, status: gitStatus } : null,\n\t\tcontext: {\n\t\t\tagentMd: existsSync(join(cwd, \"AGENT.md\")),\n\t\t\tclaudeMd: existsSync(join(cwd, \"CLAUDE.md\")),\n\t\t},\n\t\tonboarding: getProjectOnboardingState(cwd),\n\t\tserver: {\n\t\t\tuptime: process.uptime(),\n\t\t\tversion: process.version,\n\t\t\tstaticCacheMaxAgeSeconds: options.staticCacheMaxAge,\n\t\t},\n\t\tdatabase: {\n\t\t\tconfigured: isDatabaseConfigured(),\n\t\t\tconnected: isDbAvailable(),\n\t\t},\n\t\tbackgroundTasks: backgroundTaskManager.getHealthSnapshot({\n\t\t\tmaxEntries: 5,\n\t\t\tlogLines: 2,\n\t\t}),\n\t\thooks: {\n\t\t\tasyncInFlight: getAsyncHookCount(),\n\t\t\tconcurrency: getHookConcurrencySnapshot(),\n\t\t},\n\t\tlastUpdated: Date.now(),\n\t\tlastLatencyMs: Date.now() - startedAt,\n\t};\n}\n\nexport function handleStatus(\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tcors: Record<string, string>,\n\toptions: { staticCacheMaxAge?: number } = {},\n) {\n\ttry {\n\t\tconst method = (req.method ?? \"GET\").toUpperCase();\n\t\tconst url = new URL(req.url ?? \"/api/status\", \"http://localhost\");\n\t\tconst action = url.searchParams.get(\"action\");\n\n\t\tif (method === \"POST\" && action === \"mark-onboarding-seen\") {\n\t\t\tmarkProjectOnboardingSeen(process.cwd());\n\t\t\tsendJson(res, 200, { success: true }, cors, req);\n\t\t\treturn;\n\t\t}\n\n\t\tconst status = getStatusSnapshot(options);\n\t\tsendJson(res, 200, status, cors, req);\n\t} catch (error) {\n\t\trespondWithApiError(res, error, 500, cors, req);\n\t}\n}\n"]}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/server/handlers/status.ts"],"names":[],"mappings":"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","sourcesContent":["import { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { join } from \"node:path\";\nimport { isDatabaseConfigured, testConnection } from \"../../db/client.js\";\nimport {\n\tgetAsyncHookCount,\n\tgetHookConcurrencySnapshot,\n} from \"../../hooks/index.js\";\nimport {\n\tgetProjectOnboardingState,\n\tmarkProjectOnboardingSeen,\n} from \"../../onboarding/project-onboarding.js\";\nimport { backgroundTaskManager } from \"../../tools/background-tasks.js\";\nimport { respondWithApiError, sendJson } from \"../server-utils.js\";\n\nconst DATABASE_STATUS_CACHE_TTL_MS = 5_000;\nconst DATABASE_STATUS_PROBE_TIMEOUT_MS = 500;\nconst DATABASE_STATUS_PROBE_RETRY_AFTER_MS = 30_000;\n\nlet databaseHealthCache: { connected: boolean; checkedAt: number } | null =\n\tnull;\nlet databaseHealthProbe: Promise<boolean> | null = null;\nlet databaseHealthProbeStartedAt = 0;\nlet databaseHealthProbeGeneration = 0;\n\nfunction startDatabaseHealthProbe(): Promise<boolean> {\n\tconst now = Date.now();\n\tif (\n\t\tdatabaseHealthProbe &&\n\t\tnow - databaseHealthProbeStartedAt < DATABASE_STATUS_PROBE_RETRY_AFTER_MS\n\t) {\n\t\treturn databaseHealthProbe;\n\t}\n\n\tconst generation = databaseHealthProbeGeneration + 1;\n\tdatabaseHealthProbeGeneration = generation;\n\tdatabaseHealthProbeStartedAt = now;\n\tconst probe = testConnection()\n\t\t.then((connected) => {\n\t\t\tif (databaseHealthProbeGeneration === generation) {\n\t\t\t\tdatabaseHealthCache = { connected, checkedAt: Date.now() };\n\t\t\t}\n\t\t\treturn connected;\n\t\t})\n\t\t.catch(() => {\n\t\t\tif (databaseHealthProbeGeneration === generation) {\n\t\t\t\tdatabaseHealthCache = { connected: false, checkedAt: Date.now() };\n\t\t\t}\n\t\t\treturn false;\n\t\t})\n\t\t.finally(() => {\n\t\t\tif (databaseHealthProbe === probe) {\n\t\t\t\tdatabaseHealthProbe = null;\n\t\t\t\tdatabaseHealthProbeStartedAt = 0;\n\t\t\t}\n\t\t});\n\n\tdatabaseHealthProbe = probe;\n\treturn probe;\n}\n\nasync function waitForDatabaseProbe(\n\tprobe: Promise<boolean>,\n\tfallback: boolean,\n): Promise<boolean> {\n\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tprobe,\n\t\t\tnew Promise<boolean>((resolve) => {\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tresolve(fallback);\n\t\t\t\t}, DATABASE_STATUS_PROBE_TIMEOUT_MS);\n\t\t\t\tif (typeof timeout === \"object\" && \"unref\" in timeout) {\n\t\t\t\t\ttimeout.unref();\n\t\t\t\t}\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t}\n}\n\nasync function getDatabaseHealthSnapshot(): Promise<{\n\tconfigured: boolean;\n\tconnected: boolean;\n}> {\n\tconst configured = isDatabaseConfigured();\n\tif (!configured) {\n\t\treturn { configured: false, connected: false };\n\t}\n\n\tconst now = Date.now();\n\tif (\n\t\tdatabaseHealthCache &&\n\t\tnow - databaseHealthCache.checkedAt <= DATABASE_STATUS_CACHE_TTL_MS\n\t) {\n\t\treturn { configured: true, connected: databaseHealthCache.connected };\n\t}\n\n\tconst connected = await waitForDatabaseProbe(\n\t\tstartDatabaseHealthProbe(),\n\t\tfalse,\n\t);\n\treturn { configured: true, connected };\n}\n\nexport function resetStatusDatabaseHealthCacheForTests(): void {\n\tdatabaseHealthCache = null;\n\tdatabaseHealthProbe = null;\n\tdatabaseHealthProbeStartedAt = 0;\n\tdatabaseHealthProbeGeneration = 0;\n}\n\nexport type RunHealthLevel = \"healthy\" | \"degraded\" | \"unhealthy\";\n\nexport interface RunHealthSlo {\n\tid: string;\n\tlabel: string;\n\tstatus: RunHealthLevel;\n\ttarget: string;\n\tobserved: string;\n\tdetail?: string;\n}\n\nexport interface RunHealthSnapshot {\n\tstatus: RunHealthLevel;\n\tslos: RunHealthSlo[];\n\tdiagnostics: string[];\n\tgeneratedAt: string;\n}\n\nexport interface RunHealthInput {\n\tapiLatencyMs: number;\n\tbackgroundTasks: {\n\t\trunning?: number;\n\t\tfailed?: number;\n\t\trestarting?: number;\n\t} | null;\n\tdatabase: {\n\t\tconfigured: boolean;\n\t\tconnected: boolean;\n\t\tinitialized?: boolean;\n\t\treachable?: boolean;\n\t};\n\thooks: {\n\t\tasyncInFlight: number;\n\t\tconcurrency: {\n\t\t\tmax: number;\n\t\t\tactive: number;\n\t\t\tqueued: number;\n\t\t};\n\t};\n\tgeneratedAt?: number;\n}\n\nfunction maxHealthLevel(levels: RunHealthLevel[]): RunHealthLevel {\n\tif (levels.includes(\"unhealthy\")) return \"unhealthy\";\n\tif (levels.includes(\"degraded\")) return \"degraded\";\n\treturn \"healthy\";\n}\n\nfunction latencySlo(apiLatencyMs: number): RunHealthSlo {\n\tconst status =\n\t\tapiLatencyMs > 3000\n\t\t\t? \"unhealthy\"\n\t\t\t: apiLatencyMs > 1000\n\t\t\t\t? \"degraded\"\n\t\t\t\t: \"healthy\";\n\treturn {\n\t\tid: \"api_latency\",\n\t\tlabel: \"API latency\",\n\t\tstatus,\n\t\ttarget: \"p50 snapshot <= 1000ms\",\n\t\tobserved: `${Math.max(0, Math.round(apiLatencyMs))}ms`,\n\t\t...(status === \"healthy\"\n\t\t\t? {}\n\t\t\t: { detail: \"Status endpoint latency exceeded the local operator SLO.\" }),\n\t};\n}\n\nfunction databaseSlo(database: RunHealthInput[\"database\"]): RunHealthSlo {\n\tif (!database.configured) {\n\t\treturn {\n\t\t\tid: \"database\",\n\t\t\tlabel: \"Database\",\n\t\t\tstatus: \"healthy\",\n\t\t\ttarget: \"connected when configured\",\n\t\t\tobserved: \"unconfigured\",\n\t\t\tdetail: \"Local mode does not require a database connection.\",\n\t\t};\n\t}\n\tif (database.reachable === false) {\n\t\treturn {\n\t\t\tid: \"database\",\n\t\t\tlabel: \"Database\",\n\t\t\tstatus: \"unhealthy\",\n\t\t\ttarget: \"reachable when configured\",\n\t\t\tobserved: \"unreachable\",\n\t\t\tdetail: \"Configured database failed an explicit reachability check.\",\n\t\t};\n\t}\n\tif (database.connected || database.reachable === true) {\n\t\treturn {\n\t\t\tid: \"database\",\n\t\t\tlabel: \"Database\",\n\t\t\tstatus: \"healthy\",\n\t\t\ttarget: \"reachable when configured\",\n\t\t\tobserved: database.connected ? \"connected\" : \"reachable\",\n\t\t};\n\t}\n\tif (database.initialized === false) {\n\t\treturn {\n\t\t\tid: \"database\",\n\t\t\tlabel: \"Database\",\n\t\t\tstatus: \"healthy\",\n\t\t\ttarget: \"reachable when configured\",\n\t\t\tobserved: \"configured, idle\",\n\t\t\tdetail:\n\t\t\t\t\"Database is configured, but no query has initialized the lazy client yet.\",\n\t\t};\n\t}\n\treturn {\n\t\tid: \"database\",\n\t\tlabel: \"Database\",\n\t\tstatus: \"unhealthy\",\n\t\ttarget: \"reachable when configured\",\n\t\tobserved: \"disconnected\",\n\t\tdetail: \"Configured database is not currently reachable.\",\n\t};\n}\n\nfunction backgroundTaskSlo(\n\tbackgroundTasks: RunHealthInput[\"backgroundTasks\"],\n): RunHealthSlo {\n\tconst failed = backgroundTasks?.failed ?? 0;\n\tconst restarting = backgroundTasks?.restarting ?? 0;\n\tconst status =\n\t\tfailed > 0 ? \"unhealthy\" : restarting > 0 ? \"degraded\" : \"healthy\";\n\treturn {\n\t\tid: \"background_tasks\",\n\t\tlabel: \"Background tasks\",\n\t\tstatus,\n\t\ttarget: \"0 failed, 0 restarting\",\n\t\tobserved: `${backgroundTasks?.running ?? 0} running, ${failed} failed, ${restarting} restarting`,\n\t\t...(status === \"healthy\"\n\t\t\t? {}\n\t\t\t: { detail: \"Background task supervisor has unhealthy work.\" }),\n\t};\n}\n\nfunction hookQueueSlo(hooks: RunHealthInput[\"hooks\"]): RunHealthSlo {\n\tconst queued = hooks.concurrency.queued;\n\tconst active = hooks.concurrency.active;\n\tconst max = hooks.concurrency.max;\n\tconst status =\n\t\tqueued > max ? \"unhealthy\" : queued > 0 ? \"degraded\" : \"healthy\";\n\treturn {\n\t\tid: \"hook_queue\",\n\t\tlabel: \"Hook queue\",\n\t\tstatus,\n\t\ttarget: \"0 queued hooks\",\n\t\tobserved: `${active}/${max} active, ${queued} queued, ${hooks.asyncInFlight} async`,\n\t\t...(status === \"healthy\"\n\t\t\t? {}\n\t\t\t: {\n\t\t\t\t\tdetail: \"Hook execution is backing up behind the concurrency gate.\",\n\t\t\t\t}),\n\t};\n}\n\nexport function buildRunHealthSnapshot(\n\tinput: RunHealthInput,\n): RunHealthSnapshot {\n\tconst slos = [\n\t\tlatencySlo(input.apiLatencyMs),\n\t\tdatabaseSlo(input.database),\n\t\tbackgroundTaskSlo(input.backgroundTasks),\n\t\thookQueueSlo(input.hooks),\n\t];\n\tconst diagnostics = slos\n\t\t.filter((slo) => slo.status !== \"healthy\")\n\t\t.map((slo) => `${slo.label}: ${slo.observed}`);\n\treturn {\n\t\tstatus: maxHealthLevel(slos.map((slo) => slo.status)),\n\t\tslos,\n\t\tdiagnostics,\n\t\tgeneratedAt: new Date(input.generatedAt ?? Date.now()).toISOString(),\n\t};\n}\n\nexport async function getStatusSnapshot(\n\toptions: { staticCacheMaxAge?: number } = {},\n) {\n\tconst startedAt = Date.now();\n\tconst cwd = process.cwd();\n\tconst database = await getDatabaseHealthSnapshot();\n\n\tlet gitBranch = null;\n\tlet gitStatus = null;\n\ttry {\n\t\tgitBranch = execSync(\"git rev-parse --abbrev-ref HEAD\", {\n\t\t\tcwd,\n\t\t\tencoding: \"utf-8\",\n\t\t\tstdio: [\"pipe\", \"pipe\", \"ignore\"],\n\t\t}).trim();\n\n\t\tconst status = execSync(\"git status --porcelain\", {\n\t\t\tcwd,\n\t\t\tencoding: \"utf-8\",\n\t\t\tstdio: [\"pipe\", \"pipe\", \"ignore\"],\n\t\t});\n\t\tconst lines = status.trim().split(\"\\n\").filter(Boolean);\n\t\tgitStatus = {\n\t\t\tmodified: lines.filter((l: string) => l.startsWith(\" M\")).length,\n\t\t\tadded: lines.filter((l: string) => l.startsWith(\"A \")).length,\n\t\t\tdeleted: lines.filter((l: string) => l.startsWith(\" D\")).length,\n\t\t\tuntracked: lines.filter((l: string) => l.startsWith(\"??\")).length,\n\t\t\ttotal: lines.length,\n\t\t};\n\t} catch {\n\t\t// Not a git repository or git not available\n\t}\n\n\tconst backgroundTasks = backgroundTaskManager.getHealthSnapshot({\n\t\tmaxEntries: 5,\n\t\tlogLines: 2,\n\t});\n\tconst hooks = {\n\t\tasyncInFlight: getAsyncHookCount(),\n\t\tconcurrency: getHookConcurrencySnapshot(),\n\t};\n\tconst lastUpdated = Date.now();\n\tconst lastLatencyMs = lastUpdated - startedAt;\n\n\treturn {\n\t\tcwd,\n\t\tgit: gitBranch ? { branch: gitBranch, status: gitStatus } : null,\n\t\tcontext: {\n\t\t\tagentMd: existsSync(join(cwd, \"AGENT.md\")),\n\t\t\tclaudeMd: existsSync(join(cwd, \"CLAUDE.md\")),\n\t\t},\n\t\tonboarding: getProjectOnboardingState(cwd),\n\t\tserver: {\n\t\t\tuptime: process.uptime(),\n\t\t\tversion: process.version,\n\t\t\tstaticCacheMaxAgeSeconds: options.staticCacheMaxAge,\n\t\t},\n\t\tdatabase,\n\t\tbackgroundTasks,\n\t\thooks,\n\t\trunHealth: buildRunHealthSnapshot({\n\t\t\tapiLatencyMs: lastLatencyMs,\n\t\t\tbackgroundTasks,\n\t\t\tdatabase,\n\t\t\thooks,\n\t\t\tgeneratedAt: lastUpdated,\n\t\t}),\n\t\tlastUpdated,\n\t\tlastLatencyMs,\n\t};\n}\n\nexport async function handleStatus(\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tcors: Record<string, string>,\n\toptions: { staticCacheMaxAge?: number } = {},\n): Promise<void> {\n\ttry {\n\t\tconst method = (req.method ?? \"GET\").toUpperCase();\n\t\tconst url = new URL(req.url ?? \"/api/status\", \"http://localhost\");\n\t\tconst action = url.searchParams.get(\"action\");\n\n\t\tif (method === \"POST\" && action === \"mark-onboarding-seen\") {\n\t\t\tmarkProjectOnboardingSeen(process.cwd());\n\t\t\tsendJson(res, 200, { success: true }, cors, req);\n\t\t\treturn;\n\t\t}\n\n\t\tconst status = await getStatusSnapshot(options);\n\t\tsendJson(res, 200, status, cors, req);\n\t} catch (error) {\n\t\trespondWithApiError(res, error, 500, cors, req);\n\t}\n}\n"]}
@@ -6,6 +6,7 @@ import type { RegisteredModel } from "../models/registry.js";
6
6
  import type { SessionManager } from "../session/manager.js";
7
7
  import type { WebServerContext } from "./app-context.js";
8
8
  import { type HostedAgentRuntimeCompleteInput, type HostedAgentRuntimeDrainInput, type HostedAgentRuntimeFailInput } from "./hosted-agent-runtime-progress.js";
9
+ declare const HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION = "evalops.remote-runner.snapshot-manifest.v1";
9
10
  export declare function inferFleetModelTier(provider: string, model: string): string | undefined;
10
11
  export declare function getFleetPlatformEventBusStatus(): NonNullable<FleetAgentInstance["platformEventBus"]> | undefined;
11
12
  export interface HeadlessRuntimeSnapshot {
@@ -15,6 +16,20 @@ export interface HeadlessRuntimeSnapshot {
15
16
  last_init: HeadlessInitMessage | null;
16
17
  state: HeadlessRuntimeState;
17
18
  }
19
+ export type HostedRunnerRestoreFlushStatus = "completed" | "failed" | "skipped";
20
+ export interface HostedRunnerRestoreManifest {
21
+ protocol_version: typeof HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION;
22
+ maestro_session_id: string;
23
+ runtime: {
24
+ flush_status: HostedRunnerRestoreFlushStatus;
25
+ error?: string;
26
+ session_id?: string;
27
+ session_file?: string;
28
+ cursor?: number;
29
+ };
30
+ snapshot: HeadlessRuntimeSnapshot;
31
+ }
32
+ export declare function loadHostedRunnerRestoreManifest(path: string | undefined): Promise<HostedRunnerRestoreManifest | undefined>;
18
33
  export type FleetAgentHealth = "healthy" | "degraded" | "unhealthy" | "idle";
19
34
  export interface FleetProcessResources {
20
35
  memoryRssBytes: number;
@@ -166,6 +181,7 @@ type RuntimeOptions = {
166
181
  approvalMode: ApprovalMode;
167
182
  enableClientTools?: boolean;
168
183
  client?: "vscode" | "jetbrains" | "conductor" | "generic";
184
+ restoreManifest?: HostedRunnerRestoreManifest;
169
185
  context: Pick<WebServerContext, "createAgent" | "createBackgroundAgent" | "hostedRunner">;
170
186
  sessionManager: SessionManager;
171
187
  };
@@ -206,6 +222,7 @@ export declare class HeadlessSessionRuntime {
206
222
  private readonly automaticMemoryExtraction;
207
223
  private readonly agentRuntimeProgress?;
208
224
  private constructor();
225
+ private restoreFromManifest;
209
226
  static create(options: RuntimeOptions): Promise<HeadlessSessionRuntime>;
210
227
  id(): string;
211
228
  key(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"headless-runtime-service.d.ts","sourceRoot":"","sources":["../../src/server/headless-runtime-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"headless-runtime-service.d.ts","sourceRoot":"","sources":["../../src/server/headless-runtime-service.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { readFile } from "node:fs/promises";
1
2
  import { assertHeadlessFromAgentMessage, assertHeadlessRuntimeHeartbeatSnapshot, assertHeadlessRuntimeSnapshot, assertHeadlessRuntimeStreamEnvelope, assertHeadlessRuntimeSubscriptionSnapshot, } from "@evalops/contracts";
2
3
  import { buildCompactionEvent } from "../agent/prompt-recovery.js";
3
4
  import { subscribeSwarmRuntimeEvents, } from "../agent/swarm/runtime-events.js";
@@ -33,6 +34,7 @@ const MAX_IDLE_MS = Number.parseInt(process.env.MAESTRO_HEADLESS_RUNTIME_IDLE_MS
33
34
  30 * 60 * 1000;
34
35
  const MAX_RUNTIME_CLEANUP_FAILURES = Number.parseInt(process.env.MAESTRO_HEADLESS_RUNTIME_MAX_CLEANUP_FAILURES || "", 10) || 3;
35
36
  const AMBIENT_ROUTING_SUBJECT = "maestro.ambient_agent.routing.selected";
37
+ const HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION = "evalops.remote-runner.snapshot-manifest.v1";
36
38
  export function inferFleetModelTier(provider, model) {
37
39
  const normalized = `${provider}/${model}`.toLowerCase();
38
40
  if (normalized.includes("haiku") || hasMiniModelVariant(normalized)) {
@@ -96,6 +98,86 @@ function parseBooleanEnv(value) {
96
98
  return undefined;
97
99
  }
98
100
  }
101
+ function isRecord(value) {
102
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
103
+ }
104
+ function restoreFlushStatus(value) {
105
+ switch (value) {
106
+ case "completed":
107
+ return "completed";
108
+ case "failed":
109
+ case "interrupted":
110
+ return "failed";
111
+ case "skipped":
112
+ return "skipped";
113
+ default:
114
+ throw new Error(`Unsupported hosted runner restore flush status: ${value}`);
115
+ }
116
+ }
117
+ function restoreLastStatus(status) {
118
+ switch (status) {
119
+ case "completed":
120
+ return "Restored from snapshot";
121
+ case "failed":
122
+ return "Restore interrupted before runtime flush completed";
123
+ case "skipped":
124
+ return "Restore incomplete: runtime flush skipped";
125
+ }
126
+ }
127
+ function restoreLastError(status, error) {
128
+ if (status === "completed") {
129
+ return undefined;
130
+ }
131
+ const message = typeof error === "string" ? error.trim() : "";
132
+ if (message) {
133
+ return message;
134
+ }
135
+ return status === "failed"
136
+ ? "runtime flush failed before restore"
137
+ : "runtime flush was skipped; no runtime activity was persisted";
138
+ }
139
+ export async function loadHostedRunnerRestoreManifest(path) {
140
+ if (!path) {
141
+ return undefined;
142
+ }
143
+ const manifest = JSON.parse(await readFile(path, "utf8"));
144
+ if (!isRecord(manifest)) {
145
+ throw new Error("Hosted runner restore manifest must be a JSON object");
146
+ }
147
+ if (manifest.protocol_version !== HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION) {
148
+ throw new Error(`Unsupported hosted runner restore manifest protocol version: ${String(manifest.protocol_version)}`);
149
+ }
150
+ const runtime = isRecord(manifest.runtime) ? manifest.runtime : undefined;
151
+ const snapshot = isRecord(manifest.snapshot)
152
+ ? manifest.snapshot
153
+ : undefined;
154
+ const maestroSessionId = typeof manifest.maestro_session_id === "string"
155
+ ? manifest.maestro_session_id.trim()
156
+ : "";
157
+ if (!runtime || !snapshot || !maestroSessionId) {
158
+ throw new Error("Hosted runner restore manifest is missing runtime, snapshot, or maestro_session_id");
159
+ }
160
+ const restore = {
161
+ protocol_version: HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION,
162
+ maestro_session_id: maestroSessionId,
163
+ runtime: {
164
+ flush_status: restoreFlushStatus(runtime.flush_status),
165
+ ...(typeof runtime.error === "string" ? { error: runtime.error } : {}),
166
+ ...(typeof runtime.session_id === "string"
167
+ ? { session_id: runtime.session_id }
168
+ : {}),
169
+ ...(typeof runtime.session_file === "string"
170
+ ? { session_file: runtime.session_file }
171
+ : {}),
172
+ ...(typeof runtime.cursor === "number" && Number.isFinite(runtime.cursor)
173
+ ? { cursor: runtime.cursor }
174
+ : {}),
175
+ },
176
+ snapshot,
177
+ };
178
+ assertHeadlessRuntimeSnapshot(restore.snapshot, "hosted runner restore snapshot");
179
+ return restore;
180
+ }
99
181
  function createConnectionId() {
100
182
  return `conn_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
101
183
  }
@@ -244,12 +326,28 @@ class HeadlessRuntimeBroker {
244
326
  currentCursor() {
245
327
  return this.nextCursor - 1;
246
328
  }
329
+ restoreFromSnapshot(snapshot) {
330
+ const envelope = {
331
+ type: "reset",
332
+ reason: "restored_from_snapshot",
333
+ snapshot,
334
+ };
335
+ assertHeadlessRuntimeStreamEnvelope(envelope, "headless runtime restore envelope");
336
+ this.events.length = 0;
337
+ this.events.push(envelope);
338
+ this.nextCursor = Math.max(1, snapshot.cursor + 1);
339
+ }
247
340
  replayFrom(cursor) {
248
341
  if (this.events.length === 0) {
249
342
  return [];
250
343
  }
251
- const earliest = this.getEnvelopeCursor(this.events[0]) ?? this.nextCursor;
344
+ const first = this.events[0];
345
+ const earliest = this.getEnvelopeCursor(first) ?? this.nextCursor;
252
346
  if (cursor < earliest - 1) {
347
+ if (first?.type === "reset" &&
348
+ first.reason === "restored_from_snapshot") {
349
+ return [...this.events];
350
+ }
253
351
  return null;
254
352
  }
255
353
  return this.events.filter((event) => (this.getEnvelopeCursor(event) ?? 0) > cursor);
@@ -394,8 +492,13 @@ export class HeadlessSessionRuntime {
394
492
  this.agent.subscribe((event) => {
395
493
  this.handleAgentEvent(event);
396
494
  });
397
- this.publish(this.translator.buildReadyMessage(this.agent, this.sessionManager));
398
- this.publish(this.translator.buildSessionInfoMessage(this.sessionManager, this.workspaceRoot ?? process.cwd()));
495
+ if (options.restoreManifest) {
496
+ this.restoreFromManifest(options.restoreManifest);
497
+ }
498
+ else {
499
+ this.publish(this.translator.buildReadyMessage(this.agent, this.sessionManager));
500
+ this.publish(this.translator.buildSessionInfoMessage(this.sessionManager, this.workspaceRoot ?? process.cwd()));
501
+ }
399
502
  this.unsubscribeServerRequestEvents = serverRequestManager.subscribe((event) => {
400
503
  this.handleServerRequestEvent(event);
401
504
  });
@@ -403,6 +506,38 @@ export class HeadlessSessionRuntime {
403
506
  this.handleSwarmRuntimeEvent(event);
404
507
  });
405
508
  }
509
+ restoreFromManifest(manifest) {
510
+ const restoredState = structuredClone(manifest.snapshot.state ?? createHeadlessRuntimeState());
511
+ Object.assign(this.state, restoredState);
512
+ this.state.protocol_version = HEADLESS_PROTOCOL_VERSION;
513
+ this.state.session_id = this.sessionId;
514
+ this.state.cwd ??= this.workspaceRoot ?? process.cwd();
515
+ this.state.is_ready = manifest.runtime.flush_status === "completed";
516
+ this.state.is_responding = false;
517
+ this.state.last_status = restoreLastStatus(manifest.runtime.flush_status);
518
+ const restoreError = restoreLastError(manifest.runtime.flush_status, manifest.runtime.error);
519
+ if (restoreError) {
520
+ this.state.last_error = restoreError;
521
+ this.state.last_error_type = "protocol";
522
+ }
523
+ else {
524
+ delete this.state.last_error;
525
+ delete this.state.last_error_type;
526
+ }
527
+ this.lastInit = manifest.snapshot.last_init
528
+ ? structuredClone(manifest.snapshot.last_init)
529
+ : null;
530
+ const cursor = manifest.runtime.cursor ?? manifest.snapshot.cursor;
531
+ const snapshot = {
532
+ protocolVersion: HEADLESS_PROTOCOL_VERSION,
533
+ session_id: this.sessionId,
534
+ cursor,
535
+ last_init: this.lastInit ? structuredClone(this.lastInit) : null,
536
+ state: structuredClone(this.state),
537
+ };
538
+ assertHeadlessRuntimeSnapshot(snapshot, "hosted runner restored snapshot");
539
+ this.broker.restoreFromSnapshot(snapshot);
540
+ }
406
541
  static async create(options) {
407
542
  const workspaceRoot = options.workspaceRoot ?? getHostedWorkspaceRoot();
408
543
  const negotiatedServerRequests = options.capabilities?.server_requests ?? [];
@@ -1744,6 +1879,10 @@ export class HeadlessRuntimeService {
1744
1879
  }
1745
1880
  }
1746
1881
  const sessionId = options.sessionManager.getSessionId();
1882
+ const restoreManifest = await loadHostedRunnerRestoreManifest(options.context.hostedRunner?.restoreManifestPath);
1883
+ if (restoreManifest && restoreManifest.maestro_session_id !== sessionId) {
1884
+ throw new Error(`Hosted runner restore manifest is for Maestro session ${restoreManifest.maestro_session_id}, not ${sessionId}`);
1885
+ }
1747
1886
  const runtime = await HeadlessSessionRuntime.create({
1748
1887
  scope_key: options.scope_key,
1749
1888
  session_id: sessionId,
@@ -1758,6 +1897,7 @@ export class HeadlessRuntimeService {
1758
1897
  approvalMode: options.approvalMode,
1759
1898
  enableClientTools: options.enableClientTools,
1760
1899
  client: options.client,
1900
+ restoreManifest,
1761
1901
  context: options.context,
1762
1902
  sessionManager: options.sessionManager,
1763
1903
  });