@sema-agent/server 7.147.0 → 7.149.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 (790) hide show
  1. package/MIGRATION.md +1468 -24
  2. package/README.md +35 -7
  3. package/README.zh-CN.md +18 -8
  4. package/USAGE.md +444 -193
  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/approval-card.d.ts +36 -38
  39. package/dist/approval-gate-currency.js +3 -2
  40. package/dist/approval-leg-origin.d.ts +33 -0
  41. package/dist/approval-leg-origin.js +4 -0
  42. package/dist/approval-reconciler.d.ts +4 -13
  43. package/dist/approval-reconciler.js +2 -2
  44. package/dist/approval.d.ts +13 -11
  45. package/dist/approval.js +3 -3
  46. package/dist/audit.d.ts +10 -3
  47. package/dist/audit.js +15 -7
  48. package/dist/auth-bridge.d.ts +9 -15
  49. package/dist/auth-bridge.js +4 -11
  50. package/dist/auth-keys.d.ts +10 -1
  51. package/dist/auth-keys.js +8 -0
  52. package/dist/auto-mode-face.d.ts +10 -7
  53. package/dist/auto-mode-face.js +7 -4
  54. package/dist/background-agent-name.d.ts +19 -1
  55. package/dist/background-agent-name.js +12 -2
  56. package/dist/background-session-reap.d.ts +1 -1
  57. package/dist/bake-runner/main.js +9 -6
  58. package/dist/bench/s1/arms.js +6 -5
  59. package/dist/bench/s1/live-deps.js +5 -2
  60. package/dist/bench/s1/run-firm.js +6 -5
  61. package/dist/bind-host.d.ts +25 -0
  62. package/dist/bind-host.js +25 -0
  63. package/dist/boot/adoption.d.ts +3 -0
  64. package/dist/boot/adoption.js +1 -0
  65. package/dist/boot/deployment-mods.d.ts +1 -1
  66. package/dist/boot/execution-env.d.ts +17 -7
  67. package/dist/boot/execution-env.js +47 -42
  68. package/dist/boot/execution-lane.d.ts +6 -4
  69. package/dist/boot/execution-lane.js +3 -1
  70. package/dist/boot/exit-boundary.d.ts +2 -2
  71. package/dist/boot/exit-boundary.js +6 -5
  72. package/dist/boot/fatal-exit.d.ts +3 -5
  73. package/dist/boot/fatal-exit.js +2 -2
  74. package/dist/boot/leader.d.ts +15 -0
  75. package/dist/boot/leader.js +17 -15
  76. package/dist/boot/memory-consolidation.d.ts +37 -29
  77. package/dist/boot/memory-consolidation.js +11 -5
  78. package/dist/boot/org-delivery.d.ts +3 -2
  79. package/dist/boot/org-memory.js +1 -1
  80. package/dist/boot/parked-revive-gate.js +2 -2
  81. package/dist/boot/reapers.d.ts +4 -3
  82. package/dist/boot/reapers.js +19 -16
  83. package/dist/boot/resolve-spec.d.ts +5 -3
  84. package/dist/boot/resolve-spec.js +60 -70
  85. package/dist/boot/retention-lane.d.ts +4 -4
  86. package/dist/boot/retention-lane.js +2 -2
  87. package/dist/boot/runner-deps.d.ts +28 -7
  88. package/dist/boot/runner-deps.js +14 -5
  89. package/dist/boot/runtime-caps.d.ts +2 -2
  90. package/dist/boot/runtime-caps.js +16 -2
  91. package/dist/boot/session-faces.d.ts +16 -7
  92. package/dist/boot/session-faces.js +114 -94
  93. package/dist/boot/shutdown.d.ts +5 -4
  94. package/dist/boot/shutdown.js +6 -4
  95. package/dist/boot/stage-01-config.d.ts +1 -0
  96. package/dist/boot/stage-01-config.js +13 -4
  97. package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
  98. package/dist/boot/stage-02-web-admin-pull.js +16 -3
  99. package/dist/boot/stage-03-store-backend.d.ts +4 -0
  100. package/dist/boot/stage-03-store-backend.js +4 -3
  101. package/dist/boot/stage-04-stores.d.ts +3 -0
  102. package/dist/boot/stage-04-stores.js +2 -2
  103. package/dist/boot/stage-05-execution-env.d.ts +8 -3
  104. package/dist/boot/stage-05-execution-env.js +2 -2
  105. package/dist/boot/stage-06-runners.d.ts +12 -13
  106. package/dist/boot/stage-06-runners.js +23 -15
  107. package/dist/boot/stage-07-capability-layer.d.ts +13 -9
  108. package/dist/boot/stage-07-capability-layer.js +5 -3
  109. package/dist/boot/stage-08-reapers.d.ts +13 -9
  110. package/dist/boot/stage-08-reapers.js +3 -3
  111. package/dist/boot/stage-09-leader.d.ts +14 -16
  112. package/dist/boot/stage-09-leader.js +12 -4
  113. package/dist/boot/stage-10-http-server.d.ts +14 -16
  114. package/dist/boot/stage-10-http-server.js +7 -4
  115. package/dist/boot/store-evidence.d.ts +20 -0
  116. package/dist/boot/store-evidence.js +13 -0
  117. package/dist/boot/stores.d.ts +6 -0
  118. package/dist/boot/stores.js +41 -27
  119. package/dist/boot/task-list-lane.d.ts +4 -4
  120. package/dist/boot/web-admin.d.ts +4 -2
  121. package/dist/boot/web-admin.js +55 -35
  122. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  123. package/dist/boot-reclaim.d.ts +3 -1
  124. package/dist/boot-reclaim.js +1 -1
  125. package/dist/brain.d.ts +7 -18
  126. package/dist/brain.js +5 -17
  127. package/dist/budget.js +6 -6
  128. package/dist/capabilities/center-plugins.d.ts +7 -1
  129. package/dist/capabilities/center-plugins.js +32 -10
  130. package/dist/capabilities/center-wiring.js +1 -1
  131. package/dist/capabilities/composite-members.d.ts +2 -2
  132. package/dist/capabilities/composite-members.js +2 -2
  133. package/dist/capabilities/repo-tools.d.ts +2 -0
  134. package/dist/capabilities/repo-tools.js +14 -12
  135. package/dist/capabilities/scenarios.d.ts +6 -15
  136. package/dist/capabilities/scenarios.js +11 -16
  137. package/dist/capabilities/skills.d.ts +1 -1
  138. package/dist/capabilities/tool-defer.d.ts +1 -1
  139. package/dist/capability-facts.d.ts +39 -11
  140. package/dist/capability-facts.js +35 -7
  141. package/dist/card-settle-stored-scope.d.ts +56 -0
  142. package/dist/card-settle-stored-scope.js +27 -0
  143. package/dist/card-void.d.ts +8 -13
  144. package/dist/card-void.js +2 -7
  145. package/dist/center-credential-renewer.d.ts +6 -2
  146. package/dist/center-credential-renewer.js +7 -3
  147. package/dist/config-catalog.d.ts +28 -1
  148. package/dist/config-catalog.js +95 -85
  149. package/dist/config-dir-trust.d.ts +37 -4
  150. package/dist/config-dir-trust.js +88 -44
  151. package/dist/config-invariants.d.ts +43 -3
  152. package/dist/config-invariants.js +69 -5
  153. package/dist/config-lkg.d.ts +23 -1
  154. package/dist/config-lkg.js +17 -3
  155. package/dist/config-provider.d.ts +9 -9
  156. package/dist/config-provider.js +25 -110
  157. package/dist/config-pull-failure.d.ts +50 -0
  158. package/dist/config-pull-failure.js +48 -0
  159. package/dist/config-types.d.ts +62 -21
  160. package/dist/config.d.ts +14 -21
  161. package/dist/config.js +141 -64
  162. package/dist/context-window-notice.d.ts +31 -0
  163. package/dist/context-window-notice.js +28 -0
  164. package/dist/delegated-session-owner.d.ts +1 -1
  165. package/dist/deleted-session-ids.d.ts +3 -2
  166. package/dist/deployment-governance.d.ts +3 -3
  167. package/dist/deployment-shape.d.ts +46 -11
  168. package/dist/deployment-shape.js +8 -0
  169. package/dist/egress-redirect.d.ts +25 -7
  170. package/dist/egress-redirect.js +20 -2
  171. package/dist/elicitation.d.ts +6 -5
  172. package/dist/elicitation.js +23 -22
  173. package/dist/engine-identity.d.ts +28 -0
  174. package/dist/engine-identity.js +10 -0
  175. package/dist/entry-problems.d.ts +5 -7
  176. package/dist/entry-problems.js +1 -1
  177. package/dist/env-facts.js +2 -1
  178. package/dist/env-name-allowlist-knobs.d.ts +6 -5
  179. package/dist/env-name-allowlist-knobs.js +5 -0
  180. package/dist/env-witness.d.ts +7 -0
  181. package/dist/env-witness.js +16 -0
  182. package/dist/execution-lane-caps.d.ts +25 -23
  183. package/dist/execution-lane-caps.js +18 -26
  184. package/dist/execution-placement.d.ts +58 -18
  185. package/dist/execution-placement.js +41 -2
  186. package/dist/field-conflict.d.ts +7 -11
  187. package/dist/field-conflict.js +3 -3
  188. package/dist/file-history-capture.d.ts +3 -3
  189. package/dist/file-history-disclosure.js +1 -0
  190. package/dist/fleet/fleet-bus.d.ts +21 -3
  191. package/dist/fleet/fleet-bus.js +35 -25
  192. package/dist/fleet/fleet-reconciler.js +2 -2
  193. package/dist/fleet/serving-lease.js +3 -3
  194. package/dist/fleet-client.js +3 -3
  195. package/dist/fleet-lease.d.ts +0 -1
  196. package/dist/fleet-lease.js +4 -5
  197. package/dist/history-anchor.d.ts +23 -3
  198. package/dist/history-anchor.js +24 -4
  199. package/dist/hitl-delivery.d.ts +90 -0
  200. package/dist/hitl-delivery.js +98 -0
  201. package/dist/hooks/classic-stations.d.ts +8 -11
  202. package/dist/hooks/classic-stations.js +0 -7
  203. package/dist/hooks/command-spawn.d.ts +7 -2
  204. package/dist/hooks/command-spawn.js +13 -6
  205. package/dist/hooks/hook-llm.d.ts +5 -1
  206. package/dist/hooks/hook-llm.js +24 -15
  207. package/dist/hooks/hook-runner.d.ts +72 -57
  208. package/dist/hooks/hook-runner.js +271 -193
  209. package/dist/host-lsp-manager.d.ts +22 -8
  210. package/dist/host-lsp-manager.js +4 -1
  211. package/dist/http/active-run-conflict.d.ts +2 -43
  212. package/dist/http/active-run-conflict.js +3 -7
  213. package/dist/http/admission.d.ts +4 -18
  214. package/dist/http/admission.js +76 -79
  215. package/dist/http/approval-sweeps.d.ts +3 -3
  216. package/dist/http/approval-sweeps.js +56 -31
  217. package/dist/http/caller-trust.d.ts +8 -10
  218. package/dist/http/caller-trust.js +1 -2
  219. package/dist/http/claim-heartbeat.d.ts +49 -0
  220. package/dist/http/claim-heartbeat.js +46 -0
  221. package/dist/http/claimed-run.d.ts +16 -8
  222. package/dist/http/claimed-run.js +8 -0
  223. package/dist/http/dispatch.d.ts +8 -1
  224. package/dist/http/dispatch.js +78 -30
  225. package/dist/http/durable-run-leg.d.ts +11 -4
  226. package/dist/http/durable-run-leg.js +45 -21
  227. package/dist/http/execution-context.d.ts +122 -47
  228. package/dist/http/execution-context.js +135 -43
  229. package/dist/http/health-reader.d.ts +36 -0
  230. package/dist/http/health-reader.js +21 -0
  231. package/dist/http/health-self-report.d.ts +9 -9
  232. package/dist/http/health-self-report.js +4 -4
  233. package/dist/http/idempotency.d.ts +9 -5
  234. package/dist/http/idempotency.js +4 -4
  235. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  236. package/dist/http/memory-compliance-failure-reply.js +4 -2
  237. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  238. package/dist/http/memory-face-fault-reply.js +71 -0
  239. package/dist/http/memory-store-refusal-reply.d.ts +1 -1
  240. package/dist/http/memory-store-refusal-reply.js +3 -0
  241. package/dist/http/owner-access.d.ts +392 -67
  242. package/dist/http/owner-access.js +370 -35
  243. package/dist/http/principal-gate.d.ts +39 -89
  244. package/dist/http/principal-gate.js +26 -68
  245. package/dist/http/refusal-body.d.ts +35 -2
  246. package/dist/http/refusal-body.js +34 -0
  247. package/dist/http/request-guards.d.ts +9 -13
  248. package/dist/http/request-guards.js +34 -68
  249. package/dist/http/resume-composition.d.ts +37 -0
  250. package/dist/http/resume-composition.js +18 -0
  251. package/dist/http/resume-ctx-read.d.ts +46 -12
  252. package/dist/http/resume-ctx-read.js +31 -6
  253. package/dist/http/resume-legs.d.ts +54 -19
  254. package/dist/http/resume-legs.js +408 -196
  255. package/dist/http/retired-skill-manifest.d.ts +1 -1
  256. package/dist/http/route-ctx.d.ts +31 -32
  257. package/dist/http/routes/a2a-serve.d.ts +43 -5
  258. package/dist/http/routes/a2a-serve.js +60 -37
  259. package/dist/http/routes/admin-config-refresh.js +2 -2
  260. package/dist/http/routes/admin-drain.js +2 -2
  261. package/dist/http/routes/admin-memory-optout.js +4 -3
  262. package/dist/http/routes/adoption.d.ts +3 -0
  263. package/dist/http/routes/adoption.js +17 -10
  264. package/dist/http/routes/agents-roster.js +13 -7
  265. package/dist/http/routes/approvals-assistant.js +73 -67
  266. package/dist/http/routes/attachments.js +2 -2
  267. package/dist/http/routes/background.d.ts +3 -3
  268. package/dist/http/routes/background.js +9 -17
  269. package/dist/http/routes/capabilities.js +16 -19
  270. package/dist/http/routes/config-catalog.js +2 -2
  271. package/dist/http/routes/devices.d.ts +3 -3
  272. package/dist/http/routes/devices.js +4 -4
  273. package/dist/http/routes/diagnostics.d.ts +29 -3
  274. package/dist/http/routes/diagnostics.js +49 -18
  275. package/dist/http/routes/engine.js +2 -2
  276. package/dist/http/routes/fleet.js +5 -3
  277. package/dist/http/routes/images.js +10 -6
  278. package/dist/http/routes/leader.d.ts +7 -2
  279. package/dist/http/routes/leader.js +12 -3
  280. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  281. package/dist/http/routes/mcp-reconnect.js +7 -15
  282. package/dist/http/routes/memory-bundle.js +4 -7
  283. package/dist/http/routes/memory-compliance.js +4 -4
  284. package/dist/http/routes/memory-consolidation.js +6 -9
  285. package/dist/http/routes/memory-origin.d.ts +2 -0
  286. package/dist/http/routes/memory-origin.js +7 -8
  287. package/dist/http/routes/memory-policy.js +17 -12
  288. package/dist/http/routes/notify-wake.js +10 -19
  289. package/dist/http/routes/observability.js +3 -3
  290. package/dist/http/routes/principal-inbox.d.ts +4 -2
  291. package/dist/http/routes/principal-inbox.js +5 -4
  292. package/dist/http/routes/projects.d.ts +1 -1
  293. package/dist/http/routes/projects.js +3 -2
  294. package/dist/http/routes/retention-ops.js +6 -9
  295. package/dist/http/routes/rules.js +20 -5
  296. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  297. package/dist/http/routes/run-memory-capture.js +6 -12
  298. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  299. package/dist/http/routes/run-permission-mode.js +10 -17
  300. package/dist/http/routes/runs.js +155 -237
  301. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  302. package/dist/http/routes/session-memory-sync.js +7 -13
  303. package/dist/http/routes/session-sync.d.ts +28 -7
  304. package/dist/http/routes/session-sync.js +63 -50
  305. package/dist/http/routes/sessions-list.d.ts +3 -3
  306. package/dist/http/routes/sessions-list.js +9 -9
  307. package/dist/http/routes/sessions.js +87 -124
  308. package/dist/http/routes/shared-memory.js +6 -6
  309. package/dist/http/routes/side-query.js +2 -2
  310. package/dist/http/routes/tasks.js +237 -187
  311. package/dist/http/routes/trace-usage.d.ts +0 -12
  312. package/dist/http/routes/trace-usage.js +40 -46
  313. package/dist/http/routes/workflows.d.ts +39 -4
  314. package/dist/http/routes/workflows.js +42 -14
  315. package/dist/http/run-concurrency-cap.d.ts +20 -12
  316. package/dist/http/run-concurrency-cap.js +39 -26
  317. package/dist/http/run-read-face.d.ts +3 -5
  318. package/dist/http/run-read-face.js +8 -13
  319. package/dist/http/send.d.ts +12 -3
  320. package/dist/http/send.js +42 -6
  321. package/dist/http/server.d.ts +43 -45
  322. package/dist/http/server.js +61 -11
  323. package/dist/http/sse-log.d.ts +17 -10
  324. package/dist/http/sse-log.js +7 -7
  325. package/dist/http/stored-body-replay.d.ts +12 -0
  326. package/dist/http/stored-body-replay.js +2 -2
  327. package/dist/http/submit-ctx.d.ts +17 -8
  328. package/dist/http/submit-ctx.js +8 -5
  329. package/dist/http/submit-replay.d.ts +19 -6
  330. package/dist/http/submit-replay.js +18 -6
  331. package/dist/http/sync-submit-body.d.ts +3 -4
  332. package/dist/http/sync-submit-body.js +4 -5
  333. package/dist/http/wire-types.d.ts +4 -3
  334. package/dist/identity-source.d.ts +36 -5
  335. package/dist/identity-source.js +27 -0
  336. package/dist/index.d.ts +4 -1
  337. package/dist/index.js +2 -0
  338. package/dist/key-resolver.d.ts +32 -0
  339. package/dist/key-resolver.js +23 -9
  340. package/dist/leader/diffup.js +2 -1
  341. package/dist/leader/endpoint.d.ts +26 -5
  342. package/dist/leader/endpoint.js +154 -14
  343. package/dist/leader/fanout.d.ts +3 -0
  344. package/dist/leader/fanout.js +78 -63
  345. package/dist/leader/leader.d.ts +16 -0
  346. package/dist/leader/leader.js +43 -3
  347. package/dist/leader/merge.d.ts +9 -1
  348. package/dist/leader/merge.js +16 -1
  349. package/dist/leader/repair-wire.js +1 -1
  350. package/dist/leader/wire.d.ts +36 -3
  351. package/dist/leader/wire.js +59 -18
  352. package/dist/leg-facts.d.ts +7 -2
  353. package/dist/leg-facts.js +1 -0
  354. package/dist/local-store-declaration.d.ts +54 -0
  355. package/dist/local-store-declaration.js +59 -0
  356. package/dist/lsp-evict.d.ts +6 -4
  357. package/dist/lsp-evict.js +2 -3
  358. package/dist/mcp-assertion-header.d.ts +1 -1
  359. package/dist/mcp-assertion-header.js +1 -1
  360. package/dist/memory-operator-faces.d.ts +5 -4
  361. package/dist/memory-operator-faces.js +1 -1
  362. package/dist/memory-project-layer.js +1 -1
  363. package/dist/memory-scope.d.ts +33 -6
  364. package/dist/memory-scope.js +68 -19
  365. package/dist/memory-store-refusal.d.ts +5 -2
  366. package/dist/memory-sync-client.d.ts +3 -2
  367. package/dist/memory-sync-client.js +8 -5
  368. package/dist/model-compat.d.ts +17 -8
  369. package/dist/model-compat.js +6 -2
  370. package/dist/model-context-window.d.ts +57 -0
  371. package/dist/model-context-window.js +21 -0
  372. package/dist/model-entry-headers.d.ts +46 -4
  373. package/dist/model-entry-headers.js +2 -2
  374. package/dist/model-entry-refusal.d.ts +40 -20
  375. package/dist/model-entry-refusal.js +57 -30
  376. package/dist/model-plane-face.d.ts +19 -11
  377. package/dist/model-plane-face.js +9 -1
  378. package/dist/model-plane-probe.d.ts +2 -0
  379. package/dist/model-plane-probe.js +17 -0
  380. package/dist/model-provider.d.ts +3 -3
  381. package/dist/model-reach-scope.d.ts +2 -1
  382. package/dist/model-route-endpoint.d.ts +9 -5
  383. package/dist/model-route-endpoint.js +29 -7
  384. package/dist/model-select.d.ts +16 -0
  385. package/dist/model-select.js +4 -0
  386. package/dist/mountinfo.d.ts +37 -0
  387. package/dist/mountinfo.js +47 -0
  388. package/dist/namespaced-rule-name.d.ts +23 -14
  389. package/dist/namespaced-rule-name.js +8 -11
  390. package/dist/net-address.d.ts +1 -1
  391. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  392. package/dist/observability/corrupt-read-seat.js +5 -3
  393. package/dist/observability/fail-open.d.ts +72 -40
  394. package/dist/observability/fail-open.js +74 -40
  395. package/dist/observability/logger.d.ts +22 -1
  396. package/dist/observability/logger.js +89 -12
  397. package/dist/observability/metrics.js +4 -5
  398. package/dist/observability/otel-exporter.js +2 -1
  399. package/dist/observability/principal-context.d.ts +14 -7
  400. package/dist/observability/principal-context.js +8 -3
  401. package/dist/observability/run-terminal.d.ts +7 -1
  402. package/dist/observability/run-terminal.js +6 -2
  403. package/dist/observability/secret-env-scrub.d.ts +1 -1
  404. package/dist/observability/secret-env-scrub.js +1 -1
  405. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  406. package/dist/orchestration/hardened-vm-runner.js +11 -5
  407. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  408. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  409. package/dist/orchestration/hardened-vm-worker.js +2 -1
  410. package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
  411. package/dist/orchestration/workflow-completion-inbox.js +3 -2
  412. package/dist/org-delivery-gate.d.ts +36 -10
  413. package/dist/org-delivery-gate.js +12 -8
  414. package/dist/outbound-dispatcher.d.ts +1 -1
  415. package/dist/outbound-dispatcher.js +6 -12
  416. package/dist/owner-brands.d.ts +81 -0
  417. package/dist/owner-brands.js +42 -0
  418. package/dist/owner-faces.d.ts +532 -0
  419. package/dist/owner-faces.js +126 -0
  420. package/dist/park-row-commit.d.ts +67 -0
  421. package/dist/park-row-commit.js +76 -0
  422. package/dist/parked-decide.d.ts +76 -12
  423. package/dist/parked-decide.js +152 -11
  424. package/dist/parked-revive-surface.d.ts +14 -4
  425. package/dist/parked-revive-surface.js +5 -4
  426. package/dist/peer-directory.d.ts +7 -9
  427. package/dist/peer-directory.js +3 -2
  428. package/dist/permission-rule-vocab.d.ts +53 -8
  429. package/dist/permission-rule-vocab.js +30 -2
  430. package/dist/plugins/adoption-log-sql.d.ts +3 -25
  431. package/dist/plugins/adoption-log-sql.js +23 -21
  432. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  433. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  434. package/dist/plugins/approval-ask-store-file.d.ts +18 -7
  435. package/dist/plugins/approval-ask-store-file.js +37 -14
  436. package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
  437. package/dist/plugins/approval-ask-store-memory.js +24 -10
  438. package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
  439. package/dist/plugins/approval-ask-store-sql.js +44 -15
  440. package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
  441. package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
  442. package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
  443. package/dist/plugins/approval-exemption-skill-m46.js +21 -0
  444. package/dist/plugins/approval-exemption-store.d.ts +32 -2
  445. package/dist/plugins/approval-exemption-store.js +42 -19
  446. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  447. package/dist/plugins/approval-nonce-store.js +72 -23
  448. package/dist/plugins/blob-backend.d.ts +2 -0
  449. package/dist/plugins/blob-backend.js +9 -6
  450. package/dist/plugins/caching-session-store.d.ts +13 -1
  451. package/dist/plugins/caching-session-store.js +43 -4
  452. package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
  453. package/dist/plugins/checkpoint-index-columns.js +36 -1
  454. package/dist/plugins/checkpoint-store-face.d.ts +83 -10
  455. package/dist/plugins/checkpoint-store-face.js +18 -1
  456. package/dist/plugins/device-store-sql.js +1 -0
  457. package/dist/plugins/ensure-index.d.ts +13 -1
  458. package/dist/plugins/ensure-index.js +154 -21
  459. package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
  460. package/dist/plugins/ensure-schema-lock-policy.js +76 -9
  461. package/dist/plugins/file-run-store.d.ts +85 -32
  462. package/dist/plugins/file-run-store.js +177 -94
  463. package/dist/plugins/host-platform.d.ts +24 -3
  464. package/dist/plugins/host-platform.js +15 -1
  465. package/dist/plugins/image-bake-store-sql.js +2 -0
  466. package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
  467. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  468. package/dist/plugins/k8s-pod-reaper.js +0 -1
  469. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  470. package/dist/plugins/leader-run-store-sql.js +34 -4
  471. package/dist/plugins/local-checkpoint-store.d.ts +62 -23
  472. package/dist/plugins/local-checkpoint-store.js +197 -77
  473. package/dist/plugins/local-data-dir-modes-m39.js +2 -1
  474. package/dist/plugins/local-data-root-admission.d.ts +52 -0
  475. package/dist/plugins/local-data-root-admission.js +100 -0
  476. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  477. package/dist/plugins/local-docker-capacity.js +194 -0
  478. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  479. package/dist/plugins/local-docker-reaper.js +102 -0
  480. package/dist/plugins/local-engine-high-water.d.ts +29 -6
  481. package/dist/plugins/local-engine-high-water.js +27 -19
  482. package/dist/plugins/local-session-store.d.ts +458 -140
  483. package/dist/plugins/local-session-store.js +906 -292
  484. package/dist/plugins/local-session-window.d.ts +3 -2
  485. package/dist/plugins/local-session-window.js +3 -2
  486. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  487. package/dist/plugins/local-task-attachment-store.d.ts +18 -1
  488. package/dist/plugins/local-task-attachment-store.js +22 -1
  489. package/dist/plugins/memory-embedder.js +9 -7
  490. package/dist/plugins/memory-engine-pg.d.ts +3 -2
  491. package/dist/plugins/memory-engine-pg.js +14 -5
  492. package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
  493. package/dist/plugins/memory-engine-sql-apply.js +6 -8
  494. package/dist/plugins/memory-engine-tidb.d.ts +4 -2
  495. package/dist/plugins/memory-engine-tidb.js +11 -2
  496. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  497. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  498. package/dist/plugins/memory-run-store.d.ts +53 -36
  499. package/dist/plugins/memory-run-store.js +116 -88
  500. package/dist/plugins/one-time-migration-marker.d.ts +26 -0
  501. package/dist/plugins/one-time-migration-marker.js +13 -0
  502. package/dist/plugins/one-time-migrations.d.ts +214 -47
  503. package/dist/plugins/one-time-migrations.js +481 -135
  504. package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
  505. package/dist/plugins/org-delivery-quota-store.js +31 -15
  506. package/dist/plugins/permission-rule-store-file.d.ts +3 -3
  507. package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
  508. package/dist/plugins/permission-rule-store-sql.js +11 -95
  509. package/dist/plugins/pg-pool.d.ts +2 -32
  510. package/dist/plugins/pg-pool.js +24 -17
  511. package/dist/plugins/remote-env-device.d.ts +3 -2
  512. package/dist/plugins/remote-env-e2b.d.ts +8 -32
  513. package/dist/plugins/remote-env-e2b.js +44 -32
  514. package/dist/plugins/remote-env-host.d.ts +51 -17
  515. package/dist/plugins/remote-env-host.js +111 -42
  516. package/dist/plugins/remote-env-k8s.d.ts +40 -45
  517. package/dist/plugins/remote-env-k8s.js +111 -60
  518. package/dist/plugins/remote-env-local-docker.d.ts +152 -15
  519. package/dist/plugins/remote-env-local-docker.js +352 -72
  520. package/dist/plugins/remote-scratchpad.js +4 -0
  521. package/dist/plugins/retention-deployment.d.ts +49 -17
  522. package/dist/plugins/retention-deployment.js +39 -8
  523. package/dist/plugins/run-preview-m45.d.ts +11 -0
  524. package/dist/plugins/run-preview-m45.js +19 -0
  525. package/dist/plugins/run-store-sql.d.ts +82 -75
  526. package/dist/plugins/run-store-sql.js +164 -125
  527. package/dist/plugins/s3-answer.d.ts +2 -1
  528. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  529. package/dist/plugins/sandbox-reaper.js +2 -0
  530. package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
  531. package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
  532. package/dist/plugins/scheduler-support.d.ts +16 -1
  533. package/dist/plugins/scheduler-support.js +22 -2
  534. package/dist/plugins/schema-consistency.d.ts +131 -14
  535. package/dist/plugins/schema-consistency.js +388 -18
  536. package/dist/plugins/schema-drift-sentence.d.ts +10 -6
  537. package/dist/plugins/schema-drift-sentence.js +15 -7
  538. package/dist/plugins/schema-ensure-legs.d.ts +9 -0
  539. package/dist/plugins/schema-ensure-legs.js +1 -1
  540. package/dist/plugins/schema-indexes.js +3 -0
  541. package/dist/plugins/schema-live-columns.d.ts +14 -5
  542. package/dist/plugins/schema-live-columns.js +10 -10
  543. package/dist/plugins/send-user-file.js +2 -1
  544. package/dist/plugins/session-birth.d.ts +37 -0
  545. package/dist/plugins/session-birth.js +38 -0
  546. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  547. package/dist/plugins/session-epoch-anchor.js +33 -11
  548. package/dist/plugins/session-ext-table.d.ts +27 -3
  549. package/dist/plugins/session-ext-table.js +19 -6
  550. package/dist/plugins/session-fork.d.ts +15 -1
  551. package/dist/plugins/session-fork.js +3 -0
  552. package/dist/plugins/session-ownership.d.ts +1 -1
  553. package/dist/plugins/session-placement.d.ts +27 -20
  554. package/dist/plugins/session-placement.js +15 -12
  555. package/dist/plugins/session-row-sql.d.ts +12 -0
  556. package/dist/plugins/session-row-sql.js +3 -3
  557. package/dist/plugins/session-run-rollup.d.ts +29 -0
  558. package/dist/plugins/session-run-rollup.js +40 -0
  559. package/dist/plugins/session-store-sql.d.ts +38 -12
  560. package/dist/plugins/session-store-sql.js +130 -30
  561. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  562. package/dist/plugins/session-withdraw-sql.js +42 -0
  563. package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
  564. package/dist/plugins/shared-memory-store-sql.js +2 -1
  565. package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
  566. package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
  567. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  568. package/dist/plugins/sql-driver.d.ts +1 -1
  569. package/dist/plugins/sql-driver.js +2 -1
  570. package/dist/plugins/sql-errors.d.ts +32 -5
  571. package/dist/plugins/sql-errors.js +55 -7
  572. package/dist/plugins/sql-json-column.d.ts +8 -7
  573. package/dist/plugins/sql-json-column.js +10 -6
  574. package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
  575. package/dist/plugins/stop-then-start-sentence.js +7 -0
  576. package/dist/plugins/store-backend.d.ts +99 -16
  577. package/dist/plugins/store-backend.js +230 -65
  578. package/dist/plugins/store-contracts.d.ts +123 -33
  579. package/dist/plugins/store-contracts.js +38 -1
  580. package/dist/plugins/store-fault.d.ts +28 -2
  581. package/dist/plugins/store-fault.js +20 -2
  582. package/dist/plugins/task-attachment-store.d.ts +15 -3
  583. package/dist/plugins/task-attachment-store.js +22 -9
  584. package/dist/plugins/tidb-pool.d.ts +11 -6
  585. package/dist/plugins/tidb-pool.js +39 -18
  586. package/dist/plugins/web-search.js +5 -3
  587. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  588. package/dist/plugins/workflow-run-store-sql.js +11 -5
  589. package/dist/plugins/workspace-custody.d.ts +44 -0
  590. package/dist/plugins/workspace-custody.js +47 -0
  591. package/dist/principal-jwt.d.ts +4 -4
  592. package/dist/principal-jwt.js +20 -5
  593. package/dist/principal-shape.d.ts +41 -0
  594. package/dist/principal-shape.js +19 -0
  595. package/dist/project-identity.d.ts +8 -7
  596. package/dist/project-identity.js +40 -17
  597. package/dist/project-layer-key.d.ts +13 -2
  598. package/dist/project-layer-key.js +9 -1
  599. package/dist/question.d.ts +13 -23
  600. package/dist/question.js +21 -39
  601. package/dist/read-deny-floor-notice.d.ts +36 -0
  602. package/dist/read-deny-floor-notice.js +40 -0
  603. package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
  604. package/dist/request-declaration-disposition.js +39 -0
  605. package/dist/request-declaration-refusal.d.ts +35 -12
  606. package/dist/request-declaration-refusal.js +21 -9
  607. package/dist/request-form.d.ts +58 -0
  608. package/dist/request-form.js +72 -0
  609. package/dist/request-image-urls.d.ts +8 -2
  610. package/dist/request-image-urls.js +2 -1
  611. package/dist/request-images.d.ts +20 -0
  612. package/dist/request-images.js +59 -0
  613. package/dist/request-key-closure.d.ts +6 -7
  614. package/dist/request-key-closure.js +15 -2
  615. package/dist/resource-suspend.d.ts +7 -16
  616. package/dist/resource-suspend.js +1 -1
  617. package/dist/retired-name-host-notice.d.ts +21 -0
  618. package/dist/retired-name-host-notice.js +12 -0
  619. package/dist/rule-entry-list.d.ts +2 -2
  620. package/dist/rule-entry-list.js +3 -4
  621. package/dist/rule-issue-reading.d.ts +58 -0
  622. package/dist/rule-issue-reading.js +14 -0
  623. package/dist/rules-consent.d.ts +5 -3
  624. package/dist/rules-consent.js +1 -0
  625. package/dist/run-acceptance.d.ts +3 -1
  626. package/dist/run-acceptance.js +3 -0
  627. package/dist/run-cancel-card.d.ts +28 -0
  628. package/dist/run-cancel-card.js +19 -0
  629. package/dist/run-cancel-context.d.ts +10 -0
  630. package/dist/run-cancel-context.js +1 -0
  631. package/dist/run-local.d.ts +14 -6
  632. package/dist/run-local.js +117 -90
  633. package/dist/run-stale-default.d.ts +7 -0
  634. package/dist/run-stale-default.js +2 -0
  635. package/dist/runs.d.ts +56 -21
  636. package/dist/runs.js +73 -43
  637. package/dist/runtime-caps-resolver.d.ts +21 -6
  638. package/dist/runtime-caps-resolver.js +17 -4
  639. package/dist/runtime-governance.d.ts +2 -2
  640. package/dist/runtime-governance.js +5 -3
  641. package/dist/sealed-key-layout.d.ts +12 -5
  642. package/dist/sealed-key-layout.js +5 -0
  643. package/dist/sealed-key.d.ts +12 -2
  644. package/dist/sealed-key.js +115 -27
  645. package/dist/security.d.ts +128 -158
  646. package/dist/security.js +163 -59
  647. package/dist/sema-config-dir.d.ts +20 -0
  648. package/dist/sema-config-dir.js +25 -0
  649. package/dist/server-secret-env.d.ts +55 -25
  650. package/dist/server-secret-env.js +75 -22
  651. package/dist/session-agent.d.ts +3 -2
  652. package/dist/session-children-retire.d.ts +13 -8
  653. package/dist/session-children-retire.js +9 -7
  654. package/dist/session-deletion.d.ts +88 -0
  655. package/dist/session-deletion.js +8 -0
  656. package/dist/session-erase.d.ts +145 -0
  657. package/dist/session-erase.js +115 -0
  658. package/dist/session-error-wire.d.ts +5 -5
  659. package/dist/session-error-wire.js +1 -1
  660. package/dist/session-incarnation.d.ts +52 -5
  661. package/dist/session-incarnation.js +19 -2
  662. package/dist/session-policy-wire.d.ts +6 -3
  663. package/dist/session-policy-wire.js +11 -1
  664. package/dist/session-resident-background.d.ts +0 -71
  665. package/dist/session-resident-background.js +4 -3
  666. package/dist/session-row.d.ts +2 -1
  667. package/dist/session-rules-seat.d.ts +12 -0
  668. package/dist/session-rules-seat.js +19 -0
  669. package/dist/session-titler.d.ts +7 -15
  670. package/dist/session-titler.js +1 -1
  671. package/dist/session-workspace.d.ts +3 -3
  672. package/dist/spec-fields.d.ts +57 -3
  673. package/dist/spec-fields.js +72 -51
  674. package/dist/store-admission.d.ts +33 -0
  675. package/dist/store-admission.js +49 -0
  676. package/dist/store-posture.d.ts +141 -20
  677. package/dist/store-posture.js +205 -3
  678. package/dist/stored-request-hooks-m20.js +2 -2
  679. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  680. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  681. package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
  682. package/dist/stores-sql/checkpoint-store-sql.js +78 -49
  683. package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
  684. package/dist/stores-sql/file-history-store-sql.js +3 -5
  685. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  686. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  687. package/dist/stores-sql/pg-session-storage.d.ts +7 -5
  688. package/dist/stores-sql/pg-session-storage.js +54 -46
  689. package/dist/stores-sql/retention-store-sql.d.ts +87 -19
  690. package/dist/stores-sql/retention-store-sql.js +92 -27
  691. package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
  692. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  693. package/dist/stores-sql/session-write-hooks.d.ts +12 -6
  694. package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
  695. package/dist/stores-sql/tidb-session-storage.js +13 -8
  696. package/dist/stores-sql/tidb-session-store.d.ts +36 -17
  697. package/dist/stores-sql/tidb-session-store.js +69 -39
  698. package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
  699. package/dist/stores-sql/tool-result-store-sql.js +4 -6
  700. package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
  701. package/dist/stores-sql/windowed-session-storage.js +9 -0
  702. package/dist/submission-exit.d.ts +50 -0
  703. package/dist/submission-exit.js +108 -0
  704. package/dist/task-a2a.d.ts +3 -8
  705. package/dist/task-a2a.js +28 -30
  706. package/dist/task-cwd.d.ts +43 -7
  707. package/dist/task-cwd.js +11 -0
  708. package/dist/task-mcp.d.ts +3 -3
  709. package/dist/task-mcp.js +4 -4
  710. package/dist/task-settings.d.ts +14 -10
  711. package/dist/task-settings.js +19 -7
  712. package/dist/terminal.d.ts +27 -43
  713. package/dist/terminal.js +49 -14
  714. package/dist/tool-approval.d.ts +173 -163
  715. package/dist/tool-approval.js +247 -232
  716. package/dist/trace/core-keyset-guard.d.ts +13 -6
  717. package/dist/trace/core-vocab-wire.d.ts +95 -0
  718. package/dist/trace/core-vocab-wire.js +15 -0
  719. package/dist/trace/engine-notice-wire.d.ts +24 -21
  720. package/dist/trace/engine-notice-wire.js +7 -3
  721. package/dist/trace/exit-seat.d.ts +30 -4
  722. package/dist/trace/exit-seat.js +40 -36
  723. package/dist/trace/extension-call-face.d.ts +3 -2
  724. package/dist/trace/extension-call-face.js +3 -1
  725. package/dist/trace/ledger-events.d.ts +4 -7
  726. package/dist/trace/ledger-sink.d.ts +4 -31
  727. package/dist/trace/ledger-sink.js +0 -11
  728. package/dist/trace/model-segment.d.ts +5 -5
  729. package/dist/trace/model-segment.js +5 -5
  730. package/dist/trace/project.d.ts +59 -44
  731. package/dist/trace/project.js +60 -26
  732. package/dist/trace/redact.d.ts +135 -27
  733. package/dist/trace/redact.js +884 -260
  734. package/dist/trace/self-minted-wire.d.ts +567 -20
  735. package/dist/trace/self-minted-wire.js +205 -24
  736. package/dist/trace/wire-projection-faces.d.ts +5 -6
  737. package/dist/trace/wire-projection-faces.js +2 -2
  738. package/dist/upstream-body.d.ts +23 -0
  739. package/dist/upstream-body.js +16 -0
  740. package/dist/url-refusal.d.ts +3 -3
  741. package/dist/url-refusal.js +11 -4
  742. package/dist/user-authored-text.d.ts +1 -1
  743. package/dist/user-input-ledger.d.ts +7 -8
  744. package/dist/user-input-ledger.js +1 -1
  745. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  746. package/dist/web-admin-client/apply-effective.js +33 -23
  747. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  748. package/dist/web-admin-client/apply-ledger.js +5 -2
  749. package/dist/web-admin-client/center-request.d.ts +2 -2
  750. package/dist/web-admin-client/center-request.js +15 -15
  751. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  752. package/dist/web-admin-client/effective-keys.js +1 -1
  753. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  754. package/dist/web-admin-client/entry-metadata.js +13 -0
  755. package/dist/web-admin-client/http-client.d.ts +1 -1
  756. package/dist/web-admin-client/http-client.js +23 -4
  757. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  758. package/dist/web-admin-client/mcp-revocation.js +2 -1
  759. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  760. package/dist/web-admin-client/read-warnings.js +1 -0
  761. package/dist/web-admin-client/restart-signal.js +8 -4
  762. package/dist/web-admin-client/skills-mcp.d.ts +2 -2
  763. package/dist/web-admin-client/types.d.ts +1 -2
  764. package/dist/workspace-space.d.ts +3 -2
  765. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  766. package/docs/error-text-lexicon.json +317 -0
  767. package/package.json +8 -3
  768. package/scripts/drain-check-local.mjs +118 -147
  769. package/scripts/drain-check.mysql.sql +22 -2
  770. package/scripts/drain-check.pg.sql +22 -2
  771. package/scripts/embed-minimal.mjs +183 -0
  772. package/wire-changes/server@7.148.0.json +1517 -0
  773. package/wire-changes/server@7.149.0.json +372 -0
  774. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  775. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  776. package/dist/http/memory-layer-reply.d.ts +0 -30
  777. package/dist/http/memory-layer-reply.js +0 -24
  778. package/dist/lsp/e2b-bridge.d.ts +0 -57
  779. package/dist/lsp/e2b-bridge.js +0 -139
  780. package/dist/lsp/e2b-manager.d.ts +0 -93
  781. package/dist/lsp/e2b-manager.js +0 -178
  782. package/dist/lsp/lsp-frames.d.ts +0 -14
  783. package/dist/lsp/lsp-frames.js +0 -25
  784. package/dist/lsp/manager.d.ts +0 -129
  785. package/dist/lsp/manager.js +0 -127
  786. package/dist/lsp/types.d.ts +0 -12
  787. package/dist/lsp/types.js +0 -2
  788. package/dist/lsp/ws-transport.d.ts +0 -40
  789. package/dist/lsp/ws-transport.js +0 -210
  790. package/dist/plain-string-record.js +0 -70
