feat: skills - export auto-tmux results jsonl

This commit is contained in:
tukuaiai
2026-05-19 14:08:19 +08:00
parent 52303a5565
commit dfeb3762dc
7 changed files with 66 additions and 6 deletions
+1
View File
@@ -88,6 +88,7 @@ skills/auto-tmux/scripts/swarm-blockers.sh --dir /tmp/ai_swarm --out /tmp/ai-swa
# 汇总 worker 结果
skills/auto-tmux/scripts/swarm-results.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-results.md
skills/auto-tmux/scripts/swarm-results.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-results.md --jsonl /tmp/ai-swarm-results.jsonl
# 生成完整报告包
skills/auto-tmux/scripts/swarm-report-pack.sh --dir /tmp/ai_swarm --session ai-hub --out /tmp/ai-swarm-report-pack
@@ -91,7 +91,7 @@ run_report "board" "$script_dir/swarm-board.sh" --dir "$swarm_dir" --out "$out_d
run_report "dependency graph" "$script_dir/swarm-deps-graph.sh" --dir "$swarm_dir" --out "$out_dir/deps.md"
run_report "timeline" "$script_dir/swarm-timeline.sh" --dir "$swarm_dir" --out "$out_dir/timeline.md"
run_report "blockers" "$script_dir/swarm-blockers.sh" --dir "$swarm_dir" --out "$out_dir/blockers.md"
run_report "results" "$script_dir/swarm-results.sh" --dir "$swarm_dir" --out "$out_dir/results.md"
run_report "results" "$script_dir/swarm-results.sh" --dir "$swarm_dir" --out "$out_dir/results.md" --jsonl "$out_dir/results.jsonl"
run_report "export" "$script_dir/swarm-export.sh" --dir "$swarm_dir" --out "$out_dir/export"
if [[ -n "$session" ]]; then
@@ -144,6 +144,7 @@ cat > "$out_dir/manifest.json" <<EOF
"timeline.md",
"blockers.md",
"results.md",
"results.jsonl",
"assign.md",
"export/manifest.json"
],
@@ -167,6 +168,7 @@ cat > "$out_dir/index.md" <<EOF
- [timeline.md](./timeline.md)
- [blockers.md](./blockers.md)
- [results.md](./results.md)
- [results.jsonl](./results.jsonl)
- [assign.md](./assign.md)
- [manifest.json](./manifest.json)
- [export/manifest.json](./export/manifest.json)
+43 -1
View File
@@ -7,11 +7,12 @@ usage() {
swarm-results: summarize DONE/FAIL/BLOCKED worker results
Usage:
swarm-results.sh [--dir DIR] [--out FILE] [--limit N]
swarm-results.sh [--dir DIR] [--out FILE] [--jsonl FILE] [--limit N]
Defaults:
--dir AUTO_TMUX_SWARM_DIR or /tmp/ai_swarm
--out stdout
--jsonl optional JSONL output for terminal results
--limit 80 result rows
This script is read-only. It does not mutate swarm state.
@@ -23,8 +24,19 @@ die() {
exit 1
}
json_escape() {
local value="$1"
value="${value//\\/\\\\}"
value="${value//\"/\\\"}"
value="${value//$'\n'/\\n}"
value="${value//$'\r'/\\r}"
value="${value//$'\t'/\\t}"
printf '%s' "$value"
}
swarm_dir="${AUTO_TMUX_SWARM_DIR:-/tmp/ai_swarm}"
out_file=""
jsonl_file=""
limit=80
while [[ $# -gt 0 ]]; do
@@ -37,6 +49,10 @@ while [[ $# -gt 0 ]]; do
out_file="${2:-}"
shift 2
;;
--jsonl)
jsonl_file="${2:-}"
shift 2
;;
--limit)
limit="${2:-}"
shift 2
@@ -110,6 +126,27 @@ render_results() {
fi
}
write_jsonl() {
local created_at id status owner text result
created_at="$(date -Is)"
mkdir -p "$(dirname "$jsonl_file")"
while IFS=$'\t' read -r id status owner text result; do
[[ "$id" == "id" ]] && continue
case "$status" in
DONE|FAIL|BLOCKED)
printf '{"type":"swarm-result","created_at":"%s","swarm_dir":"%s","id":"%s","status":"%s","owner":"%s","text":"%s","result":"%s"}\n' \
"$(json_escape "$created_at")" \
"$(json_escape "$swarm_dir")" \
"$(json_escape "$id")" \
"$(json_escape "$status")" \
"$(json_escape "$owner")" \
"$(json_escape "$text")" \
"$(json_escape "$result")"
;;
esac
done < "$tasks_tsv" > "$jsonl_file"
}
if [[ -n "$out_file" ]]; then
mkdir -p "$(dirname "$out_file")"
render_results > "$out_file"
@@ -117,3 +154,8 @@ if [[ -n "$out_file" ]]; then
else
render_results
fi
if [[ -n "$jsonl_file" ]]; then
write_jsonl
printf 'swarm results jsonl written: %s\n' "$jsonl_file"
fi
@@ -139,6 +139,17 @@ run_gate "swarm-export help" "$script_dir/swarm-export.sh" --help
run_gate "swarm-timeline help" "$script_dir/swarm-timeline.sh" --help
run_gate "swarm-blockers help" "$script_dir/swarm-blockers.sh" --help
run_gate "swarm-results help" "$script_dir/swarm-results.sh" --help
run_gate "swarm-results jsonl" bash -c '
tmp="$(mktemp -d)"
mkdir -p "$tmp/swarm/results"
printf "id\tstatus\towner\ttext\tresult\n" > "$tmp/swarm/tasks.tsv"
printf "t1\tDONE\tai-hub:1.0\tRun tests\tpassed\n" >> "$tmp/swarm/tasks.tsv"
printf "passed\n" > "$tmp/swarm/results/t1.txt"
"$1" --dir "$tmp/swarm" --out "$tmp/results.md" --jsonl "$tmp/results.jsonl" >/dev/null
grep -Fq "t1" "$tmp/results.md"
grep -Fq "\"type\":\"swarm-result\"" "$tmp/results.jsonl"
rm -rf "$tmp"
' _ "$script_dir/swarm-results.sh"
run_gate "swarm-report-pack help" "$script_dir/swarm-report-pack.sh" --help
run_gate "swarm-report-pack attachment" bash -c '
tmp="$(mktemp -d)"
@@ -148,6 +159,7 @@ run_gate "swarm-report-pack attachment" bash -c '
"$1" --dir "$tmp/swarm" --out "$tmp/out" --attach "$tmp/remote" >/dev/null
grep -Fq "attachments.md" "$tmp/out/index.md"
grep -Fq "results.md" "$tmp/out/index.md"
grep -Fq "results.jsonl" "$tmp/out/index.md"
grep -Fq "manifest.json" "$tmp/out/index.md"
grep -Fq "\"type\": \"auto-tmux-swarm-report-pack\"" "$tmp/out/manifest.json"
grep -Fq "\"attachments\"" "$tmp/out/manifest.json"