@sema-agent/server 7.147.0 → 7.149.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (790) hide show
  1. package/MIGRATION.md +1468 -24
  2. package/README.md +35 -7
  3. package/README.zh-CN.md +18 -8
  4. package/USAGE.md +444 -193
  5. package/deploy/sema-up/README.md +16 -5
  6. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  7. package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
  8. package/deploy/sema-up/chart/values.yaml +3 -2
  9. package/deploy/sema-up/cluster-up.sh +74 -176
  10. package/deploy/sema-up/kube-up.sh +29 -49
  11. package/deploy/sema-up/lib/chart-run.sh +23 -0
  12. package/deploy/sema-up/lib/dataroot.sh +3 -3
  13. package/deploy/sema-up/lib/health.sh +62 -13
  14. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  15. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  16. package/deploy/sema-up/lib/regcred.py +8 -0
  17. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  18. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  19. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  20. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  21. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  22. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  23. package/deploy/sema-up/lib/render-stack.py +17 -0
  24. package/deploy/sema-up/lib/shell-text.sh +87 -0
  25. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  26. package/deploy/sema-up/lib/usage-head.txt +1 -0
  27. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  28. package/deploy/sema-up/preflight.sh +10 -8
  29. package/deploy/sema-up/sema-up.sh +14 -39
  30. package/deploy/sema-up/smoke.sh +7 -6
  31. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  32. package/deploy/sema-up/stack/compose.yaml +13 -1
  33. package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
  34. package/dist/adoption/plan.d.ts +24 -0
  35. package/dist/adoption/plan.js +53 -1
  36. package/dist/adoption/runner.d.ts +10 -1
  37. package/dist/adoption/runner.js +36 -16
  38. package/dist/approval-card.d.ts +36 -38
  39. package/dist/approval-gate-currency.js +3 -2
  40. package/dist/approval-leg-origin.d.ts +33 -0
  41. package/dist/approval-leg-origin.js +4 -0
  42. package/dist/approval-reconciler.d.ts +4 -13
  43. package/dist/approval-reconciler.js +2 -2
  44. package/dist/approval.d.ts +13 -11
  45. package/dist/approval.js +3 -3
  46. package/dist/audit.d.ts +10 -3
  47. package/dist/audit.js +15 -7
  48. package/dist/auth-bridge.d.ts +9 -15
  49. package/dist/auth-bridge.js +4 -11
  50. package/dist/auth-keys.d.ts +10 -1
  51. package/dist/auth-keys.js +8 -0
  52. package/dist/auto-mode-face.d.ts +10 -7
  53. package/dist/auto-mode-face.js +7 -4
  54. package/dist/background-agent-name.d.ts +19 -1
  55. package/dist/background-agent-name.js +12 -2
  56. package/dist/background-session-reap.d.ts +1 -1
  57. package/dist/bake-runner/main.js +9 -6
  58. package/dist/bench/s1/arms.js +6 -5
  59. package/dist/bench/s1/live-deps.js +5 -2
  60. package/dist/bench/s1/run-firm.js +6 -5
  61. package/dist/bind-host.d.ts +25 -0
  62. package/dist/bind-host.js +25 -0
  63. package/dist/boot/adoption.d.ts +3 -0
  64. package/dist/boot/adoption.js +1 -0
  65. package/dist/boot/deployment-mods.d.ts +1 -1
  66. package/dist/boot/execution-env.d.ts +17 -7
  67. package/dist/boot/execution-env.js +47 -42
  68. package/dist/boot/execution-lane.d.ts +6 -4
  69. package/dist/boot/execution-lane.js +3 -1
  70. package/dist/boot/exit-boundary.d.ts +2 -2
  71. package/dist/boot/exit-boundary.js +6 -5
  72. package/dist/boot/fatal-exit.d.ts +3 -5
  73. package/dist/boot/fatal-exit.js +2 -2
  74. package/dist/boot/leader.d.ts +15 -0
  75. package/dist/boot/leader.js +17 -15
  76. package/dist/boot/memory-consolidation.d.ts +37 -29
  77. package/dist/boot/memory-consolidation.js +11 -5
  78. package/dist/boot/org-delivery.d.ts +3 -2
  79. package/dist/boot/org-memory.js +1 -1
  80. package/dist/boot/parked-revive-gate.js +2 -2
  81. package/dist/boot/reapers.d.ts +4 -3
  82. package/dist/boot/reapers.js +19 -16
  83. package/dist/boot/resolve-spec.d.ts +5 -3
  84. package/dist/boot/resolve-spec.js +60 -70
  85. package/dist/boot/retention-lane.d.ts +4 -4
  86. package/dist/boot/retention-lane.js +2 -2
  87. package/dist/boot/runner-deps.d.ts +28 -7
  88. package/dist/boot/runner-deps.js +14 -5
  89. package/dist/boot/runtime-caps.d.ts +2 -2
  90. package/dist/boot/runtime-caps.js +16 -2
  91. package/dist/boot/session-faces.d.ts +16 -7
  92. package/dist/boot/session-faces.js +114 -94
  93. package/dist/boot/shutdown.d.ts +5 -4
  94. package/dist/boot/shutdown.js +6 -4
  95. package/dist/boot/stage-01-config.d.ts +1 -0
  96. package/dist/boot/stage-01-config.js +13 -4
  97. package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
  98. package/dist/boot/stage-02-web-admin-pull.js +16 -3
  99. package/dist/boot/stage-03-store-backend.d.ts +4 -0
  100. package/dist/boot/stage-03-store-backend.js +4 -3
  101. package/dist/boot/stage-04-stores.d.ts +3 -0
  102. package/dist/boot/stage-04-stores.js +2 -2
  103. package/dist/boot/stage-05-execution-env.d.ts +8 -3
  104. package/dist/boot/stage-05-execution-env.js +2 -2
  105. package/dist/boot/stage-06-runners.d.ts +12 -13
  106. package/dist/boot/stage-06-runners.js +23 -15
  107. package/dist/boot/stage-07-capability-layer.d.ts +13 -9
  108. package/dist/boot/stage-07-capability-layer.js +5 -3
  109. package/dist/boot/stage-08-reapers.d.ts +13 -9
  110. package/dist/boot/stage-08-reapers.js +3 -3
  111. package/dist/boot/stage-09-leader.d.ts +14 -16
  112. package/dist/boot/stage-09-leader.js +12 -4
  113. package/dist/boot/stage-10-http-server.d.ts +14 -16
  114. package/dist/boot/stage-10-http-server.js +7 -4
  115. package/dist/boot/store-evidence.d.ts +20 -0
  116. package/dist/boot/store-evidence.js +13 -0
  117. package/dist/boot/stores.d.ts +6 -0
  118. package/dist/boot/stores.js +41 -27
  119. package/dist/boot/task-list-lane.d.ts +4 -4
  120. package/dist/boot/web-admin.d.ts +4 -2
  121. package/dist/boot/web-admin.js +55 -35
  122. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  123. package/dist/boot-reclaim.d.ts +3 -1
  124. package/dist/boot-reclaim.js +1 -1
  125. package/dist/brain.d.ts +7 -18
  126. package/dist/brain.js +5 -17
  127. package/dist/budget.js +6 -6
  128. package/dist/capabilities/center-plugins.d.ts +7 -1
  129. package/dist/capabilities/center-plugins.js +32 -10
  130. package/dist/capabilities/center-wiring.js +1 -1
  131. package/dist/capabilities/composite-members.d.ts +2 -2
  132. package/dist/capabilities/composite-members.js +2 -2
  133. package/dist/capabilities/repo-tools.d.ts +2 -0
  134. package/dist/capabilities/repo-tools.js +14 -12
  135. package/dist/capabilities/scenarios.d.ts +6 -15
  136. package/dist/capabilities/scenarios.js +11 -16
  137. package/dist/capabilities/skills.d.ts +1 -1
  138. package/dist/capabilities/tool-defer.d.ts +1 -1
  139. package/dist/capability-facts.d.ts +39 -11
  140. package/dist/capability-facts.js +35 -7
  141. package/dist/card-settle-stored-scope.d.ts +56 -0
  142. package/dist/card-settle-stored-scope.js +27 -0
  143. package/dist/card-void.d.ts +8 -13
  144. package/dist/card-void.js +2 -7
  145. package/dist/center-credential-renewer.d.ts +6 -2
  146. package/dist/center-credential-renewer.js +7 -3
  147. package/dist/config-catalog.d.ts +28 -1
  148. package/dist/config-catalog.js +95 -85
  149. package/dist/config-dir-trust.d.ts +37 -4
  150. package/dist/config-dir-trust.js +88 -44
  151. package/dist/config-invariants.d.ts +43 -3
  152. package/dist/config-invariants.js +69 -5
  153. package/dist/config-lkg.d.ts +23 -1
  154. package/dist/config-lkg.js +17 -3
  155. package/dist/config-provider.d.ts +9 -9
  156. package/dist/config-provider.js +25 -110
  157. package/dist/config-pull-failure.d.ts +50 -0
  158. package/dist/config-pull-failure.js +48 -0
  159. package/dist/config-types.d.ts +62 -21
  160. package/dist/config.d.ts +14 -21
  161. package/dist/config.js +141 -64
  162. package/dist/context-window-notice.d.ts +31 -0
  163. package/dist/context-window-notice.js +28 -0
  164. package/dist/delegated-session-owner.d.ts +1 -1
  165. package/dist/deleted-session-ids.d.ts +3 -2
  166. package/dist/deployment-governance.d.ts +3 -3
  167. package/dist/deployment-shape.d.ts +46 -11
  168. package/dist/deployment-shape.js +8 -0
  169. package/dist/egress-redirect.d.ts +25 -7
  170. package/dist/egress-redirect.js +20 -2
  171. package/dist/elicitation.d.ts +6 -5
  172. package/dist/elicitation.js +23 -22
  173. package/dist/engine-identity.d.ts +28 -0
  174. package/dist/engine-identity.js +10 -0
  175. package/dist/entry-problems.d.ts +5 -7
  176. package/dist/entry-problems.js +1 -1
  177. package/dist/env-facts.js +2 -1
  178. package/dist/env-name-allowlist-knobs.d.ts +6 -5
  179. package/dist/env-name-allowlist-knobs.js +5 -0
  180. package/dist/env-witness.d.ts +7 -0
  181. package/dist/env-witness.js +16 -0
  182. package/dist/execution-lane-caps.d.ts +25 -23
  183. package/dist/execution-lane-caps.js +18 -26
  184. package/dist/execution-placement.d.ts +58 -18
  185. package/dist/execution-placement.js +41 -2
  186. package/dist/field-conflict.d.ts +7 -11
  187. package/dist/field-conflict.js +3 -3
  188. package/dist/file-history-capture.d.ts +3 -3
  189. package/dist/file-history-disclosure.js +1 -0
  190. package/dist/fleet/fleet-bus.d.ts +21 -3
  191. package/dist/fleet/fleet-bus.js +35 -25
  192. package/dist/fleet/fleet-reconciler.js +2 -2
  193. package/dist/fleet/serving-lease.js +3 -3
  194. package/dist/fleet-client.js +3 -3
  195. package/dist/fleet-lease.d.ts +0 -1
  196. package/dist/fleet-lease.js +4 -5
  197. package/dist/history-anchor.d.ts +23 -3
  198. package/dist/history-anchor.js +24 -4
  199. package/dist/hitl-delivery.d.ts +90 -0
  200. package/dist/hitl-delivery.js +98 -0
  201. package/dist/hooks/classic-stations.d.ts +8 -11
  202. package/dist/hooks/classic-stations.js +0 -7
  203. package/dist/hooks/command-spawn.d.ts +7 -2
  204. package/dist/hooks/command-spawn.js +13 -6
  205. package/dist/hooks/hook-llm.d.ts +5 -1
  206. package/dist/hooks/hook-llm.js +24 -15
  207. package/dist/hooks/hook-runner.d.ts +72 -57
  208. package/dist/hooks/hook-runner.js +271 -193
  209. package/dist/host-lsp-manager.d.ts +22 -8
  210. package/dist/host-lsp-manager.js +4 -1
  211. package/dist/http/active-run-conflict.d.ts +2 -43
  212. package/dist/http/active-run-conflict.js +3 -7
  213. package/dist/http/admission.d.ts +4 -18
  214. package/dist/http/admission.js +76 -79
  215. package/dist/http/approval-sweeps.d.ts +3 -3
  216. package/dist/http/approval-sweeps.js +56 -31
  217. package/dist/http/caller-trust.d.ts +8 -10
  218. package/dist/http/caller-trust.js +1 -2
  219. package/dist/http/claim-heartbeat.d.ts +49 -0
  220. package/dist/http/claim-heartbeat.js +46 -0
  221. package/dist/http/claimed-run.d.ts +16 -8
  222. package/dist/http/claimed-run.js +8 -0
  223. package/dist/http/dispatch.d.ts +8 -1
  224. package/dist/http/dispatch.js +78 -30
  225. package/dist/http/durable-run-leg.d.ts +11 -4
  226. package/dist/http/durable-run-leg.js +45 -21
  227. package/dist/http/execution-context.d.ts +122 -47
  228. package/dist/http/execution-context.js +135 -43
  229. package/dist/http/health-reader.d.ts +36 -0
  230. package/dist/http/health-reader.js +21 -0
  231. package/dist/http/health-self-report.d.ts +9 -9
  232. package/dist/http/health-self-report.js +4 -4
  233. package/dist/http/idempotency.d.ts +9 -5
  234. package/dist/http/idempotency.js +4 -4
  235. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  236. package/dist/http/memory-compliance-failure-reply.js +4 -2
  237. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  238. package/dist/http/memory-face-fault-reply.js +71 -0
  239. package/dist/http/memory-store-refusal-reply.d.ts +1 -1
  240. package/dist/http/memory-store-refusal-reply.js +3 -0
  241. package/dist/http/owner-access.d.ts +392 -67
  242. package/dist/http/owner-access.js +370 -35
  243. package/dist/http/principal-gate.d.ts +39 -89
  244. package/dist/http/principal-gate.js +26 -68
  245. package/dist/http/refusal-body.d.ts +35 -2
  246. package/dist/http/refusal-body.js +34 -0
  247. package/dist/http/request-guards.d.ts +9 -13
  248. package/dist/http/request-guards.js +34 -68
  249. package/dist/http/resume-composition.d.ts +37 -0
  250. package/dist/http/resume-composition.js +18 -0
  251. package/dist/http/resume-ctx-read.d.ts +46 -12
  252. package/dist/http/resume-ctx-read.js +31 -6
  253. package/dist/http/resume-legs.d.ts +54 -19
  254. package/dist/http/resume-legs.js +408 -196
  255. package/dist/http/retired-skill-manifest.d.ts +1 -1
  256. package/dist/http/route-ctx.d.ts +31 -32
  257. package/dist/http/routes/a2a-serve.d.ts +43 -5
  258. package/dist/http/routes/a2a-serve.js +60 -37
  259. package/dist/http/routes/admin-config-refresh.js +2 -2
  260. package/dist/http/routes/admin-drain.js +2 -2
  261. package/dist/http/routes/admin-memory-optout.js +4 -3
  262. package/dist/http/routes/adoption.d.ts +3 -0
  263. package/dist/http/routes/adoption.js +17 -10
  264. package/dist/http/routes/agents-roster.js +13 -7
  265. package/dist/http/routes/approvals-assistant.js +73 -67
  266. package/dist/http/routes/attachments.js +2 -2
  267. package/dist/http/routes/background.d.ts +3 -3
  268. package/dist/http/routes/background.js +9 -17
  269. package/dist/http/routes/capabilities.js +16 -19
  270. package/dist/http/routes/config-catalog.js +2 -2
  271. package/dist/http/routes/devices.d.ts +3 -3
  272. package/dist/http/routes/devices.js +4 -4
  273. package/dist/http/routes/diagnostics.d.ts +29 -3
  274. package/dist/http/routes/diagnostics.js +49 -18
  275. package/dist/http/routes/engine.js +2 -2
  276. package/dist/http/routes/fleet.js +5 -3
  277. package/dist/http/routes/images.js +10 -6
  278. package/dist/http/routes/leader.d.ts +7 -2
  279. package/dist/http/routes/leader.js +12 -3
  280. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  281. package/dist/http/routes/mcp-reconnect.js +7 -15
  282. package/dist/http/routes/memory-bundle.js +4 -7
  283. package/dist/http/routes/memory-compliance.js +4 -4
  284. package/dist/http/routes/memory-consolidation.js +6 -9
  285. package/dist/http/routes/memory-origin.d.ts +2 -0
  286. package/dist/http/routes/memory-origin.js +7 -8
  287. package/dist/http/routes/memory-policy.js +17 -12
  288. package/dist/http/routes/notify-wake.js +10 -19
  289. package/dist/http/routes/observability.js +3 -3
  290. package/dist/http/routes/principal-inbox.d.ts +4 -2
  291. package/dist/http/routes/principal-inbox.js +5 -4
  292. package/dist/http/routes/projects.d.ts +1 -1
  293. package/dist/http/routes/projects.js +3 -2
  294. package/dist/http/routes/retention-ops.js +6 -9
  295. package/dist/http/routes/rules.js +20 -5
  296. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  297. package/dist/http/routes/run-memory-capture.js +6 -12
  298. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  299. package/dist/http/routes/run-permission-mode.js +10 -17
  300. package/dist/http/routes/runs.js +155 -237
  301. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  302. package/dist/http/routes/session-memory-sync.js +7 -13
  303. package/dist/http/routes/session-sync.d.ts +28 -7
  304. package/dist/http/routes/session-sync.js +63 -50
  305. package/dist/http/routes/sessions-list.d.ts +3 -3
  306. package/dist/http/routes/sessions-list.js +9 -9
  307. package/dist/http/routes/sessions.js +87 -124
  308. package/dist/http/routes/shared-memory.js +6 -6
  309. package/dist/http/routes/side-query.js +2 -2
  310. package/dist/http/routes/tasks.js +237 -187
  311. package/dist/http/routes/trace-usage.d.ts +0 -12
  312. package/dist/http/routes/trace-usage.js +40 -46
  313. package/dist/http/routes/workflows.d.ts +39 -4
  314. package/dist/http/routes/workflows.js +42 -14
  315. package/dist/http/run-concurrency-cap.d.ts +20 -12
  316. package/dist/http/run-concurrency-cap.js +39 -26
  317. package/dist/http/run-read-face.d.ts +3 -5
  318. package/dist/http/run-read-face.js +8 -13
  319. package/dist/http/send.d.ts +12 -3
  320. package/dist/http/send.js +42 -6
  321. package/dist/http/server.d.ts +43 -45
  322. package/dist/http/server.js +61 -11
  323. package/dist/http/sse-log.d.ts +17 -10
  324. package/dist/http/sse-log.js +7 -7
  325. package/dist/http/stored-body-replay.d.ts +12 -0
  326. package/dist/http/stored-body-replay.js +2 -2
  327. package/dist/http/submit-ctx.d.ts +17 -8
  328. package/dist/http/submit-ctx.js +8 -5
  329. package/dist/http/submit-replay.d.ts +19 -6
  330. package/dist/http/submit-replay.js +18 -6
  331. package/dist/http/sync-submit-body.d.ts +3 -4
  332. package/dist/http/sync-submit-body.js +4 -5
  333. package/dist/http/wire-types.d.ts +4 -3
  334. package/dist/identity-source.d.ts +36 -5
  335. package/dist/identity-source.js +27 -0
  336. package/dist/index.d.ts +4 -1
  337. package/dist/index.js +2 -0
  338. package/dist/key-resolver.d.ts +32 -0
  339. package/dist/key-resolver.js +23 -9
  340. package/dist/leader/diffup.js +2 -1
  341. package/dist/leader/endpoint.d.ts +26 -5
  342. package/dist/leader/endpoint.js +154 -14
  343. package/dist/leader/fanout.d.ts +3 -0
  344. package/dist/leader/fanout.js +78 -63
  345. package/dist/leader/leader.d.ts +16 -0
  346. package/dist/leader/leader.js +43 -3
  347. package/dist/leader/merge.d.ts +9 -1
  348. package/dist/leader/merge.js +16 -1
  349. package/dist/leader/repair-wire.js +1 -1
  350. package/dist/leader/wire.d.ts +36 -3
  351. package/dist/leader/wire.js +59 -18
  352. package/dist/leg-facts.d.ts +7 -2
  353. package/dist/leg-facts.js +1 -0
  354. package/dist/local-store-declaration.d.ts +54 -0
  355. package/dist/local-store-declaration.js +59 -0
  356. package/dist/lsp-evict.d.ts +6 -4
  357. package/dist/lsp-evict.js +2 -3
  358. package/dist/mcp-assertion-header.d.ts +1 -1
  359. package/dist/mcp-assertion-header.js +1 -1
  360. package/dist/memory-operator-faces.d.ts +5 -4
  361. package/dist/memory-operator-faces.js +1 -1
  362. package/dist/memory-project-layer.js +1 -1
  363. package/dist/memory-scope.d.ts +33 -6
  364. package/dist/memory-scope.js +68 -19
  365. package/dist/memory-store-refusal.d.ts +5 -2
  366. package/dist/memory-sync-client.d.ts +3 -2
  367. package/dist/memory-sync-client.js +8 -5
  368. package/dist/model-compat.d.ts +17 -8
  369. package/dist/model-compat.js +6 -2
  370. package/dist/model-context-window.d.ts +57 -0
  371. package/dist/model-context-window.js +21 -0
  372. package/dist/model-entry-headers.d.ts +46 -4
  373. package/dist/model-entry-headers.js +2 -2
  374. package/dist/model-entry-refusal.d.ts +40 -20
  375. package/dist/model-entry-refusal.js +57 -30
  376. package/dist/model-plane-face.d.ts +19 -11
  377. package/dist/model-plane-face.js +9 -1
  378. package/dist/model-plane-probe.d.ts +2 -0
  379. package/dist/model-plane-probe.js +17 -0
  380. package/dist/model-provider.d.ts +3 -3
  381. package/dist/model-reach-scope.d.ts +2 -1
  382. package/dist/model-route-endpoint.d.ts +9 -5
  383. package/dist/model-route-endpoint.js +29 -7
  384. package/dist/model-select.d.ts +16 -0
  385. package/dist/model-select.js +4 -0
  386. package/dist/mountinfo.d.ts +37 -0
  387. package/dist/mountinfo.js +47 -0
  388. package/dist/namespaced-rule-name.d.ts +23 -14
  389. package/dist/namespaced-rule-name.js +8 -11
  390. package/dist/net-address.d.ts +1 -1
  391. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  392. package/dist/observability/corrupt-read-seat.js +5 -3
  393. package/dist/observability/fail-open.d.ts +72 -40
  394. package/dist/observability/fail-open.js +74 -40
  395. package/dist/observability/logger.d.ts +22 -1
  396. package/dist/observability/logger.js +89 -12
  397. package/dist/observability/metrics.js +4 -5
  398. package/dist/observability/otel-exporter.js +2 -1
  399. package/dist/observability/principal-context.d.ts +14 -7
  400. package/dist/observability/principal-context.js +8 -3
  401. package/dist/observability/run-terminal.d.ts +7 -1
  402. package/dist/observability/run-terminal.js +6 -2
  403. package/dist/observability/secret-env-scrub.d.ts +1 -1
  404. package/dist/observability/secret-env-scrub.js +1 -1
  405. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  406. package/dist/orchestration/hardened-vm-runner.js +11 -5
  407. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  408. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  409. package/dist/orchestration/hardened-vm-worker.js +2 -1
  410. package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
  411. package/dist/orchestration/workflow-completion-inbox.js +3 -2
  412. package/dist/org-delivery-gate.d.ts +36 -10
  413. package/dist/org-delivery-gate.js +12 -8
  414. package/dist/outbound-dispatcher.d.ts +1 -1
  415. package/dist/outbound-dispatcher.js +6 -12
  416. package/dist/owner-brands.d.ts +81 -0
  417. package/dist/owner-brands.js +42 -0
  418. package/dist/owner-faces.d.ts +532 -0
  419. package/dist/owner-faces.js +126 -0
  420. package/dist/park-row-commit.d.ts +67 -0
  421. package/dist/park-row-commit.js +76 -0
  422. package/dist/parked-decide.d.ts +76 -12
  423. package/dist/parked-decide.js +152 -11
  424. package/dist/parked-revive-surface.d.ts +14 -4
  425. package/dist/parked-revive-surface.js +5 -4
  426. package/dist/peer-directory.d.ts +7 -9
  427. package/dist/peer-directory.js +3 -2
  428. package/dist/permission-rule-vocab.d.ts +53 -8
  429. package/dist/permission-rule-vocab.js +30 -2
  430. package/dist/plugins/adoption-log-sql.d.ts +3 -25
  431. package/dist/plugins/adoption-log-sql.js +23 -21
  432. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  433. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  434. package/dist/plugins/approval-ask-store-file.d.ts +18 -7
  435. package/dist/plugins/approval-ask-store-file.js +37 -14
  436. package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
  437. package/dist/plugins/approval-ask-store-memory.js +24 -10
  438. package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
  439. package/dist/plugins/approval-ask-store-sql.js +44 -15
  440. package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
  441. package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
  442. package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
  443. package/dist/plugins/approval-exemption-skill-m46.js +21 -0
  444. package/dist/plugins/approval-exemption-store.d.ts +32 -2
  445. package/dist/plugins/approval-exemption-store.js +42 -19
  446. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  447. package/dist/plugins/approval-nonce-store.js +72 -23
  448. package/dist/plugins/blob-backend.d.ts +2 -0
  449. package/dist/plugins/blob-backend.js +9 -6
  450. package/dist/plugins/caching-session-store.d.ts +13 -1
  451. package/dist/plugins/caching-session-store.js +43 -4
  452. package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
  453. package/dist/plugins/checkpoint-index-columns.js +36 -1
  454. package/dist/plugins/checkpoint-store-face.d.ts +83 -10
  455. package/dist/plugins/checkpoint-store-face.js +18 -1
  456. package/dist/plugins/device-store-sql.js +1 -0
  457. package/dist/plugins/ensure-index.d.ts +13 -1
  458. package/dist/plugins/ensure-index.js +154 -21
  459. package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
  460. package/dist/plugins/ensure-schema-lock-policy.js +76 -9
  461. package/dist/plugins/file-run-store.d.ts +85 -32
  462. package/dist/plugins/file-run-store.js +177 -94
  463. package/dist/plugins/host-platform.d.ts +24 -3
  464. package/dist/plugins/host-platform.js +15 -1
  465. package/dist/plugins/image-bake-store-sql.js +2 -0
  466. package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
  467. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  468. package/dist/plugins/k8s-pod-reaper.js +0 -1
  469. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  470. package/dist/plugins/leader-run-store-sql.js +34 -4
  471. package/dist/plugins/local-checkpoint-store.d.ts +62 -23
  472. package/dist/plugins/local-checkpoint-store.js +197 -77
  473. package/dist/plugins/local-data-dir-modes-m39.js +2 -1
  474. package/dist/plugins/local-data-root-admission.d.ts +52 -0
  475. package/dist/plugins/local-data-root-admission.js +100 -0
  476. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  477. package/dist/plugins/local-docker-capacity.js +194 -0
  478. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  479. package/dist/plugins/local-docker-reaper.js +102 -0
  480. package/dist/plugins/local-engine-high-water.d.ts +29 -6
  481. package/dist/plugins/local-engine-high-water.js +27 -19
  482. package/dist/plugins/local-session-store.d.ts +458 -140
  483. package/dist/plugins/local-session-store.js +906 -292
  484. package/dist/plugins/local-session-window.d.ts +3 -2
  485. package/dist/plugins/local-session-window.js +3 -2
  486. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  487. package/dist/plugins/local-task-attachment-store.d.ts +18 -1
  488. package/dist/plugins/local-task-attachment-store.js +22 -1
  489. package/dist/plugins/memory-embedder.js +9 -7
  490. package/dist/plugins/memory-engine-pg.d.ts +3 -2
  491. package/dist/plugins/memory-engine-pg.js +14 -5
  492. package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
  493. package/dist/plugins/memory-engine-sql-apply.js +6 -8
  494. package/dist/plugins/memory-engine-tidb.d.ts +4 -2
  495. package/dist/plugins/memory-engine-tidb.js +11 -2
  496. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  497. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  498. package/dist/plugins/memory-run-store.d.ts +53 -36
  499. package/dist/plugins/memory-run-store.js +116 -88
  500. package/dist/plugins/one-time-migration-marker.d.ts +26 -0
  501. package/dist/plugins/one-time-migration-marker.js +13 -0
  502. package/dist/plugins/one-time-migrations.d.ts +214 -47
  503. package/dist/plugins/one-time-migrations.js +481 -135
  504. package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
  505. package/dist/plugins/org-delivery-quota-store.js +31 -15
  506. package/dist/plugins/permission-rule-store-file.d.ts +3 -3
  507. package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
  508. package/dist/plugins/permission-rule-store-sql.js +11 -95
  509. package/dist/plugins/pg-pool.d.ts +2 -32
  510. package/dist/plugins/pg-pool.js +24 -17
  511. package/dist/plugins/remote-env-device.d.ts +3 -2
  512. package/dist/plugins/remote-env-e2b.d.ts +8 -32
  513. package/dist/plugins/remote-env-e2b.js +44 -32
  514. package/dist/plugins/remote-env-host.d.ts +51 -17
  515. package/dist/plugins/remote-env-host.js +111 -42
  516. package/dist/plugins/remote-env-k8s.d.ts +40 -45
  517. package/dist/plugins/remote-env-k8s.js +111 -60
  518. package/dist/plugins/remote-env-local-docker.d.ts +152 -15
  519. package/dist/plugins/remote-env-local-docker.js +352 -72
  520. package/dist/plugins/remote-scratchpad.js +4 -0
  521. package/dist/plugins/retention-deployment.d.ts +49 -17
  522. package/dist/plugins/retention-deployment.js +39 -8
  523. package/dist/plugins/run-preview-m45.d.ts +11 -0
  524. package/dist/plugins/run-preview-m45.js +19 -0
  525. package/dist/plugins/run-store-sql.d.ts +82 -75
  526. package/dist/plugins/run-store-sql.js +164 -125
  527. package/dist/plugins/s3-answer.d.ts +2 -1
  528. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  529. package/dist/plugins/sandbox-reaper.js +2 -0
  530. package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
  531. package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
  532. package/dist/plugins/scheduler-support.d.ts +16 -1
  533. package/dist/plugins/scheduler-support.js +22 -2
  534. package/dist/plugins/schema-consistency.d.ts +131 -14
  535. package/dist/plugins/schema-consistency.js +388 -18
  536. package/dist/plugins/schema-drift-sentence.d.ts +10 -6
  537. package/dist/plugins/schema-drift-sentence.js +15 -7
  538. package/dist/plugins/schema-ensure-legs.d.ts +9 -0
  539. package/dist/plugins/schema-ensure-legs.js +1 -1
  540. package/dist/plugins/schema-indexes.js +3 -0
  541. package/dist/plugins/schema-live-columns.d.ts +14 -5
  542. package/dist/plugins/schema-live-columns.js +10 -10
  543. package/dist/plugins/send-user-file.js +2 -1
  544. package/dist/plugins/session-birth.d.ts +37 -0
  545. package/dist/plugins/session-birth.js +38 -0
  546. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  547. package/dist/plugins/session-epoch-anchor.js +33 -11
  548. package/dist/plugins/session-ext-table.d.ts +27 -3
  549. package/dist/plugins/session-ext-table.js +19 -6
  550. package/dist/plugins/session-fork.d.ts +15 -1
  551. package/dist/plugins/session-fork.js +3 -0
  552. package/dist/plugins/session-ownership.d.ts +1 -1
  553. package/dist/plugins/session-placement.d.ts +27 -20
  554. package/dist/plugins/session-placement.js +15 -12
  555. package/dist/plugins/session-row-sql.d.ts +12 -0
  556. package/dist/plugins/session-row-sql.js +3 -3
  557. package/dist/plugins/session-run-rollup.d.ts +29 -0
  558. package/dist/plugins/session-run-rollup.js +40 -0
  559. package/dist/plugins/session-store-sql.d.ts +38 -12
  560. package/dist/plugins/session-store-sql.js +130 -30
  561. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  562. package/dist/plugins/session-withdraw-sql.js +42 -0
  563. package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
  564. package/dist/plugins/shared-memory-store-sql.js +2 -1
  565. package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
  566. package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
  567. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  568. package/dist/plugins/sql-driver.d.ts +1 -1
  569. package/dist/plugins/sql-driver.js +2 -1
  570. package/dist/plugins/sql-errors.d.ts +32 -5
  571. package/dist/plugins/sql-errors.js +55 -7
  572. package/dist/plugins/sql-json-column.d.ts +8 -7
  573. package/dist/plugins/sql-json-column.js +10 -6
  574. package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
  575. package/dist/plugins/stop-then-start-sentence.js +7 -0
  576. package/dist/plugins/store-backend.d.ts +99 -16
  577. package/dist/plugins/store-backend.js +230 -65
  578. package/dist/plugins/store-contracts.d.ts +123 -33
  579. package/dist/plugins/store-contracts.js +38 -1
  580. package/dist/plugins/store-fault.d.ts +28 -2
  581. package/dist/plugins/store-fault.js +20 -2
  582. package/dist/plugins/task-attachment-store.d.ts +15 -3
  583. package/dist/plugins/task-attachment-store.js +22 -9
  584. package/dist/plugins/tidb-pool.d.ts +11 -6
  585. package/dist/plugins/tidb-pool.js +39 -18
  586. package/dist/plugins/web-search.js +5 -3
  587. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  588. package/dist/plugins/workflow-run-store-sql.js +11 -5
  589. package/dist/plugins/workspace-custody.d.ts +44 -0
  590. package/dist/plugins/workspace-custody.js +47 -0
  591. package/dist/principal-jwt.d.ts +4 -4
  592. package/dist/principal-jwt.js +20 -5
  593. package/dist/principal-shape.d.ts +41 -0
  594. package/dist/principal-shape.js +19 -0
  595. package/dist/project-identity.d.ts +8 -7
  596. package/dist/project-identity.js +40 -17
  597. package/dist/project-layer-key.d.ts +13 -2
  598. package/dist/project-layer-key.js +9 -1
  599. package/dist/question.d.ts +13 -23
  600. package/dist/question.js +21 -39
  601. package/dist/read-deny-floor-notice.d.ts +36 -0
  602. package/dist/read-deny-floor-notice.js +40 -0
  603. package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
  604. package/dist/request-declaration-disposition.js +39 -0
  605. package/dist/request-declaration-refusal.d.ts +35 -12
  606. package/dist/request-declaration-refusal.js +21 -9
  607. package/dist/request-form.d.ts +58 -0
  608. package/dist/request-form.js +72 -0
  609. package/dist/request-image-urls.d.ts +8 -2
  610. package/dist/request-image-urls.js +2 -1
  611. package/dist/request-images.d.ts +20 -0
  612. package/dist/request-images.js +59 -0
  613. package/dist/request-key-closure.d.ts +6 -7
  614. package/dist/request-key-closure.js +15 -2
  615. package/dist/resource-suspend.d.ts +7 -16
  616. package/dist/resource-suspend.js +1 -1
  617. package/dist/retired-name-host-notice.d.ts +21 -0
  618. package/dist/retired-name-host-notice.js +12 -0
  619. package/dist/rule-entry-list.d.ts +2 -2
  620. package/dist/rule-entry-list.js +3 -4
  621. package/dist/rule-issue-reading.d.ts +58 -0
  622. package/dist/rule-issue-reading.js +14 -0
  623. package/dist/rules-consent.d.ts +5 -3
  624. package/dist/rules-consent.js +1 -0
  625. package/dist/run-acceptance.d.ts +3 -1
  626. package/dist/run-acceptance.js +3 -0
  627. package/dist/run-cancel-card.d.ts +28 -0
  628. package/dist/run-cancel-card.js +19 -0
  629. package/dist/run-cancel-context.d.ts +10 -0
  630. package/dist/run-cancel-context.js +1 -0
  631. package/dist/run-local.d.ts +14 -6
  632. package/dist/run-local.js +117 -90
  633. package/dist/run-stale-default.d.ts +7 -0
  634. package/dist/run-stale-default.js +2 -0
  635. package/dist/runs.d.ts +56 -21
  636. package/dist/runs.js +73 -43
  637. package/dist/runtime-caps-resolver.d.ts +21 -6
  638. package/dist/runtime-caps-resolver.js +17 -4
  639. package/dist/runtime-governance.d.ts +2 -2
  640. package/dist/runtime-governance.js +5 -3
  641. package/dist/sealed-key-layout.d.ts +12 -5
  642. package/dist/sealed-key-layout.js +5 -0
  643. package/dist/sealed-key.d.ts +12 -2
  644. package/dist/sealed-key.js +115 -27
  645. package/dist/security.d.ts +128 -158
  646. package/dist/security.js +163 -59
  647. package/dist/sema-config-dir.d.ts +20 -0
  648. package/dist/sema-config-dir.js +25 -0
  649. package/dist/server-secret-env.d.ts +55 -25
  650. package/dist/server-secret-env.js +75 -22
  651. package/dist/session-agent.d.ts +3 -2
  652. package/dist/session-children-retire.d.ts +13 -8
  653. package/dist/session-children-retire.js +9 -7
  654. package/dist/session-deletion.d.ts +88 -0
  655. package/dist/session-deletion.js +8 -0
  656. package/dist/session-erase.d.ts +145 -0
  657. package/dist/session-erase.js +115 -0
  658. package/dist/session-error-wire.d.ts +5 -5
  659. package/dist/session-error-wire.js +1 -1
  660. package/dist/session-incarnation.d.ts +52 -5
  661. package/dist/session-incarnation.js +19 -2
  662. package/dist/session-policy-wire.d.ts +6 -3
  663. package/dist/session-policy-wire.js +11 -1
  664. package/dist/session-resident-background.d.ts +0 -71
  665. package/dist/session-resident-background.js +4 -3
  666. package/dist/session-row.d.ts +2 -1
  667. package/dist/session-rules-seat.d.ts +12 -0
  668. package/dist/session-rules-seat.js +19 -0
  669. package/dist/session-titler.d.ts +7 -15
  670. package/dist/session-titler.js +1 -1
  671. package/dist/session-workspace.d.ts +3 -3
  672. package/dist/spec-fields.d.ts +57 -3
  673. package/dist/spec-fields.js +72 -51
  674. package/dist/store-admission.d.ts +33 -0
  675. package/dist/store-admission.js +49 -0
  676. package/dist/store-posture.d.ts +141 -20
  677. package/dist/store-posture.js +205 -3
  678. package/dist/stored-request-hooks-m20.js +2 -2
  679. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  680. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  681. package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
  682. package/dist/stores-sql/checkpoint-store-sql.js +78 -49
  683. package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
  684. package/dist/stores-sql/file-history-store-sql.js +3 -5
  685. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  686. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  687. package/dist/stores-sql/pg-session-storage.d.ts +7 -5
  688. package/dist/stores-sql/pg-session-storage.js +54 -46
  689. package/dist/stores-sql/retention-store-sql.d.ts +87 -19
  690. package/dist/stores-sql/retention-store-sql.js +92 -27
  691. package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
  692. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  693. package/dist/stores-sql/session-write-hooks.d.ts +12 -6
  694. package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
  695. package/dist/stores-sql/tidb-session-storage.js +13 -8
  696. package/dist/stores-sql/tidb-session-store.d.ts +36 -17
  697. package/dist/stores-sql/tidb-session-store.js +69 -39
  698. package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
  699. package/dist/stores-sql/tool-result-store-sql.js +4 -6
  700. package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
  701. package/dist/stores-sql/windowed-session-storage.js +9 -0
  702. package/dist/submission-exit.d.ts +50 -0
  703. package/dist/submission-exit.js +108 -0
  704. package/dist/task-a2a.d.ts +3 -8
  705. package/dist/task-a2a.js +28 -30
  706. package/dist/task-cwd.d.ts +43 -7
  707. package/dist/task-cwd.js +11 -0
  708. package/dist/task-mcp.d.ts +3 -3
  709. package/dist/task-mcp.js +4 -4
  710. package/dist/task-settings.d.ts +14 -10
  711. package/dist/task-settings.js +19 -7
  712. package/dist/terminal.d.ts +27 -43
  713. package/dist/terminal.js +49 -14
  714. package/dist/tool-approval.d.ts +173 -163
  715. package/dist/tool-approval.js +247 -232
  716. package/dist/trace/core-keyset-guard.d.ts +13 -6
  717. package/dist/trace/core-vocab-wire.d.ts +95 -0
  718. package/dist/trace/core-vocab-wire.js +15 -0
  719. package/dist/trace/engine-notice-wire.d.ts +24 -21
  720. package/dist/trace/engine-notice-wire.js +7 -3
  721. package/dist/trace/exit-seat.d.ts +30 -4
  722. package/dist/trace/exit-seat.js +40 -36
  723. package/dist/trace/extension-call-face.d.ts +3 -2
  724. package/dist/trace/extension-call-face.js +3 -1
  725. package/dist/trace/ledger-events.d.ts +4 -7
  726. package/dist/trace/ledger-sink.d.ts +4 -31
  727. package/dist/trace/ledger-sink.js +0 -11
  728. package/dist/trace/model-segment.d.ts +5 -5
  729. package/dist/trace/model-segment.js +5 -5
  730. package/dist/trace/project.d.ts +59 -44
  731. package/dist/trace/project.js +60 -26
  732. package/dist/trace/redact.d.ts +135 -27
  733. package/dist/trace/redact.js +884 -260
  734. package/dist/trace/self-minted-wire.d.ts +567 -20
  735. package/dist/trace/self-minted-wire.js +205 -24
  736. package/dist/trace/wire-projection-faces.d.ts +5 -6
  737. package/dist/trace/wire-projection-faces.js +2 -2
  738. package/dist/upstream-body.d.ts +23 -0
  739. package/dist/upstream-body.js +16 -0
  740. package/dist/url-refusal.d.ts +3 -3
  741. package/dist/url-refusal.js +11 -4
  742. package/dist/user-authored-text.d.ts +1 -1
  743. package/dist/user-input-ledger.d.ts +7 -8
  744. package/dist/user-input-ledger.js +1 -1
  745. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  746. package/dist/web-admin-client/apply-effective.js +33 -23
  747. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  748. package/dist/web-admin-client/apply-ledger.js +5 -2
  749. package/dist/web-admin-client/center-request.d.ts +2 -2
  750. package/dist/web-admin-client/center-request.js +15 -15
  751. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  752. package/dist/web-admin-client/effective-keys.js +1 -1
  753. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  754. package/dist/web-admin-client/entry-metadata.js +13 -0
  755. package/dist/web-admin-client/http-client.d.ts +1 -1
  756. package/dist/web-admin-client/http-client.js +23 -4
  757. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  758. package/dist/web-admin-client/mcp-revocation.js +2 -1
  759. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  760. package/dist/web-admin-client/read-warnings.js +1 -0
  761. package/dist/web-admin-client/restart-signal.js +8 -4
  762. package/dist/web-admin-client/skills-mcp.d.ts +2 -2
  763. package/dist/web-admin-client/types.d.ts +1 -2
  764. package/dist/workspace-space.d.ts +3 -2
  765. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  766. package/docs/error-text-lexicon.json +317 -0
  767. package/package.json +8 -3
  768. package/scripts/drain-check-local.mjs +118 -147
  769. package/scripts/drain-check.mysql.sql +22 -2
  770. package/scripts/drain-check.pg.sql +22 -2
  771. package/scripts/embed-minimal.mjs +183 -0
  772. package/wire-changes/server@7.148.0.json +1517 -0
  773. package/wire-changes/server@7.149.0.json +372 -0
  774. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  775. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  776. package/dist/http/memory-layer-reply.d.ts +0 -30
  777. package/dist/http/memory-layer-reply.js +0 -24
  778. package/dist/lsp/e2b-bridge.d.ts +0 -57
  779. package/dist/lsp/e2b-bridge.js +0 -139
  780. package/dist/lsp/e2b-manager.d.ts +0 -93
  781. package/dist/lsp/e2b-manager.js +0 -178
  782. package/dist/lsp/lsp-frames.d.ts +0 -14
  783. package/dist/lsp/lsp-frames.js +0 -25
  784. package/dist/lsp/manager.d.ts +0 -129
  785. package/dist/lsp/manager.js +0 -127
  786. package/dist/lsp/types.d.ts +0 -12
  787. package/dist/lsp/types.js +0 -2
  788. package/dist/lsp/ws-transport.d.ts +0 -40
  789. package/dist/lsp/ws-transport.js +0 -210
  790. package/dist/plain-string-record.js +0 -70
