将 v1 schema 中 `providers.llm` 从 Ark 专用结构推广为通用 `CredentialsProviderLLMEntry`(containing displayName / temperature / extraHeaders), 为 OpenAI / DeepSeek / DashScope / Moonshot 等多 LLM provider 共用一套字段。 旧 `CredentialsProviderLLMArk` 保留为 typealias,已迁移过的 v1 文件无需再次迁移即可继续解码。 新增公开 API: - `CredentialsVault.activeLLMProviderId` getter/setter - `CredentialsVault.configuredLLMProviderIds` - `CredentialsVault.llmProviderConfig(for:)` - `CredentialsVault.setLLMProviderConfig(_:)` - `CredentialsVault.removeLLMProvider(_:)`,禁删 active provider `OpenLessCore` 新增 `LLMProviderRegistry`,集中维护 5 家 OpenAI 兼容供应商 预设(baseURL / model / 帮助文案 / docs URL),UI 与 vault 兜底逻辑共用。 `PolishOutputCleaner` 从 DoubaoPolishClient 内部提升为独立 public 类型, 让 `OpenAICompatibleLLMProvider` 输出统一过 boilerplate / markdown 栅栏清理。 DoubaoPolishClient.swift 已无调用方,整个文件删除。 Tests: - LLMProviderRegistryTests:5 家预设健康检查 + 唯一性 / URL 合法性 - CredentialsVaultMultiProviderTests:active 默认 / 增删 / 往返 / 老 `ark.*` 账号 key 路由到 active provider
26 lines
966 B
Swift
26 lines
966 B
Swift
import Foundation
|
|
|
|
/// 凭据存储相关错误。
|
|
///
|
|
/// `unparseable` / `futureVersion` 都意味着**不要碰原文件**,让用户自己处理或上报。
|
|
public enum CredentialsError: Error, Sendable, Equatable {
|
|
/// 文件存在但 JSON 解析失败。携带文件 URL,方便给用户显示具体路径。
|
|
case unparseable(URL)
|
|
|
|
/// 文件版本号超过当前代码支持的范围。携带读到的版本号。
|
|
case futureVersion(Int)
|
|
|
|
/// 通用 IO 错误(读 / 创建目录等)。携带可读描述。
|
|
case ioError(String)
|
|
|
|
/// 备份 v0 文件失败。携带备份目标 URL。
|
|
case backupFailed(URL)
|
|
|
|
/// 写入 v1 文件失败。携带目标 URL 和失败描述。
|
|
case writeFailed(URL, String)
|
|
|
|
/// 试图删除当前 active 的 LLM provider。携带 providerId。
|
|
/// 调用方必须先把 active 切到别的 provider 再调 `removeLLMProvider`。
|
|
case cannotRemoveActiveProvider(String)
|
|
}
|