refactor: Antigravity/Codex 服务重构为插件化适配器架构

- 将 Antigravity 和 Codex 从独立模块迁移至 src/services/provider/adapters/ 插件体系
- 新增 provider_types 和 oauth_token 模块,移除 maintenance_scheduler 中的 OAuth 定时刷新
- 增强 admin API:扩展 keys 和 provider_query 端点,新增 dashboard 路由
- 大幅增强 ProviderDetailDrawer 组件,新增 AntigravityQuotaDialog
- 改进 handler 基类(chat/cli)和错误分类器
- 优化 fetch_scheduler 和 upstream_fetcher
- 前端 UI 组件清理和优化
- 更新测试以匹配新模块结构
This commit is contained in:
fawney19
2026-02-06 16:37:06 +08:00
parent e01dfee41d
commit b88fb6273b
112 changed files with 5193 additions and 1992 deletions
@@ -31,14 +31,13 @@
<Label>提供商类型</Label>
<Select
v-model="form.provider_type"
v-model:open="providerTypeSelectOpen"
:disabled="isEditMode"
>
<SelectTrigger>
<SelectValue placeholder="请选择" />
</SelectTrigger>
<SelectContent>
<!-- 新建模式:只允许自定义和 Codex -->
<!-- 新建模式:允许自定义、Codex 和 Antigravity -->
<template v-if="!isEditMode">
<SelectItem value="custom">
自定义
@@ -46,6 +45,9 @@
<SelectItem value="codex">
Codex
</SelectItem>
<SelectItem value="antigravity">
Antigravity
</SelectItem>
</template>
<!-- 编辑模式:显示所有类型(兼容已有数据) -->
<template v-else>
@@ -100,7 +102,6 @@
<Label>计费类型</Label>
<Select
v-model="form.billing_type"
v-model:open="billingTypeSelectOpen"
>
<SelectTrigger>
<SelectValue />
@@ -325,6 +326,7 @@ import { parseNumberInput } from '@/utils/form'
const props = defineProps<{
modelValue: boolean
provider?: ProviderWithEndpointsSummary | null // 编辑模式时传入
maxPriority?: number // 当前已有的最大优先级值
}>()
const emit = defineEmits<{
@@ -335,12 +337,18 @@ const emit = defineEmits<{
const { success, error: showError } = useToast()
const loading = ref(false)
const providerTypeSelectOpen = ref(false)
const billingTypeSelectOpen = ref(false)
// 内部状态
const internalOpen = computed(() => props.modelValue)
// 计算新建时的默认优先级
const defaultPriority = computed(() => {
if (props.maxPriority != null) {
return Math.min(props.maxPriority + 10, 10000)
}
return 100
})
// 表单数据
const form = ref({
name: '',
@@ -353,7 +361,7 @@ const form = ref({
quota_reset_day: 30,
quota_last_reset_at: '', // 周期开始时间
quota_expires_at: '',
provider_priority: 999,
provider_priority: 100,
keep_priority_on_conversion: false, // 格式转换时是否保持优先级
// 状态配置
is_active: true,
@@ -383,7 +391,7 @@ function resetForm() {
quota_reset_day: 30,
quota_last_reset_at: '',
quota_expires_at: '',
provider_priority: 999,
provider_priority: defaultPriority.value,
keep_priority_on_conversion: false,
is_active: true,
rate_limit: undefined,