@sema-agent/server 7.142.0 → 7.143.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 (258) hide show
  1. package/MIGRATION.md +442 -0
  2. package/USAGE.md +41 -24
  3. package/dist/adoption/plan.js +22 -0
  4. package/dist/approval-ask-audit-store.d.ts +7 -5
  5. package/dist/approval-ask-audit-store.js +12 -6
  6. package/dist/approval-ask-machine.d.ts +15 -7
  7. package/dist/approval-ask-machine.js +10 -4
  8. package/dist/approval-card.d.ts +124 -25
  9. package/dist/approval-card.js +103 -23
  10. package/dist/approval-queue-kind.d.ts +27 -0
  11. package/dist/approval-queue-kind.js +6 -0
  12. package/dist/approval-reconciler.d.ts +8 -8
  13. package/dist/approval-reconciler.js +3 -3
  14. package/dist/audit.js +4 -2
  15. package/dist/boot/budget-tracing.d.ts +1 -1
  16. package/dist/boot/governance-seams.d.ts +26 -41
  17. package/dist/boot/governance-seams.js +61 -28
  18. package/dist/boot/late-binds.d.ts +7 -4
  19. package/dist/boot/late-binds.js +3 -1
  20. package/dist/boot/leader.js +2 -4
  21. package/dist/boot/memory-consolidation.d.ts +0 -8
  22. package/dist/boot/memory-consolidation.js +3 -3
  23. package/dist/boot/reapers.js +5 -4
  24. package/dist/boot/resolve-spec.d.ts +1 -1
  25. package/dist/boot/resolve-spec.js +8 -8
  26. package/dist/boot/runner-deps.d.ts +10 -7
  27. package/dist/boot/runner-deps.js +5 -17
  28. package/dist/boot/shutdown.d.ts +9 -0
  29. package/dist/boot/shutdown.js +16 -2
  30. package/dist/boot/stage-02-web-admin-pull.js +3 -0
  31. package/dist/boot/stage-03-store-backend.d.ts +4 -1
  32. package/dist/boot/stage-03-store-backend.js +1 -2
  33. package/dist/boot/stage-04-stores.d.ts +5 -2
  34. package/dist/boot/stage-04-stores.js +3 -5
  35. package/dist/boot/stage-05-execution-env.d.ts +5 -2
  36. package/dist/boot/stage-06-runners.d.ts +5 -2
  37. package/dist/boot/stage-06-runners.js +1 -3
  38. package/dist/boot/stage-07-capability-layer.d.ts +5 -2
  39. package/dist/boot/stage-07-capability-layer.js +5 -1
  40. package/dist/boot/stage-08-reapers.d.ts +5 -2
  41. package/dist/boot/stage-09-leader.d.ts +5 -2
  42. package/dist/boot/stage-10-http-server.d.ts +5 -2
  43. package/dist/boot/stage-10-http-server.js +9 -1
  44. package/dist/boot/stores.d.ts +5 -2
  45. package/dist/boot/stores.js +7 -7
  46. package/dist/boot/web-admin.d.ts +5 -1
  47. package/dist/boot/web-admin.js +31 -19
  48. package/dist/capabilities/hands-lane.d.ts +9 -39
  49. package/dist/capabilities/hands-lane.js +8 -13
  50. package/dist/capabilities/mcp-probe.d.ts +3 -2
  51. package/dist/capabilities/scenarios.d.ts +11 -1
  52. package/dist/capabilities/scenarios.js +1 -0
  53. package/dist/capabilities/skills.d.ts +1 -17
  54. package/dist/capabilities/skills.js +0 -8
  55. package/dist/capability-facts.d.ts +8 -8
  56. package/dist/capability-facts.js +4 -4
  57. package/dist/card-void.d.ts +6 -9
  58. package/dist/config-catalog.js +1 -1
  59. package/dist/config-dir-trust.js +58 -29
  60. package/dist/config-invariants.d.ts +7 -1
  61. package/dist/config-invariants.js +7 -0
  62. package/dist/config-provider.d.ts +10 -0
  63. package/dist/config-provider.js +15 -4
  64. package/dist/config-root-migration.d.ts +13 -0
  65. package/dist/config-root-migration.js +99 -0
  66. package/dist/config-types.d.ts +5 -5
  67. package/dist/config.d.ts +4 -3
  68. package/dist/config.js +1 -1
  69. package/dist/delegated-session-owner.d.ts +5 -3
  70. package/dist/delegated-session-owner.js +1 -1
  71. package/dist/device-ws-protocol.d.ts +1 -0
  72. package/dist/device-ws-protocol.js +2 -1
  73. package/dist/env-model-table-gate.d.ts +53 -0
  74. package/dist/env-model-table-gate.js +53 -0
  75. package/dist/fleet/fleet-bus.d.ts +28 -52
  76. package/dist/fleet/fleet-bus.js +35 -100
  77. package/dist/fleet/fleet-reconciler.d.ts +4 -4
  78. package/dist/fleet/fleet-reconciler.js +1 -1
  79. package/dist/fleet/subagent-tail-bus.d.ts +14 -11
  80. package/dist/fleet/subagent-tail-bus.js +15 -28
  81. package/dist/hooks/hook-runner.js +28 -7
  82. package/dist/host-decision.d.ts +54 -20
  83. package/dist/host-decision.js +42 -14
  84. package/dist/http/admission.d.ts +1 -1
  85. package/dist/http/admission.js +7 -3
  86. package/dist/http/approval-sweeps.js +11 -8
  87. package/dist/http/caller-trust.d.ts +1 -1
  88. package/dist/http/durable-run-leg.js +2 -2
  89. package/dist/http/engine-refusal.d.ts +16 -0
  90. package/dist/http/engine-refusal.js +17 -0
  91. package/dist/http/memory-compliance-failure-reply.d.ts +1 -3
  92. package/dist/http/memory-compliance-failure-reply.js +4 -6
  93. package/dist/http/owner-access.d.ts +11 -0
  94. package/dist/http/owner-access.js +13 -0
  95. package/dist/http/resume-legs.d.ts +21 -7
  96. package/dist/http/resume-legs.js +71 -49
  97. package/dist/http/resume-restatement.d.ts +39 -0
  98. package/dist/http/resume-restatement.js +25 -0
  99. package/dist/http/route-ctx.d.ts +35 -10
  100. package/dist/http/route-ctx.js +1 -1
  101. package/dist/http/routes/approvals-assistant.d.ts +9 -1
  102. package/dist/http/routes/approvals-assistant.js +142 -31
  103. package/dist/http/routes/capabilities.js +11 -2
  104. package/dist/http/routes/memory-policy.d.ts +2 -2
  105. package/dist/http/routes/memory-policy.js +1 -1
  106. package/dist/http/routes/notify-wake.js +23 -25
  107. package/dist/http/routes/rules.js +48 -13
  108. package/dist/http/routes/runs.js +9 -8
  109. package/dist/http/routes/session-memory-sync.d.ts +34 -6
  110. package/dist/http/routes/session-memory-sync.js +27 -10
  111. package/dist/http/routes/session-sync.js +13 -20
  112. package/dist/http/routes/sessions.d.ts +2 -2
  113. package/dist/http/routes/sessions.js +22 -23
  114. package/dist/http/routes/tasks.js +27 -49
  115. package/dist/http/server.d.ts +13 -7
  116. package/dist/http/server.js +2 -2
  117. package/dist/http/stored-body-replay.js +15 -4
  118. package/dist/http/wire-types.d.ts +17 -7
  119. package/dist/leader/leader.js +5 -2
  120. package/dist/leader/wire.d.ts +7 -1
  121. package/dist/leader/wire.js +6 -5
  122. package/dist/leg-facts.d.ts +37 -0
  123. package/dist/leg-facts.js +15 -0
  124. package/dist/memory-bundle-engine.d.ts +1 -4
  125. package/dist/memory-bundle-engine.js +2 -2
  126. package/dist/memory-operator-faces.d.ts +30 -66
  127. package/dist/memory-operator-faces.js +17 -88
  128. package/dist/memory-scope-stores.d.ts +38 -40
  129. package/dist/memory-scope-stores.js +51 -36
  130. package/dist/memory-scope.d.ts +0 -9
  131. package/dist/memory-scope.js +0 -9
  132. package/dist/memory-sync-client.js +14 -3
  133. package/dist/memory-sync.d.ts +20 -4
  134. package/dist/memory-sync.js +23 -4
  135. package/dist/model-plane-face.d.ts +13 -7
  136. package/dist/model-plane-face.js +2 -1
  137. package/dist/observability/fail-open.d.ts +20 -4
  138. package/dist/observability/fail-open.js +17 -4
  139. package/dist/observability/run-terminal.js +4 -0
  140. package/dist/orchestration/workflow-completion-inbox.d.ts +5 -19
  141. package/dist/orchestration/workflow-completion-inbox.js +0 -12
  142. package/dist/orchestration/workflow-notify-journal.d.ts +3 -2
  143. package/dist/orchestration/workflow-park-decision.d.ts +8 -3
  144. package/dist/orchestration/workflow-park-decision.js +5 -3
  145. package/dist/org-delivery-gate.d.ts +11 -0
  146. package/dist/org-delivery-gate.js +19 -1
  147. package/dist/parked-decide.d.ts +13 -9
  148. package/dist/parked-decide.js +7 -7
  149. package/dist/parked-revive-surface.js +1 -1
  150. package/dist/peer-inbound-face.d.ts +127 -0
  151. package/dist/peer-inbound-face.js +158 -0
  152. package/dist/permission-rule-list.d.ts +13 -9
  153. package/dist/permission-rule-list.js +7 -3
  154. package/dist/plugins/approval-ask-store-file.js +18 -6
  155. package/dist/plugins/approval-ask-store-memory.js +8 -6
  156. package/dist/plugins/approval-ask-store-sql.d.ts +28 -13
  157. package/dist/plugins/approval-ask-store-sql.js +30 -11
  158. package/dist/plugins/checkpoint-store-sql.d.ts +4 -4
  159. package/dist/plugins/checkpoint-store-sql.js +9 -7
  160. package/dist/plugins/file-history-store-sql.d.ts +24 -18
  161. package/dist/plugins/file-history-store-sql.js +24 -19
  162. package/dist/plugins/file-run-store.d.ts +29 -0
  163. package/dist/plugins/file-run-store.js +97 -8
  164. package/dist/plugins/imported-layer-root-retirement.d.ts +82 -0
  165. package/dist/plugins/imported-layer-root-retirement.js +96 -0
  166. package/dist/plugins/local-checkpoint-store.d.ts +1 -1
  167. package/dist/plugins/local-checkpoint-store.js +2 -2
  168. package/dist/plugins/local-session-store.d.ts +6 -2
  169. package/dist/plugins/local-session-store.js +8 -2
  170. package/dist/plugins/mailbox-recipient-lifecycle.d.ts +9 -31
  171. package/dist/plugins/mailbox-recipient-lifecycle.js +4 -0
  172. package/dist/plugins/mailbox-store-sql.d.ts +12 -8
  173. package/dist/plugins/mailbox-store-sql.js +76 -7
  174. package/dist/plugins/memory-sync-store-pg.d.ts +15 -0
  175. package/dist/plugins/memory-sync-store-pg.js +21 -0
  176. package/dist/plugins/memory-sync-store-tidb.d.ts +2 -0
  177. package/dist/plugins/memory-sync-store-tidb.js +13 -1
  178. package/dist/plugins/one-time-migrations.d.ts +32 -2
  179. package/dist/plugins/one-time-migrations.js +106 -3
  180. package/dist/plugins/org-delivery-quota-store.d.ts +1 -1
  181. package/dist/plugins/org-delivery-quota-store.js +2 -12
  182. package/dist/plugins/park-commit-watch.d.ts +1 -1
  183. package/dist/plugins/permission-rule-store-file.d.ts +10 -1
  184. package/dist/plugins/permission-rule-store-file.js +15 -2
  185. package/dist/plugins/permission-rule-store-sql.d.ts +31 -1
  186. package/dist/plugins/permission-rule-store-sql.js +35 -2
  187. package/dist/plugins/remote-env-device.d.ts +8 -11
  188. package/dist/plugins/remote-env-device.js +6 -3
  189. package/dist/plugins/remote-env-k8s.d.ts +37 -24
  190. package/dist/plugins/remote-env-k8s.js +50 -17
  191. package/dist/plugins/retention-store-sql.d.ts +2 -2
  192. package/dist/plugins/sandbox-read-floor.d.ts +5 -7
  193. package/dist/plugins/sandbox-read-floor.js +2 -7
  194. package/dist/plugins/sql-errors.d.ts +10 -1
  195. package/dist/plugins/sql-errors.js +13 -0
  196. package/dist/plugins/store-backend.d.ts +23 -28
  197. package/dist/plugins/store-backend.js +9 -1
  198. package/dist/plugins/store-contracts.d.ts +29 -5
  199. package/dist/plugins/store-contracts.js +4 -1
  200. package/dist/plugins/task-attachment-store.d.ts +2 -2
  201. package/dist/plugins/task-attachment-store.js +37 -52
  202. package/dist/plugins/tool-result-store-sql.d.ts +9 -8
  203. package/dist/plugins/tool-result-store-sql.js +23 -2
  204. package/dist/plugins/wiring-section-codec.d.ts +32 -0
  205. package/dist/plugins/wiring-section-codec.js +55 -0
  206. package/dist/plugins/workspace-fill.d.ts +1 -1
  207. package/dist/rule-entry-list.d.ts +3 -2
  208. package/dist/rule-entry-list.js +5 -1
  209. package/dist/rules-consent.d.ts +28 -5
  210. package/dist/rules-consent.js +40 -28
  211. package/dist/run-local.js +9 -5
  212. package/dist/runs.d.ts +12 -8
  213. package/dist/runs.js +6 -7
  214. package/dist/runtime-governance.d.ts +1 -1
  215. package/dist/server-secret-env.d.ts +4 -0
  216. package/dist/session-error-wire.d.ts +12 -0
  217. package/dist/session-error-wire.js +6 -0
  218. package/dist/session-incarnation.d.ts +1 -1
  219. package/dist/session-notify-door.d.ts +106 -0
  220. package/dist/session-notify-door.js +93 -0
  221. package/dist/session-sync.d.ts +9 -14
  222. package/dist/session-sync.js +5 -5
  223. package/dist/session-workspace.d.ts +3 -13
  224. package/dist/session-workspace.js +0 -9
  225. package/dist/standing-answer-grant.d.ts +5 -0
  226. package/dist/standing-answer-grant.js +10 -0
  227. package/dist/stores-sql/session-policy-store-sql.d.ts +4 -2
  228. package/dist/stores-sql/session-policy-store-sql.js +3 -13
  229. package/dist/task-mcp.d.ts +1 -1
  230. package/dist/task-settings.d.ts +11 -8
  231. package/dist/task-settings.js +31 -11
  232. package/dist/tool-approval.d.ts +52 -34
  233. package/dist/tool-approval.js +66 -57
  234. package/dist/trace/core-keyset-guard.d.ts +11 -8
  235. package/dist/trace/engine-notice-wire.d.ts +1 -1
  236. package/dist/trace/engine-notice-wire.js +3 -1
  237. package/dist/trace/exit-seat.d.ts +7 -1
  238. package/dist/trace/exit-seat.js +1 -0
  239. package/dist/trace/ledger-sink.d.ts +2 -2
  240. package/dist/trace/model-segment.d.ts +55 -25
  241. package/dist/trace/model-segment.js +101 -33
  242. package/dist/trace/project.d.ts +7 -4
  243. package/dist/trace/project.js +6 -0
  244. package/dist/trace/redact.d.ts +61 -9
  245. package/dist/trace/redact.js +1490 -468
  246. package/dist/trace/self-minted-wire.d.ts +510 -38
  247. package/dist/trace/self-minted-wire.js +165 -17
  248. package/dist/trace/wire-projection-faces.d.ts +1 -1
  249. package/dist/trace/wire-projection-faces.js +1 -1
  250. package/dist/verifier-pause-card.d.ts +33 -5
  251. package/dist/verifier-pause-card.js +15 -10
  252. package/dist/web-admin-client/apply-effective.d.ts +12 -16
  253. package/dist/web-admin-client/apply-effective.js +90 -10
  254. package/dist/workspace-space.d.ts +19 -3
  255. package/dist/workspace-space.js +8 -4
  256. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +3 -1
  257. package/package.json +3 -2
  258. package/wire-changes/server@7.143.0.json +1167 -0
