Commit Graph
18 Commits
Author SHA1 Message Date
jiantw83 c40b561589 feat(wiki): 目錄頁專用存取庫、HASH 去除截短與 H 前綴
What:CONTENTS 成為第 15 種頁面類型,解析鏈為 JSC_WIKI_REPO_CONTENTS 到
JSC_WIKI_REPO,刻意不退回型別變數。hash-id 拿掉 8 碼截短與 H 前綴改寫,只留大寫
轉換,輸出完整 40 碼;空輸入改成用法錯誤。新增 page-name.sh、wiki-contents.sh、
migrate-wiki.sh 與 wiki-delete 子命令。

Why:H 前綴會命中 16 個首碼裡的 13 個,還丟掉第 8 碼,把有效熵壓到 28 位元,而且
全庫查不到任何理由紀錄。目錄頁的整列 upsert 原本 14 處只有一處寫成程式,同一段判斷
做 14 次,錯一次就少一筆紀錄。

How:頁名樣式仍收 H 加 7 碼的舊頁,遷移期間讀得到舊頁。wiki-contents.sh 建新頁時
剝掉範本的示範列,否則每個目錄頁第一次建立都會留一列佔位死連結。migrate-wiki.sh
預設只印對照表,--apply 先寫新頁、確認寫成、才刪舊頁;孤兒頁只列不猜,因為 SHA-1
不可逆,新頁名只能靠候選鍵正推。

Who:jsc-gitea
2026-09-02 11:02:07 +08:00
jiantw83 8467b89a09 feat(wiki): 頁型別新增 MONITOR
What:
- resolve_wiki_repo 的型別白名單與檔頭註解加上 MONITOR,check-wiki-rules.sh 的 TYPES 一併加入。
- README 的兩處型別列舉加上 MONITOR,環境變數表補一列 JSC_WIKI_REPO_MONITOR。
- wiki 技能的 allowed types 與行為清單的呼叫端補上這個型別與它的擁有者。
- 三份 manifest 的版本一起提升。

Why:
- 技能助理要把巡檢結果寫進 wiki,落點就是監控頁。型別不在白名單裡,wiki-repo 會直接回「unknown wiki type」而拒絕解析,助理連寫都寫不出去。
- 型別串散在五個檔案,只改一處會讓解析通過但檢核工具漏掉,或反過來。所以一次改齊。

How:
- MONITOR 放在型別串尾端,接在 TOOLING 之後。既有順序是依用途分群,不是字母序,所以不重排。
- 環境變數的規則完全沿用既有型別:先讀 JSC_WIKI_REPO_MONITOR,再退回 JSC_WIKI_REPO,不得跨型別代用。這一條由 resolve_wiki_repo 統一處理,新型別自動繼承,不必另寫分支。
- 雜湊來源的規則不寫在這個存放庫。README 已載明雜湊規則的唯一來源是技能準則的命名總表,這裡不複述。
- wiki 技能的 description 原本逐一列舉呼叫端,已經接近長度上限。這次改成括號標注頁型的濃縮寫法,加了一個呼叫端之後整行反而變短,句數維持在上限內。

Who:
技能助理落地帶出來的頁型別需求,四個存放庫同一批改。
2026-09-01 12:10:40 +08:00
jiantw83 28a52c9f0c fix(gitea): 認證失敗不再被讀成頁面不存在
金鑰失效以前會偽裝成別的結果。指令把請求直接接進管線,管線的結束狀態
取自後段的解析程式,前段的失敗就被吃掉。wiki 頁清單因此看起來是空的,
PR 留言看起來像沒有任何審查意見。wiki 讀取更把每一種失敗都翻成
「頁面不存在」。

技能組寫 wiki 的語意是附加、不覆蓋,判斷依據是先把舊內容讀回來。呼叫端
一旦把認證失敗當成一張新頁,就會整份蓋上去,舊紀錄直接消失。

