shuiyu67
|
413f66deb8
|
feat: py_detect L3 数据流引擎 (部分路径未定义就用 E004)
- _dataflow_check: 对每个函数收集局部变量(参数+赋值目标, 排除 global/nonlocal), 按路径合并扫描
- if/elif: 合并点 defined = 两分支交集 (只有都赋值才确定)
- for/while: 循环体赋值可能 0 次执行 → 不贡献确定; 循环体内 target 确定有值; orelse 用进入前集合
- try: 主路径赋值算确定, except 分支独立不合并; with/delete/return/raise 处理
- 保守原则: 宁漏勿误, 只报确定会炸的路径
- E004 动态修复建议: 建议使用前赋初值 x = None 或确保所有分支赋值
- 版本 1.3.0; 新增 12 项数据流测试; 相关套件 275 passed 零回归
- 至此 L1 规则 + L2 jedi 语义 + L3 数据流 三代引擎齐备
|
2026-08-07 02:41:33 +08:00 |
|
shuiyu67
|
4fb9392db4
|
chore: jedi 显式预装 (requirements.txt + launcher 第三方白名单)
- requirements.txt 加 jedi: 装依赖即自动预装 L2 语义验证后端 (纯 Python)
- launcher.third_party 加 jedi: scan_imports 重写 requirements 时不会丢
- 验证: py_detect 内缩进 import jedi 可被扫描正则捕获
- 无 jedi 仍自动降级纯标准库, 低配设备行为不变; 53 passed 零回归
|
2026-08-07 02:31:16 +08:00 |
|
shuiyu67
|
5008d431c9
|
feat: py_detect L2 语义验证后端 (可选 jedi, 自动降级)
- _jedi_validate(): 检测到 jedi 时用语义推断二次确认 E002 未定义变量
- 消除 from x import * / 跨文件符号 / 类型别名 的规则引擎误报
- 真未定义保留; 无 jedi 时原样返回 (纯标准库模式行为完全不变)
- 关键坑: jedi 的 infer line/column 是 1-based (与 ast 一致, 与 LSP 0-based 不同), 之前按 0-based 传导致位置全错
- 版本 1.1.0 → 1.2.0; 新增 4 项测试 (import* 误报消除/真未定义保留/无 jedi 降级/跨文件无错)
- 相关套件 263 passed 零回归
|
2026-08-07 02:25:36 +08:00 |
|
shuiyu67
|
917ba25902
|
feat: py_detect 升级算法智能解释 (零 AI 模型, 纯算法动态生成)
- 拼写纠错: 未定义变量用 difflib 相似度推荐最近名字 (totl -> 你是不是想写「total」)
- 动态修复示例: W004 生成 def f(items=None) 改写; W005 生成 x is None; W006 生成 lst[:] 复制
- 动态注入上下文: 函数名/参数名/列表名/比较对象/首次定义行号/return 行号
- W005 扩展支持 != None; I001 从 type(x) 参数正确提取对象与类型
- 定位: 连 1B 模型都跑不动的设备也秒级运行, 永不联网, 不依赖任何 AI
- 新增 9 项智能解释测试; 相关套件 259 passed 零回归
|
2026-08-07 02:13:43 +08:00 |
|
shuiyu67
|
56d5ed27e0
|
feat: 自研本地 LSP 服务器 (jedi 语义 + py_detect 诊断),替代 pylsp
- xcli_core/local_lsp_server.py: LSP over stdio (Content-Length 分帧),兼容现有 lsp_client
- 语义: jedi 0.20 API (goto/infer/get_references/complete/help) — 补全/跳转/引用/悬停
- 诊断: 复用 plugins/py_detect 规则引擎,中文诊断 + 修复建议,didOpen/didChange 自动推送
- 零网络、零外部安装 (无需 pip install pylsp),服务器无响应时客户端可超时跳过
- config.json(.example): python 语言默认切到本地服务器; 换回 pylsp 改 command 即可
- lsp_client.py: command 为裸 python 且 PATH 找不到时回退 sys.executable (防环境坑)
- 16 项测试 (分帧/路径/协议/语义/真实 subprocess 完整握手); 相关套件 277 passed 零回归
|
2026-08-07 02:00:49 +08:00 |
|
shuiyu67
|
9a133dcf88
|
feat: py_detect 纯本地 Python 智能检测插件 + code_editor 写 .py 后自动检测
- 零第三方依赖 (仅标准库 ast/tokenize),低配电脑无压力
- 三层检测: 语法错误精确定位 / 作用域语义检测(未定义变量/重复定义/未使用导入) / 反模式扫描(可变默认参数/裸except/==None/迭代中修改/覆盖内置/import*/除零/缺self/死代码)
- 每条诊断带中文解释 + 修复建议 (规则模板, 零 AI)
- code_editor 所有写文件操作 (edit/multi_edit/insert/delete_lines/create/write/append) 改完 .py 自动调用检测, 仅有问题时输出前6条
- 40 项测试 (含 5 项 code_editor 自动检测集成)
|
2026-08-07 01:41:38 +08:00 |
|
shuiyu67
|
2e4093cc03
|
perf: ollama 彻底惰性导入(模块级+实例级),AICLI 启动不再卡 ollama
|
2026-08-07 00:19:49 +08:00 |
|
shuiyu67
|
b7e87e40f3
|
perf: FC 工具结果续轮不再下发 schema,省每轮重发 token
|
2026-08-06 23:59:44 +08:00 |
|
shuiyu67
|
46376aa23e
|
feat: 重新打开 FC 开关,AI 可在纯 JSON 与 FC 之间自选(混合模式)
|
2026-08-06 23:30:53 +08:00 |
|
shuiyu67
|
a70e4b1819
|
fix: 去掉返回给AI的工具结果截断 + 系统提示增加参数格式统一示例
|
2026-08-06 23:15:45 +08:00 |
|
 shuiyu67andWorkBuddy
