open-multi-agent-kit 0.98.5 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +4 -3
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js +1 -0
  5. package/dist/bun/cli.js.map +1 -1
  6. package/dist/bun/register-bundled-coding-agent.d.ts +10 -0
  7. package/dist/bun/register-bundled-coding-agent.d.ts.map +1 -0
  8. package/dist/bun/register-bundled-coding-agent.js +12 -0
  9. package/dist/bun/register-bundled-coding-agent.js.map +1 -0
  10. package/dist/cli/args.d.ts +1 -1
  11. package/dist/cli/args.d.ts.map +1 -1
  12. package/dist/cli/args.js +1 -1
  13. package/dist/cli/args.js.map +1 -1
  14. package/dist/cli/help.d.ts.map +1 -1
  15. package/dist/cli/help.js +2 -1
  16. package/dist/cli/help.js.map +1 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +14 -2
  19. package/dist/cli.js.map +1 -1
  20. package/dist/commands/neo-cli.d.ts +9 -0
  21. package/dist/commands/neo-cli.d.ts.map +1 -0
  22. package/dist/commands/neo-cli.js +61 -0
  23. package/dist/commands/neo-cli.js.map +1 -0
  24. package/dist/commands/verified-run-cli.d.ts.map +1 -1
  25. package/dist/commands/verified-run-cli.js +2 -2
  26. package/dist/commands/verified-run-cli.js.map +1 -1
  27. package/dist/core/agent-session.d.ts +29 -2
  28. package/dist/core/agent-session.d.ts.map +1 -1
  29. package/dist/core/agent-session.js +126 -32
  30. package/dist/core/agent-session.js.map +1 -1
  31. package/dist/core/bundled-skills.d.ts +4 -0
  32. package/dist/core/bundled-skills.d.ts.map +1 -0
  33. package/dist/core/bundled-skills.js +32 -0
  34. package/dist/core/bundled-skills.js.map +1 -0
  35. package/dist/core/cli-diagnostics.d.ts +6 -0
  36. package/dist/core/cli-diagnostics.d.ts.map +1 -0
  37. package/dist/core/cli-diagnostics.js +20 -0
  38. package/dist/core/cli-diagnostics.js.map +1 -0
  39. package/dist/core/context-budget-headroom.d.ts +12 -0
  40. package/dist/core/context-budget-headroom.d.ts.map +1 -1
  41. package/dist/core/context-budget-headroom.js +35 -0
  42. package/dist/core/context-budget-headroom.js.map +1 -1
  43. package/dist/core/context-budget-v2-input-validation.d.ts +4 -0
  44. package/dist/core/context-budget-v2-input-validation.d.ts.map +1 -0
  45. package/dist/core/context-budget-v2-input-validation.js +79 -0
  46. package/dist/core/context-budget-v2-input-validation.js.map +1 -0
  47. package/dist/core/context-budget-v2-observability.d.ts +15 -0
  48. package/dist/core/context-budget-v2-observability.d.ts.map +1 -0
  49. package/dist/core/context-budget-v2-observability.js +35 -0
  50. package/dist/core/context-budget-v2-observability.js.map +1 -0
  51. package/dist/core/context-budget-v2-planned-items.d.ts +5 -0
  52. package/dist/core/context-budget-v2-planned-items.d.ts.map +1 -0
  53. package/dist/core/context-budget-v2-planned-items.js +40 -0
  54. package/dist/core/context-budget-v2-planned-items.js.map +1 -0
  55. package/dist/core/context-budget-v2-planner.d.ts.map +1 -1
  56. package/dist/core/context-budget-v2-planner.js +57 -38
  57. package/dist/core/context-budget-v2-planner.js.map +1 -1
  58. package/dist/core/context-budget-v2-selection.d.ts +19 -3
  59. package/dist/core/context-budget-v2-selection.d.ts.map +1 -1
  60. package/dist/core/context-budget-v2-selection.js +35 -57
  61. package/dist/core/context-budget-v2-selection.js.map +1 -1
  62. package/dist/core/context-budget-v2-tiers.d.ts.map +1 -1
  63. package/dist/core/context-budget-v2-tiers.js +9 -42
  64. package/dist/core/context-budget-v2-tiers.js.map +1 -1
  65. package/dist/core/context-budget-v2-types.d.ts +8 -1
  66. package/dist/core/context-budget-v2-types.d.ts.map +1 -1
  67. package/dist/core/context-budget-v2-types.js.map +1 -1
  68. package/dist/core/devin-harness-dispatch.d.ts +12 -0
  69. package/dist/core/devin-harness-dispatch.d.ts.map +1 -0
  70. package/dist/core/devin-harness-dispatch.js +12 -0
  71. package/dist/core/devin-harness-dispatch.js.map +1 -0
  72. package/dist/core/devin-harness.d.ts +53 -0
  73. package/dist/core/devin-harness.d.ts.map +1 -0
  74. package/dist/core/devin-harness.js +112 -0
  75. package/dist/core/devin-harness.js.map +1 -0
  76. package/dist/core/domain-dispatch.d.ts +4 -1
  77. package/dist/core/domain-dispatch.d.ts.map +1 -1
  78. package/dist/core/domain-dispatch.js +5 -0
  79. package/dist/core/domain-dispatch.js.map +1 -1
  80. package/dist/core/domain-loadouts-provider-harness.d.ts +12 -0
  81. package/dist/core/domain-loadouts-provider-harness.d.ts.map +1 -0
  82. package/dist/core/domain-loadouts-provider-harness.js +122 -0
  83. package/dist/core/domain-loadouts-provider-harness.js.map +1 -0
  84. package/dist/core/domain-loadouts.d.ts +2 -33
  85. package/dist/core/domain-loadouts.d.ts.map +1 -1
  86. package/dist/core/domain-loadouts.js +3 -56
  87. package/dist/core/domain-loadouts.js.map +1 -1
  88. package/dist/core/domain-profile.d.ts +40 -0
  89. package/dist/core/domain-profile.d.ts.map +1 -0
  90. package/dist/core/domain-profile.js +7 -0
  91. package/dist/core/domain-profile.js.map +1 -0
  92. package/dist/core/extensions/bundled-virtual-modules.d.ts +15 -0
  93. package/dist/core/extensions/bundled-virtual-modules.d.ts.map +1 -0
  94. package/dist/core/extensions/bundled-virtual-modules.js +63 -0
  95. package/dist/core/extensions/bundled-virtual-modules.js.map +1 -0
  96. package/dist/core/extensions/loader.d.ts.map +1 -1
  97. package/dist/core/extensions/loader.js +2 -42
  98. package/dist/core/extensions/loader.js.map +1 -1
  99. package/dist/core/extensions/runner.d.ts +1 -0
  100. package/dist/core/extensions/runner.d.ts.map +1 -1
  101. package/dist/core/extensions/runner.js +6 -0
  102. package/dist/core/extensions/runner.js.map +1 -1
  103. package/dist/core/extensions/types.d.ts +10 -0
  104. package/dist/core/extensions/types.d.ts.map +1 -1
  105. package/dist/core/extensions/types.js.map +1 -1
  106. package/dist/core/grok-harness-dispatch.d.ts +6 -20
  107. package/dist/core/grok-harness-dispatch.d.ts.map +1 -1
  108. package/dist/core/grok-harness-dispatch.js +6 -55
  109. package/dist/core/grok-harness-dispatch.js.map +1 -1
  110. package/dist/core/grok-harness.d.ts +7 -9
  111. package/dist/core/grok-harness.d.ts.map +1 -1
  112. package/dist/core/grok-harness.js +9 -23
  113. package/dist/core/grok-harness.js.map +1 -1
  114. package/dist/core/harness-skills.d.ts +20 -0
  115. package/dist/core/harness-skills.d.ts.map +1 -0
  116. package/dist/core/harness-skills.js +36 -0
  117. package/dist/core/harness-skills.js.map +1 -0
  118. package/dist/core/index.d.ts +2 -1
  119. package/dist/core/index.d.ts.map +1 -1
  120. package/dist/core/index.js +2 -1
  121. package/dist/core/index.js.map +1 -1
  122. package/dist/core/loadout-runtime-state.d.ts +25 -0
  123. package/dist/core/loadout-runtime-state.d.ts.map +1 -0
  124. package/dist/core/loadout-runtime-state.js +39 -0
  125. package/dist/core/loadout-runtime-state.js.map +1 -0
  126. package/dist/core/loadout-runtime.d.ts +4 -20
  127. package/dist/core/loadout-runtime.d.ts.map +1 -1
  128. package/dist/core/loadout-runtime.js +6 -13
  129. package/dist/core/loadout-runtime.js.map +1 -1
  130. package/dist/core/mcp/client.d.ts +27 -6
  131. package/dist/core/mcp/client.d.ts.map +1 -1
  132. package/dist/core/mcp/client.js +80 -20
  133. package/dist/core/mcp/client.js.map +1 -1
  134. package/dist/core/mcp/manager.d.ts +10 -1
  135. package/dist/core/mcp/manager.d.ts.map +1 -1
  136. package/dist/core/mcp/manager.js +68 -9
  137. package/dist/core/mcp/manager.js.map +1 -1
  138. package/dist/core/mcp/protocol.d.ts +9 -3
  139. package/dist/core/mcp/protocol.d.ts.map +1 -1
  140. package/dist/core/mcp/protocol.js +61 -15
  141. package/dist/core/mcp/protocol.js.map +1 -1
  142. package/dist/core/mcp/stdio-transport.d.ts +12 -1
  143. package/dist/core/mcp/stdio-transport.d.ts.map +1 -1
  144. package/dist/core/mcp/stdio-transport.js +30 -2
  145. package/dist/core/mcp/stdio-transport.js.map +1 -1
  146. package/dist/core/mcp-descriptor-injection.d.ts +26 -0
  147. package/dist/core/mcp-descriptor-injection.d.ts.map +1 -0
  148. package/dist/core/mcp-descriptor-injection.js +25 -0
  149. package/dist/core/mcp-descriptor-injection.js.map +1 -0
  150. package/dist/core/mcp-public-presets.d.ts +1 -3
  151. package/dist/core/mcp-public-presets.d.ts.map +1 -1
  152. package/dist/core/mcp-public-presets.js +3 -15
  153. package/dist/core/mcp-public-presets.js.map +1 -1
  154. package/dist/core/model-registry.d.ts.map +1 -1
  155. package/dist/core/model-registry.js +24 -3
  156. package/dist/core/model-registry.js.map +1 -1
  157. package/dist/core/model-resolver.d.ts +1 -41
  158. package/dist/core/model-resolver.d.ts.map +1 -1
  159. package/dist/core/model-resolver.js +2 -49
  160. package/dist/core/model-resolver.js.map +1 -1
  161. package/dist/core/neo/catalog.d.ts +20 -0
  162. package/dist/core/neo/catalog.d.ts.map +1 -0
  163. package/dist/core/neo/catalog.js +50 -0
  164. package/dist/core/neo/catalog.js.map +1 -0
  165. package/dist/core/neo/setup.d.ts +3 -0
  166. package/dist/core/neo/setup.d.ts.map +1 -0
  167. package/dist/core/neo/setup.js +47 -0
  168. package/dist/core/neo/setup.js.map +1 -0
  169. package/dist/core/provider-default-models.d.ts +43 -0
  170. package/dist/core/provider-default-models.d.ts.map +1 -0
  171. package/dist/core/provider-default-models.js +51 -0
  172. package/dist/core/provider-default-models.js.map +1 -0
  173. package/dist/core/provider-display-names.d.ts.map +1 -1
  174. package/dist/core/provider-display-names.js +2 -0
  175. package/dist/core/provider-display-names.js.map +1 -1
  176. package/dist/core/provider-error-classification.d.ts +57 -0
  177. package/dist/core/provider-error-classification.d.ts.map +1 -0
  178. package/dist/core/provider-error-classification.js +103 -0
  179. package/dist/core/provider-error-classification.js.map +1 -0
  180. package/dist/core/provider-harness-dispatch.d.ts +63 -0
  181. package/dist/core/provider-harness-dispatch.d.ts.map +1 -0
  182. package/dist/core/provider-harness-dispatch.js +60 -0
  183. package/dist/core/provider-harness-dispatch.js.map +1 -0
  184. package/dist/core/provider-resilience.d.ts +10 -0
  185. package/dist/core/provider-resilience.d.ts.map +1 -1
  186. package/dist/core/provider-resilience.js +36 -3
  187. package/dist/core/provider-resilience.js.map +1 -1
  188. package/dist/core/provider-usage-commandcode.d.ts +9 -0
  189. package/dist/core/provider-usage-commandcode.d.ts.map +1 -0
  190. package/dist/core/provider-usage-commandcode.js +198 -0
  191. package/dist/core/provider-usage-commandcode.js.map +1 -0
  192. package/dist/core/provider-usage-devin.d.ts +18 -0
  193. package/dist/core/provider-usage-devin.d.ts.map +1 -0
  194. package/dist/core/provider-usage-devin.js +71 -0
  195. package/dist/core/provider-usage-devin.js.map +1 -0
  196. package/dist/core/provider-usage-text.d.ts +5 -0
  197. package/dist/core/provider-usage-text.d.ts.map +1 -0
  198. package/dist/core/provider-usage-text.js +15 -0
  199. package/dist/core/provider-usage-text.js.map +1 -0
  200. package/dist/core/provider-usage-types.d.ts +2 -1
  201. package/dist/core/provider-usage-types.d.ts.map +1 -1
  202. package/dist/core/provider-usage-types.js.map +1 -1
  203. package/dist/core/provider-usage.d.ts +1 -2
  204. package/dist/core/provider-usage.d.ts.map +1 -1
  205. package/dist/core/provider-usage.js +18 -7
  206. package/dist/core/provider-usage.js.map +1 -1
  207. package/dist/core/resource-admission.d.ts +36 -0
  208. package/dist/core/resource-admission.d.ts.map +1 -1
  209. package/dist/core/resource-admission.js +59 -0
  210. package/dist/core/resource-admission.js.map +1 -1
  211. package/dist/core/resource-loader.d.ts.map +1 -1
  212. package/dist/core/resource-loader.js +2 -2
  213. package/dist/core/resource-loader.js.map +1 -1
  214. package/dist/core/run-execution-api.d.ts +1 -1
  215. package/dist/core/run-execution-api.d.ts.map +1 -1
  216. package/dist/core/run-execution-api.js.map +1 -1
  217. package/dist/core/run-usage-ledger.d.ts +47 -0
  218. package/dist/core/run-usage-ledger.d.ts.map +1 -0
  219. package/dist/core/run-usage-ledger.js +162 -0
  220. package/dist/core/run-usage-ledger.js.map +1 -0
  221. package/dist/core/run-usage-operation.d.ts +8 -0
  222. package/dist/core/run-usage-operation.d.ts.map +1 -0
  223. package/dist/core/run-usage-operation.js +12 -0
  224. package/dist/core/run-usage-operation.js.map +1 -0
  225. package/dist/core/sdk.d.ts.map +1 -1
  226. package/dist/core/sdk.js +20 -16
  227. package/dist/core/sdk.js.map +1 -1
  228. package/dist/core/session-failure-cause.d.ts.map +1 -1
  229. package/dist/core/session-failure-cause.js +14 -5
  230. package/dist/core/session-failure-cause.js.map +1 -1
  231. package/dist/core/session-prompt-lifecycle.d.ts +6 -0
  232. package/dist/core/session-prompt-lifecycle.d.ts.map +1 -1
  233. package/dist/core/session-prompt-lifecycle.js +47 -2
  234. package/dist/core/session-prompt-lifecycle.js.map +1 -1
  235. package/dist/core/session-termination.d.ts.map +1 -1
  236. package/dist/core/session-termination.js +4 -2
  237. package/dist/core/session-termination.js.map +1 -1
  238. package/dist/core/subagent-lane-authority.d.ts +28 -0
  239. package/dist/core/subagent-lane-authority.d.ts.map +1 -0
  240. package/dist/core/subagent-lane-authority.js +119 -0
  241. package/dist/core/subagent-lane-authority.js.map +1 -0
  242. package/dist/core/subagent-lane-contract.d.ts +114 -0
  243. package/dist/core/subagent-lane-contract.d.ts.map +1 -0
  244. package/dist/core/subagent-lane-contract.js +18 -0
  245. package/dist/core/subagent-lane-contract.js.map +1 -0
  246. package/dist/core/subagent-lane-launcher.d.ts +3 -6
  247. package/dist/core/subagent-lane-launcher.d.ts.map +1 -1
  248. package/dist/core/subagent-lane-launcher.js +53 -12
  249. package/dist/core/subagent-lane-launcher.js.map +1 -1
  250. package/dist/core/subagent-orchestration.d.ts +4 -17
  251. package/dist/core/subagent-orchestration.d.ts.map +1 -1
  252. package/dist/core/subagent-orchestration.js.map +1 -1
  253. package/dist/core/verified-run/broker.d.ts.map +1 -1
  254. package/dist/core/verified-run/broker.js +4 -1
  255. package/dist/core/verified-run/broker.js.map +1 -1
  256. package/dist/core/verified-run/dag-phase.d.ts +1 -1
  257. package/dist/core/verified-run/dag-phase.d.ts.map +1 -1
  258. package/dist/core/verified-run/dag-phase.js +46 -8
  259. package/dist/core/verified-run/dag-phase.js.map +1 -1
  260. package/dist/core/verified-run/dag-projection.d.ts.map +1 -1
  261. package/dist/core/verified-run/dag-projection.js +25 -12
  262. package/dist/core/verified-run/dag-projection.js.map +1 -1
  263. package/dist/core/verified-run/dag-types.d.ts +11 -0
  264. package/dist/core/verified-run/dag-types.d.ts.map +1 -1
  265. package/dist/core/verified-run/dag-types.js.map +1 -1
  266. package/dist/core/verified-run/event-parser.d.ts.map +1 -1
  267. package/dist/core/verified-run/event-parser.js +1 -0
  268. package/dist/core/verified-run/event-parser.js.map +1 -1
  269. package/dist/core/verified-run/owned-execution.d.ts +1 -0
  270. package/dist/core/verified-run/owned-execution.d.ts.map +1 -1
  271. package/dist/core/verified-run/owned-execution.js +7 -1
  272. package/dist/core/verified-run/owned-execution.js.map +1 -1
  273. package/dist/core/verified-run/process-projection.d.ts +13 -0
  274. package/dist/core/verified-run/process-projection.d.ts.map +1 -0
  275. package/dist/core/verified-run/process-projection.js +82 -0
  276. package/dist/core/verified-run/process-projection.js.map +1 -0
  277. package/dist/core/verified-run/projection.d.ts.map +1 -1
  278. package/dist/core/verified-run/projection.js +11 -55
  279. package/dist/core/verified-run/projection.js.map +1 -1
  280. package/dist/core/verified-run/run-types.d.ts +1 -0
  281. package/dist/core/verified-run/run-types.d.ts.map +1 -1
  282. package/dist/core/verified-run/run-types.js.map +1 -1
  283. package/dist/core/verified-run/task-execution.d.ts +9 -0
  284. package/dist/core/verified-run/task-execution.d.ts.map +1 -0
  285. package/dist/core/verified-run/task-execution.js +29 -0
  286. package/dist/core/verified-run/task-execution.js.map +1 -0
  287. package/dist/core/verified-run/writer-projection.d.ts.map +1 -1
  288. package/dist/core/verified-run/writer-projection.js +6 -5
  289. package/dist/core/verified-run/writer-projection.js.map +1 -1
  290. package/dist/core/workload-permit-pool.d.ts +1 -1
  291. package/dist/core/workload-permit-pool.d.ts.map +1 -1
  292. package/dist/core/workload-permit-pool.js +3 -0
  293. package/dist/core/workload-permit-pool.js.map +1 -1
  294. package/dist/guardrails/strict-evidence-approval-adapter.d.ts +34 -0
  295. package/dist/guardrails/strict-evidence-approval-adapter.d.ts.map +1 -0
  296. package/dist/guardrails/strict-evidence-approval-adapter.js +70 -0
  297. package/dist/guardrails/strict-evidence-approval-adapter.js.map +1 -0
  298. package/dist/index.d.ts +3 -0
  299. package/dist/index.d.ts.map +1 -1
  300. package/dist/index.js +1 -0
  301. package/dist/index.js.map +1 -1
  302. package/dist/main.d.ts.map +1 -1
  303. package/dist/main.js +11 -18
  304. package/dist/main.js.map +1 -1
  305. package/dist/modes/acp/acp-agent.d.ts +24 -0
  306. package/dist/modes/acp/acp-agent.d.ts.map +1 -0
  307. package/dist/modes/acp/acp-agent.js +133 -0
  308. package/dist/modes/acp/acp-agent.js.map +1 -0
  309. package/dist/modes/acp/acp-mode.d.ts +4 -0
  310. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  311. package/dist/modes/acp/acp-mode.js +34 -0
  312. package/dist/modes/acp/acp-mode.js.map +1 -0
  313. package/dist/modes/acp/acp-session.d.ts +4 -0
  314. package/dist/modes/acp/acp-session.d.ts.map +1 -0
  315. package/dist/modes/acp/acp-session.js +76 -0
  316. package/dist/modes/acp/acp-session.js.map +1 -0
  317. package/dist/modes/acp/acp-transport.d.ts +5 -0
  318. package/dist/modes/acp/acp-transport.d.ts.map +1 -0
  319. package/dist/modes/acp/acp-transport.js +90 -0
  320. package/dist/modes/acp/acp-transport.js.map +1 -0
  321. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  322. package/dist/modes/interactive/interactive-mode.js +3 -5
  323. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  324. package/dist/modes/interactive/resource-description.d.ts +3 -0
  325. package/dist/modes/interactive/resource-description.d.ts.map +1 -0
  326. package/dist/modes/interactive/resource-description.js +15 -0
  327. package/dist/modes/interactive/resource-description.js.map +1 -0
  328. package/docs/audit-revalidation-2026-09-17.md +77 -0
  329. package/docs/devin-harness.md +150 -0
  330. package/docs/docs.json +4 -0
  331. package/docs/ecraf-normalization.md +83 -0
  332. package/docs/environment-variables.md +2 -1
  333. package/docs/index.md +1 -0
  334. package/docs/loadout-domains/README.md +2 -1
  335. package/docs/loadout-domains/devin-harness.md +72 -0
  336. package/docs/metrics.md +57 -16
  337. package/docs/model-catalog-refresh.md +51 -1
  338. package/docs/models.md +1 -1
  339. package/docs/neo.md +134 -0
  340. package/docs/providers.md +143 -1
  341. package/docs/release-audit-0.98.5.md +17 -0
  342. package/docs/release-audit-0.99.0.md +68 -0
  343. package/docs/run-protocol.md +4 -3
  344. package/docs/run-usage-ledger.md +56 -0
  345. package/docs/runtime-algorithms.md +48 -1
  346. package/docs/sdk.md +9 -5
  347. package/docs/settings.md +1 -1
  348. package/docs/skills.md +1 -1
  349. package/docs/startup-resource-labels-testing.md +47 -0
  350. package/docs/tb21-audit.md +18 -4
  351. package/docs/usage.md +7 -1
  352. package/docs/verified-run-remaining-design.md +881 -0
  353. package/docs/verified-run-testing.md +91 -0
  354. package/docs/verified-run.md +30 -9
  355. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  356. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  357. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  358. package/examples/extensions/gondolin/package-lock.json +2 -2
  359. package/examples/extensions/gondolin/package.json +1 -1
  360. package/examples/extensions/sandbox/package-lock.json +2 -2
  361. package/examples/extensions/sandbox/package.json +1 -1
  362. package/examples/extensions/subagent/adaptive-agent-runtime.ts +14 -1
  363. package/examples/extensions/subagent/graph-result.ts +48 -0
  364. package/examples/extensions/subagent/index.ts +246 -111
  365. package/examples/extensions/subagent/managed-process-tree.ts +42 -0
  366. package/examples/extensions/subagent/managed-process.test.ts +24 -0
  367. package/examples/extensions/subagent/managed-process.ts +93 -112
  368. package/examples/extensions/subagent/subagent-runtime-types.ts +17 -1
  369. package/examples/extensions/subagent/subagent-stream.ts +161 -0
  370. package/examples/extensions/terminal-browser/README.md +54 -0
  371. package/examples/extensions/terminal-browser/bridge-protocol.ts +29 -0
  372. package/examples/extensions/terminal-browser/bridge.ts +219 -0
  373. package/examples/extensions/terminal-browser/browser-surface.ts +288 -0
  374. package/examples/extensions/terminal-browser/index.ts +215 -0
  375. package/examples/extensions/terminal-browser/placeholders.ts +49 -0
  376. package/examples/extensions/with-deps/package-lock.json +2 -2
  377. package/examples/extensions/with-deps/package.json +1 -1
  378. package/npm-shrinkwrap.json +18 -18
  379. package/package.json +8 -7
  380. package/resources/neo/skills/omk-browser/SKILL.md +32 -0
  381. package/resources/neo/skills/omk-code-review/SKILL.md +24 -0
  382. package/resources/neo/skills/omk-computeruse/SKILL.md +34 -0
  383. package/resources/neo/skills/omk-mcp-setup/SKILL.md +48 -0
  384. package/resources/neo/skills/omk-research/SKILL.md +24 -0
  385. package/resources/neo/skills/omk-site/SKILL.md +28 -0
