2026-10-12 边界:此文原有身份、分工、环境与状态均为历史快照,不是现行职责或在线证明。现行资料见 全量审计与来源索引。

gbrain 保留方案

日期:2026-05-24

更新:2026-05-24 10:00,gbrain 已重建并重新接回 Hermes gateway。

2026-10-09:以下为 2026-05-24 恢复记录,不能据此认定旧路径、页面数或 MCP 配置仍有效。本机目前有独立 gbrain.service,监听 ${LOCALIP}:7842;这不等于旧 gbrain serve MCP 子进程已启用。Hermes 当前按 alaya/manas/soma 分别运行服务,本文单一 hermes-gateway.service 重启命令需按实际 profile 重新核对。

当时处理

  • gbrain 新数据:${HOME}/.gbrain/brain.pglite,当前约 502M。
  • gbrain 源码保留:${HOME}/gbrain。
  • Hermes MCP 配置保留:${HOME}/.hermes/config.yaml。
  • Hermes MCP 当前已重新启用:
mcp_servers:
  gbrain:
    enabled: true

备份文件:

  • ${HOME}/.hermes/config.yaml.bak.20260524_gbrain_retained_disabled
  • ${HOME}/.gbrain.backup.20260524_before_pglite_recovery
  • ${HOME}/.gbrain/brain.pglite.corrupt.20260524_0955
  • ${HOME}/.gbrain/import-checkpoint.json.bak.20260524_0955
  • ${HOME}/.gbrain/.gbrain.nested-empty.20260524_0955

为什么这样处理

Hermes gateway 重启时会加载 MCP server。gbrain 使用 PGLite,也就是嵌入式 Postgres WASM。当前 brain 体积约 605M,启动时曾出现:

  • Timed out waiting for PGLite lock
  • PGLite failed to initialize its WASM runtime
  • MCP server 'gbrain' initial connection failed

所以 gbrain 不能继续作为 Hermes gateway 的必启依赖,否则会拖慢甚至卡死 gateway。

后续诊断确认根因不是单纯 WASM 内存,而是 PGLite/Postgres 控制文件指向缺失 WAL:

PANIC: could not locate a valid checkpoint record at 0/17A3CA0
could not open file "pg_wal/000000010000000000000001": No such file or directory

误配置产生的嵌套空库里虽有 000000010000000000000001,但 database system identifier 不匹配,不能用于修复主库。

最终处理是保留坏库,重建新 PGLite,并用 gbrain import ${DATA_ROOT}/ku/yunlu/ --no-embed --fresh --json 忽略旧 checkpoint 重新导入。

结果:

  • 导入文件:1383 成功,6 跳过。
  • chunks:16228。
  • pages:1373。
  • Hermes gateway 已重新启动,gbrain serve 作为子进程运行。
  • 新日志无 PGLite failed、WASM、invalid checkpoint、MCP server gbrain failed。

超大 Markdown 切片

更新:2026-05-24 10:11,6 个超大/tsvector 超限文件已切片并重新导入。

处理方式:

  • 原路径保留为小索引页,例如 04 - 哲学/黑格尔.md,这样 Obsidian 内的原有 [[黑格尔]] 链接不会直接断掉。
  • 正文切到同目录的 __gbrain_slices 文件夹。
  • 原完整文件在原位置保留为 .md.gbrain-original,gbrain 不会把它当 Markdown 扫描。
  • 原完整文件另备份到 ${HOME}/gbrain-slice-backups/20260524_oversize_markdown。

切片结果:

  • 02 - 佛学/大宝积经.md → 6 片。
  • 03 - 精神分析,心理/少有人走的路.md → 5 片。
  • 03 - 精神分析,心理/《红书》.md → 2 片。
  • 04 - 哲学/黑格尔.md → 18 片。
  • 04 - 哲学/《人性论》.md → 2 片。
  • 08 - 思想碎片/潜规则:中国历史中的真实游戏(修订版).md → 3 片。

导入结果:

  • 新增切片/索引页:42。
  • gbrain 当前 pages:1415。
  • gbrain 当前 chunks:35750。
  • gbrain import ${DATA_ROOT}/ku/yunlu/ --no-embed --json 已成功,errors=0。
  • Hermes gateway 已重新启用 gbrain MCP,gbrain serve 作为子进程运行。

切片脚本保留在:

  • ${HOME}/gbrain-recovery-test/slice_oversize_markdown.mjs

如何恢复自动加载

如果以后改动 MCP 配置后需要重载,执行:

systemctl --user restart hermes-gateway.service

后续更稳的方向

  1. 短期备选:如果再次出现 MCP 启动阻塞,可关闭自动 MCP;这是回退建议,不是上文“已重新启用”之后已执行的状态。
  2. 中期:把 gbrain 改成按需独立服务,不参与 Hermes gateway 启动链路。
  3. 长期:将 gbrain 从 PGLite 迁移到 Postgres/Supabase 或自托管 Postgres。gbrain 文档说明 PGLite 更适合小规模本地库,Postgres/Supabase 更适合 10K+ 页面和多设备/大规模使用。
  4. 兜底:Hermes 需要查 Obsidian 时,先用直接文件搜索方式读取 ${DATA_ROOT}/ku/yunlu,避免依赖大体积 WASM 数据库。