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:
shuiyu1123 committed 2026-06-29 13:00:19 +08:00
1 parent b5f638cffc
commit de15b54b19
30 files changed
+3267 -934

No files matched your search

+6 -7
View File
@@ -96,6 +96,7 @@ class ClawliMixin:
tool_calls = self._extract_tool_calls(json_data)
if tool_calls:
all_results = []
for tool_data in tool_calls:
tool_name = tool_data.get('tool', '未知工具')
tool_args = tool_data.get('args', '')
@@ -105,6 +106,7 @@ class ClawliMixin:
result = self.process_tool_call(tool_data)
result_text = result.get('result', '无结果')
all_results.append(result_text)
if CLAWLI_SERVER_AVAILABLE and clawli_server:
clawli_server.send_tool_status(tool_name, tool_args, "success", result_text)
@@ -114,7 +116,7 @@ class ClawliMixin:
"content": response
})
tool_result_str = "\n".join([f"工具执行结果: {r}" for r in [result.get('result', '')]])
tool_result_str = "\n".join(f"工具执行结果: {r}" for r in all_results)
self._process_clawli_user_message(f"{tool_result_str}\n请根据工具执行结果继续回答。")
return
@@ -134,16 +136,13 @@ class ClawliMixin:
image_engine = getattr(self, '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:
image_engine = None
if image_engine:
with open(image_path, 'rb') as f:
image_data = f.read()
result = image_engine.analyze(image_data, text or "请描述这张图片")
result = image_engine.analyze(image_path, text or "请描述这张图片")
self._process_clawli_user_message(f"@{image_path}\n图片内容: {result}\n\n{text}")
else:
self._process_clawli_user_message(f"@{image_path}\n{text}")