원클릭으로
issue-analyze
分析 GitLab Issue 的影響範圍,跨 repo 搜尋相關程式碼與 MR,產生影響評估報告。當使用者說「分析 issue」、「analyze issue」、「issue 影響分析」、「這個 issue 會影響什麼」、「評估 issue」時觸發。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
分析 GitLab Issue 的影響範圍,跨 repo 搜尋相關程式碼與 MR,產生影響評估報告。當使用者說「分析 issue」、「analyze issue」、「issue 影響分析」、「這個 issue 會影響什麼」、「評估 issue」時觸發。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | issue-analyze |
| description | 分析 GitLab Issue 的影響範圍,跨 repo 搜尋相關程式碼與 MR,產生影響評估報告。當使用者說「分析 issue」、「analyze issue」、「issue 影響分析」、「這個 issue 會影響什麼」、「評估 issue」時觸發。 |
分析 GitLab Issue 的影響範圍。跨 30+ 子專案搜尋相關程式碼與 MR,產生結構化影響評估報告。Phase 1 為「觀察者模式」,只產生報告不建 MR。
/issue-analyze #123
/issue-analyze --project=backend #45
/issue-analyze https://gitlab.example.com/BizForm/Home/-/issues/123
/issue-analyze #123 --scope=bizform-web,backend,elsa-server
/issue-analyze #123 --depth=shallow
/issue-analyze #123 --write-back
| 參數 | 必要 | 說明 |
|---|---|---|
#IID 或 URL | 是 | 目標 Issue |
--project | 否 | 專案 key(預設 defaultProjectPath) |
--scope | 否 | 限定搜尋的子專案(逗號分隔 key),預設使用智慧選取 |
--depth | 否 | shallow(僅搜尋 repo tree)/ deep(含檔案內容,預設) |
--write-back | 否 | 將報告寫回 Issue 描述底部 |
需要 .issue-config.json 存在。按以下優先順序搜尋:
./.issue-config.json~/.claude/.issue-config.json若均不存在,提示:「找不到 .issue-config.json,請先執行 /issue-init 建立設定。」
從搜尋到的 .issue-config.json 讀取(專案層級優先於使用者層級):
gitlab.projects — 所有可搜尋的子專案清單gitlab.defaultProjectPath / defaultProjectIdanalyze 設定區塊(搜尋深度、安全策略、專案領域映射等)檢查邏輯:
.issue-config.json 不存在 → 提示執行 /issue-init--project 參數 → 映射到 projects[key] 取得 projectId / projectPathanalyze.securityPolicy,初始化安全過濾器三個呼叫可並行:
mcp__GitLab_communication_server__get_issue — 取得 Issue 詳細內容mcp__GitLab_communication_server__list_issue_discussions — 取得所有討論串mcp__GitLab_communication_server__list_issue_links — 取得關聯 IssueAI 語義萃取: 從 title、description、discussions、labels 中萃取:
顯示進度:
📋 Issue #123: [Bug] 計算欄位在子表單中顯示 NaN
Labels: bug, frontend
討論數: 3
萃取關鍵字: 計算欄位, SubForm, NaN, CalculationEngine
使用 config 中 analyze.projectDomains 的靜態映射表,將關鍵字比對到專案領域標籤。
映射邏輯範例:
| 關鍵字類型 | 關鍵字範例 | 映射到專案 |
|---|---|---|
| 前端 UI | 表單元件、CSS、Vue、React | bizform-web, formeditor |
| 後端 API | Controller、API、Swagger | backend |
| Workflow | 簽核、Elsa、流程 | elsa-server, elsa-client |
若使用者用 --scope 明確指定,跳過 Layer 1。
→ 選出 5-8 個候選專案
對候選專案使用 mcp__GitLab_communication_server__get_repository_tree(recursive 必須為 boolean 值 true)。
AI 根據檔案結構判斷:
安全過濾: 所有路徑必須通過安全檢查:
securityPolicy.blockedPaths → 跳過securityPolicy.allowedExtensions → 否則跳過securityPolicy.blockedProjects → 跳過整個專案→ 確認 3-5 個相關專案 + 各專案可能相關的檔案路徑
使用 mcp__GitLab_communication_server__get_file_contents 讀取相關檔案。
限制:
analyze.maxFilesPerRepo(預設 10)個檔案對每個相關專案(可並行):
mcp__GitLab_communication_server__list_merge_requests — search 已合併 MR(state="merged")mcp__GitLab_communication_server__list_merge_requests — search 開放中 MR(state="opened")搜尋關鍵字策略:
每專案最多取 analyze.maxMRsPerRepo(預設 10)個 MR。
對最相關的 MR(最多 analyze.maxDiffMRs,預設 5 個),取得 diff:
mcp__GitLab_communication_server__get_merge_request_diffs從 diff 萃取:修改檔案、新增/刪除行數、修改的函式/類名。
| 分數來源 | 權重 |
|---|---|
| Issue 描述中直接提及的檔案 | +40 |
| MR diff 中修改過的檔案 | +30 |
| Repo Tree 中目錄名稱匹配 | +15 |
| 檔案內容中包含關鍵字 | +10 |
| 關聯 Issue 提及的檔案 | +5 |
| 等級 | 分數 | 含義 |
|---|---|---|
| HIGH | 80-100 | 影響範圍明確,建議可直接採用 |
| MEDIUM | 50-79 | 影響範圍大致正確,建議人工複查 |
| LOW | 20-49 | 資訊不足,僅供參考 |
| INSUFFICIENT | 0-19 | 無法有效分析,建議補充 Issue 描述 |
信心度因子加權:
S — 1-2 檔案,單專案M — 3-5 檔案或跨 2 專案L — 6-10 檔案或跨 3+ 專案XL — 10+ 檔案或核心模組變更報告以 Markdown 格式輸出到終端機,包含:
---
## 🔍 Issue 影響分析報告
> 由 Claude Code `/issue-analyze` 自動產生 | {timestamp}
> [信心度: {LEVEL} ({score}/100)] | [複雜度: {S/M/L/XL}]
### 摘要
| 項目 | 值 |
|------|-----|
| Issue | #{iid} - {title} |
| 類型 | {Bug/Feature} |
| 影響專案 | {project1}, {project2} |
| 影響檔案 | {N} 個 |
| 相關 MR | {N} 個 ({merged} merged, {opened} open) |
| 預估複雜度 | {S/M/L/XL} |
### 影響檔案
#### {project-name} ({N} 檔案)
| 檔案 | 相關性 | 說明 |
|------|--------|------|
| `{path}` | {score}/100 | {description} |
### 相關 MR
| MR | 專案 | 狀態 | 相關性 |
|----|------|------|--------|
| !{iid} - {title} | {project} | {merged/open} | {description} |
### 建議修改方向
1. **主要修改點**: {description}
2. **連帶修改**: {description}
3. **驗證點**: {description}
### 風險與注意事項
- {risk items}
### 安全過濾記錄
{filtered items or "無被過濾的項目"}
### 分析方法
- 搜尋專案: {list}
- 搜尋關鍵字: {keywords}
- Layer 1 排除: {N} 個不相關專案
- Repo Tree 掃描: {N} 個專案
- 檔案內容讀取: {N} 個檔案
- MR 搜尋: {N} 個專案, 找到 {N} 個相關 MR
---
## 🔍 Issue 影響分析摘要
> [信心度: {LEVEL}] | [複雜度: {S/M/L/XL}] | {date} by Claude Code
**影響檔案 ({N})**:
- `{project}`: {file1}, {file2}
**相關 MR**: !{iid} ({state}), ...
**建議方向**: {summary}
---
分析報告完成後,使用 AskUserQuestion 詢問:
寫回方式 — 使用 GraphQL createNote mutation:
mutation CreateNote($noteableId: NoteableID!, $body: String!) {
createNote(input: {
noteableId: $noteableId
body: $body
}) {
note { id body url createdAt }
errors
}
}
變數:
noteableId: gid://gitlab/Issue/{issue_id}(注意:使用 get_issue 回傳的 id 欄位,非 iid)body: 報告內容,使用 <details> HTML 標籤包裝為可折疊區塊報告格式(折疊版):
<details>
<summary>
## 🔍 Issue 影響分析報告
> 信心度: **{LEVEL} ({score}/100)** | 複雜度: **{S/M/L/XL}** | {date} by Claude Code `/issue-analyze`
</summary>
{完整報告內容...}
</details>
---
*由 Claude Code `/issue-analyze` 自動產生 — [Phase 1 觀察者模式]*
注意:
create_issue_note(有 404 "Discussion Not Found" bug)update_issue 修改描述(會污染原始描述)createNote 建立獨立 comment,不影響原始 Issue 內容✓ Issue #{iid} 影響分析完成
信心度: {LEVEL} ({score}/100)
複雜度: {S/M/L/XL} ({N} 檔案, {N} 專案)
影響範圍:
- {project}: {N} 檔案 ({file list})
相關 MR: {N} 個 ({merged} merged, {open} open)
建議修改方向: {summary}
報告已寫回 Issue: {是/否}
| Step | 工具 | 用途 | 可並行 |
|---|---|---|---|
| 2 | get_issue | 取得 Issue 詳細內容 | 是 (2a-2c) |
| 2 | list_issue_discussions | 取得討論串 | 是 |
| 2 | list_issue_links | 取得關聯 Issue | 是 |
| 3 | get_repository_tree | 掃描 repo 檔案結構 | 是 (5-8 並行) |
| 3 | get_file_contents | 讀取檔案內容 | 批次 (最多 30) |
| 4 | list_merge_requests | 搜尋相關 MR | 是 (每專案並行) |
| 4 | get_merge_request_diffs | 取得 MR diff | 是 (最多 5 並行) |
| 7 | get_issue | 取得 Issue 全域 ID(寫回用) | - |
| 7 | execute_graphql | GraphQL createNote 建立 comment | - |
| 允許 | 禁止 |
|---|---|
| 讀取 Issue / 討論 / 關聯 | 建立/刪除 Issue |
| 讀取 repo 檔案結構和內容 | 任何 git push / MR 建立 |
| 搜尋 MR 和 diff | 任何 MR 操作(approve, merge) |
| 寫回分析報告到 Issue 討論串(comment) | 修改 Issue 的 labels/assignee/state |
blockedPaths: 禁止讀取的路徑 glob(.env、secrets、CI/CD 等)blockedProjects: 禁止搜尋的專案(infra、deploy 等)allowedExtensions: 只允許的副檔名白名單(.cs、.ts、.tsx、.js 等)| 模式 | API 呼叫數 | 預估耗時 |
|---|---|---|
| shallow | 15-25 | 10-15 秒 |
| deep(預設) | 25-58 | 20-40 秒 |
get_repository_tree 的 recursive 參數必須傳 boolean true,不能傳字串 "true"create_issue_note 有 404 bug("Discussion Not Found"),寫回改用 GraphQL createNote mutation<details> 折疊區塊包裝報告,避免佔據版面noteableId 使用 gid://gitlab/Issue/{id} 格式,id 來自 get_issue 回傳的 id 欄位(非 iid)智慧建立 GitLab Issue,支援討論式建立和指令式建立。當使用者討論 bug/功能需求到一個段落時,主動詢問是否建立 Issue。也可用指令直接建立。當使用者說「建立 issue」、「create issue」、「新增 issue」、「開 issue」、「開票」,或在討論 bug/feature 時說「好」、「開吧」、「建起來」時觸發。
將當前 LLM 對話討論轉為結構化 GitLab Issue,整合 issue-create 和 issue-split 功能。當使用者說「把討論建成 issue」、「discuss to issue」、「整理成 issue」、「從對話建立 issue」時觸發。
互動式初始化 .issue-config.json,自動偵測 GitLab 專案資訊並設定 Issue 管理規則。當使用者說「init issue」、「初始化 issue 設定」、「setup issue config」、「issue init」時觸發。
批量整理舊有 GitLab Issue,補充標籤、建立關聯、重新分類。當使用者說「整理 issue」、「organize issues」、「清理 issue」、「整理舊 issue」時觸發。
將大型 GitLab Issue 拆分為多個子 Issue,AI 語義理解自動識別子任務並建立關聯。當使用者說「拆分 issue」、「split issue」、「拆 issue」、「分拆」時觸發。
從 Issue 分析結果自動產生 Draft MR 建議。需先執行 /issue-analyze 取得影響分析,再根據分析結果產生程式碼修改建議與 Draft MR。當使用者說「issue 轉 MR」、「自動開 MR」、「issue to MR」、「從 issue 建 MR」時觸發。