59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
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,
|
|
};
|
|
}
|