@sema-agent/server 7.135.0 → 7.137.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 (342) hide show
  1. package/MIGRATION.md +237 -2
  2. package/USAGE.md +146 -41
  3. package/deploy/sema-up/README.md +15 -1
  4. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  5. package/deploy/sema-up/chart/templates/sandbox-rbac.yaml +7 -1
  6. package/deploy/sema-up/chart/values.yaml +1 -1
  7. package/deploy/sema-up/stack/sema-stack-cluster.yaml +7 -1
  8. package/dist/approval-card.d.ts +60 -4
  9. package/dist/approval-card.js +18 -1
  10. package/dist/approval-content-kind.d.ts +7 -0
  11. package/dist/approval-content-kind.js +8 -1
  12. package/dist/approval-gate-currency.d.ts +48 -6
  13. package/dist/approval-gate-currency.js +16 -9
  14. package/dist/approval-hmac.d.ts +13 -1
  15. package/dist/approval-hmac.js +1 -1
  16. package/dist/approval.js +3 -3
  17. package/dist/auth-bridge.d.ts +34 -5
  18. package/dist/auth-bridge.js +22 -5
  19. package/dist/boot/budget-tracing.d.ts +1 -2
  20. package/dist/boot/budget-tracing.js +2 -2
  21. package/dist/boot/execution-env.d.ts +24 -1
  22. package/dist/boot/execution-env.js +69 -6
  23. package/dist/boot/org-memory.js +1 -1
  24. package/dist/boot/reapers.d.ts +3 -0
  25. package/dist/boot/reapers.js +15 -1
  26. package/dist/boot/resolve-spec.d.ts +4 -0
  27. package/dist/boot/resolve-spec.js +24 -22
  28. package/dist/boot/runner-deps.js +4 -2
  29. package/dist/boot/stage-03-store-backend.d.ts +1 -1
  30. package/dist/boot/stage-04-stores.d.ts +2 -2
  31. package/dist/boot/stage-05-execution-env.d.ts +4 -2
  32. package/dist/boot/stage-05-execution-env.js +11 -2
  33. package/dist/boot/stage-06-runners.d.ts +4 -2
  34. package/dist/boot/stage-06-runners.js +5 -1
  35. package/dist/boot/stage-07-capability-layer.d.ts +5 -2
  36. package/dist/boot/stage-07-capability-layer.js +1 -1
  37. package/dist/boot/stage-08-reapers.d.ts +5 -2
  38. package/dist/boot/stage-08-reapers.js +2 -1
  39. package/dist/boot/stage-09-leader.d.ts +5 -2
  40. package/dist/boot/stage-10-http-server.d.ts +5 -2
  41. package/dist/boot/stage-10-http-server.js +3 -2
  42. package/dist/boot/stores.d.ts +1 -1
  43. package/dist/boot/stores.js +2 -3
  44. package/dist/boot/web-admin.js +10 -17
  45. package/dist/brain.js +12 -3
  46. package/dist/broker/broker.d.ts +89 -0
  47. package/dist/broker/broker.js +287 -0
  48. package/dist/broker/constants.d.ts +39 -0
  49. package/dist/broker/constants.js +15 -0
  50. package/dist/broker/http1.d.ts +111 -0
  51. package/dist/broker/http1.js +256 -0
  52. package/dist/broker/lease-book.d.ts +87 -0
  53. package/dist/broker/lease-book.js +142 -0
  54. package/dist/broker/lease-file.d.ts +60 -0
  55. package/dist/broker/lease-file.js +127 -0
  56. package/dist/broker/main.d.ts +2 -0
  57. package/dist/broker/main.js +20 -0
  58. package/dist/budget.d.ts +3 -3
  59. package/dist/budget.js +4 -0
  60. package/dist/capabilities/composite-members.d.ts +2 -1
  61. package/dist/capabilities/composite-members.js +2 -1
  62. package/dist/capabilities/engine-capabilities.js +1 -0
  63. package/dist/capabilities/mcp-probe.d.ts +5 -4
  64. package/dist/capabilities/scenarios.d.ts +23 -8
  65. package/dist/capabilities/scenarios.js +13 -8
  66. package/dist/capabilities/skills.d.ts +28 -5
  67. package/dist/capabilities/skills.js +8 -0
  68. package/dist/capability-facts.d.ts +3 -7
  69. package/dist/capability-facts.js +3 -5
  70. package/dist/center-credential-renewer.js +5 -1
  71. package/dist/center-credential.d.ts +18 -4
  72. package/dist/center-credential.js +18 -3
  73. package/dist/checkpoint-ctx-seal-m28.d.ts +3 -10
  74. package/dist/checkpoint-ctx-seal-m28.js +1 -1
  75. package/dist/checkpoint-identity.d.ts +3 -3
  76. package/dist/config-catalog.js +21 -16
  77. package/dist/config-d-migration.js +1 -1
  78. package/dist/config-invariants.d.ts +1 -1
  79. package/dist/config-invariants.js +8 -0
  80. package/dist/config-lkg.d.ts +0 -38
  81. package/dist/config-lkg.js +1 -83
  82. package/dist/config-types.d.ts +21 -4
  83. package/dist/config.d.ts +1 -1
  84. package/dist/config.js +60 -16
  85. package/dist/deployment-governance.d.ts +2 -2
  86. package/dist/deployment-governance.js +7 -9
  87. package/dist/deployment-shape.d.ts +1 -1
  88. package/dist/device-ws-protocol.d.ts +1 -0
  89. package/dist/device-ws-protocol.js +2 -1
  90. package/dist/elicitation.d.ts +8 -7
  91. package/dist/elicitation.js +9 -8
  92. package/dist/file-history-disclosure.d.ts +8 -4
  93. package/dist/file-history-disclosure.js +24 -6
  94. package/dist/fleet-client.d.ts +32 -1
  95. package/dist/fleet-client.js +24 -4
  96. package/dist/fleet-lease.d.ts +7 -3
  97. package/dist/fleet-lease.js +31 -23
  98. package/dist/hooks/classic-stations.d.ts +11 -54
  99. package/dist/hooks/hook-llm.js +14 -8
  100. package/dist/hooks/hook-runner.d.ts +4 -4
  101. package/dist/hooks/hook-runner.js +2 -2
  102. package/dist/http/admission.js +10 -7
  103. package/dist/http/approval-sweeps.js +4 -3
  104. package/dist/http/caller-trust.d.ts +2 -1
  105. package/dist/http/caller-trust.js +1 -3
  106. package/dist/http/checkpoint-ctx.d.ts +76 -16
  107. package/dist/http/checkpoint-ctx.js +45 -1
  108. package/dist/http/dispatch.js +24 -19
  109. package/dist/http/durable-run-leg.d.ts +5 -1
  110. package/dist/http/durable-run-leg.js +1 -1
  111. package/dist/http/health-self-report.d.ts +2 -2
  112. package/dist/http/mcp-remote-text.d.ts +5 -0
  113. package/dist/http/mcp-remote-text.js +7 -0
  114. package/dist/http/principal-gate.d.ts +15 -10
  115. package/dist/http/principal-gate.js +48 -9
  116. package/dist/http/resume-ctx-read.d.ts +2 -16
  117. package/dist/http/resume-ctx-read.js +2 -3
  118. package/dist/http/resume-legs.d.ts +2 -20
  119. package/dist/http/resume-legs.js +52 -38
  120. package/dist/http/route-ctx.d.ts +8 -2
  121. package/dist/http/routes/approvals-assistant.d.ts +0 -2
  122. package/dist/http/routes/approvals-assistant.js +65 -16
  123. package/dist/http/routes/capabilities.js +11 -1
  124. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  125. package/dist/http/routes/mcp-reconnect.js +5 -7
  126. package/dist/http/routes/runs.js +4 -3
  127. package/dist/http/routes/session-sync.js +70 -12
  128. package/dist/http/routes/sessions.js +20 -15
  129. package/dist/http/routes/tasks.js +8 -6
  130. package/dist/http/server.d.ts +4 -0
  131. package/dist/http/stored-body-replay.d.ts +3 -3
  132. package/dist/http/stored-body-replay.js +6 -1
  133. package/dist/http/submit-ctx.js +1 -1
  134. package/dist/http/wire-types.d.ts +57 -30
  135. package/dist/identity-source.d.ts +65 -0
  136. package/dist/identity-source.js +45 -0
  137. package/dist/index.d.ts +1 -0
  138. package/dist/index.js +1 -0
  139. package/dist/memory-store-refusal.d.ts +3 -3
  140. package/dist/model-entry-refusal.d.ts +2 -0
  141. package/dist/model-entry-refusal.js +11 -0
  142. package/dist/model-route-gap.d.ts +49 -4
  143. package/dist/model-route-gap.js +34 -1
  144. package/dist/model-select.d.ts +6 -17
  145. package/dist/model-select.js +0 -3
  146. package/dist/namespaced-rule-name.d.ts +1 -1
  147. package/dist/object-store-buckets.d.ts +13 -0
  148. package/dist/object-store-buckets.js +3 -0
  149. package/dist/observability/fail-open.d.ts +19 -7
  150. package/dist/observability/fail-open.js +19 -7
  151. package/dist/observability/metrics.js +2 -2
  152. package/dist/observability/principal-context.d.ts +4 -1
  153. package/dist/observability/principal-context.js +6 -1
  154. package/dist/observability/run-terminal.js +1 -0
  155. package/dist/operator-ask.d.ts +2 -2
  156. package/dist/org-delivery-gate.js +1 -1
  157. package/dist/org-memory-admission.d.ts +2 -2
  158. package/dist/org-memory-admission.js +39 -2
  159. package/dist/parked-decide.d.ts +4 -3
  160. package/dist/parked-decide.js +29 -9
  161. package/dist/peer-directory.d.ts +2 -1
  162. package/dist/peer-directory.js +7 -5
  163. package/dist/permission-rule-list.d.ts +2 -2
  164. package/dist/plugins/approval-ask-store-sql.d.ts +8 -0
  165. package/dist/plugins/approval-ask-store-sql.js +3 -0
  166. package/dist/plugins/blob-backend.js +2 -1
  167. package/dist/plugins/checkpoint-index-columns.d.ts +50 -1
  168. package/dist/plugins/checkpoint-index-columns.js +28 -0
  169. package/dist/plugins/checkpoint-store-sql.d.ts +46 -12
  170. package/dist/plugins/checkpoint-store-sql.js +64 -35
  171. package/dist/plugins/file-history-store-sql.d.ts +6 -0
  172. package/dist/plugins/file-history-store-sql.js +37 -37
  173. package/dist/plugins/file-run-store.js +8 -2
  174. package/dist/plugins/k8s-exec-protocol.d.ts +69 -13
  175. package/dist/plugins/k8s-exec-protocol.js +116 -28
  176. package/dist/plugins/k8s-pod-delete-failure.d.ts +25 -0
  177. package/dist/plugins/k8s-pod-delete-failure.js +17 -0
  178. package/dist/plugins/k8s-pod-reaper.d.ts +112 -0
  179. package/dist/plugins/k8s-pod-reaper.js +122 -0
  180. package/dist/plugins/local-checkpoint-store.d.ts +3 -6
  181. package/dist/plugins/local-checkpoint-store.js +7 -6
  182. package/dist/plugins/memory-run-store.js +2 -0
  183. package/dist/plugins/one-time-migrations.d.ts +49 -37
  184. package/dist/plugins/one-time-migrations.js +87 -128
  185. package/dist/plugins/permission-rule-store-file.js +2 -2
  186. package/dist/plugins/permission-rule-store-sql.d.ts +17 -17
  187. package/dist/plugins/permission-rule-store-sql.js +16 -17
  188. package/dist/plugins/pg-pool.js +4 -0
  189. package/dist/plugins/pg-session-storage.js +2 -2
  190. package/dist/plugins/remote-env-adb.d.ts +3 -0
  191. package/dist/plugins/remote-env-adb.js +1 -0
  192. package/dist/plugins/remote-env-device.d.ts +3 -0
  193. package/dist/plugins/remote-env-device.js +4 -0
  194. package/dist/plugins/remote-env-e2b.d.ts +3 -0
  195. package/dist/plugins/remote-env-e2b.js +1 -0
  196. package/dist/plugins/remote-env-file-error.d.ts +8 -1
  197. package/dist/plugins/remote-env-file-error.js +7 -1
  198. package/dist/plugins/remote-env-host.d.ts +7 -1
  199. package/dist/plugins/remote-env-host.js +7 -1
  200. package/dist/plugins/remote-env-k8s.d.ts +154 -14
  201. package/dist/plugins/remote-env-k8s.js +300 -21
  202. package/dist/plugins/remote-env-local-docker.d.ts +3 -0
  203. package/dist/plugins/remote-env-local-docker.js +1 -0
  204. package/dist/plugins/remote-env-ssh.d.ts +3 -0
  205. package/dist/plugins/remote-env-ssh.js +1 -0
  206. package/dist/plugins/run-store-sql.js +10 -4
  207. package/dist/plugins/s3-answer.d.ts +15 -0
  208. package/dist/plugins/s3-answer.js +5 -0
  209. package/dist/plugins/session-ownership.d.ts +17 -3
  210. package/dist/plugins/session-ownership.js +19 -5
  211. package/dist/plugins/snapshot-bucket-presence.d.ts +39 -4
  212. package/dist/plugins/snapshot-bucket-presence.js +35 -7
  213. package/dist/plugins/sql-errors.d.ts +60 -0
  214. package/dist/plugins/sql-errors.js +64 -1
  215. package/dist/plugins/store-contracts.d.ts +10 -1
  216. package/dist/plugins/store-fault.d.ts +4 -0
  217. package/dist/plugins/store-fault.js +10 -0
  218. package/dist/plugins/tidb-pool.js +8 -1
  219. package/dist/plugins/tidb-session-store.js +2 -2
  220. package/dist/plugins/web-search.d.ts +1 -1
  221. package/dist/plugins/web-search.js +2 -2
  222. package/dist/request-declaration-refusal.d.ts +94 -0
  223. package/dist/request-declaration-refusal.js +78 -0
  224. package/dist/request-image-urls.d.ts +6 -0
  225. package/dist/request-image-urls.js +27 -0
  226. package/dist/request-key-closure.d.ts +5 -0
  227. package/dist/request-key-closure.js +5 -2
  228. package/dist/request-value-closure.d.ts +31 -2
  229. package/dist/request-value-closure.js +7 -1
  230. package/dist/rule-entry-list.d.ts +3 -2
  231. package/dist/rule-entry-list.js +2 -2
  232. package/dist/rules-consent.js +7 -4
  233. package/dist/run-local.d.ts +2 -2
  234. package/dist/runs.js +2 -1
  235. package/dist/runtime-caps-resolver.js +1 -1
  236. package/dist/runtime-governance.d.ts +5 -5
  237. package/dist/sandbox-git-lease.d.ts +49 -0
  238. package/dist/sandbox-git-lease.js +60 -0
  239. package/dist/sandbox-git-plane.d.ts +84 -0
  240. package/dist/sandbox-git-plane.js +105 -0
  241. package/dist/sandbox-pkg-source.d.ts +28 -1
  242. package/dist/sandbox-pkg-source.js +1 -2
  243. package/dist/sealed-key.d.ts +19 -0
  244. package/dist/sealed-key.js +47 -4
  245. package/dist/security.d.ts +16 -4
  246. package/dist/security.js +8 -3
  247. package/dist/server-secret-env.d.ts +6 -0
  248. package/dist/server-secret-env.js +14 -0
  249. package/dist/session-error-wire.d.ts +14 -6
  250. package/dist/session-error-wire.js +2 -1
  251. package/dist/session-incarnation.d.ts +16 -5
  252. package/dist/session-incarnation.js +7 -4
  253. package/dist/session-policy-wire.d.ts +1 -1
  254. package/dist/session-policy-wire.js +2 -2
  255. package/dist/session-row.d.ts +3 -17
  256. package/dist/session-row.js +4 -0
  257. package/dist/session-sync.d.ts +15 -3
  258. package/dist/session-sync.js +5 -2
  259. package/dist/spec-fields.d.ts +43 -13
  260. package/dist/spec-fields.js +33 -12
  261. package/dist/stored-request-prompt-profile-m30.d.ts +49 -0
  262. package/dist/stored-request-prompt-profile-m30.js +25 -0
  263. package/dist/task-a2a.d.ts +52 -81
  264. package/dist/task-a2a.js +219 -89
  265. package/dist/task-mcp.d.ts +7 -15
  266. package/dist/task-mcp.js +16 -51
  267. package/dist/task-settings.d.ts +2 -2
  268. package/dist/tool-approval.d.ts +35 -12
  269. package/dist/tool-approval.js +59 -39
  270. package/dist/tool-rule-names.d.ts +5 -0
  271. package/dist/trace/core-keyset-guard.d.ts +5 -5
  272. package/dist/trace/engine-notice-wire.d.ts +1 -1
  273. package/dist/trace/engine-notice-wire.js +2 -0
  274. package/dist/trace/exit-seat.js +37 -13
  275. package/dist/trace/ledger-sink.d.ts +4 -5
  276. package/dist/trace/ledger-sink.js +3 -7
  277. package/dist/trace/project.d.ts +37 -3
  278. package/dist/trace/project.js +20 -6
  279. package/dist/trace/redact.d.ts +40 -12
  280. package/dist/trace/redact.js +332 -128
  281. package/dist/trace/self-minted-wire.d.ts +641 -0
  282. package/dist/trace/self-minted-wire.js +201 -0
  283. package/dist/trace/wire-projection-faces.d.ts +5 -3
  284. package/dist/trace/wire-projection-faces.js +7 -3
  285. package/dist/url-credential-refusal.d.ts +52 -0
  286. package/dist/url-credential-refusal.js +14 -0
  287. package/dist/url-refusal.d.ts +13 -4
  288. package/dist/url-refusal.js +8 -2
  289. package/dist/web-admin-client/apply-effective.js +0 -1
  290. package/dist/web-admin-client/center-request.d.ts +20 -2
  291. package/dist/web-admin-client/center-request.js +40 -5
  292. package/dist/web-admin-client/http-client.js +6 -6
  293. package/dist/web-admin-client/types.d.ts +5 -5
  294. package/dist/workspace-space.d.ts +27 -0
  295. package/dist/workspace-space.js +26 -0
  296. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +11 -5
  297. package/package.json +4 -3
  298. package/scripts/drain-check-local.mjs +2 -1
  299. package/scripts/drain-check.mysql.sql +3 -1
  300. package/scripts/drain-check.pg.sql +3 -1
  301. package/skills/schedule.md +1 -1
  302. package/wire-changes/server@7.104.0.json +134 -0
  303. package/wire-changes/server@7.105.0.json +53 -0
  304. package/wire-changes/server@7.106.0.json +475 -0
  305. package/wire-changes/server@7.107.0.json +64 -0
  306. package/wire-changes/server@7.108.0.json +153 -0
  307. package/wire-changes/server@7.109.0.json +46 -0
  308. package/wire-changes/server@7.110.0.json +90 -0
  309. package/wire-changes/server@7.111.0.json +86 -0
  310. package/wire-changes/server@7.112.0.json +60 -0
  311. package/wire-changes/server@7.113.0.json +26 -0
  312. package/wire-changes/server@7.114.0.json +26 -0
  313. package/wire-changes/server@7.115.0.json +97 -0
  314. package/wire-changes/server@7.116.0.json +218 -0
  315. package/wire-changes/server@7.116.1.json +26 -0
  316. package/wire-changes/server@7.117.0.json +65 -0
  317. package/wire-changes/server@7.118.0.json +129 -0
  318. package/wire-changes/server@7.119.0.json +65 -0
  319. package/wire-changes/server@7.120.0.json +89 -0
  320. package/wire-changes/server@7.121.0.json +219 -0
  321. package/wire-changes/server@7.122.0.json +54 -0
  322. package/wire-changes/server@7.123.0.json +26 -0
  323. package/wire-changes/server@7.124.0.json +336 -0
  324. package/wire-changes/server@7.124.1.json +26 -0
  325. package/wire-changes/server@7.125.0.json +111 -0
  326. package/wire-changes/server@7.126.0.json +285 -0
  327. package/wire-changes/server@7.127.0.json +77 -0
  328. package/wire-changes/server@7.127.1.json +26 -0
  329. package/wire-changes/server@7.127.2.json +53 -0
  330. package/wire-changes/server@7.128.0.json +26 -0
  331. package/wire-changes/server@7.129.0.json +106 -0
  332. package/wire-changes/server@7.129.1.json +26 -0
  333. package/wire-changes/server@7.130.0.json +26 -0
  334. package/wire-changes/server@7.131.0.json +118 -0
  335. package/wire-changes/server@7.132.0.json +226 -0
  336. package/wire-changes/server@7.133.0.json +1155 -0
  337. package/wire-changes/server@7.134.0.json +107 -0
  338. package/wire-changes/server@7.135.0.json +174 -0
  339. package/wire-changes/server@7.136.0.json +448 -0
  340. package/wire-changes/server@7.137.0.json +825 -0
  341. package/dist/url-credential.d.ts +0 -52
  342. package/dist/url-credential.js +0 -49
