一天一个开源项目(第232篇):DSH Desktop —— 把桌面壳本身也做成一个插件,30k+ Stars 的 DeepSeek Harness 桌面客户端
引言“万物皆「插件」桌面本身也是「插件」。”这是一天一个开源项目系列的第 232 篇。今天的项目是DSH Desktop。给一个 Agent 框架做桌面客户端,大多数项目的做法是:在上游代码基础上加一层 Electron 封装,顺手改几行源码塞进自己需要的功能——结果是上游一旦发版,维护者就要手动合并冲突,魔改的部分越积越多,最后变成一个难以跟上游同步的分叉。DSH Desktop 的做法不一样。它面向 DeepSeek Harness(DSH)插件生态,完全不修改上游源码,通过 Git Submodule 固定一个上游版本原样运行;而桌面壳本身——窗口、系统托盘、终端、更新器、工作区配置——全部以 DSH 插件的形式接入同一个运行时。换句话说,桌面客户端这件事本身,也被当作一个插件来实现,和第三方插件走的是同一套规则。30.3k Stars,MIT 协议,13,662 次提交,目前是 DeepSeek Harness 生态里体量最大的社区桌面方案之一。你将学到什么一切皆插件的架构理念:桌面壳为何也要用插件机制实现,而不是单独的宿主程序固定上游版本 Submodule 的集成方式,如何避免魔改源码带来的同步成本首次启动配置向导、局域网访问、更新遥测的具体安全设计插件市场(DSH Community Market)与移动端远程控制的协作模式和 Cordis / Koishi.js 插件思想的关系前置知识了解 Electron 桌面应用的基本工作方式熟悉插件化架构的基本概念(插件注册、生命周期、能力组合)可选:了解 DeepSeek Harness 本身的插件开发模式会更容易理解本文项目背景项目简介DSH Desktop 的官方定位是:“为 DeepSeek Harness(DSH)插件生态打造的现代化桌面端解决方案”。它把上游 DeepSeek Harness 的本地 Web UI、Host 服务和插件系统整合进一个原生桌面应用,同时明确声明自己是独立的社区开源项目,“与深度求索不存在隶属、合作、授权或背书关系”。团队与项目信息组织:anywhere-labs协议:MIT License技术栈:外层仓库用 Yarn,内嵌的deepseek-harness/Submodule 保留自己的 pnpm workspace;插件基础架构基于 Cordis,设计思路借鉴 Koishi.js 社区实践打包方式:Windows x64 用 NSIS 安装程序,macOS Universal 用 DMG项目数据⭐ GitHub Stars:30,300 Forks:1,400 Watchers:72 Open Issues:274 Open PRs:83 提交次数:13,662 协议:MIT主要功能解决什么问题传统 Agent 框架桌面化的常见做法 在上游源码基础上直接魔改塞进桌面特有的功能 ↓ 上游发版 → 维护者手动合并冲突 ↓ 魔改代码越积越多 → 和上游的差异越来越难对齐 ↑ 最终变成一个难以持续跟进上游更新的分叉 DSH Desktop 的做法 用 Git Submodule 固定一个上游版本原样运行不碰源码 ↓ 桌面壳窗口/托盘/终端/更新器本身实现为一个 DSH 插件 ↓ 和第三方插件走同一套组合机制接入运行时 ↑ 上游更新只需要升级 Submodule 指针 ↑ 桌面特有功能的维护完全独立于上游代码库使用场景本地运行 DeepSeek Harness 的日常使用者不想通过命令行启动 Node.js 服务、手动开浏览器访问本地 Web UI,想要一个双击打开、带系统托盘的原生应用体验需要移动端远程监控任务进度的用户内置移动端远程控制能力(v2.0.9),可以用 iOS/Android 设备连接桌面端,启动任务并查看 Agent 执行进度需要发现和管理插件的用户内置 DSH Community Market 插件市场,支持浏览、查看详情、安装与管理,开放多数据源接入插件开发者想了解桌面特有插件服务(查看/切换工作配置、在当前配置内安装/更新/移除插件)如何与桌面壳交互需要局域网访问的团队场景需要在同一局域网内让其他设备访问本机运行的 DSH,但项目明确提示这是无鉴权的高风险选项,需要用户主动理解后开启快速开始开发环境搭建:# 克隆仓库并初始化 Submodulegitsubmodule update--init--recursive# 安装依赖锁定版本不自动升级corepackyarninstall--immutable# 启动开发模式corepackyarndev无界面环境检查:corepackyarncheck普通用户安装:平台安装方式Windows x64下载安装程序,运行 NSIS 安装程序并按提示完成安装macOS Universal下载 DMG,打开后将 DSH Desktop 拖入 Applications核心特性1. 桌面壳(Desktop)把上游的本地 Web UI 带进原生应用外壳,自动管理本地 Harness 服务的启停,集成系统托盘和窗口管理,用户不需要自己安装 Node.js。2. 移动端远程控制v2.0.9 内置,支持 iOS/Android 设备远程连接桌面端,启动任务并监控 Agent 执行进度。3. 插件市场(DSH Community Market)内置的插件发现、详情查看、安装与管理能力,支持通过公开 Schema 或经审核的适配器接入多个数据源。4. 统一插件生态上游插件、Desktop 插件、第三方社区插件都遵循同一套约定——“每个插件按同一套规则开发,装在一起也能一起工作、互不干扰”。5. 首次启动配置向导每个未初始化的工作配置首次启动时会运行一个原生 Setup Wizard(由 Desktop 自己实现,非上游提供),配置窗口模式/系统材质、插件市场、通知、默认浏览器自动打开、Web 访问范围——也可以跳过。Host 服务和主窗口在向导完成或跳过之前不会启动。6. 局域网访问的显式风险提示Web 服务默认只监听本机回环地址。用浏览器打开选项只是触发系统默认浏览器打开一次,并不改变网络暴露范围。局域网访问是单独的 opt-in 开关,开启后会显示局域网 URL,同时附带明确的安全警告:“向局域网开放不提供鉴权;所有与你处于同一局域网的人都能直接打开 DSH 并操作你的电脑。”深入剖析一切皆插件不是口号,而是架构约束DSH Desktop 最值得关注的设计决定是:它没有把桌面壳当作一个特殊的宿主程序去实现,而是严格地把它也做成一个 DSH 插件,用和第三方插件完全相同的组合机制接入运行时。如果桌面壳是特殊宿主程序 窗口/托盘/终端/更新器 → 直接写进宿主代码 ↑ 宿主代码和插件系统是两套不同的扩展机制 ↑ 桌面特有能力和插件能力互相隔离难以统一治理 DSH Desktop 的做法 窗口/托盘/终端/更新器/工作配置 → 实现为 DSH 插件 ↓ 和第三方插件走同一套组合机制 ↑ 插件开发者可以用同样的接口理解桌面能力 ↑ 架构上只有一套扩展规则不存在宿主特权层这个设计的好处是概念上的一致性:无论你是在写一个第三方插件,还是在理解桌面壳本身的实现,面对的都是同一套插件接口和组合规则。这避免了宿主程序享有插件系统之外的特权能力这种常见的架构裂缝——桌面特有的能力(比如查看/切换工作配置、管理当前配置内的插件)被显式地文档化为桌面插件服务,而不是藏在宿主程序内部的隐式特权。固定版本 Submodule:用边界换维护成本DSH Desktop 选择用 Git Submodule 固定上游版本、原样运行,而不是 fork 后持续同步或者直接魔改。这个选择本质上是在集成深度和维护成本之间做了一个明确的取舍:深度集成魔改上游源码 可以做更深的定制 ↕ 但每次上游发版都要人工合并冲突 长期来看分叉和上游的差异会越滚越大 浅层集成固定版本 Submodule 插件扩展 定制能力受限于插件系统暴露的能力范围 ↕ 但升级上游只需要移动 Submodule 指针 长期维护成本可预测不会随时间线性增长这个取舍对一个主要由社区维护、而非上游官方背书的项目来说是合理的——项目本身也坦诚承认没有深度求索员工或上游 DeepSeek Harness 团队成员参与本仓库的开发、维护或治理。在缺乏官方协作关系的前提下,把集成边界收窄到插件扩展而不是源码级定制,是降低长期技术债务的务实选择。安全设计的透明度:默认收紧,显式放宽几个具体的安全/隐私设计细节值得注意:Web 服务默认只监听本机回环地址——用浏览器打开这个 UX 选项被明确和网络暴露范围解耦,点了也不会意外扩大攻击面局域网访问是显式的 opt-in 开关,并且文档直接用大白话警告同一局域网的人都能直接打开 DSH 并操作你的电脑——没有用模糊的技术术语掩盖风险更新遥测用本地生成的随机 UUID(X-DSH-Desktop-Installation-Id),而非从硬件信息派生——避免了设备指纹追踪的隐私问题这种默认安全、放宽需要用户主动理解代价的设计模式,在很多桌面应用里并不是默认选项——不少项目图方便直接默认开放局域网访问或者用硬件信息做遥测标识。DSH Desktop 在这几个细节上的选择,体现出对默认行为应该最小化风险暴露这一原则的坚持。与 Cordis / Koishi.js 的血缘关系DSH Desktop 的插件基础架构基于Cordis,设计经验明确借鉴自Koishi.js社区实践。Koishi.js 是一个历史较长、以插件化架构著称的聊天机器人框架,其核心理念正是一切皆插件,包括核心能力本身。DSH Desktop 把这套在聊天机器人领域验证过的插件化哲学,搬到了 Agent 桌面客户端这个新场景——这也解释了为什么桌面壳本身也是插件这个设计选择在这个项目里显得如此自然,而不是生硬套用的噱头。生态定位:只做桌面层,不碰核心能力项目对自己的能力边界划分得很清楚:职责归属核心 Agent 能力、插件系统、Web UI上游 DeepSeek Harness桌面应用封装DSH Desktop本地服务启停与恢复DSH Desktop桌面窗口和系统托盘集成DSH DesktopmacOS/Windows 安装包构建与发布DSH Desktop更适合桌面使用的界面体验DSH Desktop这种清晰的职责划分,配合不修改上游源码的集成策略,让 DSH Desktop 在整个 DSH 生态里扮演的角色非常明确——它不是想替代或者分叉上游,而是专注做好把已有能力包装成一个好用的原生应用这一件事。项目地址与资源官方资源GitHub:https://github.com/anywhere-labs/dsh-desktop协议:MIT License文档索引:仓库内docs/README.md️架构说明:仓库内docs/architecture.md插件开发指南:仓库内docs/plugin-development.md相关资源Cordis —— DSH Desktop 插件基础架构的来源Koishi.js —— 插件化设计经验的借鉴来源DSH Community Market —— 内置的插件市场,仓库内dsh-community-market/总结与展望核心要点回顾一切皆插件是架构约束,不是口号:桌面壳本身用和第三方插件完全相同的机制接入运行时,没有隐式的宿主特权层固定版本 Submodule 换维护可预测性:不魔改上游源码,把集成边界收窄到插件扩展能力范围内安全设计默认收紧:本机回环默认监听、局域网访问显式 opt-in 并给出直白警告、遥测用本地随机 UUID 而非硬件指纹插件哲学继承自 Cordis/Koishi.js:把聊天机器人领域验证过的插件化架构经验,迁移到 Agent 桌面客户端场景职责边界清晰:核心能力归上游,桌面层只做封装、服务生命周期管理、UI 体验和安装包发布适合谁DeepSeek Harness 的日常使用者:想要原生应用体验而不是命令行浏览器的组合需要移动端远程监控的用户:希望在手机上查看 Agent 任务进度插件开发者:想理解一个宿主程序本身就是插件的架构范式如何落地关注桌面应用安全设计的开发者:可以参考它在局域网访问、遥测标识等细节上的具体取舍一句话评价DSH Desktop 没有把做个桌面客户端简化成套一层 Electron 壳,而是把桌面壳本身也纳入插件系统的治理范围——这种自我约束,恰恰是让一个社区项目能够长期跟上游共存、而不被自己的定制代码拖垮的关键。欢迎访问 PrimeSkills —— 一个精心策划的 AI Agent 与技能市场所有内容均经过真实企业级工作流验证。没有噱头只有真正有效的东西。更多实用知识和有趣产品欢迎访问我的个人主页

