super-memory-pro 0.3.1 → 2.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 (52) hide show
  1. package/README.md +56 -2
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +7 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/hooks/event-handler.d.ts.map +1 -1
  6. package/dist/hooks/event-handler.js +9 -0
  7. package/dist/hooks/event-handler.js.map +1 -1
  8. package/dist/hooks/message-handler.d.ts.map +1 -1
  9. package/dist/hooks/message-handler.js +3 -0
  10. package/dist/hooks/message-handler.js.map +1 -1
  11. package/dist/hooks/system-transform.d.ts +5 -12
  12. package/dist/hooks/system-transform.d.ts.map +1 -1
  13. package/dist/hooks/system-transform.js +43 -24
  14. package/dist/hooks/system-transform.js.map +1 -1
  15. package/dist/memory/embeddings.d.ts +22 -0
  16. package/dist/memory/embeddings.d.ts.map +1 -0
  17. package/dist/memory/embeddings.js +139 -0
  18. package/dist/memory/embeddings.js.map +1 -0
  19. package/dist/memory/extractor.d.ts.map +1 -1
  20. package/dist/memory/extractor.js +5 -1
  21. package/dist/memory/extractor.js.map +1 -1
  22. package/dist/memory/index.d.ts +13 -1
  23. package/dist/memory/index.d.ts.map +1 -1
  24. package/dist/memory/index.js +7 -1
  25. package/dist/memory/index.js.map +1 -1
  26. package/dist/memory/llm-extractor.d.ts +22 -0
  27. package/dist/memory/llm-extractor.d.ts.map +1 -0
  28. package/dist/memory/llm-extractor.js +117 -0
  29. package/dist/memory/llm-extractor.js.map +1 -0
  30. package/dist/memory/pattern-detector.d.ts +28 -0
  31. package/dist/memory/pattern-detector.d.ts.map +1 -0
  32. package/dist/memory/pattern-detector.js +221 -0
  33. package/dist/memory/pattern-detector.js.map +1 -0
  34. package/dist/memory/processor.d.ts +7 -1
  35. package/dist/memory/processor.d.ts.map +1 -1
  36. package/dist/memory/processor.js +112 -15
  37. package/dist/memory/processor.js.map +1 -1
  38. package/dist/memory/project-context.d.ts +24 -0
  39. package/dist/memory/project-context.d.ts.map +1 -0
  40. package/dist/memory/project-context.js +186 -0
  41. package/dist/memory/project-context.js.map +1 -0
  42. package/dist/memory/suggestions.d.ts +21 -0
  43. package/dist/memory/suggestions.d.ts.map +1 -0
  44. package/dist/memory/suggestions.js +205 -0
  45. package/dist/memory/suggestions.js.map +1 -0
  46. package/dist/memory/user-profile.d.ts +24 -0
  47. package/dist/memory/user-profile.d.ts.map +1 -0
  48. package/dist/memory/user-profile.js +220 -0
  49. package/dist/memory/user-profile.js.map +1 -0
  50. package/dist/types.d.ts +8 -0
  51. package/dist/types.d.ts.map +1 -1
  52. package/package.json +5 -5
@@ -3,7 +3,8 @@
3
3
  // This is the primary entry point for the memory system.
4
4
  import { ensureDbReady } from '../db/connection.js';
5
5
  import { extractTechStack, extractDecisions, extractUserPreferences, extractPatterns, classifyContent, } from './extractor.js';
6
- import { storeMemories } from './store.js';
6
+ import { extractWithLLM, summarizeWithLLM } from './llm-extractor.js';
7
+ import { storeMemory, storeMemories } from './store.js';
7
8
  import { searchRelevantMemories, formatMemoriesForPrompt } from './search.js';
8
9
  // ─── Constants ─────────────────────────────────────────────────────────────
9
10
  const DEFAULT_MAX_INJECTIONS = 5;
