@sema-agent/server 7.147.0 → 7.148.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (725) hide show
  1. package/MIGRATION.md +1039 -24
  2. package/README.md +20 -7
  3. package/README.zh-CN.md +14 -8
  4. package/USAGE.md +380 -163
  5. package/deploy/sema-up/README.md +16 -5
  6. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  7. package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
  8. package/deploy/sema-up/chart/values.yaml +3 -2
  9. package/deploy/sema-up/cluster-up.sh +74 -176
  10. package/deploy/sema-up/kube-up.sh +29 -49
  11. package/deploy/sema-up/lib/chart-run.sh +23 -0
  12. package/deploy/sema-up/lib/dataroot.sh +3 -3
  13. package/deploy/sema-up/lib/health.sh +62 -13
  14. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  15. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  16. package/deploy/sema-up/lib/regcred.py +8 -0
  17. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  18. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  19. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  20. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  21. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  22. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  23. package/deploy/sema-up/lib/render-stack.py +17 -0
  24. package/deploy/sema-up/lib/shell-text.sh +87 -0
  25. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  26. package/deploy/sema-up/lib/usage-head.txt +1 -0
  27. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  28. package/deploy/sema-up/preflight.sh +10 -8
  29. package/deploy/sema-up/sema-up.sh +14 -39
  30. package/deploy/sema-up/smoke.sh +7 -6
  31. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  32. package/deploy/sema-up/stack/compose.yaml +13 -1
  33. package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
  34. package/dist/adoption/plan.d.ts +24 -0
  35. package/dist/adoption/plan.js +53 -1
  36. package/dist/adoption/runner.d.ts +10 -1
  37. package/dist/adoption/runner.js +36 -16
  38. package/dist/adoption/wire.d.ts +3 -3
  39. package/dist/approval-card.d.ts +28 -30
  40. package/dist/approval-gate-currency.js +3 -2
  41. package/dist/approval-reconciler.d.ts +4 -13
  42. package/dist/approval-reconciler.js +2 -2
  43. package/dist/approval.d.ts +13 -11
  44. package/dist/approval.js +3 -3
  45. package/dist/audit.d.ts +10 -3
  46. package/dist/audit.js +15 -7
  47. package/dist/auth-bridge.d.ts +0 -14
  48. package/dist/auth-bridge.js +0 -7
  49. package/dist/auto-mode-face.d.ts +10 -7
  50. package/dist/auto-mode-face.js +7 -4
  51. package/dist/background-agent-name.d.ts +19 -1
  52. package/dist/background-agent-name.js +12 -2
  53. package/dist/background-session-reap.d.ts +1 -1
  54. package/dist/bake-runner/main.js +9 -6
  55. package/dist/bench/s1/arms.js +6 -5
  56. package/dist/bench/s1/live-deps.js +5 -2
  57. package/dist/bench/s1/run-firm.js +6 -5
  58. package/dist/bind-host.d.ts +25 -0
  59. package/dist/bind-host.js +25 -0
  60. package/dist/boot/adoption.d.ts +3 -0
  61. package/dist/boot/adoption.js +1 -0
  62. package/dist/boot/deployment-mods.d.ts +1 -1
  63. package/dist/boot/execution-env.d.ts +17 -7
  64. package/dist/boot/execution-env.js +37 -31
  65. package/dist/boot/exit-boundary.d.ts +2 -2
  66. package/dist/boot/exit-boundary.js +6 -5
  67. package/dist/boot/fatal-exit.d.ts +3 -5
  68. package/dist/boot/fatal-exit.js +2 -2
  69. package/dist/boot/leader.d.ts +15 -0
  70. package/dist/boot/leader.js +17 -15
  71. package/dist/boot/memory-consolidation.d.ts +37 -29
  72. package/dist/boot/memory-consolidation.js +11 -5
  73. package/dist/boot/org-memory.js +1 -1
  74. package/dist/boot/parked-revive-gate.js +2 -2
  75. package/dist/boot/reapers.d.ts +4 -3
  76. package/dist/boot/reapers.js +19 -16
  77. package/dist/boot/resolve-spec.d.ts +5 -3
  78. package/dist/boot/resolve-spec.js +55 -67
  79. package/dist/boot/retention-lane.d.ts +4 -4
  80. package/dist/boot/retention-lane.js +2 -2
  81. package/dist/boot/runner-deps.d.ts +28 -7
  82. package/dist/boot/runner-deps.js +11 -4
  83. package/dist/boot/runtime-caps.d.ts +2 -2
  84. package/dist/boot/runtime-caps.js +16 -2
  85. package/dist/boot/session-faces.d.ts +16 -7
  86. package/dist/boot/session-faces.js +114 -94
  87. package/dist/boot/shutdown.d.ts +5 -4
  88. package/dist/boot/shutdown.js +6 -4
  89. package/dist/boot/stage-01-config.js +9 -1
  90. package/dist/boot/stage-02-web-admin-pull.d.ts +1 -0
  91. package/dist/boot/stage-02-web-admin-pull.js +6 -1
  92. package/dist/boot/stage-03-store-backend.d.ts +3 -0
  93. package/dist/boot/stage-03-store-backend.js +4 -3
  94. package/dist/boot/stage-04-stores.d.ts +2 -0
  95. package/dist/boot/stage-04-stores.js +2 -2
  96. package/dist/boot/stage-05-execution-env.d.ts +7 -3
  97. package/dist/boot/stage-05-execution-env.js +2 -2
  98. package/dist/boot/stage-06-runners.d.ts +10 -12
  99. package/dist/boot/stage-06-runners.js +23 -15
  100. package/dist/boot/stage-07-capability-layer.d.ts +11 -8
  101. package/dist/boot/stage-07-capability-layer.js +5 -3
  102. package/dist/boot/stage-08-reapers.d.ts +11 -8
  103. package/dist/boot/stage-08-reapers.js +3 -3
  104. package/dist/boot/stage-09-leader.d.ts +12 -15
  105. package/dist/boot/stage-09-leader.js +12 -4
  106. package/dist/boot/stage-10-http-server.d.ts +12 -15
  107. package/dist/boot/stage-10-http-server.js +7 -4
  108. package/dist/boot/store-evidence.d.ts +20 -0
  109. package/dist/boot/store-evidence.js +13 -0
  110. package/dist/boot/stores.d.ts +3 -0
  111. package/dist/boot/stores.js +21 -10
  112. package/dist/boot/task-list-lane.d.ts +4 -4
  113. package/dist/boot/web-admin.d.ts +4 -2
  114. package/dist/boot/web-admin.js +55 -35
  115. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  116. package/dist/boot-reclaim.d.ts +3 -1
  117. package/dist/boot-reclaim.js +1 -1
  118. package/dist/brain.d.ts +7 -18
  119. package/dist/brain.js +5 -17
  120. package/dist/budget.js +6 -6
  121. package/dist/capabilities/center-plugins.d.ts +7 -1
  122. package/dist/capabilities/center-plugins.js +32 -10
  123. package/dist/capabilities/center-wiring.js +1 -1
  124. package/dist/capabilities/composite-members.d.ts +2 -2
  125. package/dist/capabilities/composite-members.js +2 -2
  126. package/dist/capabilities/repo-tools.d.ts +2 -0
  127. package/dist/capabilities/repo-tools.js +14 -12
  128. package/dist/capabilities/scenarios.d.ts +6 -15
  129. package/dist/capabilities/scenarios.js +11 -16
  130. package/dist/capabilities/skills.d.ts +1 -1
  131. package/dist/capabilities/tool-defer.d.ts +1 -1
  132. package/dist/capability-facts.d.ts +38 -11
  133. package/dist/capability-facts.js +47 -8
  134. package/dist/card-void.d.ts +4 -4
  135. package/dist/card-void.js +1 -1
  136. package/dist/center-credential-renewer.d.ts +6 -2
  137. package/dist/center-credential-renewer.js +7 -3
  138. package/dist/config-catalog.d.ts +16 -1
  139. package/dist/config-catalog.js +62 -56
  140. package/dist/config-dir-trust.d.ts +37 -4
  141. package/dist/config-dir-trust.js +88 -44
  142. package/dist/config-invariants.d.ts +42 -3
  143. package/dist/config-invariants.js +69 -5
  144. package/dist/config-lkg.d.ts +23 -1
  145. package/dist/config-lkg.js +17 -3
  146. package/dist/config-provider.d.ts +9 -9
  147. package/dist/config-provider.js +25 -110
  148. package/dist/config-pull-failure.d.ts +50 -0
  149. package/dist/config-pull-failure.js +48 -0
  150. package/dist/config-types.d.ts +26 -17
  151. package/dist/config.d.ts +8 -16
  152. package/dist/config.js +113 -47
  153. package/dist/delegated-session-owner.d.ts +1 -1
  154. package/dist/deleted-session-ids.d.ts +3 -2
  155. package/dist/deployment-governance.d.ts +3 -3
  156. package/dist/deployment-shape.d.ts +30 -4
  157. package/dist/deployment-shape.js +7 -0
  158. package/dist/egress-redirect.d.ts +25 -7
  159. package/dist/egress-redirect.js +20 -2
  160. package/dist/elicitation.d.ts +6 -5
  161. package/dist/elicitation.js +23 -22
  162. package/dist/engine-identity.d.ts +28 -0
  163. package/dist/engine-identity.js +10 -0
  164. package/dist/entry-problems.d.ts +5 -7
  165. package/dist/entry-problems.js +1 -1
  166. package/dist/env-facts.js +2 -1
  167. package/dist/env-witness.d.ts +7 -0
  168. package/dist/env-witness.js +16 -0
  169. package/dist/execution-lane-caps.d.ts +5 -18
  170. package/dist/execution-lane-caps.js +0 -22
  171. package/dist/execution-placement.d.ts +58 -18
  172. package/dist/execution-placement.js +41 -2
  173. package/dist/field-conflict.d.ts +7 -11
  174. package/dist/field-conflict.js +3 -3
  175. package/dist/file-history-capture.d.ts +3 -3
  176. package/dist/file-history-disclosure.js +1 -0
  177. package/dist/fleet/fleet-bus.d.ts +21 -3
  178. package/dist/fleet/fleet-bus.js +35 -25
  179. package/dist/fleet/fleet-reconciler.js +2 -2
  180. package/dist/fleet/serving-lease.js +3 -3
  181. package/dist/fleet-client.js +3 -3
  182. package/dist/fleet-lease.d.ts +0 -1
  183. package/dist/fleet-lease.js +4 -5
  184. package/dist/history-anchor.d.ts +23 -3
  185. package/dist/history-anchor.js +24 -4
  186. package/dist/hitl-delivery.d.ts +90 -0
  187. package/dist/hitl-delivery.js +98 -0
  188. package/dist/hooks/classic-stations.d.ts +8 -11
  189. package/dist/hooks/classic-stations.js +0 -7
  190. package/dist/hooks/hook-llm.d.ts +5 -1
  191. package/dist/hooks/hook-llm.js +24 -15
  192. package/dist/hooks/hook-runner.d.ts +67 -57
  193. package/dist/hooks/hook-runner.js +260 -186
  194. package/dist/host-lsp-manager.d.ts +22 -8
  195. package/dist/host-lsp-manager.js +4 -1
  196. package/dist/http/active-run-conflict.d.ts +2 -43
  197. package/dist/http/active-run-conflict.js +3 -7
  198. package/dist/http/admission.d.ts +4 -18
  199. package/dist/http/admission.js +75 -78
  200. package/dist/http/approval-sweeps.d.ts +3 -3
  201. package/dist/http/approval-sweeps.js +54 -30
  202. package/dist/http/caller-trust.d.ts +8 -10
  203. package/dist/http/caller-trust.js +1 -2
  204. package/dist/http/claim-heartbeat.d.ts +49 -0
  205. package/dist/http/claim-heartbeat.js +46 -0
  206. package/dist/http/claimed-run.d.ts +4 -3
  207. package/dist/http/dispatch.d.ts +8 -1
  208. package/dist/http/dispatch.js +76 -30
  209. package/dist/http/durable-run-leg.d.ts +3 -3
  210. package/dist/http/durable-run-leg.js +17 -12
  211. package/dist/http/execution-context.d.ts +17 -43
  212. package/dist/http/execution-context.js +7 -5
  213. package/dist/http/health-reader.d.ts +36 -0
  214. package/dist/http/health-reader.js +21 -0
  215. package/dist/http/health-self-report.d.ts +9 -9
  216. package/dist/http/health-self-report.js +4 -4
  217. package/dist/http/idempotency.d.ts +9 -5
  218. package/dist/http/idempotency.js +4 -4
  219. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  220. package/dist/http/memory-compliance-failure-reply.js +4 -2
  221. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  222. package/dist/http/memory-face-fault-reply.js +71 -0
  223. package/dist/http/memory-store-refusal-reply.d.ts +1 -1
  224. package/dist/http/memory-store-refusal-reply.js +3 -0
  225. package/dist/http/owner-access.d.ts +391 -67
  226. package/dist/http/owner-access.js +371 -35
  227. package/dist/http/principal-gate.d.ts +24 -81
  228. package/dist/http/principal-gate.js +24 -68
  229. package/dist/http/refusal-body.d.ts +35 -2
  230. package/dist/http/refusal-body.js +34 -0
  231. package/dist/http/request-guards.d.ts +9 -13
  232. package/dist/http/request-guards.js +34 -68
  233. package/dist/http/resume-composition.d.ts +37 -0
  234. package/dist/http/resume-composition.js +18 -0
  235. package/dist/http/resume-ctx-read.d.ts +35 -12
  236. package/dist/http/resume-ctx-read.js +25 -6
  237. package/dist/http/resume-legs.d.ts +21 -18
  238. package/dist/http/resume-legs.js +189 -129
  239. package/dist/http/retired-skill-manifest.d.ts +1 -1
  240. package/dist/http/route-ctx.d.ts +25 -32
  241. package/dist/http/routes/a2a-serve.d.ts +43 -5
  242. package/dist/http/routes/a2a-serve.js +58 -37
  243. package/dist/http/routes/admin-config-refresh.js +2 -2
  244. package/dist/http/routes/admin-drain.js +2 -2
  245. package/dist/http/routes/admin-memory-optout.js +4 -3
  246. package/dist/http/routes/adoption.d.ts +3 -0
  247. package/dist/http/routes/adoption.js +17 -10
  248. package/dist/http/routes/agents-roster.js +13 -7
  249. package/dist/http/routes/approvals-assistant.js +70 -65
  250. package/dist/http/routes/attachments.js +2 -2
  251. package/dist/http/routes/background.d.ts +3 -3
  252. package/dist/http/routes/background.js +9 -17
  253. package/dist/http/routes/capabilities.js +15 -18
  254. package/dist/http/routes/config-catalog.js +2 -2
  255. package/dist/http/routes/devices.d.ts +3 -3
  256. package/dist/http/routes/devices.js +4 -4
  257. package/dist/http/routes/diagnostics.d.ts +27 -3
  258. package/dist/http/routes/diagnostics.js +27 -21
  259. package/dist/http/routes/engine.js +2 -2
  260. package/dist/http/routes/fleet.js +5 -3
  261. package/dist/http/routes/images.js +10 -6
  262. package/dist/http/routes/leader.d.ts +7 -2
  263. package/dist/http/routes/leader.js +12 -3
  264. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  265. package/dist/http/routes/mcp-reconnect.js +7 -15
  266. package/dist/http/routes/memory-bundle.js +4 -7
  267. package/dist/http/routes/memory-compliance.js +4 -4
  268. package/dist/http/routes/memory-consolidation.js +6 -9
  269. package/dist/http/routes/memory-origin.d.ts +2 -0
  270. package/dist/http/routes/memory-origin.js +7 -8
  271. package/dist/http/routes/memory-policy.js +17 -12
  272. package/dist/http/routes/notify-wake.js +10 -19
  273. package/dist/http/routes/observability.js +3 -3
  274. package/dist/http/routes/principal-inbox.d.ts +1 -1
  275. package/dist/http/routes/principal-inbox.js +2 -2
  276. package/dist/http/routes/projects.d.ts +1 -1
  277. package/dist/http/routes/projects.js +3 -2
  278. package/dist/http/routes/retention-ops.js +6 -9
  279. package/dist/http/routes/rules.js +20 -5
  280. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  281. package/dist/http/routes/run-memory-capture.js +6 -12
  282. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  283. package/dist/http/routes/run-permission-mode.js +10 -17
  284. package/dist/http/routes/runs.js +146 -231
  285. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  286. package/dist/http/routes/session-memory-sync.js +7 -13
  287. package/dist/http/routes/session-sync.d.ts +4 -2
  288. package/dist/http/routes/session-sync.js +21 -20
  289. package/dist/http/routes/sessions-list.d.ts +3 -3
  290. package/dist/http/routes/sessions-list.js +9 -9
  291. package/dist/http/routes/sessions.js +87 -124
  292. package/dist/http/routes/shared-memory.js +6 -6
  293. package/dist/http/routes/side-query.js +2 -2
  294. package/dist/http/routes/tasks.js +136 -120
  295. package/dist/http/routes/trace-usage.d.ts +0 -12
  296. package/dist/http/routes/trace-usage.js +40 -46
  297. package/dist/http/routes/workflows.d.ts +39 -4
  298. package/dist/http/routes/workflows.js +42 -14
  299. package/dist/http/run-concurrency-cap.d.ts +20 -12
  300. package/dist/http/run-concurrency-cap.js +39 -26
  301. package/dist/http/run-read-face.d.ts +3 -5
  302. package/dist/http/run-read-face.js +8 -13
  303. package/dist/http/send.d.ts +12 -3
  304. package/dist/http/send.js +42 -6
  305. package/dist/http/server.d.ts +39 -40
  306. package/dist/http/server.js +36 -11
  307. package/dist/http/sse-log.d.ts +17 -10
  308. package/dist/http/sse-log.js +7 -7
  309. package/dist/http/stored-body-replay.d.ts +12 -0
  310. package/dist/http/stored-body-replay.js +2 -2
  311. package/dist/http/submit-ctx.d.ts +16 -8
  312. package/dist/http/submit-ctx.js +6 -2
  313. package/dist/http/submit-replay.d.ts +19 -6
  314. package/dist/http/submit-replay.js +18 -6
  315. package/dist/http/sync-submit-body.d.ts +3 -4
  316. package/dist/http/sync-submit-body.js +4 -5
  317. package/dist/http/wire-types.d.ts +4 -3
  318. package/dist/identity-source.d.ts +36 -5
  319. package/dist/identity-source.js +27 -0
  320. package/dist/index.d.ts +1 -0
  321. package/dist/index.js +1 -0
  322. package/dist/key-resolver.d.ts +32 -0
  323. package/dist/key-resolver.js +23 -9
  324. package/dist/leader/diffup.js +2 -1
  325. package/dist/leader/endpoint.d.ts +26 -5
  326. package/dist/leader/endpoint.js +154 -14
  327. package/dist/leader/fanout.d.ts +3 -0
  328. package/dist/leader/fanout.js +78 -63
  329. package/dist/leader/leader.d.ts +16 -0
  330. package/dist/leader/leader.js +43 -3
  331. package/dist/leader/merge.d.ts +9 -1
  332. package/dist/leader/merge.js +16 -1
  333. package/dist/leader/repair-wire.js +1 -1
  334. package/dist/leader/wire.d.ts +36 -3
  335. package/dist/leader/wire.js +59 -18
  336. package/dist/lsp-evict.d.ts +6 -4
  337. package/dist/lsp-evict.js +2 -3
  338. package/dist/memory-operator-faces.d.ts +5 -4
  339. package/dist/memory-operator-faces.js +1 -1
  340. package/dist/memory-scope.d.ts +29 -2
  341. package/dist/memory-scope.js +64 -15
  342. package/dist/memory-store-refusal.d.ts +5 -2
  343. package/dist/memory-sync-client.d.ts +3 -2
  344. package/dist/memory-sync-client.js +6 -3
  345. package/dist/model-compat.d.ts +17 -8
  346. package/dist/model-compat.js +6 -2
  347. package/dist/model-context-window.d.ts +18 -0
  348. package/dist/model-context-window.js +2 -0
  349. package/dist/model-entry-headers.d.ts +46 -4
  350. package/dist/model-entry-headers.js +2 -2
  351. package/dist/model-entry-refusal.d.ts +35 -16
  352. package/dist/model-entry-refusal.js +40 -27
  353. package/dist/model-plane-face.d.ts +19 -11
  354. package/dist/model-plane-face.js +9 -1
  355. package/dist/model-plane-probe.d.ts +2 -0
  356. package/dist/model-plane-probe.js +17 -0
  357. package/dist/model-provider.d.ts +3 -3
  358. package/dist/model-route-endpoint.d.ts +9 -5
  359. package/dist/model-route-endpoint.js +29 -7
  360. package/dist/model-select.d.ts +16 -0
  361. package/dist/model-select.js +4 -0
  362. package/dist/mountinfo.d.ts +37 -0
  363. package/dist/mountinfo.js +47 -0
  364. package/dist/namespaced-rule-name.d.ts +23 -14
  365. package/dist/namespaced-rule-name.js +8 -11
  366. package/dist/net-address.d.ts +1 -1
  367. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  368. package/dist/observability/corrupt-read-seat.js +5 -3
  369. package/dist/observability/fail-open.d.ts +58 -38
  370. package/dist/observability/fail-open.js +60 -38
  371. package/dist/observability/logger.d.ts +22 -1
  372. package/dist/observability/logger.js +89 -12
  373. package/dist/observability/metrics.js +3 -4
  374. package/dist/observability/otel-exporter.js +2 -1
  375. package/dist/observability/principal-context.d.ts +14 -7
  376. package/dist/observability/principal-context.js +8 -3
  377. package/dist/observability/run-terminal.d.ts +7 -1
  378. package/dist/observability/run-terminal.js +5 -2
  379. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  380. package/dist/orchestration/hardened-vm-runner.js +11 -5
  381. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  382. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  383. package/dist/orchestration/hardened-vm-worker.js +2 -1
  384. package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
  385. package/dist/orchestration/workflow-completion-inbox.js +3 -2
  386. package/dist/org-delivery-gate.d.ts +5 -4
  387. package/dist/org-delivery-gate.js +7 -6
  388. package/dist/outbound-dispatcher.d.ts +1 -1
  389. package/dist/outbound-dispatcher.js +6 -12
  390. package/dist/owner-brands.d.ts +81 -0
  391. package/dist/owner-brands.js +42 -0
  392. package/dist/owner-faces.d.ts +531 -0
  393. package/dist/owner-faces.js +126 -0
  394. package/dist/parked-decide.d.ts +67 -5
  395. package/dist/parked-decide.js +127 -5
  396. package/dist/parked-revive-surface.d.ts +14 -4
  397. package/dist/parked-revive-surface.js +5 -4
  398. package/dist/peer-directory.d.ts +6 -8
  399. package/dist/peer-directory.js +3 -2
  400. package/dist/permission-rule-vocab.d.ts +53 -8
  401. package/dist/permission-rule-vocab.js +30 -2
  402. package/dist/plugins/adoption-log-sql.d.ts +0 -22
  403. package/dist/plugins/adoption-log-sql.js +5 -3
  404. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  405. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  406. package/dist/plugins/approval-ask-store-file.d.ts +18 -7
  407. package/dist/plugins/approval-ask-store-file.js +37 -14
  408. package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
  409. package/dist/plugins/approval-ask-store-memory.js +24 -10
  410. package/dist/plugins/approval-ask-store-sql.d.ts +39 -20
  411. package/dist/plugins/approval-ask-store-sql.js +41 -10
  412. package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
  413. package/dist/plugins/approval-exemption-skill-m46.js +25 -0
  414. package/dist/plugins/approval-exemption-store.d.ts +6 -1
  415. package/dist/plugins/approval-exemption-store.js +14 -0
  416. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  417. package/dist/plugins/approval-nonce-store.js +72 -23
  418. package/dist/plugins/blob-backend.d.ts +2 -0
  419. package/dist/plugins/blob-backend.js +9 -6
  420. package/dist/plugins/caching-session-store.d.ts +13 -1
  421. package/dist/plugins/caching-session-store.js +43 -4
  422. package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
  423. package/dist/plugins/checkpoint-index-columns.js +36 -1
  424. package/dist/plugins/checkpoint-store-face.d.ts +83 -10
  425. package/dist/plugins/checkpoint-store-face.js +18 -1
  426. package/dist/plugins/device-store-sql.js +1 -0
  427. package/dist/plugins/ensure-index.d.ts +13 -1
  428. package/dist/plugins/ensure-index.js +154 -21
  429. package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
  430. package/dist/plugins/ensure-schema-lock-policy.js +3 -2
  431. package/dist/plugins/file-run-store.d.ts +63 -23
  432. package/dist/plugins/file-run-store.js +138 -83
  433. package/dist/plugins/host-platform.d.ts +24 -3
  434. package/dist/plugins/host-platform.js +15 -1
  435. package/dist/plugins/image-bake-store-sql.js +2 -0
  436. package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
  437. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  438. package/dist/plugins/k8s-pod-reaper.js +0 -1
  439. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  440. package/dist/plugins/leader-run-store-sql.js +34 -4
  441. package/dist/plugins/local-checkpoint-store.d.ts +58 -23
  442. package/dist/plugins/local-checkpoint-store.js +195 -76
  443. package/dist/plugins/local-data-dir-modes-m39.js +2 -1
  444. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  445. package/dist/plugins/local-docker-capacity.js +194 -0
  446. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  447. package/dist/plugins/local-docker-reaper.js +102 -0
  448. package/dist/plugins/local-engine-high-water.d.ts +4 -2
  449. package/dist/plugins/local-engine-high-water.js +4 -1
  450. package/dist/plugins/local-session-store.d.ts +358 -125
  451. package/dist/plugins/local-session-store.js +824 -251
  452. package/dist/plugins/local-session-window.d.ts +3 -2
  453. package/dist/plugins/local-session-window.js +3 -2
  454. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  455. package/dist/plugins/local-task-attachment-store.d.ts +18 -1
  456. package/dist/plugins/local-task-attachment-store.js +22 -1
  457. package/dist/plugins/memory-embedder.js +9 -7
  458. package/dist/plugins/memory-engine-pg.d.ts +3 -2
  459. package/dist/plugins/memory-engine-pg.js +14 -5
  460. package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
  461. package/dist/plugins/memory-engine-sql-apply.js +6 -8
  462. package/dist/plugins/memory-engine-tidb.d.ts +4 -2
  463. package/dist/plugins/memory-engine-tidb.js +11 -2
  464. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  465. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  466. package/dist/plugins/memory-run-store.d.ts +39 -27
  467. package/dist/plugins/memory-run-store.js +72 -70
  468. package/dist/plugins/one-time-migration-marker.d.ts +10 -0
  469. package/dist/plugins/one-time-migration-marker.js +7 -0
  470. package/dist/plugins/one-time-migrations.d.ts +186 -45
  471. package/dist/plugins/one-time-migrations.js +442 -119
  472. package/dist/plugins/org-delivery-quota-store.js +2 -1
  473. package/dist/plugins/permission-rule-store-file.d.ts +3 -3
  474. package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
  475. package/dist/plugins/permission-rule-store-sql.js +6 -86
  476. package/dist/plugins/pg-pool.d.ts +1 -31
  477. package/dist/plugins/pg-pool.js +16 -7
  478. package/dist/plugins/remote-env-e2b.d.ts +7 -25
  479. package/dist/plugins/remote-env-e2b.js +34 -25
  480. package/dist/plugins/remote-env-host.d.ts +2 -9
  481. package/dist/plugins/remote-env-host.js +34 -22
  482. package/dist/plugins/remote-env-k8s.d.ts +40 -45
  483. package/dist/plugins/remote-env-k8s.js +107 -58
  484. package/dist/plugins/remote-env-local-docker.d.ts +148 -14
  485. package/dist/plugins/remote-env-local-docker.js +367 -72
  486. package/dist/plugins/remote-scratchpad.js +4 -0
  487. package/dist/plugins/retention-deployment.d.ts +49 -17
  488. package/dist/plugins/retention-deployment.js +39 -8
  489. package/dist/plugins/run-preview-m45.d.ts +11 -0
  490. package/dist/plugins/run-preview-m45.js +19 -0
  491. package/dist/plugins/run-store-sql.d.ts +56 -68
  492. package/dist/plugins/run-store-sql.js +127 -116
  493. package/dist/plugins/s3-answer.d.ts +2 -1
  494. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  495. package/dist/plugins/sandbox-reaper.js +2 -0
  496. package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
  497. package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
  498. package/dist/plugins/scheduler-support.d.ts +16 -1
  499. package/dist/plugins/scheduler-support.js +22 -2
  500. package/dist/plugins/schema-consistency.d.ts +42 -9
  501. package/dist/plugins/schema-consistency.js +212 -11
  502. package/dist/plugins/schema-drift-sentence.d.ts +4 -1
  503. package/dist/plugins/schema-drift-sentence.js +4 -4
  504. package/dist/plugins/schema-ensure-legs.d.ts +9 -0
  505. package/dist/plugins/schema-ensure-legs.js +1 -1
  506. package/dist/plugins/schema-indexes.js +3 -0
  507. package/dist/plugins/schema-live-columns.d.ts +14 -5
  508. package/dist/plugins/schema-live-columns.js +10 -10
  509. package/dist/plugins/send-user-file.js +2 -1
  510. package/dist/plugins/session-birth.d.ts +37 -0
  511. package/dist/plugins/session-birth.js +38 -0
  512. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  513. package/dist/plugins/session-epoch-anchor.js +33 -11
  514. package/dist/plugins/session-ext-table.d.ts +27 -3
  515. package/dist/plugins/session-ext-table.js +19 -6
  516. package/dist/plugins/session-fork.d.ts +15 -1
  517. package/dist/plugins/session-fork.js +3 -0
  518. package/dist/plugins/session-ownership.d.ts +1 -1
  519. package/dist/plugins/session-placement.d.ts +22 -16
  520. package/dist/plugins/session-placement.js +15 -12
  521. package/dist/plugins/session-row-sql.d.ts +12 -0
  522. package/dist/plugins/session-row-sql.js +3 -3
  523. package/dist/plugins/session-run-rollup.d.ts +29 -0
  524. package/dist/plugins/session-run-rollup.js +40 -0
  525. package/dist/plugins/session-store-sql.d.ts +38 -12
  526. package/dist/plugins/session-store-sql.js +130 -30
  527. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  528. package/dist/plugins/session-withdraw-sql.js +42 -0
  529. package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
  530. package/dist/plugins/shared-memory-store-sql.js +2 -1
  531. package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
  532. package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
  533. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  534. package/dist/plugins/sql-driver.d.ts +1 -1
  535. package/dist/plugins/sql-driver.js +2 -1
  536. package/dist/plugins/sql-errors.d.ts +32 -5
  537. package/dist/plugins/sql-errors.js +55 -7
  538. package/dist/plugins/sql-json-column.d.ts +8 -7
  539. package/dist/plugins/sql-json-column.js +10 -6
  540. package/dist/plugins/store-backend.d.ts +84 -15
  541. package/dist/plugins/store-backend.js +186 -55
  542. package/dist/plugins/store-contracts.d.ts +90 -30
  543. package/dist/plugins/store-contracts.js +22 -1
  544. package/dist/plugins/store-fault.d.ts +28 -2
  545. package/dist/plugins/store-fault.js +20 -2
  546. package/dist/plugins/task-attachment-store.d.ts +15 -3
  547. package/dist/plugins/task-attachment-store.js +22 -9
  548. package/dist/plugins/tidb-pool.js +23 -8
  549. package/dist/plugins/web-search.js +5 -3
  550. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  551. package/dist/plugins/workflow-run-store-sql.js +11 -5
  552. package/dist/principal-jwt.d.ts +4 -4
  553. package/dist/principal-jwt.js +20 -5
  554. package/dist/principal-shape.d.ts +41 -0
  555. package/dist/principal-shape.js +19 -0
  556. package/dist/question.d.ts +13 -23
  557. package/dist/question.js +21 -39
  558. package/dist/request-declaration-refusal.d.ts +35 -12
  559. package/dist/request-declaration-refusal.js +21 -9
  560. package/dist/request-form.d.ts +58 -0
  561. package/dist/request-form.js +72 -0
  562. package/dist/request-image-urls.d.ts +8 -2
  563. package/dist/request-image-urls.js +2 -1
  564. package/dist/request-images.d.ts +20 -0
  565. package/dist/request-images.js +59 -0
  566. package/dist/request-key-closure.d.ts +6 -7
  567. package/dist/request-key-closure.js +15 -2
  568. package/dist/resource-suspend.d.ts +7 -16
  569. package/dist/resource-suspend.js +1 -1
  570. package/dist/retired-name-host-notice.d.ts +21 -0
  571. package/dist/retired-name-host-notice.js +12 -0
  572. package/dist/rule-entry-list.d.ts +2 -2
  573. package/dist/rule-entry-list.js +3 -4
  574. package/dist/rule-issue-reading.d.ts +58 -0
  575. package/dist/rule-issue-reading.js +14 -0
  576. package/dist/rules-consent.d.ts +5 -3
  577. package/dist/rules-consent.js +1 -0
  578. package/dist/run-acceptance.d.ts +3 -1
  579. package/dist/run-acceptance.js +3 -0
  580. package/dist/run-local.d.ts +14 -6
  581. package/dist/run-local.js +92 -80
  582. package/dist/run-stale-default.d.ts +7 -0
  583. package/dist/run-stale-default.js +2 -0
  584. package/dist/runs.d.ts +26 -15
  585. package/dist/runs.js +39 -27
  586. package/dist/runtime-caps-resolver.d.ts +21 -6
  587. package/dist/runtime-caps-resolver.js +17 -4
  588. package/dist/runtime-governance.d.ts +2 -2
  589. package/dist/runtime-governance.js +5 -3
  590. package/dist/sealed-key-layout.d.ts +12 -5
  591. package/dist/sealed-key-layout.js +5 -0
  592. package/dist/sealed-key.d.ts +12 -2
  593. package/dist/sealed-key.js +115 -27
  594. package/dist/security.d.ts +128 -158
  595. package/dist/security.js +163 -59
  596. package/dist/sema-config-dir.d.ts +20 -0
  597. package/dist/sema-config-dir.js +25 -0
  598. package/dist/server-secret-env.d.ts +21 -5
  599. package/dist/server-secret-env.js +14 -4
  600. package/dist/session-children-retire.d.ts +7 -5
  601. package/dist/session-children-retire.js +7 -2
  602. package/dist/session-deletion.d.ts +88 -0
  603. package/dist/session-deletion.js +8 -0
  604. package/dist/session-erase.d.ts +145 -0
  605. package/dist/session-erase.js +115 -0
  606. package/dist/session-error-wire.d.ts +5 -5
  607. package/dist/session-error-wire.js +1 -1
  608. package/dist/session-incarnation.d.ts +52 -5
  609. package/dist/session-incarnation.js +19 -2
  610. package/dist/session-policy-wire.d.ts +6 -3
  611. package/dist/session-policy-wire.js +11 -1
  612. package/dist/session-resident-background.d.ts +0 -71
  613. package/dist/session-resident-background.js +4 -3
  614. package/dist/session-row.d.ts +2 -1
  615. package/dist/session-rules-seat.d.ts +12 -0
  616. package/dist/session-rules-seat.js +19 -0
  617. package/dist/session-titler.d.ts +7 -15
  618. package/dist/session-titler.js +1 -1
  619. package/dist/spec-fields.d.ts +57 -3
  620. package/dist/spec-fields.js +72 -51
  621. package/dist/store-posture.d.ts +136 -20
  622. package/dist/store-posture.js +188 -3
  623. package/dist/stored-request-hooks-m20.js +2 -2
  624. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  625. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  626. package/dist/stores-sql/checkpoint-store-sql.d.ts +33 -28
  627. package/dist/stores-sql/checkpoint-store-sql.js +75 -44
  628. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  629. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  630. package/dist/stores-sql/pg-session-storage.d.ts +7 -5
  631. package/dist/stores-sql/pg-session-storage.js +54 -46
  632. package/dist/stores-sql/retention-store-sql.d.ts +87 -19
  633. package/dist/stores-sql/retention-store-sql.js +92 -27
  634. package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
  635. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  636. package/dist/stores-sql/session-write-hooks.d.ts +12 -6
  637. package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
  638. package/dist/stores-sql/tidb-session-storage.js +13 -8
  639. package/dist/stores-sql/tidb-session-store.d.ts +36 -17
  640. package/dist/stores-sql/tidb-session-store.js +69 -39
  641. package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
  642. package/dist/stores-sql/windowed-session-storage.js +9 -0
  643. package/dist/submission-exit.d.ts +50 -0
  644. package/dist/submission-exit.js +108 -0
  645. package/dist/task-a2a.d.ts +1 -1
  646. package/dist/task-a2a.js +3 -3
  647. package/dist/task-cwd.d.ts +20 -0
  648. package/dist/task-cwd.js +8 -0
  649. package/dist/task-mcp.d.ts +1 -1
  650. package/dist/task-mcp.js +3 -3
  651. package/dist/task-settings.d.ts +14 -10
  652. package/dist/task-settings.js +18 -7
  653. package/dist/terminal.d.ts +25 -43
  654. package/dist/terminal.js +31 -11
  655. package/dist/tool-approval.d.ts +131 -129
  656. package/dist/tool-approval.js +189 -193
  657. package/dist/trace/core-keyset-guard.d.ts +13 -6
  658. package/dist/trace/core-vocab-wire.d.ts +95 -0
  659. package/dist/trace/core-vocab-wire.js +15 -0
  660. package/dist/trace/exit-seat.d.ts +30 -4
  661. package/dist/trace/exit-seat.js +40 -36
  662. package/dist/trace/extension-call-face.d.ts +3 -2
  663. package/dist/trace/extension-call-face.js +3 -1
  664. package/dist/trace/ledger-events.d.ts +4 -7
  665. package/dist/trace/ledger-sink.d.ts +1 -30
  666. package/dist/trace/ledger-sink.js +0 -11
  667. package/dist/trace/model-segment.d.ts +5 -5
  668. package/dist/trace/model-segment.js +5 -5
  669. package/dist/trace/project.d.ts +55 -42
  670. package/dist/trace/project.js +52 -19
  671. package/dist/trace/redact.d.ts +123 -27
  672. package/dist/trace/redact.js +880 -260
  673. package/dist/trace/self-minted-wire.d.ts +487 -19
  674. package/dist/trace/self-minted-wire.js +172 -23
  675. package/dist/trace/wire-projection-faces.d.ts +5 -6
  676. package/dist/trace/wire-projection-faces.js +2 -2
  677. package/dist/upstream-body.d.ts +23 -0
  678. package/dist/upstream-body.js +16 -0
  679. package/dist/url-refusal.d.ts +3 -3
  680. package/dist/url-refusal.js +11 -4
  681. package/dist/user-authored-text.d.ts +1 -1
  682. package/dist/user-input-ledger.d.ts +7 -8
  683. package/dist/user-input-ledger.js +1 -1
  684. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  685. package/dist/web-admin-client/apply-effective.js +13 -16
  686. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  687. package/dist/web-admin-client/apply-ledger.js +5 -2
  688. package/dist/web-admin-client/center-request.d.ts +2 -2
  689. package/dist/web-admin-client/center-request.js +15 -15
  690. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  691. package/dist/web-admin-client/effective-keys.js +1 -1
  692. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  693. package/dist/web-admin-client/entry-metadata.js +13 -0
  694. package/dist/web-admin-client/http-client.d.ts +1 -1
  695. package/dist/web-admin-client/http-client.js +23 -4
  696. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  697. package/dist/web-admin-client/mcp-revocation.js +2 -1
  698. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  699. package/dist/web-admin-client/read-warnings.js +1 -0
  700. package/dist/web-admin-client/restart-signal.js +8 -4
  701. package/dist/web-admin-client/skills-mcp.d.ts +2 -2
  702. package/dist/web-admin-client/types.d.ts +1 -2
  703. package/dist/workspace-space.d.ts +3 -2
  704. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  705. package/package.json +6 -3
  706. package/scripts/drain-check-local.mjs +118 -147
  707. package/scripts/drain-check.mysql.sql +22 -2
  708. package/scripts/drain-check.pg.sql +22 -2
  709. package/wire-changes/server@7.148.0.json +1517 -0
  710. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  711. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  712. package/dist/http/memory-layer-reply.d.ts +0 -30
  713. package/dist/http/memory-layer-reply.js +0 -24
  714. package/dist/lsp/e2b-bridge.d.ts +0 -57
  715. package/dist/lsp/e2b-bridge.js +0 -139
  716. package/dist/lsp/e2b-manager.d.ts +0 -93
  717. package/dist/lsp/e2b-manager.js +0 -178
  718. package/dist/lsp/lsp-frames.d.ts +0 -14
  719. package/dist/lsp/lsp-frames.js +0 -25
  720. package/dist/lsp/manager.d.ts +0 -129
  721. package/dist/lsp/manager.js +0 -127
  722. package/dist/lsp/types.d.ts +0 -12
  723. package/dist/lsp/types.js +0 -2
  724. package/dist/lsp/ws-transport.d.ts +0 -40
  725. package/dist/lsp/ws-transport.js +0 -210
