dsh-pack-plugin

别名:整合包管理插件、dsh-pack、dspack 面板、pack 管理 bundle

把「整合包管理」做进 DSH 界面里的双半端插件 bundle:在设置面板里导出 / 安装 .dspack、切换 profile、浏览市场、读写工作区配置、看任务进度,且不改官方源码、宿主运行时只依赖一个 ZIP 库。

它解决什么问题

DSH 的整合包(.dspack)总得有人来导出、安装、切换。dsh-pack-plugin 的定位是把这套操作搬进 DSH 自己的界面里,而不是让你退回命令行:设置面板里多出管理 / 导出 / 市场三个页签,市场详情、导出进度、任务时间线都在里面。市场给它的分类是「工具」,徽标与 dsh-loader 一样是「整合包必备」——这两个措辞来自 source/2 的登记条目。

它的取舍写在 README 第一句里:只做 UI + 后端,不做 AI 驱动的整合包管理。也就是说它不替你决定装什么,只把「导出 / 安装 / 切换」这三件事做顺。

它凭什么敢说「零官方源码改动」

因为它走的是官方本来就有的 bundle 机制,而不是改 DSH 的代码。两处声明都在 package.json 里(实测本地 checkout 版本 0.3.5):

"main": "lib/host.js",
"exports": {
  ".":                { "default": "./lib/host.js" },
  "./client":         "./lib/client.js",
  "./cordis.patch.yml": "./cordis.patch.yml"
},
"dsh": {
  "bundle": { "patch": "./cordis.patch.yml" },
  "client": {
    "platform": "web",
    "inject": ["@deepseek-ai/dsh-client-runtime", "…"]
  }
}
  • 宿主半端靠 cordis.patch.yml 插进来一行:- insert: [{ id: dspack-host, name: '@dsh-packforge/dsh-pack-plugin', inject: [connection, webServer, skills] }]。它注入 webServer 后自己挂一个 /dsh-pack 前缀路由,而不是走 ctx.connection.rpc.handle(README 说那条路对第三方插件不可用)。
  • 客户端半端靠 dsh.client + exports["./client"] 挂进页面,字段语义见 concept/4。

这两条合起来就是「双半端」,也正是 tutorial/2 里讲的 bundle 声明与 patch 层的真实样本。

谁在用它

反查市场账本 index/packs/<owner>.<repo>/manifest.json,两个包的 bundles 与 dependencies 里都有它,且版本一致:

整合包(marketId)bundles 里的一行dependencies 里的那一行
1900992335.desktop-pack"@dsh-packforge/dsh-pack-plugin""@dsh-packforge/dsh-pack-plugin": "0.3.5"
hxh230802.smoother-deepseek-harness同上"@dsh-packforge/dsh-pack-plugin": "0.3.5"

desktop-pack 的显示描述里直接把它称作「packforge 打包」那一环。装插件时被谁拉进来、挂上去之后发生什么,见 tutorial/3。

与其它东西的关系

关系对象说明
并列dsh-loader(npm)市场把两者都标成整合包必备
同源dsh-packforge-app(GitHub)打包 / 安装 / 校验逻辑同一份,一个进界面,一个在界面外
落在concept/2 profile切换的对象就是 profile:README 说激活指针是 profiles/desktop 这个 junction
用到concept/1 patch 层与层序它自己就是一层:cordis.patch.yml 里那一行 insert

未核实 / 未声明

  • compat.dsh:未核实。它声明了 bundle 与 client,却没有写给谁用的 DSH 版本;市场索引里两个包钉的 dshVersion 一个是 0.2.0-rc.2、一个是空字符串,不能替它推断。
  • star / 下载量 / 是否归档:未核实。它不在 awesome 的 4400 条里,本轮也没有查远端仓库的 stars / pushedAt / license 字段(providedBy.github 因此整段是未核实)。
  • 宿主侧的 dsh.bundle:它的 main 指向 lib/host.js,但声明里只有 dsh.bundle.patch,没有 dsh.bundle 对象。对照 @deepseek-ai/dsh-app-boot 的 loadProfile,profile 只要求 dsh.bundle.patch,所以这能工作;但「这是规范推荐的写法还是特例」本轮未核实。
  • licenses 的另一半:licenseRefs 只有 package.json 的 MIT 一条,仓库根 LICENSE 文件本轮未读,署名与年份未核实。
  • 历史版本:本地 checkout 根目录有 0.1.0 到 0.5.0 的一串 .tgz,但那是构建产物目录,不代表发版历史;npm 上的版本序列未核实。

相关教程

谁引用了这一条

信息表

category
plugin.packaging
entryGate
pack
install
dsh plugin add github:DSH-PackForge/dsh-pack-plugin
licenseRefs
[object Object]
maintainers
hxh230802
npm
@dsh-packforge/dsh-pack-plugin
positioning
装机后的日常入口——包已经装好了,接着要「导出当前 profile、装别人的包、切到另一个 profile」,这些事它能让你在 DSH 界面里做完;装机之前的批量导出与校验才轮到 dsh-packforge-app([GitHub](https://github.com/DSH-PackForge/dsh-packforge-app))的独立工具。
referencedByTutorials
tutorial/3
repo
DSH-PackForge/dsh-pack-plugin
role
bundle+client
roles
[object Object]、[object Object]
updatedAt
2026-10-02
usedInPacks
1900992335.desktop-pack、hxh230802.smoother-deepseek-harness

标签:打包、双半端、整合包、profile 切换