@sema-agent/server 7.136.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 (214) hide show
  1. package/MIGRATION.md +173 -0
  2. package/USAGE.md +84 -16
  3. package/deploy/sema-up/README.md +14 -0
  4. package/deploy/sema-up/chart/templates/sandbox-rbac.yaml +7 -1
  5. package/deploy/sema-up/stack/sema-stack-cluster.yaml +7 -1
  6. package/dist/approval-content-kind.d.ts +6 -0
  7. package/dist/approval-content-kind.js +7 -0
  8. package/dist/approval-gate-currency.d.ts +48 -6
  9. package/dist/approval-gate-currency.js +16 -9
  10. package/dist/approval-hmac.d.ts +13 -1
  11. package/dist/approval-hmac.js +1 -1
  12. package/dist/approval.js +3 -3
  13. package/dist/auth-bridge.js +2 -2
  14. package/dist/boot/execution-env.d.ts +24 -1
  15. package/dist/boot/execution-env.js +69 -6
  16. package/dist/boot/reapers.d.ts +3 -0
  17. package/dist/boot/reapers.js +15 -1
  18. package/dist/boot/resolve-spec.d.ts +4 -0
  19. package/dist/boot/resolve-spec.js +16 -17
  20. package/dist/boot/stage-03-store-backend.d.ts +1 -1
  21. package/dist/boot/stage-04-stores.d.ts +1 -1
  22. package/dist/boot/stage-05-execution-env.d.ts +3 -1
  23. package/dist/boot/stage-05-execution-env.js +11 -2
  24. package/dist/boot/stage-06-runners.d.ts +3 -1
  25. package/dist/boot/stage-06-runners.js +5 -1
  26. package/dist/boot/stage-07-capability-layer.d.ts +4 -1
  27. package/dist/boot/stage-07-capability-layer.js +1 -1
  28. package/dist/boot/stage-08-reapers.d.ts +4 -1
  29. package/dist/boot/stage-08-reapers.js +2 -1
  30. package/dist/boot/stage-09-leader.d.ts +4 -1
  31. package/dist/boot/stage-10-http-server.d.ts +4 -1
  32. package/dist/boot/stage-10-http-server.js +3 -2
  33. package/dist/boot/stores.d.ts +1 -1
  34. package/dist/broker/broker.d.ts +89 -0
  35. package/dist/broker/broker.js +287 -0
  36. package/dist/broker/constants.d.ts +39 -0
  37. package/dist/broker/constants.js +15 -0
  38. package/dist/broker/http1.d.ts +111 -0
  39. package/dist/broker/http1.js +256 -0
  40. package/dist/broker/lease-book.d.ts +87 -0
  41. package/dist/broker/lease-book.js +142 -0
  42. package/dist/broker/lease-file.d.ts +60 -0
  43. package/dist/broker/lease-file.js +127 -0
  44. package/dist/broker/main.d.ts +2 -0
  45. package/dist/broker/main.js +20 -0
  46. package/dist/capabilities/composite-members.d.ts +2 -1
  47. package/dist/capabilities/composite-members.js +2 -1
  48. package/dist/capabilities/engine-capabilities.js +1 -0
  49. package/dist/capabilities/scenarios.d.ts +23 -8
  50. package/dist/capabilities/scenarios.js +13 -8
  51. package/dist/capabilities/skills.d.ts +28 -5
  52. package/dist/capabilities/skills.js +8 -0
  53. package/dist/center-credential-renewer.js +5 -1
  54. package/dist/checkpoint-ctx-seal-m28.d.ts +3 -10
  55. package/dist/checkpoint-ctx-seal-m28.js +1 -1
  56. package/dist/checkpoint-identity.d.ts +3 -3
  57. package/dist/config-catalog.js +9 -6
  58. package/dist/config-types.d.ts +9 -0
  59. package/dist/config.d.ts +1 -1
  60. package/dist/config.js +34 -8
  61. package/dist/deployment-governance.d.ts +2 -2
  62. package/dist/deployment-governance.js +7 -9
  63. package/dist/device-ws-protocol.d.ts +1 -0
  64. package/dist/device-ws-protocol.js +2 -1
  65. package/dist/file-history-disclosure.d.ts +4 -2
  66. package/dist/file-history-disclosure.js +2 -0
  67. package/dist/hooks/classic-stations.d.ts +11 -54
  68. package/dist/http/admission.js +10 -7
  69. package/dist/http/approval-sweeps.js +4 -3
  70. package/dist/http/caller-trust.d.ts +2 -1
  71. package/dist/http/caller-trust.js +1 -3
  72. package/dist/http/checkpoint-ctx.d.ts +48 -7
  73. package/dist/http/checkpoint-ctx.js +40 -0
  74. package/dist/http/dispatch.js +15 -10
  75. package/dist/http/durable-run-leg.d.ts +5 -1
  76. package/dist/http/durable-run-leg.js +1 -1
  77. package/dist/http/health-self-report.d.ts +2 -2
  78. package/dist/http/mcp-remote-text.d.ts +5 -0
  79. package/dist/http/mcp-remote-text.js +7 -0
  80. package/dist/http/principal-gate.d.ts +15 -10
  81. package/dist/http/principal-gate.js +48 -9
  82. package/dist/http/resume-legs.d.ts +2 -20
  83. package/dist/http/resume-legs.js +52 -38
  84. package/dist/http/route-ctx.d.ts +8 -2
  85. package/dist/http/routes/approvals-assistant.js +18 -4
  86. package/dist/http/routes/capabilities.js +11 -1
  87. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  88. package/dist/http/routes/mcp-reconnect.js +5 -7
  89. package/dist/http/routes/runs.js +2 -1
  90. package/dist/http/routes/session-sync.js +42 -6
  91. package/dist/http/routes/sessions.js +2 -1
  92. package/dist/http/routes/tasks.js +8 -6
  93. package/dist/http/server.d.ts +4 -0
  94. package/dist/http/stored-body-replay.d.ts +3 -3
  95. package/dist/http/stored-body-replay.js +6 -1
  96. package/dist/http/wire-types.d.ts +52 -27
  97. package/dist/identity-source.d.ts +65 -0
  98. package/dist/identity-source.js +45 -0
  99. package/dist/memory-store-refusal.d.ts +3 -3
  100. package/dist/model-entry-refusal.d.ts +2 -0
  101. package/dist/model-entry-refusal.js +11 -0
  102. package/dist/model-select.d.ts +6 -17
  103. package/dist/model-select.js +0 -3
  104. package/dist/namespaced-rule-name.d.ts +1 -1
  105. package/dist/observability/fail-open.d.ts +13 -1
  106. package/dist/observability/fail-open.js +13 -1
  107. package/dist/observability/metrics.js +1 -1
  108. package/dist/observability/run-terminal.js +1 -0
  109. package/dist/operator-ask.d.ts +2 -2
  110. package/dist/org-delivery-gate.js +1 -1
  111. package/dist/org-memory-admission.d.ts +2 -2
  112. package/dist/org-memory-admission.js +39 -2
  113. package/dist/parked-decide.js +3 -2
  114. package/dist/peer-directory.js +2 -0
  115. package/dist/permission-rule-list.d.ts +2 -2
  116. package/dist/plugins/checkpoint-store-sql.d.ts +19 -9
  117. package/dist/plugins/checkpoint-store-sql.js +6 -6
  118. package/dist/plugins/file-history-store-sql.js +7 -14
  119. package/dist/plugins/file-run-store.js +8 -2
  120. package/dist/plugins/k8s-exec-protocol.d.ts +69 -13
  121. package/dist/plugins/k8s-exec-protocol.js +116 -28
  122. package/dist/plugins/k8s-pod-delete-failure.d.ts +25 -0
  123. package/dist/plugins/k8s-pod-delete-failure.js +17 -0
  124. package/dist/plugins/k8s-pod-reaper.d.ts +112 -0
  125. package/dist/plugins/k8s-pod-reaper.js +122 -0
  126. package/dist/plugins/local-checkpoint-store.d.ts +3 -6
  127. package/dist/plugins/local-checkpoint-store.js +3 -3
  128. package/dist/plugins/memory-run-store.js +2 -0
  129. package/dist/plugins/one-time-migrations.d.ts +28 -9
  130. package/dist/plugins/one-time-migrations.js +48 -5
  131. package/dist/plugins/permission-rule-store-file.js +2 -2
  132. package/dist/plugins/permission-rule-store-sql.d.ts +17 -17
  133. package/dist/plugins/permission-rule-store-sql.js +16 -17
  134. package/dist/plugins/pg-pool.js +4 -0
  135. package/dist/plugins/pg-session-storage.js +2 -2
  136. package/dist/plugins/remote-env-adb.d.ts +3 -0
  137. package/dist/plugins/remote-env-adb.js +1 -0
  138. package/dist/plugins/remote-env-device.d.ts +3 -0
  139. package/dist/plugins/remote-env-device.js +4 -0
  140. package/dist/plugins/remote-env-e2b.d.ts +3 -0
  141. package/dist/plugins/remote-env-e2b.js +1 -0
  142. package/dist/plugins/remote-env-file-error.d.ts +8 -1
  143. package/dist/plugins/remote-env-file-error.js +7 -1
  144. package/dist/plugins/remote-env-host.d.ts +7 -1
  145. package/dist/plugins/remote-env-host.js +7 -1
  146. package/dist/plugins/remote-env-k8s.d.ts +137 -10
  147. package/dist/plugins/remote-env-k8s.js +276 -14
  148. package/dist/plugins/remote-env-local-docker.d.ts +3 -0
  149. package/dist/plugins/remote-env-local-docker.js +1 -0
  150. package/dist/plugins/remote-env-ssh.d.ts +3 -0
  151. package/dist/plugins/remote-env-ssh.js +1 -0
  152. package/dist/plugins/run-store-sql.js +10 -4
  153. package/dist/plugins/session-ownership.d.ts +17 -3
  154. package/dist/plugins/session-ownership.js +19 -5
  155. package/dist/plugins/sql-errors.d.ts +23 -2
  156. package/dist/plugins/sql-errors.js +15 -0
  157. package/dist/plugins/store-contracts.d.ts +10 -1
  158. package/dist/plugins/store-fault.d.ts +2 -2
  159. package/dist/plugins/store-fault.js +4 -2
  160. package/dist/plugins/tidb-pool.js +7 -0
  161. package/dist/plugins/tidb-session-store.js +2 -2
  162. package/dist/request-key-closure.js +1 -1
  163. package/dist/request-value-closure.d.ts +31 -2
  164. package/dist/request-value-closure.js +7 -1
  165. package/dist/rule-entry-list.d.ts +3 -2
  166. package/dist/rule-entry-list.js +2 -2
  167. package/dist/rules-consent.js +7 -4
  168. package/dist/run-local.d.ts +2 -2
  169. package/dist/runs.js +2 -1
  170. package/dist/runtime-governance.d.ts +5 -5
  171. package/dist/sandbox-git-lease.d.ts +49 -0
  172. package/dist/sandbox-git-lease.js +60 -0
  173. package/dist/sandbox-git-plane.d.ts +84 -0
  174. package/dist/sandbox-git-plane.js +105 -0
  175. package/dist/security.d.ts +16 -4
  176. package/dist/security.js +8 -3
  177. package/dist/server-secret-env.d.ts +6 -0
  178. package/dist/server-secret-env.js +14 -0
  179. package/dist/session-error-wire.d.ts +14 -6
  180. package/dist/session-error-wire.js +2 -1
  181. package/dist/session-policy-wire.d.ts +1 -1
  182. package/dist/session-policy-wire.js +2 -2
  183. package/dist/session-sync.d.ts +1 -1
  184. package/dist/spec-fields.d.ts +43 -13
  185. package/dist/spec-fields.js +33 -12
  186. package/dist/stored-request-prompt-profile-m30.d.ts +49 -0
  187. package/dist/stored-request-prompt-profile-m30.js +25 -0
  188. package/dist/task-mcp.d.ts +1 -1
  189. package/dist/task-settings.d.ts +2 -2
  190. package/dist/tool-approval.d.ts +12 -2
  191. package/dist/tool-approval.js +8 -3
  192. package/dist/tool-rule-names.d.ts +5 -0
  193. package/dist/trace/core-keyset-guard.d.ts +4 -4
  194. package/dist/trace/engine-notice-wire.d.ts +1 -1
  195. package/dist/trace/engine-notice-wire.js +2 -0
  196. package/dist/trace/exit-seat.js +2 -2
  197. package/dist/trace/ledger-sink.d.ts +4 -5
  198. package/dist/trace/ledger-sink.js +3 -7
  199. package/dist/trace/project.d.ts +37 -3
  200. package/dist/trace/project.js +20 -6
  201. package/dist/trace/redact.d.ts +18 -6
  202. package/dist/trace/redact.js +118 -53
  203. package/dist/trace/self-minted-wire.d.ts +377 -3
  204. package/dist/trace/self-minted-wire.js +122 -0
  205. package/dist/trace/wire-projection-faces.d.ts +5 -3
  206. package/dist/trace/wire-projection-faces.js +7 -3
  207. package/dist/web-admin-client/apply-effective.js +0 -1
  208. package/dist/web-admin-client/center-request.d.ts +20 -2
  209. package/dist/web-admin-client/center-request.js +40 -5
  210. package/dist/web-admin-client/http-client.js +6 -6
  211. package/dist/web-admin-client/types.d.ts +5 -5
  212. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +11 -5
  213. package/package.json +2 -2
  214. package/wire-changes/server@7.137.0.json +825 -0
