@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
@@ -15,6 +15,8 @@
15
15
  * 件事的两种写法**,任一在场即可判定 —— 认并集不会造出假阳性,而认单键会漏掉任何只保留另一个键的
16
16
  * 形(驱动版本差异、代理/包装层、序列化往返)。这正是收编前两个真漏判的成因,门钉在
17
17
  * `test/sql-dup-key-single-source.test.ts`。
18
+ * 同一条道理的最后一种形:错误对象**不是驱动原错**(调用方递进来的 query 包装把键丢了、只剩 `message`)⇒ 另有一只**宽读法** {@link isDupKeyErrorOfWrappedQuery},
19
+ * 只给吃这种 query 函数的站点(`ensureIndex`)用;持驱动原错的店走严格读法,不按散文改判。两只读法都住在这里(站点不自带文案正则),钉同一个文件。
18
20
  *
19
21
  * ## 为什么是 `Reflect.get` 而不是属性访问/展开
20
22
  * 驱动错误类在某些版本把这两个键挂在**原型链**上:`{...err}` 只拷自有可枚举键,会**静默**丢掉它们,
@@ -36,12 +38,19 @@ export declare const MYSQL_ER_DUP_ENTRY_ERRNO = 1062;
36
38
  export declare const MYSQL_ER_DUP_ENTRY_CODE = "ER_DUP_ENTRY";
37
39
  /** PostgreSQL `unique_violation` 的 SQLSTATE。 */
38
40
  export declare const PG_UNIQUE_VIOLATION_SQLSTATE = "23505";
39
- /** MySQL/TiDB 的唯一键冲突:`code === "ER_DUP_ENTRY"` **或** `errno === 1062`(同一件事的两种写法)。 */
41
+ /** MySQL/TiDB 的唯一键冲突:`code === "ER_DUP_ENTRY"` **或** `errno === 1062`(同一件事的两种写法)。只读结构化归因键,不读 `message` 散文。 */
40
42
  export declare function isMysqlDupKeyError(err: unknown): boolean;
41
43
  /** PostgreSQL 的唯一键冲突:SQLSTATE `23505`(node-pg 挂在 `code` 上)。 */
42
44
  export declare function isPgUniqueViolation(err: unknown): boolean;
43
45
  /** 方言分派口——双方言店的调用形(`isDupKeyError(this.db.dialect, e)`)。 */
44
46
  export declare function isDupKeyError(dialect: SqlDialect, err: unknown): boolean;
47
+ /**
48
+ * **宽读法**:{@link isDupKeyError} 之外,MySQL 协议另认 `message` 里的 `Duplicate entry` 句子 —— 给**错误对象不是驱动原错**的站点用:`ensureIndex` 吃调用方递进来的 `query`
49
+ * 函数(`IndexQueryFn`),那层包装可能把结构化键丢了(或写成 `null`)、给句子加前缀,只剩 `message`。持驱动原错的店(十余处,走 {@link isDupKeyError})**不**用它:
50
+ * 它们拿得到带 `code` / `errno` 的原错,按散文改判会把一句碰巧带这两个词的非唯一键错读成「已存在」(例:`mark` 的 `existed` 回执)。
51
+ * 宽读法 ⊇ 严格读法;PG 臂没有散文臂(只认 SQLSTATE `23505`)。散文臂只住在这里 —— 站点不自带文案正则。
52
+ */
53
+ export declare function isDupKeyErrorOfWrappedQuery(dialect: SqlDialect, err: unknown): boolean;
45
54
  /** PostgreSQL `undefined_column` 的 SQLSTATE。⚠️ 与 `42P01`(`undefined_table`)刻意分开。 */
46
55
  export declare const PG_UNDEFINED_COLUMN_SQLSTATE = "42703";
47
56
  /** MySQL/TiDB `ER_BAD_FIELD_ERROR`(未知列)的数字 errno。 */
@@ -194,25 +203,43 @@ export declare function isConnectionFaultError(err: unknown): boolean;
194
203
  * (与连接类互为反面:那一类是「什么都不改稍后再试可能成」)。读者:整仓一只判官 `plugins/store-fault.ts` 的 `storeFaultClassOf` 的 `deployment` 一词 ——
195
204
  * 文件历史店的折点与会话同步拉取口(`503 state.file_history_unreadable`)据它判 `permanence: "terminal"`;审批队列读口并入「此刻读不出」的 503;各读者各自表态,**不在自己那里写码**。
196
205
  * 起服建表(`session-ext-table.ts` 的 `ensureSessionExtTableMysql`)问的也是这一只:「库确定拒了这条 DDL」= 本表认得 ⇒ 当场拒启;认不出 ⇒ 原样上抛、开库等待窗重试 —— 不自带第二份分类。
197
- * 外键四码(3780 / 1215 / 1822 / 1005)只可能出在建表 / 改表上,读写路径上的读者见不到它们 —— 加进本表对那几处零变化。
206
+ * 建外键被库确定拒的十码(1005 / 1215 / 1821 / 1822 / 1824 / 1825 / 1826 / 3734 / 3780 / 6125)只可能出在建表 / 改表上,读写路径上的读者见不到它们 —— 加进本表对那几处零变化。
207
+ * **为什么按码逐个登记、不按语义区段判**:MySQL 错误参考里这一族的 SQLSTATE 一律是 `HY000`(与一切未分类的服务端错误同一格,SQLSTATE 不分类);errno 也不成连续区段 ——
208
+ * 1821–1826 / 3734 / 3780 / 6125 之间夹着同族而**不属于**建表形不符的码(运行期的 1451 / 1452 / 3008、删列改列的 1828–1834、删父表的 3730),按区段或 `ER_FK_` 前缀判会把它们一并收进来;
209
+ * 而 mysql2 的码表是旧的(6125 没有符号,`code` 缺席),所以数字 `errno` 是必认的键。出处按码写在各行的 `why` 里:判据是码,不是散文。
210
+ * **唯一一行按内层号分:1005(建表被存储引擎拒)是包装码** —— 库答的消息模板 `Can't create table '%s' (errno: %d - %s)` 的**内层**号才是成因:150(外键形不成)/ 121(约束名已占)是确定拒,
211
+ * 28(盘满)等资源类清了盘重试即成。外层 SQLSTATE 恒 `HY000`、驱动不把内层号挂成字段 ⇒ 没有语义 / 结构化的键可判,只能读库自己的消息模板:这一行带 `innerErrnos`,
212
+ * 判据 = 外层码(`code` / `errno` 任一)是 1005 ∧ 消息是以 `Can't create table ` 开头、以 `(errno: <数字>…)` 收尾的整句 ∧ 内层号在 `innerErrnos` 里;读不出 / 不在册 /
213
+ * 外层不是这一码 ⇒ 不是(认不出一律不是;失败方向 = 进开库等待窗重试,不当场拒)。其余各行整码判、不读消息。
198
214
  *
