--- 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 ` 首建会话落盘 + `--resume ` 续聊,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 一键调,需封装管线脚本+面板前端按钮)