b1f399f8b9
leo 的雲端驗收(2026-08-23)抓到:信標說 44 支,`ls hooks/ | wc -l` 是 49,對不上。
追下去是 `ls "$ROOT"/hooks/*.sh | wc -l`:
把 `pre-write-guard.template.sh`(樣板,不是閘)與兩支沒掛註冊的輔助檔一起算進去。
🔴 這個數字是 leo 判斷「這個 session 到底有沒有閘」的唯一介面——**多報就是假綠**。
改成數 `hooks.json` 裡註冊過的唯一 `.sh`;hooks.json 讀不到才退回檔案數(且排除樣板)。
實測兩向:
正向(真的 plugin 根目錄) → 42(與 hooks.json 註冊數一致)
反向(沒有 hooks.json 的假根) → 2(三個檔裡有一個是 .template.sh,沒算進去)
查過歷史:本檔自 daa1674 建立以來只有那一版,沒有別的分支修過這段。
inkstone/InkStoneCo#57
41 lines
2.1 KiB
Bash
Executable File
41 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# isep-presence-beacon.sh — SessionStart:報出「ISEP 真的載入了,幾版、幾支閘」
|
||
#
|
||
# 這不是閘,是**信標**。存在的理由是 2026-08-20 的雲端事故:
|
||
# 雲端 session 的閘全滅,而三個驗證步驟全部回綠——因為它們沒有鑑別力
|
||
# (`git tag` 在三支閘的白名單裡;`Skills(9)/Hooks(5)` 剛好是薄殼自己的 .claude/ 產生的數字)。
|
||
#
|
||
# 🔴 鑑別力就是這支的全部意義:
|
||
# 這行出現 ⇒ plugin 一定載入了(因為它自己就住在 plugin 裡)
|
||
# 這行不見 ⇒ plugin 沒載入,那個 session 是零閘狀態
|
||
# ——沒有第三種情況,也沒有「剛好也會過」的巧合。
|
||
set -uo pipefail
|
||
|
||
ROOT="${CLAUDE_PLUGIN_ROOT:-}"
|
||
[ -n "$ROOT" ] || exit 0
|
||
|
||
VER="$(sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' \
|
||
"$ROOT/.claude-plugin/plugin.json" 2>/dev/null | head -1)"
|
||
VER="${VER:-未知}"
|
||
# 🔴 數「真的被註冊的」,不是數目錄裡有幾個 .sh(leo 的雲端驗收 2026-08-23 抓到):
|
||
# 舊寫法 `ls hooks/*.sh` 把 `pre-write-guard.template.sh`(樣板,不是閘)
|
||
# 與兩支沒掛註冊的輔助檔一起算進去 ⇒ 報 45,實際註冊 42。
|
||
# 這個數字是 leo 判斷「這個 session 有沒有閘」的唯一介面——**多報就是假綠**。
|
||
# (查過歷史:本檔自 daa1674 建立以來只有那一版,沒有別的分支修過這段。)
|
||
GATES="$(grep -oE 'hooks/[a-zA-Z0-9._-]+\.sh' "$ROOT/hooks/hooks.json" 2>/dev/null \
|
||
| sort -u | wc -l | tr -d ' ')"
|
||
case "$GATES" in
|
||
''|*[!0-9]*|0)
|
||
GATES="$(ls "$ROOT"/hooks/*.sh 2>/dev/null | grep -cv '\.template\.sh$' | tr -d ' ')" ;;
|
||
esac
|
||
|
||
MSG="🟢 ISEP v${VER} 已載入(${GATES} 支閘在 ${ROOT})"
|
||
|
||
printf '%s\n' "{
|
||
\"systemMessage\": \"${MSG}\",
|
||
\"hookSpecificOutput\": {
|
||
\"hookEventName\": \"SessionStart\",
|
||
\"additionalContext\": \"${MSG}。這行是 ISEP plugin 自己發的——看得到它就表示閘真的生效了。若某個 session 從頭到尾沒有這行,那個 session 是零閘狀態,先修 plugin 再做事,不要用『跑得動』當證據。\"
|
||
}
|
||
}"
|