|
e73744c742
|
perf: 提升上下文压缩保真度,避免二次失真
- 摘要前单条消息截断上限 200→1500 字,且长内容优先保留代码块(编码场景不丢上下文)
- keep_recent 硬编码 10→可配置(默认 12),适配跨多轮的编码编辑
- 历史摘要标记不再被二次摘要:累积合并为单条 system,新消息才产生新摘要块
- 摘要按角色分条、要求保留工具调用/代码修改点;simple_summarize 额外提取编辑文件
- 新增 tests/test_compress_quality.py 覆盖工具JSON保真/代码块保留/幂等/可配置keep_recent
Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
|
2026-08-06 22:59:01 +08:00 |
|
 shuiyu67andWorkBuddy
|
5fe1a7c868
|
feat: 统一 max_input_tokens API,所有引擎必须返回最大输入 token 数
- openai/ollama/manual 三引擎均暴露 max_input_tokens 属性(统一契约)
- ollama 额外上报 prompt_eval_count 到 last_prompt_tokens,使本地模型也走 token 感知压缩
- should_compress 改用 max_input_tokens,系统依当前引擎上限的 70%(compress_ratio)自动触发
- 压缩始终调用当前引擎(current_engine)做总结,符合"调用当前引擎总结压缩"
- 新增 tests/test_max_input_tokens.py 覆盖契约 + 70% 触发 + 消息数兜底
Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
|
2026-08-06 22:50:18 +08:00 |
|
 shuiyu67andWorkBuddy
