插件开发(源码预览)
本页针对正在开发的插件内核,不适用于已发布的 0.5.0-preview.3 二进制。产品版本尚未升级到 1.0.0,服务端插件管理 API 和完整 Capability 尚未开放。
运行第一个本地插件
在仓库根目录构建当前源码。需要 Go 1.26.5;无需 npm 发布令牌。
成功时输出结构化 JSON,包含 production_isolation: false 和 Hello 路由的 200 响应。不传 --call 时保持运行,按 Ctrl+C 停止。dev 使用独立临时控制库与随机测试身份,不读取已部署 Core 的配置、凭据或数据;退出自动注销 Session 并删除运行时临时目录。上例创建的开发工程和签名文件留在 plugin_workspace,便于继续修改,需自行妥善保管或清理。
开发模式没有生产沙箱。只运行自己信任的本地插件,不运行来历不明的制品。 当前所有平台的生产模式都拒绝启动;Linux 的 systemd/cgroup v2、bubblewrap、namespace 和 seccomp 组合尚未完成。
工程、签名与协议
manifest.json中的pluginId在创建时随机生成并永久保存,不要在每次构建时更换。--sdk-dir使用当前仓库的server/pkg/pluginSDK。公开1.0.0SDK 尚未发布,当前不能删除本地replace后期待下载成功。build为 Manifest 中声明的目标构建原生二进制;pack和sign均从工程生成已签名.akpZIP,不修改既有制品。- 私钥默认权限为
0600,必须放在工程外,不能进入 Git。打包只收集 Manifest 引用的文件及显式文档,不递归打包工作树。 - 验签覆盖 Manifest 与全部有效载荷;拒绝路径穿越、链接、重复路径、摘要篡改、错误平台和无效原生可执行格式。
- Go SDK 使用 TLS/gRPC;Bootstrap Token 从标准输入管道单次消费,不进入参数或
core.json。普通请求体与响应均有界,不支持无限流或插件 WebSocket。 - CLI 文案默认
zh-CN,可通过AK_LOCALE=en-US切换;协议字段与错误码不随语言改变。
验证与当前边界
PostgreSQL 测试只在指定库中新建和清理随机测试 Schema,不应指向生产数据库。默认测试包括 SQLite 授权器隔离、真实子进程的分块/取消、开发生命周期和重启恢复。它们不代表完整 Capability、生产隔离或 Windows 原生验收。
源码目录已经包含生成的 Protobuf 文件,无需每次构建重新生成。修改协议后,用 protoc 36.1、protoc-gen-go 1.36.12 和 protoc-gen-go-grpc 1.6.2 执行 make plugin-protocol。
下一阶段仍需完成插件服务 API、租户激活/授权、PostgreSQL 业务数据隔离、完整 Capability、迁移备份、Linux 隔离及全部插件管理命令。SQLite API Client 和多服务器 Profile 已在当前源码补齐,见远程客户端指南。完整清单保存在仓库 docs/plan/PLUGIN_IMPLEMENTATION_ADDENDUM.md。当前安装渠道仍使用已有预览制品,见 akone 安装与部署。