@sema-agent/server 7.125.1 → 7.126.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 +195 -2
- package/README.md +2 -2
- package/README.zh-CN.md +2 -2
- package/USAGE.md +263 -140
- package/deploy/sema-up/README.md +1 -1
- package/deploy/sema-up/chart/templates/networkpolicy-sandbox.yaml +47 -0
- package/deploy/sema-up/chart/templates/sandbox-rbac.yaml +5 -1
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +2 -2
- package/deploy/sema-up/chart/templates/server.yaml +1 -1
- package/deploy/sema-up/chart/values.yaml +12 -0
- package/deploy/sema-up/cluster-up.sh +10 -10
- package/deploy/sema-up/kube-up.sh +11 -10
- package/deploy/sema-up/lib/dataroot.sh +1 -1
- package/deploy/sema-up/lib/envf.sh +5 -5
- package/deploy/sema-up/lib/flagshape.sh +5 -5
- package/deploy/sema-up/lib/lanes.py +1 -1
- package/deploy/sema-up/lib/parse-machines.py +2 -2
- package/deploy/sema-up/lib/shell-access.sh +1 -1
- package/deploy/sema-up/preflight.sh +4 -4
- package/deploy/sema-up/sema-up.sh +33 -33
- package/deploy/sema-up/smoke.sh +3 -3
- package/deploy/sema-up/stack/compose.yaml +1 -1
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +6 -2
- package/dist/approval-card.d.ts +20 -4
- package/dist/approval-content-kind.d.ts +38 -22
- package/dist/approval-content-kind.js +20 -4
- package/dist/audit.js +2 -0
- package/dist/bench/s1/arms.d.ts +9 -37
- package/dist/bench/s1/arms.js +4 -61
- package/dist/bench/s1/live-deps.d.ts +4 -10
- package/dist/bench/s1/live-deps.js +1 -222
- package/dist/bench/s1/oracle.d.ts +1 -1
- package/dist/bench/s1/reviewer.d.ts +1 -1
- package/dist/bench/s1/row.d.ts +5 -7
- package/dist/bench/s1/row.js +0 -2
- package/dist/bench/s1/run-firm.d.ts +2 -2
- package/dist/bench/s1/run-firm.js +1 -4
- package/dist/bench/s1/runner-ctx.d.ts +17 -29
- package/dist/bench/s1/runner-ctx.js +3 -7
- package/dist/bench/s1/tasks.d.ts +9 -46
- package/dist/bench/s1/tasks.js +4 -63
- package/dist/boot/execution-env.d.ts +38 -26
- package/dist/boot/execution-env.js +71 -38
- package/dist/boot/memory-boundary.d.ts +1 -1
- package/dist/boot/parked-revive-gate.d.ts +0 -3
- package/dist/boot/parked-revive-gate.js +2 -2
- package/dist/boot/resolve-spec.d.ts +0 -2
- package/dist/boot/resolve-spec.js +12 -17
- package/dist/boot/retention-lane.d.ts +12 -1
- package/dist/boot/retention-lane.js +2 -0
- package/dist/boot/runner-deps.d.ts +5 -5
- package/dist/boot/runner-deps.js +5 -16
- package/dist/boot/session-faces.d.ts +5 -1
- package/dist/boot/session-faces.js +37 -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 +2 -2
- package/dist/boot/stage-05-execution-env.js +7 -4
- package/dist/boot/stage-06-runners.d.ts +2 -3
- package/dist/boot/stage-06-runners.js +8 -7
- package/dist/boot/stage-07-capability-layer.d.ts +2 -3
- package/dist/boot/stage-07-capability-layer.js +3 -4
- package/dist/boot/stage-08-reapers.d.ts +2 -3
- package/dist/boot/stage-08-reapers.js +2 -2
- package/dist/boot/stage-09-leader.d.ts +2 -3
- package/dist/boot/stage-09-leader.js +2 -1
- package/dist/boot/stage-10-http-server.d.ts +2 -3
- package/dist/boot/stage-10-http-server.js +2 -2
- package/dist/boot/stores.d.ts +1 -0
- package/dist/boot/stores.js +4 -3
- package/dist/boot/web-admin.d.ts +5 -0
- package/dist/boot/web-admin.js +28 -14
- package/dist/brain.d.ts +2 -2
- package/dist/brain.js +1 -1
- package/dist/capabilities/builtin-tools.d.ts +2 -1
- package/dist/capabilities/composite-members.d.ts +1 -1
- package/dist/capabilities/composite-members.js +1 -1
- package/dist/capabilities/hands-lane.d.ts +9 -6
- package/dist/capabilities/hands-lane.js +2 -2
- package/dist/capabilities/memory-notice.d.ts +27 -22
- package/dist/capabilities/memory-notice.js +15 -17
- package/dist/capabilities/scenarios.d.ts +9 -14
- package/dist/capabilities/scenarios.js +5 -50
- package/dist/capability-facts.d.ts +22 -11
- package/dist/capability-facts.js +13 -6
- package/dist/config-catalog.js +11 -4
- package/dist/config-provider.d.ts +5 -1
- package/dist/config-provider.js +23 -4
- package/dist/config-types.d.ts +14 -1
- package/dist/config.js +39 -6
- package/dist/deployment-governance.d.ts +19 -21
- package/dist/deployment-governance.js +7 -8
- package/dist/env-name-allowlist-knobs.d.ts +5 -5
- package/dist/env-name-allowlist-knobs.js +1 -0
- package/dist/execution-lane-caps.js +2 -2
- package/dist/hooks/hook-runner.d.ts +84 -30
- package/dist/hooks/hook-runner.js +74 -41
- package/dist/http/admission.js +12 -9
- package/dist/http/durable-run-leg.d.ts +5 -4
- package/dist/http/durable-run-leg.js +1 -1
- package/dist/http/idempotency.d.ts +28 -6
- package/dist/http/idempotency.js +10 -2
- package/dist/http/principal-gate.d.ts +14 -0
- package/dist/http/principal-gate.js +7 -0
- package/dist/http/request-guards.d.ts +2 -1
- package/dist/http/request-guards.js +14 -14
- package/dist/http/resume-legs.d.ts +2 -2
- package/dist/http/resume-legs.js +5 -4
- package/dist/http/route-ctx.d.ts +8 -6
- package/dist/http/routes/a2a-serve.js +11 -7
- package/dist/http/routes/approvals-assistant.js +18 -3
- package/dist/http/routes/background.d.ts +1 -1
- package/dist/http/routes/background.js +1 -1
- package/dist/http/routes/capabilities.js +10 -2
- package/dist/http/routes/mcp-reconnect.js +1 -1
- package/dist/http/routes/runs.d.ts +4 -3
- package/dist/http/routes/runs.js +12 -13
- package/dist/http/routes/session-sync.js +14 -11
- package/dist/http/routes/sessions.js +9 -9
- package/dist/http/routes/side-query.js +6 -19
- package/dist/http/routes/tasks.js +12 -11
- package/dist/http/server.d.ts +4 -0
- package/dist/http/server.js +2 -2
- package/dist/http/submit-replay.d.ts +15 -8
- package/dist/http/submit-replay.js +6 -0
- package/dist/http/wire-types.d.ts +7 -9
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/internal-run-env.d.ts +30 -0
- package/dist/internal-run-env.js +11 -0
- package/dist/leader/wire.js +3 -2
- package/dist/memory-scope.d.ts +19 -7
- package/dist/memory-scope.js +25 -8
- package/dist/observability/fail-open.d.ts +15 -3
- package/dist/observability/fail-open.js +15 -3
- package/dist/observability/metrics.d.ts +0 -1
- package/dist/observability/metrics.js +0 -3
- package/dist/observability/run-terminal.js +69 -4
- package/dist/permission-rule-vocab.d.ts +3 -2
- package/dist/permission-rule-vocab.js +1 -1
- package/dist/plan-cache-probe.d.ts +3 -2
- package/dist/plugins/approval-ask-store-sql.d.ts +1 -1
- package/dist/plugins/caching-session-store.d.ts +3 -0
- package/dist/plugins/caching-session-store.js +3 -0
- package/dist/plugins/checkpoint-store-sql.d.ts +42 -28
- package/dist/plugins/checkpoint-store-sql.js +57 -11
- package/dist/plugins/file-run-store.d.ts +25 -21
- package/dist/plugins/file-run-store.js +70 -34
- package/dist/plugins/local-checkpoint-store.d.ts +8 -5
- package/dist/plugins/local-checkpoint-store.js +5 -15
- package/dist/plugins/local-session-store.d.ts +66 -7
- package/dist/plugins/local-session-store.js +168 -101
- package/dist/plugins/mailbox-recipient-lifecycle.d.ts +1 -1
- package/dist/plugins/memory-run-store.d.ts +19 -3
- package/dist/plugins/memory-run-store.js +38 -3
- package/dist/plugins/one-time-migrations.d.ts +141 -39
- package/dist/plugins/one-time-migrations.js +32 -143
- package/dist/plugins/pg-pool.js +11 -1
- package/dist/plugins/pg-session-storage.d.ts +2 -0
- package/dist/plugins/pg-session-storage.js +9 -5
- package/dist/plugins/remote-env-adb.d.ts +3 -0
- package/dist/plugins/remote-env-adb.js +1 -0
- package/dist/plugins/remote-env-device.d.ts +3 -0
- package/dist/plugins/remote-env-device.js +1 -0
- package/dist/plugins/remote-env-e2b.d.ts +4 -0
- package/dist/plugins/remote-env-e2b.js +2 -1
- package/dist/plugins/remote-env-host.d.ts +12 -0
- package/dist/plugins/remote-env-host.js +11 -1
- package/dist/plugins/remote-env-k8s.d.ts +227 -39
- package/dist/plugins/remote-env-k8s.js +450 -75
- package/dist/plugins/remote-env-local-docker.d.ts +4 -0
- package/dist/plugins/remote-env-local-docker.js +2 -1
- package/dist/plugins/remote-env-ssh.d.ts +3 -0
- package/dist/plugins/remote-env-ssh.js +1 -0
- package/dist/plugins/retention-store-sql.d.ts +4 -1
- package/dist/plugins/retention-store-sql.js +11 -9
- package/dist/plugins/run-store-sql.d.ts +44 -6
- package/dist/plugins/run-store-sql.js +92 -27
- package/dist/plugins/session-capture-record-store-sql.d.ts +2 -3
- package/dist/plugins/sql-driver.d.ts +2 -1
- package/dist/plugins/store-backend.js +1 -1
- package/dist/plugins/store-contracts.d.ts +17 -3
- package/dist/plugins/tidb-pool.js +15 -3
- package/dist/plugins/tidb-session-storage.js +3 -2
- package/dist/plugins/tidb-session-store.d.ts +2 -0
- package/dist/plugins/tidb-session-store.js +6 -2
- package/dist/request-key-closure.d.ts +12 -0
- package/dist/request-key-closure.js +3 -3
- package/dist/router/route-orchestration.d.ts +3 -11
- package/dist/router/route-orchestration.js +0 -4
- package/dist/rule-entry-list.js +0 -4
- package/dist/rules-consent.js +3 -0
- package/dist/run-local.d.ts +5 -4
- package/dist/run-local.js +23 -17
- package/dist/runs.js +1 -0
- package/dist/security.d.ts +7 -0
- package/dist/security.js +5 -0
- package/dist/server-secret-env.d.ts +10 -4
- package/dist/server-secret-env.js +4 -1
- package/dist/session-incarnation.d.ts +46 -2
- package/dist/session-incarnation.js +14 -3
- package/dist/session-sync-kernel.d.ts +10 -3
- package/dist/spec-fields.d.ts +24 -8
- package/dist/spec-fields.js +21 -2
- package/dist/task-workflow.d.ts +6 -4
- package/dist/task-workflow.js +3 -2
- package/dist/tool-approval.d.ts +78 -6
- package/dist/tool-approval.js +7 -3
- package/dist/trace/core-keyset-guard.d.ts +4 -4
- package/dist/trace/engine-notice-wire.d.ts +26 -1
- package/dist/trace/engine-notice-wire.js +7 -2
- package/dist/trace/project.d.ts +8 -3
- package/dist/trace/project.js +15 -1
- package/dist/trace/self-minted-wire.d.ts +104 -2
- package/dist/trace/self-minted-wire.js +35 -0
- package/dist/web-admin-client/apply-effective.d.ts +13 -7
- package/dist/web-admin-client/apply-effective.js +11 -26
- package/dist/web-admin-client/apply-ledger.d.ts +2 -2
- package/dist/web-admin-client/candidate-gate.d.ts +39 -4
- package/dist/web-admin-client/candidate-gate.js +9 -2
- package/dist/web-admin-client/facade.d.ts +2 -2
- package/dist/web-admin-client/http-client.d.ts +3 -1
- package/dist/web-admin-client/http-client.js +4 -3
- package/dist/web-admin-client/read-warnings.d.ts +33 -5
- package/dist/web-admin-client/read-warnings.js +41 -6
- package/dist/web-admin-client/types.d.ts +11 -5
- package/dist/workspace-cache.d.ts +45 -0
- package/dist/workspace-cache.js +30 -0
- package/dist/workspace-space-commit.d.ts +116 -0
- package/dist/workspace-space-commit.js +117 -0
- package/dist/workspace-space.d.ts +75 -9
- package/dist/workspace-space.js +52 -1
- package/package.json +4 -4
- package/dist/boot/session-incarnation-seat.d.ts +0 -41
- package/dist/boot/session-incarnation-seat.js +0 -69
- package/dist/capabilities/code-review-council.d.ts +0 -49
- package/dist/capabilities/code-review-council.js +0 -111
- package/dist/capabilities/collab-wire.d.ts +0 -36
- package/dist/capabilities/collab-wire.js +0 -2
- package/dist/capabilities/collab-workflows.d.ts +0 -47
- package/dist/capabilities/collab-workflows.js +0 -90
- package/dist/capabilities/prompts/code-review.d.ts +0 -25
- package/dist/capabilities/prompts/code-review.js +0 -39
- package/dist/capabilities/prompts/team.d.ts +0 -10
- package/dist/capabilities/prompts/team.js +0 -6
- package/dist/capabilities/team.d.ts +0 -113
- package/dist/capabilities/team.js +0 -70
|
@@ -2,10 +2,10 @@ import { uuidv7 } from "@sema-agent/core";
|
|
|
2
2
|
import { openStores } from "./stores.js";
|
|
3
3
|
export async function runStage03(ctx) {
|
|
4
4
|
const { config, localRoot, logger, metrics } = ctx;
|
|
5
|
-
const { backend, storePosture, memoryEngine, memorySyncCursors, rosterStore, backgroundAgentStore, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportBackend, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngineFacts, } = await openStores({ config, logger, metrics, localRoot });
|
|
5
|
+
const { backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportBackend, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngineFacts, } = await openStores({ config, logger, metrics, localRoot });
|
|
6
6
|
const instanceId = uuidv7();
|
|
7
7
|
const sessionCaptureRecords = backend?.sessionCaptureRecords();
|
|
8
8
|
const sessionCaptureRecordStore = sessionCaptureRecords?.();
|
|
9
|
-
return { ...ctx, backend, backgroundAgentStore, breakerState, instanceId, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memoryExportBackend, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecordStore, sessionCaptureRecords, sessionStore, sqlEngineFacts, storePosture, taskAttachmentStore, taskListLane, usageWindowStore };
|
|
9
|
+
return { ...ctx, backend, backgroundAgentStore, breakerState, engineDataRoot, instanceId, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memoryExportBackend, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecordStore, sessionCaptureRecords, sessionStore, sqlEngineFacts, storePosture, taskAttachmentStore, taskListLane, usageWindowStore };
|
|
10
10
|
}
|
|
11
11
|
//# sourceMappingURL=stage-03-store-backend.js.map
|
|
@@ -44,6 +44,7 @@ export declare function runStage04(ctx: Awaited<ReturnType<typeof runStage03>>):
|
|
|
44
44
|
backend: import("../index.js").StoreBackend | undefined;
|
|
45
45
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
46
46
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
47
|
+
engineDataRoot: string;
|
|
47
48
|
instanceId: string;
|
|
48
49
|
mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
|
|
49
50
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
@@ -6,12 +6,11 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
|
|
|
6
6
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
7
7
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
8
8
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
9
|
-
|
|
9
|
+
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
10
10
|
perSessionCwd: Map<string, string>;
|
|
11
11
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
12
12
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
13
13
|
sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
|
|
14
|
-
sessionIncarnationOf: (sid: string) => string | undefined;
|
|
15
14
|
setSessionCwd: (sid: string, cwd: string) => void;
|
|
16
15
|
setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
|
|
17
16
|
setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
|
|
@@ -60,6 +59,7 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
|
|
|
60
59
|
backend: import("../index.js").StoreBackend | undefined;
|
|
61
60
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
62
61
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
62
|
+
engineDataRoot: string;
|
|
63
63
|
instanceId: string;
|
|
64
64
|
mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
|
|
65
65
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
@@ -2,15 +2,18 @@ import { createToolTracer, createPermissionDeniedMeter } from "../observability/
|
|
|
2
2
|
import { composeHooks } from "../hooks/hook-runner.js";
|
|
3
3
|
import { assertDeviceLaneWired, createDeviceLane } from "./device-lane.js";
|
|
4
4
|
import { assertWorkspaceSpaceReadable, createExecutionEnv } from "./execution-env.js";
|
|
5
|
-
import {
|
|
5
|
+
import { incarnationReadOf } from "../session-incarnation.js";
|
|
6
6
|
import * as facts from "../capability-facts.js";
|
|
7
7
|
import { sessionStoreLabelOf } from "../store-posture.js";
|
|
8
|
+
import { runStore } from "./late-binds.js";
|
|
8
9
|
export function runStage05(ctx) {
|
|
9
10
|
const { backend, config, instanceId, logger, metrics, sessionStore, taskAttachmentStore } = ctx;
|
|
10
11
|
const deviceLane = config.remoteExec?.provider === "device" ? createDeviceLane({ config, logger, metrics, backend, replicaId: instanceId }) : undefined;
|
|
11
|
-
const
|
|
12
|
+
const incarnationOf = incarnationReadOf(sessionStore);
|
|
13
|
+
const spaceCommits = backend !== undefined ? () => runStore : undefined;
|
|
14
|
+
const { perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, setSessionInheritEnv, fenceSessionOwner, dropSessionScoped, executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, spaceReclaimer, } = createExecutionEnv({ config, logger, metrics, taskAttachmentStore, ...(deviceLane ? { deviceLane } : {}), ...(spaceCommits !== undefined ? { spaceCommits } : {}), ...(incarnationOf !== undefined ? { incarnationOf } : {}) });
|
|
12
15
|
assertDeviceLaneWired(config.remoteExec?.provider === "device", deviceLane, executionEnvFactory !== undefined);
|
|
13
|
-
assertWorkspaceSpaceReadable(facts.workspaceSpace(config),
|
|
16
|
+
assertWorkspaceSpaceReadable(facts.workspaceSpace(config), { incarnationOf, spaceCommits }, facts.workspaceCache(config), sessionStoreLabelOf(config.sessionBackend, backend?.kind));
|
|
14
17
|
const toolTracer = config.toolTrace ? createToolTracer(logger) : undefined;
|
|
15
18
|
if (toolTracer)
|
|
16
19
|
logger.info("tool_trace_enabled", {});
|
|
@@ -18,6 +21,6 @@ export function runStage05(ctx) {
|
|
|
18
21
|
...(toolTracer ? composeHooks(createPermissionDeniedMeter(metrics), toolTracer) : createPermissionDeniedMeter(metrics)),
|
|
19
22
|
...(config.hooksTimeoutMs !== undefined ? { timeoutMs: config.hooksTimeoutMs } : {}),
|
|
20
23
|
};
|
|
21
|
-
return { ...ctx, deploymentHooks, deviceLane, dropSessionScoped, executionEnvFactory, fenceSessionOwner, lspManager,
|
|
24
|
+
return { ...ctx, deploymentHooks, deviceLane, dropSessionScoped, executionEnvFactory, fenceSessionOwner, lspManager, spaceReclaimer, perSessionCwd, perTaskImage, sendUserFileTaskEnvs, sessionEnvSelection, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, worktreeReap };
|
|
22
25
|
}
|
|
23
26
|
//# sourceMappingURL=stage-05-execution-env.js.map
|
|
@@ -20,7 +20,6 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
|
|
|
20
20
|
fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
|
|
21
21
|
governanceSeams: import("./governance-seams.js").GovernanceSeams;
|
|
22
22
|
handslessRunner: Runner;
|
|
23
|
-
handslessSubRunner: Runner;
|
|
24
23
|
hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
|
|
25
24
|
hookAgentRunner: Runner;
|
|
26
25
|
hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
|
|
@@ -67,12 +66,11 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
|
|
|
67
66
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
68
67
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
69
68
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
70
|
-
|
|
69
|
+
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
71
70
|
perSessionCwd: Map<string, string>;
|
|
72
71
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
73
72
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
74
73
|
sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
|
|
75
|
-
sessionIncarnationOf: (sid: string) => string | undefined;
|
|
76
74
|
setSessionCwd: (sid: string, cwd: string) => void;
|
|
77
75
|
setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
|
|
78
76
|
setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
|
|
@@ -121,6 +119,7 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
|
|
|
121
119
|
backend: import("../index.js").StoreBackend | undefined;
|
|
122
120
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
123
121
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
122
|
+
engineDataRoot: string;
|
|
124
123
|
instanceId: string;
|
|
125
124
|
mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
|
|
126
125
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
@@ -3,7 +3,7 @@ import { outwardPlane } from "../terminal.js";
|
|
|
3
3
|
import { createSessionTitler } from "../session-titler.js";
|
|
4
4
|
import { cardRuleScopeRoot } from "../task-cwd.js";
|
|
5
5
|
import { ForkRoutingSessionStore } from "../plugins/fork-routing-session-store.js";
|
|
6
|
-
import {
|
|
6
|
+
import { withoutHands } from "../capabilities/hands-lane.js";
|
|
7
7
|
import { redactSecrets } from "../trace/redact.js";
|
|
8
8
|
import { hasServiceAuth } from "../http/server.js";
|
|
9
9
|
import { workflowModelAllowlistFor } from "../task-workflow.js";
|
|
@@ -20,8 +20,9 @@ import { createOrgMemoryAdmissionWiring } from "./org-memory.js";
|
|
|
20
20
|
import { createGovernanceSeams } from "./governance-seams.js";
|
|
21
21
|
import { createSharedMemoryScopeAuthorizer } from "../shared-memory-scope-authorizer.js";
|
|
22
22
|
import { parkedAskRedeem, runStore } from "./late-binds.js";
|
|
23
|
+
import { withInternalRunEnvs } from "../internal-run-env.js";
|
|
23
24
|
export function runStage06(ctx) {
|
|
24
|
-
const { backend, backgroundAgentStore, brain,
|
|
25
|
+
const { backend, backgroundAgentStore, brain, engineDataRoot, config, webAdmin, consolidationValve, deploymentHooks, executionEnvFactory, fileHistoryStore, localRoot, logger, lspManager, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memorySyncRunner, metrics, perSessionCwd, permissionRuleProvider, pricing, rosterStore, ruleConsent, sendUserFileTaskEnvs, sessionCaptureRecordStore, sessionCaptureRecords, sessionPolicyStore, sessionStore, taskAttachmentStore, taskListLane, toolResultStore, tracer, usageWindowStore } = ctx;
|
|
25
26
|
const { sqlWorkflowRunStore, workflowNotifyJournal, workflowCompletionInbox, deliverWorkflowCompletion, workflowNotifyGate, fleetBus, workflowRunStore, workflowJournalStore, outcomeSink, workflowRecoverOpts, workflowAgentRegistry, subagentSteerRegistry, workflowAgentSessionIndex, } = createWorkflowOrchestration({ config, logger, metrics, localRoot, backend, getRunStore: () => runStore });
|
|
26
27
|
const parkCommitted = backend?.checkpoint && config.durableApproval ? createParkCommitWatch(backend.checkpoint(logger)) : undefined;
|
|
27
28
|
const checkpointStore = parkCommitted?.store;
|
|
@@ -110,9 +111,9 @@ export function runStage06(ctx) {
|
|
|
110
111
|
consolidationSeat,
|
|
111
112
|
hands: commitHands,
|
|
112
113
|
mcpRevocations,
|
|
113
|
-
sessionIncarnationOf,
|
|
114
114
|
config, logger, metrics, localRoot, promptSource: webAdmin.promptSource, rosterStore, backgroundAgentStore, mailboxStore, mailboxRecipientLifecycle, usageWindowStore, brain,
|
|
115
115
|
pricing, tracer, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine,
|
|
116
|
+
engineDataRoot,
|
|
116
117
|
sessionCaptureRecords,
|
|
117
118
|
memorySyncRunner, toolResultStore: runnerOffloadStore, checkpointStore, sessionPolicyStore, runtimeCapsResolver, fileHistoryStore,
|
|
118
119
|
permissionRuleStore: permissionRuleProvider,
|
|
@@ -123,9 +124,9 @@ export function runStage06(ctx) {
|
|
|
123
124
|
getRunStore: () => runStore,
|
|
124
125
|
});
|
|
125
126
|
const runner = new Runner(runnerDeps);
|
|
126
|
-
const handslessRunner = new Runner(
|
|
127
|
+
const handslessRunner = new Runner(withoutHands(runnerDeps));
|
|
127
128
|
const { hookModelFor, hookLlm } = createHookLlm({ config, getKeyResolver: () => webAdmin.getKeyResolver(), metrics });
|
|
128
|
-
const hookAgentRunner = new Runner({ ...runnerDeps, sessionStore: new TtlSessionStore({ defaultTtlDays: 1 / 24 }) });
|
|
129
|
+
const hookAgentRunner = new Runner(withInternalRunEnvs({ ...runnerDeps, sessionStore: new TtlSessionStore({ defaultTtlDays: 1 / 24 }) }));
|
|
129
130
|
const agentHookCall = async ({ prompt, model, timeoutMs, system }) => {
|
|
130
131
|
const pick = hookModelFor(model);
|
|
131
132
|
if (!pick.ok)
|
|
@@ -196,6 +197,7 @@ export function runStage06(ctx) {
|
|
|
196
197
|
orgMemoryAdmission,
|
|
197
198
|
governanceSeams,
|
|
198
199
|
sharedMemoryStores: sharedMemoryStore ? sharedMemoryStore : undefined,
|
|
200
|
+
engineDataRoot,
|
|
199
201
|
}),
|
|
200
202
|
sessionStore: subRunnerSessions,
|
|
201
203
|
onBackgroundChildEvent: runnerDeps.onBackgroundChildEvent ? runnerDeps.onBackgroundChildEvent : undefined,
|
|
@@ -204,7 +206,6 @@ export function runStage06(ctx) {
|
|
|
204
206
|
onError: runnerDeps.onError ? runnerDeps.onError : undefined,
|
|
205
207
|
};
|
|
206
208
|
const subRunner = new Runner(subRunnerDeps);
|
|
207
|
-
|
|
208
|
-
return { ...ctx, approvalAskAudit, approvalExemptionStore, centerRuntimeCapsResolver, checkpointStore, parkCommits, durableEnabled, elicitation, fleetBus, governanceSeams, handslessRunner, handslessSubRunner, hookAgent, hookAgentRunner, hookLlm, mcpRevocations, memoryConsolidationFaces, memoryOptOutGrantStore, orgMemoryAdmission, outcomeSink, principalCaps, question, retentionExecutor, retentionLaneStore, runner, runnerDeps, runtimeCapsPeekResolver, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionTitler, sharedMemoryStore, sqlWorkflowRunStore, streamApprovalGate, subRunner, subRunnerSessions, subagentSteerRegistry, toolApproval, workflowAgentRegistry, workflowAgentSessionIndex, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable };
|
|
209
|
+
return { ...ctx, approvalAskAudit, approvalExemptionStore, centerRuntimeCapsResolver, checkpointStore, parkCommits, durableEnabled, elicitation, fleetBus, governanceSeams, handslessRunner, hookAgent, hookAgentRunner, hookLlm, mcpRevocations, memoryConsolidationFaces, memoryOptOutGrantStore, orgMemoryAdmission, outcomeSink, principalCaps, question, retentionExecutor, retentionLaneStore, runner, runnerDeps, runtimeCapsPeekResolver, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionTitler, sharedMemoryStore, sqlWorkflowRunStore, streamApprovalGate, subRunner, subRunnerSessions, subagentSteerRegistry, toolApproval, workflowAgentRegistry, workflowAgentSessionIndex, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable };
|
|
209
210
|
}
|
|
210
211
|
//# sourceMappingURL=stage-06-runners.js.map
|
|
@@ -35,7 +35,6 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
|
|
|
35
35
|
fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
|
|
36
36
|
governanceSeams: import("./governance-seams.js").GovernanceSeams;
|
|
37
37
|
handslessRunner: import("@sema-agent/core").Runner;
|
|
38
|
-
handslessSubRunner: import("@sema-agent/core").Runner;
|
|
39
38
|
hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
|
|
40
39
|
hookAgentRunner: import("@sema-agent/core").Runner;
|
|
41
40
|
hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
|
|
@@ -82,12 +81,11 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
|
|
|
82
81
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
83
82
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
84
83
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
85
|
-
|
|
84
|
+
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
86
85
|
perSessionCwd: Map<string, string>;
|
|
87
86
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
88
87
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
89
88
|
sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
|
|
90
|
-
sessionIncarnationOf: (sid: string) => string | undefined;
|
|
91
89
|
setSessionCwd: (sid: string, cwd: string) => void;
|
|
92
90
|
setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
|
|
93
91
|
setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
|
|
@@ -136,6 +134,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
|
|
|
136
134
|
backend: import("../index.js").StoreBackend | undefined;
|
|
137
135
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
138
136
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
137
|
+
engineDataRoot: string;
|
|
139
138
|
instanceId: string;
|
|
140
139
|
mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
|
|
141
140
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
@@ -27,7 +27,7 @@ import { buildDisplaySafeUrl } from "../trace/redact.js";
|
|
|
27
27
|
import * as facts from "../capability-facts.js";
|
|
28
28
|
import { WEB_ADMIN_ENV } from "@sema-agent/settings-schema";
|
|
29
29
|
export async function runStage07(ctx) {
|
|
30
|
-
const { approvalAskAudit, approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, webAdmin, counterDegradeHook, durableEnabled,
|
|
30
|
+
const { approvalAskAudit, approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, webAdmin, counterDegradeHook, durableEnabled, instanceId, localRoot, logger, question, runner, runnerDeps, sendUserFileToolSpec, sessionEnvSelection, sessionStore, subRunner, subRunnerSessions, taskListLane, toolApproval } = ctx;
|
|
31
31
|
const authorize = createAuthorizer(config, sessionStore);
|
|
32
32
|
const runStore = backend ? backend.run() : undefined;
|
|
33
33
|
bindRunStore(runStore);
|
|
@@ -153,8 +153,8 @@ export async function runStage07(ctx) {
|
|
|
153
153
|
const ensureChildSessionDurable = checkpointStore && config.sessionBackend === "tidb" ? (sessionId) => ensureChildSessionDurableWithPromotion(sessionStore, subRunnerSessions, sessionId) : undefined;
|
|
154
154
|
const webFetchSummarize = createWebFetchSummarizeLane({ brain, config, getKeyResolver: () => webAdmin.getKeyResolver(), logger });
|
|
155
155
|
const scenarioDeps = {
|
|
156
|
-
runner, subRunner,
|
|
157
|
-
webSearch: webSearch ? webSearch : undefined,
|
|
156
|
+
runner, subRunner, model: DEFAULT_MODEL_REF, skills, repoClient, requirePrincipal: config.requirePrincipal,
|
|
157
|
+
webSearch: webSearch ? webSearch : undefined, logger, webFetchSummarize,
|
|
158
158
|
backgroundAgentStore: backgroundAgentStore ? backgroundAgentStore : undefined,
|
|
159
159
|
checkpointStore: checkpointStore ? checkpointStore : undefined,
|
|
160
160
|
ensureChildSessionDurable: ensureChildSessionDurable ? ensureChildSessionDurable : undefined,
|
|
@@ -168,7 +168,6 @@ export async function runStage07(ctx) {
|
|
|
168
168
|
const parkedReviveInheritedGate = parkedReviveSurface && config.durableApproval
|
|
169
169
|
? createParkedReviveInheritedGate({
|
|
170
170
|
config, question, logger, localRoot,
|
|
171
|
-
memoryEngineRoot: memoryEngine?.root,
|
|
172
171
|
approverSeat: createRunnerDepsOnAsk(toolApproval),
|
|
173
172
|
approvalExemptionStore,
|
|
174
173
|
...(runnerDeps.runtimeCapsResolver ? { resolveRuntimeCaps: runnerDeps.runtimeCapsResolver } : {}),
|
|
@@ -48,7 +48,6 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
|
|
|
48
48
|
fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
|
|
49
49
|
governanceSeams: import("./governance-seams.js").GovernanceSeams;
|
|
50
50
|
handslessRunner: Runner;
|
|
51
|
-
handslessSubRunner: Runner;
|
|
52
51
|
hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
|
|
53
52
|
hookAgentRunner: Runner;
|
|
54
53
|
hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
|
|
@@ -95,12 +94,11 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
|
|
|
95
94
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
96
95
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
97
96
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
98
|
-
|
|
97
|
+
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
99
98
|
perSessionCwd: Map<string, string>;
|
|
100
99
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
101
100
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
102
101
|
sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
|
|
103
|
-
sessionIncarnationOf: (sid: string) => string | undefined;
|
|
104
102
|
setSessionCwd: (sid: string, cwd: string) => void;
|
|
105
103
|
setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
|
|
106
104
|
setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
|
|
@@ -149,6 +147,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
|
|
|
149
147
|
backend: import("../index.js").StoreBackend | undefined;
|
|
150
148
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
151
149
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
150
|
+
engineDataRoot: string;
|
|
152
151
|
instanceId: string;
|
|
153
152
|
mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
|
|
154
153
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
@@ -5,7 +5,7 @@ import { startRetentionLane, RETENTION_LEASE_TTL_FACTOR } from "./retention-lane
|
|
|
5
5
|
import { createLimitSync } from "./limit-sync.js";
|
|
6
6
|
import { runDenySweep } from "./late-binds.js";
|
|
7
7
|
export function runStage08(ctx) {
|
|
8
|
-
const { approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure,
|
|
8
|
+
const { approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, spaceReclaimer, handslessRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, rosterStore, runStore, runner, sqlWorkflowRunStore, subRunner, taskAttachmentStore, toolApproval, toolResultStore, userInputLedger, workflowJournalStore, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
|
|
9
9
|
const reaper = startReapers({
|
|
10
10
|
config, logger, metrics, localRoot, backend, subRunner, runStore, checkpointStore, parkCommits,
|
|
11
11
|
rateLimiter, costQuota, toolResultStore, fileHistoryErasure, taskAttachmentStore, imageBakes, worktreeReap,
|
|
@@ -30,6 +30,7 @@ export function runStage08(ctx) {
|
|
|
30
30
|
},
|
|
31
31
|
audit: { append: (row) => retentionLaneStore.appendAudit(row, Date.now()) },
|
|
32
32
|
holdInForce: (domain) => retentionLaneStore.holdInForce(domain),
|
|
33
|
+
...(spaceReclaimer !== undefined ? { spaceReclaimer } : {}),
|
|
33
34
|
logger,
|
|
34
35
|
metrics,
|
|
35
36
|
now: () => Date.now(),
|
|
@@ -56,7 +57,6 @@ export function runStage08(ctx) {
|
|
|
56
57
|
["handsless", handslessRunner],
|
|
57
58
|
["hookAgent", hookAgentRunner],
|
|
58
59
|
["sub", subRunner],
|
|
59
|
-
["handslessSub", handslessSubRunner],
|
|
60
60
|
];
|
|
61
61
|
const swapRunnerDeps = (next) => {
|
|
62
62
|
for (let i = 0; i < bootRunners.length; i++) {
|
|
@@ -77,7 +77,6 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
|
|
|
77
77
|
fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
|
|
78
78
|
governanceSeams: import("./governance-seams.js").GovernanceSeams;
|
|
79
79
|
handslessRunner: import("@sema-agent/core").Runner;
|
|
80
|
-
handslessSubRunner: import("@sema-agent/core").Runner;
|
|
81
80
|
hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
|
|
82
81
|
hookAgentRunner: import("@sema-agent/core").Runner;
|
|
83
82
|
hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
|
|
@@ -124,12 +123,11 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
|
|
|
124
123
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
125
124
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
126
125
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
127
|
-
|
|
126
|
+
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
128
127
|
perSessionCwd: Map<string, string>;
|
|
129
128
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
130
129
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
131
130
|
sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
|
|
132
|
-
sessionIncarnationOf: (sid: string) => string | undefined;
|
|
133
131
|
setSessionCwd: (sid: string, cwd: string) => void;
|
|
134
132
|
setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
|
|
135
133
|
setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
|
|
@@ -178,6 +176,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
|
|
|
178
176
|
backend: import("../index.js").StoreBackend | undefined;
|
|
179
177
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
180
178
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
179
|
+
engineDataRoot: string;
|
|
181
180
|
instanceId: string;
|
|
182
181
|
mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
|
|
183
182
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
@@ -6,7 +6,7 @@ import { createLeaderFace } from "./leader.js";
|
|
|
6
6
|
import { assertStaticWiringConsistent } from "../http/routes/diagnostics.js";
|
|
7
7
|
import { buildDisplaySafeUrl } from "../trace/redact.js";
|
|
8
8
|
export function runStage09(ctx) {
|
|
9
|
-
const { approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, webAdmin, deviceLane, dropSessionScoped, durableEnabled, executionEnvFactory, fileHistoryErasure, governanceSeams, localRoot, logger, mailboxRecipientLifecycle, mailboxStore, metrics, pricing, resumeAnchorStore, runStore, runnerDeps, sessionPolicyStore, sessionStore, streamApprovalGate, taskAttachmentStore, taskListLane, toolResultStore, tracer, usageWindowStore, userInputLedgerStore, workflowCompletionInbox } = ctx;
|
|
9
|
+
const { approvalExemptionStore, backend, backgroundAgentStore, brain, checkpointStore, config, webAdmin, deviceLane, dropSessionScoped, durableEnabled, executionEnvFactory, fileHistoryErasure, governanceSeams, localRoot, logger, mailboxRecipientLifecycle, mailboxStore, metrics, pricing, resumeAnchorStore, runStore, runnerDeps, sessionPolicyStore, sessionStore, streamApprovalGate, taskAttachmentStore, spaceReclaimer, taskListLane, toolResultStore, tracer, usageWindowStore, userInputLedgerStore, workflowCompletionInbox } = ctx;
|
|
10
10
|
const { ownerAware, sessionAudit, sessionWatchRegistry, purgeSession, instrumentDegenerate, planCacheProbe } = createSessionFaces({
|
|
11
11
|
deviceStore: deviceLane?.store,
|
|
12
12
|
dropSessionScoped,
|
|
@@ -15,6 +15,7 @@ export function runStage09(ctx) {
|
|
|
15
15
|
workflowCompletionInbox, taskListLane, mailboxStore, mailboxRecipientLifecycle,
|
|
16
16
|
backgroundAgentStore,
|
|
17
17
|
userInputLedgerStore,
|
|
18
|
+
...(spaceReclaimer !== undefined ? { spaceReclaimer } : {}),
|
|
18
19
|
});
|
|
19
20
|
const leaderEndpoint = createLeaderFace({ config, logger, brain, pricing, executionEnvFactory, toolResultStore, sessionStore, checkpointStore, governanceSeams, backend, tracer, usageWindowStore, promptSource: webAdmin.promptSource, onError: runnerDeps.onError });
|
|
20
21
|
const drainState = { draining: false };
|
|
@@ -76,7 +76,6 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
|
|
|
76
76
|
fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
|
|
77
77
|
governanceSeams: import("./governance-seams.js").GovernanceSeams;
|
|
78
78
|
handslessRunner: import("@sema-agent/core").Runner;
|
|
79
|
-
handslessSubRunner: import("@sema-agent/core").Runner;
|
|
80
79
|
hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
|
|
81
80
|
hookAgentRunner: import("@sema-agent/core").Runner;
|
|
82
81
|
hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
|
|
@@ -123,12 +122,11 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
|
|
|
123
122
|
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
124
123
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
125
124
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
126
|
-
|
|
125
|
+
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
127
126
|
perSessionCwd: Map<string, string>;
|
|
128
127
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
129
128
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
130
129
|
sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
|
|
131
|
-
sessionIncarnationOf: (sid: string) => string | undefined;
|
|
132
130
|
setSessionCwd: (sid: string, cwd: string) => void;
|
|
133
131
|
setSessionInheritEnv: (sid: string, policy: import("../request-value-closure.js").TaskInheritEnv | undefined) => void;
|
|
134
132
|
setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
|
|
@@ -177,6 +175,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
|
|
|
177
175
|
backend: import("../plugins/store-backend.js").StoreBackend | undefined;
|
|
178
176
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
179
177
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
178
|
+
engineDataRoot: string;
|
|
180
179
|
instanceId: string;
|
|
181
180
|
mailboxRecipientLifecycle: import("../plugins/mailbox-recipient-lifecycle.js").MailboxRecipientLifecycle | undefined;
|
|
182
181
|
mailboxStore: import("@sema-agent/core").MailboxStore | 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, parkCommits, config, webAdmin, consolidationValve, costQuota, deploymentHooks, deviceLane, drainState, durableEnabled, elicitation, fenceSessionOwner,
|
|
32
|
+
const { approvalAskAudit, approvalExemptionStore, approvalNonceStore, authorize, backend, backgroundAgentStore, brain, breakerState, centerRuntimeCapsResolver, checkpointStore, parkCommits, config, webAdmin, consolidationValve, costQuota, deploymentHooks, 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, 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, sqlEngineFacts, sqlWorkflowRunStore, staticWiring, storePosture, subRunner, subagentSteerRegistry, taskAttachmentStore, taskLimitCaps, taskTimeoutSec, toolApproval, toolResultStore, usageWindowStore, userInputLedger, webSearchProvider, workflowAgentRegistry, workflowAgentSessionIndex, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable } = ctx;
|
|
33
33
|
const stores = {
|
|
34
34
|
runStore,
|
|
35
35
|
resumeAnchorStore: resumeAnchorStore ? resumeAnchorStore : undefined,
|
|
@@ -177,6 +177,7 @@ export async function runStage10(ctx) {
|
|
|
177
177
|
configApplyState: () => webAdmin.configApplyState(),
|
|
178
178
|
centerCredentialState: () => webAdmin.centerCredentialState(),
|
|
179
179
|
modelRefusalsState: () => webAdmin.modelRefusalsState(),
|
|
180
|
+
candidateRejectionState: () => webAdmin.candidateRejectionState(),
|
|
180
181
|
configHandoffState: () => webAdmin.configHandoffState(),
|
|
181
182
|
mcpRevocations,
|
|
182
183
|
mcpRevocationState: () => webAdmin.mcpRevocationState(),
|
|
@@ -199,7 +200,6 @@ export async function runStage10(ctx) {
|
|
|
199
200
|
getCenterPrompts: () => webAdmin.getCenterPrompts(),
|
|
200
201
|
getKeyResolver: () => webAdmin.getKeyResolver(),
|
|
201
202
|
taskAttachmentStore, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner,
|
|
202
|
-
noteSessionIncarnation,
|
|
203
203
|
hookLlm, hookAgent, fleetBus, hookWakeBus, resumeAnchorStore, ownerAware, taskLimitCaps, taskTimeoutSec,
|
|
204
204
|
selectEnvTool, sendUserFileToolSpec, memoryEngine, durableEnabled, approvalExemptionStore,
|
|
205
205
|
checkpointStore, deploymentHooks, imageIndex, perTaskImage,
|
package/dist/boot/stores.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export declare function openStores(ctx: OpenStoresCtx): Promise<{
|
|
|
20
20
|
backend: MemoryBackend;
|
|
21
21
|
root: string;
|
|
22
22
|
} | undefined;
|
|
23
|
+
engineDataRoot: string;
|
|
23
24
|
memorySyncCursors: MemorySyncStore | undefined;
|
|
24
25
|
rosterStore: import("@sema-agent/core").RosterStore | undefined;
|
|
25
26
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
package/dist/boot/stores.js
CHANGED
|
@@ -119,6 +119,7 @@ export async function openStores(ctx) {
|
|
|
119
119
|
if (config.dbBackend === "local" && backend)
|
|
120
120
|
config.sessionBackend = "tidb";
|
|
121
121
|
let memoryEngine;
|
|
122
|
+
const engineDataRoot = memoryEngineRootFor(config, localRoot);
|
|
122
123
|
let memorySyncCursors;
|
|
123
124
|
let vectorMode;
|
|
124
125
|
if (config.memoryEngineBackend !== "file" && config.memoryEngineEnabled) {
|
|
@@ -169,7 +170,7 @@ export async function openStores(ctx) {
|
|
|
169
170
|
...(embedder !== undefined ? { embedder } : {}),
|
|
170
171
|
});
|
|
171
172
|
vectorMode = pgMem.vectorMode;
|
|
172
|
-
memoryEngine = { backend: pgMem, root:
|
|
173
|
+
memoryEngine = { backend: pgMem, root: engineDataRoot };
|
|
173
174
|
}
|
|
174
175
|
else {
|
|
175
176
|
const pool = backend?.mysqlPool();
|
|
@@ -181,7 +182,7 @@ export async function openStores(ctx) {
|
|
|
181
182
|
memorySyncCursors = new TiDBMemorySyncStore(pool);
|
|
182
183
|
const tidbMem = new TiDBMemoryEngineBackend(pool, { history: countedHistorySink(new TiDBMemoryHistoryStore(pool)) });
|
|
183
184
|
vectorMode = tidbMem.vectorMode;
|
|
184
|
-
memoryEngine = { backend: tidbMem, root:
|
|
185
|
+
memoryEngine = { backend: tidbMem, root: engineDataRoot };
|
|
185
186
|
}
|
|
186
187
|
logger.info("memory_engine_enabled", {
|
|
187
188
|
enabled: true,
|
|
@@ -447,7 +448,7 @@ export async function openStores(ctx) {
|
|
|
447
448
|
.startRefresh()
|
|
448
449
|
: undefined;
|
|
449
450
|
return {
|
|
450
|
-
backend, storePosture, memoryEngine, memorySyncCursors, rosterStore, backgroundAgentStore, mailboxRecipientLifecycle,
|
|
451
|
+
backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, mailboxRecipientLifecycle,
|
|
451
452
|
taskAttachmentStore, mailboxStore, memoryExportBackend, memorySyncRunner, sessionStore, breakerState,
|
|
452
453
|
usageWindowStore, memoryPosture, taskListLane, sqlEngineFacts,
|
|
453
454
|
};
|
package/dist/boot/web-admin.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ import type { ConsolidationSeatWatch } from "./memory-consolidation.js";
|
|
|
15
15
|
import type { DegradeRouteWatch } from "../brain.js";
|
|
16
16
|
import { type EngineRestartSignal } from "../web-admin-client/facade.js";
|
|
17
17
|
import { type ConfigHandoff } from "../fleet/engine-signal.js";
|
|
18
|
+
import { type CandidateRejection } from "../web-admin-client/candidate-gate.js";
|
|
18
19
|
import { type ConfigApplyLedgerView } from "../web-admin-client/apply-ledger.js";
|
|
19
20
|
import type { CenterPullView } from "../web-admin-client/pull-state.js";
|
|
20
21
|
import type { LimitSync } from "./limit-sync.js";
|
|
@@ -117,6 +118,10 @@ export interface WebAdminRuntime {
|
|
|
117
118
|
* 名 → 码 + 组拒码)。描述**最近一次被判的那份中心候选目录**(每次候选 apply 的报告 `ApplyReport.modelRefusals` 投影;组拒时就是被拒
|
|
118
119
|
* 的那份 —— 引擎自己的拒因表不换代)。没有可报的拒 / 没有配置管道 / 还没判过候选 ⇒ `undefined`(键缺席)。值变了 ⇒ 通知自报订阅者。 */
|
|
119
120
|
modelRefusalsState(): ModelRefusalsSignal | undefined;
|
|
121
|
+
/** S-1457:`GET /v1/models.candidateRejected` 的取值口 —— 最近一次候选被判官整拒的结论(`candidateRejection` 座;域集就是判官交出的 `rejected.domains`)。
|
|
122
|
+
* present-iff 当前生效的配置是因判官整拒了最近一份候选而回落的那一份:后来的候选被判 clean 即撤下;还没判过候选 / 没有配置管道 ⇒ `undefined`(键缺席)。
|
|
123
|
+
* dry-run 姿势(`webAdmin.dryRun`,compare-only)恒 `undefined`:候选从不被应用,生效配置恒是 env,拒判是预演读数(日志行照响),不是配置没换的原因。 */
|
|
124
|
+
candidateRejectionState(): CandidateRejection | undefined;
|
|
120
125
|
/** [ref] 世代账:/health 的 target/applied/失败持续时长三键 + 诊断端点的 configApply 段(同一份读数)。
|
|
121
126
|
* `undefined` = 本部署没有配置管道(纯 env worker)⇒ 两个读面的形状**逐字不变**(additive 纪律)。 */
|
|
122
127
|
configApplyState(): ConfigApplyLedgerView | undefined;
|
package/dist/boot/web-admin.js
CHANGED
|
@@ -23,7 +23,7 @@ import { applyEffective, applyCenterReadFace, mutateInPlace, logEffectiveDiff, a
|
|
|
23
23
|
import { buildConfigHandoff, buildRestartSignal, configHandoffMissing } from "../fleet/engine-signal.js";
|
|
24
24
|
import { createMcpRevocationLedger, enabledMcpEntries } from "../web-admin-client/mcp-revocation.js";
|
|
25
25
|
import { buildUnreadConfigFileFields } from "../web-admin-client/read-warnings.js";
|
|
26
|
-
import { CONFIG_DOMAIN_INVALID_NOTE, buildCandidateRejectedFields, judgeConfigCandidate } from "../web-admin-client/candidate-gate.js";
|
|
26
|
+
import { CONFIG_DOMAIN_INVALID_NOTE, buildCandidateRejectedFields, candidateRejectionOf, judgeConfigCandidate } from "../web-admin-client/candidate-gate.js";
|
|
27
27
|
import { SHA256_HEX_RE } from "../digest-form.js";
|
|
28
28
|
import { BOOT_REJUDGE_OF_REFUSED_GROUP, createConfigApplyLedger, modelPlaneCommitted, refusedGroups } from "../web-admin-client/apply-ledger.js";
|
|
29
29
|
function lkgReadNote(scope) {
|
|
@@ -31,7 +31,7 @@ function lkgReadNote(scope) {
|
|
|
31
31
|
case "whole":
|
|
32
32
|
return "booting from the persisted last-known-good (all restart-to-apply faces included) — the live pull continues in the background and reconciles on arrival";
|
|
33
33
|
case "model-plane":
|
|
34
|
-
return "the live candidate's model plane was refused at boot — the persisted last-known-good supplies the model plane only (catalog and
|
|
34
|
+
return "the live candidate's model plane was refused at boot — the persisted last-known-good supplies the model plane only (the catalog and what rides with it); every other group and every restart-to-apply face stays the live candidate's";
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
export async function createWebAdminRuntime(ctx) {
|
|
@@ -39,7 +39,14 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
39
39
|
let ccEtag;
|
|
40
40
|
let effective;
|
|
41
41
|
let latestEffective;
|
|
42
|
-
let
|
|
42
|
+
let candidateRejection;
|
|
43
|
+
let judgedOrdinal = 0;
|
|
44
|
+
const noteCandidateVerdict = (ordinal, rejection) => {
|
|
45
|
+
if (ordinal < judgedOrdinal)
|
|
46
|
+
return;
|
|
47
|
+
judgedOrdinal = ordinal;
|
|
48
|
+
candidateRejection = rejection;
|
|
49
|
+
};
|
|
43
50
|
const applyLedger = createConfigApplyLedger();
|
|
44
51
|
let lastPull = "none";
|
|
45
52
|
let generationOrdinal = 0;
|
|
@@ -146,11 +153,16 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
146
153
|
});
|
|
147
154
|
}
|
|
148
155
|
};
|
|
149
|
-
const
|
|
156
|
+
const rejectionSource = () => {
|
|
157
|
+
if (configProvider === undefined)
|
|
158
|
+
throw new Error("config candidate judged without a config provider (no pipeline ⇒ nothing was pulled)");
|
|
159
|
+
return configProvider.kind;
|
|
160
|
+
};
|
|
161
|
+
const announceCandidateRejected = (r, verdict, leg, ordinal) => {
|
|
150
162
|
const domains = verdict.domains.join(",");
|
|
151
|
-
if (
|
|
163
|
+
if (candidateRejection?.version === r.effective.version && candidateRejection.domains.join(",") === domains)
|
|
152
164
|
return;
|
|
153
|
-
|
|
165
|
+
noteCandidateVerdict(ordinal, candidateRejectionOf(r, verdict, rejectionSource(), Date.now()));
|
|
154
166
|
logger.warn("config_candidate_rejected", buildCandidateRejectedFields(r, verdict, leg, { lkgVersion: latestEffective?.version ?? "(env)", ...localDirField }));
|
|
155
167
|
};
|
|
156
168
|
const selfReportListeners = [];
|
|
@@ -503,7 +515,7 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
503
515
|
hint: rejected && modelsDomainErr
|
|
504
516
|
? "config.d/models.json 在场但 models 域判形失败,整份本地候选被拒(真因见本行 domainError)— 模型继续走 env 兜底"
|
|
505
517
|
: rejected
|
|
506
|
-
? "config.d
|
|
518
|
+
? "config.d 里别的域让整份本地候选被拒(判形失败,或带事实的退役域文档;坏域与真因见 config_candidate_rejected)— config.d/models.json 的模型不用,继续走 env 兜底"
|
|
507
519
|
: modelsDropped.length > 0 && totalModels === 0
|
|
508
520
|
? "config.d/models.json 的条目全部被逐条丢弃(逐条真因见 config_entry_dropped)— 模型继续走 env 兜底"
|
|
509
521
|
: totalModels > 0
|
|
@@ -536,7 +548,7 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
536
548
|
if (dryRun) {
|
|
537
549
|
const dryVerdict = judgeConfigCandidate(r);
|
|
538
550
|
if (dryVerdict.verdict === "rejected") {
|
|
539
|
-
announceCandidateRejected(r, dryVerdict, "boot");
|
|
551
|
+
announceCandidateRejected(r, dryVerdict, "boot", generationOrdinal);
|
|
540
552
|
}
|
|
541
553
|
else {
|
|
542
554
|
warnReadNotices(r, "boot");
|
|
@@ -550,7 +562,7 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
550
562
|
await bootFallBackWhole(`boot candidate rejected: ${bootVerdict.domains.join(",")}`);
|
|
551
563
|
const rejectedGen = generationOf(r.effective.version);
|
|
552
564
|
applyLedger.seenTarget(rejectedGen, r.effective.version);
|
|
553
|
-
announceCandidateRejected(r, bootVerdict, "boot");
|
|
565
|
+
announceCandidateRejected(r, bootVerdict, "boot", rejectedGen);
|
|
554
566
|
if (configProvider.kind === "local")
|
|
555
567
|
warnLocalNoModels(r, true);
|
|
556
568
|
}
|
|
@@ -581,7 +593,7 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
581
593
|
applyEffective(config, withModelPlaneOf(r.effective, lkgPlane.effective), logger, { leg: "boot", sealedKeys, generation: bootGen, report: (rep) => (planeReport = rep) });
|
|
582
594
|
if (modelPlaneCommitted(planeReport)) {
|
|
583
595
|
bootPlaneEff = lkgPlane.effective;
|
|
584
|
-
logger.warn("config_model_plane_from_lkg", { version: r.effective.version, lkgVersion: lkgPlane.effective.version, note: "the live candidate's model plane was refused at boot — serving the LKG's model plane (catalog and
|
|
596
|
+
logger.warn("config_model_plane_from_lkg", { version: r.effective.version, lkgVersion: lkgPlane.effective.version, note: "the live candidate's model plane was refused at boot — serving the LKG's model plane (the catalog and what rides with it) with the live candidate's other groups; the refresh cadence re-judges the candidate" });
|
|
585
597
|
}
|
|
586
598
|
}
|
|
587
599
|
}
|
|
@@ -665,6 +677,7 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
665
677
|
restartState: () => buildRestartSignal(pendingRestart, planeDeferredNoHandoff),
|
|
666
678
|
configHandoffState: () => (configProvider === undefined || configProvider.kind === "local" || !lkgSurvivesRestart ? undefined : buildConfigHandoff(latchHandoff(), handoffMissingSince)),
|
|
667
679
|
modelRefusalsState: () => modelRefusals,
|
|
680
|
+
candidateRejectionState: () => (cc?.dryRun ? undefined : candidateRejection),
|
|
668
681
|
configApplyState: () => (configProvider ? applyLedger.view() : undefined),
|
|
669
682
|
centerPullState: () => {
|
|
670
683
|
const view = applyLedger.view();
|
|
@@ -858,10 +871,10 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
858
871
|
applyLedger.seenTarget(tickGen, r.effective.version);
|
|
859
872
|
const verdict = judgeConfigCandidate(r);
|
|
860
873
|
if (verdict.verdict === "rejected") {
|
|
861
|
-
announceCandidateRejected(r, verdict, arrival !== undefined ? "late-boot" : "refresh");
|
|
874
|
+
announceCandidateRejected(r, verdict, arrival !== undefined ? "late-boot" : "refresh", tickGen);
|
|
862
875
|
return "ok";
|
|
863
876
|
}
|
|
864
|
-
|
|
877
|
+
noteCandidateVerdict(tickGen, undefined);
|
|
865
878
|
warnReadNotices(r, "refresh");
|
|
866
879
|
if (ccRef?.dryRun) {
|
|
867
880
|
logEffectiveDiff(config, r.effective, logger);
|
|
@@ -918,7 +931,7 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
918
931
|
const signal = signalRestart({ applied: "complete", effective: r.effective, ...(r.etag !== undefined ? { etag: r.etag } : {}), baseline: effective, lkgPersisted });
|
|
919
932
|
logger.info("web_admin_refreshed", {
|
|
920
933
|
version: r.effective.version,
|
|
921
|
-
note: "
|
|
934
|
+
note: "runtime governance (incl. approvalRequire) + limits + models/roles/roster hot-applied; skills/mcp/a2a/scenarios are restart-to-apply",
|
|
922
935
|
...restartLogFields(signal),
|
|
923
936
|
});
|
|
924
937
|
latestEffective = r.effective;
|
|
@@ -967,9 +980,10 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
967
980
|
applyLedger.seenTarget(lateGen, r.effective.version);
|
|
968
981
|
const lateVerdict = judgeConfigCandidate(r);
|
|
969
982
|
if (lateVerdict.verdict === "rejected") {
|
|
970
|
-
announceCandidateRejected(r, lateVerdict, "late-boot");
|
|
983
|
+
announceCandidateRejected(r, lateVerdict, "late-boot", lateGen);
|
|
971
984
|
return;
|
|
972
985
|
}
|
|
986
|
+
noteCandidateVerdict(lateGen, undefined);
|
|
973
987
|
warnReadNotices(r, "boot-deferred");
|
|
974
988
|
if (ccRef?.dryRun) {
|
|
975
989
|
logEffectiveDiff(config, r.effective, logger);
|