feat(pet): compact summary — sess + agents count + global tokens/cost

This commit is contained in:
KeiSei84 2026-05-26 18:42:34 +08:00
parent 3099a58dd9
commit 879d8359d3

View file

@ -72,41 +72,61 @@ _elapsed() {
else printf '%dh%dm' $(( s / 3600 )) $(( (s % 3600) / 60 )); fi else printf '%dh%dm' $(( s / 3600 )) $(( (s % 3600) / 60 )); fi
} }
# ── running sub-agents (from task-timer's .task-*.start) ───────────────────── # ── running sub-agents (count only — compact view, no per-agent list) ────────
agents=""; n_agents=0 # Counts younger-than-2h .task-*.start markers across ALL parallel sessions.
# v0.40: dropped per-agent emoji+name list to keep status line readable when
# many parallel sessions/agents fire. Per-agent detail moved to `kei status`
# (see TODO) — pet stays as a single counter.
n_agents=0
if [ -d "$TM_DIR" ]; then if [ -d "$TM_DIR" ]; then
for f in "$TM_DIR"/.task-*.start; do for f in "$TM_DIR"/.task-*.start; do
[ -f "$f" ] || continue [ -f "$f" ] || continue
typ="$(jq -r '.type // "agent"' "$f" 2>/dev/null)"
st="$(jq -r '.start_epoch // empty' "$f" 2>/dev/null)" st="$(jq -r '.start_epoch // empty' "$f" 2>/dev/null)"
[ -z "$st" ] && continue [ -z "$st" ] && continue
age=$(( now - st )) age=$(( now - st ))
[ "$age" -gt 7200 ] && continue # ignore stale (kit removes on done) [ "$age" -gt 7200 ] && continue
short="$(printf '%s' "$typ" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9].*$//' | cut -c1-12)"
agents+=" $(_agent_emoji "$typ")${short}·$(_elapsed "$age")"
n_agents=$((n_agents+1)) n_agents=$((n_agents+1))
done done
fi fi
# ── agent token / cost spend today (from agent-events.jsonl) ───────────────── # ── today's aggregates (across ALL sessions) ─────────────────────────────────
spend="" # Tokens + cost from agent-events.jsonl; sessions from distinct parent_id of
# today's agent_spawn events.
today_tok=0; today_cost=0; today_sess=0
if [ -f "$EVENTS" ]; then if [ -f "$EVENTS" ]; then
today="$(date -u +%Y-%m-%d)" today="$(date -u +%Y-%m-%d)"
read -r tot_tok tot_cost < <(awk -v d="$today" ' # Single awk pass: count tokens, cost, distinct parent_id.
read -r today_tok today_cost today_sess < <(awk -v d="$today" '
index($0,d)>0 { index($0,d)>0 {
t=0; c=0 if (match($0,/total_tokens[^0-9]*[0-9]+/)) { s=substr($0,RSTART,RLENGTH); gsub(/[^0-9]/,"",s); T+=s }
if (match($0,/total_tokens[^0-9]*[0-9]+/)) { s=substr($0,RSTART,RLENGTH); gsub(/[^0-9]/,"",s); t=s } if (match($0,/"cost_usd"[: ]*[0-9.]+/)) { s=substr($0,RSTART,RLENGTH); gsub(/[^0-9.]/,"",s); C+=s }
if (match($0,/"cost_usd"[: ]*[0-9.]+/)) { s=substr($0,RSTART,RLENGTH); gsub(/[^0-9.]/,"",s); c=s } if (match($0,/"parent_id"[: ]*"[^"]+"/)) { s=substr($0,RSTART,RLENGTH); gsub(/.*"parent_id"[: ]*"|".*/,"",s); seen[s]=1 }
T+=t; C+=c } END {
} END { printf "%d %.4f", T+0, C+0 }' "$EVENTS" 2>/dev/null) n=0; for (k in seen) n++
# agent COST only (💰) — session tokens are shown separately as 🪙 above, printf "%d %.4f %d", T+0, C+0, n
# so we don't repeat a token count here. Cost is non-null only when the }' "$EVENTS" 2>/dev/null)
# sub-agent payload carried a model.
if [ "${tot_cost:-0}" != "0.0000" ] && [ -n "${tot_cost:-}" ]; then
spend=" 💰\$$(printf '%.2f' "$tot_cost" 2>/dev/null)"
fi
fi fi
# Format tokens compactly: 1234567 → 1.2M / 5400 → 5k / 999 → 999
_short_tok() {
local n=${1:-0}
if [ "$n" -ge 1000000 ]; then awk -v n="$n" 'BEGIN{printf "%.1fM", n/1000000}'
elif [ "$n" -ge 1000 ]; then awk -v n="$n" 'BEGIN{printf "%dk", n/1000}'
else printf '%d' "$n"
fi
}
global=""
[ "${today_sess:-0}" -gt 0 ] 2>/dev/null && global+="💬${today_sess} "
[ "${today_tok:-0}" -gt 0 ] 2>/dev/null && global+="🌍$(_short_tok "$today_tok") "
[ "${n_agents:-0}" -gt 0 ] 2>/dev/null && global+="🤖${n_agents} "
spend=""
if [ "${today_cost:-0}" != "0.0000" ] && [ -n "${today_cost:-}" ]; then
spend="💰\$$(printf '%.2f' "$today_cost" 2>/dev/null)"
fi
[ -n "$spend" ] && global+="${spend} "
global="${global% }"
# ── THIS session: tokens + context% (from statusLine stdin) ───────────────── # ── THIS session: tokens + context% (from statusLine stdin) ─────────────────
sess="" sess=""
if [ -n "$SLINE" ]; then if [ -n "$SLINE" ]; then
@ -150,9 +170,9 @@ EWIN="${HOME}/.claude/memory/error-window.txt"
proj="${PWD##*/}"; [ -z "$proj" ] && proj="~" proj="${PWD##*/}"; [ -z "$proj" ] && proj="~"
out="" out=""
[ -n "$sess" ] && out+="${sess} " [ -n "$sess" ] && out+="${sess} "
[ -n "${agents// }" ] && out+="${agents# }${spend} " [ -n "$global" ] && out+="${dim}${global}${reset} "
[ -n "$plan" ] && out+="${plan} " [ -n "$plan" ] && out+="${plan} "
out+="${color}${face}${reset}" out+="${color}${face}${reset}"
[ -n "$message" ] && out+=" ${dim}${message}${reset}" [ -n "$message" ] && out+=" ${dim}${message}${reset}"
out+="${stats}" out+="${stats}"