3a86da744449409f03060016ab088a8137a0414a
自用体验(同时以人类和被接入 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)
XiaoLi Pro-CLI
AI Programming Assistant — Code Editing · Git · Browser Automation · Multi-Agent
Features
- Dual AI Engines — Ollama local + OpenAI compatible (DeepSeek, Grok, SiliconFlow, etc.)
- Code Editing & Search — Precise replace, batch edit, symbol extraction, regex search
- Git Integration — Full Git operations + workflow automation
- Browser Automation — Playwright-driven, navigate/interact/screenshot/JS execution
- Sub-Agent System — Multi-agent parallel collaboration with task delegation
- Unified Safety — AI risk analysis + 3-mode switching (Normal/Manual/Unrestricted)
- 15 Plugins, 141 Operations — Code, Git, browser, engineering, file management, etc.
- 113 Automated Tests — pytest coverage for all plugins and core modules
Quick Start
git clone https://gitee.com/shuiyu1123/xiaoli-cli.git
cd xiaoli-cli
pip install -r requirements.txt
python ai_cli.py
AI Engines
| Engine | Type | Description |
|---|---|---|
ollama |
Local | Ollama local models, no API key needed |
openai |
Cloud/Local | OpenAI compatible: DeepSeek, Grok, SiliconFlow, local vLLM |
Plugins (15)
Core Productivity
| Plugin | Ops | Description |
|---|---|---|
code_editor |
23 | Code editing + search. replace/batch/find/regex/symbols/imports/callers/todo |
git_tools |
20 | Git. status/diff/log/commit/branch + smart-commit/changelog/contributors |
cmd_executor |
1 | Shell commands. Cross-platform, timeout, danger blocking |
file_manager |
11 | File system. list/read/write/copy/move/delete/search/info/mkdir |
auto_engineer |
16 | Engineering. lint/format/test/build/deps + complexity/security/metrics |
task_manager |
7 | Task tracking. add/list/complete/delete/clear with JSON persistence |
Advanced
| Plugin | Ops | Description |
|---|---|---|
sub_agent |
8 | Sub-Agent system. spawn/list/status/result/send/kill, parallel collaboration |
browser_auto |
31 | Browser automation. navigate/click/fill/screenshot/JS/PDF/cookies |
tool_search |
— | Tool discovery. Search available plugins by keyword |
Utilities
| Plugin | Description |
|---|---|
network_tools |
ping/get/status/headers/ip |
ai_search |
AI search via jina.ai + web content extraction |
frontend_tester |
HTML/CSS/JS syntax check, responsive validation |
speech_recognition |
Voice recording + speech-to-text |
audio_player |
Audio playback |
send_image |
Send images to phone (Clawli mode) |
Safety
Three modes (/safe to switch):
| Mode | Icon | Behavior |
|---|---|---|
| Normal (default) | AI analyzes risk, confirms only when risk detected | |
| Manual | All commands require user confirmation | |
| Unrestricted | Execute directly, no checking |
Testing
python -m pytest tests/ -v # 113 tests
License
Releases
3