相关新闻

计算机毕业设计选题推荐:基于大数据的食谱菜谱数据可视化与分析|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目

计算机毕业设计选题推荐:基于大数据的食谱菜谱数据可视化与分析|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

2026/10/11 4:13:03 阅读更多 →
自下而上注意力机制:Faster R-CNN区域特征提取在图像字幕与VQA中的应用

自下而上注意力机制:Faster R-CNN区域特征提取在图像字幕与VQA中的应用

简介:基于Faster R-CNN与Visual Genome注释实现的自下而上注意力模型,面向计算机视觉领域从事图像字幕(Image Captioning)与视觉问答(VQA)研究的工程师和研究者。模型采用ResNet-101骨干网络,支…

2026/10/11 4:13:03 阅读更多 →
Flutter + EmbeddingGemma 2 实现端侧本地语义搜索的工程实践

Flutter + EmbeddingGemma 2 实现端侧本地语义搜索的工程实践

前阵子我自己折腾一个移动端的本地语义搜索功能,翻来覆去对比了好几种方案,最终被一套组合拳吸引住了:Flutter 做跨端壳子,EmbeddingGemma 2 做端侧向量化,再加上所谓“完全本地化 AI Edge Foresight”的思路。这个组合…

2026/10/11 4:12:03 阅读更多 →

