import type { AgentInfo } from '../types.js';

/**
 * 探索 Agent
 * 子代理模式，快速探索代码库，搜索文件和代码结构（只读）
 *
 * 特性：
 * - 强大的搜索能力：Glob/Grep/Read
 * - 只读 bash 命令：ls, tree, find, git log 等
 * - thoroughness 参数：控制探索深度
 * - 禁用写入和 Todo 工具
 *
 * 使用方式（通过 Task 工具）：
 * - quick: 快速搜索，找到关键文件即可
 * - medium: 中等深度，分析代码结构
 * - thorough: 深度探索，完整理解架构
 */
export const exploreAgent: Omit<AgentInfo, 'name'> = {
  description: '快速探索代码库，搜索文件和代码结构（只读）。支持 thoroughness 参数: quick/medium/thorough',
  mode: 'subagent',
  prompt: `你是一个代码探索专家，作为子代理被调用来搜索和分析代码库。

## 角色说明
你的任务是快速、准确地探索代码库，找到相关文件和代码结构。

## 探索深度 (thoroughness)
根据任务描述中的深度要求调整你的行为：

### quick (快速)
- 目标：快速定位关键文件
- 策略：使用 glob 模式匹配，grep 关键词搜索
- 步骤：2-5 步
- 输出：文件列表 + 简要说明

### medium (中等)
- 目标：理解代码结构和关系
- 策略：搜索 + 读取关键文件 + 分析依赖
- 步骤：5-10 步
- 输出：结构分析 + 关键实现说明

### thorough (深度)
- 目标：完整理解架构和设计
- 策略：全面搜索 + 深入阅读 + 跨文件分析
- 步骤：10-20 步
- 输出：详细架构文档 + 设计模式 + 建议

## 可用工具
- **glob**: 文件模式匹配 (*.ts, src/**/*.tsx)
- **grep_content**: 代码内容搜索
- **read_file**: 读取文件内容
- **search_files**: 文件名搜索
- **list_directory**: 目录列表
- **bash**: 只读命令 (ls, tree, find, git log/status/diff)

## 工作原则
1. **效率优先** - 先用 glob/grep 定位，再 read 确认
2. **结构化输出** - 使用 Markdown 组织结果
3. **关注重点** - 找到关键文件和核心逻辑
4. **避免冗余** - 不要读取无关文件

## 输出格式
\`\`\`markdown
## 探索结果

### 关键文件
- \`path/to/file.ts\` - 描述作用

### 代码结构
[结构说明]

### 发现
[关键发现和建议]
\`\`\`

## 限制
- 只读操作，禁止修改任何文件
- 不要管理 Todo 列表
- 不要调用 Task 工具`,
  tools: {
    disabled: [
      // 禁用所有写入操作
      'write_file',
      'edit_file',
      'delete_file',
      'move_file',
      'copy_file',
      'create_directory',
      'multi_edit',
      // 禁用 Todo（由父 Agent 管理）
      'todo_read',
      'todo_write',
      // 禁用 Git 写操作
      'git_add',
      'git_commit',
      'git_push',
      'git_pull',
      'git_checkout',
      'git_stash',
      // 禁用 checkpoint
      'checkpoint_create',
      'checkpoint_restore',
      'undo',
    ],
    noTask: true,
  },
  permission: {
    file: {
      read: 'allow',
      write: 'deny',
      edit: 'deny',
      delete: 'deny',
    },
    bash: {
      enabled: true,
      rules: [
        // ============ 文件查看 - 允许 ============
        { pattern: 'ls', action: 'allow' },
        { pattern: 'ls *', action: 'allow' },
        { pattern: 'pwd', action: 'allow' },
        { pattern: 'cat *', action: 'allow' },
        { pattern: 'head *', action: 'allow' },
        { pattern: 'tail *', action: 'allow' },

        // ============ 搜索 - 允许 ============
        { pattern: 'find *', action: 'allow' },
        { pattern: 'grep *', action: 'allow' },
        { pattern: 'rg *', action: 'allow' },
        { pattern: 'tree', action: 'allow' },
        { pattern: 'tree *', action: 'allow' },

        // ============ 文件信息 - 允许 ============
        { pattern: 'wc *', action: 'allow' },
        { pattern: 'stat *', action: 'allow' },
        { pattern: 'file *', action: 'allow' },
        { pattern: 'du *', action: 'allow' },
        { pattern: 'which *', action: 'allow' },

        // ============ Git 只读 - 允许 ============
        { pattern: 'git status', action: 'allow' },
        { pattern: 'git status *', action: 'allow' },
        { pattern: 'git diff', action: 'allow' },
        { pattern: 'git diff *', action: 'allow' },
        { pattern: 'git log', action: 'allow' },
        { pattern: 'git log *', action: 'allow' },
        { pattern: 'git show *', action: 'allow' },
        { pattern: 'git branch', action: 'allow' },
        { pattern: 'git branch *', action: 'allow' },
        { pattern: 'git ls-files*', action: 'allow' },

        // ============ 所有写操作 - 拒绝 ============
        { pattern: 'rm *', action: 'deny' },
        { pattern: 'mv *', action: 'deny' },
        { pattern: 'cp *', action: 'deny' },
        { pattern: 'mkdir *', action: 'deny' },
        { pattern: 'touch *', action: 'deny' },
        { pattern: 'chmod *', action: 'deny' },
        { pattern: 'git add *', action: 'deny' },
        { pattern: 'git commit *', action: 'deny' },
        { pattern: 'git push *', action: 'deny' },
        { pattern: 'git checkout *', action: 'deny' },
        { pattern: '* > *', action: 'deny' },
        { pattern: '* >> *', action: 'deny' },
      ],
      default: 'deny', // 其他命令默认拒绝（比 Plan 更严格）
    },
    git: {
      read: 'allow',
      write: 'deny',
      dangerous: 'deny',
    },
  },
};
