dsh-notify
baka-world
DeepSeek Harness desktop notification plugin (notify-send / D-Bus)
PROJECT TOPICS
PROJECT README
中文 | English
DeepSeek Harness 的桌面客户端(Electron + TypeScript)。
本项目遵循自定义许可协议(见 LICENSE),核心条款:
@tencent-connect/qqbot-nodejs、Electron 等)遵循各自许可证,详见下文「参考与致谢」。%APPDATA%/DeepSeek Harness Desktop),永远不会进入安装包或提交到仓库。%APPDATA% 下的配置与壁纸(deleteAppDataOnUninstall = false)。从 GitHub Releases 下载,三种形态任选:
| 形态 | 文件 | 说明 |
|---|---|---|
| 安装版(推荐) | DeepSeek-Harness-Desktop-Setup-*.exe | NSIS 安装程序,双击安装,自动创建开始菜单与桌面快捷方式,可选安装目录 |
| 便携版 | DeepSeek.Harness.Desktop-*.win.zip | 解压即用,免安装,适合 U 盘携带 |
| 源码版 | 克隆仓库 npm install && npm start | 自行构建 |
安装版卸载时保留用户配置与壁纸(不会删除 %APPDATA% 数据);如需彻底清理请手动删除 %APPDATA%/DeepSeek Harness Desktop。
系统要求:Windows x64、Node.js 18+(仅在桌面端需要托管拉起 harness 时使用)。 提示:先运行
npx @deepseek-ai/dsh web并配置好模型密钥,再打开桌面端,体验最佳。
📖 完整安装、配置、手机端与 QQ 机器人使用步骤见 实操指南(汉英双语)。
本项目在设计与实现中参考、依赖并致谢以下开源项目的贡献:
| 项目 | 贡献 | 许可 |
|---|---|---|
| deepseek-ai/deepseek-harness | 核心智能体运行时与 Web UI;桌面端直接实现其 HTTP RPC 协议(dsh-host-apiproxy:一元 RPC、mux 事件流、settings/credentials/llm 域) |
MIT |
| tencent-connect/qqbot-nodejs | QQ 开放平台机器人 SDK:WebSocket 网关、消息事件、文本/媒体/流式消息发送,用于 QQ 远程控制通道 | MIT |
| tencent-connect 组织相关仓库(bot-docs、botpy 等) | QQ 开放平台 API 与交互文档,QQ 适配器实现的协议参考 | 各自许可 |
| node-qrcode | 二维码生成,用于手机扫码配对 | MIT |
| Electron | 桌面应用框架 | MIT |
| electron-builder | 应用打包 | MIT |
同时感谢 DeepSeek Harness 社区与本项目测试过程中提供反馈的各位使用者。
dsh web,没有则自动拉起(默认 npx @deepseek-ai/dsh web),崩溃自动重启。npm install
npm start # 构建并启动桌面端
首次启动会自动探测 http://127.0.0.1:3080:已有 harness 则直接接入;没有则自动执行 npx --yes @deepseek-ai/dsh web --port 3080 拉起(需要 Node.js 18+)。
提示:先运行
npx @deepseek-ai/dsh web并配置好模型密钥,再打开桌面端,体验最佳。
顶栏的「默认模型」下拉框列出当前已配置的全部 Provider 与模型:
session.selectModel 写入,harness 会同时持久化为新会话的默认模型,热生效、无需重启。credentials.set 安全写入,不会明文落盘到配置。「设置 → AI 屏保」:
| 配置 | 说明 |
|---|---|
| 启用空闲检测 | 空闲达到阈值后自动进入全屏屏保 |
| 空闲几分钟后触发 | 默认 5 分钟 |
| 自动启动 agent 任务 | 默认关闭。进入屏保只显示环境画面(时钟/状态),不消耗任何资源;勾选后才会自动创建会话执行任务 |
| 任务提示词 | 自定义屏保任务(默认:浏览科技新闻并整理要点) |
| 任务工作目录 | 可选,指定 agent 的工作目录 |
| 任务超时(分钟) | 默认 10 分钟。任务超时未完成自动停止——防止 agent 失控循环烧 CPU(这是重要护栏) |
屏保画面实时渲染 agent 的思考、输出文本与工具调用卡片(流式渲染为增量追加,不因长输出卡顿)。退出方式:点击、按键、滚轮、触摸均可立即退出;鼠标移动不触发退出(避免鼠标抖动导致屏保闪退)。退出后任务默认保留在后台继续运行,下次进入屏保会「继续上次任务」;关闭「保留任务」则在每次进入时重启新任务。任务会话自动命名「AI 屏保任务 HH:MM」,便于在 Web UI 中识别。
防循环弹出:系统屏保拉起(/s)与空闲检测自动激活都受 5 分钟退出冷却约束——用户点击退出后,5 分钟内不会被系统/空闲检测再次拉起,避免"关了又弹"。用户主动点击「AI 屏保」按钮不受此限制。
注册为 Windows 系统屏保:点击「注册为系统屏保」后,Windows 的锁屏/超时机制会用 /s 参数拉起本应用直接进入全屏模式(注册表 HKCU\Control Panel\Desktop\SCRNSAVE.EXE,无需管理员权限;注册前自动备份原设置,取消时恢复)。
体验提示:AI 屏保是「观看模式」——它全屏展示 agent 正在做什么,而不是接管你的鼠标键盘。空闲时让 agent 干活前,先想清楚任务是否真的需要跑(模型调用消耗 token、工具调用消耗 CPU)。
pnpm dsh web --port {port})。「设置 → 外观」可分别自定义:
%APPDATA%/DeepSeek Harness Desktop/wallpapers),原图移动/删除不影响;支持 png/jpg/jpeg/gif/webp/bmp。「设置 → 远程访问」启用后,桌面端开一个局域网网关(默认端口 3082,Bearer token 认证):
http://<电脑IP>:3082)手机端功能:
「设置 → QQ 机器人」填入在 QQ 开放平台 注册机器人得到的 AppID/AppSecret 即启用(留空自动禁用),也可设置默认工作区/目录(任务命令未指定时自动使用)。在 QQ 私聊机器人发送指令(发送任意无法识别的消息,机器人会自动回复完整指令集与示例):
| 指令 | 说明 | 示例 |
|---|---|---|
状态 / 会话 / 工作区 / 模型 |
查询类 | 状态、工作区 |
任务 <描述> |
默认工作区执行任务 | 任务 分析这个仓库的架构 |
任务 @<工作区名> <描述> |
指定工作区执行 | 任务 @qqbot 修复登录 bug |
任务 目录:<路径> <描述> |
指定目录执行 | 任务 目录:D:/work 写一个脚本 |
进入 <工作区名/目录> |
进入对话模式 | 进入 qqbot |
| (对话模式) | 进入后直接发消息即可连续对话,自动发往该工作区会话,无需指令前缀;退出 结束 |
帮我看看项目里的 TODO → … → 退出 |
进展 <会话id> |
任务实时进展(状态/工具统计/最新输出) | 进展 session-xxxxxxxx |
停止 <会话id> / 打开 <会话id> |
停止任务 / 查看会话内容 | 停止 session-xxxxxxxx |
典型流程:工作区 查看列表 → 进入 qqbot → 连续对话 → 退出。
基于 @tencent-connect/qqbot-nodejs(WebSocket 长连接),协议参考 QQ 开放平台 API v2 文档(消息收发/消息类型/事件订阅)与 Agent QQBot 接入指南。QQ 官方机器人为被动回复模式:只能在你发消息后回复,不能主动推送;长回复自动分段。
npm run build # tsc 编译 main/preload/renderer 到 dist/
npm start # 构建 + electron .
npm run smoke # 冒烟测试:验证 RPC 客户端与模型目录(需 harness 运行中)
npm run pack # 打包 Windows portable 单文件 exe(electron-builder)
调试开关:
--remote-debugging-port=9222 启动时启用 CDP,可用 node scripts/cdp-eval.mjs '<表达式>' 检查页面状态。--ss-debug 启动时,屏保窗口保持打开(禁用空闲退出),便于调试屏保画面。node scripts/mux-test.mjs <baseUrl> 端到端管线测试:设置默认模型 → 建会话 → 发提示 → 订阅事件流(会消耗少量模型调用)。src/main/ 主进程
index.ts 入口(单实例锁、/s 屏保参数、mux 事件桥)
harness.ts harness 进程托管(探测/拉起/健康检查/崩溃重启)
client.ts HTTP RPC 客户端(POST /api/<method> + SSE events.mux)
models.ts 模型目录、默认模型切换、自定义 Provider 向导
screensaver.ts AI 屏保(空闲检测、全屏窗口、任务编排、系统屏保注册)
tray.ts 系统托盘
src/renderer/ 渲染进程(经典脚本,无打包器)
index.html 主窗口(控制条 + webview)
screensaver.html 全屏屏保(实时 agent 画面)
scripts/ 冒烟与端到端测试脚本
桌面端直接实现 deepseek-harness 的 HTTP RPC 协议(dsh-host-apiproxy):
POST /api/<method>,body 为 {type:'client-request', rpcId, method, payload},响应 {type:'server-response', rpcId, result};回环地址免令牌。GET /api/events.mux(SSE),推送 session/event 等帧,屏保页面据此实时渲染。session.list/create/prompt/cancel/selectModel、host.describe、llm.providers/models/discoverModels、settings.update/mutate、credentials.set。协议细节随 harness 演进可能变化;桌面端使用的方法均来自当前 0.1.0-rc.x 的 packages/host/apiproxy。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。