From 69a820cccb13a37310b1696da03a196dc33f418c Mon Sep 17 00:00:00 2001 From: camelliamc <16583354+camelliamc@user.noreply.gitee.com> Date: Tue, 23 Jun 2026 20:32:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20gitlink-faq=20skill=20?= =?UTF-8?q?=E2=80=94=20Issue=20=E7=9F=A5=E8=AF=86=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skills/gitlink-faq/SKILL.md | 337 ++++++++++++++++++ .../examples/duplicate-detection-demo.md | 105 ++++++ skills/gitlink-faq/examples/faq-template.md | 88 +++++ .../examples/weekly-faq-refresh-workflow.md | 85 +++++ .../references/gitlink-faq-cluster.md | 114 ++++++ .../references/gitlink-faq-collect.md | 81 +++++ .../references/gitlink-faq-detect.md | 129 +++++++ .../references/gitlink-faq-generate.md | 98 +++++ .../references/gitlink-faq-publish.md | 58 +++ 9 files changed, 1095 insertions(+) create mode 100644 skills/gitlink-faq/SKILL.md create mode 100644 skills/gitlink-faq/examples/duplicate-detection-demo.md create mode 100644 skills/gitlink-faq/examples/faq-template.md create mode 100644 skills/gitlink-faq/examples/weekly-faq-refresh-workflow.md create mode 100644 skills/gitlink-faq/references/gitlink-faq-cluster.md create mode 100644 skills/gitlink-faq/references/gitlink-faq-collect.md create mode 100644 skills/gitlink-faq/references/gitlink-faq-detect.md create mode 100644 skills/gitlink-faq/references/gitlink-faq-generate.md create mode 100644 skills/gitlink-faq/references/gitlink-faq-publish.md diff --git a/skills/gitlink-faq/SKILL.md b/skills/gitlink-faq/SKILL.md new file mode 100644 index 00000000..99443b4e --- /dev/null +++ b/skills/gitlink-faq/SKILL.md @@ -0,0 +1,337 @@ +--- +name: gitlink-faq +version: 1.2.0 +description: "Issue 知识库:从项目 Issue 自动分类(Bug/功能请求/使用问题),按类型归纳聚类,生成结构化知识库发布到 Wiki;增量更新已有知识库;检测新 Issue 是否与已有问题重复。当用户需要整理 Issue、归纳 Issue、总结常见问题/Bug、建立知识库、更新知识库、检查重复 Issue、查重时触发。" +metadata: + requires: + bins: ["gitlink-cli"] + cliHelp: "gitlink-cli issue --help" +--- + +# gitlink-faq(Issue 知识库) + +**CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。** +**CRITICAL — 写入/删除操作前,务必先确认用户意图。默认 dry-run 预览,用户确认后再执行。** +**CRITICAL — 只读操作(`issue +list`、`issue +view`、`wiki +view`)自动连续执行,不要逐个请求用户确认。数据采集和分析阶段一气呵成,仅在最终写入步骤前暂停确认。** +**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`(GitHub CLI)操作 GitLink 资源。** + +> **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) + +## 运行模式 + +| 模式 | 说明 | 典型触发语 | 需要认证 | +|------|------|------------|----------| +| **模式 A:Issue 归纳** | 采集全部 Issue → 按类型分类 → 主题聚类 → 生成结构化知识库发布到 Wiki | "整理 Issue""归纳关闭的 Issue""总结项目问题""建立知识库""分析 Issue" | 是(发布 Wiki 需写入) | +| **模式 B:重复检测** | 对指定 Issue,在知识库和历史 Issue 中查找相似项,判断是否重复 | "查重""有没有类似的 Issue""这个是不是有人报过" | 否(仅读取;评论需认证) | +| **模式 C:Wiki 增量更新** | 读取已有 Wiki 页面 → 拉取新 Issue → 分类合并到现有知识库结构 → 更新 Wiki | "把这个 Issue 加到知识库""更新 Wiki 页面""补充到知识库里""同步最新 Issue 到 Wiki" | 是(读取+写入 Wiki) | + +--- + +## 模式 A:Issue 归纳(6 步) + +当用户说 **"整理 Issue"、"归纳已关闭 Issue"、"总结项目问题"、"建立知识库"** 等时,执行以下流程。 + +### 第 1 步:采集全部 Issue + +**CRITICAL**:不要仅采集 `--state closed`。GitLink 平台很多已解决的 Issue 不会被及时设置为"关闭"状态,只看 closed 会漏掉大量有分析价值的 Issue。 + +```bash +# 同时采集 open 和 closed,覆盖所有 Issue +gitlink-cli issue +list --state open --limit 100 --format json +gitlink-cli issue +list --state closed --limit 100 --format json +``` + +将两份列表合并去重,得到完整 Issue 集合。 + +采集量策略参见 [`references/gitlink-faq-collect.md`](references/gitlink-faq-collect.md)。 + +### 第 2 步:筛选 + 读取详情(依靠 description) + +先按标题粗筛,仅排除: +- 标题含 `[test]` / `测试` 的纯测试 Issue +- 标题为空或仅有占位符的 Issue + +其余 Issue **一律保留**,逐个读详情: + +```bash +gitlink-cli issue +view --number N --format json +``` + +提取字段:`subject`(标题)、`description`(描述)。 + +**description 是核心分析源**: +- 部分 Issue 的 description 非常详细(含复现步骤、环境信息、修复建议) +- description 的质量直接决定分析深度 +- `comment_journals_count` 数值可参考(表示讨论热度),但实际评论内容无法通过 API 获取(见下方 API 限制) + +每批 20-30 个,尽量覆盖所有非测试 Issue。 + +### 第 3 步:Issue 类型分类 + +对每条 Issue,AI 根据 (subject + description) 判断类型。**不要因为"缺少 journals"或"状态未关闭"而排除 Issue**——是否有分析价值取决于内容本身,不是状态。 + +| 类型 | 判断依据 | 纳入条件 | 分析价值 | +|------|----------|----------|----------| +| **Bug 报告** | 描述异常行为、报错、与预期不符 | description 非空 或 subject 明确描述症状 | 高频 Bug = 模块质量信号 | +| **功能请求** | 建议新增能力、改进体验 | 保留。高频请求反映用户需求 | 用户需求优先级 | +| **使用问题** | 不知道怎么用、配置不清楚 | 保留。即使未回复也是需求信号 | 文档/体验改进方向 | +| **其他** | 不属于以上三类 | 标题无实质内容则忽略 | 低 | + +**输出**:每条 Issue 带上类型标签。 + +**宽松原则**:宁可多留一条低价值的,也别漏掉一条有洞察的。不确定类型的归入"其他"而非丢弃。 + +### 第 4 步:按类型分别聚类 + +将同类型的 Issue 按语义相似度聚类。不同类型聚类维度不同: + +| 类型 | 聚类维度 | 聚类目标 | +|------|----------|----------| +| Bug 报告 | 按**出问题的模块/功能**归类 | 找出"哪个模块 Bug 最多"、"同类 Bug 的共同根因" | +| 功能请求 | 按**请求的功能领域**归类 | 找出"用户最想要什么能力"、"哪些增强呼声最高" | +| 使用问题 | 按**操作场景**归类 | 传统 Q&A:提炼"问题 → 答案" | + +**Bug 聚类输出**: + +```json +{ + "module": "Issue 数据显示", + "bug_count": 4, + "pattern": "CLI 返回数据与网页端不一致、字段缺失", + "affected_issues": [5, 7, 15, 18], + "typical_symptom": "issue +view / pr +view 返回结果缺少关键字段或与网页端不一致" +} +``` + +**功能请求聚类输出**: + +```json +{ + "feature_area": "API 能力增强", + "request_count": 3, + "pattern": "希望 API 支持更多查询/操作能力", + "affected_issues": [9, 14, 21], + "common_ask": "支持按序号查询 Issue、读取仓库文件、返回完整时间字段" +} +``` + +**使用问题聚类输出**(仅当同类 ≥2 条时生成 Q&A): + +```json +{ + "topic": "安装配置", + "question": "gitlink-cli 安装后无法运行怎么办?", + "answer": "检查 PATH、确认平台支持,详见安装文档", + "source_issues": [16, 20] +} +``` + +### 第 5 步:生成知识库文档 + +按以下结构组织 Markdown: + +```markdown +# 📊 Issue 知识库 + +> 自动生成 | 数据来源:已关闭 Issue({N} 条) +> 更新时间:{DATE} + +## 🐛 Bug 高频模块 + +### {模块名}({N} 个 Bug) +- **典型症状**: ... +- **涉及 Issue**: #A, #B, #C +- **已知修复**: ...(如有) + +## 💡 功能请求热度 + +### {功能领域}({N} 个请求) +- **用户期望**: ... +- **涉及 Issue**: #D, #E, #F + +## 📖 常见使用问题 + +### Q: {问题}? +**A:** {答案} +> 来源: #G, #H +``` + +根据实际数据量,若某类型 Issue 过少(<2 条),该章节可省略或合并到"其他"。 + +文档模板参见 [`examples/faq-template.md`](examples/faq-template.md)。 + +完成后保存为 `./issue-knowledge-base.md`,展示给用户预览。 + +### 第 6 步:发布到 Wiki + +用户确认后: + +```bash +# 首次创建 +gitlink-cli wiki +create --title "Issue-知识库" --file ./issue-knowledge-base.md + +# 后续更新 +gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base.md +``` + +--- + +## 模式 B:Issue 查找与查重 + +当用户说 **"查重"、"检查重复"、"有没有类似的 Issue"、"找一下关于 xx 的 Issue"、"这个是不是有人报过"、"有没有和 xx 相关的"** 时执行。 + +**CRITICAL**:本模式下,匹配到候选 Issue 后**必须自动读取其详情和 journals**,不要问用户"需要我读详情吗"。一次性完成搜索→读详情→给出分析结论。 + +### 第 1 步:确定搜索目标 + +- 用户指定了 Issue 编号 → `issue +view --number N` 获取目标内容 +- 用户描述了主题/关键词(如"与创建 Issue 有关的")→ 进入关键词搜索模式 + +### 第 2 步:拉取 Issue 列表 + +```bash +gitlink-cli issue +list --state open --limit 100 --format json +gitlink-cli issue +list --state closed --limit 100 --format json +``` + +提取全部 Issue 的 `subject`(标题),按用户主题进行标题匹配。 + +### 第 3 步:自动读取候选 Issue 详情(关键步骤) + +筛选出候选 Issue 后,**立即逐个读取详情,不需询问用户**: + +```bash +gitlink-cli issue +view --number N --format json +``` + +提取:标题、描述、journals(评论讨论历史)。 + +### 第 4 步:给出分析结论 + +综合标题+描述+journals,给用户完整分析: + +- **直接匹配**:Issue 的核心讨论内容、维护者回复中有无解决方案 +- **间接相关**:Issue 涉及同一模块/功能但由于不同原因 +- **不相关**:标题含关键词但内容无关 + +对每条匹配的 Issue 输出: +- 标题 + 编号 +- 一句话摘要(从描述和 journals 提取) +- 维护者有无回复/解决方案 +- 相关度判定 + +### 第 5 步:执行操作(仅查重+用户确认后) + +如果是查重场景且判定高度重复,用户确认后执行: + +```bash +gitlink-cli issue +comment --number N --body "..." +gitlink-cli issue +label-add --number N --labels "duplicate" +``` + +--- + +## 模式 C:Wiki 增量更新 + +当用户说 **"把这个 Issue 加到知识库里"、"更新 Wiki 页面"、"补充到知识库"、"同步最新 Issue 到 Wiki"** 等时执行。 + +**核心思路**:不是重新生成整个知识库,而是读取现有 Wiki 内容 → 拉取新 Issue → 分类合并 → 更新 Wiki。 + +### 第 1 步:读取现有 Wiki + +```bash +gitlink-cli wiki +view --title "Issue-知识库" --format json +``` + +从返回的 JSON 中提取内容(CLI 自动处理 base64 解码)。 + +如果 Wiki 不存在(404),回退到**模式 A**——首次创建知识库。 + +### 第 2 步:拉取用户指定的 Issue + +根据用户指示直接读 Issue 详情,**用户说哪个就拉哪个**,不要自己去拉全量列表做差集对比。 + +```bash +gitlink-cli issue +view --number N --format json +``` + +| 用户意图 | 操作 | +|----------|------| +| "把 Issue #N 加到知识库" | 只读 #N:`issue +view --number N` | +| "把这几个 Issue 加进去:#A, #B, #C" | 逐个读 #A, #B, #C | +| "把关于 XX 的 Issue 补充进去" | 先按关键词搜索(同模式 B 第 2-3 步),找到匹配 Issue 后逐个读详情 | +| "把最近新增的 Issue 同步到 Wiki" | 用户未指定具体编号时,才拉全量列表,对比 Wiki 中已有的编号做差集 | + +### 第 3 步:分类新 Issue + +### 第 4 步:合并到现有知识库结构 + +将新 Issue 按类型归入现有章节: + +- **Bug**:归入"Bug 高频模块",若属于已有模块则追加,否则新建模块条目 +- **功能请求**:归入"功能请求热度",若属于已有领域则合并,否则新建领域条目 +- **使用问题**:归入"常见使用问题",新建 Q&A 条目 + +合并时更新: +- Issue 计数(总数、各类型数量) +- 更新时间 +- 受影响的 `-- 涉及 Issue` 列表 + +### 第 5 步:生成合并后的文档并预览 + +将合并后的完整 Markdown 展示给用户预览,标注新增/变更的部分(可用 `[NEW]` 标记)。 + +### 第 6 步:更新 Wiki + +用户确认后: + +```bash +gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base.md +``` + +**CRITICAL**:必须用 `wiki +update`(不是 `+create`),因为页面已存在。 + +--- + +## 命令速查 + +| 命令 | 用途 | 模式 | +|------|------|------| +| `issue +list --state open --limit 100 --format json` | 获取 open Issue 列表 | A / C | +| `issue +list --state closed --limit 100 --format json` | 获取 closed Issue 列表 | A / C | +| `issue +view --number N --format json` | 读取单个 Issue 详情 | A / B / C | +| `wiki +view --title "Issue-知识库" --format json` | 查看已有知识库内容 | B / C | +| `wiki +create --title "Issue-知识库" --file ./xxx.md` | 首次创建知识库页面 | A | +| `wiki +update --title "Issue-知识库" --file ./xxx.md` | 增量更新知识库页面 | A / C | +| `issue +comment --number N --body "..."` | 添加评论引导用户 | B | +| `issue +label-add --number N --labels "duplicate"` | 标记重复 Issue | B | + +--- + +## API 注意事项 + +- `issue +list` 的 `--state` 参数**不可靠**(与 PR 列表同款问题),返回列表可能包含所有状态。因此必须同时拉 open + closed 两份列表合并去重。 +- **`issue +view` 不返回 journals 内容**:只有 `comment_journals_count`(评论数量),无法通过 API 读取实际评论。`GET /v1/.../issues/{N}/journals` 返回 HTML 而非 JSON。分析只能依靠 `subject` + `description`。 +- Wiki 内容为 base64 编码传输,CLI 自动处理编解码。Wiki 通过 Gateway API。 + +--- + +## 注意事项 + +- **先分类再聚类**:不同 Issue 类型不能混在一起聚类(Bug 和功能请求本质不同) +- **所有结论必须有来源**:Bug 模式、功能热度、Q&A 答案都必须来自实际 Issue,不编造 +- **数据不足时如实说明**:某类型 < 2 条时不强行归纳,标注"暂无足够数据" +- **评论语气友好**:重复检测是帮助用户,不是指责 +- **用户确认优先**:所有写入操作前先预览 + +## References + +- [gitlink-faq-collect](references/gitlink-faq-collect.md) — Issue 数据采集 +- [gitlink-faq-cluster](references/gitlink-faq-cluster.md) — 分类+聚类算法 +- [gitlink-faq-generate](references/gitlink-faq-generate.md) — 知识库文档生成 +- [gitlink-faq-detect](references/gitlink-faq-detect.md) — 重复检测逻辑 +- [gitlink-faq-publish](references/gitlink-faq-publish.md) — Wiki 发布 +- [weekly-faq-refresh-workflow](examples/weekly-faq-refresh-workflow.md) — 定期刷新示例 +- [duplicate-detection-demo](examples/duplicate-detection-demo.md) — 重复检测示例 +- [faq-template](examples/faq-template.md) — 文档模板 +- [gitlink-shared](../gitlink-shared/SKILL.md) — 认证和全局参数 diff --git a/skills/gitlink-faq/examples/duplicate-detection-demo.md b/skills/gitlink-faq/examples/duplicate-detection-demo.md new file mode 100644 index 00000000..5b809189 --- /dev/null +++ b/skills/gitlink-faq/examples/duplicate-detection-demo.md @@ -0,0 +1,105 @@ +# 重复检测完整示例 + +> 演示对新 Issue 进行查重检测的端到端流程。 + +## 场景 + +有用户提交了一个新 Issue #312,标题是"登录的时候一直转圈"。维护者想确认这是不是之前已经被问过的问题。 + +## 执行流程 + +### Step 1: 用户发起查重请求 + +``` +用户: 帮我看看 Issue #312 是不是重复了 + +AI: 好的,先看一下这个 Issue 的详情。 +``` + +### Step 2: 获取目标 Issue + +```bash +gitlink-cli issue +view --number 312 --format json +``` + +返回: +```json +{ + "subject": "登录的时候一直转圈", + "description": "打开登录页面,输入账号密码点击登录,页面一直转圈不跳转,换了浏览器也不行" +} +``` + +### Step 3: 获取对比数据 + +```bash +# 获取 FAQ +gitlink-cli wiki +view --title "FAQ" --format json + +# 获取已关闭 Issue +gitlink-cli issue +list --state closed --limit 100 --format json +``` + +### Step 4: AI 匹配分析 + +``` +AI 对比分析中... +``` + +返回匹配结果: + +``` +┌─────────────────────────────────────────────────────┐ +│ 🔍 Issue #312 查重结果 │ +│ │ +│ 标题: "登录的时候一直转圈" │ +│ │ +│ 高度重复 (≥0.85): │ +│ ┌──────────────────────────────────────────────┐ │ +│ │ 📖 FAQ Q3: 登录失败或提示 401 错误 │ │ +│ │ 相似度: 0.91 │ │ +│ │ 答案: Token 过期或网络问题,尝试重新登录 │ │ +│ ├──────────────────────────────────────────────┤ │ +│ │ 🔗 Issue #142: 登录页面显示空白 │ │ +│ │ 相似度: 0.88 │ │ +│ │ 已解决: 浏览器缓存问题 │ │ +│ ├──────────────────────────────────────────────┤ │ +│ │ 🔗 Issue #205: 无法登录,页面无响应 │ │ +│ │ 相似度: 0.86 │ │ +│ │ 已解决: DNS 解析问题 │ │ +│ └──────────────────────────────────────────────┘ │ +│ │ +│ 判定: 高度重复 (top_match: 0.91) │ +│ 建议: 添加引导评论 + duplicate 标签 │ +└─────────────────────────────────────────────────────┘ +``` + +### Step 5: 用户确认 + +``` +AI: 检测到 3 个高度相似的匹配。建议: +A. 添加引导评论(推荐用户查看 FAQ Q3 和 #142) +B. 添加 duplicate 标签后关闭 +C. 仅查看,不操作 + +用户: 选 A +``` + +### Step 6: 执行操作 + +```bash +gitlink-cli issue +comment --number 312 --body "你好!检测到你的问题与已有内容高度相似: + +- 📖 [FAQ - Q3: 登录失败或提示 401 错误](wiki/FAQ) +- 🔗 Issue #142: 登录页面显示空白(浏览器缓存问题) +- 🔗 Issue #205: 无法登录,页面无响应(DNS 解析问题) + +建议先查看以上内容。常见原因包括:浏览器缓存、DNS 解析、Token 过期。 +如果以上方案无法解决,请补充错误截图或浏览器控制台日志,我们会进一步排查。" +``` + +### Step 7: 完成 + +``` +AI: 已为 Issue #312 添加引导评论。用户将收到通知,看到参考链接。 +``` diff --git a/skills/gitlink-faq/examples/faq-template.md b/skills/gitlink-faq/examples/faq-template.md new file mode 100644 index 00000000..baf6cb1e --- /dev/null +++ b/skills/gitlink-faq/examples/faq-template.md @@ -0,0 +1,88 @@ +# 📊 Issue 知识库 + +> 自动生成 | 数据来源:已关闭 Issue({N} 条有效) +> 更新时间:{DATE} +> 项目:{OWNER}/{REPO} + +--- + +## 📂 概览 + +| 类型 | 数量 | 聚类数 | +|------|------|--------| +| 🐛 Bug 报告 | {BUG_COUNT} | {BUG_CLUSTER_COUNT} 个模块 | +| 💡 功能请求 | {FEATURE_COUNT} | {FEATURE_CLUSTER_COUNT} 个领域 | +| 📖 使用问题 | {QUESTION_COUNT} | {QUESTION_CLUSTER_COUNT} 个主题 | + +--- + +## 🐛 Bug 高频模块 + +### {模块名}({N} 个 Bug)🔥🔥 + +**典型症状**: {一句话描述这类 Bug 的共同表现} + +**涉及 Issue**: [#{编号}]({链接}), [#{编号}]({链接}) + +**已知修复**: {如有统一修复方案则写,无则写"部分已单独修复,详见表中 Issue"} + +--- + +### {模块名}({N} 个 Bug)🔥 + +**典型症状**: ... + +**涉及 Issue**: ... + +**已知修复**: ... + +--- + +> 如无高频 Bug(均 < 2 条),本章标注"暂无高频 Bug 模式,Bug 报告较分散"。 + +--- + +## 💡 功能请求热度 + +### {功能领域}({N} 个请求)🔥🔥🔥 + +**用户期望**: {一句话总结用户想要什么} + +**涉及 Issue**: [#{编号}]({链接}), [#{编号}]({链接}) + +--- + +### {功能领域}({N} 个请求)🔥 + +**用户期望**: ... + +**涉及 Issue**: ... + +--- + +> 如无热门功能请求,本章标注"暂无集中的功能请求"。 + +--- + +## 📖 常见使用问题 + +### Q{N}: {问题}? + +**A:** {答案} + +> 📎 来源 Issue: [#{编号}]({链接}), [#{编号}]({链接}) + +### Q{N}: {问题}? + +**A:** {答案} + +> 📎 来源 Issue: [#{编号}]({链接}) + +--- + +> 如无常见使用问题,本章标注"暂无常见使用问题"。 + +--- + +> 💡 本文档由 gitlink-faq 自动生成,建议每 1-2 周更新。 +> 🔗 提交新 Issue?请先确认是否已被收录。 diff --git a/skills/gitlink-faq/examples/weekly-faq-refresh-workflow.md b/skills/gitlink-faq/examples/weekly-faq-refresh-workflow.md new file mode 100644 index 00000000..d6a6cf7f --- /dev/null +++ b/skills/gitlink-faq/examples/weekly-faq-refresh-workflow.md @@ -0,0 +1,85 @@ +# 每周刷新 Issue 知识库示例 + +> 端到端演示:定期归纳已关闭 Issue,更新知识库 Wiki。 + +## 场景 + +gitlink-cli 项目维护者,本周关闭了 20 个 Issue,想更新知识库。 + +## 完整对话流程 + +### 触发 + +``` +用户: 帮我整理这周关闭的 Issue,更新知识库 + +AI: 好的,先采集最近关闭的 Issue。 +``` + +### Step 1-2: 采集 + 筛选 + +```bash +gitlink-cli issue +list --state closed --limit 100 --format json +``` + +``` +AI 采集到 20 个已关闭 Issue: +- 排除 5 个测试 Issue +- 剩余 15 个有效 Issue,读取详情中... +``` + +### Step 3-4: 分类 + 聚类 + +``` +AI 展示分析结果: + +📊 Issue 分类结果(共 15 条有效) + +类型分布: +| 类型 | 数量 | 占比 | +|------|------|------| +| 🐛 Bug 报告 | 8 | 53% | +| 💡 功能请求 | 5 | 33% | +| 📖 使用问题 | 2 | 13% | + +─────────────── + +🐛 Bug 高频模块: +| 模块 | Bug 数 | 典型症状 | +|------|--------|----------| +| Issue/PR 数据展示 | 4 | view 命令返回字段与网页不一致 | +| 命令执行 | 2 | 特定参数下命令静默失败 | +| 平台兼容 | 2 | Windows 下行为异常 | + +💡 功能请求热度: +| 领域 | 请求数 | 用户期望 | +|------|--------|----------| +| API 查询增强 | 3 | 支持更丰富的查询和字段返回 | + +📖 使用问题(2 条): +- 安装后如何配置环境变量? +- API 命令占位符怎么用? +``` + +### Step 5: 生成并确认 + +``` +AI 生成知识库 Markdown,展示前几段预览... + +用户: 可以,发布到 Wiki + +AI: 好的,更新 Wiki 页面... +``` + +### Step 6: 发布 + +```bash +gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base.md +``` + +``` +AI: ✅ 知识库已更新! +- Wiki 页面: Issue-知识库 +- 本次新增: 15 条 Issue → 6 个聚类 +- 下次建议: 2 周后刷新 +``` diff --git a/skills/gitlink-faq/references/gitlink-faq-cluster.md b/skills/gitlink-faq/references/gitlink-faq-cluster.md new file mode 100644 index 00000000..1dd20403 --- /dev/null +++ b/skills/gitlink-faq/references/gitlink-faq-cluster.md @@ -0,0 +1,114 @@ +# gitlink-faq 分类与聚类 + +> 本文档说明 AI 如何对 Issue 先分类(Bug/功能请求/使用问题),再在同一类型内聚类。 + +## 分析前提 + +**聚类仅基于 `subject` + `description` 两个字段**。GitLink API 不支持读取 Issue 评论(journals),无法获取讨论/解决方案。但优秀的 description 往往包含:复现步骤、环境信息、修复建议、详细场景描述——这些都是高质量聚类的基础。 + +## 两步流程 + +``` +┌─────────────────────────────────────────┐ +│ Step 1: 类型分类 │ +│ 每条 Issue → AI 判断类型 │ +│ Bug / Feature Request / Usage Question │ +│ 不确定的归入"其他"但保留,不丢弃 │ +└──────────────────┬──────────────────────┘ + ▼ +┌─────────────────────────────────────────┐ +│ Step 2: 类型内聚类 │ +│ Bug → 按出问题的模块分类 │ +│ Feature → 按功能领域分类 │ +│ Usage → 按操作场景分类 │ +└─────────────────────────────────────────┘ +``` + +## Step 1: 类型分类 + +### 分类 Prompt + +``` +你正在分析一个项目的已关闭 Issue。请对每条 Issue 判断它属于以下哪种类型: + +类型定义: +- bug: 描述异常行为、报错、行为与预期不符、数据缺失/错误 +- feature: 建议新增功能、增强现有能力、改进体验 +- question: 不知道如何使用、配置不清楚、询问是否支持某能力 +- other: 不属于以上三类(如测试、讨论、公告) + +返回 JSON 数组: +[{ + "issue_number": N, + "subject": "标题", + "type": "bug|feature|question|other", + "reason": "一句话判断依据" +}] +``` + +### 分类规则 + +| 类型 | 判断信号 | 反例(容易误判) | +|------|----------|-----------------| +| **bug** | 含"报错""不生效""异常""不一致""缺失""无法"等 | "希望能 xx"是 feature 不是 bug | +| **feature** | 含"希望""建议""能否支持""加一个""要是能"等 | "xx 不支持"可能是 question | +| **question** | 含"怎么""如何""能不能""是否支持"等,且是咨询性质 | "xx 报错怎么办"→ 先确认是不是 bug | +| **other** | 标题含"test""测试""讨论""收集"等 | 不确定时归为 other | + +## Step 2: 类型内聚类 + +### Bug 聚类 + +按**出问题的模块/组件/功能**归类,找出高频 Bug 模式。 + +聚类维度: +- 影响的是哪个命令/接口(如 `issue +view`、`pr +list`、`api` 命令) +- 问题类型是否相同(数据显示错误 ×4 / 命令执行失败 ×2 / 平台兼容 ×1) +- Bug 之间是否存在共同根因 + +输出格式: + +```json +{ + "module": "Issue/PR 数据展示", + "bug_count": 4, + "pattern": "CLI 返回数据字段与网页端不一致或字段缺失", + "affected_issues": [5, 7, 15, 18], + "typical_symptom": "使用 view 命令查看详情时,部分字段(如关闭时间、描述等)缺失或与网页端不一致" +} +``` + +### 功能请求聚类 + +按**请求的功能领域**归类,找出用户需求热度。 + +聚类维度: +- 请求的是哪个能力方向(API 增强 / 命令扩展 / 平台支持) +- 是否指向同一个需求的不同表述 +- 是否有用户点赞/讨论热度叠加 + +输出格式: + +```json +{ + "feature_area": "API 查询能力增强", + "request_count": 3, + "pattern": "用户希望 API 支持更丰富的查询和操作", + "affected_issues": [9, 14, 21], + "common_ask": "支持按序号查询、返回完整时间字段、读取仓库文件" +} +``` + +### 使用问题聚类(传统 Q&A) + +与传统 FAQ 一致:按操作场景归类,提炼"问题 → 答案"。 + +仅当同类 ≥ 2 条时生成 Q&A 条目。 + +## 批次合并 + +多批次处理后的合并规则: + +1. 同类型的相同模块/领域 → 合并,更新 issue_count +2. 跨类型的关联 Issue 标注引用(如一个 Bug 可能由某个 Feature Request 修复) +3. 最终按 `bug_count` / `request_count` 降序排列 diff --git a/skills/gitlink-faq/references/gitlink-faq-collect.md b/skills/gitlink-faq/references/gitlink-faq-collect.md new file mode 100644 index 00000000..941f6de1 --- /dev/null +++ b/skills/gitlink-faq/references/gitlink-faq-collect.md @@ -0,0 +1,81 @@ +# gitlink-faq 数据采集 + +> 本文档详细说明 FAQ 生成时 Issue 数据的采集策略和参数。 + +## 数据源 + +| 数据 | 命令 | 说明 | +|------|------|------| +| Issue 列表(open) | `issue +list --state open --limit 100 --format json` | 仍开放的 Issue | +| Issue 列表(closed) | `issue +list --state closed --limit 100 --format json` | 已关闭的 Issue | +| Issue 详情 | `issue +view --number N --format json` | 含标题、描述、journals(评论历史) | + +> **关键认知**:GitLink 平台很多已解决的 Issue 不会被及时设为"关闭"状态,存在延迟甚至从未更改状态。因此必须**同时采集 open 和 closed 两份列表**,合并去重后才能得到完整的可分析 Issue 集合。用 `issue +view` 读取的 `journals`(评论讨论历史)比 `status` 字段更能判断一个 Issue 是否"已解决"。 + +## 筛选策略 + +### 有价值 vs 无价值 Issue + +采集后需筛选。注意:GitLink API **不支持读取 Issue 评论(journals)**,筛选只能基于 subject + description。 + +**宽松筛选原则**(只排除明确无价值的): + +| 类型 | 是否纳入 | 原因 | +|------|----------|------| +| 有 description 的 Issue | ✅ 纳入 | description 可能非常详细 | +| 仅有标题无 description | ✅ 纳入 | 标题本身有价值信息 | +| 功能请求 | ✅ 纳入 | 反映用户需求优先级 | +| 标题含 `[test]`/`测试` | ❌ 排除 | 纯测试数据 | +| 标题为空或纯占位符 | ❌ 排除 | 无有效信息 | + +> 不再排除"功能请求"和"仅有标题"的 Issue。没有评论数据的情况下,最大化保留所有可分析的 Issue。 + +### 分批采集 + +``` +Issue 总量 采集策略 +───────── ───────── +< 20 全部采集,逐个读详情(含 journals) +20-50 全部采集,按标题粗筛后读重点 Issue 详情 +50-100 分批采集(每批50),先按标题粗筛 +> 100 取最近活跃的 100 个,优先高参与度的 +``` + +### 参与度筛选 + +优先采集"高参与度"的 Issue(更有分析价值): +- **journals 非空**(有人讨论过)——这是最重要的筛选信号,空 journals 的 Issue 分析价值极低 +- journals 中包含维护者回复(优先提取作为答案/修复方案) +- 评论数量 ≥ 2 + +### API 限制:无法读取评论 + +`issue +view` 只返回 `comment_journals_count`(评论数),不返回评论内容。`GET /v1/.../issues/{N}/journals` 端点返回 HTML 而非 JSON,无法通过 API 获取评论正文。 + +因此分析只能基于 `subject` + `description` 两个字段。这也是筛选规则放宽的原因——没有评论作为补充信息,凭标题和描述能分析到的内容更有限,需要尽可能保留更多 Issue 来保证覆盖度。 + +## 输出数据格式 + +采集后整理为以下结构供聚类使用: + +```json +[ + { + "number": 142, + "subject": "安装后运行报 command not found", + "description": "按照 README 安装后,终端输入 gitlink-cli 提示...", + "labels": ["bug", "installation"], + "journal_count": 5, + "last_comment_author": "maintainer", + "resolution": "需要将 ~/.local/bin 加入 PATH" + } +] +``` + +## API 注意事项 + +- `issue +list` 的 `--limit` 最大 200,超出需分页(`--page` 参数) +- **`--state` 参数不可靠**:与 PR 列表类似,`--state` 参数可能不严格过滤列表(返回数据中 `closed_count` 才是真实统计)。必须同时拉取 open 和 closed 两份列表并合并去重。 +- `issue +view` 的 `journals` 字段包含完整评论历史,是判断解决过程的关键 +- `journals` 中的 `body` 字段是评论的纯文本内容,`author.login` 是评论者 +- 大量请求时建议用 `--debug` 查看实际请求 URL,确认分页参数正确 diff --git a/skills/gitlink-faq/references/gitlink-faq-detect.md b/skills/gitlink-faq/references/gitlink-faq-detect.md new file mode 100644 index 00000000..9f1851e5 --- /dev/null +++ b/skills/gitlink-faq/references/gitlink-faq-detect.md @@ -0,0 +1,129 @@ +# gitlink-faq 重复检测 + +> 本文档说明如何处理新 Issue 的重复检测——对比已有 FAQ 和历史 Issue。 + +## 检测流程 + +``` +┌────────────────────────────────────────────┐ +│ Step 1: 确定搜索目标 │ +│ 编号 → issue +view 获取目标 │ +│ 关键词 → 进入全量搜索模式 │ +└────────────────┬───────────────────────────┘ + ▼ +┌────────────────────────────────────────────┐ +│ Step 2: 拉取全量列表 │ +│ issue +list --state open │ +│ issue +list --state closed │ +│ 标题匹配筛选候选 Issue │ +└────────────────┬───────────────────────────┘ + ▼ +┌────────────────────────────────────────────┐ +│ Step 3: 自动读详情(不需等用户确认) │ +│ 对每条候选 → issue +view --number N │ +│ 提取: subject + description + journals │ +└────────────────┬───────────────────────────┘ + ▼ +┌────────────────────────────────────────────┐ +│ Step 4: 分析 & 输出结论 │ +│ 综合标题+描述+journals 给出: │ +│ - 核心讨论内容摘要 │ +│ - 维护者是否有回复/方案 │ +│ - 相关度判定 │ +└────────────────┬───────────────────────────┘ + ▼ +┌────────────────────────────────────────────┐ +│ Step 5: 用户确认后执行写操作(可选) │ +│ > 0.85 → comment + label │ +│ 0.6-0.85 → comment only │ +│ < 0.6 → 无需操作 │ +└────────────────────────────────────────────┘ +``` + +## 相似度匹配 Prompt + +``` +你正在判断一个新提交的 Issue 是否与已有问题重复。 + +## 新 Issue +标题: {subject} +描述: {description} + +## 候选匹配列表 +{候选列表,每条含: 来源、标题、摘要} + +请对每个候选给出 0-1 的相似度评分: +- > 0.85: 问的是同一个问题(只是表述不同) +- 0.6-0.85: 有关联但不是同一个问题(如"登录报 401" + 和"Token 配置") +- < 0.6: 无关 + +返回 JSON 数组,按相似度降序排列。 +``` + +## 输出 JSON + +```json +{ + "target_issue": { + "number": 245, + "title": "登录页面打不开", + "description": "点击登录按钮后页面白屏..." + }, + "matches": [ + { + "source": "FAQ", + "entry": "Q3: 登录失败或提示 401 错误怎么处理?", + "similarity": 0.92, + "level": "high_duplicate" + }, + { + "source": "issue", + "number": 142, + "title": "登录页面显示空白", + "summary": "用户反馈登录页白屏,最终确认是浏览器缓存问题", + "similarity": 0.88, + "level": "high_duplicate" + }, + { + "source": "issue", + "number": 178, + "title": "Token 刷新机制咨询", + "summary": "询问 Token 有效期和刷新策略", + "similarity": 0.65, + "level": "related" + } + ], + "recommendation": "high_duplicate", + "top_match_similarity": 0.92 +} +``` + +## 评论模板 + +### 高度重复(similarity > 0.85) + +``` +你好!检测到你的问题与已有内容高度相似: + +- 📖 [FAQ - {条目名}]({FAQ 链接}) +- 🔗 相关 Issue: #{编号} - {标题} + +建议先查看以上内容。如果无法解决你的问题,请补充更多细节(如错误日志、操作步骤),我们会进一步排查。 +``` + +### 可能相关(0.6 ~ 0.85) + +``` +你好!你的问题可能与以下内容相关,供参考: + +- {匹配条目列表} + +如果这些不解决你的问题,请提供更多上下文。 +``` + +## 注意事项 + +- **不要误判**:问题表述相似但根因不同(如"打不开"可能是网络问题也可能是代码 bug),相似度 < 0.85 时只建议参考不打标签 +- **同一用户的多条 Issue**:如果同一用户就同一问题连续发 Issue,先合并讨论再判断 +- **对事不对人**:评论始终友好,引导用户找到答案而非指责 diff --git a/skills/gitlink-faq/references/gitlink-faq-generate.md b/skills/gitlink-faq/references/gitlink-faq-generate.md new file mode 100644 index 00000000..7f4d6260 --- /dev/null +++ b/skills/gitlink-faq/references/gitlink-faq-generate.md @@ -0,0 +1,98 @@ +# gitlink-faq 文档生成 + +> 如何将分类+聚类结果组织为结构化知识库 Markdown。 + +## 生成原则 + +- **按类型分章节**:Bug → 功能请求 → 使用问题,每章独立 +- **按热度排序**:同类内 Issue 数量多的排在前面 +- **数据不足时省略**:某类型 < 2 条时标注"暂无足够数据",不强行展开 +- **来源可追溯**:每条结论后附来源 Issue 编号 + +## 文档结构 + +参考 [`examples/faq-template.md`](../examples/faq-template.md)。 + +```markdown +# 📊 Issue 知识库 + +> 自动生成 | 数据来源:已关闭 Issue({N} 条有效) +> 更新时间:{DATE} +> 项目:{OWNER}/{REPO} + +## 📂 概览 + +| 类型 | 数量 | 聚类数 | +|------|------|--------| +| 🐛 Bug 报告 | {N} | {M} 个模块 | +| 💡 功能请求 | {N} | {M} 个领域 | +| 📖 使用问题 | {N} | {M} 个主题 | + +--- + +## 🐛 Bug 高频模块 + +### {模块名}({N} 个 Bug) + +**典型症状**: {描述} +**涉及 Issue**: [#{编号}]({链接}), [#{编号}]({链接}) +**已知修复**: {如有则写,无则写"暂未统一修复"} + +### {模块名}({N} 个 Bug) + +... + +> 如该类 < 2 条,标注"暂无高频 Bug 模式"。 + +--- + +## 💡 功能请求热度 + +### {功能领域}({N} 个请求)🔥 + +**用户期望**: {一句话总结} +**涉及 Issue**: [#{编号}]({链接}), [#{编号}]({链接}) + +### {功能领域}({N} 个请求) + +... + +> 如该类 < 2 条,标注"暂无热门功能请求"。 + +--- + +## 📖 常见使用问题 + +### Q{N}: {问题}? + +**A:** {答案} + +> 📎 来源 Issue: [#{编号}]({链接}), [#{编号}]({链接}) + +... + +> 如该类 < 2 条,标注"暂无常见使用问题"。 + +--- + +> 💡 本文档由 gitlink-faq 自动生成,建议每 1-2 周更新一次。 +``` + +## 热度标注 + +| Issue 数 | 热度 | +|----------|------| +| ≥ 5 | 🔥🔥🔥 高频 | +| 3-4 | 🔥🔥 常见 | +| 2 | 🔥 偶发 | +| 1 | 不纳入(标注为单次事件) | + +## 答案/解决状态标注 + +对于 Bug 和功能请求,标注其当前状态: + +| 状态 | 标注 | 条件 | +|------|------|------| +| ✅ 已修复/已实现 | 绿色标记 | Issue 关闭且 journals 中有修复记录 | +| 🔧 部分修复 | 黄色标记 | 有修复但不完整 | +| ❓ 状态不明 | 无标记 | journals 为空或无明确解决记录 | diff --git a/skills/gitlink-faq/references/gitlink-faq-publish.md b/skills/gitlink-faq/references/gitlink-faq-publish.md new file mode 100644 index 00000000..02f5eb1a --- /dev/null +++ b/skills/gitlink-faq/references/gitlink-faq-publish.md @@ -0,0 +1,58 @@ +# gitlink-faq Wiki 发布 + +> 本文档说明如何将生成的 FAQ 内容发布到 GitLink 项目 Wiki。 + +## 发布命令 + +### 首次创建知识库页面 + +```bash +gitlink-cli wiki +create \ + --title "Issue-知识库" \ + --file ./issue-knowledge-base.md \ + --message "自动生成:从已关闭 Issue 归纳分类" +``` + +### 更新已有知识库页面 + +```bash +# 预览变更 +gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base.md --dry-run + +# 覆盖更新 +gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base.md +``` + +### 检查知识库是否存在 + +```bash +# 列出所有 Wiki 页面 +gitlink-cli wiki +list --format json + +# 查看知识库内容 +gitlink-cli wiki +view --title "Issue-知识库" --format json +``` + +## 发布检查清单 + +在 `wiki +create` 或 `wiki +update` 之前: + +- [ ] FAQ 内容已展示给用户并获得确认 +- [ ] `--dry-run` 已通过 +- [ ] Markdown 格式正确(代码块、链接、表格) +- [ ] 来源 Issue 链接有效 +- [ ] 不存在敏感信息(Token、密码等) + +## Wiki API 注意事项 + +- Wiki 使用独立的 **Gateway API**(`https://gateway.gitlink.org.cn/api`),不走主 API +- 内容自动 base64 编码,CLI 已处理 +- `project_id` 会自动解析并缓存 +- 如果更新失败(页面不存在),改用 `wiki +create` + +## 发布后 + +发布完成后告知用户: +- Wiki 页面链接 +- FAQ 条目数量统计 +- 建议的刷新频率(每 1-2 周) From 601e566bace59f0e55ba5279bd97e8ae8e45c3f6 Mon Sep 17 00:00:00 2001 From: camelliamc <16583354+camelliamc@user.noreply.gitee.com> Date: Tue, 23 Jun 2026 21:16:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=20docs(skills):=20=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=20repo/issue/wiki=20skill=20=E6=96=87?= =?UTF-8?q?=E6=A1=A3=EF=BC=8C=E8=A1=A5=E5=85=A8=E6=96=B0=E5=A2=9E=20shortc?= =?UTF-8?q?ut=20=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shortcuts/wiki/CHANGELOG.md | 2 + skills/gitlink-faq/SKILL.md | 28 +++++---- skills/gitlink-issue/SKILL.md | 103 +++++++++++++++++++++++++--------- skills/gitlink-repo/SKILL.md | 65 ++++++++++++++++----- skills/gitlink-wiki/SKILL.md | 12 +++- 5 files changed, 156 insertions(+), 54 deletions(-) diff --git a/shortcuts/wiki/CHANGELOG.md b/shortcuts/wiki/CHANGELOG.md index c604c341..0b1ff302 100644 --- a/shortcuts/wiki/CHANGELOG.md +++ b/shortcuts/wiki/CHANGELOG.md @@ -2,6 +2,8 @@ ## 2026-05-31 新增 `wiki +lint` 文档质量检查命令 +> **注意:`+lint` 命令当前仅在本地编译版本中可用**(全局安装的 `gitlink-cli` 暂未包含)。需先 `go build -o gitlink-cli.exe .` 然后使用 `./gitlink-cli.exe wiki +lint`。 + ### 使用方法 ```bash diff --git a/skills/gitlink-faq/SKILL.md b/skills/gitlink-faq/SKILL.md index 99443b4e..ef438f79 100644 --- a/skills/gitlink-faq/SKILL.md +++ b/skills/gitlink-faq/SKILL.md @@ -1,7 +1,7 @@ --- name: gitlink-faq -version: 1.2.0 -description: "Issue 知识库:从项目 Issue 自动分类(Bug/功能请求/使用问题),按类型归纳聚类,生成结构化知识库发布到 Wiki;增量更新已有知识库;检测新 Issue 是否与已有问题重复。当用户需要整理 Issue、归纳 Issue、总结常见问题/Bug、建立知识库、更新知识库、检查重复 Issue、查重时触发。" +version: 1.3.0 +description: "Issue 知识库:从项目 Issue 自动分类(Bug/功能请求/使用问题),按类型归纳聚类,生成结构化知识库发布到 Wiki;增量更新已有知识库;检测新 Issue 是否与已有问题重复。当用户需要整理 Issue、归纳 Issue、总结常见问题/Bug、建立知识库、更新知识库、检查重复 Issue、查重时触发。通用 Issue 操作(创建/查看/更新/关闭/评论等)请使用 gitlink-issue skill。" metadata: requires: bins: ["gitlink-cli"] @@ -225,10 +225,15 @@ gitlink-cli issue +view --number N --format json 如果是查重场景且判定高度重复,用户确认后执行: ```bash -gitlink-cli issue +comment --number N --body "..." -gitlink-cli issue +label-add --number N --labels "duplicate" +# 添加评论(使用 Issue ID,参见 gitlink-issue skill) +gitlink-cli issue +comment --number N --body "此 Issue 与 #M 内容重复,建议..." + +# 打重复标签(使用项目内编号,批量操作) +gitlink-cli issue +batch-label --label duplicate --numbers N,M ``` +> 通用 Issue 操作(创建、查看、更新、关闭、评论等)参见 [`../gitlink-issue/SKILL.md`](../gitlink-issue/SKILL.md)。 + --- ## 模式 C:Wiki 增量更新 @@ -295,16 +300,18 @@ gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base ## 命令速查 +本 skill 只涉及知识库分析相关的命令。通用 Issue 操作(创建、查看、更新、关闭、批量操作等)统一使用 [`gitlink-issue`](../gitlink-issue/SKILL.md) skill。 + | 命令 | 用途 | 模式 | |------|------|------| | `issue +list --state open --limit 100 --format json` | 获取 open Issue 列表 | A / C | | `issue +list --state closed --limit 100 --format json` | 获取 closed Issue 列表 | A / C | | `issue +view --number N --format json` | 读取单个 Issue 详情 | A / B / C | -| `wiki +view --title "Issue-知识库" --format json` | 查看已有知识库内容 | B / C | -| `wiki +create --title "Issue-知识库" --file ./xxx.md` | 首次创建知识库页面 | A | -| `wiki +update --title "Issue-知识库" --file ./xxx.md` | 增量更新知识库页面 | A / C | -| `issue +comment --number N --body "..."` | 添加评论引导用户 | B | -| `issue +label-add --number N --labels "duplicate"` | 标记重复 Issue | B | +| `issue +comment --number N --body "..."` | 查重时添加评论引导用户 | B | +| `issue +batch-label --label duplicate --numbers N,M` | 查重时批量标记重复 | B | +| `wiki +view --title "Issue-知识库" --format json` | 查看已有知识库内容 | C | +| `wiki +create --title "Issue-知识库" --file ./xxx.md` | 首次创建知识库 Wiki 页面 | A | +| `wiki +update --title "Issue-知识库" --file ./xxx.md` | 增量更新知识库 Wiki 页面 | A / C | --- @@ -312,7 +319,8 @@ gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base - `issue +list` 的 `--state` 参数**不可靠**(与 PR 列表同款问题),返回列表可能包含所有状态。因此必须同时拉 open + closed 两份列表合并去重。 - **`issue +view` 不返回 journals 内容**:只有 `comment_journals_count`(评论数量),无法通过 API 读取实际评论。`GET /v1/.../issues/{N}/journals` 返回 HTML 而非 JSON。分析只能依靠 `subject` + `description`。 -- Wiki 内容为 base64 编码传输,CLI 自动处理编解码。Wiki 通过 Gateway API。 +- **`issue +label-add` API 返回 404**:GitLink 平台 `POST /v1/.../issues/{N}/labels` 端点不可用。打标签请改用 `issue +batch-label`(走 `updateIssueField` 而非 labels API)。 +- `wiki +view` Gateway API 可能返回 404(已知问题),但 `wiki +create` / `wiki +update` 写入正常。 --- diff --git a/skills/gitlink-issue/SKILL.md b/skills/gitlink-issue/SKILL.md index 1938da68..1d4adc95 100644 --- a/skills/gitlink-issue/SKILL.md +++ b/skills/gitlink-issue/SKILL.md @@ -1,7 +1,7 @@ --- name: gitlink-issue -version: 2.0.0 -description: "Issue 管理:创建、查看、更新、关闭/批量关闭 Issue,添加评论。当用户需要操作 GitLink Issue 时触发。" +version: 3.0.0 +description: "Issue 全生命周期管理:创建/查看/更新/关闭/重开 Issue、添加评论、标签操作(添加/移除/查看)、批量操作(创建/关闭/标签/状态/优先级/负责人)。当用户需要操作 GitLink Issue 时触发。" metadata: requires: bins: ["gitlink-cli"] @@ -18,42 +18,75 @@ metadata: ## Shortcuts +### 查询 + | Shortcut | 说明 | 需要认证 | |----------|------|----------| -| `issue +list` | Issue 列表 | 否(公开项目) | -| `issue +create` | 创建 Issue | 是 | -| `issue +view` | Issue 详情 | 否(公开项目) | -| `issue +update` | 更新 Issue | 是 | +| `issue +list` | Issue 列表(支持 `--state open/closed`、`--limit`、`--page`) | 否(公开项目) | +| `issue +view` | Issue 详情(含 description、状态、优先级等) | 否(公开项目) | +| `issue +label-list` | 查看 Issue 上的标签 | 否(公开项目) | + +### 单个操作 + +| Shortcut | 说明 | 需要认证 | +|----------|------|----------| +| `issue +create` | 创建 Issue(`--title` + `--body`) | 是 | +| `issue +update` | 更新 Issue 标题/描述 | 是 | | `issue +close` | 关闭 Issue | 是 | -| `issue +batch-close` | 批量关闭 Issue,支持 `--dry-run` 预览 | 是(dry-run 不写入) | +| `issue +reopen` | 重新打开已关闭的 Issue | 是 | | `issue +comment` | 添加评论 | 是 | +| `issue +label-add` | 添加标签(⚠️ API 可能 404,建议用 `+batch-label`) | 是 | +| `issue +label-remove` | 移除标签 | 是 | + +### 批量操作 + +| Shortcut | 说明 | 支持 dry-run | +|----------|------|-------------| +| `issue +batch-create` | 批量创建 Issue(`--titles` 逗号分隔 或 `--from CSV`) | ✅ | +| `issue +batch-close` | 批量关闭 Issue | ✅ | +| `issue +batch-label` | 批量修改标签:bug, feature, support, doc, test, duplicate, question | ✅ | +| `issue +batch-status` | 批量修改状态:new, in-progress, resolved, closed, rejected | ✅ | +| `issue +batch-priority` | 批量修改优先级:low, normal, high, urgent | ✅ | +| `issue +batch-assign` | 批量修改负责人(`--assignee` 登录名或用户 ID) | ✅ | + +> 批量操作均支持 `--numbers 1,2,3` 或 `--from file.csv` 指定目标 Issue。 ## 使用示例 ```bash +# === 查询 === # 列出 Issue gitlink-cli issue +list --owner Gitlink --repo forgeplus --state open - -# 创建 Issue -gitlink-cli issue +create --owner myuser --repo myrepo --title "Bug: 登录失败" --body "复现步骤:..." - -# 查看 Issue 详情(使用网页可见的 Issue 编号) +# 分页拉取 +gitlink-cli issue +list --owner Gitlink --repo forgeplus --state open --limit 20 --page 2 +# 查看详情(使用网页 URL 中的 Issue 编号) gitlink-cli issue +view --owner Gitlink --repo forgeplus --number 4 +# === 单个操作 === +# 创建 Issue +gitlink-cli issue +create --owner myuser --repo myrepo --title "Bug: 登录失败" --body "复现步骤:..." # 更新 Issue gitlink-cli issue +update --number 4 --title "新标题" --body "更新描述" - -# 关闭 Issue +# 关闭 / 重开 gitlink-cli issue +close --number 4 - -# 预览批量关闭 Issue,不修改数据 -gitlink-cli issue +batch-close --owner myuser --repo myrepo --numbers 123,124 --dry-run - -# 从 CSV 文件批量关闭 Issue -gitlink-cli issue +batch-close --owner myuser --repo myrepo --from issues.csv - +gitlink-cli issue +reopen --number 4 # 添加评论 gitlink-cli issue +comment --number 4 --body "已修复,请验证" + +# === 批量操作 === +# 批量创建 +gitlink-cli issue +batch-create --titles "修复登录Bug,新增导出功能,优化首页加载" +# 批量关闭(先 dry-run 预览) +gitlink-cli issue +batch-close --numbers 1,2,3 --dry-run +gitlink-cli issue +batch-close --numbers 1,2,3 +# 批量打标签 +gitlink-cli issue +batch-label --label duplicate --numbers 3,4 +# 批量改状态 +gitlink-cli issue +batch-status --state resolved --numbers 1,2,3 +# 批量改优先级 +gitlink-cli issue +batch-priority --priority high --numbers 5,6 +# 批量分配 +gitlink-cli issue +batch-assign --assignee zzx-coder --numbers 7,8 ``` ## Raw API 补充 @@ -80,17 +113,31 @@ gitlink-cli api POST /:owner/:repo/issues/series_update --body '{"ids":[1,2,3]," ## API 注意事项 - **Issue 编号(`--number`)是网页 URL 中看到的序号**(如 `issues/4` 中的 `4`),不是数据库内部 ID -- **批量关闭使用 `--numbers`,同样传网页 URL 中的 Issue 编号**,不是数据库内部 ID +- **批量操作使用 `--numbers`,同样传网页 URL 中的 Issue 编号**,不是数据库内部 ID - Issue 操作使用 v1 API(`/api/v1/`),支持按 Issue 编号查询和操作 - **创建 Issue 时 CLI 会自动设置 `status_id: 1`(新增)和 `priority_id: 2`(正常)** - **更新/关闭 Issue 时必须保留当前 `subject` 和 `description`**,即使只修改状态(CLI 会先读取当前 Issue 并自动带回) - v1 API 写操作必须使用 `access_token`(非 `token`)认证,CLI 已自动处理 +- **`issue +label-add` / `+label-remove` / `+label-list` 的 labels API(`POST /v1/.../issues/{N}/labels`)可能返回 404**。打标签请优先使用 `issue +batch-label`,它走 `updateIssueField` 而非 labels API ## Issue 状态映射(status_id) -| status_id | 名称 | 说明 | -|-----------|------|------| -| 1 | 新增 | 新建 Issue 的默认状态 | -| 2 | 正在解决 | 处理中 | -| 3 | 已解决 | 已修复 | -| 5 | 关闭 | 关闭(`+close` 命令使用此值) | +| status_id | 名称 | `+batch-status --state` 对应值 | +|-----------|------|-------------------------------| +| 1 | 新增 | `new` | +| 2 | 正在解决 | `in-progress` | +| 3 | 已解决 | `resolved` | +| 5 | 关闭 | `closed` | +| 6 | 已拒绝 | `rejected` | + +## Issue 标签映射(tracker_id) + +| 标签 | `+batch-label --label` 对应值 | +|------|------------------------------| +| Bug | `bug` | +| 功能 | `feature` | +| 支持 | `support` | +| 文档 | `doc` | +| 测试 | `test` | +| 重复 | `duplicate` | +| 问题 | `question` | diff --git a/skills/gitlink-repo/SKILL.md b/skills/gitlink-repo/SKILL.md index 9fabb8eb..1f0d437f 100644 --- a/skills/gitlink-repo/SKILL.md +++ b/skills/gitlink-repo/SKILL.md @@ -1,7 +1,7 @@ --- name: gitlink-repo -version: 1.0.0 -description: "仓库管理:创建、查看、Fork、删除仓库,查看分支、提交、贡献者等。当用户需要操作 GitLink 仓库时触发。" +version: 2.0.0 +description: "仓库全生命周期管理:创建/查看/Fork/删除/更新仓库、成员管理(邀请/移除/查看)、批量操作(创建/更新/邀请/移除)。当用户需要操作 GitLink 仓库时触发。" metadata: requires: bins: ["gitlink-cli"] @@ -18,35 +18,72 @@ metadata: ## Shortcuts +### 查询 + | Shortcut | 说明 | 需要认证 | |----------|------|----------| -| `repo +list` | 仓库列表 | 否(公开项目) | +| `repo +list` | 仓库列表(`--user` 指定用户) | 否(公开项目) | | `repo +info` | 仓库详情 | 否(公开项目) | -| `repo +create` | 创建仓库 | 是 | +| `repo +members` | 仓库成员列表(`--page`、`--limit` 分页) | 否(公开项目) | + +### 单个操作 + +| Shortcut | 说明 | 需要认证 | +|----------|------|----------| +| `repo +create` | 创建仓库(`--name`、`--description`、`--private`) | 是 | | `repo +fork` | Fork 仓库 | 是 | -| `repo +delete` | 删除仓库 | 是 | +| `repo +delete` | 删除仓库(⚠️ 不可逆) | 是 | +| `repo +update` | 更新仓库设置(`--description`、`--private`) | 是 | +| `repo +invite` | 邀请成员(`--user-id`) | 是 | +| `repo +remove-member` | 移除成员(`--user-id`) | 是 | + +### 批量操作 + +| Shortcut | 说明 | 支持 dry-run | +|----------|------|-------------| +| `repo +batch-create` | 批量创建仓库(`--names` 逗号分隔 或 `--from CSV`) | ✅ | +| `repo +batch-update` | 批量更新仓库设置(`--description`、`--private`/`--public`) | ✅ | +| `repo +batch-invite` | 批量邀请成员(`--users` 逗号分隔 或 `--from CSV`) | ✅ | +| `repo +batch-remove` | 批量移除成员(`--users` 逗号分隔 或 `--from CSV`) | ✅ | + +> 批量操作均支持 `--names repo-a,repo-b` 或 `--users 1,2,3` 或 `--from file.csv` 三种输入方式。 ## 使用示例 ```bash +# === 查询 === # 查看仓库信息 gitlink-cli repo +info --owner Gitlink --repo forgeplus - -# 在 git 仓库目录下自动解析 -cd ~/my-project -gitlink-cli repo +info - -# 列出用户的仓库 +# 列出用户仓库 gitlink-cli repo +list --user zhangsan +# 查看成员 +gitlink-cli repo +members --owner myuser --repo myrepo +# === 单个操作 === # 创建仓库 gitlink-cli repo +create --name my-project --description "项目描述" - +# 创建私有仓库 +gitlink-cli repo +create --name my-project --private # Fork 仓库 gitlink-cli repo +fork --owner Gitlink --repo forgeplus - -# 删除仓库(⚠️ 危险操作) +# 更新仓库设置 +gitlink-cli repo +update --owner myuser --repo myrepo --description "新描述" +gitlink-cli repo +update --owner myuser --repo myrepo --private true +# 邀请/移除成员 +gitlink-cli repo +invite --owner myuser --repo myrepo --user-id 12345 +gitlink-cli repo +remove-member --owner myuser --repo myrepo --user-id 12345 +# 删除仓库(⚠️ 不可逆,务必确认) gitlink-cli repo +delete --owner myuser --repo old-project + +# === 批量操作 === +# 批量创建 +gitlink-cli repo +batch-create --names repo-a,repo-b,repo-c --private +# 批量更新(先 dry-run 预览) +gitlink-cli repo +batch-update --names repo-a,repo-b --description "批量更新描述" --dry-run +gitlink-cli repo +batch-update --names repo-a,repo-b --description "批量更新描述" +# 批量管理成员 +gitlink-cli repo +batch-invite --users 111,222,333 --dry-run +gitlink-cli repo +batch-remove --users 111,222 --dry-run ``` ## Raw API 补充 diff --git a/skills/gitlink-wiki/SKILL.md b/skills/gitlink-wiki/SKILL.md index eec50282..0eb61b44 100644 --- a/skills/gitlink-wiki/SKILL.md +++ b/skills/gitlink-wiki/SKILL.md @@ -1,7 +1,7 @@ --- name: gitlink-wiki -version: 1.0.0 -description: "Wiki 管理:查看、创建、更新、删除 Wiki 页面。当用户需要操作 GitLink Wiki 时触发。" +version: 1.1.0 +description: "Wiki 管理:查看、创建、更新、删除 Wiki 页面、质量检查(lint)。当用户需要操作 GitLink Wiki 时触发。" metadata: requires: bins: ["gitlink-cli"] @@ -13,6 +13,7 @@ metadata: **CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。** **CRITICAL — 所有 Shortcuts 在执行写入/删除操作前,务必先确认用户意图。** **CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`(GitHub CLI)操作 GitLink 资源。`gh` 仅适用于 GitHub 平台。** +**注意:`wiki +lint` 当前仅在本地编译版本中可用,需 `go build -o gitlink-cli.exe .` 后使用 `./gitlink-cli.exe`。** > **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) @@ -25,6 +26,7 @@ metadata: | `wiki +create` | 创建 Wiki 页面,支持 `--dry-run` 预览 | 是 | | `wiki +update` | 更新 Wiki 页面,支持 `--dry-run` 预览 | 是 | | `wiki +delete` | 删除 Wiki 页面,支持 `--dry-run` 预览 | 是 | +| `wiki +lint` | 检查 Wiki 页面质量问题(链接、标题、图片、空白页) | 否 | ## 使用示例 @@ -64,6 +66,12 @@ gitlink-cli wiki +delete --owner myuser --repo myrepo --title "废弃页面" # 预览删除操作 gitlink-cli wiki +delete --owner myuser --repo myrepo --title "废弃页面" --dry-run + +# 检查 Wiki 页面质量问题(全部检查) +gitlink-cli wiki +lint --owner myuser --repo myrepo + +# 只检查链接和空白页 +gitlink-cli wiki +lint --owner myuser --repo myrepo --check links,empty ``` ## Wiki 页面内容格式