#!/usr/bin/env bash # Build the RUN REPORT appended to the agent's reply comment: the TOOL CALLS the agent made plus a # usage line (input / output tokens + $ cost). Written to /tmp/activity_log.md; the Publish step # appends it to the agent's reply. Applies to EVERY agent — @pm/@qa also call tools and cost money. # # opencode --format json emits one JSON event per line. `step_finish` events carry, per LLM step, # .part.tokens {input, output, reasoning, cache:{read, write}} and .part.cost (USD, already computed # by opencode from the model's pricing). We sum them across all steps of the run. Models without # pricing (e.g. self-hosted ollama) report cost 0 — shown as $0.0000. # # Required env (provided by the workflow step): (none needed; reads /tmp/events.jsonl) set -u E=/tmp/events.jsonl : > /tmp/activity_log.md [ -s "$E" ] || { echo "no events — empty report"; exit 0; } # Tool calls = the ACTIONS taken (not the agent's prose text parts). jq -r ' def trunc(n): if length > n then (.[0:n] + "…") else . end; select(.type=="tool_use") | (.part.tool // "?") as $t | ((.part.state.title // (.part.state.input | tojson | trunc(160)) // "")) as $title | "🔧 **" + $t + "**: `" + ($title | trunc(240)) + "`" ' "$E" > /tmp/tools.md 2>/dev/null || true n=$(wc -l < /tmp/tools.md 2>/dev/null || echo 0); n=${n:-0} # Usage: sum per-step tokens + cost across every step_finish event (tab-separated for `read`). read -r COST INP OUT CR CW RE < <(jq -rs ' [ .[] | select(.type=="step_finish") | .part ] as $s | [ ([$s[].cost // 0]|add // 0), ([$s[].tokens.input // 0]|add // 0), ([$s[].tokens.output // 0]|add // 0), ([$s[].tokens.cache.read // 0]|add // 0), ([$s[].tokens.cache.write // 0]|add // 0), ([$s[].tokens.reasoning // 0]|add // 0) ] | @tsv' "$E" 2>/dev/null) COST=${COST:-0}; INP=${INP:-0}; OUT=${OUT:-0}; CR=${CR:-0}; CW=${CW:-0}; RE=${RE:-0} IN_TOTAL=$(( INP + CR + CW )) # total input context processed COSTF=$(awk -v c="$COST" 'BEGIN{printf "$%.4f", c+0}') echo "usage: in=$IN_TOTAL out=$OUT cost=$COSTF (fresh=$INP cache_r=$CR cache_w=$CW reasoning=$RE); tools=$n" { if [ "$n" -gt 0 ]; then printf '\n\n
\n🔧 %s tool calls · in %s · out %s · %s\n\n' "$n" "$IN_TOTAL" "$OUT" "$COSTF" cat /tmp/tools.md printf '\n\ntokens — input %s (fresh %s · cache %sw / %sr) · output %s · reasoning %s · **cost %s**\n
' \ "$IN_TOTAL" "$INP" "$CW" "$CR" "$OUT" "$RE" "$COSTF" else printf '\n\n💰 **%s** · in %s · out %s tokens (cache %sw / %sr)' "$COSTF" "$IN_TOTAL" "$OUT" "$CW" "$CR" fi } > /tmp/activity_log.md