@sema-agent/server 7.133.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 (526) hide show
  1. package/MIGRATION.md +221 -0
  2. package/README.md +2 -2
  3. package/README.zh-CN.md +2 -2
  4. package/USAGE.md +222 -36
  5. package/deploy/sema-up/README.md +16 -0
  6. package/deploy/sema-up/chart/Chart.yaml +1 -1
  7. package/deploy/sema-up/chart/templates/NOTES.txt +15 -0
  8. package/deploy/sema-up/chart/templates/_helpers.tpl +129 -0
  9. package/deploy/sema-up/chart/templates/sealed-key.yaml +24 -0
  10. package/deploy/sema-up/chart/templates/server-v4pro.yaml +14 -0
  11. package/deploy/sema-up/chart/templates/server.yaml +14 -0
  12. package/deploy/sema-up/chart/values-full-single.yaml +5 -1
  13. package/deploy/sema-up/chart/values.yaml +34 -0
  14. package/dist/adoption/plan.d.ts +1 -1
  15. package/dist/approval-ask-audit-store.d.ts +25 -25
  16. package/dist/approval-ask-machine.d.ts +2 -2
  17. package/dist/approval-card.d.ts +66 -154
  18. package/dist/approval-card.js +33 -52
  19. package/dist/approval-content-kind.d.ts +26 -6
  20. package/dist/approval-content-kind.js +23 -3
  21. package/dist/approval-deny-reasons.d.ts +1 -1
  22. package/dist/approval-gate-currency.d.ts +91 -0
  23. package/dist/approval-gate-currency.js +120 -0
  24. package/dist/approval-hmac.d.ts +7 -7
  25. package/dist/approval-policy-settlement.d.ts +2 -2
  26. package/dist/approval-reconciler.d.ts +3 -3
  27. package/dist/approval.d.ts +14 -8
  28. package/dist/approval.js +35 -16
  29. package/dist/auth-bridge.d.ts +1 -1
  30. package/dist/auto-mode-face.d.ts +4 -4
  31. package/dist/background-session-reap.d.ts +2 -2
  32. package/dist/bake-runner/main.d.ts +2 -2
  33. package/dist/bake-runner/runner.d.ts +4 -4
  34. package/dist/bench/s1/live-deps.d.ts +1 -1
  35. package/dist/bench/s1/run-firm.d.ts +1 -1
  36. package/dist/boot/coordinators.d.ts +7 -2
  37. package/dist/boot/coordinators.js +8 -5
  38. package/dist/boot/deferred-sandbox-path-env.d.ts +0 -6
  39. package/dist/boot/deferred-sandbox-path-env.js +0 -5
  40. package/dist/boot/engine-lease.d.ts +5 -5
  41. package/dist/boot/execution-env.d.ts +16 -15
  42. package/dist/boot/execution-env.js +19 -21
  43. package/dist/boot/fatal-exit.d.ts +2 -2
  44. package/dist/boot/late-binds.d.ts +1 -1
  45. package/dist/boot/leader.d.ts +2 -0
  46. package/dist/boot/leader.js +2 -1
  47. package/dist/boot/memory-boundary.d.ts +2 -2
  48. package/dist/boot/memory-consolidation.d.ts +15 -15
  49. package/dist/boot/parked-revive-gate.d.ts +3 -3
  50. package/dist/boot/parked-revive-gate.js +3 -2
  51. package/dist/boot/read-deny-anchor-audit.js +2 -2
  52. package/dist/boot/reapers.d.ts +4 -4
  53. package/dist/boot/resolve-spec.d.ts +1 -1
  54. package/dist/boot/resolve-spec.js +28 -24
  55. package/dist/boot/runner-deps.d.ts +29 -16
  56. package/dist/boot/runner-deps.js +12 -2
  57. package/dist/boot/session-faces.d.ts +3 -3
  58. package/dist/boot/session-faces.js +11 -30
  59. package/dist/boot/shutdown.d.ts +5 -5
  60. package/dist/boot/side-query-lane.d.ts +2 -2
  61. package/dist/boot/stage-05-execution-env.js +4 -4
  62. package/dist/boot/stage-06-runners.d.ts +4 -3
  63. package/dist/boot/stage-06-runners.js +15 -4
  64. package/dist/boot/stage-07-capability-layer.d.ts +2 -1
  65. package/dist/boot/stage-08-reapers.d.ts +2 -1
  66. package/dist/boot/stage-09-leader.d.ts +2 -1
  67. package/dist/boot/stage-09-leader.js +2 -2
  68. package/dist/boot/stage-10-http-server.d.ts +2 -1
  69. package/dist/boot/stage-10-http-server.js +2 -1
  70. package/dist/boot/stores.d.ts +8 -0
  71. package/dist/boot/stores.js +10 -13
  72. package/dist/boot/web-admin.d.ts +21 -15
  73. package/dist/boot/web-admin.js +16 -12
  74. package/dist/boot/workflow-orchestration.js +2 -9
  75. package/dist/brain.d.ts +11 -11
  76. package/dist/budget.d.ts +4 -4
  77. package/dist/budget.js +5 -1
  78. package/dist/caller-text-echo.d.ts +2 -0
  79. package/dist/caller-text-echo.js +2 -1
  80. package/dist/canonical-json.d.ts +2 -41
  81. package/dist/canonical-json.js +2 -13
  82. package/dist/capabilities/approvals-push.d.ts +4 -4
  83. package/dist/capabilities/builtin-tools.d.ts +5 -5
  84. package/dist/capabilities/center-plugins.d.ts +5 -5
  85. package/dist/capabilities/center-plugins.js +1 -1
  86. package/dist/capabilities/center-prompts.d.ts +1 -1
  87. package/dist/capabilities/center-wiring.d.ts +1 -1
  88. package/dist/capabilities/composite-members.d.ts +2 -2
  89. package/dist/capabilities/composite-members.js +1 -1
  90. package/dist/capabilities/execution-lane.d.ts +5 -5
  91. package/dist/capabilities/execution-lane.js +2 -2
  92. package/dist/capabilities/hands-lane.d.ts +5 -5
  93. package/dist/capabilities/mcp-probe.d.ts +10 -7
  94. package/dist/capabilities/mcp-probe.js +2 -2
  95. package/dist/capabilities/sandbox-file-send.d.ts +1 -18
  96. package/dist/capabilities/sandbox-file-send.js +0 -7
  97. package/dist/capabilities/scenarios.d.ts +28 -10
  98. package/dist/capabilities/scenarios.js +15 -5
  99. package/dist/capabilities/send-user-file-tool.d.ts +1 -1
  100. package/dist/capabilities/skills.d.ts +31 -12
  101. package/dist/capabilities/skills.js +23 -17
  102. package/dist/capabilities/tool-defer.d.ts +1 -1
  103. package/dist/capability-facts.d.ts +27 -24
  104. package/dist/capability-facts.js +18 -20
  105. package/dist/center-config-tier.d.ts +1 -1
  106. package/dist/center-credential.d.ts +4 -4
  107. package/dist/checkpoint-ctx-seal-m28.d.ts +42 -0
  108. package/dist/checkpoint-ctx-seal-m28.js +19 -0
  109. package/dist/checkpoint-identity.d.ts +5 -0
  110. package/dist/checkpoint-identity.js +14 -0
  111. package/dist/config-catalog.d.ts +12 -12
  112. package/dist/config-invariants.d.ts +4 -4
  113. package/dist/config-invariants.js +3 -2
  114. package/dist/config-lkg.d.ts +1 -1
  115. package/dist/config-provider.d.ts +13 -13
  116. package/dist/config-provider.js +2 -1
  117. package/dist/config-types.d.ts +83 -83
  118. package/dist/config.d.ts +26 -24
  119. package/dist/config.js +12 -10
  120. package/dist/cross-session-settings.d.ts +1 -1
  121. package/dist/delegated-session-owner.d.ts +16 -13
  122. package/dist/delegated-session-owner.js +9 -10
  123. package/dist/deployment-governance.d.ts +16 -16
  124. package/dist/deployment-shape.d.ts +127 -0
  125. package/dist/deployment-shape.js +72 -0
  126. package/dist/device-store.d.ts +1 -1
  127. package/dist/device-ws-hub.d.ts +1 -1
  128. package/dist/egress-redirect.d.ts +1 -1
  129. package/dist/entry-mode-clamp-notice.d.ts +2 -2
  130. package/dist/env-facts.d.ts +10 -9
  131. package/dist/env-facts.js +1 -1
  132. package/dist/env-name-allowlist-knobs.d.ts +5 -5
  133. package/dist/exec-bounds.d.ts +2 -2
  134. package/dist/execution-lane-caps.d.ts +31 -43
  135. package/dist/execution-lane-caps.js +0 -13
  136. package/dist/field-conflict.d.ts +2 -1
  137. package/dist/field-conflict.js +1 -0
  138. package/dist/file-history-capture.d.ts +9 -9
  139. package/dist/file-history-disclosure.d.ts +50 -9
  140. package/dist/file-history-disclosure.js +8 -13
  141. package/dist/fleet/drain-entry.d.ts +2 -2
  142. package/dist/fleet/fleet-bus.d.ts +26 -14
  143. package/dist/fleet/fleet-bus.js +6 -5
  144. package/dist/fleet/fleet-reconciler.d.ts +9 -9
  145. package/dist/fleet/subagent-tail-bus.d.ts +4 -4
  146. package/dist/fleet-client.d.ts +13 -13
  147. package/dist/fleet-lease.d.ts +16 -16
  148. package/dist/governance-http-status.d.ts +2 -2
  149. package/dist/hooks/hook-llm.d.ts +7 -7
  150. package/dist/hooks/hook-runner.d.ts +57 -30
  151. package/dist/hooks/hook-runner.js +38 -20
  152. package/dist/host-decision.d.ts +5 -5
  153. package/dist/host-lsp-manager.d.ts +5 -5
  154. package/dist/hosted-posture.d.ts +23 -13
  155. package/dist/hosted-posture.js +4 -9
  156. package/dist/http/admission.d.ts +2 -2
  157. package/dist/http/admission.js +28 -5
  158. package/dist/http/approval-sweeps.d.ts +1 -1
  159. package/dist/http/approval-sweeps.js +5 -2
  160. package/dist/http/checkpoint-ctx.d.ts +183 -2
  161. package/dist/http/checkpoint-ctx.js +197 -2
  162. package/dist/http/dispatch.d.ts +3 -3
  163. package/dist/http/dispatch.js +3 -3
  164. package/dist/http/durable-run-leg.js +7 -5
  165. package/dist/http/idempotency.d.ts +4 -4
  166. package/dist/http/idempotency.js +2 -2
  167. package/dist/http/mcp-dial-deadline.d.ts +7 -5
  168. package/dist/http/memory-compliance-failure-reply.d.ts +4 -4
  169. package/dist/http/owner-access.d.ts +4 -6
  170. package/dist/http/owner-access.js +1 -1
  171. package/dist/http/principal-gate.d.ts +39 -13
  172. package/dist/http/principal-gate.js +30 -6
  173. package/dist/http/readiness.d.ts +1 -1
  174. package/dist/http/refusal-body.d.ts +12 -0
  175. package/dist/http/refusal-body.js +11 -0
  176. package/dist/http/request-guards.d.ts +4 -13
  177. package/dist/http/request-guards.js +4 -17
  178. package/dist/http/resume-ctx-read.d.ts +53 -6
  179. package/dist/http/resume-ctx-read.js +26 -3
  180. package/dist/http/resume-legs.d.ts +5 -4
  181. package/dist/http/resume-legs.js +47 -29
  182. package/dist/http/route-ctx.d.ts +29 -38
  183. package/dist/http/route-table.d.ts +9 -9
  184. package/dist/http/routes/agents-roster.d.ts +1 -1
  185. package/dist/http/routes/agents-roster.js +2 -3
  186. package/dist/http/routes/approvals-assistant.d.ts +5 -5
  187. package/dist/http/routes/approvals-assistant.js +91 -17
  188. package/dist/http/routes/background.d.ts +3 -3
  189. package/dist/http/routes/background.js +2 -2
  190. package/dist/http/routes/capabilities.d.ts +1 -1
  191. package/dist/http/routes/capabilities.js +16 -8
  192. package/dist/http/routes/config-catalog.d.ts +1 -1
  193. package/dist/http/routes/devices.d.ts +1 -1
  194. package/dist/http/routes/diagnostics.d.ts +6 -6
  195. package/dist/http/routes/diagnostics.js +1 -1
  196. package/dist/http/routes/fleet.d.ts +1 -1
  197. package/dist/http/routes/fleet.js +5 -4
  198. package/dist/http/routes/mcp-reconnect.d.ts +4 -4
  199. package/dist/http/routes/mcp-reconnect.js +3 -3
  200. package/dist/http/routes/memory-consolidation.d.ts +1 -1
  201. package/dist/http/routes/memory-origin.d.ts +1 -1
  202. package/dist/http/routes/notify-wake.d.ts +1 -1
  203. package/dist/http/routes/notify-wake.js +2 -2
  204. package/dist/http/routes/rules.d.ts +1 -1
  205. package/dist/http/routes/rules.js +4 -4
  206. package/dist/http/routes/runs.js +44 -11
  207. package/dist/http/routes/session-sync.d.ts +3 -2
  208. package/dist/http/routes/session-sync.js +109 -62
  209. package/dist/http/routes/sessions-list.d.ts +1 -1
  210. package/dist/http/routes/sessions-list.js +4 -5
  211. package/dist/http/routes/sessions.js +34 -48
  212. package/dist/http/routes/tasks.d.ts +1 -1
  213. package/dist/http/routes/tasks.js +21 -16
  214. package/dist/http/routes/trace-usage.d.ts +1 -1
  215. package/dist/http/routes/trace-usage.js +7 -9
  216. package/dist/http/routes/workflows.d.ts +3 -0
  217. package/dist/http/routes/workflows.js +31 -28
  218. package/dist/http/send.d.ts +5 -5
  219. package/dist/http/server.d.ts +39 -33
  220. package/dist/http/server.js +5 -2
  221. package/dist/http/session-inherit-env.d.ts +3 -3
  222. package/dist/http/sse-lifecycle.d.ts +1 -1
  223. package/dist/http/sse-log.d.ts +2 -2
  224. package/dist/http/submit-ctx.d.ts +4 -3
  225. package/dist/http/submit-ctx.js +19 -3
  226. package/dist/http/sync-submit-body.d.ts +1 -1
  227. package/dist/http/verify-rounds.d.ts +1 -1
  228. package/dist/http/wire-types.d.ts +35 -24
  229. package/dist/index.d.ts +2 -0
  230. package/dist/index.js +1 -0
  231. package/dist/instruction-source-notice.d.ts +2 -2
  232. package/dist/key-resolver.d.ts +3 -3
  233. package/dist/lane-home-probe.d.ts +1 -1
  234. package/dist/leader/diffout.d.ts +1 -1
  235. package/dist/leader/diffup.d.ts +2 -2
  236. package/dist/leader/endpoint.d.ts +1 -1
  237. package/dist/leader/fanout.d.ts +1 -1
  238. package/dist/leader/leader.d.ts +4 -4
  239. package/dist/leader/merge.d.ts +3 -3
  240. package/dist/leader/repair-wire.d.ts +1 -1
  241. package/dist/leader/wire.d.ts +9 -5
  242. package/dist/leader/wire.js +8 -7
  243. package/dist/list-entry-display.d.ts +1 -1
  244. package/dist/lsp-evict.d.ts +1 -1
  245. package/dist/main.js +1 -1
  246. package/dist/mcp-assertion-header.d.ts +1 -1
  247. package/dist/memory-layer-legacy-lock.d.ts +1 -1
  248. package/dist/memory-operator-faces.d.ts +1 -1
  249. package/dist/memory-origin-fence.js +2 -2
  250. package/dist/memory-posture.js +4 -2
  251. package/dist/memory-project-layer.d.ts +1 -1
  252. package/dist/memory-scope.d.ts +19 -19
  253. package/dist/memory-store-refusal.d.ts +4 -4
  254. package/dist/model-compat.d.ts +1 -1
  255. package/dist/model-entry-headers.d.ts +2 -2
  256. package/dist/model-entry-refusal.d.ts +17 -17
  257. package/dist/model-provider.d.ts +10 -10
  258. package/dist/model-reach-scope.d.ts +1 -1
  259. package/dist/model-route-endpoint.d.ts +6 -6
  260. package/dist/model-route-url.d.ts +5 -5
  261. package/dist/model-select.d.ts +15 -6
  262. package/dist/model-select.js +5 -0
  263. package/dist/model-unreachable-notice.d.ts +3 -3
  264. package/dist/namespaced-rule-name.d.ts +15 -5
  265. package/dist/namespaced-rule-name.js +3 -2
  266. package/dist/observability/corrupt-read-seat.d.ts +9 -9
  267. package/dist/observability/cost-taxonomy.d.ts +1 -1
  268. package/dist/observability/err-text.d.ts +1 -1
  269. package/dist/observability/fail-open.d.ts +12 -8
  270. package/dist/observability/fail-open.js +12 -8
  271. package/dist/observability/metrics.d.ts +3 -3
  272. package/dist/observability/prompt-manifest.d.ts +19 -8
  273. package/dist/observability/prompt-manifest.js +9 -8
  274. package/dist/observability/run-terminal.d.ts +36 -36
  275. package/dist/observability/secret-env-scrub.d.ts +3 -3
  276. package/dist/observability/tool-trace.d.ts +1 -1
  277. package/dist/observability/tool-trace.js +8 -9
  278. package/dist/operator-ask.d.ts +4 -4
  279. package/dist/orchestration/workflow-agent-session-index.d.ts +3 -3
  280. package/dist/orchestration/workflow-completion-inbox.d.ts +20 -5
  281. package/dist/orchestration/workflow-completion-inbox.js +29 -7
  282. package/dist/orchestration/workflow-notify-journal.d.ts +43 -19
  283. package/dist/orchestration/workflow-notify-journal.js +17 -0
  284. package/dist/orchestration/workflow-park-decision.d.ts +1 -1
  285. package/dist/orchestration/workflow-park-decision.js +1 -0
  286. package/dist/outbound-dispatcher.d.ts +4 -4
  287. package/dist/parent-watch.d.ts +4 -4
  288. package/dist/parked-decide.d.ts +20 -20
  289. package/dist/parked-decide.js +8 -5
  290. package/dist/parked-revive-surface.d.ts +7 -7
  291. package/dist/parked-revive-surface.js +2 -3
  292. package/dist/peer-directory.d.ts +3 -3
  293. package/dist/peer-directory.js +1 -1
  294. package/dist/permission-rule-list.d.ts +10 -1
  295. package/dist/permission-rule-list.js +7 -5
  296. package/dist/permission-rule-vocab.d.ts +3 -25
  297. package/dist/permission-rule-vocab.js +0 -13
  298. package/dist/plugins/adoption-log-sql.d.ts +1 -1
  299. package/dist/plugins/approval-ask-store-file.d.ts +8 -1
  300. package/dist/plugins/approval-ask-store-file.js +6 -3
  301. package/dist/plugins/approval-ask-store-memory.d.ts +11 -7
  302. package/dist/plugins/approval-ask-store-memory.js +11 -7
  303. package/dist/plugins/approval-ask-store-sql.d.ts +34 -15
  304. package/dist/plugins/approval-ask-store-sql.js +18 -5
  305. package/dist/plugins/approval-exemption-store.d.ts +3 -3
  306. package/dist/plugins/approval-nonce-store.d.ts +3 -3
  307. package/dist/plugins/approval-payload-fingerprint.d.ts +14 -6
  308. package/dist/plugins/approval-payload-fingerprint.js +1 -1
  309. package/dist/plugins/background-agent-store-sql.d.ts +1 -1
  310. package/dist/plugins/background-shell-support.d.ts +2 -2
  311. package/dist/plugins/blob-backend.d.ts +1 -1
  312. package/dist/plugins/caching-session-store.d.ts +24 -33
  313. package/dist/plugins/caching-session-store.js +8 -19
  314. package/dist/plugins/checkpoint-index-columns.d.ts +81 -0
  315. package/dist/plugins/checkpoint-index-columns.js +62 -0
  316. package/dist/plugins/checkpoint-store-sql.d.ts +66 -67
  317. package/dist/plugins/checkpoint-store-sql.js +100 -103
  318. package/dist/plugins/device-store-sql.d.ts +7 -6
  319. package/dist/plugins/e2b-orphan-reclaim.d.ts +1 -1
  320. package/dist/plugins/ensure-schema-lock-policy.d.ts +1 -1
  321. package/dist/plugins/file-history-store-sql.d.ts +9 -7
  322. package/dist/plugins/file-history-store-sql.js +27 -15
  323. package/dist/plugins/file-run-store.d.ts +8 -8
  324. package/dist/plugins/fork-routing-session-store.d.ts +2 -2
  325. package/dist/plugins/fork-routing-session-store.js +1 -1
  326. package/dist/plugins/host-platform.d.ts +10 -10
  327. package/dist/plugins/image-bake-store-sql.d.ts +1 -1
  328. package/dist/plugins/image-index-sql.d.ts +1 -1
  329. package/dist/plugins/leader-run-store-sql.d.ts +1 -1
  330. package/dist/plugins/local-checkpoint-store.d.ts +23 -12
  331. package/dist/plugins/local-checkpoint-store.js +29 -4
  332. package/dist/plugins/local-session-store.d.ts +44 -45
  333. package/dist/plugins/local-session-store.js +42 -52
  334. package/dist/plugins/local-session-window.d.ts +12 -6
  335. package/dist/plugins/local-session-window.js +1 -17
  336. package/dist/plugins/mailbox-store-sql.d.ts +2 -2
  337. package/dist/plugins/memory-engine-pg.d.ts +1 -1
  338. package/dist/plugins/memory-run-store.d.ts +4 -4
  339. package/dist/plugins/memory-sync-store-pg.d.ts +3 -3
  340. package/dist/plugins/one-time-migrations.d.ts +76 -39
  341. package/dist/plugins/one-time-migrations.js +127 -34
  342. package/dist/plugins/outcome-ledger-sql.d.ts +1 -1
  343. package/dist/plugins/park-commit-watch.d.ts +3 -3
  344. package/dist/plugins/permission-rule-store-file.d.ts +5 -5
  345. package/dist/plugins/permission-rule-store-file.js +16 -19
  346. package/dist/plugins/permission-rule-store-sql.d.ts +38 -4
  347. package/dist/plugins/permission-rule-store-sql.js +74 -31
  348. package/dist/plugins/pg-cost-quota.d.ts +1 -1
  349. package/dist/plugins/pg-pool.d.ts +2 -2
  350. package/dist/plugins/pg-pool.js +5 -2
  351. package/dist/plugins/pg-rate-limiter.d.ts +1 -1
  352. package/dist/plugins/pg-session-storage.d.ts +9 -21
  353. package/dist/plugins/pg-session-storage.js +51 -42
  354. package/dist/plugins/remote-env-adb.d.ts +10 -10
  355. package/dist/plugins/remote-env-device.d.ts +22 -14
  356. package/dist/plugins/remote-env-device.js +28 -16
  357. package/dist/plugins/remote-env-e2b.d.ts +3 -3
  358. package/dist/plugins/remote-env-host.d.ts +16 -16
  359. package/dist/plugins/remote-env-k8s.d.ts +8 -8
  360. package/dist/plugins/remote-env-local-docker.d.ts +2 -2
  361. package/dist/plugins/remote-env-ssh.d.ts +4 -4
  362. package/dist/plugins/remote-scratchpad.d.ts +2 -3
  363. package/dist/plugins/remote-scratchpad.js +0 -4
  364. package/dist/plugins/remote-shell.d.ts +6 -6
  365. package/dist/plugins/retention-lane-store-sql.d.ts +4 -4
  366. package/dist/plugins/retention-store-sql.d.ts +4 -4
  367. package/dist/plugins/roster-store-sql.d.ts +1 -1
  368. package/dist/plugins/run-store-sql.d.ts +8 -8
  369. package/dist/plugins/schema-consistency.d.ts +2 -2
  370. package/dist/plugins/schema-ensure-legs.d.ts +3 -3
  371. package/dist/plugins/schema-indexes.d.ts +1 -1
  372. package/dist/plugins/schema-live-columns.d.ts +1 -1
  373. package/dist/plugins/session-event-payload.d.ts +4 -4
  374. package/dist/plugins/session-fork.d.ts +34 -0
  375. package/dist/plugins/session-fork.js +29 -0
  376. package/dist/plugins/session-ownership.d.ts +11 -0
  377. package/dist/plugins/session-ownership.js +11 -0
  378. package/dist/plugins/session-placement.d.ts +12 -14
  379. package/dist/plugins/session-placement.js +2 -15
  380. package/dist/plugins/session-policy-store-sql.d.ts +12 -12
  381. package/dist/plugins/session-store.d.ts +2 -2
  382. package/dist/plugins/session-store.js +2 -2
  383. package/dist/plugins/shared-memory-store-sql.d.ts +2 -2
  384. package/dist/plugins/sql-driver.d.ts +8 -8
  385. package/dist/plugins/sql-errors.d.ts +1 -1
  386. package/dist/plugins/sql-json-column.d.ts +21 -21
  387. package/dist/plugins/sql-row-helpers.d.ts +2 -2
  388. package/dist/plugins/store-backend.d.ts +17 -16
  389. package/dist/plugins/store-backend.js +3 -3
  390. package/dist/plugins/store-contracts.d.ts +21 -21
  391. package/dist/plugins/task-attachment-store.d.ts +2 -2
  392. package/dist/plugins/task-list-store-sql.d.ts +1 -1
  393. package/dist/plugins/tidb-pool.d.ts +2 -2
  394. package/dist/plugins/tidb-pool.js +9 -2
  395. package/dist/plugins/tidb-session-store.d.ts +17 -27
  396. package/dist/plugins/tidb-session-store.js +52 -42
  397. package/dist/plugins/tool-result-store-sql.d.ts +1 -1
  398. package/dist/plugins/usage-window-store-sql.d.ts +3 -3
  399. package/dist/plugins/user-input-ledger-file.d.ts +1 -1
  400. package/dist/plugins/user-input-ledger-sql.d.ts +3 -3
  401. package/dist/plugins/web-search.d.ts +19 -5
  402. package/dist/plugins/web-search.js +19 -4
  403. package/dist/{orchestration/workflow-journal-entry.d.ts → plugins/workflow-journal-payload.d.ts} +23 -32
  404. package/dist/plugins/workflow-journal-payload.js +32 -0
  405. package/dist/plugins/workflow-journal-store-sql.d.ts +28 -14
  406. package/dist/plugins/workflow-journal-store-sql.js +34 -15
  407. package/dist/plugins/workflow-run-store-sql.d.ts +4 -4
  408. package/dist/posture-source.d.ts +11 -11
  409. package/dist/principal-jwt.d.ts +6 -6
  410. package/dist/project-identity.d.ts +3 -3
  411. package/dist/project-memory.d.ts +4 -4
  412. package/dist/read-face-posture.d.ts +7 -7
  413. package/dist/request-key-closure.d.ts +1 -1
  414. package/dist/request-key-closure.js +1 -1
  415. package/dist/request-tool-axes.d.ts +12 -0
  416. package/dist/request-tool-axes.js +20 -0
  417. package/dist/request-value-closure.d.ts +15 -8
  418. package/dist/request-value-closure.js +2 -0
  419. package/dist/router/route-orchestration.d.ts +11 -16
  420. package/dist/router/route-orchestration.js +2 -12
  421. package/dist/rule-entry-list.d.ts +8 -7
  422. package/dist/rule-entry-list.js +2 -9
  423. package/dist/rules-consent.d.ts +6 -6
  424. package/dist/rules-consent.js +2 -0
  425. package/dist/run-cancel-context.d.ts +5 -5
  426. package/dist/run-local.d.ts +10 -10
  427. package/dist/run-local.js +1 -0
  428. package/dist/runs.d.ts +15 -12
  429. package/dist/runs.js +19 -4
  430. package/dist/runtime-caps-resolver.d.ts +6 -6
  431. package/dist/runtime-governance.d.ts +9 -9
  432. package/dist/sandbox-pkg-source.d.ts +9 -31
  433. package/dist/sandbox-pkg-source.js +14 -8
  434. package/dist/sealed-key.d.ts +34 -2
  435. package/dist/sealed-key.js +55 -1
  436. package/dist/security.d.ts +31 -32
  437. package/dist/security.js +12 -9
  438. package/dist/server-secret-env.d.ts +10 -10
  439. package/dist/session-children-retire.d.ts +1 -1
  440. package/dist/session-error-wire.d.ts +19 -12
  441. package/dist/session-error-wire.js +4 -1
  442. package/dist/session-incarnation.d.ts +52 -35
  443. package/dist/session-incarnation.js +23 -8
  444. package/dist/session-policy-wire.d.ts +27 -5
  445. package/dist/session-policy-wire.js +15 -1
  446. package/dist/session-records-skipped-notice.d.ts +1 -1
  447. package/dist/session-sync-kernel.d.ts +38 -11
  448. package/dist/session-sync-kernel.js +10 -0
  449. package/dist/session-sync.d.ts +49 -6
  450. package/dist/session-sync.js +52 -10
  451. package/dist/session-titler.d.ts +7 -6
  452. package/dist/session-titler.js +8 -13
  453. package/dist/session-watch.d.ts +3 -3
  454. package/dist/session-watch.js +4 -4
  455. package/dist/sighup-idle.d.ts +2 -2
  456. package/dist/spec-fields.d.ts +4 -4
  457. package/dist/sql-engine-posture.d.ts +3 -3
  458. package/dist/store-posture.d.ts +2 -2
  459. package/dist/stored-request-tool-axes-m19.d.ts +1 -1
  460. package/dist/task-a2a.d.ts +3 -1
  461. package/dist/task-a2a.js +38 -5
  462. package/dist/task-cwd.d.ts +7 -88
  463. package/dist/task-cwd.js +2 -15
  464. package/dist/task-mcp.d.ts +14 -10
  465. package/dist/task-mcp.js +39 -12
  466. package/dist/task-settings.d.ts +34 -18
  467. package/dist/task-settings.js +34 -4
  468. package/dist/task-workflow.d.ts +0 -24
  469. package/dist/task-workflow.js +2 -1
  470. package/dist/terminal.d.ts +5 -5
  471. package/dist/tighten-only-seats.d.ts +7 -6
  472. package/dist/tighten-only-seats.js +1 -1
  473. package/dist/tool-approval.d.ts +273 -228
  474. package/dist/tool-approval.js +125 -47
  475. package/dist/tool-rule-names.d.ts +7 -1
  476. package/dist/trace/core-keyset-guard.d.ts +15 -9
  477. package/dist/trace/engine-notice-wire.d.ts +5 -5
  478. package/dist/trace/engine-notice-wire.js +1 -0
  479. package/dist/trace/exit-seat.d.ts +40 -1
  480. package/dist/trace/exit-seat.js +46 -14
  481. package/dist/trace/ledger-events.d.ts +6 -4
  482. package/dist/trace/ledger-sink.d.ts +1 -1
  483. package/dist/trace/model-segment.d.ts +3 -3
  484. package/dist/trace/project.d.ts +65 -46
  485. package/dist/trace/project.js +49 -5
  486. package/dist/trace/redact.d.ts +44 -27
  487. package/dist/trace/redact.js +343 -73
  488. package/dist/trace/self-minted-wire.d.ts +39 -14
  489. package/dist/trace/self-minted-wire.js +9 -0
  490. package/dist/trace/sema-provenance.d.ts +1 -1
  491. package/dist/trace/task-notification-facets.d.ts +4 -4
  492. package/dist/trace/wire-projection-faces.d.ts +9 -3
  493. package/dist/trace/wire-projection-faces.js +7 -1
  494. package/dist/unattended-permission-mode.d.ts +5 -5
  495. package/dist/url-credential.d.ts +52 -0
  496. package/dist/url-credential.js +49 -0
  497. package/dist/url-refusal.d.ts +6 -2
  498. package/dist/url-refusal.js +8 -1
  499. package/dist/usage-analytics.d.ts +2 -2
  500. package/dist/user-input-ledger.d.ts +23 -23
  501. package/dist/web-admin-client/apply-effective.d.ts +5 -5
  502. package/dist/web-admin-client/apply-effective.js +2 -1
  503. package/dist/web-admin-client/apply-ledger.d.ts +2 -2
  504. package/dist/web-admin-client/center-request.d.ts +2 -2
  505. package/dist/web-admin-client/facade.d.ts +5 -5
  506. package/dist/web-admin-client/facade.js +1 -1
  507. package/dist/web-admin-client/hot-keys-registry.d.ts +2 -2
  508. package/dist/web-admin-client/http-client.d.ts +4 -4
  509. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  510. package/dist/web-admin-client/pull-state.d.ts +1 -1
  511. package/dist/web-admin-client/read-face.d.ts +2 -2
  512. package/dist/web-admin-client/read-warnings.d.ts +5 -5
  513. package/dist/web-admin-client/restart-signal.d.ts +6 -6
  514. package/dist/web-admin-client/skills-mcp.d.ts +29 -4
  515. package/dist/web-admin-client/skills-mcp.js +31 -4
  516. package/dist/web-admin-client/types.d.ts +17 -10
  517. package/dist/workspace-space.d.ts +5 -3
  518. package/dist/write-protection.d.ts +2 -2
  519. package/package.json +4 -3
  520. package/scripts/drain-check-local.mjs +35 -2
  521. package/scripts/drain-check.mysql.sql +22 -2
  522. package/scripts/drain-check.pg.sql +22 -2
  523. package/skills/loop.md +1 -1
  524. package/dist/mcp-tool-faces.d.ts +0 -69
  525. package/dist/mcp-tool-faces.js +0 -104
  526. package/dist/orchestration/workflow-journal-entry.js +0 -27