@@ -1,24 +1,66 @@
1
+ import { writeLogText } from "../observability/logger.js";
1
2
  import { z } from "zod";
2
3
  import { denySweepOwns, parkedApprovalCard } from "../approval-content-kind.js";
3
4
  import { parkRowFacts, skillCardFacts } from "../approval-card.js";
4
5
  import { durableRowIdentity } from "../checkpoint-identity.js";
5
6
  import { createHash } from "node:crypto";
6
- import { existsSync, readFileSync, readdirSync, unlinkSync } from "node:fs";
7
+ import { closeSync, existsSync, fsyncSync, openSync, readFileSync, readdirSync, rmSync, unlinkSync } from "node:fs";
8
+ import { IS_WIN32 } from "./host-platform.js";
7
9
  import { join } from "node:path";
8
- import { CHECKPOINT_LIST_LIMITS, FileCheckpointStore, atomicWriteFile, ensureDir, executionVerdict, sanitizePathComponent, } from "@sema-agent/core";
10
+ import { CHECKPOINT_LIST_LIMITS, FileCheckpointStore, atomicWriteFile, checkpointDeadlinePassed, ensureDir, executionVerdict, sanitizePathComponent, } from "@sema-agent/core";
9
11
  import { approvalPayloadFingerprint } from "./approval-payload-fingerprint.js";
