@@ -47,7 +47,7 @@ void main() {
4747 'client' : server.clientInfo.name,
4848 'clientVersion' : server.clientInfo.version,
4949 'serverVersion' : server.implementation.version,
50- 'type' : ' callTool' ,
50+ 'type' : AnalyticsEvent . callTool.name ,
5151 'tool' : 'hello' ,
5252 'success' : true ,
5353 'elapsedMilliseconds' : isA <int >(),
@@ -85,7 +85,7 @@ void main() {
8585 'client' : server.clientInfo.name,
8686 'clientVersion' : server.clientInfo.version,
8787 'serverVersion' : server.implementation.version,
88- 'type' : ' callTool' ,
88+ 'type' : AnalyticsEvent . callTool.name ,
8989 'tool' : tool.name,
9090 'success' : false ,
9191 'elapsedMilliseconds' : isA <int >(),
@@ -96,6 +96,125 @@ void main() {
9696 }
9797 });
9898
99+ group ('are sent for prompts' , () {
100+ final helloPrompt = Prompt (
101+ name: 'hello' ,
102+ arguments: [PromptArgument (name: 'name' , required : false )],
103+ );
104+ GetPromptResult getHelloPrompt (GetPromptRequest request) {
105+ assert (request.name == helloPrompt.name);
106+ if (request.arguments? ['throw' ] == true ) {
107+ throw StateError ('Oh no!' );
108+ }
109+ return GetPromptResult (
110+ messages: [
111+ PromptMessage (
112+ role: Role .user,
113+ content: Content .text (text: 'hello' ),
114+ ),
115+ if (request.arguments? ['name' ] case final name? )
116+ PromptMessage (
117+ role: Role .user,
118+ content: Content .text (text: ', my name is $name ' ),
119+ ),
120+ ],
121+ );
122+ }
123+
124+ setUp (() {
125+ server.addPrompt (helloPrompt, getHelloPrompt);
126+ });
127+
128+ test ('with no arguments' , () async {
129+ final result = await testHarness.getPrompt (
130+ GetPromptRequest (name: helloPrompt.name),
131+ );
132+ expect ((result.messages.single.content as TextContent ).text, 'hello' );
133+ expect (result.messages.single.role, Role .user);
134+ expect (
135+ analytics.sentEvents.single,
136+ isA <Event >()
137+ .having ((e) => e.eventName, 'eventName' , DashEvent .dartMCPEvent)
138+ .having (
139+ (e) => e.eventData,
140+ 'eventData' ,
141+ equals ({
142+ 'client' : server.clientInfo.name,
143+ 'clientVersion' : server.clientInfo.version,
144+ 'serverVersion' : server.implementation.version,
145+ 'type' : AnalyticsEvent .getPrompt.name,
146+ 'name' : helloPrompt.name,
147+ 'success' : true ,
148+ 'elapsedMilliseconds' : isA <int >(),
149+ 'withArguments' : false ,
150+ }),
151+ ),
152+ );
153+ });
154+
155+ test ('with arguments' , () async {
156+ final result = await testHarness.getPrompt (
157+ GetPromptRequest (name: helloPrompt.name, arguments: {'name' : 'Bob' }),
158+ );
159+ expect ((result.messages[0 ].content as TextContent ).text, 'hello' );
160+ expect (result.messages[0 ].role, Role .user);
161+ expect (
162+ (result.messages[1 ].content as TextContent ).text,
163+ ', my name is Bob' ,
164+ );
165+ expect (result.messages[1 ].role, Role .user);
166+ expect (
167+ analytics.sentEvents.single,
168+ isA <Event >()
169+ .having ((e) => e.eventName, 'eventName' , DashEvent .dartMCPEvent)
170+ .having (
171+ (e) => e.eventData,
172+ 'eventData' ,
173+ equals ({
174+ 'client' : server.clientInfo.name,
175+ 'clientVersion' : server.clientInfo.version,
176+ 'serverVersion' : server.implementation.version,
177+ 'type' : AnalyticsEvent .getPrompt.name,
178+ 'name' : helloPrompt.name,
179+ 'success' : true ,
180+ 'elapsedMilliseconds' : isA <int >(),
181+ 'withArguments' : true ,
182+ }),
183+ ),
184+ );
185+ });
186+
187+ test ('even if they throw' , () async {
188+ try {
189+ await testHarness.getPrompt (
190+ GetPromptRequest (
191+ name: helloPrompt.name,
192+ arguments: {'throw' : true },
193+ ),
194+ );
195+ } catch (_) {}
196+ expect (
197+ analytics.sentEvents.single,
198+ isA <Event >()
199+ .having ((e) => e.eventName, 'eventName' , DashEvent .dartMCPEvent)
200+ .having (
201+ (e) => e.eventData,
202+ 'eventData' ,
203+ equals ({
204+ 'client' : server.clientInfo.name,
205+ 'clientVersion' : server.clientInfo.version,
206+ 'serverVersion' : server.implementation.version,
207+ 'type' : AnalyticsEvent .getPrompt.name,
208+ 'name' : helloPrompt.name,
209+ 'success' : false ,
210+ 'elapsedMilliseconds' : isA <int >(),
211+ 'withArguments' : true ,
212+ }),
213+ ),
214+ );
215+ });
216+ });
217+
99218 test ('Changelog version matches dart server version' , () {
100219 final changelogFile = File ('CHANGELOG.md' );
101220 expect (
0 commit comments