diff --git a/Agent.md b/Agent.md index a047db65..3c22aeca 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` (257: 45 daemon_client + 19 conn-manager + 22 app-commands + 129 renderer smoke + 16 i18n + 7 integration + 3 commands + 7 build-config + 7 gui-state + 2 tool-group); RESPONSE_TYPES mirror daemon protocol verified against `daemon.py` + - Unit tests `npm test` (258: 45 daemon_client + 19 conn-manager + 22 app-commands + 129 renderer smoke + 16 i18n + 7 integration + 3 commands + 8 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` (933) — import check: `uv run python -c "from emrg.client.app import run_client"` -GUI: `cd emrg/gui && npm test` (257: 45 daemon_client + 19 conn-manager + 22 app-commands + 129 renderer smoke + 16 i18n + 7 integration + 3 commands + 7 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` (258: 45 daemon_client + 19 conn-manager + 22 app-commands + 129 renderer smoke + 16 i18n + 7 integration + 3 commands + 8 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/package.json b/emrg/gui/package.json index d34b57d1..bdadc285 100644 --- a/emrg/gui/package.json +++ b/emrg/gui/package.json @@ -91,6 +91,8 @@ "allowToChangeInstallationDirectory": true, "perMachine": false }, - "buildResources": "../packaging/assets" + "directories": { + "buildResources": "../packaging/assets" + } } } diff --git a/emrg/gui/test/build-config.test.js b/emrg/gui/test/build-config.test.js index 0be335ad..c7171115 100644 --- a/emrg/gui/test/build-config.test.js +++ b/emrg/gui/test/build-config.test.js @@ -147,3 +147,31 @@ test("preload exposes workspace-panel APIs (listFiles/readFile)", () => { assert.match(main, new RegExp(`ipcMain\\.handle\\("${channel}"`), `main.js must handle ${channel}`); } }); + + +// ── rant 2026-08-18T12:45:47 (v0.2.47 Build Release) ── +// #836 把 buildResources 放在 electron-builder config 根级 → schema 校验失败 +// ("configuration has an unknown property 'buildResources'")→ 4/4 build jobs 全红。 +// 正确位置是 directories.buildResources。Test CI 不跑 electron-builder,只有打包会炸 —— +// 本守卫在 PR 阶段钉死该 schema 约束,防止再次放行。 +test("electron-builder config: buildResources lives under directories (schema guard, rant 12:45:47)", () => { + const build = PKG.build || {}; + assert.ok( + !Object.prototype.hasOwnProperty.call(build, "buildResources"), + `buildResources must NOT be at config root — electron-builder rejects unknown property ` + + `(v0.2.47 Build Release 4/4 failure). Place it under directories.buildResources. ` + + `Actual root keys: ${JSON.stringify(Object.keys(build))}` + ); + assert.strictEqual( + build.directories && build.directories.buildResources, + "../packaging/assets", + "directories.buildResources must point at ../packaging/assets (icon.icns/ico/png sources)" + ); + // icon.icns/ico/png are gen-assets products (gitignored, generated at build time from + // icon.svg by packaging/gen-assets.sh) — only the committed design source must exist in CI. + const assetsDir = path.join(GUI_ROOT, "..", "..", "packaging", "assets"); + assert.ok( + fs.existsSync(path.join(assetsDir, "icon.svg")), + `buildResources dir missing design source icon.svg (committed) — gen-assets can't render icons` + ); +});