# Maycur AI Code Analyzer

> 代码分析（AI 平台）。消费 bug-clue 的 clue.md + log-analyzer 的 logs/*.json，opser 确认分支 → gitlaber fetch 代码 → codegraph 索引 → 综合分析产出 code/code-analysis.md（涉及项目/定位文件/数据流/疑似根因点）。由 bug-killer 编排器调度，也支持独立模式。触发词：代码分析、查代码、定位代码、code-analyzer。

- Skill: `jeandoom/maycur-ai-code-analyzer` (Agent Skill)
- Install (CLI): `npx skillmds@latest add jeandoom/maycur-ai-code-analyzer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jeandoom/maycur-ai-code-analyzer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Jeandoom (https://skillmd.com/u/jeandoom)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/jeandoom/maycur-ai-code-analyzer

---


# maycur-ai-code-analyzer — 代码分析

链路第三环：消费 `clue/clue.md` + `logs/*.json`，定位涉及项目与代码位置，梳理数据流，给出疑似根因点，产出 `code/code-analysis.md` 供 root-cause-analyzer 消费。

## Claude vs 脚本分工

| 角色 | 职责 |
|------|------|
| **Claude** | 读 clue/logs 提项目 → opser 拿真实分支 → gitlaber fetch 到 repos/ → codegraph init → 用 codegraph/Read 分析 → 写 code-analysis.md |
| **无 Python 脚本** | 代码语义分析是 Claude 强项，不写脚本 |

## 代码准备流程（opser + gitlaber fetch + codegraph init）

### ① 提取涉及项目

从上游物料提取项目线索：
- `clue/clue.md` — 项目名字段（若 bug-clue 已识别）
- `logs/sls-logs.json` — 日志中的 service.name / logger 名
- `logs/langfuse-trace.json` — trace metadata 中的 service.name
- 独立模式：用户直接给

### ② 对每个项目：分支确认 + 拉取 + 索引

```bash
# 1. opser 确认真实分支（基于环境+项目，Ops 部署平台返回）
python <opser-dir>/scripts/opser.py git-info --project <P> --env <E>
# → Markdown 表格：git 仓库地址 + 分支 + commit

# 2. gitlaber 拉取代码到 repos/{project}/（不用 file/commits 在线查）
python <gitlaber-dir>/jihulab.py fetch <group/project> --branch <opser返回的分支>
#   不存在 → clone；已存在 → pull

# 3. codegraph 可用且 .codegraph/ 不存在 → 建索引
cd <bug_dir>/repos/{project} && codegraph init -i
```

**关键约束**：
- **opser 是分支真相源**，gitlaber 的 `env set` 手动映射不再使用
- opser 失败 → 报错让用户确认，不 fallback 到猜分支
- **禁止 `gitlaber file` / `gitlaber commits` 在线查询**（性能差、token 贵），必须先 fetch 到本地

## 分析优先级

| 优先级 | 条件 | 工具 |
|--------|------|------|
| 1 | `repos/{project}/.codegraph/` 存在 | **codegraph MCP**（AST 索引） |
| 2 | repos 有代码但无 .codegraph | **Read / Grep**（fallback） |
| 3 | repos 空 + 拉取失败 | 报错，不臆测 |

codegraph 常用 query：
- `codegraph_search` — 找符号定义
- `codegraph_callers` / `codegraph_callees` — 调用关系
- `codegraph_trace` — 跨函数数据流
- `codegraph_context` — 任务上下文

## 输入源

| 来源 | 提取什么 |
|------|----------|
| `clue/clue.md` | 异常关键字（NPE/timeout）、entCode、env、项目名 |
| `logs/sls-logs.json` | 堆栈中的 file:line、logger 名、service.name |
| `logs/langfuse-trace.json` | trace observation name → 代码函数映射 |
| `logs/discovered_trace_ids` | 跨系统关联键 |
| 用户输入（独立模式） | 项目名 + 环境 + 异常描述 |

**核心动作**：异常关键字 + 堆栈/trace → 反推源码位置 → 用 codegraph/grep 验证。

## 执行流程

1. 接收 `{bug_dir}` 或独立模式用户输入
2. **模式探测**：
   - `{bug_dir}/clue/clue.md` 和 `{bug_dir}/logs/` 都存在 → 编排模式
   - 都不存在 → 独立模式（AskUserQuestion 收集项目名/环境/异常描述）
   - 部分存在 → 用已有物料 + AskUserQuestion 补齐缺失项
3. 读 clue.md + logs/*.json（或用户输入）提取项目列表 + 异常线索
4. 对每个项目：
   - opser `git-info` 拿真实分支
   - gitlaber `fetch/pull` 到 `repos/{project}/`
   - codegraph `init -i`（若可用且未索引）
5. 用 codegraph（首选）/ Read+Grep（fallback）分析涉及代码
6. 综合异常线索 + 代码结构 → 梳理数据流 → 定位疑似根因点
7. 写 `code/code-analysis.md`
8. 流程结束

## 物料产出 `code/code-analysis.md`

```markdown
# 代码分析：bug-{id}

## 涉及项目
- project: <name>
- repo: <group/project>
- branch: <opser 返回的真实分支>
- commit: <拉取时的 commit hash>

## 定位文件
- `src/foo/bar.py:42` — ServiceA.handle() 入口
- `src/foo/baz.py:88` — DB 写入点

## 数据流
入口 → ServiceA.handle → RepoA.save → DB
                  ↓
              [异常点] NullPointerException @ baz.py:88

## 疑似根因点
1. **[高置信]** `baz.py:88` — save() 未判空导致 NPE（依据：日志堆栈 + 代码结构）
2. **[中置信]** `bar.py:42` — 入口参数未校验
3. **[低置信]** ...

## 查询记录
- codegraph_search "save" → RepoA.save
- codegraph_callers RepoA.save → ServiceA.handle
- grep "NullPointerException" → 无显式抛出点
- opser: project=AIR env=prod branch=master
- gitlaber: fetched group/proj @ abc1234
```

**字段说明**：
- **涉及项目**：opser/gitlaber 的拉取记录（分支可追溯，下游可验证版本）
- **定位文件**：每行一个，附简短角色说明
- **数据流**：含异常点的执行链路（文字+箭头，不画图）
- **疑似根因点**：分级（高/中/低置信），每个含代码依据
- **查询记录**：用了什么工具、查了什么（过程可追溯）

## 边界

- 不做线索收集（bug-clue-analyzer 职责）
- 不做日志/trace 查询（log-analyzer 职责）
- 不做根因综合与方案给出（root-cause-analyzer 职责）
- 不做在线代码查询（强制本地化）
- 不做 git 提交/MR（code-manager/code-dever 职责，P1）
- 不写 Python 脚本（纯 Claude 分析）

## 依赖

- **opser**（`opser.py git-info`）：项目环境→真实 git 分支
- **gitlaber**（`jihulab.py fetch/pull`）：代码拉取（不用 file/commits 在线查）
- **codegraph**（MCP 工具）：本地代码 AST 索引（可选但推荐）
- **bug-clue-analyzer**（上游）：`clue/clue.md`
- **log-analyzer**（上游）：`logs/*.json`

