generated from nhcarrigan/template
bf411adeb7
## Summary This PR resolves several critical bugs that were blocking the permission modal and causing config loss: - **Permission modal not appearing** - Fixed z-index issues and runtime errors - **Config store race condition** - Resolved critical race condition causing settings to be lost - **Excessive logging** - Removed redundant fmt layer that was writing to hidden stdout - **System tool prompts** - Prevented unnecessary permission prompts for built-in tools - **Permission batching** - Added support for parallel permission requests - **ExitPlanMode tool** - Fixed ExitPlanMode tool not functioning correctly ## Changes Made ### Permission Modal Fixes - Updated z-index to proper value (9999) to ensure modal appears above all other UI elements - Fixed runtime errors that were preventing modal from rendering - Resolved issues with permission grants not being properly applied ### Config Store Race Condition - Fixed critical race condition where multiple rapid config updates would result in lost settings - Ensured config writes are properly sequenced to prevent data loss - Added proper synchronisation for config store operations ### Logging Cleanup - Removed redundant fmt formatting layer that was outputting to hidden stdout - Cleaned up excessive debug logging added during troubleshooting - Removed temporary debugging documentation files ### UX Improvements - Added close confirmation modal with minimise to tray option - Implemented batching for parallel permission requests - Added debug console for viewing frontend and backend logs ### ExitPlanMode Fix - Fixed ExitPlanMode tool not functioning correctly, ensuring proper transitions out of plan mode ## Issues Resolved Closes #112 - Permission flow now properly handles multiple tool requests Closes #113 - ExitPlanMode tool now functions correctly Closes #126 - Debug console feature added (partial - basic implementation complete) ## Test Plan - [x] Permission modal appears and functions correctly - [x] Config settings persist across app restarts - [x] No excessive logging in production builds - [x] System tools don't trigger permission prompts - [x] Parallel permission requests are properly batched - [x] Debug console displays frontend and backend logs - [x] ExitPlanMode properly exits plan mode --- ✨ This PR was created with help from Hikari~ 🌸 Co-authored-by: Naomi Carrigan <commits@nhcarrigan.com> Reviewed-on: #127 Co-authored-by: Hikari <hikari@nhcarrigan.com> Co-committed-by: Hikari <hikari@nhcarrigan.com>
85 lines
2.6 KiB
Rust
85 lines
2.6 KiB
Rust
use std::process::Command;
|
|
use tauri::command;
|
|
|
|
#[command]
|
|
pub async fn send_wsl_notification(title: String, body: String) -> Result<(), String> {
|
|
// Method 1: Try Windows 10/11 toast notification using PowerShell
|
|
let toast_command = format!(
|
|
r#"
|
|
Add-Type -AssemblyName System.Runtime.WindowsRuntime
|
|
$null = [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime]
|
|
$null = [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime]
|
|
|
|
$APP_ID = 'Hikari Desktop'
|
|
|
|
$template = @"
|
|
<toast>
|
|
<visual>
|
|
<binding template="ToastGeneric">
|
|
<text>{0}</text>
|
|
<text>{1}</text>
|
|
</binding>
|
|
</visual>
|
|
</toast>
|
|
"@
|
|
|
|
$xml = New-Object Windows.Data.Xml.Dom.XmlDocument
|
|
$xml.LoadXml($template -f ('{0}' -replace "'", "''"), ('{1}' -replace "'", "''"))
|
|
|
|
$toast = New-Object Windows.UI.Notifications.ToastNotification $xml
|
|
$notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($APP_ID)
|
|
$notifier.Show($toast)
|
|
"#,
|
|
title.replace("'", "''").replace("\"", "\\\""),
|
|
body.replace("'", "''").replace("\"", "\\\"")
|
|
);
|
|
|
|
// Try PowerShell.exe through WSL
|
|
let output = Command::new("/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe")
|
|
.arg("-NoProfile")
|
|
.arg("-ExecutionPolicy")
|
|
.arg("Bypass")
|
|
.arg("-WindowStyle")
|
|
.arg("Hidden")
|
|
.arg("-Command")
|
|
.arg(&toast_command)
|
|
.output();
|
|
|
|
match output {
|
|
Ok(result) => {
|
|
if result.status.success() {
|
|
tracing::info!("WSL notification sent successfully");
|
|
return Ok(());
|
|
} else {
|
|
let stderr = String::from_utf8_lossy(&result.stderr);
|
|
tracing::error!("PowerShell toast failed: {}", stderr);
|
|
}
|
|
}
|
|
Err(e) => {
|
|
tracing::error!("Failed to run PowerShell: {}", e);
|
|
}
|
|
}
|
|
|
|
// Skip msg.exe as it creates alert boxes
|
|
// Method 2 removed
|
|
|
|
// Method 3: Try wsl-notify-send if available
|
|
let notify_result = Command::new("wsl-notify-send")
|
|
.arg("--appId")
|
|
.arg("HikariDesktop")
|
|
.arg("--category")
|
|
.arg(&title)
|
|
.arg(&body)
|
|
.output();
|
|
|
|
if let Ok(result) = notify_result {
|
|
if result.status.success() {
|
|
tracing::info!("Notification sent via wsl-notify-send");
|
|
return Ok(());
|
|
}
|
|
}
|
|
|
|
// If all methods fail, return an error
|
|
Err("All WSL notification methods failed".to_string())
|
|
}
|