前言¶
在 DSH(DeepSeek Harness)里做长会话时,聊天流会按轮次堆叠:提问、回答、思考与工具步骤各占一块区域。想快速回顾「这一会话问过什么、顺序如何」,需要反复滚动;若多轮同时展开,一屏能扫到的信息更少。核心 UI 不会替你把「整轮交互」收成摘要行,也不会强制「同一时间只展开一轮」。
下面介绍社区客户端插件 dsh-session-accordion(维护者 ayuanxx-max):在渲染层把每一轮对话折叠成固定一行(时间胶囊 + 提问摘要),默认只展开最近一次交互;不修改 app.asar、不碰核心源码。插件已收录 awesome-dsh-plugin 与 dshbase,GitHub 仓库见 ayuanxx-max/dsh-session-accordion。
这是什么¶
dsh-session-accordion 是 DSH 的 客户端插件(dsh.client,platform: web,随 Web 应用加载)。它在聊天 transcript 上叠加三种行为:
- 每个历史交互整轮收起,折叠成一行:左侧时间
MM-DD HH:mm(浏览器时区)+ 单行提问摘要,过长省略。 - 只保留最近一次交互展开;打开会话、切换工作区/会话、产生新交互时,展开态重置到最新一条(此前手动展开的也会被收起)。
- 点击折叠行展开该轮并收起其它轮;再点提问行可收回去。
执行过程(思考、工具调用、步骤)不随「展开该轮」一起打开:需在核心设置里让过程在回答结束后收起,只有你单独点「过程摘要」行才会展开过程。这与「只把正文之间的步骤合成二级折叠、答案始终可见」类插件的取向不同;本插件优先 一屏看清会话骨架,按需展开整轮内容。
兼容 DSH Desktop / Web。README 中的平台路线图:Windows 11(DSH Desktop)为当前稳定验证环境;Ubuntu 测试中;macOS 计划中。修复优先级按 issue/留言反馈量排序。
核心功能¶
会话折叠(手风琴)¶
折叠行示意(来自 README):
┌──────────────────────────────────────────────────────────┐
│ 10-28 13:12 把这批日志按时间排序、去重,然后… › │ ← 折叠(一行)
├──────────────────────────────────────────────────────────┤
│ 10-28 12:58 帮我看下 esp32 的引脚冲突 › │
├──────────────────────────────────────────────────────────┤
│ 你的提问(全文) │ ← 展开(最近一次)
│ …回答正文… │
│ ▸ 12 步 · 思考 8s · 工具 4 次(点开才展开) │
└──────────────────────────────────────────────────────────┘
与分叉树插件组合¶
同作者提供 dsh-session-fork-tree,在侧边栏以树状排列分叉会话。仓库内另有 会话管理指南(折叠 + 分叉树组合用法),需要分叉与会话折叠一起用时可直接查阅。
实现要点(便于排查)¶
插件通过聊天流容器 [data-slot="conversation.chat.flow"] 与 [data-chat-turn="<turnId>"] 分组轮次;折叠状态按 turnId 存在内存,并用 MutationObserver 与定时巡检在 React 重渲染后恢复。若 DSH 升级导致 DOM 契约变化,插件会静默不动作并在 console 打出 warn,不会破坏界面——属已知限制。
安装与启用¶
插件以当前 DSH 进程权限在客户端运行;安装前建议浏览仓库源码与 MIT 许可证。
npm(README 推荐) 示例版本为 2.5.5(与仓库 package.json 中当前版本号可能不一致,安装时以你选用的 tag/版本为准):
# 桌面版(profile=desktop)
dsh plugin --profile desktop add dsh-session-accordion@2.5.5
# 或免全局安装
npx -y @deepseek-ai/dsh plugin --profile desktop add dsh-session-accordion@2.5.5
# Web UI(profile=web)
dsh plugin --profile web add dsh-session-accordion@2.5.5
安装后完全退出 DSH 再启动(profile 层改动,仅刷新网页无效)。
启用前置(README 明确要求):
- 打开 DSH 设置 → 对话。
- 将 工作步骤收起时机 设为 回答结束后,过程才会在回答结束时收起,与插件的展开逻辑一致。
卸载示例(桌面 profile):
dsh plugin --profile desktop remove dsh-session-accordion
源码目录安装、Release tarball、符号链接等方式见 GitHub README「安装」;离线或开发环境可按文档中的 scripts/install.sh / install.ps1 操作。
典型用法¶
- 安装并重启 DSH,确认「工作步骤收起时机」已设为回答结束后。
- 在同一会话中连续多轮提问;较早轮次应显示为单行(时间 + 摘要),最新一轮保持展开。
- 点击某一折叠行:该轮展开,其它已展开轮收起;再点该轮提问区域可折叠回去。
- 需要看某轮的工具/思考过程时,在该轮展开后,单独点击过程摘要行(与展开整轮无关)。
- 切换会话或工作区后,展开态应回到该会话的最新一轮。
诊断:在页面 DevTools Console 执行:
__acReport()
可查看每轮的 id / expanded / stamp / summary / items,用于区分「轮次分组失败」还是「时间取不到」。Linux 服务器时区多为 UTC 时,可在刷新前设置:
window.__dshAccordion = { timeZone: 'Asia/Shanghai' }
适用场景与注意¶
适合:长会话、多轮试错、需要纵向扫一遍「问过什么、何时问」而不必同时阅读所有回答全文;与分叉树插件组合管理复杂会话树。
注意:
- 依赖 DSH 聊天面板内部 DOM 属性(如
data-chat-turn),非公开契约,上游改版可能导致插件失效。 - 折叠行是自绘一行,行内链接需先展开该轮再点击。
- README 说明 package 尚未发布到 npm 时,需按文档的本地 link / tarball 等方式安装;若你使用的 DSH 渠道已提供上述
dsh plugin add命令,则以实际环境为准。 - 插件分类为客户端,不改核心;社区目录 skillhub.cn 为独立生态站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-session-accordion 把 DSH Web/Desktop 会话里每一轮交互收成一行摘要,并限制同时只展开一轮,便于在长 transcript 里保持可读骨架。需要安装命令、卸载、兼容性与同类插件对比时,以仓库 README 为准。