From 766142c3baa5db61b3cc9a2cfc297e49bb2a9274 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 17 Aug 2026 14:54:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(spec-version-guard):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=AA=A2=E6=9F=A5=20hook=20=E4=B8=A6?= =?UTF-8?q?=E5=9C=A8=209=20=E5=80=8B=20skill=20=E6=AA=94=E9=A0=AD=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E8=A6=8F=E7=AF=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新建 hooks/hooks.json,PreToolUse 沿用跨 plugin 腳本定位手法呼叫 shared 的 version-guard.mjs(判定仍固定讀自己的 plugin.json,只是腳本檔借用 shared 的); action-composite/action-docker/action-node/image/issues/nuget/review-resolve/ sync/target 九個 skill 檔頭補上 spec-version-guard。 Co-Authored-By: Claude Sonnet 5 --- hooks/hooks.json | 17 +++++++++++++++++ skills/action-composite/SKILL.md | 2 +- skills/action-docker/SKILL.md | 2 +- skills/action-node/SKILL.md | 2 +- skills/image/SKILL.md | 2 +- skills/issues/SKILL.md | 2 +- skills/nuget/SKILL.md | 2 +- skills/review-resolve/SKILL.md | 2 +- skills/sync/SKILL.md | 2 +- skills/target/SKILL.md | 2 +- 10 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 hooks/hooks.json diff --git a/hooks/hooks.json b/hooks/hooks.json new file mode 100644 index 0000000..86e2dcf --- /dev/null +++ b/hooks/hooks.json @@ -0,0 +1,17 @@ +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Read|Write|Edit|MultiEdit|NotebookEdit|Glob|Grep|LS|Bash", + "hooks": [ + { + "type": "command", + "command": "own='shared'; plug='jsc-shared'; rel='scripts/version-guard.mjs'; for base in \"$HOME/.claude/plugins/cache\" \"$HOME/.codex/plugins/cache\" \"$HOME/.copilot/installed-plugins\"; do for dir in \"$base/$own/$plug\" \"$base\"; do s=$(find \"$dir\" -path \"*/$plug/*/$rel\" -type f 2>/dev/null | sort -V | tail -n 1); if [ -n \"$s\" ]; then exec node --use-system-ca \"$s\"; fi; done; done; ts=$(TZ='Asia/Taipei' date +'%Y/%m/%d %H:%M:%S'); echo \"[$ts][版本檢查][ERR]: 找不到 jsc-shared 的 version-guard.mjs,fail-closed 阻擋。\" >&2; printf '{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"deny\",\"permissionDecisionReason\":\"找不到 jsc-shared 的 version-guard.mjs,fail-closed 阻擋\"}}\\n'; exit 0", + "timeout": 15, + "statusMessage": "檢查 jsc-code 版本…" + } + ] + } + ] + } +} diff --git a/skills/action-composite/SKILL.md b/skills/action-composite/SKILL.md index c319a14..c1c9222 100644 --- a/skills/action-composite/SKILL.md +++ b/skills/action-composite/SKILL.md @@ -21,7 +21,7 @@ argument-hint: "[--action-dir ] [--manifest ] [--node-version ] [- 先載入 `/jsc-shared:spec-preflight` 並依其流程處理;載入不到即代表 shared plugin 未安裝, 依該 spec 詢問使用者是否安裝 `https://gitea.jsc.idv.tw/plugins/shared.git`,不安裝則中斷本 skill。 -本 skill 需要的規範:`spec-output`、`spec-execution`、`spec-git-safety`、`spec-action-params`、`spec-action-scaffold`、`spec-ask-user`、`spec-node-src-layout`、`spec-time-log`、`spec-dockerfile`、`spec-doc-funcs-handoff`、`spec-skill-invocation` +本 skill 需要的規範:`spec-version-guard`、`spec-output`、`spec-execution`、`spec-git-safety`、`spec-action-params`、`spec-action-scaffold`、`spec-ask-user`、`spec-node-src-layout`、`spec-time-log`、`spec-dockerfile`、`spec-doc-funcs-handoff`、`spec-skill-invocation` 本 skill 特有補充: diff --git a/skills/action-node/SKILL.md b/skills/action-node/SKILL.md index f491660..a7e92ba 100644 --- a/skills/action-node/SKILL.md +++ b/skills/action-node/SKILL.md @@ -22,7 +22,7 @@ argument-hint: "[--action-dir ] [--node-version ] [--dockerfile ] [--repo ] [--issues <編號,以 先載入 `/jsc-shared:spec-preflight` 並依其流程處理;載入不到即代表 shared plugin 未安裝, 依該 spec 詢問使用者是否安裝 `https://gitea.jsc.idv.tw/plugins/shared.git`,不安裝則中斷本 skill。 -本 skill 需要的規範:`spec-output`、`spec-execution`、`spec-gitea`、`spec-no-scratch-files`、`spec-issue-read`、`spec-todo-list`、`spec-skill-invocation`、`spec-model` +本 skill 需要的規範:`spec-version-guard`、`spec-output`、`spec-execution`、`spec-gitea`、`spec-no-scratch-files`、`spec-issue-read`、`spec-todo-list`、`spec-skill-invocation`、`spec-model` 本 skill 特有補充: diff --git a/skills/nuget/SKILL.md b/skills/nuget/SKILL.md index 93fc0ef..9de0451 100644 --- a/skills/nuget/SKILL.md +++ b/skills/nuget/SKILL.md @@ -12,7 +12,7 @@ argument-hint: "[] [--include-prerelease] [--no-dedupe] [-- 先載入 `/jsc-shared:spec-preflight` 並依其流程處理;載入不到即代表 shared plugin 未安裝, 依該 spec 詢問使用者是否安裝 `https://gitea.jsc.idv.tw/plugins/shared.git`,不安裝則中斷本 skill。 -本 skill 需要的規範:`spec-output`、`spec-execution`、`spec-gitea` +本 skill 需要的規範:`spec-version-guard`、`spec-output`、`spec-execution`、`spec-gitea` ## 輸出規範(本 skill 特有) diff --git a/skills/review-resolve/SKILL.md b/skills/review-resolve/SKILL.md index 3fa294a..8416699 100644 --- a/skills/review-resolve/SKILL.md +++ b/skills/review-resolve/SKILL.md @@ -22,7 +22,7 @@ argument-hint: "[--issue <編號|編號清單|all>] [--findings ] [--owner <擁有者,以逗號分隔>] 先載入 `/jsc-shared:spec-preflight` 並依其流程處理;載入不到即代表 shared plugin 未安裝, 依該 spec 詢問使用者是否安裝 `https://gitea.jsc.idv.tw/plugins/shared.git`,不安裝則中斷本 skill。 -本 skill 需要的規範:`spec-output`、`spec-execution`、`spec-gitea`、`spec-git-safety`、`spec-ask-user`、`spec-skill-invocation` +本 skill 需要的規範:`spec-version-guard`、`spec-output`、`spec-execution`、`spec-gitea`、`spec-git-safety`、`spec-ask-user`、`spec-skill-invocation` 本 skill 特有補充: diff --git a/skills/target/SKILL.md b/skills/target/SKILL.md index afc9543..613d7ce 100644 --- a/skills/target/SKILL.md +++ b/skills/target/SKILL.md @@ -23,7 +23,7 @@ argument-hint: "[--schedule on|off] [--run] [--project-dir <專案根目錄>] [- 先載入 `/jsc-shared:spec-preflight` 並依其流程處理;載入不到即代表 shared plugin 未安裝, 依該 spec 詢問使用者是否安裝 `https://gitea.jsc.idv.tw/plugins/shared.git`,不安裝則中斷本 skill。 -本 skill 需要的規範:`spec-output`、`spec-execution`、`spec-git-safety`、`spec-gitea`、`spec-time-log`、`spec-todo-list`、`spec-conventional-commit`、`spec-git-push`、`spec-pull-request`、`spec-skill-invocation`、`spec-model` +本 skill 需要的規範:`spec-version-guard`、`spec-output`、`spec-execution`、`spec-git-safety`、`spec-gitea`、`spec-time-log`、`spec-todo-list`、`spec-conventional-commit`、`spec-git-push`、`spec-pull-request`、`spec-skill-invocation`、`spec-model` 本 skill 特有補充: