Superset Pane Layout
用 superset panes 可以为工作区的标签页和分屏窗格编写脚本。命令先发往主机,再由主机传给桌面应用,由桌面应用应用到用户正在查看的实时布局上。每次变更都立即可见,因此应当按用户的要求搭建布局,并清理自己打开的窗格。
建立控制接口
运行 superset schema 2>/dev/null | jq -re '.commands[] | select(.path==["panes"]) | .commands[].path[1]' || superset panes --help,并确认包含 list、split、new-tab、resize、equalize、move、swap、focus 和 close。panes 是 CLI 1.38.0 新增的功能。如果缺少,运行 superset update 后重新检查。应用自带的 CLI(~/.superset/bin/superset)只随桌面应用更新,所以如果它仍缺少 panes,更新应用才是解决办法。
确定工作区。在工作区内使用 $SUPERSET_WORKSPACE_ID;否则运行 superset workspaces list --local --json 并选择目标。
窗格位于桌面应用中。没有连接桌面应用的主机(独立运行的 superset start)没有窗格,较旧的桌面应用会返回 "This host is too old for superset panes"。遇到这两种情况应如实说明,而不是反复重试。
读取布局
superset panes list --workspace "$WS" --json
结果包含 activeTabId 和 tabs[]。每个标签页有 layout,即由 { type: "split", direction, ratio, first, second } 和 { type: "pane", paneId } 节点组成的分割树,还有扁平的 panes[],包含每个窗格的 kind(terminal、chat-v3、browser 等)、terminalId、active,以及其中运行的智能体及其状态。row 分割表示并排,column 分割表示上下堆叠;ratio 是第一个子节点的占比。
在工作区内,你正在运行的窗格就是 terminalId 等于 $SUPERSET_TERMINAL_ID 的那个:
ME=$(superset panes list --workspace "$WS" --json
| jq -r --arg t "$SUPERSET_TERMINAL_ID" '.tabs[].panes[] | select(.terminalId==$t) | .id')
变更布局
每条修改命令都会返回新的窗格或标签页 ID 以及完整的更新后布局,因此应基于其输出链式执行,而不是再次列出。用 --json | jq -r .paneId(或 .tabId、.terminalId)读取 ID;--quiet 不会把结果简化为单个 ID。
目标与命令
拆分窗格,在新的一半中打开新终端:panes split --workspace $WS --pane P --direction right|left|down|up [--command CMD]
打开带终端的标签页:panes new-tab --workspace $WS [--command CMD]
改为显示已有终端:在 split 或 new-tab 中加 --terminal <terminal-id>(不能与 --command 同用)
设置窗格在其分割中的占比:panes resize --workspace $WS --pane P --ratio 0.05–0.95
均分所有分割:panes equalize --workspace $WS [--tab T]
交换两个窗格,可跨标签页:panes swap --workspace $WS --pane A --with B
将窗格移到另一个窗格旁边:panes move --workspace $WS --pane P --to Q --direction right|left|down|up
将窗格移到独立标签页:panes move --workspace $WS --pane P --new-tab
将窗格及其标签页置于前台:panes focus --workspace $WS --pane P
关闭窗格:panes close --workspace $WS --pane P [--keep-terminal]
可依赖的行为:
只有 focus 会移动焦点。split 和 new-tab 添加窗格但不会让用户离开当前查看的内容;只有需要用户现在就看到新窗格时,才接着执行 focus。
--command 会把命令输入到新终端的 shell 中。命令退出后,其输出会留在提示符上方,因此一次性命令无需包装。需要持续刷新的显示需要自己的循环(while true; do clear; …; sleep 2; done)。
close 会结束窗格的终端,与应用中的关闭按钮一样。传入 --keep-terminal 可让长时间运行的进程在后台继续存活,之后用 --terminal 重新附加。
move 会关闭因此变空的标签页。
拆分总是将被拆分的窗格减半。反复拆分同一个窗格会得到 50/25/12.5 的占比;先构建树,再执行一次 equalize。
如果桌面应用未及时确认 split 或 new-tab,CLI 会保留它创建的终端并说明这一点。重试前先检查 panes list,否则重试会打开第二个窗格。
读取窗格内容
superset terminals read --local --workspace $WS --terminal <terminal-id> --json 返回终端窗格的屏幕文本,可确认命令已启动并显示其输出。传入 --local(或 --host <id>);不传时 CLI 会寻找云工作区。
布局示例
在用户窗格旁并排,测试放右边,监视器放其下方:
WS=$SUPERSET_WORKSPACE_ID R=$(superset panes split --workspace $WS --pane "$ME" --direction right --command 'npm test -- --watch' --json) TESTS=$(jq -r .paneId <<<"$R") superset panes split --workspace $WS --pane "$TESTS" --direction down --command 'npm run dev' --json >/dev/null superset panes resize --workspace $WS --pane "$ME" --ratio 0.6 --json >/dev/null
在新标签页中构建 N 个窗格的网格:打开标签页,为每一列向右拆分第一个窗格,为每一行向下拆分每一列,然后执行 equalize --tab。
清理
打开的窗格会保持打开,其终端会继续运行。工作完成时,或在重建布局之前,关闭自己创建的内容:记录创建的窗格 ID,并逐个执行 panes close。除非用户要求,否则不要关闭不是自己创建的窗格,也绝不要关闭你正在其中运行的窗格。