dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Independent DSH plugin inventory and transactional Profile manager.
DeepSeek Harness(DSH)是一个以 Profile 为中心、通过 Cordis patch 合成配置树的 Agent 运行时。
插件以 npm 包形式安装,通过 dsh.profile.bundles 声明,由 cordis.patch.yml 控制启用/禁用。
本插件为 DSH 提供插件生命周期控制面:
node --check)→ config(dump-config)→ loader(真实 dsh 启动),三层逐级加深jobs.json,进程重启后前端轮询不再 404它独立于旧 component-hub,不导入旧项目代码,也不把组件市场 UI 当作管理器。
dsh-plugin-manager/
├── manager.js # 核心管理器:清单、冲突、事务、分层验证、HTTP API
├── client/
│ └── client.js # 设置页 UI:tab 布局、冲突确认、异步进度、响应式
├── cordis.patch.yml # 本插件的 patch 声明
├── test.mjs # 30 个测试(单元 + 分层验证 + E2E + 更新)
├── tests/render/ # 渲染数据测试与夹具
├── docs/
│ └── PLUGIN-MANAGER-PRD.md # 产品需求文档(7 态模型、冲突引擎、事务流程)
├── .github/ # Issue/PR 模板 + CI workflow
├── CONTRIBUTING.md # 贡献指南
├── CODE_OF_CONDUCT.md # 行为准则
├── CHANGELOG.md # 变更日志
├── LICENSE # MIT
└── package.json
本插件通过 DSH Profile 的 bundles 机制加载,不需要单独全局安装:
# 在 DSH 项目根目录
pnpm add github:123twtd/dsh-plugin-manager
# 然后在 package.json 的 dsh.profile.bundles 加入 @dsh/plugin-manager
git clone https://github.com/123twtd/dsh-plugin-manager.git
cd dsh-plugin-manager
pnpm install # 安装 yaml 依赖
node --test test.mjs
DeepSeek Harness 的核心理念是 Everything is a Plugin:模型、工具、沙箱、会话存储、UI,甚至 agent loop 本身都是插件。
社区插件通过 dsh plugin --profile <p> add <spec> 安装,spec 支持 npm 包名、github:owner/repo、tarball 等。
DSH 插件按来源分四类:
| 来源 | 说明 | 示例 |
|---|---|---|
| Official | DeepSeek 官方维护的核心组件 | @deepseek-ai/dsh-client-runtime、@dsh/plugin-manager |
| Verified | 官方验证的社区插件 | 收录于 awesome-dsh-plugin 目录 |
| Community | 社区开发,spec 归一化后可一键安装 | @liustack/modlens、@deepseek-harness-tui/dsh-tui |
| Unknown | 已安装但无来源信息 | 仅有 node_modules 记录 |
按架构角色分类:Core Service、Provider、Runtime Plugin、Client Plugin、Full-stack Plugin、Bundle、Workflow、Theme/UI、Skill Pack。
以下是 DSH 生态中具有代表性的社区插件(星标与许可证来源于上游仓库,仅供参考):
| 插件 | 说明 | 安装 |
|---|---|---|
| @liustack/modlens | 视觉插件,为纯文本模型外挂视觉能力(OCR/版面/语义) | dsh plugin --profile web add @liustack/modlens |
| @deepseek-harness-tui/dsh-tui | Claude Code 风格 TUI:鲸鱼顶栏、流式思考、双击 Esc 回滚 | dsh plugin --profile web add @deepseek-harness-tui/dsh-tui |
| dsh-cost-meter | 会话与当日 API 费用统计、预算图框、官方余额、历史看板 | dsh plugin --profile web add dsh-cost-meter |
| @linxin666/dsh-web-ui-all | Web UI 插件与皮肤合集:任务看板、Git 图、右侧面板、桌宠 | dsh plugin --profile web add @linxin666/dsh-web-ui-all@latest |
| dsh-better-sidebar | 侧边栏工作台:文件渲染编辑、终端、Git、子代理 | dsh plugin --profile web add dsh-better-sidebar@latest |
更完整的社区插件目录参见 awesome-dsh-plugin(13k+ stars,收录 659+ 插件)。
discovered → installed → enabled → active → verified
↓ ↓ ↓
failed quarantined
verifyProfile 的 loader 层为证据基础)安装不等于启用,启用不等于运行,运行不等于验证通过。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /dsh-plugin-manager/inventory | 当前 Profile 插件清单 + 冲突 |
| GET | /dsh-plugin-manager/plan?package=&enabled= | 预览 toggle 影响 |
| POST | /dsh-plugin-manager/toggle?... | 启用/禁用事务 |
| POST | /dsh-plugin-manager/install?spec= | 异步安装,返回 jobId |
| GET | /dsh-plugin-manager/check-update?package= | 联网检查是否有新版本 |
| POST | /dsh-plugin-manager/update?package= | 异步更新事务,返回 jobId |
| POST | /dsh-plugin-manager/restart | 触发 Harness 重启(不可用时降级为提示) |
| GET | /dsh-plugin-manager/install?jobId= | 轮询安装/卸载/更新进度(通用 job 查询) |
| POST | /dsh-plugin-manager/uninstall?package=&confirm=true | 卸载事务 |
| GET | /dsh-plugin-manager/market | 发现市场候选列表 |
| POST | /dsh-plugin-manager/market/add?spec=¬e= | 手动添加候选 |
| POST | /dsh-plugin-manager/pin?package=&pinned= | 置顶/取消置顶 |
所有变更操作执行标准事务:
读取状态 → 生成计划 → 展示影响 → 创建快照 → 修改 Profile
→ dump-config 校验 → 分层验证 → 成功提交 / 失败回滚
没有完整事务结果不得显示"成功"。
| 类型 | kind | 严重度 | 说明 |
|---|---|---|---|
| 显式声明 | explicit | high | 作者在 dsh-market.json 声明 conflicts |
| 重复 Service | service | critical | 同一 Provider 被两个插件 provides |
| 路由冲突 | route | high | 重复 HTTP 路由 |
| 命令冲突 | command | high | 重复命令名 |
| 端口冲突 | port | critical | 重复端口占用 |
| 重复插件 ID | duplicate-id | critical | 两个 bundle 声明同一 insert id |
| 缺失依赖 | missing-dependency | high | 声明的 DSH 依赖未安装 |
| 版本不兼容 | version | high | Node 版本不满足 engines.node |
低风险显式冲突可作为自动禁用候选;官方核心和核心 Service 不会自动关闭。
已装插件支持一键联网检查新版本,有更新时可一键执行更新事务。
registry.npmjs.org/<pkg>/latest 的 dist-tagshasUpdate: false + error,不抛错,前端展示降级提示error 说明无法比较返回结构:{ packageName, hasUpdate, current, latest, source, error? }
复用 install 的事务结构:
快照 → pnpm update <package> → dump-config 校验 → 分层验证 → 失败回滚
@deepseek-ai/* 不能通过本接口更新,用 dsh 自身的升级流程{ version: { before, after } },让用户看到实际从哪个版本升到哪个版本startUpdate,前端轮询进度install / update / uninstall 成功后,变更需重启 Harness 才完全生效。插件管理器不能直接杀掉宿主进程,设计为:
POST /dsh-plugin-manager/restart,尝试 dsh --restart--restart 时返回 available: false,前端提示用户手动重启DSH 生态中已有若干围绕"配置 / 快照 / 回滚 / 插件管理"的社区插件,本节诚实说明差异,便于使用者选择。
| 项目 | 定位 | 与本插件的关系 |
|---|---|---|
| DSH Plugin Guard | 快照插件/profile 变更、保护启动、回滚失败安装 | 功能高度重叠:同样做快照与回滚。本插件额外提供 7 类冲突引擎、发现市场、任务持久化、分层验证,但 Plugin Guard 更轻量 |
| DSH Undo Savepoint | 崩溃恢复,快照配置与插件代码支持 undo/redo/rollback | 侧重崩溃恢复,本插件侧重事务控制面(实时 toggle/install 事务) |
| DSH Config Manager | 备份/恢复/迁移/同步 DSH 设置、插件、MCP、skills、工作区 | 侧重配置迁移,本插件侧重生命周期事务 |
| awesome-dsh-plugin | 社区插件目录(13k+ stars,659+ 插件) | 目录项目(静态列表),本插件是运行时管理器;本插件的发现市场可导入其离线快照 |
选择建议:
plugin-manager-core 状态模型、Manifest、依赖图、冲突、事务、策略
plugin-manager-dsh DSH Bundle、Profile、Loader、dsh plugin 集成
plugin-manager-ui 列表、详情、计划、冲突、进度、结果
package.json 中声明 dsh.bundle.patch 指向你的 cordis.patch.ymldsh-market.json 中声明 services / resources / conflicts / dependenciespnpm pack 或发布到 GitHub 后,通过 spec 归一化机制安装// package.json
{
"name": "my-dsh-plugin",
"dsh": {
"bundle": { "patch": "./cordis.patch.yml" }
}
}
// dsh-market.json
{
"services": { "provides": ["my-feature"] },
"resources": { "commands": ["my-cmd"] },
"conflicts": ["other-plugin"],
"dependencies": ["@dsh/some-core"]
}
30 个测试覆盖:
node --test test.mjs
| 阶段 | 状态 | 门禁 |
|---|---|---|
| P0 契约冻结 | ✅ | 状态模型、Manifest、错误码定义完成 |
| P1 只读清单 | ✅ | 准确区分 installed / enabled |
| P2 冲突计划 | ✅ | 7 类冲突夹具测试通过 |
| P3 事务变更 | ✅ | 启动失败、回滚失败均有测试证据 |
| P4 最小 UI | ✅ | 列表 + 详情 + 计划 + 冲突确认 |
| P5 发现市场 | ✅ 首子能力 | 离线快照 + 一键安装 |
欢迎提交 Issue 和 Pull Request。请先阅读 CONTRIBUTING.md。
本项目遵循 Contributor Covenant 行为准则。
详见 CHANGELOG.md。
MIT © 2026 123twtd