Make bmem Gitea sync failures trigger immediate server repair and acceptance

This commit is contained in:
bowei
2026-09-15 18:24:08 +08:00
parent a36cbfda2a
commit 84fbcae620
3 changed files with 94 additions and 7 deletions
+9 -1
View File
@@ -1,6 +1,6 @@
---
name: bmem
description: 用 bmem 记忆系统读写跨机器、跨 agent 的长期记忆——判断一条信息该进全局/项目/机器/log 哪一层、把 ./Notes 下的 PRxx/Taskxx/Resultxx 导入记忆、会话收尾该沉淀什么、怎么查以前做过什么、以及 bmem 命令报错时怎么修。当用户提到"记住"、"记一下"、"存到记忆里"、"之前/以前是不是做过"、"上次怎么解决的"、"查一下历史"、"这台机器装了什么"、"这个项目在别的机器上在哪"、"账号密码记下来"、"同步记忆"、"这个项目不做了/从记忆里删掉"、"bmem"、"记忆系统",或者在一个根目录有 bmem_<prjID>.md 的项目里开始实质性工作、需要知道过去的决策和踩过的坑时,必须使用此技能——即使用户没有说"skill"或"bmem"两个字。用户改完 ./Notes 下的需求/方案/结果文档、或一段实质性工作收尾时也要用它。bmem 命令报错(未加入 bmem / 不在项目内 / PG 不可达 / git 冲突 / 重复注册)时同样用它。
description: 用 bmem 管理跨机器长期记忆、导入 Notes,并处理 bmem sync 或 Gitea 同步故障;当用户要求记住、查历史、同步记忆或排障时使用。
---
# bmem:Claude Code 与 Codex 共享的跨机器长期记忆
@@ -192,6 +192,14 @@ bmem add --machine --section "账号/服务配置" "gitea 账号 bowei,凭证
`bmem sync` 做两件事:git 同步三层 Markdown(工作副本 ↔ `~/.bmem/repo` clone ↔ gitea),
以及与中心 PostgreSQL 双向同步 log 层。**它只碰 bmem 自己的文件,不会动你项目的 git 分支。**
## `bmem sync` 的 Gitea 故障:立即修复并实测闭环
`bmem sync` 的 Git 层失败时先判型。若 refs/API 仍可读而 clone/fetch 报 `bad pack header`、`early EOF`、`RPC failed` 或 `git-upload-pack` 异常,这是 Gitea pack 传输故障;**当轮立即使用 `tools-sync` skill 阶段 1.5 登录服务器诊断并修复**,不要只重试 `bmem sync`、只报“远端待恢复”,或把 PostgreSQL 成功当成整个同步成功。
1. 从 `~/.bmem/repo` 的 `origin` 取得 bmem 仓库 URL;运行 `tools-sync/scripts/gitea_doctor.ps1 -RepoUrl <URL>` 确认 refs 与真正的浅克隆两个面,然后 `-Fix`。服务器地址、容器名、SSH 主机指纹取自本机 `~/skills_env.md`,凭据只从本机已授权的凭据存储或 bmem 既有记录读取,绝不输出、硬编码到 skill/仓库或提交。若 OpenSSH 私钥缺失,doctor 应尝试已登记密码和固定主机指纹的 PuTTY 通道;仍不能登录时立即说明缺的是哪种访问能力并请求用户提供,不能声称完成。
2. 在服务端先核对精确目标,再对异常全局 Git 配置或注入脚本做可恢复隔离、重启并重新检查;不进行强推、仓库手术或不可恢复清理,除非另有明确授权。修复后的判断依据是**从客户端真正完成 fetch/clone**,不是 Gitea 网页、`ls-remote` 或容器自称 healthy。
3. 立刻重跑 `bmem sync`。传输恢复后若出现真实 rebase 冲突,保留本地和远端语义,解决 `~/.bmem/repo` 及会重新覆盖仓库的本机 Markdown 工作副本,特别核对自动编号唯一;只做非强制推送,再次运行 `bmem sync`。
4. 只有 `bmem sync` 返回成功、Git 拉取/推送成功、远端 `main` 与本地提交相同、客户端浅克隆可读,才报告 Markdown 层已同步;PostgreSQL 另按自身结果报告。若新故障持续,继续做安全范围内的诊断;真正缺少登录权限或需要额外授权时报告具体阻塞和所需输入,不把未同步状态遗留为“已完成”。
## 多机与本机状态
```bash