@sema-agent/server 7.146.0 → 7.148.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (850) hide show
  1. package/MIGRATION.md +1423 -24
  2. package/README.md +21 -8
  3. package/README.zh-CN.md +15 -9
  4. package/USAGE.md +537 -216
  5. package/deploy/facts/lanes.json +7 -0
  6. package/deploy/sema-up/README.md +18 -7
  7. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  8. package/deploy/sema-up/chart/templates/_helpers.tpl +42 -4
  9. package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -4
  10. package/deploy/sema-up/chart/templates/server.yaml +5 -4
  11. package/deploy/sema-up/chart/values.yaml +4 -3
  12. package/deploy/sema-up/cluster-up.sh +75 -176
  13. package/deploy/sema-up/kube-up.sh +29 -49
  14. package/deploy/sema-up/lib/chart-run.sh +23 -0
  15. package/deploy/sema-up/lib/dataroot.sh +3 -3
  16. package/deploy/sema-up/lib/flagshape.sh +4 -0
  17. package/deploy/sema-up/lib/health.sh +62 -13
  18. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  19. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  20. package/deploy/sema-up/lib/lanes.json +2 -5
  21. package/deploy/sema-up/lib/regcred.py +8 -0
  22. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  23. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  24. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  25. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  26. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  27. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  28. package/deploy/sema-up/lib/render-stack.py +17 -0
  29. package/deploy/sema-up/lib/shell-text.sh +87 -0
  30. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  31. package/deploy/sema-up/lib/usage-head.txt +1 -0
  32. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  33. package/deploy/sema-up/preflight.sh +10 -8
  34. package/deploy/sema-up/sema-up.sh +26 -48
  35. package/deploy/sema-up/smoke.sh +7 -6
  36. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  37. package/deploy/sema-up/stack/compose.yaml +18 -5
  38. package/deploy/sema-up/stack/sema-stack-cluster.yaml +25 -3
  39. package/dist/adoption/plan.d.ts +24 -0
  40. package/dist/adoption/plan.js +53 -1
  41. package/dist/adoption/runner.d.ts +10 -1
  42. package/dist/adoption/runner.js +36 -16
  43. package/dist/adoption/wire.d.ts +3 -3
  44. package/dist/approval-card.d.ts +32 -34
  45. package/dist/approval-gate-currency.js +3 -2
  46. package/dist/approval-reconciler.d.ts +4 -13
  47. package/dist/approval-reconciler.js +2 -2
  48. package/dist/approval.d.ts +16 -14
  49. package/dist/approval.js +3 -3
  50. package/dist/audit.d.ts +10 -3
  51. package/dist/audit.js +17 -9
  52. package/dist/auth-bridge.d.ts +0 -14
  53. package/dist/auth-bridge.js +0 -7
  54. package/dist/auto-mode-face.d.ts +10 -7
  55. package/dist/auto-mode-face.js +7 -4
  56. package/dist/background-agent-name.d.ts +19 -1
  57. package/dist/background-agent-name.js +12 -2
  58. package/dist/background-session-reap.d.ts +1 -1
  59. package/dist/bake-runner/main.js +9 -6
  60. package/dist/bench/s1/arms.js +6 -5
  61. package/dist/bench/s1/live-deps.js +8 -3
  62. package/dist/bench/s1/run-firm.js +6 -5
  63. package/dist/bind-host.d.ts +25 -0
  64. package/dist/bind-host.js +25 -0
  65. package/dist/boot/adoption.d.ts +3 -0
  66. package/dist/boot/adoption.js +1 -0
  67. package/dist/boot/crash-last.js +2 -1
  68. package/dist/boot/deployment-mods.d.ts +1 -1
  69. package/dist/boot/device-lane.js +5 -5
  70. package/dist/boot/engine-lease.d.ts +12 -11
  71. package/dist/boot/execution-env.d.ts +19 -8
  72. package/dist/boot/execution-env.js +80 -62
  73. package/dist/boot/execution-lane.d.ts +37 -9
  74. package/dist/boot/execution-lane.js +74 -20
  75. package/dist/boot/exit-boundary.d.ts +3 -3
  76. package/dist/boot/exit-boundary.js +6 -5
  77. package/dist/boot/exit-last.js +2 -1
  78. package/dist/boot/fatal-exit.d.ts +3 -5
  79. package/dist/boot/fatal-exit.js +2 -2
  80. package/dist/boot/governance-seams.d.ts +2 -2
  81. package/dist/boot/leader.d.ts +15 -0
  82. package/dist/boot/leader.js +18 -16
  83. package/dist/boot/memory-boundary.d.ts +11 -11
  84. package/dist/boot/memory-boundary.js +3 -3
  85. package/dist/boot/memory-consolidation.d.ts +50 -53
  86. package/dist/boot/memory-consolidation.js +11 -18
  87. package/dist/boot/org-memory.js +4 -3
  88. package/dist/boot/parked-revive-gate.d.ts +1 -1
  89. package/dist/boot/parked-revive-gate.js +3 -3
  90. package/dist/boot/reapers.d.ts +4 -3
  91. package/dist/boot/reapers.js +20 -17
  92. package/dist/boot/resolve-spec.d.ts +5 -3
  93. package/dist/boot/resolve-spec.js +133 -165
  94. package/dist/boot/retention-lane.d.ts +7 -45
  95. package/dist/boot/retention-lane.js +2 -2
  96. package/dist/boot/runner-deps.d.ts +28 -7
  97. package/dist/boot/runner-deps.js +11 -4
  98. package/dist/boot/runtime-caps.d.ts +2 -2
  99. package/dist/boot/runtime-caps.js +16 -2
  100. package/dist/boot/session-faces.d.ts +17 -7
  101. package/dist/boot/session-faces.js +122 -96
  102. package/dist/boot/shutdown.d.ts +5 -4
  103. package/dist/boot/shutdown.js +6 -4
  104. package/dist/boot/stage-01-config.d.ts +1 -1
  105. package/dist/boot/stage-01-config.js +14 -2
  106. package/dist/boot/stage-02-web-admin-pull.d.ts +2 -1
  107. package/dist/boot/stage-02-web-admin-pull.js +15 -8
  108. package/dist/boot/stage-03-store-backend.d.ts +4 -1
  109. package/dist/boot/stage-03-store-backend.js +4 -3
  110. package/dist/boot/stage-04-stores.d.ts +3 -1
  111. package/dist/boot/stage-04-stores.js +2 -2
  112. package/dist/boot/stage-05-execution-env.d.ts +9 -5
  113. package/dist/boot/stage-05-execution-env.js +5 -5
  114. package/dist/boot/stage-06-runners.d.ts +13 -15
  115. package/dist/boot/stage-06-runners.js +24 -18
  116. package/dist/boot/stage-07-capability-layer.d.ts +14 -11
  117. package/dist/boot/stage-07-capability-layer.js +9 -12
  118. package/dist/boot/stage-08-reapers.d.ts +14 -11
  119. package/dist/boot/stage-08-reapers.js +3 -3
  120. package/dist/boot/stage-09-leader.d.ts +16 -18
  121. package/dist/boot/stage-09-leader.js +12 -4
  122. package/dist/boot/stage-10-http-server.d.ts +16 -18
  123. package/dist/boot/stage-10-http-server.js +9 -5
  124. package/dist/boot/store-evidence.d.ts +20 -0
  125. package/dist/boot/store-evidence.js +13 -0
  126. package/dist/boot/stores.d.ts +12 -0
  127. package/dist/boot/stores.js +39 -17
  128. package/dist/boot/task-list-lane.d.ts +4 -4
  129. package/dist/boot/web-admin.d.ts +4 -2
  130. package/dist/boot/web-admin.js +58 -38
  131. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  132. package/dist/boot-reclaim.d.ts +3 -1
  133. package/dist/boot-reclaim.js +1 -1
  134. package/dist/brain.d.ts +7 -18
  135. package/dist/brain.js +5 -17
  136. package/dist/budget.js +6 -6
  137. package/dist/capabilities/center-plugins.d.ts +9 -1
  138. package/dist/capabilities/center-plugins.js +37 -11
  139. package/dist/capabilities/center-wiring.js +1 -1
  140. package/dist/capabilities/composite-members.d.ts +3 -2
  141. package/dist/capabilities/composite-members.js +3 -2
  142. package/dist/capabilities/execution-lane.d.ts +7 -7
  143. package/dist/capabilities/execution-lane.js +2 -2
  144. package/dist/capabilities/hands-lane.d.ts +1 -1
  145. package/dist/capabilities/repo-tools.d.ts +2 -0
  146. package/dist/capabilities/repo-tools.js +14 -12
  147. package/dist/capabilities/scenarios.d.ts +38 -33
  148. package/dist/capabilities/scenarios.js +24 -25
  149. package/dist/capabilities/settings-contract.d.ts +29 -0
  150. package/dist/capabilities/settings-contract.js +14 -0
  151. package/dist/capabilities/skills.d.ts +6 -6
  152. package/dist/capabilities/tool-defer.d.ts +1 -1
  153. package/dist/capability-facts.d.ts +69 -4
  154. package/dist/capability-facts.js +77 -5
  155. package/dist/card-void.d.ts +4 -4
  156. package/dist/card-void.js +1 -1
  157. package/dist/center-credential-renewer.d.ts +6 -2
  158. package/dist/center-credential-renewer.js +10 -5
  159. package/dist/config-catalog.d.ts +16 -1
  160. package/dist/config-catalog.js +68 -61
  161. package/dist/config-dir-trust.d.ts +37 -4
  162. package/dist/config-dir-trust.js +88 -44
  163. package/dist/config-invariants.d.ts +58 -4
  164. package/dist/config-invariants.js +104 -23
  165. package/dist/config-lkg.d.ts +24 -2
  166. package/dist/config-lkg.js +22 -9
  167. package/dist/config-provider.d.ts +9 -9
  168. package/dist/config-provider.js +25 -108
  169. package/dist/config-pull-failure.d.ts +50 -0
  170. package/dist/config-pull-failure.js +48 -0
  171. package/dist/config-types.d.ts +215 -202
  172. package/dist/config.d.ts +69 -14
  173. package/dist/config.js +188 -96
  174. package/dist/degenerate-instrument.js +1 -1
  175. package/dist/delegated-session-owner.d.ts +1 -1
  176. package/dist/deleted-session-ids.d.ts +3 -2
  177. package/dist/deploy-facts.js +3 -2
  178. package/dist/deployment-governance.d.ts +3 -3
  179. package/dist/deployment-shape.d.ts +51 -16
  180. package/dist/deployment-shape.js +31 -6
  181. package/dist/egress-redirect.d.ts +25 -7
  182. package/dist/egress-redirect.js +20 -2
  183. package/dist/elicitation.d.ts +6 -5
  184. package/dist/elicitation.js +23 -22
  185. package/dist/engine-identity.d.ts +28 -0
  186. package/dist/engine-identity.js +10 -0
  187. package/dist/entry-problems.d.ts +5 -7
  188. package/dist/entry-problems.js +1 -1
  189. package/dist/env-facts.d.ts +7 -5
  190. package/dist/env-facts.js +12 -7
  191. package/dist/env-witness.d.ts +7 -0
  192. package/dist/env-witness.js +16 -0
  193. package/dist/execution-config-root.d.ts +5 -5
  194. package/dist/execution-config-root.js +5 -5
  195. package/dist/execution-env-purpose.d.ts +14 -0
  196. package/dist/execution-env-purpose.js +29 -0
  197. package/dist/execution-lane-caps.d.ts +53 -103
  198. package/dist/execution-lane-caps.js +51 -83
  199. package/dist/execution-placement.d.ts +65 -9
  200. package/dist/execution-placement.js +58 -0
  201. package/dist/field-conflict.d.ts +7 -11
  202. package/dist/field-conflict.js +3 -3
  203. package/dist/file-history-capture.d.ts +3 -3
  204. package/dist/file-history-disclosure.d.ts +2 -2
  205. package/dist/file-history-disclosure.js +1 -0
  206. package/dist/fleet/drain-entry.d.ts +17 -10
  207. package/dist/fleet/drain-entry.js +1 -1
  208. package/dist/fleet/fleet-bus.d.ts +21 -3
  209. package/dist/fleet/fleet-bus.js +35 -25
  210. package/dist/fleet/fleet-reconciler.js +2 -2
  211. package/dist/fleet/serving-lease.js +6 -7
  212. package/dist/fleet-client.js +3 -3
  213. package/dist/fleet-lease.d.ts +0 -1
  214. package/dist/fleet-lease.js +4 -5
  215. package/dist/history-anchor.d.ts +42 -0
  216. package/dist/history-anchor.js +34 -0
  217. package/dist/hitl-delivery.d.ts +90 -0
  218. package/dist/hitl-delivery.js +98 -0
  219. package/dist/hooks/classic-stations.d.ts +8 -11
  220. package/dist/hooks/classic-stations.js +0 -7
  221. package/dist/hooks/command-spawn.d.ts +1 -4
  222. package/dist/hooks/command-spawn.js +0 -11
  223. package/dist/hooks/hook-llm.d.ts +5 -1
  224. package/dist/hooks/hook-llm.js +24 -15
  225. package/dist/hooks/hook-runner.d.ts +119 -65
  226. package/dist/hooks/hook-runner.js +415 -217
  227. package/dist/host-lsp-manager.d.ts +22 -8
  228. package/dist/host-lsp-manager.js +4 -1
  229. package/dist/http/active-run-conflict.d.ts +2 -43
  230. package/dist/http/active-run-conflict.js +3 -7
  231. package/dist/http/admission.d.ts +4 -18
  232. package/dist/http/admission.js +75 -78
  233. package/dist/http/approval-sweeps.d.ts +5 -8
  234. package/dist/http/approval-sweeps.js +55 -30
  235. package/dist/http/caller-trust.d.ts +8 -10
  236. package/dist/http/caller-trust.js +1 -2
  237. package/dist/http/checkpoint-ctx.d.ts +17 -0
  238. package/dist/http/checkpoint-ctx.js +6 -0
  239. package/dist/http/claim-heartbeat.d.ts +49 -0
  240. package/dist/http/claim-heartbeat.js +46 -0
  241. package/dist/http/claim-latency.d.ts +10 -0
  242. package/dist/http/claim-latency.js +12 -0
  243. package/dist/http/claimed-run.d.ts +4 -3
  244. package/dist/http/dispatch.d.ts +8 -1
  245. package/dist/http/dispatch.js +77 -31
  246. package/dist/http/durable-run-leg.d.ts +3 -3
  247. package/dist/http/durable-run-leg.js +18 -12
  248. package/dist/http/execution-context.d.ts +18 -42
  249. package/dist/http/execution-context.js +11 -5
  250. package/dist/http/health-reader.d.ts +36 -0
  251. package/dist/http/health-reader.js +21 -0
  252. package/dist/http/health-self-report.d.ts +9 -9
  253. package/dist/http/health-self-report.js +4 -4
  254. package/dist/http/idempotency.d.ts +9 -5
  255. package/dist/http/idempotency.js +4 -4
  256. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  257. package/dist/http/memory-compliance-failure-reply.js +7 -2
  258. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  259. package/dist/http/memory-face-fault-reply.js +71 -0
  260. package/dist/http/memory-store-refusal-reply.d.ts +3 -3
  261. package/dist/http/memory-store-refusal-reply.js +6 -0
  262. package/dist/http/owner-access.d.ts +391 -56
  263. package/dist/http/owner-access.js +372 -33
  264. package/dist/http/principal-gate.d.ts +26 -94
  265. package/dist/http/principal-gate.js +24 -81
  266. package/dist/http/refusal-body.d.ts +35 -2
  267. package/dist/http/refusal-body.js +34 -0
  268. package/dist/http/request-guards.d.ts +10 -14
  269. package/dist/http/request-guards.js +34 -68
  270. package/dist/http/resume-composition.d.ts +37 -0
  271. package/dist/http/resume-composition.js +18 -0
  272. package/dist/http/resume-ctx-read.d.ts +35 -12
  273. package/dist/http/resume-ctx-read.js +25 -6
  274. package/dist/http/resume-legs.d.ts +24 -24
  275. package/dist/http/resume-legs.js +260 -171
  276. package/dist/http/retired-skill-manifest.d.ts +1 -1
  277. package/dist/http/rewind-files-reply.d.ts +34 -0
  278. package/dist/http/rewind-files-reply.js +36 -0
  279. package/dist/http/route-ctx.d.ts +56 -47
  280. package/dist/http/route-table.js +2 -0
  281. package/dist/http/routes/a2a-serve.d.ts +43 -5
  282. package/dist/http/routes/a2a-serve.js +58 -37
  283. package/dist/http/routes/admin-config-refresh.js +2 -2
  284. package/dist/http/routes/admin-drain.js +2 -2
  285. package/dist/http/routes/admin-memory-optout.js +4 -3
  286. package/dist/http/routes/adoption.d.ts +3 -0
  287. package/dist/http/routes/adoption.js +17 -10
  288. package/dist/http/routes/agents-roster.js +13 -7
  289. package/dist/http/routes/approvals-assistant.js +73 -88
  290. package/dist/http/routes/attachments.js +2 -2
  291. package/dist/http/routes/background.d.ts +3 -3
  292. package/dist/http/routes/background.js +9 -17
  293. package/dist/http/routes/capabilities.js +23 -20
  294. package/dist/http/routes/config-catalog.js +2 -2
  295. package/dist/http/routes/devices.d.ts +3 -3
  296. package/dist/http/routes/devices.js +5 -5
  297. package/dist/http/routes/diagnostics.d.ts +27 -3
  298. package/dist/http/routes/diagnostics.js +27 -21
  299. package/dist/http/routes/engine.js +2 -2
  300. package/dist/http/routes/fleet.js +5 -3
  301. package/dist/http/routes/images.js +10 -6
  302. package/dist/http/routes/leader.d.ts +7 -2
  303. package/dist/http/routes/leader.js +12 -3
  304. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  305. package/dist/http/routes/mcp-reconnect.js +7 -15
  306. package/dist/http/routes/memory-bundle.js +4 -7
  307. package/dist/http/routes/memory-compliance.js +4 -4
  308. package/dist/http/routes/memory-consolidation.js +6 -9
  309. package/dist/http/routes/memory-origin.d.ts +3 -1
  310. package/dist/http/routes/memory-origin.js +7 -8
  311. package/dist/http/routes/memory-policy.js +17 -12
  312. package/dist/http/routes/notify-wake.js +12 -20
  313. package/dist/http/routes/observability.js +3 -3
  314. package/dist/http/routes/principal-inbox.d.ts +1 -1
  315. package/dist/http/routes/principal-inbox.js +2 -2
  316. package/dist/http/routes/projects.d.ts +70 -0
  317. package/dist/http/routes/projects.js +87 -0
  318. package/dist/http/routes/retention-ops.js +6 -9
  319. package/dist/http/routes/rules.js +50 -7
  320. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  321. package/dist/http/routes/run-memory-capture.js +6 -12
  322. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  323. package/dist/http/routes/run-permission-mode.js +10 -17
  324. package/dist/http/routes/runs.js +148 -233
  325. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  326. package/dist/http/routes/session-memory-sync.js +7 -13
  327. package/dist/http/routes/session-sync.d.ts +4 -2
  328. package/dist/http/routes/session-sync.js +48 -30
  329. package/dist/http/routes/sessions-list.d.ts +3 -3
  330. package/dist/http/routes/sessions-list.js +9 -9
  331. package/dist/http/routes/sessions.d.ts +7 -1
  332. package/dist/http/routes/sessions.js +177 -112
  333. package/dist/http/routes/shared-memory.js +6 -6
  334. package/dist/http/routes/side-query.js +2 -2
  335. package/dist/http/routes/tasks.js +144 -122
  336. package/dist/http/routes/trace-usage.d.ts +0 -12
  337. package/dist/http/routes/trace-usage.js +40 -46
  338. package/dist/http/routes/workflows.d.ts +39 -4
  339. package/dist/http/routes/workflows.js +42 -14
  340. package/dist/http/run-concurrency-cap.d.ts +20 -12
  341. package/dist/http/run-concurrency-cap.js +39 -26
  342. package/dist/http/run-read-face.d.ts +3 -5
  343. package/dist/http/run-read-face.js +8 -13
  344. package/dist/http/send.d.ts +12 -3
  345. package/dist/http/send.js +42 -6
  346. package/dist/http/server.d.ts +63 -50
  347. package/dist/http/server.js +52 -16
  348. package/dist/http/sse-log.d.ts +17 -10
  349. package/dist/http/sse-log.js +7 -7
  350. package/dist/http/stored-body-replay.d.ts +17 -3
  351. package/dist/http/stored-body-replay.js +11 -2
  352. package/dist/http/submit-ctx.d.ts +16 -8
  353. package/dist/http/submit-ctx.js +6 -2
  354. package/dist/http/submit-replay.d.ts +19 -6
  355. package/dist/http/submit-replay.js +18 -6
  356. package/dist/http/sync-submit-body.d.ts +3 -4
  357. package/dist/http/sync-submit-body.js +4 -5
  358. package/dist/http/wire-types.d.ts +23 -13
  359. package/dist/identity-source.d.ts +36 -5
  360. package/dist/identity-source.js +27 -0
  361. package/dist/index.d.ts +3 -2
  362. package/dist/index.js +2 -1
  363. package/dist/instruction-source-notice.d.ts +1 -1
  364. package/dist/key-resolver.d.ts +32 -0
  365. package/dist/key-resolver.js +23 -9
  366. package/dist/leader/diffup.js +2 -1
  367. package/dist/leader/endpoint.d.ts +26 -5
  368. package/dist/leader/endpoint.js +154 -14
  369. package/dist/leader/fanout.d.ts +3 -0
  370. package/dist/leader/fanout.js +78 -63
  371. package/dist/leader/leader.d.ts +16 -0
  372. package/dist/leader/leader.js +43 -3
  373. package/dist/leader/merge.d.ts +9 -1
  374. package/dist/leader/merge.js +16 -1
  375. package/dist/leader/repair-wire.js +1 -1
  376. package/dist/leader/wire.d.ts +36 -3
  377. package/dist/leader/wire.js +59 -18
  378. package/dist/lsp-evict.d.ts +6 -4
  379. package/dist/lsp-evict.js +2 -3
  380. package/dist/memory-embedder-reembed.d.ts +38 -0
  381. package/dist/memory-embedder-reembed.js +20 -0
  382. package/dist/memory-incident-sink.d.ts +0 -28
  383. package/dist/memory-incident-sink.js +5 -0
  384. package/dist/memory-operator-faces.d.ts +5 -4
  385. package/dist/memory-operator-faces.js +1 -1
  386. package/dist/memory-scope.d.ts +31 -4
  387. package/dist/memory-scope.js +65 -16
  388. package/dist/memory-store-refusal.d.ts +20 -4
  389. package/dist/memory-store-refusal.js +1 -1
  390. package/dist/memory-sync-client.d.ts +5 -2
  391. package/dist/memory-sync-client.js +19 -14
  392. package/dist/memory-sync.js +1 -1
  393. package/dist/model-compat.d.ts +51 -28
  394. package/dist/model-compat.js +55 -23
  395. package/dist/model-context-window.d.ts +18 -0
  396. package/dist/model-context-window.js +2 -0
  397. package/dist/model-entry-headers.d.ts +46 -4
  398. package/dist/model-entry-headers.js +2 -2
  399. package/dist/model-entry-refusal.d.ts +46 -17
  400. package/dist/model-entry-refusal.js +47 -27
  401. package/dist/model-plane-face.d.ts +19 -11
  402. package/dist/model-plane-face.js +9 -1
  403. package/dist/model-plane-probe.d.ts +2 -0
  404. package/dist/model-plane-probe.js +17 -0
  405. package/dist/model-provider.d.ts +3 -3
  406. package/dist/model-route-endpoint.d.ts +9 -5
  407. package/dist/model-route-endpoint.js +29 -7
  408. package/dist/model-select.d.ts +16 -0
  409. package/dist/model-select.js +4 -0
  410. package/dist/mountinfo.d.ts +37 -0
  411. package/dist/mountinfo.js +47 -0
  412. package/dist/namespaced-rule-name.d.ts +28 -2
  413. package/dist/namespaced-rule-name.js +10 -1
  414. package/dist/net-address.d.ts +1 -1
  415. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  416. package/dist/observability/corrupt-read-seat.js +5 -3
  417. package/dist/observability/fail-open.d.ts +75 -47
  418. package/dist/observability/fail-open.js +77 -47
  419. package/dist/observability/logger.d.ts +22 -1
  420. package/dist/observability/logger.js +89 -12
  421. package/dist/observability/metrics.d.ts +2 -0
  422. package/dist/observability/metrics.js +5 -4
  423. package/dist/observability/otel-exporter.js +2 -1
  424. package/dist/observability/principal-context.d.ts +14 -7
  425. package/dist/observability/principal-context.js +8 -3
  426. package/dist/observability/run-terminal.d.ts +7 -1
  427. package/dist/observability/run-terminal.js +5 -2
  428. package/dist/observability/secret-env-scrub.d.ts +30 -4
  429. package/dist/observability/secret-env-scrub.js +15 -3
  430. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  431. package/dist/orchestration/hardened-vm-runner.js +11 -5
  432. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  433. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  434. package/dist/orchestration/hardened-vm-worker.js +2 -1
  435. package/dist/orchestration/workflow-agent-session-index.d.ts +7 -12
  436. package/dist/orchestration/workflow-agent-session-index.js +1 -6
  437. package/dist/orchestration/workflow-completion-inbox.d.ts +29 -9
  438. package/dist/orchestration/workflow-completion-inbox.js +65 -46
  439. package/dist/org-delivery-gate.d.ts +5 -4
  440. package/dist/org-delivery-gate.js +7 -6
  441. package/dist/org-memory-admission.d.ts +5 -2
  442. package/dist/org-memory-admission.js +25 -10
  443. package/dist/outbound-dispatcher.d.ts +1 -1
  444. package/dist/outbound-dispatcher.js +6 -12
  445. package/dist/owner-brands.d.ts +81 -0
  446. package/dist/owner-brands.js +42 -0
  447. package/dist/owner-faces.d.ts +531 -0
  448. package/dist/owner-faces.js +126 -0
  449. package/dist/parked-decide.d.ts +100 -31
  450. package/dist/parked-decide.js +162 -48
  451. package/dist/parked-revive-surface.d.ts +14 -4
  452. package/dist/parked-revive-surface.js +5 -4
  453. package/dist/peer-directory.d.ts +6 -8
  454. package/dist/peer-directory.js +3 -2
  455. package/dist/permission-rule-vocab.d.ts +53 -8
  456. package/dist/permission-rule-vocab.js +30 -2
  457. package/dist/plugins/adoption-log-sql.d.ts +0 -22
  458. package/dist/plugins/adoption-log-sql.js +5 -3
  459. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  460. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  461. package/dist/plugins/approval-ask-store-file.d.ts +28 -9
  462. package/dist/plugins/approval-ask-store-file.js +74 -18
  463. package/dist/plugins/approval-ask-store-memory.d.ts +17 -7
  464. package/dist/plugins/approval-ask-store-memory.js +35 -12
  465. package/dist/plugins/approval-ask-store-sql.d.ts +42 -20
  466. package/dist/plugins/approval-ask-store-sql.js +44 -11
  467. package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
  468. package/dist/plugins/approval-exemption-skill-m46.js +25 -0
  469. package/dist/plugins/approval-exemption-store.d.ts +6 -1
  470. package/dist/plugins/approval-exemption-store.js +14 -0
  471. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  472. package/dist/plugins/approval-nonce-store.js +72 -23
  473. package/dist/plugins/blob-backend.d.ts +40 -195
  474. package/dist/plugins/blob-backend.js +41 -234
  475. package/dist/plugins/caching-session-store.d.ts +22 -5
  476. package/dist/plugins/caching-session-store.js +43 -4
  477. package/dist/plugins/checkpoint-index-columns.d.ts +33 -6
  478. package/dist/plugins/checkpoint-index-columns.js +39 -3
  479. package/dist/plugins/checkpoint-store-face.d.ts +84 -11
  480. package/dist/plugins/checkpoint-store-face.js +18 -1
  481. package/dist/plugins/device-store-sql.d.ts +2 -2
  482. package/dist/plugins/device-store-sql.js +6 -10
  483. package/dist/plugins/ensure-index.d.ts +13 -1
  484. package/dist/plugins/ensure-index.js +154 -21
  485. package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
  486. package/dist/plugins/ensure-schema-lock-policy.js +3 -2
  487. package/dist/plugins/execution-lane-rename-m40.d.ts +20 -0
  488. package/dist/plugins/execution-lane-rename-m40.js +10 -0
  489. package/dist/plugins/execution-placement-sql.d.ts +63 -88
  490. package/dist/plugins/execution-placement-sql.js +94 -54
  491. package/dist/plugins/file-run-store.d.ts +89 -35
  492. package/dist/plugins/file-run-store.js +197 -142
  493. package/dist/plugins/host-platform.d.ts +24 -3
  494. package/dist/plugins/host-platform.js +15 -1
  495. package/dist/plugins/image-bake-store-sql.js +2 -0
  496. package/dist/plugins/imported-layer-root-retirement.d.ts +19 -10
  497. package/dist/plugins/imported-layer-root-retirement.js +4 -8
  498. package/dist/plugins/inbox-payload-column.d.ts +14 -0
  499. package/dist/plugins/inbox-payload-column.js +13 -0
  500. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  501. package/dist/plugins/k8s-pod-reaper.js +0 -1
  502. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  503. package/dist/plugins/leader-run-store-sql.js +34 -4
  504. package/dist/plugins/local-checkpoint-store.d.ts +63 -23
  505. package/dist/plugins/local-checkpoint-store.js +204 -81
  506. package/dist/plugins/local-data-dir-modes-m39.d.ts +48 -0
  507. package/dist/plugins/local-data-dir-modes-m39.js +183 -0
  508. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  509. package/dist/plugins/local-docker-capacity.js +194 -0
  510. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  511. package/dist/plugins/local-docker-reaper.js +102 -0
  512. package/dist/plugins/local-engine-high-water.d.ts +13 -0
  513. package/dist/plugins/local-engine-high-water.js +62 -0
  514. package/dist/plugins/local-session-store.d.ts +442 -143
  515. package/dist/plugins/local-session-store.js +941 -289
  516. package/dist/plugins/local-session-window.d.ts +3 -2
  517. package/dist/plugins/local-session-window.js +3 -2
  518. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  519. package/dist/plugins/local-task-attachment-store.d.ts +20 -1
  520. package/dist/plugins/local-task-attachment-store.js +32 -12
  521. package/dist/plugins/memory-embedder-fingerprint.d.ts +33 -10
  522. package/dist/plugins/memory-embedder-fingerprint.js +52 -12
  523. package/dist/plugins/memory-embedder.d.ts +1 -1
  524. package/dist/plugins/memory-embedder.js +11 -9
  525. package/dist/plugins/memory-engine-pg.d.ts +7 -5
  526. package/dist/plugins/memory-engine-pg.js +18 -9
  527. package/dist/plugins/memory-engine-sql-apply.d.ts +21 -8
  528. package/dist/plugins/memory-engine-sql-apply.js +7 -9
  529. package/dist/plugins/memory-engine-tidb.d.ts +12 -7
  530. package/dist/plugins/memory-engine-tidb.js +18 -10
  531. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  532. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  533. package/dist/plugins/memory-run-store.d.ts +39 -27
  534. package/dist/plugins/memory-run-store.js +72 -70
  535. package/dist/plugins/one-time-migration-marker.d.ts +10 -0
  536. package/dist/plugins/one-time-migration-marker.js +7 -0
  537. package/dist/plugins/one-time-migrations.d.ts +325 -74
  538. package/dist/plugins/one-time-migrations.js +705 -230
  539. package/dist/plugins/org-delivery-quota-store.js +2 -1
  540. package/dist/plugins/owner-only-file-mode.d.ts +29 -0
  541. package/dist/plugins/owner-only-file-mode.js +141 -0
  542. package/dist/plugins/permission-rule-store-file.d.ts +11 -11
  543. package/dist/plugins/permission-rule-store-file.js +14 -2
  544. package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
  545. package/dist/plugins/permission-rule-store-sql.js +6 -86
  546. package/dist/plugins/pg-pool.d.ts +3 -32
  547. package/dist/plugins/pg-pool.js +27 -11
  548. package/dist/plugins/release-version.d.ts +20 -0
  549. package/dist/plugins/release-version.js +28 -0
  550. package/dist/plugins/remote-env-adb.d.ts +20 -4
  551. package/dist/plugins/remote-env-adb.js +39 -11
  552. package/dist/plugins/remote-env-e2b.d.ts +19 -28
  553. package/dist/plugins/remote-env-e2b.js +40 -29
  554. package/dist/plugins/remote-env-host.d.ts +11 -10
  555. package/dist/plugins/remote-env-host.js +40 -27
  556. package/dist/plugins/remote-env-k8s.d.ts +45 -47
  557. package/dist/plugins/remote-env-k8s.js +122 -62
  558. package/dist/plugins/remote-env-local-docker.d.ts +152 -15
  559. package/dist/plugins/remote-env-local-docker.js +370 -75
  560. package/dist/plugins/remote-env-ssh.d.ts +8 -2
  561. package/dist/plugins/remote-env-ssh.js +26 -24
  562. package/dist/plugins/remote-scratchpad.js +4 -0
  563. package/dist/plugins/remote-shell.d.ts +59 -30
  564. package/dist/plugins/remote-shell.js +175 -62
  565. package/dist/plugins/retention-declaration.d.ts +37 -0
  566. package/dist/plugins/retention-declaration.js +9 -0
  567. package/dist/plugins/retention-deployment.d.ts +158 -0
  568. package/dist/plugins/retention-deployment.js +119 -0
  569. package/dist/plugins/retention-lane-store-sql.d.ts +74 -4
  570. package/dist/plugins/retention-lane-store-sql.js +103 -1
  571. package/dist/plugins/retention-sql.d.ts +29 -0
  572. package/dist/plugins/retention-sql.js +8 -0
  573. package/dist/plugins/run-preview-m45.d.ts +11 -0
  574. package/dist/plugins/run-preview-m45.js +19 -0
  575. package/dist/plugins/run-store-sql.d.ts +56 -68
  576. package/dist/plugins/run-store-sql.js +127 -116
  577. package/dist/plugins/s3-answer.d.ts +2 -1
  578. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  579. package/dist/plugins/sandbox-reaper.js +2 -0
  580. package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
  581. package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
  582. package/dist/plugins/scheduler-support.d.ts +16 -1
  583. package/dist/plugins/scheduler-support.js +22 -2
  584. package/dist/plugins/schema-consistency.d.ts +42 -15
  585. package/dist/plugins/schema-consistency.js +213 -13
  586. package/dist/plugins/schema-drift-sentence.d.ts +4 -1
  587. package/dist/plugins/schema-drift-sentence.js +4 -4
  588. package/dist/plugins/schema-ensure-legs.d.ts +10 -1
  589. package/dist/plugins/schema-ensure-legs.js +12 -2
  590. package/dist/plugins/schema-indexes.js +3 -0
  591. package/dist/plugins/schema-live-columns.d.ts +14 -5
  592. package/dist/plugins/schema-live-columns.js +10 -10
  593. package/dist/plugins/send-user-file.js +2 -1
  594. package/dist/plugins/session-birth.d.ts +37 -0
  595. package/dist/plugins/session-birth.js +38 -0
  596. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  597. package/dist/plugins/session-epoch-anchor.js +33 -11
  598. package/dist/plugins/session-ext-table.d.ts +98 -0
  599. package/dist/plugins/session-ext-table.js +134 -0
  600. package/dist/plugins/session-fork.d.ts +16 -2
  601. package/dist/plugins/session-fork.js +3 -0
  602. package/dist/plugins/session-ownership.d.ts +1 -1
  603. package/dist/plugins/session-placement.d.ts +22 -16
  604. package/dist/plugins/session-placement.js +15 -12
  605. package/dist/plugins/session-row-sql.d.ts +20 -7
  606. package/dist/plugins/session-row-sql.js +16 -8
  607. package/dist/plugins/session-run-rollup.d.ts +29 -0
  608. package/dist/plugins/session-run-rollup.js +40 -0
  609. package/dist/plugins/session-store-sql.d.ts +157 -0
  610. package/dist/plugins/session-store-sql.js +398 -0
  611. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  612. package/dist/plugins/session-withdraw-sql.js +42 -0
  613. package/dist/plugins/session-workspace-cell.d.ts +2 -2
  614. package/dist/plugins/session-workspace-cell.js +2 -2
  615. package/dist/plugins/shared-memory-store-sql.d.ts +10 -69
  616. package/dist/plugins/shared-memory-store-sql.js +15 -14
  617. package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
  618. package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
  619. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  620. package/dist/plugins/snapshot-bucket-presence.js +1 -1
  621. package/dist/plugins/sql-driver.d.ts +24 -8
  622. package/dist/plugins/sql-driver.js +43 -9
  623. package/dist/plugins/sql-errors.d.ts +35 -5
  624. package/dist/plugins/sql-errors.js +55 -3
  625. package/dist/plugins/sql-json-column.d.ts +8 -7
  626. package/dist/plugins/sql-json-column.js +10 -6
  627. package/dist/plugins/store-backend.d.ts +114 -18
  628. package/dist/plugins/store-backend.js +340 -87
  629. package/dist/plugins/store-contracts.d.ts +97 -30
  630. package/dist/plugins/store-contracts.js +23 -1
  631. package/dist/plugins/store-fault.d.ts +28 -2
  632. package/dist/plugins/store-fault.js +20 -2
  633. package/dist/plugins/task-attachment-store.d.ts +21 -11
  634. package/dist/plugins/task-attachment-store.js +37 -19
  635. package/dist/plugins/task-list-store-sql.d.ts +1 -1
  636. package/dist/plugins/text-column-capacity.d.ts +21 -0
  637. package/dist/plugins/text-column-capacity.js +5 -0
  638. package/dist/plugins/tidb-pool.d.ts +3 -2
  639. package/dist/plugins/tidb-pool.js +42 -39
  640. package/dist/plugins/user-input-ledger-sql.d.ts +1 -1
  641. package/dist/plugins/web-search.js +5 -3
  642. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  643. package/dist/plugins/workflow-run-store-sql.js +11 -5
  644. package/dist/principal-jwt.d.ts +4 -4
  645. package/dist/principal-jwt.js +20 -5
  646. package/dist/principal-shape.d.ts +41 -0
  647. package/dist/principal-shape.js +19 -0
  648. package/dist/question.d.ts +13 -23
  649. package/dist/question.js +21 -39
  650. package/dist/read-face-posture.d.ts +6 -6
  651. package/dist/read-face-posture.js +2 -2
  652. package/dist/request-declaration-refusal.d.ts +35 -12
  653. package/dist/request-declaration-refusal.js +21 -9
  654. package/dist/request-form.d.ts +58 -0
  655. package/dist/request-form.js +72 -0
  656. package/dist/request-image-urls.d.ts +8 -2
  657. package/dist/request-image-urls.js +2 -1
  658. package/dist/request-images.d.ts +20 -0
  659. package/dist/request-images.js +59 -0
  660. package/dist/request-key-closure.d.ts +6 -7
  661. package/dist/request-key-closure.js +15 -2
  662. package/dist/request-value-closure.d.ts +5 -5
  663. package/dist/request-value-closure.js +1 -1
  664. package/dist/resource-suspend.d.ts +7 -16
  665. package/dist/resource-suspend.js +1 -1
  666. package/dist/retired-name-host-notice.d.ts +21 -0
  667. package/dist/retired-name-host-notice.js +12 -0
  668. package/dist/rule-entry-list.d.ts +2 -2
  669. package/dist/rule-entry-list.js +3 -4
  670. package/dist/rule-issue-reading.d.ts +58 -0
  671. package/dist/rule-issue-reading.js +14 -0
  672. package/dist/rules-consent.d.ts +46 -16
  673. package/dist/rules-consent.js +102 -53
  674. package/dist/run-acceptance.d.ts +3 -1
  675. package/dist/run-acceptance.js +3 -0
  676. package/dist/run-local.d.ts +14 -6
  677. package/dist/run-local.js +109 -93
  678. package/dist/run-stale-default.d.ts +7 -0
  679. package/dist/run-stale-default.js +2 -0
  680. package/dist/runs.d.ts +73 -44
  681. package/dist/runs.js +65 -43
  682. package/dist/runtime-caps-resolver.d.ts +36 -14
  683. package/dist/runtime-caps-resolver.js +31 -14
  684. package/dist/runtime-governance.d.ts +2 -2
  685. package/dist/runtime-governance.js +5 -3
  686. package/dist/sealed-key-layout.d.ts +12 -6
  687. package/dist/sealed-key-layout.js +5 -1
  688. package/dist/sealed-key.d.ts +12 -2
  689. package/dist/sealed-key.js +116 -26
  690. package/dist/security.d.ts +133 -161
  691. package/dist/security.js +163 -59
  692. package/dist/sema-config-dir.d.ts +20 -0
  693. package/dist/sema-config-dir.js +27 -2
  694. package/dist/server-secret-env.d.ts +23 -5
  695. package/dist/server-secret-env.js +14 -4
  696. package/dist/service-version.d.ts +2 -1
  697. package/dist/service-version.js +2 -2
  698. package/dist/session-children-retire.d.ts +7 -5
  699. package/dist/session-children-retire.js +7 -2
  700. package/dist/session-deletion.d.ts +88 -0
  701. package/dist/session-deletion.js +8 -0
  702. package/dist/session-erase.d.ts +145 -0
  703. package/dist/session-erase.js +115 -0
  704. package/dist/session-error-wire.d.ts +6 -6
  705. package/dist/session-error-wire.js +1 -1
  706. package/dist/session-incarnation.d.ts +60 -10
  707. package/dist/session-incarnation.js +19 -2
  708. package/dist/session-policy-wire.d.ts +6 -3
  709. package/dist/session-policy-wire.js +11 -1
  710. package/dist/session-resident-background.d.ts +29 -47
  711. package/dist/session-resident-background.js +77 -8
  712. package/dist/session-row.d.ts +3 -2
  713. package/dist/session-rules-seat.d.ts +12 -0
  714. package/dist/session-rules-seat.js +19 -0
  715. package/dist/session-sync-kernel.d.ts +1 -1
  716. package/dist/session-titler.d.ts +7 -15
  717. package/dist/session-titler.js +1 -1
  718. package/dist/session-workspace.d.ts +11 -2
  719. package/dist/session-workspace.js +5 -0
  720. package/dist/sighup-idle.d.ts +1 -1
  721. package/dist/spec-fields.d.ts +57 -3
  722. package/dist/spec-fields.js +72 -51
  723. package/dist/store-posture.d.ts +138 -21
  724. package/dist/store-posture.js +188 -3
  725. package/dist/stored-request-hooks-m20.d.ts +3 -2
  726. package/dist/stored-request-hooks-m20.js +21 -16
  727. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  728. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  729. package/dist/stores-sql/blob-index-sql.d.ts +148 -0
  730. package/dist/stores-sql/blob-index-sql.js +154 -0
  731. package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
  732. package/dist/stores-sql/checkpoint-store-sql.js +86 -71
  733. package/dist/{plugins → stores-sql}/file-history-store-sql.d.ts +23 -11
  734. package/dist/{plugins → stores-sql}/file-history-store-sql.js +23 -18
  735. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  736. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  737. package/dist/{plugins → stores-sql}/pg-session-storage.d.ts +30 -81
  738. package/dist/{plugins → stores-sql}/pg-session-storage.js +123 -244
  739. package/dist/{plugins → stores-sql}/retention-store-sql.d.ts +197 -223
  740. package/dist/{plugins → stores-sql}/retention-store-sql.js +148 -207
  741. package/dist/{plugins → stores-sql}/session-event-payload.d.ts +1 -1
  742. package/dist/{plugins → stores-sql}/session-event-payload.js +1 -1
  743. package/dist/stores-sql/session-policy-store-sql.d.ts +33 -11
  744. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  745. package/dist/stores-sql/session-write-hooks.d.ts +65 -0
  746. package/dist/stores-sql/session-write-hooks.js +2 -0
  747. package/dist/{plugins → stores-sql}/tidb-session-storage.d.ts +14 -15
  748. package/dist/{plugins → stores-sql}/tidb-session-storage.js +22 -28
  749. package/dist/{plugins → stores-sql}/tidb-session-store.d.ts +67 -138
  750. package/dist/{plugins → stores-sql}/tidb-session-store.js +130 -200
  751. package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
  752. package/dist/stores-sql/tool-result-store-sql.js +1 -1
  753. package/dist/stores-sql/windowed-session-storage.d.ts +61 -0
  754. package/dist/stores-sql/windowed-session-storage.js +70 -0
  755. package/dist/submission-exit.d.ts +50 -0
  756. package/dist/submission-exit.js +108 -0
  757. package/dist/task-a2a.d.ts +7 -1
  758. package/dist/task-a2a.js +18 -17
  759. package/dist/task-cwd.d.ts +31 -3
  760. package/dist/task-cwd.js +25 -1
  761. package/dist/task-mcp.d.ts +11 -3
  762. package/dist/task-mcp.js +16 -19
  763. package/dist/task-settings.d.ts +23 -14
  764. package/dist/task-settings.js +35 -13
  765. package/dist/terminal.d.ts +25 -43
  766. package/dist/terminal.js +31 -11
  767. package/dist/tool-approval.d.ts +152 -137
  768. package/dist/tool-approval.js +199 -199
  769. package/dist/trace/core-keyset-guard.d.ts +22 -9
  770. package/dist/trace/core-vocab-wire.d.ts +95 -0
  771. package/dist/trace/core-vocab-wire.js +15 -0
  772. package/dist/trace/engine-notice-wire.d.ts +1 -1
  773. package/dist/trace/engine-notice-wire.js +2 -0
  774. package/dist/trace/exit-seat.d.ts +52 -4
  775. package/dist/trace/exit-seat.js +43 -36
  776. package/dist/trace/extension-call-face.d.ts +3 -2
  777. package/dist/trace/extension-call-face.js +3 -1
  778. package/dist/trace/ledger-events.d.ts +4 -7
  779. package/dist/trace/ledger-sink.d.ts +1 -30
  780. package/dist/trace/ledger-sink.js +0 -11
  781. package/dist/trace/model-segment.d.ts +5 -5
  782. package/dist/trace/model-segment.js +5 -5
  783. package/dist/trace/project.d.ts +88 -58
  784. package/dist/trace/project.js +64 -28
  785. package/dist/trace/redact.d.ts +124 -28
  786. package/dist/trace/redact.js +936 -328
  787. package/dist/trace/self-minted-wire.d.ts +750 -29
  788. package/dist/trace/self-minted-wire.js +262 -25
  789. package/dist/trace/sema-provenance.d.ts +45 -41
  790. package/dist/trace/sema-provenance.js +81 -10
  791. package/dist/trace/task-notification-facets.d.ts +70 -2
  792. package/dist/trace/task-notification-facets.js +71 -1
  793. package/dist/trace/wire-projection-faces.d.ts +43 -8
  794. package/dist/trace/wire-projection-faces.js +28 -3
  795. package/dist/unread-request-members.d.ts +66 -0
  796. package/dist/unread-request-members.js +41 -0
  797. package/dist/upstream-body.d.ts +23 -0
  798. package/dist/upstream-body.js +16 -0
  799. package/dist/url-refusal.d.ts +3 -3
  800. package/dist/url-refusal.js +11 -4
  801. package/dist/user-authored-text.d.ts +1 -1
  802. package/dist/user-input-ledger.d.ts +7 -8
  803. package/dist/user-input-ledger.js +1 -1
  804. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  805. package/dist/web-admin-client/apply-effective.js +33 -40
  806. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  807. package/dist/web-admin-client/apply-ledger.js +5 -2
  808. package/dist/web-admin-client/candidate-gate.d.ts +35 -3
  809. package/dist/web-admin-client/candidate-gate.js +53 -5
  810. package/dist/web-admin-client/center-request.d.ts +6 -3
  811. package/dist/web-admin-client/center-request.js +17 -16
  812. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  813. package/dist/web-admin-client/effective-keys.js +1 -2
  814. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  815. package/dist/web-admin-client/entry-metadata.js +13 -0
  816. package/dist/web-admin-client/facade.d.ts +1 -1
  817. package/dist/web-admin-client/http-client.d.ts +2 -1
  818. package/dist/web-admin-client/http-client.js +40 -13
  819. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  820. package/dist/web-admin-client/mcp-revocation.js +2 -1
  821. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  822. package/dist/web-admin-client/read-warnings.js +1 -0
  823. package/dist/web-admin-client/restart-signal.js +13 -6
  824. package/dist/web-admin-client/skills-mcp.d.ts +22 -8
  825. package/dist/web-admin-client/skills-mcp.js +26 -21
  826. package/dist/web-admin-client/types.d.ts +35 -51
  827. package/dist/workspace-space.d.ts +3 -2
  828. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  829. package/package.json +16 -12
  830. package/scripts/drain-check-local.mjs +118 -173
  831. package/scripts/drain-check.mysql.sql +20 -16
  832. package/scripts/drain-check.pg.sql +20 -16
  833. package/wire-changes/server@7.147.0.json +813 -0
  834. package/wire-changes/server@7.148.0.json +1517 -0
  835. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  836. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  837. package/dist/http/memory-layer-reply.d.ts +0 -30
  838. package/dist/http/memory-layer-reply.js +0 -24
  839. package/dist/lsp/e2b-bridge.d.ts +0 -57
  840. package/dist/lsp/e2b-bridge.js +0 -139
  841. package/dist/lsp/e2b-manager.d.ts +0 -93
  842. package/dist/lsp/e2b-manager.js +0 -178
  843. package/dist/lsp/lsp-frames.d.ts +0 -14
  844. package/dist/lsp/lsp-frames.js +0 -25
  845. package/dist/lsp/manager.d.ts +0 -129
  846. package/dist/lsp/manager.js +0 -127
  847. package/dist/lsp/types.d.ts +0 -12
  848. package/dist/lsp/types.js +0 -2
  849. package/dist/lsp/ws-transport.d.ts +0 -40
  850. package/dist/lsp/ws-transport.js +0 -210
@@ -51,8 +51,9 @@ export declare function createTidbPool(config: ServiceConfig): Pool;
51
51
  * 3. 生成的全集 SQL 基线导出到 `docs/schema/baseline-mysql.sql`(由本数组机器生成;它是**产物**,不是真源
52
52
  * —— 冲突时以本文件为准并重新生成)。
53
53
  *
54
- * 注意:`ensureSchema` 仍然保留(建表 + advisory lock + image_bake_admit 种子行),只是语句数组现在是纯
55
- * CREATE,不再有 information_schema 探针。
54
+ * 注意:`ensureSchema` 仍然保留(建表 + advisory lock + image_bake_admit 种子行),语句数组是纯 CREATE。数组之外只有一只只读探针:会话部署格旁表
55
+ * `session_ext` 的外键列要抄被引列 `session_meta.session_id` 的字符集 / 排序规则(MySQL 外键两侧必须相同,而存量库上它随建库年代不同),建它之前读一次
56
+ * `information_schema.COLUMNS`(`session-ext-table.ts` 的 `ensureSessionExtTableMysql`;探针只读、不导出任何 ALTER)。
56
57
  */
57
58
  export declare const SCHEMA_STATEMENTS: readonly string[];
58
59
  /** Named MySQL/TiDB advisory lock that serializes the whole `ensureSchema` DDL run (see below). */
