From 2605259f58c7f4a37fb79354360f0673aa044b62 Mon Sep 17 00:00:00 2001 From: EMRG Evolution Date: Mon, 10 Aug 2026 17:59:30 +0800 Subject: [PATCH] =?UTF-8?q?emrg:=20evolution=5Fprompt=20quick-ref=20?= =?UTF-8?q?=E2=80=94=20add=20#636=20P3=20finalize=20+=20#637=20P4=20slice?= =?UTF-8?q?=201=20entries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emrg/server/evolution_prompt.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/emrg/server/evolution_prompt.md b/emrg/server/evolution_prompt.md index 5fb5f27..9bde286 100644 --- a/emrg/server/evolution_prompt.md +++ b/emrg/server/evolution_prompt.md @@ -387,6 +387,8 @@ When reading rants, follow these rules: > - GUI renderer per-session chat isolation (#630 GUI 多会话 rant 2026-08-10T15:07:19 P3 slice 0:renderer 会话级聊天状态隔离——chat.js `sessionState` Map(sid→{groupNodes,toolRows,doneRids},sid=null 旧版单会话桶零回归)+ 全部 handler 可选 sid(handleDelta/handleDone/handleToolStart/handleToolEnd/clearTyping/clear/addSystemMessage/addUserMessage/createAssistantNode)+ 容器路由 API `registerContainer(sid,el)`/`unregisterContainer(sid)`/`chatContainer(sid)`(未注册回退默认 #chat-view,P4 openSessions 用)+ `groupNodesFor`/`toolRowsFor` 访问器;app.js handleEvent 透传 `evt.sid`(#629 事件桥附带),disconnected 按 sid 隔离分组清理+工具行失败标记;+4 测试 renderer.smoke 32→36(两会话同 rid 隔离/done 只清本会话/clearTyping 作用域/容器路由回退);GUI 142→146 三文档同步(#629 合并计数冲突解到 146);680 pytest 全绿;P3 剩余=chat-view 容器 + sessionsBySid + 事件按 sid 路由,P4-P6 待续) ✅ > - GUI renderer sessionsBySid state table (#632 GUI 多会话 rant 2026-08-10T15:07:19 P3 slice 1:renderer 会话级状态表——`state.sessionsBySid: Map` + `sidState(sid)` get-or-create;`state.busy`/`ownStreamRequestId`/`mode` defineProperty getter/setter 委托**激活会话条目**(既有调用点零改动);handleEvent done/cancelled/disconnected/error 释放**事件 sid 条目**锁(后台会话广播 done/取消/断连不误清激活会话,仅激活会话事件同步输入条 UI);switchSession 不再清 marker(每会话自持 busy/rid,P4 切回继续生成符合验收);+4 测试 renderer.smoke 36→40(激活条目路由/切会话指针移动/bg done 隔离/无 sid 回退激活);GUI 146→150 三文档同步;680 pytest 全绿;P3 剩余=chat-view 容器 + 事件路由终态,P4-P6 待续) ✅ > - GUI per-session chat-view containers (#634 GUI 多会话 rant 2026-08-10T15:07:19 P3 slice 2:每会话一个 `.session-view` 容器 + display 切换(浏览器 tab 效果)——`#chat-view` 变绝对定位包装(overflow:hidden),`.session-view` = inset:0 滚动容器(display:none 除非 `.active`);app.js `ensureSessionView(sid)`(wrapper 内按 dataset.sid 查找/建容器 + 幂等 registerContainer,不依赖 getElementById——测试沙箱对未知 id 返新 mock 且 mock .id 不入 attributes)`activateSessionView(sid)`(去旧加新 .active + scrollToBottom,导出供测试);`switchSession`/`newSession` 改为激活容器(**不再 Chat.clear()**——切走保留滚动/草稿/工具卡片/流式现场);`deleteSession` unregister+移除被删容器;`/clear`+`/rewind` 定向 `Chat.clear(state.sessionId)`(无 sid 只清激活容器,后台容器保留);`updateEmptyState` 查**激活会话**容器(wrapper 恒含 session-view 子节点不能数 wrapper);chat.js `chatContainer(sid)` 回退链=已注册容器→激活会话容器(无 sid 事件落激活会话,P4 过渡)→默认 #chat-view;CSS `#chat-view > *:not(.session-view)` 防滚动条内缩到 760px 中栏 + 媒体查询 padding 移入 .session-view;+3 测试 renderer.smoke 40→43 + mock innerHTML setter 忠实化("" 清 children,Chat.clear 依赖);GUI 150→153 三文档同步;680 pytest 全绿;P3 剩余=事件路由终态,P4-P6 待续) ✅ +> - GUI disconnected per-sid isolation (#636 GUI 多会话 rant 2026-08-10T15:07:19 P3 finalize:disconnected 事件按 sid 隔离——sidState 条目加 `disconnected` 标记 + 注册容器 `.disconnected` 类(`Chat.hasContainer(sid)` 守卫,防 chatContainer 回退链误标激活容器);**全局横幅/红点仅激活会话(或无 sid 单会话过渡期)断连显示**,后台会话断连不打扰全局 UI(rant 验收"断一条不影响其他会话");`status` connected 清全部断线标记 + 容器类;switchSession 切入断线会话提示 i18n `app.sessionDisconnected`(G89 输入条仍可用);CSS `.session-view.disconnected` 视觉(dim + hatch);+3 测试 renderer.smoke 43→46、GUI 153→156 三文档同步;680 pytest 全绿;P3 完成) ✅ +> - GUI open-sessions state + gui_state.json (#637 GUI 多会话 rant 2026-08-10T15:07:19 P4 slice 1 写路径:新 `emrg/gui/gui-state.js`(纯 Node)——`guiStatePath`(~/.emrg/gui_state.json)+ `sanitizeOpenSessions`(跳过缺 sid/projectPath 条目、lastActive 倒序、上限 20,读写共用)+ `saveGuiState`(.tmp+rename 原子写,镜像 #569);main.js `openSessions: Map` 簿记 + touchOpenSession/markSessionActive/防抖 1s 写盘 + 退出冲刷;**switchSession 不再关闭旧会话连接**(多会话保持,浏览器 tab 语义——关闭走新 `emrg:closeSession` IPC:断开+移除+持久化**保留磁盘数据**,与 delete_session 区分);`emrg:getOpenSessions` IPC(跨项目打开列表,slice 2 侧边栏数据源);sendMessage 标记激活 + 事件桥 done/delta 刷新 lastActive(conn-manager onOpen 钩子加 projectPath 参);deleteSession/newSession 同步簿记;+7 测试 gui-state.test.js;GUI 153→163(#636 并入后 renderer.smoke 46 + 7 gui-state,计数冲突解到实测 163)三文档同步;680 pytest 全绿;P4 剩余=slice 2 sidebar + 启动恢复) ✅ #### 2.2 Latest GitHub code changes