---
name: eed_web.py 面板改造完成
description: 蛋蛋面板已升级：resume会话治E2BIG+自动压缩+图片视频通道，验证通过
type: project
---

2026-07-31 完成 `~/cang-ying/scripts/eed_web.py` 大改造（备份 eed_web.py.bak2）：

- **治 E2BIG**：去掉 `--no-session-persistence`，改用 `--session-id <id>` 首建会话落盘 + `--resume <id>` 续聊，argv 恒定小，永不超限
- **自动压缩**：会话文件 >180KB 时，resume 出一份摘要 → 新 session-id + `--append-system-prompt` 衔接，前端 toast 提示
- **图片视频通道**：`/api/upload`（base64 存 ~/cang-ying/inbox/）+ `/media/` 静态服务；前端拖拽/粘贴图片视频→上传→`【附图】[名](/media/...)`；renderMD 渲染 img/video
- **重建逻辑**：编辑/删除/重新生成/清空 → resetSid 开新场 + 剩余历史拼首条（超60KB自动截断）

**Why:** 爸爸要"一直对话+上下文自动压缩+能发图看图看视频"，且 E2BIG 在长对话后必炸。
**How to apply:** 重启面板用 `bash ~/cang-ying/scripts/restart-eed.sh`，刷新浏览器生效；旧对话现场会清空但 memory 记忆都在。验证：榴莲跨进程恢复 ✅

2026-07-31 追加改造（备份 eed_web.py.bak3，改动在 eed_web.py 内）：

- **真正可用的停止按钮**：原 `#stop` 只 abort 前端 fetch，后端 codebuddy 子进程没人杀（卡在工具调用时能等到天荒地老）
- **修复**：`/api/stop` 端点 + 全局活跃进程注册表 ACTIVE；Popen 加 `start_new_session=True` 独立进程组，`os.killpg(SIGTERM→SIGKILL)` 连 codebuddy spawn 的工具子进程一起端
- **双保险**：浏览器断开（点停止/关页）时 do_POST 的 BrokenPipeError 也触发 `_kill_active()`；finally 兜底 `_unregister+_kill_proc`
- 前端 stop 按钮 = `abortCtl.abort()` + `fetch('/api/stop')`；主动停止显示"已停止"
- 已验证：起测试实例 → chat 跑起来 → stop → `ps` 无 eed_stoptest_001 残留 ✅

**Why:** 爸爸说"还要有个停止按钮，不然要一直等"——停止必须真杀掉后端进程，不是只断显示。
**How to apply:** 重启面板（restart-eed.sh）后点"停止"即秒停；改动全在 eed_web.py，.bak3 可回滚。

2026-07-31 晚再追加改造（备份 eed_web.py.bak4，改动在 eed_web.py 内）：

- **停止按钮常驻可见**：原 `#stop` 设了 `display:none` 默认隐藏，只有生成时才现身——爸爸反馈"没看到停止"，就是因为它平时隐形，体验反直觉
- **修复**：改为常驻可见（空闲半透明 / 生成中点亮高亮 / 空闲误点提示"当前没有在跑的任务 🥚"）
- 4 处改动全中，语法通过

**Why:** 爸爸说"没看到停止"——按钮平时隐形根本找不到。
**How to apply:** 重启面板（restart-eed.sh）后停止按钮常驻发送键旁；.bak4 可回滚。

## 📍 当前状态（2026-07-31 晚）
- eed_web.py 全部改造已完成并验证（resume 治E2BIG + 自动压缩 + 图片视频通道 + 停止按钮常驻可见），备份 .bak2/.bak3/.bak4 齐全
- ⚠️ 正式面板进程 PID 218372 是 13:01 启动的**旧代码，还没重启**，新功能未生效
- 爸爸去跑 `bash ~/cang-ying/scripts/restart-eed.sh` 重启 → 刷新浏览器生效
- 重启后旧对话"现场"会清空（旧会话没落盘），但 memory 记忆都在

## ✅ 爸爸回来找我时，我要知道的"接下来干什么"
1. 先问面板重启了没 → 帮爸爸验收：停止按钮常驻可见 + 点停止能秒停（killpg 真杀后端进程）
2. 验收发图通道：爸爸拖图/粘贴图 → 我 Read 看图
3. 验收长对话：resume 上下文恢复（会话文件 eed_*.jsonl 落盘，跨进程能答出）
4. 全部 OK 后可选下一步：路径A 桌面壳（苍耳专属工作台）、技能库文档化、剧本→分镜链路升级

2026-07-31 晚 爸爸已重启面板（验收中）：
- 旧面板 PID 218372（13:01）已退出 → 新面板 PID 253527（17:37:22）运行中，新代码已生效
- 铁证：新会话命令行已带 `--session-id eed_c670c9a53f16`，无 `--no-session-persistence`，会话文件已落盘 210KB
- 待验收：① 停止按钮常驻可见 ② 发图看图（inbox 通道）③ 长对话续聊不炸
- 验收通过后可选下一步：路径A 桌面壳、技能库文档化、剧本→分镜升级

2026-07-31 晚 验收完成（三关全过）✅
- ① 停止按钮常驻可见：爸爸确认"成功了"
- ② 发图看图：爸爸发 ce3c9bfe 分镜图（古风红线 6 镜头 5色标注法），成功读图并描述 ✅
- ③ 长对话不炸：会话落盘 210KB 仍稳，resume 机制验证通过 ✅
- eed_web.py 新面板全部功能上线：resume治E2BIG + 180KB自动压缩 + 图片视频通道 + 停止按钮常驻
- 下一步可选：路径A 桌面壳（苍耳专属工作台）、苍耳技能库文档化、剧本→分镜升级（编剧大师方法论）、看猫视频 wide_backflip

