const CAPABILITIES_QUERY_KEYS = { capabilities: ["capabilities"] as const, } export default function () { const { $coreAPIClient } = useNuxtApp() const fetchCapabilities = useQuery({ key: CAPABILITIES_QUERY_KEYS.capabilities, query: async () => { return await $coreAPIClient(`/api/capabilities`, { method: "GET", }) }, refetchOnMount: false, refetchOnWindowFocus: false, refetchOnReconnect: false, staleTime: Infinity, }) function enabled(pick: (capabilities: Capabilities) => boolean) { return computed(() => { const capabilities = fetchCapabilities.data.value return capabilities ? pick(capabilities) : true }) } const isGithubEnabled = enabled((c) => c.github) const isSlackEnabled = enabled((c) => c.slack) // github and slack are the only connectable apps, so both being off // leaves nothing for the apps settings section to show const isAnyAppEnabled = enabled((c) => c.github || c.slack) const isChangeDetectionEnabled = enabled((c) => c.changeDetection) const isMcpEnabled = enabled((c) => c.mcp) const assistantStatus = computed( () => fetchCapabilities.data.value?.aiAssistant.status ?? null, ) const assistantModel = computed( () => fetchCapabilities.data.value?.aiAssistant.model ?? "", ) const isAssistantEnabled = enabled( (c) => c.aiAssistant.status === AssistantStatus.Active || c.aiAssistant.status === AssistantStatus.ActiveButWeak, ) return { fetchCapabilities, isGithubEnabled, isSlackEnabled, isAnyAppEnabled, isChangeDetectionEnabled, isMcpEnabled, isAssistantEnabled, assistantStatus, assistantModel, } }