@sema-agent/server 7.147.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 (725) hide show
  1. package/MIGRATION.md +1039 -24
  2. package/README.md +20 -7
  3. package/README.zh-CN.md +14 -8
  4. package/USAGE.md +380 -163
  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/adoption/wire.d.ts +3 -3
  39. package/dist/approval-card.d.ts +28 -30
  40. package/dist/approval-gate-currency.js +3 -2
  41. package/dist/approval-reconciler.d.ts +4 -13
  42. package/dist/approval-reconciler.js +2 -2
  43. package/dist/approval.d.ts +13 -11
  44. package/dist/approval.js +3 -3
  45. package/dist/audit.d.ts +10 -3
  46. package/dist/audit.js +15 -7
  47. package/dist/auth-bridge.d.ts +0 -14
  48. package/dist/auth-bridge.js +0 -7
  49. package/dist/auto-mode-face.d.ts +10 -7
  50. package/dist/auto-mode-face.js +7 -4
  51. package/dist/background-agent-name.d.ts +19 -1
  52. package/dist/background-agent-name.js +12 -2
  53. package/dist/background-session-reap.d.ts +1 -1
  54. package/dist/bake-runner/main.js +9 -6
  55. package/dist/bench/s1/arms.js +6 -5
  56. package/dist/bench/s1/live-deps.js +5 -2
  57. package/dist/bench/s1/run-firm.js +6 -5
  58. package/dist/bind-host.d.ts +25 -0
  59. package/dist/bind-host.js +25 -0
  60. package/dist/boot/adoption.d.ts +3 -0
  61. package/dist/boot/adoption.js +1 -0
  62. package/dist/boot/deployment-mods.d.ts +1 -1
  63. package/dist/boot/execution-env.d.ts +17 -7
  64. package/dist/boot/execution-env.js +37 -31
  65. package/dist/boot/exit-boundary.d.ts +2 -2
  66. package/dist/boot/exit-boundary.js +6 -5
  67. package/dist/boot/fatal-exit.d.ts +3 -5
  68. package/dist/boot/fatal-exit.js +2 -2
  69. package/dist/boot/leader.d.ts +15 -0
  70. package/dist/boot/leader.js +17 -15
  71. package/dist/boot/memory-consolidation.d.ts +37 -29
  72. package/dist/boot/memory-consolidation.js +11 -5
  73. package/dist/boot/org-memory.js +1 -1
  74. package/dist/boot/parked-revive-gate.js +2 -2
  75. package/dist/boot/reapers.d.ts +4 -3
  76. package/dist/boot/reapers.js +19 -16
  77. package/dist/boot/resolve-spec.d.ts +5 -3
  78. package/dist/boot/resolve-spec.js +55 -67
  79. package/dist/boot/retention-lane.d.ts +4 -4
  80. package/dist/boot/retention-lane.js +2 -2
  81. package/dist/boot/runner-deps.d.ts +28 -7
  82. package/dist/boot/runner-deps.js +11 -4
  83. package/dist/boot/runtime-caps.d.ts +2 -2
  84. package/dist/boot/runtime-caps.js +16 -2
  85. package/dist/boot/session-faces.d.ts +16 -7
  86. package/dist/boot/session-faces.js +114 -94
  87. package/dist/boot/shutdown.d.ts +5 -4
  88. package/dist/boot/shutdown.js +6 -4
  89. package/dist/boot/stage-01-config.js +9 -1
  90. package/dist/boot/stage-02-web-admin-pull.d.ts +1 -0
  91. package/dist/boot/stage-02-web-admin-pull.js +6 -1
  92. package/dist/boot/stage-03-store-backend.d.ts +3 -0
  93. package/dist/boot/stage-03-store-backend.js +4 -3
  94. package/dist/boot/stage-04-stores.d.ts +2 -0
  95. package/dist/boot/stage-04-stores.js +2 -2
  96. package/dist/boot/stage-05-execution-env.d.ts +7 -3
  97. package/dist/boot/stage-05-execution-env.js +2 -2
  98. package/dist/boot/stage-06-runners.d.ts +10 -12
  99. package/dist/boot/stage-06-runners.js +23 -15
  100. package/dist/boot/stage-07-capability-layer.d.ts +11 -8
  101. package/dist/boot/stage-07-capability-layer.js +5 -3
  102. package/dist/boot/stage-08-reapers.d.ts +11 -8
  103. package/dist/boot/stage-08-reapers.js +3 -3
  104. package/dist/boot/stage-09-leader.d.ts +12 -15
  105. package/dist/boot/stage-09-leader.js +12 -4
  106. package/dist/boot/stage-10-http-server.d.ts +12 -15
  107. package/dist/boot/stage-10-http-server.js +7 -4
  108. package/dist/boot/store-evidence.d.ts +20 -0
  109. package/dist/boot/store-evidence.js +13 -0
  110. package/dist/boot/stores.d.ts +3 -0
  111. package/dist/boot/stores.js +21 -10
  112. package/dist/boot/task-list-lane.d.ts +4 -4
  113. package/dist/boot/web-admin.d.ts +4 -2
  114. package/dist/boot/web-admin.js +55 -35
  115. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  116. package/dist/boot-reclaim.d.ts +3 -1
  117. package/dist/boot-reclaim.js +1 -1
  118. package/dist/brain.d.ts +7 -18
  119. package/dist/brain.js +5 -17
  120. package/dist/budget.js +6 -6
  121. package/dist/capabilities/center-plugins.d.ts +7 -1
  122. package/dist/capabilities/center-plugins.js +32 -10
  123. package/dist/capabilities/center-wiring.js +1 -1
  124. package/dist/capabilities/composite-members.d.ts +2 -2
  125. package/dist/capabilities/composite-members.js +2 -2
  126. package/dist/capabilities/repo-tools.d.ts +2 -0
  127. package/dist/capabilities/repo-tools.js +14 -12
  128. package/dist/capabilities/scenarios.d.ts +6 -15
  129. package/dist/capabilities/scenarios.js +11 -16
  130. package/dist/capabilities/skills.d.ts +1 -1
  131. package/dist/capabilities/tool-defer.d.ts +1 -1
  132. package/dist/capability-facts.d.ts +38 -11
  133. package/dist/capability-facts.js +47 -8
  134. package/dist/card-void.d.ts +4 -4
  135. package/dist/card-void.js +1 -1
  136. package/dist/center-credential-renewer.d.ts +6 -2
  137. package/dist/center-credential-renewer.js +7 -3
  138. package/dist/config-catalog.d.ts +16 -1
  139. package/dist/config-catalog.js +62 -56
  140. package/dist/config-dir-trust.d.ts +37 -4
  141. package/dist/config-dir-trust.js +88 -44
  142. package/dist/config-invariants.d.ts +42 -3
  143. package/dist/config-invariants.js +69 -5
  144. package/dist/config-lkg.d.ts +23 -1
  145. package/dist/config-lkg.js +17 -3
  146. package/dist/config-provider.d.ts +9 -9
  147. package/dist/config-provider.js +25 -110
  148. package/dist/config-pull-failure.d.ts +50 -0
  149. package/dist/config-pull-failure.js +48 -0
  150. package/dist/config-types.d.ts +26 -17
  151. package/dist/config.d.ts +8 -16
  152. package/dist/config.js +113 -47
  153. package/dist/delegated-session-owner.d.ts +1 -1
  154. package/dist/deleted-session-ids.d.ts +3 -2
  155. package/dist/deployment-governance.d.ts +3 -3
  156. package/dist/deployment-shape.d.ts +30 -4
  157. package/dist/deployment-shape.js +7 -0
  158. package/dist/egress-redirect.d.ts +25 -7
  159. package/dist/egress-redirect.js +20 -2
  160. package/dist/elicitation.d.ts +6 -5
  161. package/dist/elicitation.js +23 -22
  162. package/dist/engine-identity.d.ts +28 -0
  163. package/dist/engine-identity.js +10 -0
  164. package/dist/entry-problems.d.ts +5 -7
  165. package/dist/entry-problems.js +1 -1
  166. package/dist/env-facts.js +2 -1
  167. package/dist/env-witness.d.ts +7 -0
  168. package/dist/env-witness.js +16 -0
  169. package/dist/execution-lane-caps.d.ts +5 -18
  170. package/dist/execution-lane-caps.js +0 -22
  171. package/dist/execution-placement.d.ts +58 -18
  172. package/dist/execution-placement.js +41 -2
  173. package/dist/field-conflict.d.ts +7 -11
  174. package/dist/field-conflict.js +3 -3
  175. package/dist/file-history-capture.d.ts +3 -3
  176. package/dist/file-history-disclosure.js +1 -0
  177. package/dist/fleet/fleet-bus.d.ts +21 -3
  178. package/dist/fleet/fleet-bus.js +35 -25
  179. package/dist/fleet/fleet-reconciler.js +2 -2
  180. package/dist/fleet/serving-lease.js +3 -3
  181. package/dist/fleet-client.js +3 -3
  182. package/dist/fleet-lease.d.ts +0 -1
  183. package/dist/fleet-lease.js +4 -5
  184. package/dist/history-anchor.d.ts +23 -3
  185. package/dist/history-anchor.js +24 -4
  186. package/dist/hitl-delivery.d.ts +90 -0
  187. package/dist/hitl-delivery.js +98 -0
  188. package/dist/hooks/classic-stations.d.ts +8 -11
  189. package/dist/hooks/classic-stations.js +0 -7
  190. package/dist/hooks/hook-llm.d.ts +5 -1
  191. package/dist/hooks/hook-llm.js +24 -15
  192. package/dist/hooks/hook-runner.d.ts +67 -57
  193. package/dist/hooks/hook-runner.js +260 -186
  194. package/dist/host-lsp-manager.d.ts +22 -8
  195. package/dist/host-lsp-manager.js +4 -1
  196. package/dist/http/active-run-conflict.d.ts +2 -43
  197. package/dist/http/active-run-conflict.js +3 -7
  198. package/dist/http/admission.d.ts +4 -18
  199. package/dist/http/admission.js +75 -78
  200. package/dist/http/approval-sweeps.d.ts +3 -3
  201. package/dist/http/approval-sweeps.js +54 -30
  202. package/dist/http/caller-trust.d.ts +8 -10
  203. package/dist/http/caller-trust.js +1 -2
  204. package/dist/http/claim-heartbeat.d.ts +49 -0
  205. package/dist/http/claim-heartbeat.js +46 -0
  206. package/dist/http/claimed-run.d.ts +4 -3
  207. package/dist/http/dispatch.d.ts +8 -1
  208. package/dist/http/dispatch.js +76 -30
  209. package/dist/http/durable-run-leg.d.ts +3 -3
  210. package/dist/http/durable-run-leg.js +17 -12
  211. package/dist/http/execution-context.d.ts +17 -43
  212. package/dist/http/execution-context.js +7 -5
  213. package/dist/http/health-reader.d.ts +36 -0
  214. package/dist/http/health-reader.js +21 -0
  215. package/dist/http/health-self-report.d.ts +9 -9
  216. package/dist/http/health-self-report.js +4 -4
  217. package/dist/http/idempotency.d.ts +9 -5
  218. package/dist/http/idempotency.js +4 -4
  219. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  220. package/dist/http/memory-compliance-failure-reply.js +4 -2
  221. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  222. package/dist/http/memory-face-fault-reply.js +71 -0
  223. package/dist/http/memory-store-refusal-reply.d.ts +1 -1
  224. package/dist/http/memory-store-refusal-reply.js +3 -0
  225. package/dist/http/owner-access.d.ts +391 -67
  226. package/dist/http/owner-access.js +371 -35
  227. package/dist/http/principal-gate.d.ts +24 -81
  228. package/dist/http/principal-gate.js +24 -68
  229. package/dist/http/refusal-body.d.ts +35 -2
  230. package/dist/http/refusal-body.js +34 -0
  231. package/dist/http/request-guards.d.ts +9 -13
  232. package/dist/http/request-guards.js +34 -68
  233. package/dist/http/resume-composition.d.ts +37 -0
  234. package/dist/http/resume-composition.js +18 -0
  235. package/dist/http/resume-ctx-read.d.ts +35 -12
  236. package/dist/http/resume-ctx-read.js +25 -6
  237. package/dist/http/resume-legs.d.ts +21 -18
  238. package/dist/http/resume-legs.js +189 -129
  239. package/dist/http/retired-skill-manifest.d.ts +1 -1
  240. package/dist/http/route-ctx.d.ts +25 -32
  241. package/dist/http/routes/a2a-serve.d.ts +43 -5
  242. package/dist/http/routes/a2a-serve.js +58 -37
  243. package/dist/http/routes/admin-config-refresh.js +2 -2
  244. package/dist/http/routes/admin-drain.js +2 -2
  245. package/dist/http/routes/admin-memory-optout.js +4 -3
  246. package/dist/http/routes/adoption.d.ts +3 -0
  247. package/dist/http/routes/adoption.js +17 -10
  248. package/dist/http/routes/agents-roster.js +13 -7
  249. package/dist/http/routes/approvals-assistant.js +70 -65
  250. package/dist/http/routes/attachments.js +2 -2
  251. package/dist/http/routes/background.d.ts +3 -3
  252. package/dist/http/routes/background.js +9 -17
  253. package/dist/http/routes/capabilities.js +15 -18
  254. package/dist/http/routes/config-catalog.js +2 -2
  255. package/dist/http/routes/devices.d.ts +3 -3
  256. package/dist/http/routes/devices.js +4 -4
  257. package/dist/http/routes/diagnostics.d.ts +27 -3
  258. package/dist/http/routes/diagnostics.js +27 -21
  259. package/dist/http/routes/engine.js +2 -2
  260. package/dist/http/routes/fleet.js +5 -3
  261. package/dist/http/routes/images.js +10 -6
  262. package/dist/http/routes/leader.d.ts +7 -2
  263. package/dist/http/routes/leader.js +12 -3
  264. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  265. package/dist/http/routes/mcp-reconnect.js +7 -15
  266. package/dist/http/routes/memory-bundle.js +4 -7
  267. package/dist/http/routes/memory-compliance.js +4 -4
  268. package/dist/http/routes/memory-consolidation.js +6 -9
  269. package/dist/http/routes/memory-origin.d.ts +2 -0
  270. package/dist/http/routes/memory-origin.js +7 -8
  271. package/dist/http/routes/memory-policy.js +17 -12
  272. package/dist/http/routes/notify-wake.js +10 -19
  273. package/dist/http/routes/observability.js +3 -3
  274. package/dist/http/routes/principal-inbox.d.ts +1 -1
  275. package/dist/http/routes/principal-inbox.js +2 -2
  276. package/dist/http/routes/projects.d.ts +1 -1
  277. package/dist/http/routes/projects.js +3 -2
  278. package/dist/http/routes/retention-ops.js +6 -9
  279. package/dist/http/routes/rules.js +20 -5
  280. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  281. package/dist/http/routes/run-memory-capture.js +6 -12
  282. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  283. package/dist/http/routes/run-permission-mode.js +10 -17
  284. package/dist/http/routes/runs.js +146 -231
  285. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  286. package/dist/http/routes/session-memory-sync.js +7 -13
  287. package/dist/http/routes/session-sync.d.ts +4 -2
  288. package/dist/http/routes/session-sync.js +21 -20
  289. package/dist/http/routes/sessions-list.d.ts +3 -3
  290. package/dist/http/routes/sessions-list.js +9 -9
  291. package/dist/http/routes/sessions.js +87 -124
  292. package/dist/http/routes/shared-memory.js +6 -6
  293. package/dist/http/routes/side-query.js +2 -2
  294. package/dist/http/routes/tasks.js +136 -120
  295. package/dist/http/routes/trace-usage.d.ts +0 -12
  296. package/dist/http/routes/trace-usage.js +40 -46
  297. package/dist/http/routes/workflows.d.ts +39 -4
  298. package/dist/http/routes/workflows.js +42 -14
  299. package/dist/http/run-concurrency-cap.d.ts +20 -12
  300. package/dist/http/run-concurrency-cap.js +39 -26
  301. package/dist/http/run-read-face.d.ts +3 -5
  302. package/dist/http/run-read-face.js +8 -13
  303. package/dist/http/send.d.ts +12 -3
  304. package/dist/http/send.js +42 -6
  305. package/dist/http/server.d.ts +39 -40
  306. package/dist/http/server.js +36 -11
  307. package/dist/http/sse-log.d.ts +17 -10
  308. package/dist/http/sse-log.js +7 -7
  309. package/dist/http/stored-body-replay.d.ts +12 -0
  310. package/dist/http/stored-body-replay.js +2 -2
  311. package/dist/http/submit-ctx.d.ts +16 -8
  312. package/dist/http/submit-ctx.js +6 -2
  313. package/dist/http/submit-replay.d.ts +19 -6
  314. package/dist/http/submit-replay.js +18 -6
  315. package/dist/http/sync-submit-body.d.ts +3 -4
  316. package/dist/http/sync-submit-body.js +4 -5
  317. package/dist/http/wire-types.d.ts +4 -3
  318. package/dist/identity-source.d.ts +36 -5
  319. package/dist/identity-source.js +27 -0
  320. package/dist/index.d.ts +1 -0
  321. package/dist/index.js +1 -0
  322. package/dist/key-resolver.d.ts +32 -0
  323. package/dist/key-resolver.js +23 -9
  324. package/dist/leader/diffup.js +2 -1
  325. package/dist/leader/endpoint.d.ts +26 -5
  326. package/dist/leader/endpoint.js +154 -14
  327. package/dist/leader/fanout.d.ts +3 -0
  328. package/dist/leader/fanout.js +78 -63
  329. package/dist/leader/leader.d.ts +16 -0
  330. package/dist/leader/leader.js +43 -3
  331. package/dist/leader/merge.d.ts +9 -1
  332. package/dist/leader/merge.js +16 -1
  333. package/dist/leader/repair-wire.js +1 -1
  334. package/dist/leader/wire.d.ts +36 -3
  335. package/dist/leader/wire.js +59 -18
  336. package/dist/lsp-evict.d.ts +6 -4
  337. package/dist/lsp-evict.js +2 -3
  338. package/dist/memory-operator-faces.d.ts +5 -4
  339. package/dist/memory-operator-faces.js +1 -1
  340. package/dist/memory-scope.d.ts +29 -2
  341. package/dist/memory-scope.js +64 -15
  342. package/dist/memory-store-refusal.d.ts +5 -2
  343. package/dist/memory-sync-client.d.ts +3 -2
  344. package/dist/memory-sync-client.js +6 -3
  345. package/dist/model-compat.d.ts +17 -8
  346. package/dist/model-compat.js +6 -2
  347. package/dist/model-context-window.d.ts +18 -0
  348. package/dist/model-context-window.js +2 -0
  349. package/dist/model-entry-headers.d.ts +46 -4
  350. package/dist/model-entry-headers.js +2 -2
  351. package/dist/model-entry-refusal.d.ts +35 -16
  352. package/dist/model-entry-refusal.js +40 -27
  353. package/dist/model-plane-face.d.ts +19 -11
  354. package/dist/model-plane-face.js +9 -1
  355. package/dist/model-plane-probe.d.ts +2 -0
  356. package/dist/model-plane-probe.js +17 -0
  357. package/dist/model-provider.d.ts +3 -3
  358. package/dist/model-route-endpoint.d.ts +9 -5
  359. package/dist/model-route-endpoint.js +29 -7
  360. package/dist/model-select.d.ts +16 -0
  361. package/dist/model-select.js +4 -0
  362. package/dist/mountinfo.d.ts +37 -0
  363. package/dist/mountinfo.js +47 -0
  364. package/dist/namespaced-rule-name.d.ts +23 -14
  365. package/dist/namespaced-rule-name.js +8 -11
  366. package/dist/net-address.d.ts +1 -1
  367. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  368. package/dist/observability/corrupt-read-seat.js +5 -3
  369. package/dist/observability/fail-open.d.ts +58 -38
  370. package/dist/observability/fail-open.js +60 -38
  371. package/dist/observability/logger.d.ts +22 -1
  372. package/dist/observability/logger.js +89 -12
  373. package/dist/observability/metrics.js +3 -4
  374. package/dist/observability/otel-exporter.js +2 -1
  375. package/dist/observability/principal-context.d.ts +14 -7
  376. package/dist/observability/principal-context.js +8 -3
  377. package/dist/observability/run-terminal.d.ts +7 -1
  378. package/dist/observability/run-terminal.js +5 -2
  379. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  380. package/dist/orchestration/hardened-vm-runner.js +11 -5
  381. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  382. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  383. package/dist/orchestration/hardened-vm-worker.js +2 -1
  384. package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
  385. package/dist/orchestration/workflow-completion-inbox.js +3 -2
  386. package/dist/org-delivery-gate.d.ts +5 -4
  387. package/dist/org-delivery-gate.js +7 -6
  388. package/dist/outbound-dispatcher.d.ts +1 -1
  389. package/dist/outbound-dispatcher.js +6 -12
  390. package/dist/owner-brands.d.ts +81 -0
  391. package/dist/owner-brands.js +42 -0
  392. package/dist/owner-faces.d.ts +531 -0
  393. package/dist/owner-faces.js +126 -0
  394. package/dist/parked-decide.d.ts +67 -5
  395. package/dist/parked-decide.js +127 -5
  396. package/dist/parked-revive-surface.d.ts +14 -4
  397. package/dist/parked-revive-surface.js +5 -4
  398. package/dist/peer-directory.d.ts +6 -8
  399. package/dist/peer-directory.js +3 -2
  400. package/dist/permission-rule-vocab.d.ts +53 -8
  401. package/dist/permission-rule-vocab.js +30 -2
  402. package/dist/plugins/adoption-log-sql.d.ts +0 -22
  403. package/dist/plugins/adoption-log-sql.js +5 -3
  404. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  405. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  406. package/dist/plugins/approval-ask-store-file.d.ts +18 -7
  407. package/dist/plugins/approval-ask-store-file.js +37 -14
  408. package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
  409. package/dist/plugins/approval-ask-store-memory.js +24 -10
  410. package/dist/plugins/approval-ask-store-sql.d.ts +39 -20
  411. package/dist/plugins/approval-ask-store-sql.js +41 -10
  412. package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
  413. package/dist/plugins/approval-exemption-skill-m46.js +25 -0
  414. package/dist/plugins/approval-exemption-store.d.ts +6 -1
  415. package/dist/plugins/approval-exemption-store.js +14 -0
  416. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  417. package/dist/plugins/approval-nonce-store.js +72 -23
  418. package/dist/plugins/blob-backend.d.ts +2 -0
  419. package/dist/plugins/blob-backend.js +9 -6
  420. package/dist/plugins/caching-session-store.d.ts +13 -1
  421. package/dist/plugins/caching-session-store.js +43 -4
  422. package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
  423. package/dist/plugins/checkpoint-index-columns.js +36 -1
  424. package/dist/plugins/checkpoint-store-face.d.ts +83 -10
  425. package/dist/plugins/checkpoint-store-face.js +18 -1
  426. package/dist/plugins/device-store-sql.js +1 -0
  427. package/dist/plugins/ensure-index.d.ts +13 -1
  428. package/dist/plugins/ensure-index.js +154 -21
  429. package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
  430. package/dist/plugins/ensure-schema-lock-policy.js +3 -2
  431. package/dist/plugins/file-run-store.d.ts +63 -23
  432. package/dist/plugins/file-run-store.js +138 -83
  433. package/dist/plugins/host-platform.d.ts +24 -3
  434. package/dist/plugins/host-platform.js +15 -1
  435. package/dist/plugins/image-bake-store-sql.js +2 -0
  436. package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
  437. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  438. package/dist/plugins/k8s-pod-reaper.js +0 -1
  439. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  440. package/dist/plugins/leader-run-store-sql.js +34 -4
  441. package/dist/plugins/local-checkpoint-store.d.ts +58 -23
  442. package/dist/plugins/local-checkpoint-store.js +195 -76
  443. package/dist/plugins/local-data-dir-modes-m39.js +2 -1
  444. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  445. package/dist/plugins/local-docker-capacity.js +194 -0
  446. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  447. package/dist/plugins/local-docker-reaper.js +102 -0
  448. package/dist/plugins/local-engine-high-water.d.ts +4 -2
  449. package/dist/plugins/local-engine-high-water.js +4 -1
  450. package/dist/plugins/local-session-store.d.ts +358 -125
  451. package/dist/plugins/local-session-store.js +824 -251
  452. package/dist/plugins/local-session-window.d.ts +3 -2
  453. package/dist/plugins/local-session-window.js +3 -2
  454. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  455. package/dist/plugins/local-task-attachment-store.d.ts +18 -1
  456. package/dist/plugins/local-task-attachment-store.js +22 -1
  457. package/dist/plugins/memory-embedder.js +9 -7
  458. package/dist/plugins/memory-engine-pg.d.ts +3 -2
  459. package/dist/plugins/memory-engine-pg.js +14 -5
  460. package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
  461. package/dist/plugins/memory-engine-sql-apply.js +6 -8
  462. package/dist/plugins/memory-engine-tidb.d.ts +4 -2
  463. package/dist/plugins/memory-engine-tidb.js +11 -2
  464. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  465. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  466. package/dist/plugins/memory-run-store.d.ts +39 -27
  467. package/dist/plugins/memory-run-store.js +72 -70
  468. package/dist/plugins/one-time-migration-marker.d.ts +10 -0
  469. package/dist/plugins/one-time-migration-marker.js +7 -0
  470. package/dist/plugins/one-time-migrations.d.ts +186 -45
  471. package/dist/plugins/one-time-migrations.js +442 -119
  472. package/dist/plugins/org-delivery-quota-store.js +2 -1
  473. package/dist/plugins/permission-rule-store-file.d.ts +3 -3
  474. package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
  475. package/dist/plugins/permission-rule-store-sql.js +6 -86
  476. package/dist/plugins/pg-pool.d.ts +1 -31
  477. package/dist/plugins/pg-pool.js +16 -7
  478. package/dist/plugins/remote-env-e2b.d.ts +7 -25
  479. package/dist/plugins/remote-env-e2b.js +34 -25
  480. package/dist/plugins/remote-env-host.d.ts +2 -9
  481. package/dist/plugins/remote-env-host.js +34 -22
  482. package/dist/plugins/remote-env-k8s.d.ts +40 -45
  483. package/dist/plugins/remote-env-k8s.js +107 -58
  484. package/dist/plugins/remote-env-local-docker.d.ts +148 -14
  485. package/dist/plugins/remote-env-local-docker.js +367 -72
  486. package/dist/plugins/remote-scratchpad.js +4 -0
  487. package/dist/plugins/retention-deployment.d.ts +49 -17
  488. package/dist/plugins/retention-deployment.js +39 -8
  489. package/dist/plugins/run-preview-m45.d.ts +11 -0
  490. package/dist/plugins/run-preview-m45.js +19 -0
  491. package/dist/plugins/run-store-sql.d.ts +56 -68
  492. package/dist/plugins/run-store-sql.js +127 -116
  493. package/dist/plugins/s3-answer.d.ts +2 -1
  494. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  495. package/dist/plugins/sandbox-reaper.js +2 -0
  496. package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
  497. package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
  498. package/dist/plugins/scheduler-support.d.ts +16 -1
  499. package/dist/plugins/scheduler-support.js +22 -2
  500. package/dist/plugins/schema-consistency.d.ts +42 -9
  501. package/dist/plugins/schema-consistency.js +212 -11
  502. package/dist/plugins/schema-drift-sentence.d.ts +4 -1
  503. package/dist/plugins/schema-drift-sentence.js +4 -4
  504. package/dist/plugins/schema-ensure-legs.d.ts +9 -0
  505. package/dist/plugins/schema-ensure-legs.js +1 -1
  506. package/dist/plugins/schema-indexes.js +3 -0
  507. package/dist/plugins/schema-live-columns.d.ts +14 -5
  508. package/dist/plugins/schema-live-columns.js +10 -10
  509. package/dist/plugins/send-user-file.js +2 -1
  510. package/dist/plugins/session-birth.d.ts +37 -0
  511. package/dist/plugins/session-birth.js +38 -0
  512. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  513. package/dist/plugins/session-epoch-anchor.js +33 -11
  514. package/dist/plugins/session-ext-table.d.ts +27 -3
  515. package/dist/plugins/session-ext-table.js +19 -6
  516. package/dist/plugins/session-fork.d.ts +15 -1
  517. package/dist/plugins/session-fork.js +3 -0
  518. package/dist/plugins/session-ownership.d.ts +1 -1
  519. package/dist/plugins/session-placement.d.ts +22 -16
  520. package/dist/plugins/session-placement.js +15 -12
  521. package/dist/plugins/session-row-sql.d.ts +12 -0
  522. package/dist/plugins/session-row-sql.js +3 -3
  523. package/dist/plugins/session-run-rollup.d.ts +29 -0
  524. package/dist/plugins/session-run-rollup.js +40 -0
  525. package/dist/plugins/session-store-sql.d.ts +38 -12
  526. package/dist/plugins/session-store-sql.js +130 -30
  527. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  528. package/dist/plugins/session-withdraw-sql.js +42 -0
  529. package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
  530. package/dist/plugins/shared-memory-store-sql.js +2 -1
  531. package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
  532. package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
  533. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  534. package/dist/plugins/sql-driver.d.ts +1 -1
  535. package/dist/plugins/sql-driver.js +2 -1
  536. package/dist/plugins/sql-errors.d.ts +32 -5
  537. package/dist/plugins/sql-errors.js +55 -7
  538. package/dist/plugins/sql-json-column.d.ts +8 -7
  539. package/dist/plugins/sql-json-column.js +10 -6
  540. package/dist/plugins/store-backend.d.ts +84 -15
  541. package/dist/plugins/store-backend.js +186 -55
  542. package/dist/plugins/store-contracts.d.ts +90 -30
  543. package/dist/plugins/store-contracts.js +22 -1
  544. package/dist/plugins/store-fault.d.ts +28 -2
  545. package/dist/plugins/store-fault.js +20 -2
  546. package/dist/plugins/task-attachment-store.d.ts +15 -3
  547. package/dist/plugins/task-attachment-store.js +22 -9
  548. package/dist/plugins/tidb-pool.js +23 -8
  549. package/dist/plugins/web-search.js +5 -3
  550. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  551. package/dist/plugins/workflow-run-store-sql.js +11 -5
  552. package/dist/principal-jwt.d.ts +4 -4
  553. package/dist/principal-jwt.js +20 -5
  554. package/dist/principal-shape.d.ts +41 -0
  555. package/dist/principal-shape.js +19 -0
  556. package/dist/question.d.ts +13 -23
  557. package/dist/question.js +21 -39
  558. package/dist/request-declaration-refusal.d.ts +35 -12
  559. package/dist/request-declaration-refusal.js +21 -9
  560. package/dist/request-form.d.ts +58 -0
  561. package/dist/request-form.js +72 -0
  562. package/dist/request-image-urls.d.ts +8 -2
  563. package/dist/request-image-urls.js +2 -1
  564. package/dist/request-images.d.ts +20 -0
  565. package/dist/request-images.js +59 -0
  566. package/dist/request-key-closure.d.ts +6 -7
  567. package/dist/request-key-closure.js +15 -2
  568. package/dist/resource-suspend.d.ts +7 -16
  569. package/dist/resource-suspend.js +1 -1
  570. package/dist/retired-name-host-notice.d.ts +21 -0
  571. package/dist/retired-name-host-notice.js +12 -0
  572. package/dist/rule-entry-list.d.ts +2 -2
  573. package/dist/rule-entry-list.js +3 -4
  574. package/dist/rule-issue-reading.d.ts +58 -0
  575. package/dist/rule-issue-reading.js +14 -0
  576. package/dist/rules-consent.d.ts +5 -3
  577. package/dist/rules-consent.js +1 -0
  578. package/dist/run-acceptance.d.ts +3 -1
  579. package/dist/run-acceptance.js +3 -0
  580. package/dist/run-local.d.ts +14 -6
  581. package/dist/run-local.js +92 -80
  582. package/dist/run-stale-default.d.ts +7 -0
  583. package/dist/run-stale-default.js +2 -0
  584. package/dist/runs.d.ts +26 -15
  585. package/dist/runs.js +39 -27
  586. package/dist/runtime-caps-resolver.d.ts +21 -6
  587. package/dist/runtime-caps-resolver.js +17 -4
  588. package/dist/runtime-governance.d.ts +2 -2
  589. package/dist/runtime-governance.js +5 -3
  590. package/dist/sealed-key-layout.d.ts +12 -5
  591. package/dist/sealed-key-layout.js +5 -0
  592. package/dist/sealed-key.d.ts +12 -2
  593. package/dist/sealed-key.js +115 -27
  594. package/dist/security.d.ts +128 -158
  595. package/dist/security.js +163 -59
  596. package/dist/sema-config-dir.d.ts +20 -0
  597. package/dist/sema-config-dir.js +25 -0
  598. package/dist/server-secret-env.d.ts +21 -5
  599. package/dist/server-secret-env.js +14 -4
  600. package/dist/session-children-retire.d.ts +7 -5
  601. package/dist/session-children-retire.js +7 -2
  602. package/dist/session-deletion.d.ts +88 -0
  603. package/dist/session-deletion.js +8 -0
  604. package/dist/session-erase.d.ts +145 -0
  605. package/dist/session-erase.js +115 -0
  606. package/dist/session-error-wire.d.ts +5 -5
  607. package/dist/session-error-wire.js +1 -1
  608. package/dist/session-incarnation.d.ts +52 -5
  609. package/dist/session-incarnation.js +19 -2
  610. package/dist/session-policy-wire.d.ts +6 -3
  611. package/dist/session-policy-wire.js +11 -1
  612. package/dist/session-resident-background.d.ts +0 -71
  613. package/dist/session-resident-background.js +4 -3
  614. package/dist/session-row.d.ts +2 -1
  615. package/dist/session-rules-seat.d.ts +12 -0
  616. package/dist/session-rules-seat.js +19 -0
  617. package/dist/session-titler.d.ts +7 -15
  618. package/dist/session-titler.js +1 -1
  619. package/dist/spec-fields.d.ts +57 -3
  620. package/dist/spec-fields.js +72 -51
  621. package/dist/store-posture.d.ts +136 -20
  622. package/dist/store-posture.js +188 -3
  623. package/dist/stored-request-hooks-m20.js +2 -2
  624. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  625. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  626. package/dist/stores-sql/checkpoint-store-sql.d.ts +33 -28
  627. package/dist/stores-sql/checkpoint-store-sql.js +75 -44
  628. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  629. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  630. package/dist/stores-sql/pg-session-storage.d.ts +7 -5
  631. package/dist/stores-sql/pg-session-storage.js +54 -46
  632. package/dist/stores-sql/retention-store-sql.d.ts +87 -19
  633. package/dist/stores-sql/retention-store-sql.js +92 -27
  634. package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
  635. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  636. package/dist/stores-sql/session-write-hooks.d.ts +12 -6
  637. package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
  638. package/dist/stores-sql/tidb-session-storage.js +13 -8
  639. package/dist/stores-sql/tidb-session-store.d.ts +36 -17
  640. package/dist/stores-sql/tidb-session-store.js +69 -39
  641. package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
  642. package/dist/stores-sql/windowed-session-storage.js +9 -0
  643. package/dist/submission-exit.d.ts +50 -0
  644. package/dist/submission-exit.js +108 -0
  645. package/dist/task-a2a.d.ts +1 -1
  646. package/dist/task-a2a.js +3 -3
  647. package/dist/task-cwd.d.ts +20 -0
  648. package/dist/task-cwd.js +8 -0
  649. package/dist/task-mcp.d.ts +1 -1
  650. package/dist/task-mcp.js +3 -3
  651. package/dist/task-settings.d.ts +14 -10
  652. package/dist/task-settings.js +18 -7
  653. package/dist/terminal.d.ts +25 -43
  654. package/dist/terminal.js +31 -11
  655. package/dist/tool-approval.d.ts +131 -129
  656. package/dist/tool-approval.js +189 -193
  657. package/dist/trace/core-keyset-guard.d.ts +13 -6
  658. package/dist/trace/core-vocab-wire.d.ts +95 -0
  659. package/dist/trace/core-vocab-wire.js +15 -0
  660. package/dist/trace/exit-seat.d.ts +30 -4
  661. package/dist/trace/exit-seat.js +40 -36
  662. package/dist/trace/extension-call-face.d.ts +3 -2
  663. package/dist/trace/extension-call-face.js +3 -1
  664. package/dist/trace/ledger-events.d.ts +4 -7
  665. package/dist/trace/ledger-sink.d.ts +1 -30
  666. package/dist/trace/ledger-sink.js +0 -11
  667. package/dist/trace/model-segment.d.ts +5 -5
  668. package/dist/trace/model-segment.js +5 -5
  669. package/dist/trace/project.d.ts +55 -42
  670. package/dist/trace/project.js +52 -19
  671. package/dist/trace/redact.d.ts +123 -27
  672. package/dist/trace/redact.js +880 -260
  673. package/dist/trace/self-minted-wire.d.ts +487 -19
  674. package/dist/trace/self-minted-wire.js +172 -23
  675. package/dist/trace/wire-projection-faces.d.ts +5 -6
  676. package/dist/trace/wire-projection-faces.js +2 -2
  677. package/dist/upstream-body.d.ts +23 -0
  678. package/dist/upstream-body.js +16 -0
  679. package/dist/url-refusal.d.ts +3 -3
  680. package/dist/url-refusal.js +11 -4
  681. package/dist/user-authored-text.d.ts +1 -1
  682. package/dist/user-input-ledger.d.ts +7 -8
  683. package/dist/user-input-ledger.js +1 -1
  684. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  685. package/dist/web-admin-client/apply-effective.js +13 -16
  686. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  687. package/dist/web-admin-client/apply-ledger.js +5 -2
  688. package/dist/web-admin-client/center-request.d.ts +2 -2
  689. package/dist/web-admin-client/center-request.js +15 -15
  690. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  691. package/dist/web-admin-client/effective-keys.js +1 -1
  692. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  693. package/dist/web-admin-client/entry-metadata.js +13 -0
  694. package/dist/web-admin-client/http-client.d.ts +1 -1
  695. package/dist/web-admin-client/http-client.js +23 -4
  696. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  697. package/dist/web-admin-client/mcp-revocation.js +2 -1
  698. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  699. package/dist/web-admin-client/read-warnings.js +1 -0
  700. package/dist/web-admin-client/restart-signal.js +8 -4
  701. package/dist/web-admin-client/skills-mcp.d.ts +2 -2
  702. package/dist/web-admin-client/types.d.ts +1 -2
  703. package/dist/workspace-space.d.ts +3 -2
  704. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  705. package/package.json +6 -3
  706. package/scripts/drain-check-local.mjs +118 -147
  707. package/scripts/drain-check.mysql.sql +22 -2
  708. package/scripts/drain-check.pg.sql +22 -2
  709. package/wire-changes/server@7.148.0.json +1517 -0
  710. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  711. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  712. package/dist/http/memory-layer-reply.d.ts +0 -30
  713. package/dist/http/memory-layer-reply.js +0 -24
  714. package/dist/lsp/e2b-bridge.d.ts +0 -57
  715. package/dist/lsp/e2b-bridge.js +0 -139
  716. package/dist/lsp/e2b-manager.d.ts +0 -93
  717. package/dist/lsp/e2b-manager.js +0 -178
  718. package/dist/lsp/lsp-frames.d.ts +0 -14
  719. package/dist/lsp/lsp-frames.js +0 -25
  720. package/dist/lsp/manager.d.ts +0 -129
  721. package/dist/lsp/manager.js +0 -127
  722. package/dist/lsp/types.d.ts +0 -12
  723. package/dist/lsp/types.js +0 -2
  724. package/dist/lsp/ws-transport.d.ts +0 -40
  725. package/dist/lsp/ws-transport.js +0 -210
