dsh-session-accordion
Chat turn accordion: every interaction folds into one row with a time pill and question summary, only the newest turn stays open, and switching sessions or starting a new turn resets the open state; the execution process opens only on its own click.
Install
dsh plugin --profile web add dsh-session-accordion
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
DSH 会话交互折叠功能 · DSH Session Turn Accordion





30 秒理解:把 DSH 会话里每一轮对话折叠成一行(时间胶囊 + 问题摘要),只保留最新一条展开。纯客户端插件,不改核心。
兼容 DSH Desktop / Web;安装见下方「安装」,卸载见「卸载」。
会话折叠
分叉树排列
📖 [会话管理指南(折叠 + 分叉树组合用法)](docs/session-management-guide.md)
平台支持与路线图
平台 · 状态
Windows 11(DSH Desktop) · ✅ 稳定运行(当前版本)
Ubuntu · 🧪 测试中,尚未承诺稳定
macOS · 📋 计划中
修复与功能调整的优先级按评论 / 留言的反馈量排序——遇到问题请直接开 issue 或留言,
同类反馈越多越先修。欢迎提交你所在平台的环境信息。
相关插件
- dsh-session-fork-tree —— 分叉会话以树状排列在侧边栏
- awesome-dsh-plugin —— DSH 插件精选列表
把 DSH Web 会话里的每一次交互压成一行,只保留最近一次展开;点提问行展开,执行过程另行单独点开。
Fold every interaction in a DSH Web chat into a single line and keep only the latest one open. Click a question row to expand it; the execution process opens only when you click its own header.
[中文](#中文) · [English](#english)
中文
这是什么
一个 DSH(DeepSeek Harness)客户端插件。它不修改 app.asar、不碰核心 UI 源码,只在渲染层做三件事:
1. 每个历史交互整轮收起,折叠成固定一行:左侧时间胶囊 MM-DD HH:mm + 单行提问摘要(超出省略)。
2. 只保留最近一次交互展开;打开任何会话、切换工作区/会话、产生新交互,都会把展开态重置到最近一条(之前手动展开的也会被收起)。
3. 点折叠行 → 该轮展开,同时把其它已展开的轮收起;再点提问 → 收回去。
执行过程(思考、工具调用、步骤)不跟着展开:核心本身在回答结束时会收起过程,只有你单独点「过程摘要」那一行才会展开。
效果
┌──────────────────────────────────────────────────────────┐ │ 10-28 13:12 把这批日志按时间排序、去重,然后… › │ ← 折叠(一行) ├──────────────────────────────────────────────────────────┤ │ 10-28 12:58 帮我看下 esp32 的引脚冲突 › │ ├──────────────────────────────────────────────────────────┤ │ 你的提问(全文) │ ← 展开(最近一次) │ …回答正文… │ │ ▸ 12 步 · 思考 8s · 工具 4 次(点开才展开) │ └──────────────────────────────────────────────────────────┘
安装
npm(推荐)
# 桌面版(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 再启动;卸载:
dsh plugin --profile desktop remove dsh-session-accordion
以下为源码方式(开发 / 离线环境):
前置:能跑 DSH Web UI 的宿主 —— Windows / macOS 桌面版,或 Linux 上的 dsh web。profile 名随宿主不同:桌面版默认 desktop,dsh web 默认 web,自定义 profile 用你自己的名字。
Windows(PowerShell)
git clone https://github.com/ayuanxx-max/dsh-session-accordion.git $repo = (Resolve-Path .\dsh-session-accordion).Path $nm = "$env:USERPROFILE\.dsh\profiles\desktop\node_modules" New-Item -ItemType Junction -Path "$nm\dsh-session-accordion" -Target $repo
Linux / macOS(bash)
git clone https://github.com/ayuanxx-max/dsh-session-accordion.git
repo="$(cd dsh-session-accordion && pwd)"
profile="${DSH_PROFILE:-web}" # 桌面版改成 desktop
mkdir -p "$HOME/.dsh/profiles/$profile/node_modules"
ln -sfn "$repo" "$HOME/.dsh/profiles/$profile/node_modules/dsh-session-accordion"
符号链接必须是绝对路径:相对路径在 profile 目录变化后会失效。
也可以一条命令完成(含 package.json 备份与合并):bash scripts/install.sh --profile web --apply。
Windows 对应:powershell -ExecutionPolicy Bypass -File scripts\install.ps1 -Profile desktop -Apply。
方式 B:直接装 Release 包(无符号链接,Linux 下最省事)
# pnpm 会把这枚 tarball 复制进 profile,不依赖符号链接 / junction dsh plugin --profile web add /path/to/dsh-session-accordion-2.5.3.tgz # 再把 "dsh-session-accordion" 加进 dsh.profile.bundles,重启 DSH
升级时下载新 tarball 再执行一次即可,不需要 git pull。
登记到 profile(三种系统相同)
// ~/.dsh/profiles/<profile>/package.json
{
"dependencies": {
"dsh-session-accordion": "link:/absolute/path/to/dsh-session-accordion"
},
"dsh": {
"profile": {
"bundles": ["dsh-session-accordion"]
}
}
}
4. 完全退出 DSH 再启动(profile 层改动,刷新网页无效)。
5. 设置 → 对话 → 工作步骤收起时机 = 回答结束后(插件依赖这个前置,过程才会自动收起)。
复制进node_modules也能用,但链接方式升级最省事:git pull后重启即可。
卸载
1. 从 package.json 的 dependencies 与 dsh.profile.bundles 中删掉 dsh-session-accordion。
2. 删掉链接:Windows Remove-Item node_modules\dsh-session-accordion;Linux/macOS rm ~/.dsh/profiles/<profile>/node_modules/dsh-session-accordion(只删链接,不动源码)。
3. 重启 DSH。
工作原理
关键点 · 说明
挂载点 · 客户端插件(dsh.client,platform: web,immediately: true),随 Web 应用加载一次,天然覆盖所有工作区与会话
轮次分组 · 聊天流容器 [data-slot="conversation.chat.flow"] 下,每个渲染节点带 [data-chat-turn="<turnId>"];同 turnId 归为一轮
提问识别 · 轮内包含 class 以 _bubble 结尾的元素(用户/steering 气泡共用)的节点
过程识别 · data-chat-flow-kind="turn-process" 的节点,其内部 button[aria-expanded] 是核心原生折叠开关
折叠方式 · 给整轮除提问外的节点打 data-ac-hidden(display:none),提问行用伪元素画时间胶囊与摘要,原内容 visibility:hidden
状态 · 按 turnId 存在内存 Map;未知轮次默认「最后一轮展开」,因此切换会话、历史回看都自动收敛
时间 · 优先读 React fiber 上的 props.node.data.time(不受悬停影响),退回原生时钟文本,都没有就不显示
自愈 · MutationObserver + 1.5 秒兜底巡检,React 重渲染后重新贴状态
设计取向:只叠加,不侵入。核心的折叠状态、流式输出、滚动锚定都不接管;结构认不出时插件什么都不做,只在 console 打一条 warn。
诊断
页面 DevTools Console:
__acReport()
输出每一轮的 id / expanded / stamp / summary / items。结构变化(DSH 升级后 DOM 改名)时,看这个能立刻定位是「分组失败」还是「时间取不到」。
兼容性
平台 / 引擎 · 状态 · 说明
Windows(DSH 桌面版,Electron/Chromium) · ✅ 主力验证 · 本轮
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::6,最后更新 2026-11-04