feat(skills): 新增 plugins-install 與 plugins-uninstall,一次操作所有 JSC plugin

`plugins-install` 一次安裝或更新 jsc-code、jsc-doc、jsc-persona:先盤點每個
plugin 已安裝或未安裝,未安裝就安裝、已安裝就更新到最新,最後以表格回報動作、
結果與版本。不含 jsc-generic 自己(它是這兩個 skill 的所在地)。

`plugins-uninstall` 一次移除四個 JSC plugin:動手前先列出將被移除的項目與
不會被碰的資料請使用者確認,移除順序固定把 jsc-generic 放最後。人格倉庫、
~/.roles、~/.memory 與 Gitea 存取庫一律不刪。

兩個 skill 都涵蓋 Claude Code、Codex、GitHub Copilot CLI、Antigravity 四家
原生 plugin CLI,OpenCode 走複製/逐一刪除 skills 目錄(不用萬用字元,避免
掃到別處裝的 skill)。

同時附帶:README 補上 Skills 目錄與適用範圍、三份 manifest 的 description
補述新能力,並依 spec-plugin-version 把三家 manifest 版號一起升到 0.1.6
(master 現行為 0.1.5)。
This commit is contained in:
2026-07-31 08:34:28 +00:00
parent e43f303ff6
commit e47f4873c7
7 changed files with 374 additions and 8 deletions
+167
View File
@@ -0,0 +1,167 @@
---
name: plugins-uninstall
description: 一次把 JSC 的四個 pluginjsc-codejsc-docjsc-personajsc-generic)從目前的 AI 助理移除,支援 Claude Code、Codex、GitHub Copilot CLI、Antigravity 四家原生 plugin CLIOpenCode 則刪除先前複製進去的 skill 目錄;移除順序固定把 jsc-generic 放到最後(本 skill 就住在裡面,移除後即失效),並在動手前列出將被移除的項目與會受影響的本機資料讓使用者確認。當使用者說要移除所有 jsc plugin、把 skill 套件整組解除安裝、清掉 codedocpersonageneric、重灌前先卸載、或問怎麼一次移除全部 plugin 時觸發。不適用於:安裝或更新(用 /jsc-generic:plugins-install)、只移除單一 plugin(直接照該 plugin README 的移除章節)、刪除人格資料或 Gitea 上的存取庫。
argument-hint: "[--assistant claude|codex|copilot|agy|opencode] [--plugins code,doc,persona,generic] [--keep-marketplace] [--keep-clone] [--yes]"
---
# plugins-uninstall — 一次移除所有 JSC plugin
四階段 skill:先**決定助理與目標清單**,再**列出將被移除的項目並確認**,接著**依固定順序移除**,最後**回報結果與殘留物**。
| 階段 | 動作 |
| --- | --- |
| A. 前置設定 | 決定要操作哪個助理(`--assistant`/偵測目前執行環境/詢問)→ 決定 plugin 清單(預設四個全移) |
| B. 盤點與確認 | 列出實際已安裝的項目、會一併移除的 marketplace 與本機 clone、以及**不會**被碰的資料,請使用者確認 |
| C. 移除 | 依 `code``doc``persona``generic` 的順序逐一移除 |
| D. 回報 | 表格回報每個 plugin 的結果,並列出刻意保留的殘留物 |
---
## 共用規範(generic plugin,必要前置)
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守:
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼、表格呈現。
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認。
- `/jsc-generic:spec-git-safety`:不破壞既有工作——本機 clone 只在使用者明確同意時刪除,且**有未提交變更就一律保留**。
本 skill 特有補充:
- **移除是不可逆的動作**:階段 B 的確認是**必要決策**,除非帶 `--yes`,否則一定要問過才動手。
- **絕不刪除使用者資料**`~/.claude/personas/`(人格倉庫)、`~/.roles/``~/.memory/`(角色與記憶)一律不動,Gitea 上的存取庫也不動。要清這些請使用者自己來。
- **順序不可調換**`jsc-generic` 一定最後移除。它是本 skill 的所在地,移除後本 skill 隨之失效,後面的步驟會執行不到。
---
## 參數
- `--assistant claude|codex|copilot|agy|opencode`:指定要操作的助理。**省略時**依階段 A1 判斷。
- `--plugins code,doc,persona,generic`:要移除的 plugin(以逗號分隔,用 repo 短名)。**省略時預設四個全移**。
- `--keep-marketplace`:只移除 plugin,保留 marketplace 登錄(之後要重裝比較快)。
- `--keep-clone`:保留 AntigravityOpenCode 用的本機 clone 目錄(**預設就是保留**,此旗標僅用於明示)。要刪除本機 clone 必須由使用者在階段 B 明確同意。
- `--yes`:跳過階段 B 的確認(其他必要決策仍會中斷)。
---
## plugin 對照表(移除識別的唯一依據)
| repo 短名 | plugin 名 | marketplace 名 | 移除 token |
| --- | --- | --- | --- |
| `code` | `jsc-code` | `code` | `jsc-code@code` |
| `doc` | `jsc-doc` | `doc` | `jsc-doc@doc` |
| `persona` | `jsc-persona` | `jsc-plugins` | `jsc-persona@jsc-plugins` |
| `generic` | `jsc-generic` | `generic` | `jsc-generic@generic` |
> **`persona` 的 marketplace 名不是 repo 名**(是 `jsc-plugins`)。移除 marketplace 時特別注意別誤刪別的登錄。
各 plugin 帶入的 skill 目錄(OpenCode 路徑會用到):
| repo 短名 | skill 目錄 |
| --- | --- |
| `code` | `action-composite``action-docker``action-node``image``issues``nuget``review-resolve``sync` |
| `doc` | `docker``funcs``issues-analyze``issues-analyze-to-file``issues-sync``worklog` |
| `persona` | `persona-anime``persona-chat``persona-create``persona-icon``persona-invite``persona-memory``persona-relation``persona-sleep``persona-status``persona-sync``persona-therapist``persona-transfer` |
| `generic` | `role``plugins-install``plugins-uninstall``spec-action-params``spec-doc-funcs-handoff``spec-dockerfile``spec-execution``spec-gitea``spec-git-safety``spec-output``spec-plugin-version``spec-project-board``spec-time-log` |
> OpenCode 是**逐一刪除上表的 skill 目錄**,不可用萬用字元一次掃掉整個 `skills/`——那裡可能還有別處裝進去的 skill。
---
## 階段 A:前置設定
### A1. 決定助理
依序判斷,**第一個成立的就採用**:
1. 有帶 `--assistant` → 直接採用。
2. 目前正在執行本 skill 的助理可自我辨識 → 採用自己。
3. 逐一檢查哪些 CLI 存在(`command -v claude codex copilot agy opencode`)→ 只有一個就採用;**有多個就列出來問使用者**。
4. 一個都沒有 → 回報「找不到任何支援的助理 CLI」並停止。
### A2. 決定 plugin 清單
`--plugins` 指定則照它,否則四個全做。無論使用者怎麼排,**實際執行順序一律重排為 `code``doc``persona``generic`**。
---
## 階段 B:盤點與確認
先查出實際狀態(`claude plugin list``codex plugin list``copilot plugin list``agy plugin list`,或 OpenCode 的 skills 目錄),再列出三張清單給使用者看:
1. **會被移除**:已安裝的 plugin、以及(未帶 `--keep-marketplace` 時)對應的 marketplace 登錄。
2. **本機 clone**`agy``opencode` 用的 clone 目錄路徑與是否有未提交變更;**預設保留**,要刪請使用者明確說。
3. **不會被碰**`~/.claude/personas/`(人格:身分、情緒、記憶、關係圖)、`~/.roles/``~/.memory/`、Gitea 上的所有存取庫。
清單裡沒有任何已安裝項目 → 直接回報「沒有可移除的項目」並結束。
未帶 `--yes` 時,**在這裡停下來等使用者確認**再進入階段 C。
---
## 階段 C:移除
以下 `<plugin>``<marketplace>``<token>` 一律取自對照表;帶 `--keep-marketplace` 時略過 `marketplace remove` 那行。
### Claude Code
```bash
claude plugin uninstall <token>
claude plugin marketplace remove <marketplace>
```
- 移除後檢查 `~/.claude/settings.json``enabledPlugins`**清掉該 plugin 的殘留鍵**(留著會讓下次安裝的狀態對不上)。
### Codex
```bash
codex plugin remove <token>
codex plugin marketplace remove <marketplace>
```
### GitHub Copilot CLI
```bash
copilot plugin uninstall <token>
copilot plugin marketplace remove <marketplace>
```
### Antigravity`agy`
```bash
agy plugin uninstall <plugin>
```
- 本機 clone`~/plugins/<repo>` 之類)**預設保留**;使用者在階段 B 明確同意才刪,且該目錄有未提交變更時一律保留並回報。
### OpenCode
逐一刪除該 plugin 帶入的 skill 目錄(照上表,不用萬用字元):
```bash
rm -rf ~/.config/opencode/skills/{<該 plugin 的 skill 目錄,以逗號分隔>}
```
> **Windows PowerShell**`rm -rf X` → `Remove-Item X -Recurse -Force`、`~` → `$HOME`。
### `jsc-generic` 的收尾
移除 `jsc-generic` 是**最後一步**。動手前先在輸出裡寫清楚:
- 本 skill 與所有 `spec-*` 共用規範會一起消失;`jsc-code``jsc-doc` 的 skill 內文都會引用 `spec-*`,若它們還留著,之後執行會載入不到共用規範。
- 要重新安裝,得直接照 generic 的 README(那時已經沒有 `/jsc-generic:plugins-install` 可用了):
`claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/generic.git``claude plugin install jsc-generic@generic`
---
## 階段 D:回報
以表格回報,一個 plugin 一列:
| plugin | 動作 | 結果 | 備註 |
| --- | --- | --- | --- |
| `jsc-code` | 移除/跳過(未安裝) | ✅ 成功/⚠ 需處理/❌ 失敗 | 例:marketplace 已保留 |
表格下方固定列出:
- **刻意保留的殘留物**:本機 clone 路徑、marketplace 登錄(若帶了 `--keep-marketplace`)、人格倉庫與記憶目錄。
- **重啟提醒**:移除後要重啟工作階段,指令與 skill 才會真正消失。