@cmdoss/memwal-sdk 0.6.0 → 0.6.1

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 (224) hide show
  1. package/ARCHITECTURE.md +86 -2
  2. package/BENCHMARKS.md +2 -2
  3. package/README.md +43 -4
  4. package/dist/ai-sdk/types.d.ts +2 -2
  5. package/dist/ai-sdk/types.d.ts.map +1 -1
  6. package/dist/browser.d.ts +9 -9
  7. package/dist/browser.d.ts.map +1 -1
  8. package/dist/browser.js +16 -11
  9. package/dist/browser.js.map +1 -1
  10. package/dist/client/PersonalDataWallet.d.ts.map +1 -1
  11. package/dist/client/SimplePDWClient.d.ts.map +1 -1
  12. package/dist/client/SimplePDWClient.js +4 -4
  13. package/dist/client/SimplePDWClient.js.map +1 -1
  14. package/dist/client/namespaces/BatchNamespace.js +2 -2
  15. package/dist/client/namespaces/BatchNamespace.js.map +1 -1
  16. package/dist/client/namespaces/MemoryNamespace.js +3 -3
  17. package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
  18. package/dist/client/namespaces/StorageNamespace.js +4 -4
  19. package/dist/client/namespaces/StorageNamespace.js.map +1 -1
  20. package/dist/client/namespaces/consolidated/StorageNamespace.js +2 -2
  21. package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
  22. package/dist/client/signers/DappKitSigner.d.ts +136 -0
  23. package/dist/client/signers/DappKitSigner.d.ts.map +1 -0
  24. package/dist/client/signers/DappKitSigner.js +128 -0
  25. package/dist/client/signers/DappKitSigner.js.map +1 -0
  26. package/dist/client/signers/KeypairSigner.d.ts +4 -0
  27. package/dist/client/signers/KeypairSigner.d.ts.map +1 -1
  28. package/dist/client/signers/KeypairSigner.js +6 -0
  29. package/dist/client/signers/KeypairSigner.js.map +1 -1
  30. package/dist/client/signers/UnifiedSigner.d.ts +10 -0
  31. package/dist/client/signers/UnifiedSigner.d.ts.map +1 -1
  32. package/dist/client/signers/WalletAdapterSigner.d.ts +7 -0
  33. package/dist/client/signers/WalletAdapterSigner.d.ts.map +1 -1
  34. package/dist/client/signers/WalletAdapterSigner.js +9 -0
  35. package/dist/client/signers/WalletAdapterSigner.js.map +1 -1
  36. package/dist/client/signers/index.d.ts +3 -0
  37. package/dist/client/signers/index.d.ts.map +1 -1
  38. package/dist/client/signers/index.js +2 -0
  39. package/dist/client/signers/index.js.map +1 -1
  40. package/dist/generated/utils/index.js +1 -1
  41. package/dist/generated/utils/index.js.map +1 -1
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -0
  45. package/dist/index.js.map +1 -1
  46. package/dist/services/CapabilityService.js +1 -1
  47. package/dist/services/CapabilityService.js.map +1 -1
  48. package/dist/services/EncryptionService.js +1 -1
  49. package/dist/services/EncryptionService.js.map +1 -1
  50. package/dist/services/StorageService.d.ts +8 -8
  51. package/dist/services/StorageService.d.ts.map +1 -1
  52. package/dist/services/StorageService.js.map +1 -1
  53. package/dist/services/VectorService.js +2 -2
  54. package/dist/services/VectorService.js.map +1 -1
  55. package/dist/services/storage/BlobAttributesManager.d.ts +4 -4
  56. package/dist/services/storage/BlobAttributesManager.d.ts.map +1 -1
  57. package/dist/services/storage/BlobAttributesManager.js +6 -15
  58. package/dist/services/storage/BlobAttributesManager.js.map +1 -1
  59. package/dist/services/storage/QuiltBatchManager.d.ts +23 -5
  60. package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
  61. package/dist/services/storage/QuiltBatchManager.js +118 -35
  62. package/dist/services/storage/QuiltBatchManager.js.map +1 -1
  63. package/dist/services/storage/WalrusMetadataManager.d.ts +2 -2
  64. package/dist/services/storage/WalrusMetadataManager.d.ts.map +1 -1
  65. package/dist/services/storage/WalrusMetadataManager.js +2 -5
  66. package/dist/services/storage/WalrusMetadataManager.js.map +1 -1
  67. package/dist/services/storage/WalrusStorageManager.d.ts +2 -2
  68. package/dist/services/storage/WalrusStorageManager.d.ts.map +1 -1
  69. package/dist/services/storage/WalrusStorageManager.js +7 -11
  70. package/dist/services/storage/WalrusStorageManager.js.map +1 -1
  71. package/dist/wallet/MainWalletService.js +1 -1
  72. package/dist/wallet/MainWalletService.js.map +1 -1
  73. package/package.json +10 -3
  74. package/src/ai-sdk/types.ts +2 -2
  75. package/src/browser.ts +19 -20
  76. package/src/client/SimplePDWClient.ts +18 -14
  77. package/src/client/namespaces/BatchNamespace.ts +2 -2
  78. package/src/client/namespaces/MemoryNamespace.ts +3 -3
  79. package/src/client/namespaces/StorageNamespace.ts +4 -4
  80. package/src/client/namespaces/consolidated/StorageNamespace.ts +2 -2
  81. package/src/client/signers/DappKitSigner.ts +207 -0
  82. package/src/client/signers/KeypairSigner.ts +7 -0
  83. package/src/client/signers/UnifiedSigner.ts +11 -0
  84. package/src/client/signers/WalletAdapterSigner.ts +10 -0
  85. package/src/client/signers/index.ts +7 -0
  86. package/src/generated/pdw/deps/sui/object.ts +12 -12
  87. package/src/generated/pdw/deps/sui/vec_map.ts +32 -32
  88. package/src/generated/pdw/memory.ts +1087 -1087
  89. package/src/generated/pdw/wallet.ts +123 -123
  90. package/src/generated/utils/index.ts +159 -159
  91. package/src/index.ts +16 -0
  92. package/src/services/CapabilityService.ts +1 -1
  93. package/src/services/EncryptionService.ts +1 -1
  94. package/src/services/StorageService.ts +8 -8
  95. package/src/services/VectorService.ts +2 -2
  96. package/src/services/storage/BlobAttributesManager.ts +10 -19
  97. package/src/services/storage/QuiltBatchManager.ts +139 -37
  98. package/src/services/storage/WalrusMetadataManager.ts +4 -7
  99. package/src/services/storage/WalrusStorageManager.ts +10 -13
  100. package/src/wallet/MainWalletService.ts +1 -1
  101. package/dist/api/client.d.ts +0 -43
  102. package/dist/api/client.d.ts.map +0 -1
  103. package/dist/api/client.js +0 -136
  104. package/dist/api/client.js.map +0 -1
  105. package/dist/chat/index.d.ts +0 -13
  106. package/dist/chat/index.d.ts.map +0 -1
  107. package/dist/chat/index.js +0 -14
  108. package/dist/chat/index.js.map +0 -1
  109. package/dist/client/namespaces/ChatNamespace.d.ts +0 -110
  110. package/dist/client/namespaces/ChatNamespace.d.ts.map +0 -1
  111. package/dist/client/namespaces/ChatNamespace.js +0 -123
  112. package/dist/client/namespaces/ChatNamespace.js.map +0 -1
  113. package/dist/encryption/index.d.ts +0 -14
  114. package/dist/encryption/index.d.ts.map +0 -1
  115. package/dist/encryption/index.js +0 -14
  116. package/dist/encryption/index.js.map +0 -1
  117. package/dist/graph/BrowserKnowledgeGraphManager.d.ts +0 -101
  118. package/dist/graph/BrowserKnowledgeGraphManager.d.ts.map +0 -1
  119. package/dist/graph/BrowserKnowledgeGraphManager.js +0 -411
  120. package/dist/graph/BrowserKnowledgeGraphManager.js.map +0 -1
  121. package/dist/hooks.wip/index.d.ts +0 -55
  122. package/dist/hooks.wip/index.d.ts.map +0 -1
  123. package/dist/hooks.wip/index.js +0 -58
  124. package/dist/hooks.wip/index.js.map +0 -1
  125. package/dist/hooks.wip/useCreateMemory.d.ts +0 -111
  126. package/dist/hooks.wip/useCreateMemory.d.ts.map +0 -1
  127. package/dist/hooks.wip/useCreateMemory.js +0 -149
  128. package/dist/hooks.wip/useCreateMemory.js.map +0 -1
  129. package/dist/hooks.wip/useCreateMemoryBatch.d.ts +0 -122
  130. package/dist/hooks.wip/useCreateMemoryBatch.d.ts.map +0 -1
  131. package/dist/hooks.wip/useCreateMemoryBatch.js +0 -221
  132. package/dist/hooks.wip/useCreateMemoryBatch.js.map +0 -1
  133. package/dist/hooks.wip/useKnowledgeGraph.d.ts +0 -66
  134. package/dist/hooks.wip/useKnowledgeGraph.d.ts.map +0 -1
  135. package/dist/hooks.wip/useKnowledgeGraph.js +0 -229
  136. package/dist/hooks.wip/useKnowledgeGraph.js.map +0 -1
  137. package/dist/hooks.wip/useMemoryChat.d.ts +0 -106
  138. package/dist/hooks.wip/useMemoryChat.d.ts.map +0 -1
  139. package/dist/hooks.wip/useMemoryChat.js +0 -284
  140. package/dist/hooks.wip/useMemoryChat.js.map +0 -1
  141. package/dist/hooks.wip/useMemoryIndex.d.ts +0 -90
  142. package/dist/hooks.wip/useMemoryIndex.d.ts.map +0 -1
  143. package/dist/hooks.wip/useMemoryIndex.js +0 -218
  144. package/dist/hooks.wip/useMemoryIndex.js.map +0 -1
  145. package/dist/hooks.wip/useMemoryManager.d.ts +0 -35
  146. package/dist/hooks.wip/useMemoryManager.d.ts.map +0 -1
  147. package/dist/hooks.wip/useMemoryManager.js +0 -86
  148. package/dist/hooks.wip/useMemoryManager.js.map +0 -1
  149. package/dist/hooks.wip/useMemorySearch.d.ts +0 -100
  150. package/dist/hooks.wip/useMemorySearch.d.ts.map +0 -1
  151. package/dist/hooks.wip/useMemorySearch.js +0 -278
  152. package/dist/hooks.wip/useMemorySearch.js.map +0 -1
  153. package/dist/hooks.wip/useMemoryServices.d.ts +0 -80
  154. package/dist/hooks.wip/useMemoryServices.d.ts.map +0 -1
  155. package/dist/hooks.wip/useMemoryServices.js +0 -264
  156. package/dist/hooks.wip/useMemoryServices.js.map +0 -1
  157. package/dist/hooks.wip/usePDWRAG.d.ts +0 -112
  158. package/dist/hooks.wip/usePDWRAG.d.ts.map +0 -1
  159. package/dist/hooks.wip/usePDWRAG.js +0 -121
  160. package/dist/hooks.wip/usePDWRAG.js.map +0 -1
  161. package/dist/hooks.wip/usePDWVectorStore.d.ts +0 -68
  162. package/dist/hooks.wip/usePDWVectorStore.d.ts.map +0 -1
  163. package/dist/hooks.wip/usePDWVectorStore.js +0 -102
  164. package/dist/hooks.wip/usePDWVectorStore.js.map +0 -1
  165. package/dist/hooks.wip/useRetrieveEmbedding.d.ts +0 -138
  166. package/dist/hooks.wip/useRetrieveEmbedding.d.ts.map +0 -1
  167. package/dist/hooks.wip/useRetrieveEmbedding.js +0 -121
  168. package/dist/hooks.wip/useRetrieveEmbedding.js.map +0 -1
  169. package/dist/hooks.wip/useSearchMemories.d.ts +0 -103
  170. package/dist/hooks.wip/useSearchMemories.d.ts.map +0 -1
  171. package/dist/hooks.wip/useSearchMemories.js +0 -146
  172. package/dist/hooks.wip/useSearchMemories.js.map +0 -1
  173. package/dist/hooks.wip/useStoreEmbedding.d.ts +0 -174
  174. package/dist/hooks.wip/useStoreEmbedding.d.ts.map +0 -1
  175. package/dist/hooks.wip/useStoreEmbedding.js +0 -167
  176. package/dist/hooks.wip/useStoreEmbedding.js.map +0 -1
  177. package/dist/hooks.wip/useWalletMemories.d.ts +0 -119
  178. package/dist/hooks.wip/useWalletMemories.d.ts.map +0 -1
  179. package/dist/hooks.wip/useWalletMemories.js +0 -166
  180. package/dist/hooks.wip/useWalletMemories.js.map +0 -1
  181. package/dist/hooks.wip/utils/cache.d.ts +0 -25
  182. package/dist/hooks.wip/utils/cache.d.ts.map +0 -1
  183. package/dist/hooks.wip/utils/cache.js +0 -38
  184. package/dist/hooks.wip/utils/cache.js.map +0 -1
  185. package/dist/hooks.wip/utils/types.d.ts +0 -138
  186. package/dist/hooks.wip/utils/types.d.ts.map +0 -1
  187. package/dist/hooks.wip/utils/types.js +0 -5
  188. package/dist/hooks.wip/utils/types.js.map +0 -1
  189. package/dist/infrastructure/ai/EmbeddingService.d.ts +0 -101
  190. package/dist/infrastructure/ai/EmbeddingService.d.ts.map +0 -1
  191. package/dist/infrastructure/ai/EmbeddingService.js +0 -242
  192. package/dist/infrastructure/ai/EmbeddingService.js.map +0 -1
  193. package/dist/infrastructure/ai/GeminiAIService.d.ts +0 -84
  194. package/dist/infrastructure/ai/GeminiAIService.d.ts.map +0 -1
  195. package/dist/infrastructure/ai/GeminiAIService.js +0 -300
  196. package/dist/infrastructure/ai/GeminiAIService.js.map +0 -1
  197. package/dist/infrastructure/ai/index.d.ts +0 -8
  198. package/dist/infrastructure/ai/index.d.ts.map +0 -1
  199. package/dist/infrastructure/ai/index.js +0 -8
  200. package/dist/infrastructure/ai/index.js.map +0 -1
  201. package/dist/memory/index.d.ts +0 -13
  202. package/dist/memory/index.d.ts.map +0 -1
  203. package/dist/memory/index.js +0 -14
  204. package/dist/memory/index.js.map +0 -1
  205. package/dist/services/ChatService.d.ts +0 -89
  206. package/dist/services/ChatService.d.ts.map +0 -1
  207. package/dist/services/ChatService.js +0 -319
  208. package/dist/services/ChatService.js.map +0 -1
  209. package/dist/transactions/index.d.ts +0 -13
  210. package/dist/transactions/index.d.ts.map +0 -1
  211. package/dist/transactions/index.js +0 -14
  212. package/dist/transactions/index.js.map +0 -1
  213. package/dist/types/wallet.d.ts +0 -12
  214. package/dist/types/wallet.d.ts.map +0 -1
  215. package/dist/types/wallet.js +0 -13
  216. package/dist/types/wallet.js.map +0 -1
  217. package/dist/view/ViewService.d.ts +0 -136
  218. package/dist/view/ViewService.d.ts.map +0 -1
  219. package/dist/view/ViewService.js +0 -325
  220. package/dist/view/ViewService.js.map +0 -1
  221. package/dist/view/index.d.ts +0 -7
  222. package/dist/view/index.d.ts.map +0 -1
  223. package/dist/view/index.js +0 -7
  224. package/dist/view/index.js.map +0 -1
