@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
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * 托管留存的**部署那一半** —— 本仓的表经执行器(`stores-sql/retention-store-sql.ts`)的事务内钩表(K4)参与同一个破坏性事务。
3
- * 执行器是事务属主(开 / 提交 / 回滚),只认 core 的 `{domain, cutoffMs}`;部署的事实(hold、审计行的判定时点三格、认领、十一张部署表、
4
- * 结束了的空间)全在这里,经钩出场:
3
+ * 执行器是事务属主(开 / 提交 / 回滚),只认 core 的 `{domain, cutoffMs}`;部署的事实(hold、审计行的判定时点三格、认领、十三张部署表、
4
+ * 被删附件行的字节哈希)全在这里,经钩出场:
5
5
  * · `holdLock`(首句) —— hold 哨兵行锁读(`retention-lane-store-sql.ts` 的 {@link lockHoldSentinel});
6
- * · `beforeDelete`(终集)—— 删十一张部署表里这批会话的行(下面 {@link deleteDeploymentSessionRows}),并按收到的
7
- * `{sessionId, incarnation}` 自算结束了的空间(一份来源:执行器交来的那批行,不再读第二份);
6
+ * · `beforeDelete`(终集)—— 删十三张部署表里这批会话的行(下面 {@link deleteDeploymentSessionRows}),并收集被删附件行的字节哈希(提交之后交收尾);
8
7
  * · `audit`(提交前末句)—— 破坏性审计行({@link appendDestructiveAuditRow}),判定时点三格是这一次调用的。
9
8
  * 认领判(每只候选根的 `session.beforeCommit`)不在这里:它是会话座的钩(`plugins/session-store-sql.ts` 的 `createSqlSessionWriteHooks`,
10
9
  * `retention-delete` 臂),组合座把同一只交给执行器 —— 一处实现。
11
- * 钩只拿语句面(`query`),从不碰事务本身;库外副作用(回收空间)不在钩里做 —— 执行器提交成功返回之后,组合座把结束了的空间交给 lane。
10
+ * 钩只拿语句面(`query`),从不碰事务本身;库外副作用(附件字节、完成信箱围栏、会话信箱盒、空间)不在钩里做 —— 执行器提交成功返回之后,
11
+ * 组合座把删掉的会话树交给收尾(`session-erase.ts`,与在线删除同一只)。
12
12
  *
