mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-23 10:28:06 +00:00
用户指出:SDK 版本又带 patch 位、agent 自称 1.0.3、两个仓库文档都没更新。 docs/git-branching.md: 1. **§三 状态表**重写(停在 2026-09-12:main 还写 1.3.0、release/v1.2.x 还被当成"本条发布线、 尚无 tag"、SDK main 还写 1.2.0、完全没有 release/v1.3.x)。现按事实更新,并写明 `v1.3.0` 是已撤回的坏 tag。 2. **§2.3** 增补:发布线的 `meta.Version` 必须跟着该线已发的最后一个 patch 走; 只用 `-ldflags -X` 打版本而不改源码会让二进制与源码对不上账(1.3.1–1.3.4 就是这么打的)。 3. **反例表**补两行:人格文本在**播种时**固化版本(生产实例自称 v1.0.3)、 发布线路牌不随 patch 推进 / 给 SDK 误发 patch tag。并澄清"插值"必须在**渲染时**, 把算好的结果固化进配置库与写死没有区别。 4. **§七.5 新增"发版产物清单(可复现)"**:核心仓(tar.gz + 3 个 deb + SHA256SUMS, 校验和必须在全部产物生成后统一算)、SDK 仓(5 平台 hmapdev + SHA256SUMS)、 上传脚本的用法与两个坑(release 条目必须先存在;`hmapdev_*` 无扩展名不会被自动识别)。 起因就是本次"推了 tag 却没建 release、没打包"——推 tag ≠ 完成发版。 third_party/homeagent-sdk/meta/meta.go:镜像 SDK 仓 main 的路牌(1.3.0 → 1.4.0)与 版本语义注释更新(1.3.0 已定版 ⇒ 该号归发布线,main 推进)。
98 lines
5.3 KiB
Go
98 lines
5.3 KiB
Go
// Package meta 收集 HomeAgent SDK 的全部元数据。
|
||
// 版本号应与核心 meta.Version 保持一致。
|
||
package meta
|
||
|
||
var (
|
||
// Version 是 HomeAgent SDK 版本号。
|
||
// 通过 `-ldflags="-X gitcode.com/JianFeeeee/homeagent-sdk/meta.Version=vX.Y.Z"` 注入。
|
||
//
|
||
// 版本号语义:**SDK 版本跟随核心的中版本,patch 位恒为 .0**。
|
||
// 整条核心 1.1.x 线(1.1.0、1.1.1、1.1.7…)共用 SDK 1.1.0;
|
||
// 只有核心进入 1.2.0 这种中版本跃迁时 SDK 才升到 1.2.0。
|
||
// 这样插件开发者只需关心「我在为哪个中版本写插件」,
|
||
// 不必跟着核心的每个 bugfix 换 SDK 依赖(见 核心仓 docs/git-branching.md §七)。
|
||
//
|
||
// 1.0.0:插件运行模型从 C ABI 动态库改为子进程 + 共享内存。
|
||
// 公开 SDK 接口零改动,但产物形态变了(plugin.so → plugin.bin)。
|
||
// 1.1.0:多模态贯通插件边界。**全部是新增,无签名变更**:
|
||
// - Triple.SentenceText / Triple.MediaDigests
|
||
// - Doc.MediaDigests / Doc.Attachments、MediaAttachment
|
||
// - TextEvent.Attachments
|
||
// - DocMemoryAPI.InsertWithMedia
|
||
// - IOInjector 的 InjectInputMedia / InjectInputMediaSync /
|
||
// InjectInterruptMedia;PluginSDK 补上缺失的 SetToolBlocks 包装
|
||
// 同版修掉两处并发竞态(sdk/stress_test.go 的 -race 实证,不是理论风险):
|
||
// PluginSDK 的 API 字段与 autoRestart 标志此前无锁,而写方
|
||
// (内核注入 API、插件 SetAutoRestart)与读方(插件后台 goroutine
|
||
// 注入、内核 registry 读 AutoRestart)天然跨 goroutine。
|
||
// 存量插件不需要改一行也不需要重编:新增方法由**插件调用、内核实现**,
|
||
// 不调就不受影响。想用新字段的插件重编即可。
|
||
//
|
||
// 1.2.0:注入行为的记忆/裁剪标志位。**全部是新增,无签名变更**:
|
||
// - InjectOptions{NoMemory, ContextPolicy}
|
||
// - IOInjector 的六个 *Opts 变体(排队/中断/同步/带媒体各一对)
|
||
// - ChannelDef.ContextPolicy(顺带给 ChannelDef 补上 JSON tag:
|
||
// 它要跨进程传给内核,而 Cleaner 是函数必须忽略;无 tag 时只能
|
||
// 手写字段白名单,新增字段会被静默丢掉)
|
||
// 语义:零值 InjectOptions 与旧的三参数方法完全等价(记入记忆 +
|
||
// 不裁剪),因此存量插件不需要改一行也不需要重编。
|
||
// 裁剪(ContextPolicy=prune)必须显式声明——它会归档丢弃低相关事件。
|
||
//
|
||
// ❗main 分支上此值是**下一个未发布中版本**;已发布的值看对应的
|
||
// release/vX.Y.x 分支与 tag(见 核心仓 docs/git-branching.md §2.1 与 §七.1)。
|
||
//
|
||
// 现为 1.4.0:1.3.0 已随核心的正式 tag `v1.3.0` 定版并发版(本仓 tag v1.3.0、
|
||
// release/v1.3.x 承载它),该号从此归发布线所有,main 遂推进到下一个未发布中版本。
|
||
//
|
||
// ❗本仓**不发 patch tag**(§七.1):一个中版本只发一次 `vX.Y.0`,核心的 1.3.x
|
||
// 后续 patch **不伴随 SDK 发版** —— patch 位恒为 `.0`,带非零 patch 的 SDK tag
|
||
// 都是错的。(2026-09-13 曾误发 `v1.3.1`,已撤回;`v1.2.1` 是同一类历史遗留。)
|
||
//
|
||
Version = "1.4.0"
|
||
|
||
// Commit 是构建时的 Git commit hash。
|
||
Commit = "unknown"
|
||
|
||
// BuildTime 是构建时间。
|
||
BuildTime = "unknown"
|
||
|
||
// SDKName 是 SDK 名称。
|
||
SDKName = "HomeAgent SDK"
|
||
|
||
// CoreModule 是核心仓的 Go module path,供 hmapdev 生成 go.mod 时使用。
|
||
CoreModule = "gitcode.com/JianFeeeee/HomeAgent"
|
||
|
||
// CoreVersion 是此 SDK 所兼容的最低核心版本。
|
||
//
|
||
// 1.0.0 是硬下限而非建议值:0.9.x 内核只会 dlopen `.so`,
|
||
// 本版工具链产出的 `plugin.bin` 在旧内核上根本不会被识别。
|
||
//
|
||
// ⚠️ 1.1.0 新增的媒体接口需要核心 **1.1.1+**(更早的核心没有
|
||
// doc.insertWithMedia / io.injectMedia* 这些 RPC,调用会返回 unknown method)。
|
||
// 这里仍写 1.0.0,因为它是「SDK 能在其上运行」的下限;
|
||
// 媒体接口是可选能力,不用就不受影响。
|
||
//
|
||
// ⚠️ 1.2.0 新增的注入标志位同理需要核心 **1.2.0+**:内核在 1.2.0 之前会
|
||
// 忽略注入参数里的 no_memory/context_policy 字段(不会报错,但不生效)。
|
||
// 想用这些标志位的插件应当要求核心 1.2.0+;不用就不受影响。
|
||
CoreVersion = "1.0.0"
|
||
)
|
||
|
||
// FullVersion 返回完整的版本字符串。
|
||
func FullVersion() string {
|
||
return SDKName + " v" + Version + " (" + Commit + ")"
|
||
}
|
||
|
||
// ---- 协议版本 ----
|
||
//
|
||
// 子进程 RPC 的协议版本是一个独立的小整数,与 SDK/内核语义版本解耦:
|
||
// 语义版本变动频繁(修 bug、加字段),而 wire 协议只在**帧格式或握手语义**
|
||
// 变化时才升。当前值见核心仓 internal/plugin/proc/protocol.go 的 ProtocolVersion。
|
||
//
|
||
// C ABI 时代的 ABIVersion / CABINum / 51 个 Core<Method> 整数 ID 已随
|
||
// Part 6.2 删除 internal/plugin/cabi/ 一并退场:
|
||
// - 整数 method id 平移为 method 名字符串(proc/protocol.go 的 Method* 常量)
|
||
// - 版本协商改为握手帧里的 protocol 字段
|
||
//
|
||
// 保留那些常量只会让人以为它们还在生效。
|