@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
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 车道沙箱回收腿的接口 —— 维护 tick(`boot/reapers.ts`)上**唯一一只**沙箱回收座:k8s 车道 = 沙箱 Pod 回收器({@link createSandboxPodReaper},`k8s-pod-reaper.ts`),
3
+ * local-docker 车道 = 无主容器回收器({@link createLocalDockerReaper},`local-docker-reaper.ts`)。一次部署只有一条执行车道,所以座只有一只、节拍只有一个
4
+ * ({@link SANDBOX_REAP_PERIOD_MS})、连败告警只有一个名;两条车道各自的判据与读数留在各自的模块里,这里只有 tick 要知道的那一点。
5
+ */
6
+ /** 一个副本两轮沙箱回收之间的间隔。常量:起服后第一个维护 tick 即跑一轮(起服那一轮),此后每个周期一轮。 */
7
+ export declare const SANDBOX_REAP_PERIOD_MS: number;
8
+ /** run 店的窄读口(三只 run 店共有的 `getRun`):回收器按 run 行的终态判「这只沙箱还有没有主人」。 */
9
+ export interface SandboxReaperRunReader {
10
+ getRun(taskId: string): Promise<{
11
+ readonly status: string;
12
+ readonly updatedAt: string;
13
+ } | null | undefined>;
14
+ }
15
+ /** 一轮的公共读数(两条车道的轮次读数都是它的超集):列出来了没有 / 扫了几只 / 按各自闭集原因分的删与跳过计数。 */
16
+ export interface SandboxReapRound {
17
+ readonly listed: boolean;
18
+ readonly scanned: number;
19
+ readonly deleted: Readonly<Record<string, number | undefined>>;
20
+ readonly skipped: Readonly<Record<string, number | undefined>>;
21
+ }
22
+ /** 维护 tick 调的那一口:一轮 = 列举 → 逐只判 → 收被判无主的;不抛。`runs` 缺席 = 本部署没有 run 店(判不了 run 的沙箱一律不动)。 */
23
+ export interface SandboxReaper {
24
+ reapOnce(runs: SandboxReaperRunReader | undefined): Promise<SandboxReapRound>;
25
+ }
26
+ //# sourceMappingURL=sandbox-reaper.d.ts.map
@@ -0,0 +1,2 @@
1
+ export const SANDBOX_REAP_PERIOD_MS = 5 * 60_000;
2
+ //# sourceMappingURL=sandbox-reaper.js.map
@@ -0,0 +1,54 @@
1
+ import { StoreBootRefusalError } from "./store-contracts.js";
2
+ /** 本条的拒启码(机读)。 */
3
+ export declare const SCENARIO_PREFIX_SWITCH_REFUSED_CODE = "config.scenario_prefix_switch_refused";
4
+ /** 本条在标记表(`one-time-migration-marker.ts`)里的那一行的键。 */
5
+ export declare const SCENARIO_PREFIX_MARKER_ID = "M42";
6
+ /** local 车道的标记文件(数据根下,文件名即本条)。 */
7
+ export declare const LOCAL_MARKER_FILE = "one-time-migration-M42.json";
8
+ /** 身份列的名字判据(建表句派生扫描面的唯一一条)。 */
9
+ export declare const IDENTITY_COLUMN_NAME: RegExp;
10
+ /** `LIKE` 的前缀模式(`!` 作转义符:两方言同义、不碰反斜杠的方言差;前缀里的 `_` 是通配符,必须转义)。 */
11
+ export declare const SCENARIO_PREFIX_LIKE: string;
12
+ /** 一处命中:来源(SQL = `表.列`;local = 店名)+ 以保留前缀开头的行数。 */
13
+ export interface ScenarioPrefixHit {
14
+ readonly source: string;
15
+ readonly rows: number;
16
+ }
17
+ /** 本条的读数 / 收据格(扫了几处来源;0 = 标记在场、没扫)。 */
18
+ export interface ScenarioPrefixReceipt {
19
+ scenarioPrefixSourcesScanned: number;
20
+ }
21
+ /** 拒因闭集:存量命中 / 零命中而更早版本的副本可能仍在服务(SQL 的停-迁-起)。 */
22
+ export type ScenarioPrefixRefusalReason = "stored_prefix" | "live_runs";
23
+ /** 判活读数(`live_runs` 那一拒带):判活窗内心跳过的 run 数与可以再起的最早时刻。 */
24
+ export interface ScenarioPrefixLiveRuns {
25
+ readonly liveRuns: number;
26
+ readonly windowSec: number;
27
+ readonly restartAfter: string;
28
+ readonly after: string;
29
+ }
30
+ /**
31
+ * M42 的起服拒。具名类型 + 机读码 + 拒因;继承 {@link StoreBootRefusalError}(SQL 开库的等待窗不重试它;隐式 local 的降级臂不吞)。一个字节没改(扫描只读,标记没写)。
32
+ * · `stored_prefix` —— 存量里有以保留前缀开头的身份(`hits` 逐来源点名);
33
+ * · `live_runs` —— 零命中,但判活窗内仍有 run 在心跳:更早版本的副本可能还在服务,扫描之后它还会收下这类身份 ⇒ 全停之后再起(`live` 带时刻)。
34
+ */
35
+ export declare class ScenarioPrefixSwitchRefusedError extends StoreBootRefusalError {
36
+ readonly reason: ScenarioPrefixRefusalReason;
37
+ readonly hits: readonly ScenarioPrefixHit[];
38
+ readonly live?: ScenarioPrefixLiveRuns | undefined;
39
+ readonly code = "config.scenario_prefix_switch_refused";
40
+ constructor(reason: ScenarioPrefixRefusalReason, hits: readonly ScenarioPrefixHit[], live?: ScenarioPrefixLiveRuns | undefined);
41
+ private static sentence;
42
+ }
43
+ /** local 腿的一处来源:店名 + 它的计数口(以保留前缀开头的属主行数)。 */
44
+ export interface LocalScenarioPrefixSource {
45
+ readonly source: string;
46
+ readonly rows: () => number | Promise<number>;
47
+ }
48
+ /**
49
+ * 🔴 M42 的 local 腿(唯一调用点 `LocalBackend.runOneTimeMigrations`,第一步):标记文件在 ⇒ 0(零扫描);否则逐店计数,一处命中 ⇒ {@link ScenarioPrefixSwitchRefusedError}
50
+ * (一字节没写);零命中 ⇒ 原子写标记文件(`required`:标记没落盘就不算扫过 —— 写不进 ⇒ 抛,起服拒,下一次起服重扫)。返回扫了几处来源。
51
+ * 数据根独占(根锁):同一只根上没有第二个起服者、也没有更早版本的副本与本次并跑 ⇒ 没有 SQL 腿的判活守卫。
52
+ */
53
+ export declare function switchLocalScenarioPrefixM42(markerPath: string, sources: readonly LocalScenarioPrefixSource[]): Promise<number>;
54
+ //# sourceMappingURL=scenario-prefix-switch-m42.d.ts.map
@@ -0,0 +1,55 @@
1
+ import { existsSync } from "node:fs";
2
+ import { SCENARIO_SUBJECT_PREFIX } from "../owner-brands.js";
3
+ import { atomicWriteFileSync } from "./owner-only-file-mode.js";
4
+ import { StoreBootRefusalError } from "./store-contracts.js";
5
+ export const SCENARIO_PREFIX_SWITCH_REFUSED_CODE = "config.scenario_prefix_switch_refused";
6
+ export const SCENARIO_PREFIX_MARKER_ID = "M42";
7
+ export const LOCAL_MARKER_FILE = "one-time-migration-M42.json";
8
+ export const IDENTITY_COLUMN_NAME = /(^|_)(owner|scope|principal|subject)$/;
9
+ export const SCENARIO_PREFIX_LIKE = `${SCENARIO_SUBJECT_PREFIX.replace(/[!%_]/g, "!$&")}%`;
10
+ export class ScenarioPrefixSwitchRefusedError extends StoreBootRefusalError {
11
+ reason;
12
+ hits;
13
+ live;
14
+ code = SCENARIO_PREFIX_SWITCH_REFUSED_CODE;
15
+ constructor(reason, hits, live) {
16
+ super(ScenarioPrefixSwitchRefusedError.sentence(reason, hits, live));
17
+ this.reason = reason;
18
+ this.hits = hits;
19
+ this.live = live;
20
+ this.name = "ScenarioPrefixSwitchRefusedError";
21
+ }
22
+ static sentence(reason, hits, live) {
23
+ switch (reason) {
24
+ case "stored_prefix":
25
+ return (`${SCENARIO_PREFIX_SWITCH_REFUSED_CODE}: stored identities start with the reserved prefix "${SCENARIO_SUBJECT_PREFIX}" (` +
26
+ hits.map((h) => `${h.source}: ${h.rows} row${h.rows === 1 ? "" : "s"}`).join(", ") +
27
+ `). This version reads that prefix as a scenario of a person, so these rows would be attributed to another person; it refuses to start rather than misread them. ` +
28
+ `Nothing was changed. Rename or delete those identities (the identity boundary now rejects principals with this prefix), then restart — ` +
29
+ `the check runs until it finds none, then records a marker in the store and does not run again.`);
30
+ case "live_runs":
31
+ return (`${SCENARIO_PREFIX_SWITCH_REFUSED_CODE}: no stored identity starts with the reserved prefix "${SCENARIO_SUBJECT_PREFIX}", but ${live?.liveRuns ?? 0} run(s) heartbeated on this database ` +
32
+ `within the last ${live?.windowSec ?? 0}s — a replica of an earlier version may still be serving, and it accepts principals with that prefix, so a clean check now would not stay clean. ` +
33
+ `Nothing was changed and no marker was written. Stop every replica of the earlier version, then start this version after ${live?.after ?? "the heartbeat window"} (this check is stop-then-start, not rolling).`);
34
+ default: {
35
+ const unhandled = reason;
36
+ throw new Error(`scenario-prefix-switch: unknown refusal reason ${String(unhandled)}`);
37
+ }
38
+ }
39
+ }
40
+ }
41
+ export async function switchLocalScenarioPrefixM42(markerPath, sources) {
42
+ if (existsSync(markerPath))
43
+ return 0;
44
+ const hits = [];
45
+ for (const s of sources) {
46
+ const rows = await s.rows();
47
+ if (rows > 0)
48
+ hits.push({ source: s.source, rows });
49
+ }
50
+ if (hits.length > 0)
51
+ throw new ScenarioPrefixSwitchRefusedError("stored_prefix", hits);
52
+ atomicWriteFileSync(markerPath, JSON.stringify({ migration: SCENARIO_PREFIX_MARKER_ID, markedAt: new Date().toISOString() }), { durability: "required" });
53
+ return sources.length;
54
+ }
55
+ //# sourceMappingURL=scenario-prefix-switch-m42.js.map
@@ -1,6 +1,7 @@
1
1
  import { SchedulerError } from "@sema-agent/core";
