返回 Skill 列表
extension
分类: 开发与工程无需 API Key

RoboNeo-auto-fix-jira-bug

自动修复 Jira Bug 的端到端流程。根据 Jira 链接获取 bug 详情与附件,分析是否属于本项目前端代码问题,修复代码并提交,合并到 pre 环境,最后更新 Jira 状态为已解决并打上 AI解决 标签。用户提供 Jira bug 链接时使用。

person作者: zhaoweihanhubclawhub

自动修复 Jira Bug 并部署

适用场景

用户提供一个 Jira issue 链接(如 https://jira.meitu.com/browse/ROB-2681),要求自动修复该 bug、部署到 pre 环境并更新 Jira 状态。

前置条件

  • 当前工作区为目标前端项目仓库,且在开发分支上
  • 工作区无未提交更改(先 git status 检查)
  • Omnibus MCP Server 已启用(提供 Jira 工具)
  • merge-dev-to-pre-or-beta skill 可用

操作流程

按顺序执行以下 6 个步骤,每步完成后再进入下一步。


步骤 1:解析 Jira 链接并获取 Bug 详情

从用户提供的链接中提取 issue key(如 ROB-2681)。

  1. 调用 jira_get_issue 获取 issue 详情(expand 设为 editmeta,transitions):
CallMcpTool: server=user-Omnibus, toolName=jira_get_issue
arguments: { "issueKey": "<ISSUE_KEY>", "expand": "editmeta,transitions" }
  1. 调用 jira_get_attachments 获取附件列表(截图、视频等):
CallMcpTool: server=user-Omnibus, toolName=jira_get_attachments
arguments: { "issueKey": "<ISSUE_KEY>" }
  1. 从返回结果中提取以下关键信息:
    • 标题(summary)
    • 描述(description)— bug 的文字描述
    • 重现步骤(通常在 description 或自定义字段中)
    • 期望结果实际结果
    • 附件(截图/视频 URL)— 尝试通过 WebFetch 或 Read 工具查看图片内容
    • editmeta — 记录可编辑字段及其 allowedValues,后续更新状态时需要
    • transitions — 记录可用的状态流转及其 ID,找到「已解决」对应的 transitionId

步骤 2:分析 Bug 是否属于本项目代码问题

根据步骤 1 获取的信息,结合项目代码进行分析:

  1. 理解 bug 描述:仔细阅读标题、描述、重现步骤、期望/实际结果
  2. 查看附件:如有截图或视频,通过工具查看以理解 bug 现象
  3. 通过关键词定位代码:先根据下方「关键词 → 代码位置映射」缩小搜索范围,再用 SemanticSearch / Grep / Glob 精确定位
  4. 判断归属

| 判断结果 | 后续动作 | |---------|---------| | 是本项目前端代码 bug | 继续步骤 3 | | 非本项目 bug(后端/其他项目/配置/环境问题) | 停止流程,通知用户原因,并建议转给对应负责方 | | 信息不足无法判断 | 暂停流程,向用户说明需要补充的信息 |


关键词 → 代码位置映射

根据 bug 描述中的关键词,快速定位到对应的代码区域:

业务模块

| 关键词 | 代码位置 | 说明 | |--------|---------|------| | 工作流、流程、flow、SOP | packages/roboneo-sdk/src/pages/RoboneoFlow 及子组件 | 工作流相关页面与逻辑 | | 画布、canvas、无限画布、拖拽 | packages/roboneo-sdk/src/pages/RoboneoCanvas 及子组件 | 画布相关页面与逻辑 | | Agent、智能体、对话 | packages/roboneo-sdk/src/pages/RoboneoAgent 及子组件 | Agent 相关页面与逻辑 | | Agent 分享封面、分享封面页、share cover | packages/roboneo-sdk/src/pages/RoboneoShareCover 及子组件 | Agent 分享封面页 | | Agent 分享、分享页、share | packages/roboneo-sdk/src/pages/RoboneoShare 及子组件 | Agent 分享页 | | 工作流分享、流程分享、flow share | packages/roboneo-sdk/src/pages/RoboneoFlowShare 及子组件 | 工作流分享页 |

SDK / npm 包

| 关键词 | npm 包 | 说明 | |--------|--------|------| | 登录、注册、账号、鉴权、token | @meitu/account 相关包 | 账号 SDK | | 订阅、会员、付费、套餐、权益 | @meitu/subscribe 相关包 | 订阅 SDK | | 客服、反馈、工单、帮助 | @meitu/feedback 相关包 | 客服 SDK | | JSBridge、端能力、Native、app 交互 | @meitu/hogger 相关包 | App 交互 SDK | | 画布引擎、infinite-canvas、缩放、平移 | @meitu/whee-infinite-canvas 相关包 | 画布 SDK | | 上传、文件上传、图片上传、upload | @meitu/upload 相关包 | 上传 SDK |

定位策略:

  1. 先匹配关键词确定模块/SDK 范围
  2. 若命中业务模块 → 在对应目录下搜索
  3. 若命中 SDK 包 → 先在 node_modules/<包名> 中查看接口定义,再在项目代码中搜索该包的调用处
  4. 若 bug 涉及 SDK 包内部逻辑(非调用方式问题)→ 该 bug 可能不属于本项目,停止流程并通知用户

步骤 3:修复 Bug

确认是本项目前端代码 bug 后,进行修复:

  1. 定位根因:根据步骤 2 的分析结果,精确定位出问题的代码位置
  2. 制定修复方案:在修改前先向用户简要说明修复思路
  3. 实施修复:使用编辑工具修改代码
  4. 检查质量
    • 使用 ReadLints 检查修改后的文件是否有 linter 错误
    • 确认修复不会引入新问题
  5. 记录修复信息(供后续填写 Jira 使用):
    • BUG_CAUSE:bug 产生原因(简明扼要)
    • BUG_SOLUTION:bug 解决方案(简明扼要)
    • BUG_IMPACT:bug 影响范围(如:影响哪些页面/功能/用户群)

完成修复后,等待用户确认代码无误(用户 keep 所有改动)后再进入步骤 4。


步骤 4:生成 Commit 并提交

用户确认全部代码改动后:

  1. 执行 git statusgit diff 查看变更
  2. 生成 commit message,格式:
fix(<模块>): <简短描述>

<ISSUE_KEY>: <bug 标题>
- 原因: <BUG_CAUSE>
- 方案: <BUG_SOLUTION>
  1. 提交 commit:
git add <changed_files>
git commit -m "<commit_message>"

步骤 5:合并到 pre 环境

调用 merge-dev-to-pre-or-beta skill,目标分支为 pre

执行该 skill 的完整流程:

  1. 记录当前开发分支并拉取最新
  2. 切换到 pre 分支并拉取最新
  3. 合并开发分支到 pre 并推送
  4. 切回开发分支
  5. 同步开发分支到远端

步骤 6:更新 Jira Bug 状态

合并成功后,更新 Jira issue:

6.1 流转状态为「已解决」

先从步骤 1 获取的 transitions 中找到「已解决」/「Resolved」对应的 transitionId

调用 jira_transition_issue

CallMcpTool: server=user-Omnibus, toolName=jira_transition_issue
arguments: {
  "issueKey": "<ISSUE_KEY>",
  "transitionId": "<RESOLVED_TRANSITION_ID>",
  "fields": { ... },  // 根据 editmeta 填写必填字段
  "comment": "AI 自动修复并已部署到 pre 环境。\n原因: <BUG_CAUSE>\n方案: <BUG_SOLUTION>\n影响范围: <BUG_IMPACT>"
}

transition 时的 fields 需要根据步骤 1 获取的 editmeta 来构建,常见必填字段:

  • bug 产生原因(对应 customfield,从 editmeta 中查找字段名包含「原因」的字段)
  • bug 解决方案(对应 customfield,从 editmeta 中查找字段名包含「方案」或「解决」的字段)
  • bug 影响范围(对应 customfield,从 editmeta 中查找字段名包含「影响」或「范围」的字段)

如果这些字段是 option 类型,从 allowedValues 中选择最匹配的值。 如果是 string 类型,直接填入文本。

6.2 更新 issue 标签

调用 jira_update_issue 为 issue 添加标签 AI解决

CallMcpTool: server=user-Omnibus, toolName=jira_update_issue
arguments: {
  "issueKey": "<ISSUE_KEY>",
  "fields": {
    "labels": ["AI解决", ...原有labels]
  }
}

注意:labels 是数组,需要保留原有标签并追加 AI解决,不要覆盖。


流程中断处理

| 中断情况 | 处理方式 | |---------|---------| | bug 不属于本项目 | 停止流程,通知用户并说明原因 | | 信息不足无法分析 | 暂停流程,向用户说明需要补充的信息 | | 修复方案不确定 | 向用户说明多种方案,由用户选择后继续 | | 用户未 keep 代码改动 | 等待用户确认后再提交 commit | | 合并冲突 | 尝试解决冲突,如无法自动解决则通知用户手动处理 | | Jira 状态流转失败 | 通知用户手动操作,提供需要填写的信息 |

注意事项

  • 修复代码时以前端代码为主,项目技术栈请根据实际仓库判断(React / React Native / Vue 等)
  • commit message 使用 Conventional Commits 风格
  • 操作 Jira 前务必先通过 jira_get_issue(expand=editmeta,transitions)获取元数据
  • 更新 labels 时保留原有标签,追加 AI解决
  • 整个流程中保持向用户汇报进度