Crush 采用经典的分层架构设计,从上到下分为四层:
┌───────────────────────────────────────────────────────────────┐
│ Presentation Layer (展示层) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ TUI Model │ │ Dialogs │ │ Chat View │ │
│ │(Bubble Tea) │ │ (对话框) │ │ (消息展示) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└───────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────┐
│ Application Layer (应用层) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ App │ │ Coordinator │ │ Session │ │
│ │ (依赖注入) │ │ (Agent) │ │ Service │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└───────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────┐
│ Domain Layer (领域层) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Agent │ │ Tools │ │ Message │ │
│ │ (AI 核心) │ │ (20+ 工具) │ │ (消息系统) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└───────────────────────────────────────────────────────────────┘
│
▼
───────┐
┌────────────────────────────────────────────────────────│ Infrastructure Layer (基础设施层) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Config │ │ Database │ │ LSP/MCP │ │
│ │ (配置管理) │ │ (SQLite) │ │ (外部集成) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└───────────────────────────────────────────────────────────────┘
┌─────────────┐
│ cmd │
│ (入口点) │
└──────┬──────┘
│
▼
┌─────────────┐
│ app │
│ (应用入口) │
└──────┬──────┘
│
┌────────────────────────┼────────────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ config │ │ agent │ │ session │
│ (配置管理) │ │ (AI 核心) │ │ (会话管理) │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
▼ ┌───────┴───────┐ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ lsp │ │ tools │ │ message │ │ permission │
└─────────────┘ └─────────────┘ └──────┬──────┘ └─────────────┘
│
┌─────────────────────────────────┼────────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ db │ │ pubsub │ │ csync │ │ oauth │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
1. 用户输入
│
▼
2. TUI Model (Bubble Tea)
│ - 接收用户输入
│ - 验证输入格式
▼
3. App.Run()
│ - 创建/获取会话
│ - 路由到 Coordinator
▼
4. Coordinator.Run()
│ - 构造 Prompt
│ - 选择模型
│ - 添加上下文
▼
5. SessionAgent.Run()
│ - 调用 LLM API
│ - 解析响应
│ - 处理工具调用
▼
6. Tool Execution (如果需要)
│ - 权限检查
│ - 执行工具
│ - 返回结果
▼
7. Message Service (持久化)
│ - 保存消息
│ - 保存工具调用
▼
8. TUI Update (UI 更新)
│ - 渲染消息
│ - 渲染工具结果
▼
9. 返回给用户
| 类别 | 技术选型 | 理由 |
|---|---|---|
| **核心语言** | Go 1.25+ | 性能、并发、原生支持 |
| **AI 框架** | fantasy | Charm 官方 AI 框架 |
| **模型管理** | catwalk | 多模型抽象层 |
| **TUI 框架** | Bubble Tea | Charm 官方 TUI 框架 |
| **终端样式** | Lipgloss | Charm 官方样式库 |
| **数据库** | SQLite (modernc) | 嵌入式、无依赖 |
| **LSP** | powernap + jsonrpc2 | 轻量级 LSP 客户端 |
| **MCP** | go-sdk | 官方 MCP SDK |
本文是《Crush 从入门到精通》系列文章的第十一章
还没有人回复