Files
HomeAgent/internal
JianFeeeee 4e40597954 merge: 内核编解码层 C 化 + C 基础设施门禁(feature/c-core)
## 内容
- C 化第一刀 L1 纯函数层(ha_codec):token 估算/截断/上下文窗口推断
- 零分配 JSON 扫描层 ha_json_scan(scan/extract 两段分离,黄金对照 + fuzz)
- SSE 协议导航层 ha_sse(**默认关闭**,见下)
- C 基础设施门禁六项(make check-csrc / check-csrc-full,已接进 make test)
- 共享内存与 IPC 的成本地板基准(纯测量)
- 分词器热路径分配优化(差分 oracle 验收)

## 实测(main 同机对照,50000 次迭代)
| 场景 | main | 本次 | 提升 |
|---|---|---|---|
| Truncate zh_1k | 6570ns / 2 allocs | 174ns / 0 | 37.8× |
| Truncate long_zh | 5984ns / 2 allocs | 179ns / 0 | 33.5× |
| Truncate ascii_1k | 1580ns / 2 allocs | 95ns / 0 | 16.6× |
| Estimate ascii_1k | 445ns | 51ns | 8.7× |
| Estimate zh_1k | 2262ns | 1172ns | 1.93× |
| Estimate short_zh | 22ns | 35ns | -58%(cgo 边界固定成本) |

几何平均 4.20× / 中位 1.93×;**变快 7 项、变慢 2 项**(短串受 cgo 边界拖累,
如实记录未掩盖)。调用点在热路径:process.go 对每个上下文事件都调
EstimateTokens,tooldefs.go 的工具定义裁剪调 TruncateByTokens。

## 默认关闭的部分(实测更慢,不当作成果)
- chunkFastEnabled = false:SSE 分块快速路径。首版更慢 52~79%;
  返工(5+ 次 cgo 边界压成 1 次)后为「三项赢、一项输」,toolcall 仍慢 15%
  ⇒ 不打开。TestChunkFast_BenchGate 断言该开关必须为 false。
- ha_json_scan 未接生产路径:库已验完(119 契约断言 + 黄金对照 5 组 +
  4948 万次 fuzz 零崩溃 + 6 万+ 差分用例),作为可复用底座留存。

## 为什么共享内存没有 C 化(附成本分解基准)
编解码占端到端 34%,但 **C 的甜区(字节搬运)仅占 0.2%~2%**
(1KB 拷贝 18ns、16KB 210ns;Go copy 已 44~71 GB/s),大头是 JSON 反射 34%。
另:段内读是**不可信偏移**(offset 由插件转述,伪造会破坏块链),
保留 Go 边界检查 / panic / -race / 模糊测试覆盖比省 0.2% 更值。
IPC 的真正地板是 OS 调度:cat 管道 echo 就要 16µs,占最简 RPC 的 62%。

## 验证
- 全量 go test -count=1 ./... 38 包 0 FAIL
- C 六门禁全过:gcc+clang 零告警(-Wconversion 必备)、ASan+UBSan、
  arm64 交叉编译、头文件自包含、libFuzzer 零崩溃、ABI 版本自述
- 端到端启动实测:14 插件 / 63 工具 / kernel ready / 0 panic
- make build-linux-arm64 → ELF aarch64
- SDK 公开接口 diff = 0 行(csrc/ 是内核 C ABI,不属 SDK 冻结范围)
- git-release-discipline 体检 FAIL=0

## 纪律
- meta.Version 未被污染(未动 internal/meta)
- main 上无 merge 来自 release 分支(仅本 feature 合入)
- 本分支未部署任何生产环境
2026-09-26 13:32:36 +08:00
..