dsh-side-chat:DSH 右侧栏临时侧边对话

前言

在 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 地址则会自动追加。

安装后校验

  1. 重启 DSH(无 HMR 时配置在重启后生效)。
  2. 左侧打开有消息的会话,工具面板(/ 或工具入口)应出现「侧边对话」卡片;对话头部也有侧边栏图标(提示「在右侧栏打开侧边对话」)。
  3. 点开卡片,右侧出现侧栏页签,发一句话能收到回复即成功。

若卡片未出现:检查 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
羽毛球分组比赛记分
小程序二维码

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

小夜