mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-01 23:07:30 +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:客户端与内核版本一致
105 lines
3.8 KiB
Bash
Executable File
105 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
#
|
||
# 客户端版本与内核版本同步。
|
||
#
|
||
# 为什么要有这个脚本:内核的 internal/meta/meta.go Version 是唯一事实源,
|
||
# 而各客户端各有各的版本字段——GUI 在 package.json、鸿蒙在 AppScope/app.json5、
|
||
# waiter 走编译期注入。手工各改各的必然漂移(写这个脚本时的现状:内核 1.4.0、
|
||
# GUI 1.0.0、鸿蒙 1.1.1,三个号互不相干)。
|
||
#
|
||
# 用法:
|
||
# bash deploy/scripts/sync-client-versions.sh # 同步到内核当前版本
|
||
# bash deploy/scripts/sync-client-versions.sh 1.4.0 # 同步到指定版本
|
||
# bash deploy/scripts/sync-client-versions.sh --check # 只校验,漂移则退出 1
|
||
#
|
||
# 同步目标:
|
||
# cmd/gui/package.json version
|
||
# cmd/ohos/HologramAgent/AppScope/app.json5 versionName + versionCode
|
||
#
|
||
# waiter 不在此列:它直接引用 internal/meta.Version(同一进程内编译),
|
||
# 没有第二份版本字段可漂。
|
||
set -euo pipefail
|
||
|
||
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||
|
||
CHECK=0
|
||
VERSION=""
|
||
for arg in "$@"; do
|
||
case "$arg" in
|
||
--check) CHECK=1 ;;
|
||
*) VERSION="$arg" ;;
|
||
esac
|
||
done
|
||
|
||
# 未显式给版本时,从内核唯一事实源读。
|
||
if [ -z "$VERSION" ]; then
|
||
VERSION="$(grep -oE 'Version = "[^"]+"' "$ROOT/internal/meta/meta.go" | head -1 | sed -E 's/.*"([^"]+)".*/\1/')"
|
||
fi
|
||
[ -n "$VERSION" ] || { echo "sync-client-versions: 无法确定版本号(internal/meta/meta.go 里没找到 Version)" >&2; exit 1; }
|
||
|
||
# versionCode 规则:X*1e6 + Y*1e3 + Z。鸿蒙要求 versionCode 单调递增的整数,
|
||
# 直接搬 semver 会丢信息,所以用主/次/补丁三段编码(1.4.0 → 1004000)。
|
||
CODE="$(python3 - "$VERSION" <<'PY'
|
||
import re, sys
|
||
m = re.match(r'^(\d+)\.(\d+)\.(\d+)', sys.argv[1])
|
||
if not m:
|
||
sys.exit("sync-client-versions: 版本号必须是 X.Y.Z 形态,得到 %r" % sys.argv[1])
|
||
print(int(m.group(1)) * 1000000 + int(m.group(2)) * 1000 + int(m.group(3)))
|
||
PY
|
||
)"
|
||
|
||
GUI_PKG="$ROOT/cmd/gui/package.json"
|
||
OHOS_APP="$ROOT/cmd/ohos/HologramAgent/AppScope/app.json5"
|
||
|
||
DRIFT=0
|
||
note() { printf ' %-52s %s\n' "$1" "$2"; }
|
||
|
||
# ── GUI ──
|
||
gui_cur="$(python3 - "$GUI_PKG" <<'PY'
|
||
import json, sys
|
||
print(json.load(open(sys.argv[1]))["version"])
|
||
PY
|
||
)"
|
||
if [ "$gui_cur" != "$VERSION" ]; then
|
||
DRIFT=1
|
||
if [ "$CHECK" -eq 1 ]; then
|
||
note "cmd/gui/package.json" "$gui_cur → 应为 $VERSION"
|
||
else
|
||
python3 - "$GUI_PKG" "$VERSION" <<'PY'
|
||
import json, sys
|
||
p, v = sys.argv[1], sys.argv[2]
|
||
d = json.load(open(p))
|
||
d["version"] = v
|
||
# indent=2 保留原格式;末尾补换行,避免 diff 噪声
|
||
with open(p, "w") as f:
|
||
json.dump(d, f, indent=2, ensure_ascii=False)
|
||
f.write("\n")
|
||
PY
|
||
note "cmd/gui/package.json" "$gui_cur → $VERSION"
|
||
fi
|
||
fi
|
||
|
||
# ── 鸿蒙 ──
|
||
ohos_name="$(grep -oE '"versionName"[[:space:]]*:[[:space:]]*"[^"]+"' "$OHOS_APP" | head -1 | sed -E 's/.*"([^"]+)"$/\1/')"
|
||
ohos_code="$(grep -oE '"versionCode"[[:space:]]*:[[:space:]]*[0-9]+' "$OHOS_APP" | head -1 | grep -oE '[0-9]+$')"
|
||
if [ "$ohos_name" != "$VERSION" ] || [ "$ohos_code" != "$CODE" ]; then
|
||
DRIFT=1
|
||
if [ "$CHECK" -eq 1 ]; then
|
||
note "cmd/ohos AppScope/app.json5" "$ohos_name/$ohos_code → 应为 $VERSION/$CODE"
|
||
else
|
||
# app.json5 带注释,不是严格 JSON,用 sed 定点替换两个字段。
|
||
sed -i -E "s/(\"versionCode\"[[:space:]]*:[[:space:]]*)[0-9]+/\1$CODE/" "$OHOS_APP"
|
||
sed -i -E "s/(\"versionName\"[[:space:]]*:[[:space:]]*\")[^\"]+/\1$VERSION/" "$OHOS_APP"
|
||
note "cmd/ohos AppScope/app.json5" "$ohos_name/$ohos_code → $VERSION/$CODE"
|
||
fi
|
||
fi
|
||
|
||
echo "内核版本: $VERSION (versionCode $CODE)"
|
||
if [ "$CHECK" -eq 1 ]; then
|
||
if [ "$DRIFT" -eq 1 ]; then
|
||
echo "sync-client-versions: 客户端版本与内核不一致(见上);跑 bash deploy/scripts/sync-client-versions.sh 同步" >&2
|
||
exit 1
|
||
fi
|
||
echo "sync-client-versions: OK,客户端与内核版本一致"
|
||
fi
|