@@ -1,6 +1,6 @@
1
1
  /**
2
- * S-928 —— **「已受理、未消费」的用户输入账本**(user-input acceptance ledger)的唯一属主:行形、判据、收敛、通告、读面投影。
3
- * 设计稿 = sema-internal `server/design/` 的 S-928 稿(fable 主会话 2026-10-02);本文件是那份稿在代码里的**一处成文**。
2
+ * [ref] —— **「已受理、未消费」的用户输入账本**(user-input acceptance ledger)的唯一属主:行形、判据、收敛、通告、读面投影。
3
+ * 设计稿 = sema-internal `server/design/` 的 [ref] 稿(fable 主会话 2026-10-02);本文件是那份稿在代码里的**一处成文**。
4
4
  *
5
5
  * ## 病
6
6
  * `POST /v1/runs/:id/steer` 对本副本的活 run 回 **200 `delivery:"applied"`**:输入只进了 core `TaskStream` 的**进程内**队列,
@@ -10,13 +10,13 @@
10
10
  * 该会话下一条 run 之前铸。本文件 = 那个服务层。
11
11
  *
12
12
  * ## 对象(一只账本,一类输入,一句规则)
13
- * 「本服务以回执向调用方承诺已交给引擎、而消费只发生在进程内存里的用户输入」,**且承载它的那只 `TaskStream` 活在本服务的一条 run 腿里**(S-966)——
13
+ * 「本服务以回执向调用方承诺已交给引擎、而消费只发生在进程内存里的用户输入」,**且承载它的那只 `TaskStream` 活在本服务的一条 run 腿里**([ref])——
14
14
  * 后半句是收敛判词成立的前提:证据面是那条 run 行(下文「收敛判据」)。行的 `taskId` = 回执上的 run、`sessionId` = 那条 run 的会话(人看的那一只),
15
15
  * run 里是哪一只流(run 自己的 / 同步子代的)**不是**账本的事实:告知按 run 并帧(`steer` = 条数),读面行同形。今天只有 steer 一族(`kind:"steer"` =
16
16
  * 受理它的引擎动词 `TaskStream.steer`,三档 `now` / `next` / `later` 同一个动词同一族),三个入口同一个引擎动词:
17
17
  * · `POST /v1/runs/:id/steer` 的 live 腿(200 applied);
18
18
  * · `POST /v1/runs/:id/interrupt` 的带 text 形(202 queued-immediate,档位 now;设计稿把它划在病面外,车 SW 亲核它进的是同一只进程内队列 ⇒ 同类同修);
19
- * · `POST /v1/runs/:id/subagents/:target/steer`(200 applied,S-966)—— 投进**同步子代**自己的流(core `createSteerHandle` → `stream.steer`)。子代由父腿
19
+ * · `POST /v1/runs/:id/subagents/:target/steer`(200 applied,[ref])—— 投进**同步子代**自己的流(core `createSteerHandle` → `stream.steer`)。子代由父腿
20
20
  * await,父腿收场时 core 撤掉在飞的复活(`subagentRetain.disposeAll`),所以它活在父 run 的腿里;腿 = 子代句柄,`handle.settled` 兑现 ⇒ 结清。
21
21
  * 规则的反面(不是例外表):workflow agent steer(`POST /v1/workflows/:id/agents/:label/steer`,200 applied)不在本账 —— workflow 是会话锚定的后台件
22
22
  * (core `WorkflowTaskHandle.sessionScoped`),活得比发起它的 run 腿长,没有一条 run 行约束它,而 workflow run 行上没有持有者列 ⇒ 判不出写者死没死(另票);
@@ -24,34 +24,34 @@
24
24
  * follow-up 入口)。steer 的 `later` 档在引擎里走 follow-up 车道(引擎在腿收场时按车道分账:没投出去的 `later` 记进 `task.user_followup_undrained`),
25
25
  * 但它仍是一次 `TaskStream.steer` 受理、消费帧同为 `human_input{delivery:"applied"}`(两车道同一只消费口)⇒ 同进本账,消费即结清。
26
26
  * **族 = 受理时它排进的引擎车道**(core `UserInputLane`,经引擎的 `injectionLaneOf(steerPriorityOf(…))` 读出 —— {@link acceptedInputKindOf};落盘 / wire 词 {@link UserInputKind}:
27
- * `steer` / `follow_up`),崩溃告知的码与条数键按车道取 core `USER_INPUT_UNDRAINED_FAMILIES`(core 7.44.0 #1362:两族同一只成因词表 `USER_INPUT_UNDRAINED_CAUSES`,
28
- * 服务层的 `crashed` 臂按车道选族,与引擎自己的 `leg_end` 臂同一种分账;core 7.45.0 #1408 起族表与车道读法在包根,本仓不再抄)。
27
+ * `steer` / `follow_up`),崩溃告知的码与条数键按车道取 core `USER_INPUT_UNDRAINED_FAMILIES`(core 7.44.0 [ref]:两族同一只成因词表 `USER_INPUT_UNDRAINED_CAUSES`,
28
+ * 服务层的 `crashed` 臂按车道选族,与引擎自己的 `leg_end` 臂同一种分账;core 7.45.0 [ref] 起族表与车道读法在包根,本仓不再抄)。
29
29
  *
30
30
  * ## 五形行(append-only;行序 = 语义序;File 孪生的盘上形 = 下面的 {@link UserInputLedgerRecord},SQL 孪生 = 一行一受理 + CAS 列 + 删行,同义)
31
31
  * · `accepted` —— 受理点(`routes/runs.ts` 的 live 腿,**调 `TaskStream.steer` 之前**、回 200 之前)写;写不进 ⇒ 503
32
32
  * `steering.ledger_unavailable`,引擎一个字节都没收到(fail-closed:没账的 200 是空头承诺)。身份 = `acceptId`
33
33
  * (每次受理一枚;同 Idempotency-Key 的重放共享 `messageId`,但各是一次受理)。`writer` = 受理进程的 `instanceId`。
34
- * · `settled` —— 本进程对这次受理的守护**正常结束**:`consumed`(S-968 / core 7.39.0 #1273:引擎在承载它的腿上铸了
34
+ * · `settled` —— 本进程对这次受理的守护**正常结束**:`consumed`([ref] / core 7.39.0 [ref]:引擎在承载它的腿上铸了
35
35
  * `human_input{delivery:"applied"}`、`inputId` = 本受理的 `messageId` —— 引擎确认把它消费进了转录;腿的事件环把每一帧交
36
36
  * {@link UserInputLedger.observeLegEvent},认哪一帧只在本文件判;且引擎收下了**这次受理的调用** —— 路由报 {@link UserInputLedger.confirm},
37
37
  * [ref] 7.113.0 opus 腿 L4:同 key 异正文的那次受理会被引擎拒,不能凭同名消费证据先结清)、`leg_end`(承载它的腿在本进程收场 —— done / suspended / needs_review / failed
38
38
  * 一律,未消费的那一半 core 已用 `leg_end` 自己告知,本仓不重算「消费了没有」)或 `not_applied`(`TaskStream.steer`
39
- * 抛了,这次受理没有变成 200;路由随即落这一行)。子代腿的 `leg_end`:core 铸在子代自己的会话上,core 7.39.0 #1279(S-980)起同一次收场
39
+ * 抛了,这次受理没有变成 200;路由随即落这一行)。子代腿的 `leg_end`:core 铸在子代自己的会话上,core 7.39.0 [ref]([ref])起同一次收场
40
40
  * **再铸一条到父腿**(`detail.sessionId` = 父会话、`taskId` = 父 run、带 `childSessionId`)⇒ 经分流器到人;本账对子代受理落的
41
- * `settled{leg_end}`(行记父 run,S-966)与那条父口帧说的是同一件事(钉在 `test/engine-notice-wire.test.ts` S-980 两格)。
41
+ * `settled{leg_end}`(行记父 run,[ref])与那条父口帧说的是同一件事(钉在 `test/engine-notice-wire.test.ts` [ref] 两格)。
42
42
  * · `converged` —— 收敛器判「受理它的进程已经不在、而它从没 settle」⇒ `cause:"crashed"`(core 闭集里服务层那一臂)。
43
43
  * · `announced` —— 通告**落进新 run 的事件账之后**写(`taskId` = 告知它的那条**新** run;`EngineNoticeRouter.routeConfirmed` 等口的落账结果,
44
44
  * codex r1-F2):落账失败 ⇒ 不写,下一条 run 再说;重启再重启不重复。唯一的重复形 = 帧已落账而这一行没写成(写失败 / 进程死在两步之间)
45
45
  * —— run 事件账与本账是两只店、没有共同事务,两害取「多说一遍」,不取「声称说过」。
46
46
  * 转移只有四条(open → settled | converged;converged → announced),两只孪生都按 CAS 守它们(File 单进程 = 内存判;SQL = `WHERE state=…`)。
47
- * · `erased` —— (S-965)**会话树删除**:该会话此前的每一次受理(不论状态)离开账本。行随会话走 —— 账本行的唯一归属键就是 `sessionId`,
47
+ * · `erased` —— ([ref])**会话树删除**:该会话此前的每一次受理(不论状态)离开账本。行随会话走 —— 账本行的唯一归属键就是 `sessionId`,
48
48
  * 所以两条删会话树的级联(在线删除协调器 `boot/session-faces.ts` 的 `purgeSession`、托管留存的事务化孪生
49
49
  * `retention-store-sql.ts` 的 `purgeSessionTrees`)各有一臂删它,谓词同一只(`session_id` 单键,店动词 `deleteBySession`)。
50
50
  * File 孪生的盘上形 = 一行会话级墓碑 `{ kind:"erased", sessionId, at }`(与 workflow 完成信箱 `drain{sessionId}` 同形),
51
51
  * 只擦它**之前**的同会话行 —— 会话 id 删后可被重新登记,之后的受理属于下一位住客;SQL 孪生 = 真删行。被删受理上迟到的转移全输
52
52
  * (行不在了,与「未知 acceptId」同一条守卫)。
53
53
  *
54
- * ## 收敛判据(一条:**受理它的进程已经不在,而承载它的腿没有正常收场**)—— 两车道同一只判词({@link judgeOpen},S-969 L8 合一)
54
+ * ## 收敛判据(一条:**受理它的进程已经不在,而承载它的腿没有正常收场**)—— 两车道同一只判词({@link judgeOpen},[ref] L8 合一)
55
55
  * 证据面只有一个:承载它的 **run 行**(run 店;行上的 `instanceId` = 当前持有者,createRun 铸、markResuming 接管)。
56
56
  * · 行在、持有者是写者、仍 `running` ⇒ 腿没收场;写者在不在由车道答(下一段)—— 不在 ⇒ `crashed`,可能在 ⇒ `live`(不动,等 reaper)。
57
57
  * · 行在、持有者是写者、`failed` 且行上是 run 店的**死亡判决码**({@link isHolderDeathVerdict}:`reapStale` 的 `run.stalled` /
@@ -66,10 +66,10 @@
66
66
  * boot 序是先孤儿回收(把这样的行翻成 `failed` + `RUN_ORPHANED_ERROR`)再收敛,所以 local 上最常见的崩溃形读到的是落款;仍 `running`
67
67
  * 的只剩回收因续跑中的检查点刻意跳过的行(写者死、腿没收场 ⇒ 同样 `crashed`)。
68
68
  * · `run_store_verdict`(SQL,多副本):可能。「本进程启动前写的」不证明写者已死(滚动发布 / 三副本)⇒ 等 reaper 把判决落在行上。
69
- * S-969 L8 之前 local 臂不读 run 店、一律 `crashed`:进程恰死在 park 已提交、收场 settle 之前 ⇒ 那次 steer 已迁进检查点、续跑会重投,却被按崩溃
69
+ * [ref] L8 之前 local 臂不读 run 店、一律 `crashed`:进程恰死在 park 已提交、收场 settle 之前 ⇒ 那次 steer 已迁进检查点、续跑会重投,却被按崩溃
70
70
  * 告知一次;settle 写丢后再崩的正常收场同理。两车道读同一只判词之后,「正常收场 / 已 park ⇒ 不告知」不再随车道变。
71
71
  * 本进程写的行不读 run 店(活着的进程的受理归它自己的腿 settle,见 judgeOpen 首行)。触发 = boot 一次 + 每个维护 tick 一次;local 上 boot 之后
72
- * open 集里不再有外来写者的行(每一行要么收敛要么结清,恒不判 `live`),维护 tick 的 local 臂恒空。一趟收敛对同一 taskId 只读一次 run 店(S-969 L9,
72
+ * open 集里不再有外来写者的行(每一行要么收敛要么结清,恒不判 `live`),维护 tick 的 local 臂恒空。一趟收敛对同一 taskId 只读一次 run 店([ref] L9,
73
73
  * 趟内备忘:同一条 run 上的受理在同一趟里得同一个判词)。
74
74
  *
75
75
  * ## 两张脸
@@ -106,7 +106,7 @@ export type UserInputKind = (typeof LEDGER_KIND_OF_LANE)[UserInputLane];
106
106
  export declare const USER_INPUT_KIND_WORDS: Readonly<Record<UserInputKind, true>>;
107
107
  /**
108
108
  * 一次受理的族词 —— 三个受理口(run steer 的 live 腿 / interrupt 带 text 形 / 子代 steer)同调这一只。车道是引擎的那一只读法
109
- * `injectionLaneOf(steerPriorityOf(…))`(core 7.45.0 #1408:缺席档 = `next`;`later` 走 follow-up 车道,`now` / `next` 走 steer 车道;
109
+ * `injectionLaneOf(steerPriorityOf(…))`(core 7.45.0 [ref]:缺席档 = `next`;`later` 走 follow-up 车道,`now` / `next` 走 steer 车道;
110
110
  * 档外值抛 `steering.invalid_content` —— 受理口在这之前已按 `isSystemInjectionPriority` 400 掉档外值,这一抛在本仓不可达)。
111
111
  */