@@ -1,3 +1,4 @@
1
+ import { writeLogText } from "../observability/logger.js";
1
2
  import mysql from "mysql2/promise";
2
3
  import { TIDB_APPROVAL_ASK_STATEMENTS } from "./approval-ask-store-sql.js";
3
4
  import { TIDB_MEMORY_OPTOUT_GRANT_STATEMENTS } from "./memory-optout-grant-store-sql.js";
@@ -5,17 +6,18 @@ import { TIDB_SESSION_CAPTURE_OPTOUT_STATEMENTS } from "./session-capture-record
5
6
  import { TIDB_LEADER_RUN_STATEMENTS } from "./leader-run-store-sql.js";
6
7
  import { TIDB_ADOPTION_LOG_STATEMENTS } from "./adoption-log-sql.js";
7
8
  import { TIDB_PERMISSION_RULE_STATEMENTS } from "./permission-rule-store-sql.js";
8
- import { TIDB_RETENTION_STATEMENTS } from "./retention-store-sql.js";
9
- import { SESSION_META_INCARNATION_COLUMN } from "../session-incarnation.js";
10
- import { sessionMetaPlacementColumnsDdl } from "./execution-placement-sql.js";
11
- import { SESSION_META_WORKSPACE_COLUMN } from "./session-workspace-cell.js";
9
+ import { TIDB_RETENTION_TOMBSTONE_STATEMENTS } from "../stores-sql/retention-store-sql.js";
10
+ import { TIDB_RETENTION_LANE_STATEMENTS } from "./retention-lane-store-sql.js";
11
+ import { SESSION_META_INCARNATION_COLUMN, SESSION_META_LINEAGE_COLUMNS } from "../session-incarnation.js";
12
+ import { ensureSessionExtTableMysql } from "./session-ext-table.js";
13
+ import { CHECKPOINT_HOST_SESSION_COLUMN } from "./checkpoint-index-columns.js";
12
14
  import { RUN_IDENTITY_COLUMNS } from "../identity-source.js";