最新新闻

JPEG修复工具源码解析:损坏类型、诊断与批量修复实战

JPEG修复工具源码解析:损坏类型、诊断与批量修复实战

简介:JPEG修复工具介绍代码包是一份适合图像处理工作者与软件开发者参考的源码资源,重点解决 JPEG 文件损坏、RAW 照片丢失恢复等常见问题。其中 JPEG-Repair 组件用于处理损坏的 JPEG 标头、无效标记以及坏扇区引起的读取异常,JpegDigger 组…

2026/10/11 4:57:28 阅读更多 →
Seata 四种事务模式详解:从 XA、AT、TCC 到 Saga

Seata 四种事务模式详解:从 XA、AT、TCC 到 Saga

背景知识分布式事务模式没有唯一标准分类,但按一致性强度和实现机制,通常可以归为四大类:强一致协调型:2PC、3PC、XA业务补偿型:TCC、Saga、AT(本地事务改进 2PC)消息最终一致型:本地…

2026/10/11 4:57:28 阅读更多 →
如何筛选西安物业洗地机厂家现货?自邦源头工厂采购避坑建议

如何筛选西安物业洗地机厂家现货?自邦源头工厂采购避坑建议

西安物业洗地机厂家现货筛选指南:自邦等品牌采购避坑与决策参考在寻找西安物业洗地机厂家现货的过程中,许多物业管理负责人和保洁承包商常面临信息不对称、参数复杂以及售后响应不确定等挑战。本文并非基于商业排名的官方推荐,而是结合公开的…

