From a9a68eda3e5e0b7b58017e9bd6b1fc57863427bb Mon Sep 17 00:00:00 2001 From: tukuaiai Date: Tue, 19 May 2026 03:26:58 +0800 Subject: [PATCH] feat: skills - inspect auto-tmux panes --- skills/auto-tmux/SKILL.md | 1 + .../references/ai-swarm-collaboration.md | 1 + skills/auto-tmux/references/automation.md | 2 ++ skills/auto-tmux/scripts/README.md | 1 + .../auto-tmux/scripts/auto-tmux-smoke-test.sh | 2 ++ skills/auto-tmux/scripts/auto-tmux.sh | 33 +++++++++++++++++++ 6 files changed, 40 insertions(+) diff --git a/skills/auto-tmux/SKILL.md b/skills/auto-tmux/SKILL.md index 8c4ee35..a438f54 100644 --- a/skills/auto-tmux/SKILL.md +++ b/skills/auto-tmux/SKILL.md @@ -64,6 +64,7 @@ tmux list-panes -a -F '#S:#I.#P #{pane_current_command} #{pane_title}' **读取指定 pane 最近输出** ```bash +skills/auto-tmux/scripts/auto-tmux.sh inspect -t :. -n 40 skills/auto-tmux/scripts/auto-tmux.sh capture -t :. -n 120 ``` diff --git a/skills/auto-tmux/references/ai-swarm-collaboration.md b/skills/auto-tmux/references/ai-swarm-collaboration.md index 893d56f..e863548 100644 --- a/skills/auto-tmux/references/ai-swarm-collaboration.md +++ b/skills/auto-tmux/references/ai-swarm-collaboration.md @@ -83,6 +83,7 @@ skills/auto-tmux/scripts/auto-tmux.sh topology --session ai-hub ```bash target="$(tmux list-panes -t ai-hub:worker1 -F '#S:#I.#P' | head -n 1)" +skills/auto-tmux/scripts/auto-tmux.sh inspect -t "$target" -n 40 skills/auto-tmux/scripts/auto-tmux.sh capture -t "$target" -n 120 ``` diff --git a/skills/auto-tmux/references/automation.md b/skills/auto-tmux/references/automation.md index 19f57a6..1d00a8a 100644 --- a/skills/auto-tmux/references/automation.md +++ b/skills/auto-tmux/references/automation.md @@ -17,6 +17,7 @@ |:---|:---|:---| | `doctor` | 检查 tmux、脚本、资产、session 健康状态 | 只读诊断 | | `topology` | 列出 session/window/pane 拓扑 | 只读 | +| `inspect` | 输出单个 pane 元信息和最近输出 | 默认脱敏,只读 | | `capture` | 读取指定 pane 最近输出 | 默认脱敏,可保存到文件 | | `send` | 向指定 pane 发送文本或按键 | 先打印上下文,危险文本需 `--force` | | `broadcast` | 向指定 session 全部 pane 发送文本或按键 | 必须显式 session,支持 `--dry-run` | @@ -111,6 +112,7 @@ skills/auto-tmux/scripts/swarm-dispatch.sh --role worker --target "$target" --ta ```bash target="$(tmux list-panes -t ai-hub:worker1 -F '#S:#I.#P' | head -n 1)" +skills/auto-tmux/scripts/auto-tmux.sh inspect -t "$target" -n 40 skills/auto-tmux/scripts/auto-tmux.sh send -t "$target" --text "make test" --enter ``` diff --git a/skills/auto-tmux/scripts/README.md b/skills/auto-tmux/scripts/README.md index 2c7779c..dc9d803 100644 --- a/skills/auto-tmux/scripts/README.md +++ b/skills/auto-tmux/scripts/README.md @@ -28,6 +28,7 @@ skills/auto-tmux/scripts/auto-tmux.sh doctor --session ai-hub target="$(tmux list-panes -t ai-hub:worker1 -F '#S:#I.#P' | head -n 1)" # 读取指定 pane 最近 80 行 +skills/auto-tmux/scripts/auto-tmux.sh inspect -t "$target" -n 40 skills/auto-tmux/scripts/auto-tmux.sh capture -t "$target" -n 80 # 发送命令并回车 diff --git a/skills/auto-tmux/scripts/auto-tmux-smoke-test.sh b/skills/auto-tmux/scripts/auto-tmux-smoke-test.sh index ba7bc84..f4f9426 100755 --- a/skills/auto-tmux/scripts/auto-tmux-smoke-test.sh +++ b/skills/auto-tmux/scripts/auto-tmux-smoke-test.sh @@ -44,6 +44,8 @@ commander_target="$(tmux list-panes -t "$SESSION:commander" -F '#S:#I.#P' | head worker_target="$(tmux list-panes -t "$SESSION:worker1" -F '#S:#I.#P' | head -n 1)" "$AUTO_TMUX" capture -t "$commander_target" -n 10 >/tmp/auto-tmux-smoke-capture.txt +"$AUTO_TMUX" inspect -t "$commander_target" -n 10 >/tmp/auto-tmux-smoke-inspect.txt +grep -q 'pane inspect' /tmp/auto-tmux-smoke-inspect.txt "$AUTO_TMUX" broadcast --session "$SESSION" --text "pwd" --enter --dry-run >/tmp/auto-tmux-smoke-broadcast.txt "$AUTO_TMUX" send -t "$worker_target" --text "echo AUTO_TMUX_SMOKE_OK" --enter "$AUTO_TMUX" wait -t "$worker_target" --pattern "AUTO_TMUX_SMOKE_OK" --timeout 10 >/tmp/auto-tmux-smoke-wait.txt diff --git a/skills/auto-tmux/scripts/auto-tmux.sh b/skills/auto-tmux/scripts/auto-tmux.sh index a00c18b..5922cd3 100755 --- a/skills/auto-tmux/scripts/auto-tmux.sh +++ b/skills/auto-tmux/scripts/auto-tmux.sh @@ -15,6 +15,7 @@ Usage: auto-tmux.sh help auto-tmux.sh doctor [--session NAME] auto-tmux.sh topology [--session NAME] + auto-tmux.sh inspect -t TARGET [-n LINES] [--no-redact] auto-tmux.sh capture -t TARGET [-n LINES] [--save FILE] [--no-redact] auto-tmux.sh send -t TARGET (--text TEXT | --key KEY) [--enter] [--clear] [--force] [--dry-run] auto-tmux.sh broadcast --session NAME (--text TEXT | --key KEY) [--enter] [--clear] [--force] [--dry-run] @@ -32,6 +33,7 @@ Target format: Examples: auto-tmux.sh doctor --session ai-hub auto-tmux.sh topology + auto-tmux.sh inspect -t -n 40 auto-tmux.sh capture -t -n 80 auto-tmux.sh send -t --text "make test" --enter auto-tmux.sh broadcast --session ai-hub --text "pwd" --enter --dry-run @@ -209,6 +211,36 @@ cmd_topology() { fi } +cmd_inspect() { + local target="" + local lines=40 + local no_redact="0" + while [[ $# -gt 0 ]]; do + case "$1" in + -t|--target) target="${2:-}"; shift 2 ;; + -n|--lines) lines="${2:-}"; shift 2 ;; + --no-redact) no_redact="1"; shift ;; + -h|--help) usage; exit 0 ;; + *) die "unknown inspect option: $1" ;; + esac + done + + require_tmux + require_target "$target" + printf '# pane inspect\n\n' + tmux display-message -pt "$target" 'target=#{session_name}:#{window_index}.#{pane_index}' + tmux display-message -pt "$target" 'pane_id=#{pane_id}' + tmux display-message -pt "$target" 'window=#{window_name}' + tmux display-message -pt "$target" 'command=#{pane_current_command}' + tmux display-message -pt "$target" 'pid=#{pane_pid}' + tmux display-message -pt "$target" 'path=#{pane_current_path}' + tmux display-message -pt "$target" 'title=#{pane_title}' + tmux display-message -pt "$target" 'in_mode=#{pane_in_mode}' + tmux display-message -pt "$target" 'size=#{pane_width}x#{pane_height}' + printf '\n## recent output\n\n' + capture_print "$target" "$lines" "$no_redact" +} + cmd_broadcast() { local session="" local text="" @@ -584,6 +616,7 @@ main() { help|-h|--help) usage ;; doctor) cmd_doctor "$@" ;; topology) cmd_topology "$@" ;; + inspect) cmd_inspect "$@" ;; capture) cmd_capture "$@" ;; send) cmd_send "$@" ;; broadcast) cmd_broadcast "$@" ;;