update on the agents and registry side
This commit is contained in:
@@ -67,6 +67,14 @@ export const KEYS = {
|
||||
carrierPricing: (page, limit) => ['doormile', 'carrier-pricing', page, limit],
|
||||
|
||||
appLocations: ['doormile', 'app-locations'],
|
||||
|
||||
// AI agent registry. One prefix, so a write invalidates agents, skills,
|
||||
// tools and the audit together — a skill toggle changes an agent's counts.
|
||||
aiRegistry: ['doormile', 'ai'],
|
||||
aiAgents: ['doormile', 'ai', 'agents'],
|
||||
aiSkills: ['doormile', 'ai', 'skills'],
|
||||
aiTools: ['doormile', 'ai', 'tools'],
|
||||
aiAudit: ['doormile', 'ai', 'audit'],
|
||||
};
|
||||
|
||||
/* ── Shared helpers ───────────────────────────────────────────────────────── */
|
||||
@@ -179,6 +187,23 @@ export const useTenant = (id, options) =>
|
||||
export const useCreateTenant = () =>
|
||||
useDoormileMutation({ mutationFn: api.createAdminTenant, invalidates: [KEYS.tenants], successMessage: 'Client created' });
|
||||
|
||||
export const useOnboardedClients = (options) =>
|
||||
useQuery({ queryKey: [...KEYS.tenants, 'onboarded'], queryFn: api.getOnboardedClients, staleTime: 30_000, ...options });
|
||||
|
||||
export const useOnboardingCities = (options) =>
|
||||
useQuery({ queryKey: [...KEYS.tenants, 'onboarding-cities'], queryFn: api.getOnboardingCities, staleTime: 300_000, ...options });
|
||||
|
||||
// No toasts: the page shows its own success panel and inline errors.
|
||||
export const useOnboardClient = () => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: api.onboardClient,
|
||||
onSuccess: (result) => {
|
||||
if (result?.success !== false) queryClient.invalidateQueries({ queryKey: KEYS.tenants });
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
export const useUpdateTenant = () =>
|
||||
useDoormileMutation({
|
||||
mutationFn: ({ id, data }) => api.updateAdminTenant(id, data),
|
||||
@@ -792,3 +817,57 @@ export const useOrderPercentages = (startdate, enddate, options) =>
|
||||
staleTime: 30_000,
|
||||
...options,
|
||||
});
|
||||
|
||||
/* ── AI agent registry (Settings → Skills & Tools) ────────────────────────── */
|
||||
|
||||
export const useAiAgents = (options) =>
|
||||
useQuery({ queryKey: KEYS.aiAgents, queryFn: api.getAiAgents, staleTime: 30_000, ...options });
|
||||
|
||||
export const useAiSkills = (options) =>
|
||||
useQuery({ queryKey: KEYS.aiSkills, queryFn: api.getAiSkills, staleTime: 30_000, ...options });
|
||||
|
||||
export const useAiTools = (options) =>
|
||||
useQuery({ queryKey: KEYS.aiTools, queryFn: api.getAiTools, staleTime: 5 * 60_000, ...options });
|
||||
|
||||
export const useUpdateAiSkill = () =>
|
||||
useDoormileMutation({
|
||||
mutationFn: ({ id, patch }) => api.updateAiSkill(id, patch),
|
||||
invalidates: [KEYS.aiRegistry],
|
||||
successMessage: 'Skill updated',
|
||||
});
|
||||
|
||||
export const useCreateAiSkill = () =>
|
||||
useDoormileMutation({
|
||||
mutationFn: (skill) => api.createAiSkill(skill),
|
||||
invalidates: [KEYS.aiRegistry],
|
||||
successMessage: 'Skill registered',
|
||||
});
|
||||
|
||||
export const useUpdateAiAgent = () =>
|
||||
useDoormileMutation({
|
||||
mutationFn: ({ id, patch }) => api.updateAiAgent(id, patch),
|
||||
invalidates: [KEYS.aiRegistry],
|
||||
successMessage: 'Agent updated',
|
||||
});
|
||||
|
||||
// Read-only, and it changes as agents work: refetched every minute while open.
|
||||
export const useAiInsights = (days = 7, options) =>
|
||||
useQuery({
|
||||
queryKey: [...KEYS.aiRegistry, 'insights', days],
|
||||
queryFn: () => api.getAiInsights(days),
|
||||
staleTime: 30_000,
|
||||
refetchInterval: 60_000,
|
||||
...options,
|
||||
});
|
||||
|
||||
// A playground run. No toasts and no invalidation: it changes nothing, and the
|
||||
// Test tab shows its own result or error inline.
|
||||
export const useRunAiPlayground = () => useMutation({ mutationFn: api.runAiPlayground });
|
||||
|
||||
export const useAiDecisions = (params = {}, options) =>
|
||||
useQuery({
|
||||
queryKey: [...KEYS.aiRegistry, 'decisions', params],
|
||||
queryFn: () => api.getAiDecisions(params),
|
||||
staleTime: 30_000,
|
||||
...options,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user