Skill 清单
GitLab 研发管理场景的全部能力定义,按清海 AI 实际工作方式分层组织。 会话场景概览见 GitLab 研发管理,角色维度的会话旅程见 角色场景。
架构总览
GitLab 研发管理的能力分为四层,从 AI 对话侧到系统自动化逐层递进:
分层判断标准
| 层级 | 判断标准 | 开发产出 |
|---|---|---|
| A — Skill | AI 需要场景指导、权限规则、工具组合策略 | skills/gitlab/SKILL.md |
| B — Tool | AI 需要调用、tool schema 可自描述 | scripts/direct/tools/gitlab.py |
| C — 系统能力 | 不需要 AI 感知,自动运行 | 中间件 / 工具内部逻辑 |
| D — 主动推送 | 非对话触发,由事件或定时驱动 | 事件处理器 / 定时任务 |
Skill / Tool 汇总
| 名称 | 描述 | 状态 |
|---|---|---|
gitlab Skill | GitLab 研发管理场景 AI 对话技能(SKILL.md) | ✅ 已实现 |
gitlab_list_projects | 列出所有可访问的 GitLab 项目 | ✅ 已实现 |
gitlab_list_commits | 查询项目提交记录,支持按作者/日期筛选 | ✅ 已实现(⚠️ 多分支覆盖待修复) |
gitlab_get_contributions | 按作者统计代码贡献量(提交数/增删行) | ✅ 已实现(⚠️ 多分支覆盖待修复) |
gitlab_list_mrs | 查看项目的合并请求列表 | ✅ 已实现 |
gitlab_get_mr_diff | 查看 MR 的详情与代码变更 | ✅ 已实现 |
gitlab_list_pipelines | 查看项目 CI/CD 流水线状态 | ✅ 已实现 |
gitlab_get_pipeline_jobs | 查看流水线 Job 详情,失败 Job 附日志 | ✅ 已实现 |
gitlab_list_issues | 查看项目 Issues,支持多维度筛选 | ✅ 已实现 |
gitlab_get_file | 查看仓库指定文件内容 | ✅ 已实现 |
gitlab_get_commit | 查看提交详情与代码 diff | ✅ 已实现 |
gitlab_get_project_summary | 一次调用返回项目综合概况(提交/MR/Pipeline) | ✅ 已实现(⚠️ 多分支覆盖待修复) |
gitlab_list_branches | 列出项目所有分支及最近提交时间,供 AI 查询活跃分支 | 🔲 待开发 |
gitlab_get_team_daily_activity | 按人聚合每日团队活动 | 🔒 暂缓 |
gitlab_get_stale_mrs | 返回所有超时未审核的 MR | 🔒 暂缓 |
A 层 — Skill:gitlab 对话技能
设计决策:保持一个 Skill,不拆分
| 考虑因素 | 结论 |
|---|---|
| 触发词重叠 | "代码"、"GitLab"、"提交"、"MR" 跨场景共用,拆分后 AI 常需同时加载多个 |
| 对话跨场景 | "boss-agi 什么情况"同时涉及提交 + MR + Pipeline |
| 渐进式加载效率 | 一次加载 SKILL.md 即覆盖所有场景 |
SKILL.md 内部结构
name: gitlab
trigger: 代码|GitLab|提交|MR|合并请求|仓库|分支|流水线|CI|CD|Issues|代码审查|代码贡献|谁提交|提交记录|Pipeline|构建
description: GitLab 研发管理查询与分析
tools: [见 B 层完整列表]
scope: allSKILL.md 正文按 6 个业务场景 组织(而非按 API 端点),每个场景说明:
- 典型用法和触发词
- 推荐的工具组合和调用顺序
- 角色权限规则(老板/组长/员工各看什么)
- 回复格式要求
覆盖的 6 个会话场景
| 场景 | 核心价值 | 涉及工具 |
|---|---|---|
| 项目状态速览 | 不开 GitLab 就知道项目动态 | list_projects + list_commits + get_project_summary |
| MR 生命周期 | 推动 MR review 流程 | list_mrs + get_mr_diff + get_stale_mrs |
| Pipeline 与部署 | CI 红灯第一时间感知 | list_pipelines + get_pipeline_jobs |
| 团队工作量洞察 | 量化研发产出 | get_contributions + get_team_daily_activity |
| 代码变更摘要 | 用业务语言翻译 diff | get_commit + get_mr_diff |
| Issues 与文件 | 快速查看 Issue 和文件内容 | list_issues + get_file |
权限规则(嵌入 SKILL.md)
角色 × 场景权限矩阵及越权查询引导流程详见 GitLab 研发管理 — 角色权限与场景覆盖。
B 层 — Python Tool 清单
所有工具暴露给 AI,通过 tool_use 调用。分为基础查询工具和场景增强工具。
参数命名约定:工具参数与 GitLab API v4 官方参数名保持一致。 下表中
id为 GitLab API 路径参数,表示项目 ID 或 URL 编码的namespace/project路径。
公共行为
所有工具共享:
- 从配置读取 GitLab URL + Token,verify_ssl=False(自签名证书)
- id 参数支持项目 ID(如 42)或 namespace/project 路径(如 "boss/boss-agi")
- 人名参数接受中文名,内部通过 PersonIndex 解析为 GitLab email/username
- 日期参数接受 YYYY-MM-DD,内部转换为 ISO 8601 格式传递给 API
- 分页统一使用 GitLab 官方 per_page + page 参数
- 返回格式化文本,直接呈现给用户
- 错误时返回可读的错误说明基础查询工具(10 个,已实现)
1. gitlab_list_projects — 列出项目
列出所有可访问的 GitLab 项目,含项目 ID、路径、默认分支、最近活动时间。
| GitLab API | GET /projects |
|---|
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
search | 否 | — | 按项目名、路径或描述关键词搜索 |
membership | 否 | true | 只显示当前用户参与的项目 |
simple | 否 | true | 返回精简字段,减少响应体积 |
order_by | 否 | last_activity_at | 排序字段(created_at / updated_at / last_activity_at / name) |
per_page | 否 | 20 | 每页返回数量(最大 100) |
服务场景:项目状态速览
2. gitlab_list_commits — 查询提交记录
查询项目的 git 提交记录,支持按分支、作者、日期范围筛选。
| GitLab API | GET /projects/:id/repository/commits |
|---|
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
id | 是 | — | 项目 ID 或路径 |
ref_name | 否 | — | 分支名、tag 名或 commit 范围 |
author | 否 | — | 按提交作者过滤(姓名或邮箱) |
since | 否 | — | 起始日期 ISO 8601(如 2026-03-01T00:00:00Z) |
until | 否 | — | 截止日期 ISO 8601 |
with_stats | 否 | true | 包含每次提交的代码增删统计 |
per_page | 否 | 20 | 每页返回数量(最大 100) |
服务场景:项目状态速览、团队工作量洞察
关键约束:
author官方支持按姓名或邮箱过滤;我们通过 PersonIndex 将中文名解析为email后传入author_name可能含空格(如"阿 远"),优先使用email匹配- 跨项目查询时需先
list_projects再逐项目遍历,注意 API 调速
3. gitlab_get_contributions — 代码贡献统计
按作者统计代码贡献量(提交次数 / 新增行数 / 删除行数)。
此工具组合两个 GitLab API,非单一接口映射:
| 模式 | GitLab API | 说明 |
|---|---|---|
| 全量统计 | GET /projects/:id/repository/contributors | 返回全部历史贡献(commits / additions / deletions) |
| 日期范围统计 | GET /projects/:id/repository/commits + 逐条聚合 | Contributors API 无日期筛选,需逐条 commit 聚合 |
Contributors API 官方参数:
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
id | 是 | — | 项目 ID 或路径 |
order_by | 否 | commits | 排序字段(name / email / commits) |
sort | 否 | asc | 排序方向(asc / desc) |
工具封装参数(在官方 API 之上扩展):
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
id | 是 | — | 项目 ID 或路径 |
author | 否 | — | 只看某人的贡献(工具层过滤,非 API 参数) |
since | 否 | — | 统计起始日期(触发逐条 commit 聚合模式,非 Contributors API 参数) |
until | 否 | — | 统计截止日期(同上) |
服务场景:团队工作量洞察
关键约束:
- Contributors API 官方无
since、until、author参数,日期范围统计通过 Commits API(with_stats=true)逐条聚合实现 - CE 18.x 的 Contributors API
additions/deletions返回 0,传日期范围时强制走逐条 commit 聚合
4. gitlab_list_mrs — MR 列表
查看项目的合并请求列表,支持按状态、作者、目标分支筛选。
| GitLab API | GET /projects/:id/merge_requests |
|---|
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
id | 是 | — | 项目 ID 或路径 |
state | 否 | opened | opened / merged / closed / locked / all |
author_username | 否 | — | 按 MR 创建者用户名筛选 |
reviewer_username | 否 | — | 按审核人用户名筛选 |
target_branch | 否 | — | 按目标分支筛选 |
source_branch | 否 | — | 按源分支筛选 |
created_after | 否 | — | MR 创建时间下限 ISO 8601 |
created_before | 否 | — | MR 创建时间上限 ISO 8601 |
order_by | 否 | created_at | 排序字段(created_at / updated_at) |
per_page | 否 | 10 | 每页返回数量(最大 100) |
服务场景:MR 生命周期
5. gitlab_get_mr_diff — MR 变更详情
查看指定 MR 的详情、变更文件列表及每个文件的 diff。
| GitLab API | GET /projects/:id/merge_requests/:merge_request_iid/changes |
|---|
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
id | 是 | — | 项目 ID 或路径 |
merge_request_iid | 是 | — | MR 的项目内编号(如 !42 中的 42) |
服务场景:MR 生命周期、代码变更摘要
关键约束:diff 内容每个文件最多显示 60 行,超出部分提示省略行数(工具层截断)
6. gitlab_list_pipelines — Pipeline 列表
查看项目的 CI/CD 流水线运行状态。
| GitLab API | GET /projects/:id/pipelines |
|---|
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
id | 是 | — | 项目 ID 或路径 |
ref | 否 | — | 按分支或 tag 筛选 |
status | 否 | — | created / waiting_for_resource / preparing / pending / running / success / failed / canceled / skipped / manual / scheduled |
username | 否 | — | 按触发用户筛选 |
sha | 否 | — | 按 commit SHA 筛选 |
order_by | 否 | id | 排序字段(id / status / ref / updated_at / user_id) |
per_page | 否 | 10 | 每页返回数量(最大 100) |
服务场景:Pipeline 与部署
7. gitlab_get_pipeline_jobs — Pipeline Job 详情
查看指定流水线中各 Job 的运行状态,失败 Job 自动附上日志末尾。
| GitLab API | GET /projects/:id/pipelines/:pipeline_id/jobs |
|---|
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
id | 是 | — | 项目 ID 或路径 |
pipeline_id | 是 | — | 流水线 ID |
scope | 否 | — | Job 状态过滤(created / pending / running / failed / success / canceled / skipped / manual),支持数组 |
include_retried | 否 | false | 是否包含重试的 Job |
服务场景:Pipeline 与部署
关键约束:失败 Job 自动附上日志末尾(最多 80 行),日志通过 GET /projects/:id/jobs/:job_id/trace 获取(工具层自动追加)
8. gitlab_list_issues — Issues 列表
查看项目的 Issues,支持按状态、指派人、标签、关键词筛选。
| GitLab API | GET /projects/:id/issues |
|---|
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
id | 是 | — | 项目 ID 或路径 |
state | 否 | opened | opened / closed / all |
assignee_username | 否 | — | 按指派人用户名筛选(支持数组) |
author_username | 否 | — | 按创建者用户名筛选 |
labels | 否 | — | 按标签筛选,多标签逗号分隔 |
search | 否 | — | 按标题和描述关键词搜索 |
milestone | 否 | — | 按里程碑筛选 |
created_after | 否 | — | 创建时间下限 ISO 8601 |
created_before | 否 | — | 创建时间上限 ISO 8601 |
order_by | 否 | created_at | 排序字段(created_at / updated_at / priority / due_date) |
per_page | 否 | 15 | 每页返回数量(最大 100) |
服务场景:Issues 与文件
9. gitlab_get_file — 文件内容
查看仓库中指定文件的内容。
| GitLab API | GET /projects/:id/repository/files/:file_path/raw |
|---|
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
id | 是 | — | 项目 ID 或路径 |
file_path | 是 | — | 文件路径(需 URL 编码,如 lib%2Fclass%2Erb) |
ref | 是 | — | 分支名、tag 名或 commit SHA(API 必填,工具默认 HEAD) |
服务场景:Issues 与文件
关键约束:
ref在 GitLab API 中为必填参数,工具层默认传HEAD(自动使用默认分支)- 文件超过 4000 字符时自动截断(工具层截断)
10. gitlab_get_commit — 提交详情与 diff
查看指定 commit 的详情及每个文件的 diff。
此工具调用两个 GitLab API:
| 步骤 | GitLab API | 说明 |
|---|---|---|
| 获取 commit 详情 | GET /projects/:id/repository/commits/:sha | 返回提交信息 + stats(默认包含) |
| 获取 commit diff | GET /projects/:id/repository/commits/:sha/diff | 返回每个文件的 diff(独立端点) |
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
id | 是 | — | 项目 ID 或路径 |
sha | 是 | — | 提交 SHA(完整或短 SHA) |
include_diff | 否 | true | 是否同时请求 diff 端点(工具层参数,控制是否调用第二个 API) |
服务场景:代码变更摘要
场景增强工具(3 个规划,1 个已实现)
解决高频多步编排场景,将 AI 侧的"遍历项目 → 逐条查询 → 聚合"下沉到 Python 层,减少调用次数和出错率。
分支查询工具(1 个,待开发)
14. gitlab_list_branches — 列出分支 🔲 待开发
列出项目所有分支及各分支最近提交时间,供 AI 识别活跃分支后针对性查询。
| GitLab API | GET /projects/:id/repository/branches |
|---|
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
project | 是 | — | 项目 ID 或路径 |
search | 否 | — | 按分支名关键词搜索(可选) |
active_days | 否 | 90 | 只返回最近 N 天有提交的活跃分支(工具层过滤) |
返回内容:分支名、最近提交时间、最近提交人、是否为默认分支、是否 protected
服务场景:项目状态速览、团队工作量洞察
开发背景:修复多分支覆盖问题的前置工具。list_commits / get_contributions / get_project_summary 在不指定分支时需先调此工具获取活跃分支列表,再并发查询各分支并按 SHA 去重合并
场景增强工具(3 个规划,1 个已实现)
11. gitlab_get_project_summary — 项目概况聚合
一次调用返回项目的综合概况。
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
project | 是 | — | 项目 ID 或路径 |
days | 否 | 3 | 统计最近 N 天 |
返回内容:
- 最近 N 天提交数 + 活跃贡献者
- Open MR 数量 + 最近 merged 数量
- 最新 Pipeline 状态
解决的痛点:"boss-agi 什么情况"原需 AI 自行编排 3 次调用(commits + mrs + pipelines),现在一次搞定
服务场景:项目状态速览
12. gitlab_get_team_daily_activity — 团队每日活动
暂不实现,后续迭代。 当前可通过 AI 组合
list_commits+ PersonIndex 实现类似效果。
一次调用返回按人聚合的每日活动。
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
date | 否 | 昨天 | 查询日期 YYYY-MM-DD |
team | 否 | — | 团队/组名,不传则全公司 |
返回内容:
- 按人分组:每人的提交列表(项目 + 标题 + 代码增删)
- 无提交的团队成员也列出(标注"无提交")
解决的痛点:"昨天大家干了啥"原需 AI 遍历所有项目 → 拉取 commits → PersonIndex 映射 → 按人聚合,容易遗漏或超时
服务场景:项目状态速览、团队工作量洞察
关键约束:自动应用权限过滤(组长只看本组成员、员工只看自己)
13. gitlab_get_stale_mrs — 超时未审 MR
暂不实现,后续迭代。 当前可通过 AI 组合
list_mrs+ 时间计算实现类似效果。
一次调用返回所有超时未审核的 MR。
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
hours | 否 | 24 | 超过多少小时算超时 |
project | 否 | — | 限定项目,不传则全公司扫描 |
返回内容:
- MR 标题 + 作者 + reviewer + 等待时长
- 按等待时长倒序
解决的痛点:"有没有卡着的 MR"原需遍历项目 + 筛选 + 计算时差,现在一次返回
服务场景:MR 生命周期
C 层 — Python 系统能力
权限过滤、越权拦截暂不实现,后续迭代。 当前通过 SKILL.md 中的权限规则文字约束 AI 行为。
不暴露给 AI,在 Tool 内部或中间件中自动运行。
| 能力 | 说明 | 实现位置 | 状态 |
|---|---|---|---|
| 权限过滤 | 根据用户角色(老板/组长/员工)自动过滤查询结果中的人员数据 | Tool 返回前的过滤逻辑 | 🔒 暂缓 |
| PersonIndex 集成 | author_email / username → 中文名自动映射 | Tool 内部调用 PersonIndex | ✅ 已实现 |
| CE 18.x 贡献统计 | Contributors API 返回 0 时自动降级为逐条 commit 聚合 | get_contributions 内部逻辑 | ✅ 已实现 |
| API 调速控制 | GitLab CE 默认 10 req/s/user 限流管理 | HTTP 客户端层 | ⚠️ 依赖默认 |
| 越权查询拦截 | 员工查他人、组长查外组个人时返回引导语而非数据 | Tool 返回前的权限检查 | 🔒 暂缓 |
| GitLab 账号绑定 | AI 对话中学习并绑定 GitLab 用户名 | link_platform_identity(已有) | ✅ 已实现 |
权限过滤流程
D 层 — 主动推送 🔒 暂缓
主动推送整体暂不实现,后续迭代。 包括定时扫描和 Webhook 事件两类。
非对话触发,由事件或定时任务驱动。复用 B 层 Tool + NotificationEngine + feishu-message。
定时扫描类
| 推送场景 | 扫描频率 | 触发条件 | 推送对象 | 推送内容 |
|---|---|---|---|---|
| MR 超时催审 | 每 4 小时 | opened MR 超过 24h 无审核动作 | reviewer(飞书) | "你有一个 MR 待审核已超 24h:{标题},作者:{作者}" |
| 本周无提交提醒 | 周四下午 | 团队成员本周 0 commit | 组长(飞书) | "{姓名} 本周暂无代码提交,需要关注吗?" |
实现依赖:gitlab_get_stale_mrs / gitlab_get_team_daily_activity + NotificationEngine
Webhook 事件类
| 推送场景 | GitLab 事件 | 推送对象 | 推送内容 |
|---|---|---|---|
| CI 失败告警 | Pipeline Hook(status=failed) | 最后提交者(飞书) | "{项目} 的 Pipeline 失败了,失败 Job:{job_name}" |
| 直推 main 提醒 | Push Hook(branch=main/master) | 提交者(飞书) | "你刚直接 push 到了 {项目} 的 main 分支,团队规范建议走 MR 流程" |
| MR 被打回 | MR Hook(action=close) | MR 作者(飞书) | "你的 MR !{iid} 被 {closer} 打回了" |
| MR 被合并 | MR Hook(action=merge) | MR 作者(飞书) | "你的 MR !{iid} 已被 {merger} 合并 ✓" |
实现依赖:GitLab Webhook 接收端点 + 事件解析 + PersonIndex + NotificationEngine
推送约束
| 约束 | 说明 |
|---|---|
| 防骚扰 | 遵循 NotificationEngine 的冷却/时段/每日上限规则 |
| 语气 | 员工侧友善引导,不施压("建议"而非"必须") |
| 正向反馈 | MR 合并通知简短正向,让员工感知闭环 |
| 工作时段 | 仅在工作时间推送(9:00-19:00),紧急除外 |
复用的现有能力
| 能力 | 本场景用途 | 状态 |
|---|---|---|
| PersonIndex | GitLab username/email → 中文名映射,组长/组员关系查询 | ✅ 已实现 |
| link_platform_identity | AI 在对话中学习绑定 GitLab 账号 | ✅ 已实现 |
| feishu-message Skill | 催审通知、异常告警推送 | ✅ 已实现 |
| NotificationEngine | 主动通知的防骚扰控制(冷却/时段/每日上限) | ✅ 已实现 |
| 身份识别 + 三级权限 | 自动识别对话用户角色,应用权限规则 | ✅ 已实现 |
全局约束
| 约束 | 说明 |
|---|---|
| 只读查询 | 不创建、不修改、不删除任何仓库数据 |
| GitLab CE 18.2 | 无 Code Review Analytics、无 Merge Train |
| SSL 自签名 | verify_ssl=False |
| API 调速 | GitLab CE 默认限流 10 req/s/user |
| Contributors 缺陷 | CE 18.x 的 additions/deletions 返回 0,需逐条 commit 聚合代码量 |
| ⚠️ 多分支覆盖 | 当前提交统计只覆盖默认分支(master/main),feature/develop/hotfix 等活跃分支数据缺失;修复方案:新增 gitlab_list_branches + 各查询工具并发多分支查询并按 SHA 去重 |
| 安全敏感 | 代码审查涉及密钥等敏感内容时需标记风险,发现真实密钥立即提醒 |
实现路线
Phase 1:被动查询(当前重点)
基础查询工具 + gitlab SKILL.md 场景化重写
| # | 事项 | 状态 |
|---|---|---|
| 1 | 基础查询工具 10 个 | ✅ 已实现 |
| 2 | 权限过滤中间件(C 层) | 🔒 暂缓,后续迭代 |
| 3 | 越权查询拦截(C 层) | 🔒 暂缓,后续迭代 |
| 4 | SKILL.md 按场景重写(A 层) | ✅ 已实现 |
Phase 2:场景增强 + 多分支修复
| # | 事项 | 状态 |
|---|---|---|
| 5 | gitlab_get_project_summary | ✅ 已实现 |
| 6 | 多分支修复:新增 gitlab_list_branches 工具 | 🔲 待开发 |
| 7 | 多分支修复:gitlab_list_commits — branch 不填时查所有活跃分支并去重 | 🔲 待开发 |
| 8 | 多分支修复:gitlab_get_contributions — 日期范围模式覆盖所有活跃分支 | 🔲 待开发 |
| 9 | 多分支修复:gitlab_get_project_summary — 提交统计覆盖所有活跃分支 | 🔲 待开发 |
| 10 | gitlab_get_team_daily_activity | 🔒 暂缓,后续迭代 |
| 11 | gitlab_get_stale_mrs | 🔒 暂缓,后续迭代 |
Phase 3:主动推送 🔒 暂缓
整体暂不实现,后续迭代。
| # | 事项 | 状态 |
|---|---|---|
| 12 | GitLab Webhook 接收端点 | 🔒 暂缓 |
| 13 | Webhook 事件解析 + 推送逻辑(CI 失败、直推 main、MR 状态变更) | 🔒 暂缓 |
| 14 | 定时扫描任务(MR 超时催审、无提交提醒) | 🔒 暂缓 |