@sema-agent/server 7.136.0 → 7.138.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 (327) hide show
  1. package/MIGRATION.md +501 -139
  2. package/README.md +1 -0
  3. package/README.zh-CN.md +1 -0
  4. package/USAGE.md +149 -34
  5. package/deploy/sema-up/README.md +14 -0
  6. package/deploy/sema-up/chart/templates/sandbox-rbac.yaml +7 -1
  7. package/deploy/sema-up/stack/sema-stack-cluster.yaml +7 -1
  8. package/dist/approval-card.d.ts +21 -14
  9. package/dist/approval-card.js +1 -0
  10. package/dist/approval-content-kind.d.ts +6 -0
  11. package/dist/approval-content-kind.js +7 -0
  12. package/dist/approval-gate-currency.d.ts +48 -6
  13. package/dist/approval-gate-currency.js +16 -9
  14. package/dist/approval-hmac.d.ts +13 -1
  15. package/dist/approval-hmac.js +1 -1
  16. package/dist/approval.js +3 -3
  17. package/dist/audit.js +1 -0
  18. package/dist/auth-bridge.js +2 -2
  19. package/dist/background-agent-name.d.ts +5 -0
  20. package/dist/background-agent-name.js +5 -0
  21. package/dist/boot/budget-tracing.d.ts +1 -12
  22. package/dist/boot/deployment-mods.d.ts +46 -16
  23. package/dist/boot/deployment-mods.js +82 -6
  24. package/dist/boot/execution-env.d.ts +24 -1
  25. package/dist/boot/execution-env.js +69 -6
  26. package/dist/boot/governance-seams.d.ts +10 -17
  27. package/dist/boot/governance-seams.js +5 -17
  28. package/dist/boot/leader.d.ts +3 -0
  29. package/dist/boot/leader.js +1 -0
  30. package/dist/boot/org-delivery.js +15 -2
  31. package/dist/boot/reapers.d.ts +3 -0
  32. package/dist/boot/reapers.js +15 -1
  33. package/dist/boot/resolve-spec.d.ts +7 -0
  34. package/dist/boot/resolve-spec.js +36 -26
  35. package/dist/boot/retention-lane.d.ts +11 -5
  36. package/dist/boot/retention-lane.js +2 -2
  37. package/dist/boot/runner-deps.d.ts +7 -3
  38. package/dist/boot/runner-deps.js +1 -0
  39. package/dist/boot/stage-03-store-backend.d.ts +1 -1
  40. package/dist/boot/stage-04-stores.d.ts +2 -13
  41. package/dist/boot/stage-05-execution-env.d.ts +6 -13
  42. package/dist/boot/stage-05-execution-env.js +17 -5
  43. package/dist/boot/stage-06-runners.d.ts +6 -13
  44. package/dist/boot/stage-06-runners.js +10 -3
  45. package/dist/boot/stage-07-capability-layer.d.ts +7 -13
  46. package/dist/boot/stage-07-capability-layer.js +3 -3
  47. package/dist/boot/stage-08-reapers.d.ts +7 -13
  48. package/dist/boot/stage-08-reapers.js +2 -1
  49. package/dist/boot/stage-09-leader.d.ts +7 -13
  50. package/dist/boot/stage-09-leader.js +2 -2
  51. package/dist/boot/stage-10-http-server.d.ts +7 -13
  52. package/dist/boot/stage-10-http-server.js +6 -3
  53. package/dist/boot/stores.d.ts +1 -1
  54. package/dist/boot/web-admin.d.ts +5 -2
  55. package/dist/boot/web-admin.js +3 -3
  56. package/dist/brain.js +5 -5
  57. package/dist/broker/broker.d.ts +89 -0
  58. package/dist/broker/broker.js +287 -0
  59. package/dist/broker/constants.d.ts +39 -0
  60. package/dist/broker/constants.js +15 -0
  61. package/dist/broker/http1.d.ts +111 -0
  62. package/dist/broker/http1.js +256 -0
  63. package/dist/broker/lease-book.d.ts +87 -0
  64. package/dist/broker/lease-book.js +142 -0
  65. package/dist/broker/lease-file.d.ts +60 -0
  66. package/dist/broker/lease-file.js +127 -0
  67. package/dist/broker/main.d.ts +2 -0
  68. package/dist/broker/main.js +20 -0
  69. package/dist/budget.d.ts +17 -15
  70. package/dist/budget.js +2 -2
  71. package/dist/capabilities/composite-members.d.ts +2 -1
  72. package/dist/capabilities/composite-members.js +2 -1
  73. package/dist/capabilities/engine-capabilities.js +1 -0
  74. package/dist/capabilities/mcp-probe.d.ts +36 -11
  75. package/dist/capabilities/mcp-probe.js +44 -5
  76. package/dist/capabilities/scenarios.d.ts +23 -8
  77. package/dist/capabilities/scenarios.js +13 -8
  78. package/dist/capabilities/skills.d.ts +28 -5
  79. package/dist/capabilities/skills.js +8 -0
  80. package/dist/capability-facts.d.ts +6 -0
  81. package/dist/capability-facts.js +5 -0
  82. package/dist/center-credential-renewer.js +5 -1
  83. package/dist/checkpoint-ctx-seal-m28.d.ts +3 -10
  84. package/dist/checkpoint-ctx-seal-m28.js +1 -1
  85. package/dist/checkpoint-identity.d.ts +13 -6
  86. package/dist/config-catalog.js +16 -7
  87. package/dist/config-types.d.ts +24 -7
  88. package/dist/config.d.ts +1 -1
  89. package/dist/config.js +42 -13
  90. package/dist/deployment-governance.d.ts +2 -2
  91. package/dist/deployment-governance.js +7 -9
  92. package/dist/deployment-shape.d.ts +6 -6
  93. package/dist/device-ws-protocol.d.ts +1 -0
  94. package/dist/device-ws-protocol.js +2 -1
  95. package/dist/file-history-disclosure.d.ts +4 -2
  96. package/dist/file-history-disclosure.js +2 -0
  97. package/dist/gate-settlement.d.ts +71 -0
  98. package/dist/gate-settlement.js +40 -0
  99. package/dist/hooks/classic-stations.d.ts +12 -54
  100. package/dist/hooks/classic-stations.js +1 -0
  101. package/dist/hooks/command-spawn.d.ts +2 -2
  102. package/dist/hooks/hook-runner.js +14 -14
  103. package/dist/http/admission.js +14 -9
  104. package/dist/http/approval-sweeps.js +4 -3
  105. package/dist/http/caller-trust.d.ts +2 -1
  106. package/dist/http/caller-trust.js +1 -3
  107. package/dist/http/checkpoint-ctx.d.ts +48 -7
  108. package/dist/http/checkpoint-ctx.js +40 -0
  109. package/dist/http/dispatch.d.ts +4 -0
  110. package/dist/http/dispatch.js +18 -10
  111. package/dist/http/durable-run-leg.d.ts +5 -1
  112. package/dist/http/durable-run-leg.js +5 -3
  113. package/dist/http/health-self-report.d.ts +2 -2
  114. package/dist/http/memory-compliance-failure-reply.js +3 -0
  115. package/dist/http/principal-gate.d.ts +15 -10
  116. package/dist/http/principal-gate.js +48 -9
  117. package/dist/http/resume-legs.d.ts +7 -31
  118. package/dist/http/resume-legs.js +185 -126
  119. package/dist/http/route-ctx.d.ts +38 -53
  120. package/dist/http/route-ctx.js +2 -5
  121. package/dist/http/routes/a2a-serve.js +10 -4
  122. package/dist/http/routes/agents-roster.d.ts +1 -1
  123. package/dist/http/routes/agents-roster.js +5 -1
  124. package/dist/http/routes/approvals-assistant.js +24 -10
  125. package/dist/http/routes/capabilities.js +23 -11
  126. package/dist/http/routes/mcp-reconnect.d.ts +3 -2
  127. package/dist/http/routes/mcp-reconnect.js +7 -7
  128. package/dist/http/routes/memory-consolidation.d.ts +1 -1
  129. package/dist/http/routes/memory-origin.d.ts +1 -1
  130. package/dist/http/routes/rules.js +3 -3
  131. package/dist/http/routes/runs.js +13 -8
  132. package/dist/http/routes/session-sync.js +42 -6
  133. package/dist/http/routes/sessions.js +6 -3
  134. package/dist/http/routes/side-query.js +2 -3
  135. package/dist/http/routes/tasks.js +794 -780
  136. package/dist/http/server.d.ts +35 -25
  137. package/dist/http/stored-body-replay.d.ts +3 -3
  138. package/dist/http/stored-body-replay.js +6 -1
  139. package/dist/http/wire-types.d.ts +66 -33
  140. package/dist/identity-source.d.ts +65 -0
  141. package/dist/identity-source.js +45 -0
  142. package/dist/index.d.ts +2 -0
  143. package/dist/index.js +1 -0
  144. package/dist/leader/wire.d.ts +7 -0
  145. package/dist/leader/wire.js +5 -4
  146. package/dist/mcp-assertion-header.d.ts +51 -40
  147. package/dist/mcp-assertion-header.js +10 -11
  148. package/dist/mcp-authorization-face.d.ts +27 -0
  149. package/dist/mcp-authorization-face.js +15 -0
  150. package/dist/memory-operator-faces.d.ts +13 -4
  151. package/dist/memory-operator-faces.js +1 -17
  152. package/dist/memory-store-refusal.d.ts +3 -3
  153. package/dist/memory-sync-client.js +72 -57
  154. package/dist/memory-sync.d.ts +1 -1
  155. package/dist/model-entry-refusal.d.ts +2 -0
  156. package/dist/model-entry-refusal.js +11 -0
  157. package/dist/model-route-gap.d.ts +6 -22
  158. package/dist/model-route-gap.js +7 -5
  159. package/dist/model-select.d.ts +6 -17
  160. package/dist/model-select.js +0 -3
  161. package/dist/mods-declaration.d.ts +110 -0
  162. package/dist/mods-declaration.js +109 -0
  163. package/dist/namespaced-rule-name.d.ts +1 -1
  164. package/dist/observability/err-text.d.ts +5 -0
  165. package/dist/observability/err-text.js +9 -0
  166. package/dist/observability/fail-open.d.ts +17 -1
  167. package/dist/observability/fail-open.js +17 -1
  168. package/dist/observability/metrics.js +1 -1
  169. package/dist/observability/run-terminal.js +1 -0
  170. package/dist/observability/secret-env-scrub.d.ts +1 -1
  171. package/dist/observability/secret-env-scrub.js +1 -1
  172. package/dist/operator-ask.d.ts +2 -2
  173. package/dist/org-delivery-gate.js +1 -1
  174. package/dist/org-memory-admission.d.ts +2 -2
  175. package/dist/org-memory-admission.js +39 -2
  176. package/dist/parked-decide.d.ts +15 -2
  177. package/dist/parked-decide.js +17 -10
  178. package/dist/peer-directory.js +2 -0
  179. package/dist/peer-seat.d.ts +150 -0
  180. package/dist/peer-seat.js +239 -0
  181. package/dist/permission-rule-list.d.ts +2 -2
  182. package/dist/permission-rule-vocab.d.ts +7 -7
  183. package/dist/permission-rule-vocab.js +3 -3
  184. package/dist/plain-string-record.d.ts +38 -0
  185. package/dist/plain-string-record.js +38 -0
  186. package/dist/plugins/background-agent-store-sql.js +6 -3
  187. package/dist/plugins/caching-session-store.d.ts +5 -0
  188. package/dist/plugins/caching-session-store.js +6 -0
  189. package/dist/plugins/checkpoint-store-sql.d.ts +34 -29
  190. package/dist/plugins/checkpoint-store-sql.js +14 -14
  191. package/dist/plugins/file-history-store-sql.js +10 -16
  192. package/dist/plugins/file-run-store.js +8 -2
  193. package/dist/plugins/k8s-exec-protocol.d.ts +69 -13
  194. package/dist/plugins/k8s-exec-protocol.js +116 -28
  195. package/dist/plugins/k8s-pod-delete-failure.d.ts +25 -0
  196. package/dist/plugins/k8s-pod-delete-failure.js +17 -0
  197. package/dist/plugins/k8s-pod-reaper.d.ts +106 -0
  198. package/dist/plugins/k8s-pod-reaper.js +122 -0
  199. package/dist/plugins/local-checkpoint-store.d.ts +4 -17
  200. package/dist/plugins/local-checkpoint-store.js +3 -4
  201. package/dist/plugins/local-session-store.d.ts +66 -27
  202. package/dist/plugins/local-session-store.js +60 -28
  203. package/dist/plugins/mailbox-store-sql.d.ts +11 -3
  204. package/dist/plugins/mailbox-store-sql.js +103 -15
  205. package/dist/plugins/memory-run-store.js +2 -0
  206. package/dist/plugins/memory-sync-store-pg.d.ts +16 -5
  207. package/dist/plugins/memory-sync-store-tidb.d.ts +3 -3
  208. package/dist/plugins/one-time-migrations.d.ts +34 -12
  209. package/dist/plugins/one-time-migrations.js +51 -9
  210. package/dist/plugins/permission-rule-store-file.js +2 -2
  211. package/dist/plugins/permission-rule-store-sql.d.ts +17 -17
  212. package/dist/plugins/permission-rule-store-sql.js +37 -30
  213. package/dist/plugins/pg-pool.js +4 -0
  214. package/dist/plugins/pg-session-storage.d.ts +10 -2
  215. package/dist/plugins/pg-session-storage.js +20 -7
  216. package/dist/plugins/remote-env-adb.d.ts +6 -1
  217. package/dist/plugins/remote-env-adb.js +2 -1
  218. package/dist/plugins/remote-env-device.d.ts +6 -1
  219. package/dist/plugins/remote-env-device.js +5 -1
  220. package/dist/plugins/remote-env-e2b.d.ts +5 -0
  221. package/dist/plugins/remote-env-e2b.js +2 -1
  222. package/dist/plugins/remote-env-file-error.d.ts +8 -1
  223. package/dist/plugins/remote-env-file-error.js +7 -1
  224. package/dist/plugins/remote-env-host.d.ts +10 -2
  225. package/dist/plugins/remote-env-host.js +8 -2
  226. package/dist/plugins/remote-env-k8s.d.ts +140 -11
  227. package/dist/plugins/remote-env-k8s.js +277 -15
  228. package/dist/plugins/remote-env-local-docker.d.ts +5 -0
  229. package/dist/plugins/remote-env-local-docker.js +2 -1
  230. package/dist/plugins/remote-env-ssh.d.ts +6 -1
  231. package/dist/plugins/remote-env-ssh.js +2 -1
  232. package/dist/plugins/retention-store-sql.d.ts +14 -2
  233. package/dist/plugins/retention-store-sql.js +6 -0
  234. package/dist/plugins/run-store-sql.js +10 -4
  235. package/dist/plugins/session-fork.d.ts +10 -13
  236. package/dist/plugins/session-fork.js +5 -25
  237. package/dist/plugins/session-ownership.d.ts +24 -3
  238. package/dist/plugins/session-ownership.js +24 -5
  239. package/dist/plugins/session-workspace-cell.d.ts +17 -0
  240. package/dist/plugins/session-workspace-cell.js +38 -0
  241. package/dist/plugins/sql-errors.d.ts +23 -2
  242. package/dist/plugins/sql-errors.js +15 -0
  243. package/dist/plugins/store-backend.js +7 -7
  244. package/dist/plugins/store-contracts.d.ts +10 -1
  245. package/dist/plugins/store-fault.d.ts +2 -2
  246. package/dist/plugins/store-fault.js +4 -2
  247. package/dist/plugins/tidb-pool.js +13 -0
  248. package/dist/plugins/tidb-session-store.d.ts +17 -2
  249. package/dist/plugins/tidb-session-store.js +18 -7
  250. package/dist/plugins/tool-result-store-sql.d.ts +13 -6
  251. package/dist/plugins/tool-result-store-sql.js +8 -7
  252. package/dist/plugins/worktree-isolation.d.ts +3 -2
  253. package/dist/plugins/worktree-isolation.js +1 -7
  254. package/dist/project-identity.d.ts +1 -14
  255. package/dist/project-identity.js +0 -4
  256. package/dist/request-key-closure.js +1 -1
  257. package/dist/request-value-closure.d.ts +31 -2
  258. package/dist/request-value-closure.js +7 -1
  259. package/dist/rule-entry-list.d.ts +3 -2
  260. package/dist/rule-entry-list.js +2 -2
  261. package/dist/rules-consent.js +12 -7
  262. package/dist/run-local.d.ts +2 -2
  263. package/dist/run-local.js +12 -6
  264. package/dist/runs.d.ts +7 -1
  265. package/dist/runs.js +8 -2
  266. package/dist/runtime-governance.d.ts +5 -5
  267. package/dist/sandbox-git-lease.d.ts +49 -0
  268. package/dist/sandbox-git-lease.js +60 -0
  269. package/dist/sandbox-git-plane.d.ts +84 -0
  270. package/dist/sandbox-git-plane.js +105 -0
  271. package/dist/security.d.ts +16 -4
  272. package/dist/security.js +8 -3
  273. package/dist/server-secret-env.d.ts +12 -3
  274. package/dist/server-secret-env.js +18 -2
  275. package/dist/session-error-wire.d.ts +14 -6
  276. package/dist/session-error-wire.js +2 -1
  277. package/dist/session-incarnation.d.ts +4 -5
  278. package/dist/session-incarnation.js +2 -2
  279. package/dist/session-policy-wire.d.ts +1 -1
  280. package/dist/session-policy-wire.js +2 -2
  281. package/dist/session-sync.d.ts +1 -1
  282. package/dist/session-workspace.d.ts +130 -0
  283. package/dist/session-workspace.js +83 -0
  284. package/dist/spec-fields.d.ts +44 -14
  285. package/dist/spec-fields.js +33 -12
  286. package/dist/standing-answer-grant.d.ts +2 -13
  287. package/dist/standing-answer-grant.js +0 -7
  288. package/dist/stored-request-prompt-profile-m30.d.ts +49 -0
  289. package/dist/stored-request-prompt-profile-m30.js +25 -0
  290. package/dist/task-a2a.d.ts +44 -14
  291. package/dist/task-a2a.js +46 -20
  292. package/dist/task-mcp.d.ts +34 -21
  293. package/dist/task-mcp.js +46 -22
  294. package/dist/task-settings.d.ts +2 -2
  295. package/dist/tool-approval.d.ts +43 -9
  296. package/dist/tool-approval.js +57 -15
  297. package/dist/tool-rule-names.d.ts +5 -0
  298. package/dist/trace/core-keyset-guard.d.ts +34 -19
  299. package/dist/trace/engine-notice-wire.d.ts +1 -1
  300. package/dist/trace/engine-notice-wire.js +4 -0
  301. package/dist/trace/exit-seat.d.ts +20 -1
  302. package/dist/trace/exit-seat.js +5 -2
  303. package/dist/trace/extension-call-face.d.ts +33 -0
  304. package/dist/trace/extension-call-face.js +39 -0
  305. package/dist/trace/ledger-sink.d.ts +4 -5
  306. package/dist/trace/ledger-sink.js +3 -7
  307. package/dist/trace/project.d.ts +62 -10
  308. package/dist/trace/project.js +49 -9
  309. package/dist/trace/redact.d.ts +18 -6
  310. package/dist/trace/redact.js +154 -60
  311. package/dist/trace/self-minted-wire.d.ts +500 -7
  312. package/dist/trace/self-minted-wire.js +182 -1
  313. package/dist/trace/wire-projection-faces.d.ts +7 -5
  314. package/dist/trace/wire-projection-faces.js +9 -4
  315. package/dist/user-authored-text.d.ts +2 -2
  316. package/dist/user-authored-text.js +16 -1
  317. package/dist/web-admin-client/apply-effective.js +0 -1
  318. package/dist/web-admin-client/center-request.d.ts +23 -4
  319. package/dist/web-admin-client/center-request.js +42 -8
  320. package/dist/web-admin-client/http-client.js +6 -6
  321. package/dist/web-admin-client/skills-mcp.d.ts +8 -4
  322. package/dist/web-admin-client/skills-mcp.js +31 -18
  323. package/dist/web-admin-client/types.d.ts +10 -5
  324. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +11 -5
  325. package/package.json +3 -3
  326. package/wire-changes/server@7.137.0.json +825 -0
  327. package/wire-changes/server@7.138.0.json +446 -0
