From e147119b51c1497b6ddae2f473dd488d40d36bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=B2=A8=E9=B1=BC=E8=BE=A3=E6=A4=92?= Date: Wed, 14 Oct 2026 12:42:36 +0800 Subject: [PATCH] Align combined navigation coverage and documentation with current menus --- .../20261014-consolidate-five-2d069b40.md | 10 +++++++++- README.md | 2 +- tests/e2e/main-navigation.spec.ts | 20 ++++++++++++------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/.project-docs/30-worklog/tasks/20261014-consolidate-five-2d069b40.md b/.project-docs/30-worklog/tasks/20261014-consolidate-five-2d069b40.md index 0982f8d8..776387ac 100644 --- a/.project-docs/30-worklog/tasks/20261014-consolidate-five-2d069b40.md +++ b/.project-docs/30-worklog/tasks/20261014-consolidate-five-2d069b40.md @@ -59,6 +59,14 @@ - Coding前端-页面修改2 /01a0ebe4: complete, clean/official Ready; finalbf101c1e52820cc7a4282699fb6e1daeecb94819 contains140f6be8db10be34472aba15d80721c33969010a. Remove visible project prompt/Skills while preserving hidden metadata/model contract; true selected-conversation deletion replaces archive, old archived records return to normal list, active/background selection and delayed-event guards covered.17config+153deletion units and targeted Electron passed. No runtime operation by source. Old20e2e product patch already equivalent in18e4be66/main; do not replay old archive UI or task-only assessment8cc. - 临时应用排查 /01a1383a: complete, clean/official Ready; final145475766f2ea11bd864e52b2c62e9cd8c5a255f contains0f26b6d→f785757→d16c889→40930aec plus docs. Runtime productMain40930; project-bound persisted entry, verified local launch recipe, port/content ownership and project-switch/manual-open race protection.134units+1realElectron quit/reopen/stopped-service scenario passed; actual Alice game observed after manual login. Eight unrelated old full-unit failures and12 old status-copy assertions independently reproduced in old baselines; do not call those full runs green. Latest channel source supplies modern status tests. No more runtime changes by source. Keep source stage and its user game/config files outside cleanup. - coding页面修改 /01a1355b: complete, clean/official Ready; finalf35de7ce28cbb29258da98957ff9d2362c22df52, productf980827200a6ceac521fb38c361f5a57b80d4561. Inherits accepted footer8cd7b59/14fcea3, module-entry expanded sidebar1c39471/cca23df, shared config/plugin sidebar6bb15ae/2c671ae/ec07c67 and current work-entry. Brand removed/new project and My Projects raised; Canvas desktop project title/name only.37unit+2Electron/defaultbuild/type/lint passed. Its partial prepare did not activate; no current/pointer change. One old combined E2E still enters removed session-settings menu; update to project-menu settings or historical direct path while preserving its geometry assertion, not restoring deleted UI. -- Agent--渠道 /01a13373: final SOURCE handoff, complete clean/official Ready; final55b1d9e8212769a85a62328a9788cd35262cedf2 contains12d856cd60277bcc35670b0dc65dc64de8b4fe48 and newest human copy refinement. Earlier a837c4f/fbfc8b4 wording is included; always-reply/local-only hidden cards plus latest removal of long offline card text, status badge and failed-binding explanation retained.108unit+2Electron/type/lint/defaultbuild passed. No backend/Main change, optional existingWorker DTO only. Source stopped all runtime actions and explicitly hands partially finalized overlay to root: actualcompatfullRenderer3e22804/parenteс07c67, oldMain40930/PID93092/58003; actual new controls observed, final55bcopy not installed. A delete-confirm cancel was not confirmed before Mac lock; root must fresh inspect/cancel without performing delete. current.json still old ec07 metadata; do not claim activeverified. User manual-unlock reply pending here; no guessed unlock or old discard permission. +- Agent--渠道 /01a13373: final SOURCE handoff, complete clean/official Ready; final55b1d9e8212769a85a62328a9788cd35262cedf2 contains12d856cd60277bcc35670b0dc65dc64de8b4fe48 and newest human copy refinement. Earlier a837c4f/fbfc8b4 wording is included; always-reply/local-only hidden cards plus latest removal of long offline card text, status badge and failed-binding explanation retained.108unit+2Electron/type/lint/defaultbuild passed. No backend/Main change, optional existingWorker DTO only. Source stopped all runtime actions and explicitly hands partially finalized overlay to root: actualcompatfullRenderer3e22804/parent ec07c67, oldMain40930/PID93092/58003; actual new controls observed, final55bcopy not installed. A delete-confirm cancel was not confirmed before Mac lock; root must fresh inspect/cancel without performing delete. current.json still old ec07 metadata; do not claim activeverified. User manual-unlock reply pending here; no guessed unlock or old discard permission. - Canvas /01a135d2: still active, task20261014-canvas-sidebar-parity-5d8a7c2e. No finalsource/verification handoff yet. Wait before merge/restart. - Full68peer semantic audit completed read-only through designated sections. No unresolved human policy conflict. Legacy child-language placeholder unrelated; Canvas placeholder now a concrete known dependent source. Retain rejected refined-Code exclusion, latest deletion vs archive, latest nobrand vs old sharedbrand, current knowledge TOOL/SKILL/control placement, original channel operation/readback/logout-pending locks and current Main work-entry capabilities. + +## All Sources Completed And Merged + +- Final Canvas handoff received after source completion: task20261014-canvas-sidebar-style-9b2f8c14, finalf58bb5c9cd24ff5354b6bf084beb6911848108b8, based6c72bf8e566711e75e15129e305161f9c4975d9. Source moved byte-identical tested five-file Canvas delta to a new official task; old5d8a preparation-only task retired by its own owner.42unit,1Code+1Canvas actual isolatedElectron, final defaultbuild/type/lint and independent source review passed. No actual runtime/pointer changes by source. Latest Canvas source uses shared Code navigation tokens with lavender surface, title-only My Projects and fixed desktop/narrow Sheet behavior. +- All five final source heads now received and source tasks clean/official Ready. Only after this condition did root begin normal merges. Merge source chronology: work145→ce6f9a4, Codef35→9c693d5, Canvasf58→30a6987, Codebf/140→c77d8cf, channel55→8d1a53a. Source histories retained; all imported foreign/canonical task-doc deltas restored to original target350 tree, own record retained. +- Resolved actual overlap semantically: Code brand removed and shared configuration sidebar/footer retained per newest explicit user request. All other product merging was clean, including work-preview stored snapshot getter with deletion flight/physical purge lifecycle, Canvas styling with archive removal and latest channel Page. No rejected whole visual variant included. +- Adapted pre-existing shared-sidebar E2E to the current approved project-menu Settings entry and default-model control, retaining geometric equality, direct reload, collapse and plugin assertions. It explicitly checks deleted session-settings entry is absent and Delete Conversation visible; no actual user data deleted. Removed the resulting stale README reference to brand-positioned creation and deleted menu entry. These are integration-only coverage/documentation corrections, not product behavior expansion. +- Root actual CUA call confirmed MacLocked; human manual unlock question remains pending. Code integration/validation/staging proceeds; application interaction/quit/launch waits for unlocked fresh native state. No lock bypass, old input-discard authorization, actual card/conversation deletion or cloud mutation. diff --git a/README.md b/README.md index fc8c97bd..02b1e42a 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Makelore 是一个面向软件、视觉创作、智能机器人与个人云智 - macOS 窗口按钮:红色关闭当前窗口,全屏时先退出全屏再关闭;黄色最小化,绿色保留原生缩放/全屏行为。关窗后应用和进行中的后台任务继续运行,点击 Dock、托盘或菜单可重新打开窗口;`Cmd+Q` 退出应用。 - 桌面文本右键菜单:主 Renderer 窗口由 Electron Main 提供原生“剪切、复制、粘贴、全选”操作;菜单只在可编辑区域或已有文本选择时出现,普通空白区域不显示,也不向 Renderer 暴露剪贴板 IPC。 - AI 编程核心对话运行时:Electron Main 按需启动一个长驻 Pi Agent Server,同一进程内为每条 Conversation 建立独立的 Runtime、Session、凭证视图、扩展上下文和 JSONL 通道,同时复用 Pi 模块与进程启动成本;Server 异常退出时所有旧通道统一失效,下一次恢复只重启一个 Server。正式包中的 Agent Server 从明确传入的 `resources/pi-runtime` 根定位依赖清单与包入口,不从脚本所在目录或应用 `node_modules` 猜测解析。Renderer 不直接启动或调用 Pi,也不读取其 wire 类型。项目与 Conversation 元数据先从本地读取,选中对话后才按需准备对应逻辑线程;输入框不等待运行时准备完成。同一助手工具批次中,会取得项目写租约的 `bash`、`edit`、`write` 与动态产品工具按顺序执行,避免批次在命令启动前自锁;纯只读工具仍可并行。子 Agent 仍使用独立的短生命周期进程,以保留并发配额、故障和写入边界;macOS 上两类后台进程都使用 Electron 自带的 Helper,不在 Dock 中创建额外应用图标。 -- AI 编程默认入口:进入 Code 后保持在 `/chat`。顶部返回箭头与侧栏收起图标同排,与右侧项目/会话名称对齐;折叠时保留返回和展开入口。macOS 为原生窗口按钮保留安全空间,窄侧栏仍可使用。左侧不再展示麦洛品牌与说明语,“新建项目”置于原品牌区,“我的项目”与列表上移到原新建项目区域;“作品广场”与“新建项目”沿用 Agent 的彩色图标徽章+文字样式,不再使用整行白色块与厚阴影,其中“新建项目”位于品牌下方原广场入口的位置,“作品广场”移至底部、紧邻账户按钮上方;“我的项目”和项目列表紧接新建项目,列表沿用图标与文字布局及浅色选中反馈;进入“会话编程设置”后的项目配置页及插件资源页复用相同的左侧工作栏,返回与收起按钮、项目和会话列表、底部作品广场与账户的位置保持一致,并沿用当前宽度和收起状态;配置正文、顶部项目名称与配置页自身的返回操作保留。尚未选择本地项目时,页面以麦洛 M 标识和居中引导语建立焦点,下方提供独立的“新增项目”主操作以及可横向浏览、直接进入的已有项目卡片;项目创建和进入仍复用侧栏现有流程。已有项目的新 Conversation 在可编辑 Composer 上方沿用同一品牌引导,第一条消息出现后切换为正常时间线。 +- AI 编程默认入口:进入 Code 后保持在 `/chat`。顶部返回箭头与侧栏收起图标同排,与右侧项目/会话名称对齐;折叠时保留返回和展开入口。macOS 为原生窗口按钮保留安全空间,窄侧栏仍可使用。左侧不再展示麦洛品牌与说明语,“新建项目”置于原品牌区,“我的项目”与列表上移到原新建项目区域;“作品广场”与“新建项目”沿用 Agent 的彩色图标徽章+文字样式,不再使用整行白色块与厚阴影,“作品广场”移至底部、紧邻账户按钮上方;“我的项目”和项目列表紧接新建项目,列表沿用图标与文字布局及浅色选中反馈;从项目菜单进入的配置页及插件资源页复用相同的左侧工作栏,返回与收起按钮、项目和会话列表、底部作品广场与账户的位置保持一致,并沿用当前宽度和收起状态;配置正文、顶部项目名称与配置页自身的返回操作保留。尚未选择本地项目时,页面以麦洛 M 标识和居中引导语建立焦点,下方提供独立的“新增项目”主操作以及可横向浏览、直接进入的已有项目卡片;项目创建和进入仍复用侧栏现有流程。已有项目的新 Conversation 在可编辑 Composer 上方沿用同一品牌引导,第一条消息出现后切换为正常时间线。 - AI 编程历史与配额反馈:Pi 上下文压缩不删除用户可见的 active-branch 历史,压缩摘要保持 Main-private;Renderer 首次渲染最近 120 个节点,向上滚动时按 100 个节点追加更早内容并保持阅读位置。Main 精确识别 `token_point_balance_exhausted` / `词元点数余额不足`,只向 Renderer 投影不可重试的稳定配额错误和安全中文提示,重开会话后仍可见且不暴露上游原始错误或 request id。 - 账号词元点数:左下角账户菜单显示本人永久余额和预占;“词元点数与充值”入口暂时隐藏,充值、充值订单与分页收支记录的既有实现保留。真正新注册赠送 100 点,1 元充值 50 点,永久有效;旧账户不补送,旧会员/订阅/周额度/重置卡入口已移除。家长为孩子充值时登录孩子的账号,页面显示当前昵称和账号,点数进入该账号自己的钱包;无需将孩子身份改为家长。当前有效账号可给本人充值,青少年可查看自己的精确余额;使用他人共享钱包时仅显示可用状态,不显示付款人的余额或记录。Main 持有凭据并转发充值请求;付款结果未知时沿用原请求并核查原订单,只有服务端确认才显示到账。扫码信息缺失时可到网页账户页继续原订单,付款来源也由网页账户页管理,充值不会自动切换共享/个人来源。需配套部署 Works Square 当前账号充值资格更新(本次无需新迁移,原永久点数基础为 0094);本地模拟验收不代表真实支付通过。 - 桌面性能策略:应用窗口使用不透明浅色表面并默认保留硬件合成;仅在显式安全模式或短时间内重复 GPU 进程崩溃时启用软件渲染,并把故障原因保存在用户数据目录。启动关键路径只创建本地应用壳,认证、代理、同步、更新和遥测在首帧后延迟初始化;开发版可通过 `app:performance` 快照观察 GPU、进程、WebContents、事件循环与 Renderer Long Task 聚合指标。 diff --git a/tests/e2e/main-navigation.spec.ts b/tests/e2e/main-navigation.spec.ts index 8f433dd3..fc9f73c9 100644 --- a/tests/e2e/main-navigation.spec.ts +++ b/tests/e2e/main-navigation.spec.ts @@ -522,8 +522,12 @@ test.describe('Makelore module navigation without setup flow', () => { const chatChrome = await readCodeChrome(); await conversationActions.hover(); await conversationActions.click(); - await page.getByRole('menuitem', { name: '会话编程设置', exact: true }).click(); - await expect(page).toHaveURL(/\/project-config\?agent=/); + await expect(page.getByRole('menuitem', { name: '会话编程设置', exact: true })).toHaveCount(0); + await expect(page.getByRole('menuitem', { name: '删除对话', exact: true })).toBeVisible(); + await page.keyboard.press('Escape'); + await sidebar.getByRole('button', { name: '项目操作:故事绘本', exact: true }).click(); + await page.getByRole('menuitem', { name: '项目设置', exact: true }).click(); + await expect(page).toHaveURL(/\/project-config$/); await expect(page.getByTestId('project-configuration-page')).toBeVisible(); await expect(moduleReturn).toBeVisible(); const projectBack = page.getByTestId('project-configuration-back-button'); @@ -531,14 +535,16 @@ test.describe('Makelore module navigation without setup flow', () => { await page.mouse.move(1000, 500); await expect.poll(readCodeChrome).toEqual(chatChrome); await expect(sidebar).toHaveCSS('background-color', 'rgb(243, 247, 251)'); - const prompt = page.getByLabel('项目提示词', { exact: true }); - await expect(prompt).toBeVisible(); - const originalPrompt = await prompt.inputValue(); + const defaultModel = page.getByLabel('默认模型', { exact: true }); + await expect(defaultModel).toBeVisible(); + const originalModel = await defaultModel.inputValue(); + await expect(page.getByLabel('项目提示词', { exact: true })).toHaveCount(0); + await expect(page.getByRole('heading', { name: '项目 Skills', exact: true })).toHaveCount(0); await page.screenshot({ path: test.info().outputPath('project-config-shared-code-sidebar.png') }); // Reload directly on the settings URL, without mounting /chat first. await page.reload({ waitUntil: 'domcontentloaded' }); - await expect(page).toHaveURL(/\/project-config\?agent=/); + await expect(page).toHaveURL(/\/project-config$/); await expect(page.getByTestId('project-configuration-page')).toBeVisible(); await expect.poll(readCodeChrome).toEqual(chatChrome); const sidebarToggle = page.getByTestId('titlebar-sidebar-toggle'); @@ -550,7 +556,7 @@ test.describe('Makelore module navigation without setup flow', () => { await page.mouse.move(1000, 500); await expect(sidebar).toHaveAttribute('aria-hidden', 'false'); await expect.poll(readCodeChrome).toEqual(chatChrome); - await expect(prompt).toHaveValue(originalPrompt); + await expect(defaultModel).toHaveValue(originalModel); await projectBack.click(); await expect(page).toHaveURL(/\/chat$/); await expect(moduleReturn).toBeVisible();