@nanogpt/mcp 1.0.0

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 (57) hide show
  1. package/dist/activeRequests.d.ts +26 -0
  2. package/dist/activeRequests.d.ts.map +1 -0
  3. package/dist/activeRequests.js +39 -0
  4. package/dist/activeRequests.js.map +1 -0
  5. package/dist/config.d.ts +35 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +136 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/httpClient.d.ts +36 -0
  10. package/dist/httpClient.d.ts.map +1 -0
  11. package/dist/httpClient.js +211 -0
  12. package/dist/httpClient.js.map +1 -0
  13. package/dist/index.d.ts +18 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +168 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/resources.d.ts +68 -0
  18. package/dist/resources.d.ts.map +1 -0
  19. package/dist/resources.js +198 -0
  20. package/dist/resources.js.map +1 -0
  21. package/dist/toolUtils.d.ts +115 -0
  22. package/dist/toolUtils.d.ts.map +1 -0
  23. package/dist/toolUtils.js +369 -0
  24. package/dist/toolUtils.js.map +1 -0
  25. package/dist/tools/balance.d.ts +48 -0
  26. package/dist/tools/balance.d.ts.map +1 -0
  27. package/dist/tools/balance.js +78 -0
  28. package/dist/tools/balance.js.map +1 -0
  29. package/dist/tools/chat.d.ts +89 -0
  30. package/dist/tools/chat.d.ts.map +1 -0
  31. package/dist/tools/chat.js +125 -0
  32. package/dist/tools/chat.js.map +1 -0
  33. package/dist/tools/imageGenerate.d.ts +116 -0
  34. package/dist/tools/imageGenerate.d.ts.map +1 -0
  35. package/dist/tools/imageGenerate.js +220 -0
  36. package/dist/tools/imageGenerate.js.map +1 -0
  37. package/dist/tools/index.d.ts +11 -0
  38. package/dist/tools/index.d.ts.map +1 -0
  39. package/dist/tools/index.js +11 -0
  40. package/dist/tools/index.js.map +1 -0
  41. package/dist/tools/listModels.d.ts +149 -0
  42. package/dist/tools/listModels.d.ts.map +1 -0
  43. package/dist/tools/listModels.js +224 -0
  44. package/dist/tools/listModels.js.map +1 -0
  45. package/dist/tools/scrapeUrls.d.ts +51 -0
  46. package/dist/tools/scrapeUrls.d.ts.map +1 -0
  47. package/dist/tools/scrapeUrls.js +100 -0
  48. package/dist/tools/scrapeUrls.js.map +1 -0
  49. package/dist/tools/webSearch.d.ts +69 -0
  50. package/dist/tools/webSearch.d.ts.map +1 -0
  51. package/dist/tools/webSearch.js +120 -0
  52. package/dist/tools/webSearch.js.map +1 -0
  53. package/dist/tools/youtubeTranscribe.d.ts +45 -0
  54. package/dist/tools/youtubeTranscribe.d.ts.map +1 -0
  55. package/dist/tools/youtubeTranscribe.js +88 -0
  56. package/dist/tools/youtubeTranscribe.js.map +1 -0
  57. package/package.json +48 -0
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Model listing tools
3
+ *
4
+ * - nanogpt_list_text_models
5
+ * - nanogpt_list_image_models
6
+ * - nanogpt_list_audio_models
7
+ * - nanogpt_list_video_models
8
+ */
9
+ import { z } from 'zod';
10
+ import { requestJson } from '../httpClient.js';
11
+ import { handleToolError, processRawResponse, buildContent, zodToJsonSchema } from '../toolUtils.js';
12
+ // Common input schema for text models (defaults to detailed=false)
13
+ const textModelsInputSchema = z.object({
14
+ detailed: z.boolean().optional(),
15
+ include_raw: z.boolean().optional().default(false),
16
+ });
17
+ // Common input schema for other models (defaults to detailed=true)
18
+ const otherModelsInputSchema = z.object({
19
+ detailed: z.boolean().optional(),
20
+ include_raw: z.boolean().optional().default(false),
21
+ });
22
+ // Audio models has an extra `type` parameter
23
+ const audioModelsInputSchema = z.object({
24
+ detailed: z.boolean().optional(),
25
+ type: z.enum(['tts', 'stt', 'all']).optional(),
26
+ include_raw: z.boolean().optional().default(false),
27
+ });
28
+ // Common output schema
29
+ const outputSchema = z.object({
30
+ data: z.array(z.unknown()),
31
+ raw: z.union([z.record(z.unknown()), z.string()]).optional(),
32
+ });
33
+ // ============================================================================
34
+ // nanogpt_list_text_models
35
+ // ============================================================================
36
+ export const listTextModels = {
37
+ name: 'nanogpt_list_text_models',
38
+ description: 'List available text/chat models with optional pricing details.',
39
+ inputSchema: textModelsInputSchema,
40
+ outputSchema,
41
+ inputJsonSchema: zodToJsonSchema(textModelsInputSchema),
42
+ outputJsonSchema: zodToJsonSchema(outputSchema),
43
+ annotations: {
44
+ readOnlyHint: true,
45
+ openWorldHint: false,
46
+ },
47
+ async handler(args) {
48
+ try {
49
+ const input = textModelsInputSchema.parse(args);
50
+ const query = {};
51
+ if (input.detailed !== undefined) {
52
+ query.detailed = String(input.detailed);
53
+ }
54
+ const response = await requestJson({
55
+ method: 'GET',
56
+ path: '/api/v1/models',
57
+ query: Object.keys(query).length > 0 ? query : undefined,
58
+ });
59
+ const data = response.json;
60
+ const models = data.data || [];
61
+ const output = {
62
+ data: models,
63
+ };
64
+ const { raw, resourceLink } = processRawResponse({ status: response.status, headers: response.headers, body: data }, input.include_raw);
65
+ if (raw !== undefined) {
66
+ output.raw = raw;
67
+ }
68
+ const displayText = `Found ${models.length} text model(s)`;
69
+ return {
70
+ content: buildContent(displayText, resourceLink),
71
+ structuredContent: output,
72
+ };
73
+ }
74
+ catch (err) {
75
+ return handleToolError(err);
76
+ }
77
+ },
78
+ };
79
+ // ============================================================================
80
+ // nanogpt_list_image_models
81
+ // ============================================================================
82
+ export const listImageModels = {
83
+ name: 'nanogpt_list_image_models',
84
+ description: 'List available image generation models with optional pricing details.',
85
+ inputSchema: otherModelsInputSchema,
86
+ outputSchema,
87
+ inputJsonSchema: zodToJsonSchema(otherModelsInputSchema),
88
+ outputJsonSchema: zodToJsonSchema(outputSchema),
89
+ annotations: {
90
+ readOnlyHint: true,
91
+ openWorldHint: false,
92
+ },
93
+ async handler(args) {
94
+ try {
95
+ const input = otherModelsInputSchema.parse(args);
96
+ const query = {};
97
+ // Image models default to detailed=true on the server
98
+ if (input.detailed !== undefined) {
99
+ query.detailed = String(input.detailed);
100
+ }
101
+ const response = await requestJson({
102
+ method: 'GET',
103
+ path: '/api/v1/image-models',
104
+ query: Object.keys(query).length > 0 ? query : undefined,
105
+ });
106
+ const data = response.json;
107
+ const models = data.data || [];
108
+ const output = {
109
+ data: models,
110
+ };
111
+ const { raw, resourceLink } = processRawResponse({ status: response.status, headers: response.headers, body: data }, input.include_raw);
112
+ if (raw !== undefined) {
113
+ output.raw = raw;
114
+ }
115
+ const displayText = `Found ${models.length} image model(s)`;
116
+ return {
117
+ content: buildContent(displayText, resourceLink),
118
+ structuredContent: output,
119
+ };
120
+ }
121
+ catch (err) {
122
+ return handleToolError(err);
123
+ }
124
+ },
125
+ };
126
+ // ============================================================================
127
+ // nanogpt_list_audio_models
128
+ // ============================================================================
129
+ export const listAudioModels = {
130
+ name: 'nanogpt_list_audio_models',
131
+ description: 'List available audio models (TTS and STT) with optional pricing details.',
132
+ inputSchema: audioModelsInputSchema,
133
+ outputSchema,
134
+ inputJsonSchema: zodToJsonSchema(audioModelsInputSchema),
135
+ outputJsonSchema: zodToJsonSchema(outputSchema),
136
+ annotations: {
137
+ readOnlyHint: true,
138
+ openWorldHint: false,
139
+ },
140
+ async handler(args) {
141
+ try {
142
+ const input = audioModelsInputSchema.parse(args);
143
+ const query = {};
144
+ // Audio models default to detailed=true on the server
145
+ if (input.detailed !== undefined) {
146
+ query.detailed = String(input.detailed);
147
+ }
148
+ if (input.type) {
149
+ query.type = input.type;
150
+ }
151
+ const response = await requestJson({
152
+ method: 'GET',
153
+ path: '/api/v1/audio-models',
154
+ query: Object.keys(query).length > 0 ? query : undefined,
155
+ });
156
+ const data = response.json;
157
+ const models = data.data || [];
158
+ const output = {
159
+ data: models,
160
+ };
161
+ const { raw, resourceLink } = processRawResponse({ status: response.status, headers: response.headers, body: data }, input.include_raw);
162
+ if (raw !== undefined) {
163
+ output.raw = raw;
164
+ }
165
+ const typeLabel = input.type === 'tts' ? 'TTS' : input.type === 'stt' ? 'STT' : 'audio';
166
+ const displayText = `Found ${models.length} ${typeLabel} model(s)`;
167
+ return {
168
+ content: buildContent(displayText, resourceLink),
169
+ structuredContent: output,
170
+ };
171
+ }
172
+ catch (err) {
173
+ return handleToolError(err);
174
+ }
175
+ },
176
+ };
177
+ // ============================================================================
178
+ // nanogpt_list_video_models
179
+ // ============================================================================
180
+ export const listVideoModels = {
181
+ name: 'nanogpt_list_video_models',
182
+ description: 'List available video generation models with optional pricing details.',
183
+ inputSchema: otherModelsInputSchema,
184
+ outputSchema,
185
+ inputJsonSchema: zodToJsonSchema(otherModelsInputSchema),
186
+ outputJsonSchema: zodToJsonSchema(outputSchema),
187
+ annotations: {
188
+ readOnlyHint: true,
189
+ openWorldHint: false,
190
+ },
191
+ async handler(args) {
192
+ try {
193
+ const input = otherModelsInputSchema.parse(args);
194
+ const query = {};
195
+ // Video models default to detailed=true on the server
196
+ if (input.detailed !== undefined) {
197
+ query.detailed = String(input.detailed);
198
+ }
199
+ const response = await requestJson({
200
+ method: 'GET',
201
+ path: '/api/v1/video-models',
202
+ query: Object.keys(query).length > 0 ? query : undefined,
203
+ });
204
+ const data = response.json;
205
+ const models = data.data || [];
206
+ const output = {
207
+ data: models,
208
+ };
209
+ const { raw, resourceLink } = processRawResponse({ status: response.status, headers: response.headers, body: data }, input.include_raw);
210
+ if (raw !== undefined) {
211
+ output.raw = raw;
212
+ }
213
+ const displayText = `Found ${models.length} video model(s)`;
214
+ return {
215
+ content: buildContent(displayText, resourceLink),
216
+ structuredContent: output,
217
+ };
218
+ }
219
+ catch (err) {
220
+ return handleToolError(err);
221
+ }
222
+ },
223
+ };
224
+ //# sourceMappingURL=listModels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listModels.js","sourceRoot":"","sources":["../../src/tools/listModels.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAErG,mEAAmE;AACnE,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnD,CAAC,CAAC;AAEH,mEAAmE;AACnE,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnD,CAAC,CAAC;AAEH,6CAA6C;AAC7C,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnD,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1B,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC,CAAC;AAOH,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,0BAA0B;IAChC,WAAW,EAAE,gEAAgE;IAC7E,WAAW,EAAE,qBAAqB;IAClC,YAAY;IACZ,eAAe,EAAE,eAAe,CAAC,qBAAqB,CAAC;IACvD,gBAAgB,EAAE,eAAe,CAAC,YAAY,CAAC;IAC/C,WAAW,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,KAAK;KACrB;IACD,KAAK,CAAC,OAAO,CAAC,IAAa;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEhD,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAiB;gBACjD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACzD,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAE/B,MAAM,MAAM,GAA4B;gBACtC,IAAI,EAAE,MAAM;aACb,CAAC;YAEF,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAC9C,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAClE,KAAK,CAAC,WAAW,CAClB,CAAC;YACF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;YACnB,CAAC;YAED,MAAM,WAAW,GAAG,SAAS,MAAM,CAAC,MAAM,gBAAgB,CAAC;YAE3D,OAAO;gBACL,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC;gBAChD,iBAAiB,EAAE,MAAM;aAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF,CAAC;AAEF,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,uEAAuE;IACpF,WAAW,EAAE,sBAAsB;IACnC,YAAY;IACZ,eAAe,EAAE,eAAe,CAAC,sBAAsB,CAAC;IACxD,gBAAgB,EAAE,eAAe,CAAC,YAAY,CAAC;IAC/C,WAAW,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,KAAK;KACrB;IACD,KAAK,CAAC,OAAO,CAAC,IAAa;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjD,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,sDAAsD;YACtD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAiB;gBACjD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACzD,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAE/B,MAAM,MAAM,GAA4B;gBACtC,IAAI,EAAE,MAAM;aACb,CAAC;YAEF,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAC9C,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAClE,KAAK,CAAC,WAAW,CAClB,CAAC;YACF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;YACnB,CAAC;YAED,MAAM,WAAW,GAAG,SAAS,MAAM,CAAC,MAAM,iBAAiB,CAAC;YAE5D,OAAO;gBACL,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC;gBAChD,iBAAiB,EAAE,MAAM;aAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF,CAAC;AAEF,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,0EAA0E;IACvF,WAAW,EAAE,sBAAsB;IACnC,YAAY;IACZ,eAAe,EAAE,eAAe,CAAC,sBAAsB,CAAC;IACxD,gBAAgB,EAAE,eAAe,CAAC,YAAY,CAAC;IAC/C,WAAW,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,KAAK;KACrB;IACD,KAAK,CAAC,OAAO,CAAC,IAAa;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjD,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,sDAAsD;YACtD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YAC1B,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAiB;gBACjD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACzD,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAE/B,MAAM,MAAM,GAA4B;gBACtC,IAAI,EAAE,MAAM;aACb,CAAC;YAEF,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAC9C,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAClE,KAAK,CAAC,WAAW,CAClB,CAAC;YACF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;YACnB,CAAC;YAED,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YACxF,MAAM,WAAW,GAAG,SAAS,MAAM,CAAC,MAAM,IAAI,SAAS,WAAW,CAAC;YAEnE,OAAO;gBACL,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC;gBAChD,iBAAiB,EAAE,MAAM;aAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF,CAAC;AAEF,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,uEAAuE;IACpF,WAAW,EAAE,sBAAsB;IACnC,YAAY;IACZ,eAAe,EAAE,eAAe,CAAC,sBAAsB,CAAC;IACxD,gBAAgB,EAAE,eAAe,CAAC,YAAY,CAAC;IAC/C,WAAW,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,KAAK;KACrB;IACD,KAAK,CAAC,OAAO,CAAC,IAAa;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjD,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,sDAAsD;YACtD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAiB;gBACjD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACzD,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAE/B,MAAM,MAAM,GAA4B;gBACtC,IAAI,EAAE,MAAM;aACb,CAAC;YAEF,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAC9C,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAClE,KAAK,CAAC,WAAW,CAClB,CAAC;YACF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;YACnB,CAAC;YAED,MAAM,WAAW,GAAG,SAAS,MAAM,CAAC,MAAM,iBAAiB,CAAC;YAE5D,OAAO;gBACL,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC;gBAChD,iBAAiB,EAAE,MAAM;aAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * nanogpt_scrape_urls tool
3
+ *
4
+ * Scrape content from one or more web URLs.
5
+ */
6
+ import { z } from 'zod';
7
+ export declare const inputSchema: z.ZodObject<{
8
+ urls: z.ZodArray<z.ZodString, "many">;
9
+ mode: z.ZodOptional<z.ZodEnum<["scrape-page", "conversation"]>>;
10
+ stealthMode: z.ZodOptional<z.ZodBoolean>;
11
+ include_raw: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ include_raw: boolean;
14
+ urls: string[];
15
+ mode?: "scrape-page" | "conversation" | undefined;
16
+ stealthMode?: boolean | undefined;
17
+ }, {
18
+ urls: string[];
19
+ include_raw?: boolean | undefined;
20
+ mode?: "scrape-page" | "conversation" | undefined;
21
+ stealthMode?: boolean | undefined;
22
+ }>;
23
+ export declare const outputSchema: z.ZodObject<{
24
+ results: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
25
+ summary: z.ZodRecord<z.ZodString, z.ZodUnknown>;
26
+ raw: z.ZodOptional<z.ZodUnion<[z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>;
27
+ }, "strip", z.ZodTypeAny, {
28
+ results: Record<string, unknown>[];
29
+ summary: Record<string, unknown>;
30
+ raw?: string | Record<string, unknown> | undefined;
31
+ }, {
32
+ results: Record<string, unknown>[];
33
+ summary: Record<string, unknown>;
34
+ raw?: string | Record<string, unknown> | undefined;
35
+ }>;
36
+ export declare const inputJsonSchema: import("../toolUtils.js").JsonSchema;
37
+ export declare const outputJsonSchema: import("../toolUtils.js").JsonSchema;
38
+ export declare const name = "nanogpt_scrape_urls";
39
+ export declare const description = "Scrape content from one or more web URLs. Returns page title, text content, and markdown.";
40
+ export declare const annotations: {
41
+ readOnlyHint: boolean;
42
+ openWorldHint: boolean;
43
+ };
44
+ /**
45
+ * Handler for nanogpt_scrape_urls
46
+ */
47
+ export declare function handler(args: unknown): Promise<{
48
+ content: import("../toolUtils.js").ContentItem[];
49
+ structuredContent: Record<string, unknown>;
50
+ }>;
51
+ //# sourceMappingURL=scrapeUrls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrapeUrls.d.ts","sourceRoot":"","sources":["../../src/tools/scrapeUrls.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;EAKtB,CAAC;AAGH,eAAO,MAAM,YAAY;;;;;;;;;;;;EAIvB,CAAC;AAGH,eAAO,MAAM,eAAe,sCAA+B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,sCAAgC,CAAC;AAG9D,eAAO,MAAM,IAAI,wBAAwB,CAAC;AAC1C,eAAO,MAAM,WAAW,8FACqE,CAAC;AAG9F,eAAO,MAAM,WAAW;;;CAGvB,CAAC;AA2BF;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,OAAO;;;GA0E1C"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * nanogpt_scrape_urls tool
3
+ *
4
+ * Scrape content from one or more web URLs.
5
+ */
6
+ import { z } from 'zod';
7
+ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
8
+ import { requestJson } from '../httpClient.js';
9
+ import { getConfig } from '../config.js';
10
+ import { handleToolError, processRawResponse, buildContent, zodToJsonSchema } from '../toolUtils.js';
11
+ // Input schema
12
+ export const inputSchema = z.object({
13
+ urls: z.array(z.string()).min(1),
14
+ mode: z.enum(['scrape-page', 'conversation']).optional(),
15
+ stealthMode: z.boolean().optional(),
16
+ include_raw: z.boolean().optional().default(false),
17
+ });
18
+ // Output schema
19
+ export const outputSchema = z.object({
20
+ results: z.array(z.record(z.unknown())),
21
+ summary: z.record(z.unknown()),
22
+ raw: z.union([z.record(z.unknown()), z.string()]).optional(),
23
+ });
24
+ // JSON Schemas for MCP registration
25
+ export const inputJsonSchema = zodToJsonSchema(inputSchema);
26
+ export const outputJsonSchema = zodToJsonSchema(outputSchema);
27
+ // Tool metadata
28
+ export const name = 'nanogpt_scrape_urls';
29
+ export const description = 'Scrape content from one or more web URLs. Returns page title, text content, and markdown.';
30
+ // Annotations
31
+ export const annotations = {
32
+ readOnlyHint: false,
33
+ openWorldHint: true,
34
+ };
35
+ /**
36
+ * Handler for nanogpt_scrape_urls
37
+ */
38
+ export async function handler(args) {
39
+ try {
40
+ // Validate input
41
+ const input = inputSchema.parse(args);
42
+ const config = getConfig();
43
+ // Client-side validation for max URLs
44
+ if (input.urls.length > config.scrapeMaxUrls) {
45
+ throw new McpError(ErrorCode.InvalidParams, `Maximum ${config.scrapeMaxUrls} URLs allowed per request. Received ${input.urls.length}.`);
46
+ }
47
+ // Build request body
48
+ const requestBody = {
49
+ urls: input.urls,
50
+ };
51
+ if (input.mode)
52
+ requestBody.mode = input.mode;
53
+ if (input.stealthMode !== undefined)
54
+ requestBody.stealthMode = input.stealthMode;
55
+ // Call NanoGPT API
56
+ const response = await requestJson({
57
+ method: 'POST',
58
+ path: '/api/scrape-urls',
59
+ body: requestBody,
60
+ });
61
+ const data = response.json;
62
+ // Build output
63
+ const output = {
64
+ results: data.results || [],
65
+ summary: data.summary || {},
66
+ };
67
+ // Process raw response
68
+ const { raw, resourceLink } = processRawResponse({ status: response.status, headers: response.headers, body: data }, input.include_raw);
69
+ if (raw !== undefined) {
70
+ output.raw = raw;
71
+ }
72
+ // Build human-readable content
73
+ const results = data.results || [];
74
+ const summary = data.summary || {};
75
+ let displayText = `Scraped ${results.length} URL(s):`;
76
+ for (const result of results) {
77
+ if (result.success) {
78
+ displayText += `\n- ${result.url}: ${result.title || 'No title'}`;
79
+ if (result.content) {
80
+ const preview = result.content.slice(0, 100);
81
+ displayText += ` (${preview}${result.content.length > 100 ? '...' : ''})`;
82
+ }
83
+ }
84
+ else {
85
+ displayText += `\n- ${result.url}: FAILED - ${result.error || 'Unknown error'}`;
86
+ }
87
+ }
88
+ if (summary.successful !== undefined && summary.failed !== undefined) {
89
+ displayText += `\n\nSummary: ${summary.successful} succeeded, ${summary.failed} failed`;
90
+ }
91
+ return {
92
+ content: buildContent(displayText, resourceLink),
93
+ structuredContent: output,
94
+ };
95
+ }
96
+ catch (err) {
97
+ return handleToolError(err);
98
+ }
99
+ }
100
+ //# sourceMappingURL=scrapeUrls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrapeUrls.js","sourceRoot":"","sources":["../../src/tools/scrapeUrls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * nanogpt_web_search tool
3
+ *
4
+ * Search the web for current information.
5
+ */
6
+ import { z } from 'zod';
7
+ export declare const inputSchema: z.ZodObject<{
8
+ query: z.ZodString;
9
+ depth: z.ZodOptional<z.ZodEnum<["standard", "deep"]>>;
10
+ outputType: z.ZodOptional<z.ZodEnum<["searchResults", "sourcedAnswer", "structured"]>>;
11
+ structuredOutputSchema: z.ZodOptional<z.ZodString>;
12
+ includeImages: z.ZodOptional<z.ZodBoolean>;
13
+ fromDate: z.ZodOptional<z.ZodString>;
14
+ toDate: z.ZodOptional<z.ZodString>;
15
+ excludeDomains: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
16
+ includeDomains: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
17
+ include_raw: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ query: string;
20
+ include_raw: boolean;
21
+ depth?: "standard" | "deep" | undefined;
22
+ outputType?: "searchResults" | "sourcedAnswer" | "structured" | undefined;
23
+ structuredOutputSchema?: string | undefined;
24
+ includeImages?: boolean | undefined;
25
+ fromDate?: string | undefined;
26
+ toDate?: string | undefined;
27
+ excludeDomains?: string[] | undefined;
28
+ includeDomains?: string[] | undefined;
29
+ }, {
30
+ query: string;
31
+ include_raw?: boolean | undefined;
32
+ depth?: "standard" | "deep" | undefined;
33
+ outputType?: "searchResults" | "sourcedAnswer" | "structured" | undefined;
34
+ structuredOutputSchema?: string | undefined;
35
+ includeImages?: boolean | undefined;
36
+ fromDate?: string | undefined;
37
+ toDate?: string | undefined;
38
+ excludeDomains?: string[] | undefined;
39
+ includeDomains?: string[] | undefined;
40
+ }>;
41
+ export declare const outputSchema: z.ZodObject<{
42
+ data: z.ZodUnknown;
43
+ metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
44
+ raw: z.ZodOptional<z.ZodUnion<[z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ metadata: Record<string, unknown>;
47
+ raw?: string | Record<string, unknown> | undefined;
48
+ data?: unknown;
49
+ }, {
50
+ metadata: Record<string, unknown>;
51
+ raw?: string | Record<string, unknown> | undefined;
52
+ data?: unknown;
53
+ }>;
54
+ export declare const inputJsonSchema: import("../toolUtils.js").JsonSchema;
55
+ export declare const outputJsonSchema: import("../toolUtils.js").JsonSchema;
56
+ export declare const name = "nanogpt_web_search";
57
+ export declare const description = "Search the web for current information. Returns search results, sourced answers, or structured data.";
58
+ export declare const annotations: {
59
+ readOnlyHint: boolean;
60
+ openWorldHint: boolean;
61
+ };
62
+ /**
63
+ * Handler for nanogpt_web_search
64
+ */
65
+ export declare function handler(args: unknown): Promise<{
66
+ content: import("../toolUtils.js").ContentItem[];
67
+ structuredContent: Record<string, unknown>;
68
+ }>;
69
+ //# sourceMappingURL=webSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webSearch.d.ts","sourceRoot":"","sources":["../../src/tools/webSearch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWtB,CAAC;AAGH,eAAO,MAAM,YAAY;;;;;;;;;;;;EAIvB,CAAC;AAGH,eAAO,MAAM,eAAe,sCAA+B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,sCAAgC,CAAC;AAG9D,eAAO,MAAM,IAAI,uBAAuB,CAAC;AACzC,eAAO,MAAM,WAAW,yGACgF,CAAC;AAGzG,eAAO,MAAM,WAAW;;;CAGvB,CAAC;AAcF;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,OAAO;;;GA6E1C"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * nanogpt_web_search tool
3
+ *
4
+ * Search the web for current information.
5
+ */
6
+ import { z } from 'zod';
7
+ import { requestJson } from '../httpClient.js';
8
+ import { handleToolError, processRawResponse, buildContent, zodToJsonSchema } from '../toolUtils.js';
9
+ // Input schema
10
+ export const inputSchema = z.object({
11
+ query: z.string().min(1),
12
+ depth: z.enum(['standard', 'deep']).optional(),
13
+ outputType: z.enum(['searchResults', 'sourcedAnswer', 'structured']).optional(),
14
+ structuredOutputSchema: z.string().optional(),
15
+ includeImages: z.boolean().optional(),
16
+ fromDate: z.string().optional(),
17
+ toDate: z.string().optional(),
18
+ excludeDomains: z.array(z.string()).optional(),
19
+ includeDomains: z.array(z.string()).optional(),
20
+ include_raw: z.boolean().optional().default(false),
21
+ });
22
+ // Output schema
23
+ export const outputSchema = z.object({
24
+ data: z.unknown(),
25
+ metadata: z.record(z.unknown()),
26
+ raw: z.union([z.record(z.unknown()), z.string()]).optional(),
27
+ });
28
+ // JSON Schemas for MCP registration
29
+ export const inputJsonSchema = zodToJsonSchema(inputSchema);
30
+ export const outputJsonSchema = zodToJsonSchema(outputSchema);
31
+ // Tool metadata
32
+ export const name = 'nanogpt_web_search';
33
+ export const description = 'Search the web for current information. Returns search results, sourced answers, or structured data.';
34
+ // Annotations
35
+ export const annotations = {
36
+ readOnlyHint: false,
37
+ openWorldHint: true,
38
+ };
39
+ /**
40
+ * Handler for nanogpt_web_search
41
+ */
42
+ export async function handler(args) {
43
+ try {
44
+ // Validate input
45
+ const input = inputSchema.parse(args);
46
+ // Build request body
47
+ const requestBody = {
48
+ query: input.query,
49
+ };
50
+ if (input.depth)
51
+ requestBody.depth = input.depth;
52
+ if (input.outputType)
53
+ requestBody.outputType = input.outputType;
54
+ if (input.structuredOutputSchema)
55
+ requestBody.structuredOutputSchema = input.structuredOutputSchema;
56
+ if (input.includeImages !== undefined)
57
+ requestBody.includeImages = input.includeImages;
58
+ if (input.fromDate)
59
+ requestBody.fromDate = input.fromDate;
60
+ if (input.toDate)
61
+ requestBody.toDate = input.toDate;
62
+ if (input.excludeDomains)
63
+ requestBody.excludeDomains = input.excludeDomains;
64
+ if (input.includeDomains)
65
+ requestBody.includeDomains = input.includeDomains;
66
+ // Call NanoGPT API - web search can take up to 5 minutes
67
+ const response = await requestJson({
68
+ method: 'POST',
69
+ path: '/api/web',
70
+ body: requestBody,
71
+ timeoutMs: 300000, // 5 minutes
72
+ });
73
+ const data = response.json;
74
+ // Build output
75
+ const output = {
76
+ data: data.data,
77
+ metadata: data.metadata || {},
78
+ };
79
+ // Process raw response
80
+ const { raw, resourceLink } = processRawResponse({ status: response.status, headers: response.headers, body: data }, input.include_raw);
81
+ if (raw !== undefined) {
82
+ output.raw = raw;
83
+ }
84
+ // Build human-readable content
85
+ let displayText;
86
+ const resultData = data.data;
87
+ if (Array.isArray(resultData)) {
88
+ displayText = `Found ${resultData.length} result(s) for: "${input.query}"`;
89
+ // Add first few results as preview
90
+ const preview = resultData.slice(0, 3);
91
+ for (const item of preview) {
92
+ if (typeof item === 'object' && item !== null) {
93
+ const obj = item;
94
+ if (obj.title) {
95
+ displayText += `\n- ${obj.title}`;
96
+ if (obj.url)
97
+ displayText += ` (${obj.url})`;
98
+ }
99
+ }
100
+ }
101
+ if (resultData.length > 3) {
102
+ displayText += `\n... and ${resultData.length - 3} more`;
103
+ }
104
+ }
105
+ else if (typeof resultData === 'object' && resultData !== null) {
106
+ displayText = `Search completed for: "${input.query}"\n${JSON.stringify(resultData, null, 2).slice(0, 500)}`;
107
+ }
108
+ else {
109
+ displayText = `Search completed for: "${input.query}"`;
110
+ }
111
+ return {
112
+ content: buildContent(displayText, resourceLink),
113
+ structuredContent: output,
114
+ };
115
+ }
116
+ catch (err) {
117
+ return handleToolError(err);
118
+ }
119
+ }
120
+ //# sourceMappingURL=webSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webSearch.js","sourceRoot":"","sources":["../../src/tools/webSearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * nanogpt_youtube_transcribe tool
3
+ *
4
+ * Get transcripts from YouTube videos.
5
+ */
6
+ import { z } from 'zod';
7
+ export declare const inputSchema: z.ZodObject<{
8
+ urls: z.ZodArray<z.ZodString, "many">;
9
+ include_raw: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ include_raw: boolean;
12
+ urls: string[];
13
+ }, {
14
+ urls: string[];
15
+ include_raw?: boolean | undefined;
16
+ }>;
17
+ export declare const outputSchema: z.ZodObject<{
18
+ transcripts: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
19
+ summary: z.ZodRecord<z.ZodString, z.ZodUnknown>;
20
+ raw: z.ZodOptional<z.ZodUnion<[z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ summary: Record<string, unknown>;
23
+ transcripts: Record<string, unknown>[];
24
+ raw?: string | Record<string, unknown> | undefined;
25
+ }, {
26
+ summary: Record<string, unknown>;
27
+ transcripts: Record<string, unknown>[];
28
+ raw?: string | Record<string, unknown> | undefined;
29
+ }>;
30
+ export declare const inputJsonSchema: import("../toolUtils.js").JsonSchema;
31
+ export declare const outputJsonSchema: import("../toolUtils.js").JsonSchema;
32
+ export declare const name = "nanogpt_youtube_transcribe";
33
+ export declare const description = "Get transcripts from YouTube videos. Supports up to 10 URLs per request.";
34
+ export declare const annotations: {
35
+ readOnlyHint: boolean;
36
+ openWorldHint: boolean;
37
+ };
38
+ /**
39
+ * Handler for nanogpt_youtube_transcribe
40
+ */
41
+ export declare function handler(args: unknown): Promise<{
42
+ content: import("../toolUtils.js").ContentItem[];
43
+ structuredContent: Record<string, unknown>;
44
+ }>;
45
+ //# sourceMappingURL=youtubeTranscribe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtubeTranscribe.d.ts","sourceRoot":"","sources":["../../src/tools/youtubeTranscribe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,WAAW;;;;;;;;;EAGtB,CAAC;AAGH,eAAO,MAAM,YAAY;;;;;;;;;;;;EAIvB,CAAC;AAGH,eAAO,MAAM,eAAe,sCAA+B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,sCAAgC,CAAC;AAG9D,eAAO,MAAM,IAAI,+BAA+B,CAAC;AACjD,eAAO,MAAM,WAAW,6EAA6E,CAAC;AAGtG,eAAO,MAAM,WAAW;;;CAGvB,CAAC;AAqBF;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,OAAO;;;GAgE1C"}