DeepSeek Harness Hub
← 返回列表

jwilson411/dsh-plugin-kit

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

一个极简、可安装的 DeepSeek Harness 函数插件模板。它是仍然算得上真正插件的最小形态:一个包,既是…

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/1 · 已提供中文文档

一个极简、经过测试的 DeepSeek Harness 插件模板。

综合分
28.1
GitHub 分
28.1
用户评分
★ Stars
0
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add jwilson411/dsh-plugin-kit
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/20(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools@deepseek-ai/cordis
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-plugin-kit

一个极简、可安装的 DeepSeek Harness 函数插件模板。它是仍然算得上真正插件的最小形态:一个包,既是 profile bundle(它附带一个 patch 层),又是该层所挂载的 plugin,只注册一个面向模型的工具 kit_ping。

复制它,重命名它,替换掉那个工具。

安装

dsh plugin --profile web add github:jwilson411/dsh-plugin-kit

dsh plugin 会在 $DSH_HOME/profiles/web 内转发给 pnpm,然后根据已安装状态对 profile 进行协调:由于此包的 manifest 声明了 dsh.bundle.patch,它会被追加到 profile manifest 有序的 dsh.profile.bundles 列表中,其 patch 也就成为一个层。没有该声明的包会作为普通依赖安装,而不是一个层。

移除方式相同,把 add 换成 remove 即可。

锁定的 DSH 候选版本

此包是针对锁定的候选版本 0.1.1-rc.2 编写并测试的——即当前的 @deepseek-ai/dsh 版本以及与之匹配的 @deepseek-ai/dsh-tools@0.1.1-rc.2,后者被精确锁定在 devDependencies 中,以便测试针对一个已知 API 运行。peer 范围是 ^0.1.1-rc.2,与 harness 自身工具包声明它的方式一致。

请注意,@deepseek-ai/dsh-tools 的 npm latest 标签仍指向较旧的 0.0.1-rc.1;0.1.1-rc.2 系列发布在 next 下。请显式锁定,而不要依赖该标签。

它注册了什么

| | |
|---|---|
| Cordis 插件 id | plugin-kit(cordis.patch.yml 中的行 id) |
| 注入 | tools —— 硬依赖;插件会等待而非降级 |
| 工具 | kit_ping |
| 参数 | who(字符串,必填) |
| 返回 | { message, greeted, plugin } |

kit_ping 是一个存活检查:它不读取任何内容,不写入任何内容,也不访问网络,因此可以安全地安装在任何地方,且不需要 API 密钥。

目录结构

package.json        manifest + dsh.bundle.patch —— 正是它使其成为 bundle
cordis.patch.yml    bundle 的 patch 层:一次 insert,一行 plugin
src/index.js        插件:name、inject、apply(ctx)
test/               离线测试,无网络、无凭据

两个部分

manifest 声明 patch。 这个字段正是 profile 安装器所要查找的;没有它,这个包就只是一个库:

"dsh": { "bundle": { "patch": "./cordis.patch.yml" } }

patch 挂载插件。 patch 文件是一个顶层 YAML 数组,由 patch 条目组成,并叠加在其下方的 bundle 之上:

- insert:
- id: plugin-kit
name: dsh-plugin-kit

各层按顺序组合:先是按 dsh.profile.bundles 顺序排列的每个 bundle 的 patch,然后是 profile 自身的 cordis.patch.yml,接着是 home 级文件,最后是任何 --patch 覆盖层。较后的层通过行的 id 来定位某一行。这样的 patch 会替换该行的整个 config,而不是合并进去,因此覆盖时必须重新声明它要保留的字段。
使用 dsh --dump-config 检查组合后的树,而无需启动它。

插件

具名导出会保留加载器的注入元数据,因此请逐个导出它们,而不是作为一个默认对象导出:

import { defineTool } from '@deepseek-ai/dsh-tools'

export const name = 'plugin-kit'
export const inject = ['tools']

export function apply(ctx) {
ctx.tools.register(createKitPingTool())
}

注册发生在 apply 内部,这样 Cordis fiber 就拥有该副作用:停止、更新或重新加载插件都会注销该工具。register 会返回一个 disposer 以实现有序的所有权管理;如果插件只为自身的生命周期注册,则无需保留它。不要在模块作用域中注册。

inject: ['tools'] 声明了一个硬依赖。对于插件可以缺少的能力,请改用 ctx.get('name') 并处理 undefined——在未声明注入的情况下直接访问 ctx.tools 会被守卫拒绝。

工具

defineTool 会从 parameters 推断参数类型,并在函数体运行前针对该类型验证每次调用,因此 execute 接收到的参数是经过类型化、已验证的,而失败路径由 API 负责,而不是由你负责。

在你编辑 schema 之前,有两个值得了解的契约细节:

- 参数映射是一个隐式的开放对象根。 每个属性都带有自己的 required: true;编译后的 schema 没有 additionalProperties: false,并且 API 没有提供任何关闭它的方式,因此未知键会被容忍并忽略。缺失属性、类型错误以及非对象参数都会以 ToolArgsError 拒绝。
- 嵌套对象和输出对象必须显式声明 additionalProperties,这样它们就永远不会获得意外的默认值。

output.schema 是规范的结果契约,而 output.render 是将已验证的值纯投影为模型所看到的内容块。参数和结果都必须是无损 JSON。

测试

npm install
npm test

从构造上就是离线的:apply 被传入一个记录注册的桩上下文,而该工具通过注册表调用的同一个 execute 来驱动。不会启动任何 profile,不会打开任何套接字,不会读取任何密钥。测试套件覆盖了注册、与其声明的输出 schema 匹配的成功调用、渲染投影、对错误参数的显式失败,以及 manifest/patch 接线。

CI(.github/workflows/ci.yml)在 Node 22 和 24 上运行同样的两条命令,并且不需要任何凭据。

让它成为你自己的

1. 重命名 package.json 中的包,并将 cordis.patch.yml 中的 name: 改为与之匹配——patch 行通过包名解析插件。
2. 为该行选择一个新的 id,并在 src/index.js 中选择一个新的 name。
3. 替换 kit_ping:它的 schema、它的函数体、它的描述。描述是面向模型的——说明该工具做什么以及何时使用它。
4. 保持测试诚实;断言你实际交付的契约。

许可证

MIT——参见 LICENSE。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群