@sema-agent/server 7.147.0 → 7.149.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (790) hide show
  1. package/MIGRATION.md +1468 -24
  2. package/README.md +35 -7
  3. package/README.zh-CN.md +18 -8
  4. package/USAGE.md +444 -193
  5. package/deploy/sema-up/README.md +16 -5
  6. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  7. package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
  8. package/deploy/sema-up/chart/values.yaml +3 -2
  9. package/deploy/sema-up/cluster-up.sh +74 -176
  10. package/deploy/sema-up/kube-up.sh +29 -49
  11. package/deploy/sema-up/lib/chart-run.sh +23 -0
  12. package/deploy/sema-up/lib/dataroot.sh +3 -3
  13. package/deploy/sema-up/lib/health.sh +62 -13
  14. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  15. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  16. package/deploy/sema-up/lib/regcred.py +8 -0
  17. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  18. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  19. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  20. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  21. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  22. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  23. package/deploy/sema-up/lib/render-stack.py +17 -0
  24. package/deploy/sema-up/lib/shell-text.sh +87 -0
  25. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  26. package/deploy/sema-up/lib/usage-head.txt +1 -0
  27. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  28. package/deploy/sema-up/preflight.sh +10 -8
  29. package/deploy/sema-up/sema-up.sh +14 -39
  30. package/deploy/sema-up/smoke.sh +7 -6
  31. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  32. package/deploy/sema-up/stack/compose.yaml +13 -1
  33. package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
  34. package/dist/adoption/plan.d.ts +24 -0
  35. package/dist/adoption/plan.js +53 -1
  36. package/dist/adoption/runner.d.ts +10 -1
  37. package/dist/adoption/runner.js +36 -16
  38. package/dist/approval-card.d.ts +36 -38
  39. package/dist/approval-gate-currency.js +3 -2
  40. package/dist/approval-leg-origin.d.ts +33 -0
  41. package/dist/approval-leg-origin.js +4 -0
  42. package/dist/approval-reconciler.d.ts +4 -13
  43. package/dist/approval-reconciler.js +2 -2
  44. package/dist/approval.d.ts +13 -11
  45. package/dist/approval.js +3 -3
  46. package/dist/audit.d.ts +10 -3
  47. package/dist/audit.js +15 -7
  48. package/dist/auth-bridge.d.ts +9 -15
  49. package/dist/auth-bridge.js +4 -11
  50. package/dist/auth-keys.d.ts +10 -1
  51. package/dist/auth-keys.js +8 -0
  52. package/dist/auto-mode-face.d.ts +10 -7
  53. package/dist/auto-mode-face.js +7 -4
  54. package/dist/background-agent-name.d.ts +19 -1
  55. package/dist/background-agent-name.js +12 -2
  56. package/dist/background-session-reap.d.ts +1 -1
  57. package/dist/bake-runner/main.js +9 -6
  58. package/dist/bench/s1/arms.js +6 -5
  59. package/dist/bench/s1/live-deps.js +5 -2
  60. package/dist/bench/s1/run-firm.js +6 -5
  61. package/dist/bind-host.d.ts +25 -0
  62. package/dist/bind-host.js +25 -0
  63. package/dist/boot/adoption.d.ts +3 -0
  64. package/dist/boot/adoption.js +1 -0
  65. package/dist/boot/deployment-mods.d.ts +1 -1
  66. package/dist/boot/execution-env.d.ts +17 -7
  67. package/dist/boot/execution-env.js +47 -42
  68. package/dist/boot/execution-lane.d.ts +6 -4
  69. package/dist/boot/execution-lane.js +3 -1
  70. package/dist/boot/exit-boundary.d.ts +2 -2
  71. package/dist/boot/exit-boundary.js +6 -5
  72. package/dist/boot/fatal-exit.d.ts +3 -5
  73. package/dist/boot/fatal-exit.js +2 -2
  74. package/dist/boot/leader.d.ts +15 -0
  75. package/dist/boot/leader.js +17 -15
  76. package/dist/boot/memory-consolidation.d.ts +37 -29
  77. package/dist/boot/memory-consolidation.js +11 -5
  78. package/dist/boot/org-delivery.d.ts +3 -2
  79. package/dist/boot/org-memory.js +1 -1
  80. package/dist/boot/parked-revive-gate.js +2 -2
  81. package/dist/boot/reapers.d.ts +4 -3
  82. package/dist/boot/reapers.js +19 -16
  83. package/dist/boot/resolve-spec.d.ts +5 -3
  84. package/dist/boot/resolve-spec.js +60 -70
  85. package/dist/boot/retention-lane.d.ts +4 -4
  86. package/dist/boot/retention-lane.js +2 -2
  87. package/dist/boot/runner-deps.d.ts +28 -7
  88. package/dist/boot/runner-deps.js +14 -5
  89. package/dist/boot/runtime-caps.d.ts +2 -2
  90. package/dist/boot/runtime-caps.js +16 -2
  91. package/dist/boot/session-faces.d.ts +16 -7
  92. package/dist/boot/session-faces.js +114 -94
  93. package/dist/boot/shutdown.d.ts +5 -4
  94. package/dist/boot/shutdown.js +6 -4
  95. package/dist/boot/stage-01-config.d.ts +1 -0
  96. package/dist/boot/stage-01-config.js +13 -4
  97. package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
  98. package/dist/boot/stage-02-web-admin-pull.js +16 -3
  99. package/dist/boot/stage-03-store-backend.d.ts +4 -0
  100. package/dist/boot/stage-03-store-backend.js +4 -3
  101. package/dist/boot/stage-04-stores.d.ts +3 -0
  102. package/dist/boot/stage-04-stores.js +2 -2
  103. package/dist/boot/stage-05-execution-env.d.ts +8 -3
  104. package/dist/boot/stage-05-execution-env.js +2 -2
  105. package/dist/boot/stage-06-runners.d.ts +12 -13
  106. package/dist/boot/stage-06-runners.js +23 -15
  107. package/dist/boot/stage-07-capability-layer.d.ts +13 -9
  108. package/dist/boot/stage-07-capability-layer.js +5 -3
  109. package/dist/boot/stage-08-reapers.d.ts +13 -9
  110. package/dist/boot/stage-08-reapers.js +3 -3
  111. package/dist/boot/stage-09-leader.d.ts +14 -16
  112. package/dist/boot/stage-09-leader.js +12 -4
  113. package/dist/boot/stage-10-http-server.d.ts +14 -16
  114. package/dist/boot/stage-10-http-server.js +7 -4
  115. package/dist/boot/store-evidence.d.ts +20 -0
  116. package/dist/boot/store-evidence.js +13 -0
  117. package/dist/boot/stores.d.ts +6 -0
  118. package/dist/boot/stores.js +41 -27
  119. package/dist/boot/task-list-lane.d.ts +4 -4
  120. package/dist/boot/web-admin.d.ts +4 -2
  121. package/dist/boot/web-admin.js +55 -35
  122. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  123. package/dist/boot-reclaim.d.ts +3 -1
  124. package/dist/boot-reclaim.js +1 -1
  125. package/dist/brain.d.ts +7 -18
  126. package/dist/brain.js +5 -17
  127. package/dist/budget.js +6 -6
  128. package/dist/capabilities/center-plugins.d.ts +7 -1
  129. package/dist/capabilities/center-plugins.js +32 -10
  130. package/dist/capabilities/center-wiring.js +1 -1
  131. package/dist/capabilities/composite-members.d.ts +2 -2
  132. package/dist/capabilities/composite-members.js +2 -2
  133. package/dist/capabilities/repo-tools.d.ts +2 -0
  134. package/dist/capabilities/repo-tools.js +14 -12
  135. package/dist/capabilities/scenarios.d.ts +6 -15
  136. package/dist/capabilities/scenarios.js +11 -16
  137. package/dist/capabilities/skills.d.ts +1 -1
  138. package/dist/capabilities/tool-defer.d.ts +1 -1
  139. package/dist/capability-facts.d.ts +39 -11
  140. package/dist/capability-facts.js +35 -7
  141. package/dist/card-settle-stored-scope.d.ts +56 -0
  142. package/dist/card-settle-stored-scope.js +27 -0
  143. package/dist/card-void.d.ts +8 -13
  144. package/dist/card-void.js +2 -7
  145. package/dist/center-credential-renewer.d.ts +6 -2
  146. package/dist/center-credential-renewer.js +7 -3
  147. package/dist/config-catalog.d.ts +28 -1
  148. package/dist/config-catalog.js +95 -85
  149. package/dist/config-dir-trust.d.ts +37 -4
  150. package/dist/config-dir-trust.js +88 -44
  151. package/dist/config-invariants.d.ts +43 -3
  152. package/dist/config-invariants.js +69 -5
  153. package/dist/config-lkg.d.ts +23 -1
  154. package/dist/config-lkg.js +17 -3
  155. package/dist/config-provider.d.ts +9 -9
  156. package/dist/config-provider.js +25 -110
  157. package/dist/config-pull-failure.d.ts +50 -0
  158. package/dist/config-pull-failure.js +48 -0
  159. package/dist/config-types.d.ts +62 -21
  160. package/dist/config.d.ts +14 -21
  161. package/dist/config.js +141 -64
  162. package/dist/context-window-notice.d.ts +31 -0
  163. package/dist/context-window-notice.js +28 -0
  164. package/dist/delegated-session-owner.d.ts +1 -1
  165. package/dist/deleted-session-ids.d.ts +3 -2
  166. package/dist/deployment-governance.d.ts +3 -3
  167. package/dist/deployment-shape.d.ts +46 -11
  168. package/dist/deployment-shape.js +8 -0
  169. package/dist/egress-redirect.d.ts +25 -7
  170. package/dist/egress-redirect.js +20 -2
  171. package/dist/elicitation.d.ts +6 -5
  172. package/dist/elicitation.js +23 -22
  173. package/dist/engine-identity.d.ts +28 -0
  174. package/dist/engine-identity.js +10 -0
  175. package/dist/entry-problems.d.ts +5 -7
  176. package/dist/entry-problems.js +1 -1
  177. package/dist/env-facts.js +2 -1
  178. package/dist/env-name-allowlist-knobs.d.ts +6 -5
  179. package/dist/env-name-allowlist-knobs.js +5 -0
  180. package/dist/env-witness.d.ts +7 -0
  181. package/dist/env-witness.js +16 -0
  182. package/dist/execution-lane-caps.d.ts +25 -23
  183. package/dist/execution-lane-caps.js +18 -26
  184. package/dist/execution-placement.d.ts +58 -18
  185. package/dist/execution-placement.js +41 -2
  186. package/dist/field-conflict.d.ts +7 -11
  187. package/dist/field-conflict.js +3 -3
  188. package/dist/file-history-capture.d.ts +3 -3
  189. package/dist/file-history-disclosure.js +1 -0
  190. package/dist/fleet/fleet-bus.d.ts +21 -3
  191. package/dist/fleet/fleet-bus.js +35 -25
  192. package/dist/fleet/fleet-reconciler.js +2 -2
  193. package/dist/fleet/serving-lease.js +3 -3
  194. package/dist/fleet-client.js +3 -3
  195. package/dist/fleet-lease.d.ts +0 -1
  196. package/dist/fleet-lease.js +4 -5
  197. package/dist/history-anchor.d.ts +23 -3
  198. package/dist/history-anchor.js +24 -4
  199. package/dist/hitl-delivery.d.ts +90 -0
  200. package/dist/hitl-delivery.js +98 -0
  201. package/dist/hooks/classic-stations.d.ts +8 -11
  202. package/dist/hooks/classic-stations.js +0 -7
  203. package/dist/hooks/command-spawn.d.ts +7 -2
  204. package/dist/hooks/command-spawn.js +13 -6
  205. package/dist/hooks/hook-llm.d.ts +5 -1
  206. package/dist/hooks/hook-llm.js +24 -15
  207. package/dist/hooks/hook-runner.d.ts +72 -57
  208. package/dist/hooks/hook-runner.js +271 -193
  209. package/dist/host-lsp-manager.d.ts +22 -8
  210. package/dist/host-lsp-manager.js +4 -1
  211. package/dist/http/active-run-conflict.d.ts +2 -43
  212. package/dist/http/active-run-conflict.js +3 -7
  213. package/dist/http/admission.d.ts +4 -18
  214. package/dist/http/admission.js +76 -79
  215. package/dist/http/approval-sweeps.d.ts +3 -3
  216. package/dist/http/approval-sweeps.js +56 -31
  217. package/dist/http/caller-trust.d.ts +8 -10
  218. package/dist/http/caller-trust.js +1 -2
  219. package/dist/http/claim-heartbeat.d.ts +49 -0
  220. package/dist/http/claim-heartbeat.js +46 -0
  221. package/dist/http/claimed-run.d.ts +16 -8
  222. package/dist/http/claimed-run.js +8 -0
  223. package/dist/http/dispatch.d.ts +8 -1
  224. package/dist/http/dispatch.js +78 -30
  225. package/dist/http/durable-run-leg.d.ts +11 -4
  226. package/dist/http/durable-run-leg.js +45 -21
  227. package/dist/http/execution-context.d.ts +122 -47
  228. package/dist/http/execution-context.js +135 -43
  229. package/dist/http/health-reader.d.ts +36 -0
  230. package/dist/http/health-reader.js +21 -0
  231. package/dist/http/health-self-report.d.ts +9 -9
  232. package/dist/http/health-self-report.js +4 -4
  233. package/dist/http/idempotency.d.ts +9 -5
  234. package/dist/http/idempotency.js +4 -4
  235. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  236. package/dist/http/memory-compliance-failure-reply.js +4 -2
  237. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  238. package/dist/http/memory-face-fault-reply.js +71 -0
  239. package/dist/http/memory-store-refusal-reply.d.ts +1 -1
  240. package/dist/http/memory-store-refusal-reply.js +3 -0
  241. package/dist/http/owner-access.d.ts +392 -67
  242. package/dist/http/owner-access.js +370 -35
  243. package/dist/http/principal-gate.d.ts +39 -89
  244. package/dist/http/principal-gate.js +26 -68
  245. package/dist/http/refusal-body.d.ts +35 -2
  246. package/dist/http/refusal-body.js +34 -0
  247. package/dist/http/request-guards.d.ts +9 -13
  248. package/dist/http/request-guards.js +34 -68
  249. package/dist/http/resume-composition.d.ts +37 -0
  250. package/dist/http/resume-composition.js +18 -0
  251. package/dist/http/resume-ctx-read.d.ts +46 -12
  252. package/dist/http/resume-ctx-read.js +31 -6
  253. package/dist/http/resume-legs.d.ts +54 -19
  254. package/dist/http/resume-legs.js +408 -196
  255. package/dist/http/retired-skill-manifest.d.ts +1 -1
  256. package/dist/http/route-ctx.d.ts +31 -32
  257. package/dist/http/routes/a2a-serve.d.ts +43 -5
  258. package/dist/http/routes/a2a-serve.js +60 -37
  259. package/dist/http/routes/admin-config-refresh.js +2 -2
  260. package/dist/http/routes/admin-drain.js +2 -2
  261. package/dist/http/routes/admin-memory-optout.js +4 -3
  262. package/dist/http/routes/adoption.d.ts +3 -0
  263. package/dist/http/routes/adoption.js +17 -10
  264. package/dist/http/routes/agents-roster.js +13 -7
  265. package/dist/http/routes/approvals-assistant.js +73 -67
  266. package/dist/http/routes/attachments.js +2 -2
  267. package/dist/http/routes/background.d.ts +3 -3
  268. package/dist/http/routes/background.js +9 -17
  269. package/dist/http/routes/capabilities.js +16 -19
  270. package/dist/http/routes/config-catalog.js +2 -2
  271. package/dist/http/routes/devices.d.ts +3 -3
  272. package/dist/http/routes/devices.js +4 -4
  273. package/dist/http/routes/diagnostics.d.ts +29 -3
  274. package/dist/http/routes/diagnostics.js +49 -18
  275. package/dist/http/routes/engine.js +2 -2
  276. package/dist/http/routes/fleet.js +5 -3
  277. package/dist/http/routes/images.js +10 -6
  278. package/dist/http/routes/leader.d.ts +7 -2
  279. package/dist/http/routes/leader.js +12 -3
  280. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  281. package/dist/http/routes/mcp-reconnect.js +7 -15
  282. package/dist/http/routes/memory-bundle.js +4 -7
  283. package/dist/http/routes/memory-compliance.js +4 -4
  284. package/dist/http/routes/memory-consolidation.js +6 -9
  285. package/dist/http/routes/memory-origin.d.ts +2 -0
  286. package/dist/http/routes/memory-origin.js +7 -8
  287. package/dist/http/routes/memory-policy.js +17 -12
  288. package/dist/http/routes/notify-wake.js +10 -19
  289. package/dist/http/routes/observability.js +3 -3
  290. package/dist/http/routes/principal-inbox.d.ts +4 -2
  291. package/dist/http/routes/principal-inbox.js +5 -4
  292. package/dist/http/routes/projects.d.ts +1 -1
  293. package/dist/http/routes/projects.js +3 -2
  294. package/dist/http/routes/retention-ops.js +6 -9
  295. package/dist/http/routes/rules.js +20 -5
  296. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  297. package/dist/http/routes/run-memory-capture.js +6 -12
  298. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  299. package/dist/http/routes/run-permission-mode.js +10 -17
  300. package/dist/http/routes/runs.js +155 -237
  301. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  302. package/dist/http/routes/session-memory-sync.js +7 -13
  303. package/dist/http/routes/session-sync.d.ts +28 -7
  304. package/dist/http/routes/session-sync.js +63 -50
  305. package/dist/http/routes/sessions-list.d.ts +3 -3
  306. package/dist/http/routes/sessions-list.js +9 -9
  307. package/dist/http/routes/sessions.js +87 -124
  308. package/dist/http/routes/shared-memory.js +6 -6
  309. package/dist/http/routes/side-query.js +2 -2
  310. package/dist/http/routes/tasks.js +237 -187
  311. package/dist/http/routes/trace-usage.d.ts +0 -12
  312. package/dist/http/routes/trace-usage.js +40 -46
  313. package/dist/http/routes/workflows.d.ts +39 -4
  314. package/dist/http/routes/workflows.js +42 -14
  315. package/dist/http/run-concurrency-cap.d.ts +20 -12
  316. package/dist/http/run-concurrency-cap.js +39 -26
  317. package/dist/http/run-read-face.d.ts +3 -5
  318. package/dist/http/run-read-face.js +8 -13
  319. package/dist/http/send.d.ts +12 -3
  320. package/dist/http/send.js +42 -6
  321. package/dist/http/server.d.ts +43 -45
  322. package/dist/http/server.js +61 -11
  323. package/dist/http/sse-log.d.ts +17 -10
  324. package/dist/http/sse-log.js +7 -7
  325. package/dist/http/stored-body-replay.d.ts +12 -0
  326. package/dist/http/stored-body-replay.js +2 -2
  327. package/dist/http/submit-ctx.d.ts +17 -8
  328. package/dist/http/submit-ctx.js +8 -5
  329. package/dist/http/submit-replay.d.ts +19 -6
  330. package/dist/http/submit-replay.js +18 -6
  331. package/dist/http/sync-submit-body.d.ts +3 -4
  332. package/dist/http/sync-submit-body.js +4 -5
  333. package/dist/http/wire-types.d.ts +4 -3
  334. package/dist/identity-source.d.ts +36 -5
  335. package/dist/identity-source.js +27 -0
  336. package/dist/index.d.ts +4 -1
  337. package/dist/index.js +2 -0
  338. package/dist/key-resolver.d.ts +32 -0
  339. package/dist/key-resolver.js +23 -9
  340. package/dist/leader/diffup.js +2 -1
  341. package/dist/leader/endpoint.d.ts +26 -5
  342. package/dist/leader/endpoint.js +154 -14
  343. package/dist/leader/fanout.d.ts +3 -0
  344. package/dist/leader/fanout.js +78 -63
  345. package/dist/leader/leader.d.ts +16 -0
  346. package/dist/leader/leader.js +43 -3
  347. package/dist/leader/merge.d.ts +9 -1
  348. package/dist/leader/merge.js +16 -1
  349. package/dist/leader/repair-wire.js +1 -1
  350. package/dist/leader/wire.d.ts +36 -3
  351. package/dist/leader/wire.js +59 -18
  352. package/dist/leg-facts.d.ts +7 -2
  353. package/dist/leg-facts.js +1 -0
  354. package/dist/local-store-declaration.d.ts +54 -0
  355. package/dist/local-store-declaration.js +59 -0
  356. package/dist/lsp-evict.d.ts +6 -4
  357. package/dist/lsp-evict.js +2 -3
  358. package/dist/mcp-assertion-header.d.ts +1 -1
  359. package/dist/mcp-assertion-header.js +1 -1
  360. package/dist/memory-operator-faces.d.ts +5 -4
  361. package/dist/memory-operator-faces.js +1 -1
  362. package/dist/memory-project-layer.js +1 -1
  363. package/dist/memory-scope.d.ts +33 -6
  364. package/dist/memory-scope.js +68 -19
  365. package/dist/memory-store-refusal.d.ts +5 -2
  366. package/dist/memory-sync-client.d.ts +3 -2
  367. package/dist/memory-sync-client.js +8 -5
  368. package/dist/model-compat.d.ts +17 -8
  369. package/dist/model-compat.js +6 -2
  370. package/dist/model-context-window.d.ts +57 -0
  371. package/dist/model-context-window.js +21 -0
  372. package/dist/model-entry-headers.d.ts +46 -4
  373. package/dist/model-entry-headers.js +2 -2
  374. package/dist/model-entry-refusal.d.ts +40 -20
  375. package/dist/model-entry-refusal.js +57 -30
  376. package/dist/model-plane-face.d.ts +19 -11
  377. package/dist/model-plane-face.js +9 -1
  378. package/dist/model-plane-probe.d.ts +2 -0
  379. package/dist/model-plane-probe.js +17 -0
  380. package/dist/model-provider.d.ts +3 -3
  381. package/dist/model-reach-scope.d.ts +2 -1
  382. package/dist/model-route-endpoint.d.ts +9 -5
  383. package/dist/model-route-endpoint.js +29 -7
  384. package/dist/model-select.d.ts +16 -0
  385. package/dist/model-select.js +4 -0
  386. package/dist/mountinfo.d.ts +37 -0
  387. package/dist/mountinfo.js +47 -0
  388. package/dist/namespaced-rule-name.d.ts +23 -14
  389. package/dist/namespaced-rule-name.js +8 -11
  390. package/dist/net-address.d.ts +1 -1
  391. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  392. package/dist/observability/corrupt-read-seat.js +5 -3
  393. package/dist/observability/fail-open.d.ts +72 -40
  394. package/dist/observability/fail-open.js +74 -40
  395. package/dist/observability/logger.d.ts +22 -1
  396. package/dist/observability/logger.js +89 -12
  397. package/dist/observability/metrics.js +4 -5
  398. package/dist/observability/otel-exporter.js +2 -1
  399. package/dist/observability/principal-context.d.ts +14 -7
  400. package/dist/observability/principal-context.js +8 -3
  401. package/dist/observability/run-terminal.d.ts +7 -1
  402. package/dist/observability/run-terminal.js +6 -2
  403. package/dist/observability/secret-env-scrub.d.ts +1 -1
  404. package/dist/observability/secret-env-scrub.js +1 -1
  405. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  406. package/dist/orchestration/hardened-vm-runner.js +11 -5
  407. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  408. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  409. package/dist/orchestration/hardened-vm-worker.js +2 -1
  410. package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
  411. package/dist/orchestration/workflow-completion-inbox.js +3 -2
  412. package/dist/org-delivery-gate.d.ts +36 -10
  413. package/dist/org-delivery-gate.js +12 -8
  414. package/dist/outbound-dispatcher.d.ts +1 -1
  415. package/dist/outbound-dispatcher.js +6 -12
  416. package/dist/owner-brands.d.ts +81 -0
  417. package/dist/owner-brands.js +42 -0
  418. package/dist/owner-faces.d.ts +532 -0
  419. package/dist/owner-faces.js +126 -0
  420. package/dist/park-row-commit.d.ts +67 -0
  421. package/dist/park-row-commit.js +76 -0
  422. package/dist/parked-decide.d.ts +76 -12
  423. package/dist/parked-decide.js +152 -11
  424. package/dist/parked-revive-surface.d.ts +14 -4
  425. package/dist/parked-revive-surface.js +5 -4
  426. package/dist/peer-directory.d.ts +7 -9
  427. package/dist/peer-directory.js +3 -2
  428. package/dist/permission-rule-vocab.d.ts +53 -8
  429. package/dist/permission-rule-vocab.js +30 -2
  430. package/dist/plugins/adoption-log-sql.d.ts +3 -25
  431. package/dist/plugins/adoption-log-sql.js +23 -21
  432. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  433. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  434. package/dist/plugins/approval-ask-store-file.d.ts +18 -7
  435. package/dist/plugins/approval-ask-store-file.js +37 -14
  436. package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
  437. package/dist/plugins/approval-ask-store-memory.js +24 -10
  438. package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
  439. package/dist/plugins/approval-ask-store-sql.js +44 -15
  440. package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
  441. package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
  442. package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
  443. package/dist/plugins/approval-exemption-skill-m46.js +21 -0
  444. package/dist/plugins/approval-exemption-store.d.ts +32 -2
  445. package/dist/plugins/approval-exemption-store.js +42 -19
  446. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  447. package/dist/plugins/approval-nonce-store.js +72 -23
  448. package/dist/plugins/blob-backend.d.ts +2 -0
  449. package/dist/plugins/blob-backend.js +9 -6
  450. package/dist/plugins/caching-session-store.d.ts +13 -1
  451. package/dist/plugins/caching-session-store.js +43 -4
  452. package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
  453. package/dist/plugins/checkpoint-index-columns.js +36 -1
  454. package/dist/plugins/checkpoint-store-face.d.ts +83 -10
  455. package/dist/plugins/checkpoint-store-face.js +18 -1
  456. package/dist/plugins/device-store-sql.js +1 -0
  457. package/dist/plugins/ensure-index.d.ts +13 -1
  458. package/dist/plugins/ensure-index.js +154 -21
  459. package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
  460. package/dist/plugins/ensure-schema-lock-policy.js +76 -9
  461. package/dist/plugins/file-run-store.d.ts +85 -32
  462. package/dist/plugins/file-run-store.js +177 -94
  463. package/dist/plugins/host-platform.d.ts +24 -3
  464. package/dist/plugins/host-platform.js +15 -1
  465. package/dist/plugins/image-bake-store-sql.js +2 -0
  466. package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
  467. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  468. package/dist/plugins/k8s-pod-reaper.js +0 -1
  469. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  470. package/dist/plugins/leader-run-store-sql.js +34 -4
  471. package/dist/plugins/local-checkpoint-store.d.ts +62 -23
  472. package/dist/plugins/local-checkpoint-store.js +197 -77
  473. package/dist/plugins/local-data-dir-modes-m39.js +2 -1
  474. package/dist/plugins/local-data-root-admission.d.ts +52 -0
  475. package/dist/plugins/local-data-root-admission.js +100 -0
  476. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  477. package/dist/plugins/local-docker-capacity.js +194 -0
  478. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  479. package/dist/plugins/local-docker-reaper.js +102 -0
  480. package/dist/plugins/local-engine-high-water.d.ts +29 -6
  481. package/dist/plugins/local-engine-high-water.js +27 -19
  482. package/dist/plugins/local-session-store.d.ts +458 -140
  483. package/dist/plugins/local-session-store.js +906 -292
  484. package/dist/plugins/local-session-window.d.ts +3 -2
  485. package/dist/plugins/local-session-window.js +3 -2
  486. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  487. package/dist/plugins/local-task-attachment-store.d.ts +18 -1
  488. package/dist/plugins/local-task-attachment-store.js +22 -1
  489. package/dist/plugins/memory-embedder.js +9 -7
  490. package/dist/plugins/memory-engine-pg.d.ts +3 -2
  491. package/dist/plugins/memory-engine-pg.js +14 -5
  492. package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
  493. package/dist/plugins/memory-engine-sql-apply.js +6 -8
  494. package/dist/plugins/memory-engine-tidb.d.ts +4 -2
  495. package/dist/plugins/memory-engine-tidb.js +11 -2
  496. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  497. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  498. package/dist/plugins/memory-run-store.d.ts +53 -36
  499. package/dist/plugins/memory-run-store.js +116 -88
  500. package/dist/plugins/one-time-migration-marker.d.ts +26 -0
  501. package/dist/plugins/one-time-migration-marker.js +13 -0
  502. package/dist/plugins/one-time-migrations.d.ts +214 -47
  503. package/dist/plugins/one-time-migrations.js +481 -135
  504. package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
  505. package/dist/plugins/org-delivery-quota-store.js +31 -15
  506. package/dist/plugins/permission-rule-store-file.d.ts +3 -3
  507. package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
  508. package/dist/plugins/permission-rule-store-sql.js +11 -95
  509. package/dist/plugins/pg-pool.d.ts +2 -32
  510. package/dist/plugins/pg-pool.js +24 -17
  511. package/dist/plugins/remote-env-device.d.ts +3 -2
  512. package/dist/plugins/remote-env-e2b.d.ts +8 -32
  513. package/dist/plugins/remote-env-e2b.js +44 -32
  514. package/dist/plugins/remote-env-host.d.ts +51 -17
  515. package/dist/plugins/remote-env-host.js +111 -42
  516. package/dist/plugins/remote-env-k8s.d.ts +40 -45
  517. package/dist/plugins/remote-env-k8s.js +111 -60
  518. package/dist/plugins/remote-env-local-docker.d.ts +152 -15
  519. package/dist/plugins/remote-env-local-docker.js +352 -72
  520. package/dist/plugins/remote-scratchpad.js +4 -0
  521. package/dist/plugins/retention-deployment.d.ts +49 -17
  522. package/dist/plugins/retention-deployment.js +39 -8
  523. package/dist/plugins/run-preview-m45.d.ts +11 -0
  524. package/dist/plugins/run-preview-m45.js +19 -0
  525. package/dist/plugins/run-store-sql.d.ts +82 -75
  526. package/dist/plugins/run-store-sql.js +164 -125
  527. package/dist/plugins/s3-answer.d.ts +2 -1
  528. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  529. package/dist/plugins/sandbox-reaper.js +2 -0
  530. package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
  531. package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
  532. package/dist/plugins/scheduler-support.d.ts +16 -1
  533. package/dist/plugins/scheduler-support.js +22 -2
  534. package/dist/plugins/schema-consistency.d.ts +131 -14
  535. package/dist/plugins/schema-consistency.js +388 -18
  536. package/dist/plugins/schema-drift-sentence.d.ts +10 -6
  537. package/dist/plugins/schema-drift-sentence.js +15 -7
  538. package/dist/plugins/schema-ensure-legs.d.ts +9 -0
  539. package/dist/plugins/schema-ensure-legs.js +1 -1
  540. package/dist/plugins/schema-indexes.js +3 -0
  541. package/dist/plugins/schema-live-columns.d.ts +14 -5
  542. package/dist/plugins/schema-live-columns.js +10 -10
  543. package/dist/plugins/send-user-file.js +2 -1
  544. package/dist/plugins/session-birth.d.ts +37 -0
  545. package/dist/plugins/session-birth.js +38 -0
  546. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  547. package/dist/plugins/session-epoch-anchor.js +33 -11
  548. package/dist/plugins/session-ext-table.d.ts +27 -3
  549. package/dist/plugins/session-ext-table.js +19 -6
  550. package/dist/plugins/session-fork.d.ts +15 -1
  551. package/dist/plugins/session-fork.js +3 -0
  552. package/dist/plugins/session-ownership.d.ts +1 -1
  553. package/dist/plugins/session-placement.d.ts +27 -20
  554. package/dist/plugins/session-placement.js +15 -12
  555. package/dist/plugins/session-row-sql.d.ts +12 -0
  556. package/dist/plugins/session-row-sql.js +3 -3
  557. package/dist/plugins/session-run-rollup.d.ts +29 -0
  558. package/dist/plugins/session-run-rollup.js +40 -0
  559. package/dist/plugins/session-store-sql.d.ts +38 -12
  560. package/dist/plugins/session-store-sql.js +130 -30
  561. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  562. package/dist/plugins/session-withdraw-sql.js +42 -0
  563. package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
  564. package/dist/plugins/shared-memory-store-sql.js +2 -1
  565. package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
  566. package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
  567. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  568. package/dist/plugins/sql-driver.d.ts +1 -1
  569. package/dist/plugins/sql-driver.js +2 -1
  570. package/dist/plugins/sql-errors.d.ts +32 -5
  571. package/dist/plugins/sql-errors.js +55 -7
  572. package/dist/plugins/sql-json-column.d.ts +8 -7
  573. package/dist/plugins/sql-json-column.js +10 -6
  574. package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
  575. package/dist/plugins/stop-then-start-sentence.js +7 -0
  576. package/dist/plugins/store-backend.d.ts +99 -16
  577. package/dist/plugins/store-backend.js +230 -65
  578. package/dist/plugins/store-contracts.d.ts +123 -33
  579. package/dist/plugins/store-contracts.js +38 -1
  580. package/dist/plugins/store-fault.d.ts +28 -2
  581. package/dist/plugins/store-fault.js +20 -2
  582. package/dist/plugins/task-attachment-store.d.ts +15 -3
  583. package/dist/plugins/task-attachment-store.js +22 -9
  584. package/dist/plugins/tidb-pool.d.ts +11 -6
  585. package/dist/plugins/tidb-pool.js +39 -18
  586. package/dist/plugins/web-search.js +5 -3
  587. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  588. package/dist/plugins/workflow-run-store-sql.js +11 -5
  589. package/dist/plugins/workspace-custody.d.ts +44 -0
  590. package/dist/plugins/workspace-custody.js +47 -0
  591. package/dist/principal-jwt.d.ts +4 -4
  592. package/dist/principal-jwt.js +20 -5
  593. package/dist/principal-shape.d.ts +41 -0
  594. package/dist/principal-shape.js +19 -0
  595. package/dist/project-identity.d.ts +8 -7
  596. package/dist/project-identity.js +40 -17
  597. package/dist/project-layer-key.d.ts +13 -2
  598. package/dist/project-layer-key.js +9 -1
  599. package/dist/question.d.ts +13 -23
  600. package/dist/question.js +21 -39
  601. package/dist/read-deny-floor-notice.d.ts +36 -0
  602. package/dist/read-deny-floor-notice.js +40 -0
  603. package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
  604. package/dist/request-declaration-disposition.js +39 -0
  605. package/dist/request-declaration-refusal.d.ts +35 -12
  606. package/dist/request-declaration-refusal.js +21 -9
  607. package/dist/request-form.d.ts +58 -0
  608. package/dist/request-form.js +72 -0
  609. package/dist/request-image-urls.d.ts +8 -2
  610. package/dist/request-image-urls.js +2 -1
  611. package/dist/request-images.d.ts +20 -0
  612. package/dist/request-images.js +59 -0
  613. package/dist/request-key-closure.d.ts +6 -7
  614. package/dist/request-key-closure.js +15 -2
  615. package/dist/resource-suspend.d.ts +7 -16
  616. package/dist/resource-suspend.js +1 -1
  617. package/dist/retired-name-host-notice.d.ts +21 -0
  618. package/dist/retired-name-host-notice.js +12 -0
  619. package/dist/rule-entry-list.d.ts +2 -2
  620. package/dist/rule-entry-list.js +3 -4
  621. package/dist/rule-issue-reading.d.ts +58 -0
  622. package/dist/rule-issue-reading.js +14 -0
  623. package/dist/rules-consent.d.ts +5 -3
  624. package/dist/rules-consent.js +1 -0
  625. package/dist/run-acceptance.d.ts +3 -1
  626. package/dist/run-acceptance.js +3 -0
  627. package/dist/run-cancel-card.d.ts +28 -0
  628. package/dist/run-cancel-card.js +19 -0
  629. package/dist/run-cancel-context.d.ts +10 -0
  630. package/dist/run-cancel-context.js +1 -0
  631. package/dist/run-local.d.ts +14 -6
  632. package/dist/run-local.js +117 -90
  633. package/dist/run-stale-default.d.ts +7 -0
  634. package/dist/run-stale-default.js +2 -0
  635. package/dist/runs.d.ts +56 -21
  636. package/dist/runs.js +73 -43
  637. package/dist/runtime-caps-resolver.d.ts +21 -6
  638. package/dist/runtime-caps-resolver.js +17 -4
  639. package/dist/runtime-governance.d.ts +2 -2
  640. package/dist/runtime-governance.js +5 -3
  641. package/dist/sealed-key-layout.d.ts +12 -5
  642. package/dist/sealed-key-layout.js +5 -0
  643. package/dist/sealed-key.d.ts +12 -2
  644. package/dist/sealed-key.js +115 -27
  645. package/dist/security.d.ts +128 -158
  646. package/dist/security.js +163 -59
  647. package/dist/sema-config-dir.d.ts +20 -0
  648. package/dist/sema-config-dir.js +25 -0
  649. package/dist/server-secret-env.d.ts +55 -25
  650. package/dist/server-secret-env.js +75 -22
  651. package/dist/session-agent.d.ts +3 -2
  652. package/dist/session-children-retire.d.ts +13 -8
  653. package/dist/session-children-retire.js +9 -7
  654. package/dist/session-deletion.d.ts +88 -0
  655. package/dist/session-deletion.js +8 -0
  656. package/dist/session-erase.d.ts +145 -0
  657. package/dist/session-erase.js +115 -0
  658. package/dist/session-error-wire.d.ts +5 -5
  659. package/dist/session-error-wire.js +1 -1
  660. package/dist/session-incarnation.d.ts +52 -5
  661. package/dist/session-incarnation.js +19 -2
  662. package/dist/session-policy-wire.d.ts +6 -3
  663. package/dist/session-policy-wire.js +11 -1
  664. package/dist/session-resident-background.d.ts +0 -71
  665. package/dist/session-resident-background.js +4 -3
  666. package/dist/session-row.d.ts +2 -1
  667. package/dist/session-rules-seat.d.ts +12 -0
  668. package/dist/session-rules-seat.js +19 -0
  669. package/dist/session-titler.d.ts +7 -15
  670. package/dist/session-titler.js +1 -1
  671. package/dist/session-workspace.d.ts +3 -3
  672. package/dist/spec-fields.d.ts +57 -3
  673. package/dist/spec-fields.js +72 -51
  674. package/dist/store-admission.d.ts +33 -0
  675. package/dist/store-admission.js +49 -0
  676. package/dist/store-posture.d.ts +141 -20
  677. package/dist/store-posture.js +205 -3
  678. package/dist/stored-request-hooks-m20.js +2 -2
  679. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  680. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  681. package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
  682. package/dist/stores-sql/checkpoint-store-sql.js +78 -49
  683. package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
  684. package/dist/stores-sql/file-history-store-sql.js +3 -5
  685. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  686. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  687. package/dist/stores-sql/pg-session-storage.d.ts +7 -5
  688. package/dist/stores-sql/pg-session-storage.js +54 -46
  689. package/dist/stores-sql/retention-store-sql.d.ts +87 -19
  690. package/dist/stores-sql/retention-store-sql.js +92 -27
  691. package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
  692. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  693. package/dist/stores-sql/session-write-hooks.d.ts +12 -6
  694. package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
  695. package/dist/stores-sql/tidb-session-storage.js +13 -8
  696. package/dist/stores-sql/tidb-session-store.d.ts +36 -17
  697. package/dist/stores-sql/tidb-session-store.js +69 -39
  698. package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
  699. package/dist/stores-sql/tool-result-store-sql.js +4 -6
  700. package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
  701. package/dist/stores-sql/windowed-session-storage.js +9 -0
  702. package/dist/submission-exit.d.ts +50 -0
  703. package/dist/submission-exit.js +108 -0
  704. package/dist/task-a2a.d.ts +3 -8
  705. package/dist/task-a2a.js +28 -30
  706. package/dist/task-cwd.d.ts +43 -7
  707. package/dist/task-cwd.js +11 -0
  708. package/dist/task-mcp.d.ts +3 -3
  709. package/dist/task-mcp.js +4 -4
  710. package/dist/task-settings.d.ts +14 -10
  711. package/dist/task-settings.js +19 -7
  712. package/dist/terminal.d.ts +27 -43
  713. package/dist/terminal.js +49 -14
  714. package/dist/tool-approval.d.ts +173 -163
  715. package/dist/tool-approval.js +247 -232
  716. package/dist/trace/core-keyset-guard.d.ts +13 -6
  717. package/dist/trace/core-vocab-wire.d.ts +95 -0
  718. package/dist/trace/core-vocab-wire.js +15 -0
  719. package/dist/trace/engine-notice-wire.d.ts +24 -21
  720. package/dist/trace/engine-notice-wire.js +7 -3
  721. package/dist/trace/exit-seat.d.ts +30 -4
  722. package/dist/trace/exit-seat.js +40 -36
  723. package/dist/trace/extension-call-face.d.ts +3 -2
  724. package/dist/trace/extension-call-face.js +3 -1
  725. package/dist/trace/ledger-events.d.ts +4 -7
  726. package/dist/trace/ledger-sink.d.ts +4 -31
  727. package/dist/trace/ledger-sink.js +0 -11
  728. package/dist/trace/model-segment.d.ts +5 -5
  729. package/dist/trace/model-segment.js +5 -5
  730. package/dist/trace/project.d.ts +59 -44
  731. package/dist/trace/project.js +60 -26
  732. package/dist/trace/redact.d.ts +135 -27
  733. package/dist/trace/redact.js +884 -260
  734. package/dist/trace/self-minted-wire.d.ts +567 -20
  735. package/dist/trace/self-minted-wire.js +205 -24
  736. package/dist/trace/wire-projection-faces.d.ts +5 -6
  737. package/dist/trace/wire-projection-faces.js +2 -2
  738. package/dist/upstream-body.d.ts +23 -0
  739. package/dist/upstream-body.js +16 -0
  740. package/dist/url-refusal.d.ts +3 -3
  741. package/dist/url-refusal.js +11 -4
  742. package/dist/user-authored-text.d.ts +1 -1
  743. package/dist/user-input-ledger.d.ts +7 -8
  744. package/dist/user-input-ledger.js +1 -1
  745. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  746. package/dist/web-admin-client/apply-effective.js +33 -23
  747. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  748. package/dist/web-admin-client/apply-ledger.js +5 -2
  749. package/dist/web-admin-client/center-request.d.ts +2 -2
  750. package/dist/web-admin-client/center-request.js +15 -15
  751. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  752. package/dist/web-admin-client/effective-keys.js +1 -1
  753. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  754. package/dist/web-admin-client/entry-metadata.js +13 -0
  755. package/dist/web-admin-client/http-client.d.ts +1 -1
  756. package/dist/web-admin-client/http-client.js +23 -4
  757. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  758. package/dist/web-admin-client/mcp-revocation.js +2 -1
  759. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  760. package/dist/web-admin-client/read-warnings.js +1 -0
  761. package/dist/web-admin-client/restart-signal.js +8 -4
  762. package/dist/web-admin-client/skills-mcp.d.ts +2 -2
  763. package/dist/web-admin-client/types.d.ts +1 -2
  764. package/dist/workspace-space.d.ts +3 -2
  765. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  766. package/docs/error-text-lexicon.json +317 -0
  767. package/package.json +8 -3
  768. package/scripts/drain-check-local.mjs +118 -147
  769. package/scripts/drain-check.mysql.sql +22 -2
  770. package/scripts/drain-check.pg.sql +22 -2
  771. package/scripts/embed-minimal.mjs +183 -0
  772. package/wire-changes/server@7.148.0.json +1517 -0
  773. package/wire-changes/server@7.149.0.json +372 -0
  774. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  775. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  776. package/dist/http/memory-layer-reply.d.ts +0 -30
  777. package/dist/http/memory-layer-reply.js +0 -24
  778. package/dist/lsp/e2b-bridge.d.ts +0 -57
  779. package/dist/lsp/e2b-bridge.js +0 -139
  780. package/dist/lsp/e2b-manager.d.ts +0 -93
  781. package/dist/lsp/e2b-manager.js +0 -178
  782. package/dist/lsp/lsp-frames.d.ts +0 -14
  783. package/dist/lsp/lsp-frames.js +0 -25
  784. package/dist/lsp/manager.d.ts +0 -129
  785. package/dist/lsp/manager.js +0 -127
  786. package/dist/lsp/types.d.ts +0 -12
  787. package/dist/lsp/types.js +0 -2
  788. package/dist/lsp/ws-transport.d.ts +0 -40
  789. package/dist/lsp/ws-transport.js +0 -210
  790. package/dist/plain-string-record.js +0 -70