@@ -1,5 +1,6 @@
1
- import { declareWithheldEnv, hostChildEnv, inheritedHostEnv } from "@sema-agent/core";
1
+ import { declareWithheldEnv, hostChildEnv, inheritEnvPolicyProblem, inheritedHostEnv } from "@sema-agent/core";
2
2
  import { CONFIG_CATALOG } from "./config-catalog.js";
3
+ import { parseApprovalHmacKeys, parseServiceAuthTokens } from "./auth-keys.js";
3
4
  import { ENV_NAME_ALLOWLIST_KNOB_NAMES } from "./env-name-allowlist-knobs.js";
4
5
  import { recordOwnCredentialValueNotWithheld, recordSecretEnvScrub } from "./observability/secret-env-scrub.js";
5
6
  export const CATALOG_SECRET_ENV_NAMES = new Set(CONFIG_CATALOG.filter((spec) => spec.type === "secret").map((spec) => spec.name));
@@ -10,53 +11,105 @@ export function serverWithheldEnvNames(modelApiKeyEnv = NO_MODEL_ENTRIES) {
10
11
  export function serverCredentialValueSources(modelApiKeyEnv = NO_MODEL_ENTRIES) {
11
12
  return [...new Set([...CATALOG_SECRET_ENV_NAMES, ...Object.values(modelApiKeyEnv)])].sort();
12
13
  }
14
+ const CREDENTIAL_FORM_OF = new Map(CONFIG_CATALOG.flatMap((spec) => (spec.credentialForm === undefined ? [] : [[spec.name, spec.credentialForm]])));
15
+ const DROPPED_KEYS_TOLD_BY_LOAD_CONFIG = () => { };
16
+ function credentialsIn(form, raw) {
17
+ switch (form) {
18
+ case "whole":
19
+ return [raw];
20
+ case "token-table":
21
+ return [raw, ...Object.keys(parseServiceAuthTokens(raw))];
22
+ case "key-set":
23
+ return [raw, ...parseApprovalHmacKeys(raw, DROPPED_KEYS_TOLD_BY_LOAD_CONFIG).map((k) => k.key)];
24
+ default: {
25
+ const unreachable = form;
26
+ throw new Error(`unhandled secret credential form: ${String(unreachable)}`);
27
+ }
28
+ }
29
+ }
13
30
  let declared;
14
31
  let beforeLast;
15
32
  const valueRefusalAnnounced = new Set();
16
33
  let liveConfig;
17
34
  const envValueOf = (name) => process.env[name];
18
- const valuesOf = (sources) => [...sources].map(envValueOf).filter((v) => typeof v === "string" && v !== "");
35
+ function credentialsHeldBy(source) {
36
+ const raw = envValueOf(source);
37
+ if (raw === undefined || raw === "")
38
+ return [];
39
+ return [...new Set(credentialsIn(CREDENTIAL_FORM_OF.get(source) ?? "whole", raw))].filter((v) => v !== "");
40
+ }
41
+ function heldValues(held) {
42
+ return [...held].flatMap(([source, at]) => {
43
+ const all = credentialsHeldBy(source);
44
+ return [...at].flatMap((i) => {
45
+ const value = all[i];
46
+ return value === undefined ? [] : [value];
47
+ });
48
+ });
49
+ }
19
50
  export function declareServerWithheldEnv(modelApiKeyEnv = NO_MODEL_ENTRIES) {
20
51
  const names = [...new Set([...(declared?.names ?? []), ...serverWithheldEnvNames(modelApiKeyEnv)])].sort();
21
- const kept = [...(declared?.valueSources ?? [])];
22
- declareWithheldEnv({ names, values: valuesOf(kept) });
23
- const valueSources = new Set(kept);
52
+ const held = new Map(declared?.held ?? []);
53
+ declareWithheldEnv({ names, values: heldValues(held) });
24
54
  for (const source of serverCredentialValueSources(modelApiKeyEnv)) {
25
- if (valueSources.has(source) || valuesOf([source]).length === 0)
26
- continue;
27
- try {
28
- declareWithheldEnv({ names, values: valuesOf([...valueSources, source]) });
29
- valueSources.add(source);
30
- }
31
- catch (e) {
32
- if (!valueRefusalAnnounced.has(source)) {
33
- valueRefusalAnnounced.add(source);
34
- recordOwnCredentialValueNotWithheld({ name: source, reason: e instanceof Error ? e.message : String(e) });
55
+ const at = new Set(held.get(source) ?? []);
56
+ let refusal;
57
+ credentialsHeldBy(source).forEach((_, i) => {
58
+ if (at.has(i))
59
+ return;
60
+ try {
61
+ declareWithheldEnv({ names, values: heldValues(new Map(held).set(source, new Set([...at, i]))) });
62
+ at.add(i);
63
+ held.set(source, new Set(at));
35
64
  }
65
+ catch (e) {
66
+ refusal ??= e instanceof Error ? e.message : String(e);
67
+ }
68
+ });
69
+ if (refusal !== undefined && !valueRefusalAnnounced.has(source)) {
70
+ valueRefusalAnnounced.add(source);
71
+ recordOwnCredentialValueNotWithheld({ name: source, reason: refusal });
36
72
  }
37
73
  }
38
74
  beforeLast = declared;
39
- declared = { names: new Set(names), valueSources };
75
+ declared = { names: new Set(names), held };
40
76
  return names;
41
77
  }
42
78
  export function withdrawServerWithheldEnv() {
43
- declareWithheldEnv({ names: [...(beforeLast?.names ?? [])], values: valuesOf(beforeLast?.valueSources ?? []) });
79
+ declareWithheldEnv({ names: [...(beforeLast?.names ?? [])], values: heldValues(beforeLast?.held ?? new Map()) });
44
80
  declared = beforeLast;
45
81
  }
46
82
  export function bindOwnCredentialsConfig(config) {
47
83
  liveConfig = config;
48
84
  }
85
+ export function ownCredentialNamesNotWithheld(modelApiKeyEnv = NO_MODEL_ENTRIES) {
86
+ return serverWithheldEnvNames(modelApiKeyEnv).filter((name) => inheritEnvPolicyProblem([name]) === undefined);
87
+ }
88
+ export function ownCredentialDeclarationRefusal() {
89
+ const missing = ownCredentialNamesNotWithheld();
90
+ if (missing.length === 0)
91
+ return undefined;
92
+ return (`loadConfig(): this process has not declared its own credentials to the engine (${missing.length} of ${serverWithheldEnvNames().length} names are not withheld, e.g. ${missing[0]}) — ` +
93
+ "call declareServerWithheldEnv() (package root) once before loadConfig(), before any execution environment is built or any child process is started. " +
94
+ "Without it the name-list knobs' own-credential refusal and the withholding on every host child process read an empty declaration and let this service's credentials through.");
95
+ }
49
96
  export function ownCredentialsWithheld() {
50
- if (declared === undefined || liveConfig === undefined)
97
+ if (liveConfig === undefined)
51
98
  return false;
52
- const own = declared.names;
53
- return serverWithheldEnvNames(liveConfig.modelApiKeyEnv).every((name) => own.has(name));
99
+ return ownCredentialNamesNotWithheld(liveConfig.modelApiKeyEnv).length === 0;
54
100
  }
55
101
  export function ownCredentialValuesWithheld() {
56
102
  if (declared === undefined || liveConfig === undefined)
57
103
  return false;
58
- const own = declared.valueSources;
59
- return serverCredentialValueSources(liveConfig.modelApiKeyEnv).every((source) => own.has(source) || valuesOf([source]).length === 0);
104
+ const held = declared.held;
105
+ return serverCredentialValueSources(liveConfig.modelApiKeyEnv).every((source) => (held.get(source)?.size ?? 0) === credentialsHeldBy(source).length);
106
+ }
107
+ export function ownCredentialVariable(name) {
108
+ if (inheritEnvPolicyProblem([name]) !== undefined)
109
+ return "name";
110
+ const findings = [];
111
+ inheritedHostEnv([name], findings);
112
+ return findings.some((f) => f.kind === "own-credential") ? "value" : undefined;
60
113
  }
61
114
  export function __resetServerWithheldEnvForTest() {
62
115
  declareWithheldEnv({ names: [], values: [] });
@@ -14,8 +14,9 @@
14
14
  *
15
15
  * 投影律(不另铸):`id` = 元组的 `handle`(耐久 agent 行的 `a…` 键,与 fleet 行的 `id`、`GET /v1/agents/roster` 的 `handle` 同一个串);`parentSessionId` /
16
16
  * `rootSessionId` = 元组的同名格(派它的会话 / 委派树的根会话);元组缺哪一格这里就缺哪一格;元组的 `scope`(租户键)/ `placedAt` / `kind` 不上 wire。
17
- * 键在场 = 这是一只委派子代的会话(元组只存了 `kind` 时是 `{}`);键缺席 = 不是 placed 行(宿主会话、同步委派的子代、`subagent_type: "fork"` 的后台子代 ——
18
- * 它的会话是父会话的一只普通分叉;`DB_BACKEND=local` 到 7.140.x 停驻时拷进宿主店的子代转录,那一份是普通会话行)、这台部署的店不存元组(无 repo 的内存店
17
+ * 键在场 = 这是一只后台委派子代的会话(普通后台子代与 `subagent_type: "fork"` 的后台子代同样落元组 —— 引擎 7.63.0 起后台 fork 建会话那一笔也交委派元组;
18
+ * 元组只存了 `kind` 时是 `{}`);键缺席 = 不是 placed 行(宿主会话、同步委派的子代 —— 含同步 fork,它的会话是父会话的一只普通分叉;`DB_BACKEND=local` 到 7.140.x
19
+ * 停驻时拷进宿主店的子代转录,那一份是普通会话行)、这台部署的店不存元组(无 repo 的内存店
19
20
  * 〔`DB_BACKEND=memory`〕、嵌入方自建且不声明委派分区的店),或那一读没读成 —— 消费方一律读作「这台 server 没有说」,不读作「不是子代」。
20
21
  */
21
22
  import type { SessionPlacementRecord } from "@sema-agent/core";
@@ -14,8 +14,8 @@
14
14
  *
15
15
  * ## 动词(core 板 [ref] ⑧⑨ 给定;本车第零步探针 `test/core-probe-parked-stop-root-access.test.ts` 真跑证实)
16
16
  * · 枚举 = `agentStore.listBySession(scope, 根会话)`(耐久行,锚 = 行的 session / parent / root 任一),并上本进程登记表里的
17
- * `activeDelegationHandles(scope, 根会话)`(没接耐久店的部署只有这一半)。scope 轴由调用方给(协调器:会话行的 `owner ?? "default"`)。
18
- * · **parked** 行 ⇒ `checkpointStore.expire(token, 卡自己的 scope)`(与 core 自己的本进程仲裁器同一只 CAS)+
17
+ * `activeDelegationHandles(scope, 根会话)`(没接耐久店的部署只有这一半)。scope 轴由调用方给(唯一派生 {@link sessionTenantScope})。
18
+ * · **parked** 行 ⇒ 按店里该卡的属主格 `expire`(`expireCardUnderStoredScope`:属主格读店的列、不读行体;与 core 自己的本进程仲裁器同一只 CAS)+
19
19
  * `registry.reconcileParkedAgents(stores, scope)` ⇒ 行 `failed`(stoppedBy `system`)、卡离开待决面。任何副本上都做得到 ⇒ 预检把它
20
20
  * 算作可达(前提是本部署有 checkpoint 店)。
21
21
  * ⚠️ **不对 parked 行调 `stopTask`**:只在耐久店里的行(park 它的进程不在 / 别的副本 / 重启后 —— parked 行活过重启是常态)
@@ -31,7 +31,7 @@
31
31
  * 能在树活着时改根放置 / 住客的三门 —— 删除(`boot/session-faces.ts`)、换绑(`routes/devices.ts`)、导入(`routes/session-sync.ts`)—— 与显式结清口
32
32
  * `POST /v1/sessions/:id/children/retire`(`routes/background.ts`)都只经这里:**观察**只有 {@link probeSessionChildren}(同一次枚举交出活子代句柄
33
33
  * `liveChildren` 与不可达的那几只),**结清**只有 {@link retireSessionChildren}(结果交首轮观察到的句柄 `observed`);scope 只有一处取
34
- * {@link sessionChildrenScope}(会话属主 `owner ?? "default"`)。wire 上的 `children` / `remaining` 一律经名册的 id 投影出门。
34
+ * {@link sessionTenantScope}(会话的引擎租户分区)。wire 上的 `children` / `remaining` 一律经名册的 id 投影出门。
35
35
  * 子代半是**写前一次观察**:子代登记在 core 的后台子代店,写者的事务装不进这一读(认领半才是写事务内那一读,`execution-placement-sql.ts` 头注)。
36
36
  *
37
37
  * ## 循环(有上界)
@@ -40,6 +40,7 @@
40
40
  * 两轮之间留一小段退避让它落盘。
41
41
  */
42
42
  import type { BackgroundAgentStore, CheckpointStore, TaskRegistry } from "@sema-agent/core";
43
+ import { type CardSettlePort } from "./card-settle-stored-scope.js";
43
44
  /** 重新枚举的轮数上界。 */
44
45
  export declare const RETIRE_MAX_ROUNDS = 6;
45
46
  /** 两步共用的枚举口。 */
@@ -47,14 +48,16 @@ interface ChildrenSource {
47
48
  agentStore: BackgroundAgentStore | undefined;
48
49
  registry: Pick<TaskRegistry, "activeDelegationHandles">;
49
50
  }
51
+ /** 预检与结清共用的 checkpoint 店口:作废卡({@link CardSettlePort})+ 引擎对账读卡(`get`)—— 预检说「可达」的前提就是结清做得了这两件,所以两步同一个型。 */
52
+ export type ChildrenCheckpointStore = Pick<CheckpointStore, "get"> & CardSettlePort;
50
53
  export interface ProbeSessionChildrenDeps extends ChildrenSource {
51
54
  /** 缺席 = 本部署没有耐久审批;撞见 parked 行却没有它 ⇒ 那只作废不了 ⇒ 不可达(拒在删之前)。 */
52
- checkpointStore: Pick<CheckpointStore, "get" | "expire"> | undefined;
55
+ checkpointStore: ChildrenCheckpointStore | undefined;
53
56
  registry: Pick<TaskRegistry, "activeDelegationHandles" | "getAccessibleTask" | "writerId">;
54
57
  }
55
58
  export interface RetireSessionChildrenDeps extends ChildrenSource {
56
59
  /** 缺席 = 本部署没有耐久审批(不可能有 parked 行);撞见 parked 行却没有它 ⇒ 那只作废不了,留到剩余(预检本该已经拒掉它)。 */
57
- checkpointStore: Pick<CheckpointStore, "get" | "expire"> | undefined;
60
+ checkpointStore: ChildrenCheckpointStore | undefined;
58
61
  registry: Pick<TaskRegistry, "stopTask" | "reconcileParkedAgents" | "activeDelegationHandles">;
59
62
  sleep?: (ms: number) => Promise<void>;
60
63
  }
@@ -85,10 +88,12 @@ export type RetireSessionChildrenOutcome = {
85
88
  readonly remainingHandles: readonly string[];
86
89
  };
87
90
  /**
88
- * 以一只根会话为根的后台子代在哪个 scope 分区里枚举 —— **唯一一处取**:会话属主 `owner ?? "default"`(删除门、换绑 / 导入两门、结清口同读;
89
- * 子代按 run 的 principal 登记、与会话属主不同源的那一形是既有缺陷,修在这里一处)。
91
+ * 一只会话的**引擎租户分区** —— **唯一一处取**:以它为根的后台子代、它的后台 shell、它的会话信箱盒,都登记在这一分区(删除门、换绑 / 导入两门、结清口、
92
+ * 删除协调器的信箱腿与 shell 收割腿、删后收尾的丢箱同读;属主串本身不是 scope)。引擎按任务规格的身份格登记,所以这里读的是**引擎交界**
93
+ * (`engine-identity.ts` 的 `taskSpecIdentityOf`)从会话属主恢复出的那一格:没带场景的会话 = 属主(逐字节同改前);带场景的会话(属主 `_scn:<场景>:<人>`)=
94
+ * 引擎登记时用的那一个值(今天是人)—— 按属主串去枚举 / 退役 / 收割会打到一个空分区。无主 ⇒ `"default"`。
90
95
  */
91
- export declare function sessionChildrenScope(owner: string | null): string;
96
+ export declare function sessionTenantScope(owner: string | null): string;
92
97
  /**
93
98
  * **可达性预检**(零写;协调器在任何破坏性步骤之前调)。parked 行在有 checkpoint 店时可达(expire + reconcile 在任何副本上都成);
94
99
  * running 行除非 {@link runsOnAnotherReplica} 都可达(`getAccessibleTask` / `agentStore.get` 都是纯读,不动任何东西)。
@@ -1,7 +1,13 @@
1
+ import { partsOf } from "./owner-brands.js";
2
+ import { recoveredSubject } from "./owner-faces.js";
3
+ import { taskSpecIdentityOf } from "./engine-identity.js";
4
+ import { expireCardUnderStoredScope } from "./card-settle-stored-scope.js";
1
5
  export const RETIRE_MAX_ROUNDS = 6;
2
6
  const RETIRE_BACKOFF_MS = [0, 25, 50, 100, 200, 400];
3
- export function sessionChildrenScope(owner) {
4
- return owner ?? "default";
7
+ export function sessionTenantScope(owner) {
8
+ if (owner === null)
9
+ return "default";
10
+ return taskSpecIdentityOf(partsOf(recoveredSubject(owner))).principal ?? "default";
5
11
  }
6
12
  async function liveChildren(deps, rootSessionId, scope) {
7
13
  const out = new Map();
@@ -69,11 +75,7 @@ async function expireParkedCard(deps, handle, scope) {
69
75
  const row = await deps.agentStore.get(handle, scope);
70
76
  if (row === null || row.status !== "parked" || row.parkedCheckpointToken === undefined)
71
77
  return;
72
- const token = row.parkedCheckpointToken;
73
- const cp = await deps.checkpointStore.get(token);
74
- if (cp === null || cp.status !== "pending")
75
- return;
76
- await deps.checkpointStore.expire(token, cp.scope);
78
+ await expireCardUnderStoredScope(deps.checkpointStore, row.parkedCheckpointToken);
77
79
  }
78
80
  export class SessionChildrenStopIncompleteError extends Error {
79
81
  sessionId;
@@ -0,0 +1,88 @@
1
+ /**
2
+ * **会话的三态:活 → 在删 → 没了**(删会话 × 提交只赢一个的律;规则只写在这里一次,三只会话店与删除协调器同读)。
3
+ *
4
+ * ## 律
5
+ * 一只会话行此刻是三态之一:
6
+ * · **活** —— 接受一切读写;
7
+ * · **在删** —— 一次删除已经在根行锁里判过「没有在跑的 run、属主是调用方」并立了围栏(写下自己的**删除尝试令牌**),还没删完。在删由持令牌的那一次删除**独占**:
8
+ * 删除门之外的一切读者与写者把它读作「行不在」(头读、列表、认领点的规则 L、登记 —— 撞上即「已存在」,不新建);认领落不下,于是删除级联的每一腿都只作用在一只
9
+ * 不会再起回合的会话上;
10
+ * · **没了** —— 行删掉了;同 id 的下一次登记是新住客。
11
+ * 在删**不回到活**(没有放弃删除的臂:子代可达性预检在围栏之前,终刀失败只会重试)⇒ 围栏之后立的外部围栏(会话盒墓碑)不会挡错一只活会话。
12
+ *
13
+ * ## 谁写、谁读
14
+ * · 围栏(活 → 在删 / 在删 → 在删 = 接管已死的那一次、换令牌)= {@link SessionDeletionFace.fence}:删除路**唯一**的认领判;一次仍可能活着的删除持有的行**不接管**
15
+ * (答「在删中」)—— 否则陈旧尝试与接管者交错、接管者删完而同 id 重登记之后,陈旧尝试的下一腿会落在新住客身上;
16
+ * · 终刀(在删 → 没了)= 删净一只会话的**执行体**(`src/session-erase.ts`;SQL = 执行器的 `eraseSession`,local = 会话店的删除锁节 `deleteSession(id, owner, token, legs)`):
17
+ * 根行锁里比属主、判「这一行处于本令牌的在删态」(判官 `judgeSessionWrite` 的 `erase` 词),不是 ⇒ 一行不删;是 ⇒ 同一个事务 / 锁节删完会话挂靠的全部行、行最后删;
18
+ * · 执行体之前的每一步进程面动作(不在根行锁里)之前,协调器问 {@link SessionDeletionFace.holds}:令牌被换了(另一次删除接管)⇒ 这次尝试就此停,答「被接管」;
19
+ * · 唯一收尾者 = 删除协调器:起服装配完之后按 {@link SessionDeletionFace.pending} 逐只再跑一遍(= 接管**那一只令牌**:读到之后那一次删完、同 id 重登记的新行不被碰);
20
+ * 持有者已死的在删行,重发的 DELETE 同样是接管。
21
+ * 持久面:SQL = 旁表 `session_ext.deleting_token`(列属主 `plugins/session-ext-table.ts`);local = 会话元数据边档那一格的 `deleting`。
22
+ */
23
+ /** 围栏的回执:这一次删除的令牌 + 被删的那一位住客的化身(空间回收的键;存量行没有化身 ⇒ `undefined`)。 */
24
+ export interface SessionDeletionTicket {
25
+ readonly token: string;
26
+ readonly incarnation: string | undefined;
27
+ }
28
+ /** 此刻处于在删态的一行(收尾者的输入):它的 id、属主与持有它的令牌(收尾按这一位属主、**只接管这一只令牌**再跑一遍协调器)。 */
29
+ export interface PendingSessionDeletion {
30
+ readonly sessionId: string;
31
+ readonly owner: string | null;
32
+ readonly token: string;
33
+ }
34
+ /**
35
+ * 一只在删令牌的持有者此刻在哪(协调器答,它记得本进程铸过的每一只令牌):`running` = 本进程里那一次删除还在跑;`ended` = 本进程里那一次已经结束而没删完
36
+ * (某腿失败 / 被接管)—— 死的;`elsewhere` = 不是本进程铸的(上一个进程 / 别的副本)。
37
+ */
38
+ export type DeletionHolder = "running" | "ended" | "elsewhere";
39
+ /** 围栏的选项:`holder` = 令牌持有者在哪(协调器的在飞表);`expect` = 只接管这一只令牌(收尾者;活行 / 别的令牌 ⇒ `undefined`)。 */
40
+ export interface SessionDeletionFenceOptions {
41
+ readonly holder: (token: string) => DeletionHolder;
42
+ readonly expect?: string;
43
+ }
44
+ /** 围栏的答复:回执(本次立了 / 接管了)· `inProgress`(一次仍可能活着的删除持有这一行 —— 不接管)· `undefined`(行不在 / 属主不是这一位 / 收尾者的令牌对不上)。 */
45
+ export type SessionDeletionFenceAnswer = SessionDeletionTicket | {
46
+ readonly inProgress: true;
47
+ } | undefined;
48
+ /**
49
+ * 别的进程里一次删除的令牌**多久之后**才可以被接管(SQL 多副本:另一副本上那一次删除可能还活着,本进程看不见它)—— 令牌是 uuidv7,它的时刻就是那一次尝试的起点。
50
+ * 一次删除的各腿通常几秒内跑完(子代停止有轮次上界、后台 shell 的硬杀宽限是秒级);十分钟之后仍未删完的读作那一次已死(崩溃 / 进程被杀)。
51
+ * 如实的边:一次活着却卡过十分钟的删除会被接管,它此后的每一腿之前读到令牌已换、就此停 —— 两腿之间的那一拍是披露的残余(`src/boot/session-faces.ts` 的协调器注)。
52
+ * local 数据根独占(一个数据根恒一个进程),别的进程的令牌一律是死的 ⇒ 不读这只数。
53
+ */
54
+ export declare const CROSS_PROCESS_TAKEOVER_AFTER_MS: number;
55
+ /** 一只令牌(uuidv7)的铸造时刻(ms;读不出 ⇒ `undefined`,读者按「刚铸」处置 —— 不接管)。 */
56
+ export declare function deletionTokenMintedAt(token: string): number | undefined;
57
+ /** 会话店的删除面(三只会话店各一只实现,暖缓存包装原样转发;一只能力位 —— 三个动词同在或同缺)。 */
58
+ export interface SessionDeletionFace {
59
+ /**
60
+ * 立围栏:根行锁里 ——
61
+ * · 活行 ∧ 属主是 `owner`(字面相等,`null` 与 `null` 相等)∧ 不带 `expect` ⇒ 判认领(在 ⇒ 抛 `SessionActiveRunError`,一个字节不写)、写新令牌;
62
+ * · 在删行 ∧ 属主等 ∧(不带 `expect` 或持有的就是它)⇒ 持有它的那一次**仍可能活着**(`holder` 答 `running`;SQL 另加:答 `elsewhere` 而令牌铸于
63
+ * {@link CROSS_PROCESS_TAKEOVER_AFTER_MS} 之内 —— 别的副本上那一次可能还在跑)⇒ `{ inProgress }`(不接管、不写);否则(那一次已死)⇒ **接管**:换新令牌
64
+ * (在删期间认领落不下,不再判);带 `expect` 而持有的不是它 ⇒ `undefined`;
65
+ * · 行不在 / 属主不等 / 带 `expect` 而这一行是活的 ⇒ `undefined`(一个字节不写)—— 收尾者永远不把一只活行送进在删。
66
+ */
67
+ fence(sessionId: string, owner: string | null, opts: SessionDeletionFenceOptions): Promise<SessionDeletionFenceAnswer>;
68
+ /** `token` 此刻仍是这只会话的在删令牌(无锁一读;行不在 / 活 / 别的令牌 ⇒ `false`)。 */
69
+ holds(sessionId: string, token: string): Promise<boolean>;
70
+ /** 此刻处于在删态的全部行(按 id 排序)。 */
71
+ pending(): Promise<readonly PendingSessionDeletion[]>;
72
+ }
73
+ /**
74
+ * 删除协调器的结局(`DELETE /v1/sessions/:id` 读它,一形一句):
75
+ * · `{ deleted: true }` —— 这一次删完了(终刀删掉了行);`{ deleted: false }` —— 门验过之后行已不在 / 不是这一位的(什么都没删);
76
+ * · `{ active }` —— 围栏判到认领(409 `conflict.session_active_run`,一字节没写);`{ childrenAlive }` —— 子代预检拒(409 `conflict.session_children_alive`,一字节没写);
77
+ * · `{ inProgress: true }` —— 同一只会话的另一次删除持有它(仍在跑,或接管了这一次)—— 409 `conflict.session_deleting`,由那一次删完;这次请求不再删任何东西。
78
+ */
79
+ export type SessionPurgeOutcome = {
80
+ readonly deleted: boolean;
81
+ } | {
82
+ readonly active: string;
83
+ } | {
84
+ readonly childrenAlive: readonly string[];
85
+ } | {
86
+ readonly inProgress: true;
87
+ };
88
+ //# sourceMappingURL=session-deletion.d.ts.map
@@ -0,0 +1,8 @@
1
+ export const CROSS_PROCESS_TAKEOVER_AFTER_MS = 10 * 60_000;
2
+ export function deletionTokenMintedAt(token) {
3
+ const hex = token.replace(/-/g, "");
4
+ if (!/^[0-9a-f]{32}$/i.test(hex) || hex[12] !== "7")
5
+ return undefined;
6
+ return parseInt(hex.slice(0, 12), 16);
7
+ }
8
+ //# sourceMappingURL=session-deletion.js.map
@@ -0,0 +1,145 @@
1
+ /**
2
+ * **删净一只会话 —— 一只执行体**(两个决定者共用:`DELETE /v1/sessions/:id` 的删除协调器 `boot/session-faces.ts`,与托管留存的会话树清扫)。
3
+ *
4
+ * ## 律
5
+ * 删净一只会话 = **在这只会话的行锁下**删完它挂靠的全部行,行本身最后删:
6
+ * · SQL 后端:一个事务(执行器 `stores-sql/retention-store-sql.ts` 的 `eraseSession` / `deleteExpiredSessions`,两只入口跑同一段事务体
7
+ * —— 锁行 → 会话座事务内钩判 → 部署行 → 引擎座行 → 行与日志 → 墓碑);
8
+ * · local 后端:{@link createLocalSessionEraser} —— 会话店这只会话的写锁一节(判 → 各店动词按 {@link SESSION_TREE_LEGS} → 删行)。
9
+ * 锁里那一判按决定者:在线删除 = 行的属主是围栏判过的那一位 ∧ `erase`(这一行处于**这一次删除的在删态** —— 令牌比对;会话三态 活 → 在删 → 没了,
10
+ * 律在 `session-deletion.ts`,围栏是删除协调器的事);留存 = `retention-delete`(没有认领、不在删)。令牌只在围栏判过属主之后写下,同 id 的下一位住客是新行、不带它 ⇒
11
+ * 一次陈旧 / 被接管的删除在锁里读到的不是自己的令牌,一行不删(`superseded`)。属主那一比是域键的一致性(SQL 的部署行与墓碑按域写,域在事务开之前就要定)。
12
+ * 会话挂靠的**行**都在锁里(含完成信箱的清除围栏与会话盒):删不掉 ⇒ 行留在删、删除可重试;锁着 ⇒ 碰不到下一位住客。提交之后由**同一只**收尾
13
+ * {@link createSessionEraseSettler} 处理按内容 / 按住客化身寻址的残余(附件字节、住客空间);SQL 组合座另在提交之后按「入队不晚于提交」清一次
14
+ * 事务进行中落下的迟到完成行(`retention-deployment.ts` 的 `sweepLateCompletionRows`)。
15
+ * 不在锁里的:在线删除在围栏之后、执行体之前对这只在删会话做的进程面动作(信箱 retire 围栏、子代结束、scratchpad、后台 shell、删过的 id)——
16
+ * 删除协调器每一步之前核令牌(`boot/session-faces.ts`);一步已经开跑时被接管的那一拍是协调器注里披露的残余(不是行)。
17
+ *
18
+ * ## 决定者之差
19
+ * 在线删除删的是一只**可能还活着**的会话(删前:子代预检 → 围栏 → 信箱 retire 围栏、子代结束、本进程删过的 id;删后:本副本的进程态);留存只删闲到视界外、
20
+ * 无活引用、不在删的会话(hold / 候选 / 活引用 / 审计)。行面唯一的差:规则行的 rev 高水位记号(在线留、留存删;`retention-store-sql.ts` 的 `RuleMarks`)。
21
+ */
22
+ import { type MailboxStore, type ToolResultStore } from "@sema-agent/core";
23
+ import type { Logger } from "./observability/logger.js";
24
+ import type { WorkflowCompletionInbox } from "./orchestration/workflow-completion-inbox.js";
25
+ import type { SpaceReclaimer } from "./workspace-space.js";
26
+ /** 锁里读到的这一位住客(会话行上的属主 + 化身;存量行没有化身 ⇒ `undefined`)。 */
27
+ export interface SessionOccupant {
28
+ readonly owner: string | null;
29
+ readonly incarnation: string | undefined;
30
+ }
31
+ /** 一次执行体提交之后交收尾的东西:真删掉的会话(id + 删前属主 + 住客)、本次删掉的附件行的字节哈希、全库无出处卸载结果数。 */
32
+ export interface SessionTreesErased {
33
+ readonly sessions: readonly {
34
+ readonly sessionId: string;
35
+ readonly owner: string | null;
36
+ readonly incarnation: string | undefined;
37
+ }[];
38
+ /** 本次删掉的附件行的字节哈希(收尾按「无行引用才删」释放;local 的附件店随行删字节,恒空)。 */
39
+ readonly attachmentShas: readonly string[];
40
+ /** 全库无出处的卸载结果行数(core 口径:这类行任何会话删除都删不到 ⇒ 删除不完整;实体清理归 TTL)。 */
41
+ readonly unattributableToolResults: number;
42
+ }
43
+ /** 执行体的回执(闭集)。 */
44
+ export type SessionEraseReceipt =
45
+ /** 这一行此刻不是这一次删除的在删态 —— 另一次删除接管了它(换了令牌)或已经删完(行不在 / 同 id 的新住客)。一行没删。 */
46
+ {
47
+ readonly outcome: "superseded";
48
+ }
49
+ /** 全部行已删、已提交。 */
50
+ | {
51
+ readonly outcome: "erased";
52
+ readonly trees: SessionTreesErased;
53
+ };
54
+ /** 执行体的入参:哪只会话 + 删除协调器的围栏判过的那一位属主(域键)+ 围栏写下的令牌(判官比的那一只)。 */
55
+ export interface SessionEraseInput {
56
+ readonly sessionId: string;
57
+ readonly owner: string | null;
58
+ readonly token: string;
59
+ }
60
+ /** 删净一只在删会话的执行体(SQL:执行器的组合座交出;local:{@link createLocalSessionEraser})。 */
61
+ export interface SessionEraser {
62
+ erase(input: SessionEraseInput): Promise<SessionEraseReceipt>;
63
+ }
64
+ /**
65
+ * 会话树的行腿 —— **闭集,序即执行序**(SQL 事务体的语句序对它:`test/session-erase-single-executor.test.ts` 录制钉按首次出现序比)。
66
+ * `checkpoint` 腿含停驻 ctx 旁表(SQL 上 ctx 在部署段、检查点行在引擎座段,首次出现序落在这里)。`mailbox` 是行删除之前的**最后一腿**:会话盒的 `drop`
67
+ * 同时撤掉投递围栏(墓碑随箱亡),之后除了会话行不许再有别的腿(local 上各店逐个落盘,围栏撤了而行还在的那一段窗只容会话行那一步)。
68
+ */
69
+ export declare const SESSION_TREE_LEGS: readonly ["runs", "approval", "checkpoint", "anchors", "exemption", "attachment", "user_input", "task_list", "workflow_inbox", "tool_result", "policy", "file_history", "mailbox"];
70
+ export type SessionTreeLeg = (typeof SESSION_TREE_LEGS)[number];
71
+ /** local 执行体的各店(缺席 = 本部署没有这只店 ⇒ 这一腿无行可删)。动词与在线协调器此前逐店调的同一组。 */
72
+ export interface LocalSessionTreeStores {
73
+ readonly runStore: {
74
+ deleteBySession(sessionId: string): Promise<{
75
+ removed: number;
76
+ }>;
77
+ } | undefined;
78
+ readonly approvalAskStore: {
79
+ deleteBySession(sessionId: string): Promise<void>;
80
+ } | undefined;
81
+ readonly checkpointStore: {
82
+ deleteBySession(sessionId: string, owner: string | null): Promise<number>;
83
+ } | undefined;
84
+ readonly resumeAnchorStore: {
85
+ deleteBySession(sessionId: string): Promise<unknown>;
86
+ } | undefined;
87
+ readonly approvalExemptionStore: {
88
+ deleteBySession(sessionId: string): Promise<unknown>;
89
+ } | undefined;
90
+ readonly taskAttachmentStore: {
91
+ deleteBySession(sessionId: string): Promise<number>;
92
+ } | undefined;
93
+ readonly userInputLedgerStore: {
94
+ deleteBySession(sessionId: string): Promise<unknown>;
95
+ } | undefined;
96
+ readonly taskListLane: {
97
+ deleteBySession(sessionId: string): Promise<void>;
98
+ } | undefined;
99
+ readonly workflowCompletionInbox: Pick<WorkflowCompletionInbox, "purge"> | undefined;
100
+ readonly mailboxStore: Pick<MailboxStore, "drop"> | undefined;
101
+ readonly toolResultStore: Pick<ToolResultStore, "deleteBySession"> | undefined;
102
+ readonly sessionPolicyStore: {
103
+ deleteBySession?(sessionId: string): Promise<void>;
104
+ } | undefined;
105
+ readonly fileHistoryErasure: {
106
+ deleteBySession?(scope: string): Promise<unknown>;
107
+ reap(scope: string, keep: readonly string[]): Promise<unknown>;
108
+ } | undefined;
109
+ }
110
+ /**
111
+ * local 会话店的删除锁节(`plugins/local-session-store.ts` 的 `deleteSession`):这只会话的写锁里 —— 行不在 / 属主不是 `owner` ⇒ `undefined`;
112
+ * `erase` 判(这一行处于 `token` 那一次删除的在删态;不是 ⇒ 抛 `SessionDeletionSupersededError`)—— 两支都一行不删;→ `legs(锁里读到的住客)` → 删行,交回那一位住客。
113
+ */
114
+ export type LocalSessionDeletionSection = (sessionId: string, owner: string | null, token: string, legs: (occupant: SessionOccupant) => Promise<void>) => Promise<SessionOccupant | undefined>;
115
+ /**
116
+ * local 后端的执行体:会话店写锁一节里按 {@link SESSION_TREE_LEGS} 跑各店动词(闭集 `switch`,漏一腿 = 编译红)。一腿抛 ⇒ 锁节抛、行不删(重发收敛)。
117
+ */
118
+ export declare function createLocalSessionEraser(deleteSession: LocalSessionDeletionSection, stores: LocalSessionTreeStores, logger: Pick<Logger, "warn">): SessionEraser;
119
+ /** 收尾要的座(缺席 = 本部署没有这一样残余)。 */
120
+ export interface SessionEraseSettleSeats {
121
+ /** 附件字节的释放口(SQL 附件店:无行引用才删对象)。 */
122
+ readonly attachments: {
123
+ releaseBytes(shas: readonly string[]): Promise<{
124
+ readonly failed: readonly string[];
125
+ }>;
126
+ } | undefined;
127
+ readonly spaceReclaimer: SpaceReclaimer | undefined;
128
+ readonly logger: Pick<Logger, "warn">;
129
+ }
130
+ /**
131
+ * 收尾:一次执行体提交之后对真删掉的会话处理库外残余。答出时附件字节那一步已做完;`spaces` = 住客空间回收那一步
132
+ * (对象存储上的一串请求,座按契约不抛、抛了已被这里响亮接住 ⇒ 它永不拒):在线删除不等它(应答不等对象存储),留存清扫等它(一轮在截止上收手)。
133
+ */
134
+ export type SessionEraseSettler = (trees: SessionTreesErased) => Promise<{
135
+ readonly spaces: Promise<void>;
136
+ }>;
137
+ /**
138
+ * 两个决定者共用的**收尾**(行已删、已提交)。只收**按内容寻址 / 按住客化身寻址**的残余 —— 碰不到同 id 重登记的下一位住客;
139
+ * 会话挂靠的行(含完成信箱围栏与行、会话盒)都在执行体的锁里(删不掉 ⇒ 行留着、删除可重试)。每一步失败只记一行 warn,各有兜底:
140
+ * ① 附件字节 —— 本次删掉的附件行的哈希,无行引用才删对象(孤儿 GC 兜底);
141
+ * ② 住客空间 —— 住客化身在的会话交回收座(答案里的 `spaces`:等不等它是决定者的事;座按契约不抛,抛了这里响亮接住;桶的生命周期规则兜底);
142
+ * ③ 全库无出处卸载结果数 > 0 ⇒ 一行 warn(删除不完整的如实告知)。
143
+ */
144
+ export declare function createSessionEraseSettler(seats: SessionEraseSettleSeats): SessionEraseSettler;
145
+ //# sourceMappingURL=session-erase.d.ts.map
@@ -0,0 +1,115 @@
1
+ import { peerSessionBoxHandle } from "@sema-agent/core";
2
+ import { recordFailOpen } from "./observability/fail-open.js";
3
+ import { redactIncarnations } from "./session-incarnation.js";
4
+ import { seatText } from "./trace/exit-seat.js";
5
+ import { sessionTenantScope } from "./session-children-retire.js";
6
+ import { SessionDeletionSupersededError } from "./execution-placement.js";
7
+ export const SESSION_TREE_LEGS = ["runs", "approval", "checkpoint", "anchors", "exemption", "attachment", "user_input", "task_list", "workflow_inbox", "tool_result", "policy", "file_history", "mailbox"];
8
+ export function createLocalSessionEraser(deleteSession, stores, logger) {
9
+ return {
10
+ async erase({ sessionId, owner, token }) {
11
+ let unattributable = 0;
12
+ const leg = async (which, occupant) => {
13
+ switch (which) {
14
+ case "runs":
15
+ return void (await stores.runStore?.deleteBySession(sessionId));
16
+ case "approval":
17
+ return void (await stores.approvalAskStore?.deleteBySession(sessionId));
18
+ case "checkpoint":
19
+ return void (await stores.checkpointStore?.deleteBySession(sessionId, occupant.owner));
20
+ case "anchors":
21
+ return void (await stores.resumeAnchorStore?.deleteBySession(sessionId));
22
+ case "exemption":
23
+ return void (await stores.approvalExemptionStore?.deleteBySession(sessionId));
24
+ case "attachment":
25
+ return void (await stores.taskAttachmentStore?.deleteBySession(sessionId));
26
+ case "user_input":
27
+ return void (await stores.userInputLedgerStore?.deleteBySession(sessionId));
28
+ case "task_list":
29
+ return void (await stores.taskListLane?.deleteBySession(sessionId));
30
+ case "workflow_inbox":
31
+ return void (await stores.workflowCompletionInbox?.purge(sessionId, occupant.owner));
32
+ case "tool_result": {
33
+ const report = await stores.toolResultStore?.deleteBySession?.(sessionId);
34
+ if (report !== undefined)
35
+ unattributable = report.unattributable;
36
+ return;
37
+ }
38
+ case "policy":
39
+ return void (await stores.sessionPolicyStore?.deleteBySession?.(sessionId));
40
+ case "file_history": {
41
+ const erasure = stores.fileHistoryErasure;
42
+ if (erasure === undefined)
43
+ return;
44
+ if (typeof erasure.deleteBySession === "function")
45
+ return void (await erasure.deleteBySession(sessionId));
46
+ await erasure.reap(sessionId, []);
47
+ logger.warn("session_file_history_baselines_retained", {
48
+ sessionId,
49
+ note: "this file-history store has no whole-scope erase verb (deleteBySession); boundaries were reaped but v1 baselines (original file bytes) remain in the store until it implements that verb — an open deletion-rights gap, not silent",
50
+ });
51
+ return;
52
+ }
53
+ case "mailbox":
54
+ return void (await stores.mailboxStore?.drop(sessionTenantScope(occupant.owner), peerSessionBoxHandle(sessionId)));
55
+ default: {
56
+ const unknownLeg = which;
57
+ throw new Error(`session erase: no arm for leg ${JSON.stringify(unknownLeg)}`);
58
+ }
59
+ }
60
+ };
61
+ let erased;
62
+ try {
63
+ erased = await deleteSession(sessionId, owner, token, async (occupant) => {
64
+ for (const which of SESSION_TREE_LEGS)
65
+ await leg(which, occupant);
66
+ });
67
+ }
68
+ catch (err) {
69
+ if (err instanceof SessionDeletionSupersededError)
70
+ return { outcome: "superseded" };
71
+ throw err;
72
+ }
73
+ if (erased === undefined)
74
+ return { outcome: "superseded" };
75
+ return { outcome: "erased", trees: { sessions: [{ sessionId, ...erased }], attachmentShas: [], unattributableToolResults: unattributable } };
76
+ },
77
+ };
78
+ }
79
+ export function createSessionEraseSettler(seats) {
80
+ const { logger } = seats;
81
+ return async (trees) => {
82
+ if (trees.attachmentShas.length > 0 && seats.attachments !== undefined) {
83
+ const released = await seats.attachments.releaseBytes(trees.attachmentShas).catch((err) => ({ failed: trees.attachmentShas, err: seatText("operator-log-text", String(err)) }));
84
+ if (released.failed.length > 0) {
85
+ logger.warn("session_erase_attachment_bytes_release_failed", {
86
+ shas: trees.attachmentShas.length,
87
+ failed: released.failed.length,
88
+ ...("err" in released ? { err: released.err } : {}),
89
+ effect: "these objects stay until the orphan-object sweep collects them (its grace applies)",
90
+ });
91
+ }
92
+ }
93
+ const spaces = trees.sessions.flatMap((s) => (s.incarnation === undefined ? [] : [{ sessionId: s.sessionId, spaceKey: s.incarnation }]));
94
+ let reclaimed = Promise.resolve();
95
+ if (spaces.length > 0 && seats.spaceReclaimer !== undefined) {
96
+ reclaimed = seats.spaceReclaimer.reclaim(spaces).catch((err) => {
97
+ recordFailOpen("server.workspace-space.reclaim-failed", "stage=seat_threw");
98
+ logger.warn("workspace_space_reclaim_failed", {
99
+ sessions: spaces.length,
100
+ stage: "seat_threw",
101
+ error: seatText("operator-log-text", redactIncarnations(String(err))),
102
+ effect: "the ended space's cache volume and snapshot objects may stay (the reclaim seat threw, which its contract forbids; the session delete went ahead) — the bucket's lifecycle rule is the fallback for objects, the volume is deleted by label sema.space",
103
+ });
104
+ });
105
+ }
106
+ if (trees.unattributableToolResults > 0) {
107
+ logger.warn("tool_result_unattributable_rows_survive_session_delete", {
108
+ sessions: trees.sessions.map((s) => s.sessionId),
109
+ unattributable: trees.unattributableToolResults,
110
+ });
111
+ }
112
+ return { spaces: reclaimed };
113
+ };
114
+ }
115
+ //# sourceMappingURL=session-erase.js.map