@evalops/maestro 0.10.50 → 0.10.51

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 (406) hide show
  1. package/dist/agent/agent-outcome.d.ts +54 -0
  2. package/dist/agent/agent-outcome.d.ts.map +1 -0
  3. package/dist/agent/agent-outcome.js +142 -0
  4. package/dist/agent/agent-outcome.js.map +1 -0
  5. package/dist/agent/agent-resume.d.ts.map +1 -1
  6. package/dist/agent/agent-resume.js +3 -3
  7. package/dist/agent/agent-resume.js.map +1 -1
  8. package/dist/agent/agent-run-summary.d.ts +37 -0
  9. package/dist/agent/agent-run-summary.d.ts.map +1 -0
  10. package/dist/agent/agent-run-summary.js +15 -0
  11. package/dist/agent/agent-run-summary.js.map +1 -0
  12. package/dist/agent/agent-work-board.d.ts +82 -0
  13. package/dist/agent/agent-work-board.d.ts.map +1 -0
  14. package/dist/agent/agent-work-board.js +312 -0
  15. package/dist/agent/agent-work-board.js.map +1 -0
  16. package/dist/agent/auto-compaction.d.ts +7 -2
  17. package/dist/agent/auto-compaction.d.ts.map +1 -1
  18. package/dist/agent/auto-compaction.js +23 -10
  19. package/dist/agent/auto-compaction.js.map +1 -1
  20. package/dist/agent/mission-artifacts.d.ts +62 -0
  21. package/dist/agent/mission-artifacts.d.ts.map +1 -0
  22. package/dist/agent/mission-artifacts.js +438 -0
  23. package/dist/agent/mission-artifacts.js.map +1 -0
  24. package/dist/agent/mission-manifest.d.ts +139 -3
  25. package/dist/agent/mission-manifest.d.ts.map +1 -1
  26. package/dist/agent/mission-manifest.js +549 -3
  27. package/dist/agent/mission-manifest.js.map +1 -1
  28. package/dist/agent/mission-store.d.ts +80 -0
  29. package/dist/agent/mission-store.d.ts.map +1 -0
  30. package/dist/agent/mission-store.js +603 -0
  31. package/dist/agent/mission-store.js.map +1 -0
  32. package/dist/agent/modes.d.ts +2 -2
  33. package/dist/agent/modes.d.ts.map +1 -1
  34. package/dist/agent/modes.js +10 -3
  35. package/dist/agent/modes.js.map +1 -1
  36. package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
  37. package/dist/agent/providers/codex-app-server.js +1 -3
  38. package/dist/agent/providers/codex-app-server.js.map +1 -1
  39. package/dist/agent/providers/google-gemini-cli.js +203 -107
  40. package/dist/agent/providers/google.js +100 -41
  41. package/dist/agent/providers/scripted.d.ts.map +1 -1
  42. package/dist/agent/providers/scripted.js +1 -3
  43. package/dist/agent/providers/scripted.js.map +1 -1
  44. package/dist/agent/providers/validation.d.ts.map +1 -1
  45. package/dist/agent/providers/validation.js +1 -3
  46. package/dist/agent/providers/validation.js.map +1 -1
  47. package/dist/agent/providers/vertex.js +203 -107
  48. package/dist/agent/snapshot-store.d.ts +32 -0
  49. package/dist/agent/snapshot-store.d.ts.map +1 -0
  50. package/dist/agent/snapshot-store.js +195 -0
  51. package/dist/agent/snapshot-store.js.map +1 -0
  52. package/dist/agent/specialist-profiles.d.ts +36 -0
  53. package/dist/agent/specialist-profiles.d.ts.map +1 -0
  54. package/dist/agent/specialist-profiles.js +159 -0
  55. package/dist/agent/specialist-profiles.js.map +1 -0
  56. package/dist/agent/subagent-specs.d.ts +4 -1
  57. package/dist/agent/subagent-specs.d.ts.map +1 -1
  58. package/dist/agent/subagent-specs.js +81 -8
  59. package/dist/agent/subagent-specs.js.map +1 -1
  60. package/dist/agent/swarm/coverage-gate.d.ts +37 -0
  61. package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
  62. package/dist/agent/swarm/coverage-gate.js +48 -0
  63. package/dist/agent/swarm/coverage-gate.js.map +1 -0
  64. package/dist/agent/swarm/executor.d.ts +1 -0
  65. package/dist/agent/swarm/executor.d.ts.map +1 -1
  66. package/dist/agent/swarm/executor.js +151 -15
  67. package/dist/agent/swarm/executor.js.map +1 -1
  68. package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
  69. package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
  70. package/dist/agent/swarm/orchestrator-prompt.js +48 -0
  71. package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
  72. package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
  73. package/dist/agent/swarm/plan-parser.js +27 -2
  74. package/dist/agent/swarm/plan-parser.js.map +1 -1
  75. package/dist/agent/swarm/types.d.ts +17 -0
  76. package/dist/agent/swarm/types.d.ts.map +1 -1
  77. package/dist/agent/swarm/types.js.map +1 -1
  78. package/dist/agent/swarm/validation-directive.d.ts +21 -0
  79. package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
  80. package/dist/agent/swarm/validation-directive.js +25 -0
  81. package/dist/agent/swarm/validation-directive.js.map +1 -0
  82. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  83. package/dist/agent/transport/tool-execution-bridge.js +4 -1
  84. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  85. package/dist/api/enterprise-routes.d.ts.map +1 -1
  86. package/dist/api/enterprise-routes.js +87 -10
  87. package/dist/api/enterprise-routes.js.map +1 -1
  88. package/dist/api/org-settings-merge.d.ts +12 -0
  89. package/dist/api/org-settings-merge.d.ts.map +1 -0
  90. package/dist/api/org-settings-merge.js +38 -0
  91. package/dist/api/org-settings-merge.js.map +1 -0
  92. package/dist/api/user-settings-merge.d.ts +16 -0
  93. package/dist/api/user-settings-merge.d.ts.map +1 -0
  94. package/dist/api/user-settings-merge.js +37 -0
  95. package/dist/api/user-settings-merge.js.map +1 -0
  96. package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
  97. package/dist/app-server/daemon-lifecycle-api.js +1 -3
  98. package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
  99. package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
  100. package/dist/app-server/external-agent-import-api.js +1 -3
  101. package/dist/app-server/external-agent-import-api.js.map +1 -1
  102. package/dist/app-server/network-governance-api.d.ts.map +1 -1
  103. package/dist/app-server/network-governance-api.js +1 -3
  104. package/dist/app-server/network-governance-api.js.map +1 -1
  105. package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
  106. package/dist/app-server/plugin-bundle-api.js +1 -3
  107. package/dist/app-server/plugin-bundle-api.js.map +1 -1
  108. package/dist/app-server/policy-control-api.d.ts.map +1 -1
  109. package/dist/app-server/policy-control-api.js +1 -3
  110. package/dist/app-server/policy-control-api.js.map +1 -1
  111. package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
  112. package/dist/app-server/protocol-modes-api.js +1 -3
  113. package/dist/app-server/protocol-modes-api.js.map +1 -1
  114. package/dist/cli/args.d.ts +2 -0
  115. package/dist/cli/args.d.ts.map +1 -1
  116. package/dist/cli/args.js +15 -0
  117. package/dist/cli/args.js.map +1 -1
  118. package/dist/cli/commands/a2a.d.ts.map +1 -1
  119. package/dist/cli/commands/a2a.js +1 -3
  120. package/dist/cli/commands/a2a.js.map +1 -1
  121. package/dist/cli/commands/agents.d.ts +4 -0
  122. package/dist/cli/commands/agents.d.ts.map +1 -1
  123. package/dist/cli/commands/agents.js +149 -0
  124. package/dist/cli/commands/agents.js.map +1 -1
  125. package/dist/cli/commands/mission.d.ts +4 -0
  126. package/dist/cli/commands/mission.d.ts.map +1 -0
  127. package/dist/cli/commands/mission.js +196 -0
  128. package/dist/cli/commands/mission.js.map +1 -0
  129. package/dist/cli/commands/value.d.ts +10 -0
  130. package/dist/cli/commands/value.d.ts.map +1 -0
  131. package/dist/cli/commands/value.js +33 -0
  132. package/dist/cli/commands/value.js.map +1 -0
  133. package/dist/cli/headless-protocol.d.ts.map +1 -1
  134. package/dist/cli/headless-protocol.js +1 -3
  135. package/dist/cli/headless-protocol.js.map +1 -1
  136. package/dist/cli/help.d.ts.map +1 -1
  137. package/dist/cli/help.js +10 -0
  138. package/dist/cli/help.js.map +1 -1
  139. package/dist/cli/system-prompt.d.ts.map +1 -1
  140. package/dist/cli/system-prompt.js +38 -7
  141. package/dist/cli/system-prompt.js.map +1 -1
  142. package/dist/cli-runtime.js +7756 -2800
  143. package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
  144. package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
  145. package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
  146. package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
  147. package/dist/cli-tui/commands/undo-handlers.js +7 -2
  148. package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
  149. package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
  150. package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
  151. package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
  152. package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
  153. package/dist/codex/app-server-client.d.ts.map +1 -1
  154. package/dist/codex/app-server-client.js +1 -3
  155. package/dist/codex/app-server-client.js.map +1 -1
  156. package/dist/codex/compatibility.d.ts.map +1 -1
  157. package/dist/codex/compatibility.js +1 -3
  158. package/dist/codex/compatibility.js.map +1 -1
  159. package/dist/codex/subagent-dispatch-table.d.ts +8 -0
  160. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
  161. package/dist/codex/subagent-dispatch-table.js +23 -0
  162. package/dist/codex/subagent-dispatch-table.js.map +1 -1
  163. package/dist/context/manifest.d.ts.map +1 -1
  164. package/dist/context/manifest.js +1 -3
  165. package/dist/context/manifest.js.map +1 -1
  166. package/dist/conversation/render-model.d.ts +0 -36
  167. package/dist/conversation/render-model.d.ts.map +1 -1
  168. package/dist/conversation/render-model.js +1 -3
  169. package/dist/conversation/render-model.js.map +1 -1
  170. package/dist/customer-value/ambient-learning.d.ts +75 -0
  171. package/dist/customer-value/ambient-learning.d.ts.map +1 -0
  172. package/dist/customer-value/ambient-learning.js +472 -0
  173. package/dist/customer-value/ambient-learning.js.map +1 -0
  174. package/dist/customer-value/internal-helpers.d.ts +13 -0
  175. package/dist/customer-value/internal-helpers.d.ts.map +1 -0
  176. package/dist/customer-value/internal-helpers.js +70 -0
  177. package/dist/customer-value/internal-helpers.js.map +1 -0
  178. package/dist/customer-value/report.d.ts +282 -0
  179. package/dist/customer-value/report.d.ts.map +1 -0
  180. package/dist/customer-value/report.js +2085 -0
  181. package/dist/customer-value/report.js.map +1 -0
  182. package/dist/db/schema.d.ts +5 -1
  183. package/dist/db/schema.d.ts.map +1 -1
  184. package/dist/db/schema.js.map +1 -1
  185. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  186. package/dist/evalops/agent-bootstrap.js +1 -3
  187. package/dist/evalops/agent-bootstrap.js.map +1 -1
  188. package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
  189. package/dist/evalops/agent-mcp-metadata.js +1 -3
  190. package/dist/evalops/agent-mcp-metadata.js.map +1 -1
  191. package/dist/index.d.ts +1 -0
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +1 -0
  194. package/dist/index.js.map +1 -1
  195. package/dist/installers/maestro-review-workflow.d.ts +38 -0
  196. package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
  197. package/dist/installers/maestro-review-workflow.js +163 -0
  198. package/dist/installers/maestro-review-workflow.js.map +1 -0
  199. package/dist/load-env.d.ts.map +1 -1
  200. package/dist/load-env.js +2 -1
  201. package/dist/load-env.js.map +1 -1
  202. package/dist/main.d.ts.map +1 -1
  203. package/dist/main.js +92 -3
  204. package/dist/main.js.map +1 -1
  205. package/dist/mcp/config.d.ts.map +1 -1
  206. package/dist/mcp/config.js +1 -3
  207. package/dist/mcp/config.js.map +1 -1
  208. package/dist/mcp/elicitation.d.ts.map +1 -1
  209. package/dist/mcp/elicitation.js +1 -3
  210. package/dist/mcp/elicitation.js.map +1 -1
  211. package/dist/mcp/official-registry.d.ts.map +1 -1
  212. package/dist/mcp/official-registry.js +1 -3
  213. package/dist/mcp/official-registry.js.map +1 -1
  214. package/dist/mcp/workspace-trust.d.ts.map +1 -1
  215. package/dist/mcp/workspace-trust.js +1 -3
  216. package/dist/mcp/workspace-trust.js.map +1 -1
  217. package/dist/memory/service-client.d.ts.map +1 -1
  218. package/dist/memory/service-client.js +1 -3
  219. package/dist/memory/service-client.js.map +1 -1
  220. package/dist/models/config-loader.d.ts.map +1 -1
  221. package/dist/models/config-loader.js +1 -3
  222. package/dist/models/config-loader.js.map +1 -1
  223. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
  224. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  225. package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
  226. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  227. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
  228. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
  229. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
  230. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
  231. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  232. package/dist/node_modules/@evalops/tui/package.json +1 -1
  233. package/dist/oauth/connectors.d.ts.map +1 -1
  234. package/dist/oauth/connectors.js +1 -3
  235. package/dist/oauth/connectors.js.map +1 -1
  236. package/dist/oauth/evalops.d.ts.map +1 -1
  237. package/dist/oauth/evalops.js +1 -3
  238. package/dist/oauth/evalops.js.map +1 -1
  239. package/dist/platform/a2a-client.d.ts.map +1 -1
  240. package/dist/platform/a2a-client.js +1 -3
  241. package/dist/platform/a2a-client.js.map +1 -1
  242. package/dist/platform/a2a-cockpit.d.ts +1 -0
  243. package/dist/platform/a2a-cockpit.d.ts.map +1 -1
  244. package/dist/platform/a2a-cockpit.js +42 -11
  245. package/dist/platform/a2a-cockpit.js.map +1 -1
  246. package/dist/platform/a2a-completion-audit.d.ts +1 -1
  247. package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
  248. package/dist/platform/a2a-completion-audit.js +7 -11
  249. package/dist/platform/a2a-completion-audit.js.map +1 -1
  250. package/dist/platform/a2a-maestro-peer.js +16 -0
  251. package/dist/platform/a2a-maestro-peer.js.map +1 -1
  252. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
  253. package/dist/platform/a2a-peer-pairing.js +1 -3
  254. package/dist/platform/a2a-peer-pairing.js.map +1 -1
  255. package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
  256. package/dist/platform/a2a-peer-registry.js +1 -3
  257. package/dist/platform/a2a-peer-registry.js.map +1 -1
  258. package/dist/platform/a2a-task-ledger.d.ts +20 -0
  259. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  260. package/dist/platform/a2a-task-ledger.js +207 -11
  261. package/dist/platform/a2a-task-ledger.js.map +1 -1
  262. package/dist/platform/a2a-work-graph.d.ts.map +1 -1
  263. package/dist/platform/a2a-work-graph.js +1 -3
  264. package/dist/platform/a2a-work-graph.js.map +1 -1
  265. package/dist/platform/operating-layer.d.ts.map +1 -1
  266. package/dist/platform/operating-layer.js +14 -8
  267. package/dist/platform/operating-layer.js.map +1 -1
  268. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  269. package/dist/platform/tool-execution-client.js +19 -2
  270. package/dist/platform/tool-execution-client.js.map +1 -1
  271. package/dist/providers/auth.d.ts.map +1 -1
  272. package/dist/providers/auth.js +1 -3
  273. package/dist/providers/auth.js.map +1 -1
  274. package/dist/runtime/env.d.ts +9 -1
  275. package/dist/runtime/env.d.ts.map +1 -1
  276. package/dist/runtime/env.js +63 -1
  277. package/dist/runtime/env.js.map +1 -1
  278. package/dist/safety/policy.d.ts.map +1 -1
  279. package/dist/safety/policy.js +1 -4
  280. package/dist/safety/policy.js.map +1 -1
  281. package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
  282. package/dist/sandbox/docker-sandbox.js +6 -1
  283. package/dist/sandbox/docker-sandbox.js.map +1 -1
  284. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  285. package/dist/server/handlers/hosted-runner-drain.js +1 -3
  286. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  287. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  288. package/dist/server/handlers/platform-a2a-push.js +53 -2
  289. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  290. package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
  291. package/dist/server/handlers/runtime-app-server-ws.js +1 -3
  292. package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
  293. package/dist/server/headless-runtime-service.d.ts +16 -0
  294. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  295. package/dist/server/headless-runtime-service.js +232 -206
  296. package/dist/server/headless-runtime-service.js.map +1 -1
  297. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  298. package/dist/server/hosted-agent-runtime-progress.js +12 -3
  299. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  300. package/dist/server/pending-request-payload.d.ts.map +1 -1
  301. package/dist/server/pending-request-payload.js +1 -3
  302. package/dist/server/pending-request-payload.js.map +1 -1
  303. package/dist/server/route-auth.d.ts.map +1 -1
  304. package/dist/server/route-auth.js +2 -0
  305. package/dist/server/route-auth.js.map +1 -1
  306. package/dist/server/session-serialization.d.ts.map +1 -1
  307. package/dist/server/session-serialization.js +1 -3
  308. package/dist/server/session-serialization.js.map +1 -1
  309. package/dist/services/compliance/normalize.d.ts.map +1 -1
  310. package/dist/services/compliance/normalize.js +1 -3
  311. package/dist/services/compliance/normalize.js.map +1 -1
  312. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  313. package/dist/services/intelligent-router/normalize.js +1 -3
  314. package/dist/services/intelligent-router/normalize.js.map +1 -1
  315. package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
  316. package/dist/services/revenue-attribution/normalize.js +1 -3
  317. package/dist/services/revenue-attribution/normalize.js.map +1 -1
  318. package/dist/services/traces/normalize.d.ts.map +1 -1
  319. package/dist/services/traces/normalize.js +1 -3
  320. package/dist/services/traces/normalize.js.map +1 -1
  321. package/dist/services/workspace-config/normalize.d.ts.map +1 -1
  322. package/dist/services/workspace-config/normalize.js +1 -3
  323. package/dist/services/workspace-config/normalize.js.map +1 -1
  324. package/dist/skills/composer.d.ts.map +1 -1
  325. package/dist/skills/composer.js +13 -1
  326. package/dist/skills/composer.js.map +1 -1
  327. package/dist/skills/index.d.ts +1 -0
  328. package/dist/skills/index.d.ts.map +1 -1
  329. package/dist/skills/index.js +1 -0
  330. package/dist/skills/index.js.map +1 -1
  331. package/dist/skills/learned-guidelines.d.ts +33 -0
  332. package/dist/skills/learned-guidelines.d.ts.map +1 -0
  333. package/dist/skills/learned-guidelines.js +291 -0
  334. package/dist/skills/learned-guidelines.js.map +1 -0
  335. package/dist/skills/linter.d.ts.map +1 -1
  336. package/dist/skills/linter.js +1 -3
  337. package/dist/skills/linter.js.map +1 -1
  338. package/dist/skills/runtime-activation.d.ts +1 -0
  339. package/dist/skills/runtime-activation.d.ts.map +1 -1
  340. package/dist/skills/runtime-activation.js +2 -3
  341. package/dist/skills/runtime-activation.js.map +1 -1
  342. package/dist/skills/tool.d.ts.map +1 -1
  343. package/dist/skills/tool.js +26 -21
  344. package/dist/skills/tool.js.map +1 -1
  345. package/dist/skills/trust-cache.d.ts +7 -0
  346. package/dist/skills/trust-cache.d.ts.map +1 -1
  347. package/dist/skills/trust-cache.js +16 -0
  348. package/dist/skills/trust-cache.js.map +1 -1
  349. package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
  350. package/dist/telemetry/agent-workforce-native-event.js +1 -3
  351. package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
  352. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  353. package/dist/telemetry/maestro-event-bus.js +42 -81
  354. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  355. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  356. package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
  357. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  358. package/dist/telemetry.d.ts.map +1 -1
  359. package/dist/telemetry.js +54 -43
  360. package/dist/telemetry.js.map +1 -1
  361. package/dist/theme/theme-loader.d.ts.map +1 -1
  362. package/dist/theme/theme-loader.js +1 -3
  363. package/dist/theme/theme-loader.js.map +1 -1
  364. package/dist/tools/apply-patch.d.ts.map +1 -1
  365. package/dist/tools/apply-patch.js +76 -8
  366. package/dist/tools/apply-patch.js.map +1 -1
  367. package/dist/tools/diff-preview.d.ts.map +1 -1
  368. package/dist/tools/diff-preview.js +10 -1
  369. package/dist/tools/diff-preview.js.map +1 -1
  370. package/dist/tools/edit.d.ts.map +1 -1
  371. package/dist/tools/edit.js +17 -0
  372. package/dist/tools/edit.js.map +1 -1
  373. package/dist/tools/write.d.ts.map +1 -1
  374. package/dist/tools/write.js +9 -0
  375. package/dist/tools/write.js.map +1 -1
  376. package/dist/undo/tracker.d.ts +5 -0
  377. package/dist/undo/tracker.d.ts.map +1 -1
  378. package/dist/undo/tracker.js +13 -0
  379. package/dist/undo/tracker.js.map +1 -1
  380. package/dist/utils/fs.d.ts +1 -1
  381. package/dist/utils/fs.d.ts.map +1 -1
  382. package/dist/utils/fs.js +29 -2
  383. package/dist/utils/fs.js.map +1 -1
  384. package/dist/utils/git-stash.d.ts.map +1 -1
  385. package/dist/utils/git-stash.js +15 -8
  386. package/dist/utils/git-stash.js.map +1 -1
  387. package/dist/utils/json.d.ts +11 -0
  388. package/dist/utils/json.d.ts.map +1 -1
  389. package/dist/utils/json.js +9 -0
  390. package/dist/utils/json.js.map +1 -1
  391. package/dist/utils/shell-env.d.ts.map +1 -1
  392. package/dist/utils/shell-env.js +2 -0
  393. package/dist/utils/shell-env.js.map +1 -1
  394. package/dist/utils/url-extractor-git.d.ts +26 -0
  395. package/dist/utils/url-extractor-git.d.ts.map +1 -0
  396. package/dist/utils/url-extractor-git.js +259 -0
  397. package/dist/utils/url-extractor-git.js.map +1 -0
  398. package/dist/utils/url-extractor.d.ts.map +1 -1
  399. package/dist/utils/url-extractor.js +23 -251
  400. package/dist/utils/url-extractor.js.map +1 -1
  401. package/dist/version.json +2 -2
  402. package/package.json +310 -306
  403. package/skills/incident-triage/SKILL.md +19 -1
  404. package/skills/install-code-review/SKILL.md +69 -0
  405. package/skills/security-review/SKILL.md +68 -0
  406. package/skills/security-review/reference/rubric.md +85 -0
