[教程] 从零到发布:给 DeepSeek Harness 写你的第一个插件(实战踩坑全记录) #961
ciceroyang
started this conversation in
Show and tell
Replies: 2 comments
|
补充三个链接,方便不同需求的读者:
插件已发布为公开仓库并打上 dsh-plugin topic,欢迎 star 与反馈;如果它帮你省下写日报的时间,可以请作者喝杯咖啡(GitHub Sponsors)。 |
0 replies
|
更新:插件已发布首个正式版本 v0.1.0(新增 /report 斜杠命令即时预览)。
后续计划:多会话聚合周报(免费)、飞书/Notion 发布适配(进模板包)。欢迎 star、试用、反馈。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
从零到发布:给 DeepSeek Harness 写你的第一个插件(实战踩坑全记录)
为什么现在值得做
DeepSeek Harness(简称 dsh)是 DeepSeek 开源的首个 Agent 框架,"一切皆插件":
模型、工具、会话、技能、UI 全部是 Cordis 插件。目前处于开发者预览期,
核心仓库暂不接受外部 PR,官方把贡献路径指向生态:
dsh-plugintopic 即可被发现)社区已经有 awesome 目录(900+ 公开插件)。空白仍然很多——比如"会话→工作交付物"
(日报/周报/交接文档)一个插件都没有,所以我做了 dsh-report-studio。
起步:两种加载方式
方式一(正式安装,需要 pnpm)
它转发给 profile 目录里的 pnpm。没有 pnpm 会直接报错——先装:
方式二(本地开发,--patch 覆盖层,不需要 pnpm)
按官方教程建一个覆盖层文件:
最小插件骨架(免构建,纯 ESM)
几个关键点:
inject: ['tools']让 Cordis 等工具注册表就绪后再执行apply。defineTool从@deepseek-ai/dsh-tools导入;parameters推断并校验参数,output.schema校验返回值,output.render把返回值变成模型看到的内容。additionalProperties: true,否则注册直接失败。字符串参数用
enum: ['a','b']约束取值;可选参数直接省略required。打包成可安装的 bundle
profile 清单里的两个概念(bundle 与 profile)由两份 manifest 区分:
dsh plugin --profile web add github:你的账号/你的仓库即装即用。在工具里读当前会话(官方能力,零私货)
工具执行时通过
exec.agent.session拿到当前会话:会话是事件溯源日志,常用事件:
turn/start/turn/endstep/start/step/enduser/messageassistant/messagetool/call/tool/resulttodo/write跨会话查询还有官方
ctx.sessionQuery服务(web 默认不挂载,别当硬依赖)。注册运行时 skill
skill 的 Markdown 是模型视角的说明书:何时用、分几步、每步调哪个工具、
硬规则(比如"保存前所有 [[待写:…]] 必须清零")。它按需注入,不占常驻 token。
我踩过的坑(全部实测)
--patch绝对路径插件的模块解析:插件里的裸导入(如@deepseek-ai/dsh-tools)从插件自己的目录向上找 node_modules,找不到就直接启动失败。
官方教程之所以能跑,是因为 scratch-plugin 建在仓库 checkout 里。
本地开发时,给插件目录软链依赖即可:
(正式
dsh plugin add安装不受影响,pnpm 会从 profile 解析 peer 依赖。)headless bundle 装不进新建 profile:
@deepseek-ai/dsh-headless依赖的@deepseek-ai/dsh-code-runtime-worker不在 npm 上。想跑 e2e 就用默认 headless profile + --patch,别新造 profile。
pnpm 缺失:
dsh plugin报 "pnpm not found on PATH" 就是没装;国内网络用镜像
npm i -g pnpm --registry=https://registry.npmmirror.com。Node 26 的
node --test tests/行为变了:目录参数会被当模块加载;直接
node --test让它自动发现*.test.js。占位符校验要真校验:我在 report_save 里拒绝残留
[[待写:…]]的报告,e2e 时这个守卫真的拦截了一次模型输出——守卫不是摆设,要测到它生效。
测试与发布清单
哈希断言用已知向量(sha256('abc'))。
gh repo create 你的名字/你的仓库 --public --source . --push,然后
gh repo edit --add-topic dsh-plugin。没有合适类目就提案新类目,我的 PR 就是这么干的:新类目"输出与交付")。
一个可照抄的完整例子
dsh-report-studio:
会话 → 日报/周报/交接文档/公众号文章 + 可验证凭据(报告与产物 SHA-256)。
结构一目了然:index.js(宿主插件)+ lib/(纯函数)+ templates/(Markdown 模板)
在开源生态里,官方包与社区包同样重要——这是 Harness 官方白纸黑字的态度。
现在空白还多,动手吧。
All reactions