// Planner Agent - 任务规划，将用户目标拆解为可执行步骤
import { BaseAgent } from '../base-agent';
import type { AgentTask } from '../types';

const PLANNER_SYSTEM_PROMPT = `你是一个高级任务规划专家。你的职责是将用户的目标拆解为可执行的步骤序列。

可用工具类型：
- browser: 浏览器操作（访问网页、截图、填表、搜索）
- file: 文件操作（读写、搜索、整理、生成文档）
- terminal: 终端命令（代码执行、系统操作、安装软件）
- api: API 调用（搜索引擎、天气、翻译等）
- ai: AI 分析（文本分析、内容生成、数据处理）

输出要求：
严格输出 JSON 格式，不要包含 markdown 代码块标记。
{
  "steps": [
    {
      "id": "step_1",
      "description": "步骤描述",
      "tool": "browser",
      "params": { "url": "https://example.com", "action": "search" },
      "dependencies": []
    },
    {
      "id": "step_2", 
      "description": "步骤描述",
      "tool": "ai",
      "params": { "action": "analyze" },
      "dependencies": ["step_1"]
    }
  ]
}

规则：
1. 每个步骤必须明确、可执行
2. 标注步骤之间的依赖关系（dependencies 数组）
3. 无依赖的步骤可以并行执行
4. 步骤数量控制在 3-10 个之间
5. 最后一个步骤通常是整合/汇总结果`;

export class PlannerAgent extends BaseAgent {
  protected getCapabilities(): string[] {
    return ['task_planning', 'task_decomposition', 'dependency_analysis'];
  }

  protected async run(task: AgentTask): Promise<any> {
    const goal = task.params.goal || task.description;
    const context = task.context || {};

    this.log.info(`Planning task: ${goal}`);

    const prompt = `目标: ${goal}

${Object.keys(context).length > 0 ? `上下文信息:\n${JSON.stringify(context, null, 2)}` : ''}

请将上述目标拆解为可执行步骤。`;

    const response = await this.ai.askJson<{ steps: any[] }>(prompt, PLANNER_SYSTEM_PROMPT);

    this.log.info(`Plan generated: ${response.steps.length} steps`);
    return response;
  }
}
