DeepSeek Harness (DSH) 是一个基于插件的系统。在构建智能体或 Agent 时,通常需要绑定特定的会话、工作目录和工具链。如果你只是想“随手问一句”,不需要复杂的 agent 循环或文件读写,需要一个轻量的、不干扰当前项目的聊天窗口。dsh-sidebar-chat 就是这样一个插件,它向 DSH 的右侧栏注册了一个原生页签,提供了与 DeepSeek 官网同款外观的交互界面。
安装¶
安装过程不依赖 dsh plugin add 命令,而是使用 profile 安装脚本。脚本会执行三件事:将包软链(或复制)进 profile 的 node_modules;在 profile 的 package.json 中记录 link: 依赖并挂载 bundle;清理旧版本可能留在 cordis.patch.yml 里的手写配置。
node tools/install-into-profile.mjs
安装完成后,profile 的 bundles 列表与 cordis.patch.yml 会被热重载,存盘几秒后刷新页面即可生效。
核心功能¶
1. 原生右侧栏页签¶
插件注册为右侧栏自己的页签类型“聊天”,与文件、终端、浏览器等页签并列。它有两个入口:右侧栏“+”菜单里的“聊天”胶囊,以及主输入框左侧的聊天气泡按钮(一键唤到前台)。
2. 外观与交互¶
界面完全复刻 DeepSeek 官网网页版的设计系统。
* 样式:跟随 DSH 的浅色/深色主题,气泡、芯片、输入卡片都使用同一套 token。用户消息为靠右的淡蓝气泡,助手回答直接落在页面上。
* 思考与搜索:支持“深度思考”和“联网搜索”两个独立芯片。深度思考芯片支持等级调节,联网搜索默认开启。
* 流式与折叠:支持流式输出,思考过程以折叠行形式展示,回答下方悬浮复制按钮。
3. 模型选择¶
模型列表直接来源于部署中真正可路由的供应商(通过 ctx.llm.listProviders/listModels/resolveModelInfo 获取)。模型卡片按供应商分组,并标注图片能力与上下文长度。
4. 文字与图片¶
- 输入:支持文字输入,
Enter发送,Shift+Enter换行。 - 图片:支持粘贴(
Cmd+V)、拖拽、文件选择四种方式。图片会先上传到 host 的临时文件夹,发送时才向框架换取可被模型读取的引用,不污染项目目录。
5. 回合小结¶
每次回答末尾会显示统计信息,格式为 输入 N · 输出 M tokens · 耗时 X 秒。该数据来自供应商的 usage 和框架记录的落盘时间戳。
数据与原理¶
数据存放¶
- 图片:原图存入系统临时目录
<os.tmpdir()>/dsh-sidebar-chat/files/,索引文件为同级index.json。插件会做 14 天未使用清理的兜底。 - 会话:会话与消息持久化在
$DSH_HOME/dsh-sidebar-chat/conversations/下,一个会话一个 JSON 文件,重启后保留。
技术细节¶
- 不绑定工作目录:插件不创建 DSH 会话,不设置 cwd,不读写会话工作区,只借用
llm和attachments两个框架能力。 - 依赖平台模块:界面渲染依赖平台内置模块
@deepseek-ai/dsh-client-ui-primitives(seed word)。为了保证 Markdown 渲染不报错,插件需补全labels(如code.copyLabel)。 - 纯文本模型:如果选了不支持图片的模型但发送了图,会提示“图片会被替换成占位文字”,而不是让模型假装没看见。
适用场景¶
适合需要在 DSH 环境中快速查询模型能力、调试提示词或进行纯文本对话,但又不想切换到浏览器或创建复杂智能体的场景。