feat(skills): 新增 gitlink-faq skill + 补全 repo/issue/wiki 的skill 文档 #15

Merged
mengcheng merged 2 commits from mc_branch into master 2026-06-23 21:21:50 +08:00
13 changed files with 1241 additions and 44 deletions

View File

@ -2,6 +2,8 @@
## 2026-05-31 新增 `wiki +lint` 文档质量检查命令
> **注意:`+lint` 命令当前仅在本地编译版本中可用**(全局安装的 `gitlink-cli` 暂未包含)。需先 `go build -o gitlink-cli.exe .` 然后使用 `./gitlink-cli.exe wiki +lint`
### 使用方法
```bash

345
skills/gitlink-faq/SKILL.md Normal file
View File

@ -0,0 +1,345 @@
---
name: gitlink-faq
version: 1.3.0
description: "Issue 知识库:从项目 Issue 自动分类Bug/功能请求/使用问题),按类型归纳聚类,生成结构化知识库发布到 Wiki增量更新已有知识库检测新 Issue 是否与已有问题重复。当用户需要整理 Issue、归纳 Issue、总结常见问题/Bug、建立知识库、更新知识库、检查重复 Issue、查重时触发。通用 Issue 操作(创建/查看/更新/关闭/评论等)请使用 gitlink-issue skill。"
metadata:
requires:
bins: ["gitlink-cli"]
cliHelp: "gitlink-cli issue --help"
---
# gitlink-faqIssue 知识库)
**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)
## 运行模式
| 模式 | 说明 | 典型触发语 | 需要认证 |
|------|------|------------|----------|
| **模式 AIssue 归纳** | 采集全部 Issue → 按类型分类 → 主题聚类 → 生成结构化知识库发布到 Wiki | "整理 Issue""归纳关闭的 Issue""总结项目问题""建立知识库""分析 Issue" | 是(发布 Wiki 需写入) |
| **模式 B重复检测** | 对指定 Issue在知识库和历史 Issue 中查找相似项,判断是否重复 | "查重""有没有类似的 Issue""这个是不是有人报过" | 否(仅读取;评论需认证) |
| **模式 CWiki 增量更新** | 读取已有 Wiki 页面 → 拉取新 Issue → 分类合并到现有知识库结构 → 更新 Wiki | "把这个 Issue 加到知识库""更新 Wiki 页面""补充到知识库里""同步最新 Issue 到 Wiki" | 是(读取+写入 Wiki |
---
## 模式 AIssue 归纳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 类型分类
对每条 IssueAI 根据 (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
```
---
## 模式 BIssue 查找与查重
当用户说 **"查重"、"检查重复"、"有没有类似的 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
# 添加评论(使用 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)。
---
## 模式 CWiki 增量更新
当用户说 **"把这个 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`),因为页面已存在。
---
## 命令速查
本 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 |
| `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 |
---
## API 注意事项
- `issue +list``--state` 参数**不可靠**(与 PR 列表同款问题),返回列表可能包含所有状态。因此必须同时拉 open + closed 两份列表合并去重。
- **`issue +view` 不返回 journals 内容**:只有 `comment_journals_count`(评论数量),无法通过 API 读取实际评论。`GET /v1/.../issues/{N}/journals` 返回 HTML 而非 JSON。分析只能依靠 `subject` + `description`
- **`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` 写入正常。
---
## 注意事项
- **先分类再聚类**:不同 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) — 认证和全局参数

View File

@ -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 添加引导评论。用户将收到通知,看到参考链接。
```

View File

@ -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请先确认是否已被收录。

View File

@ -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 周后刷新
```

View File

@ -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` 降序排列

View File

@ -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确认分页参数正确

View File

@ -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先合并讨论再判断
- **对事不对人**:评论始终友好,引导用户找到答案而非指责

View File

@ -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 为空或无明确解决记录 |

View File

@ -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 周)

View File

@ -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` |

View File

@ -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 补充

View File

@ -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 页面内容格式