dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
为 DeepSeek Harness 提供统一的“辅助模型”体系:视觉(图片分析)与图像生成合并在一个设置页里管理,每个能力槽位独立绑定自己的提供方——Harness LLM 路由(经适配器派发)、自定义 OpenAI 兼容端点、或关闭;未来可扩展视频生成等新模态。
这是由社区维护的非官方插件,不隶属于或代表 DeepSeek。套件发布到 npm,并通过 DeepSeek Harness 自带的 dsh plugin 命令安装;GitHub 源码安装保留给开发者和离线场景。
ctx.llm 适配器派发,协议、端点、凭据、错误归一化与重试事实全部由适配器负责,本套件不重建 HTTP 客户端/chat/completions(视觉)与 /images/generations / /images/edits(图像生成)端点,支持独立密钥存储、环境变量引用、自定义请求头、固定尺寸、一键探测模型目录与测试连接harness-llm(视觉)/ custom-openai / disabled,模型 pin 不受目录约束(目录仅作建议)ctx.auxiliary 注册元数据并订阅自己的绑定快照,核心包与设置页零改动| 依赖 | 版本 |
|---|---|
| DeepSeek Harness | 0.1.1-rc.2(Developer Preview;后续 Harness 版本将单独验证) |
| 操作系统 | Windows / macOS / Linux |
| Node.js | ≥ 22.19 |
| pnpm | ≥ 11 |
packages/
├── auxiliary/
│ ├── aux-core/ # @carlmarkswx/dsh-aux-core —— ctx.auxiliary:能力元数据注册表 +
│ │ # `auxiliary` 设置命名空间 + 绑定解析 + 快照通知
│ └── ui-aux-settings/ # 统一设置页(host: /auxiliary/* 同源路由;browser: 槽位列表 + 池)
├── vision/
│ ├── vision-service/ # ctx.vision 注册表与派发
│ ├── tool-vision/ # inspect_image + VisionToolController(activate/deactivate)
│ └── vision-aux/ # capability 插件:HarnessVisionProvider(ctx.llm 路径)
│ # + OpenAIVisionProvider(自定义端点)+ 自有 activation
├── imagen/
│ ├── imagen-service/ # ctx.imagen 注册表与派发
│ ├── tool-imagen/ # generate_image + ImagenToolController(activate/deactivate)
│ ├── imagen-aux/ # capability 插件:OpenAI 图像 provider + 自有 activation
│ └── ui-imagen/ # generate_image 工具行 + /imagen/attachment 同源路由
└── distribution/
└── suite/ # @carlmarkswx/dsh-multimodel —— npm 用户安装单元
auxiliary 命名空间形状(类型化绑定):
auxiliary:
customProviders: [ { id, name, apiUrl, apiKeyEnv, models[], defaultModel, enabled, headers[], defaultWidth, defaultHeight } ]
providerSecrets: # 独立密钥存储(role: secret,不随池数组替换丢失)
my-vlm: sk-...
bindings: # 能力槽位绑定(record —— 新模态零 schema 改动)
vision: { mode: harness-llm | custom-openai | disabled, ref: <路由键或池 id>, model: "" }
imagen: { mode: custom-openai | disabled, ref: <池 id>, model: "" }
capabilityOptions: # 能力专属选项(如 imagen 提示词长度上限)
imagen: { promptLimitEnabled: true, promptLimit: 2000 }
关键设计:
harness-llm 绑定通过 ctx.llm.stream({provider, model, messages}) 调用,图片先经附件服务转为持久 ImageBlock 引用;适配器拥有协议、端点与凭据,本套件不读其他插件的 settings、不维护端点表watchCapability,指纹去重);各 capability 插件在自己的 fiber 中 reconcile——一个 activation disposer 同时拥有 provider 注册、服务开关与工具面,禁用即整体释放resolveBinding(capabilityId, binding, ...) 返回按 transport 判别的绑定(harness-llm 无端点/凭据字段;custom-openai 携带端点与惰性密钥),各能力包只负责把它变成自己的 provider 实例providerSecrets → 显式 apiKeyEnv),密钥轮换经指纹触发 provider 重建ctx.vision / ctx.imagen 是多 provider 注册表——第三方插件可在运行时 register() 自己的 provider(无需设置页参与,按名派发)这里的 dsh plugin add 和 Harness 插件安装机制是同一件事。--profile 不能省略:请把 web 换成你实际使用的 profile 名称。
# 已全局安装 dsh CLI
dsh plugin --profile web add @carlmarkswx/dsh-multimodel
# 没有全局命令时
npx @deepseek-ai/dsh plugin --profile web add @carlmarkswx/dsh-multimodel
套件包会从 npm 自动带入 9 个内部插件依赖,并通过 dsh.bundle 写入同一个 profile;用户不需要逐包安装。安装完成后重启 Harness,打开 设置 → 辅助模型。
更新和卸载:
dsh plugin --profile web update @carlmarkswx/dsh-multimodel
dsh plugin --profile web remove @carlmarkswx/dsh-multimodel
当前 DeepSeek Harness 仍是 Developer Preview。本版锁定并验证
0.1.1-rc.2;Harness 升级后若出现 peer dependency 或配置兼容错误,请先保留报错信息并提交 issue。
源码安装需要完整的 DeepSeek Harness 源码检出,并且已在 Harness 目录执行过 pnpm install;安装器会复用其构建工具链。
git clone --depth 1 https://github.com/CarlMarkswx/deepseek-multimodel.git
cd deepseek-multimodel
node install-to-harness.cjs
Windows 用户也可以在克隆完成后直接双击仓库根目录的 一键安装.cmd。脚本会检查 Node.js、自动寻找 DeepSeek Harness;找到一个时直接安装,找到多个时显示编号供选择,并在结束后保留窗口显示结果。
不使用 Git 的用户可以从 GitHub Releases 下载 ZIP,完整解压后运行同一入口。安装完成后请保留该目录且不要移动它:当前 Harness profile 使用 link: 依赖引用这里的插件包。若确实要移动,请在新位置重新运行安装器。
命令行安装与 Windows 一键脚本执行的是同一个入口:
# 推荐:零参数一条龙安装。自动寻找 DeepSeek Harness;找到多个时列出并让用户选择。
node install-to-harness.cjs
# 无交互环境或希望固定目标时,也可设置一次环境变量或显式传入路径:
# Windows: set DEEPSEEK_HARNESS_PATH=D:\Tools\DeepSeek Harness
# macOS / Linux: export DEEPSEEK_HARNESS_PATH=~/code/deepseek-harness
node install-to-harness.cjs "D:\Tools\DeepSeek Harness"
一条龙 = 三个独立脚本按序组合(也可单独调用):
scripts/migrate-legacy.cjs —— 一次性:旧 vision / imagen 设置段 → auxiliary 类型化绑定(备份 settings.yaml.bak),卸载旧插件;成功后可整脚本删除scripts/dev-bootstrap.cjs —— 开发者:把构建工具链以链接方式接入本仓库 node_modules(不向 harness 检出复制任何文件)并构建全部内部包scripts/install-suite.cjs —— 产品安装:一次 dsh plugin --profile web add packages/distribution/suite,内部包以普通依赖随行,--dump-config 验证组合配置;旧版逐包安装的 bundle 层会被自动清理常用形态:
node scripts/dev-bootstrap.cjs # 自动探测;只接线 + 构建,不动 profile
node scripts/install-suite.cjs --profile headless # 装入其它 profile
node scripts/install-suite.cjs --skip-build # 跳过构建,复用 lib/ 产物
node scripts/install-suite.cjs --uninstall # 卸载(一次 remove)
# 兼容旧入口:install-to-harness.cjs --build-only/--uninstall/--skip-* 仍然可用
构建/测试入口:pnpm build / pnpm test / pnpm clean(根递归执行;.bin 垫片由 dev-bootstrap 的 wire-bins 生成)。
然后启动 DeepSeek Harness(你平时的启动方式即可),打开 设置 → 辅助模型。
卸载:
node install-to-harness.cjs --uninstall
打开 设置 → 辅助模型:
帮我看看 D:\photos\glasses.png 里的眼镜是什么品牌 # inspect_image(视觉)
画一张日落海滩的照片,胶片质感 # generate_image(图像生成)
先画一张……再用 inspect_image 检查是否符合要求 # 生成 + 视觉验证闭环
生成的图片双份持久化:Harness 附件存储(对话内预览)+ ~/DeepSeek-Imagen-Images/(可用 IMAGEN_OUTPUT_DIR 改目录;扩展名按实际格式)。
packages/video/video-service(ctx.video 注册表,继承 ProviderRegistryService)packages/video/tool-video(generate_video 工具,controller 形态:activate/deactivate)packages/video/video-aux(capability 插件):ctx.auxiliary.registerCapability({ id, title, modes }) + ctx.auxiliary.watchCapability(id, reconcile)——在自己的 activation disposer 里同时挂载 provider、服务开关与工具面packages/distribution/suite/cordis.patch.yml,在 scripts/lib.cjs 的 PLUGIN_PACKAGES 注册构建项设置页槽位与绑定 schema 自动生效(record 键控,零核心改动)。异步长任务(视频生成耗时)可接入 harness jobs 服务(v1 未实现,工具内直接 await 即可)。
~/.dsh/settings.yaml 的 providerSecrets(不回传浏览器 wire;Harness 路由密钥完全由“模型”页/credentials 服务管理,本套件不经手)link: 依赖,源码目录不能随意移动;npm 安装使用预构建的 registry 包,不依赖本仓库或 Harness 源码检出npm 安装用户运行:
dsh plugin --profile web update @carlmarkswx/dsh-multimodel
GitHub 安装用户在本仓库目录中运行:
git pull --ff-only
node install-to-harness.cjs
修改本仓库源码后,重跑 node install-to-harness.cjs(或 scripts/dev-bootstrap.cjs 后重启)即可——安装器会再次自动定位;迁移幂等跳过,构建幂等重装。
MIT