插件开发
从独立项目开始开发节点、后台服务和扩展面板
Yotta 插件以 .ynp 文件交付。一个插件可以贡献工作流节点,并携带后台服务和扩展面板。作者在独立项目中开发,固定 SDK 版本,编译并打包后通过本地导入或市场安装使用。
从哪里开始
当前支持范围
| 目标 | 可用路径 |
|---|---|
| 自定义工作流节点 | Go Process SDK;节点合同声明配置、类型、输入输出、执行分支和宿主目标 |
| 调用外部服务或应用 | 通过节点声明的 Configured Target 和宿主调用协议,使用用户配置的目标 |
| 持续采集或设备连接 | 包内 companion 后台程序,由 Yotta 管理启动、健康检查和停止 |
| 插件扩展面板 | 声明式组件树,companion 提供 snapshot 与 event 接口 |
| 中英文显示 | 包描述中的插件自有翻译键,用于节点、面板和错误 |
| Windows amd64 / arm64 | 项目模板可分别编译、打包;平台支持随包声明 |
| Wasm | 运行时与低层示例存在,无 WASI;当前 Go 高层打包器固定 Process,脚手架不声称覆盖 Wasm |
| TypeScript | 目前提供协议类型,不是完整的 TypeScript 插件运行时或作者工具链 |
插件不能直接访问 Yotta 的 Vue、DOM、内部数据库或 Go internal API。扩展界面使用正式面板合同。需要现有合同没有表达的能力时,先明确扩展点,再由产品实现支持;不要在插件中依赖宿主实现细节。
SDK 组成
SDK 当前随 Go module github.com/yottaapp/yotta 提供。插件项目只导入这些公开包:
| 包路径后缀 | 职责 |
|---|---|
sdk/plugin/go |
Guest 协议、Value Envelope、结果、状态和宿主调用 |
sdk/plugin/authoring |
节点合同、内建数据类型、配置和执行定义 |
sdk/plugin/packaging |
生成清单、内容摘要、签名和完整 .ynp |
sdk/plugin/panel |
面板定义、Snapshot、Event、Result 与协议校验 |
SDK 自己使用宿主实现不意味着插件可以导入 Yotta 的 internal/。独立项目也不应通过 replace 指向相邻 Yotta 源码;使用固定版本或显式导出的本地 module proxy。
三种身份不要混淆
- SDK 版本:决定开发时依赖的 API 和合同。
- Package ID / package version:决定安装和更新的插件包身份。
- Node Type ID / node version / semantic digest:决定工作流引用的节点语义。
升级包不自动升级节点合同。重命名显示名称也不应改变包、节点或面板组件的稳定 ID。平台自动生成系统兼容筛选;作者在市场填写业务分类、标签和维度。
源码入口位于 Yotta 仓的 sdk/plugin/authoring/README.md、sdk/plugin/panel/README.md、sdk/plugin/templates/ 和 scripts/create-plugin.py。协议生成入口 cmd/plugin-sdk 用于维护 SDK 合同,并不是创建插件的命令。