update on the agents and registry side

This commit is contained in:
2026-09-30 12:03:13 +05:30
parent 92e8da2842
commit 53199127ba
73 changed files with 7268 additions and 1134 deletions

View File

@@ -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,
});