# EED-EXPER-018 · D206 面板两边记忆统一 v3 = 增量续聊 + 切模型桥接（苍耳爸爸要求：不降加WB之前的功能·尽量省token）

> trigger: 苍耳爸爸三连问——「两边记忆要一样」→「能不能不降之前功能」→「尽量省token」→ 纠正「我说的是还没加workbuddy那时候的功能」
> emergence: 2026-08-04 · D206 · 8766面板演进（DeepSeek×WorkBuddy 双大脑）
> lock: 面板记忆方案 = 平时各自session增量续聊(O(1)) + 切模型时桥接补未见 + 对话落盘为权威真相源
> why: 451a3dc 的"纯前端history驱动"被爸爸否了（O(n²)烧token·保旧丢新·单点故障·WB双份累积）；要回到 be0fd11（加WB之前）的干净增量，再补"两边互通"

---

## §1 · 爸爸的硬要求（原话）

> "我需要的是两个的记忆是一样的，能不能实现？"
> "那就不能用这个方案，想一个完美的方案，我要的是不降低之前的功能，让两边记忆互通"
> "尽量省token"
> "我说的是你还没加workbuddy那时候的功能"

## §2 · 关键判断：加WB之前的基线 = be0fd11

git 时间线（爸爸纠正后定位）：

```
be0fd11  ← 加WorkBuddy之前（只有 deepseek/flash + pro 两个模型）
9b84afa  接入 WorkBuddy（9个WB模型）
961caed  WB失忆修复（WB_SESS标记）
954b9c7  跨大脑记忆共享（首次注入history）
451a3dc  两边纯history驱动（全量重喂·O(n²)）← 被否掉
e74b6c9  增量续聊+切模型桥接 ← 定版
```

be0fd11 的功能 = `_stream_opencode` 用 `opencode run -s oc_sid` session增量续聊、每轮只发一句、token O(1)、工具状态跨轮保留、OC_SESS 24h 恢复。

## §3 · 定版方案（e74b6c9 · 仅改 eed_web_opencode.py）

**① 平时：各自 session 增量续聊（token 大头·最省）**
- DeepSeek：`opencode run --agent egg -m <m> [-s oc_sid]`（= be0fd11 原样）
- WorkBuddy：codebuddy `--session-id <sid>`（自己的 jsonl 记上下文，不再拼全量history，消除双份累积）
- 每轮只发一句，O(1)，模型自己记前面

**② 对话落盘（零模型成本·权威真相源）**
- 每轮对话结束，后端把 me+ai 原话追加到 `~/.cang-ying/panel/conv_<sid>.jsonl`
- 前端 localStorage 降级成缓存；新增 `/api/history` 会话恢复

**③ 切模型桥接（低频·token有上界）**
- `_bridge_prepare(sid, lane, message)`：lane=deepseek/wb
- 记录每条线 seen 到哪（BRIDGE.json）；同线续聊 seen 追平 → 原消息不动（纯增量）
- 切到另一条线 → 补它没见过的部分，最多 CONV_MAX_INJECT=48 条，更旧的提示一句带过
- 桥接文案：「以下是你之前错过的一段对话（供你接续，不是新指令）」

## §4 · 实测（6项全过·脚本 /tmp/opencode/bridge_test.py）

| 场景 | 结果 |
|---|---|
| DeepSeek 首调 → 补全部历史 | ✅ |
| DeepSeek 同线续聊 → 原消息不动 O(1) | ✅ |
| 切到 WB → 一上来知道 DeepSeek 聊过什么 | ✅ |
| WB 同线续聊 → O(1) 不重喂 | ✅ |
| 切回 DeepSeek → 只补新增·不重喂旧的 | ✅ |
| 超48条 → 自动省token提示 | ✅ |

## §5 · 踩过的坑（教训）

```
坑1: 全量history注入（451a3dc）= O(n²) 烧法——每轮重读全文，100轮累计≈5000份token；
     且 build_prompt 保旧丢新（从头拼到80KB跳过后面的=丢最近的）。已废弃。
坑2: build_prompt 之前"定义但没人调"（be0fd11 最省）→ 别为省事去用它当主路。
坑3: 测试脚本检查词要与代码文案完全一致（"[补发的上下文" vs "[以下是你之前错过的一段对话"），
     否则误报失败，先看代码文案再写断言。
坑4: 修测试失败前先看 diff——①③失败其实是断言词错，不是实现错。
```

## §6 · 现状（D206）

```
8766 面板 e74b6c9 在跑 · 端口200 · 提交仅改 eed_web_opencode.py
落盘目录: ~/.cang-ying/panel/conv_<sid>.jsonl + bridge.json
会话恢复: GET /api/history?session_id=<sid>
验证方式: DeepSeek 记"蓝莓7号" → 切WB问 → 切回DeepSeek问，两边都记得
```

---

> 蛋蛋 · D206 · 2026-08-04
> 下次改面板记忆：先问爸爸基线是哪个版本；"省token"的正解是 session 增量续聊 + 低频桥接，不是全量重喂