13
15
  import { SESSION_RULES_COLUMN } from "./session-rules-column.js";
14
- import { SESSION_TITLE_MAX_CHARS } from "../session-row.js";
15
- import { PRINCIPAL_MAX_UTF8_BYTES } from "../security.js";
16
+ import { INBOX_PAYLOAD_COLUMN } from "./inbox-payload-column.js";
17
+ import { PRINCIPAL_MAX_BYTES } from "../principal-shape.js";
16
18
  import { ensureIndexes } from "./ensure-index.js";
17
19
  import { CENTRAL_SCHEMA_INDEXES } from "./schema-indexes.js";
18
- import { SESSION_INDEXES } from "./pg-session-storage.js";
20
+ import { SESSION_INDEXES } from "../stores-sql/pg-session-storage.js";
19
21
  import { TOOL_RESULT_INDEXES } from "../stores-sql/tool-result-store-sql.js";
20
22
  import { COST_QUOTA_INDEXES } from "./pg-cost-quota.js";
21
23
  import { RATE_LIMIT_INDEXES } from "./pg-rate-limiter.js";
@@ -25,7 +27,8 @@ import { IMAGE_BAKE_INDEXES } from "./image-bake-store-sql.js";
25
27
  import { APPROVAL_ASK_INDEXES } from "./approval-ask-store-sql.js";
