@cmdoss/memwal-sdk 0.6.2 → 0.8.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 (247) hide show
  1. package/ARCHITECTURE.md +547 -547
  2. package/BENCHMARKS.md +238 -238
  3. package/README.md +310 -181
  4. package/dist/ai-sdk/tools.d.ts +2 -2
  5. package/dist/ai-sdk/tools.js +2 -2
  6. package/dist/client/ClientMemoryManager.js +2 -2
  7. package/dist/client/ClientMemoryManager.js.map +1 -1
  8. package/dist/client/PersonalDataWallet.d.ts.map +1 -1
  9. package/dist/client/SimplePDWClient.d.ts +29 -1
  10. package/dist/client/SimplePDWClient.d.ts.map +1 -1
  11. package/dist/client/SimplePDWClient.js +45 -13
  12. package/dist/client/SimplePDWClient.js.map +1 -1
  13. package/dist/client/namespaces/EmbeddingsNamespace.d.ts +1 -1
  14. package/dist/client/namespaces/EmbeddingsNamespace.js +1 -1
  15. package/dist/client/namespaces/MemoryNamespace.d.ts +31 -0
  16. package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
  17. package/dist/client/namespaces/MemoryNamespace.js +272 -39
  18. package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
  19. package/dist/client/namespaces/consolidated/AINamespace.d.ts +2 -2
  20. package/dist/client/namespaces/consolidated/AINamespace.js +2 -2
  21. package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts +12 -2
  22. package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts.map +1 -1
  23. package/dist/client/namespaces/consolidated/BlockchainNamespace.js +62 -4
  24. package/dist/client/namespaces/consolidated/BlockchainNamespace.js.map +1 -1
  25. package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +67 -2
  26. package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
  27. package/dist/client/namespaces/consolidated/StorageNamespace.js +549 -16
  28. package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
  29. package/dist/config/ConfigurationHelper.js +61 -61
  30. package/dist/config/defaults.js +2 -2
  31. package/dist/config/defaults.js.map +1 -1
  32. package/dist/graph/GraphService.js +21 -21
  33. package/dist/graph/GraphService.js.map +1 -1
  34. package/dist/index.d.ts +3 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/infrastructure/seal/EncryptionService.d.ts +9 -5
  39. package/dist/infrastructure/seal/EncryptionService.d.ts.map +1 -1
  40. package/dist/infrastructure/seal/EncryptionService.js +37 -15
  41. package/dist/infrastructure/seal/EncryptionService.js.map +1 -1
  42. package/dist/infrastructure/seal/SealService.d.ts +13 -5
  43. package/dist/infrastructure/seal/SealService.d.ts.map +1 -1
  44. package/dist/infrastructure/seal/SealService.js +36 -34
  45. package/dist/infrastructure/seal/SealService.js.map +1 -1
  46. package/dist/langchain/createPDWRAG.js +30 -30
  47. package/dist/retrieval/MemoryDecryptionPipeline.d.ts.map +1 -1
  48. package/dist/retrieval/MemoryDecryptionPipeline.js +2 -1
  49. package/dist/retrieval/MemoryDecryptionPipeline.js.map +1 -1
  50. package/dist/retrieval/MemoryRetrievalService.d.ts +31 -0
  51. package/dist/retrieval/MemoryRetrievalService.d.ts.map +1 -1
  52. package/dist/retrieval/MemoryRetrievalService.js +44 -4
  53. package/dist/retrieval/MemoryRetrievalService.js.map +1 -1
  54. package/dist/services/CapabilityService.d.ts.map +1 -1
  55. package/dist/services/CapabilityService.js +30 -14
  56. package/dist/services/CapabilityService.js.map +1 -1
  57. package/dist/services/CrossContextPermissionService.d.ts.map +1 -1
  58. package/dist/services/CrossContextPermissionService.js +9 -7
  59. package/dist/services/CrossContextPermissionService.js.map +1 -1
  60. package/dist/services/EmbeddingService.d.ts +28 -1
  61. package/dist/services/EmbeddingService.d.ts.map +1 -1
  62. package/dist/services/EmbeddingService.js +54 -0
  63. package/dist/services/EmbeddingService.js.map +1 -1
  64. package/dist/services/EncryptionService.d.ts.map +1 -1
  65. package/dist/services/EncryptionService.js +6 -5
  66. package/dist/services/EncryptionService.js.map +1 -1
  67. package/dist/services/GeminiAIService.js +309 -309
  68. package/dist/services/IndexManager.d.ts +5 -1
  69. package/dist/services/IndexManager.d.ts.map +1 -1
  70. package/dist/services/IndexManager.js +17 -40
  71. package/dist/services/IndexManager.js.map +1 -1
  72. package/dist/services/QueryService.js +1 -1
  73. package/dist/services/QueryService.js.map +1 -1
  74. package/dist/services/StorageService.d.ts +11 -0
  75. package/dist/services/StorageService.d.ts.map +1 -1
  76. package/dist/services/StorageService.js +73 -10
  77. package/dist/services/StorageService.js.map +1 -1
  78. package/dist/services/TransactionService.d.ts +20 -0
  79. package/dist/services/TransactionService.d.ts.map +1 -1
  80. package/dist/services/TransactionService.js +43 -0
  81. package/dist/services/TransactionService.js.map +1 -1
  82. package/dist/services/ViewService.js +2 -2
  83. package/dist/services/ViewService.js.map +1 -1
  84. package/dist/services/storage/QuiltBatchManager.d.ts +101 -1
  85. package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
  86. package/dist/services/storage/QuiltBatchManager.js +410 -20
  87. package/dist/services/storage/QuiltBatchManager.js.map +1 -1
  88. package/dist/services/storage/index.d.ts +1 -1
  89. package/dist/services/storage/index.d.ts.map +1 -1
  90. package/dist/services/storage/index.js.map +1 -1
  91. package/dist/utils/LRUCache.d.ts +106 -0
  92. package/dist/utils/LRUCache.d.ts.map +1 -0
  93. package/dist/utils/LRUCache.js +281 -0
  94. package/dist/utils/LRUCache.js.map +1 -0
  95. package/dist/utils/index.d.ts +1 -0
  96. package/dist/utils/index.d.ts.map +1 -1
  97. package/dist/utils/index.js +2 -0
  98. package/dist/utils/index.js.map +1 -1
  99. package/dist/utils/memoryIndexOnChain.d.ts +212 -0
  100. package/dist/utils/memoryIndexOnChain.d.ts.map +1 -0
  101. package/dist/utils/memoryIndexOnChain.js +312 -0
  102. package/dist/utils/memoryIndexOnChain.js.map +1 -0
  103. package/dist/utils/rebuildIndexNode.d.ts +29 -0
  104. package/dist/utils/rebuildIndexNode.d.ts.map +1 -1
  105. package/dist/utils/rebuildIndexNode.js +366 -98
  106. package/dist/utils/rebuildIndexNode.js.map +1 -1
  107. package/dist/vector/HnswWasmService.d.ts +20 -5
  108. package/dist/vector/HnswWasmService.d.ts.map +1 -1
  109. package/dist/vector/HnswWasmService.js +73 -40
  110. package/dist/vector/HnswWasmService.js.map +1 -1
  111. package/dist/vector/IHnswService.d.ts +10 -1
  112. package/dist/vector/IHnswService.d.ts.map +1 -1
  113. package/dist/vector/IHnswService.js.map +1 -1
  114. package/dist/vector/NodeHnswService.d.ts +16 -0
  115. package/dist/vector/NodeHnswService.d.ts.map +1 -1
  116. package/dist/vector/NodeHnswService.js +84 -5
  117. package/dist/vector/NodeHnswService.js.map +1 -1
  118. package/dist/vector/createHnswService.d.ts +1 -1
  119. package/dist/vector/createHnswService.js +1 -1
  120. package/dist/vector/index.d.ts +1 -1
  121. package/dist/vector/index.js +1 -1
  122. package/package.json +157 -157
  123. package/src/access/PermissionService.ts +635 -635
  124. package/src/aggregation/AggregationService.ts +389 -389
  125. package/src/ai-sdk/PDWVectorStore.ts +715 -715
  126. package/src/ai-sdk/index.ts +65 -65
  127. package/src/ai-sdk/tools.ts +460 -460
  128. package/src/ai-sdk/types.ts +404 -404
  129. package/src/batch/BatchManager.ts +597 -597
  130. package/src/batch/BatchingService.ts +429 -429
  131. package/src/batch/MemoryProcessingCache.ts +492 -492
  132. package/src/batch/index.ts +30 -30
  133. package/src/browser.ts +200 -200
  134. package/src/client/ClientMemoryManager.ts +987 -987
  135. package/src/client/PersonalDataWallet.ts +345 -345
  136. package/src/client/SimplePDWClient.ts +1289 -1222
  137. package/src/client/factory.ts +154 -154
  138. package/src/client/namespaces/AnalyticsNamespace.ts +377 -377
  139. package/src/client/namespaces/BatchNamespace.ts +356 -356
  140. package/src/client/namespaces/CacheNamespace.ts +123 -123
  141. package/src/client/namespaces/CapabilityNamespace.ts +217 -217
  142. package/src/client/namespaces/ClassifyNamespace.ts +169 -169
  143. package/src/client/namespaces/ContextNamespace.ts +297 -297
  144. package/src/client/namespaces/EmbeddingsNamespace.ts +99 -99
  145. package/src/client/namespaces/EncryptionNamespace.ts +221 -221
  146. package/src/client/namespaces/GraphNamespace.ts +468 -468
  147. package/src/client/namespaces/IndexNamespace.ts +361 -361
  148. package/src/client/namespaces/MemoryNamespace.ts +1422 -1135
  149. package/src/client/namespaces/PermissionsNamespace.ts +254 -254
  150. package/src/client/namespaces/PipelineNamespace.ts +220 -220
  151. package/src/client/namespaces/SearchNamespace.ts +1049 -1049
  152. package/src/client/namespaces/StorageNamespace.ts +458 -458
  153. package/src/client/namespaces/TxNamespace.ts +260 -260
  154. package/src/client/namespaces/WalletNamespace.ts +243 -243
  155. package/src/client/namespaces/consolidated/AINamespace.ts +449 -449
  156. package/src/client/namespaces/consolidated/BlockchainNamespace.ts +607 -546
  157. package/src/client/namespaces/consolidated/SecurityNamespace.ts +648 -648
  158. package/src/client/namespaces/consolidated/StorageNamespace.ts +1141 -497
  159. package/src/client/namespaces/consolidated/index.ts +39 -39
  160. package/src/client/signers/KeypairSigner.ts +108 -108
  161. package/src/client/signers/UnifiedSigner.ts +110 -110
  162. package/src/client/signers/WalletAdapterSigner.ts +159 -159
  163. package/src/client/signers/index.ts +26 -26
  164. package/src/config/ConfigurationHelper.ts +412 -412
  165. package/src/config/defaults.ts +51 -51
  166. package/src/config/index.ts +8 -8
  167. package/src/config/validation.ts +70 -70
  168. package/src/core/index.ts +14 -14
  169. package/src/core/interfaces/IService.ts +307 -307
  170. package/src/core/interfaces/index.ts +8 -8
  171. package/src/core/types/capability.ts +297 -297
  172. package/src/core/types/index.ts +870 -870
  173. package/src/core/types/wallet.ts +270 -270
  174. package/src/core/types.ts +9 -9
  175. package/src/core/wallet.ts +222 -222
  176. package/src/embedding/index.ts +19 -19
  177. package/src/embedding/types.ts +357 -357
  178. package/src/errors/index.ts +602 -602
  179. package/src/errors/recovery.ts +461 -461
  180. package/src/errors/validation.ts +567 -567
  181. package/src/generated/pdw/capability.ts +319 -319
  182. package/src/graph/GraphService.ts +887 -887
  183. package/src/graph/KnowledgeGraphManager.ts +728 -728
  184. package/src/graph/index.ts +25 -25
  185. package/src/index.ts +498 -474
  186. package/src/infrastructure/index.ts +22 -22
  187. package/src/infrastructure/seal/EncryptionService.ts +628 -603
  188. package/src/infrastructure/seal/SealService.ts +613 -615
  189. package/src/infrastructure/seal/index.ts +9 -9
  190. package/src/infrastructure/sui/BlockchainManager.ts +627 -627
  191. package/src/infrastructure/sui/SuiService.ts +888 -888
  192. package/src/infrastructure/sui/index.ts +9 -9
  193. package/src/infrastructure/walrus/StorageManager.ts +604 -604
  194. package/src/infrastructure/walrus/WalrusStorageService.ts +612 -612
  195. package/src/infrastructure/walrus/index.ts +9 -9
  196. package/src/langchain/PDWEmbeddings.ts +145 -145
  197. package/src/langchain/PDWVectorStore.ts +456 -456
  198. package/src/langchain/createPDWRAG.ts +303 -303
  199. package/src/langchain/index.ts +47 -47
  200. package/src/permissions/ConsentRepository.browser.ts +249 -249
  201. package/src/permissions/ConsentRepository.ts +364 -364
  202. package/src/pipeline/MemoryPipeline.ts +862 -862
  203. package/src/pipeline/PipelineManager.ts +683 -683
  204. package/src/pipeline/index.ts +26 -26
  205. package/src/retrieval/AdvancedSearchService.ts +629 -629
  206. package/src/retrieval/MemoryAnalyticsService.ts +711 -711
  207. package/src/retrieval/MemoryDecryptionPipeline.ts +825 -824
  208. package/src/retrieval/MemoryRetrievalService.ts +904 -830
  209. package/src/retrieval/index.ts +42 -42
  210. package/src/services/BatchService.ts +352 -352
  211. package/src/services/CapabilityService.ts +464 -448
  212. package/src/services/ClassifierService.ts +465 -465
  213. package/src/services/CrossContextPermissionService.ts +486 -484
  214. package/src/services/EmbeddingService.ts +771 -706
  215. package/src/services/EncryptionService.ts +712 -711
  216. package/src/services/GeminiAIService.ts +753 -753
  217. package/src/services/IndexManager.ts +977 -1004
  218. package/src/services/MemoryIndexService.ts +1003 -1003
  219. package/src/services/MemoryService.ts +369 -369
  220. package/src/services/QueryService.ts +890 -890
  221. package/src/services/StorageService.ts +1182 -1111
  222. package/src/services/TransactionService.ts +838 -790
  223. package/src/services/VectorService.ts +462 -462
  224. package/src/services/ViewService.ts +484 -484
  225. package/src/services/index.ts +25 -25
  226. package/src/services/storage/BlobAttributesManager.ts +333 -333
  227. package/src/services/storage/KnowledgeGraphManager.ts +425 -425
  228. package/src/services/storage/MemorySearchManager.ts +387 -387
  229. package/src/services/storage/QuiltBatchManager.ts +1130 -660
  230. package/src/services/storage/WalrusMetadataManager.ts +268 -268
  231. package/src/services/storage/WalrusStorageManager.ts +287 -287
  232. package/src/services/storage/index.ts +57 -52
  233. package/src/types/index.ts +13 -13
  234. package/src/utils/LRUCache.ts +378 -0
  235. package/src/utils/index.ts +76 -68
  236. package/src/utils/memoryIndexOnChain.ts +507 -0
  237. package/src/utils/rebuildIndex.ts +290 -290
  238. package/src/utils/rebuildIndexNode.ts +771 -424
  239. package/src/vector/BrowserHnswIndexService.ts +758 -758
  240. package/src/vector/HnswWasmService.ts +731 -679
  241. package/src/vector/IHnswService.ts +233 -224
  242. package/src/vector/NodeHnswService.ts +833 -735
  243. package/src/vector/VectorManager.ts +478 -478
  244. package/src/vector/createHnswService.ts +135 -135
  245. package/src/vector/index.ts +56 -56
  246. package/src/wallet/ContextWalletService.ts +656 -656
  247. package/src/wallet/MainWalletService.ts +317 -317