@@ -1 +1 @@
1
- {"version":3,"file":"event-parser.js","sourceRoot":"","sources":["../../../src/core/verified-run/event-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,GAC5B,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,SAAS,IAAI,CAAC,KAAc,EAAU;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAChH,OAAO,KAAK,CAAC;AAAA,CACb;AACD,SAAS,MAAM,CAAC,KAAc,EAAU;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC5E,OAAO,MAAM,CAAC;AAAA,CACd;AACD,SAAS,OAAO,CAAC,KAAc,EAAU;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACpH,OAAO,KAAK,CAAC;AAAA,CACb;AAED,SAAS,UAAU,CAAC,GAAY,EAAqB;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACrF,MAAM,KAAK,GAA4B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI;QAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACpG,OAAO,MAAM,CAAC,MAAM,CAAC;QACpB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC/B,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;QACrC,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;QACtC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;QACxC,OAAO,EAAE,IAAI;KACb,CAAC,CAAC;AAAA,CACH;AAED,MAAM,UAAU,aAAa,CAAC,GAAY,EAAY;IACrD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC3G,MAAM,KAAK,GAA4B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS;YACb,OAAO;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC1C,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC;aAC5C,CAAC;QACH,KAAK,iBAAiB;YACrB,IAAI,KAAK,CAAC,MAAM,KAAK,qBAAqB;gBAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;YACpF,OAAO;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC;gBACzC,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBAClD,MAAM,EAAE,KAAK,CAAC,MAAM;aACpB,CAAC;QACH,KAAK,UAAU,EAAE,CAAC;YACjB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;gBAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAClG,OAAO;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBACpC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;aAC5D,CAAC;QACH,CAAC;QACD,KAAK,kBAAkB;YACtB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,KAAK,eAAe;YACnB,OAAO;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBACpC,QAAQ,EAAE,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC;aAChD,CAAC;QACH,KAAK,cAAc;YAClB,OAAO;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC1B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC/B,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;gBACtC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;aACrC,CAAC;QACH,KAAK,eAAe;YACnB,OAAO;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC1B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC/B,YAAY,EAAE,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;gBAC7E,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC5D,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;aACrC,CAAC;QACH,KAAK,cAAc,CAAC;QACpB,KAAK,eAAe;YACnB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,KAAK,eAAe;YACnB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/D,KAAK,eAAe;YACnB,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS;gBAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAClF,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACzD,KAAK,QAAQ;YACZ,OAAO;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBACpC,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;aAC5D,CAAC;QACH,KAAK,WAAW;YACf,OAAO;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC5B,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpF,GAAG,CAAC,KAAK,CAAC,sBAAsB,KAAK,SAAS;oBAC7C,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC;aACrE,CAAC;QACH,KAAK,SAAS,CAAC;QACf,KAAK,eAAe,CAAC;QACrB,KAAK,kBAAkB,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,MAAM,GAAG,GAAG;gBAC5F,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG;gBACd,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;gBACrC,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAC7E,CAAC;YACF,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,SAAS;oBACb,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvF,KAAK,kBAAkB;oBACtB,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,4BAA4B,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9F,KAAK,eAAe;oBACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE;wBAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;oBACxG,OAAO;wBACN,GAAG,MAAM;wBACT,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,OAAO,EAAE,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC;wBAChD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;qBACrD,CAAC;gBACH;oBACC,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC1C,CAAC;QACF,CAAC;QACD,KAAK,WAAW;YACf,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;gBAAE,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;YACjF,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnG,KAAK,QAAQ;YACZ,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD;YACC,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;AAAA,CACD","sourcesContent":["import {\n\tparseRunContract,\n\tparseRunResumeCommand,\n\tparseRunStartCommand,\n\tparseRunTaskRetryCommand,\n\tparseRunWriterRestartCommand,\n} from \"omk-protocol\";\nimport type { RunTaskCheckpoint } from \"./dag-types.ts\";\nimport { parseNamespaceIdentity } from \"./namespace-identity.ts\";\nimport { parseRecoveryBudget } from \"./recovery-clock.ts\";\nimport type { RunEvent } from \"./run-types.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\n\nfunction text(value: unknown): string {\n\tif (typeof value !== \"string\" || !/^[A-Za-z0-9_-]{1,128}$/.test(value)) throw new VerifiedRunError(\"integrity\");\n\treturn value;\n}\nfunction digest(value: unknown): string {\n\tconst result = text(value);\n\tif (!/^[a-f0-9]{64}$/.test(result)) throw new VerifiedRunError(\"integrity\");\n\treturn result;\n}\nfunction integer(value: unknown): number {\n\tif (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 0) throw new VerifiedRunError(\"integrity\");\n\treturn value;\n}\n\nfunction checkpoint(raw: unknown): RunTaskCheckpoint {\n\tif (typeof raw !== \"object\" || raw === null) throw new VerifiedRunError(\"integrity\");\n\tconst value: Record<string, unknown> = Object.fromEntries(Object.entries(raw));\n\tif (value.status !== \"succeeded\" || value.failure !== null) throw new VerifiedRunError(\"integrity\");\n\treturn Object.freeze({\n\t\ttaskId: text(value.taskId),\n\t\tattempt: integer(value.attempt),\n\t\tgeneration: integer(value.generation),\n\t\tstatus: \"succeeded\",\n\t\tinputDigest: digest(value.inputDigest),\n\t\toutputDigest: digest(value.outputDigest),\n\t\tfailure: null,\n\t});\n}\n\nexport function parseRunEvent(raw: unknown): RunEvent {\n\tif (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) throw new VerifiedRunError(\"integrity\");\n\tconst value: Record<string, unknown> = Object.fromEntries(Object.entries(raw));\n\tswitch (value.kind) {\n\t\tcase \"created\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tcontract: parseRunContract(value.contract),\n\t\t\t\tcommand: parseRunStartCommand(value.command),\n\t\t\t};\n\t\tcase \"budget_anchored\":\n\t\t\tif (value.driver !== \"linux-pidns-gate-v1\") throw new VerifiedRunError(\"integrity\");\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tbudget: parseRecoveryBudget(value.budget),\n\t\t\t\tenvironmentDigest: digest(value.environmentDigest),\n\t\t\t\tdriver: value.driver,\n\t\t\t};\n\t\tcase \"dispatch\": {\n\t\t\tif (value.role !== \"writer\" && value.role !== \"verifier\") throw new VerifiedRunError(\"integrity\");\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\texecutionId: text(value.executionId),\n\t\t\t\trole: value.role,\n\t\t\t\tclaimId: value.claimId === null ? null : text(value.claimId),\n\t\t\t};\n\t\t}\n\t\tcase \"input_checkpoint\":\n\t\t\treturn { kind: value.kind, digest: digest(value.digest) };\n\t\tcase \"process_ready\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\texecutionId: text(value.executionId),\n\t\t\t\tidentity: parseNamespaceIdentity(value.identity),\n\t\t\t};\n\t\tcase \"task_started\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\ttaskId: text(value.taskId),\n\t\t\t\tattempt: integer(value.attempt),\n\t\t\t\tinputDigest: digest(value.inputDigest),\n\t\t\t\tobservedMs: integer(value.observedMs),\n\t\t\t};\n\t\tcase \"task_finished\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\ttaskId: text(value.taskId),\n\t\t\t\tattempt: integer(value.attempt),\n\t\t\t\toutputDigest: value.outputDigest === null ? null : digest(value.outputDigest),\n\t\t\t\tfailure: value.failure === null ? null : text(value.failure),\n\t\t\t\tobservedMs: integer(value.observedMs),\n\t\t\t};\n\t\tcase \"tasks_paused\":\n\t\tcase \"writer_opened\":\n\t\t\treturn { kind: value.kind };\n\t\tcase \"model_request\":\n\t\t\treturn { kind: value.kind, requestId: text(value.requestId) };\n\t\tcase \"writer_closed\":\n\t\t\tif (typeof value.completed !== \"boolean\") throw new VerifiedRunError(\"integrity\");\n\t\t\treturn { kind: value.kind, completed: value.completed };\n\t\tcase \"exited\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\texecutionId: text(value.executionId),\n\t\t\t\tfailure: value.failure === null ? null : text(value.failure),\n\t\t\t};\n\t\tcase \"candidate\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tdigest: digest(value.digest),\n\t\t\t\t...(value.observedMs === undefined ? {} : { observedMs: integer(value.observedMs) }),\n\t\t\t\t...(value.verificationDeadlineMs === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { verificationDeadlineMs: integer(value.verificationDeadlineMs) }),\n\t\t\t};\n\t\tcase \"resumed\":\n\t\tcase \"tasks_retried\":\n\t\tcase \"writer_restarted\": {\n\t\t\tif (!Array.isArray(value.reconciledExecutionIds) || value.reconciledExecutionIds.length > 128)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tconst fields = {\n\t\t\t\tobservedMs: integer(value.observedMs),\n\t\t\t\treconciledExecutionIds: Object.freeze(value.reconciledExecutionIds.map(text)),\n\t\t\t};\n\t\t\tswitch (value.kind) {\n\t\t\t\tcase \"resumed\":\n\t\t\t\t\treturn { ...fields, kind: value.kind, command: parseRunResumeCommand(value.command) };\n\t\t\t\tcase \"writer_restarted\":\n\t\t\t\t\treturn { ...fields, kind: value.kind, command: parseRunWriterRestartCommand(value.command) };\n\t\t\t\tcase \"tasks_retried\":\n\t\t\t\t\tif (!Array.isArray(value.adopted) || value.adopted.length > 16) throw new VerifiedRunError(\"integrity\");\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t\tkind: value.kind,\n\t\t\t\t\t\tcommand: parseRunTaskRetryCommand(value.command),\n\t\t\t\t\t\tadopted: Object.freeze(value.adopted.map(checkpoint)),\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t}\n\t\t}\n\t\tcase \"evaluated\":\n\t\t\tif (typeof value.verified !== \"boolean\") throw new VerifiedRunError(\"integrity\");\n\t\t\treturn { kind: value.kind, receiptDigest: digest(value.receiptDigest), verified: value.verified };\n\t\tcase \"failed\":\n\t\t\treturn { kind: value.kind, code: text(value.code) };\n\t\tdefault:\n\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t}\n}\n"]}
1
+ {"version":3,"file":"event-parser.js","sourceRoot":"","sources":["../../../src/core/verified-run/event-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tparseRunContract,\n\tparseRunResumeCommand,\n\tparseRunStartCommand,\n\tparseRunTaskRetryCommand,\n\tparseRunWriterRestartCommand,\n} from \"omk-protocol\";\nimport type { RunTaskCheckpoint } from \"./dag-types.ts\";\nimport { parseNamespaceIdentity } from \"./namespace-identity.ts\";\nimport { parseRecoveryBudget } from \"./recovery-clock.ts\";\nimport type { RunEvent } from \"./run-types.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\n\nfunction text(value: unknown): string {\n\tif (typeof value !== \"string\" || !/^[A-Za-z0-9_-]{1,128}$/.test(value)) throw new VerifiedRunError(\"integrity\");\n\treturn value;\n}\nfunction digest(value: unknown): string {\n\tconst result = text(value);\n\tif (!/^[a-f0-9]{64}$/.test(result)) throw new VerifiedRunError(\"integrity\");\n\treturn result;\n}\nfunction integer(value: unknown): number {\n\tif (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 0) throw new VerifiedRunError(\"integrity\");\n\treturn value;\n}\n\nfunction checkpoint(raw: unknown): RunTaskCheckpoint {\n\tif (typeof raw !== \"object\" || raw === null) throw new VerifiedRunError(\"integrity\");\n\tconst value: Record<string, unknown> = Object.fromEntries(Object.entries(raw));\n\tif (value.status !== \"succeeded\" || value.failure !== null) throw new VerifiedRunError(\"integrity\");\n\treturn Object.freeze({\n\t\ttaskId: text(value.taskId),\n\t\tattempt: integer(value.attempt),\n\t\tgeneration: integer(value.generation),\n\t\tstatus: \"succeeded\",\n\t\tinputDigest: digest(value.inputDigest),\n\t\toutputDigest: digest(value.outputDigest),\n\t\tfailure: null,\n\t});\n}\n\nexport function parseRunEvent(raw: unknown): RunEvent {\n\tif (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) throw new VerifiedRunError(\"integrity\");\n\tconst value: Record<string, unknown> = Object.fromEntries(Object.entries(raw));\n\tswitch (value.kind) {\n\t\tcase \"created\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tcontract: parseRunContract(value.contract),\n\t\t\t\tcommand: parseRunStartCommand(value.command),\n\t\t\t};\n\t\tcase \"budget_anchored\":\n\t\t\tif (value.driver !== \"linux-pidns-gate-v1\") throw new VerifiedRunError(\"integrity\");\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tbudget: parseRecoveryBudget(value.budget),\n\t\t\t\tenvironmentDigest: digest(value.environmentDigest),\n\t\t\t\tdriver: value.driver,\n\t\t\t};\n\t\tcase \"dispatch\": {\n\t\t\tif (value.role !== \"writer\" && value.role !== \"verifier\") throw new VerifiedRunError(\"integrity\");\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\texecutionId: text(value.executionId),\n\t\t\t\trole: value.role,\n\t\t\t\tclaimId: value.claimId === null ? null : text(value.claimId),\n\t\t\t\t...(value.taskId === undefined ? {} : { taskId: text(value.taskId) }),\n\t\t\t};\n\t\t}\n\t\tcase \"input_checkpoint\":\n\t\t\treturn { kind: value.kind, digest: digest(value.digest) };\n\t\tcase \"process_ready\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\texecutionId: text(value.executionId),\n\t\t\t\tidentity: parseNamespaceIdentity(value.identity),\n\t\t\t};\n\t\tcase \"task_started\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\ttaskId: text(value.taskId),\n\t\t\t\tattempt: integer(value.attempt),\n\t\t\t\tinputDigest: digest(value.inputDigest),\n\t\t\t\tobservedMs: integer(value.observedMs),\n\t\t\t};\n\t\tcase \"task_finished\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\ttaskId: text(value.taskId),\n\t\t\t\tattempt: integer(value.attempt),\n\t\t\t\toutputDigest: value.outputDigest === null ? null : digest(value.outputDigest),\n\t\t\t\tfailure: value.failure === null ? null : text(value.failure),\n\t\t\t\tobservedMs: integer(value.observedMs),\n\t\t\t};\n\t\tcase \"tasks_paused\":\n\t\tcase \"writer_opened\":\n\t\t\treturn { kind: value.kind };\n\t\tcase \"model_request\":\n\t\t\treturn { kind: value.kind, requestId: text(value.requestId) };\n\t\tcase \"writer_closed\":\n\t\t\tif (typeof value.completed !== \"boolean\") throw new VerifiedRunError(\"integrity\");\n\t\t\treturn { kind: value.kind, completed: value.completed };\n\t\tcase \"exited\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\texecutionId: text(value.executionId),\n\t\t\t\tfailure: value.failure === null ? null : text(value.failure),\n\t\t\t};\n\t\tcase \"candidate\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tdigest: digest(value.digest),\n\t\t\t\t...(value.observedMs === undefined ? {} : { observedMs: integer(value.observedMs) }),\n\t\t\t\t...(value.verificationDeadlineMs === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { verificationDeadlineMs: integer(value.verificationDeadlineMs) }),\n\t\t\t};\n\t\tcase \"resumed\":\n\t\tcase \"tasks_retried\":\n\t\tcase \"writer_restarted\": {\n\t\t\tif (!Array.isArray(value.reconciledExecutionIds) || value.reconciledExecutionIds.length > 128)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tconst fields = {\n\t\t\t\tobservedMs: integer(value.observedMs),\n\t\t\t\treconciledExecutionIds: Object.freeze(value.reconciledExecutionIds.map(text)),\n\t\t\t};\n\t\t\tswitch (value.kind) {\n\t\t\t\tcase \"resumed\":\n\t\t\t\t\treturn { ...fields, kind: value.kind, command: parseRunResumeCommand(value.command) };\n\t\t\t\tcase \"writer_restarted\":\n\t\t\t\t\treturn { ...fields, kind: value.kind, command: parseRunWriterRestartCommand(value.command) };\n\t\t\t\tcase \"tasks_retried\":\n\t\t\t\t\tif (!Array.isArray(value.adopted) || value.adopted.length > 16) throw new VerifiedRunError(\"integrity\");\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t\tkind: value.kind,\n\t\t\t\t\t\tcommand: parseRunTaskRetryCommand(value.command),\n\t\t\t\t\t\tadopted: Object.freeze(value.adopted.map(checkpoint)),\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t}\n\t\t}\n\t\tcase \"evaluated\":\n\t\t\tif (typeof value.verified !== \"boolean\") throw new VerifiedRunError(\"integrity\");\n\t\t\treturn { kind: value.kind, receiptDigest: digest(value.receiptDigest), verified: value.verified };\n\t\tcase \"failed\":\n\t\t\treturn { kind: value.kind, code: text(value.code) };\n\t\tdefault:\n\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t}\n}\n"]}
@@ -6,6 +6,7 @@ export interface OwnedRunCommand {
6
6
  readonly workspace: string;
7
7
  readonly deadline: number;
8
8
  readonly claimId: string | null;
9
+ readonly taskId?: string;
9
10
  }
10
11
  export interface OwnedRunResult {
11
12
  readonly executionId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"owned-execution.d.ts","sourceRoot":"","sources":["../../../src/core/verified-run/owned-execution.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAIvD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AACD,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED,2FAA2F;AAC3F,wBAAsB,iBAAiB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE;IACP,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC9B,GACC,OAAO,CAAC,cAAc,CAAC,CAgCzB","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { performance } from \"node:perf_hooks\";\nimport { executeSandbox, type SandboxOutcome } from \"./broker.ts\";\nimport type { VerifiedRunJournal } from \"./journal.ts\";\nimport type { NamespaceIdentity } from \"./namespace-identity.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\n\nexport interface OwnedRunCommand {\n\treadonly role: \"writer\" | \"verifier\";\n\treadonly argv: readonly string[];\n\treadonly workspace: string;\n\treadonly deadline: number;\n\treadonly claimId: string | null;\n}\nexport interface OwnedRunResult {\n\treadonly executionId: string;\n\treadonly result: SandboxOutcome;\n\treadonly timeoutMs: number;\n}\n\n/** The mandatory durable intent boundary is shared by command and AgentSession writers. */\nexport async function executeRunCommand(\n\tjournal: VerifiedRunJournal,\n\trequest: OwnedRunCommand,\n\tpolicy: {\n\t\treadonly cleanupMs: number;\n\t\treadonly maxOutputBytes: number;\n\t\treadonly signal?: AbortSignal;\n\t},\n): Promise<OwnedRunResult> {\n\tif (Math.floor(request.deadline - performance.now()) <= 0) throw new VerifiedRunError(\"deadline\");\n\tif (policy.signal?.aborted) throw new VerifiedRunError(\"cancelled\");\n\tconst generation = journal.state.generation;\n\tconst executionId = randomUUID();\n\tjournal.append({ kind: \"dispatch\", executionId, role: request.role, claimId: request.claimId });\n\tconst timeoutMs = Math.floor(request.deadline - performance.now());\n\tif (timeoutMs <= 0 || policy.signal?.aborted) {\n\t\tconst failure = policy.signal?.aborted ? \"cancelled\" : \"deadline\";\n\t\tjournal.append({ kind: \"exited\", executionId, failure });\n\t\tthrow new VerifiedRunError(failure);\n\t}\n\tconst result = await executeSandbox({\n\t\tworkspace: request.workspace,\n\t\targv: request.argv,\n\t\twritable: request.role === \"writer\",\n\t\ttimeoutMs,\n\t\tcleanupMs: policy.cleanupMs,\n\t\tmaxOutputBytes: policy.maxOutputBytes,\n\t\t...(policy.signal ? { signal: policy.signal } : {}),\n\t\t...(journal.state.budget\n\t\t\t? {\n\t\t\t\t\tonReady: (identity: NamespaceIdentity) => {\n\t\t\t\t\t\tif (journal.state.generation !== generation) throw new VerifiedRunError(\"stale_generation\");\n\t\t\t\t\t\tjournal.append({ kind: \"process_ready\", executionId, identity });\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tif (journal.state.generation !== generation) throw new VerifiedRunError(\"stale_generation\");\n\tjournal.append({ kind: \"exited\", executionId, failure: request.role === \"writer\" ? result.failure : null });\n\treturn { executionId, result, timeoutMs };\n}\n"]}
1
+ {"version":3,"file":"owned-execution.d.ts","sourceRoot":"","sources":["../../../src/core/verified-run/owned-execution.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAIvD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED,2FAA2F;AAC3F,wBAAsB,iBAAiB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE;IACP,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC9B,GACC,OAAO,CAAC,cAAc,CAAC,CAsCzB","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { performance } from \"node:perf_hooks\";\nimport { executeSandbox, type SandboxOutcome } from \"./broker.ts\";\nimport type { VerifiedRunJournal } from \"./journal.ts\";\nimport type { NamespaceIdentity } from \"./namespace-identity.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\n\nexport interface OwnedRunCommand {\n\treadonly role: \"writer\" | \"verifier\";\n\treadonly argv: readonly string[];\n\treadonly workspace: string;\n\treadonly deadline: number;\n\treadonly claimId: string | null;\n\treadonly taskId?: string;\n}\nexport interface OwnedRunResult {\n\treadonly executionId: string;\n\treadonly result: SandboxOutcome;\n\treadonly timeoutMs: number;\n}\n\n/** The mandatory durable intent boundary is shared by command and AgentSession writers. */\nexport async function executeRunCommand(\n\tjournal: VerifiedRunJournal,\n\trequest: OwnedRunCommand,\n\tpolicy: {\n\t\treadonly cleanupMs: number;\n\t\treadonly maxOutputBytes: number;\n\t\treadonly signal?: AbortSignal;\n\t},\n): Promise<OwnedRunResult> {\n\tif (Math.floor(request.deadline - performance.now()) <= 0) throw new VerifiedRunError(\"deadline\");\n\tif (policy.signal?.aborted) throw new VerifiedRunError(\"cancelled\");\n\tconst generation = journal.state.generation;\n\tconst executionId = randomUUID();\n\tjournal.append({\n\t\tkind: \"dispatch\",\n\t\texecutionId,\n\t\trole: request.role,\n\t\tclaimId: request.claimId,\n\t\t...(request.taskId === undefined ? {} : { taskId: request.taskId }),\n\t});\n\tconst timeoutMs = Math.floor(request.deadline - performance.now());\n\tif (timeoutMs <= 0 || policy.signal?.aborted) {\n\t\tconst failure = policy.signal?.aborted ? \"cancelled\" : \"deadline\";\n\t\tjournal.append({ kind: \"exited\", executionId, failure });\n\t\tthrow new VerifiedRunError(failure);\n\t}\n\tconst result = await executeSandbox({\n\t\tworkspace: request.workspace,\n\t\targv: request.argv,\n\t\twritable: request.role === \"writer\",\n\t\ttimeoutMs,\n\t\tcleanupMs: policy.cleanupMs,\n\t\tmaxOutputBytes: policy.maxOutputBytes,\n\t\t...(policy.signal ? { signal: policy.signal } : {}),\n\t\t...(journal.state.budget\n\t\t\t? {\n\t\t\t\t\tonReady: (identity: NamespaceIdentity) => {\n\t\t\t\t\t\tif (journal.state.generation !== generation) throw new VerifiedRunError(\"stale_generation\");\n\t\t\t\t\t\tjournal.append({ kind: \"process_ready\", executionId, identity });\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tif (journal.state.generation !== generation) throw new VerifiedRunError(\"stale_generation\");\n\tjournal.append({ kind: \"exited\", executionId, failure: request.role === \"writer\" ? result.failure : null });\n\treturn { executionId, result, timeoutMs };\n}\n"]}
@@ -10,7 +10,13 @@ export async function executeRunCommand(journal, request, policy) {
10
10
  throw new VerifiedRunError("cancelled");
11
11
  const generation = journal.state.generation;
12
12
  const executionId = randomUUID();
13
- journal.append({ kind: "dispatch", executionId, role: request.role, claimId: request.claimId });
13
+ journal.append({
14
+ kind: "dispatch",
15
+ executionId,
16
+ role: request.role,
17
+ claimId: request.claimId,
18
+ ...(request.taskId === undefined ? {} : { taskId: request.taskId }),
19
+ });
14
20
  const timeoutMs = Math.floor(request.deadline - performance.now());
15
21
  if (timeoutMs <= 0 || policy.signal?.aborted) {
16
22
  const failure = policy.signal?.aborted ? "cancelled" : "deadline";
@@ -1 +1 @@
1
- {"version":3,"file":"owned-execution.js","sourceRoot":"","sources":["../../../src/core/verified-run/owned-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { performance } from \"node:perf_hooks\";\nimport { executeSandbox, type SandboxOutcome } from \"./broker.ts\";\nimport type { VerifiedRunJournal } from \"./journal.ts\";\nimport type { NamespaceIdentity } from \"./namespace-identity.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\n\nexport interface OwnedRunCommand {\n\treadonly role: \"writer\" | \"verifier\";\n\treadonly argv: readonly string[];\n\treadonly workspace: string;\n\treadonly deadline: number;\n\treadonly claimId: string | null;\n}\nexport interface OwnedRunResult {\n\treadonly executionId: string;\n\treadonly result: SandboxOutcome;\n\treadonly timeoutMs: number;\n}\n\n/** The mandatory durable intent boundary is shared by command and AgentSession writers. */\nexport async function executeRunCommand(\n\tjournal: VerifiedRunJournal,\n\trequest: OwnedRunCommand,\n\tpolicy: {\n\t\treadonly cleanupMs: number;\n\t\treadonly maxOutputBytes: number;\n\t\treadonly signal?: AbortSignal;\n\t},\n): Promise<OwnedRunResult> {\n\tif (Math.floor(request.deadline - performance.now()) <= 0) throw new VerifiedRunError(\"deadline\");\n\tif (policy.signal?.aborted) throw new VerifiedRunError(\"cancelled\");\n\tconst generation = journal.state.generation;\n\tconst executionId = randomUUID();\n\tjournal.append({ kind: \"dispatch\", executionId, role: request.role, claimId: request.claimId });\n\tconst timeoutMs = Math.floor(request.deadline - performance.now());\n\tif (timeoutMs <= 0 || policy.signal?.aborted) {\n\t\tconst failure = policy.signal?.aborted ? \"cancelled\" : \"deadline\";\n\t\tjournal.append({ kind: \"exited\", executionId, failure });\n\t\tthrow new VerifiedRunError(failure);\n\t}\n\tconst result = await executeSandbox({\n\t\tworkspace: request.workspace,\n\t\targv: request.argv,\n\t\twritable: request.role === \"writer\",\n\t\ttimeoutMs,\n\t\tcleanupMs: policy.cleanupMs,\n\t\tmaxOutputBytes: policy.maxOutputBytes,\n\t\t...(policy.signal ? { signal: policy.signal } : {}),\n\t\t...(journal.state.budget\n\t\t\t? {\n\t\t\t\t\tonReady: (identity: NamespaceIdentity) => {\n\t\t\t\t\t\tif (journal.state.generation !== generation) throw new VerifiedRunError(\"stale_generation\");\n\t\t\t\t\t\tjournal.append({ kind: \"process_ready\", executionId, identity });\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tif (journal.state.generation !== generation) throw new VerifiedRunError(\"stale_generation\");\n\tjournal.append({ kind: \"exited\", executionId, failure: request.role === \"writer\" ? result.failure : null });\n\treturn { executionId, result, timeoutMs };\n}\n"]}
1
+ {"version":3,"file":"owned-execution.js","sourceRoot":"","sources":["../../../src/core/verified-run/owned-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { performance } from \"node:perf_hooks\";\nimport { executeSandbox, type SandboxOutcome } from \"./broker.ts\";\nimport type { VerifiedRunJournal } from \"./journal.ts\";\nimport type { NamespaceIdentity } from \"./namespace-identity.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\n\nexport interface OwnedRunCommand {\n\treadonly role: \"writer\" | \"verifier\";\n\treadonly argv: readonly string[];\n\treadonly workspace: string;\n\treadonly deadline: number;\n\treadonly claimId: string | null;\n\treadonly taskId?: string;\n}\nexport interface OwnedRunResult {\n\treadonly executionId: string;\n\treadonly result: SandboxOutcome;\n\treadonly timeoutMs: number;\n}\n\n/** The mandatory durable intent boundary is shared by command and AgentSession writers. */\nexport async function executeRunCommand(\n\tjournal: VerifiedRunJournal,\n\trequest: OwnedRunCommand,\n\tpolicy: {\n\t\treadonly cleanupMs: number;\n\t\treadonly maxOutputBytes: number;\n\t\treadonly signal?: AbortSignal;\n\t},\n): Promise<OwnedRunResult> {\n\tif (Math.floor(request.deadline - performance.now()) <= 0) throw new VerifiedRunError(\"deadline\");\n\tif (policy.signal?.aborted) throw new VerifiedRunError(\"cancelled\");\n\tconst generation = journal.state.generation;\n\tconst executionId = randomUUID();\n\tjournal.append({\n\t\tkind: \"dispatch\",\n\t\texecutionId,\n\t\trole: request.role,\n\t\tclaimId: request.claimId,\n\t\t...(request.taskId === undefined ? {} : { taskId: request.taskId }),\n\t});\n\tconst timeoutMs = Math.floor(request.deadline - performance.now());\n\tif (timeoutMs <= 0 || policy.signal?.aborted) {\n\t\tconst failure = policy.signal?.aborted ? \"cancelled\" : \"deadline\";\n\t\tjournal.append({ kind: \"exited\", executionId, failure });\n\t\tthrow new VerifiedRunError(failure);\n\t}\n\tconst result = await executeSandbox({\n\t\tworkspace: request.workspace,\n\t\targv: request.argv,\n\t\twritable: request.role === \"writer\",\n\t\ttimeoutMs,\n\t\tcleanupMs: policy.cleanupMs,\n\t\tmaxOutputBytes: policy.maxOutputBytes,\n\t\t...(policy.signal ? { signal: policy.signal } : {}),\n\t\t...(journal.state.budget\n\t\t\t? {\n\t\t\t\t\tonReady: (identity: NamespaceIdentity) => {\n\t\t\t\t\t\tif (journal.state.generation !== generation) throw new VerifiedRunError(\"stale_generation\");\n\t\t\t\t\t\tjournal.append({ kind: \"process_ready\", executionId, identity });\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tif (journal.state.generation !== generation) throw new VerifiedRunError(\"stale_generation\");\n\tjournal.append({ kind: \"exited\", executionId, failure: request.role === \"writer\" ? result.failure : null });\n\treturn { executionId, result, timeoutMs };\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import type { RunEvent, WriterReduction } from "./run-types.ts";
2
+ /** Replay-only mutable bookkeeping; active processes always share one role/phase. */
3
+ export interface ProcessReduction {
4
+ readonly dispatched: Set<string>;
5
+ readonly checked: Set<string>;
6
+ activeRole: "writer" | "verifier";
7
+ }
8
+ type ProcessEvent = Extract<RunEvent, {
9
+ kind: "dispatch" | "process_ready" | "exited";
10
+ }>;
11
+ export declare function reduceProcessEvent(context: WriterReduction, event: ProcessEvent, progress: ProcessReduction): void;
12
+ export {};
13
+ //# sourceMappingURL=process-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-projection.d.ts","sourceRoot":"","sources":["../../../src/core/verified-run/process-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAiB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAK/E,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,UAAU,EAAE,QAAQ,GAAG,UAAU,CAAC;CAClC;AACD,KAAK,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,UAAU,GAAG,eAAe,GAAG,QAAQ,CAAA;CAAE,CAAC,CAAC;AAEzF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAkFlH","sourcesContent":["import type { RunEvent, RunProjection, WriterReduction } from \"./run-types.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\nimport { endTaskExecution } from \"./task-execution.ts\";\nimport { acceptWriterDispatch } from \"./writer-projection.ts\";\n\n/** Replay-only mutable bookkeeping; active processes always share one role/phase. */\nexport interface ProcessReduction {\n\treadonly dispatched: Set<string>;\n\treadonly checked: Set<string>;\n\tactiveRole: \"writer\" | \"verifier\";\n}\ntype ProcessEvent = Extract<RunEvent, { kind: \"dispatch\" | \"process_ready\" | \"exited\" }>;\n\nexport function reduceProcessEvent(context: WriterReduction, event: ProcessEvent, progress: ProcessReduction): void {\n\tconst { contract, state } = context;\n\tswitch (event.kind) {\n\t\tcase \"dispatch\": {\n\t\t\tconst limit =\n\t\t\t\tevent.role === \"writer\" && contract.profile === \"linux-command-dag-v1\"\n\t\t\t\t\t? (contract.writer.maxConcurrentTasks ?? 1)\n\t\t\t\t\t: 1;\n\t\t\tif (\n\t\t\t\tstate.failure ||\n\t\t\t\tstate.execution === \"paused\" ||\n\t\t\t\tstate.activeExecutionIds.length >= limit ||\n\t\t\t\tprogress.dispatched.has(event.executionId)\n\t\t\t)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tif (event.role === \"writer\") {\n\t\t\t\tacceptWriterDispatch(context, event);\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tevent.taskId !== undefined ||\n\t\t\t\t\t!context.writerFinished ||\n\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\t!state.candidateDigest ||\n\t\t\t\t\tevent.claimId === null ||\n\t\t\t\t\t!contract.checks.some((check) => check.claimId === event.claimId) ||\n\t\t\t\t\tprogress.checked.has(event.claimId)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tprogress.checked.add(event.claimId);\n\t\t\t}\n\t\t\tprogress.dispatched.add(event.executionId);\n\t\t\tprogress.activeRole = event.role;\n\t\t\tcontext.state = {\n\t\t\t\t...context.state,\n\t\t\t\texecution: \"running\",\n\t\t\t\tsettlement: \"draining\",\n\t\t\t\tactiveExecutionIds: [...state.activeExecutionIds, event.executionId],\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\t\tcase \"process_ready\":\n\t\t\tif (\n\t\t\t\t!state.budget ||\n\t\t\t\t!state.activeExecutionIds.includes(event.executionId) ||\n\t\t\t\tevent.identity.bootId !== state.budget.bootId ||\n\t\t\t\tstate.processes.some((item) => item.executionId === event.executionId)\n\t\t\t)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tcontext.state = {\n\t\t\t\t...state,\n\t\t\t\tprocesses: [...state.processes, { executionId: event.executionId, identity: event.identity }],\n\t\t\t};\n\t\t\treturn;\n\t\tcase \"exited\": {\n\t\t\tif (\n\t\t\t\t!state.activeExecutionIds.includes(event.executionId) ||\n\t\t\t\t(state.budget &&\n\t\t\t\t\tevent.failure === null &&\n\t\t\t\t\t!state.processes.some((item) => item.executionId === event.executionId))\n\t\t\t)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tconst taskWriter = progress.activeRole === \"writer\" && contract.profile === \"linux-command-dag-v1\";\n\t\t\tif (taskWriter) endTaskExecution(context, event);\n\t\t\telse if (progress.activeRole === \"writer\") context.writerFinished = event.failure === null;\n\t\t\tconst activeExecutionIds = state.activeExecutionIds.filter((id) => id !== event.executionId);\n\t\t\tlet settlement: RunProjection[\"settlement\"] = \"settled\";\n\t\t\tif (context.state.writerOpen || context.state.tasks.some((task) => task.status === \"running\"))\n\t\t\t\tsettlement = \"open\";\n\t\t\tif (activeExecutionIds.length) settlement = \"draining\";\n\t\t\tcontext.state = {\n\t\t\t\t...context.state,\n\t\t\t\tactiveExecutionIds,\n\t\t\t\tsettlement,\n\t\t\t\tfailure: taskWriter ? state.failure : event.failure,\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\t\tdefault: {\n\t\t\tconst exhaustive: never = event;\n\t\t\tthrow new VerifiedRunError(String(exhaustive));\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,82 @@
1
+ import { VerifiedRunError } from "./storage.js";
2
+ import { endTaskExecution } from "./task-execution.js";
3
+ import { acceptWriterDispatch } from "./writer-projection.js";
4
+ export function reduceProcessEvent(context, event, progress) {
5
+ const { contract, state } = context;
6
+ switch (event.kind) {
7
+ case "dispatch": {
8
+ const limit = event.role === "writer" && contract.profile === "linux-command-dag-v1"
9
+ ? (contract.writer.maxConcurrentTasks ?? 1)
10
+ : 1;
11
+ if (state.failure ||
12
+ state.execution === "paused" ||
13
+ state.activeExecutionIds.length >= limit ||
14
+ progress.dispatched.has(event.executionId))
15
+ throw new VerifiedRunError("integrity");
16
+ if (event.role === "writer") {
17
+ acceptWriterDispatch(context, event);
18
+ }
19
+ else {
20
+ if (event.taskId !== undefined ||
21
+ !context.writerFinished ||
22
+ state.writerOpen ||
23
+ !state.candidateDigest ||
24
+ event.claimId === null ||
25
+ !contract.checks.some((check) => check.claimId === event.claimId) ||
26
+ progress.checked.has(event.claimId))
27
+ throw new VerifiedRunError("integrity");
28
+ progress.checked.add(event.claimId);
29
+ }
30
+ progress.dispatched.add(event.executionId);
31
+ progress.activeRole = event.role;
32
+ context.state = {
33
+ ...context.state,
34
+ execution: "running",
35
+ settlement: "draining",
36
+ activeExecutionIds: [...state.activeExecutionIds, event.executionId],
37
+ };
38
+ return;
39
+ }
40
+ case "process_ready":
41
+ if (!state.budget ||
42
+ !state.activeExecutionIds.includes(event.executionId) ||
43
+ event.identity.bootId !== state.budget.bootId ||
44
+ state.processes.some((item) => item.executionId === event.executionId))
45
+ throw new VerifiedRunError("integrity");
46
+ context.state = {
47
+ ...state,
48
+ processes: [...state.processes, { executionId: event.executionId, identity: event.identity }],
49
+ };
50
+ return;
51
+ case "exited": {
52
+ if (!state.activeExecutionIds.includes(event.executionId) ||
53
+ (state.budget &&
54
+ event.failure === null &&
55
+ !state.processes.some((item) => item.executionId === event.executionId)))
56
+ throw new VerifiedRunError("integrity");
57
+ const taskWriter = progress.activeRole === "writer" && contract.profile === "linux-command-dag-v1";
58
+ if (taskWriter)
59
+ endTaskExecution(context, event);
60
+ else if (progress.activeRole === "writer")
61
+ context.writerFinished = event.failure === null;
62
+ const activeExecutionIds = state.activeExecutionIds.filter((id) => id !== event.executionId);
63
+ let settlement = "settled";
64
+ if (context.state.writerOpen || context.state.tasks.some((task) => task.status === "running"))
65
+ settlement = "open";
66
+ if (activeExecutionIds.length)
67
+ settlement = "draining";
68
+ context.state = {
69
+ ...context.state,
70
+ activeExecutionIds,
71
+ settlement,
72
+ failure: taskWriter ? state.failure : event.failure,
73
+ };
74
+ return;
75
+ }
76
+ default: {
77
+ const exhaustive = event;
78
+ throw new VerifiedRunError(String(exhaustive));
79
+ }
80
+ }
81
+ }
82
+ //# sourceMappingURL=process-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-projection.js","sourceRoot":"","sources":["../../../src/core/verified-run/process-projection.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RunEvent, RunProjection, WriterReduction } from \"./run-types.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\nimport { endTaskExecution } from \"./task-execution.ts\";\nimport { acceptWriterDispatch } from \"./writer-projection.ts\";\n\n/** Replay-only mutable bookkeeping; active processes always share one role/phase. */\nexport interface ProcessReduction {\n\treadonly dispatched: Set<string>;\n\treadonly checked: Set<string>;\n\tactiveRole: \"writer\" | \"verifier\";\n}\ntype ProcessEvent = Extract<RunEvent, { kind: \"dispatch\" | \"process_ready\" | \"exited\" }>;\n\nexport function reduceProcessEvent(context: WriterReduction, event: ProcessEvent, progress: ProcessReduction): void {\n\tconst { contract, state } = context;\n\tswitch (event.kind) {\n\t\tcase \"dispatch\": {\n\t\t\tconst limit =\n\t\t\t\tevent.role === \"writer\" && contract.profile === \"linux-command-dag-v1\"\n\t\t\t\t\t? (contract.writer.maxConcurrentTasks ?? 1)\n\t\t\t\t\t: 1;\n\t\t\tif (\n\t\t\t\tstate.failure ||\n\t\t\t\tstate.execution === \"paused\" ||\n\t\t\t\tstate.activeExecutionIds.length >= limit ||\n\t\t\t\tprogress.dispatched.has(event.executionId)\n\t\t\t)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tif (event.role === \"writer\") {\n\t\t\t\tacceptWriterDispatch(context, event);\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tevent.taskId !== undefined ||\n\t\t\t\t\t!context.writerFinished ||\n\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\t!state.candidateDigest ||\n\t\t\t\t\tevent.claimId === null ||\n\t\t\t\t\t!contract.checks.some((check) => check.claimId === event.claimId) ||\n\t\t\t\t\tprogress.checked.has(event.claimId)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tprogress.checked.add(event.claimId);\n\t\t\t}\n\t\t\tprogress.dispatched.add(event.executionId);\n\t\t\tprogress.activeRole = event.role;\n\t\t\tcontext.state = {\n\t\t\t\t...context.state,\n\t\t\t\texecution: \"running\",\n\t\t\t\tsettlement: \"draining\",\n\t\t\t\tactiveExecutionIds: [...state.activeExecutionIds, event.executionId],\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\t\tcase \"process_ready\":\n\t\t\tif (\n\t\t\t\t!state.budget ||\n\t\t\t\t!state.activeExecutionIds.includes(event.executionId) ||\n\t\t\t\tevent.identity.bootId !== state.budget.bootId ||\n\t\t\t\tstate.processes.some((item) => item.executionId === event.executionId)\n\t\t\t)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tcontext.state = {\n\t\t\t\t...state,\n\t\t\t\tprocesses: [...state.processes, { executionId: event.executionId, identity: event.identity }],\n\t\t\t};\n\t\t\treturn;\n\t\tcase \"exited\": {\n\t\t\tif (\n\t\t\t\t!state.activeExecutionIds.includes(event.executionId) ||\n\t\t\t\t(state.budget &&\n\t\t\t\t\tevent.failure === null &&\n\t\t\t\t\t!state.processes.some((item) => item.executionId === event.executionId))\n\t\t\t)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tconst taskWriter = progress.activeRole === \"writer\" && contract.profile === \"linux-command-dag-v1\";\n\t\t\tif (taskWriter) endTaskExecution(context, event);\n\t\t\telse if (progress.activeRole === \"writer\") context.writerFinished = event.failure === null;\n\t\t\tconst activeExecutionIds = state.activeExecutionIds.filter((id) => id !== event.executionId);\n\t\t\tlet settlement: RunProjection[\"settlement\"] = \"settled\";\n\t\t\tif (context.state.writerOpen || context.state.tasks.some((task) => task.status === \"running\"))\n\t\t\t\tsettlement = \"open\";\n\t\t\tif (activeExecutionIds.length) settlement = \"draining\";\n\t\t\tcontext.state = {\n\t\t\t\t...context.state,\n\t\t\t\tactiveExecutionIds,\n\t\t\t\tsettlement,\n\t\t\t\tfailure: taskWriter ? state.failure : event.failure,\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\t\tdefault: {\n\t\t\tconst exhaustive: never = event;\n\t\t\tthrow new VerifiedRunError(String(exhaustive));\n\t\t}\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/core/verified-run/projection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAI/E,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,aAAa,CAmOrE","sourcesContent":["import { reduceDagEvent } from \"./dag-projection.ts\";\nimport type { RunTaskProjection } from \"./dag-types.ts\";\nimport { reduceRecoveryEvent } from \"./recovery-projection.ts\";\nimport type { RunEvent, RunProjection, WriterReduction } from \"./run-types.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\nimport { acceptWriterDispatch, reduceWriterEvent } from \"./writer-projection.ts\";\n\n/** Deterministic replay only. Recovery observations are supplied by the trusted host adapter. */\nexport function projectRun(events: readonly RunEvent[]): RunProjection {\n\tconst first = events[0];\n\tif (first?.kind !== \"created\" || first.contract.runId !== first.command.runId)\n\t\tthrow new VerifiedRunError(\"integrity\");\n\tconst context: WriterReduction = {\n\t\tcontract: first.contract,\n\t\twriterFinished: false,\n\t\twriterStarted: false,\n\t\tproducerStarted: false,\n\t\twriterCommands: 0,\n\t\trequestBaseline: 0,\n\t\trequests: new Set(),\n\t\tstate: {\n\t\t\trunId: first.contract.runId,\n\t\t\trevision: 1,\n\t\t\tgeneration: 1,\n\t\t\texecution: \"ready\",\n\t\t\tsettlement: \"open\",\n\t\t\tverification: \"not_requested\",\n\t\t\tapplication: \"not_requested\",\n\t\t\tcandidateDigest: null,\n\t\t\tinputDigest: null,\n\t\t\treceiptDigest: null,\n\t\t\tfailure: null,\n\t\t\tactiveExecutionIds: [],\n\t\t\twriterOpen: false,\n\t\t\tmodelRequests: 0,\n\t\t\ttasks:\n\t\t\t\tfirst.contract.profile === \"linux-command-dag-v1\"\n\t\t\t\t\t? first.contract.writer.tasks.map(\n\t\t\t\t\t\t\t(task): RunTaskProjection => ({\n\t\t\t\t\t\t\t\ttaskId: task.id,\n\t\t\t\t\t\t\t\tattempt: 0,\n\t\t\t\t\t\t\t\tgeneration: 1,\n\t\t\t\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\t\t\t\tinputDigest: null,\n\t\t\t\t\t\t\t\toutputDigest: null,\n\t\t\t\t\t\t\t\tfailure: null,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t: [],\n\t\t\tbudget: null,\n\t\t\tenvironmentDigest: null,\n\t\t\tverificationDeadlineMs: null,\n\t\t\tlastClockMs: null,\n\t\t\tprocesses: [],\n\t\t},\n\t};\n\tconst dispatched = new Set<string>();\n\tconst checked = new Set<string>();\n\tconst commands = new Set([first.command.commandId]);\n\tlet activeRole: \"writer\" | \"verifier\" = \"writer\";\n\tfor (const event of events.slice(1)) {\n\t\tconst state = context.state;\n\t\tif (state.execution === \"failed\" || state.receiptDigest) throw new VerifiedRunError(\"integrity\");\n\t\tswitch (event.kind) {\n\t\t\tcase \"created\":\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tcase \"budget_anchored\": {\n\t\t\t\tconst budget = event.budget;\n\t\t\t\tconst limits = first.contract.budget;\n\t\t\t\tif (\n\t\t\t\t\tstate.revision !== 1 ||\n\t\t\t\t\tstate.budget ||\n\t\t\t\t\tbudget.workDeadlineMs - budget.startedMs !== limits.workMs ||\n\t\t\t\t\tbudget.verifyCapMs - budget.workDeadlineMs !== limits.verifyMs ||\n\t\t\t\t\tbudget.cleanupDeadlineMs - budget.verifyCapMs !== limits.cleanupMs\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tbudget,\n\t\t\t\t\tenvironmentDigest: event.environmentDigest,\n\t\t\t\t\tlastClockMs: budget.startedMs,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"input_checkpoint\":\n\t\t\t\tif (\n\t\t\t\t\tstate.revision !== 2 ||\n\t\t\t\t\t!state.budget ||\n\t\t\t\t\tstate.inputDigest ||\n\t\t\t\t\tevent.digest !== first.contract.workspace.baseDigest\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = { ...state, inputDigest: event.digest };\n\t\t\t\tbreak;\n\t\t\tcase \"task_started\":\n\t\t\tcase \"task_finished\":\n\t\t\tcase \"tasks_paused\":\n\t\t\t\treduceDagEvent(context, event);\n\t\t\t\tbreak;\n\t\t\tcase \"writer_opened\":\n\t\t\tcase \"model_request\":\n\t\t\tcase \"writer_closed\":\n\t\t\t\treduceWriterEvent(context, event);\n\t\t\t\tbreak;\n\t\t\tcase \"dispatch\": {\n\t\t\t\tif (state.failure || state.activeExecutionIds.length || dispatched.has(event.executionId))\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tif (event.role === \"writer\") {\n\t\t\t\t\tacceptWriterDispatch(context, event);\n\t\t\t\t} else {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!context.writerFinished ||\n\t\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\t\t!state.candidateDigest ||\n\t\t\t\t\t\tevent.claimId === null ||\n\t\t\t\t\t\t!first.contract.checks.some((check) => check.claimId === event.claimId) ||\n\t\t\t\t\t\tchecked.has(event.claimId)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\t\tchecked.add(event.claimId);\n\t\t\t\t}\n\t\t\t\tdispatched.add(event.executionId);\n\t\t\t\tactiveRole = event.role;\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\texecution: \"running\",\n\t\t\t\t\tsettlement: \"draining\",\n\t\t\t\t\tactiveExecutionIds: [event.executionId],\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"process_ready\":\n\t\t\t\tif (\n\t\t\t\t\t!state.budget ||\n\t\t\t\t\tstate.activeExecutionIds[0] !== event.executionId ||\n\t\t\t\t\tevent.identity.bootId !== state.budget.bootId ||\n\t\t\t\t\tstate.processes.some((item) => item.executionId === event.executionId)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tprocesses: [...state.processes, { executionId: event.executionId, identity: event.identity }],\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase \"exited\":\n\t\t\t\tif (\n\t\t\t\t\tstate.activeExecutionIds[0] !== event.executionId ||\n\t\t\t\t\t(state.budget &&\n\t\t\t\t\t\tevent.failure === null &&\n\t\t\t\t\t\t!state.processes.some((item) => item.executionId === event.executionId))\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tif (activeRole === \"writer\") context.writerFinished = event.failure === null;\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tsettlement: state.writerOpen ? \"open\" : \"settled\",\n\t\t\t\t\tactiveExecutionIds: [],\n\t\t\t\t\tfailure: event.failure,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase \"candidate\": {\n\t\t\t\tif (\n\t\t\t\t\t!context.writerFinished ||\n\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\tstate.failure ||\n\t\t\t\t\tstate.activeExecutionIds.length ||\n\t\t\t\t\tstate.candidateDigest ||\n\t\t\t\t\tstate.tasks.some((task) => task.status !== \"succeeded\" || task.generation !== state.generation)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tif (state.budget) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tevent.observedMs === undefined ||\n\t\t\t\t\t\tevent.verificationDeadlineMs === undefined ||\n\t\t\t\t\t\tevent.observedMs < state.budget.startedMs ||\n\t\t\t\t\t\tevent.observedMs > state.budget.workDeadlineMs ||\n\t\t\t\t\t\tevent.verificationDeadlineMs !==\n\t\t\t\t\t\t\tMath.min(event.observedMs + first.contract.budget.verifyMs, state.budget.verifyCapMs)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\t} else if (event.observedMs !== undefined || event.verificationDeadlineMs !== undefined)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tcandidateDigest: event.digest,\n\t\t\t\t\tverificationDeadlineMs: event.verificationDeadlineMs ?? null,\n\t\t\t\t\tlastClockMs: event.observedMs ?? null,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"resumed\":\n\t\t\tcase \"tasks_retried\":\n\t\t\tcase \"writer_restarted\":\n\t\t\t\treduceRecoveryEvent(context, event, { commands, checked, activeRole });\n\t\t\t\tbreak;\n\t\t\tcase \"evaluated\":\n\t\t\t\tif (\n\t\t\t\t\t!state.candidateDigest ||\n\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\tstate.activeExecutionIds.length ||\n\t\t\t\t\tchecked.size !== first.contract.checks.length ||\n\t\t\t\t\t(event.verified && state.failure)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\treceiptDigest: event.receiptDigest,\n\t\t\t\t\texecution: \"succeeded\",\n\t\t\t\t\tverification: event.verified ? \"verified\" : \"violated\",\n\t\t\t\t\tapplication: event.verified ? \"candidate_ready\" : \"not_requested\",\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase \"failed\":\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\texecution: \"failed\",\n\t\t\t\t\tfailure: event.code,\n\t\t\t\t\tverification: \"inconclusive\",\n\t\t\t\t\tsettlement: state.activeExecutionIds.length || state.writerOpen ? \"quarantined\" : \"settled\",\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault: {\n\t\t\t\tconst exhaustive: never = event;\n\t\t\t\tthrow new VerifiedRunError(String(exhaustive));\n\t\t\t}\n\t\t}\n\t\tcontext.state = { ...context.state, revision: state.revision + 1 };\n\t}\n\treturn Object.freeze({\n\t\t...context.state,\n\t\tactiveExecutionIds: Object.freeze([...context.state.activeExecutionIds]),\n\t\tprocesses: Object.freeze(context.state.processes.map((item) => Object.freeze(item))),\n\t\ttasks: Object.freeze(context.state.tasks.map((task) => Object.freeze(task))),\n\t});\n}\n"]}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/core/verified-run/projection.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAI/E,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,aAAa,CAkLrE","sourcesContent":["import { reduceDagEvent } from \"./dag-projection.ts\";\nimport type { RunTaskProjection } from \"./dag-types.ts\";\nimport { type ProcessReduction, reduceProcessEvent } from \"./process-projection.ts\";\nimport { reduceRecoveryEvent } from \"./recovery-projection.ts\";\nimport type { RunEvent, RunProjection, WriterReduction } from \"./run-types.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\nimport { reduceWriterEvent } from \"./writer-projection.ts\";\n\n/** Deterministic replay only. Recovery observations are supplied by the trusted host adapter. */\nexport function projectRun(events: readonly RunEvent[]): RunProjection {\n\tconst first = events[0];\n\tif (first?.kind !== \"created\" || first.contract.runId !== first.command.runId)\n\t\tthrow new VerifiedRunError(\"integrity\");\n\tconst context: WriterReduction = {\n\t\tcontract: first.contract,\n\t\twriterFinished: false,\n\t\twriterStarted: false,\n\t\tproducerStarted: false,\n\t\twriterCommands: 0,\n\t\trequestBaseline: 0,\n\t\trequests: new Set(),\n\t\tstate: {\n\t\t\trunId: first.contract.runId,\n\t\t\trevision: 1,\n\t\t\tgeneration: 1,\n\t\t\texecution: \"ready\",\n\t\t\tsettlement: \"open\",\n\t\t\tverification: \"not_requested\",\n\t\t\tapplication: \"not_requested\",\n\t\t\tcandidateDigest: null,\n\t\t\tinputDigest: null,\n\t\t\treceiptDigest: null,\n\t\t\tfailure: null,\n\t\t\tactiveExecutionIds: [],\n\t\t\twriterOpen: false,\n\t\t\tmodelRequests: 0,\n\t\t\ttasks:\n\t\t\t\tfirst.contract.profile === \"linux-command-dag-v1\"\n\t\t\t\t\t? first.contract.writer.tasks.map(\n\t\t\t\t\t\t\t(task): RunTaskProjection => ({\n\t\t\t\t\t\t\t\ttaskId: task.id,\n\t\t\t\t\t\t\t\tattempt: 0,\n\t\t\t\t\t\t\t\tgeneration: 1,\n\t\t\t\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\t\t\t\tinputDigest: null,\n\t\t\t\t\t\t\t\toutputDigest: null,\n\t\t\t\t\t\t\t\tfailure: null,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t: [],\n\t\t\tbudget: null,\n\t\t\tenvironmentDigest: null,\n\t\t\tverificationDeadlineMs: null,\n\t\t\tlastClockMs: null,\n\t\t\tprocesses: [],\n\t\t},\n\t};\n\tconst progress: ProcessReduction = { dispatched: new Set(), checked: new Set(), activeRole: \"writer\" };\n\tconst commands = new Set([first.command.commandId]);\n\tfor (const event of events.slice(1)) {\n\t\tconst state = context.state;\n\t\tif (state.execution === \"failed\" || state.receiptDigest) throw new VerifiedRunError(\"integrity\");\n\t\tswitch (event.kind) {\n\t\t\tcase \"created\":\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tcase \"budget_anchored\": {\n\t\t\t\tconst budget = event.budget;\n\t\t\t\tconst limits = first.contract.budget;\n\t\t\t\tif (\n\t\t\t\t\tstate.revision !== 1 ||\n\t\t\t\t\tstate.budget ||\n\t\t\t\t\tbudget.workDeadlineMs - budget.startedMs !== limits.workMs ||\n\t\t\t\t\tbudget.verifyCapMs - budget.workDeadlineMs !== limits.verifyMs ||\n\t\t\t\t\tbudget.cleanupDeadlineMs - budget.verifyCapMs !== limits.cleanupMs\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tbudget,\n\t\t\t\t\tenvironmentDigest: event.environmentDigest,\n\t\t\t\t\tlastClockMs: budget.startedMs,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"input_checkpoint\":\n\t\t\t\tif (\n\t\t\t\t\tstate.revision !== 2 ||\n\t\t\t\t\t!state.budget ||\n\t\t\t\t\tstate.inputDigest ||\n\t\t\t\t\tevent.digest !== first.contract.workspace.baseDigest\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = { ...state, inputDigest: event.digest };\n\t\t\t\tbreak;\n\t\t\tcase \"task_started\":\n\t\t\tcase \"task_finished\":\n\t\t\tcase \"tasks_paused\":\n\t\t\t\treduceDagEvent(context, event);\n\t\t\t\tbreak;\n\t\t\tcase \"writer_opened\":\n\t\t\tcase \"model_request\":\n\t\t\tcase \"writer_closed\":\n\t\t\t\treduceWriterEvent(context, event);\n\t\t\t\tbreak;\n\t\t\tcase \"dispatch\":\n\t\t\tcase \"process_ready\":\n\t\t\tcase \"exited\":\n\t\t\t\treduceProcessEvent(context, event, progress);\n\t\t\t\tbreak;\n\t\t\tcase \"candidate\": {\n\t\t\t\tif (\n\t\t\t\t\t!context.writerFinished ||\n\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\tstate.failure ||\n\t\t\t\t\tstate.activeExecutionIds.length ||\n\t\t\t\t\tstate.candidateDigest ||\n\t\t\t\t\tstate.tasks.some((task) => task.status !== \"succeeded\" || task.generation !== state.generation)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tif (state.budget) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tevent.observedMs === undefined ||\n\t\t\t\t\t\tevent.verificationDeadlineMs === undefined ||\n\t\t\t\t\t\tevent.observedMs < state.budget.startedMs ||\n\t\t\t\t\t\tevent.observedMs > state.budget.workDeadlineMs ||\n\t\t\t\t\t\tevent.verificationDeadlineMs !==\n\t\t\t\t\t\t\tMath.min(event.observedMs + first.contract.budget.verifyMs, state.budget.verifyCapMs)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\t} else if (event.observedMs !== undefined || event.verificationDeadlineMs !== undefined)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tcandidateDigest: event.digest,\n\t\t\t\t\tverificationDeadlineMs: event.verificationDeadlineMs ?? null,\n\t\t\t\t\tlastClockMs: event.observedMs ?? null,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"resumed\":\n\t\t\tcase \"tasks_retried\":\n\t\t\tcase \"writer_restarted\":\n\t\t\t\treduceRecoveryEvent(context, event, {\n\t\t\t\t\tcommands,\n\t\t\t\t\tchecked: progress.checked,\n\t\t\t\t\tactiveRole: progress.activeRole,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"evaluated\":\n\t\t\t\tif (\n\t\t\t\t\t!state.candidateDigest ||\n\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\tstate.activeExecutionIds.length ||\n\t\t\t\t\tprogress.checked.size !== first.contract.checks.length ||\n\t\t\t\t\t(event.verified && state.failure)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\treceiptDigest: event.receiptDigest,\n\t\t\t\t\texecution: \"succeeded\",\n\t\t\t\t\tverification: event.verified ? \"verified\" : \"violated\",\n\t\t\t\t\tapplication: event.verified ? \"candidate_ready\" : \"not_requested\",\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase \"failed\":\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\texecution: \"failed\",\n\t\t\t\t\tfailure: event.code,\n\t\t\t\t\tverification: \"inconclusive\",\n\t\t\t\t\tsettlement: state.activeExecutionIds.length || state.writerOpen ? \"quarantined\" : \"settled\",\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault: {\n\t\t\t\tconst exhaustive: never = event;\n\t\t\t\tthrow new VerifiedRunError(String(exhaustive));\n\t\t\t}\n\t\t}\n\t\tcontext.state = { ...context.state, revision: state.revision + 1 };\n\t}\n\treturn Object.freeze({\n\t\t...context.state,\n\t\tactiveExecutionIds: Object.freeze([...context.state.activeExecutionIds]),\n\t\tprocesses: Object.freeze(context.state.processes.map((item) => Object.freeze(item))),\n\t\ttasks: Object.freeze(context.state.tasks.map((task) => Object.freeze(task))),\n\t});\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { reduceDagEvent } from "./dag-projection.js";
2
+ import { reduceProcessEvent } from "./process-projection.js";
2
3
  import { reduceRecoveryEvent } from "./recovery-projection.js";
3
4
  import { VerifiedRunError } from "./storage.js";
4
- import { acceptWriterDispatch, reduceWriterEvent } from "./writer-projection.js";
5
+ import { reduceWriterEvent } from "./writer-projection.js";
5
6
  /** Deterministic replay only. Recovery observations are supplied by the trusted host adapter. */
6
7
  export function projectRun(events) {
7
8
  const first = events[0];
@@ -48,10 +49,8 @@ export function projectRun(events) {
48
49
  processes: [],
49
50
  },
50
51
  };
51
- const dispatched = new Set();
52
- const checked = new Set();
52
+ const progress = { dispatched: new Set(), checked: new Set(), activeRole: "writer" };
53
53
  const commands = new Set([first.command.commandId]);
54
- let activeRole = "writer";
55
54
  for (const event of events.slice(1)) {
56
55
  const state = context.state;
57
56
  if (state.execution === "failed" || state.receiptDigest)
@@ -94,57 +93,10 @@ export function projectRun(events) {
94
93
  case "writer_closed":
95
94
  reduceWriterEvent(context, event);
96
95
  break;
97
- case "dispatch": {
98
- if (state.failure || state.activeExecutionIds.length || dispatched.has(event.executionId))
99
- throw new VerifiedRunError("integrity");
100
- if (event.role === "writer") {
101
- acceptWriterDispatch(context, event);
102
- }
103
- else {
104
- if (!context.writerFinished ||
105
- state.writerOpen ||
106
- !state.candidateDigest ||
107
- event.claimId === null ||
108
- !first.contract.checks.some((check) => check.claimId === event.claimId) ||
109
- checked.has(event.claimId))
110
- throw new VerifiedRunError("integrity");
111
- checked.add(event.claimId);
112
- }
113
- dispatched.add(event.executionId);
114
- activeRole = event.role;
115
- context.state = {
116
- ...state,
117
- execution: "running",
118
- settlement: "draining",
119
- activeExecutionIds: [event.executionId],
120
- };
121
- break;
122
- }
96
+ case "dispatch":
123
97
  case "process_ready":
124
- if (!state.budget ||
125
- state.activeExecutionIds[0] !== event.executionId ||
126
- event.identity.bootId !== state.budget.bootId ||
127
- state.processes.some((item) => item.executionId === event.executionId))
128
- throw new VerifiedRunError("integrity");
129
- context.state = {
130
- ...state,
131
- processes: [...state.processes, { executionId: event.executionId, identity: event.identity }],
132
- };
133
- break;
134
98
  case "exited":
135
- if (state.activeExecutionIds[0] !== event.executionId ||
136
- (state.budget &&
137
- event.failure === null &&
138
- !state.processes.some((item) => item.executionId === event.executionId)))
139
- throw new VerifiedRunError("integrity");
140
- if (activeRole === "writer")
141
- context.writerFinished = event.failure === null;
142
- context.state = {
143
- ...state,
144
- settlement: state.writerOpen ? "open" : "settled",
145
- activeExecutionIds: [],
146
- failure: event.failure,
147
- };
99
+ reduceProcessEvent(context, event, progress);
148
100
  break;
149
101
  case "candidate": {
150
102
  if (!context.writerFinished ||
@@ -176,13 +128,17 @@ export function projectRun(events) {
176
128
  case "resumed":
177
129
  case "tasks_retried":
178
130
  case "writer_restarted":
179
- reduceRecoveryEvent(context, event, { commands, checked, activeRole });
131
+ reduceRecoveryEvent(context, event, {
132
+ commands,
133
+ checked: progress.checked,
134
+ activeRole: progress.activeRole,
135
+ });
180
136
  break;
181
137
  case "evaluated":
182
138
  if (!state.candidateDigest ||
183
139
  state.writerOpen ||
184
140
  state.activeExecutionIds.length ||
185
- checked.size !== first.contract.checks.length ||
141
+ progress.checked.size !== first.contract.checks.length ||
186
142
  (event.verified && state.failure))
187
143
  throw new VerifiedRunError("integrity");
188
144
  context.state = {
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/core/verified-run/projection.ts"],"names":[],"mappings":"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","sourcesContent":["import { reduceDagEvent } from \"./dag-projection.ts\";\nimport type { RunTaskProjection } from \"./dag-types.ts\";\nimport { reduceRecoveryEvent } from \"./recovery-projection.ts\";\nimport type { RunEvent, RunProjection, WriterReduction } from \"./run-types.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\nimport { acceptWriterDispatch, reduceWriterEvent } from \"./writer-projection.ts\";\n\n/** Deterministic replay only. Recovery observations are supplied by the trusted host adapter. */\nexport function projectRun(events: readonly RunEvent[]): RunProjection {\n\tconst first = events[0];\n\tif (first?.kind !== \"created\" || first.contract.runId !== first.command.runId)\n\t\tthrow new VerifiedRunError(\"integrity\");\n\tconst context: WriterReduction = {\n\t\tcontract: first.contract,\n\t\twriterFinished: false,\n\t\twriterStarted: false,\n\t\tproducerStarted: false,\n\t\twriterCommands: 0,\n\t\trequestBaseline: 0,\n\t\trequests: new Set(),\n\t\tstate: {\n\t\t\trunId: first.contract.runId,\n\t\t\trevision: 1,\n\t\t\tgeneration: 1,\n\t\t\texecution: \"ready\",\n\t\t\tsettlement: \"open\",\n\t\t\tverification: \"not_requested\",\n\t\t\tapplication: \"not_requested\",\n\t\t\tcandidateDigest: null,\n\t\t\tinputDigest: null,\n\t\t\treceiptDigest: null,\n\t\t\tfailure: null,\n\t\t\tactiveExecutionIds: [],\n\t\t\twriterOpen: false,\n\t\t\tmodelRequests: 0,\n\t\t\ttasks:\n\t\t\t\tfirst.contract.profile === \"linux-command-dag-v1\"\n\t\t\t\t\t? first.contract.writer.tasks.map(\n\t\t\t\t\t\t\t(task): RunTaskProjection => ({\n\t\t\t\t\t\t\t\ttaskId: task.id,\n\t\t\t\t\t\t\t\tattempt: 0,\n\t\t\t\t\t\t\t\tgeneration: 1,\n\t\t\t\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\t\t\t\tinputDigest: null,\n\t\t\t\t\t\t\t\toutputDigest: null,\n\t\t\t\t\t\t\t\tfailure: null,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t: [],\n\t\t\tbudget: null,\n\t\t\tenvironmentDigest: null,\n\t\t\tverificationDeadlineMs: null,\n\t\t\tlastClockMs: null,\n\t\t\tprocesses: [],\n\t\t},\n\t};\n\tconst dispatched = new Set<string>();\n\tconst checked = new Set<string>();\n\tconst commands = new Set([first.command.commandId]);\n\tlet activeRole: \"writer\" | \"verifier\" = \"writer\";\n\tfor (const event of events.slice(1)) {\n\t\tconst state = context.state;\n\t\tif (state.execution === \"failed\" || state.receiptDigest) throw new VerifiedRunError(\"integrity\");\n\t\tswitch (event.kind) {\n\t\t\tcase \"created\":\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tcase \"budget_anchored\": {\n\t\t\t\tconst budget = event.budget;\n\t\t\t\tconst limits = first.contract.budget;\n\t\t\t\tif (\n\t\t\t\t\tstate.revision !== 1 ||\n\t\t\t\t\tstate.budget ||\n\t\t\t\t\tbudget.workDeadlineMs - budget.startedMs !== limits.workMs ||\n\t\t\t\t\tbudget.verifyCapMs - budget.workDeadlineMs !== limits.verifyMs ||\n\t\t\t\t\tbudget.cleanupDeadlineMs - budget.verifyCapMs !== limits.cleanupMs\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tbudget,\n\t\t\t\t\tenvironmentDigest: event.environmentDigest,\n\t\t\t\t\tlastClockMs: budget.startedMs,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"input_checkpoint\":\n\t\t\t\tif (\n\t\t\t\t\tstate.revision !== 2 ||\n\t\t\t\t\t!state.budget ||\n\t\t\t\t\tstate.inputDigest ||\n\t\t\t\t\tevent.digest !== first.contract.workspace.baseDigest\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = { ...state, inputDigest: event.digest };\n\t\t\t\tbreak;\n\t\t\tcase \"task_started\":\n\t\t\tcase \"task_finished\":\n\t\t\tcase \"tasks_paused\":\n\t\t\t\treduceDagEvent(context, event);\n\t\t\t\tbreak;\n\t\t\tcase \"writer_opened\":\n\t\t\tcase \"model_request\":\n\t\t\tcase \"writer_closed\":\n\t\t\t\treduceWriterEvent(context, event);\n\t\t\t\tbreak;\n\t\t\tcase \"dispatch\": {\n\t\t\t\tif (state.failure || state.activeExecutionIds.length || dispatched.has(event.executionId))\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tif (event.role === \"writer\") {\n\t\t\t\t\tacceptWriterDispatch(context, event);\n\t\t\t\t} else {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!context.writerFinished ||\n\t\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\t\t!state.candidateDigest ||\n\t\t\t\t\t\tevent.claimId === null ||\n\t\t\t\t\t\t!first.contract.checks.some((check) => check.claimId === event.claimId) ||\n\t\t\t\t\t\tchecked.has(event.claimId)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\t\tchecked.add(event.claimId);\n\t\t\t\t}\n\t\t\t\tdispatched.add(event.executionId);\n\t\t\t\tactiveRole = event.role;\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\texecution: \"running\",\n\t\t\t\t\tsettlement: \"draining\",\n\t\t\t\t\tactiveExecutionIds: [event.executionId],\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"process_ready\":\n\t\t\t\tif (\n\t\t\t\t\t!state.budget ||\n\t\t\t\t\tstate.activeExecutionIds[0] !== event.executionId ||\n\t\t\t\t\tevent.identity.bootId !== state.budget.bootId ||\n\t\t\t\t\tstate.processes.some((item) => item.executionId === event.executionId)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tprocesses: [...state.processes, { executionId: event.executionId, identity: event.identity }],\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase \"exited\":\n\t\t\t\tif (\n\t\t\t\t\tstate.activeExecutionIds[0] !== event.executionId ||\n\t\t\t\t\t(state.budget &&\n\t\t\t\t\t\tevent.failure === null &&\n\t\t\t\t\t\t!state.processes.some((item) => item.executionId === event.executionId))\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tif (activeRole === \"writer\") context.writerFinished = event.failure === null;\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tsettlement: state.writerOpen ? \"open\" : \"settled\",\n\t\t\t\t\tactiveExecutionIds: [],\n\t\t\t\t\tfailure: event.failure,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase \"candidate\": {\n\t\t\t\tif (\n\t\t\t\t\t!context.writerFinished ||\n\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\tstate.failure ||\n\t\t\t\t\tstate.activeExecutionIds.length ||\n\t\t\t\t\tstate.candidateDigest ||\n\t\t\t\t\tstate.tasks.some((task) => task.status !== \"succeeded\" || task.generation !== state.generation)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tif (state.budget) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tevent.observedMs === undefined ||\n\t\t\t\t\t\tevent.verificationDeadlineMs === undefined ||\n\t\t\t\t\t\tevent.observedMs < state.budget.startedMs ||\n\t\t\t\t\t\tevent.observedMs > state.budget.workDeadlineMs ||\n\t\t\t\t\t\tevent.verificationDeadlineMs !==\n\t\t\t\t\t\t\tMath.min(event.observedMs + first.contract.budget.verifyMs, state.budget.verifyCapMs)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\t} else if (event.observedMs !== undefined || event.verificationDeadlineMs !== undefined)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tcandidateDigest: event.digest,\n\t\t\t\t\tverificationDeadlineMs: event.verificationDeadlineMs ?? null,\n\t\t\t\t\tlastClockMs: event.observedMs ?? null,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"resumed\":\n\t\t\tcase \"tasks_retried\":\n\t\t\tcase \"writer_restarted\":\n\t\t\t\treduceRecoveryEvent(context, event, { commands, checked, activeRole });\n\t\t\t\tbreak;\n\t\t\tcase \"evaluated\":\n\t\t\t\tif (\n\t\t\t\t\t!state.candidateDigest ||\n\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\tstate.activeExecutionIds.length ||\n\t\t\t\t\tchecked.size !== first.contract.checks.length ||\n\t\t\t\t\t(event.verified && state.failure)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\treceiptDigest: event.receiptDigest,\n\t\t\t\t\texecution: \"succeeded\",\n\t\t\t\t\tverification: event.verified ? \"verified\" : \"violated\",\n\t\t\t\t\tapplication: event.verified ? \"candidate_ready\" : \"not_requested\",\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase \"failed\":\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\texecution: \"failed\",\n\t\t\t\t\tfailure: event.code,\n\t\t\t\t\tverification: \"inconclusive\",\n\t\t\t\t\tsettlement: state.activeExecutionIds.length || state.writerOpen ? \"quarantined\" : \"settled\",\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault: {\n\t\t\t\tconst exhaustive: never = event;\n\t\t\t\tthrow new VerifiedRunError(String(exhaustive));\n\t\t\t}\n\t\t}\n\t\tcontext.state = { ...context.state, revision: state.revision + 1 };\n\t}\n\treturn Object.freeze({\n\t\t...context.state,\n\t\tactiveExecutionIds: Object.freeze([...context.state.activeExecutionIds]),\n\t\tprocesses: Object.freeze(context.state.processes.map((item) => Object.freeze(item))),\n\t\ttasks: Object.freeze(context.state.tasks.map((task) => Object.freeze(task))),\n\t});\n}\n"]}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/core/verified-run/projection.ts"],"names":[],"mappings":"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","sourcesContent":["import { reduceDagEvent } from \"./dag-projection.ts\";\nimport type { RunTaskProjection } from \"./dag-types.ts\";\nimport { type ProcessReduction, reduceProcessEvent } from \"./process-projection.ts\";\nimport { reduceRecoveryEvent } from \"./recovery-projection.ts\";\nimport type { RunEvent, RunProjection, WriterReduction } from \"./run-types.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\nimport { reduceWriterEvent } from \"./writer-projection.ts\";\n\n/** Deterministic replay only. Recovery observations are supplied by the trusted host adapter. */\nexport function projectRun(events: readonly RunEvent[]): RunProjection {\n\tconst first = events[0];\n\tif (first?.kind !== \"created\" || first.contract.runId !== first.command.runId)\n\t\tthrow new VerifiedRunError(\"integrity\");\n\tconst context: WriterReduction = {\n\t\tcontract: first.contract,\n\t\twriterFinished: false,\n\t\twriterStarted: false,\n\t\tproducerStarted: false,\n\t\twriterCommands: 0,\n\t\trequestBaseline: 0,\n\t\trequests: new Set(),\n\t\tstate: {\n\t\t\trunId: first.contract.runId,\n\t\t\trevision: 1,\n\t\t\tgeneration: 1,\n\t\t\texecution: \"ready\",\n\t\t\tsettlement: \"open\",\n\t\t\tverification: \"not_requested\",\n\t\t\tapplication: \"not_requested\",\n\t\t\tcandidateDigest: null,\n\t\t\tinputDigest: null,\n\t\t\treceiptDigest: null,\n\t\t\tfailure: null,\n\t\t\tactiveExecutionIds: [],\n\t\t\twriterOpen: false,\n\t\t\tmodelRequests: 0,\n\t\t\ttasks:\n\t\t\t\tfirst.contract.profile === \"linux-command-dag-v1\"\n\t\t\t\t\t? first.contract.writer.tasks.map(\n\t\t\t\t\t\t\t(task): RunTaskProjection => ({\n\t\t\t\t\t\t\t\ttaskId: task.id,\n\t\t\t\t\t\t\t\tattempt: 0,\n\t\t\t\t\t\t\t\tgeneration: 1,\n\t\t\t\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\t\t\t\tinputDigest: null,\n\t\t\t\t\t\t\t\toutputDigest: null,\n\t\t\t\t\t\t\t\tfailure: null,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t: [],\n\t\t\tbudget: null,\n\t\t\tenvironmentDigest: null,\n\t\t\tverificationDeadlineMs: null,\n\t\t\tlastClockMs: null,\n\t\t\tprocesses: [],\n\t\t},\n\t};\n\tconst progress: ProcessReduction = { dispatched: new Set(), checked: new Set(), activeRole: \"writer\" };\n\tconst commands = new Set([first.command.commandId]);\n\tfor (const event of events.slice(1)) {\n\t\tconst state = context.state;\n\t\tif (state.execution === \"failed\" || state.receiptDigest) throw new VerifiedRunError(\"integrity\");\n\t\tswitch (event.kind) {\n\t\t\tcase \"created\":\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tcase \"budget_anchored\": {\n\t\t\t\tconst budget = event.budget;\n\t\t\t\tconst limits = first.contract.budget;\n\t\t\t\tif (\n\t\t\t\t\tstate.revision !== 1 ||\n\t\t\t\t\tstate.budget ||\n\t\t\t\t\tbudget.workDeadlineMs - budget.startedMs !== limits.workMs ||\n\t\t\t\t\tbudget.verifyCapMs - budget.workDeadlineMs !== limits.verifyMs ||\n\t\t\t\t\tbudget.cleanupDeadlineMs - budget.verifyCapMs !== limits.cleanupMs\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tbudget,\n\t\t\t\t\tenvironmentDigest: event.environmentDigest,\n\t\t\t\t\tlastClockMs: budget.startedMs,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"input_checkpoint\":\n\t\t\t\tif (\n\t\t\t\t\tstate.revision !== 2 ||\n\t\t\t\t\t!state.budget ||\n\t\t\t\t\tstate.inputDigest ||\n\t\t\t\t\tevent.digest !== first.contract.workspace.baseDigest\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = { ...state, inputDigest: event.digest };\n\t\t\t\tbreak;\n\t\t\tcase \"task_started\":\n\t\t\tcase \"task_finished\":\n\t\t\tcase \"tasks_paused\":\n\t\t\t\treduceDagEvent(context, event);\n\t\t\t\tbreak;\n\t\t\tcase \"writer_opened\":\n\t\t\tcase \"model_request\":\n\t\t\tcase \"writer_closed\":\n\t\t\t\treduceWriterEvent(context, event);\n\t\t\t\tbreak;\n\t\t\tcase \"dispatch\":\n\t\t\tcase \"process_ready\":\n\t\t\tcase \"exited\":\n\t\t\t\treduceProcessEvent(context, event, progress);\n\t\t\t\tbreak;\n\t\t\tcase \"candidate\": {\n\t\t\t\tif (\n\t\t\t\t\t!context.writerFinished ||\n\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\tstate.failure ||\n\t\t\t\t\tstate.activeExecutionIds.length ||\n\t\t\t\t\tstate.candidateDigest ||\n\t\t\t\t\tstate.tasks.some((task) => task.status !== \"succeeded\" || task.generation !== state.generation)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tif (state.budget) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tevent.observedMs === undefined ||\n\t\t\t\t\t\tevent.verificationDeadlineMs === undefined ||\n\t\t\t\t\t\tevent.observedMs < state.budget.startedMs ||\n\t\t\t\t\t\tevent.observedMs > state.budget.workDeadlineMs ||\n\t\t\t\t\t\tevent.verificationDeadlineMs !==\n\t\t\t\t\t\t\tMath.min(event.observedMs + first.contract.budget.verifyMs, state.budget.verifyCapMs)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\t} else if (event.observedMs !== undefined || event.verificationDeadlineMs !== undefined)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\tcandidateDigest: event.digest,\n\t\t\t\t\tverificationDeadlineMs: event.verificationDeadlineMs ?? null,\n\t\t\t\t\tlastClockMs: event.observedMs ?? null,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"resumed\":\n\t\t\tcase \"tasks_retried\":\n\t\t\tcase \"writer_restarted\":\n\t\t\t\treduceRecoveryEvent(context, event, {\n\t\t\t\t\tcommands,\n\t\t\t\t\tchecked: progress.checked,\n\t\t\t\t\tactiveRole: progress.activeRole,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"evaluated\":\n\t\t\t\tif (\n\t\t\t\t\t!state.candidateDigest ||\n\t\t\t\t\tstate.writerOpen ||\n\t\t\t\t\tstate.activeExecutionIds.length ||\n\t\t\t\t\tprogress.checked.size !== first.contract.checks.length ||\n\t\t\t\t\t(event.verified && state.failure)\n\t\t\t\t)\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\treceiptDigest: event.receiptDigest,\n\t\t\t\t\texecution: \"succeeded\",\n\t\t\t\t\tverification: event.verified ? \"verified\" : \"violated\",\n\t\t\t\t\tapplication: event.verified ? \"candidate_ready\" : \"not_requested\",\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase \"failed\":\n\t\t\t\tcontext.state = {\n\t\t\t\t\t...state,\n\t\t\t\t\texecution: \"failed\",\n\t\t\t\t\tfailure: event.code,\n\t\t\t\t\tverification: \"inconclusive\",\n\t\t\t\t\tsettlement: state.activeExecutionIds.length || state.writerOpen ? \"quarantined\" : \"settled\",\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault: {\n\t\t\t\tconst exhaustive: never = event;\n\t\t\t\tthrow new VerifiedRunError(String(exhaustive));\n\t\t\t}\n\t\t}\n\t\tcontext.state = { ...context.state, revision: state.revision + 1 };\n\t}\n\treturn Object.freeze({\n\t\t...context.state,\n\t\tactiveExecutionIds: Object.freeze([...context.state.activeExecutionIds]),\n\t\tprocesses: Object.freeze(context.state.processes.map((item) => Object.freeze(item))),\n\t\ttasks: Object.freeze(context.state.tasks.map((task) => Object.freeze(task))),\n\t});\n}\n"]}
@@ -16,6 +16,7 @@ export type RunEvent = DagEvent | {
16
16
  readonly executionId: string;
17
17
  readonly role: "writer" | "verifier";
18
18
  readonly claimId: string | null;
19
+ readonly taskId?: string;
19
20
  } | {
20
21
  readonly kind: "input_checkpoint";
21
22
  readonly digest: string;
@@ -1 +1 @@
1
- {"version":3,"file":"run-types.d.ts","sourceRoot":"","sources":["../../../src/core/verified-run/run-types.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tRunContract,\n\tRunResumeCommand,\n\tRunStartCommand,\n\tRunTaskRetryCommand,\n\tRunWriterRestartCommand,\n} from \"omk-protocol\";\nimport type { DagEvent, RunTaskCheckpoint, RunTaskProjection } from \"./dag-types.ts\";\nimport type { NamespaceIdentity } from \"./namespace-identity.ts\";\nimport type { RecoveryBudget } from \"./recovery-clock.ts\";\n\nexport type RunEvent =\n\t| DagEvent\n\t| { readonly kind: \"created\"; readonly contract: RunContract; readonly command: RunStartCommand }\n\t| {\n\t\t\treadonly kind: \"budget_anchored\";\n\t\t\treadonly budget: RecoveryBudget;\n\t\t\treadonly environmentDigest: string;\n\t\t\treadonly driver: \"linux-pidns-gate-v1\";\n\t }\n\t| {\n\t\t\treadonly kind: \"dispatch\";\n\t\t\treadonly executionId: string;\n\t\t\treadonly role: \"writer\" | \"verifier\";\n\t\t\treadonly claimId: string | null;\n\t }\n\t| { readonly kind: \"input_checkpoint\"; readonly digest: string }\n\t| { readonly kind: \"process_ready\"; readonly executionId: string; readonly identity: NamespaceIdentity }\n\t| { readonly kind: \"writer_opened\" }\n\t| { readonly kind: \"model_request\"; readonly requestId: string }\n\t| { readonly kind: \"writer_closed\"; readonly completed: boolean }\n\t| { readonly kind: \"exited\"; readonly executionId: string; readonly failure: string | null }\n\t| {\n\t\t\treadonly kind: \"candidate\";\n\t\t\treadonly digest: string;\n\t\t\treadonly observedMs?: number;\n\t\t\treadonly verificationDeadlineMs?: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"resumed\";\n\t\t\treadonly command: RunResumeCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t }\n\t| {\n\t\t\treadonly kind: \"writer_restarted\";\n\t\t\treadonly command: RunWriterRestartCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t }\n\t| {\n\t\t\treadonly kind: \"tasks_retried\";\n\t\t\treadonly command: RunTaskRetryCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t\t\treadonly adopted: readonly RunTaskCheckpoint[];\n\t }\n\t| { readonly kind: \"evaluated\"; readonly receiptDigest: string; readonly verified: boolean }\n\t| { readonly kind: \"failed\"; readonly code: string };\n\nexport interface RunProjection {\n\treadonly runId: string;\n\treadonly revision: number;\n\treadonly generation: number;\n\treadonly execution: \"ready\" | \"running\" | \"paused\" | \"succeeded\" | \"failed\";\n\treadonly settlement: \"open\" | \"draining\" | \"settled\" | \"quarantined\";\n\treadonly verification: \"not_requested\" | \"verified\" | \"violated\" | \"inconclusive\";\n\treadonly application: \"not_requested\" | \"candidate_ready\";\n\treadonly candidateDigest: string | null;\n\treadonly inputDigest: string | null;\n\treadonly receiptDigest: string | null;\n\treadonly failure: string | null;\n\treadonly activeExecutionIds: readonly string[];\n\treadonly writerOpen: boolean;\n\treadonly modelRequests: number;\n\treadonly tasks: readonly RunTaskProjection[];\n\treadonly budget: RecoveryBudget | null;\n\treadonly environmentDigest: string | null;\n\treadonly verificationDeadlineMs: number | null;\n\treadonly lastClockMs: number | null;\n\treadonly processes: readonly { readonly executionId: string; readonly identity: NamespaceIdentity }[];\n}\n\n/** Mutable reduction bookkeeping, confined to one replay call. */\nexport interface WriterReduction {\n\treadonly contract: RunContract;\n\tstate: RunProjection;\n\twriterFinished: boolean;\n\twriterStarted: boolean;\n\tproducerStarted: boolean;\n\twriterCommands: number;\n\trequestBaseline: number;\n\treadonly requests: Set<string>;\n}\n"]}
1
+ {"version":3,"file":"run-types.d.ts","sourceRoot":"","sources":["../../../src/core/verified-run/run-types.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tRunContract,\n\tRunResumeCommand,\n\tRunStartCommand,\n\tRunTaskRetryCommand,\n\tRunWriterRestartCommand,\n} from \"omk-protocol\";\nimport type { DagEvent, RunTaskCheckpoint, RunTaskProjection } from \"./dag-types.ts\";\nimport type { NamespaceIdentity } from \"./namespace-identity.ts\";\nimport type { RecoveryBudget } from \"./recovery-clock.ts\";\n\nexport type RunEvent =\n\t| DagEvent\n\t| { readonly kind: \"created\"; readonly contract: RunContract; readonly command: RunStartCommand }\n\t| {\n\t\t\treadonly kind: \"budget_anchored\";\n\t\t\treadonly budget: RecoveryBudget;\n\t\t\treadonly environmentDigest: string;\n\t\t\treadonly driver: \"linux-pidns-gate-v1\";\n\t }\n\t| {\n\t\t\treadonly kind: \"dispatch\";\n\t\t\treadonly executionId: string;\n\t\t\treadonly role: \"writer\" | \"verifier\";\n\t\t\treadonly claimId: string | null;\n\t\t\treadonly taskId?: string;\n\t }\n\t| { readonly kind: \"input_checkpoint\"; readonly digest: string }\n\t| { readonly kind: \"process_ready\"; readonly executionId: string; readonly identity: NamespaceIdentity }\n\t| { readonly kind: \"writer_opened\" }\n\t| { readonly kind: \"model_request\"; readonly requestId: string }\n\t| { readonly kind: \"writer_closed\"; readonly completed: boolean }\n\t| { readonly kind: \"exited\"; readonly executionId: string; readonly failure: string | null }\n\t| {\n\t\t\treadonly kind: \"candidate\";\n\t\t\treadonly digest: string;\n\t\t\treadonly observedMs?: number;\n\t\t\treadonly verificationDeadlineMs?: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"resumed\";\n\t\t\treadonly command: RunResumeCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t }\n\t| {\n\t\t\treadonly kind: \"writer_restarted\";\n\t\t\treadonly command: RunWriterRestartCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t }\n\t| {\n\t\t\treadonly kind: \"tasks_retried\";\n\t\t\treadonly command: RunTaskRetryCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t\t\treadonly adopted: readonly RunTaskCheckpoint[];\n\t }\n\t| { readonly kind: \"evaluated\"; readonly receiptDigest: string; readonly verified: boolean }\n\t| { readonly kind: \"failed\"; readonly code: string };\n\nexport interface RunProjection {\n\treadonly runId: string;\n\treadonly revision: number;\n\treadonly generation: number;\n\treadonly execution: \"ready\" | \"running\" | \"paused\" | \"succeeded\" | \"failed\";\n\treadonly settlement: \"open\" | \"draining\" | \"settled\" | \"quarantined\";\n\treadonly verification: \"not_requested\" | \"verified\" | \"violated\" | \"inconclusive\";\n\treadonly application: \"not_requested\" | \"candidate_ready\";\n\treadonly candidateDigest: string | null;\n\treadonly inputDigest: string | null;\n\treadonly receiptDigest: string | null;\n\treadonly failure: string | null;\n\treadonly activeExecutionIds: readonly string[];\n\treadonly writerOpen: boolean;\n\treadonly modelRequests: number;\n\treadonly tasks: readonly RunTaskProjection[];\n\treadonly budget: RecoveryBudget | null;\n\treadonly environmentDigest: string | null;\n\treadonly verificationDeadlineMs: number | null;\n\treadonly lastClockMs: number | null;\n\treadonly processes: readonly { readonly executionId: string; readonly identity: NamespaceIdentity }[];\n}\n\n/** Mutable reduction bookkeeping, confined to one replay call. */\nexport interface WriterReduction {\n\treadonly contract: RunContract;\n\tstate: RunProjection;\n\twriterFinished: boolean;\n\twriterStarted: boolean;\n\tproducerStarted: boolean;\n\twriterCommands: number;\n\trequestBaseline: number;\n\treadonly requests: Set<string>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"run-types.js","sourceRoot":"","sources":["../../../src/core/verified-run/run-types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tRunContract,\n\tRunResumeCommand,\n\tRunStartCommand,\n\tRunTaskRetryCommand,\n\tRunWriterRestartCommand,\n} from \"omk-protocol\";\nimport type { DagEvent, RunTaskCheckpoint, RunTaskProjection } from \"./dag-types.ts\";\nimport type { NamespaceIdentity } from \"./namespace-identity.ts\";\nimport type { RecoveryBudget } from \"./recovery-clock.ts\";\n\nexport type RunEvent =\n\t| DagEvent\n\t| { readonly kind: \"created\"; readonly contract: RunContract; readonly command: RunStartCommand }\n\t| {\n\t\t\treadonly kind: \"budget_anchored\";\n\t\t\treadonly budget: RecoveryBudget;\n\t\t\treadonly environmentDigest: string;\n\t\t\treadonly driver: \"linux-pidns-gate-v1\";\n\t }\n\t| {\n\t\t\treadonly kind: \"dispatch\";\n\t\t\treadonly executionId: string;\n\t\t\treadonly role: \"writer\" | \"verifier\";\n\t\t\treadonly claimId: string | null;\n\t }\n\t| { readonly kind: \"input_checkpoint\"; readonly digest: string }\n\t| { readonly kind: \"process_ready\"; readonly executionId: string; readonly identity: NamespaceIdentity }\n\t| { readonly kind: \"writer_opened\" }\n\t| { readonly kind: \"model_request\"; readonly requestId: string }\n\t| { readonly kind: \"writer_closed\"; readonly completed: boolean }\n\t| { readonly kind: \"exited\"; readonly executionId: string; readonly failure: string | null }\n\t| {\n\t\t\treadonly kind: \"candidate\";\n\t\t\treadonly digest: string;\n\t\t\treadonly observedMs?: number;\n\t\t\treadonly verificationDeadlineMs?: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"resumed\";\n\t\t\treadonly command: RunResumeCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t }\n\t| {\n\t\t\treadonly kind: \"writer_restarted\";\n\t\t\treadonly command: RunWriterRestartCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t }\n\t| {\n\t\t\treadonly kind: \"tasks_retried\";\n\t\t\treadonly command: RunTaskRetryCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t\t\treadonly adopted: readonly RunTaskCheckpoint[];\n\t }\n\t| { readonly kind: \"evaluated\"; readonly receiptDigest: string; readonly verified: boolean }\n\t| { readonly kind: \"failed\"; readonly code: string };\n\nexport interface RunProjection {\n\treadonly runId: string;\n\treadonly revision: number;\n\treadonly generation: number;\n\treadonly execution: \"ready\" | \"running\" | \"paused\" | \"succeeded\" | \"failed\";\n\treadonly settlement: \"open\" | \"draining\" | \"settled\" | \"quarantined\";\n\treadonly verification: \"not_requested\" | \"verified\" | \"violated\" | \"inconclusive\";\n\treadonly application: \"not_requested\" | \"candidate_ready\";\n\treadonly candidateDigest: string | null;\n\treadonly inputDigest: string | null;\n\treadonly receiptDigest: string | null;\n\treadonly failure: string | null;\n\treadonly activeExecutionIds: readonly string[];\n\treadonly writerOpen: boolean;\n\treadonly modelRequests: number;\n\treadonly tasks: readonly RunTaskProjection[];\n\treadonly budget: RecoveryBudget | null;\n\treadonly environmentDigest: string | null;\n\treadonly verificationDeadlineMs: number | null;\n\treadonly lastClockMs: number | null;\n\treadonly processes: readonly { readonly executionId: string; readonly identity: NamespaceIdentity }[];\n}\n\n/** Mutable reduction bookkeeping, confined to one replay call. */\nexport interface WriterReduction {\n\treadonly contract: RunContract;\n\tstate: RunProjection;\n\twriterFinished: boolean;\n\twriterStarted: boolean;\n\tproducerStarted: boolean;\n\twriterCommands: number;\n\trequestBaseline: number;\n\treadonly requests: Set<string>;\n}\n"]}
1
+ {"version":3,"file":"run-types.js","sourceRoot":"","sources":["../../../src/core/verified-run/run-types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tRunContract,\n\tRunResumeCommand,\n\tRunStartCommand,\n\tRunTaskRetryCommand,\n\tRunWriterRestartCommand,\n} from \"omk-protocol\";\nimport type { DagEvent, RunTaskCheckpoint, RunTaskProjection } from \"./dag-types.ts\";\nimport type { NamespaceIdentity } from \"./namespace-identity.ts\";\nimport type { RecoveryBudget } from \"./recovery-clock.ts\";\n\nexport type RunEvent =\n\t| DagEvent\n\t| { readonly kind: \"created\"; readonly contract: RunContract; readonly command: RunStartCommand }\n\t| {\n\t\t\treadonly kind: \"budget_anchored\";\n\t\t\treadonly budget: RecoveryBudget;\n\t\t\treadonly environmentDigest: string;\n\t\t\treadonly driver: \"linux-pidns-gate-v1\";\n\t }\n\t| {\n\t\t\treadonly kind: \"dispatch\";\n\t\t\treadonly executionId: string;\n\t\t\treadonly role: \"writer\" | \"verifier\";\n\t\t\treadonly claimId: string | null;\n\t\t\treadonly taskId?: string;\n\t }\n\t| { readonly kind: \"input_checkpoint\"; readonly digest: string }\n\t| { readonly kind: \"process_ready\"; readonly executionId: string; readonly identity: NamespaceIdentity }\n\t| { readonly kind: \"writer_opened\" }\n\t| { readonly kind: \"model_request\"; readonly requestId: string }\n\t| { readonly kind: \"writer_closed\"; readonly completed: boolean }\n\t| { readonly kind: \"exited\"; readonly executionId: string; readonly failure: string | null }\n\t| {\n\t\t\treadonly kind: \"candidate\";\n\t\t\treadonly digest: string;\n\t\t\treadonly observedMs?: number;\n\t\t\treadonly verificationDeadlineMs?: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"resumed\";\n\t\t\treadonly command: RunResumeCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t }\n\t| {\n\t\t\treadonly kind: \"writer_restarted\";\n\t\t\treadonly command: RunWriterRestartCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t }\n\t| {\n\t\t\treadonly kind: \"tasks_retried\";\n\t\t\treadonly command: RunTaskRetryCommand;\n\t\t\treadonly observedMs: number;\n\t\t\treadonly reconciledExecutionIds: readonly string[];\n\t\t\treadonly adopted: readonly RunTaskCheckpoint[];\n\t }\n\t| { readonly kind: \"evaluated\"; readonly receiptDigest: string; readonly verified: boolean }\n\t| { readonly kind: \"failed\"; readonly code: string };\n\nexport interface RunProjection {\n\treadonly runId: string;\n\treadonly revision: number;\n\treadonly generation: number;\n\treadonly execution: \"ready\" | \"running\" | \"paused\" | \"succeeded\" | \"failed\";\n\treadonly settlement: \"open\" | \"draining\" | \"settled\" | \"quarantined\";\n\treadonly verification: \"not_requested\" | \"verified\" | \"violated\" | \"inconclusive\";\n\treadonly application: \"not_requested\" | \"candidate_ready\";\n\treadonly candidateDigest: string | null;\n\treadonly inputDigest: string | null;\n\treadonly receiptDigest: string | null;\n\treadonly failure: string | null;\n\treadonly activeExecutionIds: readonly string[];\n\treadonly writerOpen: boolean;\n\treadonly modelRequests: number;\n\treadonly tasks: readonly RunTaskProjection[];\n\treadonly budget: RecoveryBudget | null;\n\treadonly environmentDigest: string | null;\n\treadonly verificationDeadlineMs: number | null;\n\treadonly lastClockMs: number | null;\n\treadonly processes: readonly { readonly executionId: string; readonly identity: NamespaceIdentity }[];\n}\n\n/** Mutable reduction bookkeeping, confined to one replay call. */\nexport interface WriterReduction {\n\treadonly contract: RunContract;\n\tstate: RunProjection;\n\twriterFinished: boolean;\n\twriterStarted: boolean;\n\tproducerStarted: boolean;\n\twriterCommands: number;\n\trequestBaseline: number;\n\treadonly requests: Set<string>;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { RunEvent, WriterReduction } from "./run-types.ts";
2
+ /** Associate a process with exactly one current attempt, including old serial journals without taskId. */
3
+ export declare function bindTaskExecution(context: WriterReduction, event: Extract<RunEvent, {
4
+ kind: "dispatch";
5
+ }>): void;
6
+ export declare function endTaskExecution(context: WriterReduction, event: Extract<RunEvent, {
7
+ kind: "exited";
8
+ }>): void;
9
+ //# sourceMappingURL=task-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-execution.d.ts","sourceRoot":"","sources":["../../../src/core/verified-run/task-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGhE,0GAA0G;AAC1G,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,GAAG,IAAI,CAWhH;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GAAG,IAAI,CAc7G","sourcesContent":["import type { RunEvent, WriterReduction } from \"./run-types.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\n\n/** Associate a process with exactly one current attempt, including old serial journals without taskId. */\nexport function bindTaskExecution(context: WriterReduction, event: Extract<RunEvent, { kind: \"dispatch\" }>): void {\n\tconst { contract, state } = context;\n\tif (contract.profile !== \"linux-command-dag-v1\") throw new VerifiedRunError(\"integrity\");\n\tconst running = state.tasks.filter((task) => task.status === \"running\");\n\tif (event.taskId === undefined && ((contract.writer.maxConcurrentTasks ?? 1) !== 1 || running.length !== 1))\n\t\tthrow new VerifiedRunError(\"task_not_ready\");\n\tconst task = event.taskId === undefined ? running[0] : running.find((task) => task.taskId === event.taskId);\n\tif (!task || task.status !== \"running\" || task.generation !== state.generation || task.execution.kind !== \"ready\")\n\t\tthrow new VerifiedRunError(\"task_not_ready\");\n\tconst next = { ...task, execution: Object.freeze({ kind: \"running\" as const, executionId: event.executionId }) };\n\tcontext.state = { ...state, tasks: state.tasks.map((item) => (item.taskId === next.taskId ? next : item)) };\n}\n\nexport function endTaskExecution(context: WriterReduction, event: Extract<RunEvent, { kind: \"exited\" }>): void {\n\tconst state = context.state;\n\tconst task = state.tasks.find(\n\t\t(task) =>\n\t\t\ttask.status === \"running\" &&\n\t\t\ttask.execution.kind === \"running\" &&\n\t\t\ttask.execution.executionId === event.executionId,\n\t);\n\tif (!task || task.status !== \"running\") throw new VerifiedRunError(\"integrity\");\n\tconst next = {\n\t\t...task,\n\t\texecution: Object.freeze({ kind: \"exited\" as const, executionId: event.executionId, failure: event.failure }),\n\t};\n\tcontext.state = { ...state, tasks: state.tasks.map((item) => (item.taskId === next.taskId ? next : item)) };\n}\n"]}