@@ -5,7 +5,8 @@ import { cappedCeiling } from "../budget.js";
5
5
  import { recordFailOpen } from "../observability/fail-open.js";
6
6
  import { SessionEnvironmentSelection, selectEnvironmentTool } from "../capabilities/select-environment-tool.js";
7
7
  import { sendUserFileTool } from "../capabilities/send-user-file-tool.js";
8
- import { buildExcludeToolsSeat, buildPromptSeats, createScenarioGate, mergeUserSkills, selectScenario } from "../capabilities/scenarios.js";
8
+ import { buildExcludeToolsSeat, buildPromptSeats, buildRunSkills, createScenarioGate, selectScenario } from "../capabilities/scenarios.js";
9
+ import { stampRunSkills } from "../capabilities/skills.js";
9
10
  import { stampHandsLane, toolPolicyForHands } from "../capabilities/hands-lane.js";
10
11
  import { applyLongtailDefer } from "../capabilities/tool-defer.js";
11
12
  import { assertGuardPatternsUsable, buildApprovalGrantNotice, buildOnlySensitiveBaselineWarning, createApprovalBaselinePolicy, createDeploymentGovernanceInputs } from "../deployment-governance.js";
@@ -16,7 +17,7 @@ import { createSettingsHooksRegistration, settingsHooksBudgetMs } from "../hooks
16
17
  import { HOST_POSTURE_REFUSED_CODE, taskInheritEnvRefusal, taskWriteFaceRefusal } from "../hosted-posture.js";