199
215
  * 识别集 = 本表一张,按归因键登记:`code`(字符串)与 MySQL 协议的数字 `errno`(两键是同一件事的两种写法,代理 / 序列化往返可能只留一个;同本文件其余谓词的姿势)。
200
216
  * **与连接类互斥**:本表的任何一码都不在 {@link CONNECTION_FAULT_ERRORS} / {@link MYSQL_CONNECTION_UNUSABLE_ERRORS} 的识别集里,反之亦然(`test/store-fault-judge.test.ts` 钉两个方向)—— 同一只错只落一个词。
201
217
  *
202
218
  * **不在表里**(认不出一律不是;今天收缺表、权限拒与外键建不成三形,其余是登记在案的未收项,不是「已裁定不判」):缺列(1054 / `42703`:升级前置断言 `assert*Schema` 族有自己的判据与出路)、
203
219
  * 认证类拒连(MySQL 1045、PG `28xxx`:凭据 / 白名单)、库级与列级的权限拒(MySQL 1044 / 1143)、语法错(1064:多半是我方的语句,不是库的形)、
204
- * TiDB 自己的忙 / 区域不可用 / 结构变更冲突一族(9001 / 9005 / 8028,同连接类表的登记)、锁等待超时(1205)。
220
+ * TiDB 自己的忙 / 区域不可用 / 结构变更冲突一族(9001 / 9005 / 8028,同连接类表的登记)、锁等待超时(1205)、
221
+ * 外键的运行期拒(1451 / 1452 / 3008:行违反外键 / 级联深度,出在读写路径上、不是库的形)、`ER_FK_FAIL_ADD_SYSTEM`(1823:写系统表失败,成因混着字典写入失败而非逐因都是形不符 —— 推断,未读实现,故不登记)。
205
222
  */
206
223
  export declare const DEPLOYMENT_FAULT_ERRORS: ReadonlyArray<{
207
224
  readonly code: string;
208
225
  readonly errno?: number;
226
+ readonly innerErrnos?: readonly number[];
209
227
  readonly why: string;
210
228
  }>;
211
229
  /**
212
- * 「这个错误**是**部署错配类故障吗」—— {@link DEPLOYMENT_FAULT_ERRORS} 的唯一判据(识别集与排除项见该表头注)。纯谓词、不抛;认不出的一律不是。
213
- * 只读被抛出的**这一只**对象身上的结构化字段(`code` 字符串 / `errno` 数字),不沿 `cause` 链找、不读散文里的在册词。
230
+ * 「这个错误**是**部署错配类故障吗」—— {@link DEPLOYMENT_FAULT_ERRORS} 的唯一判据(识别集与排除项见该表头注)。纯谓词;认不出的一律不是。
231
+ * 整码行只读被抛出的**这一只**对象身上的结构化字段(`code` 字符串 / `errno` 数字),不沿 `cause` 链找、不读散文里的在册词;唯一例外是包装码 1005:外层码在册之后还要读库自己的
232
+ * 消息模板里的内层号(头注),内层号不在册 / 读不出 ⇒ 不是。
214
233
  */
215
234
  export declare function isDeploymentFaultError(err: unknown): boolean;
