@sema-agent/server 7.145.0 → 7.146.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.
- package/MIGRATION.md +492 -0
- package/USAGE.md +218 -47
- package/deploy/facts/CHANGES.json +25 -0
- package/deploy/facts/README.md +57 -0
- package/deploy/facts/lanes.json +54 -0
- package/deploy/facts/lanes.schema.json +57 -0
- package/deploy/facts/sandbox-rbac.json +113 -0
- package/deploy/facts/sandbox-rbac.schema.json +74 -0
- package/deploy/facts/sealed-key.json +9 -0
- package/deploy/facts/sealed-key.schema.json +52 -0
- package/deploy/sema-up/chart/templates/_helpers.tpl +19 -0
- package/deploy/sema-up/chart/templates/sandbox-rbac.yaml +47 -7
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +4 -0
- package/deploy/sema-up/chart/templates/server.yaml +4 -0
- package/deploy/sema-up/chart/values.yaml +7 -0
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +30 -14
- package/dist/adoption/import-limits.d.ts +6 -0
- package/dist/adoption/import-limits.js +7 -0
- package/dist/adoption/import.d.ts +62 -0
- package/dist/adoption/import.js +107 -0
- package/dist/adoption/wire.d.ts +52 -0
- package/dist/adoption/wire.js +9 -0
- package/dist/approval-ask-machine.d.ts +2 -2
- package/dist/approval-card.d.ts +3 -12
- package/dist/approval-card.js +0 -4
- package/dist/approval-gate-currency.d.ts +1 -1
- package/dist/approval-gate-currency.js +1 -1
- package/dist/approval-reconciler.d.ts +1 -1
- package/dist/boot/deployment-mods.d.ts +11 -1
- package/dist/boot/deployment-mods.js +15 -2
- package/dist/boot/device-lane.js +2 -0
- package/dist/boot/engine-lease.d.ts +193 -21
- package/dist/boot/engine-lease.js +146 -20
- package/dist/boot/execution-env.d.ts +4 -0
- package/dist/boot/execution-env.js +12 -0
- package/dist/boot/exit-boundary.d.ts +50 -0
- package/dist/boot/exit-boundary.js +32 -0
- package/dist/boot/exit-last.d.ts +20 -4
- package/dist/boot/exit-last.js +21 -4
- package/dist/boot/governance-seams.js +1 -0
- package/dist/boot/memory-consolidation.d.ts +29 -17
- package/dist/boot/memory-consolidation.js +26 -15
- package/dist/boot/reapers.d.ts +12 -4
- package/dist/boot/reapers.js +39 -15
- package/dist/boot/resolve-spec.d.ts +2 -0
- package/dist/boot/resolve-spec.js +38 -15
- package/dist/boot/runner-deps.js +1 -1
- package/dist/boot/session-faces.js +3 -1
- package/dist/boot/shutdown.js +27 -9
- package/dist/boot/stage-01-config.js +1 -1
- package/dist/boot/stage-03-store-backend.d.ts +1 -0
- package/dist/boot/stage-03-store-backend.js +2 -2
- package/dist/boot/stage-04-stores.d.ts +1 -0
- package/dist/boot/stage-05-execution-env.d.ts +3 -0
- package/dist/boot/stage-05-execution-env.js +3 -3
- package/dist/boot/stage-06-runners.d.ts +3 -0
- package/dist/boot/stage-06-runners.js +11 -10
- package/dist/boot/stage-07-capability-layer.d.ts +3 -0
- package/dist/boot/stage-07-capability-layer.js +7 -2
- package/dist/boot/stage-08-reapers.d.ts +3 -0
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +3 -0
- package/dist/boot/stage-10-http-server.d.ts +3 -0
- package/dist/boot/stage-10-http-server.js +3 -2
- package/dist/boot/stores.d.ts +1 -0
- package/dist/boot/stores.js +35 -19
- package/dist/boot/workflow-orchestration.d.ts +1 -1
- package/dist/boot/workflow-orchestration.js +2 -1
- package/dist/capabilities/composite-members.d.ts +3 -1
- package/dist/capabilities/composite-members.js +3 -1
- package/dist/capabilities/scenarios.d.ts +2 -2
- package/dist/capability-facts.d.ts +18 -1
- package/dist/capability-facts.js +25 -7
- package/dist/checkpoint-ctx-seal-m28.d.ts +1 -1
- package/dist/config-catalog.js +13 -4
- package/dist/config-provider.d.ts +2 -2
- package/dist/config-types.d.ts +43 -4
- package/dist/config.d.ts +6 -1
- package/dist/config.js +67 -11
- package/dist/deleted-session-ids.d.ts +19 -0
- package/dist/deleted-session-ids.js +26 -0
- package/dist/deploy-facts.d.ts +155 -0
- package/dist/deploy-facts.js +94 -0
- package/dist/device-ws-hub.d.ts +48 -3
- package/dist/device-ws-hub.js +48 -2
- package/dist/error-code-family.d.ts +35 -0
- package/dist/error-code-family.js +26 -0
- package/dist/fleet/drain-entry.d.ts +39 -3
- package/dist/fleet/drain-entry.js +6 -0
- package/dist/fleet/fleet-bus.d.ts +2 -1
- package/dist/hooks/branch-transcript.d.ts +1 -1
- package/dist/hooks/branch-transcript.js +1 -0
- package/dist/hooks/classic-stations.d.ts +25 -8
- package/dist/hooks/classic-stations.js +29 -3
- package/dist/hooks/hook-runner.d.ts +33 -16
- package/dist/hooks/hook-runner.js +166 -73
- package/dist/hooks/hook-source.d.ts +14 -2
- package/dist/hooks/hook-source.js +8 -0
- package/dist/http/active-run-conflict.d.ts +1 -1
- package/dist/http/active-run-conflict.js +1 -1
- package/dist/http/admission.js +11 -1
- package/dist/http/checkpoint-ctx.d.ts +59 -71
- package/dist/http/checkpoint-ctx.js +34 -40
- package/dist/http/dispatch.js +18 -2
- package/dist/http/durable-run-leg.d.ts +5 -0
- package/dist/http/durable-run-leg.js +1 -0
- package/dist/http/execution-context.d.ts +4 -0
- package/dist/http/execution-context.js +9 -0
- package/dist/http/health-self-report.d.ts +6 -2
- package/dist/http/health-self-report.js +3 -2
- package/dist/http/memory-compliance-failure-reply.d.ts +1 -1
- package/dist/http/memory-compliance-failure-reply.js +2 -15
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +25 -0
- package/dist/http/memory-control-plane-corrupt-reply.js +19 -0
- package/dist/http/principal-gate.d.ts +35 -12
- package/dist/http/principal-gate.js +16 -12
- package/dist/http/request-guards.d.ts +1 -1
- package/dist/http/request-guards.js +5 -5
- package/dist/http/resume-legs.d.ts +22 -0
- package/dist/http/resume-legs.js +26 -17
- package/dist/http/route-ctx.d.ts +11 -10
- package/dist/http/route-table.js +2 -0
- package/dist/http/routes/adoption.d.ts +11 -0
- package/dist/http/routes/adoption.js +80 -6
- package/dist/http/routes/agents-roster.js +1 -0
- package/dist/http/routes/approvals-assistant.js +2 -1
- package/dist/http/routes/background.js +1 -0
- package/dist/http/routes/capabilities.js +4 -1
- package/dist/http/routes/diagnostics.d.ts +9 -14
- package/dist/http/routes/diagnostics.js +10 -20
- package/dist/http/routes/engine.d.ts +31 -0
- package/dist/http/routes/engine.js +81 -0
- package/dist/http/routes/memory-bundle.js +3 -0
- package/dist/http/routes/memory-consolidation.js +3 -5
- package/dist/http/routes/memory-origin.d.ts +1 -1
- package/dist/http/routes/memory-origin.js +2 -4
- package/dist/http/routes/memory-policy.js +5 -1
- package/dist/http/routes/observability.js +3 -6
- package/dist/http/routes/runs.js +7 -3
- package/dist/http/routes/session-sync.js +12 -25
- package/dist/http/routes/sessions-list.d.ts +1 -1
- package/dist/http/routes/sessions.js +4 -0
- package/dist/http/routes/tasks.js +23 -5
- package/dist/http/routes/trace-usage.js +1 -1
- package/dist/http/run-concurrency-cap.d.ts +86 -0
- package/dist/http/run-concurrency-cap.js +54 -0
- package/dist/http/server.d.ts +15 -12
- package/dist/http/server.js +18 -3
- package/dist/http/stored-body-replay.d.ts +9 -6
- package/dist/http/stored-body-replay.js +19 -5
- package/dist/http/wire-types.d.ts +8 -3
- package/dist/json-body-limit.d.ts +8 -0
- package/dist/json-body-limit.js +2 -0
- package/dist/leader/diffout.d.ts +1 -1
- package/dist/local-data-root.d.ts +2 -2
- package/dist/memory-operator-faces.d.ts +9 -4
- package/dist/memory-scope-stores.d.ts +9 -7
- package/dist/memory-scope-stores.js +3 -14
- package/dist/memory-scope.d.ts +36 -0
- package/dist/memory-scope.js +32 -1
- package/dist/net-address.d.ts +53 -0
- package/dist/net-address.js +111 -0
- package/dist/observability/fail-open.d.ts +14 -10
- package/dist/observability/fail-open.js +14 -10
- package/dist/orchestration/workflow-notify-journal.js +2 -3
- package/dist/org-delivery-gate.js +1 -1
- package/dist/peer-directory.d.ts +6 -12
- package/dist/peer-directory.js +5 -1
- package/dist/plugins/caching-session-store.d.ts +3 -1
- package/dist/plugins/caching-session-store.js +3 -0
- package/dist/plugins/checkpoint-store-face.d.ts +426 -0
- package/dist/plugins/checkpoint-store-face.js +152 -0
- package/dist/plugins/file-run-store.d.ts +0 -6
- package/dist/plugins/file-run-store.js +1 -12
- package/dist/plugins/fork-routing-session-store.d.ts +6 -2
- package/dist/plugins/fork-routing-session-store.js +2 -2
- package/dist/plugins/imported-layer-root-retirement.d.ts +10 -8
- package/dist/plugins/local-checkpoint-store.d.ts +2 -2
- package/dist/plugins/local-checkpoint-store.js +2 -1
- package/dist/plugins/local-session-store.d.ts +28 -5
- package/dist/plugins/local-session-store.js +32 -8
- package/dist/plugins/memory-engine-pg.d.ts +29 -6
- package/dist/plugins/memory-engine-pg.js +96 -214
- package/dist/plugins/memory-engine-sql-apply.d.ts +121 -0
- package/dist/plugins/memory-engine-sql-apply.js +358 -0
- package/dist/plugins/memory-engine-tidb.d.ts +35 -9
- package/dist/plugins/memory-engine-tidb.js +97 -227
- package/dist/plugins/memory-key-guards.d.ts +1 -1
- package/dist/plugins/memory-origin-law.d.ts +3 -3
- package/dist/plugins/one-time-migrations.d.ts +32 -56
- package/dist/plugins/one-time-migrations.js +25 -117
- package/dist/plugins/permission-rule-store-file.d.ts +17 -3
- package/dist/plugins/permission-rule-store-file.js +8 -1
- package/dist/plugins/pg-pool.js +1 -1
- package/dist/plugins/pg-session-storage.d.ts +17 -4
- package/dist/plugins/pg-session-storage.js +8 -4
- package/dist/plugins/run-store-sql.js +2 -2
- package/dist/plugins/schema-ensure-legs.js +2 -2
- package/dist/plugins/session-fork.d.ts +31 -9
- package/dist/plugins/session-fork.js +3 -2
- package/dist/plugins/session-placement.d.ts +4 -2
- package/dist/plugins/sql-json-column.d.ts +5 -1
- package/dist/plugins/store-backend.d.ts +11 -8
- package/dist/plugins/store-backend.js +8 -7
- package/dist/plugins/store-contracts.d.ts +1 -11
- package/dist/plugins/store-contracts.js +0 -9
- package/dist/plugins/store-sweep.d.ts +63 -0
- package/dist/plugins/store-sweep.js +48 -0
- package/dist/plugins/tidb-pool.js +1 -1
- package/dist/plugins/tidb-session-store.d.ts +16 -3
- package/dist/plugins/tidb-session-store.js +8 -4
- package/dist/prompt-screen.d.ts +6 -9
- package/dist/prompt-screen.js +2 -5
- package/dist/rules-consent.d.ts +20 -27
- package/dist/rules-consent.js +82 -6
- package/dist/run-cancel-context.d.ts +4 -1
- package/dist/run-cancel-context.js +2 -1
- package/dist/runs.js +1 -1
- package/dist/sandbox-egress-policy.js +6 -11
- package/dist/sandbox-rbac-rules.d.ts +88 -0
- package/dist/sandbox-rbac-rules.js +80 -0
- package/dist/sealed-key-layout.d.ts +17 -0
- package/dist/sealed-key-layout.js +4 -0
- package/dist/sealed-key.js +5 -5
- package/dist/security.d.ts +38 -6
- package/dist/security.js +9 -2
- package/dist/session-notify-door.d.ts +5 -3
- package/dist/session-resident-background.d.ts +57 -0
- package/dist/session-resident-background.js +20 -0
- package/dist/session-sync-kernel.d.ts +53 -14
- package/dist/session-sync-kernel.js +70 -1
- package/dist/session-sync.d.ts +5 -3
- package/dist/session-workspace.d.ts +1 -0
- package/dist/session-workspace.js +1 -0
- package/dist/sighup-idle.d.ts +9 -7
- package/dist/sighup-idle.js +4 -5
- package/dist/spec-fields.d.ts +16 -0
- package/dist/spec-fields.js +7 -0
- package/dist/stored-request-env-credentials-m38.d.ts +3 -0
- package/dist/stored-request-env-credentials-m38.js +8 -0
- package/dist/stored-request-prompt-profile-m30.d.ts +1 -1
- package/dist/{plugins → stores-sql}/checkpoint-store-sql.d.ts +13 -427
- package/dist/{plugins → stores-sql}/checkpoint-store-sql.js +33 -194
- package/dist/{plugins → stores-sql}/mailbox-store-sql.d.ts +2 -2
- package/dist/{plugins → stores-sql}/mailbox-store-sql.js +4 -4
- package/dist/{plugins → stores-sql}/roster-store-sql.d.ts +2 -2
- package/dist/{plugins → stores-sql}/roster-store-sql.js +1 -1
- package/dist/{plugins → stores-sql}/tool-result-store-sql.d.ts +2 -2
- package/dist/{plugins → stores-sql}/tool-result-store-sql.js +6 -6
- package/dist/{plugins → stores-sql}/workflow-journal-store-sql.d.ts +7 -12
- package/dist/{plugins → stores-sql}/workflow-journal-store-sql.js +3 -8
- package/dist/task-settings.d.ts +59 -4
- package/dist/task-settings.js +50 -4
- package/dist/tool-approval.d.ts +2 -2
- package/dist/trace/core-keyset-guard.d.ts +8 -7
- package/dist/trace/engine-notice-wire.d.ts +1 -1
- package/dist/trace/engine-notice-wire.js +2 -0
- package/dist/trace/exit-seat.d.ts +6 -0
- package/dist/trace/exit-seat.js +1 -0
- package/dist/trace/project.js +9 -0
- package/dist/trace/redact.d.ts +13 -2
- package/dist/trace/redact.js +305 -24
- package/dist/trace/self-minted-wire.d.ts +326 -8
- package/dist/trace/self-minted-wire.js +125 -7
- package/dist/trace/wire-projection-faces.d.ts +1 -1
- package/dist/trace/wire-projection-faces.js +1 -1
- package/dist/usage-analytics.d.ts +4 -0
- package/package.json +12 -4
- package/scripts/drain-check-local.mjs +8 -29
- package/scripts/drain-check.mysql.sql +3 -24
- package/scripts/drain-check.pg.sql +3 -24
- package/skills/update-config.md +1 -1
- package/wire-changes/server@7.146.0.json +3221 -0
- package/dist/approval-batch-census.d.ts +0 -27
- package/dist/approval-batch-census.js +0 -27
|
@@ -13,7 +13,7 @@ import { assertGuardPatternsUsable, buildApprovalGrantNotice, buildOnlySensitive
|
|
|
13
13
|
import { createDeploymentListExemption, gateIntentUnserviceableReason, singleUserAutoAcceptBaselineApplies } from "../approval.js";
|
|
14
14
|
import { acceptShellScratchpadDir, buildEnvFacts, egressForRemoteExec, ensureScratchpadDir, resumeFactsForLane, scratchpadCoveringTaskRoot } from "../env-facts.js";
|
|
15
15
|
import { FleetEventBus } from "../fleet/fleet-bus.js";
|
|
16
|
-
import {
|
|
16
|
+
import { createSettingsHooksRegistrations, settingsHooksBudgetMs } from "../hooks/hook-runner.js";
|
|
17
17
|
import { HOST_POSTURE_REFUSED_CODE, permissionModeWriteFaceRefusal, taskInheritEnvRefusal } from "../hosted-posture.js";
|
|
18
18
|
import { headerStr } from "../http/principal-gate.js";
|
|
19
19
|
import { explicitOperatorOk } from "../http/server.js";
|
|
@@ -33,7 +33,7 @@ import { memorySpecForRequest } from "../memory-scope.js";
|
|
|
33
33
|
import { createMemoryProjectLayers } from "../memory-project-layer.js";
|
|
34
34
|
import { inheritEnvFacts, inheritEnvFieldIssue, singleMemberOffFieldIssue } from "../request-value-closure.js";
|
|
35
35
|
import { a2aForScenario, mcpForScenario } from "../web-admin-client/facade.js";
|
|
36
|
-
import { normalizeAttachments, normalizeResilience, normalizeResumeAtMode, normalizeSuggestNextPrompts, promptLeanSpecFragment, resolveTaskLimits, retainBackgroundProcessesFromBody, taskAgentsSpecFragment, toolMaterializeStrategyFromBody, allowToolsSpecFragment, toolNameListFromBody } from "../spec-fields.js";
|
|
36
|
+
import { compactionSpecFragment, normalizeAttachments, normalizeResilience, normalizeResumeAtMode, normalizeSuggestNextPrompts, promptLeanSpecFragment, resolveTaskLimits, retainBackgroundProcessesFromBody, taskAgentsSpecFragment, toolMaterializeStrategyFromBody, allowToolsSpecFragment, toolNameListFromBody } from "../spec-fields.js";
|
|
37
37
|
import { isAbsoluteHostPath } from "@sema-agent/settings-schema";
|
|
38
38
|
import { effectiveHostWorkspace, parseAdditionalDirectories, satisfiedByProcessCwd, shellEnvMismatchCount } from "../task-cwd.js";
|
|
39
39
|
import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
|
|
@@ -43,7 +43,9 @@ import { assertRequestMcpEntries, assertRequestMcpUnlocked, resolveRequestMcp }
|
|
|
43
43
|
import { GOVERNANCE_HTTP_STATUS } from "../governance-http-status.js";
|
|
44
44
|
import { storedToolAxesRereadM19 } from "../stored-request-tool-axes-m19.js";
|
|
45
45
|
import { storedHooksRereadM20 } from "../stored-request-hooks-m20.js";
|
|
46
|
-
import {
|
|
46
|
+
import { storedEnvCredentialsDropM38 } from "../stored-request-env-credentials-m38.js";
|
|
47
|
+
import { serverCredentialValueSources } from "../server-secret-env.js";
|
|
48
|
+
import { MAX_SETTINGS_OUTPUT_STYLE_CHARS, REQUEST_SETTINGS_REFUSAL_PREFIX, SETTINGS_RULE_REFUSAL_CODE, SettingsRuleRefusalError, acceptAppendSystemPrompt, applyTaskSettings, createWorkflowAskPolicy, effectivePermissionMode, effectiveThinking, parseTaskSettings, readSettingsEnv, taskHooksHonored, settingsEnvCredentialIssue, settingsPermissionBucketIssue, withoutKeys } from "../task-settings.js";
|
|
47
49
|
import { tightenOnlySeatIssue } from "../tighten-only-seats.js";
|
|
48
50
|
import { entryProblemsFacts } from "../entry-problems.js";
|
|
49
51
|
import { inertToolListEntryOf } from "../rule-entry-list.js";
|
|
@@ -59,7 +61,7 @@ function unrooted(spec) {
|
|
|
59
61
|
return resolved;
|
|
60
62
|
}
|
|
61
63
|
export function createResolveSpec(ctx) {
|
|
62
|
-
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, peerDesk, } = ctx;
|
|
64
|
+
const { config, logger, metrics, localRoot, scenarios, principalCaps, centerRuntimeCapsResolver, getKeyResolver, taskAttachmentStore, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner, hookLlm, hookAgent, belowTaskChainPatterns, fleetBus, hookWakeBus, resumeAnchorStore, ownerAware, taskLimitCaps, taskTimeoutSec, selectEnvTool, sendUserFileToolSpec, memoryEngine, memorySyncRunner, durableEnabled, approvalExemptionStore, checkpointStore, imageIndex, perTaskImage, sessionEnvSelection, liveQuestionFace, approverSeat, lockedKeys, loadedSkills, peerDesk, } = ctx;
|
|
63
65
|
const deploymentSkillSources = new Map(loadedSkills.map((k) => [k.spec.name, k.source]));
|
|
64
66
|
const scenarioGate = createScenarioGate({ config, scenarios, principalCaps, logger }, "enforce");
|
|
65
67
|
const sessionHeadOf = headReadOf(ownerAware);
|
|
@@ -138,6 +140,26 @@ export function createResolveSpec(ctx) {
|
|
|
138
140
|
if (seatIssue)
|
|
139
141
|
throw new HttpError(400, seatIssue.message, { code: "request.field_invalid", extra: seatIssue.fields });
|
|
140
142
|
}
|
|
143
|
+
let settingsEnv = readSettingsEnv(body.settings);
|
|
144
|
+
{
|
|
145
|
+
const envIssue = settingsEnvCredentialIssue(settingsEnv.reaching, serverCredentialValueSources(config.modelApiKeyEnv));
|
|
146
|
+
if (envIssue !== null) {
|
|
147
|
+
if (opts?.leg !== "fresh" && storedEnvCredentialsDropM38(new Date().toISOString().slice(0, 10))) {
|
|
148
|
+
settingsEnv = withoutKeys(settingsEnv, envIssue.keys);
|
|
149
|
+
const dropped = { name: 0, value_shape: 0 };
|
|
150
|
+
for (const e of envIssue.fields.entries)
|
|
151
|
+
dropped[e.match]++;
|
|
152
|
+
logger.warn("settings_env_credentials_dropped", {
|
|
153
|
+
migration: "M38",
|
|
154
|
+
sessionId: auth?.sessionId ?? null,
|
|
155
|
+
dropped,
|
|
156
|
+
note: "this replayed request was stored before the upgrade and its settings.env carries credentials (a credential variable name of this engine, or a value shaped like a secret); while one-time migration M38 is open they are dropped from what the session's shell and hooks receive and the task resumes — the engine's own credentials come from its process environment and are unaffected; once the window closes the same request is refused",
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
else
|
|
160
|
+
throw createCodedHttpError(400, "request.env_credential_refused", envIssue.message, { ...envIssue.fields });
|
|
161
|
+
}
|
|
162
|
+
}
|
|
141
163
|
{
|
|
142
164
|
const replay = opts?.leg === "resume";
|
|
143
165
|
const inertList = inertToolListEntryOf(body, replay ? ["deny"] : undefined);
|
|
@@ -159,7 +181,7 @@ export function createResolveSpec(ctx) {
|
|
|
159
181
|
assertRequestA2aEntries(a2aPeers);
|
|
160
182
|
if (opts?.leg === "fresh")
|
|
161
183
|
assertRequestImageUrls(body.images);
|
|
162
|
-
const gated = await gateScenarioAndAppend(body, auth, opts);
|
|
184
|
+
const gated = await gateScenarioAndAppend(body, auth, opts, settingsEnv);
|
|
163
185
|
const effMode = effectivePermissionMode(body, gated.parsedSettings.settings);
|
|
164
186
|
{
|
|
165
187
|
const why = permissionModeWriteFaceRefusal(effMode, config);
|
|
@@ -179,7 +201,7 @@ export function createResolveSpec(ctx) {
|
|
|
179
201
|
});
|
|
180
202
|
return { spec: final, facts: { hands: gated.hands, skills: runSkills.roster, sessionWitness: gated.sessionWitness } };
|
|
181
203
|
};
|
|
182
|
-
const gateScenarioAndAppend = async (body, auth, opts) => {
|
|
204
|
+
const gateScenarioAndAppend = async (body, auth, opts, settingsEnv) => {
|
|
183
205
|
const scenarioName = await scenarioGate(auth?.principal, body.scenario);
|
|
184
206
|
const root = opts.execution.root;
|
|
185
207
|
const rootFace = sessionHeadOf === undefined ? undefined : sessionFaceOfHead(root, await sessionHeadOf(root));
|
|
@@ -187,7 +209,10 @@ export function createResolveSpec(ctx) {
|
|
|
187
209
|
const cap = selectScenario(scenarios, scenarioName)(body, auth?.principal, { sessionId: sessionWitness.sessionId, delegationRoot: sessionWitness });
|
|
188
210
|
const acceptedAppend = acceptAppendSystemPrompt(body.appendSystemPrompt, (detail) => logger.warn("append_system_prompt_dropped", { detail, sessionId: auth?.sessionId ?? null }));
|
|
189
211
|
const objective = typeof body.objective === "string" ? body.objective : "";
|
|
190
|
-
const parsedSettings = parseTaskSettings(body.settings,
|
|
212
|
+
const parsedSettings = parseTaskSettings(body.settings, {
|
|
213
|
+
...(opts?.leg === "fresh" || !taskHooksHonored(config) ? {} : { storedHooksReread: storedHooksRereadM20(new Date().toISOString().slice(0, 10)) }),
|
|
214
|
+
settingsEnv,
|
|
215
|
+
});
|
|
191
216
|
if (parsedSettings.deferred.length > 0) {
|
|
192
217
|
logger.warn("task_settings_deferred", { fields: parsedSettings.deferred, sessionId: auth?.sessionId ?? null });
|
|
193
218
|
}
|
|
@@ -275,17 +300,18 @@ export function createResolveSpec(ctx) {
|
|
|
275
300
|
const taskHooks = (() => {
|
|
276
301
|
const hc = parsedSettings.settings?.hooks;
|
|
277
302
|
if (!hc)
|
|
278
|
-
return
|
|
303
|
+
return [];
|
|
279
304
|
if (!taskHooksHonored(config)) {
|
|
280
305
|
logger.warn("task_hooks_ignored", { honored: false, sessionId: auth?.sessionId ?? null });
|
|
281
|
-
return
|
|
306
|
+
return [];
|
|
282
307
|
}
|
|
283
|
-
return
|
|
308
|
+
return createSettingsHooksRegistrations(hc, {
|
|
284
309
|
logger,
|
|
285
310
|
sessionId: auth?.sessionId ?? "",
|
|
286
311
|
cwd: (auth?.sessionId ? perSessionCwd.get(auth.sessionId) : undefined) ?? process.cwd(),
|
|
287
312
|
...(parsedSettings.settings?.shellEnv ? { shellEnv: parsedSettings.settings.shellEnv } : {}),
|
|
288
313
|
httpHookAllowlistLayers: parsedSettings.settings?.httpHookAllowlist !== undefined ? [parsedSettings.settings.httpHookAllowlist] : [],
|
|
314
|
+
belowTaskChainPatterns,
|
|
289
315
|
hookLlm,
|
|
290
316
|
hookAgent,
|
|
291
317
|
onHookNotice: (n) => fleetBus.publishHookNotice({
|
|
@@ -392,10 +418,7 @@ export function createResolveSpec(ctx) {
|
|
|
392
418
|
images: body.images,
|
|
393
419
|
...(body.userAttachments !== undefined ? { userAttachments: body.userAttachments } : {}),
|
|
394
420
|
...(body.clientContext ? { clientContext: { timeZone: body.clientContext.timeZone, userEmail: body.clientContext.userEmail } } : {}),
|
|
395
|
-
...(
|
|
396
|
-
const ct = body.compaction?.clampTolerance;
|
|
397
|
-
return typeof ct === "number" && Number.isFinite(ct) && ct >= 0 && ct <= 1 ? { compaction: { clampTolerance: ct } } : {};
|
|
398
|
-
})(),
|
|
421
|
+
...compactionSpecFragment(body.compaction?.clampTolerance, parsedSettings.settings?.autoCompactEnabled),
|
|
399
422
|
outputSchema: body.outputSchema,
|
|
400
423
|
...(typeof body.outputRetries === "number" && Number.isFinite(body.outputRetries) && body.outputRetries >= 1
|
|
401
424
|
? { outputRetries: Math.min(10, Math.floor(body.outputRetries)) }
|
|
@@ -433,7 +456,7 @@ export function createResolveSpec(ctx) {
|
|
|
433
456
|
resilience: normalizeResilience(body.resilience, explicitOperatorOk(auth?.principal, config)),
|
|
434
457
|
finalVerification: cap.finalVerification === true || body.finalVerification === true ? true : undefined,
|
|
435
458
|
attachments: normalizeAttachments(body.attachments),
|
|
436
|
-
...(taskHooks ? { mods: [taskHooks] } : {}),
|
|
459
|
+
...(taskHooks.length > 0 ? { mods: [...taskHooks] } : {}),
|
|
437
460
|
model: picked.model,
|
|
438
461
|
...((() => {
|
|
439
462
|
if (typeof body.compactionModel !== "string" || body.compactionModel.length === 0)
|
package/dist/boot/runner-deps.js
CHANGED
|
@@ -144,7 +144,7 @@ export function createSharedRunnerDeps(ctx) {
|
|
|
144
144
|
}
|
|
145
145
|
export function createRunnerDeps(ctx) {
|
|
146
146
|
const { config, logger, metrics, localRoot, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine, sessionCaptureRecords, memorySyncRunner, runtimeCapsResolver, fileHistoryStore, permissionRuleStore, fleetBus, workflowRunStore, workflowJournalStore, workflowAgentRegistry, workflowNotifyGate, deliverWorkflowCompletion, } = ctx;
|
|
147
|
-
const peerSessionLister = sessionStore.
|
|
147
|
+
const peerSessionLister = sessionStore.listSessionRows?.bind(sessionStore);
|
|
148
148
|
const memoryEngineIncident = createMemoryEngineIncidentSink({ logger, metrics });
|
|
149
149
|
const sharedRunnerDeps = createSharedRunnerDeps(ctx);
|
|
150
150
|
const workflowModelAllowlist = workflowModelAllowlistFor(config);
|
|
@@ -12,6 +12,7 @@ import { probeSessionChildren, retireSessionChildren, sessionChildrenScope, Sess
|
|
|
12
12
|
import { SessionActiveRunError } from "../execution-placement.js";
|
|
13
13
|
import { headReadOf, redactIncarnations } from "../session-incarnation.js";
|
|
14
14
|
import { recordFailOpen } from "../observability/fail-open.js";
|
|
15
|
+
import { retireSessionId } from "../deleted-session-ids.js";
|
|
15
16
|
import { seatText } from "../trace/exit-seat.js";
|
|
16
17
|
export function createSessionFaces(ctx) {
|
|
17
18
|
const { config, logger, metrics, localRoot, backend, sessionStore, runStore, checkpointStore, toolResultStore, resumeAnchorStore, approvalExemptionStore, sessionPolicyStore, taskAttachmentStore, fileHistoryErasure, workflowCompletionInbox, taskListLane, dropSessionScoped, mailboxStore, mailboxRecipientLifecycle, backgroundAgentStore, userInputLedgerStore, spaceReclaimer, } = ctx;
|
|
@@ -102,7 +103,7 @@ export function createSessionFaces(ctx) {
|
|
|
102
103
|
await fileHistoryErasure.reap(sessionId, []);
|
|
103
104
|
logger.warn("session_file_history_baselines_retained", {
|
|
104
105
|
sessionId,
|
|
105
|
-
note: "
|
|
106
|
+
note: "this file-history store has no whole-scope erase verb (deleteBySession); boundaries were reaped but v1 baselines (original file bytes) remain in the store until it implements that verb — an open deletion-rights gap, not silent",
|
|
106
107
|
});
|
|
107
108
|
}
|
|
108
109
|
}
|
|
@@ -123,6 +124,7 @@ export function createSessionFaces(ctx) {
|
|
|
123
124
|
}
|
|
124
125
|
if (peerBox !== undefined)
|
|
125
126
|
await peerBox.store.drop(peerBox.scope, peerBox.handle);
|
|
127
|
+
retireSessionId(sessionId, owner, config);
|
|
126
128
|
let historyDeleted;
|
|
127
129
|
try {
|
|
128
130
|
historyDeleted = await ownerAware.deleteSession(sessionId, owner);
|
package/dist/boot/shutdown.js
CHANGED
|
@@ -5,8 +5,8 @@ import { createParentWatch } from "../parent-watch.js";
|
|
|
5
5
|
import { setTimeout as delay } from "node:timers/promises";
|
|
6
6
|
import { HOST_BG_KILL_GRACE_MS } from "../plugins/remote-env-host.js";
|
|
7
7
|
import { installProcessExitBoundary } from "./exit-boundary.js";
|
|
8
|
-
import { createEngineLeaseTracker } from "./engine-lease.js";
|
|
9
|
-
import { writeExitLast, readExitLast, clearExitLast } from "./exit-last.js";
|
|
8
|
+
import { backgroundShellsUnreachable, createEngineLeaseTracker, laneWork } from "./engine-lease.js";
|
|
9
|
+
import { writeExitLast, readExitLast, clearExitLast, EXIT_LAST_FORMAT } from "./exit-last.js";
|
|
10
10
|
import { isScriptRealmRejection, describeRejectionReason } from "../orchestration/hardened-vm-runner.js";
|
|
11
11
|
import { DRAIN_CAUSE_COUNTS_AS_FIRST_STOP_SIGNAL, HARD_STOP_ACTION_ID, drainDeadlineBeyondBound } from "../fleet/drain-entry.js";
|
|
12
12
|
import { seatText } from "../trace/exit-seat.js";
|
|
@@ -24,10 +24,20 @@ export function installShutdownHandlers(ctx) {
|
|
|
24
24
|
const prior = readCrashLast(dataRoot);
|
|
25
25
|
if (prior)
|
|
26
26
|
logger.warn("crash_last_found", { at: prior.at, version: prior.version, pid: prior.pid, uptimeMs: prior.uptimeMs, ...(prior.inflight !== undefined ? { inflight: prior.inflight } : {}), err: prior.err });
|
|
27
|
-
const
|
|
27
|
+
const lastExitReading = readExitLast(dataRoot);
|
|
28
|
+
if (lastExitReading?.kind === "formatMismatch") {
|
|
29
|
+
logger.warn("exit_last_stale_format", {
|
|
30
|
+
fileFormat: lastExitReading.fileFormat,
|
|
31
|
+
buildFormat: EXIT_LAST_FORMAT,
|
|
32
|
+
note: "exit-last.json on this data root was written in a different format by another engine version — it is not projected " +
|
|
33
|
+
"(no exit_last_found for it) and is removed now; only the previous exit's self-exit record is lost, nothing else is affected.",
|
|
34
|
+
});
|
|
35
|
+
clearExitLast(dataRoot);
|
|
36
|
+
}
|
|
37
|
+
const lastExit = lastExitReading?.kind === "found" ? lastExitReading.info : undefined;
|
|
28
38
|
if (lastExit) {
|
|
29
39
|
logger.info("exit_last_found", {
|
|
30
|
-
at: lastExit.at, version: lastExit.version, pid: lastExit.pid,
|
|
40
|
+
at: lastExit.at, version: lastExit.version, pid: lastExit.pid, lane: lastExit.lane, reason: lastExit.reason,
|
|
31
41
|
idleForMs: lastExit.idleForMs, attached: lastExit.attached, inflight: lastExit.inflight, lingerMs: lastExit.lingerMs,
|
|
32
42
|
...(lastExit.orphanedForMs !== undefined ? { orphanedForMs: lastExit.orphanedForMs } : {}),
|
|
33
43
|
crashedDuringExit: prior !== undefined && prior.pid === lastExit.pid,
|
|
@@ -76,6 +86,7 @@ export function installShutdownHandlers(ctx) {
|
|
|
76
86
|
let parentWatch;
|
|
77
87
|
let engineLease;
|
|
78
88
|
let leaseFactsReader;
|
|
89
|
+
let handoverDoor;
|
|
79
90
|
const hardShutdown = () => {
|
|
80
91
|
if (closing)
|
|
81
92
|
return;
|
|
@@ -191,14 +202,14 @@ export function installShutdownHandlers(ctx) {
|
|
|
191
202
|
drainState.endSubscriptions?.();
|
|
192
203
|
toolApproval?.beginDrain();
|
|
193
204
|
void fleetClient?.announceNow();
|
|
194
|
-
const inflight = drainState.
|
|
205
|
+
const inflight = drainState.blockingInflight?.() ?? 0;
|
|
195
206
|
logger.info("draining_started", { actionId: entry.actionId, inflight, deadlineAt: entry.deadlineAt, windowMs });
|
|
196
207
|
if (inflight === 0) {
|
|
197
208
|
hardShutdown();
|
|
198
209
|
return { ...current, state: "draining" };
|
|
199
210
|
}
|
|
200
211
|
const tick = setInterval(() => {
|
|
201
|
-
const n = drainState.
|
|
212
|
+
const n = drainState.blockingInflight?.() ?? 0;
|
|
202
213
|
const now = performance.now();
|
|
203
214
|
if (n === 0 || now >= deadlineMono) {
|
|
204
215
|
clearInterval(tick);
|
|
@@ -254,9 +265,9 @@ export function installShutdownHandlers(ctx) {
|
|
|
254
265
|
const onSigint = () => onStopSignal("SIGINT");
|
|
255
266
|
process.on("SIGTERM", onSigterm);
|
|
256
267
|
process.on("SIGINT", onSigint);
|
|
268
|
+
const handoverLane = !config.requirePrincipal ? { lingerMs: config.engineHandoverLingerMs, backgroundShells: exitBoundary.shellsExitWouldKill } : undefined;
|
|
257
269
|
const onSighup = createSighupIdleHandler({
|
|
258
|
-
|
|
259
|
-
attached: () => drainState.attachedStreams?.() ?? 0,
|
|
270
|
+
work: () => laneWork(engineLease?.lane(), { attached: drainState.attachedStreams?.() ?? 0, inflight: drainState.blockingInflight?.() ?? 0, backgroundShells: handoverLane?.backgroundShells ?? backgroundShellsUnreachable }, "sighup"),
|
|
260
271
|
lastActivityAt: () => drainState.lastActivityAt?.() ?? 0,
|
|
261
272
|
isStopped: () => closing || draining,
|
|
262
273
|
escalate: () => drainOnCause("signal:SIGHUP"),
|
|
@@ -283,7 +294,7 @@ export function installShutdownHandlers(ctx) {
|
|
|
283
294
|
if (config.parentPid !== undefined || config.engineAutoExit) {
|
|
284
295
|
engineLease = createEngineLeaseTracker({
|
|
285
296
|
attachedStreams: () => drainState.attachedStreams?.() ?? 0,
|
|
286
|
-
inflight: () => drainState.
|
|
297
|
+
inflight: () => drainState.blockingInflight?.() ?? 0,
|
|
287
298
|
lastActivityAt: () => drainState.lastActivityAt?.() ?? 0,
|
|
288
299
|
lastAttachEndedAt: () => drainState.lastAttachEndedAt?.() ?? 0,
|
|
289
300
|
isStopped: () => closing || draining,
|
|
@@ -296,10 +307,15 @@ export function installShutdownHandlers(ctx) {
|
|
|
296
307
|
...(config.parentPid !== undefined
|
|
297
308
|
? { orphan: { lingerMs: config.engineOrphanLingerMs, read: () => orphanState } }
|
|
298
309
|
: {}),
|
|
310
|
+
firstAttach: { windowMs: config.engineFirstAttachMs, firstTouchAt: () => drainState.firstActivityAt?.() ?? null },
|
|
311
|
+
...(handoverLane !== undefined ? { handover: handoverLane } : {}),
|
|
299
312
|
log: (event, fields) => logger.info(event, fields),
|
|
300
313
|
});
|
|
301
314
|
leaseFactsReader = () => engineLease?.facts;
|
|
302
315
|
drainState.engineLease = leaseFactsReader;
|
|
316
|
+
handoverDoor = engineLease.handover;
|
|
317
|
+
if (handoverDoor !== undefined)
|
|
318
|
+
drainState.engineHandover = handoverDoor;
|
|
303
319
|
}
|
|
304
320
|
let disposed = false;
|
|
305
321
|
return {
|
|
@@ -324,6 +340,8 @@ export function installShutdownHandlers(ctx) {
|
|
|
324
340
|
drainState.enter = undefined;
|
|
325
341
|
if (leaseFactsReader !== undefined && drainState.engineLease === leaseFactsReader)
|
|
326
342
|
drainState.engineLease = undefined;
|
|
343
|
+
if (handoverDoor !== undefined && drainState.engineHandover === handoverDoor)
|
|
344
|
+
drainState.engineHandover = undefined;
|
|
327
345
|
},
|
|
328
346
|
};
|
|
329
347
|
}
|
|
@@ -61,7 +61,7 @@ export function runStage01() {
|
|
|
61
61
|
if (rootsSplit) {
|
|
62
62
|
logger.warn("local_roots_split", {
|
|
63
63
|
...rootsSplit,
|
|
64
|
-
note: "
|
|
64
|
+
note: "The local backend's DATA root and the config root differ, and CONFIG_LOCAL_DIR is not set: config.d / remote-exec.json are read from the derived config root (AGENT_DATA_DIR or ~/.ai-agent; LOCAL_DATA_ROOT is not consulted there), while data lives under the data root (LOCAL_DATA_ROOT, else CONFIG_LOCAL_DIR, AGENT_DATA_DIR, ~/.ai-agent). If you meant to move both, set CONFIG_LOCAL_DIR to the same directory; if the split is intended, set CONFIG_LOCAL_DIR to the config directory explicitly — any explicit CONFIG_LOCAL_DIR silences this line.",
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
installOutboundDispatcher(logger);
|
|
@@ -20,6 +20,7 @@ export declare function runStage03(ctx: Awaited<ReturnType<typeof runStage02>>):
|
|
|
20
20
|
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
21
21
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
22
22
|
storePosture: import("../store-posture.js").StorePosture;
|
|
23
|
+
storeSweep: import("../plugins/store-sweep.js").StoreSweep;
|
|
23
24
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
24
25
|
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
25
26
|
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
@@ -2,8 +2,8 @@ import { uuidv7 } from "@sema-agent/core";
|
|
|
2
2
|
import { openStores } from "./stores.js";
|
|
3
3
|
export async function runStage03(ctx) {
|
|
4
4
|
const { config, localRoot, logger, metrics } = ctx;
|
|
5
|
-
const { backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, sessionCaptureRecords, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportStores, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngine, } = await openStores({ config, logger, metrics, localRoot });
|
|
5
|
+
const { backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, sessionCaptureRecords, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportStores, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngine, storeSweep, } = await openStores({ config, logger, metrics, localRoot });
|
|
6
6
|
const instanceId = uuidv7();
|
|
7
|
-
return { ...ctx, backend, backgroundAgentStore, breakerState, engineDataRoot, instanceId, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memoryExportStores, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecords, sessionStore, sqlEngine, storePosture, taskAttachmentStore, taskListLane, usageWindowStore };
|
|
7
|
+
return { ...ctx, backend, backgroundAgentStore, breakerState, engineDataRoot, instanceId, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memoryExportStores, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecords, sessionStore, sqlEngine, storePosture, storeSweep, taskAttachmentStore, taskListLane, usageWindowStore };
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=stage-03-store-backend.js.map
|
|
@@ -50,6 +50,7 @@ export declare function runStage04(ctx: Awaited<ReturnType<typeof runStage03>>):
|
|
|
50
50
|
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
51
51
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
52
52
|
storePosture: import("../store-posture.js").StorePosture;
|
|
53
|
+
storeSweep: import("../plugins/store-sweep.js").StoreSweep;
|
|
53
54
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
54
55
|
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
55
56
|
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
@@ -2,11 +2,13 @@ import type { runStage04 } from "./stage-04-stores.js";
|
|
|
2
2
|
export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>): Promise<{
|
|
3
3
|
deploymentMods: readonly import("@sema-agent/core").ModRegistration<import("@sema-agent/core").EngineDollar>[];
|
|
4
4
|
deploymentModsLoaded: readonly import("./deployment-mods.js").LoadedModPackage[];
|
|
5
|
+
belowTaskChainPatterns: readonly string[];
|
|
5
6
|
deviceLane: import("./device-lane.js").DeviceLane | undefined;
|
|
6
7
|
peerDesk: import("../peer-seat.js").PeerDesk;
|
|
7
8
|
dropSessionScoped: (sid: string) => void;
|
|
8
9
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
9
10
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
11
|
+
sessionResidentBackground: () => number;
|
|
10
12
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
11
13
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
12
14
|
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
@@ -69,6 +71,7 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
|
|
|
69
71
|
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
70
72
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
71
73
|
storePosture: import("../store-posture.js").StorePosture;
|
|
74
|
+
storeSweep: import("../plugins/store-sweep.js").StoreSweep;
|
|
72
75
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
73
76
|
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
74
77
|
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
@@ -13,7 +13,7 @@ export async function runStage05(ctx) {
|
|
|
13
13
|
const deviceLane = config.remoteExec?.provider === "device" ? createDeviceLane({ config, logger, metrics, backend, seat: sessionStore.executionPlacement, replicaId: instanceId }) : undefined;
|
|
14
14
|
const headOf = headReadOf(sessionStore);
|
|
15
15
|
const spaceCommits = backend !== undefined ? () => runStore : undefined;
|
|
16
|
-
const { perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, setSessionInheritEnv, fenceSessionOwner, dropSessionScoped, executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, spaceReclaimer, sandboxSecretSeatGate, sandboxPodReaper, sandboxGitPlane: sandboxGitPlaneSeat, } = createExecutionEnv({ config, logger, metrics, taskAttachmentStore, ...(deviceLane ? { deviceLane } : {}), ...(spaceCommits !== undefined ? { spaceCommits } : {}), ...(headOf !== undefined ? { headOf } : {}), ...(backend !== undefined ? { runRows: () => runStore } : {}) });
|
|
16
|
+
const { perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, setSessionInheritEnv, fenceSessionOwner, dropSessionScoped, sessionResidentBackground, executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, spaceReclaimer, sandboxSecretSeatGate, sandboxPodReaper, sandboxGitPlane: sandboxGitPlaneSeat, } = createExecutionEnv({ config, logger, metrics, taskAttachmentStore, ...(deviceLane ? { deviceLane } : {}), ...(spaceCommits !== undefined ? { spaceCommits } : {}), ...(headOf !== undefined ? { headOf } : {}), ...(backend !== undefined ? { runRows: () => runStore } : {}) });
|
|
17
17
|
assertDeviceLaneWired(config.remoteExec?.provider === "device", deviceLane, executionEnvFactory !== undefined);
|
|
18
18
|
if (deviceLane !== undefined && config.remoteExec?.provider === "device")
|
|
19
19
|
await noteDeviceRelayBindings(config.remoteExec.relay, deviceLane.store, logger);
|
|
@@ -30,10 +30,10 @@ export async function runStage05(ctx) {
|
|
|
30
30
|
}
|
|
31
31
|
if (config.toolTrace)
|
|
32
32
|
logger.info("tool_trace_enabled", {});
|
|
33
|
-
const { registrations: deploymentMods, loaded: deploymentModsLoaded } = await assembleDeploymentMods({ metrics, ...(config.toolTrace ? { traceLogger: logger } : {}), brandIdentity: isBrandedDeployment(config), declaration: config.modsDeclaration, logger });
|
|
33
|
+
const { registrations: deploymentMods, loaded: deploymentModsLoaded, belowTaskChainPatterns } = await assembleDeploymentMods({ metrics, ...(config.toolTrace ? { traceLogger: logger } : {}), brandIdentity: isBrandedDeployment(config), declaration: config.modsDeclaration, logger });
|
|
34
34
|
const peerDesk = createPeerDesk({ log: logger });
|
|
35
35
|
metrics.dynamicGauge("peer_registry_entries", "Peer desk entries (declared peer credentials registered for in-flight legs and the roster)", () => peerDesk.size().entries);
|
|
36
36
|
metrics.dynamicGauge("peer_registry_holders", "Peer desk holders of entries (host leases and engine holds), summed across entries", () => peerDesk.size().holders);
|
|
37
|
-
return { ...ctx, deploymentMods, deploymentModsLoaded, deviceLane, peerDesk, dropSessionScoped, executionEnvFactory, fenceSessionOwner, lspManager, spaceReclaimer, sandboxPodReaper, sandboxGitPlane, perSessionCwd, perTaskImage, sendUserFileTaskEnvs, sessionEnvSelection, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, worktreeReap };
|
|
37
|
+
return { ...ctx, deploymentMods, deploymentModsLoaded, belowTaskChainPatterns, deviceLane, peerDesk, dropSessionScoped, executionEnvFactory, fenceSessionOwner, sessionResidentBackground, lspManager, spaceReclaimer, sandboxPodReaper, sandboxGitPlane, perSessionCwd, perTaskImage, sendUserFileTaskEnvs, sessionEnvSelection, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, worktreeReap };
|
|
38
38
|
}
|
|
39
39
|
//# sourceMappingURL=stage-05-execution-env.js.map
|
|
@@ -63,11 +63,13 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
|
|
|
63
63
|
orgDeliveryGate: import("@sema-agent/core").OrgDeliveryGate | undefined;
|
|
64
64
|
deploymentMods: readonly import("@sema-agent/core").ModRegistration<import("@sema-agent/core").EngineDollar>[];
|
|
65
65
|
deploymentModsLoaded: readonly import("./deployment-mods.js").LoadedModPackage[];
|
|
66
|
+
belowTaskChainPatterns: readonly string[];
|
|
66
67
|
deviceLane: import("./device-lane.js").DeviceLane | undefined;
|
|
67
68
|
peerDesk: import("../peer-seat.js").PeerDesk;
|
|
68
69
|
dropSessionScoped: (sid: string) => void;
|
|
69
70
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
70
71
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
72
|
+
sessionResidentBackground: () => number;
|
|
71
73
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
72
74
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
73
75
|
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
@@ -130,6 +132,7 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
|
|
|
130
132
|
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
131
133
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
132
134
|
storePosture: import("../store-posture.js").StorePosture;
|
|
135
|
+
storeSweep: import("../plugins/store-sweep.js").StoreSweep;
|
|
133
136
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
134
137
|
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
135
138
|
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
@@ -79,6 +79,16 @@ export async function runStage06(ctx) {
|
|
|
79
79
|
],
|
|
80
80
|
locked: (config.lockedConfigKeys ?? []).includes("retentionPolicy"),
|
|
81
81
|
});
|
|
82
|
+
const governanceSeams = createGovernanceSeams({
|
|
83
|
+
config,
|
|
84
|
+
logger,
|
|
85
|
+
retentionStores: [
|
|
86
|
+
{ name: "sessionStore", store: sessionStore },
|
|
87
|
+
{ name: "checkpointStore", store: checkpointStore },
|
|
88
|
+
{ name: "toolResultStore", store: runnerOffloadStore },
|
|
89
|
+
],
|
|
90
|
+
retentionExecutor: retentionSweepRuns(config.retentionSweep) ? (retentionExecutor ?? null) : null,
|
|
91
|
+
});
|
|
82
92
|
const consolidationSeat = consolidationValve.enabled && memoryEngine
|
|
83
93
|
? resolveConsolidationDriverSeat({
|
|
84
94
|
brain,
|
|
@@ -97,6 +107,7 @@ export async function runStage06(ctx) {
|
|
|
97
107
|
onStopDetail: (audit) => logger.warn("memory_consolidation_stop_detail", audit),
|
|
98
108
|
writeJudge: createOperatorValveWriteJudge({ ruleStoreProvider: permissionRuleProvider, config }),
|
|
99
109
|
onNotice: createEngineNoticeForwarder(logger, defaultEngineNoticeRouter, metrics),
|
|
110
|
+
postureOf: governanceSeams.compliancePostureResolver,
|
|
100
111
|
})
|
|
101
112
|
: undefined;
|
|
102
113
|
for (const w of buildConsolidationValveAudit({
|
|
@@ -117,16 +128,6 @@ export async function runStage06(ctx) {
|
|
|
117
128
|
autoRunOnRecommendation: config.memoryConsolidationDriver.autoRunOnRecommendation ?? "engine-default(on)",
|
|
118
129
|
});
|
|
119
130
|
}
|
|
120
|
-
const governanceSeams = createGovernanceSeams({
|
|
121
|
-
config,
|
|
122
|
-
logger,
|
|
123
|
-
retentionStores: [
|
|
124
|
-
{ name: "sessionStore", store: sessionStore },
|
|
125
|
-
{ name: "checkpointStore", store: checkpointStore },
|
|
126
|
-
{ name: "toolResultStore", store: runnerOffloadStore },
|
|
127
|
-
],
|
|
128
|
-
retentionExecutor: retentionSweepRuns(config.retentionSweep) ? (retentionExecutor ?? null) : null,
|
|
129
|
-
});
|
|
130
131
|
const mcpRevocations = webAdmin.takeMcpRevocations();
|
|
131
132
|
const workflowModelAllowlistSnapshot = workflowModelAllowlistFor(config) ?? [];
|
|
132
133
|
const runnerDeps = createRunnerDeps({
|
|
@@ -80,11 +80,13 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
|
|
|
80
80
|
orgDeliveryGate: import("@sema-agent/core").OrgDeliveryGate | undefined;
|
|
81
81
|
deploymentMods: readonly import("@sema-agent/core").ModRegistration<import("@sema-agent/core").EngineDollar>[];
|
|
82
82
|
deploymentModsLoaded: readonly import("./deployment-mods.js").LoadedModPackage[];
|
|
83
|
+
belowTaskChainPatterns: readonly string[];
|
|
83
84
|
deviceLane: import("./device-lane.js").DeviceLane | undefined;
|
|
84
85
|
peerDesk: import("../peer-seat.js").PeerDesk;
|
|
85
86
|
dropSessionScoped: (sid: string) => void;
|
|
86
87
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
87
88
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
89
|
+
sessionResidentBackground: () => number;
|
|
88
90
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
89
91
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
90
92
|
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
@@ -147,6 +149,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
|
|
|
147
149
|
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
148
150
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
149
151
|
storePosture: import("../store-posture.js").StorePosture;
|
|
152
|
+
storeSweep: import("../plugins/store-sweep.js").StoreSweep;
|
|
150
153
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
151
154
|
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
152
155
|
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
@@ -14,7 +14,7 @@ import { buildScenarios, builtinScenarioDetails, danglingScenarioRefusal } from
|
|
|
14
14
|
import { isBrandedDeployment } from "../capabilities/brand-identity.js";
|
|
15
15
|
import { RateLimiter } from "../observability/rate-limit.js";
|
|
16
16
|
import { explicitOperatorOk } from "../http/server.js";
|
|
17
|
-
import { buildOperatorUndeclaredNotice } from "../http/principal-gate.js";
|
|
17
|
+
import { buildOperatorUndeclaredNotice, buildServiceTokenPostureNotice } from "../http/principal-gate.js";
|
|
18
18
|
import { selfOrchestrationDenial } from "../task-workflow.js";
|
|
19
19
|
import { centerEntitlementSourceWired } from "../runtime-caps-resolver.js";
|
|
20
20
|
import { reclaimOrphansAtBoot } from "../boot-reclaim.js";
|
|
@@ -100,10 +100,15 @@ export async function runStage07(ctx) {
|
|
|
100
100
|
if (durableEnabled)
|
|
101
101
|
logger.info("durable_approval_enabled", { toolApprovalGate: config.approvalRequire.length });
|
|
102
102
|
{
|
|
103
|
-
const undeclared = buildOperatorUndeclaredNotice(config
|
|
103
|
+
const undeclared = buildOperatorUndeclaredNotice(config);
|
|
104
104
|
if (undeclared)
|
|
105
105
|
logger.warn(undeclared.event, undeclared.fields);
|
|
106
106
|
}
|
|
107
|
+
{
|
|
108
|
+
const posture = buildServiceTokenPostureNotice(config);
|
|
109
|
+
if (posture)
|
|
110
|
+
logger.info(posture.event, posture.fields);
|
|
111
|
+
}
|
|
107
112
|
if (config.a2aServe) {
|
|
108
113
|
const peer = facts.a2aServe({ config, runStore });
|
|
109
114
|
if (peer.available) {
|
|
@@ -93,11 +93,13 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
|
|
|
93
93
|
orgDeliveryGate: import("@sema-agent/core").OrgDeliveryGate | undefined;
|
|
94
94
|
deploymentMods: readonly import("@sema-agent/core").ModRegistration<import("@sema-agent/core").EngineDollar>[];
|
|
95
95
|
deploymentModsLoaded: readonly import("./deployment-mods.js").LoadedModPackage[];
|
|
96
|
+
belowTaskChainPatterns: readonly string[];
|
|
96
97
|
deviceLane: import("./device-lane.js").DeviceLane | undefined;
|
|
97
98
|
peerDesk: import("../peer-seat.js").PeerDesk;
|
|
98
99
|
dropSessionScoped: (sid: string) => void;
|
|
99
100
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
100
101
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
102
|
+
sessionResidentBackground: () => number;
|
|
101
103
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
102
104
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
103
105
|
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
@@ -160,6 +162,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
|
|
|
160
162
|
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
161
163
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
162
164
|
storePosture: import("../store-posture.js").StorePosture;
|
|
165
|
+
storeSweep: import("../plugins/store-sweep.js").StoreSweep;
|
|
163
166
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
164
167
|
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
165
168
|
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
@@ -6,11 +6,11 @@ import { createLimitSync } from "./limit-sync.js";
|
|
|
6
6
|
import { runDenySweep } from "./late-binds.js";
|
|
7
7
|
import { seatText } from "../trace/exit-seat.js";
|
|
8
8
|
export function runStage08(ctx) {
|
|
9
|
-
const { approvalAskAudit, approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, spaceReclaimer, sandboxPodReaper, handslessRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore,
|
|
9
|
+
const { approvalAskAudit, approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, spaceReclaimer, sandboxPodReaper, handslessRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, runStore, runner, sqlWorkflowRunStore, storeSweep, subRunner, taskAttachmentStore, toolApproval, userInputLedger, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
|
|
10
10
|
const reaper = startReapers({
|
|
11
11
|
config, logger, metrics, localRoot, backend, subRunner, runStore, checkpointStore, parkCommits,
|
|
12
|
-
rateLimiter, costQuota,
|
|
13
|
-
workflowNotifyGate, workflowRecoverOpts,
|
|
12
|
+
rateLimiter, costQuota, storeSweep, fileHistoryErasure, taskAttachmentStore, imageBakes, worktreeReap,
|
|
13
|
+
workflowNotifyGate, workflowRecoverOpts, sqlWorkflowRunStore, workflowNotifyJournal,
|
|
14
14
|
backgroundAgentStore, mailboxStore, toolApproval, permissionRuleStores, approvalNonceStore, userInputLedger, approvalAskAudit,
|
|
15
15
|
...(sandboxPodReaper !== undefined ? { sandboxPodReaper } : {}),
|
|
16
16
|
getRunDenySweep: () => runDenySweep,
|
|
@@ -117,11 +117,13 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
|
|
|
117
117
|
orgDeliveryGate: import("@sema-agent/core").OrgDeliveryGate | undefined;
|
|
118
118
|
deploymentMods: readonly import("@sema-agent/core").ModRegistration<import("@sema-agent/core").EngineDollar>[];
|
|
119
119
|
deploymentModsLoaded: readonly import("./deployment-mods.js").LoadedModPackage[];
|
|
120
|
+
belowTaskChainPatterns: readonly string[];
|
|
120
121
|
deviceLane: import("./device-lane.js").DeviceLane | undefined;
|
|
121
122
|
peerDesk: import("../peer-seat.js").PeerDesk;
|
|
122
123
|
dropSessionScoped: (sid: string) => void;
|
|
123
124
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
124
125
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
126
|
+
sessionResidentBackground: () => number;
|
|
125
127
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
126
128
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
127
129
|
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
@@ -184,6 +186,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
|
|
|
184
186
|
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
185
187
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
186
188
|
storePosture: import("../store-posture.js").StorePosture;
|
|
189
|
+
storeSweep: import("../plugins/store-sweep.js").StoreSweep;
|
|
187
190
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
188
191
|
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
189
192
|
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
@@ -116,11 +116,13 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
|
|
|
116
116
|
orgDeliveryGate: import("@sema-agent/core").OrgDeliveryGate | undefined;
|
|
117
117
|
deploymentMods: readonly import("@sema-agent/core").ModRegistration<import("@sema-agent/core").EngineDollar>[];
|
|
118
118
|
deploymentModsLoaded: readonly import("./deployment-mods.js").LoadedModPackage[];
|
|
119
|
+
belowTaskChainPatterns: readonly string[];
|
|
119
120
|
deviceLane: import("./device-lane.js").DeviceLane | undefined;
|
|
120
121
|
peerDesk: import("../peer-seat.js").PeerDesk;
|
|
121
122
|
dropSessionScoped: (sid: string) => void;
|
|
122
123
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
123
124
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
125
|
+
sessionResidentBackground: () => number;
|
|
124
126
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
125
127
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
126
128
|
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
@@ -183,6 +185,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
|
|
|
183
185
|
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
184
186
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
185
187
|
storePosture: import("../store-posture.js").StorePosture;
|
|
188
|
+
storeSweep: import("../plugins/store-sweep.js").StoreSweep;
|
|
186
189
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
187
190
|
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
188
191
|
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
@@ -32,7 +32,7 @@ import { serviceVersion } from "../service-version.js";
|
|
|
32
32
|
import { buildDisplaySafeUrl } from "../trace/redact.js";
|
|
33
33
|
import { seatText } from "../trace/exit-seat.js";
|
|
34
34
|
export async function runStage10(ctx) {
|
|
35
|
-
const { peerDesk, approvalAskAudit, approvalExemptionStore, approvalNonceStore, authorize, backend, backgroundAgentStore, brain, breakerState, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, parkCommits, config, webAdmin, consolidationValve, costQuota, deploymentMods, deploymentModsLoaded, deviceLane, drainState, durableEnabled, elicitation, fenceSessionOwner, fileHistoryStore, fleetBus, fleetLease, fleetUsage, governanceSeams, handslessRunner, hookAgent, hookLlm, hookWakeBus, imageBakes, imageIndex, instanceId, instrumentDegenerate, leaderEndpoint, loadedSkills, localRoot, logger, lspManager, mcpRevocations, memoryBundleFaces, memoryComplianceFaces, memoryConsolidationFaces, memoryEngine, memoryExportStores, memoryOptOutGrantStore, memoryOriginFaces, memoryPosture, memorySyncCursors, memorySyncRunner, metrics, modelUsageTracker, orgMemoryAdmission, otelExporter, outcomeSink, ownerAware, parkedReviveInheritedGate, parkedReviveSurface, perSessionCwd, perTaskImage, planCacheProbe, pricing, principalCaps, promptManifestTracker, purgeSession, question, rateLimiter, reaper, webAdminJwtVerifier, resumeAnchorStore, retentionLaneStarted, retentionLaneStore, ruleConsent, runStore, runner, runnerDeps, runtimeCapsPeekResolver, sandboxGitPlane, scenarioDetails, scenarios, selectEnvTool, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionAudit, sessionEnvSelection, sessionMemoryStatusFace, sessionPolicyStore, sessionTitler, sessionWatchRegistry, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, sharedMemoryStore, sideQueryAccounting, sqlEngine, sqlWorkflowRunStore, staticWiring, storePosture, subRunner, subagentSteerRegistry, taskAttachmentStore, taskLimitCaps, taskTimeoutSec, toolApproval, toolResultStore, usageWindowStore, userInputLedger, webSearchProvider, workflowAgentRegistry, workflowAgentSessionIndex, workflowParkDecisions, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable, orgDeliveryGate } = ctx;
|
|
35
|
+
const { peerDesk, approvalAskAudit, approvalExemptionStore, approvalNonceStore, authorize, backend, backgroundAgentStore, brain, breakerState, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, parkCommits, config, webAdmin, consolidationValve, costQuota, belowTaskChainPatterns, deploymentMods, deploymentModsLoaded, deviceLane, drainState, durableEnabled, elicitation, fenceSessionOwner, fileHistoryStore, fleetBus, fleetLease, fleetUsage, governanceSeams, handslessRunner, hookAgent, hookLlm, hookWakeBus, imageBakes, imageIndex, instanceId, instrumentDegenerate, leaderEndpoint, loadedSkills, localRoot, logger, lspManager, mcpRevocations, memoryBundleFaces, memoryComplianceFaces, memoryConsolidationFaces, memoryEngine, memoryExportStores, memoryOptOutGrantStore, memoryOriginFaces, memoryPosture, memorySyncCursors, memorySyncRunner, metrics, modelUsageTracker, orgMemoryAdmission, otelExporter, outcomeSink, ownerAware, parkedReviveInheritedGate, parkedReviveSurface, perSessionCwd, perTaskImage, planCacheProbe, pricing, principalCaps, promptManifestTracker, purgeSession, question, rateLimiter, reaper, webAdminJwtVerifier, resumeAnchorStore, retentionLaneStarted, retentionLaneStore, ruleConsent, runStore, runner, runnerDeps, runtimeCapsPeekResolver, sandboxGitPlane, scenarioDetails, scenarios, selectEnvTool, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionAudit, sessionEnvSelection, sessionMemoryStatusFace, sessionPolicyStore, sessionTitler, sessionWatchRegistry, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, sessionResidentBackground, 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;
|
|
36
36
|
const stores = {
|
|
37
37
|
runStore,
|
|
38
38
|
resumeAnchorStore: resumeAnchorStore ? resumeAnchorStore : undefined,
|
|
@@ -195,6 +195,7 @@ export async function runStage10(ctx) {
|
|
|
195
195
|
configRefreshNow: () => webAdmin.refreshNow(),
|
|
196
196
|
webAdminManagedKeys: () => webAdmin.centerManagedKeys(),
|
|
197
197
|
drainState,
|
|
198
|
+
sessionResidentBackground,
|
|
198
199
|
servingLease: servingLease ? () => servingLease.view() : undefined,
|
|
199
200
|
storePosture,
|
|
200
201
|
centerWiring: createCenterWiringReader({ config, pullState: () => webAdmin.centerPullState(), fleetLease, usageReport: fleetUsage !== undefined }),
|
|
@@ -208,7 +209,7 @@ export async function runStage10(ctx) {
|
|
|
208
209
|
peerDesk,
|
|
209
210
|
getKeyResolver: () => webAdmin.getKeyResolver(),
|
|
210
211
|
taskAttachmentStore, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner,
|
|
211
|
-
hookLlm, hookAgent, fleetBus, hookWakeBus, resumeAnchorStore, ownerAware, taskLimitCaps, taskTimeoutSec,
|
|
212
|
+
hookLlm, hookAgent, belowTaskChainPatterns, fleetBus, hookWakeBus, resumeAnchorStore, ownerAware, taskLimitCaps, taskTimeoutSec,
|
|
212
213
|
selectEnvTool, sendUserFileToolSpec, memoryEngine, memorySyncRunner, durableEnabled, approvalExemptionStore,
|
|
213
214
|
checkpointStore, imageIndex, perTaskImage,
|
|
214
215
|
sessionEnvSelection,
|