diff --git a/web/src/app/home/components/home-sidebar/HomeSidebar.tsx b/web/src/app/home/components/home-sidebar/HomeSidebar.tsx index 263d72057..5657bf981 100644 --- a/web/src/app/home/components/home-sidebar/HomeSidebar.tsx +++ b/web/src/app/home/components/home-sidebar/HomeSidebar.tsx @@ -34,6 +34,7 @@ import { RefreshCcw, Bot, Workflow, + Group, } from 'lucide-react'; import { useTheme } from '@/components/providers/theme-provider'; @@ -509,6 +510,7 @@ function NavItems({ const isSkill = categoryId === 'skills'; const isBot = categoryId === 'bots'; const isMCP = categoryId === 'mcp'; + const isAgents = categoryId === 'pipelines'; const resolveItemRoute = (item: SidebarEntityItem): string => { if (item.extensionType === 'mcp') { @@ -591,6 +593,18 @@ function NavItems({ !inPopover && sidebarData.extensionsGroupByType; + const showAgentGroupHeaders = + isAgents && !inPopover && sidebarData.agentsGroupByKind; + + const agentGroupOrder: Array<'agent' | 'pipeline'> = [ + 'agent', + 'pipeline', + ]; + const agentGroupLabelKey: Record<'agent' | 'pipeline', string> = { + agent: 'agents.kindBadgeAgent', + pipeline: 'agents.kindBadgePipeline', + }; + const groupOrder: Array<'plugin' | 'mcp' | 'skill'> = [ 'plugin', 'mcp', @@ -792,7 +806,25 @@ function NavItems({ ); }) - : visibleItems.map((item) => renderItem(item))} + : showAgentGroupHeaders + ? agentGroupOrder.map((kind) => { + const groupItems = visibleItems.filter( + (it) => (it.kind ?? 'agent') === kind, + ); + if (groupItems.length === 0) return null; + return ( +
+
+ {t(agentGroupLabelKey[kind])} +
+ {groupItems.map((item) => renderItem(item))} +
+ ); + }) + : visibleItems.map((item) => renderItem(item))} {/* Show more / less toggle when items exceed limit */} {sortedItems.length > maxItems && !inPopover && ( @@ -1030,6 +1062,26 @@ function NavItems({ {config.name}
+ {isAgents && ( + + )} {isExtensionsCategory && (