@sema-agent/server 7.123.0 → 7.124.1

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 (224) hide show
  1. package/MIGRATION.md +138 -0
  2. package/README.md +2 -2
  3. package/README.zh-CN.md +2 -2
  4. package/USAGE.md +53 -51
  5. package/dist/approval-ask-audit-store.d.ts +27 -32
  6. package/dist/approval-ask-audit-store.js +10 -9
  7. package/dist/approval-crash-convergence.d.ts +2 -2
  8. package/dist/approval-crash-convergence.js +5 -5
  9. package/dist/approval-deny-reasons.d.ts +163 -51
  10. package/dist/approval-deny-reasons.js +79 -8
  11. package/dist/approval-policy-settlement.d.ts +4 -1
  12. package/dist/approval-policy-settlement.js +3 -2
  13. package/dist/approval-reconciler.d.ts +3 -3
  14. package/dist/approval-reconciler.js +10 -10
  15. package/dist/approval.d.ts +1 -1
  16. package/dist/approval.js +1 -1
  17. package/dist/audit.js +1 -1
  18. package/dist/auth-bridge.d.ts +8 -8
  19. package/dist/auth-bridge.js +6 -6
  20. package/dist/auth-keys.d.ts +2 -2
  21. package/dist/auto-mode-face.d.ts +1 -1
  22. package/dist/boot/budget-tracing.js +1 -1
  23. package/dist/boot/execution-env.js +1 -0
  24. package/dist/boot/leader.d.ts +1 -1
  25. package/dist/boot/memory-consolidation.d.ts +4 -4
  26. package/dist/boot/org-memory.d.ts +3 -3
  27. package/dist/boot/org-memory.js +5 -5
  28. package/dist/boot/resolve-spec.js +7 -7
  29. package/dist/boot/runner-deps.d.ts +1 -1
  30. package/dist/boot/runtime-caps.d.ts +1 -1
  31. package/dist/boot/runtime-caps.js +10 -10
  32. package/dist/boot/shutdown.d.ts +2 -2
  33. package/dist/boot/shutdown.js +2 -2
  34. package/dist/boot/side-query-lane.d.ts +3 -3
  35. package/dist/boot/{stage-02-registry-pull.d.ts → stage-02-web-admin-pull.d.ts} +2 -2
  36. package/dist/boot/{stage-02-registry-pull.js → stage-02-web-admin-pull.js} +4 -4
  37. package/dist/boot/stage-03-store-backend.d.ts +2 -2
  38. package/dist/boot/stage-04-stores.d.ts +1 -1
  39. package/dist/boot/stage-05-execution-env.d.ts +1 -1
  40. package/dist/boot/stage-06-runners.d.ts +2 -2
  41. package/dist/boot/stage-06-runners.js +6 -6
  42. package/dist/boot/stage-07-capability-layer.d.ts +2 -2
  43. package/dist/boot/stage-07-capability-layer.js +6 -5
  44. package/dist/boot/stage-08-reapers.d.ts +3 -3
  45. package/dist/boot/stage-08-reapers.js +3 -3
  46. package/dist/boot/stage-09-leader.d.ts +3 -3
  47. package/dist/boot/stage-09-leader.js +7 -7
  48. package/dist/boot/stage-10-http-server.d.ts +3 -3
  49. package/dist/boot/stage-10-http-server.js +19 -19
  50. package/dist/boot/unpriced-ceiling-verdict.d.ts +1 -1
  51. package/dist/boot/{config-center.d.ts → web-admin.d.ts} +11 -11
  52. package/dist/boot/{config-center.js → web-admin.js} +38 -22
  53. package/dist/boot/webfetch-summarize-lane.d.ts +2 -2
  54. package/dist/brain.d.ts +1 -1
  55. package/dist/brain.js +1 -1
  56. package/dist/budget.d.ts +3 -3
  57. package/dist/canonical-json.d.ts +2 -2
  58. package/dist/capabilities/center-plugins.d.ts +1 -1
  59. package/dist/capabilities/center-wiring.d.ts +12 -5
  60. package/dist/capabilities/center-wiring.js +11 -2
  61. package/dist/capabilities/composite-members.d.ts +1 -1
  62. package/dist/capabilities/composite-members.js +1 -1
  63. package/dist/capabilities/scenarios.js +2 -2
  64. package/dist/capabilities/team.d.ts +1 -1
  65. package/dist/capabilities/tool-defer.d.ts +1 -1
  66. package/dist/center-credential-renewer.d.ts +1 -1
  67. package/dist/center-credential-renewer.js +7 -7
  68. package/dist/center-credential.d.ts +9 -9
  69. package/dist/center-credential.js +6 -6
  70. package/dist/config-catalog.d.ts +7 -10
  71. package/dist/config-catalog.js +15 -15
  72. package/dist/config-d-migration.d.ts +32 -0
  73. package/dist/config-d-migration.js +59 -0
  74. package/dist/config-invariants.d.ts +14 -4
  75. package/dist/config-invariants.js +31 -2
  76. package/dist/config-lkg.d.ts +26 -6
  77. package/dist/config-lkg.js +43 -14
  78. package/dist/config-provider.d.ts +23 -19
  79. package/dist/config-provider.js +24 -26
  80. package/dist/config-types.d.ts +52 -51
  81. package/dist/config.d.ts +9 -46
  82. package/dist/config.js +33 -92
  83. package/dist/execution-lane-caps.d.ts +1 -1
  84. package/dist/fleet/drain-entry.d.ts +1 -1
  85. package/dist/fleet/engine-signal.d.ts +8 -8
  86. package/dist/fleet/fleet-bus.d.ts +12 -3
  87. package/dist/fleet/fleet-bus.js +13 -9
  88. package/dist/fleet/serving-lease.d.ts +3 -3
  89. package/dist/fleet/serving-lease.js +1 -1
  90. package/dist/fleet-client.d.ts +7 -7
  91. package/dist/fleet-client.js +5 -4
  92. package/dist/fleet-lease.d.ts +3 -3
  93. package/dist/fleet-lease.js +2 -2
  94. package/dist/host-lsp-manager.d.ts +1 -1
  95. package/dist/hosted-posture.d.ts +4 -4
  96. package/dist/http/admission.js +4 -4
  97. package/dist/http/checkpoint-ctx.d.ts +20 -3
  98. package/dist/http/checkpoint-ctx.js +13 -5
  99. package/dist/http/dispatch.js +2 -2
  100. package/dist/http/durable-run-leg.js +2 -1
  101. package/dist/http/health-self-report.d.ts +4 -4
  102. package/dist/http/health-self-report.js +3 -3
  103. package/dist/http/idempotency.d.ts +1 -1
  104. package/dist/http/resume-legs.d.ts +4 -3
  105. package/dist/http/resume-legs.js +31 -18
  106. package/dist/http/route-ctx.d.ts +8 -0
  107. package/dist/http/routes/admin-config-refresh.d.ts +1 -1
  108. package/dist/http/routes/admin-config-refresh.js +1 -1
  109. package/dist/http/routes/admin-drain.d.ts +1 -1
  110. package/dist/http/routes/admin-drain.js +5 -4
  111. package/dist/http/routes/approvals-assistant.js +4 -4
  112. package/dist/http/routes/capabilities.js +5 -5
  113. package/dist/http/routes/config-catalog.js +2 -3
  114. package/dist/http/routes/diagnostics.js +1 -1
  115. package/dist/http/routes/runs.js +8 -4
  116. package/dist/http/routes/sessions-list.js +2 -1
  117. package/dist/http/routes/sessions.js +1 -1
  118. package/dist/http/routes/side-query.js +3 -3
  119. package/dist/http/routes/tasks.js +3 -2
  120. package/dist/http/run-meta.d.ts +1 -1
  121. package/dist/http/run-meta.js +2 -2
  122. package/dist/http/server.d.ts +7 -7
  123. package/dist/http/server.js +1 -1
  124. package/dist/http/stored-body-replay.js +3 -2
  125. package/dist/index.d.ts +0 -1
  126. package/dist/index.js +0 -1
  127. package/dist/key-resolver.d.ts +1 -1
  128. package/dist/leader/wire.d.ts +2 -2
  129. package/dist/leader/wire.js +2 -1
  130. package/dist/main.js +1 -1
  131. package/dist/mcp-tool-faces.d.ts +2 -2
  132. package/dist/model-entry-refusal.d.ts +3 -3
  133. package/dist/model-entry-refusal.js +4 -4
  134. package/dist/model-provider.d.ts +2 -2
  135. package/dist/model-route-endpoint.d.ts +1 -1
  136. package/dist/model-route-url.d.ts +1 -1
  137. package/dist/model-route-url.js +2 -1
  138. package/dist/model-select.d.ts +24 -21
  139. package/dist/model-select.js +22 -17
  140. package/dist/observability/metrics.d.ts +1 -1
  141. package/dist/org-memory-admission.d.ts +1 -1
  142. package/dist/plugins/approval-ask-store-file.d.ts +4 -2
  143. package/dist/plugins/approval-ask-store-file.js +3 -3
  144. package/dist/plugins/approval-ask-store-memory.d.ts +4 -3
  145. package/dist/plugins/approval-ask-store-memory.js +10 -4
  146. package/dist/plugins/approval-ask-store-sql.d.ts +16 -2
  147. package/dist/plugins/approval-ask-store-sql.js +20 -13
  148. package/dist/plugins/caching-session-store.d.ts +0 -10
  149. package/dist/plugins/caching-session-store.js +0 -3
  150. package/dist/plugins/file-run-store.js +9 -3
  151. package/dist/plugins/leader-run-store-sql.d.ts +3 -2
  152. package/dist/plugins/leader-run-store-sql.js +3 -2
  153. package/dist/plugins/local-session-store.d.ts +20 -27
  154. package/dist/plugins/local-session-store.js +19 -17
  155. package/dist/plugins/memory-run-store.js +9 -3
  156. package/dist/plugins/one-time-migrations.js +26 -2
  157. package/dist/plugins/scheduler-support.d.ts +26 -7
  158. package/dist/plugins/scheduler-support.js +96 -53
  159. package/dist/plugins/store-backend.js +1 -1
  160. package/dist/plugins/store-contracts.d.ts +20 -4
  161. package/dist/plugins/web-search.d.ts +1 -1
  162. package/dist/plugins/web-search.js +2 -1
  163. package/dist/posture-source.d.ts +1 -1
  164. package/dist/read-face-posture.d.ts +3 -3
  165. package/dist/read-face-posture.js +1 -1
  166. package/dist/run-local.js +6 -3
  167. package/dist/runtime-caps-resolver.d.ts +4 -4
  168. package/dist/runtime-caps-resolver.js +2 -2
  169. package/dist/runtime-governance.d.ts +5 -5
  170. package/dist/sealed-key.d.ts +4 -4
  171. package/dist/sealed-key.js +3 -2
  172. package/dist/security.d.ts +3 -3
  173. package/dist/service-version.d.ts +1 -1
  174. package/dist/service-version.js +5 -0
  175. package/dist/session-titler.d.ts +0 -11
  176. package/dist/session-titler.js +3 -5
  177. package/dist/shared-memory-scope-authorizer.d.ts +4 -4
  178. package/dist/task-a2a.d.ts +1 -1
  179. package/dist/tool-approval.d.ts +43 -4
  180. package/dist/tool-approval.js +147 -98
  181. package/dist/trace/core-keyset-guard.d.ts +1 -1
  182. package/dist/trace/project.d.ts +3 -3
  183. package/dist/trace/redact.d.ts +2 -23
  184. package/dist/trace/redact.js +17 -15
  185. package/dist/trace/self-minted-wire.d.ts +134 -3
  186. package/dist/trace/self-minted-wire.js +46 -9
  187. package/dist/url-refusal.d.ts +35 -0
  188. package/dist/url-refusal.js +15 -0
  189. package/dist/user-authored-text.d.ts +31 -0
  190. package/dist/user-authored-text.js +18 -0
  191. package/dist/{config-center → web-admin-client}/apply-effective.d.ts +13 -70
  192. package/dist/{config-center → web-admin-client}/apply-effective.js +100 -119
  193. package/dist/{config-center → web-admin-client}/apply-ledger.d.ts +2 -2
  194. package/dist/{config-center → web-admin-client}/center-request.d.ts +7 -7
  195. package/dist/{config-center → web-admin-client}/center-request.js +5 -4
  196. package/dist/{config-center → web-admin-client}/effective-keys.d.ts +1 -3
  197. package/dist/{config-center → web-admin-client}/effective-keys.js +0 -9
  198. package/dist/{config-center → web-admin-client}/facade.d.ts +6 -6
  199. package/dist/{config-center → web-admin-client}/facade.js +2 -2
  200. package/dist/{config-center → web-admin-client}/http-client.d.ts +6 -10
  201. package/dist/{config-center → web-admin-client}/http-client.js +12 -12
  202. package/dist/{config-center → web-admin-client}/pull-state.d.ts +1 -1
  203. package/dist/{config-center → web-admin-client}/read-face.js +4 -4
  204. package/dist/{config-center → web-admin-client}/read-warnings.d.ts +23 -16
  205. package/dist/{config-center → web-admin-client}/read-warnings.js +33 -23
  206. package/dist/{config-center → web-admin-client}/restart-signal.d.ts +5 -3
  207. package/dist/{config-center → web-admin-client}/restart-signal.js +3 -4
  208. package/dist/{config-center → web-admin-client}/skills-mcp.d.ts +1 -1
  209. package/dist/{config-center → web-admin-client}/skills-mcp.js +13 -13
  210. package/dist/{config-center → web-admin-client}/stage-limits.d.ts +1 -7
  211. package/dist/{config-center → web-admin-client}/stage-limits.js +6 -7
  212. package/dist/{config-center → web-admin-client}/types.d.ts +12 -39
  213. package/package.json +2 -2
  214. package/skills/find-skills.md +2 -2
  215. package/dist/url-shape.d.ts +0 -31
  216. package/dist/url-shape.js +0 -41
  217. /package/dist/{config-center → web-admin-client}/apply-ledger.js +0 -0
  218. /package/dist/{config-center → web-admin-client}/hot-keys-registry.d.ts +0 -0
  219. /package/dist/{config-center → web-admin-client}/hot-keys-registry.js +0 -0
  220. /package/dist/{config-center → web-admin-client}/mcp-revocation.d.ts +0 -0
  221. /package/dist/{config-center → web-admin-client}/mcp-revocation.js +0 -0
  222. /package/dist/{config-center → web-admin-client}/pull-state.js +0 -0
  223. /package/dist/{config-center → web-admin-client}/read-face.d.ts +0 -0
  224. /package/dist/{config-center → web-admin-client}/types.js +0 -0