|
c87a07706e
|
feat: 废弃 FC,改用纯 JSON action 模式调用工具
- engine.generate_response 不再下发 tools schema(TUI/CLI 分支均 tools=None)
- 系统提示改为纯 JSON 调用格式说明,保留 tool_search 自查用法
- 新增 _loads_json 容错解析,容忍模型写出的 Windows 反斜杠路径(如 C:/Users)
- 新增 tests/test_pure_json.py 覆盖解析容错/引擎无 schema 下发/端到端按名分发
Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
|
2026-08-06 20:43:39 +08:00 |
|
shuiyu67
|
b577b0ff21
|
feat: FC 工具去重 + 按场景动态裁剪,降低 AI 每轮负担
方案 A(去重):
- mcp_to_openai_tools 末尾按 function.name 去重,消除 cache+builtin 叠加
造成的同名重复(memory/scheduler/lsp__* 等),FC 工具 42→36,去掉
约 14% 的垃圾 schema token
- get_liugin_usage_prompts 的 plugins 段由逐条 name:desc 改为工具名清单,
消除与 FC tools 字段的双重曝光,保留无 FC 模型的回退清单
方案 B(分层裁剪):
- 新增 prune_tools(fc_tools, user_input): 常驻 ALWAYS(tool_search/memory/
scheduler) + 外部桥接(mcp__)默认保留 + 按关键词信号追加对应工具
(代码/文件->code_editor+file_manager+lsp__*; git/shell/浏览器/搜索/子agent/
工程化各按信号)
- cli_core 两处 FC 构建点(TUI/CLI)接入 prune_tools(current_input)
实测(AICLI): 纯聊天 FC token ~4310->285(降93%),写代码 ~973(降77%)
测试: 新增 tests/test_prune_tools.py (7 passed),全量 324 passed 无回归
|
2026-08-06 20:06:51 +08:00 |
|
shuiyu
|
1054932921
|
feat: pylsp 作为工具之一 + AI 写/改 .py 自动触发诊断并注入上下文
- 补装 pylsp 及 lint 后端(pyflakes/pycodestyle/rope/mccabe),真实诊断可用
- code_editor / file_manager 写/改操作后自动调用 LSP 诊断(.py),结果经
get_lsp_context() 静默注入下一轮模型上下文,仅在有问题时的可见提示
- config.json 中 rust 设为 disabled(本机未装,免 ERROR 噪声)
- requirements.txt / config.json.example 补充 pylsp 配置说明
- 新增 4 个 _auto_lsp_check 钩子单测
|
2026-08-05 21:23:16 +08:00 |
|
shuiyu67
|
c655d61af4
|
feat: TUI opencode 风格视觉升级(顶栏/标签页/色条/精简欢迎)
|
2026-08-05 20:23:31 +08:00 |
|
shuiyu67
|
addf119ac5
|
feat: TUI 深度(文件树 + 会话列表 + Plan 状态栏,headless 自验)
|
2026-08-05 19:43:30 +08:00 |
|
shuiyu67
|
d0915ab895
|
feat: Agents 体系化(markdown 定义 + @委派 + 子会话)+ 多 Provider 抽象路由
|
2026-08-05 19:07:15 +08:00 |
|
 shuiyu67andWorkBuddy
|
160d4e924e
|
feat: 声明式权限(opencode 式 allow/ask/deny 配置化)
- safety.check 在 plan 模式之后、安全模式之前插入声明式权限判定:
deny(阻断) > ask(强制确认) > allow(自动放行) > 默认(按安全模式)
- 规则语法支持 "*"全匹配 / "tool"精确 / "tool:*"任意操作 / "tool:op"操作前缀
- 读取 config.permissions;提供 set_permissions 显式注入(测试/启动用)
- config.json 顶层加 permissions 段(allow/ask/deny 示例,该文件被 gitignore 不入库)
- 修复:test_normal_mode_does_not_plan_block 隔离真实 config 权限,避免污染
- 新增 tests/test_permissions.py(14 项:规则匹配+deny/ask/allow+优先级)
Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
|
2026-08-05 17:56:25 +08:00 |
|
 shuiyu67andWorkBuddy
|
9dd418ec89
|
feat: LSP 集成(连接外部语言服务器,真实诊断/智能感知喂给模型)
- 新增 lsp_client.py:LspClient(subprocess stdio,Content-Length 分帧 JSON-RPC,
reader 线程,initialize/initialized/didOpen/didChange/hover/definition/references/
completion + publishDiagnostics 通知捕获)+ LspManager(按扩展名→语言→server 路由、
connect_all 读 lspServers、get_context 返回已分析文件诊断、cleanup 幂等)
- unified_tool_manager.py:initialize 末尾加载 LSP server,注册 5 个 lsp__* 工具
(diagnostics/hover/definition/references/completion,带真实 inputSchema、protocol='lsp'、
instance 存 manager 供 shutdown 清理)
- cli_core.py:_build_system_prompt 末尾注入 LSP 诊断上下文(模型持续看到真实诊断)
- config.json:顶层加 lspServers 段(python/rust 示例,含 _说明;该文件被 gitignore 不入库)
- 新增 tests/test_lsp_client.py(9 项:fake server 全链路+路由+桥接+fc_tools 保真+缺失/失败优雅降级)
- 修 LSP 线缆坑:didOpen/didChange 是通知(无响应),初版误当请求等响应导致超时
Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
|
2026-08-05 17:49:46 +08:00 |
|
 shuiyu67andWorkBuddy