@@ -29,7 +29,7 @@ import { buildDisplaySafeUrl } from "../trace/redact.js";
29
29
  import * as facts from "../capability-facts.js";
30
30
  import { WEB_ADMIN_ENV } from "@sema-agent/settings-schema";
31
31
  export async function runStage07(ctx) {
32
- const { approvalAskAudit, approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, webAdmin, counterDegradeHook, durableEnabled, instanceId, localRoot, logger, question, runner, runnerDeps, sendUserFileToolSpec, sessionEnvSelection, sessionStore, subRunner, subRunnerSessions, taskListLane, toolApproval } = ctx;
32
+ const { approvalAskAudit, approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, webAdmin, counterDegradeHook, peerDesk, durableEnabled, instanceId, localRoot, logger, question, runner, runnerDeps, sendUserFileToolSpec, sessionEnvSelection, sessionStore, subRunner, subRunnerSessions, taskListLane, toolApproval } = ctx;
33
33
  const authorize = createAuthorizer(config, sessionStore);
34
34
  const runStore = backend ? backend.run() : undefined;
35
35
  bindRunStore(runStore);
@@ -153,7 +153,7 @@ export async function runStage07(ctx) {
153
153
  : new RateLimiter(config.rateLimitPerMin);
154
154
  bindRateLimiter(rateLimiter);
155
155
  let skills = loadDeploymentSkills(config, logger);
156
- skills = await webAdmin.applyCenterCapabilities(skills);
156
+ skills = await webAdmin.applyCenterCapabilities(skills, peerDesk, peerDesk.lease("roster"));
157
157
  const repoClient = config.gitApiBaseUrl ? createRepoClient(config.gitApiKind, config.gitApiBaseUrl, config.gitApiToken) : undefined;
158
158
  const webSearchCfg = webSearchConfigFromEnv();
159
159
  const webSearch = webSearchCfg ? createWebSearchBackend(webSearchCfg) : undefined;
@@ -202,6 +202,6 @@ export async function runStage07(ctx) {
202
202
  if (defaultScenarioRefusal !== undefined)
203
203
  throw new Error(defaultScenarioRefusal);
204
204
  logger.info("capabilities", { skills: skills.length, scenarios: Object.keys(scenarios), repoTools: Boolean(repoClient) });
205
- return { ...ctx, approvalExemptionStore, approvalNonceStore, authorize, imageBakes, imageIndex, parkedReviveInheritedGate, parkedReviveSurface, rateLimiter, resumeAnchorStore, runStore, scenarioDetails, scenarios, selectEnvTool, taskLimitCaps, taskTimeoutSec, userInputLedger, userInputLedgerStore, webSearchProvider: webSearchCfg?.provider };
205
+ return { ...ctx, approvalExemptionStore, approvalNonceStore, authorize, imageBakes, imageIndex, loadedSkills: skills, parkedReviveInheritedGate, parkedReviveSurface, rateLimiter, resumeAnchorStore, runStore, scenarioDetails, scenarios, selectEnvTool, taskLimitCaps, taskTimeoutSec, userInputLedger, userInputLedgerStore, webSearchProvider: webSearchCfg?.provider };
206
206
  }
207
207
  //# sourceMappingURL=stage-07-capability-layer.js.map
@@ -22,6 +22,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
22
22
  }) => Promise<import("../security.js").AuthContext>;
