P1f: self-contained Tauri host; complete P1

This commit is contained in:
Emil
2026-11-01 01:57:30 +03:00
parent 9d84c2f162
commit 9add2610d7
13 changed files with 1610 additions and 603 deletions
+903 -9
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -12,5 +12,8 @@ tauri-build = { version = "2", features = [] }
tauri = { version = "2", features = [] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
zhila-daemon = { path = "../../crates/zhila-daemon" }
tokio = { version = "1", features = ["rt"] }
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
[workspace]
+38
View File
@@ -1,6 +1,44 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use zhila_daemon::{HostConfig, run};
fn main() {
let _ = tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| "zhila_daemon=info,zhila_engine=info".into()),
)
.with_target(false)
.try_init();
// The native app is self-contained: the engine, session, project store and
// wire live in this process. The webview talks to the same loopback wire as
// the browser-first surface.
std::thread::spawn(|| {
let runtime = match tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
{
Ok(runtime) => runtime,
Err(error) => {
eprintln!("zhila host runtime: {error}");
return;
}
};
runtime.block_on(async {
if let Err(error) = run(HostConfig {
port: 4317,
token: "dev".into(),
no_audio: false,
project: None,
})
.await
{
eprintln!("zhila host: {error:#}");
}
});
});
tauri::Builder::default()
.run(tauri::generate_context!())
.expect("ZHILA could not open its window");