package/dist/run-local.js CHANGED
@@ -1,14 +1,13 @@
1
1
  #!/usr/bin/env node
2
- import { DEFAULT_AT_MENTION, DEFAULT_MODEL_REF, resolveTaskModel } from "./model-select.js";
3
- import { defaultModelRefusal, modelUnavailableMessage } from "./model-entry-refusal.js";
2
+ import { DEFAULT_MODEL_REF, pickUserModel } from "./model-select.js";
3
+ import { defaultModelRefusal, modelNotAllowedMessage, modelUnavailableMessage } from "./model-entry-refusal.js";
4
4
  import { servedModelTableLeg } from "./model-select.js";
5
- import { createDurableAbsenceSeat } from "./observability/corrupt-read-seat.js";
6
5
  import { outwardPlane } from "./terminal.js";
7
6
  import { join } from "node:path";
8
7
  import { realpathSync } from "node:fs";
9
8
  import { createInterface } from "node:readline/promises";
10
9
  import { fileURLToPath } from "node:url";
11
- import { BIDI_CONTROL_CHARS, Runner, uuidv7, FileStorageBackend, NodeExecutionEnv, TtlSessionStore, CenterPromptSource, FilePromptArtifactStore, FilePromptSourceStateStore, MemoryPromptArtifactStore, MemoryPromptSourceStateStore, defaultTaskRegistry } from "@sema-agent/core";
10
+ import { BIDI_CONTROL_CHARS, Runner, uuidv7, NodeExecutionEnv, TtlSessionStore, CenterPromptSource, FilePromptArtifactStore, FilePromptSourceStateStore, MemoryPromptArtifactStore, MemoryPromptSourceStateStore, defaultTaskRegistry } from "@sema-agent/core";
12
11
  import { readAskClassPair } from "./approval-card.js";