23
23
  imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
24
24
  imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
25
+ loadedSkills: import("../index.js").LoadedSkill[];
25
26
  parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
26
27
  parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
27
28
  rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
@@ -92,12 +93,16 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
92
93
  workflowsCapable: boolean;
93
94
  orgDeliveryGate: import("@sema-agent/core").OrgDeliveryGate | undefined;
94
95
  deploymentMods: readonly import("@sema-agent/core").ModRegistration<import("@sema-agent/core").EngineDollar>[];
96
+ deploymentModsLoaded: readonly import("./deployment-mods.js").LoadedModPackage[];
95
97
  deviceLane: import("./device-lane.js").DeviceLane | undefined;
98
+ peerDesk: import("../peer-seat.js").PeerDesk;
96
99
  dropSessionScoped: (sid: string) => void;
97
100
  executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
98
101
  fenceSessionOwner: (sid: string, owner: string | null) => void;
99
102
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
100
103
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
104
+ sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
105
+ sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
101
106
  perSessionCwd: Map<string, string>;
102
107
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
103
108
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -133,18 +138,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
133
138
  ruleConsent: import("../rules-consent.js").RuleConsentLane | undefined;
134
139
  sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
135
140
  sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
136
- sideQueryAccounting: (principal: string | undefined, r: {
137
- model: string;
138
- usage?: {
139
- input?: number;
140
- output?: number;
141
- cacheRead?: number;
142
- cacheWrite?: number;
143
- cost?: {
144
- total?: number;
145
- };
146
- };
147
- }) => void;
141
+ sideQueryAccounting: import("../budget.js").SideQueryAccounting;
148
142
  toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
