teamflect-mcp-server 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/.env.example +9 -0
  2. package/README.md +177 -0
  3. package/dist/constants.d.ts +9 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +9 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/index.d.ts +9 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +85 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/services/apiClient.d.ts +29 -0
  12. package/dist/services/apiClient.d.ts.map +1 -0
  13. package/dist/services/apiClient.js +92 -0
  14. package/dist/services/apiClient.js.map +1 -0
  15. package/dist/services/errorHandler.d.ts +5 -0
  16. package/dist/services/errorHandler.d.ts.map +1 -0
  17. package/dist/services/errorHandler.js +93 -0
  18. package/dist/services/errorHandler.js.map +1 -0
  19. package/dist/tools/feedbacks.d.ts +7 -0
  20. package/dist/tools/feedbacks.d.ts.map +1 -0
  21. package/dist/tools/feedbacks.js +372 -0
  22. package/dist/tools/feedbacks.js.map +1 -0
  23. package/dist/tools/goals.d.ts +7 -0
  24. package/dist/tools/goals.d.ts.map +1 -0
  25. package/dist/tools/goals.js +466 -0
  26. package/dist/tools/goals.js.map +1 -0
  27. package/dist/tools/recognitions.d.ts +7 -0
  28. package/dist/tools/recognitions.d.ts.map +1 -0
  29. package/dist/tools/recognitions.js +314 -0
  30. package/dist/tools/recognitions.js.map +1 -0
  31. package/dist/tools/reviews.d.ts +7 -0
  32. package/dist/tools/reviews.d.ts.map +1 -0
  33. package/dist/tools/reviews.js +224 -0
  34. package/dist/tools/reviews.js.map +1 -0
  35. package/dist/tools/tasks.d.ts +7 -0
  36. package/dist/tools/tasks.d.ts.map +1 -0
  37. package/dist/tools/tasks.js +262 -0
  38. package/dist/tools/tasks.js.map +1 -0
  39. package/dist/tools/users.d.ts +7 -0
  40. package/dist/tools/users.d.ts.map +1 -0
  41. package/dist/tools/users.js +417 -0
  42. package/dist/tools/users.js.map +1 -0
  43. package/dist/types.d.ts +284 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +9 -0
  46. package/dist/types.js.map +1 -0
  47. package/package.json +63 -0
