@sema-agent/server 7.147.0 → 7.149.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 (790) hide show
  1. package/MIGRATION.md +1468 -24
  2. package/README.md +35 -7
  3. package/README.zh-CN.md +18 -8
  4. package/USAGE.md +444 -193
  5. package/deploy/sema-up/README.md +16 -5
  6. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  7. package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
  8. package/deploy/sema-up/chart/values.yaml +3 -2
  9. package/deploy/sema-up/cluster-up.sh +74 -176
  10. package/deploy/sema-up/kube-up.sh +29 -49
  11. package/deploy/sema-up/lib/chart-run.sh +23 -0
  12. package/deploy/sema-up/lib/dataroot.sh +3 -3
  13. package/deploy/sema-up/lib/health.sh +62 -13
  14. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  15. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  16. package/deploy/sema-up/lib/regcred.py +8 -0
  17. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  18. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  19. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  20. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  21. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  22. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  23. package/deploy/sema-up/lib/render-stack.py +17 -0
  24. package/deploy/sema-up/lib/shell-text.sh +87 -0
  25. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  26. package/deploy/sema-up/lib/usage-head.txt +1 -0
  27. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  28. package/deploy/sema-up/preflight.sh +10 -8
  29. package/deploy/sema-up/sema-up.sh +14 -39
  30. package/deploy/sema-up/smoke.sh +7 -6
  31. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  32. package/deploy/sema-up/stack/compose.yaml +13 -1
  33. package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
  34. package/dist/adoption/plan.d.ts +24 -0
  35. package/dist/adoption/plan.js +53 -1
  36. package/dist/adoption/runner.d.ts +10 -1
  37. package/dist/adoption/runner.js +36 -16
  38. package/dist/approval-card.d.ts +36 -38
  39. package/dist/approval-gate-currency.js +3 -2
  40. package/dist/approval-leg-origin.d.ts +33 -0
  41. package/dist/approval-leg-origin.js +4 -0
  42. package/dist/approval-reconciler.d.ts +4 -13
  43. package/dist/approval-reconciler.js +2 -2
  44. package/dist/approval.d.ts +13 -11
  45. package/dist/approval.js +3 -3
  46. package/dist/audit.d.ts +10 -3
  47. package/dist/audit.js +15 -7
  48. package/dist/auth-bridge.d.ts +9 -15
  49. package/dist/auth-bridge.js +4 -11
  50. package/dist/auth-keys.d.ts +10 -1
  51. package/dist/auth-keys.js +8 -0
  52. package/dist/auto-mode-face.d.ts +10 -7
  53. package/dist/auto-mode-face.js +7 -4
  54. package/dist/background-agent-name.d.ts +19 -1
  55. package/dist/background-agent-name.js +12 -2
  56. package/dist/background-session-reap.d.ts +1 -1
  57. package/dist/bake-runner/main.js +9 -6
  58. package/dist/bench/s1/arms.js +6 -5
  59. package/dist/bench/s1/live-deps.js +5 -2
  60. package/dist/bench/s1/run-firm.js +6 -5
  61. package/dist/bind-host.d.ts +25 -0
  62. package/dist/bind-host.js +25 -0
  63. package/dist/boot/adoption.d.ts +3 -0
  64. package/dist/boot/adoption.js +1 -0
  65. package/dist/boot/deployment-mods.d.ts +1 -1
  66. package/dist/boot/execution-env.d.ts +17 -7
  67. package/dist/boot/execution-env.js +47 -42
  68. package/dist/boot/execution-lane.d.ts +6 -4
  69. package/dist/boot/execution-lane.js +3 -1
  70. package/dist/boot/exit-boundary.d.ts +2 -2
  71. package/dist/boot/exit-boundary.js +6 -5
  72. package/dist/boot/fatal-exit.d.ts +3 -5
  73. package/dist/boot/fatal-exit.js +2 -2
  74. package/dist/boot/leader.d.ts +15 -0
  75. package/dist/boot/leader.js +17 -15
  76. package/dist/boot/memory-consolidation.d.ts +37 -29
  77. package/dist/boot/memory-consolidation.js +11 -5
  78. package/dist/boot/org-delivery.d.ts +3 -2
  79. package/dist/boot/org-memory.js +1 -1
  80. package/dist/boot/parked-revive-gate.js +2 -2
  81. package/dist/boot/reapers.d.ts +4 -3
  82. package/dist/boot/reapers.js +19 -16
  83. package/dist/boot/resolve-spec.d.ts +5 -3
  84. package/dist/boot/resolve-spec.js +60 -70
  85. package/dist/boot/retention-lane.d.ts +4 -4
  86. package/dist/boot/retention-lane.js +2 -2
  87. package/dist/boot/runner-deps.d.ts +28 -7
  88. package/dist/boot/runner-deps.js +14 -5
  89. package/dist/boot/runtime-caps.d.ts +2 -2
  90. package/dist/boot/runtime-caps.js +16 -2
  91. package/dist/boot/session-faces.d.ts +16 -7
  92. package/dist/boot/session-faces.js +114 -94
  93. package/dist/boot/shutdown.d.ts +5 -4
  94. package/dist/boot/shutdown.js +6 -4
  95. package/dist/boot/stage-01-config.d.ts +1 -0
  96. package/dist/boot/stage-01-config.js +13 -4
  97. package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
  98. package/dist/boot/stage-02-web-admin-pull.js +16 -3
  99. package/dist/boot/stage-03-store-backend.d.ts +4 -0
  100. package/dist/boot/stage-03-store-backend.js +4 -3
  101. package/dist/boot/stage-04-stores.d.ts +3 -0
  102. package/dist/boot/stage-04-stores.js +2 -2
  103. package/dist/boot/stage-05-execution-env.d.ts +8 -3
  104. package/dist/boot/stage-05-execution-env.js +2 -2
  105. package/dist/boot/stage-06-runners.d.ts +12 -13
  106. package/dist/boot/stage-06-runners.js +23 -15
  107. package/dist/boot/stage-07-capability-layer.d.ts +13 -9
  108. package/dist/boot/stage-07-capability-layer.js +5 -3
  109. package/dist/boot/stage-08-reapers.d.ts +13 -9
  110. package/dist/boot/stage-08-reapers.js +3 -3
  111. package/dist/boot/stage-09-leader.d.ts +14 -16
  112. package/dist/boot/stage-09-leader.js +12 -4
  113. package/dist/boot/stage-10-http-server.d.ts +14 -16
  114. package/dist/boot/stage-10-http-server.js +7 -4
  115. package/dist/boot/store-evidence.d.ts +20 -0
  116. package/dist/boot/store-evidence.js +13 -0
  117. package/dist/boot/stores.d.ts +6 -0
  118. package/dist/boot/stores.js +41 -27
  119. package/dist/boot/task-list-lane.d.ts +4 -4
  120. package/dist/boot/web-admin.d.ts +4 -2
  121. package/dist/boot/web-admin.js +55 -35
  122. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  123. package/dist/boot-reclaim.d.ts +3 -1
  124. package/dist/boot-reclaim.js +1 -1
  125. package/dist/brain.d.ts +7 -18
  126. package/dist/brain.js +5 -17
  127. package/dist/budget.js +6 -6
  128. package/dist/capabilities/center-plugins.d.ts +7 -1
  129. package/dist/capabilities/center-plugins.js +32 -10
  130. package/dist/capabilities/center-wiring.js +1 -1
  131. package/dist/capabilities/composite-members.d.ts +2 -2
  132. package/dist/capabilities/composite-members.js +2 -2
  133. package/dist/capabilities/repo-tools.d.ts +2 -0
  134. package/dist/capabilities/repo-tools.js +14 -12
  135. package/dist/capabilities/scenarios.d.ts +6 -15
  136. package/dist/capabilities/scenarios.js +11 -16
  137. package/dist/capabilities/skills.d.ts +1 -1
  138. package/dist/capabilities/tool-defer.d.ts +1 -1
  139. package/dist/capability-facts.d.ts +39 -11
  140. package/dist/capability-facts.js +35 -7
  141. package/dist/card-settle-stored-scope.d.ts +56 -0
  142. package/dist/card-settle-stored-scope.js +27 -0
  143. package/dist/card-void.d.ts +8 -13
  144. package/dist/card-void.js +2 -7
  145. package/dist/center-credential-renewer.d.ts +6 -2
  146. package/dist/center-credential-renewer.js +7 -3
  147. package/dist/config-catalog.d.ts +28 -1
  148. package/dist/config-catalog.js +95 -85
  149. package/dist/config-dir-trust.d.ts +37 -4
  150. package/dist/config-dir-trust.js +88 -44
  151. package/dist/config-invariants.d.ts +43 -3
  152. package/dist/config-invariants.js +69 -5
  153. package/dist/config-lkg.d.ts +23 -1
  154. package/dist/config-lkg.js +17 -3
  155. package/dist/config-provider.d.ts +9 -9
  156. package/dist/config-provider.js +25 -110
  157. package/dist/config-pull-failure.d.ts +50 -0
  158. package/dist/config-pull-failure.js +48 -0
  159. package/dist/config-types.d.ts +62 -21
  160. package/dist/config.d.ts +14 -21
  161. package/dist/config.js +141 -64
  162. package/dist/context-window-notice.d.ts +31 -0
  163. package/dist/context-window-notice.js +28 -0
  164. package/dist/delegated-session-owner.d.ts +1 -1
  165. package/dist/deleted-session-ids.d.ts +3 -2
  166. package/dist/deployment-governance.d.ts +3 -3
  167. package/dist/deployment-shape.d.ts +46 -11
  168. package/dist/deployment-shape.js +8 -0
  169. package/dist/egress-redirect.d.ts +25 -7
  170. package/dist/egress-redirect.js +20 -2
  171. package/dist/elicitation.d.ts +6 -5
  172. package/dist/elicitation.js +23 -22
  173. package/dist/engine-identity.d.ts +28 -0
  174. package/dist/engine-identity.js +10 -0
  175. package/dist/entry-problems.d.ts +5 -7
  176. package/dist/entry-problems.js +1 -1
  177. package/dist/env-facts.js +2 -1
  178. package/dist/env-name-allowlist-knobs.d.ts +6 -5
  179. package/dist/env-name-allowlist-knobs.js +5 -0
  180. package/dist/env-witness.d.ts +7 -0
  181. package/dist/env-witness.js +16 -0
  182. package/dist/execution-lane-caps.d.ts +25 -23
  183. package/dist/execution-lane-caps.js +18 -26
  184. package/dist/execution-placement.d.ts +58 -18
  185. package/dist/execution-placement.js +41 -2
  186. package/dist/field-conflict.d.ts +7 -11
  187. package/dist/field-conflict.js +3 -3
  188. package/dist/file-history-capture.d.ts +3 -3
  189. package/dist/file-history-disclosure.js +1 -0
  190. package/dist/fleet/fleet-bus.d.ts +21 -3
  191. package/dist/fleet/fleet-bus.js +35 -25
  192. package/dist/fleet/fleet-reconciler.js +2 -2
  193. package/dist/fleet/serving-lease.js +3 -3
  194. package/dist/fleet-client.js +3 -3
  195. package/dist/fleet-lease.d.ts +0 -1
  196. package/dist/fleet-lease.js +4 -5
  197. package/dist/history-anchor.d.ts +23 -3
  198. package/dist/history-anchor.js +24 -4
  199. package/dist/hitl-delivery.d.ts +90 -0
  200. package/dist/hitl-delivery.js +98 -0
  201. package/dist/hooks/classic-stations.d.ts +8 -11
  202. package/dist/hooks/classic-stations.js +0 -7
  203. package/dist/hooks/command-spawn.d.ts +7 -2
  204. package/dist/hooks/command-spawn.js +13 -6
  205. package/dist/hooks/hook-llm.d.ts +5 -1
  206. package/dist/hooks/hook-llm.js +24 -15
  207. package/dist/hooks/hook-runner.d.ts +72 -57
  208. package/dist/hooks/hook-runner.js +271 -193
  209. package/dist/host-lsp-manager.d.ts +22 -8
  210. package/dist/host-lsp-manager.js +4 -1
  211. package/dist/http/active-run-conflict.d.ts +2 -43
  212. package/dist/http/active-run-conflict.js +3 -7
  213. package/dist/http/admission.d.ts +4 -18
  214. package/dist/http/admission.js +76 -79
  215. package/dist/http/approval-sweeps.d.ts +3 -3
  216. package/dist/http/approval-sweeps.js +56 -31
  217. package/dist/http/caller-trust.d.ts +8 -10
  218. package/dist/http/caller-trust.js +1 -2
  219. package/dist/http/claim-heartbeat.d.ts +49 -0
  220. package/dist/http/claim-heartbeat.js +46 -0
  221. package/dist/http/claimed-run.d.ts +16 -8
  222. package/dist/http/claimed-run.js +8 -0
  223. package/dist/http/dispatch.d.ts +8 -1
  224. package/dist/http/dispatch.js +78 -30
  225. package/dist/http/durable-run-leg.d.ts +11 -4
  226. package/dist/http/durable-run-leg.js +45 -21
  227. package/dist/http/execution-context.d.ts +122 -47
  228. package/dist/http/execution-context.js +135 -43
  229. package/dist/http/health-reader.d.ts +36 -0
  230. package/dist/http/health-reader.js +21 -0
  231. package/dist/http/health-self-report.d.ts +9 -9
  232. package/dist/http/health-self-report.js +4 -4
  233. package/dist/http/idempotency.d.ts +9 -5
  234. package/dist/http/idempotency.js +4 -4
  235. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  236. package/dist/http/memory-compliance-failure-reply.js +4 -2
  237. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  238. package/dist/http/memory-face-fault-reply.js +71 -0
  239. package/dist/http/memory-store-refusal-reply.d.ts +1 -1
  240. package/dist/http/memory-store-refusal-reply.js +3 -0
  241. package/dist/http/owner-access.d.ts +392 -67
  242. package/dist/http/owner-access.js +370 -35
  243. package/dist/http/principal-gate.d.ts +39 -89
  244. package/dist/http/principal-gate.js +26 -68
  245. package/dist/http/refusal-body.d.ts +35 -2
  246. package/dist/http/refusal-body.js +34 -0
  247. package/dist/http/request-guards.d.ts +9 -13
  248. package/dist/http/request-guards.js +34 -68
  249. package/dist/http/resume-composition.d.ts +37 -0
  250. package/dist/http/resume-composition.js +18 -0
  251. package/dist/http/resume-ctx-read.d.ts +46 -12
  252. package/dist/http/resume-ctx-read.js +31 -6
  253. package/dist/http/resume-legs.d.ts +54 -19
  254. package/dist/http/resume-legs.js +408 -196
  255. package/dist/http/retired-skill-manifest.d.ts +1 -1
  256. package/dist/http/route-ctx.d.ts +31 -32
  257. package/dist/http/routes/a2a-serve.d.ts +43 -5
  258. package/dist/http/routes/a2a-serve.js +60 -37
  259. package/dist/http/routes/admin-config-refresh.js +2 -2
  260. package/dist/http/routes/admin-drain.js +2 -2
  261. package/dist/http/routes/admin-memory-optout.js +4 -3
  262. package/dist/http/routes/adoption.d.ts +3 -0
  263. package/dist/http/routes/adoption.js +17 -10
  264. package/dist/http/routes/agents-roster.js +13 -7
  265. package/dist/http/routes/approvals-assistant.js +73 -67
  266. package/dist/http/routes/attachments.js +2 -2
  267. package/dist/http/routes/background.d.ts +3 -3
  268. package/dist/http/routes/background.js +9 -17
  269. package/dist/http/routes/capabilities.js +16 -19
  270. package/dist/http/routes/config-catalog.js +2 -2
  271. package/dist/http/routes/devices.d.ts +3 -3
  272. package/dist/http/routes/devices.js +4 -4
  273. package/dist/http/routes/diagnostics.d.ts +29 -3
  274. package/dist/http/routes/diagnostics.js +49 -18
  275. package/dist/http/routes/engine.js +2 -2
  276. package/dist/http/routes/fleet.js +5 -3
  277. package/dist/http/routes/images.js +10 -6
  278. package/dist/http/routes/leader.d.ts +7 -2
  279. package/dist/http/routes/leader.js +12 -3
  280. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  281. package/dist/http/routes/mcp-reconnect.js +7 -15
  282. package/dist/http/routes/memory-bundle.js +4 -7
  283. package/dist/http/routes/memory-compliance.js +4 -4
  284. package/dist/http/routes/memory-consolidation.js +6 -9
  285. package/dist/http/routes/memory-origin.d.ts +2 -0
  286. package/dist/http/routes/memory-origin.js +7 -8
  287. package/dist/http/routes/memory-policy.js +17 -12
  288. package/dist/http/routes/notify-wake.js +10 -19
  289. package/dist/http/routes/observability.js +3 -3
  290. package/dist/http/routes/principal-inbox.d.ts +4 -2
  291. package/dist/http/routes/principal-inbox.js +5 -4
  292. package/dist/http/routes/projects.d.ts +1 -1
  293. package/dist/http/routes/projects.js +3 -2
  294. package/dist/http/routes/retention-ops.js +6 -9
  295. package/dist/http/routes/rules.js +20 -5
  296. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  297. package/dist/http/routes/run-memory-capture.js +6 -12
  298. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  299. package/dist/http/routes/run-permission-mode.js +10 -17
  300. package/dist/http/routes/runs.js +155 -237
  301. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  302. package/dist/http/routes/session-memory-sync.js +7 -13
  303. package/dist/http/routes/session-sync.d.ts +28 -7
  304. package/dist/http/routes/session-sync.js +63 -50
  305. package/dist/http/routes/sessions-list.d.ts +3 -3
  306. package/dist/http/routes/sessions-list.js +9 -9
  307. package/dist/http/routes/sessions.js +87 -124
  308. package/dist/http/routes/shared-memory.js +6 -6
  309. package/dist/http/routes/side-query.js +2 -2
  310. package/dist/http/routes/tasks.js +237 -187
  311. package/dist/http/routes/trace-usage.d.ts +0 -12
  312. package/dist/http/routes/trace-usage.js +40 -46
  313. package/dist/http/routes/workflows.d.ts +39 -4
  314. package/dist/http/routes/workflows.js +42 -14
  315. package/dist/http/run-concurrency-cap.d.ts +20 -12
  316. package/dist/http/run-concurrency-cap.js +39 -26
  317. package/dist/http/run-read-face.d.ts +3 -5
  318. package/dist/http/run-read-face.js +8 -13
  319. package/dist/http/send.d.ts +12 -3
  320. package/dist/http/send.js +42 -6
  321. package/dist/http/server.d.ts +43 -45
  322. package/dist/http/server.js +61 -11
  323. package/dist/http/sse-log.d.ts +17 -10
  324. package/dist/http/sse-log.js +7 -7
  325. package/dist/http/stored-body-replay.d.ts +12 -0
  326. package/dist/http/stored-body-replay.js +2 -2
  327. package/dist/http/submit-ctx.d.ts +17 -8
  328. package/dist/http/submit-ctx.js +8 -5
  329. package/dist/http/submit-replay.d.ts +19 -6
  330. package/dist/http/submit-replay.js +18 -6
  331. package/dist/http/sync-submit-body.d.ts +3 -4
  332. package/dist/http/sync-submit-body.js +4 -5
  333. package/dist/http/wire-types.d.ts +4 -3
  334. package/dist/identity-source.d.ts +36 -5
  335. package/dist/identity-source.js +27 -0
  336. package/dist/index.d.ts +4 -1
  337. package/dist/index.js +2 -0
  338. package/dist/key-resolver.d.ts +32 -0
  339. package/dist/key-resolver.js +23 -9
  340. package/dist/leader/diffup.js +2 -1
  341. package/dist/leader/endpoint.d.ts +26 -5
  342. package/dist/leader/endpoint.js +154 -14
  343. package/dist/leader/fanout.d.ts +3 -0
  344. package/dist/leader/fanout.js +78 -63
  345. package/dist/leader/leader.d.ts +16 -0
  346. package/dist/leader/leader.js +43 -3
  347. package/dist/leader/merge.d.ts +9 -1
  348. package/dist/leader/merge.js +16 -1
  349. package/dist/leader/repair-wire.js +1 -1
  350. package/dist/leader/wire.d.ts +36 -3
  351. package/dist/leader/wire.js +59 -18
  352. package/dist/leg-facts.d.ts +7 -2
  353. package/dist/leg-facts.js +1 -0
  354. package/dist/local-store-declaration.d.ts +54 -0
  355. package/dist/local-store-declaration.js +59 -0
  356. package/dist/lsp-evict.d.ts +6 -4
  357. package/dist/lsp-evict.js +2 -3
  358. package/dist/mcp-assertion-header.d.ts +1 -1
  359. package/dist/mcp-assertion-header.js +1 -1
  360. package/dist/memory-operator-faces.d.ts +5 -4
  361. package/dist/memory-operator-faces.js +1 -1
  362. package/dist/memory-project-layer.js +1 -1
  363. package/dist/memory-scope.d.ts +33 -6
  364. package/dist/memory-scope.js +68 -19
  365. package/dist/memory-store-refusal.d.ts +5 -2
  366. package/dist/memory-sync-client.d.ts +3 -2
  367. package/dist/memory-sync-client.js +8 -5
  368. package/dist/model-compat.d.ts +17 -8
  369. package/dist/model-compat.js +6 -2
  370. package/dist/model-context-window.d.ts +57 -0
  371. package/dist/model-context-window.js +21 -0
  372. package/dist/model-entry-headers.d.ts +46 -4
  373. package/dist/model-entry-headers.js +2 -2
  374. package/dist/model-entry-refusal.d.ts +40 -20
  375. package/dist/model-entry-refusal.js +57 -30
  376. package/dist/model-plane-face.d.ts +19 -11
  377. package/dist/model-plane-face.js +9 -1
  378. package/dist/model-plane-probe.d.ts +2 -0
  379. package/dist/model-plane-probe.js +17 -0
  380. package/dist/model-provider.d.ts +3 -3
  381. package/dist/model-reach-scope.d.ts +2 -1
  382. package/dist/model-route-endpoint.d.ts +9 -5
  383. package/dist/model-route-endpoint.js +29 -7
  384. package/dist/model-select.d.ts +16 -0
  385. package/dist/model-select.js +4 -0
  386. package/dist/mountinfo.d.ts +37 -0
  387. package/dist/mountinfo.js +47 -0
  388. package/dist/namespaced-rule-name.d.ts +23 -14
  389. package/dist/namespaced-rule-name.js +8 -11
  390. package/dist/net-address.d.ts +1 -1
  391. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  392. package/dist/observability/corrupt-read-seat.js +5 -3
  393. package/dist/observability/fail-open.d.ts +72 -40
  394. package/dist/observability/fail-open.js +74 -40
  395. package/dist/observability/logger.d.ts +22 -1
  396. package/dist/observability/logger.js +89 -12
  397. package/dist/observability/metrics.js +4 -5
  398. package/dist/observability/otel-exporter.js +2 -1
  399. package/dist/observability/principal-context.d.ts +14 -7
  400. package/dist/observability/principal-context.js +8 -3
  401. package/dist/observability/run-terminal.d.ts +7 -1
  402. package/dist/observability/run-terminal.js +6 -2
  403. package/dist/observability/secret-env-scrub.d.ts +1 -1
  404. package/dist/observability/secret-env-scrub.js +1 -1
  405. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  406. package/dist/orchestration/hardened-vm-runner.js +11 -5
  407. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  408. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  409. package/dist/orchestration/hardened-vm-worker.js +2 -1
  410. package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
  411. package/dist/orchestration/workflow-completion-inbox.js +3 -2
  412. package/dist/org-delivery-gate.d.ts +36 -10
  413. package/dist/org-delivery-gate.js +12 -8
  414. package/dist/outbound-dispatcher.d.ts +1 -1
  415. package/dist/outbound-dispatcher.js +6 -12
  416. package/dist/owner-brands.d.ts +81 -0
  417. package/dist/owner-brands.js +42 -0
  418. package/dist/owner-faces.d.ts +532 -0
  419. package/dist/owner-faces.js +126 -0
  420. package/dist/park-row-commit.d.ts +67 -0
  421. package/dist/park-row-commit.js +76 -0
  422. package/dist/parked-decide.d.ts +76 -12
  423. package/dist/parked-decide.js +152 -11
  424. package/dist/parked-revive-surface.d.ts +14 -4
  425. package/dist/parked-revive-surface.js +5 -4
  426. package/dist/peer-directory.d.ts +7 -9
  427. package/dist/peer-directory.js +3 -2
  428. package/dist/permission-rule-vocab.d.ts +53 -8
  429. package/dist/permission-rule-vocab.js +30 -2
  430. package/dist/plugins/adoption-log-sql.d.ts +3 -25
  431. package/dist/plugins/adoption-log-sql.js +23 -21
  432. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  433. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  434. package/dist/plugins/approval-ask-store-file.d.ts +18 -7
  435. package/dist/plugins/approval-ask-store-file.js +37 -14
  436. package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
  437. package/dist/plugins/approval-ask-store-memory.js +24 -10
  438. package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
  439. package/dist/plugins/approval-ask-store-sql.js +44 -15
  440. package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
  441. package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
  442. package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
  443. package/dist/plugins/approval-exemption-skill-m46.js +21 -0
  444. package/dist/plugins/approval-exemption-store.d.ts +32 -2
  445. package/dist/plugins/approval-exemption-store.js +42 -19
  446. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  447. package/dist/plugins/approval-nonce-store.js +72 -23
  448. package/dist/plugins/blob-backend.d.ts +2 -0
  449. package/dist/plugins/blob-backend.js +9 -6
  450. package/dist/plugins/caching-session-store.d.ts +13 -1
  451. package/dist/plugins/caching-session-store.js +43 -4
  452. package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
  453. package/dist/plugins/checkpoint-index-columns.js +36 -1
  454. package/dist/plugins/checkpoint-store-face.d.ts +83 -10
  455. package/dist/plugins/checkpoint-store-face.js +18 -1
  456. package/dist/plugins/device-store-sql.js +1 -0
  457. package/dist/plugins/ensure-index.d.ts +13 -1
  458. package/dist/plugins/ensure-index.js +154 -21
  459. package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
  460. package/dist/plugins/ensure-schema-lock-policy.js +76 -9
  461. package/dist/plugins/file-run-store.d.ts +85 -32
  462. package/dist/plugins/file-run-store.js +177 -94
  463. package/dist/plugins/host-platform.d.ts +24 -3
  464. package/dist/plugins/host-platform.js +15 -1
  465. package/dist/plugins/image-bake-store-sql.js +2 -0
  466. package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
  467. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  468. package/dist/plugins/k8s-pod-reaper.js +0 -1
  469. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  470. package/dist/plugins/leader-run-store-sql.js +34 -4
  471. package/dist/plugins/local-checkpoint-store.d.ts +62 -23
  472. package/dist/plugins/local-checkpoint-store.js +197 -77
  473. package/dist/plugins/local-data-dir-modes-m39.js +2 -1
  474. package/dist/plugins/local-data-root-admission.d.ts +52 -0
  475. package/dist/plugins/local-data-root-admission.js +100 -0
  476. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  477. package/dist/plugins/local-docker-capacity.js +194 -0
  478. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  479. package/dist/plugins/local-docker-reaper.js +102 -0
  480. package/dist/plugins/local-engine-high-water.d.ts +29 -6
  481. package/dist/plugins/local-engine-high-water.js +27 -19
  482. package/dist/plugins/local-session-store.d.ts +458 -140
  483. package/dist/plugins/local-session-store.js +906 -292
  484. package/dist/plugins/local-session-window.d.ts +3 -2
  485. package/dist/plugins/local-session-window.js +3 -2
  486. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  487. package/dist/plugins/local-task-attachment-store.d.ts +18 -1
  488. package/dist/plugins/local-task-attachment-store.js +22 -1
  489. package/dist/plugins/memory-embedder.js +9 -7
  490. package/dist/plugins/memory-engine-pg.d.ts +3 -2
  491. package/dist/plugins/memory-engine-pg.js +14 -5
  492. package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
  493. package/dist/plugins/memory-engine-sql-apply.js +6 -8
  494. package/dist/plugins/memory-engine-tidb.d.ts +4 -2
  495. package/dist/plugins/memory-engine-tidb.js +11 -2
  496. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  497. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  498. package/dist/plugins/memory-run-store.d.ts +53 -36
  499. package/dist/plugins/memory-run-store.js +116 -88
  500. package/dist/plugins/one-time-migration-marker.d.ts +26 -0
  501. package/dist/plugins/one-time-migration-marker.js +13 -0
  502. package/dist/plugins/one-time-migrations.d.ts +214 -47
  503. package/dist/plugins/one-time-migrations.js +481 -135
  504. package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
  505. package/dist/plugins/org-delivery-quota-store.js +31 -15
  506. package/dist/plugins/permission-rule-store-file.d.ts +3 -3
  507. package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
  508. package/dist/plugins/permission-rule-store-sql.js +11 -95
  509. package/dist/plugins/pg-pool.d.ts +2 -32
  510. package/dist/plugins/pg-pool.js +24 -17
  511. package/dist/plugins/remote-env-device.d.ts +3 -2
  512. package/dist/plugins/remote-env-e2b.d.ts +8 -32
  513. package/dist/plugins/remote-env-e2b.js +44 -32
  514. package/dist/plugins/remote-env-host.d.ts +51 -17
  515. package/dist/plugins/remote-env-host.js +111 -42
  516. package/dist/plugins/remote-env-k8s.d.ts +40 -45
  517. package/dist/plugins/remote-env-k8s.js +111 -60
  518. package/dist/plugins/remote-env-local-docker.d.ts +152 -15
  519. package/dist/plugins/remote-env-local-docker.js +352 -72
  520. package/dist/plugins/remote-scratchpad.js +4 -0
  521. package/dist/plugins/retention-deployment.d.ts +49 -17
  522. package/dist/plugins/retention-deployment.js +39 -8
  523. package/dist/plugins/run-preview-m45.d.ts +11 -0
  524. package/dist/plugins/run-preview-m45.js +19 -0
  525. package/dist/plugins/run-store-sql.d.ts +82 -75
  526. package/dist/plugins/run-store-sql.js +164 -125
  527. package/dist/plugins/s3-answer.d.ts +2 -1
  528. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  529. package/dist/plugins/sandbox-reaper.js +2 -0
  530. package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
  531. package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
  532. package/dist/plugins/scheduler-support.d.ts +16 -1
  533. package/dist/plugins/scheduler-support.js +22 -2
  534. package/dist/plugins/schema-consistency.d.ts +131 -14
  535. package/dist/plugins/schema-consistency.js +388 -18
  536. package/dist/plugins/schema-drift-sentence.d.ts +10 -6
  537. package/dist/plugins/schema-drift-sentence.js +15 -7
  538. package/dist/plugins/schema-ensure-legs.d.ts +9 -0
  539. package/dist/plugins/schema-ensure-legs.js +1 -1
  540. package/dist/plugins/schema-indexes.js +3 -0
  541. package/dist/plugins/schema-live-columns.d.ts +14 -5
  542. package/dist/plugins/schema-live-columns.js +10 -10
  543. package/dist/plugins/send-user-file.js +2 -1
  544. package/dist/plugins/session-birth.d.ts +37 -0
  545. package/dist/plugins/session-birth.js +38 -0
  546. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  547. package/dist/plugins/session-epoch-anchor.js +33 -11
  548. package/dist/plugins/session-ext-table.d.ts +27 -3
  549. package/dist/plugins/session-ext-table.js +19 -6
  550. package/dist/plugins/session-fork.d.ts +15 -1
  551. package/dist/plugins/session-fork.js +3 -0
  552. package/dist/plugins/session-ownership.d.ts +1 -1
  553. package/dist/plugins/session-placement.d.ts +27 -20
  554. package/dist/plugins/session-placement.js +15 -12
  555. package/dist/plugins/session-row-sql.d.ts +12 -0
  556. package/dist/plugins/session-row-sql.js +3 -3
  557. package/dist/plugins/session-run-rollup.d.ts +29 -0
  558. package/dist/plugins/session-run-rollup.js +40 -0
  559. package/dist/plugins/session-store-sql.d.ts +38 -12
  560. package/dist/plugins/session-store-sql.js +130 -30
  561. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  562. package/dist/plugins/session-withdraw-sql.js +42 -0
  563. package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
  564. package/dist/plugins/shared-memory-store-sql.js +2 -1
  565. package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
  566. package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
  567. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  568. package/dist/plugins/sql-driver.d.ts +1 -1
  569. package/dist/plugins/sql-driver.js +2 -1
  570. package/dist/plugins/sql-errors.d.ts +32 -5
  571. package/dist/plugins/sql-errors.js +55 -7
  572. package/dist/plugins/sql-json-column.d.ts +8 -7
  573. package/dist/plugins/sql-json-column.js +10 -6
  574. package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
  575. package/dist/plugins/stop-then-start-sentence.js +7 -0
  576. package/dist/plugins/store-backend.d.ts +99 -16
  577. package/dist/plugins/store-backend.js +230 -65
  578. package/dist/plugins/store-contracts.d.ts +123 -33
  579. package/dist/plugins/store-contracts.js +38 -1
  580. package/dist/plugins/store-fault.d.ts +28 -2
  581. package/dist/plugins/store-fault.js +20 -2
  582. package/dist/plugins/task-attachment-store.d.ts +15 -3
  583. package/dist/plugins/task-attachment-store.js +22 -9
  584. package/dist/plugins/tidb-pool.d.ts +11 -6
  585. package/dist/plugins/tidb-pool.js +39 -18
  586. package/dist/plugins/web-search.js +5 -3
  587. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  588. package/dist/plugins/workflow-run-store-sql.js +11 -5
  589. package/dist/plugins/workspace-custody.d.ts +44 -0
  590. package/dist/plugins/workspace-custody.js +47 -0
  591. package/dist/principal-jwt.d.ts +4 -4
  592. package/dist/principal-jwt.js +20 -5
  593. package/dist/principal-shape.d.ts +41 -0
  594. package/dist/principal-shape.js +19 -0
  595. package/dist/project-identity.d.ts +8 -7
  596. package/dist/project-identity.js +40 -17
  597. package/dist/project-layer-key.d.ts +13 -2
  598. package/dist/project-layer-key.js +9 -1
  599. package/dist/question.d.ts +13 -23
  600. package/dist/question.js +21 -39
  601. package/dist/read-deny-floor-notice.d.ts +36 -0
  602. package/dist/read-deny-floor-notice.js +40 -0
  603. package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
  604. package/dist/request-declaration-disposition.js +39 -0
  605. package/dist/request-declaration-refusal.d.ts +35 -12
  606. package/dist/request-declaration-refusal.js +21 -9
  607. package/dist/request-form.d.ts +58 -0
  608. package/dist/request-form.js +72 -0
  609. package/dist/request-image-urls.d.ts +8 -2
  610. package/dist/request-image-urls.js +2 -1
  611. package/dist/request-images.d.ts +20 -0
  612. package/dist/request-images.js +59 -0
  613. package/dist/request-key-closure.d.ts +6 -7
  614. package/dist/request-key-closure.js +15 -2
  615. package/dist/resource-suspend.d.ts +7 -16
  616. package/dist/resource-suspend.js +1 -1
  617. package/dist/retired-name-host-notice.d.ts +21 -0
  618. package/dist/retired-name-host-notice.js +12 -0
  619. package/dist/rule-entry-list.d.ts +2 -2
  620. package/dist/rule-entry-list.js +3 -4
  621. package/dist/rule-issue-reading.d.ts +58 -0
  622. package/dist/rule-issue-reading.js +14 -0
  623. package/dist/rules-consent.d.ts +5 -3
  624. package/dist/rules-consent.js +1 -0
  625. package/dist/run-acceptance.d.ts +3 -1
  626. package/dist/run-acceptance.js +3 -0
  627. package/dist/run-cancel-card.d.ts +28 -0
  628. package/dist/run-cancel-card.js +19 -0
  629. package/dist/run-cancel-context.d.ts +10 -0
  630. package/dist/run-cancel-context.js +1 -0
  631. package/dist/run-local.d.ts +14 -6
  632. package/dist/run-local.js +117 -90
  633. package/dist/run-stale-default.d.ts +7 -0
  634. package/dist/run-stale-default.js +2 -0
  635. package/dist/runs.d.ts +56 -21
  636. package/dist/runs.js +73 -43
  637. package/dist/runtime-caps-resolver.d.ts +21 -6
  638. package/dist/runtime-caps-resolver.js +17 -4
  639. package/dist/runtime-governance.d.ts +2 -2
  640. package/dist/runtime-governance.js +5 -3
  641. package/dist/sealed-key-layout.d.ts +12 -5
  642. package/dist/sealed-key-layout.js +5 -0
  643. package/dist/sealed-key.d.ts +12 -2
  644. package/dist/sealed-key.js +115 -27
  645. package/dist/security.d.ts +128 -158
  646. package/dist/security.js +163 -59
  647. package/dist/sema-config-dir.d.ts +20 -0
  648. package/dist/sema-config-dir.js +25 -0
  649. package/dist/server-secret-env.d.ts +55 -25
  650. package/dist/server-secret-env.js +75 -22
  651. package/dist/session-agent.d.ts +3 -2
  652. package/dist/session-children-retire.d.ts +13 -8
  653. package/dist/session-children-retire.js +9 -7
  654. package/dist/session-deletion.d.ts +88 -0
  655. package/dist/session-deletion.js +8 -0
  656. package/dist/session-erase.d.ts +145 -0
  657. package/dist/session-erase.js +115 -0
  658. package/dist/session-error-wire.d.ts +5 -5
  659. package/dist/session-error-wire.js +1 -1
  660. package/dist/session-incarnation.d.ts +52 -5
  661. package/dist/session-incarnation.js +19 -2
  662. package/dist/session-policy-wire.d.ts +6 -3
  663. package/dist/session-policy-wire.js +11 -1
  664. package/dist/session-resident-background.d.ts +0 -71
  665. package/dist/session-resident-background.js +4 -3
  666. package/dist/session-row.d.ts +2 -1
  667. package/dist/session-rules-seat.d.ts +12 -0
  668. package/dist/session-rules-seat.js +19 -0
  669. package/dist/session-titler.d.ts +7 -15
  670. package/dist/session-titler.js +1 -1
  671. package/dist/session-workspace.d.ts +3 -3
  672. package/dist/spec-fields.d.ts +57 -3
  673. package/dist/spec-fields.js +72 -51
  674. package/dist/store-admission.d.ts +33 -0
  675. package/dist/store-admission.js +49 -0
  676. package/dist/store-posture.d.ts +141 -20
  677. package/dist/store-posture.js +205 -3
  678. package/dist/stored-request-hooks-m20.js +2 -2
  679. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  680. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  681. package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
  682. package/dist/stores-sql/checkpoint-store-sql.js +78 -49
  683. package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
  684. package/dist/stores-sql/file-history-store-sql.js +3 -5
  685. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  686. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  687. package/dist/stores-sql/pg-session-storage.d.ts +7 -5
  688. package/dist/stores-sql/pg-session-storage.js +54 -46
  689. package/dist/stores-sql/retention-store-sql.d.ts +87 -19
  690. package/dist/stores-sql/retention-store-sql.js +92 -27
  691. package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
  692. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  693. package/dist/stores-sql/session-write-hooks.d.ts +12 -6
  694. package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
  695. package/dist/stores-sql/tidb-session-storage.js +13 -8
  696. package/dist/stores-sql/tidb-session-store.d.ts +36 -17
  697. package/dist/stores-sql/tidb-session-store.js +69 -39
  698. package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
  699. package/dist/stores-sql/tool-result-store-sql.js +4 -6
  700. package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
  701. package/dist/stores-sql/windowed-session-storage.js +9 -0
  702. package/dist/submission-exit.d.ts +50 -0
  703. package/dist/submission-exit.js +108 -0
  704. package/dist/task-a2a.d.ts +3 -8
  705. package/dist/task-a2a.js +28 -30
  706. package/dist/task-cwd.d.ts +43 -7
  707. package/dist/task-cwd.js +11 -0
  708. package/dist/task-mcp.d.ts +3 -3
  709. package/dist/task-mcp.js +4 -4
  710. package/dist/task-settings.d.ts +14 -10
  711. package/dist/task-settings.js +19 -7
  712. package/dist/terminal.d.ts +27 -43
  713. package/dist/terminal.js +49 -14
  714. package/dist/tool-approval.d.ts +173 -163
  715. package/dist/tool-approval.js +247 -232
  716. package/dist/trace/core-keyset-guard.d.ts +13 -6
  717. package/dist/trace/core-vocab-wire.d.ts +95 -0
  718. package/dist/trace/core-vocab-wire.js +15 -0
  719. package/dist/trace/engine-notice-wire.d.ts +24 -21
  720. package/dist/trace/engine-notice-wire.js +7 -3
  721. package/dist/trace/exit-seat.d.ts +30 -4
  722. package/dist/trace/exit-seat.js +40 -36
  723. package/dist/trace/extension-call-face.d.ts +3 -2
  724. package/dist/trace/extension-call-face.js +3 -1
  725. package/dist/trace/ledger-events.d.ts +4 -7
  726. package/dist/trace/ledger-sink.d.ts +4 -31
  727. package/dist/trace/ledger-sink.js +0 -11
  728. package/dist/trace/model-segment.d.ts +5 -5
  729. package/dist/trace/model-segment.js +5 -5
  730. package/dist/trace/project.d.ts +59 -44
  731. package/dist/trace/project.js +60 -26
  732. package/dist/trace/redact.d.ts +135 -27
  733. package/dist/trace/redact.js +884 -260
  734. package/dist/trace/self-minted-wire.d.ts +567 -20
  735. package/dist/trace/self-minted-wire.js +205 -24
  736. package/dist/trace/wire-projection-faces.d.ts +5 -6
  737. package/dist/trace/wire-projection-faces.js +2 -2
  738. package/dist/upstream-body.d.ts +23 -0
  739. package/dist/upstream-body.js +16 -0
  740. package/dist/url-refusal.d.ts +3 -3
  741. package/dist/url-refusal.js +11 -4
  742. package/dist/user-authored-text.d.ts +1 -1
  743. package/dist/user-input-ledger.d.ts +7 -8
  744. package/dist/user-input-ledger.js +1 -1
  745. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  746. package/dist/web-admin-client/apply-effective.js +33 -23
  747. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  748. package/dist/web-admin-client/apply-ledger.js +5 -2
  749. package/dist/web-admin-client/center-request.d.ts +2 -2
  750. package/dist/web-admin-client/center-request.js +15 -15
  751. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  752. package/dist/web-admin-client/effective-keys.js +1 -1
  753. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  754. package/dist/web-admin-client/entry-metadata.js +13 -0
  755. package/dist/web-admin-client/http-client.d.ts +1 -1
  756. package/dist/web-admin-client/http-client.js +23 -4
  757. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  758. package/dist/web-admin-client/mcp-revocation.js +2 -1
  759. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  760. package/dist/web-admin-client/read-warnings.js +1 -0
  761. package/dist/web-admin-client/restart-signal.js +8 -4
  762. package/dist/web-admin-client/skills-mcp.d.ts +2 -2
  763. package/dist/web-admin-client/types.d.ts +1 -2
  764. package/dist/workspace-space.d.ts +3 -2
  765. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  766. package/docs/error-text-lexicon.json +317 -0
  767. package/package.json +8 -3
  768. package/scripts/drain-check-local.mjs +118 -147
  769. package/scripts/drain-check.mysql.sql +22 -2
  770. package/scripts/drain-check.pg.sql +22 -2
  771. package/scripts/embed-minimal.mjs +183 -0
  772. package/wire-changes/server@7.148.0.json +1517 -0
  773. package/wire-changes/server@7.149.0.json +372 -0
  774. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  775. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  776. package/dist/http/memory-layer-reply.d.ts +0 -30
  777. package/dist/http/memory-layer-reply.js +0 -24
  778. package/dist/lsp/e2b-bridge.d.ts +0 -57
  779. package/dist/lsp/e2b-bridge.js +0 -139
  780. package/dist/lsp/e2b-manager.d.ts +0 -93
  781. package/dist/lsp/e2b-manager.js +0 -178
  782. package/dist/lsp/lsp-frames.d.ts +0 -14
  783. package/dist/lsp/lsp-frames.js +0 -25
  784. package/dist/lsp/manager.d.ts +0 -129
  785. package/dist/lsp/manager.js +0 -127
  786. package/dist/lsp/types.d.ts +0 -12
  787. package/dist/lsp/types.js +0 -2
  788. package/dist/lsp/ws-transport.d.ts +0 -40
  789. package/dist/lsp/ws-transport.js +0 -210
  790. package/dist/plain-string-record.js +0 -70
