feat(settings): 设置界面重构 — 分节化 / 精简 / Beta 渠道 / 麦克风 / 市场登录#521
Merged
Conversation
将 2200 行的 Settings.tsx 单体拆为 pages/settings/ 下的按节文件(通用 / 服务 / 隐私 / 高级 / 关于),并对设置界面做整体精简与功能调整。 界面精简 - 移除各设置项冗长 / 多行描述(在 180px 标签列普遍折成多行),只留标签与控件 - 删除「个性化」独立 tab —— 仅剩字体大小一项、整页太空,并入「关于」 - 移除失效的「毛玻璃强度」滑块(其 CSS 变量无可见元素消费) 关于 / 更新 - 版本卡片图标右上方放「检查更新」按钮,固定查正式版(channel='stable') - 「加入 Beta 渠道」迁到「高级」页底部、单独成节;开启后出现查测试版的检查按钮 - 检查中按钮内转圈;结果(已是最新 / 失败)只在按钮内呈现,卡片高度恒定, 不再因状态文字 reflow 抽搐 - Rust app_check_update_with_channel 新增可选 channel 参数,两个按钮各查各渠道; 后台 AutoUpdateGate 仍按 prefs.update_channel 走 麦克风选择 - 由全屏弹窗改为 SelectLite 下拉(与语言选择一致的「官方框」) - SelectLite 增加 trailing / onOpenChange;新增 MicrophoneSelect —— 选中项右侧 打勾、勾左侧实时音量条 市场登录 - 抽出共用 GithubLoginModal 与 ui/Modal,扩展市场与风格市场登录统一走弹窗 - 修复风格市场登录弹窗「先小后大」尺寸跳动(各阶段固定 minHeight) 弹窗动画 - 去掉开启动画里的 blur 滤镜(卡顿 / 闪烁),改纯 opacity + transform - 设置弹窗切 tab 内容轻微淡入;各处弹窗动画时长 / 缓动统一到 global.css 网络 - 新增 net.rs:进程级共享 reqwest 客户端(连接池复用)+ 传输层失败指数退避重试
PR Reviewer Guide 🔍(Review updated until commit 99f22a6)Here are some key observations to aid the review process:
|
- ProvidersSection: 验证失败时显示 validateFailed 文案,不再对 result.ok=false 误报「连接检查通过」 - ProvidersSection: LLM/ASR 切换失败时下拉框回滚到 committed provider,避免 UI 停在新选项而后端仍是旧 provider;去掉 handler 末尾的 rethrow —— 作为 SelectLite onChange 是即发即忘调用,rethrow 会变成未处理的 promise rejection - CheckUpdateButton: 自动收起计时器只依赖 status,不再因 useAutoUpdate 每次渲染 返回新 updater 对象而被反复 clear/reset - 新增 i18n key settings.providers.validateFailed(zh-CN/zh-TW/en/ja/ko)
|
Persistent review updated to latest commit 7dc1600 |
- send_with_retry 不再重试 is_timeout():reqwest 的 is_timeout 也涵盖「请求已发出、 等响应时超时」,此时服务端可能已收到并在处理,重试 POST/DELETE(marketplace 点赞 / 删除等)会重复执行。只保留 is_connect / is_request 两类「请求未送达服务端」 的重试;net.rs 文档原本宣称超时重试幂等安全 —— 该说法对超时不成立,一并订正 - check_network 改单发、不走 send_with_retry:每 30s 的状态探针走 10 次退避会在 被过滤 / 黑洞网络下把探测拖到近一分钟、状态灯像卡死;瞬时误判由下个 30s 周期 自动纠正。仍用 net::http() 共享连接池
|
Persistent review updated to latest commit 15b4fb1 |
|
Persistent review updated to latest commit 2056ad8 |
types.rs 的 STRUCTURED_BUILTIN_PROMPT「事项数 → 输出形态」规则已重写(原「≤ 2 条」 拆成「仅 1 条 / = 2 条」两档),但 polish.rs 的两个 structured_prompt 测试仍断言旧 文案,CI 的 macOS / Linux cargo test 因此变红(Windows 偶然未跑到同批次)。 同步订正断言: - 「事项 ≤ 2 条」→「事项仅 1 条」+「事项 = 2 条」 - 「不硬塞层级」→「输出连贯段落」(仅 1 条事项 → 连贯段落,语义等价) 本地 cargo test --lib:306 passed / 0 failed。
|
Persistent review updated to latest commit 0689442 |
重构 OAuth 登录为 GithubLoginModal 后,onLoginSuccess / MarketplaceSection onSuccess 用裸 void updatePrefs(...) 写 marketplaceDevLogin,丢掉了重构前 try/catch 里的失败日志 —— prefs 写入失败会冒成未处理的 promise rejection。 补回 .catch + console.warn,与重构前行为一致。
|
Persistent review updated to latest commit 038744f |
上一轮加的回滚无条件把下拉退回 committed provider。但 provider 切换是多步非原子 操作:若 setActiveLlmProvider 已成功、后续 updatePrefs / setCredential 才失败, 后端 active 已是新 provider,回滚下拉到旧的反而让「下拉显示旧 / 后端用新」。 改为记 backendSwitched 标志:仅当后端切换本身没成时才回滚下拉框,让下拉始终与 后端 active 一致。ASR 同理。
|
Persistent review updated to latest commit 74be27d |
LocalModelSection.performSwitch 是 async、try/finally 无 catch,而调用方 (Qwen3 / Foundry / sherpa Toggle、禁用按钮)都是 void performSwitch(...) 即发即忘。setActiveAsrProvider / updatePrefs 失败会冒成未处理的 promise rejection。补 catch + console.error 吞掉。
|
Persistent review updated to latest commit 8986c56 |
|
Persistent review updated to latest commit 00b2bd0 |
处理 PR-Agent 第 8 轮: - ProvidersSection.onAsrProviderChange: asr.endpoint / asr.model 是所有 ASR 厂商 共用的凭据槽,原「仅槽空时填」逻辑使跨厂商切换不生效(dropdown 切了、实际仍 打旧厂商地址)。改为强制覆盖预设默认值,与 onLlmProviderChange 一致。 - net.rs send_with_retry: 重试范围从 is_connect() || is_request() 收窄到只剩 is_connect()。is_request() 多为确定性失败(endpoint 配置错误等),重试 10 次 只是徒增数秒延迟才暴露错误;连接层失败才是真正瞬时、值得重试的一类。
|
Persistent review updated to latest commit 99f22a6 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
User description
概述
将 2200 行的
Settings.tsx单体拆为pages/settings/下的按节文件,并对设置界面做整体精简与多项功能调整。合并目标:beta。改动
界面精简
--ol-glass-blur无可见元素消费)关于 / 更新
channel='stable')卡片高度恒定,不再因状态文字 reflow 抽搐
app_check_update_with_channel新增可选channel参数 —— 两个按钮各查各渠道;后台
AutoUpdateGate不传 channel,仍按prefs.update_channel走麦克风选择
SelectLite下拉(与语言选择一致的「官方框」)SelectLite增加trailing/onOpenChange;新增MicrophoneSelect—— 选中项右侧打勾、勾左侧实时音量条
市场登录
GithubLoginModal与ui/Modal,扩展市场与风格市场登录统一走弹窗minHeight)弹窗动画
blur滤镜(卡顿 / 闪烁),改纯opacity+transformglobal.css网络
net.rs:进程级共享reqwest客户端(连接池复用)+ 传输层失败指数退避重试测试
tsc --noEmit通过vite build通过tauri build(release)通过,macOS.app/.dmg均成功打包PR Type
Enhancement, Bug fix, Tests
Description
拆分设置页为多节结构
重构供应商、麦克风、本地模型
引入共享 HTTP 客户端重试
调整提示词与回归测试
Diagram Walkthrough
File Walkthrough
25 files
Shared client and channel-aware checksAdd shared HTTP client retriesExtract provider settings into sectionRebuild settings modal navigationAdd local ASR model managementExtract recording input settingsShare GitHub login modal componentMove about and update controlsAdd compact microphone selectorExtract debug tools sectionExtract marketplace settings sectionExtract data storage settingsIsolate update check button logicIsolate beta channel controlsAdd shared modal primitiveAlign marketplace page behaviorExtract permissions settings sectionAdd icons for new sectionsExtend lightweight select behaviorRework marketplace modal UXExtract language settings sectionExtract shortcuts settings sectionShare settings row and helpersExpand IPC bindings for settingsRefresh QA panel interactions1 files
Update structured prompt tests3 files
Refine structured prompt instructionsUpdate settings entry destinationsRefine updater dialog and flow4 files
Register networking moduleDefine settings tab compositionWire new settings section routesAdjust app bootstrap wiring5 files
Update Japanese settings stringsUpdate Traditional Chinese stringsUpdate Korean settings stringsUpdate Simplified Chinese stringsUpdate English settings strings1 files
Tweak global motion and layout styles3 files