jiantw83 7c963b73cf feat(lint): 機檢改讀共用簡體字表、加亂碼類別、掃描擴及程式碼檔
What
- 簡體字表改成優先讀 jsc-hooks 的 `hooks/simplified.txt`,讀不到才退回內建備援字表。
- 新增「亂碼」類別:U+FFFD 替代字元、雙重編碼的 `�`,以及 Latin-1 雙重編碼特徵。
- 掃描範圍加入程式碼檔(sh、js、ts、py、cs、java、go、rb、php、sql、yml、yaml、toml)。
- 檔頭註解補上分流理由,並把本檔自己加進跳過清單。

Why
- 字表寫死在本檔,和 hook 端的守門字表各自維護,兩邊遲早不一致;真實來源只該有一份。
- 內建備援不能拿掉:jsc-hooks 不一定裝在這台機器上,單獨 clone plugins/meta 或 CI 只取
  一個 repo 都會發生。缺基礎設施就讓簡體字檢查靜靜失效,會把「沒命中」變成假通過。
- 新規則要求所有非程式碼輸出無亂碼、無簡體字,程式碼註解也算,所以檢查得看得到程式碼檔。

How
- `simplified_file()` 的搜尋路徑比照 `jsc-hooks/hooks/lib.sh` 的 `jsc_gitea_sh()`:先環境變數
  `JSC_SIMPLIFIED_FILE`,再並排存取庫版面,最後已安裝的 plugin 快取版面取版本排序最後一份。
- 字表格式一行一個字,`#` 開頭與空行忽略,串成 grep -E 交替式。
- 分流:`.md` 與 `.json` 跑全部六項;程式碼檔只跑簡體字與亂碼。中國用語、半形標點、AI 套話、
  並列斜線這四項在程式碼裡會被英文標點、路徑、URL、正規表示式大量誤報,留著只會讓人忽略輸出。
- 亂碼樣式一律用十六進位跳脫寫,本檔才不會存進真的亂碼字元自己打自己。

Who
- 影響跑 `tools/ste100-lint.sh` 的人與 `jsc-meta:skill-check`、`jsc-meta:ste100-sync` 兩支技能。
2026-08-27 09:43:20 +08:00
2026-08-21 04:44:34 +00:00
2026-08-25 16:41:57 +08:00

jsc-meta — 技能組自我管理

jsc 技能組的 meta domain:新建、更新、刪除技能的流程,以及全技能組的準則單一來源 references/guidelines.md(命名、description 規則、hook / 工具 / sub agent 下放、語言、環境變數、wiki 頁命名總表、審核檢查清單)。

安裝、更新、移除

