dsh-plugin-kit · DSH 插件全家桶
中文 | English
DeepSeek Harness(DSH)Web GUI 的插件全家桶
日志查询 · 环境变量 · MCP 服务器 · Prompt · Profile · RSS · 全局搜索 · Codegraph 集成 · 终端面板 · 容器面板 · 插件脚手架
dsh plugin --profile web add @hyzyn/dsh-all
一次装齐,重启 dsh web 生效 · 只想要其中几个 → 按需安装
是什么 · 包索引 · 快速开始 · 开发新插件 · 文档地图 · 参与贡献
新上架 · 日志查询(@hyzyn/dsh-loglens)
日志查询卡片:查询串与按方言给的可点例子、筛选芯片、时间分布(带刻度与峰值)、结果行
在一张卡片里完成 Elasticsearch / OpenSearch 的日志检索:多来源统一清单、直连查询、时间分布与按字段分组下钻;
agent 侧注册 loglens_* 只读工具(loglens_sources / loglens_search / loglens_fields /
loglens_facets / loglens_context)。Docker 容器日志不另起一套:作为采集来源复用现成的 docker_logs。
- 统一查询面:多个来源在同一张卡片里切换与检索;查询串按来源方言给出可点示例与占位提示
- 从结果继续下钻:时间分布上点柱即缩放到该时间窗(可撤销);字段分组榜回答「哪个服务在报错」,点榜上的值即成为筛选条件
- 两种消费者同源:面板与 agent 工具走同一层归一化与参数夹取,
loglens_search 的返回形状与面板所见一致
- 只读,且受围栏约束:四条路由都在回环加固档下(除「开关」这一动作外都要同源证明);出站按解析后的 IP 判定(链路本地 / 云元数据地址拒绝)、不跟随重定向、有体积与超时上限
dsh plugin --profile web add @hyzyn/dsh-loglens
完整用法、配置形状与契约 → packages/loglens/README.md。
是什么
dsh-plugin-kit 是给 DeepSeek Harness(DSH)Web GUI 用的通用插件集合。所有插件都走官方 profile
机制挂载到 dsh web,不改 DSH 源码;可以逐个安装,也可以用聚合包一次装齐。
按「配置类」→「面板类」→「开发类」排:
| 能力 | 原生 dsh web | dsh-plugin-kit |
|---|
| MCP 服务器 | 手改 patch / 命令行 | 可视化卡片 + 连接测试 + 保存后热加载 |
| 环境变量 | 手改 env.yml / 命令行 | Web GUI 卡片,保存即写入 process.env |
| Prompt 管理 | 手改配置 | 可视化编辑 + 版本管理 / A/B 测试 / 导出分享 |
| Profile 管理 | 命令行 | 可视化创建 / 复制 / 重命名 / 删除 |
| RSS 聚合 | 无 | 多源订阅 + 每日「今日值得读」+ 可选 AI 摘要(跟随宿主默认模型,零配置) |
| 全局搜索 | 仅会话标题 / 内容 | 侧边栏一处全文检索历史会话、Prompt、MCP 工具与设置面板 |
| 终端面板 | 无 | xterm.js 多标签真实 PTY + SSH 直连(连接簿 / 指纹钉扎 / 断线重连)+ SFTP 双栏直传;注册 tty_* / sftp_* 工具 |
| Docker 容器面板 | 无 | 容器 / 镜像 / Compose / 实时日志与统计 / 多目标总览;默认只读,变更与 exec 需显式开关;注册 docker_* 工具 |
| 日志查询 | 无 | 新:Elasticsearch / OpenSearch 归一化成一个查询面(Docker 走现成 docker_logs;Loki 适配器在仓库里但本版不在界面开放);面板里直接查 + 时间分布 + 分组榜;注册 loglens_* 工具(全 read 档) |
| Codegraph 集成 | 无 | 代码图谱卡片:索引状态 / 符号搜索 / 调用链 / 影响面 / 一键 sync-index |
| 插件开发 | 手写样板 | pnpm create-plugin 脚手架 + @hyzyn/dsh-kit 共享工具库 |
每个插件的完整功能、截图与注意事项在它自己的 README 里(见下表)。本文件只讲「是什么 + 装哪个」。
包索引
1 个共享库 + 11 个功能插件 + 1 个聚合包;包之间的关系、依赖方向与跨插件协作见
docs/architecture.md。
| 包 | 干什么 | 文档 |
|---|
@hyzyn/dsh-kit | 库(非插件):宿主半体共享工具——HTTP 回环围栏、托管区块、!!js 表达式、服务读取 | README · DEFECTS |
@hyzyn/dsh-env | 环境变量 / 密钥管理 | README |
@hyzyn/dsh-mcp | MCP 服务器配置卡片,保存后热加载 | README |
@hyzyn/dsh-prompt | systemPrompt 编辑 / 版本 / A/B | README |
@hyzyn/dsh-profile | ~/.dsh/profiles 图形化管理 | README |
@hyzyn/dsh-kit-settings | 在官方「设置」里补一行「插件配置」入口 | README |
@hyzyn/dsh-rss | RSS 聚合 → 每日「今日值得读」 | README |
@hyzyn/dsh-search | 侧边栏全局搜索(⌘ / Ctrl + K) | README |
@hyzyn/dsh-codegraph | 代码图谱卡片 + MCP 托管 + 采纳率测量 | README · · |
快速开始
系统要求
- 已安装 DeepSeek-Harness,
dsh web 可正常启动。当前适配十三档基线:DSH 0.1.7-rc.2、0.2.0-rc.1、
0.2.0-rc.2、0.2.1-alpha.1、0.2.1-alpha.2、0.2.1-alpha.5、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3、0.2.1-rc.4、0.2.1-rc.5、0.2.2-alpha.3 与 0.2.2-rc.1;
0.1.6-alpha.2 及更早不再支持(最新八档都是显式声明,但不都是零差异:0.2.2-alpha.3 移除了一个
主题令牌,rss / search 的侧栏 hover 已随档适配;0.2.1-alpha.5 带着判定器、engines.dsh、凭据与
macOS picker 的真实行为变化;其余六档对宿主零差异——本轮新增的 0.2.2-rc.1 逐文件比对
只有 4 个客户端的版本串变了。逐条证据见
scripts/check-dsh-peers.mjs 头部的 cohort 说明)。
- 兼容性由每个可安装插件在
peerDependencies 里声明的 @deepseek-ai/dsh 范围保证,DSH 在安装前
与启动时各校验一次。被拦下长什么样、怎么临时放行 → docs/troubleshooting.md § 兼容性校验。
- npm 安装无额外要求;从仓库源码安装需要 Node.js >= 22.19 与 pnpm 10(低于此版本
pnpm install
会直接失败,不是警告——判据见 docs/conventions.md § 环境下限)。
宿主自己的 Node 下限由宿主声明:0.2.2-alpha.3 起要求 Node >= 24.9(CI 的挂载车道已切到 Node 24),
但本仓的开发下限仍是 22.19——老 cohort 继续在 Node 22 上工作。
npm 侧只会打 EBADENGINE 提示、不阻塞安装。
从 npm 安装
推荐按需装——下面一行一个包,只装你要的。从「配置三件」起步最省(env / mcp / prompt,
都不向模型注册工具):
dsh plugin --profile web add @hyzyn/dsh-env # 环境变量 / 密钥
dsh plugin --profile web add @hyzyn/dsh-mcp # MCP 服务器
dsh plugin --profile web add @hyzyn/dsh-prompt # systemPrompt
dsh plugin --profile web add @hyzyn/dsh-profile # Profile 管理
dsh plugin --profile web add @hyzyn/dsh-kit-settings # 设置里的「插件配置」入口
dsh plugin --profile web add @hyzyn/dsh-rss # RSS「今日值得读」
dsh plugin --profile web add @hyzyn/dsh-search # ⌘/Ctrl+K 全局搜索
dsh plugin --profile web add @hyzyn/dsh-codegraph # 代码图谱卡片
dsh plugin --profile web add @hyzyn/dsh-tty # 终端面板(PTY / SSH / SFTP)
dsh plugin --profile web add @hyzyn/dsh-docker # Docker 容器面板
dsh plugin --profile web add @hyzyn/dsh-loglens # 日志查询(ES / OpenSearch / Docker)
包名、一句话说明与各自的文档见上方 包索引。
装之前知道一件事:各包动到的面不一样(细节在各包 README;机制见
docs/architecture.md § 7):
| 装了它 | 意味着 |
|---|
| 给模型注册工具,真正改变 agent 能力 | tty(tty_* / sftp_*——真实的 shell / SFTP 通道)· docker(docker_*)· loglens(loglens_*,全部 read 档:只查你配置的日志后端)· codegraph(替宿主托管 codegraph MCP 行,于是 mcp__codegraph__* 进模型工具箱) |
| 只往 systemPrompt 添一段 | rss(「今日值得读」那段)· search(插件能力公告);prompt 卡片做的本身就是编辑 systemPrompt |
| 只动你自己的配置与界面 | env(保存即写进宿主的 process.env,环境变量仍是你自己的配置)· profile · kit-settings · mcp(它是配置入口——自己不加工具,你填进去的服务器会) |
一次装齐就是聚合包,权限敞口是各包的并集——不知道要哪个就先别装它:
dsh plugin --profile web add @hyzyn/dsh-all # 聚合安装包
dsh plugin --profile web add @hyzyn/dsh-plugin-kit # 仓库根 bundle(同样挂载全家桶)
装完重启 dsh web,插件配置页里出现全部条目即生效;条目没出现多半就是没重启,
也可以用 dsh --profile web --dump-config 确认插件配置层已挂载。
卸载:dsh plugin --profile web remove @hyzyn/dsh-all(或对应子包名),再重启。
配置入口在哪一版:DSH ≥ 0.1.6-alpha.2 有两个入口,指向同一份配置——侧边栏
「插件」→ 选插件 → 该行的「配置」(官方新版两视图页面),以及设置 →「插件配置」
(与「通用设置」平级的一行,由 @hyzyn/dsh-kit-settings 提供)。
客户端半体同时注册三代插槽(plugins.row.config、settings.kit.item、settings.plugin.item),
一份产物在各代上都能用。
这份配置本身落在当前 profile 的插件 entry(cordis.patch.yml 用户层),不再是全局 settings.yaml
section,见 术语表。
装不上 / 卡片不出现 / 插件整体消失 / 接口报 401、403 → docs/troubleshooting.md。
从 GitHub 仓库安装(开发调试)
仓库根目录本身也是一个 DSH bundle(package.json#dsh.bundle.patch,由 pnpm aggregate 生成):
git clone https://github.com/hyzyn/dsh-plugin-kit.git
cd dsh-plugin-kit
pnpm install
pnpm build
dsh plugin --profile web add link:$(pwd) # 根包即 bundle,等价于安装 @hyzyn/dsh-all
dsh web
⚠️ 如果 web profile 里已经装过 @hyzyn/dsh-all 或任一 @hyzyn/dsh-<包名>,
不要再 add 根包(或 packages/all),否则插件行重复挂载会在启动时报
duplicate loader entry id。
只想用某个子包:最后一步改为 dsh plugin --profile web add link:$(pwd)/packages/<name>。
根包声明了 dsh 字段后,GitHub 的 DSH 插件市场会把本仓库识别为 DSH 插件(cordis-plugin)。
开发新插件
pnpm create-plugin <name> [id]
# 例:pnpm create-plugin timer → packages/timer(@hyzyn/dsh-timer,插件 id: timer)
# 例:pnpm create-plugin pet-tracker pt → packages/pet-tracker(插件 id: pt)
脚本会复制 templates/hello 模板、替换包名与插件 id,并自动更新聚合包。然后编辑
packages/<name>/src/index.ts,构建后本地调试:
pnpm --filter @hyzyn/dsh-<name> build
dsh plugin --profile web add link:$(pwd)/packages/<name>
新包要建哪些文档、多长、编号怎么起,插件包的解剖(dsh.bundle.patch / cordis.patch.yml /
src/index.ts / dsh.client),以及六条容易踩的硬规矩(客户端半体的地址来源、逻辑抽模块、
点击委托作用域、样式变量名与取值等)
→ docs/conventions.md § 客户端半体。
文档地图
参与贡献
- 新插件用脚手架生成:
pnpm create-plugin <name> [id],避免手写样板。
- 提 issue 走模板(Bug 报告 / 功能请求,空白 issue 已关闭):必填的环境 / 版本 /
复现步骤 / 自查结果对应 docs/troubleshooting.md 的
通用顺序,填全了才有人能在第一轮定位。格式约束见
docs/conventions.md § Issue。
- 提交信息遵循 Conventional Commits(如
fix(mcp): 修复连接测试超时),
用户可见变更请附截图或验证证据。
- 提交前过门禁:
pnpm typecheck && pnpm build && pnpm test && pnpm aggregate;
增删插件后必须跑 pnpm aggregate 重新生成 packages/all 聚合清单。
- 命名 / 编号 / 文档分层等完整规范见 docs/conventions.md。
许可证
本仓库以 Apache License 2.0 授权。
贡献者