@@ -75,6 +75,9 @@ export function crossBoundaryPostureOf(requirePrincipal) {
75
75
  }
76
76
  throw new Error(`cross-boundary posture table has no word for requirePrincipal=${requirePrincipal} (the table must map both values)`);
77
77
  }
78
+ export function buildHandsBand(config, commitCoAuthor) {
79
+ return { commitCoAuthor, autoBackgroundOnTimeout: config.autoBackgroundOnTimeout };
80
+ }
78
81
  export function buildDeploymentPostureSeats(config) {
79
82
  const crossSessionLayers = buildCrossSessionInboundLayers(config);
80
83
  const lkgRows = lkgReadDenyRows(config.configLkgPath);
@@ -124,9 +127,11 @@ export function createSharedRunnerDeps(ctx) {
124
127
  mailboxStore: ctx.mailboxStore ? ctx.mailboxStore : undefined,
125
128
  rosterStore: ctx.rosterStore ? ctx.rosterStore : undefined,
126
129
  mods: ctx.deploymentMods,
127
- hands: ctx.hands,
130
+ hands: buildHandsBand(ctx.config, ctx.commitCoAuthor),
128
131
  toolResultStore: ctx.toolResultStore,
129
132
  checkpointStore: ctx.checkpointStore ? ctx.checkpointStore : undefined,
133
+ fileHistoryStore: ctx.fileHistoryStore ? ctx.fileHistoryStore : undefined,
134
+ fileHistoryCapture: coreFileHistoryCaptureSeat(ctx.fileHistoryStore, ctx.config.fileHistoryCapture),
130
135
  sessionPolicyStore: ctx.sessionPolicyStore ? ctx.sessionPolicyStore : undefined,
131
136
  memoryScopeAdmission: ctx.orgMemoryAdmission.memoryScopeAdmission ? ctx.orgMemoryAdmission.memoryScopeAdmission : undefined,
132
137
  deploymentMemoryScopes: ctx.orgMemoryAdmission.deploymentMemoryScopes && ctx.orgMemoryAdmission.deploymentMemoryScopes.length > 0 ? ctx.orgMemoryAdmission.deploymentMemoryScopes : undefined,
@@ -142,8 +147,11 @@ export function createSharedRunnerDeps(ctx) {
142
147
  };
143
148
  return shared;
144
149
  }
150
+ export function localOwnerRulesDeclared(config, permissionRuleStore) {
151
+ return permissionRuleStore !== undefined && !DEPLOYMENT_SHAPE_PREDICATES.multiTenant.holds(config);
152
+ }
145
153
  export function createRunnerDeps(ctx) {
146
- const { config, logger, metrics, localRoot, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine, sessionCaptureRecords, memorySyncRunner, runtimeCapsResolver, fileHistoryStore, permissionRuleStore, fleetBus, workflowRunStore, workflowJournalStore, workflowAgentRegistry, workflowNotifyGate, deliverWorkflowCompletion, } = ctx;
154
+ const { config, logger, metrics, localRoot, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine, sessionCaptureRecords, memorySyncRunner, runtimeCapsResolver, permissionRuleStore, fleetBus, workflowRunStore, workflowJournalStore, workflowAgentRegistry, workflowNotifyGate, deliverWorkflowCompletion, } = ctx;
147
155
  const peerSessionLister = sessionStore.listSessionRows?.bind(sessionStore);
148
156
  const memoryEngineIncident = createMemoryEngineIncidentSink({ logger, metrics });
149
157
  const sharedRunnerDeps = createSharedRunnerDeps(ctx);
@@ -228,9 +236,8 @@ export function createRunnerDeps(ctx) {
228
236
  }
229
237
  : undefined,
230
238
  runtimeCapsResolver: runtimeCapsResolver ? runtimeCapsResolver : undefined,
231
- fileHistoryStore: fileHistoryStore ? fileHistoryStore : undefined,
232
- fileHistoryCapture: coreFileHistoryCaptureSeat(fileHistoryStore, config.fileHistoryCapture),
233
239
  permissionRuleStore: permissionRuleStore ? permissionRuleStore : undefined,
240
+ localOwnerRules: localOwnerRulesDeclared(config, permissionRuleStore),
234
241
  onBackgroundChildEvent: fleetBackgroundChildPublisher(fleetBus, (msg, fields) => logger.info(msg, fields)),
235
242
  loadProjectMemory: !DEPLOYMENT_SHAPE_PREDICATES.multiTenant.holds(config) && config.projectMemoryEnabled
236
243
  ? makeLoadProjectMemory({ logger, instructionSource: createInstructionSourceSeat(sessionStore, sharedRunnerDeps.onNotice) })
@@ -9,7 +9,7 @@
9
9
  */
10
10
  import type { ServiceConfig } from "../config.js";
11
11
  import type { Logger } from "../observability/logger.js";
12
- import { type EntitlementsResolverFn, type MemoryOptOutVerdictSource } from "../runtime-caps-resolver.js";
12
+ import { type EntitlementsResolverFn, type MemoryOptOutVerdictSource, type RuntimeCapsReading } from "../runtime-caps-resolver.js";
13
13
  export interface RuntimeCapsCtx {
14
14
  config: ServiceConfig;
15
15
  logger: Logger;
@@ -50,6 +50,6 @@ export declare function createRuntimeCaps(ctx: RuntimeCapsCtx): {
50
50
  principalCaps: import("../runtime-caps-resolver.js").PrincipalEntitlementsClient | undefined;
51
51
  centerRuntimeCapsResolver: ((principal: string | undefined) => Promise<import("@sema-agent/core").RuntimeCaps | undefined>) | undefined;
52
52
  runtimeCapsResolver: EntitlementsResolverFn | undefined;
53
- runtimeCapsPeekResolver: EntitlementsResolverFn | undefined;
53
+ runtimeCapsPeekReading: ((principal: string | undefined) => Promise<RuntimeCapsReading>) | undefined;
54
54
  };
55
55
  //# sourceMappingURL=runtime-caps.d.ts.map
@@ -73,7 +73,21 @@ export function createRuntimeCaps(ctx) {
73
73
  });
74
74
  };
75
75
  const runtimeCapsResolver = compose(centerRuntimeCapsResolver, true);
76
- const runtimeCapsPeekResolver = compose(principalCaps?.peekRuntimeCaps, false);
77
- return { principalCaps, centerRuntimeCapsResolver, runtimeCapsResolver, runtimeCapsPeekResolver };
76
+ const peekOver = (base) => compose(base, false);
77
+ const runtimeCapsPeekReading = peekOver(principalCaps === undefined ? undefined : async () => undefined) === undefined
78
+ ? undefined
79
+ : async (principal) => {
80
+ let refusedBy;
81
+ const base = principalCaps === undefined
82
+ ? undefined
83
+ : async (p) => {
84
+ const reading = await principalCaps.peekRuntimeCapsReading(p);
85
+ refusedBy = reading.autoModeRefusedBy;
86
+ return reading.caps;
87
+ };
88
+ const caps = await peekOver(base)?.(principal);
89
+ return { caps, ...(refusedBy !== undefined ? { autoModeRefusedBy: refusedBy } : {}) };
90
+ };
91
+ return { principalCaps, centerRuntimeCapsResolver, runtimeCapsResolver, runtimeCapsPeekReading };
78
92
  }
