@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
@@ -1,11 +1,10 @@
1
1
  import { z } from "zod";
2
2
  import { sendJson, sendError } from "../send.js";
3
3
  import { sentMemoryStoreRefusal } from "../memory-store-refusal-reply.js";
4
- import { sentControlPlaneCorrupt } from "../memory-control-plane-corrupt-reply.js";
5
4
  import { buildOriginFencedBundle, readOriginAware } from "../../memory-origin-fence.js";
6
- import { gatedPrincipal, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
5
+ import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
7
6
  import { assertNever } from "../route-ctx.js";
8
- import { sentMemoryLayerRefusal } from "../memory-layer-reply.js";
7
+ import { sentMemoryFaceFault } from "../memory-face-fault-reply.js";
9
8
  import * as facts from "../../capability-facts.js";
10
9
  export const MEMORY_BUNDLE_EXPORT_PATH = "/v1/memory/export";
11
10
  export const MEMORY_BUNDLE_IMPORT_PATH = "/v1/memory/import";
@@ -36,15 +35,13 @@ function codeOf(err) {
36
35
  return typeof code === "string" ? code : undefined;
37
36
  }
38
37
  function sentClassifiedFailure(res, ctx, face, err) {
39
- if (sentMemoryLayerRefusal(res, err, { kind: "operator" }))
38
+ if (sentMemoryFaceFault(res, err, { kind: "operator" }))
40
39
  return true;
41
40
  const code = codeOf(err);
42
41
  if (code !== undefined && sentCoreCode(res, code, err instanceof Error ? err.message : String(err)))
43
42
  return true;
44
43
  if (sentMemoryStoreRefusal(res, err, ctx.deps.logger))
45
44
  return true;
46
- if (sentControlPlaneCorrupt(res, err, { kind: "operator" }))
47
- return true;
48
45
  ctx.deps.logger?.warn?.(`memory_bundle_${face}_failed`, { err: String(err) });
49
46
  return false;
50
47
  }
@@ -69,7 +66,7 @@ export function buildImportReportWire(r) {
69
66
  }
70
67
  export async function handleMemoryBundle(req, res, match, ctx) {
71
68
  const { deps } = ctx;
72
- const principal = gatedPrincipal(req, deps.config);
69
+ const principal = gatedPerson(req, deps.config);
73
70
  if (deps.config.requirePrincipal && !principal) {
74
71
  sendPrincipalRefusal(res, req, deps.config);
75
72
  return;
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  import { erasureInputSmugglesPrototypeKey } from "../../memory-operator-faces.js";
3
3
  import { sentMemoryComplianceFailure } from "../memory-compliance-failure-reply.js";
4
- import { readLayerSeat, sentMemoryLayerRefusal } from "../memory-layer-reply.js";
4
+ import { readLayerSeat, sentMemoryFaceFault } from "../memory-face-fault-reply.js";
5
5
  import { sendJson, sendError } from "../send.js";
6
- import { gatedPrincipal, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
6
+ import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
7
7
  import { assertNever } from "../route-ctx.js";
8
8
  import * as facts from "../../capability-facts.js";
9
9
  export const MEMORY_ERASE_PATH = "/v1/memory/erase";
@@ -13,7 +13,7 @@ const EraseRequestSchema = z.object({
13
13
  allowUnevidenced: z.boolean().optional(),
14
14
  });
15
15
  function sentClassifiedFailure(res, ctx, face, err) {
16
- if (sentMemoryLayerRefusal(res, err, { kind: "operator" }))
16
+ if (sentMemoryFaceFault(res, err, { kind: "operator" }))
17
17
  return true;
18
18
  if (sentMemoryComplianceFailure(res, err, { kind: "operator" }, ctx.deps.logger))
19
19
  return true;
@@ -22,7 +22,7 @@ function sentClassifiedFailure(res, ctx, face, err) {
22
22
  }
23
23
  export async function handleMemoryCompliance(req, res, match, ctx) {
24
24
  const { deps } = ctx;
25
- const principal = gatedPrincipal(req, deps.config);
25
+ const principal = gatedPerson(req, deps.config);
26
26
  if (deps.config.requirePrincipal && !principal) {
27
27
  sendPrincipalRefusal(res, req, deps.config);
28
28
  return;
@@ -1,8 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { sendJson, sendError } from "../send.js";
3
- import { sentMemoryLayerRefusal } from "../memory-layer-reply.js";
4
- import { sentControlPlaneCorrupt } from "../memory-control-plane-corrupt-reply.js";
5
- import { gatedPrincipal, explicitOperatorOk, sendPrincipalRefusal, sendOperatorPrincipalsRequired } from "../principal-gate.js";
3
+ import { sentMemoryFaceFault } from "../memory-face-fault-reply.js";
4
+ import { gatedPerson, explicitOperatorOk, sendPrincipalRefusal, sendOperatorPrincipalsRequired } from "../principal-gate.js";
6
5
  import { assertNever } from "../route-ctx.js";
7
6
  import * as facts from "../../capability-facts.js";
8
7
  export const MEMORY_CONSOLIDATION_STATUS_PATH = "/v1/admin/memory/consolidation";
@@ -74,7 +73,7 @@ function codeOf(err) {
74
73
  }
75
74
  export async function handleMemoryConsolidation(req, res, match, ctx) {
76
75
  const { deps } = ctx;
77
- const principal = gatedPrincipal(req, deps.config);
76
+ const principal = gatedPerson(req, deps.config);
78
77
  if (deps.config.requirePrincipal && !principal) {
79
78
  sendPrincipalRefusal(res, req, deps.config);
80
79
  return;
@@ -107,7 +106,7 @@ export async function handleMemoryConsolidation(req, res, match, ctx) {
107
106
  row = scope !== undefined ? await faces.lastRun(scope) : undefined;
108
107
  }
109
108
  catch (err) {
110
- if (sentMemoryLayerRefusal(res, err, { kind: "operator" }))
109
+ if (sentMemoryFaceFault(res, err, { kind: "operator" }))
111
110
  return;
112
111
  throw err;
113
112
  }
@@ -149,19 +148,17 @@ export async function handleMemoryConsolidation(req, res, match, ctx) {
149
148
  }
150
149
  }
151
150
  try {
152
- const r = await faces.run(decided.scope);
151
+ const r = await faces.run(decided.scope, principal);
153
152
  sendJson(res, 200, buildRunSummary(r));
154
153
  }
155
154
  catch (err) {
156
- if (sentMemoryLayerRefusal(res, err, { kind: "operator" }))
155
+ if (sentMemoryFaceFault(res, err, { kind: "operator" }))
157
156
  return;
158
157
  const coreCode = codeOf(err);
159
158
  if (coreCode !== undefined) {
160
159
  sendError(res, 409, "memory.consolidation_refused", `memory consolidation refused (${coreCode}): ${err instanceof Error ? err.message : String(err)}`);
161
160
  return;
162
161
  }
163
- if (sentControlPlaneCorrupt(res, err, { kind: "operator" }))
164
- return;
165
162
  ctx.deps.logger?.warn?.("memory_consolidation_run_failed", { scope: decided.scope, err: String(err) });
166
163
  sendError(res, 500, "internal.error", "memory consolidation run failed");
167
164
  }
@@ -87,12 +87,14 @@ export declare const MEMORY_ORIGIN_CLEARANCES_PATH = "/v1/memory/origin/clearanc
87
87
  *
88
88
  * 被剥的 core 键**只有一个**:`entryText`(完整正文托管字节),而且**剥了要说** —— `custodyBytes` 是它
89
89
  * 留在审计面上的那句披露(0 = 这行没揣着字节;>0 = 崩溃恢复席里还有一条记忆的正文,pending 行要人处置)。
90
+ * `custodyErased: true`(core 7.66.0 [ref])= 这行的托管被一次擦除取走了(此时 `custodyBytes` 恒 0,该清标不再能续)。
90
91
  * 嵌套的 `origin` 不是「被剥」而是**被深投影**(三键之外的成员剥值留名,见 {@link buildOriginWire})。
91
92
  * 🔴 **不要**给这个函数标 `: Record<string, unknown>` 返回型:那会让 `keyof ReturnType<…>` 塌成 `string`,
92
93
  * 编译期差集门当场变成恒真(vacuous)—— `buildImportReportWire` 的头注里踩过这个坑,而本车在 `origin`
93
94
  * 那只投影上**又踩了一次**(标了具体返回型,门读标注不读字面量),所以这条钉现在有两处案底。
94
95
  */
95
96
  export declare function buildClearanceRowWire(r: OriginClearanceRow): {
97
+ custodyErased?: true | undefined;
96
98
  events: {
97
99
  detail?: string | undefined;
98
100
  eventId: string;
@@ -1,10 +1,9 @@
1
1
  import { z } from "zod";
2
2
  import { sendJson, sendError } from "../send.js";
3
3
  import { sentMemoryStoreRefusal } from "../memory-store-refusal-reply.js";
4
- import { sentControlPlaneCorrupt } from "../memory-control-plane-corrupt-reply.js";
5
4
  import { buildOriginFence, readOriginAware } from "../../memory-origin-fence.js";
6
- import { readLayerSeat, sentMemoryLayerRefusal } from "../memory-layer-reply.js";
7
- import { gatedPrincipal, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
5
+ import { readLayerSeat, sentMemoryFaceFault } from "../memory-face-fault-reply.js";
6
+ import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
8
7
  import { assertNever } from "../route-ctx.js";
9
8
  import * as facts from "../../capability-facts.js";
10
9
  export const MEMORY_ORIGIN_EXTERNAL_PATH = "/v1/memory/origin/external";
@@ -50,7 +49,7 @@ function codeOf(err) {
50
49
  return typeof code === "string" ? code : undefined;
51
50
  }
52
51
  function sentClassifiedFailure(res, ctx, face, err) {
53
- if (sentMemoryLayerRefusal(res, err, { kind: "operator" }))
52
+ if (sentMemoryFaceFault(res, err, { kind: "operator" }))
54
53
  return true;
55
54
  if (face === "clear") {
56
55
  const coreCode = codeOf(err);
@@ -59,8 +58,6 @@ function sentClassifiedFailure(res, ctx, face, err) {
59
58
  }
60
59
  if (face !== "clearances" && sentMemoryStoreRefusal(res, err, ctx.deps.logger))
61
60
  return true;
62
- if (sentControlPlaneCorrupt(res, err, { kind: "operator" }))
63
- return true;
64
61
  ctx.deps.logger?.warn?.(`memory_origin_${face}_failed`, { err: String(err) });
65
62
  return false;
66
63
  }
@@ -98,6 +95,7 @@ export function buildClearanceRowWire(r) {
98
95
  ...(r.tombstonedAt !== undefined ? { tombstonedAt: r.tombstonedAt } : {}),
99
96
  events: r.events.map(buildClearanceEventWire),
100
97
  custodyBytes: Buffer.byteLength(r.entryText, "utf8"),
98
+ ...(r.custodyErased === true ? { custodyErased: true } : {}),
101
99
  };
102
100
  }
103
101
  function parseScopes(raw) {
@@ -113,7 +111,7 @@ function parseScopes(raw) {
113
111
  }
114
112
  export async function handleMemoryOrigin(req, res, match, ctx) {
115
113
  const { deps } = ctx;
116
- const principal = gatedPrincipal(req, deps.config);
114
+ const principal = gatedPerson(req, deps.config);
117
115
  if (deps.config.requirePrincipal && !principal) {
118
116
  sendPrincipalRefusal(res, req, deps.config);
119
117
  return;
@@ -163,7 +161,8 @@ export async function handleMemoryOrigin(req, res, match, ctx) {
163
161
  if (at === null)
164
162
  return;
165
163
  try {
166
- sendJson(res, 200, { clearances: (at !== undefined ? faces.listClearances(at) : faces.listClearances()).map(buildClearanceRowWire) });
164
+ const rows = await (at !== undefined ? faces.listClearances(at) : faces.listClearances());
165
+ sendJson(res, 200, { clearances: rows.map(buildClearanceRowWire) });
167
166
  }
168
167
  catch (err) {
169
168
  if (!sentClassifiedFailure(res, ctx, "clearances", err))
@@ -5,9 +5,14 @@ import * as facts from "../../capability-facts.js";
5
5
  import { sendJson, sendError } from "../send.js";
6
6
  import { buildOriginFence, readOriginAware } from "../../memory-origin-fence.js";
7
7
  import { parseProjectLayerKey } from "../../project-layer-key.js";
8
- import { gatedPrincipal, explicitOperatorOk, sendPrincipalRefusal, sendUnauthorized } from "../principal-gate.js";
8
+ import { gatedPerson, explicitOperatorOk, sendPrincipalRefusal, sendUnauthorized } from "../principal-gate.js";
9
9
  import { assertNever } from "../route-ctx.js";
10
- import { sentMemoryLayerRefusal } from "../memory-layer-reply.js";
10
+ import { sentMemoryFaceFault } from "../memory-face-fault-reply.js";
11
+ function layerFaceAudience(deps, principal, face, scope) {
12
+ if (explicitOperatorOk(principal, deps.config))
13
+ return { kind: "operator" };
14
+ return { kind: "layer_owner", face, withheld: (coreMessage) => deps.logger?.warn?.(face === "export" ? "memory_export_refused" : "memory_sync_refused", { scope, err: coreMessage }) };
15
+ }
11
16
  const ORG_PREFIX = "org:";
12
17
  export const MEMORY_EXPORT_MAX_LIMIT = 500;
13
18
  function encodeExportCursor(c) {
@@ -36,16 +41,16 @@ function directoryDecidesThisFace(mode) {
36
41
  return false;
37
42
  }
38
43
  }
39
- async function gateMemoryScope(deps, principal, scope, need) {
40
- if (scope === formatUserScope(principal) || parseProjectLayerKey(scope)?.owner === principal)
44
+ async function gateMemoryScope(deps, person, scope, need) {
45
+ if (scope === formatUserScope(person) || parseProjectLayerKey(scope)?.owner === person)
41
46
  return { kind: "allow" };
42
- if (explicitOperatorOk(principal, deps.config))
47
+ if (explicitOperatorOk(person, deps.config))
43
48
  return { kind: "allow" };
44
49
  const directory = deps.orgMemoryDirectory;
45
50
  if (!scope.startsWith(ORG_PREFIX) || directory === undefined || !directoryDecidesThisFace(deps.config.memoryOrgAdmissionMode)) {
46
51
  return { kind: "not_found" };
47
52
  }
48
- const lookup = await directory.lookup(principal);
53
+ const lookup = await directory.lookup(person);
49
54
  if (lookup.kind === "unavailable")
50
55
  return { kind: "unavailable", retryAfterMs: lookup.retryAfterMs };
51
56
  const grant = lookup.scopes[scope];
@@ -70,7 +75,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
70
75
  const { readJson, safeDecode } = ctx.helpers;
71
76
  switch (match.decl.id) {
72
77
  case "memory-export": {
73
- const principal = gatedPrincipal(req, deps.config);
78
+ const principal = gatedPerson(req, deps.config);
74
79
  if (!principal) {
75
80
  sendUnauthorized(res, "identity");
76
81
  return;
@@ -100,7 +105,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
100
105
  }
101
106
  const decoded = beforeRaw === null ? undefined : decodeExportCursor(beforeRaw);
102
107
  if (decoded !== undefined && !decoded.ok) {
103
- sendError(res, 400, "request.query_invalid", "before must be the opaque `nextBefore` cursor from a previous page of this endpoint", { detail: decoded.why });
108
+ sendError(res, 400, "request.query_invalid", `before must be the opaque \`nextBefore\` cursor from a previous page of this endpoint: ${decoded.why}`);
104
109
  return;
105
110
  }
106
111
  try {
@@ -125,7 +130,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
125
130
  });
126
131
  }
127
132
  catch (err) {
128
- if (sentMemoryLayerRefusal(res, err, { kind: "operator" }))
133
+ if (sentMemoryFaceFault(res, err, layerFaceAudience(deps, principal, "export", scope)))
129
134
  return;
130
135
  deps.logger?.warn?.("memory_export_failed", { scope, err: String(err) });
131
136
  sendError(res, 500, "internal.error", "memory export failed");
@@ -133,7 +138,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
133
138
  return;
134
139
  }
135
140
  case "memory-sync-scope": {
136
- const principal = gatedPrincipal(req, deps.config);
141
+ const principal = gatedPerson(req, deps.config);
137
142
  if (!principal) {
138
143
  sendUnauthorized(res, "identity");
139
144
  return;
@@ -185,7 +190,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
185
190
  sendJson(res, 200, out);
186
191
  }
187
192
  catch (err) {
188
- if (sentMemoryLayerRefusal(res, err, { kind: "operator" }))
193
+ if (sentMemoryFaceFault(res, err, layerFaceAudience(deps, principal, "sync", scope)))
189
194
  return;
190
195
  deps.logger?.warn?.("memory_sync_failed", { scope, peer: parsed.value.peer, err: String(err) });
191
196
  sendError(res, 500, "internal.error", "memory sync failed");
@@ -193,7 +198,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
193
198
  return;
194
199
  }
195
200
  case "policy": {
196
- const principal = gatedPrincipal(req, deps.config);
201
+ const principal = gatedPerson(req, deps.config);
197
202
  if (deps.config.requirePrincipal && !principal) {
198
203
  sendPrincipalRefusal(res, req, deps.config);
199
204
  return;
@@ -1,8 +1,8 @@
1
1
  import { sendJson, sendError } from "../send.js";
2
- import { gatedPrincipal, explicitOperatorOk, sendPrincipalRefusal, sessionCallerOf } from "../principal-gate.js";
3
- import { ownerlessRowOpen, sessionOwnerCellOf } from "../../security.js";
2
+ import { gatedSubject, sendPrincipalRefusal } from "../principal-gate.js";
3
+ import { admitSessionRow, enter, refuse } from "../owner-access.js";
4
4
  import { sendResumeOutcome } from "../route-ctx.js";
5
- import { assertNever, SESSION_NOT_FOUND_MESSAGE } from "../route-ctx.js";
5
+ import { assertNever } from "../route-ctx.js";
6
6
  import * as facts from "../../capability-facts.js";
7
7
  import { readResumeRestatement } from "../resume-restatement.js";
8
8
  export async function handleNotifyWake(req, res, match, ctx) {
@@ -13,11 +13,9 @@ export async function handleNotifyWake(req, res, match, ctx) {
13
13
  case "session-notify": {
14
14
  if (rateLimited(req, res) || quotaExceeded(req, res))
15
15
  return;
16
- const principal = gatedPrincipal(req, deps.config);
17
- if (deps.config.requirePrincipal && principal === undefined) {
18
- sendPrincipalRefusal(res, req, deps.config);
16
+ const notifyEntry = enter(req, res, deps, "session-notify");
17
+ if (notifyEntry === undefined)
19
18
  return;
20
- }
21
19
  const notifySession = safeDecode(match.params.sessionId);
22
20
  if (notifySession === null) {
23
21
  sendError(res, 400, "request.path_malformed", "session id segment is not valid percent-encoding");
@@ -57,16 +55,9 @@ export async function handleNotifyWake(req, res, match, ctx) {
57
55
  return;
58
56
  }
59
57
  const notifyHead = await owned.sessionStorage.headOf(notifySession);
60
- if (notifyHead === undefined) {
61
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
58
+ const notifyAdmitted = await admitSessionRow(notifyEntry, res, owned.sessionStorage, notifySession, notifyHead);
59
+ if (notifyAdmitted === undefined)
62
60
  return;
63
- }
64
- const notifyOwner = notifyHead.owner;
65
- const notifyOperator = explicitOperatorOk(principal, deps.config);
66
- if (!notifyOperator && notifyOwner !== principal && !ownerlessRowOpen(await sessionOwnerCellOf(owned.sessionStorage, notifySession, notifyOwner), sessionCallerOf(req, deps))) {
67
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
68
- return;
69
- }
70
61
  const payload = {
71
62
  task_id: nb.task_id,
72
63
  status: nb.status,
@@ -75,7 +66,7 @@ export async function handleNotifyWake(req, res, match, ctx) {
75
66
  ...(nb.seq !== undefined ? { seq: nb.seq } : {}),
76
67
  ...(nb.source !== undefined ? { source: nb.source } : {}),
77
68
  };
78
- const out = await ctx.legs.sessionNotify.deliver({ sessionId: notifySession, occupant: notifyHead, ownerlessEntryOwner: principal ?? null }, payload);
69
+ const out = await ctx.legs.sessionNotify.deliver({ sessionId: notifySession, occupant: notifyAdmitted.row, ownerlessEntryOwner: notifyEntry.caller.subject ?? null }, payload);
79
70
  switch (out.delivery) {
80
71
  case "live":
81
72
  sendJson(res, 200, { sessionId: notifySession, delivery: "live" });
@@ -90,7 +81,7 @@ export async function handleNotifyWake(req, res, match, ctx) {
90
81
  sendJson(res, 202, { sessionId: notifySession, delivery: "parked", note: "no live stream — parked in the session inbox; drained as a task_notification on the next stream open" });
91
82
  return;
92
83
  case "withdrawn":
93
- sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
84
+ refuse(notifyEntry, res, "missing");
94
85
  return;
95
86
  default:
96
87
  return assertNever(out);
@@ -103,7 +94,7 @@ export async function handleNotifyWake(req, res, match, ctx) {
103
94
  }
104
95
  if (rateLimited(req, res) || quotaExceeded(req, res) || (await leaseDenied(req, res)))
105
96
  return;
106
- const principal = gatedPrincipal(req, deps.config);
97
+ const principal = gatedSubject(req, deps.config);
107
98
  if (deps.config.requirePrincipal && principal === undefined) {
108
99
  sendPrincipalRefusal(res, req, deps.config);
109
100
  return;
@@ -1,5 +1,5 @@
1
1
  import { sendJson, sendError } from "../send.js";
2
- import { gatedPrincipal, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
2
+ import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, 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 { quotaWindowResetsAt } from "../../observability/cost-quota.js";
@@ -12,7 +12,7 @@ export async function handleObservability(req, res, match, ctx) {
12
12
  sendOperatorPrincipalsRequired(res);
13
13
  return;
14
14
  }
15
- if (!explicitOperatorOk(gatedPrincipal(req, deps.config), deps.config)) {
15
+ if (!explicitOperatorOk(gatedPerson(req, deps.config), deps.config)) {
16
16
  sendError(res, 403, "auth.operator_only", "the outcomes view is operator-only");
17
17
  return;
18
18
  }
@@ -41,7 +41,7 @@ export async function handleObservability(req, res, match, ctx) {
41
41
  return;
42
42
  }
43
43
  case "usage": {
44
- const principal = gatedPrincipal(req, deps.config);
44
+ const principal = gatedPerson(req, deps.config);
45
45
  if (!principal) {
46
46
  sendPrincipalRefusal(res, req, deps.config);
47
47
  return;
@@ -2,7 +2,7 @@
2
2
  * 跨主体投递门的**受理口**:`POST /v1/principal-inbox/messages`。
3
3
  *
4
4
  * 本口只做三件事,其余全归门(`src/org-delivery-gate.ts`,规则全文在它的头注):
5
- * ① 取发件人 —— **只**取自验过的身份面(`gatedPrincipal`),交给门的 `authedFrom` 就是 `{ scope: <那位主体> }`;
5
+ * ① 取发件人 —— **只**取自验过的身份面(`gatedSubject`),交给门的 `authedFrom` 就是 `{ scope: <那位主体> }`;
6
6
  * 体里没有发件人这个键(写了 = 词表外键,400)。没有验过的身份 ⇒ 401(身份面那一句),不论部署是否要求 principal ——
7
7
  * 门要一个发件人 scope,匿名者没有。无凭证部署上 principal 头只是调用方自报 ⇒ 本口在分派器的无凭证写门内
8
8
  * (声明行 `credentialGated`,503 `auth.service_token_required`;本地开发显式 `ALLOW_UNAUTHED_WRITES=true` 才放行);
@@ -1,5 +1,5 @@
1
1
  import { sendJson, sendError } from "../send.js";
2
- import { gatedPrincipal, sendUnauthorized } from "../principal-gate.js";
2
+ import { gatedSubject, sendUnauthorized } from "../principal-gate.js";
3
3
  import { assertNever } from "../route-ctx.js";
4
4
  import * as facts from "../../capability-facts.js";
5
5
  import { principalInboxBodyKeyIssue } from "../../request-key-closure.js";
@@ -27,7 +27,7 @@ export async function handlePrincipalInbox(req, res, match, ctx) {
27
27
  const { readJson } = ctx.helpers;
28
28
  switch (match.decl.id) {
29
29
  case "principal-inbox-messages": {
30
- const principal = gatedPrincipal(req, deps.config);
30
+ const principal = gatedSubject(req, deps.config);
31
31
  if (principal === undefined) {
32
32
  sendUnauthorized(res, "identity");
33
33
  return;
@@ -9,7 +9,7 @@
9
9
  * · **登记簿只由配置中心下发**:settings-schema 的本地读取集不收 `projects` 域 ⇒ 没有中心腿在应用配置的部署上没有登记簿 —— 两口 501
10
10
  * `capability.unavailable`,能力位 `capabilities.projects`(布尔)读同一只事实(`capability-facts.ts` 的 `projectRegistry`)答 `false`;
11
11
  * 有登记簿时答 `true`。本面不开写动词(写到哪里由另一张设计定;写面到货时另立一位,本位不改义)。
12
- * · **可见性 fail-closed**:身份判在登记簿在场判**之前**(否则「这台有没有登记簿」先于 401 泄出去);fleet 调用方(`fleetViewOf` 读档)看全部;
12
+ * · **可见性 fail-closed**:身份判在登记簿在场判**之前**(否则「这台有没有登记簿」先于 401 泄出去);fleet 调用方(列表面 `list.read` 读档(`listFilterOf`))看全部;
13
13
  * 带验过主体的调用方只看 `registeredBy` 恰是自己的登记;看不见的与不存在的同码同句(404 `not_found.project`,不给存在性预言机)。
14
14
  *
15
15
  * 归档:`archivedAt` 在场 = 已归档。列表缺省不列,`?archived=true` 只列已归档的,`?archived=false` 与缺省同;单项读不论归档与否都答(会话行引用它)。
@@ -1,6 +1,7 @@
1
1
  import { PROJECT_ID_REGEX } from "@sema-agent/core";
2
2
  import { sendJson, sendError } from "../send.js";
3
- import { fleetViewOf, sendUnauthorized } from "../principal-gate.js";
3
+ import { sendUnauthorized } from "../principal-gate.js";
4
+ import { routeListFilter } from "../owner-access.js";
4
5
  import { assertNever } from "../route-ctx.js";
5
6
  import * as facts from "../../capability-facts.js";
6
7
  import { projectByTable } from "../../trace/projection-table.js";
@@ -36,7 +37,7 @@ function readArchivedQuery(raw) {
36
37
  export async function handleProjects(req, res, match, ctx) {
37
38
  const { deps } = ctx;
38
39
  const { safeDecode } = ctx.helpers;
39
- const { fleetWide, gateOwner } = fleetViewOf(req, deps, "read");
40
+ const { fleetWide, gateOwner } = routeListFilter(req, deps, match.decl.id);
40
41
  if (!fleetWide && gateOwner === null) {
41
42
  sendUnauthorized(res, "identity");
42
43
  return;
@@ -1,5 +1,6 @@
1
1
  import { sendJson, sendError } from "../send.js";
2
- import { gatedPrincipal, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
2
+ import { limitFacts } from "../../limit-refusal.js";
3
+ import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
3
4
  import * as facts from "../../capability-facts.js";
4
5
  import { assertNever } from "../route-ctx.js";
5
6
  import { RETENTION_AUDIT_DEFAULT_LIMIT, RETENTION_AUDIT_MAX_LIMIT } from "../../plugins/retention-lane-store-sql.js";
@@ -27,7 +28,7 @@ function decodeCursor(raw) {
27
28
  }
28
29
  export async function handleRetention(req, res, match, ctx) {
29
30
  const { deps } = ctx;
30
- const principal = gatedPrincipal(req, deps.config);
31
+ const principal = gatedPerson(req, deps.config);
31
32
  if (deps.config.requirePrincipal && !principal) {
32
33
  sendPrincipalRefusal(res, req, deps.config);
33
34
  return;
@@ -64,9 +65,7 @@ async function handleHold(req, res, ctx, store, rawDomain, principal, held) {
64
65
  return;
65
66
  }
66
67
  if (domain.length > DOMAIN_MAX_CHARS) {
67
- sendError(res, 400, "request.field_invalid", "the retention domain does not fit the hold table's identity column", {
68
- detail: `domain is ${domain.length} characters; retention_hold.domain holds at most ${DOMAIN_MAX_CHARS}`,
69
- });
68
+ sendError(res, 400, "request.field_invalid", `the retention domain does not fit the hold table's identity column: domain is ${domain.length} characters; retention_hold.domain holds at most ${DOMAIN_MAX_CHARS}`, limitFacts("domain", "characters", domain.length, DOMAIN_MAX_CHARS));
70
69
  return;
71
70
  }
72
71
  let note;
@@ -84,9 +83,7 @@ async function handleHold(req, res, ctx, store, rawDomain, principal, held) {
84
83
  return;
85
84
  }
86
85
  if (n.length > NOTE_MAX_CHARS) {
87
- sendError(res, 400, "request.field_invalid", "the retention hold note is longer than this face accepts", {
88
- detail: `note is ${n.length} characters; the limit is ${NOTE_MAX_CHARS}`,
89
- });
86
+ sendError(res, 400, "request.field_invalid", `the retention hold note is longer than this face accepts: note is ${n.length} characters; the limit is ${NOTE_MAX_CHARS}`, limitFacts("note", "characters", n.length, NOTE_MAX_CHARS));
90
87
  return;
91
88
  }
92
89
  note = n;
@@ -125,7 +122,7 @@ async function handleAuditRead(res, store, search) {
125
122
  const beforeRaw = q.get("before");
126
123
  const decoded = beforeRaw === null ? undefined : decodeCursor(beforeRaw);
127
124
  if (decoded !== undefined && !decoded.ok) {
128
- sendError(res, 400, "request.query_invalid", "before must be the opaque `nextBefore` cursor from a previous page of this endpoint", { detail: decoded.why });
125
+ sendError(res, 400, "request.query_invalid", `before must be the opaque \`nextBefore\` cursor from a previous page of this endpoint: ${decoded.why}`);
129
126
  return;
130
127
  }
131
128
  const domainRaw = q.get("domain");
@@ -1,7 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { sendJson, sendError } from "../send.js";
3
- import { gatedPrincipal, explicitOperatorOk, sendOperatorPrincipalsRequired, sendUnauthorized } from "../principal-gate.js";
3
+ import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendUnauthorized } from "../principal-gate.js";
4
4
  import { assertNever } from "../route-ctx.js";
5
+ import { principalShapeProblem } from "../../principal-shape.js";
5
6
  import * as facts from "../../capability-facts.js";
6
7
  import { createLogger } from "../../observability/logger.js";
7
8
  import { RULE_IMPORT_RETRY_AFTER_SEC, RULE_SCOPE_REFUSAL_SENTENCE, MAX_RULE_SCOPE_CHARS, buildCcImportLayerRootRefusal, parseRuleScope, serializeRuleScope } from "../../rules-consent.js";
@@ -75,7 +76,7 @@ const RuleIdentityBodySchema = z
75
76
  behavior: z.enum(RULE_BEHAVIORS),
76
77
  rule: z.string().min(1).max(1024),
77
78
  scope: z.string().min(1).max(MAX_RULE_SCOPE_CHARS),
78
- principal: z.string().min(1).max(190).optional(),
79
+ principal: z.string().optional(),
79
80
  })
80
81
  .strict();
81
82
  const RULES_CURSOR_FORMAT = 2;
@@ -100,7 +101,7 @@ export async function handleRules(req, res, match, ctx) {
100
101
  const { readJson, rateLimited } = ctx.helpers;
101
102
  if (rateLimited(req, res))
102
103
  return;
103
- const principal = gatedPrincipal(req, deps.config);
104
+ const principal = gatedPerson(req, deps.config);
104
105
  if (principal === undefined) {
105
106
  sendUnauthorized(res, "identity");
106
107
  return;
@@ -245,8 +246,13 @@ function resolveTargetPrincipal(requested, caller, config) {
245
246
  return { ok: false, why: "operator_principals_empty" };
246
247
  if (!explicitOperatorOk(caller, config))
247
248
  return { ok: false, why: "not_operator" };
249
+ if (principalShapeProblem(requested) !== undefined)
250
+ return { ok: false, why: "not_a_principal" };
248
251
  return { ok: true, principal: requested };
249
252
  }
253
+ function sendTargetNotAPrincipal(res) {
254
+ sendError(res, 400, "request.field_invalid", "principal must name a principal a caller can authenticate as (a visible-character, well-formed name, not a reserved identifier, at most the principal byte length)", { field: "principal" });
255
+ }
250
256
  async function handleRuleList(res, search, caller, lane, config) {
251
257
  const q = new URLSearchParams(search);
252
258
  const target = resolveTargetPrincipal(q.get("principal") ?? undefined, caller, config);
@@ -258,6 +264,9 @@ async function handleRuleList(res, search, caller, lane, config) {
258
264
  case "not_operator":
259
265
  sendError(res, 403, "auth.operator_only", "reading another principal's rules is an operator-only action");
260
266
  return;
267
+ case "not_a_principal":
268
+ sendTargetNotAPrincipal(res);
269
+ return;
261
270
  default:
262
271
  return assertNever(target.why);
263
272
  }
@@ -378,6 +387,9 @@ async function handleRuleWrite(res, rawBody, caller, lane, config) {
378
387
  case "not_operator":
379
388
  sendError(res, 403, "auth.operator_only", "writing another principal's rules is an operator-only action");
380
389
  return;
390
+ case "not_a_principal":
391
+ sendTargetNotAPrincipal(res);
392
+ return;
381
393
  default:
382
394
  return assertNever(target.why);
383
395
  }
@@ -392,9 +404,9 @@ async function handleRuleWrite(res, rawBody, caller, lane, config) {
392
404
  return;
393
405
  case "rejected":
394
406
  logger.info("rule write refused", { reason: written.reason, detail: written.detail });
395
- sendError(res, 400, "request.field_invalid", "this rule was not written — `reason` names which check refused it and `detail` says why", {
407
+ sendError(res, 400, "request.field_invalid", `this rule was not written — \`reason\` names which check refused it: ${written.detail}`, {
396
408
  reason: written.reason,
397
- detail: written.detail,
409
+ ...(written.canonical !== undefined ? { canonical: written.canonical } : {}),
398
410
  });
399
411
  return;
400
412
  case "failed":
@@ -427,6 +439,9 @@ async function handleRuleRevoke(res, rawBody, caller, lane, config) {
427
439
  case "not_operator":
428
440
  sendError(res, 403, "auth.operator_only", "revoking another principal's rules is an operator-only action");
429
441
  return;
442
+ case "not_a_principal":
443
+ sendTargetNotAPrincipal(res);
444
+ return;
430
445
  default:
431
446
  return assertNever(target.why);
432
447
  }
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * ── 权限法条(steer 车道逐字)────────────────────────────────────────────────────────────────────
12
12
  * core 不认证:持有活流句柄即能力。**本面拥有 verified-principal / 会话所有权判定**:裸 sessionId 中继会让任何人
13
- * 关掉任何人的记忆(可用性攻击)。所以:身份来自 `gatedPrincipal`(验证过的身份,不是可自造的头),run 属主不符
13
+ * 关掉任何人的记忆(可用性攻击)。所以:身份来自 `gatedSubject`(验证过的身份,不是可自造的头),run 属主不符
14
14
  * ⇒ 404 `not_found.run` **同串反枚举**(与 steer/interrupt 同判)。core 在翻转时刻**重新裁决** per-principal
15
15
  * entitlement(`RuntimeCaps.allowMemoryOptOut` under `memoryCapturePolicy`,fresh resolve)—— 被拒 ⇒ typed
16
16
  * `memory.capture_optout_denied` + 零记录残留;server 不复刻那条裁决。
@@ -28,7 +28,7 @@
28
28
  * `sessionBackgroundable` 同谓词):老 worker 键缺席 ⇒ 壳不渲入口(假 affordance 纪律)。
29
29
  */
30
30
  import type { IncomingMessage, ServerResponse } from "node:http";
31
- import { type RouteCtx, type RouteMatch, type RouteIdsOf } from "../route-ctx.js";
31
+ import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
32
32
  export declare function handleRunMemoryCapture(req: IncomingMessage, res: ServerResponse, match: RouteMatch<RunMemoryCaptureRouteId>, ctx: RouteCtx): Promise<void>;
33
33
  export declare const RUN_MEMORY_CAPTURE_ROUTES: readonly [{
34
34
  readonly id: "run-memory-capture-optout";
@@ -1,8 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { isParkedRunStatus, isTerminalRunStatus, runProvenElsewhere } from "../../plugins/store-contracts.js";
3
3
  import { sendJson, sendError } from "../send.js";
4
- import { gatedPrincipal, sendPrincipalRefusal } from "../principal-gate.js";
5
- import { RUN_NOT_FOUND_MESSAGE, runNotFoundMessage } from "../route-ctx.js";
4
+ import { admitRunById, enter } from "../owner-access.js";
6
5
  import { assertNever } from "../route-ctx.js";
7
6
  import * as facts from "../../capability-facts.js";
8
7
  const BodySchema = z.object({ reason: z.string().min(1).max(500).optional() }).strict();
@@ -18,24 +17,19 @@ export async function handleRunMemoryCapture(req, res, match, ctx) {
18
17
  return;
19
18
  }
20
19
  const runStore = runs.runStore;
21
- const principal = gatedPrincipal(req, deps.config);
22
- if (deps.config.requirePrincipal && principal === undefined) {
23
- sendPrincipalRefusal(res, req, deps.config);
20
+ const entry = enter(req, res, deps, match.decl.id);
21
+ if (entry === undefined)
24
22
  return;
25
- }
26
23
  const taskId = match.params.taskId;
27
24
  const parsed = BodySchema.safeParse((await ctx.helpers.readJson(req)) ?? {});
28
25
  if (!parsed.success) {
29
26
  sendError(res, 400, "request.body_shape", "body must be {} or { reason: string (non-empty, at most 500 chars) } — the session memory-capture opt-out verb takes no other keys");
30
27
  return;
31
28
  }
32
- const run = await runStore.getRun(taskId);
33
- if (!run) {
34
- sendError(res, 404, "not_found.run", runNotFoundMessage(taskId));
35
- return;
36
- }
37
- if (!ctx.helpers.runOwnerOk(req, res, run.owner))
29
+ const admitted = (await admitRunById(entry, res, runStore, taskId));
30
+ if (admitted === undefined)
38
31
  return;
32
+ const run = admitted.row;
39
33
  const live = ctx.registry.steerableRuns.get(taskId);
40
34
  if (live) {
41
35
  try {