@@ -1,45 +1,50 @@
1
1
  import { redactErrorMessage, redactHead, redactTerminalResult } from "../../observability/run-terminal.js";
2
2
  import { runWithVerification, runCascade, taskNotificationDedupKey, uuidv7 } from "@sema-agent/core";
3
3
  import { heldFor } from "../../peer-seat.js";
4
- import { graftParkToolCallId, markChildrenStoppedByUserOnAbort, syncRefusalHttpStatus, zeroWorkRefusalFacts, releaseKeyIfZeroWorkRefusal, createPromptCommitReader, settleResumeAnchor, HEARTBEAT_MS } from "../../runs.js";
5
- import { atHostBoundary, sealResultForExit, outwardPlane } from "../../terminal.js";
4
+ import { beatRunHeartbeat, graftParkToolCallId, heldParkOf, markChildrenStoppedByUserOnAbort, syncRefusalHttpStatus, zeroWorkRefusalFacts, releaseKeyIfZeroWorkRefusal, createPromptCommitReader, settleResumeAnchor, TurnAnchorCapture, HEARTBEAT_MS } from "../../runs.js";
5
+ import { commitParkRow } from "../../park-row-commit.js";
6
+ import { atHostBoundary, failureCodeOf, sealResultForExit, outwardPlane } from "../../terminal.js";
6
7
  import { voidVerifierPauseCard } from "../../verifier-pause-card.js";
