SuperAPI AI 工具集

rhdh-forge

编程与开发

查看项目

更新于 10-16 02:24

技能介绍

RHDH Forge 是一个为 RHDH 技能体系提供 forge(代码托管平台)读取与写入载荷构造能力的技能。它的定位是“读取 forge 并构造其写入载荷的单一归属地”,避免每个涉及 forge 的技能各自维护一份会逐渐漂移的副本。该技能本身只读取,从不执行写入。

用途 该技能用于集中处理 GitHub 与 GitLab 相关的读取工作,包括 issue 解析、issue 获取、工作区解析、检查与流水线读取、仓库内容读取,以及 gh 和 glab 中那些容易让不熟悉的调用者产生误解的行为。调用方通过名称调用此技能并消费其返回结果,不应从其他技能中加载它的文件。

主要能力

  • 读取 GitHub issue 并生成结构化上下文。
  • 解析 GitHub 或 GitLab 引用而不发起网络调用。
  • 解析 issue 所属的插件工作区。
  • 读取 PR 状态、标签、指派人、文件或检查状态。
  • 解释失败、陈旧或缺失的检查。
  • 读取仓库或 PR 分支中的文件。
  • 读取 GitLab issue、MR 状态、流水线状态或文件。
  • 准备 GitHub 拉取请求创建载荷。
  • 准备 GitLab 合并请求创建载荷。
  • 准备评论、标签、指派人或 /publish 载荷。
  • 准备 GitLab 评论、标签或审批载荷。

使用方式 该技能按结果进行路由,调用方根据所需结果加载并遵循对应路径。例如,将 GitHub issue 引用转为结构化上下文时运行 uv run scripts/fetch_issue_context.py <reference>;解析引用而不联网、解析工作区、准备评论等载荷时参考 references/issue-context.md;读取 PR 状态、检查状态、仓库内容以及准备 GitHub PR 创建载荷时参考 references/gh-cli.md;读取 GitLab issue、MR、流水线、文件以及准备 GitLab MR 创建载荷、评论、标签、审批载荷时参考 references/glab-cli.md。GitHub 工作通过 gh 运行,GitLab 工作通过 glab 运行,且仅当涉及 GitLab 主机时才需要 glab。

不变量与限制 该技能的所有路由均为只读。需要写入的调用方只能获得载荷,而非执行结果。issue、PR 或 MR 的 URL 必须从解析出的命名空间、仓库和编号重建,绝不保留用户提供的原始 URL,因为它可能携带片段或查询字符串。Jira key 不属于该技能的工作范围:提取后交还调用方,由调用方调用 /rhdh-jira-api 获取详情。gh pr checks 和 statusCheckRollup 是缓存视图,会变陈旧,必须通过 gh run list --branch 确认检查结论后再行动。GitLab 流水线结论属于某个提交,而非合并请求,报告前必须将流水线 SHA 与 MR head SHA 进行比对。无法解析的工作区应报告为未解析,猜测会把调用方引向错误的仓库。绝不读取凭证文件;如果 gh auth status 或 glab auth status 失败,停止并报告缺失的能力。

变更边界 参考文档中的命令模式是载荷,不是授权。该技能构建命令并原样交还而不执行,从而把决定权留给用户,而不是留给知道语法的模块。在任何 PR、MR、评论、标签、指派人、审查、审批或 /publish 写入之前,调用方技能会调用 /mutation-gate 并遵循它。该技能返回精确的参数向量和 shell 安全渲染、规范主机与仓库、目标对象或 base/head 分支、标题(如适用)以及正文文件的绝对路径;同时返回正文文件内容用于预览,以及一个只读验证命令。它从不运行写入命令。对于 PR 和 MR 创建,拒绝缺失或多行标题、相对或不可读的正文文件、未解析的仓库或空 base/head 分支。将每个值视为一个参数,不得将标题或正文插值到 shell 语法中,不得使用 eval,也不得用 heredoc 替换正文文件。请求获取、分类或分析属于读取意图,不批准任何写入。

issue 上下文输出 scripts/fetch_issue_context.py 只打印一个 JSON 对象,没有外层封装:issue 字段就是整个文档。字段包括 key(owner/repo#number)、summary(issue 标题)、source、url、repository、number、state(OPEN 或 CLOSED)、labels、description(完整 issue 正文)、workspace(包含 name 和 strategy,strategy 为 label、body、title、package 或 unresolved 之一)以及 comments。/rhdh-jira-api 返回相同的 issue 结构并带 source: jira;通过 references/glab-cli.md 读取的 GitLab issue 填充相同字段并带 source: gitlab,因此调用方可消费三者而无需按结构分支。未解析的工作区应保持 name 为 null 且 strategy 为 unresolved,而不是臆造名称。

脚本与参考 scripts/fetch_issue_context.py 从 GitHub issue URL、裸 #number 或 owner/repo#number 确定性地构建该文档;GitLab issue 改用 glab 读取。references/issue-context.md 涵盖两个 forge 的引用解析、字段提取、工作区解析以及受门控的交互载荷。references/gh-cli.md 涵盖 gh 和 jq 读取模式、拉取请求创建载荷、检查与工作流运行读取、仓库内容读取、失败表以及 overlay 仓库的 /publish 规则。references/glab-cli.md 涵盖 glab 对合并请求、流水线和仓库内容的读取、GitLab 合并请求创建载荷、与 GitHub 不同的 GitLab 字段名,以及它构造但从不运行的其他命令。

完成条件 当 JSON 携带 key、summary 和 source,url 从解析出的命名空间、仓库和编号重建而非从请求复制,且 workspace.strategy 命名了解析它的规则或读取为 unresolved 且 name 为 null 时,一次获取即完成。检查结论只有在 GitHub 上由 gh run list --branch 确认,或在 GitLab 上由 MR head SHA 对应的流水线确认后才算完成;仅凭 gh pr checks 或 statusCheckRollup 的值只是缓存视图,不是结论。写入载荷在未执行地交还给调用方的 mutation gate 时才算完成。交互载荷需说明确切命令、仓库、issue、PR 或 MR 编号、head SHA 以及正文或标签。PR 或 MR 创建载荷需携带规范仓库、确切的 base 和 head 分支、单行标题、正文文件的绝对路径、正文预览、参数向量、shell 安全命令以及只读验证命令。在 issue 中发现的 Jira key 报告给调用方,绝不在此解析。