feat(skills): add gitlink-code-review, gitlink-insight, gitlink-compliance Skills

This commit is contained in:
2403_89190320 2026-05-21 01:58:41 +08:00
parent 7bd29fdf15
commit 923e6af127
5 changed files with 1075 additions and 0 deletions

View File

@ -0,0 +1,321 @@
---
name: gitlink-code-review
version: 1.0.0
description: "智能代码审查:获取 PR 变更、分析代码质量、自动生成 Review 评论与摘要报告。当用户需要审查 Pull Request、检查代码质量或生成审查报告时触发。"
metadata:
requires:
bins: ["gitlink-cli"]
cliHelp: "gitlink-cli pr --help"
---
# gitlink-code-review智能代码审查
**CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。**
**CRITICAL — 所有写入/删除操作前,务必先确认用户意图。**
**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`GitHub CLI操作 GitLink 资源。`gh` 仅适用于 GitHub 平台。**
> **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) 了解认证和全局参数。
## 工作流概览
本 Skill 提供一套完整的 AI 驱动代码审查工作流,覆盖从获取 PR 变更到生成审查报告的全过程。不需要额外的 CLI Shortcuts——现有 `gitlink-cli` 命令 + AI Agent 的分析能力即可完成。
| 阶段 | 操作 | AI Agent 角色 |
|------|------|--------------|
| ① 获取上下文 | 拉取 PR 详情、变更文件、Diff | 执行 CLI 命令采集数据 |
| ② 分析代码 | 检查每个文件的变更 | 逐文件审查,标记问题 |
| ③ 结构化反馈 | 按严重程度分级输出审查意见 | 生成分级 Review 评论 |
| ④ 提交评论 | 发表 Review 到 PR | 通过 API 提交 |
| ⑤ 生成报告 | 输出审查摘要 | 生成 Markdown 摘要 |
---
## 详细工作流
### 工作流 1PR 代码审查
**场景**:收到 PR Review 请求后,进行完整代码审查。
#### Step 1获取 PR 上下文
```bash
# 获取 PR 详情
gitlink-cli pr +view --id <pr_id> --format json
# 获取变更文件列表
gitlink-cli pr +files --id <pr_id> --format json
# 获取 Diff 内容(含变更行号和代码上下文)
gitlink-cli pr +diff --id <pr_id> --format json
```
#### Step 2逐文件分析
对每个变更文件,根据文件类型执行针对性检查:
**Python 文件检查项:**
- 语法与导入:未使用的 import、循环导入、wildcard import
- 代码规范PEP 8 风格偏离、过长行(>88 chars、命名规范
- 安全硬编码密钥、SQL 注入风险、`eval()`/`exec()` 使用
- 性能不必要的循环、缺少缓存、N+1 查询
- 错误处理:裸 `except`、吞异常、缺少 finally
**JavaScript/TypeScript 文件检查项:**
- 安全:`innerHTML` 直接赋值、`eval()` 使用
- 类型安全:`any` 滥用、缺失类型定义
- 性能:不必要的 re-render、大对象深拷贝
- 异步:未处理的 Promise、缺少 error boundary
- 依赖:已废弃 API 使用
**Go 文件检查项:**
- 错误处理:未检查的 error return、panic 滥用
- 并发goroutine 泄漏、缺少 sync 保护
- 资源管理:未关闭的 file/conn、defer 使用
- 命名:导出标识符缺少注释、变量 shadowing
**通用检查项:**
- 硬编码的配置值、密钥、URL
- 缺少或错误的边界条件检查
- 过于复杂的函数(圈复杂度高)
- 魔法数字(未命名的常量)
- 重复代码DRY 违反)
- 缺少或过时的注释
- 测试覆盖不足
#### Step 3生成结构化审查结果
按以下 Severity 分级输出:
```markdown
## PR #<id> 代码审查报告
### 🔴 Critical必须修改
- <问题描述><文件>:<行号>
> <修改建议>
### 🟡 Warning建议修改
- <问题描述><文件>:<行号>
> <修改建议>
### 🔵 Suggestion可选优化
- <问题描述><文件>:<行号>
> <修改建议>
### ✅ Positive值得肯定
- <做得好的地方>
```
#### Step 4提交 Review 评论
```bash
# 方式 1提交整体 Review
gitlink-cli api POST /:owner/:repo/pulls/:id/reviews --body '{
"body": "## 审查结果\n\n### 🔴 Critical\n...\n\n### 🟡 Warning\n...\n\n总体评价...",
"event": "COMMENT"
}'
# 方式 2在特定行添加内联评论逐条提交
gitlink-cli api POST /:owner/:repo/pulls/:id/reviews --body '{
"body": "这里存在安全风险:用户输入未经转义直接拼接到 SQL 查询中,存在注入风险。建议使用参数化查询。",
"event": "COMMENT",
"commit_id": "<commit_sha>",
"path": "src/query.py",
"position": 42
}'
```
> **注意:** `event` 参数支持 `COMMENT`(普通评论)和 `APPROVE`(批准)。对于需要修改的问题,使用 `COMMENT`
#### Step 5生成审查摘要
审查完成后,输出 Markdown 摘要供用户查阅:
```markdown
## 📋 审查摘要 — PR #<id> <title>
| 指标 | 数据 |
|------|------|
| 审查文件数 | <n> |
| 变更行数 | +<add> / -<del> |
| Critical 问题 | <n> |
| Warning | <n> |
| Suggestion | <n> |
### 主要发现
1. **[Critical]** <最严重的问题>
2. **[Warning]** <次要问题>
3. **[Suggestion]** <优化建议>
### 总体评价
<整体评估代码质量审查通过建议>
---
*由 gitlink-code-review Skill 自动生成*
```
---
### 工作流 2仓库代码健康度扫描
**场景**:对仓库整体代码质量进行评估,不依赖 PR。
```bash
# 1. 获取仓库信息
gitlink-cli repo +info --owner <owner> --repo <repo> --format json
# 2. 获取仓库文件列表(遍历关键目录)
gitlink-cli api GET /:owner/:repo/sub_entries --query 'filepath=src&ref=master'
gitlink-cli api GET /:owner/:repo/sub_entries --query 'filepath=tests&ref=master'
# 3. 获取关键文件内容
gitlink-cli api GET /:owner/:repo/raw/master/README.md
gitlink-cli api GET /:owner/:repo/raw/master/.gitignore
gitlink-cli api GET /:owner/:repo/raw/master/.eslintrc.js # 或类似配置
gitlink-cli api GET /:owner/:repo/raw/master/package.json # 或 go.mod, Cargo.toml
# 4. 获取语言统计和贡献者
gitlink-cli api GET /:owner/:repo/languages
gitlink-cli api GET /:owner/:repo/contributors
```
**健康度检查清单:**
| 检查项 | 标准 | 评分依据 |
|--------|------|----------|
| 文档完整性 | 有 README、CONTRIBUTING、CHANGELOG | 文件是否存在、内容质量 |
| 许可证 | 有 LICENSE 文件 | 是否存在、是否合规 |
| CI 配置 | 有 CI 配置(.github/workflows, Jenkinsfile 等) | 文件是否存在 |
| 代码规范 | 有 linter 配置 | eslint/prettier/ruff/pylint 等 |
| 测试覆盖 | 有 test 目录或测试文件 | 测试文件比例 |
| 依赖管理 | 依赖文件完整且无已知漏洞 | package-lock/go.sum/poetry.lock |
| Issue 健康度 | Issue 有分类标签、响应及时 | 通过 Issue 列表分析 |
**输出格式:**
```markdown
## 🏥 仓库健康度报告 — <owner>/<repo>
### 总体评分:<⭐x/5>
| 维度 | 状态 | 评分 | 建议 |
|------|:----:|:----:|------|
| 📖 文档 | ✅/⚠️/❌ | ☆☆☆☆☆ | <建议> |
| 📜 许可证 | ✅/⚠️/❌ | ☆☆☆☆☆ | <建议> |
| 🔧 CI/CD | ✅/⚠️/❌ | ☆☆☆☆☆ | <建议> |
| 🎨 代码规范 | ✅/⚠️/❌ | ☆☆☆☆☆ | <建议> |
| 🧪 测试覆盖 | ✅/⚠️/❌ | ☆☆☆☆☆ | <建议> |
| 📦 依赖安全 | ✅/⚠️/❌ | ☆☆☆☆☆ | <建议> |
| 🐛 Issue 管理 | ✅/⚠️/❌ | ☆☆☆☆☆ | <建议> |
### 关键发现
1. <最需要改进的问题>
2. <次要问题>
3. <做得好的方面>
### 改进路线图
- **紧急(本周):** ...
- **短期(本月):** ...
- **长期(本季度):** ...
```
---
### 工作流 3批量 Issue Triage + 自动分配
**场景**:对新 Issue 进行自动分类、标签分配和责任人推荐。
```bash
# 1. 获取未标记的 Issue
gitlink-cli issue +list --state open --format json
# 2. 逐个分析 Issue 内容
gitlink-cli issue +view --id <issue_id> --format json
# 3. 根据内容智能分类
# 分析标题和描述后,通过 Raw API 打标签
gitlink-cli api POST /:owner/:repo/issues/:id --body '{
"issue_tag_ids": [<tag_id>],
"done_ratio": 0,
"subject": "<原始标题>",
"description": "<原始描述>"
}'
```
**分类规则参考:**
| Issue 关键词 | 推荐标签 | 优先级 |
|-------------|----------|:------:|
| bug, 错误, 失败, crash, 崩溃 | bug | 🔴 High |
| feature, 新增, 建议, 希望 | enhancement | 🔵 Low |
| 安全, 漏洞, 权限, 泄露 | security | 🔴 High |
| 性能, 慢, 卡顿, 优化 | performance | 🟡 Medium |
| 文档, README, 注释 | documentation | 🔵 Low |
| question, 如何, 怎么, 请问 | question | 🟡 Medium |
| 测试, test, 覆盖率 | testing | 🔵 Low |
---
## Raw API 参考
代码审查相关的 GitLink API 端点:
```bash
# 获取 PR 详情
gitlink-cli api GET /:owner/:repo/pulls/:id --format json
# 获取 PR 变更文件列表
gitlink-cli api GET /:owner/:repo/pulls/:id/files --format json
# 获取 PR Diff
gitlink-cli api GET /:owner/:repo/pulls/:id/diff --format json
# 提交 PR Review
gitlink-cli api POST /:owner/:repo/pulls/:id/reviews --body '{"body":"...","event":"COMMENT"}'
# 获取仓库文件列表
gitlink-cli api GET /:owner/:repo/sub_entries --query 'filepath=<path>&ref=<branch>'
# 获取仓库语言统计
gitlink-cli api GET /:owner/:repo/languages --format json
# 获取贡献者列表
gitlink-cli api GET /:owner/:repo/contributors --format json
# 获取仓库动态
gitlink-cli api GET /:owner/:repo/activity --format json
```
## 代码审查最佳实践
### 审查原则
1. **先大局后细节**:先理解 PR 的目的和整体变更范围,再逐文件审查
2. **关注行为,而非风格**自动化工具linter/formatter能处理的风格问题优先交给工具
3. **提供可操作的建议**:不只是指出问题,要给出具体的修改方案
4. **肯定好的代码**:发现好的设计、清晰的命名、完善的测试时给予正面反馈
5. **控制评论量**:避免信息过载——最严重的 3-5 个问题比 20 个小问题更有价值
### 安全红线
以下问题必须标记为 **Critical**,不得忽略:
- 硬编码的密钥 / Token / 密码
- SQL / NoSQL 注入漏洞
- 命令注入shell 命令拼接)
- 路径遍历(用户输入直接用于文件路径)
- 不安全的反序列化
- XSS未转义的用户输入直接渲染
### 输出规范
- 始终使用 `--format json` 获取结构化数据
- 审查报告输出为 **Markdown 格式**,便于直接粘贴到 PR 评论
- 涉及文件/行号时使用精准引用,方便定位
- 批量操作前使用 `--dry-run` 预检
## 注意事项
- PR Review 提交后会通知所有关注该 PR 的参与者,评论内容请保持专业
- `pr +diff` 输出可能很大(大型 PRAgent 应分段处理
- API 的 PR files 和 diff 接口有频率限制,避免短时间内重复请求
- 对于 draft PR草稿应提示用户先将其标记为 Ready for Review

View File

@ -0,0 +1,164 @@
# PR 代码审查完整工作流示例
**场景**:团队成员提交了一个 PR需要进行代码审查。
## 前置条件
- `gitlink-cli` 已安装并登录
- 用户拥有 PR 所在仓库的读取权限
## 工作流步骤
### Step 1获取 PR 上下文
```bash
# 查看 PR 列表,找到待审查的 PR
gitlink-cli pr +list --state open --format json
# 获取特定 PR 详情
gitlink-cli pr +view --id 42 --format json
```
**输出示例:**
```json
{
"ok": true,
"data": {
"id": 42,
"title": "feat: add user authentication module",
"body": "实现了基于 JWT 的用户认证模块包含登录、注册、Token 刷新功能。",
"state": "open",
"author": "developer_a",
"created_at": "2026-05-18T10:30:00+08:00",
"source_branch": "feat/auth-module",
"target_branch": "master"
}
}
```
### Step 2获取变更文件
```bash
gitlink-cli pr +files --id 42 --format json
```
**输出示例:**
```json
{
"ok": true,
"data": [
{ "filename": "src/auth/login.py", "status": "added", "additions": 120, "deletions": 0 },
{ "filename": "src/auth/token.py", "status": "added", "additions": 85, "deletions": 0 },
{ "filename": "src/config.py", "status": "modified", "additions": 5, "deletions": 2 },
{ "filename": "tests/test_auth.py", "status": "added", "additions": 200, "deletions": 0 },
{ "filename": "requirements.txt", "status": "modified", "additions": 3, "deletions": 0 }
]
}
```
### Step 3获取 Diff 内容
```bash
gitlink-cli pr +diff --id 42 --format json
```
### Step 4逐文件审查
对每个变更文件,分析代码质量。以下是审查结果示例:
```markdown
## PR #42 代码审查报告
### 🔴 Critical
1. **JWT Secret 硬编码**`src/config.py:15`
> `JWT_SECRET = "my-secret-key-123"` 硬编码在源码中,存在泄露风险。建议:
> - 使用环境变量:`JWT_SECRET = os.getenv("JWT_SECRET")`
> - 或使用配置文件(不提交到版本控制)
2. **SQL 注入风险**`src/auth/login.py:42`
> `cursor.execute(f"SELECT * FROM users WHERE username = '{username}'")` 直接拼接用户输入,存在 SQL 注入风险。建议使用参数化查询:
> ```python
> cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
> ```
### 🟡 Warning
1. **密码明文存储**`src/auth/login.py:88`
> 密码直接存储到数据库,建议使用 `bcrypt``argon2` 进行哈希处理。
2. **缺少输入验证**`src/auth/login.py:15`
> `login()` 函数没有对 `username``password` 进行长度和格式校验。建议:
> ```python
> if len(username) < 3 or len(username) > 50:
> raise ValueError("用户名长度应在 3-50 个字符之间")
> ```
### 🔵 Suggestion
1. **Token 过期时间可配置**`src/auth/token.py:30`
> `ACCESS_TOKEN_EXPIRE_MINUTES = 30` 建议改为从环境变量读取,方便不同环境配置。
2. **测试可增加边界用例**`tests/test_auth.py`
> 现有测试覆盖了正常流程,建议补充:
> - 空用户名/密码
> - 超长输入
> - Token 过期处理
> - 并发登录场景
### ✅ Positive
- 完整的测试覆盖200 行测试代码,覆盖主要功能路径)
- 清晰的模块划分login / token 职责分离)
- 有类型注解,代码可读性好
```
### Step 5提交 Review
```bash
# 提交整体 Review 评论
gitlink-cli api POST /Gitlink/forgeplus/pulls/42/reviews --body '{
"body": "## PR #42 代码审查报告\n\n### 🔴 Critical\n\n1. **JWT Secret 硬编码**`src/config.py:15`\n JWT_SECRET 硬编码在源码中。建议使用 `os.getenv(\"JWT_SECRET\")`。\n\n2. **SQL 注入风险**`src/auth/login.py:42`\n 直接拼接用户输入到 SQL 查询。建议使用参数化查询。\n\n### 🟡 Warning\n\n1. **密码明文存储** — 建议使用 bcrypt 哈希处理。\n\n### 总体评价\n\n代码整体结构清晰测试覆盖良好。建议修复 Critical 问题后合并。",
"event": "COMMENT"
}'
```
### Step 6输出审查摘要
```markdown
## 📋 审查摘要 — PR #42 feat: add user authentication module
| 指标 | 数据 |
|------|------|
| 审查文件数 | 5 |
| 变更行数 | +413 / -2 |
| Critical 问题 | 2 |
| Warning | 2 |
| Suggestion | 2 |
### 主要发现
1. **[Critical]** JWT Secret 硬编码在源码中
2. **[Critical]** SQL 查询存在注入风险
3. **[Warning]** 密码明文存储
### 总体评价
代码结构良好,测试覆盖完整。修复两个安全关键问题后即可合并。
```
---
## 完整命令速览
```bash
# 获取 PR 详情
gitlink-cli pr +view --id <id> --format json
# 获取变更文件
gitlink-cli pr +files --id <id> --format json
# 获取 Diff
gitlink-cli pr +diff --id <id> --format json
# 提交 Review
gitlink-cli api POST /:owner/:repo/pulls/:id/reviews --body '{"body":"...","event":"COMMENT"}'
```

View File

@ -0,0 +1,231 @@
---
name: gitlink-compliance
version: 1.0.0
description: "开源合规检查:扫描仓库许可证、版权声明、依赖合规性,生成合规报告与修复建议。当用户需要检查项目合规状态、许可证兼容性或准备开源发布时触发。"
metadata:
requires:
bins: ["gitlink-cli"]
cliHelp: "gitlink-cli repo --help"
---
# gitlink-compliance开源合规检查
**CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。**
**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`GitHub CLI操作 GitLink 资源。`gh` 仅适用于 GitHub 平台。**
> **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) 了解认证和全局参数。
---
## 工作流概览
本 Skill 提供开源项目的合规性自动化检查能力,帮助 Maintainer 在发布前发现并修复合规问题。
| 检查类型 | 覆盖范围 | 严重程度 |
|----------|---------|:--------:|
| 许可证检查 | LICENSE 文件存在性、许可证类型识别 | 🔴 / 🟡 |
| 版权声明 | 源文件头部版权注释 | 🟡 |
| 依赖合规 | 第三方依赖许可证兼容性 | 🔴 |
| 安全策略 | SECURITY.md、安全披露流程 | 🟡 |
| 贡献者协议 | CLA / DCO 要求 | 🔵 |
---
## 工作流 1完整合规检查
**场景**:项目准备开源发布前,进行全面的合规性审查。
### 采集数据
```bash
# 1. 获取仓库文件结构
gitlink-cli api GET /:owner/:repo/sub_entries --query 'filepath=&ref=master'
# 2. 读取 LICENSE 文件
gitlink-cli api GET /:owner/:repo/raw/master/LICENSE
# 3. 检查关键文档是否存在
# 检查以下文件是否存在:
# - LICENSE / LICENSE.txt / LICENSE.md
# - CONTRIBUTING / CONTRIBUTING.md
# - SECURITY / SECURITY.md
# - CODE_OF_CONDUCT / CODE_OF_CONDUCT.md
# - .gitignore
# - README.md
# 4. 获取依赖配置
gitlink-cli api GET /:owner/:repo/raw/master/package.json # Node.js
gitlink-cli api GET /:owner/:repo/raw/master/go.mod # Go
gitlink-cli api GET /:owner/:repo/raw/master/requirements.txt # Python
gitlink-cli api GET /:owner/:repo/raw/master/Cargo.toml # Rust
gitlink-cli api GET /:owner/:repo/raw/master/pom.xml # Java/Maven
# 5. 获取源文件检查(按语言采样)
gitlink-cli api GET /:owner/:repo/sub_entries --query 'filepath=src&ref=master'
# 6. 获取仓库基本信息
gitlink-cli repo +info --owner <owner> --repo <repo> --format json
```
### 检查清单
#### 🔴 必须修复项
| 检查项 | 标准 | 判定方法 |
|--------|------|----------|
| LICENSE 文件 | 根目录存在 LICENSE 文件且内容有效 | 检查文件是否存在、内容是否为空 |
| 许可证类型 | 使用 OSI 批准的开放源码许可证 | 解析 LICENSE 内容,识别许可证类型 |
| 许可证兼容性 | 项目许可证与依赖许可证兼容 | 检查依赖许可证,对比兼容性矩阵 |
| 安全漏洞 | 依赖无已知 CVE | 检查依赖版本(需外部数据源) |
#### 🟡 建议修复项
| 检查项 | 标准 | 判定方法 |
|--------|------|----------|
| 版权声明 | 源文件头部包含版权和许可证信息 | 采样检查源文件头部注释 |
| SECURITY.md | 存在安全策略披露流程 | 检查文件是否存在 |
| CONTRIBUTING.md | 存在贡献指南 | 检查文件是否存在 |
| 商标声明 | 正确使用项目/组织商标 | 检查 README 和 LICENSE 中的商标声明 |
#### 🔵 可选优化项
| 检查项 | 标准 | 判定方法 |
|--------|------|----------|
| CODE_OF_CONDUCT | 存在行为准则 | 检查文件是否存在 |
| .gitignore | 存在且配置完整 | 检查文件是否存在、内容是否覆盖常见模式 |
| README 质量 | README 包含安装、使用、贡献说明 | 检查内容长度和关键章节 |
### 输出格式
```markdown
## ⚖️ 合规检查报告 — <owner>/<repo>
📅 检查时间:<YYYY-MM-DD>
📋 项目许可证:<许可证类型>
### 🔴 必须修复
| # | 问题 | 文件 | 建议 |
|---|------|------|------|
| 1 | 缺少 LICENSE 文件 | — | 添加 LICENSE 文件,建议使用 <推荐许可证> |
| 2 | 依赖 xxx 使用 GPL 许可证,与项目 MIT 许可证不兼容 | package.json | 替换为兼容许可证的替代库 |
| 3 | 源文件缺少版权声明头 | src/*.py | 添加标准版权注释头 |
### 🟡 建议修复
| # | 问题 | 文件 | 建议 |
|---|------|------|------|
| 1 | 缺少 SECURITY.md | — | 添加安全漏洞披露流程文档 |
| 2 | CONTRIBUTING.md 不存在 | — | 添加贡献指南 |
### 🔵 可选优化
| # | 建议 | 说明 |
|---|------|------|
| 1 | 添加 CODE_OF_CONDUCT.md | 规范社区行为准则 |
| 2 | 完善 README 安装说明 | 当前缺少环境要求部分 |
### 📊 合规评分
| 维度 | 状态 | 评分 |
|------|:----:|:----:|
| 📜 许可证 | ✅ / ⚠️ / ❌ | ☆☆☆☆☆ |
| 🏷️ 版权声明 | ✅ / ⚠️ / ❌ | ☆☆☆☆☆ |
| 📦 依赖合规 | ✅ / ⚠️ / ❌ | ☆☆☆☆☆ |
| 🔒 安全策略 | ✅ / ⚠️ / ❌ | ☆☆☆☆☆ |
| 📖 项目文档 | ✅ / ⚠️ / ❌ | ☆☆☆☆☆ |
**总体合规评分:<分数>/100**
```
---
## 工作流 2许可证兼容性检查
**场景**:检查项目使用的第三方依赖是否与项目许可证兼容。
```bash
# 1. 获取依赖配置文件
gitlink-cli api GET /:owner/:repo/raw/master/package.json
```
### 许可证兼容性参考
| 项目许可证 | 兼容的依赖许可证 | 不兼容的依赖许可证 |
|-----------|-----------------|-------------------|
| MIT | MIT, Apache-2.0, BSD-2/3, Unlicense, ISC, CC0 | GPL-2/3, AGPL |
| Apache-2.0 | Apache-2.0, MIT, BSD-2/3, ISC, Unlicense | GPL-2/3 |
| GPL-3.0 | GPL-3.0, MIT, Apache-2.0, BSD | — |
| BSD-3 | MIT, BSD-2/3, Apache-2.0, ISC | GPL-2/3, AGPL |
| MulanPSL-2 | MulanPSL-2, MIT, Apache-2.0, BSD | GPL-3, AGPL (需确认) |
### 输出格式
```bash
# 依赖合规分析(示例输出结构)
## 📦 依赖合规分析
| 依赖 | 版本 | 许可证 | 兼容性 | 建议 |
|------|:----:|:------:|:------:|------|
| express | 4.18.2 | MIT | ✅ 兼容 | — |
| lodash | 4.17.21 | MIT | ✅ 兼容 | — |
| anticonflict-lib | 1.0.0 | GPL-3.0 | ❌ 不兼容 | 替换为兼容替代库 |
```
---
## 工作流 3版权声明批量检查
**场景**:检查项目中所有源文件是否包含正确的版权声明头。
```bash
# 1. 遍历源文件目录
gitlink-cli api GET /:owner/:repo/sub_entries --query 'filepath=src&ref=master'
# 2. 采样检查源文件头部(取前 5-10 行)
gitlink-cli api GET /:owner/:repo/raw/master/src/main.py
```
### 标准版权声明模板
```python
# Copyright (c) <年份> <组织/作者>
# Licensed under the <许可证> License.
# See LICENSE file in the project root for full license information.
```
### 常见问题
| 问题 | 说明 |
|------|------|
| 缺少头部注释 | 源文件没有版权/许可证信息 |
| 年份过时 | 版权年份未更新到当前年份 |
| 许可证不匹配 | 声明的许可证与实际 LICENSE 文件不一致 |
| 组织名称错误 | 版权声明的组织名称与项目所属不一致 |
---
## Raw API 参考
```bash
# 获取文件内容
gitlink-cli api GET /:owner/:repo/raw/<branch>/<path>
# 获取文件列表(遍历目录)
gitlink-cli api GET /:owner/:repo/sub_entries --query 'filepath=<path>&ref=<branch>'
# 获取仓库信息
gitlink-cli api GET /:owner/:repo --format json
# 获取贡献者列表
gitlink-cli api GET /:owner/:repo/contributors --format json
```
## 注意事项
- 合规检查结果仅基于仓库中可读取的文件,不构成法律建议
- 对于许可证兼容性问题建议在实际发布前咨询法务或开源办公室OSPO
- 不同语言的依赖管理文件格式不同,需要根据项目主语言选择对应的依赖文件分析
- 版权声明检查是采样性的100% 覆盖需要运行专门的扫描工具
- MulanPSL-2木兰许可证是 GitLink 平台上常用的许可证,需注意其与 GPL 的兼容性