10
- import { approvalDecisionOfWinner, boundedRuleOffers, boundedToolInput, candidateIdentityOf, pendingRowPrecedes, queueRowGateKind, TERMINAL_BACKSTOP_MS, TERMINAL_GRACE_MS } from "./checkpoint-store-face.js";
12
+ import { approvalDecisionOfWinner, boundedRuleOffers, boundedToolInput, candidateIdentityOf, DENY_SWEEP_PAGE_ROWS, isUnreadableSummaryForm, parkedLegTaskId, pendingRowPrecedes, queueRowGateKind, queueTriageOrder, readRiskDescriptorBody, TERMINAL_BACKSTOP_MS, TERMINAL_GRACE_MS, } from "./checkpoint-store-face.js";
11
13
  import { quarantineUnreadableSidecar } from "./local-sidecar-quarantine.js";
12
- import { createZodColumnReader, decodeJsonColumn, foldJsonColumn, readStringArrayColumn } from "./sql-json-column.js";
14
+ import { hostSessionOf } from "./checkpoint-index-columns.js";
15
+ import { createZodColumnReader, decodeJsonColumn, foldJsonColumn, isJsonObject, readStringArrayColumn } from "./sql-json-column.js";
13
16
  import { UNMANAGED_RETENTION } from "./retention-declaration.js";