13
13
  * 钩表为什么**每次破坏性调用**铸一份(组合座 `plugins/store-backend.ts` 的 `createSqlRetentionExecutor`):审计行的 `{mode, policyDays,
14
14
  * fencingToken}` 与 `checkpoint_ctx` 属主门要的域是**这一次调用**的事实,而 core 的钩签名不带它们(`audit` 收 `{domain, op}` 与回执,
@@ -20,7 +20,7 @@
20
20
  import type { ManagedRetentionCapability, RetentionReceipt } from "@sema-agent/core";
21
21
  import type { SqlDialect, SqlExec } from "./sql-driver.js";
22
22
  import { type RetentionAuditContext } from "./retention-lane-store-sql.js";
23
- import type { EndedSpace } from "../workspace-space.js";
23
+ import type { SessionTreesErased } from "../session-erase.js";
24
24
  /**
25
25
  * lane 消费的**执行器**面 —— core `ManagedRetentionCapability` 的三方法 + 非契约窄读口 `previewRetention`
26
26
  * (audit-only 档的读数源;core 契约无 count 面)+ 声明位。真身 = 组合座 `createSqlRetentionExecutor`。
@@ -50,11 +50,11 @@ export interface RetentionDestructiveInput {
50
50
  audit: RetentionAuditContext;
51
51
  }
52
52
  /**
53
- * 会话树 sweep 的回执 = core 契约的 `RetentionReceipt` + 本仓一位:`endedSpaces` = 本次删掉的会话树里**结束了的空间**(会话 id + 住客空间键 = 会话化身;
54
- * 读不出住客的空化身不算),present-iff 非空。lane 把它交给空间的回收座(与会话删除协调器同一只),缓存卷与快照随空间的终结回收。
53
+ * 会话树 sweep 的回执 = core 契约的 `RetentionReceipt` + 本仓一位:`erased` = 本次删掉的会话树交收尾的那一份(会话 + 删前属主 + 住客、附件字节哈希、
54
+ * 无出处卸载结果数),present-iff 删掉了至少一棵树。lane 把它交给收尾(`session-erase.ts` 的 `createSessionEraseSettler`,与会话删除协调器同一只)。
55
55
  */
56
56
  export type RetentionSessionsReceipt = RetentionReceipt & {
57
- readonly endedSpaces?: readonly EndedSpace[];
57
+ readonly erased?: SessionTreesErased;
58
58
  };
59
59
  /** 装配面必须如实告知的**可选部署表在场性**(+ 执行器的诊断日志座)。 */
60
60
  export interface RetentionExecutorOptions {
@@ -72,6 +72,18 @@ export interface RetentionExecutorOptions {
72
72
  * 纯内存/local 车道压根没有 SQL 留存腿。
73
73
  */
74
74
  taskListTables: boolean;
75
+ /**
76
+ * 收件箱四表(`mailbox` / `mailbox_message` / `mailbox_consumed` / `mailbox_tombstone`)是否在场。**必填,没有默认值**(同上一条理由)。
77
+ * 生产上 `boot/stores.ts` 在**任何 SQL 后端**都无条件 ensure 这四张表并接上 SQL 信箱店 ⇒ 装配层照实传 true;为真时执行体在同一个事务里、
78
+ * 会话行删除之前的最后一腿丢掉被删会话的会话盒(店的 `drop` 同一组语句,`dropMailboxBoxOn`)。
79
+ */
80
+ mailboxTables: boolean;
81
+ /**
82
+ * workflow 完成信箱在不在用(本部署接了完成信箱 = 有 enqueue 方)。**必填,没有默认值**。为真时执行体在事务里给被删会话立清除围栏
83
+ * (信箱 `purge` 的同一句 `writeInboxPurgeFenceOn`),提交之后再清一次事务里落下的迟到行({@link sweepLateCompletionRows});为假时没有 enqueue 方、
84
+ * 也就没有围栏要立(围栏行只由信箱自己的写动词顺手扫,没有信箱就没人扫 ⇒ 不写)。
85
+ */
86
+ completionInbox: boolean;
75
87
  /** 诊断日志座(可选;交给执行器)。 */
76
88
  logger?: {
77
89
  info?(msg: string, meta?: unknown): void;
@@ -81,7 +93,27 @@ export interface RetentionExecutorOptions {
81
93
  /** 执行器会删东西的那几只成员(钩被告知的 `op`;与执行器钩表的同名型同读 core 的键集)。 */
82
94
  type RetentionOp = Exclude<keyof ManagedRetentionCapability, "listRetentionDomains">;
83
95
  /**
84
- * 一次破坏性调用的钩表 + 它收集到的结束了的空间。`call` = 这一次调用(域与判定时点三格)。
96
+ * 删净之后清一次**迟到的完成信箱行**:执行体事务里立的清除围栏提交之前别的连接看不见,事务进行中入队的完成会落行。按「这只会话 ∧ **删前属主** ∧ 入队时刻不晚于 `atMs`」删
97
+ * —— 与清除围栏同一把键(会话 × 属主):别的属主的行(同 id 重登记的别人)一行不碰;同一属主同 id 的下一位住客在围栏的窗内入队即被拒(`workflow_inbox_fence`),
98
+ * 它的行落不下 ⇒ 这一句只可能删到事务进行中漏进来的那几行。发在池上(提交之后);属主一组一句(`owner` 列可空,无主 = `IS NULL`)。
99
+ */
100
+ export declare function sweepLateCompletionRows(db: SqlExec, dialect: SqlDialect, sessions: readonly {
101
+ readonly sessionId: string;
102
+ readonly owner: string | null;
103
+ }[], atMs: number): Promise<void>;
104
+ /**
105
+ * 部署行那一半的钩(`beforeDelete`:删这批会话在部署十三张表里的行)+ 它收集到的附件字节哈希(提交之后交收尾释放)。两种破坏性调用同一只:
106
+ * 留存清扫({@link createRetentionDeploymentHooks})与删一只会话(组合座 `createSqlSessionEraser`)。`domain` = 这批会话的域键(`checkpoint_ctx` 属主门读它)。
107
+ */
108
+ export declare function createSessionRowsHook(dialect: SqlDialect, opts: RetentionExecutorOptions, domain: string): {
109
+ beforeDelete: (txn: SqlExec, rows: readonly {
110
+ readonly sessionId: string;
111
+ readonly incarnation: string | undefined;
112
+ }[]) => Promise<void>;
113
+ attachmentShas: () => readonly string[];
114
+ };
115
+ /**
116
+ * 一次留存破坏性调用的钩表 + 它收集到的附件字节哈希。`call` = 这一次调用(域与判定时点三格)。
85
117
  * 钩的形对齐执行器的 `SqlTransactionHooks`(组合座把 `hooks` 交给执行器时由类型系统对表,形一分叉就编译红)。
86
118
  */
87
119
  export declare function createRetentionDeploymentHooks(dialect: SqlDialect, opts: RetentionExecutorOptions, call: RetentionDestructiveInput): {
@@ -101,26 +133,26 @@ export declare function createRetentionDeploymentHooks(dialect: SqlDialect, opts
101
133
  }, receipt: RetentionReceipt) => Promise<void>;
102
134
  };
103
135
  };
104
- endedSpaces: () => readonly EndedSpace[];
136
+ attachmentShas: () => readonly string[];
105
137
  };
106
138
  /**
107
- * 会话树里**部署表**这一半的删除(`beforeDelete` 钩的身体):十一张部署表,发在执行器事务的连接上,先于执行器删自己的表(K4 次序)。
108
- * 表与相对次序与在线协调器(`boot/session-faces.ts` 的 `purgeSession`)同一条顺序契约;等价性由
109
- * `retention-e21-equivalence-db-integration.test.ts` 的同种子剩余行集断言钉住(逐表比剩余行,与发语句的先后无关)。
139
+ * 会话树里**部署表**这一半的删除(`beforeDelete` 钩的身体):十三张部署表,发在执行器事务的连接上,先于执行器删自己的表(K4 次序)。
140
+ * 两个决定者同调(留存清扫 / 删一只会话的 `eraseSession`)—— 删净会话的行面只有执行器那一段事务体(`session-erase.ts` 头注);表与腿序对
141
+ * `SESSION_TREE_LEGS`(local 执行体按它迭代各店动词)。
110
142
  * 次序的承重理由:
111
143
  * · `task_event` / `task_active` 经 `task_run` 连删 ⇒ 必须排在 `task_run` 删除**之前**;
112
144
  * · `checkpoint_ctx` 的属主门是 `session_meta.owner` 的 EXISTS 子查询 ⇒ 必须在 meta 删除之前(执行器的 meta 删除在本钩之后,天然满足);
113
145
  * · 任务清单:meta 行锁 → item → meta(与 `mutate` 同向的锁序,见该腿注)。
114
146
  *
115
147
  * 🔴 运行账本(task_event / task_active / task_run)**没有**属主门,按 `session_id` 单键删(F-A,2026-08-17
116
- * 合并码扫描;与在线协调器同刀改):`task_run.owner` 是**每次提交的 principal**,与会话主会分叉(无主存量
148
+ * 合并码扫描):`task_run.owner` 是**每次提交的 principal**,与会话主会分叉(无主存量
117
149
  * 会话被带 principal 的壳续聊 ⇒ 新行 owner="default")。行级属主门于是只删得掉半棵树,而 `session_meta`
118
150
  * 在同一事务里随后就删掉 ⇒ 执行器的候选读从此**永远枚举不到**这些行:它们不是
119
151
  * "下一轮再清",是**没有任何清理路径**的孤儿。域隔离不靠这道门承担 —— `ids` 已经是**本域** session_meta
120
152
  * 里选出来并 `FOR UPDATE` 锁住的终集,行级门去掉之后越域仍然结构上不可能。
121
153
  *
122
- * `checkpoint_ctx` 的属主门用**域键**(`domain`,`""` = 无主桶)而不是会话的 owner 值 —— 理由逐字见执行器 `purgeSessionTrees` 头注「有意改写」段。
154
+ * `checkpoint_ctx` 的属主门用**域键**(`domain`,`""` = 无主桶)而不是会话的 owner 值 —— 理由逐字见执行器 `purgeSessionTrees` 头注「属主门读域键」段。
123
155
  */
124
- export declare function deleteDeploymentSessionRows(txn: SqlExec, dialect: SqlDialect, domain: string, ids: readonly string[], opts: RetentionExecutorOptions): Promise<void>;
156
+ export declare function deleteDeploymentSessionRows(txn: SqlExec, dialect: SqlDialect, domain: string, ids: readonly string[], opts: RetentionExecutorOptions): Promise<readonly string[]>;
125
157
  export {};
126
158
  //# sourceMappingURL=retention-deployment.d.ts.map
@@ -1,7 +1,9 @@
1
1
  import { TASK_LIST_ITEM_TABLE, TASK_LIST_META_TABLE, taskListKeyFor } from "./task-list-store-sql.js";
2
2
  import { USER_INPUT_ACCEPTANCE_TABLE } from "./user-input-ledger-sql.js";
3
+ import { deleteSessionApprovalRows } from "./approval-ask-store-sql.js";
3
4
  import { retentionDomainWhere, retentionIdSet } from "./retention-sql.js";
4
5
  import { appendDestructiveAuditRow, lockHoldSentinel } from "./retention-lane-store-sql.js";
6
+ import { writeInboxPurgeFenceOn } from "./workflow-run-store-sql.js";
5
7
  function auditActionOf(op) {
6
8
  switch (op) {
7
9
  case "expireCheckpoints":
@@ -12,22 +14,37 @@ function auditActionOf(op) {
12
14
  return "deleted_tool_results";
13
15
  }
14
16
  }
15
- function endedSpacesOf(rows) {
16
- return rows.flatMap((r) => (r.incarnation === undefined ? [] : [{ sessionId: r.sessionId, spaceKey: r.incarnation }]));
17
+ export async function sweepLateCompletionRows(db, dialect, sessions, atMs) {
18
+ const byOwner = new Map();
19
+ for (const { sessionId, owner } of sessions)
20
+ byOwner.set(owner, [...(byOwner.get(owner) ?? []), sessionId]);
21
+ for (const [owner, ids] of [...byOwner].sort(([a], [b]) => String(a).localeCompare(String(b)))) {
22
+ const s = retentionIdSet(dialect, "session_id", [...ids].sort(), 1);
23
+ const next = (k) => (dialect === "mysql" ? "?" : `$${s.params.length + k}`);
24
+ const ownerSql = owner === null ? "owner IS NULL" : `owner = ${next(1)}`;
25
+ const at = next(owner === null ? 1 : 2);
26
+ await db.query(`DELETE FROM workflow_completion_inbox WHERE ${s.sql} AND ${ownerSql} AND enqueued_at_ms <= ${at}`, [...s.params, ...(owner === null ? [] : [owner]), atMs]);
27
+ }
28
+ }
29
+ export function createSessionRowsHook(dialect, opts, domain) {
30
+ const shas = [];
31
+ return {
32
+ beforeDelete: async (txn, rows) => {
33
+ shas.push(...(await deleteDeploymentSessionRows(txn, dialect, domain, rows.map((r) => r.sessionId), opts)));
34
+ },
35
+ attachmentShas: () => shas,
36
+ };
17
37
  }
18
38
  export function createRetentionDeploymentHooks(dialect, opts, call) {
19
39
  if (!call.audit) {
20
40
  throw new Error(`retention: refusing a destructive call in domain ${JSON.stringify(call.domain)} with no audit context — every destructive retention ` +
21
41
  `transaction must persist its {mode, policyDays, fencingToken} alongside the deletion. Pass \`audit\` from the sweep lane's current round.`);
22
42
  }
23
- const ended = [];
43
+ const rowsHook = createSessionRowsHook(dialect, opts, call.domain);
24
44
  const hooks = {
25
45
  retention: {
26
46
  holdLock: async (txn, at) => (await lockHoldSentinel(txn, dialect, at.domain)) ? "held" : "proceed",
27
- beforeDelete: async (txn, rows) => {
28
- await deleteDeploymentSessionRows(txn, dialect, call.domain, rows.map((r) => r.sessionId), opts);
29
- ended.push(...endedSpacesOf(rows));
30
- },
47
+ beforeDelete: rowsHook.beforeDelete,
31
48
  audit: async (txn, at, receipt) => appendDestructiveAuditRow(txn, dialect, {
32
49
  domain: at.domain,
33
50
  action: auditActionOf(at.op),
@@ -38,7 +55,7 @@ export function createRetentionDeploymentHooks(dialect, opts, call) {
38
55
  }),
39
56
  },
40
57
  };
41
- return { hooks, endedSpaces: () => ended };
58
+ return { hooks, attachmentShas: rowsHook.attachmentShas };
42
59
  }
43
60
  export async function deleteDeploymentSessionRows(txn, dialect, domain, ids, opts) {
44
61
  const q = (mysql, pg) => (dialect === "mysql" ? mysql : pg);
@@ -55,11 +72,18 @@ export async function deleteDeploymentSessionRows(txn, dialect, domain, ids, opt
55
72
  const s = set("session_id", 1);
56
73
  await txn.query(`DELETE FROM task_run WHERE ${s.sql}`, [...s.params]);
57
74
  }
75
+ await deleteSessionApprovalRows(txn, dialect, ids);
58
76
  {
59
77
  const s = set("checkpoint_ctx.session_id", 1);
60
78
  const w = retentionDomainWhere(dialect, "sm.owner", domain, 2);
61
79
  await txn.query(`DELETE FROM checkpoint_ctx WHERE ${s.sql} AND EXISTS (SELECT 1 FROM session_meta sm WHERE sm.session_id = checkpoint_ctx.session_id AND ${w.sql})`, [...s.params, ...w.params]);
62
80
  }
81
+ let attachmentShas = [];
82
+ if (opts.taskAttachmentTable) {
83
+ const s = set("session_id", 1);
84
+ const { rows } = await txn.query(`SELECT sha256 FROM task_attachment WHERE ${s.sql} FOR UPDATE`, s.params);
85
+ attachmentShas = rows.map((r) => String(r.sha256));
86
+ }
63
87
  for (const [table, col] of [
64
88
  ["resume_anchor", "session_id"],
65
89
  ["approval_exemption", "session_id"],
@@ -81,8 +105,15 @@ export async function deleteDeploymentSessionRows(txn, dialect, domain, ids, opt
81
105
  }
82
106
  }
83
107
  {
108
+ if (opts.completionInbox) {
109
+ const owner = domain === "" ? null : domain;
110
+ const now = Date.now();
111
+ for (const id of [...ids].sort())
112
+ await writeInboxPurgeFenceOn(txn, dialect, id, owner, now);
113
+ }
84
114
  const s = set("session_id", 1);
85
115
  await txn.query(`DELETE FROM workflow_completion_inbox WHERE ${s.sql}`, s.params);
86
116
  }
117
+ return attachmentShas;
87
118
  }
88
119
  //# sourceMappingURL=retention-deployment.js.map
@@ -0,0 +1,11 @@
1
+ /** SQL 腿的粗筛:闭集标签各一个 `LIKE` 前缀(`<tag%`;标签名里没有 `%` / `_` / 转义字符)。粗筛中、精判不中的行(`<system-reminderish …`)不动。 */
2
+ export declare const RUN_PREVIEW_COARSE_PREFIXES_M45: readonly string[];
3
+ /** M45 选不选这一列值:以闭集开标签起头。 */
4
+ export declare function startsWithInjectedOpenTagM45(value: string): boolean;
5
+ /**
6
+ * M45 对这一列值的新值:不选 ⇒ `undefined`(不动);选中 ⇒ 剥到不动点,仍以开标签起头 ⇒ `""`。
7
+ * 终止:第一遍之后的值不长于 120;此后每一遍要么逐字节不变(不动点)要么严格变短(剥块 / trim / 截都只删,脱敏对自己的产出不再命中),
8
+ * 所以遍数不超过「首遍结果的长度 + 1」—— 循环上界就写这个数,走出循环的那一臂不可达。
9
+ */
10
+ export declare function normalizedRunPreviewM45(value: string): string | undefined;
11
+ //# sourceMappingURL=run-preview-m45.d.ts.map
@@ -0,0 +1,19 @@
1
+ import { INJECTED_BLOCK_TAGS, buildRunObjectivePreview } from "../user-authored-text.js";
2
+ const INJECTED_OPEN_TAG_HEAD_M45 = new RegExp(`^<(?:${INJECTED_BLOCK_TAGS.join("|")})(?=[\\s>/]|$)`);
3
+ export const RUN_PREVIEW_COARSE_PREFIXES_M45 = INJECTED_BLOCK_TAGS.map((tag) => `<${tag}%`);
4
+ export function startsWithInjectedOpenTagM45(value) {
5
+ return INJECTED_OPEN_TAG_HEAD_M45.test(value);
6
+ }
7
+ export function normalizedRunPreviewM45(value) {
8
+ if (!startsWithInjectedOpenTagM45(value))
9
+ return undefined;
10
+ let cur = buildRunObjectivePreview(value);
11
+ for (let pass = 0, bound = cur.length + 1; pass <= bound; pass += 1) {
12
+ const next = buildRunObjectivePreview(cur);
13
+ if (next === cur)
14
+ return startsWithInjectedOpenTagM45(cur) ? "" : cur;
15
+ cur = next;
16
+ }
17
+ return "";
18
+ }
19
+ //# sourceMappingURL=run-preview-m45.js.map
@@ -2,15 +2,22 @@ import type { TaskStatus } from "@sema-agent/core";
2
2
  import type { Pool as MySqlPool } from "mysql2/promise";
3
3
  import type { Pool as PgPool } from "pg";
4
4
  import { type UsageRow } from "../usage-analytics.js";
5
- import { type ClaimFenced, type CreateRunOutcome, type FencedRun, type NewRunMeta, type RunIdemBinding, type RunListQuery, type RunRecord, type SessionSummary, type RunEvent, type PersistedTaskResult, type LatestRunRef, type SettledLegMemoryObservation } from "./store-contracts.js";
5
+ import { type RunStallWiring, type ClaimFenced, type CreateRunOutcome, type FencedRun, type NewRunMeta, type RunIdemBinding, type RunListQuery, type RunRecord, type RunEvent, type PersistedTaskResult, type LatestRunRef, type SettledLegMemoryObservation } from "./store-contracts.js";
6
6
  import { type SqlDriver, type SqlTxConn } from "./sql-driver.js";
7
7
  import type { LedgerEventType } from "../trace/ledger-events.js";
8
8
  import { type SpaceCommitClaim, type SpaceCommitReading, type SpaceCommitState } from "../workspace-space-commit.js";
9
- export type { RunRecord, SessionSummary, RunEvent, LatestRunRef } from "./store-contracts.js";
9
+ export type { RunRecord, RunEvent, LatestRunRef } from "./store-contracts.js";
10
+ /**
11
+ * 一次性迁移 **M44 改写半场**读 `task_run.result` 的那一口(窗口见 `plugins/one-time-migrations.ts` 登记表;随 M44 一起删):与店的读腿同一只解码
12
+ * ({@link decodeResultColumn},投影须经 `jsonColumnText`);读不出 ⇒ `"unreadable"`(迁移跳过那一行、码列不动 —— 店的读腿对它照旧响亮拒)。
13
+ */
14
+ export declare function decodeRunResultCellM44(v: unknown, taskId: string): PersistedTaskResult | null | "unreadable";
10
15
  export declare class SqlRunStore {
11
16
  readonly db: SqlDriver;
12
- /** `db` 公开只读:会话认领住在这只池背后的库里,写在认领栅栏里的店(workflow 子代决定行)读写都走它 —— 那只店的池只有这一处来源。 */
13
- constructor(db: SqlDriver);
17
+ private readonly stall;
18
+ /** `db` 公开只读:会话认领住在这只池背后的库里,写在认领栅栏里的店(workflow 子代决定行)读写都走它 —— 那只店的池只有这一处来源。
19
+ * `stall` = 落死亡判决的窗与计数(构造时拿到;生产装配 = `store-backend.ts` 递活配置的 getter,见 {@link RunStallWiring})。 */
20
+ constructor(db: SqlDriver, stall?: RunStallWiring);
14
21
  /** Pick the dialect's SQL text. Both statements stay written out at the call site ON PURPOSE. */
15
22
  private q;
16
23
  /** Dup-key classification — single owner in `sql-errors.ts` ([ref] P1-①; the old local form read
@@ -19,8 +26,10 @@ export declare class SqlRunStore {
19
26
  /** JSON column binding: TiDB stores the string verbatim; PG goes through the protocol-safe envelope
20
27
  * (a raw NUL byte in an event payload would otherwise throw 22P05 mid-write). */
21
28
  private json;
22
- /** Run statements atomically; rolls back on failure. */
29
+ /** Run statements atomically on a pooled connection; rolls back on failure. */
23
30
  private tx;
31
+ /** Run statements atomically on a connection the caller already holds (`createRun`'s claim-conflict arm: never borrow a second one); rolls back on failure. */
32
+ private txOn;
24
33
  /**
25
34
  * Create a run, but only if the session has no other active run (double-text guard) and no submission key
26
35
  * of this request already names a row (submission idempotency) — **atomic win or observe**.
@@ -52,6 +61,28 @@ export declare class SqlRunStore {
52
61
  * 续跑与 wake 复用 checkpoint 的会话 —— 所以零行只在「受理之后被删」这一种竞争里出现。
53
62
  */
54
63
  createRun(taskId: string, sessionId: string, owner: string | null, instanceId: string, meta?: NewRunMeta): Promise<CreateRunOutcome>;
64
+ /** {@link createRun} 的一次建行事务(在调用方借来的那只连接上;结局四形之一,失败回滚后原样抛)。 */
65
+ private createRunOn;
66
+ /**
67
+ * 认领冲突的持有者落判决(`createRun` 唯一调用;同一只连接,自动提交读 → 单行落判决事务):持有者行 `due` ⇒ 落(命中 ⇒ `true`,调用方再认领一次);
68
+ * `live` / 停驻 / 终局 / 表外词 / 行不在 ⇒ `false`(照答冲突)。只读判决要的两列(不过结果列的解码:一条坏结果行不许把 409 变成 500)。
69
+ * 落判决写失败 ⇒ F 类留痕、`false`(照答冲突,收割器下一拍补)。
70
+ */
71
+ private settleDueHolderOn;
72
+ /**
73
+ * 🔴 **死亡判决的那一句**(收割器与两处单行落判决共用一只语句构造):`running ∧ updated_at < cutoff` ⇒ `failed` / `result = NULL` / {@link RUN_STALLED_ERROR} /
74
+ * `error_code = run.stalled`,同一事务放认领。两种作用域:
75
+ * · **全表**(`taskId` 缺席,收割器):放掉每条非活非停驻行的认领 + 孤儿认领(语义同修前);
76
+ * · **单行**(`AND task_id = ?`,观察口 / 认领冲突):只有命中 1 行才 `DELETE FROM task_active WHERE task_id = ?` —— 心跳或停驻抢先赢了 CAS ⇒ 0 行 ⇒ 认领不动。
77
+ * 取锁序 `task_run` → `task_active`(与栅栏 / 终局写 / 收割同序)。调用方持事务(`conn` 已 `begin`)。交回命中行数。
78
+ */
79
+ private landStallVerdicts;
80
+ /**
81
+ * 🔴 **观察口**(落判决的三处之一):调用方**已经读到、已经过了属主门**的那条行(授权在判决之前:外人拿着别人的 run id 得 404 且什么都不变)。
82
+ * 判决不是 `due` ⇒ 原样交回、零 I/O;`due` ⇒ 单行落判决(一个事务)⇒ 事务提交之后**当前读**一次(自动提交 SELECT,不在可能拿着旧快照的事务里读)⇒ 交回。
83
+ * 落判决写失败 ⇒ F 类留痕({@link RUN_STALL_VERDICT_UNLANDED_TAG})+ 行原样交回(收割器下一拍补)。谁调它 = 路由闭集表 `RUN_STATE_FACES`(`http/owner-access.ts`)。
84
+ */
85
+ observeRun(row: RunRecord): Promise<RunRecord>;
55
86
  /** run 行预览的**写一次补写**(腿上装着 prompt 屏时建行不写预览,引擎交付可写的那一份之后补;律的属主 = `run-acceptance.ts`):
56
87
  * 列仍是 NULL(没建过预览)才写 —— 建行写过的、已经补过的一律不动,所以补写永远盖不掉任何一份既有预览。不碰 `updated_at`(预览不是状态变化,
57
88
  * 收割与列表的时序都不该因它移动)。行不在 ⇒ 0 行,无事。PG 臂过 `pgSanitizeText`(与建行写同一条:预览是模型可控标量)。 */
@@ -81,8 +112,10 @@ export declare class SqlRunStore {
81
112
  * running instance calls this on a timer so a long-but-alive turn (e.g. a subagent that emits no
82
113
  * parent events for minutes) is not mistaken for a dead instance.
83
114
  * `owner` is the single-DB-fleet null-safe owner guard (see {@link requestCancel}); the heartbeat is
84
- * always issued by the owning instance with the run's own owner, so this only narrows, never blocks. */
85
- heartbeat(taskId: string, owner: string | null): Promise<void>;
115
+ * always issued by the owning instance with the run's own owner, so this only narrows, never blocks.
116
+ * 🔴 **交回「行还在 running 吗」**:持有者拿它决定停不停自己的腿 —— 行已被判死(观察口 / 认领冲突 / 收割器)⇒ `false` ⇒ 持有者中止(判死一条行拦不住它的执行者,
117
+ * 这一答补上那一半)。刷新命中 ⇒ `true`;没命中 ⇒ 再读一次状态(属主不符的心跳今天就刷不上,它的行由收割器按窗判;只在行真的不在跑时才答 `false`)。 */
118
+ heartbeat(taskId: string, owner: string | null): Promise<boolean>;
86
119
  /** Append one event. A single INSERT — `updated_at` (liveness) is owned by `heartbeat`, so there
87
120
  * is no second statement to keep atomic here. */
88
121
  appendEvent(taskId: string, seq: number, type: LedgerEventType, data: unknown): Promise<void>;
@@ -224,12 +257,12 @@ export declare class SqlRunStore {
224
257
  /**
225
258
  * [ref] —— 这个会话**最近一条腿**的窄指针(`/mcp` 面板的 `lastLegMcp` 与任何「上一条 run 是谁」的读面共用)。
226
259
  *
227
- * 排序口径与 {@link listSessions} 的 `rn=1` 窗函数**逐字同一句**(`created_at DESC, task_id DESC`)——
260
+ * 排序口径与会话店列表投影的 `rn=1` 窗函数**逐字同一句**(`created_at DESC, task_id DESC`,`session-store-sql.ts` 的 `selectListRows`)——
228
261
  * 两处答的是同一个问题「哪一条是最新的」,口径分叉会让列表面的 `lastRunId` 与本读口指向不同的 run。
229
262
  * 走的也是同一条索引路径(`idx_task_run_session_status` 的 `session_id` 前缀),所以**不新加索引**:
230
263
  * 会话内行数有界,前缀定位之后的排序只在这一小撮行上。
231
264
  *
232
- * 两方言只差占位符(动态子句为零,不像 listRuns/listSessions 那样需要各自的构造器臂)。
265
+ * 两方言只差占位符(动态子句为零,不像 listRuns 那样需要各自的构造器臂)。
233
266
  */
234
267
  latestRunForSession(sessionId: string): Promise<LatestRunRef | undefined>;
235
268
  /**
@@ -240,24 +273,6 @@ export declare class SqlRunStore {
240
273
  * 结果列走 {@link rowToRun} 同一只解码口与同一个失败方向(读不出 ⇒ 拒,不把一条结了的腿读成「没有观测」)。
241
274
  */
242
275
  latestMemoryObservationForSession(sessionId: string): Promise<SettledLegMemoryObservation | undefined>;
243
- /** GET /v1/sessions (CC /resume picker): DISTINCT sessions newest-first by last activity, keyset-paginated on
244
- * (last_activity, session_id). Aggregates task_run by session_id — one window pass picks the latest run per
245
- * session (rn=1) for the preview/status and rolls up first/last/count. Owner-scoped when set (the per-user view).
246
- * Bounded by per-tenant data today; a denormalized session table is the optimization if it ever goes hot.
247
- *
248
- * 🔴 Same builder divergence as {@link listRuns} — see its header note. */
249
- listSessions(opts: {
250
- owner?: string;
251
- includeUnowned?: boolean;
252
- cursor?: {
253
- lastActivityAt: string;
254
- sessionId: string;
255
- };
256
- limit: number;
257
- q?: string;
258
- }): Promise<SessionSummary[]>;
259
- /** Shared row→summary mapper for listSessions (byte-identical between dialects). */
260
- private rowToSession;
261
276
  /**
262
277
  * E21 (§0.5 session delete) — purge the service-owned RUNS LEDGER for one session: task_event (the replayable
263
278
  * event log), task_active (the single-active-run claim), and task_run (the run rows). Idempotent — returns
@@ -266,46 +281,18 @@ export declare class SqlRunStore {
266
281
  * their stores — this method owns only the runs-ledger tables. Done in one TX so a partial purge can't leak a
267
282
  * task_active claim with no run row (a permanent session lock).
268
283
  *
269
- * 🔴 Scoped by `session_id` ALONE — deliberately NO per-row owner guard (F-A, 2026-08-17 合并码扫描;同一条
270
- * 判断 `boot/session-faces.ts` 的 anchors 腿早就写过,run 账本这条腿当时没跟上):`task_run.owner` 是**每次
271
- * 提交的 principal**,它与会话的 canonical owner 会分叉 —— 一条 `session_meta.owner = NULL` 的存量会话被
272
- * 带 principal 的壳续聊后(REQUIRE_PRINCIPAL=false),新 run 行的 owner 是 `"default"`,而 DELETE 路由递进来
273
- * 的是**会话行**的 owner(NULL)。行级 null-safe 属主门(`<=>` / `IS NOT DISTINCT FROM`)于是只删得掉 NULL
274
- * 那批,具名那批连同它们的 task_event 全部存活 —— 而 `session_meta` 已经删了,留存腿的 sessionCandidates
275
- * 再也枚举不到这棵树 ⇒ 孤儿行**没有任何清理路径**,路由却回 `{deleted:true}`。那就是一次**报成成功的
276
- * 右删失效**(anchors 腿的注逐字写着这句)。删除决策的属主门在**路由层**(DELETE /v1/sessions/:id 先
277
- * 经会话店唯一的按 id 读 `headOf` 取属主再比对 scope,fleet-wide 臂同门),本方法的唯一生产调用点是那条路由后面的 purge 协调器。
284
+ * 🔴 Scoped by `session_id` ALONE — deliberately NO per-row owner guard (F-A, 2026-08-17 合并码扫描):`task_run.owner` 是**每次提交的 principal**,与会话的
285
+ * canonical owner 会分叉(无主存量会话被带 principal 的壳续聊 ⇒ 新 run 行 owner `"default"`),行级属主门只删得掉一半、把具名行留成孤儿而路由答 `{deleted:true}`。
278
286
  *
279
- * 🔴 **化身围栏**(`expectedSessionOwner`;codex 交叉复审 R1-[high],验真后修)—— 属主门下来了,但会话
280
- * **身份**必须在同一个事务里重新确认。会话 id 由调用方自选、且删除之后**可被别人重新登记**
281
- * (`register` 是 INSERT … ON DUPLICATE KEY / ON CONFLICT,老行没了就是一条新行,新 owner):于是
282
- * 「路由已按 `headOf` 读到的属主验权」这句话在两只并发 purge 交错时会过期 —— A 与 A' 同时通过属主门,A' 跑完整条
283
- * purge 把 meta 删掉,租户 B 用同一个 uuid 重新登记并跑完一次 run,慢半拍的 A 才走到这里 ⇒ 按 session_id
284
- * 单键删就把 **B 的**行删了(修前的行级属主门恰好挡住这一形,因为 B 的行 owner≠A 的会话主)。
285
- * ⇒ 事务头部 `SELECT owner FROM session_meta WHERE session_id = ? FOR UPDATE`,行不在或 owner 与路由验过的
286
- * 那一位不符 ⇒ **一行不删**回 `{removed:0}`(诚实:属于调用方的那个化身已经不在了;协调器据此回
287
- * `{deleted:false}`,不会拿别人的行数冒充成功)。锁序与留存腿逐字一致(先 session_meta 后 task_*),
288
- * 不引入新的死锁环;锁在本事务提交时释放,其后的 checkpoint / history 两腿各自带属主门。
289
- * ⚠️ 本围栏只有 SQL 双生做得到 —— File/Memory 孪生的账本里没有 session_meta(local 车道的会话表在另一只
290
- * 店里),它们的同名参数因此只作**契约对齐**用,真围栏由协调器那条 pre-delete 复读 + local 数据根的
291
- * 独占 BootLock(一个数据根恒一个进程)承担;逐字见 memory-run-store 的同名方法注。
292
- *
293
- * 🔴 Active-run re-assert INSIDE the TX (adversarial-review LOW — TOCTOU): the route's pre-purge `getActiveTaskId`
294
- * 409 check is a non-transactional SELECT — a concurrent createRun can claim `task_active(session_id)` in the
295
- * window between that check and this purge, then have its LIVE rows deleted here. So we re-take the no-active-run
296
- * invariant transactionally: `SELECT task_id FROM task_active WHERE session_id=? FOR UPDATE` at the TOP of the TX.
297
- * `FOR UPDATE` serializes against createRun's unique-key INSERT on the SAME session_id (createRun either already
298
- * holds the row — we see it and abort — or blocks on our lock until commit, then fails its own unique-key claim
299
- * against the now-absent row). If a claim exists we return `{ active }` (the route maps it to 409) and delete
300
- * NOTHING. Returns `{ removed }` on a clean purge.
287
+ * **不判属主、不判认领**(会话三态,`src/session-deletion.ts`):本方法唯一的生产调用点是删除协调器,它在**围栏**之后才调 —— 围栏在根行锁里判过属主与「没有认领」、
288
+ * 写下了在删令牌;在删期间规则 L(认领事务锁根行读令牌)不让认领落下,于是这里没有可判的东西。协调器在调之前问过令牌仍是它的(被接管 ⇒ 不调)。
289
+ * 此前这里在同一事务里锁根行复核属主、锁定读 `task_active` 判认领 —— 删除路四处判活中的两处;判过之后到删行之前不挡认领,正是会话行被重建成无主行那一窗的根。
301
290
  *
302
291
  * 🔴 The multi-table DELETEs are dialect-divergent SQL FORMS (not just placeholders): TiDB's
303
292
  * `DELETE te FROM te JOIN tr ON …` vs PG's `DELETE FROM te USING tr WHERE …`.
304
293
  */
305
- deleteBySession(sessionId: string, expectedSessionOwner: string | null): Promise<{
294
+ deleteBySession(sessionId: string): Promise<{
306
295
  removed: number;
307
- } | {
308
- active: string;
309
296
  }>;
310
297
  /** Per-door usage rollup (center systems-UI input): COUNT by (source,status) since a cutoff. Reads the
311
298
  * denormalized columns only — no JSON parsing; served by full scan bounded by created_at (small windows). */
@@ -331,12 +318,10 @@ export declare class SqlRunStore {
331
318
  /** Events with seq strictly greater than `afterSeq` (use 0 for the whole stream). */
332
319
  getEvents(taskId: string, afterSeq: number): Promise<RunEvent[]>;
333
320
  /**
334
- * Mark stale `running` rows as failed (best-effort recovery for runs whose instance died), then
335
- * free any active-run claim whose run is no longer running (reaped here, or a terminal whose
336
- * DELETE was lost). `olderThanMs` must exceed the longest expected gap between a run's events
337
- * (each event refreshes `updated_at`), else a healthy slow run is wrongly reaped.
321
+ * 收割器(落判决的三处之一,全表形):心跳过期的 `running` 行翻 `failed`(`run.stalled`)、放掉终局行与孤儿的认领 —— 语句与观察口 / 认领冲突同一只
322
+ * ({@link landStallVerdicts})。窗读构造时拿到的那只 getter(`REAP_RUN_STALE_SEC`,判活窗只有这一个来源)。
338
323
  */
339
- reapStale(olderThanMs: number): Promise<number>;
324
+ reapStale(): Promise<number>;
340
325
  /**
341
326
  * Durable F4 expiry: an approval parked beyond `olderThanMs` (the approval TTL) was never answered → fail
342
327
  * the run + RELEASE its task_active (unlock the session). Mirrors the checkpoint reaper's CAS-expire (≈ deny);
@@ -352,6 +337,9 @@ export declare class SqlRunStore {
352
337
  * opening a two-runs-one-session window. The NOT-EXISTS-pending guard (same shape as
353
338
  * failSuspendedWithExpiredCheckpoint) means this only ever reaps a row whose checkpoint is already gone/expired.
354
339
  *
340
+ * 卡与 run 按**归属列** `checkpoint.host_session_id` 连(兑现这张卡的那条 run 的会话;cascade 的级上卡归调用方的会话 —— 卡自己的 `session_id`
341
+ * 是级的对话,连不上这条 run)。两条收割腿与本地孪生的探针同一读法(`plugins/checkpoint-index-columns.ts` 的 `hostSessionOf`)。
342
+ *
355
343
  * 🔴 Alias-qualification divergence (kept EXPLICIT, never "fixed" to match): TiDB's SET clause QUALIFIES with
356
344
  * `tr.` (`SET tr.status = …`); PG's SET clause must NOT be alias-qualified (`SET status = …` — PG rejects
357
345
  * `SET a.col`). Both WHERE clauses use the `tr.` alias.
@@ -378,10 +366,10 @@ export declare class SqlRunStore {
378
366
  }
379
367
  /** MySQL-protocol (TiDB) binding — historical class name + ctor shape preserved. */
380
368
  export declare class TiDBRunStore extends SqlRunStore {
381
- constructor(pool: MySqlPool);
369
+ constructor(pool: MySqlPool, stall?: RunStallWiring);
382
370
  }
383
371
  /** PostgreSQL binding — historical class name + ctor shape preserved. */
384
372
  export declare class PgRunStore extends SqlRunStore {
385
- constructor(pool: PgPool);
373
+ constructor(pool: PgPool, stall?: RunStallWiring);
386
374
  }
387
375
  //# sourceMappingURL=run-store-sql.d.ts.map