Skip to content

emrg: GUI 设置 §7.1 扩展 — 多模型保存 + 主题持久化 - #418

Merged
argszero merged 1 commit into
masterfrom
feature/gui-settings-multimodel
Aug 5, 2026
Merged

emrg: GUI 设置 §7.1 扩展 — 多模型保存 + 主题持久化#418
argszero merged 1 commit into
masterfrom
feature/gui-settings-multimodel

Conversation

@argszero

@argszero argszero commented Aug 5, 2026

Copy link
Copy Markdown
Owner

背景

GUI 重设计 rant(08-05)验收标准 8 需要多模型设置;设计 §7.1 指定 main.js 唯一 IPC 扩展(saveSettings 接收 models 数组 + getSettings 返回完整模型对象)。#417(renderer 完整重写)对 main.js 零改动,本 PR 补齐后端支撑。

改动(1 文件,+45/-3)

  • validateConfig:去掉旧白名单硬编码,改为直接接收所需字段 + 基本类型检查;新增 ([{name, model?, vision?}],name 必填,model==name 去重)与 校验
  • getSettings:新增 (完整模型对象数组,含 name/model/vision,供多模型编辑 UI)与 (外观主题持久化); 保持字符串数组 → 向后兼容旧 renderer(下拉显示不回归)
  • saveSettings: 写 (合并保留已有项 context_window 等高级字段); 写

兼容性

验证

  • node --check main.js ✓;validateConfig 逻辑单测(对象数组/去重/过滤)✓
  • npm test 29 全绿;472 Python tests 通过

按 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 通过。
@argszero
argszero force-pushed the feature/gui-settings-multimodel branch from 1e866a6 to c8e2554 Compare August 5, 2026 23:15

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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 argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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 argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260806-0708(主体功能)

设置 §7.1 后端支撑质量良好:

  • validateConfig 去掉白名单改为直接接收字段 + 基本类型检查(符合设计"健壮性而非安全设计")✓
  • getSettings 返回 modelDetails(完整对象)+ theme 持久化,models 字符串数组向后兼容 ✓
  • saveSettings 合并写 [[llm.models]] 保留已有项高级字段 ✓
  • 边界:preload/daemon_client 零改动,CSP 不变 ✓
  • 验证:npm test 29 绿 + 472 Python ✓

⚠️ 一个冲突提示:本 PR diff 中包含了 handler(第 303-311 行附近)——这段代码不属于 §7.1 scope(它来自 P3 sidebar 右键重命名,已另开 PR #419)。若 #418 保留该 handler,与 #419 合并时会冲突(重复注册同名 IPC)。建议从 #418 中移除 renameSession,保持单 PR 单主题。

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260806-0708(主体功能)

设置 §7.1 后端支撑质量良好:

  • validateConfig 去掉白名单改为直接接收字段 + 基本类型检查(符合设计"健壮性而非安全设计")✓
  • getSettings 返回 modelDetails(完整对象)+ theme 持久化,models 字符串数组向后兼容 ✓
  • saveSettings 合并写 [[llm.models]] 保留已有项高级字段 ✓
  • 边界:preload/daemon_client 零改动,CSP 不变 ✓
  • 验证:npm test 29 绿 + 472 Python ✓

⚠️ 一个冲突提示:本 PR diff 中包含了 emrg:renameSession handler(§7.1 无关)——这段代码属于 P3 sidebar 右键重命名(另开 PR #419)。若 #418 保留该 handler,与 #419 合并时会冲突(重复注册同名 IPC)。建议从 #418 中移除 renameSession,保持单 PR 单主题。

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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。

@argszero
argszero merged commit d8d89f2 into master Aug 5, 2026
1 check passed
@argszero
argszero deleted the feature/gui-settings-multimodel branch August 5, 2026 23:20
argszero added a commit that referenced this pull request Aug 5, 2026
* emrg: GUI 完全重设计 P1 — 双主题 token + 布局 + renderer 骨架(rant 08-05)

* emrg: GUI 重设计 P4 — 多模型管理 UI(设置里增删改/设默认,配套 #418 后端)
argszero added a commit that referenced this pull request Aug 5, 2026
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>
argszero added a commit that referenced this pull request Aug 5, 2026
修复 #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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant