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 numberDiff line numberDiff line change
Expand Up@@ -369,6 +369,7 @@ When reading rants, follow these rules:
> - TUI daemon spawn throttle (#594 #592 客户端侧总闸补完:`daemon_manager.py` 模块级 `_MAX_SPAWN_ATTEMPTS=3` + `_spawn_attempts` 计数——`start_daemon()` 超限抛 `RuntimeError("daemon failed to start after N attempts — please run 'emrg server' manually...")`(TUI app.py `_reconnect` 循环每 1s 调 ensure_connected → 无限 spawn 即 Windows 弹窗风暴源),`ensure_connected` 成功连接后计数归零(连接生命周期语义,与 GUI daemon_client.js auth_ok 归零一致);`app.py _reconnect` 捕获节流错误一次(`_throttle_warned`)→ 一次性系统消息 + status 提示 "daemon down — run 'emrg server'";+56 pytest(3 次 spawn 无第 4 次 await_count 断言 / 成功连接归零 / autouse fixture 防跨测试泄漏)→ 合并后 652 全绿) ✅
> - 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 计数同步) ✅

#### 2.2 Latest GitHub code changes

Expand Down
Loading