feat(doc-issues-sync): 新增依工作目錄勾稽議題 TODO 與標籤並產生進度留言的 skill
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
7bdd4226bb
commit
71de4bf6f4
@@ -0,0 +1,111 @@
|
||||
---
|
||||
name: doc-issues-sync
|
||||
description: 讀取一個 Gitea 專案(project)或單一議題(優先用 tea,否則用 Gitea REST API + curl + GITEA_TOKEN,不依賴 jq);若給的是專案就讀取與此專案關聯的所有議題,若給的是議題就只同步該議題。議題若有標籤就依標籤分組並以 AskUserQuestion 讓使用者挑選要同步哪些標籤的議題(只有一個議題或全部無標籤則跳過)。接著一個議題派一個 subagent,基於工作目錄下的所有檔案:分析議題描述的需求並判斷議題內的 TODO(markdown 任務清單)是否足以追蹤議題描述的需求、不足就補上 TODO 追加到議題正文、依需求從既有標籤更新議題標籤、逐條判斷未完成 TODO(含新增)是否已完成、有異動就整理成一則留言。所有對 Gitea 的寫入(改正文/改標籤/留言)先產生草稿並經使用者確認再執行。當使用者要同步議題進度、依專案批次更新議題 TODO、依程式碼勾稽議題完成度、更新議題標籤與進度留言,或提到 doc-issues-sync、issue sync、議題同步、TODO 勾稽、tea issues、Gitea 專案議題時使用此 skill。
|
||||
---
|
||||
|
||||
# 依工作目錄同步 Gitea 專案/議題的 TODO 進度與標籤
|
||||
|
||||
你要讀取使用者提供的一個 Gitea **專案(project)**或**單一議題**,取得要同步的議題清單,然後一個議題派一個 subagent,**以目前工作目錄下的所有檔案為依據**,勾稽並更新每個議題的 TODO(markdown 任務清單)與標籤,最後把 TODO 的異動整理成留言。**修改議題正文、變更議題標籤、留言都是對外且不易復原的動作,subagent 只產生草稿,實際寫入 Gitea 前必須先讓使用者確認**。請依下列階段依序完成。
|
||||
|
||||
## 前置:輸入與工具
|
||||
|
||||
- **輸入**:一個 Gitea 專案(project)或一筆議題的參照(URL 最佳,或 `owner/repo` + project id/issue index)。
|
||||
- **依據來源**:所有「TODO 是否完成」「該補哪些 TODO」「該掛哪些標籤」的判斷,一律以**目前工作目錄下的檔案內容**為準(程式碼、設定、文件等),不得臆測。
|
||||
- **工具優先序**:
|
||||
1. 若該 host 在 `tea login list` 中有對應 login,優先用 `tea`(`tea issues`、`tea comment`、`tea labels` 等),並以 `--login <name> --repo <owner>/<repo>` 指定目標。
|
||||
2. 否則改用 Gitea REST API + `curl`,帶標頭 `Authorization: token $GITEA_TOKEN`(環境變數 `GITEA_TOKEN` 已設定;未設定則停下請使用者提供)。
|
||||
- **不要依賴 `jq`(環境未安裝)**:需要解析 JSON 時,用 `tea` 的結構化輸出(例如 `--fields ... --output csv`),或把原始 JSON 交給 subagent 解析,不要在指令中 pipe 到 `jq`。
|
||||
- **TODO 的定義**:議題正文(body)中的 markdown 任務清單項目,`- [ ]`(未完成)與 `- [x]`(已完成)。本 skill 所有「TODO 追蹤/勾稽/新增」都在這種任務清單上操作。
|
||||
- **工作目錄**:所有草稿放在 `.docs/doc-issues-sync/`。
|
||||
|
||||
## 第 0 步:解析輸入、判斷專案或議題、準備工具
|
||||
|
||||
1. 從輸入解析出 `host`、`owner`、`repo`,並判斷這是**專案**還是**議題**:
|
||||
- 議題 URL 形如 `https://<host>/<owner>/<repo>/issues/<index>` → 議題。
|
||||
- 專案 URL 形如 `https://<host>/<owner>/<repo>/projects/<id>` 或組織層級 `https://<host>/<owner>/-/projects/<id>` → 專案。
|
||||
2. 執行 `tea login list`,判斷該 host 走 tea 還是 API(API base 為 `https://<host>/api/v1`)。
|
||||
3. 建立 `.docs/doc-issues-sync/`(若不存在)。
|
||||
4. **找不到就詢問使用者(AskUserQuestion)**:若無法從輸入判斷是專案還是議題、或依輸入查不到對應的專案/議題(例如 API 回 404、專案 id 不存在、repo 拼錯),必須用 AskUserQuestion 請使用者補齊或更正(host/owner/repo、專案 id 或議題 URL)。取得可解析的目標前,不進入下一步。
|
||||
|
||||
## 第 1 步:取得要同步的議題清單
|
||||
|
||||
- **若輸入是議題**:清單就是這一筆議題,**跳過本步的專案展開**,直接進入第 2 步。
|
||||
- **若輸入是專案**:讀取與此專案關聯的所有議題。
|
||||
- tea:優先用 tea 對應指令列出專案關聯議題;若該版本 tea 無法列專案議題,改用 API。
|
||||
- API:以 Gitea 的 project/board API 取得該專案掛載的所有議題(column/card → issue),彙整成議題清單(每筆記下 `owner/repo`、`index`、`title`、`labels`)。
|
||||
- 若該 Gitea 版本不支援 project API 或查不到關聯議題,用 AskUserQuestion 告知並請使用者改提供議題清單(或改給單一議題 URL),不要自行臆測要同步哪些議題。
|
||||
|
||||
## 第 2 步:依標籤分組並詢問要同步哪些(AskUserQuestion)
|
||||
|
||||
1. 讀取清單中每個議題的 `labels`。
|
||||
2. **跳過條件**:若清單只有**一個議題**,或**所有議題都沒有標籤**,跳過本步、同步全部清單。
|
||||
3. 否則依標籤把議題分組(一個議題有多個標籤時,各組都出現),用 **AskUserQuestion(multiSelect)** 讓使用者挑選要同步「哪些標籤」的議題:
|
||||
- 每個選項是一個標籤(附該標籤下的議題數量),讓使用者多選。
|
||||
- 標籤數量超過 AskUserQuestion 選項上限(4)時,改在訊息中列出全部標籤與各自議題數,請使用者回覆要同步哪些(可用「其他」自訂輸入)。
|
||||
4. 依選取的標籤過濾清單:保留**帶有任一選取標籤**的議題,作為後續要同步的最終清單。未被選取標籤涵蓋的議題不同步。
|
||||
|
||||
## 第 3 步:逐議題派 subagent 產生同步草稿(每個議題一個 subagent)
|
||||
|
||||
對最終清單中的**每一個議題各派一個 subagent**。subagent **以目前工作目錄下的所有檔案為依據**,只讀檔案與議題、**只在 `.docs/doc-issues-sync/` 底下寫草稿**,**不得修改任何工作目錄的原始碼、不得直接改議題正文/標籤、不得直接留言**。每個 subagent 依序做:
|
||||
|
||||
1. **讀取議題**:`title`、`body`(含其中的 TODO 任務清單)、`labels`、以及既有 comments。
|
||||
- tea:`tea issues <index> --repo <owner>/<repo> --login <name> --comments`。
|
||||
- API:`GET {base}/repos/{owner}/{repo}/issues/{index}` 與 `.../comments`。
|
||||
- 一併盤點該 repo 既有標籤(供第 3.2 用):`GET {base}/repos/{owner}/{repo}/labels`(tea:`tea labels list`)。
|
||||
2. **3.1 判斷 TODO 是否足以追蹤議題描述的需求,不足就補**:分析議題描述的需求,逐項對照現有 TODO,判斷目前的 TODO 清單是否足以追蹤議題描述的需求。若不足,補上缺少的 TODO(以未完成 `- [ ]` 形式),規劃**追加到議題正文**(草稿中給出「追加後的正文」與「新增了哪些 TODO」)。補的 TODO 必須能對應到議題描述的需求,不得編造需求未涵蓋的項目。
|
||||
3. **3.2 依需求更新可用標籤**:依議題需求性質,從該 repo **既有標籤**中挑選應掛上(或應移除)的標籤,草稿中列出「建議的標籤異動」(新增哪些、移除哪些、維持哪些)。**不自行新建標籤**,除非使用者要求;找不到合適標籤就維持原樣並標註。
|
||||
4. **3.3 逐條勾稽未完成 TODO 是否已完成**:對所有**未完成**的 TODO(含 3.1 新增的),逐條依工作目錄下的檔案內容判斷是否已完成。已完成者標記為 `- [x]` 並在草稿記下判斷依據(以 `path:line` 指出對應實作位置);無法從檔案可靠判斷者維持未完成並標註「需人工確認」。
|
||||
5. **3.4 整理 TODO 異動留言**:若本議題有任何 TODO 異動(**新增**的 TODO,或**狀態變更**——由未完成改為完成),整理成一則留言草稿,內容包含:本次新增了哪些 TODO、哪些 TODO 判定為完成(附對應實作位置)、哪些仍未完成(含原因/需人工確認)。若沒有任何 TODO 異動,草稿標明「無異動、不需留言」。
|
||||
|
||||
每個 subagent 產出一份 `.docs/doc-issues-sync/issue-{owner}-{repo}-{index}.md`,至少包含:議題參照與標題、追加後的完整正文(標明新增與勾稽的變更)、建議的標籤異動、TODO 異動留言草稿(或「無異動」)、以及所有「需人工確認」項目。
|
||||
|
||||
## 第 4 步:草稿品質檢查
|
||||
|
||||
實際寫入 Gitea 前,主 agent 必須檢查所有議題草稿:
|
||||
|
||||
- 內容以繁體中文為主、英文為輔,無亂碼或破損文字。
|
||||
- 每個要同步的議題都有對應草稿;正文的 TODO 變更(新增/勾稽)與留言草稿的敘述一致。
|
||||
- 標籤異動只用到該 repo 既有標籤(名稱/id 對得上第 3.1 盤點結果),未擅自新建標籤。
|
||||
- 「已完成」的勾稽都有工作目錄檔案的依據;無依據者標為未完成或「需人工確認」,未被誤判為完成。
|
||||
- 有問題先修正草稿並重新檢查,通過後才進入下一步。
|
||||
|
||||
## 第 5 步:詢問使用者要如何執行(AskUserQuestion)
|
||||
|
||||
草稿通過檢查後,主 agent 用 AskUserQuestion 讓使用者確認要如何對 Gitea 執行寫入,至少提供:
|
||||
|
||||
1. 全部執行:追加/勾稽 TODO 到議題正文、套用標籤異動、對有異動的議題留言。
|
||||
2. 只更新議題(正文+標籤),先不留言。
|
||||
3. 只產生草稿、先不動 Gitea:僅輸出本機草稿供檢視。
|
||||
4. 逐議題確認:每處理完一個議題就回報,待使用者確認後再做下一個。
|
||||
5. 其他(由使用者輸入自訂方式)。
|
||||
|
||||
未獲確認前不得對 Gitea 做任何寫入。
|
||||
|
||||
## 第 6 步:套用到 Gitea
|
||||
|
||||
依使用者選擇,對最終清單的每個議題執行(主 agent 執行,非 subagent):
|
||||
|
||||
- **更新正文(TODO 追加+勾稽)**:以草稿中「追加後的完整正文」更新議題 body。
|
||||
- tea:對應的 issue 編輯指令;API:`PATCH {base}/repos/{owner}/{repo}/issues/{index}`,body `{"body":"<新正文>"}`。
|
||||
- 更新前先重新讀一次議題正文,若與 subagent 讀到的版本已不同(他人期間有改動),停下該議題並回報,避免覆蓋他人變更。
|
||||
- **標籤異動**:套用建議的新增/移除。
|
||||
- tea:`tea labels`/issue 編輯對應指令;API:`POST`/`DELETE {base}/repos/{owner}/{repo}/issues/{index}/labels`(用既有 label id)。
|
||||
- **留言**:對有 TODO 異動的議題張貼留言草稿。
|
||||
- tea:`tea comment --repo <owner>/<repo> --login <name> <index> "<留言內容>"`;API:`POST {base}/repos/{owner}/{repo}/issues/{index}/comments`,body `{"body":"<留言內容>"}`。
|
||||
- 無異動的議題不留言。
|
||||
- 若選「逐議題確認」,每處理完一個就回報並等待確認再繼續。
|
||||
|
||||
## 第 7 步:回報與清理
|
||||
|
||||
- 回報:輸入是專案或議題、(若為專案)關聯議題數與依標籤篩選後的最終清單、每個議題新增了哪些 TODO、勾稽為完成的 TODO(附實作位置)、標籤異動、是否留言,以及所有「需人工確認」或「Gitea 版本不支援」項目。
|
||||
- 草稿(`.docs/doc-issues-sync/`)預設保留供檢視;使用者要求清理時才刪除本次產生的檔案,不得刪除 `.docs/` 內其他既有檔案。
|
||||
|
||||
## 重要限制
|
||||
|
||||
- 修改議題正文、變更標籤、留言都是對外且不易復原的動作,**必須先經第 5 步使用者確認**;未確認前只產生本機草稿。
|
||||
- 「TODO 是否完成」「該補哪些 TODO」「該掛哪些標籤」一律以**工作目錄下的檔案**為依據;無法可靠判斷就標「需人工確認」,不得臆測或編造需求未涵蓋的內容。
|
||||
- subagent 與各步驟只讀檔案與議題、只寫 `.docs/` 草稿,**不得修改任何工作目錄原始碼**。
|
||||
- 標籤只從既有標籤挑選,不自行新建(除非使用者要求)。
|
||||
- 不要依賴 `jq`(未安裝);JSON 解析改用 tea 結構化輸出或由 subagent 解析。
|
||||
- 留言與草稿不得洩漏個資(PII);若議題內容含個資,於草稿與留言中僅保留必要資訊或去識別化。
|
||||
- 文件、留言與草稿以繁體中文為主、英文為輔;API 名稱、型別名稱與程式碼片段可保留英文。
|
||||
Reference in New Issue
Block a user