@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
@@ -2,7 +2,7 @@
2
2
  * 技能上已退役的 `manifest` 键 —— 「一条技能还带它」的**唯一判据**(core 7.41.0 起 `SkillSpec.manifest` 退役,零别名)。
3
3
  *
4
4
  * 两个读者,同一句话:
5
- * · 提交口的顶层技能门(`admission.ts` 的 `validateUserSkills`):带它(任何值)⇒ 点名拒;
5
+ * · 提交口的两道技能门(顶层 `skills[i]` 与子代 `agents[a].skills[j]`,同经 `spec-fields.ts` 的 `skillItemIssue` → `namedRefusalOf`):带它(任何值)⇒ 点名拒;
6
6
  * · 随包排空脚本(`scripts/drain-check-local.mjs` 的 `retired-skill-manifest` 判据,经脚本隔壁的编译产物 `dist/http/retired-skill-manifest.js` 取):
7
7
  * 升级前停驻、持久化的提交体里仍带它的行,升级后续跑会被引擎按名拒(顶层 `skills[]`)或丢掉那只子代定义(`agents[].skills[]`),运维升级前要能数出来。
8
8
  *
@@ -17,7 +17,6 @@
17
17
  import type { IncomingMessage, ServerResponse } from "node:http";
18
18
  import type { HostDecision } from "../host-decision.js";
19
19
  import type { EntryProblem } from "../entry-problems.js";
20
- import type { SessionOwnerCell } from "../security.js";
21
20
  import type { SessionNotifyDoor } from "../session-notify-door.js";
22
21
  import type { TaskStream, TaskSpec, TaskResult, QuestionAnswer, Checkpoint, CheckpointToken, ResumeOutcome, RunInternals, Runner, EngineNotice, PendingSteerInput } from "@sema-agent/core";
23
22
  import type { FlatServiceDeps, RequestAuth } from "./server.js";
@@ -37,6 +36,9 @@ import type { RootedTaskSpec } from "./execution-context.js";
37
36
  import type { GateCommitment, GateSettlementEvidence } from "../gate-settlement.js";
38
37
  import type { ResumeRestatement } from "./resume-restatement.js";
39
38
  import type { RememberLaneCannotRecord } from "../parked-decide.js";
39
+ import type { RowWayOut } from "./resume-legs.js";
40
+ import type { KeyCaller } from "../owner-faces.js";
41
+ import type { Subject } from "../owner-brands.js";
40
42
  /** 跨域可变状态 = lens1 §C2 实测的那 8 条「运行期登记簿」,一个对象。
41
43
  * [ref]:`cancelledViaVerb`(按 taskId 键控的「这次是取消动词」旁表)删除 —— 中止成因改挂在每条腿自己的
42
44
  * {@link RunAbort} 句柄上(`inflightRuns` 的值),同寿同删,不再有一张与腿不同寿的旁表。 */
@@ -59,11 +61,12 @@ export interface RouteHelpers {
59
61
  readRawBody(req: IncomingMessage, max: number): Promise<Buffer>;
60
62
  rateLimited(req: IncomingMessage, res: ServerResponse): boolean;
61
63
  quotaExceeded(req: IncomingMessage, res: ServerResponse): boolean;
62
- leaseDenied(req: IncomingMessage, res: ServerResponse): Promise<boolean>;
64
+ /** `seat` 在场(提交门之后的调用点)⇒ 拒经出口座写(`submission-exit.ts`:先收场、再写);缺席(提交门之前)⇒ 当场写。下面 `usageWindowDenied` / `admitRun` 同。 */
65
+ leaseDenied(req: IncomingMessage, res: ServerResponse, seat?: TerminalSeat): Promise<boolean>;
63
66
  /**
64
67
  * 🔴 **[ref]:按**付费**方(不是请求方)判的成本配额准入 —— {@link quotaExceeded} 的孪生。**
65
68
  *
66
- * `quotaExceeded` 键在 `gatedPrincipal(req)` = 谁点的按钮;本门键在**这笔钱记谁的账**。两者在自助
69
+ * `quotaExceeded` 键在 `gatedSubject(req)` = 谁点的按钮;本门键在**这笔钱记谁的账**。两者在自助
67
70
  * 场景恒相等,在「显式 operator 代别人动手」的场景不等 —— 那正是配额上限被绕过的那一支。
68
71
  * 参数 `owner` 由调用点从**已属主校验过的那一行**取(run 行的 `owner` / checkpoint 的 scope),
69
72
  * 本门不自己推身份(推得出来就说明调用点还有第二个身份源,那才是病)。
@@ -79,23 +82,14 @@ export interface RouteHelpers {
79
82
  * 「拿自己的额度去烧别人的账」的那一支。同样必须排在 owner 门之后、驱动之前。 */
80
83
  ownerLeaseDenied(res: ServerResponse, owner: string | undefined): Promise<boolean>;
81
84
  /** [ref]-T1:治理窗 pre-admission(异步 202 车道的唯一 429 出路;key 公式与 core 单源)。 */
82
- usageWindowDenied(req: IncomingMessage, res: ServerResponse): Promise<boolean>;
85
+ usageWindowDenied(req: IncomingMessage, res: ServerResponse, seat?: TerminalSeat): Promise<boolean>;
83
86
  /**
84
87
  * 在飞 run 并发帽的提交门准入(`RUN_MAX_CONCURRENT*`,缺省关;判据、席位与拒的形全文在 `http/run-concurrency-cap.ts`):放行 ⇒ 席位(登记那一拍与 `finally` 放);
85
- * 超帽 ⇒ 已应答 429 + `Retry-After`、回 `undefined`。只挂**新提交**门(`createDurableRun` / `POST /v1/tasks` / `POST /v1/tasks/stream`),
88
+ * 超帽 ⇒ 已(经出口座)应答 429 + `Retry-After`、回 `undefined`。只挂**新提交**门(`createDurableRun` / `POST /v1/tasks` / `POST /v1/tasks/stream`),
86
89
  * 排在幂等重放与 `usageWindowDenied` 之后、任何建行 / 认领 / SSE 头之前。
87
90
  */
88
- admitRun(req: IncomingMessage, res: ServerResponse): import("./run-concurrency-cap.js").RunSlot | undefined;
91
+ admitRun(req: IncomingMessage, res: ServerResponse, seat: TerminalSeat): Promise<import("./run-concurrency-cap.js").RunSlot | undefined>;
89
92
  safeDecode(seg: string): string | null;
90
- /** run 面的属主门(谓词 `runOwnerReadable`;非属主 ⇒ 404 `not_found.run` + 长文,与 run 读口的 unknown 臂同码同串,[ref])。 */
91
- runOwnerOk(req: IncomingMessage, res: ServerResponse, owner: string | null): boolean;
92
- /** 会话面的属主门(谓词 `sessionOwnerReadable`,[ref]:没有身份边界的部署不钉人,与会话列表同读;非属主 ⇒ 404 `not_found.session` +
93
- * {@link SESSION_NOT_FOUND_MESSAGE},与会话读口的 unknown 臂同码同串 —— G52 [ref] / [ref])。每一个按会话寻址的属主判都走它。
94
- * `cell` = 调用点经 `security.ts` 的 `sessionOwnerCellOf` 读出的那一格([ref]:无主的委派子代 placed 行只对 fleet 调用方放行,判据 `ownerlessRowOpen`)。 */
95
- sessionOwnerOk(req: IncomingMessage, res: ServerResponse, cell: SessionOwnerCell): boolean;
96
- runSessionAcceptOk(req: IncomingMessage, res: ServerResponse, run: {
97
- sessionId: string | null;
98
- }, face: string, notFoundError?: string): boolean;
99
93
  }
