memextend 0.1.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 (53) hide show
  1. package/dist/commands/edit.d.ts +2 -0
  2. package/dist/commands/edit.d.ts.map +1 -0
  3. package/dist/commands/edit.js +84 -0
  4. package/dist/commands/edit.js.map +1 -0
  5. package/dist/commands/export.d.ts +8 -0
  6. package/dist/commands/export.d.ts.map +1 -0
  7. package/dist/commands/export.js +88 -0
  8. package/dist/commands/export.js.map +1 -0
  9. package/dist/commands/forget.d.ts +10 -0
  10. package/dist/commands/forget.d.ts.map +1 -0
  11. package/dist/commands/forget.js +199 -0
  12. package/dist/commands/forget.js.map +1 -0
  13. package/dist/commands/help.d.ts +2 -0
  14. package/dist/commands/help.d.ts.map +1 -0
  15. package/dist/commands/help.js +437 -0
  16. package/dist/commands/help.js.map +1 -0
  17. package/dist/commands/import.d.ts +7 -0
  18. package/dist/commands/import.d.ts.map +1 -0
  19. package/dist/commands/import.js +138 -0
  20. package/dist/commands/import.js.map +1 -0
  21. package/dist/commands/init.d.ts +6 -0
  22. package/dist/commands/init.d.ts.map +1 -0
  23. package/dist/commands/init.js +258 -0
  24. package/dist/commands/init.js.map +1 -0
  25. package/dist/commands/list.d.ts +7 -0
  26. package/dist/commands/list.d.ts.map +1 -0
  27. package/dist/commands/list.js +67 -0
  28. package/dist/commands/list.js.map +1 -0
  29. package/dist/commands/save.d.ts +8 -0
  30. package/dist/commands/save.d.ts.map +1 -0
  31. package/dist/commands/save.js +95 -0
  32. package/dist/commands/save.js.map +1 -0
  33. package/dist/commands/search.d.ts +8 -0
  34. package/dist/commands/search.d.ts.map +1 -0
  35. package/dist/commands/search.js +82 -0
  36. package/dist/commands/search.js.map +1 -0
  37. package/dist/commands/status.d.ts +7 -0
  38. package/dist/commands/status.d.ts.map +1 -0
  39. package/dist/commands/status.js +231 -0
  40. package/dist/commands/status.js.map +1 -0
  41. package/dist/commands/uninstall.d.ts +7 -0
  42. package/dist/commands/uninstall.d.ts.map +1 -0
  43. package/dist/commands/uninstall.js +188 -0
  44. package/dist/commands/uninstall.js.map +1 -0
  45. package/dist/commands/webui.d.ts +7 -0
  46. package/dist/commands/webui.d.ts.map +1 -0
  47. package/dist/commands/webui.js +314 -0
  48. package/dist/commands/webui.js.map +1 -0
  49. package/dist/index.d.ts +3 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +97 -0
  52. package/dist/index.js.map +1 -0
  53. package/package.json +51 -0
