Files

37 lines
1.7 KiB
Bash
Executable File

#!/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 <globs...> → 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