轻量、自包含的 DeepSeek Harness 桌面宿主,以及原生 iPhone 与 Android Remote。
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
dsh plugin --profile web add chokwinlee/deepseek-harness-desktop状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
安装兼容性检查需源码安装要求 dsh 0.1.5-rc.2,而最新版为 0.2.1-rc.5;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 17:38:42
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
查看扫描证据(共 46 处,展示前 39 条)
- 读取本地文件src/desktop-preferences.ts:18
const parsed = JSON.parse(await readFile(path, 'utf8')) as unknown - 写入本地文件src/desktop-preferences.ts:32
await mkdir(dirname(path), { recursive: true }) - 写入本地文件src/desktop-preferences.ts:34
await writeFile(temporary, `${JSON.stringify(preferences, null, 2)}\n`, 'utf8') - 写入本地文件src/desktop-preferences.ts:36
await rename(temporary, path) - 删除本地文件src/desktop-preferences.ts:40
await rm(path, { force: true }) - 写入本地文件src/desktop-preferences.ts:41
await rename(temporary, path) - 发起网络请求src/dsh-desktop-settings-plugin/lib/client.js:290
bridge?.request('status') - 发起网络请求src/dsh-desktop-settings-plugin/lib/client.js:324
bridge?.request('install-plugin', { spec: value }) - 发起网络请求src/dsh-desktop-settings-plugin/lib/client.js:333
bridge?.request('remove-plugin', { name }) - 发起网络请求src/dsh-desktop-settings-plugin/lib/client.js:380
bridge?.request('install-plugin', { spec: productStatus?.bundleSpec || product.packageName }) - 发起网络请求src/dsh-desktop-settings-plugin/lib/client.js:387
run: () => bridge?.request(product.configureAction) - 发起网络请求src/dsh-desktop-settings-plugin/lib/client.js:436
onClick: () => bridge?.request('restart-harness') - 发起网络请求src/dsh-desktop-settings-plugin/lib/remote-v1.js:113
const response = await handler.fetch(new Request('http://dsh.internal/api/$events/result', { - 发起网络请求src/dsh-desktop-settings-plugin/lib/rpc.js:6
const response = await fetch(url, { redirect: 'manual', signal: AbortSignal.timeout(10_000) }) - 发起网络请求src/dsh-desktop-settings-plugin/lib/rpc.js:14
const response = await fetch(new URL(`/api/${method}`, connection.origin), { - 读取本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:13
for (const entry of await readdir(directory, { withFileTypes: true })) { - 读取本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:17
if (entry.isSymbolicLink()) entries.push({ path: name, link: await readlink(path) }) - 读取本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:19
else if (entry.isFile()) entries.push({ path: name, sha256: hash(await readFile(path)) }) - 写入本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:27
await mkdir(home, { recursive: true, mode: 0o700 }) - 写入本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:29
await mkdir(parent, { recursive: true, mode: 0o700 }) - 读取本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:32
const receipt = JSON.parse(await readFile(join(destination, 'backup.json'), 'utf8')) - 读取本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:35
if (item.sha256 && hash(await readFile(join(destination, 'data', item.path))) !== item.sha256) throw new Error(`Upgrade backup is damaged: ${item.path - 写入本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:40
await mkdir(join(stage, 'data'), { recursive: true, mode: 0o700 }) - 写入本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:46
await mkdir(join(destinationFile, '..'), { recursive: true, mode: 0o700 }) - 写入本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:47
await copyFile(join(home, item.path), destinationFile, constants.COPYFILE_EXCL) - 写入本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:48
await chmod(destinationFile, 0o600) - 读取本地文件src/dsh-desktop-settings-plugin/lib/upgrade.js:49
if (hash(await readFile(destinationFile)) !== item.sha256) throw new Error(`Data changed during backup: ${item.path}`) - 删除本地文件递归src/dsh-desktop-settings-plugin/lib/upgrade.js:55
} finally { await rm(stage, { recursive: true, force: true }) } - 执行外部命令来自配置/变量src/harness-supervisor.ts:73
const child = spawn( - 读取本地文件src/main.ts:203
const manifest = JSON.parse(await readFile(manifestPath, 'utf8')) as { version?: string } - 读取本地文件src/main.ts:208
const manifest = JSON.parse(await readFile(resolveDshManifest(), 'utf8')) as { version?: string } - 读取本地文件src/main.ts:217
readFile(join(app.getAppPath(), UPDATER_SCRIPT_RELATIVE), 'utf8'), - 读取本地文件src/main.ts:235
readFile(join(app.getAppPath(), SMOOTH_STREAM_SCRIPT_RELATIVE), 'utf8'), - 读取本地文件src/main.ts:253
const script = await readFile(join(app.getAppPath(), SELECTION_GUARD_SCRIPT_RELATIVE), 'utf8') - 写入剪贴板src/remote.js:1200
await navigator.clipboard.writeText(pairingURL || endpoint) - 发起网络请求src/updater.js:759
const response = await fetch(API_URL, { - 发起网络请求src/usage-meter.js:370
return fetch(`/api/${method}`, { - 发起网络请求src/usage-meter.js:394
const response = await fetch(OPENROUTER_MODELS_URL, { cache: 'force-cache', mode: 'cors' }) - 写入剪贴板src-tauri/ui/startup-error.js:101
await navigator.clipboard.writeText(text)
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
@deepseek-ai/cordis-plugin-group@deepseek-ai/dsh@deepseek-ai/dsh-anonymous-user-id@deepseek-ai/dsh-api-gateway@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh-attachment@deepseek-ai/dsh-authorization@deepseek-ai/dsh-bash-local@deepseek-ai/dsh-client-ui-settings-models@deepseek-ai/dsh-code-runtime@deepseek-ai/dsh-compaction@deepseek-ai/dsh-fs给这个插件打分还没有人投票↓
界面预览
6 张 · 点击查看大图功能亮点
- 桌面宿主运行
- iPhone远程源码预览
紧凑的 DeepSeek Harness 桌面宿主,带原生 SwiftUI iPhone 远程源码预览。
README
由 DeepSeek 最新模型翻译生成展开完整文档(README 剩余 1 节)
DSH Desktop 轻量、自包含的 DeepSeek Harness 桌面宿主,以及原生 iPhone 与 Android Remote。 下载 · 核心能力 · iPhone Remote · Android Remote · 开发 · 参与贡献 · 简体中文 DSH Desktop macOS DMG 安装包约 100 MB,完整内置 Harness 运行时。 DSH Desktop 把官方 DeepSeek Harness Web UI 和运行时放进桌面窗口。本仓库还包含 DSH Remote 原生 iPhone 与 Android 配套 App,用于继续查看电脑项目、会话和运行任务。当前构建使用 @deepseek-ai/dsh@0.1.5-rc.2,侧边栏会同时显示桌面版与内置 Harness 版本。桌面应用会自动管理本机 Harness 进程,用户无需另外安装 Node.js,也不用手动启动 dsh web。 迁移与恢复说明 [!IMPORTANT] 这是独立社区项目,与 DeepSeek AI 官方产品无关。DeepSeek Harness 仍处于开发者预览阶段,后续版本可能包含不兼容改动。 核心能力 - 多模态会话 所选服务商与模型声明支持图片输入后,可以直接粘贴或附加图片,并沿用 Harness 的标准会话流程。图片消息会保留在会话历史中。 - macOS 用量统计 无需离开当前会话,即可查看今日与近七天 Token、估算费用、运行任务数和合计吞吐率。 - 轻巧的 macOS 安装包 约 100 MB,完整内置 Harness 运行时;采用 Tauri 并复用系统自带的 WKWebView,无需另外打包 Chromium。 - 内置版本明确 侧边栏同时标明桌面版与内置 Harness 版本,例如 DSH Desktop v0.5.0 · Harness 0.1.5-rc.2。 - 开箱即用 启动 Harness 所需的内容已经完整内置,无需另装 Node.js,也不用执行终端命令。应用会自动启动和关闭本地运行时。 - 原生手机 Remote SwiftUI iPhone 客户端与 Kotlin/Compose Android 客户端可在受信任的同一 Wi-Fi 或用户自己的 Tailscale 网络中配对,随后浏览项目、新建会话、引导任务、处理审批、发送图片并跟进子代理;执行始终留在电脑上。 费用来自本地 Token 记录和可用的公开模型价格,只作为估算。无法匹配价格的模型会明确显示为未定价,不会被当作免费。 多模态与用量统计 多模态会话与用量统计 Harness rc.8 的真实图片输入会话,同时展开 Token 与费用统计,模型通过 OpenRouter 使用 google/gemini-2.5-flash-lite。 标题栏会持续显示精简摘要。展开后可以查看输入、输出、缓存、费用和实时吞吐率。用量根据本地 Harness 会话记录计算,估算费用采用可用的公开模型价格。 iPhone Remote(TestFlight 内测) [!IMPORTANT] DSH Remote 已开放 iPhone 公开内测,可通过 TestFlight加入。 同一 Wi-Fi 配对 · 项目与运行会话 · 审批处理 DSH Remote 是用户自己拥有或管理的 DSH Desktop 电脑的原生 SwiftUI 配套 App。手机不运行 Agent、仓库、终端或模型服务商;任务仍在电脑执行,iPhone 只提供窄控制面。 iOS TestFlight 内测版会跟随设备为 App 选择的语言,目前已完整覆盖英文与简体中文,包括设置、错误、通知、审批、模型、轨迹和子代理流程。 - 同一 Wi-Fi(推荐) Desktop 在用户明确开启后提供带认证的局域网入口,不需要 Tailscale 账号。 - 离开本地网络 两台设备加入用户自己的 Tailnet,Desktop 自动配置私有的 Tailscale Serve HTTPS 入口;不要使用 Funnel。 - 没有项目方中继 代码、提示词、模型凭据、工具执行和会话历史都留在用户电脑。 通过 TestFlight 安装 1. 在运行 iOS 17 或更高版本的 iPhone 安装 Apple 的 TestFlight App。 2. 打开 DSH Remote 公开邀请链接,选择“在 TestFlight 中查看”,接受邀请并安装。 3. 配对前,在电脑安装当前 DSH Desktop 正式版。 使用 Xcode 从源码安装 开发者也可以使用 Xcode 把源码安装到自己的 iPhone: 1. 在 Mac 安装 Xcode 16 或更高版本,并在 Xcode → Settings → Accounts 登录 Apple Account。 2. Clone 本仓库,打开 ios/DSHRemote/DSHRemote.xcodeproj。 3. 选择 DSHRemote target,在 Signing & Capabilities 中选择自己的 Team;如果自动签名提示冲突,请换成自己的唯一 Bundle Identifier。 4. 连接运行 iOS 17 或更高版本的 iPhone,选择该设备,然后执行 Product → Run。 免费 Apple Account 可以通过 Xcode Personal Team 在自己的设备上测试,但需要定期重新签名。从 GitHub 下载未签名或与设备不匹配的 IPA 无法直接安装。 配对和使用 Remote 1. 安装并打开最新 DSH Desktop。 2. 在 Desktop 打开 设置 → 通用 → 手机 Remote → 连接手机。 3. 同一受信任 Wi-Fi 下开启本地配对,并在 DSH Remote 扫描二维码。 4. 使用蜂窝网络或其他外网时,在 Desktop 或 iPhone 打开内置 Tailscale 教程,开启跨网络连接,再扫描 HTTPS 二维码。 5. 进入项目,新建或继续会话;所有执行仍由电脑完成。 进一步阅读:iOS TestFlight 与源码安装说明、Tailscale 中文教程、隐私政策、支持说明和 App Review 说明。 Android Remote(GitHub 正式版) [!IMPORTANT] v0.4.0 是首个提供签名 Android APK 的 GitHub 正式版,要求 Android 8.0 或更高版本,并需要同一 Release 中配套的 DSH Desktop。当前尚未通过 Google Play 分发。 本地优先配对与离线 Demo · 对话、队列和审批控制 Android 与 iOS 复用相同的本地优先 Remote v1 协议、二维码格式、Desktop LAN 代理和 Tailscale HTTPS 流程。当前实现包括加密多电脑存储、项目和会话、完整对话与轨迹、queue/steer、审批与结构化问题、图片与引用、模型、Goal/Plan、多层子代理、本地通知、离线 Demo、英文、简体中文、深色外观和 TalkBack 语义。 安装步骤: 1. 打开 v0.5.0 正式版页面,在电脑安装该页面提供的 Desktop 包。 2. 在 Android 8.0 或更高版本的设备下载 DSH-Remote-Android-v0.5.0.apk。系统询问时,可以临时为打开文件的浏览器或文件管理器允许“安装未知应用”。 3. 把 APK 的 SHA-256 与同一 Release 中 SHA256SUMS.txt 的对应记录进行比较。 4. 先体验离线 Demo,或在 Desktop 选择 设置 → 通用 → 手机 Remote → 连接手机 并扫描二维码。 同一 Wi-Fi 直连带认证但没有加密,只能用于受信任的私有网络。使用蜂窝网络、异地网络或不受信任的 Wi-Fi 时,请改用私有 Tailscale Serve HTTPS,绝对不要使用 Funnel。相机和通知权限均为可选。二维码图像只在设备端处理,但内置的 Google ML Kit 扫描组件会向 Google 发送隐私政策所述的诊断与使用指标。 电脑必须保持在线并运行 Desktop 与 Harness。本地通知只提供尽力提醒,设备差异和已知边界记录在 Android 指南中。完整说明见 Android 中文安装与支持指南、英文指南、支持说明和平台中立 Remote 协议。 下载 Desktop 安装包和 Android APK 均位于最新稳定 GitHub Release。iPhone 可安装版本通过公开 TestFlight 内测提供。 | 当前稳定版 | 架构 | 文件 | | macOS | Apple Silicon | DSH-Desktop-0.5.0-mac-arm64.dmg | | macOS | Intel | DSH-Desktop-0.5.0-mac-x64.dmg | | Windows 10/11 | x64 安装版 | DSH-Desktop-0.5.0-win-x64.exe | | Windows 10/11 | x64 便携版 | DSH-Desktop-0.5.0-win-x64.zip | | Android 8.0+ | 通用 APK | DSH-Remote-Android-v0.5.0.apk | | iPhone,iOS 17+ | 公开内测 | TestFlight 邀请链接 | 正式版还提供 macOS ZIP 与用于完整性校验的 SHA256SUMS.txt。GitHub 不提供通用 iOS IPA。 Desktop 快速开始 1. 安装并打开 DSH Desktop。 2. 进入 设置 → 模型,配置模型服务商和 API Key。 3. 添加或选择工作区。 4. 新建 Harness 会话。 5. 所选模型支持图片输入时,粘贴或附加一张图片。 配置、工作区和会话与官方 CLI 使用相同的 DSH_HOME,默认位于 ~/.dsh。 插件与恢复 在 macOS 打开 设置 → 插件 → 安装与管理。安装器接受 npm 包、github:owner/repo、公开 GitHub HTTPS 地址,也可以直接粘贴下面的完整命令。 dsh plugin --profile web add github:owner/repo 桌面端只解析受支持的安装命令,不会通过 shell 执行粘贴的文本,并会确认 Harness 能否正常重启。启动失败时,应用会恢复之前的插件配置。第三方插件会在本机运行代码,安装前请检查来源与发布者。 架构 iPhone Remote ── 带认证的同一 Wi-Fi / Tailnet HTTPS ──┐ Android Remote ─ 带认证的同一 Wi-Fi / Tailnet HTTPS ──┤ ↓ 桌面宿主 ─────────────→ 仅回环地址的 dsh web → 官方 Harness UI / 运行时 └───────────────── 共用 DSH_HOME,保存设置、会话和插件 本项目不分叉或重新实现 Harness agent 运行时,只负责桌面打包、进程生命周期、导航边界、故障恢复、原生集成和发行验证。 开发 开发环境需要 Node.js 22.19 或更高版本。 git clone https://github.com/chokwinlee/deepseek-harness-desktop.git cd deepseek-harness-desktop npm ci npm test npm start 运行 npm run build:mac 构建 macOS Tauri 发行包,运行 npm run dist 构建 Windows Electron 发行包。涉及打包的变更还应通过发行工作流中的真实运行时检查。 在 Xcode 中打开 ios/DSHRemote/DSHRemote.xcodeproj 即可构建 iOS 客户端。iOS App 没有第三方 package 依赖,要求 iOS 17 或更高版本。 使用 JDK 17 与 Android SDK 37 构建 Android 客户端: cd android ./gradlew testDebugUnitTest compileDebugAndroidTestKotlin lintDebug validateDebugScreenshotTest assembleDebug assembleRelease bundleRelease 项目 - 提交 Pull Request 前请阅读 CONTRIBUTING.md。 - 安全问题请按照 SECURITY.md 私下报告。 - 产品与界面决策遵循 PRODUCT.md。 - 桌面宿主采用 MIT 许可证;Harness 与内置依赖保留各自许可证,详见 THIRD_PARTY_NOTICES.md。
预览分享卡片长什么样 ↓
轻量、自包含的 DeepSeek Harness 桌面宿主,以及原生 iPhone 与 Android Remote。