Commit Graph
8 Commits
Author SHA1 Message Date
baiqing 924005fe99 refactor(settings): split provider config tab 2026-04-29 13:41:18 +08:00
baiqing a9e42e5a32 fix(settings): route Aliyun + Whisper ASR drafts through vault, not UserDefaults
The unified-config-tab branch landed first and used UserDefaults as a
temporary bypass because the asr-aliyun-and-custom-whisper branch (which
extended the schema and added vault.asrProviderConfig helpers) hadn't
merged yet. Now both are merged, so route drafts through
vault.asrProviderConfig(for:) / setASRProviderConfig(_:for:) /
removeASRProvider(_:). DictationCoordinator's factory reads from vault,
so this closes the storage mismatch — saving an Aliyun apiKey in
the UI now actually reaches the provider at runtime.
2026-04-29 13:05:59 +08:00
baiqing 22a9885d44 feat(settings): unified 配置 Tab + add new ASR presets
- 合并 LLM Provider Tab 与 ASR Provider Tab 到同一个「配置」页:
  顶部 LLM 模型 chip 行 + 表单,下方 ASR 语音 chip 行 + provider 专属字段,
  底部 borderedProminent .large「保存」按钮统一提交。
- 切 chip 不再立即写盘——所有改动在内存草稿里积攒,点保存才写 vault / UserDefaults
  并 post .openLessCredentialsChanged。
- 火山引擎 3 字段(APP ID / Access Token / Resource ID)从 SettingsHubTab 搬到
  「配置」页 ASR 段;SettingsHubTab 简化为录音快捷键 / 授权 / 隐私 / 关于 + provider 概览。
- 侧边栏顺序调整为 首页 → 历史记录 → 词汇表 → 风格 → 配置 → 设置 → 帮助中心,
  「配置」紧靠「设置」之上。
- ASRProviderRegistry 新增两条预设:
  * aliyun-paraformer (DashScope 流式 paraformer-realtime-v2)
  * custom-openai-whisper (OpenAI 兼容批量 Whisper API)
  这两类 provider 的 chip 与表单已就绪;运行期具体识别由并行分支补齐。
- 删除 LLMProvidersTab.swift / ASRProvidersTab.swift;AddLLMProviderSheet 搬到
  ProvidersConfigTab.swift 同文件。
2026-04-29 13:02:58 +08:00
baiqing 294e53745b feat(asr): Apple Speech provider + ASR switcher tab
- 新增 AppleSpeechASRProvider:包装 SFSpeechRecognizer,on-device 优先,
  partial / final 走标准 ASRStreamingSession 协议,无需 API key
- 新增 ASRProviderRegistry:M1 预设 volcengine / apple-speech
- CredentialsVault 增加 activeASRProviderId / configuredASRProviderIds
- DictationCoordinator.makeASRProvider 改为按 vault.activeASRProviderId 路由
- 新增 ASR Tab(chip 切换 + 主操作「保存」按钮);侧边栏导航新增 .asr
- scripts/build-app.sh Info.plist 加入 NSSpeechRecognitionUsageDescription
- Tests/OpenLessCoreTests 新增 ASRProviderRegistryTests
2026-04-29 12:46:55 +08:00
baiqing 2517df5d2f feat(settings): LLM Providers tab + rewire DictationCoordinator
新增「LLM Provider」侧边栏 Tab:
- 顶部 picker 切换 active provider(含已配置条目 + 一键添加)
- 下方表单编辑 displayName / API Key / Base URL / Model / Temperature
  - 字段编辑后 0.5s debounce 自动写盘并 post `.openLessCredentialsChanged`
  - Base URL 与预设默认值相同时显示「默认」徽标
  - 预设条目展开「怎么获取 API Key?」disclosure,附 docsURL 跳转
- 「+ 添加」sheet 列出 5 家预设 + 自定义 OpenAI 兼容;自定义需填 slug+displayName
- 删除按钮在 active provider 上禁用,必须先切走再删

DictationCoordinator 不再构造 `DoubaoPolishClient`,改成:

    let active = vault.activeLLMProviderId
    guard let cfg = vault.llmProviderConfig(for: active),
          !cfg.apiKey.isEmpty else { return raw }   // 静默插入原文
    let provider = OpenAICompatibleLLMProvider(config: cfg, ...)
    let polished = try await provider.polish(rawText:..., mode:..., hotwords:...)

`SettingsHubTab` 移除硬编码的 Ark 三字段表单,改为只显示当前 active provider
状态并把详细设置指向新 Tab。
2026-04-29 11:54:24 +08:00
baiqing c36ec22618 fix(help): correct GitHub URL + clean up FAQ / link layout
- HelpTab GitHub 链接 baiqing → appergb,老地址 404
- helpLink 不再把整段 URL 当 label(中间截断 + 和标题挤一行),
  改成右侧「打开 ↗」按钮,hover tooltip 显示完整 URL
- helpFAQ Q/A 间距 4 → 8、加 lineSpacing 2、行 padding 9 → 11,
  提升可读性
2026-04-28 13:28:50 +08:00
baiqing cd744d5d9b fix(dictionary): preserve hitCount when editing entry; refresh HelpTab copy
- DictionaryEditorSheet 保存时把原 hitCount 带回去,否则编辑词条会让命中数静默归零
- 帮助中心快速上手 / 常见问题里"火山 ASR"、"润色模式"指向已合并的 Tab,
  改为指向"设置"和"风格"
- 加 1.0.04 release notes(B 系第一个版本,主体是 1697→ 多文件拆分)

Codex rescue 体检发现,发版前修。
2026-04-28 13:20:35 +08:00
baiqing d94be8080d refactor(settings): split 1697-line SettingsView.swift into single-responsibility files
按用户的"800 行红线、单一职责"约束拆分。零行为变化,只是物理文件结构。

- SettingsView.swift  87 (root: 枚举 + 导航模型 + 主分发)
- SettingsComponents.swift  218 (SettingsPage / GlassSection / GlassPanel /
  MetricTile / Notification 名 / polishModeHint / isFilled)
- Sidebar.swift  270 (FixedSidebar + 状态卡 + stats + WindowCanvasBackground)
- Tabs/HomeTab.swift  161
- Tabs/HistoryTab.swift  50
- Tabs/DictionaryTab.swift  349 (含 Chip + ChipFlow + EditorSheet)
- Tabs/StyleTab.swift  123 (含 StyleCard)
- Tabs/HelpTab.swift  100
- Tabs/SettingsHubTab.swift  184
- Tabs/LegacyTabs.swift  172 (Overview/Hotkey/Modes/Privacy 旧版孤儿,原样搬)

private 改成默认 internal 让跨文件可见,封装边界仍止于 OpenLessApp 模块内部。
项目最长文件从 1697 行 → 566 行 (DictationCoordinator),全部在 800 红线下。
2026-04-28 13:13:37 +08:00