@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,5 +1,6 @@
1
1
  import { admitSessionPlacement, compareOccupants } from "@sema-agent/core";
2
2
  import { placementCapabilityOf } from "./session-placement.js";
3
+ import { birthFaceOf, withdrawFaceOf } from "./session-birth.js";
3
4
  export class CachingSessionStore {
4
5
  inner;
5
6
  cache = new Map();
@@ -8,13 +9,17 @@ export class CachingSessionStore {
8
9
  timer;
9
10
  onStaleHit;
10
11
  headOf;
12
+ deletionHeadOf;
11
13
  register;
14
+ registerWithReceipt;
15
+ withdrawBirth;
12
16
  listSessions;
13
17
  listSessionRows;
14
18
  fork;
15
19
  forkTo;
16
20
  executionPlacement;
17
21
  deleteSession;
22
+ sessionDeletion;
18
23
  sessionSummaryOf;
19
24
  writeSessionRowCells;
20
25
  setTitleIfNull;
@@ -55,8 +60,24 @@ export class CachingSessionStore {
55
60
  if (typeof innerPlacementOf === "function")
56
61
  this.placementOf = (id) => innerPlacementOf.call(inner, id);
57
62
  const ownerAware = inner;
63
+ if (ownerAware.deletionHeadOf)
64
+ this.deletionHeadOf = ownerAware.deletionHeadOf.bind(inner);
58
65
  if (ownerAware.register)
59
66
  this.register = ownerAware.register.bind(inner);
67
+ const birth = birthFaceOf(inner);
68
+ if (birth !== undefined)
69
+ this.registerWithReceipt = birth.registerWithReceipt;
70
+ const withdraw = withdrawFaceOf(inner);
71
+ if (withdraw !== undefined) {
72
+ this.withdrawBirth = async (b, ownTaskId) => {
73
+ try {
74
+ return await withdraw.withdrawBirth(b, ownTaskId);
75
+ }
76
+ finally {
77
+ this.evict(b.sessionId);
78
+ }
79
+ };
80
+ }
60
81
  if (ownerAware.listSessions)
61
82
  this.listSessions = ownerAware.listSessions.bind(inner);
62
83
  if (ownerAware.listSessionRows)
@@ -130,10 +151,28 @@ export class CachingSessionStore {
130
151
  this.sweepStagingSessions = ownerAware.sweepStagingSessions.bind(inner);
131
152
  if (ownerAware.deleteSession) {
132
153
  const del = ownerAware.deleteSession.bind(inner);
133
- this.deleteSession = async (sessionId, owner) => {
134
- const removed = await del(sessionId, owner);
135
- this.evict(sessionId);
136
- return removed;
154
+ this.deleteSession = async (sessionId, owner, token, legs) => {
155
+ try {
156
+ return await del(sessionId, owner, token, legs);
157
+ }
158
+ finally {
159
+ this.evict(sessionId);
160
+ }
161
+ };
162
+ }
163
+ if (ownerAware.sessionDeletion) {
164
+ const face = ownerAware.sessionDeletion;
165
+ this.sessionDeletion = {
166
+ fence: async (sessionId, owner, fenceOpts) => {
167
+ try {
168
+ return await face.fence(sessionId, owner, fenceOpts);
169
+ }
170
+ finally {
171
+ this.evict(sessionId);
172
+ }
173
+ },
174
+ holds: (sessionId, token) => face.holds(sessionId, token),
175
+ pending: () => face.pending(),
137
176
  };
138
177
  }
139
178
  const interval = opts.sweepIntervalMs ?? Math.min(this.ttlMs || 60_000, 60_000);
@@ -22,7 +22,7 @@
22
22
  * (`approval_card`,不是 facet —— 存一份 facet 会在 core 改表那天陈旧),谓词由那两张表机械生成({@link CHECKPOINT_FACET_CASES} → {@link CHECKPOINT_FACET_SQL}),
23
23
  * 逐行与 `facetOf` 同答(`test/checkpoint-index-columns.test.ts` B 节、db 组同名文件)。本仓不写第二份判据:没有手写门型表、没有手写卡词。
24
24
  * 卡那一侧不带「是不是审批门」的合取:列上的卡只在审批门上非 NULL(同一只派生),与 core 对生成谓词的成文形逐字相同。未登记门型 / NULL 门型 ⇒ 表达式 NULL(无 ELSE)。
25
- * 拒扫腿的选行序见 {@link CHECKPOINT_SWEEP_ORDER_SQL}:卡列有词的行先取 —— 混跑窗里旧副本写的行卡列为空,它们的 facet 要等下一次起服的 M29 才确证。
25
+ * 拒扫腿的选行序与游标谓词见 {@link CHECKPOINT_SWEEP_ORDER_SQL} / {@link checkpointSweepAfterSql}:截止、token 两键;拒扫按游标轮转走过期集,没有哪一行能替它后面的行占住窗。
26
26
  *
27
27
  * ## 谓词什么时候开
28
28
  * core 的迁移条款:存量行的卡列由同一只函数回填,并且只在部署自己记下「回填跑完了」之后才开生成谓词。本仓的记录 = 起服序列:M29 跑在一次性迁移段
@@ -100,6 +100,27 @@ export declare class CheckpointIndexRefusedError extends Error {
100
100
  readonly refusal: CheckpointIndexRefusal;
101
101
  constructor(sessionId: unknown, refusal: CheckpointIndexRefusal);
102
102
  }
103
+ /**
104
+ * **一张卡归在哪只会话上**(`checkpoint.host_session_id` 列;local 孪生 = 归属索引的同一个事实)—— 兑现这张卡的那条 run 的会话:续跑链(决断、取消、
105
+ * 停驻收割、续跑输入回收、运维队列行的 run 联结)按它把卡与 run 连起来,本服务在会话上找卡的每一个读口只读它。只在写口 `put` 求值一次;
106
+ * 存量行由一次性迁移 M49 自 `session_id` 回填一次。卡自己的 `session_id`(那条腿的对话)仍在行上,只答「这是哪段对话」(问账匹配、问账留存锚、会话擦除)。
107
+ *
108
+ * 读法 = core 卡上的组合腿 `CheckpointState.compositionLeg`(闭集 `entry`;加一个词 ⇒ 本 `switch` 编译红,由人决定那种腿的卡归谁):
109
+ * · `cascade` —— 梯子的一级:级跑在自己现铸的会话里,卡归**调用方的会话**(腿上的 `hostSessionId`;续跑入口 `resumeCascade` 接着爬梯子);
110
+ * · `verify` —— 验证器自己的腿:本服务兑现不了它(结算时当场作废,`verifier-pause-card.ts`),卡归它**自己的**会话 —— 不挂到宿主 run 上;
111
+ * · 没有组合腿 —— 不是组合入口交出的腿(普通 run、verify 的实现腿与修复轮、委派子代):卡归它自己的会话。
112
+ * 组合腿形坏(不是对象 / `hostSessionId` 不是非空串 / 闭集外的词)⇒ 抛 {@link CheckpointHostSessionRefusedError},写口零写(引擎铸不出这样的卡;只来自嵌入方 / 手改数据)。
113
+ */
114
+ export declare function hostSessionOf(cp: Pick<Checkpoint, "sessionId" | "state">): string;
115
+ /** 写口对一张说不出归属的卡的拒(零写;理由见 {@link hostSessionOf})。店错误,不是 wire 码。 */
116
+ export declare class CheckpointHostSessionRefusedError extends Error {
117
+ constructor(sessionId: unknown, why: string);
118
+ }
119
+ /**
120
+ * `host_session_id` 列的定义(两方言建表各插一处;列定义的唯一属主)。可空:存量库缺列 ⇒ 起服列册对账拒启并给 `ADD COLUMN` 句;存量行由 M49 回填,
121
+ * 写口恒写非空值。NULL 只剩一种来历:滚动升级窗里旧副本写下、还没被下一次起服的 M49 补上的行 —— 按会话的读口找不到它(见 MIGRATION 本版那一条)。
122
+ */
123
+ export declare const CHECKPOINT_HOST_SESSION_COLUMN: Readonly<Record<SqlDialect, string>>;
103
124
  /** facet 的词(core 登记表 `facet` 列的值域)。 */
104
125
  type Facet = (typeof PAUSE_REGISTRY)[GateKind]["facet"];
105
126
  /** 生成谓词的一条 WHEN:某一列的值落在这几个词里 ⇒ 这个 facet。 */
@@ -121,10 +142,16 @@ export declare const CHECKPOINT_FACET_CASES: readonly FacetCase[];
121
142
  */
122
143
  export declare const CHECKPOINT_FACET_SQL: Readonly<Record<SqlDialect, string>>;
123
144
  /**
124
- * SLA 拒扫腿(`listExpiredApprovalGates`)的选行序:**卡列有词的行先取**,其后 deadline、token。卡列为 NULL 的审批行有两种来历 —— 引擎没给卡的门(照常是审批 SLA),或混跑窗里
125
- * 不认这一列的旧副本写的行(可能是引擎要拒收 `sla_timeout` 的问答卡,facet 要等下一次起服的 M29 回填才确证);列上没有任何东西能把两者分开,所以不在谓词里猜,而在序里:
126
- * 有卡词的行 facet 已确证,先占窗;卡列为空的行排在它们之后,各自仍按 deadline 升序。LIMIT 仍是调用方的界,不加旋钮。两方言同一句(`CASE` 在 MySQL 协议与 PG 上同形)。
145
+ * SLA 拒扫腿(`listExpiredApprovalGates`)的选行序:deadline、token 两键升序(两方言同一句)。拒扫按这个序**轮转**:每拍从上一拍读到的最后一行之后接着读一页
146
+ * ({@link checkpointSweepAfterSql}),一页不满就回到队首 —— 所以序只决定「一圈里谁先谁后」,不决定「谁轮得到」:一行在这一拍被拒、被跳过、留在停驻,
147
+ * 游标照样越过它,排在它后面的行下一拍就轮到。修前每拍只取序最前的一页,重新停驻、截止不变的行积满一页就把后面所有到期审批挡到收割;为挡住其中一种
148
+ * (混跑窗里旧副本写的卡列为空的行)曾把「卡列为空的排后」加成第一键 —— 轮转之后那一种与其余各种同样挡不住任何行,那一键退役。
149
+ */
150
+ export declare const CHECKPOINT_SWEEP_ORDER_SQL = "deadline ASC, token ASC";
151
+ /**
152
+ * 拒扫游标的「之后」谓词:严格在游标 `(deadline, token)` 之后 —— 与 {@link CHECKPOINT_SWEEP_ORDER_SQL} 同两键、同方向、同一把比较尺子(列自己的排序规则),
153
+ * 序与谓词住在一处:改了序必须同改这里,否则游标会跳行或重行。`ph(i)` = 第 i 个游标参数的占位符;参数依次是游标的 deadline、deadline、token。
127
154
  */
128
- export declare const CHECKPOINT_SWEEP_ORDER_SQL = "CASE WHEN approval_card IS NULL THEN 1 ELSE 0 END ASC, deadline ASC, token ASC";
155
+ export declare function checkpointSweepAfterSql(ph: (i: 0 | 1 | 2) => string): string;
129
156
  export {};
130
157
  //# sourceMappingURL=checkpoint-index-columns.d.ts.map
@@ -64,6 +64,38 @@ export class CheckpointIndexRefusedError extends Error {
64
64
  this.refusal = refusal;
65
65
  }
66
66
  }
67
+ export function hostSessionOf(cp) {
68
+ const leg = cp.state?.compositionLeg;
69
+ if (leg === undefined)
70
+ return cp.sessionId;
71
+ if (typeof leg !== "object" || leg === null)
72
+ throw new CheckpointHostSessionRefusedError(cp.sessionId, "its composition leg is not an object");
73
+ const { entry, hostSessionId } = leg;
74
+ switch (entry) {
75
+ case "cascade":
76
+ if (typeof hostSessionId !== "string" || hostSessionId === "")
77
+ throw new CheckpointHostSessionRefusedError(cp.sessionId, "its cascade leg names no host session");
78
+ return hostSessionId;
79
+ case "verify":
80
+ return cp.sessionId;
81
+ case undefined:
82
+ throw new CheckpointHostSessionRefusedError(cp.sessionId, "its composition leg names no entry");
83
+ default: {
84
+ const unknownEntry = entry;
85
+ throw new CheckpointHostSessionRefusedError(cp.sessionId, `its composition leg names an entry this build does not know (${JSON.stringify(unknownEntry)})`);
86
+ }
87
+ }
88
+ }
89
+ export class CheckpointHostSessionRefusedError extends Error {
90
+ constructor(sessionId, why) {
91
+ super(`the checkpoint row for session ${JSON.stringify(sessionId) ?? "(none)"} was not written: ${why}, so the session it is filed under cannot be read`);
92
+ this.name = "CheckpointHostSessionRefusedError";
93
+ }
94
+ }
95
+ export const CHECKPOINT_HOST_SESSION_COLUMN = Object.freeze({
96
+ mysql: "host_session_id VARCHAR(190) NULL",
97
+ pg: `host_session_id VARCHAR(190) COLLATE "C"`,
98
+ });
67
99
  function groupByFacet(pairs, column) {
68
100
  const groups = new Map();
69
101
  for (const [word, facet] of pairs) {
@@ -87,5 +119,8 @@ export const CHECKPOINT_FACET_SQL = Object.freeze({
87
119
  mysql: renderFacetCase((column) => `CAST(${column} AS BINARY)`),
88
120
  pg: renderFacetCase((column) => column),
89
121
  });
90
- export const CHECKPOINT_SWEEP_ORDER_SQL = "CASE WHEN approval_card IS NULL THEN 1 ELSE 0 END ASC, deadline ASC, token ASC";
122
+ export const CHECKPOINT_SWEEP_ORDER_SQL = "deadline ASC, token ASC";
123
+ export function checkpointSweepAfterSql(ph) {
124
+ return `(deadline > ${ph(0)} OR (deadline = ${ph(1)} AND token > ${ph(2)}))`;
125
+ }
91
126
  //# sourceMappingURL=checkpoint-index-columns.js.map
@@ -3,8 +3,9 @@
3
3
  * (运维队列 / 审批决断 / 续跑腿 / 流内审批收敛器 / 起服普查)共同读的那一层 —— 引擎的 `CheckpointStore` 契约之外、本服务自己定的东西:
4
4
  * · 行形:运维队列行 {@link PendingCheckpoint}、流内审批候选行 {@link CheckpointAskCandidate}、已决回放行 {@link DecidedApprovalRecord};
5
5
  * · 读口的行绑定 {@link PendingRowBinding} 与门型两分({@link LIVE_RUN_GATE_KINDS} / {@link TERMINAL_PARK_GATE_KINDS}),两孪生同序判据 {@link pendingRowPrecedes};
6
- * · 两孪生同调的纯判据与投影:{@link queueRowGateKind}、{@link boundedToolInput}、{@link boundedRuleOffers}、
7
- * {@link approvalDecisionOfWinner}、{@link candidateIdentityOf};常量 {@link TERMINAL_BACKSTOP_MS} / {@link TERMINAL_GRACE_MS} / {@link DECIDED_REPLAY_SCAN_CAP};
6
+ * · 两孪生同调的纯判据与投影:{@link queueRowGateKind}、{@link isUnreadableSummaryForm}、{@link readRiskDescriptorBody}、{@link boundedToolInput}、{@link boundedRuleOffers}、
7
+ * {@link approvalDecisionOfWinner}、{@link candidateIdentityOf};待决行的分诊序 {@link pendingTriageOrder} / {@link queueTriageOrder}(两孪生 + 助手收件箱);
8
+ * 常量 {@link TERMINAL_BACKSTOP_MS} / {@link TERMINAL_GRACE_MS} / {@link DECIDED_REPLAY_SCAN_CAP} / {@link DENY_SWEEP_PAGE_ROWS};SLA 拒扫选行读口的行形与游标 {@link ExpiredApprovalGate} / {@link ExpiredGatePosition};
8
9
  * · ctx 两口的结局词 {@link CtxClaimRewrite} 与一次性迁移的 ctx 行改写店腿的型(随最后一条用它的迁移删,见 {@link CheckpointCtxRowsRewriter});
9
10
  * · 店拒绝契约里「一行字节读不成检查点」那一只 {@link UnreadableCheckpointRowError}(SQL 孪生抛、续跑腿认)。
10
11
  *
@@ -13,7 +14,7 @@
13
14
  * SQL 孪生的文件里;它住这里,SQL 孪生经一条点名的已知欠边借它 —— 这一条边就是阶段三搬家时「服务特有面」的清单(向引擎请托的候选,只列不发)。
14
15
  * 这里零 SQL:SQL 文本、列读法与行投影仍在 SQL 孪生里。
15
16
  */
16
- import { type Checkpoint, type CheckpointGate, type CheckpointRowVerdict, type GateOutcome, type ResolvedOutcome, type RiskDescriptor, type ToolApprovalCard } from "@sema-agent/core";
17
+ import { type Checkpoint, type CheckpointGate, type CheckpointRowVerdict, type CheckpointSummary, type GateOutcome, type ResolvedOutcome, type RiskDescriptor, type ToolApprovalCard } from "@sema-agent/core";
17
18
  import { type ParkRowFacts, type RuleOfferProjection, type SkillCardFacts } from "../approval-card.js";
18
19
  import { StoreCorruptError } from "./sql-json-column.js";
19
20
  import type { SealedCheckpointCtx } from "../http/checkpoint-ctx.js";
@@ -58,6 +59,25 @@ export declare const TERMINAL_BACKSTOP_MS: number;
58
59
  * it never meaningfully delays the eventual crash-safe GC.
59
60
  */
60
61
  export declare const TERMINAL_GRACE_MS = 3600000;
62
+ /**
63
+ * SLA 拒扫的一页(行数):每拍至多续跑尝试这么多张过期审批(每张是一次续跑 —— 拒扫的限流界)。唯一属主:两孪生选行读口的缺省页长与拒扫判「这一页满了没有」读同一个数。
64
+ */
65
+ export declare const DENY_SWEEP_PAGE_ROWS = 100;
66
+ /**
67
+ * 一张过期审批在 SLA 拒扫选行序上的位置 —— 两孪生同序:截止升序,同截止按 token 升序(SQL 孪生按列的排序规则比 token,LOCAL 孪生按 UTF-16 码元比;
68
+ * 各孪生的游标只回到它自己,所以只要各自的序与各自的「之后」谓词同一把尺子)。LOCAL 孪生的截止读不成有限数时取 `-Infinity`(引擎读作已过 ⇒ 排最前)。
69
+ * **进程内的游标**:拒扫腿拿它从上一拍读到的最后一行之后接着读,不上 wire、不落盘。
70
+ */
71
+ export interface ExpiredGatePosition {
72
+ readonly deadline: number;
73
+ readonly token: string;
74
+ }
75
+ /** SLA 拒扫选行读口(`listExpiredApprovalGates`)的一行:会话、scope、它在选行序上的位置({@link ExpiredGatePosition})。 */
76
+ export interface ExpiredApprovalGate {
77
+ readonly sessionId: string;
78
+ readonly scope: string;
79
+ readonly position: ExpiredGatePosition;
80
+ }
61
81
  /** Non-secret view of a pending checkpoint for the operator approval queue — deliberately NO token.
62
82
  *
63
83
  * 🔴 [ref]:行**顶层**另带 {@link ParkRowFacts}(`requiresRealApproval` / `ruleOffersAbsence`,真才带、缺席 ≠ false)——
@@ -97,13 +117,24 @@ export interface PendingCheckpoint extends ParkRowFacts, SkillCardFacts {
97
117
  * ([ref], 7.132.0): every park stamps it, the one-time migration M21 filled any row without it from the row's gate,
98
118
  * and a SQL row that still carries none is not listed by `listPending` (counted: `server.approvals.queue-row-gate-kind-missing`; no decide route binds it either). */
99
119
  gateKind: CheckpointGate["kind"];
100
- /** The suspended run's taskId (task_active join) — the key to the run/trace ("view task context"). */
120
+ /**
121
+ * 🔴 [ref] —— **停在这道门上的那条腿以哪个 task 在跑**(唯一写者 {@link parkedLegTaskId};两只孪生各交自己手里的两格读数):
122
+ * 引擎铸这只停驻行时记下的那条腿的登记行(core `CheckpointState.rowTaskId` —— 后台委派子代的 `a…` 句柄,`/decide` 复活它的回执上的同一个 `taskId`;
123
+ * 不是 `/v1/runs/:id` 的键)⇒ 它;否则 = 持着这一行会话认领的那条 run(run 自己的停驻;停驻 / 待审的 run 不放认领;`/v1/runs/:id` 与 trace 的键);
124
+ * 两者都没有(同步 / workflow 委派子代、终局后的纯停驻)⇒ `null`。
125
+ */
101
126
  taskId: string | null;
102
127
  /** The pending tool call's args (post-hook), redacted + bounded — for tool_approval the write payload, for a
103
128
  * durable AskUserQuestion the question itself. Lets the approval card render WITHOUT an N+1 trace.turns
104
129
  * fetch. `null` for pre-migration rows (suspended before the column existed) ⇒ consumer falls back. */
105
130
  input: unknown;
106
- createdAt: number;
131
+ /**
132
+ * 建行时刻(epoch ms)。SQL 孪生恒在场(本服务在存储体之外握着的建行时刻列)。LOCAL 孪生读引擎对这一行投的摘要(core `CheckpointSummary.createdAt`,同一可选性):
133
+ * 摘要读得出有限数才在场,读不出(存储体里不是有限数 —— 那一行判官判坏、`rowVerdict` 非 `ok`)⇒ **缺席**,从不把存储体里的原值搬上 wire。
134
+ * 排序读法见 {@link queueTriageOrder}(缺席计 0 = 档内最老)。
135
+ */
136
+ createdAt?: number;
137
+ /** 截止(epoch ms);没有截止 ⇒ `null`。LOCAL 孪生同读摘要:读不成有限数 ⇒ `null`(摘要不带它;到期两扫按引擎 `checkpointDeadlinePassed` 把它读作已过)。 */
107
138
  deadline: number | null;
108
139
  /** [ref] riskDescriptor inbox: core's INERT triage descriptor ({severity 1-5, axes, toolName, redacted
109
140
  * summary, touchedPaths}) for human/irreversible_ask gates. listPending returns the queue severity-sorted
@@ -187,6 +218,19 @@ export interface PendingCheckpoint extends ParkRowFacts, SkillCardFacts {
187
218
  */
188
219
  rowVerdict?: CheckpointRowVerdict;
189
220
  }
221
+ /**
222
+ * 🔴 [ref] —— 停驻行 {@link PendingCheckpoint.taskId} 的**唯一写者**:停在这道门上的那条腿以哪个 task 在跑。
223
+ *
224
+ * 两格读数,两只孪生各交自己手里的那一份(SQL 孪生:`checkpoint` 列的 `$.state.rowTaskId` 成员 + `task_active` 联结;local 孪生:同一行的
225
+ * `state.rowTaskId` + 文件 run 店的 `getActiveTaskId`):
226
+ * · `recorded` —— 引擎铸这只停驻行时记下的那条腿的登记行(core `CheckpointState.rowTaskId`,每个铸点盖;只在后台车道的腿上在场 ——
227
+ * 顶层 run、同步子代、workflow 子代不盖)。它与行的会话(铸停驻那条腿的会话,[ref])是同一次铸、同一条腿的身份;本服务不另读后台 agent 行、
228
+ * 不按 scope 扫、不经会话元组(行上的 `agent.id`)回填;
229
+ * · `claimHolder` —— 持着这一行会话认领的那条 run(顶层 run 引擎不盖登记行:那条腿就是 run 本身,本服务的 run 账本知道它)。
230
+ * 记录是一只非空串 ⇒ 它(行自己点名停在这道门上的那条腿;认领可能属于同会话上另一条 run)。构造上两者不同时在场:后台子代的会话不进 run 账本、不持认领。
231
+ * 记录读不成非空串(数 / 对象 / 空串 —— 被改过的行)⇒ 与没记同答:方向是少一个路由键,不放宽任何判;那一行续不续得了由它的 `rowVerdict` 另说。
232
+ */
233
+ export declare function parkedLegTaskId(recorded: unknown, claimHolder: string | null): string | null;
190
234
  /**
191
235
  * [ref]([ref] / DEBTS [ref]):session 键读口(`findPendingTokenBySession` / `peekPendingScope`)的**行绑定**。
192
236
  *
@@ -228,6 +272,14 @@ export interface PendingRowBinding {
228
272
  * 赢家卡与被消费卡恒同一张(FIFO 顺带成立)。
229
273
  */
230
274
  pick?: "newest" | "oldest";
275
+ /**
276
+ * 按哪一只会话找(缺省 `"card"`)。一张卡的行上有两个会话事实,两个问题各读一只:
277
+ * · `"card"`(缺省)—— 卡**自己的对话**(`checkpoint.session_id`):决断口 URL 里的会话、SLA 拒扫的复核、按会话唤醒 —— 地址就是卡停在的那段对话;
278
+ * · `"run"` —— 卡**归属的那条 run 的会话**(`checkpoint.host_session_id`,读法 `checkpoint-index-columns.ts` 的 `hostSessionOf`):从 run 一侧找它等着的那张卡
279
+ * (取消、steer 停放、活跃 run 409 的门材料、起服收回、本地收割探针、续跑输入回收、按 task 续跑的两扇门)。cascade 的级上卡两者不同:
280
+ * 卡在级自己现铸的对话里,归调用方的会话;其余每一张卡两者同值。
281
+ */
282
+ axis?: "card" | "run";
231
283
  }
232
284
  /** [ref]:一条**仍持有 claim 的 run** 可能停在的全部门型(= 除 `task_done` 外全部;派生自上表,不手抄)。
233
285
  * 给「按 run 行动」的读口用:cancel / steer 的 park 落点、409 `pendingGate` 材料 —— 这些腿手里有 run 行,
@@ -300,13 +352,32 @@ export declare class UnreadableCheckpointRowError extends StoreCorruptError {
300
352
  }
301
353
  /**
302
354
  * [ref] —— 运维队列行的门型:**两只孪生同一只判官**(SQL 孪生读 `gate_kind` 列 —— put 时从同一只门反范式下来的那一格,每次停驻都盖,一次性迁移 M21 把没有它的
303
- * 存量行从门子树补齐;local 孪生读快照上的门 `cp.gate.kind`)。
355
+ * 存量行从门子树补齐;local 孪生读引擎对这一行投的摘要上的 `gateKind` —— 门不是 core 登记的门型时摘要不带它)。
304
356
  * 读到的值是 NULL / 缺席 / 不是 core 登记的门型 ⇒ `undefined`:这一行**不列**(响亮:计一次 `server.approvals.queue-row-gate-kind-missing`)—— 与每一条决断口同一个读法:
305
357
  * 按门型绑定取行的读口对这种行本来就不命中(`pendingRowQuery` 的 `gate_kind IN (…)`,证不出门型就不当它是这道门),队列不再把一行谁也决不了的行投出去,
306
358
  * 也不按缺键投(消费方按 `gateKind` 路由、缺键即 fail-closed)。不整只拒:一行坏行不许让整个租户的队列(列表 500、SSE 心跳照常而队列永远停在旧帧)消失。
307
359
  * 按构造不可达(写口恒盖、M21 补齐);计数非零 = 写腿或手改出了错,按 `SELECT … WHERE status = 'pending' AND gate_kind IS NULL` 查那一行。
308
360
  */
309
361
  export declare function queueRowGateKind(kind: unknown): CheckpointGate["kind"] | undefined;
362
+ export declare function isUnreadableSummaryForm(summary: CheckpointSummary): boolean;
363
+ /**
364
+ * 运维队列行 `riskDescriptor` 那一格的**形读者**(两孪生同调这一只):SQL 孪生对 `risk_descriptor` 列解出来的体(`decodeJsonColumn`)、LOCAL 孪生对存储体里门上的
365
+ * `gate.riskDescriptor`。判到「是不是一只对象」为止 —— 描述符的键表属主在 core,core 没有导出它的验证器,手写一份就是第二份键集。读不出 ⇒ 这一行的描述符 `null` +
366
+ * 计 `server.approvals.risk-descriptor-cell-unreadable`(两孪生同一个 tag、同一失败方向;放行理由见登记表)。
367
+ */
368
+ export declare const readRiskDescriptorBody: import("./sql-json-column.js").JsonColumnReader<RiskDescriptor>;
369
+ /** 分诊序读的两格(运维队列行 = 描述符里的严重度;收件箱行 = 引擎摘要的严重度)。 */
370
+ export interface TriageKeys {
371
+ readonly severity?: number | undefined;
372
+ readonly createdAt?: number | undefined;
373
+ }
374
+ /**
375
+ * 待决停驻行的**分诊序** —— 一只比较器,运维队列两孪生({@link queueTriageOrder})与助手收件箱同调:严重度降序,同档内 `createdAt` 升序(最老在前);
376
+ * 一格缺席或读不成有限数按 0 计 —— 确定性优于「看它恰好落在哪」,也不让一个非数让整只排序失去全序。与店的返回顺序无关(core 的 `listByScope` 零顺序声明)。
377
+ */
378
+ export declare function pendingTriageOrder(a: TriageKeys, b: TriageKeys): number;
379
+ /** 运维队列行的分诊序 = {@link pendingTriageOrder} 读行上描述符的严重度(两孪生的 `listPending` 同调)。 */
380
+ export declare function queueTriageOrder(a: PendingCheckpoint, b: PendingCheckpoint): number;
310
381
  /** Redact + size-bound a pending tool call's args for persistence/serving. JSON-roundtrips so the stored shape
311
382
  * matches what the operator queue serves; oversized payloads collapse to a marker rather than bloating the row.
312
383
  * Exported for the LOCAL twin (local-checkpoint-store.ts) so the operator-queue projection can't drift. */
@@ -325,10 +396,10 @@ export interface CheckpointAskCandidate {
325
396
  * 🔴 和解三元组的第一维([ref] 件1,黑板 [ref]③①)—— checkpoint 自己带的 `sourceSessionId`(core 在
326
397
  * suspendAsk 铸行时恒填该腿的 `sessionId`)。**没有对应的列**,只能从 blob 窄读;读不出/缺席 = null。
327
398
  *
328
- * 为什么必须进候选集:读口按 `(scope, session_id, tool_call_id)` 查,而委派子代那条腿的 ask 落行时
329
- * `session_id` 记的是**投递上下文**(根会话),park 却发生在**子代自己**的 sessionId 上 —— 只靠
330
- * (toolCallId, hash) 两维,一条根腿的 park 会被一只子代的 ask 认领(摘要相同的两次同 args 调用完全
331
- * 正常)。三元组全同才算同一件事。
399
+ * 为什么必须进候选集:收敛器按 `(scope, session_id = 问的 sourceSessionId, tool_call_id)` 查,`session_id` 列是这只停车行
400
+ * 自己落在哪个会话(core 铸行时同一只变量也写进 blob 的 `sourceSessionId`)—— 列与 blob 两份陈述,身份等式比的是 blob 那一份:
401
+ * 列被外部改写 / 两份分家时,只靠 (toolCallId, hash) 两维会让别的会话的 park 被认领(摘要相同的两次同 args 调用完全正常)。
402
+ * 三元组全同才算同一件事。
332
403
  */
333
404
  sourceSessionId: string | null;
334
405
  /** 该 park 绑定的 tool call(= `pendingAction.toolCallId`)。`unparseable` 行为 null。 */
@@ -423,4 +494,6 @@ export declare function candidateIdentityOf(cp: Checkpoint): CandidateIdentity;
423
494
  * `context_absent` 持有、但会话没有 ctx 行 ⇒ 零写(不建行)。 */
424
495
  export declare const CTX_CLAIM_REWRITES: readonly ["written", "claim_released", "context_absent"];
425
496
  export type CtxClaimRewrite = (typeof CTX_CLAIM_REWRITES)[number];
497
+ /** 认领栅栏下**建或换**一行 ctx 的结局([ref];`putCtx` 的结局 —— 交认领的提交腿与续跑腿的写;不交认领恒 `written`):同一张词表去掉 `context_absent`(这一口没有行就建)。 */
498
+ export type CtxClaimPut = Exclude<CtxClaimRewrite, "context_absent">;
426
499
  //# sourceMappingURL=checkpoint-store-face.d.ts.map
@@ -1,11 +1,15 @@
1
1
  import { isGateKind, judgeCheckpointRow, MAX_RULE_TEXT_CHARS, } from "@sema-agent/core";
2
2
  import { redactDeep, redactSecrets } from "../trace/redact.js";
3
3
  import { MAX_RULE_OFFERS, MAX_RULE_OFFER_BATCH_MEMBERS, readRuleOfferList } from "../approval-card.js";
4
- import { StoreCorruptError } from "./sql-json-column.js";
4
+ import { createObjectColumnReader, StoreCorruptError } from "./sql-json-column.js";
5
5
  import { recordFailOpen } from "../observability/fail-open.js";
6
6
  const MAX_TOOL_INPUT_CHARS = 8192;
7
7
  export const TERMINAL_BACKSTOP_MS = Math.max(60_000, (Number.isFinite(Number(process.env.APPROVAL_TERMINAL_BACKSTOP_MS)) ? Number(process.env.APPROVAL_TERMINAL_BACKSTOP_MS) : 0) || 30 * 86_400_000);
8
8
  export const TERMINAL_GRACE_MS = 3_600_000;
9
+ export const DENY_SWEEP_PAGE_ROWS = 100;
10
+ export function parkedLegTaskId(recorded, claimHolder) {
11
+ return typeof recorded === "string" && recorded.length > 0 ? recorded : claimHolder;
12
+ }
9
13
  const GATE_KIND_IS_LIVE_RUN_PARK = {
10
14
  human: true,
11
15
  irreversible_ask: true,
@@ -81,6 +85,19 @@ export function queueRowGateKind(kind) {
81
85
  recordFailOpen("server.approvals.queue-row-gate-kind-missing", `gate_kind=${kind === null || kind === undefined ? "NULL" : redactSecrets(String(kind)).slice(0, 40)}`);
82
86
  return undefined;
83
87
  }
88
+ const UNREADABLE_SUMMARY_MEMBERS = new Set(["token", "rowVerdict", "sessionId", "scope", "gateKind", "createdAt", "deadline"]);
89
+ export function isUnreadableSummaryForm(summary) {
90
+ const names = UNREADABLE_SUMMARY_MEMBERS;
91
+ return summary.rowVerdict.kind !== "ok" && Object.keys(summary).every((member) => names.has(member));
92
+ }
93
+ export const readRiskDescriptorBody = createObjectColumnReader();
94
+ const triageKey = (v) => (v !== undefined && Number.isFinite(v) ? v : 0);
95
+ export function pendingTriageOrder(a, b) {
96
+ return triageKey(b.severity) - triageKey(a.severity) || triageKey(a.createdAt) - triageKey(b.createdAt);
97
+ }
98
+ export function queueTriageOrder(a, b) {
99
+ return pendingTriageOrder({ severity: a.riskDescriptor?.severity, createdAt: a.createdAt }, { severity: b.riskDescriptor?.severity, createdAt: b.createdAt });
100
+ }
84
101
  export function boundedToolInput(args) {
85
102
  if (args === undefined)
86
103
  return null;
@@ -80,6 +80,7 @@ export async function ensureTiDBDeviceSchema(pool) {
80
80
  }
81
81
  export const DEVICE_INDEXES = [
82
82
  { table: `${DEVICES_TABLE}`, name: "idx_device_owner", columns: ["owner_tenant", "owner_subject"] },
83
+ { table: `${DEVICES_TABLE}`, name: UQ_DEVICES_PUBKEY, columns: ["owner_tenant", "pubkey"], unique: true },
83
84
  { table: `${DEVICE_AUDIT_TABLE}`, name: "idx_device_audit_device", columns: ["device_id", "at"] },
84
85
  { table: `${DEVICE_AUDIT_TABLE}`, name: "idx_device_audit_event", columns: ["event", "at"] },
85
86
  ];
@@ -1,4 +1,5 @@
1
1
  import type { SqlDialect } from "./sql-driver.js";
2
+ import { StoreBootRefusalError } from "./store-contracts.js";
2
3
  /**
3
4
  * 一条索引的**声明**(纯数据)。两方言共用同一份声明 —— 这就是"一处属主"的兑现物:
4
5
  * per-store 文件各导出自己那份 `readonly IndexSpec[]`,PG 侧由该 store 的 `ensurePg*Schema` 应用,
@@ -11,7 +12,7 @@ export interface IndexSpec {
11
12
  readonly name: string;
12
13
  /** 列序(等值前缀在前、排序列在后;与 MySQL 内联 `KEY` 的列序**必须**逐字一致)。 */
13
14
  readonly columns: readonly string[];
14
- /** UNIQUE 索引(MySQL 内联 `UNIQUE KEY` 的孪生)。缺省 = 普通索引。 */
15
+ /** UNIQUE 索引(MySQL 内联 `UNIQUE KEY` / PG 表约束 `CONSTRAINT … UNIQUE` 的孪生)。缺省 = 普通索引。唯一索引多一道判形(头注「唯一索引」),列集按**集合**比。 */
15
16
  readonly unique?: boolean;
16
17
  }
17
18
  /**
@@ -28,6 +29,17 @@ export interface IndexSpec {
28
29
  * 不带参 ⇒ 这一整类接缝脆弱性结构上不存在。两方言同律,不留一边带参一边不带的不对称。
29
30
  */
30
31
  export type IndexQueryFn = (sql: string, params?: unknown[]) => Promise<unknown>;
32
+ /**
33
+ * 唯一索引的确定拒启(头注「唯一索引」)。`kind`:`shape` = 同名在场而形不对;`duplicates` = 存量重复行让建索引失败。
34
+ * 继承 {@link StoreBootRefusalError}:SQL 开库的等待窗不重试它、「库打不开」的拒句不改写它。
35
+ */
36
+ export declare class UniqueIndexRefusalError extends StoreBootRefusalError {
37
+ readonly kind: "shape" | "duplicates";
38
+ readonly spec: IndexSpec;
39
+ constructor(kind: "shape" | "duplicates", spec: IndexSpec, message: string, options?: {
40
+ readonly cause: unknown;
41
+ });
42
+ }
31
43
  /**
32
44
  * 幂等地保证一条索引在场。**这是本仓唯一允许发加索引 DDL 的地方**(SCHEMA POLICY 窄放的全部内容)。
33
45
  *