Files
hooks/references/behaviors.md
T
jiantw83 096a85e638 feat(link): 連結一律寫成 [文字](絕對網址),寫入前先驗證連得到
取消 [[頁名]] 與 [[顯示文字|頁名]] 兩種同 wiki 寫法,不再分「同存取庫」與
「跨存取庫」兩條規則。那種寫法只在自己那個 wiki 內解析,寫錯不報錯,畫面上
看起來像普通文字或死連結,巡不到也修不了。

連結寫進頁面前先過 jsc-gitea 的 link-check.sh,結束碼 0 才寫。驗證一律走 API,
不看網頁狀態碼:私有存取庫的網頁網址對未登入請求一律回 404,拿狀態碼判會把
好連結判成壞的。認證失敗回 7,與死連結的 1 分開,免得金鑰一過期就把還在的頁
整批判死。
2026-09-02 14:27:18 +08:00

5.9 KiB
Raw Blame History

jsc-hooks 技能行為清單

本頁記錄 jsc-hooks 每支技能的行為基準,供技能驗證比對。技能異動時,在同一個 PR 內一起更新這一頁。

hooks-install

項目 內容
觸發時機 裝好或更新完 jsc 技能組之後,要把九支 hook 接線到每一支已安裝的 CLI 時用;jsc-cli:deploy 收尾會把偵測到的 CLI 清單交給它。不用於撰寫新的 hook,也不用於單獨修一支壞掉的 hook,那是 jsc-hooks:repair 的事
關鍵步驟 取得 CLI 清單(呼叫端交來的優先,沒有才自己跑 detect-clis.sh)、第一支 CLI 單獨跑完整條管線(它負責更新共用的 $JSC_HOME/current/jsc-hooks 連結)、其餘 CLI 一支一個 sub agent 並行、每支 CLI 依序走 purge、接線、status、smoke、scan 五道關卡、讀每道關卡自己印的第一行判定、任一關卡出錯就寫 ERROR_{HASH} 並轉給 jsc-hooks:repair(異常頁與索引目錄頁分屬兩個存取庫,各自解析;只解不出目錄頁的存取庫時異常頁照寫、索引跳過,回報要講明那一頁沒被索引)、目錄頁那一列指向異常頁的連結一律寫成 [{文字}]({連結}),網址取 gitea.sh wiki-url,寫進去之前先過 jsc-gitea/tools/link-check.sh,結束碼 0 才寫連結、驗不過那一格只留純文字頁名而那一列與異常頁照寫(report-error.sh 內部做完,結束碼不變)、逐 CLI 回報五道關卡的結果
外部呼叫 tools/wire-cli.sh purge、tools/wire-cli.sh {cli}、tools/wire-cli.sh status、tools/wire-cli.sh smoke、tools/scan-hook-errors.sh、tools/report-error.sh、jsc-cli/tools/detect-clis.sh、jsc-hooks:repair 技能、jsc-gitea:wiki(寫 ERROR_{HASH} 時經 report-error.sh)、jsc-gitea/tools/gitea.sh wiki-url 與 jsc-gitea/tools/link-check.sh(同樣經 report-error.sh,取目錄頁那一列的網址並驗它連得到);接線腳本內部另呼叫 hooks/skill-name.sh 與 hooks/deny.sh 做冒煙斷言
完成條件 每一支偵測到的 CLI 都有五道關卡各一行判定,沒有任何一道回結束碼 2,smoke 的 lines 條數與它自己的斷言相符,claude、codex、copilot、antigravity 回 wired 而 kiro 回 degraded(CLI 擋不下技能叫用),四支非 claude 的執行期錯誤掃描一律據實回 unavailable,各 CLI 的形狀與觸發驗證等級分開寫進回報(codex、antigravity、kiro 形狀實證,copilot 形狀未證;kiro 觸發部分實證,其餘未驗證),每一筆錯誤都帶一個 ERROR_{HASH} 結果與一條對 develop 的修正 PR 連結,而且目錄頁那一列的連結驗不過時,回報要講明那一列只有純文字頁名、沒有連結
可驗證跡象 各 CLI 的設定檔多出 jsc 段落:codex 的 config.toml 標記段落、hooks/codex-hooks.json(從 hooks/hooks.json 推導,matcher Skill 換成 Bash)與 .codex-plugin/plugin.json 指過去的 hooks 路徑字串、copilot 的 ~/.copilot/settings.json 頂層 hooks 鍵(matcher skill,合併不覆寫,enabledPlugins 與第三方條目原樣保留)與 $COPILOT_HOME 底下的指引檔、antigravity 的 ~/.gemini/config/hooks.json 的 jsc 段落(PreToolUse 為 Grouped、matcher ^view_file$,PreInvocation 維持 Flat)、kiro 的 ~/.kiro/agents/jsc.json(hooks 為 agentSpawn、userPromptSubmit、stop 三個合法事件加 timeout_ms、兩層 skill:// glob 的 resources、明列的 tools,並通過 kiro-cli agent validate)與 ~/.kiro/settings/cli.json 的 chat.defaultAgent=jsc;四支非 claude 的接線命令都以 JSC_CLI={代號} 前綴自帶 CLI 代號,缺了它兩道閘門解不出技能名、一律安靜放行,所以 status 把它列成單獨一項;另有 $JSC_HOME/current/jsc-hooks 符號連結建立或更新、$JSC_HOME/backup/hooks/{cli}/{時間戳}/ 留下 purge 前的備份、出錯時 wiki 多一頁 ERROR_{HASH}(落在 JSC_WIKI_REPO_ERROR 解出的存取庫)並在索引目錄頁補一列(落在 JSC_WIKI_REPO_CONTENTS 解出的另一個存取庫,那一列的第 2 格寫成 [{頁名}]({絕對網址}),網址取自 gitea.sh wiki-url 且已經過 link-check.sh 驗到結束碼 0;驗不過那一格只有純文字頁名,report-error.sh 在 stderr 留一行 [jsc] 講明是哪一種原因)、修正路徑留下一條對 develop 的 PR

repair

項目 內容
觸發時機 hooks-install 或 report-error.sh 回報某一支 hook 失敗時用,或是重新接線之後那支 hook 還是一直失敗時用。不用於例行接線,也不用於與 hook 無關的修改
關鍵步驟 從 ERROR_{HASH} 讀失敗情境(沒有頁就讀失敗的 status= 那一行,讀不到就停下來問)、跑 detect-clis.sh、每一支偵測到的 CLI 各開一個唯讀 sub agent 診斷並交回根因、要改的檔案與驗證指令、挑最小的修正改進 hooks 存取庫(技能名解析改 hooks/skill-name.sh、阻擋形態改 hooks/deny.sh,兩支是唯一真實來源,不在閘門裡各補一份)、跑 wire-cli.sh smoke {cli} 驗到 exit 0、跑 sync-skill-manifest.sh . 同步版本、以 jsc-git:pr 對 develop 開 PR
外部呼叫 jsc-gitea:wiki、jsc-cli/tools/detect-clis.sh、tools/wire-cli.sh smoke、jsc-meta/tools/sync-skill-manifest.sh、jsc-git:pr;診斷階段另以 sub agent 叫用各支已安裝的 AI CLI
完成條件 修正已經落在磁碟上、wire-cli.sh smoke 對受影響的 CLI 回 exit 0、sync-skill-manifest.sh 回 exit 0 而且三份 manifest 版本一致,最後拿到一條對 develop 的 PR 連結;開不出 PR 時要講明修正已套用但尚未合併、帶上分支名與失敗原因
可驗證跡象 hooks 存取庫多一個修正提交與一條推上去的分支、develop 上多一條 PR、三份 manifest 與 README 技能清單版本一致、wire-cli.sh smoke 由失敗轉為 exit 0