#!/usr/bin/env bash # sf-queue — estado de las colas de handoff de todos los roles del swarm. # Uso: sf-queue [directorio-del-proyecto] (por defecto: directorio actual) # Muestra: new (pendientes) · proc (en proceso, incluye batches) · done (completados) # outbox (por enviar) · sent (enviados) + nombres de tarea. set -euo pipefail ROOT="${1:-$(pwd)}" cd "$ROOT" TSV=".swarmforge/roles.tsv" [ -f "$TSV" ] || { echo "No hay swarm en $ROOT (falta $TSV)" >&2; exit 1; } count() { # count → nº de ficheros .handoff (también dentro de batch_*/) local n=0 f for f in "$@"; do [ -f "$f" ] && n=$((n+1)); done echo "$n" } while IFS=$'\t' read -r role wtname wtpath session display agent mode; do H="$wtpath/.swarmforge/handoffs" [ -d "$H" ] || continue new=$(count "$H"/inbox/new/*.handoff) proc=$(count "$H"/inbox/in_process/*.handoff "$H"/inbox/in_process/batch_*/*.handoff) donec=$(count "$H"/inbox/completed/*.handoff "$H"/inbox/completed/batch_*/*.handoff) out=$(count "$H"/outbox/*.handoff) sent=$(count "$H"/sent/*.handoff) printf "== %-10s new=%-2s proc=%-2s done=%-2s outbox=%-2s sent=%-2s\n" \ "$role" "$new" "$proc" "$donec" "$out" "$sent" for f in "$H"/inbox/new/*.handoff; do [ -f "$f" ] && echo " [pendiente] $(sed -n 's/^task: //p' "$f")"; done for f in "$H"/inbox/in_process/*.handoff; do [ -f "$f" ] && echo " [en proceso] $(sed -n 's/^task: //p' "$f")"; done for d in "$H"/inbox/in_process/batch_*; do [ -d "$d" ] && for f in "$d"/*.handoff; do [ -f "$f" ] && echo " [batch] $(sed -n 's/^task: //p' "$f")"; done done for f in "$H"/outbox/*.handoff; do [ -f "$f" ] && echo " [outbox] $(sed -n 's/^task: //p' "$f")"; done done < "$TSV" exit 0