From 767a3341fdfcf56eb4fd9c5fc4e6ac5880e014b6 Mon Sep 17 00:00:00 2001 From: senior Date: Sat, 4 Jul 2026 08:42:56 +0000 Subject: [PATCH] feat(publish): one comment per agent run (issue #38) Merge the activity-log comment into the main reply comment and merge the sub-issues-created comment into the pm reply, so each agent run posts exactly one comment (reply + tool calls & reasoning inline). --- .gitea/workflows/scripts/publish.sh | 34 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/.gitea/workflows/scripts/publish.sh b/.gitea/workflows/scripts/publish.sh index 689089e..bc80037 100755 --- a/.gitea/workflows/scripts/publish.sh +++ b/.gitea/workflows/scripts/publish.sh @@ -39,7 +39,6 @@ if [ "$MODE" != "pr" ]; then # Visible comment: the reply text, or a sensible line if the agent only emitted a marker. msg="$reply" case "$msg" in ""|"_(Made changes"*) msg=$([ -n "$target" ] && echo "Handing off to @$target." || echo "_(no further comment)_") ;; esac - post "$(printf '๐Ÿค– **@%s**\n\n%s' "$NAME" "$msg")" # Close the issue if the agent flagged it (maintainer said it's not needed / duplicate). if grep -qiE '^[[:space:]]*CLOSE_ISSUE[[:space:]]*$' /tmp/agent_out.md; then echo "closing issue #$NUM" @@ -48,6 +47,9 @@ if [ "$MODE" != "pr" ]; then fi # BREAKDOWN: from a BEGIN_SUBTASKS block, create a milestone + one sub-issue per line # (linked to this issue). Sub-issues are NOT auto-started โ€” maintainer mentions agents later. + # Process subtasks first so we can append the created-issues list to the SAME comment as + # the reply (issue #38 โ€” one comment per run). + subtext="" if grep -qiE '^[[:space:]]*BEGIN_SUBTASKS' /tmp/agent_out.md; then block=$(awk '/^[[:space:]]*BEGIN_SUBTASKS/{f=1;next} /^[[:space:]]*END_SUBTASKS/{f=0} f' /tmp/agent_out.md) ms=$(printf '%s\n' "$block" | sed -nE 's/^[[:space:]]*milestone:[[:space:]]*//Ip' | head -1) @@ -75,8 +77,9 @@ if [ "$MODE" != "pr" ]; then echo "created sub-issue #${n:-?}: $title" [ -n "$n" ] && links="$links\n- #$n โ€” $title" done < /tmp/subtasks.txt - post "$(printf '๐Ÿค– **@%s** โ€” created sub-issues%s (mention an agent on each when ready):%b' "$NAME" "${ms:+ under milestone **$ms**}" "$links")" + subtext=$(printf '\n\n---\n๐Ÿค– **@%s** โ€” created sub-issues%s (mention an agent on each when ready):%b' "$NAME" "${ms:+ under milestone **$ms**}" "$links") fi + post "$(printf '๐Ÿค– **@%s**\n\n%s%s' "$NAME" "$msg" "$subtext")" # Auto-delegate: if the plan names a teammate, trigger them via AGENT_TOKEN (a PAT, so it # fires a new workflow run โ€” the built-in token cannot). Never targets @pm or self, so the # chain always terminates at a dev. The '๐Ÿค–' guard on the trigger stops status-comment loops. @@ -123,6 +126,16 @@ git fetch -q origin 2>/dev/null || true prbody=$(printf '%s\n\n---\nResolves #%s ยท ๐Ÿค– @%s' "$prdesc" "$NUM" "$NAME") owner=${GITHUB_REPOSITORY%%/*} +# Post the agent's activity trail (tool calls + reasoning) inline in the same comment so +# each run produces exactly ONE comment (issue #38). Computed once here so every dev-agent +# exit path (no-changes, PR-open-failed, normal) appends it to the single reply comment. +activity="" +if [ -s /tmp/activity_log.md ]; then + entries=$(wc -l < /tmp/activity_log.md 2>/dev/null || echo 0) + log=$(cat /tmp/activity_log.md) + activity=$(printf '\n\n---\n๐Ÿค– **@%s** โ€” activity log (%s entries):\n
\ntool calls & reasoning\n\n%s\n\n
' "$NAME" "$entries" "$log") +fi + # One PR per run: publish ONLY this run's own branch ($BRANCH), never sibling # ai/issue-N-* branches. This removes the multi-PR ambiguity that left the # activity log stranded on the triggering issue instead of the PR thread. @@ -130,7 +143,7 @@ br="$BRANCH" ahead=$(git rev-list --count "origin/main..origin/$br" 2>/dev/null || echo 0) if [ "${ahead:-0}" -eq 0 ]; then # No changes on this branch โ€” a plan / questions / analysis only. - post "$(printf '๐Ÿค– **@%s**\n\n%s' "$NAME" "$reply")" + post "$(printf '๐Ÿค– **@%s**\n\n%s%s' "$NAME" "$reply" "$activity")" exit 0 fi @@ -148,7 +161,7 @@ if [ -z "$url" ]; then url=$(printf '%s' "$resp" | jq -r '.html_url // empty' 2>/dev/null) prnum=$(printf '%s' "$resp" | jq -r '.number // empty' 2>/dev/null) fi -[ -z "$url" ] && { echo "PR open/lookup failed for $br โ€” posting reply on issue instead"; post "$(printf '๐Ÿค– **@%s**\n\n%s' "$NAME" "$reply")"; exit 0; } +[ -z "$url" ] && { echo "PR open/lookup failed for $br โ€” posting reply on issue instead"; post "$(printf '๐Ÿค– **@%s**\n\n%s%s' "$NAME" "$reply" "$activity")"; exit 0; } # Posts to the PR thread when we have a PR number, else to the origin issue ($NUM). prpost() { @@ -160,17 +173,8 @@ prpost() { } if [ "$NEW" = "true" ]; then - prpost "$prnum" "$(printf '๐Ÿค– **@%s** โ€” โœ… PR ready for review โ€” @ffaerber please review & merge:\n- %s' "$NAME" "$url")" + prpost "$prnum" "$(printf '๐Ÿค– **@%s** โ€” โœ… PR ready for review โ€” @ffaerber please review & merge:\n- %s%s' "$NAME" "$url" "$activity")" else # Resume (comment is on a PR thread): include the write-up here too. - prpost "$prnum" "$(printf '๐Ÿค– **@%s** โ€” updated branch/PR:\n- %s\n\n%s' "$NAME" "$url" "$prdesc")" -fi - -# Post the agent's activity trail (tool calls + reasoning) as a separate comment so -# it is visible on the PR thread. Additive โ€” kept here even when nothing changed, so a -# follow-up run (re-trigger) can see what this run did via the fetched issue thread. -if [ -s /tmp/activity_log.md ]; then - entries=$(wc -l < /tmp/activity_log.md 2>/dev/null || echo 0) - log=$(cat /tmp/activity_log.md) - prpost "$prnum" "$(printf '๐Ÿค– **@%s** โ€” activity log (%s entries):\n
\ntool calls & reasoning\n\n%s\n\n
' "$NAME" "$entries" "$log")" + prpost "$prnum" "$(printf '๐Ÿค– **@%s** โ€” updated branch/PR:\n- %s\n\n%s%s' "$NAME" "$url" "$prdesc" "$activity")" fi