feat: full pattern matrix — M1 complete, M2 LLM chat, 30+ pattern files #10

Open
pyr0ball wants to merge 31 commits from feat/patterns-expansion into main
2 changed files with 20 additions and 4 deletions
Showing only changes of commit 8e28ac2624 - Show all commits

View file

@ -44,15 +44,30 @@ pub fn run() {
config::SourceOs::IpadOs => "ipad", config::SourceOs::IpadOs => "ipad",
config::SourceOs::Unknown => "unknown", config::SourceOs::Unknown => "unknown",
}; };
let mut pf = patterns::load(source, migration.source_distro_family.as_deref(), family).ok(); log::info!("robin: loading patterns for {source} → {family} (distro: {})", migration.distro);
let mut pf = match patterns::load(source, migration.source_distro_family.as_deref(), family) {
Ok(p) => {
log::info!("robin: loaded {} patterns", p.patterns.len());
Some(p)
}
Err(e) => {
log::warn!("robin: no pattern file found ({e}) — notifications disabled");
None
}
};
// Layer dual-boot supplement patterns on top when a co-installed OS is configured. // Layer dual-boot supplement patterns on top when a co-installed OS is configured.
if let (Some(ref mut primary), Some(ref dualboot)) = (&mut pf, &migration.dual_boot_with) { if let (Some(ref mut primary), Some(ref dualboot)) = (&mut pf, &migration.dual_boot_with) {
if let Ok(supplement) = patterns::load_supplement(dualboot) { match patterns::load_supplement(dualboot) {
Ok(supplement) => {
log::info!("robin: loaded {} dual-boot supplement patterns for {dualboot}", supplement.patterns.len());
primary.extend(supplement); primary.extend(supplement);
} }
Err(e) => log::warn!("robin: dual-boot supplement not found for {dualboot}: {e}"),
}
} }
pf pf
} else { } else {
log::info!("robin: no migration config — onboarding needed");
None None
}; };
@ -70,6 +85,7 @@ pub fn run() {
while let Some(event) = rx.recv().await { while let Some(event) = rx.recv().await {
if let Some(ref pf) = *pf { if let Some(ref pf) = *pf {
if let Some(matched) = patterns::classify(&event, pf) { if let Some(matched) = patterns::classify(&event, pf) {
log::info!("robin: matched pattern '{}' — dispatching notification", matched.pattern_id);
notify::dispatch(&app_handle, matched); notify::dispatch(&app_handle, matched);
} }
} }

View file

@ -2,5 +2,5 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() { fn main() {
app_lib::run(); robin_lib::run();
} }