Jack.CaMps(dsh-session-accordion):把 DSH 会话每轮交互收成一行

前言

在 DSH 桌面版里长时间对话时,聊天流会按轮次堆叠:提问、回答、思考与工具步骤各占一块。核心 UI 可以单独收起「工作过程」,但历史轮次仍占满纵向空间,切换会话或回看时很难一眼看清整段对话的骨架。社区里已有多种「折叠回合」类客户端插件,有的在答案之间做二级折叠、有的保留原生摘要而不限制同时展开的轮数。Jack.CaMps(npm 包名 dsh-session-accordion)走另一条路:每一轮整轮压成固定一行,且同一时间只允许一条展开,适合想先扫会话结构、再按需点开某一轮的场景。

这是什么

Jack.CaMps 是维护者 ayuanxx-max 发布的 DSH 客户端插件(分类:客户端)。它不修改 app.asar、不碰核心 UI 源码,只在 Web 渲染层叠加行为:Fold DSH chat turns into one line (time pill + question summary), keep only the latest open.

仓库地址:https://github.com/ayuanxx-max/Jack.CaMps
社区目录页:https://www.skillhub.cn/plugins/ayuanxx-max/Jack.CaMps(独立站点,与 DeepSeek / 幻方无官方从属关系)

当前 package 版本为 2.4.0,许可证 MIT。插件未发布到 npm,需按 README 在 profile 里做本地 link 安装。

核心功能

下面三项是 README 中明确写出的行为(与核心折叠、流式输出、滚动锚定互不接管):

  1. 历史轮次一行展示:每个已结束的交互折叠成固定一行,左侧为时间胶囊 MM-DD HH:mm,右侧为单行提问摘要(过长省略)。
  2. 只保留最近一次展开:进入会话、切换会话或出现新一轮时,自动收敛为「最后一轮展开、其余收起」。
  3. 手风琴式切换:点击折叠行展开该轮,并收起其它已展开轮;再点提问行可收回去。

执行过程(思考、工具调用、步骤)不随轮次展开而自动展开:DSH 在回答结束时会收起过程,只有单独点击「过程摘要」那一行才会展开。README 要求将设置里的 工作步骤收起时机 设为 回答结束后,插件才依赖这一前置。

效果示意(来自 README):

┌──────────────────────────────────────────────────────────┐
│ 10-28 13:12   把这批日志按时间排序、去重,然后…        › │   ← 折叠(一行)
├──────────────────────────────────────────────────────────┤
│ 10-28 12:58   帮我看下 esp32 的引脚冲突                  › │
├──────────────────────────────────────────────────────────┤
│ 你的提问(全文)                                          │   ← 展开(最近一次)
│ …回答正文…                                                │
│ ▸ 12 步 · 思考 8s · 工具 4 次(点开才展开)               │
└──────────────────────────────────────────────────────────┘

安装与启用

前置:DSH 桌面版(Web UI),已有一个可用 profile(默认 desktop)。

下面步骤摘自仓库 README(Windows PowerShell 示例;node_modules 与 package.json 路径中的 profile 名与本地一致即可)。

1、取得代码

git clone https://github.com/ayuanxx-max/Jack.CaMps.git
$repo = "<克隆下来的目录绝对路径>"

2、在 profile 里登记为本地包(junction,不复制文件)

$nm = "$env:USERPROFILE\.dsh\profiles\desktop\node_modules"
New-Item -ItemType Junction -Path "$nm\dsh-session-accordion" -Target $repo

3、编辑 profile 的 package.json

路径示例:%USERPROFILE%\.dsh\profiles\desktop\package.json

{
  "dependencies": {
    "dsh-session-accordion": "link:<repo 绝对路径>"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "dsh-session-accordion"
      ]
    }
  }
}

4、完全退出 DSH 再启动(改的是 profile 层,仅刷新网页无效)。

5、设置 → 对话 → 工作步骤收起时机 = 回答结束后。

README 说明:也可把仓库目录复制进 node_modules 再登记;junction 方式便于 git pull 后重启升级。

卸载(README):从 dependencies 与 dsh.profile.bundles 删除 dsh-session-accordion,删除 node_modules\dsh-session-accordion(junction 不会删源目录),重启 DSH。

典型用法与诊断

日常无需额外配置:安装并满足「回答结束后收起工作步骤」后,会话列表会按上述规则自动折叠与展开。

折叠行内的链接需先展开该轮再点击(README 已知限制)。

在页面 DevTools Console 可调用诊断函数,查看每一轮的 id / expanded / stamp / summary / items,便于在 DSH 升级后 DOM 变化时区分「分组失败」还是「时间取不到」:

__acReport()

工作原理(摘要)

插件以客户端形式挂载(dsh.client,platform: web,immediately: true),随 Web 应用加载一次。轮次按聊天流容器 [data-slot="conversation.chat.flow"] 下带 [data-chat-turn="<turnId>"] 的节点分组;折叠通过对非提问节点打 data-ac-hidden,提问行用伪元素绘制时间胶囊与摘要。状态按 turnId 存在内存 Map 中;MutationObserver 与 1.5 秒兜底巡检用于 React 重渲染后恢复状态。结构无法识别时插件不改动界面,仅在 console 输出 warn。

适用场景与注意

适合:长会话、多轮调试,希望一屏看到「时间 + 提问摘要」骨架,且只要一条轮次完全展开的用户。

与同类项目的取舍(README 表格):若需要「答案始终可见、不限制展开轮数」,可参考 dsh-auto-collapse 等;若需要「整轮压一行且手风琴」,用本项目。

务必注意:

  • 插件依赖 DSH 聊天面板内部 DOM 属性(如 data-chat-turn),属非公开契约,上游改版可能失效;失效时静默不动作。
  • 客户端插件在当前 DSH 进程权限下运行,安装前应自行阅读源码与 MIT 许可证,确认可接受后再 link 进 profile。
  • 时间优先来自 React fiber 上的 props.node.data.time;极少数节点无 time 时只显示摘要。

结尾

Jack.CaMps 把 DSH Web 会话的每一轮交互收成「时间胶囊 + 提问摘要」的一行,并强制只保留最新一轮展开,在不改核心的前提下节省纵向空间。安装与 bundle 名以 dsh-session-accordion 为准,完整说明见 GitHub README。

  • 目录页:https://www.skillhub.cn/plugins/ayuanxx-max/Jack.CaMps
  • GitHub:https://github.com/ayuanxx-max/Jack.CaMps
羽毛球分组比赛记分
小程序二维码

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

小夜