ManimCat / src /studio-agent /runtime /session-runner-helpers.ts
littlebrian's picture
Sync from enhance: d795216 feat: implement patch response parser for search and replace functionality
9bd4242
Raw
History Blame Contribute Delete
2.03 kB
import { createStudioAssistantMessage, createStudioRun } from '../domain/factories'
import type {
StudioKind,
StudioMessagePart,
StudioRun,
StudioRuntimeTurnPlan,
StudioSession
} from '../domain/types'
import { buildStudioSubagentPrompt } from '../prompts/subagent-prompt'
import type { StudioResolvedSkill } from './tool-runtime-context'
export function buildDraftRun(session: StudioSession, inputText: string): StudioRun {
return createStudioRun({
sessionId: session.id,
inputText,
activeAgent: session.agentType
})
}
export function buildDraftAssistantMessage(session: StudioSession) {
return createStudioAssistantMessage({
sessionId: session.id,
agent: session.agentType
})
}
export function buildSubagentPrompt(input: {
agentType: 'reviewer' | 'designer'
inputText: string
files?: string[]
skillName?: string
skill?: StudioResolvedSkill
studioKind?: StudioKind
}): string {
return buildStudioSubagentPrompt({
agentType: input.agentType,
workflowInput: input.inputText,
files: input.files,
skill: input.skill,
requestedSkillName: input.skillName,
studioKind: input.studioKind
})
}
export function finalizeRunState(input: {
run: StudioRun
outcome: 'continue' | 'stop' | 'compact'
}): StudioRun {
return {
...input.run,
status: input.outcome === 'stop' ? 'failed' : 'completed',
completedAt: new Date().toISOString(),
error: input.outcome === 'stop' ? 'Run stopped after tool failure or rejection' : undefined
}
}
export function failRunState(run: StudioRun, error: string): StudioRun {
return {
...run,
status: 'failed',
completedAt: new Date().toISOString(),
error
}
}
export function extractLatestAssistantText(parts: StudioMessagePart[]): string {
const textPart = [...parts].reverse().find((part) => part.type === 'text')
return textPart?.type === 'text' ? textPart.text : ''
}
export function withResolvedPlan<T extends { plan: StudioRuntimeTurnPlan }>(input: T): T {
return input
}