7
- import { withPrincipal } from "../../observability/principal-context.js";
8
+ import { withSubject } from "../../observability/principal-context.js";
8
9
  import { fleetRunPublisher, fleetRunLabels, fleetRunResiduals, nameFleetRowOnDelivery } from "../../fleet/fleet-bus.js";
9
10
  import { defaultSubagentTailBus } from "../../fleet/subagent-tail-bus.js";
10
11
  import { createLiveModelText, modelStreamOfTask } from "../../trace/model-segment.js";
11
12
  import { emitPendingWorkflowCompletions, taskNotificationInboxEntry, taskNotificationStreamKeyOf, NotifiedKeys } from "../../orchestration/workflow-completion-inbox.js";
12
- import { createForwardAppendFailedNote, createLedgerSink, createLedgerTwinEmit } from "../../trace/ledger-sink.js";
13
+ import { createForwardAppendFailedNote, createLedgerSink } from "../../trace/ledger-sink.js";
14
+ import { createHitlTransport } from "../../hitl-delivery.js";
13
15
  import { registerEngineNoticeLeg } from "../../trace/engine-notice-wire.js";
14
16
  import { clearTurnActivity, readTurnActivityMs, recordTurnActivity } from "../../turn-activity.js";
15
17
  import { buildCancelledLedgerRow, createRunAbort, mintCancelledResult } from "../../run-cancel-context.js";
