---
name: mda-issue-log-analysis
description: 分析 MDA 公开 Issue、日志包或本地日志。用于 `https://github.com/1204244136/MDA/issues/...`、`#1234`、MDA 日志压缩包、识别失败、任务卡死、控制器差异、Pipeline/Agent/MXU 问题。会从 maafw.log、maafw.bak.*.log、go-service.log、mxu-tauri.log、mxu-web-*.log、mxu-agent*.log、config/*、on_error/ 中筛选证据，并结合 MDA、MaaFramework、MXU 代码和文档判断根因。
---

# MDA Issue / Log Analysis

## Scope

- 用于 MDA 仓库：`https://github.com/1204244136/MDA`。
- 输入可以是完整 issue URL、`#1234` 形式的 issue 编号、本地日志目录或日志压缩包路径。
- 只分析用户授权访问的公开 issue、用户提供的日志包或本地文件。
- 如果 issue 没有日志包，且问题明确需要运行证据，先说明证据不足；不要凭空推断根因。
- 如果发现 `.dmp` 文件，必须联动 `dmp-analysis` skill，不要只凭文本日志猜测崩溃原因。

## Workflow

### 1. 规范化输入

- `#1234` 视为 `https://github.com/1204244136/MDA/issues/1234`。
- 如果 URL 不是 `1204244136/MDA`，说明本 skill 不适用，除非用户明确要求按 MDA 同类日志格式分析。
- 如果输入是本地路径，先识别它是目录、zip 包还是单个日志文件。

### 2. 获取 issue / 日志上下文

从 issue 或用户描述中提取：

- MDA 版本。
- MaaFramework / MXU 版本。
- 控制器类型。
- 任务名 / 入口名。
- 用户期望行为。
- 实际行为。
- 复现步骤。
- 维护者评论。

维护者评论只能作为线索；仍需用日志和代码自行验证。

### 3. 提取日志附件

关注 MDA 导出的日志压缩包。附件命名可能随打包工具变化，不要只匹配单一文件名；优先寻找包含以下文件或目录的 zip：

- `maafw.log`
- `maafw.bak.*.log`
- `go-service.log`
- `mxu-tauri.log`
- `mxu-web-YYYY-MM-DD.log`
- `mxu-agent*.log`
- `config/`
- `on_error/`
- `.dmp`

如果同一个 issue 有多个日志包：

1. 先看最新一次复现。
2. 若 issue 在对比版本、控制器或配置，再补看前面的包。

### 4. 下载 / 解压日志包

二进制 zip 不要用网页抓取工具直接读取。使用终端下载到临时目录，例如：

```text
.cache/issue-logs/issue-<number>/
.cache/log-analysis/local-<timestamp>/
```

解压后先列目录，不要假定结构固定。常见差异：

- 多份 `mxu-agent-<index>-<pid>.log`。
- 多天 `mxu-web-YYYY-MM-DD.log`。
- `maafw.log` 过短，需要看 `maafw.bak.*.log`。
- 没有 `on_error/`。
- 现场图被日志导出体积限制截断。
- 包内存在 `.dmp`。

### 5. DMP 崩溃转储分析

如果发现 `.dmp`：

1. 立即读取并执行 `.claude/skills/dmp-analysis/SKILL.md`。
2. 解析异常类型、崩溃模块、crashing thread。
3. 需要时下载 MaaFramework / MXU PDB 并符号化。
4. 用 DMP 文件名中的 PID 与 `maafw.log` 的 `[Px<pid>]` 或 MXU 日志交叉验证。
5. 最终报告必须包含 DMP 分析区域，并列出 crashing thread 的全部有效帧。

不要把 `.dmp` 当作普通附件跳过。

### 6. 建立时间线

先定位用户认为出问题的时间，再串联日志：

1. `mxu-web-*`：前端提交了什么任务和配置。
2. `mxu-tauri.log`：实例、控制器、资源、任务开始/停止、agent 生命周期。
3. `maafw.log` / `maafw.bak.*.log`：Pipeline 节点识别、动作、超时、回调。
4. `go-service.log`：Go 自定义逻辑、环境检查、业务日志。
5. `mxu-agent*.log`：agent stdout/stderr 和用户运行日志面板。
6. `on_error/`：错误现场截图。

优先锁定本次复现的 `task_id`，后续分析都限定到该任务实例。一个日志包里经常混有历史运行，不要串任务。

### 7. 回溯到 MDA 代码和配置

MDA 代码证据优先顺序：

- 任务入口、控制器限制、用户选项：
    - `assets/tasks/*.json`
    - `assets/interface.json`
    - `assets/tasks/preset/*.json`
- Pipeline 节点：
    - `assets/resource/pipeline/**/*.json`
- Go 扩展逻辑：
    - `agent/go-service/**`
- Schema / 协议：
    - `tools/schema/*.json`
- 本地化文案：
    - `assets/locales/interface/zh_cn.json`
    - `assets/locales/interface/en_us.json`

总结任务、选项、界面提示时，优先读取 `zh_cn.json` 的中文文案，不要直接把 task id 当成用户可见名称。

### 8. 必要时查上游

先用 issue、日志、MDA 仓库和 MaaFramework 文档做初步归因。只有证据指向上游实现或现有证据不足时，再看：

- MaaFramework：`https://github.com/MaaXYZ/MaaFramework`
- MXU：`https://github.com/MistEO/MXU`
- maa-framework-go：`https://github.com/MaaXYZ/maa-framework-go`
- maa-framework-rs：`https://github.com/MaaXYZ/maa-framework-rs`

不要为了普通 Pipeline 配置问题过早下钻上游源码。

## Log Map

### `maafw.log`

MaaFramework 核心运行时日志。

最适合看：

- Pipeline 是否按预期推进。
- `next` / `on_error` 是否命中。
- `Tasker.Task.Starting` / `Succeeded` / `Failed`。
- `Node.Recognition.Failed` 连续重复。
- `Node.Action.Failed`。
- OCR / TemplateMatch / ColorMatch 细节。
- 控制器、截图、资源加载问题。

### `maafw.bak.*.log`

滚动日志。用于：

- 当前 `maafw.log` 不够长。
- 复现发生在较早时间。
- 对比同配置的历史成功/失败样本。

不要把旧日志误判成最新复现。

### `go-service.log`

MDA Go Agent 日志。

最适合看：

- 自定义识别器/动作是否触发。
- taskersink 环境检查，例如 HDR、分辨率、进程检查、会员/额度逻辑。
- Go 参数解析、外部请求、业务扩展错误。

环境告警不一定是根因，必须和 `maafw.log`、现场截图一起判断。

### `mxu-tauri.log`

MXU Tauri/Rust 后端日志。

最适合看：

- 实例创建与资源加载。
- 控制器连接。
- 任务开始/停止。
- agent 生命周期。
- `maa_ffi` 回调。
- 用户是否手动停止任务。

### `mxu-web-YYYY-MM-DD.log`

MXU 前端日志。

最适合看：

- UI 是否加载了正确的 `interface.json`。
- 用户实际提交了哪些任务和配置。
- `pipeline_override` 是否符合用户选择。
- 配置持久化或界面状态问题。

日志包可能含多天文件，要优先看复现当天。

### `mxu-agent*.log`

MXU 捕获的 agent 子进程 stdout/stderr。

最适合看：

- 用户在运行日志面板看到的内容。
- 子进程 stdout/stderr 报错。
- MaaFramework 或 go-service 的辅助输出。

它有用但不是最权威的根因日志；细节仍优先看 `maafw.log` 和 `go-service.log`。

### `config/*`

配置快照。常见文件：

- `config/mxu-MDA.json`
- `config/maa_option.json`
- `config/maa_pi_config.json`

最适合看：

- 实际启用了哪些任务和选项。
- 控制器配置。
- 是否开启错误截图保存。
- 用户口述配置与实际配置是否一致。

### `on_error/`

MaaFramework 错误现场截图。

最适合看：

- 实际停留界面。
- 模板/OCR 是否识别错画面。
- 是否被弹窗、加载态、遮罩、分辨率、HDR 等干扰。

日志和用户描述冲突时，优先相信现场截图。

## How To Filter Evidence

1. 先从用户描述或 issue 拿锚点：版本、控制器、任务名、入口名、失败画面、复现步骤。
2. 在日志中找高价值信号：
    - `Tasker.Task.Starting` / `Succeeded` / `Failed`
    - `Node.Recognition.Failed`
    - `Node.Action.Failed`
    - `timeout`
    - `Warn` / `Error` / `Fatal`
    - agent 启动失败、断连、被停止
3. 锁定本次复现 task_id 后再看细节。
4. Pipeline 问题重点看 `maafw.log` 和 `mxu-tauri.log` 回调。
5. Go 扩展问题重点看 `go-service.log` 和 `mxu-agent*.log`。
6. UI / 配置 / 编排问题重点看 `mxu-web-*`、`mxu-tauri.log`、`config/*`。
7. 只摘足够支撑结论的关键片段，不要倾倒整份日志。

## Common Patterns

- `next` 列表中的识别连续失败直到超时：

    - 当前画面不在预期分支、模板/OCR 失配、漏了中间节点、弹窗打断、控制器资源不匹配。

- 某个兜底返回/退出节点连续成功但流程没有前进：

    - Pipeline 对当前状态判断错了，或回退动作本身就是错误行为。

- issue 文字说失败，但目标 `task_id` 最终 `Tasker.Task.Succeeded`：

    - 明确写“本日志未复现用户描述的失败”。
    - 如代码仍有脆弱点，单独标为潜在风险，不当作已证实根因。

- 用户日志流程与当前主线代码明显不一致：

    - 先确认用户版本。
    - 必要时按对应 tag/commit 复核旧逻辑。
    - 不要用当前分支直接否定旧版本日志。

- 奖励/确认弹窗节点识别和点击成功，但父流程没有验证弹窗消失：

    - 这是常见脆弱点；若本次没失败，写成潜在风险。

- `go-service.log` 只有 HDR / 分辨率 / 进程告警：

    - 通常是环境风险提示，不自动等同根因。

- `maafw.bak.*.log` 有同配置历史成功样本，本次失败：
    - 可作为行为回归或环境差异的强旁证。

## Localized Copy

输出任务、选项、界面提示时，优先查：

1. `assets/locales/interface/zh_cn.json`
2. `assets/locales/interface/en_us.json`

常见 key：

- `task.<TaskId>.label`
- `task.<TaskId>.description`
- `option.<OptionId>.label`
- `option.<OptionId>.description`
- `task.<TaskId>.option.<OptionId>.label`

如果中文 key 缺失，退回原始 id，并说明未找到对应文案。

## Linking Code Evidence

如果要指向具体代码行：

- 本地工作中可以用相对路径引用文件。
- 面向 issue 报告时，优先给远端 GitHub blob 行号链接。
- MDA 链接格式：
    - `https://github.com/1204244136/MDA/blob/<commit>/<path>#L1-L2`
- `<commit>` 使用本次分析依据的版本：当前 `HEAD`、用户版本 tag，或日志对应 commit。

## Output Format

最终回答推荐结构：

````markdown
## Issue / 日志概要

- issue / 日志包：`...`
- 版本 / 控制器：`...`
- 任务 / 相关选项：优先使用中文 label，必要时补 task id
- 用户现象：...

## 关键证据

<details><summary>点击展开</summary>

- `maafw.log`：...
- `go-service.log`：...
- `mxu-tauri.log`：...
- `mxu-web-*.log`：...
- `mxu-agent*.log` / `on_error`：...
- 代码依据：...

### DMP 崩溃分析

（仅当存在 `.dmp` 时输出；否则删除本节。）

- DMP 文件：`...`
- 异常类型：`...`
- 崩溃模块：`...`
- 符号化状态：...

```text
Frame 0: ...
Frame 1: ...
```

</details>

## 根因判断

- 直接结论：...
- 证据链：...
- 置信度：高 / 中 / 低

## 给用户的建议

- 用户现在可以尝试：...
- 是否建议升级 / 重下完整包 / 同步资源 / 重置配置：...
- 是否有临时绕过方案：...

## 修复方案

1. Pipeline / 配置 / Go 代码修复方向。
2. 需要补充的测试或日志。
3. 如属于不支持场景，说明应如何限制入口或改进提示。

## 给修复 AI 的建议（可复制）

```text
现象：
...

关键证据：
...

可能相关线索（待验证）：
...
```
````

## Reminders

- 发现 `.dmp` 必须执行 `dmp-analysis`。
- 不要只看一个日志文件下结论。
- 不要把维护者评论当唯一证据。
- 不要把环境告警自动等同根因。
- 日志与 issue 文字不一致时，明确说明“证据未复现”还是“证据已复现但用户表述不精确”。
- 如果证据表明问题已在新版本修复，明确建议升级。
- 如果怀疑安装包、资源或配置损坏，明确建议重新下载、同步资源或重建配置。