現在失敗成因分開回報:找不到、金鑰失效或權限不足、其他 API 失敗,各給
一個結束碼。每條管線先接進變數,先看結束碼,再解析內容。議題工具的同一
類缺陷一併修掉。wiki 技能也把「只有找不到才可以建新頁」寫成獨立規則,
涵蓋每一條「不存在就建立」的路徑。
2026-08-31 11:11:55 +08:00
Jeffery d4466dfba8 fix(gitea): 寫入前先確認 2026-08-28 17:55:51 +08:00
jiantw83 3fe9b55840 feat(gitea): 支援回覆 PR 留言 2026-08-28 09:30:02 +08:00
jiantw83 920c68087e feat(wiki): 支援 SKILLSET 頁面類型
What:`tools/gitea.sh` 的 `resolve_wiki_repo()` 允許清單加入 `SKILLSET`,`wiki-repo` 的用法註解同步。`skills/wiki/SKILL.md` 第 2 步的允許頁型補上 `SKILLSET`,同時補上先前漏列的 `CHECK` 與 `REPORT`;`description` 的呼叫端清單補上「`jsc-meta` 的 `SKILLSET` 頁」。

Why:`jsc-meta` 的四支異動技能收尾要把驗證結果寫進 `SKILLSET_{HASH}`,而所有 wiki 讀寫都走這一支技能與這一支腳本。頁型不在允許清單裡,`wiki-repo` 會直接 exit 2,報告一個字也寫不進去。`CHECK` 與 `REPORT` 是另一件事:腳本早就支援,技能的允許清單卻沒補,照技能寫的走會以為那兩種頁型不合法。

How:只加類型名,解析規則不動——`JSC_WIKI_REPO_SKILLSET` 優先,未設定才退回 `JSC_WIKI_REPO`,不做跨類型代用,兩個都沒有仍是 exit 3 交回技能問使用者。雜湊來源是被改動的 domain 存取庫 `{owner}/{repo}`,用的是同一支 `hash-id`,所以這裡不必為它多寫一條特例(`CHECK` 那種主機加帳號的例外才需要)。

Who:`jsc-gitea:wiki` 技能與 `jsc-meta` 四支異動技能的異動報告寫入路徑。
2026-08-27 16:34:17 +08:00
jiantw83 c3c810c97b feat(gitea): 新增 pr-get 與 pr-edit 兩個 PR 子指令
What:`tools/gitea.sh` 新增 `pr-get` 與 `pr-edit`。`pr-get` 印出一支 PR 的標題、base 分支與描述,前三行固定 `title`、`base`、`body` 三個標記,第 4 行起是描述原文;`pr-edit` 從檔案讀描述,一次更新標題與描述。

Why:分支已經有 PR 時,每次認可之後都要比對標題、描述與前置 PR 依賴三項,有差才更新。原本只有 `pr-create` 與 `pr-status`,讀不到既有 PR 的標題與描述,比不了就只能重開一支 PR 或整支蓋掉,兩種都會把審查中的討論打斷。

How:`pr-get` 把唯一會多行的描述放在輸出最後一段,呼叫端用 `head -n1`、`sed -n 2p`、`tail -n +4` 就取得到三個欄位,全程不必解析 JSON。`pr-edit` 的描述走檔案而不走參數,多行內容與全形標點才裝得下;描述檔不存在回 `2`,API 呼叫失敗回 `4`,成功印 `OK {owner}/{repo}#{編號}`。

Who:`jsc-git:pr` 的既有 PR 校準步驟,以及任何要先比對 PR 現況再決定改不改的呼叫端。
2026-08-27 11:20:27 +08:00
jiantw83 6ce2822147 feat(wiki): 支援 CHECK 與 REPORT 兩種頁面類型
What: gitea.sh 的 wiki-repo 白名單加入 CHECK 與 REPORT,check-wiki-rules.sh 的驗證涵蓋範圍從九種擴到十一種,wiki 技能的 description 補上兩個新呼叫者。
Why: 執行環境體檢(jsc-cli:doctor)與工作報表(jsc-log:report)都要寫 wiki,但頁面類型不在白名單裡就解析不出存取庫,兩支技能都寫不進去。
How: 只動白名單與驗證清單,解析規則本身不變:一律先讀 JSC_WIKI_REPO_{TYPE},再退回 JSC_WIKI_REPO,不得跨類型代用。
Who: 體檢頁與報表頁的 wiki 位置解析。
2026-08-26 10:45:34 +08:00
jiantw83andClaude Opus 5 dc17907554 chore(gitea): markdown 渲染子命令與文件、manifest 同步
What:gitea.sh 新增 markdown 子命令與可切換的 Content-Type,README 補上新工具、新技能與 HTML 範本說明,三份 manifest 同步升版到 0.1.3。

Why:markdown 轉 HTML 要交給 Gitea 自己渲染,排版才跟 wiki、議題頁一致;但 /markdown 端點在 Gitea 1.27 回 200 卻是空內容,看起來像成功。

