botapp/README.md

161 lines
4.5 KiB
Markdown
Raw Permalink Normal View History

# BotApp - General Bots Desktop Application
BotApp is the Tauri-based desktop wrapper for General Bots, providing native desktop and mobile capabilities on top of the pure web UI from [botui](https://github.com/GeneralBots/botui).
## Architecture
```
botui (pure web) botapp (Tauri wrapper)
┌─────────────────┐ ┌─────────────────────────┐
│ suite/ │◄─────│ Loads botui's UI │
│ minimal/ │ │ + injects app-only │
│ shared/ │ │ features via JS │
│ │ │ │
│ No Tauri deps │ │ Tauri + native APIs │
└─────────────────┘ └─────────────────────────┘
```
### Why Two Projects?
- **botui**: Pure web UI with zero native dependencies. Works in any browser.
- **botapp**: Wraps botui with Tauri for desktop/mobile native features.
This separation allows:
- Same UI code for web, desktop, and mobile
- Clean dependency management (web users don't need Tauri)
- App-specific features only in the native app
## Features
BotApp adds these native capabilities to botui:
- **Local File Access**: Browse and manage files on your device
- **System Tray**: Minimize to tray, background operation
- **Native Dialogs**: File open/save dialogs
- **Desktop Notifications**: Native OS notifications
- **App Settings**: Desktop-specific configuration
## Project Structure
```
botapp/
├── Cargo.toml # Rust dependencies (includes Tauri)
├── build.rs # Tauri build script
├── tauri.conf.json # Tauri configuration
├── src/
│ ├── main.rs # Tauri entry point
│ ├── lib.rs # Library exports
│ └── desktop/
│ ├── mod.rs # Desktop module
│ ├── drive.rs # File system commands
│ └── tray.rs # System tray functionality
├── ui/
│ └── app-guides/ # App-only HTML content
│ ├── local-files.html
│ └── native-settings.html
└── js/
└── app-extensions.js # Injected into botui's suite
```
## Prerequisites
- Rust 1.70+
- Node.js 18+ (for Tauri CLI)
- Tauri CLI: `cargo install tauri-cli`
### Platform-specific
**Linux:**
```bash
sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev
```
**macOS:**
```bash
xcode-select --install
```
**Windows:**
- Visual Studio Build Tools with C++ workload
## Development
1. Clone both repositories:
```bash
git clone https://github.com/GeneralBots/botui.git
git clone https://github.com/GeneralBots/botapp.git
```
2. Start botui's web server (required for dev):
```bash
cd botui
cargo run
```
3. Run botapp in development mode:
```bash
cd botapp
cargo tauri dev
```
## Building
### Debug Build
```bash
cargo tauri build --debug
```
### Release Build
```bash
cargo tauri build
```
Binaries will be in `target/release/bundle/`.
## How App Extensions Work
BotApp injects `js/app-extensions.js` into botui's suite at runtime. This script:
1. Detects Tauri environment (`window.__TAURI__`)
2. Injects app-only navigation items into the suite's `.app-grid`
3. Exposes `window.BotApp` API for native features
Example usage in suite:
```javascript
if (window.BotApp?.isApp) {
// Running in desktop app
const files = await BotApp.fs.listFiles('/home/user');
await BotApp.notify('Title', 'Native notification!');
}
```
## Tauri Commands
Available Tauri commands (invokable from JS):
| Command | Description |
|---------|-------------|
| `list_files` | List directory contents |
| `upload_file` | Copy file with progress |
| `create_folder` | Create new directory |
| `delete_path` | Delete file or folder |
| `get_home_dir` | Get user's home directory |
## Configuration
Edit `tauri.conf.json` to customize:
- `productName`: Application name
- `identifier`: Unique app identifier
- `build.devUrl`: URL for development (default: `http://localhost:3000`)
- `build.frontendDist`: Path to botui's UI (default: `../botui/ui/suite`)
## License
AGPL-3.0 - See [LICENSE](LICENSE) for details.
## Related Projects
- [botui](https://github.com/GeneralBots/botui) - Pure web UI
- [botserver](https://github.com/GeneralBots/botserver) - Backend server
- [botlib](https://github.com/GeneralBots/botlib) - Shared Rust library