|
|
@@ -1,7 +1,9 @@
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
# Build activity log (tool calls + reasoning) from the event stream into /tmp/activity_log.md.
|
|
|
|
# Build the activity log — the list of TOOL CALLS the agent made — into /tmp/activity_log.md.
|
|
|
|
# Only dev agents (mode=pr) get an activity-log comment — comment-only roles (pm/qa)
|
|
|
|
# Only dev agents (mode=pr) get an activity-log comment — comment-only roles (pm/qa) do no tool calls.
|
|
|
|
# do no tool calls, so a trail would be empty/noise.
|
|
|
|
# NOTE: we deliberately DO NOT include the agent's prose text parts. That final "here's what I did"
|
|
|
|
|
|
|
|
# text is just a restatement of the PR description (already published as the PR body), not a tool
|
|
|
|
|
|
|
|
# call — so it was noise in a section titled "tool calls". The log is the record of ACTIONS taken.
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# Required env (provided by the workflow step): MODE
|
|
|
|
# Required env (provided by the workflow step): MODE
|
|
|
|
set -u
|
|
|
|
set -u
|
|
|
@@ -11,22 +13,12 @@ if [ "$MODE" != "pr" ]; then
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
jq -r '
|
|
|
|
jq -r '
|
|
|
|
def trunc(n): if length > n then (.[0:n] + "…") else . end;
|
|
|
|
def trunc(n): if length > n then (.[0:n] + "…") else . end;
|
|
|
|
select(.type=="tool_use" or .type=="text") |
|
|
|
|
select(.type=="tool_use") |
|
|
|
|
if .type=="text" then
|
|
|
|
(.part.tool // "?") as $t |
|
|
|
|
# Drop the PR-description block from the reasoning trail — it is already published verbatim as
|
|
|
|
((.part.state.title // (.part.state.input | tojson | trunc(160)) // "")) as $title |
|
|
|
|
# the PR description, so repeating it here is redundant noise. Skip a text part that is nothing
|
|
|
|
"🔧 **" + $t + "**: `" + ($title | trunc(240)) + "`"
|
|
|
|
# but that block (would otherwise be an empty "💬 " entry).
|
|
|
|
|
|
|
|
((.part.text // "")
|
|
|
|
|
|
|
|
| gsub("BEGIN_PR_DESCRIPTION.*?END_PR_DESCRIPTION"; ""; "m")
|
|
|
|
|
|
|
|
| gsub("\\A[[:space:]]+|[[:space:]]+\\z"; "")) as $t |
|
|
|
|
|
|
|
|
if $t == "" then empty else "💬 " + ($t | trunc(4000)) end
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
(.part.tool // "?") as $t |
|
|
|
|
|
|
|
|
((.part.state.title // (.part.state.input | tojson | trunc(160)) // "")) as $title |
|
|
|
|
|
|
|
|
"🔧 **" + $t + "**: `" + ($title | trunc(240)) + "`"
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
' /tmp/events.jsonl > /tmp/activity_log.md 2>/dev/null || true
|
|
|
|
' /tmp/events.jsonl > /tmp/activity_log.md 2>/dev/null || true
|
|
|
|
n=$(wc -l < /tmp/activity_log.md 2>/dev/null || echo 0)
|
|
|
|
n=$(wc -l < /tmp/activity_log.md 2>/dev/null || echo 0)
|
|
|
|
echo "activity log: $n entries"
|
|
|
|
echo "activity log: $n tool calls"
|
|
|
|
[ "$n" -eq 0 ] && : > /tmp/activity_log.md
|
|
|
|
[ "$n" -eq 0 ] && : > /tmp/activity_log.md
|
|
|
|
head -3 /tmp/activity_log.md
|
|
|
|
head -3 /tmp/activity_log.md
|
|
|
|