35 lines
2.1 KiB
Bash
Executable File
35 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Fetch the full issue thread (shared memory) into /tmp/thread.md.
|
|
# Agents post as their OWN Gitea users, so .user.login IS the agent name — attribute each comment
|
|
# to its real author (@pm/@qa/@junior/…). Strip the hidden `<!-- 🤖 … -->` loop-prevention marker
|
|
# from bodies — it's plumbing, not conversation, and would just waste prompt tokens.
|
|
#
|
|
# PAGINATION: Gitea returns comments ASCENDING and `limit` caps a single page — a bare ?limit=100
|
|
# used to keep the OLDEST 100 comments and silently drop the newest (the exact opposite of what an
|
|
# agent needs on a long thread). Fetch all pages (up to 10 = 500 comments) and keep the LAST 100.
|
|
#
|
|
# Required env (provided by the workflow step): GT NUM GITHUB_SERVER_URL GITHUB_REPOSITORY
|
|
set -eu
|
|
|
|
API="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}"
|
|
: > /tmp/thread_pages.json
|
|
for page in $(seq 1 10); do
|
|
pg=$(curl -sS -H "Authorization: token $GT" "$API/issues/$NUM/comments?limit=50&page=$page" 2>/dev/null) || pg='[]'
|
|
n=$(printf '%s' "$pg" | jq 'if type=="array" then length else 0 end' 2>/dev/null || echo 0)
|
|
[ "${n:-0}" -gt 0 ] && printf '%s\n' "$pg" >> /tmp/thread_pages.json
|
|
[ "${n:-0}" -lt 50 ] && break
|
|
done
|
|
jq -rs '
|
|
add // [] | .[-100:] | .[] |
|
|
( if (.user.login == "ffaerber") then "@ffaerber (the maintainer)"
|
|
else "@" + .user.login end ) as $who |
|
|
"### comment by \($who):\n\(.body | gsub("\\s*<!-- 🤖 agent reply — do not trigger -->"; ""))\n"' \
|
|
/tmp/thread_pages.json > /tmp/thread.md 2>/dev/null || : > /tmp/thread.md
|
|
echo "thread comments fetched: $(grep -c '^### comment by ' /tmp/thread.md 2>/dev/null || echo 0) (newest 100 kept)"
|
|
|
|
# Record the newest comment id on the thread BEFORE the agent runs. publish.sh compares against
|
|
# it to detect an agent that self-posted its reply mid-run (via the gitea-api skill, despite the
|
|
# prompt telling it not to) and skips the duplicate framework reply. Ids are monotonic — no dates.
|
|
jq -rs '[ (add // [])[].id ] | max // 0' /tmp/thread_pages.json > /tmp/thread_max_cid 2>/dev/null || echo 0 > /tmp/thread_max_cid
|
|
echo "pre-run newest comment id: $(cat /tmp/thread_max_cid)"
|