235
+ /**
236
+ * 库对一条语句的**答**里的原码,读成一小段(起服拒句读库答的唯一读法 —— `session-ext-table.ts` 的建表拒与 `store-backend.ts` 的开库拒同读这一只,不各写各的):
237
+ * · MySQL 协议:`errno <数字> <符号>, SQLSTATE <五位>`(`errno` / `code` / `sqlState` 三格,哪一格不在就缺哪一格;mysql2 的码表没有新号时 `code` 缺席,只剩 errno;只有符号没有 errno ⇒ `code <符号>`);
238
+ * · PostgreSQL:SQLSTATE 就挂在 `code` 上(node-pg),没有 errno / sqlState 键 ⇒ `SQLSTATE <五位>`。
239
+ * 只读被抛出的这一只对象身上的结构化字段、不读散文;每一格过闭字符形(数字 / `[A-Za-z0-9_]{1,64}` / 五位 SQLSTATE),形不对的格不进句子 —— 句子里不会出现驱动交来的任意串。
240
+ * 一格都读不到 ⇒ `undefined`(拒句不加这一段)。读字段经本文件同一只 `keyOf`(与本文件其余谓词同一读法:驱动错对象是普通对象,没有读取时才抛的访问器 / 代理那种形;真遇上就原样上抛,不在这里吞)。
241
+ */
242
+ export declare function databaseAnswerCodesOf(dialect: SqlDialect, err: unknown): string | undefined;
216
243
  /**
217
244
  * 检查点店的两笔写(续跑输入 `putCtx` / 停驻行 `put`)被引擎以「一行装不下」拒 ⇒ **这一只**带码错误(码 `store.row_too_large`),不以裸驱动错上抛
218
245
  * (其余店写今天仍是各自的驱动错 —— 未收,登记在案)。
@@ -15,6 +15,15 @@ export function isPgUniqueViolation(err) {
15
15
  export function isDupKeyError(dialect, err) {
16
16
  return dialect === "mysql" ? isMysqlDupKeyError(err) : isPgUniqueViolation(err);
17
17
  }
18
+ const MYSQL_ER_DUP_ENTRY_SENTENCE = /duplicate entry/i;
19
+ export function isDupKeyErrorOfWrappedQuery(dialect, err) {
20
+ if (isDupKeyError(dialect, err))
21
+ return true;
22
+ if (dialect !== "mysql")
23
+ return false;
24
+ const message = keyOf(err, "message");
25
+ return typeof message === "string" && MYSQL_ER_DUP_ENTRY_SENTENCE.test(message);
26
+ }
18
27
  export const PG_UNDEFINED_COLUMN_SQLSTATE = "42703";
19
28
  export const MYSQL_ER_BAD_FIELD_ERRNO = 1054;
20
29
  export const MYSQL_ER_BAD_FIELD_CODE = "ER_BAD_FIELD_ERROR";
@@ -148,19 +157,58 @@ export const DEPLOYMENT_FAULT_ERRORS = [
148
157
  { code: "42501", why: "PG insufficient_privilege(权限拒:库账号缺这张表 / 这类语句的授权 —— 授权之前重试注定失败)" },
149
158
  { code: "ER_NO_SUCH_TABLE", errno: 1146, why: "MySQL 协议(MySQL / MariaDB / TiDB)缺表:同 PG `42P01`" },
150
159
  { code: "ER_TABLEACCESS_DENIED_ERROR", errno: 1142, why: "MySQL 协议表级权限拒:库账号对这张表缺这类语句的授权,同 PG `42501`" },
151
- { code: "ER_FK_INCOMPATIBLE_COLUMNS", errno: 3780, why: "MySQL 协议外键两侧列不相容(类型 / 字符集 / 排序规则对不上):被引表的形与外键要求不符,重试同一句仍不相容" },
152
- { code: "ER_CANNOT_ADD_FOREIGN", errno: 1215, why: "MySQL 协议加不上外键(如被引表不是 InnoDB):库的形不收这条约束,改表之前重试注定失败" },
153
- { code: "ER_FK_NO_INDEX_PARENT", errno: 1822, why: "MySQL 协议外键的被引列上缺索引:被引表的形不符,建索引之前重试注定失败" },
154
- { code: "ER_CANT_CREATE_TABLE", errno: 1005, why: "MySQL 协议建表被存储引擎拒(errno 150 外键形不成 / 121 约束名已占 / 28 盘满):修库之前重试同一句仍被拒" },
160
+ { code: "ER_FK_INCOMPATIBLE_COLUMNS", errno: 3780, why: "MySQL 协议外键两侧列不相容(类型 / 字符集 / 排序规则对不上):被引表的形与外键要求不符,重试同一句仍不相容。出处:MySQL 9.0 错误参考 3780;TiDB `ErrFKIncompatibleColumns`" },
161
+ { code: "ER_CANNOT_ADD_FOREIGN", errno: 1215, why: "MySQL 协议加不上外键(统称码,如被引表不是 InnoDB):库的形不收这条约束,改表之前重试注定失败。出处:MySQL 9.0 错误参考 1215;TiDB `ErrCannotAddForeign`" },
162
+ { code: "ER_FK_NO_INDEX_CHILD", errno: 1821, why: "MySQL 协议外键的子表侧(建表句里的这张)缺索引:建表句的形不符,重试同一句仍被拒。出处:MySQL 9.0 错误参考 1821;TiDB `ErrFkNoIndexChild`;MariaDB 1800–1899 页同号" },
163
+ { code: "ER_FK_NO_INDEX_PARENT", errno: 1822, why: "MySQL 协议外键的被引列上缺索引:被引表的形不符,建索引之前重试注定失败。出处:MySQL 9.0 错误参考 1822;TiDB `ErrForeignKeyNoIndexInParent`;MariaDB 1800–1899 页同号" },
164
+ { code: "ER_FK_CANNOT_OPEN_PARENT", errno: 1824, why: "MySQL 协议外键的被引表打不开(库答「Failed to open the referenced table」;被引表不是 InnoDB 时 9.x 以此码拒,真库读数见 db 组钉):改引擎之前重试注定失败。出处:MySQL 9.0 错误参考 1824;TiDB `ErrForeignKeyCannotOpenParent`;MariaDB 1800–1899 页同号" },
165
+ { code: "ER_FK_INCORRECT_OPTION", errno: 1825, why: "MySQL 协议外键的选项在这张表上不成立(库答「Incorrect options in FOREIGN KEY constraint」):建表句的形不符,重试同一句仍被拒。出处:MySQL 9.0 错误参考 1825;TiDB `ErrFkIncorrectOption`;MariaDB 1800–1899 页同号" },
166
+ { code: "ER_FK_DUP_NAME", errno: 1826, why: "MySQL 协议外键约束名重复(库答「Duplicate foreign key constraint name」):改掉占用同名的那一只之前重试注定失败。出处:MySQL 9.0 错误参考 1826;TiDB `ErrFkDupName`;MariaDB 1800–1899 页同号" },
167
+ { code: "ER_FK_NO_COLUMN_PARENT", errno: 3734, why: "MySQL 协议外键的被引表上没有被引的那一列:被引表的形不符,补列之前重试注定失败。出处:MySQL 9.0 错误参考 3734;TiDB `ErrForeignKeyNoColumnInParent`" },
168
+ { code: "ER_FK_NO_UNIQUE_INDEX_PARENT", errno: 6125, why: "MySQL 协议外键的被引列上没有唯一键(库答「Missing unique key」;被引表无主键时 9.x 以此码拒,真库读数见 db 组钉):加主键 / 唯一键之前重试注定失败。出处:MySQL 9.0 错误参考 6125(mysql2 的码表没有这一号,驱动错的 `code` 缺席,按 errno 认;TiDB 无此号)" },
169
+ { code: "ER_CANT_CREATE_TABLE", errno: 1005, innerErrnos: [150, 121], why: "MySQL 协议建表被存储引擎拒(包装码,只认内层错误号 150 外键形不成 / 121 约束名已占:修库之前重试同一句仍被拒;28 盘满等资源类清盘后重试即成,不是确定拒,见头注)。出处:MySQL 9.0 错误参考 1005(消息模板 `Can't create table '%s' (errno: %d - %s)`,参考页注明消息里的 errno 150 = 外键形不成);TiDB `ErrCantCreateTable`" },
155
170
  ];
156
- const DEPLOYMENT_FAULT_CODES = new Set(DEPLOYMENT_FAULT_ERRORS.map((r) => r.code));
157
- const DEPLOYMENT_FAULT_ERRNOS = new Set(DEPLOYMENT_FAULT_ERRORS.flatMap((r) => (r.errno === undefined ? [] : [r.errno])));
171
+ const WHOLE_CODE_ROWS = DEPLOYMENT_FAULT_ERRORS.filter((r) => r.innerErrnos === undefined);
172
+ const DEPLOYMENT_FAULT_CODES = new Set(WHOLE_CODE_ROWS.map((r) => r.code));
173
+ const DEPLOYMENT_FAULT_ERRNOS = new Set(WHOLE_CODE_ROWS.flatMap((r) => (r.errno === undefined ? [] : [r.errno])));
174
+ const INNER_DISCRIMINATED_ROWS = DEPLOYMENT_FAULT_ERRORS.flatMap((r) => (r.innerErrnos === undefined ? [] : [{ ...r, innerErrnos: r.innerErrnos }]));
175
+ const CREATE_TABLE_REFUSAL_SENTENCE = /^Can't create table (?:`[^`]*`(?:\.`[^`]*`)?|'[^']*') \(errno: (\d{1,5})(?: [^()]*)?\)\s*$/;
176
+ function engineInnerErrnoOf(err) {
177
+ const said = keyOf(err, "sqlMessage");
178
+ const text = typeof said === "string" ? said : keyOf(err, "message");
179
+ if (typeof text !== "string" || text.length > 2000)
180
+ return undefined;
181
+ const m = CREATE_TABLE_REFUSAL_SENTENCE.exec(text);
182
+ return m === null ? undefined : Number(m[1]);
183
+ }
158
184
  export function isDeploymentFaultError(err) {
159
185
  if (err === null || typeof err !== "object")
160
186
  return false;
161
187
  const code = keyOf(err, "code");
162
188
  const errno = keyOf(err, "errno");
163
- return (typeof code === "string" && DEPLOYMENT_FAULT_CODES.has(code)) || (typeof errno === "number" && DEPLOYMENT_FAULT_ERRNOS.has(errno));
189
+ if ((typeof code === "string" && DEPLOYMENT_FAULT_CODES.has(code)) || (typeof errno === "number" && DEPLOYMENT_FAULT_ERRNOS.has(errno)))
190
+ return true;
191
+ const wrapper = INNER_DISCRIMINATED_ROWS.find((r) => (typeof code === "string" && code === r.code) || (typeof errno === "number" && errno === r.errno));
192
+ if (wrapper === undefined)
193
+ return false;
194
+ const inner = engineInnerErrnoOf(err);
195
+ return inner !== undefined && wrapper.innerErrnos.includes(inner);
196
+ }
197
+ export function databaseAnswerCodesOf(dialect, err) {
198
+ const code = keyOf(err, "code");
199
+ const symbol = typeof code === "string" && /^[A-Za-z0-9_]{1,64}$/.test(code) ? code : undefined;
200
+ if (dialect === "pg")
201
+ return symbol !== undefined && /^[0-9A-Z]{5}$/.test(symbol) ? `SQLSTATE ${symbol}` : undefined;
202
+ const errno = keyOf(err, "errno");
203
+ const sqlState = keyOf(err, "sqlState");
204
+ const parts = [];
205
+ if (typeof errno === "number" && Number.isInteger(errno))
206
+ parts.push(symbol !== undefined ? `errno ${errno} ${symbol}` : `errno ${errno}`);
207
+ else if (symbol !== undefined)
208
+ parts.push(`code ${symbol}`);
209
+ if (typeof sqlState === "string" && /^[0-9A-Za-z]{5}$/.test(sqlState))
210
+ parts.push(`SQLSTATE ${sqlState}`);
211
+ return parts.length === 0 ? undefined : parts.join(", ");
164
212
  }
165
213
  export class StoreRowTooLargeError extends Error {
166
214
  row;
@@ -53,15 +53,16 @@ import type { SqlDialect } from "./sql-driver.js";
53
53
  */