@@ -7,6 +7,8 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
7
7
  fenceSessionOwner: (sid: string, owner: string | null) => void;
8
8
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
9
9
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
10
+ sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
11
+ sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
10
12
  perSessionCwd: Map<string, string>;
11
13
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
12
14
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -30,7 +32,7 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
30
32
  fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
31
33
  fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
32
34
  fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
33
- fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
35
+ fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
34
36
  memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
35
37
  memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
36
38
  memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
@@ -74,7 +76,7 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
74
76
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
75
77
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
76
78
  sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
77
- sessionStore: import("@sema-agent/core").SessionStore;
79
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
78
80
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
79
81
  storePosture: import("../store-posture.js").StorePosture;
80
82
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -6,18 +6,27 @@ import { headReadOf } from "../session-incarnation.js";
6
6
  import * as facts from "../capability-facts.js";
7
7
  import { sessionStoreLabelOf } from "../store-posture.js";
8
8
  import { runStore } from "./late-binds.js";
9
+ import { SANDBOX_GIT_PLANE_OFF_TEXT } from "../sandbox-git-plane.js";
9
10
  export async function runStage05(ctx) {
10
11
  const { backend, config, instanceId, logger, metrics, sessionStore, taskAttachmentStore } = ctx;
11
12
  const deviceLane = config.remoteExec?.provider === "device" ? createDeviceLane({ config, logger, metrics, backend, replicaId: instanceId }) : undefined;
12
13
  const headOf = headReadOf(sessionStore);
13
14
  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 } : {}), ...(headOf !== undefined ? { headOf } : {}) });
