@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,31 +1,37 @@
1
1
  import { SessionError, materializeA2aTools, materializeMcpTools, sanitizePathComponent } from "@sema-agent/core";
2
2
  import { a2aForScenario, mcpForScenario } from "../../web-admin-client/facade.js";
3
- import { HttpError, isUuidShape, legacyUnownedSessionOk, sessionOwnerCellOf } from "../../security.js";
3
+ import { HttpError, isUuidShape } from "../../security.js";
4
4
  import { windowMessages, truncateMessageBlobs, redactSessionViewForRead } from "../../audit.js";
5
5
  import { redactSecrets } from "../../trace/redact.js";
6
6
  import { seatText } from "../../trace/exit-seat.js";
7
7
  import { recordFailOpen } from "../../observability/fail-open.js";
8
8
  import { MCP_DIAL_DEADLINE_MS, raceDeadline } from "../mcp-dial-deadline.js";
9
9
  import { sentMemoryComplianceFailure } from "../memory-compliance-failure-reply.js";
10
- import { readLayerSeat, sentMemoryLayerRefusal } from "../memory-layer-reply.js";
10
+ import { readLayerSeat, sentMemoryFaceFault } from "../memory-face-fault-reply.js";
11
11
  import { DEPLOYMENT_SHAPE_PREDICATES } from "../../deployment-shape.js";
12
12
  import { MAX_SETTINGS_OUTPUT_STYLE_CHARS, MAX_SETTINGS_ENV_VARS, MAX_SETTINGS_ENV_KEY_CHARS, MAX_SETTINGS_ENV_VALUE_CHARS } from "../../task-settings.js";
13
13
  import { readWritableSessionPermissionRules } from "../../session-policy-wire.js";
14
14
  import { sendJson, sendError, sendSessionError, sendSessionPolicyError, sseHeaders, httpErrorBody } from "../send.js";
15
- import { fleetViewOf, gatedPrincipal, explicitOperatorOk, sessionCallerOf, sessionOwnerReadable, sendPrincipalRefusal, sendUnauthorized } from "../principal-gate.js";
15
+ import { gatedPerson, gatedSubject, sendPrincipalRefusal } from "../principal-gate.js";
16
+ import { personOf } from "../../owner-brands.js";
16
17
  import { headReadOf, leafOfAdmittedHead, sessionFaceOfHead } from "../../session-incarnation.js";
17
- import { foldOwnerUnreadable, runRowReadableOnSessionFace } from "../owner-access.js";
18
- import { assertNever, SESSION_NOT_FOUND_MESSAGE } from "../route-ctx.js";
18
+ import { admitSessionById, admitSessionRow, admittedAsFleet, callerEntry, callerOf, deliverVerdict, enter, judgeSessionRow, protocolEntry, readOwnerCell, refuse, seesRun, sessionRowPresent } from "../owner-access.js";
19
+ import { assertNever } from "../route-ctx.js";
19
20
  import * as facts from "../../capability-facts.js";
20
21
  import { rosterAgentId } from "./agents-roster.js";
21
22
  import { projectSessionListRow } from "./sessions-list.js";
22
23
  import { readSessionRowPatch } from "../../session-row.js";
23
- import { forkPathOf } from "../execution-context.js";
24
+ import { forkPathOf, resolveExecutionContext } from "../execution-context.js";
24
25
  import { executionPlacementView } from "../../execution-placement.js";
26
+ import { anchorReaderOf, resolveHistoryAnchor } from "../../history-anchor.js";
27
+ import { engineRefusalAnswerOf } from "../engine-refusal.js";
28
+ import { buildRewindFilesReply } from "../rewind-files-reply.js";
25
29
  import { ForkTargetUnsettledError, forkKeyOf } from "../../plugins/session-fork.js";
26
30
  import { fieldConflictFacts } from "../../field-conflict.js";
27
31
  import { buildBoundedToolNames } from "../../panel-tool-names.js";
28
32
  import { projectMcpAuthorization } from "../../mcp-authorization-face.js";
33
+ import { presentHostWorkspaceOf } from "../../task-cwd.js";
34
+ import { rewindFilesUnderPurpose } from "../../execution-env-purpose.js";
29
35
  const MCP_STATUS_TTL_MS = 5_000;
30
36
  const A2A_STATUS_TTL_MS = 5_000;
31
37
  const A2A_MATERIALIZE_TIMEOUT_MS = 10_000;
@@ -40,11 +46,11 @@ export function createSessionsLocal() {
40
46
  memoryStatusCache: new Map(),
41
47
  };
42
48
  }
