#!/usr/bin/env sh # usage-stats.sh — 聚合 jsc-hooks 記錄的技能用量。 # 用法: # usage-stats.sh skills [--cli ] # 每個 skill 的使用次數(降冪) # usage-stats.sh chains [--cli ] # 每條 from -> to 呼叫鏈的次數(降冪) # 資料: $JSC_HOME/usage/skills.jsonl、chains.jsonl(預設 $HOME/.jsc) # # 結束碼: 0=成功(資料檔不存在也算成功,印不出任何一行)2=用法錯誤(沒給子命令、 # 子命令不認得、--cli 沒帶值) # 資料檔不存在為什麼算成功: hook 還沒記過任何一次用量就是這個狀態,那是「零次」,不是故障。 set -u JSC_HOME="${JSC_HOME:-$HOME/.jsc}" usage() { echo '用法:usage-stats.sh skills|chains [--cli ]' >&2 exit 2 } cmd="${1:-}"; [ -n "$cmd" ] || usage shift cli="" while [ $# -gt 0 ]; do case "$1" in --cli) cli="${2:-}"; [ -n "$cli" ] || usage; shift 2 ;; *) shift ;; esac done by_cli() { # 依 --cli 過濾;未指定就原樣輸出 if [ -n "$cli" ]; then grep "\"cli\":\"$cli\""; else cat; fi } rank() { sort | uniq -c | sort -rn | sed 's/^ *\([0-9][0-9]*\) /\1\t/'; } case "$cmd" in skills) f="$JSC_HOME/usage/skills.jsonl"; [ -f "$f" ] || exit 0 by_cli < "$f" | sed -n 's/.*"skill":"\([^"]*\)".*/\1/p' | rank ;; chains) f="$JSC_HOME/usage/chains.jsonl"; [ -f "$f" ] || exit 0 by_cli < "$f" | sed -n 's/.*"from":"\([^"]*\)".*"to":"\([^"]*\)".*/\1 -> \2/p' | rank ;; *) echo "不認得的子命令:$cmd" >&2; usage ;; esac