@@ -1 +1 @@
1
- {"version":3,"file":"mission-manifest.js","sourceRoot":"","sources":["../../src/agent/mission-manifest.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Mission Feature Manifest\n *\n * A Mission decomposes a feature-shaped goal into a list of leaf features\n * the orchestrator can hand to worker agents. Each feature claims a\n * subset of the validation contract's assertion ids in its `fulfills`\n * field; pre-execution, the coverage gate refuses to start work until\n * every assertion is claimed by exactly one feature and no feature\n * references an unknown assertion.\n *\n * ## Feature lifecycle\n *\n * pending — created but not yet picked up by a worker\n * in-progress — claimed by a worker, work is happening\n * passed — worker completed and the validation step ran clean\n * failed — worker completed but validation reported a failure\n * preempted — a higher-priority feature was inserted ahead of this\n * one mid-run; the runner reverts this feature to\n * pending and re-runs it later with a fresh worker\n *\n * ## Worker handoff shape\n *\n * When a worker finishes a feature, it returns a structured handoff so\n * the orchestrator can record what changed and where validation\n * evidence lives. Repo edits include a `commitId` + `repoPath` so the\n * verification pass can `git checkout` the worker's work and replay\n * the test suite from there.\n *\n * ## What this module is and isn't\n *\n * Pure types + helpers (manifest construction, coverage gate against\n * validation contract assertion ids, preemption, feature lookup,\n * summary stats). No disk persistence, no worker dispatch, no\n * orchestrator loop — those ride in follow-up PRs that consume the\n * shape defined here.\n */\n\n/** Lifecycle of one feature within a mission. */\nexport type MissionFeatureStatus =\n\t| \"pending\"\n\t| \"in-progress\"\n\t| \"passed\"\n\t| \"failed\"\n\t| \"preempted\";\n\n/** Optional milestone grouping for UI / reporting. */\nexport interface MissionMilestone {\n\tid: string;\n\tname: string;\n}\n\n/** Structured handoff returned by a worker after completing a feature. */\nexport interface MissionWorkerHandoff {\n\t/** Worker that produced the handoff. */\n\tworkerId: string;\n\t/** Did the worker's own validation step succeed? */\n\tsuccess: boolean;\n\t/** Repo path the worker checked out + edited. */\n\trepoPath?: string;\n\t/** Commit id the worker landed (head of its branch). */\n\tcommitId?: string;\n\t/** Free-form summary the worker produced for the orchestrator. */\n\tsummary?: string;\n\t/** ISO 8601 timestamp the handoff was recorded. */\n\thandedOffAt: string;\n}\n\n/** One leaf feature in the manifest. */\nexport interface MissionFeature {\n\t/** Stable feature id (orchestrator-assigned). */\n\tid: string;\n\t/** Short human-readable description. */\n\tdescription: string;\n\t/** Lifecycle status. */\n\tstatus: MissionFeatureStatus;\n\t/** Optional milestone the feature belongs to. */\n\tmilestone?: string;\n\t/** Worker skill the runner dispatches for this feature. */\n\tskillName?: string;\n\t/**\n\t * Validation contract assertion ids this feature commits to\n\t * satisfying. The coverage gate requires every contract assertion\n\t * to be claimed by exactly one feature.\n\t */\n\tfulfills: string[];\n\t/** Worker handoff, present after the worker completes. */\n\thandoff?: MissionWorkerHandoff;\n}\n\n/** Top-level mission feature manifest (features.json on disk). */\nexport interface MissionManifest {\n\t/** Schema version. */\n\tversion: number;\n\t/** Mission identifier. */\n\tmissionId: string;\n\t/** Optional milestones referenced by individual features. */\n\tmilestones: MissionMilestone[];\n\t/** Leaf features, in append order. */\n\tfeatures: MissionFeature[];\n\t/** ISO 8601 creation timestamp. */\n\tcreatedAt: string;\n\t/** ISO 8601 timestamp of the most recent state change. */\n\tupdatedAt: string;\n}\n\nexport const MISSION_MANIFEST_VERSION = 1;\n\n/** Coverage gate report shape (matches validation-contract's shape). */\nexport interface MissionCoverageReport {\n\t/** True when every contract assertion is claimed by exactly one feature. */\n\tok: boolean;\n\t/** Assertion ids not claimed by any feature. */\n\torphans: string[];\n\t/** Assertion ids duplicated in the contract or claimed more than once. */\n\tduplicates: string[];\n\t/** Assertion ids referenced by features but absent from the contract. */\n\tunknownAssertions: string[];\n}\n\n/**\n * Construct a fresh, empty manifest. Features and milestones are added\n * later via `appendFeature` / `addMilestone`.\n */\nexport function createMissionManifest(options: {\n\tmissionId: string;\n\tnow?: string;\n}): MissionManifest {\n\tconst missionId = options.missionId.trim();\n\tif (!missionId) {\n\t\tthrow new Error(\"missionId is required\");\n\t}\n\tconst now = options.now ?? new Date().toISOString();\n\treturn {\n\t\tversion: MISSION_MANIFEST_VERSION,\n\t\tmissionId,\n\t\tmilestones: [],\n\t\tfeatures: [],\n\t\tcreatedAt: now,\n\t\tupdatedAt: now,\n\t};\n}\n\n/**\n * Append a feature to the manifest. Returns a new manifest.\n *\n * The input type excludes `handoff` — handoffs only exist after a\n * worker completes a feature, so a freshly appended feature cannot\n * carry one. We also strip any `handoff` key defensively in case a\n * caller bypasses the type with `as` to keep the lifecycle invariant.\n */\nexport function appendFeature(\n\tmanifest: MissionManifest,\n\tfeature: Omit<MissionFeature, \"status\" | \"handoff\">,\n): MissionManifest {\n\tassertFeatureBasics(feature);\n\tif (manifest.features.some((f) => f.id === feature.id)) {\n\t\tthrow new Error(`Duplicate feature id \"${feature.id}\"`);\n\t}\n\tconst { handoff: _handoff, ...rest } = feature as MissionFeature;\n\treturn {\n\t\t...manifest,\n\t\tfeatures: [\n\t\t\t...manifest.features,\n\t\t\t{\n\t\t\t\t...rest,\n\t\t\t\tstatus: \"pending\",\n\t\t\t},\n\t\t],\n\t\tupdatedAt: new Date().toISOString(),\n\t};\n}\n\n/** Add a milestone to the manifest. */\nexport function addMilestone(\n\tmanifest: MissionManifest,\n\tmilestone: MissionMilestone,\n): MissionManifest {\n\tif (manifest.milestones.some((m) => m.id === milestone.id)) {\n\t\tthrow new Error(`Duplicate milestone id \"${milestone.id}\"`);\n\t}\n\treturn {\n\t\t...manifest,\n\t\tmilestones: [...manifest.milestones, milestone],\n\t\tupdatedAt: new Date().toISOString(),\n\t};\n}\n\n/**\n * Coverage gate. Returns `ok: true` only when every contract assertion\n * id is claimed by exactly one feature's `fulfills` array and no\n * feature references an assertion id absent from the contract.\n *\n * `allContractAssertionIds` comes from\n * `listAssertionIds(validationContract)` in `./validation-contract.ts`.\n * Kept as a plain string[] here so this module doesn't need to import\n * the validation contract module.\n */\nexport function checkMissionCoverage(\n\tmanifest: MissionManifest,\n\tallContractAssertionIds: readonly string[],\n): MissionCoverageReport {\n\tconst contractIdCounts = new Map<string, number>();\n\tfor (const id of allContractAssertionIds) {\n\t\tcontractIdCounts.set(id, (contractIdCounts.get(id) ?? 0) + 1);\n\t}\n\tconst contractIds = new Set(contractIdCounts.keys());\n\tconst claimCounts = new Map<string, number>();\n\tconst unknownSet = new Set<string>();\n\n\tfor (const feature of manifest.features) {\n\t\tfor (const assertionId of feature.fulfills) {\n\t\t\tclaimCounts.set(assertionId, (claimCounts.get(assertionId) ?? 0) + 1);\n\t\t\tif (!contractIds.has(assertionId)) {\n\t\t\t\tunknownSet.add(assertionId);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst orphans: string[] = [];\n\tconst duplicateSet = new Set<string>();\n\tfor (const [id, contractCount] of contractIdCounts) {\n\t\tconst count = claimCounts.get(id) ?? 0;\n\t\tif (count === 0) {\n\t\t\torphans.push(id);\n\t\t}\n\t\tif (contractCount > 1 || count > 1) {\n\t\t\tduplicateSet.add(id);\n\t\t}\n\t}\n\t// Unknown assertion ids (not in the contract) that are claimed by\n\t// more than one feature also count as duplicates — the report\n\t// field is \"ids claimed more than once,\" not \"contract ids claimed\n\t// more than once.\" Without this the runner would silently see two\n\t// features racing on the same unknown id.\n\tfor (const id of unknownSet) {\n\t\tif ((claimCounts.get(id) ?? 0) > 1) {\n\t\t\tduplicateSet.add(id);\n\t\t}\n\t}\n\n\torphans.sort();\n\tconst duplicates = Array.from(duplicateSet).sort();\n\tconst unknownAssertions = Array.from(unknownSet).sort();\n\n\treturn {\n\t\tok:\n\t\t\torphans.length === 0 &&\n\t\t\tduplicates.length === 0 &&\n\t\t\tunknownAssertions.length === 0,\n\t\torphans,\n\t\tduplicates,\n\t\tunknownAssertions,\n\t};\n}\n\n/** Find a feature by id, or `undefined`. */\nexport function findFeature(\n\tmanifest: MissionManifest,\n\tfeatureId: string,\n): MissionFeature | undefined {\n\treturn manifest.features.find((f) => f.id === featureId);\n}\n\n/**\n * Set a feature's lifecycle status. Returns a new manifest.\n *\n * Flipping to `pending` or `preempted` clears the feature's handoff so\n * the next worker starts fresh — matching `appendFeature` and\n * `preemptInsert`. Other transitions leave the handoff intact.\n */\nexport function setFeatureStatus(\n\tmanifest: MissionManifest,\n\tfeatureId: string,\n\tstatus: MissionFeatureStatus,\n): MissionManifest {\n\tlet touched = false;\n\tconst next = manifest.features.map((f) => {\n\t\tif (f.id !== featureId) return f;\n\t\ttouched = true;\n\t\tif (status === \"pending\" || status === \"preempted\") {\n\t\t\tconst { handoff: _handoff, ...rest } = f;\n\t\t\treturn { ...rest, status };\n\t\t}\n\t\treturn { ...f, status };\n\t});\n\tif (!touched) {\n\t\tthrow new Error(`Feature id \"${featureId}\" not in manifest`);\n\t}\n\treturn { ...manifest, features: next, updatedAt: new Date().toISOString() };\n}\n\n/** Record a worker handoff against a feature. */\nexport function recordHandoff(\n\tmanifest: MissionManifest,\n\tfeatureId: string,\n\thandoff: MissionWorkerHandoff,\n): MissionManifest {\n\tlet touched = false;\n\tconst next = manifest.features.map((f) => {\n\t\tif (f.id !== featureId) return f;\n\t\ttouched = true;\n\t\treturn {\n\t\t\t...f,\n\t\t\thandoff,\n\t\t\tstatus: handoff.success ? (\"passed\" as const) : (\"failed\" as const),\n\t\t};\n\t});\n\tif (!touched) {\n\t\tthrow new Error(`Feature id \"${featureId}\" not in manifest`);\n\t}\n\treturn { ...manifest, features: next, updatedAt: handoff.handedOffAt };\n}\n\n/**\n * Preempt the in-progress feature: insert a higher-priority feature at\n * the position before the active one, mark the active one as\n * `preempted` so the runner re-runs it later from scratch with a fresh\n * worker (its handoff is cleared).\n *\n * Throws when:\n * - no feature is currently in-progress\n * - more than one feature is in-progress (the runner invariant is\n * one active feature at a time; refuse to silently leave the\n * extras running)\n * - the inserted feature's id collides with an existing one\n */\nexport function preemptInsert(\n\tmanifest: MissionManifest,\n\tinsertedFeature: Omit<MissionFeature, \"status\" | \"handoff\">,\n): MissionManifest {\n\tassertFeatureBasics(insertedFeature);\n\tif (manifest.features.some((f) => f.id === insertedFeature.id)) {\n\t\tthrow new Error(\n\t\t\t`Cannot preempt-insert duplicate feature id \"${insertedFeature.id}\"`,\n\t\t);\n\t}\n\tconst inProgressIndices: number[] = [];\n\tfor (let i = 0; i < manifest.features.length; i += 1) {\n\t\tif (manifest.features[i]?.status === \"in-progress\") {\n\t\t\tinProgressIndices.push(i);\n\t\t}\n\t}\n\tif (inProgressIndices.length === 0) {\n\t\tthrow new Error(\n\t\t\t\"Cannot preempt-insert: no feature is currently in-progress\",\n\t\t);\n\t}\n\tif (inProgressIndices.length > 1) {\n\t\tconst ids = inProgressIndices\n\t\t\t.map((idx) => manifest.features[idx]?.id ?? \"?\")\n\t\t\t.join(\", \");\n\t\tthrow new Error(\n\t\t\t`Cannot preempt-insert: more than one feature is in-progress (${ids}); the runner expects exactly one`,\n\t\t);\n\t}\n\tconst activeIndex = inProgressIndices[0];\n\tif (activeIndex === undefined) {\n\t\tthrow new Error(\"preempt-insert: lost track of the active feature\");\n\t}\n\tconst head = manifest.features.slice(0, activeIndex);\n\tconst active = manifest.features[activeIndex];\n\tconst tail = manifest.features.slice(activeIndex + 1);\n\tif (!active) {\n\t\t// Defensive: activeIndex is guarded above; the read can't be undefined.\n\t\tthrow new Error(\"preempt-insert: lost track of the active feature\");\n\t}\n\tconst { handoff: _activeHandoff, ...activeRest } = active;\n\tconst revertedActive: MissionFeature = {\n\t\t...activeRest,\n\t\tstatus: \"preempted\",\n\t};\n\tconst { handoff: _insertedHandoff, ...insertedRest } =\n\t\tinsertedFeature as MissionFeature;\n\tconst inserted: MissionFeature = {\n\t\t...insertedRest,\n\t\tstatus: \"pending\",\n\t};\n\treturn {\n\t\t...manifest,\n\t\tfeatures: [...head, inserted, revertedActive, ...tail],\n\t\tupdatedAt: new Date().toISOString(),\n\t};\n}\n\nfunction assertFeatureBasics(\n\tfeature: Pick<MissionFeature, \"id\" | \"description\">,\n): void {\n\tif (!feature.id.trim()) {\n\t\tthrow new Error(\"feature.id is required\");\n\t}\n\tif (!feature.description.trim()) {\n\t\tthrow new Error(\"feature.description is required\");\n\t}\n}\n\n/** Quick summary stats for UI / reporting. */\nexport function summarizeManifest(manifest: MissionManifest): {\n\ttotal: number;\n\tbyStatus: Record<MissionFeatureStatus, number>;\n\tassertionsClaimed: number;\n} {\n\tconst byStatus: Record<MissionFeatureStatus, number> = {\n\t\tpending: 0,\n\t\t\"in-progress\": 0,\n\t\tpassed: 0,\n\t\tfailed: 0,\n\t\tpreempted: 0,\n\t};\n\tconst claimed = new Set<string>();\n\tfor (const f of manifest.features) {\n\t\tbyStatus[f.status] += 1;\n\t\tfor (const id of f.fulfills) {\n\t\t\tclaimed.add(id);\n\t\t}\n\t}\n\treturn {\n\t\ttotal: manifest.features.length,\n\t\tbyStatus,\n\t\tassertionsClaimed: claimed.size,\n\t};\n}\n"]}
1
+ {"version":3,"file":"mission-manifest.js","sourceRoot":"","sources":["../../src/agent/mission-manifest.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Mission Feature Manifest\n *\n * A Mission decomposes a feature-shaped goal into a list of leaf features\n * the orchestrator can hand to worker agents. Each feature claims a\n * subset of the validation contract's assertion ids in its `fulfills`\n * field; pre-execution, the coverage gate refuses to start work until\n * every assertion is claimed by exactly one feature and no feature\n * references an unknown assertion.\n *\n * ## Feature lifecycle\n *\n * pending — created but not yet picked up by a worker\n * in-progress — claimed by a worker, work is happening\n * passed — worker completed and the validation step ran clean\n * failed — worker completed but validation reported a failure\n * preempted — a higher-priority feature was inserted ahead of this\n * one mid-run; the runner reverts this feature to\n * pending and re-runs it later with a fresh worker\n *\n * ## Worker handoff shape\n *\n * When a worker finishes a feature, it returns a structured handoff so\n * the orchestrator can record what changed and where validation\n * evidence lives. Repo edits include a `commitId` + `repoPath` so the\n * verification pass can `git checkout` the worker's work and replay\n * the test suite from there.\n *\n * ## What this module is and isn't\n *\n * Pure types + helpers (manifest construction, coverage gate against\n * validation contract assertion ids, preemption, feature lookup,\n * handoff follow-up promotion, handoff continuity gates, summary\n * stats). No disk persistence, no worker dispatch, no orchestrator\n * loop — those ride in follow-up PRs that consume the shape defined\n * here.\n */\n\n/** Lifecycle of one feature within a mission. */\nexport type MissionFeatureStatus =\n\t| \"pending\"\n\t| \"in-progress\"\n\t| \"passed\"\n\t| \"failed\"\n\t| \"preempted\";\n\nexport const MISSION_FEATURE_STATUSES = [\n\t\"pending\",\n\t\"in-progress\",\n\t\"passed\",\n\t\"failed\",\n\t\"preempted\",\n] as const satisfies readonly MissionFeatureStatus[];\n\nexport function isMissionFeatureStatus(\n\tvalue: unknown,\n): value is MissionFeatureStatus {\n\treturn (\n\t\ttypeof value === \"string\" &&\n\t\tMISSION_FEATURE_STATUSES.includes(value as MissionFeatureStatus)\n\t);\n}\n\n/** Optional milestone grouping for UI / reporting. */\nexport interface MissionMilestone {\n\tid: string;\n\tname: string;\n}\n\n/** Structured handoff returned by a worker after completing a feature. */\nexport interface MissionWorkerHandoff {\n\t/** Worker that produced the handoff. */\n\tworkerId: string;\n\t/** Did the worker's own validation step succeed? */\n\tsuccess: boolean;\n\t/** Repo path the worker checked out + edited. */\n\trepoPath?: string;\n\t/** Commit id the worker landed (head of its branch). */\n\tcommitId?: string;\n\t/** Free-form summary the worker produced for the orchestrator. */\n\tsummary?: string;\n\t/** Concrete description of what was built or changed. */\n\twhatWasImplemented?: string;\n\t/** Work that remains incomplete; empty or \"none\" means no known remainder. */\n\twhatWasLeftUndone?: string;\n\t/** Issues discovered while doing the work. Blocking issues should become follow-ups. */\n\tdiscoveredIssues?: MissionDiscoveredIssue[];\n\t/** Verification evidence the worker ran before handing off. */\n\tverification?: {\n\t\tcommandsRun?: MissionVerificationCommand[];\n\t};\n\t/** ISO 8601 timestamp the handoff was recorded. */\n\thandedOffAt: string;\n}\n\n/** Issue surfaced by a worker handoff. */\nexport interface MissionDiscoveredIssue {\n\tseverity: \"blocking\" | \"non_blocking\";\n\tdescription: string;\n\tsuggestedFix?: string;\n}\n\n/** Command-level verification evidence from a worker handoff. */\nexport interface MissionVerificationCommand {\n\tcommand: string;\n\texitCode?: number;\n\tobservation?: string;\n}\n\nexport type MissionHandoffItemKind = \"unfinished_work\" | \"discovered_issue\";\n\n/** Explicit decision not to act on a handoff item. */\nexport interface MissionHandoffDismissal {\n\tkind: MissionHandoffItemKind;\n\tkey: string;\n\tjustification: string;\n\tdismissedAt: string;\n}\n\n/** Explicit decision to handle a handoff item inside an existing feature. */\nexport interface MissionTrackedHandoffItem {\n\tsourceFeatureId: string;\n\tkind: MissionHandoffItemKind;\n\tkey: string;\n\ttrackedAt: string;\n\tnote?: string;\n}\n\n/** One leaf feature in the manifest. */\nexport interface MissionFeature {\n\t/** Stable feature id (orchestrator-assigned). */\n\tid: string;\n\t/** Short human-readable description. */\n\tdescription: string;\n\t/** Lifecycle status. */\n\tstatus: MissionFeatureStatus;\n\t/** Optional milestone the feature belongs to. */\n\tmilestone?: string;\n\t/** Worker skill the runner dispatches for this feature. */\n\tskillName?: string;\n\t/**\n\t * Validation contract assertion ids this feature commits to\n\t * satisfying. The coverage gate requires every contract assertion\n\t * to be claimed by exactly one feature.\n\t */\n\tfulfills: string[];\n\t/** Worker handoff, present after the worker completes. */\n\thandoff?: MissionWorkerHandoff;\n\t/** Handoff items the orchestrator explicitly chose not to act on. */\n\thandoffDismissals?: MissionHandoffDismissal[];\n\t/** Handoff items this feature is responsible for resolving. */\n\ttrackedHandoffItems?: MissionTrackedHandoffItem[];\n\t/** Source feature that caused this follow-up, when derived from a handoff. */\n\thandoffSourceFeatureId?: string;\n\t/** Why this follow-up exists, when derived from a handoff. */\n\thandoffFollowUpKind?: MissionHandoffItemKind;\n\t/** Stable key of the source handoff item this follow-up tracks. */\n\thandoffItemKey?: string;\n}\n\nexport function isMissionFeature(value: unknown): value is MissionFeature {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst feature = value as Record<string, unknown>;\n\treturn (\n\t\ttypeof feature.id === \"string\" &&\n\t\tfeature.id.trim().length > 0 &&\n\t\ttypeof feature.description === \"string\" &&\n\t\tfeature.description.trim().length > 0 &&\n\t\tisMissionFeatureStatus(feature.status) &&\n\t\t(typeof feature.milestone === \"undefined\" ||\n\t\t\ttypeof feature.milestone === \"string\") &&\n\t\t(typeof feature.skillName === \"undefined\" ||\n\t\t\ttypeof feature.skillName === \"string\") &&\n\t\tArray.isArray(feature.fulfills) &&\n\t\tfeature.fulfills.every((assertion) => typeof assertion === \"string\") &&\n\t\t(typeof feature.handoff === \"undefined\" ||\n\t\t\tisMissionWorkerHandoff(feature.handoff)) &&\n\t\t(typeof feature.handoffDismissals === \"undefined\" ||\n\t\t\t(Array.isArray(feature.handoffDismissals) &&\n\t\t\t\tfeature.handoffDismissals.every(isMissionHandoffDismissal))) &&\n\t\t(typeof feature.trackedHandoffItems === \"undefined\" ||\n\t\t\t(Array.isArray(feature.trackedHandoffItems) &&\n\t\t\t\tfeature.trackedHandoffItems.every(isMissionTrackedHandoffItem))) &&\n\t\t(typeof feature.handoffSourceFeatureId === \"undefined\" ||\n\t\t\ttypeof feature.handoffSourceFeatureId === \"string\") &&\n\t\t(typeof feature.handoffFollowUpKind === \"undefined\" ||\n\t\t\tisMissionHandoffItemKind(feature.handoffFollowUpKind)) &&\n\t\t(typeof feature.handoffItemKey === \"undefined\" ||\n\t\t\ttypeof feature.handoffItemKey === \"string\")\n\t);\n}\n\nfunction isMissionWorkerHandoff(value: unknown): value is MissionWorkerHandoff {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst handoff = value as Record<string, unknown>;\n\treturn (\n\t\ttypeof handoff.workerId === \"string\" &&\n\t\thandoff.workerId.trim().length > 0 &&\n\t\ttypeof handoff.success === \"boolean\" &&\n\t\t(typeof handoff.repoPath === \"undefined\" ||\n\t\t\ttypeof handoff.repoPath === \"string\") &&\n\t\t(typeof handoff.commitId === \"undefined\" ||\n\t\t\ttypeof handoff.commitId === \"string\") &&\n\t\t(typeof handoff.summary === \"undefined\" ||\n\t\t\ttypeof handoff.summary === \"string\") &&\n\t\t(typeof handoff.whatWasImplemented === \"undefined\" ||\n\t\t\ttypeof handoff.whatWasImplemented === \"string\") &&\n\t\t(typeof handoff.whatWasLeftUndone === \"undefined\" ||\n\t\t\ttypeof handoff.whatWasLeftUndone === \"string\") &&\n\t\t(typeof handoff.discoveredIssues === \"undefined\" ||\n\t\t\t(Array.isArray(handoff.discoveredIssues) &&\n\t\t\t\thandoff.discoveredIssues.every(isMissionDiscoveredIssue))) &&\n\t\t(typeof handoff.verification === \"undefined\" ||\n\t\t\tisMissionVerification(handoff.verification)) &&\n\t\ttypeof handoff.handedOffAt === \"string\" &&\n\t\t!Number.isNaN(Date.parse(handoff.handedOffAt))\n\t);\n}\n\nfunction isMissionDiscoveredIssue(\n\tvalue: unknown,\n): value is MissionDiscoveredIssue {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst issue = value as Record<string, unknown>;\n\treturn (\n\t\t(issue.severity === \"blocking\" || issue.severity === \"non_blocking\") &&\n\t\ttypeof issue.description === \"string\" &&\n\t\tissue.description.trim().length > 0 &&\n\t\t(typeof issue.suggestedFix === \"undefined\" ||\n\t\t\ttypeof issue.suggestedFix === \"string\")\n\t);\n}\n\nfunction isMissionVerification(value: unknown): boolean {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst verification = value as Record<string, unknown>;\n\treturn (\n\t\ttypeof verification.commandsRun === \"undefined\" ||\n\t\t(Array.isArray(verification.commandsRun) &&\n\t\t\tverification.commandsRun.every(isMissionVerificationCommand))\n\t);\n}\n\nfunction isMissionVerificationCommand(\n\tvalue: unknown,\n): value is MissionVerificationCommand {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst command = value as Record<string, unknown>;\n\treturn (\n\t\ttypeof command.command === \"string\" &&\n\t\tcommand.command.trim().length > 0 &&\n\t\t(typeof command.exitCode === \"undefined\" ||\n\t\t\ttypeof command.exitCode === \"number\") &&\n\t\t(typeof command.observation === \"undefined\" ||\n\t\t\ttypeof command.observation === \"string\")\n\t);\n}\n\nfunction isMissionHandoffDismissal(\n\tvalue: unknown,\n): value is MissionHandoffDismissal {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst dismissal = value as Record<string, unknown>;\n\treturn (\n\t\tisMissionHandoffItemKind(dismissal.kind) &&\n\t\ttypeof dismissal.key === \"string\" &&\n\t\tdismissal.key.trim().length > 0 &&\n\t\ttypeof dismissal.justification === \"string\" &&\n\t\tdismissal.justification.trim().length > 0 &&\n\t\ttypeof dismissal.dismissedAt === \"string\" &&\n\t\t!Number.isNaN(Date.parse(dismissal.dismissedAt))\n\t);\n}\n\nfunction isMissionTrackedHandoffItem(\n\tvalue: unknown,\n): value is MissionTrackedHandoffItem {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst item = value as Record<string, unknown>;\n\treturn (\n\t\ttypeof item.sourceFeatureId === \"string\" &&\n\t\titem.sourceFeatureId.trim().length > 0 &&\n\t\tisMissionHandoffItemKind(item.kind) &&\n\t\ttypeof item.key === \"string\" &&\n\t\titem.key.trim().length > 0 &&\n\t\ttypeof item.trackedAt === \"string\" &&\n\t\t!Number.isNaN(Date.parse(item.trackedAt)) &&\n\t\t(typeof item.note === \"undefined\" || typeof item.note === \"string\")\n\t);\n}\n\nfunction isMissionHandoffItemKind(\n\tvalue: unknown,\n): value is MissionHandoffItemKind {\n\treturn value === \"unfinished_work\" || value === \"discovered_issue\";\n}\n\n/** Top-level mission feature manifest (features.json on disk). */\nexport interface MissionManifest {\n\t/** Schema version. */\n\tversion: number;\n\t/** Mission identifier. */\n\tmissionId: string;\n\t/** Optional milestones referenced by individual features. */\n\tmilestones: MissionMilestone[];\n\t/** Leaf features, in append order. */\n\tfeatures: MissionFeature[];\n\t/** ISO 8601 creation timestamp. */\n\tcreatedAt: string;\n\t/** ISO 8601 timestamp of the most recent state change. */\n\tupdatedAt: string;\n}\n\nexport const MISSION_MANIFEST_VERSION = 1;\n\n/** Coverage gate report shape (matches validation-contract's shape). */\nexport interface MissionCoverageReport {\n\t/** True when every contract assertion is claimed by exactly one feature. */\n\tok: boolean;\n\t/** Assertion ids not claimed by any feature. */\n\torphans: string[];\n\t/** Assertion ids duplicated in the contract or claimed more than once. */\n\tduplicates: string[];\n\t/** Assertion ids referenced by features but absent from the contract. */\n\tunknownAssertions: string[];\n}\n\nexport interface MissionContinuityItem {\n\tsourceFeatureId: string;\n\tkind: MissionHandoffItemKind;\n\tkey: string;\n\tseverity?: MissionDiscoveredIssue[\"severity\"];\n\tdescription: string;\n\tstatus: \"tracked\" | \"dismissed\" | \"untracked\";\n\tfollowUpFeatureId?: string;\n\ttrackingFeatureId?: string;\n\ttrackingNote?: string;\n\tdismissalJustification?: string;\n}\n\nexport interface MissionOpenHandoffFollowUp {\n\tid: string;\n\tstatus: MissionFeatureStatus;\n\tsourceFeatureId: string;\n\tkind: MissionHandoffItemKind;\n\tdescription: string;\n}\n\nexport interface MissionOpenHandoffTracking {\n\tid: string;\n\tstatus: MissionFeatureStatus;\n\tsourceFeatureId: string;\n\tkind: MissionHandoffItemKind;\n\tkey: string;\n\tdescription: string;\n\tnote?: string;\n}\n\nexport interface MissionContinuityReport {\n\tok: boolean;\n\tunresolved: MissionContinuityItem[];\n\ttracked: MissionContinuityItem[];\n\tdismissed: MissionContinuityItem[];\n\topenFollowUps: MissionOpenHandoffFollowUp[];\n\topenTrackedItems: MissionOpenHandoffTracking[];\n}\n\nexport interface MissionCompletionReport {\n\tok: boolean;\n\tcoverage: MissionCoverageReport;\n\tcontinuity: MissionContinuityReport;\n\tincompleteFeatures: Array<{\n\t\tid: string;\n\t\tstatus: MissionFeatureStatus;\n\t\tdescription: string;\n\t}>;\n}\n\n/**\n * Construct a fresh, empty manifest. Features and milestones are added\n * later via `appendFeature` / `addMilestone`.\n */\nexport function createMissionManifest(options: {\n\tmissionId: string;\n\tnow?: string;\n}): MissionManifest {\n\tconst missionId = options.missionId.trim();\n\tif (!missionId) {\n\t\tthrow new Error(\"missionId is required\");\n\t}\n\tconst now = options.now ?? new Date().toISOString();\n\treturn {\n\t\tversion: MISSION_MANIFEST_VERSION,\n\t\tmissionId,\n\t\tmilestones: [],\n\t\tfeatures: [],\n\t\tcreatedAt: now,\n\t\tupdatedAt: now,\n\t};\n}\n\n/**\n * Append a feature to the manifest. Returns a new manifest.\n *\n * The input type excludes `handoff` — handoffs only exist after a\n * worker completes a feature, so a freshly appended feature cannot\n * carry one. We also strip any `handoff` key defensively in case a\n * caller bypasses the type with `as` to keep the lifecycle invariant.\n */\nexport function appendFeature(\n\tmanifest: MissionManifest,\n\tfeature: Omit<MissionFeature, \"status\" | \"handoff\">,\n): MissionManifest {\n\tassertFeatureBasics(feature);\n\tif (manifest.features.some((f) => f.id === feature.id)) {\n\t\tthrow new Error(`Duplicate feature id \"${feature.id}\"`);\n\t}\n\tconst { handoff: _handoff, ...rest } = feature as MissionFeature;\n\treturn {\n\t\t...manifest,\n\t\tfeatures: [\n\t\t\t...manifest.features,\n\t\t\t{\n\t\t\t\t...rest,\n\t\t\t\tstatus: \"pending\",\n\t\t\t},\n\t\t],\n\t\tupdatedAt: new Date().toISOString(),\n\t};\n}\n\n/** Add a milestone to the manifest. */\nexport function addMilestone(\n\tmanifest: MissionManifest,\n\tmilestone: MissionMilestone,\n): MissionManifest {\n\tif (manifest.milestones.some((m) => m.id === milestone.id)) {\n\t\tthrow new Error(`Duplicate milestone id \"${milestone.id}\"`);\n\t}\n\treturn {\n\t\t...manifest,\n\t\tmilestones: [...manifest.milestones, milestone],\n\t\tupdatedAt: new Date().toISOString(),\n\t};\n}\n\n/**\n * Coverage gate. Returns `ok: true` only when every contract assertion\n * id is claimed by exactly one feature's `fulfills` array and no\n * feature references an assertion id absent from the contract.\n *\n * `allContractAssertionIds` comes from\n * `listAssertionIds(validationContract)` in `./validation-contract.ts`.\n * Kept as a plain string[] here so this module doesn't need to import\n * the validation contract module.\n */\nexport function checkMissionCoverage(\n\tmanifest: MissionManifest,\n\tallContractAssertionIds: readonly string[],\n): MissionCoverageReport {\n\tconst contractIdCounts = new Map<string, number>();\n\tfor (const id of allContractAssertionIds) {\n\t\tcontractIdCounts.set(id, (contractIdCounts.get(id) ?? 0) + 1);\n\t}\n\tconst contractIds = new Set(contractIdCounts.keys());\n\tconst claimCounts = new Map<string, number>();\n\tconst unknownSet = new Set<string>();\n\n\tfor (const feature of manifest.features) {\n\t\tfor (const assertionId of feature.fulfills) {\n\t\t\tclaimCounts.set(assertionId, (claimCounts.get(assertionId) ?? 0) + 1);\n\t\t\tif (!contractIds.has(assertionId)) {\n\t\t\t\tunknownSet.add(assertionId);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst orphans: string[] = [];\n\tconst duplicateSet = new Set<string>();\n\tfor (const [id, contractCount] of contractIdCounts) {\n\t\tconst count = claimCounts.get(id) ?? 0;\n\t\tif (count === 0) {\n\t\t\torphans.push(id);\n\t\t}\n\t\tif (contractCount > 1 || count > 1) {\n\t\t\tduplicateSet.add(id);\n\t\t}\n\t}\n\t// Unknown assertion ids (not in the contract) that are claimed by\n\t// more than one feature also count as duplicates — the report\n\t// field is \"ids claimed more than once,\" not \"contract ids claimed\n\t// more than once.\" Without this the runner would silently see two\n\t// features racing on the same unknown id.\n\tfor (const id of unknownSet) {\n\t\tif ((claimCounts.get(id) ?? 0) > 1) {\n\t\t\tduplicateSet.add(id);\n\t\t}\n\t}\n\n\torphans.sort();\n\tconst duplicates = Array.from(duplicateSet).sort();\n\tconst unknownAssertions = Array.from(unknownSet).sort();\n\n\treturn {\n\t\tok:\n\t\t\torphans.length === 0 &&\n\t\t\tduplicates.length === 0 &&\n\t\t\tunknownAssertions.length === 0,\n\t\torphans,\n\t\tduplicates,\n\t\tunknownAssertions,\n\t};\n}\n\n/** Find a feature by id, or `undefined`. */\nexport function findFeature(\n\tmanifest: MissionManifest,\n\tfeatureId: string,\n): MissionFeature | undefined {\n\treturn manifest.features.find((f) => f.id === featureId);\n}\n\n/**\n * Set a feature's lifecycle status. Returns a new manifest.\n *\n * Flipping to `pending` or `preempted` clears the feature's handoff so\n * the next worker starts fresh — matching `appendFeature` and\n * `preemptInsert`. Other transitions leave the handoff intact.\n */\nexport function setFeatureStatus(\n\tmanifest: MissionManifest,\n\tfeatureId: string,\n\tstatus: MissionFeatureStatus,\n): MissionManifest {\n\tlet touched = false;\n\tconst next = manifest.features.map((f) => {\n\t\tif (f.id !== featureId) return f;\n\t\ttouched = true;\n\t\tif (status === \"pending\" || status === \"preempted\") {\n\t\t\tconst { handoff: _handoff, ...rest } = f;\n\t\t\treturn { ...rest, status };\n\t\t}\n\t\treturn { ...f, status };\n\t});\n\tif (!touched) {\n\t\tthrow new Error(`Feature id \"${featureId}\" not in manifest`);\n\t}\n\treturn { ...manifest, features: next, updatedAt: new Date().toISOString() };\n}\n\n/** Record a worker handoff against a feature. */\nexport function recordHandoff(\n\tmanifest: MissionManifest,\n\tfeatureId: string,\n\thandoff: MissionWorkerHandoff,\n): MissionManifest {\n\tlet touched = false;\n\tconst next = manifest.features.map((f) => {\n\t\tif (f.id !== featureId) return f;\n\t\ttouched = true;\n\t\treturn {\n\t\t\t...f,\n\t\t\thandoff,\n\t\t\tstatus: handoff.success ? (\"passed\" as const) : (\"failed\" as const),\n\t\t};\n\t});\n\tif (!touched) {\n\t\tthrow new Error(`Feature id \"${featureId}\" not in manifest`);\n\t}\n\treturn { ...manifest, features: next, updatedAt: handoff.handedOffAt };\n}\n\nexport interface HandoffFollowUpOptions {\n\t/** Include non-blocking discovered issues as follow-up features. */\n\tincludeNonBlockingIssues?: boolean;\n\t/** Stable timestamp for tests or deterministic callers. */\n\tnow?: string;\n}\n\n/** Promote unfinished handoff work and blocking discoveries into pending features. */\nexport function appendHandoffFollowUps(\n\tmanifest: MissionManifest,\n\tfeatureId: string,\n\toptions: HandoffFollowUpOptions = {},\n): MissionManifest {\n\tconst sourceIndex = manifest.features.findIndex((f) => f.id === featureId);\n\tif (sourceIndex === -1) {\n\t\tthrow new Error(`Feature id \"${featureId}\" not in manifest`);\n\t}\n\tconst source = manifest.features[sourceIndex];\n\tif (!source?.handoff) {\n\t\treturn manifest;\n\t}\n\n\tconst followUps = buildHandoffFollowUpFeatures(manifest, source, options);\n\tif (followUps.length === 0) {\n\t\treturn manifest;\n\t}\n\n\treturn {\n\t\t...manifest,\n\t\tfeatures: [\n\t\t\t...manifest.features.slice(0, sourceIndex + 1),\n\t\t\t...followUps,\n\t\t\t...manifest.features.slice(sourceIndex + 1),\n\t\t],\n\t\tupdatedAt: options.now ?? new Date().toISOString(),\n\t};\n}\n\nexport interface DismissHandoffItemOptions {\n\tkind: MissionHandoffItemKind;\n\tkey: string;\n\tjustification: string;\n\tincludeNonBlockingIssues?: boolean;\n\tnow?: string;\n}\n\n/** Explicitly dismiss a handoff item so completion gates can distinguish intent from omission. */\nexport function dismissHandoffItem(\n\tmanifest: MissionManifest,\n\tfeatureId: string,\n\toptions: DismissHandoffItemOptions,\n): MissionManifest {\n\tconst justification = normalizeFollowUpText(options.justification);\n\tif (!justification) {\n\t\tthrow new Error(\"dismissal justification is required\");\n\t}\n\tconst feature = findFeature(manifest, featureId);\n\tif (!feature) {\n\t\tthrow new Error(`Feature id \"${featureId}\" not in manifest`);\n\t}\n\tconst candidates = buildHandoffContinuityRecords(feature, {\n\t\tincludeNonBlockingIssues: options.includeNonBlockingIssues,\n\t});\n\tif (\n\t\t!candidates.some(\n\t\t\t(item) => item.kind === options.kind && item.key === options.key,\n\t\t)\n\t) {\n\t\tthrow new Error(\n\t\t\t`Handoff item \"${options.key}\" (${options.kind}) not found on feature \"${featureId}\"`,\n\t\t);\n\t}\n\n\tconst dismissedAt = options.now ?? new Date().toISOString();\n\treturn {\n\t\t...manifest,\n\t\tfeatures: manifest.features.map((current) => {\n\t\t\tif (current.id !== featureId) return current;\n\t\t\tconst existing = current.handoffDismissals ?? [];\n\t\t\tconst nextDismissals = [\n\t\t\t\t...existing.filter(\n\t\t\t\t\t(item) => item.kind !== options.kind || item.key !== options.key,\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tkind: options.kind,\n\t\t\t\t\tkey: options.key,\n\t\t\t\t\tjustification,\n\t\t\t\t\tdismissedAt,\n\t\t\t\t},\n\t\t\t];\n\t\t\treturn { ...current, handoffDismissals: nextDismissals };\n\t\t}),\n\t\tupdatedAt: dismissedAt,\n\t};\n}\n\nexport interface TrackHandoffItemOptions {\n\tkind: MissionHandoffItemKind;\n\tkey: string;\n\tnote?: string;\n\tincludeNonBlockingIssues?: boolean;\n\t/** Re-open the target feature to handle this item. Clears any stale target handoff. */\n\trequeueTarget?: boolean;\n\t/** Permit tracking on already-passed work without re-opening it. */\n\tallowPassedTarget?: boolean;\n\tnow?: string;\n}\n\n/** Assign a handoff item to an existing feature instead of creating a duplicate follow-up. */\nexport function trackHandoffItemOnFeature(\n\tmanifest: MissionManifest,\n\tsourceFeatureId: string,\n\ttargetFeatureId: string,\n\toptions: TrackHandoffItemOptions,\n): MissionManifest {\n\tconst source = findFeature(manifest, sourceFeatureId);\n\tif (!source) {\n\t\tthrow new Error(`Feature id \"${sourceFeatureId}\" not in manifest`);\n\t}\n\tconst target = findFeature(manifest, targetFeatureId);\n\tif (!target) {\n\t\tthrow new Error(`Feature id \"${targetFeatureId}\" not in manifest`);\n\t}\n\tif (\n\t\tsourceFeatureId === targetFeatureId &&\n\t\ttarget.status === \"passed\" &&\n\t\t!options.requeueTarget\n\t) {\n\t\tthrow new Error(\n\t\t\t`Cannot self-track handoff item on passed feature \"${targetFeatureId}\"; requeue it first`,\n\t\t);\n\t}\n\tif (target.status === \"in-progress\" && !options.requeueTarget) {\n\t\tthrow new Error(\n\t\t\t`Cannot track handoff item on in-progress feature \"${targetFeatureId}\"; requeue it so the worker receives the obligation`,\n\t\t);\n\t}\n\tif (\n\t\ttarget.status === \"passed\" &&\n\t\t!options.allowPassedTarget &&\n\t\t!options.requeueTarget\n\t) {\n\t\tthrow new Error(\n\t\t\t`Cannot track handoff item on passed feature \"${targetFeatureId}\"; requeue it or choose a pending feature`,\n\t\t);\n\t}\n\tconst selectedRecord = buildHandoffContinuityRecords(source, {\n\t\tincludeNonBlockingIssues: options.includeNonBlockingIssues,\n\t}).find((item) => item.kind === options.kind && item.key === options.key);\n\tif (!selectedRecord) {\n\t\tthrow new Error(\n\t\t\t`Handoff item \"${options.key}\" (${options.kind}) not found on feature \"${sourceFeatureId}\"`,\n\t\t);\n\t}\n\tif (\n\t\t(source.handoffDismissals ?? []).some(\n\t\t\t(item) => item.kind === options.kind && item.key === options.key,\n\t\t)\n\t) {\n\t\tthrow new Error(\n\t\t\t`Handoff item \"${options.key}\" (${options.kind}) was dismissed on feature \"${sourceFeatureId}\"`,\n\t\t);\n\t}\n\tconst existingFollowUp = findTrackedHandoffFollowUp(\n\t\tmanifest,\n\t\tsource,\n\t\tselectedRecord,\n\t);\n\tif (existingFollowUp) {\n\t\tthrow new Error(\n\t\t\t`Handoff item \"${options.key}\" (${options.kind}) is already tracked by follow-up feature \"${existingFollowUp.id}\"`,\n\t\t);\n\t}\n\n\tconst trackedAt = options.now ?? new Date().toISOString();\n\tconst note = normalizeFollowUpText(options.note);\n\treturn {\n\t\t...manifest,\n\t\tfeatures: manifest.features.map((current) => {\n\t\t\tconst existing = current.trackedHandoffItems ?? [];\n\t\t\tconst nextExisting = existing.filter(\n\t\t\t\t(item) =>\n\t\t\t\t\titem.sourceFeatureId !== sourceFeatureId ||\n\t\t\t\t\titem.kind !== options.kind ||\n\t\t\t\t\titem.key !== options.key,\n\t\t\t);\n\t\t\tif (current.id !== targetFeatureId) {\n\t\t\t\tif (nextExisting.length === existing.length) return current;\n\t\t\t\tif (nextExisting.length > 0) {\n\t\t\t\t\treturn { ...current, trackedHandoffItems: nextExisting };\n\t\t\t\t}\n\t\t\t\tconst { trackedHandoffItems: _trackedHandoffItems, ...rest } = current;\n\t\t\t\treturn rest;\n\t\t\t}\n\t\t\tconst nextTracked = [\n\t\t\t\t...nextExisting,\n\t\t\t\t{\n\t\t\t\t\tsourceFeatureId,\n\t\t\t\t\tkind: options.kind,\n\t\t\t\t\tkey: options.key,\n\t\t\t\t\ttrackedAt,\n\t\t\t\t\t...(note ? { note } : {}),\n\t\t\t\t},\n\t\t\t];\n\t\t\tif (options.requeueTarget) {\n\t\t\t\tconst { handoff: _handoff, ...rest } = current;\n\t\t\t\treturn {\n\t\t\t\t\t...rest,\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\ttrackedHandoffItems: nextTracked,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn { ...current, trackedHandoffItems: nextTracked };\n\t\t}),\n\t\tupdatedAt: trackedAt,\n\t};\n}\n\nexport interface MissionContinuityOptions {\n\t/** Include non-blocking discovered issues in the continuity gate. */\n\tincludeNonBlockingIssues?: boolean;\n}\n\n/** Report whether handoff gaps are tracked, dismissed, or still dangling. */\nexport function summarizeMissionContinuity(\n\tmanifest: MissionManifest,\n\toptions: MissionContinuityOptions = {},\n): MissionContinuityReport {\n\tconst tracked: MissionContinuityItem[] = [];\n\tconst dismissed: MissionContinuityItem[] = [];\n\tconst unresolved: MissionContinuityItem[] = [];\n\n\tfor (const feature of manifest.features) {\n\t\tconst records = buildHandoffContinuityRecords(feature, options);\n\t\tconst dismissalLookup = new Map(\n\t\t\t(feature.handoffDismissals ?? []).map((item) => [\n\t\t\t\tcontinuityLookupKey(feature.id, item.kind, item.key),\n\t\t\t\titem,\n\t\t\t]),\n\t\t);\n\n\t\tfor (const record of records) {\n\t\t\tconst lookupKey = continuityLookupKey(\n\t\t\t\tfeature.id,\n\t\t\t\trecord.kind,\n\t\t\t\trecord.key,\n\t\t\t);\n\t\t\tconst followUp = findTrackedHandoffFollowUp(manifest, feature, record);\n\t\t\tconst trackingFeature = findExistingHandoffTracking(\n\t\t\t\tmanifest,\n\t\t\t\tfeature,\n\t\t\t\trecord,\n\t\t\t);\n\t\t\tconst dismissal = dismissalLookup.get(lookupKey);\n\t\t\tif (dismissal) {\n\t\t\t\tdismissed.push({\n\t\t\t\t\tsourceFeatureId: feature.id,\n\t\t\t\t\tkind: record.kind,\n\t\t\t\t\tkey: record.key,\n\t\t\t\t\tseverity: record.severity,\n\t\t\t\t\tdescription: record.description,\n\t\t\t\t\tstatus: \"dismissed\",\n\t\t\t\t\tdismissalJustification: dismissal.justification,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (followUp) {\n\t\t\t\ttracked.push({\n\t\t\t\t\tsourceFeatureId: feature.id,\n\t\t\t\t\tkind: record.kind,\n\t\t\t\t\tkey: record.key,\n\t\t\t\t\tseverity: record.severity,\n\t\t\t\t\tdescription: record.description,\n\t\t\t\t\tstatus: \"tracked\",\n\t\t\t\t\tfollowUpFeatureId: followUp.id,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (trackingFeature) {\n\t\t\t\tconst trackedItem = trackingFeature.trackedHandoffItems?.find(\n\t\t\t\t\t(item) =>\n\t\t\t\t\t\titem.sourceFeatureId === feature.id &&\n\t\t\t\t\t\titem.kind === record.kind &&\n\t\t\t\t\t\titem.key === record.key,\n\t\t\t\t);\n\t\t\t\ttracked.push({\n\t\t\t\t\tsourceFeatureId: feature.id,\n\t\t\t\t\tkind: record.kind,\n\t\t\t\t\tkey: record.key,\n\t\t\t\t\tseverity: record.severity,\n\t\t\t\t\tdescription: record.description,\n\t\t\t\t\tstatus: \"tracked\",\n\t\t\t\t\ttrackingFeatureId: trackingFeature.id,\n\t\t\t\t\ttrackingNote: trackedItem?.note,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tunresolved.push({\n\t\t\t\tsourceFeatureId: feature.id,\n\t\t\t\tkind: record.kind,\n\t\t\t\tkey: record.key,\n\t\t\t\tseverity: record.severity,\n\t\t\t\tdescription: record.description,\n\t\t\t\tstatus: \"untracked\",\n\t\t\t});\n\t\t}\n\t}\n\n\tconst openFollowUps = manifest.features\n\t\t.filter(\n\t\t\t(feature) =>\n\t\t\t\tfeature.handoffSourceFeatureId &&\n\t\t\t\tfeature.handoffFollowUpKind &&\n\t\t\t\tfeature.status !== \"passed\",\n\t\t)\n\t\t.map((feature) => ({\n\t\t\tid: feature.id,\n\t\t\tstatus: feature.status,\n\t\t\tsourceFeatureId: feature.handoffSourceFeatureId!,\n\t\t\tkind: feature.handoffFollowUpKind!,\n\t\t\tdescription: feature.description,\n\t\t}));\n\tconst openTrackedItems = manifest.features\n\t\t.flatMap((feature) =>\n\t\t\t(feature.trackedHandoffItems ?? []).map((item) => ({\n\t\t\t\tfeature,\n\t\t\t\titem,\n\t\t\t})),\n\t\t)\n\t\t.filter(\n\t\t\t({ feature, item }) =>\n\t\t\t\tfeature.status !== \"passed\" &&\n\t\t\t\tisTrackedItemCurrent(manifest, feature, item, options),\n\t\t)\n\t\t.map(({ feature, item }) => ({\n\t\t\tid: feature.id,\n\t\t\tstatus: feature.status,\n\t\t\tsourceFeatureId: item.sourceFeatureId,\n\t\t\tkind: item.kind,\n\t\t\tkey: item.key,\n\t\t\tdescription: feature.description,\n\t\t\t...(item.note ? { note: item.note } : {}),\n\t\t}));\n\n\treturn {\n\t\tok:\n\t\t\tunresolved.length === 0 &&\n\t\t\topenFollowUps.length === 0 &&\n\t\t\topenTrackedItems.length === 0,\n\t\tunresolved,\n\t\ttracked,\n\t\tdismissed,\n\t\topenFollowUps,\n\t\topenTrackedItems,\n\t};\n}\n\n/** Final mission gate: contract coverage, all features passed, and no dangling handoff work. */\nexport function canCompleteMission(\n\tmanifest: MissionManifest,\n\tallContractAssertionIds: readonly string[],\n\toptions: MissionContinuityOptions = {},\n): MissionCompletionReport {\n\tconst coverage = checkMissionCoverage(manifest, allContractAssertionIds);\n\tconst continuity = summarizeMissionContinuity(manifest, options);\n\tconst incompleteFeatures = manifest.features\n\t\t.filter((feature) => feature.status !== \"passed\")\n\t\t.map((feature) => ({\n\t\t\tid: feature.id,\n\t\t\tstatus: feature.status,\n\t\t\tdescription: feature.description,\n\t\t}));\n\n\treturn {\n\t\tok: coverage.ok && continuity.ok && incompleteFeatures.length === 0,\n\t\tcoverage,\n\t\tcontinuity,\n\t\tincompleteFeatures,\n\t};\n}\n\n/**\n * Preempt the in-progress feature: insert a higher-priority feature at\n * the position before the active one, mark the active one as\n * `preempted` so the runner re-runs it later from scratch with a fresh\n * worker (its handoff is cleared).\n *\n * Throws when:\n * - no feature is currently in-progress\n * - more than one feature is in-progress (the runner invariant is\n * one active feature at a time; refuse to silently leave the\n * extras running)\n * - the inserted feature's id collides with an existing one\n */\nexport function preemptInsert(\n\tmanifest: MissionManifest,\n\tinsertedFeature: Omit<MissionFeature, \"status\" | \"handoff\">,\n): MissionManifest {\n\tassertFeatureBasics(insertedFeature);\n\tif (manifest.features.some((f) => f.id === insertedFeature.id)) {\n\t\tthrow new Error(\n\t\t\t`Cannot preempt-insert duplicate feature id \"${insertedFeature.id}\"`,\n\t\t);\n\t}\n\tconst inProgressIndices: number[] = [];\n\tfor (let i = 0; i < manifest.features.length; i += 1) {\n\t\tif (manifest.features[i]?.status === \"in-progress\") {\n\t\t\tinProgressIndices.push(i);\n\t\t}\n\t}\n\tif (inProgressIndices.length === 0) {\n\t\tthrow new Error(\n\t\t\t\"Cannot preempt-insert: no feature is currently in-progress\",\n\t\t);\n\t}\n\tif (inProgressIndices.length > 1) {\n\t\tconst ids = inProgressIndices\n\t\t\t.map((idx) => manifest.features[idx]?.id ?? \"?\")\n\t\t\t.join(\", \");\n\t\tthrow new Error(\n\t\t\t`Cannot preempt-insert: more than one feature is in-progress (${ids}); the runner expects exactly one`,\n\t\t);\n\t}\n\tconst activeIndex = inProgressIndices[0];\n\tif (activeIndex === undefined) {\n\t\tthrow new Error(\"preempt-insert: lost track of the active feature\");\n\t}\n\tconst head = manifest.features.slice(0, activeIndex);\n\tconst active = manifest.features[activeIndex];\n\tconst tail = manifest.features.slice(activeIndex + 1);\n\tif (!active) {\n\t\t// Defensive: activeIndex is guarded above; the read can't be undefined.\n\t\tthrow new Error(\"preempt-insert: lost track of the active feature\");\n\t}\n\tconst { handoff: _activeHandoff, ...activeRest } = active;\n\tconst revertedActive: MissionFeature = {\n\t\t...activeRest,\n\t\tstatus: \"preempted\",\n\t};\n\tconst { handoff: _insertedHandoff, ...insertedRest } =\n\t\tinsertedFeature as MissionFeature;\n\tconst inserted: MissionFeature = {\n\t\t...insertedRest,\n\t\tstatus: \"pending\",\n\t};\n\treturn {\n\t\t...manifest,\n\t\tfeatures: [...head, inserted, revertedActive, ...tail],\n\t\tupdatedAt: new Date().toISOString(),\n\t};\n}\n\nfunction assertFeatureBasics(\n\tfeature: Pick<MissionFeature, \"id\" | \"description\">,\n): void {\n\tif (!feature.id.trim()) {\n\t\tthrow new Error(\"feature.id is required\");\n\t}\n\tif (!feature.description.trim()) {\n\t\tthrow new Error(\"feature.description is required\");\n\t}\n}\n\nfunction buildHandoffFollowUpFeatures(\n\tmanifest: MissionManifest,\n\tsource: MissionFeature,\n\toptions: HandoffFollowUpOptions,\n): MissionFeature[] {\n\tconst followUps: MissionFeature[] = [];\n\tconst existingIds = new Set(manifest.features.map((feature) => feature.id));\n\tconst generatedFollowUpKeys = new Set<string>();\n\tconst dismissedKeys = new Set(\n\t\t(source.handoffDismissals ?? []).map((dismissal) =>\n\t\t\thandoffFollowUpKey(dismissal.kind, dismissal.key),\n\t\t),\n\t);\n\tconst reserveId = (seed: string) => {\n\t\tlet id = seed;\n\t\tlet suffix = 2;\n\t\twhile (existingIds.has(id)) {\n\t\t\tid = `${seed}-${suffix}`;\n\t\t\tsuffix += 1;\n\t\t}\n\t\texistingIds.add(id);\n\t\treturn id;\n\t};\n\n\tfor (const item of buildHandoffContinuityRecords(source, options)) {\n\t\tif (dismissedKeys.has(handoffFollowUpKey(item.kind, item.key))) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (findTrackedHandoffFollowUp(manifest, source, item)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (findExistingHandoffTracking(manifest, source, item)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst followUp = createHandoffFollowUpFeature({\n\t\t\tsource,\n\t\t\tid: reserveId(item.idSeed),\n\t\t\tkind: item.kind,\n\t\t\titemKey: item.key,\n\t\t\tdescription: item.followUpDescription,\n\t\t});\n\t\tif (!generatedFollowUpKeys.has(featureFollowUpKey(followUp))) {\n\t\t\tfollowUps.push(followUp);\n\t\t\tgeneratedFollowUpKeys.add(featureFollowUpKey(followUp));\n\t\t}\n\t}\n\n\treturn followUps;\n}\n\nfunction createHandoffFollowUpFeature(input: {\n\tsource: MissionFeature;\n\tid: string;\n\tkind: MissionHandoffItemKind;\n\titemKey: string;\n\tdescription: string;\n}): MissionFeature {\n\treturn {\n\t\tid: input.id,\n\t\tdescription: input.description,\n\t\tstatus: \"pending\",\n\t\tmilestone: input.source.milestone,\n\t\tskillName: input.source.skillName,\n\t\tfulfills: [],\n\t\thandoffSourceFeatureId: input.source.id,\n\t\thandoffFollowUpKind: input.kind,\n\t\thandoffItemKey: input.itemKey,\n\t};\n}\n\ninterface HandoffContinuityRecord {\n\tkind: MissionHandoffItemKind;\n\tkey: string;\n\tseverity?: MissionDiscoveredIssue[\"severity\"];\n\tdescription: string;\n\tfollowUpDescription: string;\n\tidSeed: string;\n}\n\nfunction buildHandoffContinuityRecords(\n\tsource: MissionFeature,\n\toptions: MissionContinuityOptions,\n): HandoffContinuityRecord[] {\n\tconst handoff = source.handoff;\n\tif (!handoff) {\n\t\treturn [];\n\t}\n\n\tconst records: HandoffContinuityRecord[] = [];\n\tconst unfinished = normalizeFollowUpText(handoff.whatWasLeftUndone);\n\tif (unfinished) {\n\t\trecords.push({\n\t\t\tkind: \"unfinished_work\",\n\t\t\tkey: handoffItemKey(\"unfinished_work\", unfinished),\n\t\t\tdescription: unfinished,\n\t\t\tfollowUpDescription: `Finish unfinished work from ${source.id}: ${unfinished}`,\n\t\t\tidSeed: `${source.id}-followup-unfinished`,\n\t\t});\n\t}\n\n\tfor (const [index, issue] of (handoff.discoveredIssues ?? []).entries()) {\n\t\tif (\n\t\t\tissue.severity === \"non_blocking\" &&\n\t\t\t!options.includeNonBlockingIssues\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst description = normalizeFollowUpText(issue.description);\n\t\tif (!description) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst suggestedFix = normalizeFollowUpText(issue.suggestedFix);\n\t\trecords.push({\n\t\t\tkind: \"discovered_issue\",\n\t\t\tkey: handoffItemKey(\n\t\t\t\t\"discovered_issue\",\n\t\t\t\t`${issue.severity}:${description}:${suggestedFix ?? \"\"}`,\n\t\t\t),\n\t\t\tseverity: issue.severity,\n\t\t\tdescription: suggestedFix\n\t\t\t\t? `${description} Suggested fix: ${suggestedFix}`\n\t\t\t\t: description,\n\t\t\tfollowUpDescription: suggestedFix\n\t\t\t\t? `Resolve ${issue.severity} issue from ${source.id}: ${trimTrailingSentencePunctuation(description)}. Suggested fix: ${suggestedFix}`\n\t\t\t\t: `Resolve ${issue.severity} issue from ${source.id}: ${description}`,\n\t\t\tidSeed: `${source.id}-followup-issue-${index + 1}`,\n\t\t});\n\t}\n\n\treturn records;\n}\n\nfunction findTrackedHandoffFollowUp(\n\tmanifest: MissionManifest,\n\tsource: MissionFeature,\n\trecord: HandoffContinuityRecord,\n): MissionFeature | undefined {\n\treturn manifest.features.find(\n\t\t(feature) =>\n\t\t\tfeature.handoffSourceFeatureId === source.id &&\n\t\t\tfeature.handoffFollowUpKind === record.kind &&\n\t\t\t(feature.handoffItemKey === record.key ||\n\t\t\t\t(!feature.handoffItemKey &&\n\t\t\t\t\tfeature.description === record.followUpDescription)),\n\t);\n}\n\nfunction findExistingHandoffTracking(\n\tmanifest: MissionManifest,\n\tsource: MissionFeature,\n\trecord: HandoffContinuityRecord,\n): MissionFeature | undefined {\n\treturn manifest.features.find((feature) =>\n\t\t(feature.trackedHandoffItems ?? []).some(\n\t\t\t(item) =>\n\t\t\t\titem.sourceFeatureId === source.id &&\n\t\t\t\titem.kind === record.kind &&\n\t\t\t\titem.key === record.key &&\n\t\t\t\tisTrackingFreshForSource(source, item),\n\t\t),\n\t);\n}\n\nfunction isTrackingFreshForSource(\n\tsource: MissionFeature,\n\titem: MissionTrackedHandoffItem,\n): boolean {\n\tif (!source.handoff) {\n\t\treturn true;\n\t}\n\treturn compareIsoInstants(item.trackedAt, source.handoff.handedOffAt) >= 0;\n}\n\nfunction isTrackedItemCurrent(\n\tmanifest: MissionManifest,\n\ttrackingFeature: MissionFeature,\n\titem: MissionTrackedHandoffItem,\n\toptions: MissionContinuityOptions,\n): boolean {\n\tconst source = findFeature(manifest, item.sourceFeatureId);\n\tif (!source) {\n\t\treturn false;\n\t}\n\tif (\n\t\t(source.handoffDismissals ?? []).some(\n\t\t\t(dismissal) => dismissal.kind === item.kind && dismissal.key === item.key,\n\t\t)\n\t) {\n\t\treturn false;\n\t}\n\tif (!source.handoff) {\n\t\treturn trackingFeature.id === source.id;\n\t}\n\tconst record = buildHandoffContinuityRecords(source, options).find(\n\t\t(candidate) => candidate.kind === item.kind && candidate.key === item.key,\n\t);\n\tif (!record) {\n\t\treturn false;\n\t}\n\treturn isTrackingFreshForSource(source, item);\n}\n\nfunction compareIsoInstants(a: string, b: string): number {\n\tconst aTime = Date.parse(a);\n\tconst bTime = Date.parse(b);\n\tif (Number.isFinite(aTime) && Number.isFinite(bTime)) {\n\t\treturn aTime - bTime;\n\t}\n\treturn a.localeCompare(b);\n}\n\nfunction normalizeFollowUpText(value: string | undefined): string | null {\n\tif (value === undefined) {\n\t\treturn null;\n\t}\n\tconst normalized = value.replace(/\\s+/g, \" \").trim();\n\tif (!normalized || normalized.toLowerCase() === \"none\") {\n\t\treturn null;\n\t}\n\treturn normalized;\n}\n\nfunction featureFollowUpKey(feature: MissionFeature): string {\n\treturn handoffFollowUpKey(\n\t\tfeature.handoffFollowUpKind!,\n\t\tfeature.handoffItemKey ?? feature.description,\n\t);\n}\n\nfunction handoffFollowUpKey(\n\tkind: MissionHandoffItemKind,\n\tdescription: string,\n): string {\n\treturn `${kind}:${description}`;\n}\n\nfunction handoffItemKey(kind: MissionHandoffItemKind, value: string): string {\n\treturn `${kind}:${value.replace(/\\s+/g, \" \").trim().toLowerCase()}`;\n}\n\nfunction continuityLookupKey(\n\tsourceFeatureId: string,\n\tkind: MissionHandoffItemKind,\n\titemKey: string,\n): string {\n\treturn `${sourceFeatureId}:${kind}:${itemKey}`;\n}\n\nfunction trimTrailingSentencePunctuation(value: string): string {\n\treturn value.replace(/[.!?]+$/g, \"\");\n}\n\n/** Quick summary stats for UI / reporting. */\nexport function summarizeManifest(manifest: MissionManifest): {\n\ttotal: number;\n\tbyStatus: Record<MissionFeatureStatus, number>;\n\tassertionsClaimed: number;\n} {\n\tconst byStatus: Record<MissionFeatureStatus, number> = {\n\t\tpending: 0,\n\t\t\"in-progress\": 0,\n\t\tpassed: 0,\n\t\tfailed: 0,\n\t\tpreempted: 0,\n\t};\n\tconst claimed = new Set<string>();\n\tfor (const f of manifest.features) {\n\t\tbyStatus[f.status] += 1;\n\t\tfor (const id of f.fulfills) {\n\t\t\tclaimed.add(id);\n\t\t}\n\t}\n\treturn {\n\t\ttotal: manifest.features.length,\n\t\tbyStatus,\n\t\tassertionsClaimed: claimed.size,\n\t};\n}\n"]}
@@ -0,0 +1,80 @@
1
+ import { type MissionFeature, type MissionManifest } from "./mission-manifest.js";
2
+ export declare const MISSION_STORE_SCHEMA = "evalops.maestro.mission-store.v1";
3
+ export type MissionState = "awaiting-input" | "ready" | "running" | "blocked" | "completed" | "failed";
4
+ export interface MissionWorkerState {
5
+ startedAt: string;
6
+ completedAt?: string;
7
+ exitCode?: number;
8
+ }
9
+ export interface MissionTokenUsage {
10
+ inputTokens: number;
11
+ outputTokens: number;
12
+ cacheCreationTokens?: number;
13
+ cacheReadTokens?: number;
14
+ thinkingTokens?: number;
15
+ credits?: number;
16
+ }
17
+ export interface MissionProgressEntry {
18
+ type: "mission_created" | "mission_started" | "mission_blocked" | "mission_completed" | "worker_started" | "worker_completed" | "worker_failed" | "note";
19
+ timestamp: string;
20
+ message?: string;
21
+ featureId?: string;
22
+ workerSessionId?: string;
23
+ exitCode?: number;
24
+ }
25
+ export interface MissionStoreSnapshot {
26
+ schemaVersion: typeof MISSION_STORE_SCHEMA;
27
+ missionId: string;
28
+ sourceMissionId?: string;
29
+ title?: string;
30
+ state: MissionState;
31
+ features: MissionFeature[];
32
+ progressLog: MissionProgressEntry[];
33
+ workerSessionIds: string[];
34
+ workerStates: Record<string, MissionWorkerState>;
35
+ tokenUsageBySessionId: Record<string, MissionTokenUsage>;
36
+ tokenUsage?: MissionTokenUsage;
37
+ createdAt: string;
38
+ updatedAt: string;
39
+ }
40
+ export interface MissionStoreConfig {
41
+ rootDir?: string;
42
+ now?: () => string;
43
+ }
44
+ export declare function getMissionStoreRoot(rootDir?: string): string;
45
+ export declare function sanitizeMissionId(missionId: string): string;
46
+ export declare function getMissionDir(missionId: string, rootDir?: string): string;
47
+ export declare function getMissionStatePath(missionId: string, rootDir?: string): string;
48
+ export declare function createMissionStoreSnapshot(options: {
49
+ missionId: string;
50
+ title?: string;
51
+ manifest?: MissionManifest;
52
+ now?: string;
53
+ }): MissionStoreSnapshot;
54
+ export declare function sumMissionTokenUsage(usages: Record<string, MissionTokenUsage>): MissionTokenUsage | undefined;
55
+ export declare class MissionStore {
56
+ private snapshot;
57
+ private lastSavedSnapshot;
58
+ private stateTouched;
59
+ private readonly rootDir?;
60
+ private readonly now;
61
+ constructor(snapshot: MissionStoreSnapshot, config?: MissionStoreConfig);
62
+ static create(options: {
63
+ missionId: string;
64
+ title?: string;
65
+ manifest?: MissionManifest;
66
+ config?: MissionStoreConfig;
67
+ }): MissionStore;
68
+ static load(missionId: string, config?: MissionStoreConfig): MissionStore;
69
+ getSnapshot(): MissionStoreSnapshot;
70
+ save(): MissionStoreSnapshot;
71
+ setState(state: MissionState, message?: string): MissionStoreSnapshot;
72
+ setFeatures(features: readonly MissionFeature[]): MissionStoreSnapshot;
73
+ appendProgress(entry: Omit<MissionProgressEntry, "timestamp"> & {
74
+ timestamp?: string;
75
+ }): MissionStoreSnapshot;
76
+ setSessionTokenUsage(sessionId: string, tokenUsage: MissionTokenUsage): MissionStoreSnapshot;
77
+ private saveOrRestore;
78
+ }
79
+ export declare function listMissionStoreSnapshots(rootDir?: string): MissionStoreSnapshot[];
80
+ //# sourceMappingURL=mission-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission-store.d.ts","sourceRoot":"","sources":["../../src/agent/mission-store.ts"],"names":[],"mappings":"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"}