15
+ 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 } : {}) });
15
16
  assertDeviceLaneWired(config.remoteExec?.provider === "device", deviceLane, executionEnvFactory !== undefined);
16
17
  assertWorkspaceSpaceReadable(facts.workspaceSpace(config), { headOf, spaceCommits }, facts.workspaceCache(config), sessionStoreLabelOf(config.sessionBackend, backend?.kind));
18
+ if (sandboxSecretSeatGate !== undefined)
19
+ await sandboxSecretSeatGate();
20
+ const sandboxGitPlane = await readSandboxGitPlane();
21
+ if (sandboxGitPlane.state === "on")
22
+ logger.info("credential_plane_sandbox_git", { state: "on", origins: sandboxGitPlane.origins });
23
+ else if (sandboxGitPlane.reason !== "single_user" && sandboxGitPlane.reason !== "lane_without_boundary") {
24
+ logger.info("credential_plane_sandbox_git", { state: "off", reason: sandboxGitPlane.reason, why: SANDBOX_GIT_PLANE_OFF_TEXT[sandboxGitPlane.reason] });
25
+ }
17
26
  const deploymentMods = createDeploymentMods({ metrics, ...(config.toolTrace ? { traceLogger: logger } : {}), brandIdentity: isBrandedDeployment(config) });
