前言¶
DeepSeek Harness (DSH) 的设计理念是“一切皆插件”。在整合包管理方面,官方桌面端主要提供运行时环境,用户往往需要手动处理 .dspack 文件的导出、安装以及多环境切换。dsh-packforge/dsh-pack-plugin 作为一个纯方案 B 插件 bundle,旨在填补这一空白。它不依赖官方源码修改,而是通过独立 npm 包的形式,将整合包管理能力注入到官方桌面端中。
定位与架构¶
该插件是一个自包含的独立 npm 包,通过官方 DSH 的 bundle 机制注入桌面端。它主要包含两部分:Host 侧(Node.js)负责文件操作、依赖重建和系统代理处理,Client 侧(浏览器 bundle)负责界面交互和任务展示。
- 零官方源码改动:不触碰
apps/desktop或apps/desktop-host。 - 零第三方插件:不依赖除运行时服务外的第三方插件。
- 自包含:运行时依赖仅
fflate(处理 ZIP)、proxy-agent(下载代理)和proxy-from-env。
核心功能¶
插件提供了从导出到运行的全流程管理能力:
- 导出与安装:支持将 profile 打包为
.dspack文件,或从源仓库导出。安装支持本地文件、URL 和市场包,并在安装前进行sha256和大小校验。 - 多 Profile 切换:利用 Windows Junction(硬链接)技术实现换指切换。切换激活 Profile 时,系统自动重定向
profiles/desktop指针,无需重新安装。 - 隔离管理:Home 级别的
skills和.agent-presets会随 Profile 切换进行独立换指隔离,确保不同环境间互不干扰。 - 市场与配置:内置市场浏览功能(支持索引懒加载),并提供工作区配置文件
.dshpkcfg用于保存 Profile 的元数据设置。 - 任务中心:导出、安装等操作采用非阻塞模式执行,通过任务中心视图展示进度条和时间线。
- 下载代理:在 About 页配置代理后,市场索引、包详情下载及
.dspack安装均生效。未配置时依次回退至环境变量(HTTP_PROXY等)或系统代理。
多 Profile 切换与隔离¶
切换 Profile 的核心逻辑在 profiles/desktop 指针上。插件通过删除旧 junction 并创建新的 junction 来实现切换。
- 红线原则:删除 junction 时必须使用
unlink(lstat 语义),绝不能使用rm -r,否则会递归删除目标目录内容。 - 首次迁移:首次将 Profile 切换到真实
desktop目录时,必须先退出桌面进程,改名成default,再进行换指操作。插件使用脱管 helper 完成这一流程。 - Home 级隔离:
skills和.agent-presets位于 Home 根目录,插件将其也做成 junction 指向各 Profile 的槽位,实现换 Profile 时一并切换。
格式契约与安全规则¶
插件遵循 pack-structure v3 r2 标准。
- 安全规则:打包时会自动过滤
node_modules、dist、密钥、嵌套压缩包、.dshpkcfg和.dsh-pack等敏感或冗余文件。 - 工作区配置:
.dshpkcfg为 UTF-8 编码的 JSON 文件,使用 2 空格缩进,仅支持白名单字段(如name、dshVersion、exportContent等)。 - Vendor 档位:导出时支持
auto(默认)、off(禁用)、full(全部内嵌)三种模式。内嵌模式会将依赖 tarball 放入vendor-blobs/,安装时优先读取本地文件。
注意事项¶
- 运行权限:插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。
- 依赖检测:安装前会对包内
vendor字段进行 sha256 预验,确保包完整性。 - 进程管理:首次迁移或切换到真实
desktop目录前,桌面进程必须关闭,否则可能导致文件锁定错误。
结语¶
该插件为 DSH 桌面端提供了标准化的整合包管理方案。它通过 RPC 通道与官方运行时服务交互,在不修改官方代码的前提下实现了 Profile 管理、市场浏览和任务中心功能。适合需要频繁在多个开发环境或配置之间切换的用户。