From 9389bd7b4bf61a38d1d2f886d95546baf454dd45 Mon Sep 17 00:00:00 2001 From: EMRG Evolution Date: Mon, 10 Aug 2026 16:26:40 +0800 Subject: [PATCH] =?UTF-8?q?emrg:=20evolution=5Fprompt=20quick-ref=20?= =?UTF-8?q?=E2=80=94=20add=20#626/#627=20P2=20connection-layer=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 0dd0d65..56b439b 100644 --- a/emrg/server/evolution_prompt.md +++ b/emrg/server/evolution_prompt.md @@ -381,6 +381,8 @@ When reading rants, follow these rules: > - daemon remove_project command (#619 GUI 多会话 rant 2026-08-10T15:07:19 P1:daemon 侧改动极小=仅新增 `remove_project` 命令——删 projects.yml 中 name 匹配条目(原子写,镜像 `_touch_project` 读路径),**磁盘 `/.emrg/sessions/` 数据保留**(后续 `_touch_project` 自动重注册);响应 `{"type":"project_removed","removed":bool,"name":...}`,失败带 `error` key(文件缺失/损坏 YAML/非 list/未知 name/写失败);`_process_message` dispatch(空 name → error);+5 测试(删除匹配/未知 name 文件不动/磁盘数据保留/无文件不崩/损坏 YAML 报错)→ 合并 #618 计数冲突后 675→680 全绿;三文档计数同步;rant 分阶段 P1-P6,P2 起为 GUI 侧 connManager 多连接改造) ✅ > - DaemonClient ensureConnected skipStart option (#623 GUI 多会话 rant 2026-08-10T15:07:19 P2 slice 1:connManager 将独占 daemon 生命周期,DaemonClient 实例只连**已运行** daemon——`ensureConnected({ skipStart = false } = {})` 默认不变;skipStart+无 port 文件 → 抛 `daemon not running (skipStart)` 不 spawn;skipStart+stale port+daemon 死(G43 路径)→ 抛 `daemon unreachable (skipStart)` **不删 port 文件不重拉**(port 文件保留供 connManager 重启恢复检测);+2 测试 daemon_client 29→31、GUI 111→113 三文档同步;680 pytest 全绿) ✅ > - ConnManager open/close/get (#624 GUI 多会话 rant 2026-08-10T15:07:19 P2 slice 2:新模块 `emrg/gui/conn-manager.js`——connManager=daemon 生命周期唯一 owner + 每会话一条独立 DaemonClient 连接(对齐 TUI 多开:每 TUI 一条连接;会话间天然隔离无事件路由);`open(sid, projectPath)`=引导 client `ensureConnected()`(spawn 或直连后关闭)→ 新 DaemonClient `ensureConnected({skipStart})` → `resume_session(sid, cwd=projectPath)` 自动订阅 → 存储,已打开 sid 复用不重复建连;`close(sid)`/`get(sid)`/`all()`/`closeAll()`;main.js 未改线(单会话无回归目标随 rewire 片落);+5 测试 conn-manager、GUI 111→116 三文档同步;680 pytest 全绿;rant 分阶段 P1-P6,P2 剩余=main.js rewire + restart recovery,P3-P6 待续) ✅ +> - DaemonClient per-connection delta batching (#626 GUI 多会话 rant 2026-08-10T15:07:19 P2 slice 3:delta 批量从 main.js 共享态移入**每条 DaemonClient 实例**——构造参数 `deltaBatchMs`(默认 0=每帧即时发,既有行为不变);`_deltaBuf/_deltaTimer/_flushDeltaBuf()` 实例化,`message_delta` 帧入缓冲按 batch 合并成 `chunks` 形状一次发出(与 G122 16ms 同形),终态(done/error/cancelled)与断连前强制冲刷保序(rant 14:11 孤儿节点教训);多会话各自独立缓冲互不干扰;+6 测试 daemon_client 31→37、GUI 118→124 三文档同步;680 pytest 全绿) ✅ +> - ConnManager daemon restart recovery (#627 GUI 多会话 rant 2026-08-10T15:07:19 P2 slice 4:短窗口内**所有**打开会话连接同时断 → 判定 daemon 重启 → `recoverAll()` 全量恢复——close 全部 → 按 `open()` 序列(引导→skipStart→resume_session 重订阅)逐会话重开,单会话失败跳过不阻塞其余;单条断 → 不触发全量恢复(留给后续片独立退避);`_restartDetected()` 检查 `_disconnects`(sid→最近断连时间戳)全部落在 `restartWindowMs`(默认 1000ms 可配)窗口内;`_recovering` 守卫防 close→disconnect→recoverAll 递归;+3 测试 conn-manager 5→8(全断自动恢复/单断负态/recoverAll 重开重订阅含 stale 连接排除)、GUI 121→127(合并 #626 后 124→127 文档计数冲突化解)三文档同步;680 pytest 全绿;P2 剩余=main.js rewire + single-conn backoff,P3-P6 待续) ✅ #### 2.2 Latest GitHub code changes