16
18
  import { recordResourceWindow } from "../../resource-window.js";
17
19
  import { redactSecrets } from "../../trace/redact.js";
18
20
  import { writeLiveFrame, writeLiveHeartbeat } from "../live-frame.js";
19
- import { contextUsageEventData, turnEndEventData, toolStartEventData, toolEndEventData, taskProgressEventData, taskStartedEventData, taskNotificationEventData, compactedEventData, diagnosticsEventData, brainStatusEventData, steeringInjectedEventData, compactionOutcomeEventData, compactionStartedEventData, workspaceChangedEventData, wiringManifestFaceEventData, toolRosterDeltaEventData, toolProgressEventData, toolDisclosureEventData, humanInputEventData, appendModelUsageDelta, attachModelUsage, createPromptManifestSeat, liveIdentityFields } from "../../trace/project.js";
21
+ import { contextUsageEventData, turnEndEventData, toolStartEventData, toolEndEventData, taskProgressEventData, taskStartedEventData, taskNotificationEventData, compactedEventData, diagnosticsEventData, brainStatusEventData, steeringInjectedEventData, compactionOutcomeEventData, compactionStartedEventData, workspaceChangedEventData, wiringManifestFaceEventData, toolRosterDeltaEventData, toolProgressEventData, toolDisclosureEventData, humanInputEventData, appendModelUsageDelta, attachModelUsage, createPromptManifestSeat, identityFields } from "../../trace/project.js";
20
22
  import { cascadeConfig, fillRunPreviewOnDelivery, runMeta } from "../run-meta.js";
21
23
  import { idemCallerOf, inflightKeyOf, submissionIdemOf } from "../idempotency.js";
22
- import { replayOfExistingRun } from "../submit-replay.js";
23
- import { httpErrorCode, sendJson, sendError, sseHeaders } from "../send.js";
24
+ import { isReplayedOutcome, replayedOutcome, replayOfExistingRun } from "../submit-replay.js";
25
+ import { httpErrorCode, sendJson, sseHeaders } from "../send.js";
24
26
  import { collectSsePreamble } from "../sse-log.js";
25
27
  import { buildApprovalPreamble } from "../../approval-card.js";
26
- import { approvalPreambleReplays, createApprovalCardEmitter, declaredApprovalFrameFamilies, resolveApprovalLeg, resolveStreamApprovalGate } from "../../tool-approval.js";
28
+ import { approvalLegOriginOf } from "../../approval-leg-origin.js";
29
+ import { approvalPreambleReplays, declaredApprovalFrameFamilies, resolveApprovalLeg, resolveStreamApprovalGate } from "../../tool-approval.js";
27
30
  import { buildActiveRunConflict, isActiveRunConflictBody, toDoneFrameResult } from "../active-run-conflict.js";
28
- import { commitExecutionContext } from "../execution-context.js";
31
+ import { SUBMISSION_CLAIM_FACE, commitExecutionContext, faultedAnswerOf } from "../execution-context.js";
29
32
  import { rootSessionAbsentAnswer } from "../execution-context.js";
