The UI was previously a Vue 3 SPA served via a Vite dev server on :1420.
This had two problems:
- Building from source required Node, npm, and the Tauri CLI
- Running required starting a Vite dev server alongside the binary
Replace with a single self-contained dist/index.html using vanilla JS
and the Tauri 2 withGlobalTauri IPC global. No build step, no npm, no
dev server — the binary loads the static file directly.
Changes:
- dist/index.html: full Robin UI (chat, events, debug tabs) in ~750 LOC
- Chat tab: streaming LLM responses via robin:chat-token events
- Events tab: live matched system events with severity badges
- Debug tab: migration config, Ollama status probe, notif level picker
- Onboarding form shown on first run (calls complete_onboarding IPC)
- All user/LLM text via textContent/DOM construction, no innerHTML
- Markdown renderer (fenced code, inline code) built from DOM nodes
- tauri.conf.json: add withGlobalTauri: true, remove devUrl and Node hooks
- tauri.conf.json: update CSP to allow inline scripts (desktop app)
- manage.sh: remove Vite dev server auto-start and kill logic
- manage.sh: build/dev now use cargo directly, add bundle command for
full .deb/.rpm/.AppImage (still requires Tauri CLI)
- .gitignore: track dist/index.html, only ignore dist/assets/ (Vite output)
- Add reqwest 0.12 (json + stream features) — was missing from Cargo.toml
causing chat_stream to fail to compile
- Add Android/IpadOs arms to SourceOs match in chat command
- Add tauri::Manager import to notify.rs (needed for .state())
- Replace deprecated menu_on_left_click with show_menu_on_left_click
- Remove desktopTemplate from tauri.conf.json (not in tauri-utils 2.9.2 schema)
- Commit Cargo.lock so cross-machine builds pin identical crate versions
All 42 unit tests pass on Linux Mint 22.3 (Muninn).