79
93
  //# sourceMappingURL=runtime-caps.js.map
@@ -25,6 +25,8 @@ import { SessionWatchRegistry } from "../session-watch.js";
25
25
  import type { TaskListLane } from "./task-list-lane.js";
26
26
  import { type RunnerDeps } from "@sema-agent/core";
27
27
  import type { MailboxRecipientLifecycle } from "../plugins/mailbox-recipient-lifecycle.js";
28
+ import { type SessionPurgeOutcome } from "../session-deletion.js";
29
+ import { type SessionEraser, type SessionEraseSettler } from "../session-erase.js";
28
30
  import type { UserInputLedgerStore } from "../user-input-ledger.js";
29
31
  import type { SpaceReclaimer } from "../workspace-space.js";
30
32
  export interface SessionFacesCtx {
@@ -39,6 +41,9 @@ export interface SessionFacesCtx {
39
41
  toolResultStore: ToolResultStoreFull | undefined;
40
42
  resumeAnchorStore: ReturnType<StoreBackend["resumeAnchor"]> | undefined;
41
43
  approvalExemptionStore: ReturnType<StoreBackend["approvalExemption"]> | undefined;
44
+ /** 审批问账(E21 级联的一条腿:挂靠被删会话的问行与它们的批随会话删)。读后端的问账本身(`backend.approvalAsk()`),**不看流内审批开关** ——
45
+ * 前世开着协议留下的行,今世关着也照删(与留存律 / 起服收敛同一读法)。缺席 = 本部署没有后端(纯内存 dev)⇒ 无账可删。 */
46
+ approvalAskStore: ReturnType<StoreBackend["approvalAsk"]> | undefined;
42
47
  sessionPolicyStore: ReturnType<StoreBackend["sessionPolicy"]> | undefined;
43
48
  taskAttachmentStore: TaskAttachmentStore | undefined;
44
49
  /** [ref]:文件历史的**擦除脸**(后端在即在,与 `FILE_HISTORY_CAPTURE` 无关;只有删除类动词)。E21 删除读它,
@@ -62,6 +67,10 @@ export interface SessionFacesCtx {
62
67
  /** k8s 车道工作区空间的回收座(配了构建缓存卷或快照存储时在场;与托管留存 sweep 同一只)—— E21 级联的一条腿:会话删了 =
63
68
  * 这位住客的空间结束了,它的缓存卷、`space/` 快照、该会话停驻车道的快照随之回收。缺席 = 本部署没有可回收的东西。 */
64
69
  spaceReclaimer?: SpaceReclaimer;
70
+ /** 删净会话的 **SQL 执行体**(后端的 `sessionEraser`,与留存执行器同一份选项;stage-06 铸)。缺席 = 非 SQL 后端 ⇒ 用会话店的删除锁节 + 上面各店组 local 执行体。 */
71
+ sessionEraser?: SessionEraser;
72
+ /** 删后收尾(stage-06 铸的那一只,留存 lane 同用)。缺席(测试走廊 / 嵌入形)⇒ 用本 ctx 的同几只座铸一只(同一只工厂)。 */
73
+ settleErasedSessions?: SessionEraseSettler;
65
74
  }
66
75
  export declare function createSessionFaces(ctx: SessionFacesCtx): {
67
76
  ownerAware: OwnerAwareSessionStore;
@@ -81,13 +90,13 @@ export declare function createSessionFaces(ctx: SessionFacesCtx): {
81
90
  promptEpoch?: import("@sema-agent/core").StoredPromptEpoch;
82
91
  } | undefined>) | undefined;
83
92
  sessionWatchRegistry: SessionWatchRegistry | undefined;
84
- purgeSession: ((sessionId: string, owner: string | null) => Promise<{
85
- deleted: boolean;
86
- } | {
87
- active: string;
88
- } | {
89
- childrenAlive: readonly string[];
90
- }>) | undefined;
93
+ purgeSession: ((sessionId: string, owner: string | null) => Promise<SessionPurgeOutcome>) | undefined;
94
+ recoverPendingDeletions: (() => Promise<ReadonlyArray<{
95
+ readonly sessionId: string;
96
+ readonly outcome: SessionPurgeOutcome | {
97
+ readonly failed: string;
98
+ };
99
+ }>>) | undefined;
91
100
  instrumentDegenerate: ((result: import("@sema-agent/core").TaskResult) => void) | undefined;
92
101
  planCacheProbe: PlanCacheProbe;
93
102
  };