33
+ import { recheckClaimBeforeLaunch, startClaimHeartbeat } from "../claim-heartbeat.js";
30
34
  import { timeClaim } from "../claim-latency.js";
31
35
  import { commitSessionInheritEnv } from "../session-inherit-env.js";
32
- import { headerStr, gatedPrincipal, explicitOperatorOk, runIdentityOf } from "../principal-gate.js";
33
- import { failOpenTagForDroppedFrame, recordFailOpen } from "../../observability/fail-open.js";
34
- import { buildSyncSubmitBody } from "../sync-submit-body.js";
36
+ import { headerStr, gatedPerson, gatedSubject, explicitOperatorOk, runIdentityOf } from "../principal-gate.js";
37
+ import { recoveredSubject } from "../../owner-faces.js";
38
+ import { recordFailOpen } from "../../observability/fail-open.js";
39
+ import { buildSyncSubmitBody, syncSubmitBodyOfRow } from "../sync-submit-body.js";
35
40
  import { assertNever } from "../route-ctx.js";
36
41
  import * as facts from "../../capability-facts.js";
37
- import { persistSubmissionCtx } from "../submit-ctx.js";
42
+ import { persistSubmissionCtx, SUBMIT_CTX_CLAIM_LOST } from "../submit-ctx.js";
38
43
  import { withModelReachScope } from "../../model-reach-scope.js";
39
44
  import { createInstructionSelectionLeg } from "../../instruction-selection.js";
40
- import { fieldConflictFacts } from "../../field-conflict.js";
41
45
  import { refusalBody } from "../refusal-body.js";
42
46
  import { heldWorkflowParkDecisions } from "../../parked-decide.js";
47
+ import { compositionLegRoot } from "../../task-cwd.js";
43
48
  import { createSessionWorkspaceRecorder, sessionWorkspaceStoreOf } from "../../session-workspace.js";
44
49
  const DISCONNECT_PARK_GRACE_MS = 10_000;
