mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-08 18:37:46 +08:00
feat(frontend): Responses WebSocket 配置与用量展示
provider 表单支持开启 Responses WebSocket;用量列表、状态与详情 区分 WebSocket 请求。
This commit is contained in:
@@ -357,6 +357,19 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-between p-3 border rounded-lg bg-muted/50">
|
||||
<div class="space-y-0.5">
|
||||
<span class="text-sm font-medium">{{ legacyT('Responses WebSocket 模式') }}</span>
|
||||
<p class="text-xs text-muted-foreground leading-relaxed">
|
||||
{{ legacyT('允许此提供商处理标准 Responses API WebSocket 请求。仅在已验证兼容性后启用。') }}
|
||||
</p>
|
||||
</div>
|
||||
<Switch
|
||||
:model-value="form.responses_websocket_enabled"
|
||||
@update:model-value="(v: boolean) => form.responses_websocket_enabled = v"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-between gap-4 p-3 border rounded-lg bg-muted/50">
|
||||
<div class="space-y-0.5">
|
||||
<span class="text-sm font-medium">{{ legacyT('敏感信息保护') }}</span>
|
||||
@@ -481,6 +494,8 @@ const form = ref({
|
||||
codex_fingerprint_convergence_enabled: false,
|
||||
// Kiro 专属配置
|
||||
kiro_simulated_cache_enabled: false,
|
||||
// Responses WebSocket 配置
|
||||
responses_websocket_enabled: false,
|
||||
})
|
||||
|
||||
// 重置表单
|
||||
@@ -513,6 +528,8 @@ function resetForm() {
|
||||
codex_fingerprint_convergence_enabled: false,
|
||||
// Kiro 专属配置
|
||||
kiro_simulated_cache_enabled: false,
|
||||
// Responses WebSocket 配置
|
||||
responses_websocket_enabled: false,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -549,6 +566,8 @@ function loadProviderData() {
|
||||
codex_fingerprint_convergence_enabled: props.provider.codex_fingerprint_convergence_enabled ?? false,
|
||||
// Kiro 专属配置
|
||||
kiro_simulated_cache_enabled: props.provider.kiro_simulated_cache_enabled ?? false,
|
||||
// Responses WebSocket 配置
|
||||
responses_websocket_enabled: props.provider.responses_websocket_enabled ?? false,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -608,6 +627,7 @@ const handleSubmit = async () => {
|
||||
quota_last_reset_at: quotaLastResetAt,
|
||||
quota_expires_at: quotaExpiresAt,
|
||||
keep_priority_on_conversion: form.value.keep_priority_on_conversion,
|
||||
responses_websocket_enabled: form.value.responses_websocket_enabled,
|
||||
is_active: form.value.is_active,
|
||||
// 请求配置
|
||||
max_retries: form.value.max_retries ?? undefined,
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
import { readFileSync } from 'node:fs'
|
||||
import { resolve } from 'node:path'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
function readSource(path: string): string {
|
||||
return readFileSync(resolve(process.cwd(), path), 'utf8')
|
||||
}
|
||||
|
||||
describe('ProviderFormDialog Responses WebSocket switch', () => {
|
||||
it('displays and submits the switch for every provider type', () => {
|
||||
const source = readSource('src/features/providers/components/ProviderFormDialog.vue')
|
||||
|
||||
expect(source).toContain('Responses WebSocket 模式')
|
||||
expect(source).toContain('responses_websocket_enabled')
|
||||
expect(source).toContain('responses_websocket_enabled: form.value.responses_websocket_enabled')
|
||||
expect(source).not.toContain("v-if=\"form.provider_type === 'codex'\"")
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user