26
28
  import { ADOPTION_LOG_INDEXES } from "./adoption-log-sql.js";
27
29
  import { PERMISSION_RULE_INDEXES } from "./permission-rule-store-sql.js";
28
- import { RETENTION_INDEXES } from "./retention-store-sql.js";
30
+ import { RETENTION_TOMBSTONE_INDEXES } from "../stores-sql/retention-store-sql.js";
31
+ import { RETENTION_LANE_INDEXES } from "./retention-lane-store-sql.js";
29
32
  import { LEADER_RUN_INDEXES } from "./leader-run-store-sql.js";
30
33
  import { pollUntilLocked } from "./ensure-schema-lock-policy.js";
31
34
  import { createCloseAwarePool } from "./sql-driver.js";
@@ -63,23 +66,8 @@ export const SCHEMA_STATEMENTS = [
63
66
  updated_at DATETIME(3) NOT NULL,
64
67
  leaf_id VARCHAR(64) NULL,
65
68
  leaf_seq BIGINT NOT NULL DEFAULT 0,
66
- -- title: ONE column, two writers, one law (src/session-row.ts): the user's write (PATCH /v1/sessions/:id →
67
- -- writeSessionRowCells, unconditional unless the PATCH carries expectedRowTag; null = cleared back to the automatic title) and the auto-titler (cheap-model
68
- -- one-liner on a submit that finds it NULL; setTitleIfNull, fills NULL only) — a user-set title is never overwritten,
69
- -- a cleared one is filled again. Width = SESSION_TITLE_MAX_CHARS (the wire bound).
70
- title VARCHAR(${SESSION_TITLE_MAX_CHARS}) NULL,
71
- -- pinned: the user's pin (PATCH /v1/sessions/:id → writeSessionRowCells); every list row carries it, false by default.
72
- pinned BOOLEAN NOT NULL DEFAULT FALSE,
73
- -- instruction_source(S-690):本会话**上一次 run** 选中的项目指令文件 = 换源通告(instructions.source_changed)
74
- -- 的基线。NULL = 还没有任何 run 记过(首 run 只写不发);'' = 记过、那一次没有项目指令文件;其余 = 链成员相对路径
75
- -- (CLAUDE.md / .claude/CLAUDE.md / AGENTS.md / .claude/AGENTS.md)。服务端元数据:不进模型上下文、不进 wire
76
- -- 会话面;住在会话行上 ⇒ 随会话删除 / 留存清扫一起消失,fork 出的新行为 NULL(新会话首 run 同样只写不发)。
77
- instruction_source VARCHAR(64) NULL,
78
- -- workspace:本会话上一条腿**自己的**最后一帧 workspace_changed(引擎 7.58.0 的整份快照:cwd / root / entered / project / remote)。
79
- -- NULL = 还没有任何腿记过;唯一写者 = 腿的记录座(src/session-workspace.ts),列属主 = src/plugins/session-workspace-cell.ts
80
- -- (列定义、形读者、编解码;存量库缺这一列 ⇒ 起服列册对账拒启,拒句里给出 ALTER)。下一条腿的 TaskSpec.projectId 读它的 project.id。
81
- -- 服务端元数据:不进 wire 会话面、不进模型上下文;住在会话行上 ⇒ 随会话删除 / 留存清扫一起消失,fork 出的新行为 NULL。
82
- ${SESSION_META_WORKSPACE_COLUMN.mysql},
69
+ -- 本服务记在会话上的格(标题 / 置顶 / 换源通告基线 / 位置与项目 / 执行放置那一格 / fork 键)不住这张引擎座表:旁表 session_ext
70
+ -- (下一条语句;建表 / 列 / 外键级联的唯一属主 = src/plugins/session-ext-table.ts,一会话一行,随本行删除级联)。
83
71
  -- #292 C18(core 5.48.0 design/323)subagent 转录持久化 —— placement 元组,**创建时一次落行、
84
72
  -- first-write 不可变**(register 的 ON DUPLICATE 臂永不重写这六列)。判别位 = placement_kind:
