feat: 扩展 Rust gateway 全功能模块,新增 billing/crypto/wallet crate 及完整数据层

- 新增 aether-billing、aether-crypto、aether-wallet 独立 crate
- aether-data 扩展 repository 层:announcements、auth_modules、billing、
  candidate_selection、gemini_file_mappings、global_models、management_tokens、
  oauth_providers、proxy_nodes、quota、users、wallet 等模块
- aether-gateway 新增 api/auth/billing/control/middleware/scheduler/usage/
  video_tasks/hooks/maintenance/model_fetch/provider_transport 等功能模块
- 重构 executor decision 和 gateway state 为模块目录结构
- 新增 gateway router、frontdoor 路由层及对应测试
- Python 侧 API 路由重构,新增 compat/support 模块
- 前端 Logo 组件更新及 Provider 管理页面调整
This commit is contained in:
fawney19
2026-03-31 19:19:04 +08:00
parent b5a0070023
commit ddf18fed9a
690 changed files with 235087 additions and 16301 deletions

View File

@@ -43,9 +43,9 @@
<!-- Layer 0: Ghost Tracks (Always visible, faint) -->
<g class="ghost-layer">
<path
v-for="(path, index) in linePaths"
:key="`ghost-${index}`"
:d="path"
v-for="line in orderedLines"
:key="`ghost-${line.order}`"
:d="line.path"
class="ghost-path"
fill="none"
:stroke="currentColors.primary"
@@ -67,15 +67,15 @@
<!-- Layer 2: Animated lines -->
<g class="lines-layer">
<path
v-for="(path, index) in linePaths"
:key="`line-${index}`"
:ref="(el) => setPathRef(el as SVGPathElement, index)"
:d="path"
v-for="line in orderedLines"
:key="`line-${line.order}`"
:ref="(el) => setPathRef(el as SVGPathElement, line.order)"
:d="line.path"
class="line-path"
fill="none"
:stroke="currentColors.primary"
:stroke-width="strokeWidth"
:style="getLineStyle(index)"
:style="getLineStyle(line.order)"
stroke-linecap="round"
stroke-linejoin="round"
/>
@@ -86,7 +86,12 @@
<script setup lang="ts">
import { ref, onMounted, onUnmounted, watch, nextTick, computed } from 'vue'
import { AETHER_SVG_VIEWBOX, AETHER_LINE_PATHS, AETHER_FULL_PATH } from '@/constants/logoPaths'
import {
AETHER_SVG_VIEWBOX,
AETHER_ORDERED_LINES,
AETHER_FULL_PATH,
getAetherLineDelayMultiplier
} from '@/constants/logoPaths'
// Animation phases
type AnimationPhase = 'idle' | 'drawOutline' | 'fillFadeIn' | 'hold' | 'fillFadeOut' | 'eraseOutline'
@@ -133,7 +138,7 @@ const emit = defineEmits<{
(e: 'colorChange', colors: ColorScheme): void
}>()
// Constants
const LINE_COUNT = AETHER_LINE_PATHS.length
const LINE_COUNT = AETHER_ORDERED_LINES.length
const DEFAULT_PATH_LENGTH = 3000
// Light mode color schemes
@@ -172,7 +177,7 @@ const DARK_MODE_SCHEMES: ColorScheme[] = [
const gradientId = `aether-gradient-${Math.random().toString(36).slice(2, 9)}`
const viewBox = AETHER_SVG_VIEWBOX
const linePaths = AETHER_LINE_PATHS
const orderedLines = AETHER_ORDERED_LINES
const fullPath = AETHER_FULL_PATH
// Path refs and lengths
@@ -310,9 +315,11 @@ const startAnimation = async () => {
currentPhase.value = 'drawOutline'
emit('phaseChange', 'drawOutline')
for (let i = 0; i < LINE_COUNT; i++) {
lineDrawn.value[i] = true
if (i < LINE_COUNT - 1) await wait(props.lineDelay)
for (const line of orderedLines) {
lineDrawn.value[line.order] = true
if (line.order < LINE_COUNT - 1) {
await wait(Math.round(props.lineDelay * getAetherLineDelayMultiplier(line.order, LINE_COUNT)))
}
}
await wait(props.strokeDuration)
@@ -336,9 +343,11 @@ const startAnimation = async () => {
currentPhase.value = 'eraseOutline'
emit('phaseChange', 'eraseOutline')
for (let i = 0; i < LINE_COUNT; i++) {
lineDrawn.value[i] = false
if (i < LINE_COUNT - 1) await wait(props.lineDelay)
for (const line of [...orderedLines].reverse()) {
lineDrawn.value[line.order] = false
if (line.order > 0) {
await wait(Math.round(props.lineDelay * getAetherLineDelayMultiplier(line.order, LINE_COUNT)))
}
}
await wait(props.strokeDuration)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long