149
143
  tracer: import("@sema-agent/core").TracerHook;
150
144
  backend: import("../index.js").StoreBackend | undefined;
@@ -165,7 +159,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
165
159
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
166
160
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
167
161
  sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
168
- sessionStore: import("@sema-agent/core").SessionStore;
162
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
169
163
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
170
164
  storePosture: import("../store-posture.js").StorePosture;
171
165
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -5,12 +5,13 @@ 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 { approvalAskAudit, approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, spaceReclaimer, handslessRunner, 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 { approvalAskAudit, approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, spaceReclaimer, sandboxPodReaper, handslessRunner, 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,
12
12
  workflowNotifyGate, workflowRecoverOpts, workflowJournalStore, sqlWorkflowRunStore, workflowNotifyJournal, rosterStore,
13
13
  backgroundAgentStore, mailboxStore, toolApproval, permissionRuleStores, approvalNonceStore, userInputLedger, approvalAskAudit,
14
+ ...(sandboxPodReaper !== undefined ? { sandboxPodReaper } : {}),
14
15
  getRunDenySweep: () => runDenySweep,
15
16
  });
16
17
  const ttlMs = config.retentionSweep.intervalSec * 1000 * RETENTION_LEASE_TTL_FACTOR;
@@ -46,6 +46,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
46
46
  }) => Promise<import("../security.js").AuthContext>;
