@sema-agent/server 7.125.1 → 7.127.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 (275) hide show
  1. package/MIGRATION.md +229 -2
  2. package/README.md +2 -2
  3. package/README.zh-CN.md +2 -2
  4. package/USAGE.md +346 -145
  5. package/deploy/sema-up/README.md +1 -1
  6. package/deploy/sema-up/chart/templates/networkpolicy-sandbox.yaml +57 -0
  7. package/deploy/sema-up/chart/templates/sandbox-rbac.yaml +32 -1
  8. package/deploy/sema-up/chart/templates/server-v4pro.yaml +3 -2
  9. package/deploy/sema-up/chart/templates/server.yaml +2 -1
  10. package/deploy/sema-up/chart/values.yaml +22 -0
  11. package/deploy/sema-up/cluster-up.sh +10 -10
  12. package/deploy/sema-up/kube-up.sh +20 -13
  13. package/deploy/sema-up/lib/dataroot.sh +1 -1
  14. package/deploy/sema-up/lib/envf.sh +5 -5
  15. package/deploy/sema-up/lib/flagshape.sh +5 -5
  16. package/deploy/sema-up/lib/lanes.py +1 -1
  17. package/deploy/sema-up/lib/node-addrs.sh +42 -0
  18. package/deploy/sema-up/lib/parse-machines.py +2 -2
  19. package/deploy/sema-up/lib/shell-access.sh +1 -1
  20. package/deploy/sema-up/preflight.sh +4 -4
  21. package/deploy/sema-up/sema-up.sh +33 -33
  22. package/deploy/sema-up/smoke.sh +3 -3
  23. package/deploy/sema-up/stack/compose.yaml +1 -1
  24. package/deploy/sema-up/stack/sema-stack-cluster.yaml +26 -3
  25. package/dist/approval-card.d.ts +20 -4
  26. package/dist/approval-content-kind.d.ts +38 -22
  27. package/dist/approval-content-kind.js +20 -4
  28. package/dist/audit.js +3 -0
  29. package/dist/bench/s1/arms.d.ts +9 -37
  30. package/dist/bench/s1/arms.js +4 -61
  31. package/dist/bench/s1/live-deps.d.ts +4 -10
  32. package/dist/bench/s1/live-deps.js +1 -222
  33. package/dist/bench/s1/oracle.d.ts +1 -1
  34. package/dist/bench/s1/reviewer.d.ts +1 -1
  35. package/dist/bench/s1/row.d.ts +5 -7
  36. package/dist/bench/s1/row.js +0 -2
  37. package/dist/bench/s1/run-firm.d.ts +2 -2
  38. package/dist/bench/s1/run-firm.js +1 -4
  39. package/dist/bench/s1/runner-ctx.d.ts +17 -29
  40. package/dist/bench/s1/runner-ctx.js +3 -7
  41. package/dist/bench/s1/tasks.d.ts +9 -46
  42. package/dist/bench/s1/tasks.js +4 -63
  43. package/dist/boot/execution-env.d.ts +38 -26
  44. package/dist/boot/execution-env.js +87 -41
  45. package/dist/boot/leader.d.ts +2 -1
  46. package/dist/boot/memory-boundary.d.ts +1 -1
  47. package/dist/boot/memory-consolidation.d.ts +37 -3
  48. package/dist/boot/memory-consolidation.js +18 -2
  49. package/dist/boot/parked-revive-gate.d.ts +0 -3
  50. package/dist/boot/parked-revive-gate.js +2 -2
  51. package/dist/boot/resolve-spec.d.ts +0 -2
  52. package/dist/boot/resolve-spec.js +12 -17
  53. package/dist/boot/retention-lane.d.ts +12 -1
  54. package/dist/boot/retention-lane.js +2 -0
  55. package/dist/boot/runner-deps.d.ts +7 -6
  56. package/dist/boot/runner-deps.js +5 -16
  57. package/dist/boot/session-faces.d.ts +7 -2
  58. package/dist/boot/session-faces.js +37 -1
  59. package/dist/boot/stage-03-store-backend.d.ts +1 -0
  60. package/dist/boot/stage-03-store-backend.js +2 -2
  61. package/dist/boot/stage-04-stores.d.ts +1 -0
  62. package/dist/boot/stage-05-execution-env.d.ts +2 -2
  63. package/dist/boot/stage-05-execution-env.js +7 -4
  64. package/dist/boot/stage-06-runners.d.ts +2 -3
  65. package/dist/boot/stage-06-runners.js +13 -9
  66. package/dist/boot/stage-07-capability-layer.d.ts +2 -3
  67. package/dist/boot/stage-07-capability-layer.js +3 -4
  68. package/dist/boot/stage-08-reapers.d.ts +2 -3
  69. package/dist/boot/stage-08-reapers.js +2 -2
  70. package/dist/boot/stage-09-leader.d.ts +2 -3
  71. package/dist/boot/stage-09-leader.js +2 -1
  72. package/dist/boot/stage-10-http-server.d.ts +2 -3
  73. package/dist/boot/stage-10-http-server.js +2 -2
  74. package/dist/boot/stores.d.ts +1 -0
  75. package/dist/boot/stores.js +4 -3
  76. package/dist/boot/web-admin.d.ts +5 -0
  77. package/dist/boot/web-admin.js +28 -14
  78. package/dist/brain.d.ts +2 -2
  79. package/dist/brain.js +1 -1
  80. package/dist/capabilities/builtin-tools.d.ts +2 -1
  81. package/dist/capabilities/composite-members.d.ts +1 -1
  82. package/dist/capabilities/composite-members.js +1 -1
  83. package/dist/capabilities/hands-lane.d.ts +9 -6
  84. package/dist/capabilities/hands-lane.js +2 -2
  85. package/dist/capabilities/memory-notice.d.ts +27 -22
  86. package/dist/capabilities/memory-notice.js +15 -17
  87. package/dist/capabilities/scenarios.d.ts +9 -14
  88. package/dist/capabilities/scenarios.js +5 -50
  89. package/dist/capability-facts.d.ts +22 -11
  90. package/dist/capability-facts.js +13 -6
  91. package/dist/config-catalog.js +14 -5
  92. package/dist/config-provider.d.ts +5 -1
  93. package/dist/config-provider.js +23 -4
  94. package/dist/config-types.d.ts +19 -2
  95. package/dist/config.js +41 -6
  96. package/dist/deployment-governance.d.ts +19 -21
  97. package/dist/deployment-governance.js +7 -8
  98. package/dist/env-name-allowlist-knobs.d.ts +5 -5
  99. package/dist/env-name-allowlist-knobs.js +1 -0
  100. package/dist/execution-lane-caps.d.ts +12 -0
  101. package/dist/execution-lane-caps.js +18 -4
  102. package/dist/fleet/subagent-tail-bus.js +15 -5
  103. package/dist/hooks/hook-runner.d.ts +84 -30
  104. package/dist/hooks/hook-runner.js +74 -41
  105. package/dist/http/admission.js +17 -10
  106. package/dist/http/durable-run-leg.d.ts +5 -4
  107. package/dist/http/durable-run-leg.js +2 -4
  108. package/dist/http/idempotency.d.ts +28 -6
  109. package/dist/http/idempotency.js +10 -2
  110. package/dist/http/principal-gate.d.ts +14 -0
  111. package/dist/http/principal-gate.js +7 -0
  112. package/dist/http/request-guards.d.ts +2 -1
  113. package/dist/http/request-guards.js +14 -14
  114. package/dist/http/resume-legs.d.ts +2 -2
  115. package/dist/http/resume-legs.js +20 -10
  116. package/dist/http/route-ctx.d.ts +15 -7
  117. package/dist/http/routes/a2a-serve.js +11 -7
  118. package/dist/http/routes/approvals-assistant.js +18 -3
  119. package/dist/http/routes/background.d.ts +1 -1
  120. package/dist/http/routes/background.js +1 -1
  121. package/dist/http/routes/capabilities.js +10 -2
  122. package/dist/http/routes/mcp-reconnect.js +1 -1
  123. package/dist/http/routes/runs.d.ts +4 -3
  124. package/dist/http/routes/runs.js +35 -14
  125. package/dist/http/routes/session-sync.js +14 -11
  126. package/dist/http/routes/sessions.js +9 -9
  127. package/dist/http/routes/side-query.js +6 -19
  128. package/dist/http/routes/tasks.js +29 -19
  129. package/dist/http/routes/workflows.js +8 -0
  130. package/dist/http/server.d.ts +4 -0
  131. package/dist/http/server.js +3 -5
  132. package/dist/http/submit-replay.d.ts +15 -8
  133. package/dist/http/submit-replay.js +6 -0
  134. package/dist/http/wire-types.d.ts +7 -9
  135. package/dist/index.d.ts +1 -1
  136. package/dist/index.js +1 -1
  137. package/dist/internal-run-env.d.ts +30 -0
  138. package/dist/internal-run-env.js +11 -0
  139. package/dist/leader/wire.js +3 -2
  140. package/dist/lsp/manager.js +1 -1
  141. package/dist/memory-scope.d.ts +19 -7
  142. package/dist/memory-scope.js +25 -8
  143. package/dist/observability/fail-open.d.ts +31 -3
  144. package/dist/observability/fail-open.js +31 -3
  145. package/dist/observability/metrics.d.ts +0 -1
  146. package/dist/observability/metrics.js +1 -4
  147. package/dist/observability/run-terminal.js +72 -4
  148. package/dist/permission-rule-vocab.d.ts +3 -2
  149. package/dist/permission-rule-vocab.js +1 -1
  150. package/dist/plan-cache-probe.d.ts +3 -2
  151. package/dist/plugins/approval-ask-store-sql.d.ts +1 -1
  152. package/dist/plugins/caching-session-store.d.ts +42 -22
  153. package/dist/plugins/caching-session-store.js +19 -9
  154. package/dist/plugins/checkpoint-store-sql.d.ts +42 -28
  155. package/dist/plugins/checkpoint-store-sql.js +57 -11
  156. package/dist/plugins/file-run-store.d.ts +25 -21
  157. package/dist/plugins/file-run-store.js +70 -34
  158. package/dist/plugins/k8s-exec-protocol.js +3 -0
  159. package/dist/plugins/local-checkpoint-store.d.ts +8 -5
  160. package/dist/plugins/local-checkpoint-store.js +5 -15
  161. package/dist/plugins/local-session-store.d.ts +66 -7
  162. package/dist/plugins/local-session-store.js +168 -101
  163. package/dist/plugins/mailbox-recipient-lifecycle.d.ts +1 -1
  164. package/dist/plugins/memory-run-store.d.ts +19 -3
  165. package/dist/plugins/memory-run-store.js +38 -3
  166. package/dist/plugins/one-time-migrations.d.ts +165 -39
  167. package/dist/plugins/one-time-migrations.js +51 -144
  168. package/dist/plugins/pg-pool.js +11 -1
  169. package/dist/plugins/pg-session-storage.d.ts +2 -0
  170. package/dist/plugins/pg-session-storage.js +9 -5
  171. package/dist/plugins/remote-env-adb.d.ts +3 -0
  172. package/dist/plugins/remote-env-adb.js +1 -0
  173. package/dist/plugins/remote-env-device.d.ts +3 -0
  174. package/dist/plugins/remote-env-device.js +1 -0
  175. package/dist/plugins/remote-env-e2b.d.ts +4 -0
  176. package/dist/plugins/remote-env-e2b.js +2 -1
  177. package/dist/plugins/remote-env-host.d.ts +23 -1
  178. package/dist/plugins/remote-env-host.js +20 -2
  179. package/dist/plugins/remote-env-k8s.d.ts +264 -41
  180. package/dist/plugins/remote-env-k8s.js +551 -82
  181. package/dist/plugins/remote-env-local-docker.d.ts +4 -0
  182. package/dist/plugins/remote-env-local-docker.js +2 -1
  183. package/dist/plugins/remote-env-ssh.d.ts +3 -0
  184. package/dist/plugins/remote-env-ssh.js +1 -0
  185. package/dist/plugins/retention-store-sql.d.ts +4 -1
  186. package/dist/plugins/retention-store-sql.js +11 -9
  187. package/dist/plugins/run-store-sql.d.ts +44 -6
  188. package/dist/plugins/run-store-sql.js +92 -27
  189. package/dist/plugins/session-capture-record-store-sql.d.ts +2 -3
  190. package/dist/plugins/session-store.d.ts +4 -3
  191. package/dist/plugins/session-store.js +1 -1
  192. package/dist/plugins/sql-driver.d.ts +2 -1
  193. package/dist/plugins/store-backend.d.ts +12 -5
  194. package/dist/plugins/store-backend.js +13 -4
  195. package/dist/plugins/store-contracts.d.ts +20 -3
  196. package/dist/plugins/store-open-wait.js +3 -0
  197. package/dist/plugins/tidb-pool.js +15 -3
  198. package/dist/plugins/tidb-session-storage.js +3 -2
  199. package/dist/plugins/tidb-session-store.d.ts +2 -0
  200. package/dist/plugins/tidb-session-store.js +6 -2
  201. package/dist/request-key-closure.d.ts +32 -7
  202. package/dist/request-key-closure.js +25 -9
  203. package/dist/router/route-orchestration.d.ts +3 -11
  204. package/dist/router/route-orchestration.js +0 -4
  205. package/dist/rule-entry-list.js +0 -4
  206. package/dist/rules-consent.js +3 -0
  207. package/dist/run-acceptance.d.ts +51 -0
  208. package/dist/run-acceptance.js +27 -0
  209. package/dist/run-local.d.ts +5 -4
  210. package/dist/run-local.js +23 -17
  211. package/dist/runs.d.ts +7 -11
  212. package/dist/runs.js +6 -16
  213. package/dist/sandbox-egress-policy.d.ts +61 -0
  214. package/dist/sandbox-egress-policy.js +235 -0
  215. package/dist/security.d.ts +7 -0
  216. package/dist/security.js +5 -0
  217. package/dist/server-secret-env.d.ts +10 -4
  218. package/dist/server-secret-env.js +4 -1
  219. package/dist/session-error-wire.d.ts +2 -2
  220. package/dist/session-incarnation.d.ts +46 -2
  221. package/dist/session-incarnation.js +14 -3
  222. package/dist/session-sync-kernel.d.ts +10 -3
  223. package/dist/session-titler.d.ts +5 -3
  224. package/dist/spec-fields.d.ts +24 -8
  225. package/dist/spec-fields.js +21 -2
  226. package/dist/task-workflow.d.ts +6 -4
  227. package/dist/task-workflow.js +3 -2
  228. package/dist/tool-approval.d.ts +78 -6
  229. package/dist/tool-approval.js +7 -3
  230. package/dist/trace/core-keyset-guard.d.ts +6 -5
  231. package/dist/trace/engine-notice-wire.d.ts +26 -1
  232. package/dist/trace/engine-notice-wire.js +7 -2
  233. package/dist/trace/ledger-events.d.ts +9 -3
  234. package/dist/trace/ledger-sink.d.ts +7 -0
  235. package/dist/trace/ledger-sink.js +14 -4
  236. package/dist/trace/project.d.ts +57 -11
  237. package/dist/trace/project.js +54 -8
  238. package/dist/trace/self-minted-wire.d.ts +94 -2
  239. package/dist/trace/self-minted-wire.js +28 -0
  240. package/dist/trace/tool-output-media.d.ts +26 -0
  241. package/dist/trace/tool-output-media.js +57 -0
  242. package/dist/trace/wire-projection-faces.d.ts +7 -1
  243. package/dist/trace/wire-projection-faces.js +2 -1
  244. package/dist/web-admin-client/apply-effective.d.ts +13 -7
  245. package/dist/web-admin-client/apply-effective.js +11 -26
  246. package/dist/web-admin-client/apply-ledger.d.ts +2 -2
  247. package/dist/web-admin-client/candidate-gate.d.ts +39 -4
  248. package/dist/web-admin-client/candidate-gate.js +9 -2
  249. package/dist/web-admin-client/facade.d.ts +2 -2
  250. package/dist/web-admin-client/http-client.d.ts +3 -1
  251. package/dist/web-admin-client/http-client.js +4 -3
  252. package/dist/web-admin-client/read-warnings.d.ts +33 -5
  253. package/dist/web-admin-client/read-warnings.js +41 -6
  254. package/dist/web-admin-client/types.d.ts +11 -5
  255. package/dist/workspace-cache.d.ts +45 -0
  256. package/dist/workspace-cache.js +30 -0
  257. package/dist/workspace-space-commit.d.ts +116 -0
  258. package/dist/workspace-space-commit.js +117 -0
  259. package/dist/workspace-space.d.ts +75 -9
  260. package/dist/workspace-space.js +52 -1
  261. package/package.json +4 -4
  262. package/dist/boot/session-incarnation-seat.d.ts +0 -41
  263. package/dist/boot/session-incarnation-seat.js +0 -69
  264. package/dist/capabilities/code-review-council.d.ts +0 -49
  265. package/dist/capabilities/code-review-council.js +0 -111
  266. package/dist/capabilities/collab-wire.d.ts +0 -36
  267. package/dist/capabilities/collab-wire.js +0 -2
  268. package/dist/capabilities/collab-workflows.d.ts +0 -47
  269. package/dist/capabilities/collab-workflows.js +0 -90
  270. package/dist/capabilities/prompts/code-review.d.ts +0 -25
  271. package/dist/capabilities/prompts/code-review.js +0 -39
  272. package/dist/capabilities/prompts/team.d.ts +0 -10
  273. package/dist/capabilities/prompts/team.js +0 -6
  274. package/dist/capabilities/team.d.ts +0 -113
  275. package/dist/capabilities/team.js +0 -70