@@ -9,14 +9,15 @@ import { setLeafAdvanceListener } from "../session-leaf-bus.js";
9
9
  import { SessionWatchRegistry, posIntEnv } from "../session-watch.js";
10
10
  import { defaultTaskRegistry, peerSessionBoxHandle } from "@sema-agent/core";
11
11
  import { reapSessionBackgroundHard } from "../background-session-reap.js";
12
- import { probeSessionChildren, retireSessionChildren, sessionChildrenScope, SessionChildrenStopIncompleteError } from "../session-children-retire.js";
13
- import { SessionActiveRunError } from "../execution-placement.js";
14
- import { headReadOf, redactIncarnations } from "../session-incarnation.js";
15
- import { recordFailOpen } from "../observability/fail-open.js";
12
+ import { probeSessionChildren, retireSessionChildren, sessionTenantScope, SessionChildrenStopIncompleteError } from "../session-children-retire.js";
13
+ import { SessionActiveRunError, SessionDeletionSupersededError } from "../execution-placement.js";
14
+ import { CROSS_PROCESS_TAKEOVER_AFTER_MS, deletionTokenMintedAt } from "../session-deletion.js";
15
+ import { createLocalSessionEraser, createSessionEraseSettler } from "../session-erase.js";
16
+ import { headReadOf } from "../session-incarnation.js";
16
17
  import { retireSessionId } from "../deleted-session-ids.js";