View File

@ -0,0 +1,283 @@
---
name: gitlink-insight
version: 1.0.0
description: "项目健康度与协作洞察:分析 Issue/PR 指标、贡献者活跃度、生成项目周报和健康度报告。当用户需要了解项目进展、团队协作状况或生成报告时触发。"
metadata:
requires:
bins: ["gitlink-cli"]
cliHelp: "gitlink-cli issue --help"
---
# gitlink-insight项目健康度与协作洞察
**CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。**
**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`GitHub CLI操作 GitLink 资源。`gh` 仅适用于 GitHub 平台。**
> **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) 了解认证和全局参数。
---
## 工作流概览
本 Skill 通过聚合 GitLink API 数据,生成多维度的项目协作洞察报告。
| 报告类型 | 数据来源 | 适用场景 |
|----------|---------|----------|
| 项目健康度 | 仓库元数据 + 代码规范 + 测试 + 文档 | 项目 Maintainer 评估仓库状态 |
| Sprint 周报 | Issue + PR + Release | 团队每周同步 |
| 贡献者洞察 | 贡献者列表 + 活跃度 + PR 数据 | 管理者了解团队贡献分布 |
| Issue 分析 | Issue 列表 + 标签 + 状态 | 项目管理跟踪进度 |
---
## 工作流 1项目健康度报告
**场景**:评估一个仓库的整体健康状况。
### 采集数据
```bash
# 1. 获取仓库基本信息
gitlink-cli repo +info --owner <owner> --repo <repo> --format json
# 2. 获取 Issue 统计
gitlink-cli issue +list --state open --format json
gitlink-cli issue +list --state closed --format json
# 3. 获取 PR 统计
gitlink-cli pr +list --state open --format json
gitlink-cli pr +list --state merged --format json
# 4. 获取仓库文件结构检查文档、CI 配置)
gitlink-cli api GET /:owner/:repo/sub_entries --query 'filepath=&ref=master'
# 5. 获取语言统计
gitlink-cli api GET /:owner/:repo/languages --format json
# 6. 获取贡献者列表
gitlink-cli api GET /:owner/:repo/contributors --format json
```
### 分析指标
| 维度 | 指标 | 计算方法 | 权重 |
|------|------|----------|:----:|
| 📖 文档 | README 质量、CONTRIBUTING 存在性、CHANGELOG | 检查关键文档文件是否存在 | 15% |
| 📜 合规 | LICENSE 文件、版权声明 | 检查 LICENSE 文件 | 10% |
| 🔧 工程化 | CI 配置、linter 配置、.gitignore | 检查 CI/linter 配置文件 | 15% |
| 🧪 质量 | 测试文件比例、代码规范 | 测试文件占源码比例 | 20% |
| 🐛 协作 | Issue 响应时间、PR 合并率 | 分析 Issue/PR 时间序列 | 20% |
| 👥 社区 | 贡献者数量、Fork 数、Star 数 | 从仓库元数据获取 | 10% |
| 📦 依赖 | 依赖配置文件、依赖数量 | 检查 package.json / go.mod 等 | 10% |
### 输出格式
```markdown
## 🏥 项目健康度报告 — <owner>/<repo>
📅 报告时间:<YYYY-MM-DD>
### 总体评分:<⭐x5><分数>/100
| 维度 | 评分 | 详情 |
|------|:----:|------|
| 📖 文档 | ☆☆☆☆☆ / 5 | <详情> |
| 📜 合规 | ☆☆☆☆☆ / 5 | <详情> |
| 🔧 工程化 | ☆☆☆☆☆ / 5 | <详情> |
| 🧪 质量 | ☆☆☆☆☆ / 5 | <详情> |
| 🐛 协作 | ☆☆☆☆☆ / 5 | <详情> |
| 👥 社区 | ☆☆☆☆☆ / 5 | <详情> |
| 📦 依赖 | ☆☆☆☆☆ / 5 | <详情> |
### 📊 关键指标
| 指标 | 数值 |
|------|:----:|
| 总 Issue开放/关闭) | <n> / <n> |
| 总 PR开放/已合并) | <n> / <n> |
| 贡献者 | <n> 人 |
| 主要语言 | <语言> |
| Star / Fork | <n> / <n> |
### ✅ 亮点
- <做得好的地方>
### ⚠️ 待改进
- <需要改进的地方>
### 🎯 建议行动
1. <优先级最高的改进建议>
2. <次要建议>
3. <可选的优化建议>
```
---
## 工作流 2Sprint 周报
**场景**:每周自动生成团队协作周报。
```bash
# 1. 获取时间范围内关闭的 Issue
gitlink-cli issue +list --state closed --format json
# 2. 获取时间范围内合并的 PR
gitlink-cli pr +list --state merged --format json
# 3. 获取新的 Release
gitlink-cli release +list --format json
# 4. 获取开放中的 Issue正在进行的任务
gitlink-cli issue +list --state open --format json
# 5. 获取项目动态
gitlink-cli api GET /:owner/:repo/activity --format json
```
### 输出格式
```markdown
## 📅 Sprint 周报 — <owner>/<repo>
📆 周期:<YYYY-MM-DD> ~ <YYYY-MM-DD>
### ✅ 本周完成
| 类型 | 数量 | 详情 |
|------|:----:|------|
| Issue 关闭 | <n> | <关键 Issue 列表> |
| PR 合并 | <n> | <关键 PR 列表> |
| Release | <n> | <版本号列表> |
### 🚧 进行中
| Issue | 负责人 | 状态 |
|-------|:------:|:----:|
| <标题> | <assignee> | 进行中 / Review 中 / 阻塞 |
### 📊 统计
| 指标 | 本周 | 上周 | 环比 |
|------|:----:|:----:|:----:|
| 关闭 Issue | <n> | <n> | ±<n>% |
| 合并 PR | <n> | <n> | ±<n>% |
| 新增 Issue | <n> | <n> | ±<n>% |
| 新增贡献者 | <n> | <n> | ±<n> |
### ⚠️ 风险与阻塞
- <需要关注的问题>
---
## 工作流 3贡献者洞察
**场景**:分析团队成员的贡献分布和活跃度。
```bash
# 1. 获取贡献者列表
gitlink-cli api GET /:owner/:repo/contributors --format json
# 2. 获取每个贡献者的 PR
# 通过 PR 列表按 author 过滤
gitlink-cli pr +list --state merged --format json
# 3. 获取用户信息
gitlink-cli user +info --login <username> --format json
```
### 输出格式
```markdown
## 👥 贡献者洞察 — <owner>/<repo>
| 贡献者 | 合并 PR | 关闭 Issue | 最近活跃 | 角色 |
|--------|:-------:|:----------:|:---------:|:----:|
| <user> | <n> | <n> | <日期> | Maintainer / Contributor |
### 活跃度分布
- 核心贡献者(本月 5+ PR<n>
- 活跃贡献者(本月 1-4 PR<n>
- 新增贡献者(本月首次贡献):<n>
### 贡献趋势
- 本月 PR 合并数:<n>(环比 <±n%>
- 本月 Issue 响应中位数:<n> 小时
- 本月 PR Review 中位数:<n> 小时
```
---
## 工作流 4Issue 积压分析
**场景**:分析未处理的 Issue 积压情况,帮助排期。
```bash
# 1. 获取所有开放 Issue
gitlink-cli issue +list --state open --format json
# 2. 按标签分析分布
# 遍历每个 Issue统计标签分布
# 3. 获取最老的 Issue积压时间最长
# 按 created_at 排序,取前 10
```
### 输出格式
```markdown
## 🐛 Issue 积压分析 — <owner>/<repo>
### 总览
- 开放 Issue<n>
- 最老 Issue 已存在:<n>
- 平均存留时间:<n>
### 标签分布
| 标签 | 数量 | 占比 |
|------|:----:|:----:|
| bug | <n> | <n>% |
| enhancement | <n> | <n>% |
| question | <n> | <n>% |
| <其他> | <n> | <n>% |
### 需要关注的积压 Issue
1. ⏰ <标题>(已开放 <n> 天)— <标签>
2. ⏰ <标题>(已开放 <n> 天)— <标签>
3. ⏰ <标题>(已开放 <n> 天)— <标签>
### 建议
- 本周应优先处理的 Issue<n>
- 可关闭的过期 Issue<n>
```
---
## Raw API 参考
```bash
# 仓库信息
gitlink-cli api GET /:owner/:repo --format json
# 仓库语言统计
gitlink-cli api GET /:owner/:repo/languages --format json
# 贡献者列表
gitlink-cli api GET /:owner/:repo/contributors --format json
# 仓库动态
gitlink-cli api GET /:owner/:repo/activity --format json
# 文件列表(检查文档/配置完整性)
gitlink-cli api GET /:owner/:repo/sub_entries --query 'filepath=&ref=master'
# 获取用户信息
gitlink-cli api GET /users/:user_id --format json
# 用户贡献热力图
gitlink-cli api GET /users/:user_id/headmaps --format json
```
## 注意事项
- 所有报告输出为 **Markdown 格式**,可直接粘贴到 Issue、Wiki 或 PR 描述中
- 数据分析基于 API 返回的实时数据,不依赖本地缓存
- 对于大型仓库100+ Issue/PR使用分页参数 `page=1&limit=50` 逐页获取
- 趋势分析建议每周运行一次,形成历史对比基线
- `pr +list``--state` 参数可能不精确过滤——需客户端通过 `pull_request_status` 字段判断0=open, 1=merged, 2=closed

