105 lines
2.5 KiB
TypeScript
105 lines
2.5 KiB
TypeScript
"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,
|
|
});
|
|
}
|