17
18
  import { headerStr } from "../http/principal-gate.js";
18
19
  import { explicitOperatorOk } from "../http/server.js";
19
- import { isAtMentionable, matchCatalogModel, modelSupportsImages, refusedCatalogEntry, resolveTaskModel, selectableCatalog, terminalCatalogName } from "../model-select.js";
20
+ import { isAtMentionable, matchCatalogModel, refusedCatalogEntry, resolveTaskModel, selectableCatalog, terminalCatalogName } from "../model-select.js";
20
21
  import { echoModelRef, modelUnavailableMessage } from "../model-entry-refusal.js";
21
22
  import { PerTaskImageRegistry, resolveSandboxImageRef } from "../per-task-image.js";
22
23
  import { remoteScratchpadDirFor } from "../plugins/remote-scratchpad.js";
@@ -30,9 +31,9 @@ import { HttpError, createCodedHttpError, encodeCheckpointScope } from "../secur
30
31
  import { headReadOf, sessionFaceOfHead } from "../session-incarnation.js";
31
32
  import { memorySpecForRequest } from "../memory-scope.js";
32
33
  import { createMemoryProjectLayers } from "../memory-project-layer.js";
33
- import { inheritEnvFieldIssue, singleMemberOffFieldIssue } from "../request-value-closure.js";
34
+ import { inheritEnvFacts, inheritEnvFieldIssue, singleMemberOffFieldIssue } from "../request-value-closure.js";
34
35
  import { a2aForScenario, mcpForScenario } from "../web-admin-client/facade.js";