View File

@ -0,0 +1,76 @@
# Sprint 周报生成工作流示例
**场景**:每周五下午,项目 Maintainer 需要生成团队周报。
## Step 1获取本周完成的工作
```bash
# 获取本周合并的 PR按状态过滤
gitlink-cli pr +list --state merged --format json
# 获取本周关闭的 Issue
gitlink-cli issue +list --state closed --format json
# 获取本周创建的 Release
gitlink-cli release +list --format json
```
## Step 2获取进行中的工作
```bash
# 获取所有开放 Issue
gitlink-cli issue +list --state open --format json
# 获取开放 PR
gitlink-cli pr +list --state open --format json
```
## Step 3获取项目动态
```bash
gitlink-cli api GET /:owner/:repo/activity --format json
```
## Step 4生成周报
将采集的数据整理为以下格式:
```markdown
## 📅 Sprint 周报 — Gitlink/forgeplus
📆 周期2026-05-14 ~ 2026-05-20
### ✅ 本周完成
| 类型 | 数量 | 关键事项 |
|------|:----:|----------|
| Issue 关闭 | 12 | #234 用户权限修复、#235 性能优化 |
| PR 合并 | 8 | feat: 添加登录模块、fix: 修复内存泄漏 |
| Release | 1 | v2.3.0 发布 |
### 🚧 进行中
| Issue | 负责人 | 状态 |
|-------|:------:|:----:|
| #240 API 文档重构 | zhangsan | Review 中 |
| #241 数据导出功能 | lisi | 进行中 |
### 📊 本周统计
| 指标 | 本周 | 上周 | 环比 |
|------|:----:|:----:|:----:|
| 关闭 Issue | 12 | 8 | +50% |
| 合并 PR | 8 | 6 | +33% |
| 新增 Issue | 5 | 7 | -29% |
| 新增贡献者 | 2 | 1 | +100% |
### ⚠️ 关注事项
- #238 数据库迁移 PR 依赖基础设施组支持,已阻塞 3 天
```
---
## 自动化建议
每周固定时间运行时,可以:
1. 保存上一期报告的输出
2. 本期与上期数据做环比
3. 在项目 Wiki 中归档历史周报
4. 在团队 Issue 或 Discussion 中发布