18
27
  if (config.toolTrace)
19
28
  logger.info("tool_trace_enabled", {});
20
29
  await assertDeploymentModsAdmitted(deploymentMods);
21
- return { ...ctx, deploymentMods, deviceLane, dropSessionScoped, executionEnvFactory, fenceSessionOwner, lspManager, spaceReclaimer, perSessionCwd, perTaskImage, sendUserFileTaskEnvs, sessionEnvSelection, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, worktreeReap };
30
+ return { ...ctx, deploymentMods, deviceLane, dropSessionScoped, executionEnvFactory, fenceSessionOwner, lspManager, spaceReclaimer, sandboxPodReaper, sandboxGitPlane, perSessionCwd, perTaskImage, sendUserFileTaskEnvs, sessionEnvSelection, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, worktreeReap };
22
31
  }
23
32
  //# sourceMappingURL=stage-05-execution-env.js.map
@@ -70,6 +70,8 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
70
70
  fenceSessionOwner: (sid: string, owner: string | null) => void;
71
71
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
72
72
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
73
+ sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
74
+ sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
73
75
  perSessionCwd: Map<string, string>;
74
76
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
75
77
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -93,7 +95,7 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
93
95
  fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
94
96
  fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
95
97
  fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
96
- fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
98
+ fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
97
99
  memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
98
100
  memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
99
101
  memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
@@ -137,7 +139,7 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
137
139
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
138
140
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
139
141
  sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
140
- sessionStore: import("@sema-agent/core").SessionStore;
142
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
141
143
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
142
144
  storePosture: import("../store-posture.js").StorePosture;
143
145
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -18,6 +18,7 @@ import { assertApprovalAskRuleMaterialOnBackend } from "./stores.js";
18
18
  import { createParkCommitWatch } from "../plugins/park-commit-watch.js";
19
19
  import { CHECKPOINT_CTX_SEALING_REQUIRED } from "../http/checkpoint-ctx.js";
20
20
  import { sealCheckpointCtxCredentialsM28 } from "../checkpoint-ctx-seal-m28.js";
21
+ import { retirePromptProfileM30 } from "../stored-request-prompt-profile-m30.js";
21
22
  import { createRuntimeCaps } from "./runtime-caps.js";
22
23
  import { createEngineNoticeForwarder, createRunnerDeps, createSharedRunnerDeps } from "./runner-deps.js";
23
24
  import { defaultEngineNoticeRouter } from "../trace/engine-notice-wire.js";
@@ -37,8 +38,11 @@ export async function runStage06(ctx) {
37
38
  if (checkpointStore !== undefined) {
38
39
  if (checkpointCtxSealing === undefined)
39
40
  throw new Error(CHECKPOINT_CTX_SEALING_REQUIRED);
40
- const m28 = await sealCheckpointCtxCredentialsM28(checkpointStore, checkpointCtxSealing, { today: new Date().toISOString().slice(0, 10) });
41
+ const today = new Date().toISOString().slice(0, 10);
42
+ const m28 = await sealCheckpointCtxCredentialsM28(checkpointStore, checkpointCtxSealing, { today });
41
43
  logger.info("checkpoint_ctx_credentials_sealed", { ...m28, note: "one-time migration M28: plaintext request credentials in suspended tasks' resume contexts sealed in place" });
44
+ const m30 = await retirePromptProfileM30(checkpointStore, { today });
45
+ logger.info("checkpoint_ctx_prompt_profile_rewritten", { ...m30, note: "one-time migration M30: the retired request key promptProfile in suspended tasks' stored requests rewritten in place (classic becomes promptLean: false); a stored request this did not reach is refused on resume" });
42
46
  }
43
47
  const { elicitation, question, toolApproval, durableEnabled, streamApprovalGate, approvalAskAudit, approvalExemptionStore, sendUserFileEmitter, sendFileLedger, sendUserFileToolSpec } = createLiveCoordinators({
44
48
  config, logger, backend, sendUserFileTaskEnvs, ruleConsent, parkCommits,
@@ -9,6 +9,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
9
9
  }) => Promise<import("../security.js").AuthContext>;
10
10
  imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
11
11
  imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
12
+ loadedSkills: import("../capabilities/skills.js").LoadedSkill[];
12
13
  parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
13
14
  parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
14
15
  rateLimiter: RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
@@ -85,6 +86,8 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
85
86
  fenceSessionOwner: (sid: string, owner: string | null) => void;
86
87
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
87
88
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
89
+ sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
90
+ sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
88
91
  perSessionCwd: Map<string, string>;
89
92
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
90
93
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -108,7 +111,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
108
111
  fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
109
112
  fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
110
113
  fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
111
- fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
114
+ fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
112
115
  memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
113
116
  memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
114
117
  memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
@@ -152,7 +155,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
152
155
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
153
156
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
154
157
  sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
155
- sessionStore: import("@sema-agent/core").SessionStore;
158
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
156
159
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
157
160
  storePosture: import("../store-posture.js").StorePosture;
158
161
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -202,6 +202,6 @@ export async function runStage07(ctx) {
202
202
  if (defaultScenarioRefusal !== undefined)
203
203
  throw new Error(defaultScenarioRefusal);
204
204
  logger.info("capabilities", { skills: skills.length, scenarios: Object.keys(scenarios), repoTools: Boolean(repoClient) });
205
- return { ...ctx, approvalExemptionStore, approvalNonceStore, authorize, imageBakes, imageIndex, parkedReviveInheritedGate, parkedReviveSurface, rateLimiter, resumeAnchorStore, runStore, scenarioDetails, scenarios, selectEnvTool, taskLimitCaps, taskTimeoutSec, userInputLedger, userInputLedgerStore, webSearchProvider: webSearchCfg?.provider };
205
+ return { ...ctx, approvalExemptionStore, approvalNonceStore, authorize, imageBakes, imageIndex, loadedSkills: skills, parkedReviveInheritedGate, parkedReviveSurface, rateLimiter, resumeAnchorStore, runStore, scenarioDetails, scenarios, selectEnvTool, taskLimitCaps, taskTimeoutSec, userInputLedger, userInputLedgerStore, webSearchProvider: webSearchCfg?.provider };
206
206
  }
207
207
  //# sourceMappingURL=stage-07-capability-layer.js.map
@@ -22,6 +22,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
22
22
  }) => Promise<import("../security.js").AuthContext>;
