@sema-agent/server 7.146.0 → 7.148.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 (850) hide show
  1. package/MIGRATION.md +1423 -24
  2. package/README.md +21 -8
  3. package/README.zh-CN.md +15 -9
  4. package/USAGE.md +537 -216
  5. package/deploy/facts/lanes.json +7 -0
  6. package/deploy/sema-up/README.md +18 -7
  7. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  8. package/deploy/sema-up/chart/templates/_helpers.tpl +42 -4
  9. package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -4
  10. package/deploy/sema-up/chart/templates/server.yaml +5 -4
  11. package/deploy/sema-up/chart/values.yaml +4 -3
  12. package/deploy/sema-up/cluster-up.sh +75 -176
  13. package/deploy/sema-up/kube-up.sh +29 -49
  14. package/deploy/sema-up/lib/chart-run.sh +23 -0
  15. package/deploy/sema-up/lib/dataroot.sh +3 -3
  16. package/deploy/sema-up/lib/flagshape.sh +4 -0
  17. package/deploy/sema-up/lib/health.sh +62 -13
  18. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  19. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  20. package/deploy/sema-up/lib/lanes.json +2 -5
  21. package/deploy/sema-up/lib/regcred.py +8 -0
  22. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  23. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  24. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  25. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  26. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  27. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  28. package/deploy/sema-up/lib/render-stack.py +17 -0
  29. package/deploy/sema-up/lib/shell-text.sh +87 -0
  30. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  31. package/deploy/sema-up/lib/usage-head.txt +1 -0
  32. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  33. package/deploy/sema-up/preflight.sh +10 -8
  34. package/deploy/sema-up/sema-up.sh +26 -48
  35. package/deploy/sema-up/smoke.sh +7 -6
  36. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  37. package/deploy/sema-up/stack/compose.yaml +18 -5
  38. package/deploy/sema-up/stack/sema-stack-cluster.yaml +25 -3
  39. package/dist/adoption/plan.d.ts +24 -0
  40. package/dist/adoption/plan.js +53 -1
  41. package/dist/adoption/runner.d.ts +10 -1
  42. package/dist/adoption/runner.js +36 -16
  43. package/dist/adoption/wire.d.ts +3 -3
  44. package/dist/approval-card.d.ts +32 -34
  45. package/dist/approval-gate-currency.js +3 -2
  46. package/dist/approval-reconciler.d.ts +4 -13
  47. package/dist/approval-reconciler.js +2 -2
  48. package/dist/approval.d.ts +16 -14
  49. package/dist/approval.js +3 -3
  50. package/dist/audit.d.ts +10 -3
  51. package/dist/audit.js +17 -9
  52. package/dist/auth-bridge.d.ts +0 -14
  53. package/dist/auth-bridge.js +0 -7
  54. package/dist/auto-mode-face.d.ts +10 -7
  55. package/dist/auto-mode-face.js +7 -4
  56. package/dist/background-agent-name.d.ts +19 -1
  57. package/dist/background-agent-name.js +12 -2
  58. package/dist/background-session-reap.d.ts +1 -1
  59. package/dist/bake-runner/main.js +9 -6
  60. package/dist/bench/s1/arms.js +6 -5
  61. package/dist/bench/s1/live-deps.js +8 -3
  62. package/dist/bench/s1/run-firm.js +6 -5
  63. package/dist/bind-host.d.ts +25 -0
  64. package/dist/bind-host.js +25 -0
  65. package/dist/boot/adoption.d.ts +3 -0
  66. package/dist/boot/adoption.js +1 -0
  67. package/dist/boot/crash-last.js +2 -1
  68. package/dist/boot/deployment-mods.d.ts +1 -1
  69. package/dist/boot/device-lane.js +5 -5
  70. package/dist/boot/engine-lease.d.ts +12 -11
  71. package/dist/boot/execution-env.d.ts +19 -8
  72. package/dist/boot/execution-env.js +80 -62
  73. package/dist/boot/execution-lane.d.ts +37 -9
  74. package/dist/boot/execution-lane.js +74 -20
  75. package/dist/boot/exit-boundary.d.ts +3 -3
  76. package/dist/boot/exit-boundary.js +6 -5
  77. package/dist/boot/exit-last.js +2 -1
  78. package/dist/boot/fatal-exit.d.ts +3 -5
  79. package/dist/boot/fatal-exit.js +2 -2
  80. package/dist/boot/governance-seams.d.ts +2 -2
  81. package/dist/boot/leader.d.ts +15 -0
  82. package/dist/boot/leader.js +18 -16
  83. package/dist/boot/memory-boundary.d.ts +11 -11
  84. package/dist/boot/memory-boundary.js +3 -3
  85. package/dist/boot/memory-consolidation.d.ts +50 -53
  86. package/dist/boot/memory-consolidation.js +11 -18
  87. package/dist/boot/org-memory.js +4 -3
  88. package/dist/boot/parked-revive-gate.d.ts +1 -1
  89. package/dist/boot/parked-revive-gate.js +3 -3
  90. package/dist/boot/reapers.d.ts +4 -3
  91. package/dist/boot/reapers.js +20 -17
  92. package/dist/boot/resolve-spec.d.ts +5 -3
  93. package/dist/boot/resolve-spec.js +133 -165
  94. package/dist/boot/retention-lane.d.ts +7 -45
  95. package/dist/boot/retention-lane.js +2 -2
  96. package/dist/boot/runner-deps.d.ts +28 -7
  97. package/dist/boot/runner-deps.js +11 -4
  98. package/dist/boot/runtime-caps.d.ts +2 -2
  99. package/dist/boot/runtime-caps.js +16 -2
  100. package/dist/boot/session-faces.d.ts +17 -7
  101. package/dist/boot/session-faces.js +122 -96
  102. package/dist/boot/shutdown.d.ts +5 -4
  103. package/dist/boot/shutdown.js +6 -4
  104. package/dist/boot/stage-01-config.d.ts +1 -1
  105. package/dist/boot/stage-01-config.js +14 -2
  106. package/dist/boot/stage-02-web-admin-pull.d.ts +2 -1
  107. package/dist/boot/stage-02-web-admin-pull.js +15 -8
  108. package/dist/boot/stage-03-store-backend.d.ts +4 -1
  109. package/dist/boot/stage-03-store-backend.js +4 -3
  110. package/dist/boot/stage-04-stores.d.ts +3 -1
  111. package/dist/boot/stage-04-stores.js +2 -2
  112. package/dist/boot/stage-05-execution-env.d.ts +9 -5
  113. package/dist/boot/stage-05-execution-env.js +5 -5
  114. package/dist/boot/stage-06-runners.d.ts +13 -15
  115. package/dist/boot/stage-06-runners.js +24 -18
  116. package/dist/boot/stage-07-capability-layer.d.ts +14 -11
  117. package/dist/boot/stage-07-capability-layer.js +9 -12
  118. package/dist/boot/stage-08-reapers.d.ts +14 -11
  119. package/dist/boot/stage-08-reapers.js +3 -3
  120. package/dist/boot/stage-09-leader.d.ts +16 -18
  121. package/dist/boot/stage-09-leader.js +12 -4
  122. package/dist/boot/stage-10-http-server.d.ts +16 -18
  123. package/dist/boot/stage-10-http-server.js +9 -5
  124. package/dist/boot/store-evidence.d.ts +20 -0
  125. package/dist/boot/store-evidence.js +13 -0
  126. package/dist/boot/stores.d.ts +12 -0
  127. package/dist/boot/stores.js +39 -17
  128. package/dist/boot/task-list-lane.d.ts +4 -4
  129. package/dist/boot/web-admin.d.ts +4 -2
  130. package/dist/boot/web-admin.js +58 -38
  131. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  132. package/dist/boot-reclaim.d.ts +3 -1
  133. package/dist/boot-reclaim.js +1 -1
  134. package/dist/brain.d.ts +7 -18
  135. package/dist/brain.js +5 -17
  136. package/dist/budget.js +6 -6
  137. package/dist/capabilities/center-plugins.d.ts +9 -1
  138. package/dist/capabilities/center-plugins.js +37 -11
  139. package/dist/capabilities/center-wiring.js +1 -1
  140. package/dist/capabilities/composite-members.d.ts +3 -2
  141. package/dist/capabilities/composite-members.js +3 -2
  142. package/dist/capabilities/execution-lane.d.ts +7 -7
  143. package/dist/capabilities/execution-lane.js +2 -2
  144. package/dist/capabilities/hands-lane.d.ts +1 -1
  145. package/dist/capabilities/repo-tools.d.ts +2 -0
  146. package/dist/capabilities/repo-tools.js +14 -12
  147. package/dist/capabilities/scenarios.d.ts +38 -33
  148. package/dist/capabilities/scenarios.js +24 -25
  149. package/dist/capabilities/settings-contract.d.ts +29 -0
  150. package/dist/capabilities/settings-contract.js +14 -0
  151. package/dist/capabilities/skills.d.ts +6 -6
  152. package/dist/capabilities/tool-defer.d.ts +1 -1
  153. package/dist/capability-facts.d.ts +69 -4
  154. package/dist/capability-facts.js +77 -5
  155. package/dist/card-void.d.ts +4 -4
  156. package/dist/card-void.js +1 -1
  157. package/dist/center-credential-renewer.d.ts +6 -2
  158. package/dist/center-credential-renewer.js +10 -5
  159. package/dist/config-catalog.d.ts +16 -1
  160. package/dist/config-catalog.js +68 -61
  161. package/dist/config-dir-trust.d.ts +37 -4
  162. package/dist/config-dir-trust.js +88 -44
  163. package/dist/config-invariants.d.ts +58 -4
  164. package/dist/config-invariants.js +104 -23
  165. package/dist/config-lkg.d.ts +24 -2
  166. package/dist/config-lkg.js +22 -9
  167. package/dist/config-provider.d.ts +9 -9
  168. package/dist/config-provider.js +25 -108
  169. package/dist/config-pull-failure.d.ts +50 -0
  170. package/dist/config-pull-failure.js +48 -0
  171. package/dist/config-types.d.ts +215 -202
  172. package/dist/config.d.ts +69 -14
  173. package/dist/config.js +188 -96
  174. package/dist/degenerate-instrument.js +1 -1
  175. package/dist/delegated-session-owner.d.ts +1 -1
  176. package/dist/deleted-session-ids.d.ts +3 -2
  177. package/dist/deploy-facts.js +3 -2
  178. package/dist/deployment-governance.d.ts +3 -3
  179. package/dist/deployment-shape.d.ts +51 -16
  180. package/dist/deployment-shape.js +31 -6
  181. package/dist/egress-redirect.d.ts +25 -7
  182. package/dist/egress-redirect.js +20 -2
  183. package/dist/elicitation.d.ts +6 -5
  184. package/dist/elicitation.js +23 -22
  185. package/dist/engine-identity.d.ts +28 -0
  186. package/dist/engine-identity.js +10 -0
  187. package/dist/entry-problems.d.ts +5 -7
  188. package/dist/entry-problems.js +1 -1
  189. package/dist/env-facts.d.ts +7 -5
  190. package/dist/env-facts.js +12 -7
  191. package/dist/env-witness.d.ts +7 -0
  192. package/dist/env-witness.js +16 -0
  193. package/dist/execution-config-root.d.ts +5 -5
  194. package/dist/execution-config-root.js +5 -5
  195. package/dist/execution-env-purpose.d.ts +14 -0
  196. package/dist/execution-env-purpose.js +29 -0
  197. package/dist/execution-lane-caps.d.ts +53 -103
  198. package/dist/execution-lane-caps.js +51 -83
  199. package/dist/execution-placement.d.ts +65 -9
  200. package/dist/execution-placement.js +58 -0
  201. package/dist/field-conflict.d.ts +7 -11
  202. package/dist/field-conflict.js +3 -3
  203. package/dist/file-history-capture.d.ts +3 -3
  204. package/dist/file-history-disclosure.d.ts +2 -2
  205. package/dist/file-history-disclosure.js +1 -0
  206. package/dist/fleet/drain-entry.d.ts +17 -10
  207. package/dist/fleet/drain-entry.js +1 -1
  208. package/dist/fleet/fleet-bus.d.ts +21 -3
  209. package/dist/fleet/fleet-bus.js +35 -25
  210. package/dist/fleet/fleet-reconciler.js +2 -2
  211. package/dist/fleet/serving-lease.js +6 -7
  212. package/dist/fleet-client.js +3 -3
  213. package/dist/fleet-lease.d.ts +0 -1
  214. package/dist/fleet-lease.js +4 -5
  215. package/dist/history-anchor.d.ts +42 -0
  216. package/dist/history-anchor.js +34 -0
  217. package/dist/hitl-delivery.d.ts +90 -0
  218. package/dist/hitl-delivery.js +98 -0
  219. package/dist/hooks/classic-stations.d.ts +8 -11
  220. package/dist/hooks/classic-stations.js +0 -7
  221. package/dist/hooks/command-spawn.d.ts +1 -4
  222. package/dist/hooks/command-spawn.js +0 -11
  223. package/dist/hooks/hook-llm.d.ts +5 -1
  224. package/dist/hooks/hook-llm.js +24 -15
  225. package/dist/hooks/hook-runner.d.ts +119 -65
  226. package/dist/hooks/hook-runner.js +415 -217
  227. package/dist/host-lsp-manager.d.ts +22 -8
  228. package/dist/host-lsp-manager.js +4 -1
  229. package/dist/http/active-run-conflict.d.ts +2 -43
  230. package/dist/http/active-run-conflict.js +3 -7
  231. package/dist/http/admission.d.ts +4 -18
  232. package/dist/http/admission.js +75 -78
  233. package/dist/http/approval-sweeps.d.ts +5 -8
  234. package/dist/http/approval-sweeps.js +55 -30
  235. package/dist/http/caller-trust.d.ts +8 -10
  236. package/dist/http/caller-trust.js +1 -2
  237. package/dist/http/checkpoint-ctx.d.ts +17 -0
  238. package/dist/http/checkpoint-ctx.js +6 -0
  239. package/dist/http/claim-heartbeat.d.ts +49 -0
  240. package/dist/http/claim-heartbeat.js +46 -0
  241. package/dist/http/claim-latency.d.ts +10 -0
  242. package/dist/http/claim-latency.js +12 -0
  243. package/dist/http/claimed-run.d.ts +4 -3
  244. package/dist/http/dispatch.d.ts +8 -1
  245. package/dist/http/dispatch.js +77 -31
  246. package/dist/http/durable-run-leg.d.ts +3 -3
  247. package/dist/http/durable-run-leg.js +18 -12
  248. package/dist/http/execution-context.d.ts +18 -42
  249. package/dist/http/execution-context.js +11 -5
  250. package/dist/http/health-reader.d.ts +36 -0
  251. package/dist/http/health-reader.js +21 -0
  252. package/dist/http/health-self-report.d.ts +9 -9
  253. package/dist/http/health-self-report.js +4 -4
  254. package/dist/http/idempotency.d.ts +9 -5
  255. package/dist/http/idempotency.js +4 -4
  256. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  257. package/dist/http/memory-compliance-failure-reply.js +7 -2
  258. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  259. package/dist/http/memory-face-fault-reply.js +71 -0
  260. package/dist/http/memory-store-refusal-reply.d.ts +3 -3
  261. package/dist/http/memory-store-refusal-reply.js +6 -0
  262. package/dist/http/owner-access.d.ts +391 -56
  263. package/dist/http/owner-access.js +372 -33
  264. package/dist/http/principal-gate.d.ts +26 -94
  265. package/dist/http/principal-gate.js +24 -81
  266. package/dist/http/refusal-body.d.ts +35 -2
  267. package/dist/http/refusal-body.js +34 -0
  268. package/dist/http/request-guards.d.ts +10 -14
  269. package/dist/http/request-guards.js +34 -68
  270. package/dist/http/resume-composition.d.ts +37 -0
  271. package/dist/http/resume-composition.js +18 -0
  272. package/dist/http/resume-ctx-read.d.ts +35 -12
  273. package/dist/http/resume-ctx-read.js +25 -6
  274. package/dist/http/resume-legs.d.ts +24 -24
  275. package/dist/http/resume-legs.js +260 -171
  276. package/dist/http/retired-skill-manifest.d.ts +1 -1
  277. package/dist/http/rewind-files-reply.d.ts +34 -0
  278. package/dist/http/rewind-files-reply.js +36 -0
  279. package/dist/http/route-ctx.d.ts +56 -47
  280. package/dist/http/route-table.js +2 -0
  281. package/dist/http/routes/a2a-serve.d.ts +43 -5
  282. package/dist/http/routes/a2a-serve.js +58 -37
  283. package/dist/http/routes/admin-config-refresh.js +2 -2
  284. package/dist/http/routes/admin-drain.js +2 -2
  285. package/dist/http/routes/admin-memory-optout.js +4 -3
  286. package/dist/http/routes/adoption.d.ts +3 -0
  287. package/dist/http/routes/adoption.js +17 -10
  288. package/dist/http/routes/agents-roster.js +13 -7
  289. package/dist/http/routes/approvals-assistant.js +73 -88
  290. package/dist/http/routes/attachments.js +2 -2
  291. package/dist/http/routes/background.d.ts +3 -3
  292. package/dist/http/routes/background.js +9 -17
  293. package/dist/http/routes/capabilities.js +23 -20
  294. package/dist/http/routes/config-catalog.js +2 -2
  295. package/dist/http/routes/devices.d.ts +3 -3
  296. package/dist/http/routes/devices.js +5 -5
  297. package/dist/http/routes/diagnostics.d.ts +27 -3
  298. package/dist/http/routes/diagnostics.js +27 -21
  299. package/dist/http/routes/engine.js +2 -2
  300. package/dist/http/routes/fleet.js +5 -3
  301. package/dist/http/routes/images.js +10 -6
  302. package/dist/http/routes/leader.d.ts +7 -2
  303. package/dist/http/routes/leader.js +12 -3
  304. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  305. package/dist/http/routes/mcp-reconnect.js +7 -15
  306. package/dist/http/routes/memory-bundle.js +4 -7
  307. package/dist/http/routes/memory-compliance.js +4 -4
  308. package/dist/http/routes/memory-consolidation.js +6 -9
  309. package/dist/http/routes/memory-origin.d.ts +3 -1
  310. package/dist/http/routes/memory-origin.js +7 -8
  311. package/dist/http/routes/memory-policy.js +17 -12
  312. package/dist/http/routes/notify-wake.js +12 -20
  313. package/dist/http/routes/observability.js +3 -3
  314. package/dist/http/routes/principal-inbox.d.ts +1 -1
  315. package/dist/http/routes/principal-inbox.js +2 -2
  316. package/dist/http/routes/projects.d.ts +70 -0
  317. package/dist/http/routes/projects.js +87 -0
  318. package/dist/http/routes/retention-ops.js +6 -9
  319. package/dist/http/routes/rules.js +50 -7
  320. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  321. package/dist/http/routes/run-memory-capture.js +6 -12
  322. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  323. package/dist/http/routes/run-permission-mode.js +10 -17
  324. package/dist/http/routes/runs.js +148 -233
  325. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  326. package/dist/http/routes/session-memory-sync.js +7 -13
  327. package/dist/http/routes/session-sync.d.ts +4 -2
  328. package/dist/http/routes/session-sync.js +48 -30
  329. package/dist/http/routes/sessions-list.d.ts +3 -3
  330. package/dist/http/routes/sessions-list.js +9 -9
  331. package/dist/http/routes/sessions.d.ts +7 -1
  332. package/dist/http/routes/sessions.js +177 -112
  333. package/dist/http/routes/shared-memory.js +6 -6
  334. package/dist/http/routes/side-query.js +2 -2
  335. package/dist/http/routes/tasks.js +144 -122
  336. package/dist/http/routes/trace-usage.d.ts +0 -12
  337. package/dist/http/routes/trace-usage.js +40 -46
  338. package/dist/http/routes/workflows.d.ts +39 -4
  339. package/dist/http/routes/workflows.js +42 -14
  340. package/dist/http/run-concurrency-cap.d.ts +20 -12
  341. package/dist/http/run-concurrency-cap.js +39 -26
  342. package/dist/http/run-read-face.d.ts +3 -5
  343. package/dist/http/run-read-face.js +8 -13
  344. package/dist/http/send.d.ts +12 -3
  345. package/dist/http/send.js +42 -6
  346. package/dist/http/server.d.ts +63 -50
  347. package/dist/http/server.js +52 -16
  348. package/dist/http/sse-log.d.ts +17 -10
  349. package/dist/http/sse-log.js +7 -7
  350. package/dist/http/stored-body-replay.d.ts +17 -3
  351. package/dist/http/stored-body-replay.js +11 -2
  352. package/dist/http/submit-ctx.d.ts +16 -8
  353. package/dist/http/submit-ctx.js +6 -2
  354. package/dist/http/submit-replay.d.ts +19 -6
  355. package/dist/http/submit-replay.js +18 -6
  356. package/dist/http/sync-submit-body.d.ts +3 -4
  357. package/dist/http/sync-submit-body.js +4 -5
  358. package/dist/http/wire-types.d.ts +23 -13
  359. package/dist/identity-source.d.ts +36 -5
  360. package/dist/identity-source.js +27 -0
  361. package/dist/index.d.ts +3 -2
  362. package/dist/index.js +2 -1
  363. package/dist/instruction-source-notice.d.ts +1 -1
  364. package/dist/key-resolver.d.ts +32 -0
  365. package/dist/key-resolver.js +23 -9
  366. package/dist/leader/diffup.js +2 -1
  367. package/dist/leader/endpoint.d.ts +26 -5
  368. package/dist/leader/endpoint.js +154 -14
  369. package/dist/leader/fanout.d.ts +3 -0
  370. package/dist/leader/fanout.js +78 -63
  371. package/dist/leader/leader.d.ts +16 -0
  372. package/dist/leader/leader.js +43 -3
  373. package/dist/leader/merge.d.ts +9 -1
  374. package/dist/leader/merge.js +16 -1
  375. package/dist/leader/repair-wire.js +1 -1
  376. package/dist/leader/wire.d.ts +36 -3
  377. package/dist/leader/wire.js +59 -18
  378. package/dist/lsp-evict.d.ts +6 -4
  379. package/dist/lsp-evict.js +2 -3
  380. package/dist/memory-embedder-reembed.d.ts +38 -0
  381. package/dist/memory-embedder-reembed.js +20 -0
  382. package/dist/memory-incident-sink.d.ts +0 -28
  383. package/dist/memory-incident-sink.js +5 -0
  384. package/dist/memory-operator-faces.d.ts +5 -4
  385. package/dist/memory-operator-faces.js +1 -1
  386. package/dist/memory-scope.d.ts +31 -4
  387. package/dist/memory-scope.js +65 -16
  388. package/dist/memory-store-refusal.d.ts +20 -4
  389. package/dist/memory-store-refusal.js +1 -1
  390. package/dist/memory-sync-client.d.ts +5 -2
  391. package/dist/memory-sync-client.js +19 -14
  392. package/dist/memory-sync.js +1 -1
  393. package/dist/model-compat.d.ts +51 -28
  394. package/dist/model-compat.js +55 -23
  395. package/dist/model-context-window.d.ts +18 -0
  396. package/dist/model-context-window.js +2 -0
  397. package/dist/model-entry-headers.d.ts +46 -4
  398. package/dist/model-entry-headers.js +2 -2
  399. package/dist/model-entry-refusal.d.ts +46 -17
  400. package/dist/model-entry-refusal.js +47 -27
  401. package/dist/model-plane-face.d.ts +19 -11
  402. package/dist/model-plane-face.js +9 -1
  403. package/dist/model-plane-probe.d.ts +2 -0
  404. package/dist/model-plane-probe.js +17 -0
  405. package/dist/model-provider.d.ts +3 -3
  406. package/dist/model-route-endpoint.d.ts +9 -5
  407. package/dist/model-route-endpoint.js +29 -7
  408. package/dist/model-select.d.ts +16 -0
  409. package/dist/model-select.js +4 -0
  410. package/dist/mountinfo.d.ts +37 -0
  411. package/dist/mountinfo.js +47 -0
  412. package/dist/namespaced-rule-name.d.ts +28 -2
  413. package/dist/namespaced-rule-name.js +10 -1
  414. package/dist/net-address.d.ts +1 -1
  415. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  416. package/dist/observability/corrupt-read-seat.js +5 -3
  417. package/dist/observability/fail-open.d.ts +75 -47
  418. package/dist/observability/fail-open.js +77 -47
  419. package/dist/observability/logger.d.ts +22 -1
  420. package/dist/observability/logger.js +89 -12
  421. package/dist/observability/metrics.d.ts +2 -0
  422. package/dist/observability/metrics.js +5 -4
  423. package/dist/observability/otel-exporter.js +2 -1
  424. package/dist/observability/principal-context.d.ts +14 -7
  425. package/dist/observability/principal-context.js +8 -3
  426. package/dist/observability/run-terminal.d.ts +7 -1
  427. package/dist/observability/run-terminal.js +5 -2
  428. package/dist/observability/secret-env-scrub.d.ts +30 -4
  429. package/dist/observability/secret-env-scrub.js +15 -3
  430. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  431. package/dist/orchestration/hardened-vm-runner.js +11 -5
  432. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  433. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  434. package/dist/orchestration/hardened-vm-worker.js +2 -1
  435. package/dist/orchestration/workflow-agent-session-index.d.ts +7 -12
  436. package/dist/orchestration/workflow-agent-session-index.js +1 -6
  437. package/dist/orchestration/workflow-completion-inbox.d.ts +29 -9
  438. package/dist/orchestration/workflow-completion-inbox.js +65 -46
  439. package/dist/org-delivery-gate.d.ts +5 -4
  440. package/dist/org-delivery-gate.js +7 -6
  441. package/dist/org-memory-admission.d.ts +5 -2
  442. package/dist/org-memory-admission.js +25 -10
  443. package/dist/outbound-dispatcher.d.ts +1 -1
  444. package/dist/outbound-dispatcher.js +6 -12
  445. package/dist/owner-brands.d.ts +81 -0
  446. package/dist/owner-brands.js +42 -0
  447. package/dist/owner-faces.d.ts +531 -0
  448. package/dist/owner-faces.js +126 -0
  449. package/dist/parked-decide.d.ts +100 -31
  450. package/dist/parked-decide.js +162 -48
  451. package/dist/parked-revive-surface.d.ts +14 -4
  452. package/dist/parked-revive-surface.js +5 -4
  453. package/dist/peer-directory.d.ts +6 -8
  454. package/dist/peer-directory.js +3 -2
  455. package/dist/permission-rule-vocab.d.ts +53 -8
  456. package/dist/permission-rule-vocab.js +30 -2
  457. package/dist/plugins/adoption-log-sql.d.ts +0 -22
  458. package/dist/plugins/adoption-log-sql.js +5 -3
  459. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  460. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  461. package/dist/plugins/approval-ask-store-file.d.ts +28 -9
  462. package/dist/plugins/approval-ask-store-file.js +74 -18
  463. package/dist/plugins/approval-ask-store-memory.d.ts +17 -7
  464. package/dist/plugins/approval-ask-store-memory.js +35 -12
  465. package/dist/plugins/approval-ask-store-sql.d.ts +42 -20
  466. package/dist/plugins/approval-ask-store-sql.js +44 -11
  467. package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
  468. package/dist/plugins/approval-exemption-skill-m46.js +25 -0
  469. package/dist/plugins/approval-exemption-store.d.ts +6 -1
  470. package/dist/plugins/approval-exemption-store.js +14 -0
  471. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  472. package/dist/plugins/approval-nonce-store.js +72 -23
  473. package/dist/plugins/blob-backend.d.ts +40 -195
  474. package/dist/plugins/blob-backend.js +41 -234
  475. package/dist/plugins/caching-session-store.d.ts +22 -5
  476. package/dist/plugins/caching-session-store.js +43 -4
  477. package/dist/plugins/checkpoint-index-columns.d.ts +33 -6
  478. package/dist/plugins/checkpoint-index-columns.js +39 -3
  479. package/dist/plugins/checkpoint-store-face.d.ts +84 -11
  480. package/dist/plugins/checkpoint-store-face.js +18 -1
  481. package/dist/plugins/device-store-sql.d.ts +2 -2
  482. package/dist/plugins/device-store-sql.js +6 -10
  483. package/dist/plugins/ensure-index.d.ts +13 -1
  484. package/dist/plugins/ensure-index.js +154 -21
  485. package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
  486. package/dist/plugins/ensure-schema-lock-policy.js +3 -2
  487. package/dist/plugins/execution-lane-rename-m40.d.ts +20 -0
  488. package/dist/plugins/execution-lane-rename-m40.js +10 -0
  489. package/dist/plugins/execution-placement-sql.d.ts +63 -88
  490. package/dist/plugins/execution-placement-sql.js +94 -54
  491. package/dist/plugins/file-run-store.d.ts +89 -35
  492. package/dist/plugins/file-run-store.js +197 -142
  493. package/dist/plugins/host-platform.d.ts +24 -3
  494. package/dist/plugins/host-platform.js +15 -1
  495. package/dist/plugins/image-bake-store-sql.js +2 -0
  496. package/dist/plugins/imported-layer-root-retirement.d.ts +19 -10
  497. package/dist/plugins/imported-layer-root-retirement.js +4 -8
  498. package/dist/plugins/inbox-payload-column.d.ts +14 -0
  499. package/dist/plugins/inbox-payload-column.js +13 -0
  500. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  501. package/dist/plugins/k8s-pod-reaper.js +0 -1
  502. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  503. package/dist/plugins/leader-run-store-sql.js +34 -4
  504. package/dist/plugins/local-checkpoint-store.d.ts +63 -23
  505. package/dist/plugins/local-checkpoint-store.js +204 -81
  506. package/dist/plugins/local-data-dir-modes-m39.d.ts +48 -0
  507. package/dist/plugins/local-data-dir-modes-m39.js +183 -0
  508. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  509. package/dist/plugins/local-docker-capacity.js +194 -0
  510. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  511. package/dist/plugins/local-docker-reaper.js +102 -0
  512. package/dist/plugins/local-engine-high-water.d.ts +13 -0
  513. package/dist/plugins/local-engine-high-water.js +62 -0
  514. package/dist/plugins/local-session-store.d.ts +442 -143
  515. package/dist/plugins/local-session-store.js +941 -289
  516. package/dist/plugins/local-session-window.d.ts +3 -2
  517. package/dist/plugins/local-session-window.js +3 -2
  518. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  519. package/dist/plugins/local-task-attachment-store.d.ts +20 -1
  520. package/dist/plugins/local-task-attachment-store.js +32 -12
  521. package/dist/plugins/memory-embedder-fingerprint.d.ts +33 -10
  522. package/dist/plugins/memory-embedder-fingerprint.js +52 -12
  523. package/dist/plugins/memory-embedder.d.ts +1 -1
  524. package/dist/plugins/memory-embedder.js +11 -9
  525. package/dist/plugins/memory-engine-pg.d.ts +7 -5
  526. package/dist/plugins/memory-engine-pg.js +18 -9
  527. package/dist/plugins/memory-engine-sql-apply.d.ts +21 -8
  528. package/dist/plugins/memory-engine-sql-apply.js +7 -9
  529. package/dist/plugins/memory-engine-tidb.d.ts +12 -7
  530. package/dist/plugins/memory-engine-tidb.js +18 -10
  531. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  532. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  533. package/dist/plugins/memory-run-store.d.ts +39 -27
  534. package/dist/plugins/memory-run-store.js +72 -70
  535. package/dist/plugins/one-time-migration-marker.d.ts +10 -0
  536. package/dist/plugins/one-time-migration-marker.js +7 -0
  537. package/dist/plugins/one-time-migrations.d.ts +325 -74
  538. package/dist/plugins/one-time-migrations.js +705 -230
  539. package/dist/plugins/org-delivery-quota-store.js +2 -1
  540. package/dist/plugins/owner-only-file-mode.d.ts +29 -0
  541. package/dist/plugins/owner-only-file-mode.js +141 -0
  542. package/dist/plugins/permission-rule-store-file.d.ts +11 -11
  543. package/dist/plugins/permission-rule-store-file.js +14 -2
  544. package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
  545. package/dist/plugins/permission-rule-store-sql.js +6 -86
  546. package/dist/plugins/pg-pool.d.ts +3 -32
  547. package/dist/plugins/pg-pool.js +27 -11
  548. package/dist/plugins/release-version.d.ts +20 -0
  549. package/dist/plugins/release-version.js +28 -0
  550. package/dist/plugins/remote-env-adb.d.ts +20 -4
  551. package/dist/plugins/remote-env-adb.js +39 -11
  552. package/dist/plugins/remote-env-e2b.d.ts +19 -28
  553. package/dist/plugins/remote-env-e2b.js +40 -29
  554. package/dist/plugins/remote-env-host.d.ts +11 -10
  555. package/dist/plugins/remote-env-host.js +40 -27
  556. package/dist/plugins/remote-env-k8s.d.ts +45 -47
  557. package/dist/plugins/remote-env-k8s.js +122 -62
  558. package/dist/plugins/remote-env-local-docker.d.ts +152 -15
  559. package/dist/plugins/remote-env-local-docker.js +370 -75
  560. package/dist/plugins/remote-env-ssh.d.ts +8 -2
  561. package/dist/plugins/remote-env-ssh.js +26 -24
  562. package/dist/plugins/remote-scratchpad.js +4 -0
  563. package/dist/plugins/remote-shell.d.ts +59 -30
  564. package/dist/plugins/remote-shell.js +175 -62
  565. package/dist/plugins/retention-declaration.d.ts +37 -0
  566. package/dist/plugins/retention-declaration.js +9 -0
  567. package/dist/plugins/retention-deployment.d.ts +158 -0
  568. package/dist/plugins/retention-deployment.js +119 -0
  569. package/dist/plugins/retention-lane-store-sql.d.ts +74 -4
  570. package/dist/plugins/retention-lane-store-sql.js +103 -1
  571. package/dist/plugins/retention-sql.d.ts +29 -0
  572. package/dist/plugins/retention-sql.js +8 -0
  573. package/dist/plugins/run-preview-m45.d.ts +11 -0
  574. package/dist/plugins/run-preview-m45.js +19 -0
  575. package/dist/plugins/run-store-sql.d.ts +56 -68
  576. package/dist/plugins/run-store-sql.js +127 -116
  577. package/dist/plugins/s3-answer.d.ts +2 -1
  578. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  579. package/dist/plugins/sandbox-reaper.js +2 -0
  580. package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
  581. package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
  582. package/dist/plugins/scheduler-support.d.ts +16 -1
  583. package/dist/plugins/scheduler-support.js +22 -2
  584. package/dist/plugins/schema-consistency.d.ts +42 -15
  585. package/dist/plugins/schema-consistency.js +213 -13
  586. package/dist/plugins/schema-drift-sentence.d.ts +4 -1
  587. package/dist/plugins/schema-drift-sentence.js +4 -4
  588. package/dist/plugins/schema-ensure-legs.d.ts +10 -1
  589. package/dist/plugins/schema-ensure-legs.js +12 -2
  590. package/dist/plugins/schema-indexes.js +3 -0
  591. package/dist/plugins/schema-live-columns.d.ts +14 -5
  592. package/dist/plugins/schema-live-columns.js +10 -10
  593. package/dist/plugins/send-user-file.js +2 -1
  594. package/dist/plugins/session-birth.d.ts +37 -0
  595. package/dist/plugins/session-birth.js +38 -0
  596. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  597. package/dist/plugins/session-epoch-anchor.js +33 -11
  598. package/dist/plugins/session-ext-table.d.ts +98 -0
  599. package/dist/plugins/session-ext-table.js +134 -0
  600. package/dist/plugins/session-fork.d.ts +16 -2
  601. package/dist/plugins/session-fork.js +3 -0
  602. package/dist/plugins/session-ownership.d.ts +1 -1
  603. package/dist/plugins/session-placement.d.ts +22 -16
  604. package/dist/plugins/session-placement.js +15 -12
  605. package/dist/plugins/session-row-sql.d.ts +20 -7
  606. package/dist/plugins/session-row-sql.js +16 -8
  607. package/dist/plugins/session-run-rollup.d.ts +29 -0
  608. package/dist/plugins/session-run-rollup.js +40 -0
  609. package/dist/plugins/session-store-sql.d.ts +157 -0
  610. package/dist/plugins/session-store-sql.js +398 -0
  611. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  612. package/dist/plugins/session-withdraw-sql.js +42 -0
  613. package/dist/plugins/session-workspace-cell.d.ts +2 -2
  614. package/dist/plugins/session-workspace-cell.js +2 -2
  615. package/dist/plugins/shared-memory-store-sql.d.ts +10 -69
  616. package/dist/plugins/shared-memory-store-sql.js +15 -14
  617. package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
  618. package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
  619. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  620. package/dist/plugins/snapshot-bucket-presence.js +1 -1
  621. package/dist/plugins/sql-driver.d.ts +24 -8
  622. package/dist/plugins/sql-driver.js +43 -9
  623. package/dist/plugins/sql-errors.d.ts +35 -5
  624. package/dist/plugins/sql-errors.js +55 -3
  625. package/dist/plugins/sql-json-column.d.ts +8 -7
  626. package/dist/plugins/sql-json-column.js +10 -6
  627. package/dist/plugins/store-backend.d.ts +114 -18
  628. package/dist/plugins/store-backend.js +340 -87
  629. package/dist/plugins/store-contracts.d.ts +97 -30
  630. package/dist/plugins/store-contracts.js +23 -1
  631. package/dist/plugins/store-fault.d.ts +28 -2
  632. package/dist/plugins/store-fault.js +20 -2
  633. package/dist/plugins/task-attachment-store.d.ts +21 -11
  634. package/dist/plugins/task-attachment-store.js +37 -19
  635. package/dist/plugins/task-list-store-sql.d.ts +1 -1
  636. package/dist/plugins/text-column-capacity.d.ts +21 -0
  637. package/dist/plugins/text-column-capacity.js +5 -0
  638. package/dist/plugins/tidb-pool.d.ts +3 -2
  639. package/dist/plugins/tidb-pool.js +42 -39
  640. package/dist/plugins/user-input-ledger-sql.d.ts +1 -1
  641. package/dist/plugins/web-search.js +5 -3
  642. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  643. package/dist/plugins/workflow-run-store-sql.js +11 -5
  644. package/dist/principal-jwt.d.ts +4 -4
  645. package/dist/principal-jwt.js +20 -5
  646. package/dist/principal-shape.d.ts +41 -0
  647. package/dist/principal-shape.js +19 -0
  648. package/dist/question.d.ts +13 -23
  649. package/dist/question.js +21 -39
  650. package/dist/read-face-posture.d.ts +6 -6
  651. package/dist/read-face-posture.js +2 -2
  652. package/dist/request-declaration-refusal.d.ts +35 -12
  653. package/dist/request-declaration-refusal.js +21 -9
  654. package/dist/request-form.d.ts +58 -0
  655. package/dist/request-form.js +72 -0
  656. package/dist/request-image-urls.d.ts +8 -2
  657. package/dist/request-image-urls.js +2 -1
  658. package/dist/request-images.d.ts +20 -0
  659. package/dist/request-images.js +59 -0
  660. package/dist/request-key-closure.d.ts +6 -7
  661. package/dist/request-key-closure.js +15 -2
  662. package/dist/request-value-closure.d.ts +5 -5
  663. package/dist/request-value-closure.js +1 -1
  664. package/dist/resource-suspend.d.ts +7 -16
  665. package/dist/resource-suspend.js +1 -1
  666. package/dist/retired-name-host-notice.d.ts +21 -0
  667. package/dist/retired-name-host-notice.js +12 -0
  668. package/dist/rule-entry-list.d.ts +2 -2
  669. package/dist/rule-entry-list.js +3 -4
  670. package/dist/rule-issue-reading.d.ts +58 -0
  671. package/dist/rule-issue-reading.js +14 -0
  672. package/dist/rules-consent.d.ts +46 -16
  673. package/dist/rules-consent.js +102 -53
  674. package/dist/run-acceptance.d.ts +3 -1
  675. package/dist/run-acceptance.js +3 -0
  676. package/dist/run-local.d.ts +14 -6
  677. package/dist/run-local.js +109 -93
  678. package/dist/run-stale-default.d.ts +7 -0
  679. package/dist/run-stale-default.js +2 -0
  680. package/dist/runs.d.ts +73 -44
  681. package/dist/runs.js +65 -43
  682. package/dist/runtime-caps-resolver.d.ts +36 -14
  683. package/dist/runtime-caps-resolver.js +31 -14
  684. package/dist/runtime-governance.d.ts +2 -2
  685. package/dist/runtime-governance.js +5 -3
  686. package/dist/sealed-key-layout.d.ts +12 -6
  687. package/dist/sealed-key-layout.js +5 -1
  688. package/dist/sealed-key.d.ts +12 -2
  689. package/dist/sealed-key.js +116 -26
  690. package/dist/security.d.ts +133 -161
  691. package/dist/security.js +163 -59
  692. package/dist/sema-config-dir.d.ts +20 -0
  693. package/dist/sema-config-dir.js +27 -2
  694. package/dist/server-secret-env.d.ts +23 -5
  695. package/dist/server-secret-env.js +14 -4
  696. package/dist/service-version.d.ts +2 -1
  697. package/dist/service-version.js +2 -2
  698. package/dist/session-children-retire.d.ts +7 -5
  699. package/dist/session-children-retire.js +7 -2
  700. package/dist/session-deletion.d.ts +88 -0
  701. package/dist/session-deletion.js +8 -0
  702. package/dist/session-erase.d.ts +145 -0
  703. package/dist/session-erase.js +115 -0
  704. package/dist/session-error-wire.d.ts +6 -6
  705. package/dist/session-error-wire.js +1 -1
  706. package/dist/session-incarnation.d.ts +60 -10
  707. package/dist/session-incarnation.js +19 -2
  708. package/dist/session-policy-wire.d.ts +6 -3
  709. package/dist/session-policy-wire.js +11 -1
  710. package/dist/session-resident-background.d.ts +29 -47
  711. package/dist/session-resident-background.js +77 -8
  712. package/dist/session-row.d.ts +3 -2
  713. package/dist/session-rules-seat.d.ts +12 -0
  714. package/dist/session-rules-seat.js +19 -0
  715. package/dist/session-sync-kernel.d.ts +1 -1
  716. package/dist/session-titler.d.ts +7 -15
  717. package/dist/session-titler.js +1 -1
  718. package/dist/session-workspace.d.ts +11 -2
  719. package/dist/session-workspace.js +5 -0
  720. package/dist/sighup-idle.d.ts +1 -1
  721. package/dist/spec-fields.d.ts +57 -3
  722. package/dist/spec-fields.js +72 -51
  723. package/dist/store-posture.d.ts +138 -21
  724. package/dist/store-posture.js +188 -3
  725. package/dist/stored-request-hooks-m20.d.ts +3 -2
  726. package/dist/stored-request-hooks-m20.js +21 -16
  727. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  728. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  729. package/dist/stores-sql/blob-index-sql.d.ts +148 -0
  730. package/dist/stores-sql/blob-index-sql.js +154 -0
  731. package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
  732. package/dist/stores-sql/checkpoint-store-sql.js +86 -71
  733. package/dist/{plugins → stores-sql}/file-history-store-sql.d.ts +23 -11
  734. package/dist/{plugins → stores-sql}/file-history-store-sql.js +23 -18
  735. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  736. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  737. package/dist/{plugins → stores-sql}/pg-session-storage.d.ts +30 -81
  738. package/dist/{plugins → stores-sql}/pg-session-storage.js +123 -244
  739. package/dist/{plugins → stores-sql}/retention-store-sql.d.ts +197 -223
  740. package/dist/{plugins → stores-sql}/retention-store-sql.js +148 -207
  741. package/dist/{plugins → stores-sql}/session-event-payload.d.ts +1 -1
  742. package/dist/{plugins → stores-sql}/session-event-payload.js +1 -1
  743. package/dist/stores-sql/session-policy-store-sql.d.ts +33 -11
  744. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  745. package/dist/stores-sql/session-write-hooks.d.ts +65 -0
  746. package/dist/stores-sql/session-write-hooks.js +2 -0
  747. package/dist/{plugins → stores-sql}/tidb-session-storage.d.ts +14 -15
  748. package/dist/{plugins → stores-sql}/tidb-session-storage.js +22 -28
  749. package/dist/{plugins → stores-sql}/tidb-session-store.d.ts +67 -138
  750. package/dist/{plugins → stores-sql}/tidb-session-store.js +130 -200
  751. package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
  752. package/dist/stores-sql/tool-result-store-sql.js +1 -1
  753. package/dist/stores-sql/windowed-session-storage.d.ts +61 -0
  754. package/dist/stores-sql/windowed-session-storage.js +70 -0
  755. package/dist/submission-exit.d.ts +50 -0
  756. package/dist/submission-exit.js +108 -0
  757. package/dist/task-a2a.d.ts +7 -1
  758. package/dist/task-a2a.js +18 -17
  759. package/dist/task-cwd.d.ts +31 -3
  760. package/dist/task-cwd.js +25 -1
  761. package/dist/task-mcp.d.ts +11 -3
  762. package/dist/task-mcp.js +16 -19
  763. package/dist/task-settings.d.ts +23 -14
  764. package/dist/task-settings.js +35 -13
  765. package/dist/terminal.d.ts +25 -43
  766. package/dist/terminal.js +31 -11
  767. package/dist/tool-approval.d.ts +152 -137
  768. package/dist/tool-approval.js +199 -199
  769. package/dist/trace/core-keyset-guard.d.ts +22 -9
  770. package/dist/trace/core-vocab-wire.d.ts +95 -0
  771. package/dist/trace/core-vocab-wire.js +15 -0
  772. package/dist/trace/engine-notice-wire.d.ts +1 -1
  773. package/dist/trace/engine-notice-wire.js +2 -0
  774. package/dist/trace/exit-seat.d.ts +52 -4
  775. package/dist/trace/exit-seat.js +43 -36
  776. package/dist/trace/extension-call-face.d.ts +3 -2
  777. package/dist/trace/extension-call-face.js +3 -1
  778. package/dist/trace/ledger-events.d.ts +4 -7
  779. package/dist/trace/ledger-sink.d.ts +1 -30
  780. package/dist/trace/ledger-sink.js +0 -11
  781. package/dist/trace/model-segment.d.ts +5 -5
  782. package/dist/trace/model-segment.js +5 -5
  783. package/dist/trace/project.d.ts +88 -58
  784. package/dist/trace/project.js +64 -28
  785. package/dist/trace/redact.d.ts +124 -28
  786. package/dist/trace/redact.js +936 -328
  787. package/dist/trace/self-minted-wire.d.ts +750 -29
  788. package/dist/trace/self-minted-wire.js +262 -25
  789. package/dist/trace/sema-provenance.d.ts +45 -41
  790. package/dist/trace/sema-provenance.js +81 -10
  791. package/dist/trace/task-notification-facets.d.ts +70 -2
  792. package/dist/trace/task-notification-facets.js +71 -1
  793. package/dist/trace/wire-projection-faces.d.ts +43 -8
  794. package/dist/trace/wire-projection-faces.js +28 -3
  795. package/dist/unread-request-members.d.ts +66 -0
  796. package/dist/unread-request-members.js +41 -0
  797. package/dist/upstream-body.d.ts +23 -0
  798. package/dist/upstream-body.js +16 -0
  799. package/dist/url-refusal.d.ts +3 -3
  800. package/dist/url-refusal.js +11 -4
  801. package/dist/user-authored-text.d.ts +1 -1
  802. package/dist/user-input-ledger.d.ts +7 -8
  803. package/dist/user-input-ledger.js +1 -1
  804. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  805. package/dist/web-admin-client/apply-effective.js +33 -40
  806. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  807. package/dist/web-admin-client/apply-ledger.js +5 -2
  808. package/dist/web-admin-client/candidate-gate.d.ts +35 -3
  809. package/dist/web-admin-client/candidate-gate.js +53 -5
  810. package/dist/web-admin-client/center-request.d.ts +6 -3
  811. package/dist/web-admin-client/center-request.js +17 -16
  812. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  813. package/dist/web-admin-client/effective-keys.js +1 -2
  814. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  815. package/dist/web-admin-client/entry-metadata.js +13 -0
  816. package/dist/web-admin-client/facade.d.ts +1 -1
  817. package/dist/web-admin-client/http-client.d.ts +2 -1
  818. package/dist/web-admin-client/http-client.js +40 -13
  819. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  820. package/dist/web-admin-client/mcp-revocation.js +2 -1
  821. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  822. package/dist/web-admin-client/read-warnings.js +1 -0
  823. package/dist/web-admin-client/restart-signal.js +13 -6
  824. package/dist/web-admin-client/skills-mcp.d.ts +22 -8
  825. package/dist/web-admin-client/skills-mcp.js +26 -21
  826. package/dist/web-admin-client/types.d.ts +35 -51
  827. package/dist/workspace-space.d.ts +3 -2
  828. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  829. package/package.json +16 -12
  830. package/scripts/drain-check-local.mjs +118 -173
  831. package/scripts/drain-check.mysql.sql +20 -16
  832. package/scripts/drain-check.pg.sql +20 -16
  833. package/wire-changes/server@7.147.0.json +813 -0
  834. package/wire-changes/server@7.148.0.json +1517 -0
  835. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  836. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  837. package/dist/http/memory-layer-reply.d.ts +0 -30
  838. package/dist/http/memory-layer-reply.js +0 -24
  839. package/dist/lsp/e2b-bridge.d.ts +0 -57
  840. package/dist/lsp/e2b-bridge.js +0 -139
  841. package/dist/lsp/e2b-manager.d.ts +0 -93
  842. package/dist/lsp/e2b-manager.js +0 -178
  843. package/dist/lsp/lsp-frames.d.ts +0 -14
  844. package/dist/lsp/lsp-frames.js +0 -25
  845. package/dist/lsp/manager.d.ts +0 -129
  846. package/dist/lsp/manager.js +0 -127
  847. package/dist/lsp/types.d.ts +0 -12
  848. package/dist/lsp/types.js +0 -2
  849. package/dist/lsp/ws-transport.d.ts +0 -40
  850. package/dist/lsp/ws-transport.js +0 -210