@@ -1,278 +0,0 @@
1
- /**
2
- * useMemorySearch - Hook for searching memories with vector similarity
3
- *
4
- * Provides high-level interface for semantic memory search combining:
5
- * - Vector similarity (HNSW)
6
- * - Knowledge graph expansion
7
- * - Metadata filtering
8
- * - Relevance scoring
9
- */
10
- import { useState, useCallback } from 'react';
11
- import { useMemoryServices } from './useMemoryServices.js';
12
- /**
13
- * Search memories using semantic vector similarity
14
- *
15
- * @param userAddress - User's blockchain address
16
- * @param config - Optional services configuration
17
- * @returns Search function and state
18
- *
19
- * @example
20
- * ```tsx
21
- * function SearchComponent() {
22
- * const account = useCurrentAccount();
23
- * const { search, results, isSearching, error } = useMemorySearch(account?.address);
24
- *
25
- * const handleSearch = async () => {
26
- * const results = await search('memories about Paris', {
27
- * k: 10,
28
- * categories: ['travel'],
29
- * includeGraph: true
30
- * });
31
- * };
32
- *
33
- * return (
34
- * <div>
35
- * <button onClick={handleSearch} disabled={isSearching}>
36
- * Search
37
- * </button>
38
- * {results && <ResultsList results={results} />}
39
- * </div>
40
- * );
41
- * }
42
- * ```
43
- */
44
- export function useMemorySearch(userAddress, config) {
45
- const { embeddingService, hnswService, graphManager, isReady, error: servicesError } = useMemoryServices(userAddress, config);
46
- const [results, setResults] = useState(null);
47
- const [isSearching, setIsSearching] = useState(false);
48
- const [error, setError] = useState(null);
49
- const [lastQuery, setLastQuery] = useState('');
50
- /**
51
- * Search memories by text query
52
- */
53
- const search = useCallback(async (query, options = {}) => {
54
- console.log('🔍 [useMemorySearch] search() called', {
55
- query,
56
- hasEmbeddingService: !!embeddingService,
57
- hasHnswService: !!hnswService,
58
- userAddress,
59
- options
60
- });
61
- if (!embeddingService || !hnswService || !userAddress) {
62
- const error = new Error('Services not initialized');
63
- console.error('❌ [useMemorySearch] Services not initialized', {
64
- embeddingService: !!embeddingService,
65
- hnswService: !!hnswService,
66
- userAddress
67
- });
68
- throw error;
69
- }
70
- try {
71
- setIsSearching(true);
72
- setError(null);
73
- setLastQuery(query);
74
- const startTime = performance.now();
75
- console.log('⏱️ [useMemorySearch] Starting search at', new Date().toISOString());
76
- // 1. Generate query embedding
77
- const embeddingResult = await embeddingService.embedText({
78
- text: query,
79
- type: 'query'
80
- });
81
- // 2. Determine search parameters based on mode
82
- const k = options.k || 10;
83
- const efSearch = options.mode === 'exact' ? k * 4 :
84
- options.mode === 'hybrid' ? k * 2 : k;
85
- // 3. Create metadata filter
86
- const filter = createMetadataFilter(options);
87
- // 4. Search HNSW index
88
- let vectorResults;
89
- try {
90
- vectorResults = await hnswService.searchVectors(userAddress, embeddingResult.vector, {
91
- k: Math.min(k * 2, 100), // Get more candidates for filtering
92
- efSearch,
93
- filter
94
- });
95
- }
96
- catch (searchError) {
97
- // Handle "No index found" gracefully - return empty results
98
- if (searchError.message?.includes('No index found')) {
99
- console.info(`No memories indexed yet for user ${userAddress}`);
100
- const searchResult = {
101
- vectorResults: {
102
- ids: [],
103
- distances: [],
104
- similarities: []
105
- },
106
- metadata: {
107
- queryTime: performance.now() - startTime,
108
- totalResults: 0,
109
- mode: options.mode || 'semantic'
110
- }
111
- };
112
- setResults(searchResult);
113
- return searchResult;
114
- }
115
- // Re-throw other errors
116
- throw searchError;
117
- }
118
- // 5. Apply threshold filtering
119
- let filteredIds = vectorResults.ids;
120
- let filteredDistances = vectorResults.distances;
121
- // Compute similarities if not provided
122
- let filteredSimilarities = vectorResults.similarities ||
123
- vectorResults.distances.map(d => 1 / (1 + d));
124
- if (options.threshold) {
125
- const filtered = applyThreshold(vectorResults.ids, vectorResults.distances, filteredSimilarities, options.threshold);
126
- filteredIds = filtered.ids;
127
- filteredDistances = filtered.distances;
128
- filteredSimilarities = filtered.similarities;
129
- }
130
- // Limit to requested k
131
- filteredIds = filteredIds.slice(0, k);
132
- filteredDistances = filteredDistances.slice(0, k);
133
- filteredSimilarities = filteredSimilarities.slice(0, k);
134
- // 6. Optional: Expand with knowledge graph
135
- let graphResults;
136
- if (options.includeGraph && graphManager) {
137
- try {
138
- const graphSearchResult = await graphManager.searchGraph(userAddress, {
139
- keywords: query.split(' ').filter(w => w.length > 2),
140
- maxResults: k
141
- });
142
- graphResults = {
143
- entities: graphSearchResult.entities,
144
- relationships: graphSearchResult.relationships,
145
- relatedMemories: graphSearchResult.relatedMemories
146
- };
147
- }
148
- catch (graphError) {
149
- console.warn('Graph search failed:', graphError);
150
- // Continue without graph results
151
- }
152
- }
153
- const queryTime = performance.now() - startTime;
154
- const searchResult = {
155
- vectorResults: {
156
- ids: filteredIds,
157
- distances: filteredDistances,
158
- similarities: filteredSimilarities
159
- },
160
- graphResults,
161
- metadata: {
162
- queryTime,
163
- totalResults: filteredIds.length + (graphResults?.entities.length || 0),
164
- mode: options.mode || 'semantic'
165
- }
166
- };
167
- setResults(searchResult);
168
- return searchResult;
169
- }
170
- catch (err) {
171
- const error = err;
172
- setError(error);
173
- throw error;
174
- }
175
- finally {
176
- setIsSearching(false);
177
- }
178
- }, [userAddress, embeddingService, hnswService, graphManager]);
179
- /**
180
- * Search by pre-computed embedding vector
181
- */
182
- const searchByVector = useCallback(async (vector, options = {}) => {
183
- if (!hnswService || !userAddress) {
184
- throw new Error('Services not initialized');
185
- }
186
- try {
187
- setIsSearching(true);
188
- setError(null);
189
- const k = options.k || 10;
190
- const filter = createMetadataFilter(options);
191
- const vectorResults = await hnswService.searchVectors(userAddress, vector, {
192
- k,
193
- efSearch: 50,
194
- filter
195
- });
196
- return vectorResults;
197
- }
198
- catch (err) {
199
- const error = err;
200
- setError(error);
201
- throw error;
202
- }
203
- finally {
204
- setIsSearching(false);
205
- }
206
- }, [userAddress, hnswService]);
207
- /**
208
- * Clear current search results
209
- */
210
- const clearResults = useCallback(() => {
211
- setResults(null);
212
- setError(null);
213
- setLastQuery('');
214
- }, []);
215
- return {
216
- search,
217
- searchByVector,
218
- results,
219
- isSearching,
220
- isReady,
221
- error: error || servicesError,
222
- lastQuery,
223
- clearResults
224
- };
225
- }
226
- // ==================== HELPER FUNCTIONS ====================
227
- function createMetadataFilter(options) {
228
- if (!options.categories && !options.dateRange && !options.importanceRange) {
229
- return undefined;
230
- }
231
- return (metadata) => {
232
- // Category filter
233
- if (options.categories && options.categories.length > 0) {
234
- if (!options.categories.includes(metadata.category)) {
235
- return false;
236
- }
237
- }
238
- // Date range filter
239
- if (options.dateRange) {
240
- const created = new Date(metadata.createdTimestamp || 0);
241
- if (options.dateRange.start && created < options.dateRange.start) {
242
- return false;
243
- }
244
- if (options.dateRange.end && created > options.dateRange.end) {
245
- return false;
246
- }
247
- }
248
- // Importance range filter
249
- if (options.importanceRange) {
250
- const importance = metadata.importance || 5;
251
- if (options.importanceRange.min && importance < options.importanceRange.min) {
252
- return false;
253
- }
254
- if (options.importanceRange.max && importance > options.importanceRange.max) {
255
- return false;
256
- }
257
- }
258
- return true;
259
- };
260
- }
261
- function applyThreshold(ids, distances, similarities, threshold) {
262
- const filteredIds = [];
263
- const filteredDistances = [];
264
- const filteredSimilarities = [];
265
- for (let i = 0; i < ids.length; i++) {
266
- if (similarities[i] >= threshold) {
267
- filteredIds.push(ids[i]);
268
- filteredDistances.push(distances[i]);
269
- filteredSimilarities.push(similarities[i]);
270
- }
271
- }
272
- return {
273
- ids: filteredIds,
274
- distances: filteredDistances,
275
- similarities: filteredSimilarities
276
- };
277
- }
278
- //# sourceMappingURL=useMemorySearch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMemorySearch.js","sourceRoot":"","sources":["../../src/hooks.wip/useMemorySearch.ts"],"names":[],"mappings":"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"}
@@ -1,80 +0,0 @@
1
- /**
2
- * useMemoryServices - Core hook for client-side memory services
3
- *
4
- * Manages lifecycle of browser-compatible services:
5
- * - EmbeddingService (Gemini API)
6
- * - BrowserHnswIndexService (hnswlib-wasm + IndexedDB)
7
- * - BrowserKnowledgeGraphManager (IndexedDB)
8
- *
9
- * Services are singletons per user address, shared across components.
10
- */
11
- import { EmbeddingService } from '../services/EmbeddingService';
12
- import { GeminiAIService } from '../services/GeminiAIService';
13
- import { BrowserHnswIndexService } from '../vector/BrowserHnswIndexService';
14
- import { BrowserKnowledgeGraphManager } from '../graph/BrowserKnowledgeGraphManager';
15
- import { StorageService } from '../services/StorageService';
16
- import { EncryptionService } from '../services/EncryptionService';
17
- export interface MemoryServicesConfig {
18
- geminiApiKey?: string;
19
- embeddingModel?: string;
20
- embeddingDimension?: number;
21
- hnswMaxElements?: number;
22
- hnswM?: number;
23
- hnswEfConstruction?: number;
24
- batchSize?: number;
25
- batchDelayMs?: number;
26
- packageId?: string;
27
- walrusAggregator?: string;
28
- walrusPublisher?: string;
29
- sealServerObjectIds?: string[];
30
- suiClient?: any;
31
- }
32
- export interface MemoryServices {
33
- embeddingService: EmbeddingService | null;
34
- geminiAIService: GeminiAIService | null;
35
- hnswService: BrowserHnswIndexService | null;
36
- graphManager: BrowserKnowledgeGraphManager | null;
37
- storageService: StorageService | null;
38
- encryptionService: EncryptionService | null;
39
- isReady: boolean;
40
- isLoading: boolean;
41
- error: Error | null;
42
- }
43
- /**
44
- * Initialize and manage memory services for client-side operations
45
- *
46
- * @param userAddress - User's blockchain address (used as unique identifier)
47
- * @param config - Optional configuration for services
48
- * @returns Memory services and loading state
49
- *
50
- * @example
51
- * ```tsx
52
- * function MyComponent() {
53
- * const account = useCurrentAccount();
54
- * const { embeddingService, hnswService, isReady } = useMemoryServices(
55
- * account?.address,
56
- * { geminiApiKey: process.env.NEXT_PUBLIC_GEMINI_API_KEY }
57
- * );
58
- *
59
- * if (!isReady) return <Loading />;
60
- * // Use services...
61
- * }
62
- * ```
63
- */
64
- export declare function useMemoryServices(userAddress?: string, config?: MemoryServicesConfig): MemoryServices;
65
- /**
66
- * Clear all services for a specific user (useful for logout)
67
- */
68
- export declare function clearMemoryServices(userAddress: string): void;
69
- /**
70
- * Get current service statistics
71
- */
72
- export declare function getMemoryServicesStats(): {
73
- activeUsers: number;
74
- services: {
75
- userAddress: string;
76
- refCount: number;
77
- hnswStats: import("../vector").BatchStats;
78
- }[];
79
- };
80
- //# sourceMappingURL=useMemoryServices.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMemoryServices.d.ts","sourceRoot":"","sources":["../../src/hooks.wip/useMemoryServices.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,WAAW,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC5C,YAAY,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAClD,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAaD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,GAAE,oBAAyB,GAChC,cAAc,CAiOhB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAQ7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB;;;;;;;EASrC"}
@@ -1,264 +0,0 @@
1
- /**
2
- * useMemoryServices - Core hook for client-side memory services
3
- *
4
- * Manages lifecycle of browser-compatible services:
5
- * - EmbeddingService (Gemini API)
6
- * - BrowserHnswIndexService (hnswlib-wasm + IndexedDB)
7
- * - BrowserKnowledgeGraphManager (IndexedDB)
8
- *
9
- * Services are singletons per user address, shared across components.
10
- */
11
- import { useEffect, useState, useMemo } from 'react';
12
- import { EmbeddingService } from '../services/EmbeddingService.js';
13
- import { GeminiAIService } from '../services/GeminiAIService.js';
14
- import { BrowserHnswIndexService } from '../vector/BrowserHnswIndexService.js';
15
- import { BrowserKnowledgeGraphManager } from '../graph/BrowserKnowledgeGraphManager.js';
16
- import { StorageService } from '../services/StorageService.js';
17
- import { EncryptionService } from '../services/EncryptionService.js';
18
- // Singleton store for services (shared across all hooks)
19
- const servicesStore = new Map();
20
- /**
21
- * Initialize and manage memory services for client-side operations
22
- *
23
- * @param userAddress - User's blockchain address (used as unique identifier)
24
- * @param config - Optional configuration for services
25
- * @returns Memory services and loading state
26
- *
27
- * @example
28
- * ```tsx
29
- * function MyComponent() {
30
- * const account = useCurrentAccount();
31
- * const { embeddingService, hnswService, isReady } = useMemoryServices(
32
- * account?.address,
33
- * { geminiApiKey: process.env.NEXT_PUBLIC_GEMINI_API_KEY }
34
- * );
35
- *
36
- * if (!isReady) return <Loading />;
37
- * // Use services...
38
- * }
39
- * ```
40
- */
41
- export function useMemoryServices(userAddress, config = {}) {
42
- const [isReady, setIsReady] = useState(false);
43
- const [isLoading, setIsLoading] = useState(false);
44
- const [error, setError] = useState(null);
45
- // Memoize config to prevent re-initialization
46
- const memoizedConfig = useMemo(() => ({
47
- geminiApiKey: config.geminiApiKey || '',
48
- embeddingModel: config.embeddingModel || 'text-embedding-004',
49
- embeddingDimension: config.embeddingDimension || 3072,
50
- hnswMaxElements: config.hnswMaxElements || 10000,
51
- hnswM: config.hnswM || 16,
52
- hnswEfConstruction: config.hnswEfConstruction || 200,
53
- batchSize: config.batchSize || 50,
54
- batchDelayMs: config.batchDelayMs || 5000,
55
- packageId: config.packageId || '',
56
- walrusAggregator: config.walrusAggregator || 'https://aggregator.walrus-testnet.walrus.space',
57
- walrusPublisher: config.walrusPublisher || 'https://publisher.walrus-testnet.walrus.space',
58
- sealServerObjectIds: config.sealServerObjectIds || [
59
- '0x73d05d62c18d9374e3ea529e8e0ed6161da1a141a94d3f76ae3fe4e99356db75',
60
- '0xf5d14a81a982144ae441cd7d64b09027f116a468bd36e7eca494f750591623c8'
61
- ],
62
- suiClient: config.suiClient
63
- }), [
64
- config.geminiApiKey,
65
- config.embeddingModel,
66
- config.embeddingDimension,
67
- config.hnswMaxElements,
68
- config.hnswM,
69
- config.hnswEfConstruction,
70
- config.batchSize,
71
- config.batchDelayMs,
72
- config.packageId,
73
- config.walrusAggregator,
74
- config.walrusPublisher,
75
- config.sealServerObjectIds,
76
- config.suiClient
77
- ]);
78
- // Initialize services on mount
79
- useEffect(() => {
80
- if (!userAddress) {
81
- setIsReady(false);
82
- return;
83
- }
84
- // Increment ref count on mount
85
- if (servicesStore.has(userAddress)) {
86
- const existing = servicesStore.get(userAddress);
87
- existing.refCount++;
88
- setIsReady(true);
89
- console.log(`✅ Using existing services for ${userAddress} (refCount: ${existing.refCount})`);
90
- }
91
- let mounted = true;
92
- const initializeServices = async () => {
93
- try {
94
- setIsLoading(true);
95
- setError(null);
96
- // Check if services already exist (already checked above, but keeping for clarity)
97
- if (servicesStore.has(userAddress)) {
98
- setIsReady(true);
99
- setIsLoading(false);
100
- return;
101
- }
102
- // DEBUG: Log the API key status
103
- console.log('🔍 useMemoryServices - Initializing with config:', {
104
- hasGeminiApiKey: !!memoizedConfig.geminiApiKey,
105
- apiKeyPreview: memoizedConfig.geminiApiKey ? `${memoizedConfig.geminiApiKey.substring(0, 10)}...` : 'UNDEFINED',
106
- model: memoizedConfig.embeddingModel,
107
- dimensions: memoizedConfig.embeddingDimension
108
- });
109
- // Initialize embedding service
110
- const embeddingService = new EmbeddingService({
111
- apiKey: memoizedConfig.geminiApiKey,
112
- model: memoizedConfig.embeddingModel,
113
- dimensions: memoizedConfig.embeddingDimension
114
- });
115
- // Initialize Gemini AI service for metadata extraction
116
- const geminiAIService = new GeminiAIService({
117
- apiKey: memoizedConfig.geminiApiKey,
118
- model: process.env.AI_CHAT_MODEL || 'google/gemini-2.5-flash',
119
- temperature: 0.1
120
- });
121
- // Initialize HNSW service
122
- const hnswService = new BrowserHnswIndexService({
123
- dimension: memoizedConfig.embeddingDimension,
124
- maxElements: memoizedConfig.hnswMaxElements,
125
- m: memoizedConfig.hnswM,
126
- efConstruction: memoizedConfig.hnswEfConstruction
127
- }, {
128
- maxBatchSize: memoizedConfig.batchSize,
129
- batchDelayMs: memoizedConfig.batchDelayMs
130
- });
131
- // Initialize knowledge graph manager
132
- const graphManager = new BrowserKnowledgeGraphManager();
133
- // Initialize storage service
134
- const storageService = new StorageService({
135
- walrusAggregatorUrl: memoizedConfig.walrusAggregator,
136
- walrusPublisherUrl: memoizedConfig.walrusPublisher,
137
- packageId: memoizedConfig.packageId,
138
- suiClient: memoizedConfig.suiClient,
139
- network: 'testnet',
140
- useUploadRelay: true
141
- });
142
- // Initialize encryption service
143
- const encryptionService = new EncryptionService(memoizedConfig.suiClient, {
144
- packageId: memoizedConfig.packageId,
145
- encryptionConfig: {
146
- enabled: true,
147
- keyServers: memoizedConfig.sealServerObjectIds
148
- }
149
- });
150
- // Try to load existing index from IndexedDB
151
- try {
152
- await hnswService.loadIndexFromDB(userAddress);
153
- console.log('✅ Loaded existing HNSW index from IndexedDB');
154
- }
155
- catch (err) {
156
- console.log('ℹ️ No existing index found, will create on first add');
157
- }
158
- // Store services
159
- servicesStore.set(userAddress, {
160
- embedding: embeddingService,
161
- geminiAI: geminiAIService,
162
- hnsw: hnswService,
163
- graph: graphManager,
164
- storage: storageService,
165
- encryption: encryptionService,
166
- refCount: 1
167
- });
168
- if (mounted) {
169
- setIsReady(true);
170
- setIsLoading(false);
171
- }
172
- }
173
- catch (err) {
174
- console.error('Failed to initialize memory services:', err);
175
- if (mounted) {
176
- setError(err);
177
- setIsLoading(false);
178
- }
179
- }
180
- };
181
- initializeServices();
182
- // Cleanup on unmount
183
- return () => {
184
- mounted = false;
185
- if (userAddress && servicesStore.has(userAddress)) {
186
- const services = servicesStore.get(userAddress);
187
- services.refCount--;
188
- // Destroy services if no more references
189
- if (services.refCount <= 0) {
190
- console.log(`🧹 Cleaning up services for user ${userAddress}`);
191
- services.hnsw.destroy();
192
- services.graph.destroy();
193
- servicesStore.delete(userAddress);
194
- }
195
- }
196
- };
197
- }, [userAddress, memoizedConfig]);
198
- // Return current services (get from store directly)
199
- if (!userAddress) {
200
- return {
201
- embeddingService: null,
202
- geminiAIService: null,
203
- hnswService: null,
204
- graphManager: null,
205
- storageService: null,
206
- encryptionService: null,
207
- isReady: false,
208
- isLoading,
209
- error
210
- };
211
- }
212
- // Get services from store
213
- const services = servicesStore.get(userAddress);
214
- if (!services || !isReady) {
215
- return {
216
- embeddingService: null,
217
- geminiAIService: null,
218
- hnswService: null,
219
- graphManager: null,
220
- storageService: null,
221
- encryptionService: null,
222
- isReady: false,
223
- isLoading,
224
- error
225
- };
226
- }
227
- return {
228
- embeddingService: services.embedding,
229
- geminiAIService: services.geminiAI,
230
- hnswService: services.hnsw,
231
- graphManager: services.graph,
232
- storageService: services.storage,
233
- encryptionService: services.encryption,
234
- isReady,
235
- isLoading,
236
- error
237
- };
238
- }
239
- /**
240
- * Clear all services for a specific user (useful for logout)
241
- */
242
- export function clearMemoryServices(userAddress) {
243
- if (servicesStore.has(userAddress)) {
244
- const services = servicesStore.get(userAddress);
245
- services.hnsw.destroy();
246
- services.graph.destroy();
247
- servicesStore.delete(userAddress);
248
- console.log(`✅ Cleared services for user ${userAddress}`);
249
- }
250
- }
251
- /**
252
- * Get current service statistics
253
- */
254
- export function getMemoryServicesStats() {
255
- return {
256
- activeUsers: servicesStore.size,
257
- services: Array.from(servicesStore.entries()).map(([userAddress, services]) => ({
258
- userAddress,
259
- refCount: services.refCount,
260
- hnswStats: services.hnsw.getCacheStats()
261
- }))
262
- };
263
- }
264
- //# sourceMappingURL=useMemoryServices.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMemoryServices.js","sourceRoot":"","sources":["../../src/hooks.wip/useMemoryServices.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AA8BlE,yDAAyD;AACzD,MAAM,aAAa,GAAG,IAAI,GAAG,EAQzB,CAAC;AAEL;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAoB,EACpB,SAA+B,EAAE;IAEjC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,8CAA8C;IAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;QACvC,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,oBAAoB;QAC7D,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,IAAI;QACrD,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,KAAK;QAChD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;QACzB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,GAAG;QACpD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;QACzC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,gDAAgD;QAC7F,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,+CAA+C;QAC1F,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI;YACjD,oEAAoE;YACpE,oEAAoE;SACrE;QACD,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,EAAE;QACF,MAAM,CAAC,YAAY;QACnB,MAAM,CAAC,cAAc;QACrB,MAAM,CAAC,kBAAkB;QACzB,MAAM,CAAC,eAAe;QACtB,MAAM,CAAC,KAAK;QACZ,MAAM,CAAC,kBAAkB;QACzB,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,YAAY;QACnB,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,gBAAgB;QACvB,MAAM,CAAC,eAAe;QACtB,MAAM,CAAC,mBAAmB;QAC1B,MAAM,CAAC,SAAS;KACjB,CAAC,CAAC;IAEH,+BAA+B;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAED,+BAA+B;QAC/B,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;YACjD,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACpB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,eAAe,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;YACpC,IAAI,CAAC;gBACH,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAEf,mFAAmF;gBACnF,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;oBACnC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACjB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,OAAO;gBACT,CAAC;gBAED,gCAAgC;gBAChC,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE;oBAC9D,eAAe,EAAE,CAAC,CAAC,cAAc,CAAC,YAAY;oBAC9C,aAAa,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW;oBAC/G,KAAK,EAAE,cAAc,CAAC,cAAc;oBACpC,UAAU,EAAE,cAAc,CAAC,kBAAkB;iBAC9C,CAAC,CAAC;gBAEH,+BAA+B;gBAC/B,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;oBAC5C,MAAM,EAAE,cAAc,CAAC,YAAY;oBACnC,KAAK,EAAE,cAAc,CAAC,cAAc;oBACpC,UAAU,EAAE,cAAc,CAAC,kBAAkB;iBAC9C,CAAC,CAAC;gBAEH,uDAAuD;gBACvD,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC;oBAC1C,MAAM,EAAE,cAAc,CAAC,YAAY;oBACnC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,yBAAyB;oBAC7D,WAAW,EAAE,GAAG;iBACjB,CAAC,CAAC;gBAEH,0BAA0B;gBAC1B,MAAM,WAAW,GAAG,IAAI,uBAAuB,CAC7C;oBACE,SAAS,EAAE,cAAc,CAAC,kBAAkB;oBAC5C,WAAW,EAAE,cAAc,CAAC,eAAe;oBAC3C,CAAC,EAAE,cAAc,CAAC,KAAK;oBACvB,cAAc,EAAE,cAAc,CAAC,kBAAkB;iBAClD,EACD;oBACE,YAAY,EAAE,cAAc,CAAC,SAAS;oBACtC,YAAY,EAAE,cAAc,CAAC,YAAY;iBAC1C,CACF,CAAC;gBAEF,qCAAqC;gBACrC,MAAM,YAAY,GAAG,IAAI,4BAA4B,EAAE,CAAC;gBAExD,6BAA6B;gBAC7B,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;oBACxC,mBAAmB,EAAE,cAAc,CAAC,gBAAgB;oBACpD,kBAAkB,EAAE,cAAc,CAAC,eAAe;oBAClD,SAAS,EAAE,cAAc,CAAC,SAAS;oBACnC,SAAS,EAAE,cAAc,CAAC,SAAS;oBACnC,OAAO,EAAE,SAAS;oBAClB,cAAc,EAAE,IAAI;iBACrB,CAAC,CAAC;gBAEH,gCAAgC;gBAChC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAC7C,cAAc,CAAC,SAAS,EACxB;oBACE,SAAS,EAAE,cAAc,CAAC,SAAS;oBACnC,gBAAgB,EAAE;wBAChB,OAAO,EAAE,IAAI;wBACb,UAAU,EAAE,cAAc,CAAC,mBAAmB;qBAC/C;iBACF,CACF,CAAC;gBAEF,4CAA4C;gBAC5C,IAAI,CAAC;oBACH,MAAM,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBAC7D,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;gBACtE,CAAC;gBAED,iBAAiB;gBACjB,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE;oBAC7B,SAAS,EAAE,gBAAgB;oBAC3B,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,YAAY;oBACnB,OAAO,EAAE,cAAc;oBACvB,UAAU,EAAE,iBAAiB;oBAC7B,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;gBAEH,IAAI,OAAO,EAAE,CAAC;oBACZ,UAAU,CAAC,IAAI,CAAC,CAAC;oBACjB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;gBAC5D,IAAI,OAAO,EAAE,CAAC;oBACZ,QAAQ,CAAC,GAAY,CAAC,CAAC;oBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,kBAAkB,EAAE,CAAC;QAErB,qBAAqB;QACrB,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,KAAK,CAAC;YAEhB,IAAI,WAAW,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;gBACjD,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAEpB,yCAAyC;gBACzC,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;oBAC/D,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACxB,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzB,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IAElC,oDAAoD;IACpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,gBAAgB,EAAE,IAAI;YACtB,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;YACpB,iBAAiB,EAAE,IAAI;YACvB,OAAO,EAAE,KAAK;YACd,SAAS;YACT,KAAK;SACN,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEhD,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO;YACL,gBAAgB,EAAE,IAAI;YACtB,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;YACpB,iBAAiB,EAAE,IAAI;YACvB,OAAO,EAAE,KAAK;YACd,SAAS;YACT,KAAK;SACN,CAAC;IACJ,CAAC;IAED,OAAO;QACL,gBAAgB,EAAE,QAAQ,CAAC,SAAS;QACpC,eAAe,EAAE,QAAQ,CAAC,QAAQ;QAClC,WAAW,EAAE,QAAQ,CAAC,IAAI;QAC1B,YAAY,EAAE,QAAQ,CAAC,KAAK;QAC5B,cAAc,EAAE,QAAQ,CAAC,OAAO;QAChC,iBAAiB,EAAE,QAAQ,CAAC,UAAU;QACtC,OAAO;QACP,SAAS;QACT,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;QACjD,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACzB,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,WAAW,EAAE,aAAa,CAAC,IAAI;QAC/B,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9E,WAAW;YACX,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE;SACzC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}