feat: add credential priority controls and OAuth defaults

This commit is contained in:
lzt404 committed 2026-07-30 01:21:48 +08:00
1 parent 0f3e5093e8
commit bbe22a96eb
13 files changed
+582 -416

No files matched your search

+18 -17
View File
@@ -60,6 +60,7 @@ export const jaOverrides = {
'quota.confirm.warning': '「確認」を押した場合のみ実行されます。「キャンセル」ではリセット回数を消費しません。',
'oauth.title': 'OAuth ログイン',
'oauth.loginSuccess': '{provider} へのログインに成功しました',
'oauth.priorityApplyFailed': 'OAuth ログインは成功しましたが、新しい認証情報の優先度を 0 に設定できませんでした:{error}',
'oauth.authFailed': '認証に失敗しました',
'oauth.loginFailed': '{provider} へのログインに失敗しました{detail}',
'oauth.missingState': 'コアから OAuth state が返されませんでした',
@@ -204,18 +205,10 @@ export const jaOverrides = {
'aliases.created': '{alias} を作成し、推論レベルを {effort} に固定しました',
'aliases.deleteConfirm': 'エイリアスモデル「{alias}」を削除しますか?\n対応する推論レベルの上書きルールも削除されます。',
'aliases.deleted': '{alias} を削除しました',
'aliases.title': '推論エイリアス',
'aliases.intro.title': '元のモデルに固定推論レベルのカスタムエイリアスを追加',
'aliases.intro.description': 'エイリアス名は自由に指定できます。クライアントがエイリアスを使用した場合のみ CPA が選択した推論レベルを注入し、元のモデルを直接使用した場合は名前、設定、動作を変更しません。',
'aliases.intro.badge': '元のモデルには影響しません',
'aliases.flow.aria': '推論エイリアスのワークフロー',
'aliases.flow.original': '元のモデル',
'aliases.flow.direct': '直接呼び出し',
'aliases.flow.directValue': 'deepseek-v4-pro · 変更なし',
'aliases.flow.alias': 'エイリアス呼び出し',
'aliases.flow.aliasValue': 'deepseek-v4-pro-max · max に固定',
'aliases.create.title': '推論エイリアスを作成',
'aliases.create.description': 'Codex OAuth、Codex API、OpenAI 互換接続に対応',
'aliases.modelAlias.title': 'モデルエイリアス',
'aliases.modelAlias.description': 'クライアントが使用する名前を入力し、最終マッピングを確認します',
'aliases.originalModel': '元のモデル',
'aliases.loadingModels': 'モデルを読み込んでいます',
'aliases.searchModel': '元のモデルを検索して選択',
@@ -336,6 +329,13 @@ export const jaOverrides = {
'authFiles.quota.expiry': '最も早い有効期限 {time}',
'authFiles.models.noneForProvider': 'このプロバイダーには設定可能なモデル定義がありません',
'authFiles.models.updated': '{provider} の公開モデルを更新しました',
'authFiles.priority.button': '優先度 {priority}',
'authFiles.priority.title': '認証情報の優先度を変更',
'authFiles.priority.label': '優先度',
'authFiles.priority.placeholder': '例:10 または -1',
'authFiles.priority.hint': '整数のみ指定できます。値が大きいほど優先度が高くなります。空欄または 0 で既定値に戻ります。',
'authFiles.priority.invalid': '有効な整数の優先度を入力してください',
'authFiles.priority.updated': '{name} の優先度を更新しました',
'authFiles.uploaded': '認証ファイルを {count} 件アップロードしました',
'authFiles.uploadFailed': '{count} 件のファイルをアップロードできませんでした:{errors}',
'authFiles.notice.enabled': '認証ファイルを有効にしました',
@@ -345,8 +345,6 @@ export const jaOverrides = {
'authFiles.deleted': '認証ファイルを削除しました',
'authFiles.deleteAllConfirm': 'ディスク上の認証ファイルをすべて削除しますか?実行時認証は削除されません。',
'authFiles.deletedAll': 'ディスク上の認証ファイルをすべて削除しました',
'authFiles.runtimeDownloadError': '実行時認証ファイルにはダウンロード可能なディスクファイルがありません',
'authFiles.downloaded': '認証ファイルをダウンロードしました',
'common.copyFailed': 'コピーに失敗しました',
'authFiles.title': '認証ファイル',
'authFiles.summary': 'ファイル {files} 件 · 無効 {disabled} 件',
@@ -372,7 +370,7 @@ export const jaOverrides = {
'authFiles.models.settings': '公開モデルを設定',
'authFiles.models.button': 'モデル',
'authFiles.copyName': 'ファイル名をコピー',
'common.download': 'ダウンロード',
'authFiles.openDirectory': '認証情報フォルダーを開く',
'common.enable': '有効化',
'common.disable': '無効化',
'authFiles.runtimeFootnote': '{count} 件の認証情報は実行時ストレージ由来です。対応するプロバイダーまたは認証元でのみ管理できます。',
@@ -409,10 +407,6 @@ export const jaOverrides = {
'agents.model.search': 'モデル名またはエイリアスを検索',
'agents.model.clearSearch': '検索を消去',
'agents.model.refresh': 'モデルを更新',
'agents.catalog.update': 'モデル設定情報を更新',
'agents.catalog.updating': 'モデル設定を更新しています',
'agents.catalog.updated': 'GitHub からモデル設定を更新しました',
'agents.catalog.unchanged': 'モデル設定は最新です',
'agents.model.fetching': 'モデルを取得しています',
'agents.model.noMatch': '一致するモデルがありません',
'agents.model.unavailable': '現在利用可能なモデルはありません',
@@ -710,6 +704,13 @@ export const jaOverrides = {
'appUpdate.available': 'バージョン {version} を利用できます',
'appUpdate.check': '更新を確認',
'appUpdate.checking': '確認中',
'appUpdate.catalog.label': 'Codex モデルカタログ',
'appUpdate.catalog.description': '起動時に GitHub から通知なしで自動同期します',
'appUpdate.catalog.update': 'モデルカタログを同期',
'appUpdate.catalog.updateHint': 'GitHub を確認して Codex モデルカタログを更新します',
'appUpdate.catalog.updating': 'モデルカタログを同期しています',
'appUpdate.catalog.updated': 'GitHub からモデルカタログを同期しました',
'appUpdate.catalog.unchanged': 'モデルカタログは最新です',
'appUpdate.installNow': '今すぐ更新',
'appUpdate.openRelease': 'ダウンロードページを開く',
'appUpdate.confirmTitle': 'アプリ更新をインストール',
+36 -34
View File
@@ -63,6 +63,7 @@ export const zhCN = {
'quota.confirm.warning': '只有点击“确定”后才会执行;点击“取消”不会消耗重置机会。',
'oauth.title': 'OAuth 登录',
'oauth.loginSuccess': '{provider} 登录成功',
'oauth.priorityApplyFailed': 'OAuth 登录成功,但无法将新凭证的优先级设为 0:{error}',
'oauth.authFailed': '认证失败',
'oauth.loginFailed': '{provider} 登录失败{detail}',
'oauth.missingState': '内核未返回 OAuth state',
@@ -207,18 +208,10 @@ export const zhCN = {
'aliases.created': '已创建 {alias},思考强度固定为 {effort}',
'aliases.deleteConfirm': '确定删除别名模型“{alias}”吗?\n将同时移除对应的思考强度覆盖规则。',
'aliases.deleted': '已删除 {alias}',
'aliases.title': '思考别名',
'aliases.intro.title': '为原模型新增一个固定思考强度的自定义别名',
'aliases.intro.description': '别名名称由你填写,客户端调用它时 CPA 才会注入所选思考强度;直接调用原模型时,原有名称、配置和行为全部保持不变。',
'aliases.intro.badge': '原模型不受影响',
'aliases.flow.aria': '思考别名工作流程',
'aliases.flow.original': '原模型',
'aliases.flow.direct': '直接调用',
'aliases.flow.directValue': 'deepseek-v4-pro · 保持不变',
'aliases.flow.alias': '别名调用',
'aliases.flow.aliasValue': 'deepseek-v4-pro-max · 固定 max 强度',
'aliases.create.title': '创建思考别名',
'aliases.create.description': '支持 Codex OAuth、Codex API 和 OpenAI 兼容接入',
'aliases.modelAlias.title': '模型别名',
'aliases.modelAlias.description': '填写客户端调用名称并确认最终映射',
'aliases.originalModel': '原模型',
'aliases.loadingModels': '正在读取模型',
'aliases.searchModel': '搜索并选择原模型',
@@ -339,6 +332,13 @@ export const zhCN = {
'authFiles.quota.expiry': '最早过期 {time}',
'authFiles.models.noneForProvider': '该提供商没有可配置的模型定义',
'authFiles.models.updated': '{provider} 开放模型已更新',
'authFiles.priority.button': '优先级 {priority}',
'authFiles.priority.title': '修改凭证优先级',
'authFiles.priority.label': '优先级',
'authFiles.priority.placeholder': '例如 10 或 -1',
'authFiles.priority.hint': '仅支持整数;数值越大优先级越高。留空或填写 0 恢复默认。',
'authFiles.priority.invalid': '请输入有效的整数优先级',
'authFiles.priority.updated': '{name} 的优先级已更新',
'authFiles.uploaded': '已上传 {count} 个认证文件',
'authFiles.uploadFailed': '{count} 个文件上传失败:{errors}',
'authFiles.notice.enabled': '认证文件已启用',
@@ -348,8 +348,6 @@ export const zhCN = {
'authFiles.deleted': '认证文件已删除',
'authFiles.deleteAllConfirm': '确定删除所有磁盘认证文件吗?运行时认证不会被删除。',
'authFiles.deletedAll': '磁盘认证文件已全部删除',
'authFiles.runtimeDownloadError': '运行时认证文件没有可下载的磁盘文件',
'authFiles.downloaded': '认证文件已下载',
'common.copyFailed': '复制失败',
'authFiles.title': '认证文件',
'authFiles.summary': '{files} 个文件 · {disabled} 个停用',
@@ -375,7 +373,7 @@ export const zhCN = {
'authFiles.models.settings': '设置开放模型',
'authFiles.models.button': '模型',
'authFiles.copyName': '复制文件名',
'common.download': '下载',
'authFiles.openDirectory': '打开凭证所在文件夹',
'common.enable': '启用',
'common.disable': '停用',
'authFiles.runtimeFootnote': '{count} 个凭据来自运行时存储,只能在对应提供商或认证源中管理。',
@@ -412,10 +410,6 @@ export const zhCN = {
'agents.model.search': '搜索模型名称或别名',
'agents.model.clearSearch': '清空搜索',
'agents.model.refresh': '刷新模型',
'agents.catalog.update': '更新模型配置信息',
'agents.catalog.updating': '正在更新模型配置',
'agents.catalog.updated': '模型配置已从 GitHub 更新',
'agents.catalog.unchanged': '模型配置已是最新版本',
'agents.model.fetching': '正在获取模型',
'agents.model.noMatch': '没有匹配的模型',
'agents.model.unavailable': '暂时没有可用模型',
@@ -713,6 +707,13 @@ export const zhCN = {
'appUpdate.available': '发现新版本 {version}',
'appUpdate.check': '检查更新',
'appUpdate.checking': '正在检查',
'appUpdate.catalog.label': 'Codex 模型目录',
'appUpdate.catalog.description': '启动时自动从 GitHub 静默同步',
'appUpdate.catalog.update': '同步模型目录',
'appUpdate.catalog.updateHint': '从 GitHub 检查并更新 Codex 模型目录',
'appUpdate.catalog.updating': '正在同步模型目录',
'appUpdate.catalog.updated': '模型目录已从 GitHub 同步',
'appUpdate.catalog.unchanged': '模型目录已是最新版本',
'appUpdate.installNow': '立即升级',
'appUpdate.openRelease': '打开下载页面',
'appUpdate.confirmTitle': '安装软件更新',
@@ -911,6 +912,7 @@ export const en: Record<MessageKey, string> = {
'quota.confirm.warning': 'The reset runs only after you confirm. Canceling will not consume a reset credit.',
'oauth.title': 'OAuth Sign-In',
'oauth.loginSuccess': '{provider} sign-in succeeded',
'oauth.priorityApplyFailed': 'OAuth sign-in succeeded, but the new credential priority could not be set to 0: {error}',
'oauth.authFailed': 'Authentication failed',
'oauth.loginFailed': '{provider} sign-in failed{detail}',
'oauth.missingState': 'The core did not return an OAuth state',
@@ -1055,18 +1057,10 @@ export const en: Record<MessageKey, string> = {
'aliases.created': 'Created {alias} with reasoning effort fixed to {effort}',
'aliases.deleteConfirm': 'Delete the model alias “{alias}”?\nIts reasoning-effort override will also be removed.',
'aliases.deleted': 'Deleted {alias}',
'aliases.title': 'Reasoning Aliases',
'aliases.intro.title': 'Add a custom alias with a fixed reasoning effort to an original model',
'aliases.intro.description': 'Choose the alias name. CPA injects the selected reasoning effort only when a client calls that alias. Calls to the original model keep their existing name, configuration, and behavior.',
'aliases.intro.badge': 'Original model is unchanged',
'aliases.flow.aria': 'Reasoning alias workflow',
'aliases.flow.original': 'Original model',
'aliases.flow.direct': 'Direct call',
'aliases.flow.directValue': 'deepseek-v4-pro · unchanged',
'aliases.flow.alias': 'Alias call',
'aliases.flow.aliasValue': 'deepseek-v4-pro-max · fixed max effort',
'aliases.create.title': 'Create Reasoning Alias',
'aliases.create.description': 'Supports Codex OAuth, Codex API, and OpenAI-compatible connections',
'aliases.modelAlias.title': 'Model Alias',
'aliases.modelAlias.description': 'Enter the client-facing name and confirm the final mapping',
'aliases.originalModel': 'Original Model',
'aliases.loadingModels': 'Loading models',
'aliases.searchModel': 'Search and select an original model',
@@ -1187,6 +1181,13 @@ export const en: Record<MessageKey, string> = {
'authFiles.quota.expiry': 'Earliest expiry {time}',
'authFiles.models.noneForProvider': 'This provider has no configurable model definitions',
'authFiles.models.updated': 'Open models updated for {provider}',
'authFiles.priority.button': 'Priority {priority}',
'authFiles.priority.title': 'Edit Credential Priority',
'authFiles.priority.label': 'Priority',
'authFiles.priority.placeholder': 'For example, 10 or -1',
'authFiles.priority.hint': 'Integers only. Larger values have higher priority. Leave blank or enter 0 to restore the default.',
'authFiles.priority.invalid': 'Enter a valid integer priority',
'authFiles.priority.updated': 'Priority updated for {name}',
'authFiles.uploaded': 'Uploaded {count} authentication files',
'authFiles.uploadFailed': '{count} files failed to upload: {errors}',
'authFiles.notice.enabled': 'Authentication file enabled',
@@ -1196,8 +1197,6 @@ export const en: Record<MessageKey, string> = {
'authFiles.deleted': 'Authentication file deleted',
'authFiles.deleteAllConfirm': 'Delete all on-disk authentication files? Runtime credentials will not be deleted.',
'authFiles.deletedAll': 'All on-disk authentication files deleted',
'authFiles.runtimeDownloadError': 'This runtime authentication file has no downloadable disk file',
'authFiles.downloaded': 'Authentication file downloaded',
'common.copyFailed': 'Copy failed',
'authFiles.title': 'Authentication Files',
'authFiles.summary': '{files} files · {disabled} disabled',
@@ -1223,7 +1222,7 @@ export const en: Record<MessageKey, string> = {
'authFiles.models.settings': 'Configure open models',
'authFiles.models.button': 'Models',
'authFiles.copyName': 'Copy file name',
'common.download': 'Download',
'authFiles.openDirectory': 'Open credential folder',
'common.enable': 'Enable',
'common.disable': 'Disable',
'authFiles.runtimeFootnote': '{count} credentials come from runtime storage and can only be managed through their provider or authentication source.',
@@ -1260,10 +1259,6 @@ export const en: Record<MessageKey, string> = {
'agents.model.search': 'Search model names or aliases',
'agents.model.clearSearch': 'Clear search',
'agents.model.refresh': 'Refresh models',
'agents.catalog.update': 'Update model configuration',
'agents.catalog.updating': 'Updating model configuration',
'agents.catalog.updated': 'Model configuration updated from GitHub',
'agents.catalog.unchanged': 'Model configuration is already up to date',
'agents.model.fetching': 'Fetching models',
'agents.model.noMatch': 'No matching models',
'agents.model.unavailable': 'No models are currently available',
@@ -1561,6 +1556,13 @@ export const en: Record<MessageKey, string> = {
'appUpdate.available': 'Version {version} is available',
'appUpdate.check': 'Check for Updates',
'appUpdate.checking': 'Checking',
'appUpdate.catalog.label': 'Codex Model Catalog',
'appUpdate.catalog.description': 'Silently syncs from GitHub when the app starts',
'appUpdate.catalog.update': 'Sync Model Catalog',
'appUpdate.catalog.updateHint': 'Check GitHub and update the Codex model catalog',
'appUpdate.catalog.updating': 'Syncing Model Catalog',
'appUpdate.catalog.updated': 'Model catalog synced from GitHub',
'appUpdate.catalog.unchanged': 'Model catalog is already up to date',
'appUpdate.installNow': 'Update Now',
'appUpdate.openRelease': 'Open Download Page',
'appUpdate.confirmTitle': 'Install Application Update',