100
94
  /** 单域独占状态(lens1 实测 12 条)——不进 registry,跟着各自的域模块走;每个 server 实例一份
101
95
  * (模块级会把 rate-limiter / 缓存跨实例串味,测试里一个进程建几十个 server)。 */
@@ -126,6 +120,8 @@ export interface RouteRequestState {
126
120
  }
127
121
  /** B4①(命名化):`prepareSpec` 的返回形(tasks.ts/runs.ts 两域共同消费的属性面)——原为 6 成员内联匿名对象。
128
122
  * 命名后好处不只是过 B4 门:两个消费域现在都能对同一个符号做 `import type` 标注,而不是各自重推断结构。 */
123
+ /** 提交门之后的拒交给出口座写的那一面(`submission-exit.ts`)。 */
124
+ export type TerminalSeat = Pick<import("../submission-exit.js").SubmissionSeat, "deliverTerminal">;
129
125
  export interface PreparedTaskSubmission {
130
126
  /** 盖过根的 spec(`http/execution-context.ts` `stampSpecRoot` 是唯一写者):`sessionId` 恒在 = 这次提交的根会话。 */
131
127
  spec: RootedTaskSpec;
@@ -171,6 +167,11 @@ export interface PreparedTaskSubmission {
171
167
  * 不经提交门的内部车道(`/decide` 的宿主新 turn)铸一只不带标题器的座:不起标题。
172
168
  */
173
169
  acceptance: import("../run-acceptance.js").RunAcceptance;
170
+ /**
171
+ * 这次提交的**出口座**(`submission-exit.ts`):提交门在授权之前铸,授权器登记新行时把候选交给它、受理座挂在它上面。三条提交腿认领赢时交本次 run、
172
+ * 交出查询责任时标 record,终局应答经 `seat.deliverTerminal` 写,在自己的路径上、终局应答之前 `seat.close()` —— 被拒的提交铸下的会话在应答发出之前撤回。
173
+ */
174
+ seat: import("../submission-exit.js").SubmissionSeat;
174
175
  /**
175
176
  * 这次装配的**宿主租约**:受理漏斗在装配之前开(`peerDesk.lease("fresh")`),装配在它之下登记交给引擎的对端声明;漏斗成功即把它交到这里 ——
176
177
  * 拿到本产物的那只函数紧接着写 `try { … } finally { prepared.peerLease.release() }`,其后每个出口(早退、合流败方、建行拒、驱动返回)按构造都放。
@@ -291,6 +292,11 @@ export interface DriveResumeArgs {
291
292
  sessionId: string;
292
293
  ctx: CheckpointCtx;
293
294
  };
295
+ /**
296
+ * 判官判本引擎续不了这条腿要续的那张卡时,这张卡的出路(`resume-legs.ts` 的 `rowWayOutOf`;判 `ok` / 说不出 ⇒ 缺席)。`/plan_review` 与 `/resume` 在驱动前对载入行求它;
297
+ * catch 臂在引擎的拒留卡 pending(处置 `retriable`)时把它作 `wayOut` 加进拒体 —— 引擎的拒原样不改(码、`field`、`blockedBy`、`thrownName`、诊断都在)。
298
+ */
299
+ rowWayOut?: RowWayOut;
294
300
  /**
295
301
  * 这条续跑的**宿主租约**(续跑漏斗 `resolveResumeSpecOrBlocked` 开、装配在它之下登记对端声明;调用方作用域的 `finally` 放)。
296
302
  * 驱动腿经 `heldFor(args.peerLease, () => driveResumeLeg(…))` 自持一只:受理早回的那一形里,腿活过调用方作用域,自己落定才放。
@@ -302,7 +308,8 @@ export interface DriveResumeArgs {
302
308
  /** 这条腿的部署事实(`leg-facts.ts`):续跑漏斗在复制之前读出的那一份(与 {@link PreparedTaskSubmission.legFacts} 同一律)。读者 = 本腿的 `wiring_manifest.skills` 段与会话行记录座。 */
303
309
  legFacts: import("../leg-facts.js").LegFacts | undefined;
304
310
  sessionId: string;
305
- principal: string | undefined;
311
+ /** 卡属主的**主体**(分区键;`decodeCheckpointScope(cp.scope)` 恢复):ALS 与行属主读它,付费方两道门读它背后的人(`personOf`)。 */
312
+ subject: string | undefined;
306
313
  fleetScope: string;
307
314
  taskConfig: Omit<TaskSpec, "objective" | "sessionId">;
308
315
  resumeObjective: string;
@@ -313,7 +320,8 @@ export interface DriveResumeArgs {
313
320
  * 它只是分类:位由受理点与终局体两个边界按它铸,从不只凭这一句声明铸;缺席的取消出口(`checkpoint.resume_aborted` / 抛出臂)不铸。
314
321
  */
315
322
  commitment: GateCommitment;
316
- verifyRounds: VerifyRoundsSpec | undefined;
323
+ /** 续跑腿接着跑哪一只组合入口(verify 验证门 / cascade 梯子;缺席 = 普通腿);读法的唯一属主 = `resume-composition.ts`。 */
324
+ composition: import("./resume-composition.js").ResumeComposition | undefined;
317
325
  /**
318
326
  * **R-1**(车CJ 收车档 §10 R-1;[ref] 批落地)—— 本条 resume 腿**装配期**铸下的用户面通告
319
327
  * (`PreparedTaskSubmission.engineNotices` 的 resume 孪生;今天唯一一族:`mcp.injection_dropped`)。
@@ -356,7 +364,7 @@ export interface DriveResumeArgs {
356
364
  * markResuming CAS(409 `conflict.not_resumable`)、pre-CAS CheckpointError(绑定不符 409 /
357
365
  * 卡不在 404)。异步化的只有模型往返段。
358
366
  *
359
- * ⚠️ **verify 腿(`verifyRounds` 在场)不受本位影响**:core 的 `resumeWithVerification` 是一次整包
367
+ * ⚠️ **组合腿(`composition` 在场:verify / cascade)不受本位影响**:core 的 `resumeWithVerification` 是一次整包
360
368
  * await,没有「CAS 已过、模型还没跑」这个缝可停 —— 在那条臂上提前受理就等于把绑定判别也异步化了
361
369
  * (那是决策证明的一部分,不能丢)。故它维持同步长调用形,如实登记在 CHANGELOG/契约文档。
362
370
  *
@@ -468,10 +476,7 @@ export interface RouteLegs {
468
476
  acceptEarly?: boolean,
469
477
  /** [ref]:调用方已验身份的裁定 —— stale 臂铸 `currentPending` 指路键前在被读回的行上重跑 decide 门
470
478
  * 同一属主判(缺席 ⇒ 恒不造键;判据属主=server.ts 铸键点注)。 */
471
- decider?: {
472
- principal?: string;
473
- explicitOperator: boolean;
474
- },
479
+ decider?: KeyCaller,
475
480
  /** 续跑请求的重述键(`mcpServers` / `a2aPeers`),门读出并判过的那一份;缺席 = 冻结读法。语义属主 = `resume-restatement.ts` 顶注。 */
476
481
  restatement?: ResumeRestatement): Promise<ResumeCheckpointOutcome>;
477
482
  /** 全 resume 家族的共同下半场(lease admission + 写 run log + fleet 发布)。 */
@@ -482,16 +487,13 @@ export interface RouteLegs {
482
487
  acceptEarly?: boolean,
483
488
  /** [ref]②([ref]):调用方已验身份的裁定 —— 腿内在被真正载入的 checkpoint 行上重跑属主判
484
489
  * ([ref] R3 同形;缺席 = 匿名 dev 部署,不咬)。 */
485
- decider?: {
486
- principal?: string;
487
- explicitOperator: boolean;
488
- },
490
+ decider?: KeyCaller,
489
491
  /** 续跑请求的重述键(同 {@link RouteLegs.resumeCheckpoint} 末参)。 */
490
492
  restatement?: ResumeRestatement): Promise<ResumeLegOutcome>;
491
493
  /** notify-wake 域:唤醒一条 parked checkpoint。 */
492
494
  resumeWake(sessionId: string,
493
495
  /** 续跑首轮那段话连同框架位,由文本出处在铸点定好(HTTP `/wake` 正文 ⇒ `trusted: false`);语义属主 = `resume-legs.ts` 同名形参顶注。 */
494
- message: PendingSteerInput | undefined, caller: string | undefined, req: IncomingMessage | undefined,
496
+ message: PendingSteerInput | undefined, caller: Subject | undefined, req: IncomingMessage | undefined,
495
497
  /** [ref] 件 S-1:透传给 {@link DriveResumeArgs.acceptEarly}(200 受理语义)。HTTP `/wake` 腿传 `true`
496
498
  * —— 本腿走 `mintFreshRun`,受理体里的 `taskId` 因此是**新铸的**那个(壳的 poll 锚)。 */
497
499
  acceptEarly?: boolean,
@@ -515,10 +517,7 @@ export interface RouteLegs {
515
517
  },
516
518
  /** [ref]②([ref]):调用方已验身份的裁定(直连门 = HMAC 验出的 principal)—— 属主轻读与行级属主复核
517
519
  * ([ref] R3 同形;缺席 = 匿名 dev 部署,不咬)。 */
518
- decider?: {
519
- principal?: string;
520
- explicitOperator: boolean;
521
- },
520
+ decider?: KeyCaller,
522
521
  /** [ref]:决断方看到的那道门(决断体的 `checkpointId`);不是当前门 ⇒ `409 approval_stale`(`approval_stale` 律,语义属主 = `resume-legs.ts` 的同名形参顶注)。 */
523
522
  sighting?: GateSighting,
524
523
  /** 续跑请求的重述键(同 {@link RouteLegs.resumeCheckpoint} 末参):盖在这一次 ctx 读上,存体预判按盖过的体判。 */
@@ -783,7 +782,7 @@ export declare const RUN_NOT_FOUND_MESSAGE = "run not found \u2014 the id belong
783
782
  *
784
783
  * 为什么是常量不是各点字面量:这句话要在**每一个**会话面的「不存在」臂与「非属主」臂上逐字节同串(G52 [ref] /
785
784
  * [ref] —— 两臂差一个码或一个字就是单端点内的存在性 oracle)。十余个出站点各抄一份,漂开的那天没有任何东西会说话;
786
- * 走一只常量 + `runOwnerOk(..., "session")` 的会话拼法,「改一处」就是改全域。
785
+ * 走一只常量 + `admitRunRow(..., "session")` 的会话拼法,「改一处」就是改全域。
787
786
  */
788
787
  export declare const SESSION_NOT_FOUND_MESSAGE = "session not found";
789
788
  /** [ref] 前缀=域判别子既成契约:a\* 与 wa\* 形 id 给任务句柄读腿 / journal 指路;其余给 {@link RUN_NOT_FOUND_MESSAGE}。 */
@@ -1,8 +1,10 @@
1
1
  import type { IncomingMessage, ServerResponse } from "node:http";
2
2
  import type { A2ATaskState } from "@sema-agent/core";
3
- import type { A2aServeConfig } from "../../config-types.js";
3
+ import type { A2aServeConfig, A2aServeSkill } from "../../config-types.js";
4
4
  import { type RunRecord } from "../../plugins/store-contracts.js";
5
5
  import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
6
+ import type { RunStore } from "../../plugins/store-backend.js";
7
+ import type { Person } from "../../owner-brands.js";
6
8
  /** 本实现说的 A2A 协议版本 —— 卡的 `protocolVersion` 与每条 RPC 响应的 `a2a-version` 头同源(单点)。 */
7
9
  export declare const A2A_PROTOCOL_VERSION = "1.0";
8
10
  /** 版本头名。**读**请求侧的它只是诊断材料(开集容忍:认识与否都照常答),**写**响应侧的它是我们自报
@@ -15,17 +17,38 @@ interface A2aCardSkill {
15
17
  name: string;
16
18
  description?: string;
17
19
  }
18
- /** A2A AgentCard 的 server 铸面。**具名字段 + 允许未来 additive**(设计稿 §4-5 数据形扩展槽)。 */
20
+ /** A2A AgentCard 的 server 铸面 —— **sema 方言**:字段族是 A2A v0.3 的(顶层 `url` + `preferredTransport`,方法名 v0.3 拼法),
21
+ * 标签 `protocolVersion: "1.0"` 跟随 core 客户端腿;**不是**完整的 v0.3 AgentCard(v0.3 要的 `version` / `capabilities` /
22
+ * `defaultInputModes` / `defaultOutputModes` / 技能 `tags` / `securitySchemes` 本卡都没有 —— 已声明的方言差异,契约附录 C.1 列全)。
23
+ * **具名字段 + 允许未来 additive**(设计稿 §4-5 数据形扩展槽)。公开卡与扩展卡**同形**,只差 `skills` 的过滤。 */
19
24
  interface A2aAgentCard {
20
25
  name: string;
21
26
  description?: string;
22
27
  protocolVersion: string;
23
28
  url: string;
24
29
  preferredTransport: "JSONRPC";
30
+ /** 扩展卡方法在不在方法表里(**派生**,不是常量也不是配置)⇒ 与配没配 `audience` 无关:匿名读者从卡上读不出「这里有隐藏技能」。 */
31
+ supportsAuthenticatedExtendedCard: boolean;
25
32
  skills: A2aCardSkill[];
26
33
  }
27
- /** 配置 → 卡(纯投影,零 I/O、零存量读)。`build*`:返回纯数据。 */
28
- export declare function buildAgentCard(serve: A2aServeConfig): A2aAgentCard;
34
+ /** (配置, 这次请求验过的人, 方法表) → 卡(纯投影,零 I/O、零存量读)。`build*`:返回纯数据。
35
+ * `reader` 缺席 = 公开卡;在场 = 扩展卡(按 {@link skillsOfferedTo} 过滤)。旗读方法表(调用点恒传 {@link A2A_METHODS})。 */
36
+ export declare function buildAgentCard(serve: A2aServeConfig, reader: Person | undefined, methods: ReadonlyMap<string, A2aMethodHandler>): A2aAgentCard;
37
+ /** sema 方言扩展卡的方法名(A2A v0.3 §7.10 的拼法,与 `message/send` / `tasks/get` 同一方言;不加 1.0 别名 —— 一种方言一个名字)。 */
38
+ export declare const EXTENDED_CARD_METHOD = "agent/getAuthenticatedExtendedCard";
39
+ /**
40
+ * 🔴 **发布规则(唯一谓词)**:提供给 `reader` 的技能 = 没写 `audience` 的技能 ∪ `audience` 含这个人的技能(声明序,只滤不排)。
41
+ * 三处同读 —— 公开卡(`reader` 缺席)、扩展卡、`message/send` 的 `sema.skillId` 选择 ⇒ **看得见 ⇔ 点得中**;本文件读
42
+ * `serve.skills` 的只有这一处。
43
+ *
44
+ * **发布 ≠ 授权**:它决定这条技能对谁公告、谁能按 id 点名,**不**决定谁能跑它背后的场景。场景的唯一授权门是场景门
45
+ * (中心白名单,只在接了中心时存在);不读技能的入口(不带 `sema.skillId` 走指派链 / 映射到同一场景的公开技能 /
46
+ * 原生提交族 `POST /v1/runs` · `POST /v1/tasks` · `POST /v1/tasks/stream` 体里的 `scenario`)都不经过本谓词。
47
+ *
48
+ * 形参收**验过的人**那只品牌:只带 service 凭据(含代部署本人)的请求没有人 ⇒ 只得公开技能;fleet 资格与运维名册**不**扩大投影 ——
49
+ * 这里不读它们,运维照他自己这个人投影(运维不提权、fleet 不算)。
50
+ */
51
+ export declare function skillsOfferedTo(serve: A2aServeConfig, reader: Person | undefined): readonly A2aServeSkill[];
29
52
  /**
30
53
  * 域入口①:公开发现面。**位置即契约** —— 必须挂在 `server.ts` 的全局 service-credential 门**之前**
31
54
  * (R-11「公网匿名可发现」;挂在门后等于要凭据才能发现,协商第一步就断)。
@@ -55,7 +78,22 @@ export declare const A2A_TASK_NOT_FOUND_MESSAGE = "task not found";
55
78
  * 而那个决议走的是持久审批口、不是一条回信 —— 与 core 对自己 `parked` 行的裁词同源。A2A 调用方因此
56
79
  * **不能**靠再发一条 message 解开它(附录 C.3 的表里成文写着这句)。
57
80
  */
58
- export declare function a2aStateForRun(run: Pick<RunRecord, "status" | "errorCode">, stale: boolean): A2ATaskState;
81
+ export declare function a2aStateForRun(run: Pick<RunRecord, "status" | "errorCode">): A2ATaskState;
82
+ /** 一个方法处理器。返回 `result`(被包进 JSON-RPC 成功体)、返回 `undefined`(= 已自行应答)或抛 {@link RpcError}。 */
83
+ type A2aMethodHandler = (args: {
84
+ req: IncomingMessage;
85
+ res: ServerResponse;
86
+ ctx: RouteCtx;
87
+ params: Record<string, unknown>;
88
+ serve: A2aServeConfig;
89
+ /** 事实 `a2aServe` 的见证:两只方法都站在这只 durable run 店上(无店 ⇒ 路由层已 404,走不到方法)。 */
90
+ runStore: RunStore;
91
+ }) => Promise<unknown>;
92
+ /**
93
+ * 技能选择拒句(**常量**,零技能 id):点名一条没声明的技能与点名一条没发布给你的技能,拒体逐字节相同 —— 同一个 throw 点、同一句话。
94
+ * 回显输入的 id 会把「这个 id 在这台部署上有没有含义」交给调用方比对(拼错的调用方看不到回显:它能看的技能名单就在它拉得到的卡上)。
95
+ */
96
+ export declare const A2A_UNOFFERED_SKILL_MESSAGE = "unknown skill id \u2014 params.message.metadata[\"sema.skillId\"] does not name a skill offered to this caller; the skills a caller can name are the ones on the agent card it can read (the public card, or the authenticated extended card)";
59
97
  /**
60
98
  * 域入口②:JSON-RPC 端点。**位置即契约** —— 挂在全局 service-credential 门**之后**(R-11「持服务凭据
61
99
  * 才可调」),且在 drain / model-roster-pending 两道 503 门之后(`/v1/a2a` 进 `isBillableSubmitPath`:
@@ -6,25 +6,33 @@ import { HttpError } from "../../security.js";
6
6
  import { idemCallerOf, idemIdentityOf, idemKeyOf, inflightKeyOf } from "../idempotency.js";
7
7
  import { isRunExistsConflictBody, replayOfExistingRun } from "../submit-replay.js";
8
8
  import { isActiveRunConflictBody } from "../active-run-conflict.js";
9
- import { sendJson, sendError } from "../send.js";
9
+ import { sendJson, sendError, sendHttpError } from "../send.js";
10
10
  import { admissionRefusalOf, readinessOf, sendBillableRefusal } from "../readiness.js";
11
- import { gatedPrincipal, sendPrincipalRefusal } from "../principal-gate.js";
12
- import { readOwnedRun } from "../owner-access.js";
11
+ import { gatedPerson, gatedSubject, sendPrincipalRefusal, verifiedIdentitySource } from "../principal-gate.js";
12
+ import { callerOf, protocolEntry, readVisibleRun, runRowAt } from "../owner-access.js";
13
13
  import { assertNever } from "../route-ctx.js";
14
14
  import * as facts from "../../capability-facts.js";
15
15
  import { createDurableRun } from "./runs.js";
16
16
  export const A2A_PROTOCOL_VERSION = "1.0";
17
17
  export const A2A_VERSION_HEADER = "a2a-version";
18
- export function buildAgentCard(serve) {
18
+ export function buildAgentCard(serve, reader, methods) {
19
19
  return {
20
20
  name: serve.name,
21
21
  ...(serve.description !== undefined ? { description: serve.description } : {}),
22
22
  protocolVersion: A2A_PROTOCOL_VERSION,
23
23
  url: serve.url,
24
24
  preferredTransport: "JSONRPC",
25
- skills: serve.skills.map((s) => ({ id: s.id, name: s.name ?? s.id, ...(s.description !== undefined ? { description: s.description } : {}) })),
25
+ supportsAuthenticatedExtendedCard: methods.has(EXTENDED_CARD_METHOD),
26
+ skills: skillsOfferedTo(serve, reader).map((s) => ({ id: s.id, name: s.name ?? s.id, ...(s.description !== undefined ? { description: s.description } : {}) })),
26
27
  };
27
28
  }
29
+ export const EXTENDED_CARD_METHOD = "agent/getAuthenticatedExtendedCard";
30
+ export function skillsOfferedTo(serve, reader) {
31
+ return serve.skills.filter((s) => s.audience === undefined || (reader !== undefined && s.audience.includes(reader)));
32
+ }
33
+ function cardReaderOf(req, config) {
34
+ return verifiedIdentitySource(req, config) === undefined ? undefined : gatedPerson(req, config);
35
+ }
28
36
  export async function handleA2aServe(req, res, match, ctx) {
29
37
  const { deps } = ctx;
30
38
  switch (match.decl.id) {
@@ -35,7 +43,7 @@ export async function handleA2aServe(req, res, match, ctx) {
35
43
  return;
36
44
  }
37
45
  res.setHeader(A2A_VERSION_HEADER, A2A_PROTOCOL_VERSION);
38
- sendJson(res, 200, buildAgentCard(peer.serve));
46
+ sendJson(res, 200, buildAgentCard(peer.serve, undefined, A2A_METHODS));
39
47
  return;
40
48
  }
41
49
  default:
@@ -58,9 +66,7 @@ const A2A_STATE_BY_RUN_STATUS = {
58
66
  suspended: null,
59
67
  needs_review: null,
60
68
  };
61
- export function a2aStateForRun(run, stale) {
62
- if (stale)
63
- return "failed";
69
+ export function a2aStateForRun(run) {
64
70
  if (isParkedRunStatus(run.status))
65
71
  return "input-required";
66
72
  const mapped = A2A_STATE_BY_RUN_STATUS[run.status];
@@ -91,8 +97,8 @@ function statusTextForRun(run, state) {
91
97
  return memo("errorMessage", runPlaneMessage);
92
98
  return undefined;
93
99
  }
94
- function taskFromRun(run, stale) {
95
- const state = a2aStateForRun(run, stale);
100
+ function taskFromRun(run) {
101
+ const state = a2aStateForRun(run);
96
102
  const text = statusTextForRun(run, state);
97
103
  return {
98
104
  kind: "task",
@@ -153,7 +159,8 @@ function objectiveFromParts(parts) {
153
159
  return objective;
154
160
  }
155
161
  const SKILL_METADATA_KEY = "sema.skillId";
156
- function skillFromMetadata(metadata, serve) {
162
+ export const A2A_UNOFFERED_SKILL_MESSAGE = `unknown skill id — params.message.metadata["${SKILL_METADATA_KEY}"] does not name a skill offered to this caller; the skills a caller can name are the ones on the agent card it can read (the public card, or the authenticated extended card)`;
163
+ function skillFromMetadata(metadata, serve, reader) {
157
164
  if (metadata === undefined || metadata === null)
158
165
  return undefined;
159
166
  const meta = asRecord(metadata, "params.message.metadata");
@@ -161,15 +168,14 @@ function skillFromMetadata(metadata, serve) {
161
168
  if (raw === undefined)
162
169
  return undefined;
163
170
  const id = asNonEmptyString(raw, `params.message.metadata["${SKILL_METADATA_KEY}"]`, MAX_SKILL_ID_CHARS);
164
- const skill = serve.skills.find((s) => s.id === id);
171
+ const skill = skillsOfferedTo(serve, reader).find((s) => s.id === id);
165
172
  if (!skill)
166
- throw new RpcError(JSONRPC_INVALID_PARAMS, `unknown skill id ${JSON.stringify(id)} — the skills this agent serves are the ones listed on its agent card`);
173
+ throw new RpcError(JSONRPC_INVALID_PARAMS, A2A_UNOFFERED_SKILL_MESSAGE);
167
174
  return skill;
168
175
  }
169
- function rpcErrorFromTypedFailure(err, skillId) {
170
- const where = skillId !== undefined ? `skill ${JSON.stringify(skillId)}` : "this request";
176
+ function rpcErrorFromTypedFailure(err) {
171
177
  if (err.status >= 400 && err.status < 500) {
172
- return new RpcError(JSONRPC_INVALID_PARAMS, `the serving deployment refused this submission for ${where} (its configuration does not currently admit it); the operator's logs carry the reason`);
178
+ return new RpcError(JSONRPC_INVALID_PARAMS, "the serving deployment refused this request (its configuration does not currently admit it); the operator's logs carry the reason");
173
179
  }
174
180
  return new RpcError(JSONRPC_INTERNAL_ERROR, "internal error");
175
181
  }
@@ -191,9 +197,6 @@ function readBlocking(params) {
191
197
  throw new RpcError(JSONRPC_INVALID_PARAMS, "params.configuration.blocking must be a boolean");
192
198
  return c.blocking;
193
199
  }
194
- function isStaleRun(run, runStaleSec) {
195
- return run.status === "running" && Date.now() - new Date(run.updatedAt).getTime() > runStaleSec * 1000;
196
- }
197
200
  async function waitForRun(ctx, store, res, taskId, budgetMs) {
198
201
  const { deps } = ctx;
199
202
  const deadline = Date.now() + budgetMs;
@@ -201,14 +204,15 @@ async function waitForRun(ctx, store, res, taskId, budgetMs) {
201
204
  for (;;) {
202
205
  let run;
203
206
  try {
204
- run = (await store.getRun(taskId)) ?? null;
207
+ const raw = await store.getRun(taskId);
208
+ run = raw ? await runRowAt("run.a2a", store, raw) : null;
205
209
  }
206
210
  catch (e) {
207
211
  deps.logger?.warn?.("a2a_serve_wait_read_failed", { error: e?.message });
208
212
  return last;
209
213
  }
210
214
  last = run ?? last;
211
- if (run && a2aStateForRun(run, isStaleRun(run, deps.config.runStaleSec)) !== "working")
215
+ if (run && a2aStateForRun(run) !== "working")
212
216
  return run;
213
217
  const left = deadline - Date.now();
214
218
  if (left <= 0)
@@ -231,7 +235,7 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
231
235
  const objective = objectiveFromParts(message.parts);
232
236
  const contextId = message.contextId === undefined ? undefined : asString(message.contextId, "params.message.contextId");
233
237
  const messageId = asNonEmptyString(message.messageId, "params.message.messageId", MAX_MESSAGE_ID_CHARS);
234
- const skill = skillFromMetadata(message.metadata, serve);
238
+ const skill = skillFromMetadata(message.metadata, serve, cardReaderOf(req, deps.config));
235
239
  const skillId = skill?.id;
236
240
  const scenario = skill?.scenario;
237
241
  const blocking = readBlocking(params);
@@ -242,7 +246,7 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
242
246
  .update(contextId ?? "").update("\x1f")
243
247
  .update(skillId ?? "")
244
248
  .digest("hex");
245
- const submitter = gatedPrincipal(req, deps.config);
249
+ const submitter = gatedSubject(req, deps.config);
246
250
  const idem = { key: idemKeyOf(fingerprint, caller, "run"), bodyFingerprint: fingerprint };
247
251
  const body = {
248
252
  objective,
@@ -251,9 +255,9 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
251
255
  ...(scenario !== undefined ? { scenario } : {}),
252
256
  };
253
257
  const keyed = (await runStore.getRunByIdem(idem.key).catch(() => undefined)) ?? (await runStore.getRun(body.taskId).catch(() => undefined));
254
- const replay = keyed ? await replayOfExistingRun(keyed, { principal: submitter, clientTaskId: body.taskId, idem }, "durable", deps, runStore) : undefined;
258
+ const replay = keyed ? await replayOfExistingRun(keyed, { subject: submitter, clientTaskId: body.taskId, idem }, "durable", deps, runStore) : undefined;
255
259
  if (keyed && replay?.status === 202) {
256
- return taskFromRun(keyed, isStaleRun(keyed, deps.config.runStaleSec));
260
+ return taskFromRun(await runRowAt("run.a2a", runStore, keyed));
257
261
  }
258
262
  const inflight = replay === undefined ? ctx.registry.idemCache.peek(inflightKeyOf(idem, "durable", body.taskId)) : undefined;
259
263
  let receipt;
@@ -273,8 +277,10 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
273
277
  typed = e;
274
278
  });
275
279
  if (!prepared) {
276
- if (typed)
277
- throw rpcErrorFromTypedFailure(typed, skillId);
280
+ if (typed) {
281
+ deps.logger?.warn?.("a2a_serve_submission_refused", { status: typed.status, ...(typed.code !== undefined ? { errorCode: typed.code } : {}) });
282
+ throw rpcErrorFromTypedFailure(typed);
283
+ }
278
284
  return undefined;
279
285
  }
280
286
  try {
@@ -294,7 +300,7 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
294
300
  const sessionId = receiptBody.sessionId;
295
301
  const run = await waitForRun(ctx, runStore, res, taskId, blocking ? serve.blockingWaitMs : 0);
296
302
  if (run)
297
- return taskFromRun(run, isStaleRun(run, deps.config.runStaleSec));
303
+ return taskFromRun(run);
298
304
  return {
299
305
  kind: "task",
300
306
  id: taskId,
@@ -305,6 +311,8 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
305
311
  function rpcErrorFromRefusedReceipt(receipt) {
306
312
  const code = receipt.body?.errorCode;
307
313
  const head = `the serving deployment did not accept this submission (it answered ${receipt.status}${typeof code === "string" ? ` ${code}` : ""})`;
314
+ if (receipt.status >= 500)
315
+ return new RpcError(JSONRPC_INTERNAL_ERROR, `${head}; the failure is on the serving side and nothing was started, so the same message can be sent again later`);
308
316
  if (isActiveRunConflictBody(receipt.body))
309
317
  return new RpcError(JSONRPC_INVALID_PARAMS, `${head}; a session already running a turn must finish or be cancelled before the next message on the same contextId`);
310
318
  if (isRunExistsConflictBody(receipt.body))
@@ -322,15 +330,19 @@ function durableIdempotencyTaskId(scope, messageId) {
322
330
  async function handleTasksGet({ req, ctx, params, runStore }) {
323
331
  const { deps } = ctx;
324
332
  const id = asNonEmptyString(params.id, "params.id", MAX_TASK_ID_CHARS);
325
- const run = await readOwnedRun(deps.config, runStore, gatedPrincipal(req, deps.config), id, "owner");
333
+ const run = await readVisibleRun(protocolEntry(req, deps, "run.a2a", callerOf(req, deps)), runStore, id);
326
334
  if (!run)
327
335
  throw new RpcError(A2A_TASK_NOT_FOUND, A2A_TASK_NOT_FOUND_MESSAGE);
328
- return taskFromRun(run, isStaleRun(run, deps.config.runStaleSec));
336
+ return taskFromRun(run);
329
337
  }
330
- const A2A_METHODS = {
331
- "message/send": handleMessageSend,
332
- "tasks/get": handleTasksGet,
333
- };
338
+ async function handleExtendedCard({ req, ctx, serve }) {
339
+ return buildAgentCard(serve, cardReaderOf(req, ctx.deps.config), A2A_METHODS);
340
+ }
341
+ const A2A_METHODS = new Map([
342
+ ["message/send", handleMessageSend],
343
+ ["tasks/get", handleTasksGet],
344
+ [EXTENDED_CARD_METHOD, handleExtendedCard],
345
+ ]);
334
346
  export async function handleA2a(req, res, match, ctx) {
335
347
  const { deps } = ctx;
336
348
  switch (match.decl.id) {
@@ -347,7 +359,18 @@ export async function handleA2a(req, res, match, ctx) {
347
359
  const { serve, runStore } = peer;
348
360
  const requestedVersion = req.headers[A2A_VERSION_HEADER];
349
361
  res.setHeader(A2A_VERSION_HEADER, A2A_PROTOCOL_VERSION);
350
- if (deps.config.requirePrincipal && !gatedPrincipal(req, deps.config)) {
362
+ let a2aSubject;
363
+ try {
364
+ a2aSubject = gatedSubject(req, deps.config);
365
+ }
366
+ catch (e) {
367
+ if (!(e instanceof HttpError))
368
+ throw e;
369
+ deps.metrics?.inc("a2a_serve_rejected_total", { reason: "identity_refused" });
370
+ sendHttpError(res, e);
371
+ return;
372
+ }
373
+ if (deps.config.requirePrincipal && !a2aSubject) {
351
374
  deps.metrics?.inc("a2a_serve_rejected_total", { reason: "principal_required" });
352
375
  sendPrincipalRefusal(res, req, deps.config);
353
376
  return;
@@ -374,7 +397,7 @@ export async function handleA2a(req, res, match, ctx) {
374
397
  return;
375
398
  }
376
399
  const method = rpc.method;
377
- const handler = A2A_METHODS[method];
400
+ const handler = A2A_METHODS.get(method);
378
401
  if (!handler) {
379
402
  deps.metrics?.inc("a2a_serve_rpc_total", { method: "(unknown)", outcome: "method_not_found" });
380
403
  deps.metrics?.inc("a2a_serve_rejected_total", { reason: "method_not_found" });
@@ -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 * as facts from "../../capability-facts.js";
4
4
  import { assertNever } from "../route-ctx.js";
5
5
  export const ADMIN_CONFIG_REFRESH_PATH = "/v1/admin/config/refresh";
@@ -8,7 +8,7 @@ export async function handleAdminConfigRefresh(req, res, match, ctx) {
8
8
  const { deps } = ctx;
9
9
  switch (match.decl.id) {
10
10
  case "admin-config-refresh": {
11
- const principal = gatedPrincipal(req, deps.config);
11
+ const principal = gatedPerson(req, deps.config);
12
12
  if (deps.config.requirePrincipal && !principal) {
13
13
  sendPrincipalRefusal(res, req, deps.config);
14
14
  return;
@@ -1,6 +1,6 @@
1
1
  import { DRAIN_ACTION_ID, readDrainRequest } from "@sema-agent/settings-schema/fleet";
2
2
  import { sendJson, sendError } from "../send.js";
3
- import { gatedPrincipal, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
3
+ import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
4
4
  import * as facts from "../../capability-facts.js";
5
5
  import { fleetScopeOf } from "../../config-types.js";
6
6
  import { drainIdentityMismatches } from "../../fleet/drain-entry.js";
@@ -12,7 +12,7 @@ export async function handleAdminDrain(req, res, match, ctx) {
12
12
  const { deps } = ctx;
13
13
  switch (match.decl.id) {
14
14
  case "admin-drain": {
15
- const principal = gatedPrincipal(req, deps.config);
15
+ const principal = gatedPerson(req, deps.config);
16
16
  if (deps.config.requirePrincipal && !principal) {
17
17
  sendPrincipalRefusal(res, req, deps.config);
18
18
  return;
@@ -1,9 +1,10 @@
1
1
  import { z } from "zod";
2
2
  import { sendJson, sendError } from "../send.js";
3
- import { gatedPrincipal, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
3
+ import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
4
4
  import { assertNever } from "../route-ctx.js";
5
5
  import * as facts from "../../capability-facts.js";
6
6
  import { memoryOptOutPrincipalShapeProblem } from "../../plugins/memory-optout-grant-store-sql.js";
7
+ import { PRINCIPAL_MAX_BYTES } from "../../principal-shape.js";
7
8
  export const ADMIN_MEMORY_OPTOUT_PATH = "/v1/admin/memory-optout";
8
9
  const PutBodySchema = z.object({ allow: z.boolean(), note: z.string().min(1).max(500).optional() }).strict();
9
10
  export async function handleMemoryOptOut(req, res, match, ctx) {
@@ -11,7 +12,7 @@ export async function handleMemoryOptOut(req, res, match, ctx) {
11
12
  const target = match.decl.id === "memory-optout-grants-list" || match.decl.id === "memory-optout-put-default"
12
13
  ? undefined
13
14
  : ctx.helpers.safeDecode(match.params.principal);
14
- const principal = gatedPrincipal(req, deps.config);
15
+ const principal = gatedPerson(req, deps.config);
15
16
  if (deps.config.requirePrincipal && !principal) {
16
17
  sendPrincipalRefusal(res, req, deps.config);
17
18
  return;
@@ -40,7 +41,7 @@ export async function handleMemoryOptOut(req, res, match, ctx) {
40
41
  }
41
42
  const store = fact.store;
42
43
  if (target !== undefined && (target === null || memoryOptOutPrincipalShapeProblem(target) !== undefined)) {
43
- sendError(res, 400, "request.path_malformed", "invalid memory opt-out grant principal — the path segment must percent-decode to a non-empty principal of at most 190 chars with no leading/trailing whitespace or control characters (the deployment default row is addressed by PUT on the collection root, not by a path segment)");
44
+ sendError(res, 400, "request.path_malformed", `invalid memory opt-out grant principal — the path segment must percent-decode to a non-empty principal of at most ${PRINCIPAL_MAX_BYTES} UTF-8 bytes with no leading/trailing whitespace or control characters (the deployment default row is addressed by PUT on the collection root, not by a path segment)`);
44
45
  return;
45
46
  }
46
47
  switch (match.decl.id) {
@@ -12,6 +12,9 @@
12
12
  * · `adoption.destination_unrepresentable` (409):目的地身份装不进这次收编会**派生**出来的某个键
13
13
  * (典型:memory 的 `proj:` 键 = 新 tenant 段 + 原有项目段后缀,合起来越过列宽)。与上一条分家的理由:
14
14
  * 运维的动作完全不同 —— 那条要去清理另一个 principal 的行,这条要换一个更短的目的地身份。
15
+ * · `adoption.table_missing` (409):这个部署**接线了**某个可选存储面(记忆引擎 DB 后端 / 对象存储上的附件店),库上却没有它的表(表被人删了、或 boot 的建表没跑过)。
16
+ * 与前两条分家:那两条是**数据**事实、落永久终态;这条是**部署**事实 —— 弧不落终态(行停在 INTENT、零 UPDATE),补好表(重启一个副本,boot 会建缺的表)后**重发同一请求**即续。
17
+ * **没接线的可选面不在此列**:缺省 file 记忆引擎 / 没配对象存储的部署上那些表本来就不存在,它们的腿不在回执里(`legs[]` 只列真跑的腿)。
15
18
  * · `not_found.adoption` (404):operator 拿着一个不存在的 id 来读。
16
19
  *
17
20
  * 幂等:同参数重跑秒回**同一份** `AdoptionReceipt`(`immutableReport` 逐字节恒同 —— 它在 phase 6