Files
xiaoli-cli/CHANGELOG.md
T
shuiyu67andWorkBuddy 749fb3f91c release: v8.0.4 — 会话 SQLite 存储 + 去加载动画 + 展示截断 + 工具调用解析加固
- 会话数据改用 SQLite(chat_history/conversations.db,WAL):sessions / snapshots 两表,
  首次启动自动迁移旧 JSON,/chat 与 /resume 改走 SQLite,memory 搜索兼容数据库
- 去掉流式显示(_typeprint 改整段打印)与常驻加载动画(移除 show_animation 线程及逐帧输出)
- 展示给用户的消息过长自动截断(仅展示层,底层 messages 完整保存)
- 工具调用解析加固:_loads_json 四级兜底修复;新增 _extract_last_action_json 成对错括号扫描;
  续轮也下发 Function Calling 工具,减少长文本格式错误浪费 token
- 版本号统一更新至 8.0.4(README/about.txt/constants/TUI banner/LSP·MCP clientInfo)
- 12 项 session 单测 + 8 项 JSON 提取边界用例全部通过

Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
2026-08-08 00:54:18 +08:00

19 KiB
Raw Blame History

更新日志

所有重要更改都记录在此文件中。格式基于 Keep a Changelog。


v8.0.4 (2026-08-08) — 稳定性 & 存储升级

