import { useMemo } from 'react'; import { mergeCodexCliStatusWithSnapshot, useCodexAccountSnapshot, } from '@features/codex-account/renderer'; import { useStore } from '@renderer/store'; import { createLoadingMultimodelCliStatus } from '@renderer/store/slices/cliInstallerSlice'; import type { CliInstallationStatus, CliProviderId, CliProviderStatus } from '@shared/types'; export interface EffectiveCliProviderStatusSnapshot { cliStatus: CliInstallationStatus | null; providerStatus: CliProviderStatus | null; loading: boolean; } export function useEffectiveCliProviderStatus( providerId: CliProviderId | undefined ): EffectiveCliProviderStatusSnapshot { const multimodelEnabled = useStore((s) => s.appConfig?.general?.multimodelEnabled ?? true); const cliStatus = useStore((s) => s.cliStatus); const cliStatusLoading = useStore((s) => s.cliStatusLoading); const loadingCliStatus = useMemo( () => !cliStatus && cliStatusLoading && multimodelEnabled ? createLoadingMultimodelCliStatus() : cliStatus, [cliStatus, cliStatusLoading, multimodelEnabled] ); const codexAccount = useCodexAccountSnapshot({ enabled: providerId === 'codex' && multimodelEnabled && loadingCliStatus?.flavor === 'agent_teams_orchestrator' && Boolean(loadingCliStatus?.providers.some((provider) => provider.providerId === 'codex')), }); const effectiveCliStatus = useMemo( () => mergeCodexCliStatusWithSnapshot(loadingCliStatus, codexAccount.snapshot), [codexAccount.snapshot, loadingCliStatus] ); const providerStatus = useMemo( () => providerId ? (effectiveCliStatus?.providers.find((provider) => provider.providerId === providerId) ?? null) : null, [effectiveCliStatus?.providers, providerId] ); return { cliStatus: effectiveCliStatus, providerStatus, loading: cliStatusLoading && effectiveCliStatus === null, }; }