DSH-Chatbot-Plugin
No description
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 20, 2026
- Updated
- Aug 20, 2026
Introduction
Workspace Chatbot
一个 Cherry Studio 风格的聊天机器人插件,作为 DeepSeek Harness(DSH)动态 Cordis 插件运行:入口在侧边栏底部(设置上方),点开后在右侧主区域打开聊天面板。
功能
- 多助手:每个助手独立配置名称、系统提示词、提供商、模型、思考深度、temperature、maxTokens
- 多对话:每个助手可开多个对话,对话继承助手设置,自动以首条消息命名
- 流式输出:后台生成 + 增量轮询,打字机效果(带闪烁光标)
- 硬盘持久化:助手、对话、历史全部落盘 JSON,进程重启自动恢复
- 清除上下文:两步确认,彻底清空当前对话
- Markdown 渲染:助手消息支持标题、粗体、斜体、行内代码、代码块、列表、引用、链接、表格
- LaTeX 数学:
$...$与$$...$$以等宽数学块样式显示(见"已知限制")
运行环境
本插件不是独立应用,依赖 DSH 的以下运行时机制:
- 动态 Cordis 插件:通过
cordis_define定义、cordis_run激活(详见下方"快速开始") - 运行时服务(Host 半边通过
ctx.get读取):llm—— 模型流式生成(listProviders/listModels/stream)fs—— 状态文件读写sandboxPolicy—— 部署工作区根(默认数据目录的候选之一)
- 浏览器端服务(Client 半边):
slots——sidebar.footer.action(入口)与shell.overlay(面板)timer—— 流式轮询间隔styles—— 样式注入
快速开始
- 打开 DSH Web GUI,在会话中调用
cordis_define:- 新插件:
plugin.kind = 'new',idPrefix填chatbot(或你喜欢的 3–6 位小写前缀) code.host填src/host.js的整个函数体(从return {到结尾的})code.client填src/client.js的整个函数体
- 新插件:
- 用返回的
pluginId/packageId调用cordis_run(首次用mode: 'run')。 - 在 UI 中批准该运行(Client 半边需要授权;勾选双勾可自动放行后续版本)。
- 刷新页面,点击侧边栏底部(设置图标上方)的
🤖 Chatbot即可使用。
配置
所有部署相关配置集中在 src/host.js 顶部的 CONFIG 对象:
| 配置项 | 默认值 | 说明 |
|---|---|---|
dataDir | '' | 状态文件目录(绝对路径)。留空时自动选择:部署工作区根的 .chatbot/,再退回当前目录的 .chatbot/。建议填本机固定数据目录,如 '/home/you/.dsh' |
fileName | 'chatbot-state.json' | 状态文件名 |
defaultTemperature | 1 | 新助手默认 temperature(Cherry Studio 风格) |
defaultMaxTokens | '' | 新助手默认 maxTokens;空字符串 = 不发送该参数(由模型自定) |
数据存储
状态保存在 dataDir/chatbot-state.json(或自动选定的候选路径),格式:
{
"assistants": [
{
"id": "a1",
"name": "默认助手",
"systemPrompt": "你是一个乐于助人的 AI 助手。…",
"provider": "",
"model": "",
"reasoningEffort": "",
"temperature": 1,
"maxTokens": ""
}
],
"conversations": [
{ "id": "c1", "assistantId": "a1", "title": "新对话",
"messages": [ { "role": "user", "text": "你好" } ] }
],
"seqA": 1,
"seqC": 1
}
删除该文件即回到全新状态。
已知限制
- LaTeX 不排版成公式:
$...$/$$...$$显示为等宽数学块,而不是 KaTeX 排版效果。动态插件无法引入第三方库(无打包器、无import),真公式渲染需要产品级支持。 - 流式是轮询近似:Host 与 Client 之间只有单次往返 RPC,因此打字机效果靠 120ms 轮询模拟,而非原生 SSE/WebSocket。
- 侧边栏均分依赖 cordis 插件:入口与 cordis 插件并排各占一半宽度的 CSS 用
:has()命中 cordis 的 DOM(data-cordis-badge)。如果你的部署没有 cordis 插件,可删除src/client.js中该段 CSS,并将.dsh-cb-layer的flex: 1 1 0改回flex: none; width: 100%。 - 界面文案为中文:UI 字符串硬编码在
src/client.js中,如需其他语言请自行替换。