DeepSeek-herness桌面版0.1.7-rc1
31.8/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add AmazingBoyCrazy/dsh_desktop该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · security
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 31 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(dependency_conflict · 2026/9/27) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包deepseek-harness-desktop @ 0.4.1
✓Node 引擎要求 >=22.12.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖要求 0.2.1-rc.2 · 最新 0.2.1-rc.2 兼容
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/19 22:22:16
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0🔴 扫描:高危尚无人工评估
静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。
安装时即执行脚本可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 49 处,展示前 47 条)
- 读取本地文件scripts/ensure-electron.mjs:24
return existsSync(binary) - 执行外部命令来自配置/变量scripts/ensure-electron.mjs:35
const result = spawnSync(process.execPath, [installScript], { stdio: 'inherit' }) - 写入本地文件src/main/harness.mjs:91
mkdirSync(modulesDir, { recursive: true }) - 读取本地文件src/main/harness.mjs:101
if (existsSync(link)) { - 读取本地文件src/main/harness.mjs:102
const stat = lstatSync(link) - 删除本地文件src/main/harness.mjs:104
unlinkSync(link) - 读取本地文件src/main/harness.mjs:126
if (!existsSync(join(profileDir, 'package.json'))) { - 写入本地文件src/main/harness.mjs:127
mkdirSync(profileDir, { recursive: true }) - 写入本地文件src/main/harness.mjs:128
writeFileSync(join(profileDir, 'package.json'), `${JSON.stringify(defaultProfileManifest(), null, 2)}\n`) - 写入本地文件src/main/harness.mjs:161
writeFileSync(patchPath, content) - 读取本地文件src/main/harness.mjs:218
const pkg = JSON.parse(readFileSync(manifest, 'utf8')) - 写入本地文件src/main/harness.mjs:360
mkdirSync(sandboxTemp, { recursive: true }) - 写入本地文件src/main/harness.mjs:368
mkdirSync(this.logDir, { recursive: true }) - 读取本地文件src/main/harness.mjs:370
if (existsSync(logFile)) { - 读取本地文件src/main/harness.mjs:372
if (statSync(logFile).size > HARNESS_LOG_MAX_BYTES) { - 执行外部命令来自配置/变量src/main/harness.mjs:383
this.child = spawn(process.execPath, nodeArgs, { - 发起网络请求src/main/harness.mjs:437
const response = await fetch(this.baseUrl, { - 写入本地文件src/main/log.mjs:28
mkdirSync(dir, { recursive: true }) - 读取本地文件src/main/log.mjs:30
if (existsSync(file)) { - 读取本地文件src/main/log.mjs:32
if (statSync(file).size > MAX_LOG_BYTES) { - 写入本地文件src/main/log.mjs:34
stream = createWriteStream(file, { flags: 'w' }) - 写入本地文件src/main/log.mjs:41
stream = createWriteStream(file, { flags: 'a' }) - 读取本地文件src/main/log.mjs:69
if (!existsSync(file)) return '(no log file yet)' - 读取本地文件src/main/log.mjs:70
const text = readFileSync(file, 'utf8') - 读取本地文件scripts/bump-version.mjs:47
const pkg = JSON.parse(readFileSync(PACKAGE_PATH, 'utf8')) - 写入本地文件scripts/bump-version.mjs:61
writeFileSync(PACKAGE_PATH, `${JSON.stringify(pkg, null, 2)}\n`) - 读取本地文件scripts/check-upstream.mjs:24
const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')) - 发起网络请求scripts/check-upstream.mjs:34
const response = await fetch(url, { headers, signal: AbortSignal.timeout(30_000) }) - 读取本地文件scripts/release-plan.mjs:35
const pkg = JSON.parse(readFileSync(PACKAGE_PATH, 'utf8')) - 执行外部命令固定命令scripts/release-plan.mjs:74
execSync('npm install --package-lock-only --ignore-scripts --no-audit --no-fund', { stdio: ['ignore', 'pipe', 'pipe'] }) - 写入本地文件scripts/release-plan.mjs:93
writeFileSync(PACKAGE_PATH, `${JSON.stringify(pkg, null, 2)}\n`) - 写入本地文件scripts/release-plan.mjs:97
writeFileSync(PACKAGE_PATH, `${JSON.stringify(pkg, null, 2)}\n`) - 读取本地文件scripts/repro-fresh-boot.mjs:26
if (existsSync(profileManifest)) { - 读取本地文件scripts/repro-fresh-boot.mjs:29
console.log(readFileSync(profileManifest, 'utf8')) - 执行外部命令来自配置/变量scripts/repro-fresh-boot.mjs:36
const child = spawn(process.execPath, [entry, 'web', '--host', '127.0.0.1', '--port', '0'], { - 读取本地文件scripts/repro-fresh-boot.mjs:64
console.log(readFileSync(profileManifest, 'utf8')) - 删除本地文件递归scripts/repro-fresh-boot.mjs:68
try { rmSync(home, { recursive: true, force: true }) } catch { } - 执行外部命令来自配置/变量scripts/smoke-dsh-web.mjs:47
const child = spawn(process.execPath, [entry, ...args], { - 发起网络请求scripts/smoke-dsh-web.mjs:89
const handshake = await fetch(launchUrl, { redirect: 'manual', signal: AbortSignal.timeout(15_000) }) - 发起网络请求scripts/smoke-dsh-web.mjs:100
const response = await fetch(origin, { - 删除本地文件递归scripts/smoke-dsh-web.mjs:144
await rm(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 }) - 执行外部命令来自配置/变量scripts/win32-console-patch-probe.mjs:66
const child = spawn(binary, ['--import', patchSpecifier, '--input-type=module', '-e', inline], { - 执行外部命令来自配置/变量scripts/win32-runner-injection.spec.mjs:73
const child = spawn(process.execPath, buildInjectedArgv(['-e', script, '--', '--workspace', 'W', '--mode', 'read-only']), { - 发起网络请求watch-ci.mjs:8
const runs = await (await fetch(`${base}/actions/runs?per_page=5`, h)).json() - 发起网络请求watch-ci.mjs:12
const jobs = await (await fetch(run.jobs_url, h)).json() - 发起网络请求watch-ci3.mjs:8
const runs = await (await fetch(`${base}/actions/runs?per_page=5`, h)).json() - 发起网络请求watch-ci3.mjs:12
const jobs = await (await fetch(run.jobs_url, h)).json()
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis-plugin-group@deepseek-ai/dsh@deepseek-ai/dsh-anonymous-user-id@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh-attachment@deepseek-ai/dsh-authorization@deepseek-ai/dsh-bash-local@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-compaction@deepseek-ai/dsh-deepseek-account给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成DeepSeek Harness 桌面版
CI
GitHub release
License: MIT
DeepSeek Harness 桌面版 是 DeepSeek Harness 的桌面客户端:不需要终端、不需要安装 Node.js、也不需要 dsh web 命令。双击图标,完整的 DeepSeek Harness 网页版界面就会在自己的窗口里打开。
项目来源与维护说明
- 引擎:内嵌官方 npm 包 @deepseek-ai/dsh(DeepSeek 官方发布,版本精确锁定),升级完全跟随官方,与 CLI 共用同一数据目录 ~/.dsh。
- 桌面壳:基于 deepseek-harness-desktop(MIT)起步,原作者版权与署名保留(见 LICENSE)。本仓库在此之上独立维护,后续不再依赖第三方桌面壳,更新来源以 DeepSeek 官方引擎为准。
本仓库相对原始壳的改进
1. 修复应用内自动更新(Windows/Linux):原始版 latest.yml 指向不存在的文件(404),自动更新必然失败;本仓库显式指定 artifactName,更新元数据与实际产物一致,已实测 200 OK。
2. 修复 Windows 终端弹窗:引擎与沙箱 runner 均为无控制台进程,执行命令时 Windows 会为每个子进程弹出可见终端窗口。
展开完整文档(README 剩余 1 节)
DeepSeek Harness 桌面版 CI GitHub release License: MIT DeepSeek Harness 桌面版 是 DeepSeek Harness 的桌面客户端:不需要终端、不需要安装 Node.js、也不需要 dsh web 命令。双击图标,完整的 DeepSeek Harness 网页版界面就会在自己的窗口里打开。 项目来源与维护说明 - 引擎:内嵌官方 npm 包 @deepseek-ai/dsh(DeepSeek 官方发布,版本精确锁定),升级完全跟随官方,与 CLI 共用同一数据目录 ~/.dsh。 - 桌面壳:基于 deepseek-harness-desktop(MIT)起步,原作者版权与署名保留(见 LICENSE)。本仓库在此之上独立维护,后续不再依赖第三方桌面壳,更新来源以 DeepSeek 官方引擎为准。 本仓库相对原始壳的改进 1. 修复应用内自动更新(Windows/Linux):原始版 latest.yml 指向不存在的文件(404),自动更新必然失败;本仓库显式指定 artifactName,更新元数据与实际产物一致,已实测 200 OK。 2. 修复 Windows 终端弹窗:引擎与沙箱 runner 均为无控制台进程,执行命令时 Windows 会为每个子进程弹出可见终端窗口。本仓库在引擎与 runner 两层实现“隐藏控制台”方案(引擎 AllocConsole + SW_HIDE,runner 通过 --import 预加载补丁并 AttachConsole 共享引擎控制台),全链路命令执行不再产生任何窗口;普通子进程另有 windowsHide 自适应兜底。 3. 修复 Windows 沙箱命令 100% 失败:桌面版工作区为用户主目录,而 ACL 沙箱要求临时目录在工作区之外;引擎的 TMP/TEMP 已重定向到 C:\Users\Public\dsh-desktop-tmp,沙箱命令恢复可用。 4. 新增 Windows CI:引擎冒烟、真实 Electron 桌面冒烟、控制台补丁探针、runner 注入形状测试,全部在 Windows runner 上执行(原始壳仅 Linux CI)。 5. 依赖显式化:补丁依赖的 @deepseek-ai/dsh-host-directory-picker 显式声明,不再依赖 npm 提升(hoisting)。 6. 鲸鱼图标:窗口/任务栏/dock 图标替换为 DeepSeek Harness 官方鲸鱼 Logo。 7. 内置增强插件机制保留、本版本暂不随包:插件通过官方 dsh.profile.bundles 机制挂载(写入 web profile 的 package.json,仅当不存在时;与 dsh plugin add 一致,绝不写 cordis.patch.yml 行,避免双挂载 duplicate 崩溃)。清单由 src/main/harness.mjs 的 BUNDLED_PLUGINS 驱动,当前为空(原因见“内置插件”一节):第三方插件生态仍以 0.1.5-rc 引擎线为 peer 目标,混挂会导致引擎启动失败。 8. 修复引擎 token 门禁下的白屏:0.1.6-alpha 起的网页界面要求“进程级浏览器会话令牌”,裸访问回环地址会返回 401。桌面壳改为解析引擎打印的 dsh web: http://127.0.0.1:/?token=… 就绪行,窗口按该 URL 加载(令牌一次性换取 Cookie),此前会白屏。 9. 补全打包裁剪的引擎依赖:electron-builder 按依赖图收集 node_modules,会漏掉仅以 peer 边存在的引擎包(dsh-jobs、dsh-settings、dsh-attachment、dsh-session-persistence 等 13 个),打包版启动即 ERR_MODULE_NOT_FOUND。这些包已在 package.json 显式声明。 工作原理 桌面壳(Electron 主进程)以 ELECTRON_RUN_AS_NODE=1 方式把内嵌引擎(@deepseek-ai/dsh 的 dsh web 配置档)作为子进程拉起,等引擎打印带令牌的就绪行后,窗口加载该 URL(引擎的网页界面从 0.1.6-alpha 起要求进程级令牌,裸回环地址返回 401)。引擎只监听 127.0.0.1,会话、设置、插件全部存放在 ~/.dsh,与 CLI 完全共享。 桌面壳(Electron)──守护──▶ 引擎子进程(Electron Node 24) │ │ 提供网页界面 127.0.0.1:32123 └──窗口(沙箱渲染进程)◀────┘ 会话/设置/插件 ⇄ ~/.dsh(与 CLI 共享) 安装使用 从 Releases 下载对应平台安装包: | 平台 | 安装包 | | Windows 10/11(x64) | deepseek-harness-desktop--x64.exe(NSIS 安装程序) | | macOS(Apple Silicon / Intel) | -arm64.dmg / -x64.dmg | | Linux(x64) | -x86_64.AppImage 或 .deb | - 未签名:Windows SmartScreen 提示时点 更多信息 → 仍要运行;macOS 首次打开请右键 打开*。 - 安装后双击图标即用,首次启动需几秒初始化。 - 数据共享:默认使用 ~/.dsh(与 CLI/网页版共享会话、设置、凭据)。同一时间只运行一个引擎(桌面版或 dsh web 二选一),避免并发写冲突。 配置 | 变量 | 默认值 | 含义 | | DSH_HOME | ~/.dsh | harness 数据目录,原样透传引擎 | | DSH_DESKTOP_PORT | 32123,32124,32125 | 引擎回环端口候选(逗号分隔) | | DSH_DESKTOP_PATCH_DEBUG | 未设置 | 1 时输出控制台补丁诊断日志到引擎日志 | 内置插件 本版本(0.1.7-rc.1 引擎线)不随包附带任何第三方插件:插件生态当前仍以 0.1.5-rc 引擎为 peer 目标,版本不匹配会让引擎启动直接失败(fail-loud),因此优先保证"装了就能开"。首次启动只挂载引擎自带的 @deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app 两个 bundle(由引擎自身初始化 profile,桌面壳不再写 seed)。 - 想要增强插件:等对应插件支持本条引擎线后,用插件市场 UI 或 dsh plugin --profile web add 安装——两者都走官方 dsh.profile.bundles 机制。 - 重新随包内置:把包名填进 src/main/harness.mjs 的 BUNDLED_PLUGINS(空数组即"不内置"),profile 清单与依赖列表都由它派生;同时把包名加回 package.json 的 dependencies,否则打包后解析不到。 - 禁用/卸载插件:用插件市场 UI 或 dsh plugin --profile web remove 。不要手改 cordis.patch.yml 的插件行——官方 bundle 挂载与手写行同时存在会触发 duplicate loader entry id 崩溃(本仓库早期版本踩过这个坑)。 从源码开发 需要 Node.js ≥ 22.12: git clone https://github.com/AmazingBoyCrazy/dsh_desktop.git cd dsh_desktop npm ci npm start 常用脚本:npm start(开发模式)、npm run smoke(引擎冒烟)、npm run dist(打包)、npm run check:upstream(检查上游引擎版本)。 开发模式注意: - npm start 与已安装的桌面版共用同一个 userData 目录与单实例锁,已安装版本正在运行时开发模式会直接退出(表现为"点了没反应")。先完全退出已安装版本,或换一份数据目录:npx electron . --user-data-dir=。 - Electron 版本必须精确等于 44.0.0:引擎通过 node-addon-require-builtin 读取 Node 内部模块(配置档解析需要),该原生模块只支持精确指纹(43.0.0、44.0.0、45.0.0-alpha.6),换成 43.4.0、^44 等都会让引擎启动即失败(Unsupported/no-context)。上游官方桌面版同样固定在 Electron 44。 - 在 DSH 引擎里开的终端会继承 ELECTRON_RUN_AS_NODE=1,此时 npm start 会把 Electron 当纯 Node 跑并报 does not provide an export named 'Menu';在普通终端里运行,或先 Remove-Item Env:\ELECTRON_RUN_AS_NODE。 自动发版 release.yml 每日定时检查 npm 官方仓库:上游 @deepseek-ai/dsh 发布新版本后自动固定版本、构建三平台安装包并发布 GitHub Release,全程无需人工介入。手动触发:Actions → Release → Run workflow。 已知限制 - 安装包未签名(macOS Gatekeeper / Windows SmartScreen 提示;代码签名在路线图中)。 - Electron 版本被引擎钉死:必须精确 44.0.0(原生模块指纹限制),因此不能在发版前随意升级 Electron;升级前请确认目标版本出现在 node-addon-native-custom-loader 的支持列表里。 - 本版不内置第三方插件(生态尚未跟上 0.1.7-rc 引擎线),需自行从插件市场安装。 - Windows 退出时引擎为硬终止:Windows 不支持 SIGTERM 优雅停机,退出应用可能丢失少量未落盘会话数据(上游 CLI 在 POSIX 下无此问题)。 - 应用内自动更新依赖网络:更新检查走 GitHub,被代理/网络环境拦截时(表现为日志中 SSL 握手失败)请手动下载安装包。 - 引擎继承上游运行要求(shell 工具需要宿主机具备 PowerShell 等)。 许可证 MIT — 见 LICENSE。引擎上游:deepseek-ai/deepseek-harness(MIT)。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
AmazingBoyCrazy/dsh_desktop
DeepSeek-herness桌面版0.1.7-rc1
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7