import { type MemoryBackend, type RunnerDeps } from "@sema-agent/core"; import type { PromptsDomainFaces } from "../prompts-domain-validate.js"; import { SessionEnvironmentSelection, selectEnvironmentTool } from "../capabilities/select-environment-tool.js"; import { sendUserFileTool } from "../capabilities/send-user-file-tool.js"; import { selectScenario } from "../capabilities/scenarios.js"; import type { ServiceConfig } from "../config.js"; import { type LiveQuestionFace } from "../deployment-governance.js"; import { FleetEventBus } from "../fleet/fleet-bus.js"; import { type HookLlmCall } from "../hooks/hook-runner.js"; import type { createHookLlm } from "../hooks/hook-llm.js"; import { type ServiceDeps } from "../http/server.js"; import type { createKeyResolver } from "../key-resolver.js"; import type { Logger } from "../observability/logger.js"; import type { Metrics } from "../observability/metrics.js"; import { PerTaskImageRegistry } from "../per-task-image.js"; import type { StoreBackend } from "../plugins/store-backend.js"; import { type TaskAttachmentStore } from "../plugins/task-attachment-store.js"; import { type createPrincipalEntitlementsClient } from "../runtime-caps-resolver.js"; import { type OwnerAwareSessionStore } from "../security.js"; import type { RunnerDepsOnAsk } from "./runner-deps.js"; type PrincipalCaps = ReturnType; /** `resolveSpec` 原先从 `main()` 闭包里拿到的全部 boot 局部量。 */ export interface ResolveSpecCtx { config: ServiceConfig; logger: Logger; metrics: Metrics; localRoot: string; scenarios: Record>; principalCaps: PrincipalCaps | undefined; centerRuntimeCapsResolver: PrincipalCaps["resolveRuntimeCaps"] | undefined; /** 活引用(adoptCenterPrompts 每次采用换引用)—— 见文件头「位置即契约」。 */ getCenterPrompts: () => PromptsDomainFaces | undefined; /** 活引用(registry 热应用换引用)—— 见文件头「位置即契约」。 */ getKeyResolver: () => ReturnType; taskAttachmentStore: TaskAttachmentStore | undefined; perSessionCwd: Map; setSessionCwd: (sid: string, cwd: string) => void; setSessionShellEnv: (sid: string, env: Record) => void; /** 两张 per-session 登记簿的**租户围栏**(codex R1-F1):每次提交对拍本会话的主人,换主即清。 * 论证(为什么 device lane 把这条从「不需要」变成「必需」)逐字见 `createSessionScopedRegistries` 头注。 */ fenceSessionOwner: (sid: string, owner: string | null) => void; hookLlm: ReturnType["hookLlm"]; hookAgent: HookLlmCall; fleetBus: FleetEventBus; hookWakeBus: { deliver?: (sessionId: string, text: string) => Promise; }; /** [ref] 件⑤:per-session「显式 bypassPermissions」登记簿的写腿(`boot/session-shell-gate-registry.ts`); * 阶段④ 算出 effMode 的那一行登记,runner-deps 的 config 忠告汇点按 sessionId 回查定级。缺席(桩)= 不登记。 */ noteSessionShellGate?: ((sessionId: string | undefined, explicitOff: boolean) => void) | undefined; resumeAnchorStore: ReturnType | undefined; ownerAware: OwnerAwareSessionStore; taskLimitCaps: { timeoutSec: number | undefined; maxOutputTokens: number | undefined; maxTurns: number | undefined; }; taskTimeoutSec: number; selectEnvTool: ReturnType | undefined; sendUserFileToolSpec: ReturnType | undefined; memoryEngine: { backend: MemoryBackend; root: string; } | undefined; durableEnabled: boolean; /** [ref] ([ref] 案二):活体 AskUserQuestion 面(QuestionCoordinator 的判决探针切面)。在场(= * ASK_QUESTION_ENABLED)时 durable question 门按活流上下文分腿、spec 不再 stamp QUESTION_AWAITS_RESUME * (否则 spec.onQuestion 恒遮蔽 RunnerDeps.onQuestion 的活人腿);缺席时行为与旧形逐字一致。 */ liveQuestionFace: LiveQuestionFace | undefined; /** * [ref] 件C —— 部署级**活体审批席**(`RunnerDeps.onAsk` 的同源铸法,main.ts 递 * `createRunnerDepsOnAsk(toolApproval)`;单一属主同 `boot/runner-deps.ts`,与 `parked-revive-gate.ts` * 的 `approverSeat` 是同一格)。 * * 本域**只**用于逐腿 `interactionPosture` 判据(见下方 `declaresInteractivePosture`),不参与任何 * 装配 —— spec 上的 per-task `onAsk` 由 `http/routes/tasks.ts` 在 resolveSpec **之后**写(bound 席), * 而 core 的 posture 门读的是 `spec.onAsk ?? deps.onAsk`,两个装配点是**同一个条件**的两种表达 * (spec 位只在 `deps.toolApproval` 在场时才写,且写的也是函数)⇒ 拿 deps 位判「席位形」恒等。 */ approverSeat: RunnerDepsOnAsk | undefined; approvalExemptionStore: ReturnType | undefined; singleUserAutoAcceptBaseline: boolean; checkpointStore: ReturnType> | undefined; deploymentHooks: NonNullable; imageIndex: ReturnType> | undefined; perTaskImage: PerTaskImageRegistry; sessionEnvSelection: SessionEnvironmentSelection; /** [ref] 件C:本部署已校验的锁集(boot/governance-seams.ts 的产物,与 `RunnerDeps.lockedConfig` * 同源一次解析)。空集 = 无锁 = 现行为。本域只用它做**同步拒面**(§4.3),不做第二次裁决。 */ lockedKeys: ReadonlySet; } export declare function createResolveSpec(ctx: ResolveSpecCtx): ServiceDeps["resolveSpec"]; export {}; //# sourceMappingURL=resolve-spec.d.ts.map