13
12
  import { singleUserAutoAcceptBaselineApplies } from "./approval.js";
14
13
  import { withUnattendedLeg } from "./unattended-permission-mode.js";
@@ -20,8 +19,8 @@ import { ForkRoutingSessionStore } from "./plugins/fork-routing-session-store.js
20
19
  import { taskWallClockSec } from "./task-workflow.js";
21
20
  import { applyCenterArtifact, centerSourceOnError } from "./capabilities/center-prompts.js";
22
21
  import { buildUnpricedCeilingNotice, isRosterGateArmed, loadConfig, logConfigDiagnostics, parseConfigProvider, parseNumOrFailNonNegative } from "./config.js";
23
- import { buildStoreOpenRefusalTail } from "./plugins/store-open-refusal.js";
24
- import { acquireLocalBackendWithWait } from "./plugins/store-lock-wait.js";
22
+ import { openLocalBackend } from "./plugins/store-backend.js";
23
+ import { runAndLogOneTimeMigrations } from "./plugins/one-time-migrations.js";
25
24
  import { configLocalRoot, createConfigProvider } from "./config-provider.js";
26
25
  import { CONFIG_DOMAIN_INVALID_NOTE, buildCandidateRejectedFields, buildCandidateRejectionNotes, judgeConfigCandidate } from "./web-admin-client/candidate-gate.js";
