WIP push-to-talk Letta chat frontend
1use crate::state::AppState;
2use tauri::{Manager, WebviewUrl, WebviewWindowBuilder};
3use tauri_plugin_positioner::{Position, WindowExt};
4use tauri_plugin_store::StoreExt;
5use tauri_plugin_window_state::{StateFlags, WindowExt as StateWindowExt};
6
7mod cartesia;
8mod conversation;
9mod devices;
10mod letta;
11mod secrets;
12mod state;
13
14#[cfg_attr(mobile, tauri::mobile_entry_point)]
15pub fn run() {
16 let mut builder = tauri::Builder::default()
17 .plugin(tauri_plugin_http::init())
18 .plugin(tauri_plugin_store::Builder::new().build())
19 .plugin(tauri_plugin_opener::init())
20 .plugin(tauri_plugin_window_state::Builder::new().build())
21 .plugin(tauri_plugin_positioner::init());
22
23 #[cfg(desktop)]
24 {
25 builder = builder.plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| {
26 use tauri::Manager;
27
28 let _ = app
29 .get_webview_window("main")
30 .expect("no main window")
31 .set_focus();
32 }));
33 }
34
35 builder
36 .setup(|app| {
37 let store = app.store("config.json")?;
38 let app_state = AppState::new(store).expect("failed to initialize application state");
39
40 app.manage(app_state);
41
42 let mut win_builder =
43 WebviewWindowBuilder::new(app, "main", WebviewUrl::default()).title("miwiwi");
44
45 #[cfg(desktop)]
46 {
47 win_builder = win_builder
48 .inner_size(600.0, 800.0)
49 .decorations(false)
50 .always_on_top(true)
51 .visible(false)
52 .transparent(true)
53 .shadow(false)
54 .maximizable(false);
55 }
56
57 let window = win_builder.build().expect("failed to build window");
58
59 window
60 .move_window(Position::BottomRight)
61 .expect("could not move window");
62
63 window
64 .restore_state(StateFlags::all())
65 .expect("could not restore window state");
66
67 Ok(())
68 })
69 .invoke_handler(tauri::generate_handler![
70 cartesia::commands::start_stt,
71 cartesia::commands::stop_stt,
72 letta::commands::list_agents,
73 letta::commands::get_letta_base_url,
74 letta::commands::set_letta_base_url,
75 letta::commands::get_letta_agent_id,
76 letta::commands::set_letta_agent_id,
77 letta::commands::start_llm_completion,
78 secrets::commands::has_secret,
79 secrets::commands::set_secret,
80 secrets::commands::delete_secret,
81 ])
82 .run(tauri::generate_context!())
83 .expect("error while running tauri application");
84}