Add OAuth provider runtime and providers UI

This commit is contained in:
lpf
2026-03-11 15:47:49 +08:00
parent d9872c3da7
commit 1c0e463d07
52 changed files with 9772 additions and 901 deletions

View File

@@ -338,6 +338,74 @@ const resources = {
maxToolIterations: 'Max Tool Iterations',
maxTokens: 'Max Tokens',
providers: 'Providers',
providersIntroBefore: 'Select a provider tab, then set auth to ',
providersIntroMiddle: ' or ',
providersIntroAfter: '. The OAuth fields, login link flow, callback paste step, and account list appear in that provider card.',
providersBuiltinCannotDelete: 'The built-in provider "proxy" cannot be deleted.',
providersQwenLabelTitle: 'Qwen Account Label',
providersQwenLabelMessage: 'Qwen OAuth may not return an email. Enter an email or alias to identify this account.',
providersQwenImportLabelMessage: 'Enter an email or alias for this imported Qwen account.',
providersQwenLabelPlaceholder: 'team-qwen-1',
providersQwenLabelRequired: 'Qwen account label is required.',
providersStartingOAuthLogin: 'Starting OAuth login',
providersCompletingOAuthLogin: 'Completing OAuth login',
providersOAuthDeviceTitle: 'OAuth Device Login',
providersOAuthDeviceMessage: 'Open this URL and finish authorization.',
providersOAuthUserCode: 'User code',
providersOAuthLoginTitle: 'OAuth Login',
providersOAuthLoginMessage: 'Open this URL, finish login, then paste the final callback URL.',
providersOAuthCallbackPlaceholder: 'http://localhost:1455/auth/callback?code=...&state=...',
providersOAuthAddedTitle: 'OAuth Added',
providersOAuthAddedMessage: 'Account: {{account}}',
providersOAuthAddedFallback: 'OAuth account added.',
providersAuthJsonImportedTitle: 'auth.json Imported',
providersAuthJsonImportedMessage: 'OAuth auth.json imported.',
providersImportingAuthJson: 'Importing auth.json',
providersRefreshingOAuthAccount: 'Refreshing OAuth account',
providersDeleteOAuthAccountTitle: 'Delete OAuth Account',
providersDeletingOAuthAccount: 'Deleting OAuth account',
providersClearingOAuthCooldown: 'Clearing OAuth cooldown',
providersClearingAPICooldown: 'Clearing API cooldown',
providersClearingHistory: 'Clearing provider history',
providersRefreshRuntime: 'Refresh Runtime',
providersAutoRefresh: 'auto refresh',
providersRuntime1h: 'runtime 1h',
providersRuntime24h: 'runtime 24h',
providersRuntime7d: 'runtime 7d',
providersRuntimeAll: 'runtime all',
providersApiBase: 'API base',
providersApiKey: 'API key',
providersModels: 'models',
providersModelsHelp: 'Comma separated model ids used by this provider.',
providersAuthMode: 'auth mode',
providersAuthModeHelp: 'Choose bearer for API key only, oauth for OAuth only, hybrid to use both.',
providersRuntimePersist: 'runtime persist',
providersRuntimePersistHelp: 'Persist runtime history to disk for this provider.',
providersRuntimeHistoryFile: 'runtime history file',
providersRuntimeHistoryMax: 'runtime history max',
providersSwitchAuthBefore: 'Switch auth mode to ',
providersSwitchAuthMiddle: ' or ',
providersSwitchAuthAfter: ' to choose an OAuth provider and start login.',
providersOAuthSetup: 'OAuth Setup',
providersOAuthProvider: 'oauth provider',
providersOAuthProviderHelp: 'Select the upstream OAuth service to log into.',
providersSelectProvider: 'select provider',
providersClientSecret: 'client secret',
providersClientSecretHelp: 'Only needed by providers that require an explicit client secret.',
providersPriority: 'priority',
providersPriorityHelp: 'In hybrid mode, choose whether API key or OAuth is tried first.',
providersCredentialFiles: 'credential files',
providersCredentialFilesHelp: 'Managed automatically after login; can also be edited manually.',
providersCooldownSec: 'cooldown sec',
providersRefreshScanSec: 'refresh scan sec',
providersRefreshLeadSec: 'refresh lead sec',
providersOAuthGuideBefore: 'Choose an OAuth provider, then click ',
providersOAuthGuideAfter: '. The dialog will show the authorization URL and ask you to paste back the final callback URL for callback-based providers.',
providersOAuthLoginButton: 'OAuth Login',
providersImportAuthJson: 'Import auth.json',
providersOAuthAccounts: 'OAuth Accounts',
providersRefreshList: 'Refresh List',
providersNoOAuthAccounts: 'No imported OAuth accounts yet.',
proxyTimeout: 'Proxy Timeout (sec)',
system: 'System',
enableShellTools: 'Enable Shell Tools',
@@ -700,7 +768,10 @@ const resources = {
dir: 'Directory',
filename: 'Filename',
max_size_mb: 'Max Size (MB)',
retention_days: 'Retention Days'
retention_days: 'Retention Days',
notify_channel: 'Notify Channel',
notify_chat_id: 'Notify Chat ID',
webhook_url: 'Webhook URL'
}
}
},
@@ -1039,6 +1110,74 @@ const resources = {
maxToolIterations: '最大工具迭代次数',
maxTokens: '最大 Token 数',
providers: '提供商',
providersIntroBefore: '先选择一个 provider 标签,再把认证模式切到 ',
providersIntroMiddle: ' 或 ',
providersIntroAfter: '。对应 provider 卡片里会出现 OAuth 字段、登录链接流程、回调地址回填和账号列表。',
providersBuiltinCannotDelete: '内置 provider “proxy” 不能删除。',
providersQwenLabelTitle: 'Qwen 账号标识',
providersQwenLabelMessage: 'Qwen OAuth 可能不会返回邮箱,请输入一个邮箱或别名来标识该账号。',
providersQwenImportLabelMessage: '请为导入的 Qwen 账号输入邮箱或别名。',
providersQwenLabelPlaceholder: 'team-qwen-1',
providersQwenLabelRequired: 'Qwen 账号标识不能为空。',
providersStartingOAuthLogin: '正在发起 OAuth 登录',
providersCompletingOAuthLogin: '正在完成 OAuth 登录',
providersOAuthDeviceTitle: 'OAuth 设备码登录',
providersOAuthDeviceMessage: '打开这个链接并完成授权。',
providersOAuthUserCode: '用户码',
providersOAuthLoginTitle: 'OAuth 登录',
providersOAuthLoginMessage: '打开这个链接完成登录,然后把最终回调 URL 粘贴回来。',
providersOAuthCallbackPlaceholder: 'http://localhost:1455/auth/callback?code=...&state=...',
providersOAuthAddedTitle: 'OAuth 已添加',
providersOAuthAddedMessage: '账号:{{account}}',
providersOAuthAddedFallback: 'OAuth 账号已添加。',
providersAuthJsonImportedTitle: 'auth.json 已导入',
providersAuthJsonImportedMessage: 'OAuth auth.json 已导入。',
providersImportingAuthJson: '正在导入 auth.json',
providersRefreshingOAuthAccount: '正在刷新 OAuth 账号',
providersDeleteOAuthAccountTitle: '删除 OAuth 账号',
providersDeletingOAuthAccount: '正在删除 OAuth 账号',
providersClearingOAuthCooldown: '正在清除 OAuth 冷却',
providersClearingAPICooldown: '正在清除 API 冷却',
providersClearingHistory: '正在清除 provider 历史',
providersRefreshRuntime: '刷新运行态',
providersAutoRefresh: '自动刷新',
providersRuntime1h: '运行态 1h',
providersRuntime24h: '运行态 24h',
providersRuntime7d: '运行态 7d',
providersRuntimeAll: '运行态 全部',
providersApiBase: 'API 基础地址',
providersApiKey: 'API 密钥',
providersModels: '模型列表',
providersModelsHelp: '用逗号分隔这个 provider 要使用的模型 ID。',
providersAuthMode: '认证模式',
providersAuthModeHelp: 'bearer 表示只用 API keyoauth 表示只用 OAuthhybrid 表示两者混用。',
providersRuntimePersist: '运行态持久化',
providersRuntimePersistHelp: '是否把这个 provider 的运行态历史写入磁盘。',
providersRuntimeHistoryFile: '运行态历史文件',
providersRuntimeHistoryMax: '运行态历史上限',
providersSwitchAuthBefore: '先把认证模式切到 ',
providersSwitchAuthMiddle: ' 或 ',
providersSwitchAuthAfter: ',然后才能选择 OAuth 服务商并发起登录。',
providersOAuthSetup: 'OAuth 配置',
providersOAuthProvider: 'OAuth 服务商',
providersOAuthProviderHelp: '选择要登录的上游 OAuth 服务商。',
providersSelectProvider: '选择服务商',
providersClientSecret: 'Client Secret',
providersClientSecretHelp: '只有部分 provider 需要显式填写 client secret。',
providersPriority: '优先级',
providersPriorityHelp: '在 hybrid 模式下,选择先尝试 API key 还是先尝试 OAuth。',
providersCredentialFiles: '凭证文件',
providersCredentialFilesHelp: '登录后会自动维护,也可以手工编辑。',
providersCooldownSec: '冷却秒数',
providersRefreshScanSec: '刷新扫描秒数',
providersRefreshLeadSec: '提前刷新秒数',
providersOAuthGuideBefore: '先选择 OAuth 服务商,然后点击 ',
providersOAuthGuideAfter: '。弹窗里会显示授权链接,并在 callback 型服务商场景下要求你回填最终回调 URL。',
providersOAuthLoginButton: 'OAuth 登录',
providersImportAuthJson: '导入 auth.json',
providersOAuthAccounts: 'OAuth 账号',
providersRefreshList: '刷新列表',
providersNoOAuthAccounts: '当前还没有导入 OAuth 账号。',
proxyTimeout: '代理超时 (秒)',
system: '系统',
enableShellTools: '启用 Shell 工具',
@@ -1401,7 +1540,10 @@ const resources = {
dir: '目录',
filename: '文件名',
max_size_mb: '最大大小MB',
retention_days: '保留天数'
retention_days: '保留天数',
notify_channel: '通知通道',
notify_chat_id: '通知会话 ID',
webhook_url: 'Webhook 地址'
}
}
}