How:改走吃純文字的 /markdown/raw,req 送出的 Content-Type 改由 REQ_CONTENT_TYPE 決定,預設仍是 application/json。代價寫進註解:raw 端點不吃 wiki 情境,[[頁名]] 要由呼叫端先換成絕對網址。

Who:所有透過 jsc-gitea 產生文件的技能。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 09:19:25 +08:00
jiantw83andClaude Opus 5 4f3ba9c8d3 feat(pr-status,pr-comments): 新增 PR 狀態與留言查詢子指令
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-25 12:08:11 +08:00
jiantw83andClaude Opus 5 db28f6c1d0 fix(tea-token): 依主機挑 tea 登入,避免把 A 站 token 送去 B 站
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-25 11:13:35 +08:00
jiantw83andClaude Opus 5 f8a62b8068 feat(wiki-url): 新增 wiki 頁絕對網址子指令,供跨存取庫連結使用
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 18:54:19 +08:00
jiantw83andClaude Opus 5 458bbb7fff feat(wiki): 頁型允許清單新增 DELIVER
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 17:24:31 +08:00
jiantw83andClaude Fable 5 653b619ea1 feat(wiki): wiki 頁型允許清單新增 LEARN
What:gitea.sh 的 wiki-repo 允許型別清單、wiki 技能 SKILL.md 的頁型清單,以及 check-wiki-rules.sh 的驗證案例,同步收錄 LEARN 頁型。
Why:jsc-log 新增 LEARN wiki 頁型,若允許清單未收錄,wiki-repo LEARN 會以 unknown type(exit 2)被擋下,學習紀錄頁無法解析存放位置。
How:resolve_wiki_repo 的 case 白名單加入 LEARN,解析順序維持 JSC_WIKI_REPO_LEARN 優先、退回 JSC_WIKI_REPO、不跨型別代用;check-wiki-rules.sh 補上 LEARN 專屬變數優先與退回共用預設兩個案例;SKILL.md 允許頁型清單同步更新。
Who:jsc-gitea wiki 技能與其呼叫方(jsc-log 等)的 wiki 頁型解析功能。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 11:36:49 +08:00
jiantw83 11082f648e fix(wiki): 依頁面類型解析 wiki repo 並統一 hash 2026-08-21 16:53:17 +00:00
jiantw83andClaude Fable 5 684d3f4f31 feat(gitea): gitea.sh 認證失敗時自動退回 tea CLI 登入 token
What(改了什麼)
- tools/gitea.sh 新增 tea_token():解析 ~/.config/tea/config.yml,優先取 default: true 的登入 token,否則取第一個。
- 啟動時 GITEA_TOKEN 未設定或為空,改用 tea token;兩者皆無才維持原本的必填錯誤。
- req() 遇 HTTP 401/403 且 tea token 存在又與當前 token 不同時,換用 tea token 重試一次,之後不再重試。
- 檔頭用法註解補上退回機制的說明。

Why(為什麼改)
- 使用者規則:api token 401/403 時,若 tea CLI 已登入就取其 token 重試,避免因 GITEA_TOKEN 過期或未設定就直接中斷流程。

How(怎麼改)
- 以 awk 解析 tea 設定檔的 logins 清單,抓各登入的 token 與 default 旗標。
- req() 改為 while 迴圈包住 curl,retried 旗標保證最多重試一次;HTTP >= 400 仍以 exit 4 收場。
- 實測:sh -n 語法檢查通過;GITEA_TOKEN 為空時經 tea token 成功;GITEA_TOKEN=deadbeef 時走 401 重試路徑成功;無 tea 設定且 token 為空時維持原錯誤訊息。

Who(影響哪個功能/使用者)
- 所有經 tools/gitea.sh 呼叫 Gitea API 的技能(wiki、repo-sync、jsc-git pr 等)與使用者:token 缺失或失效時多一層自動救援,行為只在原本會失敗的情境改變。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 08:23:27 +00:00
jiantw83andClaude Fable 5 df93714317 feat(gitea): gitea.sh 新增 pr-depend(前置 PR 依賴阻擋)與 repo-set(描述/網頁)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:03:35 +08:00
jiantw83andClaude Fable 5 a60686c796 feat(gitea): 匯入 jsc-gitea 技能組
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 13:08:43 +08:00