mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-27 21:08:00 +00:00
- Introduced detailed architecture overview outlining system components and entry points. - Documented state management using Redux Toolkit and Redux-Persist, including store configuration and slice structures. - Described services layer architecture, detailing API client, socket service, and MTProto service functionalities. - Explained the Model Context Protocol (MCP) system, including tool categories and implementation examples. - Outlined routing structure and page components, emphasizing protected and public routes. - Organized reusable components by feature, detailing their structure and usage. - Provided insights into provider management for service lifecycle and shared state. This documentation enhances understanding of the application's structure and improves onboarding for new developers, ensuring clarity in the system's design and functionality.
4.6 KiB
4.6 KiB
Rust Backend Architecture
Overview
The Tauri Rust backend provides native functionality for the AlphaHuman desktop application:
- System tray with background execution
- Deep link authentication
- Secure session storage (OS Keychain)
- Socket.io state management
- Native notifications
- Window management
Directory Structure
src-tauri/src/
├── lib.rs # Entry point, plugin registration, tray setup
├── main.rs # Binary entry (desktop)
├── commands/ # Tauri IPC commands
│ ├── mod.rs
│ ├── auth.rs # Authentication commands
│ ├── socket.rs # Socket state commands
│ ├── telegram.rs # Telegram login commands
│ └── window.rs # Window management commands
├── services/ # Background services
│ ├── mod.rs
│ ├── session_service.rs # Secure session storage (keychain)
│ ├── socket_service.rs # Socket.io state management
│ └── notification_service.rs # Native notifications
├── models/ # Data structures
│ ├── mod.rs
│ ├── auth.rs # Auth types (Session, User)
│ └── socket.rs # Socket types (ConnectionStatus)
└── utils/ # Configuration and helpers
├── mod.rs
└── config.rs # Environment configuration
Key Components
lib.rs - Application Entry
The main entry point that:
- Registers Tauri plugins (opener, deep-link, autostart, notification)
- Sets up system tray with Show/Hide and Quit menu
- Handles macOS-specific window close behavior (minimize to tray)
- Registers all IPC commands
Commands Layer
Commands are exposed to the frontend via Tauri's IPC:
| Module | Commands | Purpose |
|---|---|---|
auth |
exchange_token, get_auth_state, logout, etc. |
Authentication |
socket |
socket_connect, report_socket_connected, etc. |
Socket state |
telegram |
start_telegram_login |
Telegram OAuth |
window |
show_window, hide_window, toggle_window, etc. |
Window control |
Services Layer
Singleton services providing background functionality:
| Service | Purpose | Storage |
|---|---|---|
SessionService |
Secure auth token storage | OS Keychain |
SocketService |
Socket.io state management | Memory + Events |
NotificationService |
Native notifications | N/A |
Architecture Decisions
Socket.io Strategy
The frontend maintains the actual Socket.io connection, while Rust:
- Stores connection parameters
- Tracks connection state
- Emits events to coordinate with frontend
- Ensures socket stays connected when window is hidden
This approach is necessary because:
- Rust's Socket.io libraries have API compatibility issues
- The WebView maintains state when hidden (unlike browser tabs)
- Frontend JavaScript is better suited for Socket.io's event-driven model
Keychain Storage
Session tokens are stored in the OS keychain for security:
- macOS: Keychain
- Windows: Credential Manager
- Linux: Secret Service
Event Bridge Pattern
Rust communicates with the frontend via Tauri events:
// Rust emits event
app.emit("socket:should_connect", json!({ "backendUrl": url, "token": token }))
// Frontend listens
listen("socket:should_connect", (event) => {
socketService.connect(event.payload.backendUrl, event.payload.token);
});
Plugin Dependencies
| Plugin | Version | Purpose |
|---|---|---|
tauri-plugin-opener |
2 | Open URLs in browser |
tauri-plugin-deep-link |
2.0.0 | Handle outsourced:// URLs |
tauri-plugin-autostart |
2 | Launch at login |
tauri-plugin-notification |
2 | Native notifications |
Cargo Dependencies
| Crate | Purpose |
|---|---|
tauri |
Core framework with tray and macOS APIs |
serde, serde_json |
Serialization |
reqwest |
HTTP client |
tokio |
Async runtime |
keyring |
Secure credential storage |
once_cell |
Lazy static singletons |
parking_lot |
Fast mutexes |
log, env_logger |
Logging |
Platform-Specific Behavior
macOS
- Window close button hides instead of quitting
- Dock icon click shows window
- LaunchAgent for autostart
- Keychain for secure storage
Windows/Linux
- Deep link registration at runtime
- Platform-specific credential storage
- Registry (Windows) or desktop file (Linux) autostart
Next: Commands Reference