/** 工作流 YAML 定义的类型 */ export interface WorkflowDefinition { name: string; description?: string; agents_dir: string; llm: LLMConfig; concurrency?: number; inputs?: InputDefinition[]; steps: StepDefinition[]; } export interface LLMConfig { provider: 'claude' | 'openai' | 'ollama' | 'deepseek' | 'claude-code' | 'gemini-cli' | 'copilot-cli' | 'codex-cli' | 'openclaw-cli' | 'hermes-cli' | (string & {}); base_url?: string; api_key?: string; model?: string; agent?: string; max_tokens?: number; timeout?: number; retry?: number; } export interface InputDefinition { name: string; description?: string; required?: boolean; default?: string; } export interface StepDefinition { id: string; role: string; name?: string; emoji?: string; task: string; output?: string; skill?: string; skills?: string[]; depends_on?: string[]; type?: 'normal' | 'approval' | 'human_input'; prompt?: string; condition?: string; depends_on_mode?: 'all' | 'any_completed'; llm?: Partial; loop?: { back_to: string; max_iterations: number; exit_condition: string; }; } /** DAG 执行相关类型 */ export interface DAGNode { step: StepDefinition; dependencies: string[]; dependents: string[]; status: 'pending' | 'running' | 'completed' | 'failed' | 'skipped'; result?: string; error?: string; startTime?: number; endTime?: number; tokenUsage?: { input: number; output: number; }; agentName?: string; agentEmoji?: string; } /** LLM Connector 相关类型 */ export interface LLMResult { content: string; usage: { input_tokens: number; output_tokens: number; }; } export interface LLMConnector { chat(systemPrompt: string, userMessage: string, config: LLMConfig): Promise; } /** Agent Loader 相关类型 */ export interface AgentDefinition { name: string; description: string; emoji?: string; tools?: string; rolePath?: string; systemPrompt: string; } /** 执行结果 */ export interface WorkflowResult { name: string; success: boolean; steps: StepResult[]; totalDuration: number; totalTokens: { input: number; output: number; }; /** 原始用户输入(用于 --resume 时恢复) */ inputs?: Record; } export interface StepResult { id: string; role: string; agentName?: string; agentEmoji?: string; status: 'completed' | 'failed' | 'skipped'; output?: string; output_var?: string; error?: string; duration: number; tokens: { input: number; output: number; }; iterations?: number; }