feat: 新增 code-review-resolve skill(解決 findings、分類提交、push、發 PR) #7

Merged
jiantw83 merged 8 commits from feature/code-review-resolve into develop 2026-06-16 07:51:22 +00:00
Showing only changes of commit 64b4d1f025 - Show all commits
+14 -6
View File
@@ -1,6 +1,6 @@
--- ---
name: code-review-resolve name: code-review-resolve
description: 讀取工作目錄 `.gitea/ai-review/findings.json`Gitea AI review 產出的問題清單),依嚴重等級(🔴 嚴重→🟠 高→🟡 中→🔵 低)由高到低逐條解決程式碼問題;全部解完後把 `.gitea/ai-review/findings.json` 清空為空陣列 `[]`。接著做 git 處理:分析工作區內所有檔案變更,依異動內容歸類為 feat/fix/docs/style/refactor/perf/test/chore/revert,分門別類各自 commitcommit 訊息為「type(中文範圍): 一句總結」格式(例 `feat(新增功能): 新增使用者登入流程`、`perf(優化效能): 改用批次查詢降低 DB 往返`)。提交後 push 當前分支(先用認證管理器、失敗改用 token、再失敗詢問使用者),push 成功後用 token 透過 Gitea API 對目標分支發 PR(目標分支不明必須詢問、不可猜測),PR 描述可選完整版(重新分析 git diff 總結)/簡單版(逐條列 commit 訊息)/使用者輸入;完成後因內文可能含 gitea token,提醒並清除 AI 助理對話內文。當使用者說解決 findings、處理 AI review 問題、修掉 .gitea/ai-review 的問題、依嚴重度逐條修復後分類提交、或要把工作區變更依 conventional commit 分類 commit 並 push 開 PR 時觸發。不適用於:產生 findings(那是 Gitea AI review CI 或 /jsc:code-review 的工作)、單純審查不修改、或不分類的單一 commit。 description: 讀取工作目錄 `.gitea/ai-review/findings.json`Gitea AI review 產出的問題清單),依嚴重等級(🔴 嚴重→🟠 高→🟡 中→🔵 低)由高到低逐條解決程式碼問題;全部解完後把 `.gitea/ai-review/findings.json` 清空為空陣列 `[]`。接著做 git 處理:分析工作區內所有檔案變更,依異動內容歸類為 feat/fix/docs/style/refactor/perf/test/chore/revert,分門別類各自 commitcommit 訊息為「type(範圍): 一句總結」格式,括號內的範圍須對應實際異動的功能/模組(例 `feat(使用者登入): 新增帳密登入流程`、`perf(物件查詢): 改用批次查詢降低 DB 往返`,而非 `feat(新增功能)` 這類重述 type 的詞)。提交後 push 當前分支(先用認證管理器、失敗改用 token、再失敗詢問使用者),push 成功後用 token 透過 Gitea API 對目標分支發 PR(目標分支不明必須詢問、不可猜測),PR 描述可選完整版(重新分析 git diff 總結)/簡單版(逐條列 commit 訊息)/使用者輸入;完成後因內文可能含 gitea token,提醒並清除 AI 助理對話內文。當使用者說解決 findings、處理 AI review 問題、修掉 .gitea/ai-review 的問題、依嚴重度逐條修復後分類提交、或要把工作區變更依 conventional commit 分類 commit 並 push 開 PR 時觸發。不適用於:產生 findings(那是 Gitea AI review CI 或 /jsc:code-review 的工作)、單純審查不修改、或不分類的單一 commit。
argument-hint: "[--findings <findings.json 路徑>] [--target <目標分支>] [--pr-desc <full|simple|自訂文字>] [--no-commit] [--no-pr] [--yes]" argument-hint: "[--findings <findings.json 路徑>] [--target <目標分支>] [--pr-desc <full|simple|自訂文字>] [--no-commit] [--no-pr] [--yes]"
--- ---
@@ -21,7 +21,11 @@ argument-hint: "[--findings <findings.json 路徑>] [--target <目標分支>] [-
- **語言**:所有面向使用者的輸出(修復清單、提交計畫、總結、反問)與 **commit 訊息** 一律使用**繁體中文(台灣用語)**; - **語言**:所有面向使用者的輸出(修復清單、提交計畫、總結、反問)與 **commit 訊息** 一律使用**繁體中文(台灣用語)**;
僅程式碼識別字、檔名、git 指令、conventional commit 的 `type``feat`/`fix`…)等技術標識保留原文,**不可**使用簡體字。 僅程式碼識別字、檔名、git 指令、conventional commit 的 `type``feat`/`fix`…)等技術標識保留原文,**不可**使用簡體字。
- **編碼無亂碼**:讀寫檔案一律 **UTF-8(不含 BOM**清空後的 `findings.json` 與所有 commit 訊息確保中文、全形標點與等級 emoji🔴🟠🟡🔵)正常顯示,不得出現問號方框或錯碼 - **編碼無亂碼(含繁中、全形標點、emoji)**:凡輸出或寫入只要含繁體中文,一律 **UTF-8(不含 BOM**,不得出現問號方框()或錯碼。涵蓋:清空後的 `findings.json`、**commit 訊息**、**PR 標題/描述**、終端訊息,與等級 emoji 🔴🟠🟡🔵。實作要點:
- **寫檔**:優先用助理的檔案寫入工具(預設 UTF-8 無 BOM)。若改用 shell 寫檔,**避免 PowerShell 的 `>``Out-File`**(預設可能寫成 UTF-16 或加 BOM);需要時用 `Set-Content -Encoding utf8NoBOM`,或在 bash 用 `printf`heredoc。
- **commit 訊息**:用 `git commit -m` 直接帶字串,或寫進 UTF-8 無 BOM 的檔案再 `git commit -F <file>`;確保 `git config i18n.commitEncoding utf-8`
- **PR body**:以 UTF-8 JSON 經 API 送出(如 `--data @body.json`,該檔為 UTF-8 無 BOM)。
- **送出前自我檢查**:產生含繁中的檔案/訊息後,回頭確認沒有亂碼或 BOM 再提交/送出。
- **修改程式碼、commit、push、開 PR 屬於更動專案/對外行為**:除非帶 `--yes` 或使用者已明確授權,**否則每階段動手前先輸出計畫(預覽)並取得同意**;使用者拒絕則只輸出計畫、不動檔不提交不推送。 - **修改程式碼、commit、push、開 PR 屬於更動專案/對外行為**:除非帶 `--yes` 或使用者已明確授權,**否則每階段動手前先輸出計畫(預覽)並取得同意**;使用者拒絕則只輸出計畫、不動檔不提交不推送。
- **Token 機密保護(極重要)**gitea token 一律**從環境變數讀取**(如 `$GITEA_TOKEN`),**絕不**寫死在 skill、commit、PR 內文或任何輸出;**不可** echo 含 token 的指令或 URL、不可寫進 log。所有顯示給使用者的指令/錯誤訊息都要**遮蔽 token**(如以 `***` 取代)。階段 D 完成後依規範清除對話內文(見 D5)。 - **Token 機密保護(極重要)**gitea token 一律**從環境變數讀取**(如 `$GITEA_TOKEN`),**絕不**寫死在 skill、commit、PR 內文或任何輸出;**不可** echo 含 token 的指令或 URL、不可寫進 log。所有顯示給使用者的指令/錯誤訊息都要**遮蔽 token**(如以 `***` 取代)。階段 D 完成後依規範清除對話內文(見 D5)。
@@ -130,11 +134,15 @@ git diff --staged # 已暫存變更
| 順序 | type(範圍) | commit 訊息 | 納入檔案 | | 順序 | type(範圍) | commit 訊息 | 納入檔案 |
| --- | --- | --- | --- | | --- | --- | --- | --- |
- **commit 訊息格式**`type(中文範圍): 一句總結` - **commit 訊息格式**`type(範圍): 一句總結`
- `type`:上表英文類型。 - `type`:上表英文類型。
- `中文範圍`:一個簡短的繁體中文範圍/類別詞,描述這組異動的領域,例如 `新增功能``修正錯誤``優化效能``文件``重構``測試``雜項` - `範圍`(括號內):**必須是這組異動實際牽涉的功能/模組/元件名稱**,而**不是**重述 type 的類別詞
取名規則:優先沿用程式碼/專案中既有的識別名(檔名、模組名、skill 名、功能名,可中可英、保持與原碼一致),讓人一眼看出「改到哪個東西」。
- ✅ 對:`feat(使用者登入)``fix(結帳流程)``perf(物件查詢)``docs(README)``refactor(訂單服務)``chore(plugin 版本)``feat(code-review-resolve)`
- ❌ 錯(只是重述 type,禁止):`feat(新增功能)``fix(修正錯誤)``perf(優化效能)``docs(文件)``chore(雜項)`
- 一組異動橫跨多個功能而無單一主體時,才退而取最貼近的上層範圍(例如多個 manifest → `plugin 設定`)。
- `一句總結`:把這個 commit 內所有異動**總結成一句**繁體中文(簡短、聚焦做了什麼)。 - `一句總結`:把這個 commit 內所有異動**總結成一句**繁體中文(簡短、聚焦做了什麼)。
- 範例:`feat(新增功能): 新增使用者登入流程``fix(修正錯誤): 修正空導致的結帳例外``perf(優化效能): 改用批次查詢降低 DB 往返``docs(文件): 補上安裝與呼叫方式說明``chore(雜項): bump 版本並清空 findings.json` - 範例:`feat(使用者登入): 新增帳密登入與 token 簽發``fix(結帳流程): 修正空購物車導致的結帳例外``perf(物件查詢): 改用批次查詢降低 DB 往返``docs(README): 補上安裝與呼叫方式說明``chore(plugin 版本): bump 至 0.0.7 並清空 findings.json`
- **提交順序建議**`fix`/`feat` 等核心異動在前,`docs`/`style`/`chore` 在後(純屬建議,可依相依性調整)。 - **提交順序建議**`fix`/`feat` 等核心異動在前,`docs`/`style`/`chore` 在後(純屬建議,可依相依性調整)。
### B4. 執行分類提交 ### B4. 執行分類提交
@@ -143,7 +151,7 @@ git diff --staged # 已暫存變更
```bash ```bash
git add -- <該組檔案...> # 僅暫存該組檔案,逐組精準 add git add -- <該組檔案...> # 僅暫存該組檔案,逐組精準 add
git commit -m "type(中文範圍): 一句總結" git commit -m "type(範圍): 一句總結" # 範圍=實際異動的功能/模組名
``` ```
- **逐組 addcommit**,確保每個 commit 只含該類異動;不要一次 `git add -A` 再混在一起。 - **逐組 addcommit**,確保每個 commit 只含該類異動;不要一次 `git add -A` 再混在一起。