mirror of
https://github.com/tradecatlabs/vibe-coding-cn.git
synced 2026-07-29 03:37:44 +00:00
feat: skills - query and reopen auto-tmux tasks
This commit is contained in:
@@ -153,6 +153,8 @@ skills/auto-tmux/scripts/swarm-state.sh lock-acquire --name README.md --owner <s
|
||||
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 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
|
||||
```
|
||||
|
||||
@@ -199,6 +199,8 @@ skills/auto-tmux/scripts/swarm-state.sh task-next --owner "ai-hub:2.1"
|
||||
```bash
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-block --id task-001 --owner "ai-hub:2.1" --reason "等待用户确认"
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-fail --id task-001 --owner "ai-hub:2.1" --reason "make test failed"
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-list --status FAIL
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-reopen --id task-001 --owner "ai-hub:2.1" --reason "修复后重试"
|
||||
```
|
||||
|
||||
获取文件锁:
|
||||
|
||||
@@ -127,8 +127,21 @@ skills/auto-tmux/scripts/swarm-state.sh task-fail \
|
||||
|
||||
```bash
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-list
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-list --status FAIL
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-list --owner "ai-hub:2.1"
|
||||
```
|
||||
|
||||
重开失败或阻塞任务:
|
||||
|
||||
```bash
|
||||
skills/auto-tmux/scripts/swarm-state.sh task-reopen \
|
||||
--id task-001 \
|
||||
--owner "ai-hub:2.1" \
|
||||
--reason "修复依赖后重新执行"
|
||||
```
|
||||
|
||||
`task-reopen` 会把任务状态改回 `TODO`,同时在状态日志中记录 `REOPEN`。
|
||||
|
||||
校验状态一致性:
|
||||
|
||||
```bash
|
||||
|
||||
@@ -56,6 +56,8 @@ skills/auto-tmux/scripts/swarm-state.sh task-next --owner "$target" --dir /tmp/a
|
||||
skills/auto-tmux/scripts/swarm-state.sh lock-prune --older-than 3600 --dry-run --dir /tmp/ai_swarm
|
||||
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 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
|
||||
|
||||
|
||||
@@ -70,12 +70,17 @@ grep -q 'imported-001' /tmp/auto-tmux-smoke-task-next.txt
|
||||
"$SWARM_STATE" task-block --dir "$SWARM_DIR" --id imported-001 --owner "$worker_target" --reason "waiting for input"
|
||||
"$SWARM_STATE" task-add --dir "$SWARM_DIR" --id smoke-fail --text "fail task" >/tmp/auto-tmux-smoke-task-fail-add.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" 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
|
||||
grep -q 'imported-001' /tmp/auto-tmux-smoke-report.txt
|
||||
grep -q 'BLOCKED' /tmp/auto-tmux-smoke-report.txt
|
||||
grep -q 'FAIL' /tmp/auto-tmux-smoke-report.txt
|
||||
"$SWARM_STATE" task-reopen --dir "$SWARM_DIR" --id smoke-fail --owner "$worker_target" --reason "retry after failure"
|
||||
"$SWARM_STATE" task-list --dir "$SWARM_DIR" --status TODO >/tmp/auto-tmux-smoke-task-list-todo.txt
|
||||
grep -q 'smoke-fail' /tmp/auto-tmux-smoke-task-list-todo.txt
|
||||
"$SWARM_BRIEF" --session "$SESSION" --swarm-dir "$SWARM_DIR" --out "$BRIEF_DIR" -n 10 >/tmp/auto-tmux-smoke-brief.txt
|
||||
grep -q 'auto-tmux Swarm Brief' "$BRIEF_DIR/brief.md"
|
||||
"$SWARM_WATCH" --session "$SESSION" --swarm-dir "$SWARM_DIR" --out "$WATCH_DIR" --iterations 1 --interval 0 -n 10 >/tmp/auto-tmux-smoke-watch.txt
|
||||
|
||||
@@ -19,12 +19,13 @@ Usage:
|
||||
swarm-state.sh status [--dir DIR]
|
||||
swarm-state.sh task-add --text TEXT [--id ID] [--dir DIR]
|
||||
swarm-state.sh task-import --file FILE [--prefix PREFIX] [--dir DIR]
|
||||
swarm-state.sh task-list [--dir DIR]
|
||||
swarm-state.sh task-list [--status STATUS] [--owner TARGET] [--dir DIR]
|
||||
swarm-state.sh task-next --owner TARGET [--dir DIR]
|
||||
swarm-state.sh task-claim --id ID --owner TARGET [--dir DIR]
|
||||
swarm-state.sh task-done --id ID --owner TARGET [--result TEXT] [--dir DIR]
|
||||
swarm-state.sh task-block --id ID --owner TARGET --reason TEXT [--dir DIR]
|
||||
swarm-state.sh task-fail --id ID --owner TARGET --reason TEXT [--dir DIR]
|
||||
swarm-state.sh task-reopen --id ID --owner TARGET --reason TEXT [--dir DIR]
|
||||
swarm-state.sh lock-acquire --name NAME --owner TARGET [--dir DIR]
|
||||
swarm-state.sh lock-release --name NAME --owner TARGET [--dir DIR] [--force]
|
||||
swarm-state.sh lock-list [--dir DIR]
|
||||
@@ -181,14 +182,27 @@ cmd_task_import() {
|
||||
}
|
||||
|
||||
cmd_task_list() {
|
||||
local status_filter="" owner_filter=""
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--dir) set_dir "${2:-}"; shift 2 ;;
|
||||
--status) status_filter="${2:-}"; shift 2 ;;
|
||||
--owner) owner_filter="${2:-}"; shift 2 ;;
|
||||
*) die "unknown task-list option: $1" ;;
|
||||
esac
|
||||
done
|
||||
ensure_init
|
||||
column -t -s $'\t' "$TASKS_TSV" 2>/dev/null || cat "$TASKS_TSV"
|
||||
awk -F '\t' -v OFS='\t' -v status="$status_filter" -v owner="$owner_filter" '
|
||||
NR == 1 {print; next}
|
||||
status != "" && $2 != status {next}
|
||||
owner != "" && $3 != owner {next}
|
||||
{print}
|
||||
' "$TASKS_TSV" | column -t -s $'\t' 2>/dev/null || awk -F '\t' -v OFS='\t' -v status="$status_filter" -v owner="$owner_filter" '
|
||||
NR == 1 {print; next}
|
||||
status != "" && $2 != status {next}
|
||||
owner != "" && $3 != owner {next}
|
||||
{print}
|
||||
' "$TASKS_TSV"
|
||||
}
|
||||
|
||||
update_task() {
|
||||
@@ -305,6 +319,27 @@ cmd_task_terminal() {
|
||||
cmd_log --target "$owner" --status "$status" --message "$id $reason"
|
||||
}
|
||||
|
||||
cmd_task_reopen() {
|
||||
local id="" owner="" reason=""
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--dir) set_dir "${2:-}"; shift 2 ;;
|
||||
--id) id="${2:-}"; shift 2 ;;
|
||||
--owner) owner="${2:-}"; shift 2 ;;
|
||||
--reason) reason="${2:-}"; shift 2 ;;
|
||||
*) die "unknown task-reopen option: $1" ;;
|
||||
esac
|
||||
done
|
||||
[[ -n "$id" ]] || die "missing --id"
|
||||
[[ -n "$owner" ]] || die "missing --owner"
|
||||
[[ -n "$reason" ]] || die "missing --reason"
|
||||
ensure_init
|
||||
reason="$(printf '%s' "$reason" | sanitize)"
|
||||
update_task "$id" "TODO" "-" "reopened: $reason"
|
||||
cmd_log --target "$owner" --status "REOPEN" --message "$id $reason"
|
||||
printf 'task reopened: %s\n' "$id"
|
||||
}
|
||||
|
||||
lock_path() {
|
||||
local name="$1"
|
||||
name="$(printf '%s' "$name" | sed -E 's#[^A-Za-z0-9_.-]+#_#g')"
|
||||
@@ -519,6 +554,7 @@ main() {
|
||||
task-done) cmd_task_done "$@" ;;
|
||||
task-block) cmd_task_terminal "BLOCKED" "$@" ;;
|
||||
task-fail) cmd_task_terminal "FAIL" "$@" ;;
|
||||
task-reopen) cmd_task_reopen "$@" ;;
|
||||
lock-acquire) cmd_lock_acquire "$@" ;;
|
||||
lock-release) cmd_lock_release "$@" ;;
|
||||
lock-list) cmd_lock_list "$@" ;;
|
||||
|
||||
Reference in New Issue
Block a user