@@ -8,13 +8,13 @@ import { assertAutoConsolidationWirable } from "./memory-consolidation.js";
8
8
  import { createHardenedVmRunner } from "../orchestration/hardened-vm-runner.js";
9
9
  import { createWorkerHardenedVmRunner } from "../orchestration/hardened-vm-worker-runner.js";
10
10
  import { WorkflowAgentRegistry } from "../orchestration/workflow-agent-steer.js";
11
- import { resolveServedSession } from "../orchestration/workflow-completion-inbox.js";
12
11
  import { defaultEngineNoticeRouter, redactNoticeMessage, redactNoticeRuleText } from "../trace/engine-notice-wire.js";
13
12
  import { WorkflowNotifyGate } from "../orchestration/workflow-notify-journal.js";
14
13
  import { makeLoadProjectMemory, makeProbeInstructionSources } from "../project-memory.js";
15
14
  import { createInstructionSourceSeat } from "../instruction-source-notice.js";
16
15
  import { workflowModelAllowlistFor } from "../task-workflow.js";
17
16
  import { buildCrossSessionInboundLayers, crossSessionDialogExpiryOf } from "../cross-session-settings.js";
17
+ import { defaultPeerInboundFace } from "../peer-inbound-face.js";
18
18
  import { createPeerDirectory } from "../peer-directory.js";
