---
name: diagnostics
description: 系统诊断工具，包括健康检查、日志分析、代理诊断、MCP 诊断
trigger: 用户询问系统状态、健康检查、是否有异常、分析日志、查找错误、排查问题、代理连接失败、转发异常、响应慢、请求超时、代理不通、最近有什么报错、MCP 连接失败、MCP 工具不可用、子任务失败、子智能体异常
---

# 系统诊断

根据用户问题选择对应的诊断流程执行。如果用户未指定具体问题，先执行「健康检查」获取全局状态，再根据发现的异常深入分析。

---

## 一、健康检查

当用户询问系统状态、整体运行情况时执行。

### 步骤

1. 调用 `check_health` 获取系统基本状态（版本、运行时长、代理计数）
2. 调用 `get_proxies` 获取所有代理状态
3. 调用 `get_providers` 获取所有供应商及其密钥健康状态
4. 调用 `get_key_health` 获取密钥详细健康数据
5. 分析以上数据，识别异常项

### 输出模板

#### 系统状态
- 版本: X，运行时长: X，整体状态: 正常/异常

#### 代理状态
| 代理 | 端口 | 状态 | 供应商 | 问题 |
|------|------|------|--------|------|
| ... | ... | 运行中/已停止/异常 | ... | ... |

#### 密钥健康
| 供应商 | 状态 | 正常 Key 数 | 问题 Key |
|--------|------|-------------|----------|
| ... | healthy/partial/unhealthy | X/Y | 列出异常 Key 及原因 |

#### 发现的问题
| 严重程度 | 问题 | 建议 |
|----------|------|------|
| 高/中/低 | ... | ... |

---

## 二、日志分析

当用户询问日志错误、报错排查、问题趋势时执行。

### 步骤

1. 调用 `get_system_logs`（limit=50）获取系统日志
2. 调用 `get_recent_requests`（limit=30）获取请求记录，可用 `status: 'failure'` 或 `status: '429'` 过滤异常请求
3. 按以下维度分析：

**错误识别**：筛选 ERROR 日志和非 2xx 请求，提取错误模式
**频率分析**：同类错误出现次数、是否集中在某时间段、是否有递增趋势
**关联分析**：错误是否集中在某个代理/供应商/模型，限流是否集中在某个 Key

### 输出模板

#### 错误摘要
| 错误类型 | 出现次数 | 影响范围 | 首次/最近出现 |
|----------|----------|----------|---------------|
| ... | ... | 代理X/供应商Y | ... |

#### 请求异常
| 时间 | 代理 | 模型 | 状态 | 延迟 | 问题 |
|------|------|------|------|------|------|
| ... | ... | ... | 4xx/5xx | ...ms | ... |

#### 趋势与建议
- 错误率: X%，是否需要立即处理
- 根因分析和修复建议

---

## 三、代理诊断

当用户报告某个代理连接失败、转发异常、响应慢时执行。

### 步骤

1. 调用 `get_proxies` 获取代理列表，确认目标代理
2. 调用 `get_proxy` 获取该代理详细配置
3. 调用 `get_provider` 获取关联供应商详情
4. 调用 `get_key_health` 获取该供应商密钥状态
5. 调用 `get_recent_requests`（limit=20, proxyId=目标代理ID）筛选该代理的请求记录
6. 按以下清单逐项检查：

**代理状态**：是否运行中？端口是否监听？启动日志有无报错？
**供应商连通**：供应商是否存在？API 地址可访问？有无正常密钥？
**密钥健康**：有无 healthy Key？是否全部限流？有无失效 Key？
**请求链路**：状态码分布？平均延迟？有无超时/连接拒绝？
**路由策略**：策略是否合理？providerPool 中的供应商是否可用？
**客户端连通**：如需进一步验证，可调用 `test_client_connection`（proxyId）向代理发送测试请求，确认端到端连通性

### 输出模板

#### 代理信息
- 名称: X，端口: X，状态: X
- 供应商: X，协议: X，路由策略: X

#### 诊断结果
| 检查项 | 状态 | 详情 |
|--------|------|------|
| 代理运行 | 正常/异常 | ... |
| 供应商连通 | 正常/异常 | ... |
| 密钥健康 | 正常/异常 | X/Y 个 Key 可用 |
| 请求链路 | 正常/异常 | 成功率 X%，平均延迟 Xms |
| 路由策略 | 正常/异常 | ... |

