dsh-session-cards 插件介绍:把 DSH 会话铺成卡片桌布

前言

DSH(DeepSeek Harness)的理念是「一切皆插件」,但默认的会话视图偏列表式,同时盯多条会话时来回切换、翻找某次工具调用结果都比较费劲。下面介绍的客户端插件 tom143tc/dsh-session-card(仓库内标题写作 dsh-session-cards,维护者 tom143tc)把会话做成一张张卡片,铺在会话详情画布上,支持拖动、缩放、最小化、最大化,并可把任意一张卡片弹出成原生独立窗口。它只依赖 DSH 的公开契约,按能力分级降级,不白屏、不抛错。

这是什么

一句话定位:在会话画布上开一块卡片桌布,把多个会话并排铺开,用于多会话并行查看与快速切换。插件当前版本 0.4.3,要求宿主 DSH >= 0.2.1-rc.2,许可证 MIT,已在 macOS + DSH NEXT Desktop(0.2.2)与 dsh web(0.2.1-rc.2)上实测。

核心功能

三种布局

布局 行为
网格 卡片占 1–4 × 1–4 格;拖到空位落位,拖到已占格交换;拖边缘/角连续缩放,松手吸附到格
宫格 均分铺满:≤9 张 3×3,10–12 张 3×4;窄窗(<720px)退 2 列
自由 绝对定位,卡片可任意移动、叠放;拖四边/四角缩放(左/上边缘向外生长)

卡片内容

  • 渲染真实会话记录:用户气泡、助手正文(粗体、行内代码),工具调用行只在卡片最大化时显示。
  • 每张卡片显示标题、状态色点、工作区、相对时间;对话条数随卡片尺寸变化。
  • 已过滤 DSH 注入的上下文块(runtime context、技能目录、压缩摘要等),不会把注入文本当成对话展示。

卡片内发消息

  • 默认只显示最后一行输入框;鼠标移入卡片才浮出输入条,Enter 发送、Shift+Enter 换行,中文输入法选词不误发。
  • 发送走插件 host 路由调用宿主的 sessionController.prompt,不切换当前会话;成功后清空草稿并刷新该卡片的对话。

卡片操作

按钮 作用
− 最小化到画布底部 dock,点击还原
⧉ 弹出为原生独立窗口
⤢ / ⤡ 最大化铺满画布 / 还原(最大化时 Esc 也可退出)
✕ 从桌布移除(不删除会话)

原生浮窗

  • 插件自建 Electron 管家进程,只通过公开 webServer/connection 通信,不碰 desktop 私有 API。
  • 原生标题栏,可拖动、可缩放;默认 520×420,多开时按 +28px 级联。
  • 记住每个窗口的位置和尺寸;拖回主窗口自动收回;同一会话去重;最多 8 个窗口。
  • 默认不置顶,需要时点浮窗里的「📌 置顶」。

主题

支持 light / dark / system 跟随宿主;输入条、按钮、卡片文字都提供明暗两套色值。

安装与启用

桌面端 / dsh web(GitHub)

安装命令如下,两条命令分别对应桌面 profile 与 web profile:

dsh plugin --profile desktop add github:tom143tc/dsh-session-card
# 或
dsh plugin --profile web add github:tom143tc/dsh-session-card

安装后需要完全退出并重启 DSH NEXT;使用 dsh web 的则重启进程并刷新页面。该路径已在 dsh 0.2.1-rc.2 上实测通过(安装 0.4.3),桌面端 0.2.2 直接运行同一份代码。

本地开发安装

从本地目录安装时使用如下命令,路径必须是绝对路径:

dsh plugin --profile desktop add file:/absolute/path/to/dsh-session-card

原生浮窗的前置条件

浮窗依赖本机可执行的 Electron,插件按以下顺序查找:

  1. 环境变量 DSH_CARDS_ELECTRON 指向的可执行文件
  2. macOS:~/.dsh/electron/Electron.app/Contents/MacOS/Electron
  3. Windows / Linux:同名目录下的对应可执行文件