23
23
  imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
24
24
  imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
25
+ loadedSkills: import("../index.js").LoadedSkill[];
25
26
  parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
26
27
  parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
27
28
  rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
@@ -98,6 +99,8 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
98
99
  fenceSessionOwner: (sid: string, owner: string | null) => void;
99
100
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
100
101
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
102
+ sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
103
+ sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
101
104
  perSessionCwd: Map<string, string>;
102
105
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
103
106
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -121,7 +124,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
121
124
  fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
122
125
  fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
123
126
  fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
124
- fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
127
+ fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
125
128
  memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
126
129
  memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
127
130
  memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
@@ -165,7 +168,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
165
168
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
166
169
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
167
170
  sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
168
- sessionStore: import("@sema-agent/core").SessionStore;
171
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
169
172
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
170
173
  storePosture: import("../store-posture.js").StorePosture;
171
174
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -5,12 +5,13 @@ import { startRetentionLane, RETENTION_LEASE_TTL_FACTOR } from "./retention-lane
5
5
  import { createLimitSync } from "./limit-sync.js";
6
6
  import { runDenySweep } from "./late-binds.js";
7
7
  export function runStage08(ctx) {
8
- const { approvalAskAudit, approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, spaceReclaimer, handslessRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, rosterStore, runStore, runner, sqlWorkflowRunStore, subRunner, taskAttachmentStore, toolApproval, toolResultStore, userInputLedger, workflowJournalStore, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
8
+ const { approvalAskAudit, approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, spaceReclaimer, sandboxPodReaper, handslessRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, rosterStore, runStore, runner, sqlWorkflowRunStore, subRunner, taskAttachmentStore, toolApproval, toolResultStore, userInputLedger, workflowJournalStore, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
9
9
  const reaper = startReapers({
10
10
  config, logger, metrics, localRoot, backend, subRunner, runStore, checkpointStore, parkCommits,
11
11
  rateLimiter, costQuota, toolResultStore, fileHistoryErasure, taskAttachmentStore, imageBakes, worktreeReap,
12
12
  workflowNotifyGate, workflowRecoverOpts, workflowJournalStore, sqlWorkflowRunStore, workflowNotifyJournal, rosterStore,
13
13
  backgroundAgentStore, mailboxStore, toolApproval, permissionRuleStores, approvalNonceStore, userInputLedger, approvalAskAudit,
14
+ ...(sandboxPodReaper !== undefined ? { sandboxPodReaper } : {}),
14
15
  getRunDenySweep: () => runDenySweep,
15
16
  });
16
17
  const ttlMs = config.retentionSweep.intervalSec * 1000 * RETENTION_LEASE_TTL_FACTOR;
@@ -46,6 +46,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
46
46
  }) => Promise<import("../security.js").AuthContext>;
47
47
  imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
48
48
  imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
49
+ loadedSkills: import("../index.js").LoadedSkill[];
49
50
  parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
50
51
  parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
51
52
  rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
@@ -122,6 +123,8 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
122
123
  fenceSessionOwner: (sid: string, owner: string | null) => void;
123
124
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
124
125
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
126
+ sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
127
+ sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
125
128
  perSessionCwd: Map<string, string>;
126
129
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
127
130
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -145,7 +148,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
145
148
  fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
146
149
  fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
147
150
  fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
148
- fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
151
+ fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
149
152
  memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
150
153
  memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
151
154
  memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
@@ -189,7 +192,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
189
192
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
190
193
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
191
194
  sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
192
- sessionStore: import("@sema-agent/core").SessionStore;
195
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
193
196
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
194
197
  storePosture: import("../store-posture.js").StorePosture;
195
198
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -45,6 +45,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
45
45
  }) => Promise<import("../security.js").AuthContext>;
46
46
  imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
47
47
  imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
48
+ loadedSkills: import("../index.js").LoadedSkill[];
48
49
  parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
49
50
  parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
50
51
  rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
@@ -121,6 +122,8 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
121
122
  fenceSessionOwner: (sid: string, owner: string | null) => void;
122
123
  lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
123
124
  spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
125
+ sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
126
+ sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
124
127
  perSessionCwd: Map<string, string>;
125
128
  perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
126
129
  sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
@@ -144,7 +147,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
144
147
  fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
145
148
  fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
146
149
  fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
147
- fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
150
+ fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
148
151
  memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
149
152
  memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
150
153
  memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
@@ -188,7 +191,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
188
191
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
189
192
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
190
193
  sessionCaptureRecords: import("../plugins/store-backend.js").SessionCaptureRecordSource | undefined;
191
- sessionStore: import("@sema-agent/core").SessionStore;
194
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
192
195
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
193
196
  storePosture: import("../store-posture.js").StorePosture;
194
197
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -29,7 +29,7 @@ import { bindServerLateSeats } from "./late-binds.js";
29
29
  import { serviceVersion } from "../service-version.js";
30
30
  import { buildDisplaySafeUrl } from "../trace/redact.js";
