jiantw83 338c2da89c feat(tools): 新增 git 還原閘門腳本,建置測試加上唯讀偵測模式
What:新增 `tools/git-guard.sh`,把工作區乾淨檢查與還原序列從技能內文搬進腳本。`tools/build-test.sh` 加上 `--detect` 唯讀模式,只偵測建置與測試指令,不執行。

Why:還原會執行 `git clean -fd`。這個指令刪掉未追蹤的檔案,沒有 reflog 可救,也沒有任何救回的路徑。前提原本只寫在技能內文,讀的人漏掉一行,就可能對著一個根本不該還原的目錄動手,把整個工作區的未追蹤檔案清光。前提要擋得住,就得寫成程式碼。另一件事是「推不出建置與測試指令」,原本要等所有版本來源檔案都改寫完才發現,使用者又答不出指令時,前面全部作廢,還得走一次還原。

How:`revert` 在跑第一個破壞性指令之前擋五道——目錄存在、git 指令存在、確實是 git 工作樹(不是裸存取庫)、呼叫端明確帶 `--confirm-destructive`、目標不是檔案系統根目錄。任何一道不過就直接結束,工作區一個位元組都不動。`check` 的乾淨判定看整個存取庫,`revert` 只作用在專案目錄以下,判定從嚴、動手從窄。`clean` 用 `-fd` 不用 `-fdx`,被 gitignore 的安裝產物要留著。`--detect` 只做偵測與前置檢查,一個檔案都不寫,結束碼與路由跟執行模式完全一致。

Who:套件批次更新的前置檢查與還原路線。
2026-08-31 11:09:01 +08:00
2026-08-21 04:44:00 +00:00

jsc-pkg — 套件批次更新

jsc 技能組的 pkg domain:把專案所有外部套件更新到最新穩定版本,完成後執行建置與測試,失敗則還原變更。支援 nodejs / python / dotnet。

安裝、更新、移除

Marketplace 統一為 jsc(https://gitea.jsc.idv.tw/plugins/meta.git),安裝 token 為 jsc-pkg@jsc。每個指令一行:

CLI 安裝 更新 移除
claude claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && claude plugin install jsc-pkg@jsc claude plugin marketplace update jsc && claude plugin update jsc-pkg@jsc claude plugin uninstall jsc-pkg@jsc
codex codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && codex plugin add jsc-pkg@jsc codex plugin marketplace upgrade jsc codex plugin remove jsc-pkg@jsc
copilot copilot plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && copilot plugin install jsc-pkg@jsc copilot plugin marketplace update jsc && copilot plugin update jsc-pkg@jsc copilot plugin uninstall jsc-pkg@jsc
antigravity git clone https://gitea.jsc.idv.tw/plugins/pkg.git ~/plugins/pkg && agy plugin install ~/plugins/pkg git -C ~/plugins/pkg pull && agy plugin uninstall jsc-pkg && agy plugin install ~/plugins/pkg agy plugin uninstall jsc-pkg
kiro kiro-cli plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && kiro-cli plugin install jsc-pkg@jsc kiro-cli plugin marketplace update jsc && kiro-cli plugin update jsc-pkg@jsc kiro-cli plugin uninstall jsc-pkg@jsc

antigravity 不支援 gitea URL 安裝,改用本地 clone 路徑。批次操作五個 CLI:使用 /jsc-cli:deploy。

舊入口 plugins/jsc 已移除,marketplace 正本移到 plugins/meta。marketplace 名稱仍是 jsc(取自 marketplace.json 的 name 欄位,與存取庫名無關),安裝 token 不變;已從舊入口安裝過的人先執行 claude plugin marketplace remove jsc,再依上表重新 add。

工具

五支工具都靠 python3 解析或改寫檔案。少了 python3,每一支都回報「需要的指令不存在」,不會裝成查無套件。

工具 用途 需要的指令
tools/list-packages.sh list-packages.sh [專案目錄] 偵測專案類型並列出所有外部套件與目前版本(TSV:ecosystem / name / current) python3
tools/latest-version.sh latest-version.sh <ecosystem> <name> 查最新穩定版(npm / pypi / nuget) curl、python3
tools/apply-version.sh apply-version.sh <ecosystem> <project dir> <name> <version> 改寫版本來源檔案,把套件釘選到指定版本 python3
tools/install-deps.sh install-deps.sh <ecosystem> <project dir> 重新解析並安裝相依套件(npm install、pip install、dotnet restore) npm、pip、dotnet
tools/build-test.sh build-test.sh <ecosystem> <project dir> 偵測並執行建置與測試 npm、python3、pytest、dotnet

結束碼總表

一個數字只有一個意思,五支工具共用。新增工具請沿用這張表,不要自己編號。

碼 意思 呼叫方的動作
0 成功 繼續
1 參數個數不對 停手
2 ecosystem 不認識 停手
3 該 ecosystem 沒有來源檔案 跳過這個 ecosystem 或套件
4 依工具而定:list-packages.sh、build-test.sh、install-deps.sh 是指令不存在(停手);latest-version.sh、apply-version.sh 是查不到該套件(跳過) 見左欄
5 依工具而定:latest-version.sh、apply-version.sh 是指令不存在(停手);build-test.sh 是推不出建置或測試指令(改問使用者) 見左欄
6 找不到專案目錄 停手
其他 底層指令的結束碼 只有 install-deps.sh、build-test.sh 會走還原

6 不與 3 合併:找不到專案目錄是輸入壞了,併進 3 會被當成跳過藏起來。latest-version.sh 不收專案目錄,所以沒有 6。

4 與 5 在各工具間意思不同,是為了保住既有的跳過路由;新增工具請優先用 4 表示指令不存在。

回 1、回 2、回 6 與回「指令不存在」時,技能只回報並停手,不還原工作樹——工具鏈壞了不是套件壞了,還原只會白白刪掉檔案。

Skills 目錄

呼叫方式:Claude / Antigravity /jsc-pkg:{name};Codex ${name};Copilot / Kiro 描述需求自動觸發。

pkg-update

套件批次更新:列套件 → 查最新穩定版 → 逐 ecosystem 以 sub agent 更新 → 建置與測試(指令不明時決策樹詢問)→ 失敗還原全部變更。

更新途中要在版本來源檔案或程式碼留註解時,只寫鎖版本或繞道的原因,不寫內部議題編號、工作包編號、人名與 @ 提及、產生來源署名;第三方套件的 issue 連結可以寫,用來說明繞道成因與解除條件。完整清單與白名單見 jsc-review 的 references/comment-scope.md。

相關 domain

  • jsc-ask:建置與測試指令不明時的決策樹詢問
  • jsc-sdlc:維護階段的建議維護方法之一
S
Description
No description provided
Readme
143 KiB
Languages
Shell 100%