Package a built DeepSeek Harness checkout into a distributable macOS desktop app (.app + .dmg) with a standalone Node runtime and an Electron shell, customized through a Web Settings section (logo/VI theme, bundled plugins, bundled models, users & permissions).
安装验证:沙盒安装通过,Web 冒烟失败 (L5 failed) · 验证于 dsh 0.1.7-rc.2 · 验证日期 安装验证详情 →
功能介绍AI
将构建好的DeepSeek Harness打包为可分发的macOS .app/.dmg应用。
- 生成包含独立Node运行时的.app和.dmg。
- 使用Electron shell构建桌面应用。
- 通过Web设置自定义主题、插件、模型和用户。
能力标签为 AI 推断或 README 规则抽取(见角标),词表受限、未经安装验证;AI = 推断,README = 原文关键词。
安装
dsh plugin --profile web add dsh-desktop-packager安装方式: npm · 沙盒安装通过,Web 冒烟失败 (L5 failed) · 验证于 dsh 0.1.7-rc.2
验证与兼容性
按插件版本分组:每张卡是该插件版本实测过的 dsh 版本与安装兼容结论(L5 优先)。只列真测过的组合——未列出 = 未实测,不推定兼容。L1–L3 为插件级静态档(与 dsh 版本无关,各 dsh 行同值):在行内「验证等级」格里与 L4/L5 并列显示、标注「静态」,证据体为插件级单份、随行内「查看检查项与证据」出现,不在各版本重复存储。
External credentials(插件级):未检测到
○ 作者未声明 dsh 版本要求 —— 安装不会因版本被拒。
| 插件版本 \ dsh | dsh 0.1.7-rc.2 | dsh 0.1.7-rc.1 | dsh 0.1.7-alpha.2 | dsh 0.1.6-alpha.2 | dsh 0.1.6-alpha.1 |
|---|---|---|---|---|---|
| 0.4.1 | ✗ | ✗ | ✗ | ✗ | ✗ |
| 0.4.0 | · | · | · | · | · |
0.4.1npm失败 82026-09-26
dsh-desktop-packager
✗dsh 0.1.7-rc.22026-09-26L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.7-rc.2
- • 被测插件工件: npm · dsh-desktop-packager@0.4.1
ID: dsh-desktop-packager@0.4.1@dsh0.1.7-rc.2 · 档位: l4-sandbox
签发:2026-09-26 · 有效至:2026-10-03
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.7-rc.12026-09-24L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.7-rc.1
- • 被测插件工件: npm · dsh-desktop-packager@0.4.1
ID: dsh-desktop-packager@0.4.1@dsh0.1.7-rc.1 · 档位: l4-sandbox
签发:2026-09-24 · 有效至:2026-10-01
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.7-alpha.22026-09-23L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.7-alpha.2
- • 被测插件工件: npm · dsh-desktop-packager@0.4.1
ID: dsh-desktop-packager@0.4.1@dsh0.1.7-alpha.2 · 档位: l4-sandbox
签发:2026-09-23 · 有效至:2026-09-30
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.6-alpha.22026-09-20L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.2
- • 被测插件工件: npm · dsh-desktop-packager@0.4.1
ID: dsh-desktop-packager@0.4.1@dsh0.1.6-alpha.2 · 档位: l3-fullscan
签发:2026-09-20 · 有效至:2026-09-27
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.6-alpha.12026-09-17L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.1
- • 被测插件工件: npm · dsh-desktop-packager@0.4.1
ID: dsh-desktop-packager@0.4.1@dsh0.1.6-alpha.1 · 档位: l4-sandbox
签发:2026-09-17 · 有效至:2026-09-24
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.5-rc.22026-09-13L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.5-rc.2
- • 被测插件工件: npm · dsh-desktop-packager@0.4.1
ID: dsh-desktop-packager@0.4.1@dsh0.1.5-rc.2 · 档位: l4-sandbox
签发:2026-09-13 · 有效至:2026-09-20
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.3-alpha.22026-09-09L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.3-alpha.2
- • 被测插件工件: npm · dsh-desktop-packager@0.4.1
ID: dsh-desktop-packager@0.4.1@dsh0.1.3-alpha.2 · 档位: l4-sandbox
签发:2026-09-09 · 有效至:2026-09-16
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.3-alpha.12026-09-06L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.3-alpha.1
- • 被测插件工件: npm · dsh-desktop-packager@0.4.1
ID: dsh-desktop-packager@0.4.1@dsh0.1.3-alpha.1 · 档位: l4-sandbox
签发:2026-09-06 · 有效至:2026-09-13
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
0.4.0npm失败 12026-09-04
dsh-desktop-packager
✗dsh 0.1.2-rc.12026-09-04L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.2-rc.1
- • 被测插件工件: npm · dsh-desktop-packager@0.4.0
ID: dsh-desktop-packager@0.4.0@dsh0.1.2-rc.1 · 档位: l5-web-smoke
签发:2026-09-04 · 有效至:2026-12-03
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
仅展示最近 3 个已发布版本;源码快照(commit hash)组、未标注工件组与更早版本不展示——全量档案保留在数据层(插件无任何已发布版本时,快照/未标注组才照常展示)。
作者徽章
将官方徽章嵌入你的 README,展示插件的安全与安装检测状态:
`[](https://www.dsh.so/artifact/dsh-desktop-packager/)`安全报告
两层自动化检查,都不是人工审核:静态扫描(逐插件规则判定)与模型驱动的动态安全审计(只覆盖静态判定 warn 及以上的插件子集,不执行插件代码)。
静态扫描 低,动态审计最高 中,按「取更严者」→ 总评级 中。
v0.4.1dsh 清单0.4.1npm2026-09-26v0.4.1版本已更新clean · npmvet 为 AST 静态扫描(npm 发布物或 git 源码)。
静态发现(8 条)
- 警告childProcess · code-exec
packaging/electron/main.js:128const child = spawn(cmd, args, { stdio: ['ignore', 'pipe', 'pipe'] }) - 警告childProcess · code-exec
packaging/electron/main.js:208const child = spawn( - 警告netIp · network
packaging/electron/main.js:197appendLog(`[dsh] starting http://127.0.0.1:${port} (DSH_HOME=${dshHome()})\n`) - 警告netIp · network
packaging/electron/main.js:223const ok = await waitForHttp(`http://127.0.0.1:${port}/`, STARTUP_TIMEOUT_MS) - 警告netIp · network
packaging/electron/main.js:411if (!url.startsWith('http://127.0.0.1:') && !url.startsWith('http://localhost')) { - 警告fsWrite · files
packaging/electron/main.js:85fs.appendFileSync(logFile(), line) - 警告fsWrite · files
packaging/electron/main.js:171fs.writeFileSync( - 警告childProcess · code-exec
src/packager.ts:139const child = spawn(process.execPath, [script, ...args], {
展开 5 条审计发现
- medium经 logoPath 的任意文件读取(/api/desktop-config/logo 直接返回内容)
src/desktop-config.ts:302logoPath 完全来自用户可编辑配置,并可通过未鉴权路由 `case 'setDesign'` 写入。没有任何白名单、目录限制或权限校验:只要能访问该 web server,攻击者即可把 logoPath 设为任意可读文件(如 ~/.ssh/id_rsa、~/.dsh 凭据),随后 GET /api/desktop-config/logo 即得到该文件的 base64 内容;扩展名判断只决定 mime 标签,并不限制读取范围。
- medium未鉴权 HTTP 路由可修改设置、桌面应用用户账号并触发打包
src/desktop-config.ts:345该路由对任何能访问 DSH web server 的客户端开放状态变更动作,既无鉴权也未使用插件自带的 PERMISSION_KEYS 模型(只套了一个兜底 500 的 guard)。攻击者可新增任意权限账号或删除账号(影响打包应用的登录门)、改写捆包插件/模型选择,并可通过 POST /api/desktop-config/package 传入任意 dshCheckoutDir/out 启动打包。
- low应用名未转义地拼进收集凭据的登录页
packaging/electron/main.js:290appName 来自 desktop.json(同样可经上面的未鉴权路由写入),被原样拼进 data: URL 登录页;该页无 CSP 且拥有 desktopAuth preload 桥。形如 `</h1><script>…</script>` 的值会在收集桌面应用账号密码的窗口中执行脚本,可窃取凭据或绕过登录。
- low主题色未经校验直接注入应用窗口 CSS
packaging/electron/main.js:363themeColor/backgroundColor 可为任意字符串(配置路由不做校验);含 `}` 的值会闭合 :root 块并向打包应用内渲染的 DSH 页面追加任意 CSS(界面伪装、强制加载远程资源/追踪)。影响局限于外壳窗口。
- low可创建空密码的桌面应用账号
src/desktop-config.ts:262当不提供密码时(UI 明确允许:`password: password || undefined`,提示“新增时留空则密码为空”),账号会以空字符串的 scrypt 哈希入库,打包应用的登录门对该用户接受空密码。
宿主半侧有两个中危问题:未鉴权的 /api/desktop-config 路由可经 logoPath 任意读文件、改用户账号并触发打包;Electron 模板拼接为低危。
口径:动态审计只会把风险往严重里判,不会把风险降下来(只升不降,不构成豁免);模型判错时由人工复核撤回,撤回后回到静态判定。合并判定 = 两层中更严的那一个。
免责声明:静态扫描与动态安全审计都是自动化分析,不构成安全保证。安装前请自行审查。
活跃度
最近提交 2026-09-04 · 活跃度:稳定
• 仓库创建: 2026-08-31
• 星标: ★ 1 · 复刻: 0
• 健康度: 稳定 — 近 90 天有提交
来源
作者 README
GitHub 原文 ↗展示作者仓库中的原始 README 内容,实时抓取、未做改写;优先加载中文版(README.zh-CN.md 等),无中文版时回退英文。
