Files
vibe-coding-cn/skills/auto-tmux/references/swarm-state.md
T

238 lines
6.1 KiB
Markdown

# Swarm State and Lock Protocol
`scripts/swarm-state.sh``auto-tmux` 的最小蜂群状态管理脚本,用于在 tmux 多 AI 协作时记录状态、分配任务、声明锁和汇总报告。
它不依赖数据库、`jq` 或后台服务,默认把状态写入 `/tmp/ai_swarm`。需要隔离不同项目时,用 `--dir DIR` 或环境变量 `AUTO_TMUX_SWARM_DIR` 指定目录。
## 文件结构
```text
/tmp/ai_swarm/
├── status.log
├── tasks.tsv
├── locks/
│ └── <name>.lock.d/
│ ├── owner
│ └── created_at
└── results/
└── <task-id>.txt
```
## 初始化
```bash
skills/auto-tmux/scripts/swarm-state.sh init
```
指定目录:
```bash
skills/auto-tmux/scripts/swarm-state.sh init --dir /tmp/my-ai-swarm
```
## 状态日志
写入状态:
```bash
skills/auto-tmux/scripts/swarm-state.sh log \
--target "ai-hub:2.1" \
--status START \
--message "开始执行 make test"
```
查看最近状态:
```bash
skills/auto-tmux/scripts/swarm-state.sh status -n 20
```
状态建议:
| 状态 | 含义 |
|:---|:---|
| `START` | 开始任务 |
| `DONE` | 完成任务 |
| `BLOCKED` | 阻塞,等待依赖、输入或权限 |
| `FAIL` | 任务失败,需要 commander 处理 |
| `WAIT` | 等待依赖、输入或门禁 |
| `ERROR` | 出现错误 |
| `HELP` | 请求帮助 |
| `SKIP` | 跳过,已有其他 worker 处理 |
| `LOCK` | 获取锁 |
| `UNLOCK` | 释放锁 |
## 任务管理
新增任务:
```bash
skills/auto-tmux/scripts/swarm-state.sh task-add --id task-001 --text "检查 README 链接"
```
从文本文件批量导入任务:
```bash
cat > /tmp/tasks.txt <<'EOF'
- 检查 README 链接
- 运行 make test
- 汇总风险和下一步
EOF
skills/auto-tmux/scripts/swarm-state.sh task-import --file /tmp/tasks.txt --prefix batch
```
`task-import` 会跳过空行和 `#` 注释行,自动去掉行首 `- ``* `,并生成 `batch-001` 这类任务 ID。
声明任务依赖:
```bash
skills/auto-tmux/scripts/swarm-state.sh task-depend --id batch-002 --blocked-by batch-001
skills/auto-tmux/scripts/swarm-state.sh task-ready
```
`task-ready` 只列出状态为 `TODO` 且所有依赖都已经 `DONE` 的任务,适合 commander 给空闲 worker 分配下一步。
认领任务:
```bash
skills/auto-tmux/scripts/swarm-state.sh task-claim --id task-001 --owner "ai-hub:2.1"
```
领取下一条 `TODO` 任务:
```bash
skills/auto-tmux/scripts/swarm-state.sh task-next --owner "ai-hub:2.1"
```
`task-next` 会跳过依赖尚未完成的 `TODO` 任务;它与 `task-ready` 使用同一套 blocked-by 判断。
完成任务:
```bash
skills/auto-tmux/scripts/swarm-state.sh task-done \
--id task-001 \
--owner "ai-hub:2.1" \
--result "make test passed"
```
标记阻塞:
```bash
skills/auto-tmux/scripts/swarm-state.sh task-block \
--id task-001 \
--owner "ai-hub:2.1" \
--reason "等待用户确认 API key 配置"
```
标记失败:
```bash
skills/auto-tmux/scripts/swarm-state.sh task-fail \
--id task-001 \
--owner "ai-hub:2.1" \
--reason "make test failed"
```
查看任务:
```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
skills/auto-tmux/scripts/swarm-state.sh metrics
skills/auto-tmux/scripts/swarm-state.sh validate
skills/auto-tmux/scripts/swarm-board.sh --dir /tmp/ai_swarm --out /tmp/ai-swarm-board.md
```
`metrics` 会按任务状态、owner 和当前锁数量输出摘要,适合 commander 快速判断蜂群是否堵塞。
`validate` 会检查 `tasks.tsv` 表头、字段数量、重复任务 ID、非法状态、终态任务结果文件,以及锁目录中的 `owner` / `created_at`
`swarm-board.sh` 会把 `tasks.tsv``deps.tsv`、锁目录和最近状态日志渲染成 Markdown 看板,适合交接给 commander 或 reviewer。
## 锁管理
锁用于避免多个 worker 同时修改同一文件、目录或服务。
获取锁:
```bash
skills/auto-tmux/scripts/swarm-state.sh lock-acquire \
--name "README.md" \
--owner "ai-hub:2.1"
```
释放锁:
```bash
skills/auto-tmux/scripts/swarm-state.sh lock-release \
--name "README.md" \
--owner "ai-hub:2.1"
```
查看锁:
```bash
skills/auto-tmux/scripts/swarm-state.sh lock-list
```
清理过期锁前先演练:
```bash
skills/auto-tmux/scripts/swarm-state.sh lock-prune --older-than 3600 --dry-run
skills/auto-tmux/scripts/swarm-state.sh lock-prune --older-than 3600
```
锁使用 `mkdir` 创建目录,具备基本原子性。若锁归属不匹配,默认拒绝释放;确需人工回收时才使用 `--force`
`lock-prune` 用于 worker 崩溃或会话中断后的过期锁回收,必须先 `--dry-run` 确认目标。
## 报告
生成汇总报告:
```bash
skills/auto-tmux/scripts/swarm-state.sh report
```
报告包含:
- 任务列表。
- 当前锁。
- 最近状态日志。
报告前建议先运行 `validate`,避免把坏状态继续传给 commander 或 reviewer。
## 推荐协作流
1. commander 初始化状态目录。
2. commander 将任务写入 `tasks.tsv`
3. worker 获取文件或服务锁。
4. worker 用 `task-next``task-claim` 认领任务并写入 `START`
5. worker 执行任务,必要时用 `auto-tmux.sh record` 保留日志。
6. worker 完成后写入 `DONE` 和结果;无法继续时写入 `BLOCKED``FAIL`
7. commander 用 `report` 汇总状态,再用测试、diff、日志做验收。
## 安全边界
- `swarm-state.sh` 只管理状态,不直接控制 tmux pane。
- 真实发送命令仍必须走 `auto-tmux.sh send``auto-tmux.sh rescue`
- 状态文件默认在 `/tmp`,不保存密钥、Token、密码或私密项目内容。
- 锁只能降低冲突概率,不能替代 Git diff、测试和人工验收。