Files
log/tools/usage-stats.sh
jiantw83 7d803245a5 fix(overwrite): 只有頁面真的不存在才建新頁
- What:worklog、learn、report 三支技能共六處讀取分流改寫,只有結束碼 4 才建新頁;
  結束碼 7 與 8 一律中止,一個字都不寫。三份目錄頁樣板補上寫入語意,明寫禁止整頁覆蓋、
  不得改動別人的列。usage-stats.sh 的參數護欄改成明確回傳結束碼 2。
- Why:原本把「讀失敗」與「頁面不存在」當成同一件事。金鑰失效時讀取回 7,技能卻讀成
  「這頁還沒有」,於是照樣板建一份新頁蓋回去。整份工作日誌會被這一筆條目取代,
  既有教訓會被清成空表,報表則產出一份說「這段期間沒有工作」的假數字。
  這些內容只活在 wiki 上,蓋掉就救不回來,所以這是本輪最要緊的一項。
- How:每一處讀取都先看結束碼再決定動作,並在技能文件裡列成表格:
  0 接在既有內容後面附加,4 才從樣板建頁,5 缺網址就中止,7 金鑰或權限問題就中止,
  8 其他 API 失敗就中止。目錄頁一律先讀整頁再改那一列。
  stats 也補上分流,參數錯誤不再被讀成「零次」。
- Who:worklog、learn、report、stats 四支技能的 wiki 讀寫與統計輸出。
2026-08-31 11:07:16 +08:00

43 lines
1.5 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env sh
# usage-stats.sh — 聚合 jsc-hooks 記錄的技能用量。
# 用法:
# usage-stats.sh skills [--cli <name>] # 每個 skill 的使用次數(降冪)
# usage-stats.sh chains [--cli <name>] # 每條 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 <name>]' >&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