diff --git a/frontend/src/components/analytics/CoverageHeatmap.tsx b/frontend/src/components/analytics/CoverageHeatmap.tsx index a66560d1..5b99d1fb 100644 --- a/frontend/src/components/analytics/CoverageHeatmap.tsx +++ b/frontend/src/components/analytics/CoverageHeatmap.tsx @@ -85,6 +85,10 @@ export default function CoverageHeatmap({ data }: CoverageHeatmapProps) { Guided % + + Avg Resolution + @@ -138,13 +142,32 @@ export default function CoverageHeatmap({ data }: CoverageHeatmapProps) { {(row.guided_rate * 100).toFixed(1)}% + + {row.avg_resolution_minutes == null ? ( + + ) : ( + 20 min)'}`} + > + {row.avg_resolution_minutes.toFixed(1)} min + + )} + ))} {data.unmapped_session_count > 0 && ( - + {data.unmapped_session_count} sessions had no domain classification diff --git a/frontend/src/components/analytics/FlowQualityTable.tsx b/frontend/src/components/analytics/FlowQualityTable.tsx index 9ea24c32..ae5b9d61 100644 --- a/frontend/src/components/analytics/FlowQualityTable.tsx +++ b/frontend/src/components/analytics/FlowQualityTable.tsx @@ -12,6 +12,12 @@ interface FlowQualityTableProps { type SortColumn = 'name' | 'usage_count' | 'success_rate' | 'last_matched_at' | 'avg_confidence' | 'quality_score' type SortDir = 'asc' | 'desc' +const TYPE_LABELS: Record = { + troubleshooting: { label: 'Troubleshooting', color: 'text-primary' }, + procedural: { label: 'Project', color: 'text-amber-400' }, + maintenance: { label: 'Maintenance', color: 'text-blue-400' }, +} + function formatRelativeTime(dateStr: string | null): string { if (!dateStr) return 'Never' const diff = Date.now() - new Date(dateStr).getTime() @@ -215,6 +221,9 @@ function FlowRow({ > {flow.name} + + {TYPE_LABELS[flow.tree_type]?.label || flow.tree_type} + {needsAttention && ( Needs attention diff --git a/frontend/src/pages/FlowPilotAnalyticsPage.tsx b/frontend/src/pages/FlowPilotAnalyticsPage.tsx index 3ac65901..f1bfe2af 100644 --- a/frontend/src/pages/FlowPilotAnalyticsPage.tsx +++ b/frontend/src/pages/FlowPilotAnalyticsPage.tsx @@ -179,7 +179,7 @@ export default function FlowPilotAnalyticsPage() {