mirror of
https://github.com/tradecatlabs/vibe-coding-cn.git
synced 2026-08-05 23:27:45 +00:00
feat: skills - add auto-tmux swarm metrics
This commit is contained in:
@@ -154,6 +154,7 @@ skills/auto-tmux/scripts/swarm-state.sh lock-prune --older-than 3600 --dry-run
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-block --id task-001 --owner <session>:<window>.<pane> --reason "等待输入"
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-fail --id task-001 --owner <session>:<window>.<pane> --reason "测试失败"
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-list --status FAIL --dir /tmp/ai_swarm
|
||||
skills/auto-tmux/scripts/swarm-state.sh metrics --dir /tmp/ai_swarm
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-reopen --id task-001 --owner <session>:<window>.<pane> --reason "重新执行"
|
||||
skills/auto-tmux/scripts/swarm-state.sh validate --dir /tmp/ai_swarm
|
||||
skills/auto-tmux/scripts/swarm-state.sh report --dir /tmp/ai_swarm
|
||||
|
||||
@@ -219,6 +219,7 @@ skills/auto-tmux/scripts/swarm-state.sh lock-prune --older-than 3600 --dry-run
|
||||
|
||||
```bash
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-done --id task-001 --owner "ai-hub:2.1" --result "make test passed"
|
||||
skills/auto-tmux/scripts/swarm-state.sh metrics
|
||||
skills/auto-tmux/scripts/swarm-state.sh validate
|
||||
skills/auto-tmux/scripts/swarm-state.sh report
|
||||
```
|
||||
|
||||
@@ -145,9 +145,12 @@ skills/auto-tmux/scripts/swarm-state.sh task-reopen \
|
||||
校验状态一致性:
|
||||
|
||||
```bash
|
||||
skills/auto-tmux/scripts/swarm-state.sh metrics
|
||||
skills/auto-tmux/scripts/swarm-state.sh validate
|
||||
```
|
||||
|
||||
`metrics` 会按任务状态、owner 和当前锁数量输出摘要,适合 commander 快速判断蜂群是否堵塞。
|
||||
|
||||
`validate` 会检查 `tasks.tsv` 表头、字段数量、重复任务 ID、非法状态、终态任务结果文件,以及锁目录中的 `owner` / `created_at`。
|
||||
|
||||
## 锁管理
|
||||
|
||||
@@ -57,6 +57,7 @@ skills/auto-tmux/scripts/swarm-state.sh lock-prune --older-than 3600 --dry-run -
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-block --id task-001 --owner "$target" --reason "等待输入" --dir /tmp/ai_swarm
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-fail --id task-001 --owner "$target" --reason "测试失败" --dir /tmp/ai_swarm
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-list --status FAIL --dir /tmp/ai_swarm
|
||||
skills/auto-tmux/scripts/swarm-state.sh metrics --dir /tmp/ai_swarm
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-reopen --id task-001 --owner "$target" --reason "重新执行" --dir /tmp/ai_swarm
|
||||
skills/auto-tmux/scripts/swarm-state.sh validate --dir /tmp/ai_swarm
|
||||
skills/auto-tmux/scripts/swarm-state.sh report --dir /tmp/ai_swarm
|
||||
|
||||
@@ -72,6 +72,8 @@ grep -q 'imported-001' /tmp/auto-tmux-smoke-task-next.txt
|
||||
"$SWARM_STATE" task-fail --dir "$SWARM_DIR" --id smoke-fail --owner "$worker_target" --reason "expected failure"
|
||||
"$SWARM_STATE" task-list --dir "$SWARM_DIR" --status FAIL >/tmp/auto-tmux-smoke-task-list-fail.txt
|
||||
grep -q 'smoke-fail' /tmp/auto-tmux-smoke-task-list-fail.txt
|
||||
"$SWARM_STATE" metrics --dir "$SWARM_DIR" >/tmp/auto-tmux-smoke-metrics.txt
|
||||
grep -q 'FAIL' /tmp/auto-tmux-smoke-metrics.txt
|
||||
"$SWARM_STATE" report --dir "$SWARM_DIR" >/tmp/auto-tmux-smoke-report.txt
|
||||
"$SWARM_STATE" validate --dir "$SWARM_DIR" >/tmp/auto-tmux-smoke-state-validate.txt
|
||||
grep -q 'smoke-task' /tmp/auto-tmux-smoke-report.txt
|
||||
|
||||
@@ -31,6 +31,7 @@ Usage:
|
||||
swarm-state.sh lock-list [--dir DIR]
|
||||
swarm-state.sh lock-prune --older-than SEC [--dir DIR] [--dry-run]
|
||||
swarm-state.sh report [--dir DIR]
|
||||
swarm-state.sh metrics [--dir DIR]
|
||||
swarm-state.sh validate [--dir DIR]
|
||||
|
||||
Environment:
|
||||
@@ -467,6 +468,27 @@ cmd_report() {
|
||||
cmd_status -n 20
|
||||
}
|
||||
|
||||
cmd_metrics() {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--dir) set_dir "${2:-}"; shift 2 ;;
|
||||
*) die "unknown metrics option: $1" ;;
|
||||
esac
|
||||
done
|
||||
ensure_init
|
||||
printf '# swarm metrics\n\n'
|
||||
printf 'dir: %s\n\n' "$SWARM_DIR"
|
||||
printf '## by status\n\n'
|
||||
awk -F '\t' 'NR > 1 {count[$2]++} END {for (status in count) print status "\t" count[status]}' "$TASKS_TSV" |
|
||||
sort | column -t -s $'\t' 2>/dev/null || true
|
||||
printf '\n## by owner\n\n'
|
||||
awk -F '\t' 'NR > 1 {count[$3]++} END {for (owner in count) print owner "\t" count[owner]}' "$TASKS_TSV" |
|
||||
sort | column -t -s $'\t' 2>/dev/null || true
|
||||
printf '\n## locks\n\n'
|
||||
find "$LOCKS_DIR" -mindepth 1 -maxdepth 1 -type d -name '*.lock.d' | wc -l | awk '{print "active_locks\t" $1}' |
|
||||
column -t -s $'\t' 2>/dev/null || true
|
||||
}
|
||||
|
||||
cmd_validate() {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
@@ -560,6 +582,7 @@ main() {
|
||||
lock-list) cmd_lock_list "$@" ;;
|
||||
lock-prune) cmd_lock_prune "$@" ;;
|
||||
report) cmd_report "$@" ;;
|
||||
metrics) cmd_metrics "$@" ;;
|
||||
validate) cmd_validate "$@" ;;
|
||||
*) die "unknown command: $cmd" ;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user