mirror of
https://github.com/tradecatlabs/vibe-coding-cn.git
synced 2026-08-09 17:10:58 +00:00
feat: skills - summarize auto-tmux worker results
This commit is contained in:
@@ -22,6 +22,7 @@ skills/auto-tmux/
|
||||
│ ├── swarm-export.sh
|
||||
│ ├── swarm-timeline.sh
|
||||
│ ├── swarm-blockers.sh
|
||||
│ ├── swarm-results.sh
|
||||
│ ├── swarm-report-pack.sh
|
||||
│ ├── swarm-assign.sh
|
||||
│ ├── swarm-health.sh
|
||||
@@ -63,6 +64,7 @@ skills/auto-tmux/
|
||||
- `scripts/swarm-export.sh` 是机器可读导出层,将任务、依赖和锁导出为 JSONL。
|
||||
- `scripts/swarm-timeline.sh` 是状态时间线层,将 `status.log` 渲染为 Markdown。
|
||||
- `scripts/swarm-blockers.sh` 是阻塞报告层,聚合 BLOCKED/FAIL、锁和异常状态。
|
||||
- `scripts/swarm-results.sh` 是结果收敛层,汇总 DONE/FAIL/BLOCKED worker 结果。
|
||||
- `scripts/swarm-report-pack.sh` 是报告包层,聚合多个只读报告与 JSONL 导出。
|
||||
- `scripts/swarm-assign.sh` 是分配建议层,将 ready task 轮询映射到 worker pane。
|
||||
- `scripts/swarm-health.sh` 是健康检查层,汇总 tmux 和 swarm state 的只读报告包。
|
||||
@@ -82,4 +84,4 @@ skills/auto-tmux/
|
||||
- 上游来源:`tools/external/.tmux` 与 `tools/external/tmux`。
|
||||
- 下游使用:`SKILL.md` 和 `references/` 中的命令示例。
|
||||
- 验证入口:`skills/auto-skill/scripts/validate-skill.sh skills/auto-tmux --strict`。
|
||||
- 脚本验证:`skills/auto-tmux/scripts/validate-auto-tmux.sh`、`bash -n skills/auto-tmux/scripts/auto-tmux.sh`、`bash -n skills/auto-tmux/scripts/swarm-state.sh`、`bash -n skills/auto-tmux/scripts/swarm-brief.sh`、`bash -n skills/auto-tmux/scripts/swarm-watch.sh`、`bash -n skills/auto-tmux/scripts/swarm-archive.sh`、`bash -n skills/auto-tmux/scripts/swarm-board.sh`、`bash -n skills/auto-tmux/scripts/swarm-deps-graph.sh`、`bash -n skills/auto-tmux/scripts/swarm-export.sh`、`bash -n skills/auto-tmux/scripts/swarm-timeline.sh`、`bash -n skills/auto-tmux/scripts/swarm-blockers.sh`、`bash -n skills/auto-tmux/scripts/swarm-report-pack.sh`、`bash -n skills/auto-tmux/scripts/swarm-assign.sh`、`bash -n skills/auto-tmux/scripts/swarm-health.sh`、`bash -n skills/auto-tmux/scripts/remote-readonly.sh`、`bash -n skills/auto-tmux/scripts/record-summary.sh`、`bash -n skills/auto-tmux/scripts/completion.bash`、`bash -n skills/auto-tmux/scripts/safety-check.sh`、`bash -n skills/auto-tmux/scripts/render-swarm-prompt.sh`、`bash -n skills/auto-tmux/scripts/swarm-dispatch.sh`、`skills/auto-tmux/scripts/auto-tmux-smoke-test.sh`。
|
||||
- 脚本验证:`skills/auto-tmux/scripts/validate-auto-tmux.sh`、`bash -n skills/auto-tmux/scripts/auto-tmux.sh`、`bash -n skills/auto-tmux/scripts/swarm-state.sh`、`bash -n skills/auto-tmux/scripts/swarm-brief.sh`、`bash -n skills/auto-tmux/scripts/swarm-watch.sh`、`bash -n skills/auto-tmux/scripts/swarm-archive.sh`、`bash -n skills/auto-tmux/scripts/swarm-board.sh`、`bash -n skills/auto-tmux/scripts/swarm-deps-graph.sh`、`bash -n skills/auto-tmux/scripts/swarm-export.sh`、`bash -n skills/auto-tmux/scripts/swarm-timeline.sh`、`bash -n skills/auto-tmux/scripts/swarm-blockers.sh`、`bash -n skills/auto-tmux/scripts/swarm-results.sh`、`bash -n skills/auto-tmux/scripts/swarm-report-pack.sh`、`bash -n skills/auto-tmux/scripts/swarm-assign.sh`、`bash -n skills/auto-tmux/scripts/swarm-health.sh`、`bash -n skills/auto-tmux/scripts/remote-readonly.sh`、`bash -n skills/auto-tmux/scripts/record-summary.sh`、`bash -n skills/auto-tmux/scripts/completion.bash`、`bash -n skills/auto-tmux/scripts/safety-check.sh`、`bash -n skills/auto-tmux/scripts/render-swarm-prompt.sh`、`bash -n skills/auto-tmux/scripts/swarm-dispatch.sh`、`skills/auto-tmux/scripts/auto-tmux-smoke-test.sh`。
|
||||
|
||||
@@ -29,6 +29,7 @@ bash -n skills/auto-tmux/scripts/swarm-deps-graph.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-export.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-timeline.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-blockers.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-results.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-report-pack.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-assign.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-health.sh
|
||||
|
||||
@@ -43,6 +43,7 @@ bash -n skills/auto-tmux/scripts/swarm-deps-graph.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-export.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-timeline.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-blockers.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-results.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-report-pack.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-assign.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-health.sh
|
||||
@@ -133,6 +134,7 @@ skills/auto-tmux/scripts/swarm-deps-graph.sh --dir /tmp/ai_swarm --out /tmp/ai-s
|
||||
skills/auto-tmux/scripts/swarm-export.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-export
|
||||
skills/auto-tmux/scripts/swarm-timeline.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-timeline.md
|
||||
skills/auto-tmux/scripts/swarm-blockers.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-blockers.md
|
||||
skills/auto-tmux/scripts/swarm-results.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-results.md
|
||||
skills/auto-tmux/scripts/swarm-report-pack.sh --dir /tmp/ai_swarm --session ai-hub --out /tmp/ai-swarm-report-pack
|
||||
skills/auto-tmux/scripts/swarm-report-pack.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-report-pack --attach /tmp/auto-tmux-remote
|
||||
skills/auto-tmux/scripts/swarm-report-pack.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-report-pack --tar
|
||||
@@ -290,6 +292,7 @@ skills/auto-tmux/scripts/swarm-dispatch.sh --role worker --target <session>:<win
|
||||
- `scripts/swarm-export.sh`: 导出任务、依赖和锁的 JSONL 状态包
|
||||
- `scripts/swarm-timeline.sh`: 渲染 `status.log` 的 Markdown 时间线
|
||||
- `scripts/swarm-blockers.sh`: 聚合 BLOCKED/FAIL 任务、锁和最近异常状态
|
||||
- `scripts/swarm-results.sh`: 汇总 DONE/FAIL/BLOCKED worker 结果
|
||||
- `scripts/swarm-report-pack.sh`: 聚合 board、依赖图、时间线、阻塞清单、分配建议、附件、`manifest.json` 和可选 tar.gz
|
||||
- `scripts/swarm-assign.sh`: 根据 ready tasks 和 worker pane 生成只读分配建议
|
||||
- `scripts/swarm-health.sh`: 汇总 tmux 与 swarm state 的只读健康检查报告包
|
||||
@@ -319,6 +322,6 @@ skills/auto-tmux/scripts/swarm-dispatch.sh --role worker --target <session>:<win
|
||||
4. ≥3 个端到端示例,含输入/步骤/验收。
|
||||
5. 长文档放在 `references/` 并可导航;无文档堆砌。
|
||||
6. 不确定项给出验证路径;禁止虚构 tmux 行为。
|
||||
7. `bash -n skills/auto-tmux/scripts/auto-tmux.sh`、`bash -n skills/auto-tmux/scripts/swarm-state.sh`、`bash -n skills/auto-tmux/scripts/swarm-brief.sh`、`bash -n skills/auto-tmux/scripts/swarm-watch.sh`、`bash -n skills/auto-tmux/scripts/swarm-archive.sh`、`bash -n skills/auto-tmux/scripts/swarm-board.sh`、`bash -n skills/auto-tmux/scripts/swarm-deps-graph.sh`、`bash -n skills/auto-tmux/scripts/swarm-export.sh`、`bash -n skills/auto-tmux/scripts/swarm-timeline.sh`、`bash -n skills/auto-tmux/scripts/swarm-blockers.sh`、`bash -n skills/auto-tmux/scripts/swarm-report-pack.sh`、`bash -n skills/auto-tmux/scripts/swarm-assign.sh`、`bash -n skills/auto-tmux/scripts/swarm-health.sh`、`bash -n skills/auto-tmux/scripts/remote-readonly.sh`、`bash -n skills/auto-tmux/scripts/record-summary.sh`、`bash -n skills/auto-tmux/scripts/completion.bash`、`bash -n skills/auto-tmux/scripts/safety-check.sh`、`bash -n skills/auto-tmux/scripts/render-swarm-prompt.sh`、`bash -n skills/auto-tmux/scripts/swarm-dispatch.sh` 与 `bash -n skills/auto-tmux/scripts/validate-auto-tmux.sh` 通过。
|
||||
7. `bash -n skills/auto-tmux/scripts/auto-tmux.sh`、`bash -n skills/auto-tmux/scripts/swarm-state.sh`、`bash -n skills/auto-tmux/scripts/swarm-brief.sh`、`bash -n skills/auto-tmux/scripts/swarm-watch.sh`、`bash -n skills/auto-tmux/scripts/swarm-archive.sh`、`bash -n skills/auto-tmux/scripts/swarm-board.sh`、`bash -n skills/auto-tmux/scripts/swarm-deps-graph.sh`、`bash -n skills/auto-tmux/scripts/swarm-export.sh`、`bash -n skills/auto-tmux/scripts/swarm-timeline.sh`、`bash -n skills/auto-tmux/scripts/swarm-blockers.sh`、`bash -n skills/auto-tmux/scripts/swarm-results.sh`、`bash -n skills/auto-tmux/scripts/swarm-report-pack.sh`、`bash -n skills/auto-tmux/scripts/swarm-assign.sh`、`bash -n skills/auto-tmux/scripts/swarm-health.sh`、`bash -n skills/auto-tmux/scripts/remote-readonly.sh`、`bash -n skills/auto-tmux/scripts/record-summary.sh`、`bash -n skills/auto-tmux/scripts/completion.bash`、`bash -n skills/auto-tmux/scripts/safety-check.sh`、`bash -n skills/auto-tmux/scripts/render-swarm-prompt.sh`、`bash -n skills/auto-tmux/scripts/swarm-dispatch.sh` 与 `bash -n skills/auto-tmux/scripts/validate-auto-tmux.sh` 通过。
|
||||
8. `skills/auto-tmux/scripts/auto-tmux-smoke-test.sh` 通过或在无 tmux 环境下明确跳过。
|
||||
9. 运行 `skills/auto-tmux/scripts/validate-auto-tmux.sh` 和 `skills/auto-skill/scripts/validate-skill.sh skills/auto-tmux --strict` 通过。
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
| `swarm-export.sh` | 导出 JSONL 状态包 | 只读读取 state,写显式输出目录 |
|
||||
| `swarm-timeline.sh` | 渲染状态日志时间线 | 只读生成 Markdown |
|
||||
| `swarm-blockers.sh` | 聚合阻塞、失败、锁和异常状态 | 只读生成 Markdown |
|
||||
| `swarm-results.sh` | 汇总 DONE/FAIL/BLOCKED worker 结果 | 只读生成 Markdown |
|
||||
| `swarm-report-pack.sh` | 聚合多个只读报告、附件与 JSONL 导出 | 生成 `index.md` 和 `manifest.json` |
|
||||
| `swarm-assign.sh` | 生成 ready task 到 worker pane 的分配建议 | 只读,不 claim,不发送 |
|
||||
| `swarm-health.sh` | 汇总 tmux 与 swarm state 健康报告 | 只读,不自动修复 |
|
||||
@@ -115,6 +116,7 @@ skills/auto-tmux/scripts/swarm-deps-graph.sh --dir /tmp/ai_swarm --out /tmp/ai-s
|
||||
skills/auto-tmux/scripts/swarm-export.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-export
|
||||
skills/auto-tmux/scripts/swarm-timeline.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-timeline.md
|
||||
skills/auto-tmux/scripts/swarm-blockers.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-blockers.md
|
||||
skills/auto-tmux/scripts/swarm-results.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-results.md
|
||||
skills/auto-tmux/scripts/swarm-report-pack.sh --dir /tmp/ai_swarm --session ai-hub --out /tmp/ai-swarm-report-pack
|
||||
skills/auto-tmux/scripts/swarm-report-pack.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-report-pack --attach /tmp/auto-tmux-remote
|
||||
skills/auto-tmux/scripts/swarm-report-pack.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-report-pack --tar
|
||||
@@ -279,6 +281,7 @@ bash -n skills/auto-tmux/scripts/swarm-deps-graph.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-export.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-timeline.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-blockers.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-results.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-report-pack.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-assign.sh
|
||||
bash -n skills/auto-tmux/scripts/swarm-health.sh
|
||||
|
||||
@@ -41,13 +41,14 @@
|
||||
| 33 | `ff8cd86` | 远程证据包增强 | `remote-readonly.sh` 输出 `metadata.jsonl`,validator 覆盖 fake SSH |
|
||||
| 34 | `5677df3` | 报告附件索引 | `swarm-report-pack.sh --attach` |
|
||||
| 35 | `7a2ff13` | 报告包 manifest | `swarm-report-pack.sh` 输出根级 `manifest.json` |
|
||||
| 36 | `本轮` | 报告包压缩 | `swarm-report-pack.sh --tar` |
|
||||
| 36 | `9eac52f` | 报告包压缩 | `swarm-report-pack.sh --tar` |
|
||||
| 37 | `本轮` | worker 结果收敛 | `swarm-results.sh` |
|
||||
|
||||
## 后续候选方向
|
||||
|
||||
| 优先级 | 方向 | 说明 |
|
||||
|:---|:---|:---|
|
||||
| P3 | worker 结果收敛 | 从 report pack 中提取 worker 产出摘要 |
|
||||
| P3 | 结果摘要导出 | 为 `swarm-results.sh` 增加 JSONL 导出 |
|
||||
|
||||
## 每轮验收清单
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ scripts/
|
||||
├── swarm-export.sh # 导出 JSONL 状态包
|
||||
├── swarm-timeline.sh # 从 status.log 渲染 Markdown 时间线
|
||||
├── swarm-blockers.sh # 聚合 BLOCKED/FAIL、锁和异常状态
|
||||
├── swarm-results.sh # 汇总 DONE/FAIL/BLOCKED worker 结果
|
||||
├── swarm-report-pack.sh # 聚合只读报告包
|
||||
├── swarm-assign.sh # 生成 ready task 到 worker pane 的分配建议
|
||||
├── swarm-health.sh # 汇总只读健康检查报告包
|
||||
@@ -48,6 +49,7 @@ scripts/
|
||||
- 导出脚本只读 `tasks.tsv`、`deps.tsv` 和锁目录,只写显式输出目录。
|
||||
- 时间线脚本只读 `status.log`,不改写状态目录。
|
||||
- 阻塞报告脚本只读任务、锁和状态日志,不做自动修复。
|
||||
- 结果收敛脚本只读任务、结果文件和状态日志,不改写状态目录。
|
||||
- 报告包脚本只编排只读脚本并写入显式输出目录,不 claim 任务、不发送 prompt。
|
||||
- 分配建议脚本只读任务和 pane 拓扑,不 claim 任务、不发送 prompt。
|
||||
- 健康检查脚本只读 tmux 与 swarm state,失败项写入报告,不做自动修复。
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
- [`swarm-export.sh`](./swarm-export.sh) - 将任务、依赖和锁导出为 JSONL 包。
|
||||
- [`swarm-timeline.sh`](./swarm-timeline.sh) - 将 `status.log` 渲染为 Markdown 时间线。
|
||||
- [`swarm-blockers.sh`](./swarm-blockers.sh) - 聚合 BLOCKED/FAIL 任务、锁和最近异常状态。
|
||||
- [`swarm-results.sh`](./swarm-results.sh) - 汇总 DONE/FAIL/BLOCKED worker 结果。
|
||||
- [`swarm-report-pack.sh`](./swarm-report-pack.sh) - 聚合 board、依赖图、时间线、阻塞清单、分配建议和 JSONL 导出。
|
||||
- 报告包根目录会生成 `index.md` 和 `manifest.json`,附件目录通过 `--attach` 显式加入。
|
||||
- [`swarm-assign.sh`](./swarm-assign.sh) - 根据 ready tasks 和 worker pane 生成只读分配建议。
|
||||
@@ -85,6 +86,9 @@ skills/auto-tmux/scripts/swarm-timeline.sh --dir /tmp/ai_swarm --out /tmp/ai-swa
|
||||
# 生成阻塞清单
|
||||
skills/auto-tmux/scripts/swarm-blockers.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-blockers.md
|
||||
|
||||
# 汇总 worker 结果
|
||||
skills/auto-tmux/scripts/swarm-results.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-results.md
|
||||
|
||||
# 生成完整报告包
|
||||
skills/auto-tmux/scripts/swarm-report-pack.sh --dir /tmp/ai_swarm --session ai-hub --out /tmp/ai-swarm-report-pack
|
||||
skills/auto-tmux/scripts/swarm-report-pack.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-report-pack --attach /tmp/auto-tmux-remote
|
||||
|
||||
@@ -153,7 +153,7 @@ cmd_doctor() {
|
||||
status_line "WARN" "tmux server has no reachable session yet"
|
||||
fi
|
||||
|
||||
for script in auto-tmux.sh swarm-state.sh swarm-brief.sh swarm-watch.sh swarm-archive.sh swarm-board.sh swarm-deps-graph.sh swarm-export.sh swarm-timeline.sh swarm-blockers.sh swarm-report-pack.sh swarm-assign.sh swarm-health.sh remote-readonly.sh record-summary.sh safety-check.sh render-swarm-prompt.sh swarm-dispatch.sh auto-tmux-smoke-test.sh validate-auto-tmux.sh; do
|
||||
for script in auto-tmux.sh swarm-state.sh swarm-brief.sh swarm-watch.sh swarm-archive.sh swarm-board.sh swarm-deps-graph.sh swarm-export.sh swarm-timeline.sh swarm-blockers.sh swarm-results.sh swarm-report-pack.sh swarm-assign.sh swarm-health.sh remote-readonly.sh record-summary.sh safety-check.sh render-swarm-prompt.sh swarm-dispatch.sh auto-tmux-smoke-test.sh validate-auto-tmux.sh; do
|
||||
if [[ -x "$script_dir/$script" ]]; then
|
||||
status_line "OK" "script executable: $script"
|
||||
else
|
||||
|
||||
@@ -91,6 +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 "export" "$script_dir/swarm-export.sh" --dir "$swarm_dir" --out "$out_dir/export"
|
||||
|
||||
if [[ -n "$session" ]]; then
|
||||
@@ -142,6 +143,7 @@ cat > "$out_dir/manifest.json" <<EOF
|
||||
"deps.md",
|
||||
"timeline.md",
|
||||
"blockers.md",
|
||||
"results.md",
|
||||
"assign.md",
|
||||
"export/manifest.json"
|
||||
],
|
||||
@@ -164,6 +166,7 @@ cat > "$out_dir/index.md" <<EOF
|
||||
- [deps.md](./deps.md)
|
||||
- [timeline.md](./timeline.md)
|
||||
- [blockers.md](./blockers.md)
|
||||
- [results.md](./results.md)
|
||||
- [assign.md](./assign.md)
|
||||
- [manifest.json](./manifest.json)
|
||||
- [export/manifest.json](./export/manifest.json)
|
||||
|
||||
Executable
+119
@@ -0,0 +1,119 @@
|
||||
#!/usr/bin/env bash
|
||||
# swarm-results: render terminal worker results as a delivery summary.
|
||||
set -euo pipefail
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
swarm-results: summarize DONE/FAIL/BLOCKED worker results
|
||||
|
||||
Usage:
|
||||
swarm-results.sh [--dir DIR] [--out FILE] [--limit N]
|
||||
|
||||
Defaults:
|
||||
--dir AUTO_TMUX_SWARM_DIR or /tmp/ai_swarm
|
||||
--out stdout
|
||||
--limit 80 result rows
|
||||
|
||||
This script is read-only. It does not mutate swarm state.
|
||||
EOF
|
||||
}
|
||||
|
||||
die() {
|
||||
printf 'error: %s\n' "$*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
swarm_dir="${AUTO_TMUX_SWARM_DIR:-/tmp/ai_swarm}"
|
||||
out_file=""
|
||||
limit=80
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--dir|--swarm-dir)
|
||||
swarm_dir="${2:-}"
|
||||
shift 2
|
||||
;;
|
||||
--out)
|
||||
out_file="${2:-}"
|
||||
shift 2
|
||||
;;
|
||||
--limit)
|
||||
limit="${2:-}"
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
die "unknown option: $1"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[[ "$limit" =~ ^[0-9]+$ ]] || die "--limit must be a number"
|
||||
|
||||
tasks_tsv="$swarm_dir/tasks.tsv"
|
||||
results_dir="$swarm_dir/results"
|
||||
status_log="$swarm_dir/status.log"
|
||||
[[ -f "$tasks_tsv" ]] || die "tasks file not found: $tasks_tsv"
|
||||
|
||||
render_results() {
|
||||
printf '# auto-tmux Swarm Results\n\n'
|
||||
printf -- '- dir: `%s`\n' "$swarm_dir"
|
||||
printf -- '- created_at: `%s`\n\n' "$(date -Is)"
|
||||
|
||||
printf '## Summary\n\n'
|
||||
awk -F '\t' '
|
||||
NR > 1 {count[$2]++}
|
||||
END {
|
||||
print "| status | count |"
|
||||
print "|:---|---:|"
|
||||
n = split("DONE FAIL BLOCKED DOING TODO", order, " ")
|
||||
for (i = 1; i <= n; i++) {
|
||||
status = order[i]
|
||||
print "| `" status "` | " (count[status] + 0) " |"
|
||||
}
|
||||
}
|
||||
' "$tasks_tsv"
|
||||
|
||||
printf '\n## Terminal Results\n\n'
|
||||
printf '| status | id | owner | text | result |\n'
|
||||
printf '|:---|:---|:---|:---|:---|\n'
|
||||
awk -F '\t' -v limit="$limit" '
|
||||
function esc(value) {
|
||||
gsub(/\|/, "\\|", value)
|
||||
return value
|
||||
}
|
||||
NR > 1 && ($2 == "DONE" || $2 == "FAIL" || $2 == "BLOCKED") {
|
||||
print "| `" esc($2) "` | `" esc($1) "` | `" esc($3) "` | " esc($4) " | " esc($5) " |"
|
||||
shown++
|
||||
if (shown >= limit) exit
|
||||
}
|
||||
END {if (shown == 0) print "| - | - | - | - | - |"}
|
||||
' "$tasks_tsv"
|
||||
|
||||
printf '\n## Result Files\n\n'
|
||||
if [[ -d "$results_dir" ]] && find "$results_dir" -mindepth 1 -maxdepth 1 -type f -name '*.txt' -print -quit | grep -q .; then
|
||||
find "$results_dir" -mindepth 1 -maxdepth 1 -type f -name '*.txt' -print | sort | while read -r path; do
|
||||
printf -- '- `%s`: %s\n' "$(basename "$path")" "$(head -n 1 "$path")"
|
||||
done
|
||||
else
|
||||
printf -- '- no result files\n'
|
||||
fi
|
||||
|
||||
printf '\n## Recent Terminal Status\n\n'
|
||||
if [[ -s "$status_log" ]]; then
|
||||
tail -n 30 "$status_log" | grep -E '\[(DONE|FAIL|BLOCKED)\]' | sed 's/^/- /' || printf -- '- no recent terminal status\n'
|
||||
else
|
||||
printf -- '- no status log\n'
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ -n "$out_file" ]]; then
|
||||
mkdir -p "$(dirname "$out_file")"
|
||||
render_results > "$out_file"
|
||||
printf 'swarm results written: %s\n' "$out_file"
|
||||
else
|
||||
render_results
|
||||
fi
|
||||
@@ -108,6 +108,7 @@ scripts=(
|
||||
"$script_dir/swarm-export.sh"
|
||||
"$script_dir/swarm-timeline.sh"
|
||||
"$script_dir/swarm-blockers.sh"
|
||||
"$script_dir/swarm-results.sh"
|
||||
"$script_dir/swarm-report-pack.sh"
|
||||
"$script_dir/swarm-assign.sh"
|
||||
"$script_dir/swarm-health.sh"
|
||||
@@ -137,6 +138,7 @@ run_gate "swarm-deps-graph help" "$script_dir/swarm-deps-graph.sh" --help
|
||||
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-report-pack help" "$script_dir/swarm-report-pack.sh" --help
|
||||
run_gate "swarm-report-pack attachment" bash -c '
|
||||
tmp="$(mktemp -d)"
|
||||
@@ -145,6 +147,7 @@ run_gate "swarm-report-pack attachment" bash -c '
|
||||
printf "remote evidence\n" > "$tmp/remote/remote-tmux.txt"
|
||||
"$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 "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"
|
||||
@@ -178,6 +181,7 @@ require_contains "$skill_dir/SKILL.md" "scripts/swarm-deps-graph.sh"
|
||||
require_contains "$skill_dir/SKILL.md" "scripts/swarm-export.sh"
|
||||
require_contains "$skill_dir/SKILL.md" "scripts/swarm-timeline.sh"
|
||||
require_contains "$skill_dir/SKILL.md" "scripts/swarm-blockers.sh"
|
||||
require_contains "$skill_dir/SKILL.md" "scripts/swarm-results.sh"
|
||||
require_contains "$skill_dir/SKILL.md" "scripts/swarm-report-pack.sh"
|
||||
require_contains "$skill_dir/SKILL.md" "scripts/swarm-assign.sh"
|
||||
require_contains "$skill_dir/SKILL.md" "scripts/swarm-health.sh"
|
||||
@@ -204,6 +208,7 @@ require_contains "$script_dir/README.md" "swarm-deps-graph.sh"
|
||||
require_contains "$script_dir/README.md" "swarm-export.sh"
|
||||
require_contains "$script_dir/README.md" "swarm-timeline.sh"
|
||||
require_contains "$script_dir/README.md" "swarm-blockers.sh"
|
||||
require_contains "$script_dir/README.md" "swarm-results.sh"
|
||||
require_contains "$script_dir/README.md" "swarm-report-pack.sh"
|
||||
require_contains "$script_dir/README.md" "swarm-assign.sh"
|
||||
require_contains "$script_dir/README.md" "swarm-health.sh"
|
||||
@@ -221,6 +226,7 @@ require_contains "$script_dir/AGENTS.md" "swarm-deps-graph.sh"
|
||||
require_contains "$script_dir/AGENTS.md" "swarm-export.sh"
|
||||
require_contains "$script_dir/AGENTS.md" "swarm-timeline.sh"
|
||||
require_contains "$script_dir/AGENTS.md" "swarm-blockers.sh"
|
||||
require_contains "$script_dir/AGENTS.md" "swarm-results.sh"
|
||||
require_contains "$script_dir/AGENTS.md" "swarm-report-pack.sh"
|
||||
require_contains "$script_dir/AGENTS.md" "swarm-assign.sh"
|
||||
require_contains "$script_dir/AGENTS.md" "swarm-health.sh"
|
||||
|
||||
Reference in New Issue
Block a user