@@ -1,377 +1,377 @@
1
- /**
2
- * Analytics Namespace - Memory Analytics & Insights
3
- *
4
- * Pure delegation to MemoryAnalyticsService for comprehensive analytics.
5
- * Provides insights, trends, clustering, and recommendations.
6
- *
7
- * @module client/namespaces
8
- */
9
-
10
- import type { ServiceContainer } from '../SimplePDWClient';
11
- import type {
12
- MemoryAnalytics,
13
- UsagePattern,
14
- SimilarityCluster,
15
- MemoryInsights
16
- } from '../../retrieval/MemoryAnalyticsService';
17
-
18
- /**
19
- * Analytics options
20
- */
21
- export interface AnalyticsOptions {
22
- periodStart?: Date;
23
- periodEnd?: Date;
24
- includeForecasting?: boolean;
25
- includeClustering?: boolean;
26
- includeInsights?: boolean;
27
- }
28
-
29
- /**
30
- * Category distribution
31
- */
32
- export interface CategoryDistribution {
33
- category: string;
34
- count: number;
35
- percentage: number;
36
- }
37
-
38
- /**
39
- * Trend data
40
- */
41
- export interface TrendData {
42
- direction: 'up' | 'down' | 'stable' | 'volatile';
43
- strength: number;
44
- forecast?: Array<{ date: Date; predicted: number; confidence: number }>;
45
- }
46
-
47
- /**
48
- * Analytics Namespace
49
- *
50
- * Handles memory analytics, insights, and visualization data
51
- */
52
- export class AnalyticsNamespace {
53
- constructor(private services: ServiceContainer) {}
54
-
55
- /**
56
- * Generate comprehensive analytics report
57
- *
58
- * Delegates to: MemoryAnalyticsService.generateMemoryAnalytics()
59
- *
60
- * @param options - Analytics options
61
- * @returns Complete analytics report
62
- */
63
- async generate(options?: AnalyticsOptions): Promise<MemoryAnalytics> {
64
- if (!this.services.analytics) {
65
- throw new Error('Analytics service not configured.');
66
- }
67
-
68
- // Get user's memories first
69
- const memoriesResult = await this.services.viewService?.getUserMemories(
70
- this.services.config.userAddress
71
- );
72
-
73
- const memories = memoriesResult?.data || [];
74
-
75
- // Convert to UnifiedMemoryResult format
76
- const unifiedMemories = memories.map((m: any) => ({
77
- id: m.id,
78
- category: m.category,
79
- created: new Date(m.createdAt || Date.now()),
80
- metadata: {
81
- size: 0,
82
- importance: m.importance || 5,
83
- contentType: 'text',
84
- tags: m.tags || []
85
- },
86
- analytics: {
87
- viewCount: 0
88
- }
89
- }));
90
-
91
- return await this.services.analytics.generateMemoryAnalytics(
92
- this.services.config.userAddress,
93
- unifiedMemories as any,
94
- options
95
- );
96
- }
97
-
98
- /**
99
- * Get category distribution
100
- *
101
- * Delegates to: MemoryAnalyticsService.generateMemoryAnalytics() → topCategories
102
- *
103
- * @returns Category distribution data
104
- */
105
- async categories(): Promise<CategoryDistribution[]> {
106
- const analytics = await this.generate({ includeInsights: false, includeClustering: false });
107
- return analytics.topCategories;
108
- }
109
-
110
- /**
111
- * Get temporal trends
112
- *
113
- * Delegates to: MemoryAnalyticsService.generateMemoryAnalytics() → temporalTrends
114
- *
115
- * @returns Trend analysis data
116
- */
117
- async trends(): Promise<{
118
- creation: TrendData;
119
- access: TrendData;
120
- size: TrendData;
121
- }> {
122
- const analytics = await this.generate({ includeForecasting: true });
123
-
124
- return {
125
- creation: {
126
- direction: analytics.temporalTrends.creationTrend.direction,
127
- strength: analytics.temporalTrends.creationTrend.strength,
128
- forecast: analytics.temporalTrends.creationTrend.forecast
129
- },
130
- access: {
131
- direction: analytics.temporalTrends.accessTrend.direction,
132
- strength: analytics.temporalTrends.accessTrend.strength,
133
- forecast: analytics.temporalTrends.accessTrend.forecast
134
- },
135
- size: {
136
- direction: analytics.temporalTrends.sizeTrend.direction,
137
- strength: analytics.temporalTrends.sizeTrend.strength,
138
- forecast: analytics.temporalTrends.sizeTrend.forecast
139
- }
140
- };
141
- }
142
-
143
- /**
144
- * Get importance distribution
145
- *
146
- * Analyzes how memories are distributed by importance level
147
- *
148
- * @returns Importance analysis
149
- */
150
- async importance(): Promise<{
151
- average: number;
152
- distribution: Record<number, number>;
153
- highImportance: number;
154
- lowImportance: number;
155
- }> {
156
- const analytics = await this.generate({ includeInsights: false });
157
-
158
- // Calculate distribution from memories
159
- const memoriesResult = await this.services.viewService?.getUserMemories(
160
- this.services.config.userAddress
161
- );
162
-
163
- const memories = memoriesResult?.data || [];
164
-
165
- const distribution: Record<number, number> = {};
166
- let highCount = 0;
167
- let lowCount = 0;
168
-
169
- memories.forEach((m: any) => {
170
- const imp = m.importance || 5;
171
- distribution[imp] = (distribution[imp] || 0) + 1;
172
-
173
- if (imp >= 8) highCount++;
174
- if (imp <= 3) lowCount++;
175
- });
176
-
177
- return {
178
- average: analytics.averageImportance,
179
- distribution,
180
- highImportance: highCount,
181
- lowImportance: lowCount
182
- };
183
- }
184
-
185
- /**
186
- * Get temporal patterns
187
- *
188
- * Delegates to: MemoryAnalyticsService.analyzeUsagePatterns()
189
- *
190
- * @returns Usage patterns by time
191
- */
192
- async temporal(): Promise<UsagePattern[]> {
193
- const analytics = await this.generate({ includeInsights: false });
194
- return analytics.usagePatterns;
195
- }
196
-
197
- /**
198
- * Get AI-generated insights
199
- *
200
- * Delegates to: MemoryAnalyticsService.generateKnowledgeInsights()
201
- *
202
- * @returns Knowledge insights and recommendations
203
- */
204
- async insights(): Promise<MemoryInsights> {
205
- const analytics = await this.generate({ includeInsights: true });
206
- return analytics.knowledgeInsights;
207
- }
208
-
209
- /**
210
- * Detect anomalies in memory patterns
211
- *
212
- * Finds unusual patterns or outliers
213
- *
214
- * @returns Array of detected anomalies
215
- */
216
- async anomalies(): Promise<Array<{
217
- date: Date;
218
- type: 'spike' | 'drop' | 'outlier';
219
- severity: number;
220
- description: string;
221
- }>> {
222
- const analytics = await this.generate();
223
-
224
- // Extract anomalies from usage patterns
225
- const anomalies: Array<{
226
- date: Date;
227
- type: 'spike' | 'drop' | 'outlier';
228
- severity: number;
229
- description: string;
230
- }> = [];
231
-
232
- analytics.usagePatterns.forEach(pattern => {
233
- pattern.anomalies.forEach(anomaly => {
234
- anomalies.push({
235
- date: anomaly.date,
236
- type: anomaly.type,
237
- severity: anomaly.severity,
238
- description: anomaly.possibleCauses?.join(', ') || 'Unknown cause'
239
- });
240
- });
241
- });
242
-
243
- return anomalies;
244
- }
245
-
246
- /**
247
- * Analyze correlations between categories/topics
248
- *
249
- * Finds relationships between different memory types
250
- *
251
- * @returns Correlation data
252
- */
253
- async correlations(): Promise<Array<{
254
- concept1: string;
255
- concept2: string;
256
- strength: number;
257
- memoryCount: number;
258
- }>> {
259
- const analytics = await this.generate({ includeInsights: true });
260
-
261
- // Extract from conceptual connections
262
- return analytics.knowledgeInsights.conceptualConnections.map(conn => ({
263
- concept1: conn.concept1,
264
- concept2: conn.concept2,
265
- strength: conn.connectionStrength,
266
- memoryCount: conn.bridgeMemories.length
267
- }));
268
- }
269
-
270
- /**
271
- * Analyze a single memory
272
- *
273
- * Get detailed analytics for one memory
274
- *
275
- * @param memoryId - Memory ID to analyze
276
- * @returns Memory-specific analytics
277
- */
278
- async analyze(memoryId: string): Promise<{
279
- memoryId: string;
280
- importance: number;
281
- category: string;
282
- relatedCount: number;
283
- clusterInfo?: {
284
- clusterId: string;
285
- similarity: number;
286
- };
287
- }> {
288
- // Get memory details
289
- const memory = await this.services.storage.retrieveMemoryPackage(memoryId);
290
-
291
- // Decode content if it's Uint8Array
292
- const content = typeof memory.content === 'string'
293
- ? memory.content
294
- : new TextDecoder().decode(memory.content);
295
-
296
- // Related memories search requires vector service
297
- // For now return basic analysis without related count
298
- return {
299
- memoryId,
300
- importance: memory.metadata.importance || 5,
301
- category: memory.metadata.category,
302
- relatedCount: 0, // Would require vector search
303
- clusterInfo: undefined // Would require full clustering analysis
304
- };
305
- }
306
-
307
- /**
308
- * Get visualization-ready data
309
- *
310
- * Formats analytics for charts and graphs
311
- *
312
- * @returns Chart-ready data
313
- */
314
- async visualizationData(): Promise<{
315
- categoryChart: Array<{ name: string; value: number }>;
316
- importanceChart: Array<{ level: number; count: number }>;
317
- timelineChart: Array<{ date: string; count: number }>;
318
- clusterChart: Array<{ id: string; size: number; coherence: number }>;
319
- }> {
320
- const analytics = await this.generate({ includeClustering: true });
321
-
322
- // Category chart data
323
- const categoryChart = analytics.topCategories.map(c => ({
324
- name: c.category,
325
- value: c.count
326
- }));
327
-
328
- // Importance chart data
329
- const importanceData = await this.importance();
330
- const importanceChart = Object.entries(importanceData.distribution).map(([level, count]) => ({
331
- level: parseInt(level),
332
- count
333
- }));
334
-
335
- // Timeline chart data - aggregate memories by date
336
- const timelineChart: Array<{ date: string; count: number }> = [];
337
- try {
338
- const memoriesResult = await this.services.viewService?.getUserMemories(
339
- this.services.config.userAddress,
340
- { limit: 1000 }
341
- );
342
- const memories = memoriesResult?.data || [];
343
-
344
- // Group memories by date (YYYY-MM-DD)
345
- const dateCountMap = new Map<string, number>();
346
- memories.forEach((m: any) => {
347
- const timestamp = m.createdAt || m.updatedAt || Date.now();
348
- const dateStr = new Date(timestamp).toISOString().split('T')[0];
349
- dateCountMap.set(dateStr, (dateCountMap.get(dateStr) || 0) + 1);
350
- });
351
-
352
- // Sort by date and convert to array
353
- const sortedDates = Array.from(dateCountMap.entries())
354
- .sort((a, b) => a[0].localeCompare(b[0]));
355
-
356
- sortedDates.forEach(([date, count]) => {
357
- timelineChart.push({ date, count });
358
- });
359
- } catch (error) {
360
- console.warn('Failed to generate timeline chart data:', error);
361
- }
362
-
363
- // Cluster chart data
364
- const clusterChart = analytics.similarityClusters.map(c => ({
365
- id: c.id,
366
- size: c.size,
367
- coherence: c.coherence
368
- }));
369
-
370
- return {
371
- categoryChart,
372
- importanceChart,
373
- timelineChart,
374
- clusterChart
375
- };
376
- }
377
- }
1
+ /**
2
+ * Analytics Namespace - Memory Analytics & Insights
3
+ *
4
+ * Pure delegation to MemoryAnalyticsService for comprehensive analytics.
5
+ * Provides insights, trends, clustering, and recommendations.
6
+ *
7
+ * @module client/namespaces
8
+ */
9
+
10
+ import type { ServiceContainer } from '../SimplePDWClient';
11
+ import type {
12
+ MemoryAnalytics,
13
+ UsagePattern,
14
+ SimilarityCluster,
15
+ MemoryInsights
16
+ } from '../../retrieval/MemoryAnalyticsService';
17
+
18
+ /**
19
+ * Analytics options
20
+ */
21
+ export interface AnalyticsOptions {
22
+ periodStart?: Date;
23
+ periodEnd?: Date;
24
+ includeForecasting?: boolean;
25
+ includeClustering?: boolean;
26
+ includeInsights?: boolean;
27
+ }
28
+
29
+ /**
30
+ * Category distribution
31
+ */
32
+ export interface CategoryDistribution {
33
+ category: string;
34
+ count: number;
35
+ percentage: number;
36
+ }
37
+
38
+ /**
39
+ * Trend data
40
+ */
41
+ export interface TrendData {
42
+ direction: 'up' | 'down' | 'stable' | 'volatile';
43
+ strength: number;
44
+ forecast?: Array<{ date: Date; predicted: number; confidence: number }>;
45
+ }
46
+
47
+ /**
48
+ * Analytics Namespace
49
+ *
50
+ * Handles memory analytics, insights, and visualization data
51
+ */
52
+ export class AnalyticsNamespace {
53
+ constructor(private services: ServiceContainer) {}
54
+
55
+ /**
56
+ * Generate comprehensive analytics report
57
+ *
58
+ * Delegates to: MemoryAnalyticsService.generateMemoryAnalytics()
59
+ *
60
+ * @param options - Analytics options
61
+ * @returns Complete analytics report
62
+ */
63
+ async generate(options?: AnalyticsOptions): Promise<MemoryAnalytics> {
64
+ if (!this.services.analytics) {
65
+ throw new Error('Analytics service not configured.');
66
+ }
67
+
68
+ // Get user's memories first
69
+ const memoriesResult = await this.services.viewService?.getUserMemories(
70
+ this.services.config.userAddress
71
+ );
72
+
73
+ const memories = memoriesResult?.data || [];
74
+
75
+ // Convert to UnifiedMemoryResult format
76
+ const unifiedMemories = memories.map((m: any) => ({
77
+ id: m.id,
78
+ category: m.category,
79
+ created: new Date(m.createdAt || Date.now()),
80
+ metadata: {
81
+ size: 0,
82
+ importance: m.importance || 5,
83
+ contentType: 'text',
84
+ tags: m.tags || []
85
+ },
86
+ analytics: {
87
+ viewCount: 0
88
+ }
89
+ }));
90
+
91
+ return await this.services.analytics.generateMemoryAnalytics(
92
+ this.services.config.userAddress,
93
+ unifiedMemories as any,
94
+ options
95
+ );
96
+ }
97
+
98
+ /**
99
+ * Get category distribution
100
+ *
101
+ * Delegates to: MemoryAnalyticsService.generateMemoryAnalytics() → topCategories
102
+ *
103
+ * @returns Category distribution data
104
+ */
105
+ async categories(): Promise<CategoryDistribution[]> {
106
+ const analytics = await this.generate({ includeInsights: false, includeClustering: false });
107
+ return analytics.topCategories;
108
+ }
109
+
110
+ /**
111
+ * Get temporal trends
112
+ *
113
+ * Delegates to: MemoryAnalyticsService.generateMemoryAnalytics() → temporalTrends
114
+ *
115
+ * @returns Trend analysis data
116
+ */
117
+ async trends(): Promise<{
118
+ creation: TrendData;
119
+ access: TrendData;
120
+ size: TrendData;
121
+ }> {
122
+ const analytics = await this.generate({ includeForecasting: true });
123
+
124
+ return {
125
+ creation: {
126
+ direction: analytics.temporalTrends.creationTrend.direction,
127
+ strength: analytics.temporalTrends.creationTrend.strength,
128
+ forecast: analytics.temporalTrends.creationTrend.forecast
129
+ },
130
+ access: {
131
+ direction: analytics.temporalTrends.accessTrend.direction,
132
+ strength: analytics.temporalTrends.accessTrend.strength,
133
+ forecast: analytics.temporalTrends.accessTrend.forecast
134
+ },
135
+ size: {
136
+ direction: analytics.temporalTrends.sizeTrend.direction,
137
+ strength: analytics.temporalTrends.sizeTrend.strength,
138
+ forecast: analytics.temporalTrends.sizeTrend.forecast
139
+ }
140
+ };
141
+ }
142
+
143
+ /**
144
+ * Get importance distribution
145
+ *
146
+ * Analyzes how memories are distributed by importance level
147
+ *
148
+ * @returns Importance analysis
149
+ */
150
+ async importance(): Promise<{
151
+ average: number;
152
+ distribution: Record<number, number>;
153
+ highImportance: number;
154
+ lowImportance: number;
155
+ }> {
156
+ const analytics = await this.generate({ includeInsights: false });
157
+
158
+ // Calculate distribution from memories
159
+ const memoriesResult = await this.services.viewService?.getUserMemories(
160
+ this.services.config.userAddress
161
+ );
162
+
163
+ const memories = memoriesResult?.data || [];
164
+
165
+ const distribution: Record<number, number> = {};
166
+ let highCount = 0;
167
+ let lowCount = 0;
168
+
169
+ memories.forEach((m: any) => {
170
+ const imp = m.importance || 5;
171
+ distribution[imp] = (distribution[imp] || 0) + 1;
172
+
173
+ if (imp >= 8) highCount++;
174
+ if (imp <= 3) lowCount++;
175
+ });
176
+
177
+ return {
178
+ average: analytics.averageImportance,
179
+ distribution,
180
+ highImportance: highCount,
181
+ lowImportance: lowCount
182
+ };
183
+ }
184
+
185
+ /**
186
+ * Get temporal patterns
187
+ *
188
+ * Delegates to: MemoryAnalyticsService.analyzeUsagePatterns()
189
+ *
190
+ * @returns Usage patterns by time
191
+ */
192
+ async temporal(): Promise<UsagePattern[]> {
193
+ const analytics = await this.generate({ includeInsights: false });
194
+ return analytics.usagePatterns;
195
+ }
196
+
197
+ /**
198
+ * Get AI-generated insights
199
+ *
200
+ * Delegates to: MemoryAnalyticsService.generateKnowledgeInsights()
201
+ *
202
+ * @returns Knowledge insights and recommendations
203
+ */
204
+ async insights(): Promise<MemoryInsights> {
205
+ const analytics = await this.generate({ includeInsights: true });
206
+ return analytics.knowledgeInsights;
207
+ }
208
+
209
+ /**
210
+ * Detect anomalies in memory patterns
211
+ *
212
+ * Finds unusual patterns or outliers
213
+ *
214
+ * @returns Array of detected anomalies
215
+ */
216
+ async anomalies(): Promise<Array<{
217
+ date: Date;
218
+ type: 'spike' | 'drop' | 'outlier';
219
+ severity: number;
220
+ description: string;
221
+ }>> {
222
+ const analytics = await this.generate();
223
+
224
+ // Extract anomalies from usage patterns
225
+ const anomalies: Array<{
226
+ date: Date;
227
+ type: 'spike' | 'drop' | 'outlier';
228
+ severity: number;
229
+ description: string;
230
+ }> = [];
231
+
232
+ analytics.usagePatterns.forEach(pattern => {
233
+ pattern.anomalies.forEach(anomaly => {
234
+ anomalies.push({
235
+ date: anomaly.date,
236
+ type: anomaly.type,
237
+ severity: anomaly.severity,
238
+ description: anomaly.possibleCauses?.join(', ') || 'Unknown cause'
239
+ });
240
+ });
241
+ });
242
+
243
+ return anomalies;
244
+ }
245
+
246
+ /**
247
+ * Analyze correlations between categories/topics
248
+ *
249
+ * Finds relationships between different memory types
250
+ *
251
+ * @returns Correlation data
252
+ */
253
+ async correlations(): Promise<Array<{
254
+ concept1: string;
255
+ concept2: string;
256
+ strength: number;
257
+ memoryCount: number;
258
+ }>> {
259
+ const analytics = await this.generate({ includeInsights: true });
260
+
261
+ // Extract from conceptual connections
262
+ return analytics.knowledgeInsights.conceptualConnections.map(conn => ({
263
+ concept1: conn.concept1,
264
+ concept2: conn.concept2,
265
+ strength: conn.connectionStrength,
266
+ memoryCount: conn.bridgeMemories.length
267
+ }));
268
+ }
269
+
270
+ /**
271
+ * Analyze a single memory
272
+ *
273
+ * Get detailed analytics for one memory
274
+ *
275
+ * @param memoryId - Memory ID to analyze
276
+ * @returns Memory-specific analytics
277
+ */
278
+ async analyze(memoryId: string): Promise<{
279
+ memoryId: string;
280
+ importance: number;
281
+ category: string;
282
+ relatedCount: number;
283
+ clusterInfo?: {
284
+ clusterId: string;
285
+ similarity: number;
286
+ };
287
+ }> {
288
+ // Get memory details
289
+ const memory = await this.services.storage.retrieveMemoryPackage(memoryId);
290
+
291
+ // Decode content if it's Uint8Array
292
+ const content = typeof memory.content === 'string'
293
+ ? memory.content
294
+ : new TextDecoder().decode(memory.content);
295
+
296
+ // Related memories search requires vector service
297
+ // For now return basic analysis without related count
298
+ return {
299
+ memoryId,
300
+ importance: memory.metadata.importance || 5,
301
+ category: memory.metadata.category,
302
+ relatedCount: 0, // Would require vector search
303
+ clusterInfo: undefined // Would require full clustering analysis
304
+ };
305
+ }
306
+
307
+ /**
308
+ * Get visualization-ready data
309
+ *
310
+ * Formats analytics for charts and graphs
311
+ *
312
+ * @returns Chart-ready data
313
+ */
314
+ async visualizationData(): Promise<{
315
+ categoryChart: Array<{ name: string; value: number }>;
316
+ importanceChart: Array<{ level: number; count: number }>;
317
+ timelineChart: Array<{ date: string; count: number }>;
318
+ clusterChart: Array<{ id: string; size: number; coherence: number }>;
319
+ }> {
320
+ const analytics = await this.generate({ includeClustering: true });
321
+
322
+ // Category chart data
323
+ const categoryChart = analytics.topCategories.map(c => ({
324
+ name: c.category,
325
+ value: c.count
326
+ }));
327
+
328
+ // Importance chart data
329
+ const importanceData = await this.importance();
330
+ const importanceChart = Object.entries(importanceData.distribution).map(([level, count]) => ({
331
+ level: parseInt(level),
332
+ count
333
+ }));
334
+
335
+ // Timeline chart data - aggregate memories by date
336
+ const timelineChart: Array<{ date: string; count: number }> = [];
337
+ try {
338
+ const memoriesResult = await this.services.viewService?.getUserMemories(
339
+ this.services.config.userAddress,
340
+ { limit: 1000 }
341
+ );
342
+ const memories = memoriesResult?.data || [];
343
+
344
+ // Group memories by date (YYYY-MM-DD)
345
+ const dateCountMap = new Map<string, number>();
346
+ memories.forEach((m: any) => {
347
+ const timestamp = m.createdAt || m.updatedAt || Date.now();
348
+ const dateStr = new Date(timestamp).toISOString().split('T')[0];
349
+ dateCountMap.set(dateStr, (dateCountMap.get(dateStr) || 0) + 1);
350
+ });
351
+
352
+ // Sort by date and convert to array
353
+ const sortedDates = Array.from(dateCountMap.entries())
354
+ .sort((a, b) => a[0].localeCompare(b[0]));
355
+
356
+ sortedDates.forEach(([date, count]) => {
357
+ timelineChart.push({ date, count });
358
+ });
359
+ } catch (error) {
360
+ console.warn('Failed to generate timeline chart data:', error);
361
+ }
362
+
363
+ // Cluster chart data
364
+ const clusterChart = analytics.similarityClusters.map(c => ({
365
+ id: c.id,
366
+ size: c.size,
367
+ coherence: c.coherence
368
+ }));
369
+
370
+ return {
371
+ categoryChart,
372
+ importanceChart,
373
+ timelineChart,
374
+ clusterChart
375
+ };
376
+ }
377
+ }