@sema-agent/server 7.134.0 → 7.135.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 (458) hide show
  1. package/MIGRATION.md +134 -0
  2. package/USAGE.md +98 -30
  3. package/dist/adoption/plan.d.ts +1 -1
  4. package/dist/approval-ask-audit-store.d.ts +24 -24
  5. package/dist/approval-ask-machine.d.ts +2 -2
  6. package/dist/approval-card.d.ts +62 -150
  7. package/dist/approval-card.js +33 -51
  8. package/dist/approval-content-kind.d.ts +22 -5
  9. package/dist/approval-content-kind.js +8 -1
  10. package/dist/approval-deny-reasons.d.ts +1 -1
  11. package/dist/approval-gate-currency.d.ts +22 -3
  12. package/dist/approval-gate-currency.js +44 -18
  13. package/dist/approval-hmac.d.ts +7 -7
  14. package/dist/approval-policy-settlement.d.ts +2 -2
  15. package/dist/approval-reconciler.d.ts +3 -3
  16. package/dist/approval.d.ts +8 -8
  17. package/dist/approval.js +4 -2
  18. package/dist/auth-bridge.d.ts +1 -1
  19. package/dist/auto-mode-face.d.ts +4 -4
  20. package/dist/background-session-reap.d.ts +2 -2
  21. package/dist/bake-runner/main.d.ts +2 -2
  22. package/dist/bake-runner/runner.d.ts +4 -4
  23. package/dist/bench/s1/live-deps.d.ts +1 -1
  24. package/dist/bench/s1/run-firm.d.ts +1 -1
  25. package/dist/boot/coordinators.d.ts +2 -2
  26. package/dist/boot/coordinators.js +2 -2
  27. package/dist/boot/deferred-sandbox-path-env.d.ts +0 -6
  28. package/dist/boot/deferred-sandbox-path-env.js +0 -5
  29. package/dist/boot/engine-lease.d.ts +5 -5
  30. package/dist/boot/execution-env.d.ts +16 -15
  31. package/dist/boot/execution-env.js +19 -21
  32. package/dist/boot/fatal-exit.d.ts +2 -2
  33. package/dist/boot/late-binds.d.ts +1 -1
  34. package/dist/boot/leader.d.ts +1 -1
  35. package/dist/boot/memory-boundary.d.ts +2 -2
  36. package/dist/boot/memory-consolidation.d.ts +15 -15
  37. package/dist/boot/parked-revive-gate.d.ts +3 -3
  38. package/dist/boot/parked-revive-gate.js +3 -2
  39. package/dist/boot/reapers.d.ts +4 -4
  40. package/dist/boot/resolve-spec.d.ts +1 -1
  41. package/dist/boot/resolve-spec.js +28 -24
  42. package/dist/boot/runner-deps.d.ts +11 -11
  43. package/dist/boot/runner-deps.js +3 -2
  44. package/dist/boot/session-faces.d.ts +3 -3
  45. package/dist/boot/session-faces.js +11 -30
  46. package/dist/boot/shutdown.d.ts +5 -5
  47. package/dist/boot/side-query-lane.d.ts +2 -2
  48. package/dist/boot/stage-05-execution-env.js +4 -4
  49. package/dist/boot/stage-06-runners.js +0 -2
  50. package/dist/boot/stores.js +2 -1
  51. package/dist/boot/web-admin.d.ts +17 -17
  52. package/dist/boot/web-admin.js +5 -10
  53. package/dist/boot/workflow-orchestration.js +2 -9
  54. package/dist/brain.d.ts +11 -11
  55. package/dist/budget.d.ts +4 -4
  56. package/dist/capabilities/approvals-push.d.ts +4 -4
  57. package/dist/capabilities/builtin-tools.d.ts +5 -5
  58. package/dist/capabilities/center-plugins.d.ts +5 -5
  59. package/dist/capabilities/center-plugins.js +1 -1
  60. package/dist/capabilities/center-prompts.d.ts +1 -1
  61. package/dist/capabilities/center-wiring.d.ts +1 -1
  62. package/dist/capabilities/composite-members.d.ts +1 -1
  63. package/dist/capabilities/execution-lane.d.ts +5 -5
  64. package/dist/capabilities/execution-lane.js +2 -2
  65. package/dist/capabilities/hands-lane.d.ts +5 -5
  66. package/dist/capabilities/mcp-probe.d.ts +10 -7
  67. package/dist/capabilities/sandbox-file-send.d.ts +1 -18
  68. package/dist/capabilities/sandbox-file-send.js +0 -7
  69. package/dist/capabilities/scenarios.d.ts +28 -10
  70. package/dist/capabilities/scenarios.js +15 -5
  71. package/dist/capabilities/send-user-file-tool.d.ts +1 -1
  72. package/dist/capabilities/skills.d.ts +31 -12
  73. package/dist/capabilities/skills.js +23 -17
  74. package/dist/capabilities/tool-defer.d.ts +1 -1
  75. package/dist/capability-facts.d.ts +26 -25
  76. package/dist/capability-facts.js +14 -16
  77. package/dist/center-config-tier.d.ts +1 -1
  78. package/dist/center-credential.d.ts +4 -4
  79. package/dist/checkpoint-identity.d.ts +5 -0
  80. package/dist/checkpoint-identity.js +14 -0
  81. package/dist/config-catalog.d.ts +12 -12
  82. package/dist/config-invariants.d.ts +4 -4
  83. package/dist/config-invariants.js +3 -2
  84. package/dist/config-lkg.d.ts +1 -1
  85. package/dist/config-provider.d.ts +13 -13
  86. package/dist/config-provider.js +2 -1
  87. package/dist/config-types.d.ts +83 -83
  88. package/dist/config.d.ts +26 -24
  89. package/dist/config.js +12 -10
  90. package/dist/cross-session-settings.d.ts +1 -1
  91. package/dist/delegated-session-owner.d.ts +16 -13
  92. package/dist/delegated-session-owner.js +9 -10
  93. package/dist/deployment-governance.d.ts +16 -16
  94. package/dist/deployment-shape.d.ts +127 -0
  95. package/dist/deployment-shape.js +72 -0
  96. package/dist/device-store.d.ts +1 -1
  97. package/dist/device-ws-hub.d.ts +1 -1
  98. package/dist/egress-redirect.d.ts +1 -1
  99. package/dist/entry-mode-clamp-notice.d.ts +2 -2
  100. package/dist/env-facts.d.ts +10 -9
  101. package/dist/env-facts.js +1 -1
  102. package/dist/env-name-allowlist-knobs.d.ts +5 -5
  103. package/dist/exec-bounds.d.ts +2 -2
  104. package/dist/execution-lane-caps.d.ts +31 -43
  105. package/dist/execution-lane-caps.js +0 -13
  106. package/dist/file-history-capture.d.ts +9 -9
  107. package/dist/file-history-disclosure.d.ts +23 -11
  108. package/dist/file-history-disclosure.js +7 -12
  109. package/dist/fleet/drain-entry.d.ts +2 -2
  110. package/dist/fleet/fleet-bus.d.ts +22 -14
  111. package/dist/fleet/fleet-bus.js +5 -5
  112. package/dist/fleet/fleet-reconciler.d.ts +9 -9
  113. package/dist/fleet/subagent-tail-bus.d.ts +4 -4
  114. package/dist/fleet-client.d.ts +13 -13
  115. package/dist/fleet-lease.d.ts +16 -16
  116. package/dist/governance-http-status.d.ts +2 -2
  117. package/dist/hooks/hook-llm.d.ts +7 -7
  118. package/dist/hooks/hook-runner.d.ts +57 -30
  119. package/dist/hooks/hook-runner.js +36 -18
  120. package/dist/host-decision.d.ts +5 -5
  121. package/dist/host-lsp-manager.d.ts +5 -5
  122. package/dist/hosted-posture.d.ts +23 -13
  123. package/dist/hosted-posture.js +4 -9
  124. package/dist/http/admission.d.ts +2 -2
  125. package/dist/http/admission.js +20 -5
  126. package/dist/http/approval-sweeps.d.ts +1 -1
  127. package/dist/http/approval-sweeps.js +2 -1
  128. package/dist/http/checkpoint-ctx.d.ts +39 -13
  129. package/dist/http/checkpoint-ctx.js +74 -35
  130. package/dist/http/dispatch.d.ts +3 -3
  131. package/dist/http/durable-run-leg.js +4 -3
  132. package/dist/http/idempotency.d.ts +2 -2
  133. package/dist/http/mcp-dial-deadline.d.ts +7 -5
  134. package/dist/http/memory-compliance-failure-reply.d.ts +4 -4
  135. package/dist/http/owner-access.d.ts +4 -6
  136. package/dist/http/owner-access.js +1 -1
  137. package/dist/http/principal-gate.d.ts +7 -7
  138. package/dist/http/principal-gate.js +3 -2
  139. package/dist/http/readiness.d.ts +1 -1
  140. package/dist/http/request-guards.d.ts +4 -4
  141. package/dist/http/request-guards.js +2 -1
  142. package/dist/http/resume-ctx-read.d.ts +7 -7
  143. package/dist/http/resume-ctx-read.js +1 -1
  144. package/dist/http/resume-legs.d.ts +3 -3
  145. package/dist/http/resume-legs.js +11 -8
  146. package/dist/http/route-ctx.d.ts +29 -29
  147. package/dist/http/route-table.d.ts +9 -9
  148. package/dist/http/routes/agents-roster.d.ts +1 -1
  149. package/dist/http/routes/approvals-assistant.d.ts +5 -5
  150. package/dist/http/routes/approvals-assistant.js +55 -15
  151. package/dist/http/routes/background.d.ts +3 -3
  152. package/dist/http/routes/background.js +2 -2
  153. package/dist/http/routes/capabilities.d.ts +1 -1
  154. package/dist/http/routes/capabilities.js +16 -8
  155. package/dist/http/routes/config-catalog.d.ts +1 -1
  156. package/dist/http/routes/devices.d.ts +1 -1
  157. package/dist/http/routes/diagnostics.d.ts +3 -3
  158. package/dist/http/routes/fleet.d.ts +1 -1
  159. package/dist/http/routes/fleet.js +2 -1
  160. package/dist/http/routes/mcp-reconnect.d.ts +4 -4
  161. package/dist/http/routes/mcp-reconnect.js +3 -3
  162. package/dist/http/routes/memory-consolidation.d.ts +1 -1
  163. package/dist/http/routes/notify-wake.d.ts +1 -1
  164. package/dist/http/routes/notify-wake.js +2 -2
  165. package/dist/http/routes/rules.d.ts +1 -1
  166. package/dist/http/routes/runs.js +22 -10
  167. package/dist/http/routes/session-sync.d.ts +1 -1
  168. package/dist/http/routes/session-sync.js +73 -44
  169. package/dist/http/routes/sessions-list.js +1 -1
  170. package/dist/http/routes/sessions.js +30 -44
  171. package/dist/http/routes/tasks.d.ts +1 -1
  172. package/dist/http/routes/trace-usage.d.ts +1 -1
  173. package/dist/http/routes/workflows.d.ts +3 -0
  174. package/dist/http/routes/workflows.js +31 -28
  175. package/dist/http/send.d.ts +5 -5
  176. package/dist/http/server.d.ts +34 -34
  177. package/dist/http/session-inherit-env.d.ts +3 -3
  178. package/dist/http/sse-lifecycle.d.ts +1 -1
  179. package/dist/http/sse-log.d.ts +2 -2
  180. package/dist/http/submit-ctx.js +1 -1
  181. package/dist/http/sync-submit-body.d.ts +1 -1
  182. package/dist/http/verify-rounds.d.ts +1 -1
  183. package/dist/http/wire-types.d.ts +28 -21
  184. package/dist/instruction-source-notice.d.ts +2 -2
  185. package/dist/key-resolver.d.ts +3 -3
  186. package/dist/lane-home-probe.d.ts +1 -1
  187. package/dist/leader/diffout.d.ts +1 -1
  188. package/dist/leader/diffup.d.ts +2 -2
  189. package/dist/leader/endpoint.d.ts +1 -1
  190. package/dist/leader/fanout.d.ts +1 -1
  191. package/dist/leader/leader.d.ts +4 -4
  192. package/dist/leader/merge.d.ts +3 -3
  193. package/dist/leader/repair-wire.d.ts +1 -1
  194. package/dist/leader/wire.d.ts +6 -6
  195. package/dist/list-entry-display.d.ts +1 -1
  196. package/dist/lsp-evict.d.ts +1 -1
  197. package/dist/mcp-assertion-header.d.ts +1 -1
  198. package/dist/memory-layer-legacy-lock.d.ts +1 -1
  199. package/dist/memory-operator-faces.d.ts +1 -1
  200. package/dist/memory-posture.js +4 -2
  201. package/dist/memory-project-layer.d.ts +1 -1
  202. package/dist/memory-scope.d.ts +19 -19
  203. package/dist/memory-store-refusal.d.ts +4 -4
  204. package/dist/model-entry-headers.d.ts +2 -2
  205. package/dist/model-entry-refusal.d.ts +17 -17
  206. package/dist/model-provider.d.ts +10 -10
  207. package/dist/model-reach-scope.d.ts +1 -1
  208. package/dist/model-route-endpoint.d.ts +6 -6
  209. package/dist/model-route-url.d.ts +5 -5
  210. package/dist/model-select.d.ts +15 -6
  211. package/dist/model-select.js +5 -0
  212. package/dist/model-unreachable-notice.d.ts +3 -3
  213. package/dist/namespaced-rule-name.d.ts +15 -5
  214. package/dist/namespaced-rule-name.js +3 -2
  215. package/dist/observability/corrupt-read-seat.d.ts +9 -9
  216. package/dist/observability/cost-taxonomy.d.ts +1 -1
  217. package/dist/observability/err-text.d.ts +1 -1
  218. package/dist/observability/fail-open.d.ts +12 -8
  219. package/dist/observability/fail-open.js +12 -8
  220. package/dist/observability/metrics.d.ts +3 -3
  221. package/dist/observability/run-terminal.d.ts +36 -36
  222. package/dist/observability/secret-env-scrub.d.ts +3 -3
  223. package/dist/observability/tool-trace.d.ts +1 -1
  224. package/dist/operator-ask.d.ts +4 -4
  225. package/dist/orchestration/workflow-agent-session-index.d.ts +3 -3
  226. package/dist/orchestration/workflow-completion-inbox.d.ts +20 -5
  227. package/dist/orchestration/workflow-completion-inbox.js +29 -7
  228. package/dist/orchestration/workflow-notify-journal.d.ts +43 -19
  229. package/dist/orchestration/workflow-notify-journal.js +17 -0
  230. package/dist/outbound-dispatcher.d.ts +4 -4
  231. package/dist/parent-watch.d.ts +4 -4
  232. package/dist/parked-decide.d.ts +16 -15
  233. package/dist/parked-decide.js +5 -4
  234. package/dist/parked-revive-surface.d.ts +7 -7
  235. package/dist/parked-revive-surface.js +2 -3
  236. package/dist/peer-directory.d.ts +3 -3
  237. package/dist/peer-directory.js +1 -1
  238. package/dist/permission-rule-list.d.ts +10 -1
  239. package/dist/permission-rule-list.js +7 -5
  240. package/dist/permission-rule-vocab.d.ts +2 -2
  241. package/dist/plugins/adoption-log-sql.d.ts +1 -1
  242. package/dist/plugins/approval-ask-store-file.d.ts +8 -1
  243. package/dist/plugins/approval-ask-store-file.js +6 -3
  244. package/dist/plugins/approval-ask-store-memory.d.ts +11 -7
  245. package/dist/plugins/approval-ask-store-memory.js +11 -7
  246. package/dist/plugins/approval-ask-store-sql.d.ts +34 -15
  247. package/dist/plugins/approval-ask-store-sql.js +18 -5
  248. package/dist/plugins/approval-exemption-store.d.ts +3 -3
  249. package/dist/plugins/approval-nonce-store.d.ts +3 -3
  250. package/dist/plugins/background-agent-store-sql.d.ts +1 -1
  251. package/dist/plugins/background-shell-support.d.ts +2 -2
  252. package/dist/plugins/blob-backend.d.ts +1 -1
  253. package/dist/plugins/caching-session-store.d.ts +23 -32
  254. package/dist/plugins/caching-session-store.js +5 -17
  255. package/dist/plugins/checkpoint-index-columns.d.ts +81 -0
  256. package/dist/plugins/checkpoint-index-columns.js +62 -0
  257. package/dist/plugins/checkpoint-store-sql.d.ts +44 -66
  258. package/dist/plugins/checkpoint-store-sql.js +55 -102
  259. package/dist/plugins/device-store-sql.d.ts +7 -6
  260. package/dist/plugins/e2b-orphan-reclaim.d.ts +1 -1
  261. package/dist/plugins/ensure-schema-lock-policy.d.ts +1 -1
  262. package/dist/plugins/file-history-store-sql.d.ts +9 -7
  263. package/dist/plugins/file-history-store-sql.js +27 -15
  264. package/dist/plugins/file-run-store.d.ts +8 -8
  265. package/dist/plugins/fork-routing-session-store.d.ts +2 -2
  266. package/dist/plugins/fork-routing-session-store.js +1 -1
  267. package/dist/plugins/host-platform.d.ts +10 -10
  268. package/dist/plugins/image-bake-store-sql.d.ts +1 -1
  269. package/dist/plugins/image-index-sql.d.ts +1 -1
  270. package/dist/plugins/leader-run-store-sql.d.ts +1 -1
  271. package/dist/plugins/local-checkpoint-store.d.ts +10 -10
  272. package/dist/plugins/local-checkpoint-store.js +3 -4
  273. package/dist/plugins/local-session-store.d.ts +34 -38
  274. package/dist/plugins/local-session-store.js +20 -39
  275. package/dist/plugins/local-session-window.d.ts +1 -1
  276. package/dist/plugins/mailbox-store-sql.d.ts +2 -2
  277. package/dist/plugins/memory-engine-pg.d.ts +1 -1
  278. package/dist/plugins/memory-run-store.d.ts +4 -4
  279. package/dist/plugins/memory-sync-store-pg.d.ts +3 -3
  280. package/dist/plugins/one-time-migrations.d.ts +66 -40
  281. package/dist/plugins/one-time-migrations.js +115 -34
  282. package/dist/plugins/outcome-ledger-sql.d.ts +1 -1
  283. package/dist/plugins/park-commit-watch.d.ts +3 -3
  284. package/dist/plugins/permission-rule-store-file.d.ts +5 -5
  285. package/dist/plugins/permission-rule-store-file.js +12 -19
  286. package/dist/plugins/permission-rule-store-sql.d.ts +38 -4
  287. package/dist/plugins/permission-rule-store-sql.js +67 -24
  288. package/dist/plugins/pg-cost-quota.d.ts +1 -1
  289. package/dist/plugins/pg-pool.d.ts +2 -2
  290. package/dist/plugins/pg-pool.js +5 -2
  291. package/dist/plugins/pg-rate-limiter.d.ts +1 -1
  292. package/dist/plugins/pg-session-storage.d.ts +8 -20
  293. package/dist/plugins/pg-session-storage.js +14 -27
  294. package/dist/plugins/remote-env-adb.d.ts +10 -10
  295. package/dist/plugins/remote-env-device.d.ts +10 -9
  296. package/dist/plugins/remote-env-device.js +6 -2
  297. package/dist/plugins/remote-env-e2b.d.ts +3 -3
  298. package/dist/plugins/remote-env-host.d.ts +16 -16
  299. package/dist/plugins/remote-env-k8s.d.ts +8 -8
  300. package/dist/plugins/remote-env-local-docker.d.ts +2 -2
  301. package/dist/plugins/remote-env-ssh.d.ts +4 -4
  302. package/dist/plugins/remote-scratchpad.d.ts +2 -3
  303. package/dist/plugins/remote-scratchpad.js +0 -4
  304. package/dist/plugins/remote-shell.d.ts +6 -6
  305. package/dist/plugins/retention-lane-store-sql.d.ts +4 -4
  306. package/dist/plugins/retention-store-sql.d.ts +4 -4
  307. package/dist/plugins/roster-store-sql.d.ts +1 -1
  308. package/dist/plugins/run-store-sql.d.ts +8 -8
  309. package/dist/plugins/schema-consistency.d.ts +2 -2
  310. package/dist/plugins/schema-ensure-legs.d.ts +3 -3
  311. package/dist/plugins/schema-indexes.d.ts +1 -1
  312. package/dist/plugins/schema-live-columns.d.ts +1 -1
  313. package/dist/plugins/session-event-payload.d.ts +4 -4
  314. package/dist/plugins/session-fork.d.ts +34 -0
  315. package/dist/plugins/session-fork.js +29 -0
  316. package/dist/plugins/session-ownership.js +1 -1
  317. package/dist/plugins/session-placement.d.ts +1 -1
  318. package/dist/plugins/session-policy-store-sql.d.ts +12 -12
  319. package/dist/plugins/session-store.d.ts +2 -2
  320. package/dist/plugins/session-store.js +2 -2
  321. package/dist/plugins/shared-memory-store-sql.d.ts +2 -2
  322. package/dist/plugins/sql-driver.d.ts +8 -8
  323. package/dist/plugins/sql-errors.d.ts +1 -1
  324. package/dist/plugins/sql-json-column.d.ts +21 -21
  325. package/dist/plugins/sql-row-helpers.d.ts +2 -2
  326. package/dist/plugins/store-backend.d.ts +17 -16
  327. package/dist/plugins/store-backend.js +3 -3
  328. package/dist/plugins/store-contracts.d.ts +21 -21
  329. package/dist/plugins/task-attachment-store.d.ts +2 -2
  330. package/dist/plugins/task-list-store-sql.d.ts +1 -1
  331. package/dist/plugins/tidb-pool.d.ts +2 -2
  332. package/dist/plugins/tidb-pool.js +9 -2
  333. package/dist/plugins/tidb-session-store.d.ts +16 -26
  334. package/dist/plugins/tidb-session-store.js +15 -27
  335. package/dist/plugins/tool-result-store-sql.d.ts +1 -1
  336. package/dist/plugins/usage-window-store-sql.d.ts +3 -3
  337. package/dist/plugins/user-input-ledger-file.d.ts +1 -1
  338. package/dist/plugins/user-input-ledger-sql.d.ts +3 -3
  339. package/dist/plugins/web-search.d.ts +19 -5
  340. package/dist/plugins/web-search.js +19 -4
  341. package/dist/{orchestration/workflow-journal-entry.d.ts → plugins/workflow-journal-payload.d.ts} +23 -32
  342. package/dist/plugins/workflow-journal-payload.js +32 -0
  343. package/dist/plugins/workflow-journal-store-sql.d.ts +28 -14
  344. package/dist/plugins/workflow-journal-store-sql.js +34 -15
  345. package/dist/plugins/workflow-run-store-sql.d.ts +4 -4
  346. package/dist/posture-source.d.ts +11 -11
  347. package/dist/principal-jwt.d.ts +6 -6
  348. package/dist/project-identity.d.ts +3 -3
  349. package/dist/project-memory.d.ts +4 -4
  350. package/dist/read-face-posture.d.ts +7 -7
  351. package/dist/request-key-closure.d.ts +1 -1
  352. package/dist/request-key-closure.js +1 -1
  353. package/dist/request-value-closure.d.ts +15 -8
  354. package/dist/request-value-closure.js +2 -0
  355. package/dist/router/route-orchestration.d.ts +11 -16
  356. package/dist/router/route-orchestration.js +2 -12
  357. package/dist/rule-entry-list.d.ts +8 -7
  358. package/dist/rule-entry-list.js +2 -9
  359. package/dist/rules-consent.d.ts +6 -6
  360. package/dist/rules-consent.js +2 -0
  361. package/dist/run-cancel-context.d.ts +5 -5
  362. package/dist/run-local.d.ts +10 -10
  363. package/dist/runs.d.ts +13 -11
  364. package/dist/runs.js +15 -1
  365. package/dist/runtime-caps-resolver.d.ts +6 -6
  366. package/dist/runtime-governance.d.ts +9 -9
  367. package/dist/sandbox-pkg-source.d.ts +9 -31
  368. package/dist/sandbox-pkg-source.js +14 -8
  369. package/dist/sealed-key.d.ts +3 -3
  370. package/dist/security.d.ts +23 -26
  371. package/dist/security.js +12 -9
  372. package/dist/server-secret-env.d.ts +10 -10
  373. package/dist/session-children-retire.d.ts +1 -1
  374. package/dist/session-error-wire.d.ts +7 -7
  375. package/dist/session-incarnation.d.ts +52 -35
  376. package/dist/session-incarnation.js +23 -8
  377. package/dist/session-policy-wire.d.ts +27 -5
  378. package/dist/session-policy-wire.js +15 -1
  379. package/dist/session-records-skipped-notice.d.ts +1 -1
  380. package/dist/session-sync-kernel.d.ts +4 -4
  381. package/dist/session-sync.d.ts +49 -6
  382. package/dist/session-sync.js +52 -10
  383. package/dist/session-titler.d.ts +7 -6
  384. package/dist/session-titler.js +8 -13
  385. package/dist/session-watch.d.ts +3 -3
  386. package/dist/session-watch.js +4 -4
  387. package/dist/sighup-idle.d.ts +2 -2
  388. package/dist/spec-fields.d.ts +4 -4
  389. package/dist/sql-engine-posture.d.ts +3 -3
  390. package/dist/store-posture.d.ts +2 -2
  391. package/dist/stored-request-tool-axes-m19.d.ts +1 -1
  392. package/dist/task-a2a.d.ts +3 -1
  393. package/dist/task-a2a.js +34 -2
  394. package/dist/task-cwd.d.ts +7 -88
  395. package/dist/task-cwd.js +2 -15
  396. package/dist/task-mcp.d.ts +12 -8
  397. package/dist/task-mcp.js +19 -4
  398. package/dist/task-settings.d.ts +30 -18
  399. package/dist/task-settings.js +33 -3
  400. package/dist/task-workflow.d.ts +0 -24
  401. package/dist/task-workflow.js +2 -1
  402. package/dist/terminal.d.ts +5 -5
  403. package/dist/tighten-only-seats.d.ts +7 -6
  404. package/dist/tighten-only-seats.js +1 -1
  405. package/dist/tool-approval.d.ts +143 -197
  406. package/dist/tool-approval.js +13 -28
  407. package/dist/tool-rule-names.d.ts +2 -2
  408. package/dist/trace/core-keyset-guard.d.ts +12 -7
  409. package/dist/trace/engine-notice-wire.d.ts +5 -5
  410. package/dist/trace/engine-notice-wire.js +1 -0
  411. package/dist/trace/exit-seat.d.ts +31 -4
  412. package/dist/trace/exit-seat.js +41 -63
  413. package/dist/trace/ledger-events.d.ts +3 -3
  414. package/dist/trace/ledger-sink.d.ts +1 -1
  415. package/dist/trace/model-segment.d.ts +3 -3
  416. package/dist/trace/project.d.ts +47 -45
  417. package/dist/trace/project.js +33 -1
  418. package/dist/trace/redact.d.ts +44 -30
  419. package/dist/trace/redact.js +191 -89
  420. package/dist/trace/self-minted-wire.d.ts +35 -14
  421. package/dist/trace/self-minted-wire.js +8 -0
  422. package/dist/trace/sema-provenance.d.ts +1 -1
  423. package/dist/trace/task-notification-facets.d.ts +4 -4
  424. package/dist/trace/wire-projection-faces.d.ts +3 -3
  425. package/dist/trace/wire-projection-faces.js +1 -1
  426. package/dist/unattended-permission-mode.d.ts +5 -5
  427. package/dist/url-credential.d.ts +52 -0
  428. package/dist/url-credential.js +49 -0
  429. package/dist/url-refusal.d.ts +6 -2
  430. package/dist/url-refusal.js +8 -1
  431. package/dist/usage-analytics.d.ts +2 -2
  432. package/dist/user-input-ledger.d.ts +23 -23
  433. package/dist/web-admin-client/apply-effective.d.ts +5 -5
  434. package/dist/web-admin-client/apply-effective.js +2 -1
  435. package/dist/web-admin-client/apply-ledger.d.ts +2 -2
  436. package/dist/web-admin-client/center-request.d.ts +2 -2
  437. package/dist/web-admin-client/facade.d.ts +5 -5
  438. package/dist/web-admin-client/facade.js +1 -1
  439. package/dist/web-admin-client/hot-keys-registry.d.ts +2 -2
  440. package/dist/web-admin-client/http-client.d.ts +4 -4
  441. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  442. package/dist/web-admin-client/pull-state.d.ts +1 -1
  443. package/dist/web-admin-client/read-face.d.ts +2 -2
  444. package/dist/web-admin-client/read-warnings.d.ts +5 -5
  445. package/dist/web-admin-client/restart-signal.d.ts +6 -6
  446. package/dist/web-admin-client/skills-mcp.d.ts +28 -3
  447. package/dist/web-admin-client/skills-mcp.js +29 -1
  448. package/dist/web-admin-client/types.d.ts +16 -9
  449. package/dist/workspace-space.d.ts +5 -3
  450. package/dist/write-protection.d.ts +2 -2
  451. package/package.json +4 -3
  452. package/scripts/drain-check-local.mjs +2 -1
  453. package/scripts/drain-check.mysql.sql +4 -2
  454. package/scripts/drain-check.pg.sql +4 -2
  455. package/skills/loop.md +1 -1
  456. package/dist/http/run-declared-families.d.ts +0 -16
  457. package/dist/http/run-declared-families.js +0 -12
  458. package/dist/orchestration/workflow-journal-entry.js +0 -27
