# Dashboard:lazygit 式的多面板(0.17) 用户要求(2026-09-26):dashboard 改成 lazygit 那样的面板格式,显示更多信息,更好控制。 ## 1. 旧版的问题 0.15 的 dashboard 是上下两段:上面一张窗格表,下面一块随按键切换的视图(事件、消息、任务、屏幕、历史)。 - 同一时刻只能看一样东西:看收件箱就看不到屏幕,看任务就看不到窗格的事件。 - 能做的事只有管理排队消息,而且要先按 E 进"管理模式";给窗格发消息、改名、改模式、解卡、跳过去、关掉,都得退出去敲命令。 - 窗格只有模式、忙闲、收件数、在做什么;目录、程序、多久没输出、起了多久都看不到。 ## 2. 布局 ``` ┌─[1] Panes 3 · 1 busy · 2 queued ─┐┌─[0] %4 tester · ai · busy ── Screen │ Scrollback │ Events │ Detail ─┐ │ work ││ $1:@3.%4 claude /home/me/proj up 12m quiet 3s │ │> 0.1 %4 tester ai busy 2 3s ││ doing: "tests 3/10" working on #12 │ │ 0.0 %2 - - 0 1m ││──────────────────────────────────────────────────────────────── │ │ ops ││ (所选窗格此刻的屏幕,带颜色) │ └───────────────────────────────────┘│ │ ┌─[2] Inbox %4 · 2 ─────────────────┐│ │ │> #12 user 5s run the tests ││ │ │ #13 %lead 1s then report back ││ │ └───────────────────────────────────┘│ │ ┌─[3] Tasks ────────────────────────┐│ │ │ #12 running %4 2 steps run … ││ │ └───────────────────────────────────┘└─────────────────────────────────────────────────────────────────┘ s send r rename m mode R ready o go there x close Enter screen / filter ? keys q quit ``` - 左列三个面板:[1] 窗格(按会话分组)、[2] 所选窗格的收件箱、[3] 任务。右边 [0] 是主面板,四个标签:Screen(此刻的屏幕,带颜色)、Scrollback(连回滚)、Events(这个窗格的事件)、Detail(所选消息的全文与去向,或所选任务的每一步;读 `trace-message -J`、`show-task -J`,排好版:状态色块、谁发给谁、每一步的时间、正文与输出分开,任务按时间连成一列)。在 [2]、[3] 里移动光标,Detail 立刻跟着显示光标所在的那一条,不用回车;回到 [1] 时恢复原来的标签,手动切过的标签不动。 - 手机页面(`keepane web`)开着时,[1] 的标题加上 `· web N connected`:此刻连着几个(`web-status` 第一行的数)。 - pane 跑着 agent(`list-agents`)时,[1] 那一行最后一列不写程序名,写 agent 和它的花费、上下文(`claude $2.10 34%`);标题在 pane 数后面写所有 agent 的总花费;[0] 在 pid 那行下面多一行:agent、模型、花费、上下文、token、CPU、内存、工具次数、回复次数(重要的在前,窄了截掉的是后面)。 - 左列宽一半(30–64 列)。窗口窄于 70 列时只显示焦点所在的一侧。 - [1] 要一眼读懂: - 顶上一行(暗色,不随列表滚动)写出每列是什么:pane、name、mode、state、inbox、quiet、running。 - 空格子就是空,不放 `·`、`-`。 - 每列宽度按内容定。每一行都空的列整列省掉(没有 pane 起名;全是 `normal` 且在跑;没有排队消息)。 - 还放不下时,按 quiet、mode、inbox、name、state 的顺序去掉。最后一列(程序,或 agent 的花费和上下文)至少留 16 列:96 列终端的弹窗里也完整。 - 颜色只表达意思,只用 16 色 ANSI(跟着主题,深浅都清楚): - 状态:idle 绿、busy 黄、exited 红、typing(输入中)青、no-agent 和 unknown 暗色(来自 server 的 `#{pane_state}`);模式:`ai` 品红、`shell` 黄;排队数蓝色粗体;session 标题蓝色粗体; - agent 名品红、花费绿;上下文低于 60% 绿,60% 起黄,80% 起红; - 收件箱里等了 1 分钟以上的时间黄色,发件人青色,`from` 这类说明词暗色; - 面板标题编号蓝、其余粗体(面板没聚焦时边框暗,标题不暗);底行的键青色粗体,说明正常色。 - 选中的行反色,行内不叠加颜色。 - [0] 头部:先写人说的位置(`work:0.2`)、程序、目录,完整地址放在行末并暗色;`pid`、`up`、`quiet`、`doing:` 这类标签暗色,值正常色。 - 聚焦的面板边框加亮;底行是聚焦面板能用的键,或提示、输入框、确认框。 ## 3. 按键(lazygit 的习惯) | 键 | 作用 | |---|---| | Tab / Shift+Tab,1 2 3 0,h / l | 换面板 | | j / k,↑ / ↓ | 在列表里移动;在主面板里滚动 | | g / G,Home / End | 到列表的第一行 / 最后一行(窗格、收件箱、任务);主面板到顶 / 到底 | | [ / ] | 主面板换标签 | | PgUp / PgDn,`C-b` / `C-f`,`C-u` / `C-d` | 主面板翻页(`C-u` / `C-d` 半页);在 prefix v 的弹窗里 `C-b` 是前缀,按两次 `C-b C-b` 才交给 dashboard | | Enter | 窗格 → 主面板看屏幕;收件箱、任务 → 进到主面板滚动阅读(Detail 已随光标显示) | | / | 筛选窗格 | | ? | 全部按键 | | q,Esc | 退出(Esc 先取消输入框、确认框) | 窗格面板上:`s` 给它发消息(底行输入,Enter 发送)、`r` 改名、`m` 改工作模式(菜单)、`R` 解卡(`pane-ready -t`)、`o` 跳过去(`focus-pane`,在弹窗里就顺带关掉 dashboard)、`x` 关掉(`kill-pane`,10 秒内 `u`/`prefix u` 可撤销)。 收件箱面板上:`d` 删除、`K` / `J` 上下移、`t` 放到最前、`u` 撤销删除。 鼠标:点面板聚焦,点行选中,滚轮在指针所在的面板里滚。 ## 4. 安全 旧版"只看不动、要先按 E"的做法取消,换成按后果分级: - 可撤销、只影响元数据的(改名、解卡、跳过去、发消息、调顺序)直接做,底行说做了什么。 - 删除排队消息、关掉窗格、把窗格切到 `shell` 模式(从此收到的文字会被当命令执行)先弹确认框,`y` 才执行。删除有 `u` 撤销,关窗格有 undo-kill。 - dashboard 发出的命令只有 `QUERIES`(看)与 `ACTIONS`(做)两张表里的;测试逐键检查:不在表里的命令一条也发不出去,需确认的命令不经确认发不出去。 - 服务端的规则不变:从窗格里只能改自己窗格的模式——dashboard 在弹窗里跑,弹窗不属于任何窗格,所以能改任何窗格(与在窗格外敲命令相同)。 ## 5. 刷新 每秒(或按键后立即)问五样(第五样是 `web-status`,只取连接数):窗格表(`list-panes -a -F`,比旧版多了目录、pid、起始时间、最后输出时间、尺寸、退出码)、所选窗格的收件箱、任务表、主面板当前标签的内容。所选窗格按编号记住,窗格增减时不跳。 ## 后来加的 - Trace 标签页(0.47.0,验收第 164 条):所选窗格 agent 的每一轮,画成瀑布图(`trace-pane -J`)。 - Git 标签页(2026-10-31,用户要求):所选窗格目录的 git 情况:仓库路径、分支和上游(领先、落后几个提交)、改了哪些文件(计数,再列出前 15 个)、最近 40 个提交(哈希、多久以前、作者、说明、指向它的分支和标签)、最近用过的 8 个分支。目录不在仓库里时,显示两层文件树(文件夹在前;`node_modules`、`target` 这类生成目录不展开),最多 200 行。通过 ssh 连到别处的窗格,说明文件在那台机器上。dashboard 自己在本机运行 git 读取,不问服务器;从上往下读。 - System 列(2026-10-31,用户要求):窗口宽 150 列以上时,最左边多一列,宽 30,其余面板照原来的规则排在它右边。每秒读一次本机(和时钟动画用的同一组累计值,两次读数相隔至少 0.9 秒才算负载):CPU 总占用(条)、最近 24 秒的曲线(`hist`)、每个核(`core`)、内存(条,用了多少 / 总共多少)、交换区、每秒磁盘读写、每秒网络收发、温度、功率、电池、进程和线程数;系统给不出的就不显示。只在这一列显示时才读。