Skip to content

feat(multi-review): show reviewer details in collapsible sections#108

Merged
Svtter merged 1 commit into
mainfrom
worktree-multi-review-details
May 25, 2026
Merged

feat(multi-review): show reviewer details in collapsible sections#108
Svtter merged 1 commit into
mainfrom
worktree-multi-review-details

Conversation

@Svtter
Copy link
Copy Markdown
Collaborator

@Svtter Svtter commented May 25, 2026

Summary

  • Append each reviewer's raw output in <details> sections after the coordinator synthesis
  • Users see the synthesized conclusion by default, can expand to view individual reviews

Test plan

  • multi-review workflow runs and posts a comment with collapsible reviewer details

🤖 Generated with Claude Code

…omment

Append each reviewer's raw output in <details> sections after the
coordinator synthesis, so users can expand to see individual reviews.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

分析过程

PR 要求(无关联 Issue,从 PR title/body 提取):

  • 将每个 reviewer 的原始输出放在 <details> 折叠块中,追加在 coordinator 综合评论之后
  • 用户默认看到综合结论,可展开查看各 reviewer 详情

实现情况:

  1. orchestrator.ts:152-158 — 新增 buildReviewerDetails() 函数,生成带外层的嵌套 <details> 结构
  2. index.ts:72 — coordinator 成功时,comment 拼接为 synthesis + "\n\n---\n\n" + buildReviewerDetails(reviews)
  3. index.ts:5 — 正确导入 buildReviewerDetails
  4. dist/index.cjs — 同步更新

该实现的每个 reviewer 信息、失败处理、折叠结构均与要求一致。

无遗漏

确认所有 spec 项均已覆盖:折叠结构正确实现,成功路径完整接入,reviewer 失败状态也得到显示。

New%20session%20-%202026-05-25T02%3A13%3A16.285Z
opencode session  |  github run

@github-actions
Copy link
Copy Markdown

最终决策:可合并

所有 reviewer 均无阻塞项。安全 reviewer 虽标记"存在风险"但列在建议项中且未设阻塞项,故不影响合并决策。

阻塞项:无

建议项:

  1. XSS - HTML 注入(security)

    buildReviewerDetailsr.reviewerr.contentr.error 直接拼入 HTML <details>,未做转义。恶意 PR diff 可诱导 AI 输出含 <script> 的审查内容,造成 Stored XSS。建议对动态值做 HTML 实体编码。

  2. Error 字段健壮性(quality + security,已确认

    quality 指出 error 为可选字段,直接 r.error 可能输出 undefined;security 补充 error 原文可能泄露敏感信息(API key 等)。建议先用 r.error ?? "" 兜底,并对 error 消息做脱敏处理。

  3. 协调器内容重复(quality)

    协调器合成摘要中已包含各 reviewer 结论,底部又追加原始 Review block 详情,评论存在内容重复。可考虑在协调器提示词中声明底部会附原始详情,让摘要部分专注去重。


📋 各 Reviewer 详细审查结果
quality

可合并

该 PR 在合成结果下方新增可折叠的 <details> 区块展示每位 reviewer 的完整审查结果,代码结构与现有 buildFallbackComment 保持一致,导出/导入链路完整。无阻塞问题。

阻塞项:无

建议项:

  • error 字段为可选(error?: string),当 success === false 时直接拼接 r.error,若存在 error 缺失的路径则输出 "(审查失败: undefined)"。可考虑用 r.error ?? ""r.error || "未知错误" 兜底,增强健壮性。
  • 协调器合成内容已包含各 reviewer 的审查结果,底部又追加原始详情,最终评论存在内容重复。可考虑在协调器提示词中说明底部会附原始详情,让协调器专注于摘要去重。此为设计选择,非代码缺陷。
security

存在风险

本次 PR 新增 buildReviewerDetails 函数,将各 reviewer 的审查结果(r.reviewerr.contentr.error)直接嵌入 HTML <details> 标签中,然后追加到 PR 评论末尾。核心问题是缺少对动态内容的 HTML 转义,构成 XSS 风险。

阻塞项:无

建议项:

  1. XSS - HTML 注入 (multi-review/src/orchestrator.ts:150-156)
    r.reviewerr.contentr.error 直接拼接进 HTML 字符串,未做任何转义。这些字段的值来自 AI 模型的输出,而模型审查的是 PR diff——恶意提交者可能通过在 PR diff 中注入 prompt,诱导模型生成含 <script><img onerror> 等 HTML/JS 的审查内容,最终存入 GitHub PR 评论(Stored XSS)。建议对动态值做 HTML 实体编码(如将 < > " ' & 转义),或使用 HTML 模版库自动转义。

  2. Sensitive data exposure (次要)
    审查失败时将 r.error 原文暴露到 PR 评论中,若错误信息包含 API key、token 等敏感信息(如模型调用栈信息),可能泄露。建议在 buildReviewerDetails 或上游对 error 消息做脱敏处理,或捕获异常时只输出概括性错误。

performance

性能良好

此 PR 新增 buildReviewerDetails 函数将各 reviewer 结果拼装为 HTML <details> 块并追加到 coordinator 输出后。该函数复杂度 O(n),仅做字符串拼接,无循环嵌套、递归或重复计算。reviews 数据已在内存中,未引入额外 I/O、数据库查询或网络请求。无并发/线程安全问题。内存分配仅产生少量中间字符串对象,对于 reviewer 数量通常很少(<10)的场景无实质影响。

阻塞项:无

建议项:无

architecture

架构合理

该 PR 在 orchestrator.ts 中新增 buildReviewerDetails 纯格式化函数,与已有 buildFallbackComment 同模块、同命名风格,调用方 index.ts 仅增加导入和拼接逻辑,变更范围集中(3 文件),没有引入新的模块间依赖或跨层耦合。

阻塞项:无

建议项:无

@Svtter Svtter merged commit bdae0c3 into main May 25, 2026
3 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.

1 participant