14
17
  import { assertJsonColumnWritable, createObjectColumnReader } from "./sql-json-column.js";
15
18
  import { FENCE_LANDED } from "./store-contracts.js";
19
+ import { recordFailOpen } from "../observability/fail-open.js";
20
+ const isFiniteNumber = (v) => typeof v === "number" && Number.isFinite(v);
16
21
  function terminalAtOf(cp) {
17
- return Math.max(cp.createdAt + TERMINAL_BACKSTOP_MS, (cp.deadline ?? 0) + TERMINAL_GRACE_MS);
22
+ const createdAt = cp.createdAt;
23
+ const deadline = cp.deadline;
24
+ const deadlineTerm = deadline === undefined ? 0 : isFiniteNumber(deadline) ? deadline : undefined;
25
+ if (!isFiniteNumber(createdAt) || deadlineTerm === undefined)
26
+ return -Infinity;
27
+ return Math.max(createdAt + TERMINAL_BACKSTOP_MS, deadlineTerm + TERMINAL_GRACE_MS);
28
+ }
29
+ function sweepDeadlineKey(deadline) {
30
+ return isFiniteNumber(deadline) ? deadline : -Infinity;
31
+ }
32
+ function sweepPositionPrecedes(a, b) {
33
+ return a.deadline < b.deadline || (a.deadline === b.deadline && a.token < b.token);
34
+ }
35
+ function queueRiskDescriptorOf(gate) {
36
+ const raw = isJsonObject(gate) ? gate.riskDescriptor : undefined;
37
+ if (raw === undefined || raw === null)
38
+ return null;
39
+ const shape = readRiskDescriptorBody(raw);
40
+ if (shape.problem === undefined)
41
+ return shape.value;
42
+ recordFailOpen("server.approvals.risk-descriptor-cell-unreadable");
43
+ return null;
18
44
  }
