🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

桌面客户端 RyensX/dsh-app

DeepSeek Harnessv0.0.1
RyensX58 天前有提交已提供中文文档扫描:含敏感能力

在桌面一键启动管理本地 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
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 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
预览分享卡片长什么样 ↓RyensX/dsh-app
分享 · DeepSeek Harness Hub
RyensX/dsh-app

在桌面一键启动管理本地 dsh 运行时

这是你的仓库?认领条目

回到顶部