Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions emrg/server/evolution_prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,7 @@ When reading rants, follow these rules:
> - GUI main.js ConnManager rewire (#629 GUI 多会话 rant 2026-08-10T15:07:19 P2 收官:main.js 全量改走 ConnManager——conn-manager `ensureDaemon()` 保留 daemon 级连接(ping/list_sessions/set_model/github_* 等非会话命令),会话连接 skipStart 不 spawn;`open({resume:false})` 供新会话(daemon 隐式订阅),失败关半开连接不泄漏,断连残留 stale 关闭重开;`onOpen`/`onRecovered` 钩子(事件桥含 recoverAll 重开路径 + 恢复后 sessions/pong/status 刷新);`close()` 标 `_intentionalClose` 抑制断线横幅 + 不触发重启判定;**单连接独立退避**(N 会话单条断 → 退避重开该会话);daemon_client G65 自有流锁移入实例(own done/timeout/session-busy/own cancelled/断连释放);main.js 删全局 client/ownStream/deltaBuf,IPC 全走 activeConn/requireConn/openSession,sendMessage 自动 open,switchSession 切走关旧连接,cancel 发激活连接,事件桥附带 sid;+15 测试(dc 37→43、cm 8→17)GUI 127→142 三文档同步;680 pytest 全绿;P2 完成) ✅
> - 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<sid,{busy,ownStreamRequestId,mode,autoScroll}>` + `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 待续) ✅

#### 2.2 Latest GitHub code changes

Expand Down
Loading