maskweaver 0.7.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 (284) hide show
  1. package/assets/agents/dummy-human.md +31 -0
  2. package/assets/agents/dummy-template.md +57 -0
  3. package/assets/agents/mask-master.md +225 -0
  4. package/assets/masks/ai-ml/andrew-ng.yaml +207 -0
  5. package/assets/masks/architecture/jeff-dean.yaml +208 -0
  6. package/assets/masks/index.json +65 -0
  7. package/assets/masks/software-engineering/dan-abramov.yaml +188 -0
  8. package/assets/masks/software-engineering/kent-beck.yaml +191 -0
  9. package/assets/masks/software-engineering/linus-torvalds.yaml +152 -0
  10. package/assets/masks/software-engineering/martin-fowler.yaml +173 -0
  11. package/dist/cli/install.d.ts +11 -0
  12. package/dist/cli/install.d.ts.map +1 -0
  13. package/dist/cli/install.js +299 -0
  14. package/dist/cli/install.js.map +1 -0
  15. package/dist/context/config.d.ts +38 -0
  16. package/dist/context/config.d.ts.map +1 -0
  17. package/dist/context/config.js +55 -0
  18. package/dist/context/config.js.map +1 -0
  19. package/dist/context/feature.d.ts +49 -0
  20. package/dist/context/feature.d.ts.map +1 -0
  21. package/dist/context/feature.js +290 -0
  22. package/dist/context/feature.js.map +1 -0
  23. package/dist/context/files.d.ts +17 -0
  24. package/dist/context/files.d.ts.map +1 -0
  25. package/dist/context/files.js +50 -0
  26. package/dist/context/files.js.map +1 -0
  27. package/dist/context/index.d.ts +14 -0
  28. package/dist/context/index.d.ts.map +1 -0
  29. package/dist/context/index.js +18 -0
  30. package/dist/context/index.js.map +1 -0
  31. package/dist/context/project.d.ts +26 -0
  32. package/dist/context/project.d.ts.map +1 -0
  33. package/dist/context/project.js +95 -0
  34. package/dist/context/project.js.map +1 -0
  35. package/dist/context/types.d.ts +72 -0
  36. package/dist/context/types.d.ts.map +1 -0
  37. package/dist/context/types.js +14 -0
  38. package/dist/context/types.js.map +1 -0
  39. package/dist/context/utils.d.ts +22 -0
  40. package/dist/context/utils.d.ts.map +1 -0
  41. package/dist/context/utils.js +40 -0
  42. package/dist/context/utils.js.map +1 -0
  43. package/dist/core/engine/promptBuilder.d.ts +32 -0
  44. package/dist/core/engine/promptBuilder.d.ts.map +1 -0
  45. package/dist/core/engine/promptBuilder.js +117 -0
  46. package/dist/core/engine/promptBuilder.js.map +1 -0
  47. package/dist/core/index.d.ts +11 -0
  48. package/dist/core/index.d.ts.map +1 -0
  49. package/dist/core/index.js +13 -0
  50. package/dist/core/index.js.map +1 -0
  51. package/dist/core/loader/MaskLoader.d.ts +47 -0
  52. package/dist/core/loader/MaskLoader.d.ts.map +1 -0
  53. package/dist/core/loader/MaskLoader.js +132 -0
  54. package/dist/core/loader/MaskLoader.js.map +1 -0
  55. package/dist/core/schema/types.d.ts +128 -0
  56. package/dist/core/schema/types.d.ts.map +1 -0
  57. package/dist/core/schema/types.js +8 -0
  58. package/dist/core/schema/types.js.map +1 -0
  59. package/dist/core/schema/validator.d.ts +290 -0
  60. package/dist/core/schema/validator.d.ts.map +1 -0
  61. package/dist/core/schema/validator.js +105 -0
  62. package/dist/core/schema/validator.js.map +1 -0
  63. package/dist/i18n/index.d.ts +33 -0
  64. package/dist/i18n/index.d.ts.map +1 -0
  65. package/dist/i18n/index.js +57 -0
  66. package/dist/i18n/index.js.map +1 -0
  67. package/dist/i18n/locales/en.json +16 -0
  68. package/dist/index.d.ts +17 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +29 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/memory/chunking.d.ts +35 -0
  73. package/dist/memory/chunking.d.ts.map +1 -0
  74. package/dist/memory/chunking.js +168 -0
  75. package/dist/memory/chunking.js.map +1 -0
  76. package/dist/memory/core.d.ts +73 -0
  77. package/dist/memory/core.d.ts.map +1 -0
  78. package/dist/memory/core.js +186 -0
  79. package/dist/memory/core.js.map +1 -0
  80. package/dist/memory/index.d.ts +21 -0
  81. package/dist/memory/index.d.ts.map +1 -0
  82. package/dist/memory/index.js +22 -0
  83. package/dist/memory/index.js.map +1 -0
  84. package/dist/memory/indexer.d.ts +37 -0
  85. package/dist/memory/indexer.d.ts.map +1 -0
  86. package/dist/memory/indexer.js +162 -0
  87. package/dist/memory/indexer.js.map +1 -0
  88. package/dist/memory/providers/examples.d.ts +17 -0
  89. package/dist/memory/providers/examples.d.ts.map +1 -0
  90. package/dist/memory/providers/examples.js +271 -0
  91. package/dist/memory/providers/examples.js.map +1 -0
  92. package/dist/memory/providers/factory.d.ts +49 -0
  93. package/dist/memory/providers/factory.d.ts.map +1 -0
  94. package/dist/memory/providers/factory.js +111 -0
  95. package/dist/memory/providers/factory.js.map +1 -0
  96. package/dist/memory/providers/index.d.ts +34 -0
  97. package/dist/memory/providers/index.d.ts.map +1 -0
  98. package/dist/memory/providers/index.js +35 -0
  99. package/dist/memory/providers/index.js.map +1 -0
  100. package/dist/memory/providers/ollama.d.ts +18 -0
  101. package/dist/memory/providers/ollama.d.ts.map +1 -0
  102. package/dist/memory/providers/ollama.js +68 -0
  103. package/dist/memory/providers/ollama.js.map +1 -0
  104. package/dist/memory/providers/openai.d.ts +21 -0
  105. package/dist/memory/providers/openai.d.ts.map +1 -0
  106. package/dist/memory/providers/openai.js +91 -0
  107. package/dist/memory/providers/openai.js.map +1 -0
  108. package/dist/memory/providers/openrouter.d.ts +22 -0
  109. package/dist/memory/providers/openrouter.d.ts.map +1 -0
  110. package/dist/memory/providers/openrouter.js +89 -0
  111. package/dist/memory/providers/openrouter.js.map +1 -0
  112. package/dist/memory/providers/text-only.d.ts +20 -0
  113. package/dist/memory/providers/text-only.d.ts.map +1 -0
  114. package/dist/memory/providers/text-only.js +35 -0
  115. package/dist/memory/providers/text-only.js.map +1 -0
  116. package/dist/memory/providers/types.d.ts +63 -0
  117. package/dist/memory/providers/types.d.ts.map +1 -0
  118. package/dist/memory/providers/types.js +9 -0
  119. package/dist/memory/providers/types.js.map +1 -0
  120. package/dist/memory/providers/voyage.d.ts +39 -0
  121. package/dist/memory/providers/voyage.d.ts.map +1 -0
  122. package/dist/memory/providers/voyage.js +127 -0
  123. package/dist/memory/providers/voyage.js.map +1 -0
  124. package/dist/memory/search/hybrid.d.ts +12 -0
  125. package/dist/memory/search/hybrid.d.ts.map +1 -0
  126. package/dist/memory/search/hybrid.js +59 -0
  127. package/dist/memory/search/hybrid.js.map +1 -0
  128. package/dist/memory/store/sqlite.d.ts +86 -0
  129. package/dist/memory/store/sqlite.d.ts.map +1 -0
  130. package/dist/memory/store/sqlite.js +390 -0
  131. package/dist/memory/store/sqlite.js.map +1 -0
  132. package/dist/plugin/config/index.d.ts +148 -0
  133. package/dist/plugin/config/index.d.ts.map +1 -0
  134. package/dist/plugin/config/index.js +236 -0
  135. package/dist/plugin/config/index.js.map +1 -0
  136. package/dist/plugin/index.d.ts +19 -0
  137. package/dist/plugin/index.d.ts.map +1 -0
  138. package/dist/plugin/index.js +811 -0
  139. package/dist/plugin/index.js.map +1 -0
  140. package/dist/plugin/tools/context.d.ts +36 -0
  141. package/dist/plugin/tools/context.d.ts.map +1 -0
  142. package/dist/plugin/tools/context.js +332 -0
  143. package/dist/plugin/tools/context.js.map +1 -0
  144. package/dist/plugin/tools/maskSave.d.ts +6 -0
  145. package/dist/plugin/tools/maskSave.d.ts.map +1 -0
  146. package/dist/plugin/tools/maskSave.js +42 -0
  147. package/dist/plugin/tools/maskSave.js.map +1 -0
  148. package/dist/plugin/tools/memoryGet.d.ts +21 -0
  149. package/dist/plugin/tools/memoryGet.d.ts.map +1 -0
  150. package/dist/plugin/tools/memoryGet.js +40 -0
  151. package/dist/plugin/tools/memoryGet.js.map +1 -0
  152. package/dist/plugin/tools/memoryIndexer.d.ts +6 -0
  153. package/dist/plugin/tools/memoryIndexer.d.ts.map +1 -0
  154. package/dist/plugin/tools/memoryIndexer.js +75 -0
  155. package/dist/plugin/tools/memoryIndexer.js.map +1 -0
  156. package/dist/plugin/tools/memorySearch.d.ts +74 -0
  157. package/dist/plugin/tools/memorySearch.d.ts.map +1 -0
  158. package/dist/plugin/tools/memorySearch.js +172 -0
  159. package/dist/plugin/tools/memorySearch.js.map +1 -0
  160. package/dist/plugin/tools/memoryWrite.d.ts +11 -0
  161. package/dist/plugin/tools/memoryWrite.d.ts.map +1 -0
  162. package/dist/plugin/tools/memoryWrite.js +161 -0
  163. package/dist/plugin/tools/memoryWrite.js.map +1 -0
  164. package/dist/plugin/tools/retrospect.d.ts +6 -0
  165. package/dist/plugin/tools/retrospect.d.ts.map +1 -0
  166. package/dist/plugin/tools/retrospect.js +46 -0
  167. package/dist/plugin/tools/retrospect.js.map +1 -0
  168. package/dist/plugin/types.d.ts +34 -0
  169. package/dist/plugin/types.d.ts.map +1 -0
  170. package/dist/plugin/types.js +7 -0
  171. package/dist/plugin/types.js.map +1 -0
  172. package/dist/retrospect/index.d.ts +14 -0
  173. package/dist/retrospect/index.d.ts.map +1 -0
  174. package/dist/retrospect/index.js +13 -0
  175. package/dist/retrospect/index.js.map +1 -0
  176. package/dist/retrospect/mask-save.d.ts +31 -0
  177. package/dist/retrospect/mask-save.d.ts.map +1 -0
  178. package/dist/retrospect/mask-save.js +263 -0
  179. package/dist/retrospect/mask-save.js.map +1 -0
  180. package/dist/retrospect/retrospect.d.ts +24 -0
  181. package/dist/retrospect/retrospect.d.ts.map +1 -0
  182. package/dist/retrospect/retrospect.js +165 -0
  183. package/dist/retrospect/retrospect.js.map +1 -0
  184. package/dist/retrospect/strategies/base.d.ts +20 -0
  185. package/dist/retrospect/strategies/base.d.ts.map +1 -0
  186. package/dist/retrospect/strategies/base.js +9 -0
  187. package/dist/retrospect/strategies/base.js.map +1 -0
  188. package/dist/retrospect/strategies/deep.d.ts +18 -0
  189. package/dist/retrospect/strategies/deep.d.ts.map +1 -0
  190. package/dist/retrospect/strategies/deep.js +105 -0
  191. package/dist/retrospect/strategies/deep.js.map +1 -0
  192. package/dist/retrospect/strategies/index.d.ts +20 -0
  193. package/dist/retrospect/strategies/index.d.ts.map +1 -0
  194. package/dist/retrospect/strategies/index.js +27 -0
  195. package/dist/retrospect/strategies/index.js.map +1 -0
  196. package/dist/retrospect/strategies/quick.d.ts +18 -0
  197. package/dist/retrospect/strategies/quick.d.ts.map +1 -0
  198. package/dist/retrospect/strategies/quick.js +55 -0
  199. package/dist/retrospect/strategies/quick.js.map +1 -0
  200. package/dist/retrospect/strategies/standard.d.ts +18 -0
  201. package/dist/retrospect/strategies/standard.d.ts.map +1 -0
  202. package/dist/retrospect/strategies/standard.js +66 -0
  203. package/dist/retrospect/strategies/standard.js.map +1 -0
  204. package/dist/retrospect/types.d.ts +34 -0
  205. package/dist/retrospect/types.d.ts.map +1 -0
  206. package/dist/retrospect/types.js +9 -0
  207. package/dist/retrospect/types.js.map +1 -0
  208. package/dist/shared/config.d.ts +130 -0
  209. package/dist/shared/config.d.ts.map +1 -0
  210. package/dist/shared/config.js +12 -0
  211. package/dist/shared/config.js.map +1 -0
  212. package/dist/shared/errors.d.ts +36 -0
  213. package/dist/shared/errors.d.ts.map +1 -0
  214. package/dist/shared/errors.js +57 -0
  215. package/dist/shared/errors.js.map +1 -0
  216. package/dist/shared/index.d.ts +10 -0
  217. package/dist/shared/index.d.ts.map +1 -0
  218. package/dist/shared/index.js +9 -0
  219. package/dist/shared/index.js.map +1 -0
  220. package/dist/shared/types.d.ts +34 -0
  221. package/dist/shared/types.d.ts.map +1 -0
  222. package/dist/shared/types.js +5 -0
  223. package/dist/shared/types.js.map +1 -0
  224. package/dist/shared-context/index.d.ts +11 -0
  225. package/dist/shared-context/index.d.ts.map +1 -0
  226. package/dist/shared-context/index.js +16 -0
  227. package/dist/shared-context/index.js.map +1 -0
  228. package/dist/shared-context/logger.d.ts +10 -0
  229. package/dist/shared-context/logger.d.ts.map +1 -0
  230. package/dist/shared-context/logger.js +28 -0
  231. package/dist/shared-context/logger.js.map +1 -0
  232. package/dist/shared-context/session.d.ts +23 -0
  233. package/dist/shared-context/session.d.ts.map +1 -0
  234. package/dist/shared-context/session.js +34 -0
  235. package/dist/shared-context/session.js.map +1 -0
  236. package/dist/shared-context/squad.d.ts +30 -0
  237. package/dist/shared-context/squad.d.ts.map +1 -0
  238. package/dist/shared-context/squad.js +66 -0
  239. package/dist/shared-context/squad.js.map +1 -0
  240. package/dist/shared-context/storage.d.ts +25 -0
  241. package/dist/shared-context/storage.d.ts.map +1 -0
  242. package/dist/shared-context/storage.js +66 -0
  243. package/dist/shared-context/storage.js.map +1 -0
  244. package/dist/shared-context/types.d.ts +107 -0
  245. package/dist/shared-context/types.d.ts.map +1 -0
  246. package/dist/shared-context/types.js +18 -0
  247. package/dist/shared-context/types.js.map +1 -0
  248. package/dist/verify/budget.d.ts +45 -0
  249. package/dist/verify/budget.d.ts.map +1 -0
  250. package/dist/verify/budget.js +89 -0
  251. package/dist/verify/budget.js.map +1 -0
  252. package/dist/verify/critical-files.d.ts +22 -0
  253. package/dist/verify/critical-files.d.ts.map +1 -0
  254. package/dist/verify/critical-files.js +130 -0
  255. package/dist/verify/critical-files.js.map +1 -0
  256. package/dist/verify/escalation.d.ts +27 -0
  257. package/dist/verify/escalation.d.ts.map +1 -0
  258. package/dist/verify/escalation.js +68 -0
  259. package/dist/verify/escalation.js.map +1 -0
  260. package/dist/verify/index.d.ts +13 -0
  261. package/dist/verify/index.d.ts.map +1 -0
  262. package/dist/verify/index.js +18 -0
  263. package/dist/verify/index.js.map +1 -0
  264. package/dist/verify/prompts.d.ts +27 -0
  265. package/dist/verify/prompts.d.ts.map +1 -0
  266. package/dist/verify/prompts.js +158 -0
  267. package/dist/verify/prompts.js.map +1 -0
  268. package/dist/verify/types.d.ts +80 -0
  269. package/dist/verify/types.d.ts.map +1 -0
  270. package/dist/verify/types.js +22 -0
  271. package/dist/verify/types.js.map +1 -0
  272. package/dist/verify/verifier.d.ts +47 -0
  273. package/dist/verify/verifier.d.ts.map +1 -0
  274. package/dist/verify/verifier.js +180 -0
  275. package/dist/verify/verifier.js.map +1 -0
  276. package/masks/ai-ml/andrew-ng.yaml +207 -0
  277. package/masks/architecture/jeff-dean.yaml +208 -0
  278. package/masks/index.json +65 -0
  279. package/masks/orchestration/squad-operator.yaml +205 -0
  280. package/masks/software-engineering/dan-abramov.yaml +188 -0
  281. package/masks/software-engineering/kent-beck.yaml +191 -0
  282. package/masks/software-engineering/linus-torvalds.yaml +152 -0
  283. package/masks/software-engineering/martin-fowler.yaml +173 -0
  284. package/package.json +111 -0
