gitlink-cli/examples/workflows/community-ops/skills/gitlink-issue-triage-rules/EXAMPLES.md

13 KiB
Raw Blame History

使用示例

下面 4 个示例覆盖 4 个后端平台。所有示例都使用本 SKILL.md 内嵌的同一份规则11 条 + 10 type assigners无需额外准备文件。


示例 1GitHub 项目

用户输入

帮我用规则把 xuanlanwuta/gps_SM 的未分拣 Issue 分拣一下

Agent 执行

# Step 0检测后端 + 登录
git remote get-url origin
# → https://github.com/xuanlanwuta/gps_SM.git
# → BACKEND=github
gh auth status  # 确认登录token 有 repo 权限)

# Step 1加载规则从 SKILL.md 内嵌 YAML 块)
# 解析为 mode=hybrid / 11 条规则 / 10 个 type assigners 全空

# Step 1.5:自动查询项目成员 + 角色(本流程最新版)
gh api "repos/xuanlanwuta/gps_SM/collaborators?per_page=100" \
  --jq '.[] | {login, role_name}'
# → 查到 1 个xuanlanwuta (admin)
# Agent 自动匹配:
#   ✅ 缺陷 / 协助 / 搁置 ← 候选 [xuanlanwuta] 静默填入
#   ⏭️ 功能 / 文档 / 测试 / 支持 / 疑问 / 任务 / 重复 ← 角色不明确,去问用户

# Step 2列出未分拣 Issue
gh issue list --repo xuanlanwuta/gps_SM --state open --limit 50 \
  --json number,title,labels,assignees,body
# → 4 条无标签 Issue如实际测试中创建的那些

# Step 3拉取仓库已有 labelGitHub 默认英文标签)
gh label list --repo xuanlanwuta/gps_SM --json name,color --limit 100
# → {bug, documentation, duplicate, enhancement, good first issue,
#    help wanted, invalid, question, wontfix}

# Step 4按 11 条规则评估每条 Issue
# → Agent 内部按规则匹配 + 双向 label 翻译GitHub 后端 → 英文优先)

# Step 5dry-run 预览(必须先看)

# Step 6用户确认后真实写回用 gh issue edit + comment
gh issue edit 1 --repo xuanlanwuta/gps_SM \
  --add-label "bug,help wanted" --add-assignee "xuanlanwuta"
gh issue comment 1 --repo xuanlanwuta/gps_SM \
  --body "🤖 自动分拣type=缺陷,标签=[bug, help wanted],优先级=critical命中规则=bug-crash"

dry-run 预览示例(实际跑出来的):

## 📋 Issue 分拣草稿dry-run

> 后端github
> 仓库xuanlanwuta/gps_SM
> 模式hybrid
> 规则版本1
> 涉及 Issue4 条

| # | 标题 | 当前 | 建议分类 | 建议标签 | 责任人 | 优先级 | 命中规则 |
|---|------|------|----------|----------|--------|--------|----------|
| #1 | Bug: GPS module panic on startup | 无 | 缺陷 | bug, help wanted | xuanlanwuta | critical | bug-crash |
| #2 | Bug: GPS data parser reports error | 无 | 缺陷 | bug | xuanlanwuta | high | bug-default |
| #3 | Support NMEA 0183 protocol parsing | 无 | 功能 | enhancement | xuanlanwuta | normal | feature-request |
| #4 | How to receive GPS data via UART | 无 | 功能 | question | xuanlanwuta | normal | feature-question |

⚠️ 涉及写入操作。回复"确认"或"apply"执行。

实际结果2026-07-04 测试):

✓ 4/4 Issue 标签正确(命中 GitHub 已有默认标签)
✓ 4/4 Issue 分配给你
✓ 4/4 Issue 加了审计评论(含命中规则、关键词)
✓ 双语 label 智能匹配工作正常GitHub 后端 → 英文优先)
✓ 跨 4 type 全覆盖缺陷critical/high+ 功能normal
✓ 多标签正常:#1 打了 [bug, help wanted] 两个标签

用户输入

帮我用规则把 Gitlink/gitlink-cli 的未分拣 Issue 分拣一下

Agent 执行

# Step 0检测后端
git remote get-url origin
# → https://www.gitlink.org.cn/Gitlink/gitlink-cli.git
# → BACKEND=gitlink

gitlink-cli auth status  # 确认登录gitlink-cli + GITLINK_TOKEN

# Step 1加载规则从 SKILL.md 内嵌 YAML 块)

# Step 1.5:自动查询项目成员 + 角色
gitlink-cli member +list --owner Gitlink --repo gitlink-cli --format json \
  | jq '[.data[] | {login, role}]'
# → 查到成员chroe / caoweiqiong / yetja
# Agent 自动匹配(双语 label → 中文优先):
#   ✅ 缺陷 / 协助 / 搁置 ← 候选 [admin role] 静默填入
#   ⏭️ 其他 type ← 去问用户

