← Commit history

v2.0.665 (insiders): No toast when a human raises a pup window: the jump list's relaunch command (pup_focus_window as user-taskbar-menu) used to warn the user about their own click. The foreground gate now judges by pup browser PID so a user's own Chrome can no longer fail it.

John Lauer ·be176fbffc ·1mo ago ·parent fabd5fd
3 files changed +22−16
rust/Cargo.lock+12−12
@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"  [[package]] name = "adom-pup-bridge"-version = "2.0.664"+version = "2.0.665" dependencies = [  "pup-browser",  "pup-cdp",@@ -655,7 +655,7 @@ dependencies = [  [[package]] name = "pup-browser"-version = "2.0.664"+version = "2.0.665" dependencies = [  "pup-core",  "pup-host",@@ -667,7 +667,7 @@ dependencies = [  [[package]] name = "pup-cdp"-version = "2.0.664"+version = "2.0.665" dependencies = [  "serde_json",  "thiserror",@@ -677,7 +677,7 @@ dependencies = [  [[package]] name = "pup-core"-version = "2.0.664"+version = "2.0.665" dependencies = [  "serde",  "serde_json",@@ -687,7 +687,7 @@ dependencies = [  [[package]] name = "pup-dashboard"-version = "2.0.664"+version = "2.0.665" dependencies = [  "pup-cdp",  "pup-core",@@ -700,7 +700,7 @@ dependencies = [  [[package]] name = "pup-host"-version = "2.0.664"+version = "2.0.665" dependencies = [  "serde",  "serde_json",@@ -709,14 +709,14 @@ dependencies = [  [[package]] name = "pup-host-mac"-version = "2.0.664"+version = "2.0.665" dependencies = [  "pup-host", ]  [[package]] name = "pup-host-win"-version = "2.0.664"+version = "2.0.665" dependencies = [  "pup-core",  "pup-host",@@ -726,7 +726,7 @@ dependencies = [  [[package]] name = "pup-identity"-version = "2.0.664"+version = "2.0.665" dependencies = [  "fontdue",  "image",@@ -736,7 +736,7 @@ dependencies = [  [[package]] name = "pup-session"-version = "2.0.664"+version = "2.0.665" dependencies = [  "pup-core",  "serde",@@ -746,7 +746,7 @@ dependencies = [  [[package]] name = "pup-vault"-version = "2.0.664"+version = "2.0.665" dependencies = [  "pup-core",  "pup-host",@@ -757,7 +757,7 @@ dependencies = [  [[package]] name = "pup-verbs"-version = "2.0.664"+version = "2.0.665" dependencies = [  "base64",  "png 0.17.16",
rust/Cargo.toml+1−1
@@ -4,7 +4,7 @@ members = ["core", "host", "host-win", "host-mac", "cdp", "browser", "session",  # One version for the whole bridge, in lockstep with src/BRIDGE_VERSION (tools/ship.sh bumps both). [workspace.package]-version = "2.0.664"+version = "2.0.665" edition = "2021" license = "MIT" 
rust/verbs/src/window.rs+9−3
@@ -38,14 +38,20 @@ pub fn raise(ctx: &Ctx, caller: &Caller, args: &Value) -> Value {     // carry focus:false, so clicking it did nothing, and it landed in the same instant as the window, which     // is not a warning at all. Now it CARRIES THE WINDOW (a click raises it) and the raise waits a beat     // behind it, so the notification reaches the screen first.-    let _ = ctx.ab.call("notify_user", json!({ "title": format!("pup: {thread} needs this window on your screen"), "body": reason, "focus": { "hwnd": h }, "level": "warning" }), caller, AB_T);-    std::thread::sleep(Duration::from_millis(1200));+    // 2.0.665 (John, 2026-09-20, seeing "pup: user-taskbar-menu needs this window on your screen" after a+    // taskbar click): a HUMAN caller (the jump list's relaunch command routes here as pup_focus_window) asked+    // for the window themselves. Warning them about their own click is noise, so no toast and no wait.+    let human = crate::USER_CALLERS.contains(&caller.thread.as_str());+    if !human {+        let _ = ctx.ab.call("notify_user", json!({ "title": format!("pup: {thread} needs this window on your screen"), "body": reason, "focus": { "hwnd": h }, "level": "warning" }), caller, AB_T);+        std::thread::sleep(Duration::from_millis(1200));+    }     let r = ctx.ab.call("desktop_bring_to_front", json!({ "hwnd": h }), caller, AB_T);     let applied = r.is_ok();     if !applied { let _ = ctx.ab.call("desktop_window_show", json!({ "hwnd": h }), caller, AB_T); }     ctx.sessions.with_mut(&s.id, |x| { x.foreground = true; x.raise_granted = true; x.user_active_at_ms = pup_core::now_ms(); }); touch(ctx, &s.id, Some(reason));     if let Some(x) = ctx.sessions.get(&s.id) { ctx.sessions.save_file(&x); }-    ok(json!({ "sessionId": s.id, "window": s.id, "aiThread": s.owner, "focused": applied, "applied": applied, "placement": "foreground", "windowEtiquette": "foreground", "reason": reason, "captioned": true, "_hint": "Raised onto the user's screen with a caption and a toast naming why. Send it back with pup_lower_os_window when the demo is over.", "_next": ["pup_lower_os_window", "pup_screenshot"] }))+    ok(json!({ "sessionId": s.id, "window": s.id, "aiThread": s.owner, "focused": applied, "applied": applied, "placement": "foreground", "windowEtiquette": "foreground", "reason": reason, "captioned": true, "toasted": !human, "_hint": "Raised onto the user's screen with a caption and a toast naming why. Send it back with pup_lower_os_window when the demo is over.", "_next": ["pup_lower_os_window", "pup_screenshot"] })) }  /// A HUMAN caller (jump-list task, toolbar button) just clicked something that needs the window on