dsh-session-monitor:在一个面板里并排监控多路 DSH 会话

前言

DeepSeek Harness(DSH)的主界面一次只展开一条对话。当你同时开多个 session 并行改代码、跑测试、等审批时,侧栏只能告诉你「某条会话在跑或在等」——具体问到哪一步、排队里还有什么 prompt,必须点进那条会话才能看见。多标签来回切,既慢也容易漏掉「等你点选分支」这类 pending 问题。

下面介绍社区客户端插件 dsh-session-monitor(维护者 icrefin)。它在左侧边栏 Plugins 下方增加 Session Monitor 入口,用网格卡片把活跃与近期用过的 root session 摊在同一块面板里:实时 transcript、待答问题、下一 turn 队列和 composer,不必离开当前视图也能介入任意一条会话。

这是什么

dsh-session-monitor 是 DSH 的 客户端(browser-only) 插件:只注册一条侧栏项和一个 main 面板,不挂 host 路由、工具或事件监听;所需数据都来自客户端已有的 session / workspace / UI 投影。

一句话定位:为每个被监控的 session 提供一张「迷你控制台」——你在不看该会话主视图时,仍能读流式 transcript、答 pending、发 prompt、停 turn、改权限与模型,并管理 next-turn 队列。

核心功能

侧栏入口与网格卡片

安装并重启后,在左侧 Plugins 下点击 Session Monitor,中央区域变为固定高度的网格(非整页滚动文档),每张卡片对应 catalog 里的一条 非空 root session(子 agent 行和侧栏里的 provisional New Session 行默认不进网格;工具栏刚创建的空白 session 除外,直到首轮对话赋予标题)。

每张卡片在「你当前未打开该会话」时仍提供:

  1. 实时 transcript:你的 prompt、助手流式文本、工具调用及结果、审批/重试提示;随 session 写入更新。展示为紧凑摘要(工具行一行摘要;用户/助手消息全文;窗口约 60 行,更久历史仍在主对话视图)。
  2. Pending 问题或审批:可在卡片内直接作答(InteractionCard)。
  3. Composer:向该 session 发送内容;若 session 正在运行,消息进入 next-turn inbox(无 Queue/Steer 切换)。
  4. Stop:运行中显示,通过该 session 的 cancel() 停止当前 turn。
  5. 可点击标题:跳转到该 session 的主对话(ctx.uiWorkspace.openSession(id);无导航服务时标题仅为普通标题)。
  6. 完成提醒:一轮运行结束且未读时显示绿色 done 点;点击卡片任意处恢复为灰色 idle,下次运行再亮。
  7. 权限 preset:卡片上切换 Read Only、Workspace Write、Full access 等(binding.session.command('/permission ')),无需打开主会话。
  8. Next-turn 队列:与 dock 一致的 Steer(运行中)、Edit、Discard。
  9. 模型:与 composer、/model 共用 model 目录,可在卡片同一行切换。
  10. 用量读数:token、prompt-cache 命中比例、上下文占用(与原生 composer footer 同源投影)。
  11. Remove:仅从监控网格移除;session 仍在侧栏运行,历史不受影响。

工具栏:密度、恢复与新建

  • Card budget:同时展示 3–16 张卡片(默认 9),针对 idle/running;正在等用户的 session 不会被 budget 裁掉。
  • Per row:每行 2–6 张,或 Auto(按约 260px 卡片宽度填满列);偏好写入浏览器 localStorage(键 dsh-session-monitor:prefs)。
  • Restore removed:把此前 Remove 的 session 全部加回网格。
  • New Session:选择 Workspace 后创建 session(ctx.sessions.create({ workspaceId })),监控页保持打开且不会重排已有卡片;有空间则新卡片在末尾,满格则占用最旧卡片格位。下拉默认最近使用 session 的 Workspace;末行 Choose a folder… 可调宿主文件夹选择器,将目录接纳为新 Workspace(ctx.workspaces.create({ path }))再建 session。取消选择器无变化;启动失败在工具栏显示宿主返回信息。

网格顺序(重要行为)

首次绘制时按 waiting → running → 最近活跃等规则 种子排序一次,之后顺序 冻结 并持久化到 localStorage:状态变化只更新卡片内容,不会因「刚变活跃」跳到前排;关闭面板或重启应用仍保持同一格位。新 session 占满时顶替最旧格,被挤出的卡片排到顺序尾部。没有任何控件会手动重排网格;缩小 budget 只是隐藏顺序尾部,放大后原格位恢复。

安装与启用

插件以 tarball 形式安装(README 未提供 dsh plugin add github:… 一类一键命令)。若你从发布包或本地源码目录获得 dsh-session-monitor,在目录内执行:

cd dsh-session-monitor
pnpm install
pnpm check
scripts/install.sh            # 构建、打包,并打印 tarball 路径

install.sh 会输出 tarball 路径。接着:

  1. 桌面 Electron profile:在应用内 Settings → Plugins 安装该 tarball(README 写明这是桌面 profile 受支持的路径)。
  2. CLI 管理的 profile:使用 dsh plugin --profile add <tarball路径>(将 <tarball路径> 换为 install.sh 打印的实际路径)。
  3. 重启应用。README 说明:向运行中的 profile 添加 bundle 时,会在下次启动导入。

安装前请自行查看仓库源码与 MIT 许可证;插件逻辑在浏览器端执行,但仍依赖你当前 DSH 进程与 profile 的权限边界——与任何 DSH 插件一样,只安装你信任的来源。

典型用法

  1. 并行开多条 session(例如一条跑测试、一条写 release notes、一条等分支选择)。
  2. 打开 Session Monitor,在网格里扫一眼:哪条是 waiting、哪条在 working、transcript 停在哪句。
  3. 对 waiting 卡片直接在面板里答 pending(例如选题 ( ) main / ( ) next),无需切标签。
  4. 对仍在跑的 session,在卡片 composer 里追加指令(进入 next-turn inbox);需要时用 Steer 调整队列里尚未发送的消息。
  5. 点击卡片标题进入该 session 主视图做长文阅读;或留在网格里用 Stop 中止 runaway turn。
  6. 卡片过多时用 Remove 隐藏不关心的 session,需要时用 Restore removed;调 Card budget / Per row 适配屏幕。

开发调试时,仓库提供 scripts/dev-profile.sh:隔离 profile 启动侧栏项并伺服 /plugins/dsh-session-monitor/client.js(见 README「验证结果」一节)。

适用场景与注意

适合谁

  • 经常在 DSH 里 多 session 并行、且会被 pending 审批打断的开发者。
  • 希望 少切对话页、但仍要看到各 session 最新几轮 transcript 和队列的人。

需要注意

  • 插件 仅客户端行为;不替代侧栏 session 列表,Remove 只影响监控网格。
  • 网格顺序冻结是产品设计:不要期待「最活跃 session 自动置顶」。
  • README 写明 未在自动化里验证实际像素(浅色/深色、窄宽度布局等),视觉细节需你在本机确认。
  • 修改行为前,维护者在仓库 HANDOFF.md 中记录了架构、数据源与坑点,二次开发应先读该文件。

结尾

dsh-session-monitor 把 DSH「一次只看一条对话」的限制补成「一屏多张 live 卡片」:transcript、pending、队列与 composer 集中在一个 Session Monitor 面板里,适合多路并行又不想到处点侧栏的场景。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