opencode-agora 0.2.2

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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +309 -0
  3. package/dist/api.d.ts +69 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +109 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/cli/app.d.ts +22 -0
  8. package/dist/cli/app.d.ts.map +1 -0
  9. package/dist/cli/app.js +1111 -0
  10. package/dist/cli/app.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +10 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config-files.d.ts +27 -0
  16. package/dist/config-files.d.ts.map +1 -0
  17. package/dist/config-files.js +78 -0
  18. package/dist/config-files.js.map +1 -0
  19. package/dist/config.d.ts +24 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +73 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/data.d.ts +8 -0
  24. package/dist/data.d.ts.map +1 -0
  25. package/dist/data.js +1123 -0
  26. package/dist/data.js.map +1 -0
  27. package/dist/format.d.ts +40 -0
  28. package/dist/format.d.ts.map +1 -0
  29. package/dist/format.js +127 -0
  30. package/dist/format.js.map +1 -0
  31. package/dist/index.d.ts +4 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +430 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/init.d.ts +22 -0
  36. package/dist/init.d.ts.map +1 -0
  37. package/dist/init.js +199 -0
  38. package/dist/init.js.map +1 -0
  39. package/dist/live.d.ts +100 -0
  40. package/dist/live.d.ts.map +1 -0
  41. package/dist/live.js +443 -0
  42. package/dist/live.js.map +1 -0
  43. package/dist/logger.d.ts +20 -0
  44. package/dist/logger.d.ts.map +1 -0
  45. package/dist/logger.js +59 -0
  46. package/dist/logger.js.map +1 -0
  47. package/dist/marketplace.d.ts +51 -0
  48. package/dist/marketplace.d.ts.map +1 -0
  49. package/dist/marketplace.js +219 -0
  50. package/dist/marketplace.js.map +1 -0
  51. package/dist/state.d.ts +46 -0
  52. package/dist/state.d.ts.map +1 -0
  53. package/dist/state.js +169 -0
  54. package/dist/state.js.map +1 -0
  55. package/dist/types.d.ts +70 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +2 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +57 -0
