From 3c66c6b05fa8d2868b306e456d1fc07457d464b9 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Tue, 28 Jul 2026 18:43:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor(naming):=20=E7=A7=BB=E9=99=A4=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=B8=AD=E7=9A=84=E7=AC=AC=E4=B8=89=E6=96=B9=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DeepSeekClient → APIClient(含 7 个 mixin,38 个文件) - --claude-* CSS 变量全部替换为新语义 token,删除 _tokens.scss 兼容别名 - build_openai_tools → build_llm_tools - login/register.html 主题 key claude → classic;terminal.html 变量改 --app- 前缀 - 注释中的 Claude 归因描述中性化 - 顺带删除误跟踪的 __pycache__ .pyc 缓存 --- config/api.py | 2 +- .../__pycache__/main_terminal.cpython-312.pyc | Bin 87954 -> 0 bytes core/__pycache__/tool_config.cpython-312.pyc | Bin 1848 -> 0 bytes core/__pycache__/web_terminal.cpython-312.pyc | Bin 23743 -> 0 bytes core/main_terminal.py | 4 +- core/main_terminal_parts/commands.py | 2 +- core/main_terminal_parts/context/base.py | 2 +- .../context/conversation.py | 2 +- core/main_terminal_parts/context/memory.py | 2 +- core/main_terminal_parts/context/messages.py | 2 +- core/main_terminal_parts/context/mode.py | 2 +- core/main_terminal_parts/context/prompt.py | 2 +- .../tools_definition/agent_tools.py | 2 +- .../tools_definition/base.py | 2 +- .../tools_definition/context_tools.py | 2 +- .../tools_definition/core_tools.py | 2 +- .../tools_definition/custom_mcp.py | 4 +- .../tools_definition/file_tools.py | 2 +- .../tools_definition/main.py | 2 +- .../tools_definition/misc_tools.py | 2 +- .../tools_definition/search_web_tools.py | 2 +- .../tools_definition/terminal_tools.py | 2 +- core/main_terminal_parts/tools_execution.py | 4 +- core/main_terminal_parts/tools_policy.py | 2 +- core/main_terminal_parts/tools_read.py | 2 +- .../__pycache__/file_manager.cpython-312.pyc | Bin 32205 -> 0 bytes .../gui_file_manager.cpython-312.pyc | Bin 15228 -> 0 bytes .../memory_manager.cpython-312.pyc | Bin 14568 -> 0 bytes .../persistent_terminal.cpython-312.pyc | Bin 26810 -> 0 bytes .../__pycache__/search_engine.cpython-312.pyc | Bin 16511 -> 0 bytes .../terminal_manager.cpython-312.pyc | Bin 15856 -> 0 bytes .../__pycache__/terminal_ops.cpython-312.pyc | Bin 13066 -> 0 bytes .../__pycache__/todo_manager.cpython-312.pyc | Bin 8409 -> 0 bytes .../__pycache__/user_manager.cpython-312.pyc | Bin 13860 -> 0 bytes .../webpage_extractor.cpython-312.pyc | Bin 5380 -> 0 bytes modules/mcp_client_manager/manager.py | 4 +- modules/shallow_versioning.py | 2 +- modules/sub_agent/task.py | 8 +- modules/sub_agent/toolkit.py | 2 +- server/app_legacy.py | 4 +- server/chat_flow_helpers.py | 4 +- server/conversation.py | 2 +- static/login.html | 4 +- static/register.html | 4 +- static/src/admin/AdminDashboardApp.vue | 48 ++--- static/src/admin/ApiAdminApp.vue | 2 +- static/src/admin/CustomToolsApp.vue | 6 +- static/src/admin/CustomToolsGuideApp.vue | 4 +- static/src/admin/PolicyApp.vue | 6 +- static/src/auth/auth.scss | 24 +-- static/src/components/chat/MinimalBlocks.vue | 40 ++--- .../components/chat/actions/ToolAction.vue | 10 +- .../chat/loaders/BouncingSquaresLoader.vue | 2 +- .../loaders/ChaoticOrbitSquaresLoader.vue | 2 +- .../chat/loaders/DotSpinnerSquaresLoader.vue | 2 +- .../chat/loaders/DualChaseLoader.vue | 2 +- .../chat/loaders/FiveSquaresLoader.vue | 2 +- .../chat/loaders/FollowTrackSquaresLoader.vue | 2 +- .../loaders/FourCornerCycleSquaresLoader.vue | 2 +- .../loaders/JumpingSequenceSquaresLoader.vue | 2 +- .../chat/loaders/LeapFrogSquaresLoader.vue | 2 +- .../loaders/NewtonCradleSquaresLoader.vue | 2 +- .../chat/loaders/NineGridLoader.vue | 2 +- .../chat/loaders/OrbitBlurSquaresLoader.vue | 2 +- .../components/chat/loaders/RippleLoader.vue | 2 +- .../chat/loaders/RotatingSquaresLoader.vue | 2 +- .../loaders/ShadowRollingSquaresLoader.vue | 2 +- .../chat/loaders/SquareGridLoader.vue | 2 +- .../chat/loaders/WaveMatrixSquaresLoader.vue | 2 +- .../components/chat/quickdock/quickdock.css | 4 +- static/src/components/input/FileAtMenu.vue | 12 +- static/src/components/input/InputComposer.vue | 50 +++--- static/src/components/input/QuickMenu.vue | 8 +- .../overlay/ConversationReviewDialog.vue | 60 +++---- .../components/overlay/GoalProgressDialog.vue | 50 +++--- .../overlay/NewUserTutorialPrompt.vue | 4 +- .../overlay/PathAuthorizationDialog.vue | 2 +- .../components/overlay/UserQuestionDialog.vue | 32 ++-- .../components/overlay/VersioningDialog.vue | 82 ++++----- .../src/components/panels/TerminalPanel.vue | 2 +- .../components/panels/ToolApprovalPanel.vue | 10 +- .../personalization/PersonalizationDrawer.vue | 94 +++++----- static/src/styles/base/_global.scss | 8 +- static/src/styles/base/_tokens.scss | 33 +--- .../styles/components/chat/_chat-area.scss | 162 ++++++++--------- static/src/styles/components/drag-upload.scss | 26 +-- .../styles/components/input/_composer.scss | 76 ++++---- .../styles/components/overlays/_overlays.scss | 166 +++++++++--------- .../components/panels/_resource-panel.scss | 90 +++++----- .../components/panels/_right-panel.scss | 88 +++++----- .../components/sidebar/_conversation.scss | 74 ++++---- static/src/styles/layout/_app-shell.scss | 6 +- static/terminal.html | 62 +++---- test/test_api_client_multimodal_sanitize.py | 12 +- test/test_sub_agent_regression.py | 10 +- utils/__pycache__/api_client.cpython-312.pyc | Bin 24563 -> 0 bytes .../context_manager.cpython-312.pyc | Bin 48269 -> 0 bytes .../conversation_manager.cpython-312.pyc | Bin 36332 -> 0 bytes utils/__pycache__/logger.cpython-312.pyc | Bin 6710 -> 0 bytes .../terminal_factory.cpython-312.pyc | Bin 10475 -> 0 bytes utils/api_client.py | 4 +- utils/api_client/__init__.py | 32 ++-- utils/api_client/base_mixin.py | 2 +- utils/api_client/chat_mixin.py | 2 +- utils/api_client/formatting_mixin.py | 2 +- utils/api_client/logging_mixin.py | 2 +- utils/api_client/message_mixin.py | 2 +- utils/api_client/profile_mixin.py | 2 +- utils/api_client/tool_mixin.py | 2 +- 109 files changed, 755 insertions(+), 776 deletions(-) delete mode 100644 core/__pycache__/main_terminal.cpython-312.pyc delete mode 100644 core/__pycache__/tool_config.cpython-312.pyc delete mode 100644 core/__pycache__/web_terminal.cpython-312.pyc delete mode 100644 modules/__pycache__/file_manager.cpython-312.pyc delete mode 100644 modules/__pycache__/gui_file_manager.cpython-312.pyc delete mode 100644 modules/__pycache__/memory_manager.cpython-312.pyc delete mode 100644 modules/__pycache__/persistent_terminal.cpython-312.pyc delete mode 100644 modules/__pycache__/search_engine.cpython-312.pyc delete mode 100644 modules/__pycache__/terminal_manager.cpython-312.pyc delete mode 100644 modules/__pycache__/terminal_ops.cpython-312.pyc delete mode 100644 modules/__pycache__/todo_manager.cpython-312.pyc delete mode 100644 modules/__pycache__/user_manager.cpython-312.pyc delete mode 100644 modules/__pycache__/webpage_extractor.cpython-312.pyc delete mode 100644 utils/__pycache__/api_client.cpython-312.pyc delete mode 100644 utils/__pycache__/context_manager.cpython-312.pyc delete mode 100644 utils/__pycache__/conversation_manager.cpython-312.pyc delete mode 100644 utils/__pycache__/logger.cpython-312.pyc delete mode 100644 utils/__pycache__/terminal_factory.cpython-312.pyc diff --git a/config/api.py b/config/api.py index 6aced9b6..8d8715bd 100644 --- a/config/api.py +++ b/config/api.py @@ -2,7 +2,7 @@ 模型的 API 端点 / 密钥 / 模型 ID 现已统一由 ``config/custom_models.json`` (经 ``config/model_profiles.py`` 解析为模型档案)描述,并在运行时通过 -``DeepSeekClient.apply_profile`` 注入。旧的 ``AGENT_API_BASE_URL`` / +``APIClient.apply_profile`` 注入。旧的 ``AGENT_API_BASE_URL`` / ``AGENT_API_KEY`` / ``AGENT_MODEL_ID``(以及 THINKING / TITLE 三件套)属于早期 把模型逻辑硬编码在程序里的残留,已移除。没有任何可用模型时, ``model_profiles.get_default_model_key`` 会直接报错提示去配置模型。 diff --git a/core/__pycache__/main_terminal.cpython-312.pyc b/core/__pycache__/main_terminal.cpython-312.pyc deleted file mode 100644 index d4ab76a9489907a0df76197b666993725c549e14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87954 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

