@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
@@ -4,6 +4,7 @@ import { centerFetch, centerLaneConfigured } from "./web-admin-client/center-req
4
4
  import { recordFailOpen } from "./observability/fail-open.js";
5
5
  import { createIdentityBins, pinAccountingIdentity } from "./center-credential.js";
6
6
  import { WEB_ADMIN_ENV } from "@sema-agent/settings-schema";
7
+ import { readUpstreamJson } from "./upstream-body.js";
7
8
  export const FLEET_USAGE_KEY_CAP = 1024;
8
9
  export const FLEET_CLIENT_FETCH_TIMEOUT_MS = 5000;
9
10
  export class FleetUsageAccumulator {
@@ -94,7 +95,7 @@ async function rejectionSnippet(res) {
94
95
  async function capabilityReadingOf(res) {
95
96
  let body;
96
97
  try {
97
- body = await res.json();
98
+ body = await readUpstreamJson(res);
98
99
  }
99
100
  catch (err) {
100
101
  return { kind: "unreadable", why: "body", detail: err instanceof Error ? err.message : String(err) };
@@ -102,10 +103,9 @@ async function capabilityReadingOf(res) {
102
103
  return readCapabilityReading(body);
103
104
  }
104
105
  export function startFleetClient(opts) {
105
- const f = opts.fetchImpl ?? fetch;
106
106
  const heartbeatMs = opts.heartbeatMs ?? DEFAULT_HEARTBEAT_MS;
107
107
  const usageWindowMs = opts.usageWindowMs ?? 60_000;
108
- const send = (route, method, json, center = opts.center) => centerFetch(center, { kind: route }, { method, json, timeoutMs: FLEET_CLIENT_FETCH_TIMEOUT_MS, fetchImpl: f });
108
+ const send = (route, method, json, center = opts.center) => centerFetch(center, { kind: route }, { method, json, timeoutMs: FLEET_CLIENT_FETCH_TIMEOUT_MS, fetchImpl: opts.fetchImpl });
109
109
  let stopped = false;
110
110
  let failStreak = 0;
111
111
  let unreadableStreak = 0;
@@ -89,7 +89,6 @@ export declare class FleetLeaseManager {
89
89
  private readonly opts;
90
90
  /** 记账身份的那一箱(惰建;分箱规则只有 `createIdentityBins` 一只,取箱口 `accounting`)。 */
91
91
  private readonly binNow;
92
- private readonly f;
93
92
  private readonly now;
94
93
  private failStreak;
95
94
  /** [ref] ②:最近一次谈判的收尾({@link LeaseAdmitOutcome})。只在 `issueOrRenewInner` 的各收尾点写。 */
@@ -1,6 +1,7 @@
1
1
  import { QuotaLease, leaseExhausted, shouldRenewLease } from "@sema-agent/settings-schema/fleet";
2
2
  import { CenterCredentialUnavailableError, createIdentityBins, pinAccountingIdentity } from "./center-credential.js";
3
3
  import { centerFetch, centerLaneConfigured } from "./web-admin-client/center-request.js";
4
+ import { readUpstreamJson } from "./upstream-body.js";
4
5
  export const NOT_LEASE_TTL_MS = 10 * 60 * 1000;
5
6
  export const EXHAUSTED_RETRY_MS = 30 * 1000;
6
7
  export const LEASE_PRINCIPAL_CAP = 4096;
@@ -24,14 +25,12 @@ const LEASE_HEALTH_BY_OUTCOME = {
24
25
  export class FleetLeaseManager {
25
26
  opts;
26
27
  binNow;
27
- f;
28
28
  now;
29
29
  failStreak = 0;
30
30
  lastAdmit = "none";
31
31
  failMode;
32
32
  constructor(opts) {
33
33
  this.opts = opts;
34
- this.f = opts.fetchImpl ?? fetch;
35
34
  this.now = opts.now ?? Date.now;
36
35
  this.failMode = opts.failMode;
37
36
  this.binNow = createIdentityBins(opts.center.credential, (pinned) => ({
@@ -127,10 +126,10 @@ export class FleetLeaseManager {
127
126
  method: "POST",
128
127
  json: { principal, worker: this.opts.center.worker },
129
128
  timeoutMs: LEASE_FETCH_TIMEOUT_MS,
130
- fetchImpl: this.f,
129
+ fetchImpl: this.opts.fetchImpl,
131
130
  });
132
131
  if (res.status === 200) {
133
- const body = (await res.json());
132
+ const body = (await readUpstreamJson(res));
134
133
  const lease = QuotaLease.parse(body.lease);
135
134
  this.set(bin, principal, { kind: "lease", lease });
136
135
  if (this.failStreak > 0)
@@ -142,7 +141,7 @@ export class FleetLeaseManager {
142
141
  }
143
142
  if (res.status === 409) {
144
143
  this.lastAdmit = "ok";
145
- const body = (await res.json().catch(() => ({})));
144
+ const body = (await readUpstreamJson(res).catch(() => ({})));
146
145
  if (body.code === "quota_exhausted") {
147
146
  const until = this.now() + EXHAUSTED_RETRY_MS;
148
147
  const detail = {
@@ -1,4 +1,22 @@
1
+ import { readVisibleRun, type Entry, type OwnerAccessWiring } from "./http/owner-access.js";
2
+ import type { Caller } from "./owner-faces.js";
1
3
  import type { ResumeAnchorStore } from "./plugins/store-backend.js";
4
+ import type { IncomingMessage } from "node:http";
5
+ /**
6
+ * 手柄翻译读的两只店(一个值,两位读者:提交面阶段③ 与 run 外回退口同递):
7
+ * · `anchors` —— 手柄 → entry id 的唯一一张表;
8
+ * · `runs` —— 只在手柄**未知**时经属主存取器读一次 run 行(`readVisibleRun`,型取自它的 run 店形参),只为 404 选成因半句。
9
+ */
10
+ export interface HistoryAnchorReaders {
11
+ readonly anchors: Pick<ResumeAnchorStore, "resolve">;
12
+ readonly runs: Parameters<typeof readVisibleRun>[1];
13
+ }
14
+ /**
15
+ * 成因半句的读者(唯一铸法;提交面阶段③、run 外回退口与钉同铸):口 = 面表 `run.anchor` —— 属主 / 无主,不放运维、不放 fleet,登 raw(这一读只为选句、
16
+ * 不答 run 的状态 ⇒ 不过观察口,不替任何一条行落判决)。调用方由调用点按自己的身份读法铸好交来:提交面 = 提交挂接的 `claimCallerOf`(该面不放运维 / fleet,
17
+ * 两格恒缺不漏判),run 外口 = 请求调用方(运维代人回退时这半句不点名那位属主的提问 —— 只少一句说明,不说不成立的话)。
18
+ */
19
+ export declare function anchorReaderOf(req: IncomingMessage, w: OwnerAccessWiring, caller: Caller): Entry;
2
20
  /** 两族:码与句尾(出路)。键 = 族名;加一族 = 加一行(两只调用方按族名取,不手写码)。 */
3
21
  declare const HISTORY_ANCHOR_FAMILIES: {
4
22
  /** 分叉式回卷(会话在那条消息处分叉)。 */
@@ -14,9 +32,11 @@ declare const HISTORY_ANCHOR_FAMILIES: {
14
32
  };
15
33
  export type HistoryAnchorFamily = keyof typeof HISTORY_ANCHOR_FAMILIES;
16
34
  /**
17
- * 手柄 → entry id;未知 ⇒ 抛 404(族码 + 共用半句)。`owner` = 锚行的属主键(锚店的 null-safe 属主守卫):提交面传提交者,run 外口传会话属主
18
- * (门已证调用方读得到这只会话;锚由这只会话的提交落下,属主键就是会话属主 —— 运维代人回退读的是同一把键)。`field` = 句首点名的请求字段。
35
+ * 手柄 → entry id;未知 ⇒ 抛 404(族码 + 成因半句 + 族的出路)。`owner` = 锚行的属主键(锚店的 null-safe 属主守卫):提交面传提交者,run 外口传会话属主
36
+ * (门已证调用方读得到这只会话;锚由这只会话的提交落下,属主键就是会话属主 —— 运维代人回退读的是同一把键)。`reader` = 收到这句 404 的那位调用方的存取器入口
37
+ * (只给成因半句的 run 行读用,见 {@link unknownAnchorCause}),由 {@link anchorReaderOf} 铸。
38
+ * `field` = 句首点名的请求字段。
19
39
  */
20
- export declare function resolveHistoryAnchor(family: HistoryAnchorFamily, store: Pick<ResumeAnchorStore, "resolve">, sessionId: string, handle: string, owner: string | null, field: string): Promise<string>;
40
+ export declare function resolveHistoryAnchor(family: HistoryAnchorFamily, readers: HistoryAnchorReaders, reader: Entry | undefined, sessionId: string, handle: string, owner: string | null, field: string): Promise<string>;
21
41
  export {};
22
42
  //# sourceMappingURL=history-anchor.d.ts.map
@@ -1,14 +1,34 @@
1
1
  import { HttpError } from "./security.js";
2
- const NO_ANCHOR_HINT = "no rewind anchor is recorded under that handle (a prompt that carried attachments records none when its attachment frames were interrupted or their count did not match)";
2
+ import { recordFailOpen } from "./observability/fail-open.js";
3
+ import { protocolEntry, readVisibleRun } from "./http/owner-access.js";
4
+ const NO_ANCHOR = "no rewind anchor is recorded under that handle";
5
+ const PROMPT_WITHOUT_ANCHOR = `${NO_ANCHOR}: it names a prompt of this session that recorded none (a prompt that carried attachments records none when its attachment frames were interrupted or their count did not match)`;
6
+ export function anchorReaderOf(req, w, caller) {
7
+ return protocolEntry(req, w, "run.anchor", caller);
8
+ }
9
+ async function unknownAnchorCause(readers, reader, sessionId, handle) {
10
+ if (reader === undefined)
11
+ return NO_ANCHOR;
12
+ try {
13
+ const run = await readVisibleRun(reader, readers.runs, handle);
14
+ if (run === undefined || run.sessionId !== sessionId)
15
+ return NO_ANCHOR;
16
+ return (await readers.anchors.resolve(sessionId, handle, run.owner)) === undefined ? PROMPT_WITHOUT_ANCHOR : NO_ANCHOR;
17
+ }
18
+ catch (err) {
19
+ recordFailOpen("server.resume-anchor.cause-read-failed", `error=${err instanceof Error ? err.name : typeof err}`);
20
+ return NO_ANCHOR;
21
+ }
22
+ }
3
23
  const HISTORY_ANCHOR_FAMILIES = {
4
24
  resumeAt: { code: "resume_at.unknown_event", wayOut: "give an explicit resumeAt" },
5
25
  rewindFilesTo: { code: "rewind_files_to.unknown_event", wayOut: "name another prompt" },
6
26
  };
7
- export async function resolveHistoryAnchor(family, store, sessionId, handle, owner, field) {
8
- const entryId = await store.resolve(sessionId, handle, owner);
27
+ export async function resolveHistoryAnchor(family, readers, reader, sessionId, handle, owner, field) {
28
+ const entryId = await readers.anchors.resolve(sessionId, handle, owner);
9
29
  if (entryId !== undefined)
10
30
  return entryId;
11
31
  const { code, wayOut } = HISTORY_ANCHOR_FAMILIES[family];
12
- throw new HttpError(404, `${field}: no such message in this session (${code}) — ${NO_ANCHOR_HINT}; ${wayOut}`, { code });
32
+ throw new HttpError(404, `${field}: no such message in this session (${code}) — ${await unknownAnchorCause(readers, reader, sessionId, handle)}; ${wayOut}`, { code });
13
33
  }
14
34
  //# sourceMappingURL=history-anchor.js.map
@@ -0,0 +1,90 @@
1
+ /**
2
+ * 人在环帧(问题 / 表单 / 审批三族)的**投递律** —— 全仓唯一属主。
3
+ *
4
+ * 一条律:经腿的协调器上下文投出的人在环帧(开帧、收帧、撤卡帧),在有账本的腿上**先落本 run 账本、再写直写面**;账本落不下 ⇒
5
+ * 这一帧不上直写面。一只帧「送到」= 账本在这一次投递的 sink 集里 ⇒ 看账本那一笔;否则看直写那一笔。三族、三条腿共用:
6
+ * · {@link createHitlTransport} —— 一条腿**一只**传输(无状态;不记谁接下过什么);
7
+ * · {@link createHitlOpenRace} —— 一只开帧的竞速机:开帧投递(可以是多个目标)与该族的结算谁先;收帧只投给接下过开帧的 sink、
8
+ * 排在该目标的开帧之后(**配对只此一处**);
9
+ * · {@link deliverHitlNotice} —— 无配对的通知帧(批级撤卡)。
10
+ *
11
+ * 族只写自己的挂点(投前判、送到 / 没送到 / 悬着之后的记账与结算词);律与配对不在族里。
12
+ *
13
+ * 「先账本后直写」与 sync 腿引擎帧同一形(引擎帧先 `await ledgerSink.onEvent(ev)` 再直写),只是更软:人在环帧落不下只让这一次
14
+ * 投递失败,不让腿死。连接级对账帧(开流 preamble 与它的订阅消卡帧)不经腿的上下文、不进账本,不在本律射程。
15
+ */
16
+ import type { QuestionFrame } from "./question.js";
17
+ import type { ElicitationFrame } from "./elicitation.js";
18
+ import type { ApprovalCardLegFrame, ApprovalRevokeFrame } from "./approval-card.js";
19
+ import type { ToolApprovalFrame } from "./tool-approval.js";
20
+ import type { LedgerEventType } from "./trace/ledger-events.js";
21
+ /** 三族的人在环帧(开 / 收 / 撤)。九个帧型全在账本闭集里(下面那条编译期断言)。 */
22
+ export type HitlFrame = QuestionFrame | ElicitationFrame | ApprovalCardLegFrame | ApprovalRevokeFrame | ToolApprovalFrame;
23
+ /**
24
+ * 一次投递在各只 sink 上的接下与否 —— **只有这一次投递涉及的 sink 才有键**(不在场 / 不在 `onto` 里的没有键)。
25
+ * 也是 {@link HitlTransport.deliver} 的 `onto` 入参形:值为 `true` 的 sink 才写。
26
+ */
27
+ export interface HitlSinks {
28
+ readonly ledger?: boolean;
29
+ readonly live?: boolean;
30
+ }
31
+ /**
32
+ * 一条腿的传输(无状态)。`deliver` 与 `reachable` 是**属性**(不是方法签名)—— 帧型参数因此逆变。腿上装出的那一只是全族型(`HitlTransport<HitlFrame>`,
33
+ * 一腿一只、三族共用);**窄化发生在装进族上下文那一步**:审批上下文的判别联合把传输型钉到本族帧(呈卡族收不进旧族帧),竞速机的目标从族上下文取
34
+ * ⇒ 混族的 (transport, frame) 对编译不过。直接拿全族型传输喂竞速机的代码不受这道型约束(三只协调器都从族上下文取,`P14` 编译期钉)。
35
+ */
36
+ export interface HitlTransport<F extends HitlFrame> {
37
+ /**
38
+ * 投一帧:`onto` 缺省 = 在场的全部 sink。① 账本在 `onto` 里 ⇒ 先等账本;落不下 ⇒ 直写不写,返回。② 直写在 `onto` 里 ∧ 活着 ⇒ 写;
39
+ * 写抛 / 已死 ⇒ 直写没接下(不碰死连接)。③ 交回每只涉及的 sink 接下与否。**永不 reject。**
40
+ */
41
+ readonly deliver: (frame: F, onto?: HitlSinks) => Promise<HitlSinks>;
42
+ /** 判决面谓词:有直写 ⇒ 直写此刻活着;只有账本 ⇒ 恒真(账本 tail 随时可被接上)。谓词读不出 ⇒ 假(判决面 fail-closed 到停驻)。 */
43
+ readonly reachable: () => boolean;
44
+ }
45
+ /** 直写面:一个具名帧写 + 「此刻还活着吗」。 */
46
+ export interface HitlLiveSink<F extends HitlFrame> {
47
+ readonly write: (frame: F) => void;
48
+ readonly alive: () => boolean;
49
+ }
50
+ /**
51
+ * 一条腿的传输。sink 组合闭集:`{ledger}`(后台 / 续跑腿)、`{ledger, live}`(sync 流腿有 durable run 行)、`{live}`(sync 流腿无 durable run 行);
52
+ * 两只都缺 = 装配错,构造即抛。账本 sink = 该腿账本的串行追加口(seq 由它那条链铸);直写 sink = 该连接的具名帧写。
53
+ */
54
+ export declare function createHitlTransport<F extends HitlFrame = HitlFrame>(sinks: {
55
+ readonly ledger?: (type: LedgerEventType, data: unknown) => Promise<void>;
56
+ readonly live?: HitlLiveSink<F>;
57
+ }): HitlTransport<F>;
58
+ /** 开帧竞速的相:全部目标落定的聚合(任一送到 ⇒ `delivered`)先到,或该族的结算先到(`stalled`)。 */
59
+ export type HitlPhase = "delivered" | "undelivered" | "stalled";
60
+ /** 一只开帧的竞速机(一次登记一只)。 */
61
+ export interface HitlOpenRace<F extends HitlFrame> {
62
+ /** 「全部目标落定」的聚合与结算谁先。 */
63
+ readonly phase: Promise<HitlPhase>;
64
+ /** 全部目标落定后的聚合(`stalled` 之后迟到的那一判;零目标 ⇒ `undelivered`)。 */
65
+ readonly landing: Promise<"delivered" | "undelivered">;
66
+ /** 第 `target` 个目标的直写 sink 接下过开帧没有(preamble 订阅的让位判据)。 */
67
+ readonly acceptedLive: (target: number) => Promise<boolean>;
68
+ /**
69
+ * 收帧:逐目标逐 sink,只投接下过开帧的 sink、排在该目标的开帧之后;账本那只落不下 ⇒ 同目标直写不写。
70
+ * 一个目标的收帧没送到 ⇒ 记一次 `server.hitl.close-frame-dropped`。没接下过开帧的目标不收(不留孤儿收帧)。
71
+ */
72
+ readonly close: (frame: F) => void;
73
+ }
74
+ /**
75
+ * 开帧竞速机 —— 开帧投递与结算的竞速、迟到判与逐 sink 配对的唯一属主。
76
+ *
77
+ * 先登记后投(族在建它之前已把这一问登记好,快答不漏)。聚合等**全部**目标落定:任一送到 ⇒ `delivered`,全没送到 ⇒ `undelivered`
78
+ * (审批广播的「全部落定」语义;问题 / 表单单目标,任一 = 全部)。帧型与传输型同一个 `F`:传输型已窄到一族时(族上下文里取的那只),混族目标编译不过。
79
+ */
80
+ export declare function createHitlOpenRace<F extends HitlFrame>(args: {
81
+ readonly targets: ReadonlyArray<{
82
+ readonly transport: HitlTransport<F>;
83
+ readonly frame: F;
84
+ }>;
85
+ /** 该族的结算(答 / 窗 / 中止 / 清扫 —— 永不 reject)。 */
86
+ readonly settled: Promise<unknown>;
87
+ }): HitlOpenRace<F>;
88
+ /** 无配对的通知帧(批级撤卡):同一只传输、同一条律;没送到 ⇒ 记一次 `server.hitl.close-frame-dropped`。永不 reject。 */
89
+ export declare function deliverHitlNotice<F extends HitlFrame>(transport: HitlTransport<F>, frame: F): Promise<void>;
90
+ //# sourceMappingURL=hitl-delivery.d.ts.map
@@ -0,0 +1,98 @@
1
+ import { recordFailOpen } from "./observability/fail-open.js";
2
+ import { createLogger } from "./observability/logger.js";
3
+ import { errorKindOf } from "./observability/err-text.js";
4
+ const logger = createLogger();
5
+ const _hitlTypesAreLedgerTypes = true;
6
+ void _hitlTypesAreLedgerTypes;
7
+ function landed(accepted) {
8
+ return accepted.ledger !== undefined ? accepted.ledger : accepted.live === true;
9
+ }
10
+ function frameKey(frame) {
11
+ switch (frame.type) {
12
+ case "question":
13
+ case "question_complete":
14
+ return `question=${frame.questionId}`;
15
+ case "elicitation":
16
+ case "elicitation_complete":
17
+ return `elicitation=${frame.elicitationId}`;
18
+ case "approval_request":
19
+ case "approval_complete":
20
+ case "tool_approval":
21
+ case "tool_approval_complete":
22
+ return `approval=${frame.approvalId}`;
23
+ case "approval_revoke":
24
+ return `batch=${frame.batchId}`;
25
+ }
26
+ }
27
+ function liveAlive(live) {
28
+ try {
29
+ return live.alive();
30
+ }
31
+ catch (err) {
32
+ logger.warn("hitl_live_alive_unreadable", { errKind: errorKindOf(err) });
33
+ return false;
34
+ }
35
+ }
36
+ export function createHitlTransport(sinks) {
37
+ const { ledger, live } = sinks;
38
+ if (ledger === undefined && live === undefined)
39
+ throw new Error("createHitlTransport: a leg's HITL transport needs a ledger sink, a live sink, or both");
40
+ const noteFailed = (frame, sink, err) => logger.warn("hitl_sink_write_failed", { frame: frame.type, key: frameKey(frame), sink, errKind: errorKindOf(err) });
41
+ const deliver = async (frame, onto) => {
42
+ const liveSink = live !== undefined && (onto === undefined || onto.live === true) ? live : undefined;
43
+ let ledgerAccepted;
44
+ if (ledger !== undefined && (onto === undefined || onto.ledger === true)) {
45
+ const { type, ...data } = frame;
46
+ try {
47
+ await ledger(type, data);
48
+ ledgerAccepted = true;
49
+ }
50
+ catch (err) {
51
+ noteFailed(frame, "ledger", err);
52
+ return liveSink !== undefined ? { ledger: false, live: false } : { ledger: false };
53
+ }
54
+ }
55
+ if (liveSink === undefined)
56
+ return ledgerAccepted !== undefined ? { ledger: ledgerAccepted } : {};
57
+ let liveAccepted = false;
58
+ if (liveAlive(liveSink)) {
59
+ try {
60
+ liveSink.write(frame);
61
+ liveAccepted = true;
62
+ }
63
+ catch (err) {
64
+ noteFailed(frame, "live", err);
65
+ }
66
+ }
67
+ return ledgerAccepted !== undefined ? { ledger: ledgerAccepted, live: liveAccepted } : { live: liveAccepted };
68
+ };
69
+ return { deliver, reachable: () => live === undefined || liveAlive(live) };
70
+ }
71
+ export function createHitlOpenRace(args) {
72
+ const opens = args.targets.map((t) => t.transport.deliver(t.frame));
73
+ const landing = Promise.all(opens).then((all) => (all.some(landed) ? "delivered" : "undelivered"));
74
+ const phase = Promise.race([landing, args.settled.then(() => "stalled")]);
75
+ const acceptedLive = (target) => {
76
+ const open = opens[target];
77
+ if (open === undefined)
78
+ throw new RangeError(`createHitlOpenRace: no target #${target}`);
79
+ return open.then((a) => a.live === true);
80
+ };
81
+ const close = (frame) => {
82
+ args.targets.forEach((t, i) => {
83
+ void opens[i].then(async (opened) => {
84
+ const onto = { ...(opened.ledger === true ? { ledger: true } : {}), ...(opened.live === true ? { live: true } : {}) };
85
+ if (onto.ledger !== true && onto.live !== true)
86
+ return;
87
+ if (!landed(await t.transport.deliver(frame, onto)))
88
+ recordFailOpen("server.hitl.close-frame-dropped", `frame=${frame.type} ${frameKey(frame)}`);
89
+ });
90
+ });
91
+ };
92
+ return { phase, landing, acceptedLive, close };
93
+ }
94
+ export async function deliverHitlNotice(transport, frame) {
95
+ if (!landed(await transport.deliver(frame)))
96
+ recordFailOpen("server.hitl.close-frame-dropped", `frame=${frame.type} ${frameKey(frame)}`);
97
+ }
98
+ //# sourceMappingURL=hitl-delivery.js.map
@@ -4,14 +4,15 @@
4
4
  * 三件事只写在这里:
5
5
  * ① **事件名 → { `e` 型, 答案型 }**:读 core 的 `ClassicEventMap`(7.56.0 起包根导出;此前本文件手写十一行配对,随之删)。
6
6
  * 每站的角色(链 / 观察)由 {@link CLASSIC_STATION_ROLE} 说,它在编译期对着 core 的答案形核:答案形是 `ObservedAnswer` 的站必须是 `observe`、其余是 `chain`。
7
- * ② **handler 怎么挂**:链成员「无意见 ⇒ `next(e)`」(链 handler 返回 `undefined` 是站点违约,refuse 站上即 fail-closed 拒),
7
+ * ② **handler 怎么挂**:链成员「体无话 ⇒ 下方的答案原样作数」(链 handler 返回 `undefined` 是站点违约,refuse 站上即 fail-closed 拒),
8
8
  * 观察者「恒返回 `undefined`」(观察者的判词不采纳、被引擎报告)。两条都在 {@link hangClassic} / {@link observeClassic} 里成形,
9
9
  * 调用方只写「这一站我答什么」或「这一站我看什么」,不再各自记得这两条。
10
10
  * ③ **停表**:引擎交给每只 handler 的 `next.signal` 是「这只 handler 的预算 ∪ 这次派发结束 / 被取消」的合成(core 的派发器自合成,本仓不另合成第二份);
11
11
  * 成因只读引擎的读数 `next.budget.remainingMs`(用尽 = 0),不解析信号的文案。两样一起是 handler 体的第二个入参 {@link HandlerHalt} ——
12
12
  * 触发之后 handler 不再起新事、在飞的子进程要叫停(`hooks/hook-runner.ts` 的命令钩子腿);是自己的预算用尽,托管车道把撞上的条目记成未跑成。
13
- * ④ **两种链上挂法**:内层「先答,无意见再 `next(e)`」({@link hangClassic});外层「先 `next(e)`,在答回来的答案上再答」({@link wrapClassic})——
14
- * 外层 handler 等 `next` 的那段引擎停它的表(core `SelfBudget` 的暂停),所以外层的预算只算它自己的时间。
13
+ * ④ **链上只有一种挂法:折叠**({@link hangClassic})——「先 `next(e)`,在答回来的答案上再答」:本仓铸的每张注册都判下方全部改写之后的那一份,
14
+ * 下方的否决恒是最后一票(上方体答 `undefined` ⇒ 原样作数),上方的放行跳不过下方的守卫。等 `next` 的那段引擎停这只 handler 的表(core `SelfBudget` 的暂停),
15
+ * 所以每只的预算只算它自己的时间。「先答,无意见再 `next(e)`」的内层形已退役 —— 两种挂法并存时,一张注册的放行能跳过链下方另一张的守卫。
15
16
  *
16
17
  * 站的集合 = 引擎事件表里有站的 `classic.*` 名(一条钉从 `MOD_EVENT_TABLE` 派生对拍,不手抄第二份)。
17
18
  * 观察站(`StopFailure` / `PostCompact` / `PermissionDenied` / `SessionStart` / `SessionEnd`)只许观察者:答案形是「无」,core 的迁移配方要求挂 `{ observe: true }`。
@@ -48,20 +49,16 @@ export interface HandlerHalt {
48
49
  }
49
50
  /**
50
51
  * 一站的 handler 体:读 `e`,答这一站的答案;`undefined` = 无意见。`halt` 见 {@link HandlerHalt}。
51
- * `below` = 外层挂法下(见 {@link wrapClassic})链下方答回来的那份答案(接收后冻结的数据;下方都无意见时是引擎核心的空答案)—— 内层挂法与观察站恒 `undefined`。
52
- * 外层体答 `undefined` = 下方的答案原样作数;要换掉它就交一份新答案(把下方的成员并进去是体自己的事)。
52
+ * `below` = 链站上链下方答回来的那份答案(见 {@link hangClassic};接收后冻结的数据;下方都无意见时是引擎核心的空答案)—— 观察站恒 `undefined`。
53
+ * 体答 `undefined` = 下方的答案原样作数;要换掉它就交一份新答案(把下方的成员并进去是体自己的事)。
53
54
  */
54
55
  export type ClassicAnswer<K extends ClassicStation> = (e: ClassicEventMap[K]["e"], halt: HandlerHalt, below: unknown) => Promise<StationAnswer<K> | undefined>;
55
56
  /**
56
- * 内层挂法:链站 ⇒ 链成员 `(await answer(e)) ?? next(e)`;观察站 ⇒ 观察者(体照跑、恒返回 `undefined`)。
57
+ * 链上唯一的挂法(折叠,头注 ④):链站 ⇒ 先 `next(e)`(下方的链成员与引擎核心先跑完,这一只的表在等的那段停着),再拿答回来的答案作答 —— 体答 `undefined` ⇒ 下方的答案原样作数;
58
+ * 下方在拒站上失败 ⇒ 派发已 fail-closed 终局,`next` 抛,体不跑。观察站 ⇒ 观察者(体照跑、恒返回 `undefined`;观察者不进链,没有「下方」)。
57
59
  * `e` 的型由 core 的 `ClassicEventMap` 给(引擎交来的是本站的 `e`;见头注 ①)。
58
60
  */
59
61
  export declare function hangClassic<K extends ClassicStation>(on: On<EngineDollar>, station: K, answer: ClassicAnswer<K>): void;
60
- /**
61
- * 外层挂法:链站 ⇒ 先 `next(e)`(下方的链成员与引擎核心先跑完,这一只的表在等的那段停着),再拿答回来的答案作答 —— 体答 `undefined` ⇒ 下方的答案原样作数;
62
- * 下方在拒站上失败 ⇒ 派发已 fail-closed 终局,`next` 抛,体不跑。观察站 ⇒ 与 {@link hangClassic} 同(观察者不进链,没有「下方」)。
63
- */
64
- export declare function wrapClassic<K extends ClassicStation>(on: On<EngineDollar>, station: K, answer: ClassicAnswer<K>): void;
65
62
  /** 挂一只观察者(任何站都可):拿分离副本、不进链、恒返回 `undefined`;`halt` 同 {@link ClassicAnswer}。 */
66
63
  export declare function observeClassic<K extends ClassicStation>(on: On<EngineDollar>, station: K, watch: (e: ClassicEventMap[K]["e"], halt: HandlerHalt) => void | Promise<void>): void;
67
64
  export {};
@@ -35,13 +35,6 @@ export function hangClassic(on, station, answer) {
35
35
  observeClassic(on, station, async (e, halt) => void (await answer(e, halt, undefined)));
36
36
  return;
37
37
  }
38
- on(station, async (_$, e, next) => (await withHalt(next, (halt) => answer(e, halt, undefined))) ?? next(e));
39
- }
40
- export function wrapClassic(on, station, answer) {
41
- if (CLASSIC_STATION_ROLE[station] === "observe") {
42
- hangClassic(on, station, answer);
43
- return;
44
- }
45
38
  on(station, async (_$, e, next) => {
46
39
  const below = await next(e);
47
40
  return (await withHalt(next, (halt) => answer(e, halt, below))) ?? below;
@@ -46,9 +46,14 @@ export type CommandSpawnPlan = {
46
46
  export declare function composeHookEnvLayer(requestEnv: Readonly<Record<string, string>> | undefined, cwd: string, plugin: HookPluginContext | undefined): Record<string, string> & {
47
47
  CLAUDE_PROJECT_DIR: string;
48
48
  };
49
+ /**
50
+ * 这条 hook 的子进程会拿到的环境:有效环境层叠在继承那一半之上(组合属主 = `hook-runner.ts` 的 `hookChildEnv`,本模块不写第二份组合,只问它的读数)。
51
+ * 组合拒(授予形坏 / 放回点到本服务自有凭据名)⇒ 抛,起法按「起不来」答(与 spawn 时组合抛同一个结局)。
52
+ */
53
+ export type HookChildEnvOf = (layer: Readonly<Record<string, string>>) => Readonly<Record<string, string | undefined>>;
49
54
  /**
50
55
  * 一条 command 条目的起法(规则见文件头)。`cwd` = 本次 hook 的工作目录(`CLAUDE_PROJECT_DIR` 的缺省值);`requestEnv` = 请求 `settings.env`(hook 环境的一层;**必传**:没有就显式传 `undefined`,
51
- * 漏传是编译红,不会静默丢掉请求给的 env),合并与读法见 {@link composeHookEnvLayer} / {@link contextVarValue}。有副作用的只有两步,都只在条目带 `plugin` 时发生:读插件根是否是目录、建数据目录(CC 同:注入即建)。
56
+ * 漏传是编译红,不会静默丢掉请求给的 env),合并与读法见 {@link composeHookEnvLayer} / {@link contextVarValue};`childEnvOf` = 组合的读数入口({@link HookChildEnvOf})。有副作用的只有两步,都只在条目带 `plugin` 时发生:读插件根是否是目录、建数据目录(CC 同:注入即建)。
52
57
  */
53
- export declare function planCommandSpawn(entry: RunnableCommandHookEntry, cwd: string, requestEnv: Readonly<Record<string, string>> | undefined): Promise<CommandSpawnPlan>;
58
+ export declare function planCommandSpawn(entry: RunnableCommandHookEntry, cwd: string, requestEnv: Readonly<Record<string, string>> | undefined, childEnvOf: HookChildEnvOf): Promise<CommandSpawnPlan>;
54
59
  //# sourceMappingURL=command-spawn.d.ts.map
@@ -59,17 +59,24 @@ const refOf = (name) => "${" + name + "}";
59
59
  export function composeHookEnvLayer(requestEnv, cwd, plugin) {
60
60
  return { ...requestEnv, CLAUDE_PROJECT_DIR: requestEnv?.CLAUDE_PROJECT_DIR ?? cwd, ...hookPluginEnv(plugin) };
61
61
  }
62
- function contextVarValue(name, layer) {
63
- const v = layer[name];
62
+ function contextVarValue(name, env) {
63
+ const v = env[name];
64
64
  return v !== undefined && v.length > 0 ? v : undefined;
65
65
  }
66
- export async function planCommandSpawn(entry, cwd, requestEnv) {
66
+ export async function planCommandSpawn(entry, cwd, requestEnv, childEnvOf) {
67
67
  const texts = [entry.command, ...(entry.args ?? [])];
68
68
  const p = entry.plugin;
69
69
  const env = composeHookEnvLayer(requestEnv, cwd, p);
70
+ let seen;
71
+ try {
72
+ seen = childEnvOf(env);
73
+ }
74
+ catch (e) {
75
+ return { kind: "refused", error: e instanceof Error ? e.message : String(e) };
76
+ }
70
77
  const values = new Map([["CLAUDE_PROJECT_DIR", env.CLAUDE_PROJECT_DIR]]);
71
78
  for (const [name, ref] of CONTEXT_VARS) {
72
- const value = contextVarValue(name, env);
79
+ const value = contextVarValue(name, seen);
73
80
  if (value !== undefined) {
74
81
  values.set(name, value);
75
82
  continue;
@@ -79,8 +86,8 @@ export async function planCommandSpawn(entry, cwd, requestEnv) {
79
86
  return {
80
87
  kind: "refused",
81
88
  error: p !== undefined
82
- ? `hook command references ${ref} but only ${ROOT_REF} is available for this hook (it carries no plugin data directory and the request settings.env does not set ${name})`
83
- : `hook command references ${ref} but the hook is not associated with a plugin and the request settings.env does not set ${name} (the variable is only available to hooks that carry a plugin context, or to a request that sets it in settings.env)`,
89
+ ? `hook command references ${ref} but only ${ROOT_REF} is available for this hook (it carries no plugin data directory and the hook environment does not set ${name}; a request can set it in settings.env)`
90
+ : `hook command references ${ref} but the hook is not associated with a plugin and the hook environment does not set ${name} (the variable is set for hooks that carry a plugin context; a request can set it in settings.env)`,
84
91
  };
85
92
  }
86
93
  if (p !== undefined) {
@@ -1,3 +1,4 @@
1
+ import { type Model } from "@sema-agent/core";
1
2
  import type { ModelKeyRef } from "../key-resolver.js";
2
3
  import type { ServiceConfig } from "../config-types.js";
3
4
  import type { HookLlmCall, HookLlmFailureCode } from "./hook-runner.js";
@@ -24,12 +25,15 @@ import type { HookLlmCall, HookLlmFailureCode } from "./hook-runner.js";
24
25
  * ([ref] 的 (a) 路已兑现:core 7.53.0 [ref] 根导出了那只判官 `brainLaneOf(model, routes)` —— `createRoutingBrain` 对每个请求问的就是它;
25
26
  * 本仓自写的合取 `dispatchBrainLane` 随之退役,本调用点与另三处一并改问它。)
26
27
  */
27
- export type HookModelPick = {
28
+ export type HookModelPick =
29
+ /** `model` = 选中的**条目本身**(名字 / 地址之外的第三样东西:推理席位的方言读它的 `reasoning` / `compat` / `thinkingLevelMap`;`catalogRef` 只是它的名)。 */
30
+ {
28
31
  ok: true;
29
32
  catalogRef: string;
30
33
  providerModelId: string;
31
34
  baseUrl: string;
32
35
  api: "openai-completions" | "anthropic-messages";
36
+ model: Model;
33
37
  }
34
38
  /** 选不出来的那一臂自带失败码([ref]):两个载体(prompt 直连 / agent 子代理)共用这一只选模闸,同一只判词同一个码。 */
35
39
  | {
@@ -1,11 +1,12 @@
1
- import { admitRouteRequest, BrainError, joinRequestUrl, resolveRouteCredential, routeKeyOf } from "@sema-agent/core";
1
+ import { admitRouteRequest, applyReasoningToRequest, AUTO_MODE_CLASSIFIER_LOW_REASONING_BUDGET_TOKENS, BrainError, joinRequestUrl, lowestReasoningSeat, mergeReasoningHeaders, resolveRouteCredential, routeKeyOf } from "@sema-agent/core";
2
2
  import { matchCatalogModel, refusedCatalogEntry, servedModelTableLeg } from "../model-select.js";
3
3
  import { echoModelRef, modelUnavailableMessage } from "../model-entry-refusal.js";
4
4
  import { resolveOpenaiRouteEndpoint } from "../model-route-endpoint.js";
5
5
  import { anthropicLaneCredentialOf } from "../model-route-gap.js";
6
6
  import { anthropicRouteRoot, brainLaneFor, routeTableOf } from "../model-provider.js";
7
- import { egressRedirectRefusal } from "../egress-redirect.js";
7
+ import { EgressRedirectRefusedError, createEgressFetch } from "../egress-redirect.js";
8
8
  import { buildDisplaySafeRefusal, redactSecrets } from "../trace/redact.js";
9
+ import { readUpstreamJson } from "../upstream-body.js";
9
10
  const unresolvedPick = (error) => ({ ok: false, error, code: "model_unresolved" });
10
11
  export function buildHookFailureText(raw) {
11
12
  if (raw === "")
@@ -52,10 +53,10 @@ export function createHookLlm(deps) {
52
53
  const lane = brainLaneFor(m.provider, routeTableOf(config));
53
54
  switch (lane) {
54
55
  case "anthropic":
55
- return { ok: true, catalogRef, providerModelId, baseUrl: m.baseUrl || anthropicRouteBaseUrl(), api: "anthropic-messages" };
56
+ return { ok: true, catalogRef, providerModelId, baseUrl: m.baseUrl || anthropicRouteBaseUrl(), api: "anthropic-messages", model: m };
56
57
  case "gateway": {
57
58
  const endpoint = resolveOpenaiRouteEndpoint(catalogRef, m, config.gatewayBaseUrl, servedModelTableLeg(config));
58
- return endpoint.ok ? { ok: true, catalogRef, providerModelId, baseUrl: endpoint.baseUrl, api: "openai-completions" } : unresolvedPick(endpoint.refusal);
59
+ return endpoint.ok ? { ok: true, catalogRef, providerModelId, baseUrl: endpoint.baseUrl, api: "openai-completions", model: m } : unresolvedPick(endpoint.refusal);
59
60
  }
60
61
  }
61
62
  };
@@ -108,8 +109,8 @@ export function createHookLlm(deps) {
108
109
  }
109
110
  return { ok: true, credential, admission };
110
111
  };
111
- const fetchImpl = deps.fetchImpl ?? fetch;
112
- const callLlm = async ({ prompt, model, timeoutMs, system, maxOutputTokens }) => {
112
+ const fetchImpl = createEgressFetch("declare the final endpoint as this route's base URL", deps.fetchImpl);
113
+ const callLlm = async ({ prompt, model, timeoutMs, system, maxOutputTokens, reasoningSeat }) => {
113
114
  const pick = hookModelFor(model);
114
115
  if (!pick.ok)
115
116
  return pick;
@@ -127,9 +128,12 @@ export function createHookLlm(deps) {
127
128
  return { ok: false, error: `per-model key resolution for "${pick.catalogRef}" failed — refusing to fall back to the shared route credential (${String(e)})`, code: "credential_custody_failed" };
128
129
  }
129
130
  }
131
+ const wireModel = { ...pick.model, api: pick.api };
132
+ const seat = reasoningSeat === "lowest" ? lowestReasoningSeat(wireModel) : undefined;
133
+ const thinkingRoom = seat === "low" ? AUTO_MODE_CLASSIFIER_LOW_REASONING_BUDGET_TOKENS : 0;
130
134
  let url;
131
135
  let headers;
132
- let body;
136
+ let request;
133
137
  let admitted;
134
138
  let declaredRoot;
135
139
  if (pick.api === "anthropic-messages") {
@@ -146,9 +150,9 @@ export function createHookLlm(deps) {
146
150
  "anthropic-version": config.anthropic?.version ?? "2023-06-01",
147
151
  ...(routed.credential.source === "per-model" ? { "x-api-key": routed.credential.apiKey ?? "" } : routeCredentialHeader(routeCredential)),
148
152
  };
149
- const want = maxOutputTokens ?? 1024;
153
+ const want = (maxOutputTokens ?? 1024) + thinkingRoom;
150
154
  const maxTokens = Math.min(config.models[pick.catalogRef]?.maxTokens ?? want, want);
151
- body = JSON.stringify({ model: pick.providerModelId, max_tokens: maxTokens, ...(system ? { system } : {}), messages: [{ role: "user", content: prompt }] });
155
+ request = { model: pick.providerModelId, max_tokens: maxTokens, ...(system ? { system } : {}), messages: [{ role: "user", content: prompt }] };
152
156
  }
153
157
  else {
154
158
  declaredRoot = config.gatewayBaseUrl;
@@ -159,8 +163,14 @@ export function createHookLlm(deps) {
159
163
  const hookKey = routed.credential.apiKey;
160
164
  url = joinRequestUrl(pick.baseUrl, "/chat/completions");
161
165
  headers = { "content-type": "application/json", ...(hookKey ? { authorization: `Bearer ${hookKey}` } : {}) };
162
- body = JSON.stringify({ model: pick.providerModelId, ...(maxOutputTokens !== undefined ? { max_tokens: maxOutputTokens } : {}), messages: [...(system ? [{ role: "system", content: system }] : []), { role: "user", content: prompt }], stream: false });
166
+ request = { model: pick.providerModelId, ...(maxOutputTokens !== undefined ? { max_tokens: maxOutputTokens + thinkingRoom } : {}), messages: [...(system ? [{ role: "system", content: system }] : []), { role: "user", content: prompt }], stream: false };
163
167
  }
168
+ if (seat !== undefined) {
169
+ const applied = applyReasoningToRequest({ api: pick.api, model: wireModel, level: seat, body: request });
170
+ request = applied.body;
171
+ mergeReasoningHeaders(headers, applied.headers);
172
+ }
173
+ const body = JSON.stringify(request);
164
174
  try {
165
175
  admitted();
166
176
  }
@@ -168,15 +178,12 @@ export function createHookLlm(deps) {
168
178
  return gateRefusal(pick, e, declaredRoot);
169
179
  }
170
180
  phase = "transport";
171
- const r = await fetchImpl(url, { method: "POST", headers, body, signal: ac.signal, redirect: "manual" });
172
- const redirected = egressRedirectRefusal(r, "declare the final endpoint as this route's base URL");
173
- if (redirected !== undefined)
174
- return { ok: false, error: `hook llm ${redirected}`, code: "redirect_refused" };
181
+ const r = await fetchImpl(url, { method: "POST", headers, body, signal: ac.signal });
175
182
  if (!r.ok)
176
183
  return { ok: false, error: `hook llm HTTP ${r.status}`, code: "bad_response" };
177
184
  let answered;
178
185
  try {
179
- answered = await r.json();
186
+ answered = await readUpstreamJson(r);
180
187
  }
181
188
  catch (e) {
182
189
  if (ac.signal.aborted || e?.name !== "SyntaxError")
@@ -197,6 +204,8 @@ export function createHookLlm(deps) {
197
204
  return typeof text === "string" ? { ok: true, text } : { ok: false, error: "hook llm returned no content", code: "no_content" };
198
205
  }
199
206
  catch (e) {
207
+ if (e instanceof EgressRedirectRefusedError)
208
+ return { ok: false, error: `hook llm ${e.message}`, code: "redirect_refused" };
200
209
  const cause = e?.cause;
201
210
  return {
202
211
  ok: false,