botapp/PROMPT.md

8 KiB

BotApp Development Prompt Guide

Version: 6.1.0
Purpose: LLM context for BotApp desktop application development


Weekly Maintenance - EVERY MONDAY

Package Review Checklist

Every Monday, review the following:

  1. Dependency Updates

    cargo outdated
    cargo audit
    
  2. Package Consolidation Opportunities

    • Check if new crates can replace custom code
    • Look for crates that combine multiple dependencies
    • Review Cargo.toml for redundant dependencies
  3. Code Reduction Candidates

    • Custom implementations that now have crate equivalents
    • Boilerplate that can be replaced with derive macros
    • Tauri plugin replacements for custom code
  4. Tauri Plugin Updates

    # Check for new Tauri plugins that simplify code
    # Review tauri-plugin-* ecosystem
    

Packages to Watch

Area Potential Packages Purpose
Dialogs tauri-plugin-dialog Native file dialogs
Notifications tauri-plugin-notification System notifications
Clipboard tauri-plugin-clipboard Clipboard access
Auto-update tauri-plugin-updater App updates

Official Icons - MANDATORY

NEVER generate icons with LLM. ALWAYS use official SVG icons from assets.

Icons are stored in:

  • botui/ui/suite/assets/icons/ - Runtime icons (source of truth)

Available App Icons

Icon File Usage
Logo gb-logo.svg Main GB branding
Bot gb-bot.svg Bot/assistant
Analytics gb-analytics.svg Charts, dashboards
Calendar gb-calendar.svg Scheduling
Chat gb-chat.svg Messaging
Compliance gb-compliance.svg Security
Designer gb-designer.svg Workflows
Drive gb-drive.svg File storage
Mail gb-mail.svg Email
Meet gb-meet.svg Video calls
Paper gb-paper.svg Documents
Research gb-research.svg Search
Sources gb-sources.svg Knowledge
Tasks gb-tasks.svg Task management

Icon Guidelines

  • All icons use stroke="currentColor" for theming
  • ViewBox: 0 0 24 24
  • Stroke width: 1.5
  • Rounded line caps and joins

DO NOT:

  • Generate new icons with AI/LLM
  • Use emoji or unicode symbols as icons
  • Use external icon libraries
  • Create inline SVG content

Project Overview

BotApp is a Tauri-based desktop wrapper for General Bots. It provides native desktop experience by wrapping botui's web interface with Tauri's native window capabilities.

Workspace Position

botapp/        # THIS PROJECT - Desktop app wrapper
botui/         # Web UI (consumed by botapp)
botserver/     # Main server (business logic)
botlib/        # Shared library
botbook/       # Documentation

What BotApp Provides

  • Native Desktop Window: Tauri-powered native application
  • System Tray: Background operation with tray icon
  • File Dialogs: Native file picker integration
  • Desktop Notifications: OS-level notifications
  • Auto-Update: Built-in update mechanism (future)

Quick Start

# Ensure botserver is running
cd ../botserver && cargo run &

# Development mode
cd botapp
cargo tauri dev

# Production build
cargo tauri build

Architecture

Tauri Structure

botapp/
├── src/
│   └── main.rs           # Rust backend, Tauri commands
├── ui/                   # Frontend assets
│   └── app-guides/       # App-specific HTML
├── js/
│   └── app-extensions.js # JavaScript extensions
├── icons/                # App icons (all sizes)
├── tauri.conf.json       # Tauri configuration
├── Cargo.toml            # Rust dependencies
└── build.rs              # Build script

Communication Flow

Native UI (HTML/CSS/JS)
    ↓ Tauri IPC (invoke)
Rust #[tauri::command]
    ↓ HTTP (reqwest)
botserver API
    ↓
Business Logic + Database

Code Generation Rules

CRITICAL REQUIREMENTS

- Tauri commands must be async-safe
- All file operations use Tauri APIs
- No direct filesystem access from JS
- Desktop-specific features only in botapp
- Shared logic stays in botserver
- Zero warnings required

Tauri Command Pattern

use tauri::command;

#[command]
pub async fn my_command(
    window: tauri::Window,
    param: String,
) -> Result<MyResponse, String> {
    // Implementation
    Ok(MyResponse { /* ... */ })
}

// Register in main.rs
fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![
            my_command,
        ])
        .run(tauri::generate_context!())
        .expect("error running app");
}

JavaScript Invocation

// From frontend
const result = await window.__TAURI__.invoke('my_command', {
    param: 'value'
});

Feature Flags

[features]
default = ["desktop"]
desktop = []
desktop-tray = ["dep:ksni", "dep:trayicon"]

Dependencies

Library Version Purpose
tauri 2 Desktop framework
tauri-plugin-dialog 2 File dialogs
tauri-plugin-opener 2 URL/file opener
botlib path Shared types
reqwest 0.12 HTTP client
tokio 1.41 Async runtime

Platform-Specific Code

Unix (Linux/macOS)

#[cfg(unix)]
use ksni;  // System tray on Linux

Windows

#[cfg(windows)]
use trayicon;  // System tray on Windows
use image;     // Icon handling

Tauri Configuration (tauri.conf.json)

Key settings (Tauri v2 format):

{
  "$schema": "https://schema.tauri.app/config/2",
  "productName": "General Bots",
  "version": "6.1.0",
  "identifier": "br.com.pragmatismo.botapp",
  "build": {
    "devUrl": "http://localhost:3000",
    "frontendDist": "../botui/ui/suite"
  },
  "app": {
    "security": {
      "csp": null
    },
    "windows": [{
      "title": "General Bots",
      "width": 1200,
      "height": 800,
      "resizable": true,
      "fullscreen": false
    }]
  },
  "bundle": {
    "active": true,
    "targets": "all",
    "icon": []
  }
}

Adding Features

Process

  1. Check if feature belongs here - Only desktop-specific features
  2. Add Tauri command in src/main.rs
  3. Register handler in tauri::Builder
  4. Add JS invocation in js/app-extensions.js
  5. Update UI if needed

Example: Add Screenshot

// src/main.rs
#[tauri::command]
async fn take_screenshot(window: tauri::Window) -> Result<Vec<u8>, String> {
    // Use platform-specific screenshot API
    Ok(screenshot_bytes)
}
// js/app-extensions.js
async function takeScreenshot() {
    return await window.__TAURI__.invoke('take_screenshot');
}

Icons

Required icon sizes in icons/:

icon.ico          # Windows (256x256)
icon.icns         # macOS
icon.png          # Linux (512x512)
32x32.png
128x128.png
128x128@2x.png

Building

Development

cargo tauri dev

Production

# All platforms
cargo tauri build

# Specific target
cargo tauri build --target x86_64-unknown-linux-gnu
cargo tauri build --target x86_64-pc-windows-msvc
cargo tauri build --target x86_64-apple-darwin

Output Locations

target/release/bundle/
├── deb/          # Debian package
├── appimage/     # AppImage
├── msi/          # Windows installer
├── dmg/          # macOS disk image
└── macos/        # macOS app bundle

Environment Variables

BOTSERVER_URL=http://localhost:8081  # botserver location
TAURI_DEBUG=1                         # Debug mode

Testing

# Build check
cargo build

# Run dev mode
cargo tauri dev

# Run tests
cargo test

Rules

  • Desktop-only features - Shared logic in botserver
  • Tauri APIs - No direct fs access from JS
  • Platform abstractions - Use cfg for platform code
  • Security - Minimal allowlist in tauri.conf.json
  • Zero warnings - Clean compilation required
  • No cargo audit - Exempt per project requirements