From 8c75ff0a8394d3b12d82810f22168bc4be62d92d Mon Sep 17 00:00:00 2001 From: EMRG Evolution Date: Thu, 13 Aug 2026 22:14:19 +0800 Subject: [PATCH 1/2] emrg: GUI settings panel title + remove duplicate sidebar settings-btn (rant 21:49:51) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The settings workspace view lacked a heading (Rant/Project/Task panels got theirs in the parallel panel-restyle) and the sidebar footer had a redundant '设置' button duplicating the nav gear entry. Changes: - index.html: add h2.workspace-view-title (data-i18n=settings.title) to #panel-settings; remove #settings-btn from .sidebar-footer (keep #status-dot connection indicator) - app.js: drop the dead settings-btn click binding - i18n.js: remove orphaned sidebar.settings keys (zh/en); settings.title already existed - layout.css: add .workspace-view-title styles (also styles the parallel panels' titles which referenced the class without a definition) - renderer.smoke +1 test (GUI 241→242, Agent.md synced 118 renderer smoke) --- .venv | 1 + Agent.md | 4 ++-- emrg/gui/node_modules | 1 + emrg/gui/renderer/css/layout.css | 8 ++++++++ emrg/gui/renderer/index.html | 4 ++-- emrg/gui/renderer/js/app.js | 4 ---- emrg/gui/renderer/js/i18n.js | 2 -- emrg/gui/test/renderer.smoke.test.js | 20 ++++++++++++++++++++ 8 files changed, 34 insertions(+), 10 deletions(-) create mode 120000 .venv create mode 120000 emrg/gui/node_modules diff --git a/.venv b/.venv new file mode 120000 index 0000000..8cadb26 --- /dev/null +++ b/.venv @@ -0,0 +1 @@ +/Users/argszero/.emrg/evolution/emrg/.venv \ No newline at end of file diff --git a/Agent.md b/Agent.md index 8fd95af..687d0d8 100644 --- a/Agent.md +++ b/Agent.md @@ -85,7 +85,7 @@ Usage: say "tool loop" for the whole process, "round N" for a single LLM request - Streaming chat with delta rendering (16ms batching), markdown on done (marked + DOMPurify + local highlight.js subset), tool call status cards (2000-char truncation + expand) - Session list/switch/new/delete + right-click rename (context menu, #423) synced with daemon; own-stream busy lock (G65); broadcast streams from other clients tagged "来自其他客户端" - Disconnect/reconnect: red status dot, auto daemon respawn (stale-port detection), session resume, input bar restored on disconnect (no 30s fake-timeout) - - Unit tests `npm test` (241: 44 daemon_client + 19 conn-manager + 22 app-commands + 117 renderer smoke + 15 i18n + 7 integration + 3 commands + 5 build-config + 7 gui-state + 2 tool-group); RESPONSE_TYPES mirror daemon protocol verified against `daemon.py` + - Unit tests `npm test` (242: 44 daemon_client + 19 conn-manager + 22 app-commands + 118 renderer smoke + 15 i18n + 7 integration + 3 commands + 5 build-config + 7 gui-state + 2 tool-group); RESPONSE_TYPES mirror daemon protocol verified against `daemon.py` - **Scheduled tasks** — Task generalization + CRUD (rant 2026-08-12T18:23:15, #709/#710/#711) - Task handler generalized: `TaskHandler` (renamed from `EvolutionHandler`), repo-configured self-heal for any project, template lookup builtin → `~/.emrg/task-templates/.md` → fallback - Daemon commands: `task_create/update/delete` + `task_template_create/list/update/delete` (tasks stored in `~/.emrg/tasks.yml`, custom type templates in `~/.emrg/task-templates/`) @@ -119,7 +119,7 @@ pkill -f "emrg.server"; rm -f ~/.emrg/emrgd.port; python -m emrg ``` Python: `uv run pytest tests/ -v` (801) — import check: `uv run python -c "from emrg.client.app import run_client"` -GUI: `cd emrg/gui && npm test` (241: 44 daemon_client + 19 conn-manager + 22 app-commands + 117 renderer smoke + 15 i18n + 7 integration + 3 commands + 5 build-config + 7 gui-state + 2 tool-group) — syntax: `node --check main.js preload.js daemon_client.js renderer/js/*.js` +GUI: `cd emrg/gui && npm test` (242: 44 daemon_client + 19 conn-manager + 22 app-commands + 118 renderer smoke + 15 i18n + 7 integration + 3 commands + 5 build-config + 7 gui-state + 2 tool-group) — syntax: `node --check main.js preload.js daemon_client.js renderer/js/*.js` CI: `uv run pytest` (ubuntu + **windows-2025 matrix** — Windows pytest 回归在 PR CI 即失败,v0.2.29 教训 #725) + GUI tests + **actionlint workflow lint** (`rhysd/actionlint@v1.7.12` gate, #444 — workflow 解析错误在 PR CI 即失败,如 `if:` secrets 上下文) Re-trigger: `scripts/re-trigger-ci.sh [branch]` (workflow_dispatch, #527 — 替代空 commit 重触发:Actions outage 会整段丢弃 push 事件,dispatch 走 API 路径不受影响) diff --git a/emrg/gui/node_modules b/emrg/gui/node_modules new file mode 120000 index 0000000..a74aa0e --- /dev/null +++ b/emrg/gui/node_modules @@ -0,0 +1 @@ +/Users/argszero/.emrg/evolution/emrg/emrg/gui/node_modules \ No newline at end of file diff --git a/emrg/gui/renderer/css/layout.css b/emrg/gui/renderer/css/layout.css index 6b1f103..407d79d 100644 --- a/emrg/gui/renderer/css/layout.css +++ b/emrg/gui/renderer/css/layout.css @@ -80,6 +80,14 @@ color: var(--text-3); } +/* rant 21:49:51:面板视图标题(设置/Rant/项目/任务面板统一) */ +.workspace-view-title { + font-size: var(--fs-title); + font-weight: 600; + color: var(--text-1); + margin: 0 0 var(--sp-3); +} + /* rant 14:10:14 P2:设置面板 tab(模型服务/工作目录/GitHub/外观/语言/关于) */ .panel-tabs { display: flex; diff --git a/emrg/gui/renderer/index.html b/emrg/gui/renderer/index.html index 5f02627..35d22e9 100644 --- a/emrg/gui/renderer/index.html +++ b/emrg/gui/renderer/index.html @@ -41,7 +41,6 @@ @@ -159,7 +158,8 @@
- + +

