1
1
import { useState , useEffect } from "react" ;
2
- import { Send , Bell , Terminal , Files , MessageSquare } from "lucide-react" ;
2
+ import {
3
+ Send ,
4
+ Bell ,
5
+ Terminal ,
6
+ Files ,
7
+ MessageSquare ,
8
+ Hammer ,
9
+ } from "lucide-react" ;
3
10
import { Tabs , TabsList , TabsTrigger } from "@/components/ui/tabs" ;
4
11
5
12
import ConsoleTab from "./components/ConsoleTab" ;
@@ -8,6 +15,7 @@ import RequestsTab from "./components/RequestsTabs";
8
15
import ResourcesTab , { Resource } from "./components/ResourcesTab" ;
9
16
import NotificationsTab from "./components/NotificationsTab" ;
10
17
import PromptsTab , { Prompt } from "./components/PromptsTab" ;
18
+ import ToolsTab , { Tool as ToolType } from "./components/ToolsTab" ;
11
19
12
20
const App = ( ) => {
13
21
const [ socket , setSocket ] = useState < WebSocket | null > ( null ) ;
@@ -18,6 +26,8 @@ const App = () => {
18
26
const [ resourceContent , setResourceContent ] = useState < string > ( "" ) ;
19
27
const [ prompts , setPrompts ] = useState < Prompt [ ] > ( [ ] ) ;
20
28
const [ promptContent , setPromptContent ] = useState < string > ( "" ) ;
29
+ const [ tools , setTools ] = useState < ToolType [ ] > ( [ ] ) ;
30
+ const [ toolResult , setToolResult ] = useState < string > ( "" ) ;
21
31
const [ error , setError ] = useState < string | null > ( null ) ;
22
32
23
33
useEffect ( ( ) => {
@@ -44,6 +54,12 @@ const App = () => {
44
54
} else if ( message . type === "prompt" ) {
45
55
setPromptContent ( JSON . stringify ( message . data , null , 2 ) ) ;
46
56
setError ( null ) ;
57
+ } else if ( message . type === "tools" ) {
58
+ setTools ( message . data . tools ) ;
59
+ setError ( null ) ;
60
+ } else if ( message . type === "toolResult" ) {
61
+ setToolResult ( JSON . stringify ( message . data , null , 2 ) ) ;
62
+ setError ( null ) ;
47
63
} else if ( message . type === "error" ) {
48
64
setError ( message . message ) ;
49
65
}
@@ -71,6 +87,7 @@ const App = () => {
71
87
null ,
72
88
) ;
73
89
const [ selectedPrompt , setSelectedPrompt ] = useState < Prompt | null > ( null ) ;
90
+ const [ selectedTool , setSelectedTool ] = useState < ToolType | null > ( null ) ;
74
91
75
92
const listResources = ( ) => {
76
93
sendWebSocketMessage ( { type : "listResources" } ) ;
@@ -88,6 +105,14 @@ const App = () => {
88
105
sendWebSocketMessage ( { type : "getPrompt" , name } ) ;
89
106
} ;
90
107
108
+ const listTools = ( ) => {
109
+ sendWebSocketMessage ( { type : "listTools" } ) ;
110
+ } ;
111
+
112
+ const callTool = ( name : string , params : Record < string , unknown > ) => {
113
+ sendWebSocketMessage ( { type : "callTool" , name, params } ) ;
114
+ } ;
115
+
91
116
return (
92
117
< div className = "flex h-screen bg-gray-100" >
93
118
< Sidebar connectionStatus = { connectionStatus } />
@@ -96,14 +121,6 @@ const App = () => {
96
121
< div className = "flex-1 overflow-auto" >
97
122
< Tabs defaultValue = "requests" className = "w-full p-4" >
98
123
< TabsList className = "mb-4" >
99
- < TabsTrigger value = "requests" >
100
- < Send className = "w-4 h-4 mr-2" />
101
- Requests
102
- </ TabsTrigger >
103
- < TabsTrigger value = "notifications" >
104
- < Bell className = "w-4 h-4 mr-2" />
105
- Notifications
106
- </ TabsTrigger >
107
124
< TabsTrigger value = "resources" >
108
125
< Files className = "w-4 h-4 mr-2" />
109
126
Resources
@@ -112,7 +129,19 @@ const App = () => {
112
129
< MessageSquare className = "w-4 h-4 mr-2" />
113
130
Prompts
114
131
</ TabsTrigger >
115
- < TabsTrigger value = "console" >
132
+ < TabsTrigger value = "requests" disabled >
133
+ < Send className = "w-4 h-4 mr-2" />
134
+ Requests
135
+ </ TabsTrigger >
136
+ < TabsTrigger value = "notifications" disabled >
137
+ < Bell className = "w-4 h-4 mr-2" />
138
+ Notifications
139
+ </ TabsTrigger >
140
+ < TabsTrigger value = "tools" disabled >
141
+ < Hammer className = "w-4 h-4 mr-2" />
142
+ Tools
143
+ </ TabsTrigger >
144
+ < TabsTrigger value = "console" disabled >
116
145
< Terminal className = "w-4 h-4 mr-2" />
117
146
Console
118
147
</ TabsTrigger >
@@ -139,6 +168,15 @@ const App = () => {
139
168
promptContent = { promptContent }
140
169
error = { error }
141
170
/>
171
+ < ToolsTab
172
+ tools = { tools }
173
+ listTools = { listTools }
174
+ callTool = { callTool }
175
+ selectedTool = { selectedTool }
176
+ setSelectedTool = { setSelectedTool }
177
+ toolResult = { toolResult }
178
+ error = { error }
179
+ />
142
180
< ConsoleTab />
143
181
</ div >
144
182
</ Tabs >
0 commit comments