@@ -0,0 +1,231 @@
1
+ // apps/cli/src/commands/status.ts
2
+ // Copyright (c) 2026 ZodTTD LLC. MIT License.
3
+ import { existsSync, statSync } from 'fs';
4
+ import { join } from 'path';
5
+ import { homedir } from 'os';
6
+ import { execSync } from 'child_process';
7
+ import chalk from 'chalk';
8
+ const MEMEXTEND_DIR = join(homedir(), '.memextend');
9
+ const CONFIG_PATH = join(MEMEXTEND_DIR, 'config.json');
10
+ const DB_PATH = join(MEMEXTEND_DIR, 'memextend.db');
11
+ const VECTORS_PATH = join(MEMEXTEND_DIR, 'vectors');
12
+ const MODELS_PATH = join(MEMEXTEND_DIR, 'models');
13
+ const MODEL_FILENAME = 'nomic-embed-text-v1.5.Q8_0.gguf';
14
+ export async function statusCommand(options) {
15
+ // If --check-embeddings, run embedding diagnostics
16
+ if (options.checkEmbeddings) {
17
+ await runEmbeddingDiagnostics();
18
+ return;
19
+ }
20
+ console.log(chalk.bold('\n memextend Status\n'));
21
+ // Check initialization
22
+ if (!existsSync(DB_PATH)) {
23
+ console.log(chalk.yellow(' ⚠ Not initialized. Run `memextend init` first.\n'));
24
+ return;
25
+ }
26
+ try {
27
+ const { SQLiteStorage, LanceDBStorage, getProjectId } = await import('@memextend/core');
28
+ const sqlite = new SQLiteStorage(DB_PATH);
29
+ const lancedb = await LanceDBStorage.create(VECTORS_PATH);
30
+ // Get counts
31
+ const memoryCount = sqlite.getMemoryCount();
32
+ const vectorCount = await lancedb.getVectorCount();
33
+ // Get project info if requested
34
+ let projectInfo = '';
35
+ if (options.project) {
36
+ const cwd = process.cwd();
37
+ const projectId = getProjectId(cwd);
38
+ const project = sqlite.getProject(projectId);
39
+ const projectMemories = sqlite.getAllMemories(projectId, 1000);
40
+ projectInfo = `
41
+ ${chalk.bold('Current Project')}
42
+ ├─ Name: ${project?.name ?? 'Unknown'}
43
+ ├─ ID: ${projectId}
44
+ └─ Memories: ${projectMemories.length}
45
+ `;
46
+ }
47
+ // Get database sizes
48
+ const dbSize = existsSync(DB_PATH) ? formatBytes(statSync(DB_PATH).size) : '0 B';
49
+ const vectorsSize = existsSync(VECTORS_PATH) ? getDirSize(VECTORS_PATH) : '0 B';
50
+ const modelExists = existsSync(join(MODELS_PATH, 'nomic-embed-text-v1.5.Q8_0.gguf'));
51
+ // Close connections
52
+ sqlite.close();
53
+ await lancedb.close();
54
+ // Print status
55
+ console.log(` ${chalk.bold('Storage')}`);
56
+ console.log(` ├─ Directory: ${MEMEXTEND_DIR}`);
57
+ console.log(` ├─ Database: ${dbSize}`);
58
+ console.log(` └─ Vectors: ${vectorsSize}`);
59
+ console.log();
60
+ console.log(` ${chalk.bold('Memories')}`);
61
+ console.log(` ├─ Total memories: ${memoryCount}`);
62
+ console.log(` └─ Vector embeddings: ${vectorCount}`);
63
+ console.log();
64
+ console.log(` ${chalk.bold('Embedding Model')}`);
65
+ console.log(` └─ nomic-embed-text: ${modelExists ? chalk.green('Downloaded') : chalk.yellow('Not downloaded (will download on first use)')}`);
66
+ if (projectInfo) {
67
+ console.log();
68
+ console.log(projectInfo);
69
+ }
70
+ console.log();
71
+ }
72
+ catch (error) {
73
+ console.error(chalk.red(` Error: ${error instanceof Error ? error.message : error}\n`));
74
+ process.exit(1);
75
+ }
76
+ }
77
+ function formatBytes(bytes) {
78
+ if (bytes === 0)
79
+ return '0 B';
80
+ const k = 1024;
81
+ const sizes = ['B', 'KB', 'MB', 'GB'];
82
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
83
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
84
+ }
85
+ function getDirSize(dir) {
86
+ try {
87
+ const result = execSync(`du -sh "${dir}" 2>/dev/null | cut -f1`, {
88
+ encoding: 'utf-8'
89
+ }).trim();
90
+ return result || '0 B';
91
+ }
92
+ catch {
93
+ return '0 B';
94
+ }
95
+ }
96
+ async function runEmbeddingDiagnostics() {
97
+ console.log(chalk.bold('\n Embedding Model Diagnostics\n'));
98
+ const modelPath = join(MODELS_PATH, MODEL_FILENAME);
99
+ let allPassed = true;
100
+ // Check 1: Model file exists
101
+ console.log(chalk.bold(' [1/5] Checking model file...'));
102
+ if (existsSync(modelPath)) {
103
+ const size = statSync(modelPath).size;
104
+ const sizeStr = formatBytes(size);
105
+ if (size < 100 * 1024 * 1024) {
106
+ console.log(chalk.red(` ✗ Model file too small (${sizeStr}), may be corrupted`));
107
+ console.log(chalk.yellow(` → Delete and re-download: rm "${modelPath}"`));
108
+ allPassed = false;
109
+ }
110
+ else {
111
+ console.log(chalk.green(` ✓ Model file exists (${sizeStr})`));
112
+ }
113
+ }
114
+ else {
115
+ console.log(chalk.yellow(' ⚠ Model not downloaded'));
116
+ console.log(chalk.dim(` → Will download on first use (~274MB)`));
117
+ console.log(chalk.dim(` → Or manually: npx memextend status --check-embeddings`));
118
+ // Offer to download now
119
+ console.log();
120
+ console.log(chalk.bold(' Downloading model now...'));
121
+ try {
122
+ const { LocalEmbedding } = await import('@memextend/core');
123
+ await LocalEmbedding.create(MODELS_PATH);
124
+ console.log(chalk.green(' ✓ Model downloaded successfully'));
125
+ }
126
+ catch (error) {
127
+ console.log(chalk.red(` ✗ Download failed: ${error instanceof Error ? error.message : error}`));
128
+ allPassed = false;
129
+ }
130
+ }
131
+ // Check 2: Can load model
132
+ console.log();
133
+ console.log(chalk.bold(' [2/5] Loading model...'));
134
+ let embedding = null;
135
+ try {
136
+ const { LocalEmbedding } = await import('@memextend/core');
137
+ const startLoad = Date.now();
138
+ embedding = await LocalEmbedding.create(MODELS_PATH);
139
+ const loadTime = Date.now() - startLoad;
140
+ console.log(chalk.green(` ✓ Model loaded successfully (${loadTime}ms)`));
141
+ }
142
+ catch (error) {
143
+ console.log(chalk.red(` ✗ Failed to load model: ${error instanceof Error ? error.message : error}`));
144
+ allPassed = false;
145
+ }
146
+ if (!embedding) {
147
+ console.log(chalk.red('\n Cannot continue diagnostics without model.\n'));
148
+ process.exit(1);
149
+ }
150
+ // Check 3: Generate document embedding
151
+ console.log();
152
+ console.log(chalk.bold(' [3/5] Generating document embedding...'));
153
+ try {
154
+ const testDoc = 'This is a test document for embedding generation.';
155
+ const startEmbed = Date.now();
156
+ const docVector = await embedding.embed(testDoc);
157
+ const embedTime = Date.now() - startEmbed;
158
+ if (docVector.length === 384) {
159
+ console.log(chalk.green(` ✓ Document embedding generated (${embedTime}ms, ${docVector.length} dimensions)`));
160
+ }
161
+ else {
162
+ console.log(chalk.red(` ✗ Unexpected dimensions: ${docVector.length} (expected 384)`));
163
+ allPassed = false;
164
+ }
165
+ }
166
+ catch (error) {
167
+ console.log(chalk.red(` ✗ Failed: ${error instanceof Error ? error.message : error}`));
168
+ allPassed = false;
169
+ }
170
+ // Check 4: Generate query embedding
171
+ console.log();
172
+ console.log(chalk.bold(' [4/5] Generating query embedding...'));
173
+ try {
174
+ const testQuery = 'test query';
175
+ const startQuery = Date.now();
176
+ const queryVector = await embedding.embedQuery(testQuery);
177
+ const queryTime = Date.now() - startQuery;
178
+ if (queryVector.length === 384) {
179
+ console.log(chalk.green(` ✓ Query embedding generated (${queryTime}ms, ${queryVector.length} dimensions)`));
180
+ }
181
+ else {
182
+ console.log(chalk.red(` ✗ Unexpected dimensions: ${queryVector.length} (expected 384)`));
183
+ allPassed = false;
184
+ }
185
+ }
186
+ catch (error) {
187
+ console.log(chalk.red(` ✗ Failed: ${error instanceof Error ? error.message : error}`));
188
+ allPassed = false;
189
+ }
190
+ // Check 5: Semantic similarity test
191
+ console.log();
192
+ console.log(chalk.bold(' [5/5] Testing semantic similarity...'));
193
+ try {
194
+ const { cosineSimilarity } = await import('@memextend/core');
195
+ const doc1 = await embedding.embed('The cat sat on the mat.');
196
+ const doc2 = await embedding.embed('A feline rested on the rug.');
197
+ const doc3 = await embedding.embed('Python is a programming language.');
198
+ const query = await embedding.embedQuery('cat sitting');
199
+ const sim1 = cosineSimilarity(query, doc1);
200
+ const sim2 = cosineSimilarity(query, doc2);
201
+ const sim3 = cosineSimilarity(query, doc3);
202
+ console.log(chalk.dim(` Query: "cat sitting"`));
203
+ console.log(chalk.dim(` Doc 1: "The cat sat on the mat." → similarity: ${sim1.toFixed(4)}`));
204
+ console.log(chalk.dim(` Doc 2: "A feline rested on the rug." → similarity: ${sim2.toFixed(4)}`));
205
+ console.log(chalk.dim(` Doc 3: "Python is a programming language." → similarity: ${sim3.toFixed(4)}`));
206
+ // Semantic test: doc1 and doc2 should be more similar to query than doc3
207
+ if (sim1 > sim3 && sim2 > sim3) {
208
+ console.log(chalk.green(' ✓ Semantic similarity working correctly'));
209
+ }
210
+ else {
211
+ console.log(chalk.yellow(' ⚠ Semantic similarity may not be working as expected'));
212
+ allPassed = false;
213
+ }
214
+ }
215
+ catch (error) {
216
+ console.log(chalk.red(` ✗ Failed: ${error instanceof Error ? error.message : error}`));
217
+ allPassed = false;
218
+ }
219
+ // Clean up
220
+ await embedding.close();
221
+ // Summary
222
+ console.log();
223
+ if (allPassed) {
224
+ console.log(chalk.green.bold(' ✓ All embedding diagnostics passed!\n'));
225
+ }
226
+ else {
227
+ console.log(chalk.yellow.bold(' ⚠ Some diagnostics had issues. See above for details.\n'));
228
+ process.exit(1);
229
+ }
230
+ }
231
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface UninstallOptions {
2
+ force?: boolean;
3
+ keepData?: boolean;
4
+ }
5
+ export declare function uninstallCommand(options: UninstallOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAqBA,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgBD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0E/E"}
@@ -0,0 +1,188 @@
1
+ // apps/cli/src/commands/uninstall.ts
2
+ // Copyright (c) 2026 ZodTTD LLC. MIT License.
3
+ import { existsSync } from 'fs';
4
+ import { readFile, writeFile, rm } from 'fs/promises';
5
+ import { join } from 'path';
6
+ import { homedir } from 'os';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ import { createInterface } from 'readline';
10
+ const MEMEXTEND_DIR = join(homedir(), '.memextend');
11
+ const CLAUDE_DIR = join(homedir(), '.claude');
12
+ const CLAUDE_SETTINGS_PATH = join(CLAUDE_DIR, 'settings.json');
13
+ const CLAUDE_MD_PATH = join(CLAUDE_DIR, 'CLAUDE.md');
14
+ const SHELL_CONFIGS = [
15
+ join(homedir(), '.zshrc'),
16
+ join(homedir(), '.bashrc'),
17
+ join(homedir(), '.config', 'fish', 'config.fish'),
18
+ ];
19
+ async function confirm(message) {
20
+ const rl = createInterface({
21
+ input: process.stdin,
22
+ output: process.stdout,
23
+ });
24
+ return new Promise((resolve) => {
25
+ rl.question(message, (answer) => {
26
+ rl.close();
27
+ resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
28
+ });
29
+ });
30
+ }
31
+ export async function uninstallCommand(options) {
32
+ console.log(chalk.bold('\n memextend Uninstall\n'));
33
+ // Check if memextend is installed
34
+ if (!existsSync(MEMEXTEND_DIR)) {
35
+ console.log(chalk.yellow(' memextend is not installed (no ~/.memextend directory found).\n'));
36
+ return;
37
+ }
38
+ // Show what will be removed
39
+ console.log(' This will remove:');
40
+ console.log(chalk.cyan(' - Claude Code hooks (SessionStart, Stop, PreCompact)'));
41
+ console.log(chalk.cyan(' - Claude Code MCP server registration'));
42
+ console.log(chalk.cyan(' - memextend section from ~/.claude/CLAUDE.md'));
43
+ console.log(chalk.cyan(' - PATH entries from shell config (.zshrc, .bashrc, fish)'));
44
+ if (!options.keepData) {
45
+ console.log(chalk.red(' - All memories and data in ~/.memextend/'));
46
+ }
47
+ else {
48
+ console.log(chalk.yellow(' - (keeping data in ~/.memextend/ due to --keep-data flag)'));
49
+ }
50
+ console.log('');
51
+ // Confirm unless --force
52
+ if (!options.force) {
53
+ const confirmed = await confirm(' Are you sure you want to uninstall? (y/N): ');
54
+ if (!confirmed) {
55
+ console.log(chalk.yellow('\n Uninstall cancelled.\n'));
56
+ return;
57
+ }
58
+ }
59
+ const spinner = ora();
60
+ try {
61
+ // Step 1: Remove from Claude Code settings
62
+ spinner.start('Removing Claude Code integration...');
63
+ await removeFromClaudeSettings();
64
+ spinner.succeed('Removed hooks and MCP server from Claude Code');
65
+ // Step 2: Remove memextend section from CLAUDE.md
66
+ spinner.start('Cleaning up CLAUDE.md...');
67
+ await cleanupClaudeMd();
68
+ spinner.succeed('Removed memextend section from CLAUDE.md');
69
+ // Step 3: Remove PATH from shell configs
70
+ spinner.start('Cleaning up shell PATH...');
71
+ const cleanedShells = await cleanupShellConfigs();
72
+ if (cleanedShells.length > 0) {
73
+ spinner.succeed(`Removed PATH from: ${cleanedShells.join(', ')}`);
74
+ }
75
+ else {
76
+ spinner.info('No shell configs needed cleanup');
77
+ }
78
+ // Step 4: Remove data directory (unless --keep-data)
79
+ if (!options.keepData) {
80
+ spinner.start('Removing memextend data...');
81
+ await rm(MEMEXTEND_DIR, { recursive: true, force: true });
82
+ spinner.succeed('Removed ~/.memextend/ directory');
83
+ }
84
+ else {
85
+ spinner.info('Keeping ~/.memextend/ data directory');
86
+ }
87
+ console.log(chalk.green('\n ✅ memextend has been uninstalled.\n'));
88
+ if (options.keepData) {
89
+ console.log(chalk.yellow(' Your memories are preserved in ~/.memextend/'));
90
+ console.log(chalk.yellow(' Run `memextend init` to reinstall and reconnect.\n'));
91
+ }
92
+ }
93
+ catch (error) {
94
+ spinner.fail('Uninstall failed');
95
+ console.error(chalk.red(`\n Error: ${error instanceof Error ? error.message : error}\n`));
96
+ process.exit(1);
97
+ }
98
+ }
99
+ async function removeFromClaudeSettings() {
100
+ if (!existsSync(CLAUDE_SETTINGS_PATH)) {
101
+ return;
102
+ }
103
+ try {
104
+ const content = await readFile(CLAUDE_SETTINGS_PATH, 'utf-8');
105
+ const settings = JSON.parse(content);
106
+ // Remove hooks
107
+ if (settings.hooks) {
108
+ delete settings.hooks.SessionStart;
109
+ delete settings.hooks.Stop;
110
+ delete settings.hooks.PreCompact;
111
+ // Remove empty hooks object
112
+ if (Object.keys(settings.hooks).length === 0) {
113
+ delete settings.hooks;
114
+ }
115
+ }
116
+ // Remove MCP server
117
+ if (settings.mcpServers) {
118
+ delete settings.mcpServers.memextend;
119
+ // Remove empty mcpServers object
120
+ if (Object.keys(settings.mcpServers).length === 0) {
121
+ delete settings.mcpServers;
122
+ }
123
+ }
124
+ await writeFile(CLAUDE_SETTINGS_PATH, JSON.stringify(settings, null, 2));
125
+ }
126
+ catch {
127
+ // Ignore errors - settings file might be malformed
128
+ }
129
+ }
130
+ async function cleanupClaudeMd() {
131
+ if (!existsSync(CLAUDE_MD_PATH)) {
132
+ return;
133
+ }
134
+ try {
135
+ const content = await readFile(CLAUDE_MD_PATH, 'utf-8');
136
+ // Remove memextend section (from "# memextend" to the next top-level heading or end)
137
+ const memextendSectionRegex = /# memextend - AI Memory Extension[\s\S]*?(?=\n# [^#]|$)/;
138
+ let cleaned = content.replace(memextendSectionRegex, '');
139
+ // Clean up extra whitespace
140
+ cleaned = cleaned.replace(/\n{3,}/g, '\n\n').trim();
141
+ if (cleaned.length === 0) {
142
+ // File is now empty, remove it
143
+ await rm(CLAUDE_MD_PATH);
144
+ }
145
+ else {
146
+ await writeFile(CLAUDE_MD_PATH, cleaned + '\n');
147
+ }
148
+ }
149
+ catch {
150
+ // Ignore errors
151
+ }
152
+ }
153
+ async function cleanupShellConfigs() {
154
+ const cleaned = [];
155
+ for (const configPath of SHELL_CONFIGS) {
156
+ if (!existsSync(configPath)) {
157
+ continue;
158
+ }
159
+ try {
160
+ const content = await readFile(configPath, 'utf-8');
161
+ // Check if memextend is in this config
162
+ if (!content.includes('.memextend')) {
163
+ continue;
164
+ }
165
+ // Remove memextend lines (comment and PATH export)
166
+ const lines = content.split('\n');
167
+ const filteredLines = lines.filter(line => {
168
+ // Remove "# Added by memextend installer" comment
169
+ if (line.includes('Added by memextend installer'))
170
+ return false;
171
+ // Remove PATH export with .memextend/bin
172
+ if (line.includes('.memextend/bin'))
173
+ return false;
174
+ return true;
175
+ });
176
+ // Clean up extra blank lines
177
+ let newContent = filteredLines.join('\n');
178
+ newContent = newContent.replace(/\n{3,}/g, '\n\n').trimEnd() + '\n';
179
+ await writeFile(configPath, newContent);
180
+ cleaned.push(configPath.split('/').pop() || configPath);
181
+ }
182
+ catch {
183
+ // Ignore errors for individual files
184
+ }
185
+ }
186
+ return cleaned;
187
+ }
188
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface WebuiOptions {
2
+ port?: string;
3
+ host?: string;
4
+ }
5
+ export declare function webuiCommand(options: WebuiOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=webui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webui.d.ts","sourceRoot":"","sources":["../../src/commands/webui.ts"],"names":[],"mappings":"AAeA,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDvE"}