设置

diff --git a/emrg/gui/renderer/js/app.js b/emrg/gui/renderer/js/app.js index 82dfad0..0ce4ca5 100644 --- a/emrg/gui/renderer/js/app.js +++ b/emrg/gui/renderer/js/app.js @@ -1595,10 +1595,6 @@ const App = (() => { Dialogs.initOpenSessionDialog(); // P5:打开会话对话框绑定 Dialogs.initNewSessionDialog(); // P5 slice 2:新建会话对话框绑定 $("open-session-new-session")?.addEventListener("click", () => Dialogs.showNewSessionDialog()); // P5 slice 2:打开弹窗 → 新建会话 - $("settings-btn").addEventListener("click", () => { - loadEvolutionSummary(); // WorkBuddy P3(#502):打开设置时加载最近改进 - Dialogs.showSettings(); - }); Dialogs.initLangButtons(); // rant 21:19:设置语言选择器 $("settings-cancel").addEventListener("click", () => switchView("settings")); // P2:取消=关闭设置视图 $("settings-save").addEventListener("click", Dialogs.saveSettings); diff --git a/emrg/gui/renderer/js/i18n.js b/emrg/gui/renderer/js/i18n.js index f98ec9c..45b53fb 100644 --- a/emrg/gui/renderer/js/i18n.js +++ b/emrg/gui/renderer/js/i18n.js @@ -21,7 +21,6 @@ const I18N = (() => { "sidebar.newChatTitle": "新对话 (⌘N)", "sidebar.openChat": "打开会话", "sidebar.openChatTitle": "打开会话(跨项目)", - "sidebar.settings": "设置", "sidebar.statusTitle": "连接状态", "sidebar.backToBottom": "回到底部", @@ -445,7 +444,6 @@ const I18N = (() => { "sidebar.newChatTitle": "New chat (⌘N)", "sidebar.openChat": "Open session", "sidebar.openChatTitle": "Open session (cross-project)", - "sidebar.settings": "Settings", "sidebar.statusTitle": "Connection status", "sidebar.backToBottom": "Back to bottom", diff --git a/emrg/gui/test/renderer.smoke.test.js b/emrg/gui/test/renderer.smoke.test.js index c2bd82b..18762f3 100644 --- a/emrg/gui/test/renderer.smoke.test.js +++ b/emrg/gui/test/renderer.smoke.test.js @@ -2964,3 +2964,23 @@ test("rant 14:10:14 P4:rant 面板列表(状态徽标 + 筛选)+ 详情展 assert.ok(sent, "sendRant 应被调用"); assert.strictEqual(sent.message, "希望支持 X"); }); + +test("rant 21:49:51 settings panel title + sidebar settings-btn removed", async () => { + const htmlSrc = fs.readFileSync(path.join(__dirname, "..", "renderer", "index.html"), "utf-8"); + // 设置面板应有标题(对齐 Rant/项目/任务面板 .workspace-view-title) + const settingsSection = htmlSrc.match(/id="panel-settings"([\s\S]*?)(?:)/); + assert.ok(settingsSection, "index.html 应有设置面板 section"); + assert.ok(settingsSection[1].includes('class="workspace-view-title" data-i18n="settings.title"'), + "设置面板应有 .workspace-view-title 标题(data-i18n=settings.title)"); + // 侧边栏底部 settings-btn 已删除(与导航 ⚙ 重复入口),status-dot 保留 + const footer = htmlSrc.match(/class="sidebar-footer"([\s\S]*?)<\/div>/); + assert.ok(footer, "index.html 应有 sidebar-footer"); + assert.ok(!footer[1].includes("settings-btn"), "sidebar-footer 不应再有 settings-btn"); + assert.ok(footer[1].includes("status-dot"), "sidebar-footer 应保留 status-dot(连接状态指示)"); + // 对应 JS 绑定已删除 + const appSrc = fs.readFileSync(path.join(__dirname, "..", "renderer", "js", "app.js"), "utf-8"); + assert.ok(!appSrc.includes('$("settings-btn")'), "app.js 不应再有 settings-btn 绑定"); + // i18n 无孤儿 sidebar.settings + const i18nSrc = fs.readFileSync(path.join(__dirname, "..", "renderer", "js", "i18n.js"), "utf-8"); + assert.ok(!i18nSrc.includes('"sidebar.settings"'), "i18n 不应再有 sidebar.settings 孤儿键"); +}); From 8a2d26bdda61e0578592e469beb2fef3234badd2 Mon Sep 17 00:00:00 2001 From: EMRG Evolution Date: Thu, 13 Aug 2026 22:14:30 +0800 Subject: [PATCH 2/2] emrg: remove accidental worktree symlinks (.venv, node_modules) from branch --- .venv | 1 - emrg/gui/node_modules | 1 - 2 files changed, 2 deletions(-) delete mode 120000 .venv delete mode 120000 emrg/gui/node_modules diff --git a/.venv b/.venv deleted file mode 120000 index 8cadb26..0000000 --- a/.venv +++ /dev/null @@ -1 +0,0 @@ -/Users/argszero/.emrg/evolution/emrg/.venv \ No newline at end of file diff --git a/emrg/gui/node_modules b/emrg/gui/node_modules deleted file mode 120000 index a74aa0e..0000000 --- a/emrg/gui/node_modules +++ /dev/null @@ -1 +0,0 @@ -/Users/argszero/.emrg/evolution/emrg/emrg/gui/node_modules \ No newline at end of file