// SPDX-License-Identifier: AGPL-3.0-or-later use crate::direct_local_broker::DirectLocalBrokerState; use crate::direct_local_session::{active_session_count_at, direct_session_root}; use crate::pncc_receipt_projection::{pncc_projection_root, projection_event_count_at}; use crate::pncc_repository_binding::{mounted_repository_count_at, pncc_repository_mount_root}; use crate::release_trust::release_trust_state; use serde::Serialize; use tauri::{AppHandle, State}; #[derive(Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct HoloLakeHomeStatus { pub schema: &'static str, pub direct_local_broker_state: &'static str, pub direct_connection_count: usize, pub resumable_session_count: usize, pub code_repository_mount_count: usize, pub pncc_receipt_count: usize, pub update_state: &'static str, pub release_recovery_state: String, pub automatic_upstream_updates: bool, pub mcp_role: &'static str, pub terminal_link_protocol: &'static str, pub terminal_link_transport: &'static str, pub environment_frame_policy: &'static str, } pub fn get_hololake_home_status( app: AppHandle, broker: State<'_, DirectLocalBrokerState>, ) -> Result { let broker_ready = broker.ensure_started(&app)?; if !broker_ready { return Ok(HoloLakeHomeStatus { schema: "hololake.home-status/v1", direct_local_broker_state: "WAITING_FOR_LOGIN", direct_connection_count: 0, resumable_session_count: 0, code_repository_mount_count: 0, pncc_receipt_count: 0, update_state: release_trust_state()?, release_recovery_state: crate::release_update::release_recovery_state(&app)?, automatic_upstream_updates: false, mcp_role: "DISCOVERY_RECOVERY_COMPATIBILITY_ONLY", terminal_link_protocol: "HOLOLAKE_TERMINAL_LINK/3", terminal_link_transport: if cfg!(windows) { "WINDOWS_USER_PRIVATE_NAMED_PIPE" } else { "MACOS_LINUX_USER_PRIVATE_UNIX_SOCKET" }, environment_frame_policy: "REQUIRED_AFTER_CONNECT_RESUME_AND_BEFORE_MUTATION", }); } let session_root = direct_session_root(&app)?; let mount_root = pncc_repository_mount_root(&app)?; let projection_root = pncc_projection_root(&app)?; Ok(HoloLakeHomeStatus { schema: "hololake.home-status/v1", direct_local_broker_state: "READY", direct_connection_count: broker.active_connection_count(), resumable_session_count: active_session_count_at(&session_root)?, code_repository_mount_count: mounted_repository_count_at(&mount_root)?, pncc_receipt_count: projection_event_count_at(&projection_root)?, update_state: release_trust_state()?, release_recovery_state: crate::release_update::release_recovery_state(&app)?, automatic_upstream_updates: false, mcp_role: "DISCOVERY_RECOVERY_COMPATIBILITY_ONLY", terminal_link_protocol: "HOLOLAKE_TERMINAL_LINK/3", terminal_link_transport: if cfg!(windows) { "WINDOWS_USER_PRIVATE_NAMED_PIPE" } else { "MACOS_LINUX_USER_PRIVATE_UNIX_SOCKET" }, environment_frame_policy: "REQUIRED_AFTER_CONNECT_RESUME_AND_BEFORE_MUTATION", }) }