🚀 重大改进

  • 会话数据改用 SQLite 存储(替代原先每个会话一个 JSON 文件)
    • 新增 xcli_core/session.py SQLite 后端:库文件 chat_history/conversations.db,启用 WAL 模式、check_same_thread=False
    • 两张表:sessions(id,title,created_at,updated_at,engine,model,messages) 与 snapshots(name,saved_at,messages)
    • 首次启动自动迁移:扫描旧的 chat_history/*.json,id+messages 结构写入 sessions、纯 conversation 结构写入 snapshots,迁移后移入 _migrated_json/ 并写 .migrated 标记;迁移包在 try/except 中,绝不阻塞启动
    • /chat save|list|open 与 /resume 命令改走 SQLite;memory.py 关键词搜索同时检索数据库会话,向后兼容未迁移的 JSON
    • SessionManager 的类名与 new_session/save/list_sessions/resolve/load 接口保持不变,旧调用方(cli_history.py、tests/test_session.py)零改动

🐛 Bug 修复 / 体验

  • 去掉「一直打印加载动画」的根源
    • 移除流式显示:_typeprint 改为一次整段打印(去掉逐字符 time.sleep 打字机循环)
    • 移除常驻加载动画:_generate_response_with_animation 去掉 show_animation 线程、love_sentences、animation_running 事件与逐帧输出;TTY 仅打印一行静态 💭 思考中… (按 ESC 取消),完成后清除该行
    • 经核查 OpenAI / Ollama 引擎本就用 stream: False,「流式」实为打字机 + 逐帧动画,本次一并去除

✨ 新功能

  • 展示给用户的消息过长自动截断(仅展示层,存储完整)
    • cli_display.py 新增 _truncate_for_display:超过 max_chars=4000 字符 / max_lines=160 行时,保留前若干行与字符,末尾追加 … (展示已折叠,完整内容共 N 字符 / M 行,已完整保存到会话)
    • 底层会话数据(messages)不做任何截断,完整保存

🛠 工程

  • 工具调用解析更稳,减少因格式错误浪费 token

    • _loads_json 升级为 4 级兜底修复:①标准 → ②未配对反斜杠转义 → ③字符串内未转义换行/制表符(\n/\t 修正)→ ④多余尾逗号删除({...",}),全局统一复用
    • 新增 _extract_last_action_json:扫描所有「成对错括号」对象(字符串感知,追踪 in_str/esc),返回键集合与 CONTROL_KEYS={"action","continue","need_continue","think_more","message"} 相交的最后一个候选;开头即 [ 纯数组(多次工具调用)直接返回数组;替代原先脆弱的「方法5/6/7」正则抓取
    • _build_fc_tools 去除「续轮剥离 Function Calling 工具」逻辑,续轮也始终下发 FC 工具,模型可用结构化调用而非散文 JSON
    • 配套独立校验脚本 8 用例全过(含未转义换行、纯数组、尾逗号、正文误触发不应判为工具等边界)
  • 版本号统一更新至 v8.0.4(含 README 中英 badge、about.txt、xcli_core/constants.py 中央 VERSION、TUI banner、LSP/MCP clientInfo.version)


v8.0.3 (2026-08-07) — 体验增强

✨ 新功能

  • TUI 新增 Vim 风格键位(默认开,可用 /vim 开关)
    • 输入框模态编辑:Esc 在 NORMAL / INSERT 间切换;NORMAL 下
      • 移动:h j k l、w / b(跳词)、0 / $(行首/行尾)、^(首个非空白)、gg / G(文首/文尾)
      • 进入插入:i / a / o(插入/追加/下方新行)、I / A / O(行首/行尾/上方新行)
      • 编辑:dd(删行)、x(删字)、dw(删词)、d$(删到行尾)、u(撤销)
      • 普通模式下 回车 = 下移一行(与 vim 一致)
    • 核心状态机抽成纯模块 xcli_core/vim_keys.py(VimInputState,不依赖 textual),配 tests/test_vim_keys.py 单测,18 项动作全部验证通过
    • 聊天区导航(输入框未聚焦时生效):j / k 逐行滚动、Ctrl+F / B 翻页、Ctrl+D / U 半页、Ctrl+Space 切换焦点、i 聚焦并进入插入
    • 输入框下方提示栏实时显示 -- INSERT -- / -- NORMAL -- 模式;/help 已补充 Vim 键位说明
    • 可通过 config.json 的 vim_mode: false 默认关闭

🛠 工程

  • 版本号统一更新至 v8.0.3(含 README 中英 badge、about.txt、xcli_core/constants.py 中央 VERSION、TUI banner、LSP/MCP clientInfo.version)

v8.0.2 (2026-08-07) — 小修复版本

🐛 Bug 修复

  • 加载动画在非 TTY 环境不再污染输出流(提交 c81914a)
    • _generate_response_with_animation 的 show_animation 用 print("\r...") 逐帧(约 10 帧/秒)输出 love.txt 情话 + spinner,仅真终端能原地覆盖;被聊天前端 / WebSocket 桥 / 管道 / 日志镜像捕获时每帧变成一行垃圾混进对话显示
    • 加 sys.stdout.isatty() 守卫:非 TTY 只输出单行提示、不跑逐帧 \r 动画
    • TUI 模式(tui_output_callback)本就跳过动画,不受影响
  • 非 TTY 环境保留情话「人味」(提交 1c52482)
    • 上一版修复导致聊天界面完全看不到情话,改为:非 TTY 在请求开始输出一句随机情话(💭 前缀,只打一次、零残帧)
    • love.txt 读取时过滤 http/https 行,避免把反战标语 / 网址当情话甩出
    • 真 TTY 逐帧情话 + spinner 动画、TUI 模式均不受影响
  • 修复文件管理器跨平台路径串台(本次提交)
    • 模型在 Windows 主机上常给出 Linux/Mac 风格绝对路径(如 /home/user/Desktop、/Users/<谁>/Desktop、/root/Desktop),os.path.abspath 在 Windows 下会错误地拼成 C:\home\user\Desktop 并报「路径不存在」
    • 新增 _resolve_cross_platform_path:Windows 下把 /home/<用户>/…、/Users/<用户>/…、/root/… 统一映射到当前用户家目录对应位置(~/Desktop 等);Linux/Mac 下这些路径本身合法,原样保留
    • file_manager 全部 10 个操作(list/read/write/append/copy/move/delete/search/info/mkdir)的路径解析均改用该归一化函数

🛠 工程

  • 版本号统一更新至 v8.0.2(含 README 中英 badge、about.txt、xcli_core/constants.py 中央 VERSION、TUI banner、LSP/MCP clientInfo.version)

v8.0.1 (2026-08-07) — Release

✨ 新增功能

  • Operit 市场插件转译层全面落地
    • plugins/operit_loader.py 增强:OkHttp.newClient()、OkHttpRequest.execute() 改为异步、OkHttpResponse 新增 json() 与 statusMessage()(基于 http.HTTPStatus)
    • plugins/operit_translate.py 新增:Operit .ts 插件 → xiaoli-cli .py 脚手架生成器(自动提取 METADATA、生成 exports 胶水,原 TS 作参考注释保留)
    • 接入 5 个已全链路验证的 Operit 市场插件:
      • market_time — 时间查询 / 格式化
      • market_duckduckgo — 网页内容抓取与清洗
      • market_crossref — Crossref 学术文献检索
      • market_network_test — HTTP 连通性测试
      • market_reader — 本地代码递归搜索

🛠 工程

  • 版本号统一更新至 v8.0.1(含 README 中英 badge、about.txt、xcli_core/constants.py 中央 VERSION、TUI banner、LSP/MCP clientInfo.version)

v5.4.0 (2026-05-09) — Release

✨ 新增功能

  • 跨平台进程保护模块 (xcli_core/process_protection.py)
    • 单实例保护 — 防止重复启动,Windows 使用命名 Mutex,macOS/Linux 使用 fcntl 文件锁(自动清理残留锁文件)
    • 进程优先级提升 — Windows: SetPriorityClass (ABOVE_NORMAL/HIGH/REALTIME),macOS/Linux: os.nice() + renice
    • Windows PPL 风格保护 — SetErrorMode 抑制系统错误弹窗 (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX)、faulthandler 崩溃堆栈捕获
    • POSIX 信号保护 — macOS/Linux 忽略 SIGHUP(终端关闭不退出)、注册 SIGTERM 优雅关闭、macOS 忽略 SIGPIPE
    • 看门狗监控 — 后台线程监控父进程状态,父进程退出时自动清理并退出
    • 关闭钩子系统 — 注册自定义清理函数,进程退出时自动执行
    • 一键启用 — enable_process_protection() 单函数调用启用全部保护
    • /protect 命令 — CLI 中查看保护状态,/protect test 重新测试所有保护

改进

  • platform_utils.py 新增 is_process_running()、get_process_priority()、set_process_priority() 跨平台工具函数
  • cli_base.py 启动时自动初始化进程保护,退出时自动清理
  • cli_core.py 启动 banner 显示保护状态图标(单实例/优先级/PPL/看门狗)
  • 全版本号统一更新至 v5.4.0

v5.2.0 (2026-05-08)

✨ 新增功能

  • 插件内存管理器 (plugin_memory_manager.py) — TTL 自动淘汰 + 懒加载机制
    • 后台线程定期扫描空闲插件,超过 TTL(默认 5 分钟)自动从内存卸载,释放资源
    • AI 调用已卸载的插件时自动重新加载(懒加载),对用户完全透明
    • 核心插件(tool_search)可钉住永不淘汰,保障基础功能可用
    • 可配置参数:TTL 时间、最大空闲插件数、扫描间隔、钉住列表
    • /status 命令和 TUI 侧栏实时显示内存管理状态(已加载/已卸载/统计)
    • search_tools 支持搜索已卸载插件(使用缓存的元数据,无需加载实例)

统一插件格式

  • 统一自研插件入口类名为 Liugin — 18 个插件从 class Plugin 统一为 class Liugin
    • 加载器保留 Plugin 回退兼容,第三方插件仍可用旧格式
    • 测试块中 Plugin() 调用同步更新为 Liugin()

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)

新增功能

  • 桌面GUI自动化插件 (gui_auto, 20 操作) — 基于 Windows UI Automation (UIA) API,AI 可识别和操控桌面应用

    • 元素树获取 (snapshot) — 获取整个屏幕或指定窗口的 UI 元素树,支持自定义遍历深度
    • 元素交互 — 点击/右键/双击(名称模糊匹配 + 坐标点击),文本输入(中文 Unicode)、清空、发送按键
    • 窗口管理 — 列出所有窗口 (windows)、聚焦指定窗口 (focus)
    • 元素查询 — 查找/查找所有/详情/值/子树/存在检查/状态,共 8 个查询操作
    • 高级功能 — 等待元素出现(带超时)、高亮闪烁元素(GDI 红色边框)、滚动
    • MCP/FC 完整定义,AI 通过 Function Calling 直接调用,非 Windows 环境优雅降级
  • AI 生图插件 (ai_image) — 基于 ai.2x.nz 自然语言生图接口

    • 自然语言描述 + 直接 Tag 双模式
    • 工作流切换、画风选择、分辨率调整
    • 异步生成 + WebSocket 进度推送
    • 生成历史记录
  • Web UI 后端 (webui_server.py) — WebSocket 实时通信 + 静态文件服务

    • 纯 Python 实现,基于 websockets 库
    • 支持命令行参数 (--port / --host)
    • 与前端 webui.html 配合,提供完整的浏览器端 AI 交互体验

改进

  • Web UI 前端重写 (webui.html) — 从纯静态页面升级为 WebSocket 实时交互
    • 大厂设计感 UI,响应式布局
    • 实时消息流、打字机效果
    • 支持工具调用结果展示

文档

  • 更新 README.md: 插件列表、项目结构、badge 版本号
  • 更新 CHANGELOG.md: v5.1.4 完整变更记录
  • 更新 HELP.md: 新增 GUI 自动化使用说明

测试

  • 新增 gui_auto 插件 30 个单元测试(工具信息、MCP 定义、参数转换、错误处理、操作路由)

v5.1.3 (2026-04-28)

新增功能

  • 图像生成插件 (image_generator) — 基于 ai.2x.nz 的 ComfyUI 在线服务,自然语言/Tag 双模式,支持中文描述,28 个角色工作流可选,分辨率可调(最大 1344×1344)
  • 记忆系统插件 (memory_plugin) — 包装 xcli_core/memory.py 的完整记忆工具,AI 可写日记、读日记、搜索记忆、管理聊天记录、操作长期记忆 MEMORY.md
  • AI 编程助手横评页面 (compare.html) — 7 款工具(Claude Code / Codex CLI / Gemini CLI / Aider / Copilot CLI / 小狸 / TG HELPER)25+ 维度同口径对比

修复

  • 修复记忆系统插件(Liugin 类在 xcli_core/memory.py 中定义但未被插件管理器加载)导致 AI 无法调用记忆工具的问题,新增 plugins/memory_plugin.py 包装层

文档

  • 全面更新 README.md 至 v5.1.3
  • 新增记忆系统、Clawli 远程模式、MCP 协议支持、定时任务、系统通知等功能说明
  • 更新插件列表:15 个 → 17 个(+image_generator, +memory_plugin)
  • 更新操作数:141 → 141+
  • 补充 MCP 协议支持说明(17 个插件全部实现 MCP 定义)
  • 补充插件开发文档中 Liugin / Plugin 双协议说明

贡献者

  • 感谢 艾轮 卧壳 对本版本的贡献 🖤

v5.1.2 (2026-04-26)

新增功能

  • 自动语法检查系统 — 编辑操作(edit/multi/insert/delete_lines/create/write/append)完成后自动检查代码语法,通过显示 ✓,失败显示详细错误信息(行号、列号、错误描述)
  • 主动语法检查 — 新增 syntax_check <文件> / check <文件> 操作,AI 可随时主动检查任意文件语法
  • 多语言支持 — 语法检查覆盖 Python (ast.parse + py_compile)、JavaScript、TypeScript、JSON、YAML、TOML、HTML/XML (标签匹配)、CSS (括号匹配)、Shell (bash -n)、SQL
  • Diff 弹窗 — 每次编辑操作完成后自动弹出新终端窗口,显示修改前/修改后的完整内容(带行号)、diff 差异、新增/删除行数统计。支持 diff_popup on/off 开关,默认开启。兼容 Windows (cmd)、macOS (Terminal.app)、Linux (gnome-terminal/xterm/konsole 等)
  • 默认模型更新 — Ollama 默认模型从 qwen2.5 更新为 gemma4:31b
  • Web UI — 新增纯静态 HTML 界面 (webui.html),无需后端,浏览器直接打开。包含对话界面(气泡+快捷指令+打字动画)、代码编辑器(行号+Tab+Ctrl+S)、文件浏览器、系统状态面板、引擎/工具一览、实时日志
  • TUI 动画系统 — 为 TUI 模式添加流畅动画效果,包括启动过渡、消息淡入、光标呼吸等微交互
  • TUI 多行输入 — 支持 Shift+Enter 换行输入,长 prompt 不再受限于单行,编辑体验大幅提升
  • Windows EXE 启动器 — launcher.exe 一键启动,无需预装 Python 环境,解压即用
  • Gitee Go CI 流水线 — 新增 .gitee/pipeline.yml,支持 Gitee 平台自动化构建与测试

修复

  • 修复 TUI 模式下部分终端不支持 256 色导致渲染异常的问题
  • 修复 launcher.py 在 Python 3.12 环境下 datetime.utcnow() 弃用警告
  • 修复 Gitee Go 流水线 YAML 格式错误导致 CI 失败的问题
  • 修复插件加载时 __pycache__ 缓存文件干扰模块发现的边界情况

优化

  • TUI 渲染性能优化,减少不必要的屏幕重绘,输入响应延迟降低约 40%
  • 启动器依赖检测逻辑重构,离线环境下启动速度提升 2-3 秒
  • 终端宽度适配优化,80 列窄终端下不再出现排版错乱
  • 移除全局 emoji 依赖,适配无 emoji 字体的终端环境

文档

  • 全面更新 README.md / README.en.md 版本标识至 v5.1.2
  • 更新 CHANGELOG.md 补充 v5.1.2 变更记录

贡献者

  • 感谢 艾轮 卧壳 对本版本的贡献 🖤

v5.1.1 (2026-04-26)

新增功能

  • 浏览器自动化插件 (browser_auto) — 基于 Playwright 的无头浏览器操控,31 个操作:导航/交互/截图/JS 执行/PDF/cookies
  • 子 Agent 系统 (sub_agent) — 多 Agent 并行协作,spawn/list/status/result/send/kill,独立任务分配与结果回收
  • 统一安全层 (safety.py) — AI 风险识别 + 三模式切换(普通/人工/无限制),所有工具调用前统一拦截检查
  • OpenAI 兼容引擎 (openai_engine) — 支持 DeepSeek、Grok、硅基流动、本地 vLLM 等所有 OpenAI 格式 API
  • 自动化测试套件 — 113 个 pytest 用例,覆盖全部 15 个插件 + 引擎 + 核心模块
  • CI 工作流 — GitHub Actions: 语法检查 + ruff lint + pytest (Python 3.10/3.11/3.12 矩阵) + 项目结构验证

重构

  • 插件大优化 — 17 个插件 → 15 个,5689 行 → 4309 行
    • code_editor + code_search → code_editor(编辑+搜索统一)
    • git_tools + git_workflow → git_tools(基础+工作流统一)
    • auto_engineer + project_analyzer → auto_engineer(质量+分析统一)
    • 删除 scheduler.py(空文件)
  • 引擎精简 — 移除 7 个旧引擎(MiMo/GLM/QwQ/讯飞/iFlow/MaaS/SDK_openAI),保留 ollama + 新增 openai
  • 启动器重写 — launcher.py 从 1741 行精简到 666 行,修复重复方法和硬编码引擎名
  • cmd_executor 跨平台 — 移除 Windows-only 限制,支持 Linux/macOS/Windows

修复

  • 修复 code_editor 的 diff_text 解析器被 split(maxsplit=2) 拆坏分隔符的问题
  • 修复 cmd_executor 中坏掉的 from ai_cli import 循环导入
  • 修复 launcher.py 中两个重复的 run() 和 show_final_result() 方法

文档

  • 全面更新 README.md / README.en.md 适配 v5.1.1
  • 新增 config.json.example 配置模板

v5.0.0 (2026-04-25)

新增功能

  • TUI v2 — 全新 TUI 界面,暗色主题 + 现代布局
  • 完整 MCP 协议支持 — 为所有插件添加 MCP (Model Context Protocol) 定义
  • 代码统计 Skill (code_stats) — 新增 Skill 协议示例
  • 工程化自动化插件 — 新增 auto_engineer、project_analyzer、git_workflow
  • 任务调度器 (scheduler) — 定时任务支持

架构改进

  • 重写代码沙箱 — 全新的安全沙箱实现,支持超时控制和资源限制
  • 完整测试套件 — 192 个测试用例,覆盖核心功能

v3.6.0-release (2026-04-25)

新增功能

  • 精准代码编辑器 (code_editor) — 搜索替换、批量编辑、diff 对比
  • 代码搜索理解 (code_search) — 跨文件搜索、正则匹配、符号提取
  • Git 版本控制 (git_tools) — 完整 Git 操作支持
  • TUI 默认模式 — 图形化界面为默认启动方式

架构重构

  • 拆分 ai_cli.py(3860行)为模块化 xcli_core/ 包
  • 新增入口点: python ai_cli.py

v3.5 (2026-02-12)

  • 初始开源版本