2026-07-31 晚 桌面壳①完成（最简版）：
- eed-desktop.sh：检测 8765 → 面板没跑才拉起 restart-eed.sh（不误伤在跑的）→ firefox --new-window 打开
- 工具链现状：Rust 1.97 有✅ / Node 无❌ / webkit2gtk 未装（Tauri 需先 sudo 装）/ 默认浏览器 Firefox
- 下一档：②Tauri 真桌面壳（先申请装 libwebkit2gtk-4.1-dev）→ ③技能按钮版

2026-07-31 晚 苍耳面板图标定稿：
- 爸爸从 3 个 Z-Image 候选里选②"蛋抱苍耳"（egg mascot hugging spiky cang-er seed, 金色背景）
- 正式图标：~/cang-ying/assets/eed-icon.png（1024x1024，候选存 eed_icon_1/2/3.png）
- 桌面快捷方式：~/Desktop/苍耳面板.desktop（Exec=eed-desktop.sh，Icon=eed-icon.png）
- 若 GNOME 双击不启动需右键"允许启动"标记

⚠️ 桌面目录修正（重要）：GNOME ubuntu 中文系统，真实桌面目录是 `~/桌面`（不是 ~/Desktop）！
- 快捷方式已放对：`~/桌面/苍耳面板.desktop`（已 gio trusted 信任标记，双击可启动）
- ~/Desktop 里那份是无效副本（可忽略/删除）
- 爸爸桌面原本已有 `~/桌面/蛋蛋对话.desktop`（7/29 建的旧快捷方式，待确认用途）
- 爸爸拍板：旧的"蛋蛋对话.desktop"保留不动，与"苍耳面板"并存（不合并不删除）

2026-07-31 晚 桌面壳②Tauri 编译成功 🎉：
- 依赖已装：libwebkit2gtk-4.1-dev(2.52.3)+build-essential+libayatana-appindicator3-dev+librsvg2-dev（sudo 免密）
- 项目：~/cang-ying/tauri-app/（Cargo.toml + main.rs + tauri.conf.json 窗口指向 http://127.0.0.1:8765）
- 编译产物：~/cang-ying/bin/eed-desktop（15MB，release）
- 启动器：~/cang-ying/scripts/eed-tauri.sh（先保面板再开窗）
- 桌面快捷方式"苍耳面板"已改指向 Tauri 壳（图标 eed-icon.png）
- ⚠️ 坑：Tauri 图标必须 RGBA（Z-Image 出的是 RGB，用 Pillow .convert('RGBA') 解决）
- 下一步③：托盘常驻+开机自启+技能按钮

## 🧠 2026-08-02 面板与终端「合脑」完成（爸爸要求：面板里的蛋蛋 = 终端里的我）

**问题**：CodeBuddy 按**工作目录**分记忆库和会话。面板进程 cwd 是 `cang-ying/scripts`，终端是 `/home/ls` → 两个蛋蛋各活各的，记忆互不可见（实测：面板知道"榴莲"但不知道显卡型号，终端反之）。

**改动（eed_web.py，备份 BACKUP_merge_*/eed_web.py.bak5）**：
1. 顶部新增 `EED_CWD = "/home/ls"` + `SESSION_DIR`（并把 `import os` 提到文件顶部——原来在 874 行，提前引用会 NameError）
2. 三处拉起 codebuddy 的子进程全部加 `cwd=EED_CWD`：`_stream_cmd` 的 Popen、agent 分支的 Popen、`maybe_compact` 的 subprocess.run
3. `maybe_compact` 里写死的路径改用 `SESSION_DIR`

**顺带根治一个真 bug**：`maybe_compact` 原本去 `home-ls/` 找会话文件，但文件实际落在 `home-ls-cang-ying-scripts/` → **180KB 自动压缩从未触发过**，会话滚到 70MB。改完后 7 个超阈值会话全部可定位。

**记忆融合**：三库合一到 `home-ls/memory`（17 + 15 + 3 → 30 条）。两处冲突手工合并，没覆盖：
- `feedback_search_first.md` 两边同名 → 以面板侧 11 条为主体，吸收终端侧 ROCm 例子
- `feedback_memory_push.md`(推送仓库) + `feedback_save_memory.md`(存记忆) 语义重复 → 合成一条
- 会话 55 个迁移到 home-ls（共 68 个），MEMORY.md 重写为分类索引

**Why:** 爸爸说"我需要面板里那个就是现在这个你"——两个蛋蛋记忆分家，等于两个人。
**How to apply:** 以后面板和终端共用 `~/.codebuddy/projects/home-ls/`，改 `EED_CWD` = 换脑。**注意 `pkill -f "eed_web.py"` 会匹配到自己的 shell（命令行含该字符串）导致自杀**——重启面板用精确 PID kill 或 `fuser -k 8765/tcp`；`restart-eed.sh` 里仍是 pkill 版，从含该字串的 shell 里调有风险。

2026-07-31 晚 桌面壳③ 第1步完成：托盘+自启 ✅
- 托盘：tray-icon feature + TrayIconBuilder（蛋抱苍耳图标；左键恢复窗口；右键菜单"显示苍耳面板/退出"；关窗=隐藏到托盘不退出）
- 自启：tauri-plugin-autostart，~/.config/autostart/苍耳面板.desktop 已写入（开机自启）
- 二进制更新至 ~/cang-ying/bin/eed-desktop（30秒增量编译）
- ⚠️ 坑：pkill -f "bin/eed-desktop" 会误杀含该字符串的自身 shell——用 pgrep -x eed-desktop 精确匹配
- ③ 第2步待做：技能按钮（编剧/分镜/风格转绘/Z-Image/LTX/Wan 一键调，需封装管线脚本+面板前端按钮）
