AACWorkflow Docs

GitHub PR 创建流程

智能体如何在 GitHub 上创建、更新和链接 pull request — AACWorkflow 自动化 PR 工作流。

智能体可以在执行任务时在 GitHub 上创建和更新 pull request。GitHub PR 创建流程处理:

  • 使用标题、描述和分支创建新 PR
  • 将 PR 链接到 AACWorkflow issue(通过 issue ID 自动检测)
  • 更新 PR 描述和状态
  • 处理 merge 冲突和 CI 检查

工作原理

创建 PR

当智能体完成功能工作时,它可以:

  1. 将包含功能代码的分支推送到 GitHub
  2. 使用描述性标题和正文打开 PR
  3. 标题或正文应包含 AACWorkflow issue ID(如 AAC-42
  4. AACWorkflow 检测 ID 并自动链接 PR

示例 PR 标题:

AAC-42: Add OAuth 2.1 authorization to MCP endpoint

示例 PR 正文:

## Description
Implements OAuth 2.1 authorization server for MCP clients per spec.

## Changes
- Add /oauth/authorize, /oauth/token endpoints
- Implement PKCE + refresh-token rotation
- Add RFC 8414 metadata discovery

## Issue
Closes AAC-42

## Testing
- [x] Unit tests for OAuth flows
- [x] Integration test for PKCE verification

自动链接

创建 PR 时:

  1. AACWorkflow 扫描标题和正文查找 issue 标识符(不区分大小写:AAC-42aac-42 等)
  2. 如果找到且 issue 存在于工作区,PR 被自动链接
  3. Issue 页面在 Pull requests 部分显示 PR

PR 必须在标题正文中引用 issue ID。分支名是可选的(但最佳实践)。

更新 PR 描述

PR 创建后,智能体可以更新描述以:

  • 添加测试结果或截图
  • 链接依赖的 PR
  • 更新状态(「准备审查」、「WIP」等)

更新通过 webhook 同步回 AACWorkflow。

PR 生命周期

阶段事件AACWorkflow 行为
已创建PR 打开若找到 ID → 自动链接; UI 在 issue sidebar 显示 PR
已更新标题/正文改变若找到新 ID → 重新链接; 若 ID 移除 → 取消链接
DraftPR 标记为 draftUI 在 sidebar 显示 Draft 徽章
准备Draft → 准备转换UI 更新徽章
有评论审查评论发表评论同步(若启用,见 PR 评论同步)
已批准PR 被审查者批准记录在审计日志
已合并PR 合并到 mainIssue 自动移到 已完成 状态
已关闭PR 关闭但未合并Issue 保留当前状态; PR 链接保留

合并时自动移动

当 PR 合并时,每个关联的 issue(若不已是已完成或已取消)自动移到工作区的已完成状态。

示例:

  • PR #123 (Closes AAC-42, AAC-43) 被合并
  • Issue AAC-42 → 移到已完成
  • Issue AAC-43 → 移到已完成
  • Issue AAC-99 → 保留当前状态(未链接)

这通过 GitHub webhook 自动发生。

分支策略

推荐的分支命名

在分支名中使用 issue ID 以清晰:

feature/aac-42-oauth-mcp
fix/aac-99-login-timeout
refactor/aac-55-query-optimization

AACWorkflow 不要求此,但它:

  • 使 GitHub 历史更容易导航
  • 帮助开发者记住他们正在处理的 issue
  • 明显显示哪个分支关闭哪个 issue

分支保护

你 GitHub 仓库的分支保护规则适用(如「merge 前需要 PR 审查」)。AACWorkflow 尊重这些。

如果智能体代码不符合要求:

  • PR 不会合并
  • Issue 保留当前状态
  • 智能体可重试或请求人工帮助

PR 状态指示符

在 issue 页面,Pull requests 部分显示:

状态徽章含义下一步
🟢 开放PR 开放等待审查审查代码
📋 DraftPR 处于 draft 模式等待或请求准备
✅ 已合并PR 被合并Issue 应移到已完成
❌ 已关闭PR 关闭但未合并调查为什么

点击 PR 行跳转到 GitHub。

冲突解决

Merge 冲突

如果智能体分支与 main 冲突:

  1. 智能体在 push 时检测冲突
  2. 智能体可以:
    • Rebase 分支并重试
    • 请求人工帮助(在 issue 上发表评论)
    • 关闭 PR 并重新开始

选择取决于智能体指令和自主权级别。

CI 检查失败

若 GitHub CI 检查失败(测试、lint、安全扫描):

  1. PR 显示 ❌ 检查状态
  2. 智能体可以:
    • 修复问题并推送新提交
    • 请求人工审查失败的检查
    • 关闭 PR 若问题阻挡

Issue 页面显示 CI 检查状态。管理员可配置策略在检查通过前阻止合并。

API

获取 issue 的关联 PR

GET /api/issues/{issue_id}

响应包括:

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "title": "Add OAuth to MCP",
  "status": "in_progress",
  "pull_requests": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440001",
      "pr_number": 123,
      "repo": "org/repo",
      "title": "AAC-42: Add OAuth 2.1 authorization",
      "url": "https://github.com/org/repo/pull/123",
      "state": "merged",
      "merged_at": "2025-06-22T16:00:00Z"
    }
  ]
}

列出工作区的 PR

GET /api/workspaces/{ws}/github/pull-requests

返回此工作区中智能体创建的所有 PR,分页。

安全

智能体绝不可向 PR 提交密钥(令牌、API 密钥、凭证)。使用环境变量或密钥管理。

  • 分支权限: 智能体推送到功能分支; 管理员控制谁可合并到 main
  • 提交归属: 智能体提交归属于 GitHub App 的 bot 用户(在设置 → GitHub 中配置)
  • PR 描述编辑: PR 正文中的密钥在存储于 AACWorkflow 前编辑
  • 审计轨迹: 每个 PR 动作(创建、更新、合并)被记录

故障排除

「PR 已创建但未链接到 issue」

  1. 检查 PR 标题/正文查找 issue ID(如 AAC-42
  2. 验证 issue 存在于你的工作区
  3. 检查工作区前缀匹配(如 PR 说 AAC-42 但工作区前缀是 FOO
  4. 通过 issue 页面 → Pull requests+ 链接 PR 手动链接

「智能体无法推送到 GitHub」

  1. 验证 GitHub App 对仓库有写权限
  2. 检查智能体 GitHub 凭证仍有效
  3. 转到设置 → GitHub → 检查安装状态
  4. 需要时重新连接 app

「PR 已合并但 issue 未移到已完成」

  1. 验证 PR 已链接到 issue(应在 PR 行显示)
  2. 检查 issue 状态允许转换到已完成
  3. 通过 UI 手动将 issue 移到已完成
  4. 检查审计日志查看错误

「智能体不断获得 merge 冲突」

  1. 智能体可能在陈旧分支上工作; 鼓励频繁 pull
  2. 检查多个智能体是否修改相同文件
  3. 考虑为每个文件/功能分配单个智能体的工作
  4. 使用审批政策确保代码审查在合并前

相关功能