Generated by Answer me with HTML 0.5.10 · 2026-10-29 10:51 · ★ Star on GitHub
hy-memory 补丁审计
5 处改动砍到 2 处 · 判据是代码路径,不是「上游有没有 bug」
Lead: 保留的只有提炼历史那一个补丁(两段改动),加上插件层的三个开关与版本锁。 server.py 的两处已卸载并按 wheel 原文还原,两个 venv 现在只剩 writer.py 有 9 行改动。
逐条判决
| 补丁 | 位置 | 判据 | 结论 |
|---|---|---|---|
提炼历史 or 5 |
writer.py | 上游未修,实测 4060 → 2668 token,重抽 13 条 → 3 条 | 必须留 |
max_turns<=0 短路 |
writer.py | 同一补丁的第二段,缺它 0 轮不生效 | 必须留 |
_client_lock 双检 |
server.py | 启动时已初始化 client,双检永不触发 | 已卸载 |
| healthz 三处关闭 | server.py | 深度检查只挂 /api/v1/status,无人调用 |
已卸载 |
| search_query 透传 | 插件 | .env 开着去重,不透传则恒 false |
必须留 |
| trace 透传 | 插件 | 平时等价于硬编码,但保留能临时开 trace 测 token | 留,零成本 |
| SDK 版本锁 | 插件 | 防 doctor 静默升级冲掉全部补丁 | 必须留 |
两个卸载的实证
锁是死代码
run_server() 在 serve_forever() 之前就调了 _get_client()。
请求进来时 _client 恒非空,那双检分支一次都走不到。
深度检查没人走
/healthz 是静态回复,/health 只探 event loop。
贵的那个在 /api/v1/status:embed 一次、LLM 一次、两个 asyncio loop。
看门狗打 /health,插件 CLI 也不打 status,于是这段代码常年不动。
清理与复核
| 动作 | 对象 | 结果 |
|---|---|---|
| 卸载 | server.py 五处改动 | 按 wheel 原文还原,sha256 一致 |
| 归档 | hy_memory_patch_embed_cache.py | 移入备份目录 obsolete_scripts |
| 删除 | 两个 venv 的 server.py.bak | 已删 |
| 收敛 | hy_memory_patch_208.py | 只剩 writer 两条规则,幂等 |
| 复核 | wheel 逐文件 diff 两个 venv | 仅 writer.py 9 行 drift |
| 冒烟 | 重启后 info / healthz / health / status / 召回 / 写入 | 全通,写入 ops.add=1 |
卸载后的唯一代价
以后谁手动打 /api/v1/status,每次会漏两个 event loop 和一个 OpenAI client。
别把它当日常探针;真要看库状态,用 /health 或看门狗的状态文件。