@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
@@ -2,10 +2,10 @@ import { PERMISSION_MODES, USER_ATTACHMENT_SEAT, expandTiers, reasoningEffortLev
2
2
  import { modelImageInput, modelReasoningDecl, isAtMentionable, selectableAliasNames, selectableCatalog } from "../../model-select.js";
3
3
  import { buildDroppedEntriesWire } from "../../web-admin-client/read-warnings.js";
4
4
  import { buildCandidateRejectedWire } from "../../web-admin-client/candidate-gate.js";
5
- import { buildModelPlaneFace } from "../../model-plane-face.js";
6
- import { isRosterGateArmed } from "../../config.js";
5
+ import { readModelPlaneFace } from "../../model-plane-face.js";
7
6
  import { modelKeyPoisonOf, resolveModelApiKey } from "../../key-resolver.js";
8
7
  import { projectSealedKeyCapability } from "../../sealed-key.js";
8
+ import { SESSION_READ_REDACTED_LEAVES } from "../../audit.js";
9
9
  import { DEPLOYMENT_SHAPE_PREDICATES } from "../../deployment-shape.js";
10
10
  import { taskWriteFaceRefusal } from "../../hosted-posture.js";
11
11
  import { leaderEntryRefusal, leaderRunEntry } from "../../leader/run-entry.js";
@@ -22,7 +22,7 @@ import { assertNever } from "../route-ctx.js";
22
22
  import { fileHistoryCaptureOf } from "../../file-history-capture.js";
23
23
  import { projectMemoryEngineCapability } from "../../memory-posture.js";
24
24
  import { projectWriteProtectionCapability } from "../../write-protection.js";
25
- import { projectStoreCapability } from "../../store-posture.js";
25
+ import { projectStoreCapability, unwiredStorePosture } from "../../store-posture.js";
26
26
  import { projectWebSearchCapability } from "../../plugins/web-search.js";
27
27
  import { projectExecutionLaneCapability } from "../../capabilities/execution-lane.js";
28
28
  import { SETTINGS_CONTRACT_CAPABILITY } from "../../capabilities/settings-contract.js";
@@ -35,7 +35,7 @@ import { centerEntitlementSourceWired } from "../../runtime-caps-resolver.js";
35
35
  import * as facts from "../../capability-facts.js";
36
36
  import { judgeAutoModeArming } from "../../auto-mode-face.js";
37
37
  import { coercePermissionModeStrict, PERMISSION_MODE_WORDS, taskHooksHonored } from "../../task-settings.js";
38
- import { gatedPrincipal, sendPrincipalRefusal } from "../principal-gate.js";
38
+ import { gatedPerson, sendPrincipalRefusal } from "../principal-gate.js";
39
39
  import { readAdoptionImportCapability } from "../../adoption/import.js";
40
40
  import { headReadOf } from "../../session-incarnation.js";
41
41
  import { callerTrust } from "../caller-trust.js";
@@ -79,10 +79,10 @@ export async function handleCapabilities(req, res, match, ctx) {
79
79
  return;
80
80
  }
81
81
  const entitlementSource = centerEntitlementSourceWired(deps.config);
82
- const { fault: autoModeFault, ...autoMode } = await judgeAutoModeArming(deps.autoModeFace, { requestedMode, floor: autonomyModeFloor(deps.config.autonomy), principal: gatedPrincipal(req, deps.config), localDeny: deps.config.permissionsDisableAutoMode });
82
+ const { fault: autoModeFault, ...autoMode } = await judgeAutoModeArming(deps.autoModeFace, { requestedMode, floor: autonomyModeFloor(deps.config.autonomy), principal: gatedPerson(req, deps.config), localDeny: deps.config.permissionsDisableAutoMode });
83
83
  if (autoModeFault !== undefined)
84
84
  deps.logger?.warn("auto_mode_face_resolver_fault", { fault: autoModeFault });
85
- const rulesLaneForCaller = facts.ruleLaneForCaller(deps, gatedPrincipal(req, deps.config)).available;
85
+ const rulesLaneForCaller = facts.ruleLaneForCaller(deps, gatedPerson(req, deps.config)).available;
86
86
  const streamApprovalFact = facts.streamApproval(deps);
87
87
  sendJson(res, 200, gateCompositeMembers({
88
88
  ...deps.capabilities,
@@ -113,8 +113,8 @@ export async function handleCapabilities(req, res, match, ctx) {
113
113
  memory: false,
114
114
  memoryWrite: false,
115
115
  memoryEngine: projectMemoryEngineCapability(deps.memoryPosture),
116
- store: projectStoreCapability(deps.storePosture ?? { declared: deps.config.dbBackend, backend: "memory" }, deps.sqlEngine?.facts),
117
- centerWiring: deps.centerWiring?.(gatedPrincipal(req, deps.config)),
116
+ store: projectStoreCapability(deps.storePosture ?? unwiredStorePosture(deps.config.dbBackend), deps.sqlEngine?.facts),
117
+ centerWiring: deps.centerWiring?.(gatedPerson(req, deps.config)),
118
118
  webSearch: projectWebSearchCapability(deps.webSearchProvider),
119
119
  sessionBackgroundable: facts.durableRuns(deps).available,
120
120
  runMemoryCaptureOptOut: facts.durableRuns(deps).available,
@@ -123,7 +123,7 @@ export async function handleCapabilities(req, res, match, ctx) {
123
123
  sharedMemory: facts.sharedMemoryRead(deps).available,
124
124
  principalInboxDelivery: facts.principalInboxDelivery(deps).available,
125
125
  adoption: facts.adoption(deps).available,
126
- adoptionImport: await readAdoptionImportCapability(facts.adoptionSessionImport(deps), gatedPrincipal(req, deps.config), deps.config),
126
+ adoptionImport: await readAdoptionImportCapability(facts.adoptionSessionImport(deps), gatedPerson(req, deps.config), deps.config),
127
127
  memoryBundle: facts.memoryBundle(deps).available,
128
128
  memoryCompliance: facts.memoryCompliance(deps).available,
129
129
  memoryOrigin: facts.memoryOrigin(deps).available,
@@ -203,12 +203,13 @@ export async function handleCapabilities(req, res, match, ctx) {
203
203
  approvalDecidedVia: true,
204
204
  planReviewCheckpointId: true,
205
205
  permissionModes: [...PERMISSION_MODES],
206
- sessionReadRedaction: true,
206
+ sessionReadRedaction: [...SESSION_READ_REDACTED_LEAVES],
207
207
  sideQuery: true,
208
208
  agentRoster: facts.agentRoster(deps).available,
209
209
  projects: facts.projectRegistry(deps).available,
210
210
  retention: retentionAdvertisement(deps.config),
211
211
  peerLane: Boolean(deps.peerDirectory),
212
+ scenarioSubject: true,
212
213
  sessionList: facts.sessionList(deps).available,
213
214
  sessionSearch: facts.sessionList(deps).available,
214
215
  sessionFork: facts.sessionFork(deps).available,
@@ -217,7 +218,6 @@ export async function handleCapabilities(req, res, match, ctx) {
217
218
  promptSuggestions: true,
218
219
  sessionPolicy: facts.sessionPolicy(deps).available,
219
220
  sessionRulesNamespaceForms: sessionRulesNamespaceFormsHonored(),
220
- rewindFiles: Boolean(deps.fileHistoryStore),
221
221
  restoreFiles: Boolean(deps.fileHistoryStore),
222
222
  rewindFilesTo: Boolean(deps.fileHistoryStore && deps.resumeAnchorStore && headReadOf(deps.sessionStorage)),
223
223
  sessionRewindFiles: facts.sessionRewindFiles(deps).available,
@@ -254,7 +254,7 @@ export async function handleCapabilities(req, res, match, ctx) {
254
254
  return;
255
255
  }
256
256
  case "capability-mcp": {
257
- const principal = gatedPrincipal(req, deps.config);
257
+ const principal = gatedPerson(req, deps.config);
258
258
  if (deps.config.requirePrincipal && !principal) {
259
259
  sendPrincipalRefusal(res, req, deps.config);
260
260
  return;
@@ -269,7 +269,7 @@ export async function handleCapabilities(req, res, match, ctx) {
269
269
  return;
270
270
  }
271
271
  case "capability-mcp-probe": {
272
- const principal = gatedPrincipal(req, deps.config);
272
+ const principal = gatedPerson(req, deps.config);
273
273
  if (deps.config.requirePrincipal && !principal) {
274
274
  sendPrincipalRefusal(res, req, deps.config);
275
275
  return;
@@ -304,6 +304,7 @@ export async function handleCapabilities(req, res, match, ctx) {
304
304
  ...((levels) => (levels !== undefined ? { supportedEffortLevels: [...levels] } : {}))(reasoningEffortLevelsOf(m)),
305
305
  ...(m.compat !== undefined ? { compat: m.compat } : {}),
306
306
  ...(m.thinkingLevelMap !== undefined ? { thinkingLevelMap: m.thinkingLevelMap } : {}),
307
+ ...(m.defaultThinking !== undefined ? { defaultThinking: m.defaultThinking } : {}),
307
308
  ...mentionBit(name),
308
309
  routePairing: routePairingOf(deps, name, m),
309
310
  }));
@@ -316,11 +317,7 @@ export async function handleCapabilities(req, res, match, ctx) {
316
317
  defaultModel: { id: deps.config.model.id, ...(defaultName ? { name: defaultName } : {}) },
317
318
  droppedEntries: buildDroppedEntriesWire(deps.config.droppedCatalogEntries),
318
319
  ...(candidateRejection !== undefined ? { candidateRejected: buildCandidateRejectedWire(candidateRejection) } : {}),
319
- modelPlane: buildModelPlaneFace(deps.config, {
320
- envTableIsPlaceholder: isRosterGateArmed(deps.config.webAdmin),
321
- candidateRejection,
322
- latestPlaneRefusal: deps.latestPlaneRefusalState?.(),
323
- }),
320
+ modelPlane: readModelPlaneFace(deps.config, deps),
324
321
  aliases: selectableAliasNames(deps.config.models, atCatalog, deps.config.modelRefusals).map((name) => ({ name, ...mentionBit(name) })),
325
322
  });
326
323
  return;
@@ -1,6 +1,6 @@
1
1
  import { DOMAINS } from "@sema-agent/settings-schema";
2
2
  import { sendJson, sendError } from "../send.js";
3
- import { gatedPrincipal, explicitOperatorOk, sendPrincipalRefusal, sendOperatorPrincipalsRequired } from "../principal-gate.js";
3
+ import { gatedPerson, explicitOperatorOk, sendPrincipalRefusal, sendOperatorPrincipalsRequired } from "../principal-gate.js";
4
4
  import { assertNever } from "../route-ctx.js";
5
5
  import * as facts from "../../capability-facts.js";
6
6
  import { configKnobTable } from "../../config.js";
@@ -11,7 +11,7 @@ export async function handleConfigCatalog(req, res, match, ctx) {
11
11
  const { deps } = ctx;
12
12
  switch (match.decl.id) {
13
13
  case "config-catalog": {
14
- const principal = gatedPrincipal(req, deps.config);
14
+ const principal = gatedPerson(req, deps.config);
15
15
  if (deps.config.requirePrincipal && !principal) {
16
16
  sendPrincipalRefusal(res, req, deps.config);
17
17
  return;
@@ -11,12 +11,12 @@
11
11
  * · 绑定读面在会话族:`GET /v1/sessions/:id/execution-placement`(`routes/sessions.ts`;体 = 执行放置格的 wire 投影,
12
12
  * device 车道上是 `{ role: "writer", lane: "device", device: { deviceId, rev } }`)。绑定是根会话行上的执行格,读只有会话店的执行席一只。
13
13
  * · `POST /v1/devices/sessions/:rootSessionId/rebind` —— 显式换绑动词(v2 稿 §2 门序五步):
14
- * ① gatedPrincipal + owner 门 —— 一次行读(会话店执行席:住客 + 格),属主门判**格上**两属主列(非属主 404 反枚举同串,[ref] 纪律)
14
+ * ① gatedPerson + owner 门 —— 一次行读(会话店执行席:住客 + 格),属主门判**格上**两属主列(非属主 404 反枚举同串,[ref] 纪律)
15
15
  * ② 目标设备在场门(不存在 / 不是该域的 / 已吊销 ⇒ 404 **同串** —— 设备 id 也是不可枚举面)
16
16
  * ③ 无活跃 run 门:池级 `getActiveTaskId` 读一次作**早拒**(零审计行);**保证**在设备店的换绑事务里 —— 同一连接先锁根会话行、
17
17
  * 再锁定读 `task_active`,有认领 ⇒ 不写(读写序律;hub 内存在途计数不作门 —— 内存态跨副本不可见);两处同拒 409
18
18
  * `device.rebind_active_run` 体带 `activeTaskId`
19
- * ③′ 子代半(写前一次观察):以根为根的活后台子代(running / parked;`probeSessionChildren` 那一次枚举,scope = 会话属主 `sessionChildrenScope`,
19
+ * ③′ 子代半(写前一次观察):以根为根的活后台子代(running / parked;`probeSessionChildren` 那一次枚举,scope = 会话属主 `sessionTenantScope`,
20
20
  * 与删除门同读)⇒ 同码 409,体 `children`(名册 id)+ `retirePath`(显式结清口 —— 先结清、再换绑)
21
21
  * ④ 前态 CAS(店内单事务:按门那一读的住客 ∧ 格上两属主列 ∧ rev 定址,`execution_rev` 恒变列 + `session_rebound` 审计行;输 = 409
22
22
  * `device.rebind_rev_conflict` 体带 `currentRev` —— [ref] currentPending 哲学,壳一跳重定位;门后会话被删并同 id 重登记 ⇒ 住客不符 ⇒ 设备 404,
@@ -29,7 +29,7 @@
29
29
  * ── 调用方域(owner domain)的唯一铸造点 ─────────────────────────────────────────────────────────
30
30
  * device lane 的三表自持 O11 复合身份 `{owner_tenant, owner_subject}`(device-store.ts 头注;全局
31
31
  * principal 一个字节不动)。基线稿 §11-O11 的落法:「认证需在 SSO 校验点把 tenant+subject 传到 device
32
- * placement 校验腿」——对位到本仓的真源即:subject = `gatedPrincipal`(verified 链),tenant =
32
+ * placement 校验腿」——对位到本仓的真源即:subject = `gatedPerson`(verified 链),tenant =
33
33
  * `ssoVerifiedScope`(registry-JWT 的 `scope` claim,security.ts:同为签名真源、非自报头)。两者齐备
34
34
  * 才构成一个 device 域;缺 tenant claim 的凭据(纯 principal 头 / 静态 token 直连)**判不出域** ⇒
35
35
  * 非 operator 一律响亮 403(fail-closed + loud,[ref]:静默空列表是假健康)——基线稿对 enrollment 的
@@ -1,11 +1,11 @@
1
1
  import { sendError, sendJson } from "../send.js";
2
- import { explicitOperatorOk, gatedPrincipal, sendPrincipalRefusal } from "../principal-gate.js";
2
+ import { explicitOperatorOk, gatedPerson, sendPrincipalRefusal } from "../principal-gate.js";
3
3
  import { assertNever } from "../route-ctx.js";
4
4
  import * as facts from "../../capability-facts.js";
5
5
  import { DEVICE_PLATFORM_OS, DEVICE_PUBKEY_MAX_BYTES, DEVICE_TEXT_LIMITS, assertDeviceIdShape, assertDevicePubkeyShape, assertRootSessionIdShape, isDeviceAbsolutePath, sameDeviceOwner, } from "../../device-store.js";
6
6
  import { boundDeviceOf } from "../../execution-placement.js";
7
7
  import { defaultTaskRegistry } from "@sema-agent/core";
8
- import { probeSessionChildren, sessionChildrenScope } from "../../session-children-retire.js";
8
+ import { probeSessionChildren, sessionTenantScope } from "../../session-children-retire.js";
9
9
  import { liveChildrenRefusal } from "./background.js";
10
10
  import { DEFAULT_ENROLL_TOKEN_TTL_SEC } from "../../device-enrollment.js";
11
11
  import { deviceOwnerDomainOf } from "../execution-context.js";
@@ -123,7 +123,7 @@ export async function handleDevices(req, res, match, ctx) {
123
123
  }
124
124
  const { deps } = ctx;
125
125
  const { readJson, safeDecode } = ctx.helpers;
126
- const principal = gatedPrincipal(req, deps.config);
126
+ const principal = gatedPerson(req, deps.config);
127
127
  if (deps.config.requirePrincipal && principal === undefined) {
128
128
  sendPrincipalRefusal(res, req, deps.config);
129
129
  return;
@@ -283,7 +283,7 @@ export async function handleDevices(req, res, match, ctx) {
283
283
  sendError(res, 409, "device.rebind_active_run", "this session has a non-terminal run — rebinding now would leave in-flight work addressed at another workspace; cancel the run (or let it finish), then retry", { activeTaskId });
284
284
  return;
285
285
  }
286
- const tree = await probeSessionChildren({ agentStore: deps.backgroundAgentStore, checkpointStore: deps.checkpointStore, registry: defaultTaskRegistry }, rootSessionId, sessionChildrenScope(placement.occupant.owner));
286
+ const tree = await probeSessionChildren({ agentStore: deps.backgroundAgentStore, checkpointStore: deps.checkpointStore, registry: defaultTaskRegistry }, rootSessionId, sessionTenantScope(placement.occupant.owner));
287
287
  if (tree.liveChildren.length > 0) {
288
288
  sendError(res, 409, "device.rebind_active_run", "this session still has background agents running or waiting on an approval under it — rebinding now would leave them addressed at the old device; retire them (POST retirePath) or let them finish, then retry", liveChildrenRefusal(rootSessionId, tree.liveChildren));
289
289
  return;
@@ -15,6 +15,7 @@ import type { WiringManifest } from "@sema-agent/core";
15
15
  import { type StreamApprovalGate, type StreamApprovalGateInput } from "../../tool-approval.js";
16
16
  import { verifiedIdentitySource } from "../principal-gate.js";
17
17
  import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
18
+ import { STORE_NOT_DURABLE_CODE, type StorePosture } from "../../store-posture.js";
18
19
  /** 流内审批门的读数形:上场即 `"active"`,否则是那**四**个合取项里**第一个**不满足的原因词
19
20
  * (与 `resolveStreamApprovalGate` 同一闭集,词表**取型**自它 ⇒ 增删 reason 在此处自动跟随/编译红;
20
21
  * [ref] 删掉第 5 项「账必须持久」时本行数字漏改过一次,**数字是手抄的那一半**)。 */
@@ -60,10 +61,11 @@ export interface ServerWiringGateInput {
60
61
  * `resolveStreamApprovalGate` —— 与 `/v1/capabilities` 的 `streamApproval` 位、与回决口的 501 门同一个
61
62
  * 符号,所以诊断页读到的与消费端撞到的行为不可能不同。 */
62
63
  export declare function buildServerWiringGates(input: ServerWiringGateInput): ServerWiringGates;
63
- /** 启动自检的判决:`refusals` 非空 ⇒ 拒启(装配谎言);`warnings` ⇒ 留痕但放行。 */
64
+ /** 启动自检的判决:`refusals` 非空 ⇒ 拒启(装配谎言 / 声明兑现不了);`warnings` ⇒ 留痕但放行。`refusalCode` present-iff 店持久性那一条拒了(抛出物带它,起服 fatal 标题带它)。 */
64
65
  export interface StaticWiringAudit {
65
66
  refusals: readonly string[];
66
67
  warnings: readonly string[];
68
+ refusalCode?: typeof STORE_NOT_DURABLE_CODE;
67
69
  }
68
70
  /** 自检输入 = core 的静态半场 + 我方装配现场的两件事实。 */
69
71
  export interface StaticWiringFacts {
@@ -71,9 +73,31 @@ export interface StaticWiringFacts {
71
73
  manifest: WiringManifest;
72
74
  /** 我方喂给 `resolveStreamApprovalGate` 的 `checkpointStore` 实参的在场性(= checkpoint 店在场 ∧ DURABLE_APPROVAL)。 */
73
75
  parkFacility: boolean;
74
- /** store backend 的种类;`undefined` = env-only worker(无 backend)。 */
75
- backendKind: "mysql" | "pg" | "local" | undefined;
76
+ /** 店的持久性装配值(`store-posture.ts`,`boot/stores.ts` 铸;caps / `/health` / 诊断同一只)。 */
77
+ store: StorePosture;
76
78
  }
79
+ /**
80
+ * 三项对表(设计稿件二)。判据全是**两个独立谓词对同一件事的答案**,矛盾即装配谎言 —— 装配谎言不是
81
+ * 「配置不理想」,是「服务端对自己接了什么线的两套说法互斥」,继续启动只会把矛盾带进运行期的每一条腿。
82
+ *
83
+ * ① park 设施:core 从 `spec.checkpointStore ?? deps.checkpointStore` 判 `parkLane.capable`,我方从
84
+ * `backend.checkpoint ∧ DURABLE_APPROVAL` 判 `parkFacility` 并据此决定流内审批协议上不上场。两者
85
+ * 不等 ⇒ 协议按「窗到期能 park」上场而引擎侧根本不 park(结局是 core fail-closed deny),或反之
86
+ * 白白关掉一个可用的协议。`capable` 真而 `effective` 不真同样致命:能力在、这条部署形上却不会真的
87
+ * park,窗到期依旧无降级目的地。
88
+ * ② 会话店持久性:manifest 声明 `declared_durable`,而会话店的介质(店持久性判定里的**数据根**那一行:SQL 两方言 = 委托给库、local = 数据根所在挂载、
89
+ * 没有后端 = 内存)判为 `ephemeral` ⇒ 「替换后还在」的声明没有介质兑现 ⇒ 拒启 `config.store_not_durable`(拒句逐根列三根判定 + 两条出路)。
90
+ * 介质判不出(`unknown`:非 Linux / 挂载表读不到 / 介质形不在规则表里)⇒ 只 warn —— 判不了的部署不能因自报位停机;
91
+ * 数据根持久而另两根(封签钥匙目录 / file 记忆根)易失或判不出 ⇒ 也只 warn:会话店的声明兑现了,掉的是停驻行的封签钥匙 / 记忆,不是会话(能力位如实报最弱)。
92
+ * 声明不是 `declared_durable` ⇒ 恒过。这条与 memory+durable 两条既有拒启同族(声明与介质必须对得上)。
93
+ * ③ interaction posture 声明 `interactive` 却没有任何 question 投递面 ⇒ 只 **warn**:core 在 prepare 时
94
+ * 会按腿拒,boot 先一步把话说成人话。不拒启,因为部署形本身可能只是暂时没接活体面,而 core 侧已有
95
+ * 兜底门 —— 拒启会把一个可运行的部署挡在门外。
96
+ * ④ park 车道的持久性读数不可信时 ⇒ **warn**(理由与这条判据为什么不是拒启,见其行内注)。
97
+ *
98
+ * 判决分两级是有判据的:**拒启**留给「两个谓词对同一件事互斥」(其中一个必错,继续跑就是带着谎言服务);
99
+ * **警告**留给「读数不可信/声明不完整」(信号本身还不足以断定谁错,据此拒启会挡住正常部署)。
100
+ */
77
101
  export declare function buildStaticWiringAudit(facts: StaticWiringFacts): StaticWiringAudit;
78
102
  /**
79
103
  * boot 消费口:`refusals` 非空即抛(拒启,与 memory+durable 两条既有拒启同族的 fail-loud 形),
@@ -4,9 +4,10 @@ import { projectExecutionLaneCapability } from "../../capabilities/execution-lan
4
4
  import { readOutboundWiring } from "../../outbound-dispatcher.js";
5
5
  import { resolveStreamApprovalGate } from "../../tool-approval.js";
6
6
  import { sendJson, sendError } from "../send.js";
7
- import { gatedPrincipal, explicitOperatorOk, isLoopbackAddress, sendOperatorPrincipalsRequired, verifiedIdentitySource } from "../principal-gate.js";
7
+ import { gatedPerson, explicitOperatorOk, isLoopbackAddress, sendOperatorPrincipalsRequired, verifiedIdentitySource } from "../principal-gate.js";
8
8
  import * as facts from "../../capability-facts.js";
9
9
  import { assertNever } from "../route-ctx.js";
10
+ import { STORE_NOT_DURABLE_CODE, StoreNotDurableError, describeStoreRoot, projectStoreDurabilityWiring, unwiredStorePosture } from "../../store-posture.js";
10
11
  export function buildServerWiringGates(input) {
11
12
  const gate = resolveStreamApprovalGate({
12
13
  toolApprovalEnabled: input.toolApprovalEnabled,
@@ -43,20 +44,6 @@ export function buildServerWiringGates(input) {
43
44
  approvalGrant: [...input.approvalGrant],
44
45
  };
45
46
  }
46
- function durableSessionMedium(kind) {
47
- switch (kind) {
48
- case "mysql":
49
- case "pg":
50
- case "local":
51
- return true;
52
- case undefined:
53
- return false;
54
- default: {
55
- const unknownKind = kind;
56
- throw new Error(`durableSessionMedium: no ruling for store backend kind ${JSON.stringify(unknownKind)}`);
57
- }
58
- }
59
- }
60
47
  export function buildStaticWiringAudit(facts) {
61
48
  const refusals = [];
62
49
  const warnings = [];
@@ -70,9 +57,26 @@ export function buildStaticWiringAudit(facts) {
70
57
  refusals.push(`park facility contradiction: this server assembled its approval gates with parkFacility=true, but the engine's static wiring resolves parkLane.effective=${JSON.stringify(park.effective)} (reasons: ${park.reasons.join(", ") || "none"}). ` +
71
58
  `A window expiry would then have no degradation target and adjudicate as a fail-closed deny — refusing to start.`);
72
59
  }
73
- if (facts.manifest.session.store === "declared_durable" && !durableSessionMedium(facts.backendKind)) {
74
- refusals.push(`session store durability contradiction: the engine's static wiring reports session.store="declared_durable" while the store backend is ${facts.backendKind === undefined ? "absent (env-only worker)" : `"${facts.backendKind}"`}. ` +
75
- `A durable declaration with no durable medium is a claim nothing can honor — refusing to start. Wire DB_BACKEND=mysql|pg|local, or fix the store's durability declaration.`);
60
+ let refusalCode;
61
+ if (facts.manifest.session.store === "declared_durable") {
62
+ const roots = facts.store.roots;
63
+ const session = roots.find((r) => r.root === "data");
64
+ const listed = roots.map((r) => `${describeStoreRoot(r)}`).join("; ");
65
+ if (session === undefined || session.verdict === "ephemeral") {
66
+ refusalCode = STORE_NOT_DURABLE_CODE;
67
+ const wayOut = session?.rule === "backend_memory" || session === undefined
68
+ ? `No store backend was assembled (env-only worker or a degraded boot) — wire DB_BACKEND=mysql|pg|local, or fix the session store's durability declaration.`
69
+ : `Two ways out: mount a persistent volume at ${session.path ?? "the data root"} (or point LOCAL_DATA_ROOT at one), or declare this deployment non-durable (DB_BACKEND=memory).`;
70
+ refusals.push(`${STORE_NOT_DURABLE_CODE}: the engine's static wiring reports session.store="declared_durable" while the session store's medium does not survive a container / Pod replacement (store durability by root: ${listed}). ` +
71
+ `A durable declaration on an ephemeral medium is a claim nothing can honor — sessions, parked approvals and memory would vanish with the next replacement while every read face said "durable". Refusing to start. ${wayOut}`);
72
+ }
73
+ else if (facts.store.durability !== "durable") {
74
+ warnings.push(`store durability is "${facts.store.durability}" (by root: ${listed}). ` +
75
+ (facts.store.durability === "unknown"
76
+ ? `This server could not prove that every root survives a container / Pod replacement (no mount evidence for it — not Linux, an unreadable mount table, or a mount shape outside the rule table); GET /v1/capabilities store.durability and /health.store.durability say "unknown". `
77
+ : `The session store's medium holds, but a root marked ephemeral does not survive a container / Pod replacement — mount a persistent volume there (SEALED_KEY_DIR / MEMORY_ENGINE_DIR name those directories). `) +
78
+ `Per-root detail: GET /v1/diagnostics/wiring storeDurability.roots.`);
79
+ }
76
80
  }
77
81
  if (facts.parkFacility && facts.manifest.parkLane.checkpointDurability !== "declared_durable") {
78
82
  warnings.push(`park facility is enabled but the checkpoint store does not declare durable storage ` +
@@ -84,14 +88,15 @@ export function buildStaticWiringAudit(facts) {
84
88
  warnings.push(`interactionPosture declares "interactive" but no question delivery face is wired (question.wired=${JSON.stringify(facts.manifest.question.wired)}) — ` +
85
89
  `every leg that asks a question will be refused by the engine at prepare time. Wire the live question seam (ASK_QUESTION_ENABLED), or declare the headless posture.`);
86
90
  }
87
- return { refusals, warnings };
91
+ return { refusals, warnings, ...(refusalCode !== undefined ? { refusalCode } : {}) };
88
92
  }
89
93
  export function assertStaticWiringConsistent(facts, logger) {
90
94
  const audit = buildStaticWiringAudit(facts);
91
95
  for (const w of audit.warnings)
92
96
  logger?.warn("wiring_static_warning", { detail: w });
93
97
  if (audit.refusals.length > 0) {
94
- throw new Error(`static wiring self-check failed — refusing to start:\n${audit.refusals.map((r) => ` · ${r}`).join("\n")}`);
98
+ const text = `static wiring self-check failed — refusing to start:\n${audit.refusals.map((r) => ` · ${r}`).join("\n")}`;
99
+ throw audit.refusalCode !== undefined ? new StoreNotDurableError(text) : new Error(text);
95
100
  }
96
101
  return audit;
97
102
  }
@@ -106,7 +111,7 @@ export async function handleDiagnostics(req, res, match, ctx) {
106
111
  sendOperatorPrincipalsRequired(res);
107
112
  return;
108
113
  }
109
- if (!explicitOperatorOk(gatedPrincipal(req, deps.config), deps.config)) {
114
+ if (!explicitOperatorOk(gatedPerson(req, deps.config), deps.config)) {
110
115
  sendError(res, 403, "auth.operator_only", "wiring diagnostics are operator-only");
111
116
  return;
112
117
  }
@@ -117,6 +122,7 @@ export async function handleDiagnostics(req, res, match, ctx) {
117
122
  sendJson(res, 200, {
118
123
  static: deps.staticWiring,
119
124
  memoryPosture: deps.memoryPosture ?? null,
125
+ storeDurability: projectStoreDurabilityWiring(deps.storePosture ?? unwiredStorePosture(deps.config.dbBackend)),
120
126
  sqlEngine: deps.sqlEngine?.facts ?? null,
121
127
  writeProtection: deps.writeProtection ?? null,
122
128
  readFace: buildReadFaceWiring(deps.config),
@@ -1,5 +1,5 @@
1
1
  import { sendJson, sendError, sendHttpError, invalidJsonError } from "../send.js";
2
- import { gatedPrincipal, sendPrincipalRefusal } from "../principal-gate.js";
2
+ import { gatedSubject, sendPrincipalRefusal } from "../principal-gate.js";
3
3
  import * as facts from "../../capability-facts.js";
4
4
  import { HANDOVER_REASONS } from "../../boot/engine-lease.js";
5
5
  import { assertNever } from "../route-ctx.js";
@@ -31,7 +31,7 @@ function sendHandoverUnavailable(res, why) {
31
31
  }
32
32
  export async function handleEngine(req, res, match, ctx) {
33
33
  const { deps } = ctx;
34
- if (deps.config.requirePrincipal && gatedPrincipal(req, deps.config) === undefined) {
34
+ if (deps.config.requirePrincipal && gatedSubject(req, deps.config) === undefined) {
35
35
  sendPrincipalRefusal(res, req, deps.config);
36
36
  return;
37
37
  }
@@ -2,7 +2,8 @@ import { hookNoticeWire } from "../../fleet/fleet-bus.js";
2
2
  import { FLEET_SNAPSHOT_TERMINAL_MAX_ROWS, isTerminalWorkflowRowStatus, recentTerminalWorkflowRows } from "../../fleet/fleet-terminal-window.js";
3
3
  import { taskNotificationFoldKey } from "../../orchestration/workflow-completion-inbox.js";
4
4
  import { sendJson, sendError, sseHeaders } from "../send.js";
5
- import { fleetViewOf, gatedPrincipal, sendPrincipalRefusal } from "../principal-gate.js";
5
+ import { gatedSubject, sendPrincipalRefusal } from "../principal-gate.js";
6
+ import { routeListFilter } from "../owner-access.js";
6
7
  import { assertNever } from "../route-ctx.js";
7
8
  import * as facts from "../../capability-facts.js";
8
9
  export async function handleFleet(req, res, match, ctx) {
@@ -14,8 +15,8 @@ export async function handleFleet(req, res, match, ctx) {
14
15
  sendError(res, 501, "capability.self_orchestration_required", "fleet stream requires self-orchestration / fleet wiring");
15
16
  return;
16
17
  }
17
- const { fleetWide } = fleetViewOf(req, deps, "read");
18
- const principal = gatedPrincipal(req, deps.config);
18
+ const { fleetWide } = routeListFilter(req, deps, match.decl.id);
19
+ const principal = gatedSubject(req, deps.config);
19
20
  if (deps.config.requirePrincipal && !principal && !fleetWide) {
20
21
  sendPrincipalRefusal(res, req, deps.config);
21
22
  return;
@@ -48,6 +49,7 @@ function streamFleet(req, res, bus, callerScope, callerSession = null, completio
48
49
  name: "rewrite", scope: "strip", sessionId: "strip",
49
50
  description: "scrub", agentType: "scrub", agentName: "scrub", currentAction: "scrub",
50
51
  currentTool: "scrub", transcriptId: "scrub", stoppedBy: "scrub", editedFiles: "scrub",
52
+ model: "scrub",
51
53
  };
52
54
  void SCOPED_TASK_KEY_DISPOSITION;
53
55
  const stripT = (r) => {
@@ -5,7 +5,7 @@ import { manifestToIndexEntry } from "../../images/manifest.js";
5
5
  import { validateBake, buildBakeArgv } from "../../images/bake-validate.js";
6
6
  import { streamSseLog } from "../sse-log.js";
7
7
  import { sendJson, sendError } from "../send.js";
8
- import { headerStr, safeEqual, gatedPrincipal, explicitOperatorOk, sendOperatorPrincipalsRequired } from "../principal-gate.js";
8
+ import { headerStr, safeEqual, gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired } from "../principal-gate.js";
9
9
  import { idemCallerOf, idemKeyOf } from "../idempotency.js";
10
10
  import { assertNever } from "../route-ctx.js";
11
11
  import * as facts from "../../capability-facts.js";
@@ -48,7 +48,7 @@ export async function handleImages(req, res, match, ctx) {
48
48
  if (deps.imageBakes && isBakeRouteId(match.decl.id)) {
49
49
  const bakes = deps.imageBakes;
50
50
  const idx = deps.imageIndex;
51
- const principal = gatedPrincipal(req, deps.config);
51
+ const principal = gatedPerson(req, deps.config);
52
52
  const isExplicitOperator = explicitOperatorOk(principal, deps.config);
53
53
  const operatorLane = facts.operatorLane(deps);
54
54
  const cfg = deps.config.imageBakes;
@@ -289,7 +289,7 @@ export async function handleImages(req, res, match, ctx) {
289
289
  const pool = facts.imagePool(deps);
290
290
  if (pool.available && isIndexRouteId(match.decl.id)) {
291
291
  const idx = pool.imageIndex;
292
- const principal = gatedPrincipal(req, deps.config);
292
+ const principal = gatedPerson(req, deps.config);
293
293
  const operator = explicitOperatorOk(principal, deps.config);
294
294
  const viewer = { operator, tenantId: principal ?? null };
295
295
  const q = new URLSearchParams(match.search);
@@ -440,10 +440,13 @@ const BAKE_ROUTE_ID_SET = new Set(BAKE_ROUTE_IDS);
440
440
  const isBakeRouteId = (id) => BAKE_ROUTE_ID_SET.has(id);
441
441
  const isIndexRouteId = (id) => !BAKE_ROUTE_ID_SET.has(id);
442
442
  async function streamBakeEvents(req, res, bakes, bakeId, staleMs) {
443
+ const LOST = "lost";
443
444
  await streamSseLog(req, res, {
444
445
  statusOf: async (id) => {
445
446
  const bake = await bakes.getBake(id);
446
- return bake ? { status: bake.status, updatedAt: bake.updatedAt } : undefined;
447
+ if (!bake)
448
+ return undefined;
449
+ return { status: bake.status === "running" && Date.now() - new Date(bake.updatedAt).getTime() > staleMs ? LOST : bake.status };
447
450
  },
448
451
  getEvents: (id, after) => bakes.getEvents(id, after),
449
452
  formatEvent: (ev) => ({
@@ -451,8 +454,9 @@ async function streamBakeEvents(req, res, bakes, bakeId, staleMs) {
451
454
  event: ev.kind,
452
455
  data: { kind: ev.kind, seq: ev.seq, ts: ev.ts, ...(ev.level ? { level: ev.level } : {}), ...(ev.data ?? {}) },
453
456
  }),
454
- staleFrame: () => ({ event: "done", data: { kind: "done", status: "FAILED", error: "bake-runner lost (no heartbeat)", digest: null, indexId: null, repo: null, ref: null } }),
455
- }, bakeId, staleMs);
457
+ isTerminalEvent: (ev) => ev.kind === "done",
458
+ closingFrameOf: (row, deliveredTerminal) => row.status === LOST && !deliveredTerminal ? { event: "done", data: { kind: "done", status: "FAILED", error: "bake-runner lost (no heartbeat)", digest: null, indexId: null, repo: null, ref: null } } : undefined,
459
+ }, bakeId);
456
460
  }
457
461
  function bakeView(b) {
458
462
  return {
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * [ref] A9 域模块 —— v2 leader 端点([ref])。
3
3
  *
4
- * 路由:`POST /v1/leader`(异步,形同 `/v1/runs`)· `GET /v1/leader/:id`。整域由 `deps.leaderEndpoint`
4
+ * 路由:`POST /v1/leader`(异步,形同 `/v1/runs`)· `GET /v1/leader/:id` · `POST /v1/leader/:id/cancel`(停止律与 run / bake 同一条,见 `leader/endpoint.ts` 头注)。整域由 `deps.leaderEndpoint`
5
5
  * 的存在与否开关;身份层与 `/v1/runs` 同款(BL-4:此前整条路跳过 authorize/requirePrincipal 且不记 owner,
6
- * 任何持服务令牌者能提交/读任意租户的 leader run),owner 用 crypto 验证过的 `gatedPrincipal`。本域零可变状态。
6
+ * 任何持服务令牌者能提交/读任意租户的 leader run),owner 用 crypto 验证过的 `gatedSubject`。本域零可变状态。
7
7
  */
8
8
  import type { IncomingMessage, ServerResponse } from "node:http";
9
9
  import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
@@ -27,6 +27,11 @@ export declare const LEADER_ROUTES: readonly [{
27
27
  readonly pattern: RegExp;
28
28
  readonly label: "/v1/leader/:id";
29
29
  readonly methods: readonly ["GET"];
30
+ }, {
31
+ readonly id: "leader-cancel";
32
+ readonly pattern: RegExp;
33
+ readonly label: "/v1/leader/:id/cancel";
34
+ readonly methods: readonly ["POST"];
30
35
  }];
31
36
  /** 本域可分派行的 `id` 闭集 —— handler 的 `switch` 按它判穷尽(漏一口 = 编译红)。 */
32
37
  export type LeaderRouteId = RouteIdsOf<typeof LEADER_ROUTES>;
@@ -1,5 +1,5 @@
1
1
  import { sendJson, sendError } from "../send.js";
2
- import { gatedPrincipal, headerStr, sendPrincipalRefusal } from "../principal-gate.js";
2
+ import { gatedSubject, headerStr, runIdentityOf, sendPrincipalRefusal } from "../principal-gate.js";
3
3
  import { idemCallerOf } from "../idempotency.js";
4
4
  import { assertNever } from "../route-ctx.js";
5
5
  import * as facts from "../../capability-facts.js";
@@ -10,6 +10,7 @@ export async function handleLeader(req, res, match, ctx) {
10
10
  case "leader-submit":
11
11
  case "leader-detail":
12
12
  case "leader-by-idem":
13
+ case "leader-cancel":
13
14
  break;
14
15
  default:
15
16
  return assertNever(match.decl.id);
@@ -22,7 +23,7 @@ export async function handleLeader(req, res, match, ctx) {
22
23
  return;
23
24
  }
24
25
  const endpoint = lane.endpoint;
25
- if (deps.config.requirePrincipal && !gatedPrincipal(req, deps.config)) {
26
+ if (deps.config.requirePrincipal && !gatedSubject(req, deps.config)) {
26
27
  sendPrincipalRefusal(res, req, deps.config);
27
28
  return;
28
29
  }
@@ -36,7 +37,7 @@ export async function handleLeader(req, res, match, ctx) {
36
37
  sendError(res, 422, "request.autonomy_lane_refused", laneRefusal);
37
38
  return;
38
39
  }
39
- const r = await endpoint.handle("POST", LEADER_SUBMIT_PATH, body, caller, headerStr(req.headers["idempotency-key"]) ?? null);
40
+ const r = await endpoint.handle("POST", LEADER_SUBMIT_PATH, body, caller, headerStr(req.headers["idempotency-key"]) ?? null, runIdentityOf(req, deps.config, caller.subject ?? null));
40
41
  if (r) {
41
42
  sendJson(res, r.status, r.body);
42
43
  return;
@@ -49,6 +50,13 @@ export async function handleLeader(req, res, match, ctx) {
49
50
  return;
50
51
  }
51
52
  }
53
+ else if (match.decl.id === "leader-cancel") {
54
+ const r = await endpoint.handle("POST", `${LEADER_SUBMIT_PATH}/${match.params.id}/cancel`, undefined, caller);
55
+ if (r) {
56
+ sendJson(res, r.status, r.body);
57
+ return;
58
+ }
59
+ }
52
60
  else {
53
61
  const r = await endpoint.handle("GET", `${LEADER_SUBMIT_PATH}/${match.params.id}`, undefined, caller);
54
62
  if (r) {
@@ -62,5 +70,6 @@ export const LEADER_ROUTES = [
62
70
  { id: "leader-submit", path: LEADER_SUBMIT_PATH, billable: "submit", methods: ["POST"] },
63
71
  { id: "leader-by-idem", path: LEADER_SUBMIT_PATH, methods: ["GET"] },
64
72
  { id: "leader-detail", pattern: /^\/v1\/leader\/(?<id>[^/]+)$/, label: "/v1/leader/:id", methods: ["GET"] },
73
+ { id: "leader-cancel", pattern: /^\/v1\/leader\/(?<id>[^/]+)\/cancel$/, label: "/v1/leader/:id/cancel", methods: ["POST"] },
65
74
  ];
66
75
  //# sourceMappingURL=leader.js.map
@@ -59,7 +59,7 @@
59
59
  * = 持久 run 账面 ∧ 会话属主面(两道 501 的同一批 deps 推导出来,「说 yes 但 501」结构上不可能)。
60
60
  */
61
61
  import type { IncomingMessage, ServerResponse } from "node:http";
62
- import { type RouteCtx, type RouteMatch, type RouteIdsOf } from "../route-ctx.js";
62
+ import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
63
63
  /** 本面的三词闭集 —— **`unsupported` 是本仓的词**(core 的三词是 `reconnected`/`refused`/`not_declared`)。 */
64
64
  export type McpReconnectOutcome = "accepted" | "refused" | "unsupported";
65
65
  export declare function handleMcpReconnect(req: IncomingMessage, res: ServerResponse, match: RouteMatch<McpReconnectRouteId>, ctx: RouteCtx): Promise<void>;
@@ -2,11 +2,9 @@ import { z } from "zod";
2
2
  import { isParkedRunStatus, isTerminalRunStatus, runProvenElsewhere } from "../../plugins/store-contracts.js";
3
3
  import { DeadlineExceeded, MCP_DIAL_DEADLINE_MS, raceDeadline } from "../mcp-dial-deadline.js";
4
4
  import { sendJson, sendError } from "../send.js";
5
- import { gatedPrincipal, explicitOperatorOk, sendPrincipalRefusal } from "../principal-gate.js";
6
- import {} from "../route-ctx.js";
7
- import { assertNever, SESSION_NOT_FOUND_MESSAGE } from "../route-ctx.js";
5
+ import { admitSessionById, enter } from "../owner-access.js";
6
+ import { assertNever } from "../route-ctx.js";
8
7
  import * as facts from "../../capability-facts.js";
9
- import { sessionOwnerCellOf } from "../../security.js";
10
8
  import { seatText } from "../../trace/exit-seat.js";
11
9
  import { projectMcpAuthorization } from "../../mcp-authorization-face.js";
12
10
  const BodySchema = z.object({ server: z.string().min(1).max(190) }).strict();
@@ -73,11 +71,9 @@ export async function handleMcpReconnect(req, res, match, ctx) {
73
71
  }
74
72
  }
75
73
  const { runStore, sessionStorage } = fact;
76
- const principal = gatedPrincipal(req, deps.config);
77
- if (deps.config.requirePrincipal && principal === undefined) {
78
- sendPrincipalRefusal(res, req, deps.config);
74
+ const entry = enter(req, res, deps, match.decl.id);
75
+ if (entry === undefined)
79
76
  return;
80
- }
81
77
  const parsed = BodySchema.safeParse((await ctx.helpers.readJson(req)) ?? {});
82
78
  if (!parsed.success) {
83
79
  sendError(res, 400, "request.body_shape", "body must be { server: string (non-empty, at most 190 characters) } — one NAMED MCP server, required; there is no all-servers form (re-dialing every server would CLOSE the healthy ones, and a stdio server that owns a device cannot be re-dialed while the old connection still holds it)");
@@ -89,14 +85,10 @@ export async function handleMcpReconnect(req, res, match, ctx) {
89
85
  sendError(res, 400, "request.path_malformed", "session id segment is not valid percent-encoding");
90
86
  return;
91
87
  }
92
- const owner = (await sessionStorage.headOf(sessionId))?.owner;
93
- if (owner === undefined) {
94
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
95
- return;
96
- }
97
- const operator = explicitOperatorOk(principal, deps.config);
98
- if (!operator && !ctx.helpers.sessionOwnerOk(req, res, await sessionOwnerCellOf(sessionStorage, sessionId, owner)))
88
+ const admitted = await admitSessionById(entry, res, sessionStorage, sessionId);
89
+ if (admitted === undefined)
99
90
  return;
91
+ const owner = admitted.row.owner;
100
92
  const activeTaskId = await runStore.getActiveTaskId(sessionId);
101
93
  const live = activeTaskId === undefined ? undefined : ctx.registry.steerableRuns.get(activeTaskId);
102
94
  if (live) {