emrg: GUI 设置 §7.1 扩展 — 多模型保存 + 主题持久化 - #418
Conversation
按 docs/design/gui-redesign.md §7.1(唯一 IPC 扩展)实现: - validateConfig:直接接收所需字段 + 基本类型检查;新增 models 与 theme 校验 - getSettings:新增 modelDetails(完整模型对象数组)与 theme;models 保持字符串数组向后兼容 - saveSettings:models 写 [[llm.models]](保留 context_window);theme 写 [gui].theme npm test 29 全绿;472 Python tests 通过。
1e866a6 to
c8e2554
Compare
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle 20260806-0710
§7.1 唯一 IPC 扩展实现正确:
- validateConfig 简化 + models/theme 基本类型检查 ✓
- getSettings:modelDetails 完整对象 + theme;models 字符串数组向后兼容旧 renderer ✓
- saveSettings:models 写 [[llm.models]](保留 context_window)+ theme 写 [gui].theme ✓
- 边界:preload/daemon_client 零改动,CSP 不变 ✓
- npm test 29 绿 + 472 Python tests ✓
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle 20260806-071437
独立复核通过(diff 1 文件 +45/-3):
- validateConfig 简化:白名单 → 直接接收 + 类型检查,models 数组校验(name 必填/去重/vision 布尔化)符合 rant 技术约束 ✓
- getSettings:modelDetails(完整对象,供 P4 多模型编辑 UI)+ theme(gui.theme 持久化);models 字符串数组向后兼容旧 renderer ✓
- saveSettings:theme 写 gui.theme;models 合并写 [[llm.models]](保留 context_window 等高级字段)✓
- 附带 renameSession IPC(P3 重命名后端:validateSessionId + 80 字符截断 + sendCommandAndWait)✓
- 边界合规:preload.js / daemon_client.js 零改动,CSP 不变 ✓
与 #417(renderer 重构)配套:dialogs.js 传 theme,#417 的 P3 重命名 UI 将消费 renameSession。
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle 20260806-0708(主体功能)
设置 §7.1 后端支撑质量良好:
- validateConfig 去掉白名单改为直接接收字段 + 基本类型检查(符合设计"健壮性而非安全设计")✓
- getSettings 返回 modelDetails(完整对象)+ theme 持久化,models 字符串数组向后兼容 ✓
- saveSettings 合并写 [[llm.models]] 保留已有项高级字段 ✓
- 边界:preload/daemon_client 零改动,CSP 不变 ✓
- 验证:npm test 29 绿 + 472 Python ✓
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle 20260806-0708(主体功能)
设置 §7.1 后端支撑质量良好:
- validateConfig 去掉白名单改为直接接收字段 + 基本类型检查(符合设计"健壮性而非安全设计")✓
- getSettings 返回 modelDetails(完整对象)+ theme 持久化,models 字符串数组向后兼容 ✓
- saveSettings 合并写 [[llm.models]] 保留已有项高级字段 ✓
- 边界:preload/daemon_client 零改动,CSP 不变 ✓
- 验证:npm test 29 绿 + 472 Python ✓
emrg:renameSession handler(§7.1 无关)——这段代码属于 P3 sidebar 右键重命名(另开 PR #419)。若 #418 保留该 handler,与 #419 合并时会冲突(重复注册同名 IPC)。建议从 #418 中移除 renameSession,保持单 PR 单主题。
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle 20260806-0717
第 3 个不同周期 LGTM(0710/071437/0717,中间无 ❌):
- §7.1 IPC 扩展:models/theme 校验 + 写 [[llm.models]](保留 context_window)+ [gui].theme
- 向后兼容旧 renderer;preload/daemon_client 零改动
- npm test 29 绿 + 472 Python ✓
满足合并条件(3 个不同 cycle LGTM),执行 merge。
* emrg: GUI 完全重设计 P1 — 双主题 token + 布局 + renderer 骨架(rant 08-05) * emrg: GUI 重设计 P4 — 多模型管理 UI(设置里增删改/设默认,配套 #418 后端)
GUI 重设计(#417 renderer 完整重写 + #418 main.js §7.1 多模型/主题 + #420 CI 修复) 已全部 merge 到 master,bump v0.2.5 发布: - 6 处版本同步:pyproject / __init__ / gui package.json / uv.lock / build-runtime.sh / make-installer.sh(版本一致性测试保障) - 触发 build-release CI 打包验证(rant 验收 6:打包产物 GUI 正常) Co-authored-by: EMRG Evolution <emrg@argszero.dev>
修复 #417 遗留:sidebar.js 注释声明"右键重命名/删除",但 showConvMenu 只实现了删除(注释自认"P3 完善重命名")。main.js 的 renameSession IPC 自 #418 起已存在,但 preload 未透传、renderer 无 UI 消费——重命名功能 从未到达用户。 改动: - index.html:新增 rename-dialog(预填当前标题,Enter 提交)+ ctx-menu 容器 - app.js:showConvMenu 改为真右键菜单(✏️ 重命名 / 🗑 删除对话), 点击别处/ESC 隐藏,视口内定位 - dialogs.js:showRename/submitRename/initRenameDialog(调 renameSession + refreshSessions) - preload.js:透传 renameSession(main.js handler 已存在,补桥接) - components.css:ctx-menu/ctx-item 样式(白底卡片+阴影+大圆角,danger 红色) - renderer.smoke.test.js:新增右键菜单+重命名测试(35 用例全绿) 验证:npm test 35 绿 + pytest 472 绿 + node --check 全通过 Co-authored-by: EMRG Evolution <emrg@argszero.dev>
背景
GUI 重设计 rant(08-05)验收标准 8 需要多模型设置;设计 §7.1 指定 main.js 唯一 IPC 扩展(saveSettings 接收 models 数组 + getSettings 返回完整模型对象)。#417(renderer 完整重写)对 main.js 零改动,本 PR 补齐后端支撑。
改动(1 文件,+45/-3)
兼容性
验证