@sema-agent/server 7.146.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 (850) hide show
  1. package/MIGRATION.md +1423 -24
  2. package/README.md +21 -8
  3. package/README.zh-CN.md +15 -9
  4. package/USAGE.md +537 -216
  5. package/deploy/facts/lanes.json +7 -0
  6. package/deploy/sema-up/README.md +18 -7
  7. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  8. package/deploy/sema-up/chart/templates/_helpers.tpl +42 -4
  9. package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -4
  10. package/deploy/sema-up/chart/templates/server.yaml +5 -4
  11. package/deploy/sema-up/chart/values.yaml +4 -3
  12. package/deploy/sema-up/cluster-up.sh +75 -176
  13. package/deploy/sema-up/kube-up.sh +29 -49
  14. package/deploy/sema-up/lib/chart-run.sh +23 -0
  15. package/deploy/sema-up/lib/dataroot.sh +3 -3
  16. package/deploy/sema-up/lib/flagshape.sh +4 -0
  17. package/deploy/sema-up/lib/health.sh +62 -13
  18. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  19. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  20. package/deploy/sema-up/lib/lanes.json +2 -5
  21. package/deploy/sema-up/lib/regcred.py +8 -0
  22. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  23. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  24. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  25. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  26. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  27. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  28. package/deploy/sema-up/lib/render-stack.py +17 -0
  29. package/deploy/sema-up/lib/shell-text.sh +87 -0
  30. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  31. package/deploy/sema-up/lib/usage-head.txt +1 -0
  32. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  33. package/deploy/sema-up/preflight.sh +10 -8
  34. package/deploy/sema-up/sema-up.sh +26 -48
  35. package/deploy/sema-up/smoke.sh +7 -6
  36. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  37. package/deploy/sema-up/stack/compose.yaml +18 -5
  38. package/deploy/sema-up/stack/sema-stack-cluster.yaml +25 -3
  39. package/dist/adoption/plan.d.ts +24 -0
  40. package/dist/adoption/plan.js +53 -1
  41. package/dist/adoption/runner.d.ts +10 -1
  42. package/dist/adoption/runner.js +36 -16
  43. package/dist/adoption/wire.d.ts +3 -3
  44. package/dist/approval-card.d.ts +32 -34
  45. package/dist/approval-gate-currency.js +3 -2
  46. package/dist/approval-reconciler.d.ts +4 -13
  47. package/dist/approval-reconciler.js +2 -2
  48. package/dist/approval.d.ts +16 -14
  49. package/dist/approval.js +3 -3
  50. package/dist/audit.d.ts +10 -3
  51. package/dist/audit.js +17 -9
  52. package/dist/auth-bridge.d.ts +0 -14
  53. package/dist/auth-bridge.js +0 -7
  54. package/dist/auto-mode-face.d.ts +10 -7
  55. package/dist/auto-mode-face.js +7 -4
  56. package/dist/background-agent-name.d.ts +19 -1
  57. package/dist/background-agent-name.js +12 -2
  58. package/dist/background-session-reap.d.ts +1 -1
  59. package/dist/bake-runner/main.js +9 -6
  60. package/dist/bench/s1/arms.js +6 -5
  61. package/dist/bench/s1/live-deps.js +8 -3
  62. package/dist/bench/s1/run-firm.js +6 -5
  63. package/dist/bind-host.d.ts +25 -0
  64. package/dist/bind-host.js +25 -0
  65. package/dist/boot/adoption.d.ts +3 -0
  66. package/dist/boot/adoption.js +1 -0
  67. package/dist/boot/crash-last.js +2 -1
  68. package/dist/boot/deployment-mods.d.ts +1 -1
  69. package/dist/boot/device-lane.js +5 -5
  70. package/dist/boot/engine-lease.d.ts +12 -11
  71. package/dist/boot/execution-env.d.ts +19 -8
  72. package/dist/boot/execution-env.js +80 -62
  73. package/dist/boot/execution-lane.d.ts +37 -9
  74. package/dist/boot/execution-lane.js +74 -20
  75. package/dist/boot/exit-boundary.d.ts +3 -3
  76. package/dist/boot/exit-boundary.js +6 -5
  77. package/dist/boot/exit-last.js +2 -1
  78. package/dist/boot/fatal-exit.d.ts +3 -5
  79. package/dist/boot/fatal-exit.js +2 -2
  80. package/dist/boot/governance-seams.d.ts +2 -2
  81. package/dist/boot/leader.d.ts +15 -0
  82. package/dist/boot/leader.js +18 -16
  83. package/dist/boot/memory-boundary.d.ts +11 -11
  84. package/dist/boot/memory-boundary.js +3 -3
  85. package/dist/boot/memory-consolidation.d.ts +50 -53
  86. package/dist/boot/memory-consolidation.js +11 -18
  87. package/dist/boot/org-memory.js +4 -3
  88. package/dist/boot/parked-revive-gate.d.ts +1 -1
  89. package/dist/boot/parked-revive-gate.js +3 -3
  90. package/dist/boot/reapers.d.ts +4 -3
  91. package/dist/boot/reapers.js +20 -17
  92. package/dist/boot/resolve-spec.d.ts +5 -3
  93. package/dist/boot/resolve-spec.js +133 -165
  94. package/dist/boot/retention-lane.d.ts +7 -45
  95. package/dist/boot/retention-lane.js +2 -2
  96. package/dist/boot/runner-deps.d.ts +28 -7
  97. package/dist/boot/runner-deps.js +11 -4
  98. package/dist/boot/runtime-caps.d.ts +2 -2
  99. package/dist/boot/runtime-caps.js +16 -2
  100. package/dist/boot/session-faces.d.ts +17 -7
  101. package/dist/boot/session-faces.js +122 -96
  102. package/dist/boot/shutdown.d.ts +5 -4
  103. package/dist/boot/shutdown.js +6 -4
  104. package/dist/boot/stage-01-config.d.ts +1 -1
  105. package/dist/boot/stage-01-config.js +14 -2
  106. package/dist/boot/stage-02-web-admin-pull.d.ts +2 -1
  107. package/dist/boot/stage-02-web-admin-pull.js +15 -8
  108. package/dist/boot/stage-03-store-backend.d.ts +4 -1
  109. package/dist/boot/stage-03-store-backend.js +4 -3
  110. package/dist/boot/stage-04-stores.d.ts +3 -1
  111. package/dist/boot/stage-04-stores.js +2 -2
  112. package/dist/boot/stage-05-execution-env.d.ts +9 -5
  113. package/dist/boot/stage-05-execution-env.js +5 -5
  114. package/dist/boot/stage-06-runners.d.ts +13 -15
  115. package/dist/boot/stage-06-runners.js +24 -18
  116. package/dist/boot/stage-07-capability-layer.d.ts +14 -11
  117. package/dist/boot/stage-07-capability-layer.js +9 -12
  118. package/dist/boot/stage-08-reapers.d.ts +14 -11
  119. package/dist/boot/stage-08-reapers.js +3 -3
  120. package/dist/boot/stage-09-leader.d.ts +16 -18
  121. package/dist/boot/stage-09-leader.js +12 -4
  122. package/dist/boot/stage-10-http-server.d.ts +16 -18
  123. package/dist/boot/stage-10-http-server.js +9 -5
  124. package/dist/boot/store-evidence.d.ts +20 -0
  125. package/dist/boot/store-evidence.js +13 -0
  126. package/dist/boot/stores.d.ts +12 -0
  127. package/dist/boot/stores.js +39 -17
  128. package/dist/boot/task-list-lane.d.ts +4 -4
  129. package/dist/boot/web-admin.d.ts +4 -2
  130. package/dist/boot/web-admin.js +58 -38
  131. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  132. package/dist/boot-reclaim.d.ts +3 -1
  133. package/dist/boot-reclaim.js +1 -1
  134. package/dist/brain.d.ts +7 -18
  135. package/dist/brain.js +5 -17
  136. package/dist/budget.js +6 -6
  137. package/dist/capabilities/center-plugins.d.ts +9 -1
  138. package/dist/capabilities/center-plugins.js +37 -11
  139. package/dist/capabilities/center-wiring.js +1 -1
  140. package/dist/capabilities/composite-members.d.ts +3 -2
  141. package/dist/capabilities/composite-members.js +3 -2
  142. package/dist/capabilities/execution-lane.d.ts +7 -7
  143. package/dist/capabilities/execution-lane.js +2 -2
  144. package/dist/capabilities/hands-lane.d.ts +1 -1
  145. package/dist/capabilities/repo-tools.d.ts +2 -0
  146. package/dist/capabilities/repo-tools.js +14 -12
  147. package/dist/capabilities/scenarios.d.ts +38 -33
  148. package/dist/capabilities/scenarios.js +24 -25
  149. package/dist/capabilities/settings-contract.d.ts +29 -0
  150. package/dist/capabilities/settings-contract.js +14 -0
  151. package/dist/capabilities/skills.d.ts +6 -6
  152. package/dist/capabilities/tool-defer.d.ts +1 -1
  153. package/dist/capability-facts.d.ts +69 -4
  154. package/dist/capability-facts.js +77 -5
  155. package/dist/card-void.d.ts +4 -4
  156. package/dist/card-void.js +1 -1
  157. package/dist/center-credential-renewer.d.ts +6 -2
  158. package/dist/center-credential-renewer.js +10 -5
  159. package/dist/config-catalog.d.ts +16 -1
  160. package/dist/config-catalog.js +68 -61
  161. package/dist/config-dir-trust.d.ts +37 -4
  162. package/dist/config-dir-trust.js +88 -44
  163. package/dist/config-invariants.d.ts +58 -4
  164. package/dist/config-invariants.js +104 -23
  165. package/dist/config-lkg.d.ts +24 -2
  166. package/dist/config-lkg.js +22 -9
  167. package/dist/config-provider.d.ts +9 -9
  168. package/dist/config-provider.js +25 -108
  169. package/dist/config-pull-failure.d.ts +50 -0
  170. package/dist/config-pull-failure.js +48 -0
  171. package/dist/config-types.d.ts +215 -202
  172. package/dist/config.d.ts +69 -14
  173. package/dist/config.js +188 -96
  174. package/dist/degenerate-instrument.js +1 -1
  175. package/dist/delegated-session-owner.d.ts +1 -1
  176. package/dist/deleted-session-ids.d.ts +3 -2
  177. package/dist/deploy-facts.js +3 -2
  178. package/dist/deployment-governance.d.ts +3 -3
  179. package/dist/deployment-shape.d.ts +51 -16
  180. package/dist/deployment-shape.js +31 -6
  181. package/dist/egress-redirect.d.ts +25 -7
  182. package/dist/egress-redirect.js +20 -2
  183. package/dist/elicitation.d.ts +6 -5
  184. package/dist/elicitation.js +23 -22
  185. package/dist/engine-identity.d.ts +28 -0
  186. package/dist/engine-identity.js +10 -0
  187. package/dist/entry-problems.d.ts +5 -7
  188. package/dist/entry-problems.js +1 -1
  189. package/dist/env-facts.d.ts +7 -5
  190. package/dist/env-facts.js +12 -7
  191. package/dist/env-witness.d.ts +7 -0
  192. package/dist/env-witness.js +16 -0
  193. package/dist/execution-config-root.d.ts +5 -5
  194. package/dist/execution-config-root.js +5 -5
  195. package/dist/execution-env-purpose.d.ts +14 -0
  196. package/dist/execution-env-purpose.js +29 -0
  197. package/dist/execution-lane-caps.d.ts +53 -103
  198. package/dist/execution-lane-caps.js +51 -83
  199. package/dist/execution-placement.d.ts +65 -9
  200. package/dist/execution-placement.js +58 -0
  201. package/dist/field-conflict.d.ts +7 -11
  202. package/dist/field-conflict.js +3 -3
  203. package/dist/file-history-capture.d.ts +3 -3
  204. package/dist/file-history-disclosure.d.ts +2 -2
  205. package/dist/file-history-disclosure.js +1 -0
  206. package/dist/fleet/drain-entry.d.ts +17 -10
  207. package/dist/fleet/drain-entry.js +1 -1
  208. package/dist/fleet/fleet-bus.d.ts +21 -3
  209. package/dist/fleet/fleet-bus.js +35 -25
  210. package/dist/fleet/fleet-reconciler.js +2 -2
  211. package/dist/fleet/serving-lease.js +6 -7
  212. package/dist/fleet-client.js +3 -3
  213. package/dist/fleet-lease.d.ts +0 -1
  214. package/dist/fleet-lease.js +4 -5
  215. package/dist/history-anchor.d.ts +42 -0
  216. package/dist/history-anchor.js +34 -0
  217. package/dist/hitl-delivery.d.ts +90 -0
  218. package/dist/hitl-delivery.js +98 -0
  219. package/dist/hooks/classic-stations.d.ts +8 -11
  220. package/dist/hooks/classic-stations.js +0 -7
  221. package/dist/hooks/command-spawn.d.ts +1 -4
  222. package/dist/hooks/command-spawn.js +0 -11
  223. package/dist/hooks/hook-llm.d.ts +5 -1
  224. package/dist/hooks/hook-llm.js +24 -15
  225. package/dist/hooks/hook-runner.d.ts +119 -65
  226. package/dist/hooks/hook-runner.js +415 -217
  227. package/dist/host-lsp-manager.d.ts +22 -8
  228. package/dist/host-lsp-manager.js +4 -1
  229. package/dist/http/active-run-conflict.d.ts +2 -43
  230. package/dist/http/active-run-conflict.js +3 -7
  231. package/dist/http/admission.d.ts +4 -18
  232. package/dist/http/admission.js +75 -78
  233. package/dist/http/approval-sweeps.d.ts +5 -8
  234. package/dist/http/approval-sweeps.js +55 -30
  235. package/dist/http/caller-trust.d.ts +8 -10
  236. package/dist/http/caller-trust.js +1 -2
  237. package/dist/http/checkpoint-ctx.d.ts +17 -0
  238. package/dist/http/checkpoint-ctx.js +6 -0
  239. package/dist/http/claim-heartbeat.d.ts +49 -0
  240. package/dist/http/claim-heartbeat.js +46 -0
  241. package/dist/http/claim-latency.d.ts +10 -0
  242. package/dist/http/claim-latency.js +12 -0
  243. package/dist/http/claimed-run.d.ts +4 -3
  244. package/dist/http/dispatch.d.ts +8 -1
  245. package/dist/http/dispatch.js +77 -31
  246. package/dist/http/durable-run-leg.d.ts +3 -3
  247. package/dist/http/durable-run-leg.js +18 -12
  248. package/dist/http/execution-context.d.ts +18 -42
  249. package/dist/http/execution-context.js +11 -5
  250. package/dist/http/health-reader.d.ts +36 -0
  251. package/dist/http/health-reader.js +21 -0
  252. package/dist/http/health-self-report.d.ts +9 -9
  253. package/dist/http/health-self-report.js +4 -4
  254. package/dist/http/idempotency.d.ts +9 -5
  255. package/dist/http/idempotency.js +4 -4
  256. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  257. package/dist/http/memory-compliance-failure-reply.js +7 -2
  258. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  259. package/dist/http/memory-face-fault-reply.js +71 -0
  260. package/dist/http/memory-store-refusal-reply.d.ts +3 -3
  261. package/dist/http/memory-store-refusal-reply.js +6 -0
  262. package/dist/http/owner-access.d.ts +391 -56
  263. package/dist/http/owner-access.js +372 -33
  264. package/dist/http/principal-gate.d.ts +26 -94
  265. package/dist/http/principal-gate.js +24 -81
  266. package/dist/http/refusal-body.d.ts +35 -2
  267. package/dist/http/refusal-body.js +34 -0
  268. package/dist/http/request-guards.d.ts +10 -14
  269. package/dist/http/request-guards.js +34 -68
  270. package/dist/http/resume-composition.d.ts +37 -0
  271. package/dist/http/resume-composition.js +18 -0
  272. package/dist/http/resume-ctx-read.d.ts +35 -12
  273. package/dist/http/resume-ctx-read.js +25 -6
  274. package/dist/http/resume-legs.d.ts +24 -24
  275. package/dist/http/resume-legs.js +260 -171
  276. package/dist/http/retired-skill-manifest.d.ts +1 -1
  277. package/dist/http/rewind-files-reply.d.ts +34 -0
  278. package/dist/http/rewind-files-reply.js +36 -0
  279. package/dist/http/route-ctx.d.ts +56 -47
  280. package/dist/http/route-table.js +2 -0
  281. package/dist/http/routes/a2a-serve.d.ts +43 -5
  282. package/dist/http/routes/a2a-serve.js +58 -37
  283. package/dist/http/routes/admin-config-refresh.js +2 -2
  284. package/dist/http/routes/admin-drain.js +2 -2
  285. package/dist/http/routes/admin-memory-optout.js +4 -3
  286. package/dist/http/routes/adoption.d.ts +3 -0
  287. package/dist/http/routes/adoption.js +17 -10
  288. package/dist/http/routes/agents-roster.js +13 -7
  289. package/dist/http/routes/approvals-assistant.js +73 -88
  290. package/dist/http/routes/attachments.js +2 -2
  291. package/dist/http/routes/background.d.ts +3 -3
  292. package/dist/http/routes/background.js +9 -17
  293. package/dist/http/routes/capabilities.js +23 -20
  294. package/dist/http/routes/config-catalog.js +2 -2
  295. package/dist/http/routes/devices.d.ts +3 -3
  296. package/dist/http/routes/devices.js +5 -5
  297. package/dist/http/routes/diagnostics.d.ts +27 -3
  298. package/dist/http/routes/diagnostics.js +27 -21
  299. package/dist/http/routes/engine.js +2 -2
  300. package/dist/http/routes/fleet.js +5 -3
  301. package/dist/http/routes/images.js +10 -6
  302. package/dist/http/routes/leader.d.ts +7 -2
  303. package/dist/http/routes/leader.js +12 -3
  304. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  305. package/dist/http/routes/mcp-reconnect.js +7 -15
  306. package/dist/http/routes/memory-bundle.js +4 -7
  307. package/dist/http/routes/memory-compliance.js +4 -4
  308. package/dist/http/routes/memory-consolidation.js +6 -9
  309. package/dist/http/routes/memory-origin.d.ts +3 -1
  310. package/dist/http/routes/memory-origin.js +7 -8
  311. package/dist/http/routes/memory-policy.js +17 -12
  312. package/dist/http/routes/notify-wake.js +12 -20
  313. package/dist/http/routes/observability.js +3 -3
  314. package/dist/http/routes/principal-inbox.d.ts +1 -1
  315. package/dist/http/routes/principal-inbox.js +2 -2
  316. package/dist/http/routes/projects.d.ts +70 -0
  317. package/dist/http/routes/projects.js +87 -0
  318. package/dist/http/routes/retention-ops.js +6 -9
  319. package/dist/http/routes/rules.js +50 -7
  320. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  321. package/dist/http/routes/run-memory-capture.js +6 -12
  322. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  323. package/dist/http/routes/run-permission-mode.js +10 -17
  324. package/dist/http/routes/runs.js +148 -233
  325. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  326. package/dist/http/routes/session-memory-sync.js +7 -13
  327. package/dist/http/routes/session-sync.d.ts +4 -2
  328. package/dist/http/routes/session-sync.js +48 -30
  329. package/dist/http/routes/sessions-list.d.ts +3 -3
  330. package/dist/http/routes/sessions-list.js +9 -9
  331. package/dist/http/routes/sessions.d.ts +7 -1
  332. package/dist/http/routes/sessions.js +177 -112
  333. package/dist/http/routes/shared-memory.js +6 -6
  334. package/dist/http/routes/side-query.js +2 -2
  335. package/dist/http/routes/tasks.js +144 -122
  336. package/dist/http/routes/trace-usage.d.ts +0 -12
  337. package/dist/http/routes/trace-usage.js +40 -46
  338. package/dist/http/routes/workflows.d.ts +39 -4
  339. package/dist/http/routes/workflows.js +42 -14
  340. package/dist/http/run-concurrency-cap.d.ts +20 -12
  341. package/dist/http/run-concurrency-cap.js +39 -26
  342. package/dist/http/run-read-face.d.ts +3 -5
  343. package/dist/http/run-read-face.js +8 -13
  344. package/dist/http/send.d.ts +12 -3
  345. package/dist/http/send.js +42 -6
  346. package/dist/http/server.d.ts +63 -50
  347. package/dist/http/server.js +52 -16
  348. package/dist/http/sse-log.d.ts +17 -10
  349. package/dist/http/sse-log.js +7 -7
  350. package/dist/http/stored-body-replay.d.ts +17 -3
  351. package/dist/http/stored-body-replay.js +11 -2
  352. package/dist/http/submit-ctx.d.ts +16 -8
  353. package/dist/http/submit-ctx.js +6 -2
  354. package/dist/http/submit-replay.d.ts +19 -6
  355. package/dist/http/submit-replay.js +18 -6
  356. package/dist/http/sync-submit-body.d.ts +3 -4
  357. package/dist/http/sync-submit-body.js +4 -5
  358. package/dist/http/wire-types.d.ts +23 -13
  359. package/dist/identity-source.d.ts +36 -5
  360. package/dist/identity-source.js +27 -0
  361. package/dist/index.d.ts +3 -2
  362. package/dist/index.js +2 -1
  363. package/dist/instruction-source-notice.d.ts +1 -1
  364. package/dist/key-resolver.d.ts +32 -0
  365. package/dist/key-resolver.js +23 -9
  366. package/dist/leader/diffup.js +2 -1
  367. package/dist/leader/endpoint.d.ts +26 -5
  368. package/dist/leader/endpoint.js +154 -14
  369. package/dist/leader/fanout.d.ts +3 -0
  370. package/dist/leader/fanout.js +78 -63
  371. package/dist/leader/leader.d.ts +16 -0
  372. package/dist/leader/leader.js +43 -3
  373. package/dist/leader/merge.d.ts +9 -1
  374. package/dist/leader/merge.js +16 -1
  375. package/dist/leader/repair-wire.js +1 -1
  376. package/dist/leader/wire.d.ts +36 -3
  377. package/dist/leader/wire.js +59 -18
  378. package/dist/lsp-evict.d.ts +6 -4
  379. package/dist/lsp-evict.js +2 -3
  380. package/dist/memory-embedder-reembed.d.ts +38 -0
  381. package/dist/memory-embedder-reembed.js +20 -0
  382. package/dist/memory-incident-sink.d.ts +0 -28
  383. package/dist/memory-incident-sink.js +5 -0
  384. package/dist/memory-operator-faces.d.ts +5 -4
  385. package/dist/memory-operator-faces.js +1 -1
  386. package/dist/memory-scope.d.ts +31 -4
  387. package/dist/memory-scope.js +65 -16
  388. package/dist/memory-store-refusal.d.ts +20 -4
  389. package/dist/memory-store-refusal.js +1 -1
  390. package/dist/memory-sync-client.d.ts +5 -2
  391. package/dist/memory-sync-client.js +19 -14
  392. package/dist/memory-sync.js +1 -1
  393. package/dist/model-compat.d.ts +51 -28
  394. package/dist/model-compat.js +55 -23
  395. package/dist/model-context-window.d.ts +18 -0
  396. package/dist/model-context-window.js +2 -0
  397. package/dist/model-entry-headers.d.ts +46 -4
  398. package/dist/model-entry-headers.js +2 -2
  399. package/dist/model-entry-refusal.d.ts +46 -17
  400. package/dist/model-entry-refusal.js +47 -27
  401. package/dist/model-plane-face.d.ts +19 -11
  402. package/dist/model-plane-face.js +9 -1
  403. package/dist/model-plane-probe.d.ts +2 -0
  404. package/dist/model-plane-probe.js +17 -0
  405. package/dist/model-provider.d.ts +3 -3
  406. package/dist/model-route-endpoint.d.ts +9 -5
  407. package/dist/model-route-endpoint.js +29 -7
  408. package/dist/model-select.d.ts +16 -0
  409. package/dist/model-select.js +4 -0
  410. package/dist/mountinfo.d.ts +37 -0
  411. package/dist/mountinfo.js +47 -0
  412. package/dist/namespaced-rule-name.d.ts +28 -2
  413. package/dist/namespaced-rule-name.js +10 -1
  414. package/dist/net-address.d.ts +1 -1
  415. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  416. package/dist/observability/corrupt-read-seat.js +5 -3
  417. package/dist/observability/fail-open.d.ts +75 -47
  418. package/dist/observability/fail-open.js +77 -47
  419. package/dist/observability/logger.d.ts +22 -1
  420. package/dist/observability/logger.js +89 -12
  421. package/dist/observability/metrics.d.ts +2 -0
  422. package/dist/observability/metrics.js +5 -4
  423. package/dist/observability/otel-exporter.js +2 -1
  424. package/dist/observability/principal-context.d.ts +14 -7
  425. package/dist/observability/principal-context.js +8 -3
  426. package/dist/observability/run-terminal.d.ts +7 -1
  427. package/dist/observability/run-terminal.js +5 -2
  428. package/dist/observability/secret-env-scrub.d.ts +30 -4
  429. package/dist/observability/secret-env-scrub.js +15 -3
  430. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  431. package/dist/orchestration/hardened-vm-runner.js +11 -5
  432. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  433. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  434. package/dist/orchestration/hardened-vm-worker.js +2 -1
  435. package/dist/orchestration/workflow-agent-session-index.d.ts +7 -12
  436. package/dist/orchestration/workflow-agent-session-index.js +1 -6
  437. package/dist/orchestration/workflow-completion-inbox.d.ts +29 -9
  438. package/dist/orchestration/workflow-completion-inbox.js +65 -46
  439. package/dist/org-delivery-gate.d.ts +5 -4
  440. package/dist/org-delivery-gate.js +7 -6
  441. package/dist/org-memory-admission.d.ts +5 -2
  442. package/dist/org-memory-admission.js +25 -10
  443. package/dist/outbound-dispatcher.d.ts +1 -1
  444. package/dist/outbound-dispatcher.js +6 -12
  445. package/dist/owner-brands.d.ts +81 -0
  446. package/dist/owner-brands.js +42 -0
  447. package/dist/owner-faces.d.ts +531 -0
  448. package/dist/owner-faces.js +126 -0
  449. package/dist/parked-decide.d.ts +100 -31
  450. package/dist/parked-decide.js +162 -48
  451. package/dist/parked-revive-surface.d.ts +14 -4
  452. package/dist/parked-revive-surface.js +5 -4
  453. package/dist/peer-directory.d.ts +6 -8
  454. package/dist/peer-directory.js +3 -2
  455. package/dist/permission-rule-vocab.d.ts +53 -8
  456. package/dist/permission-rule-vocab.js +30 -2
  457. package/dist/plugins/adoption-log-sql.d.ts +0 -22
  458. package/dist/plugins/adoption-log-sql.js +5 -3
  459. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  460. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  461. package/dist/plugins/approval-ask-store-file.d.ts +28 -9
  462. package/dist/plugins/approval-ask-store-file.js +74 -18
  463. package/dist/plugins/approval-ask-store-memory.d.ts +17 -7
  464. package/dist/plugins/approval-ask-store-memory.js +35 -12
  465. package/dist/plugins/approval-ask-store-sql.d.ts +42 -20
  466. package/dist/plugins/approval-ask-store-sql.js +44 -11
  467. package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
  468. package/dist/plugins/approval-exemption-skill-m46.js +25 -0
  469. package/dist/plugins/approval-exemption-store.d.ts +6 -1
  470. package/dist/plugins/approval-exemption-store.js +14 -0
  471. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  472. package/dist/plugins/approval-nonce-store.js +72 -23
  473. package/dist/plugins/blob-backend.d.ts +40 -195
  474. package/dist/plugins/blob-backend.js +41 -234
  475. package/dist/plugins/caching-session-store.d.ts +22 -5
  476. package/dist/plugins/caching-session-store.js +43 -4
  477. package/dist/plugins/checkpoint-index-columns.d.ts +33 -6
  478. package/dist/plugins/checkpoint-index-columns.js +39 -3
  479. package/dist/plugins/checkpoint-store-face.d.ts +84 -11
  480. package/dist/plugins/checkpoint-store-face.js +18 -1
  481. package/dist/plugins/device-store-sql.d.ts +2 -2
  482. package/dist/plugins/device-store-sql.js +6 -10
  483. package/dist/plugins/ensure-index.d.ts +13 -1
  484. package/dist/plugins/ensure-index.js +154 -21
  485. package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
  486. package/dist/plugins/ensure-schema-lock-policy.js +3 -2
  487. package/dist/plugins/execution-lane-rename-m40.d.ts +20 -0
  488. package/dist/plugins/execution-lane-rename-m40.js +10 -0
  489. package/dist/plugins/execution-placement-sql.d.ts +63 -88
  490. package/dist/plugins/execution-placement-sql.js +94 -54
  491. package/dist/plugins/file-run-store.d.ts +89 -35
  492. package/dist/plugins/file-run-store.js +197 -142
  493. package/dist/plugins/host-platform.d.ts +24 -3
  494. package/dist/plugins/host-platform.js +15 -1
  495. package/dist/plugins/image-bake-store-sql.js +2 -0
  496. package/dist/plugins/imported-layer-root-retirement.d.ts +19 -10
  497. package/dist/plugins/imported-layer-root-retirement.js +4 -8
  498. package/dist/plugins/inbox-payload-column.d.ts +14 -0
  499. package/dist/plugins/inbox-payload-column.js +13 -0
  500. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  501. package/dist/plugins/k8s-pod-reaper.js +0 -1
  502. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  503. package/dist/plugins/leader-run-store-sql.js +34 -4
  504. package/dist/plugins/local-checkpoint-store.d.ts +63 -23
  505. package/dist/plugins/local-checkpoint-store.js +204 -81
  506. package/dist/plugins/local-data-dir-modes-m39.d.ts +48 -0
  507. package/dist/plugins/local-data-dir-modes-m39.js +183 -0
  508. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  509. package/dist/plugins/local-docker-capacity.js +194 -0
  510. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  511. package/dist/plugins/local-docker-reaper.js +102 -0
  512. package/dist/plugins/local-engine-high-water.d.ts +13 -0
  513. package/dist/plugins/local-engine-high-water.js +62 -0
  514. package/dist/plugins/local-session-store.d.ts +442 -143
  515. package/dist/plugins/local-session-store.js +941 -289
  516. package/dist/plugins/local-session-window.d.ts +3 -2
  517. package/dist/plugins/local-session-window.js +3 -2
  518. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  519. package/dist/plugins/local-task-attachment-store.d.ts +20 -1
  520. package/dist/plugins/local-task-attachment-store.js +32 -12
  521. package/dist/plugins/memory-embedder-fingerprint.d.ts +33 -10
  522. package/dist/plugins/memory-embedder-fingerprint.js +52 -12
  523. package/dist/plugins/memory-embedder.d.ts +1 -1
  524. package/dist/plugins/memory-embedder.js +11 -9
  525. package/dist/plugins/memory-engine-pg.d.ts +7 -5
  526. package/dist/plugins/memory-engine-pg.js +18 -9
  527. package/dist/plugins/memory-engine-sql-apply.d.ts +21 -8
  528. package/dist/plugins/memory-engine-sql-apply.js +7 -9
  529. package/dist/plugins/memory-engine-tidb.d.ts +12 -7
  530. package/dist/plugins/memory-engine-tidb.js +18 -10
  531. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  532. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  533. package/dist/plugins/memory-run-store.d.ts +39 -27
  534. package/dist/plugins/memory-run-store.js +72 -70
  535. package/dist/plugins/one-time-migration-marker.d.ts +10 -0
  536. package/dist/plugins/one-time-migration-marker.js +7 -0
  537. package/dist/plugins/one-time-migrations.d.ts +325 -74
  538. package/dist/plugins/one-time-migrations.js +705 -230
  539. package/dist/plugins/org-delivery-quota-store.js +2 -1
  540. package/dist/plugins/owner-only-file-mode.d.ts +29 -0
  541. package/dist/plugins/owner-only-file-mode.js +141 -0
  542. package/dist/plugins/permission-rule-store-file.d.ts +11 -11
  543. package/dist/plugins/permission-rule-store-file.js +14 -2
  544. package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
  545. package/dist/plugins/permission-rule-store-sql.js +6 -86
  546. package/dist/plugins/pg-pool.d.ts +3 -32
  547. package/dist/plugins/pg-pool.js +27 -11
  548. package/dist/plugins/release-version.d.ts +20 -0
  549. package/dist/plugins/release-version.js +28 -0
  550. package/dist/plugins/remote-env-adb.d.ts +20 -4
  551. package/dist/plugins/remote-env-adb.js +39 -11
  552. package/dist/plugins/remote-env-e2b.d.ts +19 -28
  553. package/dist/plugins/remote-env-e2b.js +40 -29
  554. package/dist/plugins/remote-env-host.d.ts +11 -10
  555. package/dist/plugins/remote-env-host.js +40 -27
  556. package/dist/plugins/remote-env-k8s.d.ts +45 -47
  557. package/dist/plugins/remote-env-k8s.js +122 -62
  558. package/dist/plugins/remote-env-local-docker.d.ts +152 -15
  559. package/dist/plugins/remote-env-local-docker.js +370 -75
  560. package/dist/plugins/remote-env-ssh.d.ts +8 -2
  561. package/dist/plugins/remote-env-ssh.js +26 -24
  562. package/dist/plugins/remote-scratchpad.js +4 -0
  563. package/dist/plugins/remote-shell.d.ts +59 -30
  564. package/dist/plugins/remote-shell.js +175 -62
  565. package/dist/plugins/retention-declaration.d.ts +37 -0
  566. package/dist/plugins/retention-declaration.js +9 -0
  567. package/dist/plugins/retention-deployment.d.ts +158 -0
  568. package/dist/plugins/retention-deployment.js +119 -0
  569. package/dist/plugins/retention-lane-store-sql.d.ts +74 -4
  570. package/dist/plugins/retention-lane-store-sql.js +103 -1
  571. package/dist/plugins/retention-sql.d.ts +29 -0
  572. package/dist/plugins/retention-sql.js +8 -0
  573. package/dist/plugins/run-preview-m45.d.ts +11 -0
  574. package/dist/plugins/run-preview-m45.js +19 -0
  575. package/dist/plugins/run-store-sql.d.ts +56 -68
  576. package/dist/plugins/run-store-sql.js +127 -116
  577. package/dist/plugins/s3-answer.d.ts +2 -1
  578. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  579. package/dist/plugins/sandbox-reaper.js +2 -0
  580. package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
  581. package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
  582. package/dist/plugins/scheduler-support.d.ts +16 -1
  583. package/dist/plugins/scheduler-support.js +22 -2
  584. package/dist/plugins/schema-consistency.d.ts +42 -15
  585. package/dist/plugins/schema-consistency.js +213 -13
  586. package/dist/plugins/schema-drift-sentence.d.ts +4 -1
  587. package/dist/plugins/schema-drift-sentence.js +4 -4
  588. package/dist/plugins/schema-ensure-legs.d.ts +10 -1
  589. package/dist/plugins/schema-ensure-legs.js +12 -2
  590. package/dist/plugins/schema-indexes.js +3 -0
  591. package/dist/plugins/schema-live-columns.d.ts +14 -5
  592. package/dist/plugins/schema-live-columns.js +10 -10
  593. package/dist/plugins/send-user-file.js +2 -1
  594. package/dist/plugins/session-birth.d.ts +37 -0
  595. package/dist/plugins/session-birth.js +38 -0
  596. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  597. package/dist/plugins/session-epoch-anchor.js +33 -11
  598. package/dist/plugins/session-ext-table.d.ts +98 -0
  599. package/dist/plugins/session-ext-table.js +134 -0
  600. package/dist/plugins/session-fork.d.ts +16 -2
  601. package/dist/plugins/session-fork.js +3 -0
  602. package/dist/plugins/session-ownership.d.ts +1 -1
  603. package/dist/plugins/session-placement.d.ts +22 -16
  604. package/dist/plugins/session-placement.js +15 -12
  605. package/dist/plugins/session-row-sql.d.ts +20 -7
  606. package/dist/plugins/session-row-sql.js +16 -8
  607. package/dist/plugins/session-run-rollup.d.ts +29 -0
  608. package/dist/plugins/session-run-rollup.js +40 -0
  609. package/dist/plugins/session-store-sql.d.ts +157 -0
  610. package/dist/plugins/session-store-sql.js +398 -0
  611. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  612. package/dist/plugins/session-withdraw-sql.js +42 -0
  613. package/dist/plugins/session-workspace-cell.d.ts +2 -2
  614. package/dist/plugins/session-workspace-cell.js +2 -2
  615. package/dist/plugins/shared-memory-store-sql.d.ts +10 -69
  616. package/dist/plugins/shared-memory-store-sql.js +15 -14
  617. package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
  618. package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
  619. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  620. package/dist/plugins/snapshot-bucket-presence.js +1 -1
  621. package/dist/plugins/sql-driver.d.ts +24 -8
  622. package/dist/plugins/sql-driver.js +43 -9
  623. package/dist/plugins/sql-errors.d.ts +35 -5
  624. package/dist/plugins/sql-errors.js +55 -3
  625. package/dist/plugins/sql-json-column.d.ts +8 -7
  626. package/dist/plugins/sql-json-column.js +10 -6
  627. package/dist/plugins/store-backend.d.ts +114 -18
  628. package/dist/plugins/store-backend.js +340 -87
  629. package/dist/plugins/store-contracts.d.ts +97 -30
  630. package/dist/plugins/store-contracts.js +23 -1
  631. package/dist/plugins/store-fault.d.ts +28 -2
  632. package/dist/plugins/store-fault.js +20 -2
  633. package/dist/plugins/task-attachment-store.d.ts +21 -11
  634. package/dist/plugins/task-attachment-store.js +37 -19
  635. package/dist/plugins/task-list-store-sql.d.ts +1 -1
  636. package/dist/plugins/text-column-capacity.d.ts +21 -0
  637. package/dist/plugins/text-column-capacity.js +5 -0
  638. package/dist/plugins/tidb-pool.d.ts +3 -2
  639. package/dist/plugins/tidb-pool.js +42 -39
  640. package/dist/plugins/user-input-ledger-sql.d.ts +1 -1
  641. package/dist/plugins/web-search.js +5 -3
  642. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  643. package/dist/plugins/workflow-run-store-sql.js +11 -5
  644. package/dist/principal-jwt.d.ts +4 -4
  645. package/dist/principal-jwt.js +20 -5
  646. package/dist/principal-shape.d.ts +41 -0
  647. package/dist/principal-shape.js +19 -0
  648. package/dist/question.d.ts +13 -23
  649. package/dist/question.js +21 -39
  650. package/dist/read-face-posture.d.ts +6 -6
  651. package/dist/read-face-posture.js +2 -2
  652. package/dist/request-declaration-refusal.d.ts +35 -12
  653. package/dist/request-declaration-refusal.js +21 -9
  654. package/dist/request-form.d.ts +58 -0
  655. package/dist/request-form.js +72 -0
  656. package/dist/request-image-urls.d.ts +8 -2
  657. package/dist/request-image-urls.js +2 -1
  658. package/dist/request-images.d.ts +20 -0
  659. package/dist/request-images.js +59 -0
  660. package/dist/request-key-closure.d.ts +6 -7
  661. package/dist/request-key-closure.js +15 -2
  662. package/dist/request-value-closure.d.ts +5 -5
  663. package/dist/request-value-closure.js +1 -1
  664. package/dist/resource-suspend.d.ts +7 -16
  665. package/dist/resource-suspend.js +1 -1
  666. package/dist/retired-name-host-notice.d.ts +21 -0
  667. package/dist/retired-name-host-notice.js +12 -0
  668. package/dist/rule-entry-list.d.ts +2 -2
  669. package/dist/rule-entry-list.js +3 -4
  670. package/dist/rule-issue-reading.d.ts +58 -0
  671. package/dist/rule-issue-reading.js +14 -0
  672. package/dist/rules-consent.d.ts +46 -16
  673. package/dist/rules-consent.js +102 -53
  674. package/dist/run-acceptance.d.ts +3 -1
  675. package/dist/run-acceptance.js +3 -0
  676. package/dist/run-local.d.ts +14 -6
  677. package/dist/run-local.js +109 -93
  678. package/dist/run-stale-default.d.ts +7 -0
  679. package/dist/run-stale-default.js +2 -0
  680. package/dist/runs.d.ts +73 -44
  681. package/dist/runs.js +65 -43
  682. package/dist/runtime-caps-resolver.d.ts +36 -14
  683. package/dist/runtime-caps-resolver.js +31 -14
  684. package/dist/runtime-governance.d.ts +2 -2
  685. package/dist/runtime-governance.js +5 -3
  686. package/dist/sealed-key-layout.d.ts +12 -6
  687. package/dist/sealed-key-layout.js +5 -1
  688. package/dist/sealed-key.d.ts +12 -2
  689. package/dist/sealed-key.js +116 -26
  690. package/dist/security.d.ts +133 -161
  691. package/dist/security.js +163 -59
  692. package/dist/sema-config-dir.d.ts +20 -0
  693. package/dist/sema-config-dir.js +27 -2
  694. package/dist/server-secret-env.d.ts +23 -5
  695. package/dist/server-secret-env.js +14 -4
  696. package/dist/service-version.d.ts +2 -1
  697. package/dist/service-version.js +2 -2
  698. package/dist/session-children-retire.d.ts +7 -5
  699. package/dist/session-children-retire.js +7 -2
  700. package/dist/session-deletion.d.ts +88 -0
  701. package/dist/session-deletion.js +8 -0
  702. package/dist/session-erase.d.ts +145 -0
  703. package/dist/session-erase.js +115 -0
  704. package/dist/session-error-wire.d.ts +6 -6
  705. package/dist/session-error-wire.js +1 -1
  706. package/dist/session-incarnation.d.ts +60 -10
  707. package/dist/session-incarnation.js +19 -2
  708. package/dist/session-policy-wire.d.ts +6 -3
  709. package/dist/session-policy-wire.js +11 -1
  710. package/dist/session-resident-background.d.ts +29 -47
  711. package/dist/session-resident-background.js +77 -8
  712. package/dist/session-row.d.ts +3 -2
  713. package/dist/session-rules-seat.d.ts +12 -0
  714. package/dist/session-rules-seat.js +19 -0
  715. package/dist/session-sync-kernel.d.ts +1 -1
  716. package/dist/session-titler.d.ts +7 -15
  717. package/dist/session-titler.js +1 -1
  718. package/dist/session-workspace.d.ts +11 -2
  719. package/dist/session-workspace.js +5 -0
  720. package/dist/sighup-idle.d.ts +1 -1
  721. package/dist/spec-fields.d.ts +57 -3
  722. package/dist/spec-fields.js +72 -51
  723. package/dist/store-posture.d.ts +138 -21
  724. package/dist/store-posture.js +188 -3
  725. package/dist/stored-request-hooks-m20.d.ts +3 -2
  726. package/dist/stored-request-hooks-m20.js +21 -16
  727. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  728. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  729. package/dist/stores-sql/blob-index-sql.d.ts +148 -0
  730. package/dist/stores-sql/blob-index-sql.js +154 -0
  731. package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
  732. package/dist/stores-sql/checkpoint-store-sql.js +86 -71
  733. package/dist/{plugins → stores-sql}/file-history-store-sql.d.ts +23 -11
  734. package/dist/{plugins → stores-sql}/file-history-store-sql.js +23 -18
  735. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  736. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  737. package/dist/{plugins → stores-sql}/pg-session-storage.d.ts +30 -81
  738. package/dist/{plugins → stores-sql}/pg-session-storage.js +123 -244
  739. package/dist/{plugins → stores-sql}/retention-store-sql.d.ts +197 -223
  740. package/dist/{plugins → stores-sql}/retention-store-sql.js +148 -207
  741. package/dist/{plugins → stores-sql}/session-event-payload.d.ts +1 -1
  742. package/dist/{plugins → stores-sql}/session-event-payload.js +1 -1
  743. package/dist/stores-sql/session-policy-store-sql.d.ts +33 -11
  744. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  745. package/dist/stores-sql/session-write-hooks.d.ts +65 -0
  746. package/dist/stores-sql/session-write-hooks.js +2 -0
  747. package/dist/{plugins → stores-sql}/tidb-session-storage.d.ts +14 -15
  748. package/dist/{plugins → stores-sql}/tidb-session-storage.js +22 -28
  749. package/dist/{plugins → stores-sql}/tidb-session-store.d.ts +67 -138
  750. package/dist/{plugins → stores-sql}/tidb-session-store.js +130 -200
  751. package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
  752. package/dist/stores-sql/tool-result-store-sql.js +1 -1
  753. package/dist/stores-sql/windowed-session-storage.d.ts +61 -0
  754. package/dist/stores-sql/windowed-session-storage.js +70 -0
  755. package/dist/submission-exit.d.ts +50 -0
  756. package/dist/submission-exit.js +108 -0
  757. package/dist/task-a2a.d.ts +7 -1
  758. package/dist/task-a2a.js +18 -17
  759. package/dist/task-cwd.d.ts +31 -3
  760. package/dist/task-cwd.js +25 -1
  761. package/dist/task-mcp.d.ts +11 -3
  762. package/dist/task-mcp.js +16 -19
  763. package/dist/task-settings.d.ts +23 -14
  764. package/dist/task-settings.js +35 -13
  765. package/dist/terminal.d.ts +25 -43
  766. package/dist/terminal.js +31 -11
  767. package/dist/tool-approval.d.ts +152 -137
  768. package/dist/tool-approval.js +199 -199
  769. package/dist/trace/core-keyset-guard.d.ts +22 -9
  770. package/dist/trace/core-vocab-wire.d.ts +95 -0
  771. package/dist/trace/core-vocab-wire.js +15 -0
  772. package/dist/trace/engine-notice-wire.d.ts +1 -1
  773. package/dist/trace/engine-notice-wire.js +2 -0
  774. package/dist/trace/exit-seat.d.ts +52 -4
  775. package/dist/trace/exit-seat.js +43 -36
  776. package/dist/trace/extension-call-face.d.ts +3 -2
  777. package/dist/trace/extension-call-face.js +3 -1
  778. package/dist/trace/ledger-events.d.ts +4 -7
  779. package/dist/trace/ledger-sink.d.ts +1 -30
  780. package/dist/trace/ledger-sink.js +0 -11
  781. package/dist/trace/model-segment.d.ts +5 -5
  782. package/dist/trace/model-segment.js +5 -5
  783. package/dist/trace/project.d.ts +88 -58
  784. package/dist/trace/project.js +64 -28
  785. package/dist/trace/redact.d.ts +124 -28
  786. package/dist/trace/redact.js +936 -328
  787. package/dist/trace/self-minted-wire.d.ts +750 -29
  788. package/dist/trace/self-minted-wire.js +262 -25
  789. package/dist/trace/sema-provenance.d.ts +45 -41
  790. package/dist/trace/sema-provenance.js +81 -10
  791. package/dist/trace/task-notification-facets.d.ts +70 -2
  792. package/dist/trace/task-notification-facets.js +71 -1
  793. package/dist/trace/wire-projection-faces.d.ts +43 -8
  794. package/dist/trace/wire-projection-faces.js +28 -3
  795. package/dist/unread-request-members.d.ts +66 -0
  796. package/dist/unread-request-members.js +41 -0
  797. package/dist/upstream-body.d.ts +23 -0
  798. package/dist/upstream-body.js +16 -0
  799. package/dist/url-refusal.d.ts +3 -3
  800. package/dist/url-refusal.js +11 -4
  801. package/dist/user-authored-text.d.ts +1 -1
  802. package/dist/user-input-ledger.d.ts +7 -8
  803. package/dist/user-input-ledger.js +1 -1
  804. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  805. package/dist/web-admin-client/apply-effective.js +33 -40
  806. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  807. package/dist/web-admin-client/apply-ledger.js +5 -2
  808. package/dist/web-admin-client/candidate-gate.d.ts +35 -3
  809. package/dist/web-admin-client/candidate-gate.js +53 -5
  810. package/dist/web-admin-client/center-request.d.ts +6 -3
  811. package/dist/web-admin-client/center-request.js +17 -16
  812. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  813. package/dist/web-admin-client/effective-keys.js +1 -2
  814. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  815. package/dist/web-admin-client/entry-metadata.js +13 -0
  816. package/dist/web-admin-client/facade.d.ts +1 -1
  817. package/dist/web-admin-client/http-client.d.ts +2 -1
  818. package/dist/web-admin-client/http-client.js +40 -13
  819. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  820. package/dist/web-admin-client/mcp-revocation.js +2 -1
  821. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  822. package/dist/web-admin-client/read-warnings.js +1 -0
  823. package/dist/web-admin-client/restart-signal.js +13 -6
  824. package/dist/web-admin-client/skills-mcp.d.ts +22 -8
  825. package/dist/web-admin-client/skills-mcp.js +26 -21
  826. package/dist/web-admin-client/types.d.ts +35 -51
  827. package/dist/workspace-space.d.ts +3 -2
  828. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  829. package/package.json +16 -12
  830. package/scripts/drain-check-local.mjs +118 -173
  831. package/scripts/drain-check.mysql.sql +20 -16
  832. package/scripts/drain-check.pg.sql +20 -16
  833. package/wire-changes/server@7.147.0.json +813 -0
  834. package/wire-changes/server@7.148.0.json +1517 -0
  835. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  836. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  837. package/dist/http/memory-layer-reply.d.ts +0 -30
  838. package/dist/http/memory-layer-reply.js +0 -24
  839. package/dist/lsp/e2b-bridge.d.ts +0 -57
  840. package/dist/lsp/e2b-bridge.js +0 -139
  841. package/dist/lsp/e2b-manager.d.ts +0 -93
  842. package/dist/lsp/e2b-manager.js +0 -178
  843. package/dist/lsp/lsp-frames.d.ts +0 -14
  844. package/dist/lsp/lsp-frames.js +0 -25
  845. package/dist/lsp/manager.d.ts +0 -129
  846. package/dist/lsp/manager.js +0 -127
  847. package/dist/lsp/types.d.ts +0 -12
  848. package/dist/lsp/types.js +0 -2
  849. package/dist/lsp/ws-transport.d.ts +0 -40
  850. package/dist/lsp/ws-transport.js +0 -210
@@ -1,4 +1,5 @@
1
1
  import { mysqlDriver, pgDriver, dialectJsonEncoder } from "./sql-driver.js";
2
+ import { retentionIdSet } from "./retention-sql.js";
2
3
  import { ASK_TERMINAL, canAskTransition } from "../approval-ask-machine.js";
3
4
  import { DECIDED_VIA } from "@sema-agent/core";
4
5
  import { APPROVAL_ENDING_CAUSES, askRowEndingCause, askRowParkTrigger } from "../approval-deny-reasons.js";
@@ -7,6 +8,7 @@ import { describeProbedTableDrift } from "./schema-drift-sentence.js";
7
8
  import { decodeJsonColumn, foldJsonColumn, jsonColumnText, readJsonObjectColumn, readTriStateJsonValueColumn } from "./sql-json-column.js";
8
9
  import { ensureIndexes } from "./ensure-index.js";
9
10
  import { isExecutionLane } from "../execution-lane-caps.js";
11
+ import { retiredExecutionLaneHintM40 } from "./execution-lane-rename-m40.js";
10
12
  export function assertIntegralEpochMs(field, value) {
11
13
  if (!Number.isSafeInteger(value)) {
12
14
  throw new TypeError(`approval-ask store: ${field} must be an integer epoch-ms (BIGINT column), got ${String(value)}`);
@@ -110,6 +112,7 @@ export function projectAskTerminalClaimTruth(row) {
110
112
  ...(row.updatedInput !== undefined ? { updatedInput: row.updatedInput } : {}),
111
113
  settledBy: row.settledBy,
112
114
  decidedVia: row.decidedVia,
115
+ decisionNote: row.decisionNote,
113
116
  ...(endingCause !== undefined ? { endingCause } : {}),
114
117
  ...(parkTrigger !== undefined ? { parkTrigger } : {}),
115
118
  };
@@ -117,15 +120,26 @@ export function projectAskTerminalClaimTruth(row) {
117
120
  export function askRowOnCall(row, call) {
118
121
  return row.taskId === call.taskId && row.legKey === call.legKey && row.toolCallId === call.toolCallId && row.sourceSessionId === call.sourceSessionId;
119
122
  }
120
- export function askOwnerAdmits(owner, principal) {
121
- return owner === null || owner === principal;
122
- }
123
123
  export function askRowCarriesOwner(row, owner) {
124
124
  return row !== null && row.owner === owner;
125
125
  }
126
126
  export function projectDecideReading(row, owner) {
127
127
  return askRowCarriesOwner(row, owner) ? row : null;
128
128
  }
129
+ export function askAttachedToSession(row, sessionId) {
130
+ return row.taskId !== sessionId && (row.sessionId === sessionId || row.sourceSessionId === sessionId);
131
+ }
132
+ const ASK_SESSION_CELLS = ["session_id", "source_task_id"];
133
+ export async function deleteSessionApprovalRows(exec, dialect, ids) {
134
+ if (ids.length === 0)
135
+ return;
136
+ for (const cell of ASK_SESSION_CELLS) {
137
+ const inAsk = retentionIdSet(dialect, `a.${cell}`, ids, 1);
138
+ await exec.query(`DELETE FROM ${APPROVAL_BATCH_TABLE} WHERE batch_id IN (SELECT a.batch_id FROM ${APPROVAL_ASK_TABLE} a WHERE ${inAsk.sql} AND a.${cell} <> a.task_id)`, inAsk.params);
139
+ const own = retentionIdSet(dialect, cell, ids, 1);
140
+ await exec.query(`DELETE FROM ${APPROVAL_ASK_TABLE} WHERE ${own.sql} AND ${cell} <> task_id`, own.params);
141
+ }
142
+ }
129
143
  export const APPROVAL_ASK_TABLE = "approval_ask";
130
144
  export const APPROVAL_ASK_EXECUTION_LANE_COLUMN = {
131
145
  mysql: "execution_lane VARCHAR(32) NOT NULL DEFAULT ''",
@@ -144,7 +158,7 @@ export const APPROVAL_ASK_PARK_TRIGGER_COLUMN = {
144
158
  function executionLaneColumnOf(raw, askId) {
145
159
  const lane = typeof raw === "string" ? raw : "";
146
160
  if (!isExecutionLane(lane)) {
147
- throw new Error(`approval-ask-store: ask ${askId} carries execution_lane ${JSON.stringify(lane)}, which is not an execution lane — the execution placement switch migration backfills every row; refusing rather than guess the lane this ask was raised on`);
161
+ throw new Error(`approval-ask-store: ask ${askId} carries execution_lane ${JSON.stringify(lane)}, which is not an execution lane — the execution placement switch migration backfills every row; refusing rather than guess the lane this ask was raised on${retiredExecutionLaneHintM40(lane)}`);
148
162
  }
149
163
  return lane;
150
164
  }
@@ -233,7 +247,9 @@ export const TIDB_APPROVAL_ASK_STATEMENTS = [
233
247
  -- 表尚未进生产 ⇒ 此刻加索引零迁移成本,晚一车加就要动生产表。
234
248
  KEY idx_ask_session_state (session_id, state),
235
249
  KEY idx_ask_batch (batch_id),
236
- KEY idx_ask_state (state)
250
+ KEY idx_ask_state (state),
251
+ -- idx_ask_source_session:删会话的审批腿按发问格选行(deleteSessionApprovalRows);宿主格走上面 idx_ask_session_state 的前缀。
252
+ KEY idx_ask_source_session (source_task_id)
237
253
  ) COLLATE utf8mb4_bin`,
238
254
  ];
239
255
  export async function ensureTiDBApprovalAskSchema(pool) {
@@ -242,10 +258,12 @@ export async function ensureTiDBApprovalAskSchema(pool) {
242
258
  }
243
259
  export const APPROVAL_ASK_INDEXES = [
244
260
  { table: `${APPROVAL_BATCH_TABLE}`, name: "idx_batch_task", columns: ["task_id"] },
261
+ { table: `${APPROVAL_ASK_TABLE}`, name: "uq_approval_ask_idem", columns: ["task_id", "idempotency_key"], unique: true },
245
262
  { table: `${APPROVAL_ASK_TABLE}`, name: "idx_ask_task_state", columns: ["task_id", "state"] },
246
263
  { table: `${APPROVAL_ASK_TABLE}`, name: "idx_ask_session_state", columns: ["session_id", "state"] },
247
264
  { table: `${APPROVAL_ASK_TABLE}`, name: "idx_ask_batch", columns: ["batch_id"] },
248
265
  { table: `${APPROVAL_ASK_TABLE}`, name: "idx_ask_state", columns: ["state"] },
266
+ { table: `${APPROVAL_ASK_TABLE}`, name: "idx_ask_source_session", columns: ["source_task_id"] },
249
267
  ];
250
268
  export async function ensurePgApprovalAskSchema(q) {
251
269
  await q(`CREATE TABLE IF NOT EXISTS ${APPROVAL_BATCH_TABLE} (
@@ -774,9 +792,9 @@ export class SqlApprovalAskStore {
774
792
  const { rows } = await this.db.query(this.q(`SELECT ${askCols("mysql")} FROM ${APPROVAL_ASK_TABLE} WHERE task_id = ? AND leg_key = ? AND tool_call_id = ? AND source_task_id = ? ORDER BY created_at_ms ASC, ask_id ASC`, `SELECT ${askCols("pg")} FROM ${APPROVAL_ASK_TABLE} WHERE task_id = $1 AND leg_key = $2 AND tool_call_id = $3 AND source_task_id = $4 ORDER BY created_at_ms ASC, ask_id ASC`), [call.taskId, call.legKey, call.toolCallId, call.sourceSessionId]);
775
793
  return rows.map(mapAskRow).filter((r) => askRowOnCall(r, call));
776
794
  }
777
- async listParkingBySession(sessionId) {
778
- const { rows } = await this.db.query(this.q(`SELECT ${askCols("mysql")} FROM ${APPROVAL_ASK_TABLE} WHERE session_id = ? AND state = 'PARKING' ORDER BY created_at_ms ASC, ask_id ASC`, `SELECT ${askCols("pg")} FROM ${APPROVAL_ASK_TABLE} WHERE session_id = $1 AND state = 'PARKING' ORDER BY created_at_ms ASC, ask_id ASC`), [sessionId]);
779
- return rows.map(mapAskRow).filter((r) => r.sessionId === sessionId);
795
+ async listParkingBySourceSession(sourceSessionId) {
796
+ const { rows } = await this.db.query(this.q(`SELECT ${askCols("mysql")} FROM ${APPROVAL_ASK_TABLE} WHERE source_task_id = ? AND state = 'PARKING' ORDER BY created_at_ms ASC, ask_id ASC`, `SELECT ${askCols("pg")} FROM ${APPROVAL_ASK_TABLE} WHERE source_task_id = $1 AND state = 'PARKING' ORDER BY created_at_ms ASC, ask_id ASC`), [sourceSessionId]);
797
+ return rows.map(mapAskRow).filter((r) => r.sourceSessionId === sourceSessionId);
780
798
  }
781
799
  async getAsk(askId) {
782
800
  const { rows } = await this.db.query(this.q(`SELECT ${askCols("mysql")} FROM ${APPROVAL_ASK_TABLE} WHERE ask_id = ?`, `SELECT ${askCols("pg")} FROM ${APPROVAL_ASK_TABLE} WHERE ask_id = $1`), [
@@ -806,9 +824,24 @@ export class SqlApprovalAskStore {
806
824
  const res = await this.db.query(`UPDATE ${APPROVAL_ASK_TABLE} SET ${setSql}, rev = rev + 1 WHERE ask_id = ${askIdPh} AND provisional = ${provPh} AND state = ${fromPh}`, [...vals, askId, 1, from]);
807
825
  return res.affected === 1;
808
826
  }
809
- async deleteByTask(taskId) {
810
- await this.db.query(this.q(`DELETE FROM ${APPROVAL_ASK_TABLE} WHERE task_id = ?`, `DELETE FROM ${APPROVAL_ASK_TABLE} WHERE task_id = $1`), [taskId]);
811
- await this.db.query(this.q(`DELETE FROM ${APPROVAL_BATCH_TABLE} WHERE task_id = ?`, `DELETE FROM ${APPROVAL_BATCH_TABLE} WHERE task_id = $1`), [taskId]);
827
+ async deleteBySession(sessionId) {
828
+ const conn = await this.db.connect();
829
+ try {
830
+ await conn.begin();
831
+ await deleteSessionApprovalRows(conn, this.db.dialect, [sessionId]);
832
+ await conn.commit();
833
+ }
834
+ catch (err) {
835
+ try {
836
+ await conn.rollback();
837
+ }
838
+ catch {
839
+ }
840
+ throw err;
841
+ }
842
+ finally {
843
+ conn.release();
844
+ }
812
845
  }
813
846
  async reapSettledAsks(cutoffMs, limit, keepAnchors) {
814
847
  assertReapBounds(cutoffMs, limit);
@@ -0,0 +1,20 @@
1
+ import type { FileApprovalExemptionStore } from "./approval-exemption-store.js";
2
+ /** 本条在标记表(`one-time-migration-marker.ts`)里的那一行的键。 */
3
+ export declare const LEGACY_SKILL_EXEMPTION_MARKER_ID = "M46";
4
+ /** local 车道的标记文件(数据根下,文件名即本条;正文 = T0 的 ISO 时刻一行,人可直接读)。 */
5
+ export declare const LOCAL_LEGACY_SKILL_EXEMPTION_MARKER_FILE = "one-time-migration-M46.marker";
6
+ /** 被删行的 wire 工具名 —— 引擎 `Skill` 工具的名字,core 导出(core 改名 ⇒ 谓词跟着走,不会静默指向空气)。 */
7
+ export declare const LEGACY_SKILL_EXEMPTION_TOOL_NAME: string;
8
+ /** SQL 腿一页的会话数(键集分批:`session_id` 升序,一页一次读、一句删)。 */
9
+ export declare const LEGACY_SKILL_EXEMPTION_PAGE = 500;
10
+ /**
11
+ * local 腿的 T0:标记文件在 ⇒ 读它(正文 = T0 的 ISO 时刻);不在 ⇒ **先**原子落盘再返回(`required`:标记没落盘就不算开始过 —— 写不进 ⇒ 抛,起服拒,下一次起服重来,一行没删)。
12
+ * 标记文件在而读不出(正文不是时刻 —— 手改过 / 写坏了)⇒ **响亮拒启**,点名文件与出路:不替人猜一个 T0(猜晚了会多删、猜早了会少删)。出路 = 删掉那只文件再起服(本步取新的 T0)。
13
+ */
14
+ export declare function legacySkillExemptionCutoffLocal(markerPath: string, now?: () => number): number;
15
+ /**
16
+ * 🔴 M46 的 local 腿(唯一调用点 `LocalBackend.runOneTimeMigrations`):T0 先落盘,再对 File 店删「首次放行早于 T0 的 `Skill` 行」(墓碑,与按名撤销同形)。返回删了几行。
17
+ * 数据根独占(根锁):同一只根上没有第二个起服者,也没有更早版本的副本与本次并跑。
18
+ */
19
+ export declare function dropLocalLegacySkillExemptionsM46(markerPath: string, store: Pick<FileApprovalExemptionStore, "dropToolRowsCreatedBeforeM46">): number;
20
+ //# sourceMappingURL=approval-exemption-skill-m46.d.ts.map
@@ -0,0 +1,25 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { SKILL_TOOL_NAME } from "@sema-agent/core";
3
+ import { atomicWriteFileSync } from "./owner-only-file-mode.js";
4
+ import { StoreBootRefusalError } from "./store-contracts.js";
5
+ export const LEGACY_SKILL_EXEMPTION_MARKER_ID = "M46";
6
+ export const LOCAL_LEGACY_SKILL_EXEMPTION_MARKER_FILE = "one-time-migration-M46.marker";
7
+ export const LEGACY_SKILL_EXEMPTION_TOOL_NAME = SKILL_TOOL_NAME;
8
+ export const LEGACY_SKILL_EXEMPTION_PAGE = 500;
9
+ export function legacySkillExemptionCutoffLocal(markerPath, now = Date.now) {
10
+ if (existsSync(markerPath)) {
11
+ const marked = Date.parse(readFileSync(markerPath, "utf8").trim());
12
+ if (!Number.isFinite(marked)) {
13
+ throw new StoreBootRefusalError(`one-time migration ${LEGACY_SKILL_EXEMPTION_MARKER_ID}: ${markerPath} exists but does not hold a readable cutoff time (expected one ISO time, e.g. 2026-11-06T09:00:00.000Z); ` +
14
+ `refusing to start rather than guess which stored Skill exemption rows predate the upgrade. Delete the file and restart: the step then records a new cutoff (now) and deletes the stored Skill exemption rows older than it.`);
15
+ }
16
+ return marked;
17
+ }
18
+ const t0 = now();
19
+ atomicWriteFileSync(markerPath, `${new Date(t0).toISOString()}\n`, { durability: "required" });
20
+ return t0;
21
+ }
22
+ export function dropLocalLegacySkillExemptionsM46(markerPath, store) {
23
+ return store.dropToolRowsCreatedBeforeM46(LEGACY_SKILL_EXEMPTION_TOOL_NAME, legacySkillExemptionCutoffLocal(markerPath));
24
+ }
25
+ //# sourceMappingURL=approval-exemption-skill-m46.js.map
@@ -66,7 +66,7 @@ export declare class FileApprovalExemptionStore implements ApprovalExemptionStor
66
66
  /** [ref]: sanitized session key → that session log's gate (only files that replayed a bad record are listed). */
67
67
  private readonly corruptGates;
68
68
  private readonly warn;
69
- /** @param opts.warn corrupt-read disclosure seat (`LocalBackend` wires `discloseWarn`; absent ⇒ the owner falls back to `console.warn`, never to silence). */
69
+ /** @param opts.warn corrupt-read disclosure seat (`LocalBackend` wires `discloseWarn`; absent ⇒ the owner falls back to the log seam's text exit `writeLogText`, never to silence). */
70
70
  constructor(root: string, opts?: {
71
71
  warn?: Logger["warn"];
72
72
  });
@@ -80,6 +80,11 @@ export declare class FileApprovalExemptionStore implements ApprovalExemptionStor
80
80
  has(sessionId: string, toolName: string): Promise<boolean>;
81
81
  list(sessionId: string): Promise<ApprovalExemptionRow[]>;
82
82
  revoke(sessionId: string, toolName: string): Promise<boolean>;
83
+ /**
84
+ * 一次性迁移 M46 的 local 腿(窗关随 M46 删;登记表 `removal` 点名):每只会话上 `toolName` 那一行的**首次放行**早于 `beforeMs` 的,追加一条墓碑(与 {@link revoke} 同形、fsync)并出索引。
85
+ * 返回删了几行。日志已被判坏的会话不碰(它的 `has` / `list` 本来就拒;删会话即清闸)。幂等:删过的行不在索引里,第二跑零命中。
86
+ */
87
+ dropToolRowsCreatedBeforeM46(toolName: string, beforeMs: number): number;
83
88
  deleteBySession(sessionId: string): Promise<number>;
84
89
  /** Release every open append-log fd (LocalBackend.close → graceful-restart re-open). */
85
90
  dispose(): void;
@@ -212,6 +212,20 @@ export class FileApprovalExemptionStore {
212
212
  m.delete(toolName);
213
213
  return true;
214
214
  }
215
+ dropToolRowsCreatedBeforeM46(toolName, beforeMs) {
216
+ let dropped = 0;
217
+ for (const [key, m] of this.bySession) {
218
+ if (this.corruptGates.has(key))
219
+ continue;
220
+ const row = m.get(toolName);
221
+ if (row === undefined || !(row.createdAt < beforeMs))
222
+ continue;
223
+ this.logFor(key).append({ toolName, grantedBy: null, ts: new Date().toISOString(), revoked: true }, true);
224
+ m.delete(toolName);
225
+ dropped += 1;
226
+ }
227
+ return dropped;
228
+ }
215
229
  async deleteBySession(sessionId) {
216
230
  const key = sanitizePathComponent(sessionId);
217
231
  const removed = this.bySession.get(key)?.size ?? 0;
@@ -1,7 +1,7 @@
1
1
  import type { Pool as MysqlPool } from "mysql2/promise";
2
2
  import type { Pool as PgPool } from "pg";
3
3
  import { type SqlDriver } from "./sql-driver.js";
4
- import type { Logger } from "../observability/logger.js";
4
+ import { type Logger } from "../observability/logger.js";
5
5
  /** 表名(单数形;`test/schema-naming-invariants.test.ts` 的闭集词表钉着)。 */
6
6
  export declare const APPROVAL_NONCE_TABLE = "approval_nonce";
7
7
  /**
@@ -10,6 +10,12 @@ export declare const APPROVAL_NONCE_TABLE = "approval_nonce";
10
10
  * 设限是**保守**方向(星平面字符在 JS 里算 2、在两个引擎的 VARCHAR 里算 1),永远不会撞到列宽。
11
11
  */
12
12
  export declare const MAX_APPROVAL_NONCE_CHARS = 190;
13
+ /** 时间地板的表名(单行表,与 `retention_lease` 同形:`singleton` 恒 `'x'`)。判据见头注「时间地板」。 */
14
+ export declare const APPROVAL_NONCE_FLOOR_TABLE = "approval_nonce_floor";
15
+ /** 原始钟低于地板(钟被往回拨)时那一行 warn 的事件名。字段:`rolledBackMs`(地板 − 原始钟)/ `floorMs` / `clockMs`(原始钟读数)/ `store`(哪条腿)。 */
16
+ export declare const APPROVAL_NONCE_CLOCK_ROLLBACK_EVENT = "approval_nonce_clock_rollback";
17
+ /** 回拨 warn 的落点;店没接日志座时退回日志出口接缝的缺省 logger(不退回沉默)。 */
18
+ export type ApprovalNonceWarn = Logger["warn"];
13
19
  export interface ApprovalNonceStore {
14
20
  /**
15
21
  * **这只店为它的记录计时的那口钟**(epoch ms)—— 见头注「到期 —— 一口钟」。
@@ -17,9 +23,8 @@ export interface ApprovalNonceStore {
17
23
  * 它是消费记录这条命上**唯一**的参照:受理窗的判定、落地后的复核、到期清扫三处全读它,于是
18
24
  * 「还受理 ⇒ 记录还在」是结构性的,不靠「两台副本的钟差不多」这条没人声明过的假设。
19
25
  *
20
- * ⚠️ **要求:单调不减**。同源只挡「两只钟各走各的」,挡不住「这一只往回走」—— 钟回拨会让一条已被
21
- * 清扫的记录所对应的证明重新过验签(头注「由构造」那段的残余,🚧 见 `approval-nonce-store.test.ts`)。
22
- * 现役三实现都**不**自己强制这一条(Memory/File = `Date.now()`,SQL = 库钟),登记在案。
26
+ * 🔴 **由构造不低于地板**(头注「时间地板」):答 `max(原始钟, 地板)`。原始钟低于地板 ⇒ 答地板 + 一行
27
+ * {@link APPROVAL_NONCE_CLOCK_ROLLBACK_EVENT} warn(点名回拨量)。于是三处判决都不会读到「已删记录的到期时刻之前」的钟。
23
28
  * 🔴 读不出来 ⇒ **响亮抛**([ref] fail-closed):调用方必须把它当不确定失败,**绝不**掉回本地墙钟。
24
29
  */
25
30
  nowMs(): Promise<number>;
@@ -30,7 +35,8 @@ export interface ApprovalNonceStore {
30
35
  */
31
36
  consume(sessionId: string, nonce: string, expiresAtMs: number): Promise<boolean>;
32
37
  /**
33
- * GC:删掉 `expires_at_ms <= ` **{@link nowMs}** 的记录,返回删除行数(维护 tick 调)。
38
+ * GC:读一次 **{@link nowMs}** → 把地板抬到这一读数(**先落地**)→ 删掉 `expires_at_ms <=` 这一读数的记录,返回删除行数(维护 tick 调)。
39
+ * 地板的唯一写者:行不会在已落地的地板低于它的到期时刻时消失,中途崩溃只留下「地板已抬、行还在」(下一拍再删)。
34
40
  *
35
41
  * 🔴 **一个时钟入参都没有**,而且这不是省事:形参会让删除线由**跑清理的那台副本**说了算,而它跟
36
42
  * 验签那台不是同一口钟 —— 那正是本店要消灭的那条依赖(与票据店 [ref] 删掉 `now: () => number`
@@ -41,24 +47,42 @@ export interface ApprovalNonceStore {
41
47
  }
42
48
  export declare class SqlApprovalNonceStore implements ApprovalNonceStore {
43
49
  private readonly db;
44
- constructor(db: SqlDriver);
50
+ private readonly warn;
51
+ /** @param opts.warn 回拨 warn 的落点(缺席 ⇒ 日志出口接缝的缺省 logger,不退回沉默)。 */
52
+ constructor(db: SqlDriver, opts?: {
53
+ readonly warn?: ApprovalNonceWarn;
54
+ });
45
55
  private q;
46
- /** 库钟({@link sqlDbNowMs})—— 一组无状态副本唯一共享的那口钟。读不出 ⇒ 响亮抛。 */
56
+ /**
57
+ * 店钟 = max(库钟, 地板)。库钟({@link SQL_DB_NOW_MS})是一组无状态副本唯一共享的那口钟;地板与它**同一条语句**读出(两条语句之间
58
+ * 一次清扫会把地板抬到第一读之后,于是一次正常的读也会被报成回拨)。没有地板行 = 这只店从没删过记录。读不出 ⇒ 响亮抛。
59
+ */
47
60
  nowMs(): Promise<number>;
48
61
  consume(sessionId: string, nonce: string, expiresAtMs: number): Promise<boolean>;
49
62
  reapExpired(): Promise<number>;
50
63
  }
51
64
  /** MySQL 协议腿的构造绑定(与兄弟店同形:类名/构造元数不变,消费方不必动)。 */
52
65
  export declare class TiDBApprovalNonceStore extends SqlApprovalNonceStore {
53
- constructor(pool: MysqlPool);
66
+ constructor(pool: MysqlPool, opts?: {
67
+ readonly warn?: ApprovalNonceWarn;
68
+ });
54
69
  }
55
70
  /** PostgreSQL 腿的构造绑定。 */
56
71
  export declare class PgApprovalNonceStore extends SqlApprovalNonceStore {
57
- constructor(pool: PgPool);
72
+ constructor(pool: PgPool, opts?: {
73
+ readonly warn?: ApprovalNonceWarn;
74
+ });
58
75
  }
59
76
  export declare class MemoryApprovalNonceStore implements ApprovalNonceStore {
60
77
  private readonly rows;
61
- /** 单进程腿:店 = 这个进程,所以店钟就是本进程的墙钟(验签、复核、清扫本来就同一只钟,无第二口)。 */
78
+ /** 时间地板(头注「时间地板」):进程内即可 —— 店随进程死,它保护的记录同亡。缺席 = 从没删过。 */
79
+ private floorMs;
80
+ private readonly warn;
81
+ /** @param opts.warn 回拨 warn 的落点(缺席 ⇒ 日志出口接缝的缺省 logger)。 */
82
+ constructor(opts?: {
83
+ readonly warn?: ApprovalNonceWarn;
84
+ });
85
+ /** 单进程腿:店 = 这个进程,所以原始钟就是本进程的墙钟(验签、复核、清扫本来就同一只钟,无第二口);店钟 = 它与地板取大。 */
62
86
  nowMs(): Promise<number>;
63
87
  consume(sessionId: string, nonce: string, expiresAtMs: number): Promise<boolean>;
64
88
  reapExpired(): Promise<number>;
@@ -91,12 +115,15 @@ export declare class FileApprovalNonceStore implements ApprovalNonceStore {
91
115
  private log;
92
116
  /** [ref]:本账的损坏闸(见类注)。 */
93
117
  private readonly gate;
94
- /** @param opts.warn 腐读披露座(`LocalBackend` 接 `discloseWarn`;缺席 ⇒ 属主退回 `console.warn`,不退回沉默)。 */
118
+ /** 时间地板(头注「时间地板」):重放时取账里的地板行,每次压实与幸存行一起写回。缺席 = 这本账从没被清扫过。 */
119
+ private floorMs;
120
+ private readonly warn;
121
+ /** @param opts.warn 腐读披露座与回拨 warn 的落点(`LocalBackend` 接 `discloseWarn`;缺席 ⇒ 日志出口接缝的缺省出口,不退回沉默)。 */
95
122
  constructor(root: string, opts?: {
96
123
  warn?: Logger["warn"];
97
124
  });
98
125
  private logFor;
99
- /** local 车道:店 = 这台机器上的这个数据根,所以店钟就是本进程的墙钟(理由同 Memory 腿)。 */
126
+ /** local 车道:店 = 这台机器上的这个数据根,所以原始钟就是本进程的墙钟(理由同 Memory 腿);店钟 = 它与地板取大(地板活过重启)。 */
100
127
  nowMs(): Promise<number>;
101
128
  consume(sessionId: string, nonce: string, expiresAtMs: number): Promise<boolean>;
102
129
  reapExpired(): Promise<number>;
@@ -1,20 +1,48 @@
1
1
  import { join } from "node:path";
2
2
  import { atomicWriteFile, ensureDir, AppendLog } from "@sema-agent/core";
3
- import { mysqlDriver, pgDriver, sqlDbNowMs, SQL_DB_NOW_MS } from "./sql-driver.js";
3
+ import { mysqlDriver, pgDriver, SQL_DB_NOW_MS } from "./sql-driver.js";
4
4
  import { isDupKeyError } from "./sql-errors.js";
5
5
  import { replayJsonlGuarded } from "../observability/corrupt-read-seat.js";
6
+ import { createLogger } from "../observability/logger.js";
6
7
  export const APPROVAL_NONCE_TABLE = "approval_nonce";
7
8
  export const MAX_APPROVAL_NONCE_CHARS = 190;
9
+ export const APPROVAL_NONCE_FLOOR_TABLE = "approval_nonce_floor";
10
+ export const APPROVAL_NONCE_CLOCK_ROLLBACK_EVENT = "approval_nonce_clock_rollback";
11
+ let seamLogger;
12
+ const warnToLogSeam = (msg, fields) => (seamLogger ??= createLogger()).warn(msg, fields);
13
+ function storeClockOf(rawMs, floorMs, store, warn) {
14
+ if (floorMs === undefined || rawMs >= floorMs)
15
+ return rawMs;
16
+ warn(APPROVAL_NONCE_CLOCK_ROLLBACK_EVENT, {
17
+ store,
18
+ rolledBackMs: floorMs - rawMs,
19
+ floorMs,
20
+ clockMs: rawMs,
21
+ note: "the approval-nonce store's clock reads below the line it already deleted consumption records under (the clock was stepped back: an NTP step, a failover to a lagging host, or another database node answering) — " +
22
+ "the store answers that line instead, so proofs that expired before it stay refused; check time sync on the database host (SQL backends) or on this host (local lane)",
23
+ });
24
+ return floorMs;
25
+ }
8
26
  export class SqlApprovalNonceStore {
9
27
  db;
10
- constructor(db) {
28
+ warn;
29
+ constructor(db, opts) {
11
30
  this.db = db;
31
+ this.warn = opts?.warn ?? warnToLogSeam;
12
32
  }
13
33
  q(mysql, pg) {
14
34
  return this.db.dialect === "mysql" ? mysql : pg;
15
35
  }
16
36
  async nowMs() {
17
- return sqlDbNowMs(this.db, APPROVAL_NONCE_TABLE);
37
+ const { rows } = await this.db.query(this.q(`SELECT ${SQL_DB_NOW_MS.mysql} AS db_now_ms, (SELECT floor_ms FROM ${APPROVAL_NONCE_FLOOR_TABLE} WHERE singleton = 'x') AS floor_ms`, `SELECT ${SQL_DB_NOW_MS.pg} AS db_now_ms, (SELECT floor_ms FROM ${APPROVAL_NONCE_FLOOR_TABLE} WHERE singleton = 'x') AS floor_ms`), []);
38
+ const raw = Number(rows[0]?.["db_now_ms"] ?? Number.NaN);
39
+ if (!Number.isFinite(raw))
40
+ throw new Error(`${APPROVAL_NONCE_TABLE}: the database clock came back unreadable (${String(rows[0]?.["db_now_ms"])})`);
41
+ const floorCell = rows[0]?.["floor_ms"];
42
+ const floor = floorCell === null || floorCell === undefined ? undefined : Number(floorCell);
43
+ if (floor !== undefined && !Number.isFinite(floor))
44
+ throw new Error(`${APPROVAL_NONCE_FLOOR_TABLE}: the time floor came back unreadable (${String(floorCell)})`);
45
+ return storeClockOf(raw, floor, "sql", this.warn);
18
46
  }
19
47
  async consume(sessionId, nonce, expiresAtMs) {
20
48
  try {
@@ -28,25 +56,32 @@ export class SqlApprovalNonceStore {
28
56
  }
29
57
  }
30
58
  async reapExpired() {
31
- const res = await this.db.query(this.q(`DELETE FROM ${APPROVAL_NONCE_TABLE} WHERE expires_at_ms <= ${SQL_DB_NOW_MS.mysql}`, `DELETE FROM ${APPROVAL_NONCE_TABLE} WHERE expires_at_ms <= ${SQL_DB_NOW_MS.pg}`), []);
59
+ const line = await this.nowMs();
60
+ await this.db.query(this.q(`INSERT INTO ${APPROVAL_NONCE_FLOOR_TABLE} (singleton, floor_ms) VALUES ('x', ?) ON DUPLICATE KEY UPDATE floor_ms = GREATEST(floor_ms, VALUES(floor_ms))`, `INSERT INTO ${APPROVAL_NONCE_FLOOR_TABLE} (singleton, floor_ms) VALUES ('x', $1) ON CONFLICT (singleton) DO UPDATE SET floor_ms = GREATEST(${APPROVAL_NONCE_FLOOR_TABLE}.floor_ms, EXCLUDED.floor_ms)`), [line]);
61
+ const res = await this.db.query(this.q(`DELETE FROM ${APPROVAL_NONCE_TABLE} WHERE expires_at_ms <= ?`, `DELETE FROM ${APPROVAL_NONCE_TABLE} WHERE expires_at_ms <= $1`), [line]);
32
62
  return res.affected;
33
63
  }
34
64
  }
35
65
  export class TiDBApprovalNonceStore extends SqlApprovalNonceStore {
36
- constructor(pool) {
37
- super(mysqlDriver(pool));
66
+ constructor(pool, opts) {
67
+ super(mysqlDriver(pool), opts);
38
68
  }
39
69
  }
40
70
  export class PgApprovalNonceStore extends SqlApprovalNonceStore {
41
- constructor(pool) {
42
- super(pgDriver(pool));
71
+ constructor(pool, opts) {
72
+ super(pgDriver(pool), opts);
43
73
  }
44
74
  }
45
75
  const keyOf = (sessionId, nonce) => JSON.stringify([sessionId, nonce]);
46
76
  export class MemoryApprovalNonceStore {
47
77
  rows = new Map();
78
+ floorMs;
79
+ warn;
80
+ constructor(opts) {
81
+ this.warn = opts?.warn ?? warnToLogSeam;
82
+ }
48
83
  async nowMs() {
49
- return Date.now();
84
+ return storeClockOf(Date.now(), this.floorMs, "memory", this.warn);
50
85
  }
51
86
  async consume(sessionId, nonce, expiresAtMs) {
52
87
  const k = keyOf(sessionId, nonce);
@@ -56,10 +91,11 @@ export class MemoryApprovalNonceStore {
56
91
  return true;
57
92
  }
58
93
  async reapExpired() {
59
- const now = await this.nowMs();
94
+ const line = await this.nowMs();
95
+ this.floorMs = this.floorMs === undefined ? line : Math.max(this.floorMs, line);
60
96
  let n = 0;
61
97
  for (const [k, exp] of this.rows) {
62
- if (exp <= now) {
98
+ if (exp <= line) {
63
99
  this.rows.delete(k);
64
100
  n++;
65
101
  }
@@ -67,11 +103,15 @@ export class MemoryApprovalNonceStore {
67
103
  return n;
68
104
  }
69
105
  }
70
- const NONCE_RECORD_SHAPE = {
71
- what: "approval-nonce record without a string s / string n / numeric e",
106
+ const NONCE_LOG_LINE_SHAPE = {
107
+ what: "approval-nonce line that is neither a record (string s / string n / numeric e) nor a time floor (numeric f alone)",
72
108
  read(record) {
73
- const { s, n, e } = record;
74
- return typeof s === "string" && typeof n === "string" && typeof e === "number" ? { s, n, e } : undefined;
109
+ const { s, n, e, f } = record;
110
+ if (typeof s === "string" && typeof n === "string" && typeof e === "number")
111
+ return { s, n, e };
112
+ if (typeof f === "number" && s === undefined && n === undefined && e === undefined)
113
+ return { f };
114
+ return undefined;
75
115
  },
76
116
  };
77
117
  export class FileApprovalNonceStore {
@@ -80,22 +120,29 @@ export class FileApprovalNonceStore {
80
120
  rows = new Map();
81
121
  log;
82
122
  gate;
123
+ floorMs;
124
+ warn;
83
125
  constructor(root, opts) {
126
+ this.warn = opts?.warn ?? warnToLogSeam;
84
127
  const dir = join(root, "approval-nonces");
85
128
  ensureDir(dir);
86
129
  this.tmpDir = join(dir, ".tmp");
87
130
  ensureDir(this.tmpDir);
88
131
  this.path = join(dir, "consumed.jsonl");
89
- const { records, gate } = replayJsonlGuarded(this.path, "approval-nonce", NONCE_RECORD_SHAPE, opts?.warn);
132
+ const { records, gate } = replayJsonlGuarded(this.path, "approval-nonce", NONCE_LOG_LINE_SHAPE, opts?.warn);
90
133
  this.gate = gate;
91
- for (const r of records)
92
- this.rows.set(keyOf(r.s, r.n), r);
134
+ for (const r of records) {
135
+ if ("f" in r)
136
+ this.floorMs = this.floorMs === undefined ? r.f : Math.max(this.floorMs, r.f);
137
+ else
138
+ this.rows.set(keyOf(r.s, r.n), r);
139
+ }
93
140
  }
94
141
  logFor() {
95
142
  return (this.log ??= new AppendLog(this.path));
96
143
  }
97
144
  async nowMs() {
98
- return Date.now();
145
+ return storeClockOf(Date.now(), this.floorMs, "file", this.warn);
99
146
  }
100
147
  async consume(sessionId, nonce, expiresAtMs) {
101
148
  this.gate.assertUsable();
@@ -109,11 +156,11 @@ export class FileApprovalNonceStore {
109
156
  }
110
157
  async reapExpired() {
111
158
  this.gate.assertUsable();
112
- const nowMs = await this.nowMs();
159
+ const line = await this.nowMs();
113
160
  const survivors = [];
114
161
  let removed = 0;
115
162
  for (const record of this.rows.values()) {
116
- if (record.e <= nowMs) {
163
+ if (record.e <= line) {
117
164
  removed++;
118
165
  continue;
119
166
  }
@@ -122,9 +169,11 @@ export class FileApprovalNonceStore {
122
169
  if (removed === 0)
123
170
  return 0;
124
171
  this.log?.closeForSwap();
125
- atomicWriteFile(this.tmpDir, this.path, survivors.map((r) => `${JSON.stringify(r)}\n`).join(""));
172
+ const floor = { f: this.floorMs === undefined ? line : Math.max(this.floorMs, line) };
173
+ atomicWriteFile(this.tmpDir, this.path, [floor, ...survivors].map((r) => `${JSON.stringify(r)}\n`).join(""));
174
+ this.floorMs = floor.f;
126
175
  for (const [k, record] of [...this.rows])
127
- if (record.e <= nowMs)
176
+ if (record.e <= line)
128
177
  this.rows.delete(k);
129
178
  return removed;
130
179
  }