54
54
  export declare function jsonColumnText(dialect: SqlDialect, column: string, member?: JsonColumnMember): string;
55
55
  /**
56
- * 一列 JSON 的**一个顶层成员**(NP-3,7.100.0)—— 读腿只要文档里的一棵子树时用它,整只文档不出引擎。
57
- * · `key` = 成员名(裸标识符;进 MySQL 路径 `'$.<key>'` 与 PG 字面 `'<key>'`,所以只认裸标识符,不转义不猜);
56
+ * 一列 JSON 的**一个成员**(NP-3,7.100.0)—— 读腿只要文档里的一棵子树 / 一格时用它,整只文档不出引擎。
57
+ * · `path` = 自顶层往下的成员名(一段或多段,每段裸标识符;进 MySQL 路径 `'$.<a>.<b>'` 与 PG 链 `-> '<a>' -> '<b>'`,所以只认裸标识符,不转义不猜)。
58
+ * 一段 = 顶层成员(`["pendingAction"]`),多段 = 成员里的成员(`["state", "rowTaskId"]`);一段的产物与多段形之前的写法逐字节同;
58
59
  * · `as` = 行上的键(**小写**裸标识符:PG 把不带引号的别名折成小写,别的拼法会让两方言的行键不同)。
59
- * 产物仍是**文本**(同一条「按文本投影、恰好解一次」),成员缺席 / 文档不是对象 ⇒ SQL NULL(两引擎同答),
60
- * 所以读腿用 {@link decodeNullableJsonColumn}:NULL = 「这份文档没有这棵子树」,JSON `null` 字面 = 一个值(交形读者判)。
61
- * 首个读者:`checkpoint-store-sql.ts` 的 `listPending`(运维队列 / `/v1/approvals/stream` 热读)只取 `pendingAction`。
60
+ * 产物仍是**文本**(同一条「按文本投影、恰好解一次」),路径上任一段缺席 / 不是对象 ⇒ SQL NULL(两引擎同答),
61
+ * 所以读腿用 {@link decodeNullableJsonColumn}:NULL = 「这份文档没有这一格」,JSON `null` 字面 = 一个值(交形读者判)。
62
+ * 读者:`checkpoint-store-sql.ts` 的 `listPending`(运维队列 / `/v1/approvals/stream` 热读)与 `one-time-migrations.ts` 的 M21。
62
63
  */
63
64
  export interface JsonColumnMember {
64
- readonly key: string;
65
+ readonly path: readonly [string, ...string[]];
65
66
  readonly as: string;
66
67
  }
67
68
  /**
@@ -82,7 +83,7 @@ export interface JsonColumnMember {
82
83
  * 子树,本函数的插值对它是一个不透明表达式。所以「误用进 SELECT 投影且没给别名」这一形没有机器门 ——
83
84
  * 误用的落点是真库上当场的 `SqlJsonColumnError("not-text")` 响亮抛(行上没有那个键 ⇒ `undefined`),不是静默。
84
85
  */
