From 923e6af1270f1a36657e8a9d13d63b41ea1f3d8f Mon Sep 17 00:00:00 2001 From: 2403_89190320 <2403_89190320@noreply.gitcode.com> Date: Thu, 21 May 2026 01:58:41 +0800 Subject: [PATCH] feat(skills): add gitlink-code-review, gitlink-insight, gitlink-compliance Skills --- skills/gitlink-code-review/SKILL.md | 321 ++++++++++++++++++ .../examples/pr-review-workflow.md | 164 +++++++++ skills/gitlink-compliance/SKILL.md | 231 +++++++++++++ skills/gitlink-insight/SKILL.md | 283 +++++++++++++++ .../examples/sprint-report-workflow.md | 76 +++++ 5 files changed, 1075 insertions(+) create mode 100644 skills/gitlink-code-review/SKILL.md create mode 100644 skills/gitlink-code-review/examples/pr-review-workflow.md create mode 100644 skills/gitlink-compliance/SKILL.md create mode 100644 skills/gitlink-insight/SKILL.md create mode 100644 skills/gitlink-insight/examples/sprint-report-workflow.md diff --git a/skills/gitlink-code-review/SKILL.md b/skills/gitlink-code-review/SKILL.md new file mode 100644 index 0000000..3294536 --- /dev/null +++ b/skills/gitlink-code-review/SKILL.md @@ -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 摘要 | + +--- + +## 详细工作流 + +### 工作流 1:PR 代码审查 + +**场景**:收到 PR Review 请求后,进行完整代码审查。 + +#### Step 1:获取 PR 上下文 + +```bash +# 获取 PR 详情 +gitlink-cli pr +view --id --format json + +# 获取变更文件列表 +gitlink-cli pr +files --id --format json + +# 获取 Diff 内容(含变更行号和代码上下文) +gitlink-cli pr +diff --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 # 代码审查报告 + +### 🔴 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": "", + "path": "src/query.py", + "position": 42 +}' +``` + +> **注意:** `event` 参数支持 `COMMENT`(普通评论)和 `APPROVE`(批准)。对于需要修改的问题,使用 `COMMENT`。 + +#### Step 5:生成审查摘要 + +审查完成后,输出 Markdown 摘要供用户查阅: + +```markdown +## 📋 审查摘要 — PR # + +| 指标 | 数据 | +|------|------| +| 审查文件数 | <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` 输出可能很大(大型 PR),Agent 应分段处理 +- API 的 PR files 和 diff 接口有频率限制,避免短时间内重复请求 +- 对于 draft PR(草稿),应提示用户先将其标记为 Ready for Review diff --git a/skills/gitlink-code-review/examples/pr-review-workflow.md b/skills/gitlink-code-review/examples/pr-review-workflow.md new file mode 100644 index 0000000..2028acc --- /dev/null +++ b/skills/gitlink-code-review/examples/pr-review-workflow.md @@ -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"}' +``` diff --git a/skills/gitlink-compliance/SKILL.md b/skills/gitlink-compliance/SKILL.md new file mode 100644 index 0000000..bee901a --- /dev/null +++ b/skills/gitlink-compliance/SKILL.md @@ -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 的兼容性 diff --git a/skills/gitlink-insight/SKILL.md b/skills/gitlink-insight/SKILL.md new file mode 100644 index 0000000..436c66c --- /dev/null +++ b/skills/gitlink-insight/SKILL.md @@ -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. <可选的优化建议> +``` + +--- + +## 工作流 2:Sprint 周报 + +**场景**:每周自动生成团队协作周报。 + +```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> 小时 +``` + +--- + +## 工作流 4:Issue 积压分析 + +**场景**:分析未处理的 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 diff --git a/skills/gitlink-insight/examples/sprint-report-workflow.md b/skills/gitlink-insight/examples/sprint-report-workflow.md new file mode 100644 index 0000000..74c917f --- /dev/null +++ b/skills/gitlink-insight/examples/sprint-report-workflow.md @@ -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 中发布