@@ -37,7 +37,7 @@ export interface LeaderCtx {
37
37
  /** [ref]([ref],[ref]-T1)—— 治理窗**账本店**(与 `config.usageWindows` 声明成对;声明直接从
38
38
  * 本 ctx 的 config 取,leader 不另读)。缺席 = 未配治理窗的部署。必填键,理由同 `tracer`。 */
39
39
  usageWindowStore: RunnerDeps["usageWindowStore"];
40
- /** [ref]([ref])—— center 发布的 prompt catalog(`configCenter.promptSource`,与主 runner/subRunner
40
+ /** [ref]([ref])—— center 发布的 prompt catalog(`webAdmin.promptSource`,与主 runner/subRunner
41
41
  * 同一只)。缺席 ⇒ leader 的四类顶层任务跑引擎内置提示词,而同部署其余三条腿跑运维发布的那一份,
42
42
  * 且 core 顶层新任务是**静默**落回(无 notice)。必填键,理由同 `tracer`。 */
43
43
  promptSource: RunnerDeps["promptSource"];
@@ -1,4 +1,4 @@
1
- import type { RestartSliceCtx } from "../config-center/restart-signal.js";
1
+ import type { RestartSliceCtx } from "../web-admin-client/restart-signal.js";
2
2
  import type { MemoryConsolidationDriverConfig, ServiceConfig } from "../config-types.js";
3
3
  import { type ConsolidationDriverRunRow, type ConsolidationRunReceipt, type MemoryBackend, type MemoryConsolidationDriverDeps, type RunMemoryConsolidationOptions, type SessionCaptureRecordStore } from "@sema-agent/core";
4
4
  /** D3 投影的座标签闭集。`role:<name>` 里的 name 只可能是 core 的 role 链两跳之一。 */
@@ -178,14 +178,14 @@ export declare function consolidationDriverUnwirable(input: ConsolidationWiringF
178
178
  * ({@link seatLabel} 注里同一条理由:抄一份就是第二真源,而 `ROLE_TIER_DEFAULTS` 的 flash 缺省会让手抄版答错)。
179
179
  *
180
180
  * 为什么不按 env `MODEL_CHEAP_ID` 的拼写判:它只是供座的一条路。env 角色表在它缺席时把 summarize 指回
181
- * `default`(`config.ts` 的 `cheapRef`),而目录(`config.d/models.json` / 配置中心)的 roles / 档位同样能供
181
+ * `default`(`config.ts` 的 `cheapRef`),而目录(`config.d/models.json` / web-admin)的 roles / 档位同样能供
182
182
  * consolidate / summarize 两跳 —— 判「装配后的座落不落主模型」才与计费事实同形(整理跑按座的模型计费)。
183
183
  *
184
184
  * 主模型 = 本仓给每条 task 铸的 `DEFAULT_MODEL_REF` 解到的那只(`boot/resolve-spec.ts` 每条 spec 都盖 `spec.model`),
185
185
  * **不是** core 的 `default` 角色链 —— 与 `auto-mode-face.ts` 的 `classifierRouteFor` 同一口径(共用 `model-select.ts`
186
186
  * `resolveMainModel`);喂**展开**目录,与引擎构造期 `expandTiers` 之后再解逐字同源。比的是**目录条目身份**(对象引用),
187
187
  * **不比 `Model.id` 串**(车PI 修复轮 ⑤ / codex C-2:两条不同名的条目可以共享上游 id 却各带不同的 baseUrl / 凭据 / 价,那是两只
188
- * 模型;与 `model-select.ts` `isModelAllowlisted` 同一口径)。env 的「cheap id == 主 id」不会走到这里变成两只:`config.ts` 在铸造处
188
+ * 模型;与 `model-select.ts` `isAtMentionable` 同一口径)。env 的「cheap id == 主 id」不会走到这里变成两只:`config.ts` 在铸造处
189
189
  * 就不铸那只影子条目(车PI 验修轮 B)。
190
190
  * 探针 brain 零请求:座解析只 `brainToRuntime` 它一次,真被调用 = 装配缺陷,响亮抛。
191
191
  * ⚠️ **爆炸半径**(车PI 验修轮 F10,如实登记):判决的每一臂 —— 包括未设 + 没配便宜模型的派生关(TOC 最常见的形)—— 都走
@@ -212,7 +212,7 @@ export declare function consolidationSeatBillingOf(plane: ConsolidationSeatPlane
212
212
  * 拒因说清「为什么没开」。在 `loadConfig` 判会把「未设 + scope + 便宜模型在场」这台本该派生成开的部署当场拒掉。
213
213
  *
214
214
  * ⚠️ **起服判一次**(restart-to-apply):判决落在 boot 第 4 段的装配点 {@link createConsolidationValve} —— 目录已应用
215
- * (`config.d/models.json` / 配置中心的 boot 采纳或 LKG)、记忆引擎已接线;座解析在第 6 段读这份判决。之后中心热改了 roles / 档位(或 boot 拉取超窗、目录迟到),**阀门不跟着翻**,
215
+ * (`config.d/models.json` / web-admin 的 boot 采纳或 LKG)、记忆引擎已接线;座解析在第 6 段读这份判决。之后中心热改了 roles / 档位(或 boot 拉取超窗、目录迟到),**阀门不跟着翻**,
216
216
  * 但翻的**需要**由 `memory-consolidation` 重启片报出来({@link createConsolidationValveWatch}):开着的那台盯座位漂移;
217
217
  * 派生关的那台盯「此刻重判会不会开」(codex 车内复审 F2:修前派生关没有任何读数,热加一只便宜模型零信号、阀门永远关着)。
218
218
  */
@@ -3,7 +3,7 @@
3
3
  * 的两个 seam(`RunnerDeps.memoryScopeAdmission` / `RunnerDeps.deploymentMemoryScopes`)。
4
4
  *
5
5
  * 目录源三态(单选,授权面不做双源合并):
6
- * · center 在场(configCenter 且非 dryRun)⇒ 远程腿:per-principal caps 响应的 `orgMemory` 段
6
+ * · center 在场(webAdmin 且非 dryRun)⇒ 远程腿:per-principal caps 响应的 `orgMemory` 段
7
7
  * (走 `fetchPrincipalOrgMemory` —— 与 caps 腿同一条 HTTP 请求形与同一道 principal 回声核,但**只
8
8
  * 投影 org 段**读,治理面值漂移不连坐;段键缺席=旧 center 能力握手 ⇒ 目录记 section_absent 瞬时)。
9
9
  * **独立 fetch,不复用 caps 缓存条目**(C3:org 授权段自带判别联合缓存,两张表的失败域互不干扰
@@ -17,7 +17,7 @@
17
17
  *
18
18
  * 能力探测(C12,fail-loud):多租户(requirePrincipal)部署 **且记忆面真点亮**(MEMORY_ENGINE 开 +
19
19
  * backend 非 file——见下方 `memoryPlaneLive` 注)的 projects 登记簿里挂了 org 键 ——这些键在多租户下
20
- * 按 request-origin 盖章(N2 部署形态维)——而目录源缺席(含 configCenter dryRun 形)⇒ 启动报错:
20
+ * 按 request-origin 盖章(N2 部署形态维)——而目录源缺席(含 webAdmin dryRun 形)⇒ 启动报错:
21
21
  * 该部署的每个 projectId 请求都会在 prepare 期被整拒,「audit 在跑但恒拒」不是可运行状态,响亮拒
22
22
  * 启动比静默全拒服务诚实(clay 三裁 [ref]:直接 BREAKING,不留兼容臂)。记忆面 dark 的部署里这些
23
23
  * 键根本到不了准入门,不在探测范围(复审 D-1)。
@@ -46,7 +46,7 @@ export interface OrgMemoryAdmissionWiring {
46
46
  *
47
47
  * 为什么这个消费点必须活取而上面那个可以不:共享记忆读面对 principal-less 请求**直接**把这组 scope
48
48
  * 当作全部授权事实交出去(没有第二道盖章腿能纠正它)⇒ 快照在新增方向让新登记的 org 库变成终局式
49
- * 空集、在撤销方向让已下架的 scope 继续被放行(fail-open),而 `config.projects` 恰恰是 config-center
49
+ * 空集、在撤销方向让已下架的 scope 继续被放行(fail-open),而 `config.projects` 恰恰是 web-admin
50
50
  * 标注「🟢 热生效」的字段、且 env 腿恒空(只可能由 center 灌)。判据本体与快照同源(同一个
51
51
  * `collectDeploymentOrgScopes`),差别只有取值时机。
52
52
  */
@@ -1,4 +1,4 @@
1
- import { fetchPrincipalOrgMemory } from "../config-center/http-client.js";
1
+ import { fetchPrincipalOrgMemory } from "../web-admin-client/http-client.js";
2
2
  import { createIdentityBins } from "../center-credential.js";
3
3
  import { createMemoryScopeAdmission, createOrgMemoryDirectory, parseOrgDirectoryStatic } from "../org-memory-admission.js";
4
4
  const ORG_PREFIX = "org:";
@@ -18,11 +18,11 @@ function collectDeploymentOrgScopes(config) {
18
18
  export function createOrgMemoryAdmissionWiring(opts) {
19
19
  const { config, logger, metrics } = opts;
20
20
  const deploymentMemoryScopes = collectDeploymentOrgScopes(config);
21
- const centerLeg = config.configCenter !== undefined && !config.configCenter.dryRun ? config.configCenter : undefined;
21
+ const centerLeg = config.webAdmin !== undefined && !config.webAdmin.dryRun ? config.webAdmin : undefined;
22
22
  const staticJson = config.memoryOrgDirectoryJson;
23
23
  if (centerLeg !== undefined && staticJson !== undefined) {
24
24
  logger.warn("org_memory_directory_env_ignored", {
25
- reason: "MEMORY_ORG_DIRECTORY_JSON is set but a config-center is wired — the center directory wins; the env table is IGNORED (authorization faces never merge two sources)",
25
+ reason: "MEMORY_ORG_DIRECTORY_JSON is set but a web-admin is wired — the center directory wins; the env table is IGNORED (authorization faces never merge two sources)",
26
26
  });
27
27
  }
28
28
  const directory = centerLeg !== undefined
@@ -48,8 +48,8 @@ export function createOrgMemoryAdmissionWiring(opts) {
48
48
  .map(([id]) => id);
49
49
  if (orgProjects.length > 0) {
50
50
  throw new Error(`multi-tenant deployment has org: keys in projects[${orgProjects.join(", ")}].defaultScopes but NO org-memory directory source ` +
51
- `(config-center absent/dry-run and MEMORY_ORG_DIRECTORY_JSON unset) — every request selecting these projects would be refused at prepare ` +
52
- `(memory.admission_required, fail-closed). Wire a config-center or set MEMORY_ORG_DIRECTORY_JSON, or remove the org keys.`);
51
+ `(web-admin absent/dry-run and MEMORY_ORG_DIRECTORY_JSON unset) — every request selecting these projects would be refused at prepare ` +
52
+ `(memory.admission_required, fail-closed). Wire a web-admin or set MEMORY_ORG_DIRECTORY_JSON, or remove the org keys.`);
53
53
  }
54
54
  }
55
55
  const memoryScopeAdmission = directory !== undefined
@@ -17,7 +17,7 @@ import { composeHooks, createTaskHooks } from "../hooks/hook-runner.js";
17
17
  import { HOST_POSTURE_REFUSED_CODE, taskInheritEnvRefusal, taskWriteFaceRefusal } from "../hosted-posture.js";
18
18
  import { headerStr } from "../http/principal-gate.js";
19
19
  import { explicitOperatorOk } from "../http/server.js";
20
- import { isModelAllowlisted, matchCatalogModel, modelSupportsImages, refusedCatalogEntry, resolveTaskModel, selectableCatalog, terminalCatalogName } from "../model-select.js";
20
+ import { isAtMentionable, matchCatalogModel, modelSupportsImages, refusedCatalogEntry, resolveTaskModel, selectableCatalog, terminalCatalogName } from "../model-select.js";
21
21
  import { modelUnavailableMessage } from "../model-entry-refusal.js";
22
22
  import { PerTaskImageRegistry, resolveSandboxImageRef } from "../per-task-image.js";
23
23
  import { isRemoteScratchpadLane, remoteScratchpadDirFor } from "../plugins/remote-scratchpad.js";
@@ -30,7 +30,7 @@ import { applyRuntimeGovernance } from "../runtime-governance.js";
30
30
  import { HttpError, createCodedHttpError, encodeCheckpointScope } from "../security.js";
31
31
  import { memoryProjectKeyFor, memorySpecForRequest } from "../memory-scope.js";
32
32
  import { inheritEnvFieldIssue, singleMemberOffFieldIssue } from "../request-value-closure.js";
33
- import { a2aForScenario, mcpForScenario } from "../config-center/facade.js";
33
+ import { a2aForScenario, mcpForScenario } from "../web-admin-client/facade.js";
34
34
  import { normalizeAttachments, normalizeResilience, normalizeResumeAtMode, normalizeSuggestNextPrompts, promptProfileFromBody, resolveTaskLimits, retainBackgroundProcessesFromBody, taskAgentsSpecFragment, toolMaterializeStrategyFromBody, toolNameListFromBody } from "../spec-fields.js";
35
35
  import { cwdHonored, deviceCwdHonored, effectiveHostWorkspace, inProcessSingleUserLane, isValidCwd, parseAdditionalDirectories, satisfiedByProcessCwd, shellEnvMismatchCount } from "../task-cwd.js";
36
36
  import { assertRequestA2aUnlocked, resolveRequestA2a } from "../task-a2a.js";
@@ -259,7 +259,7 @@ export function createResolveSpec(ctx) {
259
259
  logger.warn("task_additional_read_directories_ignored", { honored: false, sessionId: auth?.sessionId ?? null });
260
260
  }
261
261
  const wireCatalog = selectableCatalog(config.models, config.tiers, config.modelRefusals);
262
- const picked = resolveTaskModel(body.model ?? parsedSettings.settings?.model, objective, wireCatalog, config.atModelAllowlist, config.modelRefusals);
262
+ const picked = resolveTaskModel(body.model ?? parsedSettings.settings?.model, objective, wireCatalog, config.atMention, config.modelRefusals);
263
263
  if (picked.unavailable !== undefined) {
264
264
  const { requested, name, refusal, source } = picked.unavailable;
265
265
  if (opts?.leg === "fresh") {
@@ -271,7 +271,7 @@ export function createResolveSpec(ctx) {
271
271
  if (picked.notAllowed !== undefined) {
272
272
  const { requested, resolved, source } = picked.notAllowed;
273
273
  if (opts?.leg === "fresh") {
274
- throw new HttpError(400, `model "${requested.slice(0, 120)}" is not in this deployment's @-mention allowlist (it resolves to catalog model "${resolved}") — the allowlist is configured by the operator (config-center models.atModelAllowlist)`, { code: "request.model_not_allowed" });
274
+ throw new HttpError(400, `model "${requested.slice(0, 120)}" is not @-mentionable on this deployment (it resolves to catalog model "${resolved}") — which models can be @-mentioned is configured by the operator (models.atMention)`, { code: "request.model_not_allowed" });
275
275
  }
276
276
  metrics.inc("task_model_not_allowlisted_resume_total");
277
277
  logger.warn("task_model_not_allowlisted_resume", { requested: requested.slice(0, 120), resolved, source, sessionId: auth?.sessionId ?? null, note: "resumed leg keeps running the model it was started on — the allowlist gates fresh picks only" });
@@ -395,10 +395,10 @@ export function createResolveSpec(ctx) {
395
395
  logger.warn("compaction_model_unknown_fallback", { requested: body.compactionModel.slice(0, 120), sessionId: auth?.sessionId ?? null });
396
396
  return {};
397
397
  }
398
- if (!isModelAllowlisted(cm, wireCatalog, config.atModelAllowlist, config.modelRefusals)) {
398
+ if (!isAtMentionable(cm, wireCatalog, config.atMention, config.modelRefusals)) {
399
399
  const terminal = terminalCatalogName(cm, wireCatalog, config.modelRefusals) ?? cm;
400
400
  if (opts?.leg === "fresh") {
401
- throw new HttpError(400, `compactionModel "${body.compactionModel.slice(0, 120)}" is not in this deployment's @-mention allowlist (it resolves to catalog model "${terminal}") — the allowlist is configured by the operator (config-center models.atModelAllowlist)`, { code: "request.model_not_allowed" });
401
+ throw new HttpError(400, `compactionModel "${body.compactionModel.slice(0, 120)}" is not @-mentionable on this deployment (it resolves to catalog model "${terminal}") — which models can be @-mentioned is configured by the operator (models.atMention)`, { code: "request.model_not_allowed" });
402
402
  }
403
403
  metrics.inc("task_model_not_allowlisted_resume_total");
404
404
  logger.warn("task_model_not_allowlisted_resume", { requested: body.compactionModel.slice(0, 120), resolved: terminal, source: "compaction", sessionId: auth?.sessionId ?? null, note: "resumed leg keeps the compaction model it was started with — the allowlist gates fresh picks only" });
@@ -622,7 +622,7 @@ export function createResolveSpec(ctx) {
622
622
  throw new HttpError(400, "sandboxImageProfile is only supported on the k8s sandbox backend");
623
623
  }
624
624
  if (!imageIndex) {
625
- throw new HttpError(400, "sandboxImageProfile requires the image index (config-center backend not configured)");
625
+ throw new HttpError(400, "sandboxImageProfile requires the image index (web-admin backend not configured)");
626
626
  }
627
627
  if (!auth?.sessionId) {
628
628
  throw new HttpError(400, "sandboxImageProfile requires a resolved session");
@@ -204,7 +204,7 @@ export interface RunnerDepsCtx {
204
204
  permissionRuleStore: RunnerDeps["permissionRuleStore"];
205
205
  /** [ref](core 5.50 [ref]):mid-turn MCP 撤销台账席 —— core 每次 MCP dispatch 前同步探
206
206
  * `isRevoked(serverName)`,被撤服务器的调用结算为 coded 拒绝 `mcp.server_revoked`(known-not-executed)。
207
- * 来源=configCenter.takeMcpRevocations()(取走即声明接线,restart 豁免与承接绑同一动作)。
207
+ * 来源=webAdmin.takeMcpRevocations()(取走即声明接线,restart 豁免与承接绑同一动作)。
208
208
  * 缺席=undefined=pre-338 语义(纯 env 部署无中心撤销面)。 */
209
209
  mcpRevocations: RunnerDeps["mcpRevocations"];
210
210
  /**
@@ -23,7 +23,7 @@ export interface RuntimeCapsCtx {
23
23
  *
24
24
  * governed 的语义是「per-principal verdict **必答**」:core 对 verdict 缺席一律**拒跑**(fail-closed,部署显式
25
25
  * 选的方向)。verdict 源**两条**(析取,[ref] 起):①SQL 后端上的 `memory_optout_grant` 表(三层折叠后
26
- * 恒答显式 boolean),②非 dry-run 的 config center 发 `EntitlementRuntimeCaps.allowMemoryOptOut`。
26
+ * 恒答显式 boolean),②非 dry-run 的 web-admin 发 `EntitlementRuntimeCaps.allowMemoryOptOut`。
27
27
  * governed 而两源皆无 ⇒ 每一个 `capture:"off"` 声明都被 core 以
28
28
  * `memory.capture_optout_denied` 拒掉,而运维看到的只是一台「启动成功、opt-out 全拒」的机器 —— 正是
29
29
  * 「阀门开着而配不出来 ⇒ 悄悄读成别的」那一形。所以在**启动期**点名:接 SQL 后端(表随中央
@@ -1,6 +1,6 @@
1
1
  import { applyGovernedVerdictAbsenceWarning, applyLocalAutoModeDeny, applyMemoryOptOutGrant, applyObserverEnvOptIn, centerEntitlementSourceWired, createPrincipalEntitlementsClient, } from "../runtime-caps-resolver.js";
2
2
  import { scopedTokenNeedsWorker } from "../center-credential.js";
3
- import { CENTER_CREDENTIAL_ENV } from "@sema-agent/settings-schema";
3
+ import { WEB_ADMIN_ENV } from "@sema-agent/settings-schema";
4
4
  export function assertMemoryCapturePolicyWirable(input) {
5
5
  if (input.policy !== "governed")
6
6
  return;
@@ -13,9 +13,9 @@ export function assertMemoryCapturePolicyWirable(input) {
13
13
  `own contract), so a governed worker without a source would refuse every \`memory.capture:"off"\` declaration and the ` +
14
14
  `refusal would read as an entitlement denial rather than the misconfiguration it is. This version has TWO verdict sources ` +
15
15
  `— wire either one: (1) the \`memory_optout_grant\` table on a SQL store backend (DB_BACKEND=mysql|pg; the table is ` +
16
- `created by the central ensureSchema and administered through /v1/admin/memory-optout), or (2) a config center that ` +
17
- `EMITS \`allowMemoryOptOut\` in each principal's entitlement caps (SEMA_REGISTRY_URL + ${CENTER_CREDENTIAL_ENV.token}, ` +
18
- `SEMA_REGISTRY_DRY_RUN off — dry-run observes without applying, so it is not a source; and note the key is OPTIONAL in ` +
16
+ `created by the central ensureSchema and administered through /v1/admin/memory-optout), or (2) a web-admin that ` +
17
+ `EMITS \`allowMemoryOptOut\` in each principal's entitlement caps (${WEB_ADMIN_ENV.url} + ${WEB_ADMIN_ENV.token}, ` +
18
+ `${WEB_ADMIN_ENV.dryRun} off — dry-run observes without applying, so it is not a source; and note the key is OPTIONAL in ` +
19
19
  `the entitlement schema: a center that never emits it leaves every verdict absent, i.e. every opt-out still refused). ` +
20
20
  `Or set MEMORY_CAPTURE_POLICY=open (opt-outs take effect; only an explicit per-principal false denies) or ` +
21
21
  `MEMORY_CAPTURE_POLICY=capture-required (every opt-out declaration refused, no source consulted).`);
@@ -35,18 +35,18 @@ export function createRuntimeCaps(ctx) {
35
35
  const governedCenterOnlySource = config.memoryCapturePolicy === "governed" && !grantSourceWired && centerEntitlementSourceWired(config);
36
36
  if (governedCenterOnlySource) {
37
37
  logger.warn("memory_capture_governed_center_only_source", {
38
- reason: "MEMORY_CAPTURE_POLICY=governed with NO local memory_optout_grant table: the only verdict source is the config center, and `allowMemoryOptOut` is an OPTIONAL entitlement key — for any principal whose caps omit it the verdict is ABSENT and core refuses that session's memory.capture:\"off\" (memory.capture_optout_denied, fail-closed). ANONYMOUS/system runs are worse off still: the center source is per-principal and is never consulted without an identity, so on this shape a principal-less run can never obtain a verdict at all. Verify the center emits allowMemoryOptOut for every principal, or wire a SQL backend (DB_BACKEND=mysql|pg) so the grant table answers (its deployment-default row also covers anonymous runs).",
38
+ reason: "MEMORY_CAPTURE_POLICY=governed with NO local memory_optout_grant table: the only verdict source is the web-admin, and `allowMemoryOptOut` is an OPTIONAL entitlement key — for any principal whose caps omit it the verdict is ABSENT and core refuses that session's memory.capture:\"off\" (memory.capture_optout_denied, fail-closed). ANONYMOUS/system runs are worse off still: the center source is per-principal and is never consulted without an identity, so on this shape a principal-less run can never obtain a verdict at all. Verify the center emits allowMemoryOptOut for every principal, or wire a SQL backend (DB_BACKEND=mysql|pg) so the grant table answers (its deployment-default row also covers anonymous runs).",
39
39
  });
40
40
  }
41
- if (centerEntitlementSourceWired(config) && config.configCenter && scopedTokenNeedsWorker(config.configCenter.credential.read(), config.configCenter.worker)) {
41
+ if (centerEntitlementSourceWired(config) && config.webAdmin && scopedTokenNeedsWorker(config.webAdmin.credential.read(), config.webAdmin.worker)) {
42
42
  logger.warn("runtime_caps_scoped_token_no_worker", {
43
- reason: `${CENTER_CREDENTIAL_ENV.token} is a worker-scoped wpt_ token but SEMA_REGISTRY_WORKER is unset → center 403s per-principal caps → ALL workflow self-orchestration will be fail-closed denied. Set SEMA_REGISTRY_WORKER (the orchestrator normally injects it) or use the full SERVICE_PULL_TOKEN.`,
43
+ reason: `${WEB_ADMIN_ENV.token} is a worker-scoped wpt_ token but ${WEB_ADMIN_ENV.worker} is unset → web-admin 403s per-principal caps → ALL workflow self-orchestration will be fail-closed denied. Set ${WEB_ADMIN_ENV.worker} (the orchestrator normally injects it) or use the full SERVICE_PULL_TOKEN.`,
44
44
  });
45
45
  }
46
- const principalCaps = centerEntitlementSourceWired(config) && config.configCenter
46
+ const principalCaps = centerEntitlementSourceWired(config) && config.webAdmin
47
47
  ? createPrincipalEntitlementsClient({
48
- center: config.configCenter,
49
- ...(config.configCenter.worker ? { worker: config.configCenter.worker } : {}),
48
+ center: config.webAdmin,
49
+ ...(config.webAdmin.worker ? { worker: config.webAdmin.worker } : {}),
50
50
  onError: (err, principal) => logger.warn("runtime_caps_resolve_failed", { principal, err: String(err) }),
51
51
  })
52
52
  : undefined;
@@ -79,9 +79,9 @@ export interface ShutdownCtx {
79
79
  * HTTP 层不能自作主张。所以 `drainState.draining` 翻真的那一刻,这里同步调 `beginDrain()`。
80
80
  */
81
81
  deviceHub: import("../device-ws-hub.js").DeviceWsHub | undefined;
82
- /** [ref]-2:config 60s 刷新环(config-center startRefreshLoop)——不停的话停机中途还可能热应用
82
+ /** [ref]-2:config 60s 刷新环(web-admin startRefreshLoop)——不停的话停机中途还可能热应用
83
83
  * 一份新配置。缺席 = 纯 env 部署没起环。 */
84
- configCenter: {
84
+ webAdmin: {
85
85
  stopRefreshLoop(): void;
86
86
  } | undefined;
87
87
  /** S-929:活体审批协调器(`TOOL_APPROVAL_ENABLED` 关 ⇒ 缺席)。hardShutdown 起点调它的 `drainForShutdown`:本进程握着的活卡
@@ -17,7 +17,7 @@ export function backgroundGraceRemainingMs(a) {
17
17
  return Math.max(0, Math.min(a.softStoppedAt + a.graceMs, a.deadlineMs) - a.now);
18
18
  }
19
19
  export function installShutdownHandlers(ctx) {
20
- const { config, logger, server, reaper, fleetReconcile, retentionLane, releaseRetentionLease, otelExporter, breakerState, costQuota, rateLimiter, runner, subRunner, lspManager, workflowNotifyJournal, fleetClient, backend, drainState, storeLiveProbe, configCenter, version, deviceHub, toolApproval, parkCommits, servingLease, } = ctx;
20
+ const { config, logger, server, reaper, fleetReconcile, retentionLane, releaseRetentionLease, otelExporter, breakerState, costQuota, rateLimiter, runner, subRunner, lspManager, workflowNotifyJournal, fleetClient, backend, drainState, storeLiveProbe, webAdmin, version, deviceHub, toolApproval, parkCommits, servingLease, } = ctx;
21
21
  const dataRoot = config.localDataRoot;
22
22
  if (dataRoot) {
23
23
  const prior = readCrashLast(dataRoot);
@@ -107,7 +107,7 @@ export function installShutdownHandlers(ctx) {
107
107
  storeLiveProbe?.stop();
108
108
  servingLease?.stop();
109
109
  void deviceHub?.close().catch((err) => logger.warn("device_hub_close_failed", { err: String(err) }));
110
- configCenter?.stopRefreshLoop();
110
+ webAdmin?.stopRefreshLoop();
111
111
  otelExporter?.stop();
112
112
  breakerState?.stop();
113
113
  runner.sessions.dispose();
@@ -69,9 +69,9 @@ export type SideQueryLane = (spec: SideQuerySpec) => Promise<SideQueryResult>;
69
69
  export interface SideQueryLaneCtx {
70
70
  /** 与 `RunnerDeps.brain` **同一只**实例([ref] 换装后本席不再包它 —— key 走 spec 座位)。 */
71
71
  brain: Brain;
72
- /** 活配置引用:目录/角色表/网关地址被 config-center 就地热应用(`mutateInPlace`),按调用取值才跟得上。 */
72
+ /** 活配置引用:目录/角色表/网关地址被 web-admin 就地热应用(`mutateInPlace`),按调用取值才跟得上。 */
73
73
  config: ServiceConfig;
74
- /** 活引用取值 —— registry 热应用整个换 resolver 引用(`boot/config-center.ts` 每次 apply 重铸)。 */
74
+ /** 活引用取值 —— registry 热应用整个换 resolver 引用(`boot/web-admin.ts` 每次 apply 重铸)。 */
75
75
  getKeyResolver: () => KeyResolver;
76
76
  }
77
77
  /**
@@ -119,7 +119,7 @@ export declare function createPerModelKeyBrain(brain: Brain, getKeyResolver: ()
119
119
  * ([ref] codex R1-F2:目录与密钥表零 await 窗成对换代):
120
120
  * · `models` = `expandTiers(config.models, config.tiers)` —— 档位词 / CC 别名(`flash`/`opus`/…)在
121
121
  * side-query 上照常可选路(core 的 `Runner` 构造时做同一件事),且 `Runner` 那次展开是**构造时快照**,
122
- * 而本路由的模型白名单门(`routes/side-query.ts` 的 `isModelAllowlisted`)按请求现算同一张增广目录 ——
122
+ * 而本路由的模型白名单门(`routes/side-query.ts` 的 `isAtMentionable`)按请求现算同一张增广目录 ——
123
123
  * 两边取同一份才不会出现「名单放行、选路说不认识」的分歧;
124
124
  * · `getKeyResolver()` —— 热应用整个换 resolver 引用,活取才跟得上(装配时快照 = 旧 key 用到重启)。
125
125
  * (第三件 `config.gatewayBaseUrl` 曾是 off-route 记债判据的参照系,core 5.57.0 起判据整只上收 core 的
@@ -1,10 +1,10 @@
1
1
  import type { runStage01 } from "./stage-01-config.js";
2
2
  export declare function runStage02(ctx: Awaited<ReturnType<typeof runStage01>>): Promise<{
3
3
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
4
- configCenter: import("./config-center.js").ConfigCenterRuntime;
4
+ webAdmin: import("./web-admin.js").WebAdminRuntime;
5
5
  config: import("../config-types.js").ServiceConfig;
6
6
  localRoot: string;
7
7
  logger: import("../index.js").Logger;
8
8
  metrics: import("../index.js").Metrics;
9
9
  }>;
10
- //# sourceMappingURL=stage-02-registry-pull.d.ts.map
10
+ //# sourceMappingURL=stage-02-web-admin-pull.d.ts.map
@@ -1,12 +1,12 @@
1
1
  import { createUnpricedCeilingVerdict } from "./unpriced-ceiling-verdict.js";
2
- import { createConfigCenterRuntime } from "./config-center.js";
2
+ import { createWebAdminRuntime } from "./web-admin.js";
3
3
  import { composeExecutionLane, FILE_SOURCED_LANES } from "./execution-lane.js";
4
4
  import { serviceConfigSourceKind } from "../config-provider.js";
5
5
  import { defaultModelRefusal, refusedNameMintedRefusal } from "../model-entry-refusal.js";
6
6
  export async function runStage02(ctx) {
7
7
  const { config, localRoot, logger, metrics } = ctx;
8
8
  await composeExecutionLane(config, { configSource: serviceConfigSourceKind(config), localRoot, logger, drivesFromFile: FILE_SOURCED_LANES });
9
- const configCenter = await createConfigCenterRuntime({ config, logger, metrics, localRoot });
9
+ const webAdmin = await createWebAdminRuntime({ config, logger, metrics, localRoot });
10
10
  const noDefaultModel = defaultModelRefusal(config, "env");
11
11
  if (noDefaultModel !== undefined) {
12
12
  throw new Error(noDefaultModel);
@@ -17,6 +17,6 @@ export async function runStage02(ctx) {
17
17
  }
18
18
  const ceilingVerdict = createUnpricedCeilingVerdict({ config, logger });
19
19
  ceilingVerdict.judge();
20
- return { ...ctx, ceilingVerdict, configCenter };
20
+ return { ...ctx, ceilingVerdict, webAdmin };
21
21
  }
22
- //# sourceMappingURL=stage-02-registry-pull.js.map
22
+ //# sourceMappingURL=stage-02-web-admin-pull.js.map
@@ -1,4 +1,4 @@
1
- import type { runStage02 } from "./stage-02-registry-pull.js";
1
+ import type { runStage02 } from "./stage-02-web-admin-pull.js";
2
2
  export declare function runStage03(ctx: Awaited<ReturnType<typeof runStage02>>): Promise<{
3
3
  backend: import("../index.js").StoreBackend | undefined;
4
4
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
@@ -24,7 +24,7 @@ export declare function runStage03(ctx: Awaited<ReturnType<typeof runStage02>>):
24
24
  taskListLane: import("./task-list-lane.js").TaskListLane;
25
25
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
26
26
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
27
- configCenter: import("./config-center.js").ConfigCenterRuntime;
27
+ webAdmin: import("./web-admin.js").WebAdminRuntime;
28
28
  config: import("../config-types.js").ServiceConfig;
29
29
  localRoot: string;
30
30
  logger: import("../index.js").Logger;
@@ -65,7 +65,7 @@ export declare function runStage04(ctx: Awaited<ReturnType<typeof runStage03>>):
65
65
  taskListLane: import("./task-list-lane.js").TaskListLane;
66
66
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
67
67
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
68
- configCenter: import("./config-center.js").ConfigCenterRuntime;
68
+ webAdmin: import("./web-admin.js").WebAdminRuntime;
69
69
  config: import("../config-types.js").ServiceConfig;
70
70
  localRoot: string;
71
71
  logger: import("../index.js").Logger;
@@ -81,7 +81,7 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
81
81
  taskListLane: import("./task-list-lane.js").TaskListLane;
82
82
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
83
83
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
84
- configCenter: import("./config-center.js").ConfigCenterRuntime;
84
+ webAdmin: import("./web-admin.js").WebAdminRuntime;
85
85
  config: import("../config-types.js").ServiceConfig;
86
86
  localRoot: string;
87
87
  logger: import("../index.js").Logger;
@@ -24,7 +24,7 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
24
24
  hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
25
25
  hookAgentRunner: Runner;
26
26
  hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
27
- mcpRevocations: import("../config-center/mcp-revocation.js").McpRevocationLedger;
27
+ mcpRevocations: import("../web-admin-client/mcp-revocation.js").McpRevocationLedger;
28
28
  memoryConsolidationFaces: import("./memory-consolidation.js").MemoryConsolidationFaces | undefined;
29
29
  memoryOptOutGrantStore: import("../plugins/memory-optout-grant-store-sql.js").MemoryOptOutGrantStore | undefined;
30
30
  orgMemoryAdmission: import("./org-memory.js").OrgMemoryAdmissionWiring;
@@ -142,7 +142,7 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
142
142
  taskListLane: import("./task-list-lane.js").TaskListLane;
143
143
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
144
144
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
145
- configCenter: import("./config-center.js").ConfigCenterRuntime;
145
+ webAdmin: import("./web-admin.js").WebAdminRuntime;
146
146
  config: import("../config-types.js").ServiceConfig;
147
147
  localRoot: string;
148
148
  logger: import("../index.js").Logger;
@@ -21,7 +21,7 @@ import { createGovernanceSeams } from "./governance-seams.js";
21
21
  import { createSharedMemoryScopeAuthorizer } from "../shared-memory-scope-authorizer.js";
22
22
  import { parkedAskRedeem, runStore } from "./late-binds.js";
23
23
  export function runStage06(ctx) {
24
- const { backend, backgroundAgentStore, brain, sessionIncarnationOf, config, configCenter, consolidationValve, deploymentHooks, executionEnvFactory, fileHistoryStore, localRoot, logger, lspManager, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memorySyncRunner, metrics, perSessionCwd, permissionRuleProvider, pricing, rosterStore, ruleConsent, sendUserFileTaskEnvs, sessionCaptureRecordStore, sessionCaptureRecords, sessionPolicyStore, sessionStore, taskAttachmentStore, taskListLane, toolResultStore, tracer, usageWindowStore } = ctx;
24
+ const { backend, backgroundAgentStore, brain, sessionIncarnationOf, config, webAdmin, consolidationValve, deploymentHooks, executionEnvFactory, fileHistoryStore, localRoot, logger, lspManager, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memorySyncRunner, metrics, perSessionCwd, permissionRuleProvider, pricing, rosterStore, ruleConsent, sendUserFileTaskEnvs, sessionCaptureRecordStore, sessionCaptureRecords, sessionPolicyStore, sessionStore, taskAttachmentStore, taskListLane, toolResultStore, tracer, usageWindowStore } = ctx;
25
25
  const { sqlWorkflowRunStore, workflowNotifyJournal, workflowCompletionInbox, deliverWorkflowCompletion, workflowNotifyGate, fleetBus, workflowRunStore, workflowJournalStore, outcomeSink, workflowRecoverOpts, workflowAgentRegistry, subagentSteerRegistry, workflowAgentSessionIndex, } = createWorkflowOrchestration({ config, logger, metrics, localRoot, backend, getRunStore: () => runStore });
26
26
  const parkCommitted = backend?.checkpoint && config.durableApproval ? createParkCommitWatch(backend.checkpoint(logger)) : undefined;
27
27
  const checkpointStore = parkCommitted?.store;
@@ -63,7 +63,7 @@ export function runStage06(ctx) {
63
63
  models: config.models,
64
64
  tiers: config.tiers,
65
65
  roles: config.roles,
66
- getApiKeyAndHeaders: createPerModelAuthSeat(() => configCenter.getKeyResolver()),
66
+ getApiKeyAndHeaders: createPerModelAuthSeat(() => webAdmin.getKeyResolver()),
67
67
  })
68
68
  : undefined;
69
69
  const memoryConsolidationFaces = consolidationSeat && memoryEngine
@@ -104,14 +104,14 @@ export function runStage06(ctx) {
104
104
  ],
105
105
  retentionExecutorWired: config.retentionSweep.intervalSec > 0 && retentionExecutor !== undefined && retentionLaneStore !== undefined,
106
106
  });
107
- const mcpRevocations = configCenter.takeMcpRevocations();
107
+ const mcpRevocations = webAdmin.takeMcpRevocations();
108
108
  const workflowModelAllowlistSnapshot = workflowModelAllowlistFor(config) ?? [];
109
109
  const runnerDeps = createRunnerDeps({
110
110
  consolidationSeat,
111
111
  hands: commitHands,
112
112
  mcpRevocations,
113
113
  sessionIncarnationOf,
114
- config, logger, metrics, localRoot, promptSource: configCenter.promptSource, rosterStore, backgroundAgentStore, mailboxStore, mailboxRecipientLifecycle, usageWindowStore, brain,
114
+ config, logger, metrics, localRoot, promptSource: webAdmin.promptSource, rosterStore, backgroundAgentStore, mailboxStore, mailboxRecipientLifecycle, usageWindowStore, brain,
115
115
  pricing, tracer, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine,
116
116
  sessionCaptureRecords,
117
117
  memorySyncRunner, toolResultStore: runnerOffloadStore, checkpointStore, sessionPolicyStore, runtimeCapsResolver, fileHistoryStore,
@@ -124,7 +124,7 @@ export function runStage06(ctx) {
124
124
  });
125
125
  const runner = new Runner(runnerDeps);
126
126
  const handslessRunner = new Runner(withoutExecutionEnv(runnerDeps));
127
- const { hookModelFor, hookLlm } = createHookLlm({ config, getKeyResolver: () => configCenter.getKeyResolver(), metrics });
127
+ const { hookModelFor, hookLlm } = createHookLlm({ config, getKeyResolver: () => webAdmin.getKeyResolver(), metrics });
128
128
  const hookAgentRunner = new Runner({ ...runnerDeps, sessionStore: new TtlSessionStore({ defaultTtlDays: 1 / 24 }) });
129
129
  const agentHookCall = async ({ prompt, model, timeoutMs, system }) => {
130
130
  const pick = hookModelFor(model);
@@ -182,7 +182,7 @@ export function runStage06(ctx) {
182
182
  brain,
183
183
  pricing,
184
184
  tracer,
185
- promptSource: configCenter.promptSource,
185
+ promptSource: webAdmin.promptSource,
186
186
  executionEnvFactory,
187
187
  lspManager,
188
188
  backgroundAgentStore,
@@ -39,7 +39,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
39
39
  hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
40
40
  hookAgentRunner: import("@sema-agent/core").Runner;
41
41
  hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
42
- mcpRevocations: import("../config-center/mcp-revocation.js").McpRevocationLedger;
42
+ mcpRevocations: import("../web-admin-client/mcp-revocation.js").McpRevocationLedger;
43
43
  memoryConsolidationFaces: import("./memory-consolidation.js").MemoryConsolidationFaces | undefined;
44
44
  memoryOptOutGrantStore: import("../plugins/memory-optout-grant-store-sql.js").MemoryOptOutGrantStore | undefined;
45
45
  orgMemoryAdmission: import("./org-memory.js").OrgMemoryAdmissionWiring;
@@ -157,7 +157,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
157
157
  taskListLane: import("./task-list-lane.js").TaskListLane;
158
158
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
159
159
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
160
- configCenter: import("./config-center.js").ConfigCenterRuntime;
160
+ webAdmin: import("./web-admin.js").WebAdminRuntime;
161
161
  config: import("../config-types.js").ServiceConfig;
162
162
  localRoot: string;
163
163
  logger: import("../index.js").Logger;
@@ -25,8 +25,9 @@ import { createRunnerDepsOnAsk } from "./runner-deps.js";
25
25
  import { bindRateLimiter, bindRunStore } from "./late-binds.js";
26
26
  import { buildDisplaySafeUrl } from "../trace/redact.js";
27
27
  import * as facts from "../capability-facts.js";
28
+ import { WEB_ADMIN_ENV } from "@sema-agent/settings-schema";
28
29
  export async function runStage07(ctx) {
29
- const { approvalAskAudit, approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, configCenter, counterDegradeHook, durableEnabled, handslessSubRunner, instanceId, localRoot, logger, memoryEngine, metrics, question, runner, runnerDeps, sendUserFileToolSpec, sessionEnvSelection, sessionStore, subRunner, subRunnerSessions, taskListLane, toolApproval } = ctx;
30
+ const { approvalAskAudit, approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, webAdmin, counterDegradeHook, durableEnabled, handslessSubRunner, instanceId, localRoot, logger, memoryEngine, metrics, question, runner, runnerDeps, sendUserFileToolSpec, sessionEnvSelection, sessionStore, subRunner, subRunnerSessions, taskListLane, toolApproval } = ctx;
30
31
  const authorize = createAuthorizer(config, sessionStore);
31
32
  const runStore = backend ? backend.run() : undefined;
32
33
  bindRunStore(runStore);
@@ -116,7 +117,7 @@ export async function runStage07(ctx) {
116
117
  if (config.requirePrincipal && config.selfOrchestrationEnabled && !config.selfOrchestrationWorkerIsolation)
117
118
  logger.warn("self_orchestration_no_worker_isolation", { detail: "multi-tenant self-orchestration without SELF_ORCHESTRATION_WORKER_ISOLATION=true — a tenant workflow can starve the host event loop (availability risk). Set it to enable worker_thread resource isolation." });
118
119
  if (selfOrchestrationDenial(config, centerEntitlementSourceWired(config)) !== null)
119
- logger.warn("self_orchestration_no_entitlement_source", { detail: "SELF_ORCHESTRATION_ENABLED is on and REQUIRE_PRINCIPAL is on, but no per-principal entitlement source is wired (no config center, or it is in dry-run). core's allowWorkflows is tighten-only — an absent resolver leaves it ungated — so this service fail-closes self-orchestration for EVERY principal: no task on this worker can ever get the workflow engine. /v1/capabilities now reports workflows:false (workflowsGate.denial=\"entitlement_resolver_absent\") and a submit carrying selfOrchestration/settings.ultracode is refused 501 instead of silently downgraded. Wire a config center (SEMA_REGISTRY_URL + token, not dry-run), or set SELF_ORCHESTRATION_ENABLED=false." });
120
+ logger.warn("self_orchestration_no_entitlement_source", { detail: `SELF_ORCHESTRATION_ENABLED is on and REQUIRE_PRINCIPAL is on, but no per-principal entitlement source is wired (no web-admin, or it is in dry-run). core's allowWorkflows is tighten-only — an absent resolver leaves it ungated — so this service fail-closes self-orchestration for EVERY principal: no task on this worker can ever get the workflow engine. /v1/capabilities now reports workflows:false (workflowsGate.denial="entitlement_resolver_absent") and a submit carrying selfOrchestration/settings.ultracode is refused 501 instead of silently downgraded. Wire a web-admin (${WEB_ADMIN_ENV.url} + token, not dry-run), or set SELF_ORCHESTRATION_ENABLED=false.` });
120
121
  {
121
122
  const inert = buildForceDurableGateInertNotice({
122
123
  entitlementSourceWired: centerEntitlementSourceWired(config),
@@ -133,7 +134,7 @@ export async function runStage07(ctx) {
133
134
  : new RateLimiter(config.rateLimitPerMin);
134
135
  bindRateLimiter(rateLimiter);
135
136
  let skills = loadDeploymentSkills(config);
136
- skills = await configCenter.applyCenterCapabilities(skills);
137
+ skills = await webAdmin.applyCenterCapabilities(skills);
137
138
  const repoClient = config.gitApiBaseUrl ? createRepoClient(config.gitApiKind, config.gitApiBaseUrl, config.gitApiToken) : undefined;
138
139
  const webSearchCfg = webSearchConfigFromEnv();
139
140
  const webSearch = webSearchCfg ? createWebSearchBackend(webSearchCfg) : undefined;
@@ -150,7 +151,7 @@ export async function runStage07(ctx) {
150
151
  .catch((e) => logger.warn("web_search_probe_failed", { provider: webSearchCfg.provider, error: e instanceof Error ? e.message : String(e) }));
151
152
  }
152
153
  const ensureChildSessionDurable = checkpointStore && config.sessionBackend === "tidb" ? (sessionId) => ensureChildSessionDurableWithPromotion(sessionStore, subRunnerSessions, sessionId) : undefined;
153
- const webFetchSummarize = createWebFetchSummarizeLane({ brain, config, getKeyResolver: () => configCenter.getKeyResolver(), logger });
154
+ const webFetchSummarize = createWebFetchSummarizeLane({ brain, config, getKeyResolver: () => webAdmin.getKeyResolver(), logger });
154
155
  const scenarioDeps = {
155
156
  runner, subRunner, handslessSubRunner, model: DEFAULT_MODEL_REF, skills, repoClient, requirePrincipal: config.requirePrincipal,
156
157
  webSearch: webSearch ? webSearch : undefined, metrics, logger, webFetchSummarize,
@@ -176,7 +177,7 @@ export async function runStage07(ctx) {
176
177
  : undefined;
177
178
  const scenarioDetails = builtinScenarioDetails(scenarios, scenarioDeps);
178
179
  const builtinScenarioNames = Object.keys(scenarioDetails);
179
- configCenter.applyCenterScenarios({ scenarioDeps, scenarios, scenarioDetails, builtinScenarioNames });
180
+ webAdmin.applyCenterScenarios({ scenarioDeps, scenarios, scenarioDetails, builtinScenarioNames });
180
181
  const defaultScenarioRefusal = danglingScenarioRefusal(config.defaultScenario, "deployment", Object.keys(scenarios));
181
182
  if (defaultScenarioRefusal !== undefined)
182
183
  throw new Error(defaultScenarioRefusal);
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * 装配第 8 段 —— **后台 reaper**(§3-8)。
3
3
  * 维护 tick(startReapers)+ 托管留存 lane(独立定时器)+ OTLP 导出 + 限额座换代口 + 五只 boot Runner 的
4
- * 原子换代闭包 + config-center 刷新环与 key resolver 首建。
4
+ * 原子换代闭包 + web-admin 刷新环与 key resolver 首建。
5
5
  * ⚠️ 位置即契约:刷新环必须在 `new Runner` 之后(它要五只 boot Runner 的换代口 `swapRunnerDeps`);
6
6
  * key resolver 首建读的必须是 boot apply 之后的 config。
7
7
  * 🔴 `runDenySweep` 的 holder 住在 `late-binds.ts`(赋值点在第十段的 server 之后)。
@@ -52,7 +52,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
52
52
  hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
53
53
  hookAgentRunner: Runner;
54
54
  hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
55
- mcpRevocations: import("../config-center/mcp-revocation.js").McpRevocationLedger;
55
+ mcpRevocations: import("../web-admin-client/mcp-revocation.js").McpRevocationLedger;
56
56
  memoryConsolidationFaces: import("./memory-consolidation.js").MemoryConsolidationFaces | undefined;
57
57
  memoryOptOutGrantStore: import("../plugins/memory-optout-grant-store-sql.js").MemoryOptOutGrantStore | undefined;
58
58
  orgMemoryAdmission: import("./org-memory.js").OrgMemoryAdmissionWiring;
@@ -170,7 +170,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
170
170
  taskListLane: import("./task-list-lane.js").TaskListLane;
171
171
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
172
172
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
173
- configCenter: import("./config-center.js").ConfigCenterRuntime;
173
+ webAdmin: import("./web-admin.js").WebAdminRuntime;
174
174
  config: import("../config-types.js").ServiceConfig;
175
175
  localRoot: string;
176
176
  logger: import("../index.js").Logger;
@@ -5,7 +5,7 @@ import { startRetentionLane, RETENTION_LEASE_TTL_FACTOR } from "./retention-lane
5
5
  import { createLimitSync } from "./limit-sync.js";
6
6
  import { runDenySweep } from "./late-binds.js";
7
7
  export function runStage08(ctx) {
8
- const { approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, configCenter, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, handslessRunner, handslessSubRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, rosterStore, runStore, runner, sqlWorkflowRunStore, subRunner, taskAttachmentStore, toolApproval, toolResultStore, userInputLedger, workflowJournalStore, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
8
+ const { approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, handslessRunner, handslessSubRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, rosterStore, runStore, runner, sqlWorkflowRunStore, subRunner, taskAttachmentStore, toolApproval, toolResultStore, userInputLedger, workflowJournalStore, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
9
9
  const reaper = startReapers({
10
10
  config, logger, metrics, localRoot, backend, subRunner, runStore, checkpointStore, parkCommits,
11
11
  rateLimiter, costQuota, toolResultStore, fileHistoryErasure, taskAttachmentStore, imageBakes, worktreeReap,
@@ -71,8 +71,8 @@ export function runStage08(ctx) {
71
71
  }
72
72
  }
73
73
  };
74
- configCenter.startRefreshLoop({ pricing, limitSync, swapRunnerDeps, ceilingVerdict, checkpointStorePresent: checkpointStore !== undefined, degradeRoute: degradeRouteWatch, ...(consolidationSeatWatch !== undefined ? { consolidationSeat: consolidationSeatWatch } : {}) });
75
- configCenter.initKeyResolver();
74
+ webAdmin.startRefreshLoop({ pricing, limitSync, swapRunnerDeps, ceilingVerdict, checkpointStorePresent: checkpointStore !== undefined, degradeRoute: degradeRouteWatch, ...(consolidationSeatWatch !== undefined ? { consolidationSeat: consolidationSeatWatch } : {}) });
75
+ webAdmin.initKeyResolver();
76
76
  return { ...ctx, otelExporter, reaper, retentionLaneStarted };
77
77
  }
78
78
  //# sourceMappingURL=stage-08-reapers.js.map
@@ -16,7 +16,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
16
16
  } | {
17
17
  childrenAlive: readonly string[];
18
18
  }>) | undefined;
19
- registryJwtVerifier: import("../auth-bridge.js").RegistryJwtVerifier | undefined;
19
+ webAdminJwtVerifier: import("../auth-bridge.js").WebAdminJwtVerifier | undefined;
20
20
  sessionAudit: ((sessionId: string) => Promise<{
21
21
  owner: string | null;
22
22
  sessionId: string;
@@ -81,7 +81,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
81
81
  hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
82
82
  hookAgentRunner: import("@sema-agent/core").Runner;
83
83
  hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
84
- mcpRevocations: import("../config-center/mcp-revocation.js").McpRevocationLedger;
84
+ mcpRevocations: import("../web-admin-client/mcp-revocation.js").McpRevocationLedger;
85
85
  memoryConsolidationFaces: import("./memory-consolidation.js").MemoryConsolidationFaces | undefined;
86
86
  memoryOptOutGrantStore: import("../plugins/memory-optout-grant-store-sql.js").MemoryOptOutGrantStore | undefined;
87
87
  orgMemoryAdmission: import("./org-memory.js").OrgMemoryAdmissionWiring;
@@ -199,7 +199,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
199
199
  taskListLane: import("./task-list-lane.js").TaskListLane;
200
200
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
201
201
  ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
202
- configCenter: import("./config-center.js").ConfigCenterRuntime;
202
+ webAdmin: import("./web-admin.js").WebAdminRuntime;
203
203
  config: import("../config-types.js").ServiceConfig;
204
204
  localRoot: string;
205
205
  logger: import("../index.js").Logger;