dsh-session-accordion

uitested: passnpmMIT

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.

下载量 / Downloads
773
依赖体积 / node_modules
0.05 MB
测试时间 / Tested
2026-11-07
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-session-accordion

Sandbox test results

StageResult
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

![awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin)

![dshbase](https://dshbase.com/zh/plugins/dsh-session-accordion/)

![license](LICENSE)

![release](https://github.com/ayuanxx-max/dsh-session-accordion/releases)

![stars](https://github.com/ayuanxx-max/dsh-session-accordion/stargazers)

30 秒理解:把 DSH 会话里每一轮对话折叠成一行(时间胶囊 + 问题摘要),只保留最新一条展开。纯客户端插件,不改核心。
兼容 DSH Desktop / Web;安装见下方「安装」,卸载见「卸载」。

会话折叠

分叉树排列

📖 [会话管理指南(折叠 + 分叉树组合用法)](docs/session-management-guide.md)

平台支持与路线图

平台 · 状态

Windows 11(DSH Desktop) · ✅ 稳定运行(当前版本)

Ubuntu · 🧪 测试中,尚未承诺稳定

macOS · 📋 计划中

修复与功能调整的优先级按评论 / 留言的反馈量排序——遇到问题请直接开 issue 或留言,
同类反馈越多越先修。欢迎提交你所在平台的环境信息。

相关插件

把 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

Links

GitHub · Homepage · npm

Same category