From 5ed8d65479cc11ca7e6ee49d3859461fb30dcfef Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Wed, 2 Sep 2026 22:40:15 +0800 Subject: [PATCH] =?UTF-8?q?meta:=20=E7=89=88=E6=9C=AC=E5=8D=87=E5=88=B0=20?= =?UTF-8?q?1.0.0=EF=BC=8C=E5=88=A0=E9=99=A4=20C=20ABI=20=E6=97=B6=E4=BB=A3?= =?UTF-8?q?=E7=9A=84=E6=AD=BB=E5=B8=B8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 为何是主版本号 公开 SDK 接口(sdk/ 目录)本轮**零改动**,插件业务代码一行不用改。 但产物形态变了:plugin.so → plugin.bin。0.9.x 内核只会 dlopen `.so`, 本版工具链产出的 `plugin.bin` 在旧内核上根本不会被识别—— 这是不可互操作的破坏性变化,故 CoreVersion 也升 1.0.0 作为**硬下限** 而非建议值。 ## 删掉的死代码 ABIVersion / ABIVersionMin / CABINum / CABINumMin / 51 个 Core 整数 ID,全部无使用者: grep -rn "CABINum" --include=*.go --include=*.tmpl . → 只有定义处 grep -rn "meta.Core[A-Z]" ... → 无 它们随 Part 6.2 删除 internal/plugin/cabi/ 就已失效: - 整数 method id 平移为 method 名字符串(proc/protocol.go 的 Method* 常量) - 版本协商改为握手帧里的 protocol 字段 留着有实际危害——下一个读这个文件的人会以为 C 层协商还在生效, 或者以为加 method 时要同步维护那张整数表。 ## 协议版本与语义版本解耦 新注释写明:子进程 RPC 的 protocol 是独立小整数(当前 1), 只在帧格式或握手语义变化时升;语义版本变动频繁(修 bug、加字段) 不应牵动 wire 协议。这两者以前被 ABIVersion = CoreVersion 绑在一起, 现在分开。 验证:go build ./... 通过;git diff sdk/ 为空(接口冻结不变量)。 --- meta/meta.go | 100 +++++++++++---------------------------------------- 1 file changed, 21 insertions(+), 79 deletions(-) diff --git a/meta/meta.go b/meta/meta.go index 883bbba..1e0619c 100644 --- a/meta/meta.go +++ b/meta/meta.go @@ -1,12 +1,15 @@ // Package meta 收集 HomeAgent SDK 的全部元数据。 // 版本号应与核心 meta.Version 保持一致。 -// ABI 版本与 Dispatch Method ID 应与核心仓 internal/meta/meta.go 保持一致。 package meta var ( // Version 是 HomeAgent SDK 版本号。 // 通过 `-ldflags="-X gitcode.com/JianFeeeee/homeagent-sdk/meta.Version=vX.Y.Z"` 注入。 - Version = "0.9.2" + // + // 1.0.0:插件运行模型从 C ABI 动态库改为子进程 + 共享内存。 + // 公开 SDK 接口(sdk/ 目录)**零改动**——插件业务代码不需要改一行, + // 但产物形态变了(plugin.so → plugin.bin),必须用新版 plugindev 重编。 + Version = "1.0.0" // Commit 是构建时的 Git commit hash。 Commit = "unknown" @@ -21,7 +24,10 @@ var ( CoreModule = "gitcode.com/JianFeeeee/HomeAgent" // CoreVersion 是此 SDK 所兼容的最低核心版本。 - CoreVersion = "0.9.2" + // + // 1.0.0 是硬下限而非建议值:0.9.x 内核只会 dlopen `.so`, + // 本版工具链产出的 `plugin.bin` 在旧内核上根本不会被识别。 + CoreVersion = "1.0.0" ) // FullVersion 返回完整的版本字符串。 @@ -29,79 +35,15 @@ func FullVersion() string { return SDKName + " v" + Version + " (" + Commit + ")" } -// ---- ABI 版本(与核心仓 internal/meta/meta.go 同步) ---- -// ABI 标识版本直接取内核版本号字符串(semver),与核心 Version 保持一致,不使用独立数字编码。 -// 协商层(C 结构体 int version 字段)使用 CABINum:由版本字符串派生的整数(major*100 + minor)。 -// 映射:v0.8.x → CABINum=800;v0.9.x → CABINum=900(invoke_stage 写回)。 -// 小版本(patch)演进不影响 ABI,CABINum 不变。version_min 保证旧 ABI 插件仍可加载。 - -var ( - // ABIVersion 是 ABI 标识版本(字符串 semver,与 SDK CoreVersion 对齐)。 - ABIVersion = CoreVersion - // ABIVersionMin 是兼容的最低 ABI 标识版本。 - ABIVersionMin = "0.8.0" -) - -const ( - // CABINum 是 C 层协商用的整数版本(major*100 + minor),随 ABIVersion 派生。 - CABINum = 900 - // CABINumMin 是 C 层兼容的最低整数版本。 - // 旧工具链(v0.8 之前)写入的整数 version=1,无写回能力但与新内核结构兼容, - // 因此最小值保持 1 以兼容全部旧插件(新插件 900 匹配,旧插件 1/2 通过); - // 仅当未来内核 ABI 破坏兼容时才提高该值。 - CABINumMin = 1 -) - -// ---- Dispatch Method IDs(与核心仓 internal/meta/meta.go 同步) ---- -const ( - CoreRegisterTool = 1 - CoreRegisterStage = 2 - CoreRegisterOutputCh = 3 - CoreRegisterPluginAPI = 4 - CoreInjectText = 5 - CoreInjectInterruptText = 6 - CoreInjectTextNoMemory = 7 - CoreSetAutoRestart = 8 - CoreMemoryRecall = 9 - CoreMemoryCommit = 10 - CoreMemoryIntrospect = 11 - CoreMemoryMerge = 12 - CoreMemoryPurge = 13 - CoreDocQuery = 14 - CoreKnowledgeSearch = 15 - CoreSettingsGet = 16 - CoreSettingsSet = 17 - CoreSettingsRegisterDef = 18 - CoreLLMListSources = 19 - CoreLLMSetSource = 20 - CoreSocialGetPerson = 21 - CoreSocialGetNetwork = 22 - CoreSubscribe = 23 - CoreUnsubscribe = 24 - CoreFreeString = 25 - CoreSettingsGetCore = 26 - CoreSettingsSetCore = 27 - CoreSettingsListCore = 28 - CoreSettingsGetPlugin = 29 - CoreSettingsSetPlugin = 30 - CoreSettingsListPlugin = 31 - CoreDocInsert = 32 - CoreDocRemove = 33 - CoreDocStats = 34 - CoreKnowledgeAdd = 35 - CoreKnowledgeList = 36 - CoreLLMCurrentSource = 37 - CoreSocialGetTrait = 38 - CoreSocialGetRelations = 39 - CoreSocialListPersons = 40 - CoreTextMemoryAppend = 41 - CoreSettingsList = 42 - CoreSettingsDefs = 43 - CoreSettingsDump = 44 - CoreSettingsPlugins = 45 - CoreRegisterInputCh = 46 - CoreInjectInputSync = 47 - CorePluginReloadOne = 48 - CorePluginListLoaded = 49 - CorePluginIsDisabled = 50 -) +// ---- 协议版本 ---- +// +// 子进程 RPC 的协议版本是一个独立的小整数,与 SDK/内核语义版本解耦: +// 语义版本变动频繁(修 bug、加字段),而 wire 协议只在**帧格式或握手语义** +// 变化时才升。当前值见核心仓 internal/plugin/proc/protocol.go 的 ProtocolVersion。 +// +// C ABI 时代的 ABIVersion / CABINum / 51 个 Core 整数 ID 已随 +// Part 6.2 删除 internal/plugin/cabi/ 一并退场: +// - 整数 method id 平移为 method 名字符串(proc/protocol.go 的 Method* 常量) +// - 版本协商改为握手帧里的 protocol 字段 +// +// 保留那些常量只会让人以为它们还在生效。