From 1908eba681676bac69017d55f45430fb599196e5 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 15 Jun 2026 18:20:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=94=BB=E6=93=8A=E6=96=B9=20diff=20?= =?UTF-8?q?=E9=81=8E=E6=BF=BE=20+=20=E9=A0=90=E8=A8=AD=E6=AA=94=E5=90=8D?= =?UTF-8?q?=E6=9B=B4=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 攻擊方審查的 diff 在取得階段就排除 . 開頭資料夾內所有內容、 以及排除事項檔與前次審查紀錄檔本身(git pathspec) - 預設檔名更名:.codereview.md → exclusions.md、 .codereview-known-issues.md → known-issues.md - SKILL.md / paladin.md / archive-findings / README 同步更新 Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 14 +++++++------- skills/archive-findings/SKILL.md | 8 ++++---- skills/code-review/SKILL.md | 25 +++++++++++++++++++------ skills/code-review/roles/paladin.md | 8 ++++---- 4 files changed, 34 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 78b284c..7db2dc7 100644 --- a/README.md +++ b/README.md @@ -144,9 +144,9 @@ rm -rf ~/.config/opencode/skills/code-review | 助理 | headless 指令 | 執行 `code-review` skill | | --- | --- | --- | -| Claude Code | `claude -p ""` | `claude -p "/jsc:code-review main feature/login all --exclusions .codereview.md --known-issues .codereview-known-issues.md"` | -| Codex | `codex exec ""` | `codex exec '$code-review main feature/login all --exclusions .codereview.md --known-issues .codereview-known-issues.md'` | -| Antigravity | `agy -p ""` | `agy -p "/jsc:code-review main feature/login all --exclusions .codereview.md --known-issues .codereview-known-issues.md"` | +| Claude Code | `claude -p ""` | `claude -p "/jsc:code-review main feature/login all --exclusions exclusions.md --known-issues known-issues.md"` | +| Codex | `codex exec ""` | `codex exec '$code-review main feature/login all --exclusions exclusions.md --known-issues known-issues.md'` | +| Antigravity | `agy -p ""` | `agy -p "/jsc:code-review main feature/login all --exclusions exclusions.md --known-issues known-issues.md"` | | OpenCode | `opencode run ""` | `opencode run "用攻防角色 review main 與 feature/login 的差異"` | - Claude / Antigravity 支援 `/jsc:` 前綴,直接 `-p "/jsc:"` 即可。 @@ -165,11 +165,11 @@ rm -rf ~/.config/opencode/skills/code-review ### `code-review` -以 RPG 攻防對決方式審查 `git diff` 的程式碼審查 skill。審查範圍是兩個分支的差異,**來源分支與目標分支缺一不可**(缺漏會反問補齊)。角色分**攻擊方**(吟遊詩人=風格 🎼/法師=邏輯 🔮/盜賊=效率 ⚡/刺客=安全性 🗡️)與**防守方**(聖騎士=裁決 🛡️),每個角色定義在 `skills/code-review/roles/.md`(含英文名稱/專案/個性/徽章/代表色)。攻擊方分析 diff 找出問題(問題/等級/描述/建議/檔案位置/所在行數);防守方依專案根目錄排除事項設定檔、**前次審查紀錄(已知問題=前次發現但未解決的問題)**與原始碼脈絡裁決每條問題(🚫 略過/🔁 已知問題/❌ 誤判/✅ 成立)。使用者可選擇單一角色、整個攻擊方、整個防守方或全部;複選時以 sub agent 並行執行。 +以 RPG 攻防對決方式審查 `git diff` 的程式碼審查 skill。審查範圍是兩個分支的差異,**來源分支與目標分支缺一不可**(缺漏會反問補齊)。角色分**攻擊方**(吟遊詩人=風格 🎼/法師=邏輯 🔮/盜賊=效率 ⚡/刺客=安全性 🗡️)與**防守方**(聖騎士=裁決 🛡️),每個角色定義在 `skills/code-review/roles/.md`(含英文名稱/專案/個性/徽章/代表色)。攻擊方分析 diff 找出問題(問題/等級/描述/建議/檔案位置/所在行數,審查前自動排除 `.` 開頭資料夾內的內容、以及排除事項檔與前次審查紀錄檔本身);防守方依專案根目錄排除事項設定檔、**前次審查紀錄(已知問題=前次發現但未解決的問題)**與原始碼脈絡裁決每條問題(🚫 略過/🔁 已知問題/❌ 誤判/✅ 成立)。使用者可選擇單一角色、整個攻擊方、整個防守方或全部;複選時以 sub agent 並行執行。 參數格式:` [角色...] [--exclusions <排除事項檔案路徑>] [--known-issues <前次審查紀錄路徑>]`(目標在前、來源在後;角色可省略,會詢問;`--exclusions`、`--known-issues` 指定對應檔案路徑,省略時若選到防守方會反問)。 -- **Claude Code / Antigravity**:`/jsc:code-review`(反問分支與角色),或帶參數 `/jsc:code-review main feature/login mage`、`/jsc:code-review main feature/login all --exclusions .codereview.md --known-issues .codereview-known-issues.md` +- **Claude Code / Antigravity**:`/jsc:code-review`(反問分支與角色),或帶參數 `/jsc:code-review main feature/login mage`、`/jsc:code-review main feature/login all --exclusions exclusions.md --known-issues known-issues.md` - **Codex**:`$code-review main feature/login attack`,或 `$code-review main feature/login all --exclusions docs/review-rules.md --known-issues docs/known-issues.md`,或用 `/skills` 選單 - **OpenCode**:描述需求(如「用攻防角色 review main 與 feature/login 的差異,排除事項看 docs/review-rules.md、已知問題看 docs/known-issues.md」)自動觸發 @@ -179,9 +179,9 @@ rm -rf ~/.config/opencode/skills/code-review 參數:`--known-issues <前次審查紀錄路徑> --exclusions <排除事項檔案路徑>`(與 code-review 同名旗標,沿用同一組路徑;缺漏會反問)。 -- **Claude Code / Antigravity**:`/jsc:archive-findings --known-issues .codereview-known-issues.md --exclusions .codereview.md` +- **Claude Code / Antigravity**:`/jsc:archive-findings --known-issues known-issues.md --exclusions exclusions.md` - **Codex**:`$archive-findings --known-issues docs/known-issues.md --exclusions docs/review-rules.md`,或用 `/skills` 選單 -- **OpenCode**:描述需求(如「把剛剛 code-review 成立的問題存到 .codereview-known-issues.md、誤判存到 .codereview.md」)自動觸發 +- **OpenCode**:描述需求(如「把剛剛 code-review 成立的問題存到 known-issues.md、誤判存到 exclusions.md」)自動觸發 diff --git a/skills/archive-findings/SKILL.md b/skills/archive-findings/SKILL.md index 93f35be..2c7f857 100644 --- a/skills/archive-findings/SKILL.md +++ b/skills/archive-findings/SKILL.md @@ -23,7 +23,7 @@ argument-hint: "--known-issues <前次審查紀錄路徑> --exclusions <排除 `--known-issues <前次審查紀錄路徑>` `--exclusions <排除事項檔案路徑>` — **兩者皆必填,一定要指定**。 - **未提供任一路徑 → 必須先向使用者取得,不可自行採用預設或臆測**(與 code-review 一致:預設檔名僅作詢問時的建議選項)。 - 建議預設:已知問題 `.codereview-known-issues.md`、排除事項 `.codereview.md`(與 code-review 防守方讀的同一檔)。 + 建議預設:已知問題 `known-issues.md`、排除事項 `exclusions.md`(與 code-review 防守方讀的同一檔)。 - **檔案本身允許不存在或為空內容**:若目標檔不存在、或內容為空(含只有空白)→ skill 先**依模板建立該檔**(見下方「模板」),再附加條目;既有非空檔則直接附加。 - 寫入屬於**更動專案檔案**的行為 → **未獲使用者同意前不可寫入**;拒絕則只輸出將寫入的預覽。 - **格式依副檔名自動決定**:`.md` → Markdown(用下方模板);`.json` → top-level JSON array(空/不存在時初始化為 `[]`)。 @@ -74,7 +74,7 @@ argument-hint: "--known-issues <前次審查紀錄路徑> --exclusions <排除 目標檔不存在時先建立標題: - 已知問題檔:`# 前次審查紀錄(已知問題)\n\n由 /jsc:archive-findings 從 code-review【✅ 成立】問題彙整;/jsc:code-review 防守方會讀此檔並標「🔁 已知問題」。` -- 排除事項檔(`.codereview.md`):`# Code Review 排除事項\n\n已知技術債/團隊慣例/刻意取捨/已確認的誤判;/jsc:code-review 防守方會讀此檔並標「🚫 略過」。` +- 排除事項檔(`exclusions.md`):`# Code Review 排除事項\n\n已知技術債/團隊慣例/刻意取捨/已確認的誤判;/jsc:code-review 防守方會讀此檔並標「🚫 略過」。` **已知問題** 每筆: @@ -164,6 +164,6 @@ argument-hint: "--known-issues <前次審查紀錄路徑> --exclusions <排除 | 助理 | 呼叫 | | --- | --- | -| Claude Code / Antigravity | `/jsc:archive-findings --known-issues .codereview-known-issues.md --exclusions .codereview.md`(或省略路徑由它反問) | +| Claude Code / Antigravity | `/jsc:archive-findings --known-issues known-issues.md --exclusions exclusions.md`(或省略路徑由它反問) | | Codex | `$archive-findings --known-issues docs/known-issues.md --exclusions docs/review-rules.md`,或用 `/skills` 選單 | -| OpenCode | 描述需求(如「把剛剛 code-review 成立的問題存到 .codereview-known-issues.md、誤判存到 .codereview.md」)自動觸發 | +| OpenCode | 描述需求(如「把剛剛 code-review 成立的問題存到 known-issues.md、誤判存到 exclusions.md」)自動觸發 | diff --git a/skills/code-review/SKILL.md b/skills/code-review/SKILL.md index e4ba919..d9ce87b 100644 --- a/skills/code-review/SKILL.md +++ b/skills/code-review/SKILL.md @@ -32,8 +32,20 @@ description: 以 RPG 攻防對決方式審查 git diff 的程式碼審查 skill `/jsc:code-review main feature/login`。指令為 `git diff ...`(比對 source 自分岔點以來的變更)。 - **若來源或目標分支任一缺漏 → 必須詢問使用者補齊**,兩個都拿到才繼續; 可用 `git branch` 列出可選分支輔助使用者選擇。不可自行臆測或預設某一分支。 -- 取得兩個分支後執行 `git diff ...`。 -- **diff 為空**(兩分支無差異)→ 回報「無變更可審查」並結束。 +- 取得兩個分支後執行 `git diff ...`,並**排除下列不納入審查的路徑**: + - **任何以 `.` 開頭的資料夾內的所有內容**(如 `.git/`、`.github/`、`.claude-plugin/`、`.codex-plugin/`、`.agents/` 等)。 + - **排除事項檔**與**前次審查紀錄檔**本身(`--exclusions` / `--known-issues` 指定的路徑;未指定時連同預設檔名 `exclusions.md`、`known-issues.md` 一併排除)。 + - 用 git pathspec 一次完成,例如: + + ```bash + git diff ... -- . \ + ':(exclude,glob)**/.*/**' \ + ':(exclude)<排除事項檔路徑>' \ + ':(exclude)<前次審查紀錄檔路徑>' + ``` + + (`**/.*/**` 排除任意層級的 `.` 開頭資料夾內容;`.` 開頭的**檔案**不在此列,只有上述兩個設定檔被指名排除。) +- **過濾後 diff 為空** → 回報「無變更可審查」並結束。 ### 2. 選擇角色 @@ -52,14 +64,14 @@ slash 參數格式:`/jsc:code-review [角色...] [--exclusio 防守方需要兩份參照資料,兩者皆位於**專案根目錄**: -**(a) 排除事項設定檔**(建議檔名 `.codereview.md`,列出已知技術債/團隊慣例/刻意取捨): +**(a) 排除事項設定檔**(建議檔名 `exclusions.md`,列出已知技術債/團隊慣例/刻意取捨): - **若 slash 參數帶了 `--exclusions <路徑>`** → 即為使用者明確指定,直接採用該路徑,**不需再問**。 -- **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `.codereview.md` 僅作為詢問時的**建議選項**, +- **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `exclusions.md` 僅作為詢問時的**建議選項**, **不可**在未取得使用者明確指定前自行假設或直接採用該預設路徑。 - **檔案允許不存在或為空** → 視為「無排除事項」,**不**因缺檔而中斷。 -**(b) 前次審查紀錄檔**(已知問題=前次審查成立但未解決的問題;建議檔名 `.codereview-known-issues.md`): +**(b) 前次審查紀錄檔**(已知問題=前次審查成立但未解決的問題;建議檔名 `known-issues.md`): - **若 slash 參數帶了 `--known-issues <路徑>`** → 即為使用者明確指定,直接採用該路徑,**不需再問**。 - **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**(規則同上,預設檔名僅為建議選項,不可自行假設)。 @@ -78,6 +90,7 @@ slash 參數格式:`/jsc:code-review [角色...] [--exclusio - **等級**:🔴 嚴重 / 🟠 高 / 🟡 中 / 🔵 低。 - **檔案位置 / 所在行數**:取自 diff 新檔(`+` 側)的路徑與行號。 - 只針對本次 diff 的變更,不對無關舊碼開砲。 +- 攻擊方審查的是**步驟 1 過濾後**的 diff(已排除 `.` 開頭資料夾內容、排除事項檔與前次審查紀錄檔),不得把這些被排除的路徑列入問題。 ### 5. 防守方裁決(若選到防守方) @@ -137,6 +150,6 @@ slash 參數格式:`/jsc:code-review [角色...] [--exclusio | 助理 | 呼叫 | | --- | --- | -| Claude Code / Antigravity | `/jsc:code-review`(反問分支與角色),或 `/jsc:code-review main feature/login mage`、`/jsc:code-review main feature/login all --exclusions .codereview.md --known-issues .codereview-known-issues.md` | +| Claude Code / Antigravity | `/jsc:code-review`(反問分支與角色),或 `/jsc:code-review main feature/login mage`、`/jsc:code-review main feature/login all --exclusions exclusions.md --known-issues known-issues.md` | | Codex | `$code-review main feature/login attack`,或 `$code-review main feature/login all --exclusions docs/review-rules.md --known-issues docs/known-issues.md`,或用 `/skills` 選單 | | OpenCode | 描述需求(如「用攻防角色 review main 與 feature/login 的差異,排除事項看 docs/review-rules.md、已知問題看 docs/known-issues.md」)自動觸發 | diff --git a/skills/code-review/roles/paladin.md b/skills/code-review/roles/paladin.md index bb720b0..bb63763 100644 --- a/skills/code-review/roles/paladin.md +++ b/skills/code-review/roles/paladin.md @@ -20,19 +20,19 @@ personality: 沉穩公正、就事論事,不護短也不冤枉,只依排除 ## 排除事項(裁決前先確認) -排除事項設定檔位於**專案根目錄**(建議檔名 `.codereview.md`,列出已知技術債/團隊慣例/刻意取捨)。 +排除事項設定檔位於**專案根目錄**(建議檔名 `exclusions.md`,列出已知技術債/團隊慣例/刻意取捨)。 1. **若 slash 參數帶了 `--exclusions <路徑>`** → 即為使用者明確指定,直接採用該路徑。 -2. **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `.codereview.md` 僅是詢問時的**建議選項**, +2. **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `exclusions.md` 僅是詢問時的**建議選項**, **不可**在未取得使用者明確指定前自行假設或直接採用該預設路徑。 3. **檔案允許不存在或為空** → 視為「無排除事項」,不因缺檔而中斷。 ## 前次審查紀錄(已知問題=前次發現但未解決的問題,裁決前先確認) -前次審查紀錄檔位於**專案根目錄**(建議檔名 `.codereview-known-issues.md`,記錄歷次審查成立但尚未解決的問題)。 +前次審查紀錄檔位於**專案根目錄**(建議檔名 `known-issues.md`,記錄歷次審查成立但尚未解決的問題)。 1. **若 slash 參數帶了 `--known-issues <路徑>`** → 即為使用者明確指定,直接採用該路徑。 -2. **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `.codereview-known-issues.md` 僅是詢問時的**建議選項**, +2. **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `known-issues.md` 僅是詢問時的**建議選項**, **不可**在未取得使用者明確指定前自行假設或直接採用該預設路徑。 3. **檔案允許不存在或為空** → 視為「無已知問題」(例如首次審查),不因缺檔而中斷。 -- 2.53.0 From 5a31173385e6ffd45724de4d186955cde3cdf2a9 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 15 Jun 2026 18:21:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=89=88=E6=9C=AC=E8=99=9F=20bump=200.0.2?= =?UTF-8?q?=20=E2=86=92=200.0.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 三個 manifest(Claude/Codex/Antigravity)版本一起進。 Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude-plugin/plugin.json | 2 +- .codex-plugin/plugin.json | 2 +- plugin.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index e12a5c1..22eb391 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.0.2", + "version": "0.0.3", "description": "JSC 跨 AI 助理共用 plugin 模板(Claude Code / Codex / Antigravity / OpenCode)。所有 skills 以 SKILL.md 為共通標準,於 Claude Code 以 /jsc: 前綴呼叫。", "skills": "./skills", "author": { diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 588010b..094d5a7 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.0.2", + "version": "0.0.3", "description": "JSC 跨 AI 助理共用 plugin 模板。所有 skills 以 SKILL.md 為共通標準。", "skills": "./skills" } diff --git a/plugin.json b/plugin.json index 0e0bdbb..147d94f 100644 --- a/plugin.json +++ b/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.0.2", + "version": "0.0.3", "description": "JSC 跨 AI 助理共用 plugin 模板。所有 skills 以 SKILL.md 為共通標準;於 Antigravity 以 /jsc: 前綴呼叫。", "skills": "./skills/" } \ No newline at end of file -- 2.53.0