@@ -23,6 +23,7 @@ import { type WorkflowCompletionInbox } from "../orchestration/workflow-completi
23
23
  import { type EngineNoticeRouter } from "../trace/engine-notice-wire.js";
24
24
  import { WorkflowNotifyGate, type WorkflowCompletionPayload } from "../orchestration/workflow-notify-journal.js";
25
25
  import type { ServiceWorkflowJournalStore, SessionCaptureRecordSource, StoreBackend, ToolResultStoreFull } from "../plugins/store-backend.js";
26
+ import type { createSessionStore } from "../plugins/session-store.js";
26
27
  import type { QuestionCoordinator } from "../question.js";
27
28
  import type { ToolApprovalCoordinator } from "../tool-approval.js";
28
29
  import type { MemoryBackend } from "@sema-agent/core";
@@ -87,9 +88,6 @@ export interface RunnerDepsCtx {
87
88
  promptSource: RunnerDeps["promptSource"];
88
89
  rosterStore: RunnerDeps["rosterStore"];
89
90
  backgroundAgentStore: RunnerDeps["backgroundAgentStore"];
90
- /** S-506([ref] §5):本副本 per-session 登记簿的**同步**化身读腿(装配期由 resolve-spec 写入)。在场 ⇒ 铸
91
- * `RunnerDeps.memorySessionIncarnation` 座;缺席 ⇒ 座不铸(core 口径:按 id 绑定 = 修前行为)。 */
92
- sessionIncarnationOf: ((sessionId: string) => string | undefined) | undefined;
93
91
  mailboxStore: RunnerDeps["mailboxStore"];
94
92
  /**
95
93
  * [ref]:mailbox 的**收件人生命周期面**(预删除态)。与 `mailboxStore` **成对**(`boot/stores.ts` 同段铸,
@@ -105,7 +103,7 @@ export interface RunnerDepsCtx {
105
103
  elicitation: ElicitationCoordinator | undefined;
106
104
  question: QuestionCoordinator | undefined;
107
105
  toolApproval: ToolApprovalCoordinator | undefined;
108
- sessionStore: ReturnType<StoreBackend["session"]>;
106
+ sessionStore: ReturnType<typeof createSessionStore>;
109
107
  /**
110
108
  * B-060(test [ref] 核心发现①)—— **一条部署腿上的每一只 Runner 看同一只检查点店**。
111
109
  *
@@ -159,6 +157,9 @@ export interface RunnerDepsCtx {
159
157
  backend: MemoryBackend;
160
158
  root: string;
161
159
  } | undefined;
160
+ /** core 7.49.0 [ref]:引擎数据根(boot 事实,`boot/stores.ts` 恒铸 —— 记忆引擎开不开都在)。共享基座把它交成每只 Runner 的
161
+ * `memoryEngineDir`:引擎从它解出每条腿的唯一豁免根(守卫集不再收 `dataRoot`)。开引擎时与 `memoryEngine.root` 同一只。 */
162
+ engineDataRoot: string;
162
163
  /**
163
164
  * S-399(core 7.21.1)—— 记忆整理的**已解析座**(`boot/memory-consolidation.ts` 的
164
165
  * `resolveConsolidationDriverSeat` 产物),在场 **iff** 整理阀门开着(`resolveConsolidationValve` 的判决:
@@ -236,7 +237,7 @@ export interface RunnerDepsCtx {
236
237
  }
237
238
  /** [ref] A10 留档发现②:main runner `RunnerDeps` 与 main.ts subRunner 字面量之间此前手工重复
238
239
  * 的 ~15 个键,类型标注见 {@link createSharedRunnerDeps} 头注。 */
239
- export type SharedRunnerDeps = Pick<RunnerDeps, "brain" | "readFace" | "readDenyPatterns" | "readDenyBuiltinTiers" | "readDenyBuiltinExclude" | "memoryDelegationEvidence" | "memoryProvenance" | "memoryCapturePolicy" | "delegationEntryCaps" | "crossSessionInbound" | "crossSessionDialogExpiry" | "writeProtectedPaths" | "allowedTools" | "models" | "roles" | "tiers" | "pricing" | "tracer" | "promptSource" | "executionEnvFactory" | "lspManager" | "backgroundAgentStore" | "mailboxStore" | "rosterStore" | "hooks" | "toolResultStore" | "checkpointStore" | "hands" | "sessionPolicyStore" | "usageWindows" | "usageWindowStore" | "memoryScopeAdmission" | "deploymentMemoryScopes" | "sharedMemoryStores" | "compliancePostureResolver" | "lockedConfig" | "retentionPolicy" | "onNotice" | "mcpRevocations">;
240
+ export type SharedRunnerDeps = Pick<RunnerDeps, "brain" | "readFace" | "readDenyPatterns" | "readDenyBuiltinTiers" | "readDenyBuiltinExclude" | "memoryDelegationEvidence" | "memoryProvenance" | "memoryCapturePolicy" | "delegationEntryCaps" | "crossSessionInbound" | "crossSessionDialogExpiry" | "writeProtectedPaths" | "memoryEngineDir" | "allowedTools" | "models" | "roles" | "tiers" | "pricing" | "tracer" | "promptSource" | "executionEnvFactory" | "lspManager" | "backgroundAgentStore" | "mailboxStore" | "rosterStore" | "hooks" | "toolResultStore" | "checkpointStore" | "hands" | "sessionPolicyStore" | "usageWindows" | "usageWindowStore" | "memoryScopeAdmission" | "deploymentMemoryScopes" | "sharedMemoryStores" | "compliancePostureResolver" | "lockedConfig" | "retentionPolicy" | "onNotice" | "mcpRevocations">;
240
241
  /**
241
242
  * [ref] A10 留档发现②(review 2026-07-29,[ref]§三族A 同源修补的延续):main runner 的
242
243
  * `RunnerDeps` 字面量(下方 `createRunnerDeps`)与 `main.ts` 里 subRunner 的 `new Runner({...})`
@@ -263,7 +264,7 @@ export type SharedRunnerDeps = Pick<RunnerDeps, "brain" | "readFace" | "readDeny
263
264
  * 属性,比再抽一层共享基座更强的同源保证),不重复收纳进这里。
264
265
  */
265
266
  /** 基座真实消费的窄面(Pick)——subRunner 调用点(main.ts)只需凑这 13 个字段,不必造全量 ctx。 */
266
- export type SharedRunnerDepsCtx = Pick<RunnerDepsCtx, "config" | "brain" | "pricing" | "tracer" | "promptSource" | "executionEnvFactory" | "lspManager" | "backgroundAgentStore" | "mailboxStore" | "rosterStore" | "deploymentHooks" | "toolResultStore" | "checkpointStore" | "sessionPolicyStore" | "hands" | "usageWindowStore" | "orgMemoryAdmission" | "sharedMemoryStores" | "logger" | "governanceSeams" | "mcpRevocations" | "metrics">;
267
+ export type SharedRunnerDepsCtx = Pick<RunnerDepsCtx, "config" | "brain" | "pricing" | "tracer" | "promptSource" | "executionEnvFactory" | "lspManager" | "backgroundAgentStore" | "mailboxStore" | "rosterStore" | "deploymentHooks" | "toolResultStore" | "checkpointStore" | "sessionPolicyStore" | "hands" | "usageWindowStore" | "orgMemoryAdmission" | "sharedMemoryStores" | "logger" | "governanceSeams" | "mcpRevocations" | "metrics" | "engineDataRoot">;
267
268
  /** 转发席只需要 `inc` —— 刻意窄到这一个动词,免得把整只 Metrics 拖进这条纯转发腿。 */
268
269
  export interface EngineNoticeMetricsSeat {
269
270
  inc: (name: string, labels?: Record<string, string>) => void;
@@ -1,16 +1,14 @@
1
1
  import { createFileWorkflowScriptStore } from "@sema-agent/core";
2
2
  import { join } from "node:path";
3
- import { listCollabWorkflows, resolveCollabWorkflow } from "../capabilities/collab-workflows.js";
4
3
  import { lkgReadDenyRows } from "../config-lkg.js";
5
4
  import { fleetBackgroundChildPublisher, FleetEventBus } from "../fleet/fleet-bus.js";
6
5
  import { createMemoryEngineIncidentSink } from "../memory-incident-sink.js";
7
- import { createMemorySessionIncarnationSeat, sessionFaceReaderOf } from "./session-incarnation-seat.js";
8
6
  import { assertAutoConsolidationWirable } from "./memory-consolidation.js";
9
7
  import { createHardenedVmRunner } from "../orchestration/hardened-vm-runner.js";
10
8
  import { createWorkerHardenedVmRunner } from "../orchestration/hardened-vm-worker-runner.js";
11
9
  import { WorkflowAgentRegistry } from "../orchestration/workflow-agent-steer.js";
12
10
  import { resolveServedSession } from "../orchestration/workflow-completion-inbox.js";
13
- import { defaultEngineNoticeRouter, redactNoticeRuleText } from "../trace/engine-notice-wire.js";
11
+ import { defaultEngineNoticeRouter, redactNoticeMessage, redactNoticeRuleText } from "../trace/engine-notice-wire.js";
14
12
  import { WorkflowNotifyGate } from "../orchestration/workflow-notify-journal.js";
15
13
  import { makeLoadProjectMemory, makeProbeInstructionSources } from "../project-memory.js";
16
14
  import { createInstructionSourceSeat } from "../instruction-source-notice.js";
@@ -43,7 +41,8 @@ const CEILING_ORIGINS = new Set(["walltime", "turns"]);
43
41
  export function createEngineNoticeForwarder(logger, router = defaultEngineNoticeRouter, metrics) {
44
42
  return (notice) => {
45
43
  const detail = redactNoticeRuleText(notice.code, notice.detail);
46
- logger.warn("engine_notice", { code: notice.code, message: notice.message, ...(detail !== undefined ? { detail } : {}) });
44
+ const message = redactNoticeMessage(notice.message);
45
+ logger.warn("engine_notice", { code: notice.code, message, ...(detail !== undefined ? { detail } : {}) });
47
46
  if (metrics !== undefined && notice.code === "task.interrupt_unconsumed") {
48
47
  const origin = notice.detail?.origin;
49
48
  if (typeof origin === "string" && CEILING_ORIGINS.has(origin))
@@ -103,6 +102,7 @@ export function createSharedRunnerDeps(ctx) {
103
102
  usageWindows: ctx.config.usageWindows ? ctx.config.usageWindows : undefined,
104
103
  usageWindowStore: ctx.usageWindowStore ? ctx.usageWindowStore : undefined,
105
104
  sharedMemoryStores: ctx.sharedMemoryStores ? ctx.sharedMemoryStores : undefined,
105
+ memoryEngineDir: ctx.engineDataRoot,
106
106
  compliancePostureResolver: ctx.governanceSeams.compliancePostureResolver,
107
107
  lockedConfig: ctx.governanceSeams.lockedConfig,
108
108
  retentionPolicy: ctx.governanceSeams.retentionPolicy,
@@ -123,16 +123,7 @@ export function createRunnerDeps(ctx) {
123
123
  : createHardenedVmRunner(),
124
124
  workflowRunStore: workflowRunStore ? workflowRunStore : undefined,
125
125
  workflowJournalStore: workflowJournalStore ? workflowJournalStore : undefined,
126
- workflowScriptStore: (() => {
127
- const fileStore = createFileWorkflowScriptStore(join(config.localDataRoot ?? localRoot, "workflow-scripts"));
128
- return {
129
- scopePartitioned: true,
130
- persist: fileStore.persist.bind(fileStore),
131
- load: fileStore.load.bind(fileStore),
132
- resolveName: (name) => resolveCollabWorkflow(name) ?? fileStore.resolveName?.(name),
133
- list: () => listCollabWorkflows(),
134
- };
135
- })(),
126
+ workflowScriptStore: createFileWorkflowScriptStore(join(config.localDataRoot ?? localRoot, "workflow-scripts")),
136
127
  onWorkflowAgentSpawn: workflowAgentRegistry
137
128
  ? (handle) => {
138
129
  const unregister = workflowAgentRegistry.register(handle);
@@ -192,9 +183,7 @@ export function createRunnerDeps(ctx) {
192
183
  },
193
184
  sessionStore,
194
185
  memoryBackend: memoryEngine ? memoryEngine.backend : undefined,
195
- memoryEngineDir: memoryEngine ? memoryEngine.root : undefined,
196
186
  memoryCaptureRecordStore: sessionCaptureRecords !== undefined ? (plane) => sessionCaptureRecords(plane) : undefined,
197
- memorySessionIncarnation: ctx.sessionIncarnationOf !== undefined && sessionFaceReaderOf(sessionStore) !== undefined ? createMemorySessionIncarnationSeat(ctx.sessionIncarnationOf, (e, f) => logger.warn(e, f)) : undefined,
198
187
  onMemoryHarvestReport: memoryEngine
199
188
  ? (report, info) => {
200
189
  metrics.inc("memory_harvest_total", { ok: String(report.ok), phase: info.phase, incident: report.incident?.kind ?? "none" });
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * ⚠️ **位置即契约**:
8
8
  * 1. `sessionWatchRegistry` 必须在 `purgeSession` **之前**构造 —— purge 尾部的 `dropSession` 是
9
- * 同副本租户轮转围栏(delete 即终结旧 owner 的 SSE 订阅),两者是一对。
9
+ * 同副本租户轮转围栏(delete 即终结旧 owner 的 SSE 订阅),两者是一对;空间回收座在它**之后**起、且不在应答路径里。
10
10
  * 2. `setLeafAdvanceListener(...)` 是**进程级单点**装载(leaf-bus 只有一个监听位),必须与
11
11
  * registry 的构造同段发生,晚于它、早于任何会 append 的路由。
12
12
  */
@@ -17,6 +17,7 @@ import type { Metrics } from "../observability/metrics.js";
17
17
  import type { WorkflowCompletionInbox } from "../orchestration/workflow-completion-inbox.js";
18
18
  import { PlanCacheProbe } from "../plan-cache-probe.js";
19
19
  import type { CheckpointStoreFull, StoreBackend, ToolResultStoreFull } from "../plugins/store-backend.js";
20
+ import type { createSessionStore } from "../plugins/session-store.js";
20
21
  import type { TaskAttachmentStore } from "../plugins/task-attachment-store.js";
21
22
  import type { FileHistoryErasureFace } from "../file-history-capture.js";
22
23
  import type { OwnerAwareSessionStore } from "../security.js";
@@ -26,13 +27,14 @@ import type { TaskListLane } from "./task-list-lane.js";
26
27
  import { type RunnerDeps } from "@sema-agent/core";
27
28
  import type { MailboxRecipientLifecycle } from "../plugins/mailbox-recipient-lifecycle.js";
28
29
  import type { UserInputLedgerStore } from "../user-input-ledger.js";
30
+ import type { SpaceReclaimer } from "../workspace-space.js";
29
31
  export interface SessionFacesCtx {
30
32
  config: ServiceConfig;
31
33
  logger: Logger;
32
34
  metrics: Metrics;
33
35
  localRoot: string;
34
36
  backend: StoreBackend | undefined;
35
- sessionStore: ReturnType<StoreBackend["session"]>;
37
+ sessionStore: ReturnType<typeof createSessionStore>;
36
38
  runStore: ReturnType<StoreBackend["run"]> | undefined;
37
39
  checkpointStore: CheckpointStoreFull | undefined;
38
40
  toolResultStore: ToolResultStoreFull | undefined;
@@ -60,6 +62,9 @@ export interface SessionFacesCtx {
60
62
  /** S-965:用户输入受理账本的**店**(E21 级联的一条腿:该会话的受理行随会话删)。与受理 / 收敛 / 告知读的是同一只(stage-07 取一次)。
61
63
  * 缺席 = 本部署没装账本(env-only:没有 backend / run 店)⇒ 无行可删。 */
62
64
  userInputLedgerStore: UserInputLedgerStore | undefined;
65
+ /** k8s 车道工作区空间的回收座(配了构建缓存卷或快照存储时在场;与托管留存 sweep 同一只)—— E21 级联的一条腿:会话删了 =
66
+ * 这位住客的空间结束了,它的缓存卷、`space/` 快照、该会话停驻车道的快照随之回收。缺席 = 本部署没有可回收的东西。 */
67
+ spaceReclaimer?: SpaceReclaimer;
63
68
  }
64
69
  export declare function createSessionFaces(ctx: SessionFacesCtx): {
65
70
  ownerAware: OwnerAwareSessionStore;
@@ -7,8 +7,10 @@ import { SessionWatchRegistry, posIntEnv } from "../session-watch.js";
7
7
  import { defaultTaskRegistry, peerSessionBoxHandle } from "@sema-agent/core";
8
8
  import { reapSessionBackgroundHard } from "../background-session-reap.js";
9
9
  import { probeSessionChildren, retireSessionChildren, SessionChildrenStopIncompleteError } from "../session-children-retire.js";
10
+ import { SessionIncarnationMissingError, redactIncarnations, sessionFaceReadOf } from "../session-incarnation.js";
11
+ import { recordFailOpen } from "../observability/fail-open.js";
10
12
  export function createSessionFaces(ctx) {
11
- const { config, logger, metrics, localRoot, backend, sessionStore, runStore, checkpointStore, toolResultStore, resumeAnchorStore, approvalExemptionStore, sessionPolicyStore, taskAttachmentStore, fileHistoryErasure, workflowCompletionInbox, taskListLane, deviceStore, dropSessionScoped, mailboxStore, mailboxRecipientLifecycle, backgroundAgentStore, userInputLedgerStore, } = ctx;
13
+ const { config, logger, metrics, localRoot, backend, sessionStore, runStore, checkpointStore, toolResultStore, resumeAnchorStore, approvalExemptionStore, sessionPolicyStore, taskAttachmentStore, fileHistoryErasure, workflowCompletionInbox, taskListLane, deviceStore, dropSessionScoped, mailboxStore, mailboxRecipientLifecycle, backgroundAgentStore, userInputLedgerStore, spaceReclaimer, } = ctx;
12
14
  const mysqlPool = backend?.mysqlPool();
13
15
  const auditPgPool = backend?.pgPool();
14
16
  const auditLocalRoot = backend?.kind === "local" ? (config.localDataRoot ?? localRoot) : undefined;
@@ -34,6 +36,28 @@ export function createSessionFaces(ctx) {
34
36
  })
35
37
  : undefined;
36
38
  setLeafAdvanceListener(sessionWatchRegistry ? (sid, leaf, owner, seq) => sessionWatchRegistry.notifyLocal(sid, leaf, owner, seq) : undefined);
39
+ const readSessionFace = sessionFaceReadOf(sessionStore);
40
+ const occupantSpaceKeyOf = async (sessionId, owner) => {
41
+ if (readSessionFace === undefined)
42
+ return undefined;
43
+ try {
44
+ const face = await readSessionFace(sessionId);
45
+ return face !== undefined && face.owner === owner ? face.incarnation : undefined;
46
+ }
47
+ catch (err) {
48
+ if (err instanceof SessionIncarnationMissingError)
49
+ return undefined;
50
+ const reason = "occupant_unreadable";
51
+ recordFailOpen("server.workspace-cache.reclaim-failed", `reason=${reason}`);
52
+ logger.warn("workspace_cache_reclaim_failed", {
53
+ sessionId,
54
+ reason,
55
+ error: redactIncarnations(String(err)),
56
+ effect: "the deleted session's space could not be read, so its build-cache volume and snapshot objects are not reclaimed (the session delete went ahead) — delete the volume by label sema.space; the objects fall to the bucket's lifecycle rule",
57
+ });
58
+ return undefined;
59
+ }
60
+ };
37
61
  const purgeSession = ownerAware.deleteSession
38
62
  ? async (sessionId, owner) => {
39
63
  if (ownerAware.ownerOf) {
@@ -41,6 +65,7 @@ export function createSessionFaces(ctx) {
41
65
  if (stillOwner !== owner)
42
66
  return { deleted: false };
43
67
  }
68
+ const spaceKey = spaceReclaimer !== undefined ? await occupantSpaceKeyOf(sessionId, owner) : undefined;
44
69
  const childScope = owner ?? "default";
45
70
  const reach = await probeSessionChildren({ agentStore: backgroundAgentStore, checkpointStore, registry: defaultTaskRegistry }, sessionId, childScope);
46
71
  if (!reach.reachable) {
@@ -116,6 +141,17 @@ export function createSessionFaces(ctx) {
116
141
  await peerBox.store.drop(peerBox.scope, peerBox.handle);
117
142
  const historyDeleted = await ownerAware.deleteSession(sessionId, owner);
118
143
  sessionWatchRegistry?.dropSession(sessionId);
144
+ if (historyDeleted && spaceReclaimer !== undefined && spaceKey !== undefined) {
145
+ void spaceReclaimer.reclaim([{ sessionId, spaceKey }]).catch((err) => {
146
+ recordFailOpen("server.workspace-space.reclaim-failed", "stage=seat_threw");
147
+ logger.warn("workspace_space_reclaim_failed", {
148
+ sessionId,
149
+ stage: "seat_threw",
150
+ error: redactIncarnations(String(err)),
151
+ effect: "the ended space's cache volume and snapshot objects may stay (the reclaim seat threw, which its contract forbids; the session delete went ahead) — the bucket's lifecycle rule is the fallback for objects, the volume is deleted by label sema.space",
152
+ });
153
+ });
154
+ }
119
155
  return { deleted: historyDeleted || runs.removed > 0 };
120
156
  }
121
157
  : undefined;
@@ -3,6 +3,7 @@ export declare function runStage03(ctx: Awaited<ReturnType<typeof runStage02>>):
3
3
  backend: import("../index.js").StoreBackend | undefined;
4
4
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
5
5
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
6
+ engineDataRoot: string;
6
7
  instanceId: string;
7
8
  mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
8
9
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
@@ -2,10 +2,10 @@ 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, memorySyncCursors, rosterStore, backgroundAgentStore, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportBackend, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngineFacts, } = await openStores({ config, logger, metrics, localRoot });
5
+ const { backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportBackend, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngineFacts, } = await openStores({ config, logger, metrics, localRoot });
6
6
  const instanceId = uuidv7();
7
7
  const sessionCaptureRecords = backend?.sessionCaptureRecords();
8
8
  const sessionCaptureRecordStore = sessionCaptureRecords?.();
9
- return { ...ctx, backend, backgroundAgentStore, breakerState, instanceId, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memoryExportBackend, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecordStore, sessionCaptureRecords, sessionStore, sqlEngineFacts, storePosture, taskAttachmentStore, taskListLane, usageWindowStore };
9
+ return { ...ctx, backend, backgroundAgentStore, breakerState, engineDataRoot, instanceId, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memoryExportBackend, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecordStore, sessionCaptureRecords, sessionStore, sqlEngineFacts, storePosture, taskAttachmentStore, taskListLane, usageWindowStore };
10
10
  }
11
11
  //# sourceMappingURL=stage-03-store-backend.js.map
@@ -44,6 +44,7 @@ export declare function runStage04(ctx: Awaited<ReturnType<typeof runStage03>>):
44
44
  backend: import("../index.js").StoreBackend | undefined;
45
45
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
46
46
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
47
+ engineDataRoot: string;
47
48
  instanceId: string;
48
49
  mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
49
50
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
@@ -6,12 +6,11 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
6
6
  executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
7
7
  fenceSessionOwner: (sid: string, owner: string | null) => void;
8
8
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
9
- noteSessionIncarnation: (sid: string, incarnation: string | undefined) => void;
9
+ spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
10
10
  perSessionCwd: Map<string, string>;
11
11
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
12
12
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
13
13
  sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
14
- sessionIncarnationOf: (sid: string) => string | undefined;
15
14
  setSessionCwd: (sid: string, cwd: string) => void;
16
15
  setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
17
16
  setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
@@ -60,6 +59,7 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
60
59
  backend: import("../index.js").StoreBackend | undefined;
61
60
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
62
61
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
62
+ engineDataRoot: string;
63
63
  instanceId: string;
64
64
  mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
65
65
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
@@ -2,15 +2,18 @@ import { createToolTracer, createPermissionDeniedMeter } from "../observability/
2
2
  import { composeHooks } from "../hooks/hook-runner.js";
3
3
  import { assertDeviceLaneWired, createDeviceLane } from "./device-lane.js";
4
4
  import { assertWorkspaceSpaceReadable, createExecutionEnv } from "./execution-env.js";
5
- import { sessionFaceReaderOf } from "./session-incarnation-seat.js";
5
+ import { incarnationReadOf } from "../session-incarnation.js";
6
6
  import * as facts from "../capability-facts.js";
7
7
  import { sessionStoreLabelOf } from "../store-posture.js";
8
+ import { runStore } from "./late-binds.js";
8
9
  export function runStage05(ctx) {
9
10
  const { backend, config, instanceId, logger, metrics, sessionStore, taskAttachmentStore } = ctx;
10
11
  const deviceLane = config.remoteExec?.provider === "device" ? createDeviceLane({ config, logger, metrics, backend, replicaId: instanceId }) : undefined;
11
- const { perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, setSessionInheritEnv, fenceSessionOwner, dropSessionScoped, noteSessionIncarnation, sessionIncarnationOf, executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, } = createExecutionEnv({ config, logger, metrics, taskAttachmentStore, ...(deviceLane ? { deviceLane } : {}) });
12
+ const incarnationOf = incarnationReadOf(sessionStore);
13
+ const spaceCommits = backend !== undefined ? () => runStore : undefined;
14
+ const { perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, setSessionInheritEnv, fenceSessionOwner, dropSessionScoped, executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, spaceReclaimer, } = createExecutionEnv({ config, logger, metrics, taskAttachmentStore, ...(deviceLane ? { deviceLane } : {}), ...(spaceCommits !== undefined ? { spaceCommits } : {}), ...(incarnationOf !== undefined ? { incarnationOf } : {}) });
12
15
  assertDeviceLaneWired(config.remoteExec?.provider === "device", deviceLane, executionEnvFactory !== undefined);
13
- assertWorkspaceSpaceReadable(facts.workspaceSpace(config), sessionFaceReaderOf(sessionStore), sessionStoreLabelOf(config.sessionBackend, backend?.kind));
16
+ assertWorkspaceSpaceReadable(facts.workspaceSpace(config), { incarnationOf, spaceCommits }, facts.workspaceCache(config), sessionStoreLabelOf(config.sessionBackend, backend?.kind));
14
17
  const toolTracer = config.toolTrace ? createToolTracer(logger) : undefined;
15
18
  if (toolTracer)
16
19
  logger.info("tool_trace_enabled", {});
@@ -18,6 +21,6 @@ export function runStage05(ctx) {
18
21
  ...(toolTracer ? composeHooks(createPermissionDeniedMeter(metrics), toolTracer) : createPermissionDeniedMeter(metrics)),
19
22
  ...(config.hooksTimeoutMs !== undefined ? { timeoutMs: config.hooksTimeoutMs } : {}),
20
23
  };
21
- return { ...ctx, deploymentHooks, deviceLane, dropSessionScoped, executionEnvFactory, fenceSessionOwner, lspManager, noteSessionIncarnation, perSessionCwd, perTaskImage, sendUserFileTaskEnvs, sessionEnvSelection, sessionIncarnationOf, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, worktreeReap };
24
+ return { ...ctx, deploymentHooks, deviceLane, dropSessionScoped, executionEnvFactory, fenceSessionOwner, lspManager, spaceReclaimer, perSessionCwd, perTaskImage, sendUserFileTaskEnvs, sessionEnvSelection, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, worktreeReap };
22
25
  }
23
26
  //# sourceMappingURL=stage-05-execution-env.js.map
@@ -20,7 +20,6 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
20
20
  fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
21
21
  governanceSeams: import("./governance-seams.js").GovernanceSeams;
22
22
  handslessRunner: Runner;
23
- handslessSubRunner: Runner;
24
23
  hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
25
24
  hookAgentRunner: Runner;
26
25
  hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
@@ -67,12 +66,11 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
67
66
  executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
68
67
  fenceSessionOwner: (sid: string, owner: string | null) => void;
69
68
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
70
- noteSessionIncarnation: (sid: string, incarnation: string | undefined) => void;
69
+ spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
71
70
  perSessionCwd: Map<string, string>;
72
71
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
73
72
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
74
73
  sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
75
- sessionIncarnationOf: (sid: string) => string | undefined;
76
74
  setSessionCwd: (sid: string, cwd: string) => void;
77
75
  setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
78
76
  setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
@@ -121,6 +119,7 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
121
119
  backend: import("../index.js").StoreBackend | undefined;
122
120
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
123
121
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
122
+ engineDataRoot: string;
124
123
  instanceId: string;
125
124
  mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
126
125
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
@@ -3,25 +3,27 @@ import { outwardPlane } from "../terminal.js";
3
3
  import { createSessionTitler } from "../session-titler.js";
4
4
  import { cardRuleScopeRoot } from "../task-cwd.js";
5
5
  import { ForkRoutingSessionStore } from "../plugins/fork-routing-session-store.js";
6
- import { withoutExecutionEnv } from "../capabilities/hands-lane.js";
6
+ import { withoutHands } from "../capabilities/hands-lane.js";
7
7
  import { redactSecrets } from "../trace/redact.js";
8
8
  import { hasServiceAuth } from "../http/server.js";
9
9
  import { workflowModelAllowlistFor } from "../task-workflow.js";
10
10
  import { createHookLlm, buildHookFailureText } from "../hooks/hook-llm.js";
11
11
  import { assertRetentionLaneWirable } from "./retention-lane.js";
12
- import { buildConsolidationValveAudit, createMemoryConsolidationFaces, resolveConsolidationDriverSeat } from "./memory-consolidation.js";
12
+ import { buildConsolidationValveAudit, createMemoryConsolidationFaces, createOperatorValveWriteJudge, resolveConsolidationDriverSeat } from "./memory-consolidation.js";
13
13
  import { createPerModelAuthSeat } from "./side-query-lane.js";
14
14
  import { createWorkflowOrchestration } from "./workflow-orchestration.js";
15
15
  import { createLiveCoordinators } from "./coordinators.js";
16
16
  import { createParkCommitWatch } from "../plugins/park-commit-watch.js";
17
17
  import { createRuntimeCaps } from "./runtime-caps.js";
18
- import { createRunnerDeps, createSharedRunnerDeps } from "./runner-deps.js";
18
+ import { createEngineNoticeForwarder, createRunnerDeps, createSharedRunnerDeps } from "./runner-deps.js";
19
+ import { defaultEngineNoticeRouter } from "../trace/engine-notice-wire.js";
19
20
  import { createOrgMemoryAdmissionWiring } from "./org-memory.js";
20
21
  import { createGovernanceSeams } from "./governance-seams.js";
21
22
  import { createSharedMemoryScopeAuthorizer } from "../shared-memory-scope-authorizer.js";
22
23
  import { parkedAskRedeem, runStore } from "./late-binds.js";
24
+ import { withInternalRunEnvs } from "../internal-run-env.js";
23
25
  export function runStage06(ctx) {
24
- const { backend, backgroundAgentStore, brain, sessionIncarnationOf, config, webAdmin, consolidationValve, deploymentHooks, executionEnvFactory, fileHistoryStore, localRoot, logger, lspManager, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memorySyncRunner, metrics, perSessionCwd, permissionRuleProvider, pricing, rosterStore, ruleConsent, sendUserFileTaskEnvs, sessionCaptureRecordStore, sessionCaptureRecords, sessionPolicyStore, sessionStore, taskAttachmentStore, taskListLane, toolResultStore, tracer, usageWindowStore } = ctx;
26
+ const { backend, backgroundAgentStore, brain, engineDataRoot, config, webAdmin, consolidationValve, deploymentHooks, executionEnvFactory, fileHistoryStore, localRoot, logger, lspManager, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memorySyncRunner, metrics, perSessionCwd, permissionRuleProvider, pricing, rosterStore, ruleConsent, sendUserFileTaskEnvs, sessionCaptureRecordStore, sessionCaptureRecords, sessionPolicyStore, sessionStore, taskAttachmentStore, taskListLane, toolResultStore, tracer, usageWindowStore } = ctx;
25
27
  const { sqlWorkflowRunStore, workflowNotifyJournal, workflowCompletionInbox, deliverWorkflowCompletion, workflowNotifyGate, fleetBus, workflowRunStore, workflowJournalStore, outcomeSink, workflowRecoverOpts, workflowAgentRegistry, subagentSteerRegistry, workflowAgentSessionIndex, } = createWorkflowOrchestration({ config, logger, metrics, localRoot, backend, getRunStore: () => runStore });
26
28
  const parkCommitted = backend?.checkpoint && config.durableApproval ? createParkCommitWatch(backend.checkpoint(logger)) : undefined;
27
29
  const checkpointStore = parkCommitted?.store;
@@ -74,6 +76,8 @@ export function runStage06(ctx) {
74
76
  onIncident: (err) => logger.warn("memory_consolidation_incident", { code: err.code ?? null, detail: err.message }),
75
77
  onStopDetail: (audit) => logger.warn("memory_consolidation_stop_detail", audit),
76
78
  ...(sessionCaptureRecordStore !== undefined ? { captureRecordStore: sessionCaptureRecordStore } : {}),
79
+ writeJudge: createOperatorValveWriteJudge(),
80
+ onNotice: createEngineNoticeForwarder(logger, defaultEngineNoticeRouter, metrics),
77
81
  })
78
82
  : undefined;
79
83
  for (const w of buildConsolidationValveAudit({
@@ -110,9 +114,9 @@ export function runStage06(ctx) {
110
114
  consolidationSeat,
111
115
  hands: commitHands,
112
116
  mcpRevocations,
113
- sessionIncarnationOf,
114
117
  config, logger, metrics, localRoot, promptSource: webAdmin.promptSource, rosterStore, backgroundAgentStore, mailboxStore, mailboxRecipientLifecycle, usageWindowStore, brain,
115
118
  pricing, tracer, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine,
119
+ engineDataRoot,
116
120
  sessionCaptureRecords,
117
121
  memorySyncRunner, toolResultStore: runnerOffloadStore, checkpointStore, sessionPolicyStore, runtimeCapsResolver, fileHistoryStore,
118
122
  permissionRuleStore: permissionRuleProvider,
@@ -123,9 +127,9 @@ export function runStage06(ctx) {
123
127
  getRunStore: () => runStore,
124
128
  });
125
129
  const runner = new Runner(runnerDeps);
126
- const handslessRunner = new Runner(withoutExecutionEnv(runnerDeps));
130
+ const handslessRunner = new Runner(withoutHands(runnerDeps));
127
131
  const { hookModelFor, hookLlm } = createHookLlm({ config, getKeyResolver: () => webAdmin.getKeyResolver(), metrics });
128
- const hookAgentRunner = new Runner({ ...runnerDeps, sessionStore: new TtlSessionStore({ defaultTtlDays: 1 / 24 }) });
132
+ const hookAgentRunner = new Runner(withInternalRunEnvs({ ...runnerDeps, sessionStore: new TtlSessionStore({ defaultTtlDays: 1 / 24 }) }));
129
133
  const agentHookCall = async ({ prompt, model, timeoutMs, system }) => {
130
134
  const pick = hookModelFor(model);
131
135
  if (!pick.ok)
@@ -196,6 +200,7 @@ export function runStage06(ctx) {
196
200
  orgMemoryAdmission,
197
201
  governanceSeams,
198
202
  sharedMemoryStores: sharedMemoryStore ? sharedMemoryStore : undefined,
203
+ engineDataRoot,
199
204
  }),
200
205
  sessionStore: subRunnerSessions,
201
206
  onBackgroundChildEvent: runnerDeps.onBackgroundChildEvent ? runnerDeps.onBackgroundChildEvent : undefined,
@@ -204,7 +209,6 @@ export function runStage06(ctx) {
204
209
  onError: runnerDeps.onError ? runnerDeps.onError : undefined,
205
210
  };
206
211
  const subRunner = new Runner(subRunnerDeps);
207
- const handslessSubRunner = new Runner(withoutExecutionEnv(subRunnerDeps));
208
- return { ...ctx, approvalAskAudit, approvalExemptionStore, centerRuntimeCapsResolver, checkpointStore, parkCommits, durableEnabled, elicitation, fleetBus, governanceSeams, handslessRunner, handslessSubRunner, hookAgent, hookAgentRunner, hookLlm, mcpRevocations, memoryConsolidationFaces, memoryOptOutGrantStore, orgMemoryAdmission, outcomeSink, principalCaps, question, retentionExecutor, retentionLaneStore, runner, runnerDeps, runtimeCapsPeekResolver, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionTitler, sharedMemoryStore, sqlWorkflowRunStore, streamApprovalGate, subRunner, subRunnerSessions, subagentSteerRegistry, toolApproval, workflowAgentRegistry, workflowAgentSessionIndex, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable };
212
+ return { ...ctx, approvalAskAudit, approvalExemptionStore, centerRuntimeCapsResolver, checkpointStore, parkCommits, durableEnabled, elicitation, fleetBus, governanceSeams, handslessRunner, hookAgent, hookAgentRunner, hookLlm, mcpRevocations, memoryConsolidationFaces, memoryOptOutGrantStore, orgMemoryAdmission, outcomeSink, principalCaps, question, retentionExecutor, retentionLaneStore, runner, runnerDeps, runtimeCapsPeekResolver, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionTitler, sharedMemoryStore, sqlWorkflowRunStore, streamApprovalGate, subRunner, subRunnerSessions, subagentSteerRegistry, toolApproval, workflowAgentRegistry, workflowAgentSessionIndex, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable };
209
213
  }
210
214
  //# sourceMappingURL=stage-06-runners.js.map
@@ -35,7 +35,6 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
35
35
  fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
36
36
  governanceSeams: import("./governance-seams.js").GovernanceSeams;
37
37
  handslessRunner: import("@sema-agent/core").Runner;
38
- handslessSubRunner: import("@sema-agent/core").Runner;
39
38
  hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
40
39
  hookAgentRunner: import("@sema-agent/core").Runner;
41
40
  hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
@@ -82,12 +81,11 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
82
81
  executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
83
82
  fenceSessionOwner: (sid: string, owner: string | null) => void;
84
83
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
85
- noteSessionIncarnation: (sid: string, incarnation: string | undefined) => void;
84
+ spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
86
85
  perSessionCwd: Map<string, string>;
87
86
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
88
87
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
89
88
  sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
90
- sessionIncarnationOf: (sid: string) => string | undefined;
91
89
  setSessionCwd: (sid: string, cwd: string) => void;
92
90
  setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
93
91
  setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
@@ -136,6 +134,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
136
134
  backend: import("../index.js").StoreBackend | undefined;
137
135
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
138
136
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
137
+ engineDataRoot: string;
139
138
  instanceId: string;
140
139
  mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
141
140
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
@@ -27,7 +27,7 @@ import { buildDisplaySafeUrl } from "../trace/redact.js";
27
27
  import * as facts from "../capability-facts.js";
28
28
  import { WEB_ADMIN_ENV } from "@sema-agent/settings-schema";
29
29
  export async function runStage07(ctx) {
30
- const { approvalAskAudit, approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, webAdmin, counterDegradeHook, durableEnabled, handslessSubRunner, instanceId, localRoot, logger, memoryEngine, metrics, question, runner, runnerDeps, sendUserFileToolSpec, sessionEnvSelection, sessionStore, subRunner, subRunnerSessions, taskListLane, toolApproval } = ctx;
30
+ 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;
31
31
  const authorize = createAuthorizer(config, sessionStore);
32
32
  const runStore = backend ? backend.run() : undefined;
33
33
  bindRunStore(runStore);
@@ -153,8 +153,8 @@ export async function runStage07(ctx) {
153
153
  const ensureChildSessionDurable = checkpointStore && config.sessionBackend === "tidb" ? (sessionId) => ensureChildSessionDurableWithPromotion(sessionStore, subRunnerSessions, sessionId) : undefined;
154
154
  const webFetchSummarize = createWebFetchSummarizeLane({ brain, config, getKeyResolver: () => webAdmin.getKeyResolver(), logger });
155
155
  const scenarioDeps = {
156
- runner, subRunner, handslessSubRunner, model: DEFAULT_MODEL_REF, skills, repoClient, requirePrincipal: config.requirePrincipal,
157
- webSearch: webSearch ? webSearch : undefined, metrics, logger, webFetchSummarize,
156
+ runner, subRunner, model: DEFAULT_MODEL_REF, skills, repoClient, requirePrincipal: config.requirePrincipal,
157
+ webSearch: webSearch ? webSearch : undefined, logger, webFetchSummarize,
158
158
  backgroundAgentStore: backgroundAgentStore ? backgroundAgentStore : undefined,
159
159
  checkpointStore: checkpointStore ? checkpointStore : undefined,
160
160
  ensureChildSessionDurable: ensureChildSessionDurable ? ensureChildSessionDurable : undefined,
@@ -168,7 +168,6 @@ export async function runStage07(ctx) {
168
168
  const parkedReviveInheritedGate = parkedReviveSurface && config.durableApproval
169
169
  ? createParkedReviveInheritedGate({
170
170
  config, question, logger, localRoot,
171
- memoryEngineRoot: memoryEngine?.root,
172
171
  approverSeat: createRunnerDepsOnAsk(toolApproval),
173
172
  approvalExemptionStore,
174
173
  ...(runnerDeps.runtimeCapsResolver ? { resolveRuntimeCaps: runnerDeps.runtimeCapsResolver } : {}),
@@ -48,7 +48,6 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
48
48
  fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
49
49
  governanceSeams: import("./governance-seams.js").GovernanceSeams;
50
50
  handslessRunner: Runner;
51
- handslessSubRunner: Runner;
52
51
  hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
53
52
  hookAgentRunner: Runner;
54
53
  hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
@@ -95,12 +94,11 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
95
94
  executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
96
95
  fenceSessionOwner: (sid: string, owner: string | null) => void;
97
96
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
98
- noteSessionIncarnation: (sid: string, incarnation: string | undefined) => void;
97
+ spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
99
98
  perSessionCwd: Map<string, string>;
100
99
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
101
100
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
102
101
  sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
103
- sessionIncarnationOf: (sid: string) => string | undefined;
104
102
  setSessionCwd: (sid: string, cwd: string) => void;
105
103
  setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
106
104
  setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
@@ -149,6 +147,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
149
147
  backend: import("../index.js").StoreBackend | undefined;
150
148
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
151
149
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
150
+ engineDataRoot: string;
152
151
  instanceId: string;
153
152
  mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
154
153
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
@@ -5,7 +5,7 @@ import { startRetentionLane, RETENTION_LEASE_TTL_FACTOR } from "./retention-lane
5
5
  import { createLimitSync } from "./limit-sync.js";
6
6
  import { runDenySweep } from "./late-binds.js";
7
7
  export function runStage08(ctx) {
8
- const { approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, handslessRunner, handslessSubRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, rosterStore, runStore, runner, sqlWorkflowRunStore, subRunner, taskAttachmentStore, toolApproval, toolResultStore, userInputLedger, workflowJournalStore, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
8
+ const { 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;
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,
@@ -30,6 +30,7 @@ export function runStage08(ctx) {
30
30
  },
31
31
  audit: { append: (row) => retentionLaneStore.appendAudit(row, Date.now()) },
32
32
  holdInForce: (domain) => retentionLaneStore.holdInForce(domain),
33
+ ...(spaceReclaimer !== undefined ? { spaceReclaimer } : {}),
33
34
  logger,
34
35
  metrics,
35
36
  now: () => Date.now(),
@@ -56,7 +57,6 @@ export function runStage08(ctx) {
56
57
  ["handsless", handslessRunner],
57
58
  ["hookAgent", hookAgentRunner],
58
59
  ["sub", subRunner],
59
- ["handslessSub", handslessSubRunner],
60
60
  ];
61
61
  const swapRunnerDeps = (next) => {
62
62
  for (let i = 0; i < bootRunners.length; i++) {
@@ -77,7 +77,6 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
77
77
  fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
78
78
  governanceSeams: import("./governance-seams.js").GovernanceSeams;
79
79
  handslessRunner: import("@sema-agent/core").Runner;
80
- handslessSubRunner: import("@sema-agent/core").Runner;
81
80
  hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
82
81
  hookAgentRunner: import("@sema-agent/core").Runner;
83
82
  hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
@@ -124,12 +123,11 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
124
123
  executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
125
124
  fenceSessionOwner: (sid: string, owner: string | null) => void;
126
125
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
127
- noteSessionIncarnation: (sid: string, incarnation: string | undefined) => void;
126
+ spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
128
127
  perSessionCwd: Map<string, string>;
129
128
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
130
129
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
131
130
  sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
132
- sessionIncarnationOf: (sid: string) => string | undefined;
133
131
  setSessionCwd: (sid: string, cwd: string) => void;
134
132
  setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
135
133
  setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
@@ -178,6 +176,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
178
176
  backend: import("../index.js").StoreBackend | undefined;
179
177
  backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
180
178
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
179
+ engineDataRoot: string;
181
180
  instanceId: string;
182
181
  mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
183
182
  mailboxStore: import("@sema-agent/core").MailboxStore | 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, config, webAdmin, deviceLane, dropSessionScoped, durableEnabled, executionEnvFactory, fileHistoryErasure, governanceSeams, localRoot, logger, mailboxRecipientLifecycle, mailboxStore, metrics, pricing, resumeAnchorStore, runStore, runnerDeps, sessionPolicyStore, sessionStore, streamApprovalGate, taskAttachmentStore, taskListLane, toolResultStore, tracer, usageWindowStore, userInputLedgerStore, workflowCompletionInbox } = ctx;
9
+ const { approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, 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;
10
10
  const { ownerAware, sessionAudit, sessionWatchRegistry, purgeSession, instrumentDegenerate, planCacheProbe } = createSessionFaces({
11
11
  deviceStore: deviceLane?.store,
12
12
  dropSessionScoped,
@@ -15,6 +15,7 @@ export function runStage09(ctx) {
15
15
  workflowCompletionInbox, taskListLane, mailboxStore, mailboxRecipientLifecycle,
16
16
  backgroundAgentStore,
17
17
  userInputLedgerStore,
18
+ ...(spaceReclaimer !== undefined ? { spaceReclaimer } : {}),
18
19
  });
19
20
  const leaderEndpoint = createLeaderFace({ config, logger, brain, pricing, executionEnvFactory, toolResultStore, sessionStore, checkpointStore, governanceSeams, backend, tracer, usageWindowStore, promptSource: webAdmin.promptSource, onError: runnerDeps.onError });
20
21
  const drainState = { draining: false };