@@ -1,9 +1,10 @@
1
+ import { seatText } from "../../trace/exit-seat.js";
1
2
  import { liveToolEndForBacklog } from "../../trace/tool-output-media.js";
2
3
  import { redactHead, redactLedgerEventForRead } from "../../observability/run-terminal.js";
3
4
  import { z } from "zod";
4
5
  import { uuidv7, mintCheckpointToken, CheckpointError, policyCannotAnswer, validatePendingSteer, TASK_OUTPUT_REPLAY_KINDS, isSystemInjectionPriority } from "@sema-agent/core";
5
- import { isTerminalRunStatus, isParkedRunStatus, runProvenElsewhere } from "../../plugins/store-contracts.js";
6
- import { askOwnerAdmits, askRowCarriesOwner } from "../../plugins/approval-ask-store-sql.js";
6
+ import { isHolderDeathVerdict, isTerminalRunStatus, isParkedRunStatus, runProvenElsewhere } from "../../plugins/store-contracts.js";
7
+ import { askRowCarriesOwner } from "../../plugins/approval-ask-store-sql.js";
7
8
  import { LIVE_RUN_GATE_KINDS, TERMINAL_PARK_GATE_KINDS } from "../../plugins/checkpoint-store-face.js";
8
9
  import { redactSecrets } from "../../trace/redact.js";
