51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import { PlannerAgent, ResearcherAgent, WriterAgent } from './factory';
|
|
import { AgentEngine, PipelineStage } from '../lib/engine';
|
|
|
|
export class AgentWorkflowManager {
|
|
/**
|
|
* 리팩토링된 고성능 에이전트 엔진을 통해 워크플로우를 실행합니다.
|
|
*/
|
|
public static async runStrictWorkflow(
|
|
prompt: string,
|
|
modelName: string,
|
|
brainContext: string,
|
|
signal: AbortSignal,
|
|
onProgress: (step: string, message: string) => void
|
|
): Promise<string> {
|
|
const planner = new PlannerAgent(modelName);
|
|
const researcher = new ResearcherAgent(modelName);
|
|
const writer = new WriterAgent(modelName);
|
|
const engine = new AgentEngine(planner, researcher, writer);
|
|
const missionId = `mission_${Date.now()}`;
|
|
|
|
try {
|
|
return await engine.runMission(
|
|
missionId,
|
|
prompt,
|
|
brainContext,
|
|
signal,
|
|
(stage: PipelineStage, message: string) => {
|
|
onProgress(this.mapStageToUI(stage), message);
|
|
}
|
|
);
|
|
} catch (error: any) {
|
|
if (error.name === 'AbortError' || error.message.includes('cancelled')) {
|
|
throw error;
|
|
}
|
|
throw new Error(`[Workflow Manager] ${error.message}`);
|
|
}
|
|
}
|
|
|
|
private static mapStageToUI(stage: PipelineStage): string {
|
|
const maps: Record<PipelineStage, string> = {
|
|
idle: '대기',
|
|
planner: 'Planner',
|
|
researcher: 'Researcher',
|
|
writer: 'Writer',
|
|
completed: '완료',
|
|
error: '오류'
|
|
};
|
|
return maps[stage] || '진행 중';
|
|
}
|
|
}
|