@@ -10,6 +10,7 @@ import { AgentTool, Component, ToolConfig } from "@/types/datamodel";
1010import ProviderFilter from "./ProviderFilter" ;
1111import ToolItem from "./ToolItem" ;
1212import { findComponentForAgentTool } from "@/lib/toolUtils" ;
13+ import { getToolDisplayName , getToolDescription , getToolIdentifier } from "@/lib/data" ;
1314
1415// Maximum number of tools that can be selected
1516const MAX_TOOLS_LIMIT = 10 ;
@@ -37,7 +38,6 @@ export const SelectToolsDialog: React.FC<SelectToolsDialogProps> = ({ open, onOp
3738 const [ searchTerm , setSearchTerm ] = useState ( "" ) ;
3839 const [ activeTab , setActiveTab ] = useState ( "all" ) ;
3940 const [ localSelectedComponents , setLocalSelectedComponents ] = useState < Component < ToolConfig > [ ] > ( [ ] ) ;
40- const [ newlyDiscoveredTools , setNewlyDiscoveredTools ] = useState < Component < ToolConfig > [ ] > ( [ ] ) ;
4141 const [ providers , setProviders ] = useState < Set < string > > ( new Set ( ) ) ;
4242 const [ selectedProviders , setSelectedProviders ] = useState < Set < string > > ( new Set ( ) ) ;
4343 const [ showFilters , setShowFilters ] = useState ( false ) ;
@@ -51,7 +51,6 @@ export const SelectToolsDialog: React.FC<SelectToolsDialogProps> = ({ open, onOp
5151 . map ( ( agentTool ) => findComponentForAgentTool ( agentTool , availableTools ) )
5252 . filter ( ( tool ) : tool is Component < ToolConfig > => tool !== undefined ) ;
5353
54- setNewlyDiscoveredTools ( [ ] ) ;
5554 setLocalSelectedComponents ( initialComponents ) ;
5655 setSearchTerm ( "" ) ;
5756
@@ -82,37 +81,29 @@ export const SelectToolsDialog: React.FC<SelectToolsDialogProps> = ({ open, onOp
8281 const searchLower = searchTerm . toLowerCase ( ) ;
8382
8483 return availableTools . filter ( ( tool ) => {
85- // Search matching
86- const matchesSearch = tool . provider . toLowerCase ( ) . includes ( searchLower ) || ( tool . description ?. toLowerCase ( ) . includes ( searchLower ) ?? false ) ;
84+ // Search matching - use getToolDisplayName and getToolDescription
85+ const toolName = getToolDisplayName ( tool ) . toLowerCase ( ) ;
86+ const toolDescription = getToolDescription ( tool ) ?. toLowerCase ( ) ?? "" ;
87+ const matchesSearch = toolName . includes ( searchLower ) || toolDescription . includes ( searchLower ) || tool . provider . toLowerCase ( ) . includes ( searchLower ) ;
8788
8889 // Tab matching
89- const isSelected = localSelectedComponents . some ( ( t ) => t . provider === tool . provider ) ;
90- const isNew = newlyDiscoveredTools . some ( ( t ) => t . provider === tool . provider ) ;
91-
92- const matchesTab = activeTab === "all" || ( activeTab === "selected" && isSelected ) || ( activeTab === "new" && isNew ) ;
90+ const isSelected = localSelectedComponents . some ( ( t ) => getToolIdentifier ( t ) === getToolIdentifier ( tool ) ) ;
91+ const matchesTab = activeTab === "all" || ( activeTab === "selected" && isSelected ) ;
9392
9493 // Provider matching
9594 const matchesProvider = selectedProviders . size === 0 || selectedProviders . has ( tool . provider ) ;
9695
9796 return matchesSearch && matchesTab && matchesProvider ;
9897 } ) ;
99- } , [ availableTools , searchTerm , activeTab , localSelectedComponents , newlyDiscoveredTools , selectedProviders ] ) ;
98+ } , [ availableTools , searchTerm , activeTab , localSelectedComponents , selectedProviders ] ) ;
10099
101100 // Group tools by category
102101 const groupedTools = useMemo ( ( ) => {
103102 const groups : { [ key : string ] : Component < ToolConfig > [ ] } = { } ;
104103
105104 // Sort tools first - new tools at the top within each category
106105 const sortedTools = [ ...filteredTools ] . sort ( ( a , b ) => {
107- const aIsNew = newlyDiscoveredTools . some ( ( t ) => t . provider === a . provider ) ;
108- const bIsNew = newlyDiscoveredTools . some ( ( t ) => t . provider === b . provider ) ;
109-
110- // Primary sort: new tools first
111- if ( aIsNew && ! bIsNew ) return - 1 ;
112- if ( ! aIsNew && bIsNew ) return 1 ;
113-
114- // Secondary sort: alphabetical by name
115- return ( a . provider || "" ) . localeCompare ( b . provider || "" ) ;
106+ return getToolDisplayName ( a ) . localeCompare ( getToolDisplayName ( b ) ) ;
116107 } ) ;
117108
118109 // Group by categories
@@ -125,13 +116,13 @@ export const SelectToolsDialog: React.FC<SelectToolsDialogProps> = ({ open, onOp
125116 } ) ;
126117
127118 return groups ;
128- } , [ filteredTools , newlyDiscoveredTools ] ) ;
119+ } , [ filteredTools ] ) ;
129120
130121 // Check if selection limit is reached
131122 const isLimitReached = localSelectedComponents . length >= MAX_TOOLS_LIMIT ;
132123
133124 // Helper functions for tool state
134- const isToolSelected = ( tool : Component < ToolConfig > ) => localSelectedComponents . some ( ( t ) => t . provider === tool . provider ) ;
125+ const isToolSelected = ( tool : Component < ToolConfig > ) => localSelectedComponents . some ( ( t ) => getToolIdentifier ( t ) === getToolIdentifier ( tool ) ) ;
135126
136127 // Event handlers
137128 const handleToggleTool = ( tool : Component < ToolConfig > ) => {
@@ -142,7 +133,13 @@ export const SelectToolsDialog: React.FC<SelectToolsDialogProps> = ({ open, onOp
142133 return ;
143134 }
144135
145- setLocalSelectedComponents ( ( prev ) => ( isCurrentlySelected ? prev . filter ( ( t ) => t . provider !== tool . provider ) : [ ...prev , tool ] ) ) ;
136+ setLocalSelectedComponents ( ( prev ) => {
137+ if ( isCurrentlySelected ) {
138+ return prev . filter ( ( t ) => getToolIdentifier ( t ) !== getToolIdentifier ( tool ) ) ;
139+ } else {
140+ return [ ...prev , tool ] ;
141+ }
142+ } ) ;
146143 } ;
147144
148145 const handleSave = ( ) => {
@@ -188,22 +185,21 @@ export const SelectToolsDialog: React.FC<SelectToolsDialogProps> = ({ open, onOp
188185 // Stats
189186 const totalTools = availableTools . length ;
190187 const selectedCount = localSelectedComponents . length ;
191- const newToolsCount = newlyDiscoveredTools . length ;
192188
193189 return (
194190 < Dialog
195191 open = { open }
196192 onOpenChange = { ( isOpen ) => {
197193 // Auto-save if closing with newly discovered tools
198- if ( ! isOpen && newToolsCount > 0 ) {
194+ if ( ! isOpen ) {
199195 onToolsSelected ( localSelectedComponents ) ;
200196 }
201197 onOpenChange ( isOpen ) ;
202198 } }
203199 >
204200 < DialogContent className = "max-w-4xl max-h-[85vh] h-auto" >
205201 < DialogHeader >
206- < DialogTitle className = "text-xl" > { newToolsCount > 0 ? " Select Discovered Tools" : "Select Tools" } </ DialogTitle >
202+ < DialogTitle className = "text-xl" > Select Tools</ DialogTitle >
207203 </ DialogHeader >
208204
209205 { /* Tool limit warning */ }
@@ -250,14 +246,6 @@ export const SelectToolsDialog: React.FC<SelectToolsDialogProps> = ({ open, onOp
250246 { selectedCount }
251247 </ Badge >
252248 </ TabsTrigger >
253- { newToolsCount > 0 && (
254- < TabsTrigger value = "new" >
255- New
256- < Badge variant = "outline" className = "ml-1 bg-background" >
257- { newToolsCount }
258- </ Badge >
259- </ TabsTrigger >
260- ) }
261249 </ TabsList >
262250 </ Tabs >
263251
@@ -293,7 +281,15 @@ export const SelectToolsDialog: React.FC<SelectToolsDialogProps> = ({ open, onOp
293281 { expandedCategories [ category ] && (
294282 < div className = "divide-y" >
295283 { tools . map ( ( tool ) => (
296- < ToolItem key = { tool . provider } tool = { tool } isSelected = { isToolSelected ( tool ) } onToggle = { handleToggleTool } disabled = { ! isToolSelected ( tool ) && isLimitReached } />
284+ < ToolItem
285+ key = { getToolIdentifier ( tool ) }
286+ tool = { tool }
287+ isSelected = { isToolSelected ( tool ) }
288+ onToggle = { handleToggleTool }
289+ disabled = { ! isToolSelected ( tool ) && isLimitReached }
290+ displayName = { getToolDisplayName ( tool ) }
291+ description = { getToolDescription ( tool ) }
292+ />
297293 ) ) }
298294 </ div >
299295 ) }
@@ -319,13 +315,8 @@ export const SelectToolsDialog: React.FC<SelectToolsDialogProps> = ({ open, onOp
319315 < span className = "text-muted-foreground" > (Maximum: { MAX_TOOLS_LIMIT } )</ span >
320316 </ div >
321317 < div className = "flex gap-2" >
322- { newToolsCount === 0 && (
323- < Button variant = "outline" onClick = { ( ) => onOpenChange ( false ) } >
324- Cancel
325- </ Button >
326- ) }
327318 < Button className = "bg-violet-500 hover:bg-violet-600 text-white" onClick = { handleSave } >
328- { newToolsCount > 0 ? "Add Selected Tools" : " Save Selection" }
319+ Save Selection
329320 </ Button >
330321 </ div >
331322 </ div >
0 commit comments