Files
doc/README.md
T

220 lines
13 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.
# jsc — 跨 AI 助理文件化 Skill 集合
一個可同時被 **Claude Code、Codex、Antigravity、OpenCode** 安裝的文件化 skill 集合。
目前內含四個實作型 skills`doc-docker` 用於整理 `docker-compose.yaml` 的行內註解與標題日期;`doc-funcs` 用於掃描專案 functions、建立 `.docs/` 草稿、補齊 XML 文件註解並重建 README 功能列表與使用範例;`doc-issues-analyze` 用於讀取 Gitea issue、彙整需求並拆成多階段 issue、產生實作草稿與交付留言;`doc-issues-breakdown` 用於把專案/議題/文件來源拆成小功能議題並依到期日實作。
核心是以 [Agent Skills`SKILL.md`](https://agentskills.io) 標準撰寫的共用 skills(唯一真實來源放在 `skills/`),
搭配各助理各自的 plugin manifest,讓**同一個 repo** 可用各家**原生 plugin CLI** 安裝。
在 Claude Code 與 Antigravity 中,skill 以 **`/jsc:` 前綴**呼叫(例如 `/jsc:doc-docker`)。
---
## 前綴與呼叫方式
| 助理 | 安裝方式 | 呼叫 | `/jsc:` 前綴 |
| --- | --- | --- | --- |
| Claude Code | `claude plugin`marketplace | `/jsc:<name>` 或自動觸發 | ✅ |
| Codex | `codex plugin`marketplace | `$<name>``/skills` 選單 | ❌(用 `$name` |
| Antigravity | `agy plugin install` | `/jsc:<name>` 或自動觸發 | ✅ |
| OpenCode | skills 目錄(複製/clone) | 描述需求自動觸發 | ❌(依名稱) |
> Codex 不支援自訂前綴(skill 以 `$name` 呼叫,例 `$doc-docker`);OpenCode 由模型依描述自動呼叫。兩者皆**不強制**前綴。
---
## 目錄結構
同一個 repo 同時帶四種 manifest,彼此以路徑隔離、互不干擾;四家都讀同一份 `skills/`
```
doc/
├── .claude-plugin/
│ ├── plugin.json # Claude 外掛定義(name: "jsc"
│ └── marketplace.json # Claude marketplacename: "doc"source 指向本 repo
├── .codex-plugin/
│ └── plugin.json # Codex 外掛定義(name: "jsc"skills: "./skills"
├── .agents/plugins/
│ └── marketplace.json # Codex marketplacename: "doc"url source 指向本 repo
├── plugin.json # Antigravity 外掛定義(name: "jsc"skills: "./skills/"
├── skills/ # ★ 唯一真實來源:所有 skills
│ ├── doc-docker/ # 對齊 docker-compose 註解(含 scripts/
│ │ ├── SKILL.md
│ │ └── scripts/
│ ├── doc-funcs/SKILL.md # 為 function 補齊 XML 文件
│ ├── doc-issues-analyze/SKILL.md # 讀 issue → 需求文件 → 拆階段 issue → 實作草稿 → 交付留言
│ └── doc-issues-breakdown/SKILL.md # 讀來源 → 保存議題 → 小功能議題 → 排程實作 → PR
├── AGENTS.md # 跨助理共用指引
└── README.md
```
---
## 安裝 / 更新 / 移除(各家原生 plugin CLI
> 指令中的 repo 網址:`https://gitea.jsc.idv.tw/plugins/doc.git`
>
> **Claude / Codex 從 git URL 安裝(會 clone 遠端),請先把本 repo `push` 到 gitea。**
> **Antigravity 的 `agy plugin install <url>` 目前只支援 github.com**gitea 請改用「clone + 本地路徑」(見 Antigravity 節)。
> 本機/離線:Claude 可用本地路徑加 marketplaceAntigravity 用本地路徑安裝。
### Claude Code
```bash
# 安裝
claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/doc.git
claude plugin install jsc@doc
# 更新
claude plugin marketplace update doc
claude plugin update jsc@doc
# 移除
claude plugin uninstall jsc@doc
claude plugin marketplace remove doc
```
- 工作階段內 slash 版(等價):把 `claude plugin` 換成 `/plugin`
- 本機開發(免 push):`claude plugin marketplace add C:\Users\h3285\source\repos.plugins\doc`(本地路徑)後再 install。
- **呼叫**`/jsc:<name>`(例 `/jsc:doc-docker`)。
### Codex
```bash
# 安裝
codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/doc.git
codex plugin add jsc@doc
# 更新(重新抓取 marketplace 的 git 快照)
codex plugin marketplace upgrade doc
# 移除
codex plugin remove jsc@doc
codex plugin marketplace remove doc
```
- 安裝 token `jsc@doc` = plugin 名(`.codex-plugin/plugin.json``name`@ marketplace 名(`.agents/plugins/marketplace.json``name`)。
- 本 repo 的 Codex marketplace 以 `url` 來源指向自己,故 Codex **一律從 gitea 安裝**(需先 push);安裝後重啟 Codex。
- **呼叫**`$<name>`(例 `$doc-docker`),或用 `/skills` 選單。
### Antigravity`agy`
> `agy plugin install <url>` 目前**只支援 github.com**gitea 等自架 git 不支援 URL 安裝,請先 `git clone` 再用**本地路徑**安裝。
```bash
# 安裝:clone 後用本地路徑
git clone https://gitea.jsc.idv.tw/plugins/doc.git ~/plugins/doc
agy plugin install ~/plugins/doc
# 更新(agy 無 update 子指令 → git pull 後重裝)
git -C ~/plugins/doc pull
agy plugin uninstall jsc
agy plugin install ~/plugins/doc
# 移除
agy plugin uninstall jsc
```
- 若把 skills 放到 GitHub,則可直接 `agy plugin install https://github.com/<owner>/<repo>`
- 其他:`agy plugin list``agy plugin enable jsc` / `disable jsc``agy plugin validate <path>`。安裝後重啟工作階段。
- **呼叫**`/jsc:<name>`(例 `/jsc:doc-docker`)或依描述自動觸發。
### OpenCode
OpenCode 的「plugin」是 TypeScript/npm 套件,不適用於 skill 包;skills 改用**目錄安裝**。
OpenCode 會讀 `~/.config/opencode/skills/`(也會讀 `~/.claude/skills/``~/.agents/skills/`)。
```bash
# 安裝
git clone https://gitea.jsc.idv.tw/plugins/doc.git ~/jsc-plugin
mkdir -p ~/.config/opencode/skills
cp -r ~/jsc-plugin/skills/* ~/.config/opencode/skills/
# 更新
git -C ~/jsc-plugin pull
cp -r ~/jsc-plugin/skills/* ~/.config/opencode/skills/
# 移除
rm -rf ~/.config/opencode/skills/doc-docker ~/.config/opencode/skills/doc-funcs ~/.config/opencode/skills/doc-issues-analyze ~/.config/opencode/skills/doc-issues-breakdown
```
> **Windows PowerShell**`cp -r A B` → `Copy-Item A B -Recurse -Force`、`rm -rf X` → `Remove-Item X -Recurse -Force`、`~` → `$HOME`。
- **呼叫**:直接描述需求,模型會依 skill 描述自動透過 skill 工具呼叫。
---
## 用 CLI 直接執行 skillheadless / 一次性)
安裝好之後,不必進互動介面,一行指令就能叫某個 skill 跑完並印出結果:
| 助理 | headless 指令 | 執行 `doc-docker` skill |
| --- | --- | --- |
| Claude Code | `claude -p "<prompt>"` | `claude -p "/jsc:doc-docker"` |
| Codex | `codex exec "<prompt>"` | `codex exec '$doc-docker'` |
| Antigravity | `agy -p "<prompt>"` | `agy -p "/jsc:doc-docker"` |
| OpenCode | `opencode run "<message>"` | `opencode run "整理 docker-compose 註解"` |
- Claude / Antigravity 支援 `/jsc:` 前綴,直接 `-p "/jsc:<name>"` 即可。
- Codex 以 `$<name>` 觸發;在 shell 請用**單引號**避免 `$` 被展開:`codex exec '$doc-docker'`
- OpenCode 沒有前綴,用自然語言描述需求,模型會自動透過 skill 工具呼叫。
- 帶引數就接在後面,例如 `claude -p "/jsc:doc-docker docker-compose.yaml"``codex exec '$doc-docker docker-compose.yaml'`
---
## Skills 目錄
> 此區塊列出本 plugin 內含的所有 skills(名稱/描述/使用方法)。
> 新增或修改 skill 後,請同步手動更新標記之間的內容。
<!-- JSC-SKILLS:START -->
### `doc-docker`
整理並對齊 `docker-compose.yaml` 的行內註解與標題區塊,優先透過內建 shell/awk 腳本批次處理或處理指定檔案。當使用者要對齊 docker-compose 註解、整理 compose 檔註解欄位、更新 compose 標題日期,或提到 docker-compose、dc-tidy、align_comments、註解對齊時使用此 skill。
- **Claude Code / Antigravity**`/jsc:doc-docker`
- **Codex**`$doc-docker`,或用 `/skills` 選單
- **OpenCode**:描述需求自動觸發
### `doc-funcs`
掃描目前專案所有可文件化的 function/method,建立 `.docs/doc-funcs-index.md` 與逐 function 草稿,再依草稿補齊 XML documentation comments;同時整理 `.gitea/workflows/readme.md` 的 workflow 說明、觸發條件與相關參數草稿,最後重建 README 專案列表、功能列表與使用範例。README 更新時間固定使用台灣時區(Asia/Taipei)與 `yyyy/MM/dd HH:mm:ss` 格式,專案列表會拆成「專案名稱/專案描述」、「專案名稱/參考專案列表」、「專案名稱/NuGet 套件列表」三張表,且專案名稱會連到 Gitea/GitHub 遠端上的專案資料夾;遇到跨專案或跨命名空間的同名型別時會在功能名稱補上模組/專案前綴,並會跳脫 Markdown 表格、link text、heading 中的 C# 泛型角括號,檢查功能列表連結與使用範例 anchor 一致後執行合適驗證。當使用者要補齊 function 文件、產生 XML doc、為每個 method 加 summary/param/remarks、整理 workflow README、建立 .docs 草稿,或提到 doc-funcs、function 文件化、workflow 文件化、XML documentation comments 時使用此 skill。
- **Claude Code / Antigravity**`/jsc:doc-funcs`
- **Codex**`$doc-funcs`,或用 `/skills` 選單
- **OpenCode**:描述需求自動觸發
### `doc-issues-analyze`
讀取一或多筆 Gitea issue URL(優先用 `tea`,否則用 Gitea REST API + `curl` + `GITEA_TOKEN`,不依賴 `jq`),把 issue 正文與留言彙整成一份完整需求文件,依功能拆成多個實作階段並各建立一個 issue(沿用來源 issue 的里程碑與專案、依需求性質從既有標籤挑選填入),再配合使用者指定的 repositories 或 issue 所在 repo,對每個階段派 subagent 產生實作草稿,最後產出交付文件並依 issues 分組留言到對應 issue。建立 issue 與留言前會先產生全部草稿並以 AskUserQuestion 讓使用者確認執行方式(全部執行/只建立 issue/只產文件不動 Gitea/逐階段確認)。當使用者要分析 issue、把需求拆成多階段 issue、依 issue 產生實作規劃或交付留言,或提到 doc-issues-analyze、issue 需求分析、issue 拆階段、tea issues、Gitea issue 留言時使用此 skill。
- **Claude Code / Antigravity**`/jsc:doc-issues-analyze`
- **Codex**`$doc-issues-analyze`,或用 `/skills` 選單
- **OpenCode**:描述需求自動觸發
### `doc-issues-breakdown`
讀取使用者選擇的一或多種來源(專案編號、議題編號、檔案文件;至少一種;若選專案編號則只讀取該專案下開啟中的議題),先檢查 `tea``GITEA_TOKEN` 並詢問使用者要用 `tea` 或 Gitea API + token,將來源內容合併整理成保存議題內容,再拆分成多個小功能議題(標題、描述、阻擋關閉、依複雜度評估到期日),每個小功能議題都會詢問使用者描述是否有補充內容,所有議題描述最後都會依描述內容產生 TODO list,依到期日排序並在使用者逐議題確認後實作、留言進度、完成後 PR 到 develop 或 master。所有中間成果都不落地成草稿檔,一律使用 `tea` 或 Gitea API 保存到議題描述或留言。當使用者要把需求拆成小功能議題、依專案/議題/文件產生保存議題與功能議題、依到期日排程實作、或提到 doc-issues-breakdown、issue breakdown、議題拆分、小功能議題、Gitea issue 拆解時使用此 skill。
- **Claude Code / Antigravity**`/jsc:doc-issues-breakdown`
- **Codex**`$doc-issues-breakdown`,或用 `/skills` 選單
- **OpenCode**:描述需求自動觸發
<!-- JSC-SKILLS:END -->
---
## 新增一個 skill
1. 建立目錄:`mkdir -p skills/<your-skill-name>`
2. 編輯 `skills/<your-skill-name>/SKILL.md` 的 frontmatter
- `name`:小寫、數字、連字號(`-`),最長 64 字元。**這就是 Claude Code / Antigravity 的 `/jsc:<name>`**。
- `description`:第三人稱,寫清楚「何時用、何時不用」與觸發關鍵字 — 這是各助理自動載入的唯一依據。
3. 在內文寫下 skill 的具體步驟。
4. 手動把這個 skill 補進上方「Skills 目錄」區塊。
5. **bump 版本並 push**:四家都以 git 內容/版本判斷更新,請把 `.claude-plugin/plugin.json``.codex-plugin/plugin.json``plugin.json` 三個 manifest 的 `version` 一起 bumpcommit 後 push 到 gitea。
6. 讓各助理更新:
- Claude`claude plugin update jsc@doc`
- Codex`codex plugin marketplace upgrade doc`
- Antigravity`git -C ~/jsc-plugin pull && agy plugin uninstall jsc && agy plugin install ~/jsc-plugin`
- OpenCode`git pull` 後重新複製 `skills/`