DeepSeek Harness Embed
unlistedby Dongchen Xu/dsh
在 Obsidian 右侧栏原生使用 DeepSeek Harness 智能体:管理本地 dsh web 服务,支持会话新增/切换/归档、模型与思考强度切换、拖拽笔记作为对话上下文。
DeepSeek Harness Embed(Obsidian 插件)
把 DeepSeek Harness(DSH)的智能体对话以原生聊天面板的形式放在 Obsidian 右侧栏:插件管理本地 dsh web 服务,通过 DSH 官方 HTTP/WebSocket 协议直接对话——会话管理、模型与思考强度切换、拖拽文档进对话,全部原生实现,不依赖 iframe。
特性
- 💬 原生右侧栏聊天:消息流式输出,思考过程可折叠查看,工具调用折叠为小行
- 🗂️ 会话管理:新增 / 切换 / 归档对话(归档走 DSH 官方
workspace.archiveSession) - 🎛️ 模型与思考强度:实时读取模型目录(provider/model),一键切换,思考强度(Off/High/Max 等)随模型联动
- 📎 拖拽文档进对话:从 Obsidian 左侧文件列表拖入笔记,作为本次对话的上下文(也支持命令「把当前笔记附加到 DSH 对话」)
- 🖥️ 服务管理:自动启动/复用本地
dsh web(端口 3080 已有实例则直接连接),状态栏显示状态
安装
前置要求
-
安装 Node.js(≥ 18)。
-
全局安装 DeepSeek Harness CLI:
npm install -g @deepseek-ai/dsh
安装插件
把本仓库的 obsidian-dsh 目录复制到你的 vault(文件夹名必须与 manifest.json 的 id 一致,即 obsidian-dsh):
<你的库>/.obsidian/plugins/obsidian-dsh/
其中必须包含 main.js、manifest.json、styles.css。然后在 Obsidian 设置 → 第三方插件中启用,重启 Obsidian(或禁用再启用插件)。
从源码构建
cd obsidian-dsh
npm install
npm run build # 产出 main.js
工作区
插件以当前打开的 Obsidian 仓库(vault)作为 DSH 的工作区域:
- 打开面板时,自动选择 cwd 为 vault 目录的最近会话;没有则自动创建(并确保 DSH 中存在一个以 vault 路径为根的工作区
workspace) - 会话下拉框只显示当前 vault 工作区内的对话,其他工作区(如 Harness Web 界面里的其他目录)的会话不会混进来
- 「➕ 新对话」创建的会话同样挂在 vault 工作区下,DSH 智能体的工作目录即 vault 根目录,可直接读写你的笔记
- 面板头部显示 📁 vault 文件夹名(悬停可看完整路径)
响应式布局
- 面板较窄(<340px)时保留会话切换(下拉框 + 新建/归档)+ 对话区 + 输入框,隐藏工作区标签、状态文字、模型/思考强度等非必要控件
- 面板够宽时完整显示:会话切换、新对话/归档、模型与思考强度选择全部可见
- 输入框高度 88px 起、可上下拖拽调整、随内容自动增高(最高 240px),完整显示提示文字
使用
- 左侧栏点击机器人图标,或
Ctrl+P→「打开 DeepSeek Harness 对话(右侧栏)」。 - 面板结构:
- 顶部:会话下拉框(切换)、➕ 新对话、🗄 归档当前对话、服务状态
- 中部:对话消息(用户右侧蓝色,助手左侧,思考过程折叠,工具调用小字)
- 底部:模型选择 ▾、思考强度 ▾、拖入文档后的附件 chips、输入框(Enter 发送 / Shift+Enter 换行 / 生成中按钮变"停止")
- 拖拽文档:从左侧文件列表把笔记拖到面板底部,会以 chip 显示;发送时文件内容自动作为上下文附在消息前。也可
Ctrl+P→「把当前笔记附加到 DSH 对话」。 - 新对话默认以 vault 目录作为工作目录(
cwd),DSH 可直接读写你的笔记库。
命令
| 命令 | 作用 |
|---|---|
| 打开 DeepSeek Harness 对话(右侧栏) | 打开/聚焦聊天面板 |
| 启动 / 停止 / 重启 DSH 服务 | 服务生命周期 |
| 把当前笔记附加到 DSH 对话 | 附加当前打开笔记到输入框 |
| 复制当前笔记路径 | 复制路径便于粘贴 |
| 在系统浏览器中打开 DSH | 打开完整 Web 界面 |
工作原理
- 插件用 Node 的
http/net直接与 DSH 通信(绕过浏览器 fetch 的 CORS/混合内容限制):- unary 调用:
POST /api/<method>,信封{type:"client-request", rpcId, method, payload} - 事件流:
/api/events.mux是 WebSocket 端点(HTTP 会返回 426 要求升级),插件内置轻量 RFC-6455 客户端读取消息事件(不协商压缩、不带 Origin,可过信任栅栏)
- unary 调用:
- 消息流:
session.prompt(mode queue)→ mux 推送user/message、assistant/chunk(text/reasoning 增量)、assistant/message(最终文本)、turn/start|end - 会话:
session.list/session.create(cwd=vault)/session.history/workspace.archiveSession - 模型:
session.models/session.selectModel(provider、model、reasoningEffort)
常见问题
面板显示"服务未启动":确认 dsh --version 可用;打开插件设置页看「环境检测 / 测试连接」;若 3080 已被占用且开启了「复用已运行的服务」,插件会直接连接已有实例。
端口冲突:设置里把端口改为 0 自动挑选空闲端口。
拖拽不生效:从左侧"文件列表"拖入,拖入后输入框上方应出现文件名 chip;再输入指令发送即可。
看不到思考过程:模型不支持或思考强度为 Off 时无思考块;有思考时会以「思考过程」折叠显示。
安全说明
- 只监听
127.0.0.1,不暴露到局域网。 - DSH 服务可执行本机命令(这是它的设计能力),请勿把监听地址暴露给不可信网络。
License
MIT
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.