Skip to content

项目结构

IfAI 源代码的组织方式概述。

仓库布局

ifai/
├── docs/                          # 文档站点
│   ├── .vitepress/               # VitePress 配置
│   ├── user/                     # 用户文档
│   ├── development/              # 开发文档
│   └── technical/                # 技术深度

├── src/                          # 前端源码 (React/TypeScript)
│   ├── components/               # React 组件 (23 个模块)
│   ├── stores/                   # Zustand 状态存储 (26 个)
│   ├── services/                 # 业务逻辑
│   ├── hooks/                    # 自定义 React hooks
│   ├── utils/                    # 工具函数
│   ├── i18n/                     # 国际化
│   ├── core/                     # 核心抽象
│   └── types/                    # TypeScript 定义

├── src-tauri/                    # Rust 后端
│   ├── src/
│   │   ├── commands/             # Tauri 命令
│   │   ├── agent_system/         # Agent 框架
│   │   ├── llm_inference/        # 本地 LLM(可选)
│   │   ├── conversation/         # 聊天管理
│   │   ├── prompt_manager/       # 提示词模板
│   │   └── lib.rs                # 主入口
│   ├── Cargo.toml                # Rust 依赖
│   └── tauri.conf.json           # Tauri 配置

├── tests/                        # E2E 测试
│   └── e2e/                      # Playwright 测试

├── package.json                  # Node.js 依赖
├── vite.config.ts                # Vite 配置
└── tsconfig.json                 # TypeScript 配置

前端结构

组件 (src/components/)

components/
├── AIChat/                      # AI 聊天面板
│   ├── AIChat.tsx
│   ├── MessageList.tsx
│   ├── MessageInput.tsx
│   └── ContextBar.tsx

├── Composer/                    # 多文件编辑器
│   ├── Composer.tsx
│   ├── FileList.tsx
│   ├── DiffView.tsx
│   └── ApplyButton.tsx

├── Editor/                      # Monaco 包装器
│   ├── EditorContainer.tsx
│   ├── MonacoWrapper.tsx
│   └── EditorDecorations.tsx

├── FileTree/                    # 项目浏览器
│   ├── FileTree.tsx
│   ├── TreeNode.tsx
│   └── FileActions.tsx

├── Terminal/                    # 集成终端
│   ├── Terminal.tsx
│   ├── TerminalManager.tsx
│   └── TerminalTabs.tsx

├── CommandPalette/              # 快速命令
├── Settings/                    # 设置 UI
├── SnippetManager/              # 代码片段
└── TaskBreakdown/               # 任务可视化

Stores (src/stores/)

stores/
├── useChatStore.ts              # 主聊天状态 (100KB+)
├── fileStore.ts                 # 文件操作
├── editorStore.ts               # 编辑器配置
├── agentStore.ts                # Agent 执行
├── settingsStore.ts             # 用户偏好
├── shortcutStore.ts             # 键盘快捷键
├── terminalStore.ts             # 终端状态
└── ...

Services (src/services/)

services/
├── codeAnalysis.ts              # 代码理解
├── refactoring.ts               # AI 重构
├── errorFixService.ts           # 错误解决
├── multimodalService.ts         # 图片处理
├── symbolService.ts             # 代码导航
└── ...

后端结构

Rust 模块 (src-tauri/src/)

src/
├── lib.rs                       # 主入口
├── ai_utils.rs                  # AI 提供商抽象
├── local_model.rs               # 本地 LLM 支持
├── intelligence_router.rs       # AI 路由逻辑
├── multimodal.rs                # 图片处理

├── commands/
│   ├── atomic_commands.rs       # 文件操作
│   ├── core_wrappers.rs         # 核心功能
│   └── symbol_commands.rs       # 符号索引

├── agent_system/
│   ├── supervisor.rs            # Agent 编排
│   └── toolchain.rs             # 工具执行

├── conversation/
│   ├── manager.rs               # 聊天历史
│   └── context.rs               # 上下文管理

