快速结论
最小插件导出 name 与 apply,通过 cordis.yml overlay 加载。先验证加载,再增加服务依赖;自建计时器或连接应提供卸载清理,避免重复加载留下资源。
- 官方插件教程从已完成源码安装的仓库开始,插件可导出 apply(ctx)。
- 本地 overlay 的插件路径需要写为绝对路径;patch 文件位置不会改变 profile 的模块解析目录。
- 消费其他服务时声明 inject;自建资源可通过 ctx.effect 返回清理函数。
- 本文代码据官方文档整理,未在本机执行 Harness 安装或插件运行。
本次更新:10 月 28 日复核:10 月 28 日:开发插件与索引发现分别验收。保留原网址和首次发布时间。
本文沿用官方最小插件教程的接口,目标是建立一个可观察、可卸载的本地扩展。适用前提:已经完成官方仓库的源码安装与构建。API 仍在演进,先记录仓库提交;以下是文档示例,本站没有执行安装或运行验证。
1. 创建一个只打印日志的插件
在仓库根目录创建 scratch-plugin/src/operator-note.ts,先不接入任何业务系统:
import type { Context } from '@deepseek-ai/cordis'
export const name = 'operator-note'
export function apply(ctx: Context) {
console.log('[operator-note] initialized')
}
apply 在框架加载插件时执行。第一步只验证模块能被找到、入口能被调用,不同时混入模型请求、网络连接和文件写入。
2. 写入加载 overlay
创建 scratch-plugin/cordis.yml。把示例路径替换成你实际仓库的绝对路径:
- insert:
- id: operator-note
name: '/absolute/path/deepseek-harness/scratch-plugin/src/operator-note.ts'
在仓库根目录启动:
pnpm dsh web --patch ./scratch-plugin/cordis.yml
终端出现 [operator-note] initialized 才说明这个入口已执行;只看到 Web 页面打开还不够。路径错误时先检查文件是否存在、路径是否绝对,不要靠反复安装依赖掩盖配置问题。
3. 再增加依赖与清理
若插件需要 tools 等服务,应按当前服务文档导出 inject,并核对对应接口后再调用。框架会等待依赖可用。通过框架上下文登记的效果与自行创建的资源,要按官方生命周期处理;例如直接创建的计时器可在 ctx.effect 中返回 clearInterval 清理函数。
4. 用四个现象验收
先检查加载日志,再改变一个可观察配置,随后卸载插件,最后重新加载。分别确认:新值生效、卸载后相关资源停止、重载没有重复效果。不要把一次启动成功写成插件已经适用于所有预览版本。
需要进一步开发时,再阅读配置 schema与服务依赖。发布插件前记录依赖版本、适用的 Harness 版本和一个明确的演示任务。
10 月 25 日:rc.3 提供更多插件入口
官方 rc.3 在左侧栏、会话视图和右侧栏新增“更多”菜单,方便浏览与创建插件。本页源码 overlay 流程与界面入口分别核对,不将打开插件页当作模块已经加载。
使用图形入口后,仍按本页的加载、配置、卸载和重载现象验收;采用的模板、依赖和运行版本应另行记录。新增入口背景见rc.3 更新。
10 月 27 日:市场安装入口与插件开发分别核对
社区 dshmarket 已更新至 1.71.1,其 README 明确区分官方 Desktop 应用内插件管理与普通 dsh web 的 web 档案。安装市场的命令成功,不代表插件出现在 Desktop 的托管档案。具体见市场安装对照。
开发本地插件时仍按本教程逐项验证加载、工具行为和卸载清理;使用市场只是获取插件的一条路径,不能代替自己的运行验收。
10 月 28 日:开发插件与索引发现分别验收
官方索引入口和社区市场获取路径需要分别记录。新入口操作见固定版本索引教程。开发本地插件仍须验证加载、依赖和卸载,索引收录不能代替这一过程;开发扩展升级前另查相关接口迁移要求。
参考资料
本文依据以下资料整理,版本与接口信息请以来源页面的现行说明为准。