GitLab 工作流助手,严格遵循团队规范。用于 MR 管理、代码审查、CI/CD 状态查询、分支管理和合并操作。通过 MorphixAI 代理安全访问 GitLab API。
通过 mx_gitlab 工具管理 GitLab 项目。严格遵守团队规范。
openclaw plugins install openclaw-morphixaimk_xxxxxx 密钥export MORPHIXAI_API_KEY="mk_your_key_here"mx_link 工具链接(app: gitlab)mx_gitlab 工具所有 action 的参数命名:
| 参数 | 说明 |
|---|---|
project | 项目 ID(数字字符串)或路径(group/repo),不是 project_id |
mr_iid | MR 在项目内的序号,不是 merge_request_iid |
pipeline_id | Pipeline 的全局 ID |
⚠️
description字段必须使用真实换行符,不要使用\n字面量字符串。错误示例(在 GitLab 上会显示为
\n):description: "改动\n- 修复 bug\n- 新增功能"正确示例(使用 YAML 多行字符串):
description: | ## 改动 - 修复 bug - 新增功能 ## 测试 - 单元测试通过
获取 MR 代码变更时,按以下顺序尝试:
本地仓库 + git 命令是最可靠的代码审查方式:
第一步:查找本地仓库路径
# nodes.run — 在本机执行
find ~/www -maxdepth 4 -type d -name '<仓库名>'
# 例:find ~/www -maxdepth 4 -type d -name 'tanka-2b-web'
第二步:fetch 最新数据
# nodes.run — 工作目录切换到仓库路径
cd ~/www/<项目路径> && git fetch origin
第三步:获取 MR 的 commits(需要知道源分支和目标分支)
# 查看 MR 分支间的 commit 列表
git log origin/<target-branch>..origin/<source-branch> --oneline
# 示例(MR: feat/zoom-v2/main → uat-tanka-oh)
git log origin/uat-tanka-oh..origin/feat/zoom-v2/main --oneline
第四步:获取文件变更统计
git diff --stat origin/<target-branch>...origin/<source-branch>
# 示例
git diff --stat origin/uat-tanka-oh...origin/feat/zoom-v2/main
第五步:获取具体文件的 diff
# 全量 diff(大 MR 慎用,建议指定文件)
git diff origin/<target-branch>...origin/<source-branch>
# 指定文件 diff(推荐)
git diff origin/<target-branch>...origin/<source-branch> -- src/path/to/file.ts
# 只看特定目录
git diff origin/<target-branch>...origin/<source-branch> -- src/components/
当本地不存在仓库时,通过 MorphixAI 代理调用 GitLab API。 注意:大型 MR 的 diff 可能因响应体过大返回 400,此时只能使用本地 git。
mx_link:
action: proxy
account_id: <gitlab-account-id>
method: GET
url: https://gitlab.com/api/v4/projects/<project-id>/merge_requests/<mr-iid>/changes
可用的 MR 相关 API:
GET /api/v4/projects/{id}/merge_requests/{iid} — MR 详情GET /api/v4/projects/{id}/merge_requests/{iid}/changes — 文件变更(可能因大小失败)GET /api/v4/projects/{id}/merge_requests/{iid}/discussions — Discussion 线程GET /api/v4/projects/{id}/merge_requests/{iid}/notes — 评论列表POST /api/v4/projects/{id}/merge_requests/{iid}/notes — 发表评论GET /api/v4/projects/{id}/merge_requests/{iid}/approvals — 审批状态feature/JIRA-{ID}-{简短描述} — 新功能fix/JIRA-{ID}-{简短描述} — bug 修复release/v{X.Y.Z} — 发布分支hotfix/v{X.Y.Z}-{描述} — 生产热修复{Scope}: {action} {description}
SDK: add message retry logicmx_gitlab:
action: get_user
mx_gitlab:
action: list_projects
per_page: 10
mx_gitlab:
action: get_project
project: "12345"
列出 MR:
mx_gitlab:
action: list_merge_requests
project: "12345"
state: "opened"
创建 MR:
mx_gitlab:
action: create_merge_request
project: "12345"
source_branch: "feature/JIRA-123-user-login"
target_branch: "main"
title: "[JIRA-123] 实现用户登录功能"
description: "## 改动\n- 实现 JWT 登录\n\n## 测试\n- 单元测试通过\n\n## 关联\n- JIRA-123"
审批 MR:
mx_gitlab:
action: approve_merge_request
project: "12345"
mr_iid: 42
查看单条 MR 详情(含合并就绪状态):
mx_gitlab:
action: get_merge_request
project: "12345"
mr_iid: 42
返回关键字段:
detailed_merge_status: mergeable(可合并)/ preparing(准备中,需等待)/ checking(检查中)/ ci_must_pass(CI 未通过)/ not_approved(未获批准)/ discussions_not_resolved(有未解决讨论)has_conflicts: 是否有冲突blocking_discussions_resolved: 阻塞性讨论是否已解决pipeline: 最新 Pipeline 状态合并前必须先检查状态(重要):
⚠️ 直接调用
merge_merge_request而不检查状态会导致 500 错误(MR 未就绪时 GitLab 拒绝合并)
# 正确流程:
1. mx_gitlab: get_merge_request → 确认 detailed_merge_status === "mergeable"
2. 如果是 "preparing" 或 "checking" → 等待后重试 get_merge_request
3. 如果是 "ci_must_pass" → CI 未通过,不能合并
4. 如果是 "not_approved" → 需要审批,先 approve_merge_request
5. 确认 mergeable 后 → mx_gitlab: merge_merge_request
合并 MR:
mx_gitlab:
action: merge_merge_request
project: "12345"
mr_iid: 42
✅
merge_merge_request会自动检查detailed_merge_status,若 MR 未就绪会直接返回错误和原因,无需手动 pre-check。
更新 MR(设置 Reviewer / Assignee / 标签等):
# 先搜索 GitLab 用户 ID
mx_gitlab:
action: search_users
search: "username_or_name"
# 再设置 reviewer(使用搜索结果中的 id 字段)
mx_gitlab:
action: update_merge_request
project: "12345"
mr_iid: 42
reviewer_ids: [12345]
查看 Pipeline:
mx_gitlab:
action: list_pipelines
project: "12345"
per_page: 5
重试失败的 Pipeline:
mx_gitlab:
action: retry_pipeline
project: "12345"
pipeline_id: 67890
列出 Issue:
mx_gitlab:
action: list_issues
project: "12345"
state: "opened"
创建 Issue:
mx_gitlab:
action: create_issue
project: "12345"
title: "Bug: 登录页面白屏"
description: "## 问题\n在 Safari 下登录页面白屏\n\n## 复现\n1. 打开 Safari\n2. 访问 /login"
labels: ["bug", "frontend"]
列出分支:
mx_gitlab:
action: list_branches
project: "12345"
search: "feature/"
标题:[JIRA-{ID}] {描述}
描述必须包含:
至少指定 1 个 Reviewer。单个 MR 最多 500 行变更。
Review MR 时,按顺序检查所有项目:
所有项通过才能 approve。评论具体问题时引用行号。
1. mx_gitlab: list_merge_requests, project: "<id>", state: "opened"
→ 获取 MR 信息(source_branch, target_branch, mr_iid)
2. nodes.run: find ~/www -maxdepth 4 -type d -name '<repo>'
→ 查找本地仓库路径
3. nodes.run: cd <repo-path> && git fetch origin
→ 更新远端分支数据
4. nodes.run: git log origin/<target>..origin/<source> --oneline
→ 查看 commit 列表
5. nodes.run: git diff --stat origin/<target>...origin/<source>
→ 查看文件变更统计
6. nodes.run: git diff origin/<target>...origin/<source> -- <关键文件>
→ 深入审查关键文件的 diff
7. mx_gitlab: list_pipelines, project: "<id>" → 确认 CI 状态
8. mx_gitlab: approve_merge_request, project: "<id>", mr_iid: <iid>(审查通过后)
1. mx_gitlab: get_user → 获取用户名
2. mx_gitlab: list_merge_requests, project: "<id>", state: "opened"
→ 列出 open 状态的 MR
3. mx_gitlab: list_pipelines, project: "<id>" → 检查 CI 状态
1. mx_gitlab: create_merge_request
project: "<id>", source_branch: "feature/xxx", target_branch: "main"
title: "[JIRA-xxx] desc"
2. mx_gitlab: get_merge_request, project: "<id>", mr_iid: <iid>
→ 等待 detailed_merge_status 变为 "mergeable"
(刚创建后状态为 "preparing",需要等待 GitLab 完成检查)
3. mx_gitlab: list_pipelines, project: "<id>" → 确认 CI 通过
4. mx_gitlab: merge_merge_request, project: "<id>", mr_iid: <iid> → 合并
1. mx_gitlab: list_pipelines, project: "<id>", status: "failed"
2. mx_gitlab: retry_pipeline, project: "<id>", pipeline_id: <id>
1. mx_gitlab: search_users, search: "reviewer_name"
→ 从结果中找到目标用户的 id(数字)
2. mx_gitlab: update_merge_request
project: "<id>", mr_iid: <iid>, reviewer_ids: [<user_id>]
⚠️ 心跳(HEARTBEAT)默认间隔 30m,Anthropic setup-token 下为 1h,不适合实时监控。
推荐做法:将监控任务写入
HEARTBEAT.md,心跳触发时自动检查:## 待监控 - Pipeline #10164 (project: tanka-electron):等待完成,完成后通知用户或用户要求"立即检查"时,直接调用:
mx_gitlab: list_pipelines, project: "<id>", per_page: 5对比 pipeline id 和状态,判断是否完成。
project 参数:数字 ID(如 "12345")或路径(如 "my-group/my-project"),通过 list_projects 或 get_project 获取mr_iid 是 MR 在项目内的序号(非全局 ID),从 list_merge_requests 或 create_merge_request 返回结果中获取account_id 参数通常省略,工具自动检测已链接的 GitLab 账号mx_link proxy 获取 MR diff 可能因响应体过大返回 400,优先使用本地 git文档与源码:GitHub