feat: full pattern matrix — M1 complete, M2 LLM chat, 30+ pattern files #10
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/patterns-expansion"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
This branch completes M1 (log watching + pattern matching + tray notifications), wires M2 (Ollama streaming chat), and builds out the full migration pattern library.
llm.rsstreaming client against Ollama/api/chat;chatTauri command;ChatPanel.vuestreams tokens character-by-characterPattern coverage
Android and iPad pattern files assume zero terminal experience — every command explained from first principles with App Store analogies.
Linux-to-Linux files are tuned to the reader's prior tooling: a Fedora user's arch patterns explain DNF analogues; an Arch user's debian patterns explain dpkg recovery and unattended-upgrades.
Dual-boot supplements (
dualboot-windows.toml,dualboot-macos.toml) are layered on top of the primary pattern file viaPatternFile::extend()whenmigration.dual_boot_withis set. Covers NTFS Fast Startup, clock skew, GRUB overwrite, BitLocker, T2 Secure Boot, APFS mounting.New config fields
Onboarding flow (3 steps)
Test plan
cargo teston a machine with webkit2gtk — Munnin (Linux Mint) is available~/.config/robin/config.tomlsource_os = "windows"in config, confirmwindows-to-debian.tomlloads and NTFS/apt patterns fire correctly on a real Mint machinedual_boot_with = "windows", confirmdualboot-windows.tomlpatterns merge inollama serve), send a message and confirm tokens stream into chat panelsource_os = "android", confirm beginner-friendly pattern bodies appearRelated issues
Closes #1 (M1 foundation), closes #2 (M2 LLM chat). Relates to #3 (pattern expansion), #4 (Linux-to-Linux paths), #7 (onboarding).
- load() now rejects patterns with empty match_text or empty sources list - EventSource derives Serialize/Deserialize with serde tag for emit() readiness - AppLog variant changed to struct form (AppLog { app }) for tagged enum compat - classify() takes &SystemEvent directly (top-level use import, not per-fn) - #[must_use] on classify() - 5 new tests: any-source wildcard (journald+kmsg), applog mismatch, empty-field validationNew SourceOs variants: Android, IpadOs — routed to android-to-* and ipad-to-* pattern files respectively. Pattern bodies assume zero terminal experience; every command explained from first principles with App Store / iOS analogies. Dual-boot supplement system: PatternFile::extend() + load_supplement() in patterns.rs; lib.rs loads dualboot-{windows,macos}.toml on top of the primary pattern file when migration.dual_boot_with is set. Supplement covers NTFS dirty flag from Fast Startup, clock skew (RTC local vs UTC), GRUB overwrite by Windows Update, BitLocker, APFS/HFS+ access, T2 Secure Boot. complete_onboarding() now accepts dual_boot_with: Option<String> and normalises it to "windows"/"macos". Onboarding.vue becomes a 3-step flow: source OS -> (Linux distro if linux) -> (dual-boot if windows/macos). Mobile users skip the dual-boot step entirely. 10 new pattern files (8 mobile + 2 supplements), config.rs tests updated.Intercept WindowEvent::CloseRequested on the 'chat' window and call window.hide() + api.prevent_close(). Without this, clicking the X destroys the window — get_webview_window("chat") then returns None and subsequent tray clicks do nothing.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)View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.