@cmdoss/memwal-sdk 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/ARCHITECTURE.md +547 -463
  2. package/BENCHMARKS.md +238 -238
  3. package/README.md +181 -142
  4. package/dist/ai-sdk/PDWVectorStore.d.ts.map +1 -1
  5. package/dist/ai-sdk/PDWVectorStore.js +4 -1
  6. package/dist/ai-sdk/PDWVectorStore.js.map +1 -1
  7. package/dist/ai-sdk/types.d.ts +2 -2
  8. package/dist/ai-sdk/types.d.ts.map +1 -1
  9. package/dist/browser.d.ts +12 -13
  10. package/dist/browser.d.ts.map +1 -1
  11. package/dist/browser.js +18 -12
  12. package/dist/browser.js.map +1 -1
  13. package/dist/client/ClientMemoryManager.d.ts +1 -0
  14. package/dist/client/ClientMemoryManager.d.ts.map +1 -1
  15. package/dist/client/ClientMemoryManager.js +5 -1
  16. package/dist/client/ClientMemoryManager.js.map +1 -1
  17. package/dist/client/SimplePDWClient.d.ts +23 -0
  18. package/dist/client/SimplePDWClient.d.ts.map +1 -1
  19. package/dist/client/SimplePDWClient.js +19 -6
  20. package/dist/client/SimplePDWClient.js.map +1 -1
  21. package/dist/client/namespaces/BatchNamespace.js +2 -2
  22. package/dist/client/namespaces/BatchNamespace.js.map +1 -1
  23. package/dist/client/namespaces/IndexNamespace.d.ts +38 -9
  24. package/dist/client/namespaces/IndexNamespace.d.ts.map +1 -1
  25. package/dist/client/namespaces/IndexNamespace.js +77 -10
  26. package/dist/client/namespaces/IndexNamespace.js.map +1 -1
  27. package/dist/client/namespaces/MemoryNamespace.js +3 -3
  28. package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
  29. package/dist/client/namespaces/SearchNamespace.d.ts.map +1 -1
  30. package/dist/client/namespaces/SearchNamespace.js +25 -14
  31. package/dist/client/namespaces/SearchNamespace.js.map +1 -1
  32. package/dist/client/namespaces/StorageNamespace.js +4 -4
  33. package/dist/client/namespaces/StorageNamespace.js.map +1 -1
  34. package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts.map +1 -1
  35. package/dist/client/namespaces/consolidated/BlockchainNamespace.js +49 -1
  36. package/dist/client/namespaces/consolidated/BlockchainNamespace.js.map +1 -1
  37. package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +46 -0
  38. package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
  39. package/dist/client/namespaces/consolidated/StorageNamespace.js +36 -2
  40. package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
  41. package/dist/client/signers/DappKitSigner.d.ts +136 -0
  42. package/dist/client/signers/DappKitSigner.d.ts.map +1 -0
  43. package/dist/client/signers/DappKitSigner.js +128 -0
  44. package/dist/client/signers/DappKitSigner.js.map +1 -0
  45. package/dist/client/signers/KeypairSigner.d.ts +4 -0
  46. package/dist/client/signers/KeypairSigner.d.ts.map +1 -1
  47. package/dist/client/signers/KeypairSigner.js +6 -0
  48. package/dist/client/signers/KeypairSigner.js.map +1 -1
  49. package/dist/client/signers/UnifiedSigner.d.ts +10 -0
  50. package/dist/client/signers/UnifiedSigner.d.ts.map +1 -1
  51. package/dist/client/signers/WalletAdapterSigner.d.ts +7 -0
  52. package/dist/client/signers/WalletAdapterSigner.d.ts.map +1 -1
  53. package/dist/client/signers/WalletAdapterSigner.js +9 -0
  54. package/dist/client/signers/WalletAdapterSigner.js.map +1 -1
  55. package/dist/client/signers/index.d.ts +3 -0
  56. package/dist/client/signers/index.d.ts.map +1 -1
  57. package/dist/client/signers/index.js +2 -0
  58. package/dist/client/signers/index.js.map +1 -1
  59. package/dist/generated/utils/index.js +1 -1
  60. package/dist/generated/utils/index.js.map +1 -1
  61. package/dist/graph/GraphService.js +1 -1
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +2 -0
  65. package/dist/index.js.map +1 -1
  66. package/dist/permissions/ConsentRepository.browser.d.ts +56 -0
  67. package/dist/permissions/ConsentRepository.browser.d.ts.map +1 -0
  68. package/dist/permissions/ConsentRepository.browser.js +198 -0
  69. package/dist/permissions/ConsentRepository.browser.js.map +1 -0
  70. package/dist/services/CapabilityService.js +1 -1
  71. package/dist/services/CapabilityService.js.map +1 -1
  72. package/dist/services/EncryptionService.js +1 -1
  73. package/dist/services/EncryptionService.js.map +1 -1
  74. package/dist/services/GeminiAIService.d.ts.map +1 -1
  75. package/dist/services/GeminiAIService.js +283 -27
  76. package/dist/services/GeminiAIService.js.map +1 -1
  77. package/dist/services/MemoryIndexService.d.ts +31 -2
  78. package/dist/services/MemoryIndexService.d.ts.map +1 -1
  79. package/dist/services/MemoryIndexService.js +75 -3
  80. package/dist/services/MemoryIndexService.js.map +1 -1
  81. package/dist/services/StorageService.d.ts +8 -8
  82. package/dist/services/StorageService.d.ts.map +1 -1
  83. package/dist/services/StorageService.js.map +1 -1
  84. package/dist/services/VectorService.js +2 -2
  85. package/dist/services/VectorService.js.map +1 -1
  86. package/dist/services/storage/BlobAttributesManager.d.ts +4 -4
  87. package/dist/services/storage/BlobAttributesManager.d.ts.map +1 -1
  88. package/dist/services/storage/BlobAttributesManager.js +6 -15
  89. package/dist/services/storage/BlobAttributesManager.js.map +1 -1
  90. package/dist/services/storage/QuiltBatchManager.d.ts +33 -8
  91. package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
  92. package/dist/services/storage/QuiltBatchManager.js +153 -48
  93. package/dist/services/storage/QuiltBatchManager.js.map +1 -1
  94. package/dist/services/storage/WalrusMetadataManager.d.ts +2 -2
  95. package/dist/services/storage/WalrusMetadataManager.d.ts.map +1 -1
  96. package/dist/services/storage/WalrusMetadataManager.js +2 -5
  97. package/dist/services/storage/WalrusMetadataManager.js.map +1 -1
  98. package/dist/services/storage/WalrusStorageManager.d.ts +2 -2
  99. package/dist/services/storage/WalrusStorageManager.d.ts.map +1 -1
  100. package/dist/services/storage/WalrusStorageManager.js +7 -11
  101. package/dist/services/storage/WalrusStorageManager.js.map +1 -1
  102. package/dist/utils/rebuildIndexNode.d.ts.map +1 -1
  103. package/dist/utils/rebuildIndexNode.js +109 -35
  104. package/dist/utils/rebuildIndexNode.js.map +1 -1
  105. package/dist/vector/NodeHnswService.d.ts.map +1 -1
  106. package/dist/vector/NodeHnswService.js +26 -7
  107. package/dist/vector/NodeHnswService.js.map +1 -1
  108. package/dist/wallet/MainWalletService.js +1 -1
  109. package/dist/wallet/MainWalletService.js.map +1 -1
  110. package/package.json +10 -3
  111. package/src/access/index.ts +8 -8
  112. package/src/aggregation/index.ts +8 -8
  113. package/src/ai-sdk/PDWVectorStore.ts +4 -1
  114. package/src/ai-sdk/types.ts +2 -2
  115. package/src/browser.ts +28 -24
  116. package/src/client/ClientMemoryManager.ts +6 -1
  117. package/src/client/SimplePDWClient.ts +57 -15
  118. package/src/client/namespaces/BatchNamespace.ts +2 -2
  119. package/src/client/namespaces/IndexNamespace.ts +89 -11
  120. package/src/client/namespaces/MemoryNamespace.ts +3 -3
  121. package/src/client/namespaces/SearchNamespace.ts +27 -14
  122. package/src/client/namespaces/StorageNamespace.ts +4 -4
  123. package/src/client/namespaces/consolidated/BlockchainNamespace.ts +55 -1
  124. package/src/client/namespaces/consolidated/StorageNamespace.ts +59 -2
  125. package/src/client/signers/DappKitSigner.ts +207 -0
  126. package/src/client/signers/KeypairSigner.ts +7 -0
  127. package/src/client/signers/UnifiedSigner.ts +11 -0
  128. package/src/client/signers/WalletAdapterSigner.ts +10 -0
  129. package/src/client/signers/index.ts +7 -0
  130. package/src/generated/pdw/capability.ts +319 -319
  131. package/src/generated/utils/index.ts +1 -1
  132. package/src/graph/GraphService.ts +1 -1
  133. package/src/index.ts +16 -0
  134. package/src/permissions/ConsentRepository.browser.ts +249 -0
  135. package/src/permissions/index.ts +9 -9
  136. package/src/services/CapabilityService.ts +1 -1
  137. package/src/services/EncryptionService.ts +1 -1
  138. package/src/services/GeminiAIService.ts +283 -27
  139. package/src/services/MemoryIndexService.ts +85 -3
  140. package/src/services/StorageService.ts +8 -8
  141. package/src/services/VectorService.ts +2 -2
  142. package/src/services/storage/BlobAttributesManager.ts +10 -19
  143. package/src/services/storage/QuiltBatchManager.ts +178 -50
  144. package/src/services/storage/WalrusMetadataManager.ts +4 -7
  145. package/src/services/storage/WalrusStorageManager.ts +10 -13
  146. package/src/utils/rebuildIndexNode.ts +126 -43
  147. package/src/vector/NodeHnswService.ts +29 -7
  148. package/src/wallet/MainWalletService.ts +1 -1
  149. package/src/wallet/index.ts +17 -17
  150. package/dist/api/client.d.ts +0 -43
  151. package/dist/api/client.d.ts.map +0 -1
  152. package/dist/api/client.js +0 -136
  153. package/dist/api/client.js.map +0 -1
  154. package/dist/chat/index.d.ts +0 -13
  155. package/dist/chat/index.d.ts.map +0 -1
  156. package/dist/chat/index.js +0 -14
  157. package/dist/chat/index.js.map +0 -1
  158. package/dist/client/namespaces/ChatNamespace.d.ts +0 -110
  159. package/dist/client/namespaces/ChatNamespace.d.ts.map +0 -1
  160. package/dist/client/namespaces/ChatNamespace.js +0 -123
  161. package/dist/client/namespaces/ChatNamespace.js.map +0 -1
  162. package/dist/encryption/index.d.ts +0 -14
  163. package/dist/encryption/index.d.ts.map +0 -1
  164. package/dist/encryption/index.js +0 -14
  165. package/dist/encryption/index.js.map +0 -1
  166. package/dist/graph/BrowserKnowledgeGraphManager.d.ts +0 -101
  167. package/dist/graph/BrowserKnowledgeGraphManager.d.ts.map +0 -1
  168. package/dist/graph/BrowserKnowledgeGraphManager.js +0 -411
  169. package/dist/graph/BrowserKnowledgeGraphManager.js.map +0 -1
  170. package/dist/hooks.wip/index.d.ts +0 -55
  171. package/dist/hooks.wip/index.d.ts.map +0 -1
  172. package/dist/hooks.wip/index.js +0 -58
  173. package/dist/hooks.wip/index.js.map +0 -1
  174. package/dist/hooks.wip/useCreateMemory.d.ts +0 -111
  175. package/dist/hooks.wip/useCreateMemory.d.ts.map +0 -1
  176. package/dist/hooks.wip/useCreateMemory.js +0 -149
  177. package/dist/hooks.wip/useCreateMemory.js.map +0 -1
  178. package/dist/hooks.wip/useCreateMemoryBatch.d.ts +0 -122
  179. package/dist/hooks.wip/useCreateMemoryBatch.d.ts.map +0 -1
  180. package/dist/hooks.wip/useCreateMemoryBatch.js +0 -221
  181. package/dist/hooks.wip/useCreateMemoryBatch.js.map +0 -1
  182. package/dist/hooks.wip/useKnowledgeGraph.d.ts +0 -66
  183. package/dist/hooks.wip/useKnowledgeGraph.d.ts.map +0 -1
  184. package/dist/hooks.wip/useKnowledgeGraph.js +0 -229
  185. package/dist/hooks.wip/useKnowledgeGraph.js.map +0 -1
  186. package/dist/hooks.wip/useMemoryChat.d.ts +0 -106
  187. package/dist/hooks.wip/useMemoryChat.d.ts.map +0 -1
  188. package/dist/hooks.wip/useMemoryChat.js +0 -284
  189. package/dist/hooks.wip/useMemoryChat.js.map +0 -1
  190. package/dist/hooks.wip/useMemoryIndex.d.ts +0 -90
  191. package/dist/hooks.wip/useMemoryIndex.d.ts.map +0 -1
  192. package/dist/hooks.wip/useMemoryIndex.js +0 -218
  193. package/dist/hooks.wip/useMemoryIndex.js.map +0 -1
  194. package/dist/hooks.wip/useMemoryManager.d.ts +0 -35
  195. package/dist/hooks.wip/useMemoryManager.d.ts.map +0 -1
  196. package/dist/hooks.wip/useMemoryManager.js +0 -86
  197. package/dist/hooks.wip/useMemoryManager.js.map +0 -1
  198. package/dist/hooks.wip/useMemorySearch.d.ts +0 -100
  199. package/dist/hooks.wip/useMemorySearch.d.ts.map +0 -1
  200. package/dist/hooks.wip/useMemorySearch.js +0 -278
  201. package/dist/hooks.wip/useMemorySearch.js.map +0 -1
  202. package/dist/hooks.wip/useMemoryServices.d.ts +0 -80
  203. package/dist/hooks.wip/useMemoryServices.d.ts.map +0 -1
  204. package/dist/hooks.wip/useMemoryServices.js +0 -264
  205. package/dist/hooks.wip/useMemoryServices.js.map +0 -1
  206. package/dist/hooks.wip/usePDWRAG.d.ts +0 -112
  207. package/dist/hooks.wip/usePDWRAG.d.ts.map +0 -1
  208. package/dist/hooks.wip/usePDWRAG.js +0 -121
  209. package/dist/hooks.wip/usePDWRAG.js.map +0 -1
  210. package/dist/hooks.wip/usePDWVectorStore.d.ts +0 -68
  211. package/dist/hooks.wip/usePDWVectorStore.d.ts.map +0 -1
  212. package/dist/hooks.wip/usePDWVectorStore.js +0 -102
  213. package/dist/hooks.wip/usePDWVectorStore.js.map +0 -1
  214. package/dist/hooks.wip/useRetrieveEmbedding.d.ts +0 -138
  215. package/dist/hooks.wip/useRetrieveEmbedding.d.ts.map +0 -1
  216. package/dist/hooks.wip/useRetrieveEmbedding.js +0 -121
  217. package/dist/hooks.wip/useRetrieveEmbedding.js.map +0 -1
  218. package/dist/hooks.wip/useSearchMemories.d.ts +0 -103
  219. package/dist/hooks.wip/useSearchMemories.d.ts.map +0 -1
  220. package/dist/hooks.wip/useSearchMemories.js +0 -146
  221. package/dist/hooks.wip/useSearchMemories.js.map +0 -1
  222. package/dist/hooks.wip/useStoreEmbedding.d.ts +0 -174
  223. package/dist/hooks.wip/useStoreEmbedding.d.ts.map +0 -1
  224. package/dist/hooks.wip/useStoreEmbedding.js +0 -167
  225. package/dist/hooks.wip/useStoreEmbedding.js.map +0 -1
  226. package/dist/hooks.wip/useWalletMemories.d.ts +0 -119
  227. package/dist/hooks.wip/useWalletMemories.d.ts.map +0 -1
  228. package/dist/hooks.wip/useWalletMemories.js +0 -166
  229. package/dist/hooks.wip/useWalletMemories.js.map +0 -1
  230. package/dist/hooks.wip/utils/cache.d.ts +0 -25
  231. package/dist/hooks.wip/utils/cache.d.ts.map +0 -1
  232. package/dist/hooks.wip/utils/cache.js +0 -38
  233. package/dist/hooks.wip/utils/cache.js.map +0 -1
  234. package/dist/hooks.wip/utils/types.d.ts +0 -138
  235. package/dist/hooks.wip/utils/types.d.ts.map +0 -1
  236. package/dist/hooks.wip/utils/types.js +0 -5
  237. package/dist/hooks.wip/utils/types.js.map +0 -1
  238. package/dist/infrastructure/ai/EmbeddingService.d.ts +0 -101
  239. package/dist/infrastructure/ai/EmbeddingService.d.ts.map +0 -1
  240. package/dist/infrastructure/ai/EmbeddingService.js +0 -242
  241. package/dist/infrastructure/ai/EmbeddingService.js.map +0 -1
  242. package/dist/infrastructure/ai/GeminiAIService.d.ts +0 -84
  243. package/dist/infrastructure/ai/GeminiAIService.d.ts.map +0 -1
  244. package/dist/infrastructure/ai/GeminiAIService.js +0 -300
  245. package/dist/infrastructure/ai/GeminiAIService.js.map +0 -1
  246. package/dist/infrastructure/ai/index.d.ts +0 -8
  247. package/dist/infrastructure/ai/index.d.ts.map +0 -1
  248. package/dist/infrastructure/ai/index.js +0 -8
  249. package/dist/infrastructure/ai/index.js.map +0 -1
  250. package/dist/memory/index.d.ts +0 -13
  251. package/dist/memory/index.d.ts.map +0 -1
  252. package/dist/memory/index.js +0 -14
  253. package/dist/memory/index.js.map +0 -1
  254. package/dist/services/ChatService.d.ts +0 -89
  255. package/dist/services/ChatService.d.ts.map +0 -1
  256. package/dist/services/ChatService.js +0 -319
  257. package/dist/services/ChatService.js.map +0 -1
  258. package/dist/transactions/index.d.ts +0 -13
  259. package/dist/transactions/index.d.ts.map +0 -1
  260. package/dist/transactions/index.js +0 -14
  261. package/dist/transactions/index.js.map +0 -1
  262. package/dist/types/wallet.d.ts +0 -12
  263. package/dist/types/wallet.d.ts.map +0 -1
  264. package/dist/types/wallet.js +0 -13
  265. package/dist/types/wallet.js.map +0 -1
  266. package/dist/view/ViewService.d.ts +0 -136
  267. package/dist/view/ViewService.d.ts.map +0 -1
  268. package/dist/view/ViewService.js +0 -325
  269. package/dist/view/ViewService.js.map +0 -1
  270. package/dist/view/index.d.ts +0 -7
  271. package/dist/view/index.d.ts.map +0 -1
  272. package/dist/view/index.js +0 -7
  273. 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":"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"}