@flyer103/dsh-side-chat

中文文档
0.7.1发布于 2026/11/06MITES Module零依赖近 30 天下载 2070

DSH侧式聊天:将当前会话分叉为能真正编辑文件的麻黄侧式谈话,而不会污染主语录.

中文使用文档
文档目录8 节
  1. 快速开始
  2. 它做什么
  3. 兼容性
  4. 已知限制
  5. 文档
  6. 仓库结构
  7. 卸载
  8. License

dsh-side-chat

给 DeepSeek Harness Web GUI 用的侧边会话:从会话头部展开右侧边栏,添加 侧边会话(English 界面为 Side chat)tab,聊完关掉,主会话完全不受影响——但侧边会话用的是同一个 agent、同一套工具,并且会真实修改同一工作区的文件。

English | 中文

CI Release npm License: MIT

快速开始

# npm(推荐)
dsh plugin --profile desktop add @flyer103/dsh-side-chat

# GitHub:默认分支,或固定到 tag
dsh plugin --profile desktop add github:flyer103/dsh-side-chat
dsh plugin --profile desktop add github:flyer103/dsh-side-chat#v0.7.1

# 本地路径(记录为 link: 依赖)
cd /path/to/dsh-side-chat
dsh plugin --profile desktop add "$(pwd)"

# 用 npm pack 打出的 tarball
dsh plugin --profile desktop add /absolute/path/flyer103-dsh-side-chat-0.7.1.tgz

--profile 用你实际运行的那个:Desktop 应用用 desktop,自己起的 web 进程用 web 或你的 profile 名。装进 desktop 时建议先退出 Desktop 应用(CLI 会等 profile 写锁),装完再打开;无论如何都要重启才生效。add 会自动把包追加进 profile 的 dsh.profile.bundles,不需要手工编辑 profile 的 cordis.patch.yml;重复执行是安全的。

也可以从本地仓库跑安装脚本:

node scripts/install.mjs --profile desktop            # 幂等;不会重启 DSH
node scripts/install.mjs --profile desktop --dry-run  # 只打印计划

然后重启 DSH,打开任意会话,从会话头部展开右侧边栏(「打开侧边栏」/「Open sidebar」),在边栏的引导页里点 「侧边会话」(English 界面显示 Side chat)卡片,侧边会话会作为该栏的一个原生 tab 打开。没有会话头部的专属侧边会话按钮,也没有浮层:入口就在右侧边栏的引导页(已开其它 tab 时,可用 tab 条上的「+」控件打开引导页);tab 打开后,状态栏上还有 「新建侧边会话」(English 界面显示 New side chat)按钮。发送第一条消息——该 tab 的侧边会话在首条消息发送时才创建,关闭该 tab 即销毁;收起侧边栏或切到别的 tab 只是暂停,不销毁;只打开 tab 不发送不产生任何会话或开销。每点一次引导页卡片、每按一次 tab 状态栏的「新建侧边会话」按钮,都会在同一分栏里再开一个侧边会话 tab,各自拥有独立的侧边会话,tab 标题按父会话编号(「侧边会话」「侧边会话 2」…;English 界面为 Side chat、Side chat 2…)。关闭其中一个侧边会话 tab 只销毁它自己,其它侧边会话和主会话都不受影响。

它做什么

  • 右侧边栏原生 tab:作为右侧边栏里的一个 tab 存在,没有会话头部的独立按钮、没有浮层。
  • 可同时开多个:同一个父会话可以并排开多个独立的侧边会话 tab,每个都是自己的临时侧边会话,tab 标题按父会话编号;可从引导页卡片或 tab 状态栏的「新建侧边会话」按钮再开一个。
  • 继承上下文:父会话已完成的轮次,加上主会话此刻正在做什么的实时快照;快照在该侧边会话创建时拍下。
  • 继承 agent:相同工作目录、preset 组合、工具、技能、模型路由、sandbox 模式与审批策略。
  • 真实改文件:write / edit / bash 的改动落在同一工作区,主会话能看到。
  • 用 @ 引用文件:在侧边会话输入框里输入 @ 会弹出当前工作区的路径菜单,选中后插入与主会话输入框完全相同的 @path 文本;引用只是文本,模型仍用自己的工具读取文件。选中目录会保留菜单继续下钻;已发送的用户气泡会把文件 / 目录引用渲染成 chip。
  • 隔离 transcript:侧边会话的对话不写主会话、不进会话列表、不进 subagent 目录。
  • 流式输出:assistant 文本、思考与工具调用在生成过程中逐 token 渲染(实时事件流);传输不支持流式时自动回退到轮询。
  • 显示自己的用量:composer 下方有一条细状态栏(位置对应 DSH 主输入框的底部 dock),显示这个侧边会话的总 token 数、缓存命中率,以及一个小的上下文占用圆环 + 百分比;悬停可看精确的未缓存输入 / 缓存读取 / 输出计数(提供方报告缓存写入时还会列出缓存写入)和近似的「~已用 / 窗口」值。侧边会话还没有用量样本时整行隐藏,新建侧边会话时重新计数。
  • 关闭即销毁:关闭某个 tab 时只 dispose 该 tab 的侧边会话,host 会尝试删除它的落盘产物;已关闭的侧边会话无法再打开,其它侧边会话和主会话都不受影响。收起侧边栏或切换 tab 只是暂停。

