36 lines
1.3 KiB
Bash
Executable File
36 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env sh
|
||
# lib.sh — jsc hooks 共用函式。所有 hook 腳本 source 此檔。
|
||
# 輸入相容:Claude 式 stdin JSON、或環境變數(codex/copilot/antigravity/kiro 接線時設定)。
|
||
# 缺資料時安靜降級,hook 永遠 exit 0,不可中斷宿主 CLI。
|
||
|
||
JSC_HOME="${JSC_HOME:-$HOME/.jsc}"
|
||
mkdir -p "$JSC_HOME/sessions" "$JSC_HOME/usage" 2>/dev/null || true
|
||
|
||
# 讀完 stdin(可能為空;非阻塞宿主)
|
||
read_stdin() {
|
||
if [ -t 0 ]; then STDIN_JSON=""; else STDIN_JSON=$(cat 2>/dev/null || true); fi
|
||
}
|
||
|
||
# 從 stdin JSON 取字串欄位(naive 但足夠應付各 CLI 的扁平 payload)
|
||
json_str() { # $1=欄位名
|
||
printf '%s' "$STDIN_JSON" | tr -d '\n' \
|
||
| sed -n "s/.*\"$1\"[[:space:]]*:[[:space:]]*\"\([^\"]*\)\".*/\1/p" | head -n1
|
||
}
|
||
|
||
# 目前 session id:stdin JSON > 環境變數 > 固定值
|
||
session_id() {
|
||
sid=$(json_str session_id)
|
||
[ -n "$sid" ] || sid="${JSC_SESSION_ID:-${CLAUDE_SESSION_ID:-default}}"
|
||
printf '%s' "$sid"
|
||
}
|
||
|
||
# 目前 CLI 名稱:環境變數 > 依 stdin 特徵猜測 > unknown
|
||
cli_name() {
|
||
if [ -n "${JSC_CLI:-}" ]; then printf '%s' "$JSC_CLI"
|
||
elif [ -n "${CLAUDE_PLUGIN_ROOT:-}" ]; then printf 'claude'
|
||
else printf 'unknown'; fi
|
||
}
|
||
|
||
now_epoch() { date +%s; }
|
||
now_iso() { date -u +%Y-%m-%dT%H:%M:%SZ; }
|