@@ -0,0 +1,466 @@
1
+ import { z } from "zod";
2
+ import { handleApiError } from "../services/errorHandler.js";
3
+ import { ResponseFormat } from "../types.js";
4
+ import { DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE, CHARACTER_LIMIT } from "../constants.js";
5
+ /**
6
+ * Register goal-related tools
7
+ */
8
+ export function registerGoalTools(server, apiClient) {
9
+ // Get Goals Schema
10
+ const GetGoalsInputSchema = z.object({
11
+ status: z.string().optional().describe("Filter by goal status"),
12
+ ownerEmail: z.string().email().optional().describe("Filter by owner email address"),
13
+ goalType: z.string().optional().describe("Filter by goal type"),
14
+ startDate: z.string().optional().describe("Filter by start date (ISO format)"),
15
+ dueDate: z.string().optional().describe("Filter by due date (ISO format)"),
16
+ limit: z.number().int().min(1).max(MAX_PAGE_SIZE).default(DEFAULT_PAGE_SIZE)
17
+ .describe("Maximum number of goals to return"),
18
+ offset: z.number().int().min(0).default(0)
19
+ .describe("Number of goals to skip for pagination"),
20
+ response_format: z.nativeEnum(ResponseFormat).default(ResponseFormat.MARKDOWN)
21
+ .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
22
+ }).strict();
23
+ server.registerTool("teamflect_get_goals", {
24
+ title: "Get Goals",
25
+ description: `Retrieve a list of goals from Teamflect based on filters.
26
+
27
+ This tool searches for goals matching the specified criteria. You can filter by status, owner email, goal type, and date ranges. Results are paginated.
28
+
29
+ Args:
30
+ - status (string, optional): Filter by goal status (e.g., "Active", "Completed")
31
+ - ownerEmail (string, optional): Filter by owner email address
32
+ - goalType (string, optional): Filter by goal type
33
+ - startDate (string, optional): Filter by start date in ISO format (YYYY-MM-DD)
34
+ - dueDate (string, optional): Filter by due date in ISO format (YYYY-MM-DD)
35
+ - limit (number, optional): Maximum results to return, between 1-300 (default: 20)
36
+ - offset (number, optional): Number of results to skip for pagination (default: 0)
37
+ - response_format ('markdown' | 'json', optional): Output format (default: 'markdown')
38
+
39
+ Returns:
40
+ For JSON format: Structured data with schema:
41
+ {
42
+ "total": number, // Total number of goals found
43
+ "count": number, // Number of goals in this response
44
+ "offset": number, // Current pagination offset
45
+ "goals": [
46
+ {
47
+ "goalId": string,
48
+ "title": string,
49
+ "description": string,
50
+ "status": string,
51
+ "goalType": string,
52
+ "startDate": string,
53
+ "dueDate": string,
54
+ "progress": {
55
+ "currentValue": number,
56
+ "targetValue": number,
57
+ "formatType": string
58
+ },
59
+ "owners": [{"displayName": string, "mail": string}],
60
+ "labels": [{"title": string}]
61
+ }
62
+ ],
63
+ "has_more": boolean, // Whether more results are available
64
+ "next_offset": number // Offset for next page (if has_more is true)
65
+ }
66
+
67
+ Examples:
68
+ - Use when: "Get all active goals for john@example.com" -> params with status="Active", ownerEmail="john@example.com"
69
+ - Use when: "List goals due this month" -> params with dueDate filter
70
+ - Don't use when: You need a single goal by ID (use teamflect_get_goal instead)
71
+
72
+ Error Handling:
73
+ - Returns "Error: Authentication failed" if API key is invalid
74
+ - Returns "Error: Rate limit exceeded" if too many requests (429 status)`,
75
+ inputSchema: GetGoalsInputSchema,
76
+ annotations: {
77
+ readOnlyHint: true,
78
+ destructiveHint: false,
79
+ idempotentHint: true,
80
+ openWorldHint: true,
81
+ },
82
+ }, async (params) => {
83
+ try {
84
+ const queryParams = {
85
+ limit: params.limit,
86
+ };
87
+ if (params.status)
88
+ queryParams.status = params.status;
89
+ if (params.ownerEmail)
90
+ queryParams.ownerEmail = params.ownerEmail;
91
+ if (params.goalType)
92
+ queryParams.goalType = params.goalType;
93
+ if (params.startDate)
94
+ queryParams.startDate = params.startDate;
95
+ if (params.dueDate)
96
+ queryParams.dueDate = params.dueDate;
97
+ const response = await apiClient.get("/goal/getGoals", queryParams);
98
+ const goals = response.goals || [];
99
+ const total = response.total ?? goals.length;
100
+ const hasMore = total > params.offset + goals.length;
101
+ const nextOffset = hasMore ? params.offset + goals.length : undefined;
102
+ const output = {
103
+ total,
104
+ count: goals.length,
105
+ offset: params.offset,
106
+ goals: goals.map((goal) => ({
107
+ goalId: goal.goalId,
108
+ title: goal.title,
109
+ description: goal.description || "",
110
+ status: goal.status,
111
+ goalType: goal.goalType,
112
+ startDate: goal.startDate || "",
113
+ dueDate: goal.dueDate || "",
114
+ progress: goal.progress || null,
115
+ owners: goal.owners || [],
116
+ labels: goal.labels || [],
117
+ })),
118
+ has_more: hasMore,
119
+ ...(nextOffset !== undefined ? { next_offset: nextOffset } : {}),
120
+ };
121
+ let textContent;
122
+ if (params.response_format === ResponseFormat.MARKDOWN) {
123
+ const lines = [`# Goals (${total} total)`, ""];
124
+ if (goals.length === 0) {
125
+ lines.push("No goals found matching the criteria.");
126
+ }
127
+ else {
128
+ lines.push(`Showing ${goals.length} of ${total} goals\n`);
129
+ goals.forEach((goal) => {
130
+ lines.push(`## ${goal.title} (${goal.goalId})`);
131
+ lines.push(`- **Status**: ${goal.status}`);
132
+ lines.push(`- **Type**: ${goal.goalType}`);
133
+ if (goal.description)
134
+ lines.push(`- **Description**: ${goal.description}`);
135
+ if (goal.startDate)
136
+ lines.push(`- **Start Date**: ${goal.startDate}`);
137
+ if (goal.dueDate)
138
+ lines.push(`- **Due Date**: ${goal.dueDate}`);
139
+ if (goal.progress) {
140
+ lines.push(`- **Progress**: ${goal.progress.currentValue} / ${goal.progress.targetValue} (${goal.progress.formatType})`);
141
+ }
142
+ if (goal.owners && goal.owners.length > 0) {
143
+ lines.push(`- **Owners**: ${goal.owners.map((o) => o.displayName).join(", ")}`);
144
+ }
145
+ if (goal.labels && goal.labels.length > 0) {
146
+ lines.push(`- **Labels**: ${goal.labels.map((l) => l.title).join(", ")}`);
147
+ }
148
+ lines.push("");
149
+ });
150
+ if (hasMore) {
151
+ lines.push(`\n*Use offset=${nextOffset} to get more results*`);
152
+ }
153
+ }
154
+ textContent = lines.join("\n");
155
+ }
156
+ else {
157
+ textContent = JSON.stringify(output, null, 2);
158
+ }
159
+ // Check character limit
160
+ if (textContent.length > CHARACTER_LIMIT) {
161
+ const truncated = output.goals.slice(0, Math.floor(output.goals.length / 2));
162
+ const truncatedOutput = { ...output, goals: truncated, truncated: true };
163
+ textContent = params.response_format === ResponseFormat.MARKDOWN
164
+ ? `# Goals (Truncated)\n\nResponse truncated from ${output.goals.length} to ${truncated.length} goals. Use filters or pagination to see more results.\n\n${JSON.stringify(truncatedOutput, null, 2)}`
165
+ : JSON.stringify(truncatedOutput, null, 2);
166
+ }
167
+ return {
168
+ content: [{ type: "text", text: textContent }],
169
+ structuredContent: output,
170
+ };
171
+ }
172
+ catch (error) {
173
+ return {
174
+ content: [{
175
+ type: "text",
176
+ text: handleApiError(error),
177
+ }],
178
+ };
179
+ }
180
+ });
181
+ // Get Goal Schema
182
+ const GetGoalInputSchema = z.object({
183
+ goalId: z.string().min(1).describe("The ID of the goal to retrieve"),
184
+ response_format: z.nativeEnum(ResponseFormat).default(ResponseFormat.MARKDOWN)
185
+ .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
186
+ }).strict();
187
+ server.registerTool("teamflect_get_goal", {
188
+ title: "Get Goal by ID",
189
+ description: `Retrieve a single goal by its ID from Teamflect.
190
+
191
+ This tool fetches detailed information about a specific goal including its progress, owners, labels, and comments.
192
+
193
+ Args:
194
+ - goalId (string, required): The unique identifier of the goal
195
+ - response_format ('markdown' | 'json', optional): Output format (default: 'markdown')
196
+
197
+ Returns:
198
+ Complete goal details including all fields and relationships.
199
+
200
+ Error Handling:
201
+ - Returns "Error: Resource not found" if goalId doesn't exist
202
+ - Returns "Error: Authentication failed" if API key is invalid`,
203
+ inputSchema: GetGoalInputSchema,
204
+ annotations: {
205
+ readOnlyHint: true,
206
+ destructiveHint: false,
207
+ idempotentHint: true,
208
+ openWorldHint: true,
209
+ },
210
+ }, async (params) => {
211
+ try {
212
+ const goal = await apiClient.get(`/goal/getGoal`, { goalId: params.goalId });
213
+ let textContent;
214
+ if (params.response_format === ResponseFormat.MARKDOWN) {
215
+ const lines = [`# ${goal.title}`, "", `**Goal ID**: ${goal.goalId}`, ""];
216
+ lines.push(`- **Status**: ${goal.status}`);
217
+ lines.push(`- **Type**: ${goal.goalType}`);
218
+ if (goal.description)
219
+ lines.push(`- **Description**: ${goal.description}`);
220
+ if (goal.startDate)
221
+ lines.push(`- **Start Date**: ${goal.startDate}`);
222
+ if (goal.dueDate)
223
+ lines.push(`- **Due Date**: ${goal.dueDate}`);
224
+ if (goal.progress) {
225
+ lines.push(`- **Progress**: ${goal.progress.currentValue} / ${goal.progress.targetValue} (${goal.progress.formatType})`);
226
+ }
227
+ if (goal.owners && goal.owners.length > 0) {
228
+ lines.push(`- **Owners**: ${goal.owners.map((o) => `${o.displayName} (${o.mail})`).join(", ")}`);
229
+ }
230
+ if (goal.labels && goal.labels.length > 0) {
231
+ lines.push(`- **Labels**: ${goal.labels.map((l) => l.title).join(", ")}`);
232
+ }
233
+ if (goal.createdBy) {
234
+ lines.push(`- **Created By**: ${goal.createdBy.displayName}`);
235
+ }
236
+ if (goal.createdAt) {
237
+ lines.push(`- **Created At**: ${goal.createdAt}`);
238
+ }
239
+ textContent = lines.join("\n");
240
+ }
241
+ else {
242
+ textContent = JSON.stringify(goal, null, 2);
243
+ }
244
+ return {
245
+ content: [{ type: "text", text: textContent }],
246
+ structuredContent: goal,
247
+ };
248
+ }
249
+ catch (error) {
250
+ return {
251
+ content: [{
252
+ type: "text",
253
+ text: handleApiError(error),
254
+ }],
255
+ };
256
+ }
257
+ });
258
+ // Create Goal Schema
259
+ const CreateGoalInputSchema = z.object({
260
+ title: z.string().min(1).max(500).describe("Goal title"),
261
+ description: z.string().max(5000).optional().describe("Goal description"),
262
+ goalType: z.string().describe("Goal type (e.g., 'OKR', 'KPI', 'Project')"),
263
+ startDate: z.string().describe("Start date in ISO format (YYYY-MM-DD)"),
264
+ dueDate: z.string().optional().describe("Due date in ISO format (YYYY-MM-DD)"),
265
+ progressFormat: z.string().optional().describe("Progress format type"),
266
+ progressInitialValue: z.number().optional().describe("Initial progress value"),
267
+ progressTargetValue: z.number().optional().describe("Target progress value"),
268
+ ownerEmails: z.array(z.string().email()).optional().describe("Array of owner email addresses"),
269
+ labelIds: z.array(z.string()).optional().describe("Array of label IDs"),
270
+ parentGoalId: z.string().optional().describe("Parent goal ID if this is a sub-goal"),
271
+ response_format: z.nativeEnum(ResponseFormat).default(ResponseFormat.MARKDOWN)
272
+ .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
273
+ }).strict();
274
+ server.registerTool("teamflect_create_goal", {
275
+ title: "Create Goal",
276
+ description: `Create a new goal in Teamflect.
277
+
278
+ This tool creates a new goal with the specified properties. You can set owners, labels, progress targets, and optionally link it to a parent goal.
279
+
280
+ Args:
281
+ - title (string, required): Goal title (1-500 characters)
282
+ - description (string, optional): Goal description (max 5000 characters)
283
+ - goalType (string, required): Goal type identifier
284
+ - startDate (string, required): Start date in ISO format (YYYY-MM-DD)
285
+ - dueDate (string, optional): Due date in ISO format (YYYY-MM-DD)
286
+ - progressFormat (string, optional): Progress format type
287
+ - progressInitialValue (number, optional): Initial progress value
288
+ - progressTargetValue (number, optional): Target progress value
289
+ - ownerEmails (array, optional): Array of owner email addresses
290
+ - labelIds (array, optional): Array of label IDs to assign
291
+ - parentGoalId (string, optional): Parent goal ID if this is a sub-goal
292
+ - response_format ('markdown' | 'json', optional): Output format (default: 'markdown')
293
+
294
+ Returns:
295
+ The created goal with all its details.
296
+
297
+ Error Handling:
298
+ - Returns "Error: Bad request" if required fields are missing or invalid
299
+ - Returns "Error: Permission denied" if you don't have permission to create goals`,
300
+ inputSchema: CreateGoalInputSchema,
301
+ annotations: {
302
+ readOnlyHint: false,
303
+ destructiveHint: false,
304
+ idempotentHint: false,
305
+ openWorldHint: true,
306
+ },
307
+ }, async (params) => {
308
+ try {
309
+ const requestBody = {
310
+ title: params.title,
311
+ description: params.description,
312
+ goalType: params.goalType,
313
+ startDate: params.startDate,
314
+ dueDate: params.dueDate,
315
+ progressFormat: params.progressFormat,
316
+ progressInitialValue: params.progressInitialValue,
317
+ progressTargetValue: params.progressTargetValue,
318
+ ownerEmails: params.ownerEmails,
319
+ labelIds: params.labelIds,
320
+ parentGoalId: params.parentGoalId,
321
+ };
322
+ const goal = await apiClient.post("/goal/createNewGoal", requestBody);
323
+ let textContent;
324
+ if (params.response_format === ResponseFormat.MARKDOWN) {
325
+ textContent = `# Goal Created Successfully\n\n**${goal.title}** (${goal.goalId})\n\n- Status: ${goal.status}\n- Type: ${goal.goalType}\n${goal.description ? `- Description: ${goal.description}\n` : ""}Goal has been created successfully.`;
326
+ }
327
+ else {
328
+ textContent = JSON.stringify(goal, null, 2);
329
+ }
330
+ return {
331
+ content: [{ type: "text", text: textContent }],
332
+ structuredContent: goal,
333
+ };
334
+ }
335
+ catch (error) {
336
+ return {
337
+ content: [{
338
+ type: "text",
339
+ text: handleApiError(error),
340
+ }],
341
+ };
342
+ }
343
+ });
344
+ // Update Goal Progress Schema
345
+ const UpdateGoalProgressInputSchema = z.object({
346
+ goalId: z.string().min(1).describe("The ID of the goal to update"),
347
+ currentValue: z.number().describe("New current progress value"),
348
+ comment: z.string().max(1000).optional().describe("Optional comment about the progress update"),
349
+ response_format: z.nativeEnum(ResponseFormat).default(ResponseFormat.MARKDOWN)
350
+ .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
351
+ }).strict();
352
+ server.registerTool("teamflect_update_goal_progress", {
353
+ title: "Update Goal Progress",
354
+ description: `Update the progress value of a goal in Teamflect.
355
+
356
+ This tool updates the current progress value for a goal. You can optionally include a comment explaining the progress update.
357
+
358
+ Args:
359
+ - goalId (string, required): The ID of the goal to update
360
+ - currentValue (number, required): New current progress value
361
+ - comment (string, optional): Optional comment about the progress update (max 1000 characters)
362
+ - response_format ('markdown' | 'json', optional): Output format (default: 'markdown')
363
+
364
+ Returns:
365
+ The updated goal with the new progress value.
366
+
367
+ Error Handling:
368
+ - Returns "Error: Resource not found" if goalId doesn't exist
369
+ - Returns "Error: Bad request" if currentValue is invalid`,
370
+ inputSchema: UpdateGoalProgressInputSchema,
371
+ annotations: {
372
+ readOnlyHint: false,
373
+ destructiveHint: false,
374
+ idempotentHint: false,
375
+ openWorldHint: true,
376
+ },
377
+ }, async (params) => {
378
+ try {
379
+ const requestBody = {
380
+ goalId: params.goalId,
381
+ newValue: params.currentValue,
382
+ comment: params.comment,
383
+ };
384
+ const goal = await apiClient.post("/goal/updateProgress", requestBody);
385
+ let textContent;
386
+ if (params.response_format === ResponseFormat.MARKDOWN) {
387
+ textContent = `# Goal Progress Updated\n\n**${goal.title}** (${goal.goalId})\n\nProgress updated to: ${goal.progress?.currentValue || params.currentValue}${goal.progress ? ` / ${goal.progress.targetValue}` : ""}`;
388
+ }
389
+ else {
390
+ textContent = JSON.stringify(goal, null, 2);
391
+ }
392
+ return {
393
+ content: [{ type: "text", text: textContent }],
394
+ structuredContent: goal,
395
+ };
396
+ }
397
+ catch (error) {
398
+ return {
399
+ content: [{
400
+ type: "text",
401
+ text: handleApiError(error),
402
+ }],
403
+ };
404
+ }
405
+ });
406
+ // Comment Goal Schema
407
+ const CommentGoalInputSchema = z.object({
408
+ goalId: z.string().min(1).describe("The ID of the goal to comment on"),
409
+ comment: z.string().min(1).max(1000).describe("Comment text (1-1000 characters)"),
410
+ response_format: z.nativeEnum(ResponseFormat).default(ResponseFormat.MARKDOWN)
411
+ .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
412
+ }).strict();
413
+ server.registerTool("teamflect_comment_goal", {
414
+ title: "Comment on Goal",
415
+ description: `Add a comment to a goal in Teamflect.
416
+
417
+ This tool adds a comment to the specified goal. Comments are useful for tracking discussions and updates about goal progress.
418
+
419
+ Args:
420
+ - goalId (string, required): The ID of the goal to comment on
421
+ - comment (string, required): Comment text (1-1000 characters)
422
+ - response_format ('markdown' | 'json', optional): Output format (default: 'markdown')
423
+
424
+ Returns:
425
+ The goal with the new comment added.
426
+
427
+ Error Handling:
428
+ - Returns "Error: Resource not found" if goalId doesn't exist
429
+ - Returns "Error: Bad request" if comment is empty or too long`,
430
+ inputSchema: CommentGoalInputSchema,
431
+ annotations: {
432
+ readOnlyHint: false,
433
+ destructiveHint: false,
434
+ idempotentHint: false,
435
+ openWorldHint: true,
436
+ },
437
+ }, async (params) => {
438
+ try {
439
+ const requestBody = {
440
+ goalId: params.goalId,
441
+ comment: params.comment,
442
+ };
443
+ const goal = await apiClient.post("/goal/commentGoal", requestBody);
444
+ let textContent;
445
+ if (params.response_format === ResponseFormat.MARKDOWN) {
446
+ textContent = `# Comment Added\n\nComment added to **${goal.title}** (${goal.goalId})\n\nComment: ${params.comment}`;
447
+ }
448
+ else {
449
+ textContent = JSON.stringify(goal, null, 2);
450
+ }
451
+ return {
452
+ content: [{ type: "text", text: textContent }],
453
+ structuredContent: goal,
454
+ };
455
+ }
456
+ catch (error) {
457
+ return {
458
+ content: [{
459
+ type: "text",
460
+ text: handleApiError(error),
461
+ }],
462
+ };
463
+ }
464
+ });
465
+ }
466
+ //# sourceMappingURL=goals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goals.js","sourceRoot":"","sources":["../../src/tools/goals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { TeamflectApiClient } from "../services/apiClient.js";
3
+ /**
4
+ * Register recognition-related tools
5
+ */
6
+ export declare function registerRecognitionTools(server: McpServer, apiClient: TeamflectApiClient): void;
7
+ //# sourceMappingURL=recognitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recognitions.d.ts","sourceRoot":"","sources":["../../src/tools/recognitions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAK9D;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAuU/F"}