兼容性

  • 在 DSH 0.2.1-rc.2(Desktop profile,Web GUI)上验证:本版本在隔离的 DSH home 里用全新 web profile 起真实 dsh web 进程实测——插件启动、host 路由均有响应(含 SSE 路由的 JSON 回退)、client bundle 正常 serve;新增的 @file 路由由 host 路由单测覆盖,未在真实进程里复测。
  • 本包未声明 engines.dsh / DSH peer 依赖,因此安装时没有版本阻断;这与「已验证版本」是两件事——更新的 DSH 版本未经验证。
  • 仅 Web 平台(dsh.client.platform: web),没有 CLI/TUI 界面。
  • Node.js >= 22;插件本身是零依赖 ESM,不 import 任何 @deepseek-ai/*。
  • 界面文案跟随 DSH 语言设置(Settings → General → Language / 语言):内置中文与英文;其它语言回退到英文。技术细节——host 错误 message、路由、事件名与工具名——保持英文原文。

已知限制

  • 侧边会话 tab 内不呈现审批提示:侧边会话继承父会话的审批策略;父策略需要人工确认时,侧边会话会等待。要真实改文件,建议用 danger-full-access 这类不需要交互确认的策略。
  • tab 关闭后无法恢复:重新点引导页卡片或按「新建侧边会话」会开始一个新的侧边会话,agent 在下次发消息时才创建。
  • P1b 已设计未实现:模型选择器、GUI 重启后恢复侧边会话、tab 内审批呈现。
  • @ 补全依赖 host 的 file-reference provider,且当前只补全文件与目录:@会话 引用、/ 命令与技能、附件与拖拽都还没有进入侧边会话输入框。
  • 继承的上下文是创建时的快照,之后主会话的新消息不会推给已存在的侧边会话;每个侧边会话各有自己的快照。
  • 流式输出依赖可流式读取的 fetch 响应;如果页面传输会把响应整体缓冲(以「首帧未按时到达」判定),tab 会回退到 snapshot 轮询:运行中指示仍在,回复仍会在生成过程中按轮询粒度浮现。
  • 每个侧边会话的首条请求大小都约等于主会话的下一次请求(因为它带着继承历史),同时开 N 个就会把这份开销乘以 N。
  • 用量 dock 是近似值,且两类数字口径不同:token 总量与缓存命中率只统计这个侧边会话自己实际计费的请求——包括它首次请求重新发送的继承上下文——不包含父会话更早的请求;上下文占用出于同一原因取绝对值——继承的上下文确实在提示词里——但它不做 DSH 的 projected-token(surface delta)修正,因此可能比主会话的上下文条慢一步。dock 不显示轮次 / 步数 / tok/s,没有点开的详情弹窗,也不跟随 DSH「Performance & usage(性能与用量)」的详细 / 简洁偏好,内容固定。
  • 重新接上的侧边会话 tab 如果会话日志超过 snapshot 的 2000 条分页,dock 可能少算较早的用量;从第一条消息起就在看的 tab 不受影响,因为它逐条收到所有已提交事件。

文档

  • docs/USAGE.md — 完整语义(继承/隔离/修改/生命周期/安装/回滚/排障,英文)。
  • docs/DESIGN.md — 范围、阶段与对抗性推演。
  • docs/CONTRACT.md — host 路由、右侧边栏 tab 集成与渲染契约。

仓库结构

路径作用
lib/index.jshost 半部:路由、实时尝试累积与 SSE 事件流、fork seed、boundary 注入、按实例的 session registry、close/dispose
lib/client.jsclient 半部:右侧边栏 tab 类型 + 引导页入口,按 tab 实例的正文(流式消息区 + composer + 用量 dock)、编号 chip、新建按钮与 close handler
cordis.patch.ymlbundle patch:插入 dsh-side-chat 行
scripts/install.mjs本地仓库的幂等安装/卸载脚本
dsh.plugin.json社区约定的清单元数据;DSH 不读取(官方展示元数据来自 package.json 与可选 locale/*.json)
tests/node --test 单测

卸载

dsh plugin --profile desktop remove @flyer103/dsh-side-chat

然后重启 DSH。没有 transcript、schema 或工作区数据的迁移或删除;侧边会话本来就是临时的。

License

MIT

版本与发布记录

@flyer103/dsh-side-chat 共发布 10 个版本,首次发布于 2026/10/18;过去 12 个月发布了 10 个版本。

版本发布日期距今
0.7.1latest2026/11/069 天前
0.7.02026/10/2521 天前
0.6.02026/10/2125 天前
0.5.02026/10/2125 天前
0.4.12026/10/2026 天前
0.4.02026/10/2026 天前

关于 @flyer103/dsh-side-chat 的常见问题

@flyer103/dsh-side-chat 是什么?

DSH侧式聊天:将当前会话分叉为能真正编辑文件的麻黄侧式谈话,而不会污染主语录.

如何安装 @flyer103/dsh-side-chat?

在项目目录运行 npm install @flyer103/dsh-side-chat,或使用 pnpm add / yarn add / bun add。

@flyer103/dsh-side-chat 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/flyer103__dsh-side-chat 是否存在。

@flyer103/dsh-side-chat 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@flyer103/dsh-side-chat 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@flyer103/dsh-side-chat 可以商用吗?

@flyer103/dsh-side-chat 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@flyer103/dsh-side-chat 的下载量有多少?

根据 npm 官方下载统计,@flyer103/dsh-side-chat 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,070 次,日均约 69 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@flyer103/dsh-side-chat 还在维护吗?

最新版本 0.7.1 发布于 2026/11/06(9 天前);至今共发布 10 个版本,其中过去 12 个月发布了 10 个;首次发布于 2026/10/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。