Skip to content

Project Structure

Organization of the IfAI codebase.

Root Directory

ifai/
├── docs/                   # Documentation
├── src/                    # Frontend source
├── src-tauri/              # Backend source
├── public/                 # Static assets
├── tests/                  # Test files
├── package.json            # Node dependencies
├── tsconfig.json           # TypeScript config
├── vite.config.ts          # Vite config
└── tauri.conf.json         # Tauri config

Frontend Structure (src/)

src/
├── main.tsx                # App entry point
├── App.tsx                 # Root component
├── index.css               # Global styles

├── components/             # React components (26 modules)
│   ├── layout/             # Layout components
│   │   ├── Header.tsx
│   │   ├── Footer.tsx
│   │   └── Sidebar.tsx
│   │
│   ├── editor/             # Editor components
│   │   ├── MonacoEditor.tsx
│   │   ├── EditorContainer.tsx
│   │   └── MiniMap.tsx
│   │
│   ├── AIChat/             # AI chat panel
│   │   ├── ChatPanel.tsx
│   │   ├── MessageList.tsx
│   │   ├── InputArea.tsx
│   │   └── CodeBlock.tsx
│   │
│   ├── Composer/           # Multi-file editor
│   │   ├── Composer.tsx
│   │   ├── DiffView.tsx
│   │   └── FileList.tsx
│   │
│   ├── FileTree/           # File browser
│   │   ├── FileTree.tsx
│   │   ├── TreeNode.tsx
│   │   └── FileIcon.tsx
│   │
│   ├── Terminal/           # Integrated terminal
│   │   ├── Terminal.tsx
│   │   └── TerminalTabs.tsx
│   │
│   └── common/             # Shared components
│       ├── Button.tsx
│       ├── Input.tsx
│       └── Modal.tsx

├── stores/                 # Zustand stores (23 stores)
│   ├── useChatStore.ts     # Chat state & logic
│   ├── useFileStore.ts     # File operations
│   ├── useEditorStore.ts   # Editor state
│   ├── useAgentStore.ts    # Agent execution
│   ├── useSettingsStore.ts # User preferences
│   └── ...

├── services/               # Business logic
│   ├── ai/                 # AI services
│   │   ├── aiClient.ts     # AI API client
│   │   ├── streamHandler.ts # Response streaming
│   │   └── contextBuilder.ts # Context management
│   │
│   ├── codebase/           # Code analysis
│   │   ├── symbolIndex.ts  # Symbol indexing
│   │   ├── codeParser.ts   # Code parsing
│   │   └── referenceFinder.ts # Find references
│   │
│   ├── editor/             # Editor services
│   │   ├── monacoService.ts # Monaco integration
│   │   └── completionProvider.ts # Auto-completion
│   │
│   └── file/               # File operations
│       ├── fileWatcher.ts  # File system watcher
│       └── gitService.ts   # Git integration

├── hooks/                  # Custom React hooks
│   ├── useAI.ts            # AI interaction hook
│   ├── useDebounce.ts      # Debounce utility
│   ├── useKeyboard.ts      # Keyboard shortcuts
│   └── useFileSystem.ts    # File system access

├── utils/                  # Utility functions
│   ├── format.ts           # Code formatting
│   ├── logger.ts           # Logging utility
│   └── validation.ts       # Input validation

├── types/                  # TypeScript definitions
│   ├── ai.ts               # AI-related types
│   ├── editor.ts           # Editor types
│   ├── file.ts             # File types
│   └── index.ts            # Type exports

└── styles/                 # CSS modules
    ├── editor.css
    ├── chat.css
    └── theme.css

Backend Structure (src-tauri/)

src-tauri/
├── src/                    # Rust source
│   ├── lib.rs              # Main entry point
│   ├── main.rs             # Application entry
│   ├── app.rs              # App setup
│   │
│   ├── commands/           # Tauri commands (API)
│   │   ├── mod.rs          # Command exports
│   │   ├── atomic_commands.rs # File operations
│   │   ├── core_wrappers.rs # Core functionality
│   │   ├── ai_commands.rs  # AI-related commands
│   │   └── symbol_commands.rs # Symbol indexing
│   │
│   ├── ai/                 # AI module
│   │   ├── mod.rs
│   │   ├── router.rs       # AI provider routing
│   │   ├── openai.rs       # OpenAI client
│   │   ├── anthropic.rs    # Anthropic client
│   │   ├── zhipu.rs        # Zhipu client
│   │   └── local.rs        # Local LLM (Ollama)
│   │
│   ├── agent_system/       # Agent framework
│   │   ├── mod.rs
│   │   ├── supervisor.rs   # Agent orchestration
│   │   └── toolchain.rs    # Available tools
│   │
│   ├── conversation/       # Chat management
│   │   ├── mod.rs
│   │   ├── message.rs      # Message types
│   │   └── history.rs      # Chat history
│   │
│   ├── codebase/           # Code analysis
│   │   ├── mod.rs
│   │   ├── parser.rs       # Tree-sitter wrapper
│   │   ├── symbols.rs      # Symbol extraction
│   │   └── index.rs        # Symbol index
│   │
│   ├── file_system/        # File operations
│   │   ├── mod.rs
│   │   ├── watcher.rs      # File watcher
│   │   └── git.rs          # Git operations
│   │
│   ├── prompt/             # Prompt templates
│   │   ├── mod.rs
│   │   └── templates.rs    # Prompt definitions
│   │
│   └── utils/              # Utilities
│       ├── mod.rs
│       ├── error.rs        # Error types
│       └── config.rs       # Configuration

├── Cargo.toml              # Rust dependencies
├── tauri.conf.json        # Tauri configuration
├── build.rs                # Build script
└── icons/                  # App icons

Test Structure

tests/
├── e2e/                    # E2E tests
│   ├── ai-chat.spec.ts     # AI chat tests
│   ├── composer.spec.ts    # Composer tests
│   ├── navigation.spec.ts  # Code navigation tests
│   └── refactoring.spec.ts # Refactoring tests

├── unit/                   # Unit tests
│   ├── services/           # Service tests
│   └── stores/             # Store tests

└── fixtures/               # Test fixtures
    ├── sample-code/        # Sample projects
    └── mock-responses/     # Mock AI responses

Documentation Structure

docs/
├── user/                   # User documentation
├── development/            # Developer documentation
├── technical/              # Technical deep dives
├── public/                 # Static assets
│   └── imgs/               # Images
└── .vitepress/             # VitePress config

Configuration Files

Frontend Config

FilePurpose
package.jsonNPM dependencies
tsconfig.jsonTypeScript config
vite.config.tsVite build config
tailwind.config.jsTailwind CSS config

Backend Config

FilePurpose
Cargo.tomlRust dependencies
tauri.conf.jsonTauri configuration
build.rsBuild script

Next Steps

Released under the MIT License.