release: v6.1.0 - TUI 体验全面升级 + 背景自定义
TUI 界面改进: - 全面中文化: CommandPalette/HelpPanel/Footer/Chatbox 边框标题等所有用户可见英文汉化 - 辅助中心 (Ctrl+P/F9): 原"设置"重命名, 含 6 项可切换设置 - 独立帮助浮层 (? 键): 重写帮助页面逻辑, 全中文, 带滑入淡入动画 - 背景切换: 辅助中心 [5] 预设背景, [6] 自定义背景; 新增 /bg 命令支持图片提取主色调 - 换行修复: Ctrl+J 作为主推换行键 (Windows 终端不区分 Shift+Enter) - 引擎切换修复: 解决 call_from_thread 在主线程崩溃的 RuntimeError 技术改进: - 文本工具调用解析: 检测模型用 <tool_call> 标签返回的工具调用 - 网络工具优化: network_tools.py 和 ai_search.py 改进请求头/重试/编码 - 流式输出修复: append_chunk 的 refresh 改为 layout=True - 取消响应修复: 引擎层 _cancelled 标志 + TUI 层 worker 身份跟踪 融合 v6.0.0 工作: - 保留 terminal 模拟器/operit 桥接/深度思考/工作模式/记忆模式等 v6.0.0 全部功能 - 在此基础上叠加本会话的 TUI 改进
This commit is contained in:
1 parent
b5f638cffc
commit
de15b54b19
30 files changed
+3267
-934
No files matched your search
+20
-21
@@ -417,21 +417,17 @@ class LocalServer:
|
||||
image_engine = getattr(self.cli, 'image_engine', None)
|
||||
if not image_engine:
|
||||
try:
|
||||
from image_engine import get_image_engine
|
||||
image_engine = get_image_engine()
|
||||
from image_engine import get_engine_manager
|
||||
image_engine = get_engine_manager()
|
||||
except:
|
||||
return f"@{file_path}" # 没有图像引擎,直接返回路径
|
||||
|
||||
if websocket:
|
||||
await self._send_tool_status(websocket, "图像识别", text or "分析图片", "calling")
|
||||
|
||||
# 读取图片
|
||||
with open(file_path, 'rb') as f:
|
||||
image_data = f.read()
|
||||
|
||||
# 调用图像识别
|
||||
try:
|
||||
result = image_engine.analyze(image_data, text or "请描述这张图片")
|
||||
result = image_engine.analyze(file_path, text or "请描述这张图片")
|
||||
|
||||
if websocket:
|
||||
await self._send_tool_status(websocket, "图像识别", text or "分析图片", "success", result[:200] if result else "无结果")
|
||||
@@ -638,9 +634,13 @@ class LocalServer:
|
||||
from colorama import Fore, Style
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.connect(("8.8.8.8", 80))
|
||||
local_ip = s.getsockname()[0]
|
||||
s.close()
|
||||
try:
|
||||
s.connect(("8.8.8.8", 80))
|
||||
local_ip = s.getsockname()[0]
|
||||
except:
|
||||
local_ip = "未知"
|
||||
finally:
|
||||
s.close()
|
||||
except:
|
||||
local_ip = "未知"
|
||||
|
||||
@@ -657,9 +657,13 @@ class LocalServer:
|
||||
def get_status(self) -> dict:
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.connect(("8.8.8.8", 80))
|
||||
local_ip = s.getsockname()[0]
|
||||
s.close()
|
||||
try:
|
||||
s.connect(("8.8.8.8", 80))
|
||||
local_ip = s.getsockname()[0]
|
||||
except:
|
||||
local_ip = "未知"
|
||||
finally:
|
||||
s.close()
|
||||
except:
|
||||
local_ip = "未知"
|
||||
return {
|
||||
@@ -817,15 +821,12 @@ class ProxyClient:
|
||||
image_engine = getattr(self.cli, 'image_engine', None)
|
||||
if not image_engine:
|
||||
try:
|
||||
from image_engine import get_image_engine
|
||||
image_engine = get_image_engine()
|
||||
from image_engine import get_engine_manager
|
||||
image_engine = get_engine_manager()
|
||||
except:
|
||||
return f"@{file_path}"
|
||||
|
||||
with open(file_path, 'rb') as f:
|
||||
image_data = f.read()
|
||||
|
||||
result = image_engine.analyze(image_data, text or "请描述这张图片")
|
||||
result = image_engine.analyze(file_path, text or "请描述这张图片")
|
||||
return await self._process_message(f"@{file_path}", [], f"图片内容: {result}\n\n{text}" if text else f"图片内容: {result}")
|
||||
|
||||
except Exception as e:
|
||||
@@ -1133,8 +1134,6 @@ def start_proxy_client(cli_instance, server_host: str, server_port: int,
|
||||
websocket_server = None
|
||||
|
||||
return result
|
||||
|
||||
return _proxy_client.start(server_host, server_port, server_password, pc_port, pc_password)
|
||||
|
||||
|
||||
def stop_all():
|
||||
|
||||
Reference in new issue
Block a user