From b53768b56aff8bfcd206d7a1da19a6c23abd9cdf Mon Sep 17 00:00:00 2001 From: EMRG Evolution Date: Tue, 11 Aug 2026 13:40:09 +0800 Subject: [PATCH] emrg: evolution_prompt quick-ref for #664 (workspace panel P2 framework), #665 (P3 file browser + viewer), #666 (per-session artifact isolation) --- emrg/server/evolution_prompt.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/emrg/server/evolution_prompt.md b/emrg/server/evolution_prompt.md index f236475..b2b8c32 100644 --- a/emrg/server/evolution_prompt.md +++ b/emrg/server/evolution_prompt.md @@ -407,6 +407,9 @@ When reading rants, follow these rules: > - GUI proactive update prompt (#660 宿主 rant 2026-08-11T09:18:16:GUI 启动主动检查新版本 + 设置页手动检查按钮——boot() 成功路径调 refreshUpdateCheck(幂等 prompted_version 只提示一次,对齐 TUI 启动横幅;daemon 未就绪静默失败);设置页 #about-update 行旁新增"检查更新"按钮 → update_check 消息加 `force:true` → daemon 立即 `run_update_check_once()` 刷新缓存再返回(不再只读 TTL 缓存);i18n zh/en `settings.checkUpdate`/`settings.checkingUpdate`;测试 GUI 187→188;合并 e5edaaf) ✅ > - GUI workspace panel P1 (#661 宿主 rant 2026-08-11T12:20:35 阶段 1 数据层:daemon `list_files`→`files_list`(目录在前按名排序对齐 ReadTool/单目录 5000 条上限 + `truncated`/绝对路径校验相对拒绝/符号链接不展开归 file/错误返回 error 不崩溃)+ `read_file`→`file_content`(UTF-8 文本/1MB 上限 error 提示用系统工具/UnicodeDecodeError→`binary:true` content 空不走 base64/start_line+line_limit 分页显式 limit 上限 2000);GUI RESPONSE_TYPES 加 `list_files:"files_list"`/`read_file:"file_content"` + `_classify` list_result 白名单加 files_list(防 pending 超时迟到帧)+ preload `listFiles`/`readFile` + main.js `emrg:listFiles`/`emrg:readFile` IPC(requireConn 10s 当前会话连接天然认证);+6 pytest e2e TestWSWorkspacePanel(混排排序/相对拒绝/符号链接不展开/5000 截断/文本+分页/二进制+1MB)+1 build-config(preload API 存在性);pytest 688→694、GUI 187→188;合并 a83638b) ✅ > - README philosophy intro block (#662 宿主 rant 2026-08-11T12:27:00:MANIFESTO 引语后追加双语理念对偶句——EN "Everyone is a product manager — every rant is a ticket for the next release / Everyone is a host of silicon life — what you run is a digital organism that evolves with you" + ZH "人人都是产品经理——你的每一条吐槽,都是下一版的需求单 / 人人都是硅基生命的宿主——你运行的,是一个与你共生进化的数字生命";PM=需求主权民主化对应 MANIFESTO 第三条【需求即变异】、Host=共生对应第六章【宿主权利】;MANIFESTO.md 零改动、顶部标语不变、纯文档无测试变更;合并 06ca9b1) ✅ +> - GUI workspace panel P2 framework (#664 宿主 rant 2026-08-11T12:20:35 阶段 2 框架层:`#result-resizer` 绝对定位拖拽手柄(不进 #app flex 流 R6-②,防 WebContentsView bounds x 偏移)+ `.dragging` 抑制 width transition(R1-①);折叠(⌘\)保留 40px 窄条(#615)且 **panelWidth 与 collapsed 分离持久化**(两个 localStorage 键,展开恢复拖拽宽度);Tab 栏 = 静态「文件/产物」+ 打开文件 Tab 条(`#result-tabbar`)——`openFileTab/closeFileTab/activateTab`(同路径去重、上限 8 淘汰最旧、可关闭、active 高亮);per-session 容器模式(缺口 5):`openedTabsBySid/artifactsBySid` 状态表 + `switchSession(sid)` 接入 app.js switchSession/newSession + `addToolResult(data, sid)` 按事件 sid 归类;产物卡片(WorkBuddy P1)暂保留至 P3.2 改 write/edit 登记;i18n zh/en 4 键;+5 GUI 测试 188→193;合并 4c71b25) ✅ +> - GUI workspace panel P3 file browser + viewer (#665 宿主 rant 2026-08-11T12:20:35 阶段 3 slice 1:新模块 `file-tree.js`——懒加载目录树(根 = 激活会话 projectPath,app.js switchSession/newSession/bindUi 三处 `FileTree.setSession(sid, path)` 接线,openSessions 优先回退 projectDir);目录行点击 → `emrg.listFiles`(P1 daemon)**首次展开拉取 + 缓存**(折叠再展开不重复拉取);文件行点击 → `openFileTab(sid, path)`;查看器基础版 `#result-viewer` pane:`emrg.readFile` 内容转义渲染 `
`(per-tab 缓存不重拉)、二进制 → i18n 提示用系统工具、读失败 → 错误提示、头部路径 + 系统工具打开按钮;`openFileTab/closeFileTab` 空 sid 归当前会话桶(对齐 switchSession+setSession 成对接线);i18n zh/en 6 键;+5 GUI 测试 193→198;合并 7c4e953) ✅
+> - GUI result-panel per-session artifact isolation (#666 外部贡献 pm25coder:后台会话 `tool_finished` 只入 sid 桶**不渲染激活 pane**(防污染;切回时 `renderArtifacts()` 从桶恢复 DOM,镜像 renderTabbar 模式)——修掉 P2.2 桶化但无条件渲染的缺口;`switchSession`/`init` 走 `renderArtifacts`;+2 GUI 测试(后台只入桶不渲染 / switchSession 按 sid 重渲染恢复);合并 a1d8d8d) ✅
 
 #### 2.2 Latest GitHub code changes