27
26
  import { buildUnreadConfigFileFields, buildUnreadConfigKeyFields } from "./web-admin-client/read-warnings.js";
@@ -30,6 +29,7 @@ import { judgeConsolidationValve } from "./boot/memory-consolidation.js";
30
29
  import { logConfigDirMigration, migrateLocalConfigDirectory } from "./config-d-migration.js";
31
30
  import { logEnvModelsMigration, runEnvModelsMigration } from "./config-root-migration.js";
32
31
  import { assertLocalConfigDirTrusted, ConfigDirUntrustedError } from "./config-dir-trust.js";
32
+ import { ConfigPullError, asConfigPullError, configPullFailureNote } from "./config-pull-failure.js";
33
33
  import { applyEffective, applyCenterReadFace, applySkillsManifest, resolveMcpServers, mcpForScenario, resolveA2aPeers, a2aForScenario } from "./web-admin-client/facade.js";
34
34
  import { hostExecutionEnvFactory } from "./plugins/remote-env-host.js";
35
35
  import { buildLaneHomeClaim, executionLaneOf } from "./execution-lane-caps.js";
@@ -43,7 +43,7 @@ import { createTaskListLane } from "./boot/task-list-lane.js";
43
43
  import { pickHandsRunner, withoutHands } from "./capabilities/hands-lane.js";
