use tauri::{AppHandle, State}; use tauri_plugin_store::StoreExt; use crate::config::{ClaudeStartOptions, HikariConfig}; use crate::wsl_bridge::SharedBridge; const CONFIG_STORE_KEY: &str = "config"; #[tauri::command] pub async fn start_claude( app: AppHandle, bridge: State<'_, SharedBridge>, options: ClaudeStartOptions, ) -> Result<(), String> { let mut bridge = bridge.lock(); bridge.start(app, options) } #[tauri::command] pub async fn stop_claude(app: AppHandle, bridge: State<'_, SharedBridge>) -> Result<(), String> { let mut bridge = bridge.lock(); bridge.stop(&app); Ok(()) } #[tauri::command] pub async fn send_prompt(bridge: State<'_, SharedBridge>, message: String) -> Result<(), String> { let mut bridge = bridge.lock(); bridge.send_message(&message) } #[tauri::command] pub async fn is_claude_running(bridge: State<'_, SharedBridge>) -> Result { let bridge = bridge.lock(); Ok(bridge.is_running()) } #[tauri::command] pub async fn get_working_directory(bridge: State<'_, SharedBridge>) -> Result { let bridge = bridge.lock(); Ok(bridge.get_working_directory().to_string()) } #[tauri::command] pub async fn select_wsl_directory() -> Result { Ok("/home".to_string()) } #[tauri::command] pub async fn get_config(app: AppHandle) -> Result { let store = app .store("hikari-config.json") .map_err(|e| e.to_string())?; match store.get(CONFIG_STORE_KEY) { Some(value) => { serde_json::from_value(value.clone()).map_err(|e| e.to_string()) } None => Ok(HikariConfig::default()), } } #[tauri::command] pub async fn save_config(app: AppHandle, config: HikariConfig) -> Result<(), String> { let store = app .store("hikari-config.json") .map_err(|e| e.to_string())?; let value = serde_json::to_value(&config).map_err(|e| e.to_string())?; store.set(CONFIG_STORE_KEY, value); store.save().map_err(|e| e.to_string())?; Ok(()) }