# Step 2列出未分拣 Issue
gitlink-cli issue +list --owner Gitlink --repo gitlink-cli --state open --format json \
  | jq '[.data[] | select(.status_id==1 or .status_id==2) | select((.issue_tags//[]|length==0) or (.assigners//[]|length==0))]'

# Step 3拉取仓库已有 labelGitLink 仓库通常是中文)
gitlink-cli label +list --owner Gitlink --repo gitlink-cli --format json

# Step 4-7评估 → dry-run → 用户确认 → PATCH 写回
# GitLink 写回用gitlink-cli api PATCH /v1/<owner>/<repo>/issues/<num>
# GitLink 字段subject / description / issue_tag_ids / assigner_ids / priority_id

关键差异(与 GitHub

  • 标签用中文(缺陷 / 协助 / 任务 ...),因为 GitLink 后端优先中文
  • 责任人字段是 assigner_ids(不是 assigned_to_id
  • priority 用原生 priority_id1-4不靠 label

示例 3GitLab 项目

用户输入

帮我用规则把 gitlab-org/gitlab 的未分拣 Issue 分拣一下

Agent 执行

# Step 0检测后端
git remote get-url origin
# → https://gitlab.com/gitlab-org/gitlab.git
# → BACKEND=gitlab

glab auth status  # 确认登录

# Step 1加载规则从 SKILL.md 内嵌 YAML 块)

# Step 1.5:自动查询项目成员 + 角色
glab api "projects/:fullpath/members/all" \
  --jq '[.[] | {username, access_level}]'
# → 查到多个 member + access_level50=Owner, 40=Maintainer, 30=Developer, 20=Reporter
# Agent 自动匹配:
#   ✅ 缺陷 / 协助 / 搁置 ← 候选 [access_level>=40] 静默填入
#   ⏭️ 其他 type ← 去问用户

# Step 2列出未分拣 Issue
glab issue list --repo gitlab-org/gitlab --state opened --output json --all \
  | jq '[.[] | select((.labels|length==0) or (.assignees|length==0))]'

# Step 4-7评估 → dry-run → 用户确认 → update 写回
# GitLab 写回用glab issue update <num> --repo <owner>/<repo> --label "..." --assignee "..."

关键差异

  • 标签用英文(同 GitHubGitLab 后端优先英文)
  • glab 不支持 label 数组,一次一个
  • priority 靠 label 表达(无 priority_id

示例 4Gitee 项目

用户输入

帮我用规则把 oschina/gitlab-ce 的未分拣 Issue 分拣一下

Agent 执行

# Step 0检测后端
git remote get-url origin
# → https://gitee.com/oschina/gitlab-ce.git
# → BACKEND=gitee

test -n "$GITEE_TOKEN"  # 确认 token 已设置Gitee API 用 ?access_token=***

# Step 1加载规则从 SKILL.md 内嵌 YAML 块)

# Step 1.5:自动查询项目成员 + 角色(用 curl 直调 REST API
curl -fsSL "https://gitee.com/api/v5/repos/oschina/gitlab-ce/collaborators?access_token=***" \
  | jq '[.[] | {login, role_name}]'
# → 查到成员 + role_nameadmin / developer / reporter / spectator
# Agent 自动匹配:
#   ✅ 缺陷 / 协助 / 搁置 ← 候选 [admin] 静默填入
#   ⏭️ 其他 type ← 去问用户

# Step 2列出未分拣 Issue
curl -s "https://gitee.com/api/v5/repos/oschina/gitlab-ce/issues?state=open&access_token=***" \
  | jq '[.[] | select((.labels|length==0) or (.assignees|length==0))]'

# Step 4-7评估 → dry-run → 用户确认 → curl 写回
# Gitee 写回用curl -X PATCH "https://gitee.com/api/v5/repos/<owner>/<repo>/issues/<num>?access_token=***"

关键差异

  • 标签用中文(同 GitLinkGitee 后端优先中文)
  • labels / assignees 用逗号分隔(不支持原生数组)
  • priority 靠 label 表达

跨平台要点对比

维度 GitHub GitLab GitLink Gitee
CLI gh glab gitlink-cli curl (无官方 CLI)
优先 label 语言 🇺🇸 英文 🇺🇸 英文 🇨🇳 中文 🇨🇳 中文
鉴权方式 Bearer token PRIVATE-TOKEN header access_token ?access_token=***
写回命令 gh issue edit glab issue update gitlink-cli api PATCH curl -X PATCH
责任人字段 assignees assignees assigner_ids assignees
priority 靠 label 靠 label priority_id (1-4) 靠 label
Issue 编号 --number --number --number URL 中的 iid

Agent 平台验证结果

真实仓库实测xuanlanwuta/gps_SM2026-07-04

验证项 结果
仓库可访问 私有仓库admin 权限
4 条测试 Issue 创建 全部成功(#1-#4
规则评估准确率 4/4 命中正确规则
双语 label 智能匹配 GitHub 后端自动选英文
真实 PATCH 写回 12 次 API 调用全部 200
评论写入 4 条审计评论成功
标签命中仓库已有 label 全部命中 GitHub 默认英文标签
multi-label 能力 #1 成功打 [bug, help wanted] 双标签
Step 1.5 自动查询 检测到 admin 角色自动填入

OpenClaw当前运行环境

验证项 结果
Front matter 解析 YAML 格式正确,含 name / version / description / metadata.platforms
自动加载 已放置于 workspace/skills/,自然语言触发自动匹配
CRITICAL 警告识别 **CRITICAL — ...** 双星号格式被 OpenClaw 解析为高优先级提示
相对路径引用 ../gitlink-shared/SKILL.md 正确解析(仅 GitLink 后端需要)
多后端 front matter metadata.platforms.backends 列出 4 个后端GitHub/GitLab/GitLink/GiteeAgent 按需选择
工作流分步执行 Step 0-7 + Step 1.5 步骤化指令可直接被 Agent 串接
dry-run 强制 Step 5 强制输出预览;用户未确认前不执行写回
双语 label 智能匹配 GitHub 优先英文 / GitLink 优先中文Agent 按后端自动选
assigners 运行时询问 10 个 type 自动问 + Step 1.5 自动查角色
实测触发词 "用规则分拣 Issue"、"批量分拣"、"按规则打标签" 均能匹配

Claude Code

验证项 结果
Skills 规范兼容 name / description 字段符合 Anthropic AgentSkills 规范
目录结构 放置于 ~/.claude/skills/gitlink-issue-triage-rules/SKILL.md 即被识别
自然语言触发 通过 description 中的 "Issue"、"分拣"、"规则" 关键词触发
Front matter 兼容 Claude Code 读取 description 作为匹配依据,与本文件一致
步骤化指令 Step 0-7 + Step 1.5 可被 Claude Code 工具调用直接执行
多后端 dispatch case "$BACKEND" in ... esac 四分支结构对 Claude 友好
assigners 留空机制 Claude 看到 [] 会主动询问用户

Cursor

验证项 结果
Skills 目录兼容 放置于 ~/.cursor/skills/.cursor/skills/ 即可加载
/ 命令触发 用户输入 /triage 类命令可手动触发(需 Cursor 0.40+
自然语言触发 同 Claude Code通过 description 关键词匹配
自包含架构 Cursor 直接读 SKILL.md 内嵌 YAML无需外部文件

通用 Agent任意 LLM Agent

验证项 结果
文件可读性 标准 Markdown + YAML front matter任何 Agent 可解析
步骤可执行性 Step 0-7 + Step 1.5 给出具体 CLI 命令(含 4 后端 case 分支),无需额外推理
安全约束 CRITICAL 警告格式通用Agent 必读
依赖声明 metadata.requires.bins_any 声明四选一依赖Agent 可主动检测
自包含数据源 内嵌 YAML 块,无需仓库预备文件

兼容性矩阵

平台 最低版本 加载方式 触发方式
OpenClaw >= 2026.6.1 自动(workspace/skills/ 自然语言
Claude Code >= 1.0.0 复制到 ~/.claude/skills/ 或项目 ./.claude/skills/ 自然语言
Cursor >= 0.40.0 复制到 ~/.cursor/skills/ 或项目 ./.cursor/skills/ 自然语言 + / 命令
通用 Agent - 作为参考文档 按 SKILL.md 流程自取
后端 GitHub gh >= 2.0.0 系统已安装 -
后端 GitLab glab >= 1.20.0 系统已安装 -
后端 GitLink gitlink-cli >= 0.1.13 系统已安装 -
后端 Gitee curl任意版本 + 设置 GITEE_TOKEN 系统已安装 REST API无官方 CLI

验证结论

  • 双平台兼容验证通过OpenClaw当前环境+ Claude Code 同时可用,无需任何分支或修改
  • 多平台扩展验证Cursor、通用 Agent 也兼容同一份 SKILL.md
  • 四后端适配验证GitHub / GitLink / GitLab / Gitee 四套命令全表对照Agent 按检测结果自动 dispatch
  • 真实仓库实测通过xuanlanwuta/gps_SM 私有仓库 4 条 Issue 全部按规则打标签 + 分配 + 加审计评论
  • 零代码依赖C1 模式纯文档Agent 按步骤直接调用对应平台 CLI无需 helper 脚本
  • 自包含架构:规则 YAML 内嵌于 SKILL.mdSkill 可丢到任意仓库即用
  • 跨平台字段翻译priority 用 human-readablelow/normal/high/criticalAgent 翻译成各平台原生字段
  • assigners 运行时询问10 个 type + Step 1.5 自动查角色,能匹配上的静默填入,匹配不上的才问用户