|
d2ad1000b6
|
feat: MCP 客户端(连接外部 MCP server,外部工具桥接进统一工具体系)
- 新增 mcp_client.py:McpClient(subprocess stdio JSON-RPC,reader 线程+响应表,
initialize/list_tools/call_tool/shutdown 超时可控)+ McpClientManager(connect_all
读 mcpServers、聚合、call_tool、cleanup 幂等)
- unified_tool_manager.py:initialize 末尾加载外部 MCP server,按 server__tool 前缀
register_tool 带真实 inputSchema mcp_definition,shutdown 经 manager.cleanup 幂等终止子进程
- fc_tools.py:mcp_to_openai_tools 新增 get_mcp_tools 保真分支(同时修现状 liugin 工具
schema 被压成 args 的坑)
- config.json:顶层加 mcpServers 空段(用户自填,已被 gitignore 不入库,代码 .get 兼容)
- 新增 tests/test_mcp_client.py(5 项,全链路+桥接+保真,不触真实引擎/网络)
Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
|
2026-08-05 17:40:45 +08:00 |
|
 shuiyu67andWorkBuddy
|
a3977ecc85
|
feat: opencode 式 Plan 模式(只读调研 + /build 批准执行)
- safety.check 最高优先级加 Plan 只读拦截:写操作暂挂,只读放行
- BaseAICLI 新增 plan_mode / current_plan 状态
- _build_system_prompt 注入 PLAN 约束;/plan /build 命令路由与 handle 方法
- 速查表与启动提示补充 /plan /build
- 新增 tests/test_plan_mode.py(16 项,纯函数+拦截+注入+状态转换)
Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
|
2026-08-05 17:25:17 +08:00 |
|
shuiyu67
|
07490c4d38
|
feat: opencode 式会话持久化 + /resume 一键恢复
此前只有手动的 /chat save|list|open,关终端就丢上下文。现升级为
opencode 式体验:每轮对话自动落盘、启动提示历史会话、/resume 一键恢复。
- 新增 xcli_core/session.py:Session 数据类(id/title/created_at/updated_at/
engine/model/messages)+ SessionManager(new/save/list/load/resolve,存
chat_history/<id>.json)。向后兼容旧 /chat 格式(无 id、用 conversation 键,
读取时回退用文件名作 id)。标题自动取首条 user 消息前若干字。
- HistoryMixin 升级(cli_history.py):新增 init_session_manager /
_autosave_session / handle_resume_command。自动保存首轮惰性建会话、
更新标题与 updated_at;/resume 列出(序号|ID)或按序号|ID|前缀恢复,
恢复时把 messages 载入 shared_conversation_history 并同步引擎。
- 集成:cli_base.__init__ 在 chat_history_dir 就绪后 init_session_manager;
cli_core 主循环 1395 行 process_conversation 后调用 _autosave_session;
新增 /resume|/sessions 路由(/sessions 等同 /resume)。
- 体验:启动时若有历史会话提示 /resume(含最近会话标题);run() 紧凑提示
与 /help 速查表均补 /resume(列出/恢复/开新会话)。
- 修复 cli_history.py 一处历史 typo:{Style.RESET型} -> {Style.RESET_ALL}
(旧 load_chat_history 在含消息时会抛 AttributeError)。
- 测试:新增 tests/test_session.py(12 项,覆盖兼容/新建/落盘/排序/解析/
自动保存/恢复/列表/未知token,全程临时目录不污染真实 config/chat_history)。
全量 242 passed(原 230)。
真实 CLI 冒烟:启动提示识别到历史会话、/resume 正确列出(含标题/时间/引擎/
条数)、/resume <id> 正确恢复并回显;已清理测试种入文件,chat_history 复原为空。
|
2026-08-05 17:16:49 +08:00 |
|
shuiyu67
|
1383d32f8b
|
feat: OpenAI 多模型注册表 + /model 命令,告别手改配置文件
痛点:很多模型都是 OpenAI 格式,但换模型只能手改 config.json 的单槽位,
且只能存一个。新增模型注册表与 /model 命令族:
- 新增 xcli_core/model_registry.py:在 api.engines.openai 下维护
models 列表(name + base_url + api_key + model)与 current 指针,全部落盘。
向后兼容:无 models 时把扁平 api_key/base_url/model 当作单条隐式模型。
- OpenaiAI 接入:__init__ 应用注册表 current 模型;新增
set_registry_model / list_registry_models / add_model / remove_model /
current_model_name。注意保留引擎原有的轻量 set_model(只改 model 名)
与 list_models(查 API /models 端点),新方法与它们不重名、互不干扰。
- 新增 /model 命令族(仅 openai 引擎):
/model 列出已配置模型(* 标记当前)
/model <名称> 切换当前模型并持久化
/model add 交互式录入(名称/base_url/api_key/model),回车即存并切换
/model rm <名称> 删除(删当前则回退到列表第一个)
- 启动横幅引擎名后显示当前模型;紧凑提示与 /help 速查表均补 /model 入口。
- 测试:新增 tests/test_model_registry.py(13 项,覆盖兼容/增删/切换/落盘/
引擎接入/CLI 路由,全程临时配置不污染真实 config.json)。
全量 230 passed(原 217 passed)。
交互实测:/model add → 已添加并切换到 gpt4o;/model gpt4o → 已切换;
/model rm gpt4o → 回退到 xophunyuan7bmt,配置结构与内容完好。
|
2026-08-05 16:12:35 +08:00 |
|
shuiyu67
|
3a86da7444
|
perf: 启动输出瘦身 + FC 能力探测缓存,修复测试套件失效
自用体验(同时以人类和被接入 AI 的视角)暴露出三个问题,一并处理:
1. 启动太吵:117 行 / 16983 字符的开屏,人还没开始用就先刷屏
- 完整 ASCII 开机动画改为 --logo / --banner 按需召唤,默认两行紧凑标识
- 21 行命令说明折叠成一行「/help 全部命令 · /quit 退出 · ...」,
完整速查表挪进 /help(新增 show_quick_commands)
- 插件/引擎/工具的逐条加载日志改走 vprint,由 --verbose / -v /
XCLI_VERBOSE=1 召唤;工具加载汇总成一行
- 日志控制台 handler 降到 WARNING(文件仍留全量 INFO),并静音
httpx/httpcore/urllib3 等第三方心跳日志
=> 默认启动 10 行 / 475 字符,--verbose 仍可看到全部 36 行细节
2. 不支持 FC 的模型每次会话都白撞一发 500
讯飞 xophunyuan7bmt 不支持 Function Calling,请求带 tools 字段必报
500 Invalid Params,虽有降级重试兜底,但每个新会话都要先错一次。
- 新增 xcli_core/fc_tools 能力缓存(按 base_url::model 落盘 .fc_support.json)
- 降级重试成功后记住该模型不支持 FC,后续直接不发 tools
- 降级也失败时不写缓存,避免把别的故障误判成 FC 问题
- 新增 /fc [reset] 查看与清除缓存
3. diff 弹窗模式每次启动都要重新问一遍
- 首次选择后经 config.json 持久化,新增 /diff [popup|inline] 随时切换
测试:
- 新增 tests/test_startup_and_fc.py(27 项,含假 HTTP 验证降级与缓存链路)
- 修复 tests/test_plugins.py 长期失效:插件入口类早已由 Plugin 改名 Liugin,
8 处 fixture 未跟进导致 65 个用例直接 error;断言也未适配 ToolResult 返回值
与「❌」错误前缀。改为 plugin_class() / as_text() / is_error() 语义判断。
- 全量:217 passed(此前 152 passed + 65 error + 27 failed)
|
2026-08-05 15:57:38 +08:00 |
|
shuiyu67
|
d2ac6896ad
|
perf: 删除工具执行前的 5 秒等待延迟
_execute_single_tool 原先在真正调用工具前跑 25 次 sleep(0.2) 的
spinner 倒计时(固定 5 秒),仅为提供 ESC 取消窗口,每次工具调用都要白等。
- 删除倒计时循环,改为执行前非阻塞排空键盘缓冲区检测 ESC(零等待):
若用户在此之前按过 ESC 仍会取消并记入历史,行为不变。
- 执行期间打印一行静态'正在执行: <工具> <参数>'提示,结束后清除。
- TUI 模式行为不变(原本就跳过延迟)。
- 测试: 12 项全过,单次工具调用耗时 5000ms → 0.5ms。
|
2026-08-05 11:05:06 +08:00 |
|
shuiyu67
|
a63b9d2f97
|
fix: 修复 'ToolResult' object has no attribute 'get'
根因: cli_tools.process_tool_call 在启用 UnifiedToolManager 时直接返回
ToolResult 对象,而 7 个调用点全部按 dict 用 result.get('result'),触发
AttributeError;FC 路径 _execute_tool_by_name 也可能把 ToolResult 透传出去,
后续 result[:5000] 会再炸 TypeError。
- tool_result.py: 新增 normalize_tool_text / normalize_tool_dict,
统一收敛 ToolResult / dict / str / None 三种历史返回形态。
- cli_tools.process_tool_call: 统一返回 dict(附带 success/error_code/
tool_result),回退 handler 路径同样归一。
- cli_core._execute_tool_by_name: handler / memory / scheduler 返回值
归一成 str,保证 FC 路径可安全切片。
- openai/ollama/manual 引擎、websocket_server、cli_clawli: 取工具结果改用
normalize_tool_text(带本地兜底实现,避免循环导入)。
- cli_clawli: 顺带修复只回传最后一个工具结果的 bug,改为汇总全部。
- 测试: 23 项全过;纯格式/讯飞 500 降级回归冒烟通过。
|
2026-08-05 10:54:39 +08:00 |
|
shuiyu67
|
dfc42d8583
|
fix(v8.0): openai 引擎改纯官方格式 + 讯飞 500 兼容 + <input> 向导
- openai_engine: 请求体严格纯官方 OpenAI /chat/completions 格式(tool 消息去 name、
tool_calls 重建、tools 统一 type=function);500(含 xunfei/Invalid Params)自动去掉
tools 降级重试;_friendly_error 友好提示;MODEL_CONTEXT_WINDOWS 补讯飞星火。
- ollama_engine/fc_tools/cli_core: tool 消息去 name。
- config.py resolve_input_value(<input> 语法);ollama max_token_k(默认 <input:...>);
launcher 向导加 max_token_k 步骤。
|
2026-08-05 00:26:02 +08:00 |
|
shuiyu
|
539c21be72
|
chore: relicense to MIT
|
2026-08-02 18:39:28 +08:00 |
|
shuiyu67
|
db9203687d
|
fix(v8.0): 启用真·全屏 textual TUI 并修复 opacity 崩溃
- 修复崩溃: tui.py MessageBubble.on_mount 用 self.animate('opacity'),但
textual>=8 的 Widget.opacity 为只读属性会抛 'has no setter',导致每条消息
气泡崩溃 -> 改 styles.animate 并兜底直接设置。
- run_tui 改为默认真·全屏 textual XiaoliTUI(上方滚动聊天区+底部固定输入框+侧栏),
rich 面板仅作 textual 不可用时的回退(此前默认的是顺序面板,被指出是'假TUI')。
- 版本统一 v8.0.0: 欢迎框 + /about 改用 VERSION 常量。
- 状态栏联动 token 感知: 显示 used/context_window 进度条(引擎支持时)。
- 新增 /snapshot(/screenshot) 命令: 导出当前屏幕 SVG 到 .tui_snapshots/live.svg,
让实时 TUI 也能被 AI 自验。
- 新增 tools/tui_real_snapshot.py: textual run_test+Pilot 无头驱动真实 TUI,
喂对话、断言 DOM(用户/工具成功失败/助手/状态栏/token条/欢迎版本),导出 SVG。
7 项断言全过。
- 注: launcher 启动会重写 plugins_config.py/requirements.txt(含 tkinter 等错误项),
提交前已还原,避免误提交漂移。
|
2026-08-01 10:30:42 +08:00 |
|
shuiyu67
|
79957eba0f
|
feat(v8.0): 基于 v5.4.1 重构立项 v8.0.0
- 版本立项: constants.VERSION=8.0.0,about.txt/README 同步。
- Rich 面板式 TUI (xcli_core/rich_tui.py): 默认 TUI 渲染器,rich 驱动;
核心创新=快照出口(Console(record=True) -> text/svg/html),AI 开发界面
时可把渲染读回自验,补上'看不见渲染'闭环。tools/tui_snapshot.py 无头生成
演示快照。run_tui 优先 RichTUI,textual 作为回退。
- Token 感知压缩: openai_engine 捕获 usage.prompt_tokens -> last_prompt_tokens,
新增 context_window()(模型名查表 MODEL_CONTEXT_WINDOWS + config 覆盖);
memory.should_compress 升级为 token 感知(used/context_window >= ratio 触发,
默认 0.7),消息数阈值兜底;cli_core.process_conversation 自动压缩并提示。
- 记忆模式增强: 保留 v5.4.1 的 MEMORY.md/日记/自动保存/AI 摘要压缩,新增
/compress 手动压缩 与 /memory mode <companion|work> 切换。
- requirements 加 rich;.gitignore 忽略 .tui_snapshots/。
v8.0.0
|
2026-08-01 09:28:39 +08:00 |
|
shuiyu1123
|
b8faaae0c6
|
release: v5.4.1
v5.4.1
|
2026-06-19 00:30:15 +08:00 |
|
shuiyu1123
|
bac5ea01a9
|
feat: 统一错误处理 - ToolResult 类
- 新增 xcli_core/tool_result.py: ToolResult + ErrorCode
- unified_tool_manager: execute/mcp_call 返回 ToolResult
- cmd_executor: 所有返回改为 ToolResult
- file_manager: 所有返回改为 ToolResult
- 兼容旧接口: execute_dict() 返回 dict, handler 可返回 str 或 ToolResult
|
2026-06-19 00:26:49 +08:00 |
|
shuiyu1123
|
161ab9d3a8
|
feat: MCP stdio server + TUI回车发送 + 子Agent无限制 + 安全引擎优化 + diff弹窗绿红背景
- 新增 mcp_server.py: 标准 MCP stdio 传输层入口
- TUI: 回车发送消息,Shift+回车换行 (SendTextArea子类)
- 子Agent: 移除 max_steps=20 限制
- 安全引擎: 移除 ALWAYS_CONFIRM 关键词强制拦截
- code_editor: diff弹窗绿底(+)/红底(-)背景色
|
2026-06-19 00:10:27 +08:00 |
|
xiaoli-cli
|
b0d9a24003
|
release: v5.4.0 - 跨平台进程保护机制
v5.4.0
|
2026-05-09 20:33:14 +08:00 |
|
xiaoli-cli
|
97cc2bb0f7
|
feat: 跨平台进程保护机制 v5.3.0
- 新增 process_protection.py 模块
- 单实例保护: Windows命名Mutex / macOS+Linux fcntl文件锁
- 进程优先级提升: Windows SetPriorityClass / POSIX os.nice()
- Windows PPL风格保护: SetErrorMode抑制错误弹窗
- POSIX信号保护: 忽略SIGHUP/SIGPIPE, 注册SIGTERM优雅关闭
- 看门狗监控: 后台线程监控父进程状态
- 关闭钩子系统: 进程退出时自动执行清理
- /protect 命令查看保护状态
- 更新 platform_utils.py 新增进程工具函数
- 集成到 cli_base.py 启动时自动初始化
- 更新 CHANGELOG.md / README.md 至 v5.3.0
|
2026-05-09 20:28:17 +08:00 |
|
xiaoli-cli bot
|
a7f64cd797
|
refactor: 移除插件内存管理系统 + 新增工作流引擎
移除内容:
- 删除 plugin_memory_manager.py (TTL淘汰 + 懒加载系统)
- unified_tool_manager.py 精简为直接加载,去掉内存管理器集成
- tui.py 移除内存管理状态显示
新增内容:
- plugins/workflow.py: YAML 工作流引擎
- 顺序执行多步骤 (tool/shell/echo/wait/set/if)
- 步骤间变量传递 ({{steps.name.output}})
- 条件分支 (if/then/else)
- 错误处理 (continue_on_error / on_fail)
- 断点续跑 (状态持久化)
- 调用其他插件作为步骤
- workflows/example.yaml: 示例工作流
修复:
- unified_tool_manager.shutdown() 增加 graceful cleanup
- unregister_tool() 增加实例清理
v5.3.0
|
2026-05-08 18:07:55 +08:00 |
|
OpenClaw
|
115ce38370
|
docs: CHANGELOG 补充插件格式统一记录
|
2026-05-08 00:54:02 +08:00 |
|
OpenClaw
|
357cd0958f
|
refactor: 统一自研插件格式为 Liugin
18个插件: class Plugin -> class Liugin
10个插件: 测试块 Plugin() -> Liugin()
移除 ai_image.py 中多余的 Liugin = Plugin 别名
所有自研插件现统一使用 class Liugin 作为入口类名,
加载器保留 Plugin 兼容以支持第三方插件。
|
2026-05-08 00:52:25 +08:00 |
|
OpenClaw
|
bfefbef475
|
release: v5.2.0 - 插件内存管理 + TUI 修复
v5.2.0
|
2026-05-08 00:47:38 +08:00 |
|
OpenClaw
|
fb41c79b14
|
feat: 插件内存管理 - TTL自动淘汰 + 懒加载
新增 plugin_memory_manager.py:
- 后台线程定期扫描空闲插件,超过TTL自动从内存卸载
- AI调用已卸载插件时自动重新加载(懒加载)
- 核心插件(tool_search)可钉住永不淘汰
- 可配置: TTL(300s), 最大空闲数(10), 扫描间隔(60s), 钉住列表
改造 unified_tool_manager.py:
- 集成 PluginMemoryManager
- execute/mcp_call/search_tools/get_tool 统一走 _ensure_loaded
- search_tools 可搜索已卸载插件(使用缓存信息)
- 新增 get_all_tools_info/get_tool_by_name/memory_manager 属性
改造 tui.py:
- /status 命令显示内存管理详细状态
- 侧栏显示已加载/已卸载工具数
|
2026-05-08 00:40:01 +08:00 |
|
OpenClaw
|
038fbe24c8
|
fix(tui): 修复set_timer(0)导致的ZeroDivisionError
_render_welcome_animated中delay=i*0.1在i=0时为0.0,
Textual 8.x的set_timer(0,...)内部interval为0导致除零崩溃。
使用max(0.01, delay)确保最小延迟。
|
2026-05-08 00:24:26 +08:00 |
|
OpenClaw
|
fe79f0e5d4
|
fix(tui): 修复消息分类、侧栏切换、动画失效、TextArea导入
- _write_raw: 空字符串'' in msg永远为True导致所有消息归类为tool-ok,
替换为正确的emoji标记(✅/❌/🤖)
- action_toggle_sidebar: Textual无.visible属性,改用has_class/addClass
- CSS .hidden: display:none阻止transition动画,改用width+opacity方案
- constants.py: 添加TextArea、Rule到Textual可用性检查导入列表
|
2026-05-08 00:17:36 +08:00 |
|
OpenClaw Bot
|
af9fffc4a6
|
docs: rewrite README for Gitee compliance
|
2026-05-03 23:37:31 +08:00 |
|
OpenClaw Bot
|
7ada90ac27
|
Add project logo: anime-style face icon
|
2026-05-03 23:33:48 +08:00 |
|
xiaoli-cli bot
|
407ecc0f47
|
docs: README 添加插件仓库引用
- 插件列表章节添加 xiaoli-cli-plugins 链接
- 链接区添加插件仓库地址
|
2026-04-30 03:08:07 +08:00 |
|
shuiyu1123
|
78b74d1bb1
|
feat: 新增 7 个实用插件
- json_toolkit: JSON 工具箱(格式化/压缩/校验/路径查询/差异比较/Schema推断)
- snippet_manager: 代码片段管理器(保存/搜索/分类/标签/导入导出)
- regex_tester: 正则表达式测试器(匹配/提取/替换/解释/常用模式库/性能测试)
- id_generator: UUID/ID 生成器(UUID v1/v4/v5/NanoID/短ID/雪花ID/ULID/自定义模板)
- color_picker: 颜色工具(HEX/RGB/HSL/HSV/CMYK转换/WCAG对比度/调色板/色盲模拟)
- bookmark_manager: 书签管理器(分类/标签/搜索/导入导出/可访问性检查)
- markdown_tool: Markdown 工具(TOC/统计/表格生成/待办提取/语法检查/字数统计)
所有插件均支持 Plugin/Liugin 双协议和 MCP 定义。
|
2026-04-30 03:01:11 +08:00 |
|
xiaoli-cli bot
|
bef3fe560d
|
feat: 注册表添加 onebot 插件
|
2026-04-30 02:50:37 +08:00 |
|
xiaoli-cli bot
|
0b19ec64a4
|
fix: 修复 Gitee 下载支持,通过 API + token 下载插件
- Gitee raw URL 返回 403,自动转为 API 调用
- 从 GITEE_TOKEN 环境变量读取访问令牌
- 修复 Fore.DIM → Style.DIM
- 测试通过: install / list / remove 全流程正常
|
2026-04-30 02:42:52 +08:00 |
|
xiaoli-cli bot
|
6f13d41c11
|
feat: 添加 /plugin 插件市场命令
功能:
- /plugin list - 列出可用插件(自动同步远程源)
- /plugin search <关键词> - 搜索插件
- /plugin info <插件码> - 查看插件详情
- /plugin install <插件码|URL> - 安装插件(自动下载、启用、动态加载)
- /plugin remove <名称> - 卸载插件
- /plugin update <插件码> - 更新插件
- /plugin add-source <URL> - 添加远程插件源
文件:
- xcli_core/plugin_market.py - PluginMarketMixin 核心逻辑
- plugin_registry.json - 本地插件码注册表
- xcli_core/cli_core.py - 集成 PluginMarketMixin
- HELP.md - 添加插件市场文档
|
2026-04-30 02:37:05 +08:00 |
|