Files
tolaria/src/hooks/useAiAgentsStatus.ts
2026-04-13 19:37:59 +02:00

40 lines
1.1 KiB
TypeScript

import { useEffect, useState } from 'react'
import { invoke } from '@tauri-apps/api/core'
import { isTauri, mockInvoke } from '../mock-tauri'
import {
createCheckingAiAgentsStatus,
createMissingAiAgentsStatus,
normalizeAiAgentsStatus,
type AiAgentsStatus,
} from '../lib/aiAgents'
type RawAiAgentsStatus = Partial<Record<'claude_code' | 'codex', { installed?: boolean | null; version?: string | null }>>
function tauriCall<T>(command: string): Promise<T> {
return isTauri() ? invoke<T>(command) : mockInvoke<T>(command)
}
export function useAiAgentsStatus(): AiAgentsStatus {
const [statuses, setStatuses] = useState<AiAgentsStatus>(createCheckingAiAgentsStatus())
useEffect(() => {
let cancelled = false
tauriCall<RawAiAgentsStatus>('get_ai_agents_status')
.then((result) => {
if (!cancelled) {
setStatuses(normalizeAiAgentsStatus(result))
}
})
.catch(() => {
if (!cancelled) {
setStatuses(createMissingAiAgentsStatus())
}
})
return () => { cancelled = true }
}, [])
return statuses
}