9
10
  import { isUuidV7, encodeCheckpointScope } from "../../security.js";
@@ -14,7 +15,7 @@ import { streamSseLog } from "../sse-log.js";
14
15
  import { bindSseLifecycle } from "../sse-lifecycle.js";
15
16
  import { buildApprovalPreamble, buildApprovalPreambleSseFrames, readClosedWordSeat, storedCardDemandsAPerson } from "../../approval-card.js";
16
17
  import { heldAskOf, liveHostSource, readDecider, retiredDecisionKeyFacts, DECIDED_BY_NOT_IN_PROOF, POLICY_CANNOT_ALLOW_PERSON_ASK } from "../../host-decision.js";
17
- import { ASK_DECISION_CONSUMER_ABSENT, approvalPreambleReplays, outcomeOfDecidedRow, presentedApprovalFrameFamily, resolveStreamApprovalGate } from "../../tool-approval.js";
18
+ import { ASK_DECISION_CONSUMER_ABSENT, approvalPreambleReplays, outcomeOfDecidedRow, parkSessionOf, presentedApprovalFrameFamily, resolveStreamApprovalGate } from "../../tool-approval.js";
18
19
  import { MAX_DECISION_NOTE_CHARS, noteLandedOnRow, noteRecordedReceipt } from "../../approval-ask-machine.js";
