@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
@@ -44,7 +44,7 @@ export interface MemoryEmbedderConfig {
44
44
  * 的 `mode` 列共读它);两词之外的值在启动期响亮拒 —— 一个拼错的档位静默落回 `audit-only` 会让运维
45
45
  * 以为在删、其实没删,而拼成别的方向就是反过来那件更坏的事。
46
46
  */
47
- /** S-591:任务层「掀开写围栏」的天花板档位闭集(**词表属主在此** —— config 型面与
47
+ /** [ref]:任务层「掀开写围栏」的天花板档位闭集(**词表属主在此** —— config 型面与
48
48
  * `hosted-posture.ts` 的判据读同一份;抄第二份的那天两边会在加词时分家)。 */
49
49
  export declare const TASK_WRITE_FACE_ESCALATIONS: readonly ["allow", "refuse"];
50
50
  /** 天花板档位(闭集两词;缺席 = 本层不表态)。 */
@@ -52,7 +52,7 @@ export type TaskWriteFaceEscalation = (typeof TASK_WRITE_FACE_ESCALATIONS)[numbe
52
52
  export declare const RETENTION_MODES: readonly ["audit-only", "enforce"];
53
53
  export type RetentionMode = (typeof RETENTION_MODES)[number];
54
54
  /**
55
- * S-841 —— `CONFIG_PROVIDER` 的词表闭集(**属主在此**:`loadConfig` 的唯一读点、web-admin 工厂、执行车道合成步、
55
+ * [ref] —— `CONFIG_PROVIDER` 的词表闭集(**属主在此**:`loadConfig` 的唯一读点、web-admin 工厂、执行车道合成步、
56
56
  * 配置目录的 enum 行共读这一份)。缺席 / 空串 = 未表态(配了 `SEMA_WEB_ADMIN_URL` ⇒ 中心,否则纯 env);两词之外 ⇒ 拒启。
57
57
  * 修前是开放词:认不出的词被配置源判官当 `local`、被隐式 host 臂当「不是 local」,一个旋钮在一个进程里有两种读法。
58
58
  */
@@ -77,12 +77,12 @@ export declare const MEMORY_CONSOLIDATION_MIN_INTERVAL_SEC = 300;
77
77
  /**
78
78
  * Node 的 `setTimeout` delay 上界(2^31−1 ms ≈ 24.8 天)。**超过它的 delay 被静默折成 1ms** —— 任何「一个时长
79
79
  * 旋钮的值最终会变成一次 `setTimeout` 的 delay」的键都必须在上界处拒启,不能夹取([ref] + codex r1-[high]:夹取
80
- * 只是把一句谎换成另一句)。S-757 起从 `config.ts` 的模块私有常量提到本纯叶:解析器与配置目录的合法域句读
80
+ * 只是把一句谎换成另一句)。[ref] 起从 `config.ts` 的模块私有常量提到本纯叶:解析器与配置目录的合法域句读
81
81
  * 同一个数([ref]:边界不手抄)。
82
82
  */
83
83
  export declare const MAX_TIMER_DELAY_MS = 2147483647;
84
84
  /**
85
- * S-757(test [ref] / core #1125)—— `AUTO_MODE_CLASSIFIER_TIMEOUT_MS`(→ core `RunnerDeps.autoMode.timeoutMs`)
85
+ * [ref](test [ref] / core [ref])—— `AUTO_MODE_CLASSIFIER_TIMEOUT_MS`(→ core `RunnerDeps.autoMode.timeoutMs`)
86
86
  * 的**合法域**,闭区间、整数 ms。解析器(`config.ts`)与目录行(`config-catalog.ts`)共读这一处。
87
87
  *
88
88
  * · **下界 1000**:亚秒值是「秒写成毫秒」的手滑形(`180` 想说三分钟,落地 180 ms ⇒ 每一级立即判「没裁」⇒ 门控
@@ -101,13 +101,13 @@ export declare const AUTO_MODE_CLASSIFIER_TIMEOUT_BOUNDS: {
101
101
  /**
102
102
  * `DRAIN_GRACE_MS` 的**地板**(10s)—— 夹取(env,[ref] B 档)与中心 stage 校验(`stage-limits.ts` 的 `atLeast`)两条写入腿
103
103
  * 都以它为下界,于是「排空窗」在任何写入通道上都不会短于它。**属主在 settings-schema**(`@sema-agent/settings-schema/fleet` 的
104
- * `DRAIN_GRACE_FLOOR_MS`,drain 协议合同值;S-778 起本叶只转出口,不再本地铸同一个数)。S-752 起它从 `config.ts` 的
104
+ * `DRAIN_GRACE_FLOOR_MS`,drain 协议合同值;[ref] 起本叶只转出口,不再本地铸同一个数)。[ref] 起它从 `config.ts` 的
105
105
  * `LIMITS_HTTP_FLOORS` 字面提到本叶:{@link DRAIN_SECOND_SIGNAL_MIN_GAP_BOUNDS} 的上界与配置目录的合法域句共读这一个数([ref]:
106
106
  * 边界不手抄;目录模块不能值引 `config.ts` —— `config → server-secret-env → config-catalog` 已成链)。
107
107
  */
108
108
  export { DRAIN_GRACE_FLOOR_MS };
109
109
  /**
110
- * S-752(test [ref])—— `DRAIN_SECOND_SIGNAL_MIN_GAP_MS` 的**合法域**(闭区间、整数 ms)与缺省。解析器(`config.ts`)
110
+ * [ref](test [ref])—— `DRAIN_SECOND_SIGNAL_MIN_GAP_MS` 的**合法域**(闭区间、整数 ms)与缺省。解析器(`config.ts`)
111
111
  * 与目录行(`config-catalog.ts`)共读这一处。
112
112
  *
113
113
  * · **语义**:排空期里一发停止信号(SIGTERM / SIGINT)只有在与**排空起点**相隔 ≥ 本值时才算硬停意图;更近的是同一拍的
@@ -135,7 +135,7 @@ export declare const CENTER_BASE_URL_RULE = "\u8BBE\u4E86\u5C31\u5FC5\u987B\u662
135
135
  /** 编排器片 2:`FLEET_LEASE_OUTAGE_MAX_MS` 的缺省(24 h)—— 中心 / 库故障、中心降级在今天都靠 LKG 无限期容忍,10 分钟级的窗会把它们变成数据面停服。 */
136
136
  export declare const FLEET_LEASE_OUTAGE_MAX_DEFAULT_MS = 86400000;
137
137
  /**
138
- * S-753(core 7.33.0 #1121)—— `MODEL_FIRST_BYTE_TIMEOUT_MS`(→ core `BrainTimeoutConfig.firstByteTimeoutMs`,`fetch()` → 响应头
138
+ * [ref](core 7.33.0 [ref])—— `MODEL_FIRST_BYTE_TIMEOUT_MS`(→ core `BrainTimeoutConfig.firstByteTimeoutMs`,`fetch()` → 响应头
139
139
  * 的等待)的**合法域**,闭区间、整数 ms。解析器(`config.ts`)与目录行(`config-catalog.ts`)共读这一处。
140
140
  *
141
141
  * · **下界 0**:`0` 在这一座有真含义 —— 该段**不设引擎钟,传输层的响应头 / 响应体钟也关**(TCP + TLS 建连仍归传输层自己的钟;core 7.33.0 起每请求带引擎 dispatcher,把传输层的
@@ -143,7 +143,7 @@ export declare const FLEET_LEASE_OUTAGE_MAX_DEFAULT_MS = 86400000;
143
143
  * (failover 拓扑真会这么配;窗上还有 core 按 body 大小加的上传宽限)。
144
144
  * · **上界 = {@link MAX_TIMER_DELAY_MS}**:core 对超过它的值构造期拒(`config.stall_timeout_invalid`);本仓在 boot 就拒,
145
145
  * 拒句点名 env 键,而不是等到 brain 装配时报一个运维没写过的 config 键名。
146
- * · **没有缺省常量**:缺席 = 不铸键,core 自缺省当家([ref];本仓不复制上游数字 —— S-753 的病根正是本仓自带的 30 000)。
146
+ * · **没有缺省常量**:缺席 = 不铸键,core 自缺省当家([ref];本仓不复制上游数字 —— [ref] 的病根正是本仓自带的 30 000)。
147
147
  */
148
148
  export declare const FIRST_BYTE_TIMEOUT_BOUNDS: {
149
149
  readonly minMs: 0;
@@ -179,11 +179,11 @@ export declare const DEVICE_EXEC_TIMEOUT_BOUNDS: {
179
179
  readonly max: 2147483647;
180
180
  };
181
181
  /**
182
- * S-220 —— **`resilience` 块缺省的唯一属主**(S-202 的单源从一根扩到整族)。
182
+ * [ref] —— **`resilience` 块缺省的唯一属主**([ref] 的单源从一根扩到整族)。
183
183
  *
184
184
  * 这是一张**表**,不是六个常量:缺省长在三条腿上(解析器腿 `config.ts` 的 `numEnv`/`boolEnv` 缺省、
185
185
  * 目录腿 `config-catalog.ts` 的 `staticDefault`、`brain.ts` 的 `DEFAULT_RESILIENCE` —— config 对象
186
- * 没带 resilience 块时的同姿态兜底),而三条腿此前**各写一份字面量**。S-202 只把 `firstTokenTimeoutMs`
186
+ * 没带 resilience 块时的同姿态兜底),而三条腿此前**各写一份字面量**。[ref] 只把 `firstTokenTimeoutMs`
187
187
  * 一根收成单源,于是剩下五根还在「改一处漏一处 = 目录对外宣告的缺省与真跑的不是同一代」这条病里 ——
188
188
  * 按类修的形是把**整族**收进一张表,让三条腿都只许引用它,而不是再加五个同形常量(六个常量 = 六份
189
189
  * 要各自记得引用的纪律;一张表 = 一条)。
@@ -193,19 +193,19 @@ export declare const DEVICE_EXEC_TIMEOUT_BOUNDS: {
193
193
  * D1 双向对账门(`test/config-catalog.test.ts` ⑦)是 AST 扫 `numEnv("NAME", …)` 的字面名来数「src/ 在读
194
194
  * 哪些键」,改成间接引用会让这六个键在那道门眼里整体消失(实测:6 个幽灵键 + 动态读棘轮 27→33)——
195
195
  * 拿一条真在岗的对账门去换一处写法上的统一是亏的。键名的同源由那道门自己咬:src/ 字面名 ⟺ 目录行名
196
- * ⟺ 本表的 `env`(S-220 那一格按 `env` 查目录行,查不到当场红),三方互钉,没有静默漂移的空间。
196
+ * ⟺ 本表的 `env`([ref] 那一格按 `env` 查目录行,查不到当场红),三方互钉,没有静默漂移的空间。
197
197
  * `satisfies Readonly<Record<keyof ServiceConfigFlat["resilience"], …>>` 双向咬:块上加字段而表里没行
198
198
  * ⇒ tsc 红(加字段的人被迫当场回答「它的出厂缺省是多少、归哪个 env」);表里多一行块上没有的键同样红。
199
199
  *
200
200
  * ⚠️ 语义面**一个数字都没动**:「熔断默认关」照旧,env 恒赢。看门狗的 `0` 自 core 7.33.0 起 = 该段**不设引擎钟,传输层的响应头 / 响应体钟
201
- * 也关**(TCP + TLS 建连仍归传输层自己的钟;此前 = 只关引擎的钟)。S-753 起本表**不再有首字节那一行**:`MODEL_CONNECT_TIMEOUT_MS`(自带 30 000)退役,替代键
201
+ * 也关**(TCP + TLS 建连仍归传输层自己的钟;此前 = 只关引擎的钟)。[ref] 起本表**不再有首字节那一行**:`MODEL_CONNECT_TIMEOUT_MS`(自带 30 000)退役,替代键
202
202
  * `MODEL_FIRST_BYTE_TIMEOUT_MS` 缺席 = 不铸键(见 {@link ServerDefaultedResilienceKey})。
203
- * 首 token 那一行的 600_000 由来(S-202 clay 裁 A):自托管后端在长 prefill(大上下文 / 冷缓存 /
203
+ * 首 token 那一行的 600_000 由来([ref] clay 裁 A):自托管后端在长 prefill(大上下文 / 冷缓存 /
204
204
  * 排队)下首字合理地要等几分钟,120s 会把一次**正常**的慢启动判成 `[network]` 失败去重试,而重试
205
205
  * 再交同一份 prompt 给同一个排队中的后端只会更慢更贵;依赖旧姿态的部署显式写回
206
206
  * `MODEL_FIRST_TOKEN_TIMEOUT_MS=120000` 即可。
207
207
  *
208
- * 🔴 **常量在此、别处只许引用**:`test/config-catalog.test.ts` 的 S-220 两格咬 —— 一格按表逐行钉
208
+ * 🔴 **常量在此、别处只许引用**:`test/config-catalog.test.ts` 的 [ref] 两格咬 —— 一格按表逐行钉
209
209
  * 三腿同值(目录 staticDefault / 解析器实算值 / {@link buildDefaultResilience}),一格扫全 `src/`
210
210
  * 判「字面量」这一类写法为红(下一份镜像出生即红)。
211
211
  */
@@ -232,7 +232,7 @@ export declare const RESILIENCE_DEFAULTS: {
232
232
  };
233
233
  };
234
234
  /**
235
- * S-220 —— 「config 对象没带 resilience 块」时的整块兜底,**逐字段派生自 {@link RESILIENCE_DEFAULTS}**。
235
+ * [ref] —— 「config 对象没带 resilience 块」时的整块兜底,**逐字段派生自 {@link RESILIENCE_DEFAULTS}**。
236
236
  *
237
237
  * 返回类型把键集钉死(缺键 / 多键都是 tsc 红),所以这里剩下的唯一手写物是键名本身,值一个字面量都没有。
238
238
  * 每次调用铸一只新对象(共享一只导出常量会被消费方就地改掉,那是另一条病)。
@@ -246,7 +246,7 @@ export interface MemoryConsolidationDriverConfig {
246
246
  /**
247
247
  * 阀门的**部署表态**(env `MEMORY_CONSOLIDATION_DRIVER=on|off`,原词)。**缺席 = 没表态,不是 off**。
248
248
  *
249
- * 🔴 S-824 / clay **[ref]**(取代 [ref] ① 的「出厂 off」实况):出厂缺省 = **开,但只在整理座不落主模型时生效**
249
+ * 🔴 [ref] / clay **[ref]**(取代 [ref] ① 的「出厂 off」实况):出厂缺省 = **开,但只在整理座不落主模型时生效**
250
250
  * (`MODEL_CHEAP_ID` 在场,或目录给 consolidate / summarize / flash 档位绑了别的模型);否则不开并在起服时提示一行。
251
251
  * 这件事要等**目录应用之后**、记忆引擎接线之后才判得出来,所以本字段只记表态,开不开由 boot 第 6 段的
252
252
  * `resolveConsolidationValve`(`boot/memory-consolidation.ts`)一次判定 —— 那是阀门开关**唯一**的属主。
@@ -270,7 +270,7 @@ export interface MemoryConsolidationDriverConfig {
270
270
  * 第二套授权语义**。显式传的 scope 照跑,表只管缺省。 */
271
271
  scopes: readonly string[];
272
272
  /**
273
- * S-362 / core 7.21.0 [ref] —— **`RunnerDeps.autoRunOnRecommendation` 的部署席**
273
+ * [ref] / core 7.21.0 [ref] —— **`RunnerDeps.autoRunOnRecommendation` 的部署席**
274
274
  * (env `MEMORY_AUTO_CONSOLIDATION=on|off`;**缺席 = 不写那个键**,由 core 的具名缺省
275
275
  * `AUTO_RUN_ON_RECOMMENDATION_DEFAULT` 作答)。
276
276
  *
@@ -286,12 +286,12 @@ export interface MemoryConsolidationDriverConfig {
286
286
  * ⚠️ **前置 = 整理阀门开着**(`MEMORY_CONSOLIDATION_DRIVER=on`,或未设而 [ref] 出厂缺省派生成开 —— 见 {@link valve};
287
287
  * 且记忆引擎接了线)。阀门开着 ⇒ 引擎那半场的整理两席
288
288
  * (`RunnerDeps.memoryConsolidation` + `memoryConsolidationDriver`)由**同一只已解析座**接上
289
- * (S-399,`boot/runner-deps.ts` 的 `ctx.consolidationSeat` 那一段)⇒ 本旋钮真的生效;阀门关着 ⇒ 两席
289
+ * ([ref],`boot/runner-deps.ts` 的 `ctx.consolidationSeat` 那一段)⇒ 本旋钮真的生效;阀门关着 ⇒ 两席
290
290
  * 一个键都不写,而 core 对「武装但没接整理席」的处置是**每一次 prepare 都抛** `config.auto_consolidation`
291
291
  * —— 那会买到一台**启动成功、每个任务都死**的机器,所以本仓把那一拒提前到启动期响亮拒
292
292
  * (`assertAutoConsolidationWirable`,读的是刚铸出来的那只 deps 而不是一个手抄的布尔),与
293
293
  * `MEMORY_CONSOLIDATION_DRIVER` 的 D1「安全/成本控件不得半开」同一条。
294
- * 🔴 **本段自 S-399 改判**:S-362 那一批这里写的是「本 build 上 `on` 一定拒启(本仓没接整理席)」——
294
+ * 🔴 **本段自 [ref] 改判**:[ref] 那一批这里写的是「本 build 上 `on` 一定拒启(本仓没接整理席)」——
295
295
  * 同一批的后半场把两席接上之后,那句话成了谎。旧世界断言留在树上比欠账更危险(7.81.0 整批的教训),
296
296
  * 所以真相变了就地改,不留「将来某一版」的口气。
297
297
  */
@@ -493,17 +493,17 @@ export interface ServiceConfigFlat {
493
493
  port: number;
494
494
  /** OpenAI-compatible model gateway base URL (without /chat/completions) — `MODEL_GATEWAY_BASEURL`.
495
495
  *
496
- * 🔴 S-623:**缺席 = 这台部署没有网关**(没有出厂缺省;旧的本机占位值在读入那一步抹掉「来源」,让没配网关的
496
+ * 🔴 [ref]:**缺席 = 这台部署没有网关**(没有出厂缺省;旧的本机占位值在读入那一步抹掉「来源」,让没配网关的
497
497
  * 部署起得来、第一次调用才炸)。形取「可选键」而不是判别联合:消费方问的只有「有没有声明网关根、是哪个」,
498
498
  * 一个只带一位载荷的联合不比 `string | undefined` 多说任何事,且与紧邻的 `gatewayApiKey?` / `gatewayMaxRetries?`
499
499
  * 的「缺席不铸键」同一条 presence 律。一条 openai 路由请求打到哪儿,只经 `model-route-endpoint.ts` 的
500
500
  * `openaiRouteBaseUrl` 求(路由自己的 `baseUrl` 胜、网关次之);「配置能派发到的每条 openai 路由都解析得到」
501
501
  * 由 boot(config.ts)与热路径(apply-effective)同一只判据保证。 */
502
502
  gatewayBaseUrl?: string;
503
- /** `MODEL_API_KEY` —— **网关的**凭据,只与网关根配对([ref])。S-623:与 `gatewayBaseUrl` 同进同出 ——
503
+ /** `MODEL_API_KEY` —— **网关的**凭据,只与网关根配对([ref])。[ref]:与 `gatewayBaseUrl` 同进同出 ——
504
504
  * 没有网关就不装载(否则 brain 的声明根为空:core 7.51.0 起判 `route.credential_mismatch`,每条自带 baseUrl、没有
505
505
  * per-model 凭据的 openai 条目被拒;7.51.0 前是 `unpinned`,key 随请求发往那些条目),由 `model_gateway_key_unpaired`
506
- * 启动通知说出来。S-1561:brain 在构造时读它一次(core 收据律),本仓没有运行期写者 ⇒ 换值 = 重启。 */
506
+ * 启动通知说出来。[ref]:brain 在构造时读它一次(core 收据律),本仓没有运行期写者 ⇒ 换值 = 重启。 */
507
507
  gatewayApiKey?: string;
508
508
  /** Secondary openai-compatible gateways for cross-gateway FAILOVER (same protocol + same model id).
509
509
  * Tried in order after the primary when a gateway fails before streaming any content. */
@@ -541,13 +541,13 @@ export interface ServiceConfigFlat {
541
541
  * immediately instead of waiting out timeouts). BreakerState is core's in-process Map for now —
542
542
  * cross-replica shared state (TiDB adapter) is a documented follow-up. */
543
543
  resilience: {
544
- /** S-753(core 7.33.0 #1121)—— `fetch()` → 响应头的等待上限(ms;env `MODEL_FIRST_BYTE_TIMEOUT_MS`,合法域
544
+ /** [ref](core 7.33.0 [ref])—— `fetch()` → 响应头的等待上限(ms;env `MODEL_FIRST_BYTE_TIMEOUT_MS`,合法域
545
545
  * {@link FIRST_BYTE_TIMEOUT_BOUNDS})。**缺席 = 不铸键** ⇒ core 自缺省当家(另加 core 按 body 大小给的上传宽限,
546
546
  * 到点后 core 自有一次加宽重试,不吃 `maxRetries`)—— 本仓不复制上游数字([ref])。`0` = 该段不设引擎钟,传输层的响应头 / 响应体钟
547
- * 也关(TCP + TLS 建连仍归传输层自己的钟)。取代退役的 `connectTimeoutMs`(名义建连、实际就是计到响应头;本仓自带的 30 000 缺省正是 S-753 的病根)。 */
547
+ * 也关(TCP + TLS 建连仍归传输层自己的钟)。取代退役的 `connectTimeoutMs`(名义建连、实际就是计到响应头;本仓自带的 30 000 缺省正是 [ref] 的病根)。 */
548
548
  firstByteTimeoutMs?: number;
549
549
  /** Cancel an open SSE stream if no content/thinking delta arrives within this many ms.
550
- * Default 600s (S-202; core's idle timer only arms after the first token,
550
+ * Default 600s ([ref]; core's idle timer only arms after the first token,
551
551
  * so this is the only guard for a stream that opens and never emits). 0 = no engine clock on this
552
552
  * segment and the transport's body clock off too (core ≥7.33.0). */
553
553
  firstTokenTimeoutMs: number;
@@ -567,7 +567,7 @@ export interface ServiceConfigFlat {
567
567
  * (`config.model = config.models.default!`,web-admin-client/apply-effective.ts 的 commit 段)。 */
568
568
  model: Model;
569
569
  /**
570
- * S-188 —— **boot 期 env 派生的那只模型**,`loadConfig()` 铸一次,此后**永不换**(与 `model` 在 boot
570
+ * [ref] —— **boot 期 env 派生的那只模型**,`loadConfig()` 铸一次,此后**永不换**(与 `model` 在 boot
571
571
  * 那一刻是同一个对象引用;center 热应用只动 `model`/`models`,不碰这里)。
572
572
  *
573
573
  * 用途只有一个:**BL-8 继承源** —— 一条 center 目录条目省掉 `maxTokens` / `contextWindow` /
@@ -599,10 +599,10 @@ export interface ServiceConfigFlat {
599
599
  * ⇒ 它的 apiKeyEnv 引用不采(sealed 压过 env-NAME,解封失败也不回落——fail-loud 见 applyEffective)。
600
600
  * Env path: empty;populated ONLY by applyEffective(重赋值;keyResolver 随 boot/refresh 重建)。 */
601
601
  /** 值=解封明文 或托管来源的毒丸(`SealedCustodyPoison`,解封失败标记;key-resolver 对其任务级 throw,恒不落 gateway key 兜底)。
602
- * env 来源的毒丸(S-896 `env_missing`)不进这张表:key 链在取值时按 `modelApiKeyEnv` 现判。 */
602
+ * env 来源的毒丸([ref] `env_missing`)不进这张表:key 链在取值时按 `modelApiKeyEnv` 现判。 */
603
603
  modelApiKeys: Record<string, string | SealedCustodyPoison>;
604
604
  /**
605
- * S-704 —— **已发布但本部署不可用**的目录条目:catalog NAME → 拒因(`model-entry-refusal.ts` 的闭集码
605
+ * [ref] —— **已发布但本部署不可用**的目录条目:catalog NAME → 拒因(`model-entry-refusal.ts` 的闭集码
606
606
  * `config.model_no_brain` / `config.model_entry_invalid` + 上游 id + 一句出路,不含任何值)。
607
607
  *
608
608
  * 这些条目**不在** `models` 里(不可点、不列、不当缺省、不进钥匙表 —— 永远不被改路到另一条 brain / 另一个端点);
@@ -612,7 +612,7 @@ export interface ServiceConfigFlat {
612
612
  */
613
613
  modelRefusals: Readonly<Record<string, ModelEntryRefusal>>;
614
614
  /**
615
- * S-1295 —— **本世代目录里被读腿逐条丢掉的条目**(载体 `EffectiveConfig.models.droppedCatalogEntries` 经模型面判据判过形的行,保序;
615
+ * [ref] —— **本世代目录里被读腿逐条丢掉的条目**(载体 `EffectiveConfig.models.droppedCatalogEntries` 经模型面判据判过形的行,保序;
616
616
  * 下标 + settings-schema 闭集词 + 身份 + 字段诊断)。`GET /v1/models` 的 `droppedEntries` 唯一的源(出口投影 `buildDroppedEntriesWire`:
617
617
  * 只投词与可披露身份)。env 腿恒空(没有目录读);只由 applyEffective 与 `models` **同世代同 commit** 整表重赋值(非粘)—— 模型面这一组
618
618
  * 被拒时它与目录一起停在上一代。墓碑(`modelRefusals` 里的 `entry_invalid` 行)是同一份载体的另一种读法,不是第二份记录。
@@ -674,7 +674,7 @@ export interface ServiceConfigFlat {
674
674
  /** B1 /health 活体 store 探测:后台缓存探针间隔 ms(STORE_PROBE_INTERVAL_MS;0=显式关,负/非数 boot
675
675
  * 响亮拒)。只对 SQL 后端接线;探针原语=backend.dbNowMs()(S10 时钟探针的真 DB 往返,零新 SQL 面)。 */
676
676
  storeProbeIntervalMs: number;
677
- /** S-553 —— `DB_BACKEND=local` 数据根 `LOCK` 撞上**活**持锁人时的**有界等待窗** ms
677
+ /** [ref] —— `DB_BACKEND=local` 数据根 `LOCK` 撞上**活**持锁人时的**有界等待窗** ms
678
678
  * (`STORE_LOCK_WAIT_MS`;缺省 60_000,地板 0 = 7.93.0 的当场拒,**不设上界**)。
679
679
  * 病 = 壳自 spawn 引擎的单机形:旧引擎排空期间一直抱着锁,新引擎当场 fatal ⇒ 用户「刚关掉就再也起不来」。
680
680
  * 失败方向一格不动:到窗仍拿不到 ⇒ 原码 fatal(文案多一句等了多久),**永不**放行第二个写者。
@@ -733,7 +733,7 @@ export interface ServiceConfigFlat {
733
733
  /** 142-S2.5-W1: TOC 同步 client 腿 —— file memory 形态把本地记忆盘与中心(DB 权威,
734
734
  * POST /v1/memory/sync/:scope)做一轮一 RTT 双向同步。env 三键:`MEMORY_SYNC_URL`(设了=开;缺省
735
735
  * undefined=纯本地现状零变化)/`MEMORY_SYNC_TOKEN`(Bearer)/`MEMORY_SYNC_SCOPE`(可选,缺省 =
736
- * memoryScope 本身**仅当它已是 v2 typed key**;非 typed 键 ⇒ 拒启,S-964 —— 旧 formatUserScope 派生臂铸出的是本部署
736
+ * memoryScope 本身**仅当它已是 v2 typed key**;非 typed 键 ⇒ 拒启,[ref] —— 旧 formatUserScope 派生臂铸出的是本部署
737
737
  * 从不写的层,见 loadConfig)。半配置 fail-loud
738
738
  * (memoryEngineBackend 同款姿势);DB backend(pg/tidb)配了这些键=boot throw(中心侧自己就是
739
739
  * 同步权威,不该再跑 client 腿)。 */
@@ -869,7 +869,7 @@ export interface ServiceConfigFlat {
869
869
  * 默认 10s。env `MEMORY_ORG_UNAVAILABLE_BACKOFF_MS`(numEnvBounded)。 */
870
870
  memoryOrgUnavailableBackoffMs: number;
871
871
  /** [ref] v1b + [ref]: opt-in remote execution backend (PEER adapters, chosen by REMOTE_EXEC). Unset
872
- * → in-process stub env (S-601: this used to read "OA/review deployments", a scenario family retired wholesale
872
+ * → in-process stub env ([ref]: this used to read "OA/review deployments", a scenario family retired wholesale
873
873
  * in 5.0.0 — see RETIRED_ENVS; the real discriminant is CONFIG_PROVIDER, and REQUIRE_EXECUTION_LANE turns this
874
874
  * arm into a boot refusal). Secrets (apiKey/privateKey) ONLY from env.
875
875
  * - `e2b` → per-task E2B Firecracker VM (isolated, suspendable). The default code-agent worker.
@@ -878,7 +878,7 @@ export interface ServiceConfigFlat {
878
878
  * - `ssh` → a real host over SSH (NOT isolated/suspendable; [ref] §5). AI-orchestrated batch deploy.
879
879
  * - `adb` → a real device over ADB (NOT isolated/suspendable). On-device APP testing. */
880
880
  /**
881
- * S-213④ —— `REMOTE_EXEC_HOME_DIR`:**执行环境的 home 目录**(core `ExecutionEnv.homeDir`),
881
+ * [ref]④ —— `REMOTE_EXEC_HOME_DIR`:**执行环境的 home 目录**(core `ExecutionEnv.homeDir`),
882
882
  * `~/…` 形权限规则(`Edit(~/.ssh/**)`)唯一的基,绝对路径。
883
883
  *
884
884
  * 部署级旋钮,**跨车道同一根**(不按 provider 分七根 —— 它回答的是同一个问题:「这条部署的手,
@@ -890,7 +890,7 @@ export interface ServiceConfigFlat {
890
890
  */
891
891
  remoteExecHomeDir?: string;
892
892
  /**
893
- * S-598 —— `REQUIRE_EXECUTION_LANE`:**「没点名车道」要不要拒启**。默认 **false**(缺省行为逐字不变)。
893
+ * [ref] —— `REQUIRE_EXECUTION_LANE`:**「没点名车道」要不要拒启**。默认 **false**(缺省行为逐字不变)。
894
894
  *
895
895
  * `REMOTE_EXEC` 未设/空串 **∧** `CONFIG_PROVIDER ≠ local` ⇒ {@link remoteExec} 缺席 ⇒ `boot/execution-env.ts`
896
896
  * 一条工厂臂都不走 ⇒ core 的 `handsEnabled` 为 false ⇒ **整条手带一件不挂**,而任务照跑、回执
@@ -905,8 +905,8 @@ export interface ServiceConfigFlat {
905
905
  * 运维读面(2026-09-22 主会话验收订正:车原写「`GET /v1/diagnostics/wiring` 的 `executionLane.requireExecutionLane`」,
906
906
  * 而该端点当时**没有** `executionLane` 段、`src/` 零投影 —— 一句没兑现的承诺,按 [ref] 不信 JSDoc 只信实现行的纪律改写):
907
907
  * boot 期 `exec_lane_selected` 一行(`config.ts` 装配尾,带 `lane` / `source`)+ `GET /v1/config/catalog` 的目录行。
908
- * 本键的**有效值今天没有运行期读面**;要出就随 S-602 的执行座三态在一处铸,不在这里单独长一位。
909
- * (S-281 起诊断面**有了** `executionLane` 段,但它就是能力面那一只投影 `{provider, toolsOnThisHost, isolated?}`,**不带**本键。)
908
+ * 本键的**有效值今天没有运行期读面**;要出就随 [ref] 的执行座三态在一处铸,不在这里单独长一位。
909
+ * ([ref] 起诊断面**有了** `executionLane` 段,但它就是能力面那一只投影 `{provider, toolsOnThisHost, isolated?}`,**不带**本键。)
910
910
  */
911
911
  requireExecutionLane: boolean;
912
912
  remoteExec?: {
@@ -916,7 +916,7 @@ export interface ServiceConfigFlat {
916
916
  timeoutMs?: number;
917
917
  livenessMs?: number;
918
918
  allowInternetAccess?: boolean;
919
- /** S-713 —— `E2B_SANDBOX_ENV=NAME,NAME` 点到、且本进程环境里真有的键 ⇒ 原值(经唯一的「点名放行」谓词 `allowlistedEnv`,
919
+ /** [ref] —— `E2B_SANDBOX_ENV=NAME,NAME` 点到、且本进程环境里真有的键 ⇒ 原值(经唯一的「点名放行」谓词 `allowlistedEnv`,
920
920
  * 空串值照带)。键缺席 = 旋钮未设 / 空串;名单形错(空段 / 非变量名形 / 点名名单型旋钮)拒启,源里没有的名按序号 warn。 */
921
921
  sandboxEnv?: Record<string, string>;
922
922
  mountPath?: string;
@@ -1008,7 +1008,7 @@ export interface ServiceConfigFlat {
1008
1008
  maxPreAuthPerRemote?: number | "off";
1009
1009
  /** `DEVICE_ENROLL_TOKEN_TTL_SEC`(§4.7 第五个旋钮;默认 900 = §7-T5 ① 的 15min)= enrollment
1010
1010
  * token 的有效期**时长**(整秒,自 **DB now** 起算 —— 时间权威是库,不是副本墙钟)。唯一消费点 =
1011
- * 签发动词 `POST /v1/devices/enroll-tokens`(`http/routes/devices.ts`);S-470 之前它刻意未铸
1011
+ * 签发动词 `POST /v1/devices/enroll-tokens`(`http/routes/devices.ts`);[ref] 之前它刻意未铸
1012
1012
  * (端点不存在 ⇒ 铸了就是一个「配了不生效」的死键,[ref] 病族),随该端点同批铸 + 接线。
1013
1013
  * 域 = `[1, 86400]` 的十进制正整数,坏值**拒启**([ref] A 档;解析器 `parseDeviceEnrollTokenTtlEnv`)。
1014
1014
  * 缺席 ⇒ 签发点的属主默认 900(不在 config 层抄第二份默认,与本族其余旋钮同姿势)。 */
@@ -1027,7 +1027,7 @@ export interface ServiceConfigFlat {
1027
1027
  dropAllCaps?: boolean;
1028
1028
  network?: "none" | "bridge" | "host";
1029
1029
  commandTimeoutMs?: number;
1030
- /** S-713 —— `DOCKER_SANDBOX_ENV=NAME,NAME` 点到、且本进程环境里真有的键 ⇒ 原值(与 e2b 的 `sandboxEnv` 同一只解析器、
1030
+ /** [ref] —— `DOCKER_SANDBOX_ENV=NAME,NAME` 点到、且本进程环境里真有的键 ⇒ 原值(与 e2b 的 `sandboxEnv` 同一只解析器、
1031
1031
  * 同一只谓词;每条 `docker exec` 以 `-e K=V` 注入)。键缺席 = 旋钮未设 / 空串。 */
1032
1032
  env?: Record<string, string>;
1033
1033
  };
@@ -1154,10 +1154,10 @@ export interface ServiceConfigFlat {
1154
1154
  fileHistory?: {
1155
1155
  retention?: FileHistoryRetentionPolicy;
1156
1156
  };
1157
- /** S-589 / S-724:文件历史**捕获**总开关(`FILE_HISTORY_CAPTURE`,布尔词表,缺省 true,未知词拒启)。三条车道
1157
+ /** [ref] / [ref]:文件历史**捕获**总开关(`FILE_HISTORY_CAPTURE`,布尔词表,缺省 true,未知词拒启)。三条车道
1158
1158
  * (local / mysql / pg)同一语义:`false` ⇒ 装配点照接历史店,但给 core 的部署捕获位 `RunnerDeps.fileHistoryCapture: "off"`
1159
1159
  * (首次触碰备份 / 回合边界 / fork 携带结构上不发生;能力词 `fileHistoryCapture:"off"` 同一只判定派生)。**只关捕获**:
1160
- * 已存历史照常服务 restore / rewind / 2c session-sync(S-589 时旋钮关 = 摘店,连已存历史也读不了;S-724 改落 core 的捕获位)。
1160
+ * 已存历史照常服务 restore / rewind / 2c session-sync([ref] 时旋钮关 = 摘店,连已存历史也读不了;[ref] 改落 core 的捕获位)。
1161
1161
  * **不管擦除**:已捕获的历史照旧随会话删除 / 留存规则清理,翻旋钮本身不做批量删除。没有店的部署形不下发捕获位
1162
1162
  * (core 对「off 但没店」拒 prepare,而没店本来就不捕获)。判定的唯一属主是 `file-history-capture.ts`。
1163
1163
  * 刻意**不**并进上面的 `fileHistory` 键:那一格是 core 店构造选项的同域键形,原样透传给 core。 */
@@ -1305,11 +1305,11 @@ export interface ServiceConfigFlat {
1305
1305
  approvalRequire: string[];
1306
1306
  /** Principals allowed to act as OPERATORS (`OPERATOR_PRINCIPALS`): every operator face reads it through the one reading
1307
1307
  * `explicitOperatorOk` (`http/principal-gate.ts`) — e.g. the F4 approval queue (`/v1/approvals`): list ANY owner's pending +
1308
- * decide. A non-operator principal may only LIST ITS OWN pending. **Empty = no one is an operator** (S-1050: the old
1308
+ * decide. A non-operator principal may only LIST ITS OWN pending. **Empty = no one is an operator** ([ref]: the old
1309
1309
  * "empty = everyone on the approval queue" reading is gone); a single-user deployment that wants to be its own operator
1310
1310
  * declares {@link operatorSingleUser}. */
1311
1311
  operatorPrincipals: string[];
1312
- /** `OPERATOR_SINGLE_USER=true` —— 单用户形显式声明「这台部署的每个调用方都是运维」(S-1050,[ref] ① 裁 A)。缺席 = 不声明(没人是,除非在名单里)。
1312
+ /** `OPERATOR_SINGLE_USER=true` —— 单用户形显式声明「这台部署的每个调用方都是运维」([ref],[ref] ① 裁 A)。缺席 = 不声明(没人是,除非在名单里)。
1313
1313
  * 只在单用户形(`REQUIRE_PRINCIPAL` 未开)且名单为空时成立 —— 否则拒启(`config-invariants.ts` 的 `operator-single-user`:一个事实一个来源)。
1314
1314
  * env 独有(没有中心写位),起服冻结。读法只有 `explicitOperatorOk` / `operatorRosterPresent` 两只。 */
1315
1315
  operatorSingleUser?: boolean;
@@ -1328,12 +1328,12 @@ export interface ServiceConfigFlat {
1328
1328
  * operator resumes it on any replica. Default OFF([ref] A-5:轮询车道已退役,OFF+门意图 ⇒ core UNGATED
1329
1329
  * 告警,不再有回退门形). `DURABLE_APPROVAL=true`. */
1330
1330
  durableApproval: boolean;
1331
- /** S-178:上面那一位**是谁定的**(闭集四词,见 `posture-source.ts` —— 与 `readFaceSource` 同一张表)。
1331
+ /** [ref]:上面那一位**是谁定的**(闭集四词,见 `posture-source.ts` —— 与 `readFaceSource` 同一张表)。
1332
1332
  * 7.67.0 起本键进 posture 家族:单机 turnkey ∧ 有耐久店 ⇒ 默认 ON,多租户/内存底座仍 OFF,显式 env
1333
1333
  * 两个方向恒赢。来源上 operator 读面(`GET /v1/diagnostics/wiring` 的 `serverGates`),因为「这台机器
1334
- * 为什么开着 park/resume」在升级后是运维必须看得见的一句话(与 S-167 的补偿项同族)。 */
1334
+ * 为什么开着 park/resume」在升级后是运维必须看得见的一句话(与 [ref] 的补偿项同族)。 */
1335
1335
  durableApprovalSource: PostureSource;
1336
- /** S-178:`STREAM_ASK_WINDOW_MS` 的来源(同一张四词表)。值在 {@link StreamApprovalConfig.windowMs};
1336
+ /** [ref]:`STREAM_ASK_WINDOW_MS` 的来源(同一张四词表)。值在 {@link StreamApprovalConfig.windowMs};
1337
1337
  * 单机 turnkey 缺席 ⇒ 24h(posture),多租户缺席 ⇒ 5min(engine-default),显式 env ⇒ env。 */
1338
1338
  streamAskWindowMsSource: PostureSource;
1339
1339
  /** [ref] seam #2 (preemption) / [ref] ("失败≠没做完" third state): when true (+ durable mode), the
@@ -1447,9 +1447,9 @@ export interface ServiceConfigFlat {
1447
1447
  /** Expected `iss` / `aud` of a direct client's principal JWT. `PRINCIPAL_JWT_ISS` / `PRINCIPAL_JWT_AUD`. */
1448
1448
  principalJwtIss?: string;
1449
1449
  principalJwtAud?: string;
1450
- /** S-591:registry SSO-JWT 的**显式** issuer(`AUTH_BRIDGE_ISSUER`)。
1450
+ /** [ref]:registry SSO-JWT 的**显式** issuer(`AUTH_BRIDGE_ISSUER`)。
1451
1451
  * 🔴 **只是显式 env,不含 boot 期那条 `?? webAdmin.baseUrl` 回退**(回退仍在
1452
- * `boot/stage-09-leader.ts` 的桥装配处)。唯一消费方是桥;S-671([ref] ①)起它**不是**托管证据 ——
1452
+ * `boot/stage-09-leader.ts` 的桥装配处)。唯一消费方是桥;[ref]([ref] ①)起它**不是**托管证据 ——
1453
1453
  * 显式与回退 issuer 在租户轴上同判(理由见 `hosted-posture.ts`)。 */
1454
1454
  authBridgeIssuer?: string;
1455
1455
  /** Max accepted principal-JWT lifetime (exp − now), seconds — caps the replay window past the short-lived mandate.
@@ -1648,7 +1648,7 @@ export interface ServiceConfigFlat {
1648
1648
  * session; fills a NULL title only — a title the user set via `PATCH /v1/sessions/:id` is never overwritten).
1649
1649
  * Default ON; `SESSION_AUTO_TITLE=false` opts out. */
1650
1650
  sessionAutoTitle: boolean;
1651
- /** S-178:上面那一位的来源(同一张四词表)。本键**不进 posture**(缺省恒 true,两形同值)——
1651
+ /** [ref]:上面那一位的来源(同一张四词表)。本键**不进 posture**(缺省恒 true,两形同值)——
1652
1652
  * 报来源是为了让运维分辨「这台机器显式关了自动标题」与「它本来就开着」;壳此前注 `false` 的那条
1653
1653
  * 理由(gateway 不可达时的 warn 噪音)已在 `session-titler.ts` 侧修掉。 */
1654
1654
  sessionAutoTitleSource: PostureSource;
@@ -1659,7 +1659,7 @@ export interface ServiceConfigFlat {
1659
1659
  * field; rendered as the `# Environment` block, sanitized+bounded core-side). Default ON —
1660
1660
  * facts only ride when the deployment actually knows them (image binding/pkgSource/egress/resume facts), absent =
1661
1661
  * block unchanged. `SANDBOX_ENV_FACTS=false` opts out of the SANDBOX facts only.
1662
- * 🔴 S-842:the session scratchpad declaration (`envFacts.scratchpadDir`) is NOT under this knob — it is the write
1662
+ * 🔴 [ref]:the session scratchpad declaration (`envFacts.scratchpadDir`) is NOT under this knob — it is the write
1663
1663
  * surface's declaration (core opens the root-fence hole for it and teaches it by the same verdict), not a display
1664
1664
  * fact; gating it would close the scratchpad together with the display. */
1665
1665
  envFactsEnabled: boolean;
@@ -1688,14 +1688,14 @@ export interface ServiceConfigFlat {
1688
1688
  * 调用形)成文在 `deployment-governance.ts` 的 `RelativeTargetLexicalEnv` 类注。 */
1689
1689
  sensitiveWritePatterns: string[];
1690
1690
  /**
1691
- * S-138 —— core **写保护名表**(`RunnerDeps.writeProtectedPaths` 座)的部署决定。两根 env 旋钮
1691
+ * [ref] —— core **写保护名表**(`RunnerDeps.writeProtectedPaths` 座)的部署决定。两根 env 旋钮
1692
1692
  * 共铸这**一个**键(它们写的是同一条语义面,两根同写 ⇒ boot 拒启,见 config.ts 的解析点):
1693
1693
  * · `WRITE_PROTECTED_EXTRA` ⇒ `{knob:"extra", entries:[...WRITE_PROTECTED_DEFAULT_TABLE, …增量]}`;
1694
1694
  * · `WRITE_PROTECTED_TABLE_REPLACE` ⇒ `{knob:"replace", entries:<JSON 数组原样>}`(`[]` = 显式无表)。
1695
1695
  *
1696
1696
  * 🔴 **缺席 = 不铸键**(与 `readFace` 族同律):座缺席时 core 的 `resolveWriteProtectedTable` 返回它
1697
1697
  * 自己的缺省 51 行 —— 本仓**不复制那张表**,上游改表之日起不会有第二份真源。「缺席 = 没装表」是
1698
- * B-023 F2 的那个误读,读面(`writeProtection` 两位)正是为了让它不可能再发生。
1698
+ * [ref] F2 的那个误读,读面(`writeProtection` 两位)正是为了让它不可能再发生。
1699
1699
  *
1700
1700
  * 🔴 为什么带 `knob` 而不是只存数组:`extra` 与 `replace` 铸出的 `entries` 在**值**上分不出来
1701
1701
  * (一份 `[...DEFAULT, 两行]` 既可能是加法、也可能是运维手抄的整表),而两者对运维的意义相反 ——
@@ -1738,7 +1738,7 @@ export interface ServiceConfigFlat {
1738
1738
  * default — a deployment must explicitly choose it); `"always"` = CC-strict parity (every Bash asks). Any
1739
1739
  * other value (incl. `"off"`) is treated as unset — this knob has no "off" value to opt BACK OUT with once a
1740
1740
  * session's baseline already tightened elsewhere (tightenTaskSpec would reject that as a loosen anyway).
1741
- * 🔴 **S-877(core 7.34.0 [ref])起值域 = core `ShellGateDoctrine` 本尊(只剩 `"always"`)**:`"classify"` 退役 ——
1741
+ * 🔴 **[ref](core 7.34.0 [ref])起值域 = core `ShellGateDoctrine` 本尊(只剩 `"always"`)**:`"classify"` 退役 ——
1742
1742
  * 引擎把形状档装在**每一种模式**的全权 shell 上(不再是一个运维选的档),它当年**额外**买到的那一半(bypass 请求下
1743
1743
  * shell 照问)没有忠实的继任值(引擎按模式放行 bypass 下的普通 ask)⇒ 配 `classify` 的部署 **boot 拒启**并指路
1744
1744
  * (`config.ts` 的解析臂),不静默当成 no-op(那是安全轴上的静默放松)。上面几段关于 `"classify"` 的语义是历史记录。 */
@@ -1762,7 +1762,7 @@ export interface ServiceConfigFlat {
1762
1762
  * 真源。所以缺席时这台机器跟随 core 的 `main`,运维面由 DEPLOY-PREREQS 的升级段点名(「默认变了」
1763
1763
  * 是升级须知,不是一个可以静默过去的实现细节)。 */
1764
1764
  autoModeClassifierFallback?: "main" | "none";
1765
- /** 7.102.0 S-757(test [ref] / core #1125)—— **分类器单级判决上限**(`AUTO_MODE_CLASSIFIER_TIMEOUT_MS`,
1765
+ /** 7.102.0 [ref](test [ref] / core [ref])—— **分类器单级判决上限**(`AUTO_MODE_CLASSIFIER_TIMEOUT_MS`,
1766
1766
  * 部署级数值旋钮,整数 ms,合法域 {@link AUTO_MODE_CLASSIFIER_TIMEOUT_BOUNDS})→ core `RunnerDeps.autoMode.timeoutMs`。
1767
1767
  *
1768
1768
  * 为什么要一根旋钮:这一级到点没裁 = 梯子往下走,走完仍没裁 ⇒ 这次门控调用**整条拒**、不出卡。自建慢网关
@@ -1771,13 +1771,13 @@ export interface ServiceConfigFlat {
1771
1771
  * 🔴 **缺席 = 不铸键**(与 {@link autoModeClassifierFallback} 同律):本仓不复制上游缺省数字,core 改缺省之日
1772
1772
  * 本仓不会成为第二份真源。旋钮**无条件**:不挂任何客户端 / 请求面派生腿。坏值(非十进制整数 / 越界)boot 拒启。 */
1773
1773
  autoModeClassifierTimeoutMs?: number;
1774
- /** S-111([ref] §4.4)—— CC `settings.crossSessionInbound` 的**部署/组织层**(引擎层形的 `managed` 层,
1774
+ /** [ref]([ref] §4.4)—— CC `settings.crossSessionInbound` 的**部署/组织层**(引擎层形的 `managed` 层,
1775
1775
  * CC `policySettings` 对位):本部署对入站跨会话消息的治理三态。`accept` 投递 / `hold` 停在收件会话的待审
1776
1776
  * 队列 / `refuse` 整体退出车道。**未设 = 本层不设**(不是 accept):引擎读作「managed 层未表态」,由其余层
1777
1777
  * 与 mode-parity 决定。词表外的值 boot 拒启(保护型旋钮不许静默回默认)。
1778
1778
  * ⚠️ 供层点 = `cross-session-settings.ts`,生效前提 = 引擎的 peer 目录席在场(座缺席 ⇒ 整条车道不挂)。 */
1779
1779
  crossSessionInbound?: CrossSessionInboundSetting;
1780
- /** S-111 —— CC `settings.dialogExpiry` 的部署层:held 跨会话消息等待人审多久后按安全缺省结算(带回执过期,
1780
+ /** [ref] —— CC `settings.dialogExpiry` 的部署层:held 跨会话消息等待人审多久后按安全缺省结算(带回执过期,
1781
1781
  * 不静默吞)。`"never"` = 不设期限。**未设 ⇒ 不铸键**,由引擎落它自己的缺省(`"5m"`)——本仓不复制上游
1782
1782
  * 缺省值。词表外 boot 拒启。⚠️ CC 同名键还有第二个消费面(远端审批对话框停靠时长),本旋钮今天不驱动它。 */
1783
1783
  crossSessionDialogExpiry?: CrossSessionDialogExpiry;
@@ -1813,12 +1813,12 @@ export interface ServiceConfigFlat {
1813
1813
  * opt-out) is a **fail-loud tombstone** — it refuses boot naming `LSP_HOST_ENABLED`; `LSP_ENABLED=true` keeps
1814
1814
  * its own meaning (the sandbox lane's opt-in above) and is unaffected. */
1815
1815
  lspHostEnabled: boolean;
1816
- /** S-699 —— host-lane language-server env **named allowlist** (`LSP_ENV_ALLOW=NAME,NAME`). The language server's env is
1816
+ /** [ref] —— host-lane language-server env **named allowlist** (`LSP_ENV_ALLOW=NAME,NAME`). The language server's env is
1817
1817
  * the engine's `inheritedHostEnv("scrub")` (shape rules + this deployment's declared own credentials); each name here is put back **verbatim** from the service's own env on top of that
1818
1818
  * (`allowlistedEnv`, the same "named keys pass" predicate as the host shell's `inheritEnv:[names]`) — the deployer
1819
1819
  * explicitly accepts handing that value to code the language server runs. Unnamed secret-shaped keys stay stripped.
1820
1820
  * `[]` = nothing put back (the default: unset / empty string). A malformed list (empty segment / not an env-var name /
1821
- * the name of a name-list knob — S-713: one parser for all three) refuses boot naming the key, without echoing the value. `REQUIRE_PRINCIPAL=true` ⇒ always `[]` (ignored, one boot
1821
+ * the name of a name-list knob — [ref]: one parser for all three) refuses boot naming the key, without echoing the value. `REQUIRE_PRINCIPAL=true` ⇒ always `[]` (ignored, one boot
1822
1822
  * warn) — the multi-tenant posture keeps the full strip. Single-user: only names that EXIST in this process's env
1823
1823
  * make it into this list (an absent name is a per-index boot warn) — so every downstream echo of it (the scrub
1824
1824
  * disclosure's `allowed`, the config catalog) carries real key names only, never a value pasted in place of a name. */
@@ -1828,9 +1828,9 @@ export interface ServiceConfigFlat {
1828
1828
  * /health carries `draining:true`. Default 10min (an interactive turn is minutes, not seconds — a
1829
1829
  * 10s hard-cut would kill long turns); floor 10s. Env: DRAIN_GRACE_MS. SIGINT (Ctrl-C dev
1830
1830
  * ergonomics) hard-stops immediately; DURING a drain, a second SIGTERM / SIGINT hard-stops only when it arrives
1831
- * at least {@link drainSecondSignalMinGapMs} after the drain began (S-752). */
1831
+ * at least {@link drainSecondSignalMinGapMs} after the drain began ([ref]). */
1832
1832
  drainGraceMs: number;
1833
- /** S-752(test [ref]):排空期「第二发信号 = 硬停」的最小间隔(ms,锚 = 排空起点)。不足 ⇒ 同一拍的重复投递,一行
1833
+ /** [ref](test [ref]):排空期「第二发信号 = 硬停」的最小间隔(ms,锚 = 排空起点)。不足 ⇒ 同一拍的重复投递,一行
1834
1834
  * info `drain_duplicate_signal_ignored` 后忽略、排空继续;`0` = 关(7.101.x 行为)。合法域
1835
1835
  * {@link DRAIN_SECOND_SIGNAL_MIN_GAP_BOUNDS},缺省 {@link DRAIN_SECOND_SIGNAL_MIN_GAP_DEFAULT_MS};坏值拒启([ref] A 档)。
1836
1836
  * 部署级旋钮,**无条件**解析。 Env: `DRAIN_SECOND_SIGNAL_MIN_GAP_MS`。 */
@@ -1844,13 +1844,13 @@ export interface ServiceConfigFlat {
1844
1844
  * T11 stands, just bounded instead of immediate. A SECOND SIGHUP (or SIGTERM) escalates to the normal drain
1845
1845
  * path. Default 120s, floor 5s. Env: SIGHUP_IDLE_GRACE_MS. */
1846
1846
  sighupIdleGraceMs: number;
1847
- /** [ref](判据 S-292 / 出口 S-306 改版):引擎 **parent 监视**。壳自 spawn 引擎的同机形里,壳被 SIGKILL
1847
+ /** [ref](判据 [ref] / 出口 [ref] 改版):引擎 **parent 监视**。壳自 spawn 引擎的同机形里,壳被 SIGKILL
1848
1848
  * (崩溃/强杀,没有任何清理钩子)后引擎被 reparent 到 init 而**继续活着** —— 孤儿引擎占端口、占库连接、
1849
1849
  * 占模型配额、抱着 `LOCAL_DATA_ROOT/LOCK`(活孤儿是合法持锁人 ⇒ 下一只壳的引擎必撞锁),而且再没有人会给
1850
1850
  * 它发 SIGTERM(T11 的进程组腿只覆盖信号送得到的形)。设了本键 = 引擎每 2s 自查一拍,**两支任一成立
1851
1851
  * 即把自己标成孤儿**:① `process.ppid` 不再是启动那一刻的值(被过继走,强身份);② `process.kill(pid, 0)` 抛
1852
1852
  * `ESRCH`(弱身份)。`EPERM` = 进程在、只是本进程无权给它发信号 ⇒ **算活着**。
1853
- * 🔴 **S-306(硬 breaking)**:成孤儿**不等于**停机 —— 看门狗的 drain 臂整条删。退不退由**同一条**
1853
+ * 🔴 **[ref](硬 breaking)**:成孤儿**不等于**停机 —— 看门狗的 drain 臂整条删。退不退由**同一条**
1854
1854
  * 附着租约律判(无附着 ∧ 无在飞 ∧ 静默满窗),孤儿态只是把窗从 {@link engineLingerMs} 换成
1855
1855
  * {@link engineOrphanLingerMs}。于是「A 起引擎、B 按 engine.port 复用、A 正常退」不会再在 B 的 turn
1856
1856
  * 中间把引擎拆掉;自退仍走与 SIGTERM **逐字同一条** graceful drain 腿,不是裸 `process.exit`。
@@ -1865,9 +1865,9 @@ export interface ServiceConfigFlat {
1865
1865
  * 才自退,且自退走的是与 SIGTERM **逐字同一条** graceful drain 腿(不是裸 `process.exit`)。
1866
1866
  * **默认 false** —— 服务器部署形永不自退(k8s replica 半夜没人用是正常低谷,不是「该退了」);
1867
1867
  * 壳 spawn 形由壳显式注入 `true`。**部署级旋钮无条件生效**,不派生自任何客户端表态。
1868
- * 🔴 **S-306**:与 {@link parentPid} 不再是「各走各判据的两件」,而是**一件 + 一个输入** —— 租约腿在
1868
+ * 🔴 **[ref]**:与 {@link parentPid} 不再是「各走各判据的两件」,而是**一件 + 一个输入** —— 租约腿在
1869
1869
  * 「本键为真 ∨ `parentPid` 在场」时装配,本键只决定 **owned 态**(父还活着 / 没被监视)的窗:为真 ⇒
1870
- * {@link engineLingerMs},为假 ⇒ **永不自退**(窗 = `Infinity`,与 S-306 前逐字同)。父死之后一律
1870
+ * {@link engineLingerMs},为假 ⇒ **永不自退**(窗 = `Infinity`,与 [ref] 前逐字同)。父死之后一律
1871
1871
  * 改用 {@link engineOrphanLingerMs}。 Env: `ENGINE_AUTO_EXIT`(默认 off)。 */
1872
1872
  engineAutoExit: boolean;
1873
1873
  /** [ref]:自退前三合取必须**持续**成立的静默窗。默认 60s —— 防的是**壳重启窗**:壳崩了/重启的 1-3s
@@ -1880,8 +1880,8 @@ export interface ServiceConfigFlat {
1880
1880
  * **永远追不上它** ⇒ 看着配好了、自退其实整件失效。要「永不自退」请用 `ENGINE_AUTO_EXIT=false`。
1881
1881
  * Env: `ENGINE_LINGER_MS`(默认 60000,闭区间 [1000, 86400000])。 */
1882
1882
  engineLingerMs: number;
1883
- /** S-306:**孤儿态**的静默窗 —— `SEMA_PARENT_PID` 那个进程已经不在了之后,三合取还要**持续**成立多久
1884
- * 才自退。默认 **2s**:部署面的判据是「壳挂掉后数据根秒级重新可用」(B-117 的原病 = 孤儿引擎抱着
1883
+ /** [ref]:**孤儿态**的静默窗 —— `SEMA_PARENT_PID` 那个进程已经不在了之后,三合取还要**持续**成立多久
1884
+ * 才自退。默认 **2s**:部署面的判据是「壳挂掉后数据根秒级重新可用」([ref] 的原病 = 孤儿引擎抱着
1885
1885
  * `LOCAL_DATA_ROOT/LOCK` 不放),而此时已经没有「壳重启窗」要防 —— 那只壳不会回来了(要回来的是**新**
1886
1886
  * 壳,它走的是新 boot)。窗仍然不是 0:有活附着 / 有在飞 turn 时这条窗压根不开始计时(三合取先不成立)。
1887
1887
  * 与 {@link engineLingerMs} **同一只校验器、同一对上下界**,坏值同样**拒启**;解析**无条件**,不看
@@ -1985,14 +1985,14 @@ export interface ServiceConfigFlat {
1985
1985
  * 一个部署级旋钮的生死由客户端 posture 决定,同病犯过两次)。
1986
1986
  *
1987
1987
  * 施加点 = `ToolApprovalCoordinator` 的构造参 `unattendedPolicy`,五条「无人可答」的臂读同一
1988
- * 个值;对账收敛器的同名构造参(S-706,`boot/reapers.ts` 恒传同一个部署值)只供它的孤儿段打同一只终态 claim ——
1988
+ * 个值;对账收敛器的同名构造参([ref],`boot/reapers.ts` 恒传同一个部署值)只供它的孤儿段打同一只终态 claim ——
1989
1989
  * 两处读同一个值,于是崩溃恢复与 live 腿同答(设计稿 §1 的表:(a) 有店窗到期赢 CAS /(b) 无店窗到期 /(c) 店报错 catch /(d) windowZero 与
1990
1990
  * headless 腿 /(e) 断连强转 + emit 全灭 + 写侧准入超限 + **投递集合入口活性过滤清空**([ref] 归
1991
1991
  * 位:与「查无活流」同一件事实的两个时刻,详见 `askBroadcast` 的该臂注))。`"timeout"` 宿主自报只留在 (b)(c) ——
1992
1992
  * 结束等待的确实是本仓的窗;其余三臂结束等待的是容量/连接/装配,自报恒缺席。
1993
1993
  *
1994
- * 🔴 **`deny` 交给引擎的形(S-689)**:部署政策拒对象臂 `{allow:false, settledBy:"policy", reason}` ⇒ 引擎结算
1995
- * `policy_refused`(`who.party:"policy"` —— core 7.39.0 #1265 起;此前 `"none"`)、模型读策略句(「部署政策拒了、此处没有交互审批,别重试、做不需审批的
1994
+ * 🔴 **`deny` 交给引擎的形([ref])**:部署政策拒对象臂 `{allow:false, settledBy:"policy", reason}` ⇒ 引擎结算
1995
+ * `policy_refused`(`who.party:"policy"` —— core 7.39.0 [ref] 起;此前 `"none"`)、模型读策略句(「部署政策拒了、此处没有交互审批,别重试、做不需审批的
1996
1996
  * 部分」)、run 不以「用户拒绝」收束而是继续。修前是裸 `false` —— 引擎契约里那就是「一个人拒了」
1997
1997
  * (`human_refused` / `haltedOnUserRejection`),与本键「没有人会来」的自声明正好相反。(b)(c) 两臂照旧带
1998
1998
  * `"timeout"` 自报(`approval_window_expired`)。
@@ -2009,12 +2009,12 @@ export interface ServiceConfigFlat {
2009
2009
  * · APPROVAL_REQUIRE 名单工具:**要不要 ask** 由 `createApprovalBaselinePolicy` 的 durable gate 类裁决,那一层
2010
2010
  * 结构上读不到本旋钮;但那只 ask 的**答法**在协调器在场时与治理 ask 同走流内臂、同政策(引擎先问活席
2011
2011
  * `onAsk`,答 `"unavailable"` 才 park)⇒ `deny` 部署对名单工具同样当场拒。旧注「不经流内臂、不受本旋钮
2012
- * 影响」失实(test 黑盒证伪;S-689 的真 HTTP 格 `test/unattended-deny-settlement-e2e.test.ts` 用的正是
2012
+ * 影响」失实(test 黑盒证伪;[ref] 的真 HTTP 格 `test/unattended-deny-settlement-e2e.test.ts` 用的正是
2013
2013
  * 名单工具)。
2014
2014
  * · **持久回放**(窗到期后向真源收敛、`ensureAsk` 幂等重入撞上已终结的行)读出 PARKING/PARKED 时
2015
2015
  * **同样按旋钮改判** —— 它们与 (a) 是同一件事(赢家可能是别的副本或上一次调用),不统一的话同一只
2016
2016
  * ask 的终局会取决于「谁赢了那把 CAS / 重试没重试」。人的真决议回放不受影响。
2017
- * · `ensureAsk` 身份未定 / 坏行两臂**同样**改判(S-702,7.101.0;此前是唯一的例外,deny 部署上店抖动期仍会落 park):
2017
+ * · `ensureAsk` 身份未定 / 坏行两臂**同样**改判([ref],7.101.0;此前是唯一的例外,deny 部署上店抖动期仍会落 park):
2018
2018
  * 两臂的处置不变(不编造 wire 身份、不在身份未定时呈卡收人决),「不呈卡之后交什么」过同一个政策口 —— deny ⇒ 部署
2019
2019
  * 政策拒,本次插下的行同落政策结算(归属证不出的行不当场动 —— 可能正被别的登记呈卡 —— 由收敛器孤儿段收);
2020
2020
  * park ⇒ `"unavailable"` 逐字不变。
@@ -2022,9 +2022,9 @@ export interface ServiceConfigFlat {
2022
2022
  * —— 这一只 ask 行 CAS 成 DECIDED(deny) + `settled_by="policy"`(按 ask 作用域,不碰批、不连坐兄弟),与交给
2023
2023
  * 引擎的那一只同一个来源词 ⇒ 重入 / 收敛后重入回放同一个政策拒,不退化成裸 `false`(人拒)。修前行停 PARKING,
2024
2024
  * run 完成后收敛器转 DENIED 且不带来源。崩溃恢复腿(收敛器孤儿段)与两条兜底臂调**同一只** claim(`settleByPolicy`,
2025
- * S-702 / S-706,7.101.0),于是本旋钮也施加到收敛器上(装配点恒传)。仍按 PARKING 记账的只剩别的写者推进的行
2025
+ * [ref] / [ref],7.101.0),于是本旋钮也施加到收敛器上(装配点恒传)。仍按 PARKING 记账的只剩别的写者推进的行
2026
2026
  * (park 政策副本 / 切换政策之前)。
2027
- * · 🔴 `deny` 部署上**批是单 ask 批**(S-689 codex R1-F1;`deriveAskScopedBatchId`):批是 park 路由的单位,
2027
+ * · 🔴 `deny` 部署上**批是单 ask 批**([ref] codex R1-F1;`deriveAskScopedBatchId`):批是 park 路由的单位,
2028
2028
  * 整腿一批的前提是「批一关腿就随 park 结束」;deny 下引擎拿到部署政策拒后腿继续跑,整腿一批会让首只到期
2029
2029
  * 把批关掉(同腿后续的卡人批不动)、把兄弟连坐成 VOID(裸 `false` = 人拒)。
2030
2030
  */
@@ -2046,16 +2046,16 @@ export interface ServiceConfigFlat {
2046
2046
  traceThinking: boolean;
2047
2047
  /** [ref](core 5.30.0 readFace 部署座席):READ 容纳面。显式坏词启动期响亮拒;只影响读面,写面永不
2048
2048
  * 受它管(core 契约)。
2049
- * 🔴 **S-167(7.65.0)起「缺席」按 posture 分两形**(clay 裁定 2):单用户 turnkey(`REQUIRE_PRINCIPAL`
2049
+ * 🔴 **[ref](7.65.0)起「缺席」按 posture 分两形**(clay 裁定 2):单用户 turnkey(`REQUIRE_PRINCIPAL`
2050
2050
  * 未设)⇒ 铸 `open`(工作区外读默认放行);多租户 ⇒ 仍**不铸**(core 引擎默认 roots,server 不写死
2051
2051
  * 上游默认)。谁定的这一档由 {@link ServiceConfigFlat.readFaceSource} 答 —— 值与来源**同一处写**。 */
2052
2052
  readFace?: "open" | "roots";
2053
- /** S-167:上面那一档**是谁定的**(闭集四词,见 `read-face-posture.ts`)。不变量:
2053
+ /** [ref]:上面那一档**是谁定的**(闭集四词,见 `read-face-posture.ts`)。不变量:
2054
2054
  * `readFace === undefined` ⟺ `readFaceSource === "engine-default"`。
2055
2055
  * 🔴 承重面**不是**装饰:`web-admin-client/read-face.ts` 的「env 恒赢」逐键判据读的就是它(修前读的是
2056
2056
  * 「键在不在场」这个代理,posture 会铸键 ⇒ 代理当场失真,center 的 face 会被从没设过 env 的机器挡掉)。 */
2057
2057
  readFaceSource: ReadFaceSource;
2058
- /** S-591(7.95.0,车LT):任务层**掀开写围栏**这条声明的**运维天花板档位**(`TASK_WRITE_FACE_ESCALATION`)。
2058
+ /** [ref](7.95.0,车LT):任务层**掀开写围栏**这条声明的**运维天花板档位**(`TASK_WRITE_FACE_ESCALATION`)。
2059
2059
  * `"allow"` = 这台部署允许任务层把写容纳面开到任务根之外;`"refuse"` = 无条件拒;
2060
2060
  * **缺席 = 不表态** ⇒ 交给托管 posture 判(托管拒 / 单用户 turnkey 照旧放行)。判据单点在
2061
2061
  * `src/hosted-posture.ts` 的 `taskWriteFaceRefusal`。
@@ -2093,7 +2093,7 @@ export interface ServiceConfigFlat {
2093
2093
  * `READ_DENY_BUILTIN_EXCLUDE`=逗号分隔;不在表里的行名 / 空串**启动期响亮拒**。
2094
2094
  * 🔴 不变量(判据帖 G5b):删内建**绝不**削弱任务自己显式声明的 deny —— 那是另一层(additions)。 */
2095
2095
  readDenyBuiltinExclude?: readonly string[];
2096
- /** core 7.46.0 #1419:部署**声明**的配置根(`SEMA_CONFIG_DIR`,绝对路径;起服的供给动作建出目录,能不能用由引擎判)—— 交引擎 `RunnerDeps.agentConfigDir`
2096
+ /** core 7.46.0 [ref]:部署**声明**的配置根(`SEMA_CONFIG_DIR`,绝对路径;起服的供给动作建出目录,能不能用由引擎判)—— 交引擎 `RunnerDeps.agentConfigDir`
2097
2097
  * 与守卫集 `createSensitivePathPolicy` 的同名入参:内建读拒表里以 `.sema` 开头的行在这个根下同样拒,写进根下要问一次。缺席 = 没声明
2098
2098
  * ⇒ 引擎读字面 `~/.sema`(与 LKG / skill 缓存 / scheduler 店的缺省落点同一处)。读法单一属主 `sema-config-dir.ts`。 */
2099
2099
  agentConfigDir?: string;
@@ -2195,10 +2195,10 @@ export interface ServiceConfigFlat {
2195
2195
  * config, but do NOT apply it — a safe-rollout verification step before flipping to live.
2196
2196
  * `worker` (SEMA_WEB_ADMIN_WORKER=<name>; injected per-worker by the reconciler): scopes the pull to
2197
2197
  * that worker's roster via `/effective?worker=<name>`. Unset → the global roster (backward compatible).
2198
- * `credential`(S-651,BREAKING:取代 7.98.0 及以前的 `token: string` 启动快照):凭证来源活对象
2198
+ * `credential`([ref],BREAKING:取代 7.98.0 及以前的 `token: string` 启动快照):凭证来源活对象
2199
2199
  * (`center-credential.ts`),每条出站请求经它取一次值 —— `SEMA_WEB_ADMIN_TOKEN`(值)或
2200
2200
  * `SEMA_WEB_ADMIN_TOKEN_FILE`(每次读文件,轮换 / 换账号不重启)二选一(两键名与判官的属主 = settings-schema
2201
- * `WEB_ADMIN_ENV` / `judgeWebAdminCredentialDeclaration`,S-742)。
2201
+ * `WEB_ADMIN_ENV` / `judgeWebAdminCredentialDeclaration`,[ref])。
2202
2202
  * `liveBaseUrl`(编排器片 2,env `SEMA_WEB_ADMIN_LIVE_URL`):fleet 活性组(心跳 / 注销、服务租约 —— settings-schema `FLEET_LIVE_PATHS`)的基址,
2203
2203
  * 给「管理面在就绪门后、活性面另走一条不看就绪的入口」的部署;缺席 ⇒ 活性组也打 `baseUrl`(这条缺省只在 `centerFetch` 读)。
2204
2204
  * `webBaseUrl`(7.121.0,env `SEMA_WEB_ADMIN_WEB_URL`):这个中心的 **web 面固定基址**,运维声明、引擎原样转述到 `/health.center.webBaseUrl`
@@ -2211,10 +2211,10 @@ export interface ServiceConfigFlat {
2211
2211
  dryRun: boolean;
2212
2212
  worker?: string;
2213
2213
  };
2214
- /** S-866 ③(E-2):租约**连接级**失败(中心 401 / 403 / 400、凭证文件不可读;不可达 / 5xx / 超时 / 坏体)时的姿态 ——
2214
+ /** [ref] ③(E-2):租约**连接级**失败(中心 401 / 403 / 400、凭证文件不可读;不可达 / 5xx / 超时 / 坏体)时的姿态 ——
2215
2215
  * `true` ⇒ 计费入口答 503 `fleet.lease_unavailable`(`Retry-After` 5s);`false` ⇒ 照旧放行(AP 姿态,warn + 计数)。
2216
2216
  * `FLEET_LEASE_FAIL_CLOSED`(布尔词表,词表外拒启);**缺席随部署姿态派生**:`REQUIRE_PRINCIPAL=true` ⇒ `true`,单用户 ⇒ `false`;
2217
- * 显式值压过派生(部署级旋钮无条件,与 `READ_FACE` 缺省按 posture 派生 S-167 同形)。只在装了租约管理器的部署上有意义
2217
+ * 显式值压过派生(部署级旋钮无条件,与 `READ_FACE` 缺省按 posture 派生 [ref] 同形)。只在装了租约管理器的部署上有意义
2218
2218
  * (`lease:"absent"` 的部署不参与);生效值上 caps `centerWiring.failMode`。 */
2219
2219
  fleetLeaseFailClosed: boolean;
2220
2220
  /** 编排器片 2:fleet 成员的**代际**(env `FLEET_GENERATION`,settings-schema `FLEET_GENERATION_ENV`;配置渲染器是唯一写手)。
@@ -2236,7 +2236,7 @@ export interface ServiceConfigFlat {
2236
2236
  * 不自停;中心恢复授予即恢复。② 排空口 `POST /v1/admin/drain` 的**期限准入上界**(`fleet/drain-entry.ts` 规则 2):`deadlineAt` 离此刻超过它 ⇒
2237
2237
  * 400 `request.field_invalid`。 */
2238
2238
  fleetLeaseOutageMaxMs: number;
2239
- /** S-698(design-325 §2):中心凭证**续签提前量**(ms)—— `SEMA_WEB_ADMIN_TOKEN_FILE` 指向人的登录会话信封
2239
+ /** [ref](design-325 §2):中心凭证**续签提前量**(ms)—— `SEMA_WEB_ADMIN_TOKEN_FILE` 指向人的登录会话信封
2240
2240
  * (`kind:"user-session"`)时,访问令牌离到期 ≤ 本值即由引擎续签并原子改写同一文件(`center-credential-renewer.ts`)。
2241
2241
  * 缺省 5 min;`0` = 关续签、只读信封(壳负责续);其余必须是整数毫秒且落在 `CENTER_CREDENTIAL_RENEW_LEAD_MIN_MS`(一次续签请求的
2242
2242
  * 传输上界)与 `CENTER_CREDENTIAL_RENEW_LEAD_MAX_MS`(访问令牌寿命之半)之间,坏值拒启(解析口 `parseCenterCredentialRenewLeadMs`)。
@@ -2244,7 +2244,7 @@ export interface ServiceConfigFlat {
2244
2244
  centerCredentialRenewLeadMs: number;
2245
2245
  /** Dual-mode config SOURCE (DUAL-MODE-DESIGN §4): "remote" (web-admin HTTP) | "local" (.env + config.d
2246
2246
  * via @sema-agent/settings-schema FileConfigStore) | unset → remote if SEMA_WEB_ADMIN_URL is set, else pure-env.
2247
- * Env: CONFIG_PROVIDER —— S-841 起闭集 {@link CONFIG_PROVIDER_WORDS}(认不出的词拒启;空串 = 未设)。
2247
+ * Env: CONFIG_PROVIDER —— [ref] 起闭集 {@link CONFIG_PROVIDER_WORDS}(认不出的词拒启;空串 = 未设)。
2248
2248
  * The same resolver/EffectiveConfig either way (can't drift). */
2249
2249
  configProvider?: ConfigProviderWord;
2250
2250
  /** Root dir holding `config.d/<domain>.json` for the local config source. Env: CONFIG_LOCAL_DIR. */