Files
shared/skills/plugins-install/SKILL.md
T
jiantw83 e47f4873c7 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)。
2026-07-31 08:34:28 +00:00

185 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: plugins-install
description: 一次把 JSC 的三個 pluginjsc-codejsc-docjsc-persona)安裝或更新到目前的 AI 助理,支援 Claude Code、Codex、GitHub Copilot CLI、Antigravity 四家原生 plugin CLIOpenCode 則以複製 skills 目錄處理;每個 plugin 先判斷已安裝或未安裝,未安裝就安裝、已安裝就更新到最新,最後以表格回報每個 plugin 的結果與版本。當使用者說要安裝所有 jsc plugin、一次更新全部 skill 套件、把 codedocpersona 都裝起來、換新機器要把 plugin 都補齊、或問怎麼一次更新所有 plugin 時觸發。不適用於:移除 plugin(用 /jsc-generic:plugins-uninstall)、只處理單一 plugin(直接照該 plugin README 的安裝章節)、安裝非 JSC 的第三方 plugin。
argument-hint: "[--assistant claude|codex|copilot|agy|opencode] [--plugins code,doc,persona] [--host <gitea 主機>] [--clone-dir <目錄>] [--yes]"
---
# plugins-install — 一次安裝/更新所有 JSC plugin
四階段 skill:先**決定助理與目標清單**,再**逐一判斷已安裝或未安裝**,接著**安裝或更新**,最後**回報結果並提醒重啟工作階段**。
| 階段 | 動作 |
| --- | --- |
| A. 前置設定 | 決定要操作哪個助理(`--assistant`/偵測目前執行環境/詢問)→ 決定 gitea 主機 → 決定 plugin 清單(預設 code、doc、persona |
| B. 現況盤點 | 對每個 plugin 查詢 marketplace 與 plugin 是否已存在,決定「安裝」或「更新」 |
| C. 安裝/更新 | 依助理的原生指令逐一執行;Antigravity 與 OpenCode 走 clone/複製路徑 |
| D. 回報 | 以表格列出每個 plugin 的動作、結果與版本,並提醒重啟工作階段 |
---
## 共用規範(generic plugin,必要前置)
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守:
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼、表格呈現。
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認。
- `/jsc-generic:spec-git-safety`AntigravityOpenCode 路徑會動到本機 clone,**工作區有未提交變更時不得強制更新**。
本 skill 特有補充:
- **不移除任何東西**。更新時就算需要「先移除再安裝」(Antigravity 沒有 update 子指令),也只針對該 plugin 自己,且移除後必須立刻重裝成功。
- **必要決策**(會中斷詢問):無法判斷目前是哪個助理、指定的助理 CLI 不存在、本機 clone 有未提交變更、安裝失敗且原因需要使用者裁示。
- **本 skill 不處理 `jsc-generic` 自己**:它是本 skill 的所在地,安裝它請直接照 generic 的 README。
---
## 參數
- `--assistant claude|codex|copilot|agy|opencode`:指定要操作的助理。**省略時**依階段 A1 判斷。
- `--plugins code,doc,persona`:要處理的 plugin(以逗號分隔,用 repo 短名)。**省略時預設三個全做**。
- `--host <gitea 主機>`gitea 主機,省略時預設 `gitea.jsc.idv.tw`
- `--clone-dir <目錄>`AntigravityOpenCode 的本機 clone 根目錄,**省略時預設 `~/plugins`**。
- `--yes`:全自動,不做確認式詢問(必要決策仍會中斷)。
---
## plugin 對照表(安裝識別的唯一依據)
| repo 短名 | plugin 名 | marketplace 名 | 安裝 token | repo 網址 |
| --- | --- | --- | --- | --- |
| `code` | `jsc-code` | `code` | `jsc-code@code` | `https://<host>/plugins/code.git` |
| `doc` | `jsc-doc` | `doc` | `jsc-doc@doc` | `https://<host>/plugins/doc.git` |
| `persona` | `jsc-persona` | `jsc-plugins` | `jsc-persona@jsc-plugins` | `https://<host>/plugins/persona.git` |
> **`persona` 的 marketplace 名不是 repo 名**(是 `jsc-plugins`)。指令一律照這張表帶,不要用 repo 短名去猜。
各 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` |
---
## 階段 A:前置設定
### A1. 決定助理
依序判斷,**第一個成立的就採用**:
1. 有帶 `--assistant` → 直接採用。
2. 目前正在執行本 skill 的助理可自我辨識(例如 Claude Code 的 `/plugin` 指令可用)→ 採用自己。
3. 逐一檢查哪些 CLI 存在(`command -v claude codex copilot agy opencode`)→ 只有一個就採用;**有多個就列出來問使用者**。
4. 一個都沒有 → 回報「找不到任何支援的助理 CLI」並停止。
### A2. 決定 gitea 主機與 clone 根目錄
- 主機:`--host``$GITEA_HOST` → 預設 `gitea.jsc.idv.tw`
- clone 根目錄(只有 `agy``opencode` 用得到):`--clone-dir` → 預設 `~/plugins`。目錄不存在就建立。
### A3. 決定 plugin 清單
`--plugins` 指定則照它,否則 `code,doc,persona` 三個都做。清單中出現對照表以外的名稱 → 回報並略過該項,其餘照做。
---
## 階段 B:現況盤點
對清單中每個 plugin,先查現況再決定動作(**先查再做,不要盲目重裝**):
| 助理 | 查詢指令 | 判定 |
| --- | --- | --- |
| Claude Code | `claude plugin marketplace list``claude plugin list` | 兩者都有 → 更新;缺 marketplace → 先 add;缺 plugin → install |
| Codex | `codex plugin marketplace list``codex plugin list` | 同上 |
| GitHub Copilot CLI | `copilot plugin marketplace list``copilot plugin list` | 同上 |
| Antigravity | `agy plugin list`,並看 `<clone-dir>/<repo>` 是否存在 | 目錄在且已安裝 → 更新;否則安裝 |
| OpenCode | 看 `~/.config/opencode/skills/` 底下是否已有該 plugin 的 skill 目錄 | 有 → 更新(覆蓋複製);沒有 → 安裝 |
指令不存在或子指令不被支援(舊版 CLI)時,**不要中斷整批**:記下該 plugin 為「跳過(CLI 不支援)」,繼續下一個,最後在階段 D 一起回報。
---
## 階段 C:安裝/更新
以下 `<url>``<plugin>``<marketplace>``<token>` 一律取自對照表。
### Claude Code
```bash
# 安裝(marketplace 尚未加入)
claude plugin marketplace add <url>
claude plugin install <token>
# 更新(已安裝)
claude plugin marketplace update <marketplace>
claude plugin update <token>
```
### Codex
```bash
# 安裝
codex plugin marketplace add <url>
codex plugin add <token>
# 更新(重新抓取 marketplace 的 git 快照)
codex plugin marketplace upgrade <marketplace>
```
### GitHub Copilot CLI
```bash
# 安裝
copilot plugin marketplace add <url>
copilot plugin install <token>
# 更新
copilot plugin marketplace update <marketplace>
copilot plugin update <token>
```
### Antigravity`agy`
> `agy plugin install <url>` 目前只支援 github.comgitea 一律走「clone + 本地路徑」。`agy` 沒有 update 子指令,更新=`git pull` 後重裝。
```bash
# 安裝
git clone <url> <clone-dir>/<repo>
agy plugin install <clone-dir>/<repo>
# 更新
git -C <clone-dir>/<repo> pull --ff-only
agy plugin uninstall <plugin>
agy plugin install <clone-dir>/<repo>
```
- `git pull --ff-only` 失敗(本機有未提交變更或分支分岔)→ **停在該 plugin**,回報現況讓使用者裁示,不得 `reset --hard``clean`,其餘 plugin 照常繼續。
### OpenCode
> OpenCode 的 plugin 是 npm 套件,不適用 skill 包;改用目錄安裝。**只會帶入 `skills/``scripts/` 與 `hooks/` 不會進去**——`jsc-persona` 依賴 `scripts/persona.mjs`,以此方式安裝等於只有說明書、沒有工具,安裝前要先告知使用者。
```bash
git clone <url> <clone-dir>/<repo> # 已存在則 git -C <clone-dir>/<repo> pull --ff-only
mkdir -p ~/.config/opencode/skills
cp -r <clone-dir>/<repo>/skills/* ~/.config/opencode/skills/
```
> **Windows PowerShell**`cp -r A B` → `Copy-Item A B -Recurse -Force`、`~` → `$HOME`。
---
## 階段 D:回報
以表格回報,一個 plugin 一列:
| plugin | 動作 | 結果 | 版本 |
| --- | --- | --- | --- |
| `jsc-code` | 安裝/更新/跳過 | ✅ 成功/⚠ 需處理/❌ 失敗 | 例 `0.0.2` |
- 版本取自該 plugin 的 `plugin.json`;拿不到就寫「未知」。
- 有任何一列不是 ✅ → 在表格下方逐項說明原因與建議動作。
- 最後固定提醒:**安裝或更新後要重啟工作階段**才會生效;`jsc-persona` 在 Claude Code 還要用 `/hooks` 確認六個 hook 都在。