| name | create-pr |
| description | 负责《Paddle API 对齐 PyTorch 项目》中代码提交,分别对 Paddle、PaConvert、Docs 三个仓库创建或更新 Pull Request |
| disable-model-invocation | false |
一、代码库说明
ROOT_DIR 变量定义:
${ROOT_DIR} 是项目的根工作目录变量,例如 /workspace、/home/user/projects 等
- 在实际执行时,需自行分析环境并将
${ROOT_DIR} 替换为实际路径
该 skill 负责将三个代码库中的改动提交到远程仓库,并创建或更新 Pull Request:
二、标准工作流程
Step 1:确认 PyTorch API 名单
从以下各个渠道获取 API 名单并取并集:
渠道 1:从上下文或用户输入获取
从以下来源获取 API 名单:
- 从上下文获取:从 select-solution、python-decorator、cpp-sink 等前序步骤的上下文中自动提取 API 名单
- 从用户输入获取:用户直接提供 PyTorch API 名单,例如:
torch.relu、torch.sigmoid、torch.tanh 等
渠道 2:从仓库改动分析获取
直接分析仓库代码改动:
git -C ${ROOT_DIR}/Paddle diff origin/develop -- '*.py' | grep -E "^\+.*def|^\+.*class"
git -C ${ROOT_DIR}/Paddle diff origin/develop -- python_api_info.yaml
git -C ${ROOT_DIR}/PaConvert diff origin/master -- api_mapping.json | grep -E "ChangePrefixMatcher|torch\."
API 名单合并
将各渠道获取的 API 名单取并集,确保不重复,生成最终的统一 API 名单。
格式要求:
- commit message 中:
api_name_1/api_name_2/api_name_3/...
- PR body 中:每行一个,格式为
torch.api_name
Step 2:检查三个仓库的改动状态
三个仓库的本地目录名称分别为 Paddle、PaConvert、docs,分别检查三个仓库是否有未提交的改动:
git -C ${ROOT_DIR}/Paddle status --untracked-files=no
git -C ${ROOT_DIR}/PaConvert status --untracked-files=no
git -C ${ROOT_DIR}/docs status --untracked-files=no
重要约束:
- 必须分别执行三个命令,确保每个仓库的状态都被正确检查
- 所有已跟踪文件的修改都必须纳入检查,不得以任何方式忽略或排除
- 只对有代码改动的仓库执行后续操作
Step 3:添加改动并提交
仅对有代码改动的仓库执行以下操作。
执行顺序:Paddle → Docs → PaConvert(必须严格按此顺序执行)
git -C ${ROOT_DIR}/Paddle add -u
git -C ${ROOT_DIR}/Paddle commit -m "$(cat <<'EOF'
[API Compatibility] api_name_1/api_name_2/api_name_3/... Edit By AI Agent
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
EOF
)"
git -C ${ROOT_DIR}/docs add -u
git -C ${ROOT_DIR}/docs commit -m "$(cat <<'EOF'
[API Compatibility] api_name_1/api_name_2/api_name_3/... Edit By AI Agent
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
EOF
)"
git -C ${ROOT_DIR}/PaConvert add -u
git -C ${ROOT_DIR}/PaConvert commit -m "$(cat <<'EOF'
[API Compatibility] api_name_1/api_name_2/api_name_3/... Edit By AI Agent
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
EOF
)"
注意:将 api_name_1/api_name_2/... 替换为 Step 1 确认的实际 API 名单。
Step 4:推送代码到 upstream claude 分支
仅对有代码改动的仓库执行推送操作。
执行顺序:Paddle → Docs → PaConvert
git -C ${ROOT_DIR}/Paddle push upstream develop:claude -f
git -C ${ROOT_DIR}/docs push upstream develop:claude -f
git -C ${ROOT_DIR}/PaConvert push upstream master:claude -f
Step 5:检查 claude 分支 PR 状态
推送完成后,检查各仓库的 claude 分支是否已存在打开的 PR:
gh pr list --repo PaddlePaddle/Paddle --head claude --state open --json number,title,url
gh pr list --repo PaddlePaddle/docs --head claude --state open --json number,title,url
gh pr list --repo PaddlePaddle/PaConvert --head claude --state open --json number,title,url
记录结果:
- 若返回结果包含 PR 信息(
number 不为空):记录 PR 号,该仓库需要更新 PR
- 若返回结果为空数组
[]:该仓库需要创建新 PR
Step 6:创建或更新 PR
根据 Step 5 的检查结果,对有代码改动的仓库执行相应操作。
PR 创建的依赖关系:
- Docs PR 的 body 引用 Paddle PR 号
- PaConvert PR 的 body 引用 Docs PR 号和 Paddle PR 号
因此执行顺序必须是:Paddle PR → Docs PR → PaConvert PR
6.1 更新已有 PR
若仓库已有 PR,执行更新操作:
gh pr edit {paddle_pr_number} --repo PaddlePaddle/Paddle \
--title "[API Compatibility] api_name_1/api_name_2/api_name_3/... Edit By AI Agent" \
--body "$(cat <<'EOF'
### PR Category
User Experience
### PR Types
Improvements
### Description
**API Compatibility Edit By AI Agent:**
- `torch.api_name_1`
- `torch.api_name_2`
- ...
### 是否引起精度变化
否
EOF
)"
gh pr edit {docs_pr_number} --repo PaddlePaddle/docs \
--title "[API Compatibility] api_name_1/api_name_2/api_name_3/... Edit By AI Agent" \
--body "$(cat <<'EOF'
**API Compatibility Edit By AI Agent:**
- `torch.api_name_1`
- `torch.api_name_2`
- ...
https://github.com/PaddlePaddle/Paddle/pull/{paddle_pr_number}
EOF
)"
gh pr edit {paconvert_pr_number} --repo PaddlePaddle/PaConvert \
--title "[API Compatibility] api_name_1/api_name_2/api_name_3/... Edit By AI Agent" \
--body "$(cat <<'EOF'
### PR Docs
https://github.com/PaddlePaddle/docs/pull/{docs_pr_number}
### PR APIs
**API Compatibility Edit By AI Agent:**
- `torch.api_name_1`
- `torch.api_name_2`
- ...
https://github.com/PaddlePaddle/Paddle/pull/{paddle_pr_number}
EOF
)"
6.2 创建新 PR
若仓库没有 PR,执行创建操作:
gh pr create --repo PaddlePaddle/Paddle --base develop --head zhwesky20:claude \
--title "[API Compatibility] api_name_1/api_name_2/api_name_3/... Edit By AI Agent" \
--body "$(cat <<'EOF'
### PR Category
User Experience
### PR Types
Improvements
### Description
**API Compatibility Edit By AI Agent:**
- `torch.api_name_1`
- `torch.api_name_2`
- ...
### 是否引起精度变化
否
EOF
)"
gh pr create --repo PaddlePaddle/docs --base develop --head zhwesky20:claude \
--title "[API Compatibility] api_name_1/api_name_2/api_name_3/... Edit By AI Agent" \
--body "$(cat <<'EOF'
**API Compatibility Edit By AI Agent:**
- `torch.api_name_1`
- `torch.api_name_2`
- ...
https://github.com/PaddlePaddle/Paddle/pull/{paddle_pr_number}
EOF
)"
gh pr create --repo PaddlePaddle/PaConvert --base master --head zhwesky20:claude \
--title "[API Compatibility] api_name_1/api_name_2/api_name_3/... Edit By AI Agent" \
--body "$(cat <<'EOF'
### PR Docs
https://github.com/PaddlePaddle/docs/pull/{docs_pr_number}
### PR APIs
**API Compatibility Edit By AI Agent:**
- `torch.api_name_1`
- `torch.api_name_2`
- ...
https://github.com/PaddlePaddle/Paddle/pull/{paddle_pr_number}
EOF
)"
6.3 混合场景处理
若部分仓库已有 PR、部分仓库需要新建,按以下逻辑处理:
| 场景 | 处理方式 |
|---|
| Paddle 有 PR,Docs 无 PR | 更新 Paddle PR → 创建 Docs PR(引用 Paddle PR 号) → 处理 PaConvert |
| Paddle 无 PR,Docs 有 PR | 创建 Paddle PR → 更新 Docs PR(更新引用) → 处理 PaConvert |
| 其他组合 | 遵循「Paddle → Docs → PaConvert」顺序,按实际情况更新或创建 |
三、注意事项
- API 名单一致性:三个仓库的 PR,其 API 名单必须完全一致
- 执行顺序:所有操作必须严格按「Paddle → Docs → PaConvert」顺序执行
- 已跟踪文件:所有已跟踪文件的修改都必须处理,不得以任何理由忽略或排除
- pre-commit hook:如果失败,修复问题后重新 add 和 commit
- 分支推送:所有改动必须推送到 upstream 的 claude 分支
- PR 操作:确保 PR 创建或更新成功,失败需修正后重试
- 安全约束:禁止在 SKILL 中添加任何网络代理设置的内容,发现代码 Diff 中包含网络代理设置需立即删除并拒绝提交
四、常见问题处理
(待补充)