import type { CustomApiConfig } from '../../types' import type { StudioAssistantMessage, StudioEventBus, StudioMessageStore, StudioPartStore, StudioRun, StudioRunStore, StudioSession, StudioToolChoice, StudioRenderStore, } from '../domain/types' import type { StudioDocumentationContextProvider } from '../documentation/studio-documentation-context' import { StudioToolRegistry } from '../tools/registry' import type { StudioModelPort } from '../model/studio-model-port' import { StudioSessionRunner } from './execution/session-runner/session-runner' import type { StudioBackgroundRunHandle } from './execution/session-runner/dependency-center' import type { StudioRunExecutionResult } from './tools/tool-runtime-context' interface StudioBuilderRuntimeOptions { registry: StudioToolRegistry messageStore: StudioMessageStore partStore: StudioPartStore runStore?: StudioRunStore renderStore?: StudioRenderStore documentationProvider?: StudioDocumentationContextProvider eventBus?: StudioEventBus } export class StudioBuilderRuntime { private readonly runner: StudioSessionRunner constructor(options: StudioBuilderRuntimeOptions) { this.runner = new StudioSessionRunner({ registry: options.registry, messageStore: options.messageStore, partStore: options.partStore, runStore: options.runStore, renderStore: options.renderStore, documentationProvider: options.documentationProvider, eventBus: options.eventBus, }) } async createAssistantMessage(session: StudioSession): Promise { return this.runner.createAssistantMessage(session) } createRun(session: StudioSession, inputText: string, metadata?: Record): StudioRun { return this.runner.createRun(session, inputText, metadata) } async run(input: { projectId: string session: StudioSession inputText: string customApiConfig?: CustomApiConfig modelPort?: StudioModelPort toolChoice?: StudioToolChoice runMetadata?: Record }): Promise { return this.runner.run(input) } async startBackgroundRun(input: { projectId: string session: StudioSession inputText: string customApiConfig?: CustomApiConfig modelPort?: StudioModelPort toolChoice?: StudioToolChoice runMetadata?: Record }): Promise { return this.runner.startBackgroundRun(input) } abortBackgroundRun(handle: StudioBackgroundRunHandle, reason?: string): void { handle.abort(reason) } }