@@ -1,8 +1,10 @@
1
1
  import { timingSafeEqual } from "node:crypto";
2
2
  import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
3
- import { PRINCIPAL_TOKEN_HEADER, sameSessionOwner, verifiedPrincipal, ssoVerifiedPrincipal, ssoVerifiedPrincipalInc, ssoVerifiedScope, ownerlessRowOpen, mintPrincipal } from "../security.js";
3
+ import { PRINCIPAL_TOKEN_HEADER, verifiedPerson, verifiedSubject, scenarioHeaderOf, scenarioWithoutPrincipalError, ssoVerifiedPrincipal, ssoVerifiedPrincipalInc, ssoVerifiedScope } from "../security.js";
4
+ import { personOf } from "../owner-brands.js";
4
5
  import { IDENTITY_SOURCES, runIdentityClaimOverflow } from "../identity-source.js";
5
6
  import { sendError } from "./send.js";
7
+ import { canonicalAddress } from "../net-address.js";
6
8
  export function headerStr(v) {
7
9
  return Array.isArray(v) ? v[0] : v;
8
10
  }
@@ -40,7 +42,8 @@ export function traceTokenPresented(req, config) {
40
42
  return !!config.traceToken && authorized(req, config.traceToken);
41
43
  }
42
44
  export function isLoopbackAddress(addr) {
43
- return addr === "127.0.0.1" || addr === "::1" || addr === "::ffff:127.0.0.1";
45
+ const canonical = addr === undefined ? undefined : canonicalAddress(addr);
46
+ return canonical === "127.0.0.1" || canonical === "::1";
44
47
  }
