feat: Add VS Code configuration and icon assets for Tauri application

This commit is contained in:
2026-01-26 21:58:34 +01:00
parent efbbccb36f
commit e90cf242bd
58 changed files with 203 additions and 197 deletions

5
.gitignore vendored
View File

@@ -7,10 +7,11 @@
.DS_Store .DS_Store
Thumbs.db Thumbs.db
# VS Code # VS Code - Ignore everything but project-specific config
.vscode/ .vscode/*
!.vscode/launch.json !.vscode/launch.json
!.vscode/tasks.json !.vscode/tasks.json
!.vscode/extensions.json
# Node / Frontend (om det läggs till senare) # Node / Frontend (om det läggs till senare)
node_modules/ node_modules/

7
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,7 @@
{
"recommendations": [
"vadimcn.vscode-lldb",
"tauri-apps.tauri-vscode",
"rust-lang.rust-analyzer"
]
}

19
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,19 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Tauri App",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/src-tauri/target/debug/ai-translater-client",
"args": [],
"cwd": "${workspaceFolder}/src-tauri",
"preLaunchTask": "build",
"env": {
"WEBKIT_DISABLE_COMPOSITING_MODE": "1",
// "GDK_BACKEND": "x11" // Uncomment if the above doesn't fix the initialization error
},
"sourceLanguages": ["rust"]
}
]
}

69
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,69 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "cargo",
"args": [
"build",
"--manifest-path=./src-tauri/Cargo.toml",
"--no-default-features"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$rustc"
]
},
{
"label": "Build Release (Linux)",
"type": "shell",
"command": "cargo",
"args": [
"tauri",
"build"
],
"options": {
"cwd": "${workspaceFolder}/src-tauri"
},
"group": "build",
"problemMatcher": []
},
{
"label": "Build Release (Windows)",
"type": "shell",
"command": "cargo",
"args": [
"tauri",
"build",
"--target",
"x86_64-pc-windows-msvc"
],
"options": {
"cwd": "${workspaceFolder}/src-tauri"
},
"group": "build",
"problemMatcher": []
},
{
"label": "tauri dev",
"type": "shell",
"command": "cargo",
"args": [
"tauri",
"dev"
],
"options": {
"cwd": "${workspaceFolder}/src-tauri",
"env": {
"WEBKIT_DISABLE_COMPOSITING_MODE": "1"
}
},
"group": "build",
"problemMatcher": []
}
]
}

276
README.md
View File

@@ -1,224 +1,110 @@
# AI Typist Client # AI Typist Client
En cross-platform skrivbordsapplikation utvecklad i Rust och Tauri v2 för Windows 11 och Linux (med Wayland-stöd). Applikationen fungerar som en smart AI-assistent som integrerar sömlöst med ditt arbetsflöde via system-tray, globala genvägar och urklippshantering. En smart skrivbordsassistent utvecklad i Rust och Tauri v2. Applikationen hjälper dig att översätta, rättstava och förbättra text i realtid genom att integrera lokala AI-modeller (Ollama) eller molntjänster (OpenAI) direkt i ditt arbetsflöde.
## Projektbeskrivning ## 🚀 Komma Igång
Målet med detta projekt är att skapa ett verktyg som kan förbättra, rättstava eller översätta text i alla applikationer genom att utnyttja lokala LLM:er (via Ollama) eller molnbaserade API:er (OpenAI). ### Förutsättningar
### Kärnfunktionalitet För att utveckla och bygga applikationen behöver du följande installerat:
1. **System Tray Integration**: 1. **Rust & Cargo**:
* Applikationen körs i bakgrunden med en ikon i statusfältet/systemfältet. ```bash
* Högerklick ger en meny för att komma åt inställningar eller avsluta appen. curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
2. **System-beroenden (Linux/Debian/Ubuntu)**:
```bash
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libssl-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-dev
```
3. **Cross-compilation (Windows från Linux)**:
Om du vill bygga för Windows från Linux behöver du `nsis` samt Rust-målet för Windows:
```bash
rustup target add x86_64-pc-windows-msvc
# Observera att cross-compilation med MSVC kan kräva ytterligare konfiguration (libs).
# Alternativt använd x86_64-pc-windows-gnu om du har Mingw installerat.
```
2. **AI-Workflow**: ---
* **Input**: Appen hämtar text direkt från systemets urklipp (clipboard).
* **Bearbetning**: Texten bakas in i en prompt och skickas till en LLM (Ollama/OpenAI) för översättning eller rättstavning.
* **Output**: Det bearbetade svaret kan antingen:
* Kopieras tillbaka till urklipp.
* Skrivas ut direkt i det aktiva fönstret genom att imitera tangentbordstryckningar (Keyboard Mimicry).
3. **Teknisk Stack**: ## 💻 Utveckling i VS Code
* **Språk**: Rust
* **GUI/Ramverk**: Tauri v2
* **Tangentbord/Input**: `enigo` (mimic) & `global-hotkey` (lyssna)
* **Urklipp**: `arboard`
* **AI-Kommunikation**: `reqwest` & `ollama-rs`
## Förutsättningar Det här projektet är konfigurerat för en smidig upplevelse i VS Code.
Du behöver Rust installerat (rekommenderat via `rustup`). ### Rekommenderade Tillägg
VS Code kommer automatiskt rekommendera dessa, men se till att du har:
* **rust-analyzer** (Rust språkstöd)
* **Tauri** (Tauri verktyg)
* **CodeLLDB** (För debugging)
**Installera Rust (Linux/macOS):** ### Debugging (Felsökning)
```bash Du kan köra och debugga appen direkt inifrån redigeraren:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Följ instruktionerna på skärmen (standardinstallation är oftast bäst)
source $HOME/.cargo/env
```
**Felsökning: "cannot install while Rust is installed"** 1. Gå till **Run and Debug** fliken (Ctrl+Shift+D).
Om du får detta felmeddelande har du redan Rust installerat via systemets pakethanterare (vilket sällan stöder cross-compilation smidigt). 2. Välj **"Debug Tauri App"** i menyn.
3. Tryck **F5** (Play).
* *Detta bygger appen och startar debuggern automatiskt. Du kan sätta breakpoints i din Rust-kod.*
*Lösning:* Avinstallera system-versionen och kör scriptet igen. ### Bygga för Release 📦
För att skapa färdiga körbara filer (binärer) utan debug-info:
* **Arch Linux:** `sudo pacman -Rs rust` (Kolla även om du har `cargo` installerat separat) 1. Öppna **Command Palette** (Ctrl+Shift+P).
* **Ubuntu/Debian:** `sudo apt remove rustc cargo` 2. Skriv och välj **"Tasks: Run Task"**.
3. Välj en av följande:
* **Build Release (Linux)**: Skapar en optimerad build för Linux.
* *Resultat:* `src-tauri/target/release/bundle/deb/` (eller AppImage)
* **Build Release (Windows)**: Skapar en `.exe` för Windows.
* *Resultat:* `src-tauri/target/x86_64-pc-windows-msvc/release/bundle/msi/` (eller nsis)
**Verifiera installationen:** ---
```bash
rustc --version
cargo --version
```
## Starta Applikationen ## 📂 Projektstruktur
För att starta applikationen i utvecklingsläge: Så här hittar du i koden:
```bash * **`src-tauri/`**: Backend-koden (Rust) och Tauri-konfigurationen.
cargo tauri dev * `Cargo.toml`: Beroenden för Rust.
``` * `tauri.conf.json`: Inställningar för fönster, ikoner, behörigheter och bundles.
* `build.rs`: Byggscript.
* **`src/`**: Källkoden för backend.
* `main.rs`: Entry point.
* `controllers/`: Logik för applikationens tillstånd och kommandon.
* `viewers/`: Hantering av fönster och System Tray.
* `utilities/`: Hjälpfunktioner (loggning, config).
* **`dist/`**: (Frontend) Om du har en frontend (HTML/JS/CSS) ligger de kompilerade filerna här som Tauri laddar.
* **`.vscode/`**: Inställningar för debugging och tasks i VS Code.
### Felsökning: Linux (Wayland) & "Error 71" ---
Om du använder Linux med Wayland (t.ex. GNOME eller KDE Plasma) kan du stöta på "Error 71 (Protocol error)" vid start. Detta är en känd bugg relaterad till WebKitGTK och hårdvaruacceleration.
**Lösning:** ## 🛠 Felsökning
Kör applikationen med inaktiverad kompositering:
### Error 71 (Protocol Error) på Linux (Wayland)
Om appen kraschar eller inte startar på Wayland:
Debuggern är konfigurerad att automatiskt sätta `WEBKIT_DISABLE_COMPOSITING_MODE=1`.
Om du kör manuellt från terminalen:
```bash ```bash
WEBKIT_DISABLE_COMPOSITING_MODE=1 cargo tauri dev WEBKIT_DISABLE_COMPOSITING_MODE=1 cargo tauri dev
``` ```
Alternativt för vissa NVIDIA-konfigurationer: ### Debuggern startar inte
```bash * Kontrollera att du installerat **CodeLLDB** tillägget.
__NV_DISABLE_EXPLICIT_SYNC=1 cargo tauri dev * Om du får fel vid länkning, kontrollera att du har alla system-beroenden installerade (se "Förutsättningar").
```
### Linux-beroenden (Ubuntu/Debian) ---
För att kompilera Tauri på Linux krävs följande bibliotek:
```bash ## 🧠 Teknisk Stack
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libssl-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-dev
```
### Linux-beroenden (Arch Linux / Manjaro) * **Core**: Rust
```bash * **Framework**: Tauri v2
sudo pacman -Syu * **Input Monitoring**: `enigo` (tangentbords-simulering), `global-hotkey` (genvägar)
sudo pacman -S webkit2gtk-4.1 \ * **Clipboard**: `arboard`
base-devel \ * **AI**: `ollama-rs` (lokal) & `reqwest` (API)
curl \
wget \
file \
openssl \
gtk3 \
libayatana-appindicator \
librsvg
```
*Obs: För Wayland-stöd hanterar GTK3/4 detta oftast automatiskt, men säkerställ att du kör en modern distribution.*
## Utveckling
### Installera Tauri CLI
```bash
cargo install tauri-cli --version "^2.0.0"
```
### Kör i utvecklingsläge
Gå in i `src-tauri` mappen eller kör från roten om konfigurerat korrekt, men standard är:
```bash
cd src-tauri
cargo tauri dev
```
Detta kommer starta applikationen. Eftersom vi inte har en frontend (HTML/JS) ännu, kommer fönstret vara tomt eller vitt, men System Tray-ikonen ska synas.
## Debugging med VS Code (CodeLLDB)
För att debugga Rust-koden effektivt i VS Code, skapa filen `.vscode/launch.json` i roten av projektet med följande innehåll. Detta binder CodeLLDB till Tauri-processen.
```json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Tauri App",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/src-tauri/target/debug/ai-translater-client",
"args": [],
"cwd": "${workspaceFolder}/src-tauri",
"preLaunchTask": "build",
"sourceLanguages": ["rust"]
}
]
}
```
## Cross-Compilation: Windows 11 från Linux
Att bygga Windows `.exe` från Linux är fullt möjligt med `cargo-xwin`.
1. **Installera cross-kompileringsverktyg:**
**Ubuntu/Debian:**
```bash
sudo apt install mingw-w64
```
**Arch Linux:**
```bash
sudo pacman -S mingw-w64 clang lld
# Välj "alla" (tryck Enter) om du tillfrågas om medlemmar i gruppen
```
**Alla:**
```bash
cargo install cargo-xwin
```
2. **Lägg till Windows target:**
```bash
rustup target add x86_64-pc-windows-msvc
```
3. **Bygg för Windows:**
Stå i `src-tauri` mappen och kör:
```bash
cargo tauri build --target x86_64-pc-windows-msvc --runner cargo-xwin
```
Resultatet (exe & msi) hamnar i `src-tauri/target/x86_64-pc-windows-msvc/release/bundle/`.
## Windows-testning på Linux (Wine/Proton)
För att snabbt verifiera att Windows-bygget startar utan att byta OS:
1. **Installera Wine:**
```bash
sudo apt install wine64
```
2. **Kör applikationen:**
Navigera till output-mappen från steget ovan och kör:
```bash
wine "ai-translater-client.exe"
```
*Notera: System Tray kan bete sig annorlunda i Wine än i äkta Windows.*
## Packaging & Distribution
Tauri hanterar paketering automatiskt baserat på ditt OS.
### Linux (.deb & .AppImage)
```bash
cargo tauri build
```
Filerna genereras i `src-tauri/target/release/bundle/deb/` och `appimage/`.
### Windows (.msi & .exe)
När du bygger via `cargo-xwin` (se ovan) eller på en Windows-maskin, genereras en `.msi` via WiX Toolset (om installerat) eller en `.exe` setup-fil via NSIS (standard i v2).
## Projektstruktur
* `src-tauri/Cargo.toml`: Alla beroenden (tauri, enigo, ollama-rs, etc).
* `src-tauri/src/main.rs`: Entry point. Innehåller logik för System Tray.
* `src-tauri/tauri.conf.json`: Konfiguration för fönster och byggprocess.
## Loggning
Applikationen har inbyggt stöd för loggning för att underlätta felsökning.
* **Plats:** Loggfiler sparas i en mapp som heter `loggs` som ligger i samma katalog som den körbara filen.
* **Filnamn:** En loggfil skapas per dag och döps efter dagens datum (t.ex. `2024-01-18.log`).
* **Format:** Loggarna innehåller tidsstämpel, loggnivå (INFO, DEBUG, ERROR), modul/funktion samt meddelandet. Exempel:
`[2024-01-18 10:00:00][INFO][ai_translater_client::main] Application started`
* **Loggade händelser:** Applikationsstart, system tray-händelser, felmeddelanden och annan viktig information loggas.

15
src-tauri/.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,15 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Tauri App",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/src-tauri/target/debug/ai-translater-client",
"args": [],
"cwd": "${workspaceFolder}/src-tauri",
"preLaunchTask": "build",
"sourceLanguages": ["rust"]
}
]
}

BIN
src-tauri/icons/128x128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src-tauri/icons/64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<background android:drawable="@color/ic_launcher_background"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#fff</color>
</resources>

BIN
src-tauri/icons/icon.icns Normal file

Binary file not shown.

BIN
src-tauri/icons/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
src-tauri/icons/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB