import { resolveStudioToolChoice } from '../../session/session-agent-config' import type { StudioAssistantMessage, StudioRun } from '../../../domain/types' import type { StudioPreparedRunContext, StudioRunRequestInput, StudioSessionRunnerDependencies } from './dependency-center' import { hasUsableCustomApiConfig } from './factory' import { createAgentLoopExecution, createResolvedPlanExecution } from './execution-factories' import { executePreparedStream } from './execution-manager' export async function routePreparedRun( deps: StudioSessionRunnerDependencies, prepared: StudioPreparedRunContext, abortSignal: AbortSignal, ): Promise<{ run: StudioRun; assistantMessage: StudioAssistantMessage; text: string }> { if (hasUsableCustomApiConfig(prepared.input.customApiConfig)) { return executePreparedStream(deps, prepared, createAgentLoopExecution(deps, { prepared, customApiConfig: prepared.input.customApiConfig, toolChoice: resolveStudioToolChoice({ session: prepared.input.session, override: prepared.input.toolChoice }), abortSignal, }), abortSignal) } const plan = await deps.resolveTurnPlan({ projectId: prepared.input.projectId, session: prepared.input.session, run: prepared.run, assistantMessage: prepared.assistantMessage, inputText: prepared.input.inputText, workContext: prepared.workContext }) return executePreparedStream(deps, prepared, createResolvedPlanExecution(deps, { prepared, plan, customApiConfig: prepared.input.customApiConfig, toolChoice: prepared.input.toolChoice, abortSignal, }), abortSignal) }