From bfefbef475c678cc8df326502c9d3c2dfebb6c74 Mon Sep 17 00:00:00 2001 From: OpenClaw Date: Fri, 8 May 2026 00:47:38 +0800 Subject: [PATCH] =?UTF-8?q?release:=20v5.2.0=20-=20=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=86=85=E5=AD=98=E7=AE=A1=E7=90=86=20+=20TUI=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ README.en.md | 2 +- README.md | 2 +- xcli_core/tui.py | 6 +++--- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1aa6290..64eaac3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,34 @@ --- +## v5.2.0 (2026-05-08) + +### ✨ 新增功能 + +- **插件内存管理器** (`plugin_memory_manager.py`) — TTL 自动淘汰 + 懒加载机制 + - 后台线程定期扫描空闲插件,超过 TTL(默认 5 分钟)自动从内存卸载,释放资源 + - AI 调用已卸载的插件时自动重新加载(懒加载),对用户完全透明 + - 核心插件(`tool_search`)可钉住永不淘汰,保障基础功能可用 + - 可配置参数:TTL 时间、最大空闲插件数、扫描间隔、钉住列表 + - `/status` 命令和 TUI 侧栏实时显示内存管理状态(已加载/已卸载/统计) + - `search_tools` 支持搜索已卸载插件(使用缓存的元数据,无需加载实例) + +### TUI 修复 + +- **修复消息分类失效** — `_write_raw` 中空字符串 `'' in msg` 永远为 True,导致所有消息显示为工具成功样式;替换为正确的 emoji 标记(✅/❌/🤖) +- **修复侧栏切换失效** — Textual 无 `.visible` 布尔属性,改用 `has_class("hidden")` + CSS 类控制显隐 +- **修复侧栏隐藏动画** — CSS `display: none` 阻止过渡动画,改用 `width: 0` + `opacity: 0` 方案 +- **修复 TextArea 导入缺失** — `constants.py` 可用性检查未导入 `TextArea`、`Rule` +- **修复 `set_timer(0)` 崩溃** — 欢迎动画首行延迟为 0.0 导致 Textual 8.x 除零错误(`ZeroDivisionError`),使用 `max(0.01, delay)` 修复 + +### 改进 + +- `UnifiedToolManager` 重构:集成 `PluginMemoryManager`,所有工具访问统一走 `_ensure_loaded` 路径 +- 新增 `get_all_tools_info()` 方法,系统提示词可列出所有注册工具(含已卸载) +- 新增 `get_tool_by_name()` / `memory_manager` 属性,兼容旧 `LiuginManager` 接口 + +--- + ## v5.1.4 (2026-04-29) ### 新增功能 diff --git a/README.en.md b/README.en.md index 8c926d2..0ee1d9c 100644 --- a/README.en.md +++ b/README.en.md @@ -5,7 +5,7 @@

- version + version python license tests diff --git a/README.md b/README.md index b5bc0a7..8496daa 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

- version + version python license tests diff --git a/xcli_core/tui.py b/xcli_core/tui.py index b658947..adda0bf 100644 --- a/xcli_core/tui.py +++ b/xcli_core/tui.py @@ -480,7 +480,7 @@ if TEXTUAL_AVAILABLE: "", " ╔══════════════════════════════════════════════╗", " ║ ║", - " ║ 小狸 Pro-CLI v5.1 ║", + " ║ 小狸 Pro-CLI v5.2 ║", " ║ 智能编程助手 · 动画增强版 ║", " ║ ║", " ╚══════════════════════════════════════════════╝", @@ -524,7 +524,7 @@ if TEXTUAL_AVAILABLE: ("", "msg-dim"), (" ╔══════════════════════════════════════════════╗", "msg-welcome"), (" ║ ║", "msg-welcome"), - (" ║ 小狸 Pro-CLI v5.1 ║", "msg-welcome"), + (" ║ 小狸 Pro-CLI v5.2 ║", "msg-welcome"), (" ║ 智能编程助手 · 动画增强版 ║", "msg-welcome"), (" ║ ║", "msg-welcome"), (" ╚══════════════════════════════════════════════╝", "msg-welcome"), @@ -723,7 +723,7 @@ if TEXTUAL_AVAILABLE: 'cls': lambda: self.action_clear(), 'model': lambda: self._switch_model(args), 'engine': lambda: self._switch_model(args), - 'about': lambda: self._system(" 小狸 Pro-CLI v5.1 - 智能编程助手"), + 'about': lambda: self._system(" 小狸 Pro-CLI v5.2 - 智能编程助手"), 'status': lambda: self._show_status(), 'tools': lambda: self._show_tools(), 'engines': lambda: self._show_engines(),