import type { StudioAgentType, StudioKind, StudioWorkContext } from '../domain/types' import type { StudioTurnPolicyDecision } from './turn-plan-policy' import { getStudioExecutionPolicy } from '../orchestration/studio-execution-policy' interface InsertStudioRemindersInput { assistantText?: string agentType: StudioAgentType studioKind?: StudioKind unsupportedRequestedTools: string[] workContext?: StudioWorkContext policyDecision: StudioTurnPolicyDecision } export function insertStudioReminders(input: InsertStudioRemindersInput): string | undefined { const baseText = input.assistantText?.trim() const reminders = buildReminders(input) if (!baseText) { return reminders.length ? reminders.join('\n') : undefined } if (!reminders.length) { return baseText } return [baseText, ...reminders].join('\n') } function buildReminders(input: InsertStudioRemindersInput): string[] { const reminders: string[] = [] const policy = getStudioExecutionPolicy(input.studioKind ?? 'manim') if (input.agentType === 'builder' && input.policyDecision.mode === 'continue-current-work' && input.workContext?.currentWork) { reminders.push(policy.builderReminderTexts.runningWork(input.workContext.currentWork.title)) } if (input.agentType === 'builder' && input.workContext?.lastRender?.status === 'failed') { reminders.push(policy.builderReminderTexts.failedRender) } if (input.workContext?.pendingEvents?.length) { const latestEvents = input.workContext.pendingEvents.slice(0, 3).map((event) => event.summary) reminders.push(policy.builderReminderTexts.pendingEvents(latestEvents)) } if (input.unsupportedRequestedTools.length) { reminders.push(policy.builderReminderTexts.unsupportedTools(input.unsupportedRequestedTools)) } return reminders }