@sema-agent/server 7.79.2 → 7.79.3

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.
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 晚绑席(S-151 十段切分的**唯一**跨段可变面)—— 四只 cell,读点在前段、写点在后段。
3
+ *
4
+ * 为什么是模块级 live binding 而不是 ctx 字段:读点的原文是**裸标识符**(`() => runStore`、
5
+ * `() => parkedAskRedeem`),而 ctx 字段是**快照** —— 把读点改成 `ctx.runStore` 就是正文改写,
6
+ * 而本刀的律是字节不变(`scripts/move-only-check.mjs`)。ESM 的 `import` 对 `let` 是 **live 读**,
7
+ * 于是读点一个字都不改就能拿到后段写进来的值。写点分两形:
8
+ * · `runStore` / `rateLimiter` —— 声明行留在第 7 段原位,紧随一行 `bindX(...)` 把值交过来;
9
+ * · `parkedAskRedeem` / `runDenySweep` —— 它们的**声明行本身**就是 `let`(逐字搬进本文件,含缩进),
10
+ * 赋值点(server 造出来之后那两处)也随之搬进 `bindServerLateSeats` —— 跨模块给 import 赋值是非法的,
11
+ * 所以 cell 与它的写点必须同居一个模块。
12
+ *
13
+ * 时序与修前逐字相同:四只 cell 的读点全是 `() => x` 取值闭包(boot 期不求值,最早的求值发生在
14
+ * listen 之后的请求/tick 上),写点仍在各自原来的那一拍。未绑窗内取值得到 `undefined` —— 这正是
15
+ * 各消费座既有的 fail-closed 臂(device 限速座:`gate()` 取不到就抛,见 boot/device-lane.ts:68)。
16
+ */
17
+ import type { Logger } from "../observability/logger.js";
18
+ import type { ParkedAskRedeem } from "../tool-approval.js";
19
+ import type { RateGate } from "../observability/rate-limit.js";
20
+ import type { ServiceConfig } from "../config.js";
21
+ import type { StoreBackend } from "../plugins/store-backend.js";
22
+ import type { createHttpServer } from "../http/server.js";
23
+ declare let runStore: ReturnType<StoreBackend["run"]> | undefined;
24
+ declare let rateLimiter: RateGate | undefined;
25
+ declare let parkedAskRedeem: ParkedAskRedeem | undefined;
26
+ declare let runDenySweep: ((now: number) => Promise<void>) | undefined;
27
+ export { runStore, rateLimiter, parkedAskRedeem, runDenySweep };
28
+ export declare function bindRunStore(v: ReturnType<StoreBackend["run"]> | undefined): void;
29
+ export declare function bindRateLimiter(v: RateGate): void;
30
+ export declare function bindServerLateSeats(ctx: {
31
+ config: ServiceConfig;
32
+ logger: Logger;
33
+ server: ReturnType<typeof createHttpServer>;
34
+ }): void;
35
+ //# sourceMappingURL=late-binds.d.ts.map
@@ -0,0 +1,20 @@
1
+ let runStore;
2
+ let rateLimiter;
3
+ let parkedAskRedeem;
4
+ let runDenySweep;
5
+ export { runStore, rateLimiter, parkedAskRedeem, runDenySweep };
6
+ export function bindRunStore(v) {
7
+ runStore = v;
8
+ }
9
+ export function bindRateLimiter(v) {
10
+ rateLimiter = v;
11
+ }
12
+ export function bindServerLateSeats(ctx) {
13
+ const { config, logger, server } = ctx;
14
+ runDenySweep = server.denyExpiredApprovals;
15
+ if (!config.directDoorActive)
16
+ parkedAskRedeem = server.redeemParkedAsk;
17
+ else
18
+ logger.info("parked_late_decision_disabled", { reason: "direct_door_requires_signed_decision_envelope" });
19
+ }
20
+ //# sourceMappingURL=late-binds.js.map
@@ -0,0 +1,7 @@
1
+ export declare function runStage01(): {
2
+ config: import("../config-types.js").ServiceConfig;
3
+ localRoot: string;
4
+ logger: import("../observability/logger.js").Logger;
5
+ metrics: import("../observability/metrics.js").Metrics;
6
+ };
7
+ //# sourceMappingURL=stage-01-config.d.ts.map
@@ -0,0 +1,60 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ import { loadConfig, logConfigDiagnostics, splitLocalRoots } from "../config.js";
4
+ import { crossInvariant } from "../config-invariants.js";
5
+ import { drainNumEnvWarnings } from "../plugins/remote-shell.js";
6
+ import { setWebSearchBadPayloadObserver } from "../plugins/web-search.js";
7
+ import { createLogger } from "../observability/logger.js";
8
+ import { createMetrics } from "../observability/metrics.js";
9
+ import { installFailOpenRecorder } from "../observability/fail-open.js";
10
+ import { installFileHistoryFailureRecorder } from "../file-history-disclosure.js";
11
+ import { installSecretEnvScrubRecorder } from "../observability/secret-env-scrub.js";
12
+ import { setRunTerminalObserver } from "../observability/run-terminal-log.js";
13
+ import { setRedactionObserver } from "../trace/redact.js";
14
+ export function runStage01() {
15
+ const config = loadConfig();
16
+ const runStaleFailure = crossInvariant("run-stale-heartbeat").check({ live: config, next: config });
17
+ if (runStaleFailure !== undefined) {
18
+ throw new Error(runStaleFailure);
19
+ }
20
+ const logger = createLogger(config.logLevel);
21
+ const metrics = createMetrics();
22
+ installFailOpenRecorder({ logger, metrics });
23
+ installSecretEnvScrubRecorder({ logger, metrics });
24
+ installFileHistoryFailureRecorder({ logger, metrics });
25
+ logConfigDiagnostics(logger);
26
+ for (const w of drainNumEnvWarnings())
27
+ logger.warn("config_env_invalid_using_default", { env: w.env, raw: w.raw });
28
+ if ((config.roles?.verifier ?? "default") === "default") {
29
+ logger.warn("verify_decorrelation_unavailable", {
30
+ hint: "verifier role = default (= implementer) — adversarial verification grades its own work; set MODEL_VERIFIER=<catalog model id> to a heterogeneous model",
31
+ ...(process.env.MODEL_VERIFIER ? { rejected: process.env.MODEL_VERIFIER, reason: "not in catalog" } : {}),
32
+ });
33
+ }
34
+ setRedactionObserver((pattern, n, meta) => metrics.inc("redactions_applied_total", { pattern, arm: meta.arm }, n));
35
+ setWebSearchBadPayloadObserver((provider) => {
36
+ metrics.inc("web_search_bad_payload_total", { provider });
37
+ logger.warn("web_search_non_array_payload", { provider });
38
+ });
39
+ setRunTerminalObserver((level, fields) => {
40
+ if (level === "error")
41
+ logger.error("run_failed", fields);
42
+ else
43
+ logger.info("run_failed", fields);
44
+ });
45
+ const localRoot = config.configLocalDir ?? process.env.AGENT_DATA_DIR ?? join(homedir(), ".ai-agent");
46
+ const rootsSplit = splitLocalRoots({
47
+ localDataRoot: config.localDataRoot,
48
+ configLocalDir: config.configLocalDir,
49
+ agentDataDir: process.env.AGENT_DATA_DIR,
50
+ home: homedir(),
51
+ });
52
+ if (rootsSplit) {
53
+ logger.warn("local_roots_split", {
54
+ ...rootsSplit,
55
+ note: "LOCAL_DATA_ROOT moved the local backend's DATA root, but config.d / remote-exec.json are still read from the config root (LOCAL_DATA_ROOT is not consulted there). If you meant to move both, set CONFIG_LOCAL_DIR to the same directory.",
56
+ });
57
+ }
58
+ return { config, localRoot, logger, metrics };
59
+ }
60
+ //# sourceMappingURL=stage-01-config.js.map
@@ -0,0 +1,10 @@
1
+ import type { runStage01 } from "./stage-01-config.js";
2
+ export declare function runStage02(ctx: Awaited<ReturnType<typeof runStage01>>): Promise<{
3
+ ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
4
+ configCenter: import("./config-center.js").ConfigCenterRuntime;
5
+ config: import("../config-types.js").ServiceConfig;
6
+ localRoot: string;
7
+ logger: import("../index.js").Logger;
8
+ metrics: import("../index.js").Metrics;
9
+ }>;
10
+ //# sourceMappingURL=stage-02-registry-pull.d.ts.map
@@ -0,0 +1,11 @@
1
+ import { createUnpricedCeilingVerdict } from "./unpriced-ceiling-verdict.js";
2
+ import { createConfigCenterRuntime } from "./config-center.js";
3
+ export async function runStage02(ctx) {
4
+ const { config, localRoot, logger, metrics } = ctx;
5
+ const configCenter = await createConfigCenterRuntime({ config, logger, metrics, localRoot });
6
+ await configCenter.applyLocalRemoteExec();
7
+ const ceilingVerdict = createUnpricedCeilingVerdict({ config, logger });
8
+ ceilingVerdict.judge();
9
+ return { ...ctx, ceilingVerdict, configCenter };
10
+ }
11
+ //# sourceMappingURL=stage-02-registry-pull.js.map
@@ -0,0 +1,32 @@
1
+ import type { runStage02 } from "./stage-02-registry-pull.js";
2
+ export declare function runStage03(ctx: Awaited<ReturnType<typeof runStage02>>): Promise<{
3
+ backend: import("../index.js").StoreBackend | undefined;
4
+ backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
5
+ breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
6
+ instanceId: string;
7
+ mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
8
+ memoryEngine: {
9
+ backend: import("@sema-agent/core").MemoryBackend;
10
+ root: string;
11
+ } | undefined;
12
+ memoryExportBackend: import("@sema-agent/core").MemoryBackend | undefined;
13
+ memoryPosture: import("../memory-posture.js").MemoryPosture;
14
+ memorySyncCursors: import("../plugins/memory-sync-store-pg.js").MemorySyncStore | undefined;
15
+ memorySyncRunner: import("../memory-sync-client.js").MemorySyncRunner | undefined;
16
+ rosterStore: import("@sema-agent/core").RosterStore | undefined;
17
+ sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
18
+ sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
19
+ sessionStore: import("@sema-agent/core").SessionStore;
20
+ sqlEngineFacts: (() => import("../plugins/sql-driver.js").SqlEngineFacts | null) | undefined;
21
+ storeBackendDegraded: boolean;
22
+ taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
23
+ taskListLane: import("./task-list-lane.js").TaskListLane;
24
+ usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
25
+ ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
26
+ configCenter: import("./config-center.js").ConfigCenterRuntime;
27
+ config: import("../config-types.js").ServiceConfig;
28
+ localRoot: string;
29
+ logger: import("../index.js").Logger;
30
+ metrics: import("../index.js").Metrics;
31
+ }>;
32
+ //# sourceMappingURL=stage-03-store-backend.d.ts.map
@@ -0,0 +1,11 @@
1
+ import { uuidv7 } from "@sema-agent/core";
2
+ import { openStores } from "./stores.js";
3
+ export async function runStage03(ctx) {
4
+ const { config, localRoot, logger, metrics } = ctx;
5
+ const { backend, storeBackendDegraded, memoryEngine, memorySyncCursors, rosterStore, backgroundAgentStore, taskAttachmentStore, mailboxStore, memoryExportBackend, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngineFacts, } = await openStores({ config, logger, metrics, localRoot });
6
+ const instanceId = uuidv7();
7
+ const sessionCaptureRecords = backend?.sessionCaptureRecords();
8
+ const sessionCaptureRecordStore = sessionCaptureRecords?.();
9
+ return { ...ctx, backend, backgroundAgentStore, breakerState, instanceId, mailboxStore, memoryEngine, memoryExportBackend, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecordStore, sessionCaptureRecords, sessionStore, sqlEngineFacts, storeBackendDegraded, taskAttachmentStore, taskListLane, usageWindowStore };
10
+ }
11
+ //# sourceMappingURL=stage-03-store-backend.js.map
@@ -0,0 +1,69 @@
1
+ import type { runStage03 } from "./stage-03-store-backend.js";
2
+ export declare function runStage04(ctx: Awaited<ReturnType<typeof runStage03>>): Promise<{
3
+ brain: import("@sema-agent/core").Brain;
4
+ costQuota: import("../observability/cost-quota.js").CostQuota | import("../plugins/pg-cost-quota.js").PgCostQuota | import("../plugins/tidb-cost-quota.js").TiDBCostQuota;
5
+ counterDegradeHook: (info: {
6
+ table: string;
7
+ kind: string;
8
+ streak: number;
9
+ prevStreak: number;
10
+ error?: string;
11
+ }) => void;
12
+ fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
13
+ fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
14
+ fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
15
+ memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
16
+ memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
17
+ memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
18
+ modelUsageTracker: import("../budget.js").ModelUsageTracker;
19
+ permissionRuleProvider: import("@sema-agent/core").PermissionRuleStoreProvider | undefined;
20
+ permissionRuleStores: import("../rules-consent.js").PermissionRuleStoreBundle | undefined;
21
+ pricing: Record<string, import("@sema-agent/core").ModelPricing>;
22
+ promptManifestTracker: import("../budget.js").PromptManifestTracker;
23
+ ruleConsent: import("../rules-consent.js").RuleConsentLane | undefined;
24
+ sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
25
+ sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
26
+ sideQueryAccounting: (principal: string | undefined, r: {
27
+ model: string;
28
+ usage?: {
29
+ input?: number;
30
+ output?: number;
31
+ cacheRead?: number;
32
+ cacheWrite?: number;
33
+ cost?: {
34
+ total?: number;
35
+ };
36
+ };
37
+ }) => void;
38
+ toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
39
+ tracer: import("@sema-agent/core").TracerHook;
40
+ backend: import("../index.js").StoreBackend | undefined;
41
+ backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
42
+ breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
43
+ instanceId: string;
44
+ mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
45
+ memoryEngine: {
46
+ backend: import("@sema-agent/core").MemoryBackend;
47
+ root: string;
48
+ } | undefined;
49
+ memoryExportBackend: import("@sema-agent/core").MemoryBackend | undefined;
50
+ memoryPosture: import("../memory-posture.js").MemoryPosture;
51
+ memorySyncCursors: import("../plugins/memory-sync-store-pg.js").MemorySyncStore | undefined;
52
+ memorySyncRunner: import("../memory-sync-client.js").MemorySyncRunner | undefined;
53
+ rosterStore: import("@sema-agent/core").RosterStore | undefined;
54
+ sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
55
+ sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
56
+ sessionStore: import("@sema-agent/core").SessionStore;
57
+ sqlEngineFacts: (() => import("../plugins/sql-driver.js").SqlEngineFacts | null) | undefined;
58
+ storeBackendDegraded: boolean;
59
+ taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
60
+ taskListLane: import("./task-list-lane.js").TaskListLane;
61
+ usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
62
+ ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
63
+ configCenter: import("./config-center.js").ConfigCenterRuntime;
64
+ config: import("../config-types.js").ServiceConfig;
65
+ localRoot: string;
66
+ logger: import("../index.js").Logger;
67
+ metrics: import("../index.js").Metrics;
68
+ }>;
69
+ //# sourceMappingURL=stage-04-stores.d.ts.map
@@ -0,0 +1,49 @@
1
+ import { createPermissionRuleStoreProvider } from "@sema-agent/core";
2
+ import { createMemoryBundleFaces } from "../memory-bundle-engine.js";
3
+ import { createMemoryComplianceFaces, createMemoryOriginFaces, createSessionMemoryStatusFace } from "../memory-operator-faces.js";
4
+ import { runAdoptionBootScan } from "./adoption.js";
5
+ import { auditDormantPermissionRules } from "./permission-rules-audit.js";
6
+ import { createBudgetAndTracing } from "./budget-tracing.js";
7
+ import { createRuleConsentLane } from "../rules-consent.js";
8
+ export async function runStage04(ctx) {
9
+ const { backend, breakerState, config, logger, memoryEngine, metrics, sessionCaptureRecordStore } = ctx;
10
+ const memoryBundleFaces = memoryEngine ? createMemoryBundleFaces(memoryEngine, { ...(sessionCaptureRecordStore !== undefined ? { captureRecordStore: sessionCaptureRecordStore } : {}) }) : undefined;
11
+ const memoryComplianceFaces = memoryEngine
12
+ ? createMemoryComplianceFaces(memoryEngine, {
13
+ onIncident: (err) => logger.warn("memory_compliance_incident", { code: err.code ?? null, detail: err.message }),
14
+ ...(sessionCaptureRecordStore !== undefined ? { captureRecordStore: sessionCaptureRecordStore } : {}),
15
+ })
16
+ : undefined;
17
+ const memoryOriginFaces = memoryEngine
18
+ ? createMemoryOriginFaces(memoryEngine, {
19
+ onIncident: (err) => logger.warn("memory_origin_incident", { code: err.code ?? null, detail: err.message }),
20
+ ...(sessionCaptureRecordStore !== undefined ? { captureRecordStore: sessionCaptureRecordStore } : {}),
21
+ })
22
+ : undefined;
23
+ const sessionMemoryStatusFace = memoryEngine
24
+ ? createSessionMemoryStatusFace(memoryEngine, { ...(sessionCaptureRecordStore !== undefined ? { captureRecordStore: sessionCaptureRecordStore } : {}) })
25
+ : undefined;
26
+ const adoptionBoot = await runAdoptionBootScan({ backend, logger });
27
+ if (adoptionBoot.scanned > 0 || adoptionBoot.error !== undefined) {
28
+ logger.info("adoption_boot_scan", { ...adoptionBoot });
29
+ }
30
+ const { brain, pricing, counterDegradeHook, costQuota, modelUsageTracker, promptManifestTracker, fleetUsage, fleetLease, tracer, sideQueryAccounting, toolResultStore, sessionPolicyStore, fileHistoryStore, } = createBudgetAndTracing({ config, logger, metrics, backend, breakerState });
31
+ const permissionRuleStores = config.permissionRulesEnabled && backend ? backend.permissionRule() : undefined;
32
+ const permissionRuleProvider = permissionRuleStores
33
+ ? createPermissionRuleStoreProvider({ durable: permissionRuleStores.durable })
34
+ : undefined;
35
+ const ruleConsent = permissionRuleStores && permissionRuleProvider
36
+ ? createRuleConsentLane({ ...permissionRuleStores, provider: permissionRuleProvider })
37
+ : undefined;
38
+ if (config.permissionRulesEnabled && permissionRuleStores === undefined) {
39
+ logger.info("permission_rules_lane_unavailable", {
40
+ knob: "PERMISSION_RULES_ENABLED",
41
+ reason: backend === undefined ? "no_backend" : "backend_has_no_rule_store",
42
+ backendKind: backend?.kind ?? null,
43
+ note: "PERMISSION_RULES_ENABLED is on but no permission-rule store is wired — /v1/rules/* answer 501, approval cards carry no rule suggestions, and respond's persistRule is refused with rule_lane_unavailable",
44
+ });
45
+ }
46
+ await auditDormantPermissionRules({ stores: permissionRuleStores, logger, explicit: config.permissionRulesEnabledExplicit });
47
+ return { ...ctx, brain, costQuota, counterDegradeHook, fileHistoryStore, fleetLease, fleetUsage, memoryBundleFaces, memoryComplianceFaces, memoryOriginFaces, modelUsageTracker, permissionRuleProvider, permissionRuleStores, pricing, promptManifestTracker, ruleConsent, sessionMemoryStatusFace, sessionPolicyStore, sideQueryAccounting, toolResultStore, tracer };
48
+ }
49
+ //# sourceMappingURL=stage-04-stores.js.map
@@ -0,0 +1,82 @@
1
+ import type { runStage04 } from "./stage-04-stores.js";
2
+ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>): {
3
+ deploymentHooks: import("@sema-agent/core").Hooks;
4
+ deviceLane: import("./device-lane.js").DeviceLane | undefined;
5
+ dropSessionScoped: (sid: string) => void;
6
+ executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
7
+ fenceSessionOwner: (sid: string, owner: string | null) => void;
8
+ lspManager: import("../lsp/manager.js").E2bLspManager | import("@sema-agent/core").NodeLspManager | undefined;
9
+ perSessionCwd: Map<string, string>;
10
+ perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
11
+ sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
12
+ sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
13
+ setSessionCwd: (sid: string, cwd: string) => void;
14
+ setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
15
+ worktreeReap: (() => Promise<void>) | undefined;
16
+ brain: import("@sema-agent/core").Brain;
17
+ costQuota: import("../observability/cost-quota.js").CostQuota | import("../plugins/pg-cost-quota.js").PgCostQuota | import("../plugins/tidb-cost-quota.js").TiDBCostQuota;
18
+ counterDegradeHook: (info: {
19
+ table: string;
20
+ kind: string;
21
+ streak: number;
22
+ prevStreak: number;
23
+ error?: string;
24
+ }) => void;
25
+ fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
26
+ fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
27
+ fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
28
+ memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
29
+ memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
30
+ memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
31
+ modelUsageTracker: import("../budget.js").ModelUsageTracker;
32
+ permissionRuleProvider: import("@sema-agent/core").PermissionRuleStoreProvider | undefined;
33
+ permissionRuleStores: import("../rules-consent.js").PermissionRuleStoreBundle | undefined;
34
+ pricing: Record<string, import("@sema-agent/core").ModelPricing>;
35
+ promptManifestTracker: import("../budget.js").PromptManifestTracker;
36
+ ruleConsent: import("../rules-consent.js").RuleConsentLane | undefined;
37
+ sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
38
+ sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
39
+ sideQueryAccounting: (principal: string | undefined, r: {
40
+ model: string;
41
+ usage?: {
42
+ input?: number;
43
+ output?: number;
44
+ cacheRead?: number;
45
+ cacheWrite?: number;
46
+ cost?: {
47
+ total?: number;
48
+ };
49
+ };
50
+ }) => void;
51
+ toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
52
+ tracer: import("@sema-agent/core").TracerHook;
53
+ backend: import("../index.js").StoreBackend | undefined;
54
+ backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
55
+ breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
56
+ instanceId: string;
57
+ mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
58
+ memoryEngine: {
59
+ backend: import("@sema-agent/core").MemoryBackend;
60
+ root: string;
61
+ } | undefined;
62
+ memoryExportBackend: import("@sema-agent/core").MemoryBackend | undefined;
63
+ memoryPosture: import("../memory-posture.js").MemoryPosture;
64
+ memorySyncCursors: import("../plugins/memory-sync-store-pg.js").MemorySyncStore | undefined;
65
+ memorySyncRunner: import("../memory-sync-client.js").MemorySyncRunner | undefined;
66
+ rosterStore: import("@sema-agent/core").RosterStore | undefined;
67
+ sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
68
+ sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
69
+ sessionStore: import("@sema-agent/core").SessionStore;
70
+ sqlEngineFacts: (() => import("../plugins/sql-driver.js").SqlEngineFacts | null) | undefined;
71
+ storeBackendDegraded: boolean;
72
+ taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
73
+ taskListLane: import("./task-list-lane.js").TaskListLane;
74
+ usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
75
+ ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
76
+ configCenter: import("./config-center.js").ConfigCenterRuntime;
77
+ config: import("../config-types.js").ServiceConfig;
78
+ localRoot: string;
79
+ logger: import("../index.js").Logger;
80
+ metrics: import("../index.js").Metrics;
81
+ };
82
+ //# sourceMappingURL=stage-05-execution-env.d.ts.map
@@ -0,0 +1,20 @@
1
+ import { createToolTracer, createPermissionDeniedMeter } from "../observability/tool-trace.js";
2
+ import { composeHooks } from "../hooks/hook-runner.js";
3
+ import { assertDeviceLaneWired, createDeviceLane } from "./device-lane.js";
4
+ import { createExecutionEnv } from "./execution-env.js";
5
+ import { rateLimiter } from "./late-binds.js";
6
+ export function runStage05(ctx) {
7
+ const { backend, config, instanceId, logger, metrics, taskAttachmentStore } = ctx;
8
+ const deviceLane = config.remoteExec?.provider === "device" ? createDeviceLane({ config, logger, metrics, backend, replicaId: instanceId, rateGate: () => rateLimiter }) : undefined;
9
+ const { perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner, dropSessionScoped, executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, } = createExecutionEnv({ config, logger, metrics, taskAttachmentStore, ...(deviceLane ? { deviceLane } : {}) });
10
+ assertDeviceLaneWired(config.remoteExec?.provider === "device", deviceLane, executionEnvFactory !== undefined);
11
+ const toolTracer = config.toolTrace ? createToolTracer(logger) : undefined;
12
+ if (toolTracer)
13
+ logger.info("tool_trace_enabled", {});
14
+ const deploymentHooks = {
15
+ ...(toolTracer ? composeHooks(createPermissionDeniedMeter(metrics), toolTracer) : createPermissionDeniedMeter(metrics)),
16
+ ...(config.hooksTimeoutMs !== undefined ? { timeoutMs: config.hooksTimeoutMs } : {}),
17
+ };
18
+ return { ...ctx, deploymentHooks, deviceLane, dropSessionScoped, executionEnvFactory, fenceSessionOwner, lspManager, perSessionCwd, perTaskImage, sendUserFileTaskEnvs, sessionEnvSelection, setSessionCwd, setSessionShellEnv, worktreeReap };
19
+ }
20
+ //# sourceMappingURL=stage-05-execution-env.js.map
@@ -0,0 +1,143 @@
1
+ /**
2
+ * 装配第 6 段 —— **两只 Runner**(§3-6)。
3
+ * workflow 编排 → 活体协调器 → per-principal caps → org/共享记忆 → checkpoint/留存/consolidation/治理座席 →
4
+ * RunnerDeps → `new Runner` ×2(主 + 无手孪生)→ hook LLM/agent 载体 → 会话标题器 → subRunner ×2。
5
+ * ⚠️ 位置即契约:checkpointStore 必须早于 `createGovernanceSeams` 与 `createRunnerDeps`;
6
+ * `workflowModelAllowlistSnapshot` 必须与 `createRunnerDeps` 同步紧邻(两者之间零 await)。
7
+ * 🔴 `runStore` / `parkedAskRedeem` 经 `late-binds.ts` 的晚绑 cell 读(原文同作用域前向引用/晚绑 holder)。
8
+ */
9
+ import { Runner } from "@sema-agent/core";
10
+ import { ForkRoutingSessionStore } from "../plugins/fork-routing-session-store.js";
11
+ import type { runStage05 } from "./stage-05-execution-env.js";
12
+ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>): {
13
+ approvalAskAudit: import("../approval-ask-audit-store.js").FileApprovalAskAuditStore | undefined;
14
+ centerRuntimeCapsResolver: ((principal: string | undefined) => Promise<import("@sema-agent/core").RuntimeCaps | undefined>) | undefined;
15
+ checkpointStore: import("../plugins/store-backend.js").CheckpointStoreFull | undefined;
16
+ durableEnabled: boolean;
17
+ elicitation: import("../elicitation.js").ElicitationCoordinator | undefined;
18
+ fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
19
+ governanceSeams: import("./governance-seams.js").GovernanceSeams;
20
+ handslessRunner: Runner;
21
+ handslessSubRunner: Runner;
22
+ hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
23
+ hookAgentRunner: Runner;
24
+ hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
25
+ mcpRevocations: import("../config-center/mcp-revocation.js").McpRevocationLedger;
26
+ memoryConsolidationFaces: import("./memory-consolidation.js").MemoryConsolidationFaces | undefined;
27
+ memoryOptOutGrantStore: import("../plugins/memory-optout-grant-store-sql.js").MemoryOptOutGrantStore | undefined;
28
+ orgMemoryAdmission: import("./org-memory.js").OrgMemoryAdmissionWiring;
29
+ outcomeSink: import("../plugins/file-outcome-sink.js").OutcomeSink | undefined;
30
+ principalCaps: import("../runtime-caps-resolver.js").PrincipalEntitlementsClient | undefined;
31
+ question: import("../question.js").QuestionCoordinator | undefined;
32
+ retentionExecutor: import("../plugins/retention-store-sql.js").SqlRetentionStore | undefined;
33
+ retentionLaneStore: import("../plugins/retention-lane-store-sql.js").RetentionLaneStore | undefined;
34
+ runner: Runner;
35
+ runnerDeps: import("@sema-agent/core").RunnerDeps;
36
+ runnerTierFrozen: boolean;
37
+ runtimeCapsPeekResolver: import("../runtime-caps-resolver.js").EntitlementsResolverFn | undefined;
38
+ sendFileLedger: import("../plugins/send-file-ledger.js").SendFileLedger | undefined;
39
+ sendUserFileEmitter: import("../capabilities/send-user-file-tool.js").SendUserFileEmitter | undefined;
40
+ sendUserFileToolSpec: import("@sema-agent/core").ToolSpec<import("@sema-agent/core").TSchema> | undefined;
41
+ sessionShellGateRegistry: import("./session-shell-gate-registry.js").SessionShellGateRegistry;
42
+ sessionTitler: import("../session-titler.js").SessionTitler | undefined;
43
+ sharedMemoryStore: import("../plugins/shared-memory-store-sql.js").SqlSharedMemoryStore | undefined;
44
+ sqlWorkflowRunStore: import("@sema-agent/core").WorkflowRunStore | undefined;
45
+ streamApprovalGate: import("../tool-approval.js").StreamApprovalGate;
46
+ subRunner: Runner;
47
+ subRunnerSessions: ForkRoutingSessionStore;
48
+ subagentSteerRegistry: import("../orchestration/subagent-steer.js").SubagentSteerRegistry;
49
+ toolApproval: import("../tool-approval.js").ToolApprovalCoordinator | undefined;
50
+ workflowAgentRegistry: import("../orchestration/workflow-agent-steer.js").WorkflowAgentRegistry | undefined;
51
+ workflowAgentSessionIndex: import("../orchestration/workflow-agent-session-index.js").WorkflowAgentSessionIndex | undefined;
52
+ workflowCompletionInbox: import("../orchestration/workflow-completion-inbox.js").WorkflowCompletionInbox | undefined;
53
+ workflowJournalStore: import("../plugins/store-backend.js").ServiceWorkflowJournalStore | undefined;
54
+ workflowModelAllowlistSnapshot: readonly string[];
55
+ workflowNotifyGate: import("../orchestration/workflow-notify-journal.js").WorkflowNotifyGate | undefined;
56
+ workflowNotifyJournal: import("../orchestration/workflow-notify-journal.js").WorkflowNotifyJournalStore | undefined;
57
+ workflowRecoverOpts: {
58
+ orphanGraceMs?: number;
59
+ finalizeStartedBeforeMs?: number;
60
+ publishTerminalFleetRow?: (id: string, run: import("@sema-agent/core").WorkflowRun) => void;
61
+ };
62
+ workflowRunStore: import("../orchestration/workflow-notify-journal.js").JournalingWorkflowRunStore | undefined;
63
+ workflowsCapable: boolean;
64
+ deploymentHooks: import("@sema-agent/core").Hooks;
65
+ deviceLane: import("./device-lane.js").DeviceLane | undefined;
66
+ dropSessionScoped: (sid: string) => void;
67
+ executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
68
+ fenceSessionOwner: (sid: string, owner: string | null) => void;
69
+ lspManager: import("../lsp/manager.js").E2bLspManager | import("@sema-agent/core").NodeLspManager | undefined;
70
+ perSessionCwd: Map<string, string>;
71
+ perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
72
+ sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
73
+ sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
74
+ setSessionCwd: (sid: string, cwd: string) => void;
75
+ setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
76
+ worktreeReap: (() => Promise<void>) | undefined;
77
+ brain: import("@sema-agent/core").Brain;
78
+ costQuota: import("../observability/cost-quota.js").CostQuota | import("../plugins/pg-cost-quota.js").PgCostQuota | import("../plugins/tidb-cost-quota.js").TiDBCostQuota;
79
+ counterDegradeHook: (info: {
80
+ table: string;
81
+ kind: string;
82
+ streak: number;
83
+ prevStreak: number;
84
+ error?: string;
85
+ }) => void;
86
+ fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
87
+ fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
88
+ fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
89
+ memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
90
+ memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
91
+ memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
92
+ modelUsageTracker: import("../budget.js").ModelUsageTracker;
93
+ permissionRuleProvider: import("@sema-agent/core").PermissionRuleStoreProvider | undefined;
94
+ permissionRuleStores: import("../rules-consent.js").PermissionRuleStoreBundle | undefined;
95
+ pricing: Record<string, import("@sema-agent/core").ModelPricing>;
96
+ promptManifestTracker: import("../budget.js").PromptManifestTracker;
97
+ ruleConsent: import("../rules-consent.js").RuleConsentLane | undefined;
98
+ sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
99
+ sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
100
+ sideQueryAccounting: (principal: string | undefined, r: {
101
+ model: string;
102
+ usage?: {
103
+ input?: number;
104
+ output?: number;
105
+ cacheRead?: number;
106
+ cacheWrite?: number;
107
+ cost?: {
108
+ total?: number;
109
+ };
110
+ };
111
+ }) => void;
112
+ toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
113
+ tracer: import("@sema-agent/core").TracerHook;
114
+ backend: import("../index.js").StoreBackend | undefined;
115
+ backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
116
+ breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
117
+ instanceId: string;
118
+ mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
119
+ memoryEngine: {
120
+ backend: import("@sema-agent/core").MemoryBackend;
121
+ root: string;
122
+ } | undefined;
123
+ memoryExportBackend: import("@sema-agent/core").MemoryBackend | undefined;
124
+ memoryPosture: import("../memory-posture.js").MemoryPosture;
125
+ memorySyncCursors: import("../plugins/memory-sync-store-pg.js").MemorySyncStore | undefined;
126
+ memorySyncRunner: import("../memory-sync-client.js").MemorySyncRunner | undefined;
127
+ rosterStore: import("@sema-agent/core").RosterStore | undefined;
128
+ sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
129
+ sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
130
+ sessionStore: import("@sema-agent/core").SessionStore;
131
+ sqlEngineFacts: (() => import("../plugins/sql-driver.js").SqlEngineFacts | null) | undefined;
132
+ storeBackendDegraded: boolean;
133
+ taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
134
+ taskListLane: import("./task-list-lane.js").TaskListLane;
135
+ usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
136
+ ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
137
+ configCenter: import("./config-center.js").ConfigCenterRuntime;
138
+ config: import("../config-types.js").ServiceConfig;
139
+ localRoot: string;
140
+ logger: import("../index.js").Logger;
141
+ metrics: import("../index.js").Metrics;
142
+ };
143
+ //# sourceMappingURL=stage-06-runners.d.ts.map