feat: F019 AI monitoring layer — output transparency & governance workspace
Full 2-panel workspace at /ops/ai-monitoring: metrics strip (total, failed, pending, approval rate, top prompt version, active model), filterable output table by type/status/error, and detail panel with output preview, prompt versioning, error details, and role-aware review actions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
|
||||
import { aiMonitoringService } from '../services/aiMonitoringService'
|
||||
import type { AIMonitoringFilters } from '../provider/IAIMonitoringProvider'
|
||||
import type { ReviewStatus } from '../domain/enums'
|
||||
|
||||
const QK = 'aiOutputs'
|
||||
const STALE = 30_000
|
||||
|
||||
export function useAIOutputs(filters?: AIMonitoringFilters) {
|
||||
return useQuery({
|
||||
queryKey: [QK, filters ?? {}],
|
||||
queryFn: () => aiMonitoringService.getOutputs(filters),
|
||||
staleTime: STALE,
|
||||
select: (res) => res.data ?? [],
|
||||
})
|
||||
}
|
||||
|
||||
export function useAIOutput(id: string | null) {
|
||||
return useQuery({
|
||||
queryKey: [QK, 'detail', id],
|
||||
queryFn: () => aiMonitoringService.getOutput(id!),
|
||||
staleTime: STALE,
|
||||
enabled: !!id,
|
||||
select: (res) => res.data ?? null,
|
||||
})
|
||||
}
|
||||
|
||||
export function useUpdateAIOutputReviewStatus() {
|
||||
const qc = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: ({ id, status }: { id: string; status: ReviewStatus }) =>
|
||||
aiMonitoringService.updateReviewStatus(id, status),
|
||||
onSuccess: () => {
|
||||
qc.invalidateQueries({ queryKey: [QK] })
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user