85
- export declare function jsonColumnTextExpr(dialect: SqlDialect, column: string, memberKey?: string): string;
86
+ export declare function jsonColumnTextExpr(dialect: SqlDialect, column: string, memberPath?: JsonColumnMember["path"]): string;
86
87
  /**
87
88
  * 一列 JSON 的**投影文本的 sha256**(十六进制小写,引擎内算 —— 整只文档不出库),带别名。输入恰是 {@link jsonColumnTextExpr} 那一只投影:
88
89
  * 同一行、同一次读里,本表达式的摘要就是 {@link jsonColumnText} 交给读腿的那串字节的摘要,于是「字节没变 ⇒ 摘要没变」只有一种读法。
@@ -6,19 +6,23 @@ export function jsonColumnText(dialect, column, member) {
6
6
  if (!MEMBER_ALIAS_RE.test(member.as)) {
7
7
  throw new Error(`jsonColumnText: member alias ${JSON.stringify(member.as)} must be a lower-case bare identifier — PostgreSQL folds unquoted aliases to lower case, so any other spelling would give the two dialects different row keys`);
8
8
  }
9
- return `${jsonColumnTextExpr(dialect, column, member.key)} AS ${member.as}`;
9
+ return `${jsonColumnTextExpr(dialect, column, member.path)} AS ${member.as}`;
10
10
  }
11
11
  const MEMBER_ALIAS_RE = /^[a-z_][a-z0-9_]*$/;
12
- export function jsonColumnTextExpr(dialect, column, memberKey) {
12
+ export function jsonColumnTextExpr(dialect, column, memberPath) {
13
13
  if (!COLUMN_NAME_RE.test(column)) {
14
14
  throw new Error(`jsonColumnTextExpr: ${JSON.stringify(column)} is not a bare column identifier — refusing to splice it into SQL text`);
15
15
  }
16
- if (memberKey === undefined)
16
+ if (memberPath === undefined)
17
17
  return dialect === "pg" ? `${column}::text` : `CAST(${column} AS CHAR)`;
18
- if (!COLUMN_NAME_RE.test(memberKey)) {
19
- throw new Error(`jsonColumnTextExpr: member ${JSON.stringify(memberKey)} is not a bare identifier — refusing to splice it into a JSON path`);
18
+ for (const segment of memberPath) {
19
+ if (!COLUMN_NAME_RE.test(segment)) {
20
+ throw new Error(`jsonColumnTextExpr: member ${JSON.stringify(segment)} is not a bare identifier — refusing to splice it into a JSON path`);
21
+ }
20
22
  }
21
- return dialect === "pg" ? `(${column}::jsonb -> '${memberKey}')::text` : `CAST(JSON_EXTRACT(${column}, '$.${memberKey}') AS CHAR)`;
23
+ return dialect === "pg"
24
+ ? `(${column}::jsonb ${memberPath.map((segment) => `-> '${segment}'`).join(" ")})::text`
25
+ : `CAST(JSON_EXTRACT(${column}, '$.${memberPath.join(".")}') AS CHAR)`;
22
26
  }
23
27
  export function jsonColumnTextSha256(dialect, column, as) {
24
28
  if (!MEMBER_ALIAS_RE.test(as)) {
@@ -1,10 +1,14 @@
1
1
  import type { Pool as MysqlPool } from "mysql2/promise";
2
2
  import type { Pool as PgPool } from "pg";
3
3
  import type { SessionStore, SessionPolicyStore, FileHistoryStore, FileHistoryBlobExchange, FileHistoryError, WorkflowJournalStore, ToolResultStore, SessionCaptureRecordStore, UsageWindowStore } from "@sema-agent/core";
4
+ import { FileStorageBackend } from "@sema-agent/core";
4
5
  import { type OutcomeSink } from "./file-outcome-sink.js";
5
6
  import { type InboxWarn } from "./workflow-run-store-sql.js";
6
7
  import { FileRunStore } from "./file-run-store.js";
7
- import { type OneTimeMigrationReport } from "./one-time-migrations.js";
8
+ import { type RunStallWiring } from "./store-contracts.js";
9
+ import { type StoreOpenLane } from "./store-open-refusal.js";
10
+ import { type OneTimeMigrationReport, type SqlOneTimeMigrationInput } from "./one-time-migrations.js";
11
+ import { LocalSessionStore } from "./local-session-store.js";
8
12
  import type { LocalSessionRows } from "./local-session-window.js";
9
13
  import type { SessionHeadReader } from "./caching-session-store.js";
10
14
  import { LocalCheckpointStore } from "./local-checkpoint-store.js";
@@ -34,7 +38,7 @@ import { PgRateLimiter } from "./pg-rate-limiter.js";
34
38
  import { type SqlSharedMemoryStore, type SharedMemoryScopeAuthorizer } from "./shared-memory-store-sql.js";
35
39
  import { type AdoptionLogStore } from "./adoption-log-sql.js";
36
40
  import { type SqlTransactionHooks } from "../stores-sql/retention-store-sql.js";
37
- import type { EndedSpace } from "../workspace-space.js";
41
+ import type { SessionEraser } from "../session-erase.js";
38
42
  import { type RetentionDestructiveInput, type RetentionExecutor, type RetentionExecutorOptions } from "./retention-deployment.js";
39
43
  import { type RetentionLaneStore } from "./retention-lane-store-sql.js";
40
44
  import type { PermissionRuleStoreBundle } from "../rules-consent.js";
@@ -43,12 +47,23 @@ import { type StoreDegradedReason } from "../store-posture.js";
43
47
  /** boot 期的一条日志座(级别由**座位**决定,不由参数携带):`createStoreBackend` 的 `onWarn` / `onError`
44
48
  * 两参与 `LocalBackend` 的同名字段共用此形。装配层把它们分别接到 `logger.warn` / `logger.error` 上。 */
45
49
  export type BootLogSink = (msg: string, meta?: Record<string, unknown>) => void;
50
+ /**
51
+ * 后端交给店的**观测座**(加项、可缺席:嵌入方 / 测试不给 ⇒ 不计数)。今天一格:run 店每落下 n 条死亡判决(收割器 / 观察口 / 认领冲突同一只)
52
+ * ⇒ `runStallVerdicts(n)`(生产装配 = `runs_reaped_total{kind:"stale"}`,`boot/stores.ts`)。
53
+ */
54
+ export interface StoreBackendObservers {
55
+ readonly runStallVerdicts?: (landed: number) => void;
56
+ }
57
+ /** run 店落死亡判决的两样:窗 = 后端持有的配置对象的 `runStaleSec`(热发布原地改写 ⇒ getter 读到热值;判活窗只有这一个来源)+ 计数座。 */
58
+ export declare function createRunStallWiring(config: Pick<ServiceConfig, "runStaleSec">, observers: StoreBackendObservers | undefined): RunStallWiring;
46
59
  export type RunStore = TiDBRunStore | PgRunStore | FileRunStore;
47
60
  /** E18 resume-at eventId→entryId anchor map — tidb/pg/local 3-backend (works LOCAL; needs only the session tree +
48
61
  * this map, no cloud-only checkpoint). Union = the three nominal twins; consumers use put/resolve/deleteBySession.
49
62
  * FileResumeAnchorStore is the FILE-backed local twin (P0.5 variant-1; survives restart). */
50
63
  export type ResumeAnchorStore = TiDBResumeAnchorStore | PgResumeAnchorStore | FileResumeAnchorStore;
51
64
  export type { ApprovalExemptionStore } from "./approval-exemption-store.js";
