Skip to content

feat(mcp-server): 新增 zcode_pr_review — PR 审查模式 (git diff + mimosa 聚焦深扫) - #11

Merged
tizerluo merged 3 commits into
mainfrom
feat/pr-review-mode
Aug 8, 2026
Merged

feat(mcp-server): 新增 zcode_pr_review — PR 审查模式 (git diff + mimosa 聚焦深扫)#11
tizerluo merged 3 commits into
mainfrom
feat/pr-review-mode

Conversation

@tizerluo

@tizerluo tizerluo commented Aug 8, 2026

Copy link
Copy Markdown
Owner

动机

zcode_security_review 是全仓审查。本 PR 新增 zcode_pr_review——PR 审查模式:改动多大查多重,合并前自动验收。

流程

git diff base...HEAD (三点 merge-base 语义; base 不传自动探测
  origin/HEAD → main/master → origin/main|master)
  → mimosa 全仓扫描 + focus_files=改动文件 (deep 档业务逻辑投研聚焦, 默认 deep)
  → diff+findings 作附件喂 zcode
  → PR 复核报告: P0 阻断/P1 应修/P2 建议 + findings 确认/误报/存疑 + 能否合并结论
  • 相对 base 无改动 → 直接返回提示,不消耗 LLM 调用
  • diff 超 ZCODE_BRIDGE_PR_DIFF_MAX(默认 500KB)→ 字节级截断(退到完整行 + 容错解码),改动文件清单完整保留
  • 沿用只读管线:yolo + 写工具物理禁用 + 文件锁 + 限流重试;git/mimosa 均为只读调用

狗食验证(本 PR 由 zcode_pr_review 自审两轮)

  • R1(GC-8G 实测):0 P0 / 2 P1 / 3 P2,「可以合并」→ P1 全修(commit f867053):base/head git 选项注入防护--output= 类注入可让只读 diff 写出文件)+ UTF-8 截断按字符切的问题
  • R2:0 P0 / 2 P1 / 4 P2 → 全修(commit 435c3bf):--end-of-options 全面加固、截断退完整行、focus_files/focus 长度上限、补 3 个测试缺口用例;P2-2(ref 名含 ...)经查 git refname 规则本就不允许 ..,记录为无需修
  • 测试:48 用例全绿(本 PR 新增 13 个:git 三路 mock/无改动友好退出/base 探测/注入拒绝/截断/失败路径/临时文件清理);ruff 通过

参数

path(仓库目录)/ base(自动探测)/ head(默认 HEAD)/ depth(默认 deep)/ focus / cwd

6tizer added 3 commits August 8, 2026 10:31
- git diff base...HEAD (三点 merge-base 语义) 算改动清单与完整 diff;
  base 不传自动探测 (origin/HEAD → main/master → origin/main|master)
- mimosa 全仓扫描 focus_files=改动文件 (deep 档业务逻辑投研聚焦, 默认 deep)
- diff+findings 作附件喂 zcode 出 PR 复核报告 (P0/P1/P2 + findings 核实
  + 能否合并结论); diff 超 ZCODE_BRIDGE_PR_DIFF_MAX (默认 500KB) 截断保清单
- 相对 base 无改动直接返回提示, 不消耗 LLM 调用
- 新增 6 个测试用例 (43 全绿); README/SKILL/agent-help 同步
- P1-1: base/head 统一 _validate_rev 校验 (拒绝 - 开头防 --output= 等选项注入;
  head 此前完全无校验); diff 命令补 -- 分隔符
- P1-2: diff 截断改按字节切 + errors=ignore 容错解码, 防多字节字符切半
- 新增 PR6/PR7 注入拒绝用例 (45 全绿)
- P1-1 补强: rev-parse/diff 全面加 --end-of-options (git≥2.24),
  关掉 rev 被当选项解析的残余路径
- P1-2: diff 截断先退到最后完整行再容错解码, 防半行误导 diff 结构
- P2-1: focus_files (改动清单) 与 security_review 对齐 200 上限
- P2-3: focus 参数三个 review tool 统一 _clamp_focus 钳 2000 字符
- P2-4: 补 base 探测失败/mimosa 失败/附件清理三个用例 (48 全绿)
- P2-2 (ref 名含 ...): git refname 规则本就不允许 '..', 记录为无需修
@tizerluo
tizerluo merged commit 3c80158 into main Aug 8, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants