feat: 添加视觉设计语言系统并重构认证页面UI
- 新增 visual_design_language.md 设计规范文档 - 新增 auth 设计 tokens (authBackground, authCard, authInput, feedback 系列等) - 重构登录/注册/验证码/重置密码页面为新设计系统 - 新增 AuthHeroHeader, AuthSurfaceCard, AuthSection, AuthField, PasswordField 组件 - 重构 AppBanner 和 Toast 支持多类型配置 (info/success/warning/error) - 后端 AgentScope: 重整 schemas/prompts/tools 作用域, 新增协议文档 - 更新 AGENTS.md 集成视觉设计语言约束
This commit is contained in:
@@ -6,6 +6,7 @@ from typing import Any
|
||||
from supabase import create_client
|
||||
|
||||
from core.config.settings import SupabaseSettings, config
|
||||
from core.config.settings import config as app_config
|
||||
|
||||
from .service_interface import BaseServiceProvider, register_service_instance
|
||||
|
||||
@@ -20,6 +21,7 @@ class SupabaseService(BaseServiceProvider):
|
||||
async def initialize(self, **_: Any) -> bool:
|
||||
try:
|
||||
self._init_clients()
|
||||
await self._ensure_storage_bucket()
|
||||
self._set_initialized(True)
|
||||
self.logger.info("Supabase service initialized")
|
||||
return True
|
||||
@@ -96,6 +98,47 @@ class SupabaseService(BaseServiceProvider):
|
||||
self._settings.service_role_key,
|
||||
)
|
||||
|
||||
async def _ensure_storage_bucket(self) -> None:
|
||||
bucket_name = app_config.storage.bucket
|
||||
storage = getattr(self._admin_client, "storage", None)
|
||||
if storage is None:
|
||||
self.logger.warning("Storage client unavailable, skipping bucket check")
|
||||
return
|
||||
|
||||
get_bucket = getattr(storage, "get_bucket", None)
|
||||
if not callable(get_bucket):
|
||||
self.logger.warning("Storage get_bucket unavailable, skipping bucket check")
|
||||
return
|
||||
|
||||
def _check_and_create() -> None:
|
||||
try:
|
||||
get_bucket(bucket_name)
|
||||
self.logger.debug("Storage bucket already exists", bucket=bucket_name)
|
||||
except Exception: # noqa: BLE001
|
||||
create_bucket = getattr(storage, "create_bucket", None)
|
||||
if not callable(create_bucket):
|
||||
self.logger.warning(
|
||||
"Storage create_bucket unavailable, skipping bucket creation"
|
||||
)
|
||||
return
|
||||
try:
|
||||
create_bucket(bucket_name, options={"public": False})
|
||||
self.logger.info("Storage bucket created", bucket=bucket_name)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
msg = str(exc).lower()
|
||||
if "already exists" in msg or "duplicate" in msg:
|
||||
self.logger.debug(
|
||||
"Storage bucket already exists (race)", bucket=bucket_name
|
||||
)
|
||||
return
|
||||
self.logger.warning(
|
||||
"Failed to create storage bucket",
|
||||
bucket=bucket_name,
|
||||
error=str(exc),
|
||||
)
|
||||
|
||||
await asyncio.to_thread(_check_and_create)
|
||||
|
||||
|
||||
supabase_service: SupabaseService = register_service_instance(
|
||||
"supabase", SupabaseService()
|
||||
|
||||
Reference in New Issue
Block a user