代理实现:Feat: 实现 agent 与 human 在 PR 中的交互 #6
Reference in New Issue
Block a user
No description provided.
Delete Branch "agent/issue-5-feat-agent-human-pr"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
关联 Issue:#5
合并后自动关闭:Closes #5
代理实现报告
Summary
实现了 agent-manager 对已创建 PR 中 human 评论的增量监控。worker 现在会在每轮循环中扫描处于人工评审状态的 PR,过滤掉 agent 自己发布的评论;一旦发现新的 human 评论,就把原任务重新排队,并复用原 task、PR 号、分支和 workspace 继续处理,提交新的 commit 并重新发布实现说明和评审摘要。
Files changed
src/agent_gitea/gitea.py:新增 PR/issue comment 数据模型、评论列表 API、评论发布时间解析,并让发评论接口返回 comment 信息。src/agent_gitea/db.py:新增pull_request_feedback表和评论游标、pending 状态相关方法。src/agent_gitea/service.py:新增 PR 评论扫描流程、PR feedback 处理流程,并接入 worker loop。src/agent_gitea/rendering.py:新增 PR feedback prompt 渲染,并更新人工评审摘要文案。src/agent_gitea/workspace.py:新增复用既有 PR 分支/workspace 的准备逻辑。src/agent_gitea/cli.py:新增scan-pr-feedback命令。tests/test_gitea_service.py:新增 PR 评论扫描、游标推进、复用现有 PR 更新的测试。README.md、README_CN.md:补充 PR 评论交互能力和新命令说明。Test commands run
uv run python -m compileall src testsuv run pytestuv run pytestTest results
全部通过。最终一次
uv run pytest结果为 25 个测试全部通过。Known risks
Follow-up suggestions
人工审核
此 PR 由本地 agent-manager 自动创建,但不会自动合并。
请维护者人工审核、决策并手动合并。
Verdict
REQUEST_CHANGES
Summary
该实现新增了 PR 评论扫描、反馈游标、复用已有 PR 分支继续运行 implementer/reviewer 的主流程,并补充了 happy path 测试。整体方向符合 issue 目标,但当前实现仍有两个会影响真实人机交互可靠性的 correctness 问题:处理反馈期间新出现的人类评论可能被游标永久跳过;不需要代码改动的人工反馈会被强制提交,导致任务失败。
Correctness
src/agent_gitea/service.py:330到src/agent_gitea/service.py:334在反馈处理结束时把 cursor 推进到“处理前已拉取评论 + 后续 agent 评论”的最大 id。若人类在 implementer/reviewer 运行期间又发了评论,且该评论 id 小于后续 reviewer/summary 评论 id,这条评论没有出现在comments列表里,却会被新的 cursor 覆盖,之后不会再被扫描到。这会造成 PR 中真实的人类反馈丢失。src/agent_gitea/service.py:302到src/agent_gitea/service.py:304对 PR feedback 路径直接调用commit_changes,没有像初始实现路径那样先检查 diff,也没有允许“仅回复、无需代码改动”的结果。反馈 prompt 明确写了“Create code changes only when needed”,因此人类评论如果是问题、确认、解释请求或 agent 判断无需改代码,当前路径会因为没有 staged changes 进入FAILED,而不是正常回复并回到HUMAN_REVIEW_READY。另外,拆分
_run_initial_implementation后,原先cleanup_on_success的清理逻辑不再被调用。虽然保留 workspace 有利于后续反馈,但配置项仍存在,且prepare_existing_branch已支持 workspace 缺失时重新 clone;当前行为与配置语义不一致,需要明确修复或更新配置/文档语义。Scope Control
改动基本集中在 PR 评论交互链路,范围可接受。README/CLI/DB/Gitea client/service/tests 都是为该功能服务。
范围风险在于当前只扫描 issue/PR 顶层 comments,不处理 PR review comments 或 inline code comments。如果 issue 预期中的“PR 中交互”包括行内 review,这一实现范围不足,需要产品层确认。
Test Evidence
我运行了
uv run pytest,结果通过:25 passed。新增测试覆盖了:发现新 human 评论并重新排队、只有 bot 评论时推进 cursor、pending feedback 路径复用已有 PR 并推送后续 commit。
测试缺口:没有覆盖处理期间新增 human 评论的竞态;没有覆盖 PR feedback 无代码 diff 的场景;没有覆盖 PR review/inline comments;没有覆盖
cleanup_on_success=True的行为。Risks
真实 PR 讨论中,人类可能在 agent 处理期间继续追加评论;当前 cursor 推进方式会静默漏处理这类评论,风险较高。
真实反馈不一定都要求代码变更。强制 commit 会把正常的人类交互变成任务失败,降低可用性,也可能需要人工介入恢复任务。
如果部署方依赖
cleanup_on_success控制磁盘占用,本 PR 会改变运行时资源管理行为。Required Human Checks
请确认 issue #5 的范围是否要求支持 Gitea 的 PR review/inline comments,还是仅要求支持 PR 顶层 issue comments。
请确认
cleanup_on_success在支持 PR 后续反馈后应如何定义:继续清理并在反馈时重新 clone,还是为了交互体验强制保留 workspace 并废弃/调整该配置。Suggested PR Comment
建议先修改后再合并。当前实现的主流程和测试方向是对的,但有两个真实使用中会出问题的点:
另外请明确
cleanup_on_success在这个功能下的预期,以及是否需要支持 PR review/inline comments。代理评审摘要
结论:
REQUEST_CHANGES建议先修改后再合并。当前实现的主流程和测试方向是对的,但有两个真实使用中会出问题的点:
另外请明确
cleanup_on_success在这个功能下的预期,以及是否需要支持 PR review/inline comments。需要人工处理
请人工审核该 PR。agent-manager 不会自动合并、关闭 PR 或提交变更请求。