Skip to content

naka1205/MiniCode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiniCode

一个基于事件驱动架构的多提供商 AI 编程助手

Node Version License

English | 中文文档


项目简介

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(总是): 批准并自动批准该类别的所有后续操作

配置

# .env 文件中可以完全禁用审核
REQUIRE_TOOL_APPROVAL=false

智能缓存

  • 用户选择"总是批准"后,该类别的工具不再需要审核
  • 会话期间持久化,提高工作效率

🧠 智能任务调度

  • 任务分类器: 自动识别任务类型(SEARCH、READ、CODE、REVIEW、DEBUG、TEST、GENERAL)
  • 复杂度评估: 评估任务复杂度(SIMPLE、MODERATE、COMPLEX)
  • 模型调度器: 根据任务特征智能选择合适的模型
  • 成本优化: 简单任务使用轻量模型,复杂任务使用强大模型

项目亮点 ⭐

1. 零侵入事件驱动架构

  • UI 层和 Provider 层完全解耦,通过 EventBus 异步通信
  • 无需在业务代码中注入 UI 依赖,保持代码纯净
  • 支持多个 UI 层同时监听,便于调试和扩展

2. 智能成本优化

// 示例:简单查询自动使用 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 整合结果

使用场景

  • 复杂的代码库探索
  • 多步骤的文件搜索
  • 需要多次迭代的分析任务

示例

// AI 自动使用 Task 工具
用户:"找出项目中所有的 API 端点定义"

AI 思考:这需要多次搜索,使用 Explore 代理更高效

AI 调用:Task({
  subagent_type: "Explore",
  prompt: "搜索所有 API 路由定义,包括 Express、Koa 等框架的路由..."
})

Explore 代理执行:
   使用 Glob 搜索路由文件
   使用 Grep 查找路由定义
   使用 Read 确认内容
   返回完整的 API 列表

AI 整合:根据 Explore 的报告,为用户展示所有 API 端点

优势

  • 专注性: 子代理只关注特定任务
  • 工具隔离: 不同代理有不同的工具访问权限
  • 并行执行: 支持同时启动多个子代理
  • 成本控制: 子代理可使用更便宜的模型

6. 统一工具接口

// 同一套工具代码,无缝支持多个 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(事件总线)

// 发布事件
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(子代理管理器)

// 管理 Task 工具的子代理执行
agent.initialize(provider, toolRegistry);

// 根据代理类型过滤工具
agent.getToolsForAgentType('Explore'); // ['Glob', 'Grep', 'Read', 'Bash']

// 执行子代理任务
await agent.execute(description, prompt, agentType, model);

4. Tool Registry(工具注册表)

// 自动注册所有工具
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(审核系统)

// 检查是否需要审核
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(智能调度)

// 任务分类
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 全局安装(推荐)

npm install -g minicode

安装后可以直接使用 minicode 命令:

minicode

方式二:从源码运行

# 克隆仓库
git clone https://gitee.com/naka507/MiniCode.git
cd MiniCode

# 安装依赖
npm install

# 运行
node src/main.js

3. 配置 API Key

创建 .env 文件(参考 .env.example):

使用 Anthropic Claude:

PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-xxx

使用 Google Gemini:

PROVIDER=gemini
GEMINI_API_KEY=your_gemini_api_key

4. 运行程序

如果是全局安装:

minicode

如果是从源码运行:

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 退出程序 保存会话并退出

使用示例

# 启动程序
$ node src/main.js

# 查看文件内容
> 读取 src/main.js 文件的前 50 行

# 编写代码
> 创建一个工具函数用于格式化日期

# 复杂任务(AI 会自动使用 Task 工具)
> 找出项目中所有使用了缓存的地方,并分析缓存策略

# 查看统计
> /stats

# 退出程序
> /exit

工具审核交互示例

# 当 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 | 文档 | English

About

基于事件驱动支持多个提供商 的AI 编程助手

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published