在 Windows 窗口内启动完整 Web 界面并实时显示余额
30.3/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:npm 同名包「dsh-desktop」归属 snowcrescenter-tech/dsh-desktop,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xuanyuying/dsh-desktop该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 52 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意npm 同名包「dsh-desktop」归属 snowcrescenter-tech/dsh-desktop,装到的可能不是本插件
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-desktop @ 0.2.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/7 04:11:17
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 61 处,展示前 53 条)
- 写入本地文件src/main.js:50
fs.mkdirSync(LOG_DIR, { recursive: true }); - 读取本地文件src/main.js:52
const st = fs.statSync(LOG_FILE); - 写入本地文件src/main.js:53
if (st.size > 2 * 1024 * 1024) fs.writeFileSync(LOG_FILE, ''); - 写入本地文件src/main.js:57
fs.appendFileSync(LOG_FILE, '[' + new Date().toISOString() + '] ' + String(line) + '\n'); - 写入本地文件src/main.js:78
fs.mkdirSync(LOG_DIR, { recursive: true }); - 读取本地文件src/main.js:82
recent = fs.readFileSync(STARTUP_LOG, 'utf8').split('\n').filter(Boolean); - 写入本地文件src/main.js:108
fs.writeFileSync(STARTUP_LOG, (kept ? kept + '\n' : '') + line, 'utf8'); - 读取本地文件src/main.js:926
if (fs.existsSync(file)) { - 读取本地文件src/main.js:1094
if (fs.existsSync(c)) return c; - 读取本地文件src/main.js:1235
const st = fs.statSync(getLogFilePath()); - 执行外部命令来自配置/变量src/main.js:1343
spawn(dest, [], { detached: true, stdio: 'ignore' }).unref(); - 写入本地文件src/main.js:1460
fs.writeFileSync(getLogFilePath(), ''); - 发起网络请求src/lib/harness.js:91
const res = await fetch(`${getHarnessUrl()}/`, { - 发起网络请求src/lib/harness.js:108
const res = await fetch(`${getHarnessUrl()}/`, { - 读取本地文件src/lib/harness.js:169
const dirs = fs.readdirSync(npxRoot); - 读取本地文件src/lib/harness.js:181
if (explicit && fs.existsSync(explicit)) return { command: explicit }; - 读取本地文件src/lib/harness.js:186
if (fs.existsSync(full)) return { command: full }; - 执行外部命令固定命令src/lib/harness.js:197
const out = execFileSync('npm', ['root', '-g'], { - 读取本地文件src/lib/harness.js:204
if (root && fs.existsSync(root)) return root; - 读取本地文件src/lib/harness.js:214
if (fs.existsSync(c)) return c; - 读取本地文件src/lib/harness.js:222
if (!fs.existsSync(pkgJson)) return null; - 执行外部命令固定命令src/lib/harness.js:350
const out = spawnSync('netstat', ['-ano'], { encoding: 'utf8', windowsHide: true }).stdout || ''; - 执行外部命令固定命令src/lib/harness.js:361
const info = spawnSync( - 执行外部命令固定命令src/lib/harness.js:372
spawnSync('taskkill', ['/pid', pid, '/T', '/F'], { stdio: 'ignore', windowsHide: true }); - 执行外部命令来自配置/变量src/lib/harness.js:432
child = spawn(dshEntry.command, args, { - 执行外部命令固定命令src/lib/harness.js:518
const child = spawn('npm', ['install', '-g', '@deepseek-ai/dsh'], { - 读取本地文件src/lib/balance.js:50
if (fs.existsSync(file)) return { created: false, path: file }; - 写入本地文件src/lib/balance.js:52
fs.mkdirSync(path.dirname(file), { recursive: true }); - 写入本地文件src/lib/balance.js:55
fs.writeFileSync(file, JSON.stringify({ apiKey: '' }, null, 2), 'utf8'); - 读取本地文件src/lib/balance.js:65
const raw = fs.readFileSync(configFilePath(), 'utf8'); - 读取密钥环境变量src/lib/balance.js:95
if (process.env.DEEPSEEK_API_KEY && process.env.DEEPSEEK_API_KEY.trim()) { - 写入本地文件src/lib/balance.js:122
fs.mkdirSync(path.dirname(file), { recursive: true }); - 写入本地文件src/lib/balance.js:131
fs.writeFileSync(file, JSON.stringify(cfg, null, 2), 'utf8'); - 读取本地文件src/lib/balance.js:143
const text = fs.readFileSync(credFile, 'utf8'); - 读取密钥环境变量src/lib/balance.js:154
if (process.env.DEEPSEEK_API_KEY) return process.env.DEEPSEEK_API_KEY.trim(); - 发起网络请求src/lib/balance.js:166
const req = https.request( - 写入本地文件src/lib/peak-desktop.js:38
fs.mkdirSync(d, { recursive: true }); - 读取本地文件src/lib/peak-desktop.js:59
if (c && fs.existsSync(c) && fs.statSync(c).isFile()) return path.resolve(c); - 写入本地文件src/lib/peak-desktop.js:98
fs.writeFileSync(p, renderPatch(guardPluginPath), 'utf8'); - 读取本地文件src/lib/peak-desktop.js:110
const j = JSON.parse(fs.readFileSync(controlPath(), 'utf8')); - 写入本地文件src/lib/peak-desktop.js:129
fs.writeFileSync(controlPath(), JSON.stringify(next, null, 2), 'utf8'); - 读取本地文件src/lib/peak-desktop.js:135
if (!fs.existsSync(controlPath())) { - 写入本地文件src/lib/peak-desktop.js:137
fs.writeFileSync(controlPath(), JSON.stringify(defaultControl(), null, 2), 'utf8'); - 读取本地文件src/lib/peak-desktop.js:145
const j = JSON.parse(fs.readFileSync(statusPath(), 'utf8')); - 删除本地文件src/lib/peak-desktop.js:166
fs.rmSync(statusPath(), { force: true }); - 读取本地文件src/lib/ui-state.js:83
const j = JSON.parse(fs.readFileSync(file, 'utf8')); - 写入本地文件src/lib/ui-state.js:95
fs.mkdirSync(path.dirname(file), { recursive: true }); - 写入本地文件src/lib/ui-state.js:96
fs.writeFileSync(file, JSON.stringify(next, null, 2), 'utf8'); - 写入本地文件src/lib/updater.js:181
fs.mkdirSync(path.dirname(dest), { recursive: true }); - 写入本地文件src/lib/updater.js:185
const out = fs.createWriteStream(dest); - 读取本地文件resources/peak-guard.mjs:92
const j = JSON.parse(readFileSync(controlPath(), 'utf8')); - 写入本地文件resources/peak-guard.mjs:109
mkdirSync(dirname(p), { recursive: true }); - 写入本地文件resources/peak-guard.mjs:112
writeFileSync(
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 窗口内启动Web界面
- 实时显示余额
README
由 DeepSeek 最新模型翻译生成DeepSeek Harness 桌面版 (DSH Desktop)
一个基于 Electron 的 Windows 桌面应用,用于启动并承载 DeepSeek Harness 的完整 Web 界面(对话、插件、技能、工作流、子代理、设置等全部功能),并在窗口右下角实时显示 DeepSeek 账户余额。
技术栈 平台 License Release
💡 通用版:不含任何个人 API Key,开箱即用,配置你自己的 Key 即可。
💡 无需 Visual Studio / 任何 IDE:Node.js + Electron,命令行即可运行、测试、打包。
🧩 DeepSeek Harness 社区项目:本应用是 DeepSeek Harness(DSH)生态的桌面客户端,通过 dsh-plugin 主题与官方社区关联。
展开完整文档(README 剩余 1 节)
DeepSeek Harness 桌面版 (DSH Desktop)
一个基于 Electron 的 Windows 桌面应用,用于启动并承载 DeepSeek Harness 的完整 Web 界面(对话、插件、技能、工作流、子代理、设置等全部功能),并在窗口右下角实时显示 DeepSeek 账户余额。
技术栈 平台 License Release
💡 通用版:不含任何个人 API Key,开箱即用,配置你自己的 Key 即可。
💡 无需 Visual Studio / 任何 IDE:Node.js + Electron,命令行即可运行、测试、打包。
🧩 DeepSeek Harness 社区项目:本应用是 DeepSeek Harness(DSH)生态的桌面客户端,通过 dsh-plugin 主题与官方社区关联。
✨ 功能特性
🖥️ 桌面集成
- 标准菜单栏:文件 / 编辑 / 视图 / 工具 / 帮助 五段式菜单,符合 Windows 桌面软件习惯
- 文件:新建会话(Ctrl+N)、刷新界面(Ctrl+R)、在浏览器打开、打开配置目录、退出
- 编辑:撤销 / 重做 / 剪切 / 复制 / 粘贴 / 全选
- 视图:重新加载(F5)、强制重载、缩放、全屏(F11)、开发者工具(F12)
- 工具:检查 dsh 更新、重启 dsh 服务、查看服务状态
- 帮助:官方文档、项目主页、反馈问题、关于
- 快捷键:Ctrl+N 新建会话、F5 刷新、F11 全屏、F12 开发者工具
🚀 自动启动前提启动时自动完成,无需手动执行任何命令:
1. 定位 dsh 命令(全局 npm / npx 缓存 / PATH)
2. 未安装时自动 npm install -g @deepseek-ai/dsh
3. 自动启动 dsh web(带 --no-open,界面由窗口承载而非跳浏览器)
4. 服务就绪后自动加载界面(含渲染检查与失败重试)
🔄 版本管理
- 菜单「工具 → 检查 dsh 更新」:对比本地与 npm 最新版本,一键升级 dsh
- 升级后提示重启服务以生效
💰 余额显示
- 右下角实时显示账户余额(30 秒刷新,点击手动刷新,悬停看明细)
🔌 DeepSeek Harness 0.1.5+ 适配
- 认证机制适配(关键):0.1.5 起 dsh web 需要认证,裸访问返回 401。本应用会捕获启动输出中的带 token URL 并用它加载界面(303 → cookie → 200),彻底解决黑屏
- 端口冲突自愈:若 3080 被无法认证的遗留服务占用,自动清理该 dsh web 进程并重启自己的服务
- 代理支持:传递 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY / NO_PROXY 环境变量(0.1.5 新增)
- 兼容 --no-open 官方参数(0.1.5 官方推荐用法)
- 支持 0.1.5 新特性:DeepSeek-V41-Flash 模型、任意文件上传、右侧 Sidebar 预览
🩺 诊断工具
遇到启动问题时运行(输出环境、服务、认证、余额、代理状态):
node scripts\doctor.js
📸 运行截图
DSH Desktop 运行截图
⬇️ 下载安装
前往 Releases 页面 下载 DSH Desktop Setup 1.2.1.exe 安装程序(Windows 10/11,约 95 MB)。
或克隆源码自行构建:
git clone https://github.com/xuanyuying/dsh-desktop.git
cd dsh-desktop
npm install
npm start
功能特性
- 🚀 一键启动:自动检测 dsh web 服务;未运行时自动拉起,已运行时直接复用(端口 3080)
- 🖥️ 完整 Harness 内容:窗口内嵌全部 Web UI,无任何功能裁剪
- 💰 右下角余额实时显示:每 30 秒自动刷新 DeepSeek 账户余额;点击手动刷新;悬停查看赠金/充值明细(与左下角"设置"按钮错开,互不遮挡)
- 🪟 桌面窗口体验:独立窗口、无地址栏、外链用系统浏览器打开
- 🧹 干净退出:由本应用启动的服务在退出时自动关闭,不影响外部已运行的服务
环境要求
| 依赖 | 版本 | 说明 |
| Node.js | ≥ 20 | 必装(含 npm) |
| DeepSeek Harness | ≥ 0.1.0-rc | 通过 npm install -g @deepseek-ai/dsh 安装;或由本应用自动发现 npx 缓存 |
| DeepSeek API Key | - | 见下方"API Key 配置" |
API Key 配置(通用版)
按优先级自动读取,任选其一:
1. 环境变量 setx DEEPSEEK_API_KEY "sk-你的key"
2. 应用配置文件(推荐)复制模板到用户目录并填入你的 Key copy config.example.json %USERPROFILE%\.dsh-desktop\config.json 编辑 config.json,把 apiKey 改为 sk-你的key
配置文件格式: { "apiKey": "sk-你的DeepSeek-API-Key" }
3. 兼容读取 Harness 凭据:若你已用 dsh 且 ~/.dsh/.credentials.yaml 中存在 DEEPSEEK_API_KEY,自动复用。
API Key 获取:https://platform.deepseek.com → API Keys。
快速开始
方式一:直接启动(推荐)
双击项目目录下的 启动桌面端.bat。
首次运行自动安装 Electron 依赖并下载运行时(需联网,约 2~5 分钟),之后秒开。
方式二:命令行启动
cd dsh-desktop-desk
npm install # 首次
npm start
运行测试(无需 IDE)
node scripts\smoke-test.js # 冒烟测试:服务检测 + 余额 API
node scripts\test-lib.js # lib 模块:12 项断言
node scripts\test-preload.js # 浮层 UI:11 项断言
打包为安装程序
通用方式(默认走 GitHub,需要能访问 GitHub)
npm run dist
国内网络 / 无 GitHub 访问(推荐)
node scripts\build-dist.js
一键脚本自动完成(全程走 npmmirror 国内镜像、不访问 GitHub):
1. 从国内镜像下载 NSIS / winCodeSign / nsis-resources 构建工具
2. 解压工具到本地缓存(幂等,二次打包秒过)
3. 自动 patch electron-builder 适配受限环境
4. 使用本地已解压的 Electron(electronDist),全程离线
5. 产出 dist\DSH Desktop Setup 1.2.1.exe
项目结构
dsh-desktop-desk/
├── src/
│ ├── main.js # 主进程:Electron 集成(窗口、IPC、菜单、生命周期) │ ├── menu.js # 应用菜单栏(文件/编辑/视图/工具/帮助) │ ├── preload.js # 预加载:右下角余额浮层 UI + IPC 桥 │ └── lib/ │ ├── harness.js # Harness 服务检测/启动/停止 + 版本检测升级(纯 Node) │ └── balance.js # DeepSeek 余额 API 查询(纯 Node 模块,通用 Key 解析) ├── scripts/ │ ├── build-dist.js # 一键打包(国内镜像 / 离线) │ ├── prepare-builder-cache.js # 构建工具缓存准备 │ ├── download-builder-tools.js # 构建工具下载(npmmirror) │ ├── smoke-test.js / test-lib.js / test-preload.js / test-menu.js # 测试 │ └── gen-ico.js / download-electron.js / extract-electron.js / patch-builder.js ├── build/ # 应用图标 ├── config.example.json # API Key 配置模板(通用) ├── package.json ├── 启动桌面端.bat # 一键启动脚本 └── README.md
常见问题
Q: 启动时报"未找到 dsh 命令"?
A: 执行 npm install -g @deepseek-ai/dsh,或确认 dsh 在 PATH / npx 缓存中。
Q: 余额显示"不可用"?
A: 检查 API Key 配置(环境变量或 ~/.dsh-desktop/config.json),以及网络能否访问 api.deepseek.com。
Q: 关闭窗口后 dsh 服务还在运行?
A: 若服务由本应用启动,退出时自动关闭;若外部启动(如命令行 dsh web),本应用不接管其生命周期。
Q: 如何修改端口?
A: 编辑 src/lib/harness.js 的 HARNESS_PORT(默认 3080),或设置环境变量 DSH_DESKTOP_PORT。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xuanyuying/dsh-desktop
在 Windows 窗口内启动完整 Web 界面并实时显示余额
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,489已汉化DSH
73.1
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,918已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,453已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
Download DS Bot for Windows 10/11 64-bit / 下载 Windows…
★ 5,293已汉化DSH
71.2
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,797已汉化DSH
71.1
这是你的仓库?认领条目