@cogitator-ai/express 0.2.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 (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +346 -0
  3. package/dist/index.d.ts +9 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +7 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/middleware/auth.d.ts +4 -0
  8. package/dist/middleware/auth.d.ts.map +1 -0
  9. package/dist/middleware/auth.js +26 -0
  10. package/dist/middleware/auth.js.map +1 -0
  11. package/dist/middleware/cors.d.ts +4 -0
  12. package/dist/middleware/cors.d.ts.map +1 -0
  13. package/dist/middleware/cors.js +42 -0
  14. package/dist/middleware/cors.js.map +1 -0
  15. package/dist/middleware/error-handler.d.ts +4 -0
  16. package/dist/middleware/error-handler.d.ts.map +1 -0
  17. package/dist/middleware/error-handler.js +32 -0
  18. package/dist/middleware/error-handler.js.map +1 -0
  19. package/dist/middleware/index.d.ts +5 -0
  20. package/dist/middleware/index.d.ts.map +1 -0
  21. package/dist/middleware/index.js +5 -0
  22. package/dist/middleware/index.js.map +1 -0
  23. package/dist/middleware/rate-limit.d.ts +4 -0
  24. package/dist/middleware/rate-limit.d.ts.map +1 -0
  25. package/dist/middleware/rate-limit.js +50 -0
  26. package/dist/middleware/rate-limit.js.map +1 -0
  27. package/dist/routes/agents.d.ts +4 -0
  28. package/dist/routes/agents.d.ts.map +1 -0
  29. package/dist/routes/agents.js +116 -0
  30. package/dist/routes/agents.js.map +1 -0
  31. package/dist/routes/health.d.ts +4 -0
  32. package/dist/routes/health.d.ts.map +1 -0
  33. package/dist/routes/health.js +18 -0
  34. package/dist/routes/health.js.map +1 -0
  35. package/dist/routes/index.d.ts +7 -0
  36. package/dist/routes/index.d.ts.map +1 -0
  37. package/dist/routes/index.js +7 -0
  38. package/dist/routes/index.js.map +1 -0
  39. package/dist/routes/swarms.d.ts +4 -0
  40. package/dist/routes/swarms.d.ts.map +1 -0
  41. package/dist/routes/swarms.js +179 -0
  42. package/dist/routes/swarms.js.map +1 -0
  43. package/dist/routes/threads.d.ts +4 -0
  44. package/dist/routes/threads.d.ts.map +1 -0
  45. package/dist/routes/threads.js +108 -0
  46. package/dist/routes/threads.js.map +1 -0
  47. package/dist/routes/tools.d.ts +4 -0
  48. package/dist/routes/tools.d.ts.map +1 -0
  49. package/dist/routes/tools.js +29 -0
  50. package/dist/routes/tools.js.map +1 -0
  51. package/dist/routes/workflows.d.ts +4 -0
  52. package/dist/routes/workflows.d.ts.map +1 -0
  53. package/dist/routes/workflows.js +110 -0
  54. package/dist/routes/workflows.js.map +1 -0
  55. package/dist/server.d.ts +15 -0
  56. package/dist/server.d.ts.map +1 -0
  57. package/dist/server.js +90 -0
  58. package/dist/server.js.map +1 -0
  59. package/dist/streaming/express-stream-writer.d.ts +24 -0
  60. package/dist/streaming/express-stream-writer.d.ts.map +1 -0
  61. package/dist/streaming/express-stream-writer.js +73 -0
  62. package/dist/streaming/express-stream-writer.js.map +1 -0
  63. package/dist/streaming/helpers.d.ts +4 -0
  64. package/dist/streaming/helpers.d.ts.map +1 -0
  65. package/dist/streaming/helpers.js +14 -0
  66. package/dist/streaming/helpers.js.map +1 -0
  67. package/dist/streaming/index.d.ts +4 -0
  68. package/dist/streaming/index.d.ts.map +1 -0
  69. package/dist/streaming/index.js +4 -0
  70. package/dist/streaming/index.js.map +1 -0
  71. package/dist/streaming/protocol.d.ts +76 -0
  72. package/dist/streaming/protocol.d.ts.map +1 -0
  73. package/dist/streaming/protocol.js +37 -0
  74. package/dist/streaming/protocol.js.map +1 -0
  75. package/dist/swagger/generator.d.ts +3 -0
  76. package/dist/swagger/generator.d.ts.map +1 -0
  77. package/dist/swagger/generator.js +486 -0
  78. package/dist/swagger/generator.js.map +1 -0
  79. package/dist/swagger/index.d.ts +3 -0
  80. package/dist/swagger/index.d.ts.map +1 -0
  81. package/dist/swagger/index.js +3 -0
  82. package/dist/swagger/index.js.map +1 -0
  83. package/dist/swagger/ui.d.ts +4 -0
  84. package/dist/swagger/ui.d.ts.map +1 -0
  85. package/dist/swagger/ui.js +39 -0
  86. package/dist/swagger/ui.js.map +1 -0
  87. package/dist/types.d.ts +246 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +2 -0
  90. package/dist/types.js.map +1 -0
  91. package/dist/websocket/index.d.ts +2 -0
  92. package/dist/websocket/index.d.ts.map +1 -0
  93. package/dist/websocket/index.js +2 -0
  94. package/dist/websocket/index.js.map +1 -0
  95. package/dist/websocket/ws-handler.d.ts +6 -0
  96. package/dist/websocket/ws-handler.d.ts.map +1 -0
  97. package/dist/websocket/ws-handler.js +145 -0
  98. package/dist/websocket/ws-handler.js.map +1 -0
  99. package/package.json +62 -0
@@ -0,0 +1,486 @@
1
+ export function generateOpenAPISpec(ctx, config) {
2
+ const spec = {
3
+ openapi: '3.0.3',
4
+ info: {
5
+ title: config.title || 'Cogitator API',
6
+ description: config.description || 'AI Agent Runtime API',
7
+ version: config.version || '1.0.0',
8
+ contact: config.contact,
9
+ license: config.license,
10
+ },
11
+ servers: config.servers || [{ url: ctx.config.basePath, description: 'Default server' }],
12
+ tags: [
13
+ { name: 'health', description: 'Health check endpoints' },
14
+ { name: 'agents', description: 'Agent execution endpoints' },
15
+ { name: 'threads', description: 'Thread/conversation management' },
16
+ { name: 'tools', description: 'Tool discovery' },
17
+ { name: 'workflows', description: 'Workflow execution' },
18
+ { name: 'swarms', description: 'Multi-agent swarm execution' },
19
+ ],
20
+ paths: {},
21
+ components: {
22
+ schemas: generateSchemas(),
23
+ securitySchemes: {
24
+ bearerAuth: {
25
+ type: 'http',
26
+ scheme: 'bearer',
27
+ },
28
+ },
29
+ },
30
+ };
31
+ spec.paths['/health'] = {
32
+ get: {
33
+ tags: ['health'],
34
+ summary: 'Health check',
35
+ responses: {
36
+ 200: {
37
+ description: 'Service is healthy',
38
+ content: {
39
+ 'application/json': {
40
+ schema: { $ref: '#/components/schemas/HealthResponse' },
41
+ },
42
+ },
43
+ },
44
+ },
45
+ },
46
+ };
47
+ spec.paths['/ready'] = {
48
+ get: {
49
+ tags: ['health'],
50
+ summary: 'Readiness check',
51
+ responses: {
52
+ 200: { description: 'Service is ready' },
53
+ },
54
+ },
55
+ };
56
+ spec.paths['/agents'] = {
57
+ get: {
58
+ tags: ['agents'],
59
+ summary: 'List all agents',
60
+ responses: {
61
+ 200: {
62
+ description: 'List of agents',
63
+ content: {
64
+ 'application/json': {
65
+ schema: { $ref: '#/components/schemas/AgentListResponse' },
66
+ },
67
+ },
68
+ },
69
+ },
70
+ },
71
+ };
72
+ for (const [name] of Object.entries(ctx.agents)) {
73
+ spec.paths[`/agents/${name}/run`] = {
74
+ post: {
75
+ tags: ['agents'],
76
+ summary: `Run agent: ${name}`,
77
+ requestBody: {
78
+ required: true,
79
+ content: {
80
+ 'application/json': {
81
+ schema: { $ref: '#/components/schemas/AgentRunRequest' },
82
+ },
83
+ },
84
+ },
85
+ responses: {
86
+ 200: {
87
+ description: 'Agent execution result',
88
+ content: {
89
+ 'application/json': {
90
+ schema: { $ref: '#/components/schemas/AgentRunResponse' },
91
+ },
92
+ },
93
+ },
94
+ 404: { description: 'Agent not found' },
95
+ },
96
+ },
97
+ };
98
+ spec.paths[`/agents/${name}/stream`] = {
99
+ post: {
100
+ tags: ['agents'],
101
+ summary: `Stream agent: ${name}`,
102
+ requestBody: {
103
+ required: true,
104
+ content: {
105
+ 'application/json': {
106
+ schema: { $ref: '#/components/schemas/AgentRunRequest' },
107
+ },
108
+ },
109
+ },
110
+ responses: {
111
+ 200: {
112
+ description: 'SSE stream',
113
+ content: { 'text/event-stream': {} },
114
+ },
115
+ },
116
+ },
117
+ };
118
+ }
119
+ spec.paths['/threads/{id}'] = {
120
+ get: {
121
+ tags: ['threads'],
122
+ summary: 'Get thread by ID',
123
+ parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],
124
+ responses: {
125
+ 200: {
126
+ description: 'Thread data',
127
+ content: {
128
+ 'application/json': {
129
+ schema: { $ref: '#/components/schemas/ThreadResponse' },
130
+ },
131
+ },
132
+ },
133
+ 503: { description: 'Memory not configured' },
134
+ },
135
+ },
136
+ delete: {
137
+ tags: ['threads'],
138
+ summary: 'Delete thread',
139
+ parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],
140
+ responses: {
141
+ 204: { description: 'Thread deleted' },
142
+ },
143
+ },
144
+ };
145
+ spec.paths['/threads/{id}/messages'] = {
146
+ post: {
147
+ tags: ['threads'],
148
+ summary: 'Add message to thread',
149
+ parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],
150
+ requestBody: {
151
+ required: true,
152
+ content: {
153
+ 'application/json': {
154
+ schema: { $ref: '#/components/schemas/AddMessageRequest' },
155
+ },
156
+ },
157
+ },
158
+ responses: {
159
+ 201: { description: 'Message added' },
160
+ },
161
+ },
162
+ };
163
+ spec.paths['/tools'] = {
164
+ get: {
165
+ tags: ['tools'],
166
+ summary: 'List all tools',
167
+ responses: {
168
+ 200: {
169
+ description: 'List of tools',
170
+ content: {
171
+ 'application/json': {
172
+ schema: { $ref: '#/components/schemas/ToolListResponse' },
173
+ },
174
+ },
175
+ },
176
+ },
177
+ },
178
+ };
179
+ spec.paths['/workflows'] = {
180
+ get: {
181
+ tags: ['workflows'],
182
+ summary: 'List all workflows',
183
+ responses: {
184
+ 200: {
185
+ description: 'List of workflows',
186
+ content: {
187
+ 'application/json': {
188
+ schema: { $ref: '#/components/schemas/WorkflowListResponse' },
189
+ },
190
+ },
191
+ },
192
+ },
193
+ },
194
+ };
195
+ for (const [name] of Object.entries(ctx.workflows)) {
196
+ spec.paths[`/workflows/${name}/run`] = {
197
+ post: {
198
+ tags: ['workflows'],
199
+ summary: `Run workflow: ${name}`,
200
+ requestBody: {
201
+ content: {
202
+ 'application/json': {
203
+ schema: { $ref: '#/components/schemas/WorkflowRunRequest' },
204
+ },
205
+ },
206
+ },
207
+ responses: {
208
+ 200: {
209
+ description: 'Workflow result',
210
+ content: {
211
+ 'application/json': {
212
+ schema: { $ref: '#/components/schemas/WorkflowRunResponse' },
213
+ },
214
+ },
215
+ },
216
+ },
217
+ },
218
+ };
219
+ spec.paths[`/workflows/${name}/stream`] = {
220
+ post: {
221
+ tags: ['workflows'],
222
+ summary: `Stream workflow: ${name}`,
223
+ responses: {
224
+ 200: {
225
+ description: 'SSE stream',
226
+ content: { 'text/event-stream': {} },
227
+ },
228
+ },
229
+ },
230
+ };
231
+ }
232
+ spec.paths['/swarms'] = {
233
+ get: {
234
+ tags: ['swarms'],
235
+ summary: 'List all swarms',
236
+ responses: {
237
+ 200: {
238
+ description: 'List of swarms',
239
+ content: {
240
+ 'application/json': {
241
+ schema: { $ref: '#/components/schemas/SwarmListResponse' },
242
+ },
243
+ },
244
+ },
245
+ },
246
+ },
247
+ };
248
+ for (const [name] of Object.entries(ctx.swarms)) {
249
+ spec.paths[`/swarms/${name}/run`] = {
250
+ post: {
251
+ tags: ['swarms'],
252
+ summary: `Run swarm: ${name}`,
253
+ requestBody: {
254
+ required: true,
255
+ content: {
256
+ 'application/json': {
257
+ schema: { $ref: '#/components/schemas/SwarmRunRequest' },
258
+ },
259
+ },
260
+ },
261
+ responses: {
262
+ 200: {
263
+ description: 'Swarm result',
264
+ content: {
265
+ 'application/json': {
266
+ schema: { $ref: '#/components/schemas/SwarmRunResponse' },
267
+ },
268
+ },
269
+ },
270
+ },
271
+ },
272
+ };
273
+ spec.paths[`/swarms/${name}/stream`] = {
274
+ post: {
275
+ tags: ['swarms'],
276
+ summary: `Stream swarm: ${name}`,
277
+ responses: {
278
+ 200: {
279
+ description: 'SSE stream',
280
+ content: { 'text/event-stream': {} },
281
+ },
282
+ },
283
+ },
284
+ };
285
+ spec.paths[`/swarms/${name}/blackboard`] = {
286
+ get: {
287
+ tags: ['swarms'],
288
+ summary: `Get blackboard: ${name}`,
289
+ responses: {
290
+ 200: {
291
+ description: 'Blackboard state',
292
+ content: {
293
+ 'application/json': {
294
+ schema: { $ref: '#/components/schemas/BlackboardResponse' },
295
+ },
296
+ },
297
+ },
298
+ },
299
+ },
300
+ };
301
+ }
302
+ return spec;
303
+ }
304
+ function generateSchemas() {
305
+ return {
306
+ HealthResponse: {
307
+ type: 'object',
308
+ properties: {
309
+ status: { type: 'string', enum: ['ok', 'degraded', 'error'] },
310
+ uptime: { type: 'number' },
311
+ timestamp: { type: 'number' },
312
+ },
313
+ },
314
+ AgentListResponse: {
315
+ type: 'object',
316
+ properties: {
317
+ agents: {
318
+ type: 'array',
319
+ items: {
320
+ type: 'object',
321
+ properties: {
322
+ name: { type: 'string' },
323
+ description: { type: 'string' },
324
+ tools: { type: 'array', items: { type: 'string' } },
325
+ },
326
+ },
327
+ },
328
+ },
329
+ },
330
+ AgentRunRequest: {
331
+ type: 'object',
332
+ required: ['input'],
333
+ properties: {
334
+ input: { type: 'string' },
335
+ context: { type: 'object' },
336
+ threadId: { type: 'string' },
337
+ },
338
+ },
339
+ AgentRunResponse: {
340
+ type: 'object',
341
+ properties: {
342
+ output: { type: 'string' },
343
+ threadId: { type: 'string' },
344
+ usage: {
345
+ type: 'object',
346
+ properties: {
347
+ inputTokens: { type: 'number' },
348
+ outputTokens: { type: 'number' },
349
+ totalTokens: { type: 'number' },
350
+ },
351
+ },
352
+ toolCalls: { type: 'array' },
353
+ },
354
+ },
355
+ ThreadResponse: {
356
+ type: 'object',
357
+ properties: {
358
+ id: { type: 'string' },
359
+ messages: { type: 'array' },
360
+ createdAt: { type: 'number' },
361
+ updatedAt: { type: 'number' },
362
+ },
363
+ },
364
+ AddMessageRequest: {
365
+ type: 'object',
366
+ required: ['role', 'content'],
367
+ properties: {
368
+ role: { type: 'string', enum: ['user', 'assistant', 'system'] },
369
+ content: { type: 'string' },
370
+ metadata: { type: 'object' },
371
+ },
372
+ },
373
+ ToolListResponse: {
374
+ type: 'object',
375
+ properties: {
376
+ tools: {
377
+ type: 'array',
378
+ items: {
379
+ type: 'object',
380
+ properties: {
381
+ name: { type: 'string' },
382
+ description: { type: 'string' },
383
+ parameters: { type: 'object' },
384
+ },
385
+ },
386
+ },
387
+ },
388
+ },
389
+ WorkflowListResponse: {
390
+ type: 'object',
391
+ properties: {
392
+ workflows: {
393
+ type: 'array',
394
+ items: {
395
+ type: 'object',
396
+ properties: {
397
+ name: { type: 'string' },
398
+ entryPoint: { type: 'string' },
399
+ nodes: { type: 'array', items: { type: 'string' } },
400
+ },
401
+ },
402
+ },
403
+ },
404
+ },
405
+ WorkflowRunRequest: {
406
+ type: 'object',
407
+ properties: {
408
+ input: { type: 'object' },
409
+ options: { type: 'object' },
410
+ },
411
+ },
412
+ WorkflowRunResponse: {
413
+ type: 'object',
414
+ properties: {
415
+ workflowId: { type: 'string' },
416
+ workflowName: { type: 'string' },
417
+ state: { type: 'object' },
418
+ duration: { type: 'number' },
419
+ nodeResults: { type: 'object' },
420
+ },
421
+ },
422
+ SwarmListResponse: {
423
+ type: 'object',
424
+ properties: {
425
+ swarms: {
426
+ type: 'array',
427
+ items: {
428
+ type: 'object',
429
+ properties: {
430
+ name: { type: 'string' },
431
+ strategy: { type: 'string' },
432
+ agents: { type: 'array', items: { type: 'string' } },
433
+ },
434
+ },
435
+ },
436
+ },
437
+ },
438
+ SwarmRunRequest: {
439
+ type: 'object',
440
+ required: ['input'],
441
+ properties: {
442
+ input: { type: 'string' },
443
+ context: { type: 'object' },
444
+ threadId: { type: 'string' },
445
+ timeout: { type: 'number' },
446
+ },
447
+ },
448
+ SwarmRunResponse: {
449
+ type: 'object',
450
+ properties: {
451
+ swarmId: { type: 'string' },
452
+ swarmName: { type: 'string' },
453
+ strategy: { type: 'string' },
454
+ output: {},
455
+ agentResults: { type: 'object' },
456
+ usage: {
457
+ type: 'object',
458
+ properties: {
459
+ totalTokens: { type: 'number' },
460
+ totalCost: { type: 'number' },
461
+ elapsedTime: { type: 'number' },
462
+ },
463
+ },
464
+ },
465
+ },
466
+ BlackboardResponse: {
467
+ type: 'object',
468
+ properties: {
469
+ sections: { type: 'object' },
470
+ },
471
+ },
472
+ ErrorResponse: {
473
+ type: 'object',
474
+ properties: {
475
+ error: {
476
+ type: 'object',
477
+ properties: {
478
+ message: { type: 'string' },
479
+ code: { type: 'string' },
480
+ },
481
+ },
482
+ },
483
+ },
484
+ };
485
+ }
486
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/swagger/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { generateOpenAPISpec } from './generator.js';
2
+ export { serveSwaggerUI } from './ui.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { generateOpenAPISpec } from './generator.js';
2
+ export { serveSwaggerUI } from './ui.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Request, Response } from 'express';
2
+ import type { OpenAPISpec } from '../types.js';
3
+ export declare function serveSwaggerUI(spec: OpenAPISpec): (_req: Request, res: Response) => void;
4
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/swagger/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,IACtC,MAAM,OAAO,EAAE,KAAK,QAAQ,UAqCrC"}
@@ -0,0 +1,39 @@
1
+ export function serveSwaggerUI(spec) {
2
+ return (_req, res) => {
3
+ const html = `
4
+ <!DOCTYPE html>
5
+ <html lang="en">
6
+ <head>
7
+ <meta charset="UTF-8">
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
+ <title>${spec.info.title} - API Documentation</title>
10
+ <link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui.css">
11
+ <style>
12
+ body { margin: 0; padding: 0; }
13
+ .swagger-ui .topbar { display: none; }
14
+ </style>
15
+ </head>
16
+ <body>
17
+ <div id="swagger-ui"></div>
18
+ <script src="https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-bundle.js"></script>
19
+ <script>
20
+ window.onload = () => {
21
+ SwaggerUIBundle({
22
+ spec: ${JSON.stringify(spec)},
23
+ dom_id: '#swagger-ui',
24
+ deepLinking: true,
25
+ presets: [
26
+ SwaggerUIBundle.presets.apis,
27
+ SwaggerUIBundle.SwaggerUIStandalonePreset
28
+ ],
29
+ layout: "BaseLayout"
30
+ });
31
+ };
32
+ </script>
33
+ </body>
34
+ </html>`;
35
+ res.setHeader('Content-Type', 'text/html');
36
+ res.send(html);
37
+ };
38
+ }
39
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/swagger/ui.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC9C,OAAO,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QACtC,MAAM,IAAI,GAAG;;;;;;WAMN,IAAI,CAAC,IAAI,CAAC,KAAK;;;;;;;;;;;;;gBAaV,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;;;;;;;;;;;QAY5B,CAAC;QAEL,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC"}