找不到时弹出会返回 NO_ELECTRON,卡片桌布本身不受影响。

典型用法

  1. 打开任意会话,点击画布顶部页签 卡片桌布。
  2. 点 + 当前会话 把当前会话加进桌布(上限 12 张)。
  3. 从左侧会话列表把会话拖进画布也可以加卡。
  4. 切换 网格 / 宫格 / 自由 换布局;自动排列 按更新时间/运行中优先重排。
  5. 悬停卡片:右上出现操作按钮,底部浮出输入条,可在卡片内直接发消息。
  6. 点 ⧉ 弹出原生窗口;在浮窗里点「回到画布」,或直接把窗口拖回主窗口,即可收回。

数据、隐私与降级

插件的数据落点如下表:

数据 位置
桌布布局(卡片、布局、跨度/矩形、最大化) 宿主 localStorage 的 dsh-session-cards/board/v1
上次手动调整的卡片尺寸 localStorage 的 dsh-session-cards/default-span/v1
浮窗管家信息 / 窗口位置 / 错误日志 ~/.dsh/dsh-session-cards/(JSON 权限 0600)

会话内容为只读(GET /plugins/dsh-session-cards/transcript),不写入宿主存储;发消息只经过宿主公开的 sessionController.prompt。卡片上限 12 是数据层硬限制。

兼容降级分五级:

级别 触发条件 表现
L0 conversation.view 可用 卡片桌布页签(完整功能)
L1 页签不可用、shell.overlay 可用 右侧 560px 降级浮层
L2 前两者不可用、conversation.session.header.actions 可用 会话头部按钮打开浮层
L3 会话目录不可读 只读模式,禁用拖拽/发送
L4 以上都不可用 不注册任何 UI,写 compat-report.json 并在设置页说明原因

已知限制

  • 卡片上限 12 张;宫格在窄窗下会退成 2 列。
  • 自由布局允许卡片重叠(这是它的用途,不是 bug)。
  • 轮次/Token 摘要只在宿主提供 projectionValues.sessionStats 时显示,多数会话没有。
  • 原生浮窗只在 macOS 实测,Windows / Linux 未验证。
  • 工具调用行只在最大化时显示。

适用场景与注意

适合需要同时跟踪多条会话、在画布上并排查看和切换的场景,尤其是习惯了 DSH 会话画布、希望扩展成卡片式工作区的用户。

两点需要注意:一是插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证(MIT);二是安装路径依赖 dsh plugin 命令和网络可达的 GitHub 仓库。社区目录 site 是独立站点,与 DeepSeek / 幻方无官方从属关系,不等同于官方应用商店。

开发与自测

插件源码分纯函数层与浏览器侧:

src/lib/       纯函数:布局计算(layout)、桌布模型(board)、能力探测(caps)
src/client/    浏览器侧:ui.js(渲染与交互)、apply.js(探测与挂载)
index.js       host 侧:prompt / transcript / popout 路由
popout/        Electron 管家(原生窗口)
scripts/       build-client.mjs
test/          node:test 用例

本地自测与打包命令如下:

node --test test/            # 纯函数测试(layout / board / caps)
node scripts/build-client.mjs  # 把 src/lib + src/client 内联成 client.js
npm pack --dry-run           # 检查发布内容

结语

tom143tc/dsh-session-card 的价值在于把多会话查看从「来回切换」变成「一桌卡片」:三种布局覆盖规整摆放与自由排布,卡片内可读可发,必要时还能弹出原生窗口。当前版本 0.4.3(相对 0.4.2 仅改 engines.dsh,代码未变),0.4.2 已用 LOCK.md + releases/0.4.2/SHA256SUMS 锁定。更多信息见目录页与仓库:

  • 目录页:https://www.skillhub.cn/plugins/tom143tc/dsh-session-card
  • GitHub:https://github.com/tom143tc/dsh-session-card
羽毛球分组比赛记分
小程序二维码

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

小夜