@sema-agent/server 7.147.0 → 7.148.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (725) hide show
  1. package/MIGRATION.md +1039 -24
  2. package/README.md +20 -7
  3. package/README.zh-CN.md +14 -8
  4. package/USAGE.md +380 -163
  5. package/deploy/sema-up/README.md +16 -5
  6. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  7. package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
  8. package/deploy/sema-up/chart/values.yaml +3 -2
  9. package/deploy/sema-up/cluster-up.sh +74 -176
  10. package/deploy/sema-up/kube-up.sh +29 -49
  11. package/deploy/sema-up/lib/chart-run.sh +23 -0
  12. package/deploy/sema-up/lib/dataroot.sh +3 -3
  13. package/deploy/sema-up/lib/health.sh +62 -13
  14. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  15. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  16. package/deploy/sema-up/lib/regcred.py +8 -0
  17. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  18. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  19. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  20. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  21. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  22. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  23. package/deploy/sema-up/lib/render-stack.py +17 -0
  24. package/deploy/sema-up/lib/shell-text.sh +87 -0
  25. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  26. package/deploy/sema-up/lib/usage-head.txt +1 -0
  27. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  28. package/deploy/sema-up/preflight.sh +10 -8
  29. package/deploy/sema-up/sema-up.sh +14 -39
  30. package/deploy/sema-up/smoke.sh +7 -6
  31. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  32. package/deploy/sema-up/stack/compose.yaml +13 -1
  33. package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
  34. package/dist/adoption/plan.d.ts +24 -0
  35. package/dist/adoption/plan.js +53 -1
  36. package/dist/adoption/runner.d.ts +10 -1
  37. package/dist/adoption/runner.js +36 -16
  38. package/dist/adoption/wire.d.ts +3 -3
  39. package/dist/approval-card.d.ts +28 -30
  40. package/dist/approval-gate-currency.js +3 -2
  41. package/dist/approval-reconciler.d.ts +4 -13
  42. package/dist/approval-reconciler.js +2 -2
  43. package/dist/approval.d.ts +13 -11
  44. package/dist/approval.js +3 -3
  45. package/dist/audit.d.ts +10 -3
  46. package/dist/audit.js +15 -7
  47. package/dist/auth-bridge.d.ts +0 -14
  48. package/dist/auth-bridge.js +0 -7
  49. package/dist/auto-mode-face.d.ts +10 -7
  50. package/dist/auto-mode-face.js +7 -4
  51. package/dist/background-agent-name.d.ts +19 -1
  52. package/dist/background-agent-name.js +12 -2
  53. package/dist/background-session-reap.d.ts +1 -1
  54. package/dist/bake-runner/main.js +9 -6
  55. package/dist/bench/s1/arms.js +6 -5
  56. package/dist/bench/s1/live-deps.js +5 -2
  57. package/dist/bench/s1/run-firm.js +6 -5
  58. package/dist/bind-host.d.ts +25 -0
  59. package/dist/bind-host.js +25 -0
  60. package/dist/boot/adoption.d.ts +3 -0
  61. package/dist/boot/adoption.js +1 -0
  62. package/dist/boot/deployment-mods.d.ts +1 -1
  63. package/dist/boot/execution-env.d.ts +17 -7
  64. package/dist/boot/execution-env.js +37 -31
  65. package/dist/boot/exit-boundary.d.ts +2 -2
  66. package/dist/boot/exit-boundary.js +6 -5
  67. package/dist/boot/fatal-exit.d.ts +3 -5
  68. package/dist/boot/fatal-exit.js +2 -2
  69. package/dist/boot/leader.d.ts +15 -0
  70. package/dist/boot/leader.js +17 -15
  71. package/dist/boot/memory-consolidation.d.ts +37 -29
  72. package/dist/boot/memory-consolidation.js +11 -5
  73. package/dist/boot/org-memory.js +1 -1
  74. package/dist/boot/parked-revive-gate.js +2 -2
  75. package/dist/boot/reapers.d.ts +4 -3
  76. package/dist/boot/reapers.js +19 -16
  77. package/dist/boot/resolve-spec.d.ts +5 -3
  78. package/dist/boot/resolve-spec.js +55 -67
  79. package/dist/boot/retention-lane.d.ts +4 -4
  80. package/dist/boot/retention-lane.js +2 -2
  81. package/dist/boot/runner-deps.d.ts +28 -7
  82. package/dist/boot/runner-deps.js +11 -4
  83. package/dist/boot/runtime-caps.d.ts +2 -2
  84. package/dist/boot/runtime-caps.js +16 -2
  85. package/dist/boot/session-faces.d.ts +16 -7
  86. package/dist/boot/session-faces.js +114 -94
  87. package/dist/boot/shutdown.d.ts +5 -4
  88. package/dist/boot/shutdown.js +6 -4
  89. package/dist/boot/stage-01-config.js +9 -1
  90. package/dist/boot/stage-02-web-admin-pull.d.ts +1 -0
  91. package/dist/boot/stage-02-web-admin-pull.js +6 -1
  92. package/dist/boot/stage-03-store-backend.d.ts +3 -0
  93. package/dist/boot/stage-03-store-backend.js +4 -3
  94. package/dist/boot/stage-04-stores.d.ts +2 -0
  95. package/dist/boot/stage-04-stores.js +2 -2
  96. package/dist/boot/stage-05-execution-env.d.ts +7 -3
  97. package/dist/boot/stage-05-execution-env.js +2 -2
  98. package/dist/boot/stage-06-runners.d.ts +10 -12
  99. package/dist/boot/stage-06-runners.js +23 -15
  100. package/dist/boot/stage-07-capability-layer.d.ts +11 -8
  101. package/dist/boot/stage-07-capability-layer.js +5 -3
  102. package/dist/boot/stage-08-reapers.d.ts +11 -8
  103. package/dist/boot/stage-08-reapers.js +3 -3
  104. package/dist/boot/stage-09-leader.d.ts +12 -15
  105. package/dist/boot/stage-09-leader.js +12 -4
  106. package/dist/boot/stage-10-http-server.d.ts +12 -15
  107. package/dist/boot/stage-10-http-server.js +7 -4
  108. package/dist/boot/store-evidence.d.ts +20 -0
  109. package/dist/boot/store-evidence.js +13 -0
  110. package/dist/boot/stores.d.ts +3 -0
  111. package/dist/boot/stores.js +21 -10
  112. package/dist/boot/task-list-lane.d.ts +4 -4
  113. package/dist/boot/web-admin.d.ts +4 -2
  114. package/dist/boot/web-admin.js +55 -35
  115. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  116. package/dist/boot-reclaim.d.ts +3 -1
  117. package/dist/boot-reclaim.js +1 -1
  118. package/dist/brain.d.ts +7 -18
  119. package/dist/brain.js +5 -17
  120. package/dist/budget.js +6 -6
  121. package/dist/capabilities/center-plugins.d.ts +7 -1
  122. package/dist/capabilities/center-plugins.js +32 -10
  123. package/dist/capabilities/center-wiring.js +1 -1
  124. package/dist/capabilities/composite-members.d.ts +2 -2
  125. package/dist/capabilities/composite-members.js +2 -2
  126. package/dist/capabilities/repo-tools.d.ts +2 -0
  127. package/dist/capabilities/repo-tools.js +14 -12
  128. package/dist/capabilities/scenarios.d.ts +6 -15
  129. package/dist/capabilities/scenarios.js +11 -16
  130. package/dist/capabilities/skills.d.ts +1 -1
  131. package/dist/capabilities/tool-defer.d.ts +1 -1
  132. package/dist/capability-facts.d.ts +38 -11
  133. package/dist/capability-facts.js +47 -8
  134. package/dist/card-void.d.ts +4 -4
  135. package/dist/card-void.js +1 -1
  136. package/dist/center-credential-renewer.d.ts +6 -2
  137. package/dist/center-credential-renewer.js +7 -3
  138. package/dist/config-catalog.d.ts +16 -1
  139. package/dist/config-catalog.js +62 -56
  140. package/dist/config-dir-trust.d.ts +37 -4
  141. package/dist/config-dir-trust.js +88 -44
  142. package/dist/config-invariants.d.ts +42 -3
  143. package/dist/config-invariants.js +69 -5
  144. package/dist/config-lkg.d.ts +23 -1
  145. package/dist/config-lkg.js +17 -3
  146. package/dist/config-provider.d.ts +9 -9
  147. package/dist/config-provider.js +25 -110
  148. package/dist/config-pull-failure.d.ts +50 -0
  149. package/dist/config-pull-failure.js +48 -0
  150. package/dist/config-types.d.ts +26 -17
  151. package/dist/config.d.ts +8 -16
  152. package/dist/config.js +113 -47
  153. package/dist/delegated-session-owner.d.ts +1 -1
  154. package/dist/deleted-session-ids.d.ts +3 -2
  155. package/dist/deployment-governance.d.ts +3 -3
  156. package/dist/deployment-shape.d.ts +30 -4
  157. package/dist/deployment-shape.js +7 -0
  158. package/dist/egress-redirect.d.ts +25 -7
  159. package/dist/egress-redirect.js +20 -2
  160. package/dist/elicitation.d.ts +6 -5
  161. package/dist/elicitation.js +23 -22
  162. package/dist/engine-identity.d.ts +28 -0
  163. package/dist/engine-identity.js +10 -0
  164. package/dist/entry-problems.d.ts +5 -7
  165. package/dist/entry-problems.js +1 -1
  166. package/dist/env-facts.js +2 -1
  167. package/dist/env-witness.d.ts +7 -0
  168. package/dist/env-witness.js +16 -0
  169. package/dist/execution-lane-caps.d.ts +5 -18
  170. package/dist/execution-lane-caps.js +0 -22
  171. package/dist/execution-placement.d.ts +58 -18
  172. package/dist/execution-placement.js +41 -2
  173. package/dist/field-conflict.d.ts +7 -11
  174. package/dist/field-conflict.js +3 -3
  175. package/dist/file-history-capture.d.ts +3 -3
  176. package/dist/file-history-disclosure.js +1 -0
  177. package/dist/fleet/fleet-bus.d.ts +21 -3
  178. package/dist/fleet/fleet-bus.js +35 -25
  179. package/dist/fleet/fleet-reconciler.js +2 -2
  180. package/dist/fleet/serving-lease.js +3 -3
  181. package/dist/fleet-client.js +3 -3
  182. package/dist/fleet-lease.d.ts +0 -1
  183. package/dist/fleet-lease.js +4 -5
  184. package/dist/history-anchor.d.ts +23 -3
  185. package/dist/history-anchor.js +24 -4
  186. package/dist/hitl-delivery.d.ts +90 -0
  187. package/dist/hitl-delivery.js +98 -0
  188. package/dist/hooks/classic-stations.d.ts +8 -11
  189. package/dist/hooks/classic-stations.js +0 -7
  190. package/dist/hooks/hook-llm.d.ts +5 -1
  191. package/dist/hooks/hook-llm.js +24 -15
  192. package/dist/hooks/hook-runner.d.ts +67 -57
  193. package/dist/hooks/hook-runner.js +260 -186
  194. package/dist/host-lsp-manager.d.ts +22 -8
  195. package/dist/host-lsp-manager.js +4 -1
  196. package/dist/http/active-run-conflict.d.ts +2 -43
  197. package/dist/http/active-run-conflict.js +3 -7
  198. package/dist/http/admission.d.ts +4 -18
  199. package/dist/http/admission.js +75 -78
  200. package/dist/http/approval-sweeps.d.ts +3 -3
  201. package/dist/http/approval-sweeps.js +54 -30
  202. package/dist/http/caller-trust.d.ts +8 -10
  203. package/dist/http/caller-trust.js +1 -2
  204. package/dist/http/claim-heartbeat.d.ts +49 -0
  205. package/dist/http/claim-heartbeat.js +46 -0
  206. package/dist/http/claimed-run.d.ts +4 -3
  207. package/dist/http/dispatch.d.ts +8 -1
  208. package/dist/http/dispatch.js +76 -30
  209. package/dist/http/durable-run-leg.d.ts +3 -3
  210. package/dist/http/durable-run-leg.js +17 -12
  211. package/dist/http/execution-context.d.ts +17 -43
  212. package/dist/http/execution-context.js +7 -5
  213. package/dist/http/health-reader.d.ts +36 -0
  214. package/dist/http/health-reader.js +21 -0
  215. package/dist/http/health-self-report.d.ts +9 -9
  216. package/dist/http/health-self-report.js +4 -4
  217. package/dist/http/idempotency.d.ts +9 -5
  218. package/dist/http/idempotency.js +4 -4
  219. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  220. package/dist/http/memory-compliance-failure-reply.js +4 -2
  221. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  222. package/dist/http/memory-face-fault-reply.js +71 -0
  223. package/dist/http/memory-store-refusal-reply.d.ts +1 -1
  224. package/dist/http/memory-store-refusal-reply.js +3 -0
  225. package/dist/http/owner-access.d.ts +391 -67
  226. package/dist/http/owner-access.js +371 -35
  227. package/dist/http/principal-gate.d.ts +24 -81
  228. package/dist/http/principal-gate.js +24 -68
  229. package/dist/http/refusal-body.d.ts +35 -2
  230. package/dist/http/refusal-body.js +34 -0
  231. package/dist/http/request-guards.d.ts +9 -13
  232. package/dist/http/request-guards.js +34 -68
  233. package/dist/http/resume-composition.d.ts +37 -0
  234. package/dist/http/resume-composition.js +18 -0
  235. package/dist/http/resume-ctx-read.d.ts +35 -12
  236. package/dist/http/resume-ctx-read.js +25 -6
  237. package/dist/http/resume-legs.d.ts +21 -18
  238. package/dist/http/resume-legs.js +189 -129
  239. package/dist/http/retired-skill-manifest.d.ts +1 -1
  240. package/dist/http/route-ctx.d.ts +25 -32
  241. package/dist/http/routes/a2a-serve.d.ts +43 -5
  242. package/dist/http/routes/a2a-serve.js +58 -37
  243. package/dist/http/routes/admin-config-refresh.js +2 -2
  244. package/dist/http/routes/admin-drain.js +2 -2
  245. package/dist/http/routes/admin-memory-optout.js +4 -3
  246. package/dist/http/routes/adoption.d.ts +3 -0
  247. package/dist/http/routes/adoption.js +17 -10
  248. package/dist/http/routes/agents-roster.js +13 -7
  249. package/dist/http/routes/approvals-assistant.js +70 -65
  250. package/dist/http/routes/attachments.js +2 -2
  251. package/dist/http/routes/background.d.ts +3 -3
  252. package/dist/http/routes/background.js +9 -17
  253. package/dist/http/routes/capabilities.js +15 -18
  254. package/dist/http/routes/config-catalog.js +2 -2
  255. package/dist/http/routes/devices.d.ts +3 -3
  256. package/dist/http/routes/devices.js +4 -4
  257. package/dist/http/routes/diagnostics.d.ts +27 -3
  258. package/dist/http/routes/diagnostics.js +27 -21
  259. package/dist/http/routes/engine.js +2 -2
  260. package/dist/http/routes/fleet.js +5 -3
  261. package/dist/http/routes/images.js +10 -6
  262. package/dist/http/routes/leader.d.ts +7 -2
  263. package/dist/http/routes/leader.js +12 -3
  264. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  265. package/dist/http/routes/mcp-reconnect.js +7 -15
  266. package/dist/http/routes/memory-bundle.js +4 -7
  267. package/dist/http/routes/memory-compliance.js +4 -4
  268. package/dist/http/routes/memory-consolidation.js +6 -9
  269. package/dist/http/routes/memory-origin.d.ts +2 -0
  270. package/dist/http/routes/memory-origin.js +7 -8
  271. package/dist/http/routes/memory-policy.js +17 -12
  272. package/dist/http/routes/notify-wake.js +10 -19
  273. package/dist/http/routes/observability.js +3 -3
  274. package/dist/http/routes/principal-inbox.d.ts +1 -1
  275. package/dist/http/routes/principal-inbox.js +2 -2
  276. package/dist/http/routes/projects.d.ts +1 -1
  277. package/dist/http/routes/projects.js +3 -2
  278. package/dist/http/routes/retention-ops.js +6 -9
  279. package/dist/http/routes/rules.js +20 -5
  280. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  281. package/dist/http/routes/run-memory-capture.js +6 -12
  282. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  283. package/dist/http/routes/run-permission-mode.js +10 -17
  284. package/dist/http/routes/runs.js +146 -231
  285. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  286. package/dist/http/routes/session-memory-sync.js +7 -13
  287. package/dist/http/routes/session-sync.d.ts +4 -2
  288. package/dist/http/routes/session-sync.js +21 -20
  289. package/dist/http/routes/sessions-list.d.ts +3 -3
  290. package/dist/http/routes/sessions-list.js +9 -9
  291. package/dist/http/routes/sessions.js +87 -124
  292. package/dist/http/routes/shared-memory.js +6 -6
  293. package/dist/http/routes/side-query.js +2 -2
  294. package/dist/http/routes/tasks.js +136 -120
  295. package/dist/http/routes/trace-usage.d.ts +0 -12
  296. package/dist/http/routes/trace-usage.js +40 -46
  297. package/dist/http/routes/workflows.d.ts +39 -4
  298. package/dist/http/routes/workflows.js +42 -14
  299. package/dist/http/run-concurrency-cap.d.ts +20 -12
  300. package/dist/http/run-concurrency-cap.js +39 -26
  301. package/dist/http/run-read-face.d.ts +3 -5
  302. package/dist/http/run-read-face.js +8 -13
  303. package/dist/http/send.d.ts +12 -3
  304. package/dist/http/send.js +42 -6
  305. package/dist/http/server.d.ts +39 -40
  306. package/dist/http/server.js +36 -11
  307. package/dist/http/sse-log.d.ts +17 -10
  308. package/dist/http/sse-log.js +7 -7
  309. package/dist/http/stored-body-replay.d.ts +12 -0
  310. package/dist/http/stored-body-replay.js +2 -2
  311. package/dist/http/submit-ctx.d.ts +16 -8
  312. package/dist/http/submit-ctx.js +6 -2
  313. package/dist/http/submit-replay.d.ts +19 -6
  314. package/dist/http/submit-replay.js +18 -6
  315. package/dist/http/sync-submit-body.d.ts +3 -4
  316. package/dist/http/sync-submit-body.js +4 -5
  317. package/dist/http/wire-types.d.ts +4 -3
  318. package/dist/identity-source.d.ts +36 -5
  319. package/dist/identity-source.js +27 -0
  320. package/dist/index.d.ts +1 -0
  321. package/dist/index.js +1 -0
  322. package/dist/key-resolver.d.ts +32 -0
  323. package/dist/key-resolver.js +23 -9
  324. package/dist/leader/diffup.js +2 -1
  325. package/dist/leader/endpoint.d.ts +26 -5
  326. package/dist/leader/endpoint.js +154 -14
  327. package/dist/leader/fanout.d.ts +3 -0
  328. package/dist/leader/fanout.js +78 -63
  329. package/dist/leader/leader.d.ts +16 -0
  330. package/dist/leader/leader.js +43 -3
  331. package/dist/leader/merge.d.ts +9 -1
  332. package/dist/leader/merge.js +16 -1
  333. package/dist/leader/repair-wire.js +1 -1
  334. package/dist/leader/wire.d.ts +36 -3
  335. package/dist/leader/wire.js +59 -18
  336. package/dist/lsp-evict.d.ts +6 -4
  337. package/dist/lsp-evict.js +2 -3
  338. package/dist/memory-operator-faces.d.ts +5 -4
  339. package/dist/memory-operator-faces.js +1 -1
  340. package/dist/memory-scope.d.ts +29 -2
  341. package/dist/memory-scope.js +64 -15
  342. package/dist/memory-store-refusal.d.ts +5 -2
  343. package/dist/memory-sync-client.d.ts +3 -2
  344. package/dist/memory-sync-client.js +6 -3
  345. package/dist/model-compat.d.ts +17 -8
  346. package/dist/model-compat.js +6 -2
  347. package/dist/model-context-window.d.ts +18 -0
  348. package/dist/model-context-window.js +2 -0
  349. package/dist/model-entry-headers.d.ts +46 -4
  350. package/dist/model-entry-headers.js +2 -2
  351. package/dist/model-entry-refusal.d.ts +35 -16
  352. package/dist/model-entry-refusal.js +40 -27
  353. package/dist/model-plane-face.d.ts +19 -11
  354. package/dist/model-plane-face.js +9 -1
  355. package/dist/model-plane-probe.d.ts +2 -0
  356. package/dist/model-plane-probe.js +17 -0
  357. package/dist/model-provider.d.ts +3 -3
  358. package/dist/model-route-endpoint.d.ts +9 -5
  359. package/dist/model-route-endpoint.js +29 -7
  360. package/dist/model-select.d.ts +16 -0
  361. package/dist/model-select.js +4 -0
  362. package/dist/mountinfo.d.ts +37 -0
  363. package/dist/mountinfo.js +47 -0
  364. package/dist/namespaced-rule-name.d.ts +23 -14
  365. package/dist/namespaced-rule-name.js +8 -11
  366. package/dist/net-address.d.ts +1 -1
  367. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  368. package/dist/observability/corrupt-read-seat.js +5 -3
  369. package/dist/observability/fail-open.d.ts +58 -38
  370. package/dist/observability/fail-open.js +60 -38
  371. package/dist/observability/logger.d.ts +22 -1
  372. package/dist/observability/logger.js +89 -12
  373. package/dist/observability/metrics.js +3 -4
  374. package/dist/observability/otel-exporter.js +2 -1
  375. package/dist/observability/principal-context.d.ts +14 -7
  376. package/dist/observability/principal-context.js +8 -3
  377. package/dist/observability/run-terminal.d.ts +7 -1
  378. package/dist/observability/run-terminal.js +5 -2
  379. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  380. package/dist/orchestration/hardened-vm-runner.js +11 -5
  381. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  382. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  383. package/dist/orchestration/hardened-vm-worker.js +2 -1
  384. package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
  385. package/dist/orchestration/workflow-completion-inbox.js +3 -2
  386. package/dist/org-delivery-gate.d.ts +5 -4
  387. package/dist/org-delivery-gate.js +7 -6
  388. package/dist/outbound-dispatcher.d.ts +1 -1
  389. package/dist/outbound-dispatcher.js +6 -12
  390. package/dist/owner-brands.d.ts +81 -0
  391. package/dist/owner-brands.js +42 -0
  392. package/dist/owner-faces.d.ts +531 -0
  393. package/dist/owner-faces.js +126 -0
  394. package/dist/parked-decide.d.ts +67 -5
  395. package/dist/parked-decide.js +127 -5
  396. package/dist/parked-revive-surface.d.ts +14 -4
  397. package/dist/parked-revive-surface.js +5 -4
  398. package/dist/peer-directory.d.ts +6 -8
  399. package/dist/peer-directory.js +3 -2
  400. package/dist/permission-rule-vocab.d.ts +53 -8
  401. package/dist/permission-rule-vocab.js +30 -2
  402. package/dist/plugins/adoption-log-sql.d.ts +0 -22
  403. package/dist/plugins/adoption-log-sql.js +5 -3
  404. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  405. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  406. package/dist/plugins/approval-ask-store-file.d.ts +18 -7
  407. package/dist/plugins/approval-ask-store-file.js +37 -14
  408. package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
  409. package/dist/plugins/approval-ask-store-memory.js +24 -10
  410. package/dist/plugins/approval-ask-store-sql.d.ts +39 -20
  411. package/dist/plugins/approval-ask-store-sql.js +41 -10
  412. package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
  413. package/dist/plugins/approval-exemption-skill-m46.js +25 -0
  414. package/dist/plugins/approval-exemption-store.d.ts +6 -1
  415. package/dist/plugins/approval-exemption-store.js +14 -0
  416. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  417. package/dist/plugins/approval-nonce-store.js +72 -23
  418. package/dist/plugins/blob-backend.d.ts +2 -0
  419. package/dist/plugins/blob-backend.js +9 -6
  420. package/dist/plugins/caching-session-store.d.ts +13 -1
  421. package/dist/plugins/caching-session-store.js +43 -4
  422. package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
  423. package/dist/plugins/checkpoint-index-columns.js +36 -1
  424. package/dist/plugins/checkpoint-store-face.d.ts +83 -10
  425. package/dist/plugins/checkpoint-store-face.js +18 -1
  426. package/dist/plugins/device-store-sql.js +1 -0
  427. package/dist/plugins/ensure-index.d.ts +13 -1
  428. package/dist/plugins/ensure-index.js +154 -21
  429. package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
  430. package/dist/plugins/ensure-schema-lock-policy.js +3 -2
  431. package/dist/plugins/file-run-store.d.ts +63 -23
  432. package/dist/plugins/file-run-store.js +138 -83
  433. package/dist/plugins/host-platform.d.ts +24 -3
  434. package/dist/plugins/host-platform.js +15 -1
  435. package/dist/plugins/image-bake-store-sql.js +2 -0
  436. package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
  437. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  438. package/dist/plugins/k8s-pod-reaper.js +0 -1
  439. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  440. package/dist/plugins/leader-run-store-sql.js +34 -4
  441. package/dist/plugins/local-checkpoint-store.d.ts +58 -23
  442. package/dist/plugins/local-checkpoint-store.js +195 -76
  443. package/dist/plugins/local-data-dir-modes-m39.js +2 -1
  444. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  445. package/dist/plugins/local-docker-capacity.js +194 -0
  446. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  447. package/dist/plugins/local-docker-reaper.js +102 -0
  448. package/dist/plugins/local-engine-high-water.d.ts +4 -2
  449. package/dist/plugins/local-engine-high-water.js +4 -1
  450. package/dist/plugins/local-session-store.d.ts +358 -125
  451. package/dist/plugins/local-session-store.js +824 -251
  452. package/dist/plugins/local-session-window.d.ts +3 -2
  453. package/dist/plugins/local-session-window.js +3 -2
  454. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  455. package/dist/plugins/local-task-attachment-store.d.ts +18 -1
  456. package/dist/plugins/local-task-attachment-store.js +22 -1
  457. package/dist/plugins/memory-embedder.js +9 -7
  458. package/dist/plugins/memory-engine-pg.d.ts +3 -2
  459. package/dist/plugins/memory-engine-pg.js +14 -5
  460. package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
  461. package/dist/plugins/memory-engine-sql-apply.js +6 -8
  462. package/dist/plugins/memory-engine-tidb.d.ts +4 -2
  463. package/dist/plugins/memory-engine-tidb.js +11 -2
  464. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  465. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  466. package/dist/plugins/memory-run-store.d.ts +39 -27
  467. package/dist/plugins/memory-run-store.js +72 -70
  468. package/dist/plugins/one-time-migration-marker.d.ts +10 -0
  469. package/dist/plugins/one-time-migration-marker.js +7 -0
  470. package/dist/plugins/one-time-migrations.d.ts +186 -45
  471. package/dist/plugins/one-time-migrations.js +442 -119
  472. package/dist/plugins/org-delivery-quota-store.js +2 -1
  473. package/dist/plugins/permission-rule-store-file.d.ts +3 -3
  474. package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
  475. package/dist/plugins/permission-rule-store-sql.js +6 -86
  476. package/dist/plugins/pg-pool.d.ts +1 -31
  477. package/dist/plugins/pg-pool.js +16 -7
  478. package/dist/plugins/remote-env-e2b.d.ts +7 -25
  479. package/dist/plugins/remote-env-e2b.js +34 -25
  480. package/dist/plugins/remote-env-host.d.ts +2 -9
  481. package/dist/plugins/remote-env-host.js +34 -22
  482. package/dist/plugins/remote-env-k8s.d.ts +40 -45
  483. package/dist/plugins/remote-env-k8s.js +107 -58
  484. package/dist/plugins/remote-env-local-docker.d.ts +148 -14
  485. package/dist/plugins/remote-env-local-docker.js +367 -72
  486. package/dist/plugins/remote-scratchpad.js +4 -0
  487. package/dist/plugins/retention-deployment.d.ts +49 -17
  488. package/dist/plugins/retention-deployment.js +39 -8
  489. package/dist/plugins/run-preview-m45.d.ts +11 -0
  490. package/dist/plugins/run-preview-m45.js +19 -0
  491. package/dist/plugins/run-store-sql.d.ts +56 -68
  492. package/dist/plugins/run-store-sql.js +127 -116
  493. package/dist/plugins/s3-answer.d.ts +2 -1
  494. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  495. package/dist/plugins/sandbox-reaper.js +2 -0
  496. package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
  497. package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
  498. package/dist/plugins/scheduler-support.d.ts +16 -1
  499. package/dist/plugins/scheduler-support.js +22 -2
  500. package/dist/plugins/schema-consistency.d.ts +42 -9
  501. package/dist/plugins/schema-consistency.js +212 -11
  502. package/dist/plugins/schema-drift-sentence.d.ts +4 -1
  503. package/dist/plugins/schema-drift-sentence.js +4 -4
  504. package/dist/plugins/schema-ensure-legs.d.ts +9 -0
  505. package/dist/plugins/schema-ensure-legs.js +1 -1
  506. package/dist/plugins/schema-indexes.js +3 -0
  507. package/dist/plugins/schema-live-columns.d.ts +14 -5
  508. package/dist/plugins/schema-live-columns.js +10 -10
  509. package/dist/plugins/send-user-file.js +2 -1
  510. package/dist/plugins/session-birth.d.ts +37 -0
  511. package/dist/plugins/session-birth.js +38 -0
  512. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  513. package/dist/plugins/session-epoch-anchor.js +33 -11
  514. package/dist/plugins/session-ext-table.d.ts +27 -3
  515. package/dist/plugins/session-ext-table.js +19 -6
  516. package/dist/plugins/session-fork.d.ts +15 -1
  517. package/dist/plugins/session-fork.js +3 -0
  518. package/dist/plugins/session-ownership.d.ts +1 -1
  519. package/dist/plugins/session-placement.d.ts +22 -16
  520. package/dist/plugins/session-placement.js +15 -12
  521. package/dist/plugins/session-row-sql.d.ts +12 -0
  522. package/dist/plugins/session-row-sql.js +3 -3
  523. package/dist/plugins/session-run-rollup.d.ts +29 -0
  524. package/dist/plugins/session-run-rollup.js +40 -0
  525. package/dist/plugins/session-store-sql.d.ts +38 -12
  526. package/dist/plugins/session-store-sql.js +130 -30
  527. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  528. package/dist/plugins/session-withdraw-sql.js +42 -0
  529. package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
  530. package/dist/plugins/shared-memory-store-sql.js +2 -1
  531. package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
  532. package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
  533. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  534. package/dist/plugins/sql-driver.d.ts +1 -1
  535. package/dist/plugins/sql-driver.js +2 -1
  536. package/dist/plugins/sql-errors.d.ts +32 -5
  537. package/dist/plugins/sql-errors.js +55 -7
  538. package/dist/plugins/sql-json-column.d.ts +8 -7
  539. package/dist/plugins/sql-json-column.js +10 -6
  540. package/dist/plugins/store-backend.d.ts +84 -15
  541. package/dist/plugins/store-backend.js +186 -55
  542. package/dist/plugins/store-contracts.d.ts +90 -30
  543. package/dist/plugins/store-contracts.js +22 -1
  544. package/dist/plugins/store-fault.d.ts +28 -2
  545. package/dist/plugins/store-fault.js +20 -2
  546. package/dist/plugins/task-attachment-store.d.ts +15 -3
  547. package/dist/plugins/task-attachment-store.js +22 -9
  548. package/dist/plugins/tidb-pool.js +23 -8
  549. package/dist/plugins/web-search.js +5 -3
  550. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  551. package/dist/plugins/workflow-run-store-sql.js +11 -5
  552. package/dist/principal-jwt.d.ts +4 -4
  553. package/dist/principal-jwt.js +20 -5
  554. package/dist/principal-shape.d.ts +41 -0
  555. package/dist/principal-shape.js +19 -0
  556. package/dist/question.d.ts +13 -23
  557. package/dist/question.js +21 -39
  558. package/dist/request-declaration-refusal.d.ts +35 -12
  559. package/dist/request-declaration-refusal.js +21 -9
  560. package/dist/request-form.d.ts +58 -0
  561. package/dist/request-form.js +72 -0
  562. package/dist/request-image-urls.d.ts +8 -2
  563. package/dist/request-image-urls.js +2 -1
  564. package/dist/request-images.d.ts +20 -0
  565. package/dist/request-images.js +59 -0
  566. package/dist/request-key-closure.d.ts +6 -7
  567. package/dist/request-key-closure.js +15 -2
  568. package/dist/resource-suspend.d.ts +7 -16
  569. package/dist/resource-suspend.js +1 -1
  570. package/dist/retired-name-host-notice.d.ts +21 -0
  571. package/dist/retired-name-host-notice.js +12 -0
  572. package/dist/rule-entry-list.d.ts +2 -2
  573. package/dist/rule-entry-list.js +3 -4
  574. package/dist/rule-issue-reading.d.ts +58 -0
  575. package/dist/rule-issue-reading.js +14 -0
  576. package/dist/rules-consent.d.ts +5 -3
  577. package/dist/rules-consent.js +1 -0
  578. package/dist/run-acceptance.d.ts +3 -1
  579. package/dist/run-acceptance.js +3 -0
  580. package/dist/run-local.d.ts +14 -6
  581. package/dist/run-local.js +92 -80
  582. package/dist/run-stale-default.d.ts +7 -0
  583. package/dist/run-stale-default.js +2 -0
  584. package/dist/runs.d.ts +26 -15
  585. package/dist/runs.js +39 -27
  586. package/dist/runtime-caps-resolver.d.ts +21 -6
  587. package/dist/runtime-caps-resolver.js +17 -4
  588. package/dist/runtime-governance.d.ts +2 -2
  589. package/dist/runtime-governance.js +5 -3
  590. package/dist/sealed-key-layout.d.ts +12 -5
  591. package/dist/sealed-key-layout.js +5 -0
  592. package/dist/sealed-key.d.ts +12 -2
  593. package/dist/sealed-key.js +115 -27
  594. package/dist/security.d.ts +128 -158
  595. package/dist/security.js +163 -59
  596. package/dist/sema-config-dir.d.ts +20 -0
  597. package/dist/sema-config-dir.js +25 -0
  598. package/dist/server-secret-env.d.ts +21 -5
  599. package/dist/server-secret-env.js +14 -4
  600. package/dist/session-children-retire.d.ts +7 -5
  601. package/dist/session-children-retire.js +7 -2
  602. package/dist/session-deletion.d.ts +88 -0
  603. package/dist/session-deletion.js +8 -0
  604. package/dist/session-erase.d.ts +145 -0
  605. package/dist/session-erase.js +115 -0
  606. package/dist/session-error-wire.d.ts +5 -5
  607. package/dist/session-error-wire.js +1 -1
  608. package/dist/session-incarnation.d.ts +52 -5
  609. package/dist/session-incarnation.js +19 -2
  610. package/dist/session-policy-wire.d.ts +6 -3
  611. package/dist/session-policy-wire.js +11 -1
  612. package/dist/session-resident-background.d.ts +0 -71
  613. package/dist/session-resident-background.js +4 -3
  614. package/dist/session-row.d.ts +2 -1
  615. package/dist/session-rules-seat.d.ts +12 -0
  616. package/dist/session-rules-seat.js +19 -0
  617. package/dist/session-titler.d.ts +7 -15
  618. package/dist/session-titler.js +1 -1
  619. package/dist/spec-fields.d.ts +57 -3
  620. package/dist/spec-fields.js +72 -51
  621. package/dist/store-posture.d.ts +136 -20
  622. package/dist/store-posture.js +188 -3
  623. package/dist/stored-request-hooks-m20.js +2 -2
  624. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  625. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  626. package/dist/stores-sql/checkpoint-store-sql.d.ts +33 -28
  627. package/dist/stores-sql/checkpoint-store-sql.js +75 -44
  628. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  629. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  630. package/dist/stores-sql/pg-session-storage.d.ts +7 -5
  631. package/dist/stores-sql/pg-session-storage.js +54 -46
  632. package/dist/stores-sql/retention-store-sql.d.ts +87 -19
  633. package/dist/stores-sql/retention-store-sql.js +92 -27
  634. package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
  635. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  636. package/dist/stores-sql/session-write-hooks.d.ts +12 -6
  637. package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
  638. package/dist/stores-sql/tidb-session-storage.js +13 -8
  639. package/dist/stores-sql/tidb-session-store.d.ts +36 -17
  640. package/dist/stores-sql/tidb-session-store.js +69 -39
  641. package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
  642. package/dist/stores-sql/windowed-session-storage.js +9 -0
  643. package/dist/submission-exit.d.ts +50 -0
  644. package/dist/submission-exit.js +108 -0
  645. package/dist/task-a2a.d.ts +1 -1
  646. package/dist/task-a2a.js +3 -3
  647. package/dist/task-cwd.d.ts +20 -0
  648. package/dist/task-cwd.js +8 -0
  649. package/dist/task-mcp.d.ts +1 -1
  650. package/dist/task-mcp.js +3 -3
  651. package/dist/task-settings.d.ts +14 -10
  652. package/dist/task-settings.js +18 -7
  653. package/dist/terminal.d.ts +25 -43
  654. package/dist/terminal.js +31 -11
  655. package/dist/tool-approval.d.ts +131 -129
  656. package/dist/tool-approval.js +189 -193
  657. package/dist/trace/core-keyset-guard.d.ts +13 -6
  658. package/dist/trace/core-vocab-wire.d.ts +95 -0
  659. package/dist/trace/core-vocab-wire.js +15 -0
  660. package/dist/trace/exit-seat.d.ts +30 -4
  661. package/dist/trace/exit-seat.js +40 -36
  662. package/dist/trace/extension-call-face.d.ts +3 -2
  663. package/dist/trace/extension-call-face.js +3 -1
  664. package/dist/trace/ledger-events.d.ts +4 -7
  665. package/dist/trace/ledger-sink.d.ts +1 -30
  666. package/dist/trace/ledger-sink.js +0 -11
  667. package/dist/trace/model-segment.d.ts +5 -5
  668. package/dist/trace/model-segment.js +5 -5
  669. package/dist/trace/project.d.ts +55 -42
  670. package/dist/trace/project.js +52 -19
  671. package/dist/trace/redact.d.ts +123 -27
  672. package/dist/trace/redact.js +880 -260
  673. package/dist/trace/self-minted-wire.d.ts +487 -19
  674. package/dist/trace/self-minted-wire.js +172 -23
  675. package/dist/trace/wire-projection-faces.d.ts +5 -6
  676. package/dist/trace/wire-projection-faces.js +2 -2
  677. package/dist/upstream-body.d.ts +23 -0
  678. package/dist/upstream-body.js +16 -0
  679. package/dist/url-refusal.d.ts +3 -3
  680. package/dist/url-refusal.js +11 -4
  681. package/dist/user-authored-text.d.ts +1 -1
  682. package/dist/user-input-ledger.d.ts +7 -8
  683. package/dist/user-input-ledger.js +1 -1
  684. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  685. package/dist/web-admin-client/apply-effective.js +13 -16
  686. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  687. package/dist/web-admin-client/apply-ledger.js +5 -2
  688. package/dist/web-admin-client/center-request.d.ts +2 -2
  689. package/dist/web-admin-client/center-request.js +15 -15
  690. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  691. package/dist/web-admin-client/effective-keys.js +1 -1
  692. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  693. package/dist/web-admin-client/entry-metadata.js +13 -0
  694. package/dist/web-admin-client/http-client.d.ts +1 -1
  695. package/dist/web-admin-client/http-client.js +23 -4
  696. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  697. package/dist/web-admin-client/mcp-revocation.js +2 -1
  698. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  699. package/dist/web-admin-client/read-warnings.js +1 -0
  700. package/dist/web-admin-client/restart-signal.js +8 -4
  701. package/dist/web-admin-client/skills-mcp.d.ts +2 -2
  702. package/dist/web-admin-client/types.d.ts +1 -2
  703. package/dist/workspace-space.d.ts +3 -2
  704. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  705. package/package.json +6 -3
  706. package/scripts/drain-check-local.mjs +118 -147
  707. package/scripts/drain-check.mysql.sql +22 -2
  708. package/scripts/drain-check.pg.sql +22 -2
  709. package/wire-changes/server@7.148.0.json +1517 -0
  710. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  711. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  712. package/dist/http/memory-layer-reply.d.ts +0 -30
  713. package/dist/http/memory-layer-reply.js +0 -24
  714. package/dist/lsp/e2b-bridge.d.ts +0 -57
  715. package/dist/lsp/e2b-bridge.js +0 -139
  716. package/dist/lsp/e2b-manager.d.ts +0 -93
  717. package/dist/lsp/e2b-manager.js +0 -178
  718. package/dist/lsp/lsp-frames.d.ts +0 -14
  719. package/dist/lsp/lsp-frames.js +0 -25
  720. package/dist/lsp/manager.d.ts +0 -129
  721. package/dist/lsp/manager.js +0 -127
  722. package/dist/lsp/types.d.ts +0 -12
  723. package/dist/lsp/types.js +0 -2
  724. package/dist/lsp/ws-transport.d.ts +0 -40
  725. package/dist/lsp/ws-transport.js +0 -210
