# MiniCode
**Repository Path**: naka507/MiniCode
## Basic Information
- **Project Name**: MiniCode
- **Description**: 基于事件驱动支持多个提供商 的AI 编程助手
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-10-24
- **Last Updated**: 2025-12-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# MiniCode
**一个基于事件驱动架构的多提供商 AI 编程助手**
[](https://nodejs.org/)
[](LICENSE)
[English](./README_EN.md) | 中文文档
---
## 项目简介
MiniCode 是一个先进的 AI 编程助手,采用**事件驱动架构**和**可插拔能力系统**设计。它支持多个主流 AI 提供商(Anthropic Claude、Google Gemini),通过统一的接口提供强大的代码辅助功能。
## 核心特性
### 🎯 多提供商支持
- **Anthropic Claude**: 支持 Claude 4.5 Sonnet、Claude 4 Opus 等模型
- **Google Gemini**: 支持 Gemini 2.5 Flash、Gemini 2.5 Pro 等模型
- **灵活切换**: 通过配置文件轻松切换不同的 AI 提供商
### 🏗️ 先进的架构设计
- **事件驱动架构**: 完全解耦 UI 层和 Provider 层,通过 EventBus 进行通信
- **可插拔能力系统**: 模块化的能力管理(Caching、Warmup、Thinking、Streaming)
- **适配器模式**: 统一不同 AI 提供商的 API 差异
- **工具注册表**: 集中管理和执行各类工具
### 🛠️ 丰富的工具集
#### 文件操作工具
- **Read**: 读取文件内容,支持行号和分页
- **Write**: 创建或覆盖文件
- **Edit**: 精确编辑文件内容
- **Glob**: 模式匹配查找文件
- **Grep**: 内容搜索和正则匹配
#### 系统工具
- **Bash**: 执行 Shell 命令(带安全验证)
- **TodoWrite**: 任务管理和追踪
#### 高级工具
- **Task**: 启动专门的子代理处理复杂任务
- **General**: 通用代理,可使用所有工具
- **Explore**: 代码库探索专家(Glob、Grep、Read、Bash)
- **Plan**: 规划和分析专家(Glob、Grep、Read、Bash)
#### 工具分类
工具按用途分为四大类别:
- **readonly**: 只读操作(Read、Glob、Grep)
- **writeops**: 写入操作(Write、Edit)
- **bash**: 命令执行(Bash)
- **task**: 任务管理(TodoWrite、Task)
### 🔒 工具执行审核
为了安全性,MiniCode 实现了智能的工具执行审核机制:
**审核策略**:
- **只读工具**(Read、Glob、Grep):无需审核
- **写入工具**(Write、Edit):首次执行需要审核
- **命令工具**(Bash):首次执行需要审核
- **任务工具**(TodoWrite、Task):无需审核
**审核选项**:
- **y(是)**: 批准本次执行
- **n(否)**: 拒绝本次执行
- **a(总是)**: 批准并自动批准该类别的所有后续操作
**配置**:
```bash
# .env 文件中可以完全禁用审核
REQUIRE_TOOL_APPROVAL=false
```
**智能缓存**:
- 用户选择"总是批准"后,该类别的工具不再需要审核
- 会话期间持久化,提高工作效率
### 🧠 智能任务调度
- **任务分类器**: 自动识别任务类型(SEARCH、READ、CODE、REVIEW、DEBUG、TEST、GENERAL)
- **复杂度评估**: 评估任务复杂度(SIMPLE、MODERATE、COMPLEX)
- **模型调度器**: 根据任务特征智能选择合适的模型
- **成本优化**: 简单任务使用轻量模型,复杂任务使用强大模型
## 项目亮点 ⭐
### 1. 零侵入事件驱动架构
- UI 层和 Provider 层**完全解耦**,通过 EventBus 异步通信
- 无需在业务代码中注入 UI 依赖,保持代码纯净
- 支持多个 UI 层同时监听,便于调试和扩展
### 2. 智能成本优化
```javascript
// 示例:简单查询自动使用 Gemini Flash(快速低成本)
"查看 README.md 文件" → Gemini 2.5 Flash
// 复杂任务自动升级到强大模型
"重构整个缓存系统并优化性能" → Gemini 2.5 Pro
```
- 自动分析任务复杂度,动态选择最合适的模型
- 简单任务成本可降低 **80%+**
- 支持自定义调度策略
### 3. 高性能缓存系统
- **Prompt 缓存**: 系统提示词自动缓存,减少重复计算
- **Warmup 预热**: 首次请求即享受缓存加速
- **成本节省**: 缓存命中可节省 90% 输入 Token 成本
### 4. 可插拔能力系统
每个 Provider 可以独立配置四大核心能力:
- **Caching** - 智能缓存管理
- **Warmup** - 预热优化
- **Thinking** - 深度思考模式(Gemini 专属)
- **Streaming** - 流式输出
### 5. Task 工具:子代理系统
Task 工具允许主 AI 启动专门的子代理来处理复杂任务,实现任务的**分而治之**:
**工作原理**:
```
用户请求 → 主 AI → 调用 Task 工具 → 启动子代理 → 执行任务 → 返回报告 → 主 AI 整合结果
```
**使用场景**:
- 复杂的代码库探索
- 多步骤的文件搜索
- 需要多次迭代的分析任务
**示例**:
```javascript
// AI 自动使用 Task 工具
用户:"找出项目中所有的 API 端点定义"
AI 思考:这需要多次搜索,使用 Explore 代理更高效
AI 调用:Task({
subagent_type: "Explore",
prompt: "搜索所有 API 路由定义,包括 Express、Koa 等框架的路由..."
})
Explore 代理执行:
→ 使用 Glob 搜索路由文件
→ 使用 Grep 查找路由定义
→ 使用 Read 确认内容
→ 返回完整的 API 列表
AI 整合:根据 Explore 的报告,为用户展示所有 API 端点
```
**优势**:
- **专注性**: 子代理只关注特定任务
- **工具隔离**: 不同代理有不同的工具访问权限
- **并行执行**: 支持同时启动多个子代理
- **成本控制**: 子代理可使用更便宜的模型
### 6. 统一工具接口
```javascript
// 同一套工具代码,无缝支持多个 AI 提供商
const tools = [Read, Write, Edit, Glob, Grep, Bash, TodoWrite, Task];
// 自动适配 Anthropic、Gemini、OpenAI 等不同 API 格式
```
### 7. 完整的可观测性
- 实时任务分类和调度决策展示
- 工具执行过程可视化
- 工具审核交互提示
- Token 使用统计和成本追踪
- 通过 `/stats` 命令查看详细统计信息
## 项目架构 🏗️
### 整体架构图
```
┌─────────────────────────────────────────────────────────────────┐
│ MiniCode │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ EventBus ┌──────────────┐ │
│ │ │◄────────────────────────┤ │ │
│ │ UI Layer │ Events (async) │ Provider │ │
│ │ (UIManager) │ │ Layer │ │
│ │ ├────────────────────────►│ │ │
│ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │
│ │ Display ┌──────▼───────┐ │
│ │ │ Adapter │ │
│ │ │ (API Format) │ │
│ │ └──────┬───────┘ │
│ │ │ │
│ ┌──────▼────────┐ ┌──────▼───────┐ │
│ │ Approval │ │ Capability │ │
│ │ System │ │ System │ │
│ │ │ │ ┌──────────┐ │ │
│ └───────────────┘ │ │ Caching │ │ │
│ │ │ Warmup │ │ │
│ ┌──────────────┐ │ │ Thinking │ │ │
│ │ Task │ │ │Streaming │ │ │
│ │ Classifier │ │ └──────────┘ │ │
│ │ + Model │ └──────────────┘ │
│ │ Scheduler │ │
│ └──────────────┘ ┌──────────────┐ │
│ │ Agent │ │
│ ┌──────────────┐ │ (Sub-agent) │ │
│ │ Tool │ └─────��┬───────┘ │
│ │ Registry │ │ │
│ │ │ ┌──────▼───────┐ │
│ │ - Read │◄──────────────────────┤ API Client │ │
│ │ - Write │ Tool Execution │ (HTTP Layer) │ │
│ │ - Edit │ └──────────────┘ │
│ │ - Glob │ │
│ │ - Grep │ │
│ │ - Bash │ │
│ │ - TodoWrite │ │
│ │ - Task │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
### 核心模块说明
**1. EventBus(事件总线)**
```javascript
// 发布事件
EventBus.toolStart('Read', { file: 'test.js' });
EventBus.streamDelta('Hello', 'text');
EventBus.generateComplete('Gemini', message, usage);
// 订阅事件
EventBus.on('tool:start', (data) => { /* 处理 */ });
```
- 单例模式,全局唯一实例
- 支持 20+ 种事件类型
- 提供 Promise 风格的 `waitFor()` 方法
- 支持工具审核的异步请求/响应机制
**2. Provider Layer(提供商层)**
```
BaseProvider (抽象基类)
├── AnthropicProvider
│ ├── AnthropicClient (HTTP)
│ ├── AnthropicAdapter (格式转换)
│ ├── Capabilities: Caching, Warmup, Streaming
│ └── Tools: 自定义 cache_control
│
└── GeminiProvider
├── GeminiClient (HTTP)
├── GeminiAdapter (格式转换)
├── Capabilities: Caching, Thinking, Streaming
└── Tools: maxToolsPerRequest 限制
```
**3. Agent(子代理管理器)**
```javascript
// 管理 Task 工具的子代理执行
agent.initialize(provider, toolRegistry);
// 根据代理类型过滤工具
agent.getToolsForAgentType('Explore'); // ['Glob', 'Grep', 'Read', 'Bash']
// 执行子代理任务
await agent.execute(description, prompt, agentType, model);
```
**4. Tool Registry(工具注册表)**
```javascript
// 自动注册所有工具
toolRegistry.initialize();
// 按类别获取
toolRegistry.getToolsByCategory('readonly'); // [Read, Glob, Grep]
toolRegistry.getToolsByCategory('writeops'); // [Write, Edit]
// 执行工具(带审核)
const result = await toolRegistry.execute('Read', { file_path: '/path/to/file' });
```
**5. Approval System(审核系统)**
```javascript
// 检查是否需要审核
if (toolRegistry._requiresApproval(tool)) {
// 请求用户审核
const result = await EventBus.requestApproval(name, category, input);
// 处理用户响应
if (result.approved) {
if (result.autoApproveCategory) {
// 缓存自动批准的类别
autoApprovedCategories.add(category);
}
}
}
```
**6. Task Classifier + Model Scheduler(智能调度)**
```javascript
// 任务分类
const task = classifier.classify("优化缓存系统");
// → { type: 'CODE', complexity: 'COMPLEX', confidence: 0.85 }
// 模型调度
const schedule = scheduler.analyze(task);
// → { model: 'gemini-2.5-pro', tools: null, reason: '复杂代码任务' }
```
## 快速开始
### 1. 环境要求
- Node.js >= 18.0.0
- npm 或 yarn
### 2. 安装方式
**方式一:通过 npm 全局安装(推荐)**
```bash
npm install -g minicode
```
安装后可以直接使用 `minicode` 命令:
```bash
minicode
```
**方式二:从源码运行**
```bash
# 克隆仓库
git clone https://gitee.com/naka507/MiniCode.git
cd MiniCode
# 安装依赖
npm install
# 运行
node src/main.js
```
### 3. 配置 API Key
创建 `.env` 文件(参考 `.env.example`):
**使用 Anthropic Claude:**
```bash
PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-xxx
```
**使用 Google Gemini:**
```bash
PROVIDER=gemini
GEMINI_API_KEY=your_gemini_api_key
```
### 4. 运行程序
**如果是全局安装:**
```bash
minicode
```
**如果是从源码运行:**
```bash
node src/main.js
```
## 配置选项
### 基础配置
| 变量名 | 说明 | 默认值 | 示例 |
|--------|------|--------|------|
| `PROVIDER` | AI 提供商 | gemini | anthropic / gemini |
| `MODEL` | 模型名称 | 自动选择 | claude-sonnet-4.5 / gemini-2.5-flash |
| `MAX_TOKENS` | 最大输出 Token 数 | 4096 | 8192 |
### API 配置
| 变量名 | 说明 | 必需 |
|--------|------|------|
| `ANTHROPIC_API_KEY` | Anthropic API 密钥 | 使用 Anthropic 时 |
| `ANTHROPIC_BASE_URL` | Anthropic API 地址 | 否(默认官方) |
| `GEMINI_API_KEY` | Gemini API 密钥 | 使用 Gemini 时 |
| `GEMINI_BASE_URL` | Gemini API 地址 | 否(默认官方) |
### 功能开关
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `ENABLE_CACHE` | 启用 Prompt 缓存 | true |
| `ENABLE_WARMUP` | 启用预热优化 | true |
| `ENABLE_THINKING` | 启用思考模式 | true |
| `ENABLE_STREAMING` | 启用流式输出 | true |
| `ENABLE_MODEL_SCHEDULING` | 启用智能模型调度 | true |
| `REQUIRE_TOOL_APPROVAL` | 启用工具执行审核 | true |
### 模型调度配置
| 变量名 | 说明 | 示例 |
|--------|------|------|
| `FAST_MODEL` | 快速模型(简单任务) | gemini-2.5-flash |
| `POWERFUL_MODEL` | 强大模型(复杂任务) | gemini-2.5-pro |
| `THINKING_BUDGET` | 思考预算(Gemini 专用) | -1(无限制) |
### 调试配置
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `VERBOSE` | 详细日志输出 | false |
| `DEBUG` | 调试模式 | false |
## 命令行交互
启动程序后,支持以下命令:
| 命令 | 功能 | 说明 |
|------|------|------|
| `/help` | 显示帮助信息 | 查看所有可用命令 |
| `/stats` | 显示统计信息 | 查看 Token 使用、工具执行统计 |
| `/clear` | 清屏 | 清除终端显示内容 |
| `/exit` 或 `/quit` | 退出程序 | 保存会话并退出 |
### 使用示例
```bash
# 启动程序
$ node src/main.js
# 查看文件内容
> 读取 src/main.js 文件的前 50 行
# 编写代码
> 创建一个工具函数用于格式化日期
# 复杂任务(AI 会自动使用 Task 工具)
> 找出项目中所有使用了缓存的地方,并分析缓存策略
# 查看统计
> /stats
# 退出程序
> /exit
```
### 工具审核交互示例
```bash
# 当 AI 尝试执行写入操作时
Tool Execution Requires Approval
Tool: Write (writeops)
Input:
file_path: /path/to/file.js
content: ...
Approve execution? (y/n/a)
y = yes (this time)
n = no (cancel)
a = always (auto-approve writeops)
> a
✓ Auto-approval enabled for category: writeops
# 后续 Write/Edit 操作将自动批准
```
## 许可证
本项目采用 ISC 许可证。
---
**Made with ❤️ by MiniCode Team**
[GitHub](https://gitee.com/naka507/MiniCode) | [文档](./README.md) | [English](./README_EN.md)