chore(plugin 版本): 三家 manifest 升版 0.1.4

This commit is contained in:
2026-08-14 18:25:41 +08:00
parent f59a6865ae
commit 0ce8979de4
4 changed files with 47 additions and 54 deletions
+16 -25
View File
@@ -1,12 +1,12 @@
---
name: todo-wiki
description: 把「需求 → 分析 → 產生鎖定模型的 TODO 清單 → 同步到 Gitea wiki 目錄與頁面」固定成禁止本機檔案落地的流程:先依 `/jsc-shared:spec-model` 的「需求分析」任務挑出分析模型,當前模型不符就停止;接著讀取來源(需求描述、本機檔案,或走 `/jsc-shared:spec-issue-read` 讀取的 Gitea 議題)並釐清需求,任何不清楚之處依 `/jsc-shared:spec-ask-user` 詢問;再依「依清單實作」任務挑出實作模型或採用使用者指定;最後把帶 `model`/`model_alias`/`model_reason`/`analyzed_by`/`analyzed_at`/`scope` frontmatter 與強制規則區塊的 TODO 內容直接同步到指定 Gitea wiki 目錄頁與 todo 頁。當使用者說要把需求整理成 wiki TODO、同步 todo 到 Gitea wiki、需求轉 todo-wiki、指定模型 todo wiki、或提到 todo-wiki skill 時觸發。不適用於:產生本機 todo.md、把需求拆分成多個 Gitea 議題(用 `/jsc-doc:issues-analyze`)、實作既有 Gitea 議題的 TODO(用 `/jsc-code:issues`)。
description: 把「需求 → 分析 → 產生鎖定模型的 TODO 清單 → 同步到 Gitea wiki 目錄與頁面」固定成不落地檔案的流程:先依 `/jsc-shared:spec-model` 的「需求分析」任務挑出分析模型,當前模型不符就停止;接著讀取來源(需求描述、本機檔案,或走 `/jsc-shared:spec-issue-read` 讀取的 Gitea 議題)並釐清需求,任何不清楚之處依 `/jsc-shared:spec-ask-user` 詢問;再依「依清單實作」任務挑出實作模型或採用使用者指定;最後把帶 `model`/`model_alias`/`model_reason`/`analyzed_by`/`analyzed_at`/`scope` frontmatter 與強制規則區塊的 TODO 內容直接同步到指定 Gitea wiki 目錄頁與 todo 頁。當使用者說要把需求整理成 wiki TODO、同步 todo 到 Gitea wiki、需求轉 todo-wiki、指定模型 todo wiki、或提到 todo-wiki skill 時觸發。不適用於:產生本機 todo.md、把需求拆分成多個 Gitea 議題(用 `/jsc-doc:issues-analyze`)、實作既有 Gitea 議題的 TODO(用 `/jsc-code:issues`)。
argument-hint: "[--source <需求描述|檔案路徑|議題編號>] [--impl-model <id|alias>] [--wiki-repo <owner/repo>] [--wiki-index CONTENTS] [--wiki-project <關聯計畫或系統名稱>] [--wiki-page TODO-<yyyyMMdd>-<HASH>] [--append|--overwrite] [--yes]"
---
# todo-wiki — 需求分析並同步指定模型 TODO 到 Gitea wiki
把「需求 → 分析 → 產生 TODO wiki 頁 → 交給指定模型實作」固定成七個階段。全程禁止本機檔案落地;唯一輸出位置是指定 Gitea wiki。
把「需求 → 分析 → 產生 TODO wiki 頁 → 交給指定模型實作」固定成七個階段。全程不建立本機 `todo.md`、草稿檔、暫存 JSON body 或 wiki clone;唯一輸出位置是指定 Gitea wiki。
| 階段 | 做什麼 | 產出 |
| --- | --- | --- |
@@ -26,16 +26,15 @@ argument-hint: "[--source <需求描述|檔案路徑|議題編號>] [--impl-mode
本 skill 特有補充:
- **不落地絕對規則**:全程禁止本機檔案落地。不得建立、更新、下載或暫存任何本機輸出/中介檔案,包含 `todo.md`、`plan.md`、`.md` 草稿、暫存 JSON body、附件暫存檔、wiki clone、或任何用來傳遞中間成果的檔案;中間成果只存在於對話內容、工具參數與 Gitea wiki API request body。不得使用 `curl --data @file`、`--data-binary @file` 或任何 `@file` 形式送出本機檔案。
- `--source` 指向本機既有檔案時可以唯讀讀取來源檔;這不是輸出落地,不得修改該來源檔或寫出衍生檔。`--source` 指向 Gitea 議題附件時,只能以 API/工具直接讀入記憶;若附件必須下載成暫存檔才能讀取,立刻停止並回報「附件需要檔案落地,違反本 skill 不落地規則」。
- **不落地絕對規則**:不得建立或更新本機 `todo.md`、`.md` 草稿、暫存 JSON body、wiki clone、或任何用來傳遞中間成果的檔案;中間成果只存在於對話內容與 Gitea wiki API request body。不得使用 `curl --data @file`。
- `--source` 指向本機檔案時可以唯讀讀取來源檔;這不是輸出落地。`--source` 指向 Gitea 議題附件時,僅可依 `spec-issue-read` 的附件唯讀暫存例外讀取,讀完立即刪除。
- 本 skill 產生的 wiki todo 頁就是 `spec-model` 第六節所述「帶 `model:` frontmatter 的清單檔」的源頭;本 skill 只負責產生與同步清單,不執行清單內容。
- 階段 1 的模型檢查針對「執行本 skill 分析工作的 agent 自己」;階段 3 選出的實作模型是寫進 wiki 頁給未來另一個 session 用。
- 目標 wiki repo 不明時必須詢問;不得因為目前工作目錄是某 repo 就臆測 wiki 目標。
- 目錄頁 title 預設固定為 `CONTENTS`,不詢問使用者;只有使用者明確提供 `--wiki-index` 時才覆蓋預設值。
- TODO 頁 title 預設固定為 `TODO-{yyyyMMdd}-{HASH}`,不詢問使用者;`yyyyMMdd` 使用 Asia/Taipei 當日日期,`HASH` 由需求彙整、關聯計畫或系統名稱產生穩定短雜湊並轉成全大寫。
- 必須詢問使用者是否需要把本 TODO 連結到計畫;使用者回答不需要時,不更新目錄頁,也不要把 TODO 加到目錄。
- 必須詢問使用者兩個獨立決策:是否關聯到計畫/系統名稱,以及是否更新 wiki 目錄頁;使用者回答不加入計畫時,仍預設更新 wiki 目錄頁,除非使用者另行明確說不要更新目錄頁。
- 需要加入目錄頁時,目錄標題使用 `{關聯計畫的系統名稱}-代辦`,並連結到 TODO 頁。系統名稱優先從關聯計畫取得;若沒有關聯計畫,從需求內容尋找或產生系統名稱。
- 目錄頁不存在而需要新建時,頁面 Markdown 的大標題(H1)必須是 `# <系統名稱>`;若無法確認系統名稱且使用者也未提供,使用 `# 代辦事項`。不得用 `# CONTENTS` 作為新建目錄頁的大標題。
- 目錄頁禁止整頁覆蓋:不存在時才新建;存在時必須保留既有內容,只修改本 TODO 既有列或在既有表格附加新列。
## 參數
@@ -48,10 +47,10 @@ argument-hint: "[--source <需求描述|檔案路徑|議題編號>] [--impl-mode
| `--impl-model` | 直接指定實作模型(id 或 alias),跳過階段 3 的推薦流程;仍會在 `model_reason` 註明「使用者指定」。 |
| `--wiki-repo` | 指定要同步的 Gitea wiki repo,例如 `knowledges/Plan`。 |
| `--wiki-index` | wiki 目錄頁 title;未帶時固定使用 `CONTENTS`,不詢問。 |
| `--wiki-project` | 關聯計畫或系統名稱;需要加入目錄頁時,用於產生 `{關聯計畫的系統名稱}-代辦`。 |
| `--wiki-project` | 關聯計畫或系統名稱;需要更新目錄頁時,用於產生 `{關聯計畫的系統名稱}-代辦`。 |
| `--wiki-page` | todo 頁 title;未帶時固定使用 `TODO-{yyyyMMdd}-{HASH}`,不詢問。 |
| `--append` / `--overwrite` | 針對既有 wiki todo 頁 frontmatter `model` 不同的情境提前作答。二擇一,同時提供視為衝突,仍需詢問使用者。 |
| `--yes` | 略過一般性確認;不得略過模型不同是否覆蓋、目標 wiki 不明、是否連結到計畫、或對外寫入目標不明等必要決策。 |
| `--yes` | 略過一般性確認;不得略過模型不同是否覆蓋、目標 wiki 不明、是否關聯到計畫/系統名稱、是否更新 wiki 目錄頁,或對外寫入目標不明等必要決策。 |
## 階段 1:選分析模型
@@ -125,8 +124,8 @@ scope: <階段 2 產出的 scope>
1. 依 `spec-gitea` 決定 host 與 token,不輸出 token。
2. 確認 `--wiki-repo`;缺少就詢問。`--wiki-index` 未帶時固定使用 `CONTENTS`,`--wiki-page` 未帶時固定使用 `TODO-{yyyyMMdd}-{HASH}`。
3. 詢問使用者是否需要把本 TODO 連結到計畫。若不需要,記錄為「不更新目錄頁」;若需要,確認或產生關聯計畫的系統名稱,用於目錄列標題。
4. 分頁讀取 `GET /repos/<owner>/<repo>/wiki/pages`,以 title 查表取得 todo 頁 `sub_url`;若需要連結到計畫,也取得目錄頁 `sub_url`。目錄頁不存在時才建立;目錄頁存在時必須讀取原內容並保留,不得用新目錄內容整頁覆蓋。不得為了找頁面自行猜測 title 轉義規則。
3. 詢問使用者兩個獨立決策:是否關聯到計畫/系統名稱,以及是否更新 wiki 目錄頁。使用者回答不加入計畫時,仍預設會更新目錄頁;只有使用者明確回答不要更新目錄頁,才可記錄為「不更新目錄頁」。
4. 分頁讀取 `GET /repos/<owner>/<repo>/wiki/pages`,以 title 查表取得 todo 頁 `sub_url`;若目錄頁更新決策為開啟,也取得目錄頁 `sub_url`。目錄頁不存在時才建立;目錄頁存在時必須讀取原內容並保留,不得用新目錄內容整頁覆蓋。不得為了找頁面自行猜測 title 轉義規則。
5. 讀取既有 todo 頁;若不存在,策略為「建立」。
6. 既有 todo 頁存在時解析 frontmatter:
@@ -144,8 +143,8 @@ scope: <階段 2 產出的 scope>
同步順序固定:
1. 寫入 todo 頁。
2. 若使用者確認需要連結到計畫,upsert 目錄頁表格列:目錄頁不存在才建立;存在時禁止整頁覆蓋,只修改既有 `<關聯計畫的系統名稱>-代辦` 列,或在既有表格/頁末附加新列。若使用者回答不需要,跳過目錄頁更新。
3. 讀回 todo 頁確認內容已更新;有更新目錄頁時也讀回目錄頁確認。
2. 若使用者明確表示不要更新目錄頁,跳過目錄頁更新;否則 upsert 目錄頁表格列。目錄頁不存在才建立;存在時禁止整頁覆蓋,只修改既有 `<關聯計畫的系統名稱>-代辦` 列,或在既有表格/頁末附加新列。
3. 讀回 todo 頁確認內容已更新;有更新目錄頁時也讀回目錄頁確認。讀回時若回應含 `content_base64`,必須 base64 解碼後再比對 Markdown 內容是否與預期一致;若回應格式不同,依 Gitea 官方 API 文件取出正文再比對,不可只確認狀態碼或頁面存在。
目錄頁表格列格式:
@@ -154,21 +153,13 @@ scope: <階段 2 產出的 scope>
```
若既有目錄頁沒有 `| 頁面 | 內容 |` 表格,附加一段新的目錄表格到頁面末尾,不得刪除或重排既有內容。
目錄頁不存在而新建時,內容格式如下;`<目錄大標題>` 必須依本 skill 特有補充使用系統名稱或 `代辦事項`,不是 wiki page title:
```markdown
# <目錄大標題>
| 頁面 | 內容 |
| --- | --- |
| [<關聯計畫的系統名稱>-代辦](<todo page title percent-encoded>) | todo wiki:<關聯計畫的系統名稱> 代辦——執行規則、需求彙整、分群任務與驗收條件 |
```
API 寫入方式:
- 建立新頁:`POST /repos/<owner>/<repo>/wiki/new`,body 帶 `title`、`content`、`message`。
- 更新既有頁:先查表取得 `sub_url`,再用 `PATCH /repos/<owner>/<repo>/wiki/page/<sub_url>`,body 帶 `title`、`content`、`message`。
- request body 必須由工具呼叫、stdin、shell 變數或記憶中內容直接送出,不得先寫成本機 JSON、Markdown 或任何暫存檔;禁止所有 `@file` 形式。
- 建立新頁:`POST /repos/<owner>/<repo>/wiki/new`,body 帶 `title`、`content_base64`、`message`。
- 更新既有頁:先查表取得 `sub_url`,再用 `PATCH /repos/<owner>/<repo>/wiki/page/<sub_url>`,body 帶 `title`、`content_base64`、`message`。
- `content_base64` 的值必須是 wiki Markdown 內容以 UTF-8 編碼後再 base64 編碼的結果;`title`、`message` 與其他原有欄位行為不變。
- request body 必須由工具呼叫、stdin、shell 變數或記憶中內容直接送出,不得先寫成本機 JSON 或 Markdown 檔。
不得自行猜測 Gitea wiki title 到 `sub_url` 的轉義規則;找既有頁一律查表。若 REST wiki 寫入端點不可用,回報「此站台不支援不落地 wiki 寫入」並停止,不得改用 wiki git clone。
@@ -182,7 +173,7 @@ API 寫入方式:
| 實作模型 | `model` / `model_alias`,並註明推薦或使用者指定 |
| 項目數 | 本次新增的 checklist 項目數 |
| Wiki repo | `<owner/repo>` |
| 目錄頁 | URL;若本次未連結到計畫,填「未更新(使用者選擇不加入目錄)」 |
| 目錄頁 | URL;若使用者明確不要更新目錄頁,填「未更新(使用者選擇不更新目錄頁)」 |
| Todo 頁 | URL |
| 本次動作 | 建立/附加/覆蓋 |