dsh-packforge/dsh-pack-plugin 介绍

前言

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。

核心功能

插件提供了从导出到运行的全流程管理能力:

  1. 导出与安装:支持将 profile 打包为 .dspack 文件,或从源仓库导出。安装支持本地文件、URL 和市场包,并在安装前进行 sha256 和大小校验。
  2. 多 Profile 切换:利用 Windows Junction(硬链接)技术实现换指切换。切换激活 Profile 时,系统自动重定向 profiles/desktop 指针,无需重新安装。
  3. 隔离管理:Home 级别的 skills 和 .agent-presets 会随 Profile 切换进行独立换指隔离,确保不同环境间互不干扰。
  4. 市场与配置:内置市场浏览功能(支持索引懒加载),并提供工作区配置文件 .dshpkcfg 用于保存 Profile 的元数据设置。
  5. 任务中心:导出、安装等操作采用非阻塞模式执行,通过任务中心视图展示进度条和时间线。
  6. 下载代理:在 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/,安装时优先读取本地文件。

注意事项

  1. 运行权限:插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。
  2. 依赖检测:安装前会对包内 vendor 字段进行 sha256 预验,确保包完整性。
  3. 进程管理:首次迁移或切换到真实 desktop 目录前,桌面进程必须关闭,否则可能导致文件锁定错误。

结语

该插件为 DSH 桌面端提供了标准化的整合包管理方案。它通过 RPC 通道与官方运行时服务交互,在不修改官方代码的前提下实现了 Profile 管理、市场浏览和任务中心功能。适合需要频繁在多个开发环境或配置之间切换的用户。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