@@ -1,12 +1,12 @@
1
1
  /**
2
- * S-461 —— **模型 provider 词表的唯一属主**(闭集 + 路由腿的穷举判词 + 域外拒因)。
2
+ * [ref] —— **模型 provider 词表的唯一属主**(闭集 + 路由腿的穷举判词 + 域外拒因)。
3
3
  *
4
4
  * ## 病
5
5
  * `MODEL_PROVIDER` 此前收**任意字符串**(`config.ts` 里就是一句 `process.env.MODEL_PROVIDER`),而消费它的
6
6
  * 只有一处「非 anthropic 即 gateway」的二分。于是最自然的误填 —— 把**厂商名**写成 provider,
7
7
  * `MODEL_PROVIDER=deepseek` —— 起得来、静默走网关栈(实测改前读数:`model.provider="deepseek"`、
8
8
  * `api="openai-completions"`)。运维以为自己点了一条专用路线,拿到的是默认腿,而读数上没有任何异常。
9
- * 这与 [ref] 件⑤ / S-188 的三根模型线路旋钮是**同一条族律**([ref] A 档:坏值拒启,不静默折默认)。
9
+ * 这与 [ref] 件⑤ / [ref] 的三根模型线路旋钮是**同一条族律**([ref] A 档:坏值拒启,不静默折默认)。
10
10
  *
11
11
  * ## 词源:取不到型,就取那句自述 + 一格钉
12
12
  * 词表的上游属主是 `@sema-agent/settings-schema` 的 `ModelEntry.provider`。它的 zod 形是
@@ -14,7 +14,7 @@
14
14
  * 那两张能取型的表不同),但它的 JSDoc 逐字写着三词与各自的腿:
15
15
  * > Routes the brain in the service (createRoutingBrain by provider): "gateway"/"vllm" → OpenAI brain,
16
16
  * > "anthropic" → Anthropic brain.
17
- * 于是本仓建闭集常量,并由 `test/config-coverage-model-plane.test.ts` 的 S-461 ④ 格**钉住它与那句自述同集**
17
+ * 于是本仓建闭集常量,并由 `test/config-coverage-model-plane.test.ts` 的 [ref] ④ 格**钉住它与那句自述同集**
18
18
  * (读的是装载的那份 dist,不手抄第二份词表)。上游哪天把词表写进 zod enum,那一格会告诉我们该改成取型。
19
19
  *
20
20
  * ## 三条腿各自的边界(刻意分开写)
@@ -70,14 +70,14 @@ export declare function modelBrainLane(provider: ModelProvider): ModelBrainLane;
70
70
  * 「目录里写了个没人认识的 provider」这件事在代码里有一处可指的坐标,而不是散在两个 `=== "anthropic"` 里。
71
71
  *
72
72
  * ⚠️ **未闭环(收窄后如实)**:认不出的目录词今天仍然**无声**地落进网关腿(OpenAI 兼容;条目带自己的 baseUrl /
73
- * 钥匙,打的是它自己的端点 —— 不是凭据越界,是词面失真)。S-704(7.101.0)已把**热路径上的逐条判据**落地
73
+ * 钥匙,打的是它自己的端点 —— 不是凭据越界,是词面失真)。[ref](7.101.0)已把**热路径上的逐条判据**落地
74
74
  * (`model-entry-refusal.ts`:本部署没有对应 brain 的条目整条不可用 —— 今天那一形是「anthropic 词 + 本机没装
75
75
  * anthropic 路由」),但**域外词**是否也该不可用是另一个问题(web-admin 的新条目缺省就写 `"openai"`,预设写厂商名;
76
76
  * 把它们判不可用会让大量在跑的目录整条消失),另车带三问定。在这里加一个 throw 会让一次热发布打死在跑的副本,方向反了。
77
77
  */
78
78
  export declare function catalogBrainLane(provider: string | undefined): ModelBrainLane;
79
79
  /**
80
- * 🔴 **本部署装上的路由表的唯一铸法**(core 7.53.0 #1842;S-623 的「词 ∧ 路由装上」合取由此收成「问表」)。
80
+ * 🔴 **本部署装上的路由表的唯一铸法**(core 7.53.0 [ref];[ref] 的「词 ∧ 路由装上」合取由此收成「问表」)。
81
81
  *
82
82
  * 键 = `createRoutingBrain` 选线读的那个词(`model.provider`),值 = 那条路由上的东西 —— `createBrain` 铸 brain 交给路由器,判词侧(启动摘要、端点判官、
83
83
  * hook 选线)铸路由自己的配置交给 {@link brainLaneFor}(core 的判官从不读值,只问 `Object.hasOwn(routes, word)`)。两侧走同一只函数 ⇒ 同一组键,
@@ -85,13 +85,13 @@ export declare function catalogBrainLane(provider: string | undefined): ModelBra
85
85
  *
86
86
  * `anthropic` 键在场 ⇔ anthropic 路由装上(`ANTHROPIC_API_KEY` / `ANTHROPIC_AUTH_TOKEN` 在场 ⇒ `config.anthropic` 在场);没装时**键缺席**,
87
87
  * 绝不写成 `{ anthropic: undefined }` —— core 7.53.0 起「装上的键而值不是 brain」是一条坏线路(该请求 error terminal),不再回落网关
88
- * (core CHANGELOG #1842「the key must be absent, not `undefined`」)。视图上 `anthropic` 的自有键带 `undefined`(配置对象的形)照样读成没装。
88
+ * (core CHANGELOG [ref]「the key must be absent, not `undefined`」)。视图上 `anthropic` 的自有键带 `undefined`(配置对象的形)照样读成没装。
89
89
  */
90
90
  export declare function mountRoutes<R extends object, T>(view: {
91
91
  readonly anthropic?: R | undefined;
92
92
  }, mount: (route: R) => T): Readonly<Record<string, T>>;
93
93
  /**
94
- * 🔴 **anthropic 路由的请求根** —— 唯一读法(S-1655 / core 7.53.0 #1905)。声明了 `ANTHROPIC_BASE_URL` ⇒ 它;没声明 ⇒ core 包根导出的 `ANTHROPIC_DEFAULT_BASE_URL`
94
+ * 🔴 **anthropic 路由的请求根** —— 唯一读法([ref] / core 7.53.0 [ref])。声明了 `ANTHROPIC_BASE_URL` ⇒ 它;没声明 ⇒ core 包根导出的 `ANTHROPIC_DEFAULT_BASE_URL`
95
95
  * (引擎的 Anthropic brain 的请求根与配对律的车道缺省、`fable5Model` 预设的 `baseUrl` 读的同一只常量)。「没声明」按引擎的读法:缺席、空串、纯空白都是没声明
96
96
  * (core 原话:「nothing, an empty string and whitespace read as undeclared」)。修前本仓两处手抄字面量:主路由的声明根(`brain.ts`,`??`)与 hook 的 anthropic 腿根
97
97
  * (`hooks/hook-llm.ts`,`||`)—— 一个根、两份拷贝、两种合取。
@@ -111,16 +111,16 @@ export declare function routeTableOf<R extends object>(view: {
111
111
  /**
112
112
  * 🔴 **一条目录条目在本部署上真正落哪条 brain 腿**(= 引擎路由器对同一只表的答案,不是词面)—— 唯一判词。
113
113
  *
114
- * 判据是 core 包根导出的 `brainLaneOf({ provider }, routes)`(core 7.53.0 #1842):`createRoutingBrain` 对每个请求问的正是它,所以引擎主路由与本仓的
114
+ * 判据是 core 包根导出的 `brainLaneOf({ provider }, routes)`(core 7.53.0 [ref]):`createRoutingBrain` 对每个请求问的正是它,所以引擎主路由与本仓的
115
115
  * 四处调用点(主路由降级腿与启动摘要在 `brain.ts`、端点判官 `model-route-endpoint.ts`、hook 选线 `hooks/hook-llm.ts`)读**一个**答案。修前本仓自写一只
116
- * 合取 `dispatchBrainLane(provider, anthropicRouteMounted)`(`catalogBrainLane(provider) === "anthropic" ∧ 路由装上`)—— 两份写法,S-1630 那次真病
116
+ * 合取 `dispatchBrainLane(provider, anthropicRouteMounted)`(`catalogBrainLane(provider) === "anthropic" ∧ 路由装上`)—— 两份写法,[ref] 那次真病
117
117
  * (hook 面按词面判线、主路由按装配判线)就是两份写法分叉的样子。
118
118
  *
119
119
  * core 的答案是路由名或 `undefined`(网关 fallback 服务它:词下没装路由,或没有 string 词)。本部署只装 `anthropic` 一条路由(表的唯一铸法 {@link mountRoutes}),
120
120
  * 所以答案映到本仓两词闭集:`"anthropic"` ⇒ anthropic 腿,`undefined` ⇒ 网关腿;别的名字结构上不可能(表里没有那个键),真撞上 ⇒ **响亮抛**([ref]:运行期
121
121
  * miss 臂必须说出来,不静默折网关)。
122
122
  *
123
- * S-704(7.101.0):**目录条目**到不了「anthropic 词、路由没装」这一格 —— 模型面 stage 的逐条判据把它判成不可用(`config.model_no_brain`,那一判问的是
123
+ * [ref](7.101.0):**目录条目**到不了「anthropic 词、路由没装」这一格 —— 模型面 stage 的逐条判据把它判成不可用(`config.model_no_brain`,那一判问的是
124
124
  * 「词想要的腿装没装」,{@link catalogBrainLane},与本判词是两个问题)。这一格今天只剩 **env 腿**:`MODEL_PROVIDER=anthropic` 而没配 anthropic 凭据的部署,
125
125
  * env 模型落网关腿、用的是网关自己的 `MODEL_API_KEY`(凭据与端点同属网关,不越界)。
126
126
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * S-925(7.108.0)—— 「这次模型调用的每一次出网尝试落在哪」的**异步作用域**(叶:只引 node 与类型)。
2
+ * [ref](7.108.0)—— 「这次模型调用的每一次出网尝试落在哪」的**异步作用域**(叶:只引 node 与类型)。
3
3
  *
4
4
  * 两层,一只 `AsyncLocalStorage`:
5
5
  * · **腿层**(`withModelReachScope`,三条带用户面投递口的 run 腿各包一次:流式 `POST /v1/tasks/stream`、后台 `POST /v1/runs`、续跑):
@@ -1,7 +1,7 @@
1
1
  /**
2
- * S-623 —— **openai 兼容路由的有效端点**:解析规则与「解析不到」的拒因,唯一属主。
2
+ * [ref] —— **openai 兼容路由的有效端点**:解析规则与「解析不到」的拒因,唯一属主。
3
3
  *
4
- * ## 病(事实,主会话 09-23 12:40 亲核 + cli L-589 真案)
4
+ * ## 病(事实,主会话 09-23 12:40 亲核 + cli [ref] 真案)
5
5
  * `MODEL_GATEWAY_BASEURL` 曾有一个出厂缺省(本机 8000 端口的 `/v1`)。缺省值在读入那一步就把「来源」抹掉了:
6
6
  * 只设 `MODEL_ID` + key 的隔离配置照常起,第一次模型调用才在 core 的 `describeNetworkError` 里炸成
7
7
  * `fetch failed (connect ECONNREFUSED …:8000)` —— core 不知道、也不该知道那个端点是缺省值;compose 的
@@ -14,7 +14,7 @@
14
14
  * base URL(路由自己的 `baseUrl`,或显式设了的网关),否则拒。** 附带一条同类:备用网关
15
15
  * (`MODEL_GATEWAY_FALLBACK_URLS`)是主网关的镜像,没有主就没有镜像 ⇒ 拒。
16
16
  *
17
- * ## 执法点(判据只在这里,执法点在调用处 —— 与 S-475 `gateway-url-userinfo` 同形)
17
+ * ## 执法点(判据只在这里,执法点在调用处 —— 与 [ref] `gateway-url-userinfo` 同形)
18
18
  * **判官只判「将要服务的那张表」,拒因句按视图说真话**(视图词 = {@link ModelTableLeg} 两词,进判据入参,不靠调用方拼句):
19
19
  * · boot:装配第 2 段**目录应用之后**的跨域不变量区(`boot/stage-02-web-admin-pull.ts`,锚 `CROSS-INVARIANT:model-route-endpoint`)⇒ 拒启 ——
20
20
  * 经 {@link judgeServedModelRoute}:目录被采纳 ⇒ 判目录表(目录视图),目录缺席 / 被整拒 / 没有启用条目 ⇒ 判 env 表(env 视图);
@@ -29,7 +29,7 @@
29
29
  * {@link openaiRouteBaseUrl},不再各写一个 `model.baseUrl || gatewayBaseUrl`。
30
30
  *
31
31
  * ## 三问
32
- * · **谁需要**:忘设端点的本机 / 隔离配置用户与 compose 直用者(cli L-589)—— 他们今天起得来、第一次调用才炸;
32
+ * · **谁需要**:忘设端点的本机 / 隔离配置用户与 compose 直用者(cli [ref])—— 他们今天起得来、第一次调用才炸;
33
33
  * · **谁受伤**:隐式依赖本机 8000 网关(如 vLLM 缺省端口)的部署,从「照常起」变成「拒启」;
34
34
  * · **补偿**:显式写一行 —— 拒因原样给出这一行({@link LOCAL_GATEWAY_HINT})。
35
35
  *
@@ -101,7 +101,7 @@ export interface ModelRouteEndpointView {
101
101
  * 与别的键指同一只对象时不重复点名;只有它一个键时(手搓夹具)照样点名 `default`。
102
102
  */
