Files
karuo-ai/01_卡资(金)/金仓_存储备份/Codex对话状态修复/SKILL.md

166 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: Codex对话状态修复
description: 修复 Codex Desktop 侧栏项目、置顶、session_index、state_5.sqlite、空 rollout 与历史对话可见性。触发词Codex侧栏修复、Codex对话恢复、Codex项目分类、rollout缺失、state_5.sqlite、session_index、thread-store internal error。
group: 金
triggers: Codex侧栏修复、Codex对话恢复、Codex项目分类、Codex旧对话、Codex置顶、rollout缺失、rollout为空、empty rollout、thread-store internal error、session_index、state_5.sqlite、codex-global-state、repair-backups
owner: 金仓
memory_palace_path: 卡若记忆宫殿/金殿/金仓厢/Codex对话状态修复
memory_palace_slot: Codex 本地对话、项目侧栏和状态库修复入口
version: "2.0"
updated: "2026-07-19"
---
# Codex对话状态修复
> 金仓 · Codex Desktop 本地状态修复入口。只处理 Codex不优化 Cursor。用于侧栏项目错乱、旧对话缺失、置顶不显示、`thread-store internal error`、空 `rollout-*.jsonl`、`session_index.jsonl` / `state_5.sqlite` / `.codex-global-state.json` 不一致等问题。
## 一句话
先备份,再查 `session_index.jsonl``state_5.sqlite``.codex-global-state.json``process_manager/chat_processes.json``rollout-*.jsonl`,按“恢复并分类”修复 Codex Desktop 侧栏可用性;历史正文真缺失时只建可读 placeholder不冒充原始内容。
## 触发场景
| 现象 | 判断 |
|:---|:---|
| 左侧项目下对话丢失、误归类、全部挂到某项目 | 走本 Skill |
| 置顶对话消失或勾选状态不对 | 走本 Skill |
| 打开线程报 `thread-store internal error` | 优先查空 rollout |
| `missing rollout references``rollout is empty` | 走补 placeholder / 修索引 |
| 用户说“都恢复并分类,不是隐藏” | 目标是侧栏可用,不是清理坏引用 |
## 红线
- 不删除原始 `rollout-*.jsonl``session_index.jsonl``state_5.sqlite``.codex-global-state.json`
- 不执行 `git reset --hard`、不清 Time Machine、不删快照。
- 不把 placeholder 说成“恢复原始聊天内容”;只能说“可打开占位”。
- 不把 Cursor 的 `state.vscdb``.cursor/rules` 当成修复对象;本 Skill 只管 Codex。
## Phase 0备份
在第一次改任何 Codex 状态文件前,创建时间戳备份目录:
```bash
ts="$(date +%Y%m%d-%H%M%S)"
backup="/Users/karuo/.codex/repair-backups/${ts}-codex-state-repair"
mkdir -p "$backup"
cp /Users/karuo/.codex/session_index.jsonl "$backup/" 2>/dev/null || true
cp /Users/karuo/.codex/state_5.sqlite "$backup/" 2>/dev/null || true
cp /Users/karuo/.codex/.codex-global-state.json "$backup/" 2>/dev/null || true
cp /Users/karuo/.codex/process_manager/chat_processes.json "$backup/" 2>/dev/null || true
```
## Phase 1定位真实状态
1. 统计 `session_index.jsonl` 记录数、重复 thread、缺失 rollout、空 rollout。
2.`state_5.sqlite` 里线程、项目、置顶状态与 `session_index.jsonl` 是否一致。
3.`.codex-global-state.json` 是否仍保留旧项目挂载。
4.`process_manager/chat_processes.json` 是否引用已不存在或空 rollout。
5. 写一份报告到备份目录,例如 `codex-state-repair-report.json`
## Phase 2修复策略
| 问题 | 动作 |
|:---|:---|
| 缺失 rollout 引用 | 若能从索引或记忆找到摘要,生成 readable placeholder否则标记不可恢复 |
| 空 `rollout-*.jsonl` | 写入最小有效 JSONL 占位,避免 Desktop 读线程报错 |
| 项目误分类 | 按标题、cwd、首条用户消息、记忆摘要重新分桶 |
| 置顶丢失 | 同步修 `state_5.sqlite` 与 global state 的 pinned/top 字段 |
| 修完仍不显示 | 把重启 Codex Desktop / reload state 作为验收步骤 |
## Phase 3项目分类建议
优先保留用户真实业务桶:
- 卡若AI / Codex管理
- Soul / SOUL创业派对
- 私域银行 / 存客宝 / 工作手机
- 厦门房产
- 域名注册
- MBTI
- 玩值电竞
- 服务器管理 / NAS
- 个人项目
分类证据优先级:
1. 当前 `cwd`
2. 会话标题
3. 首条用户消息
4. rollout 摘要
5. memory / repair report 中的旧分类记录
## Phase 4验收
必须至少验证:
- `missing rollout references = 0`
- 空 rollout 已处理或已列入不可恢复清单
- 误挂大项目的对话数量回落到合理范围
- 关键项目侧栏能打开
- 修复报告写入 `/Users/karuo/.codex/repair-backups/`
- 若 Desktop 仍缓存旧状态,明确提示重启 Codex Desktop 再验
## Phase 5公司 NAS Mongo 全链路备份与跨 Codex 恢复
使用:
```bash
python3 scripts/codex_mongo_backup_restore.py backup
python3 scripts/codex_mongo_backup_restore.py backup --recent-seconds 600 --no-snapshot
python3 scripts/codex_mongo_backup_restore.py stats
python3 scripts/codex_mongo_backup_restore.py restore --output /tmp/codex-restore
python3 scripts/codex_mongo_backup_restore.py restore --project-root "/绝对路径/项目" --output /tmp/codex-restore
```
公司 Mongo 中按以下层级保存:
| Collection | 内容 |
|:---|:---|
| `codex_threads` | thread ID、标题、cwd、项目/工作树、归档状态、模型、Git、rollout 路径 |
| `codex_thread_events` | 完整 JSONL 事件链、顺序号、时间戳、事件类型、原始记录 |
| `codex_event_chunks` | 超过 Mongo 单文档限制的截图/附件事件 gzip 分块 |
| `codex_chat_messages` | 按项目和对话检索的用户/助手正文 |
| `codex_projects` | 项目根、项目名、活跃/归档对话数量 |
| `codex_state_snapshots` / `codex_backup_chunks` | Codex 状态文件可恢复快照 |
| `codex_backup_runs` | 每次备份统计与结果 |
持续同步由 `~/Library/LaunchAgents/com.karuo.codex-mongo-sync.plist` 每 5 分钟执行;
它只扫描最近 10 分钟有变化的线程。首次接入或换机前再执行一次无参数 `backup` 全量收口。
恢复采用两阶段:先导出到独立目录并核对 `manifest.json`,再备份目标 Codex 的
`state_5.sqlite` / global state 后应用;不直接覆盖正在运行的 Codex 状态库。
## 常用证据入口
| 文件/目录 | 用途 |
|:---|:---|
| `/Users/karuo/.codex/session_index.jsonl` | 线程索引 |
| `/Users/karuo/.codex/state_5.sqlite` | Desktop 状态库 |
| `/Users/karuo/.codex/.codex-global-state.json` | 全局侧栏/项目状态 |
| `/Users/karuo/.codex/process_manager/chat_processes.json` | 进程/线程引用 |
| `/Users/karuo/.codex/sessions/` | rollout 真源 |
| `/Users/karuo/.codex/repair-backups/` | 备份与修复报告 |
## 复用过的历史证据
- 2026-07-04从隐藏缺失 rollout 改为“恢复并分类旧对话”。
- 2026-07-04空 rollout 引发 `thread-store internal error`
- 2026-07-05把误挂在“厦门房产”的约 70 个对话重新拆回 Soul、私域银行、工作手机、域名注册、MBTI、玩值电竞、服务器管理、个人项目等桶。
## 输出格式
交付时用卡若复盘:
- 🎯 目标&结果:修复范围、达成率
- 📌 过程:备份、扫描、修复、验收
- 💡 反思:哪里是不可恢复或需重启
- 📝 总结:修复报告路径
- ▶ 下一步执行:是否需要重启 Desktop、是否需补 Mongo/记忆
## 变更记录
| 日期 | 说明 |
|:---|:---|
| 2026-07-05 | 初版从近30天 Codex Desktop 侧栏/rollout 修复高复发流程沉淀 |
| 2026-07-19 | v2增加公司 NAS Mongo 全事件链备份、项目/工作树状态、超大事件分块与跨实例恢复包 |