@@ -0,0 +1,162 @@
1
+ /**
2
+ * File Indexer - Process markdown files into searchable chunks
3
+ *
4
+ * Read file → Parse sections → Chunk → Hash → Embed → Store
5
+ */
6
+ import { readFile } from 'fs/promises';
7
+ import { chunkText } from './chunking.js';
8
+ import { initDatabase, upsertChunk, deleteChunksByPath, getChunksByPath } from './store/sqlite.js';
9
+ import { getDbPath } from './core.js';
10
+ const HEADER_REGEX = /^(#{1,6})\s+(.+)$/;
11
+ /**
12
+ * Parse markdown into sections.
13
+ */
14
+ export function parseMarkdownSections(content) {
15
+ const lines = content.split('\n');
16
+ const sections = [];
17
+ let currentSection = null;
18
+ let currentLines = [];
19
+ let sectionStartLine = 1;
20
+ for (let i = 0; i < lines.length; i++) {
21
+ const line = lines[i];
22
+ const lineNumber = i + 1;
23
+ const headerMatch = line.match(HEADER_REGEX);
24
+ if (headerMatch) {
25
+ // Save previous section
26
+ if (currentSection !== null || currentLines.length > 0) {
27
+ sections.push({
28
+ header: currentSection?.header || '',
29
+ content: currentLines.join('\n'),
30
+ level: currentSection?.level || 0,
31
+ startLine: sectionStartLine,
32
+ endLine: lineNumber - 1
33
+ });
34
+ }
35
+ // Start new section
36
+ currentSection = {
37
+ header: headerMatch[2],
38
+ content: '',
39
+ level: headerMatch[1].length,
40
+ startLine: lineNumber,
41
+ endLine: lineNumber
42
+ };
43
+ currentLines = [line];
44
+ sectionStartLine = lineNumber;
45
+ }
46
+ else {
47
+ currentLines.push(line);
48
+ }
49
+ }
50
+ // Save last section
51
+ if (currentLines.length > 0) {
52
+ sections.push({
53
+ header: currentSection?.header || '',
54
+ content: currentLines.join('\n'),
55
+ level: currentSection?.level || 0,
56
+ startLine: sectionStartLine,
57
+ endLine: lines.length
58
+ });
59
+ }
60
+ return sections;
61
+ }
62
+ /**
63
+ * Classify source from file path.
64
+ */
65
+ export function classifySource(filePath) {
66
+ const normalized = filePath.replace(/\\/g, '/').toLowerCase();
67
+ const fileName = normalized.split('/').pop() || '';
68
+ if (fileName === 'memory.md')
69
+ return 'memory';
70
+ if (fileName === 'masks.md')
71
+ return 'masks';
72
+ if (fileName === 'retrospect.md')
73
+ return 'retrospect';
74
+ if (fileName === 'user.md')
75
+ return 'user';
76
+ if (normalized.includes('/daily/') || normalized.includes('\\daily\\'))
77
+ return 'daily';
78
+ return 'memory';
79
+ }
80
+ // ============================================================================
81
+ // File Processing
82
+ // ============================================================================
83
+ /**
84
+ * Process markdown file into chunks.
85
+ */
86
+ async function processFile(filePath) {
87
+ const content = await readFile(filePath, 'utf-8');
88
+ return chunkText(content, filePath);
89
+ }
90
+ // ============================================================================
91
+ // Indexing
92
+ // ============================================================================
93
+ /**
94
+ * Index a single file.
95
+ * Only re-embeds chunks that changed (based on hash).
96
+ */
97
+ export async function indexFile(filePath, getEmbedding, basePath) {
98
+ console.log(`[Indexer] Processing: ${filePath}`);
99
+ // Initialize database
100
+ initDatabase(getDbPath(basePath));
101
+ // Process file
102
+ const chunks = await processFile(filePath);
103
+ console.log(`[Indexer] Generated ${chunks.length} chunks`);
104
+ // Get existing chunks for hash comparison
105
+ const existingChunks = getChunksByPath(filePath);
106
+ const existingHashes = new Set(existingChunks.map(c => c.hash));
107
+ // Process only changed chunks
108
+ let newCount = 0;
109
+ let skippedCount = 0;
110
+ for (const chunk of chunks) {
111
+ if (existingHashes.has(chunk.hash)) {
112
+ skippedCount++;
113
+ continue;
114
+ }
115
+ // New or changed chunk - compute embedding
116
+ const embedding = await getEmbedding(chunk.text);
117
+ upsertChunk(chunk, embedding);
118
+ newCount++;
119
+ }
120
+ console.log(`[Indexer] Completed: ${newCount} new, ${skippedCount} unchanged`);
121
+ }
122
+ /**
123
+ * Reindex file (delete all chunks and reindex).
124
+ */
125
+ export async function reindexFile(filePath, getEmbedding, basePath) {
126
+ console.log(`[Indexer] Reindexing: ${filePath}`);
127
+ initDatabase(getDbPath(basePath));
128
+ // Delete existing chunks
129
+ deleteChunksByPath(filePath);
130
+ // Process and index all chunks
131
+ const chunks = await processFile(filePath);
132
+ for (const chunk of chunks) {
133
+ const embedding = await getEmbedding(chunk.text);
134
+ upsertChunk(chunk, embedding);
135
+ }
136
+ console.log(`[Indexer] Reindexed ${chunks.length} chunks`);
137
+ }
138
+ /**
139
+ * Index all memory files in directory.
140
+ */
141
+ export async function indexAllMemoryFiles(baseDir, getEmbedding, basePath) {
142
+ console.log(`[Indexer] Scanning directory: ${baseDir}`);
143
+ initDatabase(getDbPath(basePath || baseDir));
144
+ // Main memory files
145
+ const mainFiles = ['MEMORY.md', 'MASKS.md', 'RETROSPECT.md', 'USER.md'];
146
+ let totalFiles = 0;
147
+ for (const fileName of mainFiles) {
148
+ const filePath = `${baseDir}/${fileName}`;
149
+ try {
150
+ await indexFile(filePath, getEmbedding, basePath || baseDir);
151
+ totalFiles++;
152
+ }
153
+ catch (error) {
154
+ // File doesn't exist or not readable
155
+ console.log(`[Indexer] Skipping ${fileName}: ${error}`);
156
+ }
157
+ }
158
+ // TODO: Scan daily directory
159
+ // This requires glob or fs.readdir
160
+ console.log(`[Indexer] Completed indexing ${totalFiles} files`);
161
+ }
162
+ //# sourceMappingURL=indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/memory/indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Embedding Provider Usage Examples
3
+ *
4
+ * Practical examples showing how to use the provider system.
5
+ */
6
+ declare function example1_autoSelection(): Promise<void>;
7
+ declare function example2_manualSelection(): Promise<void>;
8
+ declare function example3_codeEmbedding(): Promise<void>;
9
+ declare function example4_asymmetricSearch(): Promise<void>;
10
+ declare function example5_customPriority(): Promise<void>;
11
+ declare function example6_production(): Promise<void>;
12
+ declare function example7_batchProcessing(): Promise<void>;
13
+ declare function example8_errorHandling(): Promise<void>;
14
+ declare function example9_healthMonitoring(): Promise<void>;
15
+ declare function example10_testing(): Promise<void>;
16
+ export { example1_autoSelection, example2_manualSelection, example3_codeEmbedding, example4_asymmetricSearch, example5_customPriority, example6_production, example7_batchProcessing, example8_errorHandling, example9_healthMonitoring, example10_testing };
17
+ //# sourceMappingURL=examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../../src/memory/providers/examples.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,iBAAe,sBAAsB,kBAkBpC;AAMD,iBAAe,wBAAwB,kBAyBtC;AAMD,iBAAe,sBAAsB,kBAuBpC;AAMD,iBAAe,yBAAyB,kBAiDvC;AAMD,iBAAe,uBAAuB,kBAcrC;AAMD,iBAAe,mBAAmB,kBAmCjC;AAMD,iBAAe,wBAAwB,kBAmBtC;AAMD,iBAAe,sBAAsB,kBAepC;AAMD,iBAAe,yBAAyB,kBAsBvC;AAMD,iBAAe,iBAAiB,kBAc/B;AAmCD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EAClB,CAAC"}
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Embedding Provider Usage Examples
3
+ *
4
+ * Practical examples showing how to use the provider system.
5
+ */
6
+ import { createProvider, selectBestProvider, getDefaultConfigs } from "./index.js";
7
+ // ============================================================================
8
+ // Example 1: Auto-selection (Recommended)
9
+ // ============================================================================
10
+ async function example1_autoSelection() {
11
+ console.log("Example 1: Auto-selection with graceful degradation\n");
12
+ // Let the system choose the best available provider
13
+ const provider = await selectBestProvider(getDefaultConfigs());
14
+ console.log(`✓ Selected: ${provider.name}`);
15
+ console.log(` Type: ${provider.type}`);
16
+ console.log(` Dimensions: ${provider.dimensions}\n`);
17
+ // Use it!
18
+ const embeddings = await provider.embed([
19
+ "Hello, world!",
20
+ "TypeScript is awesome"
21
+ ]);
22
+ console.log(`Generated ${embeddings.length} embeddings`);
23
+ console.log(`Each embedding has ${embeddings[0].length} dimensions\n`);
24
+ }
25
+ // ============================================================================
26
+ // Example 2: Manual Provider Selection
27
+ // ============================================================================
28
+ async function example2_manualSelection() {
29
+ console.log("Example 2: Manual provider selection\n");
30
+ // For local development - privacy-first
31
+ const localProvider = createProvider({
32
+ type: "ollama",
33
+ model: "nomic-embed-text"
34
+ });
35
+ console.log(`Using: ${localProvider.name}`);
36
+ // Check health before using
37
+ const health = await localProvider.healthCheck();
38
+ if (!health.ok) {
39
+ console.error(`❌ ${health.reason}`);
40
+ if (health.hint) {
41
+ console.log(`💡 Hint: ${health.hint}`);
42
+ }
43
+ return;
44
+ }
45
+ console.log("✓ Provider is healthy\n");
46
+ const embeddings = await localProvider.embed(["Test document"]);
47
+ console.log(`Generated embedding with ${embeddings[0].length} dimensions\n`);
48
+ }
49
+ // ============================================================================
50
+ // Example 3: Code-Specialized Embedding
51
+ // ============================================================================
52
+ async function example3_codeEmbedding() {
53
+ console.log("Example 3: Code-specialized embedding with Voyage\n");
54
+ const codeProvider = createProvider({
55
+ type: "voyage",
56
+ model: "voyage-code-3",
57
+ dimensions: 1024,
58
+ apiKey: process.env.VOYAGE_API_KEY
59
+ });
60
+ // Code snippets
61
+ const codeSnippets = [
62
+ "function fibonacci(n: number): number { return n < 2 ? n : fibonacci(n-1) + fibonacci(n-2); }",
63
+ "const factorial = (n: number): number => n <= 1 ? 1 : n * factorial(n - 1);",
64
+ "class Stack<T> { private items: T[] = []; push(item: T) { this.items.push(item); } }"
65
+ ];
66
+ // Use code-specific embedding
67
+ if (codeProvider.embedCode) {
68
+ const embeddings = await codeProvider.embedCode(codeSnippets);
69
+ console.log(`Generated ${embeddings.length} code embeddings`);
70
+ console.log(`Optimized for code similarity search\n`);
71
+ }
72
+ }
73
+ // ============================================================================
74
+ // Example 4: Asymmetric Search (Query vs Document)
75
+ // ============================================================================
76
+ async function example4_asymmetricSearch() {
77
+ console.log("Example 4: Asymmetric search with Voyage\n");
78
+ const provider = createProvider({
79
+ type: "voyage",
80
+ model: "voyage-4-lite",
81
+ apiKey: process.env.VOYAGE_API_KEY
82
+ });
83
+ // Documents (what you're searching through)
84
+ const documents = [
85
+ "TypeScript is a strongly typed programming language that builds on JavaScript.",
86
+ "Python is an interpreted, high-level programming language with dynamic semantics.",
87
+ "Rust is a systems programming language focused on safety and performance."
88
+ ];
89
+ // Query (what the user is searching for)
90
+ const query = "What is a type-safe language?";
91
+ // Embed documents
92
+ const docEmbeddings = await provider.embed(documents);
93
+ // Embed query (optimized differently)
94
+ let queryEmbedding;
95
+ if (provider.embedQuery) {
96
+ queryEmbedding = await provider.embedQuery(query);
97
+ console.log("✓ Used query-optimized embedding");
98
+ }
99
+ else {
100
+ [queryEmbedding] = await provider.embed([query]);
101
+ console.log("✓ Used standard embedding");
102
+ }
103
+ // Compute cosine similarity (simplified)
104
+ const similarities = docEmbeddings.map((docEmb) => {
105
+ const dotProduct = docEmb.reduce((sum, val, i) => sum + val * queryEmbedding[i], 0);
106
+ const magnitude1 = Math.sqrt(docEmb.reduce((sum, val) => sum + val * val, 0));
107
+ const magnitude2 = Math.sqrt(queryEmbedding.reduce((sum, val) => sum + val * val, 0));
108
+ return dotProduct / (magnitude1 * magnitude2);
109
+ });
110
+ // Show results
111
+ console.log("\nSearch results:");
112
+ similarities
113
+ .map((sim, i) => ({ doc: documents[i], similarity: sim }))
114
+ .sort((a, b) => b.similarity - a.similarity)
115
+ .forEach((result, i) => {
116
+ console.log(`${i + 1}. [${result.similarity.toFixed(3)}] ${result.doc}`);
117
+ });
118
+ console.log();
119
+ }
120
+ // ============================================================================
121
+ // Example 5: Custom Priority Order
122
+ // ============================================================================
123
+ async function example5_customPriority() {
124
+ console.log("Example 5: Custom priority order\n");
125
+ // Try local first, then cloud
126
+ const customConfigs = [
127
+ { type: "ollama" }, // Free, local
128
+ { type: "openai", dimensions: 512 }, // Cheap, small dimensions
129
+ { type: "text-only" } // Ultimate fallback
130
+ ];
131
+ const provider = await selectBestProvider(customConfigs);
132
+ console.log(`Selected: ${provider.name}`);
133
+ console.log(`Strategy: Try local → Try cheap cloud → Fallback\n`);
134
+ }
135
+ // ============================================================================
136
+ // Example 6: Production Configuration
137
+ // ============================================================================
138
+ async function example6_production() {
139
+ console.log("Example 6: Production-ready configuration\n");
140
+ // Production setup with redundancy
141
+ const productionConfigs = [
142
+ // Primary: High-quality embeddings
143
+ {
144
+ type: "openai",
145
+ model: "text-embedding-3-large",
146
+ dimensions: 3072
147
+ },
148
+ // Fallback 1: Smaller but still good
149
+ {
150
+ type: "openai",
151
+ model: "text-embedding-3-small",
152
+ dimensions: 1536
153
+ },
154
+ // Fallback 2: Alternative provider
155
+ {
156
+ type: "voyage",
157
+ model: "voyage-4-lite",
158
+ dimensions: 1024
159
+ },
160
+ // Fallback 3: Multi-provider gateway
161
+ {
162
+ type: "openrouter",
163
+ model: "openai/text-embedding-3-small"
164
+ }
165
+ ];
166
+ const provider = await selectBestProvider(productionConfigs);
167
+ console.log(`✓ Production provider: ${provider.name}`);
168
+ console.log(` Dimensions: ${provider.dimensions}`);
169
+ console.log(` Type: ${provider.type}\n`);
170
+ }
171
+ // ============================================================================
172
+ // Example 7: Batch Processing
173
+ // ============================================================================
174
+ async function example7_batchProcessing() {
175
+ console.log("Example 7: Efficient batch processing\n");
176
+ const provider = await selectBestProvider(getDefaultConfigs());
177
+ // Efficient: Single API call
178
+ const startTime = Date.now();
179
+ const texts = Array.from({ length: 100 }, (_, i) => `Document number ${i + 1} with some content`);
180
+ const embeddings = await provider.embed(texts);
181
+ const duration = Date.now() - startTime;
182
+ console.log(`✓ Embedded ${embeddings.length} documents in ${duration}ms`);
183
+ console.log(` Average: ${(duration / embeddings.length).toFixed(2)}ms per document\n`);
184
+ }
185
+ // ============================================================================
186
+ // Example 8: Error Handling
187
+ // ============================================================================
188
+ async function example8_errorHandling() {
189
+ console.log("Example 8: Proper error handling\n");
190
+ try {
191
+ // Invalid configuration
192
+ const provider = createProvider({
193
+ type: "openai",
194
+ dimensions: 999 // Invalid dimension!
195
+ });
196
+ await provider.embed(["test"]);
197
+ }
198
+ catch (error) {
199
+ console.error("❌ Caught error:", error instanceof Error ? error.message : error);
200
+ console.log("✓ Errors are clear and actionable\n");
201
+ }
202
+ }
203
+ // ============================================================================
204
+ // Example 9: Health Monitoring
205
+ // ============================================================================
206
+ async function example9_healthMonitoring() {
207
+ console.log("Example 9: Health monitoring\n");
208
+ const providers = [
209
+ createProvider({ type: "ollama" }),
210
+ createProvider({ type: "text-only" })
211
+ ];
212
+ for (const provider of providers) {
213
+ const health = await provider.healthCheck();
214
+ console.log(`${provider.name}:`);
215
+ console.log(` Status: ${health.ok ? "✓ Healthy" : "✗ Unhealthy"}`);
216
+ if (health.reason) {
217
+ console.log(` Reason: ${health.reason}`);
218
+ }
219
+ if (health.hint) {
220
+ console.log(` Hint: ${health.hint}`);
221
+ }
222
+ console.log();
223
+ }
224
+ }
225
+ // ============================================================================
226
+ // Example 10: Testing Setup
227
+ // ============================================================================
228
+ async function example10_testing() {
229
+ console.log("Example 10: Testing setup\n");
230
+ // Use text-only provider for fast tests
231
+ const testProvider = createProvider({ type: "text-only" });
232
+ console.log("Test provider setup:");
233
+ console.log(` Name: ${testProvider.name}`);
234
+ console.log(` No API calls: ✓`);
235
+ console.log(` Always available: ✓`);
236
+ console.log(` Fast: ✓`);
237
+ const embeddings = await testProvider.embed(["test1", "test2", "test3"]);
238
+ console.log(` Generated ${embeddings.length} mock embeddings\n`);
239
+ }
240
+ // ============================================================================
241
+ // Run Examples
242
+ // ============================================================================
243
+ async function runExamples() {
244
+ const examples = [
245
+ example1_autoSelection,
246
+ example2_manualSelection,
247
+ example3_codeEmbedding,
248
+ example4_asymmetricSearch,
249
+ example5_customPriority,
250
+ example6_production,
251
+ example7_batchProcessing,
252
+ example8_errorHandling,
253
+ example9_healthMonitoring,
254
+ example10_testing
255
+ ];
256
+ for (const example of examples) {
257
+ try {
258
+ await example();
259
+ }
260
+ catch (error) {
261
+ console.error(`Error in ${example.name}:`, error);
262
+ }
263
+ console.log("─".repeat(80) + "\n");
264
+ }
265
+ }
266
+ // Run if executed directly
267
+ if (import.meta.url === `file://${process.argv[1]}`) {
268
+ runExamples().catch(console.error);
269
+ }
270
+ export { example1_autoSelection, example2_manualSelection, example3_codeEmbedding, example4_asymmetricSearch, example5_customPriority, example6_production, example7_batchProcessing, example8_errorHandling, example9_healthMonitoring, example10_testing };
271
+ //# sourceMappingURL=examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../../src/memory/providers/examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Provider Factory with Graceful Degradation
3
+ *
4
+ * "Make the right things easy and the wrong things hard."
5
+ *
6
+ * This factory implements:
7
+ * 1. Strategy Pattern - swappable providers
8
+ * 2. Factory Pattern - centralized creation
9
+ * 3. Graceful Degradation - automatic fallback to working providers
10
+ */
11
+ import type { IEmbeddingProvider, ProviderConfig } from "./types.js";
12
+ /**
13
+ * Create a provider from configuration
14
+ *
15
+ * @throws Error if provider type is invalid or required credentials are missing
16
+ */
17
+ export declare function createProvider(config: ProviderConfig): IEmbeddingProvider;
18
+ /**
19
+ * Select the best working provider from a list
20
+ *
21
+ * Implements graceful degradation:
22
+ * - Tries each provider in order
23
+ * - Returns first healthy provider
24
+ * - Falls back to text-only if all fail
25
+ *
26
+ * @param configs - Array of provider configurations in priority order
27
+ * @returns The first healthy provider or text-only fallback
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const provider = await selectBestProvider([
32
+ * { type: "voyage", model: "voyage-code-3" },
33
+ * { type: "ollama" },
34
+ * { type: "openai" }
35
+ * ]);
36
+ * ```
37
+ */
38
+ export declare function selectBestProvider(configs: ProviderConfig[]): Promise<IEmbeddingProvider>;
39
+ /**
40
+ * Get default provider configurations
41
+ *
42
+ * Priority order:
43
+ * 1. Voyage (code-specialized)
44
+ * 2. Ollama (local, free)
45
+ * 3. OpenAI (reliable)
46
+ * 4. OpenRouter (fallback)
47
+ */
48
+ export declare function getDefaultConfigs(): ProviderConfig[];
49
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/memory/providers/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAOrE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAoBzE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EAAE,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAqC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,EAAE,CAqBpD"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Provider Factory with Graceful Degradation
3
+ *
4
+ * "Make the right things easy and the wrong things hard."
5
+ *
6
+ * This factory implements:
7
+ * 1. Strategy Pattern - swappable providers
8
+ * 2. Factory Pattern - centralized creation
9
+ * 3. Graceful Degradation - automatic fallback to working providers
10
+ */
11
+ import { OllamaProvider } from "./ollama.js";
12
+ import { OpenAIProvider } from "./openai.js";
13
+ import { VoyageProvider } from "./voyage.js";
14
+ import { OpenRouterProvider } from "./openrouter.js";
15
+ import { TextOnlyProvider } from "./text-only.js";
16
+ /**
17
+ * Create a provider from configuration
18
+ *
19
+ * @throws Error if provider type is invalid or required credentials are missing
20
+ */
21
+ export function createProvider(config) {
22
+ switch (config.type) {
23
+ case "ollama":
24
+ return new OllamaProvider(config);
25
+ case "openai":
26
+ return new OpenAIProvider(config);
27
+ case "voyage":
28
+ return new VoyageProvider(config);
29
+ case "openrouter":
30
+ return new OpenRouterProvider(config);
31
+ case "text-only":
32
+ return new TextOnlyProvider(config);
33
+ default:
34
+ throw new Error(`Unknown provider type: ${config.type}`);
35
+ }
36
+ }
37
+ /**
38
+ * Select the best working provider from a list
39
+ *
40
+ * Implements graceful degradation:
41
+ * - Tries each provider in order
42
+ * - Returns first healthy provider
43
+ * - Falls back to text-only if all fail
44
+ *
45
+ * @param configs - Array of provider configurations in priority order
46
+ * @returns The first healthy provider or text-only fallback
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const provider = await selectBestProvider([
51
+ * { type: "voyage", model: "voyage-code-3" },
52
+ * { type: "ollama" },
53
+ * { type: "openai" }
54
+ * ]);
55
+ * ```
56
+ */
57
+ export async function selectBestProvider(configs) {
58
+ const results = [];
59
+ // Try each provider
60
+ for (const config of configs) {
61
+ try {
62
+ const provider = createProvider(config);
63
+ const health = await provider.healthCheck();
64
+ results.push({ provider, health });
65
+ if (health.ok) {
66
+ console.log(`✓ Selected provider: ${provider.name}`);
67
+ return provider;
68
+ }
69
+ console.warn(`✗ ${provider.name} unavailable: ${health.reason}${health.hint ? `\n Hint: ${health.hint}` : ""}`);
70
+ }
71
+ catch (error) {
72
+ console.warn(`✗ Failed to initialize ${config.type}:`, error instanceof Error ? error.message : error);
73
+ }
74
+ }
75
+ // Fallback to text-only
76
+ console.warn("⚠️ All embedding providers failed. Falling back to text-only mode.");
77
+ console.warn(" Semantic search will be limited to keyword matching.");
78
+ return new TextOnlyProvider({ type: "text-only" });
79
+ }
80
+ /**
81
+ * Get default provider configurations
82
+ *
83
+ * Priority order:
84
+ * 1. Voyage (code-specialized)
85
+ * 2. Ollama (local, free)
86
+ * 3. OpenAI (reliable)
87
+ * 4. OpenRouter (fallback)
88
+ */
89
+ export function getDefaultConfigs() {
90
+ return [
91
+ {
92
+ type: "voyage",
93
+ model: "voyage-code-3",
94
+ dimensions: 1024
95
+ },
96
+ {
97
+ type: "ollama",
98
+ model: "nomic-embed-text"
99
+ },
100
+ {
101
+ type: "openai",
102
+ model: "text-embedding-3-small",
103
+ dimensions: 1536
104
+ },
105
+ {
106
+ type: "openrouter",
107
+ model: "openai/text-embedding-3-small"
108
+ }
109
+ ];
110
+ }
111
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/memory/providers/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAEpC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAEpC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAEpC,KAAK,YAAY;YACf,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAExC,KAAK,WAAW;YACd,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEtC;YACE,MAAM,IAAI,KAAK,CAAC,0BAA2B,MAAyB,CAAC,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAyB;IAEzB,MAAM,OAAO,GAGR,EAAE,CAAC;IAER,oBAAoB;IACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YAE5C,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAEnC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrD,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,OAAO,CAAC,IAAI,CACV,KAAK,QAAQ,CAAC,IAAI,iBAAiB,MAAM,CAAC,MAAM,GAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAC7C,EAAE,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CACV,0BAA0B,MAAM,CAAC,IAAI,GAAG,EACxC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IACpF,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IAExE,OAAO,IAAI,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,eAAe;YACtB,UAAU,EAAE,IAAI;SACjB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,kBAAkB;SAC1B;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,wBAAwB;YAC/B,UAAU,EAAE,IAAI;SACjB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,+BAA+B;SACvC;KACF,CAAC;AACJ,CAAC"}