44
44
  import { HttpError, sessionIdShapeIssue } from "./security.js";
45
45
  import { createMemoryEngineIncidentSink } from "./memory-incident-sink.js";
46
- import { fileMemoryEngineRoot, memoryEngineBackendFor, memorySpecForRequest } from "./memory-scope.js";
46
+ import { announceMemoryLedgerForm, fileMemoryEngineRoot, memoryEngineBackendFor, memorySpecForRequest } from "./memory-scope.js";
47
47
  import { createMemoryScopeStores } from "./memory-scope-stores.js";
48
48
  import { createMemoryProjectLayers } from "./memory-project-layer.js";
49
49
  import { assertProjectLayerOwnable } from "./project-identity.js";
@@ -58,14 +58,15 @@ import { assertRetentionLaneWirable } from "./boot/retention-lane.js";
58
58
  import { createOrgMemoryAdmissionWiring } from "./boot/org-memory.js";
59
59
  import { assembleDeploymentMods } from "./boot/deployment-mods.js";
60
60
  import { createKeyResolver } from "./key-resolver.js";
61
- import { createLogger } from "./observability/logger.js";
61
+ import { createLogger, writeCliResult, writeLogText, ttyPromptOutput } from "./observability/logger.js";
62
62
  import { fatalExit } from "./boot/fatal-exit.js";
63
63
  import { installProcessExitBoundary } from "./boot/exit-boundary.js";
64
64
  import { createMetrics } from "./observability/metrics.js";
65
65
  import { installSecretEnvScrubRecorder } from "./observability/secret-env-scrub.js";
66
- import { createHostLspManager } from "./host-lsp-manager.js";
66
+ import { createLspManager } from "./host-lsp-manager.js";
67
67
  import { installOutboundDispatcher } from "./outbound-dispatcher.js";
68
- import { provisionSemaConfigDir } from "./sema-config-dir.js";
68
+ import { announceConfigRootEnclosingWorkspace, provisionSemaConfigDir } from "./sema-config-dir.js";
69
+ import { launchWorkspaceOf } from "./task-cwd.js";
69
70
  import { bindOwnCredentialsConfig, declareServerWithheldEnv } from "./server-secret-env.js";