19
45
  function ctxFileOf(sessionId) {
20
46
  return `${sanitizePathComponent(sessionId).slice(0, 48)}-${createHash("sha256").update(sessionId).digest("hex").slice(0, 12)}.json`;
21
47
  }
48
+ export function dropLocalCheckpointCtxStrict(root, sessionId) {
49
+ const dir = localCheckpointStoreDirsFor(root).ctx;
50
+ const path = join(dir, ctxFileOf(sessionId));
51
+ if (!existsSync(path))
52
+ return;
53
+ rmSync(path, { force: true });
54
+ if (IS_WIN32)
55
+ return;
56
+ const fd = openSync(dir, "r");
57
+ try {
58
+ fsyncSync(fd);
59
+ }
60
+ finally {
61
+ closeSync(fd);
62
+ }
63
+ }
22
64
  const CtxRecordSchema = z.object({
23
65
  sessionId: z.string(),
24
66
  updatedAt: z.number(),
@@ -52,7 +94,7 @@ export function localCheckpointStoreDirsFor(root) {
52
94
  }
53
95
  export class LocalCheckpointStore {
54
96
  retention = UNMANAGED_RETENTION;
55
- durability = "durable";
97
+ durability;
56
98
  fidelity = "json";
57
99
  execution = { outcome: true };
58
100
  inner;
@@ -62,12 +104,17 @@ export class LocalCheckpointStore {
62
104
  tmpDir;
63
105
  scopes = new Set();
64
106
  sessionTokens = new Map();
107
+ hostTokens = new Map();
108
+ hostOfToken = new Map();
109
+ hostSessionsPath;
65
110
  opts;
66
111
  constructor(root, opts = {}) {
67
112
  this.inner = new FileCheckpointStore(root);
113
+ this.durability = opts.durability ?? this.inner.durability;
68
114
  this.opts = opts;
69
115
  this.scopesPath = join(root, "checkpoint-scopes.json");
70
116
  this.sessionTokensPath = join(root, "checkpoint-session-tokens.json");
117
+ this.hostSessionsPath = join(root, "checkpoint-host-sessions.json");
71
118
  const dirs = localCheckpointStoreDirsFor(root);
72
119
  this.ctxDir = dirs.ctx;
73
120
  this.tmpDir = dirs.tmp;
@@ -81,7 +128,7 @@ export class LocalCheckpointStore {
81
128
  catch (e) {
82
129
  quarantineUnreadableSidecar(this.scopesPath, "LocalCheckpointStore scope registry", e instanceof Error ? e.message : String(e));
83
130
  this.scopeRegistryCorrupt = true;
84
- console.warn("LocalCheckpointStore: will rebuild the scope set from the data plane on first read (core listScopes) — enumeration is EMPTY until then");
131
+ writeLogText("stderr", "LocalCheckpointStore: will rebuild the scope set from the data plane on first read (core listScopes) — enumeration is EMPTY until then");
85
132
  }
86
133
  }
87
134
  if (existsSync(this.sessionTokensPath)) {
@@ -94,21 +141,66 @@ export class LocalCheckpointStore {
94
141
  quarantineUnreadableSidecar(this.sessionTokensPath, "LocalCheckpointStore session→tokens index", e instanceof Error ? e.message : String(e));
95
142
  }
96
143
  }
144
+ if (existsSync(this.hostSessionsPath)) {
145
+ for (const [host, toks] of Object.entries(decodeJsonColumn(readFileSync(this.hostSessionsPath, "utf8"), readSessionTokenIndex, "checkpoint-host-sessions.json (the local card→host-session index)"))) {
146
+ this.indexHost(host, toks);
147
+ }
148
+ }
149
+ }
150
+ registerDurably(record, undo, persist) {
151
+ if (!record())
152
+ return;
153
+ try {
154
+ persist();
155
+ }
156
+ catch (e) {
157
+ undo();
158
+ throw e;
159
+ }
160
+ }
161
+ indexHost(host, tokens) {
162
+ let added = 0;
163
+ for (const t of tokens) {
164
+ if (this.hostOfToken.has(t))
165
+ continue;
166
+ const set = this.hostTokens.get(host) ?? new Set();
167
+ set.add(t);
168
+ this.hostTokens.set(host, set);
169
+ this.hostOfToken.set(t, host);
170
+ added += 1;
171
+ }
172
+ return added;
173
+ }
174
+ unindexHost(host, token) {
175
+ const set = this.hostTokens.get(host);
176
+ set?.delete(token);
177
+ if (set?.size === 0)
178
+ this.hostTokens.delete(host);
179
+ this.hostOfToken.delete(token);
180
+ }
181
+ persistHostSessions() {
182
+ atomicWriteFile(this.tmpDir, this.hostSessionsPath, JSON.stringify(Object.fromEntries([...this.hostTokens].map(([host, set]) => [host, [...set]]))));
97
183
  }
98
184
  persistSessionTokens() {
99
185
  atomicWriteFile(this.tmpDir, this.sessionTokensPath, JSON.stringify(Object.fromEntries([...this.sessionTokens].map(([sid, set]) => [sid, [...set]]))));
100
186
  }
101
187
  async put(token, cp) {
102
- if (!this.scopes.has(cp.scope)) {
103
- this.scopes.add(cp.scope);
104
- atomicWriteFile(this.tmpDir, this.scopesPath, JSON.stringify([...this.scopes]));
105
- }
106
- if (!this.sessionTokens.get(cp.sessionId)?.has(token)) {
188
+ const host = hostSessionOf(cp);
189
+ this.registerDurably(() => !this.scopes.has(cp.scope) && (this.scopes.add(cp.scope), true), () => this.scopes.delete(cp.scope), () => atomicWriteFile(this.tmpDir, this.scopesPath, JSON.stringify([...this.scopes])));
190
+ this.registerDurably(() => this.indexHost(host, [token]) > 0, () => this.unindexHost(host, token), () => this.persistHostSessions());
191
+ this.registerDurably(() => {
192
+ if (this.sessionTokens.get(cp.sessionId)?.has(token))
193
+ return false;
107
194
  const set = this.sessionTokens.get(cp.sessionId) ?? new Set();
108
195
  set.add(token);
109
196
  this.sessionTokens.set(cp.sessionId, set);
110
- this.persistSessionTokens();
111
- }
197
+ return true;
198
+ }, () => {
199
+ const set = this.sessionTokens.get(cp.sessionId);
200
+ set?.delete(token);
201
+ if (set?.size === 0)
202
+ this.sessionTokens.delete(cp.sessionId);
203
+ }, () => this.persistSessionTokens());
112
204
  return this.inner.put(token, cp);
113
205
  }
114
206
  get(token) {
@@ -150,7 +242,7 @@ export class LocalCheckpointStore {
150
242
  this.scopes.add(s);
151
243
  this.scopeRegistryCorrupt = false;
152
244
  atomicWriteFile(this.tmpDir, this.scopesPath, JSON.stringify([...this.scopes]));
153
- console.warn(`LocalCheckpointStore: scope registry REBUILT from the data plane (${rebuilt.length} scope(s) with pending gates) — enumeration restored`);
245
+ writeLogText("stderr", `LocalCheckpointStore: scope registry REBUILT from the data plane (${rebuilt.length} scope(s) with pending gates) — enumeration restored`);
154
246
  }
155
247
  async pendings(scope) {
156
248
  await this.ensureScopesRebuilt();
@@ -189,26 +281,34 @@ export class LocalCheckpointStore {
189
281
  async listPending(scope) {
190
282
  const rows = [];
191
283
  for (const { token, cp, summary } of await this.pendings(scope)) {
192
- const pa = cp.pendingAction;
193
- const gate = cp.gate;
194
- const gateKind = queueRowGateKind(gate?.kind);
284
+ const gateKind = queueRowGateKind(summary.gateKind);
195
285
  if (gateKind === undefined)
196
286
  continue;
287
+ const joinKey = durableRowIdentity("approvals-queue", summary.checkpointId, token);
288
+ const host = this.hostOfToken.get(token);
289
+ const taskId = parkedLegTaskId(cp.state?.rowTaskId, host === undefined ? null : ((await this.opts.getActiveTaskId?.(host)) ?? null));
290
+ const createdAt = summary.createdAt !== undefined ? { createdAt: summary.createdAt } : {};
291
+ const deadline = summary.deadline ?? null;
292
+ if (isUnreadableSummaryForm(summary)) {
293
+ rows.push({ sessionId: summary.sessionId, ...joinKey, scope: summary.scope, toolName: null, toolCallId: null, gateKind, taskId, input: null, ...createdAt, deadline, riskDescriptor: null, rowVerdict: summary.rowVerdict });
294
+ continue;
295
+ }
296
+ const pa = cp.pendingAction;
197
297
  const toolCallId = pa?.toolCallId ?? null;
198
298
  rows.push({
199
- sessionId: cp.sessionId,
200
- ...durableRowIdentity("approvals-queue", cp.checkpointId, token),
201
- scope: cp.scope,
299
+ sessionId: summary.sessionId,
300
+ ...joinKey,
301
+ scope: summary.scope,
202
302
  toolName: pa?.toolName ?? null,
203
303
  toolCallId,
204
304
  ...(toolCallId !== null ? { boundCallId: toolCallId } : {}),
205
305
  ...(pa?.boundInputHash !== undefined ? { boundInputHash: pa.boundInputHash } : {}),
206
306
  gateKind,
207
- taskId: (await this.opts.getActiveTaskId?.(cp.sessionId)) ?? null,
307
+ taskId,
208
308
  input: boundedToolInput(pa?.args),
209
- createdAt: cp.createdAt,
210
- deadline: cp.deadline ?? null,
211
- riskDescriptor: gate?.riskDescriptor ?? null,
309
+ ...createdAt,
310
+ deadline,
311
+ riskDescriptor: queueRiskDescriptorOf(cp.gate),
212
312
  ...(() => {
213
313
  const rs = boundedRuleOffers(pa?.ruleOffers);
214
314
  return rs !== undefined ? { ruleOffers: rs } : {};
@@ -220,15 +320,18 @@ export class LocalCheckpointStore {
220
320
  rowVerdict: summary.rowVerdict,
221
321
  });
222
322
  }
223
- return rows.sort((a, b) => (b.riskDescriptor?.severity ?? 0) - (a.riskDescriptor?.severity ?? 0) || a.createdAt - b.createdAt);
323
+ return rows.sort(queueTriageOrder);
224
324
  }
225
325
  async findPendingTokenBySession(sessionId, scope, binding) {
226
- return this.pickPendingRow(await this.sessionPendings(sessionId, scope || undefined), sessionId, binding)?.token ?? null;
326
+ return this.pickPendingRow(await this.axisPendings(sessionId, scope || undefined, binding), binding?.axis === "run" ? undefined : sessionId, binding)?.token ?? null;
327
+ }
328
+ axisPendings(sessionId, scope, binding) {
329
+ return binding?.axis === "run" ? this.runPendings(sessionId, scope) : this.sessionPendings(sessionId, scope);
227
330
  }
228
- pickPendingRow(rows, sessionId, binding) {
331
+ pickPendingRow(rows, cardSessionId, binding) {
229
332
  let best;
230
333
  for (const row of rows) {
231
- if (row.cp.sessionId !== sessionId)
334
+ if (cardSessionId !== undefined && row.cp.sessionId !== cardSessionId)
232
335
  continue;
233
336
  if (binding?.gateKinds !== undefined) {
234
337
  const kind = row.cp.gate?.kind;
@@ -240,30 +343,11 @@ export class LocalCheckpointStore {
240
343
  }
241
344
  return best;
242
345
  }
243
- async hasExpiredBySession(sessionId) {
244
- const tokens = this.sessionTokens.get(sessionId);
245
- if (!tokens)
246
- return false;
247
- let pruned = false;
248
- for (const t of [...tokens]) {
249
- const cp = await this.inner.get(t);
250
- if (!cp) {
251
- tokens.delete(t);
252
- pruned = true;
253
- continue;
254
- }
255
- if (cp.status === "expired")
346
+ async hasExpiredForRun(runSessionId) {
347
+ for (const t of this.hostTokens.get(runSessionId) ?? []) {
348
+ if ((await this.inner.get(t))?.status === "expired")
256
349
  return true;
257
350
  }
258
- if (pruned) {
259
- if (tokens.size === 0)
260
- this.sessionTokens.delete(sessionId);
261
- try {
262
- this.persistSessionTokens();
263
- }
264
- catch {
265
- }
266
- }
267
351
  return false;
268
352
  }
269
353
  async findDecidedApprovalsForBinding(sessionId, boundCallId) {
@@ -315,34 +399,68 @@ export class LocalCheckpointStore {
315
399
  return (await this.inner.get(token))?.scope;
316
400
  }
317
401
  async peekPendingScope(sessionId, binding) {
318
- return this.pickPendingRow(await this.sessionPendings(sessionId), sessionId, binding)?.cp.scope;
402
+ return this.pickPendingRow(await this.axisPendings(sessionId, undefined, binding), binding?.axis === "run" ? undefined : sessionId, binding)?.cp.scope;
403
+ }
404
+ async runPendings(runSessionId, scope) {
405
+ const out = [];
406
+ for (const token of this.hostTokens.get(runSessionId) ?? []) {
407
+ const cp = await this.inner.get(token);
408
+ if (cp === null || cp.status !== "pending" || (scope !== undefined && cp.scope !== scope))
409
+ continue;
410
+ out.push({ token, cp });
411
+ }
412
+ return out;
413
+ }
414
+ async hostSessionOfCard(token) {
415
+ const host = this.hostOfToken.get(token);
416
+ if (host !== undefined)
417
+ return host;
418
+ return (await this.inner.get(token)) === null ? undefined : null;
419
+ }
420
+ async backfillHostSessionsM49() {
421
+ let added = 0;
422
+ for (const [sessionId, toks] of this.sessionTokens)
423
+ added += this.indexHost(sessionId, toks);
424
+ for (const { token, cp } of await this.pendings())
425
+ added += this.indexHost(cp.sessionId, [token]);
426
+ if (added > 0)
427
+ this.persistHostSessions();
428
+ return added;
319
429
  }
320
430
  async reapExpired(cutoff) {
321
431
  let n = 0;
322
432
  for (const { token, cp } of await this.pendings()) {
323
- const deadlineBranch = cp.deadline !== undefined && cp.deadline <= cutoff && !denySweepOwns(cp.gate);
433
+ const deadlineBranch = checkpointDeadlinePassed(cp.deadline, cutoff) && !denySweepOwns(cp.gate);
324
434
  const terminalBranch = terminalAtOf(cp) <= cutoff;
325
435
  if ((deadlineBranch || terminalBranch) && (await this.inner.expire(token, cp.scope)))
326
436
  n++;
327
437
  }
328
438
  return n;
329
439
  }
330
- async listExpiredApprovalGates(cutoff, limit = 100) {
440
+ async listExpiredApprovalGates(cutoff, limit = DENY_SWEEP_PAGE_ROWS, after) {
331
441
  const hits = [];
332
- for (const { cp } of await this.pendings()) {
333
- if (denySweepOwns(cp.gate) && cp.deadline !== undefined && cp.deadline <= cutoff)
334
- hits.push({ sessionId: cp.sessionId, scope: cp.scope, deadline: cp.deadline });
442
+ for (const { token, cp } of await this.pendings()) {
443
+ if (!denySweepOwns(cp.gate) || !checkpointDeadlinePassed(cp.deadline, cutoff))
444
+ continue;
445
+ const position = { deadline: sweepDeadlineKey(cp.deadline), token };
446
+ if (after !== undefined && !sweepPositionPrecedes(after, position))
447
+ continue;
448
+ hits.push({ sessionId: cp.sessionId, scope: cp.scope, position });
335
449
  }
336
- return hits
337
- .sort((a, b) => a.deadline - b.deadline)
338
- .slice(0, limit)
339
- .map(({ sessionId, scope }) => ({ sessionId, scope }));
450
+ return hits.sort((a, b) => (sweepPositionPrecedes(a.position, b.position) ? -1 : sweepPositionPrecedes(b.position, a.position) ? 1 : 0)).slice(0, limit);
340
451
  }
341
- async putCtx(sessionId, ctx) {
452
+ async putCtx(sessionId, ctx, claim) {
453
+ if (claim !== undefined) {
454
+ return this.writeCtxWhileClaimed(sessionId, ctx, claim, "local claim-fenced write", (path, text) => {
455
+ atomicWriteFile(this.tmpDir, path, text);
456
+ return "written";
457
+ });
458
+ }
342
459
  const rec = { sessionId, updatedAt: Date.now(), ctx };
343
460
  const text = JSON.stringify(rec);
344
461
  assertJsonColumnWritable(text, createCtxRecordReader(), `checkpoint ctx for session ${JSON.stringify(sessionId)} (local write leg)`);
345
462
  atomicWriteFile(this.tmpDir, join(this.ctxDir, ctxFileOf(sessionId)), text);
463
+ return "written";
346
464
  }
347
465
  async getCtx(sessionId) {
348
466
  const p = join(this.ctxDir, ctxFileOf(sessionId));
@@ -351,23 +469,25 @@ export class LocalCheckpointStore {
351
469
  const rec = refusingCtx(sessionId, () => decodeJsonColumn(readFileSync(p, "utf8"), createCtxRecordReader(), `checkpoint-ctx ${ctxFileOf(sessionId)} for session ${JSON.stringify(sessionId)}`));
352
470
  return rec.sessionId === sessionId ? rec.ctx : null;
353
471
  }
354
- async rewriteCtxWhileClaimed(sessionId, taskId, ctx, legHolds) {
355
- const claims = this.opts.claims;
356
- if (claims === undefined)
357
- throw new Error("LocalCheckpointStore.rewriteCtxWhileClaimed: no claim fence is bound to this store (wiring defect: the local backend binds its own run store)");
472
+ async rewriteCtxWhileClaimed(sessionId, ctx, claim) {
473
+ return this.writeCtxWhileClaimed(sessionId, ctx, claim, "local claim-fenced rewrite", (path, text) => {
474
+ if (!existsSync(path))
475
+ return "context_absent";
476
+ atomicWriteFile(this.tmpDir, path, text);
477
+ return "written";
478
+ });
479
+ }
480
+ writeCtxWhileClaimed(sessionId, ctx, claim, leg, write) {
481
+ const fence = claim.fence;
482
+ if ("db" in fence)
483
+ throw new Error(`LocalCheckpointStore ${leg}: the claim fence must be the in-process run store on this data root (wiring defect: the run store and the checkpoint store come from one backend)`);
358
484
  const rec = { sessionId, updatedAt: Date.now(), ctx };
359
485
  const text = JSON.stringify(rec);
360
- assertJsonColumnWritable(text, createCtxRecordReader(), `checkpoint ctx for session ${JSON.stringify(sessionId)} (local claim-fenced rewrite)`);
486
+ assertJsonColumnWritable(text, createCtxRecordReader(), `checkpoint ctx for session ${JSON.stringify(sessionId)} (${leg})`);
361
487
  const path = join(this.ctxDir, ctxFileOf(sessionId));
362
- let outcome = "context_absent";
363
- const held = claims.whileHoldingClaim(sessionId, taskId, (run) => {
364
- if (!legHolds(run)) {
365
- outcome = "claim_released";
366
- }
367
- else if (existsSync(path)) {
368
- atomicWriteFile(this.tmpDir, path, text);
369
- outcome = "written";
370
- }
488
+ let outcome = "claim_released";
489
+ const held = fence.whileHoldingClaim(sessionId, claim.taskId, (run) => {
490
+ outcome = claim.legHolds(run) ? write(path, text) : "claim_released";
371
491
  return FENCE_LANDED;
372
492
  });
373
493
  return held ? outcome : "claim_released";
@@ -413,7 +533,7 @@ export class LocalCheckpointStore {
413
533
  }
414
534
  if (rec.updatedAt >= cutoff)
415
535
  continue;
416
- if ((await this.findPendingTokenBySession(rec.sessionId)) !== null)
536
+ if ((await this.findPendingTokenBySession(rec.sessionId, undefined, { axis: "run" })) !== null)
417
537
  continue;
418
538
  if ((await this.opts.getActiveTaskId?.(rec.sessionId)) !== undefined)
419
539
  continue;
@@ -1,3 +1,4 @@
1
+ import { createLogger } from "../observability/logger.js";
1
2
  import { closeSync, constants as FS, fchmodSync, fstatSync, lstatSync, openSync, readdirSync } from "node:fs";
2
3
  import { isAbsolute, join, relative, resolve, sep } from "node:path";
3
4
  import { physicalPathOf } from "@sema-agent/core";
@@ -45,7 +46,7 @@ const emit = (sink, msg, meta) => {
45
46
  sink(msg, meta);
46
47
  }
47
48
  catch {
48
- console.warn(msg, meta);
49
+ createLogger().warn(msg, meta);
49
50
  }
50
51
  };
51
52
  const sameObject = (a, b) => a.dev === b.dev && a.ino === b.ino;
@@ -0,0 +1,52 @@
1
+ import { type EngineHighWaterReading } from "./local-engine-high-water.js";
2
+ import { type ArchiveTokenAdoptionDutyAction, type DataRootFileText } from "./local-session-store.js";
3
+ import { type SkillExemptionCutoffAction } from "./approval-exemption-skill-cutoff.js";
4
+ import { type ReleaseTriple } from "./release-version.js";
5
+ /** 准入的一次观察(纯数据;判的全部输入)—— 锁内逐项比的那一份。读不出的输入在判里已拒,所以存下来的观察里只有「缺席 / 字节」两态。 */
6
+ export interface LocalDataRootObservation {
7
+ readonly marker: DataRootFileText;
8
+ /** 严格边档清册的字节(按清册次序)。 */
9
+ readonly strictSidecars: readonly DataRootFileText[];
10
+ /** 存档目录里的会话 id(目录不在 ⇒ 空)。 */
11
+ readonly archiveIds: readonly string[];
12
+ /** 收令牌欠账标记在不在。 */
13
+ readonly adoptionPending: boolean;
14
+ /** `Skill` 豁免截点文件的字节。 */
15
+ readonly skillCutoff: DataRootFileText;
16
+ /** 会话豁免日志目录的指纹(`exemptionLogFingerprints`);`null` = 没读:本构建还带 M46,截点之前的行归它删,判不读日志。 */
17
+ readonly exemptionLogs: readonly string[] | null;
18
+ }
19
+ /** 准入的读数(纯数据;唯一铸点 {@link admitLocalDataRoot},唯一消费者 {@link holdLocalDataRootAdmission})。 */
20
+ export interface LocalDataRootAdmission {
21
+ /** 判的是哪只根:物理路径(core 打开它的同一读法);`undefined` = 准入时数据根上什么都没有(还不存在 / 不是目录 / 空目录)。 */
22
+ readonly root: string | undefined;
23
+ /** 判的输入(锁内逐项比)。 */
24
+ readonly observed: LocalDataRootObservation;
25
+ /** 引擎高水位的读数(抬的依据)。 */
26
+ readonly highWater: EngineHighWaterReading;
27
+ /** 跳版臂要在锁内、抬之前做的动作。 */
28
+ readonly archiveDuty: ArchiveTokenAdoptionDutyAction;
29
+ /** `Skill` 豁免截点要在锁内、抬之前做的动作(缺席 ⇒ 落)。 */
30
+ readonly skillCutoff: SkillExemptionCutoffAction;
31
+ }
32
+ /**
33
+ * **准入**(只读;拒 = 抛 —— 拒句是 `LocalDataRootSchemaMismatchError` 的 `boot` 形,或本构建版本读不出的那一只 `StoreBootRefusalError`;
34
+ * 判不了的 I/O 故障如存档目录读不了原样抛 = 不放行)。`engine` 缺席 = 本构建(`serviceVersion()`)。
35
+ * 数据根上什么都没有(不存在 / 不是目录 / 空目录 —— {@link localDataRootHoldsData},与起服降级臂同一读法)⇒ 没有可判的,按缺席放行(首启;只判本构建发布线);
36
+ * 建不建得出根是打开那一步的事(显式 local 拒句点名「打不开数据根」,缺省推导的 local 走降级臂)—— 准入不把「根还不存在」读成「marker 读不出」。
37
+ */
38
+ export declare function admitLocalDataRoot(root: string, engine?: string): LocalDataRootAdmission;
39
+ /**
40
+ * **判 `Skill` 豁免截点**(律见 `approval-exemption-skill-cutoff.ts`;唯一调用点 = {@link admitLocalDataRoot},判的是准入那一次观察里的截点文件字节):
41
+ * · 截点文件读不出(I/O / 正文不是时刻)⇒ 拒(读不出的那一形)—— 带不带 M46 都判(fail-closed 律:读不出的截点不猜);
42
+ * · `carried`(本构建还带 M46)⇒ 不读日志、不因行拒:截点缺席 ⇒ `lay`(锁内先落,M46 读它删截点之前的行),否则 `none`;
43
+ * · 不带 ⇒ 首次放行早于截点(截点缺席 ⇒ 任一)的 `Skill` 行所在的会话 > 0 ⇒ 拒(`skipped-required-migration`,
44
+ * 出路版本不低于 {@link SKILL_EXEMPTION_CUTOFF_SINCE} 与已记高水位);都没有 ⇒ 截点缺席则 `lay`。拒在准入里 ⇒ 数据根零写、高水位不抬 ⇒ 拒句点名的那一版仍开得了这只根。
45
+ */
46
+ export declare function judgeLocalSkillExemptionCutoff(root: string, raw: DataRootFileText, priorHighWater: ReleaseTriple | undefined, carried: boolean): SkillExemptionCutoffAction;
47
+ /**
48
+ * **锁内一步**(唯一调用点 = `openLocalBackend`:数据根锁在手之后、本仓任何一只店建起之前):核数据根没动(物理路径是准入那一只、再观察一次与准入那一次逐项相同)
49
+ * → 做跳版臂的动作 → 落 `Skill` 豁免截点(缺席才落)→ 抬。任一步抛 ⇒ 不抬、不建店(调用方交回拒后端,只放锁)。
50
+ */
51
+ export declare function holdLocalDataRootAdmission(physicalRoot: string, admission: LocalDataRootAdmission): void;
52
+ //# sourceMappingURL=local-data-root-admission.d.ts.map
@@ -0,0 +1,100 @@
1
+ import { join } from "node:path";
2
+ import { physicalPathOf } from "@sema-agent/core";
3
+ import { serviceVersion } from "../service-version.js";
4
+ import { localDataRootHoldsData } from "../store-posture.js";
5
+ import { StoreBootRefusalError } from "./store-contracts.js";
6
+ import { engineHighWaterPath, judgeEngineHighWater, ownReleaseLine, raiseEngineHighWater } from "./local-engine-high-water.js";
7
+ import { archiveIdsInSync, archiveTokenAdoptionPendingPresent, judgeArchiveTokenAdoptionDuty, judgeStrictSidecars, readDataRootFileTextSync, readStrictSidecarTextsSync, settleArchiveTokenAdoptionDuty, dataRootMismatchOf, LocalDataRootSchemaMismatchError, } from "./local-session-store.js";
8
+ import { LOCAL_SKILL_EXEMPTION_CUTOFF_FILE, SKILL_EXEMPTION_CUTOFF_SINCE, exemptionLogFingerprints, localSkillExemptionSessionsBefore, settleLocalSkillExemptionCutoff, skillExemptionCutoffOfText, } from "./approval-exemption-skill-cutoff.js";
9
+ import { APPROVAL_EXEMPTION_DIR } from "./approval-exemption-store.js";
10
+ import { SKILL_EXEMPTION_CUTOFF_ID } from "./one-time-migration-marker.js";
11
+ import { migrationCarried } from "./one-time-migrations.js";
12
+ import { releaseText } from "./release-version.js";
13
+ const ABSENT = { state: "absent" };
14
+ const EMPTY_OBSERVATION = Object.freeze({ marker: ABSENT, strictSidecars: [], archiveIds: [], adoptionPending: false, skillCutoff: ABSENT, exemptionLogs: [] });
15
+ function observeLocalDataRoot(root, exemptionLogs) {
16
+ return {
17
+ marker: readDataRootFileTextSync(engineHighWaterPath(root)),
18
+ strictSidecars: readStrictSidecarTextsSync(root),
19
+ archiveIds: archiveIdsInSync(root),
20
+ adoptionPending: archiveTokenAdoptionPendingPresent(root),
21
+ skillCutoff: readDataRootFileTextSync(join(root, LOCAL_SKILL_EXEMPTION_CUTOFF_FILE)),
22
+ exemptionLogs: exemptionLogs ? exemptionLogFingerprints(root) : null,
23
+ };
24
+ }
25
+ const textOf = (r) => (r.state === "text" ? r.text : r.state === "absent" ? undefined : null);
26
+ function movedInput(admitted, now) {
27
+ if (textOf(admitted.marker) !== textOf(now.marker))
28
+ return "the engine high-water marker";
29
+ const sidecars = Math.max(admitted.strictSidecars.length, now.strictSidecars.length);
30
+ for (let i = 0; i < sidecars; i++) {
31
+ if (textOf(admitted.strictSidecars[i] ?? ABSENT) !== textOf(now.strictSidecars[i] ?? ABSENT))
32
+ return "a strict sidecar (session-meta)";
33
+ }
34
+ if (admitted.archiveIds.join("\n") !== now.archiveIds.join("\n"))
35
+ return "the session archive directory";
36
+ if (admitted.adoptionPending !== now.adoptionPending)
37
+ return "the archive-token adoption record";
38
+ if (textOf(admitted.skillCutoff) !== textOf(now.skillCutoff))
39
+ return "the Skill exemption cutoff";
40
+ if ((admitted.exemptionLogs ?? []).join("\n") !== (now.exemptionLogs ?? []).join("\n"))
41
+ return "the session approval exemption logs";
42
+ return undefined;
43
+ }
44
+ export function admitLocalDataRoot(root, engine = serviceVersion()) {
45
+ const given = root.normalize("NFC");
46
+ if (!localDataRootHoldsData(given)) {
47
+ return Object.freeze({ root: undefined, observed: EMPTY_OBSERVATION, highWater: { own: ownReleaseLine(given, engine), prior: undefined }, archiveDuty: "none", skillCutoff: "lay" });
48
+ }
49
+ const carried = migrationCarried(SKILL_EXEMPTION_CUTOFF_ID);
50
+ const physical = physicalPathOf(given);
51
+ const observed = observeLocalDataRoot(physical, !carried);
52
+ const highWater = judgeEngineHighWater(physical, observed.marker, engine);
53
+ const cells = judgeStrictSidecars(physical, observed.strictSidecars);
54
+ const archiveDuty = judgeArchiveTokenAdoptionDuty(physical, highWater.prior, migrationCarried("M47"), { cells, archiveIds: observed.archiveIds, adoptionPending: observed.adoptionPending });
55
+ const skillCutoff = judgeLocalSkillExemptionCutoff(physical, observed.skillCutoff, highWater.prior, carried);
56
+ return Object.freeze({ root: physical, observed, highWater, archiveDuty, skillCutoff });
57
+ }
58
+ export function judgeLocalSkillExemptionCutoff(root, raw, priorHighWater, carried) {
59
+ const path = join(root, LOCAL_SKILL_EXEMPTION_CUTOFF_FILE);
60
+ const label = `${LOCAL_SKILL_EXEMPTION_CUTOFF_FILE} (the local Skill exemption cutoff)`;
61
+ if (raw.state === "unreadable")
62
+ throw new LocalDataRootSchemaMismatchError([dataRootMismatchOf(path, label, raw.fault)], "boot");
63
+ const cutoffMs = raw.state === "text" ? skillExemptionCutoffOfText(raw.text) : undefined;
64
+ if (raw.state === "text" && cutoffMs === undefined)
65
+ throw new LocalDataRootSchemaMismatchError([{ path, label, problem: "malformed", unknownFields: [] }], "boot");
66
+ if (carried)
67
+ return cutoffMs === undefined ? "lay" : "none";
68
+ const sessions = localSkillExemptionSessionsBefore(root, cutoffMs);
69
+ if (sessions > 0) {
70
+ throw new LocalDataRootSchemaMismatchError([
71
+ {
72
+ path: join(root, APPROVAL_EXEMPTION_DIR),
73
+ label: `${APPROVAL_EXEMPTION_DIR} (the local session approval exemptions)`,
74
+ problem: "skipped-required-migration",
75
+ unknownFields: [],
76
+ skippedMigration: {
77
+ residue: "pre-cutoff-skill-exemptions",
78
+ highWater: priorHighWater === undefined ? null : releaseText(priorHighWater),
79
+ requiredSince: SKILL_EXEMPTION_CUTOFF_SINCE,
80
+ sessions,
81
+ cutoff: cutoffMs === undefined ? null : new Date(cutoffMs).toISOString(),
82
+ },
83
+ },
84
+ ], "boot");
85
+ }
86
+ return cutoffMs === undefined ? "lay" : "none";
87
+ }
88
+ export function holdLocalDataRootAdmission(physicalRoot, admission) {
89
+ const moved = admission.root !== undefined && admission.root !== physicalRoot
90
+ ? "the data root's physical path"
91
+ : movedInput(admission.observed, observeLocalDataRoot(physicalRoot, admission.observed.exemptionLogs !== null));
92
+ if (moved !== undefined) {
93
+ throw new StoreBootRefusalError(`DB_BACKEND=local: ${moved} under ${physicalRoot} changed between this start's data-root admission and taking the data-root lock — another engine opened this data root meanwhile; ` +
94
+ "refusing to open it on a stale reading. Restart: the next start judges the data root as it is then.");
95
+ }
96
+ settleArchiveTokenAdoptionDuty(physicalRoot, admission.highWater.prior, admission.archiveDuty);
97
+ settleLocalSkillExemptionCutoff(physicalRoot, admission.skillCutoff);
98
+ raiseEngineHighWater(physicalRoot, admission.highWater);
99
+ }
100
+ //# sourceMappingURL=local-data-root-admission.js.map