diff --git a/emrg/server/evolution_prompt.md b/emrg/server/evolution_prompt.md index 715afd3..9a8165e 100644 --- a/emrg/server/evolution_prompt.md +++ b/emrg/server/evolution_prompt.md @@ -371,6 +371,8 @@ When reading rants, follow these rules: > - GUI connect canonical-home fallback + probe-before-give-up (#597 宿主 rant 2026-08-09T18:47:37(Windows,v0.2.16 回归):GUI 报 "daemon failed to start after 3 attempts" 而真 daemon 一直活着——根因=daemon 永远写规范 `~/.emrg/emrgd.port`(config_dir()=home;connect.py 无条件读 home),GUI 只读 `gui.project_dir/.emrg`(≠home 时全落空)→ 假"daemon 不存在"→ spawn 撞 PID 锁 → 3 次超时假错误;修复=①`daemon_client.js _readPortToken()` projectDir→canonical-home 权威回退(port/token/log/pid 四处一致:`HOME_PORT_FILE/HOME_PID_FILE/HOME_EMRGD_LOG`),缺失/畸形时 warn + 记 source;②`_spawnOrProbe()` spawn 失败先 `_probeExistingDaemon()` 4 状态诊断(port_file_exists / port_file_content / daemon_alive(ping) / spawn_result),活着直接复用不再盲报;③daemon.py 启动自证日志(pid | port_file | port_file_written_ok)+ ensureConnected 结构化逐次日志 + 最终 result=connected 一行;+2 GUI 测试 101→103(projectDir 缺失→home 复用不 spawn / stale+节流→probe 复用 4 状态字段断言),652 pytest 全绿,README/Agent/README.cn 计数同步) ✅ > - GUI streaming markdown block projection (#600 外部贡献 pm25coder/宿主 rant 2026-08-09T21:00:28(GUI 流式期间 markdown 不渲染——流式只追加纯文本、done 才整体渲染,无法在流式中查看已稳定的标题/列表/代码块结构,闪烁+丢失上下文):修复(参考 OpenCode markdown-stream.ts 块投影)——`markdown.js` 新增 `streamProject(body, raw, stream)`:`marked.lexer` 逐 token 分词,除尾部 live 块外的稳定块完整渲染并缓存 DOM(不打断选中/不闪烁),尾部 live 块只渲染已稳定部分;fenced code 围栏未闭合(`FENCE_END_RE` 行尾 ```/~~~ 判断)→ 纯文本不高亮(与 TUI fence_count%2 启发式一致),闭合后转完整渲染;done 时 `streamFinalize` 将 live 块转 full 一次性校正(与旧 done 渲染同源 renderMarkdown,requestIdleCallback 调度);`ensureConfigured()` 提取(marked.use 自定义 code renderer 只配置一次,renderMarkdown/streamProject 共用);`chat.js` 流式路径改调 `streamProject`,无 marked.lexer/投影异常 → 回退既有纯文本追加(done 整体渲染兜底);+158 行 renderer.smoke.test.js(块投影稳定/live/围栏未闭合正反两态 + 回退)→ GUI 测试 103→107(29 daemon_client + 22 app-commands + 31 renderer smoke + 15 i18n + 7 integration + 3 commands),README/Agent/README.cn 计数同步) ✅ > - Auto update-check + prompt (#602 宿主 rant 2026-08-10T07:12:12(打包版 `emrg update` 只打印手动下载提示,从未自动检查 GitHub 新版本——宿主只能靠口碑得知发布):新增 `emrg/update_check.py`——semver 比较 prerelease-safe(`parse_version` 在首个非数字段截断:`v0.2.18-beta1`/`v0.2.18-rc.2` 永远不比已发布版本新,正反两态测试验证)、TTL 门控(`should_check`:无记录/fresh/stale/custom)、幂等 prompt 状态文件 `~/.emrg/.last_update_check.json`(同一版本只提示一次)、静默 api.github.com 检查(网络/HTTP 失败返回 None 绝不 raise,下个 TTL 重试);`[update] check=true|false`(默认 true)+ `ttl_hours=24` 配置;daemon `_update_check_loop` 后台任务(启动 + 每 TTL,禁用时立即退出,shutdown cancel)+ `update_check`/`update_check_prompted` 命令;TUI 一次性非阻塞启动横幅(`New version vX available — .../releases`);GUI settings about 区 Releases 链接行(一次性,无 modal);宿主边界严格遵循——仅检查+提示,**绝不自动下载/安装**;+18 测试 652→670(版本比较 0.2.17<0.2.18、TTL 未过期不查、prompt 幂等、静默网络失败、config 禁用),README/Agent/README.cn 计数同步) ✅ +> - Evolution status rules (#605 宿主 rant 2026-08-10T08:59:57:completed 判定不再等宿主实测——"这种等待没有任何意义,如果我发现没改好,会新起一个 rant";completed = 所有 PR merged + 演化自测通过(pytest/import/CLI green);验收项必须演化可自证(测试/CI/审查),不写"宿主实测"类验收项;宿主反馈走新 rant;分步实现=最后一个 PR merged 才 completed;correction mechanism 保留(新 rant 暴露旧修复不足→回退 in_progress);rants.jsonl 存量 7 条"等宿主"in_progress 按新规则转 completed,不再堆积) ✅ +> - Windows installer pre-stop (#606 宿主 rant 2026-08-10T08:50:44:Windows 升级安装卡在"停止已有进程"——Inno 覆盖 `~/.emrg\install` 前不停运行进程,无窗口 pythonw daemon(emrgd.cmd→pythonw.exe -m emrg.server)独占锁文件,CloseApplications 看不见它 → 宿主只能重启;修复=新 `bin/stop-emrg.cmd`(①GUI taskkill /IM EMRG.exe 优雅 WM_CLOSE→~5s→/F 兜底 ②TUI python.exe -m emrg wmic 命令行过滤(%% 转义 LIKE,PowerShell CIM 兜底 Win11 24H2+ 无 wmic,排除 daemon pythonw -m emrg.server)③daemon:旧安装 `emrg.cmd server stop` 协议关闭(#364 起存在=版本安全)→ emrgd.pid 轮询 ≤10s → taskkill /F /PID 兜底;退出码=残留进程判定,非零→安装器中止给可操作消息;干净安装全跳过)+ `bin/emrgd.cmd` stop 分支 + .iss `[Files] dontcopy` + `[Code] PrepareToInstall`(ExtractTemporaryFile→经 cmd.exe 以 /c SW_HIDE 运行,非零中止)+ build-runtime 打包;审查中修复 cmd 括号块 %DPID% 解析时展开 bug(→setlocal enabledelayedexpansion + !DPID!,判别回归断言);+4 测试 670→674 文档同步;Windows 真机行为待宿主反馈(新规则:反馈走新 rant)) ✅ #### 2.2 Latest GitHub code changes