把网页界面变成独立桌面窗口,支持多会话分离与托盘常驻
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装;安装清单取自 dsh-cleaner/package.json。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add cuteG41cute/dsh-desktop该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装;安装清单取自 dsh-cleaner/package.json
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-cleaner(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 22:22:09
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 163 处,展示前 55 条)
- 读取本地文件backup/dsh-file-history/host-contract-check.mjs:65
readFile(join(HERE, 'lib', 'index.js'), 'utf8'), - 发起网络请求backup/dsh-file-history/lib/client.js:19
return fetch(API, { - 写入本地文件backup/dsh-file-history/lib/index.js:180
await mkdir(dir, { recursive: true }) - 写入本地文件backup/dsh-file-history/lib/index.js:182
await writeFile(tmp, data) - 写入本地文件backup/dsh-file-history/lib/index.js:184
await rename(tmp, absPath) - 删除本地文件backup/dsh-file-history/lib/index.js:186
await rm(tmp, { force: true }).catch(() => {}) - 读取本地文件backup/dsh-file-history/lib/index.js:195
return await readFile(absPath) - 读取本地文件backup/dsh-file-history/lib/index.js:226
files = await readdir(metaDir) - 读取本地文件backup/dsh-file-history/lib/index.js:236
meta = JSON.parse(await readFile(sidecarPath, 'utf8')) - 读取本地文件backup/dsh-file-history/lib/index.js:241
const content = await stat(meta.backupPath).then( - 读取本地文件backup/dsh-file-history/lib/index.js:263
sigs = await readdir(dir, { withFileTypes: true }) - 读取本地文件backup/dsh-file-history/lib/index.js:273
ids = await readdir(sigDir) - 删除本地文件backup/dsh-file-history/lib/index.js:382
await rm(entry.backupPath, { force: true }).catch(() => {}) - 删除本地文件backup/dsh-file-history/lib/index.js:383
await rm(path.join(entry.dir, META_DIR_NAME, sidecarName(entry.backupName)), { force: true }).catch(() => {}) - 删除本地文件backup/dsh-file-history/lib/index.js:415
await rm(current, { recursive: false, force: true }).catch(() => {}) - 删除本地文件递归backup/dsh-file-history/lib/index.js:440
await rm(entryDir, { recursive: true, force: true }).catch(() => {}) - 写入本地文件backup/dsh-file-history/lib/index.js:483
await writeFile( - 写入本地文件backup/dsh-file-history/lib/index.js:537
await mkdir(path.dirname(manifestPath), { recursive: true }) - 写入本地文件backup/dsh-file-history/lib/index.js:538
await appendFile(manifestPath, `${JSON.stringify(record)}\n`, 'utf8') - 删除本地文件backup/dsh-file-history/lib/index.js:1014
await rm(entry.backupPath, { force: true }).catch(() => {}) - 读取本地文件backup/dsh-file-history/selftest.mjs:197
const files = await readdir(metaDir).catch(() => []) - 读取本地文件backup/dsh-file-history/selftest.mjs:202
const meta = JSON.parse(await readFile(path.join(metaDir, name), 'utf8')) - 读取本地文件backup/dsh-file-history/selftest.mjs:214
workspaces = await readdir(mod.HISTORY_DIR, { withFileTypes: true }) - 读取本地文件backup/dsh-file-history/selftest.mjs:220
const sigs = await readdir(path.join(mod.HISTORY_DIR, workspace.name), { withFileTypes: true }).catch(() => []) - 读取本地文件backup/dsh-file-history/selftest.mjs:223
const ids = await readdir(path.join(mod.HISTORY_DIR, workspace.name, sig.name)).catch(() => []) - 读取本地文件backup/dsh-file-history/selftest.mjs:227
const meta = JSON.parse(await readFile(metaPath, 'utf8')) - 写入本地文件backup/dsh-file-history/selftest.mjs:245
await writeFile(target, 'line1\nline2\nline3\n', 'utf8') - 写入本地文件backup/dsh-file-history/selftest.mjs:261
await mkdir(path.dirname(nested), { recursive: true }) - 写入本地文件backup/dsh-file-history/selftest.mjs:262
await writeFile(nested, 'export const v = 0\n', 'utf8') - 写入本地文件backup/dsh-file-history/selftest.mjs:271
await writeFile(target, 'line1\nCHANGED\nline3\nline9\n', 'utf8') - 写入本地文件backup/dsh-file-history/selftest.mjs:283
await writeFile(fileA, 'A0\n', 'utf8') - 写入本地文件backup/dsh-file-history/selftest.mjs:284
await writeFile(fileB, 'B0\n', 'utf8') - 删除本地文件递归backup/dsh-file-history/selftest.mjs:369
await rm(gitProject, { recursive: true, force: true }).catch(() => {}) - 删除本地文件递归backup/dsh-file-history/selftest.mjs:387
await rm(outerRepo, { recursive: true, force: true }).catch(() => {}) - 删除本地文件递归backup/dsh-file-history/selftest.mjs:470
await rm(project, { recursive: true, force: true }).catch(() => {}) - 删除本地文件递归backup/dsh-file-history/selftest.mjs:471
await rm(outsideDir, { recursive: true, force: true }).catch(() => {}) - 发起网络请求dsh-cleaner/lib/client.js:20
return fetch('/dsh-cleaner/api', { - 写入本地文件dsh-cleaner/lib/index.js:82
mkdirSync(dirname(dest), { recursive: true }) - 写入本地文件dsh-cleaner/lib/index.js:84
renameSync(src, dest) - 删除本地文件递归dsh-cleaner/lib/index.js:89
rmSync(src, { recursive: true, force: true }) - 读取本地文件dsh-cleaner/lib/index.js:114
if (!existsSync(legacy)) return - 写入本地文件dsh-cleaner/lib/index.js:116
mkdirSync(bin, { recursive: true }) - 读取本地文件dsh-cleaner/lib/index.js:117
for (const name of readdirSync(legacy, { withFileTypes: true })) { - 读取本地文件dsh-cleaner/lib/index.js:120
if (existsSync(to)) rmSync(from, { recursive: true, force: true }) - 删除本地文件递归dsh-cleaner/lib/index.js:120
if (existsSync(to)) rmSync(from, { recursive: true, force: true }) - 写入本地文件dsh-cleaner/lib/index.js:121
else renameSync(from, to) - 删除本地文件递归dsh-cleaner/lib/index.js:123
try { rmSync(join(dshHome(), 'trash'), { recursive: true, force: true }) } catch { } - 读取本地文件dsh-cleaner/lib/index.js:138
const raw = readFileSync(file, 'utf8') - 读取本地文件dsh-cleaner/lib/index.js:178
if (!sessionId || !existsSync(root)) return found - 读取本地文件dsh-cleaner/lib/index.js:179
for (const wsDir of readdirSync(root, { withFileTypes: true })) { - 写入本地文件dsh-cleaner/lib/index.js:221
mkdirSync(bin, { recursive: true }) - 写入本地文件dsh-cleaner/lib/index.js:224
mkdirSync(entryDir, { recursive: true }) - 删除本地文件递归dsh-cleaner/lib/index.js:720
try { rmSync(entryDir, { recursive: true, force: true }) } catch { } - 删除本地文件递归dsh-cleaner/lib/index.js:733
try { rmSync(entryDir, { recursive: true, force: true }) } catch { } - 删除本地文件递归dsh-cleaner/lib/index.js:787
try { rmSync(projectDir, { recursive: true, force: true }) } catch { }
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 网页界面转独立窗口
- 多会话独立窗口
- 系统托盘常驻
README
由 DeepSeek 最新模型翻译生成DeepSeek Harness 工作区
DeepSeek Harness 桌面版
本仓库存放 DeepSeek Harness 桌面版的源码与打包产物(GitHub:<https://github.com/cuteG41cute/dsh-desktop>)。
这个文件夹同时也是本机的 DeepSeek Harness 工作目录,所以除了仓库内容,还有几个由 harness / 其他项目生成的目录(见下表,均已 gitignore)。
目录一览
| 路径 | 内容 |
| dsh-desktop/ | 桌面版的全部内容:Windows(WebView2 包装程序 + 启动器 + 安装程序)与 Linux(GTK/WebKitGTK)版源码、打包脚本、构建产物 dist/。桌面版相关的开发都在这里进行。 |
| backup/dsh-file-history/ | 「改前自动备份」插件(随本仓库一起管理的小项目) |
| dsh-mobile-app/ | 手机端安卓 App:把本机 WebUI 包成 App(无 Gradle/无 AndroidX 的纯 SDK 构建链)。
展开完整文档(README 剩余 1 节)
DeepSeek Harness 工作区 DeepSeek Harness 桌面版 本仓库存放 DeepSeek Harness 桌面版的源码与打包产物(GitHub:<https://github.com/cuteG41cute/dsh-desktop>)。 这个文件夹同时也是本机的 DeepSeek Harness 工作目录,所以除了仓库内容,还有几个由 harness / 其他项目生成的目录(见下表,均已 gitignore)。 目录一览 | 路径 | 内容 | | dsh-desktop/ | 桌面版的全部内容:Windows(WebView2 包装程序 + 启动器 + 安装程序)与 Linux(GTK/WebKitGTK)版源码、打包脚本、构建产物 dist/。桌面版相关的开发都在这里进行。 | | backup/dsh-file-history/ | 「改前自动备份」插件(随本仓库一起管理的小项目) | | dsh-mobile-app/ | 手机端安卓 App:把本机 WebUI 包成 App(无 Gradle/无 AndroidX 的纯 SDK 构建链)。文档见 dsh-mobile-app/README.md | | share/dsh-mobile-bridge/ | 手机接入桥:局域网反向代理 + 会话 cookie 注入 + APK 分发(/__bridge、/__apk)。随开机自启 | | share/、skills/、api/ | DeepSeek Harness 运行时生成(插件/技能分发目录等,已 gitignore) | | dsh-time-stamp/ | 时间戳插件(独立 git 仓库,不在本仓库内) | | menmory logic/、.dsh/ | 用户与 harness 的运行数据 | | .tmp/ | 本机构建工具缓存(WiX 工具链等,已 gitignore) | 快速入口 - 桌面版文档:dsh-desktop/README.md(功能、目录结构、打包、常见问题) - 启动:双击 dsh-desktop/启动 DeepSeek Harness.vbs;安装后使用桌面上的「DeepSeek Harness」快捷方式 - 安装包:dsh-desktop/dist/,或下载 Releases - 手机端:dsh-mobile-app/README.md(App 构建/安装)+ share/dsh-mobile-bridge/README.md(接入桥原理与运维) - Linux 版:dsh-desktop/linux/README.md - 打包:dsh-desktop/msi/build-msi.ps1(Windows MSI)、dsh-desktop/linux/build/build-linux.py(deb + tar.gz) 许可 MIT,见 LICENSE。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
cuteG41cute/dsh-desktop
把网页界面变成独立桌面窗口,支持多会话分离与托盘常驻
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,025未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,358已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13938 个插件含 PR 收录与…
★ 350已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目