Bin29's picture
Sync from main: e764154 feat(plot-skill): add math-exam-diagram SKILL.md for exam-style math figures
abcf568
import type { CustomApiConfig } from '../../../../types'
import type { StudioRunProcessor } from '../run-processor'
import type { StudioTurnPlanResolver } from '../../planning/turn-plan-resolver'
import type {
StudioResolvedSkill,
StudioSkillDiscoveryEntry,
StudioSkillUsageSummary,
StudioSubagentRunRequest,
StudioSubagentRunResult
} from '../../tools/tool-runtime-context'
import type {
StudioAssistantMessage,
StudioEventBus,
StudioMessageStore,
StudioPartStore,
StudioProcessorStreamEvent,
StudioRun,
StudioRunStore,
StudioSession,
StudioSessionEventStore,
StudioSessionStore,
StudioTaskStore,
StudioToolChoice,
StudioWorkContext,
StudioWorkResultStore,
StudioWorkStore
} from '../../../domain/types'
import type { StudioToolRegistry } from '../../../tools/registry'
export interface StudioSessionRunnerOptions {
registry: StudioToolRegistry
messageStore: StudioMessageStore
partStore: StudioPartStore
runStore?: StudioRunStore
sessionStore?: StudioSessionStore
sessionEventStore?: StudioSessionEventStore
taskStore?: StudioTaskStore
workStore?: StudioWorkStore
workResultStore?: StudioWorkResultStore
eventBus?: StudioEventBus
resolveSkill?: (name: string, session: StudioSession) => Promise<StudioResolvedSkill>
listSkills?: (session: StudioSession) => Promise<StudioSkillDiscoveryEntry[]>
listSkillSummaries?: (session: StudioSession) => Promise<StudioSkillUsageSummary[]>
recordSkillUsage?: (input: {
session: StudioSession
skillName: string
reason?: string
takeaway?: string
stillRelevant?: boolean
}) => Promise<void>
resolveTurnPlan: StudioTurnPlanResolver
}
export interface StudioRunRequestInput {
projectId: string
session: StudioSession
inputText: string
customApiConfig?: CustomApiConfig
toolChoice?: StudioToolChoice
runMetadata?: Record<string, unknown>
}
export interface StudioPreparedRunContext {
input: StudioRunRequestInput
workContext: StudioWorkContext
run: StudioRun
assistantMessage: StudioAssistantMessage
eventBus: StudioEventBus
}
export interface StudioPreparedRunExecution {
events: AsyncGenerator<StudioProcessorStreamEvent>
startLog?: {
event: string
payload: Record<string, unknown>
}
}
export interface StudioBackgroundRunHandle {
run: StudioRun
assistantMessage: StudioAssistantMessage
abort: (reason?: string) => void
completion: Promise<StudioSubagentRunResult & { run: StudioRun; assistantMessage: StudioAssistantMessage }>
}
export interface StudioSessionRunnerDependencies {
registry: StudioToolRegistry
processor: StudioRunProcessor
messageStore: StudioMessageStore
partStore: StudioPartStore
runStore?: StudioRunStore
sessionStore?: StudioSessionStore
sessionEventStore?: StudioSessionEventStore
taskStore?: StudioTaskStore
workStore?: StudioWorkStore
workResultStore?: StudioWorkResultStore
sharedEventBus?: StudioEventBus
resolveSkill?: (name: string, session: StudioSession) => Promise<StudioResolvedSkill>
listSkills?: (session: StudioSession) => Promise<StudioSkillDiscoveryEntry[]>
listSkillSummaries?: (session: StudioSession) => Promise<StudioSkillUsageSummary[]>
recordSkillUsage?: StudioSessionRunnerOptions['recordSkillUsage']
resolveTurnPlan: StudioTurnPlanResolver
createRun: (session: StudioSession, inputText: string, metadata?: Record<string, unknown>) => StudioRun
createAssistantMessage: (session: StudioSession, runId?: string) => Promise<StudioAssistantMessage>
buildWorkContext: (input: { session: StudioSession; inputText: string }) => Promise<StudioWorkContext>
runSubagent: (input: StudioSubagentRunRequest) => Promise<StudioSubagentRunResult>
}
export function createDependencyCenter(
options: StudioSessionRunnerOptions,
input: {
processor: StudioRunProcessor
createRun: StudioSessionRunnerDependencies['createRun']
createAssistantMessage: StudioSessionRunnerDependencies['createAssistantMessage']
buildWorkContext: StudioSessionRunnerDependencies['buildWorkContext']
runSubagent: StudioSessionRunnerDependencies['runSubagent']
},
): StudioSessionRunnerDependencies {
return {
registry: options.registry,
processor: input.processor,
messageStore: options.messageStore,
partStore: options.partStore,
runStore: options.runStore,
sessionStore: options.sessionStore,
sessionEventStore: options.sessionEventStore,
taskStore: options.taskStore,
workStore: options.workStore,
workResultStore: options.workResultStore,
sharedEventBus: options.eventBus,
resolveSkill: options.resolveSkill,
listSkills: options.listSkills,
listSkillSummaries: options.listSkillSummaries,
recordSkillUsage: options.recordSkillUsage,
resolveTurnPlan: options.resolveTurnPlan,
createRun: input.createRun,
createAssistantMessage: input.createAssistantMessage,
buildWorkContext: input.buildWorkContext,
runSubagent: input.runSubagent
}
}