import { type AgentConfig, type IsolationMode, type JoinMode, parseThinkingLevel, type ThinkingLevel } from "./types.js"; interface AgentInvocationParams { model?: string; thinking?: string; max_turns?: number; run_in_background?: boolean; inherit_context?: boolean; isolated?: boolean; isolation?: IsolationMode; } export function resolveAgentInvocationConfig( agentConfig: AgentConfig | undefined, params: AgentInvocationParams, ): { modelInput?: string; modelFromParams: boolean; thinking?: ThinkingLevel; maxTurns?: number; inheritContext: boolean; runInBackground: boolean; isolated: boolean; isolation?: IsolationMode; } { const rawThinking = params.thinking ?? agentConfig?.thinking; return { modelInput: params.model ?? agentConfig?.model, modelFromParams: params.model != null, thinking: parseThinkingLevel(rawThinking), // Param-first for max_turns (same as model/thinking). A caller's // Agent(..., max_turns: N) must win over the agent-profile default; // config-first silently ignored explicit budgets (CHE-28). maxTurns: params.max_turns ?? agentConfig?.maxTurns, inheritContext: agentConfig?.inheritContext ?? params.inherit_context ?? false, runInBackground: agentConfig?.runInBackground ?? params.run_in_background ?? false, isolated: agentConfig?.isolated ?? params.isolated ?? false, isolation: agentConfig?.isolation ?? params.isolation, }; } export function resolveJoinMode(defaultJoinMode: JoinMode, runInBackground: boolean): JoinMode | undefined { return runInBackground ? defaultJoinMode : undefined; }