35
- import { normalizeAttachments, normalizeResilience, normalizeResumeAtMode, normalizeSuggestNextPrompts, promptProfileFromBody, resolveTaskLimits, retainBackgroundProcessesFromBody, taskAgentsSpecFragment, toolMaterializeStrategyFromBody, allowToolsSpecFragment, toolNameListFromBody } from "../spec-fields.js";
36
+ import { normalizeAttachments, normalizeResilience, normalizeResumeAtMode, normalizeSuggestNextPrompts, promptLeanSpecFragment, resolveTaskLimits, retainBackgroundProcessesFromBody, taskAgentsSpecFragment, toolMaterializeStrategyFromBody, allowToolsSpecFragment, toolNameListFromBody } from "../spec-fields.js";
36
37
  import { isAbsoluteHostPath } from "@sema-agent/settings-schema";
37
38
  import { effectiveHostWorkspace, parseAdditionalDirectories, satisfiedByProcessCwd, shellEnvMismatchCount } from "../task-cwd.js";
38
39
  import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
@@ -53,7 +54,8 @@ import { effectiveMemoryPersistenceCapable } from "./memory-boundary.js";
53
54
  import { withUnattendedLeg } from "../unattended-permission-mode.js";
54
55
  import { fieldConflictFacts } from "../field-conflict.js";
