import type { StudioSession, StudioToolChoice } from '../../domain/types' export interface StudioSessionAgentConfig { toolChoice?: StudioToolChoice } export function getStudioSessionAgentConfig(session: StudioSession): StudioSessionAgentConfig { const metadata = session.metadata if (!metadata || typeof metadata !== 'object') { return {} } const candidate = (metadata as Record).agentConfig if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) { return {} } const toolChoice = normalizeToolChoice((candidate as Record).toolChoice) return toolChoice ? { toolChoice } : {} } export function resolveStudioToolChoice(input: { session: StudioSession override?: StudioToolChoice }): StudioToolChoice | undefined { return normalizeToolChoice(input.override) ?? getStudioSessionAgentConfig(input.session).toolChoice } export function inheritStudioSessionMetadata(session: StudioSession): Record | undefined { if (!session.metadata || typeof session.metadata !== 'object') { return undefined } return { ...session.metadata } } export function createStudioSessionMetadata(input: { existing?: Record agentConfig?: StudioSessionAgentConfig permissionMode?: 'safe' | 'auto' | 'full' }): Record | undefined { const toolChoice = normalizeToolChoice(input.agentConfig?.toolChoice) const permissionMode = normalizePermissionMode(input.permissionMode) const base = input.existing ? { ...input.existing } : {} const existingAgentConfig = base.agentConfig && typeof base.agentConfig === 'object' && !Array.isArray(base.agentConfig) ? { ...(base.agentConfig as Record) } : {} if (!toolChoice) { if (!Object.keys(existingAgentConfig).length) { delete base.agentConfig } else { base.agentConfig = existingAgentConfig } } else { base.agentConfig = { ...existingAgentConfig, toolChoice, } } if (permissionMode) { base.permissionMode = permissionMode } else { delete base.permissionMode } return Object.keys(base).length ? base : undefined } function normalizeToolChoice(value: unknown): StudioToolChoice | undefined { return value === 'auto' || value === 'required' || value === 'none' ? value : undefined } function normalizePermissionMode(value: unknown): 'safe' | 'auto' | 'full' | undefined { return value === 'safe' || value === 'auto' || value === 'full' ? value : undefined }