feat: skills - add auto-tmux shell completion

This commit is contained in:
tukuaiai
2026-05-19 04:16:06 +08:00
parent 02f0416808
commit b0026e08ea
10 changed files with 83 additions and 4 deletions
+2
View File
@@ -17,6 +17,7 @@ scripts/
├── swarm-assign.sh # 生成 ready task 到 worker pane 的分配建议
├── swarm-health.sh # 汇总只读健康检查报告包
├── record-summary.sh # 汇总 pipe-pane 录制日志
├── completion.bash # Bash completion
├── safety-check.sh # 发送/粘贴/分发前的 payload 安全预检
├── render-swarm-prompt.sh # commander/worker/reviewer 提示词渲染
├── swarm-dispatch.sh # 渲染并可选下发蜂群提示词
@@ -40,6 +41,7 @@ scripts/
- 分配建议脚本只读任务和 pane 拓扑,不 claim 任务、不发送 prompt。
- 健康检查脚本只读 tmux 与 swarm state,失败项写入报告,不做自动修复。
- 录制摘要脚本只读 record 日志,输出默认脱敏,不修改日志源文件。
- completion 文件只能定义 shell completion,不执行 tmux 写操作。
- 安全预检脚本只能读取文本或文件,不控制 tmux,不写状态目录。
- 状态脚本只能写入显式状态目录,不保存密钥、Token、密码或私密项目内容。
- 自测脚本必须创建独立临时 tmux session,并在退出时清理。
+4
View File
@@ -13,6 +13,7 @@
- [`swarm-assign.sh`](./swarm-assign.sh) - 根据 ready tasks 和 worker pane 生成只读分配建议。
- [`swarm-health.sh`](./swarm-health.sh) - 汇总 doctor、topology、scan、validate、metrics、board 和 assign。
- [`record-summary.sh`](./record-summary.sh) - 汇总 `record start` 产生的 pane 日志,生成复盘摘要。
- [`completion.bash`](./completion.bash) - Bash completion,补全 `auto-tmux.sh``swarm-state.sh` 子命令。
- [`safety-check.sh`](./safety-check.sh) - 发送、粘贴或分发前检查危险命令、敏感信息和过大 payload。
- [`render-swarm-prompt.sh`](./render-swarm-prompt.sh) - commander、worker、reviewer 提示词渲染。
- [`swarm-dispatch.sh`](./swarm-dispatch.sh) - 渲染提示词并可选发送到指定 pane,默认只写文件。
@@ -74,6 +75,9 @@ skills/auto-tmux/scripts/swarm-health.sh --session ai-hub --swarm-dir /tmp/ai_sw
# 汇总 pane 录制日志
skills/auto-tmux/scripts/record-summary.sh --dir /tmp/auto-tmux-records --out /tmp/auto-tmux-record-summary.md
# 启用当前 shell 的补全
source skills/auto-tmux/scripts/completion.bash
# 初始化蜂群状态并添加任务
skills/auto-tmux/scripts/swarm-state.sh init --dir /tmp/ai_swarm
skills/auto-tmux/scripts/swarm-state.sh task-add --id task-001 --text "检查 README 链接"
@@ -13,6 +13,7 @@ SWARM_BOARD="$SCRIPT_DIR/swarm-board.sh"
SWARM_ASSIGN="$SCRIPT_DIR/swarm-assign.sh"
SWARM_HEALTH="$SCRIPT_DIR/swarm-health.sh"
RECORD_SUMMARY="$SCRIPT_DIR/record-summary.sh"
COMPLETION="$SCRIPT_DIR/completion.bash"
SAFETY_CHECK="$SCRIPT_DIR/safety-check.sh"
SWARM_DISPATCH="$SCRIPT_DIR/swarm-dispatch.sh"
SESSION="auto-tmux-smoke-$$"
@@ -52,6 +53,7 @@ bash -n "$SWARM_BOARD"
bash -n "$SWARM_ASSIGN"
bash -n "$SWARM_HEALTH"
bash -n "$RECORD_SUMMARY"
bash -n "$COMPLETION"
bash -n "$SAFETY_CHECK"
bash -n "$SWARM_DISPATCH"
+57
View File
@@ -0,0 +1,57 @@
# Bash completion for auto-tmux helper scripts.
_auto_tmux_complete_words() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local prev="${COMP_WORDS[COMP_CWORD-1]}"
local subcommands="help doctor topology inspect capture send paste broadcast rescue scan record snapshot hub cleanup wait"
local common_opts="-h --help --session -t --target -n --lines --dir --out --pattern --dry-run --force"
if [[ "$COMP_CWORD" -eq 1 ]]; then
COMPREPLY=($(compgen -W "$subcommands" -- "$cur"))
return 0
fi
case "$prev" in
-t|--target)
if command -v tmux >/dev/null 2>&1; then
local targets
targets="$(tmux list-panes -a -F '#S:#{window_index}.#{pane_index}' 2>/dev/null || true)"
COMPREPLY=($(compgen -W "$targets" -- "$cur"))
fi
;;
--session)
if command -v tmux >/dev/null 2>&1; then
local sessions
sessions="$(tmux list-sessions -F '#S' 2>/dev/null || true)"
COMPREPLY=($(compgen -W "$sessions" -- "$cur"))
fi
;;
--dir|--out)
COMPREPLY=($(compgen -d -- "$cur"))
;;
*)
COMPREPLY=($(compgen -W "$common_opts" -- "$cur"))
;;
esac
}
_swarm_state_complete_words() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local subcommands="init log status task-add task-import task-list task-depend task-ready task-next task-claim task-done task-block task-fail task-reopen lock-acquire lock-release lock-list lock-prune report metrics validate"
local common_opts="-h --help --dir --id --text --file --prefix --status --owner --target --message --blocked-by --result --reason --name --force --older-than --dry-run"
if [[ "$COMP_CWORD" -eq 1 ]]; then
COMPREPLY=($(compgen -W "$subcommands" -- "$cur"))
return 0
fi
COMPREPLY=($(compgen -W "$common_opts" -- "$cur"))
}
complete -F _auto_tmux_complete_words auto-tmux.sh
complete -F _auto_tmux_complete_words ./auto-tmux.sh
complete -F _auto_tmux_complete_words skills/auto-tmux/scripts/auto-tmux.sh
complete -F _swarm_state_complete_words swarm-state.sh
complete -F _swarm_state_complete_words ./swarm-state.sh
complete -F _swarm_state_complete_words skills/auto-tmux/scripts/swarm-state.sh
@@ -97,6 +97,9 @@ for script in "${scripts[@]}"; do
run_gate "bash syntax: ${script##*/}" bash -n "$script"
done
[[ -f "$script_dir/completion.bash" ]] && pass "completion file: skills/auto-tmux/scripts/completion.bash" || fail "missing completion.bash"
run_gate "bash syntax: completion.bash" bash -n "$script_dir/completion.bash"
run_gate "auto-tmux help" "$script_dir/auto-tmux.sh" help
run_gate "swarm-state help" "$script_dir/swarm-state.sh" help
run_gate "swarm-brief help" "$script_dir/swarm-brief.sh" --help
@@ -124,6 +127,7 @@ require_contains "$skill_dir/SKILL.md" "scripts/swarm-board.sh"
require_contains "$skill_dir/SKILL.md" "scripts/swarm-assign.sh"
require_contains "$skill_dir/SKILL.md" "scripts/swarm-health.sh"
require_contains "$skill_dir/SKILL.md" "scripts/record-summary.sh"
require_contains "$skill_dir/SKILL.md" "scripts/completion.bash"
require_contains "$skill_dir/SKILL.md" "scripts/safety-check.sh"
require_contains "$skill_dir/SKILL.md" "scripts/swarm-dispatch.sh"
require_contains "$skill_dir/references/index.md" "automation.md"
@@ -138,6 +142,7 @@ require_contains "$script_dir/README.md" "swarm-board.sh"
require_contains "$script_dir/README.md" "swarm-assign.sh"
require_contains "$script_dir/README.md" "swarm-health.sh"
require_contains "$script_dir/README.md" "record-summary.sh"
require_contains "$script_dir/README.md" "completion.bash"
require_contains "$script_dir/README.md" "safety-check.sh"
require_contains "$script_dir/AGENTS.md" "validate-auto-tmux.sh"
require_contains "$script_dir/AGENTS.md" "swarm-dispatch.sh"
@@ -147,6 +152,7 @@ require_contains "$script_dir/AGENTS.md" "swarm-board.sh"
require_contains "$script_dir/AGENTS.md" "swarm-assign.sh"
require_contains "$script_dir/AGENTS.md" "swarm-health.sh"
require_contains "$script_dir/AGENTS.md" "record-summary.sh"
require_contains "$script_dir/AGENTS.md" "completion.bash"
require_contains "$script_dir/AGENTS.md" "safety-check.sh"
if [[ -x "$repo_root/skills/auto-skill/scripts/validate-skill.sh" ]]; then