#### 修复建议
| 优先级 | 操作 | 说明 |
|--------|------|------|
| 高/中/低 | ... | ... |

---

## 四、MCP 诊断

当用户报告 MCP 连接失败、工具不可用、无法调用 MCP 功能时执行。

### 常见 MCP 问题排查

| 问题 | 可能原因 | 解决方案 |
|------|----------|----------|
| 连接失败 | 包名错误 | 确认正确的包名：`@upstash/context7-mcp`、`@modelcontextprotocol/server-sequential-thinking`、`open-websearch`、`stagehand-mcp` |
| 连接失败 | 端口被占用 | 设置环境变量 `MODE=stdio` 禁用 HTTP 服务器（推荐），或更改 `PORT` |
| 连接关闭 | 状态异常 | 删除该 MCP 配置，重新添加并连接 |
| 工具不可用 | MCP 未连接 | 检查 MCP 服务状态是否为「已连接」 |

### 步骤

1. 调用 `get_mcp_servers` 获取所有 MCP 服务状态
2. 检查问题 MCP 的连接状态
3. 查看系统日志中的 MCP 相关错误
4. 验证 MCP 包名和环境变量配置是否正确

### 输出模板

#### MCP 服务状态
| 服务 | 状态 | 工具数 | 问题 |
|------|------|--------|------|
| ... | 已连接/未连接/失败 | X | ... |

#### 诊断结果
| 检查项 | 状态 | 详情 |
|--------|------|------|
| MCP 配置 | 正常/异常 | 包名: X，环境变量: X |
| 连接状态 | 正常/异常 | ... |
| 工具可用性 | 正常/异常 | 已连接工具数: X |

#### 修复建议
| 优先级 | 操作 | 说明 |
|--------|------|------|
| 高/中/低 | ... | ... |

---

## 五、子智能体诊断

当用户报告子任务失败、子代理超时、委派任务异常时执行。

### 常见子智能体问题排查

| 问题 | 可能原因 | 解决方案 |
|------|----------|----------|
| 任务超时 | 子代理执行时间超过限制 | 增大「设置」→「子智能体」→「超时时间」 |
| 任务失败 | 子代理调用了被阻止的工具 | 检查「阻止工具」和「拒绝工具」配置 |
| 工具被拒绝 | 子代理尝试了 auto-deny 工具 | 正常行为，子代理会换其他方式完成 |
| 命令被禁止 | 子代理执行了 forbidden 级别的命令 | 使用 `test_exec_policy` 检查策略，必要时调整用户规则 |
| 命令需确认 | 子代理执行了 prompt 级别的命令 | 子代理会自动批准并记录日志，可在系统日志中审查 |
| 子代理无响应 | LLM 服务不可用或代理未运行 | 检查后端代理是否运行中 |
| 沙盒写入失败 | 子代理尝试写入沙盒外路径 | 正常行为，沙盒隔离保护系统安全 |
| 上下文溢出 | 子代理对话轮次过多 | 减少「最大轮次」或简化子任务目标 |

### 步骤

1. 调用 `list_tasks`（status=failed）获取失败的任务列表
2. 调用 `get_task` 获取失败任务的详细信息（含 error 字段）
3. 调用 `get_system_logs` 搜索 `[delegate]` 和 `[exec-policy]` 相关日志
4. 调用 `get_exec_policy` 查看当前策略概览，`get_exec_policy_rules` 查看完整规则
5. 如有命令被拒绝，使用 `test_exec_policy` 测试具体命令，使用 `add_exec_policy_rule` 调整规则
6. 检查「设置」→「子智能体」配置是否合理
7. 检查后端代理是否正常运行

### 输出模板

#### 子任务状态
| 任务 ID | 目标 | 状态 | 耗时 | 问题 |
|---------|------|------|------|------|
| ... | ... | completed/failed/running | Xs | ... |

#### 诊断结果
| 检查项 | 状态 | 详情 |
|--------|------|------|
| 后端代理 | 正常/异常 | ... |
| 子智能体配置 | 正常/异常 | 并发X，轮次X，超时Xs |
| 工具权限 | 正常/异常 | 阻止: X，拒绝: X |
| 执行策略 | 正常/异常 | allow X, prompt X, forbidden X |
| 沙盒环境 | 正常/异常 | ... |

#### 修复建议
| 优先级 | 操作 | 说明 |
|--------|------|------|
| 高/中/低 | ... | ... |
