- Rewrite .github/workflows/desktop.yml: 2-job pipeline (validate + build-and-release) with rolling desktop-latest pre-release on push to main and stable desktop-v* releases - Add UpdateChecker component: checks for updates on startup + every 30 min, background download with progress bar, one-click relaunch - Configure Tauri updater: endpoints pointing to desktop-latest release, pubkey placeholder - Add tauri-plugin-process for relaunch support (Cargo.toml, lib.rs, package.json) - Add macOS Entitlements.plist for notarization (network + file access, no sandbox) - Add scripts/bump-desktop-version.sh for atomic version bumps across 3 config files - Add desktop/README.md with dev setup, auto-update architecture, signing docs - Update .gitignore for desktop/node_modules, dist, target - Configure macOS minimumSystemVersion, Windows timestampUrl - Include all Phase 14-21 work: agent hardening, RBAC, taint tracking, workflows, skills, knowledge graph, sessions, A2A, MCP templates, WASM sandbox, TUI dashboard, production tools, CLI expansion, API expansion, learning productionization, Tauri desktop app, and 10 new channels Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.3 KiB
OpenJarvis Desktop
Tauri 2.0 native desktop application for OpenJarvis with auto-updates, energy monitoring, trace debugging, and learning visualization.
Development Setup
# Prerequisites: Node.js 22+, Rust stable, system deps (see below)
cd desktop
npm install
cargo tauri dev # Hot-reload development mode
cargo tauri build # Production build
Linux System Dependencies
sudo apt-get install -y \
libwebkit2gtk-4.1-dev libgtk-3-dev libappindicator3-dev \
librsvg2-dev patchelf libxdo-dev
Auto-Update Architecture
Every push to main (touching desktop/ or the workflow) triggers a CI pipeline that:
- Validates TypeScript + Rust (
validatejob) - Builds for Linux, macOS (ARM + Intel), and Windows (
build-and-releasejob) - Creates/updates a
desktop-latestpre-release on GitHub Releases - Uploads platform installers and a signed
latest.jsonmanifest
The desktop app checks latest.json on startup and every 30 minutes. When a newer version is found, it shows a banner prompting the user to download and relaunch.
Push to main -> CI builds -> desktop-latest release -> latest.json
|
Desktop app checks periodically <-------------------------+
-> "Update available" banner
-> Download in background
-> "Relaunch now" prompt
Releases
Rolling (Nightly)
Automatic on every push to main. Users on the desktop app receive updates seamlessly.
Stable (Versioned)
# Bump version in all 3 config files
./scripts/bump-desktop-version.sh 1.0.1
# Commit and tag
git add desktop/package.json desktop/src-tauri/tauri.conf.json desktop/src-tauri/Cargo.toml
git commit -m "chore(desktop): bump version to 1.0.1"
git tag desktop-v1.0.1
git push origin main --tags
CI creates a versioned GitHub Release (e.g., desktop-v1.0.1) with full installers.
Code Signing
Update Signing (Required for Auto-Updates)
Generate a key pair for signing update manifests:
cargo tauri signer generate -w ~/.tauri/openjarvis.key
Set the public key in src-tauri/tauri.conf.json under plugins.updater.pubkey, then add these GitHub Secrets:
| Secret | Description |
|---|---|
TAURI_SIGNING_PRIVATE_KEY |
Contents of the .key file |
TAURI_SIGNING_PRIVATE_KEY_PASSWORD |
Password used during generation |
macOS Notarization (Optional)
| Secret | Description |
|---|---|
APPLE_CERTIFICATE |
Base64-encoded .p12 certificate |
APPLE_CERTIFICATE_PASSWORD |
Certificate password |
APPLE_SIGNING_IDENTITY |
e.g., Developer ID Application: Name (TEAMID) |
APPLE_ID |
Apple ID email |
APPLE_PASSWORD |
App-specific password |
APPLE_TEAM_ID |
10-character team ID |
Windows Authenticode (Optional)
| Secret | Description |
|---|---|
WINDOWS_CERTIFICATE |
Base64-encoded .pfx certificate |
WINDOWS_CERTIFICATE_PASSWORD |
Certificate password |
All signing is optional — unsigned builds work without any secrets configured.
Dashboard Panels
- Energy — Real-time power monitoring (recharts)
- Traces — Timeline inspection with step-type color coding
- Learning — Policy visualization (GRPO/bandit stats)
- Memory — Search and stats for memory backends
- Admin — Health checks, agent management, server control