2026-08-16 18:25:57 +08:00
|
|
|
mod authenticated_storage;
|
2026-08-17 14:01:01 +08:00
|
|
|
mod circular_lake_membrane;
|
2026-08-15 15:02:35 +08:00
|
|
|
mod code_channel;
|
2026-08-16 00:02:05 +08:00
|
|
|
mod code_repo_login;
|
2026-08-13 12:21:04 +08:00
|
|
|
mod direct_local_broker;
|
|
|
|
|
mod direct_local_session;
|
2026-08-13 12:45:35 +08:00
|
|
|
mod dynamic_capability_routing;
|
2026-08-17 00:16:24 +08:00
|
|
|
mod enterprise_work_channel;
|
2026-08-16 15:10:31 +08:00
|
|
|
mod glp_envelope;
|
2026-08-17 17:56:47 +08:00
|
|
|
mod gls_bootstrap_compiler;
|
|
|
|
|
mod gls_protocol_kernel;
|
2026-08-17 16:22:56 +08:00
|
|
|
mod gls_protocol_runtime;
|
2026-08-13 13:52:59 +08:00
|
|
|
mod home_status;
|
2026-08-15 15:02:35 +08:00
|
|
|
mod knowledge_base;
|
2026-08-13 00:35:40 +08:00
|
|
|
mod local_development_bridge;
|
2026-08-18 23:04:18 +08:00
|
|
|
mod metacognitive_zero_layer;
|
2026-08-19 01:28:22 +08:00
|
|
|
mod module_package_runtime;
|
2026-08-19 00:45:35 +08:00
|
|
|
mod number_coordinate_tree;
|
2026-08-18 23:04:18 +08:00
|
|
|
mod numbered_ipc;
|
|
|
|
|
mod numbered_ipc_dispatch;
|
2026-08-19 00:06:49 +08:00
|
|
|
mod numbered_language_input;
|
2026-08-19 00:45:35 +08:00
|
|
|
mod persona_carrier_license;
|
2026-08-17 13:21:02 +08:00
|
|
|
mod persona_time_authority;
|
2026-08-15 15:02:35 +08:00
|
|
|
mod personal_channel;
|
2026-08-13 13:17:30 +08:00
|
|
|
mod pncc_receipt_projection;
|
|
|
|
|
mod pncc_remote_git;
|
|
|
|
|
mod pncc_repository_binding;
|
2026-08-16 02:52:55 +08:00
|
|
|
mod pncc_server_projection;
|
2026-08-12 10:29:00 +08:00
|
|
|
mod release_trust;
|
2026-08-13 14:11:48 +08:00
|
|
|
mod release_update;
|
2026-08-16 15:10:31 +08:00
|
|
|
mod user_pncc_channel;
|
2026-08-17 16:22:56 +08:00
|
|
|
mod zero_core_numbering;
|
2026-08-16 00:02:05 +08:00
|
|
|
mod zero_point;
|
2026-08-12 10:29:00 +08:00
|
|
|
|
2026-08-13 12:21:04 +08:00
|
|
|
use tauri::Manager;
|
|
|
|
|
|
|
|
|
|
pub fn run_connector() -> Result<(), String> {
|
|
|
|
|
direct_local_broker::run_connector()
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-12 10:29:00 +08:00
|
|
|
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
|
|
|
|
pub fn run() {
|
|
|
|
|
tauri::Builder::default()
|
2026-08-13 14:01:43 +08:00
|
|
|
.plugin(tauri_plugin_dialog::init())
|
2026-08-18 23:04:18 +08:00
|
|
|
.manage(numbered_ipc::NumberedIpcState::default())
|
|
|
|
|
.invoke_handler(tauri::generate_handler![numbered_ipc::numbered_ipc,])
|
2026-08-12 10:29:00 +08:00
|
|
|
.setup(|app| {
|
2026-08-17 17:56:47 +08:00
|
|
|
// GLS 是 HoloLake 产品内核,不是开发机旁路服务。合同、依赖闭包、
|
|
|
|
|
// 自举编译器或回执账本任一不可用时,产品启动失败关闭。
|
|
|
|
|
gls_protocol_kernel::start_on_application_open(app.handle())?;
|
2026-08-18 23:04:18 +08:00
|
|
|
metacognitive_zero_layer::start_on_application_open()?;
|
2026-08-19 00:45:35 +08:00
|
|
|
persona_carrier_license::start_on_application_open()?;
|
2026-08-19 01:28:22 +08:00
|
|
|
module_package_runtime::start_on_application_open(app.handle())?;
|
2026-08-19 00:45:35 +08:00
|
|
|
number_coordinate_tree::start_on_application_open()?;
|
2026-08-19 00:06:49 +08:00
|
|
|
numbered_language_input::validate_contract()?;
|
2026-08-18 23:04:18 +08:00
|
|
|
numbered_ipc::start_on_application_open(app.handle())?;
|
2026-08-17 14:06:45 +08:00
|
|
|
// 软件打开即先启动时间主控并发起联网校时;失败只降级,不阻塞人进入 HoloLake。
|
|
|
|
|
persona_time_authority::start_on_application_open();
|
2026-08-16 12:54:47 +08:00
|
|
|
// 初始化零点原核客户端运行时;该系统层不等同人格主体或模型载体。
|
2026-08-16 00:02:05 +08:00
|
|
|
let zero_point_state = zero_point::ZeroPointState::default();
|
|
|
|
|
if let Err(error) = zero_point::boot_zero_point(app.handle(), &zero_point_state) {
|
|
|
|
|
eprintln!("HoloLake zero-point core requires maintenance: {error}");
|
|
|
|
|
}
|
|
|
|
|
app.manage(zero_point_state);
|
2026-08-16 12:54:47 +08:00
|
|
|
let zero_point_handle = app.handle().clone();
|
|
|
|
|
tauri::async_runtime::spawn(async move {
|
|
|
|
|
let state = zero_point_handle.state::<zero_point::ZeroPointState>();
|
|
|
|
|
if let Err(error) = zero_point::sync_protocol_runtime(&state).await {
|
|
|
|
|
eprintln!("HoloLake zero-point protocol sync was not completed: {error}");
|
|
|
|
|
}
|
|
|
|
|
});
|
2026-08-16 22:11:08 +08:00
|
|
|
let broker = direct_local_broker::DirectLocalBrokerState::default();
|
|
|
|
|
// 公共五域首页必须能在未登录时启动;私人 broker 只在已有账号会话时启动。
|
|
|
|
|
broker.ensure_started(app.handle())?;
|
2026-08-13 12:21:04 +08:00
|
|
|
app.manage(broker);
|
2026-08-12 10:29:00 +08:00
|
|
|
release_trust::install_updater_if_provisioned(app.handle())?;
|
2026-08-13 14:45:17 +08:00
|
|
|
if let Err(error) = release_update::observe_release_startup(app.handle()) {
|
|
|
|
|
eprintln!("HoloLake update recovery requires maintenance: {error}");
|
|
|
|
|
}
|
2026-08-16 12:54:47 +08:00
|
|
|
// 根据主显示器尺寸调整窗口,并将位置限制在可见区域内。
|
2026-08-16 00:02:05 +08:00
|
|
|
if let Some(window) = app.get_webview_window("main") {
|
|
|
|
|
let monitor = window
|
|
|
|
|
.primary_monitor()
|
|
|
|
|
.ok()
|
|
|
|
|
.flatten()
|
|
|
|
|
.or_else(|| window.current_monitor().ok().flatten());
|
|
|
|
|
if let Some(monitor) = monitor {
|
|
|
|
|
let physical = monitor.size();
|
|
|
|
|
let scale = monitor.scale_factor().max(1.0);
|
|
|
|
|
let width = ((physical.width as f64 / scale) * 0.82).clamp(960.0, 1600.0);
|
|
|
|
|
let height = ((physical.height as f64 / scale) * 0.82).clamp(640.0, 1000.0);
|
|
|
|
|
let _ = window.set_size(tauri::LogicalSize::new(width, height));
|
2026-08-16 12:54:47 +08:00
|
|
|
// 使用主显示器坐标计算居中位置,避免多显示器环境下窗口移出可见区域。
|
2026-08-16 00:02:05 +08:00
|
|
|
let mon_pos = monitor.position();
|
2026-08-16 15:10:31 +08:00
|
|
|
let x =
|
|
|
|
|
mon_pos.x as f64 / scale + ((physical.width as f64 / scale) - width) / 2.0;
|
|
|
|
|
let y = mon_pos.y as f64 / scale
|
|
|
|
|
+ ((physical.height as f64 / scale) - height) / 2.0;
|
|
|
|
|
let _ =
|
|
|
|
|
window.set_position(tauri::LogicalPosition::new(x.max(0.0), y.max(0.0)));
|
2026-08-16 00:02:05 +08:00
|
|
|
}
|
|
|
|
|
}
|
2026-08-12 10:29:00 +08:00
|
|
|
Ok(())
|
|
|
|
|
})
|
|
|
|
|
.run(tauri::generate_context!())
|
|
|
|
|
.expect("failed to run HoloLake native desktop");
|
|
|
|
|
}
|