112
112
  export declare function acceptedInputKindOf(priority: SystemInjectionPriority | undefined): UserInputKind;
@@ -225,7 +225,7 @@ export interface OpenScanCursor {
225
225
  readonly acceptId: string;
226
226
  }
227
227
  /**
228
- * `listOpen` 的一页(S-969 L6):`open` = 这一页里**读得出**的 open 受理(读不出形的行已逐行跳过 + 计 F 类 tag);`next` = 续翻游标 =
228
+ * `listOpen` 的一页([ref] L6):`open` = 这一页里**读得出**的 open 受理(读不出形的行已逐行跳过 + 计 F 类 tag);`next` = 续翻游标 =
229
229
  * 这一页**原始**末行的键(被跳过的坏行也算 —— 断点不许卡在坏行上,也不许因为页里少了一行就被当成「扫到底」),缺席 = 原始行不满一页(扫到底)。
230
230
  * 游标属于店(只有店见过原始行),收敛扫描只照着它翻,不从交回的行反推。
231
231
  */
@@ -236,7 +236,7 @@ export interface OpenScanPage {
236
236
  /** 收敛扫描的页长(open = 活腿上的受理 + 等收敛的孤儿,量级是人的手速)。 */
237
237
  export declare const USER_INPUT_OPEN_SCAN_MAX = 1000;
238
238
  /** 一趟收敛至多翻多少页(预算:十万条 open 行;到顶 ⇒ 断点留下,下一趟从断点续翻、扫到底再回绕 —— codex r3-F2)。
239
- * 一趟的上界(S-969 L9 成文):至多 `PAGES` 次页读 × `OPEN_SCAN_MAX` 行;run 店读 = 外来写者行里**不同 taskId** 的个数(趟内备忘,本进程写的行不读);
239
+ * 一趟的上界([ref] L9 成文):至多 `PAGES` 次页读 × `OPEN_SCAN_MAX` 行;run 店读 = 外来写者行里**不同 taskId** 的个数(趟内备忘,本进程写的行不读);
240
240
  * 转移写 = 判出 crashed / leg_over 的行数。boot 那一趟在 stage-07 被 await(协调面开服之前收完 —— 时机不变),所以它的墙钟也受这个上界约束。 */
241
241
  export declare const USER_INPUT_OPEN_SCAN_PAGES = 100;
242
242
  /** 一个会话的「收敛过的受理」读口上限(读面 / 通告都经它;有界 wire)。收敛行 = 崩溃丢失,量级远小于受理总数;超出时取最新的这么多条。 */
@@ -253,7 +253,7 @@ export interface UserInputLedgerStore {
253
253
  /** open 受理的一页 —— 收敛扫描的读口。键集分页:按 (受理时刻, acceptId) 升序,严格在 `after` 之后(缺席 = 从头),至多 `limit` 条**原始行**
254
254
  * (缺席 = {@link USER_INPUT_OPEN_SCAN_MAX});读不出形的行逐行跳过、续翻游标按原始行推进({@link OpenScanPage})。收敛逐页翻到底
255
255
  * (codex r2-F2:固定最旧一页会让活腿占满窗口时后面的崩溃丢失永远轮不到)。三只读口对读不出的行同一处置:跳过 + F 类 tag
256
- * `server.user-input-ledger.corrupt-record-skipped`,不整页抛(S-969 L6)。 */
256
+ * `server.user-input-ledger.corrupt-record-skipped`,不整页抛([ref] L6)。 */
257
257
  listOpen(after?: OpenScanCursor, limit?: number): Promise<OpenScanPage>;
258
258
  /** 一个会话里**收敛过**(崩溃丢失)的受理,含已告知的(按受理时刻升序,至多最新的 {@link USER_INPUT_SESSION_READ_MAX} 条)—— **读面**的读口。
259
259
  * 只读收敛行是刻意的:一个长会话可以有成千上万条正常收场的受理,读口若按「会话的全部受理」截断,新的丢失会被旧的正常行挤出窗外。 */
@@ -261,7 +261,7 @@ export interface UserInputLedgerStore {
261
261
  /** 一个会话里收敛且**未告知**的受理,从最旧起至多 `limit` 条(按受理时刻升序)—— **通告**的待办读口([ref] gpt-6 腿 [medium]:
262
262
  * 通告若读读面那只「最新 N 条含已告知」的窗,已告知行占窗 ⇒ 窗外更旧的未告知行永远不被说;待办只看未告知,说过的让位,窗外的最终可达)。 */
263
263
  listUnannounced(sessionId: string, limit: number): Promise<UserInputAcceptance[]>;
264
- /** S-965 —— **会话树删除**:删掉该会话**每一种状态**的受理,回删除条数(没有可删的 ⇒ 0、零写;幂等)。按 `session_id` 单键:行上没有属主列,
264
+ /** [ref] —— **会话树删除**:删掉该会话**每一种状态**的受理,回删除条数(没有可删的 ⇒ 0、零写;幂等)。按 `session_id` 单键:行上没有属主列,
265
265
  * 会话所有权由调用方证过(在线删除 = 路由的 DELETE 门;留存 = 候选集本身出自本域加锁读的 `session_meta`),与 anchors / exemptions /
266
266
  * attachments 同律。调用方 = 在线删除协调器(`boot/session-faces.ts` `purgeSession` 的一腿);托管留存的事务化孪生不调店、在自己的事务里
267
267
  * 发**同一只谓词**(`retention-store-sql.ts` `purgeSessionTrees` ④)。写不进 ⇒ 抛(协调器据此不删会话本体,幂等重试收敛)。 */
@@ -272,13 +272,13 @@ export interface RunStoreReader {
272
272
  getRun(taskId: string): Promise<RunRecord | null | undefined>;
273
273
  }
274
274
  /**
275
- * 「受理它的进程已经不在」的证据(S-969 L8 合一):两车道读**同一只** run 店判词(见顶注「收敛判据」),`kind` 只回答车道事实表
275
+ * 「受理它的进程已经不在」的证据([ref] L8 合一):两车道读**同一只** run 店判词(见顶注「收敛判据」),`kind` 只回答车道事实表
276
276
  * {@link LANE_FACTS} 里的两问(闭集穷举,判词本身不随车道变):
277
277
  * ① 外来写者仍持有的 `running` 行,写者可能还活着吗 —— `exclusive_data_root`(local):不可能(数据根 LOCK:本进程之前的写者都已死);
278
278
  * `run_store_verdict`(SQL,多副本):可能(等 reaper 把死亡判决落在行上)。
279
279
  * ② run 行不在(`getRun` 答 undefined),这条腿怎么了(7.111.0 [ref] gpt-6 腿 X2)—— local:File 店 `hydrate` 跳过坏 / 缺时间戳的
280
- * `run.json`(S-582 F 座)也答不在 ⇒ 读不出腿怎么收场、写者又已证死 ⇒ `crashed`(告知;= v7.110.0);SQL:店不藏行(读失败是响的
281
- * Error,走 read-failed),不在 = 真删了 ⇒ 腿既不可能还活着也不可能续跑、没有可对照的 run ⇒ `leg_over`(结清;= v7.110.0)。S-965 起
280
+ * `run.json`([ref] F 座)也答不在 ⇒ 读不出腿怎么收场、写者又已证死 ⇒ `crashed`(告知;= v7.110.0);SQL:店不藏行(读失败是响的
281
+ * Error,走 read-failed),不在 = 真删了 ⇒ 腿既不可能还活着也不可能续跑、没有可对照的 run ⇒ `leg_over`(结清;= v7.110.0)。[ref] 起
282
282
  * 删会话 / 留存级联连账本行一起删,SQL 的这一形只剩级联半拍里的竞态与旧副本混版窗删的会话。
283
283
  */
284
284
  export interface WriterGoneEvidence {
@@ -325,7 +325,7 @@ export interface UserInputLedger {
325
325
  /** 腿在本进程收场 ⇒ 这条腿上的每一次受理落 `settled{leg_end}`。不抛。 */
326
326
  settleLeg(leg: object): Promise<void>;
327
327
  /**
328
- * S-968(core 7.39.0 #1273):腿的事件环把**每一帧**引擎事件交进来(三条腿同一只口;不认的帧零成本返回)。唯一认的一形 =
328
+ * [ref](core 7.39.0 [ref]):腿的事件环把**每一帧**引擎事件交进来(三条腿同一只口;不认的帧零成本返回)。唯一认的一形 =
329
329
  * `human_input{delivery:"applied"}`:引擎确认把那条输入消费进了转录 ⇒ 这条腿上 `messageId` = 帧 `inputId`、**且引擎已收下其调用**({@link confirm})的受理
330
330
  * (同 Idempotency-Key 的幂等重放一并)落 `settled{consumed}`,离开 open 集 —— 之后写者死也不再按崩溃告知。结清写失败 ⇒ 留在腿上(收场照常落 `leg_end`),不抛。
331
331
  * 引擎还没判的受理不结清:messageId 只由 key 派生、账本看不见正文,同 key 异正文的那一次会被引擎拒(`steering.duplicate_input_id`)、走 {@link withdraw}。
@@ -377,7 +377,7 @@ export declare function createUserInputLedgerAtBoot(opts: Parameters<typeof crea
377
377
  converged: number;
378
378
  }>;
379
379
  /**
380
- * 装配层按**车道**给证据(闭集穷举:`StoreBackend.kind` 加一个词而这里没跟 ⇒ 编译红)。两臂都带 run 店(S-969 L8:判词同一只),车道词只答
380
+ * 装配层按**车道**给证据(闭集穷举:`StoreBackend.kind` 加一个词而这里没跟 ⇒ 编译红)。两臂都带 run 店([ref] L8:判词同一只),车道词只答
381
381
  * 「外来写者仍持有的 running 行」那一问:
382
382
  * · `local` —— 数据根 LOCK 保证单进程 ⇒ `exclusive_data_root`(外来写者都已死);
383
383
  * · `mysql` / `pg` —— 多副本共享一张表,「我启动之前写的」证明不了写者已死 ⇒ `run_store_verdict`(等 reaper 落款)。
@@ -29,13 +29,13 @@ export interface ApplyReport extends ConfigApplyReport {
29
29
  /** 🔴 codex R2-F1:本候选是否**完整**应用 —— 有任何一组被拒 ⇒ false。调用方据此决定要不要把它发布成
30
30
  * LKG / 推进 etag(一个「其余面提交了但某组被拒」的候选覆盖掉好 LKG,重启后就再也回不去了)。 */
31
31
  readonly fullyApplied: boolean;
32
- /** S-768:本候选目录的模型拒因判决 —— 逐条(`entries`,stage 判出的那份候选的,键已过名筛)+ 组拒码(`plane`,模型面组被拒时在场,
32
+ /** [ref]:本候选目录的模型拒因判决 —— 逐条(`entries`,stage 判出的那份候选的,键已过名筛)+ 组拒码(`plane`,模型面组被拒时在场,
33
33
  * 判决那刻当数据带出)。落地与组拒同一只来源:两者都描述**这一份**候选(组拒时引擎自己的拒因表不换代,这里仍报被拒的那份)。
34
34
  * 候选不管模型面(一条启用条目也没有 —— 幸存的与被丢的都算)⇒ `entries` 空、无 `plane`。`/health.modelRefusals` 与心跳的唯一数据源(web-admin 投影)。 */
35
35
  readonly modelRefusals: ModelRefusalVerdict;
36
36
  }
37
37
  /**
38
- * S-668 波 2 —— 一次 apply 在**哪条腿**上跑,以及这条腿知道的**部署事实**。必填(没有缺省腿):安全轴上「忘了说是哪条
38
+ * [ref] 波 2 —— 一次 apply 在**哪条腿**上跑,以及这条腿知道的**部署事实**。必填(没有缺省腿):安全轴上「忘了说是哪条
39
39
  * 腿」不许静默落成某一种语义([ref])。
40
40
  * · `boot` —— 装配期(stage-02 的 boot 拉取 / LKG 起服;run-local 的一次性装配)。此刻 checkpoint 店**还没建**,
41
41
  * 审批组的「门意图可服务」由装配完之后的 stage-07 对**整份** config 判(拒启)—— 与热腿是同一只
@@ -94,7 +94,7 @@ export declare function withModelPlaneOf<E extends EffectiveConfig>(target: E, s
94
94
  */
95
95
  export declare function fullyLandedForLkg(read: ConfigCandidateRead, report: ApplyReport | undefined): boolean;
96
96
  /**
97
- * S-768:组拒码 → 铸它的那条模型面不变量 —— **以码为键**(组拒码闭集的属主是 settings-schema `MODEL_PLANE_REFUSAL_CODES`;那边加一个码
97
+ * [ref]:组拒码 → 铸它的那条模型面不变量 —— **以码为键**(组拒码闭集的属主是 settings-schema `MODEL_PLANE_REFUSAL_CODES`;那边加一个码
98
98
  * ⇒ 本表缺键 ⇒ 本仓 tsc 红)。模型面 stage 的组拒按**码**铸(码是判决那刻的数据),不变量 id 由本表派生 —— 一个 id 两个码
99
99
  * (`model-route-endpoint`)时码不可能从 id 反推,反过来查才是全函数。
100
100
  */
@@ -105,7 +105,7 @@ export declare const PLANE_REFUSAL_INVARIANT_OF: {
105
105
  readonly "config.gateway_fallback_without_primary": "model-route-endpoint";
106
106
  };
107
107
  /**
108
- * S-667 —— **「无中心配置」档的候选**:中心凭证换人时,server 把在用的中心配置降到这一档({@link applyEffective} 吃它,和吃任何候选走同一条 stage → swap → commit)。
108
+ * [ref] —— **「无中心配置」档的候选**:中心凭证换人时,server 把在用的中心配置降到这一档({@link applyEffective} 吃它,和吃任何候选走同一条 stage → swap → commit)。
109
109
  * 它的意思是「**撤回**中心配置」—— 中心下发的每个热面回 env 底:
110
110
  * · 限额键 / 审批名单 / autonomy / commandPolicy / projects:本来就**非粘**(域缺席 ⇒ 回 env 底),这份候选什么域都没有,于是自然回底,不另写降档代码;
111
111
  * · 模型面组:中心发来的零启用条目空候选 = 本候选不管模型面、上一代继续(不是撤回),所以模型面需要这一个专门的词 —— 见 {@link stageEnvModelPlane};
@@ -138,7 +138,7 @@ export declare function centerManagedConfigKeys(eff: EffectiveConfig | undefined
138
138
  /** 独立调用面的兼容壳(测试/外部):stage → 就地赋值 → 通知。applyEffective 不走这里——它把
139
139
  * 赋值并进自己的 commit 段以保住整世代原子性([ref]②)。入参是 eff 的两个域(审批闸住 governance,
140
140
  * 限额键住 limits —— 各自的属主判据,这里不合成视图;settings-schema 11 退役了 `runtime` 域)。
141
- * [ref]:限额键的属主是热腿,所以本壳**同样**要过 stage-limits。S-668 波 2:审批组的判据依赖腿(④ 只在热腿判),
141
+ * [ref]:限额键的属主是热腿,所以本壳**同样**要过 stage-limits。[ref] 波 2:审批组的判据依赖腿(④ 只在热腿判),
142
142
  * 所以本壳与 applyEffective 一样**必须**说是哪条腿。 */
143
143
  export declare function applyRuntimeGates(config: ServiceConfig, eff: Pick<EffectiveConfig, "limits" | "governance"> | undefined, leg: ApplyLeg, logger?: Logger): void;
144
144
  export declare function applyRuntimeHot(config: ServiceConfig, gov: EffectiveConfig["governance"], logger?: Logger): void;
@@ -3,6 +3,7 @@ import { WEB_ADMIN_ENV, narrowAtMention, resolveActiveTiers, resolveCatalogDefau
3
3
  import { modelKeyPoison } from "../key-resolver.js";
4
4
  import { buildEnvModelIdNotServedNotice, mintCapabilityKeys, readAtMention, servedModelTableLeg } from "../model-select.js";
5
5
  import { applyAutoCompactWindow, buildModelCostKey, parseAutonomy, unmatchableToolNamesRefusal } from "../config.js";
6
+ import { NAME_TABLE_BEHAVIOR } from "../namespaced-rule-name.js";
6
7
  import { buildModelCompat, readModelCompat } from "../model-compat.js";
7
8
  import { buildModelHeadersKey } from "../model-entry-headers.js";
8
9
  import { validateCommandRules } from "../runtime-governance.js";
@@ -526,7 +527,7 @@ function stageApprovalRequire(raw) {
526
527
  return { ok: false, detail, reason: detail, names: nonString.map((e) => `[${e.i}]`), kept: KEPT_WOULD_REMOVE_GATE };
527
528
  }
528
529
  const names = raw.filter((n) => typeof n === "string").map((n) => n.trim()).filter((n) => n.length > 0);
529
- const unmatchable = unmatchableToolNamesRefusal("published governance.approvalRequire", names, { consumer: "tool-name-table", behavior: "deny" });
530
+ const unmatchable = unmatchableToolNamesRefusal("published governance.approvalRequire", names, { consumer: "tool-name-table", behavior: NAME_TABLE_BEHAVIOR });
530
531
  if (unmatchable !== undefined) {
531
532
  return {
532
533
  ok: false,
@@ -23,7 +23,7 @@
23
23
  /**
24
24
  * 世代账按组记账的**组闭集**(读面 `groups` 的键集;加组 = 这里加词,报告形 `Record<组, …>` 随之编译红)。
25
25
  * · `limitsHttp` —— [ref] 批1 限额组(属主 `stage-limits.ts`);
26
- * · `approvalGate` —— S-668 波 2 审批组(`governance.approvalRequire`;属主 `apply-effective.ts` 的
26
+ * · `approvalGate` —— [ref] 波 2 审批组(`governance.approvalRequire`;属主 `apply-effective.ts` 的
27
27
  * `stageApprovalGate`:坏形 / 工具名匹配不到 / ④ 门意图不可服务 ⇒ 整组拒)。
28
28
  * · `modelPlane` —— 模型面组(组内有哪些 effective 域的**唯一定义** = `apply-effective.ts` 的 `MODEL_PLANE_DOMAINS`:models 域 =
29
29
  * 目录 / roles / tiers / 拒因表 / 名单 / 钥匙表(今天组内只此一域);属主 `stageModelPlane`:
@@ -34,7 +34,7 @@
34
34
  export declare const CONFIG_APPLY_GROUPS: readonly ["limitsHttp", "approvalGate", "modelPlane"];
35
35
  export type ConfigApplyGroup = (typeof CONFIG_APPLY_GROUPS)[number];
36
36
  /**
37
- * S-810(车QU codex r1 [high] F1,验真后修)—— 一组在**热腿**被整组拒之后,新进程在 **boot 腿**上对同一候选重判会怎样。每组一格的闭集
37
+ * [ref](车QU codex r1 [high] F1,验真后修)—— 一组在**热腿**被整组拒之后,新进程在 **boot 腿**上对同一候选重判会怎样。每组一格的闭集
38
38
  * (`satisfies Record<ConfigApplyGroup, …>`:加一组 ⇒ 这里编译红,不许静默落进某一格)。部分应用的拍据此决定能不能发重启信号
39
39
  * (`boot/web-admin.ts` 的 `signalRestart`):
40
40
  * · `"refuses-group"` —— boot 腿同一判据、同样整组拒,其余组照落 ⇒ 重启收敛(新进程的 boot 快照就是这份候选,同一差异不再签)。
@@ -13,7 +13,7 @@ export interface CenterEndpoint {
13
13
  readonly credential: CenterCredentialSource;
14
14
  }
15
15
  /**
16
- * S-866 ④ —— 「中心车道配齐」的**唯一**谓词:基址 ∧ **声明了**凭证(S-651:按声明,不按此刻读不读得出)∧ worker。
16
+ * [ref] ④ —— 「中心车道配齐」的**唯一**谓词:基址 ∧ **声明了**凭证([ref]:按声明,不按此刻读不读得出)∧ worker。
17
17
  *
18
18
  * 三处同调、不许各抄一份门:租约管理器(`fleet-lease.ts` `createFleetLeaseFromEnv`)、fleet 客户端的用量环
19
19
  * (`fleet-client.ts` `startFleetClientFromConfig`)、用量累加器(`boot/budget-tracing.ts`)。公告环另要一件可达性声明
@@ -81,7 +81,7 @@ export interface CenterRequestInit {
81
81
  */
82
82
  export declare function pathBaseUrlRefusal(subject: string, raw: string): string | undefined;
83
83
  /**
84
- * S-698 —— 凭证续签:`POST {issuer}/api/v1/auth/token/refresh`,form `refresh_token=…`(settings-schema `AUTH_V1_PATHS.tokenRefresh`)。
84
+ * [ref] —— 凭证续签:`POST {issuer}/api/v1/auth/token/refresh`,form `refresh_token=…`(settings-schema `AUTH_V1_PATHS.tokenRefresh`)。
85
85
  * · 以 `issuer` 为根(可带路径前缀;同源与否由续签器先判,本函数只装配);query / fragment 不带过去。
86
86
  * · **不带 Authorization**:这条端点凭 refresh token 认人,手里的 access token 可能已经过期。
87
87
  * · `redirect: "manual"`:3xx 不跟 —— POST 307/308 会把体(= refresh token)原样带去 `Location`,同源判据在重定向面前失效。
@@ -15,7 +15,7 @@
15
15
  * (core 1.45), so each model/cascade-rung authenticates with its own upstream key.
16
16
  *
17
17
  * Per-model `baseUrl` IS transported (a catalog model may live on a different gateway;
18
- * core brain honors model.baseUrl, absent = "" = the deployment gateway `MODEL_GATEWAY_BASEURL`; S-623: with no gateway
18
+ * core brain honors model.baseUrl, absent = "" = the deployment gateway `MODEL_GATEWAY_BASEURL`; [ref]: with no gateway
19
19
  * declared, a candidate carrying such an openai-lane entry is refused whole — cross-invariant `model-route-endpoint`).
20
20
  *
21
21
  * Hot-reload status (复审 2026-07-29 P1-11 — 亲读判定,取代此处旧的 "models/roles are restart-to-apply"
@@ -28,7 +28,7 @@
28
28
  * - tiers (and the whole plane under an active tier table) — **HOT** as well: core expands a PRIVATE catalog
29
29
  * copy at Runner construction, and the refresh loop swaps every changed plane into all boot Runners before
30
30
  * commit (`Runner.swapDeps`, core 7.10.0; production always wires it). The old "tier-frozen ⇒ defer to restart"
31
- * arm and its `models-tiers` restart slice retired in S-668 波 0 — `/v1/models` and tier-word routing move on
31
+ * arm and its `models-tiers` restart slice retired in [ref] 波 0 — `/v1/models` and tier-word routing move on
32
32
  * the same tick.
33
33
  * - **`degrade-route`** — one of the two genuinely boot-frozen catalog consumers left (the other is the
34
34
  * memory-consolidation driver seat, last bullet): reactive degrade
@@ -37,8 +37,8 @@
37
37
  * restartRequired /health contract instead (see `restart-signal.ts`). Fail-loud beats serving a stale
38
38
  * gateway silently on the rate-limit path.
39
39
  * - skills(+plugins)/mcp/a2a/scenarios — restart-to-apply by construction (baked into the boot
40
- * wiring); so is the memory-consolidation driver's model seat (`memory-consolidation` slice, S-668 波 0).
41
- * (`governance.approvalRequire` left this list in S-668 波 2 — its own staged group, hot on both legs.)
40
+ * wiring); so is the memory-consolidation driver's model seat (`memory-consolidation` slice, [ref] 波 0).
41
+ * (`governance.approvalRequire` left this list in [ref] 波 2 — its own staged group, hot on both legs.)
42
42
  *
43
43
  * ([ref] A13, internal-lossless) This module is now a FACADE: the implementation lives
44
44
  * alongside it in `src/web-admin-client/` split by responsibility group (HTTP client / EffectiveConfig
@@ -50,7 +50,7 @@
50
50
  export { fetchEffective, fetchPrincipalCaps, fetchPrincipalOrgMemory, WebAdminHttpError, fetchSkillContent, fetchPromptArtifact, fetchPromptBlob, } from "./http-client.js";
51
51
  export { mutateInPlace, applyEffective, NO_CENTER_EFFECTIVE, isNoCenterEffective, type ApplyReport, applyRuntimeGates, applyRuntimeHot, logEffectiveDiff, MODEL_PLANE_DOMAINS, type ModelPlaneDomain, type ModelPlaneOf, withModelPlaneOf, fullyLandedForLkg, } from "./apply-effective.js";
52
52
  export { restartReasons, modelPlaneChanged, type RestartSlice, type RestartSliceCtx, type EngineRestartSignal, } from "./restart-signal.js";
53
- export { applySkillsManifest, resolveMcpServers, mcpForScenario, resolveA2aPeers, a2aForScenario } from "./skills-mcp.js";
53
+ export { applySkillsManifest, installedSkillMatchesManifest, skillManifestEntriesNotInstalled, skillToolListsOf, resolveMcpServers, mcpForScenario, resolveA2aPeers, a2aForScenario } from "./skills-mcp.js";
54
54
  export { applyCenterReadFace, buildReadFaceBaseline, buildReadFaceSwapCandidate, restoreReadFaceBaseline, CENTER_READ_FACE_LIVE_KEYS, type CenterReadFaceApply, type CenterReadFaceReport, type ReadFaceBaseline, type ReadFaceSeat } from "./read-face.js";
55
55
  export type { CenterSkillManifest, CenterMcpServer, CenterA2aPeer, CenterModel, CenterReadFace, EffectiveConfig, ExecutionRuling, SessionMirrorRuling, } from "./types.js";
56
56
  //# sourceMappingURL=facade.d.ts.map
@@ -1,6 +1,6 @@
1
1
  export { fetchEffective, fetchPrincipalCaps, fetchPrincipalOrgMemory, WebAdminHttpError, fetchSkillContent, fetchPromptArtifact, fetchPromptBlob, } from "./http-client.js";
2
2
  export { mutateInPlace, applyEffective, NO_CENTER_EFFECTIVE, isNoCenterEffective, applyRuntimeGates, applyRuntimeHot, logEffectiveDiff, MODEL_PLANE_DOMAINS, withModelPlaneOf, fullyLandedForLkg, } from "./apply-effective.js";
3
3
  export { restartReasons, modelPlaneChanged, } from "./restart-signal.js";
4
- export { applySkillsManifest, resolveMcpServers, mcpForScenario, resolveA2aPeers, a2aForScenario } from "./skills-mcp.js";
4
+ export { applySkillsManifest, installedSkillMatchesManifest, skillManifestEntriesNotInstalled, skillToolListsOf, resolveMcpServers, mcpForScenario, resolveA2aPeers, a2aForScenario } from "./skills-mcp.js";
5
5
  export { applyCenterReadFace, buildReadFaceBaseline, buildReadFaceSwapCandidate, restoreReadFaceBaseline, CENTER_READ_FACE_LIVE_KEYS } from "./read-face.js";
6
6
  //# sourceMappingURL=facade.js.map
@@ -27,7 +27,7 @@ export interface HotKeyEntry {
27
27
  readonly key: keyof ServiceConfigFlat;
28
28
  readonly group: keyof ServiceConfigGroups;
29
29
  readonly form: HotKeyForm;
30
- /** 落地批次:1 = [ref] 批1(limitsHttp 组);2 = S-668 波 2(审批组 —— [ref] §6 原排的「批2」)。 */
30
+ /** 落地批次:1 = [ref] 批1(limitsHttp 组);2 = [ref] 波 2(审批组 —— [ref] §6 原排的「批2」)。 */
31
31
  readonly batch: 1 | 2;
32
32
  readonly cases: HotKeyCases;
33
33
  }
@@ -58,7 +58,7 @@ export declare const DEFERRED_LIMIT_KEYS: ReadonlyArray<{
58
58
  readonly why: string;
59
59
  }>;
60
60
  /**
61
- * S-668 波 2([ref] §3)—— **审批组**真正接线的键:`apply-effective.ts` 的 `stageApprovalGate` 消费、报告(世代账
61
+ * [ref] 波 2([ref] §3)—— **审批组**真正接线的键:`apply-effective.ts` 的 `stageApprovalGate` 消费、报告(世代账
62
62
  * `groups.approvalGate`)与拒绝(拒因的键名)都取这一张表。换代手法 A′:消费点本就逐请求现读活 config(审批基线 /
63
63
  * SendUserFile 子代闸 / 会话与记忆读面 / parked 赎回),leader 腿与单用户基线改成现读之后,热只差 refresh 腿的写口。
64
64
  */
@@ -5,16 +5,16 @@ import { type DroppedConfigEntry, type RetiredDomainFinding, type UnreadConfigFi
5
5
  import { type CenterEndpoint } from "./center-request.js";
6
6
  /** GET the effective config (Bearer + ETag). null = 304 (unchanged). Throws on transport/HTTP error, and on a
7
7
  * payload that is not an effective config at all(非对象 / version 非有限数 / gate 域坏形——[ref] 裁B)。
8
- * `retiredDomains`(S-1456):wire 上带事实的退役域(墓碑)不抛 —— 交成发现、那一键不进 effective,候选判官整拒这份候选(与本地腿同键同义)。
8
+ * `retiredDomains`([ref]):wire 上带事实的退役域(墓碑)不抛 —— 交成发现、那一键不进 effective,候选判官整拒这份候选(与本地腿同键同义)。
9
9
  * `domainErrors`:坏 catalog 域(schema default 已落)逐域单列——与本地腿 `FetchEffectiveResult` 同键同义,
10
- * boot/refresh 的候选门直接消费。`droppedEntries`(S-704 ②):schema 逐条丢掉的条目(坐标 + 字段诊断)——
10
+ * boot/refresh 的候选门直接消费。`droppedEntries`([ref] ②):schema 逐条丢掉的条目(坐标 + 字段诊断)——
11
11
  * **不**进候选门,调用方响亮点名、其余照用(分面单点 `splitFoldedReadWarnings`,与本地腿同一只)。
12
12
  *
13
13
  * `readWarnings`:契约 `onWarning` 流的**原值**(未折叠),与本地腿同键同义(读者:一致性门的读腿适配器,见本地腿同名键注)。
14
14
  * 🔐 原流的 `error` 字段**未经** `redactConfigError`(那道脱敏挂在真正进日志流的 `domainErrors` 产出边界上)
15
15
  * —— 任何把本键路由进结构化日志/审计流的消费者必须自己先脱敏。
16
16
  *
17
- * `credentialIdentity`(S-651 / [ref] E-15):这次拉取所用凭证的身份(`center-credential.ts`)。调用方拿它给
17
+ * `credentialIdentity`([ref] / [ref] E-15):这次拉取所用凭证的身份(`center-credential.ts`)。调用方拿它给
18
18
  * 候选打分箱标记 —— LKG / prompt 活动状态只许落进**拉到它的那个身份**的箱。 */
19
19
  export declare function fetchEffective(center: CenterEndpoint, etag: string | undefined, fetchImpl?: typeof fetch, worker?: string): Promise<{
20
20
  effective: EffectiveConfig;
@@ -96,7 +96,7 @@ export declare function fetchSkillContent(center: CenterEndpoint, contentHash: s
96
96
  * 消费侧自证)。artifact=envelope JSON(验真=调用方过 core verifyPromptArtifact,canonical 重算——
97
97
  * 本函数只做传输与形读,不超范围解释);blob=段文本 raw-byte(sha256 逐位自证,fetchSkillContent 同款)。
98
98
  * digest 参数收带前缀/裸 hex 两形([ref] 参数口径)。路径根按凭证种类(B-5,center-request.ts)。
99
- * ⚠️ 现状(S-651 取证车MS 总表第 8 条):`fetchPromptBlob` 在 `src/` 里**没有生产调用点**,真走得到的内容
99
+ * ⚠️ 现状([ref] 取证车MS 总表第 8 条):`fetchPromptBlob` 在 `src/` 里**没有生产调用点**,真走得到的内容
100
100
  * 拉取只有 skill 正文与 prompt 产物两条;它与另两条共用同一张路由表,本批不为它新接线。 */
101
101
  export declare function fetchPromptArtifact(center: CenterEndpoint, artifactDigest: string, fetchImpl?: typeof fetch): Promise<unknown>;
102
102
  export declare function fetchPromptBlob(center: CenterEndpoint, contentDigest: string, fetchImpl?: typeof fetch): Promise<string>;
@@ -46,7 +46,7 @@ export declare function createMcpRevocationLedger(onChange?: (ev: {
46
46
  }) => void): McpRevocationLedger;
47
47
  /** 一拍 EffectiveConfig 的 ENABLED MCP 服务器条目表(`resolveMcpServers` 同判据:`enabled !== false`;
48
48
  * 值=整条目的 key 排序 JSON 指纹,Map 插入序=发布序);mcp 域缺席 ⇒ `null`(台账不动)。
49
- * 指纹序列化器 = `@sema-agent/settings-schema/hash` 的 `stableStringify`(S-778 起;[ref] 2026-08-31 起与 restart-signal 同源:此前本文件
49
+ * 指纹序列化器 = `@sema-agent/settings-schema/hash` 的 `stableStringify`([ref] 起;[ref] 2026-08-31 起与 restart-signal 同源:此前本文件
50
50
  * 持一份**逐字相同**的私有复刻 `fingerprintOf`;JSON 形输入上字节恒等,golden 钉 test/canonical-json-golden.test.ts)。
51
51
  * 两处指纹仍只在各自域内自比、不跨域比对——同源只是去掉一份多余的复刻,不引入跨域约束;也**不**改用
52
52
  * `src/canonical-json.ts`(undefined 值键语义不同,见 restart-signal.ts 该函数顶注)。 */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * S-866 ②(设计稿 v1.1 §2②)—— 「这台引擎**此刻**是不是真的接着中心」的两件读数:最近一次实拉的结局(`lastPull`)与生效修订号
2
+ * [ref] ②(设计稿 v1.1 §2②)—— 「这台引擎**此刻**是不是真的接着中心」的两件读数:最近一次实拉的结局(`lastPull`)与生效修订号
3
3
  * (`effectiveRevision`)。属主 = web-admin 运行时(`boot/web-admin.ts` 的 `centerPullState()`);读者 = caps `centerWiring`。
4
4
  *
5
5
  * 纯叶(零值 import):词表与读面形住这里,运行时与读面两侧都从这里取型,不各写一份。
@@ -5,7 +5,7 @@
5
5
  * 此前是这条轴上的唯一入口:一个用 web-admin 管理整片 worker 的组织,想统一收紧 READ 面只能逐机改 env。本模块把
6
6
  * `EffectiveConfig.readFace`(见 types.ts {@link CenterReadFace})投影到同样的四个 `ServiceConfig` 键上。
7
7
  *
8
- * ── 生效时机:**逐席由引擎答**(S-174 起 face;S-1560 / core 7.51.0 起四席全热)──────────────────────────
8
+ * ── 生效时机:**逐席由引擎答**([ref] 起 face;[ref] / core 7.51.0 起四席全热)──────────────────────────
9
9
  * 哪些席能热换,不是本仓的意见:`KEY_MAP` 每行的 `cfgKey` 就是 core 的席名,能不能热换由 core 的 `isSwappableDepSeat` 亲答
10
10
  * ({@link CENTER_READ_FACE_LIVE_KEYS})。本模块按这**一个**判据分相({@link CenterReadFaceApply}):
11
11
  * · `boot` 相 —— 四键全落(Runner 还没建,每一席都还会 bake);
@@ -15,7 +15,7 @@
15
15
  * 轴上最危险的谎(读面说收紧了、执行面没有)。
16
16
  * 落配、`applied` 日志、换席候选、重启片的指纹读的是**同一个**判据 —— core 把某席移进 / 移出闭集,四处自动一起走
17
17
  * (core 7.51.0 把读拒三席移了进去,而 live 相的落配当时是一句手写的「deny 三键只在 boot 相落」,与另三处的派生读法分家:
18
- * 重启片说「热了」、落配说「不落」,组织收紧读拒规则 ⇒ 既不生效也不要求重启。S-1560 收成一个判据)。
18
+ * 重启片说「热了」、落配说「不落」,组织收紧读拒规则 ⇒ 既不生效也不要求重启。[ref] 收成一个判据)。
19
19
  *
20
20
  * ── 三条规则,每条都有失败方向的论证 ──────────────────────────────────────────────────────────
21
21
  *
@@ -18,7 +18,7 @@
18
18
  * 此前「值已被收编接受」的两种告警 `hosts-grandfathered` / `legacy-governance-lifted` 随抬升臂一起退役,旧形由一次性迁移改写,
19
19
  * 读侧遇旧形一律拒 —— 没有「不入诊断面」的那一族了。)
20
20
  *
21
- * 🔴 S-704 ②(2026-09-24,凭据轴):此前 `entry-dropped` 归「候选门错误」(settings-schema 2.0.0 提货时的归族),于是
21
+ * 🔴 [ref] ②(2026-09-24,凭据轴):此前 `entry-dropped` 归「候选门错误」(settings-schema 2.0.0 提货时的归族),于是
22
22
  * schema 的**逐条容错**在本仓的 refresh / 迟到 boot 两条腿上被**还原成整份拒** —— 目录里一条 `contextWindow:"abc"`
23
23
  * 就让整份目录停在上一代;而上一代若还是 env(boot 拉取失败 / 超窗且无 LKG),env 模型就一直服务、env 钥匙一直被送到
24
24
  * 网关缺省端点(红先实测:`config_candidate_rejected` + env 模型继续服务)。粒度对了规则反而更少:颗粒是条目的失效
@@ -86,7 +86,7 @@ export declare function buildUnreadConfigKeyFields(k: UnreadConfigKey, dir: stri
86
86
  /** `config_unread_file` 一行的体(纯数据;起服 / 刷新 / 迟到起服与 `run-local` 同一体):`dir` = 本地读腿的配置根。 */
87
87
  export declare function buildUnreadConfigFileFields(f: UnreadConfigFile, dir: string | undefined): Record<string, unknown>;
88
88
  /** 逐条丢弃面的一行(两条读腿的 `droppedEntries` 同形,`config_entry_dropped` 日志行读它):`entry` = 被丢那条的出门形坐标(`models.1`),
89
- * `error` = 哪些字段、为什么(人读),`reasonCode` = 为什么丢的**闭集词**(S-1295:settings-schema 铸、原样过境 —— 目录行的
89
+ * `error` = 哪些字段、为什么(人读),`reasonCode` = 为什么丢的**闭集词**([ref]:settings-schema 铸、原样过境 —— 目录行的
90
90
  * `GET /v1/models.droppedEntries[].reasonCode` 就是这同一个词,取自同一次折叠的同一行)。 */
91
91
  export type DroppedConfigEntry = {
92
92
  readonly domain: string;
@@ -133,14 +133,14 @@ export declare function foldEffectiveReadWarning(w: Exclude<EffectiveReadWarning
133
133
  }>;
134
134
  export declare function foldEffectiveReadWarning(w: EffectiveReadWarning, leg: ReadWarningLeg): FoldedReadWarning;
135
135
  /**
136
- * 🔴 S-712 / S-1295 —— **被丢目录条目的载体行**(载体 = `EffectiveConfig.models.droppedCatalogEntries`,读腿铸,随 effective 走 —— 盘上 LKG
136
+ * 🔴 [ref] / [ref] —— **被丢目录条目的载体行**(载体 = `EffectiveConfig.models.droppedCatalogEntries`,读腿铸,随 effective 走 —— 盘上 LKG
137
137
  * 从同一个对象落盘,重启从 LKG 起服时它还在)。形的**唯一定义**(型由它推出;判据按它判盘上来的行)。
138
138
  *
139
139
  * **规则一条:读腿把 schema 逐条丢掉的每一条目录条目(`models` 域的 `["models", <下标>]`)记一行,写入时不挑;每个读者读自己要的那一部分。**
140
140
  * · 墓碑判据(`model-entry-refusal.ts` `judgeCatalogEntries`)—— 有名(`identity.name`)且未停用(`identity.enabled !== false`)的行;
141
141
  * · `GET /v1/models` 的 `droppedEntries`({@link buildDroppedEntriesWire})—— 每一行的下标、闭集词与可披露身份;
142
142
  * · `config_entry_dropped` 日志行读的是这一行由之而来的那条折叠行({@link DroppedConfigEntry},同一次折叠、同一个词)。
143
- * (修前 S-712 的载体 `droppedIdentities` 在写入时只收「有名且启用」的行 —— 那是墓碑读者的筛子,装在了写入处;同一件事于是没有
143
+ * (修前 [ref] 的载体 `droppedIdentities` 在写入时只收「有名且启用」的行 —— 那是墓碑读者的筛子,装在了写入处;同一件事于是没有
144
144
  * 第二个读者可用。筛子回到读者那里,载体就只剩「记下发生了什么」这一条律。)
145
145
  *
146
146
  * 🔐 不含值:`identity` 取告警自带的身份(settings-schema 只铸可披露的标识符 —— 秘密形 / 非标识符的串 ⇒ 该键缺席,三键都没有 ⇒ 整个缺席);
@@ -191,7 +191,7 @@ export interface DroppedEntryWireRow {
191
191
  readonly identity?: DroppedEntryIdentity;
192
192
  }
193
193
  /**
194
- * S-1295 —— 本代目录的被丢条目(`config.droppedCatalogEntries`)→ `GET /v1/models` 的 `droppedEntries`。纯投影,**唯一**出口。
194
+ * [ref] —— 本代目录的被丢条目(`config.droppedCatalogEntries`)→ `GET /v1/models` 的 `droppedEntries`。纯投影,**唯一**出口。
195
195
  * · 词:settings-schema 的闭集原样过境({@link reasonCodeForWire} 穷举:包加词 / 删词 ⇒ 本仓编译红,逼一次「这个词能不能上 wire」的显式决定);
196
196
  * · 身份:`name` / `id` 在出口再问一次包的 `isDisclosableIdentity`(唯一判据,import 不复制)—— 载体可能来自被手改的盘上 LKG,读腿铸的身份
197
197
  * 本来就过了同一只判据;不可披露 ⇒ 该键不出门(不打码:打过码的串不再是身份);`enabled` 是布尔照带;三键都不剩 ⇒ `identity` 缺席;
@@ -5,7 +5,7 @@ export type RestartSlice = "skills" | "mcp" | "a2a" | "scenarios" | "degrade-rou
5
5
  * slices cannot see them, because they are configured from env (`ServiceConfig`), not from the center's
6
6
  * EffectiveConfig. Absent/empty = that lane is off ⇒ its slice is inert (null on both sides). */
7
7
  export interface RestartSliceCtx {
8
- /** S-794:反应式降级壳的两侧读数 —— `baked` = createBrain 组壳那一刻焊进去的目标路由指纹,`current` = 同一只
8
+ /** [ref]:反应式降级壳的两侧读数 —— `baked` = createBrain 组壳那一刻焊进去的目标路由指纹,`current` = 同一只
9
9
  * 指纹函数(brain.ts `degradeRouteFingerprint`)对本拍活配置再读一次(`baked` 的出处见 brain.ts `createBrainAssembly`)。
10
10
  * 缺席 = 调用方没有递席(单元调用)⇒ `degrade-route` 片恒不签;车道没开 / 没焊壳在席内表达为两侧同为 null。
11
11
  * (此前的 `reactiveDegradeTo` 位只剩「阀门开着」一义,已并进本席 —— 一位不留两义。) */
@@ -24,7 +24,7 @@ export interface RestartSliceCtx {
24
24
  * 新增/改址/域整体出现或消失仍签(新 mount / 改址只能 restart 才生效)。缺席/false = 旧语义照签
25
25
  * (fail-closed:没接席的部署里删除向没人承接,restart 是它唯一的生效路径)。 */
26
26
  mcpRevocationLive?: boolean;
27
- /** S-668 波 0(过渡;**波 1 转热后删**)+ 车PI 修复轮 ⑥:记忆整理**阀门判决**的两侧读数(一只 watch,读法见
27
+ /** [ref] 波 0(过渡;**波 1 转热后删**)+ 车PI 修复轮 ⑥:记忆整理**阀门判决**的两侧读数(一只 watch,读法见
28
28
  * boot/memory-consolidation.ts `createConsolidationValveWatch`)—— `baked` = boot 判决的投影,`current` = 拿本拍活配置
29
29
  * 重判一次的投影;投影 = 开着 ⇒ `{ valve: "on", seat: 整理座指纹 }`、关着 ⇒ `{ valve: "off" }`。判决翻了(派生开 ↔ 关)或
30
30
  * 开着而座漂了 ⇒ 两侧不等 ⇒ 签。缺席 = 判决不随目录变(显式 off,或结构上跑不起来的派生关)⇒ 恒不签。 */
@@ -32,12 +32,12 @@ export interface RestartSliceCtx {
32
32
  readonly baked: unknown;
33
33
  readonly current: unknown;
34
34
  };
35
- /** S-668 波 0(codex r1 [medium]):插件 host 白名单(env `PLUGINS_ALLOW_HOSTS`,boot 常量)—— 白名单外的声明
35
+ /** [ref] 波 0(codex r1 [medium]):插件 host 白名单(env `PLUGINS_ALLOW_HOSTS`,boot 常量)—— 白名单外的声明
36
36
  * 装载器整条跳过,它们的变化不是重启理由。生产 `restartCtx` 恒传 `config.pluginsAllowHosts`;缺席(单元调用)
37
37
  * = 装载器的出厂名单 `DEFAULT_PLUGIN_ALLOW_HOSTS`。 */
38
38
  pluginsAllowHosts?: readonly string[];
39
39
  }
40
- /** S-741(车OG):本引擎发布的重启信号。形的唯一定义是 settings-schema 6.1.0 `RestartSignal`(`{ reasons, version, since }`,在场即信号,
40
+ /** [ref](车OG):本引擎发布的重启信号。形的唯一定义是 settings-schema 6.1.0 `RestartSignal`(`{ reasons, version, since }`,在场即信号,
41
41
  * 不夹 `restartRequired` 布尔;本地手写的那份接口已删),这里只把 `reasons` 收窄到本文件的闭集 {@link RestartSlice} —— 写口
42
42
  * (`boot/web-admin.ts` `publishRestart`)按它收,拼错 / 已退役的词编译红(opus 对抗腿 #2:直接用上游型时 `reasons` 是
43
43
  * `string[]`,闭集的编译期判据丢了)。`/health.restart` 与 fleet 心跳 `restart` 两个出口交 web-admin 同一只 `restartState()`
@@ -52,7 +52,7 @@ export type EngineRestartSignal = RestartSignal & {
52
52
  * fields:
53
53
  * - `cost`'s VALUES — refreshed by `mutateInPlace(pricing, buildPricing(config.models))`, and core prefers
54
54
  * `deps.pricing[model.id]` over the (possibly frozen) `Model.cost`, so a pure re-pricing
55
- * needs neither a swap nor a restart. 🔴 B-089:its PRESENCE is subtracted no longer —
55
+ * needs neither a swap nor a restart. 🔴 [ref]:its PRESENCE is subtracted no longer —
56
56
  * a roster row WITHOUT `cost` now mints no `cost` key (unpriced) and therefore no pricing
57
57
  * row, and core's fallback is literally `deps.pricing?.[id] ?? modelCostToPricing(model.cost)`
58
58
  * (core 7.13.0 run-settle-and-teardown.js and three siblings) — so a FROZEN generation
@@ -67,7 +67,7 @@ export type EngineRestartSignal = RestartSignal & {
67
67
  * so the failure mode of drift is a spurious restart, never a silently missed one.
68
68
  *
69
69
  * Shared by BOTH frozen-entry consumers — the `modelPlaneChanged` swap gate (over catalog entries) and brain.ts
70
- * `degradeRouteFingerprint` (over the Model the reactive-degrade shell welded, S-794) — so "which fields are hot"
70
+ * `degradeRouteFingerprint` (over the Model the reactive-degrade shell welded, [ref]) — so "which fields are hot"
71
71
  * is answered once. (复审 2026-07-29 留档:the since-retired `models-tiers` slice had
72
72
  * kept all three, so on a tiers-active deployment a pure re-pricing / weight tweak / serializer writing
73
73
  * `enabled:true` rolling-restarted the fleet.) For the swap gate a subtracted field means "no swap needed": the
@@ -1,17 +1,42 @@
1
- import { type A2aServerSpec, type McpServerSpec } from "@sema-agent/core";
1
+ import { type A2aServerSpec, type McpServerSpec, type SkillSpec } from "@sema-agent/core";
2
2
  import type { CenterMcp, ScopedA2aPeer } from "../config-types.js";
3
3
  import type { Logger } from "../observability/logger.js";
4
4
  import type { LoadedSkill } from "../capabilities/skills.js";
5
5
  import type { ConfigProvider } from "../config-provider.js";
6
6
  import type { CenterA2aPeer, CenterMcpServer, CenterSkillManifest } from "./types.js";
7
7
  /**
8
- * 技能正文的来源 = **拉到这份清单的配置源自己**(S-1556):`fetchSkillContent(contentHash)` 按 hash 答正文 —— 远程 = 中心内容端点
8
+ * 技能正文的来源 = **拉到这份清单的配置源自己**([ref]):`fetchSkillContent(contentHash)` 按 hash 答正文 —— 远程 = 中心内容端点
9
9
  * (传输自验 hash;未知 hash ⇒ `undefined`),本地 = config.d 里内联的正文(与清单同一种容错读);`skillBodyCacheDir` = 这只配置源
10
10
  * 声明的正文盘缓存目录(远程且开着 LKG 才有;本地恒缺席 —— 正文本就在这块盘上)。本函数不知道、也不问是哪一种。
11
11
  */
12
12
  export type SkillBodySource = Pick<ConfigProvider, "fetchSkillContent" | "skillBodyCacheDir">;
13
13
  /**
14
- * The skills domain's ONE read port (S-1556; [ref]-sibling B1; `web-admin docs/MCP-SKILLS.md`). Load order =
14
+ * 技能两只工具名单(`allowedTools` / `disallowedTools`)的**唯一承运口**([ref]):配置源交来的名单 → 引擎 `SkillSpec` 上的同名两键。**缺席 ⇒ 键不出现**(不物化成 `undefined`、不填 `[]`);
15
+ * **在场 ⇒ 整只数组原样**(含 `[]`;不去重、不排序、不判拼写 —— settings-schema 14.4.0 的读法一句话,判官在引擎:`allowedTools` 是 allow 规则来源、`disallowedTools` 拒侧读成空的条目让
16
+ * 那次激活 fail-closed)。数组复制一份:规格上的数组是引擎规格自己的,不与配置源手里的 manifest / 本地店对象共享。
17
+ *
18
+ * 本函数住在技能域的读口旁,三个读者共用 —— 本地腿 CLOSED 投影(`config-provider.ts` 的 `mapToServiceEffective`)、manifest → 规格的铸点({@link applySkillsManifest})、
19
+ * 已装技能 ↔ manifest 的投影一致判据({@link installedSkillMatchesManifest}):三处各写一份键表就是下一次同形丢位([ref] 族)。契约再加一个技能键时的看守不在这里,
20
+ * 在 `test/skill-tool-lists-carry.test.ts` 的键处置表(按 `keyof SkillSpec` 铸型)与 `test/settings-schema-consumption-gates.test.ts` 门 4(叶路径由契约形状派生)。
21
+ */
22
+ export declare function skillToolListsOf(source: {
23
+ readonly allowedTools?: readonly string[];
24
+ readonly disallowedTools?: readonly string[];
25
+ }): Pick<SkillSpec, "allowedTools" | "disallowedTools">;
26
+ /**
27
+ * 一只**已装**技能的运行期投影与配置源 manifest 条目一致吗(启动期 LKG 复核用:同名出厂技能在中心正文拉取失败后留任,名 / 正文 hash / 描述 / 场景可能碰巧相同,
28
+ * 运行期投影却不同 —— 此时进程跑着旧规格,必须算「未装上」)。判据 = {@link applySkillsManifest} 铸 {@link LoadedSkill} 时从 manifest 取的**全部**运行期成员:名、正文(按 hash)、
29
+ * 描述、场景集合(与顺序无关)、两只工具名单(逐条,{@link skillToolListsOf} 的承运形)。铸点多取一位,这里同拍多比一位 —— 两处放在一起就是为了不再漂。
30
+ */
31
+ export declare function installedSkillMatchesManifest(installed: LoadedSkill, m: CenterSkillManifest): boolean;
32
+ /**
33
+ * 启动期复核:manifest 里**要求已装上**的条目哪些没装上(见 {@link installedSkillMatchesManifest} 的判据)。「要求已装上」的集合与 {@link applySkillsManifest} 铸点是同一条规则:
34
+ * `enabled:false` 的不参与;**同名多条后者赢**(铸点对重名发一行 `web_admin_skill_duplicate_name` 并以最后一条为准)—— 前面被盖掉的重名条目不是『没装上』,
35
+ * 否则一份只在名单上有差的重名发布(合法解析、零告警)会让每次起服都发一次 skills 重启信号。后者装不上(正文缺席 / 读失败)而前者留任 ⇒ 后者算没装上。
36
+ */
37
+ export declare function skillManifestEntriesNotInstalled(installed: readonly LoadedSkill[], entries: readonly CenterSkillManifest[]): CenterSkillManifest[];
38
+ /**
39
+ * The skills domain's ONE read port ([ref]; [ref]-sibling B1; `web-admin docs/MCP-SKILLS.md`). Load order =
15
40
  * `loadSkills(SKILLS_DIR)` baseline → the config source's skills (web-admin center OR local `config.d` — same manifest
16
41
  * shape, same code path) overlaid BY NAME (config wins on a clash → can override a built-in; guarded center-side by
17
42
  * publisher RBAC + the publish gate). `enabled:false` is skipped and never fetched. Bodies come from `bodies` by content
@@ -30,7 +55,7 @@ export declare function applySkillsManifest(baseline: LoadedSkill[], manifest: {
30
55
  * Resolve center MCP servers (`/effective.mcp`) into core `McpServerSpec`s + the scenarios each applies to.
31
56
  * env-NAME refs → real values from THIS service's env (secret boundary unchanged); a server with any missing
32
57
  * ref is skipped (`resolveRefs` → null). `enabled:false` skipped. A server whose `toolFaces` / `toolAxes` declaration is
33
- * malformed is skipped whole (both are trust-root declarations — see `mcp-tool-faces.ts` / the engine's `readMcpToolAxes`). Restart-to-apply
58
+ * malformed is skipped whole (both are trust-root declarations — the engine's `readToolFaces` / `readMcpToolAxes` judge them). Restart-to-apply
34
59
  * (filtered per scenario in `resolveSpec` via `mcpForScenario`).
35
60
  */
36
61
  export declare function resolveMcpServers(mcp: {