前言¶
在 DSH 里,主会话是一条连续、会被持久化、并影响后续每一步的上下文。如果你只是想在当前任务旁边问一句「这个函数做了什么」,或在侧栏读几个文件再回答,却把一大段解释或半成品推测写进主历史,后面每次请求都会背着这些噪音。fork 会话能隔离,但会占会话列表;子代理的结果还会回传主会话。
下面介绍维护者 Aixineiar 的客户端插件 dsh-side-chat(npm 包名 @aixineiar/dsh-side-chat):在右侧栏开一条一次性侧边对话,打开瞬间继承主会话已提交日志的快照,回答只留在侧栏,不写回主会话。三种能力边界——只回复、只读、完全继承——落在工具注册与宿主实现层,而不是靠提示词自律。
这是什么¶
dsh-side-chat 是 DSH 的 Host + Client 插件(非独立应用),分类上属于客户端扩展:主界面左侧仍是主会话,右侧多一个页签 侧边 · <主会话标题>,顶栏显示「上下文截至 <时间>」。
- 继承:打开时复制主会话已提交日志(含正在运行那一轮已完成的步骤),对被切断的工具调用做合成补齐。
- 独立:独立 Agent、独立模型选择、独立历史;主会话后续进展不会自动同步到侧栏(用的是打开那一刻的快照)。
- 一次性:关闭页签即销毁 Agent,删除日志与目录,无回收站、不可恢复。
许可:MIT。开发与验证所用 DSH 版本为 0.2.2-rc.1(engines.dsh 声明 ^0.2.2-rc.1);其他版本未在资料中验证。
三种模式怎么选¶
打开侧边对话时选择模式,默认 只读 read,选择保存在浏览器 localStorage。工具面板「侧边对话」卡片右侧 ⌄ 可切换;对已打开的侧栏会话会按新模式重新裁剪工具。
只回复 reply |
只读 read(默认) |
完全继承 full |
|
|---|---|---|---|
| 可用工具 | 无 | 只读名单(默认 12 项,与当前部署工具集取交集) | 与主会话一致 |
| 写文件 / 执行命令 | 不存在 | 不存在 | 可以(受宿主权限与沙箱约束) |
| 适合 | 纯问答、一句结论 | 读代码 / 查历史后回答 | 在侧栏试改、验证命令 |
只回复:宿主对会话调用 tools.restrict 摘掉全部可掩码工具,请求不带工具 schema;另有 tools.guard 兜底拒绝漏网调用。适合基于继承历史的推理,不能读盘上的新文件。
只读:默认名单包括 read、read_image、glob、grep、lsp、session_search、session_trace、session_event_read、session_event_search、session_event_trace、web_search、web_fetch。每步消息只允许 1 次 只读工具调用。收到修改请求时输出「修改建议 · 待主会话执行」,可用那一步的读工具确认目标。
完全继承:工具与主会话相同;遇到修改请求先给计划,只问一次「在本侧边会话执行,还是回主会话执行?」。选本会话则按计划执行;选回主会话则输出建议块并停止写操作。资料明确警告:此模式能写文件、能跑命令,不确定时先用只读。
同一请求「把 src/utils.ts 里的 parseDate 改成支持 ISO 字符串」:只回复/只读不会改文件(只读可先读文件再给建议);完全继承按计划询问后,选本会话才会在工作区落地改动。
安装与启用¶
插件必须由 DSH 加载,并通过 profile 的 bundle 列表启用。
前置条件¶
| 项 | 要求 |
|---|---|
| DSH | 0.2.2-rc.1(资料中的开发与验证版本) |
| Node.js | ≥ 20 |
| pnpm | 安装依赖时使用(DSH 桌面版通常已自带) |
| 主会话 | 左侧须已打开正在运行的主会话,否则提示「主会话未运行」 |
方式 A:按包名安装(推荐)¶
在 DSH 侧边栏 插件(Plugins) 页点「添加插件」,输入:
@aixineiar/dsh-side-chat
底层通过 pnpm 从 npm 安装;因包声明了 dsh.bundle,装完后会自动把该包名追加到 profile 的 dsh.profile.bundles。插件管理器安装前会读 engines.dsh,不满足则拒装。
等价命令行:
cd <DSH_HOME>/profiles/<profile>
pnpm add @aixineiar/dsh-side-chat
命令行安装后需手动把包名写入该 profile 的 package.json,并保证 bundles 顺序(补丁优先级)在 @deepseek-ai/dsh-base 与 @deepseek-ai/dsh-web-app 之后,例如:
{
"dependencies": { "@aixineiar/dsh-side-chat": "^1.0.0" },
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"@aixineiar/dsh-side-chat"
]
}
}
}
方式 B:GitHub 仓库地址¶
cd <DSH_HOME>/profiles/<profile>
pnpm add "github:Aixineiar/dsh-side-chat"
命令行安装时同样要把 @aixineiar/dsh-side-chat 加入 dsh.profile.bundles;在插件管理器里粘贴 git 地址则会自动追加。
安装后校验¶
- 重启 DSH(无 HMR 时配置在重启后生效)。
- 左侧打开有消息的会话,工具面板(
/或工具入口)应出现「侧边对话」卡片;对话头部也有侧边栏图标(提示「在右侧栏打开侧边对话」)。 - 点开卡片,右侧出现侧栏页签,发一句话能收到回复即成功。
若卡片未出现:检查 dsh.profile.bundles、profile 下 node_modules/@aixineiar/dsh-side-chat 是否存在,并确认已重启。
卸载:pnpm remove @aixineiar/dsh-side-chat,从 bundles 删除对应行,先手动关闭侧栏页签,再重启 DSH。
典型用法¶
入口
- 工具面板 →「侧边对话」卡片;
- 对话头部侧边栏按钮。
常用操作
| 动作 | 说明 |
|---|---|
| 提问 | 页签底部输入框;不走子代理运行时,回答不回主会话 |
| 切模式 | 卡片 ⌄ 菜单 |
| 切模型 | 输入框下方;只影响本条侧栏对话,不改全局默认 |
| 停止 | 输入框停止按钮 |
| 以最新快照新开 | 页签顶栏;用主会话最新快照新开并关闭当前侧栏对话(丢弃当前侧栏内容) |
场景对照(资料中的表格)
- 只想弄清报错含义、要一句总结 → 只回复。
- 「读这三个文件再回答」→ 只读(注意每步一次只读调用)。
- 在同上下文里试改小函数、跑一次命令验证,且不想打断主会话主线 → 完全继承(并明确本会话执行还是回主会话)。
需要保留侧栏输出时,关闭页签前自行复制;关闭即删除,无法继续。
实现要点(为何能「不靠提示词自律」)¶
插件分 Host(Node,随 DSH 主进程)与 Client(Web)两半。模式语义的唯一来源是 prompt.js 的 MODES 表:名单、拒绝文案、系统提示里保留的工具说明段均由此生成。tools.js 负责掩码策略;只读模式还会按映射表剥掉「请求里已不存在的工具」的说明段,避免说明书与 schema 不一致。
打开侧栏时的流程概要:复制日志 → 标记快照边界 → 补齐被切断的工具调用 → 按模式裁剪工具 → 注入边界消息。
适用场景与注意¶
适合:主会话正在跑长任务时,旁路问代码、旁路读文件、或在受控模式下试改;需要继承「刚才聊过的那个文件」但不污染主历史。
不适合:希望侧栏对话关闭后还能找回;希望侧栏自动跟上主会话最新消息(侧栏是打开瞬间快照)。
安全与权限:完全继承模式下插件以当前 DSH 进程权限运行,可写工作区、可执行命令;沙箱与策略由宿主决定。安装前宜查看 GitHub 仓库 源码与 MIT 许可证。资料中的「安全」章节未在抓取片段中展开,细节以仓库 README 为准。
生态说明:DSH 采用「一切皆插件」的扩展方式;社区目录 SkillHub 插件页 是独立收录站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
经过上面的步骤,你可以在主会话旁开一条继承快照、却不写回主历史的右侧栏对话,并按只回复 / 只读 / 完全继承划定工具边界。查阅收录信息与文档:
- 目录页:https://www.skillhub.cn/plugins/Aixineiar/dsh-side-chat
- GitHub:https://github.com/Aixineiar/dsh-side-chat