From 29ffb118f7162b1af3fb32cf6b21f0d4cdc23308 Mon Sep 17 00:00:00 2001
From: wyxfzgg <3132758001@qq.com>
Date: Thu, 9 Jul 2026 22:20:15 +0800
Subject: [PATCH] =?UTF-8?q?feat(skills):=20add=20gitlink-multi-repo-ops?=
=?UTF-8?q?=EF=BC=88=E5=A4=9A=E4=BB=93=E5=BA=93=E5=8D=8F=E5=90=8C=EF=BC=9A?=
=?UTF-8?q?=E8=B7=A8=E5=A4=9A=E4=BB=93=E5=BA=93=E7=BB=9F=E4=B8=80Issue?=
=?UTF-8?q?=E8=BF=BD=E8=B8=AA=E3=80=81PR=E7=8A=B6=E6=80=81=E7=9C=8B?=
=?UTF-8?q?=E6=9D=BF=E3=80=81Release=E5=8D=8F=E8=B0=83=E5=8F=91=E5=B8=83?=
=?UTF-8?q?=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
新增端到端编排型 Agent Skill,串联多个 gitlink-cli 命令完成完整自动化场景(≥3 命令/Skill 调用)。
遵循 skills 规范(SKILL.md + frontmatter),兼容 Claude Code 等 Agent 平台。
来源:GitLink 大赛 2026 子任务三(端到端自动化工作流)。
---
skills/gitlink-multi-repo-ops/SKILL.md | 147 +++++++++++++++++++++++++
1 file changed, 147 insertions(+)
create mode 100644 skills/gitlink-multi-repo-ops/SKILL.md
diff --git a/skills/gitlink-multi-repo-ops/SKILL.md b/skills/gitlink-multi-repo-ops/SKILL.md
new file mode 100644
index 0000000..4365817
--- /dev/null
+++ b/skills/gitlink-multi-repo-ops/SKILL.md
@@ -0,0 +1,147 @@
+---
+name: gitlink-multi-repo-ops
+version: 1.0.0
+description: "多仓库协同编排:跨多个 GitLink 仓库的统一 Issue 追踪、PR 状态看板与 Release 协调发布,当用户需要同时管理/对比/协调多个仓库时触发。"
+metadata:
+ requires:
+ bins: ["gitlink-cli"]
+ orchestrates:
+ - gitlink-issue
+ - gitlink-pr
+ - gitlink-release
+ - gitlink-insight
+ - gitlink-workflow
+ cliHelp: "gitlink-cli --help"
+---
+
+# gitlink-multi-repo-ops(多仓库协同编排)
+
+**CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),认证/权限/API 注意事项。**
+**CRITICAL — 所有写入/删除操作(批量 release create、issue batch-close)前,务必先确认用户意图。**
+**CRITICAL — GitLink 操作只能用 gitlink-cli。禁止用 gh(GitHub CLI)操作 GitLink 资源。**
+**CRITICAL — 编排型 Skill 只做"导演",不重写子 Skill 内部逻辑。**
+
+---
+
+## 工作流总览
+
+```mermaid
+flowchart TD
+ U[用户自然语言输入
含仓库名/组织/清单] --> S1[Step1 🤖AI解析仓库清单]
+ S1 --> S2[Step2 跨仓库数据采集
循环 issue/pr/release list]
+ S2 --> S2J{数据齐全?}
+ S2J -->|否| S2
+ S2J -->|是| S3[Step3 🤖AI跨仓分析
workflow+repo-report / +health]
+ S3 --> S4[Step4 🤖AI生成协同看板
MULTI-REPO-DASHBOARD.md]
+ S4 --> S5[Step5 🤖AI Release依赖判断
拓扑排序]
+ S5 --> CONF{用户确认发布计划?}
+ CONF -->|修改| S5
+ CONF -->|同意| S6[Step6 Release协调发布
release+create 串行]
+ S6 --> DONE[看板 + 发布报告]
+```
+
+---
+
+## 编排的子 Skill
+
+| 子 Skill | 职责 | 调用时机 |
+|---|---|---|
+| gitlink-issue | 单仓 Issue 的 list/view/close | Step2 采集、Step6 发布前阻断检查 |
+| gitlink-pr | 单仓 PR 的 list/view/merge/check-merge | Step2 采集、Step6 发布前阻断检查 |
+| gitlink-release | 单仓 Release 的 list/create/view | Step2 采集、Step6 协调发布 |
+| gitlink-insight | 仓库画像、贡献者、活跃度 | Step3 跨仓分析 |
+| gitlink-workflow | repo-report / triage / health 汇总 | Step3 单仓报告、Step4 看板合成 |
+
+---
+
+## 详细步骤
+
+### Step 1: 🤖AI 解析仓库清单(AI 判断点)
+
+- 输入:用户自然语言(如"看看 acme 组织下的 frontend、backend、infra 三个库")。
+- 🤖AI 判断点:抽取规范化的 `owner/repo` 列表,去重、补全大小写。若只给组织名,先拉候选再请用户确认。
+- 纯命令(仅当需枚举候选时):
+ - `gitlink-cli org +list --owner `
+ - `gitlink-cli repo +list --owner --limit 50`
+- 🤖AI 判断点:清单为空或歧义时**必须暂停确认**,不得擅自推断。
+- 产出:内部 `repo_list` 数组,供后续循环。
+
+### Step 2: 跨仓库数据采集(纯命令,循环执行)
+
+对 `repo_list` 每个 repo 循环执行只读命令,结果按仓库归档:
+- `gitlink-cli issue +list --owner --repo --state open --limit 50`
+- `gitlink-cli pr +list --owner --repo --state open --limit 50`
+- `gitlink-cli release +list --owner --repo --limit 10`
+- `gitlink-cli milestone +list --owner --repo `
+- `gitlink-cli repo +info --owner --repo `
+- 🤖AI 判断点:某仓库采集失败(404/无权限)记入 errors[],**不中断流程**,继续下一个,最终看板标注"采集失败"。
+- 全部 GET,安全无需确认。
+
+### Step 3: 🤖AI 跨仓统一分析(AI 判断点)
+
+- 纯命令(逐仓库):
+ - `gitlink-cli workflow +repo-report --repository /`
+ - `gitlink-cli workflow +health --repository /`
+ - `gitlink-cli workflow +triage --owner --repo --state open`(若 issue 堆积)
+- 🤖AI 判断点:
+ - 对比各仓"未关闭 Issue / 未合并 PR / 距上次 Release 时长",找瓶颈仓库与风险仓库。
+ - 识别跨仓关联 Issue(标题/标签相似)、共享贡献者、依赖同一里程碑的发布计划。
+ - 汇总每仓 P0/P1 issue 与阻塞 PR,形成优先级矩阵。
+
+### Step 4: 🤖AI 生成协同看板(AI 判断点)
+
+- 纯命令(可选,补充活跃度):
+ - `gitlink-cli repo +activity --owner --repo `
+ - `gitlink-cli repo +contributors --owner --repo --limit 10`
+- 🤖AI 判断点:撰写 `MULTI-REPO-DASHBOARD.md`,结构:
+ 1. 仓库总览表(仓库 | 开放 Issue | 开放 PR | 最新 Release | 健康分)
+ 2. 跨仓 Issue 看板(按优先级/标签归并)
+ 3. 跨仓 PR 看板(可合并 / 阻塞 / 冲突)
+ 4. Release 协调时间线
+ 5. 风险提示
+- 🤖AI 判断点:若用户提及"导出":
+ - `gitlink-cli export +issues --owner --repo --output issues.csv`
+ - `gitlink-cli export +prs --owner --repo --output prs.csv`
+
+### Step 5: 🤖AI Release 依赖判断(AI 判断点,关键决策)
+
+- 纯命令(核对可合并性与现有 release):
+ - `gitlink-cli pr +check-merge --owner --repo --number ` — 发布分支 PR 冲突预检
+ - `gitlink-cli release +view --owner --repo --id `
+- 🤖AI 判断点:
+ - **依赖拓扑排序**:backend 依赖 infra、frontend 依赖 backend → 发布顺序 `infra → backend → frontend`。
+ - **发布门禁**:任一仓库有阻断级未合并 PR 或 P0 issue,先警告,不得自动跳过。
+ - 生成"建议发布顺序"草案(每仓 tag、notes 要点、顺序)。
+- ⚠️强制确认:暂停并向用户确认发布计划与顺序,未确认严禁进入 Step6。
+
+### Step 6: Release 协调发布(纯命令,需用户确认)
+
+按拓扑顺序逐仓库串行执行(前一个失败则停止,避免半发布):
+- `gitlink-cli release +create --owner --repo --tag --name "<标题>" --body "" --target `
+- 每仓发布后核对:
+ - `gitlink-cli release +view --owner --repo --id `
+- 🤖AI 判断点:中间某仓失败,记录已成功与失败仓,回滚交由用户(不擅自 `release +delete`)。
+- 可选(用户明确要求清理"已发布修复"的 issue,再次确认后):
+ - `gitlink-cli issue +batch-close --owner --repo --numbers `
+
+---
+
+## Agent 触发示例
+
+**用户**:"帮我盘点 acme 组织的 frontend、backend、infra 三个仓库的进度,顺便把该发的版本协调发一下。"
+
+**Agent**:
+1. Step1(🤖AI):提取 `repo_list = [acme/frontend, acme/backend, acme/infra]`。
+2. Step2(纯命令):循环三仓跑 `issue +list`、`pr +list`、`release +list`、`milestone +list`、`repo +info`,落盘 `data/`。
+3. Step3(🤖AI):逐仓 `workflow +repo-report`、`workflow +health`;对比得出"backend PR #142 阻塞 frontend,infra 已 4 个月未发版"。
+4. Step4(🤖AI):生成 `MULTI-REPO-DASHBOARD.md`,含总览表、PR 看板、Release 时间线、风险。
+5. Step5(🤖AI):判断依赖顺序 `infra(v2.1.0) → backend(v3.4.0) → frontend(v1.9.0)`;`pr +check-merge` 确认 backend 发布分支无冲突 → 暂停确认。
+6. 用户批准后 Step6(纯命令):按顺序 `release +create` 三仓,每发一个即 `release +view` 核对,汇总发布结果。
+
+---
+
+## 注意事项
+
+- **只读 vs 写**:Step1-4 全只读可自由执行;Step5 决策与 Step6 写操作必须显式确认。
+- **幂等性**:采集失败不重试到死循环;发布失败不自动回滚。
+- **不替代子 Skill**:单仓深度操作细节仍由 issue/pr/release/insight/workflow 各自负责。