Skip to content

feat(github): Review Provider、CI 证据与修复闭环 #118

Description

@Qiyuanqiii

Parent: #107
Blocked by: #116, #117

问题概述 / Summary

Prayu 已有 typed Git push 与 PR 创建/更新能力,但没有面向模型审阅闭环的 GitHub Provider:无法读取 unresolved review threads、inline comments、requested changes、Check Runs/CI 日志,也不能把这些远端证据稳定映射到当前 merge-base、文件版本、LSP 调用链和本地修复。需要基于 GitHub 正式 API 与独立凭证/网络授权建立受控 Review Provider。

优先级 / Priority

P2。API/credential/read-only contract 可提前设计;完整交付由 #116 的语义证据接口和 #117 的高级 Git/恢复接口共同阻塞。

当前基线 / Current baseline

范围 / Scope

  • 定义 versioned github-review-provider.v1 account/repository/PR identity、capability snapshot、credential reference、network scope、pagination、typed error、receipt 和兼容策略。
  • 通过 OS credential store/受控 credential provider 使用 GitHub App、OAuth user token 或受支持的细粒度 token;模型、日志、事件和 HTTP/Desktop projection 不接收原始 Secret。
  • 提供精确资格诊断:host、account/installation、repository、fork、权限 scopes、rate limit、SSO、network policy 和 API 版本。
  • 只读能力覆盖 PR metadata、base/head/merge-base、完整 changed-file diff、reviews、requested changes、unresolved/resolved threads、inline comments、check suites/runs、job/step 状态、有界失败日志和 Artifact metadata。
  • 远端内容均标记为不可信;限制分页、字节、ANSI/C1、Markdown/链接、压缩包和日志展开,并进行 Secret/credential-shaped 数据清洗。
  • 将评论位置绑定 repository/PR/base/head/commit/path/side/line/original position;base/head force-push、文件 hash 或 merge-base 漂移后将映射标记 stale。
  • 消费 feat(code-intel): Go-owned LSP Runtime 与只读语义工具 #116 的 definition/references/call hierarchy/diagnostics 与 feat(git): hunk 级操作、高级恢复与 Worktree #117 的 merge-base diff/hunk/worktree/冲突状态,建立 review evidence graph 和修复影响范围。
  • 受控写回覆盖 reply、resolve/unresolve thread、提交 COMMENT/APPROVE/REQUEST_CHANGES review、请求 reviewer,以及通过既有 Repository service push/更新 PR。
  • 每次写回前展示 host、repo、PR、base/head、commit、目标 thread/comment、正文摘要、权限来源和本地变更/验证摘要;使用 compare-and-swap/idempotency key 防止重复写入。
  • 处理 offline、rate limit/Retry-After、权限不足、SSO、fork PR、private repository、base drift、force-push、已关闭/已合并 PR、重复 API/webhook 事件和应用重启。
  • Desktop/CLI/OpenAPI 提供账户/仓库状态、PR 审阅收件箱、线程、CI 失败证据、stale 映射、待授权写回和持久收据。
  • 增强 review Skill 与 focused-checks:按调用链、生命周期、并发、恢复路径、改动范围和 CI 证据选择检查并分级,不把未运行或外部状态伪装为通过。

非目标 / Non-goals

  • 不实现通用 Issues、Projects、Releases、Actions 管理或 GitHub 网页自动化。
  • 不依赖 DOM 抓取、用户浏览器登录态、cookie 或日常 Chrome/Edge Profile。
  • 不默认自动 reply、resolve、approve、request changes、push、force push 或更新 PR。
  • 不把 GitHub token、credential helper 输出、私有日志或 Artifact 原文注入模型上下文。
  • 不让仓库内容、评论、CI 日志或 GitHub App 自行扩大本地工具与网络权限。
  • 不在本 Issue 开放 Cyber Surface 或任意第三方代码托管 Provider。

涉及目录 / Affected directories

  • internal/githubreview/
  • internal/repository/
  • internal/codeintel/
  • internal/application/
  • internal/toolgateway/
  • internal/credential/
  • internal/policy/
  • internal/approval/
  • internal/store/
  • internal/events/
  • internal/httpapi/
  • cmd/
  • web/src/
  • configs/skills/review/
  • configs/skills/focused-checks/
  • docs/

依赖 / Dependencies

验收条件 / Acceptance criteria

  • 可读取 unresolved review threads、inline comments、reviews/requested changes、Check Runs、失败 job/step 和有界 CI 日志,并绑定精确 repo/PR/base/head/commit。
  • 评论位置与本地文件、merge-base diff、hunk 和 LSP 证据正确关联;force-push、base drift 或文件修改后旧映射标记 stale。
  • reply、resolve/unresolve、review、push 和 PR 更新均显示精确目标、变更/验证摘要并单独授权;重复提交不会产生重复副作用。
  • credential 只由受控 Provider 解析,模型、事件、Artifact、HTTP/Desktop projection 和错误信息中不出现 token/Secret。
  • GitHub App/OAuth/细粒度 token 至少支持一种生产路径,并对缺失 scope、SSO、fork/private repo 和只读权限给出稳定诊断。
  • offline、rate limit、Retry-After、分页漂移、权限撤销、PR 关闭/合并、应用重启和重复 API/webhook 结果可恢复且 fail closed。
  • CI 日志、评论、Markdown、链接和 Artifact metadata 经过有界清洗;恶意远端内容不能触发本地工具或扩大授权。
  • review/focused-checks 消费 LSP/Git/CI evidence graph,区分 verified、partial、stale、unavailable 和 not_run。
  • mock/record-replay、真实测试仓库 smoke、fork/base-drift/force-push fixtures、竞争/故障注入、OpenAPI、Desktop 和双语文档完成。

安全边界 / Security boundaries

GitHub Provider 增加的是经授权的远端证据与精确写回操作,不是通用网络或账户权限。读取结果不可信,写入必须绑定当前 repository、PR、commit、目标对象、credential scope 和 capability generation;凭证与授权判定始终留在 Go 控制平面。

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-runtimeAgent orchestration, memory, and extensionsblockedBlocked by external evidence or dependencyenhancementNew feature or requestgit-workflowGit and pull request workflowsgoPull requests that update go codehelp wantedExtra attention is neededjavascriptPull requests that update javascript codesecuritySecurity boundary or high-risk capability高难度

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions