File size: 3,234 Bytes
db8cd68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# Project Structure

## Directory Layout

- **`client/`**: Frontend React application
  - **`components/`**: Feature-based UI components
    - **`App/`**: Main application component with error boundaries
    - **`AiResponse/`**: AI response display and chat interface components
    - **`Analytics/`**: Search analytics and statistics components
    - **`Logs/`**: Application logging and debug modal components
    - **`Pages/`**: Route-level page components
      - **`Main/`**: Main search interface with menu and settings
    - **`Search/`**: Search functionality components
      - **`Form/`**: Search input and form components
      - **`History/`**: Search history and saved searches
      - **`Results/`**: Search results display (textual and graphical)
    - **`Settings/`**: Application settings and configuration
  - **`hooks/`**: Custom React hooks
  - **`modules/`**: Core business logic (PubSub stores, search services, database layers)
  - **`public/`**: Static assets
- **`server/`**: Server hooks for search endpoints, caching, compression, CORS, and API validation
- **`shared/`**: Utilities shared between client and server
- **`vite.config.ts`**: Build and server configuration with environment-driven feature flags

## Component Organization

Components are organized by feature domain. Each component folder contains:
- Component implementation
- Related styles
- Custom hooks
- Utility functions
- Tests

This self-contained structure makes it easy for agents to understand and modify components without navigating across the codebase.

## Key Modules Reference

The `client/modules/` directory contains core business logic organized by domain:

| Module | Purpose |
|--------|---------|
| `pubSub.ts` | All PubSub channels for state management |
| `search.ts` | Search orchestration, caching, and reranking |
| `textGeneration.ts` | AI response generation and chat handling |
| `textGenerationWith*.ts` | Provider-specific inference implementations (WebLLM, Wllama, OpenAI, Horde, Internal API) |
| `history.ts` | IndexedDB persistence for searches and chat |
| `settings.ts` | Default settings and inference type definitions |
| `followUpQuestions.ts` | Generates contextual follow-up questions |
| `relatedSearchQuery.ts` | Creates related search queries from conversation |
| `querySuggestions.ts` | Query suggestion UI data management |
| `webGpu.ts` | WebGPU availability and F16 shader detection |
| `wllama.ts` | Wllama model configuration and management |
| `accessKey.ts` | Access key validation and storage |
| `searchTokenHash.ts` | CSRF protection token generation |
| `parentWindow.ts` | PostMessage API for parent window embedding |
| `logEntries.ts` | Application logging with unique IDs |
| `appInfo.ts` | Application metadata and version info |
| `keyboard.ts` | Keyboard shortcut handling |
| `systemPrompt.ts` | System prompt templates |
| `stringFormatters.ts` | Text formatting utilities |
| `types.ts` | Shared TypeScript type definitions |

## Related Topics

- **Overview**: `docs/overview.md` - System architecture and data flow
- **UI Components**: `docs/ui-components.md` - Component architecture and PubSub patterns
- **Quick Start**: `docs/quick-start.md` - Installation and setup