Skip to content

Commit 2c91b13

Browse files
committed
Record start/end and token usage in wiggum
1 parent d1703fd commit 2c91b13

1 file changed

Lines changed: 21 additions & 7 deletions

File tree

lib/zsh/functions/wiggum

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ wiggum() {
5353
break
5454
fi
5555

56+
local start_time=$(date -Iseconds)
5657
local output=$({
5758
cat "$prompt_file"
5859
cat <<EOF
@@ -77,19 +78,32 @@ ONLY WORK ON A SINGLE TASK.
7778
EOF
7879
} | claude -p \
7980
--dangerously-skip-permissions \
80-
--output-format=stream-json \
81-
--model "${model:-opus}" \
82-
--verbose)
81+
--output-format=json \
82+
--model "${model:-opus}")
83+
local end_time=$(date -Iseconds)
8384

8485
if [[ "$output" == *"WIGGUM:OVER"* ]]; then
8586
echo "Work complete (WIGGUM:OVER)"
8687
break
8788
fi
8889

89-
local log_json=$(echo "$output" | grep -oE 'WIGGUM_LOG:\{[^}]+\}' | head -1 | sed 's/WIGGUM_LOG://' | sed 's/\\"/"/g')
90+
local result_text=$(echo "$output" | jq -r '.result // empty')
91+
local log_json=$(echo "$result_text" | grep -oE 'WIGGUM_LOG:\{[^}]+\}' | head -1 | sed 's/WIGGUM_LOG://')
92+
local input_tokens=$(echo "$output" | jq -r '.usage.input_tokens // 0')
93+
local output_tokens=$(echo "$output" | jq -r '.usage.output_tokens // 0')
94+
local start_epoch=$(date -j -f "%Y-%m-%dT%H:%M:%S" "${start_time%[-+]*}" "+%s" 2>/dev/null)
95+
local end_epoch=$(date -j -f "%Y-%m-%dT%H:%M:%S" "${end_time%[-+]*}" "+%s" 2>/dev/null)
96+
local duration_secs=$((end_epoch - start_epoch))
97+
9098
if [[ -n "$log_json" ]]; then
91-
local ts=$(date -Iseconds)
92-
local entry=$(echo "$log_json" | jq --arg ts "$ts" --argjson iter "$iteration" '. + {timestamp: $ts, iteration: $iter}')
99+
local entry=$(echo "$log_json" | jq \
100+
--arg start "$start_time" \
101+
--arg end "$end_time" \
102+
--argjson iter "$iteration" \
103+
--argjson input "${input_tokens:-0}" \
104+
--argjson output "${output_tokens:-0}" \
105+
--argjson duration "$duration_secs" \
106+
'. + {iteration: $iter, start_time: $start, end_time: $end, duration_secs: $duration, input_tokens: $input, output_tokens: $output}')
93107

94108
if [[ -f "wiggum_log.json" ]]; then
95109
jq --argjson entry "$entry" '. += [$entry]' wiggum_log.json > wiggum_log.json.tmp && mv wiggum_log.json.tmp wiggum_log.json
@@ -98,7 +112,7 @@ EOF
98112
fi
99113

100114
echo -e "\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
101-
echo "$entry" | jq '.'
115+
echo "$entry" | jq -r '"Success: \(.success)\nSummary: \(.summary)\nSteps: \(.steps_taken | join(", "))\nCommands: \(.commands_run | join(", "))\nIssues: \(.issues_encountered | if length == 0 then "none" else join(", ") end)\nDuration: \(.duration_secs)s\nTokens: \(.input_tokens) in / \(.output_tokens) out"'
102116
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
103117
fi
104118

0 commit comments

Comments
 (0)