70
71
  export function parseArgs(argv) {
71
72
  let objective;
@@ -207,12 +208,12 @@ export function createLocalApprover(io) {
207
208
  };
208
209
  return async (req, signal) => {
209
210
  if (!io.isTty) {
210
- io.printErr(`denied "${terminalSafeText(req.toolName)}" (${terminalSafeText(req.message)}) — this run-local invocation has no TTY, so there is nobody to ask. ${buildNoTtyRemedySentence(req)}`);
211
+ await io.printErr(`denied "${terminalSafeText(req.toolName)}" (${terminalSafeText(req.message)}) — this run-local invocation has no TTY, so there is nobody to ask. ${buildNoTtyRemedySentence(req)}`);
211
212
  return refuseWithoutPerson(NO_TTY_REFUSAL_REASON);
212
213
  }
213
214
  const argsShown = argsDisplayOf(req.args);
214
215
  if (!argsShown.ok) {
215
- io.printErr(`denied "${terminalSafeText(req.toolName)}" (${terminalSafeText(req.message)}) — its arguments cannot be displayed ` +
216
+ await io.printErr(`denied "${terminalSafeText(req.toolName)}" (${terminalSafeText(req.message)}) — its arguments cannot be displayed ` +
216
217
  `(${terminalSafeText(argsShown.reason)}), so there is nothing a person could review; refusing instead of asking.`);
217
218
  return refuseWithoutPerson(UNDISPLAYABLE_ARGS_REFUSAL_REASON);
218
219
  }
@@ -269,7 +270,7 @@ function inputAlreadyEnded(input) {
269
270
  const state = input;
270
271
  return state.readableEnded === true || state.destroyed === true;
271
272
  }
272
- export async function promptYesNoOnTty(prompt, signal, streams = { input: process.stdin, output: process.stderr }) {
273
+ export async function promptYesNoOnTty(prompt, signal, streams = { input: process.stdin, output: ttyPromptOutput() }) {
273
274
  if (signal?.aborted || inputAlreadyEnded(streams.input))
274
275
  return false;
275
276
  const rl = createInterface({ input: streams.input, output: streams.output });
@@ -321,22 +322,22 @@ export const RUN_LOCAL_CONFIG_SOURCE_REFUSAL = "CONFIG_PROVIDER=remote: run-loca
321
322
  "(center credential renewal, sealed model keys and the roster gate are assembled by the HTTP service). Unset CONFIG_PROVIDER or set " +
322
323
  "CONFIG_PROVIDER=local for this command, or run the HTTP service to use the center.";
323
324
  export async function runLocal(argv, deps = {}) {
324
- const print = deps.print ?? ((l) => console.log(l));
325
- const printErr = deps.printErr ?? ((l) => console.error(l));
325
+ const print = deps.print ?? writeCliResult;
326
+ const printErr = deps.printErr ?? ((l) => writeLogText("stderr", l));
326
327
  let args;
327
328
  try {
328
329
  args = parseArgs(argv);
329
330
  }
330
331
  catch (err) {
331
332
  if (err instanceof UsageError) {
332
- printErr(err.message);
333
+ await printErr(err.message);
333
334
  return 2;
334
335
  }
335
336
  throw err;
336
337
  }
337
338
  const configWord = parseConfigProvider();
338
339
  if (configWord === "remote") {
339
- printErr(RUN_LOCAL_CONFIG_SOURCE_REFUSAL);
340
+ await printErr(RUN_LOCAL_CONFIG_SOURCE_REFUSAL);
340
341
  return 2;
341
342
  }
342
343
  if (configWord === undefined)
@@ -362,7 +363,7 @@ export async function runLocal(argv, deps = {}) {
362
363
  await assertLocalConfigDirTrusted({ root, declaredOwnerUid: loaded.configLocalOwnerUid });
363
364
  }
364
365
  catch (err) {
365
- printErr(err instanceof Error ? err.message : String(err));
366
+ await printErr(err instanceof Error ? err.message : String(err));
366
367
  return 2;
367
368
  }
368
369
  const envModelsMigration = { root, env: process.env, envTableIsPlaceholder: isRosterGateArmed(loaded.webAdmin) };
@@ -373,7 +374,7 @@ export async function runLocal(argv, deps = {}) {
373
374
  config = await composeExecutionLane(loaded, { configSource: "local", localRoot: root, logger, entry: RUN_LOCAL_LANE_ENTRY });
374
375
  }
375
376
  catch (err) {
376
- printErr(err instanceof Error ? err.message : String(err));
377
+ await printErr(err instanceof Error ? err.message : String(err));
377
378
  return 2;
378
379
  }
379
380
  const configProvider = createConfigProvider(providerInput);
@@ -382,9 +383,10 @@ export async function runLocal(argv, deps = {}) {
382
383
  let effective;
383
384
  let candidatePrompts;
384
385
  let candidateRejectionNotes;
385
- let applying = false;
386
386
  try {
387
- const r = await configProvider.fetchEffective(undefined);
387
+ const r = await configProvider.fetchEffective(undefined).catch((err) => {
388
+ throw asConfigPullError(err);
389
+ });
388
390
  if (r) {
389
391
  const verdict = judgeConfigCandidate(r);
390
392
  if (verdict.verdict === "rejected") {
@@ -400,7 +402,6 @@ export async function runLocal(argv, deps = {}) {
400
402
  logger.warn("config_unread_key", buildUnreadConfigKeyFields(k, configProvider.kind === "local" ? root : undefined));
401
403
  for (const d of r.droppedEntries ?? [])
402
404
  logger.warn("config_entry_dropped", { domain: d.domain, entry: d.entry, reasonCode: d.reasonCode, error: d.error, version: r.effective.version, phase: "boot", note: "this one entry failed its domain schema and was dropped on its own — the rest of the candidate applies (per-entry tolerance); fix the named entry to bring it back" });
403
- applying = true;
404
405
  applyEffective(config, r.effective, logger, { leg: "boot", catalogSource: r.catalogSource });
405
406
  effective = r.effective;
406
407
  candidatePrompts = verdict.prompts;
@@ -415,13 +416,13 @@ export async function runLocal(argv, deps = {}) {
415
416
  }
416
417
  catch (err) {
417
418
  if (err instanceof ConfigDirUntrustedError) {
418
- printErr(err.message);
419
+ await printErr(err.message);
419
420
  return 2;
420
421
  }
421
- if (applying)
422
- logger.warn("config_apply_refused", { source: configProvider.kind, err: String(err), note: "the candidate failed to apply at boot — running on env (run-local has no LKG); none of the candidate's domains is adopted; this is not a reachability failure" });
422
+ if (err instanceof ConfigPullError)
423
+ logger.warn("config_source_unreachable_using_env", { source: configProvider.kind, cause: err.pullCause, err: String(err), note: configPullFailureNote(err.pullCause) });
423
424
  else
424
- logger.warn("config_source_unreachable_using_env", { source: configProvider.kind, err: String(err) });
425
+ logger.warn("config_apply_refused", { source: configProvider.kind, err: String(err), note: "the candidate failed to apply at boot — running on env (run-local has no LKG); none of the candidate's domains is adopted; this is not a reachability failure" });
425
426
  }
426
427
  const noDefaultModel = defaultModelRefusal({ models: config.models, modelRefusals: config.modelRefusals, candidateRejectionNotes }, servedModelTableLeg(config));
427
428
  if (noDefaultModel !== undefined)
@@ -436,8 +437,8 @@ export async function runLocal(argv, deps = {}) {
436
437
  assertGuardPatternsUsable(config);
437
438
  }
438
439
  catch (e) {
439
- printErr(e instanceof Error ? e.message : String(e));
440
- printErr(`(local config root: ${root} — fix it in ${join(root, ".env")} or your shell env; \`SENSITIVE_WRITE_PATTERNS=off\` disables the guard set)`);
440
+ await printErr(e instanceof Error ? e.message : String(e));
441
+ await printErr(`(local config root: ${root} — fix it in ${join(root, ".env")} or your shell env; \`SENSITIVE_WRITE_PATTERNS=off\` disables the guard set)`);
441
442
  return 2;
442
443
  }
443
444
  const ungatedCompensation = buildOnlySensitiveBaselineWarning(config, {
@@ -452,34 +453,39 @@ export async function runLocal(argv, deps = {}) {
452
453
  if (!deps.brain) {
453
454
  const missing = missingGatewayRequirements(config);
454
455
  if (missing.length > 0) {
455
- printErr("cannot run: you still need to set:");
456
+ await printErr("cannot run: you still need to set:");
456
457
  for (const m of missing)
457
- printErr(` - ${m}`);
458
- printErr(`(local config root: ${root} — put them in ${join(root, ".env")} or your shell env)`);
458
+ await printErr(` - ${m}`);
459
+ await printErr(`(local config root: ${root} — put them in ${join(root, ".env")} or your shell env)`);
459
460
  return 2;
460
461
  }
461
462
  }
462
463
  const brain = deps.brain ?? createBrain(config, deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {});
463
464
  const pricing = buildPricing(config.models);
464
- let fileBackend;
465
+ let backend;
466
+ try {
467
+ backend = openLocalBackend({ ...config, localDataRoot: root }, { lane: "run-local", onWarn: (msg, fields) => logger.warn(msg, fields), onError: (msg, fields) => logger.error(msg, fields) });
468
+ }
469
+ catch (e) {
470
+ await printErr(e instanceof Error ? e.message : String(e));
471
+ return 2;
472
+ }
465
473
  try {
466
- fileBackend = acquireLocalBackendWithWait(() => new FileStorageBackend({
467
- root,
468
- ...(config.fileHistory !== undefined ? { fileHistory: config.fileHistory } : {}),
469
- onCorruptRead: createDurableAbsenceSeat(logger.warn.bind(logger), root, "file-snapshot = a snapshot or scope read as missing"),
470
- }), config.storeLockWaitMs, (fields) => logger.warn("store_dir_lock_wait", { ...fields }));
474
+ await backend.ensureSchema();
475
+ await runAndLogOneTimeMigrations(logger, backend);
471
476
  }
472
477
  catch (e) {
473
- printErr(`cannot open local data dir ${root}: ${e instanceof Error ? e.message : String(e)}`);
474
- const tail = buildStoreOpenRefusalTail(e, "run-local");
475
- if (tail !== undefined)
476
- printErr(tail);
478
+ await printErr(e instanceof Error ? e.message : String(e));
479
+ await backend.close();
477
480
  return 2;
478
481
  }
479
- const sessionStore = fileBackend.sessionStore;
482
+ const sessionStore = backend.session();
483
+ const engineStores = backend.engineFileStores();
480
484
  const keyResolver = createKeyResolver(config.modelApiKeyEnv, process.env, config.modelApiKeys);
481
485
  const hostRx = config.remoteExec.provider === "host" ? config.remoteExec : undefined;
482
- const workspaceDir = args.workspace ?? hostRx?.workspaceBase ?? process.cwd();
486
+ const launchWorkspace = launchWorkspaceOf(config, args.workspace);
487
+ const workspaceDir = launchWorkspace.dir;
488
+ announceConfigRootEnclosingWorkspace(config, logger, launchWorkspace);
483
489
  await settleHostLaneShell(config, logger);
484
490
  warnReadDenyFloorUnkept(config, logger);
485
491
  const homeDirSeat = buildLaneHomeClaim(config);
@@ -491,8 +497,9 @@ export async function runLocal(argv, deps = {}) {
491
497
  ...(hostRx.commandTimeoutMs != null ? { commandTimeoutMs: hostRx.commandTimeoutMs } : {}),
492
498
  })
493
499
  : undefined;
494
- const lspManager = hostRx && config.lspHostEnabled && config.requirePrincipal !== true ? createHostLspManager(config, (event, fields) => logger.info(event, fields)) : undefined;
500
+ const lspManager = createLspManager(config, (event, fields) => logger.info(event, fields));
495
501
  const engineDataRoot = fileMemoryEngineRoot(config, root);
502
+ await announceMemoryLedgerForm(config, root, logger);
496
503
  const fileEngine = memoryEngineBackendFor(config, root, memoryEngineIncident);
497
504
  const memoryEngine = fileEngine !== undefined
498
505
  ? createMemoryScopeStores({ backend: fileEngine.backend, root: engineDataRoot, onIncident: memoryEngineIncident })
@@ -501,9 +508,9 @@ export async function runLocal(argv, deps = {}) {
501
508
  judgeConsolidationValve({ config, memoryEngine });
502
509
  }
503
510
  catch (err) {
504
- printErr(err instanceof Error ? err.message : String(err));
511
+ await printErr(err instanceof Error ? err.message : String(err));
505
512
  void lspManager?.dispose();
506
- await fileBackend.dispose();
513
+ await backend.close();
507
514
  return 2;
508
515
  }
509
516
  let memorySync;
@@ -565,9 +572,9 @@ export async function runLocal(argv, deps = {}) {
565
572
  orgMemoryAdmission = createOrgMemoryAdmissionWiring({ config, logger, metrics });
566
573
  }
567
574
  catch (e) {
568
- printErr(`MEMORY_ORG_DIRECTORY_JSON is invalid: ${e instanceof Error ? e.message : String(e)}`);
569
- printErr(`(local config root: ${root} — fix it in ${join(root, ".env")} or your shell env, or unset it)`);
570
- await fileBackend.dispose();
575
+ await printErr(`MEMORY_ORG_DIRECTORY_JSON is invalid: ${e instanceof Error ? e.message : String(e)}`);
576
+ await printErr(`(local config root: ${root} — fix it in ${join(root, ".env")} or your shell env, or unset it)`);
577
+ await backend.close();
571
578
  return 2;
572
579
  }
573
580
  assertRetentionLaneWirable({
@@ -575,8 +582,8 @@ export async function runLocal(argv, deps = {}) {
575
582
  executor: undefined,
576
583
  stores: [
577
584
  { name: "sessionStore", store: sessionStore },
578
- { name: "checkpointStore", store: fileBackend.checkpointStore },
579
- { name: "toolResultStore", store: fileBackend.toolResultStore },
585
+ { name: "checkpointStore", store: engineStores.checkpointStore },
586
+ { name: "toolResultStore", store: backend.toolResult() },
580
587
  ],
581
588
  locked: (config.lockedConfigKeys ?? []).includes("retentionPolicy"),
582
589
  });
@@ -585,8 +592,8 @@ export async function runLocal(argv, deps = {}) {
585
592
  logger,
586
593
  retentionStores: [
587
594
  { name: "sessionStore", store: sessionStore },
588
- { name: "checkpointStore", store: fileBackend.checkpointStore },
589
- { name: "toolResultStore", store: fileBackend.toolResultStore },
595
+ { name: "checkpointStore", store: engineStores.checkpointStore },
596
+ { name: "toolResultStore", store: backend.toolResult() },
590
597
  ],
591
598
  retentionExecutor: null,
592
599
  });
@@ -598,21 +605,22 @@ export async function runLocal(argv, deps = {}) {
598
605
  engineDataRoot,
599
606
  governanceSeams,
600
607
  logger,
601
- hands: { commitCoAuthor: "Sema <noreply@vivi-ai.com>" },
608
+ commitCoAuthor: "Sema <noreply@vivi-ai.com>",
602
609
  brain,
603
610
  pricing,
604
611
  tracer: createTracer(metrics),
605
612
  promptSource,
606
613
  executionEnvFactory,
607
614
  lspManager,
608
- backgroundAgentStore: fileBackend.backgroundAgentStore,
609
- mailboxStore: fileBackend.mailboxStore,
610
- rosterStore: fileBackend.rosterStore,
615
+ backgroundAgentStore: engineStores.backgroundAgentStore,
616
+ mailboxStore: engineStores.mailboxStore,
617
+ rosterStore: engineStores.rosterStore,
611
618
  deploymentMods,
612
- toolResultStore: fileBackend.toolResultStore,
619
+ toolResultStore: backend.toolResult(),
620
+ fileHistoryStore: undefined,
613
621
  checkpointStore: undefined,
614
- sessionPolicyStore: fileBackend.sessionPolicyStore,
615
- usageWindowStore: config.usageWindows ? fileBackend.usageWindowStore : undefined,
622
+ sessionPolicyStore: backend.sessionPolicy(),
623
+ usageWindowStore: config.usageWindows ? backend.fileUsageWindowStore() : undefined,
616
624
  orgMemoryAdmission,
617
625
  sharedMemoryStores: undefined,
618
626
  mcpRevocations: undefined,
@@ -644,7 +652,7 @@ export async function runLocal(argv, deps = {}) {
644
652
  const scenarioDeps = {
645
653
  runner, subRunner, model: DEFAULT_MODEL_REF, skills, repoClient, logger,
646
654
  ...(webSearch ? { webSearch } : {}),
647
- backgroundAgentStore: fileBackend.backgroundAgentStore,
655
+ backgroundAgentStore: engineStores.backgroundAgentStore,
648
656
  taskListStoreFor: taskListLane.storeFor,
649
657
  };
650
658
  const scenarios = buildScenarios(scenarioDeps);
@@ -661,21 +669,25 @@ export async function runLocal(argv, deps = {}) {
661
669
  }
662
670
  catch (err) {
663
671
  if (err instanceof HttpError) {
664
- printErr(`cannot run scenario "${scenarioName}": ${err.message}`);
672
+ await printErr(`cannot run scenario "${scenarioName}": ${err.message}`);
665
673
  if (scenarioName === "scan")
666
- printErr("(the `scan` scenario needs a git API base URL and a repo — run-local cannot supply a repo; use the default scenario)");
674
+ await printErr("(the `scan` scenario needs a git API base URL and a repo — run-local cannot supply a repo; use the default scenario)");
667
675
  void lspManager?.dispose();
668
- await fileBackend.dispose();
676
+ await backend.close();
669
677
  return 2;
670
678
  }
671
679
  throw err;
672
680
  }
673
- const mention = resolveTaskModel(undefined, args.objective, config.models, DEFAULT_AT_MENTION, config.modelRefusals);
674
- if (mention.unavailable !== undefined) {
675
- const { requested, name, refusal } = mention.unavailable;
676
- printErr(`cannot run: ${modelUnavailableMessage("@-mention", requested, name, refusal)}`);
681
+ const { picked: mention } = pickUserModel(config, undefined, args.objective);
682
+ const mentionRefusal = mention.unavailable !== undefined
683
+ ? modelUnavailableMessage("@-mention", mention.unavailable.requested, mention.unavailable.name, mention.unavailable.refusal)
684
+ : mention.notAllowed !== undefined
685
+ ? modelNotAllowedMessage("@-mention", mention.notAllowed.requested, mention.notAllowed.resolved)
686
+ : undefined;
687
+ if (mentionRefusal !== undefined) {
688
+ await printErr(`cannot run: ${mentionRefusal}`);
677
689
  void lspManager?.dispose();
678
- await fileBackend.dispose();
690
+ await backend.close();
679
691
  return 2;
680
692
  }
681
693
  const scope = args.user ?? "local";
@@ -684,9 +696,9 @@ export async function runLocal(argv, deps = {}) {
684
696
  assertProjectLayerOwnable(scope, "--user");
685
697
  }
686
698
  catch (err) {
687
- printErr(err instanceof Error ? err.message : String(err));
699
+ await printErr(err instanceof Error ? err.message : String(err));
688
700
  void lspManager?.dispose();
689
- await fileBackend.dispose();
701
+ await backend.close();
690
702
  return 2;
691
703
  }
692
704
  }
@@ -732,7 +744,7 @@ export async function runLocal(argv, deps = {}) {
732
744
  const deadline = Date.now() + 5_000;
733
745
  try {
734
746
  for (;;) {
735
- const running = (await fileBackend.backgroundAgentStore.listByScope(scope, { status: "running" })).length;
747
+ const running = (await engineStores.backgroundAgentStore.listByScope(scope, { status: "running" })).length;
736
748
  if (running === 0)
737
749
  return;
738
750
  if (Date.now() >= deadline) {
@@ -753,29 +765,29 @@ export async function runLocal(argv, deps = {}) {
753
765
  result = await taskRunner.runTask(spec);
754
766
  }
755
767
  catch (err) {
756
- printErr(`task crashed: ${err instanceof Error ? err.message : String(err)}`);
768
+ await printErr(`task crashed: ${err instanceof Error ? err.message : String(err)}`);
757
769
  await settleSessionBackground();
758
770
  runner.sessions.dispose();
759
771
  subRunner.sessions.dispose();
760
772
  void lspManager?.dispose();
761
- await fileBackend.dispose();
773
+ await backend.close();
762
774
  return 1;
763
775
  }
764
776
  const unfinishedStop = unfinishedStopOf(result, refusedWithoutPerson);
765
777
  if (args.json) {
766
- print(JSON.stringify(result, null, 2));
778
+ await print(JSON.stringify(result, null, 2));
767
779
  }
768
780
  else if (result.terminal.kind === "completed") {
769
- print(result.result);
781
+ await print(result.result);
770
782
  if (unfinishedStop !== undefined)
771
- printErr(buildUnfinishedStopFooter(unfinishedStop, sessionId));
783
+ await printErr(buildUnfinishedStopFooter(unfinishedStop, sessionId));
772
784
  }
773
785
  else {
774
786
  const plane = outwardPlane(result.terminal);
775
787
  const salvage = result.result || result.salvagedOutput || plane.blockedReason || "";
776
788
  if (salvage)
777
- print(salvage);
778
- printErr(`task ${plane.status}${plane.errorCode ? ` (${plane.errorCode})` : ""}${plane.errorMessage ? `: ${plane.errorMessage}` : ""}`);
789
+ await print(salvage);
790
+ await printErr(`task ${plane.status}${plane.errorCode ? ` (${plane.errorCode})` : ""}${plane.errorMessage ? `: ${plane.errorMessage}` : ""}`);
779
791
  }
780
792
  if (result.terminal.kind !== "completed" || unfinishedStop !== undefined)
781
793
  exitCode = 1;
@@ -785,7 +797,7 @@ export async function runLocal(argv, deps = {}) {
785
797
  runner.sessions.dispose();
786
798
  subRunner.sessions.dispose();
787
799
  void lspManager?.dispose();
788
- await fileBackend.dispose();
800
+ await backend.close();
789
801
  return exitCode;
790
802
  }
791
803
  const RUN_LOCAL_SIGNAL_EXIT_CODE = { SIGINT: 130, SIGTERM: 143 };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `REAP_RUN_STALE_SEC` 的缺省值(秒)—— 唯一字面量。读者两处:配置装配(`config.ts`,env 缺席时)与 run 店的缺省判活窗
3
+ * (`plugins/store-contracts.ts` 的 {@link RUN_STALL_DEFAULT_WIRING}:不经后端装配、直接构造的店用它;生产装配一律递活配置的 getter)。
4
+ * 纯叶:零 import(配置层不得值引 plugins 层,所以它不住在店的契约文件里)。
5
+ */
6
+ export declare const RUN_STALE_SEC_DEFAULT = 120;
7
+ //# sourceMappingURL=run-stale-default.d.ts.map
@@ -0,0 +1,2 @@
1
+ export const RUN_STALE_SEC_DEFAULT = 120;
2
+ //# sourceMappingURL=run-stale-default.js.map
package/dist/runs.d.ts CHANGED
@@ -94,7 +94,7 @@ export declare function taskHandleStop(registry: typeof defaultTaskRegistry, han
94
94
  * 已 fire 的信号永不回调,那样一次真实的人为断连会被吞成「无归因」(子代 settle 时记成 system)。
95
95
  * 语义上这两种时序是同一件事:本请求赢下了这条 session,而这条 session 的连接是被人断掉的。
96
96
  */
97
- export declare function markChildrenStoppedByUserOnAbort(signal: AbortSignal, taskId: string, principal: string | null | undefined): void;
97
+ export declare function markChildrenStoppedByUserOnAbort(signal: AbortSignal, taskId: string, subject: string | null | undefined): void;
98
98
  export declare function resumeAtHttpStatus(result: {
99
99
  terminal: TerminalCause;
100
100
  }): number | undefined;
@@ -114,7 +114,7 @@ export declare function resumeAtHttpStatus(result: {
114
114
  export declare function syncRefusalHttpStatus(result: Pick<TaskResult, "terminal" | "stats">): number | undefined;
115
115
  /**
116
116
  * 同步腿零工作拒体的机读事实(交 `refusalBody` 的 `facts`)—— 唯一一处。入参是**出口封口 + 脱敏后**的终局(调用方递 `redactTerminalResult(sealResultForExit(result)).terminal`,
117
- * 与 run 记录读面 / 流式 `done.result` 上的 `terminal` 同一只来源),本函数只按码取它的 `detail.detail`,不另读、不另脱。码不在登记表里、终局不是 `failed`、
117
+ * 与 run 记录读面 / 流式 `done.result` 上的 `terminal` 同一只来源),本函数只按码取它的 `detail.detail` 经闭集映射({@link attachmentCauseFacts}),不另读、不另脱。码不在登记表里、终局不是 `failed`、
118
118
  * 引擎没给 `coded` 因由 ⇒ `{}`(缺席不造键)。
119
119
  * 两张工具名清单的码({@link ENGINE_TOOL_LIST_REFUSAL_CODES})是另一臂:体事实不取引擎的因由,取 `admissionReadings`(受理口对放行侧选择器清单的读数,`PreparedTaskSubmission.warnings`)
120
120
  * 去掉 `not_in_roster`、且 `code` 与终局的码相同(同一族清单)的那些 —— 与受理口 400 同一只机读位形;没有读数 ⇒ `{}`。
@@ -132,8 +132,8 @@ export declare function releaseKeyIfZeroWorkRefusal(runStore: {
132
132
  releaseIdemKey(taskId: string): Promise<void>;
133
133
  }, taskId: string, result: Pick<TaskResult, "terminal" | "stats">): Promise<void>;
134
134
  /**
135
- * E18 resume-at — per-turn anchor capture, shared by runInBackground AND the resume-leg driveResume so the (single,
136
- * tricky) capture rule can't drift between the two stream-drain loops.
135
+ * E18 resume-at — per-turn anchor capture, shared by runInBackground, the resume-leg driveResume AND the sync `POST /v1/tasks`
136
+ * leg's plain form so the (single, tricky) capture rule can't drift between the stream-drain loops.
137
137
  *
138
138
  * A "turn" in core = ONE assistant message + its tool batch. resume-at is valid ONLY at a SETTLED rewindable boundary
139
139
  * — core's prepare-task accepts "user messages or finished assistant-text turns" and REJECTS an assistant message that
@@ -151,7 +151,7 @@ export declare function releaseKeyIfZeroWorkRefusal(runStore: {
151
151
  * observable instead of a silent feature outage.
152
152
  */
153
153
  /**
154
- * 「这一次用户消息提交是不是这个 run 的**开场提示**」的唯一读法 —— 三处用户回退锚(后台腿与续跑腿的 {@link TurnAnchorCapture}、`/v1/tasks/stream`
154
+ * 「这一次用户消息提交是不是这个 run 的**开场提示**」的唯一读法 —— 四处用户回退锚(后台腿 / 续跑腿 / 同步腿 `POST /v1/tasks` 的 {@link TurnAnchorCapture}、`/v1/tasks/stream`
155
155
  * 腿的 `userMsgEntryId`)同调这一只;调用点零各自判、零按正文判,且都是「最后一次交出的赢」。
156
156
  *
157
157
  * **回退锚 = 该轮开场提示,一个 run 一个(开场窗 + 闩)**:run 一开始就开着一个**开场窗**,收集第一次模型输出之前的 user 提交;窗关上之后(闩上),同 run 的 user-role 提交 ——
@@ -189,13 +189,13 @@ export declare function releaseKeyIfZeroWorkRefusal(runStore: {
189
189
  export declare function createPromptCommitReader(): (ev: {
190
190
  readonly type: string;
191
191
  }) => string | undefined;
192
- /** 回退锚写在哪条腿上(探针行的 `leg=`):流式腿 `POST /v1/tasks/stream`、后台腿 `POST /v1/runs`、续跑腿。 */
193
- export type ResumeAnchorLeg = "stream" | "bg" | "resume";
192
+ /** 回退锚写在哪条腿上(探针行的 `leg=`):流式腿 `POST /v1/tasks/stream`、同步腿 `POST /v1/tasks`(非流式)、后台腿 `POST /v1/runs`、续跑腿。 */
193
+ export type ResumeAnchorLeg = "stream" | "sync" | "bg" | "resume";
194
194
  /**
195
- * 回退锚的**唯一**写法(三条腿同一只):**有界** await 写入(单行店操作期限 {@link BASELINE_IO_DEADLINE_MS},与项目指令基线的
195
+ * 回退锚的**唯一**写法(四条腿同一只):**有界** await 写入(单行店操作期限 {@link BASELINE_IO_DEADLINE_MS},与项目指令基线的
196
196
  * 读写同一只数、同一只 {@link withinIoDeadline} —— 同为单行 PK 写、同在腿的关键路径上);写失败或到期 ⇒ 不抛(锚是这次提示词能不能
197
197
  * 回退的手柄,不是 run 的成败),记一次登记过的 fail-open `server.resume-anchor.capture-failed`(`reason=error|timeout`;计数 + 探针行 + 一次性 warn)。
198
- * 调用方在本腿的终帧(流式腿的 `done`)**之前** await 它 ⇒ 客户端拿到终帧时锚已落定或已知没落定,没有「锚晚到」的窗;锚店挂住至多让终帧晚一个期限。
198
+ * 调用方在本腿的终帧(流式腿的 `done`、同步腿的 200 应答)**之前** await 它 ⇒ 客户端拿到终帧时锚已落定或已知没落定,没有「锚晚到」的窗;锚店挂住至多让终帧晚一个期限。
199
199
  * 到期只放手不取消:那次写照常在飞,迟到落定的锚照样可用(迟到的失败被吞,不重复计数)。
200
200
  * 用户面的读数仍只有一处:会话视图用户消息行的 `taskId?`(present-iff 锚在)与 `resumeAt` 的 404 `resume_at.unknown_event`。
201
201
  */
@@ -211,7 +211,7 @@ export declare class TurnAnchorCapture {
211
211
  * `message_committed{role:"user"}` event — its `entryId` is the persisted user-message `SessionTreeEntry.id`,
212
212
  * ALWAYS a valid `resumeAt` target (core accepts a user message; it rejects a tool-result / mid-tool-call
213
213
  * assistant). This is the CC rewind target ("rewind to the prompt" = the code-restore parity path — a code
214
- * change happens in a tool turn WITHIN a prompt's run, so rewinding to the prompt + rewindFiles undoes it).
214
+ * change happens in a tool turn WITHIN a prompt's run, so rewinding to the prompt + restoreFiles undoes it).
215
215
  * Keyed by the run's taskId (the handle the shell already holds from the POST response — no eventId→entryId
216
216
  * side map / no leaf-read inference needed). The assistant-turn capture above stays as an additive bonus.
217
217
  * The anchor is the run's OPENING prompt (the reader's opening window: provisional on the first user commit, corrected
@@ -232,7 +232,7 @@ export declare class TurnAnchorCapture {
232
232
  * `message_committed{role:"user"}` event — its `entryId` is the persisted user-message `SessionTreeEntry.id`,
233
233
  * ALWAYS a valid `resumeAt` target (core accepts a user message; it rejects a tool-result / mid-tool-call
234
234
  * assistant). This is the CC rewind target ("rewind to the prompt" = the code-restore parity path — a code
235
- * change happens in a tool turn WITHIN a prompt's run, so rewinding to the prompt + rewindFiles undoes it).
235
+ * change happens in a tool turn WITHIN a prompt's run, so rewinding to the prompt + restoreFiles undoes it).
236
236
  * Keyed by the run's taskId (the handle the shell already holds from the POST response — no eventId→entryId
237
237
  * side map / no leaf-read inference needed). The assistant-turn capture above stays as an additive bonus.
238
238
  * The anchor is the run's OPENING prompt (the reader's opening window: provisional on the first user commit, corrected
@@ -291,8 +291,8 @@ export declare function graftParkToolCallId<T>(result: T, cs: ParkCheckpointRead
291
291
  * 续跑在没有认领的会话上驱动(`resume-legs.ts` 认领缺席的成因清单)。顺序承重:先放认领、后作废 ⇒ 两步之间(作废没做成时一直)就是那一形。
292
292
  * 停驻没落定的成因不在判据里(停驻行 / 用量行 / 结果到手之后的任何一笔账本写抛):判据只读手里那份结果。
293
293
  *
294
- * `held` = 手里那份结果过了宿主判官之后的形(判官提上来的嵌套停驻同样算;不在本 run 会话上的嵌套停驻 —— cascade 级上的卡 —— 判官不提,
295
- * 不归本腿作废)。不是停驻 ⇒ 零 I/O。不抛:作废没做成 ⇒ 卡回到「留在待决面上、由兜底收割收走」的形,响亮留痕。
294
+ * `held` = 手里那份结果过了宿主判官之后的形(判官提上来的嵌套停驻同样算 —— verify 的实现腿 / 修复轮、cascade 的级上卡,都归本 run 的会话)。
295
+ * 不是停驻 ⇒ 零 I/O。不抛:作废没做成 ⇒ 卡回到「留在待决面上、由兜底收割收走」的形,响亮留痕。
296
296
  */
297
297
  export declare function voidHeldParkCard(held: {
298
298
  readonly terminal: TerminalCause;
@@ -328,11 +328,13 @@ export declare function voidHeldParkCard(held: {
328
328
  * only — a suspended run is steered durably via the checkpoint's `setPendingSteer` instead, and only the
329
329
  * plain-stream path holds a steerable stream (the verify/cascade branches return a result, not a stream).
330
330
  */
331
- export declare function runInBackground(runner: Runner, spec: TaskSpec, runStore: RunStore, taskId: string, metrics?: Metrics, principal?: string, verify?: VerifyRoundsSpec, // 快审 F1:number 参升整对象——cost 顶随传
331
+ export declare function runInBackground(runner: Runner, spec: TaskSpec, runStore: RunStore, taskId: string, metrics?: Metrics,
332
+ /** 本跑的属主主体(分区键;行属主 / ALS 读它)。 */
333
+ principal?: string, verify?: VerifyRoundsSpec, // 快审 F1:number 参升整对象——cost 顶随传
332
334
  cascade?: CascadeConfig, instrumentDegenerate?: (result: TaskResult) => void, planCacheProbe?: {
333
335
  record: (scope: string | undefined, objective: string, completed: boolean) => void;
334
336
  }, persistThinking?: boolean, inflight?: Map<string, RunAbort>, preemptable?: Map<string, AbortController>, steerable?: Map<string, TaskStream>, modelUsage?: ModelUsageTracker, elicitation?: ElicitationCoordinator,
335
- /** E23: the VERIFIED principal (gatedPrincipal) that may answer this run's elicitations — matches the respond
337
+ /** E23: the VERIFIED principal (gatedSubject) that may answer this run's elicitations — matches the respond
336
338
  * owner-gate's identity source (NOT the cost-attribution `principal`, which on a direct door is the self-asserted
337
339
  * header → can be null while a JWT principal exists). Falls back to the run owner when not supplied. */
338
340
  elicitOwner?: string | null,
@@ -435,6 +437,15 @@ workspaceRecorder?: SessionWorkspaceRecorder,
435
437
  * 缺席 = 嵌入方自带的装配器没铸 ⇒ 账本行不带技能段。
436
438
  */
437
439
  runSkills?: readonly RunSkillEntry[]): Promise<void>;
440
+ /** 一次心跳要的那一面(run 店的带属主刷新;交回「行还在 running 吗」)。 */
441
+ export interface RunHeartbeatStore {
442
+ heartbeat(taskId: string, owner: string | null): Promise<boolean>;
443
+ }
444
+ /**
445
+ * 🔴 **一次心跳**(四条腿的心跳拍与认领心跳 `http/claim-heartbeat.ts` 同一只 —— 判法只在这里):刷新,店交回「这条 run 的行还在 running 吗」;不在 ⇒ `onLost()`,持有者停下自己的腿。
446
+ * 判死一条行(观察口 / 认领冲突 / 收割器)拦不住它的执行者 —— 心跳打空今天不报,两个执行者会同写一只会话;这一答补上那一半。刷新失败不抛(`onError` 计数),下一拍再刷。
447
+ */
448
+ export declare function beatRunHeartbeat(runStore: RunHeartbeatStore, taskId: string, owner: string | null, onLost: () => void, onError: () => void): void;
438
449
  /** How often a running instance refreshes its run's updated_at (liveness, independent of events).
439
450
  * Must stay strictly below `runStaleSec` (asserted at startup AND on every hot config candidate) or the
440
451
  * reaper would race live runs. [ref]:数值的单源是 `config-invariants.ts`(那条不变量的属主),两个消费面