@sema-agent/server 7.140.0 → 7.142.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 (296) hide show
  1. package/MIGRATION.md +505 -0
  2. package/README.md +1 -1
  3. package/README.zh-CN.md +1 -1
  4. package/USAGE.md +142 -25
  5. package/dist/approval-ask-audit-store.d.ts +54 -38
  6. package/dist/approval-ask-audit-store.js +58 -39
  7. package/dist/approval-batch-census.d.ts +27 -0
  8. package/dist/approval-batch-census.js +27 -0
  9. package/dist/approval-card.d.ts +39 -24
  10. package/dist/approval-card.js +6 -3
  11. package/dist/approval-crash-convergence.d.ts +17 -7
  12. package/dist/approval-crash-convergence.js +94 -22
  13. package/dist/approval-deny-reasons.d.ts +34 -30
  14. package/dist/approval-deny-reasons.js +21 -6
  15. package/dist/approval-policy-settlement.d.ts +1 -1
  16. package/dist/approval-reconciler.d.ts +33 -1
  17. package/dist/approval-reconciler.js +43 -40
  18. package/dist/approval.d.ts +15 -0
  19. package/dist/approval.js +10 -0
  20. package/dist/audit.d.ts +4 -2
  21. package/dist/audit.js +2 -2
  22. package/dist/auth-bridge.d.ts +9 -6
  23. package/dist/auth-bridge.js +9 -3
  24. package/dist/boot/adoption.js +2 -1
  25. package/dist/boot/budget-tracing.d.ts +16 -0
  26. package/dist/boot/budget-tracing.js +10 -6
  27. package/dist/boot/device-lane.d.ts +11 -0
  28. package/dist/boot/device-lane.js +16 -0
  29. package/dist/boot/engine-lease.d.ts +24 -3
  30. package/dist/boot/engine-lease.js +9 -2
  31. package/dist/boot/execution-env.d.ts +24 -4
  32. package/dist/boot/execution-env.js +34 -27
  33. package/dist/boot/execution-lane.js +2 -1
  34. package/dist/boot/exit-boundary.js +5 -4
  35. package/dist/boot/memory-boundary.d.ts +2 -2
  36. package/dist/boot/memory-consolidation.d.ts +1 -1
  37. package/dist/boot/memory-consolidation.js +3 -2
  38. package/dist/boot/parked-revive-gate.js +2 -1
  39. package/dist/boot/permission-rules-audit.d.ts +0 -28
  40. package/dist/boot/permission-rules-audit.js +2 -1
  41. package/dist/boot/read-deny-anchor-audit.js +2 -1
  42. package/dist/boot/reapers.d.ts +2 -2
  43. package/dist/boot/reapers.js +4 -3
  44. package/dist/boot/resolve-spec.js +18 -6
  45. package/dist/boot/retention-lane.js +5 -3
  46. package/dist/boot/runner-deps.js +16 -13
  47. package/dist/boot/runtime-caps.js +3 -2
  48. package/dist/boot/session-faces.d.ts +1 -1
  49. package/dist/boot/session-faces.js +8 -6
  50. package/dist/boot/shutdown.js +8 -2
  51. package/dist/boot/stage-04-stores.js +3 -2
  52. package/dist/boot/stage-05-execution-env.d.ts +1 -1
  53. package/dist/boot/stage-05-execution-env.js +11 -7
  54. package/dist/boot/stage-06-runners.d.ts +1 -3
  55. package/dist/boot/stage-06-runners.js +3 -2
  56. package/dist/boot/stage-07-capability-layer.d.ts +1 -2
  57. package/dist/boot/stage-07-capability-layer.js +10 -11
  58. package/dist/boot/stage-08-reapers.d.ts +1 -2
  59. package/dist/boot/stage-08-reapers.js +3 -2
  60. package/dist/boot/stage-09-leader.d.ts +1 -2
  61. package/dist/boot/stage-10-http-server.d.ts +1 -2
  62. package/dist/boot/stage-10-http-server.js +6 -4
  63. package/dist/boot/stores.js +13 -6
  64. package/dist/boot/web-admin.js +18 -17
  65. package/dist/boot/webfetch-summarize-lane.js +2 -1
  66. package/dist/boot/workflow-orchestration.js +3 -2
  67. package/dist/capabilities/builtin-tools.d.ts +2 -1
  68. package/dist/capabilities/builtin-tools.js +2 -4
  69. package/dist/capabilities/composite-members.d.ts +2 -1
  70. package/dist/capabilities/composite-members.js +2 -1
  71. package/dist/capabilities/scenarios.d.ts +1 -1
  72. package/dist/capability-facts.d.ts +33 -0
  73. package/dist/capability-facts.js +32 -0
  74. package/dist/card-void.d.ts +38 -0
  75. package/dist/card-void.js +23 -0
  76. package/dist/config-catalog.js +12 -8
  77. package/dist/config-provider.d.ts +13 -13
  78. package/dist/config-provider.js +19 -33
  79. package/dist/config-types.d.ts +39 -10
  80. package/dist/config.d.ts +6 -0
  81. package/dist/config.js +72 -49
  82. package/dist/delegated-session-owner.d.ts +21 -19
  83. package/dist/delegated-session-owner.js +1 -1
  84. package/dist/device-store.d.ts +7 -0
  85. package/dist/device-store.js +3 -0
  86. package/dist/execution-config-root.d.ts +22 -0
  87. package/dist/execution-config-root.js +35 -0
  88. package/dist/execution-lane-caps.d.ts +50 -2
  89. package/dist/execution-lane-caps.js +90 -13
  90. package/dist/execution-placement.d.ts +3 -0
  91. package/dist/execution-placement.js +7 -0
  92. package/dist/fleet/drain-entry.d.ts +3 -0
  93. package/dist/fleet/fleet-bus.d.ts +6 -3
  94. package/dist/hooks/hook-runner.d.ts +6 -0
  95. package/dist/hooks/hook-runner.js +30 -1
  96. package/dist/hosted-posture.d.ts +8 -0
  97. package/dist/hosted-posture.js +4 -0
  98. package/dist/http/admission.js +3 -3
  99. package/dist/http/caller-trust.d.ts +3 -2
  100. package/dist/http/caller-trust.js +2 -1
  101. package/dist/http/dispatch.js +8 -2
  102. package/dist/http/execution-context.d.ts +2 -2
  103. package/dist/http/idempotency.d.ts +1 -1
  104. package/dist/http/live-frame.d.ts +24 -0
  105. package/dist/http/live-frame.js +16 -0
  106. package/dist/http/principal-gate.d.ts +3 -1
  107. package/dist/http/principal-gate.js +17 -8
  108. package/dist/http/resume-legs.js +42 -29
  109. package/dist/http/route-table.js +4 -0
  110. package/dist/http/routes/approvals-assistant.js +1 -0
  111. package/dist/http/routes/attachments.js +18 -0
  112. package/dist/http/routes/capabilities.js +10 -6
  113. package/dist/http/routes/diagnostics.d.ts +0 -19
  114. package/dist/http/routes/diagnostics.js +16 -2
  115. package/dist/http/routes/memory-bundle.d.ts +2 -2
  116. package/dist/http/routes/memory-bundle.js +1 -1
  117. package/dist/http/routes/memory-compliance.js +1 -1
  118. package/dist/http/routes/memory-policy.js +27 -7
  119. package/dist/http/routes/run-permission-mode.d.ts +75 -0
  120. package/dist/http/routes/run-permission-mode.js +170 -0
  121. package/dist/http/routes/runs.js +3 -3
  122. package/dist/http/routes/session-memory-sync.d.ts +63 -0
  123. package/dist/http/routes/session-memory-sync.js +157 -0
  124. package/dist/http/routes/session-sync.d.ts +3 -6
  125. package/dist/http/routes/session-sync.js +7 -2
  126. package/dist/http/routes/sessions-list.d.ts +2 -1
  127. package/dist/http/routes/sessions.js +5 -4
  128. package/dist/http/routes/tasks.js +70 -71
  129. package/dist/http/run-read-face.d.ts +7 -0
  130. package/dist/http/run-read-face.js +10 -4
  131. package/dist/http/send.d.ts +6 -1
  132. package/dist/http/send.js +10 -3
  133. package/dist/http/server.d.ts +20 -7
  134. package/dist/http/server.js +2 -4
  135. package/dist/http/sse-log.d.ts +3 -8
  136. package/dist/http/stored-body-replay.d.ts +3 -3
  137. package/dist/http/stored-body-replay.js +3 -1
  138. package/dist/http/submit-replay.d.ts +4 -3
  139. package/dist/http/submit-replay.js +2 -2
  140. package/dist/http/sync-submit-body.d.ts +21 -4
  141. package/dist/http/sync-submit-body.js +13 -0
  142. package/dist/identity-source.d.ts +21 -2
  143. package/dist/identity-source.js +6 -0
  144. package/dist/instruction-source-notice.d.ts +7 -0
  145. package/dist/instruction-source-notice.js +6 -6
  146. package/dist/mcp-assertion-header.d.ts +4 -0
  147. package/dist/mcp-assertion-header.js +5 -0
  148. package/dist/memory-incident-sink.d.ts +19 -6
  149. package/dist/memory-incident-sink.js +8 -4
  150. package/dist/memory-posture.d.ts +1 -1
  151. package/dist/memory-scope.d.ts +4 -4
  152. package/dist/memory-scope.js +1 -1
  153. package/dist/memory-sync-client.d.ts +35 -23
  154. package/dist/memory-sync-client.js +122 -52
  155. package/dist/memory-sync-identity.d.ts +24 -0
  156. package/dist/memory-sync-identity.js +57 -0
  157. package/dist/memory-sync.d.ts +7 -1
  158. package/dist/memory-sync.js +6 -3
  159. package/dist/observability/fail-open.d.ts +57 -12
  160. package/dist/observability/fail-open.js +50 -9
  161. package/dist/observability/metrics.js +0 -1
  162. package/dist/observability/run-terminal.d.ts +93 -31
  163. package/dist/observability/run-terminal.js +175 -171
  164. package/dist/observability/secret-env-scrub.d.ts +20 -1
  165. package/dist/observability/secret-env-scrub.js +14 -0
  166. package/dist/orchestration/workflow-completion-inbox.d.ts +5 -2
  167. package/dist/orchestration/workflow-completion-inbox.js +13 -5
  168. package/dist/orchestration/workflow-notify-journal.d.ts +5 -3
  169. package/dist/orchestration/workflow-notify-journal.js +2 -1
  170. package/dist/permission-mode-admission.d.ts +68 -0
  171. package/dist/permission-mode-admission.js +23 -0
  172. package/dist/permission-rule-list.d.ts +55 -6
  173. package/dist/permission-rule-list.js +52 -5
  174. package/dist/plugins/approval-ask-store-file.d.ts +14 -4
  175. package/dist/plugins/approval-ask-store-file.js +48 -7
  176. package/dist/plugins/approval-ask-store-memory.d.ts +2 -1
  177. package/dist/plugins/approval-ask-store-memory.js +9 -8
  178. package/dist/plugins/approval-ask-store-sql.d.ts +42 -10
  179. package/dist/plugins/approval-ask-store-sql.js +49 -19
  180. package/dist/plugins/caching-session-store.d.ts +6 -0
  181. package/dist/plugins/caching-session-store.js +3 -0
  182. package/dist/plugins/checkpoint-store-sql.d.ts +65 -17
  183. package/dist/plugins/checkpoint-store-sql.js +74 -3
  184. package/dist/plugins/device-store-sql.d.ts +5 -2
  185. package/dist/plugins/device-store-sql.js +4 -1
  186. package/dist/plugins/execution-placement-sql.d.ts +11 -1
  187. package/dist/plugins/execution-placement-sql.js +12 -1
  188. package/dist/plugins/file-run-store.d.ts +7 -2
  189. package/dist/plugins/file-run-store.js +12 -2
  190. package/dist/plugins/fork-routing-session-store.d.ts +10 -32
  191. package/dist/plugins/fork-routing-session-store.js +2 -61
  192. package/dist/plugins/k8s-exec-protocol.d.ts +4 -1
  193. package/dist/plugins/k8s-exec-protocol.js +6 -1
  194. package/dist/plugins/local-checkpoint-store.d.ts +10 -1
  195. package/dist/plugins/local-checkpoint-store.js +22 -0
  196. package/dist/plugins/local-session-store.d.ts +260 -39
  197. package/dist/plugins/local-session-store.js +582 -57
  198. package/dist/plugins/local-session-window.d.ts +17 -3
  199. package/dist/plugins/local-session-window.js +7 -13
  200. package/dist/plugins/local-task-attachment-store.d.ts +12 -2
  201. package/dist/plugins/local-task-attachment-store.js +67 -43
  202. package/dist/plugins/memory-key-guards.d.ts +3 -3
  203. package/dist/plugins/memory-run-store.d.ts +7 -2
  204. package/dist/plugins/memory-run-store.js +12 -2
  205. package/dist/plugins/one-time-migrations.d.ts +68 -2
  206. package/dist/plugins/one-time-migrations.js +120 -4
  207. package/dist/plugins/pg-pool.js +3 -2
  208. package/dist/plugins/pg-session-storage.d.ts +2 -0
  209. package/dist/plugins/pg-session-storage.js +3 -2
  210. package/dist/plugins/remote-env-e2b.d.ts +47 -7
  211. package/dist/plugins/remote-env-e2b.js +242 -46
  212. package/dist/plugins/remote-env-k8s.d.ts +51 -6
  213. package/dist/plugins/remote-env-k8s.js +234 -44
  214. package/dist/plugins/remote-env-local-docker.d.ts +40 -14
  215. package/dist/plugins/remote-env-local-docker.js +127 -33
  216. package/dist/plugins/run-store-sql.d.ts +11 -3
  217. package/dist/plugins/run-store-sql.js +13 -4
  218. package/dist/plugins/sandbox-read-floor.d.ts +273 -0
  219. package/dist/plugins/sandbox-read-floor.js +608 -0
  220. package/dist/plugins/session-ownership.d.ts +2 -1
  221. package/dist/plugins/session-placement.d.ts +17 -4
  222. package/dist/plugins/session-placement.js +2 -1
  223. package/dist/plugins/session-store.d.ts +18 -20
  224. package/dist/plugins/session-store.js +4 -12
  225. package/dist/plugins/store-backend.d.ts +41 -7
  226. package/dist/plugins/store-backend.js +22 -4
  227. package/dist/plugins/store-contracts.d.ts +35 -3
  228. package/dist/plugins/store-contracts.js +3 -0
  229. package/dist/plugins/task-attachment-store.d.ts +112 -14
  230. package/dist/plugins/task-attachment-store.js +221 -28
  231. package/dist/plugins/tidb-pool.js +2 -1
  232. package/dist/plugins/tidb-session-store.d.ts +4 -1
  233. package/dist/plugins/tidb-session-store.js +3 -2
  234. package/dist/plugins/workspace-fill.d.ts +60 -0
  235. package/dist/plugins/workspace-fill.js +106 -0
  236. package/dist/project-bundle.d.ts +38 -0
  237. package/dist/project-bundle.js +609 -0
  238. package/dist/run-cancel-context.d.ts +34 -0
  239. package/dist/run-cancel-context.js +7 -0
  240. package/dist/run-local.js +2 -8
  241. package/dist/runs.d.ts +39 -12
  242. package/dist/runs.js +69 -55
  243. package/dist/sandbox-egress-policy.d.ts +4 -1
  244. package/dist/sandbox-egress-policy.js +3 -1
  245. package/dist/sandbox-git-plane.d.ts +31 -12
  246. package/dist/sandbox-git-plane.js +24 -4
  247. package/dist/security.d.ts +11 -2
  248. package/dist/security.js +8 -0
  249. package/dist/server-secret-env.d.ts +2 -1
  250. package/dist/server-secret-env.js +2 -4
  251. package/dist/session-error-wire.d.ts +46 -4
  252. package/dist/session-error-wire.js +23 -0
  253. package/dist/session-incarnation.d.ts +9 -3
  254. package/dist/session-sync-kernel.d.ts +42 -1
  255. package/dist/session-sync-kernel.js +17 -0
  256. package/dist/session-sync.js +16 -4
  257. package/dist/sql-engine-coordinates.d.ts +49 -0
  258. package/dist/sql-engine-coordinates.js +27 -0
  259. package/dist/standing-answer-grant.d.ts +31 -2
  260. package/dist/standing-answer-grant.js +14 -2
  261. package/dist/store-posture.d.ts +1 -1
  262. package/dist/task-a2a.d.ts +1 -1
  263. package/dist/task-mcp.d.ts +1 -1
  264. package/dist/task-settings.d.ts +62 -27
  265. package/dist/task-settings.js +105 -29
  266. package/dist/terminal.d.ts +97 -20
  267. package/dist/terminal.js +107 -18
  268. package/dist/tool-approval.d.ts +4 -3
  269. package/dist/tool-approval.js +12 -14
  270. package/dist/trace/core-keyset-guard.d.ts +196 -2
  271. package/dist/trace/engine-notice-wire.d.ts +8 -2
  272. package/dist/trace/engine-notice-wire.js +4 -2
  273. package/dist/trace/exit-seat.d.ts +9 -1
  274. package/dist/trace/exit-seat.js +1 -0
  275. package/dist/trace/ledger-sink.d.ts +8 -4
  276. package/dist/trace/ledger-sink.js +2 -2
  277. package/dist/trace/model-segment.d.ts +2 -2
  278. package/dist/trace/project.d.ts +18 -1
  279. package/dist/trace/project.js +16 -0
  280. package/dist/trace/redact.js +323 -90
  281. package/dist/trace/self-minted-wire.d.ts +419 -4
  282. package/dist/trace/self-minted-wire.js +145 -0
  283. package/dist/trace/wire-projection-faces.d.ts +1 -1
  284. package/dist/trace/wire-projection-faces.js +1 -1
  285. package/dist/verifier-pause-card.d.ts +8 -0
  286. package/dist/verifier-pause-card.js +19 -0
  287. package/dist/web-admin-client/apply-effective.d.ts +5 -7
  288. package/dist/web-admin-client/apply-effective.js +22 -2
  289. package/dist/web-admin-client/candidate-gate.d.ts +1 -1
  290. package/dist/web-admin-client/effective-keys.js +2 -0
  291. package/dist/web-admin-client/read-warnings.d.ts +2 -2
  292. package/dist/web-admin-client/types.d.ts +4 -0
  293. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +3 -2
  294. package/package.json +2 -2
  295. package/wire-changes/server@7.141.0.json +367 -0
  296. package/wire-changes/server@7.142.0.json +639 -0