19
20
  import { askRowEndingCause } from "../../approval-deny-reasons.js";
20
21
  import { normalizeRunEventType, screenedStoredEventData } from "../../trace/project.js";
@@ -22,21 +23,23 @@ import { invalidJsonError, sendJson, sendError, sendHttpError, sseHeaders } from
22
23
  import { mintCancelledResult } from "../../run-cancel-context.js";
23
24
  import { acceptedInputKindOf } from "../../user-input-ledger.js";
24
25
  import { INJECTION_TIERS } from "../../trace/injection-tier.js";
25
- import { headerStr, gatedPrincipal, explicitOperatorOk, sendPrincipalRefusal, runIdentityOf } from "../principal-gate.js";
26
+ import { headerStr, gatedSubject, explicitOperatorOk, sendPrincipalRefusal, runIdentityOf } from "../principal-gate.js";
26
27
  import { ActorAssertionWire } from "@sema-agent/settings-schema";
27
28
  import * as facts from "../../capability-facts.js";
28
29
  import { assertNever } from "../route-ctx.js";
29
30
  import { readRunFace } from "../run-read-face.js";
30
31
  import { replayOfExistingRun } from "../submit-replay.js";
31
32
  import { mintAndDriveDurableRun } from "../durable-run-leg.js";
32
- import { RUN_NOT_FOUND_MESSAGE, runNotFoundMessage } from "../route-ctx.js";
33
- import { withPrincipal } from "../../observability/principal-context.js";
34
- import { readResumeCtx } from "../resume-ctx-read.js";
33
+ import { admitRunById, admitRunRow, enter, runRowAt } from "../owner-access.js";
34
+ import { keyAdmission, ownerCellOf, recoveredSubject } from "../../owner-faces.js";
35
+ import { personOf } from "../../owner-brands.js";
36
+ import { withSubject } from "../../observability/principal-context.js";
37
+ import { readResumeCtx, resumeCtxUnreadableAnswer } from "../resume-ctx-read.js";
35
38
  import { storedBodyReplayAnswer, storedBodyReplayLogFields } from "../checkpoint-ctx.js";