65
+ /** 会话树根的写(事务内钩的写闭集,`stores-sql/session-write-hooks.ts`):本组合座转口给目录外的判官(`execution-placement.ts` 的 `judgeSessionWrite`;local 店的写锁内同一组词)。 */
66
+ export type { SessionWrite } from "../stores-sql/session-write-hooks.js";
52
67
  export type { ApprovalNonceStore } from "./approval-nonce-store.js";
53
68
  /** [ref]([ref] v3.1 §3.0-§3.2 流内审批协议持久层):`ApprovalAskStore` 接口 + 行/补丁类型。
54
69
  * 车3 刀 3a 起 `StoreBackend.approvalAsk()` 已在(见接口体的那条注)。 */
@@ -160,7 +175,7 @@ export type SessionCaptureRecordSource = (plane?: {
160
175
  }) => SessionCaptureRecordStore;
161
176
  export interface StoreBackend {
162
177
  /** Protocol-truth kind (clay 2026-07-06 wording): "mysql" = any MySQL-protocol server (MySQL / TiDB /
163
- * MariaDB) behind the one mysql2 pool — the startup summary prints durable(mysql) for all of them. */
178
+ * MariaDB) behind the one mysql2 pool — the startup summary prints `mysql` for all of them. */
164
179
  readonly kind: "mysql" | "pg" | "local";
165
180
  /** Connect + create schema (also the reachability probe). On the SQL backends it first checks the database for the
166
181
  * schema that the one-time migrations of server 7.74.0–7.125.x retired and **refuses** with `RetiredSchemaPresentError`
@@ -229,7 +244,7 @@ export interface StoreBackend {
229
244
  userInputLedger(): UserInputLedgerStore;
230
245
  /** E6 durable SessionPolicyStore (operator-tightened per-session tool rules). REQUIRED on all backends — works local
231
246
  * (local = core's FileSessionPolicyStore), like resumeAnchor. Backs core's RunnerDeps.sessionPolicyStore.
232
- * `logger`:SQL 孪生抹除封键那一臂([ref])的点名口(缺席 ⇒ 店退回 `console.warn`);local(core 的 File 店)不收。 */
247
+ * `logger`:SQL 孪生抹除封键那一臂([ref])的点名口(装配点缺省交日志出口接缝的 logger);local(core 的 File 店)不收。 */
233
248
  sessionPolicy(logger?: SessionPolicyStoreLogger): ServiceSessionPolicyStore;
234
249
  /** [ref] per-edited-file rewind FileHistoryStore (trackEdit/annulTrack/snapshot/restore over the tracked set;
235
250
  * also the 2c history-transfer store). REQUIRED on all backends (local = core's file-backed
@@ -371,6 +386,11 @@ export interface StoreBackend {
371
386
  * `retention-deployment.ts` 的 `RetentionExecutorOptions`)。组合形见 {@link createSqlRetentionExecutor}。
372
387
  */
373
388
  retention?(opts: RetentionExecutorOptions): RetentionExecutor;
389
+ /**
390
+ * 删净一只会话的**执行体**(`session-erase.ts` 的 `SessionEraser`;在线删除协调器调它)—— 与 {@link retention} 的会话树清扫同一段事务体(组合 `createSqlSessionEraser`)。
391
+ * **SQL 后端专有**:local 的执行体是会话店写锁一节(`session-erase.ts` 的 `createLocalSessionEraser`),各店在 boot 里才齐,由删除协调器自己组。
392
+ */
393
+ sessionEraser?(opts: RetentionExecutorOptions): SessionEraser;
374
394
  /**
375
395
  * [ref] 车2 —— 留存执行面的**非破坏性**半场:sweep 租约、legal-hold 的放置/解除、审计表的读与
376
396
  * 非破坏行的写。同样 SQL 专有(它写的三张表只在 SQL schema 里)。
@@ -408,29 +428,39 @@ export interface StoreBackend {
408
428
  fileUsageWindowStore?(): UsageWindowStore;
409
429
  }
410
430
  /**
411
- * 托管留存执行器的**组合**:引擎座表那一半(`SqlRetentionStore`,事务属主)+ 部署那一半(hold / 审计 / 认领判 / 十一张部署表,
431
+ * 托管留存执行器的**组合**:引擎座表那一半(`SqlRetentionStore`,事务属主)+ 部署那一半(hold / 审计 / 认领判 / 十三张部署表,
412
432
  * `plugins/retention-deployment.ts`,经 K4 事务内钩参与同一事务)。
413
433
  *
414
434
  * 破坏性三方法**每次调用**铸一只执行器、钩表绑这一次调用(`createRetentionDeploymentHooks` 的头注:审计行的判定时点三格与
415
- * `checkpoint_ctx` 属主门的域是这一次调用的事实)。会话树删除的 `endedSpaces` 由部署从 `beforeDelete` 收到的行自算,
435
+ * `checkpoint_ctx` 属主门的域是这一次调用的事实)。会话树删除的 `erased`(交收尾的那一份)由执行器的行面回执 + 部署收集的附件哈希拼成,
416
436
  * 只在执行器**提交成功返回之后**挂上回执(回滚 ⇒ 执行器抛,不挂)。非破坏两口(域枚举 / 预览)不经钩。
417
437
  */
418
438
  /**
419
439
  * 一次破坏性调用的整张事务内钩表:部署的 `retention` 组(按这一次调用铸,`createRetentionDeploymentHooks`)+ 会话座的钩
420
- * (`createSqlSessionWriteHooks`,会话店用的同一只工厂;留存删除走它的 `retention-delete` 臂)。`endedSpaces` 读部署那一半收到的行。
440
+ * (`createSqlSessionWriteHooks`,会话店用的同一只工厂;留存删除走它的 `retention-delete` 臂)。`attachmentShas` 读部署那一半收到的行。
421
441
  */
422
442
  export declare function createSqlRetentionCallHooks(db: SqlDriver, opts: RetentionExecutorOptions, input: RetentionDestructiveInput): {
423
443
  readonly hooks: SqlTransactionHooks;
424
- endedSpaces(): readonly EndedSpace[];
444
+ attachmentShas(): readonly string[];
425
445
  };
426
446
  export declare function createSqlRetentionExecutor(db: SqlDriver, opts: RetentionExecutorOptions): RetentionExecutor;
