import type { ChannelAccountCatalogGroup, ChannelConnectionStatus } from '@src/lib/channel-types'; import { buildChannelStatusSummary, type ChannelStatusSummary } from '@electron/utils/channel-status'; export interface GatewayHealthSnapshot { ok: boolean; status: 'connected' | 'disconnected' | 'reconnecting'; initialized: boolean; mode: 'in-process' | 'openclaw'; port?: number | null; pid?: number | null; lastError?: string; } export interface GatewayDiagnosticsSummary { status: ChannelConnectionStatus; gateway: GatewayHealthSnapshot; channels: ChannelStatusSummary; } function normalizeGatewayStatus(status: GatewayHealthSnapshot['status']): ChannelConnectionStatus { if (status === 'reconnecting') return 'connecting'; return status; } export function buildGatewayDiagnosticsSummary( health: GatewayHealthSnapshot, channelGroups: readonly ChannelAccountCatalogGroup[], ): GatewayDiagnosticsSummary { const channels = buildChannelStatusSummary(channelGroups); const gatewayStatus = normalizeGatewayStatus(health.status); return { status: health.ok ? (channels.status === 'connected' ? 'connected' : channels.status === 'disconnected' ? 'degraded' : channels.status) : gatewayStatus, gateway: health, channels, }; }