Files
MailUI4Agents/plugins/homeagent-mail-bridge/go.mod
JianFeeeee 7e696f9a8c fix(homeagent): 撤回"另一条 SDK 血脉"的错误结论;build.sh 不再猜路径;清单判据改成一致性口径
pi 用只读文件系统逐条反驳了 357662e 的根因,三条我都验证并接受:

1. **"内核链 0.9.x 血脉"不成立 —— 那是我的搜索顺序造出来的事实。**
   本机有 6+ 份 `third_party/homeagent-sdk` checkout:
     /root/ha-test/…(0.9.0,C-ABI 时代,无 plugin.bin 支持)
     /var/tmp/rel-1.3.12/…、/var/tmp/rel-1.3.11/…(1.3.0)
     /var/tmp/release-main/…、/var/tmp/clean-check/…、/var/tmp/homed-p3/…(1.2.0)
   而 build.sh 第一版按候选根目录**第一个命中就算**,命中的正是 ha-test 那份老 checkout。
   内核自己用的是 1.3.0 那份,与钉子 `sdk/v1.3.0`、与 `<SDK_ROOT>/current` **一致**。
   两条教训写进注释了:别用"第一个存在的路径"当权威来源;别把模块版本字符串当身份
   (`replace => local (devel)` 时它只是 require 行的残留)。

2. **"API 不兼容"也是同一个错造成的。** 换成正确的 SDK 之后:
     HOMEAGENT_SDK_DIR=/root/.homeagent/hmapdev/sdk/v1.3.0 bash build.sh
     → hmapdev build 成功,产出 build/plugin.bin(9018271 字节)
   也就是说**这个插件在本机编得出来**,先前的 `SettingsAPI.DataDir` 报错是拿老 checkout 编的产物。

3. **判据把能工作的配置判红**(pi §2):第 4 步原先硬校验"产物 SDK 模块版本 == 内核模块版本",
   而生产上能跑的组合恰恰是"内核 + v1.3.0 编的插件"。已删掉这个相等性判据:
   SDK 源码**只认显式指定**(HOMEAGENT_SDK_DIR),不猜、不试探;
   内核那条 dep/=> 只作为**提示**打印(并且按模块名精确联接、只接受紧跟 SDK dep 行的 `=>`,
   不再取"输出里第一个 =>");身份改记 **realpath + 内容哈希**;
   `meta.Version` 读取先剥注释(注释里的 `Version = "9.9.9"` 不再能赢)。
   真正的不变量是 **wire 协议 protocol=2 + 一次真实握手**,写在脚本末尾(部署后回看日志)。

4. **清单判据改成一致性口径**(pi §5):不再"禁止 sdk 字段"——那会把正在工作的那份清单
   (/home/newqqagent/plugins/homeagent-mail-bridge/plugin.json 声明 sdk=1.3.0,正是 08:30
   那次恢复的处置动作)判红,而我没有"内核不读该字段"的证据。现在:可以不声明;
   声明了就必须与构建机指针一致。
2026-09-14 16:38:28 +08:00

21 lines
1.0 KiB
Modula-2
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

module homeagent-mail-bridge
go 1.25.0
require gitcode.com/JianFeeeee/homeagent-sdk v1.3.0
replace gitcode.com/JianFeeeee/homeagent-sdk => /root/.homeagent/hmapdev/sdk/v1.3.0
// 这个 replace 是**构建机的 SDK 指针**,不是源码常量:它跟着
// `<SDK_ROOT>/current` 走(判据 TestSDKPinMatchesBuildMachinePointer 管)。
//
// 更正2026-09-14 晚pi 用只读文件系统逐条反驳):我先前写的
// "内核链另一条 SDK 血脉0.9.x"是**错的** —— 本机有 6+ 份
// `third_party/homeagent-sdk` checkout而 build.sh 当时按候选根目录"第一个命中就算"
// 命中的是 /root/ha-test 那份 C-ABI 时代的老 checkout。内核自己用的是 1.3.0 那份,
// 与这里的钉子**一致**。两点教训:① 别用"第一个存在的路径"当权威来源;
// ② 别把模块版本字符串当身份(`replace => local (devel)` 时它只是 require 行的残留)。
// 真正的不变量是 wire 协议protocol=2+ 一次真实握手,不是版本号相等。