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 d4ab76a9..00000000 Binary files a/core/__pycache__/main_terminal.cpython-312.pyc and /dev/null differ diff --git a/core/__pycache__/tool_config.cpython-312.pyc b/core/__pycache__/tool_config.cpython-312.pyc deleted file mode 100644 index 2a48077d..00000000 Binary files a/core/__pycache__/tool_config.cpython-312.pyc and /dev/null differ diff --git a/core/__pycache__/web_terminal.cpython-312.pyc b/core/__pycache__/web_terminal.cpython-312.pyc deleted file mode 100644 index 1a7a87b5..00000000 Binary files a/core/__pycache__/web_terminal.cpython-312.pyc and /dev/null differ 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 d65580a4..00000000 Binary files a/modules/__pycache__/file_manager.cpython-312.pyc and /dev/null differ 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 98f4d2ec..00000000 Binary files a/modules/__pycache__/gui_file_manager.cpython-312.pyc and /dev/null differ diff --git a/modules/__pycache__/memory_manager.cpython-312.pyc b/modules/__pycache__/memory_manager.cpython-312.pyc deleted file mode 100644 index 70c6f5b4..00000000 Binary files a/modules/__pycache__/memory_manager.cpython-312.pyc and /dev/null differ diff --git a/modules/__pycache__/persistent_terminal.cpython-312.pyc b/modules/__pycache__/persistent_terminal.cpython-312.pyc deleted file mode 100644 index f1945452..00000000 Binary files a/modules/__pycache__/persistent_terminal.cpython-312.pyc and /dev/null differ diff --git a/modules/__pycache__/search_engine.cpython-312.pyc b/modules/__pycache__/search_engine.cpython-312.pyc deleted file mode 100644 index 697f3197..00000000 Binary files a/modules/__pycache__/search_engine.cpython-312.pyc and /dev/null differ diff --git a/modules/__pycache__/terminal_manager.cpython-312.pyc b/modules/__pycache__/terminal_manager.cpython-312.pyc deleted file mode 100644 index 7d051e16..00000000 Binary files a/modules/__pycache__/terminal_manager.cpython-312.pyc and /dev/null differ diff --git a/modules/__pycache__/terminal_ops.cpython-312.pyc b/modules/__pycache__/terminal_ops.cpython-312.pyc deleted file mode 100644 index a4f79ec3..00000000 Binary files a/modules/__pycache__/terminal_ops.cpython-312.pyc and /dev/null differ diff --git a/modules/__pycache__/todo_manager.cpython-312.pyc b/modules/__pycache__/todo_manager.cpython-312.pyc deleted file mode 100644 index f9f4b10f..00000000 Binary files a/modules/__pycache__/todo_manager.cpython-312.pyc and /dev/null differ diff --git a/modules/__pycache__/user_manager.cpython-312.pyc b/modules/__pycache__/user_manager.cpython-312.pyc deleted file mode 100644 index a1464548..00000000 Binary files a/modules/__pycache__/user_manager.cpython-312.pyc and /dev/null differ diff --git a/modules/__pycache__/webpage_extractor.cpython-312.pyc b/modules/__pycache__/webpage_extractor.cpython-312.pyc deleted file mode 100644 index 2cf9bd75..00000000 Binary files a/modules/__pycache__/webpage_extractor.cpython-312.pyc and /dev/null differ 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 02d8275f..00000000 Binary files a/utils/__pycache__/api_client.cpython-312.pyc and /dev/null differ diff --git a/utils/__pycache__/context_manager.cpython-312.pyc b/utils/__pycache__/context_manager.cpython-312.pyc deleted file mode 100644 index 3f540bb5..00000000 Binary files a/utils/__pycache__/context_manager.cpython-312.pyc and /dev/null differ diff --git a/utils/__pycache__/conversation_manager.cpython-312.pyc b/utils/__pycache__/conversation_manager.cpython-312.pyc deleted file mode 100644 index d2ddb59c..00000000 Binary files a/utils/__pycache__/conversation_manager.cpython-312.pyc and /dev/null differ diff --git a/utils/__pycache__/logger.cpython-312.pyc b/utils/__pycache__/logger.cpython-312.pyc deleted file mode 100644 index a70a7e4a..00000000 Binary files a/utils/__pycache__/logger.cpython-312.pyc and /dev/null differ diff --git a/utils/__pycache__/terminal_factory.cpython-312.pyc b/utils/__pycache__/terminal_factory.cpython-312.pyc deleted file mode 100644 index 0dbec55e..00000000 Binary files a/utils/__pycache__/terminal_factory.cpython-312.pyc and /dev/null differ diff --git a/utils/api_client.py b/utils/api_client.py index 30de8775..6e8b2159 100644 --- a/utils/api_client.py +++ b/utils/api_client.py @@ -1,4 +1,4 @@ # 兼容入口,已迁移到 utils.api_client 包 -from utils.api_client import DeepSeekClient +from utils.api_client import APIClient -__all__ = ['DeepSeekClient'] +__all__ = ['APIClient'] diff --git a/utils/api_client/__init__.py b/utils/api_client/__init__.py index 0507d504..00bf33de 100644 --- a/utils/api_client/__init__.py +++ b/utils/api_client/__init__.py @@ -1,20 +1,20 @@ from utils.api_client.utils import _api_dump_enabled -from utils.api_client.base_mixin import DeepSeekClientBaseMixin -from utils.api_client.profile_mixin import DeepSeekClientProfileMixin -from utils.api_client.message_mixin import DeepSeekClientMessageMixin -from utils.api_client.tool_mixin import DeepSeekClientToolMixin -from utils.api_client.logging_mixin import DeepSeekClientLoggingMixin -from utils.api_client.formatting_mixin import DeepSeekClientFormattingMixin -from utils.api_client.chat_mixin import DeepSeekClientChatMixin +from utils.api_client.base_mixin import APIClientBaseMixin +from utils.api_client.profile_mixin import APIClientProfileMixin +from utils.api_client.message_mixin import APIClientMessageMixin +from utils.api_client.tool_mixin import APIClientToolMixin +from utils.api_client.logging_mixin import APIClientLoggingMixin +from utils.api_client.formatting_mixin import APIClientFormattingMixin +from utils.api_client.chat_mixin import APIClientChatMixin -class DeepSeekClient( - DeepSeekClientBaseMixin, - DeepSeekClientProfileMixin, - DeepSeekClientMessageMixin, - DeepSeekClientToolMixin, - DeepSeekClientLoggingMixin, - DeepSeekClientFormattingMixin, - DeepSeekClientChatMixin): +class APIClient( + APIClientBaseMixin, + APIClientProfileMixin, + APIClientMessageMixin, + APIClientToolMixin, + APIClientLoggingMixin, + APIClientFormattingMixin, + APIClientChatMixin): pass -__all__ = ['DeepSeekClient', '_api_dump_enabled'] \ No newline at end of file +__all__ = ['APIClient', '_api_dump_enabled'] \ No newline at end of file diff --git a/utils/api_client/base_mixin.py b/utils/api_client/base_mixin.py index c921f740..bc09c275 100644 --- a/utils/api_client/base_mixin.py +++ b/utils/api_client/base_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 DeepSeekClientBaseMixin: +class APIClientBaseMixin: def __init__(self, thinking_mode: bool = True, web_mode: bool = False): # 模型 API 配置(端点 / 密钥 / 模型 ID)由 apply_profile 从 custom_models 注入; # 这里仅初始化为空,未应用任何模型档案前不可直接发请求。 diff --git a/utils/api_client/chat_mixin.py b/utils/api_client/chat_mixin.py index 7f82911f..624ddeca 100644 --- a/utils/api_client/chat_mixin.py +++ b/utils/api_client/chat_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 DeepSeekClientChatMixin: +class APIClientChatMixin: async def chat( self, messages: List[Dict], diff --git a/utils/api_client/formatting_mixin.py b/utils/api_client/formatting_mixin.py index 8db9b1a1..1f15b933 100644 --- a/utils/api_client/formatting_mixin.py +++ b/utils/api_client/formatting_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 DeepSeekClientFormattingMixin: +class APIClientFormattingMixin: def _format_read_file_result(self, data: Dict) -> 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字符串的完整性