diff --git a/web/src/app/home/components/home-sidebar/HomeSidebar.tsx b/web/src/app/home/components/home-sidebar/HomeSidebar.tsx index b6be327c2..de36855cb 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'; @@ -560,6 +561,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') { @@ -642,6 +644,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', @@ -843,7 +857,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 && ( @@ -1081,6 +1113,26 @@ function NavItems({ {config.name}
+ {isAgents && ( + + )} {isExtensionsCategory && (