Marketplace 統一為 jsc(https://gitea.jsc.idv.tw/plugins/meta.git),安裝 token 為 jsc-meta@jsc。每個指令一行:

CLI 安裝 更新 移除
claude claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && claude plugin install jsc-meta@jsc claude plugin marketplace update jsc && claude plugin update jsc-meta@jsc claude plugin uninstall jsc-meta@jsc
codex codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && codex plugin add jsc-meta@jsc codex plugin marketplace upgrade jsc codex plugin remove jsc-meta@jsc
copilot copilot plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && copilot plugin install jsc-meta@jsc copilot plugin marketplace update jsc && copilot plugin update jsc-meta@jsc copilot plugin uninstall jsc-meta@jsc
antigravity git clone https://gitea.jsc.idv.tw/plugins/meta.git ~/plugins/meta && agy plugin install ~/plugins/meta git -C ~/plugins/meta pull && agy plugin uninstall jsc-meta && agy plugin install ~/plugins/meta agy plugin uninstall jsc-meta
kiro kiro-cli plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && kiro-cli plugin install jsc-meta@jsc kiro-cli plugin marketplace update jsc && kiro-cli plugin update jsc-meta@jsc kiro-cli plugin uninstall jsc-meta@jsc

antigravity 不支援 gitea URL 安裝,改用本地 clone 路徑。批次操作五個 CLI:使用 /jsc-cli:deploy。

舊入口 plugins/jsc 已移除,marketplace 正本移到 plugins/meta。marketplace 名稱仍是 jsc(取自 marketplace.json 的 name 欄位,與存取庫名無關),安裝 token 不變;已從舊入口安裝過的人先執行 claude plugin marketplace remove jsc,再依上表重新 add。

Skills 目錄

呼叫方式:Claude / Antigravity /jsc-meta:{name};Codex ${name};Copilot / Kiro 描述需求自動觸發。

skill-new

新建技能:決策樹問細節(目標、觸發、輸入輸出、domain)→ 缺 domain 時依 template 結構建立新存取庫 → sub agent 依準則產生技能 → 審核清單自檢 → PR。

skill-update

更新技能:先查 Gitea 正本 marketplace 取得 domain 清單並補 clone 缺少的存取庫,列出全部技能 → 使用者選擇 → 決策樹問更新細節 → 更新後依審核檢查清單逐項檢查,不符就回到詢問 → PR。

skill-delete

刪除技能:sync-domains.sh 依 Gitea 正本 marketplace 同步所有存取庫,list-skills.sh 列出全部技能 → 使用者選擇 → find-skill-refs.sh 盤點關聯檔案 → sub agent 逐檔判斷是否需修正以維持功能(需要就決策樹問修正細節並依準則檢查)→ 刪除 → verify-skill-removed.sh 實地檢查各 CLI 的技能快取與 hook 設定,確認沒有殘留 → PR。

skillset-update

批次更新——把一份變更需求套用到整個技能組的多個技能/domain,先檢查工具化、sub agent 與環境變數優先規則,再逐 repo 開 PR;單一技能改用 skill-update。

skill-check

例行稽核——沒有變更需求時,把整個技能組逐一對照準則的審核檢查清單:sub agent 逐 domain 稽核 → 不符項目逐項決策樹確認 → sub agent 套用修正並複檢 → 逐 repo 開 PR。有變更需求改用 skillset-update。

ste100-sync

同步上游 speak-human-tw 的語言規則:比對 references/ste100.md 釘住的上游版本,有新版就萃取適用的變更、逐項決策樹確認、更新 lint 樣式、全庫重掃、bump manifest,最後開 PR。適合列為本 repo 的維護方式。

參考與工具

檔案 用途
references/guidelines.md 技能準則唯一來源,所有 domain 的 AGENTS.md 都指向這裡
references/ste100.md STE100 擬人台灣感語言規則唯一來源(改寫自 speak-human-tw,MIT)
tools/ste100-lint.sh 語言規則的機檢工具:中國用語、中文句內半形標點、AI 套話、簡體字、中文並列斜線;命中 exit 1
tools/sync-domains.sh 依 Gitea 正本 marketplace 把所有 domain 存取庫 clone 或 pull 到本機,印出 domain<TAB>path;只有 exit 0 代表全部到位且最新,exit 3 代表有存取庫跳過或 pull 失敗(stderr 列路徑),exit 2 代表有 domain clone 失敗
tools/list-skills.sh 列出正本 marketplace 上各 domain 存取庫的技能,印出 domain<TAB>name<TAB>description;不在正本清單上的存取庫不列
tools/sync-marketplace.sh 寫入或更新兩份正本 marketplace 的 plugin 條目,再複製到每個 domain 存取庫(保證位元組一致)。需要 python3(json 模組改 JSON),缺 python3 不寫檔並 exit 1;存取庫不在本機 exit 3
tools/sync-skill-manifest.sh 同步 domain README 的「Skills 目錄」,並 bump 三份 manifest 的 version;minor 與 patch 不得超過 9,major 可以超過 9
tools/find-skill-refs.sh 盤點一個技能在正本 marketplace 各 domain 存取庫裡的引用檔案(不掃非技能組存取庫與點開頭目錄);技能名稱為純子字串比對,命中要逐檔確認;零命中 exit 1,掃描失敗 exit 3
tools/verify-skill-removed.sh 刪除技能後實地檢查各 CLI 的技能快取與 hook 設定有無殘留;有殘留 exit 1,沒偵測到 CLI 或沒有可查位置 exit 3(不等於乾淨)

相關 domain

S
Description
No description provided
Readme
1.3 MiB
Languages
Shell 100%