@@ -21,7 +21,9 @@ import { coreFileHistoryCaptureSeat } from "../file-history-capture.js";
21
21
  import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
22
22
  import { rewindFailureCode } from "../file-history-disclosure.js";
23
23
  import { errorKindOf } from "../observability/err-text.js";
24
+ import { codeFieldOf } from "../terminal.js";
24
25
  import { buildShownUrlsInText } from "../url-refusal.js";
26
+ import { seatText } from "../trace/exit-seat.js";
25
27
  export function createRunnerDepsOnAsk(toolApproval) {
26
28
  if (!toolApproval)
27
29
  return undefined;
@@ -178,7 +180,7 @@ export function createRunnerDeps(ctx) {
178
180
  }
179
181
  }
180
182
  catch (err) {
181
- logger.warn("workflow_ack_served_failed", { runId: input.runId, err: String(err) });
183
+ logger.warn("workflow_ack_served_failed", { runId: input.runId, err: seatText("operator-log-text", String(err)) });
182
184
  }
183
185
  },
184
186
  },
@@ -199,7 +201,7 @@ export function createRunnerDeps(ctx) {
199
201
  onTaskOutcome: outcomeSink
200
202
  ? (o) => {
201
203
  metrics.inc("task_outcomes_total", { status: o.status, green: String(o.oracle?.green ?? "unknown") });
202
- void outcomeSink.recordCore(o).catch((err) => logger.warn("task_outcome_record_failed", { runId: o.runId, err: String(err) }));
204
+ void outcomeSink.recordCore(o).catch((err) => logger.warn("task_outcome_record_failed", { runId: o.runId, err: seatText("operator-log-text", String(err)) }));
203
205
  }
204
206
  : undefined,
205
207
  onElicit: elicitation ? elicitation.elicit : undefined,
@@ -249,17 +251,18 @@ export function createRunnerDeps(ctx) {
249
251
  : undefined,
250
252
  ...selfOrchestrationDeps,
251
253
  onError: (err, ctx) => {
254
+ const codeField = codeFieldOf(err);
252
255
  if (ctx.phase === "degraded") {
253
- logger.warn("task_degraded", { sessionId: ctx.sessionId, info: String(err) });
256
+ logger.warn("task_degraded", { sessionId: ctx.sessionId, ...codeField, info: seatText("operator-log-text", String(err)) });
254
257
  return;
255
258
  }
256
259
  if (ctx.phase === "prompt-constitution") {
257
- logger.warn("prompt_composition_warning", { sessionId: ctx.sessionId, info: String(err) });
260
+ logger.warn("prompt_composition_warning", { sessionId: ctx.sessionId, ...codeField, info: seatText("operator-log-text", String(err)) });
258
261
  return;
259
262
  }
260
263
  if (ctx.phase === "rewind") {
261
264
  const code = rewindFailureCode(err);
262
- logger.warn("rewind_snapshot_failed", { sessionId: ctx.sessionId, code, info: String(err) });
265
+ logger.warn("rewind_snapshot_failed", { sessionId: ctx.sessionId, code, info: seatText("operator-log-text", String(err)) });
263
266
  metrics.inc("rewind_snapshot_failed_total", { code });
264
267
  return;
265
268
  }
@@ -268,12 +271,12 @@ export function createRunnerDeps(ctx) {
268
271
  return;
269
272
  }
270
273
  if (ctx.phase === "mcp") {
271
- logger.warn("mcp_server_unavailable", { sessionId: ctx.sessionId, kind: errorKindOf(err), info: buildShownUrlsInText(String(err)) });
274
+ logger.warn("mcp_server_unavailable", { sessionId: ctx.sessionId, kind: errorKindOf(err), ...codeField, info: seatText("operator-log-text", buildShownUrlsInText(String(err))) });
272
275
  metrics.inc("mcp_server_unavailable_total");
273
276
  return;
274
277
  }
275
278
  if (ctx.phase === "a2a") {
276
- logger.warn("a2a_peer_unavailable", { sessionId: ctx.sessionId, kind: errorKindOf(err), info: buildShownUrlsInText(String(err)) });
279
+ logger.warn("a2a_peer_unavailable", { sessionId: ctx.sessionId, kind: errorKindOf(err), ...codeField, info: seatText("operator-log-text", buildShownUrlsInText(String(err))) });
277
280
  metrics.inc("a2a_peer_unavailable_total");
278
281
  return;
279
282
  }
@@ -285,7 +288,8 @@ export function createRunnerDeps(ctx) {
285
288
  sessionId: ctx.sessionId,
286
289
  confirmed: classification !== undefined,
287
290
  ...(classification !== undefined ? { classification, classificationKnown: causeLevel !== undefined } : {}),
288
- err: String(err),
291
+ ...codeField,
292
+ err: seatText("operator-log-text", String(err)),
289
293
  };
290
294
  metrics.inc("prompt_cache_low_hit_total", {
291
295
  ...(classification !== undefined ? { classification: causeLevel !== undefined ? classification : "unknown" } : {}),
@@ -298,25 +302,24 @@ export function createRunnerDeps(ctx) {
298
302
  return;
299
303
  }
300
304
  if (ctx.phase === "config") {
301
- const code = typeof err?.code === "string" ? err.code : undefined;
302
305
  const classification = ctx.classification;
303
306
  const classificationKnown = classification === undefined ? undefined : CONFIG_ADVISORY_CLASSIFICATIONS.has(classification);
304
307
  const fields = {
305
308
  sessionId: ctx.sessionId,
306
- ...(code !== undefined ? { code } : {}),
309
+ ...codeField,
307
310
  ...(classification !== undefined ? { classification, classificationKnown } : {}),
308
- info: String(err),
311
+ info: seatText("operator-log-text", String(err)),
309
312
  };
310
313
  logger.warn("runner_config_advisory", fields);
311
314
  metrics.inc("runner_config_advisory_total", {
312
- ...(code !== undefined ? { code } : {}),
315
+ ...codeField,
313
316
  ...(classification !== undefined ? { classification: classificationKnown ? classification : "unknown" } : {}),
314
317
  level: "warn",
315
318
  });
316
319
  return;
317
320
  }
318
321
  metrics.inc("runner_error_total", { phase: ctx.phase });
319
- logger.error("runner_error", { phase: ctx.phase, sessionId: ctx.sessionId, err: String(err) });
322
+ logger.error("runner_error", { phase: ctx.phase, sessionId: ctx.sessionId, ...codeField, err: seatText("operator-log-text", String(err)) });
320
323
  },
321
324
  ...(ctx.consolidationSeat !== undefined
322
325
  ? {
@@ -1,6 +1,7 @@
1
1
  import { applyGovernedVerdictAbsenceWarning, applyLocalAutoModeDeny, applyMemoryOptOutGrant, applyObserverEnvOptIn, centerEntitlementSourceWired, createPrincipalEntitlementsClient, } from "../runtime-caps-resolver.js";
2
2
  import { scopedTokenNeedsWorker } from "../center-credential.js";
3
3
  import { WEB_ADMIN_ENV } from "@sema-agent/settings-schema";
4
+ import { seatText } from "../trace/exit-seat.js";
4
5
  export function assertMemoryCapturePolicyWirable(input) {
5
6
  if (input.policy !== "governed")
6
7
  return;
@@ -47,7 +48,7 @@ export function createRuntimeCaps(ctx) {
47
48
  ? createPrincipalEntitlementsClient({
48
49
  center: config.webAdmin,
49
50
  ...(config.webAdmin.worker ? { worker: config.webAdmin.worker } : {}),
50
- onError: (err, principal) => logger.warn("runtime_caps_resolve_failed", { principal, err: String(err) }),
51
+ onError: (err, principal) => logger.warn("runtime_caps_resolve_failed", { principal, err: seatText("operator-log-text", String(err)) }),
51
52
  })
52
53
  : undefined;
53
54
  const centerRuntimeCapsResolver = principalCaps?.resolveRuntimeCaps;
@@ -60,7 +61,7 @@ export function createRuntimeCaps(ctx) {
60
61
  const withMemoryGrant = applyMemoryOptOutGrant(withObservers, ctx.memoryOptOutGrant, {
61
62
  onFault: (err, principal) => logger.warn("memory_optout_grant_resolve_failed", {
62
63
  principal,
63
- err: String(err),
64
+ err: seatText("operator-log-text", String(err)),
64
65
  ...(observability ? {} : { face: "capabilities-read" }),
65
66
  effect: "allowMemoryOptOut left ABSENT for this resolve (never coined as false): open posture ⇒ the opt-out takes effect; governed ⇒ core refuses the run (verdict absent)",
66
67
  }),
@@ -16,7 +16,7 @@ import type { Logger } from "../observability/logger.js";
16
16
  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
- import type { CheckpointStoreFull, StoreBackend, ToolResultStoreFull } from "../plugins/store-backend.js";
19
+ import { type CheckpointStoreFull, type StoreBackend, type ToolResultStoreFull } from "../plugins/store-backend.js";
20
20
  import type { createSessionStore } from "../plugins/session-store.js";
21
21
  import type { TaskAttachmentStore } from "../plugins/task-attachment-store.js";
22
22
  import type { FileHistoryErasureFace } from "../file-history-capture.js";
@@ -2,6 +2,7 @@ import { buildRewindHandles, buildSessionAudit, buildSessionAuditLocal, buildSes
2
2
  import { makeDegenerateInstrument } from "../degenerate-instrument.js";
3
3
  import { PlanCacheProbe } from "../plan-cache-probe.js";
4
4
  import { purgeScratchpadDir } from "../env-facts.js";
5
+ import { localSessionRowsOf } from "../plugins/store-backend.js";
5
6
  import { setLeafAdvanceListener } from "../session-leaf-bus.js";
6
7
  import { SessionWatchRegistry, posIntEnv } from "../session-watch.js";
7
8
  import { defaultTaskRegistry, peerSessionBoxHandle } from "@sema-agent/core";
@@ -10,21 +11,22 @@ import { probeSessionChildren, retireSessionChildren, sessionChildrenScope, Sess
10
11
  import { SessionActiveRunError } from "../execution-placement.js";
11
12
  import { headReadOf, redactIncarnations } from "../session-incarnation.js";
12
13
  import { recordFailOpen } from "../observability/fail-open.js";
14
+ import { seatText } from "../trace/exit-seat.js";
13
15
  export function createSessionFaces(ctx) {
14
16
  const { config, logger, metrics, localRoot, backend, sessionStore, runStore, checkpointStore, toolResultStore, resumeAnchorStore, approvalExemptionStore, sessionPolicyStore, taskAttachmentStore, fileHistoryErasure, workflowCompletionInbox, taskListLane, dropSessionScoped, mailboxStore, mailboxRecipientLifecycle, backgroundAgentStore, userInputLedgerStore, spaceReclaimer, } = ctx;
15
17
  const mysqlPool = backend?.mysqlPool();
16
18
  const auditPgPool = backend?.pgPool();
17
- const auditLocalRoot = backend?.kind === "local" ? (config.localDataRoot ?? localRoot) : undefined;
19
+ const auditLocalRows = localSessionRowsOf(backend);
18
20
  const ownerAware = sessionStore;
19
21
  const headOf = headReadOf(sessionStore);
20
- const sessionAudit = mysqlPool || auditPgPool || auditLocalRoot
22
+ const sessionAudit = mysqlPool || auditPgPool || auditLocalRows
21
23
  ? async (sessionId, opts) => {
22
24
  const handles = opts !== undefined && resumeAnchorStore !== undefined ? buildRewindHandles(await resumeAnchorStore.listBySession(sessionId), opts.reader) : undefined;
23
25
  const audit = mysqlPool
24
26
  ? await buildSessionAudit(mysqlPool, sessionId, handles)
25
27
  : auditPgPool
26
28
  ? await buildSessionAuditPg(auditPgPool, sessionId, handles)
27
- : await buildSessionAuditLocal(auditLocalRoot, sessionId, handles);
29
+ : await buildSessionAuditLocal(auditLocalRows, sessionId, handles);
28
30
  if (!audit)
29
31
  return undefined;
30
32
  const [head, placement] = await Promise.all([headOf?.(sessionId), opts !== undefined ? ownerAware.placementOf?.(sessionId) : undefined]);
@@ -105,7 +107,7 @@ export function createSessionFaces(ctx) {
105
107
  }
106
108
  }
107
109
  if (workflowCompletionInbox)
108
- await workflowCompletionInbox.purge(sessionId, owner ?? null).catch((err) => logger.warn("workflow_completion_inbox_purge_failed", { sessionId, err: String(err) }));
110
+ await workflowCompletionInbox.purge(sessionId, owner ?? null).catch((err) => logger.warn("workflow_completion_inbox_purge_failed", { sessionId, err: seatText("operator-log-text", String(err)) }));
109
111
  const peerBox = mailboxStore !== undefined && mailboxRecipientLifecycle !== undefined
110
112
  ? { store: mailboxStore, lifecycle: mailboxRecipientLifecycle, scope: owner ?? "default", handle: peerSessionBoxHandle(sessionId) }
111
113
  : undefined;
@@ -117,7 +119,7 @@ export function createSessionFaces(ctx) {
117
119
  await reapSessionBackgroundHard(sessionId, owner ?? "default", { includeRetained: false, reason: "session_deleted" }, logger);
118
120
  }
119
121
  catch (err) {
120
- logger.warn("session_background_reap_failed", { sessionId, err: String(err) });
122
+ logger.warn("session_background_reap_failed", { sessionId, err: seatText("operator-log-text", String(err)) });
121
123
  }
122
124
  if (peerBox !== undefined)
123
125
  await peerBox.store.drop(peerBox.scope, peerBox.handle);
@@ -137,7 +139,7 @@ export function createSessionFaces(ctx) {
137
139
  logger.warn("workspace_space_reclaim_failed", {
138
140
  sessionId,
139
141
  stage: "seat_threw",
140
- error: redactIncarnations(String(err)),
142
+ error: seatText("operator-log-text", redactIncarnations(String(err))),
141
143
  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",
142
144
  });
143
145
  });
@@ -9,6 +9,7 @@ import { createEngineLeaseTracker } from "./engine-lease.js";
9
9
  import { writeExitLast, readExitLast, clearExitLast } from "./exit-last.js";
10
10
  import { isScriptRealmRejection, describeRejectionReason } from "../orchestration/hardened-vm-runner.js";
11
11
  import { DRAIN_CAUSE_COUNTS_AS_FIRST_STOP_SIGNAL, HARD_STOP_ACTION_ID, drainDeadlineBeyondBound } from "../fleet/drain-entry.js";
12
+ import { seatText } from "../trace/exit-seat.js";
12
13
  const HARD_STOP_GRACE_MS = 10_000;
13
14
  const FINAL_EXIT_MS = 15_000;
14
15
  export function backgroundGraceRemainingMs(a) {
@@ -74,6 +75,7 @@ export function installShutdownHandlers(ctx) {
74
75
  let closingAt = 0;
75
76
  let parentWatch;
76
77
  let engineLease;
78
+ let leaseFactsReader;
77
79
  const hardShutdown = () => {
78
80
  if (closing)
79
81
  return;
@@ -90,7 +92,7 @@ export function installShutdownHandlers(ctx) {
90
92
  for (const p of uncommittedParks)
91
93
  logger.warn("approval_park_uncommitted_at_shutdown", { approvalId: p.approvalId, taskId: p.taskId });
92
94
  })
93
- .catch((err) => logger.warn("approval_drain_for_shutdown_failed", { err: String(err) }));
95
+ .catch((err) => logger.warn("approval_drain_for_shutdown_failed", { err: seatText("operator-log-text", String(err)) }));
94
96
  clearInterval(reaper);
95
97
  clearInterval(fleetReconcile.timer);
96
98
  const retentionTeardown = retentionLane === undefined
@@ -106,7 +108,7 @@ export function installShutdownHandlers(ctx) {
106
108
  engineLease?.stop();
107
109
  storeLiveProbe?.stop();
108
110
  servingLease?.stop();
109
- void deviceHub?.close().catch((err) => logger.warn("device_hub_close_failed", { err: String(err) }));
111
+ void deviceHub?.close().catch((err) => logger.warn("device_hub_close_failed", { err: seatText("operator-log-text", String(err)) }));
110
112
  webAdmin?.stopRefreshLoop();
111
113
  otelExporter?.stop();
112
114
  breakerState?.stop();
@@ -280,6 +282,8 @@ export function installShutdownHandlers(ctx) {
280
282
  : {}),
281
283
  log: (event, fields) => logger.info(event, fields),
282
284
  });
285
+ leaseFactsReader = () => engineLease?.facts;
286
+ drainState.engineLease = leaseFactsReader;
283
287
  }
284
288
  let disposed = false;
285
289
  return {
@@ -302,6 +306,8 @@ export function installShutdownHandlers(ctx) {
302
306
  engineLease?.stop();
303
307
  if (drainState.enter === enterByRequest)
304
308
  drainState.enter = undefined;
309
+ if (leaseFactsReader !== undefined && drainState.engineLease === leaseFactsReader)
310
+ drainState.engineLease = undefined;
305
311
  },
306
312
  };
307
313
  }
@@ -6,18 +6,19 @@ import { auditDormantPermissionRules } from "./permission-rules-audit.js";
6
6
  import { createBudgetAndTracing } from "./budget-tracing.js";
7
7
  import { createRuleConsentLane } from "../rules-consent.js";
8
8
  import { createConsolidationValve } from "./memory-consolidation.js";
9
+ import { createOperatorFaceIncidentSink } from "../memory-incident-sink.js";
9
10
  export async function runStage04(ctx) {
10
11
  const { backend, breakerState, config, logger, memoryEngine, metrics, sessionCaptureRecords } = ctx;
11
12
  const memoryBundleFaces = memoryEngine ? createMemoryBundleFaces(memoryEngine, { ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}) }) : undefined;
12
13
  const memoryComplianceFaces = memoryEngine
13
14
  ? createMemoryComplianceFaces(memoryEngine, {
14
- onIncident: (err) => logger.warn("memory_compliance_incident", { code: err.code ?? null, detail: err.message }),
15
+ onIncident: createOperatorFaceIncidentSink({ logger }, "memory_compliance_incident"),
15
16
  ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}),
16
17
  })
17
18
  : undefined;
18
19
  const memoryOriginFaces = memoryEngine
19
20
  ? createMemoryOriginFaces(memoryEngine, {
20
- onIncident: (err) => logger.warn("memory_origin_incident", { code: err.code ?? null, detail: err.message }),
21
+ onIncident: createOperatorFaceIncidentSink({ logger }, "memory_origin_incident"),
21
22
  ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}),
22
23
  })
23
24
  : undefined;
@@ -10,7 +10,7 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
10
10
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
11
11
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
12
12
  sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
13
- sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
13
+ sandboxGitPlane: () => import("../sandbox-git-plane.js").SandboxGitPlane;
14
14
  perSessionCwd: Map<string, string>;
15
15
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
16
16
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -1,6 +1,6 @@
1
1
  import { assembleDeploymentMods } from "./deployment-mods.js";
2
2
  import { isBrandedDeployment } from "../capabilities/brand-identity.js";
3
- import { assertDeviceLaneWired, createDeviceLane } from "./device-lane.js";
3
+ import { assertDeviceLaneWired, createDeviceLane, noteDeviceRelayBindings } from "./device-lane.js";
4
4
  import { assertWorkspaceSpaceReadable, createExecutionEnv } from "./execution-env.js";
5
5
  import { headReadOf } from "../session-incarnation.js";
6
6
  import * as facts from "../capability-facts.js";
@@ -13,16 +13,20 @@ export async function runStage05(ctx) {
13
13
  const deviceLane = config.remoteExec?.provider === "device" ? createDeviceLane({ config, logger, metrics, backend, seat: sessionStore.executionPlacement, replicaId: instanceId }) : undefined;
14
14
  const headOf = headReadOf(sessionStore);
15
15
  const spaceCommits = backend !== undefined ? () => runStore : undefined;
16
- const { perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, setSessionInheritEnv, fenceSessionOwner, dropSessionScoped, executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, spaceReclaimer, sandboxSecretSeatGate, sandboxPodReaper, readSandboxGitPlane, } = createExecutionEnv({ config, logger, metrics, taskAttachmentStore, ...(deviceLane ? { deviceLane } : {}), ...(spaceCommits !== undefined ? { spaceCommits } : {}), ...(headOf !== undefined ? { headOf } : {}), ...(backend !== undefined ? { runRows: () => runStore } : {}) });
16
+ const { perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, setSessionInheritEnv, fenceSessionOwner, dropSessionScoped, executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, spaceReclaimer, sandboxSecretSeatGate, sandboxPodReaper, sandboxGitPlane: sandboxGitPlaneSeat, } = createExecutionEnv({ config, logger, metrics, taskAttachmentStore, ...(deviceLane ? { deviceLane } : {}), ...(spaceCommits !== undefined ? { spaceCommits } : {}), ...(headOf !== undefined ? { headOf } : {}), ...(backend !== undefined ? { runRows: () => runStore } : {}) });
17
17
  assertDeviceLaneWired(config.remoteExec?.provider === "device", deviceLane, executionEnvFactory !== undefined);
18
+ if (deviceLane !== undefined && config.remoteExec?.provider === "device")
19
+ await noteDeviceRelayBindings(config.remoteExec.relay, deviceLane.store, logger);
18
20
  assertWorkspaceSpaceReadable(facts.workspaceSpace(config), { headOf, spaceCommits }, facts.workspaceCache(config), sessionStoreLabelOf(config.sessionBackend, backend?.kind));
19
21
  if (sandboxSecretSeatGate !== undefined)
20
22
  await sandboxSecretSeatGate();
21
- const sandboxGitPlane = await readSandboxGitPlane();
22
- if (sandboxGitPlane.state === "on")
23
- logger.info("credential_plane_sandbox_git", { state: "on", origins: sandboxGitPlane.origins });
24
- else if (sandboxGitPlane.reason !== "single_user" && sandboxGitPlane.reason !== "lane_without_boundary") {
25
- logger.info("credential_plane_sandbox_git", { state: "off", reason: sandboxGitPlane.reason, why: SANDBOX_GIT_PLANE_OFF_TEXT[sandboxGitPlane.reason] });
23
+ await sandboxGitPlaneSeat.settle();
24
+ const sandboxGitPlane = sandboxGitPlaneSeat.now;
25
+ const bootPlane = sandboxGitPlane();
26
+ if (bootPlane.state === "on")
27
+ logger.info("credential_plane_sandbox_git", { state: "on", origins: bootPlane.origins });
28
+ else if (bootPlane.reason !== "single_user" && bootPlane.reason !== "lane_without_boundary") {
29
+ logger.info("credential_plane_sandbox_git", { state: "off", reason: bootPlane.reason, why: SANDBOX_GIT_PLANE_OFF_TEXT[bootPlane.reason] });
26
30
  }
27
31
  if (config.toolTrace)
28
32
  logger.info("tool_trace_enabled", {});
@@ -7,7 +7,6 @@
7
7
  * 🔴 `runStore` / `parkedAskRedeem` 经 `late-binds.ts` 的晚绑 cell 读(原文同作用域前向引用/晚绑 holder)。
8
8
  */
9
9
  import { Runner } from "@sema-agent/core";
10
- import { ForkRoutingSessionStore } from "../plugins/fork-routing-session-store.js";
11
10
  import type { runStage05 } from "./stage-05-execution-env.js";
12
11
  export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>): Promise<{
13
12
  approvalAskAudit: import("../approval-ask-audit-store.js").FileApprovalAskAuditStore | undefined;
@@ -44,7 +43,6 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
44
43
  sqlWorkflowRunStore: import("@sema-agent/core").WorkflowRunStore | undefined;
45
44
  streamApprovalGate: import("../tool-approval.js").StreamApprovalGate<import("../approval-gate-currency.js").GateCurrencyStore>;
46
45
  subRunner: Runner;
47
- subRunnerSessions: ForkRoutingSessionStore;
48
46
  subagentSteerRegistry: import("../orchestration/subagent-steer.js").SubagentSteerRegistry;
49
47
  toolApproval: import("../tool-approval.js").ToolApprovalCoordinator | undefined;
50
48
  workflowAgentRegistry: import("../orchestration/workflow-agent-steer.js").WorkflowAgentRegistry | undefined;
@@ -73,7 +71,7 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
73
71
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
74
72
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
75
73
  sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
76
- sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
74
+ sandboxGitPlane: () => import("../sandbox-git-plane.js").SandboxGitPlane;
77
75
  perSessionCwd: Map<string, string>;
78
76
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
79
77
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -29,6 +29,7 @@ import { mountOrgDeliveryGate } from "./org-delivery.js";
29
29
  import { parkedAskRedeem, runStore } from "./late-binds.js";
30
30
  import { withInternalRunEnvs } from "../internal-run-env.js";
31
31
  import { retentionSweepRuns } from "../plugins/retention-store-sql.js";
32
+ import { createOperatorFaceIncidentSink } from "../memory-incident-sink.js";
32
33
  export async function runStage06(ctx) {
33
34
  const { backend, backgroundAgentStore, brain, engineDataRoot, peerDesk, config, webAdmin, consolidationValve, deploymentMods, executionEnvFactory, fileHistoryStore, localRoot, logger, lspManager, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memorySyncRunner, metrics, perSessionCwd, permissionRuleProvider, pricing, rosterStore, ruleConsent, sendUserFileTaskEnvs, sessionCaptureRecords, sessionPolicyStore, sessionStore, taskAttachmentStore, taskListLane, toolResultStore, tracer, usageWindowStore } = ctx;
34
35
  const { sqlWorkflowRunStore, workflowNotifyJournal, workflowCompletionInbox, deliverWorkflowCompletion, workflowNotifyGate, fleetBus, workflowRunStore, workflowJournalStore, outcomeSink, workflowRecoverOpts, workflowAgentRegistry, subagentSteerRegistry, workflowAgentSessionIndex, workflowParkDecisions, } = createWorkflowOrchestration({ config, logger, metrics, localRoot, backend, getRunStore: () => runStore });
@@ -92,7 +93,7 @@ export async function runStage06(ctx) {
92
93
  seat: consolidationSeat,
93
94
  scopes: config.memoryConsolidationDriver.scopes,
94
95
  ...(config.memoryProvenance !== undefined ? { provenance: config.memoryProvenance } : {}),
95
- onIncident: (err) => logger.warn("memory_consolidation_incident", { code: err.code ?? null, detail: err.message }),
96
+ onIncident: createOperatorFaceIncidentSink({ logger }, "memory_consolidation_incident"),
96
97
  onStopDetail: (audit) => logger.warn("memory_consolidation_stop_detail", audit),
97
98
  ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}),
98
99
  writeJudge: createOperatorValveWriteJudge({ ruleStoreProvider: permissionRuleProvider, config }),
@@ -230,6 +231,6 @@ export async function runStage06(ctx) {
230
231
  onError: runnerDeps.onError ? runnerDeps.onError : undefined,
231
232
  };
232
233
  const subRunner = new Runner(subRunnerDeps);
233
- return { ...ctx, approvalAskAudit, approvalExemptionStore, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, 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, workflowParkDecisions, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable, orgDeliveryGate };
234
+ return { ...ctx, approvalAskAudit, approvalExemptionStore, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, 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, subagentSteerRegistry, toolApproval, workflowAgentRegistry, workflowAgentSessionIndex, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowParkDecisions, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable, orgDeliveryGate };
234
235
  }
235
236
  //# sourceMappingURL=stage-06-runners.js.map
@@ -60,7 +60,6 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
60
60
  sqlWorkflowRunStore: import("@sema-agent/core").WorkflowRunStore | undefined;
61
61
  streamApprovalGate: import("../tool-approval.js").StreamApprovalGate<import("../approval-gate-currency.js").GateCurrencyStore>;
62
62
  subRunner: import("@sema-agent/core").Runner;
63
- subRunnerSessions: import("../plugins/fork-routing-session-store.js").ForkRoutingSessionStore;
64
63
  subagentSteerRegistry: import("../orchestration/subagent-steer.js").SubagentSteerRegistry;
65
64
  toolApproval: import("../tool-approval.js").ToolApprovalCoordinator | undefined;
66
65
  workflowAgentRegistry: import("../orchestration/workflow-agent-steer.js").WorkflowAgentRegistry | undefined;
@@ -89,7 +88,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
89
88
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
90
89
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
91
90
  sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
92
- sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
91
+ sandboxGitPlane: () => import("../sandbox-git-plane.js").SandboxGitPlane;
93
92
  perSessionCwd: Map<string, string>;
94
93
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
95
94
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -1,12 +1,12 @@
1
1
  import { DEFAULT_MODEL_REF } from "../model-select.js";
2
- import { probeSearchBackend, uuidv7 } from "@sema-agent/core";
2
+ import { probeSearchBackend, resolveSubagentTranscriptTier, uuidv7 } from "@sema-agent/core";
3
3
  import { selectEnvironmentTool } from "../capabilities/select-environment-tool.js";
4
4
  import { subagentSendUserFileExtraTools } from "../capabilities/send-user-file-tool.js";
5
5
  import { parseCapEnv, parseNumOrFailNonNegative } from "../config.js";
6
- import { ensureChildSessionDurableWithPromotion } from "../plugins/session-store.js";
6
+ import { attestChildSessionDurable } from "../plugins/session-store.js";
7
7
  import { webSearchConfigFromEnv, createWebSearchBackend, shouldProbeWebSearchOnBoot } from "../plugins/web-search.js";
8
8
  import { createAuthorizer } from "../security.js";
9
- import { buildForceDurableGateInertNotice, buildNoResponderBootWarns, gateIntentUnserviceableReason, singleUserAutoAcceptBaselineApplies } from "../approval.js";
9
+ import { buildForceDurableGateInertNotice, buildNoResponderBootWarns, buildSingleUserDefaultPostureNotice, gateIntentUnserviceableReason, singleUserAutoAcceptBaselineApplies } from "../approval.js";
10
10
  import { executionLaneOf, laneWiresExecutionEnv } from "../execution-lane-caps.js";
11
11
  import { loadDeploymentSkills } from "../capabilities/skills.js";
12
12
  import { createRepoClient } from "../capabilities/repo-tools.js";
@@ -28,8 +28,9 @@ import { bindRateLimiter, bindRunStore } from "./late-binds.js";
28
28
  import { buildDisplaySafeUrl } from "../trace/redact.js";
29
29
  import * as facts from "../capability-facts.js";
30
30
  import { WEB_ADMIN_ENV } from "@sema-agent/settings-schema";
31
+ import { seatText } from "../trace/exit-seat.js";
31
32
  export async function runStage07(ctx) {
32
- const { approvalAskAudit, approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, webAdmin, counterDegradeHook, peerDesk, durableEnabled, instanceId, localRoot, logger, question, runner, runnerDeps, sendUserFileToolSpec, sessionEnvSelection, sessionStore, subRunner, subRunnerSessions, taskListLane, toolApproval } = ctx;
33
+ const { approvalAskAudit, approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, webAdmin, counterDegradeHook, peerDesk, durableEnabled, instanceId, localRoot, logger, question, runner, runnerDeps, sendUserFileToolSpec, sessionEnvSelection, sessionStore, subRunner, taskListLane, toolApproval } = ctx;
33
34
  const authorize = createAuthorizer(config, sessionStore);
34
35
  const runStore = backend ? backend.run() : undefined;
35
36
  bindRunStore(runStore);
@@ -126,10 +127,8 @@ export async function runStage07(ctx) {
126
127
  }))
127
128
  logger.warn(w.event, w.fields);
128
129
  if (singleUserAutoAcceptBaselineApplies(config)) {
129
- logger.info("tool_policy_single_user_default", {
130
- posture: "adjudicated auto-accept — ALL write/hand/MCP tool surfaces auto-allowed (core per-surface UNGATED enumeration suppressed for single-user turnkey)",
131
- tighten: "APPROVAL_REQUIRE / AUTONOMY / commandPolicy (re-surfaces + gates specific surfaces)",
132
- });
130
+ const posture = buildSingleUserDefaultPostureNotice();
131
+ logger.info(posture.event, posture.fields);
133
132
  }
134
133
  if (config.directDoorActive)
135
134
  logger.info("direct_door_active", { iss: config.principalJwtIss, aud: config.principalJwtAud, operators: config.operatorPrincipals.length });
@@ -167,10 +166,10 @@ export async function runStage07(ctx) {
167
166
  else
168
167
  logger.warn("web_search_probe_failed", { provider: webSearchCfg.provider, error: r.error, note: "WebSearch stays mounted — the tool will fail per-call until this is fixed; the service is not blocked by it." });
169
168
  })
170
- .catch((e) => logger.warn("web_search_probe_failed", { provider: webSearchCfg.provider, error: e instanceof Error ? e.message : String(e) }));
169
+ .catch((e) => logger.warn("web_search_probe_failed", { provider: webSearchCfg.provider, error: seatText("operator-log-text", e instanceof Error ? e.message : String(e)) }));
171
170
  }
172
- const ensureChildSessionDurable = checkpointStore && config.sessionBackend === "tidb"
173
- ? (sessionId, root) => ensureChildSessionDurableWithPromotion(sessionStore, subRunnerSessions, sessionId, root, logger)
171
+ const ensureChildSessionDurable = checkpointStore && resolveSubagentTranscriptTier(backgroundAgentStore !== undefined, sessionStore) === "full"
172
+ ? (sessionId, root) => attestChildSessionDurable(sessionStore, sessionId, root, logger)
174
173
  : undefined;
175
174
  const webFetchSummarize = createWebFetchSummarizeLane({ brain, config, getKeyResolver: () => webAdmin.getKeyResolver(), logger });
176
175
  const scenarioDeps = {
@@ -73,7 +73,6 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
73
73
  sqlWorkflowRunStore: import("@sema-agent/core").WorkflowRunStore | undefined;
74
74
  streamApprovalGate: import("../tool-approval.js").StreamApprovalGate<import("../approval-gate-currency.js").GateCurrencyStore>;
75
75
  subRunner: Runner;
76
- subRunnerSessions: import("../plugins/fork-routing-session-store.js").ForkRoutingSessionStore;
77
76
  subagentSteerRegistry: import("../orchestration/subagent-steer.js").SubagentSteerRegistry;
78
77
  toolApproval: import("../tool-approval.js").ToolApprovalCoordinator | undefined;
79
78
  workflowAgentRegistry: import("../orchestration/workflow-agent-steer.js").WorkflowAgentRegistry | undefined;
@@ -102,7 +101,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
102
101
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
103
102
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
104
103
  sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
105
- sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
104
+ sandboxGitPlane: () => import("../sandbox-git-plane.js").SandboxGitPlane;
106
105
  perSessionCwd: Map<string, string>;
107
106
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
108
107
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -4,6 +4,7 @@ import { startReapers } from "./reapers.js";
4
4
  import { startRetentionLane, RETENTION_LEASE_TTL_FACTOR } from "./retention-lane.js";
5
5
  import { createLimitSync } from "./limit-sync.js";
6
6
  import { runDenySweep } from "./late-binds.js";
7
+ import { seatText } from "../trace/exit-seat.js";
7
8
  export function runStage08(ctx) {
8
9
  const { approvalAskAudit, approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, spaceReclaimer, sandboxPodReaper, handslessRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, rosterStore, runStore, runner, sqlWorkflowRunStore, subRunner, taskAttachmentStore, toolApproval, toolResultStore, userInputLedger, workflowJournalStore, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
9
10
  const reaper = startReapers({
@@ -48,7 +49,7 @@ export function runStage08(ctx) {
48
49
  const otelExporter = config.otel
49
50
  ? startOtlpExporter(metrics, {
50
51
  ...config.otel,
51
- onError: (err) => logger.warn("otel_export_failed", { err: String(err) }),
52
+ onError: (err) => logger.warn("otel_export_failed", { err: seatText("operator-log-text", String(err)) }),
52
53
  })
53
54
  : undefined;
54
55
  const limitSync = createLimitSync({ config, rateGate: rateLimiter, quota: costQuota, logger });
@@ -67,7 +68,7 @@ export function runStage08(ctx) {
67
68
  }
68
69
  catch (err) {
69
70
  if (i > 0)
70
- logger.error("runner_deps_swap_split", { failedAt: name, seats: Object.keys(next), swapped: bootRunners.slice(0, i).map(([n]) => n), err: String(err) });
71
+ logger.error("runner_deps_swap_split", { failedAt: name, seats: Object.keys(next), swapped: bootRunners.slice(0, i).map(([n]) => n), err: seatText("operator-log-text", String(err)) });
71
72
  throw err;
72
73
  }
73
74
  }
@@ -97,7 +97,6 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
97
97
  sqlWorkflowRunStore: import("@sema-agent/core").WorkflowRunStore | undefined;
98
98
  streamApprovalGate: import("../tool-approval.js").StreamApprovalGate<import("../approval-gate-currency.js").GateCurrencyStore>;
99
99
  subRunner: import("@sema-agent/core").Runner;
100
- subRunnerSessions: import("../plugins/fork-routing-session-store.js").ForkRoutingSessionStore;
101
100
  subagentSteerRegistry: import("../orchestration/subagent-steer.js").SubagentSteerRegistry;
102
101
  toolApproval: import("../tool-approval.js").ToolApprovalCoordinator | undefined;
103
102
  workflowAgentRegistry: import("../orchestration/workflow-agent-steer.js").WorkflowAgentRegistry | undefined;
@@ -126,7 +125,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
126
125
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
127
126
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
128
127
  sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
129
- sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
128
+ sandboxGitPlane: () => import("../sandbox-git-plane.js").SandboxGitPlane;
130
129
  perSessionCwd: Map<string, string>;
131
130
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
132
131
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -96,7 +96,6 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
96
96
  sqlWorkflowRunStore: import("@sema-agent/core").WorkflowRunStore | undefined;
97
97
  streamApprovalGate: import("../tool-approval.js").StreamApprovalGate<import("../approval-gate-currency.js").GateCurrencyStore>;
98
98
  subRunner: import("@sema-agent/core").Runner;
99
- subRunnerSessions: import("../plugins/fork-routing-session-store.js").ForkRoutingSessionStore;
100
99
  subagentSteerRegistry: import("../orchestration/subagent-steer.js").SubagentSteerRegistry;
101
100
  toolApproval: import("../tool-approval.js").ToolApprovalCoordinator | undefined;
102
101
  workflowAgentRegistry: import("../orchestration/workflow-agent-steer.js").WorkflowAgentRegistry | undefined;
@@ -125,7 +124,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
125
124
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
126
125
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
127
126
  sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
128
- sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
127
+ sandboxGitPlane: () => import("../sandbox-git-plane.js").SandboxGitPlane;
129
128
  perSessionCwd: Map<string, string>;
130
129
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
131
130
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -29,6 +29,7 @@ import { installShutdownHandlers } from "./shutdown.js";
29
29
  import { bindServerLateSeats } from "./late-binds.js";
30
30
  import { serviceVersion } from "../service-version.js";
31
31
  import { buildDisplaySafeUrl } from "../trace/redact.js";
32
+ import { seatText } from "../trace/exit-seat.js";
32
33
  export async function runStage10(ctx) {
33
34
  const { peerDesk, approvalAskAudit, approvalExemptionStore, approvalNonceStore, authorize, backend, backgroundAgentStore, brain, breakerState, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, parkCommits, config, webAdmin, consolidationValve, costQuota, deploymentModsLoaded, deviceLane, drainState, durableEnabled, elicitation, fenceSessionOwner, fileHistoryStore, fleetBus, fleetLease, fleetUsage, governanceSeams, handslessRunner, hookAgent, hookLlm, hookWakeBus, imageBakes, imageIndex, instanceId, instrumentDegenerate, leaderEndpoint, loadedSkills, localRoot, logger, lspManager, mcpRevocations, memoryBundleFaces, memoryComplianceFaces, memoryConsolidationFaces, memoryEngine, memoryExportStores, memoryOptOutGrantStore, memoryOriginFaces, memoryPosture, memorySyncCursors, memorySyncRunner, metrics, modelUsageTracker, orgMemoryAdmission, otelExporter, outcomeSink, ownerAware, parkedReviveInheritedGate, parkedReviveSurface, perSessionCwd, perTaskImage, planCacheProbe, pricing, principalCaps, promptManifestTracker, purgeSession, question, rateLimiter, reaper, webAdminJwtVerifier, resumeAnchorStore, retentionLaneStarted, retentionLaneStore, ruleConsent, runStore, runner, runnerDeps, runtimeCapsPeekResolver, sandboxGitPlane, scenarioDetails, scenarios, selectEnvTool, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionAudit, sessionEnvSelection, sessionMemoryStatusFace, sessionPolicyStore, sessionTitler, sessionWatchRegistry, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, sharedMemoryStore, sideQueryAccounting, sqlEngine, sqlWorkflowRunStore, staticWiring, storePosture, subRunner, subagentSteerRegistry, taskAttachmentStore, taskLimitCaps, taskTimeoutSec, toolApproval, toolResultStore, usageWindowStore, userInputLedger, webSearchProvider, workflowAgentRegistry, workflowAgentSessionIndex, workflowParkDecisions, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable, orgDeliveryGate } = ctx;
34
35
  const stores = {
@@ -96,6 +97,7 @@ export async function runStage10(ctx) {
96
97
  memoryCompliance: memoryComplianceFaces,
97
98
  memoryOriginFace: memoryOriginFaces,
98
99
  sessionMemoryStatus: sessionMemoryStatusFace,
100
+ memorySyncLeg: memorySyncRunner,
99
101
  memoryAutoConsolidationArmed: autoRunOnRecommendationEffective(runnerDeps),
100
102
  memoryConsolidationValve: consolidationValve,
101
103
  memoryConsolidation: memoryConsolidationFaces,
@@ -131,7 +133,7 @@ export async function runStage10(ctx) {
131
133
  classifierModel: () => {
132
134
  const route = classifierRouteFor(runnerDeps);
133
135
  if (route.fault !== undefined)
134
- logger.debug("auto_mode_classifier_route_unresolved", { fault: route.fault });
136
+ logger.debug("auto_mode_classifier_route_unresolved", { fault: seatText("operator-log-text", route.fault) });
135
137
  return route.id;
136
138
  },
137
139
  },
@@ -256,7 +258,7 @@ export async function runStage10(ctx) {
256
258
  bindHost: bindHost ?? "0.0.0.0/::(all interfaces)",
257
259
  ...(config.bindHostSource ? { bindHostSource: config.bindHostSource } : {}),
258
260
  ...(config.bindHostSource === "HOST" ? { note: "bind failed for a host inherited from the HOST env var — set BIND_HOST explicitly (e.g. BIND_HOST=127.0.0.1)." } : {}),
259
- error: e instanceof Error ? e.message : String(e),
261
+ error: seatText("operator-log-text", e instanceof Error ? e.message : String(e)),
260
262
  });
261
263
  throw e;
262
264
  }
@@ -266,7 +268,7 @@ export async function runStage10(ctx) {
266
268
  }
267
269
  server.on("error", (e) => {
268
270
  logger.error("server_error", {
269
- error: e.message,
271
+ error: seatText("operator-log-text", e.message),
270
272
  ...("code" in e ? { code: String(e.code) } : {}),
271
273
  });
272
274
  });
@@ -323,7 +325,7 @@ export async function runStage10(ctx) {
323
325
  void workflowNotifyGate
324
326
  .recover(workflowRecoverOpts)
325
327
  .then((tally) => logger.info("workflow_notify_recovered", tally))
326
- .catch((err) => logger.warn("workflow_notify_recover_failed", { err: String(err) }))
328
+ .catch((err) => logger.warn("workflow_notify_recover_failed", { err: seatText("operator-log-text", String(err)) }))
327
329
  .finally(() => resolveFleetRecovery());
328
330
  }
329
331
  else {