17
18
  import { seatText } from "../trace/exit-seat.js";
18
19
  export function createSessionFaces(ctx) {
19
- const { config, logger, metrics, localRoot, backend, sessionStore, runStore, checkpointStore, toolResultStore, resumeAnchorStore, approvalExemptionStore, sessionPolicyStore, taskAttachmentStore, fileHistoryErasure, workflowCompletionInbox, taskListLane, dropSessionScoped, mailboxStore, mailboxRecipientLifecycle, backgroundAgentStore, userInputLedgerStore, spaceReclaimer, } = ctx;
20
+ const { config, logger, metrics, localRoot, backend, sessionStore, runStore, checkpointStore, toolResultStore, resumeAnchorStore, approvalExemptionStore, approvalAskStore, sessionPolicyStore, taskAttachmentStore, fileHistoryErasure, workflowCompletionInbox, taskListLane, dropSessionScoped, mailboxStore, mailboxRecipientLifecycle, backgroundAgentStore, userInputLedgerStore, spaceReclaimer, } = ctx;
20
21
  const mysqlPool = backend?.mysqlPool();
21
22
  const auditPgPool = backend?.pgPool();
22
23
  const auditLocalRows = localSessionRowsOf(backend);
@@ -50,113 +51,132 @@ export function createSessionFaces(ctx) {
50
51
  })
