"use client"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import * as api from "./api"; // Sessions export function useSessions(limit = 20, source?: string) { return useQuery({ queryKey: ["sessions", limit, source], queryFn: () => api.fetchSessions(limit, 0, source), }); } export function useSession(id: string) { return useQuery({ queryKey: ["session", id], queryFn: () => api.fetchSession(id), enabled: !!id, }); } export function useMessages(sessionId: string, limit = 200, offset?: number) { return useQuery({ queryKey: ["messages", sessionId, limit, offset], queryFn: () => api.fetchMessages(sessionId, limit, offset), enabled: !!sessionId, }); } export function useSessionSearch(query: string) { return useQuery({ queryKey: ["search", query], queryFn: () => api.searchSessions(query), enabled: query.length >= 2, }); } // Memory export function useMemory() { return useQuery({ queryKey: ["memory"], queryFn: api.fetchMemory, }); } export function useAddMemory() { const qc = useQueryClient(); return useMutation({ mutationFn: ({ target, content }: { target: string; content: string }) => api.addMemory(target, content), onSuccess: () => qc.invalidateQueries({ queryKey: ["memory"] }), }); } export function usePatchMemory() { const qc = useQueryClient(); return useMutation({ mutationFn: ({ target, old_text, content }: { target: string; old_text: string; content: string }) => api.patchMemory(target, old_text, content), onSuccess: () => qc.invalidateQueries({ queryKey: ["memory"] }), }); } export function useDeleteMemory() { const qc = useQueryClient(); return useMutation({ mutationFn: ({ target, old_text }: { target: string; old_text: string }) => api.deleteMemory(target, old_text), onSuccess: () => qc.invalidateQueries({ queryKey: ["memory"] }), }); } // Skills export function useSkills(category?: string) { return useQuery({ queryKey: ["skills", category], queryFn: () => api.fetchSkills(category), }); } export function useSkill(name: string) { return useQuery({ queryKey: ["skill", name], queryFn: () => api.fetchSkill(name), enabled: !!name, }); } // Config export function useConfig() { return useQuery({ queryKey: ["config"], queryFn: api.fetchConfig, }); } // Health export function useHealth() { return useQuery({ queryKey: ["health"], queryFn: api.fetchHealth, refetchInterval: 30_000, }); }