@@ -24,6 +24,7 @@
24
24
  * 新加一只构造器 ⇒ 同批往登记表加一行,否则普查格红。
25
25
  */
26
26
  import type { GateOutcome, McpDelivered, TaskResult, SystemInjectionPriority } from "@sema-agent/core";
27
+ import { type InputAuthor, type RunOrigin } from "@sema-agent/core";
27
28
  import type { RunEvent, RunRecord } from "../plugins/store-contracts.js";
28
29
  import type { ModelUsageDelta, ModelUsageTracker, PromptManifestTracker } from "../budget.js";
29
30
  import { type SafeText } from "./exit-seat.js";
@@ -104,7 +105,7 @@ export declare function aggregateModelUsage(events: RunEvent[]): Record<string,
104
105
  export type TraceBlock = {
105
106
  type: "thinking";
106
107
  text: string;
107
- } | {
108
+ } | ({
108
109
  type: "tool-call";
109
110
  id: string;
110
111
  name: string;
@@ -112,12 +113,10 @@ export type TraceBlock = {
112
113
  input: unknown;
113
114
  recovered?: true;
114
115
  requestedBy?: ExtensionRequesterFace;
115
- eventId?: string;
116
- parentToolCallId?: string;
117
- } | {
116
+ } & EventIdentity) | {
118
117
  type: "content";
119
118
  text: string;
120
- } | {
119
+ } | ({
121
120
  type: "tool-result";
122
121
  callId: string;
123
122
  label?: string;
@@ -135,12 +134,40 @@ export type TraceBlock = {
135
134
  answeredBy?: string;
136
135
  requestedBy?: ExtensionRequesterFace;
137
136
  rewrite?: ToolInputRewriteFace;
138
- eventId?: string;
139
- parentToolCallId?: string;
140
- } | {
137
+ } & EventIdentity) | {
141
138
  type: "prompt-assembled";
142
139
  readonly [member: string]: unknown;
143
140
  };
141
+ /**
142
+ * 内容帧的**身份**(core `TaskEventIdentity` 全集,四键)—— 引擎盖在每只内容帧上的那组键,本仓只有**这一只**投影:每只共享构造器都经它,
143
+ * live 帧、durable 账本行、trace 读投影(turns 面 / trace SSE 面)于是是同一组键,引擎盖了哪几枚就上哪几枚。
144
+ * · `eventId` —— 引擎逐帧铸的 uuidv7(去重句柄 / 回卷锚;live 腿 SSE `id:` 行的唯一来源);
145
+ * · `parentToolCallId` —— 委派子代的帧才有(这段属于哪一次委派调用);
146
+ * · `sourceTaskId` —— 作为子代跑的任务的内容帧才有(起跑那只任务的 id,消费方按它把子代的帧归到子代);
147
+ * · `bgAgentId` —— 后台子代经宿主转发道上来的帧才有(`a*` 句柄;嵌套时是最外层那一只)。
148
+ * 值判据一条({@link identityKey}:非空 `string` 才上 wire,绝不强转)。
149
+ *
150
+ * 🔴 **型必须说得出口**([ref]):`eventId` 是续流游标的来源 —— 一个连值的型都说不出的键不许铸成游标。非串 / 空串 ⇒ 键缺席(与「无锚不发 `id:` 行」
151
+ * 同一条纪律:不可锚的位置绝不伪装成可锚)。转发子代腿的帧是 UNTRUSTED RAW(§E1),这一道同时是它的形判门。
152
+ * [ref] 门①:条件展开的臂逐条是直写字面量(键名对扫描器可见)。
153
+ */
154
+ export declare function identityFields(src: {
155
+ eventId?: unknown;
156
+ parentToolCallId?: unknown;
157
+ sourceTaskId?: unknown;
158
+ bgAgentId?: unknown;
159
+ }): EventIdentity;
160
+ /**
161
+ * {@link identityFields} 的形。🔴 **`type` 而不是 `interface`**(它与 {@link SegmentEndFields} 两处都是,别改回去):TS 只给**类型别名**
162
+ * 隐式索引签名,interface 没有 ⇒ 写成 interface 的话,每一个把本形交给 `Record<string, unknown>` 形参(tail 总线帧、live 帧写口)的调用点
163
+ * 都得手抄一次 `{ ...frame }` 展开。别名让「声明出来的形」原样流经既有写口,零调用点噪声。
164
+ */
165
+ export type EventIdentity = {
166
+ eventId?: string;
167
+ parentToolCallId?: string;
168
+ sourceTaskId?: string;
169
+ bgAgentId?: string;
170
+ };
144
171
  /**
145
172
  * 🔴 **模型自由文本账本行(`text` / `reasoning`)的唯一载荷铸点**([ref] / [ref],7.75.1)。
146
173
  *
@@ -235,42 +262,13 @@ export declare function screenedStoredEventData(type: string, data: unknown): un
235
262
  * 逐块的 `text_delta` 由 `trace/model-segment.ts` 的登记册铸(7.143.0 起经同一只脱敏器的放行窗,一段的逐块拼接 = 本帧 content);
236
263
  * 本函数由登记册在段末调,三腿不再各自调。
237
264
  * 坏形(content 非串/空串)⇒ null(丢帧,不铸「权威空段」:core 契约明言空段不发本帧,消费端收到空段会清掉已攒 delta)。
238
- * 身份**四键**随行(live 现状带全四键,消费端可能已依赖);值经 {@link identityKey} —— 非空 string 才上 wire
239
- * ([ref] 起不再逐字透传:坏形身份键会在 live 写口上铸出假游标)。 */
265
+ * 身份经 {@link identityFields}(与每只共享构造器同一只;[ref] 起不再逐字透传:坏形身份键会在 live 写口上铸出假游标)。 */
240
266
  export declare function textEndEventData(ev: Record<string, unknown>, before?: string): SegmentEndFields | null;
241
- /**
242
- * live 面的**身份四键**(core `TaskEventIdentity` 全集)—— 一个属主,两处共用({@link segmentEndFields}
243
- * 与 sync 腿白名单 catch-all 的 `ident`;此前是两份手抄)。与 durable 面的 {@link identityFields} 的差别
244
- * **只剩键集**:那边两键(durable builder 对另两键的既定排除),这边四键(live 现状,消费端已依赖);
245
- * **值判据是同一条** —— 两只都问 {@link identityKey}(非空 `string` 才上 wire,绝不强转)。
246
- *
247
- * 🔴 **型必须说得出口**([ref]):`eventId` 是 live 腿 SSE `id:` 行的**唯一**来源,而 `id:` 行是续流游标
248
- * ——一个连值的型都说不出的键不许铸成游标。非串/空串 ⇒ 键缺席(与「无锚不发 `id:` 行」同一条纪律:
249
- * 不可锚的位置绝不伪装成可锚)。转发子代腿的帧是 UNTRUSTED RAW(§E1),这一道同时是它的形判门。
250
- *
251
- * 🔴 **`type` 而不是 `interface`**(它与 {@link SegmentEndFields} 两处都是,别改回去):TS 只给**类型别名**
252
- * 隐式索引签名,interface 没有 ⇒ 写成 interface 的话,每一个把本形交给 `Record<string, unknown>` 形参
253
- * (tail 总线帧、live 帧写口)的调用点都得手抄一次 `{ ...frame }` 展开。别名让「声明出来的形」原样流经
254
- * 既有写口,零调用点噪声。
255
- */
256
- export type LiveEventIdentity = {
257
- eventId?: string;
258
- parentToolCallId?: string;
259
- sourceTaskId?: string;
260
- bgAgentId?: string;
261
- };
262
267
  /** 段末帧(`text_end` / `reasoning_end`)的载荷**形**(两只帧一个字节不差 —— 一个 wire 概念一份形,
263
268
  * 消费端的读法只学一次;差别只有各自铸点的空段判据)。 */
264
- export type SegmentEndFields = LiveEventIdentity & {
269
+ export type SegmentEndFields = EventIdentity & {
265
270
  content: string;
266
271
  };
267
- /** {@link LiveEventIdentity} 的铸点。[ref] 门①:条件展开的臂逐条是直写字面量(键名对扫描器可见)。 */
268
- export declare function liveIdentityFields(ev: {
269
- eventId?: unknown;
270
- parentToolCallId?: unknown;
271
- sourceTaskId?: unknown;
272
- bgAgentId?: unknown;
273
- }): LiveEventIdentity;
274
272
  /**
275
273
  * `reasoning_end` 段末帧的**唯一**铸点(三条 live 腿共用:top stream / 转发子代腿 / 子代 tail 面)——
276
274
  * `text_end` 的推理面孪生({@link textEndEventData}),形逐字同(共用 {@link segmentEndFields})。
@@ -464,7 +462,7 @@ export declare function appendParkRow(append: AppendFn, usage: ModelUsageSeat |
464
462
  * 不是模型自由文本);`startedAt` 是有限数才上 wire;
465
463
  * · `name` / `workflowAgentLabel` —— UNTRUSTED 展示文本 ⇒ `redactSecrets`(同 `task_progress.name` / `.workflowAgentLabel`);
466
464
  * · `spawnName` —— 出生点校验过的队友**身份键** ⇒ verbatim(理由全文在 {@link taskProgressEventData} 的同名键注);
467
- * · 身份两键经 `identityFields`(信封上的 `sourceTaskId` / `bgAgentId` 不由本族构造器投,见 `FRAME_ENVELOPE_KEYS`)。
465
+ * · 身份经 `identityFields`(四键,引擎盖了哪枚上哪枚 —— 与每只共享构造器同一只)。
468
466
  * 缺席即缺席:可选键缺席不铸键(`taskType` 缺席 = 前台子代,禁读作某个默认种类;`seq` 缺席 = 无 `a*` 行,禁读作 cycle 1)。
469
467
  */
470
468
  export declare function taskStartedEventData(ev: {
@@ -661,7 +659,7 @@ export declare function compactionOutcomeEventData(ev: {
661
659
  }>;
662
660
  /**
663
661
  * `compaction_started`([ref],core 7.53.0 [ref])—— 一次压缩 pass 在提交点(触发闸过了、切点在、`preCompact` 没拦)宣告开始,先于摘要调用:
664
- * 一次在供应方重试表里等很久的摘要(core 实测 503 × 11、173 s)从此在流上不是静默的。**原样投影**:`{ trigger, pass, startedAt }` + 身份两键,
662
+ * 一次在供应方重试表里等很久的摘要(core 实测 503 × 11、173 s)从此在流上不是静默的。**原样投影**:`{ trigger, pass, startedAt }` + 身份(`identityFields`),
665
663
  * 不自铸相位、不铸 run / session id(那是流的,不是帧的键)。三键都是引擎铸的闭形值:`trigger` 闭集词(`auto` / `manual` / `forced`,与结束帧同一张词表)、
666
664
  * `pass` 不透明 id(结束这次 pass 的那一帧 —— `compacted` 或 `compaction_outcome` —— 带同一个 `pass`)、`startedAt` 引擎时钟 epoch 毫秒 ⇒ 不脱敏、逐字;
667
665
  * 形不合即缺席(与 {@link compactionOutcomeEventData} 同款守卫,不编值)。三条消费腿(live 帧、两条 durable 腿)共用这一只。
@@ -1004,6 +1002,14 @@ export declare function wiringManifestFaceEventData(ev: {
1004
1002
  * · `rewrittenBy[]`(core 7.62.0 [ref],只在腿的 prompt 屏 `prompt.submit` 改写过这条输入时在场)—— 改写它的扩展注册名,按改写序 ⇒ verbatim:
1005
1003
  * 名字的形由引擎在注册入口判(`MOD_REGISTRATION_NAME`,能引号 / 括号 / 折句的名在入口拒),与会话行上同名位(`audit.ts` 的 `rewrittenBy: "verbatim"`)
1006
1004
  * 同一读法。非数组不投、非串 / 空串成员丢、丢完为空不铸键(缺席 = 原样送达,不是空数组)。
1005
+ * · `author` / `extension`(core 7.66.0 [ref]:**谁写的这条输入**,不是本人时才在场 —— `"extension"` = 扩展经 `$.prompt.submit` 交的提示,`"observer"` = 观察者的
1006
+ * 报告;缺席 = 本人(或替本人转述的宿主),公共动词的每条输入)—— `author` 是 core 闭集 `INPUT_AUTHORS` 的词(`isInputAuthor` 判,`"operator"` 不在帧上)⇒ verbatim;
1007
+ * `extension` = 发起它的注册名(引擎只在 `author: "extension"` 旁铸)⇒ 过 {@link sanitizeWireText}(与 `tool_start.requestedBy.name` 同一只注册名出口纪律)。
1008
+ * 不投它们 = 扩展 / 观察者的输入在 wire 上读成无署名的本人输入(core 的话:never render a non-operator input as the person's)。形不对 ⇒ 丢那一位、计一次
1009
+ * `server.trace.projection-input-malformed`(纯归因位的丢弃律,见 `extension-call-face.ts`);两键的配对是引擎的不变式,本仓不复判。
1010
+ * · `attachments[].declinedBy`(core 7.66.0 [ref]:拒了这只附件的 `prompt.mention` 扩展,`ExtensionRequester` 形)⇒ 与 `requestedBy` 同一只读法 {@link extensionRequesterOf}。
1011
+ * · `runOrigin`(core 7.58.0 [ref] / [ref]:这条输入由部署的调度器交来,闭集 `RUN_ORIGINS`;缺席 = 宿主什么也没说,**从不**读成「有人发的」)⇒ 引擎词、归因位、无自由文本 ⇒ 逐字,
1012
+ * 读法 {@link runOriginOnFrame}(与 `wiring_manifest.leg.runOrigin` 的 {@link runOriginOnLeg} 同一只 core 谓词 `isRunOrigin`、各一处丢弃口;四面一条规则见 `test/run-origin-faces.test.ts` 头注)。不投 = 渲染方把调度者的输入当成人敲的(core 点名的病)。
1007
1013
  *
1008
1014
  * `actor` 逐键挑(禁 spread):core 已声明 `ActorAssertion` 是冻结三键形,但白名单的意义正是「core 加第
1009
1015
  * 四键时由人处置」——身份对象上多出来的键裸上线是本文件反复登记的病族。
@@ -1021,6 +1027,9 @@ export declare function humanInputEventData(ev: {
1021
1027
  entryId?: unknown;
1022
1028
  attachments?: unknown;
1023
1029
  rewrittenBy?: unknown;
1030
+ author?: unknown;
1031
+ extension?: unknown;
1032
+ runOrigin?: unknown;
1024
1033
  eventId?: unknown;
1025
1034
  parentToolCallId?: unknown;
1026
1035
  }): FrameData<{
@@ -1031,7 +1040,11 @@ export declare function humanInputEventData(ev: {
1031
1040
  }>;
1032
1041
  attachments?: Array<FrameData<{
1033
1042
  label?: SafeText;
1043
+ declinedBy?: ExtensionRequesterFace;
1034
1044
  }>>;
1045
+ author?: Exclude<InputAuthor, "operator">;
1046
+ extension?: string;
1047
+ runOrigin?: RunOrigin;
1035
1048
  }>;
1036
1049
  /** S4 (SILENT-FALLBACK P0-a): the durable `brain_status` observation row, shared by the bg + resume append
1037
1050
  * sites. core marks the live `status` frame EPHEMERAL (never replayed by core on resume) — this row is the
@@ -1164,7 +1177,7 @@ export declare function contextUsageEventData(ev: {
1164
1177
  * (白名单没跟上 core 新增字段)。补 builder 的同时也就把它纳入了 `wire-whitelist-exhaustiveness` 的编译期差集门。
1165
1178
  *
1166
1179
  * 🔴 **本构造器是 `turn_end` 帧载荷的唯一铸点**(core 7.29.0 提货批,车LY):三条腿同调 —— live SSE
1167
- * (`http/routes/tasks.ts` 的 `/v1/tasks/stream` 臂,身份键另由 `liveIdentityFields` 补四键)、durable 账本
1180
+ * (`http/routes/tasks.ts` 的 `/v1/tasks/stream` 臂)、durable 账本
1168
1181
  * (`ledger-sink.ts`)、resume 腿(`resume-legs.ts`)。live 臂此前是一份**手抄**的键集,于是 core 7.29.0 加的
1169
1182
  * `responseModel` 在 durable 面由这里补上以后,live 面仍会被那份手抄静默剥掉 —— 同一帧两条腿两套键集。
1170
1183
  *
@@ -1,5 +1,5 @@
1
1
  import { admitProviderEcho, redactErrorMessage, redactModelText } from "../observability/run-terminal.js";
2
- import { MCP_DELIVERY_VERDICTS, MCP_LIVENESS_STATES, screenGateOutcome, TEAM_ROLES, ToolRoster, ToolRosterDelta, WRITE_PROTECTION_TARGET_VIEWS } from "@sema-agent/core";
2
+ import { isInputAuthor, isRunOrigin, MCP_DELIVERY_VERDICTS, MCP_LIVENESS_STATES, screenGateOutcome, TEAM_ROLES, ToolRoster, ToolRosterDelta, WRITE_PROTECTION_TARGET_VIEWS } from "@sema-agent/core";
3
3
  import { Value } from "typebox/value";
4
4
  import { recordFailOpen } from "../observability/fail-open.js";
5
5
  import { redactSecrets, redactDeep } from "./redact.js";
@@ -92,10 +92,12 @@ export function aggregateModelUsage(events) {
92
92
  total[model].usageBasis = basis;
93
93
  return any ? total : undefined;
94
94
  }
95
- function identityFields(src) {
95
+ export function identityFields(src) {
96
96
  return {
97
97
  ...(identityKey(src.eventId) !== undefined ? { eventId: identityKey(src.eventId) } : {}),
98
98
  ...(identityKey(src.parentToolCallId) !== undefined ? { parentToolCallId: identityKey(src.parentToolCallId) } : {}),
99
+ ...(identityKey(src.sourceTaskId) !== undefined ? { sourceTaskId: identityKey(src.sourceTaskId) } : {}),
100
+ ...(identityKey(src.bgAgentId) !== undefined ? { bgAgentId: identityKey(src.bgAgentId) } : {}),
99
101
  };
100
102
  }
101
103
  function identityKey(v) {
@@ -231,16 +233,8 @@ export function textEndEventData(ev, before = "") {
231
233
  return null;
232
234
  return segmentEndFields(ev.content, ev, before);
233
235
  }
234
- export function liveIdentityFields(ev) {
235
- return {
236
- ...(identityKey(ev.eventId) !== undefined ? { eventId: identityKey(ev.eventId) } : {}),
237
- ...(identityKey(ev.parentToolCallId) !== undefined ? { parentToolCallId: identityKey(ev.parentToolCallId) } : {}),
238
- ...(identityKey(ev.sourceTaskId) !== undefined ? { sourceTaskId: identityKey(ev.sourceTaskId) } : {}),
239
- ...(identityKey(ev.bgAgentId) !== undefined ? { bgAgentId: identityKey(ev.bgAgentId) } : {}),
240
- };
241
- }
242
236
  function segmentEndFields(content, ev, before = "") {
243
- return { content: redactModelText(content, before), ...liveIdentityFields(ev) };
237
+ return { content: redactModelText(content, before), ...identityFields(ev) };
244
238
  }
245
239
  export function reasoningEndEventData(ev) {
246
240
  if (typeof ev.content !== "string" || ev.content.trim().length === 0)
@@ -394,7 +388,7 @@ export function taskNotificationEventData(ev) {
394
388
  ...(n.source !== undefined ? { source: seatText("trace-frame-text", n.source) } : {}),
395
389
  ...(n.exitCode !== undefined ? { exitCode: n.exitCode } : {}),
396
390
  ...(n.partial !== undefined ? { partial: n.partial } : {}),
397
- ...(n.diagnostics !== undefined ? { diagnostics: seatText("trace-frame-text", n.diagnostics) } : {}),
391
+ ...(n.diagnostics !== undefined ? { diagnostics: seatText("completion-diagnostics-text", n.diagnostics) } : {}),
398
392
  ...(n.recentSteps !== undefined
399
393
  ? { recentSteps: n.recentSteps.map((s) => ({ tool: s.tool, target: seatText("trace-frame-text", s.target), outcome: seatText("trace-frame-text", s.outcome) })) }
400
394
  : {}),
@@ -533,6 +527,7 @@ export function wiringManifestEventData(ev, minted) {
533
527
  const sessionIn = sec(m.session) ?? {};
534
528
  const fleetIn = sec(m.fleet) ?? {};
535
529
  const legIn = sec(m.leg) ?? {};
530
+ const legRunOrigin = runOriginOnLeg(legIn.runOrigin);
536
531
  const interactionIn = sec(m.interaction) ?? {};
537
532
  const rulesIn = sec(m.permissionRules) ?? {};
538
533
  const ask = nonEmpty({
@@ -733,7 +728,7 @@ export function wiringManifestEventData(ev, minted) {
733
728
  })();
734
729
  return {
735
730
  ...(num(m.schemaVersion) !== undefined ? { schemaVersion: m.schemaVersion } : {}),
736
- ...(str(legIn.kind) !== undefined ? { leg: { kind: legIn.kind } } : {}),
731
+ ...(str(legIn.kind) !== undefined ? { leg: { kind: legIn.kind, ...(legRunOrigin !== undefined ? { runOrigin: legRunOrigin } : {}) } } : {}),
737
732
  ...(teamRole !== undefined ? { teamRole } : {}),
738
733
  ...(fileHistory !== undefined ? { fileHistory } : {}),
739
734
  ...(permissionMode !== undefined ? { permissionMode } : {}),
@@ -816,14 +811,21 @@ export function humanInputEventData(ev) {
816
811
  const attachments = Array.isArray(ev.attachments)
817
812
  ? ev.attachments
818
813
  .filter((m) => typeof m === "object" && m !== null && !Array.isArray(m))
819
- .map((m) => ({
820
- ...(typeof m.ordinal === "number" && Number.isFinite(m.ordinal) ? { ordinal: m.ordinal } : {}),
821
- ...(str(m.kind) !== undefined ? { kind: m.kind } : {}),
822
- ...(str(m.outcome) !== undefined ? { outcome: m.outcome } : {}),
823
- ...(str(m.label) !== undefined ? { label: seatText("trace-frame-text", String(m.label)) } : {}),
824
- }))
814
+ .map((m) => {
815
+ const declinedBy = extensionRequesterOf(m.declinedBy, "human_input.attachments", "declinedBy");
816
+ return {
817
+ ...(typeof m.ordinal === "number" && Number.isFinite(m.ordinal) ? { ordinal: m.ordinal } : {}),
818
+ ...(str(m.kind) !== undefined ? { kind: m.kind } : {}),
819
+ ...(str(m.outcome) !== undefined ? { outcome: m.outcome } : {}),
820
+ ...(str(m.label) !== undefined ? { label: seatText("trace-frame-text", String(m.label)) } : {}),
821
+ ...(declinedBy !== undefined ? { declinedBy } : {}),
822
+ };
823
+ })
825
824
  : undefined;
826
825
  const rewrittenBy = Array.isArray(ev.rewrittenBy) ? ev.rewrittenBy.filter((n) => str(n) !== undefined) : [];
826
+ const author = inputAuthorOnFrame(ev.author);
827
+ const extension = inputExtensionOnFrame(ev.extension);
828
+ const runOrigin = runOriginOnFrame(ev.runOrigin);
827
829
  const actor = {
828
830
  ...(str(a.id) !== undefined ? { id: seatText("trace-frame-text", String(a.id)) } : {}),
829
831
  ...(typeof a.hostAsserted === "boolean" ? { hostAsserted: a.hostAsserted } : {}),
@@ -840,9 +842,40 @@ export function humanInputEventData(ev) {
840
842
  ...(str(ev.entryId) !== undefined ? { entryId: ev.entryId } : {}),
841
843
  ...(attachments !== undefined ? { attachments } : {}),
842
844
  ...(rewrittenBy.length > 0 ? { rewrittenBy } : {}),
845
+ ...(author !== undefined ? { author } : {}),
846
+ ...(extension !== undefined ? { extension } : {}),
847
+ ...(runOrigin !== undefined ? { runOrigin } : {}),
843
848
  ...identityFields(ev),
844
849
  };
845
850
  }
851
+ function runOriginOnFrame(v) {
852
+ if (v === undefined)
853
+ return undefined;
854
+ if (isRunOrigin(v))
855
+ return v;
856
+ return dropProjectedFace("human_input.runOrigin is not a member of the engine's RUN_ORIGINS");
857
+ }
858
+ function runOriginOnLeg(v) {
859
+ if (v === undefined)
860
+ return undefined;
861
+ if (isRunOrigin(v))
862
+ return v;
863
+ return dropProjectedFace("wiring_manifest.leg.runOrigin is not a member of the engine's RUN_ORIGINS");
864
+ }
865
+ function inputAuthorOnFrame(v) {
866
+ if (v === undefined)
867
+ return undefined;
868
+ if (isInputAuthor(v) && v !== "operator")
869
+ return v;
870
+ return dropProjectedFace("human_input.author is not a non-operator word of the engine's INPUT_AUTHORS");
871
+ }
872
+ function inputExtensionOnFrame(v) {
873
+ if (v === undefined)
874
+ return undefined;
875
+ if (typeof v === "string" && v !== "")
876
+ return sanitizeWireText(v);
877
+ return dropProjectedFace("human_input.extension is not a non-empty registration name");
878
+ }
846
879
  export function brainStatusEventData(ev) {
847
880
  const num = (v) => typeof v === "number" && Number.isFinite(v);
848
881
  return {
@@ -20,7 +20,41 @@
20
20
  * 不回退到剥后产物、不吞:装着的 core 上运行期不可达,换 core 时契约钉先红。
21
21
  */
22
22
  export declare function mapNormalizedToOriginal(text: string, normalized: string): Int32Array;
23
+ /** 测试可见:同一张表的谓词(测试不抄第二份属性转义)。 */
24
+ export declare function isReadingIgnorableForTest(cp: number): boolean;
23
25
  export declare const REDACTION_TOKEN_RE_SRC: string;
26
+ /**
27
+ * 🔴 **扫描器读原文的唯一口**(九只手写扫描器与它们的读者的原文参数类型 —— 类型上拿不到裸串,也拿不到文本长度):
28
+ * 活流交出点的 `view` 项({@link FRONTIER_TERMS})读它 —— 一次尝试**真读到了文本末尾**(内容读的下标 ≥ 文本长)⇒ 这一次尝试开着,它的判定可能随续文改。读口三类(闭集):
29
+ * · **内容读**(`charCodeAt` / `atEnd` / `startsWith` / `slice` / `readEnd`):读到末尾即记开着,记在当前尝试寄存器上 —— 文本在哪儿结束,只有经这几只读口才看得见;
30
+ * · **找锚**(`indexOf` / `search`):找下一枚字面 / 头,没找到是 `-1` / `null`,**不记** —— 「后面再没有锚」、段界参数都不是读到了末尾
31
+ * (锚写了一半由池按成员登记的头族派生,{@link HeadReading});找的是内容的收尾(没收尾的串值、收尾栅栏),那一支由臂自己按 head 读法标成未决尾({@link RedactionExtent});
32
+ * · **尝试寄存器**(`attempt(from)`):每次尝试的头上设一次,`from` = 这一次尝试在任何续文下可能产出的跨度的最早起点(视图下标)。
33
+ * 寄存器没设过就读到了末尾 ⇒ 按视图起点记开着(fail-closed:整读扣住,不是少扣),池响亮记 `server.redact.scan-view-unattributed`。
34
+ * 读数只作前沿元数据:不进候选、不进出处表、不参与覆盖位(head 读法的候选与出口座读数逐条不变)。
35
+ */
36
+ interface ScanView {
37
+ /** 内容读:码元 `i`;`i ≥ 文本长` ⇒ 记开着,得 `NaN`(与串的越界读同值)。 */
38
+ charCodeAt(i: number): number;
39
+ /** 内容界:`i` 到了文本末尾吗(到了 ⇒ 记开着)。 */
40
+ atEnd(i: number): boolean;
41
+ /** 读文本在哪儿结束(= 文本长):恒记开着 —— 只在判定本就要读到末尾的那一支用(从起点遮到末尾、到末尾的量问)。 */
42
+ readEnd(): number;
43
+ /** 内容读:`at` 起写着 `lit` 吗;逐码元比到文本末尾还对得上(写了一半)⇒ 记开着,答否。 */
44
+ startsWith(lit: string, at: number): boolean;
45
+ /** 内容读:`[a, b)` 的原文;`b` 越过文本末尾 ⇒ 记开着,交到末尾为止的那一截。 */
46
+ slice(a: number, b: number): string;
47
+ /** 找锚:`from` 起下一枚 `lit` 的位置;没有 ⇒ `-1`(不记)。 */
48
+ indexOf(lit: string, from?: number): number;
49
+ /** 找锚:带 `g` 旗的头正则从 `from` 起的下一枚命中;没有 ⇒ `null`(不记)。 */
50
+ search(re: RegExp, from: number): RegExpExecArray | null;
51
+ /** 找锚:最后一枚 `lit` 的位置;没有 ⇒ `-1`(不记)。 */
52
+ lastIndexOf(lit: string): number;
53
+ /** 设尝试寄存器(这一次尝试的跨度起点下界,视图下标)。 */
54
+ attempt(from: number): void;
55
+ /** 本次尝试(上一次 {@link ScanView.attempt} 以来)读到了文本末尾吗。 */
56
+ reachedEnd(): boolean;
57
+ }
24
58
  export declare function armPoolBudgetForTest(): {
25
59
  spanCount: number;
26
60
  coveredPositions: number;
@@ -44,6 +78,18 @@ export declare function armPoolBudgetForTest(): {
44
78
  windowEvaluations: number;
45
79
  };
46
80
  export declare function resetArmPoolBudgetForTest(): void;
81
+ /**
82
+ * 🔴 **合并律(一条;全仓唯一)** —— 认出来的跨度怎么变成记号,只有这一条律:按 `start` 升序(同起点取**更长**的一条,再按 `tie` 定;缺省 = 输入序,
83
+ * JS 排序稳定),后一条的起点 ≤ 当前段的终点 ⇒ 并进当前段(**相交或相接**:两段之间没有原文字节);一段渲染成**一枚**替换串 = 段首那条的。
84
+ * **交出点**(`joints`,同一段文本上已经交出去的那些位置:流式口的块交付点与跳过点、`opts.before` 的前文终点)是**渲染边界**:跨过交出点的候选在交出点处切成两截,
85
+ * 合并律只在两个交出点之间施加 —— 相接或重叠都不越过交出点。交出点之前的那一截已经以它自己的记号出门了;越过去并,后一截只能重出一遍前一段的记号
86
+ * (且流式口冲刷时判对不上)。切开的后一截按它自己候选的替换串出(与认领律「后一条只认领露出来的尾巴」在交出点上同读)。
87
+ * 施加点两处、同一只函数:脱敏器 {@link runRedaction} 的收尾(各读法存活的候选原样映回原文之后,一次)与出口座(`exit-seat.ts`:引擎主机身份跨度与脱敏器的段同一次合并);
88
+ * 渲染只有 {@link renderRedactionSpans} 一只。于是同一个凭据值在每个出口面上是同一枚记号(trace 帧 / 结果面 / 审批面 / 终局错误 / 完成帧 / 日志 / 活流)。
89
+ * 覆盖的原文字节 = 输入跨度之并(并集不变 ⇒ 方向不弱);变的只是相接 / 部分重叠处的记号个数(两枚 ⇒ 一枚)—— 契约早已写明记号个数与 `:partial` 后缀不是身份位。
90
+ * 中间隔着原文字节(含视图里被删掉的格式字符:紧包映射把它留在两段外,{@link createViewToOriginal})的两段不相接 ⇒ 两枚,那些字节原位。
91
+ */
92
+ export declare function mergeRedactionSpans<S extends RedactionSpan>(spans: readonly S[], tie?: (a: S, b: S) => number, joints?: readonly number[]): S[];
47
93
  /**
48
94
  * 🔴 **脱敏的两个档 —— 「这段文本是自由文本,还是一个结构有界的单元」**([ref],闭集两词)。
49
95
  *
@@ -66,6 +112,15 @@ export declare function resetArmPoolBudgetForTest(): void;
66
112
  type RedactionScope = "free-text" | "bounded-unit" | "diagnostic";
67
113
  /** 🧪 值词表里 `type-name` 一列的词(增补纪律钉读:每个类型名在基线门 c 组都有一格语料)。 */
68
114
  export declare function lineKeyTypeNamesForTest(): readonly string[];
115
+ /**
116
+ * 🔴 **最长识别跨度(读法单元;单源,由识别表派生)**:一枚凭据从它的起点算起,脱敏器要往后读多远才能给出和整段读法同样的判定。两类结构:
117
+ * · **有界结构**:识别表里整条长度有上界的只有栅栏块 —— SSH2 块两端都是定长字面(起始栅栏行 + 至多 {@link ARMOR_BODY_MAX} 的体 + 收尾栅栏行),总长上界就是这三段之和;
118
+ * PEM 块的体同一个上界、栅栏行的标签不设上界(合法标签由它的未决尾接管,见 {@link RedactionExtent});
119
+ * · **判定距离**:正则臂 / 扫描器自己声明的「这里成不成」要读多远,全池最大值 {@link MAX_DECISION_REACH};扫描窗前移的地平线是它的 {@link STREAM_WINDOW_HORIZON} 倍(加载期自证不超过本常量)。
120
+ * 不设上界的结构(值 run、JSON 串值、URL userinfo、带引号的强锚值 …)不在这个数里:它们在窗尾被切断时由 head 读法从起点遮到窗尾({@link RedactionExtent} 的未决尾)。
121
+ * **读者**:出口座扫描窗的余量(`trace/exit-seat.ts`)—— 窗 = 出门区 + 这个数,起于出门区、总长不超过它的有界结构整段落在窗内,与整段读法同判;越过它的不保证同判(窗读法多遮,不漏)。
122
+ */
123
+ export declare const MAX_RECOGNITION_SPAN: number;
69
124
  /** 本模块会写进文本的全部替换 token(`«…»` 字面),从三张表现算 —— 表改这里自动跟,不另抄一份。
70
125
  * 🔴 **[ref] v2 修复轮起它只剩一个语义:闭形闭集的加载期校验**。运行期「这一段是不是一枚记号」已经由
71
126
  * 记号行的闭**形**一处答完({@link tokenUnits} / {@link tokenEnd}),按闭**集**再认一遍的
@@ -174,7 +229,8 @@ export type RedactionLayout = "multi-line" | "single-line";
174
229
  * ① **收尾没见到** —— JSON 串值(要收尾引号)· URL authority(要 `@`;authority 一路走到末尾没有 `/` / 空白,里面有没有 `@` 都读成还在 userinfo 里)·
175
230
  * SSH2 / PEM 栅栏(要收尾栅栏)· 带引号的强锚值(要收尾引号)· PuTTY 容器(终止符之后到末尾没见下一个版本头);
176
231
  * ② **起头没读完**(起头本身不设长度上界,起点可以离末尾很远)—— PEM 起始栅栏行(标签之后到末尾一枚 `-----` 都没有,已读到的部分也还可能是合法栅栏行的前缀)· PuTTY 版本头(`<数字串>: ` 没写完)·
177
- * 无头 .ppk 字段(`Private-Lines: <数字串>` 之后下一个体行的判定没走完)· 词法关键字臂(`Bearer` / `Basic` / `token`)的起头(完整关键字之后跟着不设长度上界的分隔段、值被窗尾切在窗外,见 {@link undecidedKeywordStart};
232
+ * 无头 .ppk 字段(`Private-Lines: <数字串>` 之后下一个体行的判定没走完)· 带头 PEM 体(最后一段的头行 / 体读者读到了这一段末尾才停 —— 头行没见换行、头行之后的体 run / 分隔符 / 下一条头行的 token 写到末尾:
233
+ * 头行区里「最右的 ≥ 8 位串」与体还在长,{@link collectPemFragmentSpans})· 词法关键字臂(`Bearer` / `Basic` / `token`)的起头(完整关键字之后跟着不设长度上界的分隔段、值被窗尾切在窗外,见 {@link undecidedKeywordStart};
178
234
  * 关键字写了一半 / 关键字紧贴值的起点离窗尾至多几十个字符,不另立一支)。
179
235
  * PuTTY 容器臂的「无合格终止 ⇒ 吃到输入末尾」本来就是这一律在整段文本上的形,两种范围都吃到末尾;区别只在留痕 —— 整段读法上它是兜底(记 `server.redact.ppk-eat-to-end`),
180
236
  * head 读法上终止可能在更远处,是未决(不记)。**未决一律不记 fail-open**:它是这一律的正常读数,不是回退;
@@ -202,7 +258,7 @@ export declare const WHOLE_EXTENT: RedactionExtent;
202
258
  export declare function readingHeadEnd(text: string, layout: RedactionLayout, units: number, from?: number): number;
203
259
  /**
204
260
  * `opts.before` = 这段文本的**前文**(同一段里先到、已经交出去的那一截):判定在 `before + text` 上做(前文里的锚照样认得出后文的值),交出的只是 `text` 那一截的读法 ——
205
- * 与整段读法逐字节同一份,除了一条起头在前文里、止点在 `text` 里的跨度(它的原文字节一个不出,整枚换记号,与流式口 {@link renderRange} 同一条渲染律)。
261
+ * 与整段读法逐字节同一份,除了一条起头在前文里、止点在 `text` 里的跨度(它的原文字节一个不出,整枚换记号,与流式口 {@link renderRedactionSpans} 同一条渲染律)。
206
262
  * 命中只计止点在前文之后的跨度(前文那一截上一次已计)。读者:段末帧 `text_end` 的正文(引擎的一块接在本段前文之后判,`observability/run-terminal.ts` 的 `redactModelText`)。
207
263
  */
208
264
  export declare function redactSecrets(text: string, opts?: {
@@ -257,10 +313,9 @@ export declare function redactionSpansForTest(text: string, opts?: {
257
313
  *
258
314
  * 同一只 {@link runRedaction}、同一张不可见字符读法格、同一次观察者计数(座上的一次脱敏就是一次主扫),交出**原文坐标**上的跨度与各自的替换串:臂认什么、档里有哪些臂、
259
315
  * 一段文本有几种读法,仍然只由本模块答。`layout` = 这一行出口的出门形({@link RedactionLayout};必填 —— 出口自己说它把文本压不压成一行,第 ④ 类读不读随之定)。
260
- * 座拿它做**一次区间合并 + 一次渲染 + 按出门形整形 + 按记号边界切**(合并律与渲染律住在座里,本模块不拼第二份产物给座)。
261
- *
262
- * 第一期交的是池解完重叠之后的那一份(升序、两两不交);第二期改交未解重叠的原始候选,池内并集律 {@link resolveSpanOverlaps} 与
263
- * {@link applySpans} 随之删除 —— 那时本口是自由文本脱敏的唯一出口。
316
+ * 交出的是**段**(合并律 {@link mergeRedactionSpans} 已在 {@link runRedaction} 收尾施加:升序、两两不相接)—— 与 {@link redactSecrets} 渲染的是同一份段,座只在上面
317
+ * 做渲染({@link renderRedactionSpans},出门区终点 = `until`)+ 按出门形整形 + 按记号边界切;声明 `hostLeaks` 的行把引擎的主机身份跨度与段再过同一只合并律。
318
+ * `json` = 座表那一行声明「这一行出门的是一条 `JSON.stringify` 的产物」(语义 ⑦,与 {@link redactSecrets} 的 `opts.json` 同义;今天只有日志出口接缝的记录行):必填 —— 出口自己陈述它的文本形,本模块不猜。
264
319
  */
265
320
  export type RedactionSpan = {
266
321
  readonly start: number;
@@ -268,24 +323,43 @@ export type RedactionSpan = {
268
323
  readonly repl: string;
269
324
  };
270
325
  export type { RedactionScope };
271
- export declare function proposeRedactionSpans(text: string, scope: RedactionScope, layout: RedactionLayout, extent: RedactionExtent): readonly RedactionSpan[];
326
+ export declare function proposeRedactionSpans(text: string, scope: RedactionScope, layout: RedactionLayout, extent: RedactionExtent, json: boolean): readonly RedactionSpan[];
272
327
  /**
273
- * 🔴 **未决尾的长度上界**(读法单元):一段还在长的文本,末尾这么多个读法单元里起头的候选,本脱敏器**还判不了**(判定要读到文本之外)。
274
- * 它不是另立的常数,是候选池成员表的同一份读数 —— 每条臂的**判定距离**取最大({@link MemberIdentity.reach} 的意义见那里):正则臂从正则源读出
328
+ * 🔴 **全池的最大判定距离**(读法单元):候选池成员表的同一份读数 —— 每条臂的**判定距离**取最大({@link MemberIdentity.reach} 的意义见那里):正则臂从正则源读出
275
329
  * (前缀 + 前瞻判据 + 值 run 的最少重复;熵谓词 {@link ENTROPY_SCAN_MAX} 两窗由此进来),手写扫描器陈述它起头要读全的字面锚。
276
- * 判定在**无界**远处的结构(没收尾的 JSON 串值 / URL userinfo / 栅栏 / 带引号的值、起头不设长度上界的栅栏行 / 版本头 / 关键字分隔段)不靠它:
277
- * head 读法把它们读成未决尾、从起点遮到文本末尾({@link RedactionExtent}),流式口在它的起点前停下,直到它判定或冲刷。
330
+ * 它**不是放行规则**:活流交出点由读口闭集按实际判定定({@link FRONTIER_TERMS};正则臂的判定距离逐臂进 `view` 项)。它只剩一个用途 —— 扫描窗前移地平线的单位
331
+ * ({@link STREAM_WINDOW_HORIZON}:前移点之后留够「判定距离之内、可能被后文补成跨度」的那几个词,窗的几何,不随一次读数变)。
278
332
  * 加一条判定距离更远的臂,这个数随之变大(钉 `test/live-model-text-hold-law.test.ts` 读每条成员的读数与最大值)。
279
333
  */
280
- export declare const PENDING_TAIL_UNITS: number;
334
+ export declare const MAX_DECISION_REACH: number;
281
335
  /** 测试可见:正则臂判定距离的读法本身(读得出的几形与加载期抛的几形)。 */
282
336
  export declare function regexDecisionReachForTest(re: RegExp, lexical: boolean): number;
283
337
  /** 测试可见:候选池每条成员的判定距离(成员的替换串、池序、读数)。 */
284
- export declare function pendingTailReachForTest(): ReadonlyArray<{
338
+ export declare function decisionReachForTest(): ReadonlyArray<{
285
339
  readonly token: string;
286
340
  readonly order: number;
287
341
  readonly reach: number;
288
342
  }>;
343
+ /**
344
+ * 🔴 **活流交出点的读口闭集**(律:一位「已判定」⇔ 可能盖住它的判定都没读到「文本末尾之后才定的东西」)。五类读一律算,每类一项:
345
+ * · `view`:视图原文(含前瞻)—— 一次判定真读到了视图末尾的最早影响位:扫描器经读口 {@link ScanView} 记(内容读到末尾才算,找锚没找到不算)、正则臂由池按头族与判定距离派生
346
+ * ({@link HeadReading};命中止于视图末尾也算)、扫描器的锚写了一半;臂自标的未决跨度(head 读法)由交出点之后的「横跨 / 触尾回退」接住 —— 同一律的两种回报形;
347
+ * · `lattice`:读法格末尾未定段 —— 各张原始控制字符视图里还没写完的转义写法,与删掉原始控制字符之后末尾的孤高代理({@link latticeOpenOf});
348
+ * · `token`:记号层 —— 末尾写了一半、还可能成形的 `«…`,与止于末尾的已收好记号单元(首尾相接的几枚并成一段,{@link tokenUnits}:再来一枚紧接的记号,字符类读口的回答就变;{@link tokenTailOpen});
349
+ * · `evidence`:出处表 —— 取证执行的足迹碰到证据地平线即开着,它的起点下界拉低交出点;证据地平线沿最终出处表行的依赖范围闭包({@link createEvidenceFrontier});
350
+ * · `coverage`:覆盖位重试 —— 只在已收跨度盖住的位置上重试;盖住它的判定开着时那些位置都不早于交出点,关着时重试读数与 P 上逐字同 ⇒ 恒不拉低(列出只为闭集完整)。
351
+ * 每一项 = 「给定当前交出点 `f`,这一类读报的最早开着位」(不开 = 文本长);只有 `evidence` 读 `f`(证据项依赖证据地平线,证据地平线依赖 `f`)。
352
+ * 交出点 = 各项轮流取 min 到不动点({@link settledFrontier};各项对 `f` 单调不增)。映射类型:少一项 ⇒ TS2741 编译红(与 {@link LANES} 同形)。
353
+ */
354
+ type ReadPort = "view" | "lattice" | "token" | "evidence" | "coverage";
355
+ /** 测试可见:证据项本身(恒等映射):执行 `[lo, hi, 起点下界]`、行 `[起点, 终点, 收尾位]`(收尾位 -1 = 不完整),从 `f` 出发的证据下界。 */
356
+ export declare function evidenceFrontierForTest(execs: ReadonlyArray<readonly [number, number, number]>, rows: ReadonlyArray<readonly [number, number, number]>, f: number): number;
357
+ /** 测试可见:整段 head 读法(出门区 = 整段)下各读法记下的取证执行(原文坐标 `[lo, hi, 起点下界]`;{@link noteExecution})。 */
358
+ export declare function forensicExecutionsForTest(text: string): ReadonlyArray<readonly [number, number, number]>;
359
+ /** 🔴 **渲染器(一只;全仓唯一)**:原文 `[from, until)` 按 `spans`({@link mergeRedactionSpans} 的产物:升序、两两不相接)渲染 —— 与它相交的段整枚换成替换串:
360
+ * 起头在 `from` 之前的那一段也整枚换(它的原文字节一个都不出),横跨 `until` 的那一段同样整枚、其后不再出。脱敏池的产物、流式口的每一次交出、`opts.before` 的那一截、
361
+ * 出口座的渲染(出门区终点 = `until`)都是它 —— 一段一枚记号这件事只写这一次。 */
362
+ export declare function renderRedactionSpans(text: string, spans: readonly RedactionSpan[], from: number, until: number): string;
289
363
  /** 测试可见:扫描窗的两张字母表 —— 全池成员的声明再加 `extra`(造一条新臂的声明),与生产同一只派生、同一份自证(不成立照样抛)。 */
290
364
  export declare function streamWindowAlphabetsForTest(extra?: readonly PriorReading[]): {
291
365
  readonly isBlank: (unit: number) => boolean;
@@ -299,6 +373,10 @@ export declare function escapeGrammarForTest(): {
299
373
  };
300
374
  readonly isBodyUnit: (unit: number) => boolean;
301
375
  };
376
+ /** 认证的读数(闭集;第一条没过的那一条,全过 = `independent`)。 */
377
+ type WindowVerdict = "independent" | "span-straddles" | "view-straddles" | "footprint-straddles" | "row-straddles" | "spans-differ" | "rows-differ";
378
+ /** 测试可见:前移点认证的读数(哪一条挡下;同 {@link windowIndependentAt} 的同一只实现)。 */
379
+ export declare function windowVerdictAtForTest(text: string, q: number): WindowVerdict;
302
380
  /** 测试可见:扫描窗的前移点候选(`-1` = 窗尾有一枚还没写完的转义写法;`0` = 没有),字母表按全池成员的声明再加 `extra` 现算({@link streamWindowAlphabetsForTest})。 */
303
381
  export declare function windowAdvancePointForTest(text: string, units: number, extra?: readonly PriorReading[]): number;
304
382
  /** 测试可见:扫描窗前移点的认证(生产里 `q` 恒是行首;单测拿非行首的 `q` 钉住「名字在 `q` 之前、值在 `q` 之后」「跨度横跨 `q`」两形各自被认证挡下)。 */
@@ -307,24 +385,25 @@ export declare function windowIndependentAtForTest(text: string, q: number): boo
307
385
  * 🔴 **流式口 —— 同一只脱敏器的三口**(live 面逐块到达的模型文本 `text_delta` / `reasoning_delta` 的唯一放行器;登记册在 `trace/model-segment.ts`)。
308
386
  * 同一只 {@link runRedaction}、同一张表,只多一件事:知道文本还在长。
309
387
  * · **喂入**({@link RedactionStream.feed}):原文追加进本段;
310
- * · **取已判定前缀**({@link RedactionStream.takeSettled}):从上次取到的位置起,已判定的那一截的脱敏读法 —— head 读法,出门区终点 = 末尾 {@link PENDING_TAIL_UNITS}
311
- * 个读法单元之前;切点再退到横跨它的那一条跨度的起点(一枚可能还在长、或判定在更远处的凭据整条不出)与码点边界。按重扫节律({@link streamRescanStep})才真扫;
388
+ * · **取已判定前缀**({@link RedactionStream.takeSettled}):从上次取到的位置起,已判定的那一截的脱敏读法 —— head 读法(出门区 = 整窗),切点 = 读口闭集的交出点({@link settledFrontier}:
389
+ * 最小的「可能盖住它的判定读到了文本末尾之后」的位),再退到横跨它、或止于文本末尾的那一条跨度的起点(一枚可能还在长、或判定在更远处的凭据整条不出)与码点边界({@link settledCut})——
390
+ * 扫描器读到末尾、正则臂的头写在判定距离之内、读法格 / 记号层末尾没写完、取证执行问过的证据碰到证据地平线(URL 口令里粘着一枚还没判定的别臂候选,口令不先出)。按重扫节律({@link streamRescanStep})才真扫;
312
391
  * · **交付点**({@link RedactionStream.takeAll}):已喂入的字节全部交出 —— 整段读法、文本到此为止(引擎关了一个文字块:那一块现在就要交付,不等后文);流不结束,
313
392
  * 之后喂入的字节仍在整段上下文里判(前文的锚认得出后文的值)。一条凭据形恰横跨交付点 ⇒ 交付时那一截按到此为止判(读得出的半形出记号),之后横跨的那一条整枚换记号、
314
393
  * 冲刷时的核对对不上(`diverged`,一段计一次)—— 判定读不到交付点之后的字节,这是交付点的定义,不是第二套规则;
315
394
  * · **收尾冲刷**({@link RedactionStream.flush}):整段读法交出其余字节,并核对已取出的字节在整段读法下是不是同一份。
316
- * 律:各次取出依次拼接 + 冲刷 = 整段读法(`redactSecrets(全段)`)逐字节 —— 只喂一次再冲刷就是整段口本身。前提是 {@link PENDING_TAIL_UNITS} 读对了每条臂的判定距离;
317
- * 读错的那一形在冲刷时现形(`diverged`),调用方响亮留痕。
318
- * 延迟上界:一个字节在它之后又到 {@link PENDING_TAIL_UNITS} 个读法单元之后的下一次重扫时交出;盖住它的跨度判定之前(或冲刷之前)不交出。
395
+ * 律:各次取出依次拼接 + 冲刷 = 整段读法(`redactSecrets(全段)`)逐字节 —— 只喂一次再冲刷就是整段口本身。前提是读口闭集读全了每一类「读到末尾之后」的读
396
+ * ({@link FRONTIER_TERMS};编译期管不到的两处 —— 扫描器某次尝试漏设寄存器、取证级数封顶 —— 各有响亮计数);读漏的那一形在冲刷时现形(`diverged`),调用方响亮留痕。
397
+ * 延迟:一个字节在盖住它的判定都不再读到末尾之后的下一次重扫时交出(没有开着的判定 ⇒ 喂入它的那一次重扫);盖住它的跨度判定之前(或冲刷之前)不交出。
319
398
  * 不喂观察者(`observe:false`,与影子重扫同口):命中只在段末那一次整段脱敏里计(段末帧的铸点),逐块重扫不重复计数。扫描器抛 ⇒ 原样抛(放行位不动)。
320
399
  *
321
400
  * 🔴 **扫描窗**(多块长段的扫描量;与上面「押在窗里的字节」的窗不是一回事 —— 那是还没交出的未决尾,这是判定要读的前文):一段里每个块的交付点都要「前文 + 本块」一起判(锚在前一块、值在这一块),整段重扫则一段 N 块的总扫描量随 N 平方涨。流式口因此只留判定还需要的那一截前文 ——
322
401
  * **扫描窗** = 全段的一个后缀 `[base, 全段长)`:取已判定前缀、交付点与前文({@link RedactionStream.blockContext})都只在窗上扫;只有收尾冲刷仍是整段一遍(一段一次),窗若曾判错,对不上在这里现形(`diverged`)。
323
402
  * 扫描窗只在块界({@link RedactionStream.endBlock})前移,前移点 `q` 同时满足:① 是行首(其前一码元是换行 —— 行内向左读的臂不会读过它);② 其后至少留
324
- * {@link STREAM_WINDOW_HORIZON} × 未决尾个**非空白**读法单元({@link windowAdvancePoint}:任何判定距离之内的候选与它们的证据邻居都在窗里;键与冒号已到、值的起引号还隔着一段任意长的空白在后文里的锚,
403
+ * {@link STREAM_WINDOW_HORIZON} × 全池最大判定距离个**非空白**读法单元({@link windowAdvancePoint}:任何判定距离之内的候选与它们的证据邻居都在窗里;键与冒号已到、值的起引号还隔着一段任意长的空白在后文里的锚,
325
404
  * 此刻不显现为任何跨度,只有「后文接在窗尾」能补全它 —— 空白不挤掉它们);③ 已交出到段尾(没有未交出的字节落在 `q` 之前);
326
405
  * ④ 被丢的前缀里没有容器类臂的定界字面({@link STREAM_WINDOW_ALPHABETS} 的 `containerDelimiters`:孤立收尾、无头体、「前面有过起始栅栏」读的是整段之前任意远的前文);
327
- * ⑤ 经 {@link windowIndependentAt} 认证(head 读法下:没有跨度横跨 `q`;从 `q` 起单独扫的跨度与整窗里同一截逐条相同)。
406
+ * ⑤ 经 {@link windowIndependentAt} 认证(head 读法下:没有跨度横跨 `q`;没有取证执行的足迹、没有出处表行的依赖范围横跨 `q`;从 `q` 起单独扫的跨度与出处表行与整窗里同一截逐条相同;没有判定从 `q` 之前起读到窗尾)。
328
407
  * 没有满足这五条的点(没有换行的超长单行、一枚始终没收尾的多块结构、整段里出现过密钥栅栏 / PuTTY 密钥头、整窗只有一行 …)⇒ 窗不动、读法不变,代价退回「窗长」(= 与改前同阶)。扫描窗能前移时,每块的扫描量是 O(块长 + 地平线 + 最长行),与段长无关。
329
408
  * 🔴 **五条规则健全的三条前提,都由构造成立、不靠手抄**(臂集一变,窗随之变;没有一份要人记得同步的镜像):
330
409
  * ① 每条臂任意长间隔里的字符,地平线都不数 —— 地平线不数的字符**就是**全池 `bounded` 声明的间隔之并({@link STREAM_WINDOW_ALPHABETS},{@link PriorReading});
@@ -362,8 +441,27 @@ export declare function createRedactionStream(): RedactionStream;
362
441
  export declare function createRedactionStreamWithoutWindowForTest(): RedactionStream;
363
442
  /** 测试可见:同一只流式口,前移点的认证换成调用方给的函数(造「认证扫描抛」的形:真扫描器造不出来;断言抛出后窗与块界的状态一个字节没改)。 */
364
443
  export declare function createRedactionStreamWithCertifierForTest(certify: (text: string, q: number) => boolean): RedactionStream;
365
- /** 测试可见:同一只流式口,未决尾按调用方给的数(比 {@link PENDING_TAIL_UNITS} 小 ⇒ 律被打破的那一形,冲刷时 `diverged` 现形 —— 响亮臂的触发器;生产调用方只有上面那一只)。 */
366
- export declare function createRedactionStreamWithTailForTest(units: number): RedactionStream;
444
+ /** 测试可见:同一只流式口,切点人为往后挪 `adjust` 个码元(越过读口闭集的交出点 ⇒ 律被打破的那一形,冲刷时 `diverged` 现形 —— 响亮臂的触发器;生产调用方只有上面那一只)。 */
445
+ export declare function createRedactionStreamWithFrontierForTest(adjust: number): RedactionStream;
446
+ /** 测试可见:把整段 `text` 当作还在长的一段(还没交出过字节)时,取已判定前缀的切点(原文下标,码点边界调整之前)与那一截的脱敏读法(= 第一次取出),
447
+ * 连同交出点与它的每一项在交出点上的读数({@link FRONTIER_TERMS} 的同一份;不开 = 文本长)。 */
448
+ export declare function settledCutsForTest(text: string): {
449
+ readonly cut: number;
450
+ readonly settled: string;
451
+ readonly frontier: number;
452
+ readonly terms: {
453
+ readonly [K in ReadPort]: number;
454
+ };
455
+ readonly rounds: number;
456
+ };
457
+ /** 测试可见:一只扫描器读口(读数:最早开着位 / 寄存器没设就读到了末尾)—— 钉读口三类读的记法。 */
458
+ export declare function createScanViewForTest(text: string): {
459
+ readonly view: ScanView;
460
+ readonly open: () => number;
461
+ readonly unattributed: () => boolean;
462
+ };
463
+ /** 测试可见:正则臂头族的逐位展开(串数;数不住即抛 —— 加载期同一只)。 */
464
+ export declare function expandHeadUnitsForTest(src: string, flags?: string): number;
367
465
  /**
368
466
  * 🔴 环 + 深度预算(2026-07-25 补)。原实现是纯递归、**既不记已访问节点也不限深度**,而它的调用位置是
369
467
  * **最不可信的边界**:`toolStart`/`toolEnd` 把工具的 `args`/`output`/`structured` 直接喂进来。后果两条:
@@ -435,9 +533,6 @@ export declare function redactedPreview(value: unknown, cap?: number): string |
435
533
  * ([ref] 的「违反格」要造一个「位置律漏了一段」的世界,而拿上游的现成缺陷当触发器会在它修好那天失效);
436
534
  * 生产调用方**不传**这个参数。 */
437
535
  export type PositionalUrlLaw = (url: string) => string;
438
- /** 测试口(与 `observability/fail-open.ts` 的 `resetFailOpenRecorderForTest` 同姿势):一次性 warn 的闸是
439
- * 模块级的,而「只 warn 一次」本身要被钉,所以给测试一个复位口。生产零调用。 */
440
- export declare function resetDisplaySafeFailClosedWarnForTest(): void;
441
536
  /**
442
537
  * 🔴 **[ref] 的不变量 —— 形状律在 query / fragment 区间上有一条凭据跨度 ⇒ 那一整段不出门**。
443
538
  *
@@ -463,8 +558,9 @@ export declare function resetDisplaySafeFailClosedWarnForTest(): void;
463
558
  * (改前是逐参数遮)。方向一致,而且干净的根**零影响** —— Azure 式 `?api-version=…&deployment=…` 上
464
559
  * 形状律一条跨度都没有,结构上走不到这一步([ref]-e 单独钉住)。path 区间的凭据**不**走这条路:位置律
465
560
  * 逐字保留 `pathname`,形状律在产物上照常认得它([ref]-f 的并集格)。
466
- * 🔴 这是 fail-**closed**(扣下信息),**不**登记 `recordFailOpen` —— 那张表记的是「放行了本该拒的」。
467
- * 只打一条一次性 warn(**不含原文**:原文就是那段凭据)。
561
+ * 🔴 这是 fail-**closed**(扣下信息):与本模块其余「整段扣下」的臂(`server.redact.ppk-eat-to-end` / `forensic-level-cap` 一族)同一条律,
562
+ * 走登记过的 F 类兜底臂 `server.redact.display-safe-fail-closed`({@link noteDisplaySafeFailClosed}:逐次计数 + 探针,一次性宣告经 fail-open 记录器 → 日志出口接缝),
563
+ * detail 只报扣下的那一级(**不含原文**:原文就是那段凭据)。
468
564
  */
469
565
  export declare function buildDisplaySafeUrl(raw: string, positionalLaw?: PositionalUrlLaw): string;
470
566
  /**