@@ -30,24 +31,44 @@ export async function processMessage(content, metadata) {
30
31
  if (!content || content.trim().length === 0) {
31
32
  return [];
32
33
  }
33
- const { sessionId, projectId, source } = metadata;
34
+ const { sessionId, projectId, source, config } = metadata;
34
35
  try {
35
36
  // Lazy-init the database (fire-and-forget — errors are caught below).
36
37
  await ensureDbReady();
37
- // Step 1: Run all extractors
38
+ // Step 1: Run extractors (LLM + regex fallback)
39
+ let llmContext = null;
40
+ // Try LLM extraction first if enabled
41
+ if (config?.llm.enabled && config.llm.apiKey) {
42
+ try {
43
+ llmContext = await extractWithLLM(content, config);
44
+ console.log(`[UltraMemory] LLM extracted: ${llmContext.technologies.length} techs, ${llmContext.decisions.length} decisions`);
45
+ }
46
+ catch (err) {
47
+ console.error('[UltraMemory] LLM extraction failed, falling back to regex:', err);
48
+ llmContext = null;
49
+ }
50
+ }
51
+ // Run regex extractors as fallback/supplement
38
52
  const [techStack, decisions, preferences, patterns] = await Promise.all([
39
53
  safeExtract(() => extractTechStack(content)),
40
54
  safeExtract(() => extractDecisions(content)),
41
55
  safeExtract(() => extractUserPreferences(content)),
42
56
  safeExtract(() => extractPatterns(content)),
43
57
  ]);
58
+ // Merge LLM results with regex results
59
+ const allTechs = [...new Set([...techStack, ...(llmContext?.technologies ?? [])])];
60
+ const allDecisions = [
61
+ ...decisions,
62
+ ...(llmContext?.decisions ?? []),
63
+ ];
64
+ const allPreferences = [...new Set([...preferences, ...(llmContext?.preferences ?? [])])];
44
65
  // Step 2: Classify content
45
66
  const memoryType = classifyContent(content);
46
67
  // Step 3: Build memory payloads
47
68
  const memoryPayloads = [];
48
69
  // 3a. Tech stack
49
- if (techStack.length > 0) {
50
- for (const tech of techStack) {
70
+ if (allTechs.length > 0) {
71
+ for (const tech of allTechs) {
51
72
  memoryPayloads.push({
52
73
  memory_type: 'tech_stack',
53
74
  project_id: projectId ?? null,
@@ -56,12 +77,12 @@ export async function processMessage(content, metadata) {
56
77
  content: `Project uses ${tech}`,
57
78
  importance: 4,
58
79
  source: source ?? 'processor',
59
- metadata: { technology: tech, extracted: true },
80
+ metadata: { technology: tech, extracted: true, llm: llmContext !== null },
60
81
  });
61
82
  }
62
83
  }
63
84
  // 3b. Decisions
64
- for (const d of decisions) {
85
+ for (const d of allDecisions) {
65
86
  memoryPayloads.push({
66
87
  memory_type: 'decision',
67
88
  project_id: projectId ?? null,
@@ -70,11 +91,11 @@ export async function processMessage(content, metadata) {
70
91
  content: d.decision,
71
92
  importance: 4,
72
93
  source: source ?? 'processor',
73
- metadata: { context: d.context, extracted: true },
94
+ metadata: { context: d.context, extracted: true, llm: llmContext !== null },
74
95
  });
75
96
  }
76
97
  // 3c. Preferences
77
- for (const pref of preferences) {
98
+ for (const pref of allPreferences) {
78
99
  memoryPayloads.push({
79
100
  memory_type: 'user_profile',
80
101
  project_id: projectId ?? null,
@@ -83,7 +104,7 @@ export async function processMessage(content, metadata) {
83
104
  content: pref,
84
105
  importance: 3,
85
106
  source: source ?? 'processor',
86
- metadata: { extracted: true },
107
+ metadata: { extracted: true, llm: llmContext !== null },
87
108
  });
88
109
  }
89
110
  // 3d. Patterns
@@ -99,7 +120,37 @@ export async function processMessage(content, metadata) {
99
120
  metadata: { extracted: true },
100
121
  });
101
122
  }
102
- // 3e. Classified content store the whole message
123
+ // 3e. Project context from LLM
124
+ if (llmContext?.projectContext && llmContext.projectContext.length > 0) {
125
+ for (const ctx of llmContext.projectContext) {
126
+ memoryPayloads.push({
127
+ memory_type: 'project_context',
128
+ project_id: projectId ?? null,
129
+ session_id: sessionId ?? null,
130
+ key: `context:${normalizeKeyFragment(ctx)}`,
131
+ content: ctx,
132
+ importance: 3,
133
+ source: source ?? 'processor',
134
+ metadata: { extracted: true, llm: true },
135
+ });
136
+ }
137
+ }
138
+ // 3f. Key facts from LLM
139
+ if (llmContext?.keyFacts && llmContext.keyFacts.length > 0) {
140
+ for (const fact of llmContext.keyFacts) {
141
+ memoryPayloads.push({
142
+ memory_type: 'explicit',
143
+ project_id: projectId ?? null,
144
+ session_id: sessionId ?? null,
145
+ key: `fact:${normalizeKeyFragment(fact)}`,
146
+ content: fact,
147
+ importance: 3,
148
+ source: source ?? 'processor',
149
+ metadata: { extracted: true, llm: true },
150
+ });
151
+ }
152
+ }
153
+ // 3g. Classified content — store the whole message
103
154
  if (content.trim().length > 10) {
104
155
  memoryPayloads.push({
105
156
  memory_type: memoryType,
@@ -107,14 +158,15 @@ export async function processMessage(content, metadata) {
107
158
  session_id: sessionId ?? null,
108
159
  key: `msg:${memoryType}:${createContentHash(content)}`,
109
160
  content: content.trim(),
110
- importance: 3,
161
+ importance: 2,
111
162
  source: source ?? 'processor',
112
163
  metadata: {
113
164
  classified_as: memoryType,
114
- tech_stack: techStack,
115
- decisions_count: decisions.length,
116
- preferences_count: preferences.length,
165
+ tech_stack: allTechs,
166
+ decisions_count: allDecisions.length,
167
+ preferences_count: allPreferences.length,
117
168
  patterns_count: patterns.length,
169
+ llm_used: llmContext !== null,
118
170
  },
119
171
  });
120
172
  }
@@ -199,4 +251,49 @@ function normalizeKeyFragment(text) {
199
251
  .replace(/^_+|_+$/g, '')
200
252
  .slice(0, 60);
201
253
  }
254
+ // ─── Session Summarization ───────────────────────────────────────────────
255
+ /**
256
+ * Summarize a session and store it as a memory.
257
+ * Uses LLM if available, otherwise creates a basic summary.
258
+ */
259
+ export async function summarizeSession(sessionId, messages, config) {
260
+ if (!messages.length) {
261
+ return '';
262
+ }
263
+ let summary = '';
264
+ // Try LLM summarization if enabled
265
+ if (config?.llm.enabled && config.llm.apiKey && config.llm.summarizeSessions) {
266
+ try {
267
+ summary = await summarizeWithLLM(messages, config);
268
+ console.log(`[UltraMemory] LLM generated summary for session ${sessionId}`);
269
+ }
270
+ catch (err) {
271
+ console.error('[UltraMemory] LLM summarization failed:', err);
272
+ }
273
+ }
274
+ // Fallback: create basic summary from message count
275
+ if (!summary) {
276
+ summary = `Session with ${messages.length} messages`;
277
+ }
278
+ // Store summary as session memory
279
+ try {
280
+ await storeMemory({
281
+ memory_type: 'session',
282
+ key: `session:${sessionId}:summary`,
283
+ content: summary,
284
+ importance: 4,
285
+ source: 'processor',
286
+ metadata: {
287
+ sessionId,
288
+ messageCount: messages.length,
289
+ llmSummarized: config?.llm.enabled && config.llm.apiKey ? true : false,
290
+ },
291
+ });
292
+ console.log(`[UltraMemory] Session ${sessionId} summary stored`);
293
+ }
294
+ catch (err) {
295
+ console.error(`[UltraMemory] Failed to store session summary:`, err);
296
+ }
297
+ return summary;
298
+ }
202
299
  //# sourceMappingURL=processor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/memory/processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/memory/processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface ProjectContext {
2
+ name: string;
3
+ techStack: string[];
4
+ architecture: string;
5
+ conventions: string[];
6
+ recentChanges: string[];
7
+ activeBranches: string[];
8
+ lastUpdated: string;
9
+ }
10
+ export interface ProjectInsight {
11
+ category: string;
12
+ insight: string;
13
+ confidence: number;
14
+ recommendations: string[];
15
+ }
16
+ /**
17
+ * Build or update project context from stored memories and project info.
18
+ */
19
+ export declare function buildProjectContext(projectId: string): Promise<ProjectContext>;
20
+ /**
21
+ * Get project insights with recommendations.
22
+ */
23
+ export declare function getProjectInsights(projectId: string): Promise<ProjectInsight[]>;
24
+ //# sourceMappingURL=project-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../../src/memory/project-context.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CAuCzB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,EAAE,CAAC,CA+D3B"}
@@ -0,0 +1,186 @@
1
+ // ─── Project Context Module ───────────────────────────────────────────────
2
+ // Automatic project context detection and maintenance.
3
+ // Tracks tech stack, architecture, conventions, and recent changes.
4
+ import { getPool } from '../db/connection.js';
5
+ // ─── Context Building ────────────────────────────────────────────────────
6
+ /**
7
+ * Build or update project context from stored memories and project info.
8
+ */
9
+ export async function buildProjectContext(projectId) {
10
+ try {
11
+ const pool = getPool();
12
+ // Fetch project record
13
+ const projectResult = await pool.query('SELECT * FROM projects WHERE id = $1', [projectId]);
14
+ const project = projectResult.rows[0];
15
+ // Fetch project memories
16
+ const memoriesResult = await pool.query(`SELECT * FROM memories
17
+ WHERE project_id = $1
18
+ ORDER BY created_at DESC
19
+ LIMIT 200`, [projectId]);
20
+ const memories = memoriesResult.rows;
21
+ // Build context
22
+ const context = {
23
+ name: project?.name ?? 'Unknown Project',
24
+ techStack: extractProjectTechStack(memories, project ?? null),
25
+ architecture: detectArchitecture(memories),
26
+ conventions: extractConventions(memories),
27
+ recentChanges: extractRecentChanges(memories),
28
+ activeBranches: [], // Would need git integration
29
+ lastUpdated: new Date().toISOString(),
30
+ };
31
+ return context;
32
+ }
33
+ catch (err) {
34
+ console.error('[UltraMemory] Failed to build project context:', err);
35
+ return getDefaultContext();
36
+ }
37
+ }
38
+ /**
39
+ * Get project insights with recommendations.
40
+ */
41
+ export async function getProjectInsights(projectId) {
42
+ try {
43
+ const pool = getPool();
44
+ const result = await pool.query(`SELECT * FROM memories
45
+ WHERE project_id = $1
46
+ AND memory_type IN ('tech_stack', 'decision', 'pattern', 'project_context')
47
+ ORDER BY importance DESC, created_at DESC
48
+ LIMIT 100`, [projectId]);
49
+ const memories = result.rows;
50
+ const insights = [];
51
+ // Tech stack analysis
52
+ const techStack = extractProjectTechStack(memories, null);
53
+ if (techStack.length > 0) {
54
+ insights.push({
55
+ category: 'tech_stack',
56
+ insight: `Project uses: ${techStack.join(', ')}`,
57
+ confidence: Math.min(1, techStack.length / 3),
58
+ recommendations: generateTechRecommendations(techStack),
59
+ });
60
+ }
61
+ // Architecture analysis
62
+ const architecture = detectArchitecture(memories);
63
+ insights.push({
64
+ category: 'architecture',
65
+ insight: `Architecture: ${architecture}`,
66
+ confidence: 0.6,
67
+ recommendations: [],
68
+ });
69
+ // Convention analysis
70
+ const conventions = extractConventions(memories);
71
+ if (conventions.length > 0) {
72
+ insights.push({
73
+ category: 'conventions',
74
+ insight: `Conventions: ${conventions.slice(0, 3).join('; ')}`,
75
+ confidence: Math.min(1, conventions.length / 2),
76
+ recommendations: [],
77
+ });
78
+ }
79
+ // Decision analysis
80
+ const decisions = memories.filter((m) => m.memory_type === 'decision');
81
+ if (decisions.length > 0) {
82
+ insights.push({
83
+ category: 'decisions',
84
+ insight: `${decisions.length} decisions recorded`,
85
+ confidence: 0.8,
86
+ recommendations: [],
87
+ });
88
+ }
89
+ return insights;
90
+ }
91
+ catch (err) {
92
+ console.error('[UltraMemory] Failed to get project insights:', err);
93
+ return [];
94
+ }
95
+ }
96
+ // ─── Extraction Helpers ──────────────────────────────────────────────────
97
+ function extractProjectTechStack(memories, project) {
98
+ const techSet = new Set();
99
+ // From project record
100
+ if (project?.tech_stack) {
101
+ for (const tech of project.tech_stack) {
102
+ techSet.add(tech);
103
+ }
104
+ }
105
+ // From memories
106
+ for (const mem of memories) {
107
+ if (mem.memory_type === 'tech_stack') {
108
+ const tech = mem.metadata?.technology;
109
+ if (tech)
110
+ techSet.add(tech);
111
+ }
112
+ }
113
+ return [...techSet].sort();
114
+ }
115
+ function detectArchitecture(memories) {
116
+ const archIndicators = [
117
+ { pattern: /\b(?:monolith|monolithic)\b/i, arch: 'Monolith' },
118
+ { pattern: /\b(?:microservice|microservices)\b/i, arch: 'Microservices' },
119
+ { pattern: /\b(?:serverless|lambda|cloud\s*function)\b/i, arch: 'Serverless' },
120
+ { pattern: /\b(?:monorepo|mono-repo)\b/i, arch: 'Monorepo' },
121
+ { pattern: /\b(?:multi[- ]repo|polyrepo)\b/i, arch: 'Multi-repo' },
122
+ { pattern: /\b(?:event[- ]driven|event\s+driven)\b/i, arch: 'Event-driven' },
123
+ { pattern: /\b(?:cqrs|event\s+sourcing)\b/i, arch: 'CQRS/Event Sourcing' },
124
+ { pattern: /\b(?:mvc|MVC)\b/i, arch: 'MVC' },
125
+ ];
126
+ for (const mem of memories) {
127
+ for (const { pattern, arch } of archIndicators) {
128
+ if (pattern.test(mem.content)) {
129
+ return arch;
130
+ }
131
+ }
132
+ }
133
+ return 'Unknown';
134
+ }
135
+ function extractConventions(memories) {
136
+ const conventions = [];
137
+ const conventionPatterns = [
138
+ /\b(?:convention|conventions|style\s+guide|coding\s+standard)\b/i,
139
+ /\b(?:naming\s+convention|naming\s+pattern)\b/i,
140
+ /\b(?:file\s+structure|directory\s+structure|folder\s+structure)\b/i,
141
+ /\b(?:commit\s+message|commit\s+convention|conventional\s+commits)\b/i,
142
+ ];
143
+ for (const mem of memories) {
144
+ if (mem.memory_type === 'pattern' || mem.memory_type === 'project_context') {
145
+ for (const pattern of conventionPatterns) {
146
+ if (pattern.test(mem.content)) {
147
+ conventions.push(mem.content.slice(0, 100));
148
+ break;
149
+ }
150
+ }
151
+ }
152
+ }
153
+ return [...new Set(conventions)].slice(0, 10);
154
+ }
155
+ function extractRecentChanges(memories) {
156
+ return memories
157
+ .filter((m) => m.memory_type === 'decision' || m.memory_type === 'project_context')
158
+ .slice(0, 10)
159
+ .map((m) => m.content.slice(0, 100));
160
+ }
161
+ function generateTechRecommendations(techStack) {
162
+ const recommendations = [];
163
+ // Check for common missing tools
164
+ if (techStack.includes('TypeScript') && !techStack.includes('ESLint')) {
165
+ recommendations.push('Consider adding ESLint for code quality');
166
+ }
167
+ if (techStack.includes('React') && !techStack.includes('Testing Library')) {
168
+ recommendations.push('Consider adding Testing Library for component testing');
169
+ }
170
+ if (techStack.includes('Node.js') && !techStack.includes('Docker')) {
171
+ recommendations.push('Consider adding Docker for containerization');
172
+ }
173
+ return recommendations;
174
+ }
175
+ function getDefaultContext() {
176
+ return {
177
+ name: 'Unknown Project',
178
+ techStack: [],
179
+ architecture: 'Unknown',
180
+ conventions: [],
181
+ recentChanges: [],
182
+ activeBranches: [],
183
+ lastUpdated: new Date().toISOString(),
184
+ };
185
+ }
186
+ //# sourceMappingURL=project-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-context.js","sourceRoot":"","sources":["../../src/memory/project-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface Suggestion {
2
+ type: 'workflow' | 'tool' | 'pattern' | 'optimization' | 'reminder';
3
+ message: string;
4
+ confidence: number;
5
+ source: string;
6
+ actionable: boolean;
7
+ }
8
+ export interface SuggestionContext {
9
+ currentMessage?: string;
10
+ sessionId?: string;
11
+ projectId?: string;
12
+ }
13
+ /**
14
+ * Generate contextual workflow suggestions.
15
+ */
16
+ export declare function getSuggestions(context: SuggestionContext): Promise<Suggestion[]>;
17
+ /**
18
+ * Get quick suggestions for a specific context.
19
+ */
20
+ export declare function getQuickSuggestions(projectId?: string): Promise<Suggestion[]>;
21
+ //# sourceMappingURL=suggestions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestions.d.ts","sourceRoot":"","sources":["../../src/memory/suggestions.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,CAAC;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,UAAU,EAAE,CAAC,CAqCvB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,EAAE,CAAC,CAQvB"}