├── prompt_manager/
│   ├── templates.rs             # 提示词模板
│   └── builder.rs               # 提示词构建

└── llm_inference/
    ├── engine.rs                # GGUF 推理(可选)
    └── model_loader.rs          # 模型加载

关键后端文件

文件用途
lib.rsTauri 设置、命令注册
ai_utils.rs多提供商 AI 客户端
local_model.rsOllama 集成
commands/atomic_commands.rs文件 I/O 操作
agent_system/supervisor.rs自主 agent 逻辑

配置文件

前端

文件用途
package.json依赖、脚本
vite.config.ts构建配置
tsconfig.jsonTypeScript 配置
tailwind.config.js样式配置

后端

文件用途
Cargo.tomlRust 依赖
tauri.conf.jsonTauri 应用配置
build.rs构建脚本

文档

文件用途
.vitepress/config.mtsVitePress 站点配置
package.json (docs)文档依赖

模块依赖

┌─────────────────────────────────────────────────────────┐
│                      前端                              │
│  ┌──────────┐    ┌──────────┐    ┌─────────────────┐  │
│  │ 组件     │───▶│  存储    │◀───│    服务         │  │
│  └──────────┘    └──────────┘    └─────────────────┘  │
│                                               │         │
│                                         ┌───────▼─────┐│
│                                         │ Tauri 调用  ││
│                                         └───────┬─────┘│
└───────────────────────────────────────────────│───────┘
                                                │ IPC
┌───────────────────────────────────────────────▼───────┐
│                      后端                              │
│  ┌──────────┐    ┌──────────┐    ┌─────────────────┐  │
│  │ 命令     │───▶│  模块    │◀───│  Crates         │  │
│  └──────────┘    └──────────┘    └─────────────────┘  │
│                                                           │
│  ┌─────────────────────────────────────────────────┐    │
│  │         外部集成                                   │    │
│  │  Ollama │ OpenAI │ Claude │ 文件系统 │ Git      │    │
│  └─────────────────────────────────────────────────┘    │
└───────────────────────────────────────────────────────────┘

文件命名约定

前端

  • 组件:PascalCase (AIChat.tsx)
  • Hooks:带 'use' 前缀的 camelCase (useChatStore.ts)
  • Stores:带 'use' 前缀的 camelCase (useChatStore.ts)
  • Services:camelCase (codeAnalysis.ts)
  • Types:PascalCase (ChatMessage.ts)

后端

  • 模块:snake_case (ai_utils.rs)
  • 命令:snake_case (atomic_commands.rs)
  • 类型:PascalCase (ChatMessage.rs)
  • Traits:PascalCase (LLMProvider.rs)

构建产物

生成的文件

dist/                          # 前端构建输出
├── assets/                    # 静态资源
├── index.html                 # 入口 HTML
└── *.js                      # 打包的 JavaScript

src-tauri/target/
├── release/                   # 最终应用包
│   ├── IfAI.app              # macOS
│   ├── IfAI-setup.exe        # Windows
│   └── ifai.AppImage         # Linux
└── *.dylib / *.dll           # 原生库

测试结构

tests/
├── e2e/
│   ├── basic-usage.spec.ts    # 核心工作流程
│   ├── ai-chat.spec.ts       # AI 功能
│   ├── composer.spec.ts      # 多文件编辑
│   └── navigation.spec.ts    # 代码导航

src-tauri/tests/              # Rust 单元测试
└── src/__tests__/            # 前端单元测试

添加新功能

前端功能

  1. src/components/ 中创建组件
  2. 如需要在 src/stores/ 中添加 store
  3. src/services/ 中创建服务
  4. src-tauri/src/commands/ 中注册命令

后端功能

  1. 在适当的模块中添加 Rust 代码
  2. lib.rs 中注册命令
  3. src/types/ 中创建 TypeScript 类型
  4. 添加前端服务包装器

参考

基于 MIT 许可发布