@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
@@ -2,7 +2,7 @@ import { homedir } from "node:os";
2
2
  import { createCorruptReadSeat, createDurableAbsenceSeat } from "../observability/corrupt-read-seat.js";
3
3
  import { createLogger } from "../observability/logger.js";
4
4
  import { join } from "node:path";
5
- import { existsSync, readdirSync } from "node:fs";
5
+ import { existsSync } from "node:fs";
6
6
  import { AdoptionError, FileStorageBackend } from "@sema-agent/core";
7
7
  import { FileWorkflowJournalStore } from "@sema-agent/core";
8
8
  import { fileSessionCaptureRecordStore } from "@sema-agent/core";
@@ -12,14 +12,19 @@ import { TiDBWorkflowRunStore, TiDBWorkflowCompletionInbox, TiDBWorkflowNotifyJo
12
12
  import { FileRunStore } from "./file-run-store.js";
13
13
  import { LocalWorkflowParkDecisionStore } from "../orchestration/workflow-park-decision.js";
14
14
  import { StoreBootRefusalError } from "./store-contracts.js";
15
+ import { databaseAnswerCodesOf, isDeploymentFaultError } from "./sql-errors.js";
15
16
  import { buildStoreOpenRefusalTail } from "./store-open-refusal.js";
16
17
  import { acquireLocalBackendWithWait } from "./store-lock-wait.js";
17
18
  import { NO_SQL_MIGRATIONS, assertExecutionPlacementSwitchAdmissibleOnPool, backfillLocalAskExecutionLanes, backfillLocalExecutionPlacements, runSqlOneTimeMigrations } from "./one-time-migrations.js";
18
19
  import { deployedExecutionLanes } from "../execution-lane-caps.js";
20
+ import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
21
+ import { LOCAL_MARKER_FILE, switchLocalScenarioPrefixM42 } from "./scenario-prefix-switch-m42.js";
22
+ import { LOCAL_LEGACY_SKILL_EXEMPTION_MARKER_FILE, dropLocalLegacySkillExemptionsM46 } from "./approval-exemption-skill-m46.js";
23
+ import { LocalTaskAttachmentStore } from "./local-task-attachment-store.js";
19
24
  import { assertRetiredSchemaAbsentOnPool } from "./schema-consistency.js";
20
- import { LocalSessionStore, createLocalSessionRepo } from "./local-session-store.js";
25
+ import { LocalSessionStore, archiveTokenAdoptionCarried, holdArchiveTokenAdoptionDuty, createLocalSessionRepo } from "./local-session-store.js";
21
26
  import { SESSION_DURABILITY, SESSION_PLACEMENTS } from "./session-placement.js";
22
- import { LocalCheckpointStore } from "./local-checkpoint-store.js";
27
+ import { LocalCheckpointStore, dropLocalCheckpointCtxStrict } from "./local-checkpoint-store.js";
23
28
  import { FileResumeAnchorStore } from "./file-resume-anchor-store.js";
24
29
  import { TiDBApprovalExemptionStore, PgApprovalExemptionStore, FileApprovalExemptionStore } from "./approval-exemption-store.js";
25
30
  import { TiDBApprovalNonceStore, PgApprovalNonceStore, FileApprovalNonceStore } from "./approval-nonce-store.js";
@@ -33,6 +38,7 @@ import { FileUserInputLedgerStore } from "./user-input-ledger-file.js";
33
38
  import { TiDBUserInputLedgerStore, PgUserInputLedgerStore } from "./user-input-ledger-sql.js";
34
39
  import { TiDBResumeAnchorStore, PgResumeAnchorStore } from "./resume-anchor-store-sql.js";
35
40
  import { TiDBSessionPolicyStore, PgSessionPolicyStore } from "../stores-sql/session-policy-store-sql.js";
41
+ import { countClientWriteOn } from "./session-withdraw-sql.js";
36
42
  import { TiDBWorkflowJournalStore, PgWorkflowJournalStore } from "../stores-sql/workflow-journal-store-sql.js";
37
43
  import { TiDBFileHistoryStore, PgFileHistoryStore, FILE_HISTORY_BLOB_KEY_PREFIX } from "../stores-sql/file-history-store-sql.js";
38
44
  import { SqlBlobIndex } from "../stores-sql/blob-index-sql.js";
@@ -59,8 +65,11 @@ import { SqlSessionStore } from "./session-store-sql.js";
59
65
  import { TiDBSharedMemoryStore, PgSharedMemoryStore } from "./shared-memory-store-sql.js";
60
66
  import { TiDBAdoptionLogStore, PgAdoptionLogStore } from "./adoption-log-sql.js";
61
67
  import { SqlRetentionStore } from "../stores-sql/retention-store-sql.js";
68
+ import { SessionDeletionSupersededError } from "../execution-placement.js";
69
+ import { sessionTenantScope } from "../session-children-retire.js";
62
70
  import { sqlStoreRetention } from "./retention-declaration.js";
63
- import { createRetentionDeploymentHooks } from "./retention-deployment.js";
71
+ import { createRetentionDeploymentHooks, createSessionRowsHook, sweepLateCompletionRows } from "./retention-deployment.js";
72
+ import { seatText } from "../trace/exit-seat.js";
64
73
  import { createSqlSessionWriteHooks } from "./session-store-sql.js";
65
74
  import { TiDBRetentionLaneStore, PgRetentionLaneStore } from "./retention-lane-store-sql.js";
66
75
  import { createSqlPermissionRuleStores } from "./permission-rule-store-sql.js";
@@ -70,8 +79,12 @@ import { buildDataDirLayout, tightenLocalDataDirModes } from "./local-data-dir-m
70
79
  import { holdEngineHighWater } from "./local-engine-high-water.js";
71
80
  import { serviceVersion } from "../service-version.js";
72
81
  import { mysqlDriver, pgDriver } from "./sql-driver.js";
73
- import { storeDegradedReasonFor } from "../store-posture.js";
82
+ import { localDataRootHoldsData, storeDegradedReasonFor } from "../store-posture.js";
74
83
  import { openWithinWait } from "./store-open-wait.js";
84
+ export function createRunStallWiring(config, observers) {
85
+ const count = observers?.runStallVerdicts;
86
+ return { windowMs: () => config.runStaleSec * 1000, onVerdicts: (landed) => count?.(landed) };
87
+ }
75
88
  export function workflowJournalOf(config, backend) {
76
89
  return config.selfOrchestrationEnabled && backend ? backend.workflowJournal() : undefined;
77
90
  }
@@ -127,14 +140,14 @@ async function legacySweepImpl(config, dialect, pool) {
127
140
  }
128
141
  export function createSqlRetentionCallHooks(db, opts, input) {
129
142
  const deployment = createRetentionDeploymentHooks(db.dialect, opts, input);
130
- return { hooks: { retention: deployment.hooks.retention, session: createSqlSessionWriteHooks(db) }, endedSpaces: deployment.endedSpaces };
143
+ return { hooks: { retention: deployment.hooks.retention, session: createSqlSessionWriteHooks(db) }, attachmentShas: deployment.attachmentShas };
131
144
  }
132
145
  export function createSqlRetentionExecutor(db, opts) {
133
- const logged = opts.logger !== undefined ? { logger: opts.logger } : {};
134
- const reads = new SqlRetentionStore(db, logged);
146
+ const storeOpts = { ...(opts.mailboxTables ? { sessionBoxScope: sessionTenantScope } : {}), ...(opts.logger !== undefined ? { logger: opts.logger } : {}) };
147
+ const reads = new SqlRetentionStore(db, storeOpts);
135
148
  const forCall = (input) => {
136
149
  const hooks = createSqlRetentionCallHooks(db, opts, input);
137
- return { store: new SqlRetentionStore(db, { ...logged, transactionHooks: hooks.hooks }), hooks, call: { domain: input.domain, cutoffMs: input.cutoffMs } };
150
+ return { store: new SqlRetentionStore(db, { ...storeOpts, transactionHooks: hooks.hooks }), hooks, call: { domain: input.domain, cutoffMs: input.cutoffMs } };
138
151
  };
139
152
  return {
140
153
  retention: reads.retention,
@@ -146,9 +159,11 @@ export function createSqlRetentionExecutor(db, opts) {
146
159
  },
147
160
  deleteExpiredSessions: async (input) => {
148
161
  const one = forCall(input);
149
- const receipt = await one.store.deleteExpiredSessions(one.call);
150
- const endedSpaces = one.hooks.endedSpaces();
151
- return endedSpaces.length > 0 ? { ...receipt, endedSpaces } : receipt;
162
+ const { erasedRows, ...receipt } = await one.store.deleteExpiredSessions(one.call);
163
+ if (erasedRows === undefined)
164
+ return receipt;
165
+ await afterSessionErase(db, opts, erasedRows.sessions);
166
+ return { ...receipt, erased: { ...erasedRows, attachmentShas: one.hooks.attachmentShas() } };
152
167
  },
153
168
  deleteOrphanToolResults: async (input) => {
154
169
  const one = forCall(input);
@@ -156,27 +171,72 @@ export function createSqlRetentionExecutor(db, opts) {
156
171
  },
157
172
  };
158
173
  }
174
+ async function afterSessionErase(db, opts, sessions) {
175
+ if (!opts.completionInbox || sessions.length === 0)
176
+ return;
177
+ await sweepLateCompletionRows(db, db.dialect, sessions, Date.now()).catch((err) => opts.logger?.warn?.("workflow_completion_late_rows_sweep_failed", { sessions: sessions.length, err: seatText("operator-log-text", String(err)) }));
178
+ }
179
+ export function createSqlSessionEraser(db, opts) {
180
+ const storeOpts = { ...(opts.mailboxTables ? { sessionBoxScope: sessionTenantScope } : {}), ...(opts.logger !== undefined ? { logger: opts.logger } : {}) };
181
+ return {
182
+ async erase(input) {
183
+ const rows = createSessionRowsHook(db.dialect, opts, input.owner ?? "");
184
+ const store = new SqlRetentionStore(db, { ...storeOpts, transactionHooks: { retention: { beforeDelete: rows.beforeDelete }, session: createSqlSessionWriteHooks(db) } });
185
+ const out = await store.eraseSession(input);
186
+ switch (out.outcome) {
187
+ case "absent":
188
+ return { outcome: "superseded" };
189
+ case "refused":
190
+ if (out.refusal instanceof SessionDeletionSupersededError)
191
+ return { outcome: "superseded" };
192
+ throw out.refusal;
193
+ case "erased":
194
+ await afterSessionErase(db, opts, out.rows.sessions);
195
+ return { outcome: "erased", trees: { ...out.rows, attachmentShas: rows.attachmentShas() } };
196
+ default: {
197
+ const unknown = out;
198
+ throw new Error(`session erase: no arm for ${JSON.stringify(unknown)}`);
199
+ }
200
+ }
201
+ },
202
+ };
203
+ }
159
204
  export function assertCloudSnapshotBlobPosture(kind, config) {
160
205
  if (kind === "local" || config.snapshotBlobStore || config.snapshotBlobAllowSql)
161
206
  return;
207
+ const fact = SQL_BLOB_POSTURE_FACTS[kind];
162
208
  throw new Error("cloud deployments (DB_BACKEND=mysql|pg) must configure object storage for rewind file-history blobs " +
163
- "(MINIO_ENDPOINT/MINIO_ACCESS_KEY/MINIO_SECRET_KEY): single-row SQL blob writes hit TiDB's " +
164
- "txn-entry-size-limit (default 6MiB) / the mysql-protocol packet limit (bytes belong in object storage — " +
209
+ `(MINIO_ENDPOINT/MINIO_ACCESS_KEY/MINIO_SECRET_KEY): ${fact.wall} (bytes belong in object storage — ` +
165
210
  "same ruling as the D-1 attachment store). Single-box/test rigs may explicitly opt out with " +
166
- "SNAPSHOT_BLOB_ALLOW_SQL_BYTES=true (a per-blob cap then applies; an over-cap tracked file's first-touch " +
211
+ `SNAPSHOT_BLOB_ALLOW_SQL_BYTES=true (${fact.cap}; an over-cap tracked file's first-touch ` +
167
212
  "backup is refused typed, which under the default DV-14 policy refuses that edit).");
168
213
  }
214
+ const SQL_BLOB_POSTURE_FACTS = {
215
+ mysql: {
216
+ wall: "single-row SQL blob writes hit TiDB's txn-entry-size-limit (default 6MiB) / the mysql-protocol packet limit",
217
+ cap: "a per-blob cap then applies",
218
+ },
219
+ pg: {
220
+ wall: "single-row SQL blob writes put each blob into one PostgreSQL bytea value (PostgreSQL holds at most 1 GB in one value; this service reads no row-size or statement-size wall from PostgreSQL, so it derives no smaller default cap)",
221
+ cap: "this service derives no per-blob cap on PostgreSQL, so none applies unless SNAPSHOT_BLOB_SQL_MAX_BYTES is set — then a per-blob cap applies",
222
+ },
223
+ };
224
+ export function buildSqlOneTimeMigrationInput(config) {
225
+ return { lanes: deployedExecutionLanes(config), liveRunWindowMs: config.runStaleSec * 1000, identityBoundary: DEPLOYMENT_SHAPE_PREDICATES.identityBoundary.holds(config) };
226
+ }
169
227
  class TiDBBackend {
170
228
  pool;
171
229
  config;
230
+ observers;
172
231
  kind = "mysql";
173
- constructor(pool, config) {
232
+ constructor(pool, config, observers) {
174
233
  this.pool = pool;
175
234
  this.config = config;
235
+ this.observers = observers;
176
236
  }
177
237
  ensureSchema() { return ensureTidbSchema(this.pool); }
178
238
  close() { return this.pool.end(); }
179
- run() { return (this.runStoreInst ??= new TiDBRunStore(this.pool)); }
239
+ run() { return (this.runStoreInst ??= new TiDBRunStore(this.pool, createRunStallWiring(this.config, this.observers))); }
180
240
  runStoreInst;
181
241
  resumeAnchor() { return new TiDBResumeAnchorStore(this.pool); }
182
242
  approvalExemption() { return new TiDBApprovalExemptionStore(this.pool); }
@@ -186,13 +246,13 @@ class TiDBBackend {
186
246
  permissionRule() { return createSqlPermissionRuleStores(mysqlDriver(this.pool)); }
187
247
  sendFileLedger() { return new TiDBSendFileLedger(this.pool); }
188
248
  userInputLedger() { return new TiDBUserInputLedgerStore(this.pool); }
189
- sessionPolicy(logger) { return new TiDBSessionPolicyStore(this.pool, logger); }
249
+ sessionPolicy(logger) { return new TiDBSessionPolicyStore(this.pool, countClientWriteOn, logger ?? createLogger()); }
190
250
  fileHistory() { return new TiDBFileHistoryStore(this.pool, fileHistoryOptions(this.config)); }
191
251
  memoryOptOutGrant() { return new TiDBMemoryOptOutGrantStore(this.pool); }
192
252
  sessionCaptureRecords() { return () => (this.captureRecordsInst ??= new TiDBSessionCaptureRecordStore(this.pool)); }
193
253
  captureRecordsInst;
194
254
  legacySnapshotBlobSweep() { return legacySweepImpl(this.config, "mysql", this.pool); }
195
- runOneTimeMigrations() { return runSqlOneTimeMigrations("mysql", this.pool, { lanes: deployedExecutionLanes(this.config), liveRunWindowMs: this.config.runStaleSec * 1000 }); }
255
+ runOneTimeMigrations() { return runSqlOneTimeMigrations("mysql", this.pool, buildSqlOneTimeMigrationInput(this.config)); }
196
256
  workflowJournal() { return new TiDBWorkflowJournalStore(this.pool); }
197
257
  outcomeSink() { return new TiDBOutcomeLedger(this.pool); }
198
258
  workflowRun(onWarn) { return new TiDBWorkflowRunStore(this.pool, onWarn); }
@@ -202,7 +262,7 @@ class TiDBBackend {
202
262
  workflowParkDecisions() { return (this.parkDecisionsInst ??= new SqlWorkflowParkDecisionStore(this.run())); }
203
263
  parkDecisionsInst;
204
264
  sharedMemoryStore(authorizer) { return new TiDBSharedMemoryStore(this.pool, authorizer); }
205
- checkpoint(logger) { return new TiDBCheckpointStore(this.pool, logger, { retention: sqlStoreRetention(this.config.retentionSweep), claims: this.run() }); }
265
+ checkpoint(logger) { return new TiDBCheckpointStore(this.pool, logger, { retention: sqlStoreRetention(this.config.retentionSweep) }); }
206
266
  checkpointReadView() { return this.checkpoint(); }
207
267
  toolResult() { return new TiDBToolResultStore(this.pool, { retention: sqlStoreRetention(this.config.retentionSweep) }); }
208
268
  imageIndex() { return new TiDBImageIndex(this.pool); }
@@ -210,6 +270,7 @@ class TiDBBackend {
210
270
  leaderRun() { return new TiDBLeaderRunStore(this.pool); }
211
271
  device() { return new TiDBDeviceStore(this.pool); }
212
272
  retention(opts) { return createSqlRetentionExecutor(mysqlDriver(this.pool), opts); }
273
+ sessionEraser(opts) { return createSqlSessionEraser(mysqlDriver(this.pool), opts); }
213
274
  retentionLane() { return new TiDBRetentionLaneStore(this.pool); }
214
275
  breaker(onWriteFail) { return new TiDBBreakerState(this.pool, onWriteFail); }
215
276
  costQuota(limitMicroUsd, windowMs, onDegraded) { return new TiDBCostQuota(this.pool, limitMicroUsd, windowMs, undefined, onDegraded, this.config.dbQueryTimeoutMs); }
@@ -223,14 +284,16 @@ class TiDBBackend {
223
284
  class PgBackend {
224
285
  pool;
225
286
  config;
287
+ observers;
226
288
  kind = "pg";
227
- constructor(pool, config) {
289
+ constructor(pool, config, observers) {
228
290
  this.pool = pool;
229
291
  this.config = config;
292
+ this.observers = observers;
230
293
  }
231
294
  ensureSchema() { return ensurePgSchema(this.pool); }
232
295
  close() { return this.pool.end(); }
233
- run() { return (this.runStoreInst ??= new PgRunStore(this.pool)); }
296
+ run() { return (this.runStoreInst ??= new PgRunStore(this.pool, createRunStallWiring(this.config, this.observers))); }
234
297
  runStoreInst;
235
298
  resumeAnchor() { return new PgResumeAnchorStore(this.pool); }
236
299
  approvalExemption() { return new PgApprovalExemptionStore(this.pool); }
@@ -240,13 +303,13 @@ class PgBackend {
240
303
  permissionRule() { return createSqlPermissionRuleStores(pgDriver(this.pool)); }
241
304
  sendFileLedger() { return new PgSendFileLedger(this.pool); }
242
305
  userInputLedger() { return new PgUserInputLedgerStore(this.pool); }
243
- sessionPolicy(logger) { return new PgSessionPolicyStore(this.pool, logger); }
306
+ sessionPolicy(logger) { return new PgSessionPolicyStore(this.pool, countClientWriteOn, logger ?? createLogger()); }
244
307
  fileHistory() { return new PgFileHistoryStore(this.pool, fileHistoryOptions(this.config)); }
245
308
  memoryOptOutGrant() { return new PgMemoryOptOutGrantStore(this.pool); }
246
309
  sessionCaptureRecords() { return () => (this.captureRecordsInst ??= new PgSessionCaptureRecordStore(this.pool)); }
247
310
  captureRecordsInst;
248
311
  legacySnapshotBlobSweep() { return legacySweepImpl(this.config, "pg", this.pool); }
249
- runOneTimeMigrations() { return runSqlOneTimeMigrations("pg", this.pool, { lanes: deployedExecutionLanes(this.config), liveRunWindowMs: this.config.runStaleSec * 1000 }); }
312
+ runOneTimeMigrations() { return runSqlOneTimeMigrations("pg", this.pool, buildSqlOneTimeMigrationInput(this.config)); }
250
313
  workflowJournal() { return new PgWorkflowJournalStore(this.pool); }
251
314
  outcomeSink() { return new PgOutcomeLedger(this.pool); }
252
315
  workflowRun(onWarn) { return new PgWorkflowRunStore(this.pool, onWarn); }
@@ -256,7 +319,7 @@ class PgBackend {
256
319
  workflowParkDecisions() { return (this.parkDecisionsInst ??= new SqlWorkflowParkDecisionStore(this.run())); }
257
320
  parkDecisionsInst;
258
321
  sharedMemoryStore(authorizer) { return new PgSharedMemoryStore(this.pool, authorizer); }
259
- checkpoint(logger) { return new PgCheckpointStore(this.pool, logger, { retention: sqlStoreRetention(this.config.retentionSweep), claims: this.run() }); }
322
+ checkpoint(logger) { return new PgCheckpointStore(this.pool, logger, { retention: sqlStoreRetention(this.config.retentionSweep) }); }
260
323
  checkpointReadView() { return this.checkpoint(); }
261
324
  toolResult() { return new PgToolResultStore(this.pool, { retention: sqlStoreRetention(this.config.retentionSweep) }); }
262
325
  imageIndex() { return new PgImageIndex(this.pool); }
@@ -264,6 +327,7 @@ class PgBackend {
264
327
  leaderRun() { return new PgLeaderRunStore(this.pool); }
265
328
  device() { return new PgDeviceStore(this.pool); }
266
329
  retention(opts) { return createSqlRetentionExecutor(pgDriver(this.pool), opts); }
330
+ sessionEraser(opts) { return createSqlSessionEraser(pgDriver(this.pool), opts); }
267
331
  retentionLane() { return new PgRetentionLaneStore(this.pool); }
268
332
  breaker(onWriteFail) { return new PgBreakerState(this.pool, onWriteFail); }
269
333
  costQuota(limitMicroUsd, windowMs, onDegraded) { return new PgCostQuota(this.pool, limitMicroUsd, windowMs, undefined, onDegraded, this.config.dbQueryTimeoutMs); }
@@ -277,6 +341,22 @@ class PgBackend {
277
341
  export function localSessionRowsOf(backend) {
278
342
  return backend instanceof LocalBackend ? backend.session() : undefined;
279
343
  }
344
+ export function localClientWritesOf(backend) {
345
+ return backend instanceof LocalBackend ? backend.session() : undefined;
346
+ }
347
+ function createClientCountedPolicyStore(inner, sessions) {
348
+ const listBySession = inner.listBySession?.bind(inner);
349
+ const deleteBySession = inner.deleteBySession?.bind(inner);
350
+ return {
351
+ getRules: (sessionId, principal) => inner.getRules(sessionId, principal),
352
+ putRules: (sessionId, principal, rules, opts) => sessions.withClientWrite(sessionId, async (count) => {
353
+ await count();
354
+ return inner.putRules(sessionId, principal, rules, opts);
355
+ }),
356
+ ...(listBySession !== undefined ? { listBySession } : {}),
357
+ ...(deleteBySession !== undefined ? { deleteBySession } : {}),
358
+ };
359
+ }
280
360
  class LocalBackend {
281
361
  kind = "local";
282
362
  fileBackend;
@@ -296,9 +376,11 @@ class LocalBackend {
296
376
  discloseWarn;
297
377
  parkDecisionLedgerRoot;
298
378
  executionLanes;
379
+ identityBoundary;
299
380
  dataDirLayout;
300
- constructor(fileBackend, config, discloseWarn, onWarn, onError) {
381
+ constructor(fileBackend, config, discloseWarn, onWarn, onError, observers) {
301
382
  this.executionLanes = deployedExecutionLanes(config);
383
+ this.identityBoundary = DEPLOYMENT_SHAPE_PREDICATES.identityBoundary.holds(config);
302
384
  this.onWarn = onWarn;
303
385
  this.discloseWarn = discloseWarn;
304
386
  this.onError = onError;
@@ -307,13 +389,17 @@ class LocalBackend {
307
389
  const corruptReadWarn = (msg, fields) => this.discloseWarn(msg, fields);
308
390
  this.dataDirLayout = buildDataDirLayout({ configuredRoot: root, physicalRoot: this.fileBackend.root, memoryEngineRoot: memoryEngineRootFor(config, root) });
309
391
  this.runStore = new FileRunStore(this.fileBackend.root, {
392
+ rootRows: () => this.sessionStore,
310
393
  error: (msg, fields) => void (this.onError ?? this.onWarn)?.(msg, fields),
311
394
  strictHydrate: config.runStoreStrictHydrate,
395
+ stall: createRunStallWiring(config, observers),
312
396
  });
313
- this.sessionStore = new LocalSessionStore(createLocalSessionRepo(this.fileBackend.root), this.runStore, this.fileBackend.root, {
397
+ const physicalRoot = this.fileBackend.root;
398
+ this.sessionStore = new LocalSessionStore(createLocalSessionRepo(physicalRoot), this.runStore, physicalRoot, {
314
399
  log: createLogger(config.logLevel),
315
400
  durability: SESSION_DURABILITY,
316
401
  placements: SESSION_PLACEMENTS,
402
+ withdrawCheckpointCtx: (sessionId) => dropLocalCheckpointCtxStrict(physicalRoot, sessionId),
317
403
  });
318
404
  this.parkDecisionLedgerRoot = config.workflowRunStoreBackend === "memory" ? undefined : join(this.fileBackend.root, "workflows");
319
405
  this.resumeAnchorStore = new FileResumeAnchorStore(this.fileBackend.root);
@@ -335,14 +421,33 @@ class LocalBackend {
335
421
  async ensureSchema() {
336
422
  this.executionLaneWordsRenamed += await this.sessionStore.renameRetiredExecutionLaneWordM40();
337
423
  await this.sessionStore.assertStrictSidecarsReadable();
424
+ await this.sessionStore.finishPendingDrops();
338
425
  await this.sessionStore.settleArchiveSnapshots();
426
+ const adoption = await this.sessionStore.adoptArchiveTokensM47();
427
+ this.archiveTokensAdopted += adoption.adopted;
428
+ this.archiveTokensMinted += adoption.minted;
339
429
  }
340
430
  executionLaneWordsRenamed = 0;
431
+ archiveTokensAdopted = 0;
432
+ archiveTokensMinted = 0;
341
433
  async runOneTimeMigrations() {
434
+ const scenarioPrefixSourcesScanned = await switchLocalScenarioPrefixM42(join(this.fileBackend.root, LOCAL_MARKER_FILE), [
435
+ { source: "runs", rows: () => this.runStore.scenarioPrefixOwnerRowsM42() },
436
+ { source: "sessions", rows: () => this.sessionStore.scenarioPrefixOwnerRowsM42() },
437
+ { source: "approval asks", rows: () => this.approvalAskStore.scenarioPrefixOwnerRowsM42() },
438
+ { source: "attachments", rows: () => new LocalTaskAttachmentStore(this.fileBackend.root).scenarioPrefixOwnerRowsM42() },
439
+ ]);
342
440
  tightenLocalDataDirModes(this.dataDirLayout, {
343
441
  tightened: (msg, meta) => this.onWarn?.(msg, meta),
344
442
  refused: (msg, meta) => this.discloseWarn(msg, meta),
345
443
  });
444
+ const runErrorCodeColumnRewritten = this.runStore.migrateRunErrorCodeColumnM44();
445
+ const runObjectivePreviewRewritten = this.runStore.migrateRunObjectivePreviewM45();
446
+ const shellSentinelOwnersCleared = this.identityBoundary ? 0 : (await this.sessionStore.clearShellSentinelOwnersM48()) + this.runStore.clearShellSentinelOwnersM48();
447
+ const checkpointHostSessionsBackfilled = existsSync(join(this.fileBackend.root, "checkpoint-session-tokens.json")) || existsSync(join(this.fileBackend.root, "checkpoint-scopes.json"))
448
+ ? await this.checkpointStoreOf().backfillHostSessionsM49()
449
+ : 0;
450
+ const legacySkillExemptionsDropped = dropLocalLegacySkillExemptionsM46(join(this.fileBackend.root, LOCAL_LEGACY_SKILL_EXEMPTION_MARKER_FILE), this.approvalExemptionStore);
346
451
  const archives = await this.sessionStore.migrateLocalArchives();
347
452
  const placements = await backfillLocalExecutionPlacements(this.runStore.sessionIdsWithRuns(), this.sessionStore.executionPlacementBackfill, { lanes: this.executionLanes });
348
453
  const importedLayerRoot = { importedLayerRootAllowsRetired: [], importedLayerRootBucketsSkipped: [], importedLayerRootBucketsUnnamed: 0 };
@@ -350,21 +455,33 @@ class LocalBackend {
350
455
  const rules = this.permissionRule();
351
456
  await retireImportedLayerRootAllows({ candidateOwners: () => fileRuleBucketOwners(rules), durable: rules.durable, isWholeBucketRefusal: isFileBucketDamaged, isVanishedBucket: () => false }, importedLayerRoot);
352
457
  }
458
+ const localArchiveTokensAdopted = this.archiveTokensAdopted;
459
+ const localArchiveTokensMinted = this.archiveTokensMinted;
460
+ this.archiveTokensAdopted = 0;
461
+ this.archiveTokensMinted = 0;
353
462
  const executionLaneWordsRenamed = this.executionLaneWordsRenamed + this.approvalAskStore.renameRetiredExecutionLaneWordM40();
354
463
  this.executionLaneWordsRenamed = 0;
355
464
  const askExecutionLanesBackfilled = backfillLocalAskExecutionLanes(this.approvalAskStore, { lanes: this.executionLanes });
356
465
  return {
357
466
  ...NO_SQL_MIGRATIONS,
467
+ runErrorCodeColumnRewritten,
468
+ runObjectivePreviewRewritten,
469
+ shellSentinelOwnersCleared,
470
+ checkpointHostSessionsBackfilled,
471
+ legacySkillExemptionsDropped,
358
472
  executionPlacementsBackfilled: placements.backfilled,
359
473
  executionPlacementSessionsUnreadable: placements.unreadable,
360
474
  askExecutionLanesBackfilled,
361
475
  executionLaneWordsRenamed,
476
+ scenarioPrefixSourcesScanned,
362
477
  askJournalRecordsUpgraded: this.approvalAskStore.upgradeJournalEnvelope(),
363
478
  localArchiveRowFactsBackfilled: archives.rowFactsBackfilled,
364
479
  localArchivesAnonymized: archives.anonymized,
365
480
  localArchivesKeptStamped: archives.keptStamped,
366
481
  localArchivesUnreadable: archives.unreadable,
367
482
  localArchiveSnapshotsRecovered: archives.snapshotsRecovered,
483
+ localArchiveTokensAdopted,
484
+ localArchiveTokensMinted,
368
485
  ...importedLayerRoot,
369
486
  };
370
487
  }
@@ -409,7 +526,6 @@ class LocalBackend {
409
526
  return (this.checkpointStoreInst ??= new LocalCheckpointStore(this.fileBackend.root, {
410
527
  getActiveTaskId: (sessionId) => this.runStore.getActiveTaskId(sessionId),
411
528
  readSessionOwner: async (sessionId) => (await this.sessionStore.headOf(sessionId))?.owner,
412
- claims: this.runStore,
413
529
  }));
414
530
  }
415
531
  checkpoint() {
@@ -417,8 +533,8 @@ class LocalBackend {
417
533
  if (!this.checkpointProbeWired) {
418
534
  this.checkpointProbeWired = true;
419
535
  this.runStore.setCheckpointProbe({
420
- hasPending: async (sessionId) => (await cs.findPendingTokenBySession(sessionId)) !== null,
421
- hasExpired: (sessionId) => cs.hasExpiredBySession(sessionId),
536
+ hasPending: async (sessionId) => (await cs.findPendingTokenBySession(sessionId, undefined, { axis: "run" })) !== null,
537
+ hasExpired: (sessionId) => cs.hasExpiredForRun(sessionId),
422
538
  });
423
539
  }
424
540
  return cs;
@@ -426,7 +542,8 @@ class LocalBackend {
426
542
  checkpointReadView() { return this.checkpointStoreOf(); }
427
543
  checkpointProbeWired = false;
428
544
  checkpointStoreInst;
429
- sessionPolicy() { return this.fileBackend.sessionPolicyStore; }
545
+ sessionPolicy() { return (this.sessionPolicyInst ??= createClientCountedPolicyStore(this.fileBackend.sessionPolicyStore, this.sessionStore)); }
546
+ sessionPolicyInst;
430
547
  fileUsageWindowStore() { return this.fileBackend.usageWindowStore; }
431
548
  fileHistory() { return this.fileBackend.fileHistoryStore; }
432
549
  memoryOptOutGrant() { return undefined; }
@@ -436,15 +553,24 @@ class LocalBackend {
436
553
  outcomeSink() { return this.outcomeSinkInst; }
437
554
  session() { return this.sessionStore; }
438
555
  toolResult() { return this.fileBackend.toolResultStore; }
556
+ engineFileStores() {
557
+ const fb = this.fileBackend;
558
+ return { checkpointStore: fb.checkpointStore, backgroundAgentStore: fb.backgroundAgentStore, mailboxStore: fb.mailboxStore, rosterStore: fb.rosterStore };
559
+ }
439
560
  mysqlPool() { return undefined; }
440
561
  pgPool() { return undefined; }
441
562
  }
442
563
  export function counterStoreLabel(store, kind) {
443
564
  return store ? `shared(${kind ?? "unknown"})` : "in-process";
444
565
  }
445
- function openLocalBackend(config, onWarn, onError) {
566
+ const LOCAL_OPEN_REFUSAL_HEAD = {
567
+ http: (root) => `DB_BACKEND=local cannot open data dir ${root}`,
568
+ "run-local": (root) => `cannot open local data dir ${root}`,
569
+ };
570
+ export function openLocalBackend(config, opts) {
571
+ const { lane, onWarn, onError, observers } = opts;
446
572
  const root = localBackendRootOf(config);
447
- const discloseWarn = onWarn ?? ((msg, meta) => console.warn(msg, meta));
573
+ const discloseWarn = onWarn ?? createLogger().warn;
448
574
  let fileBackend;
449
575
  try {
450
576
  fileBackend = acquireLocalBackendWithWait(() => new FileStorageBackend({
@@ -456,17 +582,23 @@ function openLocalBackend(config, onWarn, onError) {
456
582
  catch (e) {
457
583
  if (e instanceof AdoptionError)
458
584
  throw e;
459
- const tail = buildStoreOpenRefusalTail(e, "http");
460
- throw new Error(`DB_BACKEND=local cannot open data dir ${root}: ${e instanceof Error ? e.message : String(e)}` +
585
+ const tail = buildStoreOpenRefusalTail(e, lane);
586
+ throw new Error(`${LOCAL_OPEN_REFUSAL_HEAD[lane](root)}: ${e instanceof Error ? e.message : String(e)}` +
461
587
  (tail === undefined ? "" : ` ${tail}`));
462
588
  }
463
589
  try {
464
- holdEngineHighWater(fileBackend.root, serviceVersion());
590
+ const physicalRoot = fileBackend.root;
591
+ holdEngineHighWater(physicalRoot, serviceVersion(), (prior) => holdArchiveTokenAdoptionDuty(physicalRoot, prior, archiveTokenAdoptionCarried()));
465
592
  }
466
593
  catch (refusal) {
467
594
  return new RefusedLocalBackend(fileBackend, refusal instanceof Error ? refusal : new Error(String(refusal)));
468
595
  }
469
- return new LocalBackend(fileBackend, config, discloseWarn, onWarn, onError);
596
+ try {
597
+ return new LocalBackend(fileBackend, config, discloseWarn, onWarn, onError, observers);
598
+ }
599
+ catch (failure) {
600
+ return new RefusedLocalBackend(fileBackend, failure instanceof Error ? failure : new Error(String(failure)));
601
+ }
470
602
  }
471
603
  class RefusedLocalBackend {
472
604
  fileBackend;
@@ -505,22 +637,25 @@ class RefusedLocalBackend {
505
637
  outcomeSink() { return this.refused(); }
506
638
  checkpointReadView() { return this.refused(); }
507
639
  session() { return this.refused(); }
640
+ engineFileStores() { return this.refused(); }
641
+ toolResult() { return this.refused(); }
642
+ fileUsageWindowStore() { return this.refused(); }
508
643
  mysqlPool() { return undefined; }
509
644
  pgPool() { return undefined; }
510
645
  }
511
- export function createStoreBackend(config, onWarn, onError) {
646
+ export function createStoreBackend(config, onWarn, onError, observers) {
512
647
  if (config.dbBackend === "local")
513
- return openLocalBackend(config, onWarn, onError);
648
+ return openLocalBackend(config, { lane: "http", onWarn, onError, observers });
514
649
  if (config.dbBackend === "pg") {
515
650
  if (!config.pg)
516
651
  return undefined;
517
652
  const pool = createPgPool(pgPoolOptions(config.pg, config.dbQueryTimeoutMs), onWarn);
518
- return withRetiredSchemaProbe(new PgBackend(pool, config), { dialect: "pg", pool }, { lanes: deployedExecutionLanes(config) });
653
+ return withRetiredSchemaProbe(new PgBackend(pool, config, observers), { dialect: "pg", pool }, { lanes: deployedExecutionLanes(config) });
519
654
  }
520
655
  if (!config.tidb)
521
656
  return undefined;
522
657
  const pool = createTidbPool(config);
523
- return withRetiredSchemaProbe(new TiDBBackend(pool, config), { dialect: "mysql", pool }, { lanes: deployedExecutionLanes(config) });
658
+ return withRetiredSchemaProbe(new TiDBBackend(pool, config, observers), { dialect: "mysql", pool }, { lanes: deployedExecutionLanes(config) });
524
659
  }
525
660
  function withRetiredSchemaProbe(inner, target, executionPlacementSwitch) {
526
661
  const guarded = Object.create(inner);
@@ -531,19 +666,10 @@ function withRetiredSchemaProbe(inner, target, executionPlacementSwitch) {
531
666
  };
532
667
  return guarded;
533
668
  }
534
- function localBackendRootOf(config) {
669
+ export function localBackendRootOf(config) {
535
670
  return config.localDataRoot ?? join(homedir(), ".ai-agent");
536
671
  }
537
- function localDataRootHoldsData(root) {
538
- try {
539
- return readdirSync(root).length > 0;
540
- }
541
- catch (e) {
542
- const code = e.code;
543
- return code !== "ENOENT" && code !== "ENOTDIR";
544
- }
545
- }
546
- export async function openStoreBackendWithFallback(config, logger) {
672
+ export async function openStoreBackendWithFallback(config, logger, observers) {
547
673
  const sqlEngine = config.dbBackend === "mysql" || config.dbBackend === "pg" ? config.dbBackend : undefined;
548
674
  const mayFallback = config.dbBackend === "local" && !config.dbBackendExplicit && !localDataRootHoldsData(localBackendRootOf(config));
549
675
  let backend;
@@ -552,7 +678,7 @@ export async function openStoreBackendWithFallback(config, logger) {
552
678
  const attempt = async () => {
553
679
  let built;
554
680
  try {
555
- built = createStoreBackend(config, (msg, meta) => logger.warn(msg, meta), logger.error === undefined ? undefined : (msg, meta) => logger.error(msg, meta));
681
+ built = createStoreBackend(config, (msg, meta) => logger.warn(msg, meta), logger.error === undefined ? undefined : (msg, meta) => logger.error(msg, meta), observers);
556
682
  inFlight = built;
557
683
  if (built)
558
684
  await built.ensureSchema();
@@ -599,10 +725,15 @@ export function sqlStoreCoordinatesAsUrl(config) {
599
725
  export function buildSqlStoreOpenRefusal(engine, endpoint, waitedMs, err) {
600
726
  const coords = engine === "pg" ? "PG_*" : "MYSQL_*";
601
727
  const detail = err instanceof Error ? err.message : String(err);
728
+ const definite = isDeploymentFaultError(err);
729
+ const answer = definite ? databaseAnswerCodesOf(engine, err) : undefined;
602
730
  const waited = waitedMs > 0 ? `after retrying for ${waitedMs}ms (STORE_LOCK_WAIT_MS)` : "on the first attempt (STORE_LOCK_WAIT_MS=0: no wait)";
603
- return (`DB_BACKEND=${engine}: cannot open the configured ${engine === "pg" ? "PostgreSQL" : "MySQL-protocol"} store at ${endpoint} ${waited} (${detail}) — refusing to boot, because a configured SQL store is never replaced by an in-memory one ` +
731
+ const next = definite
732
+ ? `Next: the database refused the statement for good, so waiting or changing the ${coords} coordinates will not change it — fix what the answer names: a table's storage engine (InnoDB on MySQL), its primary key, foreign-key compatibility, a missing table or the account's grants; `
733
+ : `Next: fix the ${coords} coordinates or the store's reachability (the boot wait is STORE_LOCK_WAIT_MS); `;
734
+ return (`DB_BACKEND=${engine}: cannot open the configured ${engine === "pg" ? "PostgreSQL" : "MySQL-protocol"} store at ${endpoint} ${waited} (${detail}${answer !== undefined ? `; ${answer}` : ""}) — refusing to boot, because a configured SQL store is never replaced by an in-memory one ` +
604
735
  `(SESSION_BACKEND=auto included: sessions, parked runs and every durable record would silently live in memory and vanish on restart). ` +
605
- `Next: fix the ${coords} coordinates or the store's reachability (the boot wait is STORE_LOCK_WAIT_MS); ` +
736
+ next +
606
737
  `or run explicitly in memory with DB_BACKEND=memory (and remove the ${coords} coordinates).`);
607
738
  }
608
739
  //# sourceMappingURL=store-backend.js.map