refactor(skills 共用規範): 抽出共用規範至 generic spec-*,以引用+一行 fallback 摘要取代重複內容

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-07-17 08:58:04 +08:00
co-authored by Claude Fable 5
parent fc39c1254d
commit 7814e2edea
9 changed files with 119 additions and 163 deletions
+13 -22
View File
@@ -18,13 +18,18 @@ argument-hint: "[--target-dir <根目錄>] [--owner <擁有者,以逗號分隔>]
---
## 輸出規範(務必遵守
## 共用規範(generic plugin,必要前置
- **語言**:所有面向使用者的輸出(擁有者清單、專案清單、進度、總結、反問)一律使用**繁體中文(台灣用語)**;僅識別字、檔名、git/curl 指令、API 路徑等技術標識保留原文,**不可**使用簡體字。
- **編碼無亂碼**:凡輸出含繁體中文、全形標點、emoji,一律 **UTF-8(不含 BOM**,不得出現問號方框或錯碼。
- **Token 機密保護(極重要)**gitea token 一律**從環境變數讀取**(如 `$GITEA_TOKEN`),**絕不**寫死在 skill、log 或任何輸出;**不可** echo 含 token 的指令或 URL。所有顯示給使用者的指令/錯誤訊息都要**遮蔽 token**(如以 `***` 取代)。clone 時帶 token 的 URL 用變數帶入、**不可印出**,且 clone 完成後要把 origin 還原成不含 token 的乾淨 URL(見 E3),避免 token 落地在 `.git/config`
- **自動執行原則**:除非使用者明確要求先確認,或遇到不可忽略的必要決策(例如缺 token、無法決定 gitea 主機、目標目錄不可寫、單一專案更新時工作區有未提交變更需使用者裁示),否則各階段只需輸出簡短計畫/進度後直接執行到完成。**唯一一定會中斷的點是階段 C 的擁有者多選**(除非已帶 `--owner`
- **不破壞既有工作**:更新既有專案時若工作區有未提交變更而導致切換/pull 失敗,**停止該專案的更新並回報**,請使用者自行處理;**絕不**強制丟棄(不可 `reset --hard``checkout -f``clean`
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
- `/jsc:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼
- `/jsc:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認
- `/jsc:spec-gitea``GITEA_TOKEN` 機密保護(不 echo、遮蔽、clone 後還原乾淨 origin)、API 分頁完整讀取、host 決定順序
- `/jsc:spec-git-safety`:不破壞既有工作(未提交變更不強切、絕不 `reset --hard``clean`)、develop → master 後備、`pull --ff-only`
本 skill 特有補充:
- **必要決策**(會中斷詢問):缺 token、無法決定 gitea 主機、目標目錄不可寫、單一專案更新時工作區有未提交變更需使用者裁示。**唯一一定會中斷的點是階段 C 的擁有者多選**(除非已帶 `--owner`)。
- **唯讀本意**:本 skill 只做 clone 與本機分支更新,**不 push、不改遠端、不刪本機未追蹤檔**。
---
@@ -46,25 +51,11 @@ argument-hint: "[--target-dir <根目錄>] [--owner <擁有者,以逗號分隔>]
### A1. 確認 token
讀取環境變數 `GITEA_TOKEN`(或助理慣用的等價變數名)。
```bash
[ -n "${GITEA_TOKEN}" ] && echo "GITEA_TOKEN 已設定" || echo "GITEA_TOKEN 未設定"
```
- **未設定** → 回報「缺少 `GITEA_TOKEN` 環境變數,無法存取 Gitea API」並停止;提示使用者於環境變數提供 token(不要請使用者把 token 貼進對話)。
- **不可** echo token 本身,只確認是否存在。
`/jsc:spec-gitea` 確認 `GITEA_TOKEN`(只輸出「已設定/未設定」,不可 echo token 本身);**未設定** → 回報「缺少 `GITEA_TOKEN` 環境變數,無法存取 Gitea API」並停止(不要請使用者把 token 貼進對話)。
### A2. 決定 gitea 主機
序決定主機(取第一個成功者):
1.`--host <主機>` → 直接採用。
2. 否則讀環境變數 `$GITEA_HOST`(若有)。
3. 否則若**目前工作目錄是 git repo** 且 `git remote get-url origin` 指向某 gitea 主機 → 取該 host。
4. 以上皆無 → **詢問使用者** gitea 主機,**不臆測**。
主機僅取 host 部分(如 `gitea.jsc.idv.tw`),組 API base 為 `https://<host>/api/v1`
`/jsc:spec-gitea` 的 host 決定順序:`--host``$GITEA_HOST` → 目前 repo 的 origin → 詢問使用者(不臆測)。主機僅取 host 部分(如 `gitea.jsc.idv.tw`),組 API base 為 `https://<host>/api/v1`
### A3. 決定目標根目錄