36
39
  import { headReadOf } from "../../session-incarnation.js";
37
40
  import { serviceVersion } from "../../service-version.js";
38
41
  import { storedBodyReplayRefusal } from "../stored-body-replay.js";
39
- import { steerBodyKeyIssue } from "../../request-key-closure.js";
42
+ import { haltBodyIssue, steerBodyKeyIssue } from "../../request-key-closure.js";
40
43
  import { fieldConflictFacts } from "../../field-conflict.js";
41
44
  const STEER_PRIORITY_WORDS = INJECTION_TIERS.map((tier) => `'${tier}'`);
42
45
  const STEER_PRIORITY_UNION = STEER_PRIORITY_WORDS.join(" | ");
@@ -78,28 +81,16 @@ export function projectDecisionActor(raw) {
78
81
  const parsed = AskDecisionActorSchema.safeParse(raw);
79
82
  return parsed.success ? parsed.data : undefined;
80
83
  }
81
- async function subagentReadGate(req, res, ctx, runId, search) {
84
+ async function subagentReadGate(req, res, ctx, runId, route) {
82
85
  const { deps } = ctx;
83
- const principal = gatedPrincipal(req, deps.config);
84
- if (deps.config.requirePrincipal && principal === undefined) {
85
- sendPrincipalRefusal(res, req, deps.config);
86
+ const entry = enter(req, res, deps, route);
87
+ if (entry === undefined)
86
88
  return null;
87
- }
88
- const trusted = explicitOperatorOk(principal, deps.config);
89
- const run = await deps.runStore.getRun(runId);
90
- if (!run) {
91
- sendError(res, 404, "not_found.run", RUN_NOT_FOUND_MESSAGE);
92
- return null;
93
- }
94
- if (!trusted && !ctx.helpers.runOwnerOk(req, res, run.owner)) {
89
+ const admitted = (await admitRunById(entry, res, deps.runStore, runId));
90
+ if (admitted === undefined)
95
91
  return null;
96
- }
97
- const callerSession = new URLSearchParams(search).get("session");
98
- if (!trusted && run.sessionId && callerSession !== run.sessionId) {
99
- sendError(res, 404, "not_found.run", RUN_NOT_FOUND_MESSAGE);
100
- return null;
101
- }
102
- return { run, trusted };
92
+ const trusted = admitted.quals.has("operator");
93
+ return { run: admitted.row, trusted };
103
94
  }
104
95
  function sendHandleMiss(res, run, thisInstanceId) {
105
96
  if (isTerminalRunStatus(run.status)) {
@@ -112,7 +103,7 @@ function sendHandleMiss(res, run, thisInstanceId) {
112
103
  }
113
104
  return false;
114
105
  }
115
- async function streamRunEvents(req, res, deps, runStore, taskId, staleMs) {
106
+ async function streamRunEvents(req, res, deps, runStore, taskId) {
116
107
  await streamSseLog(req, res, {
117
108
  preamble: async (signal) => {
118
109
  const gate = resolveStreamApprovalGate({
@@ -143,7 +134,7 @@ async function streamRunEvents(req, res, deps, runStore, taskId, staleMs) {
143
134
  onPreambleFailure: (reason, err) => deps.logger?.warn?.("approval_preamble_failed", { taskId, reason, face: "run.events", error: err instanceof Error ? err.message : String(err ?? "") }),
144
135
  statusOf: async (id) => {
145
136
  const run = await runStore.getRun(id);
146
- return run ? { status: run.status, updatedAt: run.updatedAt } : undefined;
137
+ return run ? runRowAt("run-events", runStore, run) : undefined;
147
138
  },
148
139
  getEvents: (id, after) => runStore.getEvents(id, after),
149
140
  formatEvent: (ev) => {
@@ -152,13 +143,16 @@ async function streamRunEvents(req, res, deps, runStore, taskId, staleMs) {
152
143
  const data = screenedStoredEventData(type, redacted);
153
144
  return { id: ev.seq, event: type, data: { type, ...(data ?? {}) } };
154
145
  },
155
- staleFrame: () => ({ event: "failed", data: { type: "failed", errorMessage: "run stalled (instance lost?)" } }),
156
- }, taskId, staleMs);
146
+ isTerminalEvent: (ev) => ev.type === "done" || ev.type === "failed",
147
+ closingFrameOf: (row, deliveredTerminal) => !deliveredTerminal && isHolderDeathVerdict(row)
148
+ ? { event: "failed", data: { type: "failed", ...(row.error !== null ? { errorMessage: seatText("trace-frame-text", row.error) } : {}), errorCode: row.errorCode } }
149
+ : undefined,
150
+ }, taskId);
157
151
  }
158
152
  function sendSteerReplayRefusal(res, refusal) {
159
153
  const detail = refusal?.detail;
160
154
  const differs = detail !== null && typeof detail === "object" ? readClosedWordSeat(detail, "differs") : undefined;
161
- sendError(res, 409, "steering.duplicate_input_id", refusal instanceof Error ? refusal.message : "this steering input id was already accepted with different values", differs !== undefined ? { detail: { differs } } : undefined);
155
+ sendError(res, 409, "steering.duplicate_input_id", refusal instanceof Error ? refusal.message : "this steering input id was already accepted with different values", differs !== undefined ? { differs } : undefined);
162
156
  }
163
157
  async function acceptLiveUserInput(deps, res, at) {
164
158
  if (!deps.userInputLedger)
@@ -190,7 +184,7 @@ async function relayAcceptedInput(deps, acceptance, call) {
190
184
  export async function handleRuns(req, res, match, ctx) {
191
185
  const { deps } = ctx;
192
186
  const { idemCache, inflightRuns, preemptableRuns, steerableRuns, wakeParkMints } = ctx.registry;
193
- const { readJson, rateLimited, quotaExceeded, leaseDenied, usageWindowDenied, runOwnerOk, runSessionAcceptOk } = ctx.helpers;
187
+ const { readJson, rateLimited, quotaExceeded, leaseDenied, usageWindowDenied } = ctx.helpers;
194
188
  const { prepareSpec } = ctx.legs;
195
189
  const source = ctx.req.source;
196
190
  if (match.decl.id === "runs-submit") {
@@ -201,7 +195,7 @@ export async function handleRuns(req, res, match, ctx) {
201
195
  }
202
196
  const runStore = runs.runStore;
203
197
  const rawIdem = headerStr(req.headers["idempotency-key"]);
204
- const submitter = gatedPrincipal(req, deps.config);
198
+ const submitter = gatedSubject(req, deps.config);
205
199
  const keyedBody = rawIdem ? await readJson(req) : undefined;
206
200
  const idem = rawIdem ? submissionIdemOf(rawIdem, idemCallerOf(req, ctx), keyedBody) : undefined;
207
201
  if (idem) {
@@ -213,14 +207,19 @@ export async function handleRuns(req, res, match, ctx) {
213
207
  const inflight = idemCache.peek(inflightKeyOf(idem, "durable", clientTaskId));
214
208
  const keyedRow = inflight ? undefined : await runStore.getRunByIdem(idem.key);
215
209
  if (inflight || keyedRow) {
216
- const resp = inflight ? await inflight : await replayOfExistingRun(keyedRow, { principal: submitter, idem, ...(clientTaskId !== undefined ? { clientTaskId } : {}) }, "durable", deps, runStore);
210
+ const resp = inflight ? await inflight : await replayOfExistingRun(keyedRow, { subject: submitter, idem, ...(clientTaskId !== undefined ? { clientTaskId } : {}) }, "durable", deps, runStore);
217
211
  sendJson(res, resp.status, resp.body);
218
212
  return;
219
213
  }
220
214
  }
221
215
  if (rateLimited(req, res) || quotaExceeded(req, res))
222
216
  return;
223
- const prepared = await prepareSpec(req, res, keyedBody);
217
+ const body = rawIdem ? keyedBody : await readJson(req);
218
+ if (!idem && clientTaskIdOf(body) === false) {
219
+ sendError(res, 400, "request.id_invalid", "body.taskId must be a uuidv7 string (caller-minted idempotency key)");
220
+ return;
221
+ }
222
+ const prepared = await prepareSpec(req, res, body);
224
223
  if (!prepared)
225
224
  return;
226
225
  try {
@@ -241,12 +240,11 @@ export async function handleRuns(req, res, match, ctx) {
241
240
  return;
242
241
  }
243
242
  const runStore = runs.runStore;
244
- if (deps.config.requirePrincipal && !gatedPrincipal(req, deps.config)) {
245
- sendPrincipalRefusal(res, req, deps.config);
243
+ const entry = enter(req, res, deps, match.decl.id);
244
+ if (entry === undefined)
246
245
  return;
247
- }
248
246
  let run;
249
- let notFound;
247
+ let pathId;
250
248
  if (match.decl.id === "runs-by-idem") {
251
249
  const rawKey = new URLSearchParams(match.search).get("idempotencyKey");
252
250
  if (!rawKey) {
@@ -254,27 +252,20 @@ export async function handleRuns(req, res, match, ctx) {
254
252
  return;
255
253
  }
256
254
  run = await runStore.getRunByIdem(idemKeyOf(rawKey, idemCallerOf(req, ctx), "run"));
257
- notFound = RUN_NOT_FOUND_MESSAGE;
258
255
  }
259
256
  else {
260
- const taskId = match.params.taskId;
261
- run = await runStore.getRun(taskId);
262
- notFound = runNotFoundMessage(taskId);
263
- }
264
- if (!run) {
265
- sendError(res, 404, "not_found.run", notFound);
266
- return;
257
+ pathId = match.params.taskId;
258
+ run = await runStore.getRun(pathId);
267
259
  }
268
- const taskId = run.taskId;
269
- if (!runOwnerOk(req, res, run.owner))
270
- return;
271
- if (!runSessionAcceptOk(req, res, run, match.decl.id === "run-events" ? "run.events" : "run.poll"))
260
+ const admitted = await admitRunRow(entry, res, runStore, run, pathId);
261
+ if (admitted === undefined)
272
262
  return;
263
+ const taskId = admitted.row.taskId;
273
264
  if (match.decl.id === "run-events") {
274
- await streamRunEvents(req, res, deps, runStore, taskId, deps.config.runStaleSec * 1000);
265
+ await streamRunEvents(req, res, deps, runStore, taskId);
275
266
  }
276
267
  else {
277
- sendJson(res, 200, await readRunFace(deps, runStore, run));
268
+ sendJson(res, 200, await readRunFace(deps, runStore, admitted.row));
278
269
  }
279
270
  return;
280
271
  }
@@ -285,26 +276,20 @@ export async function handleRuns(req, res, match, ctx) {
285
276
  return;
286
277
  }
287
278
  const runStore = runs.runStore;
288
- if (deps.config.requirePrincipal && !gatedPrincipal(req, deps.config)) {
289
- sendPrincipalRefusal(res, req, deps.config);
279
+ const entry = enter(req, res, deps, match.decl.id);
280
+ if (entry === undefined)
290
281
  return;
291
- }
292
282
  const taskId = match.params.taskId;
293
- const run = await runStore.getRun(taskId);
294
- if (!run) {
295
- sendError(res, 404, "not_found.run", runNotFoundMessage(taskId));
296
- return;
297
- }
298
- if (!runOwnerOk(req, res, run.owner))
299
- return;
300
- if (!runSessionAcceptOk(req, res, run, "run.cancel"))
283
+ const cancelAdmitted = (await admitRunById(entry, res, runStore, taskId));
284
+ if (cancelAdmitted === undefined)
301
285
  return;
286
+ const run = cancelAdmitted.row;
302
287
  const rs = runStore;
303
288
  const cancelSuspended = async () => {
304
289
  const cs = deps.checkpointStore;
305
290
  let note = "cancelled while suspended (pending approval settled)";
306
291
  if (cs) {
307
- const token = await cs.findPendingTokenBySession(run.sessionId, undefined, { gateKinds: LIVE_RUN_GATE_KINDS });
292
+ const token = await cs.findPendingTokenBySession(run.sessionId, undefined, { gateKinds: LIVE_RUN_GATE_KINDS, axis: "run" });
308
293
  if (token) {
309
294
  const cp = await cs.get(token);
310
295
  const won = cp ? await cs.expire(token, cp.scope) : false;
@@ -410,11 +395,9 @@ export async function handleRuns(req, res, match, ctx) {
410
395
  return;
411
396
  }
412
397
  const runStore = runs.runStore;
413
- const principal = gatedPrincipal(req, deps.config);
414
- if (deps.config.requirePrincipal && principal === undefined) {
415
- sendPrincipalRefusal(res, req, deps.config);
398
+ const entry = enter(req, res, deps, match.decl.id);
399
+ if (entry === undefined)
416
400
  return;
417
- }
418
401
  const taskId = match.params.taskId;
419
402
  const body = ((await readJson(req)) ?? {});
420
403
  if (typeof body.text !== "string" || body.text.length === 0) {
@@ -440,10 +423,9 @@ export async function handleRuns(req, res, match, ctx) {
440
423
  const priority = body.priority;
441
424
  const steerIdemRaw = headerStr(req.headers["idempotency-key"]);
442
425
  const messageId = steerIdemRaw ? `idem-${idemKeyOf(steerIdemRaw, idemCallerOf(req, ctx), "run").slice(0, 32)}` : uuidv7();
443
- const trusted = explicitOperatorOk(principal, deps.config);
444
426
  const steerInput = () => ({
445
427
  text,
446
- trusted,
428
+ trusted: false,
447
429
  inputId: messageId,
448
430
  ...(priority !== undefined ? { priority } : {}),
449
431
  });
@@ -457,15 +439,10 @@ export async function handleRuns(req, res, match, ctx) {
457
439
  }
458
440
  throw e;
459
441
  }
460
- const run = await runStore.getRun(taskId);
461
- if (!run) {
462
- sendError(res, 404, "not_found.run", runNotFoundMessage(taskId));
463
- return;
464
- }
465
- if (!trusted && !runOwnerOk(req, res, run.owner))
466
- return;
467
- if (!runSessionAcceptOk(req, res, run, "run.steer"))
442
+ const steerAdmitted = (await admitRunById(entry, res, runStore, taskId));
443
+ if (steerAdmitted === undefined)
468
444
  return;
445
+ const run = steerAdmitted.row;
469
446
  let parkQueueFull;
470
447
  let parkDuplicateKey;
471
448
  const tryPark = async () => {
@@ -473,7 +450,7 @@ export async function handleRuns(req, res, match, ctx) {
473
450
  if (!park.available)
474
451
  return "no-store";
475
452
  const cs = park.checkpointStore;
476
- const parkBinding = { gateKinds: LIVE_RUN_GATE_KINDS };
453
+ const parkBinding = { gateKinds: LIVE_RUN_GATE_KINDS, axis: "run" };
477
454
  const scope = await cs.peekPendingScope(run.sessionId, parkBinding);
478
455
  if (scope === null || scope === undefined)
479
456
  return "no-checkpoint";
@@ -505,7 +482,7 @@ export async function handleRuns(req, res, match, ctx) {
505
482
  if (acceptance === "refused")
506
483
  return;
507
484
  try {
508
- await relayAcceptedInput(deps, acceptance, () => live.steer(text, { trusted, inputId: messageId, ...(priority !== undefined ? { priority } : {}) }));
485
+ await relayAcceptedInput(deps, acceptance, () => live.steer(text, { trusted: false, inputId: messageId, ...(priority !== undefined ? { priority } : {}) }));
509
486
  sendJson(res, 200, { taskId, status: "running", delivery: "applied", messageId, ...(priority ? { priority } : {}) });
510
487
  return;
511
488
  }
@@ -583,7 +560,7 @@ export async function handleRuns(req, res, match, ctx) {
583
560
  return;
584
561
  }
585
562
  const prior = wakeParkMints.get(run.sessionId) ?? Promise.resolve();
586
- const mintResult = { parked: false, queueFull: false, duplicateKey: false, noResumeCtx: false };
563
+ const mintResult = { parked: false, queueFull: false, duplicateKey: false, noResumeCtx: false, unreadableCtx: false };
587
564
  const parkOnce = async (t, sc) => {
588
565
  try {
589
566
  if (await deps.checkpointStore.setPendingSteer(t, sc, steerInput()))
@@ -638,6 +615,10 @@ export async function handleRuns(req, res, match, ctx) {
638
615
  mintResult.unsealableCtx = resumeRead;
639
616
  return;
640
617
  }
618
+ if (resumeRead.kind === "unreadable") {
619
+ mintResult.unreadableCtx = true;
620
+ return;
621
+ }
641
622
  if (resumeRead.kind === "absent") {
642
623
  mintResult.noResumeCtx = true;
643
624
  return;
@@ -661,7 +642,11 @@ export async function handleRuns(req, res, match, ctx) {
661
642
  createdAt: Date.now(),
662
643
  sourceSessionId: run.sessionId,
663
644
  });
664
- const stillRead = await readResumeCtx(cs.getCtx(run.sessionId), { sessionId: run.sessionId, opener: deps.checkpointCtxSealing });
645
+ const withdrawThenRethrow = async (e) => {
646
+ await withdrawWakeCard(wakeToken, cpScope, "resume_context_defect");
647
+ throw e;
648
+ };
649
+ const stillRead = await readResumeCtx(cs.getCtx(run.sessionId), { sessionId: run.sessionId, opener: deps.checkpointCtxSealing }).catch(withdrawThenRethrow);
665
650
  if (stillRead.kind === "corrupt" || stillRead.kind === "unsealable") {
666
651
  await withdrawWakeCard(wakeToken, cpScope, stillRead.kind === "corrupt" ? "resume_context_corrupt" : "resume_context_unsealable");
667
652
  if (stillRead.kind === "corrupt")
@@ -670,12 +655,17 @@ export async function handleRuns(req, res, match, ctx) {
670
655
  mintResult.unsealableCtx = stillRead;
671
656
  return;
672
657
  }
658
+ if (stillRead.kind === "unreadable") {
659
+ await withdrawWakeCard(wakeToken, cpScope, "resume_context_unreadable");
660
+ mintResult.unreadableCtx = true;
661
+ return;
662
+ }
673
663
  if (stillRead.kind !== "ok") {
674
664
  await withdrawWakeCard(wakeToken, cpScope, "resume_context_absent");
675
665
  mintResult.noResumeCtx = true;
676
666
  return;
677
667
  }
678
- const winner = await cs.findPendingTokenBySession(run.sessionId, undefined, { gateKinds: TERMINAL_PARK_GATE_KINDS, pick: "oldest" }).catch(() => null);
668
+ const winner = await cs.findPendingTokenBySession(run.sessionId, undefined, { gateKinds: TERMINAL_PARK_GATE_KINDS, pick: "oldest", axis: "run" }).catch(() => null);
679
669
  if (winner !== null && winner !== wakeToken) {
680
670
  await withdrawWakeCard(wakeToken, cpScope, "converged_on_winner");
681
671
  await parkOnce(winner, cpScope);
@@ -708,6 +698,11 @@ export async function handleRuns(req, res, match, ctx) {
708
698
  sendError(res, 409, "conflict.checkpoint_ctx_unsealable", "run already ended and this session's stored resume context holds credentials this server cannot unseal (reason says why) — nothing was queued, because POST /v1/sessions/:id/wake could not resume it; restore the sealed-key directory that sealed them, restart this server (it reads its keys only at startup) and steer again, or submit a new task instead", { field: mintResult.unsealableCtx.field, reason: mintResult.unsealableCtx.reason });
709
699
  return;
710
700
  }
701
+ if (mintResult.unreadableCtx) {
702
+ const { status, body: { error, errorCode, ...facts } } = resumeCtxUnreadableAnswer();
703
+ sendError(res, status, errorCode, error, facts);
704
+ return;
705
+ }
711
706
  if (mintResult.unservable !== undefined) {
712
707
  deps.logger?.warn?.("steer_wake_park_refused_stored_body", { taskId, sessionId: run.sessionId, ...storedBodyReplayLogFields(mintResult.unservable) });
713
708
  const { status, body: { error, errorCode, ...rest } } = storedBodyReplayAnswer(mintResult.unservable, serviceVersion(), false);
@@ -735,62 +730,23 @@ export async function handleRuns(req, res, match, ctx) {
735
730
  return;
736
731
  }
737
732
  const runStore = runs.runStore;
738
- const principal = gatedPrincipal(req, deps.config);
739
- if (deps.config.requirePrincipal && principal === undefined) {
740
- sendPrincipalRefusal(res, req, deps.config);
733
+ const entry = enter(req, res, deps, match.decl.id);
734
+ if (entry === undefined)
741
735
  return;
742
- }
743
736
  const taskId = match.params.taskId;
744
- const interruptRaw = await readJson(req);
745
- const interruptNormalized = interruptRaw === null || interruptRaw === undefined ? {} : interruptRaw;
746
- if (typeof interruptNormalized !== "object" || Array.isArray(interruptNormalized)) {
747
- sendError(res, 400, "request.body_shape", "body must be {} (bare halt: cut the in-flight turn and stop the run at this boundary) or { text: string (non-empty) } (cut + steer: the text reaches the model after the cut)");
748
- return;
749
- }
750
- const interruptBody = interruptNormalized;
751
- const interruptBare = !("text" in interruptBody);
752
- let text = "";
753
- if (!interruptBare) {
754
- if (typeof interruptBody.text !== "string" || interruptBody.text.length === 0) {
755
- sendError(res, 400, "request.body_shape", "body must be {} (bare halt: cut the in-flight turn and stop the run at this boundary) or { text: string (non-empty) } (cut + steer: the text reaches the model after the cut)");
756
- return;
757
- }
758
- text = interruptBody.text;
759
- }
760
- const keyIssue = steerBodyKeyIssue(interruptBody, "interrupt");
761
- if (keyIssue) {
762
- sendError(res, 400, "request.body_shape", keyIssue.message, { unknownKeys: keyIssue.unknownKeys, unsupportedKeys: keyIssue.unsupportedKeys });
737
+ const haltIssue = haltBodyIssue(await readJson(req));
738
+ if (haltIssue) {
739
+ sendError(res, 400, "request.body_shape", haltIssue.message, { unknownKeys: haltIssue.unknownKeys, unsupportedKeys: haltIssue.unsupportedKeys });
763
740
  return;
764
741
  }
765
- const interruptIdemRaw = headerStr(req.headers["idempotency-key"]);
766
- const interruptInputId = interruptIdemRaw ? `idem-${idemKeyOf(interruptIdemRaw, idemCallerOf(req, ctx), "run").slice(0, 32)}` : uuidv7();
767
- const interruptMessageId = interruptInputId;
768
- const trusted = explicitOperatorOk(principal, deps.config);
769
- if (!interruptBare) {
770
- try {
771
- validatePendingSteer({ text, trusted, inputId: interruptInputId });
772
- }
773
- catch (e) {
774
- if (e instanceof CheckpointError && e.code === "steering.invalid_content") {
775
- sendError(res, 422, "steering.invalid_content", e.message);
776
- return;
777
- }
778
- throw e;
779
- }
780
- }
781
- const run = await runStore.getRun(taskId);
782
- if (!run) {
783
- sendError(res, 404, "not_found.run", runNotFoundMessage(taskId));
784
- return;
785
- }
786
- if (!trusted && !runOwnerOk(req, res, run.owner))
787
- return;
788
- if (!runSessionAcceptOk(req, res, run, "run.interrupt"))
742
+ const interruptAdmitted = (await admitRunById(entry, res, runStore, taskId));
743
+ if (interruptAdmitted === undefined)
789
744
  return;
745
+ const run = interruptAdmitted.row;
790
746
  const sendInterruptNotRunning = (error) => sendError(res, 409, "steering.not_running", error);
791
747
  const sendNoLiveTurn = (status, streamJustSettled) => {
792
748
  if (isParkedRunStatus(status)) {
793
- sendError(res, 409, "interrupt.nothing_in_flight", "run is waiting on a pending decision — there is no in-flight turn to interrupt; to deliver input use POST /v1/runs/:id/steer (it waits with the pending decision and is delivered when the run resumes)");
749
+ sendError(res, 409, "interrupt.nothing_in_flight", "run is waiting on a pending decision — there is no in-flight turn to interrupt; answer that decision to let the run resume, or POST /v1/runs/:id/cancel to stop the run");
794
750
  return;
795
751
  }
796
752
  if (streamJustSettled) {
@@ -814,53 +770,23 @@ export async function handleRuns(req, res, match, ctx) {
814
770
  sendNoLiveTurn(run.status, false);
815
771
  return;
816
772
  }
817
- if (interruptBare) {
818
- let haltReceipt;
819
- try {
820
- haltReceipt = await liveStream.halt();
821
- }
822
- catch (e) {
823
- if (e.code !== "steering.not_running")
824
- throw e;
825
- const freshRun = await runStore.getRun(taskId).catch(() => undefined);
826
- sendNoLiveTurn(freshRun?.status ?? run.status, true);
827
- return;
828
- }
829
- sendJson(res, 202, {
830
- taskId,
831
- status: run.status,
832
- turnCut: haltReceipt.turnCut,
833
- note: "halt accepted — cut + stop: turnCut reports whether THIS call cut a live turn (repeat calls answer turnCut:false once the stop is latched). A halt that CONSUMES (it cut a turn, or stopped the loop at a boundary) ends the run at that boundary as status:\"completed\" with haltedByUser:true — resume by submitting the next objective on the same session. Each real cut is marked by a task.turn_interrupted event with detail.cause:\"user_halt\". A halt racing the run's natural last moments consumes NOTHING: the run's own ending stands (completed with the answer as result, or failed when the model's own abort owns the final) and the result does NOT carry haltedByUser — the only trace of that halt is a task.halt_unconsumed engine notice.",
834
- });
835
- return;
836
- }
837
- const acceptance = await acceptLiveUserInput(deps, res, { messageId: interruptMessageId, sessionId: run.sessionId, taskId, leg: liveStream, tier: "now" });
838
- if (acceptance === "refused")
839
- return;
773
+ let haltReceipt;
840
774
  try {
841
- await relayAcceptedInput(deps, acceptance, () => liveStream.steer(text, { trusted, priority: "now", ...(interruptInputId !== undefined ? { inputId: interruptInputId } : {}) }));
775
+ haltReceipt = await liveStream.halt();
842
776
  }
843
777
  catch (e) {
844
- const code = e.code;
845
- if (code === "steering.invalid_content") {
846
- sendError(res, 422, "steering.invalid_content", e instanceof Error ? e.message : "invalid steering content");
847
- return;
848
- }
849
- if (code === "steering.blocked_by_hook") {
850
- sendError(res, 422, "steering.blocked_by_hook", e instanceof Error ? e.message : "the deployment's userPromptSubmit hook refused this input (fail-closed)");
851
- return;
852
- }
853
- if (code === "steering.duplicate_input_id") {
854
- sendSteerReplayRefusal(res, e);
855
- return;
856
- }
857
- if (code !== "steering.not_running")
778
+ if (e.code !== "steering.not_running")
858
779
  throw e;
859
780
  const freshRun = await runStore.getRun(taskId).catch(() => undefined);
860
781
  sendNoLiveTurn(freshRun?.status ?? run.status, true);
861
782
  return;
862
783
  }
863
- sendJson(res, 202, { taskId, status: run.status, delivery: "queued-immediate", messageId: interruptMessageId, note: "interrupt accepted — the cut is best-effort: a task.turn_interrupted event on the run stream is the proof a turn was actually cut; with nothing in flight the text lands at the next turn boundary" });
784
+ sendJson(res, 202, {
785
+ taskId,
786
+ status: run.status,
787
+ turnCut: haltReceipt.turnCut,
788
+ note: "halt accepted — cut + stop: turnCut reports whether THIS call cut a live turn (repeat calls answer turnCut:false once the stop is latched). A halt that CONSUMES (it cut a turn, or stopped the loop at a boundary) ends the run at that boundary as status:\"completed\" with haltedByUser:true — resume by submitting the next objective on the same session. Each real cut is marked by a task.turn_interrupted event with detail.cause:\"user_halt\". A halt racing the run's natural last moments consumes NOTHING: the run's own ending stands (completed with the answer as result, or failed when the model's own abort owns the final) and the result does NOT carry haltedByUser — the only trace of that halt is a task.halt_unconsumed engine notice.",
789
+ });
864
790
  return;
865
791
  }
866
792
  if (match.decl.id === "run-compact") {
@@ -872,22 +798,14 @@ export async function handleRuns(req, res, match, ctx) {
872
798
  return;
873
799
  }
874
800
  const runStore = runs.runStore;
875
- const principal = gatedPrincipal(req, deps.config);
876
- if (deps.config.requirePrincipal && principal === undefined) {
877
- sendPrincipalRefusal(res, req, deps.config);
801
+ const entry = enter(req, res, deps, match.decl.id);
802
+ if (entry === undefined)
878
803
  return;
879
- }
880
804
  const taskId = match.params.taskId;
881
- const run = await runStore.getRun(taskId);
882
- if (!run) {
883
- sendError(res, 404, "not_found.run", RUN_NOT_FOUND_MESSAGE);
884
- return;
885
- }
886
- const operator = explicitOperatorOk(principal, deps.config);
887
- if (!operator && !runOwnerOk(req, res, run.owner))
888
- return;
889
- if (!runSessionAcceptOk(req, res, run, "run.compact"))
805
+ const compactAdmitted = (await admitRunById(entry, res, runStore, taskId));
806
+ if (compactAdmitted === undefined)
890
807
  return;
808
+ const run = compactAdmitted.row;
891
809
  const parsed = await readJson(req);
892
810
  if (parsed === null || typeof parsed !== "object") {
893
811
  sendHttpError(res, invalidJsonError("not_object"));
@@ -927,27 +845,19 @@ export async function handleRuns(req, res, match, ctx) {
927
845
  return;
928
846
  }
929
847
  const runStore = runs.runStore;
930
- const principal = gatedPrincipal(req, deps.config);
931
- if (deps.config.requirePrincipal && principal === undefined) {
932
- sendPrincipalRefusal(res, req, deps.config);
848
+ const entry = enter(req, res, deps, match.decl.id);
849
+ if (entry === undefined)
933
850
  return;
934
- }
935
851
  const taskId = match.params.taskId;
936
852
  const body = ((await readJson(req)) ?? {});
937
853
  if (typeof body.toolCallId !== "string" || body.toolCallId.length === 0 || body.toolCallId.length > 256) {
938
854
  sendError(res, 400, "request.body_shape", "body must be { toolCallId: string (non-empty, ≤256 chars) }");
939
855
  return;
940
856
  }
941
- const run = await runStore.getRun(taskId);
942
- if (!run) {
943
- sendError(res, 404, "not_found.run", RUN_NOT_FOUND_MESSAGE);
944
- return;
945
- }
946
- const operator = explicitOperatorOk(principal, deps.config);
947
- if (!operator && !runOwnerOk(req, res, run.owner))
948
- return;
949
- if (!runSessionAcceptOk(req, res, run, "run.detach"))
857
+ const detachAdmitted = (await admitRunById(entry, res, runStore, taskId));
858
+ if (detachAdmitted === undefined)
950
859
  return;
860
+ const run = detachAdmitted.row;
951
861
  const live = steerableRuns.get(taskId);
952
862
  if (!live) {
953
863
  sendError(res, 409, "detach.not_running", run.status === "running" ? "run is active on another replica — detach is replica-local" : `run is ${run.status} — no running tool call to detach`);
@@ -961,7 +871,7 @@ export async function handleRuns(req, res, match, ctx) {
961
871
  }
962
872
  export async function handleRunVerbs(req, res, match, ctx) {
963
873
  const { deps } = ctx;
964
- const { readJson, rateLimited, quotaExceeded, ownerQuotaDenied, leaseDenied, ownerLeaseDenied, safeDecode, runOwnerOk, runSessionAcceptOk } = ctx.helpers;
874
+ const { readJson, rateLimited, quotaExceeded, ownerQuotaDenied, leaseDenied, ownerLeaseDenied, safeDecode } = ctx.helpers;
965
875
  if (match.decl.id === "run-subagent-output") {
966
876
  const outputFact = facts.subagentOutput(deps);
967
877
  if (!outputFact.available) {
@@ -976,7 +886,7 @@ export async function handleRunVerbs(req, res, match, ctx) {
976
886
  sendError(res, 400, "request.path_malformed", "malformed subagent path (invalid percent-encoding)");
977
887
  return;
978
888
  }
979
- const gated = await subagentReadGate(req, res, ctx, runId, match.search);
889
+ const gated = await subagentReadGate(req, res, ctx, runId, match.decl.id);
980
890
  if (!gated)
981
891
  return;
982
892
  const { run } = gated;
@@ -1004,7 +914,7 @@ export async function handleRunVerbs(req, res, match, ctx) {
1004
914
  sendError(res, 400, "request.path_malformed", "malformed subagent path (invalid percent-encoding)");
1005
915
  return;
1006
916
  }
1007
- const gatedTail = await subagentReadGate(req, res, ctx, runId, match.search);
917
+ const gatedTail = await subagentReadGate(req, res, ctx, runId, match.decl.id);
1008
918
  if (!gatedTail)
1009
919
  return;
1010
920
  const { run } = gatedTail;
@@ -1072,7 +982,7 @@ export async function handleRunVerbs(req, res, match, ctx) {
1072
982
  sendError(res, 400, "request.path_malformed", "malformed task path (invalid percent-encoding)");
1073
983
  return;
1074
984
  }
1075
- const gatedB = await subagentReadGate(req, res, ctx, runId, match.search);
985
+ const gatedB = await subagentReadGate(req, res, ctx, runId, match.decl.id);
1076
986
  if (!gatedB)
1077
987
  return;
1078
988
  const { run } = gatedB;
@@ -1137,11 +1047,9 @@ export async function handleRunVerbs(req, res, match, ctx) {
1137
1047
  return;
1138
1048
  }
1139
1049
  const runStore = steerFact.runStore;
1140
- const principal = gatedPrincipal(req, deps.config);
1141
- if (deps.config.requirePrincipal && principal === undefined) {
1142
- sendPrincipalRefusal(res, req, deps.config);
1050
+ const entry = enter(req, res, deps, match.decl.id);
1051
+ if (entry === undefined)
1143
1052
  return;
1144
- }
1145
1053
  const runId = safeDecode(match.params.runId);
1146
1054
  const target = safeDecode(match.params.sub);
1147
1055
  if (runId === null || target === null) {
@@ -1164,16 +1072,10 @@ export async function handleRunVerbs(req, res, match, ctx) {
1164
1072
  sendError(res, 413, "steer.content_too_large", `content exceeds ${STEER_IN_MAX_REQUEST_CHARS} characters (got ${body.content.length}); note only the first ${STEER_IN_MAX_CHARS} are delivered anyway`);
1165
1073
  return;
1166
1074
  }
1167
- const trusted = explicitOperatorOk(principal, deps.config);
1168
- const run = await runStore.getRun(runId);
1169
- if (!run) {
1170
- sendError(res, 404, "not_found.run", RUN_NOT_FOUND_MESSAGE);
1171
- return;
1172
- }
1173
- if (!trusted && !runOwnerOk(req, res, run.owner))
1174
- return;
1175
- if (!runSessionAcceptOk(req, res, run, `subagent.${verb}`))
1075
+ const childAdmitted = (await admitRunById(entry, res, runStore, runId));
1076
+ if (childAdmitted === undefined)
1176
1077
  return;
1078
+ const run = childAdmitted.row;
1177
1079
  const send409 = (errorCode, error) => sendError(res, 409, errorCode, error);
1178
1080
  const redacted = redactSteerIn(body.content, target);
1179
1081
  const resolution = steerFact.registry.resolve(runId, target);
@@ -1194,7 +1096,7 @@ export async function handleRunVerbs(req, res, match, ctx) {
1194
1096
  if (await ownerLeaseDenied(res, run.owner ?? undefined))
1195
1097
  return;
1196
1098
  const resumeFn = handle.resume;
1197
- const marker = await withPrincipal(run.owner ?? undefined, () => resumeFn(redacted));
1099
+ const marker = await withSubject(recoveredSubject(run.owner), () => resumeFn(redacted));
1198
1100
  sendJson(res, 200, { taskId: runId, target, status: "running", delivery: "applied", marker, note: `Message queued for delivery to ${handle.agentName ?? target}; it will continue in the background.` });
1199
1101
  return;
1200
1102
  }
@@ -1241,7 +1143,7 @@ export async function handleRunVerbs(req, res, match, ctx) {
1241
1143
  sendError(res, 501, "feature.elicitation_disabled", "inbound MCP elicitation is not enabled on this worker (MCP_ELICITATION_ENABLED)");
1242
1144
  return;
1243
1145
  }
1244
- const principal = gatedPrincipal(req, deps.config);
1146
+ const principal = gatedSubject(req, deps.config);
1245
1147
  if (deps.config.requirePrincipal && principal === undefined) {
1246
1148
  sendPrincipalRefusal(res, req, deps.config);
1247
1149
  return;
@@ -1260,7 +1162,7 @@ export async function handleRunVerbs(req, res, match, ctx) {
1260
1162
  sendError(res, 501, "feature.ask_question_disabled", "AskUserQuestion live HITL is not enabled on this worker (ASK_QUESTION_ENABLED)");
1261
1163
  return;
1262
1164
  }
1263
- const principal = gatedPrincipal(req, deps.config);
1165
+ const principal = gatedSubject(req, deps.config);
1264
1166
  if (deps.config.requirePrincipal && principal === undefined) {
1265
1167
  sendPrincipalRefusal(res, req, deps.config);
1266
1168
  return;
@@ -1279,7 +1181,7 @@ export async function handleRunVerbs(req, res, match, ctx) {
1279
1181
  sendError(res, 501, "feature.tool_approval_disabled", "live tool-approval HITL is not enabled on this worker (TOOL_APPROVAL_ENABLED)");
1280
1182
  return;
1281
1183
  }
1282
- const principal = gatedPrincipal(req, deps.config);
1184
+ const principal = gatedSubject(req, deps.config);
1283
1185
  if (deps.config.requirePrincipal && principal === undefined) {
1284
1186
  sendPrincipalRefusal(res, req, deps.config);
1285
1187
  return;
@@ -1308,7 +1210,7 @@ export async function handleRunVerbs(req, res, match, ctx) {
1308
1210
  return;
1309
1211
  }
1310
1212
  const askStore = streamFact.askStore;
1311
- const principal = gatedPrincipal(req, deps.config);
1213
+ const principal = gatedSubject(req, deps.config);
1312
1214
  if (deps.config.requirePrincipal && principal === undefined) {
1313
1215
  sendPrincipalRefusal(res, req, deps.config);
1314
1216
  return;
@@ -1350,9 +1252,8 @@ export async function handleRunVerbs(req, res, match, ctx) {
1350
1252
  askNotFound();
1351
1253
  return;
1352
1254
  }
1353
- const ownerOk = askOwnerAdmits(row0.owner, principal);
1354
- const operatorOk = explicitOperatorOk(principal, deps.config);
1355
- if (!ownerOk && !operatorOk) {
1255
+ const askAdmission = keyAdmission("ask.decide", { subject: principal, operator: explicitOperatorOk(principal === undefined ? undefined : personOf(principal), deps.config) }, ownerCellOf(row0.owner));
1256
+ if (askAdmission === undefined) {
1356
1257
  askNotFound();
1357
1258
  return;
1358
1259
  }
@@ -1360,7 +1261,7 @@ export async function handleRunVerbs(req, res, match, ctx) {
1360
1261
  id: principal ?? "_",
1361
1262
  ...(body.actor ? { label: redactSecrets(body.actor.label).slice(0, ASK_ACTOR_LABEL_MAX) } : {}),
1362
1263
  verified: principal !== undefined,
1363
- via: ownerOk ? "owner" : "operator",
1264
+ via: askAdmission === "row" ? "owner" : "operator",
1364
1265
  };
1365
1266
  const decidedRowIsAuthoritative = (row) => {
1366
1267
  if (row.state !== "DECIDED" || row.decision !== "approve" && row.decision !== "deny" || row.provisional || row.decidedAtMs === null) {
@@ -1423,7 +1324,7 @@ export async function handleRunVerbs(req, res, match, ctx) {
1423
1324
  }
1424
1325
  case "PARKED":
1425
1326
  sendError(res, 410, "gone.ask_parked", "the in-stream window closed and this ask was parked onto the durable approval gate — decide it through that gate for the session echoed here", {
1426
- sessionId: row.sessionId,
1327
+ sessionId: parkSessionOf(row),
1427
1328
  gateBoundCallId: row.gateBoundCallId,
1428
1329
  gateBoundInputHash: row.gateBoundInputHash,
1429
1330
  });
@@ -1576,31 +1477,43 @@ export async function handleRunVerbs(req, res, match, ctx) {
1576
1477
  return assertNever(match.decl.id);
1577
1478
  }
1578
1479
  export async function createDurableRun(req, res, ctx, prepared, idem) {
1480
+ try {
1481
+ const out = await createDurableRunHeld(req, res, ctx, prepared, idem);
1482
+ await prepared.seat.close();
1483
+ return out;
1484
+ }
1485
+ catch (err) {
1486
+ await prepared.seat.close();
1487
+ throw err;
1488
+ }
1489
+ }
1490
+ async function createDurableRunHeld(req, res, ctx, prepared, idem) {
1579
1491
  const { deps } = ctx;
1580
1492
  const { idemCache } = ctx.registry;
1581
1493
  const { leaseDenied, usageWindowDenied, admitRun } = ctx.helpers;
1494
+ const seat = prepared.seat;
1582
1495
  const source = ctx.req.source;
1583
1496
  const runs = facts.durableRuns(deps);
1584
1497
  if (!runs.available) {
1585
- sendError(res, 501, "capability.run_store_required", "async runs require a durable run store (DB_BACKEND=mysql|pg|local)");
1498
+ await seat.deliverTerminal(() => sendError(res, 501, "capability.run_store_required", "async runs require a durable run store (DB_BACKEND=mysql|pg|local)"));
1586
1499
  return null;
1587
1500
  }
1588
1501
  const runStore = runs.runStore;
1589
1502
  const clientTaskId = clientTaskIdOf(prepared.body);
1590
1503
  if (clientTaskId === false) {
1591
- sendError(res, 400, "request.id_invalid", "body.taskId must be a uuidv7 string (caller-minted idempotency key)");
1504
+ await seat.deliverTerminal(() => sendError(res, 400, "request.id_invalid", "body.taskId must be a uuidv7 string (caller-minted idempotency key)"));
1592
1505
  return null;
1593
1506
  }
1594
- const submitter = gatedPrincipal(req, deps.config);
1595
- const caller = { principal: submitter, idem, ...(clientTaskId !== undefined ? { clientTaskId } : {}) };
1507
+ const submitter = gatedSubject(req, deps.config);
1508
+ const caller = { subject: submitter, idem, ...(clientTaskId !== undefined ? { clientTaskId } : {}) };
1596
1509
  if (clientTaskId) {
1597
1510
  const existing = await runStore.getRun(clientTaskId);
1598
1511
  if (existing)
1599
1512
  return await replayOfExistingRun(existing, caller, "durable", deps, runStore);
1600
1513
  }
1601
- if ((await leaseDenied(req, res)) || (await usageWindowDenied(req, res)))
1514
+ if ((await leaseDenied(req, res, seat)) || (await usageWindowDenied(req, res, seat)))
1602
1515
  return null;
1603
- const runSlot = admitRun(req, res);
1516
+ const runSlot = await admitRun(req, res, seat);
1604
1517
  if (runSlot === undefined)
1605
1518
  return null;
1606
1519
  return await idemCache.run(idem !== undefined ? inflightKeyOf(idem, "durable", clientTaskId) : undefined, async () => {
@@ -1611,10 +1524,12 @@ export async function createDurableRun(req, res, ctx, prepared, idem) {
1611
1524
  fleetScope: submitter ?? "default",
1612
1525
  elicitOwner: submitter ?? null,
1613
1526
  source,
1614
- identity: runIdentityOf(req, deps.config, prepared.auth?.principal ?? null),
1527
+ identity: runIdentityOf(req, deps.config, prepared.auth?.subject ?? null),
1615
1528
  runSlot,
1616
1529
  });
1617
- return out.existing ? await replayOfExistingRun(out.existing, caller, "durable", deps, runStore) : out;
1530
+ const receipt = out.existing ? await replayOfExistingRun(out.existing, caller, "durable", deps, runStore) : out;
1531
+ await prepared.seat.close();
1532
+ return receipt;
1618
1533
  }).finally(() => runSlot.release());
1619
1534
  }
1620
1535
  function clientTaskIdOf(body) {