31
31
  export async function runStage10(ctx) {
32
- const { approvalAskAudit, approvalExemptionStore, approvalNonceStore, authorize, backend, backgroundAgentStore, brain, breakerState, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, parkCommits, config, webAdmin, consolidationValve, costQuota, deviceLane, drainState, durableEnabled, elicitation, fenceSessionOwner, fileHistoryStore, fleetBus, fleetLease, fleetUsage, governanceSeams, handslessRunner, hookAgent, hookLlm, hookWakeBus, imageBakes, imageIndex, instanceId, instrumentDegenerate, leaderEndpoint, localRoot, logger, lspManager, mcpRevocations, memoryBundleFaces, memoryComplianceFaces, memoryConsolidationFaces, memoryEngine, memoryExportBackend, memoryOptOutGrantStore, memoryOriginFaces, memoryPosture, memorySyncCursors, memorySyncRunner, metrics, modelUsageTracker, orgMemoryAdmission, otelExporter, outcomeSink, ownerAware, parkedReviveInheritedGate, parkedReviveSurface, perSessionCwd, perTaskImage, planCacheProbe, pricing, principalCaps, promptManifestTracker, purgeSession, question, rateLimiter, reaper, webAdminJwtVerifier, resumeAnchorStore, retentionLaneStarted, retentionLaneStore, ruleConsent, runStore, runner, runnerDeps, runtimeCapsPeekResolver, scenarioDetails, scenarios, selectEnvTool, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionAudit, sessionEnvSelection, sessionMemoryStatusFace, sessionPolicyStore, sessionTitler, sessionWatchRegistry, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, sharedMemoryStore, sideQueryAccounting, sqlEngine, sqlWorkflowRunStore, staticWiring, storePosture, subRunner, subagentSteerRegistry, taskAttachmentStore, taskLimitCaps, taskTimeoutSec, toolApproval, toolResultStore, usageWindowStore, userInputLedger, webSearchProvider, workflowAgentRegistry, workflowAgentSessionIndex, workflowParkDecisions, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable, orgDeliveryGate } = ctx;
32
+ const { approvalAskAudit, approvalExemptionStore, approvalNonceStore, authorize, backend, backgroundAgentStore, brain, breakerState, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, parkCommits, config, webAdmin, consolidationValve, costQuota, deviceLane, drainState, durableEnabled, elicitation, fenceSessionOwner, fileHistoryStore, fleetBus, fleetLease, fleetUsage, governanceSeams, handslessRunner, hookAgent, hookLlm, hookWakeBus, imageBakes, imageIndex, instanceId, instrumentDegenerate, leaderEndpoint, loadedSkills, localRoot, logger, lspManager, mcpRevocations, memoryBundleFaces, memoryComplianceFaces, memoryConsolidationFaces, memoryEngine, memoryExportBackend, memoryOptOutGrantStore, memoryOriginFaces, memoryPosture, memorySyncCursors, memorySyncRunner, metrics, modelUsageTracker, orgMemoryAdmission, otelExporter, outcomeSink, ownerAware, parkedReviveInheritedGate, parkedReviveSurface, perSessionCwd, perTaskImage, planCacheProbe, pricing, principalCaps, promptManifestTracker, purgeSession, question, rateLimiter, reaper, webAdminJwtVerifier, resumeAnchorStore, retentionLaneStarted, retentionLaneStore, ruleConsent, runStore, runner, runnerDeps, runtimeCapsPeekResolver, sandboxGitPlane, scenarioDetails, scenarios, selectEnvTool, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionAudit, sessionEnvSelection, sessionMemoryStatusFace, sessionPolicyStore, sessionTitler, sessionWatchRegistry, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, sharedMemoryStore, sideQueryAccounting, sqlEngine, sqlWorkflowRunStore, staticWiring, storePosture, subRunner, subagentSteerRegistry, taskAttachmentStore, taskLimitCaps, taskTimeoutSec, toolApproval, toolResultStore, usageWindowStore, userInputLedger, webSearchProvider, workflowAgentRegistry, workflowAgentSessionIndex, workflowParkDecisions, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable, orgDeliveryGate } = ctx;
33
33
  const stores = {
34
34
  runStore,
35
35
  resumeAnchorStore: resumeAnchorStore ? resumeAnchorStore : undefined,
@@ -168,6 +168,7 @@ export async function runStage10(ctx) {
168
168
  writeProtection: buildWriteProtectionPosture(config),
169
169
  webSearchProvider,
170
170
  sealedKeyPublic: webAdmin.sealedKeyPublic,
171
+ sandboxGitPlane,
171
172
  instanceId,
172
173
  capabilities: {
173
174
  version: serviceVersion(),
@@ -197,7 +198,7 @@ export async function runStage10(ctx) {
197
198
  sessionEventsMaxConnections: sessionWatchRegistry ? posIntEnv(process.env.SESSION_EVENTS_MAX_CONNS, 256, 100_000) : undefined,
198
199
  };
199
200
  const resolveSpec = createResolveSpec({
200
- config, logger, metrics, localRoot, scenarios, principalCaps, centerRuntimeCapsResolver,
201
+ config, logger, metrics, localRoot, scenarios, loadedSkills, principalCaps, centerRuntimeCapsResolver,
201
202
  getKeyResolver: () => webAdmin.getKeyResolver(),
202
203
  taskAttachmentStore, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner,
203
204
  hookLlm, hookAgent, fleetBus, hookWakeBus, resumeAnchorStore, ownerAware, taskLimitCaps, taskTimeoutSec,
@@ -37,7 +37,7 @@ export declare function openStores(ctx: OpenStoresCtx): Promise<{
37
37
  mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
38
38
  memoryExportBackend: MemoryBackend | undefined;
39
39
  memorySyncRunner: MemorySyncRunner | undefined;
40
- sessionStore: import("@sema-agent/core").SessionStore;
40
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
41
41
  breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
42
42
  usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
43
43
  memoryPosture: import("../memory-posture.js").MemoryPosture;
@@ -9,7 +9,7 @@ import { TiDBMemoryEngineBackend, ensureTiDBMemoryEngineSchema } from "../plugin
9
9
  import { PgMemoryHistoryStore, PgMemorySyncStore, ensurePgMemoryHistorySchema, ensurePgMemorySyncSchema } from "../plugins/memory-sync-store-pg.js";
10
10
  import { TiDBMemoryHistoryStore, TiDBMemorySyncStore, ensureTiDBMemoryHistorySchema, ensureTiDBMemorySyncSchema } from "../plugins/memory-sync-store-tidb.js";
11
11
  import { MinioBlobBackend } from "../plugins/blob-backend.js";
12
- import { ensureSnapshotBucket } from "../plugins/snapshot-bucket-presence.js";
12
+ import { ensureSnapshotBuckets } from "../plugins/snapshot-bucket-presence.js";
13
13
  import { PgBackgroundAgentStore, TiDBBackgroundAgentStore, ensurePgBackgroundAgentSchema, ensureTiDBBackgroundAgentSchema } from "../plugins/background-agent-store-sql.js";
14
14
  import { PgMailboxStore, TiDBMailboxStore, ensurePgMailboxSchema, ensureTiDBMailboxSchema } from "../plugins/mailbox-store-sql.js";
15
15
  import { createDropOnlyRecipientLifecycle } from "../plugins/mailbox-recipient-lifecycle.js";
@@ -58,8 +58,7 @@ export async function openStores(ctx) {
58
58
  let backend;
59
59
  let storeDegradedReason;
60
60
  const dsnConfigured = !!(config.tidb || config.pg);
61
- if (config.snapshotBlobStore)
62
- await ensureSnapshotBucket(config.snapshotBlobStore, config.storeLockWaitMs, logger);
61
+ await ensureSnapshotBuckets(config, logger);
63
62
  const wantDb = config.sessionBackend === "tidb" ||
64
63
  config.dbBackend === "local" ||
65
64
  (config.sessionBackend === "auto" && dsnConfigured);
@@ -12,7 +12,7 @@ import { applyCenterArtifact, centerSourceOnError, withPromptArtifactBackfill }
12
12
  import { centerScenarios, centerScenarioDetails } from "../capabilities/scenarios.js";
13
13
  import { isRosterGateArmed } from "../config.js";
14
14
  import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
15
- import { defaultLkgPath, defaultSkillCacheDir, saveLkg, loadLkg, legacyV1LkgPath, migrateV1Lkg } from "../config-lkg.js";
15
+ import { defaultLkgPath, defaultSkillCacheDir, saveLkg, loadLkg } from "../config-lkg.js";
16
16
  import { answerStillCurrent, centerStateBin, credentialIdentityNow, judgeCenterCredentialAtBoot } from "../center-credential.js";
17
17
  import { createCenterConfigTier } from "../center-config-tier.js";
18
18
  import { buildCenterCredentialHealthView, createCenterCredentialRenewer } from "../center-credential-renewer.js";
@@ -21,6 +21,7 @@ import { createConfigProvider, raceBootFetch, serviceConfigSourceKind, BOOT_FETC
21
21
  import { ConfigDirUntrustedError } from "../config-dir-trust.js";
22
22
  import { createKeyResolver } from "../key-resolver.js";
23
23
  import { buildSealedKeyPublicFace, ensureCheckpointCtxSealing, ensureSealedKeyStore, reportExecutionPublicKey } from "../sealed-key.js";
24
+ import { anthropicLaneCredentialOf } from "../model-route-gap.js";
24
25
  import { applyEffective, applyCenterReadFace, buildReadFaceBaseline, buildReadFaceSwapCandidate, restoreReadFaceBaseline, mutateInPlace, logEffectiveDiff, applySkillsManifest, skillManifestEntriesNotInstalled, resolveMcpServers, resolveA2aPeers, restartReasons, modelPlaneChanged, withModelPlaneOf, fullyLandedForLkg, NO_CENTER_EFFECTIVE, isNoCenterEffective, fetchPromptArtifact } from "../web-admin-client/facade.js";
25
26
  import { buildConfigHandoff, buildRestartSignal, configHandoffMissing } from "../fleet/engine-signal.js";
26
27
  import { createMcpRevocationLedger, enabledMcpEntries } from "../web-admin-client/mcp-revocation.js";
@@ -133,7 +134,7 @@ export async function createWebAdminRuntime(ctx) {
133
134
  }
134
135
  return r;
135
136
  };
136
- const sealedKeyDir = join(config.localDataRoot ?? localRoot, "sealed-key");
137
+ const sealedKeyDir = config.sealedKeyDir ?? join(config.localDataRoot ?? localRoot, "sealed-key");
137
138
  let sealedKeys;
138
139
  try {
139
140
  sealedKeys = await ensureSealedKeyStore(sealedKeyDir, logger);
@@ -146,6 +147,11 @@ export async function createWebAdminRuntime(ctx) {
146
147
  });
147
148
  }
148
149
  catch (err) {
150
+ if (config.sealedKeyDir !== undefined) {
151
+ throw new Error(`SEALED_KEY_DIR=${config.sealedKeyDir}: the declared model-key custody directory cannot hold a sealed-key store (${String(err)}) — ` +
152
+ `refusing to start rather than run with every sealed model unusable (no_key_store). Make that directory creatable, owned by ` +
153
+ `the service user and chmod-able to 0700 on a writable filesystem, or unset SEALED_KEY_DIR to use <data root>/sealed-key.`);
154
+ }
149
155
  logger.warn("sealed_key_store_unavailable", { err: String(err), note: "sealed api keys cannot be unsealed on this host — models carrying sealedApiKey will fail loud per-model" });
150
156
  }
151
157
  let checkpointCtxSealing;
@@ -153,7 +159,7 @@ export async function createWebAdminRuntime(ctx) {
153
159
  checkpointCtxSealing = await ensureCheckpointCtxSealing(sealedKeyDir, logger);
154
160
  }
155
161
  catch (err) {
156
- logger.warn("checkpoint_ctx_sealing_unavailable", { err: err instanceof Error ? err.message : String(err), note: "suspended tasks' request credentials cannot be sealed on this host; with durable approvals on the boot refuses — make <data root>/sealed-key/checkpoint-ctx-keys/ creatable and chmod-able by the service, or repair / remove a key file there whose public and private halves do not belong together" });
162
+ logger.warn("checkpoint_ctx_sealing_unavailable", { err: err instanceof Error ? err.message : String(err), dir: join(sealedKeyDir, "checkpoint-ctx-keys"), note: "suspended tasks' request credentials cannot be sealed on this host; with durable approvals on the boot refuses — make that directory (under the sealed-key custody directory: SEALED_KEY_DIR, default <data root>/sealed-key) creatable and chmod-able by the service, or repair / remove a key file there whose public and private halves do not belong together" });
157
163
  }
158
164
  const configProvider = serviceConfigSourceKind(config) !== undefined
159
165
  ? createConfigProvider({
@@ -458,19 +464,6 @@ export async function createWebAdminRuntime(ctx) {
458
464
  return null;
459
465
  }
460
466
  const lkgPath = lkgPathFor(identity);
461
- const legacy = await migrateV1Lkg({ legacyPath: config.configLkgPath ?? legacyV1LkgPath(config, cc?.worker), binPath: lkgPath, worker: cc?.worker, identity });
462
- switch (legacy.outcome) {
463
- case "none":
464
- break;
465
- case "migrated":
466
- logger.info("config_lkg_migrated", { from: legacy.from, retiredTo: legacy.retiredTo, to: lkgPath, note: "formatVersion 1 LKG (pull-token identity = this worker) migrated once into this credential identity's bin; the old file was renamed, not deleted" });
467
- if (legacy.retireError !== undefined)
468
- logger.warn("config_lkg_legacy_not_retired", { path: legacy.from, reason: legacy.retireError, note: "the bin was written and is used; only the old file's rename / copy failed" });
469
- break;
470
- case "not-migrated":
471
- logger.warn("config_lkg_unusable", { path: legacy.path, reason: legacy.reason, note: "env fallback serves; the cache rewrites on the next clean candidate" });
472
- return null;
473
- }
474
467
  const read = await loadLkg(lkgPath, cc?.worker, identity);
475
468
  if (!read.lkg) {
476
469
  if (read.reason !== "absent")
@@ -800,7 +793,7 @@ export async function createWebAdminRuntime(ctx) {
800
793
  },
801
794
  initKeyResolver() {
802
795
  keyResolver = createKeyResolver(config.modelApiKeyEnv, process.env, config.modelApiKeys);
803
- if (process.env.ANTHROPIC_AUTH_TOKEN && !process.env.ANTHROPIC_API_KEY && (Object.keys(config.modelApiKeys).length > 0 || Object.keys(config.modelApiKeyEnv).length > 0)) {
796
+ if (anthropicLaneCredentialOf(config.anthropic ?? {})?.kind === "bearer" && (Object.keys(config.modelApiKeys).length > 0 || Object.keys(config.modelApiKeyEnv).length > 0)) {
804
797
  logger.warn("per_model_key_bearer_gateway_combo", {
805
798
  perModelKeys: Object.keys(config.modelApiKeys).length + Object.keys(config.modelApiKeyEnv).length,
806
799
  note: "ANTHROPIC_AUTH_TOKEN (Bearer) deployment with per-model keys: core's per-call auth REPLACES the Authorization header with x-api-key for those models — a Bearer-only gateway will 401 them. Remove the per-model key for such models, or use a gateway accepting x-api-key.",
package/dist/brain.js CHANGED
@@ -6,6 +6,7 @@ import { createHash } from "node:crypto";
6
6
  import { isModelKeyPoison, modelKeyPoisonIdentity } from "./key-resolver.js";
7
7
  import { anthropicRouteRoot, brainLaneFor, mountRoutes, routeTableOf } from "./model-provider.js";
8
8
  import { openaiRouteBaseUrl } from "./model-route-endpoint.js";
9
+ import { anthropicLaneCredentialOf } from "./model-route-gap.js";
9
10
  import { catalogEntryFingerprint } from "./web-admin-client/restart-signal.js";
10
11
  import { buildDisplaySafeRefusal, buildDisplaySafeUrl } from "./trace/redact.js";
11
12
  import { createModelReachBrain } from "./model-unreachable-notice.js";
@@ -82,9 +83,7 @@ export function createBrainAssembly(config, deps = {}) {
82
83
  ? createFailoverBrain(openaiBrains)
83
84
  : openaiBrains[0];
84
85
  const brainRoutes = mountRoutes(config, (anthropicCfg) => constructRouteBrain("anthropic route", [anthropicCfg.baseUrl], () => createAnthropicBrain({
85
- ...(anthropicCfg.authToken
86
- ? { headers: { Authorization: `Bearer ${anthropicCfg.authToken}` } }
87
- : { apiKey: anthropicCfg.apiKey }),
86
+ ...anthropicCredentialFields(anthropicLaneCredentialOf(anthropicCfg)),
88
87
  baseUrl: anthropicRouteRoot(anthropicCfg),
89
88
  version: anthropicCfg.version,
90
89
  cacheBreakpoints: anthropicCfg.cacheBreakpoints,
@@ -139,6 +138,16 @@ export function createBrainAssembly(config, deps = {}) {
139
138
  }
140
139
  return { brain: createModelReachBrain(brain), degradeRoute: { read: () => ({ baked: degradeBaked, current: degradeRouteFingerprint(config) }) } };
141
140
  }
141
+ function anthropicCredentialFields(credential) {
142
+ if (credential === undefined)
143
+ return {};
144
+ switch (credential.kind) {
145
+ case "x-api-key":
146
+ return { apiKey: credential.value };
147
+ case "bearer":
148
+ return { headers: { Authorization: `Bearer ${credential.value}` } };
149
+ }
150
+ }
142
151
  export function createBrain(config, deps = {}) {
143
152
  return createBrainAssembly(config, deps).brain;
144
153
  }
@@ -0,0 +1,89 @@
1
+ import * as net from "node:net";
2
+ import * as tls from "node:tls";
3
+ import type { Duplex } from "node:stream";
4
+ import { type GitEndpoint } from "./http1.js";
5
+ import { LeaseBook, type LeaseBookEvent, type MonotonicClock } from "./lease-book.js";
6
+ /** Every line the broker logs (closed set; none carries a credential or a body). */
7
+ export type BrokerLogEvent = LeaseBookEvent | {
8
+ event: "refused";
9
+ status: number;
10
+ rule: string;
11
+ } | {
12
+ event: "exchange";
13
+ i: number;
14
+ method: string;
15
+ endpoint: GitEndpoint;
16
+ upstreamStatus: number;
17
+ authenticated: boolean;
18
+ } | {
19
+ event: "upstream_failed";
20
+ i: number;
21
+ endpoint: GitEndpoint;
22
+ problem: string;
23
+ } | {
24
+ event: "aborted";
25
+ i: number;
26
+ endpoint: GitEndpoint;
27
+ why: string;
28
+ } | {
29
+ event: "listening";
30
+ host: string;
31
+ port: number;
32
+ } | {
33
+ event: "lease_file_unreadable";
34
+ problem: string;
35
+ };
36
+ export interface UpstreamTarget {
37
+ readonly protocol: "https:" | "http:";
38
+ readonly hostname: string;
39
+ readonly port: number;
40
+ }
41
+ /** Opens the upstream connection for one exchange (production: {@link createUpstreamConnector}; the pins inject a plain socket). */
42
+ export type UpstreamConnector = (target: UpstreamTarget) => Duplex;
43
+ /**
44
+ * Rule 9. https ⇒ `tls.connect` with the runtime's default trust store, `rejectUnauthorized: true` and the origin's host name as SNI / the
45
+ * name checked (no CA override, no identity override, no knob to skip either); http ⇒ a plain socket (an http entry is never usable, so it
46
+ * never carries a credential). No proxy environment is read.
47
+ */
48
+ export declare function createUpstreamConnector(impl?: {
49
+ tlsConnect?: (opts: tls.ConnectionOptions) => Duplex;
50
+ netConnect?: (opts: net.NetConnectOpts) => Duplex;
51
+ }): UpstreamConnector;
52
+ /** The two upstream bounds (rule 14). */
53
+ export interface BrokerUpstreamTimeouts {
54
+ readonly connectMs: number;
55
+ readonly headersMs: number;
56
+ }
57
+ /** The bounds every broker runs with — the two constants; nothing configures them. */
58
+ export declare const BROKER_UPSTREAM_TIMEOUTS_DEFAULT: BrokerUpstreamTimeouts;
59
+ export interface BrokerDeps {
60
+ readonly book: LeaseBook;
61
+ readonly connect: UpstreamConnector;
62
+ readonly log: (e: BrokerLogEvent) => void;
63
+ /** Test seam only (the pins shorten the bounds); absent ⇒ {@link BROKER_UPSTREAM_TIMEOUTS_DEFAULT}. */
64
+ readonly timeouts?: BrokerUpstreamTimeouts;
65
+ }
66
+ /** The broker's listener: each connection carries one request. */
67
+ export declare function createBrokerServer(deps: BrokerDeps): net.Server;
68
+ /** Rule 11: a Location resolved against the upstream request URL stays only if it is this origin, inside the git namespace, with an allowed query. */
69
+ export declare function rewriteLocation(location: string, upstreamUrl: string, origin: string, i: number): string | undefined;
70
+ /**
71
+ * The broker process: load the lease file, listen on the loopback, re-read the file every `pollMs` (a changed text is loaded; an
72
+ * unreadable file is a refused file — everything withdrawn). Returns once listening.
73
+ */
74
+ export declare function runBroker(opts: {
75
+ leasePath: string;
76
+ host: string;
77
+ port: number;
78
+ pollMs: number;
79
+ log: (e: BrokerLogEvent) => void;
80
+ clock?: MonotonicClock;
81
+ connect?: UpstreamConnector;
82
+ }): Promise<{
83
+ port: number;
84
+ book: LeaseBook;
85
+ close(): Promise<void>;
86
+ }>;
87
+ /** The readiness probe (same program, `--probe`): GET the local ready route; true ⇔ 200 within `timeoutMs`. */
88
+ export declare function probeBroker(host: string, port: number, timeoutMs: number): Promise<boolean>;
89
+ //# sourceMappingURL=broker.d.ts.map