2026/10/11 4:57:28 阅读更多 →
CVE-2018-5767环境复现

CVE-2018-5767环境复现

欢迎来看我的博客原文εεε(~ ̄▽ ̄)~ CVE-2018-5767环境复现 | T0_D9 本文主要是根据《IoT从入门到入土》(3)--BooFuzz的简单使用,以CVE-2018-5767为例 | Cyberangels Blog 该篇文章进行复现,具体环境大都使用的为相同版本 因…

2026/10/11 4:57:28 阅读更多 →
AI 数字员工的 5 大工作场景:为什么很多企业只用了其中的 10%?

AI 数字员工的 5 大工作场景:为什么很多企业只用了其中的 10%?

AI 数字员工的 5 大工作场景:为什么很多企业只用了其中的 10%? 这是《AI数字员工系统设计与企业自动化实战》日志连载第 9 篇 作者:老高AI实战前沿 深度聚焦:企业AI落地实战、AI-Workforce、AI数字员工实战、企业Agent组织设计、企…

2026/10/11 4:57:28 阅读更多 →
你不知道的 Claude Code:架构、治理与工程实践

你不知道的 Claude Code:架构、治理与工程实践

写在前面:本文基于我近半年持续落地 Claude Code 的真实踩坑经验,前后两个账号每月投入 40 刀,算是交了不少学费。最开始我也只是把 Claude Code 当成普通聊天机器人来使用,但是很快就发现各种问题:会话上下文越来越杂…

2026/10/11 4:56:27 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →