feat: 攻擊方 diff 過濾 + 預設檔名更名 #4

Merged
admin merged 2 commits from develop into master 2026-06-15 10:23:48 +00:00
7 changed files with 37 additions and 24 deletions
+1 -1
View File
@@ -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": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "jsc",
"version": "0.0.2",
"version": "0.0.3",
"description": "JSC 跨 AI 助理共用 plugin 模板。所有 skills 以 SKILL.md 為共通標準。",
"skills": "./skills"
}
+7 -7
View File
@@ -144,9 +144,9 @@ rm -rf ~/.config/opencode/skills/code-review
| 助理 | headless 指令 | 執行 `code-review` skill |
| --- | --- | --- |
| Claude Code | `claude -p "<prompt>"` | `claude -p "/jsc:code-review main feature/login all --exclusions .codereview.md --known-issues .codereview-known-issues.md"` |
| Codex | `codex exec "<prompt>"` | `codex exec '$code-review main feature/login all --exclusions .codereview.md --known-issues .codereview-known-issues.md'` |
| Antigravity | `agy -p "<prompt>"` | `agy -p "/jsc:code-review main feature/login all --exclusions .codereview.md --known-issues .codereview-known-issues.md"` |
| Claude Code | `claude -p "<prompt>"` | `claude -p "/jsc:code-review main feature/login all --exclusions exclusions.md --known-issues known-issues.md"` |
| Codex | `codex exec "<prompt>"` | `codex exec '$code-review main feature/login all --exclusions exclusions.md --known-issues known-issues.md'` |
| Antigravity | `agy -p "<prompt>"` | `agy -p "/jsc:code-review main feature/login all --exclusions exclusions.md --known-issues known-issues.md"` |
| OpenCode | `opencode run "<message>"` | `opencode run "用攻防角色 review main 與 feature/login 的差異"` |
- Claude / Antigravity 支援 `/jsc:` 前綴,直接 `-p "/jsc:<name>"` 即可。
@@ -165,11 +165,11 @@ rm -rf ~/.config/opencode/skills/code-review
### `code-review`
以 RPG 攻防對決方式審查 `git diff` 的程式碼審查 skill。審查範圍是兩個分支的差異,**來源分支與目標分支缺一不可**(缺漏會反問補齊)。角色分**攻擊方**(吟遊詩人=風格 🎼/法師=邏輯 🔮/盜賊=效率 ⚡/刺客=安全性 🗡️)與**防守方**(聖騎士=裁決 🛡️),每個角色定義在 `skills/code-review/roles/<role>.md`(含英文名稱/專案/個性/徽章/代表色)。攻擊方分析 diff 找出問題(問題/等級/描述/建議/檔案位置/所在行數);防守方依專案根目錄排除事項設定檔、**前次審查紀錄(已知問題=前次發現但未解決的問題)**與原始碼脈絡裁決每條問題(🚫 略過/🔁 已知問題/❌ 誤判/✅ 成立)。使用者可選擇單一角色、整個攻擊方、整個防守方或全部;複選時以 sub agent 並行執行。
以 RPG 攻防對決方式審查 `git diff` 的程式碼審查 skill。審查範圍是兩個分支的差異,**來源分支與目標分支缺一不可**(缺漏會反問補齊)。角色分**攻擊方**(吟遊詩人=風格 🎼/法師=邏輯 🔮/盜賊=效率 ⚡/刺客=安全性 🗡️)與**防守方**(聖騎士=裁決 🛡️),每個角色定義在 `skills/code-review/roles/<role>.md`(含英文名稱/專案/個性/徽章/代表色)。攻擊方分析 diff 找出問題(問題/等級/描述/建議/檔案位置/所在行數,審查前自動排除 `.` 開頭資料夾內的內容、以及排除事項檔與前次審查紀錄檔本身);防守方依專案根目錄排除事項設定檔、**前次審查紀錄(已知問題=前次發現但未解決的問題)**與原始碼脈絡裁決每條問題(🚫 略過/🔁 已知問題/❌ 誤判/✅ 成立)。使用者可選擇單一角色、整個攻擊方、整個防守方或全部;複選時以 sub agent 並行執行。
參數格式:`<target> <source> [角色...] [--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」)自動觸發
<!-- JSC-SKILLS:END -->
+1 -1
View File
@@ -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/"
}
+4 -4
View File
@@ -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」)自動觸發 |
+19 -6
View File
@@ -32,8 +32,20 @@ description: 以 RPG 攻防對決方式審查 git diff 的程式碼審查 skill
`/jsc:code-review main feature/login`。指令為 `git diff <target>...<source>`(比對 source 自分岔點以來的變更)。
- **若來源或目標分支任一缺漏 → 必須詢問使用者補齊**,兩個都拿到才繼續;
可用 `git branch` 列出可選分支輔助使用者選擇。不可自行臆測或預設某一分支。
- 取得兩個分支後執行 `git diff <target>...<source>`
- **diff 為空**(兩分支無差異)→ 回報「無變更可審查」並結束
- 取得兩個分支後執行 `git diff <target>...<source>`,並**排除下列不納入審查的路徑**
- **任何以 `.` 開頭的資料夾內的所有內容**(如 `.git/``.github/``.claude-plugin/``.codex-plugin/``.agents/` 等)
- **排除事項檔**與**前次審查紀錄檔**本身(`--exclusions` / `--known-issues` 指定的路徑;未指定時連同預設檔名 `exclusions.md``known-issues.md` 一併排除)。
- 用 git pathspec 一次完成,例如:
```bash
git diff <target>...<source> -- . \
':(exclude,glob)**/.*/**' \
':(exclude)<排除事項檔路徑>' \
':(exclude)<前次審查紀錄檔路徑>'
```
`**/.*/**` 排除任意層級的 `.` 開頭資料夾內容;`.` 開頭的**檔案**不在此列,只有上述兩個設定檔被指名排除。)
- **過濾後 diff 為空** → 回報「無變更可審查」並結束。
### 2. 選擇角色
@@ -52,14 +64,14 @@ slash 參數格式:`/jsc:code-review <target> <source> [角色...] [--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 <target> <source> [角色...] [--exclusio
- **等級**:🔴 嚴重 / 🟠 高 / 🟡 中 / 🔵 低。
- **檔案位置 / 所在行數**:取自 diff 新檔(`+` 側)的路徑與行號。
- 只針對本次 diff 的變更,不對無關舊碼開砲。
- 攻擊方審查的是**步驟 1 過濾後**的 diff(已排除 `.` 開頭資料夾內容、排除事項檔與前次審查紀錄檔),不得把這些被排除的路徑列入問題。
### 5. 防守方裁決(若選到防守方)
@@ -137,6 +150,6 @@ slash 參數格式:`/jsc:code-review <target> <source> [角色...] [--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」)自動觸發 |
+4 -4
View File
@@ -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. **檔案允許不存在或為空** → 視為「無已知問題」(例如首次審查),不因缺檔而中斷。