103
103
  export declare function modelRouteEndpointRefusal(view: ModelRouteEndpointView, leg: ModelTableLeg): string | undefined;
104
- /** S-768:部署级判决的结构化形 —— 码与拒因句由**同一次**判决给出(一个不变量 id 两个码,组拒码在判决那刻当数据带出,不从句子里抠)。 */
104
+ /** [ref]:部署级判决的结构化形 —— 码与拒因句由**同一次**判决给出(一个不变量 id 两个码,组拒码在判决那刻当数据带出,不从句子里抠)。 */
105
105
  export interface ModelRouteEndpointVerdict {
106
106
  readonly code: typeof GATEWAY_FALLBACK_WITHOUT_PRIMARY_CODE | typeof MODEL_ROUTE_ENDPOINT_MISSING_CODE;
107
107
  /** 出路轴({@link MODEL_ROUTE_GAP_WORDS}):同一次判决给出,不从句子或码里反推(`lane_credential_missing` 与 `endpoint_missing` 共用一个码)。 */
@@ -109,7 +109,7 @@ export interface ModelRouteEndpointVerdict {
109
109
  readonly reason: string;
110
110
  }
111
111
  /**
112
- * **判据属主**(S-768 起的结构化形;{@link modelRouteEndpointRefusal} 是它的句子投影):`undefined` = 通过。判序即 {@link modelRouteEndpointRefusal}
112
+ * **判据属主**([ref] 起的结构化形;{@link modelRouteEndpointRefusal} 是它的句子投影):`undefined` = 通过。判序即 {@link modelRouteEndpointRefusal}
113
113
  * 头注所列 —— ① 备用无主先说,② 逐条目解析不到端点全部点名。加一枝 = 在这里同时给出码与句(返回型强制两者同在)。
114
114
  * `leg` = `view.models` 是哪一张表({@link ModelTableLeg}):判据本身两视图同一把,**句子**按视图铸(出路在 env 表与目录表上不是同一组)。
115
115
  */
@@ -1,10 +1,10 @@
1
1
  /** 机读码(拼法随 `config.<键名蛇形>_*` 既有族:`config.model_provider_invalid` / `config.retention_policy_invalid`)。 */
2
2
  export declare const GATEWAY_URL_USERINFO_CODE = "config.gateway_url_userinfo";
3
- /** 同族第二码(S-483 座⑨):这一位不是一个层级式 http(s) URL(不透明 / 解析不动 / 非 http(s) —— S-1269 起后者同码)。三根键共用一码,
3
+ /** 同族第二码([ref] 座⑨):这一位不是一个层级式 http(s) URL(不透明 / 解析不动 / 非 http(s) —— [ref] 起后者同码)。三根键共用一码,
4
4
  * 与上面那只同纪律(码按**规则**命名,不按键名 —— 键名已经逐字在拒因文案里点过了)。 */
5
5
  export declare const MODEL_ROUTE_URL_INVALID_CODE = "config.model_route_url_invalid";
6
6
  /**
7
- * 🔴 **第三条臂的机读码(S-514;core 7.24.2 / [ref] 提货)——请求根带 `#fragment`**。
7
+ * 🔴 **第三条臂的机读码([ref];core 7.24.2 / [ref] 提货)——请求根带 `#fragment`**。
8
8
  *
9
9
  * 为什么与前两条各自一码:运维要按码行动,而三条臂的**出路不同**(补全 URL / 把凭据搬去旋钮 / 删掉 `#`
10
10
  * 之后的一切)。`fetch` **从不把 fragment 发上线**,所以这一形此前是**静默**打根自己的路径、端点后缀整段
@@ -19,10 +19,10 @@ export declare const MODEL_ROUTE_URL_FRAGMENT_CODE = "config.model_route_url_fra
19
19
  * 拒因四件齐:**码** + **哪个 env 键** + **值的样子**(判官的 `buildRefusalShownUrl`:层级式只到 `scheme://host[:port]` + `/…`,不透明形整只成记号 ——
20
20
  * 运维要靠 host 认出是哪一条路由,而密码一个字节都不许进启动错误)+ **出路一句**(点名真实旋钮)。
21
21
  *
22
- * ① 为什么在**声明关口**而不是「由别的门管」(S-483 座⑨):半写 userinfo `http://user:pass@`(解析不动)与 `alice:pw@host:8000`
22
+ * ① 为什么在**声明关口**而不是「由别的门管」([ref] 座⑨):半写 userinfo `http://user:pass@`(解析不动)与 `alice:pw@host:8000`
23
23
  * (不透明 URL,`username`/`password` 恒空)两形若被当「无凭据」放行,一路到 brain 装配期才由 core 拒,拒启点越晚运维越读不出
24
- * 是哪根旋钮配错了;层级式非 http(s)(`ftp://h/v1`)对 `fetch` 同样必然失败(S-1269 起同判,修前放行)。
25
- * ③ 判在声明关口而不是留给 core 的 brain 构造期(S-514):core 的拒因只过位置律、pathname 逐字,`…/v1/sk-…#note` 那一形的
24
+ * 是哪根旋钮配错了;层级式非 http(s)(`ftp://h/v1`)对 `fetch` 同样必然失败([ref] 起同判,修前放行)。
25
+ * ③ 判在声明关口而不是留给 core 的 brain 构造期([ref]):core 的拒因只过位置律、pathname 逐字,`…/v1/sk-…#note` 那一形的
26
26
  * core 拒因会把 path 上的令牌原文打进启动日志 —— 值在到达 core 之前就被这里拒掉,那条文本根本不由 core 铸。
27
27
  *
28
28
  * @param envKey 出问题的那根 env 旋钮的名字(CSV 键上还带第几项)。
@@ -85,7 +85,7 @@ export declare function resolveTaskModel(bodyModel: unknown, objective: string,
85
85
  unavailable?: ModelUnavailable;
86
86
  };
87
87
  /**
88
- * S-704 判别式拒因:这次**用户选择**点中的是一条已发布、但本部署不可用的目录条目(`config.modelRefusals`)。
88
+ * [ref] 判别式拒因:这次**用户选择**点中的是一条已发布、但本部署不可用的目录条目(`config.modelRefusals`)。
89
89
  * 与 {@link ModelNotAllowed} 同一种处置口:本函数不 throw,调用点按 leg 分流(fresh 400 `request.model_unavailable` /
90
90
  * resume 留声降级)。拒因句由 `model-entry-refusal.ts` 的 `modelUnavailableMessage` 铸(一处)。
91
91
  */
@@ -99,13 +99,13 @@ export interface ModelUnavailable {
99
99
  source: "explicit" | "mention";
100
100
  }
101
101
  /**
102
- * S-704 —— **用户可选目录**:服务的目录经 core `expandTiers` 增广(档位词 / CC 别名 / `best`),再把**不可用条目的名字**
102
+ * [ref] —— **用户可选目录**:服务的目录经 core `expandTiers` 增广(档位词 / CC 别名 / `best`),再把**不可用条目的名字**
103
103
  * 从增广出来的别名键里**让出**。全部用户**显式**选择通道(body.model / `@name` / settings.model / compactionModel /
104
104
  * agents[].model / side-query 的 body.model / 名单判定 / `/v1/models` 的可点性)都在这一只上解析 —— 一个优先序,不各写一份;
105
105
  * 与之配套的另一半是 {@link matchCatalogModel} 的「保留名不走 id 回退」。
106
106
  * ⚠️ 射程只到显式选择:引擎自己的隐式选路(角色的档位缺省、档位梯、workflow 名单在 core 里的解析)用的是 core 的增广目录,
107
107
  * 本函数**不**进那里(codex 验修轮 V4:让出名字会改变只带 `modelRole` 的隐式选路)。不可用条目名撞上别名词时引擎侧的改绑
108
- * (运维配置里点名它的角色绑定 / workflow 名单)自 S-712 起由不变量 `refused-names-not-minted`(`model-entry-refusal.ts`)在
108
+ * (运维配置里点名它的角色绑定 / workflow 名单)自 [ref] 起由不变量 `refused-names-not-minted`(`model-entry-refusal.ts`)在
109
109
  * 源头收口:增广会把被拒名铸到别的条目上的候选,模型面整组被拒、进不了引擎 —— 于是本函数的「让出」在已采纳的配置上恒是
110
110
  * 空操作,保留作 HTTP 选择面的第二道(绕过 stage 的写者若造出这种表,选择面仍不改绑)。
111
111
  *
@@ -117,7 +117,16 @@ export interface ModelUnavailable {
117
117
  */
118
118
  export declare function selectableCatalog<M>(models: Record<string, M>, tiers: Record<string, string> | undefined, refusals: Readonly<Record<string, ModelEntryRefusal>> | undefined): Record<string, M>;
119
119
  /**
120
- * S-704 —— ref(name 或上游 id)→ 它命中的**不可用条目**;未命中 ⇒ undefined。与 {@link matchCatalogModel} 同一种双键
120
+ * [ref] —— 选择面**认**、目录行(`GET /v1/models` 的 `models[]`,即 `models` 里 `default` 以外的键)**不列名**的词:`default` 别名(服务表有缺省才在)、
121
+ * 增广铸出的档位词 / CC 别名 / `best`(按部署绑定如实)、以及按上游 id 认的写法。成员资格**由受理口自己的判官定**:候选 = `selectable` 的键与其中条目的 id,
122
+ * 逐个问 {@link matchCatalogModel}(`body.model` 门调的就是它;门在它之前只先判「非空串」,空串在这里同样不算)—— 判官认 ⇒ 列,不认 ⇒ 不列。本仓不写词表,也不在读面另写一份匹配规则(名先于 id、
123
+ * 不可用条目的名字不按 id 解、`default` 键不参与 id 扫描,全在判官里):判官怎么改,读面跟着变。
124
+ * `selectable` 必须是同一份配置上 {@link selectableCatalog} 的产物(读面把可点性判定用的那一只同一个对象传进来:一张表,两个读数)。
125
+ * 序 = 键在前(可选目录键序)、id 在后(条目序),去重;确定性,消费方按集合读。
126
+ */
127
+ export declare function selectableAliasNames(models: Record<string, unknown>, selectable: Record<string, unknown>, refusals: Readonly<Record<string, ModelEntryRefusal>> | undefined): string[];
128
+ /**
129
+ * [ref] —— ref(name 或上游 id)→ 它命中的**不可用条目**;未命中 ⇒ undefined。与 {@link matchCatalogModel} 同一种双键
121
130
  * 索引(name 用 `Object.hasOwn`,id 扫值)。调用方**先**查可用目录、再查这里(一个 id 被可用与不可用条目共享时,可用那条胜)。
122
131
  */
123
132
  export declare function refusedCatalogEntry(ref: string, refusals: Readonly<Record<string, ModelEntryRefusal>> | undefined): {
@@ -148,7 +157,7 @@ export interface ModelNotAllowed {
148
157
  * 可用目录收窄成目录名(settings-schema `narrowAtMention`),名单项是档位词 / 别名 / id 的形只可能来自绕过 stage 的写者 —— 它们准不了任何东西。
149
158
  * 🔴 **刻意没有「id 相等」退路**(codex 复审 R1 [high]):目录**允许两条不同 name 的条目共享同一个上游 `Model.id`,却各自带不同的
150
159
  * `baseUrl` / `apiKeyEnv` / `cost` / provider** —— 按 id 判同会把 `safe` 与 `premium` 合并,一张只含 `safe` 的名单会放行 `premium`。
151
- * 🔴 S-704:名里写着一条**不可用**条目的名字 ⇒ 它准不了任何东西(不经 id 回退 / 别名改绑去准另一只模型 —— `matchCatalogModel` 的名字保留律)。
160
+ * 🔴 [ref]:名里写着一条**不可用**条目的名字 ⇒ 它准不了任何东西(不经 id 回退 / 别名改绑去准另一只模型 —— `matchCatalogModel` 的名字保留律)。
152
161
  * `only` 的名在 stage 期已按本世代可用目录收窄过(settings-schema `narrowAtMention`,收窄到一个不剩 ⇒ `none`),所以这里的悬空名只来自绕过 stage 的写者(按名直比,悬空名不等于任何条目的名)。
153
162
  *
154
163
  * ⚠️ 射程:本门是**提交时**门。core 运行时路由(degrade 降级链 / cascade 梯 / roles 解析)按 operator 配置自己走,**不经本门**。
@@ -169,7 +178,7 @@ export declare function terminalCatalogName(ref: string, catalog: Record<string,
169
178
  * 索引下是真值,会跳过 allow-list——沿袭原实现的纪律)。
170
179
  * - id 命中扫目录值(`Model.id`),跳过 "default" 别名键(它与其指向的真身共享 id,解析到别名会让 /model
171
180
  * 面板与实际路由再度撕裂);同 id 多 name 时取目录序第一个(与 /v1/models 列表序一致,确定性)。
172
- * - 🔴 S-704(codex 验修轮 V1):**名字先于 id** 这条序对不可用条目同样成立 —— `refusals` 里的名字是一条已发布
181
+ * - 🔴 [ref](codex 验修轮 V1):**名字先于 id** 这条序对不可用条目同样成立 —— `refusals` 里的名字是一条已发布
173
182
  * 条目的名字,它不在可用目录里时**不许**被 id 回退解析成另一条可用条目(v7.100.0 那条条目在目录里,name 命中先返回
174
183
  * 它自己)。命中保留名 ⇒ undefined,调用方接着问 {@link refusedCatalogEntry} 拿拒因码。
175
184
  */
@@ -67,6 +67,11 @@ export function selectableCatalog(models, tiers, refusals) {
67
67
  delete out[n];
68
68
  return out;
69
69
  }
70
+ export function selectableAliasNames(models, selectable, refusals) {
71
+ const candidates = new Set([...Object.keys(selectable), ...Object.values(selectable).map((m) => m?.id)]);
72
+ const rowNamed = (w) => w !== DEFAULT_MODEL_REF && Object.hasOwn(models, w);
73
+ return [...candidates].filter((w) => typeof w === "string" && w.length > 0 && !rowNamed(w) && matchCatalogModel(w, selectable, refusals) !== undefined);
74
+ }
70
75
  export function refusedCatalogEntry(ref, refusals) {
71
76
  if (refusals === undefined)
72
77
  return undefined;
@@ -1,12 +1,12 @@
1
1
  /**
2
- * S-925(7.108.0;test [ref] ② 用户报案分诊,验收 `srv7108-s925-connect-timeout-diagnostic`)—— **模型调用因建连失败终态**时
2
+ * [ref](7.108.0;test [ref] ② 用户报案分诊,验收 `srv7108-s925-connect-timeout-diagnostic`)—— **模型调用因建连失败终态**时
3
3
  * 给这条腿的用户铸的通告 `server.model_unreachable` 的**唯一铸点**,与把它挂到每一次模型调用上的 brain 装饰器。
4
4
  *
5
5
  * ## 病
6
6
  * 运营用户看不到日志 / 诊断面:VPN 中途切换之后模型网关建连超时,用户只拿到一句 undici 原句(`fetch failed (connect …)`),
7
7
  * 分不清是网络断了还是起服时读进的代理已经失效,也没有「查 VPN / 代理、代理变过就重启」这条出路。只落运维日志不算闭环
8
- * (test 立案原话)。core 没有现成的「模型不可达」用户通告码 ⇒ 本仓铸,走既有的本仓铸码族(S-690 形:白名单 / 归属 / 消毒 / 隔离四件判据
9
- * 一个不绕),不开第二条通道。core 7.38.0(#1240)起本码在 core 码册里:受众 `NOTICE_AUDIENCE` = user、铸者 `NOTICE_MINTER` = `"server"`。
8
+ * (test 立案原话)。core 没有现成的「模型不可达」用户通告码 ⇒ 本仓铸,走既有的本仓铸码族([ref] 形:白名单 / 归属 / 消毒 / 隔离四件判据
9
+ * 一个不绕),不开第二条通道。core 7.38.0([ref])起本码在 core 码册里:受众 `NOTICE_AUDIENCE` = user、铸者 `NOTICE_MINTER` = `"server"`。
10
10
  *
11
11
  * ## 判据(一句):**这一次模型调用的终局是 `stopReason: "error"`,且它发出的最后一条请求在建连时就失败了**
12
12
  * 「最后一条请求落在哪」由出网观察者记在调用作用域上(`model-reach-scope.ts`,undici 诊断通道,见 `outbound-dispatcher.ts`)——
@@ -2,7 +2,7 @@
2
2
  * 规则里的工具名**够不够得着**一只挂载工具 —— 判官只有一个:引擎的 `judgeRuleToolName`。本文件只剩「规则文本里工具名那一段怎么取」与「判词怎么说」。
3
3
  *
4
4
  * 一个名字永远匹配不到工具的成因,全是引擎判官的判词(`retired` / `unprefixed_namespace` / `unmintable_segment`,带 `guidance` 与 1:1 `currentName`):
5
- * 退役名、无协议前缀的 `__` 短名、协议名的对端段引擎铸不出(`mcp__github.com__*`、`mcp__*`、`mcp____x`、`mcp__`),以及(core 7.48.0 #1400 起)
5
+ * 退役名、无协议前缀的 `__` 短名、协议名的对端段引擎铸不出(`mcp__github.com__*`、`mcp__git*`、`mcp____x`、`mcp__`),以及(core 7.48.0 [ref] 起)
6
6
  * **工具段为空**(`mcp__srv__` / `a2a__peer__`)。最后这一形 7.116.0–7.122.x 是本仓自答的(引擎判官当时答 `current`);引擎给了判词 ⇒ 本仓那一问
7
7
  * (本文件那只判与它在会话规则写口、SQL 店写口、四张条目表上的调用)退役,零双读。
8
8
  *
@@ -12,13 +12,13 @@
12
12
  * (名册 = {@link TOOL_NAME_ROSTER};判官判非现役的条目读成 `tool_name`,名册里有的只差大小写读成 `near_miss`)。
13
13
  * **不调它的面**:`/v1/rules` 的持久规则写口与 `cc-import` 导入口(`http/routes/rules.ts`、`rules-consent.ts` 与两只持久规则店零判官调用)—— 如实未接,
14
14
  * 在那里写铸不出的服务器段仍被收下、永不命中;把它接上判官 = 另一件事(`unmatchableRuleNameOf` 就是现成的那一只)。
15
- * 子代的工具名表 `agents[].allowTools` / `denyTools` 不是本文件的面:core 7.45.0 #1377 / #1385 起名字归引擎在开跑前一只判(三来源同判,`spec-fields.ts`
15
+ * 子代的工具名表 `agents[].allowTools` / `denyTools` 不是本文件的面:core 7.45.0 [ref] / [ref] 起名字归引擎在开跑前一只判(三来源同判,`spec-fields.ts`
16
16
  * 受理口只判形与条数),本仓不对它另做对照。
17
17
  * **精确名的工具段归一不在这里判**:包根没有导出工具段的铸法,不手抄 —— 精确名的工具段按字面收,本仓每张表上都不判它。
18
18
  *
19
19
  * 规则文本里「工具名那一段」怎么取也只有一种读法:{@link ruleEntryToolName}(配置表读它)。
20
20
  */
21
- import { type RuleToolNameVerdict } from "@sema-agent/core";
21
+ import { type PermissionRule, type RuleToolNameVerdict } from "@sema-agent/core";
22
22
  /**
23
23
  * 一条**规则文本**里的工具名那一段(判官与旧名判据的主语)= core 包根 `parsePermissionRule` 的 `toolName`,原样 —— 引擎的技能编译器
24
24
  * (`compileSkillGrant`)与规则编译器读条目用的就是这一只:`Bash(npm:*)` ⇒ `Bash`;`mcp__srv(*)` / `mcp__srv()` / 带首尾空格的 `mcp__srv ` ⇒ 光杆名 `mcp__srv`。
@@ -39,8 +39,18 @@ export declare const TOOL_NAME_ROSTER: ReadonlySet<string>;
39
39
  export type UnmatchableRuleName = Exclude<RuleToolNameVerdict, {
40
40
  kind: "current";
41
41
  }>;
42
- /** 判:引擎判官非 `current` ⇒ 原样交回;`current` ⇒ `undefined`。 */
43
- export declare function unmatchableRuleNameOf(name: string): UnmatchableRuleName | undefined;
42
+ /**
43
+ * **运维名表的态度** —— 一个常量,判官与匹配器同读(core 7.55.0 [ref])。本仓的名表消费者(env `APPROVAL_REQUIRE` / `APPROVAL_DENY` / `APPROVAL_NEVER_AUTO`、
44
+ * 中心下发的 `approvalRequire`、请求 `settings.permissions` 的 neverAuto 座)全是**限制表**(要求审批 / 硬拦 / 禁自动答):引擎对一个名字在限制表里的读法
45
+ * (`judgeRuleToolName(name, 名册, behavior)` 收不收、`isNamespacedCoveringRuleName(name, behavior)` 够着哪些工具)只分「限制 / 放行」两侧 —— 整个协议的名字
46
+ * `mcp__*` / `mcp__*__*` 在 deny 与 ask 里同读成这一协议的每一只工具。受理口的判(`config.ts`)与运行期的匹配(`approval.ts`)读同一个态度,一张表不会一边收、一边什么也不拦。
47
+ */
48
+ export declare const NAME_TABLE_BEHAVIOR: "deny";
49
+ /**
50
+ * 判:引擎判官**按这张表的态度**判这个名字,非 `current` ⇒ 原样交回;`current` ⇒ `undefined`。`behavior` 必填 —— 同一个名字在限制表与放行表里是两种读法
51
+ * (core 7.55.0 [ref]:`mcp__*` 在 deny / ask 里是这一协议的每一只工具、在 allow 里什么也不是),漏传态度的调用点是编译错,不是一条静默的「不带态度」读法。
52
+ */
53
+ export declare function unmatchableRuleNameOf(name: string, behavior: PermissionRule["behavior"]): UnmatchableRuleName | undefined;
44
54
  /**
45
55
  * 判词 → 「为什么永远匹配不到 + 怎么写」(不复述条目本身 —— 调用方的句子已点名它)。引擎判词的 `guidance` 原样带出,是改法指引的**唯一**一句
46
56
  * (本仓不在后面追加 1:1 现名:通配名上那个现名是摘要名或更窄的写法,照写不生效;现名过境给机器读的位,如会话规则拒体顶层的 `currentName`);
@@ -5,8 +5,9 @@ export function ruleEntryToolName(entry) {
5
5
  return parsePermissionRule(entry).toolName;
6
6
  }
7
7
  export const TOOL_NAME_ROSTER = new Set([...catalogToolNames(), ...HOST_TOOL_NAMES]);
8
- export function unmatchableRuleNameOf(name) {
9
- const verdict = judgeRuleToolName(name, TOOL_NAME_ROSTER);
8
+ export const NAME_TABLE_BEHAVIOR = "deny";
9
+ export function unmatchableRuleNameOf(name, behavior) {
10
+ const verdict = judgeRuleToolName(name, TOOL_NAME_ROSTER, behavior);
10
11
  return verdict.kind === "current" ? undefined : verdict;
11
12
  }
12
13
  export function describeUnmatchableRuleName(v, name) {
@@ -9,7 +9,7 @@ import type { Logger } from "./logger.js";
9
9
  * @param event warn 事件名。**留在调用点**:它是那只店的身份,接线锚(test/roster-corrupt-read.test.ts)
10
10
  * 正是靠「构造实参里能读到这个名字」来证明座不是个空回调。
11
11
  * @param note 这张脸的后果句(可选)。缺席 ⇒ 不写这个键。
12
- * @param leg 与披露**同拍**的一条附加腿(可选;S-612 加):座拿到一次披露时先交给它、再写日志。唯一的用户是
12
+ * @param leg 与披露**同拍**的一条附加腿(可选;[ref] 加):座拿到一次披露时先交给它、再写日志。唯一的用户是
13
13
  * `LocalSessionStore` 那只 `FileSessionRepo` 的座 —— 会话打开作用域的计数腿(`noteReplayInSessionOpenScope`:
14
14
  * 作用域在场时把 `replay` 计数记到那次打开上,由打开方铸 `session.records_skipped`)。腿**必须不抛**(那一只是纯内存
15
15
  * 赋值);先腿后日志,是因为日志座可能坏(core 的 guard 会吞掉它的抛),而一次日志故障不许吃掉这一记。
@@ -17,7 +17,7 @@ import type { Logger } from "./logger.js";
17
17
  */
18
18
  export declare function createCorruptReadSeat(warn: Logger["warn"], event: string, note?: string, leg?: (info: FileStorageCorruptReadInfo) => void): (info: FileStorageCorruptReadInfo) => void;
19
19
  /**
20
- * 铸一只 **F 类**腐读座(S-990):同一份 core 披露载荷,按 F 类座纪律处置 —— 每命中 `recordFailOpen(tag, 明细)`
20
+ * 铸一只 **F 类**腐读座([ref]):同一份 core 披露载荷,按 F 类座纪律处置 —— 每命中 `recordFailOpen(tag, 明细)`
21
21
  * (计数逐次 + 探针行逐次 + warn 每进程每 tag 一次;三件套的节流粒度见 `fail-open.ts` 模块头)。
22
22
  *
23
23
  * ## 什么算一次命中
@@ -25,7 +25,7 @@ export declare function createCorruptReadSeat(warn: Logger["warn"], event: strin
25
25
  * · `record` —— 一条被跳过的记录:**一次命中**,明细进探针行(会话 / 行号 / 坏体形 / 原因);
26
26
  * · `file` —— 整个文件 / 目录读不出:**一次命中**(同一 tag,明细里 `kind=file`);
27
27
  * · `replay` —— 同一批 `record` 的**汇总**(跳过 ≥1 条的每次读恰一发):**不计、不 warn** —— 计它就是把一条坏行记两次
28
- * (S-616 的教训)。汇总的两个实数给了用户面(`leg` 腿 → `session.records_skipped` 帧),运维面逐条明细都在探针里。
28
+ * ([ref] 的教训)。汇总的两个实数给了用户面(`leg` 腿 → `session.records_skipped` 帧),运维面逐条明细都在探针里。
29
29
  *
30
30
  * ## 为什么 warn 里不再逐条
31
31
  * 修前每命中一行 warn(本座的 `warn` 参数形):一份有 113 行读不出的存档,一次列表 + 一次查看 = 342 行,存档没修好每读再发 ——
@@ -39,12 +39,12 @@ export declare function createCorruptReadSeat(warn: Logger["warn"], event: strin
39
39
  export declare function createCorruptReadFailOpenSeat(tag: FailOpenTag, leg?: (info: FileStorageCorruptReadInfo) => void): (info: FileStorageCorruptReadInfo) => void;
40
40
  /**
41
41
  * 铸 `FileStorageBackend` 的**多脸**腐读座 `file_store_corrupt_read`(HTTP 服务的 local 腿与 run-local 共用 —— 修前两处铸点各手抄一遍 `createCorruptReadSeat(…)`
42
- * + 后果句,S-999 收成这一个)。
42
+ * + 后果句,[ref] 收成这一个)。
43
43
  *
44
44
  * ## 逐命中响亮不降级
45
- * 这一座里有安全轴的脸(session-policy),所以每命中一行 warn 保留(降成「每进程一次」是降级,S-990 的裁定);**在此之上**,认出的脸另记账:
45
+ * 这一座里有安全轴的脸(session-policy),所以每命中一行 warn 保留(降成「每进程一次」是降级,[ref] 的裁定);**在此之上**,认出的脸另记账:
46
46
  * · session-policy 脸 ⇒ `P-DEBT` tag(`server.session-policy.corrupt-read-fail-open`)—— 计数逐次 + 探针行 + 一次性 warn。core 7.39.2 起按键读拒;
47
- * core 7.41.0 #1309 起本会话的枚举拒、别的会话的抹除不动它、重绑带走它 —— 但只对**有归属**的坏行(行里的 `__sid`,否则同名高水位标记的 `__sid`);
47
+ * core 7.41.0 [ref] 起本会话的枚举拒、别的会话的抹除不动它、重绑带走它 —— 但只对**有归属**的坏行(行里的 `__sid`,否则同名高水位标记的 `__sid`);
48
48
  * 无归属的坏行仍按「无规则」(会话规则只许收紧 ⇒ 丢的恰是收紧);座上分不出读法 ⇒ 这一脸每一发都计(含已拒的)。
49
49
  * 抹除扫走无归属坏行那一形 core 是否披露、座上数不数得到,本车未亲核(未闭环,收车档登)。放行是 core 的裁定、本仓不包层(源头修复纪律),所以**只登债、不改放行**;
50
50
  * · 其余脸 ⇒ 不计(见 {@link DurableAbsenceFace})。
@@ -80,7 +80,7 @@ type JsonlReplaySeatEntry = {
80
80
  } | {
81
81
  readonly direction: "fail-open";
82
82
  /**
83
- * 逐条计数的 F 类 tag(`fail-open.ts` 闭集词表;普查表 §1 有登记行)。S-1000:fail-open 座**没有 warn 出口** —— 披露 = `recordFailOpen` 三件套
83
+ * 逐条计数的 F 类 tag(`fail-open.ts` 闭集词表;普查表 §1 有登记行)。[ref]:fail-open 座**没有 warn 出口** —— 披露 = `recordFailOpen` 三件套
84
84
  * (计数逐次 + 探针行逐次 + warn 每进程每 tag 一次),后果句住 tag 的 `note`;所以这里不再有 `event` / `note`(修前是逐条 warn 的事件名与后果句)。
85
85
  */
86
86
  readonly tag: FailOpenTag;
@@ -185,7 +185,7 @@ export declare class JsonlStoreCorruptError extends Error {
185
185
  constructor(seat: FailClosedJsonlSeat, path: string, reason: string);
186
186
  }
187
187
  /**
188
- * 一个 fail-closed 文件的**损坏闸**(原 `permission-rule-store-file.ts` 的 `CorruptionGate`,S-582 收进属主)。
188
+ * 一个 fail-closed 文件的**损坏闸**(原 `permission-rule-store-file.ts` 的 `CorruptionGate`,[ref] 收进属主)。
189
189
  * 置位之后,店的每一个判决 / 追加方法第一行 {@link assertUsable} 即响亮拒 —— 一份不完整的授权账既不能用来
190
190
  * 判决,也不能在它上面继续追加(追加只会让下一次重启读到同样残缺的历史)。
191
191
  * 只是一只闩:披露由属主在跳闸那一刻经腐读座发出(逐条记录 + 计数),闸本身不再说第二遍。
@@ -213,7 +213,7 @@ export declare function replayJsonlGuarded<T>(path: string, seat: FailClosedJson
213
213
  * **fail-open** 座的重放:坏行 ⇒ 跳过 + 逐条 `recordFailOpen(<登记的 F tag>, 明细)`(明细 = `kind=record path= line= form= reason=`,与 core 披露同形);
214
214
  * `skipped` = 跳过的条数(撕尾不计 —— core 按设计不报它)。读错(非 ENOENT)照 core 原样抛。
215
215
  *
216
- * 🔴 **没有 `warn` 形参**(S-1000,硬删、零别名):F 座的披露就是 `recordFailOpen` 三件套(计数逐次 + 探针行逐次 + warn 每进程每 tag 一次);
216
+ * 🔴 **没有 `warn` 形参**([ref],硬删、零别名):F 座的披露就是 `recordFailOpen` 三件套(计数逐次 + 探针行逐次 + warn 每进程每 tag 一次);
217
217
  * 修前这里还按 `warn` 对每条坏记录再发一行,一份 113 行坏账本 = 114 行 warn + 一条 F 座的 warn,与「F 座 warn 一次」差一项。
218
218
  */
219
219
  export declare function replayJsonlSkipping<T>(path: string, seat: FailOpenJsonlSeat, shape: JsonlRecordShape<T>): {
@@ -42,7 +42,7 @@ export interface InfraCostBreakdown {
42
42
  totalMicroUsd: number;
43
43
  }
44
44
  /**
45
- * Core's LLM-family breakdown — core's own `TaskResult.stats.costBreakdown` type, accepted read-only for composition (S-1687: not a hand-copied
45
+ * Core's LLM-family breakdown — core's own `TaskResult.stats.costBreakdown` type, accepted read-only for composition ([ref]: not a hand-copied
46
46
  * mirror — core 7.52.0 added the `sideCallMicroUsd` "of which" line and a copy would have missed it). Its partition lines add up to core's
47
47
  * `costMicroUsd`; `sideCallMicroUsd` (the classifier's and mods' model calls) is an "of which" line INSIDE `llmRootMicroUsd`, never added to them.
48
48
  */
@@ -1,5 +1,5 @@
1
1
  /** 把任意 rejection 值变成**一定能得到的字符串**——终局链(setTerminal 的 errorMessage 座、留痕腿)专用。
2
- * S-107 codex r28/r31 + 第三十一/三十二轮重扫:rejection 值可以是 message getter / toString / Symbol.toPrimitive 会抛的对象,
2
+ * [ref] codex r28/r31 + 第三十一/三十二轮重扫:rejection 值可以是 message getter / toString / Symbol.toPrimitive 会抛的对象,
3
3
  * 或 `Error` 实例的 message getter 返回带会抛 length getter 的非字符串——裸写 `e instanceof Error ? e.message : String(e)`
4
4
  * 在 catch 里自己抛,外层 catch 吞掉 setTerminal ⇒ run 卡 running、claim 悬挂到 reaper。这里**不抛、恒返字符串**。 */
5
5
  export declare function errorText(e: unknown): string;
@@ -165,7 +165,15 @@ export declare const FAIL_OPEN_TAGS: {
165
165
  };
166
166
  readonly "server.rule-offers.uncovered-detail-dropped": {
167
167
  readonly cls: "F";
168
- readonly note: "design/382 §3.5(S-44):batch offer 的 `uncoveredDetail` 明细座形不合(集外 reason / 非数组 / 行数与 count 座不等 / 超 MAX_UNCOVERED_DETAIL_ROWS)⇒ 只丢这一座、batch 本体照投。放行的最坏后果 = 卡上少几行「这段为什么还会问」的解释(count 座仍在,core 契约明写明细缺席不是断言);把整只 batch 判假才是错的方向(一只真可兑的合取批从卡上消失)。纯展示轴 ⇒ F 类;必须留痕,否则上游明细座漂形在遥测里零痕迹。";
168
+ readonly note: "design/382 §3.5(S-44;core 7.55.0 #1468 P1 阶段二起读者是 core `readRuleOffers`,经 `approval-card.ts` 的 `readRuleOfferList`,两条腿同调):batch offer 的 `uncoveredDetail` 明细座不是「每个计数段一行良构行」(集外 reason / 非数组 / 行数与 count 座不等 —— core 读者判丢、读数带 `uncoveredDetailDropped`)或行数超本仓展示帽 MAX_UNCOVERED_DETAIL_ROWS ⇒ 只丢这一座、batch 本体照投。放行的最坏后果 = 卡上少几行「这段为什么还会问」的解释(count 座仍在,core 契约明写明细缺席不是断言);把整只 batch 判假才是错的方向(一只真可兑的合取批从卡上消失)。纯展示轴 ⇒ F 类;必须留痕,否则上游明细座漂形在遥测里零痕迹。detail = `index=<core 列表里的下标>` + 丢的缘由(不带段文本)。";
169
+ };
170
+ readonly "server.checkpoint.inbox-risk-axes-damaged": {
171
+ readonly cls: "F";
172
+ readonly note: "core 7.55.0 `summarizeCheckpoint` 的第二参(`plugins/checkpoint-store-sql.ts` 的 `listByScope`:supervisor inbox / 调度视图的按 scope 待决投影):一行审批门的风险描述符读穿了一格坏轴 —— `axes` 不是普通对象,或某个标记(`egress` / `irreversible` / `shell`)在场却不是布尔(手改 / 第三方写者;引擎铸的行没有这一形)⇒ 行照投,`severity` 取有效标记给出的下界,证不出就缺席;core 交一句话给店的座,本座逐行计一次。放行的最坏后果 = 这一行在按 severity 倒排的 inbox 里排位偏低或无档(分诊材料,不是门;resume 的判据不读它)。不放行的代价是一行坏描述符打掉整个 scope 的 inbox(修前:非对象描述符抛 TypeError 出投影)。修前不传座 ⇒ 降档是静默的。detail = core 的句子(按 checkpoint id 与会话 JSON 点名、按形说成员,不带令牌、不带值);每次列 inbox 都会再说一次,直到那一行被修或被决。LOCAL 车道的同一句经 backend 的 `file_store_corrupt_read` 座(core File 店自带),不走本 tag。";
173
+ };
174
+ readonly "server.rule-offers.offer-dropped": {
175
+ readonly cls: "F";
176
+ readonly note: "core 7.55.0 #1468 P1 阶段二(`approval-card.ts` 的 `readRuleOfferList`,规则提议列表的唯一读者,判官 = core `readRuleOffers`;两条腿同调 —— 耐久腿 `checkpoint-store-sql.ts` `boundedRuleOffers`:铸行落列、回读列、LOCAL 孪生读寄存行;同步腿 `tool-approval.ts` `boundRuleOfferTexts`:活 ask 的 `AskRequest.ruleOffers`):一个元素读不出(`unknown_word`:offer / 成员的 `kind`、`match` 是本引擎不认的词 —— 更新的铸者或别的写者;`malformed`:不是对象、成员缺位或错型、空 batch、计数不是非负安全整数)⇒ 这一只整只丢(batch 不拆成员)、兄弟照投;整只值在场却不是列表(`not_an_array`)⇒ 这一行无供给。逐元素计。放行的最坏后果 = 卡上少一个「不再询问」选项(人仍可逐次批;少的是选项不是门 —— 渲出一个读不懂的选项、或少一个成员的合取批,才是错的方向)。修前耐久腿丢元素是静默的,同步腿走一行 logger warn(`rule_offer_dropped_unreadable_shape`,随之退役)。计数非零 = 有 offer 列表的形本引擎读不懂:上游版本领先(core 加了词)或库里的行被手改过。detail = `index=<下标> problem=<RULE_OFFER_SHAPE_PROBLEMS 的词>`(不带 offer 文本 —— 那是命令原文族)。";
169
177
  };
170
178
  readonly "server.rules.ticket-claim-release-failed": {
171
179
  readonly cls: "F";
@@ -181,7 +189,7 @@ export declare const FAIL_OPEN_TAGS: {
181
189
  };
182
190
  readonly "server.approvals.park-row-blob-unreadable": {
183
191
  readonly cls: "F";
184
- readonly note: "S-700(`plugins/checkpoint-store-sql.ts` 的 `readParkRowFactsCell`):运维待批队列(`GET /v1/approvals` / `/stream`)的某一行,`checkpoint` 列里寄存行的 **`pendingAction` 子树**(NP-3 / 7.100.0 起引擎内只取这一棵、整只快照不出库;只为 park 行事实 `requiresRealApproval` / `ruleOffersAbsence` / `mandated`(S-663 二段,core #1079)/ `mandate`(S-721)/ `origin`(S-755)而读 —— 事实位的真源是 `approval-card.ts` 的 `ParkRowFacts`)**在场却不是一只对象**(JSON `null` 字面 / 串 / 数 —— 手改 / 迁移脚本改过)。子树**缺席**(SQL NULL:成员不在,或整只文档不是对象 —— 后者 `get()` 照旧拒;MariaDB 文本承载上的非 JSON 字节同样答 SQL NULL)⇒ 事实缺席、不计数。放行的最坏后果 = **这一行**的 park 行事实(`ParkRowFacts` 各位)缺席(展示/分诊材料;core 定性 display metadata,resume 的带子读 gate 自己的位),队列其余部分照常 —— 而这一行本来就 resume 不了(`get()` 对同一格拒)。不放行的代价是整只 `rows.map` 抛出 ⇒ 一行坏 blob 打掉整个租户的队列(列表 500、SSE 心跳照常而队列永远空),与同一 `rows.map` 里 `rule_suggestions` / `risk_descriptor` 两格同族同判。故 F 类;tag 与那两格**分开计**(哪一格在坏要读得出来)。计数非零 = 这一行的 decide 同样读不动(`get()` 对同一格拒),去按 session 查那一行。 **第二座 `member=gate`**(`readParkGateCell`:同一列的 **`gate` 子树**在场却不是一只对象 —— 队列行的卡词与到期两条腿的分法都读它):读不出 = 门上无卡,队列行不带卡词,**到期改道** —— core `facetOf` 读「无卡 = 不是一问」为 `A`,所以一张本该到期**作废**的问答行改走 SLA **拒扫腿**(模型拿到一次「拒」而不是整条 run 作废);改道后的续跑 `get()` 对同一份坏 blob 响亮拒(拒扫腿每拍一条失败),行留停驻、由 `terminal_at_ms` 兜底收割 —— 所以最坏后果**不是**「只少展示」,是一张问答行的到期去向变了、最长挂到绝对上限。放行仍对:不放行的代价与 pendingAction 座同(一行坏 blob 打掉整个租户的队列与到期读腿)。计数 detail = `member=gate` 时,去按 session 查那一行的 `checkpoint.gate`。";
192
+ readonly note: "S-700(`plugins/checkpoint-store-sql.ts` 的 `readParkRowFactsCell`):运维待批队列(`GET /v1/approvals` / `/stream`)的某一行,`checkpoint` 列里寄存行的 **`pendingAction` 子树**(NP-3 / 7.100.0 起引擎内只取这一棵、整只快照不出库;只为 park 行事实 `requiresRealApproval` / `ruleOffersAbsence` / `mandated`(S-663 二段,core #1079)/ `mandate`(S-721)/ `origin`(S-755)而读 —— 事实位的真源是 `approval-card.ts` 的 `ParkRowFacts`)**在场却不是一只对象**(JSON `null` 字面 / 串 / 数 —— 手改 / 迁移脚本改过)。子树**缺席**(SQL NULL:成员不在,或整只文档不是对象 —— 后者 `get()` 照旧拒;MariaDB 文本承载上的非 JSON 字节同样答 SQL NULL)⇒ 事实缺席、不计数。放行的最坏后果 = **这一行**的 park 行事实(`ParkRowFacts` 各位)缺席(展示/分诊材料;core 定性 display metadata,resume 的带子读 gate 自己的位),队列其余部分照常 —— 而这一行本来就 resume 不了(`get()` 对同一格拒)。不放行的代价是整只 `rows.map` 抛出 ⇒ 一行坏 blob 打掉整个租户的队列(列表 500、SSE 心跳照常而队列永远空),与同一 `rows.map` 里 `rule_suggestions` / `risk_descriptor` 两格同族同判。故 F 类;tag 与那两格**分开计**(哪一格在坏要读得出来)。计数非零 = 这一行的 decide 同样读不动(`get()` 对同一格拒),去按 session 查那一行。 (`member=gate` 那第二座随 core 7.55.0 #1468 P1 阶段二退役:队列行的卡与到期分法改读 `approval_card` / `gate_kind` 两列 —— 写口与 M29 回填同一只派生落下的格 —— 本读面不再读 blob 的 `gate` 子树。)";
185
193
  };
186
194
  readonly "server.approvals.durable-row-checkpoint-id-missing": {
187
195
  readonly cls: "F";
@@ -435,13 +443,9 @@ export declare const FAIL_OPEN_TAGS: {
435
443
  readonly cls: "F";
436
444
  readonly note: "S-990(`plugins/local-session-store.ts` `createLocalSessionRepo` 的 `FileSessionRepo` 座,local 车道的会话存档;`LocalSessionStore` 与会话视图口 `audit.ts` 共用,S-879):一份会话存档里有记录读不出(整行毁 / 半截 JSON / 形不对,core 记成 `kind:\"record\"` 逐条披露)或存档文件 / 目录整体读不出(`kind:\"file\"`)⇒ core 的成文处置是跳过 + 披露,会话照常打开、列表少一行。最坏后果 = 模型读到的历史少了一截 / 列表静默少一份会话 —— 都是**可用性**损失,不开任何门;发起这一轮的人另有 wire 面披露(打开自己存档时的 `engine_notice` 码 `session.records_skipped`,与本 tag 无关、不动)⇒ F。**计数单位 = 一条被跳过的记录 = 一次命中**(`replay` 级是同一批记录的汇总,不计,S-616 同教训);**每命中一行探针**(`SEMA_FAILOPEN_PROBE`)带 `path` / `sessionId` / `line` / `form` / `reason` 逐条明细 —— 运维要看「哪份存档的哪一行坏了」读探针,不读本条 warn:本条是每进程每 tag 一次的告警(`detail` 是首条明细,不是全部)。修前:每命中一行 warn,一份 113 行坏记录的存档做一次列表 + 一次查看打出 342 行,存档没修好每读再发。";
437
445
  };
438
- readonly "server.workflow-journal.corrupt-record-skipped": {
439
- readonly cls: "F";
440
- readonly note: "S-990(`plugins/store-backend.ts` 的 `FileWorkflowJournalStore` 座,local 车道的 workflow 引擎 journal):一条 journal 记录读不出(core `kind:\"record\"` 逐条 / 文件级 `kind:\"file\"`)⇒ 跳过它继续。最坏后果 = resume 读到「无事可重放」于是把那一步**重跑**(S-569 钉的原话);journal 是重放材料,不是授权事实,不裁决任何放行 / 拒绝 ⇒ F。计数单位 = 一条被跳过的记录 = 一次命中;逐条明细(`path` / `line` / `form` / `reason`)进探针行(`SEMA_FAILOPEN_PROBE`),本条 warn 每进程每 tag 一次(`detail` = 首条明细)。修前:每命中一行 warn(事件名 `workflow_journal_corrupt_read`)。";
441
- };
442
446
  readonly "server.workflow-run.corrupt-record-skipped": {
443
447
  readonly cls: "F";
444
- readonly note: "S-990(`boot/workflow-orchestration.ts` 的 `FileWorkflowRunStore` 座,local 车道的 workflow run 账):一条 run 记录读不出 ⇒ 跳过。这本账是 at-least-once 完成通知的重放源:丢一行 ⇒ boot 恢复扫把那次 run 读成「没跑过」⇒ 把活重跑一遍(S-569 原注);run 账不裁决任何放行 / 拒绝 ⇒ F。计数 / 探针 / warn 的单位与 `server.workflow-journal.corrupt-record-skipped` 同。修前:每命中一行 warn(事件名 `workflow_run_corrupt_read`)。";
448
+ readonly note: "S-990(`boot/workflow-orchestration.ts` 的 `FileWorkflowRunStore` 座,local 车道的 workflow run 账):一条 run 记录读不出 ⇒ 跳过。这本账是 at-least-once 完成通知的重放源:丢一行 ⇒ boot 恢复扫把那次 run 读成「没跑过」⇒ 把活重跑一遍(S-569 原注);run 账不裁决任何放行 / 拒绝 ⇒ F。计数 / 探针 / warn 的单位与其余 S-990 F 座同(一条被跳过的记录 = 一次命中,明细进探针行,warn 每进程每 tag 一次)。修前:每命中一行 warn(事件名 `workflow_run_corrupt_read`)。";
445
449
  };
446
450
  readonly "server.roster.corrupt-record-skipped": {
447
451
  readonly cls: "F";
@@ -489,7 +493,7 @@ export declare const FAIL_OPEN_TAGS: {
489
493
  };
490
494
  readonly "server.workspace-cache.reclaim-failed": {
491
495
  readonly cls: "F";
492
- readonly note: "k8s 车道按工作区空间的构建缓存卷的**回收**(`plugins/remote-env-k8s.ts` `createSpaceReclaimer`;两条腿同一只回收座:会话删除协调器 `boot/session-faces.ts` `purgeSession` 与托管留存 sweep `boot/retention-lane.ts` 删掉会话树之后):按标签 `sema.space=<空间摘要>` 删卷的请求失败(Role 少 `deletecollection` / API 拒 / 网络,`reason=delete_failed`)、回收座这次调用的绝对截止(= 快照时限)先到(请求没发或在途被切,`reason=budget`),或在线腿删除前读不出被删会话的住客(`reason=occupant_unreadable`;化身缺席的存量行 = 没有空间,不计)⇒ 卷留着(住客读不出时该空间的快照对象也没回收,归桶的生命周期规则),会话照删(不挡删除)。放行的最坏后果 = 节点盘上多留一只没人再用的卷(存储泄漏,不碰任何别的空间、不是门不是凭据);反方向(删卷失败就拒删会话)会让一个缓存挡住删除权。同拍一行 `workspace_cache_reclaim_failed`(回收座的两形:`space` 前缀 / `label` / `reason` / `count` / `error` —— 一次调用里同 `reason` 的失败合成一行,`count` = 撞上它的空间数、其余键点名调用里排第一的那个,计数仍逐空间;住客读不出那一形:`sessionId` / `reason` / `error`)。计数非零 = 有卷没回收掉,运维按行里的标签手清,并核 Role。";
496
+ readonly note: "k8s 车道按工作区空间的构建缓存卷的**回收**(`plugins/remote-env-k8s.ts` `createSpaceReclaimer`;两条腿同一只回收座:会话删除协调器 `boot/session-faces.ts` `purgeSession` 与托管留存 sweep `boot/retention-lane.ts` 删掉会话树之后):按标签 `sema.space=<空间摘要>` 删卷的请求失败(Role 少 `deletecollection` / API 拒 / 网络,`reason=delete_failed`)、回收座这次调用的绝对截止(= 快照时限)先到(请求没发或在途被切,`reason=budget`)⇒ 卷留着,会话照删(不挡删除)。(在线腿的空间键取自删除围栏那一只头读 —— 同一读、同一代;此前另读一次住客、读不出另记 `reason=occupant_unreadable`,随那一读退役;化身缺席的存量行 = 没有空间,不计。)放行的最坏后果 = 节点盘上多留一只没人再用的卷(存储泄漏,不碰任何别的空间、不是门不是凭据);反方向(删卷失败就拒删会话)会让一个缓存挡住删除权。同拍一行 `workspace_cache_reclaim_failed`(回收座那一形:`space` 前缀 / `label` / `reason` / `count` / `error` —— 一次调用里同 `reason` 的失败合成一行,`count` = 撞上它的空间数、其余键点名调用里排第一的那个,计数仍逐空间)。计数非零 = 有卷没回收掉,运维按行里的标签手清,并核 Role。";
493
497
  };
494
498
  readonly "server.workspace-space.reclaim-failed": {
495
499
  readonly cls: "F";
@@ -146,7 +146,15 @@ export const FAIL_OPEN_TAGS = {
146
146
  },
147
147
  "server.rule-offers.uncovered-detail-dropped": {
148
148
  cls: "F",
149
- note: "design/382 §3.5(S-44):batch offer 的 `uncoveredDetail` 明细座形不合(集外 reason / 非数组 / 行数与 count 座不等 / 超 MAX_UNCOVERED_DETAIL_ROWS)⇒ 只丢这一座、batch 本体照投。放行的最坏后果 = 卡上少几行「这段为什么还会问」的解释(count 座仍在,core 契约明写明细缺席不是断言);把整只 batch 判假才是错的方向(一只真可兑的合取批从卡上消失)。纯展示轴 ⇒ F 类;必须留痕,否则上游明细座漂形在遥测里零痕迹。",
149
+ note: "design/382 §3.5(S-44;core 7.55.0 #1468 P1 阶段二起读者是 core `readRuleOffers`,经 `approval-card.ts` 的 `readRuleOfferList`,两条腿同调):batch offer 的 `uncoveredDetail` 明细座不是「每个计数段一行良构行」(集外 reason / 非数组 / 行数与 count 座不等 —— core 读者判丢、读数带 `uncoveredDetailDropped`)或行数超本仓展示帽 MAX_UNCOVERED_DETAIL_ROWS ⇒ 只丢这一座、batch 本体照投。放行的最坏后果 = 卡上少几行「这段为什么还会问」的解释(count 座仍在,core 契约明写明细缺席不是断言);把整只 batch 判假才是错的方向(一只真可兑的合取批从卡上消失)。纯展示轴 ⇒ F 类;必须留痕,否则上游明细座漂形在遥测里零痕迹。detail = `index=<core 列表里的下标>` + 丢的缘由(不带段文本)。",
150
+ },
151
+ "server.checkpoint.inbox-risk-axes-damaged": {
152
+ cls: "F",
153
+ note: "core 7.55.0 `summarizeCheckpoint` 的第二参(`plugins/checkpoint-store-sql.ts` 的 `listByScope`:supervisor inbox / 调度视图的按 scope 待决投影):一行审批门的风险描述符读穿了一格坏轴 —— `axes` 不是普通对象,或某个标记(`egress` / `irreversible` / `shell`)在场却不是布尔(手改 / 第三方写者;引擎铸的行没有这一形)⇒ 行照投,`severity` 取有效标记给出的下界,证不出就缺席;core 交一句话给店的座,本座逐行计一次。放行的最坏后果 = 这一行在按 severity 倒排的 inbox 里排位偏低或无档(分诊材料,不是门;resume 的判据不读它)。不放行的代价是一行坏描述符打掉整个 scope 的 inbox(修前:非对象描述符抛 TypeError 出投影)。修前不传座 ⇒ 降档是静默的。detail = core 的句子(按 checkpoint id 与会话 JSON 点名、按形说成员,不带令牌、不带值);每次列 inbox 都会再说一次,直到那一行被修或被决。LOCAL 车道的同一句经 backend 的 `file_store_corrupt_read` 座(core File 店自带),不走本 tag。",
154
+ },
155
+ "server.rule-offers.offer-dropped": {
156
+ cls: "F",
157
+ note: "core 7.55.0 #1468 P1 阶段二(`approval-card.ts` 的 `readRuleOfferList`,规则提议列表的唯一读者,判官 = core `readRuleOffers`;两条腿同调 —— 耐久腿 `checkpoint-store-sql.ts` `boundedRuleOffers`:铸行落列、回读列、LOCAL 孪生读寄存行;同步腿 `tool-approval.ts` `boundRuleOfferTexts`:活 ask 的 `AskRequest.ruleOffers`):一个元素读不出(`unknown_word`:offer / 成员的 `kind`、`match` 是本引擎不认的词 —— 更新的铸者或别的写者;`malformed`:不是对象、成员缺位或错型、空 batch、计数不是非负安全整数)⇒ 这一只整只丢(batch 不拆成员)、兄弟照投;整只值在场却不是列表(`not_an_array`)⇒ 这一行无供给。逐元素计。放行的最坏后果 = 卡上少一个「不再询问」选项(人仍可逐次批;少的是选项不是门 —— 渲出一个读不懂的选项、或少一个成员的合取批,才是错的方向)。修前耐久腿丢元素是静默的,同步腿走一行 logger warn(`rule_offer_dropped_unreadable_shape`,随之退役)。计数非零 = 有 offer 列表的形本引擎读不懂:上游版本领先(core 加了词)或库里的行被手改过。detail = `index=<下标> problem=<RULE_OFFER_SHAPE_PROBLEMS 的词>`(不带 offer 文本 —— 那是命令原文族)。",
150
158
  },
151
159
  "server.rules.ticket-claim-release-failed": {
152
160
  cls: "F",
@@ -162,7 +170,7 @@ export const FAIL_OPEN_TAGS = {
162
170
  },
163
171
  "server.approvals.park-row-blob-unreadable": {
164
172
  cls: "F",
165
- note: "S-700(`plugins/checkpoint-store-sql.ts` 的 `readParkRowFactsCell`):运维待批队列(`GET /v1/approvals` / `/stream`)的某一行,`checkpoint` 列里寄存行的 **`pendingAction` 子树**(NP-3 / 7.100.0 起引擎内只取这一棵、整只快照不出库;只为 park 行事实 `requiresRealApproval` / `ruleOffersAbsence` / `mandated`(S-663 二段,core #1079)/ `mandate`(S-721)/ `origin`(S-755)而读 —— 事实位的真源是 `approval-card.ts` 的 `ParkRowFacts`)**在场却不是一只对象**(JSON `null` 字面 / 串 / 数 —— 手改 / 迁移脚本改过)。子树**缺席**(SQL NULL:成员不在,或整只文档不是对象 —— 后者 `get()` 照旧拒;MariaDB 文本承载上的非 JSON 字节同样答 SQL NULL)⇒ 事实缺席、不计数。放行的最坏后果 = **这一行**的 park 行事实(`ParkRowFacts` 各位)缺席(展示/分诊材料;core 定性 display metadata,resume 的带子读 gate 自己的位),队列其余部分照常 —— 而这一行本来就 resume 不了(`get()` 对同一格拒)。不放行的代价是整只 `rows.map` 抛出 ⇒ 一行坏 blob 打掉整个租户的队列(列表 500、SSE 心跳照常而队列永远空),与同一 `rows.map` 里 `rule_suggestions` / `risk_descriptor` 两格同族同判。故 F 类;tag 与那两格**分开计**(哪一格在坏要读得出来)。计数非零 = 这一行的 decide 同样读不动(`get()` 对同一格拒),去按 session 查那一行。 **第二座 `member=gate`**(`readParkGateCell`:同一列的 **`gate` 子树**在场却不是一只对象 —— 队列行的卡词与到期两条腿的分法都读它):读不出 = 门上无卡,队列行不带卡词,**到期改道** —— core `facetOf` 读「无卡 = 不是一问」为 `A`,所以一张本该到期**作废**的问答行改走 SLA **拒扫腿**(模型拿到一次「拒」而不是整条 run 作废);改道后的续跑 `get()` 对同一份坏 blob 响亮拒(拒扫腿每拍一条失败),行留停驻、由 `terminal_at_ms` 兜底收割 —— 所以最坏后果**不是**「只少展示」,是一张问答行的到期去向变了、最长挂到绝对上限。放行仍对:不放行的代价与 pendingAction 座同(一行坏 blob 打掉整个租户的队列与到期读腿)。计数 detail = `member=gate` 时,去按 session 查那一行的 `checkpoint.gate`。",
173
+ note: "S-700(`plugins/checkpoint-store-sql.ts` 的 `readParkRowFactsCell`):运维待批队列(`GET /v1/approvals` / `/stream`)的某一行,`checkpoint` 列里寄存行的 **`pendingAction` 子树**(NP-3 / 7.100.0 起引擎内只取这一棵、整只快照不出库;只为 park 行事实 `requiresRealApproval` / `ruleOffersAbsence` / `mandated`(S-663 二段,core #1079)/ `mandate`(S-721)/ `origin`(S-755)而读 —— 事实位的真源是 `approval-card.ts` 的 `ParkRowFacts`)**在场却不是一只对象**(JSON `null` 字面 / 串 / 数 —— 手改 / 迁移脚本改过)。子树**缺席**(SQL NULL:成员不在,或整只文档不是对象 —— 后者 `get()` 照旧拒;MariaDB 文本承载上的非 JSON 字节同样答 SQL NULL)⇒ 事实缺席、不计数。放行的最坏后果 = **这一行**的 park 行事实(`ParkRowFacts` 各位)缺席(展示/分诊材料;core 定性 display metadata,resume 的带子读 gate 自己的位),队列其余部分照常 —— 而这一行本来就 resume 不了(`get()` 对同一格拒)。不放行的代价是整只 `rows.map` 抛出 ⇒ 一行坏 blob 打掉整个租户的队列(列表 500、SSE 心跳照常而队列永远空),与同一 `rows.map` 里 `rule_suggestions` / `risk_descriptor` 两格同族同判。故 F 类;tag 与那两格**分开计**(哪一格在坏要读得出来)。计数非零 = 这一行的 decide 同样读不动(`get()` 对同一格拒),去按 session 查那一行。 (`member=gate` 那第二座随 core 7.55.0 #1468 P1 阶段二退役:队列行的卡与到期分法改读 `approval_card` / `gate_kind` 两列 —— 写口与 M29 回填同一只派生落下的格 —— 本读面不再读 blob 的 `gate` 子树。)",
166
174
  },
167
175
  "server.approvals.durable-row-checkpoint-id-missing": {
168
176
  cls: "F",
@@ -395,13 +403,9 @@ export const FAIL_OPEN_TAGS = {
395
403
  cls: "F",
396
404
  note: "S-990(`plugins/local-session-store.ts` `createLocalSessionRepo` 的 `FileSessionRepo` 座,local 车道的会话存档;`LocalSessionStore` 与会话视图口 `audit.ts` 共用,S-879):一份会话存档里有记录读不出(整行毁 / 半截 JSON / 形不对,core 记成 `kind:\"record\"` 逐条披露)或存档文件 / 目录整体读不出(`kind:\"file\"`)⇒ core 的成文处置是跳过 + 披露,会话照常打开、列表少一行。最坏后果 = 模型读到的历史少了一截 / 列表静默少一份会话 —— 都是**可用性**损失,不开任何门;发起这一轮的人另有 wire 面披露(打开自己存档时的 `engine_notice` 码 `session.records_skipped`,与本 tag 无关、不动)⇒ F。**计数单位 = 一条被跳过的记录 = 一次命中**(`replay` 级是同一批记录的汇总,不计,S-616 同教训);**每命中一行探针**(`SEMA_FAILOPEN_PROBE`)带 `path` / `sessionId` / `line` / `form` / `reason` 逐条明细 —— 运维要看「哪份存档的哪一行坏了」读探针,不读本条 warn:本条是每进程每 tag 一次的告警(`detail` 是首条明细,不是全部)。修前:每命中一行 warn,一份 113 行坏记录的存档做一次列表 + 一次查看打出 342 行,存档没修好每读再发。",
397
405
  },
398
- "server.workflow-journal.corrupt-record-skipped": {
399
- cls: "F",
400
- note: "S-990(`plugins/store-backend.ts` 的 `FileWorkflowJournalStore` 座,local 车道的 workflow 引擎 journal):一条 journal 记录读不出(core `kind:\"record\"` 逐条 / 文件级 `kind:\"file\"`)⇒ 跳过它继续。最坏后果 = resume 读到「无事可重放」于是把那一步**重跑**(S-569 钉的原话);journal 是重放材料,不是授权事实,不裁决任何放行 / 拒绝 ⇒ F。计数单位 = 一条被跳过的记录 = 一次命中;逐条明细(`path` / `line` / `form` / `reason`)进探针行(`SEMA_FAILOPEN_PROBE`),本条 warn 每进程每 tag 一次(`detail` = 首条明细)。修前:每命中一行 warn(事件名 `workflow_journal_corrupt_read`)。",
401
- },
402
406
  "server.workflow-run.corrupt-record-skipped": {
403
407
  cls: "F",
404
- note: "S-990(`boot/workflow-orchestration.ts` 的 `FileWorkflowRunStore` 座,local 车道的 workflow run 账):一条 run 记录读不出 ⇒ 跳过。这本账是 at-least-once 完成通知的重放源:丢一行 ⇒ boot 恢复扫把那次 run 读成「没跑过」⇒ 把活重跑一遍(S-569 原注);run 账不裁决任何放行 / 拒绝 ⇒ F。计数 / 探针 / warn 的单位与 `server.workflow-journal.corrupt-record-skipped` 同。修前:每命中一行 warn(事件名 `workflow_run_corrupt_read`)。",
408
+ note: "S-990(`boot/workflow-orchestration.ts` 的 `FileWorkflowRunStore` 座,local 车道的 workflow run 账):一条 run 记录读不出 ⇒ 跳过。这本账是 at-least-once 完成通知的重放源:丢一行 ⇒ boot 恢复扫把那次 run 读成「没跑过」⇒ 把活重跑一遍(S-569 原注);run 账不裁决任何放行 / 拒绝 ⇒ F。计数 / 探针 / warn 的单位与其余 S-990 F 座同(一条被跳过的记录 = 一次命中,明细进探针行,warn 每进程每 tag 一次)。修前:每命中一行 warn(事件名 `workflow_run_corrupt_read`)。",
405
409
  },
406
410
  "server.roster.corrupt-record-skipped": {
407
411
  cls: "F",
@@ -449,7 +453,7 @@ export const FAIL_OPEN_TAGS = {
449
453
  },
450
454
  "server.workspace-cache.reclaim-failed": {
451
455
  cls: "F",
452
- note: "k8s 车道按工作区空间的构建缓存卷的**回收**(`plugins/remote-env-k8s.ts` `createSpaceReclaimer`;两条腿同一只回收座:会话删除协调器 `boot/session-faces.ts` `purgeSession` 与托管留存 sweep `boot/retention-lane.ts` 删掉会话树之后):按标签 `sema.space=<空间摘要>` 删卷的请求失败(Role 少 `deletecollection` / API 拒 / 网络,`reason=delete_failed`)、回收座这次调用的绝对截止(= 快照时限)先到(请求没发或在途被切,`reason=budget`),或在线腿删除前读不出被删会话的住客(`reason=occupant_unreadable`;化身缺席的存量行 = 没有空间,不计)⇒ 卷留着(住客读不出时该空间的快照对象也没回收,归桶的生命周期规则),会话照删(不挡删除)。放行的最坏后果 = 节点盘上多留一只没人再用的卷(存储泄漏,不碰任何别的空间、不是门不是凭据);反方向(删卷失败就拒删会话)会让一个缓存挡住删除权。同拍一行 `workspace_cache_reclaim_failed`(回收座的两形:`space` 前缀 / `label` / `reason` / `count` / `error` —— 一次调用里同 `reason` 的失败合成一行,`count` = 撞上它的空间数、其余键点名调用里排第一的那个,计数仍逐空间;住客读不出那一形:`sessionId` / `reason` / `error`)。计数非零 = 有卷没回收掉,运维按行里的标签手清,并核 Role。",
456
+ note: "k8s 车道按工作区空间的构建缓存卷的**回收**(`plugins/remote-env-k8s.ts` `createSpaceReclaimer`;两条腿同一只回收座:会话删除协调器 `boot/session-faces.ts` `purgeSession` 与托管留存 sweep `boot/retention-lane.ts` 删掉会话树之后):按标签 `sema.space=<空间摘要>` 删卷的请求失败(Role 少 `deletecollection` / API 拒 / 网络,`reason=delete_failed`)、回收座这次调用的绝对截止(= 快照时限)先到(请求没发或在途被切,`reason=budget`)⇒ 卷留着,会话照删(不挡删除)。(在线腿的空间键取自删除围栏那一只头读 —— 同一读、同一代;此前另读一次住客、读不出另记 `reason=occupant_unreadable`,随那一读退役;化身缺席的存量行 = 没有空间,不计。)放行的最坏后果 = 节点盘上多留一只没人再用的卷(存储泄漏,不碰任何别的空间、不是门不是凭据);反方向(删卷失败就拒删会话)会让一个缓存挡住删除权。同拍一行 `workspace_cache_reclaim_failed`(回收座那一形:`space` 前缀 / `label` / `reason` / `count` / `error` —— 一次调用里同 `reason` 的失败合成一行,`count` = 撞上它的空间数、其余键点名调用里排第一的那个,计数仍逐空间)。计数非零 = 有卷没回收掉,运维按行里的标签手清,并核 Role。",
453
457
  },
454
458
  "server.workspace-space.reclaim-failed": {
455
459
  cls: "F",
@@ -28,7 +28,7 @@ export declare class Metrics {
28
28
  * needed). Counters are cumulative totals; histograms are reported as averages (sum/count). */
29
29
  summarize(): MetricsSummary;
30
30
  }
31
- /** S-451:`/metrics/summary` 上「失败最多的路由」保留几条。看板要的是**头部**,不是全表;
31
+ /** [ref]:`/metrics/summary` 上「失败最多的路由」保留几条。看板要的是**头部**,不是全表;
32
32
  * `routeLabel` 的值域本来就有界(路由声明表 + `"other"`),这个上限只是让这张脸的大小与路由表长解耦。 */
33
33
  export declare const HTTP_ERROR_ROUTE_TOP_N = 10;
34
34
  export interface MetricsSummary {
@@ -63,12 +63,12 @@ export interface MetricsSummary {
63
63
  cascade: Record<string, number>;
64
64
  verifications: Record<string, number>;
65
65
  toolErrors: Record<string, number>;
66
- /** S-451(additive,7.87.0):窗内 HTTP **失败**请求数,按状态码**类**聚合 —— 键只有 `"4xx"` / `"5xx"`
66
+ /** [ref](additive,7.87.0):窗内 HTTP **失败**请求数,按状态码**类**聚合 —— 键只有 `"4xx"` / `"5xx"`
67
67
  * 两种,2xx/3xx 一格不进。⚠️ `"4xx"` 里**含 `499`**(本仓给「客户端在响应结束前断连」铸的标签,
68
68
  * SSE 长连接上是常态)—— 看一场真风暴时按 {@link httpErrorsByRoute} 分辨是哪条腿。
69
69
  * 空对象 = 窗内零失败(与 `tasks`/`toolErrors` 同律:键恒在场,不用缺席表示零)。 */
70
70
  httpErrorsByClass: Record<string, number>;
71
- /** S-451(additive,7.87.0):失败(4xx+5xx 合计)最多的前 {@link HTTP_ERROR_ROUTE_TOP_N} 条 **route 标签**
71
+ /** [ref](additive,7.87.0):失败(4xx+5xx 合计)最多的前 {@link HTTP_ERROR_ROUTE_TOP_N} 条 **route 标签**
72
72
  * (`routeLabel` 的低基数形,id 已折成 `:id`;未命中路由表的落 `"other"`)。按计数降序。
73
73
  * 这是「180 次 404 到底打在哪」的那一格。 */
74
74
  httpErrorsByRoute: Record<string, number>;