feat(settings): replicate the WorkBuddy general settings panel (TODO 10)
This commit is contained in:
1 parent
401926d7eb
commit
7b68d9eb25
21 files changed
+1150
-11
No files matched your search
@@ -303,11 +303,38 @@
|
||||
|
||||
### 10. 通用
|
||||
|
||||
- [ ] 拆解原版通用设置页面的布局、控件和交互。
|
||||
- [ ] 将 YCode 当前已经支持的内容接入对应控件,记录暂未支持的差异。
|
||||
- [ ] 验收:控件反映真实配置;修改即时生效或明确提示生效时机,重启后持久化正确。
|
||||
- [x] 拆解原版通用设置页面的布局、控件和交互。
|
||||
- [x] 将 YCode 当前已经支持的内容接入对应控件,记录暂未支持的差异。
|
||||
- [x] 验收:控件反映真实配置;修改即时生效或明确提示生效时机,重启后持久化正确。
|
||||
|
||||
状态:待 REA 拆解与能力盘点。
|
||||
状态:已实现并通过真实窗口回归;未接入项按「保持原版外观 + 明确标注」处理,逐项记录在下方。
|
||||
|
||||
原版证据:
|
||||
- REA `ev_a2dbeb23e30b9770743e857279a2e43da38fcc48d10612f75ace2938c5b29114`(WorkBuddy 5.8.3 设置→通用面板,900×680,自顶向底滚动采样 0/400/795/0,帧 frame-000~003):16 行文案、控件类型与取值、分组标题(常规/权限/存储/通知/隐私)、滚动边界。
|
||||
- REA `ev_2309de12a003fca2c863a223cbda5bccad36b3af73e29bc309fdaed94745cf9e`(同页 DOM 边界、computed style、svg_nodes):面板 `[232,40,638,1415]`(5.8.2 复核)、组 `[40/218] [274/514] [804/265] [1085/234] [1335/120]`、行高 `[44,68,52 | 56,68,68,76,68,68,56 | 56,68,56 | 66]`、卡片 `#fff / radius 12 / padding 12px 16px`、标题 14px/500/22px、描述 14px/400/22px `rgba(0,0,0,.5)`、开关 34×20、下拉 120×32、滑块 224×40、存储卡 638×235、路径输入 530×32、更改按钮 68×32、打开目录 76×22、通知按钮 130×32。
|
||||
- REA `ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94`:面板与控件样式来源(`contexts-BkjwYSZT.css` sha256 `50cbd673f7f35fc7f966bdddc6c9f5677fdfe944cb904888d214619fca259380`、`tokens-Df-i-zsO.css` sha256 `13f2bf82c96e5167a7d7098e36950c6c22c475b3337dbb8bb29ad2fe79cde696`、UI kit `src-Bh3YZ35H.css` sha256 `88dbdc1cd3f59d0e8b75824512a465a2be714bc7af481d790fe3a9484f85e01a`)。
|
||||
- 观察范围:桌面端浅色主题(另加暗色抽查)、900×680 设置窗口、通用页默认态;未覆盖:各下拉展开态的选项列表(`general-settings-panel__link-open-select-popover` / `power-save-blocker-settings__popover` 均为 368 宽,规则已回收但本轮不接入)。
|
||||
|
||||
实现:
|
||||
- `scripts/rea/recover-general-settings.mjs`:从上述 REA 回收样式表投影出面板规则(149 条)+ UI kit 控件规则 + 面板作用域 token,写入 `src/renderer/src/components/source-general-settings-recovered.css`;UI kit 规则用 `:where(.general-settings-panel)` 前缀并排在面板规则之前,以保持原版同权重、面板后加载的层叠(例如 `.wb-storage__open-folder{height:auto}` 必须压过 `.wb-button--medium{height:32px}`)。
|
||||
- `src/renderer/src/components/GeneralSettingsPanel.tsx`(+ `source-general-settings.css`、`general-settings-icons.tsx`):按原版 DOM/类名/几何复刻 16 行;品牌替换遵循既有约定(「WorkBuddy 默认工作空间存储路径」→「YCode 默认工作空间存储路径」)。
|
||||
- `src/main/general-settings.ts`、`src/main/config.ts`、`src/main/ipc.ts`、`src/main/index.ts`、`src/shared/{types,ipc}.ts`、`src/preload/index.ts`:新增 `window.ycode.general` API(get/update/openFolder/changeWorkspaceRoot/openSystemNotificationSettings)。
|
||||
- 已接入(真实行为、重启持久化):
|
||||
1. 运行时防止系统休眠 → `config.preventSleep`;任务运行期间主进程持有 `powerSaveBlocker`(`updateActiveRuns` 挂在 `chat:send` 运行生命周期上)。
|
||||
2. 开机自动启动 → `config.autoLaunch` + 系统登录项(`app.setLoginItemSettings`),读取时以系统登录项真实状态为准。
|
||||
3. 系统缓存目录 → 真实数据目录(`app.getPath('userData')`)、真实占用与磁盘容量(递归扫描 + `fs.statfs`)、「打开目录」调用系统文件管理器。
|
||||
4. 默认工作空间存储路径 → `config.workspaceRoot`,只读填充态输入框 + 「更改」走系统目录选择器。
|
||||
5. 桌面通知 → 「前往系统设置」打开系统通知设置页(Windows `ms-settings:notifications`)。
|
||||
- 未接入(原版行为未实现,因此保留原版外观、控件类型与初始态,但标记 `aria-disabled` + `title="暂未接入"`,且不产生任何效果):语言、链接打开方式、字体大小、允许锁屏运行、网络代理、自动安装可信技能、技能自动更新、套件自动更新、通知提示音、定时任务产物通知、体验优化计划(含「了解更多」内联链接)。共 11 项。
|
||||
|
||||
验证:`scripts/verify-general-settings.cjs` 在真实隔离 Electron(真实 preload/IPC/渲染进程/文件系统 + 原生设置窗口,视口 900×680)中 43 项断言全部通过:导航「通用」可用且为当前页;面板列宽 638、顶层级顺序 group/group/storage/group/group;4 个分组标题;14 行标题与行高逐一匹配;分组标签 638×22 且左内边距 8px;卡片 `12px 16px`/radius 12/白底;标题 14/500/22、描述 14/400/22 三级色;开关 34×20;5 个下拉 120×32;滑块 224×40 且标签 小/默认/大;通知按钮 130×32 且带尾部图标;存储卡标题/说明/76×22 打开目录/530×32 输入框/68×32 更改/填充态样式;用量文案与真实数据目录;进度条 606×4 三段合计 604;分隔线 606×1;11 个占位项全部 `aria-disabled` + 「暂未接入」且点击无效(下拉不弹层、开关不切换);防休眠与开机自启动开关可切换、写入 `config.json` 并可还原;工作空间路径改写真实持久化(含 `workspace.get()` 与 `config.json`);重开设置窗口后偏好与路径仍正确渲染;暗色主题下面板卡片与标题重新着色;无渲染器报错。报告 `.tmp/general-settings-2elYNv/report.json`。
|
||||
回归:`npm run typecheck`、`npm run build`、`npm run test:chat`、`npm run test:conversation`、`npm run test:conversation-ipc`、`node scripts/verify-settings-nav.cjs`、`node scripts/verify-composer-context-info.cjs`、`node scripts/verify-account-menu.cjs` 全部通过。`test:conversation-ipc` 的 electron mock 因新增 `powerSaveBlocker` 依赖而先失败,已在 `scripts/conversation-ipc-regression.ts` 补齐 mock(`powerSaveBlocker`、`app.isPackaged/isReady/getAppPath/getLoginItemSettings/setLoginItemSettings`、`shell.openExternal`)。
|
||||
|
||||
遗留:
|
||||
1. 系统级写入的自动化隔离:验收时以 `YCODE_DISABLE_SYSTEM_INTEGRATION=1` 跳过登录项与系统设置页的真实写入,因此「写入注册表登录项」「打开 ms-settings:notifications」两条系统副作用只在人工路径覆盖,未纳入自动化断言。
|
||||
2. 「更改」按钮会弹出系统目录选择器,无法自动点击;脚本改为断言按钮可用 + 通过 IPC 验证路径持久化,并在重开窗口后断言面板渲染新路径。
|
||||
3. 数据目录路径较长时,缓存目录说明行会像原版一样换行(原版 `.wb-storage__path-text` 无 nowrap);脚本按实际行高换算期望的面板/卡片高度(QA 沙箱路径下为 1415+22=1437)。
|
||||
4. 若后续要把语言/链接打开方式/网络代理/通知提示音等下拉接入,需要先按 REA 采集各下拉的展开态选项列表(当前仅有弹层容器 368 宽的样式规则)。
|
||||
|
||||
### 11. 外观与浅色/深色主题
|
||||
|
||||
@@ -455,7 +482,7 @@
|
||||
## 推进顺序
|
||||
|
||||
1. 对话与侧栏:01 → 02 → 03 → 04 → 05 → 06 → 07 → 08 → 09 → 21(均已实现并留下验收记录,未完成验收点在各条目内标注)。
|
||||
2. 设置:16、17 的入口范围已落实并验证;接着依次推进 10 → 11 → 12 → 13 → 15 → 19。
|
||||
2. 设置:16、17 的入口范围与 10(通用)均已落实并验证;接着依次推进 11 → 12 → 13 → 15 → 19。
|
||||
3. 14、18、20 保留为待拆解,后续单独展开。
|
||||
|
||||
## 每项交付记录模板
|
||||
|
||||
Reference in new issue
Block a user