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 235085 additions and 16299 deletions
@@ -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)