Files
doc/skills/doc-issues-sync/SKILL.md
T

112 lines
12 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: 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 idissue 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 還是 APIAPI base 為 `https://<host>/api/v1`)。
3. 建立 `.docs/doc-issues-sync/`(若不存在)。
4. **找不到就詢問使用者(AskUserQuestion**:若無法從輸入判斷是專案還是議題、或依輸入查不到對應的專案/議題(例如 API 回 404、專案 id 不存在、repo 拼錯),必須用 AskUserQuestion 請使用者補齊或更正(hostowner/repo、專案 id 或議題 URL)。取得可解析的目標前,不進入下一步。
## 第 1 步:取得要同步的議題清單
- **若輸入是議題**:清單就是這一筆議題,**跳過本步的專案展開**,直接進入第 2 步。
- **若輸入是專案**:讀取與此專案關聯的所有議題。
- tea:優先用 tea 對應指令列出專案關聯議題;若該版本 tea 無法列專案議題,改用 API。
- API:以 Gitea 的 projectboard API 取得該專案掛載的所有議題(column/card → issue),彙整成議題清單(每筆記下 `owner/repo``index``title``labels`)。
- 若該 Gitea 版本不支援 project API 或查不到關聯議題,用 AskUserQuestion 告知並請使用者改提供議題清單(或改給單一議題 URL),不要自行臆測要同步哪些議題。
## 第 2 步:依標籤分組並詢問要同步哪些(AskUserQuestion
1. 讀取清單中每個議題的 `labels`
2. **跳過條件**:若清單只有**一個議題**,或**所有議題都沒有標籤**,跳過本步、同步全部清單。
3. 否則依標籤把議題分組(一個議題有多個標籤時,各組都出現),用 **AskUserQuestionmultiSelect** 讓使用者挑選要同步「哪些標籤」的議題:
- 每個選項是一個標籤(附該標籤下的議題數量),讓使用者多選。
- 標籤數量超過 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 名稱、型別名稱與程式碼片段可保留英文。