19
19
  import { storeFormRefusalInIncident } from "../memory-store-refusal.js";
20
20
  import { coreFileHistoryCaptureSeat } from "../file-history-capture.js";
@@ -32,6 +32,7 @@ export function createRunnerDepsOnAsk(toolApproval) {
32
32
  export const CONFIG_ADVISORY_CLASSIFICATIONS = new Set([
33
33
  "file-history-no-env",
34
34
  "file-history-no-store",
35
+ "input-author-unreadable",
35
36
  "interaction-posture-refused",
36
37
  "memory-tools-not-mounted",
37
38
  "peer-seat-hold",
@@ -47,7 +48,7 @@ export const PROMPT_CACHE_BREAK_CAUSE_LEVEL = {
47
48
  };
48
49
  const PROMPT_CACHE_BREAK_LEVELS = new Map(Object.entries(PROMPT_CACHE_BREAK_CAUSE_LEVEL));
49
50
  const CEILING_ORIGINS = new Set(["walltime", "turns"]);
50
- export function createEngineNoticeForwarder(logger, router = defaultEngineNoticeRouter, metrics) {
51
+ export function createEngineNoticeForwarder(logger, router = defaultEngineNoticeRouter, metrics, peerInbound = defaultPeerInboundFace) {
51
52
  return (notice) => {
52
53
  const detail = redactNoticeRuleText(notice.code, notice.detail);
53
54
  const message = redactNoticeMessage(notice.message);
@@ -57,6 +58,7 @@ export function createEngineNoticeForwarder(logger, router = defaultEngineNotice
57
58
  if (typeof origin === "string" && CEILING_ORIGINS.has(origin))
58
59
  metrics.inc("limit_ceiling_after_answer_total", { origin });
59
60
  }
61
+ peerInbound.observe(notice);
60
62
  router.route(notice);
61
63
  };
62
64
  }
@@ -140,7 +142,7 @@ export function createSharedRunnerDeps(ctx) {
140
142
  return shared;
141
143
  }
142
144
  export function createRunnerDeps(ctx) {
143
- const { config, logger, metrics, localRoot, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine, sessionCaptureRecords, memorySyncRunner, runtimeCapsResolver, fileHistoryStore, permissionRuleStore, fleetBus, workflowRunStore, workflowJournalStore, workflowAgentRegistry, workflowNotifyGate, workflowCompletionInbox, deliverWorkflowCompletion, getRunStore, } = ctx;
145
+ const { config, logger, metrics, localRoot, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine, sessionCaptureRecords, memorySyncRunner, runtimeCapsResolver, fileHistoryStore, permissionRuleStore, fleetBus, workflowRunStore, workflowJournalStore, workflowAgentRegistry, workflowNotifyGate, deliverWorkflowCompletion, } = ctx;
144
146
  const peerSessionLister = sessionStore.listSessions?.bind(sessionStore);
145
147
  const memoryEngineIncident = createMemoryEngineIncidentSink({ logger, metrics });
146
148
  const sharedRunnerDeps = createSharedRunnerDeps(ctx);
@@ -169,20 +171,6 @@ export function createRunnerDeps(ctx) {
169
171
  ...(workflowNotifyGate
170
172
  ? workflowNotifyGate.buildNotifier()
171
173
  : { notify: (input) => deliverWorkflowCompletion(input) }),
172
- ackServed: async (input) => {
173
- if (!workflowCompletionInbox)
174
- return;
175
- try {
176
- const sid = await resolveServedSession(input, getRunStore() ? (id) => getRunStore().getRun(id) : undefined);
177
- if (sid) {
178
- await workflowCompletionInbox.markTerminalServed(sid, input.runId);
179
- logger.info("workflow_complete_ack_served", { route: "poll-served", sessionId: sid, runId: input.runId });
180
- }
181
- }
182
- catch (err) {
183
- logger.warn("workflow_ack_served_failed", { runId: input.runId, err: seatText("operator-log-text", String(err)) });
184
- }
185
- },
186
174
  },
187
175
  }
188
176
  : {};
@@ -31,6 +31,7 @@ import type { BreakerStateStore, CostQuotaStore, RateLimiterStore, StoreBackend
31
31
  import type { WorkflowNotifyJournalStore } from "../orchestration/workflow-notify-journal.js";
32
32
  import type { ToolApprovalCoordinator } from "../tool-approval.js";
33
33
  import type { ParkCommitWatch } from "../plugins/park-commit-watch.js";
34
+ import type { PeerInboundShutdownReading } from "../peer-inbound-face.js";
34
35
  import { type DrainState } from "../fleet/drain-entry.js";
35
36
  export interface ShutdownCtx {
36
37
  config: ServiceConfig;
@@ -94,6 +95,14 @@ export interface ShutdownCtx {
94
95
  servingLease?: {
95
96
  stop(): void;
96
97
  } | undefined;
98
+ /**
99
+ * [ref]:被扣跨会话来信的收信方决断面(`peer-inbound-face.ts`,进程单例)的关停口 —— CC `HBe` 的宿主半场(core 不调 `PeerHeldQueue.shutdown()`)。
100
+ * hardShutdown 起点与审批面收尾**并行**调它、`backend.close()` 之前等它(结清要走信箱店的 CAS 与回执投递):本进程仍被扣的信按 core 的规则
101
+ * 带 `expired` 回执结清(reason `shutdown`)。缺席 = 本装配不接(测试装配)。
102
+ */
103
+ peerInbound?: {
104
+ shutdown(): Promise<PeerInboundShutdownReading>;
105
+ } | undefined;
97
106
  }
98
107
  /**
99
108
  * 受控退的**后台宽限**还要等多久(ms)—— hardShutdown 软停后台 shell 之后、`process.exit` 之前,给软停过的行**一次**
@@ -18,7 +18,7 @@ export function backgroundGraceRemainingMs(a) {
18
18
  return Math.max(0, Math.min(a.softStoppedAt + a.graceMs, a.deadlineMs) - a.now);
19
19
  }
20
20
  export function installShutdownHandlers(ctx) {
21
- 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
+ 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, peerInbound, } = ctx;
22
22
  const dataRoot = config.localDataRoot;
23
23
  if (dataRoot) {
24
24
  const prior = readCrashLast(dataRoot);
@@ -93,6 +93,20 @@ export function installShutdownHandlers(ctx) {
93
93
  logger.warn("approval_park_uncommitted_at_shutdown", { approvalId: p.approvalId, taskId: p.taskId });
94
94
  })
95
95
  .catch((err) => logger.warn("approval_drain_for_shutdown_failed", { err: seatText("operator-log-text", String(err)) }));
96
+ const peerInboundDrain = peerInbound === undefined
97
+ ? Promise.resolve()
98
+ : (async () => {
99
+ const deadline = new AbortController();
100
+ const settled = peerInbound.shutdown().then((reading) => {
101
+ if (reading.queues > 0 || reading.scopeUnresolved > 0)
102
+ logger.info("peer_inbound_settled_at_shutdown", { queues: reading.queues, scopeUnresolved: reading.scopeUnresolved });
103
+ }, (err) => logger.warn("peer_inbound_shutdown_failed", { err: seatText("operator-log-text", String(err)) }));
104
+ const timedOut = delay(Math.max(0, graceDeadlineMs - Date.now()), undefined, { signal: deadline.signal }).then(() => "deadline", () => "done");
105
+ const winner = await Promise.race([settled.then(() => "done"), timedOut]);
106
+ deadline.abort();
107
+ if (winner === "deadline")
108
+ logger.warn("peer_inbound_shutdown_unfinished_at_deadline", {});
109
+ })();
96
110
  clearInterval(reaper);
97
111
  clearInterval(fleetReconcile.timer);
98
112
  const retentionTeardown = retentionLane === undefined
@@ -120,7 +134,7 @@ export function installShutdownHandlers(ctx) {
120
134
  const softStoppedAt = Date.now();
121
135
  const backgroundGraceMs = backgroundGraceRemainingMs({ softStopped: backgroundSoftStopped, softStoppedAt, now: softStoppedAt, graceMs: HOST_BG_KILL_GRACE_MS, deadlineMs: graceDeadlineMs });
122
136
  const backgroundGrace = backgroundGraceMs > 0 ? delay(backgroundGraceMs) : Promise.resolve();
123
- const drained = approvalDrain
137
+ const drained = Promise.all([approvalDrain, peerInboundDrain])
124
138
  .then(() => parkCommits?.quiesce(graceDeadlineMs))
125
139
  .then((q) => {
126
140
  if (q !== undefined && q.inFlight > 0)
@@ -3,6 +3,7 @@ import { createWebAdminRuntime } from "./web-admin.js";
3
3
  import { composeExecutionLane, FILE_SOURCED_LANES } from "./execution-lane.js";
4
4
  import { configSourceKind } from "../config-provider.js";
5
5
  import { logConfigDirMigration, migrateLocalConfigDirectory } from "../config-d-migration.js";
6
+ import { logEnvModelsMigration, runEnvModelsMigration } from "../config-root-migration.js";
6
7
  import { assertLocalConfigDirTrusted } from "../config-dir-trust.js";
7
8
  import { defaultModelRefusal, refusedNameMintedRefusal } from "../model-entry-refusal.js";
8
9
  import { isRosterGateArmed } from "../config.js";
@@ -13,6 +14,8 @@ export async function runStage02(ctx) {
13
14
  const configSource = configSourceKind(config);
14
15
  if (configSource === "local") {
15
16
  await assertLocalConfigDirTrusted({ root: localRoot, declaredOwnerUid: config.configLocalOwnerUid });
17
+ const envModelsMigration = { root: localRoot, env: process.env, envTableIsPlaceholder: isRosterGateArmed(config.webAdmin) };
18
+ logEnvModelsMigration(logger, envModelsMigration, await runEnvModelsMigration(envModelsMigration));
16
19
  logConfigDirMigration(logger, await migrateLocalConfigDirectory(localRoot));
17
20
  }
18
21
  await composeExecutionLane(config, { configSource, localRoot, logger, drivesFromFile: FILE_SOURCED_LANES });
@@ -5,7 +5,10 @@ export declare function runStage03(ctx: Awaited<ReturnType<typeof runStage02>>):
5
5
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
6
6
  engineDataRoot: string;
7
7
  instanceId: string;
8
- mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
8
+ mailboxRecipientLifecycle: Readonly<{
9
+ retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
10
+ listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
11
+ }> | undefined;
9
12
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
10
13
  memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
11
14
  memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
@@ -2,9 +2,8 @@ import { uuidv7 } from "@sema-agent/core";
2
2
  import { openStores } from "./stores.js";
3
3
  export async function runStage03(ctx) {
4
4
  const { config, localRoot, logger, metrics } = ctx;
5
- const { backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportStores, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngine, } = await openStores({ config, logger, metrics, localRoot });
5
+ const { backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, sessionCaptureRecords, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportStores, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngine, } = await openStores({ config, logger, metrics, localRoot });
6
6
  const instanceId = uuidv7();
7
- const sessionCaptureRecords = backend?.sessionCaptureRecords();
8
7
  return { ...ctx, backend, backgroundAgentStore, breakerState, engineDataRoot, instanceId, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memoryExportStores, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecords, sessionStore, sqlEngine, storePosture, taskAttachmentStore, taskListLane, usageWindowStore };
9
8
  }
10
9
  //# sourceMappingURL=stage-03-store-backend.js.map
@@ -28,14 +28,17 @@ export declare function runStage04(ctx: Awaited<ReturnType<typeof runStage03>>):
28
28
  sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
29
29
  sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
30
30
  sideQueryAccounting: import("../budget.js").SideQueryAccounting;
31
- toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
31
+ toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
32
32
  tracer: import("@sema-agent/core").TracerHook;
33
33
  backend: import("../index.js").StoreBackend | undefined;
34
34
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
35
35
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
36
36
  engineDataRoot: string;
37
37
  instanceId: string;
38
- mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
38
+ mailboxRecipientLifecycle: Readonly<{
39
+ retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
40
+ listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
41
+ }> | undefined;
39
42
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
40
43
  memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
41
44
  memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
@@ -8,22 +8,20 @@ import { createRuleConsentLane } from "../rules-consent.js";
8
8
  import { createConsolidationValve } from "./memory-consolidation.js";
9
9
  import { createOperatorFaceIncidentSink } from "../memory-incident-sink.js";
10
10
  export async function runStage04(ctx) {
11
- const { backend, breakerState, config, logger, memoryEngine, metrics, sessionCaptureRecords } = ctx;
12
- const memoryBundleFaces = memoryEngine ? createMemoryBundleFaces(memoryEngine, { ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}) }) : undefined;
11
+ const { backend, breakerState, config, logger, memoryEngine, metrics } = ctx;
12
+ const memoryBundleFaces = memoryEngine ? createMemoryBundleFaces(memoryEngine) : undefined;
13
13
  const memoryComplianceFaces = memoryEngine
14
14
  ? createMemoryComplianceFaces(memoryEngine, {
15
15
  onIncident: createOperatorFaceIncidentSink({ logger }, "memory_compliance_incident"),
16
- ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}),
17
16
  })
18
17
  : undefined;
19
18
  const memoryOriginFaces = memoryEngine
20
19
  ? createMemoryOriginFaces(memoryEngine, {
21
20
  onIncident: createOperatorFaceIncidentSink({ logger }, "memory_origin_incident"),
22
- ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}),
23
21
  })
24
22
  : undefined;
25
23
  const sessionMemoryStatusFace = memoryEngine
26
- ? createSessionMemoryStatusFace(memoryEngine, { ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}) })
24
+ ? createSessionMemoryStatusFace(memoryEngine)
27
25
  : undefined;
28
26
  const { valve: consolidationValve, watch: consolidationSeatWatch } = createConsolidationValve({ config, memoryEngine, logger });
29
27
  const adoptionBoot = await runAdoptionBootScan({ backend, logger });
@@ -47,14 +47,17 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
47
47
  sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
48
48
  sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
49
49
  sideQueryAccounting: import("../budget.js").SideQueryAccounting;
50
- toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
50
+ toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
51
51
  tracer: import("@sema-agent/core").TracerHook;
52
52
  backend: import("../index.js").StoreBackend | undefined;
53
53
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
54
54
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
55
55
  engineDataRoot: string;
56
56
  instanceId: string;
57
- mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
57
+ mailboxRecipientLifecycle: Readonly<{
58
+ retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
59
+ listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
60
+ }> | undefined;
58
61
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
59
62
  memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
60
63
  memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
@@ -108,14 +108,17 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
108
108
  sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
109
109
  sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
110
110
  sideQueryAccounting: import("../budget.js").SideQueryAccounting;
111
- toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
111
+ toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
112
112
  tracer: import("@sema-agent/core").TracerHook;
113
113
  backend: import("../index.js").StoreBackend | undefined;
114
114
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
115
115
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
116
116
  engineDataRoot: string;
117
117
  instanceId: string;
118
- mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
118
+ mailboxRecipientLifecycle: Readonly<{
119
+ retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
120
+ listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
121
+ }> | undefined;
119
122
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
120
123
  memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
121
124
  memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
@@ -95,7 +95,6 @@ export async function runStage06(ctx) {
95
95
  ...(config.memoryProvenance !== undefined ? { provenance: config.memoryProvenance } : {}),
96
96
  onIncident: createOperatorFaceIncidentSink({ logger }, "memory_consolidation_incident"),
97
97
  onStopDetail: (audit) => logger.warn("memory_consolidation_stop_detail", audit),
98
- ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}),
99
98
  writeJudge: createOperatorValveWriteJudge({ ruleStoreProvider: permissionRuleProvider, config }),
100
99
  onNotice: createEngineNoticeForwarder(logger, defaultEngineNoticeRouter, metrics),
101
100
  })
@@ -142,10 +141,9 @@ export async function runStage06(ctx) {
142
141
  memorySyncRunner, toolResultStore: runnerOffloadStore, checkpointStore, sessionPolicyStore, runtimeCapsResolver, fileHistoryStore,
143
142
  permissionRuleStore: permissionRuleProvider,
144
143
  executionEnvFactory, lspManager, fleetBus, deploymentMods, workflowRunStore, workflowJournalStore,
145
- workflowAgentRegistry, workflowNotifyGate, workflowCompletionInbox, deliverWorkflowCompletion, orgMemoryAdmission,
144
+ workflowAgentRegistry, workflowNotifyGate, deliverWorkflowCompletion, orgMemoryAdmission,
146
145
  governanceSeams,
147
146
  sharedMemoryStores: sharedMemoryStore ? sharedMemoryStore : undefined,
148
- getRunStore: () => runStore,
149
147
  });
150
148
  const orgDeliveryGate = mountOrgDeliveryGate({ runnerDeps, directory: orgMemoryAdmission.directory, mailboxStore, backend, logger });
151
149
  const runner = new Runner(runnerDeps);
@@ -125,14 +125,17 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
125
125
  sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
126
126
  sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
127
127
  sideQueryAccounting: import("../budget.js").SideQueryAccounting;
128
- toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
128
+ toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
129
129
  tracer: import("@sema-agent/core").TracerHook;
130
130
  backend: import("../index.js").StoreBackend | undefined;
131
131
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
132
132
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
133
133
  engineDataRoot: string;
134
134
  instanceId: string;
135
- mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
135
+ mailboxRecipientLifecycle: Readonly<{
136
+ retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
137
+ listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
138
+ }> | undefined;
136
139
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
137
140
  memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
138
141
  memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
@@ -23,8 +23,10 @@ import { createUserInputLedgerAtBoot, writerGoneEvidenceFor } from "../user-inpu
23
23
  import { createParkedReviveInheritedGate } from "./parked-revive-gate.js";
24
24
  import { createParkedReviveSurface } from "../parked-revive-surface.js";
25
25
  import { createWebFetchSummarizeLane } from "./webfetch-summarize-lane.js";
26
+ import { assertGovernanceAssemblable } from "./governance-seams.js";
26
27
  import { createRunnerDepsOnAsk } from "./runner-deps.js";
27
- import { bindRateLimiter, bindRunStore } from "./late-binds.js";
28
+ import { bindRateLimiter, bindRunStore, sessionNotifyDoor } from "./late-binds.js";
29
+ import { createBackgroundCompletionRelay } from "../session-notify-door.js";
28
30
  import { buildDisplaySafeUrl } from "../trace/redact.js";
29
31
  import * as facts from "../capability-facts.js";
30
32
  import { WEB_ADMIN_ENV } from "@sema-agent/settings-schema";
@@ -153,6 +155,7 @@ export async function runStage07(ctx) {
153
155
  bindRateLimiter(rateLimiter);
154
156
  let skills = loadDeploymentSkills(config, logger);
155
157
  skills = await webAdmin.applyCenterCapabilities(skills, peerDesk, peerDesk.lease("roster"));
158
+ assertGovernanceAssemblable(config);
156
159
  const repoClient = config.gitApiBaseUrl ? createRepoClient(config.gitApiKind, config.gitApiBaseUrl, config.gitApiToken) : undefined;
157
160
  const webSearchCfg = webSearchConfigFromEnv();
158
161
  const webSearch = webSearchCfg ? createWebSearchBackend(webSearchCfg) : undefined;
@@ -181,6 +184,7 @@ export async function runStage07(ctx) {
181
184
  ensureChildSessionDurable: ensureChildSessionDurable ? ensureChildSessionDurable : undefined,
182
185
  taskListStoreFor: taskListLane.storeFor,
183
186
  subagentExtraTools: sendUserFileToolSpec ? subagentSendUserFileExtraTools({ spec: sendUserFileToolSpec }) : undefined,
187
+ backgroundCompletionSinkFor: createBackgroundCompletionRelay({ door: () => sessionNotifyDoor, logger }),
184
188
  };
185
189
  const scenarios = buildScenarios(scenarioDeps);
186
190
  const builtinDefaultScenario = scenarios.default;
@@ -138,14 +138,17 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
138
138
  sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
139
139
  sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
140
140
  sideQueryAccounting: import("../budget.js").SideQueryAccounting;
141
- toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
141
+ toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
142
142
  tracer: import("@sema-agent/core").TracerHook;
143
143
  backend: import("../index.js").StoreBackend | undefined;
144
144
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
145
145
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
146
146
  engineDataRoot: string;
147
147
  instanceId: string;
148
- mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
148
+ mailboxRecipientLifecycle: Readonly<{
149
+ retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
150
+ listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
151
+ }> | undefined;
149
152
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
150
153
  memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
151
154
  memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
@@ -162,14 +162,17 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
162
162
  sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
163
163
  sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
164
164
  sideQueryAccounting: import("../budget.js").SideQueryAccounting;
165
- toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
165
+ toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
166
166
  tracer: import("@sema-agent/core").TracerHook;
167
167
  backend: import("../index.js").StoreBackend | undefined;
168
168
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
169
169
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
170
170
  engineDataRoot: string;
171
171
  instanceId: string;
172
- mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
172
+ mailboxRecipientLifecycle: Readonly<{
173
+ retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
174
+ listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
175
+ }> | undefined;
173
176
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
174
177
  memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
175
178
  memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
@@ -161,14 +161,17 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
161
161
  sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
162
162
  sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
163
163
  sideQueryAccounting: import("../budget.js").SideQueryAccounting;
164
- toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
164
+ toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
165
165
  tracer: import("@sema-agent/core").TracerHook;
166
166
  backend: import("../plugins/store-backend.js").StoreBackend | undefined;
167
167
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
168
168
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
169
169
  engineDataRoot: string;
170
170
  instanceId: string;
171
- mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
171
+ mailboxRecipientLifecycle: Readonly<{
172
+ retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
173
+ listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
174
+ }> | undefined;
172
175
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
173
176
  memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
174
177
  memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
@@ -13,6 +13,7 @@ import { backgroundAgentOutput, taskHandleOutput, taskHandleStop } from "../runs
13
13
  import { createStoreLiveProbe } from "../store-live-probe.js";
14
14
  import { counterStoreLabel } from "../plugins/store-backend.js";
15
15
  import { sessionStoreLabelOf } from "../store-posture.js";
16
+ import { defaultPeerInboundFace, peerBoxScope } from "../peer-inbound-face.js";
16
17
  import { startFleetClientFromConfig } from "../fleet-client.js";
17
18
  import { createCenterWiringReader } from "../capabilities/center-wiring.js";
18
19
  import { mintEngineSignal } from "../fleet/engine-signal.js";
@@ -187,6 +188,7 @@ export async function runStage10(ctx) {
187
188
  centerIdentityNoticeState: () => webAdmin.centerIdentityNoticeState(),
188
189
  modelRefusalsState: () => webAdmin.modelRefusalsState(),
189
190
  candidateRejectionState: () => webAdmin.candidateRejectionState(),
191
+ latestPlaneRefusalState: () => webAdmin.latestPlaneRefusalState(),
190
192
  configHandoffState: () => webAdmin.configHandoffState(),
191
193
  mcpRevocations,
192
194
  mcpRevocationState: () => webAdmin.mcpRevocationState(),
@@ -225,7 +227,7 @@ export async function runStage10(ctx) {
225
227
  ...(runStore ? { runs: runStore } : {}),
226
228
  ...(workflowRunStore ? { workflows: workflowRunStore } : {}),
227
229
  agents: backgroundAgentStore,
228
- hasPendingAsk: toolApproval ? (originTaskId) => toolApproval.hasLivePendingFrom(originTaskId) : undefined,
230
+ hasPendingAsk: toolApproval ? (names) => toolApproval.hasLivePendingFromLeg(names) : undefined,
229
231
  instanceId,
230
232
  logger,
231
233
  metrics,
@@ -342,6 +344,12 @@ export async function runStage10(ctx) {
342
344
  retentionLane: retentionLaneStarted,
343
345
  releaseRetentionLease: retentionLaneStore !== undefined ? () => retentionLaneStore.release(instanceId) : undefined,
344
346
  servingLease,
347
+ peerInbound: {
348
+ shutdown: () => defaultPeerInboundFace.shutdown(async (sessionId) => {
349
+ const head = await ownerAware.headOf?.(sessionId);
350
+ return head === undefined ? undefined : peerBoxScope(head.owner);
351
+ }),
352
+ },
345
353
  });
346
354
  servingLease?.resumeStickyDenial();
347
355
  return { ...ctx };
@@ -3,7 +3,6 @@ import { type MemorySyncRunner } from "../memory-sync-client.js";
3
3
  import type { Logger } from "../observability/logger.js";
4
4
  import type { Metrics } from "../observability/metrics.js";
5
5
  import { type MemorySyncStore } from "../plugins/memory-sync-store-pg.js";
6
- import { type MailboxRecipientLifecycle } from "../plugins/mailbox-recipient-lifecycle.js";
7
6
  import { type TaskAttachmentStore } from "../plugins/task-attachment-store.js";
8
7
  import { type StoreBackend } from "../plugins/store-backend.js";
9
8
  import { type MemoryScopeStores } from "../memory-scope-stores.js";
@@ -29,7 +28,10 @@ export declare function openStores(ctx: OpenStoresCtx): Promise<{
29
28
  memorySyncCursors: MemorySyncStore | undefined;
30
29
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
31
30
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
32
- mailboxRecipientLifecycle: MailboxRecipientLifecycle | undefined;
31
+ mailboxRecipientLifecycle: Readonly<{
32
+ retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
33
+ listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
34
+ }> | undefined;
33
35
  taskAttachmentStore: TaskAttachmentStore | undefined;
34
36
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
35
37
  memoryExportStores: MemoryScopeStores | undefined;
@@ -40,5 +42,6 @@ export declare function openStores(ctx: OpenStoresCtx): Promise<{
40
42
  memoryPosture: import("../memory-posture.js").MemoryPosture;
41
43
  taskListLane: import("./task-list-lane.js").TaskListLane;
42
44
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
45
+ sessionCaptureRecords: import("../plugins/store-backend.js").SessionCaptureRecordSource | undefined;
43
46
  }>;
44
47
  //# sourceMappingURL=stores.d.ts.map
@@ -12,7 +12,7 @@ import { MinioBlobBackend } from "../plugins/blob-backend.js";
12
12
  import { ensureSnapshotBuckets } from "../plugins/snapshot-bucket-presence.js";
13
13
  import { PgBackgroundAgentStore, TiDBBackgroundAgentStore, ensurePgBackgroundAgentSchema, ensureTiDBBackgroundAgentSchema } from "../stores-sql/background-agent-store-sql.js";
14
14
  import { PgMailboxStore, TiDBMailboxStore, ensurePgMailboxSchema, ensureTiDBMailboxSchema } from "../plugins/mailbox-store-sql.js";
15
- import { createDropOnlyRecipientLifecycle } from "../plugins/mailbox-recipient-lifecycle.js";
15
+ import { recipientLifecycleOf } from "../plugins/mailbox-recipient-lifecycle.js";
16
16
  import { PgUsageWindowStore, TiDBUsageWindowStore, ensurePgUsageWindowSchema, ensureTiDBUsageWindowSchema } from "../stores-sql/usage-window-store-sql.js";
17
17
  import { PgRosterStore, TiDBRosterStore, ensurePgRosterSchema, ensureTiDBRosterSchema } from "../plugins/roster-store-sql.js";
18
18
  import { LocalTaskAttachmentStore } from "../plugins/local-task-attachment-store.js";
@@ -29,7 +29,7 @@ import { assertCloudSnapshotBlobPosture, openStoreBackendWithFallback } from "..
29
29
  import { createMemoryEngineIncidentSink } from "../memory-incident-sink.js";
30
30
  import { announceLockedLegacyMemoryLayers } from "../memory-layer-legacy-lock.js";
31
31
  import { createEngineNoticeForwarder } from "./runner-deps.js";
32
- import { buildMemoryRemoteLaneWarn, memoryEngineBackendFor, memoryEngineRemoteLanePosture, memoryEngineRootFor, memoryLayersNamedBy, memoryMountRootOf } from "../memory-scope.js";
32
+ import { buildMemoryRemoteLaneWarn, memoryEngineBackendFor, memoryEngineRemoteLanePosture, memoryEngineRootFor, memoryMountRootOf } from "../memory-scope.js";
33
33
  import { createMemoryScopeStores } from "../memory-scope-stores.js";
34
34
  import { assertToolResultProvenanceSchema } from "../plugins/tool-result-store-sql.js";
35
35
  import { assertPermissionRuleApprovalSchema, assertPermissionRuleTicketSchema } from "../plugins/permission-rule-store-sql.js";
@@ -124,7 +124,8 @@ export async function openStores(ctx) {
124
124
  let memoryEngine;
125
125
  const engineDataRoot = memoryEngineRootFor(config, localRoot);
126
126
  const memoryEngineIncident = createMemoryEngineIncidentSink({ logger, metrics });
127
- const scopeStoresOver = (deployment) => createMemoryScopeStores({ backend: deployment, root: engineDataRoot, namedLayers: () => memoryLayersNamedBy(config), onIncident: memoryEngineIncident });
127
+ const sessionCaptureRecords = backend?.sessionCaptureRecords();
128
+ const scopeStoresOver = (deployment) => createMemoryScopeStores({ backend: deployment, root: engineDataRoot, onIncident: memoryEngineIncident, ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}) });
128
129
  let memorySyncCursors;
129
130
  let vectorMode;
130
131
  if (config.memoryEngineBackend !== "file" && config.memoryEngineEnabled) {
@@ -301,20 +302,19 @@ export async function openStores(ctx) {
301
302
  await ensurePgMailboxSchema(async (text, params) => pgPool.query(text, params));
302
303
  const store = new PgMailboxStore(pgPool, logger);
303
304
  mailboxStore = store;
304
- mailboxRecipientLifecycle = store;
305
305
  }
306
306
  else if (mysqlPool) {
307
307
  await ensureTiDBMailboxSchema(mysqlPool);
308
308
  const store = new TiDBMailboxStore(mysqlPool, logger);
309
309
  mailboxStore = store;
310
- mailboxRecipientLifecycle = store;
311
310
  }
312
311
  else if (backend?.kind === "local") {
313
312
  mailboxStore = new FileMailboxStore(config.localDataRoot ?? localRoot, {
314
313
  onCorruptRead: createCorruptReadFailOpenSeat("server.mailbox.corrupt-record-skipped"),
315
314
  });
316
- mailboxRecipientLifecycle = createDropOnlyRecipientLifecycle(mailboxStore);
317
315
  }
316
+ if (mailboxStore)
317
+ mailboxRecipientLifecycle = recipientLifecycleOf(mailboxStore);
318
318
  if (mailboxStore) {
319
319
  const laneVerdict = mailboxCrossProcessMountVerdict(mailboxStore);
320
320
  logger.info("mailbox_store_enabled", {
@@ -439,7 +439,7 @@ export async function openStores(ctx) {
439
439
  return {
440
440
  backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, mailboxRecipientLifecycle,
441
441
  taskAttachmentStore, mailboxStore, memoryExportStores, memorySyncRunner, sessionStore, breakerState,
442
- usageWindowStore, memoryPosture, taskListLane, sqlEngine,
442
+ usageWindowStore, memoryPosture, taskListLane, sqlEngine, sessionCaptureRecords,
443
443
  };
444
444
  }
445
445
  //# sourceMappingURL=stores.js.map
@@ -1,4 +1,4 @@
1
- import { type ModelRefusalsSignal } from "@sema-agent/settings-schema";
1
+ import { type ModelPlaneRefusalCode, type ModelRefusalsSignal } from "@sema-agent/settings-schema";
2
2
  import { CenterPromptSource, type SwappableDeps } from "@sema-agent/core";
3
3
  import { buildPricing } from "../budget.js";
4
4
  import { type Scenario, type ScenarioDeps, type ScenarioDetail } from "../capabilities/scenarios.js";
@@ -128,6 +128,10 @@ export interface WebAdminRuntime {
128
128
  * 名 → 码 + 组拒码)。描述**最近一次被判的那份中心候选目录**(每次候选 apply 的报告 `ApplyReport.modelRefusals` 投影;组拒时就是被拒
129
129
  * 的那份 —— 引擎自己的拒因表不换代)。没有可报的拒 / 没有配置管道 / 还没判过候选 ⇒ `undefined`(键缺席)。值变了 ⇒ 通知自报订阅者。 */
130
130
  modelRefusalsState(): ModelRefusalsSignal | undefined;
131
+ /** `GET /v1/models.modelPlane` 的 `planeRefusalCode` 与 `catalog` 的模型面那一半的**同一只**取值口:**最新到达**的目录候选被模型面组拒的码。
132
+ * 在场 ⇔ 模型拒因信号带 `plane` ∧ 落下它的那次 apply 是最新一次到达(到达计数相等,不按收货序数比 —— 本地腿只改决定文件时同一序数再到达)。
133
+ * 与 {@link modelRefusalsState} 的 `plane` 分两个主语:那一键 = 最近一份**被 stage 判过**的模型面的组拒判决(不随更新的到达撤);本口随每一次更新的到达撤。 */
134
+ latestPlaneRefusalState(): ModelPlaneRefusalCode | undefined;
131
135
  /** [ref]:`GET /v1/models.candidateRejected` 的取值口 —— 最近一次候选被判官整拒的结论(`candidateRejection` 座;域集就是判官交出的 `rejected.domains`)。
132
136
  * present-iff 当前生效的配置是因判官整拒了最近一份候选而回落的那一份:后来的候选被判 clean 即撤下;还没判过候选 / 没有配置管道 ⇒ `undefined`(键缺席)。
133
137
  * dry-run 姿势(`webAdmin.dryRun`,compare-only)恒 `undefined`:候选从不被应用,生效配置恒是 env,拒判是预演读数(日志行照响),不是配置没换的原因。 */