在桌面一键启动管理本地 dsh 运行时
33.2/100
综合分
6
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;engines.node 要求 >=24.0.0,不满足 Node 22.19.0;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add RyensX/dsh-app该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 58 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;engines.node 要求 >=24.0.0,不满足 Node 22.19.0;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-app @ 0.0.1
✗Node 引擎要求 >=24.0.0 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/17 10:24:09
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 51 处,展示前 50 条)
- 发起网络请求plugins/dsh-app-about/src/index.ts:80
const response = await fetch(RELEASES_API, { - 读取本地文件plugins/dsh-app-about/src/installer.ts:52
if (existsSync(destination)) return destination - 写入本地文件plugins/dsh-app-about/src/installer.ts:54
mkdirSync(directory, { recursive: true, mode: 0o700 }) - 发起网络请求plugins/dsh-app-about/src/installer.ts:57
const response = await fetch(url, { - 写入本地文件plugins/dsh-app-about/src/installer.ts:67
createWriteStream(temporary, { flags: 'wx', mode: 0o700 }), - 写入本地文件plugins/dsh-app-about/src/installer.ts:69
renameSync(temporary, destination) - 删除本地文件plugins/dsh-app-about/src/installer.ts:72
rmSync(temporary, { force: true }) - 执行外部命令固定命令plugins/dsh-app-about/src/installer.ts:79
? spawn('open', [path], { detached: true, stdio: 'ignore' }) - 执行外部命令来自配置/变量plugins/dsh-app-about/src/installer.ts:80
: spawn(path, [], { detached: true, stdio: 'ignore', windowsHide: false }) - 写入本地文件plugins/dsh-app-about/src/installer.ts:89
mkdirSync(dirname(path), { recursive: true, mode: 0o700 }) - 写入本地文件plugins/dsh-app-about/src/installer.ts:91
writeFileSync(temporary, `${JSON.stringify({ - 删除本地文件plugins/dsh-app-about/src/installer.ts:96
rmSync(path, { force: true }) - 写入本地文件plugins/dsh-app-about/src/installer.ts:97
renameSync(temporary, path) - 读取本地文件plugins/dsh-app-about/src/update-state.ts:39
if (!existsSync(path)) return emptyUpdateState() - 读取本地文件plugins/dsh-app-about/src/update-state.ts:41
const value = JSON.parse(readFileSync(path, 'utf8')) as unknown - 写入本地文件plugins/dsh-app-about/src/update-state.ts:49
mkdirSync(dirname(path), { recursive: true, mode: 0o700 }) - 写入本地文件plugins/dsh-app-about/src/update-state.ts:52
writeFileSync(temporary, `${JSON.stringify(state, null, 2)}\n`, { flag: 'wx', mode: 0o600 }) - 写入本地文件plugins/dsh-app-about/src/update-state.ts:56
renameSync(path, backup) - 写入本地文件plugins/dsh-app-about/src/update-state.ts:61
renameSync(temporary, path) - 删除本地文件plugins/dsh-app-about/src/update-state.ts:62
rmSync(backup, { force: true }) - 删除本地文件plugins/dsh-app-about/src/update-state.ts:64
rmSync(temporary, { force: true }) - 写入本地文件plugins/dsh-app-about/src/update-state.ts:66
try { renameSync(backup, path) } catch {} - 读取本地文件plugins/dsh-app-runtime/src/index.ts:140
else if (this.operation.state === 'ready' && !existsSync(pendingActionPath())) { - 执行外部命令来自配置/变量plugins/dsh-app-runtime/src/index.ts:264
return spawn( - 读取本地文件plugins/dsh-app-runtime/src/index.ts:296
const value = JSON.parse(readFileSync(pendingActionPath(), 'utf8')) as { - 写入本地文件plugins/dsh-app-runtime/src/index.ts:374
mkdirSync(dirname(path), { recursive: true, mode: 0o700 }) - 写入本地文件plugins/dsh-app-runtime/src/index.ts:377
writeFileSync(temporary, `${JSON.stringify(value, null, 2)}\n`, { mode: 0o600 }) - 写入本地文件plugins/dsh-app-runtime/src/index.ts:381
renameSync(path, backup) - 写入本地文件plugins/dsh-app-runtime/src/index.ts:386
renameSync(temporary, path) - 删除本地文件plugins/dsh-app-runtime/src/index.ts:387
rmSync(backup, { force: true }) - 删除本地文件plugins/dsh-app-runtime/src/index.ts:389
rmSync(temporary, { force: true }) - 写入本地文件plugins/dsh-app-runtime/src/index.ts:391
try { renameSync(backup, path) } catch {} - 写入本地文件plugins/dsh-app-runtime/src/launcher.ts:66
mkdirSync(cliRoot, { recursive: true, mode: 0o700 }) - 写入本地文件plugins/dsh-app-runtime/src/launcher.ts:69
chmodSync(cliRoot, 0o700) - 写入本地文件plugins/dsh-app-runtime/src/launcher.ts:73
writeFileSync(bootstrapPath, macTerminalBootstrap(cliRoot), { encoding: 'utf8', mode: 0o600 }) - 删除本地文件plugins/dsh-app-runtime/src/launcher.ts:74
rmSync(join(cliRoot, 'open-terminal.command'), { force: true }) - 写入本地文件plugins/dsh-app-runtime/src/launcher.ts:88
writeFileSync(commandPath, windowsCommand(binding), { encoding: 'utf8', mode: 0o600 }) - 写入本地文件plugins/dsh-app-runtime/src/launcher.ts:89
writeFileSync(bootstrapPath, windowsBootstrap(cliRoot), { encoding: 'utf8', mode: 0o600 }) - 写入本地文件plugins/dsh-app-runtime/src/launcher.ts:112
writeFileSync(path, content, { encoding: 'utf8', mode: 0o700 }) - 执行外部命令来自配置/变量plugins/dsh-app-runtime/src/launcher.ts:178
const child = spawn(launch.executable, [...launch.args], { - 执行外部命令来自配置/变量plugins/dsh-app-runtime/src/launcher.ts:192
execFile(launch.executable, [...launch.args], { windowsHide: false }, (error) => { - 读取本地文件plugins/dsh-app-runtime/src/runtime-channel.ts:30
if (!existsSync(path)) return { schemaVersion: 1 } - 读取本地文件plugins/dsh-app-runtime/src/runtime-channel.ts:32
const value = JSON.parse(readFileSync(path, 'utf8')) as unknown - 写入本地文件plugins/dsh-app-runtime/src/runtime-channel.ts:41
mkdirSync(dirname(path), { recursive: true, mode: 0o700 }) - 写入本地文件plugins/dsh-app-runtime/src/runtime-channel.ts:44
writeFileSync(temporary, `${JSON.stringify(value, null, 2)}\n`, { flag: 'wx', mode: 0o600 }) - 写入本地文件plugins/dsh-app-runtime/src/runtime-channel.ts:48
renameSync(path, backup) - 写入本地文件plugins/dsh-app-runtime/src/runtime-channel.ts:53
renameSync(temporary, path) - 删除本地文件plugins/dsh-app-runtime/src/runtime-channel.ts:54
rmSync(backup, { force: true }) - 删除本地文件plugins/dsh-app-runtime/src/runtime-channel.ts:56
rmSync(temporary, { force: true }) - 写入本地文件plugins/dsh-app-runtime/src/runtime-channel.ts:58
try { renameSync(backup, path) } catch {}
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 一键启动本地运行时
- 管理本地运行时
DSH App 是轻量、稳定、易用的 deepseek-harness 桌面客户端,基于 Tauri2 开发。
README
由 DeepSeek 最新模型翻译生成DSH App
DSH App 是 deepseek-harness 的桌面客户端,基于 Tauri2 开发。
目标是为 dsh 提供稳定且易用的客户端环境,除了壳本身,其他功能都是基于标准 DSH 开发,不会修改 dsh,100% 兼容,还可自由更新 dsh 源码跟进官方更新。
目前支持 macOS arm64/x64 和 Windows x64,提供两个打包类型版本:
- Bundled:开箱即用,包含固定版本的官方 Node 发行版,以及基于子模块提交构建的生产环境 dsh 运行时(也支持自由更新)。
- Lite:体积小,不包含 Node 和 dsh。它会优先使用兼容的系统 Node;若不可用,则下载同一固定版本的官方 Node;启动时会自动拉取 dsh 源码编译。
两个版本共用应用标识符、用户数据、托管的 dsh 更新和内置应用插件,可自由覆盖安装。
项目隔一段时间会发布 release,希望随时体验新改进也可打开每次 push 的 CI 下载自动构建的包。
macOS 用户首次启动前请阅读 macOS 首次启动授权指南。
功能
- 桌面化运行:自动启动并管理本地 dsh,支持 macOS 和 Windows。
- 双版本选择:Bundled 开箱即用;Lite 体积更小,可复用系统 Node 和直接使用 dsh 线上源码。
展开完整文档(README 剩余 1 节)
DSH App DSH App 是 deepseek-harness 的桌面客户端,基于 Tauri2 开发。 目标是为 dsh 提供稳定且易用的客户端环境,除了壳本身,其他功能都是基于标准 DSH 开发,不会修改 dsh,100% 兼容,还可自由更新 dsh 源码跟进官方更新。 目前支持 macOS arm64/x64 和 Windows x64,提供两个打包类型版本: - Bundled:开箱即用,包含固定版本的官方 Node 发行版,以及基于子模块提交构建的生产环境 dsh 运行时(也支持自由更新)。 - Lite:体积小,不包含 Node 和 dsh。它会优先使用兼容的系统 Node;若不可用,则下载同一固定版本的官方 Node;启动时会自动拉取 dsh 源码编译。 两个版本共用应用标识符、用户数据、托管的 dsh 更新和内置应用插件,可自由覆盖安装。 项目隔一段时间会发布 release,希望随时体验新改进也可打开每次 push 的 CI 下载自动构建的包。 macOS 用户首次启动前请阅读 macOS 首次启动授权指南。 功能 - 桌面化运行:自动启动并管理本地 dsh,支持 macOS 和 Windows。 - 双版本选择:Bundled 开箱即用;Lite 体积更小,可复用系统 Node 和直接使用 dsh 线上源码。 - dsh 运行时更新:支持稳定版与最新版通道,可在 App 内检查、安装、重启生效或还原(在设置里 App 运行时 中使用)。 - 数据统一保存:配置、凭据、会话与工作区都放在非程序目录下,覆盖安装和卸载都不会丢失数据。 - 精选内置插件:内置精选 dsh 插件,增强功能与使用体验。 开发 git submodule update --init --recursive corepack pnpm@11.7.0 install --frozen-lockfile pnpm dev:bundled pnpm dev:lite 请在对应的原生运行器上构建未签名安装包: node scripts/build-app.mjs \ --edition bundled \ --target aarch64-apple-darwin \ --formal false 支持的目标三元组为 aarch64-apple-darwin、x86_64-apple-darwin 和 x86_64-pc-windows-msvc。最终安装包统一输出到 .build/installers/,命名为 dsh-app----.;Tauri 的 target/.../bundle/ 仅作为构建临时目录。GitHub Actions 会在每次 push 时为所有原生目标和 edition 自动打包。 验证 pnpm check node scripts/verify-resources.mjs pnpm test:integration pnpm test:integration:managed 解包应用程序包后: node scripts/verify-artifact.mjs --edition bundled --path /path/to/app node scripts/verify-artifact.mjs --edition lite --path /path/to/app Lite 验证器会拒绝任何 Node 可执行文件和 dsh 运行时;Bundled 验证器要求两者都存在,并检查内嵌提交是否与子模块基线一致。 用户目录 macOS: ~/.dsh-app/ Windows: %USERPROFILE%\.dsh-app\ .dsh-app/ ├── profile/ # DSH_HOME ├── workspace/ # dsh 初始工作目录 ├── logs/dsh.log # 10 MiB,保留五份备份 ├── config.json # 应用偏好设置,包括运行时通道 ├── app-update.json # App Release 检查缓存和已忽略版本 ├── updates// # 已下载、等待用户打开的 App 安装包 ├── window-state.json # 记忆的窗口大小和位置 ├── lite.json # 可选的显式 Lite Node 路径 └── runtime/ ├── dsh/ │ ├── source/ # 持久化 Git 工作区 │ ├── cache/ # 可复用的包管理器缓存 │ ├── staging/ # 仅用于待发布的生产运行时 │ └── installs/ # 已发布的托管运行时 ├── node//-/ # Lite 托管的备用 Node ├── control/ ├── pending-action.json └── plugins.patch.json 配置、凭据、会话、生成的补丁和工作区绝不会写入应用程序包。删除托管 dsh 不会删除用户数据。 友链 LinuxDo dsh-market dsh-message-fold dsh-message-navigation dsh-resize dsh-remote-gateway 许可证 GNU Affero General Public License version 3
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
RyensX/dsh-app
在桌面一键启动管理本地 dsh 运行时
相关插件 · 对话 / 记忆
上下文中枢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
这是你的仓库?认领条目