45
48
  function identitySourceVerified(kind, req, config) {
46
49
  switch (kind) {
@@ -49,7 +52,7 @@ function identitySourceVerified(kind, req, config) {
49
52
  case "sso":
50
53
  return ssoVerifiedPrincipal(req) !== undefined;
51
54
  case "direct_door_jwt":
52
- return config.directDoorActive && verifiedPrincipal(req, config) !== undefined;
55
+ return config.directDoorActive && verifiedPerson(req, config) !== undefined;
53
56
  default: {
54
57
  const unknownKind = kind;
55
58
  throw new Error(`verifiedIdentitySource: unknown identity source ${String(unknownKind)}`);
@@ -97,20 +100,26 @@ export function runIdentityOf(req, config, owner) {
97
100
  const admitted = ADMITTED_RUN_IDENTITY.get(req);
98
101
  if (admitted === undefined || admitted === null)
99
102
  return null;
100
- return (gatedPrincipal(req, config) ?? null) === owner ? admitted : null;
103
+ return (gatedSubject(req, config) ?? null) === owner ? admitted : null;
101
104
  }
102
- export function gatedPrincipal(req, config) {
103
- if (bearerPresentedButUnverified(req, config))
105
+ export function gatedSubject(req, config) {
106
+ if (bearerPresentedButUnverified(req, config)) {
107
+ if (scenarioHeaderOf(req) !== undefined)
108
+ throw scenarioWithoutPrincipalError();
104
109
  return undefined;
105
- const verified = verifiedPrincipal(req, config);
106
- return verified === undefined ? undefined : mintPrincipal(verified);
110
+ }
111
+ return verifiedSubject(req, config);
112
+ }
113
+ export function gatedPerson(req, config) {
114
+ const subject = gatedSubject(req, config);
115
+ return subject === undefined ? undefined : personOf(subject);
107
116
  }
108
117
  export function principalTokenPresentedButUnverified(req, config) {
109
118
  if (!config.directDoorActive)
110
119
  return false;
111
120
  if (headerStr(req.headers[PRINCIPAL_TOKEN_HEADER]) === undefined)
112
121
  return false;
113
- return verifiedPrincipal(req, config) === undefined;
122
+ return verifiedPerson(req, config) === undefined;
114
123
  }
115
124
  export function sendPrincipalRefusal(res, req, config) {
116
125
  if (principalTokenPresentedButUnverified(req, config)) {
@@ -139,72 +148,21 @@ export function sendUnauthorized(res, face) {
139
148
  }
140
149
  }
141
150
  }
142
- export function runOwnerReadable(principal, owner, config) {
143
- if (owner === null)
144
- return true;
145
- return sameSessionOwner(config, owner, principal ?? null);
146
- }
147
- export function hasServiceAuth(config) {
148
- return Boolean(config.authToken) || Object.keys(config.authTokens ?? {}).length > 0;
149
- }
150
- function identitySourceWired(kind, w) {
151
- switch (kind) {
152
- case "service_token":
153
- return hasServiceAuth(w.config);
154
- case "sso":
155
- return w.webAdminJwtVerifier !== undefined;
156
- case "direct_door_jwt":
157
- return w.config.directDoorActive;
158
- default: {
159
- const unknownKind = kind;
160
- throw new Error(`identity sources: unknown identity source ${String(unknownKind)}`);
161
- }
162
- }
151
+ export function devOpenDeployment(config) {
152
+ return !DEPLOYMENT_SHAPE_PREDICATES.identityBoundary.holds(config);
163
153
  }
164
- export function wiredIdentitySources(w) {
165
- return IDENTITY_SOURCES.filter((k) => identitySourceWired(k, w));
166
- }
167
- export function devOpenDeployment(w) {
168
- return wiredIdentitySources(w).length === 0 && !w.config.traceToken && !DEPLOYMENT_SHAPE_PREDICATES.principalRequired.holds(w.config);
169
- }
170
- export function actsForDeployment(req, config, principal) {
171
- return serviceTokenDeclaredActsForDeployment(config) && systemFor(req, config) !== undefined && principal() === undefined;
154
+ export function actsForDeployment(req, config, subject) {
155
+ if (devOpenDeployment(config))
156
+ return subject() === undefined && !bearerPresentedButUnverified(req, config) ? "dev_open" : undefined;
157
+ return serviceTokenDeclaredActsForDeployment(config) && systemFor(req, config) !== undefined && subject() === undefined ? "deployment_token" : undefined;
172
158
  }
173
159
  export function serviceTokenDeclaredActsForDeployment(config) {
174
160
  return config.serviceTokenActsForDeployment === true;
175
161
  }
176
- export function sessionCallerOf(req, w) {
177
- const principal = gatedPrincipal(req, w.config);
178
- return { principal, fleet: devOpenDeployment(w) || actsForDeployment(req, w.config, () => principal) };
179
- }
180
- export function fleetViewOf(req, w, face) {
181
- const caller = sessionCallerOf(req, w);
182
- const fleetWide = caller.fleet || readOnlyFleetCredential(req, w.config, face);
183
- return { fleetWide, gateOwner: fleetWide ? null : caller.principal || null };
184
- }
185
- function readOnlyFleetCredential(req, config, face) {
186
- switch (face) {
187
- case "read":
188
- return traceTokenPresented(req, config);
189
- case "write":
190
- return false;
191
- default: {
192
- const unknownFace = face;
193
- throw new Error(`fleetViewOf: unknown fleet face ${String(unknownFace)}`);
194
- }
195
- }
196
- }
197
- export function sessionOwnerReadable(caller, cell, w) {
198
- if (devOpenDeployment(w))
199
- return true;
200
- if (cell.owner === null)
201
- return ownerlessRowOpen(cell, caller);
202
- return runOwnerReadable(caller.principal, cell.owner, w.config);
203
- }
204
- export function explicitOperatorOk(principal, roster) {
162
+ export function explicitOperatorOk(person, roster) {
205
163
  if (roster.operatorSingleUser === true)
206
164
  return true;
207
- return roster.operatorPrincipals.length > 0 && principal !== undefined && roster.operatorPrincipals.includes(principal);
165
+ return roster.operatorPrincipals.length > 0 && person !== undefined && roster.operatorPrincipals.includes(person);
208
166
  }
209
167
  export function operatorRosterPresent(roster) {
210
168
  return roster.operatorSingleUser === true || roster.operatorPrincipals.length > 0;
@@ -1,10 +1,22 @@
1
1
  /**
2
2
  * **全仓唯一的拒体组句器**(零依赖叶子模块 —— `http/checkpoint-ctx.ts` 的续跑折叠也读它,而那个模块经编译产物进随包排空脚本,闭包只许 node 内建 / 引擎包根)。
3
3
  *
4
- * 一只拒 = 三件事:机读码、给人读的句子、拒的机读事实(`field` / `reason` / `count` / `cap` / `detail` …;缺席 = 没有可机读的事实)。
4
+ * 一只拒 = 三件事:机读码、给人读的句子、拒的机读事实(`field` / `reason` / `count` / `cap` …;缺席 = 没有可机读的事实)。
5
5
  * 拒体 = `{ error, errorCode, ...facts }`(机读事实原样随体、排在最后)。整面拒(`http/send.ts` 的 `sendError` / `sendHttpError`)、把同一只拒当**数据**带进 200 体的面板
6
6
  * (`GET /v1/sessions/:id/mcp` 的 `scenarioRefusal`)、续跑把一只拒折成 409 的 `resume_blocked_by_policy`(`http/checkpoint-ctx.ts`)读的都是它 —— 同一只拒在几处渲出的成员逐字同。
7
7
  * 判据只交这份数据,不自己拼体。
8
+ *
9
+ * **版式律(一种)**:机读事实的容器一律在拒体**根上**,容器内部的领域结构原样保留(条目问题的 `problems[]` 每项 `{ code, field, entry, reason }`、
10
+ * 冲突的 `fields[]`、领养的 `conflicts[]`);拒体根上**没有** `detail` 键(对象、串都没有)—— 「哪一臂」是 `reason`,被拒值的坐标是 `field`,
11
+ * 给人读的话进句子。引擎 / 外部对象进拒体只经**闭集映射**(先例 {@link resumeRefusalFacts}),不整只摊。
12
+ * 本层自己铸的请求坐标只有一种写法:{@link fieldCoordinate}。
13
+ *
14
+ * **保留键**({@link REFUSAL_RESERVED_KEYS}):事实不得带这几只顶层键。三处读这一张表 ——
15
+ * · 组句器 {@link refusalBody}(覆盖 `sendError` 与直接调它的交回形):带保留键 ⇒ 抛;
16
+ * · `HttpError` 构造期(`security.ts`):带保留键 ⇒ 构造即抛,落普通 500 臂(早失败);
17
+ * · 出线点(`http/send.ts` 的拒体写口,`sendError` / `sendHttpError` 汇合处):按**最终字节**判({@link refusalWireBytes}),不对 ⇒ 不抛、答 500 开面故障。
18
+ * 挡:一切被执行到、经组句器或经那只写口出线的拒体(含扩宽的 `Record`、展开、断言、外部对象、构造后改写、`toJSON` 劫持)。
19
+ * 不挡:没被执行到的路径;组句之后、不经那只写口出线的交回体上的就地改写。
8
20
  */
9
21
  export interface Refusal {
10
22
  readonly errorCode: string;
@@ -16,8 +28,29 @@ export type RefusalBody = {
16
28
  readonly error: string;
17
29
  readonly errorCode: string;
18
30
  } & Record<string, unknown>;
19
- /** 拒体:`{ error, errorCode, ...facts }`。 */
31
+ /**
32
+ * 事实不得带的顶层键(一张表,三处读 —— 见文件头):`error` / `errorCode` = 体头(事实摊在头之后,同名即盖掉码或句);`detail` = 退役的包装位(版式律:根上没有它);
33
+ * `toJSON` = 摊上体顶层就接管整只体的序列化(体出线时被换成它的返回值)。
34
+ */
35
+ export declare const REFUSAL_RESERVED_KEYS: readonly ["error", "errorCode", "detail", "toJSON"];
36
+ export type RefusalReservedKey = (typeof REFUSAL_RESERVED_KEYS)[number];
37
+ /** 一份事实里第一只保留键(按自有可枚举键读 —— 与展开读的是同一组键);没有 ⇒ `undefined`。 */
38
+ export declare function refusalReservedKeyOf(facts: Readonly<Record<string, unknown>>): RefusalReservedKey | undefined;
39
+ /** 带保留键的事实的那一句(组句器与 `HttpError` 构造期同一句;只点名码与键,不带值)。 */
40
+ export declare function refusalReservedKeyMessage(errorCode: string, key: RefusalReservedKey): string;
41
+ /** 拒体:`{ error, errorCode, ...facts }`。事实带保留键 ⇒ 抛(见文件头)。 */
20
42
  export declare function refusalBody(r: Refusal): RefusalBody;
43
+ /**
44
+ * 一只拒出线的**最终字节**(出线点的唯一读法):组句({@link refusalBody})→ 序列化 → 按序列化之后读回的顶层键判,逐只读保留键表 —— 顶层不是对象、
45
+ * `error` / `errorCode` 不是这只拒的句与码、根上有表里其余的键(`detail` / `toJSON`)⇒ 抛。按字节判而不是按对象判:构造后被改写的事实、`toJSON`、
46
+ * 读一次变一次的成员(组句前不可枚举、展开途中才变可枚举的键),在这里读到的就是线上的那一份。
47
+ */
48
+ export declare function refusalWireBytes(r: Refusal): string;
49
+ /**
50
+ * 请求坐标的 stringify(`settings.hooks` 面的拒体 `field`、拒句里的坐标与 `unknownKeys` 都经它;其余各面的 `field` 今天仍是各面手拼的串,没有改走这里):`root` 之后逐段 —— 数字段 `[n]`;不含 `.` `[` `]` `"`、空白、控制字符的非空串段 `.seg`;
51
+ * 其余串段 `[<JSON 串>]`(`settings.hooks["Pre.Tool"][0]`)。坐标是不透明定位串,消费方不反解;段里的调用方文本先由各面自己的回显口径收(本函数不脱敏、不截断)。
52
+ */
53
+ export declare function fieldCoordinate(root: string, segs: readonly (string | number)[]): string;
21
54
  /**
22
55
  * 引擎拒一次续跑时的**机读事实位** → 拒体的同名事实键(唯一读法;续跑家族的每一只拒答都读它):
23
56
  * `detail.code` ⇒ `blockedBy`(挡住它的准入码)· `detail.field` ⇒ `field`(哪一侧 / 哪一格)· `detail.reason` ⇒ `reason`(同码多臂时哪一臂)·
@@ -1,6 +1,40 @@
1
+ export const REFUSAL_RESERVED_KEYS = ["error", "errorCode", "detail", "toJSON"];
2
+ export function refusalReservedKeyOf(facts) {
3
+ return REFUSAL_RESERVED_KEYS.find((k) => Object.prototype.propertyIsEnumerable.call(facts, k));
4
+ }
5
+ export function refusalReservedKeyMessage(errorCode, key) {
6
+ return `refusal ${errorCode}: its facts carry the reserved key "${key}" — a refusal's facts sit at the root of its body beside error / errorCode, never under detail`;
7
+ }
1
8
  export function refusalBody(r) {
9
+ if (r.facts !== undefined) {
10
+ const reserved = refusalReservedKeyOf(r.facts);
11
+ if (reserved !== undefined)
12
+ throw new TypeError(refusalReservedKeyMessage(r.errorCode, reserved));
13
+ }
2
14
  return { error: r.message, errorCode: r.errorCode, ...r.facts };
3
15
  }
16
+ export function refusalWireBytes(r) {
17
+ const bytes = JSON.stringify(refusalBody(r));
18
+ const back = JSON.parse(bytes);
19
+ if (back === null || typeof back !== "object" || Array.isArray(back))
20
+ throw new TypeError(`refusal ${r.errorCode}: its body did not serialize as an object`);
21
+ const top = back;
22
+ const onWire = { error: r.message, errorCode: r.errorCode, detail: undefined, toJSON: undefined };
23
+ for (const key of REFUSAL_RESERVED_KEYS) {
24
+ const own = onWire[key];
25
+ if (own === undefined ? Object.hasOwn(top, key) : top[key] !== own) {
26
+ throw new TypeError(own === undefined ? refusalReservedKeyMessage(r.errorCode, key) : `refusal ${r.errorCode}: its serialized body does not carry its own ${key}`);
27
+ }
28
+ }
29
+ return bytes;
30
+ }
31
+ export function fieldCoordinate(root, segs) {
32
+ let out = root;
33
+ for (const seg of segs)
34
+ out += typeof seg === "number" ? `[${seg}]` : PLAIN_SEGMENT.test(seg) ? `.${seg}` : `[${JSON.stringify(seg)}]`;
35
+ return out;
36
+ }
37
+ const PLAIN_SEGMENT = /^[^.[\]"\s\p{Cc}]+$/u;
4
38
  export function resumeRefusalFacts(detail) {
5
39
  if (typeof detail !== "object" || detail === null)
6
40
  return {};
@@ -4,12 +4,13 @@
4
4
  * ctx 字段 1 只(`deps`):本族对外围的耦合就这一格,它也是这一族的可测性读数。
5
5
  */
6
6
  import type { IncomingMessage, ServerResponse } from "node:http";
7
- import { type SessionOwnerCell } from "../security.js";
8
7
  import { type RefusalBody } from "./refusal-body.js";
8
+ import type { Person } from "../owner-brands.js";
9
9
  import type { FlatServiceDeps } from "./server.js";
10
10
  import type { LeaseRefusalAdmission } from "../fleet-lease.js";
11
11
  import { type QuotaDecision } from "../observability/cost-quota.js";
12
12
  import { type SqlWallSource, type SqlWallsReading } from "../plugins/sql-driver.js";
13
+ import type { TerminalSeat } from "./route-ctx.js";
13
14
  /**
14
15
  * 受理口对一份提交体的库墙判决:被哪一堵墙拒、量到多少、门限多少。提交体要整只落进库 —— 会话日志的用户消息、durable 审批部署上的续跑输入 ——
15
16
  * 所以每堵墙各量各的、**量的是店真正发出去的东西**,`null` 的墙不参与(PG 两堵都是 `null`;InnoDB 的行墙是 `null`、包墙在;TiDB 两堵都在):
@@ -76,30 +77,25 @@ export declare function createRequestGuards(ctx: {
76
77
  deps: FlatServiceDeps;
77
78
  }): {
78
79
  quotaExceeded: (req: IncomingMessage, res: ServerResponse) => boolean;
79
- ownerCostQuotaDenied: (principal: string | undefined) => {
80
+ ownerCostQuotaDenied: (person: Person | undefined) => {
80
81
  status: number;
81
82
  body: object;
82
83
  } | undefined;
83
- ownerFleetLeaseDenied: (owner: string | undefined) => Promise<{
84
+ ownerFleetLeaseDenied: (person: Person | undefined) => Promise<{
84
85
  status: number;
85
86
  body: object;
86
87
  } | undefined>;
87
- ownerLeaseDenied: (res: ServerResponse, owner: string | undefined) => Promise<boolean>;
88
- ownerQuotaDenied: (res: ServerResponse, owner: string | undefined) => boolean;
89
- leaseDenied: (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
90
- usageWindowDenialFor: (key: string) => Promise<{
88
+ ownerLeaseDenied: (res: ServerResponse, person: Person | undefined) => Promise<boolean>;
89
+ ownerQuotaDenied: (res: ServerResponse, person: Person | undefined) => boolean;
90
+ leaseDenied: (req: IncomingMessage, res: ServerResponse, seat?: TerminalSeat) => Promise<boolean>;
91
+ usageWindowDenialFor: (person: Person | undefined) => Promise<{
91
92
  status: number;
92
93
  body: RefusalBody;
93
94
  retryAfterSec: number;
94
95
  } | undefined>;
95
- usageWindowDenied: (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
96
+ usageWindowDenied: (req: IncomingMessage, res: ServerResponse, seat?: TerminalSeat) => Promise<boolean>;
96
97
  rateLimited: (req: IncomingMessage, res: ServerResponse) => boolean;
97
98
  safeDecode: (seg: string) => string | null;
98
- runOwnerOk: (req: IncomingMessage, res: ServerResponse, owner: string | null) => boolean;
99
- sessionOwnerOk: (req: IncomingMessage, res: ServerResponse, cell: SessionOwnerCell) => boolean;
100
- runSessionAcceptOk: (req: IncomingMessage, res: ServerResponse, run: {
101
- sessionId: string | null;
102
- }, face: string, notFoundError?: string) => boolean;
103
99
  readJson: (req: IncomingMessage) => Promise<unknown>;
104
100
  readRawBody: (req: IncomingMessage, max: number) => Promise<Buffer>;
105
101
  };
@@ -1,15 +1,14 @@
1
1
  import { GLOBAL_USAGE_KEY, usageRetryAfterMs } from "@sema-agent/core";
2
2
  import { createCodedHttpError, principalFrom } from "../security.js";
3
- import { RUN_NOT_FOUND_MESSAGE, SESSION_NOT_FOUND_MESSAGE } from "./route-ctx.js";
4
3
  import { invalidJsonError, sendError } from "./send.js";
5
4
  import { refusalBody } from "./refusal-body.js";
6
5
  import { limitFactsUnmeasured } from "../limit-refusal.js";
7
- import { gatedPrincipal, explicitOperatorOk, sessionOwnerReadable, sessionCallerOf, sendPrincipalRefusal } from "./principal-gate.js";
8
- import { runRowReadable } from "./owner-access.js";
9
- import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
6
+ import { gatedPerson } from "./principal-gate.js";
10
7
  import { quotaWindowResetsAt } from "../observability/cost-quota.js";
11
8
  import { escapedStatementBytes, packetWallStatementBytes, rowWallPayloadBytes } from "../plugins/sql-driver.js";
12
9
  import { MAX_JSON_BODY_BYTES } from "../json-body-limit.js";
10
+ import { deliverVia } from "../submission-exit.js";
11
+ import { canonicalAddress } from "../net-address.js";
13
12
  export function refuseSubmitBody(walls, body) {
14
13
  const rowWall = walls.maxRowBytes;
15
14
  const packetWall = walls.maxPacketBytes;
@@ -73,10 +72,10 @@ export function createRequestGuards(ctx) {
73
72
  function quotaExceeded(req, res) {
74
73
  if (!deps.costQuota)
75
74
  return false;
76
- const principal = gatedPrincipal(req, deps.config);
77
- if (!principal)
75
+ const person = gatedPerson(req, deps.config);
76
+ if (!person)
78
77
  return false;
79
- const d = deps.costQuota.check(principal);
78
+ const d = deps.costQuota.check(person);
80
79
  if (d.allowed)
81
80
  return false;
82
81
  deps.metrics?.inc("cost_quota_rejected_total");
@@ -86,37 +85,37 @@ export function createRequestGuards(ctx) {
86
85
  sendError(res, status, errorCode, error, extra);
87
86
  return true;
88
87
  }
89
- function ownerCostQuotaDenied(principal) {
90
- if (!deps.costQuota || !principal)
88
+ function ownerCostQuotaDenied(person) {
89
+ if (!deps.costQuota || !person)
91
90
  return undefined;
92
- const d = deps.costQuota.check(principal);
91
+ const d = deps.costQuota.check(person);
93
92
  if (d.allowed)
94
93
  return undefined;
95
94
  deps.metrics?.inc("cost_quota_rejected_total");
96
95
  return costQuotaRefusalOf(d);
97
96
  }
98
- async function ownerFleetLeaseDenied(owner) {
99
- if (!deps.fleetLease || !owner)
97
+ async function ownerFleetLeaseDenied(person) {
98
+ if (!deps.fleetLease || !person)
100
99
  return undefined;
101
- const adm = await deps.fleetLease.admit(owner);
100
+ const adm = await deps.fleetLease.admit(person);
102
101
  if (adm.ok)
103
102
  return undefined;
104
103
  deps.metrics?.inc("fleet_lease_rejected_total");
105
104
  const refusal = leaseRefusalOf(adm);
106
105
  return { status: refusal.status, body: refusal.body };
107
106
  }
108
- async function ownerLeaseDenied(res, owner) {
109
- if (!deps.fleetLease || !owner)
107
+ async function ownerLeaseDenied(res, person) {
108
+ if (!deps.fleetLease || !person)
110
109
  return false;
111
- const adm = await deps.fleetLease.admit(owner);
110
+ const adm = await deps.fleetLease.admit(person);
112
111
  if (adm.ok)
113
112
  return false;
114
113
  deps.metrics?.inc("fleet_lease_rejected_total");
115
114
  sendLeaseRefusal(res, leaseRefusalOf(adm));
116
115
  return true;
117
116
  }
118
- function ownerQuotaDenied(res, owner) {
119
- const denial = ownerCostQuotaDenied(owner);
117
+ function ownerQuotaDenied(res, person) {
118
+ const denial = ownerCostQuotaDenied(person);
120
119
  if (!denial)
121
120
  return false;
122
121
  const { errorCode, error, ...extras } = denial.body;
@@ -124,20 +123,22 @@ export function createRequestGuards(ctx) {
124
123
  sendError(res, denial.status, errorCode, error, extras);
125
124
  return true;
126
125
  }
127
- async function leaseDenied(req, res) {
126
+ async function leaseDenied(req, res, seat) {
128
127
  if (!deps.fleetLease)
129
128
  return false;
130
- const principal = gatedPrincipal(req, deps.config);
131
- if (!principal)
129
+ const person = gatedPerson(req, deps.config);
130
+ if (!person)
132
131
  return false;
133
- const adm = await deps.fleetLease.admit(principal);
132
+ const adm = await deps.fleetLease.admit(person);
134
133
  if (adm.ok)
135
134
  return false;
136
135
  deps.metrics?.inc("fleet_lease_rejected_total");
137
- sendLeaseRefusal(res, leaseRefusalOf(adm));
136
+ const refusal = leaseRefusalOf(adm);
137
+ await deliverVia(seat, () => sendLeaseRefusal(res, refusal));
138
138
  return true;
139
139
  }
140
- async function usageWindowDenialFor(key) {
140
+ async function usageWindowDenialFor(person) {
141
+ const key = person || GLOBAL_USAGE_KEY;
141
142
  const store = deps.usageWindowStore;
142
143
  const windows = deps.config.usageWindows;
143
144
  if (!store || !windows || windows.length === 0)
@@ -157,18 +158,21 @@ export function createRequestGuards(ctx) {
157
158
  const retryAfterSec = Math.max(1, Math.ceil(retryAfterMs / 1000));
158
159
  return { status: 429, body: refusalBody({ errorCode: "usage.window_exhausted", message: "usage window exhausted (deployment token governance)", facts: { retryAfterSec } }), retryAfterSec };
159
160
  }
160
- async function usageWindowDenied(req, res) {
161
- const denial = await usageWindowDenialFor(gatedPrincipal(req, deps.config) || GLOBAL_USAGE_KEY);
161
+ async function usageWindowDenied(req, res, seat) {
162
+ const denial = await usageWindowDenialFor(gatedPerson(req, deps.config));
162
163
  if (!denial)
163
164
  return false;
164
- res.setHeader("retry-after", String(denial.retryAfterSec));
165
- sendError(res, denial.status, denial.body.errorCode, denial.body.error, { retryAfterSec: denial.retryAfterSec });
165
+ await deliverVia(seat, () => {
166
+ res.setHeader("retry-after", String(denial.retryAfterSec));
167
+ sendError(res, denial.status, denial.body.errorCode, denial.body.error, { retryAfterSec: denial.retryAfterSec });
168
+ });
166
169
  return true;
167
170
  }
168
171
  function rateLimited(req, res) {
169
172
  if (!deps.rateLimiter)
170
173
  return false;
171
- const key = (deps.config.directDoorActive ? undefined : principalFrom(req, deps.config)) ?? req.socket.remoteAddress ?? "anon";
174
+ const peer = req.socket.remoteAddress;
175
+ const key = (deps.config.directDoorActive ? undefined : principalFrom(req, deps.config)) ?? (peer === undefined ? "anon" : (canonicalAddress(peer) ?? peer));
172
176
  const d = deps.rateLimiter.check(key);
173
177
  if (d.allowed)
174
178
  return false;
@@ -185,44 +189,6 @@ export function createRequestGuards(ctx) {
185
189
  return null;
186
190
  }
187
191
  }
188
- function ownerGate(req, res, readable, notFound) {
189
- const principal = gatedPrincipal(req, deps.config);
190
- if (DEPLOYMENT_SHAPE_PREDICATES.principalRequired.holds(deps.config) && !principal) {
191
- sendPrincipalRefusal(res, req, deps.config);
192
- return false;
193
- }
194
- if (!readable(principal)) {
195
- notFound();
196
- return false;
197
- }
198
- return true;
199
- }
200
- function runOwnerOk(req, res, owner) {
201
- return ownerGate(req, res, (principal) => runRowReadable(deps.config, principal, owner, "owner"), () => sendError(res, 404, "not_found.run", RUN_NOT_FOUND_MESSAGE));
202
- }
203
- function sessionOwnerOk(req, res, cell) {
204
- const caller = sessionCallerOf(req, deps);
205
- return ownerGate(req, res, () => sessionOwnerReadable(caller, cell, deps), () => sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE));
206
- }
207
- const sessionAssertAbsentWarned = new Set();
208
- function runSessionAcceptOk(req, res, run, face, notFoundError = RUN_NOT_FOUND_MESSAGE) {
209
- if (!run.sessionId)
210
- return true;
211
- const asserted = new URL(req.url ?? "", "http://x").searchParams.get("session");
212
- if (asserted === null) {
213
- if (!sessionAssertAbsentWarned.has(face)) {
214
- sessionAssertAbsentWarned.add(face);
215
- console.warn(JSON.stringify({ ts: new Date().toISOString(), level: "warn", msg: "run_face_session_assert_absent", face, note: "caller sent no ?session= on a session-bound run — allowed in the accept phase; the enforcement train will 404 this ([1498]⑥/[1499])" }));
216
- }
217
- return true;
218
- }
219
- if (asserted === run.sessionId)
220
- return true;
221
- if (explicitOperatorOk(gatedPrincipal(req, deps.config), deps.config))
222
- return true;
223
- sendError(res, 404, "not_found.run", notFoundError);
224
- return false;
225
- }
226
192
  async function readJson(req) {
227
193
  const chunks = [];
228
194
  let size = 0;
@@ -252,6 +218,6 @@ export function createRequestGuards(ctx) {
252
218
  }
253
219
  return Buffer.concat(chunks);
254
220
  }
255
- return { quotaExceeded, ownerCostQuotaDenied, ownerFleetLeaseDenied, ownerLeaseDenied, ownerQuotaDenied, leaseDenied, usageWindowDenialFor, usageWindowDenied, rateLimited, safeDecode, runOwnerOk, sessionOwnerOk, runSessionAcceptOk, readJson, readRawBody };
221
+ return { quotaExceeded, ownerCostQuotaDenied, ownerFleetLeaseDenied, ownerLeaseDenied, ownerQuotaDenied, leaseDenied, usageWindowDenialFor, usageWindowDenied, rateLimited, safeDecode, readJson, readRawBody };
256
222
  }
257
223
  //# sourceMappingURL=request-guards.js.map
@@ -0,0 +1,37 @@
1
+ /**
2
+ * **续跑腿接着跑哪一只组合入口** —— 停驻的那条 run 当初是怎么提交的(续跑输入里的提交体),就怎么续:
3
+ * · `verify` —— 验证门(core `resumeWithVerification`:续上实现腿,跑完再验、再修);
4
+ * · `cascade` —— 梯子(core `resumeCascade`:续上停在门上的那一级,再按门判接着往上爬);入参里的那一级 = 卡上记的组合腿(`CheckpointState.compositionLeg`,
5
+ * 「as the card records it」—— 引擎拿它对卡,记的不是这一级 ⇒ 续跑前拒 `resume.composition_mismatch`,卡不动);梯子 = 本部署的 `CASCADE_LADDER`
6
+ * 与提交时同一只 {@link cascadeConfig};
7
+ * 梯子那一臂另带**原目标上挂的输入**({@link CascadeObjectiveInputs}):续上那一级之后的每一级是原任务的冷重跑,core 要的是原 spec(「objective,
8
+ * attachments … included」,自己从续上的那一级剥掉)—— 续跑重建在体那一层剥了它们(一次性动作,`resume-legs.ts` 的一次性键表),这里自提交体照受理口的读法交回;
9
+ * · 缺席 —— 普通腿(`resumeStream`)。
10
+ * 两个入口不并存(受理口拒 `cascade` + `verify` 同在)。读的是提交体与卡,不读店、不抛:提交体说 `cascade` 而卡上没有梯子那一级的记录 ⇒
11
+ * {@link ResumeCompositionUnlinked}(调用方答 409 —— 那张卡不是这条 run 的梯子停下的,续不了;归属读法让它够不着这里,见 `hostSessionOf`)。
12
+ */
13
+ import type { CascadeConfig, Checkpoint, CompositionLeg, TaskSpec } from "@sema-agent/core";
14
+ import { type VerifyRoundsSpec } from "./verify-rounds.js";
15
+ import type { TaskRequestBody } from "./wire-types.js";
16
+ /**
17
+ * 原目标上挂的输入(提交体的 `userAttachments` / `images`,与受理口装配 `boot/resolve-spec.ts` 同一读法:附件在场才带键,图原样)。梯子续跑交给 core 的 spec
18
+ * 带上它们 —— 续上的那一级 core 自己剥掉附件(耐久续跑不收附件)、续跑路径不读图;之后冷重跑的每一级照原任务收到它们。
19
+ */
20
+ export type CascadeObjectiveInputs = Pick<TaskSpec, "userAttachments" | "images">;
21
+ /** 续跑腿的组合入口(闭集:加一种入口 ⇒ 读它的 `switch` 编译红)。 */
22
+ export type ResumeComposition = {
23
+ readonly entry: "verify";
24
+ readonly rounds: VerifyRoundsSpec;
25
+ } | {
26
+ readonly entry: "cascade";
27
+ readonly config: CascadeConfig;
28
+ readonly parkedLeg: CompositionLeg;
29
+ readonly objectiveInputs: CascadeObjectiveInputs;
30
+ };
31
+ /** 提交体说 `cascade`,卡上却没有梯子那一级的记录:这张卡续不了这条 run 的梯子。 */
32
+ export interface ResumeCompositionUnlinked {
33
+ readonly entry: "cascade_unlinked";
34
+ }
35
+ /** 这条 run 的组合入口(见模块头注);`undefined` = 普通腿。 */
36
+ export declare function resumeCompositionOf(body: Pick<TaskRequestBody, "verify" | "verifyRounds" | "maxCostUsd" | "cascade" | "userAttachments" | "images">, card: Pick<Checkpoint, "state">, cascadeLadder: readonly string[]): ResumeComposition | ResumeCompositionUnlinked | undefined;
37
+ //# sourceMappingURL=resume-composition.d.ts.map
@@ -0,0 +1,18 @@
1
+ import { cascadeConfig } from "./run-meta.js";
2
+ import { verifyRoundsFromBody } from "./verify-rounds.js";
3
+ export function resumeCompositionOf(body, card, cascadeLadder) {
4
+ const rounds = verifyRoundsFromBody(body);
5
+ if (rounds !== undefined)
6
+ return { entry: "verify", rounds };
7
+ if (body.cascade !== true)
8
+ return undefined;
9
+ const leg = card.state?.compositionLeg;
10
+ if (typeof leg !== "object" || leg === null || leg.entry !== "cascade")
11
+ return { entry: "cascade_unlinked" };
12
+ const objectiveInputs = {
13
+ ...(body.userAttachments !== undefined ? { userAttachments: body.userAttachments } : {}),
14
+ ...(body.images !== undefined ? { images: body.images } : {}),
15
+ };
16
+ return { entry: "cascade", config: cascadeConfig(cascadeLadder, body.maxCostUsd), parkedLeg: leg, objectiveInputs };
17
+ }
18
+ //# sourceMappingURL=resume-composition.js.map
@@ -6,21 +6,22 @@
6
6
  * 机制上「坏体不再与缺席同答」成立,**用户面上不成立**(用户拿到的还是同一个 409)。判据要钉用户实际
7
7
  * 拿到的码,这只铸点就是让那句判据有地方落(test [ref] 的判据订正,当拍采纳)。
8
8
  *
9
- * 三态与各自的理由:
9
+ * 各态与各自的理由(店边界的读失败**怎么分类只在一处答**:整仓唯一的店故障判官 `plugins/store-fault.ts` 的 `storeFaultClassOf`,
10
+ * 本口按它的五词逐词落地 —— 一张穷举 `switch`,判官加词而这里不表态 = 编译错;本口自己不认任何错误类):
10
11
  * · `ok` —— 读出来了。
11
- * · `absent` —— 行不在(`reapCtx` 按设计在 run 终态后删掉它),**或**读腿抛了一个**不是坏体**的错
12
- * (连接 / 超时 / 权限 / 店抖动):证不出它在就当它不在,**这是刻意保守**([ref] 方向锚:
13
- * 拒绝可重试,搁浅不可)。
14
- * · `corrupt` —— 店给了它的**拒绝契约**(`StoreCorruptError`,`kind:"corrupt"` + 坐标)。
12
+ * · `absent` —— 店答了「这一行不在」(`null`;`reapCtx` 按设计在 run 终态后删掉它)。**只有**店的这一句答才是缺席:
13
+ * 读失败证不出它在,也证不出它不在,所以不进这一态(修前把连接 / 超时 / 权限 / 店抖动一并读成缺席 —— 断连下续跑被答成
14
+ * 「续跑上下文没了,作为新任务重提」,出路说错,且与判官对同一只错的读法是两份)。
15
+ * · `corrupt` —— 判官的 `corrupt`(店的**拒绝契约** `StoreCorruptError`,`kind:"corrupt"` + 坐标)。
15
16
  * **不折成缺席**:两者的运维动作完全不同(前者去查那一行,后者什么都不用做)。
16
- * ⚠️ `not-text`(投影漂 = 我方的码病)**刻意不进这一态**,原样上抛、响亮成 500 —— 不许伪装成
17
- * 「数据坏了」,更不许折成缺席(那会让一次代码漂看起来像「这条会话没有上下文」)。
17
+ * · `unreadable` —— 判官的 `connection` / `deployment` / `unclassified`:这一次读失败了(库断连 / 拒连 / 超时、缺表 / 权限拒、
18
+ * 认不出的库错)。各续跑入口答 {@link resumeCtxUnreadableAnswer}(503 `state.resume_context_unreadable`):这一请求没有执行,稍后重发 ——
19
+ * 与审批队列读口对「此刻读不出」的读法同一条(判官的这三词并成一个答;[ref] 方向锚「拒绝可重试,搁浅不可」照旧成立:拒在任何状态改动之前)。
20
+ * · 判官的 `defect`(本服务自己的程序错:运行时的六只原生错误类、读腿漂移 `SqlJsonColumnError` 的 `not-text`)⇒ **原样上抛**,响亮成 500 ——
21
+ * 不许伪装成「数据坏了」,也不许折成「此刻读不出」或缺席(那会让一次代码漂看起来像「这条会话没有上下文」,或劝人重试一件注定失败的事)。
18
22
  *
19
- * 🔴 **按「店的拒绝形」分类,不按「列错误类」**([ref],7.95.1:这一句此前反了,整整一版)。修前本口
20
- * 认的是属主谓词 `isJsonColumnBodyProblem`(= 一只 `SqlJsonColumnError`),而 SQL 两孪生的 `refusing()`
21
- * 早把列错误**折**成了一只普通 `Error` ⇒ 折后的错落进下面那条「店抖动 ⇒ 当缺席」臂,坏体与缺席在
22
- * 用户面上仍然同答 409 —— 正是 [ref] 第二半要修的那个病,只是它当时只在 local 车道上修成了(那一侧
23
- * 恰好没折码,把列错误漏了出来 = 巧合式正确)。两条车道现在同一份拒绝契约,本口只认它。
23
+ * 🔴 **按「店的拒绝形」分类,不按「列错误类」**([ref],7.95.1)。SQL 两孪生的 `refusing()` 把列错误**折**成店的拒绝契约,
24
+ * 两条车道同一份拒绝契约;判官认的就是它(`corrupt`),本口不再持有自己的那一份。
24
25
  *
25
26
  * 🔴 **第四态 `unsealable`([ref],7.134.0):读出来了,但凭据位上的封签开不开**。店交出的是**落盘形**(凭据位上是封签,`StoredCheckpointCtx`);
26
27
  * 本口在任何消费者看到之前经**唯一**开口 `openCheckpointCtx` 开封(规则属主 = `checkpoint-ctx.ts` 末段「凭据位密封」)—— 所以 `ok` 交出的恒是开封形,
@@ -43,6 +44,8 @@ export type ResumeCtxRead = {
43
44
  } | {
44
45
  readonly kind: "corrupt";
45
46
  readonly where: string;
47
+ } | {
48
+ readonly kind: "unreadable";
46
49
  } | {
47
50
  readonly kind: "unsealable";
48
51
  readonly field: string;
@@ -54,6 +57,37 @@ export interface CheckpointCtxOpening {
54
57
  readonly opener: CheckpointCtxOpener | undefined;
55
58
  }
56
59
  export declare function readResumeCtx(load: Promise<StoredCheckpointCtx | null>, opening: CheckpointCtxOpening): Promise<ResumeCtxRead>;
60
+ /**
61
+ * 续跑家族一次店往返失败的落点 —— 判官的五词逐词表态,**只在这一处**。三个读者同读它:本口读续跑上下文那一读、续跑腿读「这张卡归哪条 run」那一读,
62
+ * 与续跑腿的认领(`resume-legs.ts` 的 `resumeClaimFaultAnswerOf`:认领那一笔,或认领之后执行席那一次读 / 写失败 —— 后者的认领已由写口撤回)。
63
+ * `corrupt` ⇒ 坏体(带坐标);`connection` / `deployment` / `unclassified` ⇒ 读不出 / 写不进;`defect` ⇒ 原样上抛。
64
+ */
65
+ export declare function resumeStoreFailureOf(e: unknown): {
66
+ readonly kind: "corrupt";
67
+ readonly where: string;
68
+ } | {
69
+ readonly kind: "unreadable";
70
+ };
71
+ /**
72
+ * 读失败的对外答复 —— 503 `state.resume_context_unreadable`:这一次读这条会话的续跑上下文失败了(判官的 `connection` / `deployment` / `unclassified`),
73
+ * 这一请求**没有执行**(拒在任何状态改动之前:卡仍待决、行字节不动、一次性 nonce 未烧),稍后原样重发;一直如此 ⇒ 请运维查库。句子不带店层 detail(内部机件不上 wire,[ref] 同律)。
74
+ * 全部续跑入口与终态 steer 的铸卡证明腿同一只答(码 / 句同源)。
75
+ * 🔴 形是给冻结门看的(与 {@link resumeCtxCorruptAnswer} 同一条):`status: <三位数>, body: refusalBody({ errorCode: "<码>", message: "<整句双引号字面>"`,中间只许有空白。
76
+ */
77
+ export declare function resumeCtxUnreadableAnswer(): {
78
+ status: number;
79
+ body: RefusalBody;
80
+ };
81
+ /**
82
+ * 续跑腿**认领**撞店故障的对外答复 —— 认领那一笔(`markResuming` / wake 现建行的 `createRun`)或认领之后那一次提交(执行席的再读 / 落格)。
83
+ * 与 {@link resumeCtxUnreadableAnswer} **同码同状态**(503 `state.resume_context_unreadable`:店这一拍没答出来,这一请求没有执行,稍后原样重发;一直如此 ⇒ 请运维查库),
84
+ * 句子说的是这一形自己的事:读或写这条任务的存储状态失败了,卡仍待决(认领之后那一形的认领已由写口撤回到取来时的样子)。句子不带店层 detail。
85
+ * 🔴 形是给冻结门看的(与 {@link resumeCtxCorruptAnswer} 同一条):`status: <三位数>, body: refusalBody({ errorCode: "<码>", message: "<整句双引号字面>"`,中间只许有空白。
86
+ */
87
+ export declare function resumeClaimFaultAnswer(): {
88
+ status: number;
89
+ body: RefusalBody;
90
+ };
57
91
  /**
58
92
  * 开不开的对外答复([ref])—— 409 `conflict.checkpoint_ctx_unsealable`,机读 `field`(哪一个凭据位,提交体路径;键名不是秘密,值从不进来)+ `reason`
59
93
  * (闭集 `CHECKPOINT_CTX_UNSEALABLE_REASONS`)。句子说「这条任务的续跑上下文里带的凭据本服务开不开」、五种成因与出路(按 `reason` 修好保管目录后原样重发,