47
47
  imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
48
48
  imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
49
+ loadedSkills: import("../index.js").LoadedSkill[];
49
50
  parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
50
51
  parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
51
52
  rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
@@ -116,12 +117,16 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
116
117
  workflowsCapable: boolean;
117
118
  orgDeliveryGate: import("@sema-agent/core").OrgDeliveryGate | undefined;
118
119
  deploymentMods: readonly import("@sema-agent/core").ModRegistration<import("@sema-agent/core").EngineDollar>[];
120
+ deploymentModsLoaded: readonly import("./deployment-mods.js").LoadedModPackage[];
119
121
  deviceLane: import("./device-lane.js").DeviceLane | undefined;
122
+ peerDesk: import("../peer-seat.js").PeerDesk;
120
123
  dropSessionScoped: (sid: string) => void;
121
124
  executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
122
125
  fenceSessionOwner: (sid: string, owner: string | null) => void;
123
126
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
124
127
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
128
+ sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
129
+ sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
125
130
  perSessionCwd: Map<string, string>;
126
131
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
127
132
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -157,18 +162,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
157
162
  ruleConsent: import("../rules-consent.js").RuleConsentLane | undefined;
158
163
  sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
159
164
  sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
160
- sideQueryAccounting: (principal: string | undefined, r: {
161
- model: string;
162
- usage?: {
163
- input?: number;
164
- output?: number;
165
- cacheRead?: number;
166
- cacheWrite?: number;
167
- cost?: {
168
- total?: number;
169
- };
170
- };
171
- }) => void;
165
+ sideQueryAccounting: import("../budget.js").SideQueryAccounting;
172
166
  toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
173
167
  tracer: import("@sema-agent/core").TracerHook;
174
168
  backend: import("../index.js").StoreBackend | undefined;
@@ -189,7 +183,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
189
183
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
190
184
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
191
185
  sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
192
- sessionStore: import("@sema-agent/core").SessionStore;
186
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
193
187
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
194
188
  storePosture: import("../store-posture.js").StorePosture;
195
189
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -6,7 +6,7 @@ import { createLeaderFace } from "./leader.js";
6
6
  import { assertStaticWiringConsistent } from "../http/routes/diagnostics.js";
7
7
  import { buildDisplaySafeUrl } from "../trace/redact.js";
8
8
  export function runStage09(ctx) {
9
- const { approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, checkpointCtxSealing, config, webAdmin, deviceLane, dropSessionScoped, durableEnabled, executionEnvFactory, fileHistoryErasure, governanceSeams, localRoot, logger, mailboxRecipientLifecycle, mailboxStore, metrics, pricing, resumeAnchorStore, runStore, runnerDeps, sessionPolicyStore, sessionStore, streamApprovalGate, taskAttachmentStore, spaceReclaimer, taskListLane, toolResultStore, tracer, usageWindowStore, userInputLedgerStore, workflowCompletionInbox } = ctx;
9
+ const { approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, checkpointCtxSealing, config, webAdmin, deploymentMods, deviceLane, dropSessionScoped, durableEnabled, executionEnvFactory, fileHistoryErasure, governanceSeams, localRoot, logger, mailboxRecipientLifecycle, mailboxStore, metrics, pricing, resumeAnchorStore, runStore, runnerDeps, sessionPolicyStore, sessionStore, streamApprovalGate, taskAttachmentStore, spaceReclaimer, taskListLane, toolResultStore, tracer, usageWindowStore, userInputLedgerStore, workflowCompletionInbox } = ctx;
10
10
  const { ownerAware, sessionAudit, sessionWatchRegistry, purgeSession, instrumentDegenerate, planCacheProbe } = createSessionFaces({
11
11
  deviceStore: deviceLane?.store,
12
12
  dropSessionScoped,
@@ -17,7 +17,7 @@ export function runStage09(ctx) {
17
17
  userInputLedgerStore,
18
18
  ...(spaceReclaimer !== undefined ? { spaceReclaimer } : {}),
19
19
  });
20
- const leaderEndpoint = createLeaderFace({ config, logger, brain, pricing, executionEnvFactory, toolResultStore, sessionStore, checkpointStore, checkpointCtxSealing, governanceSeams, backend, tracer, usageWindowStore, promptSource: webAdmin.promptSource, onError: runnerDeps.onError });
20
+ const leaderEndpoint = createLeaderFace({ config, logger, brain, pricing, executionEnvFactory, toolResultStore, sessionStore, checkpointStore, checkpointCtxSealing, governanceSeams, backend, tracer, usageWindowStore, promptSource: webAdmin.promptSource, onError: runnerDeps.onError, deploymentMods });
21
21
  const drainState = { draining: false };
22
22
  const authBridgeIssuer = authBridgeIssuerOf(config)?.issuer;
23
23
  const webAdminJwtVerifier = authBridgeIssuer
@@ -45,6 +45,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
45
45
  }) => Promise<import("../security.js").AuthContext>;
46
46
  imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
47
47
  imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
48
+ loadedSkills: import("../index.js").LoadedSkill[];
48
49
  parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
49
50
  parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
50
51
  rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
@@ -115,12 +116,16 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
115
116
  workflowsCapable: boolean;
116
117
  orgDeliveryGate: import("@sema-agent/core").OrgDeliveryGate | undefined;
117
118
  deploymentMods: readonly import("@sema-agent/core").ModRegistration<import("@sema-agent/core").EngineDollar>[];
119
+ deploymentModsLoaded: readonly import("./deployment-mods.js").LoadedModPackage[];
118
120
  deviceLane: import("./device-lane.js").DeviceLane | undefined;
121
+ peerDesk: import("../peer-seat.js").PeerDesk;
119
122
  dropSessionScoped: (sid: string) => void;
120
123
  executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
121
124
  fenceSessionOwner: (sid: string, owner: string | null) => void;
122
125
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
123
126
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
127
+ sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
128
+ sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
124
129
  perSessionCwd: Map<string, string>;
125
130
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
126
131
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -156,18 +161,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
156
161
  ruleConsent: import("../rules-consent.js").RuleConsentLane | undefined;
