桌面工作台 yoshino-xiao7/deepseek-harness-desktop-yukiryou
DeepSeek HarnessDeepSeek Harness Desktop for macOS & Windows|面向 macOS 与 Windows 的独立 DeepSeek Harness 桌面工作台
29.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add yoshino-xiao7/deepseek-harness-desktop-yukiryou该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 35 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包deepseek-harness-desktop-yukiryou(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/7 10:41:05
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 89 处,展示前 72 条)
- 读取密钥环境变量runtime/desktop-companion-plugin/index.js:13
const expectedToken = process.env.DSH_DESKTOP_COMPANION_TOKEN ?? ''; - 发起网络请求runtime/desktop-market-plugin/client.js:223
const response = await fetch(`${route}?${params.toString()}`, { - 发起网络请求runtime/desktop-market-plugin/client.js:236
const response = await fetch(sourcesRoute, { method: 'GET', credentials: 'same-origin', cache: 'no-store' }); - 发起网络请求runtime/desktop-market-plugin/client.js:244
const response = await fetch(`${updateCheckRoute}?${params.toString()}`, { - 发起网络请求runtime/desktop-market-plugin/client.js:255
const response = await fetch(sourcesRoute, { - 发起网络请求runtime/desktop-market-plugin/client.js:266
const response = await fetch(inspectionRoute, { - 读取密钥环境变量runtime/desktop-market-plugin/index.js:58
const expectedPrivateToken = process.env.DSH_DESKTOP_COMPANION_TOKEN ?? ''; - 写入本地文件runtime/desktop-market-plugin/managed-installer.js:55
await mkdir(temporary, { mode: 0o700 }); - 写入本地文件runtime/desktop-market-plugin/managed-installer.js:87
await mkdir(packagePath, { recursive: true, mode: 0o700 }); - 写入本地文件runtime/desktop-market-plugin/managed-installer.js:90
await mkdir(dirname(target), { recursive: true, mode: 0o700 }); - 写入本地文件runtime/desktop-market-plugin/managed-installer.js:91
await writeFile(target, file.bytes, { - 写入本地文件runtime/desktop-market-plugin/managed-installer.js:117
await mkdir(dirname(linkPath), { recursive: true, mode: 0o700 }); - 写入本地文件runtime/desktop-market-plugin/managed-installer.js:130
await mkdir(dirname(linkPath), { recursive: true, mode: 0o700 }); - 删除本地文件递归runtime/desktop-market-plugin/managed-installer.js:163
await rm(temporary, { recursive: true, force: true }).catch(() => undefined); - 读取本地文件runtime/desktop-market-plugin/managed-installer.js:325
const root = await realpath(runtimeModulesRoot); - 读取本地文件runtime/desktop-market-plugin/managed-installer.js:329
resolved = await realpath(candidate); - 读取本地文件runtime/desktop-market-plugin/managed-installer.js:339
manifest = JSON.parse(await readFile(join(resolved, 'package.json'), 'utf8')); - 读取本地文件runtime/desktop-market-plugin/managed-installer.js:352
const metadata = await lstat(path); - 读取本地文件runtime/desktop-market-plugin/managed-installer.js:361
metadata = await lstat(path); - 读取本地文件runtime/desktop-market-plugin/managed-installer.js:370
const manifest = JSON.parse(await readFile(join(path, '.dsh-generation.json'), 'utf8')); - 读取本地文件runtime/desktop-market-plugin/runtime-snapshot.js:39
const bytes = await readFile(url); - 读取本地文件runtime/desktop-market-plugin/source-registry.js:115
const metadata = await lstat(path); - 读取本地文件runtime/desktop-market-plugin/source-registry.js:119
const encoded = await readFile(path, 'utf8'); - 读取本地文件runtime/desktop-market-plugin/source-registry.js:134
const rootMetadata = await lstat(root); - 写入本地文件runtime/desktop-market-plugin/source-registry.js:137
await writeFile(temporaryPath, encoded, { encoding: 'utf8', mode: 0o600, flag: 'wx' }); - 写入本地文件runtime/desktop-market-plugin/source-registry.js:138
await rename(temporaryPath, path); - 删除本地文件runtime/desktop-market-plugin/source-registry.js:140
await unlink(temporaryPath).catch(() => undefined); - 读取本地文件runtime/desktop-settings-plugin/index.js:23
const body = await readFile(BRAND_PATH); - 写入本地文件src/main/app-coordinator.ts:225
await mkdir(runtimeHome, { recursive: true, mode: 0o700 }); - 写入剪贴板src/main/app-coordinator.ts:1137
clipboard.writeText( - 读取本地文件src/main/app-coordinator.ts:1397
const manifest = JSON.parse(await readRecoveryFile(join(packageRoot, 'package.json'), 'utf8')) as { dsh?: { bundle?: { patch?: string } } }; - 读取本地文件src/main/app-coordinator.ts:1400
const entryIds = collectOwnedEntryIds(parseYaml(await readRecoveryFile(join(packageRoot, patch), 'utf8')), item.packageName); - 发起网络请求src/main/single-instance-lock.ts:23
if (options.request()) return true; - 写入本地文件src/main/user-data-location.test.ts:18
await expect(mkdir(result)).rejects.toMatchObject({ code: 'EEXIST' }); - 写入本地文件src/main/user-data-location.test.ts:24
await mkdir(legacy); - 写入本地文件src/main/user-data-location.test.ts:25
await writeFile(join(legacy, 'desktop.json'), 'preserved'); - 读取本地文件src/main/user-data-location.test.ts:30
await expect(readFile(join(result, 'desktop.json'), 'utf8')).resolves.toBe( - 读取本地文件src/main/user-data-location.test.ts:34
readFile(join(legacy, 'desktop.json'), 'utf8'), - 写入本地文件src/main/user-data-location.test.ts:42
await mkdir(legacy); - 写入本地文件src/main/user-data-location.test.ts:43
await mkdir(product); - 写入本地文件src/main/user-data-location.test.ts:44
await writeFile(join(legacy, 'session.json'), 'legacy-session'); - 读取本地文件src/main/user-data-location.test.ts:49
await expect(readFile(join(product, 'session.json'), 'utf8')).resolves.toBe( - 读取本地文件src/main/user-data-location.test.ts:52
await expect(readFile(join(product, 'Local State'), 'utf8')).resolves.toBe( - 读取本地文件src/main/user-data-location.test.ts:56
readFile(join(product, '.migrated-from-dsh-desktop'), 'utf8'), - 写入本地文件src/main/user-data-location.ts:15
await mkdir(productDirectory, { recursive: true, mode: 0o700 }); - 写入本地文件src/main/user-data-location.ts:28
await writeFile( - 写入本地文件src/main/user-data-location.ts:41
await mkdir(developmentDirectory, { recursive: true, mode: 0o700 }); - 读取本地文件src/main/user-data-location.ts:47
await stat(path); - 读取本地文件src/main/windows-release.test.ts:50
const builder = await readFile('electron-builder.yml', 'utf8'); - 读取本地文件src/main/windows-release.test.ts:57
const packageJson = JSON.parse(await readFile('package.json', 'utf8')) as { - 读取本地文件src/main/windows-release.test.ts:62
const updateConfig = await readFile('resources/app-update.yml', 'utf8'); - 读取本地文件src/preload/sandbox-contract.test.ts:6
const source = await readFile(new URL('./index.ts', import.meta.url), 'utf8'); - 读取本地文件src/preload/update-button-contract.test.ts:5
const preload = await readFile(new URL('./index.ts', import.meta.url), 'utf8'); - 读取本地文件src/preload/update-button-contract.test.ts:6
const client = await readFile(new URL('../../runtime/desktop-settings-plugin/client.js', import.meta.url), 'utf8'); - 写入剪贴板src/renderer/index.ts:98
writeClipboard(text: string): boolean; - 发起网络请求src/renderer/index.ts:302
const response = await companionBridge.request({ kind: 'overview' }); - 发起网络请求src/renderer/index.ts:507
const response = await companionBridge.request({ kind: 'file.search', query }); - 发起网络请求src/renderer/index.ts:582
const response = await companionBridge.request({ kind: 'directory.list', nodeId: node.id }); - 发起网络请求src/renderer/index.ts:594
const response = await companionBridge.request({ kind: 'file.preview', nodeId }); - 发起网络请求src/renderer/index.ts:602
const response = await companionBridge.request({ kind: 'file.preview-relative', nodeId, target }); - 发起网络请求src/renderer/index.ts:610
const response = await companionBridge.request({ kind: 'change.diff', nodeId }); - 写入剪贴板src/renderer/index.ts:655
if (companionBridge?.writeClipboard(transition.effect.text) !== true) return; - 写入剪贴板src/renderer/index.ts:833
if (companionBridge?.writeClipboard(text) === true) showReferenceFeedback(message); - 读取本地文件src/renderer/loading-brand-asset.test.ts:10
const html = await readFile(new URL('./index.html', import.meta.url), 'utf8'); - 读取本地文件src/renderer/loading-brand-asset.test.ts:15
const image = await readFile(join(rendererPublicDirectory, source!.slice(1))); - 读取本地文件src/renderer/startup-motion.test.ts:8
const css = await readFile(new URL('./styles.css', import.meta.url), 'utf8'); - 读取本地文件src/renderer/workspace-review-ui-contract.test.ts:7
readFile(new URL('./index.html', import.meta.url), 'utf8'), - 读取本地文件src/renderer/workspace-review-ui-contract.test.ts:8
readFile(new URL('./styles.css', import.meta.url), 'utf8'), - 读取本地文件src/renderer/workspace-review-ui-contract.test.ts:9
readFile(new URL('./index.ts', import.meta.url), 'utf8'), - 读取本地文件src/renderer/workspace-review-ui-contract.test.ts:26
const html = await readFile(new URL('./index.html', import.meta.url), 'utf8'); - 读取本地文件src/renderer/workspace-review-ui-contract.test.ts:34
const styles = await readFile(new URL('./styles.css', import.meta.url), 'utf8'); - 读取本地文件src/renderer/workspace-review-ui-contract.test.ts:44
readFile(new URL('./index.html', import.meta.url), 'utf8'),
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 独立工作台
README
由 DeepSeek 最新模型翻译生成DeepSeek YukiRyou — DeepSeek Harness Desktop for macOS & Windows
让 DeepSeek Harness 真正成为桌面应用。
面向 macOS 与 Windows 的独立工作台:内置运行时、Workspace Review、受管插件市场与可恢复的桌面生命周期。
简体中文 · English
下载最新版
安装指南
功能
本地开发
开发文档
反馈问题
⭐ Star 支持
维护模式(2026-09-29):DeepSeek Harness 官方已经提供可下载的 macOS 与 Windows 桌面版,并继续在官方仓库迭代。本项目暂停新的基础桌面壳功能,保留现有发行版、兼容性修复、安全修复和严重安装问题处理。请优先查看 官方 Harness Desktop Releases。完整说明见 docs/maintenance-mode.md。
展开完整文档(README 剩余 1 节)
DeepSeek YukiRyou — DeepSeek Harness Desktop for macOS & Windows 让 DeepSeek Harness 真正成为桌面应用。 面向 macOS 与 Windows 的独立工作台:内置运行时、Workspace Review、受管插件市场与可恢复的桌面生命周期。 简体中文 · English 下载最新版 安装指南 功能 本地开发 开发文档 反馈问题 ⭐ Star 支持 维护模式(2026-09-29):DeepSeek Harness 官方已经提供可下载的 macOS 与 Windows 桌面版,并继续在官方仓库迭代。本项目暂停新的基础桌面壳功能,保留现有发行版、兼容性修复、安全修复和严重安装问题处理。请优先查看 官方 Harness Desktop Releases。完整说明见 docs/maintenance-mode.md。 目录 - 维护模式 - 项目定位 - 下载与安装 - macOS - Windows - 校验下载文件 - 当前可用功能 - 为什么选择 YukiRyou - 界面布局概览 - 后续路线图 - 版本与更新 - 技术架构 - 本地开发 - 固定运行时 - 常见问题 - 文档导航 - 参与项目 维护模式(2026-09-29) 官方 DeepSeek Harness 已公开桌面发行版,并提供 macOS 与 Windows 安装包。官方桌面端现在负责 Harness 的基础桌面承载、运行时打包和插件管理;本项目不再继续扩展相同的基础桌面壳能力。 本仓库继续保留已发布的 DeepSeek YukiRyou 发行版及其历史代码,维护范围收窄为: - 官方 Harness 升级后的兼容性修复; - 严重启动、安装、升级和数据保留问题; - 现有公开版本的安全修复与用户迁移说明。 新功能、独立运行时分叉和与官方桌面端重复的基础能力暂不继续开发。需要使用官方版本时,请直接查看 官方 Releases 和 官方 Harness 项目。 项目定位 官方 DeepSeek Harness 现在同时提供 Web UI 和桌面版。本项目最初将 Harness Web UI、固定运行时、进程生命周期和发行更新收进一个可安装的跨平台桌面应用,并在官方界面之外补足账户状态、工作区文件和变更审核等桌面能力。 它不是 Harness 的重写版本,也不会改变 Agent 的工作方式。基础桌面壳能力现已进入维护模式,历史实现和已发布版本继续保留。 当前支持 Apple Silicon macOS 14+ 与 Windows 11 x64。Intel Mac、Windows on Arm 和 Linux 暂不支持。 | 打开即用 | 原生体验 | 可诊断 | 安全更新 | | 内置固定版本的 Node.js、pnpm 与 Harness | 平台化窗口、主题同步、响应式 Workspace Review | 自动恢复运行时、日志轮转、脱敏诊断包 | macOS 签名和公证;Windows 真实安装生命周期验证与候选门禁 | 下载与安装 所有公开产物均可从 GitHub Releases 最新版本 下载。 macOS 系统要求:Apple Silicon Mac(M1 或更新芯片)、macOS 14 或更高版本。 每个版本提供两种产物: DeepSeek.YukiRyou-<version>-arm64.dmg DeepSeek.YukiRyou-darwin-arm64-<version>.zip 使用 DMG 安装: 1. 下载并打开 DMG。 2. 将 DeepSeek YukiRyou 拖入“应用程序”。 3. 从 Launchpad 或“应用程序”目录启动。 4. 在 Harness 界面中完成所需的服务配置,然后开始工作。 使用 ZIP: 1. 下载并解压 ZIP。 2. 将 DeepSeek YukiRyou.app 移入“应用程序”。 3. 从“应用程序”目录启动。 macOS 应用和更新包均使用 Developer ID 签名并经过 Apple 公证。 Windows 系统要求:Windows 11 x64。 每个版本提供安装版和便携版: DeepSeek.YukiRyou-<version>-win32-x64-Setup.exe DeepSeek.YukiRyou-win32-x64-<version>-portable.zip 使用安装版: 1. 下载并运行 Setup.exe。 2. 在 NSIS 安装向导中选择安装目录并完成安装。 3. 从开始菜单或安装目录启动 DeepSeek YukiRyou。 使用便携版: 1. 下载并完整解压 ZIP。 2. 从解压目录运行应用;便携版不会写入安装注册项。 Windows 产物暂未进行 Authenticode 签名,系统可能显示 SmartScreen 警告。请只从本仓库的 Release 下载并完成 SHA-256 校验;未签名产物不代表已获得 Windows 系统的发布者信任背书。 校验下载文件 每个正式版本都提供 SHA256SUMS.txt(macOS)和 SHA256SUMS-Windows.txt(Windows)。先将安装包与对应校验文件下载到同一目录,再执行: macOS: shasum -a 256 DeepSeek.YukiRyou-<version>-arm64.dmg 将输出与 SHA256SUMS.txt 中对应文件的值比较 Windows PowerShell: Get-FileHash .\DeepSeek.YukiRyou-<version>-win32-x64-Setup.exe -Algorithm SHA256 将输出与 SHA256SUMS-Windows.txt 中对应文件的值比较 海外发行以 GitHub Releases 为源;中国大陆自动选择受 ESA 保护的 download-cn.suzuki.ink 国内镜像,失败时回退到 GitHub。镜像仅在 GitHub Release 已公开且全部校验通过后同步;其 downloads/latest.json 提供当前四个安装包的版本化直链、大小与 SHA-256。 当前可用功能 桌面与运行时 - 一体化窗口:本地顶栏与 Harness 共享视觉状态,浅色、深色和跟随系统主题会同步生效。 - 固定运行时:Node.js、pnpm 与 DeepSeek Harness 随应用交付,不读取用户的全局安装,也不会在首次启动时联网安装依赖。 - 安静的生命周期:单实例运行;关闭窗口时可隐藏,重新点击 Dock 图标即可恢复。 - 故障自恢复:Harness 或本地界面异常退出时分别恢复,避免单个区域的故障拖垮整个窗口。 账户与工作区 - 账户概览:“设置”上方默认显示当前凭据所属账户余额;悬浮时在同一行切换为本机今日估算,点击可同时刷新两项。今日金额依据会话中的官方 usage 和北京时间峰谷费率估算,不作为官方账单。 - Desktop Companion:可收起的右栏提供当前工作区文件树、相对 HEAD 的 Git 变更、增删行统计和只读 diff。 - 适合阅读的预览:Markdown 可在排版与源码之间切换,纯文本和常见图片也可在应用内预览。 - 逐轮变更入口:在 Harness 原生“产物”行下方展示本轮确认变更,点击即可进入对应文件审核。 设置、安全与发布 - 单一外观入口:浅色、深色和跟随系统统一使用“通用设置 → 外观”;“关于”展示版本、开发者信息与更新中心。 - 更新不打扰:应用定时在后台检查;只有发现可安装版本时,主界面才显示更新入口。 - 隐私友好的诊断:导出包只包含脱敏后的环境摘要和有界日志,不打包项目源码、会话或凭据。 - 可信发布链:候选包经过平台对应的安装、启动和稳定性门禁;macOS 还必须通过 Developer ID 签名、Apple 公证和最终产物复验。 插件市场 - 完整目录发现:市场基于完整本地索引提供搜索、分类、分页和自定义 HTTPS 来源管理,不把目录收录描述为官方认可或安全审核。 - 安装前安全预检:核验目录/npm 身份、仓库回链、生命周期脚本、完整性、平台、Runtime、完整依赖图、Peer 兼容性和真实包体。 - 受管生命周期:支持安装、更新、重装、启停、上一验证版本回滚和卸载;写入前需要原生确认,重启后健康失败会自动恢复。 - 明确权限边界:插件与 Harness 共享本机用户权限;Renderer 不会获得 Runtime token、缓存路径或可执行安装计划。 为什么选择 YukiRyou - 真正的跨平台桌面产品:不是网页快捷方式。macOS 与 Windows 共享固定 Harness Runtime、核心能力和状态合同,平台差异收敛在窗口、路径、进程与安装适配层。 - 完整的工作区审阅闭环:无需离开对话,即可查看文件树、相对 HEAD 的 Git 变更、逐轮产物、增删行统计、只读 diff 与 Markdown 预览。 - 融入 Harness,而不是取代 Harness:账户概览、Desktop Companion、设置、插件市场和更新入口沿用 Harness 的交互节奏,不重写其 Agent 工作流。 - 可验证的发行结果:公开产物来自受控工作流,附带 SHA-256;macOS 还经过 Developer ID 签名、Apple 公证、异机安装和最终产物复验。 - 可诊断、可恢复:固定运行时、进程归属校验、日志轮转和脱敏诊断共同降低「换一台机器就无法复现」的桌面交付风险。 界面布局概览 应用保留 Harness 作为主工作区,并在同一窗口中补充桌面能力: | 区域 | 主要内容 | 行为 | | 桌面顶栏 | 窗口拖动、桌面状态与 Companion 开关 | 始终由原生桌面壳管理 | | Harness 主工作区 | 会话、Agent 工具、设置与插件 | 保持官方 Harness 的核心交互 | | Desktop Companion | 「变更」与「文件」两个视图 | 可收起、可调整宽度,不遮挡主工作区 | | Workspace Review | 文件内容、只读 diff、Markdown 与图片预览 | 从 Companion 或逐轮产物进入,属于审阅视图而非独立工作流 | 后续路线图 | 功能 | 状态 | 计划范围 | | 手机远程控制 | 规划中 | 通过明确配对和权限边界,在手机端查看任务状态、接收必要提醒,并在用户确认后继续任务;不会直接暴露本机 Harness 端口。 | | 插件生态完善 | 持续开发 | 在现有发现、预检和受管生命周期上继续补齐可信发布者信号、权限可见性和更完整的兼容性信息。 | 路线图表示产品方向,不承诺具体发布日期。安全模型、上游 Harness 接口或素材准备不足时,相关功能会继续保持不可用,而不是通过不稳定的 DOM 注入或降低系统安全要求提前上线。 版本与更新 应用启动后会自动检查更新,也可以在「设置 → 关于」中手动检查。中国大陆优先使用国内镜像,其他地区优先使用 GitHub;国内源不可用时自动回退到 GitHub。macOS 与 Windows 安装版均在后台下载更新,完成后由用户确认重启安装。 桌面壳、Node.js 与 Harness 被视为一个原子发布单元:应用不会在后台单独升级运行时,避免新旧组件组合产生不可复现的问题。正式发布固定执行一次 DMG 公证,再从已完成 staple 的 App 生成自动更新 ZIP。详细流程见 发布 Runbook。 从早期测试版升级的注意事项 从 v0.2.1-beta.2 升级到首个 rc.8 版本前,请先通过应用菜单完整退出旧版。旧版 Runtime 没有 owner watchdog,而一次性 origin 迁移依赖最后一条 ready 记录。 如果旧版曾被强制退出、主进程崩溃,或桌面日志曾被手动清理,请先重启 macOS 再安装,以免新旧 Runtime 并发写入数据。如果 ready 记录已经丢失,升级后可能需要从侧栏重新选择一次原会话。 技术架构 flowchart LR A["DeepSeek YukiRyou"] --> B["Electron 主进程"] B --> C["应用内置 Node.js"] C --> D["固定版本 DeepSeek Harness"] D --> E["稳定 127.0.0.1 origin + HMAC secret 持有证明"] E --> F["隔离的 Harness WebContentsView"] B --> G["macOS / Windows 平台 Adapter"] G --> F 运行时边界分为以下几层: - 本地监听:Harness 只监听由应用持久选择的稳定回环地址,不向局域网暴露服务。 - 持有证明:每次 Runtime 启动都必须通过随机密钥的 HMAC 挑战,证明响应者持有本次 secret。 - 迁移保护:一次性旧日志迁移采用物理顺序中的最后一个 ready origin;轮转日志中保留的其他 ready 端口必须先释放。 - 失败关闭:如果遗留 Runtime 仍占用端口,应用会在复制或打开 Runtime Home 前按失败关闭(fail-closed)原则中止操作。 - 渲染隔离:网页运行在关闭 Node 集成、启用上下文隔离与沙盒的独立视图中;桌面桥只开放经过校验的少量能力。 HMAC 持有证明不等同于操作系统级进程隔离。完整边界见 安全设计。 本地开发 准备环境 - Node.js 22.19+ 或 24+ - Corepack / pnpm 10.34.5 - macOS 开发:Apple Silicon Mac、macOS 14+ - Windows 开发:Windows 11 x64;Windows Runtime 必须在 Windows 主机装配 macOS:启动与验证 corepack enable pnpm install --frozen-lockfile pnpm runtime:vendor -- --arch=arm64 pnpm dev 验证常规改动和 macOS 打包: pnpm check pnpm test:e2e pnpm package:mac -- --arch=arm64 macOS 正式签名、公证和发行只通过 GitHub Actions 的 Release desktop (macOS + Windows) 工作流执行。本机只能生成不可发布的签名候选: export MACOS_SIGN_IDENTITY="Developer ID Application: ... (...)" pnpm release:mac:candidate 工作流使用多个全新 Apple Silicon runner:候选复制到 /Applications 后必须通过验签和启动验证,才能提交至 Apple 公证。公证后的 DMG 与 ZIP 还会在另一个 runner 上重新安装,并通过 Gatekeeper 验证和启动测试。全部门禁通过后只创建 Draft,获得显式允许后才公开 Release。 Windows:启动与验证 在 Windows x64 主机执行: corepack enable pnpm install --frozen-lockfile pnpm runtime:vendor:win pnpm runtime:verify pnpm dev 生成并验证候选产物: pnpm check pnpm test:e2e pnpm make:win 仓库的 Windows x64 candidate 工作流会验证向导式 NSIS 安装 EXE 与便携 ZIP,并真实执行自定义目录安装、启动、修复安装与卸载。正式桌面发行工作流将版本化 EXE、便携 ZIP 和 Windows SHA-256 清单加入与 macOS 相同的 GitHub Release。 完整门禁见 发布规则 和 更新日志。 固定运行时 | 组件 | 当前版本 | 策略 | | DeepSeek Harness | 0.1.5-rc.2 | 随应用固定并验证 | | Node.js | 24.19.0 | 按 darwin-arm64 / win32-x64 目标内置 | | pnpm | 10.34.5 | 仅供内置 Harness 使用 | | Electron | 43.4.0 | 桌面壳运行时 | 应用不会调用用户全局安装的 Node、dsh 或 pnpm,也不会在首次启动时在线安装依赖。 常见问题 这是 DeepSeek 官方客户端吗? 不是。这是由社区独立开发的跨平台桌面项目,与 DeepSeek 官方没有隶属或背书关系。 支持哪些平台和安装包? 当前支持 Apple Silicon macOS 14+ 与 Windows 11 x64。macOS 提供经签名和公证的 DMG 与 ZIP;Windows 提供未签名的安装 EXE 与便携 ZIP。所有产物均附带 SHA-256 校验信息。 为什么安装包比较大? 为了做到离线可启动和版本可复现,应用内置了经过校验的 Node.js、pnpm 与 Harness 运行时,而不是依赖用户电脑上的全局环境。 遇到启动问题怎么办? 先使用应用菜单导出诊断包,再到 Issues 描述操作系统版本、应用版本和复现步骤。提交前请自行确认附件中没有不希望公开的信息。 文档导航 完整索引见 docs/README.md。常用入口: - 产品范围与验收标准 - 系统架构与安全模型 - 测试与发布及发布 Runbook - 开发指南与当前实现状态 - Desktop Companion 方案 - 桌面框架与插件市场方案 - 临时 Harness 补丁 - 开发者实机验证插件来源 - English README 参与项目 - 遇到可复现问题,请使用 Bug 反馈表单。 - 有明确使用场景或产品建议,请使用 功能建议表单。 - 反馈前建议先安装 最新公开版本,并附上应用版本、操作系统版本和 CPU 架构。 开发者与许可 由 YukiRyou / yoshino-xiao7 开发和维护,项目代码采用 MIT License。随包提供的第三方运行时与依赖遵循各自许可证。 DeepSeek 与 DeepSeek Harness 名称归其各自权利人所有。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
yoshino-xiao7/deepseek-harness-desktop-yukiryou
DeepSeek Harness Desktop for macOS & Windows|面向 macOS 与 Windows 的独立 DeepSeek Harness 桌面工作台
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目