尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

写第一个 DeepSeek Harness 插件有多难?以 dsh-context 为例的入门教程(双半身结构 + 打包发布)

写第一个 DeepSeek Harness 插件有多难?以 dsh-context 为例的入门教程(双半身结构 + 打包发布) 写第一个 DeepSeek Harness 插件有多难以 dsh-context 为例的入门教程双半身结构 打包发布【免费下载链接】dsh-contextThe best DeepSeek Harness plugin for context insight and management, with context dashboard / browser and context command, for context statistics, composition, breakdown, evolution details, understanding how the context is made of, and how it evolves. 一站式 DeepSeek Harness 上下文可视化插件Context 面板及浏览器与 Context 命令透视上下文组成、演进、压缩、剪枝等事件与动作。项目地址: https://gitcode.com/gh_mirrors/ds/dsh-contextdsh-context 是一款面向 DeepSeek Harness 的上下文可视化插件它提供了 Context 上下文面板、上下文浏览器与/context斜杠命令帮助你透视 Agent 上下文窗口的组成、占比、压缩、剪枝与演进过程。这篇文章以 dsh-context 为完整示例带你走通读懂双半身结构 → 本地开发调试 → 打包构建 → 发布上线的完整链路让你用最低成本写出自己的第一个 DeepSeek Harness 插件。一、先认识 dsh-context它解决了什么问题Agent 对话越来越长上下文窗口里到底装了什么哪一块最费 token压缩和剪枝发生在什么时候这些问题平时都是黑盒。dsh-context 给出了一套答案Context 标签页 — 会话统计、当前组成、历史演进、事件流、消息列表/context命令⌨️ — 在会话中一键打开上下文弹窗无需离开聊天界面。它本身就是一个标准 npm 包 标准插件结构没有任何特殊魔法所以非常适合作为入门模板。二、核心概念DeepSeek Harness 插件的双半身结构写 DeepSeek Harness 插件最大的认知门槛只有一个一个插件包 两个半身分别跑在两个环境里。半身运行环境入口文件职责host 半身Node 端harness 进程src/host/index.ts声明name/inject/Config/apply向框架注册数据面client 半身浏览器Web UIsrc/client/index.tsReact 界面注册 Context 标签页与/context命令host 半身是一个标准的 cordis 插件模块。以 dsh-context 为例它在src/host/index.ts中只做了两件核心的事声明依赖的服务inject: [sessionProjections]然后在apply()里注册两个会话投影单元——把会话的持久事件流折叠成按请求维度的上下文时间线由框架的推送管道自动送到浏览器。没有自定义 RPC、没有轮询这是官方推荐的投影数据面范式。它的配置块src/host/config.ts中的Config用 zod 定义了保留条数等可调参数cordis 会在apply运行前自动校验并填默认值——官方插件配置原则任何两种部署可能想设置不同的东西都应该是配置字段。client 半身负责所有 UI。src/client/index.ts中通过 slot 机制把上下文/Context标签页注册进会话视图环conversation.viewslotorder 20 排在 Chat 和 Trajectory 右侧并注册/context斜杠命令打开居中弹窗。它读取数据的方式同样零成本直接用框架标准套件useProjection(contextTimeline)拿到 host 半身推来的成品值。两个半身靠package.json里的三处声明缝合在一起exports双出口.→lib/index.jshost 半./client→lib/client.jsclient 半dsh.client字段声明platform: web和inject列表宿主据此发现并加载浏览器半cordis.patch.yml一行insert补丁安装插件时把该包注册进宿主插件树。三、本地调试步骤从克隆到浏览器里看到面板✅ 整个链路没有构建障碍也没有重启烦恼。完整步骤如下git clone https://gitcode.com/gh_mirrors/ds/dsh-context cd dsh-context pnpm install pnpm run build把本地包注册为 web profile 的插件仓库自带的 scripts/register.sh 做了同样的事先 remove 再 add保证幂等dsh plugin --profile web add .然后启动 Web UI打开任意会话点击Context / 上下文标签页即可dsh web开发期间建议开着热更新改代码即刷新无需手动重建pnpm run watch四、打包发布一次构建出两个半身dsh-context 的构建配置集中在 tsdown.config.ts用tsdownrolldown 系一次产出两个目标这是整个插件工程化最关键的部分构建目标入口产物关键设置host 半身src/host/index.tslib/index.jsESMplatform: node、dts: true类型契约随包发布、生产依赖保持 externalclient 半身src/client/index.tslib/client.jsCJSplatform: browser、sourcemap、window.__ModuleLoader__.load({ id, factory })包装头尾三个必须踩准的坑dsh-context 的注释里都给了理由外部依赖必须与平台模块表一致react、deepseek-ai/cordis、deepseek-ai/dsh-client-ui-primitives等由浏览器壳统一播种client 包必须 external浏览器里的require才能解析到同一份实例重复内联会直接破坏单例产物必须包成 closure-factory CJSbanner/footer 把整个 bundle 包进window.__ModuleLoader__.load({ id: 包名, factory: (require) { ... } })这是 web 启动握手协议id 固定为 npm 包名环境常量要在构建期替换浏览器 CJS 产物带不了import.meta.envprocess.env.NODE_ENV等都要用define提前写死否则启动即抛 ReferenceError。此外还有一个dsh-client-bundle-purity插件凡是未经声明的deepseek-ai/*值导入直接报构建错误——跨插件协作只能走 cordis 服务这条护栏值得每个插件作者抄走。最后检查files白名单lib/index.js、lib/client.js、cordis.patch.yml、README.md、LICENSE保证发到 npm 上的东西最小且完整。五、发布上线从版本号到用户可装dsh-context 的发布遵循打 tag 即发布的流程AGENTS.md遵循X.Y.Z语义化版本大版本.次版本.小版本执行git tag vX.Y.Z并创建 releaseCI 工作流自动完成构建、测试、发布到 npm本地无需手动介入也提供了手动脚本 scripts/publish.sh自动构建 → 检测版本是否已发布已发布则自动 bump→npm publish→ 回查 registry 校验。token 只从环境变量读取不落盘支持 2FA 的NPM_OTP。对用户侧来说发布完成的意义就是这两条命令dsh plugin --profile web add dsh-context # 安装 dsh plugin --profile web update dsh-contextlatest # 更新无构建步骤、无重启装完dsh web直接生效。六、发布后的产品效果用户真正用到的四个视图上图是一次真实会话48 轮对话涨到约 563k tokens一次压缩✂单步回收 −535.5k然后从小窗口继续。History 卡片里悬停任意柱子还能实时驱动旁边的Context 浏览器预览那一步的组装现场Step 粒度下悬停即显示该步的轮次、时间戳与预估/服务商实报 token 数方便快速定位哪一步把预算吃掉了它还完整适配了多模态管道带图片的消息展开为卡片布局每张图按官方图片尺寸→token换算标出估算成本每张 117–384 tokens不再是静默丢弃七、你的第一个 DeepSeek Harness 插件清单速查把 dsh-context 的经验浓缩成一张 checklist照做即可起步 标准 npm 包exports提供.与./client双出口src/host/index.ts写 cordis 插件四件套name/inject/Config/applysrc/client/index.ts注册 UIslot locale 样式注入⚙️package.json声明dsh.clientplatform、inject 提供cordis.patch.yml补丁层一行insert完成自注册 tsdown 双目标构建host 出 ESM d.tsclient 出 closure-factory CJSfiles白名单最小化发布面 tag 触发 CI 发布用户一条dsh plugin add安装写第一个 DeepSeek Harness 插件难不在 API而在这套约定两个半身、三处声明、一条补丁、一套构建。把 dsh-context 当模板拆解一遍你的插件就已经完成了一大半。【免费下载链接】dsh-contextThe best DeepSeek Harness plugin for context insight and management, with context dashboard / browser and context command, for context statistics, composition, breakdown, evolution details, understanding how the context is made of, and how it evolves. 一站式 DeepSeek Harness 上下文可视化插件Context 面板及浏览器与 Context 命令透视上下文组成、演进、压缩、剪枝等事件与动作。项目地址: https://gitcode.com/gh_mirrors/ds/dsh-context创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表