#!/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*"; ""))\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)"