@@ -47,7 +47,7 @@ void main() {
47
47
'client' : server.clientInfo.name,
48
48
'clientVersion' : server.clientInfo.version,
49
49
'serverVersion' : server.implementation.version,
50
- 'type' : ' callTool' ,
50
+ 'type' : AnalyticsEvent . callTool.name ,
51
51
'tool' : 'hello' ,
52
52
'success' : true ,
53
53
'elapsedMilliseconds' : isA <int >(),
@@ -85,7 +85,7 @@ void main() {
85
85
'client' : server.clientInfo.name,
86
86
'clientVersion' : server.clientInfo.version,
87
87
'serverVersion' : server.implementation.version,
88
- 'type' : ' callTool' ,
88
+ 'type' : AnalyticsEvent . callTool.name ,
89
89
'tool' : tool.name,
90
90
'success' : false ,
91
91
'elapsedMilliseconds' : isA <int >(),
@@ -96,6 +96,125 @@ void main() {
96
96
}
97
97
});
98
98
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
+
99
218
test ('Changelog version matches dart server version' , () {
100
219
final changelogFile = File ('CHANGELOG.md' );
101
220
expect (
0 commit comments