2
2
  import type { SchedulerCapability, ScheduledIntent, SchedulerContext, ScheduledTaskId, ScheduledTaskSummary } from "@sema-agent/core";
3
3
  import type { SchedulerParseWarning, SchedulerRecord } from "@sema-agent/settings-schema/scheduler-store";
4
+ import { type ConfigDirTrustHost } from "../config-dir-trust.js";
4
5
  export type { SchedulerRecord };
5
6
  /** core `Result<T,E>` shape (harness/types) — `{ok:true,value} | {ok:false,error}`. */
6
7
  type Result<T, E> = {
@@ -31,6 +32,11 @@ export declare function validateIntent(intent: ScheduledIntent, caps: Caps, nowM
31
32
  export declare function defaultSchedulerStorePath(config: {
32
33
  readonly agentConfigDir?: string;
33
34
  }): string;
35
+ /** {@link FileSchedulerBackend} 读写之前目录信任判官要的两件:声明的属主(`CONFIG_LOCAL_OWNER_UID`,配置席 `configLocalOwnerUid`)+ 宿主事实(测试注入;缺席 = 本进程)。 */
36
+ export interface SchedulerStoreTrust {
37
+ readonly declaredOwnerUid: number | undefined;
38
+ readonly host?: ConfigDirTrustHost;
39
+ }
34
40
  /** 调度店读写的日志口(logger 的子集)。 */
35
41
  export interface SchedulerStoreLog {
36
42
  warn(msg: string, meta?: Record<string, unknown>): void;
@@ -57,14 +63,23 @@ export declare class FileSchedulerBackend implements SchedulerCapability {
57
63
  private readonly storePath;
58
64
  private readonly now;
59
65
  private readonly log;
66
+ private readonly trust;
60
67
  /** `storePath` 必填:路径是装配层从配置定的事实(`SCHEDULER_STORE_PATH` ?? {@link defaultSchedulerStorePath}),本类不自己找缺省。
61
- * `log` 必填:店的每次读都交回告警(读不懂的文件 / 被跳过的记录 / 读时改写),没有不出声的读法。 */
68
+ * `log` 必填:店的每次读都交回告警(读不懂的文件 / 被跳过的记录 / 读时改写),没有不出声的读法。
69
+ * `trust` 必填:每次读写之前的目录信任判官要的声明属主(`CONFIG_LOCAL_OWNER_UID`;与本地配置根同一张可信集),见 {@link FileSchedulerBackend.untrustedStore}。 */
62
70
  constructor(opts: {
63
71
  storePath: string;
64
72
  log: SchedulerStoreLog;
73
+ trust: SchedulerStoreTrust;
65
74
  caps?: Partial<Caps>;
66
75
  now?: () => number;
67
76
  });
77
+ /**
78
+ * 🔴 每次读写之前过本地配置根的**同一只**目录信任判官(读者 `scheduler-store`):常驻调度方按记录点名的主体起任务,别人改得动这只店(文件或路径上任一级
79
+ * 组 / 他人可写、属主不在可信集;店还不在而它所在的目录别人能在其中建它)就改得动起什么 ⇒ 这一次读写整条拒(`io`,一个字节都不读不写),
80
+ * 运维日志一行 `scheduler_store_untrusted` 带与本地配置根同族的拒句(点名路径与模式 / 属主与改法);模型面只拿一句不带路径的 `io` 拒。
81
+ */
82
+ private untrustedStore;
68
83
  /** 一次读改写(契约的唯一写原语)。`fn` 必须纯、可重放(并发写者落地时整段重放);返回 `null` = 不写。拿不到结果的三形各成一个 `io` 错。 */
69
84
  private mutate;
70
85
  schedule(intent: ScheduledIntent, ctx: SchedulerContext): Promise<Result<{
@@ -1,8 +1,9 @@
1
- import { join } from "node:path";
1
+ import { dirname, join } from "node:path";
2
2
  import { randomBytes, createHash } from "node:crypto";
3
- import { SchedulerError, isValidCronExpr } from "@sema-agent/core";
3
+ import { SchedulerError, ensureDir, isValidCronExpr } from "@sema-agent/core";
4
4
  import { loadSchedulerStore, mutateSchedulerStore } from "@sema-agent/settings-schema/node";
5
5
  import { configRootOf } from "../sema-config-dir.js";
6
+ import { trustedFileRefusal } from "../config-dir-trust.js";
6
7
  const ok = (value) => ({ ok: true, value });
7
8
  const err = (error) => ({ ok: false, error });
8
9
  export const DEFAULT_SCHEDULER_CAPS = {
@@ -89,12 +90,21 @@ export class FileSchedulerBackend {
89
90
  storePath;
90
91
  now;
91
92
  log;
93
+ trust;
92
94
  constructor(opts) {
93
95
  this.schedulerCapabilities = { ...DEFAULT_SCHEDULER_CAPS, ...(opts.caps ?? {}) };
94
96
  this.storePath = opts.storePath;
95
97
  this.log = opts.log;
98
+ this.trust = opts.trust;
96
99
  this.now = opts.now ?? (() => Date.now());
97
100
  }
101
+ async untrustedStore() {
102
+ const refusal = await trustedFileRefusal({ reader: "scheduler-store", file: this.storePath, declaredOwnerUid: this.trust.declaredOwnerUid, ...(this.trust.host !== undefined ? { host: this.trust.host } : {}) });
103
+ if (refusal === undefined)
104
+ return undefined;
105
+ this.log.warn("scheduler_store_untrusted", { path: this.storePath, refusal, note: "the scheduled-task store can be changed by another user — this read / write was refused and nothing was written; the refusal names the path and the fix" });
106
+ return new SchedulerError("io", "the scheduled-task store is not trusted (another user could change it) — nothing was read or written; the operator log names the path and the fix");
107
+ }
98
108
  mutate(fn, what) {
99
109
  let result;
100
110
  let produced = false;
@@ -135,6 +145,10 @@ export class FileSchedulerBackend {
135
145
  if (intent.lifetime === "session" && this.schedulerCapabilities.supportsSessionLifetime === false) {
136
146
  return err(new SchedulerError("invalid_schedule", 'lifetime:"session" is not supported on this deployment (no resident daemon reaps session-lifetime records — the row would be an orphan)'));
137
147
  }
148
+ const untrusted = await this.untrustedStore();
149
+ if (untrusted)
150
+ return err(untrusted);
151
+ ensureDir(dirname(this.storePath));
138
152
  const key = dedupKey(ctx.scope, intent, ctx.sessionId);
139
153
  const decided = this.mutate((records) => {
140
154
  const existingIdx = records.findIndex((r) => {
@@ -166,6 +180,9 @@ export class FileSchedulerBackend {
166
180
  return decided.ok ? decided.value : decided;
167
181
  }
168
182
  async cancel(id, ctx) {
183
+ const untrusted = await this.untrustedStore();
184
+ if (untrusted)
185
+ return err(untrusted);
169
186
  const decided = this.mutate((records) => {
170
187
  const idx = records.findIndex((r) => r.id === id);
171
188
  if (idx < 0 || records[idx].scope !== ctx.scope) {
@@ -176,6 +193,9 @@ export class FileSchedulerBackend {
176
193
  return decided.ok ? decided.value : decided;
177
194
  }
178
195
  async list(ctx) {
196
+ const untrusted = await this.untrustedStore();
197
+ if (untrusted)
198
+ return err(untrusted);
179
199
  let read;
180
200
  try {
181
201
  read = loadSchedulerStore(this.storePath, { nowMs: this.now() });
@@ -26,6 +26,16 @@
26
26
  * 半径远大于本批;先解析文本,理由写在这里。)拒启文案里的那句 `ALTER TABLE … ADD COLUMN …` 也由
27
27
  * **同一份解析结果**生成,不是手写的。
28
28
  *
29
+ * ── 第二问:声明非空而库里允许 NULL(tightened)─────────────────────────────────────────────────────
30
+ * 缺列的拒句给的是 `ALTER TABLE … ADD COLUMN <原文>`;对「声明 `NOT NULL`、没有缺省、不是键」的列,那一句原文在已有行的表上会被引擎拒(PG)或写进隐式缺省(MySQL 非严格),
31
+ * 部署者于是把列加成**可空**——只列名对账从此转绿,而存量行在这一列上是 NULL,本构建按非空读它。所以对账多问一件事,**一条谓词**:本构建声明非空的列
32
+ * (顶层 `NOT NULL`,或主键成员)在库里是否也非空;库里允许 NULL ⇒ 拒,并给出收紧的下一步。谓词不分类;**配方**按同一张分类表({@link columnFill})给:
33
+ * · `self` —— 引擎自己给值(可空 / 有 DEFAULT / 自增 / 生成列):缺列 ⇒ 一句 `ADD COLUMN <原文>`;库里允许 NULL ⇒ 有 DEFAULT 的:一句**真语句**
34
+ * `UPDATE t SET c = <声明的 DEFAULT 原文> WHERE c IS NULL;`(缺省是本构建声明的,不算替存量行猜值)再收紧;自增 / 生成列:只收紧(值由引擎给);
35
+ * · `value` —— 声明非空、无缺省、不是键:缺列 ⇒ 可空加列 → 注释回填(值只有部署者知道) → 收紧;库里允许 NULL ⇒ 只打后两(三)句;
36
+ * · `key` —— 主键成员:给存量行加主键列等于改它们的身份,**不出语句**,只一句话(出路走「部署匹配的构建」)。
37
+ * 反方向(构建可空、库里非空)不判:现网库里可能有,判了会让数量不明的库起不来。
38
+ *
29
39
  * ── 失败方向:读不到就拒,不跳过 ─────────────────────────────────────────────────────────────
30
40
  * information_schema 查询抛错、或整库一行都读不出来 ⇒ **拒启**。探针的语义是「我证明了库等于代码」,
31
41
  * 证不出来时放行等于把一条保护性断言静默降级成祝福([ref]:保护型缺席必须 fail-closed)。
@@ -51,12 +61,16 @@
51
61
  import type { Pool as MysqlPool } from "mysql2/promise";
52
62
  import type { Pool as PgPool } from "pg";
53
63
  import type { SqlDialect } from "./sql-driver.js";
54
- import { type SchemaProbeRead } from "./schema-live-columns.js";
64
+ import { type LiveColumns, type SchemaProbeRead } from "./schema-live-columns.js";
55
65
  import { StoreBootRefusalError } from "./store-contracts.js";
56
- /** 一列:名字 + 它在 `CREATE TABLE` 里的**原样定义文本**(生成 ADD COLUMN 指路用,不另手写)。 */
66
+ /**
67
+ * 一列:名字 + 它在 `CREATE TABLE` 里的**原样定义文本**(生成 ADD COLUMN 指路用,不另手写)。
68
+ * `key` 只在为真时出现:这一列是主键成员(内联 `PRIMARY KEY`,或表级 / 命名约束 `PRIMARY KEY (…)` 的成员);缺席 = 不是键。
69
+ */
57
70
  export interface ParsedColumn {
58
71
  readonly name: string;
59
72
  readonly ddl: string;
73
+ readonly key?: true;
60
74
  }
61
75
  /** 一张表的列形。 */
62
76
  export interface ParsedTable {
@@ -66,19 +80,27 @@ export interface ParsedTable {
66
80
  /**
67
81
  * 解析一条 `CREATE TABLE`。不是建表语句(CREATE INDEX / INSERT / SELECT / CREATE EXTENSION)⇒ `undefined`。
68
82
  *
69
- * 认识面窄得刻意:只取**表名 + 顶层列名 + 该列的定义文本**。类型、默认值、可空性一律**不比对** ——
83
+ * 认识面窄得刻意:取**表名 + 顶层列名 + 该列的定义文本 + 是否主键成员**。类型、默认值**不比对** ——
70
84
  * 本探针守的是「列在不在」这一类(T-47 的真病),把类型也拉进来会让方言差异(`DATETIME(3)` ⇄
71
85
  * `TIMESTAMPTZ(3)`、`vector(d)` ⇄ `jsonb` 的运行期参数化)变成一堆假红,而那是另一条判据另一台车。
86
+ * 唯一多看的一件是声明非空的列在库里是否仍允许 NULL({@link declaresNotNull} / {@link diffSchema}),原因见文件头「第二问」。
72
87
  */
73
88
  export declare function parseCreateTable(stmt: string): ParsedTable | undefined;
74
- /** 启动时真会建出来的**全部**表形(录制 → 解析)。同名表二次出现以**先到**为准(`IF NOT EXISTS` 的真语义)。 */
75
- export declare function expectedTableShapes(dialect: SqlDialect): Promise<Map<string, ParsedTable>>;
89
+ /** 这一列声明的 `DEFAULT` 表达式原文;没有缺省(或值由引擎给)⇒ `undefined`;有缺省却读不出 ⇒ 抛。 */
90
+ export declare function declaredDefault(col: ParsedColumn): string | undefined;
91
+ /** 本构建声明这一列非空:顶层 `NOT NULL`,或主键成员。**tightened 的唯一谓词**(库里该列允许 NULL ⇒ 拒)。 */
92
+ export declare function declaresNotNull(col: ParsedColumn): boolean;
76
93
  /**
77
- * 拒启码(机读)。附录 A / 拒启码表的登记名。含义 = 「本构建读不出的持久形,开始服务之前判」,一个码三只臂:本文件的列册对账与退役 schema 两道(SQL),
78
- * 以及 local 数据根的严格边档对账(`local-session-store.ts` 的 `LocalDataRootSchemaMismatchError`,`LocalBackend.ensureSchema()` 调;拒句同形:
79
- * 码开头的表头 · 逐坐标一段 · 「NEWER than this build」方向句 · 闭集出路)。
94
+ * 一列的「给存量行补值」类:**配方的分类表**(见文件头「第二问」;判 tightened 用 {@link declaresNotNull} 一条谓词,不按类开例外)。
95
+ * · `key` —— 主键成员(优先于其它);
96
+ * · `value` —— 声明非空(顶层 `NOT NULL`)∧ 无 `DEFAULT` ∧ 不是自增 / 序列 / 生成列:值只有部署者知道;
97
+ * · `self` —— 其余:可空、或引擎自己给值(DEFAULT 的值就是声明的那个)。
98
+ * 关键字只在顶层算({@link maskNested}):列名、引号串、括号组里的字样不参与。
80
99
  */
81
- export declare const SCHEMA_MISMATCH_ERROR_CODE = "config.schema_mismatch";
100
+ export type ColumnFill = "key" | "value" | "self";
101
+ export declare function columnFill(col: ParsedColumn): ColumnFill;
102
+ /** 启动时真会建出来的**全部**表形(录制 → 解析)。同名表二次出现以**先到**为准(`IF NOT EXISTS` 的真语义)。 */
103
+ export declare function expectedTableShapes(dialect: SqlDialect): Promise<Map<string, ParsedTable>>;
82
104
  /** 一张表的对账结论。 */
83
105
  export interface TableMismatch {
84
106
  readonly table: string;
@@ -86,19 +108,24 @@ export interface TableMismatch {
86
108
  readonly missing: readonly ParsedColumn[];
87
109
  /** 库有、代码没有(库比代码**新** —— 滚动窗里的旧副本)。 */
88
110
  readonly ghost: readonly string[];
111
+ /** 列在库里、构建声明非空({@link declaresNotNull})而库里允许 NULL(库比代码**旧**:缺列时部署者把它加成了可空,还没补值收紧;或手工放宽过)。 */
112
+ readonly tightened: readonly ParsedColumn[];
89
113
  }
90
- /** 对账(纯函数:期望 × 实况 → 不符表清单)。 */
91
- export declare function diffSchema(expected: Map<string, ParsedTable>, live: Map<string, Set<string>>): TableMismatch[];
114
+ /** 对账(纯函数:期望 × 实况 → 不符表清单)。实况 = {@link readLiveColumns} 的读数(列在不在 + 可不可空,一次读)。 */
115
+ export declare function diffSchema(expected: Map<string, ParsedTable>, live: LiveColumns): TableMismatch[];
116
+ /** 缺一列时的配方(按 {@link columnFill} 三类);拒启句里这一列的那几行就是它的返回值,真库钉据此取期望而不手抄句子。 */
117
+ export declare function missingColumnLines(dialect: SqlDialect, table: string, c: ParsedColumn): string[];
92
118
  /**
93
119
  * 逐表段 + 闭集出路段(多行):整库对账的拒启句与单表探针的拒因共用这一份句形(`schema-drift-sentence.ts` 的 `describeProbedTableDrift` 读它)。
94
- * ADD COLUMN 句由解析结果**生成**,不手写。
120
+ * 语句由解析结果**生成**,不手写;逐列配方按 {@link columnFill} 三类(缺列:自填 = 一句 ADD COLUMN,要值 = 可空加列 → 回填注释 → 收紧,键 = 一句话没有语句;
121
+ * 列在而允许 NULL:见 {@link tightenedColumnLines})。
95
122
  *
96
123
  * 出路段 = {@link SCHEMA_MISMATCH_WAYS_OUT}(**闭集三条**,常量;句子的属主在 `schema-drift-sentence.ts`):
97
- * ① 部署与这个库匹配的构建;② 库比构建旧(缺列)⇒ 部署者自己执行上面逐字打印的 `ALTER TABLE … ADD COLUMN …`(列集对账与拒启句永不改库);
98
- * ③ 库比构建新(多列)⇒ 部署持有那些列的构建(先升库、再升副本)。
124
+ * ① 部署与这个库匹配的构建;② 库比构建旧(缺列,或声明非空而库里允许 NULL)⇒ 部署者自己执行上面逐字打印的语句(要值的列,值归部署者;打印的语句全部生效之前拒启不松)
125
+ * (列集对账与拒启句永不改库);③ 库比构建新(多列)⇒ 部署持有那些列的构建(先升库、再升副本)。
99
126
  * 🔴 **没有销毁性的一条**:对带数据的库,任何「删库 / 重建」的指路都是教人销毁数据 —— 这里不写,拒启句的钉也守着(`test/schema-consistency.test.ts` ⑤)。
100
127
  */
101
- export declare function describeMismatchedTables(mismatches: readonly TableMismatch[]): string[];
128
+ export declare function describeMismatchedTables(dialect: SqlDialect, mismatches: readonly TableMismatch[]): string[];
102
129
  /** 拒启文案(表头 + 逐表段与闭集三条出路 {@link describeMismatchedTables})。 */
103
130
  export declare function describeSchemaMismatch(dialect: SqlDialect, mismatches: readonly TableMismatch[]): string;
104
131
  /**
@@ -1,9 +1,9 @@
1
1
  import { recordEnsureStatements } from "./schema-ensure-legs.js";
2
2
  import { readLiveColumns } from "./schema-live-columns.js";
3
3
  import { SCHEMA_MISMATCH_WAYS_OUT } from "./schema-drift-sentence.js";
4
- import { StoreBootRefusalError } from "./store-contracts.js";
4
+ import { SCHEMA_MISMATCH_ERROR_CODE, StoreBootRefusalError } from "./store-contracts.js";
5
5
  const QUOTES = new Set(["'", '"', "`"]);
6
- function stripLineComments(sql) {
6
+ function stripComments(sql) {
7
7
  let out = "";
8
8
  for (let i = 0; i < sql.length; i++) {
9
9
  const c = sql[i];
@@ -25,6 +25,12 @@ function stripLineComments(sql) {
25
25
  out += "\n";
26
26
  continue;
27
27
  }
28
+ if (c === "/" && sql[i + 1] === "*") {
29
+ const end = sql.indexOf("*/", i + 2);
30
+ out += " ";
31
+ i = end < 0 ? sql.length : end + 1;
32
+ continue;
33
+ }
28
34
  out += c;
29
35
  }
30
36
  return out;
@@ -56,8 +62,69 @@ function splitTopLevel(body) {
56
62
  }
57
63
  const CONSTRAINT_HEADS = new Set(["PRIMARY", "UNIQUE", "KEY", "INDEX", "CONSTRAINT", "FOREIGN", "CHECK", "FULLTEXT", "SPATIAL", "EXCLUDE"]);
58
64
  const unquote = (s) => s.replace(/^[`"](.*)[`"]$/s, "$1");
65
+ function maskNested(s) {
66
+ let out = "";
67
+ let depth = 0;
68
+ for (let i = 0; i < s.length; i++) {
69
+ const c = s[i];
70
+ if (QUOTES.has(c)) {
71
+ let j = i + 1;
72
+ while (j < s.length && s[j] !== c)
73
+ j++;
74
+ out += "\0".repeat(Math.min(j, s.length - 1) - i + 1);
75
+ i = j;
76
+ continue;
77
+ }
78
+ if (c === "(") {
79
+ out += depth === 0 ? "(" : "\0";
80
+ depth++;
81
+ }
82
+ else if (c === ")") {
83
+ depth = Math.max(0, depth - 1);
84
+ out += "\0";
85
+ }
86
+ else {
87
+ out += depth > 0 ? "\0" : c;
88
+ }
89
+ }
90
+ return out;
91
+ }
92
+ function groupEnd(s, open) {
93
+ let depth = 0;
94
+ for (let i = open; i < s.length; i++) {
95
+ const c = s[i];
96
+ if (QUOTES.has(c)) {
97
+ i++;
98
+ while (i < s.length && s[i] !== c)
99
+ i++;
100
+ continue;
101
+ }
102
+ if (c === "(")
103
+ depth++;
104
+ else if (c === ")") {
105
+ depth--;
106
+ if (depth === 0)
107
+ return i;
108
+ }
109
+ }
110
+ return -1;
111
+ }
112
+ function primaryKeyMembers(constraint) {
113
+ const at = /\bPRIMARY\s+KEY\b/i.exec(maskNested(constraint));
114
+ if (!at)
115
+ return [];
116
+ const open = constraint.indexOf("(", at.index);
117
+ if (open < 0)
118
+ return [];
119
+ const close = groupEnd(constraint, open);
120
+ if (close < 0)
121
+ return [];
122
+ return splitTopLevel(constraint.slice(open + 1, close))
123
+ .map((m) => unquote(m.trim().split(/[\s(]/, 1)[0]).toLowerCase())
124
+ .filter((m) => m !== "");
125
+ }
59
126
  export function parseCreateTable(stmt) {
60
- const sql = stripLineComments(stmt).trim();
127
+ const sql = stripComments(stmt).trim();
61
128
  const head = /^CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?([`"]?[\w$.]+[`"]?)\s*\(/i.exec(sql);
62
129
  if (!head)
63
130
  return undefined;
@@ -85,18 +152,93 @@ export function parseCreateTable(stmt) {
85
152
  }
86
153
  if (close < 0)
87
154
  return undefined;
88
- const columns = [];
155
+ const plain = [];
156
+ const tableKey = new Set();
89
157
  for (const raw of splitTopLevel(sql.slice(open + 1, close))) {
90
158
  const part = raw.trim().replace(/\s+/g, " ");
91
159
  if (part === "")
92
160
  continue;
93
161
  const first = part.split(/[\s(]/, 1)[0];
94
- if (CONSTRAINT_HEADS.has(first.toUpperCase()))
162
+ if (CONSTRAINT_HEADS.has(first.toUpperCase())) {
163
+ for (const member of primaryKeyMembers(part))
164
+ tableKey.add(member);
95
165
  continue;
96
- columns.push({ name: unquote(first).toLowerCase(), ddl: part });
166
+ }
167
+ plain.push({ name: unquote(first).toLowerCase(), ddl: part, inlineKey: /\bPRIMARY\s+KEY\b/i.test(maskNested(part.slice(first.length))) });
97
168
  }
169
+ const columns = plain.map((c) => (c.inlineKey || tableKey.has(c.name) ? { name: c.name, ddl: c.ddl, key: true } : { name: c.name, ddl: c.ddl }));
98
170
  return { table: unquote(head[1]).toLowerCase(), columns };
99
171
  }
172
+ function declarationOf(col) {
173
+ const rest = col.ddl.slice(col.ddl.split(/[\s(]/, 1)[0].length);
174
+ const top = maskNested(rest);
175
+ const notNull = /\bNOT\s+NULL\b/i.test(top);
176
+ const engineGives = /\b(?:AUTO_INCREMENT|GENERATED|IDENTITY|(?:BIG|SMALL)?SERIAL\d?)\b/i.test(top) || /\bAS\s*\(/i.test(top);
177
+ const at = /\bDEFAULT\b/i.exec(top);
178
+ const hasDefault = at !== null;
179
+ const defaultExpr = () => (!engineGives && at !== null ? defaultExpression(rest, at.index + at[0].length, col.name) : undefined);
180
+ return { key: col.key === true, notNull, engineGives, hasDefault, defaultExpr };
181
+ }
182
+ function defaultExpression(rest, from, column) {
183
+ let i = from;
184
+ while (i < rest.length && /\s/.test(rest[i]))
185
+ i++;
186
+ const start = i;
187
+ const c = rest[i];
188
+ let end = -1;
189
+ if (c !== undefined && QUOTES.has(c)) {
190
+ let j = i + 1;
191
+ for (;;) {
192
+ while (j < rest.length && rest[j] !== c)
193
+ j++;
194
+ if (j >= rest.length)
195
+ break;
196
+ if (rest[j + 1] === c) {
197
+ j += 2;
198
+ continue;
199
+ }
200
+ end = j + 1;
201
+ break;
202
+ }
203
+ }
204
+ else if (c === "(") {
205
+ const close = groupEnd(rest, i);
206
+ if (close >= 0)
207
+ end = close + 1;
208
+ }
209
+ else if (c !== undefined) {
210
+ const word = /^[+-]?[A-Za-z0-9_.$]+/.exec(rest.slice(i));
211
+ if (word) {
212
+ end = i + word[0].length;
213
+ if (rest[end] === "(") {
214
+ const close = groupEnd(rest, end);
215
+ end = close >= 0 ? close + 1 : -1;
216
+ }
217
+ }
218
+ }
219
+ if (end < 0 || end === start)
220
+ throw new Error(`cannot read the DEFAULT expression of column ${column}: ${rest.trim()}`);
221
+ return rest.slice(start, end);
222
+ }
223
+ export function declaredDefault(col) {
224
+ return declarationOf(col).defaultExpr();
225
+ }
226
+ export function declaresNotNull(col) {
227
+ const d = declarationOf(col);
228
+ return d.key || d.notNull;
229
+ }
230
+ export function columnFill(col) {
231
+ const d = declarationOf(col);
232
+ if (d.key)
233
+ return "key";
234
+ return d.notNull && !d.engineGives && !d.hasDefault ? "value" : "self";
235
+ }
236
+ function nullableForm(ddl) {
237
+ const at = /(?:\bCONSTRAINT\s+\S+\s+)?\bNOT\s+NULL\b/i.exec(maskNested(ddl));
238
+ if (!at)
239
+ return ddl;
240
+ return (ddl.slice(0, at.index) + " " + ddl.slice(at.index + at[0].length)).replace(/\s+/g, " ").trim();
241
+ }
100
242
  export async function expectedTableShapes(dialect) {
101
243
  const shapes = new Map();
102
244
  for (const stmt of await recordEnsureStatements(dialect)) {
@@ -106,7 +248,6 @@ export async function expectedTableShapes(dialect) {
106
248
  }
107
249
  return shapes;
108
250
  }
109
- export const SCHEMA_MISMATCH_ERROR_CODE = "config.schema_mismatch";
110
251
  export function diffSchema(expected, live) {
111
252
  const out = [];
112
253
  for (const [table, shape] of expected) {
@@ -115,19 +256,78 @@ export function diffSchema(expected, live) {
115
256
  continue;
116
257
  const missing = shape.columns.filter((c) => !cols.has(c.name));
117
258
  const known = new Set(shape.columns.map((c) => c.name));
118
- const ghost = [...cols].filter((c) => !known.has(c)).sort();
119
- if (missing.length > 0 || ghost.length > 0)
120
- out.push({ table, missing, ghost });
259
+ const ghost = [...cols.keys()].filter((c) => !known.has(c)).sort();
260
+ const tightened = shape.columns.filter((c) => cols.get(c.name)?.nullable === true && declaresNotNull(c));
261
+ if (missing.length > 0 || ghost.length > 0 || tightened.length > 0)
262
+ out.push({ table, missing, ghost, tightened });
121
263
  }
122
264
  return out;
123
265
  }
124
- export function describeMismatchedTables(mismatches) {
266
+ function tightenLines(dialect, table, c) {
267
+ switch (dialect) {
268
+ case "pg":
269
+ return [` ALTER TABLE ${table} ALTER COLUMN ${columnRef(c)} SET NOT NULL;`];
270
+ case "mysql":
271
+ return [` SET SESSION sql_mode = CONCAT_WS(',', @@SESSION.sql_mode, 'STRICT_ALL_TABLES');`, ` ALTER TABLE ${table} MODIFY COLUMN ${c.ddl};`];
272
+ default: {
273
+ const unreachable = dialect;
274
+ throw new Error(`unknown SQL dialect ${String(unreachable)}`);
275
+ }
276
+ }
277
+ }
278
+ const columnRef = (c) => c.ddl.split(/[\s(]/, 1)[0];
279
+ function backfillComment(table, column) {
280
+ return ` -- rows already in ${table} need a value for ${column} that this build cannot choose: UPDATE ${table} SET ${column} = … WHERE ${column} IS NULL;`;
281
+ }
282
+ export function missingColumnLines(dialect, table, c) {
283
+ const fill = columnFill(c);
284
+ switch (fill) {
285
+ case "self":
286
+ return [` ALTER TABLE ${table} ADD COLUMN ${c.ddl};`];
287
+ case "value":
288
+ return [` ALTER TABLE ${table} ADD COLUMN ${nullableForm(c.ddl)};`, backfillComment(table, columnRef(c)), ...tightenLines(dialect, table, c)];
289
+ case "key":
290
+ return [` table ${table}: column ${c.name} is part of the primary key — adding it to rows already in ${table} changes their identity; this build has no statement for it.`];
291
+ default: {
292
+ const unreachable = fill;
293
+ throw new Error(`unknown column fill ${String(unreachable)}`);
294
+ }
295
+ }
296
+ }
297
+ function tightenedColumnLines(dialect, table, c) {
298
+ const fill = columnFill(c);
299
+ switch (fill) {
300
+ case "key":
301
+ return [` table ${table}: column ${c.name} is part of the primary key and allows NULL in the database — rows already in ${table} may hold NULL in their key; this build has no statement for it.`];
302
+ case "value":
303
+ return [backfillComment(table, columnRef(c)), ...tightenLines(dialect, table, c)];
304
+ case "self": {
305
+ if (!declaresNotNull(c))
306
+ throw new Error(`schema mismatch for ${table}.${c.name}: a column this build declares nullable cannot be tightened`);
307
+ const defaultExpr = declaredDefault(c);
308
+ const ref = columnRef(c);
309
+ return defaultExpr === undefined
310
+ ? tightenLines(dialect, table, c)
311
+ : [` UPDATE ${table} SET ${ref} = ${defaultExpr} WHERE ${ref} IS NULL;`, ...tightenLines(dialect, table, c)];
312
+ }
313
+ default: {
314
+ const unreachable = fill;
315
+ throw new Error(`unknown column fill ${String(unreachable)}`);
316
+ }
317
+ }
318
+ }
319
+ export function describeMismatchedTables(dialect, mismatches) {
125
320
  const lines = [];
126
321
  for (const m of mismatches) {
127
322
  if (m.missing.length > 0) {
128
323
  lines.push(` table ${m.table}: MISSING column(s) ${m.missing.map((c) => c.name).join(", ")} — the database is OLDER than this build.`);
129
324
  for (const c of m.missing)
130
- lines.push(` ALTER TABLE ${m.table} ADD COLUMN ${c.ddl};`);
325
+ lines.push(...missingColumnLines(dialect, m.table, c));
326
+ }
327
+ if (m.tightened.length > 0) {
328
+ lines.push(` table ${m.table}: column(s) ${m.tightened.map((c) => c.name).join(", ")} allow NULL in the database, but this build declares them NOT NULL — the database is OLDER than this build.`);
329
+ for (const c of m.tightened)
330
+ lines.push(...tightenedColumnLines(dialect, m.table, c));
131
331
  }
132
332
  if (m.ghost.length > 0) {
133
333
  lines.push(` table ${m.table}: UNKNOWN column(s) ${m.ghost.join(", ")} — the database is NEWER than this build (a rolling window where an old replica reached an upgraded database).`);
@@ -143,7 +343,7 @@ export function describeSchemaMismatch(dialect, mismatches) {
143
343
  "Schema policy: the code is the single source of truth, and the column check that produced this refusal never alters a database —",
144
344
  "so a drifted database is a deployment-order problem, not something the process may quietly work around.",
145
345
  "",
146
- ...describeMismatchedTables(mismatches),
346
+ ...describeMismatchedTables(dialect, mismatches),
147
347
  ];
148
348
  return lines.join("\n");
149
349
  }