diff --git a/config/ocr.py b/config/ocr.py index d545d0e..be567a8 100644 --- a/config/ocr.py +++ b/config/ocr.py @@ -2,7 +2,7 @@ OCR_API_BASE_URL = "https://api.siliconflow.cn" OCR_API_KEY = "sk-suqqgewtlwajjkylvnotdhkzmsrshmrqptkakdqjmlrilaes" -OCR_MODEL_ID = "deepseek-ai/DeepSeek-OCR" +OCR_MODEL_ID = "Qwen/Qwen3-VL-30B-A3B-Thinking" OCR_MAX_TOKENS = 200 __all__ = [ diff --git a/core/main_terminal.py b/core/main_terminal.py index a1865f0..7077cd1 100644 --- a/core/main_terminal.py +++ b/core/main_terminal.py @@ -1143,12 +1143,12 @@ class MainTerminal: "type": "function", "function": { "name": "ocr_image", - "description": "使用 DeepSeek-OCR 读取图片中的文字或根据提示生成描述,仅支持本地图片路径。", + "description": "使用 Qwen3-VL模型 读取图片中的文字或根据提示生成描述,仅支持本地图片路径。", "parameters": { "type": "object", "properties": { "path": {"type": "string", "description": "项目内的图片路径"}, - "prompt": {"type": "string", "description": "传递给 OCR 模型的提示词,如“请识别图片中的文字”,必须使用中文提示词。"} + "prompt": {"type": "string", "description": "传递给 OCR 模型的提示词,如“请识别图片中的文字”,“图中的手机是什么颜色的”必须使用中文提示词。"} }, "required": ["path", "prompt"] } diff --git a/modules/usage_tracker.py b/modules/usage_tracker.py index a1f8c60..5377b2f 100644 --- a/modules/usage_tracker.py +++ b/modules/usage_tracker.py @@ -18,9 +18,9 @@ QUOTA_DEFAULTS = { }, "search_daily": {"limit": 20, "window_hours": 24}, "admin": { - "fast": {"limit": 9999, "window_hours": 5}, - "thinking": {"limit": 9999, "window_hours": 5}, - "search": {"limit": 9999, "window_hours": 24}, + "fast": {"limit": 999, "window_hours": 5}, + "thinking": {"limit": 999, "window_hours": 5}, + "search": {"limit": 999, "window_hours": 24}, }, } diff --git a/static/src/styles/components/panels/_left-panel.scss b/static/src/styles/components/panels/_left-panel.scss index c51ef94..45581f6 100644 --- a/static/src/styles/components/panels/_left-panel.scss +++ b/static/src/styles/components/panels/_left-panel.scss @@ -103,13 +103,27 @@ height: 12px; border-radius: 6px; background: var(--claude-muted); - box-shadow: 0 0 0 4px rgba(121, 109, 94, 0.18); transition: background 0.2s ease, box-shadow 0.2s ease; + position: relative; + overflow: visible; +} + +.connection-dot::after { + content: ""; + position: absolute; + inset: 0; + border-radius: inherit; + opacity: 0; + background: transparent; } .connection-dot.active { background: var(--claude-success); - box-shadow: 0 0 0 6px rgba(118, 176, 134, 0.25); +} + +.connection-dot.active::after { + background: var(--claude-success); + animation: statusPulse 2.4s ease-out infinite; } .mode-icon-enter-active, @@ -123,6 +137,21 @@ transform: scale(0.5) rotate(8deg); } +@keyframes statusPulse { + 0% { + transform: scale(1); + opacity: 0.35; + } + 70% { + transform: scale(2.2); + opacity: 0; + } + 100% { + transform: scale(2.2); + opacity: 0; + } +} + .sidebar-header { padding: 23px; border-bottom: 1px solid var(--claude-border); @@ -203,6 +232,10 @@ .sidebar-panel-content { flex: 1 1 auto; + display: flex; + flex-direction: column; + min-height: 0; + overflow: hidden; background: var(--claude-sidebar); padding: 6px 12px 24px; border-radius: 0 0 18px 18px; @@ -266,8 +299,18 @@ /* 文件树 */ .file-tree { + flex: 1 1 auto; + min-height: 0; padding: 12px 0 20px; color: var(--claude-text); + overflow-y: auto; + -ms-overflow-style: none; + scrollbar-width: none; +} + +.file-tree::-webkit-scrollbar { + width: 0; + height: 0; } .todo-panel { @@ -338,7 +381,8 @@ color: var(--claude-text-secondary); } -.todo-empty { +.todo-empty, +.sub-agent-empty { font-size: 14px; color: var(--claude-text-secondary); padding: 12px;