85
73
  -- 在场 ⇒ 该会话住在 placement 分区里(不上宿主枚举、claim 形 acquire 恒拒、release=真删除、
@@ -97,11 +85,9 @@ export const SCHEMA_STATEMENTS = [
97
85
  -- src/session-incarnation.ts 的 SESSION_META_INCARNATION_COLUMN(存量库缺这一列 ⇒ 起服列册对账拒启,拒句里的 ALTER 由本建表语句生成)。
98
86
  -- 不上 wire、不进模型上下文、日志只打前 8 位。
99
87
  ${SESSION_META_INCARNATION_COLUMN.mysql},
100
- -- 执行放置:根会话行上**这一位住客**的一格 —— execution_role('writer' | 'mirror' | NULL = absent)、execution_lane、device 车道的设备与绑定属主、
101
- -- 放下时刻、换绑序号;写只按住客谓词 (session_id, incarnation, owner) ∧ placement_kind IS NULL(换了住客 = 这一格不在)。fork_key = 建这一行的那次
102
- -- fork 请求的键(只由 fork 创建点写,此后每个写携带)。规则在 src/execution-placement.ts,列定义与语句的唯一属主 = src/plugins/execution-placement-sql.ts
103
- -- (存量库缺这些列 ⇒ 起服列册对账拒启;加列只由一次性迁移做)。
104
- ${sessionMetaPlacementColumnsDdl("mysql")},
88
+ -- fork 谱系(建这一行的那次 fork 的源会话 id + 源行那一刻的住客令牌;只由 fork 的建行写,core forkRowCells 铸):NULL = 不是 fork 建的行,
89
+ -- 或这两列落地之前建的 fork(源已不可知,不回填)。列定义的唯一属主 = src/session-incarnation.ts 的 SESSION_META_LINEAGE_COLUMNS。
90
+ ${SESSION_META_LINEAGE_COLUMNS.mysql},
105
91
  PRIMARY KEY (session_id),
106
92
  KEY idx_session_meta_owner (owner),
107
93
  -- listPlaced 的检索腿(kind + 租户 + 年龄升序);普通会话这三列全 NULL ⇒ 不占索引选择性。
@@ -368,9 +354,14 @@ export const SCHEMA_STATEMENTS = [
368
354
  -- 两列同生同灭(stamp 在场 ⇔ 记录在场);reopen 见到记录即拒(已结算的动作不可重开)。
369
355
  execution_outcome JSON NULL,
370
356
  execution_at_ms BIGINT NULL,
357
+ -- host_session_id:这张卡**归在哪只会话上**(兑现它的那条 run 的会话;cascade 的级上卡 = 调用方的会话,其余 = session_id)。写口 put 由
358
+ -- plugins/checkpoint-index-columns.ts 的 hostSessionOf 求值一次;存量行由一次性迁移 M49 自 session_id 回填。按会话找卡的读口(决断 / 取消 / 收割 /
359
+ -- 续跑输入回收 / 运维队列行)只读它;session_id 只答「这是哪段对话」。列定义的唯一属主 = 同模块的 CHECKPOINT_HOST_SESSION_COLUMN。
360
+ ${CHECKPOINT_HOST_SESSION_COLUMN.mysql},
371
361
  PRIMARY KEY (token),
372
362
  KEY idx_checkpoint_status_deadline (status, deadline),
373
- KEY idx_checkpoint_session_status (session_id, status)
363
+ KEY idx_checkpoint_session_status (session_id, status),
364
+ KEY idx_checkpoint_host_session_status (host_session_id, status)
374
365
  ) COLLATE utf8mb4_bin`,
375
366
  `CREATE TABLE IF NOT EXISTS checkpoint_ctx (
376
367
  session_id VARCHAR(190) NOT NULL,
@@ -401,22 +392,27 @@ export const SCHEMA_STATEMENTS = [
401
392
  expires_at_ms BIGINT NOT NULL,
402
393
  PRIMARY KEY (session_id, nonce),
403
394
  KEY idx_approval_nonce_expires (expires_at_ms)
395
+ ) COLLATE utf8mb4_bin`,
396
+ `CREATE TABLE IF NOT EXISTS approval_nonce_floor (
397
+ singleton CHAR(1) NOT NULL DEFAULT 'x',
398
+ floor_ms BIGINT NOT NULL,
399
+ PRIMARY KEY (singleton)
404
400
  ) COLLATE utf8mb4_bin`,
405
401
  `CREATE TABLE IF NOT EXISTS org_delivery_sender_quota (
406
- from_scope VARBINARY(${PRINCIPAL_MAX_UTF8_BYTES}) NOT NULL,
402
+ from_scope VARBINARY(${PRINCIPAL_MAX_BYTES}) NOT NULL,
407
403
  window_start_ms BIGINT NOT NULL,
408
404
  attempts INT NOT NULL,
409
405
  PRIMARY KEY (from_scope)
410
406
  ) COLLATE utf8mb4_bin`,
411
407
  `CREATE TABLE IF NOT EXISTS org_delivery_recipient_quota (
412
- to_scope VARBINARY(${PRINCIPAL_MAX_UTF8_BYTES}) NOT NULL,
408
+ to_scope VARBINARY(${PRINCIPAL_MAX_BYTES}) NOT NULL,
413
409
  window_start_ms BIGINT NOT NULL,
414
410
  delivered INT NOT NULL,
415
411
  PRIMARY KEY (to_scope)
416
412
  ) COLLATE utf8mb4_bin`,
417
413
  `CREATE TABLE IF NOT EXISTS org_delivery_pair_quota (
418
- to_scope VARBINARY(${PRINCIPAL_MAX_UTF8_BYTES}) NOT NULL,
419
- from_scope VARBINARY(${PRINCIPAL_MAX_UTF8_BYTES}) NOT NULL,
414
+ to_scope VARBINARY(${PRINCIPAL_MAX_BYTES}) NOT NULL,
415
+ from_scope VARBINARY(${PRINCIPAL_MAX_BYTES}) NOT NULL,
420
416
  window_start_ms BIGINT NOT NULL,
421
417
  delivered INT NOT NULL,
422
418
  PRIMARY KEY (to_scope, from_scope)
@@ -634,7 +630,8 @@ export const SCHEMA_STATEMENTS = [
634
630
  -- payload: bounded + redacted JSON extras of the entry's kind. task_notification: task_type / result / …;
635
631
  -- workflow_complete: at most {"completionId": …, "diagnostics": …} (the engine's own correlation id, verbatim; the engine's diagnostic
636
632
  -- teaching text, redacted + bounded at enqueue; each key absent when the engine minted none, NULL when neither).
637
- payload TEXT NULL,
633
+ -- Column definition owner = inbox-payload-column.ts (INBOX_PAYLOAD_COLUMN); the entry byte budget derives from the same type word.
634
+ ${INBOX_PAYLOAD_COLUMN.mysql},
638
635
  PRIMARY KEY (session_id, run_id),
639
636
  UNIQUE KEY uq_wfinbox_seq (seq),
640
637
  KEY idx_wfinbox_session_seq (session_id, seq)
@@ -816,7 +813,8 @@ export const SCHEMA_STATEMENTS = [
816
813
  ) COLLATE utf8mb4_bin`,
817
814
  ...TIDB_ADOPTION_LOG_STATEMENTS,
818
815
  ...TIDB_PERMISSION_RULE_STATEMENTS,
819
- ...TIDB_RETENTION_STATEMENTS,
816
+ ...TIDB_RETENTION_LANE_STATEMENTS,
817
+ ...TIDB_RETENTION_TOMBSTONE_STATEMENTS,
820
818
  ];
821
819
  export const ENSURE_SCHEMA_LOCK = "sema_ensure_schema";
822
820
  export async function acquireEnsureSchemaLock(conn, tag = "ensureSchema") {
@@ -830,7 +828,7 @@ export async function releaseEnsureSchemaLock(conn, tag = "ensureSchema") {
830
828
  await conn.query("SELECT RELEASE_LOCK(?)", [ENSURE_SCHEMA_LOCK]);
831
829
  }
832
830
  catch (err) {
833
- console.warn(`[${tag}] RELEASE_LOCK('${ENSURE_SCHEMA_LOCK}') failed (lock auto-frees on connection close):`, err);
831
+ writeLogText("stderr", `[${tag}] RELEASE_LOCK('${ENSURE_SCHEMA_LOCK}') failed (lock auto-frees on connection close):`, err);
834
832
  }
835
833
  }
836
834
  export const SCHEMA_INDEXES = [
@@ -845,7 +843,8 @@ export const SCHEMA_INDEXES = [
845
843
  ...APPROVAL_ASK_INDEXES,
846
844
  ...ADOPTION_LOG_INDEXES,
847
845
  ...PERMISSION_RULE_INDEXES,
848
- ...RETENTION_INDEXES,
846
+ ...RETENTION_LANE_INDEXES,
847
+ ...RETENTION_TOMBSTONE_INDEXES,
849
848
  ...LEADER_RUN_INDEXES,
850
849
  ];
851
850
  export async function ensureSchema(pool) {
@@ -857,6 +856,10 @@ export async function ensureSchema(pool) {
857
856
  for (const stmt of SCHEMA_STATEMENTS) {
858
857
  await conn.query(stmt);
859
858
  }
859
+ await ensureSessionExtTableMysql(async (sql) => {
860
+ const [rows] = await conn.query(sql);
861
+ return Array.isArray(rows) ? rows : [];
862
+ });
860
863
  await conn.query("INSERT IGNORE INTO image_bake_admit (pool) VALUES ('standard')");
861
864
  await ensureIndexes((text, params) => conn.query(text, params), "mysql", SCHEMA_INDEXES);
862
865
  }
@@ -15,7 +15,7 @@
15
15
  *
16
16
  * ## 会话树删除([ref])
17
17
  * `deleteBySession` = `DELETE … WHERE session_id = ?`(真删行;File 孪生是一行会话级墓碑,同义)。两条删会话树的级联各有一臂:在线删除协调器
18
- * 经本动词;托管留存的事务化孪生(`retention-store-sql.ts` `purgeSessionTrees` ④)在**自己的事务**里对本表发同一只谓词(`session_id` 单键,
18
+ * 经本动词;托管留存的事务化孪生(`retention-deployment.ts` `deleteDeploymentSessionRows` ④,执行器的 `beforeDelete` 钩)在**自己的事务**里对本表发同一只谓词(`session_id` 单键,
19
19
  * 多值集合按方言)—— 它不调店,理由见该文件顶注的布局裁定(一个事务 ⇒ 一条连接 ⇒ 一个属主)。谓词走 `(session_id, state, accepted_at_ms)` 索引的前缀。
20
20
  *
21
21
  * ## 读不出的行([ref] L6):逐行跳过,游标按原始行推进
@@ -2,7 +2,9 @@ import { validateHeaderValue } from "node:http";
2
2
  import { createSearxngSearchBackend } from "@sema-agent/core";
3
3
  import { findUrlCredential, findUrlUserinfo, isHierarchicalUrl } from "@sema-agent/settings-schema";
4
4
  import { redactSecrets } from "../trace/redact.js";
5
+ import { createEgressFetch } from "../egress-redirect.js";
5
6
  import { buildRequestUrlCredentialRefusal, urlCredentialFacts } from "../url-credential-refusal.js";
7
+ import { readUpstreamJson } from "../upstream-body.js";
6
8
  export const WEB_SEARCH_PROVIDERS = ["brave", "tavily", "searxng"];
7
9
  function isWebSearchProvider(word) {
8
10
  return WEB_SEARCH_PROVIDERS.includes(word);
@@ -99,7 +101,7 @@ async function braveSearch(fetchImpl, cfg, query, max, signal) {
99
101
  const res = await fetchImpl(url, { headers: { Accept: "application/json", "X-Subscription-Token": token }, signal });
100
102
  if (!res.ok)
101
103
  throw await httpFailure("brave", res);
102
- const data = (await res.json());
104
+ const data = (await readUpstreamJson(res));
103
105
  return normalize(data.web?.results, (r) => ({ title: r.title, url: r.url, snippet: r.description }), max, "brave");
104
106
  }
105
107
  async function tavilySearch(fetchImpl, cfg, query, max, signal, opts) {
@@ -117,7 +119,7 @@ async function tavilySearch(fetchImpl, cfg, query, max, signal, opts) {
117
119
  });
118
120
  if (!res.ok)
119
121
  throw await httpFailure("tavily", res);
120
- const data = (await res.json());
122
+ const data = (await readUpstreamJson(res));
121
123
  return normalize(data.results, (r) => ({ title: r.title, url: r.url, snippet: r.content }), max, "tavily");
122
124
  }
123
125
  async function searxngSearch(fetchImpl, cfg, query, max, signal, timeoutMs, opts) {
@@ -151,7 +153,7 @@ function redactedBackendFailure(e) {
151
153
  return safe === text ? e : new Error(safe);
152
154
  }
153
155
  export function createWebSearchBackend(cfg) {
154
- const fetchImpl = cfg.fetchImpl ?? fetch;
156
+ const fetchImpl = createEgressFetch("declare the final search address as WEB_SEARCH_ENDPOINT", cfg.fetchImpl);
155
157
  const maxResults = Math.max(1, Math.min(20, cfg.maxResults ?? DEFAULT_MAX_RESULTS));
156
158
  const timeoutMs = Math.max(1000, cfg.timeoutMs ?? DEFAULT_TIMEOUT_MS);
157
159
  const search = async (query, signal, opts) => {
@@ -62,7 +62,7 @@ import type { WorkflowNotifyJournalStore, WorkflowNotifyJournalEntry } from "../
62
62
  import { type WorkflowAgentSessionIndex, type WorkflowAgentSessionRow } from "../orchestration/workflow-agent-session-index.js";
63
63
  import { type WorkflowParkDecision, type WorkflowParkDecisionStore } from "../orchestration/workflow-park-decision.js";
64
64
  import type { SqlRunStore } from "./run-store-sql.js";
65
- import { type SqlDriver } from "./sql-driver.js";
65
+ import { type SqlDialect, type SqlDriver, type SqlExec } from "./sql-driver.js";
66
66
  type WorkflowRun = Parameters<WorkflowRunStore["put"]>[1];
67
67
  /** Row cap guard: a run blob beyond this is NOT stored on update (the prior revision stays) — TiDB's
68
68
  * ~6 MiB txn-entry limit would otherwise throw the (best-effort) progress write into the workflow loop.
@@ -148,6 +148,11 @@ export declare class SqlWorkflowRunStore implements WorkflowRunStore {
148
148
  keep?: number;
149
149
  }): Promise<number>;
150
150
  }
151
+ /**
152
+ * 立一只会话的**清除围栏**(session 全宽,`run_id = ''`;窗 = `PURGE_FENCE_MS`):此后同属主的 enqueue 落空(`purgedOwner` 缺席 = 属主未知 ⇒ 围全部)。
153
+ * 语句源唯一:信箱自己的 `purge` 与删净会话的执行体(`retention-deployment.ts` 的部署行,在执行体那一个事务里)同调。Upsert = 再清一次刷新窗。
154
+ */
155
+ export declare function writeInboxPurgeFenceOn(exec: SqlExec, dialect: SqlDialect, sessionId: string, purgedOwner: string | null | undefined, now: number): Promise<void>;
151
156
  /** Dual-dialect `WorkflowCompletionInbox`. See the file header for the dialect-delta ledger. */
152
157
  export declare class SqlWorkflowCompletionInbox implements WorkflowCompletionInbox {
153
158
  protected readonly db: SqlDriver;
@@ -168,6 +168,16 @@ export class SqlWorkflowRunStore {
168
168
  }
169
169
  const KIND_SERVED = "served";
170
170
  const KIND_PURGE = "purge";
171
+ export async function writeInboxPurgeFenceOn(exec, dialect, sessionId, purgedOwner, now) {
172
+ const known = purgedOwner !== undefined ? 1 : 0;
173
+ await exec.query(dialect === "mysql"
174
+ ? "INSERT INTO workflow_inbox_fence (session_id, kind, run_id, owner, owner_known, until_ms) VALUES (?,?,?,?,?,?) " +
175
+ "ON DUPLICATE KEY UPDATE owner = VALUES(owner), owner_known = VALUES(owner_known), until_ms = VALUES(until_ms)"
176
+ : "INSERT INTO workflow_inbox_fence (session_id, kind, run_id, owner, owner_known, until_ms) VALUES ($1,$2,'',$3,$4,$5) " +
177
+ "ON CONFLICT (session_id, kind, run_id) DO UPDATE SET owner = EXCLUDED.owner, owner_known = EXCLUDED.owner_known, until_ms = EXCLUDED.until_ms", dialect === "mysql"
178
+ ? [sessionId, KIND_PURGE, "", purgedOwner ?? null, known, now + PURGE_FENCE_MS]
179
+ : [sessionId, KIND_PURGE, purgedOwner ?? null, known, now + PURGE_FENCE_MS]);
180
+ }
171
181
  export class SqlWorkflowCompletionInbox {
172
182
  db;
173
183
  onWarn;
@@ -241,11 +251,7 @@ export class SqlWorkflowCompletionInbox {
241
251
  async purge(sessionId, purgedOwner) {
242
252
  const now = Date.now();
243
253
  await this.sweepFences(now);
244
- await this.db.query(this.q("INSERT INTO workflow_inbox_fence (session_id, kind, run_id, owner, owner_known, until_ms) VALUES (?,?,?,?,?,?) " +
245
- "ON DUPLICATE KEY UPDATE owner = VALUES(owner), owner_known = VALUES(owner_known), until_ms = VALUES(until_ms)", "INSERT INTO workflow_inbox_fence (session_id, kind, run_id, owner, owner_known, until_ms) VALUES ($1,$2,'',$3,$4,$5) " +
246
- "ON CONFLICT (session_id, kind, run_id) DO UPDATE SET owner = EXCLUDED.owner, owner_known = EXCLUDED.owner_known, until_ms = EXCLUDED.until_ms"), this.db.dialect === "mysql"
247
- ? [sessionId, KIND_PURGE, "", purgedOwner ?? null, purgedOwner !== undefined ? 1 : 0, now + PURGE_FENCE_MS]
248
- : [sessionId, KIND_PURGE, purgedOwner ?? null, purgedOwner !== undefined ? 1 : 0, now + PURGE_FENCE_MS]);
254
+ await writeInboxPurgeFenceOn(this.db, this.db.dialect, sessionId, purgedOwner, now);
249
255
  await this.db.query(this.q("DELETE FROM workflow_completion_inbox WHERE session_id = ?", "DELETE FROM workflow_completion_inbox WHERE session_id = $1"), [sessionId]);
250
256
  }
251
257
  async markTerminalServed(sessionId, runId) {
@@ -1,5 +1,6 @@
1
1
  import type { ApprovalHmacKey, PrincipalJwtKey } from "./auth-keys.js";
2
2
  import { type ApprovalEnvelope } from "./approval-hmac.js";
3
+ import { type Person } from "./owner-brands.js";
3
4
  /**
4
5
  * 验签允许的**时钟不一致容差**(秒)—— 本仓这条轴上的单一来源。
5
6
  *
@@ -45,8 +46,6 @@ export declare function verifyPrincipalJwt(token: string, keys: PrincipalJwtKey[
45
46
  * 形:`sha256(utf8(editedPlan))` hex —— 与 `approvalBnd` 同摘要、同编码;逐字节,不归一化(签名器与 worker
46
47
  * 必须对同一串字节达成一致,任何"归一化"都是第二个写者)。
47
48
  */
48
- /** 良构 Unicode(无孤立代理项)。`u` 旗下配对代理项是一个码点、不匹配 `\p{Surrogate}`;只有孤立的才命中。 */
49
- export declare function isWellFormedUnicode(s: string): boolean;
50
49
  export declare function editedPlanBinding(editedPlan: string): string;
51
50
  /**
52
51
  * JWT `cnf.bnd` = **「这份身份凭据被签发去决哪一张卡」**(动作身份),故只哈希前三位。
@@ -79,10 +78,11 @@ export interface SingleUseProof {
79
78
  */
80
79
  readonly acceptedBeforeMs: number;
81
80
  }
82
- /** {@link verifyDirectDoorProof} 的判决。`singleUse` 在场 = 调用方必须在改任何状态**之前**消费它一次。 */
81
+ /** {@link verifyDirectDoorProof} 的判决。`singleUse` 在场 = 调用方必须在改任何状态**之前**消费它一次。`principal` = 这一次决定的证明推出的人
82
+ * (带 `Person` 品牌:本函数是它的铸点之一 —— 决定口用它替换请求身份,`http/owner-access.ts` 的 `callerOfDecision` 按请求的场景铸决定者的主体)。 */
83
83
  export type DirectDoorProofResult = {
84
84
  ok: true;
85
- principal: string;
85
+ principal: Person;
86
86
  singleUse?: SingleUseProof;
87
87
  } | {
88
88
  ok: false;
@@ -1,5 +1,7 @@
1
1
  import { createHash, createPublicKey, verify as cryptoVerify } from "node:crypto";
2
2
  import { verifyApprovalHmac } from "./approval-hmac.js";
3
+ import { mintPerson } from "./owner-brands.js";
4
+ import { PRINCIPAL_MAX_BYTES, isWellFormedUnicode, principalShapeProblem } from "./principal-shape.js";
3
5
  export const PRINCIPAL_JWT_CLOCK_SKEW_SEC = 30;
4
6
  function b64urlToBuf(s) {
5
7
  return Buffer.from(s, "base64url");
@@ -72,9 +74,6 @@ export function verifyPrincipalJwt(token, keys, expect) {
72
74
  const bnd = typeof payload.cnf?.bnd === "string" ? payload.cnf.bnd : undefined;
73
75
  return { sub: payload.sub, bnd, acceptedBeforeMs: (Math.floor(payload.exp + skew) + 1) * 1000 };
74
76
  }
75
- export function isWellFormedUnicode(s) {
76
- return !/\p{Surrogate}/u.test(s);
77
- }
78
77
  export function editedPlanBinding(editedPlan) {
79
78
  if (!isWellFormedUnicode(editedPlan))
80
79
  throw new Error("editedPlanBinding: editedPlan is not well-formed Unicode (lone surrogate) — utf8 hashing would be lossy");
@@ -104,8 +103,24 @@ export function verifyDirectDoorProof(proof, envelope, config, opts) {
104
103
  const ok = verifyApprovalHmac(envelope, proof.mac, proof.kid, config.approvalHmacKeys);
105
104
  if (!ok)
106
105
  return { ok: false, status: 401, errorCode: "approval_mac_invalid", error: "approval envelope MAC invalid" };
106
+ const shape = principalShapeProblem(verified.sub);
107
+ switch (shape) {
108
+ case undefined:
109
+ break;
110
+ case "not_a_name":
111
+ return { ok: false, status: 400, errorCode: "principal_not_a_name", error: "principal token subject is not a principal name — the issuer must sign a visible-character identity" };
112
+ case "reserved":
113
+ return { ok: false, status: 400, errorCode: "principal_reserved", error: "principal token subject is a reserved identifier (an internal scope sentinel or a scenario subject) — the issuer must sign the person's own identifier" };
114
+ case "too_long":
115
+ return { ok: false, status: 400, errorCode: "principal_too_long", error: `principal token subject exceeds ${PRINCIPAL_MAX_BYTES} UTF-8 bytes` };
116
+ default: {
117
+ const unknownShape = shape;
118
+ throw new Error(`verifyDirectDoorProof: unknown principal shape problem ${String(unknownShape)}`);
119
+ }
120
+ }
121
+ const principal = mintPerson(verified.sub);
107
122
  return actionBinding
108
- ? { ok: true, principal: verified.sub }
109
- : { ok: true, principal: verified.sub, singleUse: { nonce: envelope.boundCallId, acceptedBeforeMs: verified.acceptedBeforeMs } };
123
+ ? { ok: true, principal }
124
+ : { ok: true, principal, singleUse: { nonce: envelope.boundCallId, acceptedBeforeMs: verified.acceptedBeforeMs } };
110
125
  }
111
126
  //# sourceMappingURL=principal-jwt.js.map
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 🔴 **主体长度的唯一定义:至多这么多个 UTF-8 字节。** 凡判「这只串当不当得了主体 / 主体身份键」的长度,一律读它、按字节数(`Buffer.byteLength(s, "utf8")`):
3
+ * 本文件的判官、收件箱的键判官(收件箱 scope 就是主体)、记忆退出名单的判、两处运维 `?scope=` 查询、规则面的运维目标、配额三表两方言的身份列宽。
4
+ * 为什么是字节:主体原样落进的最窄一类列是按字节计宽的 `VARBINARY(190)`(收件箱 / 后台子代 / 名册的键列);按字符计宽的 `VARCHAR(190)`(TiDB utf8mb4 与 PG
5
+ * 都数码点)装得下任何 190 字节的串(一个码点至少一个字节)。所以 190 字节 ≤ 「190 家族」每一只主体列,升到本尺不需要改任何既有列。
6
+ * 不同源的 190(会话 / run / 工具调用 id 列的历史宽度惯例、断路器键、跨会话信封来源位、编码后的记忆 scope 列、令牌 scope 声明)不读本常量。
7
+ */
8
+ export declare const PRINCIPAL_MAX_BYTES = 190;
9
+ /**
10
+ * 良构 Unicode(无孤立代理项)的唯一判式 —— 主体名判官的一格(下面),也是收件箱键判官与编辑计划绑定摘要的同一读法(住在叶子里,三处都能值导入、不成环)。
11
+ * `u` 旗下配对代理项是一个码点、不匹配 `\p{Surrogate}`;只有孤立的才命中。
12
+ */
13
+ export declare function isWellFormedUnicode(s: string): boolean;
14
+ /** 修1 — the SINGLE registry of internal sentinel/scope identifiers a tenant principal must never equal.
15
+ * 🔴 新增内部 sentinel scope 必须在此登记(精确值加 RESERVED_PRINCIPALS,前缀族加
16
+ * RESERVED_PRINCIPAL_PREFIXES),否则 assertPrincipalShape 会放行同名租户 = 与内部 scope 行合流的超范围面。
17
+ * Current entries (where each is minted): `"_"` = single-user/anonymous sentinel (checkpoint/sendfile/
18
+ * resource-suspend scope family); `"__none__"` = the missing-principal read placeholder of the approval
19
+ * queue faces up to 7.132.x (7.133.0 reads the anonymous group `"_"` instead; still reserved because a 7.132.x replica in the same
20
+ * rolling upgrade lists that scope for anonymous callers, so a tenant by that name would merge with them there); `"_leader"` = leader durable-approval scope
21
+ * (src/leader/wire.ts); prefix `"_leader-"` = the leader resource-suspend scope family
22
+ * (`_leader-resource-<workerId>`, src/leader/wire.ts); prefix `"_orphan:"` = the owner written on a delegated session whose
23
+ * delegation ancestors are gone (`_orphan:<sessionId>`, src/delegated-session-owner.ts) — a caller allowed to authenticate as it
24
+ * would read that transcript; prefix `"_scn:"` = a subject that carries a scenario (`_scn:<scenario>:<person>`, `owner-brands.ts` `subjectOf`) —
25
+ * a caller allowed to authenticate as it would BE another person's scenario partition. NB the `_leader-` prefix REQUIRES the hyphen — a tenant named
26
+ * `_leaderX` collides with nothing internal and stays valid (boundary pinned by test). */
27
+ export declare const RESERVED_PRINCIPALS: readonly string[];
28
+ export declare const RESERVED_PRINCIPAL_PREFIXES: readonly string[];
29
+ /** The principal-shape rule as a VERDICT (the one judge; {@link assertPrincipalShape} is its throwing reader). `undefined` = a
30
+ * principal may carry this string; otherwise which rule it breaks. A reader that only needs "can this string be anyone?" (the
31
+ * organization delivery gate's recipient: a string that breaks the rule is nobody, refused with the same bytes as an unknown
32
+ * principal) reads the verdict instead of catching the throw.
33
+ *
34
+ * Order: "is it a name at all" first — the other two rules presuppose a name (a reserved identifier / a name too wide for the
35
+ * column), and the `reserved` sentence echoes the value while the `not_a_name` sentence never does (a string that names nobody may be a
36
+ * pasted credential). An empty string is `not_a_name` here (the engine's judge says so); so is a string that is not well-formed Unicode (a lone
37
+ * surrogate is no character). A header reader that treats a blank header as "no principal" decides that before asking. `too_long` counts UTF-8 bytes
38
+ * ({@link PRINCIPAL_MAX_BYTES}). */
39
+ export type PrincipalShapeProblem = "not_a_name" | "reserved" | "too_long";
40
+ export declare function principalShapeProblem(principal: string): PrincipalShapeProblem | undefined;
41
+ //# sourceMappingURL=principal-shape.d.ts.map
@@ -0,0 +1,19 @@
1
+ import { principalNameOf } from "@sema-agent/core";
2
+ import { ORPHAN_SESSION_OWNER_PREFIX } from "./delegated-session-owner.js";
3
+ import { SCENARIO_SUBJECT_PREFIX } from "./owner-brands.js";
4
+ export const PRINCIPAL_MAX_BYTES = 190;
5
+ export function isWellFormedUnicode(s) {
6
+ return !/\p{Surrogate}/u.test(s);
7
+ }
8
+ export const RESERVED_PRINCIPALS = ["_", "__none__", "_leader"];
9
+ export const RESERVED_PRINCIPAL_PREFIXES = ["_leader-", ORPHAN_SESSION_OWNER_PREFIX, SCENARIO_SUBJECT_PREFIX];
10
+ export function principalShapeProblem(principal) {
11
+ if (principalNameOf(principal) === undefined || !isWellFormedUnicode(principal))
12
+ return "not_a_name";
13
+ if (RESERVED_PRINCIPALS.includes(principal) || RESERVED_PRINCIPAL_PREFIXES.some((p) => principal.startsWith(p)))
14
+ return "reserved";
15
+ if (Buffer.byteLength(principal, "utf8") > PRINCIPAL_MAX_BYTES)
16
+ return "too_long";
17
+ return undefined;
18
+ }
19
+ //# sourceMappingURL=principal-shape.js.map
@@ -1,4 +1,5 @@
1
1
  import { type AskQuestionRequest, type OnQuestionOutcome, type QuestionAnswer, type AskQuestion } from "@sema-agent/core";
2
+ import { type HitlTransport } from "./hitl-delivery.js";
2
3
  /** A live question frame delivered to whoever tails this run's stream. `type` IS the SSE event name (mirrors the
3
4
  * named-event convention; the payload also carries `type` so a proxy that strips event names still works). The shell
4
5
  * renders `question` as a dialog and dismisses on `question_complete`. */
@@ -23,30 +24,20 @@ export interface QuestionFrame {
23
24
  /** "question" only: `serverNowMs + expiresInMs` — absolute deadline on the server's clock. */
24
25
  expiresAtMs?: number;
25
26
  }
26
- /** The per-run context `onQuestion` recovers via ALS. `emit` delivers a frame to the run's stream; `abortSignal`
27
- * (the run's own cancel signal) releases a question parked awaiting a human when the run aborts.
27
+ /** The per-run context `onQuestion` recovers via ALS. `transport` = the leg's ONE HITL transport (shared with the elicitation
28
+ * and approval contexts of the same leg; `hitl-delivery.ts` owns the law: ledger first, then live — a frame the ledger
29
+ * cannot take never reaches the live face). `abortSignal` (the run's own cancel signal) releases a question parked
30
+ * awaiting a human when the run aborts.
28
31
  *
29
- * 🔴 ONE LAW for every leg: a question frame that enters a run's stream has a LEDGER TWIN (the row
30
- * `GET /v1/runs/:id/events` replays — a page reload recovers the open card from it); the leg decides only whether it
31
- * ALSO writes a live socket. The background leg has no socket, so its `emit` IS the durable append; the synchronous
32
- * stream leg lands the same frame in the ledger first and then writes the SSE connection (`createLedgerTwinEmit`).
33
32
  * The ledger carries the CARD, not the answer door: `POST /v1/questions/:id/respond` stays live-only (this replica's
34
- * memory, `ttlMs`), so a replayed card is answerable only until its own `expiresAtMs` and only on this replica. */
33
+ * memory, `ttlMs`), so a replayed card is answerable only until its own `expiresAtMs` and only on this replica.
34
+ * The adjudication probe ({@link QuestionCoordinator.hasLiveContext}) reads the same transport's `reachable()` — one
35
+ * reading of "can this leg's face show a card right now?". */
35
36
  export interface QuestionRunContext {
36
37
  taskId: string;
37
38
  owner: string | null;
38
- emit: (frame: QuestionFrame) => void | Promise<void>;
39
+ transport: HitlTransport<QuestionFrame>;
39
40
  abortSignal?: AbortSignal;
40
- /** OPTIONAL reachability predicate for this leg's LIVE delivery face — one reading, two consumers:
41
- * {@link QuestionCoordinator.hasLiveContext} (the park-vs-live adjudication probe) and the OPEN frame itself (a face
42
- * that cannot show the card right now refuses the ask on the spot, the same failed-delivery arm, instead of parking it
43
- * to TTL on a ledger row nobody is watching). CONSTRAINT: a leg whose face can go away WHILE the leg keeps running MUST
44
- * supply it — `/v1/tasks/stream` under `x-detach-on-disconnect: true` keeps executing inside this ALS scope after the
45
- * client left. Without the predicate the adjudication would read "live" and hand the leg to a face nobody can reach.
46
- * ABSENT ⇒ always reachable, which is exactly right for the background leg (its face IS the durable events tail,
47
- * readable whenever a client attaches). The CLOSE frame never asks it: it is a record, and it lands in the ledger twin
48
- * whether or not the socket is still there. */
49
- deliverable?: () => boolean;
50
41
  }
51
42
  /** The per-run question window the deployment owns (core caps nothing). Env: `QUESTION_MAX_CONCURRENT_PER_RUN` /
52
43
  * `QUESTION_MAX_TOTAL_PER_RUN` / `QUESTION_TTL_MS` (see `ServiceConfig.questionThrottle`). */
@@ -91,7 +82,7 @@ export declare class QuestionCoordinator {
91
82
  question: (req: AskQuestionRequest, signal?: AbortSignal) => Promise<OnQuestionOutcome>;
92
83
  /** `POST /v1/questions/:id/respond` — resolve a parked question with the shell's answer. Owner-gated with a 404 (no
93
84
  * existence oracle): a non-owner AND an unknown id (answered / expired / wrong replica) both get 404. Returns the
94
- * HTTP {status, body}; the HTTP layer owns auth (gatedPrincipal + REQUIRE_PRINCIPAL) before calling. */
85
+ * HTTP {status, body}; the HTTP layer owns auth (gatedSubject + REQUIRE_PRINCIPAL) before calling. */
95
86
  respond(id: string, principal: string | undefined, body: unknown): {
96
87
  status: number;
97
88
  body: unknown;
@@ -103,10 +94,9 @@ export declare class QuestionCoordinator {
103
94
  * resolve-spec 的 durable question policy 用它在**判决时**分腿:有活流 ⇒ allow(问活人),无 ⇒
104
95
  * ask(durable park)。ALS 让这个判断天然 per-leg,policy 组装期不必预知腿别。
105
96
  * 🔴 判据是「投递面此刻可达」而不只是「ALS 在场」(复审 A1):detach 腿断连后 run 仍在本作用域里跑,
106
- * 只判 ALS 会把一条谁也收不到的问题判成 allow——挂满 ttl 后以 unavailable 结算,非 durable 形 core
107
- * 就此合成续跑,活人再没机会答;而 park 才是它该走的腿。
108
- * 谓词缺席 ⇒ 恒可达(后台腿的 durable events tail 语义)。谓词本身抛错按不可达处理:判决面
109
- * fail-closed 到 park(park 可由运维补答,续跑掉的问题不可回收)。 */
97
+ * 只判 ALS 会把一条谁也收不到的问题判成 allow;park 才是它该走的腿。读的是本腿传输的 `reachable()`
98
+ * (有直写面 ⇒ 直写此刻活着;只有账本 ⇒ 恒真,后台腿的 durable events tail 语义;谓词读不出 ⇒ 假,判决面 fail-closed 到 park)。
99
+ * 只服务判决面:判决放行之后的开帧投递只读传输律(有账本的腿上死直写 = 卡在账本里,送到)。 */
110
100
  hasLiveContext(): boolean;
111
101
  private countersFor;
112
102
  }
package/dist/question.js CHANGED
@@ -3,17 +3,9 @@ import { uuidv7 } from "@sema-agent/core";
3
3
  import { redactDeep } from "./trace/redact.js";
4
4
  import { recordFailOpen } from "./observability/fail-open.js";
5
5
  import { refusalBody } from "./http/refusal-body.js";
6
+ import { keyAdmits, ownerCellOf, recoveredSubject } from "./owner-faces.js";
7
+ import { createHitlOpenRace } from "./hitl-delivery.js";
6
8
  const MAX_QUESTIONS_BYTES = 16384;
7
- function isFaceReachable(ctx) {
8
- if (ctx.deliverable === undefined)
9
- return true;
10
- try {
11
- return ctx.deliverable();
12
- }
13
- catch {
14
- return false;
15
- }
16
- }
17
9
  export const DEFAULT_QUESTION_THROTTLE = {
18
10
  maxConcurrentPerRun: 2,
19
11
  maxTotalPerRun: 20,
@@ -113,39 +105,29 @@ export class QuestionCoordinator {
113
105
  signal?.addEventListener("abort", onAbort, { once: true });
114
106
  ctx.abortSignal?.addEventListener("abort", onAbort, { once: true });
115
107
  this.pending.set(id, { settle, owner: ctx.owner, taskId: ctx.taskId });
116
- const emitted = (async () => {
117
- if (!isFaceReachable(ctx))
118
- throw new Error("question delivery face unreachable — the open frame has nobody to show it to");
119
- const now = Date.now();
120
- await ctx.emit({ type: "question", questionId: id, questions, serverNowMs: now, expiresInMs: this.throttle.ttlMs, expiresAtMs: now + this.throttle.ttlMs });
121
- return isFaceReachable(ctx) ? "ok" : "landed-face-gone";
122
- })()
123
- .then((r) => r, () => "failed");
124
- const delivery = await Promise.race([emitted, answerP.then(() => "stalled")]);
125
- if (delivery === "ok" || delivery === "landed-face-gone") {
108
+ const now = Date.now();
109
+ const race = createHitlOpenRace({
110
+ targets: [{ transport: ctx.transport, frame: { type: "question", questionId: id, questions, serverNowMs: now, expiresInMs: this.throttle.ttlMs, expiresAtMs: now + this.throttle.ttlMs } }],
111
+ settled: answerP,
112
+ });
113
+ const phase = await race.phase;
114
+ if (phase === "delivered") {
126
115
  rc.total += 1;
127
- if (delivery === "landed-face-gone") {
128
- recordFailOpen("server.question.open-frame-undelivered", `question=${id} face-gone-while-landing`);
129
- settle(UNAVAILABLE, "unanswered");
130
- }
131
116
  }
132
- else if (delivery === "failed") {
117
+ else if (phase === "undelivered") {
133
118
  recordFailOpen("server.question.open-frame-undelivered", `question=${id}`);
134
119
  settle(UNAVAILABLE, "unanswered");
135
120
  }
136
- const answer = await answerP;
137
- void emitted
138
- .then((result) => {
139
- if (result === "failed") {
140
- if (delivery === "stalled")
121
+ else {
122
+ void race.landing.then((late) => {
123
+ if (late === "delivered")
124
+ rc.total += 1;
125
+ else
141
126
  recordFailOpen("server.question.open-frame-undelivered", `question=${id}`);
142
- return undefined;
143
- }
144
- if (delivery === "stalled")
145
- rc.total += 1;
146
- return ctx.emit({ type: "question_complete", questionId: id, outcome: lastOutcome, serverNowMs: Date.now() });
147
- })
148
- .catch(() => recordFailOpen("server.question.complete-breadcrumb-dropped", `question=${id}`));
127
+ });
128
+ }
129
+ const answer = await answerP;
130
+ race.close({ type: "question_complete", questionId: id, outcome: lastOutcome, serverNowMs: Date.now() });
149
131
  return answer;
150
132
  };
151
133
  respond(id, principal, body) {
@@ -153,7 +135,7 @@ export class QuestionCoordinator {
153
135
  if (!parsed.ok)
154
136
  return { status: 400, body: refusalBody({ errorCode: "request.body_shape", message: parsed.error }) };
155
137
  const entry = this.pending.get(id);
156
- if (!entry || (entry.owner !== null && entry.owner !== principal)) {
138
+ if (!entry || !keyAdmits("ask.answer", { subject: recoveredSubject(principal), operator: false }, ownerCellOf(entry.owner))) {
157
139
  return { status: 404, body: refusalBody({ errorCode: "question.not_pending", message: "no pending question for this id (answered, expired, or not on this replica)" }) };
158
140
  }
159
141
  entry.settle(parsed.value, "answered");
@@ -164,7 +146,7 @@ export class QuestionCoordinator {
164
146
  }
165
147
  hasLiveContext() {
166
148
  const ctx = this.als.getStore();
167
- return ctx !== undefined && isFaceReachable(ctx);
149
+ return ctx !== undefined && ctx.transport.reachable();
168
150
  }
169
151
  countersFor(taskId) {
170
152
  let rc = this.counters.get(taskId);