157
162
  sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
158
163
  sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
159
- sideQueryAccounting: (principal: string | undefined, r: {
160
- model: string;
161
- usage?: {
162
- input?: number;
163
- output?: number;
164
- cacheRead?: number;
165
- cacheWrite?: number;
166
- cost?: {
167
- total?: number;
168
- };
169
- };
170
- }) => void;
164
+ sideQueryAccounting: import("../budget.js").SideQueryAccounting;
171
165
  toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
172
166
  tracer: import("@sema-agent/core").TracerHook;
173
167
  backend: import("../plugins/store-backend.js").StoreBackend | undefined;
@@ -188,7 +182,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
188
182
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
189
183
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
190
184
  sessionCaptureRecords: import("../plugins/store-backend.js").SessionCaptureRecordSource | undefined;
191
- sessionStore: import("@sema-agent/core").SessionStore;
185
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
192
186
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
193
187
  storePosture: import("../store-posture.js").StorePosture;
194
188
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -29,7 +29,7 @@ import { bindServerLateSeats } from "./late-binds.js";
29
29
  import { serviceVersion } from "../service-version.js";
30
30
  import { buildDisplaySafeUrl } from "../trace/redact.js";
31
31
  export async function runStage10(ctx) {
32
- const { approvalAskAudit, approvalExemptionStore, approvalNonceStore, authorize, backend, backgroundAgentStore, brain, breakerState, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, parkCommits, config, webAdmin, consolidationValve, costQuota, deviceLane, drainState, durableEnabled, elicitation, fenceSessionOwner, fileHistoryStore, fleetBus, fleetLease, fleetUsage, governanceSeams, handslessRunner, hookAgent, hookLlm, hookWakeBus, imageBakes, imageIndex, instanceId, instrumentDegenerate, leaderEndpoint, localRoot, logger, lspManager, mcpRevocations, memoryBundleFaces, memoryComplianceFaces, memoryConsolidationFaces, memoryEngine, memoryExportBackend, memoryOptOutGrantStore, memoryOriginFaces, memoryPosture, memorySyncCursors, memorySyncRunner, metrics, modelUsageTracker, orgMemoryAdmission, otelExporter, outcomeSink, ownerAware, parkedReviveInheritedGate, parkedReviveSurface, perSessionCwd, perTaskImage, planCacheProbe, pricing, principalCaps, promptManifestTracker, purgeSession, question, rateLimiter, reaper, webAdminJwtVerifier, resumeAnchorStore, retentionLaneStarted, retentionLaneStore, ruleConsent, runStore, runner, runnerDeps, runtimeCapsPeekResolver, scenarioDetails, scenarios, selectEnvTool, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionAudit, sessionEnvSelection, sessionMemoryStatusFace, sessionPolicyStore, sessionTitler, sessionWatchRegistry, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, sharedMemoryStore, sideQueryAccounting, sqlEngine, sqlWorkflowRunStore, staticWiring, storePosture, subRunner, subagentSteerRegistry, taskAttachmentStore, taskLimitCaps, taskTimeoutSec, toolApproval, toolResultStore, usageWindowStore, userInputLedger, webSearchProvider, workflowAgentRegistry, workflowAgentSessionIndex, workflowParkDecisions, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable, orgDeliveryGate } = ctx;
32
+ const { peerDesk, approvalAskAudit, approvalExemptionStore, approvalNonceStore, authorize, backend, backgroundAgentStore, brain, breakerState, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, parkCommits, config, webAdmin, consolidationValve, costQuota, deploymentModsLoaded, deviceLane, drainState, durableEnabled, elicitation, fenceSessionOwner, fileHistoryStore, fleetBus, fleetLease, fleetUsage, governanceSeams, handslessRunner, hookAgent, hookLlm, hookWakeBus, imageBakes, imageIndex, instanceId, instrumentDegenerate, leaderEndpoint, loadedSkills, localRoot, logger, lspManager, mcpRevocations, memoryBundleFaces, memoryComplianceFaces, memoryConsolidationFaces, memoryEngine, memoryExportBackend, memoryOptOutGrantStore, memoryOriginFaces, memoryPosture, memorySyncCursors, memorySyncRunner, metrics, modelUsageTracker, orgMemoryAdmission, otelExporter, outcomeSink, ownerAware, parkedReviveInheritedGate, parkedReviveSurface, perSessionCwd, perTaskImage, planCacheProbe, pricing, principalCaps, promptManifestTracker, purgeSession, question, rateLimiter, reaper, webAdminJwtVerifier, resumeAnchorStore, retentionLaneStarted, retentionLaneStore, ruleConsent, runStore, runner, runnerDeps, runtimeCapsPeekResolver, sandboxGitPlane, scenarioDetails, scenarios, selectEnvTool, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionAudit, sessionEnvSelection, sessionMemoryStatusFace, sessionPolicyStore, sessionTitler, sessionWatchRegistry, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, sharedMemoryStore, sideQueryAccounting, sqlEngine, sqlWorkflowRunStore, staticWiring, storePosture, subRunner, subagentSteerRegistry, taskAttachmentStore, taskLimitCaps, taskTimeoutSec, toolApproval, toolResultStore, usageWindowStore, userInputLedger, webSearchProvider, workflowAgentRegistry, workflowAgentSessionIndex, workflowParkDecisions, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable, orgDeliveryGate } = ctx;
33
33
  const stores = {
34
34
  runStore,
35
35
  resumeAnchorStore: resumeAnchorStore ? resumeAnchorStore : undefined,
@@ -168,6 +168,8 @@ export async function runStage10(ctx) {
168
168
  writeProtection: buildWriteProtectionPosture(config),
169
169
  webSearchProvider,
170
170
  sealedKeyPublic: webAdmin.sealedKeyPublic,
171
+ sandboxGitPlane,
172
+ deploymentModPackages: deploymentModsLoaded.length,
171
173
  instanceId,
172
174
  capabilities: {
173
175
  version: serviceVersion(),
@@ -197,7 +199,8 @@ export async function runStage10(ctx) {
197
199
  sessionEventsMaxConnections: sessionWatchRegistry ? posIntEnv(process.env.SESSION_EVENTS_MAX_CONNS, 256, 100_000) : undefined,
198
200
  };
199
201
  const resolveSpec = createResolveSpec({
200
- config, logger, metrics, localRoot, scenarios, principalCaps, centerRuntimeCapsResolver,
202
+ config, logger, metrics, localRoot, scenarios, loadedSkills, principalCaps, centerRuntimeCapsResolver,
203
+ peerDesk,
201
204
  getKeyResolver: () => webAdmin.getKeyResolver(),
202
205
  taskAttachmentStore, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner,
203
206
  hookLlm, hookAgent, fleetBus, hookWakeBus, resumeAnchorStore, ownerAware, taskLimitCaps, taskTimeoutSec,
@@ -211,7 +214,7 @@ export async function runStage10(ctx) {
211
214
  const runnerFor = createHandsRunnerSelector({ full: runner, handsless: handslessRunner });
212
215
  const sideQuery = createSideQueryLane({ brain, config, getKeyResolver: () => webAdmin.getKeyResolver() });
213
216
  const scenarioGate = createScenarioGate({ config, scenarios, principalCaps, logger }, "peek");
214
- const server = createHttpServer({ runner, runnerFor, sideQuery, scenarioGate, config, resolveSpec, stores, coordinators, seams, observability, governance, deployment, knobs });
217
+ const server = createHttpServer({ runner, runnerFor, sideQuery, scenarioGate, peerDesk, config, resolveSpec, stores, coordinators, seams, observability, governance, deployment, knobs });
215
218
  bindServerLateSeats({ config, logger, server });
216
219
  const fleetReconcile = startFleetReconciler({
217
220
  bus: fleetBus,
@@ -37,7 +37,7 @@ export declare function openStores(ctx: OpenStoresCtx): Promise<{
37
37
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
38
38
  memoryExportBackend: MemoryBackend | undefined;
39
39
  memorySyncRunner: MemorySyncRunner | undefined;
40
- sessionStore: import("@sema-agent/core").SessionStore;
40
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
41
41
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
42
42
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
43
43
  memoryPosture: import("../memory-posture.js").MemoryPosture;
@@ -20,6 +20,7 @@ import { type CandidateRejection } from "../web-admin-client/candidate-gate.js";
20
20
  import { type ConfigApplyLedgerView } from "../web-admin-client/apply-ledger.js";
21
21
  import type { CenterPullView } from "../web-admin-client/pull-state.js";
22
22
  import type { LimitSync } from "./limit-sync.js";
23
+ import type { PeerDesk, PeerLease } from "../peer-seat.js";
23
24
  export interface WebAdminRuntimeCtx {
24
25
  config: ServiceConfig;
25
26
  logger: Logger;
@@ -53,8 +54,10 @@ export interface WebAdminRuntime {
53
54
  readonly checkpointCtxSealing: CheckpointCtxSealing | undefined;
54
55
  /** core `CenterPromptSource`(RunnerDeps / subRunner 必须同实例)。 */
55
56
  readonly promptSource: CenterPromptSource;
56
- /** center skills overlay → plugins 消费 → boot LKG 落盘/skill-stale 判定 → mcp 解析。返回新的 skills 表。 */
57
- applyCenterCapabilities(skills: LoadedSkill[]): Promise<LoadedSkill[]>;
57
+ /** center skills overlay → plugins 消费 → boot LKG 落盘/skill-stale 判定 → mcp / a2a 解析。返回新的 skills 表。
58
+ * 名册(mcp / a2a 两域)条目的件在 `rosterLease`(起服开一只、进程寿命不放)下登记进 `desk`,`config.mcpServers` / `config.a2aPeers`
59
+ * 里是带引用、不带件值的声明。 */
60
+ applyCenterCapabilities(skills: LoadedSkill[], desk: Pick<PeerDesk, "declare">, rosterLease: PeerLease): Promise<LoadedSkill[]>;
58
61
  /** center 声明场景 overlay(就地写进传入的两张表)。 */
59
62
  applyCenterScenarios(t: CenterScenarioOverlayTargets): void;
60
63
  /** per-model key resolver 首建(原位调用,见文件头注 5)。 */
@@ -735,7 +735,7 @@ export async function createWebAdminRuntime(ctx) {
735
735
  return "not-wired";
736
736
  return (await manualRefresh()) === "failed" ? "failed" : "triggered";
737
737
  },
738
- async applyCenterCapabilities(skills) {
738
+ async applyCenterCapabilities(skills, desk, rosterLease) {
739
739
  if (effective?.skills)
740
740
  skills = await applySkillsManifest(skills, effective.skills, candidateSource(), logger);
741
741
  if (effective?.plugins !== undefined) {
@@ -775,10 +775,10 @@ export async function createWebAdminRuntime(ctx) {
775
775
  }
776
776
  }
777
777
  if (effective?.mcp)
778
- config.mcpServers = resolveMcpServers(effective.mcp, logger);
778
+ config.mcpServers = resolveMcpServers(effective.mcp, desk, rosterLease, logger);
779
779
  mcpRevocations.applyEnabledEntries(enabledMcpEntries(effective?.mcp), { isBaseline: true });
780
780
  if (effective?.a2a)
781
- config.a2aPeers = resolveA2aPeers(effective.a2a, logger);
781
+ config.a2aPeers = resolveA2aPeers(effective.a2a, desk, rosterLease, logger);
782
782
  return skills;
783
783
  },
784
784
  applyCenterScenarios(t) {
package/dist/brain.js CHANGED
@@ -6,7 +6,7 @@ import { createHash } from "node:crypto";
6
6
  import { isModelKeyPoison, modelKeyPoisonIdentity } from "./key-resolver.js";
7
7
  import { anthropicRouteRoot, brainLaneFor, mountRoutes, routeTableOf } from "./model-provider.js";
8
8
  import { openaiRouteBaseUrl } from "./model-route-endpoint.js";
9
- import { anthropicLaneCredentialOf } from "./model-route-gap.js";
9
+ import { anthropicLaneCredentialOf, declaredCredential } from "./model-route-gap.js";
10
10
  import { catalogEntryFingerprint } from "./web-admin-client/restart-signal.js";
11
11
  import { buildDisplaySafeRefusal, buildDisplaySafeUrl } from "./trace/redact.js";
12
12
  import { createModelReachBrain } from "./model-unreachable-notice.js";
@@ -26,10 +26,10 @@ function breakerRoutesOf(config, r) {
26
26
  return r.circuitBreaker ? deploymentGatewayRoots(config).slice(0, -1) : [];
27
27
  }
28
28
  function deploymentGatewayKey(config) {
29
- return config.gatewayBaseUrl !== undefined ? config.gatewayApiKey : undefined;
29
+ return config.gatewayBaseUrl !== undefined ? declaredCredential(config.gatewayApiKey) : undefined;
30
30
  }
31
31
  function degradeDeclaredRoot(fallbackBaseUrl, config) {
32
- const armed = Boolean(deploymentGatewayKey(config)) && isOffDeploymentRoot(fallbackBaseUrl, config);
32
+ const armed = deploymentGatewayKey(config) !== undefined && isOffDeploymentRoot(fallbackBaseUrl, config);
33
33
  return armed ? config.gatewayBaseUrl : openaiRouteBaseUrl(fallbackBaseUrl, config.gatewayBaseUrl);
34
34
  }
35
35
  export const FAST_FAIL_MAX_RETRIES = 2;
@@ -110,7 +110,7 @@ export function createBrainAssembly(config, deps = {}) {
110
110
  brainRoutes.anthropic
111
111
  : constructRouteBrain(`degrade target "${degradeTo}"`, [fallbackModel.baseUrl, config.gatewayBaseUrl], () => createOpenAIBrain({
112
112
  ...(fbDeclaredRoot !== undefined ? { baseUrl: fbDeclaredRoot } : {}),
113
- ...(fbDeploymentKey ? { apiKey: fbDeploymentKey } : {}),
113
+ ...(fbDeploymentKey !== undefined ? { apiKey: fbDeploymentKey } : {}),
114
114
  ...(config.gatewayMaxRetries !== undefined ? { maxRetries: config.gatewayMaxRetries } : {}),
115
115
  fetchImpl,
116
116
  ...timeouts,
@@ -240,7 +240,7 @@ export function brainSummary(config) {
240
240
  if (declaresOwnCredential) {
241
241
  return { reactiveDegradeRoutePairing: "per-model-declared", reactiveDegradeRouteRefusal: null };
242
242
  }
243
- const verdict = adjudicateModelRoute({ id: target.id, baseUrl: target.baseUrl }, resolveRouteCredential(((key) => (key ? { configApiKey: key } : {}))(deploymentGatewayKey(config))), { baseUrl: degradeDeclaredRoot(target.baseUrl, config) });
243
+ const verdict = adjudicateModelRoute({ id: target.id, baseUrl: target.baseUrl }, resolveRouteCredential(((key) => (key !== undefined ? { configApiKey: key } : {}))(deploymentGatewayKey(config))), { baseUrl: degradeDeclaredRoot(target.baseUrl, config) });
244
244
  return verdict.ok
245
245
  ? { reactiveDegradeRoutePairing: `ok:${verdict.posture}`, reactiveDegradeRouteRefusal: null }
246
246
  : {
@@ -0,0 +1,89 @@
1
+ import * as net from "node:net";
2
+ import * as tls from "node:tls";
3
+ import type { Duplex } from "node:stream";
4
+ import { type GitEndpoint } from "./http1.js";
5
+ import { LeaseBook, type LeaseBookEvent, type MonotonicClock } from "./lease-book.js";
6
+ /** Every line the broker logs (closed set; none carries a credential or a body). */
7
+ export type BrokerLogEvent = LeaseBookEvent | {
8
+ event: "refused";
9
+ status: number;
10
+ rule: string;
11
+ } | {
12
+ event: "exchange";
13
+ i: number;
14
+ method: string;
15
+ endpoint: GitEndpoint;
16
+ upstreamStatus: number;
17
+ authenticated: boolean;
18
+ } | {
19
+ event: "upstream_failed";
20
+ i: number;
21
+ endpoint: GitEndpoint;
22
+ problem: string;
23
+ } | {
24
+ event: "aborted";
25
+ i: number;
26
+ endpoint: GitEndpoint;
27
+ why: string;
28
+ } | {
29
+ event: "listening";
30
+ host: string;
31
+ port: number;
32
+ } | {
33
+ event: "lease_file_unreadable";
34
+ problem: string;
35
+ };
36
+ export interface UpstreamTarget {
37
+ readonly protocol: "https:" | "http:";
38
+ readonly hostname: string;
39
+ readonly port: number;
40
+ }
41
+ /** Opens the upstream connection for one exchange (production: {@link createUpstreamConnector}; the pins inject a plain socket). */
42
+ export type UpstreamConnector = (target: UpstreamTarget) => Duplex;
43
+ /**
44
+ * Rule 9. https ⇒ `tls.connect` with the runtime's default trust store, `rejectUnauthorized: true` and the origin's host name as SNI / the
45
+ * name checked (no CA override, no identity override, no knob to skip either); http ⇒ a plain socket (an http entry is never usable, so it
46
+ * never carries a credential). No proxy environment is read.
47
+ */
48
+ export declare function createUpstreamConnector(impl?: {
49
+ tlsConnect?: (opts: tls.ConnectionOptions) => Duplex;
50
+ netConnect?: (opts: net.NetConnectOpts) => Duplex;
51
+ }): UpstreamConnector;
52
+ /** The two upstream bounds (rule 14). */
53
+ export interface BrokerUpstreamTimeouts {
54
+ readonly connectMs: number;
55
+ readonly headersMs: number;
56
+ }
57
+ /** The bounds every broker runs with — the two constants; nothing configures them. */
58
+ export declare const BROKER_UPSTREAM_TIMEOUTS_DEFAULT: BrokerUpstreamTimeouts;
59
+ export interface BrokerDeps {
60
+ readonly book: LeaseBook;
61
+ readonly connect: UpstreamConnector;
62
+ readonly log: (e: BrokerLogEvent) => void;
63
+ /** Test seam only (the pins shorten the bounds); absent ⇒ {@link BROKER_UPSTREAM_TIMEOUTS_DEFAULT}. */
64
+ readonly timeouts?: BrokerUpstreamTimeouts;
65
+ }
66
+ /** The broker's listener: each connection carries one request. */
67
+ export declare function createBrokerServer(deps: BrokerDeps): net.Server;
68
+ /** Rule 11: a Location resolved against the upstream request URL stays only if it is this origin, inside the git namespace, with an allowed query. */
69
+ export declare function rewriteLocation(location: string, upstreamUrl: string, origin: string, i: number): string | undefined;
70
+ /**
71
+ * The broker process: load the lease file, listen on the loopback, re-read the file every `pollMs` (a changed text is loaded; an
72
+ * unreadable file is a refused file — everything withdrawn). Returns once listening.
73
+ */
74
+ export declare function runBroker(opts: {
75
+ leasePath: string;
76
+ host: string;
77
+ port: number;
78
+ pollMs: number;
79
+ log: (e: BrokerLogEvent) => void;
80
+ clock?: MonotonicClock;
81
+ connect?: UpstreamConnector;
82
+ }): Promise<{
83
+ port: number;
84
+ book: LeaseBook;
85
+ close(): Promise<void>;
86
+ }>;
87
+ /** The readiness probe (same program, `--probe`): GET the local ready route; true ⇔ 200 within `timeoutMs`. */
88
+ export declare function probeBroker(host: string, port: number, timeoutMs: number): Promise<boolean>;
89
+ //# sourceMappingURL=broker.d.ts.map