JxMRW5r`?z5s&hHL36}yswPsF_X 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 diff --git a/core/main_terminal.py b/core/main_terminal.py index f7eadd05..4b3bf3ef 100644 --- a/core/main_terminal.py +++ b/core/main_terminal.py @@ -57,7 +57,7 @@ from modules.mcp_client_manager import MCPClientManager from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.conversation_manager import ConversationManager from utils.host_workspace_debug import write_host_workspace_debug @@ -98,7 +98,7 @@ class MainTerminal(MainTerminalCommandMixin, MainTerminalContextMixin, MainTermi self.usage_tracker = usage_tracker # 初始化组件 - self.api_client = DeepSeekClient(thinking_mode=self.thinking_mode) + self.api_client = APIClient(thinking_mode=self.thinking_mode) self.api_client.project_path = project_path self.model_key = get_default_model_key() self.model_profile = get_model_profile(self.model_key) diff --git a/core/main_terminal_parts/commands.py b/core/main_terminal_parts/commands.py index 694a3ef0..fbb742fa 100644 --- a/core/main_terminal_parts/commands.py +++ b/core/main_terminal_parts/commands.py @@ -71,7 +71,7 @@ except ImportError: from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import ( extract_mcp_content_for_context, diff --git a/core/main_terminal_parts/context/base.py b/core/main_terminal_parts/context/base.py index e6bfd550..003c6e47 100644 --- a/core/main_terminal_parts/context/base.py +++ b/core/main_terminal_parts/context/base.py @@ -70,7 +70,7 @@ from modules.custom_tool_executor import CustomToolExecutor from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER from utils.host_workspace_debug import write_host_workspace_debug from utils.tool_result_formatter import format_tool_result_for_context diff --git a/core/main_terminal_parts/context/conversation.py b/core/main_terminal_parts/context/conversation.py index e3987321..4222ce8b 100644 --- a/core/main_terminal_parts/context/conversation.py +++ b/core/main_terminal_parts/context/conversation.py @@ -70,7 +70,7 @@ from modules.custom_tool_executor import CustomToolExecutor from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER from utils.host_workspace_debug import write_host_workspace_debug from utils.tool_result_formatter import format_tool_result_for_context diff --git a/core/main_terminal_parts/context/memory.py b/core/main_terminal_parts/context/memory.py index 53f8e5b8..3c49e283 100644 --- a/core/main_terminal_parts/context/memory.py +++ b/core/main_terminal_parts/context/memory.py @@ -72,7 +72,7 @@ from modules.custom_tool_executor import CustomToolExecutor from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER from utils.host_workspace_debug import write_host_workspace_debug from utils.tool_result_formatter import format_tool_result_for_context diff --git a/core/main_terminal_parts/context/messages.py b/core/main_terminal_parts/context/messages.py index a0dcdd19..6cc724d8 100644 --- a/core/main_terminal_parts/context/messages.py +++ b/core/main_terminal_parts/context/messages.py @@ -71,7 +71,7 @@ from modules.custom_tool_executor import CustomToolExecutor from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER from utils.host_workspace_debug import write_host_workspace_debug from utils.tool_result_formatter import format_tool_result_for_context diff --git a/core/main_terminal_parts/context/mode.py b/core/main_terminal_parts/context/mode.py index 991d4348..9b3cca92 100644 --- a/core/main_terminal_parts/context/mode.py +++ b/core/main_terminal_parts/context/mode.py @@ -70,7 +70,7 @@ from modules.custom_tool_executor import CustomToolExecutor from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER from utils.host_workspace_debug import write_host_workspace_debug from utils.tool_result_formatter import format_tool_result_for_context diff --git a/core/main_terminal_parts/context/prompt.py b/core/main_terminal_parts/context/prompt.py index 51bb1876..230e234b 100644 --- a/core/main_terminal_parts/context/prompt.py +++ b/core/main_terminal_parts/context/prompt.py @@ -70,7 +70,7 @@ from modules.custom_tool_executor import CustomToolExecutor from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager, AUTO_SHALLOW_PLACEHOLDER from utils.host_workspace_debug import write_host_workspace_debug from utils.tool_result_formatter import format_tool_result_for_context diff --git a/core/main_terminal_parts/tools_definition/agent_tools.py b/core/main_terminal_parts/tools_definition/agent_tools.py index fa6fd91a..b9af9447 100644 --- a/core/main_terminal_parts/tools_definition/agent_tools.py +++ b/core/main_terminal_parts/tools_definition/agent_tools.py @@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/core/main_terminal_parts/tools_definition/base.py b/core/main_terminal_parts/tools_definition/base.py index eb73af18..9b1971d7 100644 --- a/core/main_terminal_parts/tools_definition/base.py +++ b/core/main_terminal_parts/tools_definition/base.py @@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/core/main_terminal_parts/tools_definition/context_tools.py b/core/main_terminal_parts/tools_definition/context_tools.py index 5a395580..0fcb8e07 100644 --- a/core/main_terminal_parts/tools_definition/context_tools.py +++ b/core/main_terminal_parts/tools_definition/context_tools.py @@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/core/main_terminal_parts/tools_definition/core_tools.py b/core/main_terminal_parts/tools_definition/core_tools.py index d24f055c..92715e5d 100644 --- a/core/main_terminal_parts/tools_definition/core_tools.py +++ b/core/main_terminal_parts/tools_definition/core_tools.py @@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/core/main_terminal_parts/tools_definition/custom_mcp.py b/core/main_terminal_parts/tools_definition/custom_mcp.py index 1daf1dcc..157494e6 100644 --- a/core/main_terminal_parts/tools_definition/custom_mcp.py +++ b/core/main_terminal_parts/tools_definition/custom_mcp.py @@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger @@ -193,7 +193,7 @@ class ToolsDefinitionCustomMcpMixin: self.mcp_tool_alias_map = {} return [] try: - tool_defs, alias_map = manager.build_openai_tools( + tool_defs, alias_map = manager.build_llm_tools( ensure_discovery=True, discovery_timeout_seconds=10, ) diff --git a/core/main_terminal_parts/tools_definition/file_tools.py b/core/main_terminal_parts/tools_definition/file_tools.py index fb6ffefb..800bb174 100644 --- a/core/main_terminal_parts/tools_definition/file_tools.py +++ b/core/main_terminal_parts/tools_definition/file_tools.py @@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/core/main_terminal_parts/tools_definition/main.py b/core/main_terminal_parts/tools_definition/main.py index 43a22ad8..c9bfc47e 100644 --- a/core/main_terminal_parts/tools_definition/main.py +++ b/core/main_terminal_parts/tools_definition/main.py @@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/core/main_terminal_parts/tools_definition/misc_tools.py b/core/main_terminal_parts/tools_definition/misc_tools.py index 758880df..d8fb9e3e 100644 --- a/core/main_terminal_parts/tools_definition/misc_tools.py +++ b/core/main_terminal_parts/tools_definition/misc_tools.py @@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/core/main_terminal_parts/tools_definition/search_web_tools.py b/core/main_terminal_parts/tools_definition/search_web_tools.py index f6495a1a..a2ebe6dc 100644 --- a/core/main_terminal_parts/tools_definition/search_web_tools.py +++ b/core/main_terminal_parts/tools_definition/search_web_tools.py @@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/core/main_terminal_parts/tools_definition/terminal_tools.py b/core/main_terminal_parts/tools_definition/terminal_tools.py index 15bd4c4f..4fdce0b5 100644 --- a/core/main_terminal_parts/tools_definition/terminal_tools.py +++ b/core/main_terminal_parts/tools_definition/terminal_tools.py @@ -68,7 +68,7 @@ from modules.mcp_server_registry import MCPServerRegistry, build_default_mcp_cat from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/core/main_terminal_parts/tools_execution.py b/core/main_terminal_parts/tools_execution.py index 16fed75f..ab712825 100644 --- a/core/main_terminal_parts/tools_execution.py +++ b/core/main_terminal_parts/tools_execution.py @@ -95,7 +95,7 @@ from modules.custom_tool_executor import CustomToolExecutor from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger @@ -972,7 +972,7 @@ class MainTerminalToolsExecutionMixin: servers = [item for item in servers if item.get("id") == server_id] # 读取当前 alias 映射(不强制再次发现) - _, alias_map = manager.build_openai_tools(ensure_discovery=False) + _, alias_map = manager.build_llm_tools(ensure_discovery=False) aliases_by_server = {} for alias, binding in (alias_map or {}).items(): sid = getattr(binding, "server_id", "") diff --git a/core/main_terminal_parts/tools_policy.py b/core/main_terminal_parts/tools_policy.py index fd569866..e37a415b 100644 --- a/core/main_terminal_parts/tools_policy.py +++ b/core/main_terminal_parts/tools_policy.py @@ -73,7 +73,7 @@ except ImportError: from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/core/main_terminal_parts/tools_read.py b/core/main_terminal_parts/tools_read.py index a362e0ff..06313f13 100644 --- a/core/main_terminal_parts/tools_read.py +++ b/core/main_terminal_parts/tools_read.py @@ -72,7 +72,7 @@ from modules.custom_tool_executor import CustomToolExecutor from modules.container_monitor import collect_stats, inspect_state from core.tool_config import TOOL_CATEGORIES -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.context_manager import ContextManager from utils.tool_result_formatter import format_tool_result_for_context from utils.logger import setup_logger diff --git a/modules/__pycache__/file_manager.cpython-312.pyc b/modules/__pycache__/file_manager.cpython-312.pyc deleted file mode 100644 index d65580a4434e97bdf410f16da02343c313ffa340..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32205 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 diff --git a/modules/__pycache__/gui_file_manager.cpython-312.pyc b/modules/__pycache__/gui_file_manager.cpython-312.pyc deleted file mode 100644 index 98f4d2ec917ca0edee2b0670167796b009443e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15228 zcmcgTYjhLWnImaN59?)1e!q>)LnPRQM=iTL*%Vq#+uhhp8k}x7F-h9+=$@vhdrl?f94T6QmToal&e`3nal7fEfA;(CXhshU zhqPyV!QZ`eAK#t1_j})~Um1-V6r{n&49?p7De8ClASEVNn0^ilgA_}#3K!KZ=89$o zJS$zwc2%=Vfpsbu-A*^tq)fY*c6GCwlo^+%UE8c}*EQ?fGnzBn_04((#i^9kW{Opx zq*%=br8v)p*mTVX(x!zroz&KB>{Qq?KEoc3Hbq3oI=qe+mqQTXK?@I@*V)cNncnH} z9eSgXBDw~ri`(S(@}0f~ zP&f7J$gTIjJ=y!x)P;+;hkiEo!}q4XbMp4R5 zx&uBgLVG(qpe#6#auI#Ihjq3(Io9s*Ms(Z}FXtBEQzLq(VCPt;*RjvVHNw1FyB#su z?U4+-9me=vST@-0&-fg!Sc}GPXFV-YtrEO^#B8@a+-{H8flDV~t<&v|Fs&|+!^>;o z-6QlqkH$e!Sq;w_@T_O`@ND4J zq>q|4LY;v%kv>M~V}@rFTa|>%%&ECdE(~@jTPI+EcgchHTs9y27sSS>*+QtxOBho`S`x>p*<$FE z|0R7&picq8t>N(dV($&JmO@J*X(>yCyBu1J*dqChDo7t)tD2nyEyXd6xcZgwT+*3o zn;S80_BoMVc8Fx-tA_>p?7QEe>>nuK{MgoVnNz0TIzQF_&B@avzyF|b@~!VpeS7To z`9AFU!KvG?ymafQXK(kO`0VTn=>O?AemeQBGwbF6qC3j!7Wg}GM^(Mw1E5U+aL@~& zodwX*34q^+02>7C=N0bI)%zS?fGw^25q5MS6tKQUI0Wzjsd2iUQ0_Q@t->=dfZiiG z>X45Ec%&U`Isr1(tb_MLcEC%X+8l=*@YE)F+>p6AK+IGNh@YwUdPtW}2W0AM;jpvS zdq-0(9O7JF&Ph?_R7AJWA#iq-5G^rz3ZF?)DBtjJ`X2!dQeNN-F?A^}#L8`w43wH6 zmt=99qyy5lby0SCWEa(@PUsRVw&`ZpNtgw_7nz?VR(_Y~6rGe!*?2U6BYaIceoZ;+ z;e>LKMCIHOkmfcukFONT;Er@S+^kRF_=tw*1dr6mIe!! zhYHpP3f2Y-*7wkTrm)$1>Ui(*khv;gu9`5%X8dNOdWWCt&Da=afRX2q7eC)zv2F<3ZCx>_`O#YMH@<~E2TLbmZ~CJ$3CEB zpO;Ib3M6U&R=HYa_3;Tm~l#--1m-2Kw%PL@RVpOyn7Pj$@V(%SAjg98>02}`( z0>Wd!aUCv43ujY`Yu^MdNql91-LXqMb+jmzw-Or3P#cT~{xVzoYeUxg0qgt``l4yn z6tu1gnrlPmhXUq@E@xjBg63_0?KY8-bgYx-T7U*Rd0fU8Tp%gQ3l@PIWTP%6l6$wR zOEnuK3Cb?jZVLLOVWe&v>eDQ1H^VBr)wAQ}ZSV&488AS))U4uQJ**;>+zM88hU#L@ zP~W9vZwIYMjqsjdhELIF!#B0jjh~@hh%ojR4_H-=PzG+;j8(MY<=P`^!PnaAJYv&` z+tds#WVIr?77(6JG@N-fe0e*L(X@DcZm1EE>4AGNiDJ@V_qmy|g}RDx)Z?&zNFcM4g`yKAY&uT60BA6! zBMjieG#Zg?zKBnjk0K6&2Z%H^Npo~7yOe+vX+0$!qIg9ov@^qb6u z7-K9K$v;bKkLRpfk_p6L17A*(0Sc;9*{P_c9-supVbDW+ChruwZ-8#Y1{^x4$7d+Q^OyCbxxgL6k{ zo^!Af-KHZg9C7+UbP?r%6cAB?gA`G=9uSa^$HUhAu-<%XW$(%tSBLba0e$IkcBrB@P*HnbUyF?<%c+CC2ScW^fT=8K zs_0RL^``!+kY!;2{_7Wpt$DvSTcS$FSaKt$V5n+XHL`yq=fNnY$eJ@gC!C!-xOrgn zQ2nbrzEDBU&AcKc@SHF7;=^BVSc^f$7)w6MD+bkKEV&~rhWEQN&$O|ay0Xl&F;jI_ zt%dT{OlD(&=4y@#%LN1$>ozV>U7fE0*qFp4Ccr>=#0%mOc!WyFBXKJd>2o$70eerj zB@^wv^frb>^)M=}-LN01Ic`4!4&30BB;jCHC#g4SiKgqRr=S7EIo&4nN_?O+rkeqg zo`zSvR;e$H&z8#Z999WcWlHLzB@Tm8X)G#fRvvs(Pz&lVrY%1O1w2A+VVYXH4SnI1 zBx5Xu8PU>BNo^G=74RsHfj7Y2uAJE;{vB^>F2ue=`Z5L8_aho?KNwjxbL7DVsPtH^ zJM%6pB-@0b{6PJ+f(>cYHTrOi#7M}k@s}olG&Fg3#D_u$>TVCe0Cl&AE{g3fi54=_ zE$-Cx;{fhPyVCc<8>LbBv)RV@cB6_$(6t8uKhdbX3rY}xQgjITBBI{Bqg~^2wC`gb z>yFl>$P^d&GIrU7sb1sqv^ZSCIw*((o&zL85r7laWyLRaS9I6(A3gf($A9_wulN3P z@2{TruitxuBFYWsR2}3xdDQI@8pSDSd(;vCW|0$AcUMbsdm;Te&QpU~tvIs#n(Z)PvP> zsB4Y9NvL39pkU$1@?gOO;RTB>8b%FonobvuH$c<5;?u?9@~StC z=Z)b9SHIi-cKc5}L)_sk5U17oj!n(wAecl#-&J?s+)$fbozcVIie(TMAi&( zOmPVX5?tA)kGDvryJB7eG-m*5na09GQ@snKhG%6d1zzrKZ>Vq^0Tc3GO6sQj-0)s$ zG>asSWdB*V9%KHqtTz(1r|ds7jr=1p7h!83F3j!WOQK)|A59hqHl4`uk78HkIO0L` zghx-{Ble7_I~+W)8^%>2s3LF>bJ>cG$d(ax3-4>+C&bvZ#m8e;{vFaY=pWb*mJG5a}V8br|?&jczCwq2)Uw&#w?~bt*_ zUTD5x|CA&V(Or$LSWwj|h8Xs(@%N@i z-}9kWH`(6@E#isM?Vi^~oRjbVShSP~k2Z`dBN~wm1#rPIhHCd5s~2zg zeH|j?Q*XaN`MnoyhPYY4AA^p37lLjCI}vOF5HX{@unF-AqD8>8A4EIg1#D!z9$(7= zB3LA)-iITJBzg%;q?=A~K=c((vRHl>RL)f8h87SZUd~R~W=7y4v2g^)`vHI$$;ufl z87LWgHkefd^2D5Ts=K$l?^&Y5YlD`Re#6RyN>Jcyf|j*@!`ho5c^)2k_?7KFx=+mc zB!K%s(6YpDSaLHfZ^#zNsswEMtW#@y*Y>TyVX5%X*%-9c`3-e9^*KXD*Y#B>ZMOGr zAI=%e>Dm6VVMW-OH}v3jV?|5~g$!i@L)i#D=JgxOCJbw0-Ct_Fg|T93Dzi0YE)ST? zhjWAG1%B-UG2CTJwt3R)=RzVpoT#4_;OB58;AGKngdwDK+MeRF=4nmy98qi zHQ|Z{Bi0dS=vhSiy5TPvSg5%ppnE&EdP9x!N{wz~26LrWyOCk8G7OZ76%f(7xx*w* zm=uyl3L^?`@x3WH4Ass?m3NCKsM1B;)a5D@QWjhMuxLD`W9K*9I zycLinzfWSnA0R+cP2@NK8g?cdjz@KA#J7m&F5)|}@j76V;>I!Y-5tzYlq$YsE*QvT zl<;UQ77sQKGzKxsEXnL;LCbQ#VL4F$(AI!;ZjUysx1L(xyM97nOoX=Nu4zrDjJ?MG z0~6XZh~veCZhp|b(63!63f*j$6TD70xdS2Fa7kn>yGH*z8(GV4137`1g{=8ZAp2Rw zE7)1GcujNzK;+XzGc3Banp3fyV{wHFX0sv|#w{Wn1pxs|p8_ZqVqYs-4L*|NrxnjaxIkGx*-`c=^ zYbWjl!zjU`k`y|RtmNHOIVt!;rqSG?K0l8b0vFq>0{IJ>o56q8jp2m_RZk?t}Gn*jci-8ektqQ9Z zOGI>}!5J4F3Cx}*isF@B!MK)8sFT@T!bf!My$OULd}V>~L8?ID{|P?xF6>S?o$x$i zce>pJ5f(J5;*8G!2p-e&EOx#t&n7nh88Q4Gz~9ERU(MJos2V=>#((;Y)-q5|@|oll;KJE>SH73@_dVU3J>ZfqLWzb2@LC#PAt%oI zICmt5XW+b8=87&QOS8V)%R3^Ji+OG%P{2EG^gT8XE{&oW-z0g}?5Ri%x{O8DA} zrLpl`QrK-}@j9s_jlsvfLy`2fl{U+(wmhc8V2@C~?+c>6og#ltISescTU|1kBz z>!1E?fM=mE&mm|9;KPF+c?!T-{#aAPqS|ukJT?4v@J%xlYzGpMIRFD9SzCpaQyFqT zLQY%wgNS?!0yhE=4zN7tcES-nSI;3NQ5&Ad24gGlAxATC5Z~Uxe;w;|PQlaa;oBWv zDS~qn5fS4bmxSlB7u*?vDc3$m zNUJY5{V{R_H%BJSWr=4pH=*`e@39xV#rt<~uS9Rg<8@oWV!N)lkyuVc(6ZTY*c_#4 z-8RLItepPVp_Y-&6IsjPl-*c0t_&9zpPPSr{ux`p22RXAbi zkBuI?&>gDT6sXx0%x?(g?+oPc4Ce3hn|JxOyWl7uMj)cU+%kisuE04UtW&mXeChaH zf5}5Z%ZAH>-|#T{(a;t2nJ%F0L3{H?VGae$cuwXudD4{8<&Wto9pL-!f+P&l{>7(M%W@gTT<0j%^GZ zOsBT=Zt4HpgrNjPkFJzl9u);z4-H}IQ1;wF_T1stVD_RL*?B|sIm2l~FnjKeqRLRw z1A(Fk#;V?3^!B1)(L~38h&BCV*I(eKRc8)Cy+H~c=ee2UH#koVAdKE zE$lHyRn+5(y^7e=%=-+u)r7q9>gzp__g{Up4I;NnQPzUw+zpeFn>IvHLIpWfKZ&(u zGw_YTb`tHTOlhfE&tW&&i?S5+DYe7HxEl)r$Gyt29wS*9{t%3@mGbBa@E8Q+k^FeH zn)!AF#E>NN`C)w2BEYbo_(4Q^6N*EfCtl^jcoUE2f_M$+c`Tuw!oP^%bp+o>@CJf0 z1pkcS0|ZwQ{40WAAVB3Qz9t@b^5qi1>v6*Wz$c%iKA{^wrz?xpemXA-i%@9u)45Sv z#jG5zoTea)S~N`VaQ;Z;`I0CF#j$16m_;oLX1ijz2_z%rBQ4V;kE-=d!7v-8ARDVB z*?847K1B;NnVjMJC1EN9xY6#lg8_P2*ML!sWX0BbTZJ%eNw?-01yzjBRAg*zVCCQ3{Hett9jB zdQ8llpPI(%=n^xNH_|j#Il3oGL2-Q9W!2@~m$jGHP2*#9j)}Q%1l}65alioCW$QF% z(ei8Z@uNDD`J0~b@7e2r+Tq{h2sG`R#-`}~)_7MaVpqs!bcMR;k}PJo zVpxb$n2-3zc8^z%Ju&+1Gx1()V1s2S>K}%>D%=>Y@>VV5Yx_(I@8034DE)HvE3Nr+BqF%LJGFW6f(D) zLzZ?+$l7iV+1hP7N>4RYyzvE!=ibyy>$STFbk$U#poS6zGMlc)-fq{fpr-;%!0{&R z3R8ErRBH1#<%jMXZL3u04W&?Ncfu^i0jDxcz}~%lA?*R3uq1y^cl|PURPo zUy=9M@1>4CcaSpw2wf5q;W6i_F$wXH;Z%1tU?B z+tU{f_J%upe2nO5Y23Nn-?FV`&trT2+js8TCOX<0TOZD9;kGumHTt*id`v9Z^LX1M zkGJ`^?|H1Hv90w6zQa!KFX7~edHAaE(E}8I=yp9{&g%nofWcSSrRV7v*mjm@UZC0y zJR30bh5*yWz-MIIIi7>Mo;N|=B-hPQH}jSN1J4$qv%<4g^K64>8?1m71u~U^x5F9* za;rmaEreD(U%?kai<7iMAK8_GFNVHCvWA{7fjNtSPNKoxxuDkxEpBzBrOUv3ptTsr zl)#=#VT?;2Uj}txMBgIO))ENy3Ii=2;f{R)VK@0W9ezG2bjl1%-WUxz{-6I1d2cbD zP#2XMl%irfh0VH=CMT)P%I0*yqtX|y$jlZsD0J$qcNiI?{ER}cnS+QuwySek6{<`* zq}PlnP}=V}f`(u2i&5PQA1Q;NjOhn0kW+rO?>2O_OlMLChnH#gv0&%g88vhZ_6v0C zjIeTvGJB>}-nNb!pw8)b`z!*!I?)_B)YlQ_`y&BCGzx)8Z_j~%fZGu4nBmV6nQ%ua zAmIF>Bh(QL`$L3l{Cyz3q9fW7*`L)?6bMK9g@C^+*b|8O1BXDWL6(_Fpr?yWDq8tK zS4V$O)Q^*8o^YZFZpsVk){2JSzGwrmWmwK54WVAXAEs=Omk&u?yQ*(MlC**%`LvnRn5a5sZLe8-~rzVkv=bxz6=+1Yh@IN zL4t3O^f`&wy`|3pHqfY2mLcp``6tt+@Jyrv#sGikru;MUbk&%S;2gV#QJJ30HoOV@t*?W^a1HTw@Evu8%zPyrE+^!M)XM-IO_ zc3w;NA4S-9{`~CAXSL0{eMV8=8xgrs$Nm7oV?>e;6f@C4=8K3$ok9Rqn<5Ix{elY! zd^!QQ6v1!m70MwO+>i}=vpIF4&{W~5XCOO5eP*CcmgAPAmf@`@TTZl$ZoSN{o-a?{wv308E{&da#sSUd(tu0@YbkAk$BXcz6SS2ii zRYiu#HyaH`djg$WY)9jXaO7uD0pm#*)1L-|>CT*~@KSdkJO_@EIUeR=USo&osA8aj ze&Jc(@RspSc?b7ULrjdx$3Zc57BEUcS7*#F9Tio%H>z?GZ$jM)E1JpvEiv6`>NQr` z3E(7GO|6FSb`Z>ky_63A9jlSe8EZfC$!z@e?D_Y!d@`u7_7b)-OMTZ){_4ibch-Av z71r*puMO4L^4{7V>uX!q*S7ZWgc;1{>T2(ev+rI%4g7lc+H=1!OD*62&L=;64kv#9 z2U5%R^T%)e{MfZ4=dYiCRce|2=ND&R{=2L1y#m9{W>I(W7TX`~s=x0Xa(KA2mk);b z?G_CZR`%oT^h$dg)UWsYi~_z+kq-AB6uC%L=t7H3WP1AoVUay31fv0w?Gu9GsDLld z#}XD6YN0MH#erNj5bEmzb{BPB5&WWv*)n(6z+*0VFO-c{KoxlbvLn=tyL6;>#63sp zs_a+n?&Gneu~!aH*_Wp6OH+00C+r(i1smrm+a}!{T~N%#xz8%8f}-J?5jwGN(zXhQ znJSZ2(^lK@=A+HSJ0`7*KBu7xWv1Z!l?g6g=u0`4kJcq?lkPG7*xIqBse;DKT+`=9 zpdzDhMetX?ThzFUzOagITxS#wLLk~NgtLGcL6fk(2$hpy_h%R$AS(|T^EzJt7Oi1i zT}+pc{T0#Z)bkAf%RpKymCJ$yjKqS~RK`>SZ=wp!85O{zsu{tvGK(9K#b471$X*b% zA^lQq~uBOLt6FV4>%|Dg(xqD~N&!|xVWK(i5Ulm)P|p73m!G`z z)Ae4F@)?A?a0r1(2GEfgP1_E228e+#tidjP@8@WVyVgQo)CD5=jumDS9XN~_3No+` zR%YX7ZvR#o9SJ~ogqmYmlj}-h$uK|VT9J0G7;PO}H(9s^KDo_1{>-%7bMnB61Fs$e zZn1ek$Hq@F`^#0k=Tk}#Bdvws|3;!YU9vJ&T%W4nHr_Gbnkw2kX?^I5v*a&xERfuq zM>c-m(@0T2a;&9)Zi31?>?Y&8G*sTl>;h$KTuxswxf^Tg3$-lN|Bvz%0;bF<8ucoy zgJun53HQNsKPpLutu(|6X9@R1zrtLoVukgXZNNXt29+(O}2Hjr?J^GkFAM|9rH_(|m;FHn8QPr!- z0Lp86jixl_!qlRzo9EB&1CyXP;Nrx9< ztm-PktR3l+`c(0%)T+&?q6a3e4^BJXpzLf_h@iW<%ITZ^D}!OS)~jTh`jth-E26n$Z_yKw`3VFL^G|L0taLW@!2*u0#JU??-4 z2H)~CFS@P@^J<7?{v}YkaH<6?Okgq(3kyVFGPnk$ERNLx;b2~l)ev;R1ph4@+n6e9 znzU~Dk{p|bqYB3g+hH@JF%sy+Kw^H+Weu2XXu^Tv28f!Q6oU->5HvhBaV!Q1`@W+5cidL$6TkfiG5= zGdVnFd_OdqqbOe_5uL+D)p%GG<$xsKD(f6uj9Z{{OhepZZlHiCrAFu2iN*WL2k+0m zoS1#-#o4#tosDNyim(i39yEYYSMB}Up#JM#QD+{c;Xy#3bC8A(0o{b%gADq8Kw;J> zA!$}sKV>A?Dr|;9#9ao1UBNIfGTptwu&@m&vP~hMNu#FF z?F1vEUl72^5KZX!MWP*{KG75o9P~q*FaWM!hY*d3)^OlZ)Gy1Cq}tHOK%gK=LW`n~ zKJXf|ZS7H`>(oWxK-Gp;Z%DU#yvWxPi6nF$p zoaeXrwydN+Txr_sqCdRHy|s}3O(6?)(MUi%$mfSiuWWAqkHMr3gdT%QGyzKuOomMW zF9@JY8#}~iUX_FtiS`q+RR#5QNdjAr&~-z1_zNjW8$&4}=}q zmLvB@johP6DLjJNqnJI08L?JLXeggRYt(ygI7b#}4aEtVFY*RtDA0xf6@i|vTrt`_ zdVg}um?`<}_>%FjjPJbkSgPWY6Q-HU8X^utvMyOVwj@=tY1lMlbq)`tt=@R^mzIjW zMuH?2jo!v;>O!@t$wpsT>2BiaiyRAe(YQY_aIjb4MT-Q!L%nAj>VWSKcV_G2wK;p31hRO?AafRl3=5(La~t4s4Wuc5IUb$qFm+K zE@D>a&tS<&5;6##T3jPbKeBkW`txY>OqMpCDJqT|rycH-wiC7ye!@{5XRo@wiINF- z-KUhnwCreeyfGe~w!4lG9UXe*n~9n?mY-ez_bWfLue$0fA88zUCb9Zd|7qJWd&O0H zrg|iBdU>K_wCZeN!nJako-V6=-FM2D*fv_5q*FC(C(7;_CW{rEC>S|-*-lchbA z)<>iWf*NngcyE8cB1KViO_cm#Tnr06zj`h8j;XPde&5|#N?#~tp_)IG@Gk^%Gtu{a zyrIBcUKq`|W_mbY(i7lz0*@i6=cFN8aoJv@hnR2?P^r9=Aq6Vp#(|pxR6wKJ8W|ei zK#u+y%)xeHyU`%XN%>qS-pCu@Qg0BE`$i_-+yhof%#ar-!MW1NMLyTZBFlx9xLg{} zj$#K%86YPPRhiOGJZv1W^Q6?si$gj{`w1M;zMplFW~<#> z8>;2~wL5BCYFmXTVSUl5y?pRgN9X?jKK~%SD#VLU4Qu=59?>XOB5gjsXatW2e4B`{ z7$%aOFo+QJcXkFM5fVrA&XPS`ix1Df{Q7#YWQ(C%lRFdvlw!{Xxz-nn5E7BZF`_|Q zPGm#-;j~yZM4s-C275%dv$tS6Hpuw2lexWlUTI8RDcQDik zJed^^;7=j4jvR@a1e2^y4WavaF5lp)pl5hgE zDQ=nOoKsv`nk$>)ylKumT0F+2IPWC42?L$3kF5YSMaOp?-8JG$luuggC4AYLE?Jc- zZW#UM*t26HC2Z~*es;oHow8OdP?LRNGwL6EbZkqi=)p;AVoLAbh5Aj0A&ly07Qs* zhCq_-Hekbqt@$Blh=I$9a9ZAD0Dz(Lfk{lYAaxMu$!m{+>!pE@d}`Gw@0~-3Osg0N zObcQ!hCBXxa~?O#K-?^vC#41|ERt${?#Ht~`HmJUBvF;(_>v5h3m;dd(N}Ua0*52>I*@b!8(4Uo*}az>(^XWquf3h5-n}q?GD-6B(}tRlAEMI&BU+Kocz| zDKmBBeWskG>|R~PjH|#Cu{|_zE8qM7qPL}5DVar;^#G1<_qL>!|N6HjjsIJ}Eol|` zZGnqxl|s(n{WaXikYMln`PV;r`>b?dNCGt|KwZHA z4;GL`V?2o#jlCqi0Q3^VJ&(1AF~d28Z(;T#WIh|Y!yyr&l>;k9JEFvs1~Up`#JDbT zmeHk_?iSg)gx*jlybQOD{NzzI1tYy(y+Q~kKrb9NkKj#QWiZfQ!U>un%Q;4M0BFj9 z=*Pt)xrg_;{h#3+J;3zf!EjXh;;FKRbXmhx*}dtqdnd~7oA#7WmzGUe)!sC*6$Ntz zUqo@!ZYwm$**Py|EgW8ywk%F?A6a|=a#PM_Y3H&jXFUX+C!7uOty*6^-aNgc;TIdv zZH#Xlu7|Ky!j-lzyRxz&Y5cYAm$or}0s`ABwWH0>xxkA0rj z-&1hCz}LzJ5l)%RKbkA2W5!|CdIvRH+bBorI!el__yQ( ze)px>8azI+B@ax*~}gcTv!r!n4; zxiaTy!sGZD!i*Si1__L;1R&+BI3!{&+8{`{FW^_&(2kV6FLV-!>m~bM1ri}K-hzS1 zV2=5g-CGV)5%~yaz&MKw;w%7E<#(ma@0uuI6W=xCTs-BhO*?BRopo0nC1)x}P3h7# zDbL-hyB|-vo|treW!hbS+tae?%KOGj$1LM(#(T!Uk!pQBRq;f;g~SHy)2{l_P-@eo z6RyYN&3LK?SBV`<(~hN+j%7IuZBMzHCmlOxoMrLdw>x-h8ectLohsTsX>GpZR4uwi z@Ux!3r)e=Y*0>b%i;GQLO!UQN?kx=cA;UslK;eM<(NALG!CU<3<@)`i*^jCVF8f2> z>i0j>-_axW2xuAzhcK(a3@s1IM6babIVeS?A~H|)_V!4Jp*ygLeCDrW4L_H#A2agR zV^}+a8M->cG0eUP**S_}8F8ltJRl+&+D4H=_+~FqH}zI_Ny0N)eRk121=UY0EbODY zxw2w*i!KqJqp(bFnJ4AkN+at^RL@gT%oSzd13$X$ruI^uo#Kz^^JAK(xAo`^ev%kiRyO{tm^0 zeU_b}zFr}^4R4)7)MNmz;`_-TnE3qyB7`6ym9ASzi)|3 zpYbG;BWsdRdyCsBaoT3#EVRLwr6NCoY>w9Hbn^yEXa1P7{DE5Z2g>tDsxD2{&FMK^ zo9>TH>jcyKc~J+WgR4}S|9P&E;+zmrhu)8wf!@Ehu5DUHU#!yXQ41pw!t7#Pa-yyNIBhE zuuWo|r3|qXlS)!1WhbGkyDH9VC$;5tRnO=lGLjYQG~HvcJ#%IX$DT83*UYK8_j`Iz zLVmbir)U1m1HOGD!Wv>R5YfQcP4eIcd5HHyEI+eUD__)E*%M1bn3hG zyY$3OcP8&jCixA!3}7oeja{Z)CYsV<398PNuGC$rU1_`0y3D)GG$o@pQ;hm)iqV{v z@on5?@1+YUS9&4Ec1KI(TO_tbM!8h3jI+=a{5q<5JKj7S^>kFnhw^SF$qJ5LRwyOQ zWfe+s$vc+ap7sfv&6kepSb2MD26_`;rqCnOi`#nsFg5tY1JptJ!_)!VslA59H9F~t z;=WejKBpq0-qG!A_qba-BkGN?_J6#b)U3;4^qG)LM`XHs6Y4y2$?OiT#D;d}K zdt6R=#IWOm=KCIKZmHj~bNl+{rii(D)6VT%8`n3qL?a$rzqL7H5kt2&V(RVdzuU5L z%le&7*KknV;=7g{_1suNR*s9p)dDMp-X+(-obo?R2_ttY7zO+(;ZNmKGD$8KqjstG z=o!t^%3Vo})}`JfV{}g|c4-*>)6_04lMJSgF}M^EZiH|>V}g+6Xh;f#7$BDlVpG9w zWYVBSEu>a3X7HPsQYIbh%7DL2SBfhYXLXN?u|REUkWL7ZF;+-zW}HkGq_nxzOtvc( z;?wu289SuSV9KH)SaJ@8WHRMUu2`1?LM)_S8IuPkSxH|(pxVP<=5(BzrtU%7n#r?Z1kUHd-u6IJ6qa3U0tni zCX%|F^|Uf=tzKVC8!VUIt!?`w#;(?bExUX6>~XOz-u6CMM9;K)yE|KZiLXt72{^&> z=--XqunSL6e%ep9U^w~wGFIoq6j7hBXWVJA&<=$VAG3vB2xY}`%fTn6^((-q6ms~L z;8Te{75Kz9GT0)u5XZ>CrxAS^M_?a@?4`h`6XJ+ZFZdX&U0Bfo&%kF8;(WP+E3Vxp zA&jI=5q(%=>O5bX=)*plMIW{_UG!m%8G=u;#!MlW!O^e?K3}ci>R2MUVs>1MaZQnr zj99kl!*sQDBcILTHXI~kIvaY;5cKM?h9&+t&^0e)D z`4Y=X*tx45v!@QtymjWvCoj!B`}3K>kH9@Mer#UV@p~K64}W&$t!T1qBSSL-zZ4TU z*0YFeBUJmS5iI3_c6aS!XAz5QoyCnBk+&USSX}HZuJMRQ>=ldan#JWDN$O@jZ2+Aj z+IDXX+v9cvV2WtHzE;-Pf=DTn?CJ4!_xPd!C}NC4s+N5K1U+nTB*o|PwRW~dQxW)N z^g%&wfYq3m&UUxU%iO|ldO-ou}Bq8l?Y{l&X zu7kcvs;h0Er=`>5>26_MK35ym9I--)Zm+AY$JhRZtA!-!YW214b75CKV)KnHF;5Fj zS40U2xW^Sy-cKxjv>|+8GV5w(01Er|p@SbXaNv*`VEEdx1FdaXVMI?FEr4|eKa?bl zBxv{bM&#aJZ$u4%+_%TWc9GIx4jIn@uQMs4@VYwp@N+57AdA2$Hg{fxs?nWytGde5 z?W=0t3q#49-l{GS)6?nlR&|RQs|DIeP*!DkZ$#Y!4Q}_fwDj3-$7z*9B*GzYCT#LU z)LbcLcMd2f)z(YZt4}Q%)lJ$eer^7p<#WrgvM|^ZwwIxu6}FZSCl}ZEeOtW@cDA{_zZdZXy=4;NqF{DPQl5&7-9<-6{DRWb`+v* z59b!3ogEf(=9i#9H|!)WDW1y8JqaODS2W>G6=lyqeecMk;|3*n7PL7o%V48j!Fd@yT)N)vd1X?; z7o*jXjuYn%<{+L{!&by-HSv@wb*6;bT^wtZ;5wHk%rBIbC4^${q-eMnk#ducmpX9@ zy{8x28PEDw3-xy3VoCTIv(Q3P!n%ZL@G|KPeJ(@T(Et(tz2#;8RpnXcweLH(x36R4 z?P0M|Av2mUq=0dipikKcA$+rtCT25M2;UO(3ohSX?rF#^0c#-CA(RxeJMN9S1((nZ zChL?4QDOYI3-P{2!Nu6{?0b@8vZY&ml6p-Z8^>N#0p+_-$O~MS(tep_srG28Ieyvv z63EFyD1dsHVp95LPs(~}-abH!T#ekGGDtQv^ghtb{K59>g_Bptjw1d0@#)Lwfuw!< z%Fwe{KKap=(Wig}uJ21~>tZTh2Z4-g+Onykp-)q_yWL&2yVbkzma@mUXVHp?>Ar`X zx9n)#x?@x0#vOHA8#hOk%a&GG*F+Q>w`{zRP_{q?DZM_Rt|BV1fDj|Li)C5t5yaui zIg$h?V?uSxUG69P3nxmzA+s(hfi9%@!JtcTiE4I5k5 zH#9UivbYX_^`ZijcdyHLg&&aVb$!~leQn(i(kO^F9%uzx2?(_)X$r)3r}s)N`GV^r zCV{eQA*8d50oG4a^hm>#;G3Xe7NHA-_p~9&-Gcz@J-Y=GUwNOW+vNt< z)YkhpMO01Ab-+skD%8jFEkwY@BIb(7-JSz1!fUn=jUqIP(I`Qq6b*!<5e-iWBmJvt z=4oPm3zEjsL1HU0m5OO~bwR6OGT~IgkAc$L>2h@=W5mq}%nugvLPXit>1t(J2e?@T zwuA@{G5oI?Egf@%hRYbGtV4I6D*qm~9Ii^Mk5TRXOq`ZJOW>;X~ZZP^R z5>zf}(L)gH{Q^j-L)5g+cx>H~b>TG2oZ>-RW1Tjp9sA*tA5IrJLq*HEqU94sb>~+O zDZVo01EpA8CIq&8viQQP4_94S`{CLzO9D-g2UoWYDJD(%KrW`GpC~(CcB1NdRWP++ zU}Ly=(ZI%lDWB692xaFK4atYCTbPlWz2c3rh#;CiQvYf)cbH;esOGE-pvAAiSs& z?J^{``P_MBp}ZO{ujaftv~nA_a@%Cyy_g~=Tv{5wO#ZHT{Md#B=?7FyEk~g0- z<%dkAoT+ruR0anLoXKcSPab&^lAJIcHw1EP;7Ae5t>$v8rwWQkeW8-&T*>la!3sE0 zgzQzEy(*mTIK5+JM<{zKm%TKYz5KdHxg_-_rA$e?X`qr*Uw(XaE0Mk~i zHa*B~dN5G;P$2cYllq6lX_?<%Hd?-+^ zbNKN~v;2832~ytjB5``GA*-Q``a_v!yG{Ow+MMkf@_)=wf_vWS1i5wObYg*pzu@WQ z*MNy2KJjBeSm?|mg)2Lf67y3cz1L6sX?88tB60y^Y5lZ-?fT)Y(}5d4;p-5o>sW+e zCgdWtka&)ePT^iI-NO!%?u_LVF!@vJ`FzV>+9z@bJ48w|mXC?U+E808LUgeP=~l4x z;4gaNgorqm|xk0XlrKZ zg_&dHS3bHxaQ>^n+`IDeyI0@;c;?uTu738?%yS3IaWAn=J7%)XD%Hxe`T(mPPd+T^!THp^kOc(IGA1Qxm^YIDF zCvr#pv`7Yc#Ii=7BXd}W+^2H!j69xNIgitqvYm8t93CW18L*V4LyMeNCx4GCyF_n_6Y(gvoF-Epd zB=rGzJMN)6;@yPgX2h`G=VRM<_xN1IFYFEl2q;@48kZZ=1E~i*OVK%hhjc<^eR)zl zWZr(|Aer|?Fb+|$O7$5-%&Co&ItQSc4`f#lX{NJ_ zaLL+-)N?X`3gtP^hZo&s8iA*6vrZHox4j zKrtS&mSN>NVs#5HaUF^$-T)=Lk|+1Jn6$j^s8?SvPh<~e**@aQVM zY>pU3ZUPT@-jTESV-Y_@;~6j-of-UTS=HJNM|y@Fmm~5{mzx}~`D1$lrp^Z=Vrt=& zp{$EY+d%B+>F#vx@eyef#0wI;sF;tf#k>bFFPz%h_HO?8Pfq?g1%xFK$%;zb;ssww zfOU2IVn=ttXyjmy-De-e5)F95cY|<{?_4BV@DmZA7eN(LT~V^j4c@+dDWo!=)cdcH z&ifgV7$B%pQJUnCI*U_hh17YRI&ZXiQtb?@^&xf6ggWP~g3mUHSwU#WAZfJkdU z+P!)b>gBTEu0>0bj_N&l&TBx`I(=LRUr(vALW+H>5A&^d*yeC)5WA zTU{Qf%fo_KaD^)-bSp@@JWihn2WCi-!;7iFmE|~{Gm)B| zykbpgMZ?63hG9j>Qo&g&LYBpxW$~nCNnmI5K=LJ>b);+DaBY*@V7qtd-MO z{U?3dbo4}i$!HIkRpEiRB&;)rbWTp^9J_x)S2?~URJ(bic5~R6I@BCWcXIG+#3*BB zxU7<7hz?r`jM$iJQe8#5b!_dCwNTr!#>0&PTLs{1o_`Uxq&|#!~Xz`Zk&@- z`Yd)8%%k*4b%0Qjuw@}d;s>F)brL=Ty5E5~31H8jk`9+TtunEbC`cLra3<7)-WbS; z0i-@a8Gy3I)Fdx}x5ST;MUihDnwCPT1ObRhCRR#^#3@%mCIl$Pl8UZ7j2NCqrACY% ze6?53|2P#r2-If>emeW3cSUuE%OAge`NC^(KAbr<#%n9gJo^lRYy<>0I@LU153wu{ zzvKXi*rVvpLj$1|`#cy<8GkYZ0=LWagp2Xw>^1#tHjNP&a|FlK`l<9!`c6PRF3 z3mFPILm@J2R&yn*Ck(4EDnj4cIq{vH;f$Ota?VsfX<9U=gJYL; zrIX*;88EC45R+f?@#`0fA^f`m2NNJJ=X2`etRus-4iFhpq6t!ppD^zo;#v};Vq6zF zIUNBB0;GZBPNn$ePf%WZFoWn#i3I_&Q{ZWdT?}my$u%(=v_%CX&Fg>^cW4QtViZ|a zztRtyhED+Zd44^;3jW8b?!o0T`{tq9UmTqset%}@C$PeD}S=w9WcJ?VBdAQ2`SfA#;R<9Ry zikMY>nr^`vQEoy_jvge1dHtXsqzA6P{{df3b7O?oUi;sF`O9D6h%^i_>fK%Bqbi zUn}eNV$%>u3R_|b{C$h0wgj&bBY~oeaC2bWfK>r}L{M+AeWNfsv;lSYTs~#VIpII< zf9c6kW;vHx9?V=cpbux3BR?_|Hij|dSpVVvqdy$2Knze!c%%iFOc}_9%)G9r^r^$e z$hZcsMOIbVntM8XB>QB}m~2cQuvQFg3mdHg`%=!hlw|$NQ~;pgv}{gE*{TPY-HrjE zq5N(@dB8$PttKF@K=GDEs^=Y=jIkFp@?=CL6Z9#&K}W+SX#Rk*54+#R_LWHunsnNF z95Fl-9iqslM;sVXJ4u5hD!#mVXG8_0CENIAa6Ct!pbpcA@)^1V+m-M!vZogi{?>`x zR@hWc01%|g7@+sijQnY!&83i`R5?xsFaMf{aIwWm|J^7C<6ep;L;e`-0A$uO6bj#d zM4zB(YEY-3dg*uNp!h6fpM&7WcK~olWR=wsMZ3?{6%Vv;Y1V*llIvhMyS8tw)R2S7 zDoPN7S}U+FqVrR^rqctOu->(mV*Yz^8W4qCrM^8xO=N8x^$jl>rC(dlWo`Ud!nFGv zV+t+ZC8RE1p~X(6#&_zl4Cw`cc6#V09oJ1WbW=vUDd&+H=_`wn7Q{~Hz+&G;V+@R_ z;OP+0Gkgz1{=MC8!0tMrpl|v9W;Bg1xmbAd`=6J5Ss&c6bI3Qm{*?n1e1P`v@c?5Szy@v%KwTv+KMeiwiQfASeG)eHVjg) z<;QV8#(bfw4P4cR$*hgRw2cA%#;`Hv*nz_bf*DO?OG4#qx$?D>8BIZBQ$XFs?;|a* z4(RLccE!#+ZMc(!577zPRTWS#fCKpa@1VvcocwlCapm7w9GBgNj#xu>?pJRY{B28eH4??6giI#8@ZN#qQS(rbVaVRnIBRmdT;2ksp)NH(lOB%pQAy^S53)-*@KMy~FfOt%n)dE_r9-tDoX-my z*96pS_+6S5)of+AV{?;`rvXivw@q;qkZpP%h?Rwgl+{ab39kus>5xH$6O-^U@>B9A zxUmAU611l<@W}K!l;jh)V!zz2*HAv4P?%q2O#)buGs^w2wOARW1i6~X*pkvc6w3!~ z#*Q?hw3rPnJ{VT~`r+n-6hl#pk?2?X5aE!o1Ie6(PpI`ytUe~`RGb9RkM}Obb0IlF zh%7x4C-(C0`U|C{3XLMAiG3$G97M(`^toI}7qfw3sA5!o5CHMG#1p=AnivBZQsAOY z_}HZoz9=COyvQPyS|vh#ch@^c7thLrnXQtjNt{`fRk;;FC6FHVC&5}w>Zp;(p%>S} z0z{eAZ8a$kLBCokiJa#p(12t~t8Z_Uu#%u089M=EchBu<{PJ@qp}v05rtDZJkwzh= z(E7D7BHDfp$d7fgdnbO4kixe?$WPFq-mi&;=qPdm)PUBR&adg%B&3YlLW}$LzRg0Y zKQ^+-OlrTupX|+pb|S@^@Ue0xt>55wK&&Gn3cL_&hS(G)9ZckVNR=RCGWrcnCSzf& zOcrBfvQH`djecXt*4xYT8yLF)*85F<9h>YoF*&i`f_7i-YjWiF^qWw>ReI(6HGY%d z;MXyZQ%OMVFPM(WWAd2-fRrR1NFen>i(=Z&L;?u{*my|zFf}9_{DB~kgnWqb$p_NP zVj6R>rY_{WBQE#6k#o) zo&`Cb#^2Z-v{`3`|n#3HWn3-emU;W!pAZ*PeSGZaVdBfwH4zKs=cOC^b5;@4hLr zfIu7d^7%uv@4n5mXP{JGKlSp*&qEr1{Cg0D@eCw!0zpp&;^9UY+_K`c-ri{F`^=Hk z{7}R-i0_No)61Ve%Qx%FkB(pdc)^nELBe3(_KB*nlAREtMO9X! z=z|mrdj<_17!l>3P7i2&YMS9N$g3!5AB6k1yqi}fRk6H$Di<@6(+X02M9{?UK^LNB z!j9ubSVib9L8BCnK{SxwVo!qsN))K%;1abXHW4qWn%A{OLw3KVKzNp* z8qEF-%R7n&!egHQr`YZBbg~bke;*o;qOlhZEf~%;o+(Jc0Fu;XKa=x1(Zh}Cg==>{ zyziFe^S~hht_vp%!MuhCnOnG|)`l1AqS7^Chl>*|vKNWiEu!7m>W!vle+@N9bkVf| z447{ASJ;+z4AuZA6SSYZynDS!`625u;p15z3`9z*NyV%BK7uEYJ~$n~sgGB&9c9jR z{kdJUIe6HKois0S|Ozz?UgDvu}4DdZ`& za7%1-^GWy6W{^CYGKW)+{2-iV8%mn8+D}_YtS4>2cC_W6UOTdOtT1S+8fchCby5eX zckq(9u&rduUWEEtCm#<1bJD&vXkUI^DR&xfQgRSZsj0k0sFZ3C!yPlQbHfEyXgj6~ zO3ti&W96Hxi7%X><7Y^?cMykcpUs8|XY z=f;+B*;P|{MQ5yUSl_h4cq|4LQbkG{sJP@id8OI$!pXel$M>Fp=%Vk##|NPI>f}ax z+EH@G@P=XRK+v&#D0$9AC8r!~INT7gKRf!^q`nr9%n9M3S9={Al^eF&L)J>pS~-3o zV66;V*A1!Q+Fi(T59he&{GOm=(@^rIGzZ-I8>$Z%lm<+WskDrtCtg}TnYVHxZDrVA zFj;g@pb&o72JGt~O-XscTo}$RI_)3vpL}vi4-&x9ilDt}NE@~m4yi6>=7lqDq0GvO z%*t?H#fXa3Uol~=2XcN_a&|y?RNFU<$sFO_$HF-!;k@ElvTtvCWRx}ktyO`{O4KTX1-ba8&8SyY z`{$c=G-WRShEn3xq-CC1_u{&6VfmTHHyX#6UbK!j1`F>!zI{3xvi#yo4B0-k{nnfg zbNu<{lQde1k%LdOs5a@ewh@{!7s|YfGJ*ackT1bkqP9d3E$!Gfin?1tH*I5K(m+rYs$ki1xj47 z2_HhLr{W1d)>FR72va z#EiFZ?_3U^DVnIbv(3L%CeaafD})^GwQwr?xAK&dGko^l&4FJ*n2t&01P-kme3tBu zQo!%%d;Vc6R{LF+7{7vLaF%Nu90y4)>caD)*_jW2Is5W2ubq6BClvVu52!>?dtV*F z@11pQ1NhiaV?iITWAS9?)bhMfJbOj7D5HQINpObYDZFwFRc-<`qh59#-EzFRFNd4$ zgunutcR7R-5-MVXdtja9MF4@w0jYQNUK1ggG@xP73K!u)u{8-|qBIRp%LE`mnv0!4 z@_mK$%m-iqJ!7+jhUpY2UlR`MfOZNrR9B9yJh>Wzr*)|V>xTD^rM%i1&HzCw_=j4L zteKN3lWRZ+f!rObN#0Ta@JIK?x+H^6$-`nEk+zhM?6l&RP~l?!5%L zuLtCAa)eAJoC(!;OjROP1BiV(BMVxXo)gY13gs>4@)n2kmT`H@&U*uS%Yu0uhgD%q zX~pw#y@UqOZ&Zbw7Ri58L8DonR) zXC``RefF7|_dXO;#y}Gs%MqmT+DUNbc#s!P zz7OvCA}}6oMddPf32ACf^7_9JdU&7&P*XBfddqOlgf2TOLmgfcvMu6li-KvD0evN$ z7E;m%lvC#H;b#7pS(UnA=;Nc(2x$^4M{QLr&gy)U`vnT#V9bkzx^4E`|>mZJc!WY3W zsvg9>JQw9LE%5HHfR{hgBYG3$>4-q$l^i0eIH^K?(YY^LVD9H9O9cYWi|hfwASvl5 za*yW*Q}PE?Q#!-I6GvAMn?qKF*`Po=oo>UqM=TM@hTp0{dNrJdGnb9~Ld&;s%eMrU zZT-?3XnHuXb5|h!5j-ZR4Tc)CTXvzK?i%1YTc(5GEyO6iVzs z7GT0B#DQAB9$-vz&nid|kF91doW1hQ8DxJBJ~K0Pc6RXawKqPR`RLf}3op(LoQT4n zXWp*jK?{#la8%ik!RS$d@h`8Ra`fO<0|)yoMj<)Oq7b05zS*gdW7ZPl)JU)kTrh<9 zr{K*&CSni*@VOxu!~O=dSEGR)idYwv^%Fj5L>KprAQ3k>&8!o1A3@_78ox*502uIe zKzC=mkH>FO?kK#j0BQ*YK_0~6kdUy#aHx54pniSKfoRF!AGZkG_{7(D1_SbsQ*>8UTk#`o-jf>jjqMC(RSzXi+w!9b-&QrG1`;-uR=}kdjMh!2Im71c6FZLY z7~L>wE(r^z|E%Wha0EuIRlMAqgb*DE3cHxEDdMm z5sq0!*qR^C$q(h!a5**M{NhmlN-lq8*tsa=+`>7x1fAR9zI-Tq5tqG)@T_V$Tg{X; zk5?QGS!+0JP0(6<-I{FD&QZx4?d`OS5#}4W){Q!tvxW3c0A@gJ;ullpfp}G7EZ~YL zoQGKPOdd-Gq1u>Fa1mX7iEt@6D?lEAut*`HifO_Jp{9f&@Wx>QNllZuc1yu&N%$PQ zRo;<(dyUWz2}mr|bEm#7FiKT%^*L^@PZ$~L+{n@B5aE3+w~z}l7UV37#Rx7T1;k27 z{6Q*gAXFv_;^HyDl_S5LJ@gbWx`i9+I3@h$@)UG!LW8gu2rNVh7?aTOkn&HMBoB>R zj5YMY<0V}#L8FWP?-+xS9N==Sa3U)rHDG)A8i;I5tcE8|i44qvNk|R2R3piI;69dk z<&3}A^%#lZ-))Q{3?61<&FoLWh}SnG>=#~4*tgI*hL3JUU>Sn!hiyAxG>=pZBS=id;N$|(V_q^M!gc#@+3L>(VthZEh9yR8Qy za>6ITf`JliUdSrmq~|r;Lb?+gf_AG?v_MZQV@nw z$F~Ub6($r4UUnUXOTZp{%}fgF_>dAKpVXyPp_NiPa6%lT1r5L`eglo4Dxo|d0t)gm zx~Pr}>Rn1ezWI7Hy~zcj{tw*Y5dXe8@T3s}kxxpq5qRT!7hEAo=_Y(ayP>Uj)P9_I z()#On2woAFTC;aJabT~3qrFVv$0z7W<$<(HYIF_J(KRN%wFVkS@FoR$U5(gr8b+ob z)DoC^=I^eZc$epj)i?GjT?gBJT3*-ZIfy1aa-Lg``!w!`a9gJb7*xQKxF3@(#z;lG zdygmn@v!LYVx)>yj%K2I!NjO!6|dlm zSA>e!bH(c?i#Nu-P=&1eaXMfsnKUitTO6-NP%R3qr?LxAH;go#Yz$?CGQpBy_A=0F zs0B3wIlM%rZ{~*3ZHMg8jv0gG;{tW3Y z`Jv2eE)%$p%9M&}p^s&pxopy0F$I2nbH)pA&}7>123aT*PXWQqvOwlyI8L0_kLW`d zCuea^TFOzpol^1Vo0UYkExXf8SHST9^PCcr+#;;{V^y0gsSE2Zo64v!EZLiCs4tdm zSPDVEDU)rg1WvsY-8Ji%Z7!Gpu0#%=-<8qmE+_6v%@&LNcgr)kq{+WbQ-XWmT_J=N z1gGP&p7&}EU>*UwvN-@#qL3Dni68Ka?kGWqo0Bs90j4-&jM>+RW?z3=cujl|UQGg3 zE?#-<>W|Ozo0DwDM);o)Nua3%R{>dmcWPh(-$tt?wZN79PI%HeOM>YbjXRFZABpBe z)MXGqEg8<9)D@2{d4Jtc*P%AZw!_<=Z-D!F6{`cfVsgrIDjORc+Z~M*)jj}hC-!Z~ z>y$OaWxH!ibkf&wgFAEZMQQv82Q4iTZA%OP`ZT!pEiK>gY3+>0U<*BMEiJqP6y}e} z@j1Vh;9@y6cBAnu!p-W9!Y;ziPX(@ZroDN-jD$72Xj4lI}nRNqm&K;y5p_SGl-wg`wZ~A05 zFjrZW*108>O57?W%+p84GOHe4K%GR8v_qmb1J#AnI7}bQD~2Q zZxH*sR;4T+tDU338gC=k#eHA)eD1k{A#*0V@}99R;}5*E1C!r#U3-vL8b&wH!G(6E z;d~))2kv_y>S%S{ATif{@*<^kOgTq^H4e=K>v|(?R_2UC{a}r6yn)tSMUpaO6x?9V zrPe65V`*~~Sm$}`qWK2;=JwDjO6_pn4GOHe;!1ubz`F50TCTM6^MSJf>nW+#+v{#? z_prDV*=96QEtyAhcrA8cXZvpcse2XN7XuM4zbJ53v1BPEp^G4t$I(>|Mno5t2*dy5 zh`vm(g6lMU+V>JoJfe6=^!6gUtzF$7*2gOz!rI=`-id1)uB3ZCo$$mvw16cHDLuSI z(E%K(7S`kO@lP%(uyyPVR!Y_tQaZ7T8R_%)UC zHKqBQ(tb_p{zzH=iK+=wHGib+UsI;9DLpvmWNP|B`kxdJaEb^1XR2RAgL)8}-_E5_ z>a=et6~un6F#J)GeJL$-SpCx4P@0oVa|YAOLus{KTJ89HE^XPNhD%A>fi=M-%c%T} z`VBRgR2o+6j;Rl;@!r)iJyJXD585gw)r+8_pyGkKWGwcU7m2`6wCh22C}sWPjVk%C Ilr)(C2fR21X#fBK diff --git a/modules/__pycache__/search_engine.cpython-312.pyc b/modules/__pycache__/search_engine.cpython-312.pyc deleted file mode 100644 index 697f3197dd525b92770468d46e04ae2a4729d45f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16511 zcmcJ0X>=1;nrM~wU9u!wmgPm>zyfSTSPTxE*-Z!}Ko$&%+Hnbx@s^SV*pWMQ0*UD+ z!Jd%VG!R60GKfHeGo6<>4e5|fr-wOjIVI#AD{AHqd4mj`^UiCr%t;P;Ki>D?*`qHIvAu~gQgYE?I=TQv=uR&9fprXmI9jKeBR5+`MUJ-Nxl>+>h2h?cTU@(-Z49Z;Bf>JhAz)CpNoRZP@r|-R4cugY2RhVBn-WuYLKd_%zsQSBlXA_nMdv+YsknUC&Sfb6k<*( z)~duZwV2b0Iju*z-OT9r%NtaT-lJp;9;HX-QE!)!{;*cT828H>G?^H{8TwDgAw4Ew zV*+fnWR6;oY`cufg7I~XoiPJ`7MMAfDi|w3=~Lfwj}q|(*ld6`{O7LE7~FE8f8ztI zgjm|3#?&cs<;8WIJdJGA&XsLDyltMQ)cqj)tA#4WA_Ox(LXoqQ(1w#4=B-Hk0?#_ezK@HYA4X5ka=q?>JQ+u`xWB`n|tcz1YP zJOGbZ*4@$Q_j}kjynsGW%XS~Gf%E>f>h=zQbtB9nmHMh%+nGR%$CsM3+e0?7s-rWm za=X24UccMjm7Tf2RYEaN&$k|uebiN3d5`RnE@qpDum4r>aF1+Qm3PgO8_UXxS@U99 zwpez4EGw7K-_BB(Y7nC6o|P(eo@_YUz*Q`c7A)zJeXYv73q4ZnCZEf7^ zW<9<@i{BTQlQoEIkRI`KkIP^ed~uD>-^lvO#N#SY8^h;dNdj$t=tRMK`~kMD2~VT& zAm4cz{_gIBU4De3;dBP6W}!CY%^D{zXXsrO6vZkS2_xMB9Ok%m6ZRmU+H@B|Iw%QB zgR-DJs0b>9s&n$QD!#T`9aQst!6yl-p}m?R_qtmHIThaUZf#K0EKm0(;*m z-!1WrGxQU_iV%zj`#DB2+8}+5Iw2Kq0}V9RuNV4gHVC=&o6()q3(#|@mubfE0?h6$ zX}|Opxt!|O1$E6?X=ot_Yk(JE+~cK!ns;etlC=c9B#ep4Ixab9KAT#>m#NfvvebC` zpuQQe(zu7Q?5cr%D1&{lP7Hy)^E=ceVGQ_BSh1JkJ9ADn1$&@xwv8JCJ_XL+ZGidV zf{uHFhM-pHwc9x1J`mmo`;hH-2#teACI>qcRvBt-CuG7GO$CjA4aPOpq08|1ckuTd z{Ao+6SrnNWP{_B)>eWzk%17^!(9{+<=`_`8;Q48l(sblPj#> z7FZ#Fp#TB(`Q0X{xBH8QvY;p-Wv=@c*v)R!&rO?B?>)32gS;;VIV3MI1sH(FnR-SK zp1yhN(2dXfZd^D%+I#%QN52uP#7rH#!&fVQVM9VOYMp$8#DU-4I`YBI^RJBo$)F|x zczj>tozpiiyfOOr@zFO2#{d#aBlLCS!wZSGfAyD(Jt^8>jVz%$#S#8;@!;5&B5|s9 z-Z(atIREKr|HrrbKe~D7<;1a%pc9~2)yOu0@&ebWMyBB$?Rm?|RPU*7t?nG(9}>7) z=grSwO}u_#ed3)nf4O+*`h^1ozeR{g;_&$!N5W%JNK->-_+LIroc`5l|GT5dPeRkt z(8a{X!&~5~eDu-E6)VQH6DTJj4vTW)EEwvuPpmB246fnTl);62(*Shy1e)WrE$Zv7q1 z`Mp~QUc2$x2WO;lr7zIb)i}jI~aRo0k1dsx!j$p0x7Ty$K!Aj&_O-XUByoLRz`wJd^>&fcF5PlCAi$|BH+Ob;pjw7tapg`=BLlkO0GUZ=U~T^uw1D?|gXkqjzha0VH6;J^0|zXiqQh{J}pYdIp{BL)Z+tgLCx6 zDSm+iNCfy5zxnY2IIjPW+#q$2QhmCz*gPnV8{E$Yye$mK7yK$ncX<3Pva`6ngY^Qt z#RZ7VQLx$@*Vg$u+nScQcwrWCSx39i&m!%MYvF|Y13q_CJItgOON{RA?QCnKU*z@D z7EfE;w3%PGm3x~!L@|l0(^)C>23R5C`D=GDt|77%SzdMy8JBE>hjFJiGp=aju~otG z=xA^Ac~HdgH^#Gg{QLkah$FPehs&R$S?L#Bf+)>{q{}i!a^jB&>V`fCkh`1I_xq^i zJj!G}9Q31baowfVIhr0#GKVtd4Y;lt%VL%SPFHZvoIkK7VxHQgjOCSu zwnXx(dyLm|3i@~T?Fv;6&srYMS<$1tuF@YV45=bnF3vP9>>6A-Si>0}9#$<($|}@` ztG4_RTSdfHF=!sP&H0YX)4P(G3@Kv8Q%^fiIbzn_{&jupk`hT?PAsoDDTQ}ZMa`H! zIOmgvA1)lM;#_sHirU+9X+cg>OO;dtt|jL0D0RNMR|N=L^G7UGBbKS**;g!8*Gem5 zrE>7rck-g{_ei+H(ub?C)t*#^#3eBG3NyfCbe*dO9@XLGaH{TdTg7*Ch2HOA@82gSfZ+E@Dan%(GIVG=B->veVIeA zEK+=FlVUz^&dRCMe>Bi5ixvN9EXVvD9hCo(qF0tG{z%I(FQ=jH9~E^RVJYO}DzKT@zwgGkMmUYWfXP9s$RE%0^F$shwy%Li^fW_e_ z`p_}@pMU_%g8;!8k1M(rK`A3gPTVYN7U@+DDuflHsY8Al6$FjRWeT8L%!?(7LvLmB z{mq1|$EmoYvCX#!xHhsbmy)nyp5kwY0#X`RBZmd9(%M0eS6uIJ_cyi(q?$zw0jQ5& ze~X83=+XYrXz0~jzZr;2QO5>Nk#O3$+}G3&>=~9HI9*5JxfZW)Cs2IUs9lP<+}p-@ z_Oegms83_E1(OC$wn74^Ex|l0W^rj-`<}Sk>ucxv2D=Ii)tIpf&s0f6xRZ%Bag zD5%_gU>yD1`nH9ph98P%SH*G)`&;^2Li58Lqd7BUHv3h3@yYz7`Ns-J?6V^FSyB7! zn62Enj-6IOu~H!{(@MM$A!svi4|g$UA6` zI_9JyACKCrVy=Ier^`>8D1A<^H==Wn=%z+=Q@M)yU+Wem zEifeVKs%?(Ws&2KQT|c9c^Urhz6T^iRQ@L*IS;7rw4l0!dMY8Rqa>xCqAD-NqwmXM zWI^>rh5$5QiPuHRsL*7(6f`wvjE1*7jP5cfk5t-QEij# z9#fcxV~QB_gv3@O!2I-ynFPWaq=nNu34|%l{3d}Y&RFe;9qOv!P@CaQ+& zr4M~b%mk%@{|U>g5k&2jhVm)soJSJJ-WHk2jbHB{?HjoH_rDM!#mxUdtARMg#QH4J zyMe(WZp5O&V+gwKjdOp0edr&==Im^k;(Eg5Rtvq*c*1sAWTgS5 zi^-F3oN(6F^XS!fNh>QWd7TlhdQkbxR3E(RSR1D`>^7+Bl2kbfXAGb+2s;F5^gA=y zPdV^Aeq>%cV4sAh zE(O09+ab@-hG_ICF7WkAqKy&m3aBBtV)$s99fLz>hoN(}cXh2EGnL!;gWSF{CU1Fm@Pux{S9yyB26 zk~iZHrP4o3_bOthf)P_$#8ei`$sNcEDUTL$xvsD|ylSxK%m!}yLe9DfWS@cEA^Ok z)HVzJD*apgwuWrs@@O`QY-8#Q%1&-Qx;0#Mv23(Sin$ zpiG)1rBrK@?KGT)AAD#wdZ}Qwg+58IHpxOOERg-Iq9XoRDpzI*nj4UqzUUDKH4tA{|bAe)iVBlQ&=gBysqy8}A<( zJ=FuY+r;7bcwQqA$V_Xk*mQCxL+J6X{trO&5TV7)gp8xEo*x`6#60!C{`slVUz`^k z-NMaq(ZmSJa}9P8ln~BAh&rK4M5EyqmmOHU1rqNJ5b)TYkei6e^24|!Y0Bx6Wl%$; ztw`HgpJ=i}9UI9RPtA1C2fR(Y+`Q)2WgkPvGOO-EE8km?@YXPEihhMw4n9Aijpi;G zF)!#*UNhzp5*5oX1-)T)q-+jXI+wG|$s3p-v6OMTGD1&y(%>iwEr>WO z!;KNg%${|zoRUyYBxgF8JtMp<92}~TRIj?^zbxgd*Kt*kUf#r69_MtAUo%cgIw(u+ zeV++Xd&yQ;LLa5;oU&inDIv=fdKFN1Pg`TFXN)Zag>4iC@3z3|f=^Mh&*e`E(x4S* z-XZ|PN3=uWMvi+J$=OufZt#Hzr67pPPDr~Ycw0~e?UsQzoNkeVr9eKB01l<1A28kZ zgyN#;bz+p~#F!YG@*9PAK^dcFH0QK}e{L?-t?*|FwG;XLKzULyU_&@(IE!Zk9`Gg6 z_)nk+&_D8b^7v5*AP-~Y#bL%2l))@B#ca5-=-tZnWgRL>#j<1t{s%M{FUIxHPbA(S z$h0Sb`Fr%OSFd0AScDNX58l|6kyms95igMlkLO(2egGl8CVF2Z6yp4?eFrBb3lrXN z9!-=ANhdcyIiL8$esP@jUHbAZ<*nt6yL?Ugqve}G(j%b>?k;&1dIRp8s;beZmh#?% z8=u_t%^11k+3SVN*}jWKvVLD4@Nci2e+J9j!0hgA+p+2vo<{I1=saz{0PAr#`kK7n zxB`tFXs*Zk1<+hSM&L_)@((=9u$r|_myTFF*k=GNt^$MncC^F9CGEbrs8zP7(iT1n_|ZEYZ zPkqep4B124@LbL|t7px%oGGEbp=QoHt4DoTL8;9#mFBSaptg5e|LVTg{Tuo=gzBT# zsv&ESc38Feo`N!%dtC#Y!ZpMC*-464FQo^czp67Gu0L4cyJO(_aA4^1uXRhllVS}( zs|{dxS46U=a;6HdV)>=|OAm8~4a2I(t{HQ|fbpFc;rM>;`_NkYMRne?Y0@vJ$(PMm zj$zGcdm`i~pO7Ckr4m9R0cXERhJa0iDfOHz<0?yk+*leEFCjRjF$_nZzQPY)$xgZG zUPgS#1FqscxbC8rAR|CQaEvPnQ4>c(XLYAM?VyGpio0b$+JkC5!2q|jyj%8jStnqO z@3h<5r4GCUh>15X@ypQ7&px~U>8}z8UlVmSUegd^#LR=_Vgh0yLW`LR3BVW%MLeCr z>esiodBkSyZa_3nv+Q1Yvz?Hv=M_WL$Wp}T`p|1Y?GnespfVxJcJlKPJc4ku_G4q> zYm*W8W!5UVRqNaRs~|{*S&1&u^hIRX0I*BW^Lug;U%}R|V)7UyKIBzM0|jP}Jx+4_ zGOMQH?Rx{-!tJwCwyENsO3GB~+^bpHz21-|yk|J81`fNvY-rZil;E57Mi4HGzU(_J zzJtjR*Nx6QlmuGovW`3(S{=!r!C5Q0$|aZ7LoaaVM}~FlzOmS@8gm~63cH6MA6m|t zmk#Udu3BtAB<0Y}ecv3w>s3P?MZK9lNBW)`G9SqoDL<7$<}*ybpq$IJ(l1I>m`<}T zQ%Jv5$RR(*vM93u-^d92M|KBy4FlMY%e&QH3ha6kRsjJ)YDSJKahn=UTB%1U3rhFW zJ_y!e6cY)-KPE5;b!hwZfk2IKup^4MP#B4#AjGsBuu>AC0^A7`iVqXEJWKPv09}zm zScrxMK55Z zA!tTV>~spi-ymY3XRCq6rNtG|*4S+dni$hA@LscEp=GjyCZvdBJ1t`-0YuoFMJzSJ ze5_hJ_49A&N!(A; zQ+`l6wkO!F0%6={F{DT+fs-V-K@sg+Z} z$`zB9Q$ntUe6 zB~S_--+J%R&GWxVeERX|+xrt2e(y}h(WIhE4!;D^QE^oxvl}B|na!(!Gn7Ls5W09_ zl!4%kopFP=t*IrzfE-D@b?I+!D+HYS;ufJE9l!mk2o zDyssMAj;H(tp@Y!s`p~|=T>Ldk zrF_KbzwP@4MpVHo9VIng2z+t^8-cZ&2`O)`( zJNo8FuqF^yllbfn5Euw*MDh+e$AUwE+4bMQK64x-QmMd`A|yc?g1UfxJNdw_5{&FB zaRL^6)D*Ob&A2)EG7QXvV940$kxv1`#DR~mUwA8X{(SJ#CLDyAPsLRgR{^916tc%G z?Idw&H!hw@ymC~CP9wol0pNyIdih}0UU!O1$S)JWgrkRhum9oL^`RrYY5w}q@15z; zGZL|t(F+g59|6D*wHAKb{6=K9#5!@naqS)-iyKDPiJ*zzvwZ(zWE&pw-|hoDIqYkq z7Yy;gA3c7MKZA(_=Mt~K!b5iHG7zmGn7dMkW%TH;VTaRWRNSXs>Ammf5WNmoYVa?Eo~Op>G9v%QHBUCS1o%9Qq?vbTJF%4ydDll_ZEC}iuNE-Gr=r{AhMkQ*clxfzRrrmUkFP;D zd@AnS1VQbdCXB`c$s42a;u?g*;P`+ip4l^rkw@K>M2P#r%#ZQm{CD-zcujE&Swv0IDMjUgaj+zn2qKIQr)UgEAz;BF2 zv7!p_dB?Pl(43Ldxe@rUor`vR$Mo>ZaLr)lCD}izzffN;8(F(8vUXc^=`-AtXF0oj ztR-JV<Ui*3NqSxS3USM3D@%~uNNgx5svb9)R| z9fcvoplYa!E2@t=)&fp|%0S~4Z4q%E_{NNL+W`7?QliwGF=D`aY)h{uX~3wo$A9_a zwW6|E(UMD=p&(bVE>=_wVO_aq@H1qY!HHmUhUQ%{x)7#d&-ltB7cAAPgBxOn6@2D4 zcnPS&_v}o2yQB9<%CR(%rSE{IVq-b8GXx>OsZKSA{d-##d8>2;!LCrUo zQi8;s!G^(g+)|b+@Qoj;d@hWzE}|=rmCZ@z$Y9@C3Qj#uu>0BgCf3{$OL@dnK4O_3 zu}lxI9k$evQRWZj4e7WQTe*U5Khb2(uw^c3GH-D2U^BP$DX!q@aZOaPqK?uL$E=8B z*5I_LV^J^cQ}KwsI%2OLR6$ThuL2i3cVNmDqm%Rnn1mN{HIH$RZ{Z$m;2I{vqr6&} zZOJsqt&Ql4Vr5kil;H|kV#O7w3r-dMwrHeyUZi+lw0J(JEBwY-9J7>$I5R&6iej1&;{p0g-iZV5Cs}!#$R!tc4f4^LyT~kQ?$uw=v zLh5p1?wSSC%kybW7aHpg(tp;|kWOq-*$bB&47#+B?xc56-I7Vdx-v|*K`CpU#F0Ua zxhF(ekkDj7dN;-9P696v(!8q#Wj;Xzqp7w!MnT$v>tiB074$n=aH}w?OjBxG8AhJK zh)#$+!FT?|JwSWnOaa*)en29)Q!;yEbfmp);`WRlS`o*~Sj>YGTu1mZhH=6u7jceV zuxBJp4D}aYJmn+IA$l21xxAa2c*F_c=~8aS-${XM8yQfSZZn8H&W-ppDJVjA6hI9f zBL8oG-scQ}jt-WRch01FRDf7EZoc|ECtgD`zh(I8*0C4i;>*p~RfAqpT{P-Y| zN}WL`c;iXv*Utckuvx)bG8YOUG8%Y~kKpGcLjsH8If@smyNbqgln30?Un5uf79jUg z-x_mbmh5XLbB`SSqW#)F?ZE1&sjNr-jn)*?WgT93aNR&nXl`gKXP-8#n|@7e8>oqB zON6S0VdbDMQn84ex|p*s`C7L$rnmI&iRcRjfSOQEc;2ZcTnWVNa(0ZQis|hGPet@) z;k>~;5!Ye?aCK;1B!3p?cxbSENO?&Ung0k^vyQVrI;>lNO=}%cMzlo&=mKyjZ;6!G zaAos3`+{Lz?YBlNPQq9g3Y_jb)iqciojN~aoX@G|lSnO>ay|dJ==H8F{23aWjot3J z#_i^RtOj|V+x>i?v4yW;QHNpcF~Q|!k79yWP~LfkTgtA)qzw}mlO9Z7!vvW+i~Dc} zenf=%5=>C>Ac+|=zD-~$-%s6<80BDwt)Qk%1HKX~t3cikX~~pWarteFo0c1{8O=#K zW`MAPL%FH%nWU0@s*oN_4|XTj-8OMP3p;~L8vv7PZMQv z49xDUOlFZ!GiA;jDD5jqk`cjjCN;~XxpI40mZab{=pR~s$uhL&!=IDS%i#2f z(q!!<$Zw+M8iG7#GLR>qY2?Xg8hP@WMxK18ktd&N;@NPCK zYL?jKQ^V3E1+PKrU3}es$RW3fRwOBS4K63IOSA9dSF+YB&kb!#Qt%2tJ;f0sa~O1d{_zPB0qrShSPCZxq_wwtIJwUyKrA zpa0Q?w!XEao%QpwywnF$GyGP?zq7^r9E)B+yh+59;wHa+X>ZvLzZwO~1kN4^Q|Vya zn?ayxZE@GLtZ{0UaP0zxpGB+eWtvaQOC@W$r?P1kH)nVg7 r;{bhh_CPS|m@%xXgn^>6`lKGa<^8yCYi3iwt9xi!h4jm*G^GCzYxgT~ diff --git a/modules/__pycache__/terminal_manager.cpython-312.pyc b/modules/__pycache__/terminal_manager.cpython-312.pyc deleted file mode 100644 index 7d051e163dd5af4c9da657997975e9b7a4cb19fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15856 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 PtX%w^F3mr7sv!IyE%{w- diff --git a/modules/__pycache__/terminal_ops.cpython-312.pyc b/modules/__pycache__/terminal_ops.cpython-312.pyc deleted file mode 100644 index a4f79ec30f021863e81c7296df6ed6b8552de632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13066 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 diff --git a/modules/__pycache__/todo_manager.cpython-312.pyc b/modules/__pycache__/todo_manager.cpython-312.pyc deleted file mode 100644 index f9f4b10fbe5be305803df65175669461c985fd48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8409 zcma)BeOOahn!h)>H@W$M1OfyEBnnnzRcv)yXGWcM2CZ7fo$9vJSWMI0D+WVC?@bhG zXsL<@iv`@}HTWPrfuf zkXfqad2I<~90j1IP$)=g5po-r+%LP27U$1i(@=fCG>?{L=uC}>jN-nLKTUPMw4Z8L zKTYkY?fP4&&Q8k)m(S-9xB?!(Pl8vD7lbCazv+OTk(nBgJ0LS#JW@bbuk#&{xou4- z=knUsa_)|8HQSt9*Zs=5W8L=0x68%p_iazEf8xna>z{INSzr6uj*W6bx&|earM1u( z^Y^a6o?AGp?#!{Nl^1$?H)MJ!fpXA175+&l`F5Va8$L zb9e^+jeIW8!ha5L;x+J}%bR&E{G0eZKA+beW*uh8S$I9<@}R8&>hce8_5#_k!_WJ- zx_qvBK@2X2o+mGzoxJp$c=&XD zZX{wi=3xZ%bUv{@M29FRslem_b&kf7o7{e1Kxhs)8+#nOF_mkmZeH7Q7fLaHY!%JEX;h) zl}*DN7fGYx)9ZnIY5+!hlfQupIoX|Iz)?x0BRslh)(VD?QjOS zQ+8FYtRpsiVK2ev(bfyFt&$r%s}u*B#DVW&GNiZBr^#aZLa zsKJ9LErg_v`odJy9T>Ad7_~k)xO2E_)bz73b7S6u&gNd`l@}vi_25cK#3GQ*S~(mH znSh@_riX%I!~eZcLvqNOmN4ORC%MYXDVx|PXT zP<0@^pee`@Eg^M7dI3R2^5Nm!rDR$epCOP0Wr_-^Q;XcngqQ|hs>RHI3KX$kqB}Q) zR1Joi+EgyYr1a2KASYd_N|nMo(XFmXO+#!23*o!N!I)P zVx!CJX%Tpt@dSiMaXuI#;cVIPQTD0XnHF=Bb}eODt9noEQdIFGB(T7R*04TSP;!Sd z=!(KMv4W!T`Y%i+y;bip*G&sz#bsx?Q(V7waQacOVOXvFB@1kYFZvM7sgB_5w2va1iG0j zrp$BTMcGK1n;I9A9D`S3laOPOMgpiwKIx@Zhty&TY@JLENg3EU$(Foo?;?s4SzgUE zJlh8g7NVPJNdu_;@i{cMK?W&;jO8T61FVnLf}cDb3+yJ2m}v7!SAXXFVny!m%|DKMy^x-?y^ zTU`$zS_jAa8Q3kYnpQTX39;a6Eq&?}s?HpSa;sa}Rt><28W>eUAKR*hz7gv0c|zLM z7+_Zv@B)i4 z@!=09-a4G=pTGK~bMoRx@%C{1LT4h}oe00F`0#l5tMMbp6%P--9a<^={L8k3=Tx#* z3cB5bB+0BGihfa?2mJ&~AsHVTi60wCymxT&>d^S`@ySD6W$?`=T@Kdc)cc{hHf9o1o< zxBA*9-+LJZ;zK7AUESlKogN=<8z26yVg^bf8YPW7Idto27jznb=Pgj5=xc*ay#3|L z3&TnESq<^1r_^)?k)?jwc06S=&ROEs_v7Kq@xDQuh{geP0pN6r0a=T%>G9QrFK0bI zUT7weC@x1KR_6Ts1aY57*e^Z^1*BBY+3gqI0`J@nL`B+@eia3mb|LEj}A!W&N zMb+X8=tI^v!kQwR}<*Ar38_K0yi_7yz#La%DnP}<9%^_}uvGb|z9tr_O8 z`mXpQYqtKeE>f~HOL5TycPLhuk1jO7`$w;|^wx}(EsvHh2N!s=qAFIgXs~cl8>!y- z$AYmYd0*#Jl}jQ^R{vq$_4ymV&CwR+ z-ZoN&72Ut+Eu7L(bLYj%=f~zQoYpdV`O|8sg+|s2EG(aQyClb~4>MD9DP2yNzC+)= z@;X<1(^?v{?u(U_-_|l_{S?LM^naZ$hlY{{*6m;O%2C@B!?ZJSoH{nzc#IG|%k?#Fz3ybRbRrLTX-zD3U^Q z;@1j6zy7;rz~>miwV?D`R}kFGp#{=OxZnZI+TvH+Zw-tjdM_qU4uPux34+W7W{CI6ke$5T9zXi=Wapvy z=}X{(9$Fg2H3iQDt$-2xeS-K16zm8>;3eq?CXQWBz+JcRxACqM6K|Z2clE|Q-^5OS z3L-&p^GP`yb`wOZVME_bpccHKjr5>kZVW2Vgw!Gb_m@99~bsJ6&gT}je?g73(pTW@dPb#$`qNFxtTot{`vr@m$V9E znk-``ThwG5HO+@RqscC3HW9En?gjGZgmH$JX{bepflj4?TLWadh$OYvrp^5e?{WaOz` z(I=dvwa-Sjx+1RnNcEnm#S<}lZkjCJk9D;6ItJ&R+7&e|0dp!Aop^H416KuushjHn zrPmA#Z+K*Lg*1Rc+K`Ip@FdUR5QJ>tYRBvG z%-2xoA;l+!FRgg{u=56xVDQ}YG~|pVhplpwSdhN5lEx$nrLUKW1+5J9ZVIW8;r20r zB*peKe2g_T~w$s!Z74Y2xhHzkls0F};ReWI|o8+*n zRu&j6pvpJs=)Vh9@T_ISh`1ia$r;%3&G*0uP{mtEkH_CRo_PKE_@{lTbDI_B!E*>i zh@QsiH{@|4Aq3liH||M+H(-$kX6f; zi<{vsGoo=(W1?Nl^Cc!m|s9EoRVO|kD*A!Xie}KB!B8_&t(0|Js{E12Dq*8 zMdXwOjF32XT?Cq)IC*KJ`v~3%-tLQExg75X&>KvIKT7=L(ZsQLQS7~gScNDJv>LA$ zK#$Y4NKCJOI&t#d$*ZRlX9mWv4kTW_2(unU9{im>XR}-d{-M!1h7eQ{H!UHjvOzi^ zL9_wl3P3Dz+R1E-u=S`Q0{8gHaTr?~V&VRh=EV~O7bY*f1NR2FF~Geeb>D$&$5{w& z5F%VC3eN{Uq98dT7`fX65e|&)lI~@lC^Wi&sQc;_n#|0Awybt}y$V!o6{yxI99}_a z4r-mmwfsZc;HMxb;UQFjIvFo9WbB9*>vwFG*RbjTK>}=cR%}kv(wp~TGXciUS-|+U zkt(plUK+0XgZ0YR>qVPKEt`Sh8Z5E$Md6z6;*Q!_l^rq_QRBQ=6&8`4(cHDUV{>=l zy0L6ZMU~d8!jBW>TS0lOV)1Pqi@?hQ@a9t`<-Jdx%K0TiL5Uv8KEFnsNS=8f3ycK)jAUo6mJG^560pjNV zd6o6&B}^7O#1Ir=hl_p)E(2O-;qnh*hYBu39EC6}TEcf7a3u21>mjEguLg1kg15<- z2XFjak)34p2ZD%y6Q#2l8!*9HV?DD)X#mZc6mP{S6K@Ww0p0Tu-R=3c8^l_ex$g#A zaT`_>&Vv|(z|r+);&M27jxtU#V1&Zh5*_aYI>bB9jemM7b*Db4U^juOd8mY26dKa{K!9z55F?`>+@;0h}hFNm}nb;5`enN zi07A;$drs73biD8>vJdYRw zcY29nL@GS0O#+AbG|Hk^6Y$1Uz$80O3ww0r{N3Pk{4yWrfSyWMT*pLyC zUmE3>4(=H?T<2=Y-R@C1y|K~<02J^5vpT&JV1?tEe(-KU4lTxQzVAx6J^4L>CJ1b& z3FJzsE(xPX{01WVTuss*|2>~aGHY%?3kgGc*)tpA<`VI-So4UEXAk)(P&*?R1KGeIfB4QI9!{tB80364zo>1NF-2$-r^UvSCwWlV1$1 z$4DrAK{+5n1Q0&ndOgpH7|+I;-R<$>%xZyA_`UlC6u>Wbl5A`e{SAUU;1vD-fQb7+ zX0WlWfzLC77*OUTdyejMtCjUxE4Dxb-0#vGkW8s*n*K&Z(UozkcaA9ztkSKgs8{mWE2#aZC93a$AsCilOYvj4SMd%4%wro&rfmK9OUilKE; z%Oh=DZfN!4)uY3Vyr6)YX{v~j>oM!ir{k}WW zNEU)-cl*a)&^PxzckcZjzx&R!)6ofy}#z3@&qCUk$I;c~T#os|>iejlQidC@6 zenpppJe6Hac&hqU19TUyz%sgDJ)rJVleoHHGobC#lDMXy8PIj<2J~I}0YjI8|J&R<)@X@V-%}=n&KNxh6 z1OxqnV8GA2dxkjoz({{E&^UrE_>tk^AuhP;HV&ZEqY!m$cd*;n-_7%oU?AZS1_t~P zr=RE!9`UF|x-H-fip;*@U|?vlyI)iv92xHSdz50K?}*>m=N*QoFb39pq?N<*Z5V-uqMrFNFFc&X~ke_RPE7;dYt_Iejj|b$l$aN zb`SVPwSS;H&@Y;nPKe&e`C&R(Z+Ea$Gz12Z24HS{L#$t45lc*TI!WwjqmkJ%)+f29_6gq7KsCX{AwWIq^=cMU)`H96ui1SQCJkCixQT? zSNA0*}G-BA31VX*n=Pmcx%R zHCZBzk>wcG!ep6n0iH@TK4*jeaUzF;qH&lT>h=4Az<$9agrB>;Y=9G){-MJ>i5Y-> zhq_sk==5kfTx)JQl42w!NJ^2Q`ryitkk4~ttTIh7i^o)Ys`NNjHZoNOwpTk7gjgN( zv_oo+b(hSJ5i&3=Zd7E?4y))=DS`QViC&Ycq$#Vs0Ch2RY5ZD0h&$ zzxHf*^JQLwU-0P*hgAD&4*pRX|Qio0(o+P5~s-WzcWhP*Nc( zAKUes?r#moQgKn4HcARA0BybU2uO-aw<0Nd1n>^jGdUqW8U>EQnNtYKCFRH?IU!R% zN_kYB2hS@-?Qk~-%gu|7|2S}gcc{-}l7zYr8gunPM7{s`Fz^d5tf=Mu{80ZVZDg8yYWJbWqRIg7cuBiJk`qIxHHzs7g{*Y*HedF+`i!Kgf@8es4EB5EvvCJ+w&k z{{9|L9tC+Jk1XPbz`61DU=9L^+vxsfU^pB{@XuM5+! zn-?l-qAS+NDmH}ad8TZktTM7CR@M|R+booAj+JeVmpvwwJr*nLz~bTrV~jJ!0#h7k zDg>rtrh3jEWh&;GE!P@XLuZDBryd@rL|p@ReGO~71jaSbEGI3?1*UwSsgUDWmX0mItg;Wr${B((Q?qi}D~b?~Fpu^= zy0itI7F=kdgcfOgko8?TE!0^ps9tkc#Z)vT_c^W(qCqDiGwyLs5LbnSUVA#0d8TLR zVFEa=4a(vNU#bjgLfVj;)nMjD?S<65k24`A|15+E41+SXwmBihq`#1;0kpz7Aw5D; zjy5GW+dnv96BcI0{jqc z5(c`11OtLj3kdEwREXD05a`cGgB-h!?FE zidM&p)`SgzFgxFFo<9E8=9x8@iyIbfCDGE2G25o7aZ|!jI1!wBaq>mMP`NbUGSN1* zZ*rets3Q66W3~-ZG-nLu z1=QGQP)0ZT>x7i)Z%(5fG7|a#bza%YZG~ZYv>fuAsO}#+=I12wQyumPC21rgj)npR zpU4HOU`Zs1gzSSPkMm3zUE*_N7F6|*xw6?jyQBx3@<2{d32V`Ji>E8&mMXzg6|>aD zE%kz>K4xh|_I6Hfo!lBPTp<*$h>XMv8^g?1vlFrtR>xHFWbst_WO>9Dv(|+*SIv&; zC*!4SE|;!>@&$8ceo_g`*i>F>X`BH@WNx{tac=mL@Sx2!K#X9n$pB zZPfE%gvPZYZN6D%)vWrWCe8f{>UAegg=kiby?mMaP?!0#bu*BPfQ!@!FX}F6r0)k~ zt?vYAFYWS08ogH{jhlPXK+KS|yFbVwLKaP6umI5WlCMP6zR>OK8yV(d*H1*R3hHpx zNNSL*K(Z1DNa}Ws<3@mMLeh++5{QS%FcJ5l_9Bhm2OgK42sIEQ*W6yn8LP+^=e!nl z1gi1>1Ozy)(0RY@LK%-75iG0X=JkSkeazevrW4NM>44x|88$+b=@pZk!IsI9qRPng zLQzxLaLrK>*)a3;?2A$Rj=PjXw>I3CFj`LSKDm23IKzf_Uokc(Rgj%zD7|fBpP;LX zGj#$}H@o&yb(E=_XC6!FtP>rAt~Ab63rzLQ!MV05Q$5eLUN@JZv9dZ6%W5zJ|6Ns| zo3s{vlG5t*l0ak|4Ow06f)Aa_-qKRNc^Lm;ET0ko^NLP%S@z?ue;xEIY5)a|_`$bH zmW{^&q;^`_7Hj97pMQzZS8@?R5gIj=dpnZxZZHG5gxE?yA`pq2umm!QC8p zw+QZ*InTVijR3X7G24--@kqk#iZZT;tmbR*j=#ui!g)kUaa6$<1ZC5gfjz7$wa=9I zpsc*Z!+j>Kn_618FBIEuqlP5=4{7spGxF;jzdm(+?v0!8{`A(__i#Pv%zAJ*OVaG8 z%wi#AWSd292V{(uJYdGjHsmxm*#_j{_`^^z;TH_WZ}X9LZ;j2g{_q>wm^fj!hmB;W zIYdIfY|)p6=lf8C)7=Zt+>l0R`H;nhRON>$4{#SKx#iGz%EDy#pC50Al;k9U8cm@M zwX~O$d0jFtxC={jHhvkYw3MfJL-v?+$qZ-qUT2_?#~0z`I;Tn|ODZWAiss)7Gdc~Nx%M*?9THLl25{(R1pj8Kd#vk<#7SRnNP z9>NsoaD^dduk8Ftm%`Z&9gypcs|F7(=>_2c334wxLdrJk6zx+6fG3|{59o-_YC+%s zUS9FK9d;1;-Yh#Mpw5avS0_Y&Px*Qa4d`v09)!08ic>wzV+z>qn-ujNeEql@96Yk` z6p>xt(P&t0`YRt$gZZ;Hbbq#nK5djA@D4-fxbvbZjqVVE0(YSkB`1W)F%XpHa~o;X z?*eT4Z5p_bCI8Z2i5%$zcb`u=P9LMHs5KO?I0orwCKTYB?|sJxM#7pj_W=~ z_FcS4V|Qc@&}~18uP5dp4~7O&%vG8hC;U55$p1B0q4ez zC4#YJ-dL6}+LE+GcSx~dbxg2RLz6=he)g$(>*ge7Gc{haE;x&)Mkhxj*6)QT=!L@4 zY4)AA`9e>^U44!@%gi`uD`W0;lN}3=@(BG7JMXAZ?0Wo<6jjlxyhP7G(G`8xJKycU z@C)lFGcL`YYE zo!fMF(@bb?f2?X-qPqUvp0j&qO|j}NiPGvb&z^pErf9Y(R=NQYd0ElK&ZLEEYz7Fs zXL3)35$v7>I)$nQJ9wC`*cy6iIoj80 zKCZPQ-Dn5;Nx}9~DEMsy1GRp;PL1)6>YXa>Z?~!-=kHa7Y8rMnseIYn2y~khd-eh3 z!X*!MzC%`Sco;eWJ+C;W^r?uZ-6PGI49_#&OrgF)EkOCf*1u+!Io z6F*~>>5M(etCeAY&N8g-qW%Ic^$Uk8`E@V(q6ceVkD-&}p$phEJV>>r_VkKl+%Qz+ zz7AyPZ8Z9D)@Mu~v+=$_K-3_L8Vtg5A5l#&V)Y00n$m>QS)sJgKZ^B_0RgQyGBBL> z+Yy%mL2@r+g>L}K@!Jtangi%E{_{)NKmc-rx@If{3G_6+Z#Zv=*R}|?EwS27_pG|2 zf;$$RMy5Tn}y2eM3pCAwN9v7mnf+`v*+}l zI|fa$?GB}}+7?yNOHySh)Q7c67o{_uGM_ZZnKFSX%iXdsn5+}kQ>!OeN1A7y^QM+0 zi1IeY+*cRCBhYcOW8(1i*JnoNzIw&D^&W`vHicCFr^RLPhI_6|&KEpR&6!s94g>RX z?eZN~)hAZJWVt5YFq%KsMEQEJqNf8?*}GA2_9#_0a<)^~*EKYByA@*1U+UXTvQ{N;JH@F9l-;^Y;1G;l@p)6|0_7FlYxzi9P4xF zK!dY)B752A@tiE$96G7FQ6ytXWMo6!MqCK<#(|`TAElk37VbM3I{_qD_%}e_SlN=@ z904ZT13>ZT0dz|EM8YOH zmf!&xGva|QbHVu5L&DZW(JfC#%b$wbo{k!yMnv!oAOdtWz319dN`0hhwSmg`*yY$^ z)O@^(M%v6E-Nc|OQ87^I6Qf#IE1wjpFlRZTr44O5Ri~&M0yi%g08UxrKtR6%WmH`*~LrnC8HbvlUCk!vyUhY+RQ${v-a<5?; zcAu0-C&`TuGgu_`NWw^(kz@q#BqY;Pg)UV|pkBsUK9l-76y!+NePaD7)ZuY#fch=V zE?erR51x7c^z(T1wfyb2h~r$z*^-}@#Y!HD+SY`%vU-NX8}ClvcpL6a`~dDm z+<52bH{T3HE!Y8~9}%zIaVP*wyOeHET>s67u!TkMrHZ&KB|bxS4erd1@F4RGmv709 zf(gi2dXtKK46>G9!5%fZBhSoM{N!s(I?A{@C*eg)cmmgj@B{}D@dE_x921E;huL)he@J2{*?vJAIz*>zpPi>vVG5kFqGc zhthAND7c}8DbqvzYorB@-Jt1evzKn=HXsS%;WI{#?oyH&W^ z$qAWrAY%U^5NeFkSmTHu7k(Op%%Sw8jBAG`i2IE;Q}&u80vCp z`8fm(96AZ4yXz=u9I~q9oU6pxSCJqX;+{nEG?KkY{7AMV*@0v?5_GUhtAU7?L#`tV zfM`+VM)$mMesFL!e7Gn&xtYi_(k_~P(+@pCL3nI> zbJScb=sb&RsF`e2=+#A$sw4%E*+TM|b6u(vTJ|ntR??+Vw<;n~fX^A%Y@OiQyhsvB zO_5qZ<4aQTm>pQe$K6L1>V~9|Rxg{`k)+@;yJHa_nB|B-Rd~$!Fw2oNs?_Tub&C`{ z?&_DT4=L_$FsrvI?p9jV&nWIxt06wKYxdw=)m(7S^K-Az(7s4vX0kvJomAmS9kbOq zNJr8|t1BZ1vERx?W1)Jr#3N*eUEDOzHu@;I(?CQ6-h&{2#RGdKloRQWANW#(NBRRV zkZaGPCOA5brk1QI;Ra+A(F&KA`o{bthgb1_-v}27j&eHe0r!cb22^=Z;4nu7m1O|C$c(~y$xDf%jB)Xd#(@mH-naOtd5E3VD z0KrfjH*tBYQGz8p2twFJ&GJ|kw3e#<>6lV+|r)|ku9nBdR>OO3VMiV=kbtB`U6>(t6^d@9cftiTB-fy;%(Efnc_ z_~K!eHw&q}MW6xB=#VWby!9nhxt&i*UIiR(3&Y!9V#*yqi=r7Qaw8Nupy;f}Zu>A1 ztITaunHBy@S*1&Z^(ynYUy@bRQ$c?ysG2r~YXgECtDGdr;o6EosH#d3RVFM3B-QMz z^;bME)T^n&c3JdQ$`!m&D{oaTHNNc?8U`!EE-_fi5I%`!fpHi7?sQTJtwR`;8^IF8 zW1jNkjYv+Y3ZV#+0Yh&m5;KvGpeo!5FrJRk51~e6MY74js%DMZ=y)PAor`v1o_>Kw z=pcQF-eWSMMkc~kTSqaC8P7yegyKy++fMW52z~>-N%0om+D`E)Cv7JZXW0c3Xw;Yl zHB-b?tvx4$jz03-^Th~>c>pz@R1$(AT_wfSi_cZ(-hMz4TJ%Th|aH@maNfsazl5ib`(Pp?CjOyv_^k!6t^N~Dqi`Dj|BP6B; zNF+}m^L8T1W{@`t-#I4!LyaupJ7l;My+v5VP>d681}!(TFS2lYZLGs`nt=@*XE(BP zhVfmUZOleT-Wg#DErYHm;kf^eV;#~p@Bv+i-D%-mc%UgRXajrS8#>yu$+yiPs2{xe z>hRGIV|#YTPW@$|wJp|qP(#tWQn5<%YBREn*oD_M^zIHFZSeJ%p4#yE%?r)34-O5U zeD_Azp9Y!_#+nZe9gW_+uy+6{bRAydxrmbYy{&z6ZE=t>H{C2iJg1b zRs5V!@>hC%{5D^(QsCVqn+!t*{Pw2UJMZbcK%jvGox?A;YIs_=L9^qeVL|22;S6dtKSNde|RGw-n6m(N+YH3*B z8WQ~t+G+#0JQS3Lpgdz!eXTIO7|6M4l_9vQd8^>#1rgks?5`0*VR`rpfWukPfp&*Z ze>`wzXY8FbLuZe9U28UNTJH+y0Z3mT`e^sSp^t7}Xi41rzE@)B_78pX^1$x5!{j}} z^5FS)9d~&DYeT0`dtC+q-ifZf*oB?3t}Xx&Yr22Q&8aDV$sd$ta$zbh$)ai^I@_+= zN~QW>kq}d!ltwzf!oczhM3?6P=qD zx1ikd@oY57eFt%q?B5|S$KJdqJ^?v%`W*S)j{FYkOUJbS?8%23Uv1p?yYKP{Bc0tX zooNBebt(BJUB!LgvTkpgQu2h7w_eG9^1H%O)Y}^By*LHb@5N~XxTi~dPp6ek@rS#` zh#S{u%j>q~-A357R8!4j#j)f|%aUt0XP<3iw{0SUcnM^@=Pcb>`e!z}UCCXjI7+Ts zN`AOz%eajw(2>R7%I)Qp?1!VJ(K$+{r`IwI_8eY%GC%4&Q54Nla%U@!Iae)neu$d@ z|KHNra5Fn6ugt=4=Pb`e=kT(H?0Fhyf6ZTx=+E--GB5ktlqoR3#Bi{D$%&UOW-pCn z$UGCnzDrq70xi;@v+=T}?4>yxbb$t4hzX__6P(4`d@1QKBX)V3`7(=_Te-_-Gnv~7 z+sos~uFGlKJTrS`I(>OMMOJ2}!TfXNSdmG8?!aX3G{O4knH-ttOAhumds9LQ4)oa&Lh zNSBE8M!wMq*^0PTCPu8ah{=$)k&WOnv!WCdNqO6wBj>`9w~dL(MVR|z?gQ{r4W198 zG%D4DF!&@IEpI=7kDbWFJCY@D>0%yqZ%#uhal-@XjWaMnD#Sa<|zMd_Ou=e+dc3n(_&F0P<=g;4`ct9sP zObkz@A=7H0%RHs3P4v}4aMTh36@^KJj2~%fb0sHjuHrDsI9$3oZf}^xqxg}1uecx^ z^12#kFZrKanB2>^uXo(+Y9&Nm8e`*3&7FhC&*|c-_ANetK;SD93J&MMzLX!IUr!Xh z4b%)*0|iL~iOi5u4IVkBCm1SDakDC2CCI8(2!?9}(I*S42{H$Ntx5-kpvpqJBm{X# ze?tDC+oGvcb!-WVH9lDe_O(7ymQ?Ilp=u+}P;>(eaT;{0J)yk{pi>1E9;-_%ky?&C zE7HUQf|;e$GeWy@CK0RyJqkZ*8(dBkif15;qit%pIk$gYe#h$Q>h6NMO8z{>F<-IF zzivxwU9@*mTYaxBuir82dR9);6A=HiCLgZrsPCTqNarIxne%QV&a@8iwKn7C`Th2c z*6O|0hci1&J@%qzx<6~eq3TzwJ0^BgJy~=5vP!zMN_w&uHQTKNZMaYl1l zKR3RQo6^lqf!NKPPjBg2 zQKc;3s^t5xa@BE~?A6kv){?y?Z52JXLWL>31L{ZjmExpa)=KfGVWOAf$>nzhN2my$ zRPbW0B&Ce}WzUTj>YAV(hpxga)SMrzJHNypt_{ODqJx7_G@=f?Sq znv%-gl$JMZmgQ#0O5Ak|A2({@2`iS!y=yj`FxqURcr>#01fsYE5dH9zNads@=65Hc z%>0hI(d^C{pXT&rtnIU}ZCVY+nG0ETPtF2`$t3R%9XQa$(sY zkY*+d7vh6dOGQP{S0hwZh%SOgJg7?hgYu|~w6h#XqL;vltNPxuST9nRiYwrg#0+T| zIS^q?Z-&ix-w)R*jH?g;v*?8{ZaL2}IK~y^K?)XjjwvJkAaXrZjZzfdJ&gWFf6B5k>N$Win@hRJzh=SAzS0scq%UHSP@N+Rz`D< zmcj?EG diff --git a/modules/mcp_client_manager/manager.py b/modules/mcp_client_manager/manager.py index b47c8e78..c9a77ab7 100644 --- a/modules/mcp_client_manager/manager.py +++ b/modules/mcp_client_manager/manager.py @@ -389,7 +389,7 @@ class MCPClientManager: continue yield item - def build_openai_tools( + def build_llm_tools( self, *, ensure_discovery: bool = True, @@ -461,7 +461,7 @@ class MCPClientManager: return self._latest_alias_map[tool_alias] # 容错:从缓存动态重建一遍 - _, rebuilt = self.build_openai_tools(ensure_discovery=False) + _, rebuilt = self.build_llm_tools(ensure_discovery=False) return rebuilt.get(tool_alias) def call_tool_by_alias( diff --git a/modules/shallow_versioning.py b/modules/shallow_versioning.py index e8ee84c0..98462dc6 100644 --- a/modules/shallow_versioning.py +++ b/modules/shallow_versioning.py @@ -1,6 +1,6 @@ """Conversation-scoped shallow file versioning for workspace edits. -Mirrors Claude Code's file-history approach: +Mirrors the file-history approach of mainstream AI coding tools: - Only files touched by write_file / edit_file are tracked. - Before each edit the current content is backed up. - A snapshot is taken per user message, referencing the latest backup version diff --git a/modules/sub_agent/task.py b/modules/sub_agent/task.py index e20442c6..3e8e1bd6 100644 --- a/modules/sub_agent/task.py +++ b/modules/sub_agent/task.py @@ -20,7 +20,7 @@ from modules.sub_agent.toolkit import ( _format_tool_result, _build_sub_agent_profile, ) -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from utils.logger import setup_logger if TYPE_CHECKING: @@ -540,7 +540,7 @@ class SubAgentTask: return True def _build_client(self) -> tuple: - """加载模型配置并初始化 DeepSeekClient。""" + """加载模型配置并初始化 APIClient。""" config_path = self.manager.models_config_file models: List[Dict[str, Any]] = [] default_key = "" @@ -567,7 +567,7 @@ class SubAgentTask: if chosen_key not in model_map: raise RuntimeError(f"未找到可用子智能体模型配置: {config_path}") - client = DeepSeekClient(thinking_mode=(self.thinking_mode == "thinking"), web_mode=True) + client = APIClient(thinking_mode=(self.thinking_mode == "thinking"), web_mode=True) client.model_key = chosen_key client.project_path = str(self.manager.project_path) client.apply_profile(model_map[chosen_key]) @@ -575,7 +575,7 @@ class SubAgentTask: async def _call_model( self, - client: DeepSeekClient, + client: APIClient, model_key: str, tools: List[Dict[str, Any]], ) -> tuple: diff --git a/modules/sub_agent/toolkit.py b/modules/sub_agent/toolkit.py index 356de3b7..6f71ba05 100644 --- a/modules/sub_agent/toolkit.py +++ b/modules/sub_agent/toolkit.py @@ -355,7 +355,7 @@ def _format_tool_result(name: str, raw: Any) -> str: def _build_sub_agent_profile(model_raw: Dict[str, Any]) -> Optional[Dict[str, Any]]: - """把 sub_agent_models.json 中的模型条目转成 DeepSeekClient.apply_profile 所需格式。""" + """把 sub_agent_models.json 中的模型条目转成 APIClient.apply_profile 所需格式。""" name = str(model_raw.get("name") or model_raw.get("model_name") or model_raw.get("model") or "").strip() url = str(_parse_env_ref(model_raw.get("url") or model_raw.get("base_url") or "") or "").strip() api_key = str(_parse_env_ref(model_raw.get("apikey") or model_raw.get("api_key") or "") or "").strip() diff --git a/server/app_legacy.py b/server/app_legacy.py index d4cfe813..7e617e55 100644 --- a/server/app_legacy.py +++ b/server/app_legacy.py @@ -248,7 +248,7 @@ from modules.user_container_manager import UserContainerManager from modules.usage_tracker import UsageTracker, QUOTA_DEFAULTS from utils.tool_result_formatter import format_tool_result_for_context from utils.conversation_manager import ConversationManager -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from .files import files_bp app = Flask(__name__, static_folder=str(PROJECT_ROOT / 'static')) @@ -480,7 +480,7 @@ async def _generate_title_async(user_message: str) -> Optional[str]: if not user_message: _title_debug_log("skip_empty_user_message") return None - client = DeepSeekClient(thinking_mode=False, web_mode=True) + client = APIClient(thinking_mode=False, web_mode=True) try: default_model = get_default_model_key() client.model_key = default_model diff --git a/server/chat_flow_helpers.py b/server/chat_flow_helpers.py index b79708de..e5361f11 100644 --- a/server/chat_flow_helpers.py +++ b/server/chat_flow_helpers.py @@ -10,7 +10,7 @@ from typing import Any, Dict, List, Optional from core.web_terminal import WebTerminal from config import LOGS_DIR -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from config.model_profiles import get_default_model_key, get_model_profile TITLE_DEBUG_DIR = Path(LOGS_DIR).expanduser().resolve() / "title_debug" @@ -51,7 +51,7 @@ async def _generate_title_async( _title_debug_log("skip_empty_user_message") return None - client = DeepSeekClient(thinking_mode=False, web_mode=True) + client = APIClient(thinking_mode=False, web_mode=True) try: default_model = get_default_model_key() client.model_key = default_model diff --git a/server/conversation.py b/server/conversation.py index 9c7df6d3..11853594 100644 --- a/server/conversation.py +++ b/server/conversation.py @@ -57,7 +57,7 @@ from utils.perf_log import perf_log, PerfTimer from core.web_terminal import WebTerminal from utils.tool_result_formatter import format_tool_result_for_context from utils.conversation_manager import ConversationManager -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient from .auth_helpers import api_login_required, resolve_admin_policy, get_current_user_record, get_current_username from .context import with_terminal, get_terminal_for_sid, get_gui_manager, get_upload_guard, build_upload_error_response, ensure_conversation_loaded, reset_system_state, get_user_resources, get_or_create_usage_tracker diff --git a/static/login.html b/static/login.html index fdf0dd5f..9587aa21 100644 --- a/static/login.html +++ b/static/login.html @@ -12,11 +12,11 @@ (function () { try { var key = window.localStorage.getItem('agents_ui_theme'); - var theme = key === 'light' || key === 'dark' || key === 'claude' ? key : 'claude'; + var theme = key === 'light' || key === 'dark' || key === 'classic' ? key : 'classic'; document.documentElement.setAttribute('data-theme', theme); document.body && document.body.setAttribute('data-theme', theme); } catch (_e) { - document.documentElement.setAttribute('data-theme', 'claude'); + document.documentElement.setAttribute('data-theme', 'classic'); } })(); diff --git a/static/register.html b/static/register.html index a1daadd9..aae8d40a 100644 --- a/static/register.html +++ b/static/register.html @@ -12,11 +12,11 @@ (function () { try { var key = window.localStorage.getItem('agents_ui_theme'); - var theme = key === 'light' || key === 'dark' || key === 'claude' ? key : 'claude'; + var theme = key === 'light' || key === 'dark' || key === 'classic' ? key : 'classic'; document.documentElement.setAttribute('data-theme', theme); document.body && document.body.setAttribute('data-theme', theme); } catch (_e) { - document.documentElement.setAttribute('data-theme', 'claude'); + document.documentElement.setAttribute('data-theme', 'classic'); } })(); diff --git a/static/src/admin/AdminDashboardApp.vue b/static/src/admin/AdminDashboardApp.vue index c29dcb59..e0a80813 100644 --- a/static/src/admin/AdminDashboardApp.vue +++ b/static/src/admin/AdminDashboardApp.vue @@ -977,7 +977,7 @@ button { border: none; border-radius: 999px; padding: 10px 18px; - background: var(--claude-highlight); + background: var(--highlight); color: #3b2f1d; font-weight: 600; cursor: pointer; @@ -996,7 +996,7 @@ button:disabled { button:not(:disabled):hover { transform: translateY(-1px); - background: var(--claude-accent); + background: var(--accent); box-shadow: 0 8px 16px rgba(189, 93, 58, 0.25); } @@ -1057,7 +1057,7 @@ button:not(:disabled):hover { border-radius: 28px; padding: 24px; border: 1px solid rgba(118, 103, 84, 0.35); - box-shadow: var(--claude-shadow); + box-shadow: var(--shadow-card); color: #23170b; } @@ -1077,7 +1077,7 @@ button:not(:disabled):hover { .metric-card h3 { margin: 0; font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); letter-spacing: 0.08em; } @@ -1126,7 +1126,7 @@ button:not(:disabled):hover { font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .token-card strong { @@ -1160,7 +1160,7 @@ button:not(:disabled):hover { .token-breakdown-header span { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .token-table-wrapper { @@ -1195,7 +1195,7 @@ button:not(:disabled):hover { .token-empty { margin: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; } @@ -1214,7 +1214,7 @@ button:not(:disabled):hover { .leader-card h3 { margin: 0 0 10px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 14px; } @@ -1234,7 +1234,7 @@ button:not(:disabled):hover { } .leader-card .muted { - color: var(--claude-muted); + color: var(--text-muted); } .table-wrapper { @@ -1274,7 +1274,7 @@ th { .status-badge.online { background: rgba(118, 176, 134, 0.18); - color: var(--claude-success); + color: var(--state-success); } .status-badge.offline { @@ -1284,12 +1284,12 @@ th { .status-badge.warning { background: rgba(217, 152, 69, 0.2); - color: var(--claude-warning); + color: var(--state-warning); } .status-badge.danger { background: rgba(189, 93, 58, 0.18); - color: var(--claude-accent-strong); + color: var(--accent-strong); } .progress-bar { @@ -1302,7 +1302,7 @@ th { .progress-bar span { display: block; height: 100%; - background: linear-gradient(90deg, var(--claude-highlight), var(--claude-accent)); + background: linear-gradient(90deg, var(--highlight), var(--accent)); } .upload-feed { @@ -1329,7 +1329,7 @@ th { display: flex; gap: 10px; flex-wrap: wrap; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; } @@ -1366,7 +1366,7 @@ th { display: inline-flex; align-items: center; gap: 6px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; } @@ -1383,7 +1383,7 @@ th { } .invite-card span { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; } @@ -1416,7 +1416,7 @@ th { align-items: center; justify-content: center; gap: 16px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .spinner { @@ -1497,7 +1497,7 @@ th { .password-field label { font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-weight: 600; } @@ -1569,7 +1569,7 @@ th { .user-search-selected .user-search-email { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -1582,7 +1582,7 @@ th { .user-search-arrow { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); transition: transform 0.15s ease; flex-shrink: 0; } @@ -1650,7 +1650,7 @@ th { .user-search-item .user-search-email { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -1669,7 +1669,7 @@ th { .user-search-empty { padding: 16px; text-align: center; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; } @@ -1686,7 +1686,7 @@ th { border-radius: 12px; cursor: pointer; box-shadow: none; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .password-actions .ghost-btn:hover:not(:disabled) { @@ -1695,7 +1695,7 @@ th { } .password-success { - color: var(--claude-success); + color: var(--state-success); margin: 0; font-weight: 600; } diff --git a/static/src/admin/ApiAdminApp.vue b/static/src/admin/ApiAdminApp.vue index ba2c3c04..a951b3b9 100644 --- a/static/src/admin/ApiAdminApp.vue +++ b/static/src/admin/ApiAdminApp.vue @@ -569,7 +569,7 @@ button { border: none; border-radius: 12px; padding: 10px 14px; - background: var(--claude-highlight); + background: var(--highlight); color: #2a2013; font-weight: 600; cursor: pointer; diff --git a/static/src/admin/CustomToolsApp.vue b/static/src/admin/CustomToolsApp.vue index 7117e741..b9c1292e 100644 --- a/static/src/admin/CustomToolsApp.vue +++ b/static/src/admin/CustomToolsApp.vue @@ -417,7 +417,7 @@ watch(secondaryVerified, async (val) => { diff --git a/static/src/components/chat/actions/ToolAction.vue b/static/src/components/chat/actions/ToolAction.vue index eae9c4f6..df65600b 100644 --- a/static/src/components/chat/actions/ToolAction.vue +++ b/static/src/components/chat/actions/ToolAction.vue @@ -1646,7 +1646,7 @@ function renderListActiveSubAgents(result: any): string { .code-block pre, .output-block pre { scrollbar-width: thin; /* Firefox */ - scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent) transparent; + scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent) transparent; } .tool-result-content.scrollable::-webkit-scrollbar, @@ -1670,7 +1670,7 @@ function renderListActiveSubAgents(result: any): string { .tool-result-diff.scrollable::-webkit-scrollbar-thumb, .code-block pre::-webkit-scrollbar-thumb, .output-block pre::-webkit-scrollbar-thumb { - background: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent); + background: color-mix(in srgb, var(--text-secondary) 55%, transparent); border-radius: 999px; border: 2px solid transparent; background-clip: padding-box; @@ -1771,13 +1771,13 @@ function renderListActiveSubAgents(result: any): string { } .diff-line-number { - color: var(--claude-text-tertiary); + color: var(--text-tertiary); text-align: right; user-select: none; } .diff-marker { - color: var(--claude-text-secondary); + color: var(--text-secondary); text-align: center; user-select: none; } @@ -1800,7 +1800,7 @@ function renderListActiveSubAgents(result: any): string { .diff-separator { text-align: left; - color: var(--claude-text-tertiary); + color: var(--text-tertiary); margin: 8px 0; } diff --git a/static/src/components/chat/loaders/BouncingSquaresLoader.vue b/static/src/components/chat/loaders/BouncingSquaresLoader.vue index 6e9c4c44..afe2d7e2 100644 --- a/static/src/components/chat/loaders/BouncingSquaresLoader.vue +++ b/static/src/components/chat/loaders/BouncingSquaresLoader.vue @@ -28,7 +28,7 @@ width: var(--square-size); height: var(--square-size); left: 15%; - background-color: var(--claude-text-tertiary); + background-color: var(--text-tertiary); transform-origin: 50%; animation: bounce-square 0.5s alternate infinite ease; } diff --git a/static/src/components/chat/loaders/ChaoticOrbitSquaresLoader.vue b/static/src/components/chat/loaders/ChaoticOrbitSquaresLoader.vue index 5f134883..d95689b3 100644 --- a/static/src/components/chat/loaders/ChaoticOrbitSquaresLoader.vue +++ b/static/src/components/chat/loaders/ChaoticOrbitSquaresLoader.vue @@ -25,7 +25,7 @@ position: absolute; width: 3px; height: 3px; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); will-change: transform; } diff --git a/static/src/components/chat/loaders/DotSpinnerSquaresLoader.vue b/static/src/components/chat/loaders/DotSpinnerSquaresLoader.vue index 12a8d3ad..13581c96 100644 --- a/static/src/components/chat/loaders/DotSpinnerSquaresLoader.vue +++ b/static/src/components/chat/loaders/DotSpinnerSquaresLoader.vue @@ -42,7 +42,7 @@ content: ''; width: 3px; height: 3px; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); transform: scale(0); opacity: 0.5; animation: pulse calc(var(--speed) * 1.111) ease-in-out infinite; diff --git a/static/src/components/chat/loaders/DualChaseLoader.vue b/static/src/components/chat/loaders/DualChaseLoader.vue index 3a65a760..b945a77b 100644 --- a/static/src/components/chat/loaders/DualChaseLoader.vue +++ b/static/src/components/chat/loaders/DualChaseLoader.vue @@ -24,7 +24,7 @@ top: 50%; animation: chase-up 2.4s cubic-bezier(0, 0, 0.24, 1.21) infinite; left: 50%; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); } .dual-chase-loader::after { diff --git a/static/src/components/chat/loaders/FiveSquaresLoader.vue b/static/src/components/chat/loaders/FiveSquaresLoader.vue index 7cbce6ce..8f0d45a7 100644 --- a/static/src/components/chat/loaders/FiveSquaresLoader.vue +++ b/static/src/components/chat/loaders/FiveSquaresLoader.vue @@ -23,7 +23,7 @@ .five-squares-loader div { display: inline-block; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); width: var(--square); height: var(--square); position: absolute; diff --git a/static/src/components/chat/loaders/FollowTrackSquaresLoader.vue b/static/src/components/chat/loaders/FollowTrackSquaresLoader.vue index a4a5d943..c352026b 100644 --- a/static/src/components/chat/loaders/FollowTrackSquaresLoader.vue +++ b/static/src/components/chat/loaders/FollowTrackSquaresLoader.vue @@ -25,7 +25,7 @@ position: absolute; left: 50%; margin-left: -1px; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); animation: follow-track 1.25s infinite; } diff --git a/static/src/components/chat/loaders/FourCornerCycleSquaresLoader.vue b/static/src/components/chat/loaders/FourCornerCycleSquaresLoader.vue index 3ba4d02c..fdc927f8 100644 --- a/static/src/components/chat/loaders/FourCornerCycleSquaresLoader.vue +++ b/static/src/components/chat/loaders/FourCornerCycleSquaresLoader.vue @@ -26,7 +26,7 @@ left: 50%; margin-top: -1.5px; margin-left: -1.5px; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); animation: corner-cycle 1.8s ease-in-out infinite; } diff --git a/static/src/components/chat/loaders/JumpingSequenceSquaresLoader.vue b/static/src/components/chat/loaders/JumpingSequenceSquaresLoader.vue index 81750963..67597e08 100644 --- a/static/src/components/chat/loaders/JumpingSequenceSquaresLoader.vue +++ b/static/src/components/chat/loaders/JumpingSequenceSquaresLoader.vue @@ -22,7 +22,7 @@ .sq { width: 3px; height: 3px; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); animation: jump 2s ease infinite; } diff --git a/static/src/components/chat/loaders/LeapFrogSquaresLoader.vue b/static/src/components/chat/loaders/LeapFrogSquaresLoader.vue index 5c465923..21e6e13c 100644 --- a/static/src/components/chat/loaders/LeapFrogSquaresLoader.vue +++ b/static/src/components/chat/loaders/LeapFrogSquaresLoader.vue @@ -38,7 +38,7 @@ content: ''; width: 3px; height: 3px; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); } .dot:nth-child(2) { diff --git a/static/src/components/chat/loaders/NewtonCradleSquaresLoader.vue b/static/src/components/chat/loaders/NewtonCradleSquaresLoader.vue index 4a6cdb81..9c223fc2 100644 --- a/static/src/components/chat/loaders/NewtonCradleSquaresLoader.vue +++ b/static/src/components/chat/loaders/NewtonCradleSquaresLoader.vue @@ -36,7 +36,7 @@ top: 75%; width: 3px; height: 3px; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); } .dot:first-child { diff --git a/static/src/components/chat/loaders/NineGridLoader.vue b/static/src/components/chat/loaders/NineGridLoader.vue index 0e124760..f26f920b 100644 --- a/static/src/components/chat/loaders/NineGridLoader.vue +++ b/static/src/components/chat/loaders/NineGridLoader.vue @@ -38,7 +38,7 @@ top: 0; width: 100%; height: 100%; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); } .box:nth-child(3n) { diff --git a/static/src/components/chat/loaders/OrbitBlurSquaresLoader.vue b/static/src/components/chat/loaders/OrbitBlurSquaresLoader.vue index 9fc4d823..27d7a221 100644 --- a/static/src/components/chat/loaders/OrbitBlurSquaresLoader.vue +++ b/static/src/components/chat/loaders/OrbitBlurSquaresLoader.vue @@ -38,7 +38,7 @@ left: 0; width: var(--size-orbe); height: var(--size-orbe); - background: var(--claude-text-tertiary); + background: var(--text-tertiary); filter: blur(0.35px); } diff --git a/static/src/components/chat/loaders/RippleLoader.vue b/static/src/components/chat/loaders/RippleLoader.vue index 00c4a9e7..9d8d1169 100644 --- a/static/src/components/chat/loaders/RippleLoader.vue +++ b/static/src/components/chat/loaders/RippleLoader.vue @@ -60,7 +60,7 @@ .cell:nth-child(7), .cell:nth-child(8), .cell:nth-child(9) { - --cell-color: var(--claude-text-tertiary); + --cell-color: var(--text-tertiary); } @keyframes ripple { diff --git a/static/src/components/chat/loaders/RotatingSquaresLoader.vue b/static/src/components/chat/loaders/RotatingSquaresLoader.vue index 47fd028e..25a49fed 100644 --- a/static/src/components/chat/loaders/RotatingSquaresLoader.vue +++ b/static/src/components/chat/loaders/RotatingSquaresLoader.vue @@ -100,7 +100,7 @@ width: 3px; height: 3px; margin: 0.5px; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); animation: square-animation 10s ease-in-out infinite both; } diff --git a/static/src/components/chat/loaders/ShadowRollingSquaresLoader.vue b/static/src/components/chat/loaders/ShadowRollingSquaresLoader.vue index a3b89649..7f5d0111 100644 --- a/static/src/components/chat/loaders/ShadowRollingSquaresLoader.vue +++ b/static/src/components/chat/loaders/ShadowRollingSquaresLoader.vue @@ -13,7 +13,7 @@ height: var(--sq); position: relative; left: -10px; - color: var(--claude-text-tertiary); + color: var(--text-tertiary); animation: roll 2s linear infinite; } diff --git a/static/src/components/chat/loaders/SquareGridLoader.vue b/static/src/components/chat/loaders/SquareGridLoader.vue index e262971c..f65bc57a 100644 --- a/static/src/components/chat/loaders/SquareGridLoader.vue +++ b/static/src/components/chat/loaders/SquareGridLoader.vue @@ -34,7 +34,7 @@ } .square { - background: var(--claude-text-tertiary); + background: var(--text-tertiary); width: 3px; height: 3px; position: absolute; diff --git a/static/src/components/chat/loaders/WaveMatrixSquaresLoader.vue b/static/src/components/chat/loaders/WaveMatrixSquaresLoader.vue index 6977b4a3..4c32c7a3 100644 --- a/static/src/components/chat/loaders/WaveMatrixSquaresLoader.vue +++ b/static/src/components/chat/loaders/WaveMatrixSquaresLoader.vue @@ -25,7 +25,7 @@ .sq { width: 3px; height: 3px; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); animation: wave var(--speed) ease-in-out infinite; } diff --git a/static/src/components/chat/quickdock/quickdock.css b/static/src/components/chat/quickdock/quickdock.css index 803be7c6..658b83d5 100644 --- a/static/src/components/chat/quickdock/quickdock.css +++ b/static/src/components/chat/quickdock/quickdock.css @@ -980,9 +980,9 @@ align-items: center; justify-content: center; padding: 0; - /* 线条色与左侧对话记录侧边栏导航图标一致(--claude-text),恒定不变: + /* 线条色与左侧对话记录侧边栏导航图标一致(--text-primary),恒定不变: 无 hover 变色,展开(is-active)状态也不变色 */ - color: var(--claude-text); + color: var(--text-primary); /* 底色与背后面板一致(收起=对话标题栏 / 展开=应用背景,两者同为 --surface-panel) */ background: var(--surface-panel); border: none; diff --git a/static/src/components/input/FileAtMenu.vue b/static/src/components/input/FileAtMenu.vue index eabf4565..1da2d287 100644 --- a/static/src/components/input/FileAtMenu.vue +++ b/static/src/components/input/FileAtMenu.vue @@ -129,7 +129,7 @@ defineExpose(publicApi); max-height: calc( ((var(--file-at-row-height) * 7) + (var(--file-at-gap) * 8) + (var(--file-at-pad-y) * 2)) * 1.5 ); - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: var(--file-at-radius); background: var(--surface-soft); box-shadow: 0 8px 24px var(--shadow-color); @@ -165,7 +165,7 @@ defineExpose(publicApi); border-radius: 7px; padding: 3px 9px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); text-align: left; cursor: pointer; } @@ -184,7 +184,7 @@ defineExpose(publicApi); .file-at-item__name { flex: 0 1 auto; min-width: 0; - color: var(--claude-text); + color: var(--text-primary); font-size: 12px; font-weight: 500; white-space: nowrap; @@ -195,7 +195,7 @@ defineExpose(publicApi); .file-at-item__description { flex: 1 1 auto; min-width: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; white-space: nowrap; overflow: hidden; @@ -209,13 +209,13 @@ defineExpose(publicApi); display: flex; align-items: center; padding: 3px 9px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 11px; } body[data-theme='dark'] .file-at-menu-wrapper { background: var(--badge-bg); - border-color: var(--claude-border); + border-color: var(--border-default); } .file-at-menu-motion-enter-active, diff --git a/static/src/components/input/InputComposer.vue b/static/src/components/input/InputComposer.vue index f7881e12..c899c101 100644 --- a/static/src/components/input/InputComposer.vue +++ b/static/src/components/input/InputComposer.vue @@ -2987,7 +2987,7 @@ onBeforeUnmount(() => { width: 45px; height: 45px; pointer-events: auto; - color: var(--claude-text); + color: var(--text-primary); } .floating-status-row { @@ -3018,7 +3018,7 @@ onBeforeUnmount(() => { justify-content: space-between; gap: 12px; padding: 4px 10px 4px 4px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 14px; background: var(--theme-surface-soft); box-shadow: none; @@ -3037,7 +3037,7 @@ onBeforeUnmount(() => { font-size: 14px; font-weight: 500; line-height: 16px; - color: var(--claude-text-secondary); + color: var(--text-secondary); background: var(--chat-surface-color); padding: 2px 8px; border-radius: 9999px; @@ -3107,7 +3107,7 @@ onBeforeUnmount(() => { border: none; border-radius: 10px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font: inherit; font-size: 12px; line-height: 1.2; @@ -3139,12 +3139,12 @@ onBeforeUnmount(() => { } .floating-project-status__button--branch { - color: var(--claude-text-secondary); + color: var(--text-secondary); } .floating-project-status__notice { padding: 0 8px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .floating-project-status__notice--button { @@ -3221,7 +3221,7 @@ onBeforeUnmount(() => { flex-direction: column; gap: 2px; padding: 6px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 14px; background: var(--theme-surface-soft); box-shadow: none; @@ -3236,7 +3236,7 @@ onBeforeUnmount(() => { border: none; border-radius: 10px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font-size: 14px; line-height: 1.2; text-align: left; @@ -3299,8 +3299,8 @@ onBeforeUnmount(() => { border-radius: 999px; font-size: 12px; line-height: 1.4; - color: var(--claude-text-secondary); - background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--claude-text-tertiary) 8%); + color: var(--text-secondary); + background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--text-tertiary) 8%); border: 1px solid var(--theme-chip-border); user-select: none; transition: @@ -3333,32 +3333,32 @@ onBeforeUnmount(() => { opacity: 0; } .goal-mode-banner--running { - color: var(--claude-accent); - border-color: var(--claude-accent); - background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--claude-accent) 18%); + color: var(--accent); + border-color: var(--accent); + background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--accent) 18%); } .goal-mode-banner--done { - color: var(--claude-success); - border-color: var(--claude-success); - background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--claude-success) 18%); + color: var(--state-success); + border-color: var(--state-success); + background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--state-success) 18%); } :global(:root[data-theme='dark']) .goal-mode-banner, :global(body[data-theme='dark']) .goal-mode-banner { - color: var(--claude-text-secondary); - background: color-mix(in srgb, var(--theme-surface-muted) 82%, var(--claude-text-tertiary) 18%); + color: var(--text-secondary); + background: color-mix(in srgb, var(--theme-surface-muted) 82%, var(--text-tertiary) 18%); border-color: var(--theme-control-border-strong); } :global(:root[data-theme='dark']) .goal-mode-banner--running, :global(body[data-theme='dark']) .goal-mode-banner--running { color: var(--text-primary); - background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--claude-accent) 28%); - border-color: color-mix(in srgb, var(--claude-accent) 70%, white 30%); + background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--accent) 28%); + border-color: color-mix(in srgb, var(--accent) 70%, white 30%); } :global(:root[data-theme='dark']) .goal-mode-banner--done, :global(body[data-theme='dark']) .goal-mode-banner--done { color: color-mix(in srgb, var(--state-success) 30%, white); - background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--claude-success) 28%); - border-color: color-mix(in srgb, var(--claude-success) 70%, white 30%); + background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--state-success) 28%); + border-color: color-mix(in srgb, var(--state-success) 70%, white 30%); } .goal-mode-banner--clickable { cursor: pointer; @@ -3367,14 +3367,14 @@ onBeforeUnmount(() => { width: 7px; height: 7px; border-radius: 50%; - background: var(--claude-text-tertiary); + background: var(--text-tertiary); } .goal-mode-banner--running .goal-mode-banner__dot { - background: var(--claude-accent); + background: var(--accent); animation: goal-banner-pulse 1.4s ease-in-out infinite; } .goal-mode-banner--done .goal-mode-banner__dot { - background: var(--claude-success); + background: var(--state-success); } @keyframes goal-banner-pulse { 0%, diff --git a/static/src/components/input/QuickMenu.vue b/static/src/components/input/QuickMenu.vue index 90b57823..bda74573 100644 --- a/static/src/components/input/QuickMenu.vue +++ b/static/src/components/input/QuickMenu.vue @@ -292,17 +292,17 @@ const goalCompleted = computed(() => String(props.goalProgress?.status || '').to margin-top: 2px; } .menu-entry.goal-entry-active { - color: var(--claude-accent); + color: var(--accent); } .menu-entry.goal-entry-active .entry-arrow { - color: var(--claude-accent); + color: var(--accent); font-size: 12px; } .menu-entry.mode-entry-active { - color: var(--claude-accent); + color: var(--accent); } .menu-entry.mode-entry-active .entry-arrow { - color: var(--claude-accent); + color: var(--accent); font-size: 12px; } diff --git a/static/src/components/overlay/ConversationReviewDialog.vue b/static/src/components/overlay/ConversationReviewDialog.vue index 6e3fd0f8..8ed3aa98 100644 --- a/static/src/components/overlay/ConversationReviewDialog.vue +++ b/static/src/components/overlay/ConversationReviewDialog.vue @@ -192,8 +192,8 @@ const formatUpdatedAt = (value: string | number) => { max-width: 96vw; height: min(700px, 88vh); max-height: 88vh; - background: var(--claude-panel); - border: 1px solid var(--claude-border); + background: var(--surface-panel); + border: 1px solid var(--border-default); border-radius: 16px; box-shadow: var(--theme-shadow-strong); display: flex; @@ -210,7 +210,7 @@ const formatUpdatedAt = (value: string | number) => { align-items: center; justify-content: space-between; gap: 12px; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--border-default); } .header-titles { @@ -221,14 +221,14 @@ const formatUpdatedAt = (value: string | number) => { font-size: 16px; font-weight: 700; line-height: 1.2; - color: var(--claude-text); + color: var(--text-primary); letter-spacing: -0.01em; } .review-header .subtitle { font-size: 12px; line-height: 1.2; - color: var(--claude-text-secondary); + color: var(--text-secondary); margin-top: 4px; } @@ -245,7 +245,7 @@ const formatUpdatedAt = (value: string | number) => { display: inline-flex; align-items: center; font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); padding: 0 10px; border-radius: 8px; background: var(--theme-tab-active); @@ -265,7 +265,7 @@ const formatUpdatedAt = (value: string | number) => { border: 0; border-radius: 9px; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); cursor: pointer; transition: background 140ms ease, @@ -274,7 +274,7 @@ const formatUpdatedAt = (value: string | number) => { .icon-close-btn:hover:not(:disabled) { background: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); } .icon-close-btn:disabled { @@ -291,7 +291,7 @@ const formatUpdatedAt = (value: string | number) => { } .review-left { - border-right: 1px solid var(--claude-border); + border-right: 1px solid var(--border-default); display: flex; flex-direction: column; min-height: 0; @@ -316,12 +316,12 @@ const formatUpdatedAt = (value: string | number) => { .pane-head-label { font-size: 13px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); } .pane-head-meta { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } /* ===== 通用滚动容器:隐藏滚动条,无边框盒子 ===== */ @@ -387,7 +387,7 @@ const formatUpdatedAt = (value: string | number) => { bottom: 14px; width: 3px; border-radius: 999px; - background: var(--claude-text-secondary); + background: var(--text-secondary); } .conversation-item .row { @@ -395,7 +395,7 @@ const formatUpdatedAt = (value: string | number) => { align-items: center; gap: 8px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); } .conversation-item .item-title { @@ -419,13 +419,13 @@ const formatUpdatedAt = (value: string | number) => { font-size: 12px; line-height: 1; background: var(--theme-chip-bg); - color: var(--claude-text-secondary); + color: var(--text-secondary); } .conversation-item .meta { font-size: 12px; line-height: 1; - color: var(--claude-text-secondary); + color: var(--text-secondary); display: flex; gap: 10px; white-space: nowrap; @@ -435,7 +435,7 @@ const formatUpdatedAt = (value: string | number) => { .empty { text-align: center; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; padding: 20px 0; } @@ -453,7 +453,7 @@ const formatUpdatedAt = (value: string | number) => { border-radius: 10px; padding: 0 12px; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; text-align: left; cursor: pointer; @@ -464,7 +464,7 @@ const formatUpdatedAt = (value: string | number) => { .load-more-btn:hover:not(:disabled) { background: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); } .load-more-btn:disabled { @@ -483,7 +483,7 @@ const formatUpdatedAt = (value: string | number) => { gap: 1px; font-family: Menlo, Consolas, 'SFMono-Regular', monospace; font-size: 13px; - color: var(--claude-text); + color: var(--text-primary); white-space: pre-wrap; word-break: break-word; } @@ -503,7 +503,7 @@ const formatUpdatedAt = (value: string | number) => { height: 100%; min-height: 220px; text-align: center; - color: var(--claude-text-secondary); + color: var(--text-secondary); display: flex; flex-direction: column; gap: 10px; @@ -513,23 +513,23 @@ const formatUpdatedAt = (value: string | number) => { } .placeholder-icon { - color: var(--claude-text-tertiary); + color: var(--text-tertiary); opacity: 0.9; } .text-main { font-weight: 600; font-size: 14px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .text-sub { font-size: 12px; - color: var(--claude-text-tertiary); + color: var(--text-tertiary); } .placeholder.error .text-main { - color: var(--claude-warning); + color: var(--state-warning); } /* ===== 底部操作栏 ===== */ @@ -541,7 +541,7 @@ const formatUpdatedAt = (value: string | number) => { align-items: center; justify-content: space-between; gap: 14px; - border-top: 1px solid var(--claude-border); + border-top: 1px solid var(--border-default); } /* 自定义开关(非原生 checkbox 外观),固定高度 */ @@ -551,7 +551,7 @@ const formatUpdatedAt = (value: string | number) => { gap: 10px; height: 38px; font-size: 14px; - color: var(--claude-text); + color: var(--text-primary); cursor: pointer; user-select: none; } @@ -586,7 +586,7 @@ const formatUpdatedAt = (value: string | number) => { } .toggle-send input:checked + .switch { - background: var(--claude-accent-strong); + background: var(--accent-strong); } .toggle-send input:checked + .switch::after { @@ -607,7 +607,7 @@ const formatUpdatedAt = (value: string | number) => { font-size: 14px; font-weight: 600; cursor: pointer; - background: var(--claude-accent); + background: var(--accent); color: var(--on-accent); transition: background 140ms ease, @@ -615,7 +615,7 @@ const formatUpdatedAt = (value: string | number) => { } .primary-btn:hover:not(:disabled) { - background: var(--claude-button-hover); + background: var(--accent-hover); } .primary-btn:disabled, @@ -636,7 +636,7 @@ const formatUpdatedAt = (value: string | number) => { } .review-left { border-right: none; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--border-default); } } diff --git a/static/src/components/overlay/GoalProgressDialog.vue b/static/src/components/overlay/GoalProgressDialog.vue index 33ae215f..3d3902f3 100644 --- a/static/src/components/overlay/GoalProgressDialog.vue +++ b/static/src/components/overlay/GoalProgressDialog.vue @@ -168,51 +168,51 @@ const stoppedReasonLabel = computed(() => { padding: 2px 10px; border-radius: 999px; border: 1px solid var(--theme-chip-border); - background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--claude-text-tertiary) 8%); - color: var(--claude-text-secondary); + background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--text-tertiary) 8%); + color: var(--text-secondary); } .goal-progress-status.is-running { - color: var(--claude-accent); - border-color: var(--claude-accent); - background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--claude-accent) 18%); + color: var(--accent); + border-color: var(--accent); + background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--accent) 18%); } .goal-progress-status.is-done { - color: var(--claude-success); - border-color: var(--claude-success); - background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--claude-success) 18%); + color: var(--state-success); + border-color: var(--state-success); + background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--state-success) 18%); } .goal-progress-status.is-stopped { - color: var(--claude-warning); - border-color: var(--claude-warning); - background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--claude-warning) 18%); + color: var(--state-warning); + border-color: var(--state-warning); + background: color-mix(in srgb, var(--theme-surface-soft) 82%, var(--state-warning) 18%); } :global(:root[data-theme='dark']) .goal-progress-status, :global(body[data-theme='dark']) .goal-progress-status { - color: var(--claude-text-secondary); - background: color-mix(in srgb, var(--theme-surface-muted) 82%, var(--claude-text-tertiary) 18%); + color: var(--text-secondary); + background: color-mix(in srgb, var(--theme-surface-muted) 82%, var(--text-tertiary) 18%); border-color: var(--theme-control-border-strong); } :global(:root[data-theme='dark']) .goal-progress-status.is-running, :global(body[data-theme='dark']) .goal-progress-status.is-running { color: var(--text-primary); - background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--claude-accent) 28%); - border-color: color-mix(in srgb, var(--claude-accent) 70%, white 30%); + background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--accent) 28%); + border-color: color-mix(in srgb, var(--accent) 70%, white 30%); } :global(:root[data-theme='dark']) .goal-progress-status.is-done, :global(body[data-theme='dark']) .goal-progress-status.is-done { color: color-mix(in srgb, var(--state-success) 30%, white); - background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--claude-success) 28%); - border-color: color-mix(in srgb, var(--claude-success) 70%, white 30%); + background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--state-success) 28%); + border-color: color-mix(in srgb, var(--state-success) 70%, white 30%); } :global(:root[data-theme='dark']) .goal-progress-status.is-stopped, :global(body[data-theme='dark']) .goal-progress-status.is-stopped { color: color-mix(in srgb, var(--state-warning) 30%, white); - background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--claude-warning) 28%); - border-color: color-mix(in srgb, var(--claude-warning) 70%, white 30%); + background: color-mix(in srgb, var(--theme-surface-muted) 72%, var(--state-warning) 28%); + border-color: color-mix(in srgb, var(--state-warning) 70%, white 30%); } .goal-progress-goal { font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -234,16 +234,16 @@ const stoppedReasonLabel = computed(() => { .goal-metric__value { font-size: 18px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); } .goal-metric__label { margin-top: 4px; font-size: 11px; - color: var(--claude-text-tertiary); + color: var(--text-tertiary); } .goal-progress-reason { font-size: 13px; - color: var(--claude-warning); + color: var(--state-warning); margin-bottom: 10px; } .goal-progress-summary { @@ -252,13 +252,13 @@ const stoppedReasonLabel = computed(() => { } .goal-progress-summary__title { font-size: 12px; - color: var(--claude-text-tertiary); + color: var(--text-tertiary); margin-bottom: 6px; } .goal-progress-summary__body { font-size: 13px; line-height: 1.6; - color: var(--claude-text); + color: var(--text-primary); white-space: pre-wrap; word-break: break-word; max-height: 240px; diff --git a/static/src/components/overlay/NewUserTutorialPrompt.vue b/static/src/components/overlay/NewUserTutorialPrompt.vue index 4d8eab55..6dd608a9 100644 --- a/static/src/components/overlay/NewUserTutorialPrompt.vue +++ b/static/src/components/overlay/NewUserTutorialPrompt.vue @@ -100,13 +100,13 @@ button { .primary { border: none; - background: linear-gradient(135deg, var(--claude-accent), var(--claude-accent-strong)); + background: linear-gradient(135deg, var(--accent), var(--accent-strong)); color: var(--on-accent); } .ghost { background: var(--theme-surface-soft); - color: var(--claude-text); + color: var(--text-primary); } button:hover:not(:disabled) { diff --git a/static/src/components/overlay/PathAuthorizationDialog.vue b/static/src/components/overlay/PathAuthorizationDialog.vue index 160c694d..6757c8ca 100644 --- a/static/src/components/overlay/PathAuthorizationDialog.vue +++ b/static/src/components/overlay/PathAuthorizationDialog.vue @@ -66,7 +66,7 @@ defineEmits<{ .overlay-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; } .overlay-header h3 { margin: 0; font-size: 16px; } .overlay-header button { border: none; background: transparent; font-size: 20px; cursor: pointer; } -.hint { font-size: 12px; color: var(--claude-text-secondary); margin: 0 0 8px 0; } +.hint { font-size: 12px; color: var(--text-secondary); margin: 0 0 8px 0; } .mode-switch { display: inline-flex; border: 1px solid var(--theme-control-border); border-radius: 10px; overflow: hidden; margin-bottom: 8px; } .mode-btn { border: none; background: transparent; padding: 6px 10px; cursor: pointer; font-size: 12px; } .mode-btn.active { background: var(--theme-tab-active); font-weight: 600; } diff --git a/static/src/components/overlay/UserQuestionDialog.vue b/static/src/components/overlay/UserQuestionDialog.vue index 3eaaf815..ba34973f 100644 --- a/static/src/components/overlay/UserQuestionDialog.vue +++ b/static/src/components/overlay/UserQuestionDialog.vue @@ -164,7 +164,7 @@ function submit() { max-height: min(520px, calc(100vh - 36px)); display: flex; flex-direction: column; - color: var(--claude-text); + color: var(--text-primary); background: var(--theme-surface-card); border: 1px solid var(--theme-control-border); border-radius: 20px; @@ -178,7 +178,7 @@ function submit() { grid-template-columns: 56px 1fr 56px; align-items: center; border-bottom: 1px solid var(--theme-control-border); - background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--claude-left-rail) 8%); + background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--surface-rail) 8%); } .user-question-traffic { @@ -203,7 +203,7 @@ function submit() { text-align: center; font-size: 13px; font-weight: 600; - color: var(--claude-text-secondary); + color: var(--text-secondary); user-select: none; } @@ -226,7 +226,7 @@ function submit() { } .user-question-kicker { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; } @@ -257,7 +257,7 @@ function submit() { border-radius: 6px; border: 1px solid var(--theme-control-border); background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); cursor: pointer; display: grid; place-items: center; @@ -271,7 +271,7 @@ function submit() { .user-question-nav button:hover:not(:disabled) { background: var(--hover-bg); - color: var(--claude-text); + color: var(--text-primary); } .user-question-nav button:disabled { @@ -298,7 +298,7 @@ function submit() { .user-question-context { margin: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); line-height: 1.6; font-size: 13px; white-space: pre-wrap; @@ -315,7 +315,7 @@ function submit() { border: 1px solid var(--theme-control-border); border-radius: 12px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); padding: 9px 11px; text-align: left; cursor: pointer; @@ -339,7 +339,7 @@ function submit() { } .user-question-option__desc { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; line-height: 1.42; white-space: pre-wrap; @@ -364,7 +364,7 @@ function submit() { border: 1px solid var(--theme-control-border); border-radius: 12px; padding: 10px 11px; - color: var(--claude-text); + color: var(--text-primary); background: var(--theme-surface-soft); outline: none; font: inherit; @@ -388,7 +388,7 @@ function submit() { gap: 12px; padding: 0 18px; border-top: 1px solid var(--theme-control-border); - background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--claude-left-rail) 8%); + background: color-mix(in srgb, var(--theme-surface-soft) 92%, var(--surface-rail) 8%); } .user-question-spacer { @@ -412,22 +412,22 @@ function submit() { .user-question-btn.ghost { background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .user-question-btn.ghost:hover { background: var(--hover-bg); - color: var(--claude-text); + color: var(--text-primary); } .user-question-btn.primary { - background: var(--claude-accent); - border-color: var(--claude-accent-strong); + background: var(--accent); + border-color: var(--accent-strong); color: var(--on-accent); } .user-question-btn.primary:hover:not(:disabled) { - background: var(--claude-button-hover); + background: var(--accent-hover); } .user-question-btn:disabled { diff --git a/static/src/components/overlay/VersioningDialog.vue b/static/src/components/overlay/VersioningDialog.vue index 10af0fc1..e0acc28c 100644 --- a/static/src/components/overlay/VersioningDialog.vue +++ b/static/src/components/overlay/VersioningDialog.vue @@ -253,12 +253,12 @@ const splitDiffContent = (content: any): string[] => { max-height: 88vh; overflow: hidden; border-radius: 16px; - background: var(--claude-panel); - border: 1px solid var(--claude-border); + background: var(--surface-panel); + border: 1px solid var(--border-default); box-shadow: var(--theme-shadow-strong); display: flex; flex-direction: column; - color: var(--claude-text); + color: var(--text-primary); } /* ===== 头部:固定高度,靠分隔线 ===== */ @@ -266,7 +266,7 @@ const splitDiffContent = (content: any): string[] => { flex: 0 0 auto; height: 60px; padding: 0 18px; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--border-default); display: flex; align-items: center; justify-content: space-between; @@ -334,7 +334,7 @@ const splitDiffContent = (content: any): string[] => { } .switch-line input:checked + .switch { - background: var(--claude-accent-strong); + background: var(--accent-strong); } .switch-line input:checked + .switch::after { @@ -355,7 +355,7 @@ const splitDiffContent = (content: any): string[] => { align-items: center; gap: 8px; font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .scope-label { @@ -372,10 +372,10 @@ const splitDiffContent = (content: any): string[] => { align-items: center; gap: 8px; padding: 0 10px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 9px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font-size: 13px; cursor: pointer; transition: @@ -412,8 +412,8 @@ const splitDiffContent = (content: any): string[] => { left: 1px; width: 6px; height: 6px; - border-right: 1.5px solid var(--claude-text-secondary); - border-bottom: 1.5px solid var(--claude-text-secondary); + border-right: 1.5px solid var(--text-secondary); + border-bottom: 1.5px solid var(--text-secondary); transform: rotate(45deg); transition: transform 160ms ease; } @@ -431,7 +431,7 @@ const splitDiffContent = (content: any): string[] => { width: max-content; z-index: 20; padding: 6px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 12px; background: var(--theme-surface-strong); box-shadow: var(--theme-shadow-soft); @@ -450,7 +450,7 @@ const splitDiffContent = (content: any): string[] => { border: 0; border-radius: 9px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font-size: 13px; text-align: left; cursor: pointer; @@ -470,7 +470,7 @@ const splitDiffContent = (content: any): string[] => { .scope-option-check { flex: 0 0 auto; - color: var(--claude-text-secondary); + color: var(--text-secondary); } /* ===== 头部按钮 ===== */ @@ -480,10 +480,10 @@ const splitDiffContent = (content: any): string[] => { align-items: center; gap: 6px; padding: 0 12px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 9px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font-size: 13px; cursor: pointer; transition: background 140ms ease; @@ -506,7 +506,7 @@ const splitDiffContent = (content: any): string[] => { border: 0; border-radius: 9px; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); cursor: pointer; transition: background 140ms ease, @@ -515,7 +515,7 @@ const splitDiffContent = (content: any): string[] => { .icon-close-btn:hover { background: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); } /* ===== 主体:左右分栏靠竖线 ===== */ @@ -540,7 +540,7 @@ const splitDiffContent = (content: any): string[] => { } .checkpoint-list { - border-right: 1px solid var(--claude-border); + border-right: 1px solid var(--border-default); padding: 6px 8px; display: flex; flex-direction: column; @@ -558,7 +558,7 @@ const splitDiffContent = (content: any): string[] => { border-radius: 10px; padding: 0 12px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); cursor: pointer; overflow: hidden; display: flex; @@ -585,7 +585,7 @@ const splitDiffContent = (content: any): string[] => { bottom: 16px; width: 3px; border-radius: 999px; - background: var(--claude-text-secondary); + background: var(--text-secondary); } .row { @@ -597,18 +597,18 @@ const splitDiffContent = (content: any): string[] => { .row.top { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .seq { font-weight: 700; - color: var(--claude-text); + color: var(--text-primary); } .preview { font-size: 13px; line-height: 1.3; - color: var(--claude-text); + color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -628,7 +628,7 @@ const splitDiffContent = (content: any): string[] => { } .files { - color: var(--claude-text-secondary); + color: var(--text-secondary); } .checkpoint-detail { @@ -664,7 +664,7 @@ const splitDiffContent = (content: any): string[] => { gap: 10px; align-items: center; min-height: 40px; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--border-default); padding: 0 4px; font-size: 13px; cursor: pointer; @@ -682,12 +682,12 @@ const splitDiffContent = (content: any): string[] => { .status { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .path { word-break: break-all; - color: var(--claude-text); + color: var(--text-primary); } .delta { @@ -697,7 +697,7 @@ const splitDiffContent = (content: any): string[] => { .loading, .empty { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; padding: 12px 4px; } @@ -707,7 +707,7 @@ const splitDiffContent = (content: any): string[] => { flex: 0 0 auto; min-height: 60px; padding: 12px 18px; - border-top: 1px solid var(--claude-border); + border-top: 1px solid var(--border-default); display: flex; align-items: center; gap: 16px; @@ -729,7 +729,7 @@ const splitDiffContent = (content: any): string[] => { .restore-option-label { font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); white-space: nowrap; } @@ -742,10 +742,10 @@ const splitDiffContent = (content: any): string[] => { .restore-option-btn { height: 32px; padding: 0 12px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 9px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font-size: 13px; cursor: pointer; white-space: nowrap; @@ -760,8 +760,8 @@ const splitDiffContent = (content: any): string[] => { } .restore-option-btn.active { - border-color: var(--claude-accent); - background: var(--claude-accent); + border-color: var(--accent); + background: var(--accent); color: var(--on-accent); } @@ -782,14 +782,14 @@ const splitDiffContent = (content: any): string[] => { padding: 0 18px; font-size: 14px; font-weight: 600; - background: var(--claude-accent); + background: var(--accent); color: var(--on-accent); cursor: pointer; transition: background 140ms ease; } .confirm-btn:hover:not(:disabled) { - background: var(--claude-button-hover); + background: var(--accent-hover); } .confirm-btn:disabled { @@ -810,7 +810,7 @@ const splitDiffContent = (content: any): string[] => { .tool-result-diff.scroll-area { max-height: calc(8 * 1.5em + 16px); - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 8px; padding: 8px; background: var(--theme-surface-soft); @@ -829,7 +829,7 @@ const splitDiffContent = (content: any): string[] => { } .diff-marker { - color: var(--claude-text-secondary); + color: var(--text-secondary); text-align: center; user-select: none; } @@ -853,13 +853,13 @@ const splitDiffContent = (content: any): string[] => { .diff-context { background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .approval-note { padding: 6px 8px; font-size: 11px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } @media (max-width: 860px) { @@ -869,7 +869,7 @@ const splitDiffContent = (content: any): string[] => { } .checkpoint-list { border-right: none; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--border-default); } } diff --git a/static/src/components/panels/TerminalPanel.vue b/static/src/components/panels/TerminalPanel.vue index ab78cc71..5dfa1789 100644 --- a/static/src/components/panels/TerminalPanel.vue +++ b/static/src/components/panels/TerminalPanel.vue @@ -560,7 +560,7 @@ onBeforeUnmount(() => { .terminal-panel__close:hover { background: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); box-shadow: 0 1px 2px var(--shadow-color); } diff --git a/static/src/components/panels/ToolApprovalPanel.vue b/static/src/components/panels/ToolApprovalPanel.vue index 1867692e..347bcd81 100644 --- a/static/src/components/panels/ToolApprovalPanel.vue +++ b/static/src/components/panels/ToolApprovalPanel.vue @@ -290,26 +290,26 @@ const parseFinalMessage = (text: string) => { .tool-approval-panel.is-goal-approval-mode .auto-approval-block { background: var(--theme-surface-card); border-color: var(--theme-control-border); - color: var(--claude-text); + color: var(--text-primary); } .tool-approval-panel.is-goal-approval-mode .auto-approval-block__content, .tool-approval-panel.is-goal-approval-mode .auto-approval-block__reason { - color: var(--claude-text-secondary); + color: var(--text-secondary); } .tool-approval-panel.is-goal-approval-mode .auto-approval-block__decision { - color: var(--claude-text); + color: var(--text-primary); } :global(:root[data-theme='dark']) .auto-approval-block, :global(body[data-theme='dark']) .auto-approval-block { background: color-mix(in srgb, var(--theme-surface-muted) 86%, white 4%); border-color: var(--theme-control-border-strong); - color: var(--claude-text); + color: var(--text-primary); } :global(:root[data-theme='dark']) .auto-approval-block__content, :global(body[data-theme='dark']) .auto-approval-block__content { - color: var(--claude-text-secondary); + color: var(--text-secondary); } diff --git a/static/src/components/personalization/PersonalizationDrawer.vue b/static/src/components/personalization/PersonalizationDrawer.vue index 73022ab3..f67a9e8c 100644 --- a/static/src/components/personalization/PersonalizationDrawer.vue +++ b/static/src/components/personalization/PersonalizationDrawer.vue @@ -1740,7 +1740,7 @@ key="sub-agents" class="settings-page" > -

+
管理多智能体模式下的子智能体角色。预设角色可编辑(创建自定义覆盖),自定义角色可创建/编辑/删除。
@@ -3212,7 +3212,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .sub-agent-role-name { font-size: 14px; font-weight: 550; - color: var(--claude-text); + color: var(--text-primary); display: flex; align-items: center; gap: 6px; @@ -3224,22 +3224,22 @@ const applyThemeOption = async (theme: ThemeKey) => { font-weight: 400; } .sub-agent-role-tag.tag-preset { - background: color-mix(in srgb, var(--claude-text-secondary) 15%, transparent); - color: var(--claude-text-secondary); + background: color-mix(in srgb, var(--text-secondary) 15%, transparent); + color: var(--text-secondary); } .sub-agent-role-tag.tag-custom { - background: color-mix(in srgb, var(--claude-accent) 15%, transparent); - color: var(--claude-accent); + background: color-mix(in srgb, var(--accent) 15%, transparent); + color: var(--accent); } .sub-agent-role-desc { font-size: 12.5px; - color: var(--claude-text-secondary); + color: var(--text-secondary); margin-top: 3px; line-height: 1.38; } .sub-agent-role-meta { font-size: 11px; - color: var(--claude-text-secondary); + color: var(--text-secondary); opacity: 0.7; margin-top: 2px; } @@ -3274,7 +3274,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .role-editor-header h2 { font-size: 20px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); margin: 0; } .role-editor-body { @@ -3301,10 +3301,10 @@ const applyThemeOption = async (theme: ThemeKey) => { .settings-section-title { font-size: 14px; font-weight: 550; - color: var(--claude-text); + color: var(--text-primary); } .settings-empty-hint { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; padding: 24px 0; text-align: center; @@ -3345,7 +3345,7 @@ const applyThemeOption = async (theme: ThemeKey) => { border: 0; border-radius: 50%; background: transparent; - color: var(--claude-text); + color: var(--text-primary); display: grid; place-items: center; cursor: pointer; @@ -3399,7 +3399,7 @@ const applyThemeOption = async (theme: ThemeKey) => { border: 0; border-radius: 12px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); padding: 0 13px; display: flex; align-items: center; @@ -3458,7 +3458,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .settings-redesign-content-header h2 { margin: 0; - color: var(--claude-text); + color: var(--text-primary); font-size: 28px; line-height: 1; letter-spacing: -0.045em; @@ -3515,7 +3515,7 @@ const applyThemeOption = async (theme: ThemeKey) => { align-items: center; gap: 18px; padding: 11px 0; - color: var(--claude-text); + color: var(--text-primary); } .settings-list-row.tall, @@ -3534,7 +3534,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .settings-row-title { display: block; - color: var(--claude-text); + color: var(--text-primary); font-size: 14px; font-weight: 550; letter-spacing: -0.01em; @@ -3544,7 +3544,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .settings-row-desc { display: block; margin-top: 3px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12.5px; line-height: 1.38; } @@ -3562,7 +3562,7 @@ const applyThemeOption = async (theme: ThemeKey) => { border: 0; border-radius: 12px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); display: inline-flex; align-items: center; justify-content: center; @@ -3648,7 +3648,7 @@ const applyThemeOption = async (theme: ThemeKey) => { border: 0; border-radius: 12px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); display: grid; grid-template-columns: minmax(0, 1fr) 22px; row-gap: 0; @@ -3672,7 +3672,7 @@ const applyThemeOption = async (theme: ThemeKey) => { grid-column: 1; grid-row: 1; display: block; - color: var(--claude-text); + color: var(--text-primary); font-size: 15px; font-weight: 550; letter-spacing: -0.01em; @@ -3684,7 +3684,7 @@ const applyThemeOption = async (theme: ThemeKey) => { grid-row: 2; display: block; margin-top: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 11px; line-height: 1.15; min-width: 0; @@ -3701,7 +3701,7 @@ const applyThemeOption = async (theme: ThemeKey) => { width: 21px; height: 21px; fill: none; - stroke: var(--claude-text); + stroke: var(--text-primary); stroke-width: 2.25; stroke-linecap: round; stroke-linejoin: round; @@ -3721,7 +3721,7 @@ const applyThemeOption = async (theme: ThemeKey) => { border: 1px solid var(--theme-control-border); border-radius: 12px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); padding: 0 12px; outline: none; font-size: 13px; @@ -3740,7 +3740,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .settings-section-divider__label { font-size: 12px; font-weight: 600; - color: var(--claude-text-secondary); + color: var(--text-secondary); letter-spacing: 0.04em; } .settings-section-divider::after { @@ -3761,7 +3761,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .settings-number-row input:focus, .settings-number-input:focus, .settings-compression-grid input:focus { - border-color: var(--claude-text-secondary); + border-color: var(--text-secondary); box-shadow: none; } @@ -3798,7 +3798,7 @@ const applyThemeOption = async (theme: ThemeKey) => { border: 1px solid var(--theme-control-border); border-radius: 999px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); min-height: 32px; padding: 0 12px; font-size: 12px; @@ -3814,13 +3814,13 @@ const applyThemeOption = async (theme: ThemeKey) => { .settings-chip-row button.active, .settings-primary-button { - border-color: var(--claude-accent); - background: var(--claude-accent); + border-color: var(--accent); + background: var(--accent); color: var(--on-accent); } .settings-secondary-button.danger { - color: var(--claude-warning); + color: var(--state-warning); } .settings-inline-actions { @@ -3836,12 +3836,12 @@ const applyThemeOption = async (theme: ThemeKey) => { } .settings-mini-status { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; } .settings-mini-status.warning { - color: var(--claude-warning); + color: var(--state-warning); } .settings-add-row, @@ -3865,7 +3865,7 @@ const applyThemeOption = async (theme: ThemeKey) => { flex-direction: column; gap: 10px; padding: 14px 0; - color: var(--claude-text); + color: var(--text-primary); } .settings-textarea-row textarea { @@ -3875,7 +3875,7 @@ const applyThemeOption = async (theme: ThemeKey) => { border: 1px solid var(--theme-control-border); border-radius: 12px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); padding: 12px; outline: none; font-size: 13px; @@ -3886,12 +3886,12 @@ const applyThemeOption = async (theme: ThemeKey) => { } .settings-textarea-row textarea:focus { - border-color: var(--claude-text-secondary); + border-color: var(--text-secondary); box-shadow: none; } .settings-textarea-row textarea::placeholder { - color: var(--claude-text-secondary); + color: var(--text-secondary); opacity: 0.6; } @@ -3926,7 +3926,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .fancy-path { fill: none; - stroke: var(--claude-text-secondary); + stroke: var(--text-secondary); stroke-width: 5; stroke-linecap: round; stroke-linejoin: round; @@ -3939,7 +3939,7 @@ const applyThemeOption = async (theme: ThemeKey) => { } .settings-toggle-row input:checked + .fancy-check .fancy-path { - stroke: var(--claude-text-secondary); + stroke: var(--text-secondary); stroke-dasharray: 70.5096664428711 9999999; stroke-dashoffset: -262.2723388671875; } @@ -3975,7 +3975,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .settings-compression-grid label { display: grid; gap: 5px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; } @@ -4003,12 +4003,12 @@ const applyThemeOption = async (theme: ThemeKey) => { } .status.success { - color: var(--claude-success); + color: var(--state-success); } .status.error, .usage-summary-error { - color: var(--claude-warning); + color: var(--state-warning); } .usage-summary-page { @@ -4035,7 +4035,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .usage-summary-eyebrow { margin: 0; font-size: 11px; - color: var(--claude-accent-strong); + color: var(--accent-strong); letter-spacing: 0.16em; text-transform: uppercase; } @@ -4044,7 +4044,7 @@ const applyThemeOption = async (theme: ThemeKey) => { .usage-summary-note, .usage-summary-meta { margin: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; } @@ -4070,22 +4070,22 @@ const applyThemeOption = async (theme: ThemeKey) => { .usage-summary-item .label { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .usage-summary-item .value { margin-top: 4px; font-size: 20px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); } .usage-summary-item .value--success { - color: var(--claude-success); + color: var(--state-success); } .usage-summary-item .value--warning { - color: var(--claude-warning); + color: var(--state-warning); } .usage-summary-meta { @@ -4101,7 +4101,7 @@ const applyThemeOption = async (theme: ThemeKey) => { border-radius: 999px; padding: 7px 14px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font-size: 12px; cursor: pointer; } diff --git a/static/src/styles/base/_global.scss b/static/src/styles/base/_global.scss index 8dde4f02..551c5641 100644 --- a/static/src/styles/base/_global.scss +++ b/static/src/styles/base/_global.scss @@ -7,8 +7,8 @@ body { body { font-family: 'Iowan Old Style', ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - background: var(--claude-bg); - color: var(--claude-text); + background: var(--surface-base); + color: var(--text-primary); overflow: hidden; -webkit-font-smoothing: antialiased; } @@ -21,8 +21,8 @@ select { } body[data-theme='dark'] { - background: var(--claude-bg); - color: var(--claude-text); + background: var(--surface-base); + color: var(--text-primary); } /* Remove iOS/Android WebView default tap highlight */ diff --git a/static/src/styles/base/_tokens.scss b/static/src/styles/base/_tokens.scss index 0e0bacfa..b5db9de8 100644 --- a/static/src/styles/base/_tokens.scss +++ b/static/src/styles/base/_tokens.scss @@ -47,37 +47,16 @@ --effort-dot-uncovered: rgba(0, 0, 0, 0.28); /* === 兼容别名(旧 token 名 → 新语义 token),迁移完成后删除 === */ - --claude-bg: var(--surface-base); - --claude-panel: var(--surface-panel); - --claude-left-rail: var(--surface-rail); - --claude-sidebar: var(--surface-sidebar); --theme-surface-card: var(--surface-card); --theme-surface-strong: var(--surface-raised); --theme-surface-soft: var(--surface-soft); --theme-surface-muted: var(--surface-muted); - --claude-text: var(--text-primary); - --claude-text-secondary: var(--text-secondary); - --claude-text-tertiary: var(--text-tertiary); - --claude-muted: var(--text-muted); - --claude-border: var(--border-default); - --claude-border-strong: var(--border-strong); --theme-card-border-strong: var(--border-card-strong); --theme-chip-border: var(--chip-border); - --claude-accent: var(--accent); - --claude-accent-strong: var(--accent-strong); - --claude-button-hover: var(--accent-hover); - --claude-button-active: var(--accent-active); - --claude-deep: var(--accent-deep); - --claude-deep-strong: var(--accent-deep-strong); - --claude-success: var(--state-success); - --claude-warning: var(--state-warning); - --claude-danger: var(--state-danger); - --claude-highlight: var(--highlight); --theme-tab-active: var(--tab-active); --theme-chip-bg: var(--chip-bg); --theme-badge-bg: var(--badge-bg); --theme-switch-track: var(--switch-track); - --claude-shadow: var(--shadow-card); --theme-shadow-soft: var(--shadow-soft); --theme-shadow-mid: var(--shadow-mid); --theme-shadow-strong: var(--shadow-strong); @@ -93,7 +72,7 @@ :root[data-theme='classic'] { color-scheme: light; - /* Surface 表面层级 —— Claude 亮色暖奶油盘(canvas table, @@ -838,7 +838,7 @@ .user-message.user-message--multi-agent .bubble-text th, .user-message.user-message--multi-agent .bubble-text td { - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); padding: 6px 10px; text-align: left; vertical-align: middle; @@ -847,7 +847,7 @@ .user-message.user-message--multi-agent .bubble-text th { font-weight: 600; - background: color-mix(in srgb, var(--claude-text) 7%, var(--chip-bg)); + background: color-mix(in srgb, var(--text-primary) 7%, var(--chip-bg)); } .message-block--last @@ -894,7 +894,7 @@ .assistant-message .message-header { font-size: 14px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); margin-bottom: 10px; letter-spacing: 0.02em; } @@ -903,13 +903,13 @@ margin-left: 8px; font-size: 12px; font-weight: 500; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .assistant-generating-placeholder { display: inline-flex; align-items: center; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 14px; font-weight: 500; letter-spacing: 0.05em; @@ -945,7 +945,7 @@ font-size: 15px; line-height: 1.6; box-shadow: none; - color: var(--claude-text); + color: var(--text-primary); white-space: pre-wrap; word-break: break-all; overflow-wrap: normal; @@ -967,7 +967,7 @@ padding: 10px 14px; border-radius: 14px; font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); background: var(--theme-surface-card); border: 1px solid var(--theme-control-border); } @@ -984,7 +984,7 @@ gap: 14px; width: 100%; margin: 2px auto; - color: var(--claude-text-secondary); + color: var(--text-secondary); user-select: none; } @@ -1094,14 +1094,14 @@ transform: none; pointer-events: auto; background: transparent; - color: var(--claude-text-tertiary); + color: var(--text-tertiary); border-radius: 4px; transition: color 140ms ease; } .user-bubble-expand-row .user-bubble-expand-btn:hover { background: transparent; - color: var(--claude-text); + color: var(--text-primary); } .user-bubble-actions { @@ -1122,7 +1122,7 @@ .user-bubble-time { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); margin-left: auto; padding-left: 8px; line-height: 20px; @@ -1143,7 +1143,7 @@ border-radius: 6px; padding: 0; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); cursor: pointer; display: inline-flex; align-items: center; @@ -1156,7 +1156,7 @@ .user-bubble-action-btn:hover { background-color: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); } .user-bubble-action-btn::before { @@ -1195,8 +1195,8 @@ } .assistant-message .message-text { - background: var(--claude-highlight); - border-left: 4px solid var(--claude-accent); + background: var(--highlight); + border-left: 4px solid var(--accent); } .user-message .message-text.user-bubble-text .image-inline-row { @@ -1237,7 +1237,7 @@ margin: 0; font-size: 15px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); letter-spacing: 0.08em; background: transparent; border: none; @@ -1273,7 +1273,7 @@ font-family: 'SF Mono', 'Monaco', 'Consolas', monospace; font-size: 13px; line-height: 1.6; - color: var(--claude-text-secondary); + color: var(--text-secondary); scrollbar-width: none; } @@ -1286,7 +1286,7 @@ border-radius: 12px; margin-bottom: 12px; overflow: hidden; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: none; } @@ -1307,7 +1307,7 @@ } .collapsible-header:hover { - background: var(--claude-highlight); + background: var(--highlight); } /* 深色模式下块 hover 对齐对话列表 hover 颜色 */ @@ -1330,7 +1330,7 @@ body[data-theme='dark'] .collapsible-header:hover { mask-position: center; -webkit-mask-position: center; transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); - color: var(--claude-text-secondary); + color: var(--text-secondary); } /* 移除旧的 ::before 箭头 */ @@ -1357,7 +1357,7 @@ body[data-theme='dark'] .collapsible-header:hover { align-items: center; gap: 6px; font-size: 14px; - color: var(--claude-text); + color: var(--text-primary); } .collapsible-content { @@ -1402,7 +1402,7 @@ body[data-theme='dark'] .collapsible-header:hover { padding: 13px 13px 13px 37px; font-size: 13px; line-height: 1.6; - color: var(--claude-text-secondary); + color: var(--text-secondary); scrollbar-width: none; } @@ -1438,9 +1438,9 @@ body[data-theme='dark'] .collapsible-header:hover { .stacked-shell { position: relative; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 16px; - background: var(--claude-card); + background: var(--surface-card); box-shadow: none; overflow: hidden; min-height: 0; @@ -1458,7 +1458,7 @@ body[data-theme='dark'] .collapsible-header:hover { } .stacked-item { - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--border-default); } .stacked-item:last-child { @@ -1481,8 +1481,8 @@ body[data-theme='dark'] .collapsible-header:hover { .stacked-more-block { position: absolute; inset: 0 0 auto 0; - background: var(--claude-card); - border-bottom: 0 solid var(--claude-border); + background: var(--surface-card); + border-bottom: 0 solid var(--border-default); display: flex; align-items: center; gap: 10px; @@ -1526,11 +1526,11 @@ body[data-theme='dark'] .more-icon { .more-title { font-weight: 700; - color: var(--claude-text); + color: var(--text-primary); } .more-desc { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; } @@ -1578,7 +1578,7 @@ body[data-theme='dark'] .more-icon { bottom: 0; left: 0; height: 2px; - background: var(--claude-accent); + background: var(--accent); animation: progress-bar 2s ease-in-out infinite; opacity: 0; transition: opacity 0.3s ease; @@ -1606,18 +1606,18 @@ body[data-theme='dark'] .more-icon { .status-text { font-size: 14px; - color: var(--claude-text); + color: var(--text-primary); font-weight: 500; white-space: nowrap; flex-shrink: 0; } .collapsible-block.processing .status-text { - color: var(--claude-text-secondary); + color: var(--text-secondary); } .tool-desc { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; margin-left: 8px; white-space: nowrap; @@ -1651,7 +1651,7 @@ body[data-theme='dark'] .more-icon { .text-output { margin: 16px 0; - color: var(--claude-text); + color: var(--text-primary); font-size: 15px; line-height: 1.7; } @@ -1660,7 +1660,7 @@ body[data-theme='dark'] .more-icon { display: block; max-width: 100%; margin: 14px auto; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 12px; overflow: hidden; background: transparent; @@ -1683,18 +1683,18 @@ body[data-theme='dark'] .more-icon { .chat-inline-card__pending-tip { font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .chat-inline-card__error { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); text-align: center; } .chat-inline-card__caption { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); text-align: center; line-height: 1.4; padding: 0 8px; @@ -1718,16 +1718,16 @@ body[data-theme='dark'] .more-icon { max-height: 720px; object-fit: contain; border-radius: 12px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); box-shadow: none; - background: var(--claude-card); + background: var(--surface-card); } .chat-inline-card--error { - border: 1px dashed var(--claude-accent); + border: 1px dashed var(--accent); padding: 6px 10px; border-radius: 12px; - background: var(--claude-highlight); + background: var(--highlight); } .chat-inline-card--html { @@ -1751,9 +1751,9 @@ body[data-theme='dark'] .more-icon { width: 26px; height: 26px; border-radius: 999px; - border: 1px solid var(--claude-border); - background: color-mix(in srgb, var(--claude-card) 78%, transparent); - color: var(--claude-text-secondary); + border: 1px solid var(--border-default); + background: color-mix(in srgb, var(--surface-card) 78%, transparent); + color: var(--text-secondary); display: inline-flex; align-items: center; justify-content: center; @@ -1767,9 +1767,9 @@ body[data-theme='dark'] .more-icon { } .chat-inline-card__refresh-btn:hover { - color: var(--claude-text); - border-color: var(--claude-accent); - background: color-mix(in srgb, var(--claude-highlight) 72%, transparent); + color: var(--text-primary); + border-color: var(--accent); + background: color-mix(in srgb, var(--highlight) 72%, transparent); } .chat-inline-card__refresh-btn.is-refreshing { @@ -1795,7 +1795,7 @@ body[data-theme='dark'] .more-icon { .chat-inline-html__pending-tip { font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .chat-inline-html__iframe { @@ -1824,7 +1824,7 @@ show-html:not([data-rendered='1']) { margin: 14px auto; box-sizing: border-box; overflow: hidden; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 12px; background: transparent; box-shadow: none; @@ -1926,7 +1926,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 12px; background: var(--theme-surface-soft); box-shadow: none; @@ -1951,13 +1951,13 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { .text-output .text-content .md-table-scroll::-webkit-scrollbar-thumb, .text-output .text-content [data-md-table-scroll='1']::-webkit-scrollbar-thumb { - background: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent); + background: color-mix(in srgb, var(--text-secondary) 55%, transparent); border-radius: 999px; } .text-output .text-content .md-table-scroll, .text-output .text-content [data-md-table-scroll='1'] { - scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent) + scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent) color-mix(in srgb, var(--theme-surface-muted) 70%, transparent); scrollbar-width: thin; } @@ -1968,7 +1968,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { .text-output .text-content th, .text-output .text-content td { - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); padding: 10px 14px; text-align: left; vertical-align: middle; @@ -1977,13 +1977,13 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { .text-output .text-content th { font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); } .text-output .text-content hr { margin: 32px calc(var(--chat-content-x) * -1); border: none; - border-top: 1px solid var(--claude-border); + border-top: 1px solid var(--border-default); } .system-action { @@ -1992,7 +1992,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { border-radius: 8px; background: linear-gradient(135deg, color-mix(in srgb, var(--state-info) 8%, transparent), color-mix(in srgb, var(--state-info) 8%, transparent)); border-left: 4px solid var(--state-info); - color: var(--claude-text); + color: var(--text-primary); font-size: 14px; line-height: 1.5; } @@ -2008,7 +2008,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { margin: 0; font-size: 15px; line-height: 1.7; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .append-block, @@ -2017,12 +2017,12 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { padding: 12px 16px; border-radius: 10px; background: var(--theme-surface-soft); - border-left: 4px solid var(--claude-accent); + border-left: 4px solid var(--accent); box-shadow: none; display: flex; flex-direction: column; gap: 8px; - color: var(--claude-text); + color: var(--text-primary); } .append-block.append-error, @@ -2039,7 +2039,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { } .code-block-wrapper { - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 20px; overflow: hidden; margin: 16px 0; @@ -2059,11 +2059,11 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { display: flex; justify-content: space-between; align-items: center; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--border-default); } .code-language { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 14px; line-height: 1; letter-spacing: -0.01em; @@ -2078,7 +2078,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { padding: 0; border-radius: 10px; background-color: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); cursor: pointer; opacity: 0.9; transition: @@ -2100,7 +2100,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { .copy-code-btn:hover { background-color: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); } .copy-code-btn.copied::before { @@ -2138,7 +2138,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { padding: 0 !important; border: 0 !important; box-shadow: none !important; - color: var(--claude-text); + color: var(--text-primary); font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', 'Menlo', 'Monaco', 'Courier New', monospace !important; @@ -2171,7 +2171,7 @@ show-html:not([data-rendered='1'])[ratio='3:4'] { .cursor-blink { animation: blink 1s steps(1) infinite; - color: var(--claude-accent); + color: var(--accent); } @keyframes blink { @@ -2211,7 +2211,7 @@ a.md-download-link { overflow-y: hidden; text-align: center; scrollbar-width: thin; - scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent) transparent; + scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent) transparent; &::-webkit-scrollbar { height: 6px; @@ -2222,7 +2222,7 @@ a.md-download-link { } &::-webkit-scrollbar-thumb { - background: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent); + background: color-mix(in srgb, var(--text-secondary) 55%, transparent); border-radius: 999px; } diff --git a/static/src/styles/components/drag-upload.scss b/static/src/styles/components/drag-upload.scss index c35d644b..ad474cb7 100644 --- a/static/src/styles/components/drag-upload.scss +++ b/static/src/styles/components/drag-upload.scss @@ -19,16 +19,16 @@ align-items: center; gap: 16px; padding: 48px 64px; - border: 2px dashed var(--claude-accent); + border: 2px dashed var(--accent); border-radius: 16px; - background: var(--claude-highlight); + background: var(--highlight); animation: drag-pulse 1.5s ease-in-out infinite; } .drag-upload-icon { width: 64px; height: 64px; - color: var(--claude-accent); + color: var(--accent); svg { width: 100%; @@ -39,12 +39,12 @@ .drag-upload-text { font-size: 20px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); } .drag-upload-hint { font-size: 14px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } // 动画 - 使用主题色的脉冲效果(颜色走 --pulse-ring,随主题自动适配) @@ -71,16 +71,16 @@ // 浅色主题(light) - 使用黑色强调 :root[data-theme='light'] { .drag-upload-content { - border-color: var(--claude-text); - background: var(--claude-highlight); + border-color: var(--text-primary); + background: var(--highlight); } .drag-upload-icon { - color: var(--claude-text); + color: var(--text-primary); } .drag-upload-hint { - color: var(--claude-text); + color: var(--text-primary); } } @@ -88,18 +88,18 @@ :root[data-theme='classic'], :root:not([data-theme]) { .drag-upload-hint { - color: var(--claude-text); + color: var(--text-primary); } } // 深色主题(dark) - 使用白色强调 :root[data-theme='dark'] { .drag-upload-content { - border-color: var(--claude-text); - background: var(--claude-highlight); + border-color: var(--text-primary); + background: var(--highlight); } .drag-upload-icon { - color: var(--claude-text); + color: var(--text-primary); } } diff --git a/static/src/styles/components/input/_composer.scss b/static/src/styles/components/input/_composer.scss index 92c3bbec..64837583 100644 --- a/static/src/styles/components/input/_composer.scss +++ b/static/src/styles/components/input/_composer.scss @@ -86,7 +86,7 @@ display: block; font-size: 13px; line-height: 1.3; - color: var(--claude-text); + color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -96,7 +96,7 @@ flex-shrink: 0; border: none; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; line-height: 1.2; padding: 3px 4px; @@ -108,7 +108,7 @@ .runtime-queue-item__action:hover { background: var(--theme-chip-bg); - color: var(--claude-text); + color: var(--text-primary); } .runtime-queue-item__action--danger:hover { @@ -147,7 +147,7 @@ (var(--skill-slash-row-height) * var(--skill-slash-visible-rows)) + (var(--skill-slash-gap) * (var(--skill-slash-visible-rows) + 1)) + 2px + 2px - 2px ); - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-top-left-radius: var(--skill-slash-radius); border-top-right-radius: var(--skill-slash-radius); background: var(--surface-soft); @@ -224,7 +224,7 @@ border-radius: 7px; padding: 3px 9px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); text-align: left; cursor: pointer; } @@ -275,7 +275,7 @@ .skill-slash-item__description { flex: 1 1 auto; min-width: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; white-space: nowrap; overflow: hidden; @@ -289,7 +289,7 @@ display: flex; align-items: center; padding: 3px 9px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 11px; } @@ -313,7 +313,7 @@ body[data-theme='dark'] { .skill-slash-menu-wrapper { background: var(--badge-bg); - border-color: var(--claude-border); + border-color: var(--border-default); } .skill-slash-item__name { @@ -401,7 +401,7 @@ body[data-theme='light'] { .context-usage-ring { --context-progress: 0%; - --context-ring-color: var(--claude-accent); + --context-ring-color: var(--accent); width: 18px; height: 18px; border-radius: 50%; @@ -432,7 +432,7 @@ body[data-theme='light'] { border: 1px solid var(--theme-control-border); background: var(--theme-surface-soft); box-shadow: none; - color: var(--claude-text); + color: var(--text-primary); font-size: 12px; line-height: 1.35; opacity: 0; @@ -451,7 +451,7 @@ body[data-theme='light'] { .permission-switcher__btn { border: none; background: transparent; - color: var(--claude-text); + color: var(--text-primary); border-radius: 999px; padding: 4px 12px; font-size: 14px; @@ -465,7 +465,7 @@ body[data-theme='light'] { } .permission-switcher__btn:hover:not(:disabled) { - color: var(--claude-text); + color: var(--text-primary); text-decoration: none; background: var(--theme-chip-bg); box-shadow: none; @@ -516,14 +516,14 @@ body[data-theme='light'] { .permission-switcher__group-title { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-weight: 600; padding: 2px 4px; } .permission-switcher__caret { font-size: 14px; - color: var(--claude-text-secondary); + color: var(--text-secondary); transform: rotate(90deg); transition: transform 0.18s ease; } @@ -547,7 +547,7 @@ body[data-theme='light'] { border-radius: 10px; padding: 8px 10px; cursor: pointer; - color: var(--claude-text); + color: var(--text-primary); display: flex; flex-direction: column; gap: 2px; @@ -568,7 +568,7 @@ body[data-theme='light'] { .permission-switcher__item-desc { font-size: 11px; - color: var(--claude-text-secondary); + color: var(--text-secondary); line-height: 1.35; } @@ -684,7 +684,7 @@ body[data-theme='light'] { .stadium-input-editor p.is-editor-empty:first-child::before { content: attr(data-placeholder); - color: var(--claude-text-tertiary); + color: var(--text-tertiary); float: left; height: 0; pointer-events: none; @@ -733,7 +733,7 @@ body[data-theme='light'] { font-size: 14px; line-height: 1.4; font-family: inherit; - color: var(--claude-text); + color: var(--text-primary); white-space: pre-wrap; word-break: break-all; overflow-wrap: normal; @@ -793,7 +793,7 @@ body[data-theme='light'] { border: none; border-radius: 7px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font-size: 16px; cursor: pointer; display: flex; @@ -818,13 +818,13 @@ body[data-theme='light'] { } .stadium-btn.send-btn { - background: var(--claude-accent); + background: var(--accent); color: var(--on-accent); box-shadow: none; } .stadium-btn.send-btn:hover:not(:disabled) { - background: var(--claude-button-hover); + background: var(--accent-hover); } .stadium-btn.send-btn:disabled { @@ -971,7 +971,7 @@ body[data-theme='light'] { width: 230px; padding: 12px; background: var(--surface-soft); - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 18px; box-shadow: none; z-index: 30; @@ -988,7 +988,7 @@ body[data-theme='light'] { border-radius: 12px; font-size: 14px; text-align: left; - color: var(--claude-text); + color: var(--text-primary); display: flex; align-items: center; justify-content: space-between; @@ -1008,7 +1008,7 @@ body[data-theme='light'] { .menu-entry.active { background: var(--chip-bg); - color: var(--claude-text); + color: var(--text-primary); font-weight: 600; } @@ -1019,7 +1019,7 @@ body[data-theme='light'] { .menu-entry.has-submenu .entry-arrow { margin-left: 10px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .quick-submenu { @@ -1030,7 +1030,7 @@ body[data-theme='light'] { min-width: 0; padding: 12px; border-radius: 18px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); background: var(--surface-soft); box-shadow: none; z-index: 31; @@ -1039,7 +1039,7 @@ body[data-theme='light'] { .submenu-status, .submenu-empty { font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .submenu-list { @@ -1129,7 +1129,7 @@ body[data-theme='light'] { } .menu-entry.submenu-entry .entry-arrow { - color: var(--claude-text-secondary); + color: var(--text-secondary); } .tool-submenu-list { @@ -1190,7 +1190,7 @@ body[data-theme='light'] { right: 0; bottom: calc(100% + 12px); background: var(--surface-soft); - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 12px; box-shadow: none; padding: 12px; @@ -1261,7 +1261,7 @@ body[data-theme='light'] { flex: 1; font-size: 13px; font-weight: 500; - color: var(--claude-text); + color: var(--text-primary); display: inline-flex; flex-direction: column; align-items: center; @@ -1296,7 +1296,7 @@ body[data-theme='light'] { font-weight: 500; text-align: left; background: var(--surface-soft); - color: var(--claude-text); + color: var(--text-primary); cursor: pointer; transition: all 0.2s ease; } @@ -1313,7 +1313,7 @@ body[data-theme='light'] { .menu-btn.compress-entry { background: var(--surface-soft); - color: var(--claude-success); + color: var(--state-success); } .menu-btn.compress-entry:not(:disabled):hover { @@ -1350,7 +1350,7 @@ body[data-theme='light'] { .mobile-approval-overlay .mobile-panel-sheet--approval { pointer-events: auto; - background: var(--claude-panel); + background: var(--surface-panel); } /* 手机端审批面板按钮样式 - 与电脑端一致 */ @@ -1362,9 +1362,9 @@ body[data-theme='light'] { } .mobile-panel-sheet--approval .approval-btn--approve { - background: var(--claude-accent); + background: var(--accent); color: var(--on-accent); - border-color: var(--claude-accent); + border-color: var(--accent); } .mobile-panel-sheet--approval .approval-btn--reject { @@ -1374,8 +1374,8 @@ body[data-theme='light'] { .mobile-panel-sheet--approval .approval-btn--switch { background: transparent; - border-color: var(--claude-accent); - color: var(--claude-accent); + border-color: var(--accent); + color: var(--accent); } /* 审批卡片样式保持一致 */ @@ -1392,7 +1392,7 @@ body[data-theme='light'] { .mobile-panel-sheet--approval .sidebar-header, .mobile-panel-sheet--approval .sidebar .sidebar-header { background: transparent !important; - border-color: var(--claude-border); + border-color: var(--border-default); padding: 0 16px !important; } diff --git a/static/src/styles/components/overlays/_overlays.scss b/static/src/styles/components/overlays/_overlays.scss index f0a35322..4fc4c971 100644 --- a/static/src/styles/components/overlays/_overlays.scss +++ b/static/src/styles/components/overlays/_overlays.scss @@ -24,7 +24,7 @@ box-shadow: var(--theme-shadow-strong); padding: 40px; text-align: left; - color: var(--claude-text); + color: var(--text-primary); display: flex; flex-direction: column; overflow: hidden; @@ -51,7 +51,7 @@ .personal-page-header p { margin: 6px 0 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 14px; } @@ -60,7 +60,7 @@ padding: 8px 18px; border-radius: 999px; border: none; - background: linear-gradient(135deg, var(--claude-accent) 0%, var(--claude-accent-strong) 100%); + background: linear-gradient(135deg, var(--accent) 0%, var(--accent-strong) 100%); color: var(--surface-card); font-size: 13px; font-weight: 600; @@ -82,7 +82,7 @@ border-radius: 999px; border: 1px solid var(--theme-control-border-strong); background: var(--theme-surface-soft); - color: var(--claude-text); + color: var(--text-primary); font-size: 13px; font-weight: 600; cursor: pointer; @@ -128,7 +128,7 @@ } .toggle-desc { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; } @@ -165,7 +165,7 @@ } .toggle-switch input:checked + .switch-slider { - background: var(--claude-accent); + background: var(--accent); } .toggle-switch input:checked + .switch-slider::before { @@ -229,7 +229,7 @@ .fancy-path { fill: none; - stroke: var(--claude-text-secondary); + stroke: var(--text-secondary); stroke-width: 5; stroke-linecap: round; stroke-linejoin: round; @@ -247,13 +247,13 @@ } .toggle-row input:checked + .fancy-check .fancy-path { - stroke: var(--claude-accent); + stroke: var(--accent); stroke-dasharray: 70.5096664428711 9999999; stroke-dashoffset: -262.2723388671875; } .toggle-row span { - color: var(--claude-text); + color: var(--text-primary); font-weight: 500; } @@ -296,7 +296,7 @@ text-align: left; font-weight: 600; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); cursor: pointer; transition: background 0.2s ease, @@ -308,14 +308,14 @@ display: block; font-size: 11px; font-weight: 500; - color: var(--claude-text-tertiary); + color: var(--text-tertiary); margin-top: 2px; letter-spacing: 0.4px; } .personal-tab-button.active { background: var(--theme-tab-active); - color: var(--claude-accent); + color: var(--accent); box-shadow: 0 10px 24px var(--border-default); } @@ -840,7 +840,7 @@ } .behavior-field-header .field-desc { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; } @@ -933,7 +933,7 @@ } .experiment-copy p { - color: var(--claude-text-secondary); + color: var(--text-secondary); line-height: 1.6; } @@ -941,7 +941,7 @@ text-transform: uppercase; font-size: 12px; letter-spacing: 0.4em; - color: var(--claude-accent); + color: var(--accent); margin-bottom: 6px; } @@ -965,7 +965,7 @@ .experiment-toggle-info p { margin: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .experiment-toggle .toggle-text { @@ -988,7 +988,7 @@ margin: 0; padding-left: 20px; line-height: 1.6; - color: var(--claude-text-secondary); + color: var(--text-secondary); } /* Liquid glass overlay */ @@ -1173,12 +1173,12 @@ } .run-mode-card:hover { - border-color: var(--claude-accent); + border-color: var(--accent); transform: translateY(-1px); } .run-mode-card.active { - border-color: var(--claude-accent); + border-color: var(--accent); background: var(--theme-tab-active); box-shadow: 0 8px 20px var(--border-default); } @@ -1194,12 +1194,12 @@ .run-mode-title { font-weight: 600; font-size: 15px; - color: var(--claude-text); + color: var(--text-primary); } .run-mode-badge { font-size: 12px; - color: var(--claude-accent); + color: var(--accent); font-weight: 600; background: var(--theme-badge-bg); border-radius: 999px; @@ -1207,7 +1207,7 @@ } .run-mode-desc { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; line-height: 1.4; } @@ -1230,12 +1230,12 @@ align-items: center; gap: 4px; font-weight: 600; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .thinking-presets button.active { - border-color: var(--claude-accent); - color: var(--claude-accent); + border-color: var(--accent); + color: var(--accent); background: var(--theme-tab-active); } @@ -1266,12 +1266,12 @@ } .thinking-hint { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; } .behavior-hint { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; } @@ -1290,7 +1290,7 @@ .link-button { border: none; background: none; - color: var(--claude-accent); + color: var(--accent); font-weight: 600; cursor: pointer; } @@ -1313,7 +1313,7 @@ } .tool-category-chip input { - accent-color: var(--claude-accent); + accent-color: var(--accent); } .global-actions { @@ -1356,14 +1356,14 @@ .theme-header p { margin: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .theme-badge { padding: 6px 12px; border-radius: 12px; background: var(--theme-badge-bg); - color: var(--claude-accent); + color: var(--accent); font-weight: 700; font-size: 12px; letter-spacing: 0.08em; @@ -1393,13 +1393,13 @@ } .theme-card:hover { - border-color: var(--claude-accent); + border-color: var(--accent); box-shadow: var(--theme-shadow-soft); transform: translateY(-1px); } .theme-card.active { - border-color: var(--claude-accent); + border-color: var(--accent); box-shadow: 0 10px 28px var(--shadow-color); background: var(--theme-tab-active); } @@ -1426,7 +1426,7 @@ .theme-check { font-weight: 700; - color: var(--claude-accent); + color: var(--accent); font-size: 16px; } @@ -1437,13 +1437,13 @@ .theme-card-body p { margin: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); line-height: 1.5; } .theme-note { margin: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; } @@ -1528,7 +1528,7 @@ padding: 0; border-radius: 8px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); cursor: pointer; pointer-events: auto; display: flex; @@ -1715,7 +1715,7 @@ border-radius: 50%; border: none; background: transparent; - color: var(--claude-text); + color: var(--text-primary); display: flex; align-items: center; justify-content: center; @@ -1774,7 +1774,7 @@ .mobile-panel-sheet { width: 100%; height: 100%; - background: var(--claude-left-rail); + background: var(--surface-rail); border-radius: 0; box-shadow: none; padding: 0; @@ -1787,11 +1787,11 @@ .mobile-panel-sheet--conversation, .mobile-panel-sheet--workspace { - background: var(--claude-left-rail); + background: var(--surface-rail); } .mobile-panel-sheet--conversation { - background: var(--claude-left-rail); + background: var(--surface-rail); width: min(var(--conversation-expanded-width, 306px), 100vw); max-width: 100vw; padding-top: 0; @@ -1804,14 +1804,14 @@ } .mobile-panel-sheet--approval { - background: var(--claude-panel); + background: var(--surface-panel); width: min(460px, 92vw); max-width: 92vw; padding-top: 0; } .mobile-panel-sheet--focus { - background: var(--claude-panel); + background: var(--surface-panel); } .mobile-overlay-close { @@ -1823,7 +1823,7 @@ border-radius: 16px; border: none; background: var(--border-default); - color: var(--claude-text); + color: var(--text-primary); font-size: 18px; cursor: pointer; z-index: 5; @@ -1915,7 +1915,7 @@ .desktop-approval-sheet { height: 100%; max-width: 92vw; - background: var(--claude-panel); + background: var(--surface-panel); box-shadow: var(--shadow-strong); overflow: hidden; display: flex; @@ -1999,7 +1999,7 @@ .confirm-message { font-size: 14px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .confirm-warning { @@ -2028,7 +2028,7 @@ .confirm-button { border: 1px solid var(--theme-control-border-strong); background: transparent; - color: var(--claude-text); + color: var(--text-primary); border-radius: 10px; padding: 8px 20px; font-weight: 500; @@ -2036,8 +2036,8 @@ } .confirm-button--primary { - background: var(--claude-accent); - border-color: var(--claude-accent-strong); + background: var(--accent); + border-color: var(--accent-strong); color: var(--on-accent); } @@ -2091,7 +2091,7 @@ .subagent-activity-close { border: none; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font-size: 20px; cursor: pointer; padding: 4px 8px; @@ -2107,7 +2107,7 @@ align-items: center; gap: 12px; font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); flex-wrap: wrap; } @@ -2186,7 +2186,7 @@ .subagent-activity-empty, .subagent-activity-error { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; } @@ -2206,7 +2206,7 @@ } .subagent-activity-text { - color: var(--claude-text); + color: var(--text-primary); line-height: 1.4; word-break: break-all; } @@ -2243,7 +2243,7 @@ border: 1px solid var(--theme-control-border); border-radius: 12px; background: var(--theme-surface-soft); - color: var(--claude-text); + color: var(--text-primary); padding: 14px; font-size: 12px; line-height: 1.5; @@ -2393,7 +2393,7 @@ flex-wrap: wrap; gap: 10px; font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .tone-preset-buttons { @@ -2412,8 +2412,8 @@ } .tone-preset-buttons button:hover { - border-color: var(--claude-accent); - color: var(--claude-accent); + border-color: var(--accent); + color: var(--accent); } .consideration-input { @@ -2431,7 +2431,7 @@ height: 38px; border-radius: 12px; border: none; - background: var(--claude-accent); + background: var(--accent); color: var(--surface-card); font-size: 20px; font-weight: 600; @@ -2465,13 +2465,13 @@ .drag-handle { font-size: 16px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .consideration-text { flex: 1; font-size: 14px; - color: var(--claude-text); + color: var(--text-primary); } .consideration-remove { @@ -2487,7 +2487,7 @@ .consideration-hint, .consideration-limit { font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .personal-form-actions { @@ -2541,7 +2541,7 @@ padding: 10px 20px; border: none; border-radius: 999px; - background: linear-gradient(135deg, var(--claude-accent) 0%, var(--claude-accent-strong) 100%); + background: linear-gradient(135deg, var(--accent) 0%, var(--accent-strong) 100%); color: var(--text-primary); font-weight: 600; cursor: pointer; @@ -2577,7 +2577,7 @@ .personalization-loading { padding: 32px 0; text-align: center; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 14px; } @@ -2665,7 +2665,7 @@ opacity: 1; } .panel-card { - border-left: 1px solid var(--claude-border); + border-left: 1px solid var(--border-default); padding: 0 0 0 0; } .app-loading-state { @@ -2677,7 +2677,7 @@ justify-content: center; gap: 28px; text-align: center; - color: var(--claude-text); + color: var(--text-primary); } .loading-animation { @@ -2697,15 +2697,15 @@ .loading-copy p { margin: 6px 0 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .loading-refresh-btn { margin-top: 14px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 10px; - background: var(--claude-panel); - color: var(--claude-text); + background: var(--surface-panel); + color: var(--text-primary); padding: 8px 14px; font-size: 13px; cursor: pointer; @@ -2722,8 +2722,8 @@ .boxes { --size: 34px; --duration: 900ms; - --box-primary: var(--claude-accent); - --box-secondary: var(--claude-accent-strong); + --box-primary: var(--accent); + --box-secondary: var(--accent-strong); --box-tertiary: color-mix(in srgb, var(--accent) 30%, white); height: calc(var(--size) * 2); width: calc(var(--size) * 3); @@ -3461,7 +3461,7 @@ body[data-theme='dark'] { /* 左侧面板头部(文件/待办事项/子智能体标签栏) */ .sidebar-header { - background: var(--claude-left-rail); + background: var(--surface-rail); } /* 移动端审批面板 - 移除所有背景让内容顶头 */ @@ -3588,7 +3588,7 @@ body[data-theme='dark'] { .tutorial-intro-eyebrow { margin: 0; font-size: 12px; - color: var(--claude-text-tertiary); + color: var(--text-tertiary); letter-spacing: 0.06em; } @@ -3602,7 +3602,7 @@ body[data-theme='dark'] { .tutorial-status-text, .tutorial-feature-item p { margin: 0; - color: var(--claude-text-secondary); + color: var(--text-secondary); line-height: 1.55; } @@ -3643,7 +3643,7 @@ body[data-theme='dark'] { .tutorial-status-badge.success { color: var(--text-primary); - background: linear-gradient(135deg, var(--claude-success), color-mix(in srgb, var(--state-success) 70%, black)); + background: linear-gradient(135deg, var(--state-success), color-mix(in srgb, var(--state-success) 70%, black)); } .tutorial-intro-actions { @@ -3661,7 +3661,7 @@ body[data-theme='dark'] { font-size: 14px; font-weight: 700; color: var(--text-primary); - background: linear-gradient(135deg, var(--claude-accent), var(--claude-accent-strong)); + background: linear-gradient(135deg, var(--accent), var(--accent-strong)); cursor: pointer; } @@ -3732,7 +3732,7 @@ body[data-theme='dark'] { border-radius: 14px; border: 1px solid var(--theme-control-border-strong); background: var(--theme-surface-card); - color: var(--claude-text); + color: var(--text-primary); box-shadow: var(--theme-shadow-strong); padding: 14px 14px 12px; pointer-events: auto; @@ -3754,13 +3754,13 @@ body[data-theme='dark'] { .tutorial-popover__step { font-size: 12px; font-weight: 700; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .tutorial-popover__close { border: 1px solid var(--theme-control-border); background: var(--theme-surface-soft); - color: var(--claude-text); + color: var(--text-primary); border-radius: 999px; padding: 4px 10px; font-size: 12px; @@ -3776,7 +3776,7 @@ body[data-theme='dark'] { margin: 8px 0 0; font-size: 13px; line-height: 1.58; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .tutorial-popover__hint, @@ -3786,7 +3786,7 @@ body[data-theme='dark'] { } .tutorial-popover__hint { - color: var(--claude-accent-strong); + color: var(--accent-strong); } .tutorial-popover__warn { @@ -3808,7 +3808,7 @@ body[data-theme='dark'] { font-size: 12px; font-weight: 700; color: var(--text-primary); - background: linear-gradient(135deg, var(--claude-accent), var(--claude-accent-strong)); + background: linear-gradient(135deg, var(--accent), var(--accent-strong)); cursor: pointer; } @@ -3818,7 +3818,7 @@ body[data-theme='dark'] { } .tutorial-btn--ghost { - color: var(--claude-text); + color: var(--text-primary); border: 1px solid var(--theme-control-border); background: var(--theme-surface-soft); } diff --git a/static/src/styles/components/panels/_resource-panel.scss b/static/src/styles/components/panels/_resource-panel.scss index c3c4f21f..75e6b657 100644 --- a/static/src/styles/components/panels/_resource-panel.scss +++ b/static/src/styles/components/panels/_resource-panel.scss @@ -1,5 +1,5 @@ .token-count { - color: var(--claude-accent); + color: var(--accent); font-weight: 500; } /* 顶部 Token 抽屉 */ @@ -18,8 +18,8 @@ .token-display-panel { width: min(860px, 92%); - background: var(--claude-panel); - border: 1px solid var(--claude-border); + background: var(--surface-panel); + border: 1px solid var(--border-default); border-radius: 26px; box-shadow: 0 24px 42px var(--shadow-color); transition: transform 0.35s ease, opacity 0.35s ease; @@ -59,7 +59,7 @@ bottom: 0; left: 50%; width: 1px; - background: var(--claude-border); + background: var(--border-default); transform: translateX(-0.5px); pointer-events: none; z-index: 0; @@ -92,7 +92,7 @@ align-items: center; font-size: 14px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); } .stat-grid { @@ -115,7 +115,7 @@ } .stat-label { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; letter-spacing: 0.04em; } @@ -124,20 +124,20 @@ font-weight: 600; font-size: 18px; font-variant-numeric: tabular-nums; - color: var(--claude-text); + color: var(--text-primary); } .stat-value--accent { - color: var(--claude-accent); + color: var(--accent); font-size: 20px; } .stat-value--success { - color: var(--claude-success); + color: var(--state-success); } .stat-value--warning { - color: var(--claude-warning); + color: var(--state-warning); } .stat-value--mono { @@ -148,7 +148,7 @@ .stat-meta, .stat-foot { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .stat-meta { @@ -161,7 +161,7 @@ .usage-placeholder { font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .token-close-btn { @@ -262,19 +262,19 @@ .quota-label { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-weight: 500; } .quota-value { font-weight: 600; font-size: 16px; - color: var(--claude-text); + color: var(--text-primary); } .quota-reset { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .token-item { @@ -285,7 +285,7 @@ } .token-label { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 11px; font-weight: 500; text-transform: uppercase; @@ -293,19 +293,19 @@ } .token-value { - color: var(--claude-text); + color: var(--text-primary); font-weight: 600; font-size: 18px; font-variant-numeric: tabular-nums; } .token-value.current { - color: var(--claude-accent); + color: var(--accent); font-size: 20px; } -.token-value.input { color: var(--claude-success); } -.token-value.output { color: var(--claude-warning); } +.token-value.input { color: var(--state-success); } +.token-value.output { color: var(--state-warning); } .panel-row-title { display: flex; @@ -313,7 +313,7 @@ align-items: center; margin-bottom: 12px; font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.04em; } @@ -329,7 +329,7 @@ font-size: 11px; font-weight: 600; background: var(--badge-bg); - color: var(--claude-text-secondary); + color: var(--text-secondary); } .quota-toast { @@ -338,12 +338,12 @@ right: 32px; padding: 12px 18px; border-radius: 12px; - background: var(--claude-bg); - border: 1px solid var(--claude-border-strong); + background: var(--surface-base); + border: 1px solid var(--border-strong); box-shadow: 0 12px 30px var(--shadow-color); z-index: 2000; max-width: 320px; - color: var(--claude-text); + color: var(--text-primary); font-weight: 500; display: flex; align-items: center; @@ -387,26 +387,26 @@ gap: 12px; padding: 12px 14px; border-radius: 14px; - background: var(--claude-bg); - border: 1px solid var(--claude-border-strong); + background: var(--surface-base); + border: 1px solid var(--border-strong); box-shadow: 0 12px 30px var(--shadow-color); - color: var(--claude-text); + color: var(--text-primary); } .app-toast::before { content: ""; width: 4px; border-radius: 999px; - background: var(--claude-text-secondary); + background: var(--text-secondary); align-self: stretch; } .app-toast--success::before { - background: var(--claude-success); + background: var(--state-success); } .app-toast--warning::before { - background: var(--claude-warning); + background: var(--state-warning); } .app-toast--error::before { @@ -432,30 +432,30 @@ .toast-close { border: none; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 16px; cursor: pointer; padding: 2px; } .toast-close:hover { - color: var(--claude-text); + color: var(--text-primary); } .status-pill--running { background: color-mix(in srgb, var(--state-success) 22%, transparent); - color: var(--claude-success); + color: var(--state-success); } .status-pill--stopped { background: color-mix(in srgb, var(--state-warning) 22%, transparent); - color: var(--claude-warning); + color: var(--state-warning); } .status-pill--host { background: var(--badge-bg); - color: var(--claude-text-secondary); + color: var(--text-secondary); } .container-metric-grid { @@ -471,7 +471,7 @@ } .metric-label { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase; @@ -479,18 +479,18 @@ .metric-value { font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); font-size: 16px; font-variant-numeric: tabular-nums; } .metric-subtext { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; } .container-empty { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; padding: 12px 0; } @@ -503,7 +503,7 @@ .container-stats-card { border-left: none; - border-top: 1px solid var(--claude-border); + border-top: 1px solid var(--border-default); padding-left: 0; padding-top: 16px; } @@ -570,7 +570,7 @@ /* 搜索结果展示 */ .search-meta { font-size: 14px; - color: var(--claude-text-secondary); + color: var(--text-secondary); line-height: 1.6; margin-bottom: 12px; word-break: break-word; @@ -593,11 +593,11 @@ .search-result-title { font-weight: 600; margin-bottom: 6px; - color: var(--claude-text); + color: var(--text-primary); } .search-result-url a { - color: var(--claude-accent-strong); + color: var(--accent-strong); text-decoration: none; word-break: break-all; } @@ -608,6 +608,6 @@ .search-empty { font-size: 13px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-style: italic; } diff --git a/static/src/styles/components/panels/_right-panel.scss b/static/src/styles/components/panels/_right-panel.scss index 07668620..cf5a96a7 100644 --- a/static/src/styles/components/panels/_right-panel.scss +++ b/static/src/styles/components/panels/_right-panel.scss @@ -24,7 +24,7 @@ .sidebar.right-sidebar .sidebar-header h3 { font-size: 15px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); margin: 0; } @@ -46,7 +46,7 @@ border: none; border-radius: 16px; background: var(--hover-bg); - color: var(--claude-text); + color: var(--text-primary); font-size: 20px; cursor: pointer; } @@ -57,7 +57,7 @@ border: none; border-radius: 16px; background: var(--hover-bg); - color: var(--claude-text); + color: var(--text-primary); font-size: 20px; cursor: pointer; } @@ -69,9 +69,9 @@ height: var(--app-viewport); display: flex; flex-direction: column; - background: var(--claude-left-rail); - border-left: 1px solid var(--claude-border); - color: var(--claude-text); + background: var(--surface-rail); + border-left: 1px solid var(--border-default); + color: var(--text-primary); overflow: hidden; } @@ -83,7 +83,7 @@ align-items: center; justify-content: space-between; gap: 12px; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--border-default); } .git-changes-panel__title { @@ -105,7 +105,7 @@ .git-changes-panel__upstream, .git-changes-panel__arrow { - color: var(--claude-text-secondary); + color: var(--text-secondary); } .git-changes-panel__summary, @@ -132,7 +132,7 @@ border: none; border-radius: 14px; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 18px; line-height: 1; cursor: pointer; @@ -140,7 +140,7 @@ .git-changes-panel__close:hover { background: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); box-shadow: 0 1px 2px var(--shadow-color); } @@ -149,13 +149,13 @@ min-height: 0; overflow: auto; padding: 12px; - scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent) + scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent) color-mix(in srgb, var(--theme-surface-muted) 70%, transparent); scrollbar-width: thin; } .git-changes-panel * { - scrollbar-color: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent) + scrollbar-color: color-mix(in srgb, var(--text-secondary) 55%, transparent) color-mix(in srgb, var(--theme-surface-muted) 70%, transparent); scrollbar-width: thin; } @@ -175,7 +175,7 @@ .git-changes-panel::-webkit-scrollbar-thumb, .git-changes-panel ::-webkit-scrollbar-thumb { - background: color-mix(in srgb, var(--claude-text-secondary) 55%, transparent); + background: color-mix(in srgb, var(--text-secondary) 55%, transparent); border-radius: 999px; border: 2px solid transparent; background-clip: padding-box; @@ -214,7 +214,7 @@ justify-content: space-between; gap: 10px; padding: 0 8px; - color: var(--claude-text); + color: var(--text-primary); font-size: 13px; font-weight: 600; } @@ -243,14 +243,14 @@ border: none; border-radius: 9px; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); cursor: pointer; } .git-change-file__open-btn:hover, .git-change-file__open-btn.open { background: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); box-shadow: 0 1px 2px var(--shadow-color); } @@ -303,7 +303,7 @@ body[data-theme='dark'] .git-change-file__open-icon { max-height: 260px; overflow-y: auto; padding: 6px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 12px; background: var(--theme-surface-muted); box-shadow: none; @@ -319,7 +319,7 @@ body[data-theme='dark'] .git-change-file__open-icon { border: none; border-radius: 9px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font-size: 13px; text-align: left; cursor: pointer; @@ -339,7 +339,7 @@ body[data-theme='dark'] .git-change-file__open-icon { .git-change-file__open-empty { padding: 8px 10px; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; font-weight: 400; white-space: nowrap; @@ -359,14 +359,14 @@ body[data-theme='dark'] .git-change-file__open-icon { border: none; border-radius: 8px; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; cursor: pointer; } .git-change-file__reset:hover { background: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); box-shadow: 0 1px 2px var(--shadow-color); } @@ -394,7 +394,7 @@ body[data-theme='dark'] .git-change-file__open-icon { border: none; border-radius: 9px; background: var(--theme-surface-muted); - color: var(--claude-text-secondary); + color: var(--text-secondary); font: inherit; font-family: inherit; cursor: pointer; @@ -414,7 +414,7 @@ body[data-theme='dark'] .git-change-file__open-icon { .git-change-file__fold:hover { background: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); box-shadow: 0 1px 2px var(--shadow-color); } @@ -426,7 +426,7 @@ body[data-theme='dark'] .git-change-file__open-icon { align-items: center; justify-content: center; flex: 0 0 16px; - color: var(--claude-text-tertiary); + color: var(--text-tertiary); text-align: center; line-height: 1; } @@ -449,7 +449,7 @@ body[data-theme='dark'] .git-change-file__open-icon { .git-change-file__hunk-header { padding: 3px 8px; - color: var(--claude-text-tertiary); + color: var(--text-tertiary); white-space: pre; } @@ -466,13 +466,13 @@ body[data-theme='dark'] .git-change-file__open-icon { } .git-change-line__num { - color: var(--claude-text-tertiary); + color: var(--text-tertiary); text-align: right; user-select: none; } .git-change-line__marker { - color: var(--claude-text-secondary); + color: var(--text-secondary); text-align: center; user-select: none; } @@ -565,7 +565,7 @@ body[data-theme='dark'] .git-change-file__open-icon { .no-files { text-align: center; - color: var(--claude-text-secondary); + color: var(--text-secondary); padding: 60px 20px; font-size: 14px; } @@ -577,7 +577,7 @@ body[data-theme='dark'] .git-change-file__open-icon { } .file-tab { - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 12px; overflow: hidden; background: var(--surface-soft); @@ -591,16 +591,16 @@ body[data-theme='dark'] .git-change-file__open-icon { justify-content: space-between; align-items: center; font-size: 14px; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--border-default); } .file-name { font-weight: 500; - color: var(--claude-text); + color: var(--text-primary); } .file-size { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 12px; } @@ -633,7 +633,7 @@ body[data-theme='dark'] .git-change-file__open-icon { } .approval-card { - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 12px; background: var(--theme-surface-soft); box-shadow: var(--theme-shadow-soft); @@ -646,17 +646,17 @@ body[data-theme='dark'] .git-change-file__open-icon { .approval-card__title { font-size: 13px; font-weight: 700; - color: var(--claude-text); + color: var(--text-primary); } .approval-card__summary { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .approval-path { font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); word-break: break-all; } @@ -707,7 +707,7 @@ body[data-theme='dark'] .git-change-file__open-icon { flex-direction: column; gap: 4px; font-size: 12px; - color: var(--claude-text-secondary); + color: var(--text-secondary); background: var(--theme-surface-muted); border: 1px solid var(--theme-control-border); border-radius: 8px; @@ -729,18 +729,18 @@ body[data-theme='dark'] .git-change-file__open-icon { .approval-note { padding: 6px 8px; font-size: 11px; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .approval-lines--old { - background: color-mix(in srgb, var(--claude-warning) 18%, transparent); - border: 1px solid color-mix(in srgb, var(--claude-warning) 50%, transparent); + background: color-mix(in srgb, var(--state-warning) 18%, transparent); + border: 1px solid color-mix(in srgb, var(--state-warning) 50%, transparent); color: var(--text-primary); } .approval-lines--new { - background: color-mix(in srgb, var(--claude-success) 18%, transparent); - border: 1px solid color-mix(in srgb, var(--claude-success) 50%, transparent); + background: color-mix(in srgb, var(--state-success) 18%, transparent); + border: 1px solid color-mix(in srgb, var(--state-success) 50%, transparent); color: var(--text-primary); } @@ -788,7 +788,7 @@ body[data-theme='dark'] .git-change-file__open-icon { .approval-btn--approve { color: var(--theme-surface-strong); - background: var(--claude-success); + background: var(--state-success); } .approval-btn--switch { @@ -798,5 +798,5 @@ body[data-theme='dark'] .git-change-file__open-icon { .approval-btn--reject { color: var(--theme-surface-strong); - background: var(--claude-accent-strong); + background: var(--accent-strong); } diff --git a/static/src/styles/components/sidebar/_conversation.scss b/static/src/styles/components/sidebar/_conversation.scss index 698eb5fc..2779c09a 100644 --- a/static/src/styles/components/sidebar/_conversation.scss +++ b/static/src/styles/components/sidebar/_conversation.scss @@ -10,9 +10,9 @@ height: var(--app-viewport) !important; min-height: var(--app-viewport) !important; overflow: hidden; - background: var(--claude-left-rail); + background: var(--surface-rail); border-right: 0; - color: var(--claude-text); + color: var(--text-primary); transition: width 320ms cubic-bezier(0.22, 1, 0.36, 1); } @@ -25,7 +25,7 @@ width: 1px; pointer-events: none; opacity: 1; - background: var(--claude-border); + background: var(--border-default); transition: opacity 320ms cubic-bezier(0.22, 1, 0.36, 1); } @@ -61,7 +61,7 @@ border: 0; border-radius: 8px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); display: grid; align-items: center; } @@ -163,7 +163,7 @@ } .monitor-mode-btn.blocked { - color: var(--claude-text-tertiary); + color: var(--text-tertiary); opacity: 0.6; } @@ -185,7 +185,7 @@ } .search-inline-icon { - color: var(--claude-text-secondary); + color: var(--text-secondary); } .search-input { @@ -196,13 +196,13 @@ outline: 0; padding: 0 12px 0 8px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); font-size: 13px; letter-spacing: -0.01em; } .search-input::placeholder { - color: var(--claude-text-secondary); + color: var(--text-secondary); } .conversation-sidebar .conversation-list { @@ -228,14 +228,14 @@ .conversation-sidebar .running-task-section { margin: 0 8px 12px; padding: 6px 0 8px; - border-bottom: 1px solid color-mix(in srgb, var(--claude-border) 72%, transparent); + border-bottom: 1px solid color-mix(in srgb, var(--border-default) 72%, transparent); } .conversation-sidebar .running-task-section-title { margin: 0 8px 4px; font-size: 12px; font-weight: 700; - color: var(--claude-text-secondary); + color: var(--text-secondary); letter-spacing: 0.01em; } @@ -250,7 +250,7 @@ border: 0; border-radius: 8px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); text-align: left; cursor: pointer; transition: @@ -269,7 +269,7 @@ white-space: nowrap; font-size: 11px; font-weight: 600; - color: var(--claude-text-secondary); + color: var(--text-secondary); } .conversation-sidebar .running-task-title { @@ -279,7 +279,7 @@ font-size: 13px; line-height: 1.25; letter-spacing: -0.01em; - color: var(--claude-text); + color: var(--text-primary); } .conversation-sidebar .running-task-main { @@ -362,7 +362,7 @@ body[data-theme='dark'] .conversation-sidebar .running-task-item.active { inset: 0; z-index: 1; border-radius: 12px; - background: var(--claude-left-rail); + background: var(--surface-rail); pointer-events: none; } @@ -445,7 +445,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi min-width: 0; padding-left: 12px; padding-right: 4px; - color: var(--claude-text); + color: var(--text-primary); font-size: 13px; line-height: 1.25; letter-spacing: -0.01em; @@ -468,7 +468,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi .conversation-sidebar .conversation-running-loader { width: 16px; height: 16px; - border: 2px solid var(--claude-text-secondary); + border: 2px solid var(--text-secondary); border-bottom-color: transparent; border-radius: 50%; display: inline-block; @@ -480,7 +480,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi width: 18px; height: 18px; display: inline-block; - background: var(--claude-text-secondary); + background: var(--text-secondary); mask: url('/static/icons/check.svg') center / contain no-repeat; -webkit-mask: url('/static/icons/check.svg') center / contain no-repeat; } @@ -501,7 +501,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi border: 0; border-radius: 9px; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); display: grid; place-items: center; cursor: pointer; @@ -518,7 +518,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi .conversation-sidebar .conversation-more-btn:hover, .conversation-sidebar .conversation-action-wrap.menu-open .conversation-more-btn { - color: var(--claude-text); + color: var(--text-primary); } .conversation-sidebar .conversation-more-btn span { @@ -547,7 +547,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi width: max-content; min-width: 92px; padding: 6px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 14px; background: var(--theme-surface-strong); box-shadow: none; @@ -583,7 +583,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi border: 0; border-radius: 10px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); display: grid; grid-template-columns: 24px auto; align-items: center; @@ -622,7 +622,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi .no-conversations, .search-done, .search-progress { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; padding: 10px 12px; white-space: nowrap; @@ -639,7 +639,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi border-radius: 10px; padding: 0 12px; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); cursor: pointer; text-align: left; transition: @@ -649,7 +649,7 @@ body[data-theme='dark'] .conversation-sidebar .conversation-item.active:focus-wi .load-more-btn:hover:not(:disabled) { background: var(--theme-tab-active); - color: var(--claude-text); + color: var(--text-primary); } .load-more-btn:disabled { @@ -744,13 +744,13 @@ body[data-theme='dark'] .workspace-group-header:hover { border: 0; border-radius: 8px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); text-align: left; cursor: pointer; } .workspace-folder-icon { - color: var(--claude-text-secondary); + color: var(--text-secondary); } /* 搜索结果分组头:仅作分类标识,不可交互、无 hover 高亮 */ @@ -784,7 +784,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover .workspace-running-loader { width: 14px; height: 14px; - border: 2px solid var(--claude-text-secondary); + border: 2px solid var(--text-secondary); border-bottom-color: transparent; border-radius: 50%; display: inline-block; @@ -812,7 +812,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover border: 0; border-radius: 8px; background: transparent; - color: var(--claude-text-secondary); + color: var(--text-secondary); display: grid; place-items: center; cursor: pointer; @@ -825,7 +825,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover .workspace-more-btn:hover, .workspace-group-actions.visible .workspace-more-btn[aria-expanded='true'] { background: var(--theme-surface-strong); - color: var(--claude-text); + color: var(--text-primary); } .workspace-more-btn span { @@ -857,7 +857,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover width: max-content; min-width: 120px; padding: 6px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 14px; background: var(--theme-surface-strong); box-shadow: none; @@ -882,7 +882,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover border: 0; border-radius: 10px; background: transparent; - color: var(--claude-text); + color: var(--text-primary); display: grid; align-items: center; padding: 0 10px; @@ -939,7 +939,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover .workspace-no-conversations, .workspace-conversations-loading { - color: var(--claude-text-secondary); + color: var(--text-secondary); font-size: 13px; padding: 10px 12px; } @@ -963,7 +963,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover padding: 16px; border-radius: 16px; background: var(--theme-surface-strong); - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); display: flex; flex-direction: column; gap: 12px; @@ -972,17 +972,17 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover .workspace-rename-title { font-size: 15px; font-weight: 600; - color: var(--claude-text); + color: var(--text-primary); } .workspace-rename-input { width: 100%; height: 40px; padding: 0 12px; - border: 1px solid var(--claude-border); + border: 1px solid var(--border-default); border-radius: 10px; background: var(--surface-base); - color: var(--claude-text); + color: var(--text-primary); font-size: 14px; outline: none; } @@ -1009,7 +1009,7 @@ body[data-theme='dark'] .workspace-group-header.search-result-group-header:hover .workspace-rename-cancel { background: transparent; - color: var(--claude-text); + color: var(--text-primary); } .workspace-rename-cancel:hover { diff --git a/static/src/styles/layout/_app-shell.scss b/static/src/styles/layout/_app-shell.scss index 8c1c91c9..ed7a55b9 100644 --- a/static/src/styles/layout/_app-shell.scss +++ b/static/src/styles/layout/_app-shell.scss @@ -5,11 +5,11 @@ flex-direction: row; height: var(--app-viewport); align-items: stretch; - background: var(--claude-bg); - color: var(--claude-text); + background: var(--surface-base); + color: var(--text-primary); } #app { min-height: var(--app-viewport); - background: var(--claude-bg); + background: var(--surface-base); } diff --git a/static/terminal.html b/static/terminal.html index 41a32517..c329cbfb 100644 --- a/static/terminal.html +++ b/static/terminal.html @@ -19,27 +19,27 @@ box-sizing: border-box; } :root { - --claude-bg: #eeece2; - --claude-panel: rgba(255, 255, 255, 0.92); - --claude-border: rgba(118, 103, 84, 0.25); - --claude-text: #3d3929; - --claude-text-secondary: #7f7766; - --claude-accent: #da7756; - --claude-muted: rgba(121, 109, 94, 0.45); + --app-bg: #eeece2; + --app-panel: rgba(255, 255, 255, 0.92); + --app-border: rgba(118, 103, 84, 0.25); + --app-text: #3d3929; + --app-text-secondary: #7f7766; + --app-accent: #da7756; + --app-muted: rgba(121, 109, 94, 0.45); } body { font-family: 'Iowan Old Style', ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - background: var(--claude-bg); - color: var(--claude-text); + background: var(--app-bg); + color: var(--app-text); height: 100vh; display: flex; flex-direction: column; overflow: hidden; } .header { - background: var(--claude-bg); + background: var(--app-bg); padding: 15px 24px; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--app-border); box-shadow: 0 10px 20px rgba(61, 57, 41, 0.08); } .header h1 { @@ -65,12 +65,12 @@ animation: none; } .session-tabs { - background: var(--claude-bg); + background: var(--app-bg); padding: 12px 24px; display: flex; gap: 10px; overflow-x: auto; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--app-border); box-shadow: inset 0 -1px rgba(61, 57, 41, 0.05); } .tab { @@ -84,7 +84,7 @@ align-items: center; gap: 8px; white-space: nowrap; - color: var(--claude-text); + color: var(--app-text); } .tab:hover { background: rgba(255, 255, 255, 0.95); @@ -92,8 +92,8 @@ transform: translateY(-2px); } .tab.active { - background: var(--claude-accent); - border-color: var(--claude-accent); + background: var(--app-accent); + border-color: var(--app-accent); color: #fffaf0; box-shadow: 0 10px 24px rgba(218, 119, 86, 0.26); } @@ -115,7 +115,7 @@ box-shadow: 0 24px 48px rgba(61, 57, 41, 0.16); display: flex; flex-direction: column; - border: 1px solid var(--claude-border); + border: 1px solid var(--app-border); } .terminal-header { background: rgba(255, 255, 255, 0.86); @@ -123,14 +123,14 @@ display: flex; justify-content: space-between; align-items: center; - border-bottom: 1px solid var(--claude-border); + border-bottom: 1px solid var(--app-border); } .terminal-title { display: flex; align-items: center; gap: 10px; font-size: 14px; - color: var(--claude-text-secondary); + color: var(--app-text-secondary); } .terminal-controls { display: flex; @@ -163,7 +163,7 @@ height: 100%; margin: 0 14px 0 18px; background: #ffffff; - color: var(--claude-text); + color: var(--app-text); overflow: hidden; display: flex; min-height: 0; @@ -191,10 +191,10 @@ } .sidebar { width: 300px; - background: var(--claude-panel); + background: var(--app-panel); border-radius: 18px; padding: 20px; - border: 1px solid var(--claude-border); + border: 1px solid var(--app-border); box-shadow: 0 18px 40px rgba(61, 57, 41, 0.1); overflow-y: auto; scrollbar-width: none; @@ -208,7 +208,7 @@ .info-section h3 { font-size: 14px; margin-bottom: 10px; - color: var(--claude-text-secondary); + color: var(--app-text-secondary); letter-spacing: 0.05em; } .info-item { @@ -219,10 +219,10 @@ font-size: 14px; } .info-label { - color: var(--claude-text-secondary); + color: var(--app-text-secondary); } .info-value { - color: var(--claude-text); + color: var(--app-text); font-weight: 600; } .command-history { @@ -238,20 +238,20 @@ margin: 3px 0; font-family: inherit; font-size: 12px; - color: var(--claude-accent); - border-left: 3px solid var(--claude-accent); + color: var(--app-accent); + border-left: 3px solid var(--app-accent); padding-left: 10px; background: rgba(218, 119, 86, 0.08); border-radius: 6px; } .status-bar { - background: var(--claude-panel); + background: var(--app-panel); padding: 12px 24px; display: flex; justify-content: space-between; align-items: center; font-size: 13px; - border-top: 1px solid var(--claude-border); + border-top: 1px solid var(--app-border); box-shadow: 0 -8px 18px rgba(61, 57, 41, 0.08); } .status-left { @@ -262,7 +262,7 @@ display: flex; align-items: center; gap: 6px; - color: var(--claude-text-secondary); + color: var(--app-text-secondary); } @media (max-width: 768px) { .main-content { @@ -276,7 +276,7 @@ width: 40px; height: 40px; border: 3px solid rgba(61, 57, 41, 0.15); - border-top-color: var(--claude-accent); + border-top-color: var(--app-accent); border-radius: 50%; animation: spin 1s linear infinite; margin: 20px auto; diff --git a/test/test_api_client_multimodal_sanitize.py b/test/test_api_client_multimodal_sanitize.py index 541dafef..68347e37 100644 --- a/test/test_api_client_multimodal_sanitize.py +++ b/test/test_api_client_multimodal_sanitize.py @@ -2,12 +2,12 @@ from __future__ import annotations import unittest -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient class APIClientMultimodalSanitizeTest(unittest.TestCase): def test_text_only_model_adds_notice_when_only_media_parts(self): - client = DeepSeekClient(web_mode=True) + client = APIClient(web_mode=True) client.model_key = "DeepSeek-V4-Pro High" # custom_models.json: multimodal=none messages = [ @@ -29,7 +29,7 @@ class APIClientMultimodalSanitizeTest(unittest.TestCase): ) def test_text_only_model_strips_image_parts_to_text(self): - client = DeepSeekClient(web_mode=True) + client = APIClient(web_mode=True) client.model_key = "DeepSeek-V4-Pro High" # custom_models.json: multimodal=none messages = [ @@ -54,7 +54,7 @@ class APIClientMultimodalSanitizeTest(unittest.TestCase): ) def test_profile_text_only_fallback_strips_media_parts(self): - client = DeepSeekClient(web_mode=True) + client = APIClient(web_mode=True) client.model_key = "" client.model_multimodal = "none" @@ -79,7 +79,7 @@ class APIClientMultimodalSanitizeTest(unittest.TestCase): ) def test_profile_multimodal_model_keeps_image_parts(self): - client = DeepSeekClient(web_mode=True) + client = APIClient(web_mode=True) client.model_key = "" client.model_multimodal = "image,video" @@ -103,7 +103,7 @@ class APIClientMultimodalSanitizeTest(unittest.TestCase): ) def test_profile_multimodal_fallback_works_when_model_key_missing(self): - client = DeepSeekClient(web_mode=True) + client = APIClient(web_mode=True) client.model_key = "" # 模拟未知/缺失 key,仅走 profile 兜底 client.model_multimodal = "none" diff --git a/test/test_sub_agent_regression.py b/test/test_sub_agent_regression.py index 56481698..2d2e4f1a 100644 --- a/test/test_sub_agent_regression.py +++ b/test/test_sub_agent_regression.py @@ -22,7 +22,7 @@ os.environ["SUB_AGENT_STATE_FILE"] = str(_test_tmp / "state.json") os.environ["SUB_AGENT_PROJECT_RESULTS_DIR"] = str(_test_tmp / "results") from modules.sub_agent import SubAgentManager -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient class FakeTerminal: @@ -85,7 +85,7 @@ class FakeTerminal: class FakeModel: - """按脚本驱动 DeepSeekClient.chat 的返回。""" + """按脚本驱动 APIClient.chat 的返回。""" def __init__(self, responses: List[List[Dict[str, Any]]]): self.responses = responses @@ -122,13 +122,13 @@ def make_finish_chunk() -> Dict[str, Any]: def install_fake_model(responses: List[List[Dict[str, Any]]]): fake = FakeModel(responses) - original = DeepSeekClient.chat - DeepSeekClient.chat = fake.chat + original = APIClient.chat + APIClient.chat = fake.chat return fake, original def restore_model(original): - DeepSeekClient.chat = original + APIClient.chat = original def test_write_file_and_edit(): diff --git a/utils/__pycache__/api_client.cpython-312.pyc b/utils/__pycache__/api_client.cpython-312.pyc deleted file mode 100644 index 02d8275f24bc7aec4beda0880a1510ab5729bd3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24563 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

bX!lN z5385a${Js>&wUxemC_i$@+C22fEmpL$BP`4PTSO@6fe7ce8lM5vdb(l|Yed&>(fS zKkPsN{6MlRY&gJnwK?D$6Kq$PTOiCiSVje3=W?)afpjL5(;dxXfyC=s1CSE@r(9-8G diff --git a/utils/__pycache__/context_manager.cpython-312.pyc b/utils/__pycache__/context_manager.cpython-312.pyc deleted file mode 100644 index 3f540bb5b38bf6c71268aceded6de4e0c054798f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48269 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 diff --git a/utils/__pycache__/conversation_manager.cpython-312.pyc b/utils/__pycache__/conversation_manager.cpython-312.pyc deleted file mode 100644 index d2ddb59c9cac33f5871eb41237fe60cbfa1b12b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36332 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 diff --git a/utils/__pycache__/logger.cpython-312.pyc b/utils/__pycache__/logger.cpython-312.pyc deleted file mode 100644 index a70a7e4aadae25bc07827811a2ca4beacd3e8f7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6710 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 WEB;nL`GddpD-S>D{o?}y(0>9RHK%0& diff --git a/utils/__pycache__/terminal_factory.cpython-312.pyc b/utils/__pycache__/terminal_factory.cpython-312.pyc deleted file mode 100644 index 0dbec55e8628e8fe3a62f294570d45ee221f7eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10475 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 str: """根据读取模式格式化 read_file 工具结果。""" if not isinstance(data, dict): diff --git a/utils/api_client/logging_mixin.py b/utils/api_client/logging_mixin.py index 6e81ad65..c89777bc 100644 --- a/utils/api_client/logging_mixin.py +++ b/utils/api_client/logging_mixin.py @@ -36,7 +36,7 @@ from utils.log_rotation import append_line, prune_dir from utils.api_client.utils import _api_dump_enabled -class DeepSeekClientLoggingMixin: +class APIClientLoggingMixin: def _debug_log(self, payload: Dict[str, Any]) -> None: if not _api_dump_enabled(): return diff --git a/utils/api_client/message_mixin.py b/utils/api_client/message_mixin.py index 4aeee3d2..b5e1600b 100644 --- a/utils/api_client/message_mixin.py +++ b/utils/api_client/message_mixin.py @@ -36,7 +36,7 @@ from utils.log_rotation import append_line, prune_dir from utils.api_client.utils import _api_dump_enabled -class DeepSeekClientMessageMixin: +class APIClientMessageMixin: def _merge_system_messages(self, messages: List[Dict]) -> List[Dict]: """ 仅合并最开头连续的 system 消息(系统提示),后续插入的 system 消息保持原样。 diff --git a/utils/api_client/profile_mixin.py b/utils/api_client/profile_mixin.py index d9e7e1d1..e3cd26dd 100644 --- a/utils/api_client/profile_mixin.py +++ b/utils/api_client/profile_mixin.py @@ -36,7 +36,7 @@ from utils.log_rotation import append_line, prune_dir from utils.api_client.utils import _api_dump_enabled -class DeepSeekClientProfileMixin: +class APIClientProfileMixin: def apply_profile(self, profile: Dict): """ 动态应用模型配置 diff --git a/utils/api_client/tool_mixin.py b/utils/api_client/tool_mixin.py index ab3cf207..667d37ba 100644 --- a/utils/api_client/tool_mixin.py +++ b/utils/api_client/tool_mixin.py @@ -36,7 +36,7 @@ from utils.log_rotation import append_line, prune_dir from utils.api_client.utils import _api_dump_enabled -class DeepSeekClientToolMixin: +class APIClientToolMixin: def _validate_json_string(self, json_str: str) -> tuple: """ 验证JSON字符串的完整性