diff --git a/CHANGELOG.md b/CHANGELOG.md index 59b0a9a..43d3b66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,51 +4,63 @@ --- +## 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 协议示例 -- **工程化自动化插件** — 新增 3 个工程化自动化插件(`auto_engineer`、`project_analyzer`、`git_workflow`) +- **工程化自动化插件** — 新增 `auto_engineer`、`project_analyzer`、`git_workflow` - **任务调度器** (`scheduler`) — 定时任务支持 ### 🏗️ 架构改进 - **重写代码沙箱** — 全新的安全沙箱实现,支持超时控制和资源限制 - **完整测试套件** — 192 个测试用例,覆盖核心功能 -- **Skill handler 修复** — 修复 Skill 协议参数解析问题 -- **MarkdownSkill MCP** — MCP 定义改为从元数据动态生成 - -### 🐛 修复 -- 修复 MarkdownSkill MCP 定义硬编码问题 -- 修复 Skill handler 参数解析错误 --- ## v3.6.0-release (2026-04-25) ### 🚀 新增功能 -- **精准代码编辑器** (`code_editor`) — 搜索替换、批量编辑、diff 对比、行级操作 -- **代码搜索理解** (`code_search`) — 跨文件搜索、正则匹配、符号提取、依赖分析 +- **精准代码编辑器** (`code_editor`) — 搜索替换、批量编辑、diff 对比 +- **代码搜索理解** (`code_search`) — 跨文件搜索、正则匹配、符号提取 - **Git 版本控制** (`git_tools`) — 完整 Git 操作支持 - **TUI 默认模式** — 图形化界面为默认启动方式 -- **彩蛋** — 运行 `python easter_egg.py` 发现惊喜 ### 🏗️ 架构重构 -- 拆分 `ai_cli.py`(3860行)为模块化 `xiaoli/` 包 -- 新增入口点: `python -m xiaoli [--cli] [--engine X]` -- 配置管理、引擎管理、对话处理、显示输出独立模块 -- 响应解析器提取为独立组件 - -### 🐛 修复 -- 修复 `requirements.txt` 包名(PIL→Pillow, cv2→opencv-python) -- 修复服务器环境可选导入(tkinter/cv2/PIL) -- 兼容 `Plugin` 和 `Liugin` 两种插件类名 -- TUI 不可用时自动降级到 CLI 模式 - -### 📦 依赖 -- colorama, openai, requests, Pillow, numpy -- textual (可选, TUI 模式) +- 拆分 `ai_cli.py`(3860行)为模块化 `xcli_core/` 包 +- 新增入口点: `python ai_cli.py` --- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 52dcf11..4642735 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -113,8 +113,8 @@ class Plugin: ### 插件检查清单 -- [ ] 类名是 `Plugin` -- [ ] 实现了 `get_tool_info()` 和 `handle()` +- [ ] 类名是 `Plugin`(或 `Liugin`,加载器两者都支持) +- [ ] 实现了 `get_tool_info()`、`handle()`、`set_cli()` - [ ] 返回值是字符串 - [ ] 所有异常被捕获 - [ ] 包含 `usage` 属性 @@ -132,10 +132,7 @@ class Plugin: ## 测试 ```bash -# 运行全部测试 -python -m pytest tests/ - -# 运行并显示覆盖率 +# 运行全部测试 (113 用例) python -m pytest tests/ -v --tb=short ``` diff --git a/HELP.md b/HELP.md index 85b1a00..e486b04 100644 --- a/HELP.md +++ b/HELP.md @@ -5,33 +5,24 @@ ### 启动 ```bash -# TUI 模式(默认) -python -m xiaoli - -# CLI 模式 -python -m xiaoli --cli - -# 指定引擎 -python -m xiaoli --engine ollama +python ai_cli.py ``` ### 基本操作 -- **退出程序**: 输入 `/quit` 或 `Ctrl+C` -- **查看帮助**: 输入 `/help` -- **查看版本**: 输入 `/about` +- **退出**: `/quit` 或 `Ctrl+C` +- **帮助**: `/help` +- **版本**: `/about` --- -## AI 引擎管理 +## AI 引擎 ### 切换引擎 ``` -/model ollama # 切换到 Ollama 本地模型 -/model mimo # 切换到小米 MiMo -/model glm # 切换到智谱 GLM -/model qwq # 切换到 QwQ 深度思考 +/engine switch ollama # 切换到 Ollama 本地模型 +/engine switch openai # 切换到 OpenAI 兼容引擎 ``` ### 查看可用引擎 @@ -40,115 +31,200 @@ python -m xiaoli --engine ollama /engine list ``` ---- +### OpenAI 引擎管理 -## 聊天记录管理 - -| 命令 | 说明 | -|------|------| -| `/chat save <名称>` | 保存当前对话 | -| `/chat list` | 列出所有保存的对话 | -| `/chat open <名称>` | 加载历史对话 | +``` +/engine.openai models # 列出可用模型 +/engine.openai set gpt-4o # 切换模型 +/engine.openai info # 查看配置 +``` --- -## 内置工具 +## 安全模式 -小狸会根据你的自然语言描述自动选择合适的工具。以下是主要工具: +### 切换模式 -### 代码编辑器 (`code_editor`) +``` +/safe # 循环切换: 普通 → 人工确认 → 无限制 +/safe off # 直接切换到无限制模式 +/safe on # 切换到普通模式 +/safe manual # 切换到人工确认模式 +``` -用于精准的代码编辑操作: +### 三种模式 -- **替换代码** — 指定文件和要替换的内容 -- **批量编辑** — 一次修改多处 -- **查看代码** — 按行号范围查看 +| 模式 | 图标 | 说明 | +|------|------|------| +| **普通模式** (默认) | 🟢 | AI 自动识别风险,有风险才请求确认 | +| **人工确认** | 🟡 | 所有指令都需要用户 y/n 确认 | +| **无限制** | 🔴 | 直接执行,不检查 | -### 代码搜索 (`code_search`) +### 风险检查流程 -用于理解和搜索代码库: +当 AI 调用工具时,安全层会: +1. 快速预检 — 读取/查询类操作直接放行 +2. AI 分析 — 调用引擎独立评估风险(不带历史对话) +3. 展示风险 — 如果有风险,显示指令、风险等级、可能影响 +4. 用户确认 — 输入 y 执行,n 取消 -- **项目结构** — 查看目录树 -- **搜索代码** — 按关键词搜索文件 -- **符号提取** — 提取函数、类定义 -- **代码统计** — 代码行数、文件数统计 +特殊指令(`rm`、`delete`、`chmod` 等)无论哪个模式都需要确认。 + +--- + +## 核心工具 + +### 代码编辑 (`code_editor`) + +| 操作 | 说明 | 示例 | +|------|------|------| +| `edit` | 精准替换 | `edit file.py old_code <<<>>> new_code` | +| `multi` | 批量编辑 | `multi file.py [{"old":"a","new":"b"}]` | +| `read_range` | 按行读取 | `read_range file.py 10 20` | +| `find` | 关键词搜索 | `find . keyword *.py` | +| `regex` | 正则搜索 | `regex . def\\s+\\w+ *.py` | +| `symbols` | 符号提取 | `symbols .` | +| `imports` | 导入分析 | `imports file.py` | +| `callers` | 调用查找 | `callers . func_name` | +| `structure` | 项目结构 | `structure .` | +| `stats` | 代码统计 | `stats .` | +| `ast_info` | AST 摘要 | `ast_info file.py` | +| `diff` | 文件对比 | `diff file1.py file2.py` | +| `create` | 创建文件 | `create new.py content` | +| `write` | 写入文件 | `write file.py content` | ### Git 操作 (`git_tools`) -- `status` — 查看状态 -- `diff` — 查看变更 -- `log` — 查看提交历史 -- `commit <消息>` — 提交更改 +| 操作 | 说明 | +|------|------| +| `status` | 查看状态 | +| `diff` | 查看变更 | +| `log --oneline 10` | 提交历史 | +| `add .` | 暂存所有 | +| `commit message` | 提交 | +| `branch` | 查看分支 | +| `checkout -b name` | 创建分支 | +| `smart-commit` | 智能提交(自动 add + 规范化消息) | +| `changelog` | 生成 CHANGELOG | +| `contributors` | 贡献者统计 | +| `summary` | 变更摘要 | ### 文件管理 (`file_manager`) | 操作 | 说明 | |------|------| -| `list` | 列出目录内容 | -| `read <路径>` | 读取文件 | -| `write <路径> -c "内容"` | 写入文件 | -| `append <路径> -c "内容"` | 追加内容 | -| `delete <路径>` | 删除文件 | -| `mkdir <路径>` | 创建目录 | -| `copy <源> <目标>` | 复制文件 | -| `move <源> <目标>` | 移动文件 | -| `info <路径>` | 查看文件信息 | -| `tree` | 显示目录树 | +| `list . -p "*.py"` | 列出目录 | +| `read file.txt -n 50` | 读取前 50 行 | +| `write file.txt -c "内容"` | 写入文件 | +| `copy src dst` | 复制文件 | +| `move src dst` | 移动/重命名 | +| `delete file.txt` | 删除文件 | +| `delete dir -r` | 递归删除目录 | +| `search . -c "keyword"` | 搜索文件内容 | +| `info file.txt` | 文件详情 | +| `mkdir newdir` | 创建目录 | ### 命令执行 (`cmd_executor`) -直接在沙箱中执行系统命令,支持超时控制。 +``` +run ls -la # 执行命令 +run make build --timeout 60 # 60秒超时 +``` -### AI 搜索 (`ai_search`) +### 浏览器自动化 (`browser_auto`) -使用 AI 进行智能搜索和问答。 +| 操作 | 说明 | +|------|------| +| `start` | 启动浏览器 | +| `open https://example.com` | 打开网页 | +| `click .btn-primary` | 点击元素 | +| `fill #search keyword` | 填写输入框 | +| `text body` | 获取页面文本 | +| `screenshot page.png` | 页面截图 | +| `eval document.title` | 执行 JS | +| `wait .loaded` | 等待元素 | +| `pdf page.pdf` | 保存 PDF | +| `stop` | 关闭浏览器 | + +### 子 Agent (`sub_agent`) + +| 操作 | 说明 | +|------|------| +| `spawn coder 重构 main.py` | 创建子 Agent 并分配任务 | +| `list` | 列出所有子 Agent | +| `status agent_xxx` | 查看状态 | +| `result agent_xxx` | 获取结果 | +| `send agent_xxx 继续优化` | 发送消息 | +| `kill agent_xxx` | 终止 | +| `clean` | 清理已完成的 | + +### 工程化 (`auto_engineer`) + +| 操作 | 说明 | +|------|------| +| `lint .` | 代码检查 (ruff/flake8) | +| `format .` | 代码格式化 | +| `test .` | 运行测试 (pytest) | +| `build` | 构建项目 | +| `deps` | 检查过时依赖 | +| `complexity .` | 圈复杂度分析 | +| `security .` | 安全风险扫描 | +| `metrics .` | 代码质量指标 | +| `suggest .` | 改进建议 | +| `info` | 项目信息摘要 | + +### 任务管理 (`task_manager`) + +| 操作 | 说明 | +|------|------| +| `add 任务描述` | 添加任务 | +| `list` | 列出所有任务 | +| `complete 1` | 标记完成 | +| `in_progress 1` | 标记进行中 | +| `delete 1` | 删除任务 | +| `clear` | 清除已完成的 | + +### 工具搜索 (`tool_search`) + +``` +tool_search 文件 # 搜索与文件相关的工具 +tool_search git # 搜索 Git 相关工具 +tool_search 浏览器 # 搜索浏览器相关工具 +``` + +--- + +## 聊天记录 + +``` +/chat save my-session # 保存当前对话 +/chat list # 列出所有对话 +/chat open my-session # 加载历史对话 +``` --- ## 自然语言交互 -你不需要记住命令格式,直接用自然语言描述需求即可: +不需要记住命令格式,直接用自然语言: ``` "帮我看看 src/app.py 的第 10 到 20 行" "搜索项目里所有用到 requests.get 的地方" "提交代码,消息是修复登录bug" "统计一下这个项目的代码量" +"打开百度搜索 Python 教程" +"创建一个子agent帮我重构utils.py" ``` -AI 会自动理解你的意图并调用合适的工具。 - ---- - -## 远程连接 - -### 启动 WebSocket 服务 - -``` -/remote start <端口> <密码> -``` - -### 代理模式 - -``` -/remote proxy <中继地址> <服务器密码> <本地端口> <本地密码> -``` +AI 会自动选择合适的工具执行。 --- ## 使用技巧 -1. **TUI 模式** — 默认启动 TUI 图形界面,体验更好;使用 `--cli` 切换到传统模式 -2. **引擎选择** — 本地开发用 `ollama`,深度思考用 `qwq`,通用场景用 `mimo` -3. **代码编辑** — 描述需求即可,AI 会自动使用代码编辑器 -4. **Git 工作流** — 自然语言描述,AI 自动执行 Git 操作 -5. **插件扩展** — 可以自行开发插件,详见 [开发文档](开发文档/开发文档.md) - ---- - -## 注意事项 - -- 文件操作大小限制为 50MB -- 代码执行在沙箱环境中,有超时限制 -- 音频播放需要系统支持相应格式 -- TUI 模式需要安装 `textual` 和 `rich` +1. **引擎选择** — 本地开发用 `ollama`,云端用 `openai`(配 DeepSeek 等) +2. **安全模式** — 日常开发用普通模式,生产环境用人工确认模式 +3. **子 Agent** — 复杂任务拆分给多个子 Agent 并行处理 +4. **浏览器** — 自动化测试、网页抓取、表单填写 +5. **工具搜索** — 不确定用什么工具时,先 `tool_search` 查一下