55
56
  export function createResolveSpec(ctx) {
56
- const { config, logger, metrics, localRoot, scenarios, principalCaps, centerRuntimeCapsResolver, getKeyResolver, taskAttachmentStore, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner, hookLlm, hookAgent, fleetBus, hookWakeBus, resumeAnchorStore, ownerAware, taskLimitCaps, taskTimeoutSec, selectEnvTool, sendUserFileToolSpec, memoryEngine, memorySyncRunner, durableEnabled, approvalExemptionStore, checkpointStore, imageIndex, perTaskImage, sessionEnvSelection, liveQuestionFace, approverSeat, lockedKeys, } = ctx;
57
+ const { config, logger, metrics, localRoot, scenarios, principalCaps, centerRuntimeCapsResolver, getKeyResolver, taskAttachmentStore, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner, hookLlm, hookAgent, fleetBus, hookWakeBus, resumeAnchorStore, ownerAware, taskLimitCaps, taskTimeoutSec, selectEnvTool, sendUserFileToolSpec, memoryEngine, memorySyncRunner, durableEnabled, approvalExemptionStore, checkpointStore, imageIndex, perTaskImage, sessionEnvSelection, liveQuestionFace, approverSeat, lockedKeys, loadedSkills, } = ctx;
58
+ const deploymentSkillSources = new Map(loadedSkills.map((k) => [k.spec.name, k.source]));
57
59
  const scenarioGate = createScenarioGate({ config, scenarios, principalCaps, logger }, "enforce");
58
60
  const sessionHeadOf = headReadOf(ownerAware);
59
61
  assertGuardPatternsUsable(config);
@@ -100,17 +102,17 @@ export function createResolveSpec(ctx) {
100
102
  {
101
103
  const inheritEnvIssue = inheritEnvFieldIssue(body);
102
104
  if (inheritEnvIssue)
103
- throw new HttpError(400, inheritEnvIssue, { code: "request.field_invalid" });
105
+ throw new HttpError(400, inheritEnvIssue.message, { code: "request.field_invalid", extra: inheritEnvIssue.facts });
104
106
  if (body.inheritEnv === "all") {
105
107
  const lane = executionLaneOf(config.remoteExec?.provider);
106
108
  if (lane !== "host") {
107
- throw new HttpError(400, `inheritEnv:"all" applies to the host lane only (this deployment runs ${lane}) — only the host lane builds the model-driven shell's environment from this machine's own, so the declaration has no effect here; omit it (or send "scrub", the default, which every lane accepts)`, { code: "request.field_invalid" });
109
+ throw new HttpError(400, `inheritEnv:"all" applies to the host lane only (this deployment runs ${lane}) — only the host lane builds the model-driven shell's environment from this machine's own, so the declaration has no effect here; omit it (or send "scrub", the default, which every lane accepts)`, { code: "request.field_invalid", extra: inheritEnvFacts("lane_not_host") });
108
110
  }
109
111
  const why = taskInheritEnvRefusal(config);
110
112
  if (why !== undefined)
111
113
  throw new HttpError(422, why, { code: HOST_POSTURE_REFUSED_CODE });
112
114
  if (!auth?.sessionId)
113
- throw new HttpError(400, `inheritEnv:"all" requires a session-resolving deployment (no authorizer session) — the host shell's environment is bound per session`, { code: "request.field_invalid" });
115
+ throw new HttpError(400, `inheritEnv:"all" requires a session-resolving deployment (no authorizer session) — the host shell's environment is bound per session`, { code: "request.field_invalid", extra: inheritEnvFacts("no_authorizer_session") });
114
116
  }
115
117
  }
116
118
  {
@@ -156,7 +158,8 @@ export function createResolveSpec(ctx) {
156
158
  const lane = bindSettingsCwdEnvAndModel(body, auth, gated, opts);
157
159
  const anchors = await resolveHistoryAnchors(body, auth);
158
160
  const projectKey = memoryEngine ? await memoryProjectLayers.prepare(config, auth?.memoryScope, realTaskRootOf(auth)) : undefined;
159
- const spec = assembleSpecLiteral(body, auth, req, opts, { ...gated, ...lane, ...anchors, projectKey, a2aPeers, storedToolAxes }, effMode);
161
+ const runSkills = buildRunSkills({ scenario: gated.cap.skills, request: body.skills, disable: body.disableSkills === true, deploymentSources: deploymentSkillSources }, logger);
162
+ const spec = assembleSpecLiteral(body, auth, req, opts, { ...gated, ...lane, ...anchors, projectKey, a2aPeers, storedToolAxes, runSkills }, effMode);
160
163
  const folded = await foldGovernanceAndSettings(body, auth, spec, gated);
161
164
  const final = await applyImageFactsAndRouting(body, auth, folded.governed, {
162
165
  scenarioName: gated.scenarioName,
@@ -164,7 +167,7 @@ export function createResolveSpec(ctx) {
164
167
  hostSemanticsLane: folded.hostSemanticsLane,
165
168
  });
166
169
  const stamped = stampHandsLane(final, gated.hands);
167
- return stamped;
170
+ return stampRunSkills(stamped, runSkills.roster);
168
171
  };
169
172
  const gateScenarioAndAppend = async (body, auth, opts) => {
170
173
  const scenarioName = await scenarioGate(auth?.principal, body.scenario);
@@ -312,10 +315,6 @@ export function createResolveSpec(ctx) {
312
315
  metrics.inc("task_model_unknown_fallback_total");
313
316
  logger.warn("task_model_unknown_fallback", { requested: echoModelRef(picked.unknownExplicit), fallback: picked.model, sessionId: auth?.sessionId ?? null });
314
317
  }
315
- if (Array.isArray(body.images) && body.images.length > 0 && !modelSupportsImages(wireCatalog[picked.model])) {
316
- metrics.inc("images_omitted_total", { model: picked.model });
317
- logger.warn("images_omitted_no_vision_model", { model: picked.model, count: body.images.length });
318
- }
319
318
  return { taskHooks, additionalDirectories, additionalReadDirectories, wireCatalog, picked };
320
319
  };
321
320
  const NO_ANCHOR_HINT = "no rewind anchor is recorded under that handle (a prompt that carried attachments records none when its attachment frames were interrupted or their count did not match)";
@@ -359,7 +358,7 @@ export function createResolveSpec(ctx) {
359
358
  return deriveAskEffective(askForm.form, "unresolved") === "human_reachable";
360
359
  };
361
360
  const assembleSpecLiteral = (body, auth, req, opts, parts, effMode) => {
362
- const { scenarioName, cap, hands, acceptedAppend, parsedSettings, attachmentNotice, taskHooks, additionalDirectories, additionalReadDirectories, wireCatalog, picked, resumeAtEntryId, rewindFilesToEntryId, s4DefaultScopes, projectKey, a2aPeers, storedToolAxes, } = parts;
361
+ const { scenarioName, cap, hands, acceptedAppend, parsedSettings, attachmentNotice, taskHooks, additionalDirectories, additionalReadDirectories, wireCatalog, picked, resumeAtEntryId, rewindFilesToEntryId, s4DefaultScopes, projectKey, a2aPeers, storedToolAxes, runSkills, } = parts;
363
362
  const spec = {
364
363
  objective: attachmentNotice ? `${picked.cleanedObjective}\n\n${attachmentNotice}` : picked.cleanedObjective,
365
364
  ...buildPromptSeats(scenarioName, cap.prompt, typeof body.systemPrompt === "string" ? body.systemPrompt : undefined),
@@ -404,7 +403,7 @@ export function createResolveSpec(ctx) {
404
403
  ...buildExcludeToolsSeat(cap.excludeTools, toolNameListFromBody(body.excludeTools)),
405
404
  ...allowToolsSpecFragment(body.allowTools),
406
405
  ...(() => { const v = toolNameListFromBody(body.deferTools); return v ? { deferTools: v } : {}; })(),
407
- ...(() => { const v = promptProfileFromBody(body.promptProfile); return v ? { promptProfile: v } : {}; })(),
406
+ ...promptLeanSpecFragment(body),
408
407
  ...(() => { const v = toolMaterializeStrategyFromBody(body.toolMaterializeStrategy); return v ? { toolMaterializeStrategy: v } : {}; })(),
409
408
  ...(typeof body.interactiveTools === "boolean" ? { interactiveTools: body.interactiveTools } : {}),
410
409
  ...(declaresInteractivePosture(body, req, opts) ? { interactionPosture: "interactive" } : {}),
@@ -488,7 +487,7 @@ export function createResolveSpec(ctx) {
488
487
  const merged = extra.length > 0 ? [...(base ?? []), ...extra] : base;
489
488
  return merged && config.toolDeferLongtail ? applyLongtailDefer(merged, true) : merged;
490
489
  })(cap.tools),
491
- skills: body.disableSkills === true ? [] : mergeUserSkills(cap.skills, body.skills, logger),
490
+ skills: runSkills.specs,
492
491
  ...(() => { const v = toolNameListFromBody(body.userInvokedSkills); return v ? { userInvokedSkills: v } : {}; })(),
493
492
  ...(parsedSettings.settings?.skillListingBudgetFraction !== undefined ? { skillListingBudgetFraction: parsedSettings.settings.skillListingBudgetFraction } : {}),
494
493
  ...(parsedSettings.settings?.skillListingMaxDescChars !== undefined ? { skillListingMaxDescChars: parsedSettings.settings.skillListingMaxDescChars } : {}),
@@ -18,7 +18,7 @@ export declare function runStage03(ctx: Awaited<ReturnType<typeof runStage02>>):
18
18
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
19
19
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
20
20
  sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
21
- sessionStore: import("@sema-agent/core").SessionStore;
21
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
22
22
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
23
23
  storePosture: import("../store-posture.js").StorePosture;
24
24
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -59,7 +59,7 @@ export declare function runStage04(ctx: Awaited<ReturnType<typeof runStage03>>):
59
59
  rosterStore: import("@sema-agent/core").RosterStore | undefined;
60
60
  sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
61
61
  sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
62
- sessionStore: import("@sema-agent/core").SessionStore;
62
+ sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
63
63
  sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
64
64
  storePosture: import("../store-posture.js").StorePosture;
65
65
  taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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