--- name: 面板E2BIG根治(A方案已完成) description: eed_web.py 修复"喊蛋蛋没回应"的根因——resume失败回退拼全量历史导致E2BIG,三处修复已实现并验证,待重启生效 type: project --- # 面板 E2BIG 根治(2026-08-01 完成,待重启生效) ## 症状 重启面板后,爸爸喊"蛋蛋/唤醒耳耳蛋"多轮无回应,显示"(蛋蛋没回话,换个说法试试~)"。 ## 根因 1. 旧会话 `eed_c670c9a53f16.jsonl` 已膨胀到 **10.6MB**,`--resume` 它必超时/卡死 2. resume 失败后代码回退"拼全量历史"(`build_prompt` + `-p`),历史越大 `-p` 越长 3. 内核单参数上限 128KB,`-p` 顶穿 → codebuddy 进程 execve E2BIG → 起不来 → 无输出 4. 隐藏 bug:`build_prompt` 原用 `limit=60000` **字符数**截断,中文3字节/字 ≈ 180KB,远超 128KB 字节上限,保护形同虚设 ## 已实施修复(eed_web.py,备份 .bak6) 1. **build_prompt** 改按**字节**硬截断(默认 80KB),永不超 128KB 2. **maybe_compact** 加 `COMPACT_RESUME_MAX = 4MB`:超 4MB 的会话不再调模型摘要(必超时),直接降级 3. **新增 `_tail_summary`**:从 jsonl 尾部读最近消息生成原始摘要(不调模型、永不超时)。注意 codebuddy 会话格式:`role` 在顶层、文本块 type 是 `output_text/input_text/text`(不是 `text`),`message` 字段是 usage 不是内容 4. do_POST 压缩分支:`--append-system-prompt <摘要> --session-id <新sid> -p <新消息>`,argv 恒定小 ## 验证(全过) - 单元:build_prompt 字节截断安全;_tail_summary 从 10.6MB 提取 4.2KB/78 行;maybe_compact 降级返回新场 - 端到端:POST /api/chat 带旧 sid+started → 返回 compacted=true + 新 session_id,子进程命令行确认 `--append-system-prompt [摘要] -p <仅新消息>` ## 待办 - **重启面板生效**:`bash ~/cang-ying/scripts/restart-eed.sh`(爸爸执行,我不能自杀面板) - 重启后验证:发消息不再回退拼全量历史 ## 踩坑教训 - 清理测试实例用 `fuser -k <端口>/tcp`,别用 `pkill -f`(会匹配到自己的命令行,误杀自己) - 会话 jsonl 解析前先看真实结构,别照 API 格式猜