45
50
  async function mintSubmitExitResult(result, checkpoints) {
@@ -70,8 +75,8 @@ function refusalDoneResult(body) {
70
75
  const b = body;
71
76
  return { status: "failed", errorCode: String(b.errorCode), errorMessage: String(b.error) };
72
77
  }
73
- function doneResultOfOutcome(resp) {
74
- return resp.status === 200 ? resp.body : refusalDoneResult(resp.body);
78
+ function doneFrameOfOutcome(resp) {
79
+ return { type: "done", result: resp.status === 200 ? resp.body : refusalDoneResult(resp.body), ...(isReplayedOutcome(resp) ? { replay: true } : {}) };
75
80
  }
76
81
  const MULTI_ATTEMPT_NO_EVENT_CHANNEL_NOTICE = "verify / cascade ran with their normal multi-attempt semantics, but the synchronous /v1/tasks endpoint has no event channel — no status/progress frames exist to replay on this shape. For status / progress / delegated-child frames and the terminal done, submit via POST /v1/runs and read GET /v1/runs/:id/events; note that verify / cascade legs carry no per-turn stream there either (no wiring_manifest / text / turn_end frames — the engine runs those legs as result-returning attempts).";
77
82
  export async function handleTasks(req, res, match, ctx) {
@@ -99,18 +104,18 @@ export async function handleTasks(req, res, match, ctx) {
99
104
  const liveStream = match.decl.id === "tasks-submit-stream";
100
105
  {
101
106
  const rawIdem = headerStr(req.headers["idempotency-key"]);
102
- const submitter = gatedPrincipal(req, deps.config);
107
+ const submitter = gatedSubject(req, deps.config);
103
108
  const keyedBody = rawIdem ? await readJson(req) : undefined;
104
109
  const idem = rawIdem ? submissionIdemOf(rawIdem, idemCallerOf(req, ctx), keyedBody) : undefined;
105
110
  const inflightKey = idem ? inflightKeyOf(idem, "sync") : undefined;
106
111
  const cached = inflightKey ? idemCache.peek(inflightKey) : undefined;
107
112
  const keyedRow = idem && !cached && deps.runStore ? await deps.runStore.getRunByIdem(idem.key) : undefined;
108
113
  if (keyedRow && deps.runStore) {
109
- const replay = await replayOfExistingRun(keyedRow, { principal: submitter, idem }, "sync", deps, deps.runStore);
114
+ const replay = await replayOfExistingRun(keyedRow, { subject: submitter, idem }, "sync", deps, deps.runStore);
110
115
  if (liveStream && replay.status === 200) {
111
116
  sseHeaders(res, { "x-task-id": keyedRow.taskId });
112
117
  writeMetaFrame(res, keyedRow.taskId, keyedRow.sessionId);
113
- writeLiveFrame(res, { type: "done", result: replay.body, replay: true });
118
+ writeLiveFrame(res, doneFrameOfOutcome(replay));
114
119
  res.end();
115
120
  }
116
121
  else {
@@ -128,9 +133,9 @@ export async function handleTasks(req, res, match, ctx) {
128
133
  hb.unref?.();
129
134
  res.on("close", () => clearInterval(hb));
130
135
  try {
131
- const resp = await cached;
136
+ const resp = replayedOutcome(await cached);
132
137
  if (!res.writableEnded)
133
- writeLiveFrame(res, { type: "done", result: doneResultOfOutcome(resp), replay: true });
138
+ writeLiveFrame(res, doneFrameOfOutcome(resp));
134
139
  }
135
140
  finally {
136
141
  clearInterval(hb);
@@ -138,7 +143,7 @@ export async function handleTasks(req, res, match, ctx) {
138
143
  res.end();
139
144
  }
140
145
  else {
141
- const resp = await cached;
146
+ const resp = replayedOutcome(await cached);
142
147
  sendSubmitResult(res, resp);
143
148
  }
144
149
  return;
@@ -150,7 +155,7 @@ export async function handleTasks(req, res, match, ctx) {
150
155
  if (!prepared)
151
156
  return;
152
157
  try {
153
- runSlot = admitRun(req, res);
158
+ runSlot = await admitRun(req, res, prepared.seat);
154
159
  if (runSlot === undefined)
155
160
  return;
156
161
  const declaredFamilies = declaredApprovalFrameFamilies(prepared.body.settings);
@@ -165,32 +170,32 @@ export async function handleTasks(req, res, match, ctx) {
165
170
  };
166
171
  };
167
172
  const assembleApprovalLeg = (streamApprovalOn) => resolveApprovalLeg({ ...approvalLegInput(streamApprovalOn), nowMonotonicMs: performance.now() });
168
- const principal = prepared.auth?.principal;
169
- const wiringOperatorFace = explicitOperatorOk(gatedPrincipal(req, deps.config), deps.config);
173
+ const principal = prepared.auth?.subject;
174
+ const wiringOperatorFace = explicitOperatorOk(gatedPerson(req, deps.config), deps.config);
170
175
  let wiringReceipt;
171
176
  const instructionLeg = createInstructionSelectionLeg();
172
177
  const legWiringSections = () => ({ instructions: instructionLeg.segment(), skills: prepared.legFacts?.skills });
173
178
  const withRunReceipt = (out) => wiringReceipt !== undefined ? { ...out, wiringManifest: wiringReceipt } : out;
174
179
  if (liveStream) {
175
- if (prepared.verify || prepared.cascade) {
176
- sendError(res, 400, "request.field_conflict", "verify / cascade are not supported on /v1/tasks/stream (both are multi-attempt, not a single stream) — use /v1/tasks or /v1/runs", fieldConflictFacts("cascade_verify", prepared.verify ? (prepared.cascade ? ["verify", "cascade"] : ["verify"]) : ["cascade"]));
177
- return;
178
- }
179
180
  const earlyDurableTid = facts.durableRuns(deps).available ? uuidv7() : undefined;
180
181
  const streamLegStartedAt = Date.now();
181
182
  const detachOnDisconnect = headerStr(req.headers["x-detach-on-disconnect"]) === "true";
182
- if (detachOnDisconnect && earlyDurableTid === undefined) {
183
- sendError(res, 400, "request.precondition_unmet", "x-detach-on-disconnect requires a durable run (a run store + sessionId) — without one the detached result would be unqueryable");
184
- return;
185
- }
186
183
  reqState.streamTaskId = earlyDurableTid;
187
184
  let usageKey;
188
185
  let manifestSeat;
189
186
  reqState.streamDetached = detachOnDisconnect;
187
+ let heldTerminal;
188
+ const writeTerminalFrame = (frame) => {
189
+ if (heldTerminal === undefined && prepared.seat.keepsWithoutWithdraw)
190
+ writeLiveFrame(res, frame);
191
+ else
192
+ heldTerminal = frame;
193
+ };
194
+ let stopClaimHeartbeat;
190
195
  sseHeaders(res, earlyDurableTid ? { "x-task-id": earlyDurableTid } : undefined);
191
196
  if (earlyDurableTid)
192
197
  writeMetaFrame(res, earlyDurableTid, prepared.spec.sessionId, prepared.warnings);
193
- const ac = createRunAbort(prepared.auth?.principal ?? null);
198
+ const ac = createRunAbort(prepared.auth?.subject ?? null);
194
199
  let closed = false;
195
200
  let detachLogged = false;
196
201
  let disconnectParkGrace;
@@ -235,18 +240,9 @@ export async function handleTasks(req, res, match, ctx) {
235
240
  checkpointStore: deps.checkpointStore,
236
241
  });
237
242
  const replaySessionId = approvalPreambleReplays(approvalLegInput(replayGate.active)) ? prepared.spec.sessionId : undefined;
238
- const presentedOnConnection = new Set();
239
- const presentedCompleted = new Set();
240
- const admitPresentedComplete = (askId) => {
241
- if (!presentedOnConnection.has(askId))
242
- return true;
243
- if (presentedCompleted.has(askId))
244
- return false;
245
- presentedCompleted.add(askId);
246
- return true;
247
- };
243
+ let connectionTransport;
248
244
  if (replaySessionId) {
249
- const replayOwner = gatedPrincipal(req, deps.config) ?? null;
245
+ const replayOwner = gatedSubject(req, deps.config) ?? null;
250
246
  const askStore = replayGate.active ? replayGate.askStore : undefined;
251
247
  let presentedAskIds = [];
252
248
  const preambleFrames = await collectSsePreamble(async (signal) => {
@@ -265,13 +261,11 @@ export async function handleTasks(req, res, match, ctx) {
265
261
  for (const f of preambleFrames)
266
262
  writeLiveFrame(res, { ...f });
267
263
  if (deps.toolApproval && preambleFrames.length > 0) {
268
- for (const askId of presentedAskIds)
269
- presentedOnConnection.add(askId);
270
264
  const unwatch = deps.toolApproval.watchPresentedCards(presentedAskIds, (frame) => {
271
- if (res.writableEnded || res.destroyed || !admitPresentedComplete(frame.askId))
265
+ if (res.writableEnded || res.destroyed)
272
266
  return;
273
267
  writeLiveFrame(res, { ...frame });
274
- });
268
+ }, () => connectionTransport);
275
269
  res.once("close", unwatch);
276
270
  }
277
271
  }
@@ -286,8 +280,14 @@ export async function handleTasks(req, res, match, ctx) {
286
280
  const runStreamSubmitLeg = async () => {
287
281
  ranLive = true;
288
282
  let finalResult;
283
+ let heldCard;
284
+ const commitSyncPark = (runStore, runId, word, parkResult, cardToken) => commitParkRow({
285
+ runStore, taskId: runId, word, result: parkResult, card: { token: cardToken, sessionId: prepared.spec.sessionId }, cards: deps.checkpointStore, leg: "sync",
286
+ legId: heldLegOf(durableLegId, runId), staleWindowMs: deps.config.runStaleSec * 1000,
287
+ });
289
288
  let runRowSettled = false;
290
289
  let durableTaskId;
290
+ let durableLegId;
291
291
  let durableHeartbeat;
292
292
  const cancelledResult = (errorMessage, cause) => mintCancelledResult({ taskId: durableTaskId ?? "", sessionId: prepared.spec.sessionId, startedAtMs: streamLegStartedAt, message: errorMessage, cause });
293
293
  let userMsgEntryId;
@@ -302,46 +302,63 @@ export async function handleTasks(req, res, match, ctx) {
302
302
  anchorPut = true;
303
303
  await settleResumeAnchor(() => store.put(prepared.spec.sessionId, key, entryId, principal ?? null), { leg: "stream", kind: "prompt" });
304
304
  };
305
- if (deps.runStore) {
306
- const tid = earlyDurableTid ?? uuidv7();
307
- const created = await timeClaim(deps.metrics, "run_claim", deps.runStore.createRun(tid, prepared.spec.sessionId, principal ?? null, deps.instanceId ?? "default", { ...runMeta(prepared, source), identity: runIdentityOf(req, deps.config, principal ?? null), idem: idem ?? null }));
308
- if (created.ok)
309
- clearTurnActivity(tid);
310
- if (created.ok)
311
- recordResourceWindow(tid, prepared.spec.resourceSuspend);
312
- if (created.existing) {
313
- const replay = await replayOfExistingRun(created.existing, { principal: submitter, idem }, "sync", deps, deps.runStore);
314
- writeLiveFrame(res, { type: "done", result: doneResultOfOutcome(replay), replay: true });
315
- return replay;
316
- }
317
- if (created.sessionAbsent) {
318
- const refused = rootSessionAbsentAnswer();
319
- writeLiveFrame(res, { type: "done", result: doneResultOfOutcome(refused) });
320
- return refused;
305
+ try {
306
+ if (deps.runStore) {
307
+ const tid = earlyDurableTid ?? uuidv7();
308
+ const created = await timeClaim(deps.metrics, "run_claim", deps.runStore.createRun(tid, prepared.spec.sessionId, principal ?? null, deps.instanceId ?? "default", { ...runMeta(prepared, source), identity: runIdentityOf(req, deps.config, principal ?? null), idem: idem ?? null }));
309
+ if (created.ok)
310
+ clearTurnActivity(tid);
311
+ if (created.ok)
312
+ recordResourceWindow(tid, prepared.spec.resourceSuspend);
313
+ if (created.existing) {
314
+ const replay = await replayOfExistingRun(created.existing, { subject: submitter, idem }, "sync", deps, deps.runStore);
315
+ writeTerminalFrame(doneFrameOfOutcome(replay));
316
+ return replay;
317
+ }
318
+ if (created.sessionAbsent) {
319
+ const refused = rootSessionAbsentAnswer();
320
+ writeTerminalFrame(doneFrameOfOutcome(refused));
321
+ return refused;
322
+ }
323
+ if (!created.ok) {
324
+ const conflict = await buildActiveRunConflict({ runStore: deps.runStore, checkpointStore: deps.checkpointStore, governance: deps.config, turnActivity: readTurnActivityMs }, prepared.spec.sessionId, created.activeTaskId);
325
+ const refused = { status: 409, body: conflict };
326
+ writeTerminalFrame(doneFrameOfOutcome(refused));
327
+ return refused;
328
+ }
329
+ prepared.seat.noteOwnRun(tid);
330
+ stopClaimHeartbeat = startClaimHeartbeat(deps.runStore, tid, principal ?? null, deps.metrics);
331
+ const placementReject = await commitExecutionContext(deps, { kind: "run", runStore: deps.runStore, taskId: tid, legId: created.legId }, prepared.execution);
332
+ if (placementReject) {
333
+ writeTerminalFrame(doneFrameOfOutcome(placementReject));
334
+ return placementReject;
335
+ }
336
+ durableTaskId = tid;
337
+ durableLegId = created.legId;
338
+ fillRunPreviewOnDelivery(prepared.acceptance, deps.runStore, tid);
321
339
  }
322
- if (!created.ok) {
323
- const conflict = await buildActiveRunConflict({ runStore: deps.runStore, checkpointStore: deps.checkpointStore, governance: deps.config, runStaleSec: deps.config.runStaleSec, turnActivity: readTurnActivityMs }, prepared.spec.sessionId, created.activeTaskId);
324
- const refused = { status: 409, body: conflict };
325
- writeLiveFrame(res, { type: "done", result: doneResultOfOutcome(refused) });
326
- return refused;
340
+ if (deps.checkpointStore) {
341
+ const ctxRefusal = await persistSubmissionCtx(deps.checkpointStore, deps, durableTaskId !== undefined && deps.runStore ? { runStore: deps.runStore, taskId: durableTaskId, legId: heldLegOf(durableLegId, durableTaskId) } : undefined, prepared);
342
+ if (ctxRefusal !== undefined && ctxRefusal !== SUBMIT_CTX_CLAIM_LOST) {
343
+ writeTerminalFrame(doneFrameOfOutcome(ctxRefusal));
344
+ return ctxRefusal;
345
+ }
327
346
  }
328
- const placementReject = await commitExecutionContext(deps, { kind: "run", runStore: deps.runStore, taskId: tid }, prepared.execution);
329
- if (placementReject) {
330
- writeLiveFrame(res, { type: "done", result: doneResultOfOutcome(placementReject) });
331
- return placementReject;
347
+ const lostClaim = durableTaskId !== undefined && deps.runStore ? await recheckClaimBeforeLaunch(deps, deps.runStore, prepared.spec.sessionId, durableTaskId, heldLegOf(durableLegId, durableTaskId)) : undefined;
348
+ if (lostClaim !== undefined) {
349
+ writeTerminalFrame(doneFrameOfOutcome(lostClaim));
350
+ return lostClaim;
332
351
  }
333
- durableTaskId = tid;
334
- fillRunPreviewOnDelivery(prepared.acceptance, deps.runStore, tid);
352
+ if (durableTaskId !== undefined && detachOnDisconnect)
353
+ prepared.seat.markRecord();
335
354
  }
336
- if (deps.checkpointStore) {
337
- const ctxRefusal = await persistSubmissionCtx(deps.checkpointStore, deps, durableTaskId !== undefined && deps.runStore ? { runStore: deps.runStore, taskId: durableTaskId } : undefined, prepared);
338
- if (ctxRefusal) {
339
- writeLiveFrame(res, { type: "done", result: doneResultOfOutcome(ctxRefusal) });
340
- return ctxRefusal;
341
- }
355
+ catch (e) {
356
+ const claimFault = faultedAnswerOf(e, SUBMISSION_CLAIM_FACE.faulted);
357
+ writeTerminalFrame(doneFrameOfOutcome(claimFault));
358
+ return claimFault;
342
359
  }
343
360
  commitSessionInheritEnv(deps, prepared.spec.sessionId, prepared.body);
344
- markChildrenStoppedByUserOnAbort(ac.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.principal);
361
+ markChildrenStoppedByUserOnAbort(ac.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.subject);
345
362
  let ledgerSink;
346
363
  let ledgerTerminal = false;
347
364
  if (durableTaskId && deps.runStore) {
@@ -353,8 +370,9 @@ export async function handleTasks(req, res, match, ctx) {
353
370
  manifestSeat = createPromptManifestSeat(deps.promptManifests, tid);
354
371
  const owner = principal ?? null;
355
372
  const abortFromVerb = () => ac.abort("cancel_verb");
373
+ stopClaimHeartbeat?.();
356
374
  durableHeartbeat = setInterval(() => {
357
- void rs.heartbeat(tid, owner).catch(() => undefined);
375
+ beatRunHeartbeat(rs, tid, owner, () => ac.abort("stall_verdict"), () => undefined);
358
376
  if (!ac.signal.aborted) {
359
377
  void Promise.resolve(rs.isCancelRequested?.(tid, owner)).then((c) => { if (c)
360
378
  abortFromVerb(); }).catch(() => undefined);
@@ -369,7 +387,7 @@ export async function handleTasks(req, res, match, ctx) {
369
387
  let fleetPub;
370
388
  try {
371
389
  fleetPub = durableTaskId
372
- ? fleetRunPublisher(deps.fleetBus, { runId: durableTaskId, scope: gatedPrincipal(req, deps.config) ?? "default", rootTaskId: durableTaskId, sessionId: prepared.spec.sessionId, ...fleetRunLabels(prepared.acceptance.objectiveAtSubmit) })
390
+ ? fleetRunPublisher(deps.fleetBus, { runId: durableTaskId, scope: gatedSubject(req, deps.config) ?? "default", rootTaskId: durableTaskId, sessionId: prepared.spec.sessionId, ...fleetRunLabels(prepared.acceptance.objectiveAtSubmit) })
373
391
  : undefined;
374
392
  if (fleetPub)
375
393
  nameFleetRowOnDelivery(prepared.acceptance, fleetPub);
@@ -406,11 +424,12 @@ export async function handleTasks(req, res, match, ctx) {
406
424
  const noticeLedger = ledgerSink;
407
425
  const unregisterEngineNotice = registerEngineNoticeLeg({
408
426
  sessionId: prepared.spec.sessionId,
427
+ ...(durableTaskId !== undefined ? { taskId: durableTaskId } : {}),
409
428
  ...(prepared.engineNotices !== undefined ? { pending: prepared.engineNotices } : {}),
410
429
  live: (row) => {
411
430
  if (res.writableEnded || res.destroyed) {
412
431
  if (noticeLedger === undefined)
413
- recordFailOpen(failOpenTagForDroppedFrame("engine_notice"), "frame=engine_notice");
432
+ recordFailOpen("server.stream.frame-dropped-stream-closed", "frame=engine_notice");
414
433
  return;
415
434
  }
416
435
  writeLiveFrame(res, { type: "engine_notice", ...row });
@@ -425,7 +444,7 @@ export async function handleTasks(req, res, match, ctx) {
425
444
  await deps.userInputLedger.announceUndrained({ sessionId: prepared.spec.sessionId, taskId: durableTaskId });
426
445
  try {
427
446
  const streamBody = async () => {
428
- await withPrincipal(principal, async () => {
447
+ await withSubject(recoveredSubject(principal), async () => {
429
448
  const tailContentMode = prepared.spec.forwardSubagentEvents === true ? "on" : "progress_only";
430
449
  const childText = createLiveModelText();
431
450
  const topText = createLiveModelText();
@@ -510,10 +529,13 @@ export async function handleTasks(req, res, match, ctx) {
510
529
  const causeAtDone = ev.type === "done" ? ac.cause() : undefined;
511
530
  await deps.userInputLedger?.observeLegEvent(liveStream, ev);
512
531
  await prepared.acceptance.observe(ev);
532
+ if (ev.type === "done")
533
+ prepared.acceptance.settle(ev.result);
513
534
  await liveWorkspace.observe(ev);
514
535
  if (ledgerSink)
515
536
  await manifestSeat?.drain(ledgerSink.append);
516
537
  if (ev.type === "done") {
538
+ heldCard = heldParkOf(ev.result);
517
539
  finalResult = await mintSubmitExitResult(ev.result, deps.checkpointStore);
518
540
  if (durableTaskId && finalResult)
519
541
  finalResult = { ...finalResult, taskId: durableTaskId };
@@ -523,7 +545,8 @@ export async function handleTasks(req, res, match, ctx) {
523
545
  finalizeTaskResult(ev.result, principal, prepared.spec.objective);
524
546
  noteRunOutcome(finalResult);
525
547
  await putRewindAnchor();
526
- settleFleet(outwardPlane(finalResult.terminal).status, fleetRunResiduals(finalResult));
548
+ if (!(durableTaskId && deps.runStore && deps.checkpointStore && heldCard !== undefined))
549
+ settleFleet(outwardPlane(finalResult.terminal).status, fleetRunResiduals(finalResult, failureCodeOf(finalResult.terminal)));
527
550
  if (ledgerSink && finalResult) {
528
551
  if (usageKey && deps.modelUsage && deps.runStore && durableTaskId) {
529
552
  const rs2 = deps.runStore;
@@ -534,7 +557,7 @@ export async function handleTasks(req, res, match, ctx) {
534
557
  await ledgerSink.onDone(finalResult);
535
558
  ledgerTerminal = true;
536
559
  }
537
- writeLiveFrame(res, { ...ev, result: finalResult });
560
+ writeTerminalFrame({ ...ev, result: finalResult });
538
561
  continue;
539
562
  }
540
563
  if (ledgerSink) {
@@ -617,12 +640,11 @@ export async function handleTasks(req, res, match, ctx) {
617
640
  }
618
641
  else if (ev.type === "turn_end" || ev.type === "message_committed" || ev.type === "context_usage") {
619
642
  const e = ev;
620
- const ident = liveIdentityFields(e);
621
643
  const arm = ev.type === "turn_end"
622
- ? { type: "turn_end", ...turnEndEventData(ev), ...ident }
644
+ ? { type: "turn_end", ...turnEndEventData(ev) }
623
645
  : ev.type === "message_committed"
624
- ? { type: "message_committed", entryId: e.entryId, role: e.role, ...(e.toolCallId !== undefined ? { toolCallId: e.toolCallId } : {}), ...ident }
625
- : { type: "context_usage", ...contextUsageEventData(ev), ...ident };
646
+ ? { type: "message_committed", entryId: e.entryId, role: e.role, ...(e.toolCallId !== undefined ? { toolCallId: e.toolCallId } : {}), ...identityFields(e) }
647
+ : { type: "context_usage", ...contextUsageEventData(ev) };
626
648
  writeLiveFrame(res, arm);
627
649
  }
628
650
  else {
@@ -633,22 +655,20 @@ export async function handleTasks(req, res, match, ctx) {
633
655
  });
634
656
  };
635
657
  const askTaskId = durableTaskId ?? uuidv7();
636
- const askOwner = gatedPrincipal(req, deps.config) ?? null;
658
+ const askOwner = gatedSubject(req, deps.config) ?? null;
637
659
  const emitAsk = (frame) => {
638
660
  if (res.writableEnded || res.destroyed) {
639
- recordFailOpen(failOpenTagForDroppedFrame(frame.type), `frame=${frame.type}`);
661
+ recordFailOpen("server.stream.frame-dropped-stream-closed", `frame=${frame.type}`);
640
662
  return;
641
663
  }
642
664
  writeLiveFrame(res, { ...frame });
643
665
  };
644
666
  const faceAlive = () => !res.writableEnded && !res.destroyed;
645
- const emitElicitation = createLedgerTwinEmit({ sink: ledgerSink, writeLive: emitAsk, liveReachable: faceAlive });
646
- const writeQuestionLive = (frame) => {
647
- if (!faceAlive())
648
- throw new Error("live stream ended — question frame undeliverable");
649
- emitAsk(frame);
650
- };
651
- const emitQuestion = createLedgerTwinEmit({ sink: ledgerSink, writeLive: writeQuestionLive, liveReachable: faceAlive });
667
+ const hitlTransport = createHitlTransport({
668
+ ...(ledgerSink ? { ledger: ledgerSink.append } : {}),
669
+ live: { write: (frame) => writeLiveFrame(res, { ...frame }), alive: faceAlive },
670
+ });
671
+ connectionTransport = hitlTransport;
652
672
  await emitPendingWorkflowCompletions(deps.workflowCompletionInbox, prepared.spec.sessionId, askOwner, (frame) => {
653
673
  if (closed || res.writableEnded || res.destroyed)
654
674
  throw new Error("stream ended before the completion frame was written");
@@ -659,16 +679,11 @@ export async function handleTasks(req, res, match, ctx) {
659
679
  writeLiveFrame(res, frame);
660
680
  }, { route: "sync-stream-open", connection: "live-sse", log: (m, x) => deps.logger?.info?.(m, x) });
661
681
  const withElicit = deps.elicitation
662
- ? () => deps.elicitation.runWithContext({ taskId: askTaskId, owner: askOwner, emit: emitElicitation, abortSignal: ac.signal }, streamBody)
682
+ ? () => deps.elicitation.runWithContext({ taskId: askTaskId, owner: askOwner, transport: hitlTransport, abortSignal: ac.signal }, streamBody)
663
683
  : streamBody;
664
684
  const withQuestion = () => deps.question
665
- ? deps.question.runWithContext({ taskId: askTaskId, owner: askOwner, emit: emitQuestion, abortSignal: ac.signal, deliverable: faceAlive }, withElicit)
685
+ ? deps.question.runWithContext({ taskId: askTaskId, owner: askOwner, transport: hitlTransport, abortSignal: ac.signal }, withElicit)
666
686
  : withElicit();
667
- const emitApproval = (frame) => {
668
- if (res.writableEnded || res.destroyed)
669
- throw new Error("live stream ended — approval card undeliverable");
670
- emitAsk(frame);
671
- };
672
687
  const streamApprovalOn = resolveStreamApprovalGate({
673
688
  toolApprovalEnabled: Boolean(deps.toolApproval),
674
689
  streamApprovalEnabled: deps.config.streamApproval?.enabled === true,
@@ -678,53 +693,32 @@ export async function handleTasks(req, res, match, ctx) {
678
693
  const approvalLeg = assembleApprovalLeg(streamApprovalOn);
679
694
  const legDeadlineMonotonic = approvalLeg.legDeadlineMonotonic;
680
695
  const unattended = approvalLeg.unattended;
681
- const emitCard = createApprovalCardEmitter({
682
- ...(ledgerSink
683
- ? {
684
- appendDurable: async (frame) => {
685
- const { type, ...rest } = frame;
686
- await ledgerSink.append(type, rest);
687
- },
688
- }
689
- : {}),
690
- writeLive: (frame) => {
691
- if (res.writableEnded || res.destroyed)
692
- throw new Error("live stream ended");
693
- if (frame.type === "approval_complete" && !admitPresentedComplete(frame.askId))
694
- return;
695
- emitAsk(frame);
696
- },
697
- });
698
- const emitRevokeLive = (frame) => {
699
- if (!res.writableEnded && !res.destroyed)
700
- emitAsk(frame);
701
- };
702
696
  const approvalCtx = deps.toolApproval && unattended === undefined
703
697
  ? {
704
698
  taskId: askTaskId,
705
699
  owner: askOwner,
706
700
  abortSignal: ac.signal,
707
701
  sessionId: prepared.spec.sessionId,
708
- executionLane: prepared.execution.lane,
702
+ ...approvalLegOriginOf(prepared.execution),
709
703
  ...(streamApprovalOn
710
704
  ? {
711
- emitCard,
712
- emitRevoke: emitRevokeLive,
705
+ family: "approval_request",
706
+ transport: hitlTransport,
713
707
  legKey: "",
714
708
  ...(legDeadlineMonotonic !== undefined ? { legDeadlineMonotonic } : {}),
715
709
  }
716
- : { emit: emitApproval }),
710
+ : { family: "tool_approval", transport: hitlTransport }),
717
711
  }
718
712
  : undefined;
719
713
  if (deps.toolApproval) {
720
714
  const toolApproval = deps.toolApproval;
721
715
  prepared.spec.onAsk = unattended
722
- ? toolApproval.boundUnattendedAsk({ owner: askOwner, taskId: askTaskId, sessionId: prepared.spec.sessionId, executionLane: prepared.execution.lane }, unattended)
716
+ ? toolApproval.boundUnattendedAsk({ owner: askOwner, taskId: askTaskId, sessionId: prepared.spec.sessionId, ...approvalLegOriginOf(prepared.execution) }, unattended)
723
717
  : toolApproval.boundAsk({
724
718
  owner: askOwner,
725
719
  taskId: askTaskId,
726
720
  sessionId: prepared.spec.sessionId,
727
- executionLane: prepared.execution.lane,
721
+ ...approvalLegOriginOf(prepared.execution),
728
722
  ...(streamApprovalOn ? { legKey: "", ...(legDeadlineMonotonic !== undefined ? { legDeadlineMonotonic } : {}) } : {}),
729
723
  });
730
724
  }
@@ -744,17 +738,17 @@ export async function handleTasks(req, res, match, ctx) {
744
738
  : withApproval()));
745
739
  if (durableTaskId && deps.runStore) {
746
740
  const finalPlane = finalResult ? outwardPlane(finalResult.terminal) : undefined;
747
- if (finalResult && finalPlane?.status === "suspended" && deps.checkpointStore)
748
- await deps.runStore.setSuspended(durableTaskId, finalResult);
749
- else if (finalResult && finalPlane?.status === "needs_review" && deps.checkpointStore)
750
- await deps.runStore.setNeedsReview(durableTaskId, finalResult);
741
+ if (finalResult && heldCard !== undefined && deps.checkpointStore) {
742
+ const parked = await commitSyncPark(deps.runStore, durableTaskId, heldCard.word, finalResult, heldCard.token);
743
+ settleFleet(parked.kind === "ended" ? "failed" : outwardPlane(finalResult.terminal).status, fleetRunResiduals(finalResult, failureCodeOf(finalResult.terminal)));
744
+ }
751
745
  else if (finalResult && finalPlane) {
752
746
  await deps.runStore.setTerminal(durableTaskId, finalPlane.status, finalResult, finalPlane.errorMessage ?? null);
753
747
  await releaseKeyIfZeroWorkRefusal(deps.runStore, durableTaskId, finalResult);
754
748
  }
755
749
  else {
756
750
  await putRewindAnchor();
757
- const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId);
751
+ const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId, undefined, { axis: "run" });
758
752
  const dcCause = ac.cause();
759
753
  if (pending) {
760
754
  if (ledgerSink && !ledgerTerminal) {
@@ -762,8 +756,8 @@ export async function handleTasks(req, res, match, ctx) {
762
756
  await ledgerSink.flush().catch(() => undefined);
763
757
  await ledgerSink.appendParked("suspended", {}).catch(() => undefined);
764
758
  }
765
- await deps.runStore.setSuspended(durableTaskId, null);
766
- settleFleet("suspended");
759
+ const parked = await commitSyncPark(deps.runStore, durableTaskId, "suspended", null, pending);
760
+ settleFleet(parked.kind === "ended" ? "failed" : "suspended");
767
761
  }
768
762
  else if (dcCause !== undefined) {
769
763
  const dcErr = "stream client disconnected before completion (run aborted)";
@@ -808,7 +802,7 @@ export async function handleTasks(req, res, match, ctx) {
808
802
  try {
809
803
  const row = await deps.runStore.getRun(durableTaskId);
810
804
  if (row?.status === "running") {
811
- const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId);
805
+ const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId, undefined, { axis: "run" });
812
806
  const backstopCause = ac.cause();
813
807
  if (pending) {
814
808
  if (ledgerSink && !ledgerTerminal) {
@@ -816,8 +810,8 @@ export async function handleTasks(req, res, match, ctx) {
816
810
  await ledgerSink.flush().catch(() => undefined);
817
811
  await ledgerSink.appendParked("suspended", {}).catch(() => undefined);
818
812
  }
819
- await deps.runStore.setSuspended(durableTaskId, null);
820
- settleFleet("suspended");
813
+ const parked = await commitSyncPark(deps.runStore, durableTaskId, "suspended", null, pending);
814
+ settleFleet(parked.kind === "ended" ? "failed" : "suspended");
821
815
  }
822
816
  else if (finalResult) {
823
817
  if (ledgerSink && !ledgerTerminal) {
@@ -827,7 +821,7 @@ export async function handleTasks(req, res, match, ctx) {
827
821
  const retryPlane = outwardPlane(finalResult.terminal);
828
822
  await deps.runStore.setTerminal(durableTaskId, retryPlane.status, finalResult, retryPlane.errorMessage ?? null);
829
823
  await releaseKeyIfZeroWorkRefusal(deps.runStore, durableTaskId, finalResult);
830
- settleFleet(retryPlane.status, fleetRunResiduals(finalResult));
824
+ settleFleet(retryPlane.status, fleetRunResiduals(finalResult, failureCodeOf(finalResult.terminal)));
831
825
  }
832
826
  else if (backstopCause !== undefined) {
833
827
  const err = "stream aborted before completion (run cancelled)";
@@ -859,7 +853,14 @@ export async function handleTasks(req, res, match, ctx) {
859
853
  };
860
854
  counters.uncountedBillableInflight++;
861
855
  try {
862
- const settling = idemCache.run(inflightKey, async () => withRunReceipt(await runStreamSubmitLeg()));
856
+ const settling = idemCache.run(inflightKey, async () => {
857
+ try {
858
+ return withRunReceipt(await runStreamSubmitLeg());
859
+ }
860
+ finally {
861
+ await prepared.seat.close();
862
+ }
863
+ });
863
864
  if (!ranLive)
864
865
  runSlot?.release();
865
866
  resp = await settling;
@@ -872,16 +873,24 @@ export async function handleTasks(req, res, match, ctx) {
872
873
  finally {
873
874
  counters.uncountedBillableInflight--;
874
875
  clearInterval(hb);
876
+ stopClaimHeartbeat?.();
875
877
  if (usageKey)
876
878
  deps.modelUsage?.clear(usageKey);
877
879
  manifestSeat?.release();
878
880
  }
879
881
  if (!ranLive && resp && !res.writableEnded) {
880
- writeLiveFrame(res, { type: "done", result: doneResultOfOutcome(resp), replay: true });
882
+ writeTerminalFrame(doneFrameOfOutcome(replayedOutcome(resp)));
881
883
  }
884
+ await prepared.seat.deliverTerminal(() => {
885
+ const frame = heldTerminal;
886
+ heldTerminal = undefined;
887
+ if (frame !== undefined && !res.writableEnded)
888
+ writeLiveFrame(res, frame);
889
+ });
882
890
  res.end();
883
891
  }
884
892
  else {
893
+ let stopSyncClaimHeartbeat;
885
894
  const withSyncSubmitKeys = (body) => {
886
895
  const extra = {
887
896
  ...(prepared.verify || prepared.cascade ? { notice: MULTI_ATTEMPT_NO_EVENT_CHANNEL_NOTICE } : {}),
@@ -892,41 +901,54 @@ export async function handleTasks(req, res, match, ctx) {
892
901
  const runSyncSubmitLeg = async () => {
893
902
  const syncLegStartedAt = Date.now();
894
903
  let durableTaskId;
904
+ let durableLegId;
895
905
  let durableHeartbeat;
896
- if (deps.runStore) {
897
- const tid = uuidv7();
898
- const created = await timeClaim(deps.metrics, "run_claim", deps.runStore.createRun(tid, prepared.spec.sessionId, principal ?? null, deps.instanceId ?? "default", { ...runMeta(prepared, source), identity: runIdentityOf(req, deps.config, principal ?? null), idem: idem ?? null }));
899
- if (created.ok)
900
- clearTurnActivity(tid);
901
- if (created.ok)
902
- recordResourceWindow(tid, prepared.spec.resourceSuspend);
903
- if (created.existing)
904
- return await replayOfExistingRun(created.existing, { principal: submitter, idem }, "sync", deps, deps.runStore);
905
- if (created.sessionAbsent)
906
- return rootSessionAbsentAnswer();
907
- if (!created.ok)
908
- return { status: 409, body: await buildActiveRunConflict({ runStore: deps.runStore, checkpointStore: deps.checkpointStore, governance: deps.config, runStaleSec: deps.config.runStaleSec, turnActivity: readTurnActivityMs }, prepared.spec.sessionId, created.activeTaskId) };
909
- const placementReject = await commitExecutionContext(deps, { kind: "run", runStore: deps.runStore, taskId: tid }, prepared.execution);
910
- if (placementReject)
911
- return placementReject;
912
- durableTaskId = tid;
913
- fillRunPreviewOnDelivery(prepared.acceptance, deps.runStore, tid);
906
+ try {
907
+ if (deps.runStore) {
908
+ const tid = uuidv7();
909
+ const created = await timeClaim(deps.metrics, "run_claim", deps.runStore.createRun(tid, prepared.spec.sessionId, principal ?? null, deps.instanceId ?? "default", { ...runMeta(prepared, source), identity: runIdentityOf(req, deps.config, principal ?? null), idem: idem ?? null }));
910
+ if (created.ok)
911
+ clearTurnActivity(tid);
912
+ if (created.ok)
913
+ recordResourceWindow(tid, prepared.spec.resourceSuspend);
914
+ if (created.existing)
915
+ return await replayOfExistingRun(created.existing, { subject: submitter, idem }, "sync", deps, deps.runStore);
916
+ if (created.sessionAbsent)
917
+ return rootSessionAbsentAnswer();
918
+ if (!created.ok)
919
+ return { status: 409, body: await buildActiveRunConflict({ runStore: deps.runStore, checkpointStore: deps.checkpointStore, governance: deps.config, turnActivity: readTurnActivityMs }, prepared.spec.sessionId, created.activeTaskId) };
920
+ prepared.seat.noteOwnRun(tid);
921
+ stopSyncClaimHeartbeat = startClaimHeartbeat(deps.runStore, tid, principal ?? null, deps.metrics);
922
+ const placementReject = await commitExecutionContext(deps, { kind: "run", runStore: deps.runStore, taskId: tid, legId: created.legId }, prepared.execution);
923
+ if (placementReject)
924
+ return placementReject;
925
+ durableTaskId = tid;
926
+ durableLegId = created.legId;
927
+ fillRunPreviewOnDelivery(prepared.acceptance, deps.runStore, tid);
928
+ }
929
+ if (deps.checkpointStore) {
930
+ const ctxRefusal = await persistSubmissionCtx(deps.checkpointStore, deps, durableTaskId !== undefined && deps.runStore ? { runStore: deps.runStore, taskId: durableTaskId, legId: heldLegOf(durableLegId, durableTaskId) } : undefined, prepared);
931
+ if (ctxRefusal !== undefined && ctxRefusal !== SUBMIT_CTX_CLAIM_LOST)
932
+ return ctxRefusal;
933
+ }
934
+ const lostClaim = durableTaskId !== undefined && deps.runStore ? await recheckClaimBeforeLaunch(deps, deps.runStore, prepared.spec.sessionId, durableTaskId, heldLegOf(durableLegId, durableTaskId)) : undefined;
935
+ if (lostClaim !== undefined)
936
+ return lostClaim;
914
937
  }
915
- if (deps.checkpointStore) {
916
- const ctxRefusal = await persistSubmissionCtx(deps.checkpointStore, deps, durableTaskId !== undefined && deps.runStore ? { runStore: deps.runStore, taskId: durableTaskId } : undefined, prepared);
917
- if (ctxRefusal)
918
- return ctxRefusal;
938
+ catch (e) {
939
+ return faultedAnswerOf(e, SUBMISSION_CLAIM_FACE.faulted);
919
940
  }
920
941
  commitSessionInheritEnv(deps, prepared.spec.sessionId, prepared.body);
921
942
  const syncCancelCtrl = createRunAbort(principal ?? null);
922
- markChildrenStoppedByUserOnAbort(syncCancelCtrl.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.principal);
943
+ markChildrenStoppedByUserOnAbort(syncCancelCtrl.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.subject);
923
944
  if (durableTaskId && deps.runStore) {
924
945
  const rs = deps.runStore;
925
946
  const tid = durableTaskId;
926
947
  const owner = principal ?? null;
927
948
  const abortFromVerb = () => syncCancelCtrl.abort("cancel_verb");
949
+ stopSyncClaimHeartbeat?.();
928
950
  durableHeartbeat = setInterval(() => {
929
- void rs.heartbeat(tid, owner).catch(() => undefined);
951
+ beatRunHeartbeat(rs, tid, owner, () => syncCancelCtrl.abort("stall_verdict"), () => undefined);
930
952
  if (!syncCancelCtrl.signal.aborted) {
931
953
  void Promise.resolve(rs.isCancelRequested?.(tid, owner)).then((c) => { if (c)
932
954
  abortFromVerb(); }).catch(() => undefined);
@@ -952,19 +974,34 @@ export async function handleTasks(req, res, match, ctx) {
952
974
  counters.uncountedBillableInflight++;
953
975
  try {
954
976
  const heldDecisions = await heldWorkflowParkDecisions(deps, prepared.spec.sessionId);
955
- const verifyLeg = (v) => runWithVerification(prepared.runner, specWithSignal, v, heldDecisions);
956
- const cascadeLeg = () => runCascade(prepared.runner, specWithSignal, cascadeConfig(deps.config.cascadeLadder, prepared.spec.limits?.maxCostUsd), heldDecisions);
977
+ const compositionInternals = { ...heldDecisions, ...compositionLegRoot(prepared.legFacts?.registeredCwd) };
978
+ const verifyLeg = (v) => runWithVerification(prepared.runner, specWithSignal, v, compositionInternals);
979
+ const cascadeLeg = () => runCascade(prepared.runner, specWithSignal, cascadeConfig(deps.config.cascadeLadder, prepared.spec.limits?.maxCostUsd), compositionInternals);
957
980
  const plainLeg = async () => {
958
981
  const stream = prepared.runner.runTaskStream(specWithSignal, undefined, heldDecisions);
959
982
  const syncWorkspace = createSessionWorkspaceRecorder(sessionWorkspaceStoreOf(deps.sessionStorage), prepared.legFacts?.sessionWitness);
983
+ const anchorKey = durableTaskId;
984
+ const anchorStore = deps.resumeAnchorStore;
985
+ const anchor = new TurnAnchorCapture(undefined, "sync", anchorStore && anchorKey ? async (entryId) => { await anchorStore.put(prepared.spec.sessionId, anchorKey, entryId, principal ?? null); } : undefined);
960
986
  for await (const ev of stream) {
961
987
  observeSyncLegEvent(ev);
988
+ switch (ev.type) {
989
+ case "human_input":
990
+ anchor.onHumanInput(ev);
991
+ break;
992
+ case "message_committed":
993
+ await anchor.onMessageCommitted(ev.role, ev.entryId);
994
+ break;
995
+ case "turn_end":
996
+ await anchor.onTurnEnd();
997
+ break;
998
+ }
962
999
  await prepared.acceptance.observe(ev);
963
1000
  await syncWorkspace.observe(ev);
964
1001
  }
965
1002
  return stream.result();
966
1003
  };
967
- result = atHostBoundary(await instructionLeg.run(prepared.spec.sessionId, () => withPrincipal(principal, () => prepared.verify ? verifyLeg(prepared.verify) : prepared.cascade ? cascadeLeg() : plainLeg())), prepared.spec.sessionId);
1004
+ result = atHostBoundary(await instructionLeg.run(prepared.spec.sessionId, () => withSubject(recoveredSubject(principal), () => prepared.verify ? verifyLeg(prepared.verify) : prepared.cascade ? cascadeLeg() : plainLeg())));
968
1005
  }
969
1006
  finally {
970
1007
  counters.uncountedBillableInflight--;
@@ -1000,15 +1037,16 @@ export async function handleTasks(req, res, match, ctx) {
1000
1037
  }
1001
1038
  const exitResult = await mintSubmitExitResult(result, deps.checkpointStore);
1002
1039
  const syncPlane = outwardPlane(result.terminal);
1003
- if (syncPlane.status === "suspended" && deps.checkpointStore && deps.runStore && durableTaskId) {
1004
- await deps.runStore.setSuspended(durableTaskId, exitResult);
1005
- prepared.acceptance.settle(result);
1006
- return { status: 200, body: withSyncSubmitKeys(buildSyncSubmitBody(exitResult, { taskId: durableTaskId, sessionId: prepared.spec.sessionId, status: "suspended" })) };
1007
- }
1008
- if (syncPlane.status === "needs_review" && deps.checkpointStore && deps.runStore && durableTaskId) {
1009
- await deps.runStore.setNeedsReview(durableTaskId, exitResult);
1040
+ const syncHeld = heldParkOf(result);
1041
+ if (syncHeld !== undefined && deps.checkpointStore && deps.runStore && durableTaskId) {
1042
+ const parked = await commitParkRow({
1043
+ runStore: deps.runStore, taskId: durableTaskId, word: syncHeld.word, result: exitResult, card: { token: syncHeld.token, sessionId: prepared.spec.sessionId }, cards: deps.checkpointStore, leg: "sync",
1044
+ legId: heldLegOf(durableLegId, durableTaskId), staleWindowMs: deps.config.runStaleSec * 1000,
1045
+ });
1010
1046
  prepared.acceptance.settle(result);
1011
- return { status: 200, body: withSyncSubmitKeys(buildSyncSubmitBody(exitResult, { taskId: durableTaskId, sessionId: prepared.spec.sessionId, status: "needs_review" })) };
1047
+ if (parked.kind === "ended")
1048
+ return { status: 200, body: withSyncSubmitKeys(parked.row !== undefined ? syncSubmitBodyOfRow(parked.row) : { taskId: durableTaskId, sessionId: prepared.spec.sessionId, status: "failed" }) };
1049
+ return { status: 200, body: withSyncSubmitKeys(buildSyncSubmitBody(exitResult, { taskId: durableTaskId, sessionId: prepared.spec.sessionId, status: syncHeld.word })) };
1012
1050
  }
1013
1051
  if (durableTaskId && deps.runStore)
1014
1052
  await deps.runStore.setTerminal(durableTaskId, syncPlane.status, exitResult, syncPlane.errorMessage ?? null);
@@ -1020,18 +1058,25 @@ export async function handleTasks(req, res, match, ctx) {
1020
1058
  let ranSyncLeg = false;
1021
1059
  const settling = idemCache.run(inflightKey, async () => {
1022
1060
  ranSyncLeg = true;
1023
- return withRunReceipt(await runSyncSubmitLeg());
1061
+ try {
1062
+ return withRunReceipt(await runSyncSubmitLeg());
1063
+ }
1064
+ finally {
1065
+ await prepared.seat.close();
1066
+ }
1024
1067
  });
1025
1068
  if (!ranSyncLeg)
1026
1069
  runSlot?.release();
1027
- const resp = await settling;
1028
- sendSubmitResult(res, resp);
1070
+ const settled = await settling.finally(() => stopSyncClaimHeartbeat?.());
1071
+ const resp = ranSyncLeg ? settled : replayedOutcome(settled);
1072
+ await prepared.seat.deliverTerminal(() => sendSubmitResult(res, resp));
1029
1073
  }
1030
1074
  return;
1031
1075
  }
1032
1076
  finally {
1033
1077
  runSlot?.release();
1034
1078
  prepared.peerLease.release();
1079
+ await prepared.seat.close();
1035
1080
  }
1036
1081
  }
1037
1082
  }
@@ -1039,4 +1084,9 @@ export const TASKS_ROUTES = [
1039
1084
  { id: "tasks-submit", path: "/v1/tasks", billable: "submit", methods: ["POST"] },
1040
1085
  { id: "tasks-submit-stream", path: "/v1/tasks/stream", billable: "submit", methods: ["POST"] },
1041
1086
  ];
1087
+ function heldLegOf(legId, taskId) {
1088
+ if (legId === undefined)
1089
+ throw new Error(`tasks route: run ${taskId} has no record of the holding leg its createRun handed back — wiring error, nothing keyed on the leg can be written`);
1090
+ return legId;
1091
+ }
1042
1092
  //# sourceMappingURL=tasks.js.map