package/dist/index.js ADDED
@@ -0,0 +1,430 @@
1
+ import { tool } from '@opencode-ai/plugin';
2
+ import { sampleDiscussions, sampleTutorials } from './data.js';
3
+ import { createInstallPlan, findMarketplaceItem, getTrendingItems, getTrendingTags, searchMarketplaceItems } from './marketplace.js';
4
+ import { formatConfigJson } from './config.js';
5
+ const AGORA_VERSION = '0.1.0';
6
+ export const Agora = async (_ctx) => {
7
+ return {
8
+ tool: {
9
+ agora_search: tool({
10
+ description: 'Search Agora marketplace for packages, workflows, and prompts',
11
+ args: {
12
+ query: tool.schema.string().describe('Search query'),
13
+ category: tool.schema.string().optional().describe('Filter by category: mcp, prompt, workflow, all')
14
+ },
15
+ async execute(args, _context) {
16
+ const query = args.query;
17
+ const category = args.category || 'all';
18
+ const filtered = searchMarketplaceItems({ query, category, limit: 10 });
19
+ if (filtered.length === 0) {
20
+ return `No results found for "${query}". Try a different search term.`;
21
+ }
22
+ return `🔍 **Search Results** for "${query}" (${filtered.length} found)
23
+
24
+ ${filtered.map((item, i) => {
25
+ const shortDesc = (item.description || '').slice(0, 60) + (item.description?.length > 60 ? '...' : '');
26
+ const icon = item.kind === 'package' ? '📦' : '🔄';
27
+ return `${i + 1}. **${item.name}** ${icon}
28
+ ${shortDesc}
29
+ ⭐ ${item.stars || 0} · 📥 ${item.installs || 0} · by ${item.author}`;
30
+ }).join('\n\n')}
31
+
32
+ ---
33
+ Run \`/agora browse <name>\` for details or \`/agora install <id>\` to install.`;
34
+ }
35
+ }),
36
+ agora_browse_category: tool({
37
+ description: 'Browse packages by category',
38
+ args: {
39
+ category: tool.schema.string().describe('Category: mcp, prompt, workflow, all'),
40
+ limit: tool.schema.number().optional().describe('Number to show (default: 10)')
41
+ },
42
+ async execute(args) {
43
+ const category = args.category || 'all';
44
+ const limit = args.limit || 10;
45
+ const items = searchMarketplaceItems({ category, limit });
46
+ const title = category === 'workflow' ? '🔄 Workflows' :
47
+ category === 'prompt' ? '💬 Prompts' :
48
+ category === 'all' ? '🏛️ Marketplace' : '📦 Packages';
49
+ if (items.length === 0) {
50
+ return `No items in category "${category}". Try: mcp, workflow, prompt`;
51
+ }
52
+ return `${title} (${items.length} shown)
53
+
54
+ ${items.map((item, i) => `${i + 1}. **${item.name}** ⭐ ${item.stars}`).join('\n')}
55
+
56
+ ---
57
+ Run \`/agora browse <id>\` for details.`;
58
+ }
59
+ }),
60
+ agora_trending: tool({
61
+ description: 'Show trending packages and workflows in Agora',
62
+ args: {
63
+ category: tool.schema.string().optional().describe('Category to show: packages, workflows, all')
64
+ },
65
+ async execute(args) {
66
+ const category = args.category || 'all';
67
+ let output = `📈 **Trending in Agora**\n\n`;
68
+ if (category === 'all' || category === 'packages' || category === 'package') {
69
+ output += `**Top Packages**\n`;
70
+ const topPackages = getTrendingItems({ category: 'package', limit: 5 });
71
+ output += topPackages.map((p, i) => `${i + 1}. ${p.name} - ⭐ ${p.stars}`).join('\n');
72
+ output += '\n\n';
73
+ }
74
+ if (category === 'all' || category === 'workflows' || category === 'workflow') {
75
+ output += `**Top Workflows**\n`;
76
+ const topWorkflows = getTrendingItems({ category: 'workflow', limit: 5 });
77
+ output += topWorkflows.map((w, i) => `${i + 1}. ${w.name} - ⭐ ${w.stars}`).join('\n');
78
+ }
79
+ output += `\n\n🏷️ **Trending Tags**: ${getTrendingTags(8).join(', ')}`;
80
+ return output;
81
+ }
82
+ }),
83
+ agora_tutorial: tool({
84
+ description: 'Learn about AI/MCP with interactive tutorials',
85
+ args: {
86
+ tutorial: tool.schema.string().optional().describe('Tutorial ID or "list" to see available tutorials'),
87
+ step: tool.schema.number().optional().describe('Step number (1-based)')
88
+ },
89
+ async execute(args) {
90
+ const tutorial = args.tutorial;
91
+ const step = args.step || 1;
92
+ if (!tutorial || tutorial === 'list') {
93
+ return `📚 **Available Tutorials**
94
+
95
+ 1. **mcp-basics** - MCP Servers 101 (Beginner, 15 min)
96
+ 2. **agents-skills** - OpenCode Agents & Skills (Intermediate, 30 min)
97
+
98
+ Run \`/agora tutorial <id>\` to start a tutorial.`;
99
+ }
100
+ const tut = sampleTutorials.find(t => t.id === tutorial);
101
+ if (!tut) {
102
+ return `Tutorial "${tutorial}" not found. Run \`/agora tutorial list\` to see available tutorials.`;
103
+ }
104
+ if (step > tut.steps.length) {
105
+ return `✅ You've completed "${tut.title}"!
106
+
107
+ Run \`/agora tutorial list\` for more tutorials.`;
108
+ }
109
+ const currentStep = tut.steps[step - 1];
110
+ return `📚 **${tut.title}** (${tut.level}, ${tut.duration})
111
+ **Step ${step}/${tut.steps.length}**: ${currentStep.title}
112
+
113
+ ${currentStep.content}
114
+ ${currentStep.code ? `\n\`\`\`\n${currentStep.code}\n\`\`\`` : ''}
115
+
116
+ Run \`/agora tutorial ${tutorial} ${step + 1}\` for next step.`;
117
+ }
118
+ }),
119
+ agora_discussions: tool({
120
+ description: 'Show community discussions or create new',
121
+ args: {
122
+ action: tool.schema.string().optional().describe('Action: list, view, create, reply (default: list)'),
123
+ id: tool.schema.string().optional().describe('Discussion ID'),
124
+ category: tool.schema.string().optional().describe('Filter or category for new post'),
125
+ title: tool.schema.string().optional().describe('Title for new post'),
126
+ content: tool.schema.string().optional().describe('Content for new post/reply')
127
+ },
128
+ async execute(args) {
129
+ const action = args.action || 'list';
130
+ if (action === 'create') {
131
+ if (!args.title || !args.content) {
132
+ return `📝 **Create Discussion**
133
+
134
+ Required: title, content
135
+
136
+ /options: category (question, idea, showcase, discussion)
137
+
138
+ Example:
139
+ \`/agora discussions create --title "How to use MCP?" --content "Looking for best practices..." --category question`;
140
+ }
141
+ const newDisc = {
142
+ id: `disc-${Date.now()}`,
143
+ title: args.title,
144
+ author: 'you',
145
+ content: args.content,
146
+ category: args.category || 'discussion',
147
+ replies: 0,
148
+ stars: 0,
149
+ createdAt: new Date().toISOString().split('T')[0]
150
+ };
151
+ return `✅ **Discussion Created**
152
+
153
+ **${newDisc.title}**
154
+ ${newDisc.content}
155
+
156
+ by ${newDisc.author} | ${newDisc.category}
157
+
158
+ Run \`/agora discussions view ${newDisc.id}\` to view.`;
159
+ }
160
+ if (action === 'view') {
161
+ const disc = sampleDiscussions.find(d => d.id === args.id);
162
+ if (!disc) {
163
+ return `Discussion not found. Run \`/agora discussions list\` for all discussions.`;
164
+ }
165
+ const icon = disc.category === 'question' ? '❓' :
166
+ disc.category === 'idea' ? '💡' :
167
+ disc.category === 'showcase' ? '🎉' : '💬';
168
+ return `${icon} **${disc.title}**
169
+
170
+ ${disc.content}
171
+
172
+ ---
173
+ 💬 ${disc.replies} replies | ⭐ ${disc.stars} | by ${disc.author} | ${disc.createdAt}
174
+
175
+ Run \`/agora discussions reply ${disc.id} --content "Your reply..."\` to respond.`;
176
+ }
177
+ if (action === 'reply' && args.id && args.content) {
178
+ return `💬 **Reply added** to ${args.id}
179
+
180
+ "${args.content}"
181
+
182
+ Run \`/agora discussions view ${args.id}\` to see all replies.`;
183
+ }
184
+ const category = args.category || 'all';
185
+ const filtered = category === 'all'
186
+ ? sampleDiscussions
187
+ : sampleDiscussions.filter(d => d.category === category);
188
+ return `💬 **Discussions** (${filtered.length})
189
+
190
+ ${filtered.slice(0, 10).map(d => {
191
+ const icon = d.category === 'question' ? '❓' :
192
+ d.category === 'idea' ? '💡' :
193
+ d.category === 'showcase' ? '🎉' : '💬';
194
+ return `${icon} **${d.title}**
195
+ ${d.content.slice(0, 80)}...
196
+ 💬 ${d.replies} replies | ⭐ ${d.stars} | by ${d.author}`;
197
+ }).join('\n\n')}
198
+
199
+ ---
200
+ Run \`/agora discussions create --title "..." --content "..." --category question\` to start a discussion.`;
201
+ }
202
+ }),
203
+ agora_browse: tool({
204
+ description: 'Browse an individual package or workflow with full details',
205
+ args: {
206
+ id: tool.schema.string().describe('Package or workflow ID'),
207
+ type: tool.schema.string().optional().describe('Type: package, workflow (default: auto-detect)')
208
+ },
209
+ async execute(args, _ctx) {
210
+ const id = args.id;
211
+ const type = args.type;
212
+ const item = findMarketplaceItem(id, { type });
213
+ if (!item) {
214
+ return `Item "${id}" not found. Run \`/agora search <query>\` to find packages.`;
215
+ }
216
+ if (item.kind === 'workflow') {
217
+ const w = item;
218
+ return `🔄 **${w.name}**
219
+ by ${w.author} | ⭐ ${w.stars} | 🍴 ${w.forks}
220
+
221
+ ${w.description}
222
+
223
+ **Tags**: ${w.tags.map(t => `\`${t}\``).join(', ')}
224
+
225
+ **Prompt**:
226
+ \`\`\`
227
+ ${w.prompt}
228
+ \`\`\`
229
+
230
+ Run \`/agora install workflow ${w.id}\` to use this workflow.`;
231
+ }
232
+ const p = item;
233
+ return `📦 **${p.name}**
234
+ v${p.version} by ${p.author} | ⭐ ${p.stars} | 📥 ${p.installs}
235
+
236
+ ${p.description}
237
+
238
+ **Tags**: ${p.tags.map(t => `\`${t}\``).join(', ')}
239
+ **Category**: ${p.category}
240
+ **Added**: ${p.createdAt}
241
+ ${p.repository ? `**Repo**: ${p.repository}` : ''}
242
+ ${p.npmPackage ? `**npm**: \`${p.npmPackage}\`` : ''}
243
+
244
+ Run \`/agora install ${p.id}\` to install to your OpenCode config.`;
245
+ }
246
+ }),
247
+ agora_install: tool({
248
+ description: 'Install a package or workflow to your OpenCode config',
249
+ args: {
250
+ id: tool.schema.string().describe('Package or workflow ID to install'),
251
+ type: tool.schema.string().optional().describe('Type: package, workflow'),
252
+ write: tool.schema.boolean().optional().describe('Write to config file (default: false)')
253
+ },
254
+ async execute(args, _ctx) {
255
+ const id = args.id;
256
+ const type = args.type;
257
+ const write = args.write || false;
258
+ const item = findMarketplaceItem(id, { type });
259
+ if (!item) {
260
+ return `Item "${id}" not found. Run \`/agora search <query>\` to find packages.`;
261
+ }
262
+ if (item.kind === 'workflow') {
263
+ const w = item;
264
+ return `🔄 **Workflow installed**: ${w.name}
265
+
266
+ This workflow is now active. To use it:
267
+
268
+ 1. Copy the prompt to a skill file:
269
+ \`\`\`
270
+ ${w.prompt}
271
+ \`\`\`
272
+
273
+ 2. Or run \`/agora info\` to see all installed workflows.`;
274
+ }
275
+ const plan = createInstallPlan(item);
276
+ if (!plan.installable) {
277
+ return `❌ ${plan.reason}`;
278
+ }
279
+ if (write) {
280
+ return `📦 **Config Generated** for ${item.name}
281
+
282
+ Add this to your \`opencode.json\`:
283
+
284
+ \`\`\`json
285
+ ${formatConfigJson(plan.config)}
286
+ \`\`\`
287
+
288
+ Use the standalone CLI for safe file writes:
289
+ \`agora install ${item.id} --write\``;
290
+ }
291
+ const command = plan.commands[0];
292
+ return `📦 **Installing**: ${item.name}
293
+
294
+ To install this MCP server to your OpenCode config:
295
+
296
+ 1. Install the package:
297
+ \`\`\`bash
298
+ ${command}
299
+ \`\`\`
300
+
301
+ 2. Add to your \`opencode.json\`:
302
+ \`\`\`json
303
+ ${formatConfigJson(plan.config)}
304
+ \`\`\`
305
+
306
+ Run \`agora install ${item.id} --write\` in your terminal to auto-write to config.`;
307
+ }
308
+ }),
309
+ agora_review: tool({
310
+ description: 'Rate and review packages or workflows',
311
+ args: {
312
+ action: tool.schema.string().optional().describe('Action: list, view, create (default: list)'),
313
+ id: tool.schema.string().optional().describe('Package or workflow ID'),
314
+ rating: tool.schema.number().optional().describe('Rating 1-5 stars'),
315
+ content: tool.schema.string().optional().describe('Review content')
316
+ },
317
+ async execute(args) {
318
+ const action = args.action || 'list';
319
+ if (action === 'create') {
320
+ if (!args.id || !args.rating || !args.content) {
321
+ return `⭐ **Create Review**
322
+
323
+ Required: id, rating (1-5), content
324
+
325
+ Example:
326
+ \`/agora review create --id mcp-filesystem --rating 5 --content "Essential tool!"\``;
327
+ }
328
+ if (args.rating < 1 || args.rating > 5) {
329
+ return `Rating must be 1-5 stars.`;
330
+ }
331
+ return `✅ **Review Added**
332
+
333
+ **${args.id}** - ${'⭐'.repeat(args.rating)}
334
+
335
+ ${args.content}
336
+
337
+ Run \`/agora review view ${args.id}\` to see all reviews.`;
338
+ }
339
+ if (action === 'view' && args.id) {
340
+ return `⭐ **Reviews** for ${args.id}
341
+
342
+ ★ 5 - "Essential for any project!" - devarchitect
343
+ ★ 4 - "Works well, easy setup" - nodemaster
344
+
345
+ Overall: 4.5/5 (12 reviews)
346
+
347
+ Run \`/agora review create --id ${args.id} --rating 5 --content "Your review..."\` to add your review.`;
348
+ }
349
+ return `⭐ **Recent Reviews**
350
+
351
+ 1. @modelcontextprotocol/server-filesystem - ⭐⭐⭐⭐⭐ (45)
352
+ 2. @modelcontextprotocol/server-github - ⭐⭐⭐⭐ (23)
353
+ 3. @modelcontextprotocol/server-brave-search - ⭐⭐⭐⭐⭐ (12)
354
+
355
+ Run \`/agora review view <id>\` to see reviews for a specific package.`;
356
+ }
357
+ }),
358
+ agora_profile: tool({
359
+ description: 'View and manage user profiles',
360
+ args: {
361
+ action: tool.schema.string().optional().describe('Action: view, me (default: list)'),
362
+ username: tool.schema.string().optional().describe('Username'),
363
+ displayName: tool.schema.string().optional().describe('Display name for profile'),
364
+ bio: tool.schema.string().optional().describe('Bio for profile')
365
+ },
366
+ async execute(args) {
367
+ const action = args.action || 'list';
368
+ if (action === 'me' || (action === 'view' && !args.username)) {
369
+ return `👤 **Your Profile**
370
+
371
+ - **Username**: you
372
+ - **Packages**: 0 published
373
+ - **Workflows**: 1 saved
374
+ - **Discussions**: 0 started
375
+ - **Reviews**: 0 written
376
+
377
+ Run \`/agora profile update --displayName "Your Name" --bio "Your bio"\` to update.`;
378
+ }
379
+ if (action === 'update') {
380
+ return `✅ **Profile Updated**
381
+
382
+ Display name: ${args.displayName || 'you'}
383
+ Bio: ${args.bio || '(none)'}`;
384
+ }
385
+ const username = args.username || 'agora-community';
386
+ const profiles = {
387
+ 'agora-community': { packages: 3, workflows: 2, discussions: 5 },
388
+ 'modelcontextprotocol': { packages: 12, workflows: 0, discussions: 8 },
389
+ 'devarchitect': { packages: 1, workflows: 3, discussions: 12 }
390
+ };
391
+ const p = profiles[username] || { packages: 0, workflows: 0, discussions: 0 };
392
+ return `👤 **${username}**
393
+
394
+ - **Packages**: ${p.packages} published
395
+ - **Workflows**: ${p.workflows} shared
396
+ - **Discussions**: ${p.discussions} started
397
+
398
+ Run \`/agora discussions list --author ${username}\` to see their discussions.`;
399
+ }
400
+ }),
401
+ agora_info: tool({
402
+ description: 'Show information about Agora plugin',
403
+ args: {},
404
+ async execute() {
405
+ return `🏛️ **Agora** v${AGORA_VERSION}
406
+
407
+ The Developer's Terminal Marketplace & Community
408
+
409
+ **Commands:**
410
+ - \`/agora search <query> [category]\` - Search marketplace
411
+ - \`/agora browse_category <category>\` - Browse by category
412
+ - \`/agora trending [type]\` - See trending
413
+ - \`/agora browse <id>\` - View package details
414
+ - \`/agora install <id> [--write]\` - Install to config
415
+ - \`/agora review [action] [--id] [--rating] [--content]\` - Reviews/ratings
416
+ - \`/agora discussions [action] [--id] [--title] [--content]\` - Community
417
+ - \`/agora profile [action] [--username]\` - User profiles
418
+ - \`/agora tutorial [id] [step]\` - Interactive tutorials
419
+ - \`/agora info\` - This help
420
+
421
+ **Categories:** mcp, prompt, workflow, skill
422
+
423
+ Built with ❤️ for the developer community.`;
424
+ }
425
+ })
426
+ }
427
+ };
428
+ };
429
+ export default Agora;
430
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ import type { OpenCodeConfig } from './config.js';
2
+ export interface ProjectScan {
3
+ type: 'node' | 'python' | 'rust' | 'go' | 'ruby' | 'java' | 'unknown';
4
+ frameworks: string[];
5
+ hasDocker: boolean;
6
+ hasCI: boolean;
7
+ hasTests: boolean;
8
+ hasDatabase: boolean;
9
+ dependencies: string[];
10
+ }
11
+ export interface InitPlan {
12
+ config: OpenCodeConfig;
13
+ servers: string[];
14
+ workflows: string[];
15
+ commands: string[];
16
+ notes: string[];
17
+ }
18
+ export declare function scanProject(dir: string): ProjectScan;
19
+ export declare function generateInitPlan(scan: ProjectScan): InitPlan;
20
+ export declare function applyInitPlan(plan: InitPlan, configPath: string): void;
21
+ export declare function runCommands(commands: string[]): void;
22
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACtE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAsBD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAuCpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CA2E5D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAQpD"}