447
+ /**
448
+ * **删净一只在删会话的 SQL 执行体**(`session-erase.ts` 的 `SessionEraser`):执行器的 `eraseSession` —— 与留存清扫同一段会话树事务体,前面是锁行 + 属主 +
449
+ * 会话座事务内钩的 `erase` 判(这一行处于这只令牌的在删态)。行不在 / 属主不是那一位 / 令牌不是它(`SessionDeletionSupersededError`)⇒ `superseded`,别的拒原样抛。
450
+ * 部署行那一半用与留存同一只钩(`createSessionRowsHook`,域 = 围栏判过的属主),附件哈希随回执交收尾。
451
+ * `opts` 与留存执行器同一份(附件 / 任务清单两张表在不在是 boot 的事实)。
452
+ */
453
+ export declare function createSqlSessionEraser(db: SqlDriver, opts: RetentionExecutorOptions): SessionEraser;
427
454
  /** (c)(clay 拍 a+c,2026-07-27;[ref] 换店后域=file_history_blob,门与旋钮名不变)云形 blob 姿势门——
428
- * boot 时调用(boot/stores.ts),纯函数可单测。SQL 后端(mysql|pg)把 blob 字节落单行的形已被两役
455
+ * boot 时调用(boot/stores.ts),纯函数可单测。SQL 后端(mysql|pg)把 blob 字节落单行的形,mysql 腿已被两役
429
456
  * 实证撞 mysql-协议包墙(D-1 附件 → 对象存储裁定):大字节归对象存储。per-file 历史的 blob=单文件
430
457
  * 字节,同一堵墙(>6MiB 的被 track 文件在 TiDB 上落不进 SQL 行 ⇒ trackEdit 拒 ⇒ 默认 DV-14 下该次
431
- * 编辑被拒)。云形缺 MinIO ⇒ fail-loud(启动了才是假安全);`SNAPSHOT_BLOB_ALLOW_SQL_BYTES=true` =
432
- * 显式接受 SQL 店 + per-blob 帽(单机/测试台形)。local 后端不经此门(file 店,无 SQL 包墙)。 */
458
+ * 编辑被拒);pg 腿本服务不建模这两堵墙(只有一个 bytea 值的 1 GB 硬上限、没有推出来的缺省帽),同一条裁定、拒句只说各自方言的事实
459
+ * ({@link SQL_BLOB_POSTURE_FACTS})。云形缺 MinIO ⇒ fail-loud(启动了才是假安全);`SNAPSHOT_BLOB_ALLOW_SQL_BYTES=true` =
460
+ * 显式接受 SQL 店 + per-blob 帽(单机/测试台形;pg 上帽只来自 `SNAPSHOT_BLOB_SQL_MAX_BYTES`)。local 后端不经此门(file 店,无 SQL 包墙)。 */
433
461
  export declare function assertCloudSnapshotBlobPosture(kind: "mysql" | "pg" | "local", config: Pick<ServiceConfig, "snapshotBlobStore" | "snapshotBlobAllowSql">): void;
462
+ /** SQL 一次性迁移段的输入(两只 SQL 后端同一份;各条目那一半的来源见 `SqlOneTimeMigrationInput`):M32 的车道表 · M40 的判活窗 = 收割器的同一个窗 · M48 的部署形读数(表里那一行)。 */
463
+ export declare function buildSqlOneTimeMigrationInput(config: ServiceConfig): SqlOneTimeMigrationInput;
434
464
  /**
435
465
  * LOCAL backend (clay 2026-06-25 seamless local↔cloud; P0.5 variant-2 + variant-1 file-backed 2026-06-26): a DB-less StoreBackend
436
466
  * so a locally-run HTTP service serves the SAME contract a cloud worker does (runs + trace + sessions + resume;
@@ -461,6 +491,8 @@ export declare function assertCloudSnapshotBlobPosture(kind: "mysql" | "pg" | "l
461
491
  * projection and its log export — and `undefined` on any other backend. The one place that answers "is there a local store to read rows from".
462
492
  */
463
493
  export declare function localSessionRowsOf(backend: StoreBackend | undefined): LocalSessionRows | undefined;
494
+ /** local 车道的客户端写计数口(附件店绑定时计数,`session-birth.ts`):本地后端那一只会话店;别的后端 ⇒ `undefined`(SQL 附件店在自己的认领事务里计数)。 */
495
+ export declare function localClientWritesOf(backend: StoreBackend | undefined): Pick<LocalSessionStore, "withClientWrite"> | undefined;
464
496
  /**
465
497
  * 启动日志里「跨副本 or 进程内」那一格的标签。
466
498
  *
@@ -474,6 +506,38 @@ export declare function localSessionRowsOf(backend: StoreBackend | undefined): L
474
506
  * 而兄弟行都写 `shared(${kind})`。)
475
507
  */
476
508
  export declare function counterStoreLabel(store: unknown, kind: string | undefined): string;
