mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-01 14:57:38 +00:00
## ① 全面改名 HomeAgent → HologramAgent
仓库已改名,但代码与文档里仍有大量旧名。本次按"用户能看到的优先"全量替换:
- 用户可见:登录页标题/页脚、默认人格第一句、CLI 状态输出、启动日志、
plugin_install 的工具描述、AI 图片插件的 User-Agent
- 文档与脚本:README、assets/docs、docs/zh、deploy/*.sh、.github/workflows
- 鸿蒙工程:cmd/ohos/HomeAgent → cmd/ohos/HologramAgent(git mv)
目录内的 module/app 描述同步;**证书路径原样保留**
(default_HomeAgent_xxx.cer/p7b/p12 是签名材料的实际文件名,改了会找不到证书)
- 插件元数据:plugin.json 的 author
★ 必须保持原样的两处(改了会坏):
· legacySeededPromptSignature = "你是 HomeAgent 的看板娘「小宅」…"
—— 那是识别历史播种人格卡的**原文锚点**,改了就识别不出旧数据
· 公开 SDK 的 ProxyAuthHomeAgent = "homeagent"
—— 那是 SDK 契约里的值,属独立仓库,本仓不改
## ② 修 21 处乱码(U+FFFD)
这些是历史编辑留下的编码破坏,全在注释里,例如:
「赌注重下���遍」→「赌注重下一遍」
「「不��滤」」 →「「不过滤」」
「**待��退场**」→「**待退场**」
★ 保留 providers/chineseclip/tokenizer.go 里的 2 处:那是**故意**用
U+FFFD 演示"非法 UTF-8 字节被归一成 U+FFFD",不是乱码。
## ③ 提示词技术内容下沉(用户:技术性内容应该收敛到 skill 与 -help 中)
实测系统提示词 2309 字,其中两段几乎全是**模型无法据以行动的实现细节**:
【工具执行顺序】1272 字(ParallelSafe 声明、批内降级、batchRunnable 判据…)
【三层记忆】 1069 字(L1/L2/L3 编号、消费式删除、向量空间、指纹…)
收敛后 **2309 → 1723 字(-25%)**,保留的全是"模型据此做什么不同的事":
工具顺序:默认并行 / 不要依赖先后 / 同通道保序 / 写类工具可能串行
三层记忆:时序里能看最近 / doc_query 把历史事件按原始时间戳插回时序 /
关系用 memory_recall / 成文知识用 knowledge_search
判断口径写进判据:新加一段提示词前先问"模型会据此做什么不同的事",
答不上来就该进 skill 或工具描述。
## 判据
prompt_memory_test.go 新增 2 条:
- TestSystemPromptHasNoImplementationJargon
黑名单:ParallelSafe / batchRunnable / 消费式 / DenseCosine / fingerprint /
向量空间 / 批内降级 / 自激
- TestSystemPromptStaysCompact:上限 2000 字(当前 1723)
变异:把 "ParallelSafe 声明、批内降级" 加回工具顺序段 ⇒ 第一条立刻红。
## 验证
- go build ./... / go vet ./... 干净
- go test ./... -count=1:58 包 0 失败
- make check-client-versions:客户端与内核版本一致
103 lines
5.7 KiB
Go
103 lines
5.7 KiB
Go
// Package meta 收集 HologramAgent 内核的全部元数据。
|
||
// 版本号通过 `go build -ldflags` 注入,默认值为 dev 版本。
|
||
// SDK 仓的 meta/meta.go 应与此保持同步。
|
||
package meta
|
||
|
||
var (
|
||
// Version 是 HologramAgent 内核版本号。
|
||
// 通过 `-ldflags="-X github.com/JianFeeeee/HologramAgent/internal/meta.Version=vX.Y.Z"` 注入。
|
||
//
|
||
// 1.0.0:外部插件从 C ABI 动态库迁到子进程 + 共享内存。
|
||
// 这是首个不再加载 `.so`/`.dll` 的版本,与 0.9.x 不兼容(存量插件必须
|
||
// 用新版 hmapdev 重编),故跃到主版本号。
|
||
// 1.1.0:记忆系统支持二进制多媒体节点——CAS 媒体存储 + L0/L2/L3 贯通。
|
||
// 1.1.1:多模态贯通**插件边界**。内核实现公开 SDK 1.1.0 新增的媒体接口
|
||
// (doc.insertWithMedia、io.injectMedia / injectMediaSync /
|
||
// injectInterruptMedia),并把 text/image/audio 三条输入路径归一成
|
||
// 一条 processInput 主干。
|
||
// 1.2.0:模型中立的多模态 provider SPI(pkg/embedding)——内核不再适配任何
|
||
// 具体模型,Qwen 实现移到 providers/qwen3vl;插件运行协议升到 2
|
||
// (统一共享内存区,fd3 布局改变,不支持滚动升级);并实现 SDK 1.2.0
|
||
// 新增的注入行为标志位(InjectOptions:no_memory / context_policy)
|
||
// 与 ChannelDef.ContextPolicy,使输入/排队注入/中断注入/同步注入都能
|
||
// 声明「是否记入记忆」与「是否据此裁剪上下文」(默认都是否)。
|
||
// 1.3.0:注入优先级贯通(SDK 1.3.0 的 InjectOptions.Priority 与
|
||
// PriorityL1-L4)——插件可声明自己中断的级别,内核按四级中断阶梯调度;
|
||
// 并实现 UnregisterOutputChannel,使动态通道(远程设备 device/<id>)
|
||
// 能随资源生灭,而不是留下死通道骗模型。
|
||
//
|
||
// ❗main 上此值始终是**下一个未发布中版本**,不随 patch 发布变动
|
||
//(见 docs/git-branching.md §2.1);已发布的版本号看对应的 release/vX.Y.x 与 tag。
|
||
// ❗1.3.0 已随 release/v1.3.x 发布(承载 v1.3.1–v1.3.6),此号归发布线所有,
|
||
// main 立即推进到下一个未发布中版本(docs/git-branching.md §2.1/§七.4)。
|
||
Version = "1.4.0"
|
||
|
||
// Commit 是构建时的 Git commit hash。
|
||
Commit = "unknown"
|
||
|
||
// BuildTime 是构建时间。
|
||
BuildTime = "unknown"
|
||
|
||
// KernelName 是内核名称。
|
||
KernelName = "HologramAgent"
|
||
|
||
// SDKCompatibleVersion 是此内核可兼容的最高 SDK 版本(semver)。
|
||
//
|
||
// 1.1.0:本内核实现了 SDK 1.1.0 的全部新增方法。
|
||
// 1.2.0:本内核实现了 SDK 1.2.0 的全部新增方法(IOInjector 的六个 *Opts
|
||
// 注入变体、InjectOptions、ChannelDef.ContextPolicy),因此声明为
|
||
// 1.2.0。用 SDK 1.0.0/1.1.0 编的存量插件照旧可用——新增方法由
|
||
// **插件调用、内核实现**,不调就不受影响,无需重编。
|
||
// 1.3.0:内核实现了 SDK 1.3.0 的全部新增面 —— InjectOptions.Priority 的
|
||
// 分级中断调度、PriorityL1-L4 常量的语义,以及 UnregisterOutputChannel
|
||
// 在通道登记表 + io 设备表上的注销。同样:不调新面就不受影响。
|
||
SDKCompatibleVersion = "1.3.0"
|
||
|
||
// SourceURL 是本内核构建所对应的源码地址。
|
||
//
|
||
// AGPL-3.0 §13(Remote Network Interaction)要求:当你把修改过的版本
|
||
// 作为网络服务提供出去时,必须给使用者提供取得 Corresponding Source 的机会。
|
||
// WebUI 的状态页会把这个值渲染成可见链接,所以:
|
||
//
|
||
// ❗**修改后对外部署的分支必须把它改指向自己的源码仓库**,否则链接指向的
|
||
// 不是你实际运行的那份代码,§13 的提供义务并未履行。
|
||
//
|
||
// 构建时可用 -ldflags 覆盖,无需改源码:
|
||
// -X github.com/JianFeeeee/HologramAgent/internal/meta.SourceURL=<你的仓库>
|
||
SourceURL = "https://github.com/JianFeeeee/HologramAgent"
|
||
|
||
// License 是本项目的开源许可标识(SPDX 表达式)。
|
||
//
|
||
// AGPL-3.0-only 带**网络条款**:把修改过的版本作为网络服务对外提供时,
|
||
// 必须给使用者提供取得 Corresponding Source 的机会(§13)。所以 WebUI
|
||
// 总览底部把「许可标识 + 许可全文 + 源码仓库」三者一起渲染成可见的许可卡——
|
||
// 只给一个源码链接、不标明协议名,使用者在界面上根本看不出这是什么许可。
|
||
License = "AGPL-3.0-only"
|
||
|
||
// LicenseURL 是上述许可的全文地址。
|
||
//
|
||
// 默认指向 GNU 官方的 AGPL-3.0 全文页:与仓库托管方、分支名、文件路径都
|
||
// 无关,换仓库/换分支都不会失效。若你的发行版把 LICENSE 放在别处,
|
||
// 用 -ldflags 覆盖即可:
|
||
// -X github.com/JianFeeeee/HologramAgent/internal/meta.LicenseURL=<你的链接>
|
||
LicenseURL = "https://www.gnu.org/licenses/agpl-3.0.html"
|
||
)
|
||
|
||
// FullVersion 返回完整的版本字符串。
|
||
func FullVersion() string {
|
||
return KernelName + " v" + Version + " (" + Commit + ")"
|
||
}
|
||
|
||
// ---- 协议兼容性 ----
|
||
//
|
||
// **不自定协议号**:兼容性只认双方版本号的**主版本段**。
|
||
// 主版本相同即兼容(1.x 内全是纯追加);跨主版本则是破坏性变更
|
||
// (如 1.0.0 从 C ABI 改子进程),握手时显式拒绝并提示重编。
|
||
//
|
||
// C ABI 时代的 ABIVersion / CABINum / 51 个 Core<Method> 整数 ID 已随
|
||
// Part 6.2 删除 internal/plugin/cabi/ 一并退场:
|
||
// - 整数 method id 平移为 method 名字符串(proc/protocol.go 的 Method* 常量)
|
||
// - 版本协商改为握手帧里的 core_version / sdk_version 主版本比对
|
||
//
|
||
// 保留那些常量只会让人以为它们还在生效。
|