feat(settings): replicate the WorkBuddy personalization panel and wire identity, tone and prompts (TODO 13)
Recover the WorkBuddy 5.8.3 个性化 page from REA evidence (PersonalizationPanel-D16rRGjy.css + tokens): 45 module rules plus scoped light/dark tokens, the five-card 1160px layout (identity card 638x100 with inline editors, reply preference card 638x204, three 638x264 long-text cards with 598x160 previews) and the 640x520 editor modal. Persist identity, tone, welcome tips, custom instructions, persona and long-term memory in config.json, expose personalization:get/update over IPC, and append the resulting personalization context to each turn's prompt for both the OMP and built-in kernels. Wire 欢迎语 to the streaming loading tips and keep 显示文件修改过程 visibly disabled because YCode has no incremental file-change renderer yet. Verify with scripts/verify-personalization-settings.cjs: 29 assertions covering geometry, tone options, switches, inline identity editing with blur-discard, editor modal save/cancel, config persistence, reopen, dark surfaces and no renderer errors. Add a pure prompt-builder regression and keep every existing settings regression green.
This commit is contained in:
1 parent
19460f0b13
commit
0dc088f1f7
54 files changed
+2038
-248
No files matched your search
@@ -408,11 +408,41 @@
|
||||
|
||||
### 13. 个性化页面与真实功能
|
||||
|
||||
- [ ] 拆解原版页面、字段、说明、保存/启停等交互。
|
||||
- [ ] 将支持的个性化配置接入实际运行链路,确认在哪些新建/既有会话中生效。
|
||||
- [ ] 验收:修改与持久化有效;界面显示与实际行为一致;未接能力明确记录,不用占位控件宣称完成。
|
||||
- [x] 拆解原版页面、字段、说明、保存/启停等交互。
|
||||
- [x] 将支持的个性化配置接入实际运行链路(身份/风格/指令/人设/长期记忆随每轮请求发送,欢迎语控制加载提示)。
|
||||
- [x] 验收:修改与持久化有效;界面显示与实际行为一致;「显示文件修改过程」明确标注未接入,不用占位控件宣称完成。
|
||||
|
||||
状态:待 REA 拆解。
|
||||
状态:已实现并通过真实窗口回归(29 项断言)。
|
||||
|
||||
原版证据:
|
||||
- REA `ev_af920edf33af5e811d58f05dad15210b29cd891f28e0fa74f6b18d63212241b1`(WorkBuddy 5.8.3,设置窗口 `6D5A7FEE…`,900×680):浅色顶部 DOM/layout/computed style + 模块样式表 `PersonalizationPanel-D16rRGjy.css`(sha256 `318664f96253adace047d7b1d2d213fbf6139461c10d80ae12135998b7b98f3d`,6,218 字节)。
|
||||
- REA `ev_88af0774005c02e9c75284ade2be45de4943ee5aaf73fe5b13ac8a38b85be786`:深色同页布局与计算样式。
|
||||
- REA `ev_d6e0a2483a3bde901f4cf8299ff03eb0b475cb934921058cf38dd671585ab457`:回复风格下拉展开/关闭、欢迎语与显示文件修改过程开关的切换与恢复。
|
||||
- REA `ev_3086b2b2…` / `ev_e1762bd8…` / `ev_9ee64574…` / `ev_bc120498…` / `ev_7b372850…`:身份字段编辑态、失焦丢弃草稿、非空确认保存、空值无法保存。
|
||||
- REA `ev_523e07353a9fd7a003136f8e07c72d5ba87a05f893dd4b4c4adb2d7ed5a7430f`(指令编辑弹窗 DOM/几何)、`ev_624240fb…`(人设弹窗)、`ev_64e60ac3…`(长期记忆弹窗)。
|
||||
- REA `ev_4f4f76054a930a186199ee28a5f0169f7de48a05a295b8e9eb630c796f07be4a`:最终浅色顶部稳定态。
|
||||
- 页面结构:五张卡片、内容高 1160px。身份卡 `[232,40,638,100]`(两行 `[244,48/98,614,34]`,胶囊 172×34,占位「暂无内容,点击编辑添加」);回复偏好卡 `[232,156,638,204]`(回复风格下拉 120×32、欢迎语开关 34×20 默认开、显示文件修改过程默认关);指令/人设/长期记忆三张长卡 `[232,376/656/936,638,264]`,预览 598×160,编辑按钮 68×32;编辑弹窗 `[130,80,640,520]`,footer 保存/取消 68×32。
|
||||
- 回复风格 8 个选项(标签+说明):默认/不设定特定风格。、专业严谨/清晰、准确、值得信赖。、亲和友善/温暖、平易近人、鼓励支持。、直言不讳/简明扼要、不废话、直击要点。、天马行空/富有想象力、善用比喻类比。、高效务实/最少文字、最大信息量。、毒舌吐槽/犀利吐槽、但绝不伤人。、启发引导/用提问引导思考、授人以渔。
|
||||
- 深色差异:卡片 `#fff → rgb(31,31,31)`,标题 `rgb(0,0,0) → rgb(242,243,245)`,描述黑 50% → 白 50%,开关 on `rgb(0,194,154) → rgb(34,203,168)`、off `rgb(230,230,230) → rgb(60,60,60)`,长预览 `#fff → rgb(38,38,38)`。
|
||||
- 观察范围:桌面端 900×680 浅色 + 深色抽查;未覆盖:富文本编辑器内的真实输入(REA text action 不支持 `.sc-editor-content`)、单条身份值清除(原版空值确认被拒)、主题切换时 `target_changed` 后的连续动画。
|
||||
|
||||
实现:
|
||||
- `scripts/rea/recover-personalization-panel.mjs` → `source-personalization-panel-recovered.css`:45 条模块规则 + 两组主题 token(47 条规则、9,802 字节、sha256 `530b89d5…`),连续重跑一致。
|
||||
- `src/shared/personalization.ts`:8 个风格选项、原版默认人设文本、默认值归一化与 `buildPersonalizationPrompt`(纯函数,可离线回归)。
|
||||
- `src/main/personalization.ts` + `src/main/config.ts`:`config.json.personalization` 持久化(身份、风格、开关、指令、人设、长期记忆)。
|
||||
- `src/main/ipc.ts` / `src/shared/ipc.ts` / `src/preload/index.ts`:`personalization:get/update`;每轮 `promptText` 末尾附加个性化上下文,OMP 与自建循环共用同一段文本。
|
||||
- `PersonalizationSettingsPanel.tsx` + `source-personalization-panel.css`:按原版卡片/行/胶囊/下拉/开关/长预览/弹窗结构复刻;身份行支持 inline 编辑、失焦丢弃草稿、空值确认禁用;长文本用弹窗 + 保存/取消;欢迎语真实控制流式加载提示(`personalization-prefs.ts` + `StreamingFooter`);「显示文件修改过程」保留原版 off 形态,但禁用并标注「暂未接入」。
|
||||
- `SettingsDialog.tsx`:`personalization` 加入 supportedTabs 并渲染面板。
|
||||
|
||||
验证:`scripts/verify-personalization-settings.cjs`(真实隔离 Electron + 原生设置窗口,900×680)29 项断言全部通过:导航启用/选中;面板/身份卡/两行/胶囊/回复偏好卡/三行/下拉/开关/三张长卡/预览/编辑按钮几何;5 组文案与占位;回复风格弹层 240 宽、8 个标签+说明、选择「专业严谨」持久化;欢迎语关→localStorage `0`→开;未接入开关保持禁用;身份 inline 编辑 172×34、确认保存、失焦丢弃草稿;指令弹窗 640×520 + 保存/取消 68×32 + 占位文案,保存后预览与配置一致;人设弹窗带默认文本且取消不改值;`config.json.personalization` 字段正确;重开设置窗口恢复全部值;深色卡片 `rgb(31,31,31)` 与正文 `rgb(242,243,245)`;恢复浅色;无渲染器报错。报告 `.tmp/personalization-settings-V0Vev8/report.json`。
|
||||
回归:`npm run typecheck`、`npm run build`、`npm run test:chat`、`npm run test:conversation`、`npm run test:conversation-ipc`、`npm run test:personalization`、`node scripts/verify-settings-nav.cjs`、`node scripts/verify-shortcuts-settings.cjs`、`node scripts/verify-appearance-settings.cjs`、`node scripts/verify-general-settings.cjs`、`node scripts/verify-desktop-appearance.cjs`、`node scripts/verify-account-menu.cjs` 全部通过。
|
||||
|
||||
遗留:
|
||||
1. 「显示文件修改过程」尚未接入 YCode 的逐步文件变更渲染,保持原版 off 形态并禁用+「暂未接入」提示。
|
||||
2. 编辑弹窗用 textarea 承载纯文本;原版是富文本编辑器(`.sc-editor-content`),富文本格式、粘贴与快捷键未复刻。
|
||||
3. 原版默认人设文本已按 REA 抄录并显示在面板中,但默认值不会注入请求上下文(用户修改后才注入),避免与 YCode 自身身份设定重复冲突。
|
||||
4. 个性化上下文附加在每轮 `promptText` 末尾(与用户消息同一条 prompt 发送),不是独立的 system 消息;OMP 与自建循环行为一致。
|
||||
5. **采集副作用**:REA 采集时把 WorkBuddy「对你的称呼」保存成了 `CodexTmp`;原版界面不接受空值确认(空字符串与单空格均被拒绝),无法通过可见操作恢复为空。该项需要在 WorkBuddy 内另行处理。
|
||||
|
||||
### 14. 记忆与进化
|
||||
|
||||
|
||||
Reference in new issue
Block a user