509
+ /**
510
+ * 打开 local 数据根的那一只后端(打开成功的 {@link LocalBackend} 或打开那一刻被拒的 {@link RefusedLocalBackend}):`StoreBackend` 之外多一只口 ——
511
+ * 引擎 File 后端上**会话店之外**本仓没有自己一份的那几只店({@link LocalEngineFileStores};run-local 的 Runner 接它们)。会话行店不在其中:行只经本仓的会话店读(`session()`)。
512
+ */
513
+ export interface LocalStoreBackend extends StoreBackend {
514
+ readonly kind: "local";
515
+ engineFileStores(): LocalEngineFileStores;
516
+ /** local 后端恒有(引擎 File 后端的工具结果店;接口上可选的那一口在这里必在)。 */
517
+ toolResult(): ToolResultStoreFull;
518
+ /** local 后端恒有(引擎 File 后端的用量窗账本;接口上可选的那一口在这里必在)。 */
519
+ fileUsageWindowStore(): UsageWindowStore;
520
+ }
521
+ /** 引擎 File 后端上会话店之外、本仓没有自己一份口的店(run-local 的 Runner 接它们;工具结果 / 用量窗 / 会话规则走既有的 `toolResult()` / `fileUsageWindowStore()` / `sessionPolicy()` 口)。 */
522
+ export type LocalEngineFileStores = Pick<FileStorageBackend, "checkpointStore" | "backgroundAgentStore" | "mailboxStore" | "rosterStore">;
523
+ /** 打开 local 数据根的入口参数:哪条路在开(只决定拒句的措辞 —— 表头与「换根」半句)与三只 boot 期日志座(见 {@link createStoreBackend})。 */
524
+ export interface LocalBackendOpenOptions {
525
+ readonly lane: StoreOpenLane;
526
+ readonly onWarn?: BootLogSink;
527
+ readonly onError?: BootLogSink;
528
+ readonly observers?: StoreBackendObservers;
529
+ }
530
+ /**
531
+ * **local 后端打开数据根**(唯一的路 —— 本仓每一条打开 local 数据根的入口都经它:`createStoreBackend` 的 local 腿(HTTP 服务)与 run-local;一个数据根一只会话行店、一份装配):
532
+ * 取锁(引擎 File 后端)→ **判与抬引擎版本高水位**({@link holdEngineHighWater},同步一段;判前钩 = 判或记收令牌欠账 {@link holdArchiveTokenAdoptionDuty},抬之前)→ 本仓的店。
533
+ * 打开之后的公开序列两条入口相同:`ensureSchema()`(起服对账)→ `runOneTimeMigrations()` → 才读会话。
534
+ * 判与抬住在这里而不是 `ensureSchema()` 里,因为围栏以**第一笔落盘**界定:本仓的店在构造里就会写(撕裂的问账日志留证 + 压实、撕裂的 run 认领挪开、会话收尾的活跃边档落盘),
535
+ * 判必须先于它们(被拒 = 本仓的店一只都没开、不抬、不改既有文件的字节;判拒发生在钥匙对与空账本已落、店尚未开之后;下一版改为判拒先于任何写),抬必须先于它们(写到一半崩了,水位已是本构建)。所以这一段之后才有店,没有任何一只店先于它。
536
+ * 拒(判拒 / 本构建版本读不出 / 抬写不进 / 本仓的店构造时抛)⇒ 交回一只 {@link RefusedLocalBackend}:只握着锁,`ensureSchema()` 交出那一只拒(公开序列在它该在的那一步拒,降级臂按拒的族判),
537
+ * `close()` 只放锁 —— 没有店、没有收尾写。
538
+ * 残余(如实):引擎 `FileStorageBackend` 的构造把取锁与它自己的店放在同一步(建子目录、店目录锁、撕裂账本尾的收拢)—— 那几笔在判之前,本仓在两者之间没有座(要 core 给)。
539
+ */
540
+ export declare function openLocalBackend(config: ServiceConfig, opts: LocalBackendOpenOptions): LocalStoreBackend;
477
541
  /** Build the durable-store backend for `config.dbBackend`. Does NOT connect (the pool connects lazily); the next
478
542
  * step is `ensureSchema()` (retired-schema check, then the CREATEs; it is also the reachability probe), then
479
543
  * `runOneTimeMigrations()`. Returns undefined when no DB is configured.
@@ -484,7 +548,9 @@ export declare function counterStoreLabel(store: unknown, kind: string | undefin
484
548
  * `onError` (additive, optional; F-D) is the **error-level** twin of that seat — 件6 的
485
549
  * `file_run_store_hydrate_unreadable` 按成文承诺是 error 级,warn 座满足不了那句话。两座都是**加项**:
486
550
  * 既有一/二参调用方逐字不变(缺席 ⇒ 该披露退回 warn 座 / 只剩 fail-open 遥测那一半)。 */
487
- export declare function createStoreBackend(config: ServiceConfig, onWarn?: BootLogSink, onError?: BootLogSink): StoreBackend | undefined;
551
+ export declare function createStoreBackend(config: ServiceConfig, onWarn?: BootLogSink, onError?: BootLogSink, observers?: StoreBackendObservers): StoreBackend | undefined;
552
+ /** local 后端的数据根(`createStoreBackend` 交给 `LocalBackend` 的那一只,与 {@link openStoreBackendWithFallback} 的降级判据、起服第 2 段的持久性取证读同一只)。 */
553
+ export declare function localBackendRootOf(config: Pick<ServiceConfig, "localDataRoot">): string;
488
554
  /** boot 期打开 store 后端的**统一入口**:构造 + ensureSchema 同罩一层降级臂。
489
555
  *
490
556
  * 为什么必须把 `createStoreBackend()` 也罩进来(2026-07-28 修):clay 1.292 拍的口径是「裸 boot
@@ -507,7 +573,7 @@ export declare function createStoreBackend(config: ServiceConfig, onWarn?: BootL
507
573
  export declare function openStoreBackendWithFallback(config: ServiceConfig, logger: {
508
574
  warn: (msg: string, meta?: Record<string, unknown>) => void;
509
575
  error?: (msg: string, meta?: Record<string, unknown>) => void;
510
- }): Promise<{
576
+ }, observers?: StoreBackendObservers): Promise<{
511
577
  backend: StoreBackend | undefined;
512
578
  degradedReason: StoreDegradedReason | undefined;
513
579
  }>;
@@ -521,8 +587,11 @@ export declare function openStoreBackendWithFallback(config: ServiceConfig, logg
521
587
  export declare function sqlStoreCoordinatesAsUrl(config: Pick<ServiceConfig, "dbBackend" | "tidb" | "pg">): string;
522
588
  /**
523
589
  * SQL 族「配了 DSN 而店打不开(窗内重试过了)」的拒启句(唯一铸点)。点名 `DB_BACKEND=<引擎>`、库的显示安全形(`postgres://host:port` / `mysql://host:port`,经 {@link sqlStoreCoordinatesAsUrl} 拼出、再过 {@link buildDisplaySafeUrl},
524
- * 不带口令)、等了多久,出路两条:修坐标 / 连通性(窗是 `STORE_LOCK_WAIT_MS`);或**显式**内存部署(`DB_BACKEND=memory`)。🔴 没有第三条
525
- * 「`SESSION_BACKEND=auto` 内存起服」—— 那一条就是被删掉的静默降级。驱动原文只取 message(与修前 `fatalExit` 打出的同一句),凭据不在其中(驱动不回显口令)。
590
+ * 不带口令)、等了多久,出路按**失败类**走(判官 = 整仓一只的 {@link isDeploymentFaultError}),都含**显式**内存部署(`DB_BACKEND=memory`):
591
+ * · 库**确定拒**了一条语句(部署错配类:缺表 / 权限拒 / 建外键被拒 …)⇒ 等与改坐标都改变不了答案,出路是库里被点名的那一件(表引擎 / 主键 / 外键相容 / 授权);拒句带库答的 errno / SQLSTATE 原码
592
+ * ({@link databaseAnswerCodesOf});
593
+ * · 其余(连不上 / 超时 / 认不出)⇒ 修坐标 / 连通性(窗是 `STORE_LOCK_WAIT_MS`)。
594
+ * 🔴 没有第三条「`SESSION_BACKEND=auto` 内存起服」—— 那一条就是被删掉的静默降级。驱动原文只取 message(与修前 `fatalExit` 打出的同一句),凭据不在其中(驱动不回显口令);原码段只经闭字符形读取。
526
595
  */
527
596
  export declare function buildSqlStoreOpenRefusal(engine: "mysql" | "pg", endpoint: string, waitedMs: number, err: unknown): string;
528
597
  //# sourceMappingURL=store-backend.d.ts.map