# @flyer103/dsh-side-chat 中文文档

规范地址：https://npmcn.com/package/%40flyer103/dsh-side-chat/

版本：0\.7\.1
npm 元数据更新时间：2026-11-06T09:18:44.734Z
中文译文更新时间：2026-11-15T08:48:26.861Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40flyer103/dsh-side-chat
原文对照：https://npmcn.com/package/%40flyer103/dsh-side-chat/?lang=original
项目主页：https://github.com/flyer103/dsh-side-chat
源码仓库：https://github.com/flyer103/dsh-side-chat

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：212 kB，8 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=22
- 运行依赖：0 个
- 首次发布：2026-10-18T14:30:40.884Z
- 最新版本发布：2026-11-06T09:18:44.545Z
- 近 30 天下载量：2070（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：10（近 12 个月 10 个）

## 中文简介

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

## 安装

```sh
npm install @flyer103/dsh-side-chat
```

也可以使用：`pnpm add @flyer103/dsh-side-chat`、`yarn add @flyer103/dsh-side-chat`、`bun add @flyer103/dsh-side-chat`

## README

# dsh-side-chat

给 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) Web GUI 用的**侧边会话**：从会话头部展开右侧边栏，添加 **侧边会话**（English 界面为 Side chat）tab，聊完关掉，主会话完全不受影响——但侧边会话用的是**同一个 agent、同一套工具，并且会真实修改同一工作区的文件**。

[English](https://npmcn.com/package/%40flyer103/dsh-side-chat/README.md) | 中文

[![CI](https://github.com/flyer103/dsh-side-chat/actions/workflows/test.yml/badge.svg)](https://github.com/flyer103/dsh-side-chat/actions/workflows/test.yml) [![Release](https://img.shields.io/github/v/release/flyer103/dsh-side-chat)](https://github.com/flyer103/dsh-side-chat/releases) [![npm](https://img.shields.io/npm/v/@flyer103/dsh-side-chat)](https://www.npmjs.com/package/@flyer103/dsh-side-chat) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://npmcn.com/package/%40flyer103/dsh-side-chat/LICENSE)

## 快速开始

```bash
# 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`；重复执行是安全的。

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

```bash
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](https://npmcn.com/package/%40flyer103/dsh-side-chat/docs/USAGE.md) — 完整语义（继承/隔离/修改/生命周期/安装/回滚/排障，英文）。
-   [docs/DESIGN.md](https://npmcn.com/package/%40flyer103/dsh-side-chat/docs/DESIGN.md) — 范围、阶段与对抗性推演。
-   [docs/CONTRACT.md](https://npmcn.com/package/%40flyer103/dsh-side-chat/docs/CONTRACT.md) — host 路由、右侧边栏 tab 集成与渲染契约。

## 仓库结构

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

## 卸载

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

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

## License

MIT

## 常见问题

### @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 和提交记录判断。