51
52
  : undefined;
52
53
  setLeafAdvanceListener(sessionWatchRegistry ? (sid, leaf, owner, seq) => sessionWatchRegistry.notifyLocal(sid, leaf, owner, seq) : undefined);
53
- const purgeSession = ownerAware.deleteSession
54
- ? async (sessionId, owner) => {
55
- let spaceKey;
56
- if (headOf) {
57
- const head = await headOf(sessionId);
58
- if (head?.owner !== owner)
59
- return { deleted: false };
60
- spaceKey = spaceReclaimer !== undefined ? head.incarnation : undefined;
61
- }
62
- const childScope = sessionChildrenScope(owner);
63
- const reach = await probeSessionChildren({ agentStore: backgroundAgentStore, checkpointStore, registry: defaultTaskRegistry }, sessionId, childScope);
54
+ const localDeletion = ownerAware.deleteSession;
55
+ const eraser = ctx.sessionEraser ??
56
+ (localDeletion !== undefined
57
+ ? createLocalSessionEraser((sid, owner, token, legs) => localDeletion.call(ownerAware, sid, owner, token, legs), {
58
+ runStore, approvalAskStore, checkpointStore, resumeAnchorStore, approvalExemptionStore, taskAttachmentStore, userInputLedgerStore, taskListLane,
59
+ workflowCompletionInbox, mailboxStore, toolResultStore, sessionPolicyStore, fileHistoryErasure,
60
+ }, logger)
61
+ : undefined);
62
+ const settle = ctx.settleErasedSessions ?? createSessionEraseSettler({ attachments: taskAttachmentStore, spaceReclaimer, logger });
63
+ const deletion = ownerAware.sessionDeletion;
64
+ const attempts = new Map();
65
+ const holder = (token) => attempts.get(token) ?? "elsewhere";
66
+ const purge = eraser !== undefined && deletion !== undefined
67
+ ? async (sessionId, owner, expect) => {
68
+ const tenantScope = sessionTenantScope(owner);
69
+ const reach = await probeSessionChildren({ agentStore: backgroundAgentStore, checkpointStore, registry: defaultTaskRegistry }, sessionId, tenantScope);
64
70
  if (!reach.reachable) {
65
71
  logger.warn("session_delete_children_still_alive", { sessionId, remaining: reach.unreachableHandles.length, handles: reach.unreachableHandles });
66
72
  return { childrenAlive: reach.unreachableHandles };
67
73
  }
68
- const runs = runStore ? await runStore.deleteBySession(sessionId, owner) : { removed: 0 };
69
- if ("active" in runs)
70
- return { active: runs.active };
71
- {
72
- const children = await retireSessionChildren({ agentStore: backgroundAgentStore, checkpointStore, registry: defaultTaskRegistry }, sessionId, childScope);
73
- if (children.observed.length > 0)
74
- logger.info("session_children_retired", { sessionId, found: children.observed.length, stopped: children.stopped, rounds: children.rounds });
75
- if (children.stopped === "incomplete") {
76
- logger.warn("session_delete_children_stop_incomplete", { sessionId, remaining: children.remainingHandles.length, handles: children.remainingHandles });
77
- throw new SessionChildrenStopIncompleteError(sessionId, children.remainingHandles.length);
78
- }
79
- }
80
- if (checkpointStore)
81
- await checkpointStore.deleteBySession(sessionId, owner);
82
- if (toolResultStore) {
83
- const report = await toolResultStore.deleteBySession?.(sessionId);
84
- if (report !== undefined && report.unattributable > 0) {
85
- logger.warn("tool_result_unattributable_rows_survive_session_delete", {
86
- sessionId,
87
- deleted: report.deleted,
88
- unattributable: report.unattributable,
89
- });
90
- }
91
- }
92
- if (resumeAnchorStore)
93
- await resumeAnchorStore.deleteBySession(sessionId);
94
- if (approvalExemptionStore)
95
- await approvalExemptionStore.deleteBySession(sessionId);
96
- if (sessionPolicyStore?.deleteBySession)
97
- await sessionPolicyStore.deleteBySession(sessionId);
98
- if (taskAttachmentStore)
99
- await taskAttachmentStore.deleteBySession(sessionId);
100
- if (userInputLedgerStore)
101
- await userInputLedgerStore.deleteBySession(sessionId);
102
- if (taskListLane)
103
- await taskListLane.deleteBySession(sessionId);
104
- dropSessionScoped?.(sessionId);
105
- if (fileHistoryErasure) {
106
- if (typeof fileHistoryErasure.deleteBySession === "function")
107
- await fileHistoryErasure.deleteBySession(sessionId);
108
- else {
109
- await fileHistoryErasure.reap(sessionId, []);
110
- logger.warn("session_file_history_baselines_retained", {
111
- sessionId,
112
- 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",
113
- });
114
- }
115
- }
116
- if (workflowCompletionInbox)
117
- await workflowCompletionInbox.purge(sessionId, owner ?? null).catch((err) => logger.warn("workflow_completion_inbox_purge_failed", { sessionId, err: seatText("operator-log-text", String(err)) }));
118
- const peerBox = mailboxStore !== undefined && mailboxRecipientLifecycle !== undefined
119
- ? { store: mailboxStore, lifecycle: mailboxRecipientLifecycle, scope: owner ?? "default", handle: peerSessionBoxHandle(sessionId) }
120
- : undefined;
121
- if (peerBox !== undefined) {
122
- await peerBox.lifecycle.retireRecipient(peerBox.scope, peerBox.handle, Date.now());
123
- }
124
- await purgeScratchpadDir(config.localDataRoot ?? localRoot, sessionId);
74
+ let fence;
125
75
  try {
126
- await reapSessionBackgroundHard(sessionId, owner ?? "default", { includeRetained: false, reason: "session_deleted" }, logger);
76
+ fence = await deletion.fence(sessionId, owner, expect === undefined ? { holder } : { holder, expect });
127
77
  }
128
78
  catch (err) {
129
- logger.warn("session_background_reap_failed", { sessionId, err: seatText("operator-log-text", String(err)) });
79
+ if (err instanceof SessionActiveRunError)
80
+ return { active: err.activeTaskId };
81
+ throw err;
130
82
  }
131
- if (peerBox !== undefined)
132
- await peerBox.store.drop(peerBox.scope, peerBox.handle);
133
- retireSessionId(sessionId, owner, config);
134
- let historyDeleted;
83
+ if (fence === undefined)
84
+ return { deleted: false };
85
+ if ("inProgress" in fence)
86
+ return { inProgress: true };
87
+ const { token, incarnation: spaceKey } = fence;
88
+ attempts.set(token, "running");
89
+ const step = async (leg) => {
90
+ if (!(await deletion.holds(sessionId, token)))
91
+ throw new SessionDeletionSupersededError(sessionId);
92
+ return leg();
93
+ };
94
+ let trees;
135
95
  try {
136
- historyDeleted = await ownerAware.deleteSession(sessionId, owner);
96
+ if (mailboxStore !== undefined && mailboxRecipientLifecycle !== undefined)
97
+ await step(() => mailboxRecipientLifecycle.retireRecipient(tenantScope, peerSessionBoxHandle(sessionId), Date.now()));
98
+ await step(async () => {
99
+ const children = await retireSessionChildren({ agentStore: backgroundAgentStore, checkpointStore, registry: defaultTaskRegistry }, sessionId, tenantScope);
100
+ if (children.observed.length > 0)
101
+ logger.info("session_children_retired", { sessionId, found: children.observed.length, stopped: children.stopped, rounds: children.rounds });
102
+ if (children.stopped === "incomplete") {
103
+ logger.warn("session_delete_children_stop_incomplete", { sessionId, remaining: children.remainingHandles.length, handles: children.remainingHandles });
104
+ throw new SessionChildrenStopIncompleteError(sessionId, children.remainingHandles.length);
105
+ }
106
+ });
107
+ await step(() => purgeScratchpadDir(config.localDataRoot ?? localRoot, sessionId));
108
+ await step(async () => {
109
+ try {
110
+ await reapSessionBackgroundHard(sessionId, tenantScope, { includeRetained: false, reason: "session_deleted" }, logger);
111
+ }
112
+ catch (err) {
113
+ logger.warn("session_background_reap_failed", { sessionId, err: seatText("operator-log-text", String(err)) });
114
+ }
115
+ });
116
+ await step(() => retireSessionId(sessionId, owner, config));
117
+ const receipt = await eraser.erase({ sessionId, owner, token });
118
+ switch (receipt.outcome) {
119
+ case "superseded":
120
+ throw new SessionDeletionSupersededError(sessionId);
121
+ case "erased":
122
+ trees = receipt.trees;
123
+ break;
124
+ default: {
125
+ const unknownOutcome = receipt;
126
+ throw new Error(`session delete: no arm for erase outcome ${JSON.stringify(unknownOutcome)}`);
127
+ }
128
+ }
137
129
  }
138
130
  catch (err) {
139
- if (err instanceof SessionActiveRunError)
140
- return { active: err.activeTaskId };
131
+ attempts.set(token, "ended");
132
+ if (err instanceof SessionDeletionSupersededError) {
133
+ logger.info("session_delete_superseded", { sessionId });
134
+ return { inProgress: true };
135
+ }
141
136
  throw err;
142
137
  }
138
+ attempts.delete(token);
139
+ await sessionStore.forget?.(sessionId);
143
140
  sessionWatchRegistry?.dropSession(sessionId);
144
- if (historyDeleted && spaceReclaimer !== undefined && spaceKey !== undefined) {
145
- void spaceReclaimer.reclaim([{ sessionId, spaceKey }]).catch((err) => {
146
- recordFailOpen("server.workspace-space.reclaim-failed", "stage=seat_threw");
147
- logger.warn("workspace_space_reclaim_failed", {
148
- sessionId,
149
- stage: "seat_threw",
150
- error: seatText("operator-log-text", redactIncarnations(String(err))),
151
- 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",
152
- });
153
- });
141
+ dropSessionScoped?.(sessionId);
142
+ await settle({ ...trees, sessions: [{ sessionId, owner, incarnation: spaceKey }] });
143
+ return { deleted: true };
144
+ }
145
+ : undefined;
146
+ const purgeSession = purge !== undefined ? (sessionId, owner) => purge(sessionId, owner) : undefined;
147
+ const recoverOne = async (sessionId, owner, token) => {
148
+ const unfinished = "the session stays in the deleting state (it reads as gone everywhere); the next start or a repeated DELETE by its owner finishes it";
149
+ try {
150
+ const outcome = await purge(sessionId, owner, token);
151
+ if ("deleted" in outcome && outcome.deleted)
152
+ logger.info("session_delete_recovered", { sessionId });
153
+ else if (!("inProgress" in outcome))
154
+ logger.warn("session_delete_recovery_unfinished", { sessionId, outcome: Object.keys(outcome)[0], effect: unfinished });
155
+ return outcome;
156
+ }
157
+ catch (err) {
158
+ logger.warn("session_delete_recovery_unfinished", { sessionId, outcome: "failed", err: seatText("operator-log-text", String(err)), effect: unfinished });
159
+ return { failed: seatText("operator-log-text", String(err)) };
160
+ }
161
+ };
162
+ const recoverPendingDeletions = purge !== undefined && deletion !== undefined
163
+ ? async () => {
164
+ const out = [];
165
+ for (const { sessionId, owner, token } of await deletion.pending()) {
166
+ const outcome = await recoverOne(sessionId, owner, token);
167
+ out.push({ sessionId, outcome });
168
+ if ("inProgress" in outcome) {
169
+ const minted = deletionTokenMintedAt(token) ?? Date.now();
170
+ const delayMs = Math.max(1_000, minted + CROSS_PROCESS_TAKEOVER_AFTER_MS - Date.now() + 1_000);
171
+ logger.info("session_delete_recovery_deferred", { sessionId, delayMs, note: "another attempt may still be running this delete; it is taken over once the takeover window has passed" });
172
+ setTimeout(() => void recoverOne(sessionId, owner, token), delayMs).unref?.();
173
+ }
154
174
  }
155
- return { deleted: historyDeleted || runs.removed > 0 };
175
+ return out;
156
176
  }
157
177
  : undefined;
158
178
  const instrumentDegenerate = mysqlPool ? makeDegenerateInstrument(mysqlPool, metrics, logger) : undefined;
159
179
  const planCacheProbe = new PlanCacheProbe(metrics, logger);
160
- return { ownerAware, sessionAudit, sessionWatchRegistry, purgeSession, instrumentDegenerate, planCacheProbe };
180
+ return { ownerAware, sessionAudit, sessionWatchRegistry, purgeSession, recoverPendingDeletions, instrumentDegenerate, planCacheProbe };
161
181
  }
162
182
  //# sourceMappingURL=session-faces.js.map
@@ -18,11 +18,11 @@
18
18
  * {@link ShutdownHandle} 摘 —— 调用方手写「摘三信号」的收尾会把双钩漏在进程上,而陈旧的那只
19
19
  * rejection 钩仍握着 `process.exit(1)`,会对后续无关的 rejection 把进程打掉。
20
20
  */
21
- import { Runner, type RunnerDeps } from "@sema-agent/core";
21
+ import { Runner, type NodeLspManager } from "@sema-agent/core";
22
22
  import type { ServiceConfig } from "../config.js";
23
23
  import type { createHttpServer } from "../http/server.js";
24
24
  import type { RetentionLaneController } from "./retention-lane.js";
25
- import type { Logger } from "../observability/logger.js";
25
+ import { type Logger } from "../observability/logger.js";
26
26
  import type { startOtlpExporter } from "../observability/otel-exporter.js";
27
27
  import type { CostQuota } from "../observability/cost-quota.js";
28
28
  import type { RateLimiter } from "../observability/rate-limit.js";
@@ -61,7 +61,8 @@ export interface ShutdownCtx {
61
61
  rateLimiter: RateLimiter | RateLimiterStore | undefined;
62
62
  runner: Runner;
63
63
  subRunner: Runner;
64
- lspManager: RunnerDeps["lspManager"];
64
+ /** 铸点 `createLspManager` 的返回值(本机语言服务器管理器;缺席 = 这台部署不挂)。 */
65
+ lspManager: NodeLspManager | undefined;
65
66
  workflowNotifyJournal: WorkflowNotifyJournalStore | undefined;
66
67
  fleetClient: ReturnType<typeof startFleetClientFromConfig>;
67
68
  backend: StoreBackend | undefined;
@@ -83,7 +84,7 @@ export interface ShutdownCtx {
83
84
  /** [ref]-2:config 60s 刷新环(web-admin startRefreshLoop)——不停的话停机中途还可能热应用
84
85
  * 一份新配置。缺席 = 纯 env 部署没起环。 */
85
86
  webAdmin: {
86
- stopRefreshLoop(): void;
87
+ stopRefreshLoop(): Promise<void>;
87
88
  } | undefined;
88
89
  /** [ref]:活体审批协调器(`TOOL_APPROVAL_ENABLED` 关 ⇒ 缺席)。hardShutdown 起点调它的 `drainForShutdown`:本进程握着的活卡
89
90
  * 按断连同路收场、审计留有序关停记号 —— 否则下一次 boot 把有序重启读成崩溃(`crashed_before_park`)。 */
@@ -1,4 +1,5 @@
1
1
  import { Runner } from "@sema-agent/core";
2
+ import { writeLogText } from "../observability/logger.js";
2
3
  import { writeCrashLast, clearCrashLast, readCrashLast } from "./crash-last.js";
3
4
  import { createSighupIdleHandler } from "../sighup-idle.js";
4
5
  import { createParentWatch } from "../parent-watch.js";
@@ -56,7 +57,7 @@ export function installShutdownHandlers(ctx) {
56
57
  const onUncaughtException = (err) => {
57
58
  try {
58
59
  writeLastWords(err);
59
- console.error(err);
60
+ writeLogText("stderr", err);
60
61
  }
61
62
  finally {
62
63
  process.exit(1);
@@ -74,7 +75,7 @@ export function installShutdownHandlers(ctx) {
74
75
  }
75
76
  try {
76
77
  writeLastWords(err);
77
- console.error(err);
78
+ writeLogText("stderr", err);
78
79
  }
79
80
  finally {
80
81
  process.exit(1);
@@ -136,12 +137,12 @@ export function installShutdownHandlers(ctx) {
136
137
  storeLiveProbe?.stop();
137
138
  servingLease?.stop();
138
139
  void deviceHub?.close().catch((err) => logger.warn("device_hub_close_failed", { err: seatText("operator-log-text", String(err)) }));
139
- webAdmin?.stopRefreshLoop();
140
+ const credentialSettled = webAdmin?.stopRefreshLoop() ?? Promise.resolve();
140
141
  otelExporter?.stop();
141
142
  breakerState?.stop();
142
143
  runner.sessions.dispose();
143
144
  subRunner.sessions.dispose();
144
- void lspManager?.dispose?.();
145
+ void lspManager?.dispose();
145
146
  void workflowNotifyJournal?.close?.();
146
147
  const backgroundSoftStopped = exitBoundary.reapChildProcessesEarly();
147
148
  const softStoppedAt = Date.now();
@@ -164,6 +165,7 @@ export function installShutdownHandlers(ctx) {
164
165
  void Promise.all([retentionTeardown, ledgerStopped])
165
166
  .then(() => (backend ? backend.close() : Promise.resolve()))
166
167
  .then(() => routingStopped)
168
+ .finally(() => credentialSettled)
167
169
  .finally(() => backgroundGrace)
168
170
  .finally(() => process.exit(0));
169
171
  });
@@ -1,7 +1,7 @@
1
1
  import { homedir } from "node:os";
2
2
  import { loadConfig, logConfigDiagnostics, splitLocalRoots } from "../config.js";
3
3
  import { configLocalRoot } from "../config-provider.js";
4
- import { operatorDeclarationRefusal, runStaleHeartbeatRefusal } from "../config-invariants.js";
4
+ import { operatorDeclarationRefusal, operatorSingleUserBoundaryRefusal, runStaleHeartbeatRefusal, singleUserAnonymousBoundaryRefusal } from "../config-invariants.js";
5
5
  import { drainNumEnvWarnings } from "../plugins/remote-shell.js";
6
6
  import { setWebSearchBadPayloadObserver } from "../plugins/web-search.js";
7
7
  import { createLogger } from "../observability/logger.js";
@@ -28,6 +28,14 @@ export function runStage01() {
28
28
  if (operatorDeclarationFailure !== undefined) {
29
29
  throw new Error(operatorDeclarationFailure);
30
30
  }
31
+ const anonymousBoundaryFailure = singleUserAnonymousBoundaryRefusal(config);
32
+ if (anonymousBoundaryFailure !== undefined) {
33
+ throw new Error(anonymousBoundaryFailure);
34
+ }
35
+ const singleUserBoundaryFailure = operatorSingleUserBoundaryRefusal(config);
36
+ if (singleUserBoundaryFailure !== undefined) {
37
+ throw new Error(singleUserBoundaryFailure);
38
+ }
31
39
  const logger = createLogger(config.logLevel);
32
40
  const metrics = createMetrics();
33
41
  installFailOpenRecorder({ logger, metrics, redactDetail: redactSecrets });
@@ -2,6 +2,7 @@ import type { runStage01 } from "./stage-01-config.js";
2
2
  export declare function runStage02(ctx: Awaited<ReturnType<typeof runStage01>>): Promise<{
3
3
  config: import("../config-types.js").ServiceConfig;
4
4
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
5
+ storeEvidence: import("../store-posture.js").StoreEvidence;
5
6
  webAdmin: import("./web-admin.js").WebAdminRuntime;
6
7
  localRoot: string;
7
8
  logger: import("../index.js").Logger;
@@ -2,6 +2,8 @@ import { createUnpricedCeilingVerdict } from "./unpriced-ceiling-verdict.js";
2
2
  import { createWebAdminRuntime } from "./web-admin.js";
3
3
  import { composeExecutionLane, HTTP_SERVICE_LANE_ENTRY } from "./execution-lane.js";
4
4
  import { configSourceKind } from "../config-provider.js";
5
+ import { announceConfigRootEnclosingWorkspace } from "../sema-config-dir.js";
6
+ import { launchWorkspaceOf } from "../task-cwd.js";
5
7
  import { buildCandidateRejectionNotes } from "../web-admin-client/candidate-gate.js";
6
8
  import { logConfigDirMigration, migrateLocalConfigDirectory } from "../config-d-migration.js";
7
9
  import { logEnvModelsMigration, runEnvModelsMigration } from "../config-root-migration.js";
@@ -10,8 +12,10 @@ import { defaultModelRefusal, refusedNameMintedRefusal } from "../model-entry-re
10
12
  import { isRosterGateArmed } from "../config.js";
11
13
  import { judgeServedModelRoute } from "../model-route-endpoint.js";
12
14
  import { servedModelTableLeg } from "../model-select.js";
15
+ import { captureBootStoreEvidence } from "./store-evidence.js";
13
16
  export async function runStage02(ctx) {
14
17
  const { config: loaded, localRoot, logger, metrics } = ctx;
18
+ const storeEvidence = await captureBootStoreEvidence({ config: loaded, localRoot });
15
19
  const configSource = configSourceKind(loaded);
16
20
  if (configSource === "local") {
17
21
  await assertLocalConfigDirTrusted({ root: localRoot, declaredOwnerUid: loaded.configLocalOwnerUid });
@@ -20,6 +24,7 @@ export async function runStage02(ctx) {
20
24
  logConfigDirMigration(logger, await migrateLocalConfigDirectory(localRoot));
21
25
  }
22
26
  const config = await composeExecutionLane(loaded, { configSource, localRoot, logger, entry: HTTP_SERVICE_LANE_ENTRY });
27
+ announceConfigRootEnclosingWorkspace(config, logger, launchWorkspaceOf(config));
23
28
  const webAdmin = await createWebAdminRuntime({ config, logger, metrics, localRoot });
24
29
  const servedLeg = servedModelTableLeg(config);
25
30
  const rejection = webAdmin.candidateRejectionState();
@@ -37,6 +42,6 @@ export async function runStage02(ctx) {
37
42
  }
38
43
  const ceilingVerdict = createUnpricedCeilingVerdict({ config, logger });
39
44
  ceilingVerdict.judge();
40
- return { ...ctx, config, ceilingVerdict, webAdmin };
45
+ return { ...ctx, config, ceilingVerdict, storeEvidence, webAdmin };
41
46
  }
42
47
  //# sourceMappingURL=stage-02-web-admin-pull.js.map
@@ -1,5 +1,7 @@
1
1
  import type { runStage02 } from "./stage-02-web-admin-pull.js";
2
+ import type { AdoptionWiring } from "../adoption/plan.js";
2
3
  export declare function runStage03(ctx: Awaited<ReturnType<typeof runStage02>>): Promise<{
4
+ adoptionWiring: AdoptionWiring;
3
5
  backend: import("../index.js").StoreBackend | undefined;
4
6
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
5
7
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
@@ -26,6 +28,7 @@ export declare function runStage03(ctx: Awaited<ReturnType<typeof runStage02>>):
26
28
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
27
29
  config: import("../config-types.js").ServiceConfig;
28
30
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
31
+ storeEvidence: import("../store-posture.js").StoreEvidence;
29
32
  webAdmin: import("./web-admin.js").WebAdminRuntime;
30
33
  localRoot: string;
31
34
  logger: import("../index.js").Logger;
@@ -1,9 +1,10 @@
1
1
  import { uuidv7 } from "@sema-agent/core";
2
2
  import { openStores } from "./stores.js";
3
3
  export async function runStage03(ctx) {
4
- const { config, localRoot, logger, metrics } = ctx;
5
- const { backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, sessionCaptureRecords, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportStores, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngine, storeSweep, } = await openStores({ config, logger, metrics, localRoot });
4
+ const { config, localRoot, logger, metrics, storeEvidence } = ctx;
5
+ const { backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, sessionCaptureRecords, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportStores, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngine, storeSweep, } = await openStores({ config, logger, metrics, localRoot, storeEvidence });
6
+ const adoptionWiring = { memoryEngine: memoryExportStores !== undefined, taskAttachment: taskAttachmentStore !== undefined };
6
7
  const instanceId = uuidv7();
7
- return { ...ctx, backend, backgroundAgentStore, breakerState, engineDataRoot, instanceId, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memoryExportStores, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecords, sessionStore, sqlEngine, storePosture, storeSweep, taskAttachmentStore, taskListLane, usageWindowStore };
8
+ return { ...ctx, adoptionWiring, backend, backgroundAgentStore, breakerState, engineDataRoot, instanceId, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memoryExportStores, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecords, sessionStore, sqlEngine, storePosture, storeSweep, taskAttachmentStore, taskListLane, usageWindowStore };
8
9
  }
9
10
  //# sourceMappingURL=stage-03-store-backend.js.map
@@ -30,6 +30,7 @@ export declare function runStage04(ctx: Awaited<ReturnType<typeof runStage03>>):
30
30
  sideQueryAccounting: import("../budget.js").SideQueryAccounting;
31
31
  toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
32
32
  tracer: import("@sema-agent/core").TracerHook;
33
+ adoptionWiring: import("../adoption/plan.js").AdoptionWiring;
33
34
  backend: import("../index.js").StoreBackend | undefined;
34
35
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
35
36
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
@@ -56,6 +57,7 @@ export declare function runStage04(ctx: Awaited<ReturnType<typeof runStage03>>):
56
57
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
57
58
  config: import("../config-types.js").ServiceConfig;
58
59
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
60
+ storeEvidence: import("../store-posture.js").StoreEvidence;
59
61
  webAdmin: import("./web-admin.js").WebAdminRuntime;
60
62
  localRoot: string;
61
63
  logger: import("../index.js").Logger;
@@ -8,7 +8,7 @@ import { createRuleConsentLane } from "../rules-consent.js";
8
8
  import { createConsolidationValve } from "./memory-consolidation.js";
9
9
  import { createOperatorFaceIncidentSink } from "../memory-incident-sink.js";
10
10
  export async function runStage04(ctx) {
11
- const { backend, breakerState, config, logger, memoryEngine, metrics } = ctx;
11
+ const { adoptionWiring, backend, breakerState, config, logger, memoryEngine, metrics } = ctx;
12
12
  const memoryBundleFaces = memoryEngine ? createMemoryBundleFaces(memoryEngine) : undefined;
13
13
  const memoryComplianceFaces = memoryEngine
14
14
  ? createMemoryComplianceFaces(memoryEngine, {
@@ -24,7 +24,7 @@ export async function runStage04(ctx) {
24
24
  ? createSessionMemoryStatusFace(memoryEngine)
25
25
  : undefined;
26
26
  const { valve: consolidationValve, watch: consolidationSeatWatch } = createConsolidationValve({ config, memoryEngine, logger });
27
- const adoptionBoot = await runAdoptionBootScan({ backend, logger });
27
+ const adoptionBoot = await runAdoptionBootScan({ backend, logger, wiring: adoptionWiring });
28
28
  if (adoptionBoot.scanned > 0 || adoptionBoot.error !== undefined) {
29
29
  logger.info("adoption_boot_scan", { ...adoptionBoot });
30
30
  }