43
- async function lastLegMcpFor(deps, sessionId, caller) {
49
+ async function lastLegMcpFor(deps, sessionId, entry) {
44
50
  let timer;
45
51
  try {
46
52
  return await Promise.race([
47
- readLastLegMcp(deps, sessionId, caller),
53
+ readLastLegMcp(deps, sessionId, entry),
48
54
  new Promise((r) => { timer = setTimeout(() => { recordFailOpen("server.mcp-panel.last-leg-unreadable", `ledger read exceeded ${LAST_LEG_LEDGER_TIMEOUT_MS}ms`); r(undefined); }, LAST_LEG_LEDGER_TIMEOUT_MS); }),
49
55
  ]);
50
56
  }
@@ -57,14 +63,14 @@ async function lastLegMcpFor(deps, sessionId, caller) {
57
63
  clearTimeout(timer);
58
64
  }
59
65
  }
60
- async function readLastLegMcp(deps, sessionId, caller) {
66
+ async function readLastLegMcp(deps, sessionId, entry) {
61
67
  const runStore = deps.runStore;
62
68
  if (!runStore || sessionId === null)
63
69
  return undefined;
64
70
  const latest = await runStore.latestRunForSession(sessionId);
65
71
  if (latest === undefined)
66
72
  return undefined;
67
- if (!runRowReadableOnSessionFace(deps, caller, latest.owner, "owner_or_operator"))
73
+ if (!seesRun(entry, latest.owner))
68
74
  return undefined;
69
75
  const events = await runStore.getEvents(latest.taskId, 0);
70
76
  for (let i = events.length - 1; i >= 0; i--) {
@@ -80,16 +86,12 @@ async function readLastLegMcp(deps, sessionId, caller) {
80
86
  }
81
87
  export async function handleSessions(req, res, match, ctx) {
82
88
  const { deps } = ctx;
83
- const { readJson, safeDecode, sessionOwnerOk } = ctx.helpers;
84
- const readOwnedSessionView = async (sessionAudit, sessionId, readOpts) => {
89
+ const { readJson, safeDecode } = ctx.helpers;
90
+ const readOwnedSessionView = async (entry, sessionAudit, sessionId, readOpts) => {
85
91
  const headOf = headReadOf(deps.sessionStorage);
86
92
  if (headOf !== undefined) {
87
- const owner = (await foldOwnerUnreadable(deps.logger, match.decl.id, sessionId, () => headOf(sessionId)))?.owner;
88
- if (owner === undefined) {
89
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
90
- return undefined;
91
- }
92
- if (!sessionOwnerOk(req, res, await sessionOwnerCellOf(deps.sessionStorage, sessionId, owner)))
93
+ const head = await readOwnerCell(entry, sessionId, () => headOf(sessionId));
94
+ if ((await admitSessionRow(entry, res, deps.sessionStorage, sessionId, head)) === undefined)
93
95
  return undefined;
94
96
  }
95
97
  let audit;
@@ -101,11 +103,7 @@ export async function handleSessions(req, res, match, ctx) {
101
103
  throw e;
102
104
  throw new Error(`session view read failed before ownership could be established: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
103
105
  }
104
- if (!audit) {
105
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
106
- return undefined;
107
- }
108
- if (!sessionOwnerOk(req, res, await sessionOwnerCellOf(deps.sessionStorage, sessionId, audit.owner)))
106
+ if ((await admitSessionRow(entry, res, deps.sessionStorage, sessionId, audit)) === undefined)
109
107
  return undefined;
110
108
  return audit;
111
109
  };
@@ -113,7 +111,7 @@ export async function handleSessions(req, res, match, ctx) {
113
111
  const { mcpStatusCache, a2aStatusCache } = ctx.local.sessions;
114
112
  {
115
113
  if (match.decl.id === "session-init") {
116
- const principal = gatedPrincipal(req, deps.config);
114
+ const principal = gatedSubject(req, deps.config);
117
115
  if (deps.config.requirePrincipal && !principal) {
118
116
  sendPrincipalRefusal(res, req, deps.config);
119
117
  return;
@@ -128,7 +126,7 @@ export async function handleSessions(req, res, match, ctx) {
128
126
  }
129
127
  {
130
128
  if (match.decl.id === "session-settings") {
131
- const principal = gatedPrincipal(req, deps.config);
129
+ const principal = gatedSubject(req, deps.config);
132
130
  if (deps.config.requirePrincipal && !principal) {
133
131
  sendPrincipalRefusal(res, req, deps.config);
134
132
  return;
@@ -148,13 +146,13 @@ export async function handleSessions(req, res, match, ctx) {
148
146
  }
149
147
  {
150
148
  if (match.decl.id === "session-mcp") {
151
- const caller = sessionCallerOf(req, deps);
152
- const principal = caller.principal;
149
+ const caller = callerOf(req, deps);
150
+ const principal = caller.subject === undefined ? undefined : personOf(caller.subject);
153
151
  if (deps.config.requirePrincipal && !principal) {
154
152
  sendPrincipalRefusal(res, req, deps.config);
155
153
  return;
156
154
  }
157
- const lastLegMcp = await lastLegMcpFor(deps, safeDecode(match.params.sessionId), caller);
155
+ const lastLegMcp = await lastLegMcpFor(deps, safeDecode(match.params.sessionId), protocolEntry(req, deps, "run.panel", caller));
158
156
  const ledgerHalf = lastLegMcp === undefined ? {} : { lastLegMcp };
159
157
  let scenarioName;
160
158
  try {
@@ -210,7 +208,7 @@ export async function handleSessions(req, res, match, ctx) {
210
208
  }
211
209
  {
212
210
  if (match.decl.id === "session-a2a") {
213
- const principal = gatedPrincipal(req, deps.config);
211
+ const principal = gatedPerson(req, deps.config);
214
212
  if (deps.config.requirePrincipal && !principal) {
215
213
  sendPrincipalRefusal(res, req, deps.config);
216
214
  return;
@@ -274,14 +272,12 @@ export async function handleSessions(req, res, match, ctx) {
274
272
  sendError(res, 400, "request.path_malformed", "session id segment is not valid percent-encoding");
275
273
  return;
276
274
  }
277
- const head = await foldOwnerUnreadable(deps.logger, match.decl.id, headSession, () => headOf(headSession));
278
- if (head === undefined) {
279
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
275
+ const headEntry = callerEntry(req, deps, match.decl.id);
276
+ const headRead = await readOwnerCell(headEntry, headSession, () => headOf(headSession));
277
+ const admittedHead = await admitSessionRow(headEntry, res, deps.sessionStorage, headSession, headRead);
278
+ if (admittedHead === undefined)
280
279
  return;
281
- }
282
- if (!sessionOwnerOk(req, res, await sessionOwnerCellOf(deps.sessionStorage, headSession, head.owner)))
283
- return;
284
- const leafId = leafOfAdmittedHead(head);
280
+ const leafId = leafOfAdmittedHead(admittedHead.row);
285
281
  const etag = `"${leafId ?? "empty"}"`;
286
282
  if (req.headers["if-none-match"] === etag) {
287
283
  res.writeHead(304, { etag }).end();
@@ -304,14 +300,12 @@ export async function handleSessions(req, res, match, ctx) {
304
300
  sendError(res, 400, "request.path_malformed", "session id segment is not valid percent-encoding");
305
301
  return;
306
302
  }
307
- const reading = await foldOwnerUnreadable(deps.logger, match.decl.id, placementSession, () => placementFact.seat.read(placementSession));
308
- if (reading === undefined) {
309
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
310
- return;
311
- }
312
- if (!explicitOperatorOk(gatedPrincipal(req, deps.config), deps.config) && !sessionOwnerOk(req, res, await sessionOwnerCellOf(deps.sessionStorage, placementSession, reading.occupant.owner)))
303
+ const placementEntry = callerEntry(req, deps, match.decl.id);
304
+ const reading = await readOwnerCell(placementEntry, placementSession, () => placementFact.seat.read(placementSession));
305
+ const admittedPlacement = await admitSessionRow(placementEntry, res, deps.sessionStorage, placementSession, reading === undefined ? undefined : { owner: reading.occupant.owner, cell: reading.cell });
306
+ if (admittedPlacement === undefined)
313
307
  return;
314
- sendJson(res, 200, executionPlacementView(reading.cell));
308
+ sendJson(res, 200, executionPlacementView(admittedPlacement.row.cell));
315
309
  return;
316
310
  }
317
311
  }
@@ -322,7 +316,8 @@ export async function handleSessions(req, res, match, ctx) {
322
316
  sendError(res, 501, "capability.session_store_required", "session events require a durable session store (DB_BACKEND=mysql|pg|local)");
323
317
  return;
324
318
  }
325
- const readHead = (id) => foldOwnerUnreadable(deps.logger, match.decl.id, id, () => evFact.sessionStorage.headOf(id));
319
+ const evEntry = callerEntry(req, deps, match.decl.id);
320
+ const readHead = (id) => readOwnerCell(evEntry, id, () => evFact.sessionStorage.headOf(id));
326
321
  const readOwner = async (id) => (await readHead(id))?.owner;
327
322
  const watch = evFact.watch;
328
323
  const evSession = safeDecode(match.params.sessionId);
@@ -359,7 +354,7 @@ export async function handleSessions(req, res, match, ctx) {
359
354
  return;
360
355
  }
361
356
  sse.sseOwnerLookups++;
362
- const admissionP = readHead(evSession).then(async (head) => (head === undefined ? undefined : { head, cell: await sessionOwnerCellOf(evFact.sessionStorage, evSession, head.owner) }));
357
+ const admissionP = readHead(evSession).then(async (head) => (!sessionRowPresent(head) ? undefined : { head, verdict: await judgeSessionRow(evEntry, evFact.sessionStorage, evSession, head) }));
363
358
  void admissionP.catch(() => undefined).then(() => { sse.sseOwnerLookups--; });
364
359
  let stallTimer;
365
360
  let admission;
@@ -383,15 +378,15 @@ export async function handleSessions(req, res, match, ctx) {
383
378
  }
384
379
  if (admission === undefined) {
385
380
  cleanup();
386
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
381
+ refuse(evEntry, res, "missing");
387
382
  return;
388
383
  }
389
- if (!sessionOwnerOk(req, res, admission.cell)) {
384
+ if (deliverVerdict(evEntry, res, admission.verdict) === undefined) {
390
385
  cleanup();
391
386
  return;
392
387
  }
393
388
  leafOfAdmittedHead(admission.head);
394
- const owner = admission.cell.owner;
389
+ const owner = admission.head.owner;
395
390
  const q = new URLSearchParams(match.search);
396
391
  const lastLeafId = q.get("lastLeafId");
397
392
  let first = true;
@@ -520,16 +515,15 @@ export async function handleSessions(req, res, match, ctx) {
520
515
  sendError(res, 400, "request.path_malformed", "session id segment is not valid percent-encoding");
521
516
  return;
522
517
  }
523
- if (deps.config.requirePrincipal && !gatedPrincipal(req, deps.config)) {
524
- sendPrincipalRefusal(res, req, deps.config);
518
+ const entry = enter(req, res, deps, match.decl.id);
519
+ if (entry === undefined)
525
520
  return;
526
- }
527
521
  const auditFact = facts.sessionAuditView(deps);
528
522
  if (!auditFact.available) {
529
523
  sendError(res, 501, "capability.memory_engine_required", "memory provenance and erasure are not available on this deployment — they require a wired memory engine (MEMORY_ENGINE=on) whose backend owns the engine control plane (controlPlaneRoot); the file memory backend does, the pg/mysql memory backends do not (their control plane would land on a replica's local disk)");
530
524
  return;
531
525
  }
532
- if ((await readOwnedSessionView(auditFact.sessionAudit, sessionId)) === undefined)
526
+ if ((await readOwnedSessionView(entry, auditFact.sessionAudit, sessionId)) === undefined)
533
527
  return;
534
528
  const faces = deps.memoryCompliance;
535
529
  if (faces === undefined) {
@@ -563,7 +557,9 @@ export async function handleSessions(req, res, match, ctx) {
563
557
  sendJson(res, 200, await faces.erase(input));
564
558
  }
565
559
  catch (err) {
566
- if (sentMemoryComplianceFailure(res, err, { kind: "session_owner", withheld }, deps.logger))
560
+ if (sentMemoryFaceFault(res, err, { kind: "session_owner", face: "erase", withheld }))
561
+ return;
562
+ if (sentMemoryComplianceFailure(res, err, { kind: "session_owner", face: "erase", withheld }, deps.logger))
567
563
  return;
568
564
  deps.logger?.warn?.("session_memory_erase_failed", { sessionId, err: String(err) });
569
565
  sendError(res, 500, "internal.error", "session memory erasure failed");
@@ -578,16 +574,15 @@ export async function handleSessions(req, res, match, ctx) {
578
574
  sendError(res, 400, "request.path_malformed", "session id segment is not valid percent-encoding");
579
575
  return;
580
576
  }
581
- if (deps.config.requirePrincipal && !gatedPrincipal(req, deps.config)) {
582
- sendPrincipalRefusal(res, req, deps.config);
577
+ const entry = enter(req, res, deps, match.decl.id);
578
+ if (entry === undefined)
583
579
  return;
584
- }
585
580
  const auditFact = facts.sessionAuditView(deps);
586
581
  if (!auditFact.available) {
587
582
  sendError(res, 501, "capability.memory_engine_required", "session memory status is not available on this deployment — it requires a wired memory engine (MEMORY_ENGINE=on) whose backend owns the engine control plane (controlPlaneRoot); the file memory backend does, the pg/mysql memory backends do not (their control plane would land on a replica's local disk)");
588
583
  return;
589
584
  }
590
- if ((await readOwnedSessionView(auditFact.sessionAudit, sessionId)) === undefined)
585
+ if ((await readOwnedSessionView(entry, auditFact.sessionAudit, sessionId)) === undefined)
591
586
  return;
592
587
  const face = deps.sessionMemoryStatus;
593
588
  if (face === undefined) {
@@ -631,7 +626,7 @@ export async function handleSessions(req, res, match, ctx) {
631
626
  });
632
627
  }
633
628
  catch (err) {
634
- if (sentMemoryLayerRefusal(res, err, { kind: "session_owner", withheld: (message) => deps.logger?.warn?.("session_memory_status_refused", { sessionId, err: message }) }))
629
+ if (sentMemoryFaceFault(res, err, { kind: "session_owner", face: "status", withheld: (message) => deps.logger?.warn?.("session_memory_status_refused", { sessionId, err: message }) }))
635
630
  return;
636
631
  deps.logger?.warn?.("session_memory_status_failed", { sessionId, err: String(err) });
637
632
  sendError(res, 500, "internal.error", "session memory status read failed");
@@ -646,7 +641,8 @@ export async function handleSessions(req, res, match, ctx) {
646
641
  sendError(res, 501, "capability.session_store_required", "the session audit view requires a durable session store (DB_BACKEND=mysql|pg|local)");
647
642
  return;
648
643
  }
649
- const owned = await readOwnedSessionView(auditFact.sessionAudit, match.params.sessionId, { reader: gatedPrincipal(req, deps.config) ?? null });
644
+ const viewEntry = callerEntry(req, deps, match.decl.id);
645
+ const owned = await readOwnedSessionView(viewEntry, auditFact.sessionAudit, match.params.sessionId, { reader: viewEntry.caller.subject ?? null });
650
646
  if (owned === undefined)
651
647
  return;
652
648
  if (!Array.isArray(owned.messages)) {
@@ -709,13 +705,14 @@ export async function handleSessions(req, res, match, ctx) {
709
705
  }
710
706
  const store = rowFact.sessionStorage;
711
707
  const sessionId = match.params.sessionId;
708
+ const patchEntry = callerEntry(req, deps, match.decl.id);
712
709
  const head = await store.headOf(sessionId);
713
710
  if (head === undefined) {
714
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
711
+ refuse(patchEntry, res, "missing");
715
712
  return;
716
713
  }
717
714
  const face = sessionFaceOfHead(sessionId, head);
718
- if (!sessionOwnerOk(req, res, await sessionOwnerCellOf(store, sessionId, face.owner)))
715
+ if ((await admitSessionRow(patchEntry, res, store, sessionId, face)) === undefined)
719
716
  return;
720
717
  leafOfAdmittedHead(head);
721
718
  const read = readSessionRowPatch(await readJson(req));
@@ -735,7 +732,7 @@ export async function handleSessions(req, res, match, ctx) {
735
732
  sendError(res, 409, "conflict.session_mirror", "this session is a read-only mirror of a session whose writer is elsewhere — it cannot be renamed or pinned here; fork it (forkPath) to continue here; nothing was written", { forkPath: forkPathOf(sessionId) });
736
733
  return;
737
734
  case "absent":
738
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
735
+ refuse(patchEntry, res, "missing");
739
736
  return;
740
737
  default: {
741
738
  const unknownOutcome = outcome;
@@ -743,6 +740,78 @@ export async function handleSessions(req, res, match, ctx) {
743
740
  }
744
741
  }
745
742
  }
743
+ if (match.decl.id === "session-rewind-files") {
744
+ if (ctx.helpers.rateLimited(req, res))
745
+ return;
746
+ const rewind = facts.sessionRewindFiles(deps);
747
+ if (!rewind.available) {
748
+ switch (rewind.why) {
749
+ case "file_history_store_absent":
750
+ sendError(res, 501, "capability.snapshot_store_required", "rewinding a session's files is not available on this deployment: no file-history store is wired, so no file history was ever recorded");
751
+ return;
752
+ case "session_head_face_absent":
753
+ sendError(res, 501, "capability.session_store_required", "rewinding a session's files requires a durable session store (DB_BACKEND=mysql|pg|local)");
754
+ return;
755
+ case "resume_anchor_store_absent":
756
+ sendError(res, 501, "capability.session_store_required", "rewinding a session's files is not available on this deployment: no session-store backend holds the rewind anchor map");
757
+ return;
758
+ case "execution_lane_handless":
759
+ sendError(res, 501, "capability.unavailable", "rewinding a session's files is not available on this deployment: it mounts no execution environment (REMOTE_EXEC=none), so a session has no working tree to rewind");
760
+ return;
761
+ case "workspace_rebuilt_per_task":
762
+ sendError(res, 501, "capability.unavailable", "rewinding a session's files is not available on this deployment: each task's workspace is rebuilt when the task starts (fresh, or restored from a saved copy that a rewind cannot yet write into), so a rewind would not reach the files the next task works on");
763
+ return;
764
+ case "session_store_shared":
765
+ sendError(res, 501, "capability.unavailable", "rewinding a session's files is not available on this deployment yet: its session store is shared by several server instances (DB_BACKEND=mysql|pg), and a rewind cannot yet keep runs started on another instance off the session while it restores");
766
+ return;
767
+ default:
768
+ return assertNever(rewind.why);
769
+ }
770
+ }
771
+ const { anchors, sessionStorage } = rewind;
772
+ const sessionId = safeDecode(match.params.sessionId);
773
+ if (sessionId === null || !isUuidShape(sessionId)) {
774
+ sendError(res, 400, "request.id_invalid", "invalid session id (must be a canonical uuid)");
775
+ return;
776
+ }
777
+ const rewindEntry = enter(req, res, deps, match.decl.id);
778
+ if (rewindEntry === undefined)
779
+ return;
780
+ const owned = await admitSessionById(rewindEntry, res, sessionStorage, sessionId);
781
+ if (owned === undefined)
782
+ return;
783
+ const sessionOwner = owned.row.owner;
784
+ leafOfAdmittedHead(owned.row);
785
+ const read = readRewindFilesBody(await readJson(req));
786
+ if (read.kind === "refused") {
787
+ sendError(res, 400, read.errorCode, read.message);
788
+ return;
789
+ }
790
+ const execution = await resolveExecutionContext(deps, { kind: "continuation", root: sessionId, principal: sessionOwner === null || sessionOwner === undefined ? undefined : personOf(sessionOwner) });
791
+ if (execution.lane === "host" && (await presentHostWorkspaceOf(deps.perSessionCwd?.get(sessionId))) === undefined) {
792
+ sendError(res, 409, "conflict.session_workspace_unknown", "this server process does not know a working directory for this session that it can rewind into (no prompt carrying its cwd has been submitted since the server started, or the directory that prompt named no longer exists), so nothing was rewound; submit a prompt with its cwd first, then rewind");
793
+ return;
794
+ }
795
+ const entryId = await resolveHistoryAnchor("rewindFilesTo", anchors, anchorReaderOf(req, deps, rewindEntry.caller), sessionId, read.to, sessionOwner, "to");
796
+ const activeTaskId = await deps.runStore?.getActiveTaskId(sessionId);
797
+ if (activeTaskId) {
798
+ sendError(res, 409, "conflict.session_active_run", `session has an active run (${activeTaskId}); its files cannot be rewound under it — wait for that run to end (or cancel it), then rewind`, { activeTaskId });
799
+ return;
800
+ }
801
+ let result;
802
+ try {
803
+ result = await rewindFilesUnderPurpose(deps.runner, { sessionId, to: entryId, dryRun: read.dryRun });
804
+ }
805
+ catch (e) {
806
+ const answer = engineRefusalAnswerOf(e);
807
+ if (answer === undefined)
808
+ throw e;
809
+ sendError(res, answer.status, answer.refusal.errorCode, answer.refusal.message);
810
+ return;
811
+ }
812
+ sendJson(res, 200, buildRewindFilesReply(result));
813
+ return;
814
+ }
746
815
  {
747
816
  if (match.decl.id === "session-fork") {
748
817
  const forkFact = facts.sessionFork(deps);
@@ -751,27 +820,19 @@ export async function handleSessions(req, res, match, ctx) {
751
820
  return;
752
821
  }
753
822
  const fork = forkFact.sessionStorage.fork.bind(forkFact.sessionStorage);
754
- const readOwner = async (id) => (await forkFact.sessionStorage.headOf(id))?.owner;
755
- const scope = fleetViewOf(req, deps, "write");
756
- if (!scope.fleetWide && scope.gateOwner === null) {
757
- sendUnauthorized(res, "identity");
823
+ const forkEntry = enter(req, res, deps, match.decl.id);
824
+ if (forkEntry === undefined)
758
825
  return;
759
- }
760
826
  const sourceId = safeDecode(match.params.sessionId);
761
827
  if (sourceId === null || !isUuidShape(sourceId)) {
762
828
  sendError(res, 400, "request.id_invalid", "invalid session id (must be a canonical uuid)");
763
829
  return;
764
830
  }
765
- const owner = await readOwner(sourceId);
766
- if (owner === undefined) {
767
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
831
+ const forkAdmitted = await admitSessionById(forkEntry, res, forkFact.sessionStorage, sourceId);
832
+ if (forkAdmitted === undefined)
768
833
  return;
769
- }
770
- if (!scope.fleetWide && owner !== scope.gateOwner && !legacyUnownedSessionOk(deps.config, sessionCallerOf(req, deps), await sessionOwnerCellOf(forkFact.sessionStorage, sourceId, owner))) {
771
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
772
- return;
773
- }
774
- const newOwner = scope.fleetWide ? (owner ?? null) : scope.gateOwner;
834
+ const owner = forkAdmitted.row.owner;
835
+ const newOwner = admittedAsFleet(forkEntry, forkAdmitted) ? owner : (forkEntry.caller.subject ?? null);
775
836
  const keyed = readForkTarget(await readJson(req), sourceId);
776
837
  if (keyed.kind === "refused") {
777
838
  sendError(res, 400, keyed.errorCode, keyed.message, keyed.facts);
@@ -780,7 +841,7 @@ export async function handleSessions(req, res, match, ctx) {
780
841
  if (keyed.kind === "none") {
781
842
  const newId = await fork(sourceId, newOwner);
782
843
  if (newId === null) {
783
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
844
+ refuse(forkEntry, res, "missing");
784
845
  return;
785
846
  }
786
847
  sendJson(res, 200, { sessionId: newId });
@@ -803,7 +864,7 @@ export async function handleSessions(req, res, match, ctx) {
803
864
  throw e;
804
865
  }
805
866
  if (outcome === null) {
806
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
867
+ refuse(forkEntry, res, "missing");
807
868
  return;
808
869
  }
809
870
  switch (outcome.outcome) {
@@ -815,7 +876,7 @@ export async function handleSessions(req, res, match, ctx) {
815
876
  return;
816
877
  case "occupied":
817
878
  if (!outcome.sameOwner) {
818
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
879
+ refuse(forkEntry, res, "not_visible");
819
880
  return;
820
881
  }
821
882
  sendError(res, 409, "conflict.fork_id_taken", "forkId already names another session of yours (a different fork, or a session that was not created by this fork request) — pick a new forkId and forkNonce; nothing was forked", { forkId: keyed.forkId });
@@ -834,36 +895,27 @@ export async function handleSessions(req, res, match, ctx) {
834
895
  return;
835
896
  }
836
897
  const purge = deleteFact.purge;
837
- const readOwner = async (id) => (await deleteFact.sessionStorage.headOf(id))?.owner;
838
- const scope = fleetViewOf(req, deps, "write");
839
- if (!scope.fleetWide && scope.gateOwner === null) {
840
- sendUnauthorized(res, "identity");
898
+ const deleteEntry = enter(req, res, deps, match.decl.id);
899
+ if (deleteEntry === undefined)
841
900
  return;
842
- }
843
901
  const sessionId = safeDecode(match.params.sessionId);
844
902
  if (sessionId === null || !isUuidShape(sessionId)) {
845
903
  sendError(res, 400, "request.id_invalid", "invalid session id (must be a canonical uuid)");
846
904
  return;
847
905
  }
848
- const owner = await readOwner(sessionId);
849
- if (owner === undefined) {
850
- sendJson(res, 200, { deleted: false });
906
+ const deleteAdmitted = await admitSessionById(deleteEntry, res, deleteFact.gateStore, sessionId);
907
+ if (deleteAdmitted === undefined)
851
908
  return;
852
- }
853
- if (!scope.fleetWide && owner !== scope.gateOwner && !legacyUnownedSessionOk(deps.config, sessionCallerOf(req, deps), await sessionOwnerCellOf(deleteFact.sessionStorage, sessionId, owner))) {
854
- sendJson(res, 200, { deleted: false });
855
- return;
856
- }
857
- const activeTaskId = await deps.runStore?.getActiveTaskId(sessionId);
858
- if (activeTaskId) {
859
- sendError(res, 409, "conflict.session_active_run", "session has an active run; cancel it before deleting", { activeTaskId });
860
- return;
861
- }
909
+ const owner = deleteAdmitted.row.owner;
862
910
  const result = await purge(sessionId, owner);
863
911
  if ("active" in result) {
864
912
  sendError(res, 409, "conflict.session_active_run", "session has an active run; cancel it before deleting", { activeTaskId: result.active });
865
913
  return;
866
914
  }
915
+ if ("inProgress" in result) {
916
+ sendError(res, 409, "conflict.session_deleting", "the delete of this session is already under way in another request, which finishes it — the session already reads as gone and this request returns without waiting; a retry answers {deleted:false} once the delete has finished");
917
+ return;
918
+ }
867
919
  if ("childrenAlive" in result) {
868
920
  sendError(res, 409, "conflict.session_children_alive", "this session still has background agents running where this replica cannot stop them (on another replica, for example), so the delete was refused before anything was deleted — `remaining` lists their ids (the same ids `GET /v1/agents/roster` shows); retry the delete once they finish, or stop them where they run", { remaining: result.childrenAlive.map((handle) => rosterAgentId({ handle })) });
869
921
  return;
@@ -880,31 +932,23 @@ export async function handleSessions(req, res, match, ctx) {
880
932
  return;
881
933
  }
882
934
  const store = policyFact.policyStore;
883
- const readOwner = async (id) => (await policyFact.sessionStorage.headOf(id))?.owner;
884
- const principal = gatedPrincipal(req, deps.config);
885
- if (deps.config.requirePrincipal && principal === undefined) {
886
- sendUnauthorized(res, "identity");
935
+ const policyEntry = enter(req, res, deps, match.decl.id);
936
+ if (policyEntry === undefined)
887
937
  return;
888
- }
889
938
  const sessionId = safeDecode(match.params.sessionId);
890
939
  if (sessionId === null || !isUuidShape(sessionId)) {
891
940
  sendError(res, 400, "request.id_invalid", "invalid session id (must be a canonical uuid)");
892
941
  return;
893
942
  }
894
- const owner = await readOwner(sessionId);
895
- if (owner === undefined) {
896
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
943
+ const policyAdmitted = await admitSessionById(policyEntry, res, policyFact.sessionStorage, sessionId);
944
+ if (policyAdmitted === undefined)
897
945
  return;
898
- }
946
+ const owner = policyAdmitted.row.owner;
899
947
  if (owner === null) {
900
- sendError(res, 409, "conflict.session_ownerless", "this session has no recorded owner, so its rules can be neither read nor changed through this route; rules already stored for it keep applying to the runs of the principal they were stored under. Ways out: on the local backend, during the upgrade window, the first task submitted with a principal on a session written by an earlier version claims it for that principal (this route then serves its owner); or delete the session (DELETE /v1/sessions/:id), which removes its rules with it");
901
- return;
902
- }
903
- const operator = explicitOperatorOk(principal, deps.config);
904
- if (!operator && owner !== (principal ?? null)) {
905
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
948
+ sendError(res, 409, "conflict.session_ownerless", "this session has no recorded owner, so its rules can be neither read nor changed through this route; rules already stored for it keep applying to the runs of the principal they were stored under. Way out: delete the session (DELETE /v1/sessions/:id), which removes its rules with it");
906
949
  return;
907
950
  }
951
+ const operator = policyAdmitted.quals.has("operator");
908
952
  const target = owner;
909
953
  if (match.decl.id === "session-policy-get") {
910
954
  try {
@@ -967,6 +1011,7 @@ export const SESSIONS_ROUTES = [
967
1011
  { id: "session-memory-status", pattern: /^\/v1\/sessions\/(?<sessionId>[^/]+)\/memory-status$/, label: "/v1/sessions/:id/memory-status", methods: ["GET"] },
968
1012
  { id: "session-workspace", pattern: /^\/v1\/sessions\/(?<sessionId>[^/]+)\/workspace(?:\/(?<key>[^/]+)(?:\/(?<sub>tree|file|archive))?)?$/, label: "/v1/sessions/:id/workspace", methods: ["GET"] },
969
1013
  { id: "session-detail", pattern: /^\/v1\/sessions\/(?<sessionId>[^/]+)$/, label: "/v1/sessions/:id", methods: ["GET"] },
1014
+ { id: "session-rewind-files", pattern: /^\/v1\/sessions\/(?<sessionId>[^/]+)\/rewind-files$/, label: "/v1/sessions/:id/rewind-files", credentialGated: ["POST"], methods: ["POST"] },
970
1015
  { id: "session-patch", pattern: /^\/v1\/sessions\/(?<sessionId>[^/]+)$/, label: "/v1/sessions/:id", methods: ["PATCH"] },
971
1016
  { id: "session-delete", pattern: /^\/v1\/sessions\/(?<sessionId>[^/]+)$/, label: "/v1/sessions/:id", methods: ["DELETE"] },
972
1017
  ];
@@ -989,4 +1034,24 @@ function readForkTarget(raw, sourceId) {
989
1034
  return { kind: "keyed", forkId, forkNonce };
990
1035
  }
991
1036
  const FORK_NONCE_MAX_CHARS = 255;
1037
+ const REWIND_TO_MAX_CHARS = 255;
1038
+ function readRewindFilesBody(raw) {
1039
+ const shape = {
1040
+ kind: "refused",
1041
+ errorCode: "request.body_shape",
1042
+ message: 'the rewind-files body must be an object { to: string, dryRun?: boolean } — acceptPartialRestore is not accepted: the engine\'s out-of-run rewind has no partial-restore policy, so a partial restore answers 200 with restore.outcome "partial" and every refused or failed file on its ledger',
1043
+ };
1044
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw))
1045
+ return shape;
1046
+ const keys = Object.keys(raw);
1047
+ if (!keys.includes("to") || keys.some((k) => k !== "to" && k !== "dryRun"))
1048
+ return shape;
1049
+ const { to, dryRun } = raw;
1050
+ if (typeof to !== "string" || to.length === 0 || to.length > REWIND_TO_MAX_CHARS) {
1051
+ return { kind: "refused", errorCode: "request.field_invalid", message: `to must be a non-empty string of at most ${REWIND_TO_MAX_CHARS} characters: the handle of a prompt in this session (the handle rewindFilesTo takes)` };
1052
+ }
1053
+ if (dryRun !== undefined && typeof dryRun !== "boolean")
1054
+ return { kind: "refused", errorCode: "request.field_invalid", message: "dryRun must be a boolean when given" };
1055
+ return { kind: "read", to, dryRun: dryRun === true };
1056
+ }
992
1057
  //# sourceMappingURL=sessions.js.map
@@ -1,6 +1,6 @@
1
1
  import { isSharedMemoryDocumentPath, SHARED_MEMORY_READ_CAP_BYTES, SharedMemoryStoreError } from "@sema-agent/core";
2
2
  import { sendJson, sendError } from "../send.js";
3
- import { gatedPrincipal, sendUnauthorized } from "../principal-gate.js";
3
+ import { gatedPerson, sendUnauthorized } from "../principal-gate.js";
4
4
  import { assertNever } from "../route-ctx.js";
5
5
  import * as facts from "../../capability-facts.js";
6
6
  const RETRY_AFTER_SEC = 10;
@@ -10,14 +10,14 @@ function refuseStore(res) {
10
10
  }
11
11
  function refuseUnavailable(res, message) {
12
12
  res.setHeader("retry-after", String(RETRY_AFTER_SEC));
13
- sendError(res, 503, "memory.shared_unavailable", "shared memory stores are unavailable", {
14
- retryAfterSec: RETRY_AFTER_SEC,
15
- ...(message !== undefined ? { detail: message } : {}),
16
- });
13
+ if (message === undefined)
14
+ sendError(res, 503, "memory.shared_unavailable", "shared memory stores are unavailable", { retryAfterSec: RETRY_AFTER_SEC });
15
+ else
16
+ sendError(res, 503, "memory.shared_unavailable", `shared memory stores are unavailable: ${message}`, { retryAfterSec: RETRY_AFTER_SEC });
17
17
  }
18
18
  async function bindSnapshot(req, res, ctx) {
19
19
  const { deps } = ctx;
20
- const principal = gatedPrincipal(req, deps.config);
20
+ const principal = gatedPerson(req, deps.config);
21
21
  if (!principal && deps.config.requirePrincipal === true) {
22
22
  sendUnauthorized(res, "identity");
23
23
  return undefined;
@@ -7,7 +7,7 @@ import { redactSecrets } from "../../trace/redact.js";
7
7
  import { errorCodeOf } from "../../observability/err-text.js";
8
8
  import { admitProviderEcho, redactErrorMessage } from "../../observability/run-terminal.js";
9
9
  import { sendJson, sendError, sendHttpError, msg } from "../send.js";
10
- import { gatedPrincipal, sendPrincipalRefusal } from "../principal-gate.js";
10
+ import { gatedPerson, sendPrincipalRefusal } from "../principal-gate.js";
11
11
  import { assertNever } from "../route-ctx.js";
12
12
  export function isCorePreflightValidationError(err) {
13
13
  return errorCodeOf(err) === "config.unknown_role";
@@ -38,7 +38,7 @@ export async function handleSideQuery(req, res, match, ctx) {
38
38
  try {
39
39
  if (rateLimited(req, res) || quotaExceeded(req, res) || (await leaseDenied(req, res)))
40
40
  return;
41
- const principal = gatedPrincipal(req, deps.config);
41
+ const principal = gatedPerson(req, deps.config);
42
42
  if (deps.config.requirePrincipal && !principal) {
43
43
  sendPrincipalRefusal(res, req, deps.config);
44
44
  return;