@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
package/ARCHITECTURE.md CHANGED
@@ -1,463 +1,547 @@
1
- # MemWal SDK Architecture
2
-
3
- Detailed workflow diagrams and architecture documentation for MemWal (`@cmdoss/memwal`).
4
-
5
- ## Table of Contents
6
-
7
- - [Architecture Overview](#architecture-overview)
8
- - [Memory Creation Flow](#memory-creation-flow)
9
- - [Search Flow](#search-flow)
10
- - [Batch Upload (Quilt)](#batch-upload-quilt)
11
- - [HNSW Vector Indexing](#hnsw-vector-indexing)
12
- - [SEAL Encryption Flow](#seal-encryption-flow)
13
- - [API Namespaces](#api-namespaces)
14
-
15
- ---
16
-
17
- ## Architecture Overview
18
-
19
- ```text
20
- ┌─────────────────────────────────────────────────────────────────────────────┐
21
- │ MemWal SDK Architecture │
22
- └─────────────────────────────────────────────────────────────────────────────┘
23
-
24
- ┌─────────────────────────────────────────────────────────────────────────────┐
25
- │ SimplePDWClient │
26
- │ ┌─────────────────────────────────────────────────────────────────────────┐│
27
- │ │ Primary Namespaces ││
28
- │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ││
29
- │ │ │ memory │ │ search │ │ index │ │ ai │ │ graph │ ││
30
- │ │ │ │ │ │ │ │ │ │ │ │ ││
31
- │ │ │• create │ │• vector │ │• add │ │• embed │ │• extract │ ││
32
- │ │ │• createBatch│• hybrid │ │• search │ │• classify│ │• query │ ││
33
- │ │ │• get │ │• byCategory│ │• save │ │• shouldSave│ │ ││
34
- │ │ │• delete │ │• semantic│ │• load │ │ │ │ │ ││
35
- │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ ││
36
- │ └─────────────────────────────────────────────────────────────────────────┘│
37
- │ ┌─────────────────────────────────────────────────────────────────────────┐│
38
- │ │ Service Container ││
39
- │ │ embedding | memoryIndex | storage | tx | encryption | capability ││
40
- │ └─────────────────────────────────────────────────────────────────────────┘│
41
- └─────────────────────────────────────────────────────────────────────────────┘
42
-
43
- ┌───────────────┼───────────────┐
44
- │ │ │
45
- ▼ ▼ ▼
46
- ┌─────────────────────┐ ┌─────────────────┐ ┌─────────────────────┐
47
- │ Embedding API │ │ Sui Blockchain │ │ Walrus Storage │
48
- │ │ │ │ │ │
49
- │ • OpenRouter │ │ • Testnet │ │ • Publisher API │
50
- │ • Gemini │ │ • Mainnet │ │ • Aggregator API │
51
- │ • 3072 dimensions │ │ • Package ID │ │ • Quilt Batching │
52
- └─────────────────────┘ └─────────────────┘ └─────────────────────┘
53
-
54
- ┌───────────────┼───────────────┐
55
- │ │ │
56
- ▼ ▼ ▼
57
- ┌─────────────────────┐ ┌─────────────────┐ ┌─────────────────────┐
58
- │ HNSW Vector Index │ │ SEAL Encryption│ │ Knowledge Graph │
59
- │ │ │ │ │ │
60
- │ • hnswlib-node │ │ • Threshold IBE │ │ • Entity extraction │
61
- │ • hnswlib-wasm │ │ • 2-of-N decrypt│ │ • Relationships │
62
- │ • Auto-detect env │ │ • Mysten SEAL │ │ • Gemini-powered │
63
- └─────────────────────┘ └─────────────────┘ └─────────────────────┘
64
- ```
65
-
66
- ---
67
-
68
- ## Memory Creation Flow
69
-
70
- ```text
71
- ┌─────────────────────────────────────────────────────────────────────────────┐
72
- │ MemWal Memory Creation Workflow │
73
- └─────────────────────────────────────────────────────────────────────────────┘
74
-
75
- User Input: "I am working at CommandOSS as a software engineer"
76
-
77
-
78
- ┌─────────────────────────────────────────────────────────────────────────────┐
79
- │ STEP 1: AI Pre-check (Optional) │
80
- ├─────────────────────────────────────────────────────────────────────────────┤
81
- │ pdw.ai.shouldSave(content) → true/false │
82
- │ │
83
- │ • Analyzes content relevance │
84
- │ • Filters noise/spam │
85
- └─────────────────────────────────────────────────────────────────────────────┘
86
-
87
-
88
- ┌─────────────────────────────────────────────────────────────────────────────┐
89
- │ STEP 2: AI Classification │
90
- ├─────────────────────────────────────────────────────────────────────────────┤
91
- │ pdw.ai.classify(content) → { category, importance, topic, summary } │
92
- │ │
93
- │ Output: { category: "fact", importance: 8, topic: "employment" } │
94
- └─────────────────────────────────────────────────────────────────────────────┘
95
-
96
-
97
- ┌─────────────────────────────────────────────────────────────────────────────┐
98
- │ STEP 3: Embedding Generation │
99
- ├─────────────────────────────────────────────────────────────────────────────┤
100
- │ pdw.ai.embed(content) → Float32Array[3072] │
101
- │ │
102
- │ • OpenRouter or Gemini API │
103
- │ • 3072 dimensions (text-embedding-3-large) │
104
- │ • Normalized vector for cosine similarity │
105
- └─────────────────────────────────────────────────────────────────────────────┘
106
-
107
-
108
- ┌─────────────────────────────────────────────────────────────────────────────┐
109
- │ STEP 4: Walrus Upload │
110
- ├─────────────────────────────────────────────────────────────────────────────┤
111
- │ Memory Package uploaded to Walrus: │
112
- │ { │
113
- │ content: "I am working at CommandOSS...", │
114
- │ embedding: [0.0234, -0.0156, ...], // 3072 dims │
115
- │ metadata: { category, importance, topic }, │
116
- │ timestamp: 1701705600000, │
117
- │ identity: "0xb59f00b2454bef14d538b..." │
118
- │ } │
119
- │ │
120
- │ Output: blobId = "KEG_kj_5nx8wr3eJFZwIkJtjKvEGaUNMvTvhDYddaPU" │
121
- └─────────────────────────────────────────────────────────────────────────────┘
122
-
123
-
124
- ┌─────────────────────────────────────────────────────────────────────────────┐
125
- │ STEP 5: On-chain Registration (Sui Blockchain) │
126
- ├─────────────────────────────────────────────────────────────────────────────┤
127
- │ Transaction: memory::create_memory_record │
128
- │ │
129
- │ Parameters: │
130
- │ • blob_id: "KEG_kj_5nx8wr3eJFZwIkJtjKvEGaUNMvTvhDYddaPU" │
131
- │ • category: "fact" │
132
- │ • importance: 8 │
133
- │ • content_hash: keccak256(content) │
134
- │ │
135
- │ Output: MemoryRecord { id: "0x6bce7d4140b7e6572...", owner: "0xb59f..." } │
136
- └─────────────────────────────────────────────────────────────────────────────┘
137
-
138
-
139
- ┌─────────────────────────────────────────────────────────────────────────────┐
140
- │ STEP 6: Local HNSW Indexing │
141
- ├─────────────────────────────────────────────────────────────────────────────┤
142
- │ Auto-detected implementation: │
143
- │ • Node.js: hnswlib-node (native C++, fastest) │
144
- │ • Browser: hnswlib-wasm (WebAssembly fallback) │
145
- │ │
146
- │ Index entry (NO content stored for privacy): │
147
- │ { memoryId, blobId, category, importance, timestamp, vectorId } │
148
- │ │
149
- │ Persistence: │
150
- │ • Node.js: Filesystem (.pdw-indexes/) │
151
- │ • Browser: IndexedDB │
152
- │ • Cloud: Optional Walrus backup │
153
- └─────────────────────────────────────────────────────────────────────────────┘
154
- ```
155
-
156
- ### Usage
157
-
158
- ```typescript
159
- import { SimplePDWClient } from '@cmdoss/memwal';
160
-
161
- const pdw = new SimplePDWClient({
162
- signer: keypair,
163
- network: 'testnet',
164
- packageId: '0x...',
165
- embedding: { provider: 'openrouter', apiKey: '...' }
166
- });
167
-
168
- await pdw.ready();
169
-
170
- // Create single memory
171
- const memory = await pdw.memory.create('I work at CommandOSS', {
172
- category: 'fact',
173
- importance: 8
174
- });
175
-
176
- // Create batch (uses Quilt for ~90% gas savings)
177
- const memories = await pdw.memory.createBatch([
178
- 'Memory 1 content',
179
- 'Memory 2 content',
180
- 'Memory 3 content'
181
- ]);
182
- ```
183
-
184
- ---
185
-
186
- ## Search Flow
187
-
188
- ```text
189
- ┌─────────────────────────────────────────────────────────────────────────────┐
190
- │ MemWal Search Workflow │
191
- └─────────────────────────────────────────────────────────────────────────────┘
192
-
193
- Query: "What company do I work for?"
194
-
195
-
196
- ┌─────────────────────────────────────────────────────────────────────────────┐
197
- │ STEP 1: Query Embedding │
198
- ├─────────────────────────────────────────────────────────────────────────────┤
199
- │ pdw.ai.embed("What company do I work for?") │
200
- │ Output: Float32Array[3072] │
201
- └─────────────────────────────────────────────────────────────────────────────┘
202
-
203
-
204
- ┌─────────────────────────────────────────────────────────────────────────────┐
205
- │ STEP 2: HNSW Search (Local Index) │
206
- ├─────────────────────────────────────────────────────────────────────────────┤
207
- │ Algorithm: Hierarchical Navigable Small World │
208
- │ Complexity: O(log n) │
209
- │ │
210
- │ Returns top-k nearest neighbors by cosine similarity: │
211
- │ ┌────────┬────────────────────────────────────────────┬───────────┐ │
212
- │ │ Rank │ Memory ID │ Score │ │
213
- │ ├────────┼────────────────────────────────────────────┼───────────┤ │
214
- │ │ 1 │ 0x6bce7d4140b7e6572df79aa1c8b12abfb... │ 0.8542 │ │
215
- │ │ 2 │ 0xac333f3c2de375da1fbbee1bdada24ff... │ 0.7231 │ │
216
- │ │ 3 │ 0xbb7a63c4a7a62d2a0b083bc02ee96593... │ 0.6890 │ │
217
- │ └────────┴────────────────────────────────────────────┴───────────┘ │
218
- └─────────────────────────────────────────────────────────────────────────────┘
219
-
220
-
221
- ┌─────────────────────────────────────────────────────────────────────────────┐
222
- │ STEP 3: Content Retrieval (Walrus) │
223
- ├─────────────────────────────────────────────────────────────────────────────┤
224
- │ For each result, fetch content from Walrus: │
225
- │ │
226
- │ • Download MemoryPackage from blobId │
227
- │ • Decrypt if encrypted (SEAL) │
228
- │ • Cache locally for subsequent access │
229
- └─────────────────────────────────────────────────────────────────────────────┘
230
-
231
-
232
- ┌─────────────────────────────────────────────────────────────────────────────┐
233
- │ RESULT │
234
- ├─────────────────────────────────────────────────────────────────────────────┤
235
- │ [ │
236
- │ { │
237
- │ id: "0x6bce7d4140b7e6572df79aa1c8b12abfb...", │
238
- │ content: "I am working at CommandOSS as a software engineer", │
239
- │ score: 0.8542, │
240
- │ category: "fact", │
241
- │ importance: 8 │
242
- │ }, │
243
- │ ... │
244
- │ ] │
245
- └─────────────────────────────────────────────────────────────────────────────┘
246
- ```
247
-
248
- ### Search Methods
249
-
250
- ```typescript
251
- // Vector search (semantic)
252
- const results = await pdw.search.vector('work experience', { limit: 5 });
253
-
254
- // Filter by category
255
- const facts = await pdw.search.byCategory('fact', { limit: 10 });
256
-
257
- // Hybrid search (vector + category filter)
258
- const filtered = await pdw.search.hybrid('work', { category: 'fact' });
259
-
260
- // With content fetched
261
- const withContent = await pdw.search.withContent(results);
262
- ```
263
-
264
- ---
265
-
266
- ## Batch Upload (Quilt)
267
-
268
- Walrus Quilt enables batch uploads with ~90% gas savings.
269
-
270
- ```text
271
- ┌─────────────────────────────────────────────────────────────────────────────┐
272
- │ Quilt Batch Upload Flow │
273
- └─────────────────────────────────────────────────────────────────────────────┘
274
-
275
- Individual Upload: Quilt Batch Upload:
276
- ┌─────────────┐ ┌─────────────┐
277
- │ Memory 1 │──► Transaction 1 │ Memory 1 │
278
- └─────────────┘ │ Memory 2 │──► Single Transaction
279
- ┌─────────────┐ │ Memory 3 │ (Quilt)
280
- │ Memory 2 │──► Transaction 2 │ Memory 4 │
281
- └─────────────┘ │ Memory 5 │
282
- ┌─────────────┐ └─────────────┘
283
- │ Memory 3 │──► Transaction 3
284
- └─────────────┘ Gas: 1x base fee
285
- vs
286
- Gas: 3x base fee Individual: 5x base fee
287
- Savings: ~90%
288
-
289
- Quilt Structure:
290
- ┌─────────────────────────────────────────────────────────────────────────────┐
291
- │ quiltId: "abc123..." │
292
- │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
293
- │ │ quiltPatchId: 1 │ │ quiltPatchId: 2 │ │ quiltPatchId: 3 │ │
294
- │ │ identifier: m1 │ │ identifier: m2 │ │ identifier: m3 │ │
295
- │ │ tags: {...} │ │ tags: {...} │ │ tags: {...} │ │
296
- │ │ content: ... │ │ content: ... │ │ content: ... │ │
297
- │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
298
- └─────────────────────────────────────────────────────────────────────────────┘
299
- ```
300
-
301
- ### Usage
302
-
303
- ```typescript
304
- // Batch create memories (automatically uses Quilt)
305
- const results = await pdw.memory.createBatch([
306
- 'First memory content',
307
- 'Second memory content',
308
- 'Third memory content'
309
- ]);
310
-
311
- // Results include quilt information
312
- results.forEach(r => {
313
- console.log(`ID: ${r.id}, BlobId: ${r.blobId}`);
314
- });
315
- ```
316
-
317
- ---
318
-
319
- ## HNSW Vector Indexing
320
-
321
- The SDK auto-detects the environment and uses the optimal HNSW implementation.
322
-
323
- ```text
324
- ┌─────────────────────────────────────────────────────────────────────────────┐
325
- │ Environment-Aware HNSW Factory │
326
- └─────────────────────────────────────────────────────────────────────────────┘
327
-
328
- createHnswService()
329
-
330
- ┌─────────────┴─────────────┐
331
- │ │
332
- isBrowser()? isNode()?
333
- │ │
334
- ▼ ▼
335
- ┌─────────────────────────┐ ┌─────────────────────────┐
336
- │ BrowserHnswIndexService│ │ NodeHnswService │
337
- │ (hnswlib-wasm) │ │ (hnswlib-node) │
338
- │ │ │ │
339
- │ • WebAssembly │ │ • Native C++ bindings │
340
- │ • IndexedDB persistence│ │ • Filesystem persistence│
341
- │ • ~50% slower than node│ │ • Fastest performance │
342
- │ • Universal fallback │ │ • Requires build tools │
343
- └─────────────────────────┘ └─────────────────────────┘
344
-
345
- Singleton Pattern:
346
- ┌─────────────────────────────────────────────────────────────────────────────┐
347
- │ First call: Creates new instance and initializes │
348
- │ Subsequent calls: Returns existing singleton │
349
- │ │
350
- │ Benefits: │
351
- │ • Prevents redundant index loading │
352
- │ • Shared index across all SDK clients │
353
- │ • Automatic environment detection │
354
- └─────────────────────────────────────────────────────────────────────────────┘
355
- ```
356
-
357
- ### Index Configuration
358
-
359
- ```typescript
360
- // Default configuration
361
- const indexConfig = {
362
- dimension: 3072, // Embedding dimensions
363
- maxElements: 10000, // Maximum vectors
364
- efConstruction: 200, // Build-time quality
365
- m: 16, // Connections per layer
366
- spaceType: 'cosine' // Distance metric
367
- };
368
-
369
- // Access via namespace
370
- const stats = await pdw.index.getStats();
371
- // { currentCount: 150, dimension: 3072, maxElements: 10000 }
372
-
373
- // Manual save/load
374
- await pdw.index.save(); // Save to Walrus for backup
375
- await pdw.index.load(); // Load from Walrus backup
376
- ```
377
-
378
- ---
379
-
380
- ## SEAL Encryption Flow
381
-
382
- ```text
383
- ┌─────────────────────────────────────────────────────────────────────────────┐
384
- │ SEAL Encryption Workflow │
385
- └─────────────────────────────────────────────────────────────────────────────┘
386
-
387
- ENCRYPTION
388
-
389
-
390
- ┌─────────────────────────────────────────────────────────────────────────────┐
391
- │ STEP 1: Create MemoryCap (On-chain) │
392
- ├─────────────────────────────────────────────────────────────────────────────┤
393
- │ Creates on-chain capability object for key derivation │
394
- │ │
395
- │ MemoryCap { │
396
- │ id: "0x05ac7bdc83308ea2cea429afc9fd6bbc91838b...", │
397
- │ owner: "0xb59f00b2454bef14d538b...", │
398
- │ nonce: [random 32 bytes] ← Used for key derivation │
399
- │ } │
400
- └─────────────────────────────────────────────────────────────────────────────┘
401
-
402
-
403
- ┌─────────────────────────────────────────────────────────────────────────────┐
404
- │ STEP 2: SEAL Encrypt │
405
- ├─────────────────────────────────────────────────────────────────────────────┤
406
- │ • Identity-Based Encryption (IBE) │
407
- │ • Threshold: 2 of N key servers must agree │
408
- │ • Key servers: Mysten Labs operated │
409
- │ │
410
- │ Output: { encryptedObject, keyId, nonce } │
411
- └─────────────────────────────────────────────────────────────────────────────┘
412
-
413
-
414
- Upload to Walrus
415
-
416
- DECRYPTION
417
-
418
-
419
- ┌─────────────────────────────────────────────────────────────────────────────┐
420
- │ STEP 3: Request Decryption Key │
421
- ├─────────────────────────────────────────────────────────────────────────────┤
422
- │ 1. Build seal_approve transaction with MemoryCap │
423
- │ 2. Key servers verify: │
424
- │ • Caller owns the MemoryCap │
425
- │ • key_id matches MemoryCap's derived key │
426
- │ 3. If verified, key servers release decryption shares │
427
- │ 4. Combine shares (threshold) to decrypt │
428
- │ │
429
- │ Output: Decrypted content │
430
- └─────────────────────────────────────────────────────────────────────────────┘
431
- ```
432
-
433
- ---
434
-
435
- ## API Namespaces
436
-
437
- ### Primary Namespaces
438
-
439
- | Namespace | Methods | Description |
440
- |-----------|---------|-------------|
441
- | `pdw.memory` | create, createBatch, get, delete, list | Memory CRUD operations |
442
- | `pdw.search` | vector, hybrid, byCategory, semantic | Search operations |
443
- | `pdw.index` | add, search, save, load, getStats | HNSW index management |
444
- | `pdw.ai` | embed, classify, shouldSave | AI/embedding operations |
445
- | `pdw.graph` | extract, query | Knowledge graph |
446
-
447
- ### Supporting Namespaces
448
-
449
- | Namespace | Methods | Description |
450
- |-----------|---------|-------------|
451
- | `pdw.encryption` | encrypt, decrypt | SEAL encryption |
452
- | `pdw.capability` | create, verify | Capability management |
453
- | `pdw.storage` | upload, download | Walrus storage |
454
- | `pdw.wallet` | getAddress, getBalance | Wallet operations |
455
- | `pdw.tx` | build, execute | Transaction building |
456
-
457
- ---
458
-
459
- ## Related Documentation
460
-
461
- - [README.md](./README.md) - Quick start guide
462
- - [BENCHMARKS.md](./BENCHMARKS.md) - Performance metrics
463
- - [CHANGELOG.md](./CHANGELOG.md) - Version history
1
+ # MemWal SDK Architecture
2
+
3
+ Detailed workflow diagrams and architecture documentation for MemWal (`@cmdoss/memwal-sdk`).
4
+
5
+ ## Table of Contents
6
+
7
+ - [Architecture Overview](#architecture-overview)
8
+ - [Memory Creation Flow](#memory-creation-flow)
9
+ - [Search Flow](#search-flow)
10
+ - [Batch Upload (Quilt)](#batch-upload-quilt)
11
+ - [HNSW Vector Indexing](#hnsw-vector-indexing)
12
+ - [SEAL Encryption Flow](#seal-encryption-flow)
13
+ - [API Namespaces](#api-namespaces)
14
+
15
+ ---
16
+
17
+ ## Architecture Overview
18
+
19
+ ```text
20
+ ┌─────────────────────────────────────────────────────────────────────────────┐
21
+ │ MemWal SDK Architecture │
22
+ └─────────────────────────────────────────────────────────────────────────────┘
23
+
24
+ ┌─────────────────────────────────────────────────────────────────────────────┐
25
+ │ SimplePDWClient │
26
+ │ ┌─────────────────────────────────────────────────────────────────────────┐│
27
+ │ │ Primary Namespaces ││
28
+ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ││
29
+ │ │ │ memory │ │ search │ │ index │ │ ai │ │ graph │ ││
30
+ │ │ │ │ │ │ │ │ │ │ │ │ ││
31
+ │ │ │• create │ │• vector │ │• add │ │• embed │ │• extract │ ││
32
+ │ │ │• createBatch│• hybrid │ │• search │ │• classify│ │• query │ ││
33
+ │ │ │• get │ │• byCategory│ │• save │ │• shouldSave│ │ ││
34
+ │ │ │• delete │ │• semantic│ │• load │ │ │ │ │ ││
35
+ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ ││
36
+ │ └─────────────────────────────────────────────────────────────────────────┘│
37
+ │ ┌─────────────────────────────────────────────────────────────────────────┐│
38
+ │ │ Service Container ││
39
+ │ │ embedding | memoryIndex | storage | tx | encryption | capability ││
40
+ │ └─────────────────────────────────────────────────────────────────────────┘│
41
+ └─────────────────────────────────────────────────────────────────────────────┘
42
+
43
+ ┌───────────────┼───────────────┐
44
+ │ │ │
45
+ ▼ ▼ ▼
46
+ ┌─────────────────────┐ ┌─────────────────┐ ┌─────────────────────┐
47
+ │ Embedding API │ │ Sui Blockchain │ │ Walrus Storage │
48
+ │ │ │ │ │ │
49
+ │ • OpenRouter │ │ • Testnet │ │ • Publisher API │
50
+ │ • Gemini │ │ • Mainnet │ │ • Aggregator API │
51
+ │ • 3072 dimensions │ │ • Package ID │ │ • Quilt Batching │
52
+ └─────────────────────┘ └─────────────────┘ └─────────────────────┘
53
+
54
+ ┌───────────────┼───────────────┐
55
+ │ │ │
56
+ ▼ ▼ ▼
57
+ ┌─────────────────────┐ ┌─────────────────┐ ┌─────────────────────┐
58
+ │ HNSW Vector Index │ │ SEAL Encryption│ │ Knowledge Graph │
59
+ │ │ │ │ │ │
60
+ │ • hnswlib-node │ │ • Threshold IBE │ │ • Entity extraction │
61
+ │ • hnswlib-wasm │ │ • 2-of-N decrypt│ │ • Relationships │
62
+ │ • Auto-detect env │ │ • Mysten SEAL │ │ • Gemini-powered │
63
+ └─────────────────────┘ └─────────────────┘ └─────────────────────┘
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Memory Creation Flow
69
+
70
+ ```text
71
+ ┌─────────────────────────────────────────────────────────────────────────────┐
72
+ │ MemWal Memory Creation Workflow │
73
+ └─────────────────────────────────────────────────────────────────────────────┘
74
+
75
+ User Input: "I am working at CommandOSS as a software engineer"
76
+
77
+
78
+ ┌─────────────────────────────────────────────────────────────────────────────┐
79
+ │ STEP 1: AI Pre-check (Optional) │
80
+ ├─────────────────────────────────────────────────────────────────────────────┤
81
+ │ pdw.ai.shouldSave(content) → true/false │
82
+ │ │
83
+ │ • Analyzes content relevance │
84
+ │ • Filters noise/spam │
85
+ └─────────────────────────────────────────────────────────────────────────────┘
86
+
87
+
88
+ ┌─────────────────────────────────────────────────────────────────────────────┐
89
+ │ STEP 2: AI Classification │
90
+ ├─────────────────────────────────────────────────────────────────────────────┤
91
+ │ pdw.ai.classify(content) → { category, importance, topic, summary } │
92
+ │ │
93
+ │ Output: { category: "fact", importance: 8, topic: "employment" } │
94
+ └─────────────────────────────────────────────────────────────────────────────┘
95
+
96
+
97
+ ┌─────────────────────────────────────────────────────────────────────────────┐
98
+ │ STEP 3: Embedding Generation │
99
+ ├─────────────────────────────────────────────────────────────────────────────┤
100
+ │ pdw.ai.embed(content) → Float32Array[3072] │
101
+ │ │
102
+ │ • OpenRouter or Gemini API │
103
+ │ • 3072 dimensions (text-embedding-3-large) │
104
+ │ • Normalized vector for cosine similarity │
105
+ └─────────────────────────────────────────────────────────────────────────────┘
106
+
107
+
108
+ ┌─────────────────────────────────────────────────────────────────────────────┐
109
+ │ STEP 4: Walrus Upload │
110
+ ├─────────────────────────────────────────────────────────────────────────────┤
111
+ │ Memory Package uploaded to Walrus: │
112
+ │ { │
113
+ │ content: "I am working at CommandOSS...", │
114
+ │ embedding: [0.0234, -0.0156, ...], // 3072 dims │
115
+ │ metadata: { category, importance, topic }, │
116
+ │ timestamp: 1701705600000, │
117
+ │ identity: "0xb59f00b2454bef14d538b..." │
118
+ │ } │
119
+ │ │
120
+ │ Output: blobId = "KEG_kj_5nx8wr3eJFZwIkJtjKvEGaUNMvTvhDYddaPU" │
121
+ └─────────────────────────────────────────────────────────────────────────────┘
122
+
123
+
124
+ ┌─────────────────────────────────────────────────────────────────────────────┐
125
+ │ STEP 5: On-chain Registration (Sui Blockchain) │
126
+ ├─────────────────────────────────────────────────────────────────────────────┤
127
+ │ Transaction: memory::create_memory_record │
128
+ │ │
129
+ │ Parameters: │
130
+ │ • blob_id: "KEG_kj_5nx8wr3eJFZwIkJtjKvEGaUNMvTvhDYddaPU" │
131
+ │ • category: "fact" │
132
+ │ • importance: 8 │
133
+ │ • content_hash: keccak256(content) │
134
+ │ │
135
+ │ Output: MemoryRecord { id: "0x6bce7d4140b7e6572...", owner: "0xb59f..." } │
136
+ └─────────────────────────────────────────────────────────────────────────────┘
137
+
138
+
139
+ ┌─────────────────────────────────────────────────────────────────────────────┐
140
+ │ STEP 6: Local HNSW Indexing │
141
+ ├─────────────────────────────────────────────────────────────────────────────┤
142
+ │ Auto-detected implementation: │
143
+ │ • Node.js: hnswlib-node (native C++, fastest) │
144
+ │ • Browser: hnswlib-wasm (WebAssembly fallback) │
145
+ │ │
146
+ │ Index entry (NO content stored for privacy): │
147
+ │ { memoryId, blobId, category, importance, timestamp, vectorId } │
148
+ │ │
149
+ │ Persistence: │
150
+ │ • Node.js: Filesystem (.pdw-indexes/) │
151
+ │ • Browser: IndexedDB │
152
+ │ • Cloud: Optional Walrus backup │
153
+ └─────────────────────────────────────────────────────────────────────────────┘
154
+ ```
155
+
156
+ ### Usage
157
+
158
+ ```typescript
159
+ import { SimplePDWClient } from '@cmdoss/memwal-sdk';
160
+
161
+ const pdw = new SimplePDWClient({
162
+ signer: keypair,
163
+ network: 'testnet',
164
+ packageId: '0x...',
165
+ embedding: { provider: 'openrouter', apiKey: '...' }
166
+ });
167
+
168
+ await pdw.ready();
169
+
170
+ // Create single memory
171
+ const memory = await pdw.memory.create('I work at CommandOSS', {
172
+ category: 'fact',
173
+ importance: 8
174
+ });
175
+
176
+ // Create batch (uses Quilt for ~90% gas savings)
177
+ const memories = await pdw.memory.createBatch([
178
+ 'Memory 1 content',
179
+ 'Memory 2 content',
180
+ 'Memory 3 content'
181
+ ]);
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Search Flow
187
+
188
+ ```text
189
+ ┌─────────────────────────────────────────────────────────────────────────────┐
190
+ │ MemWal Search Workflow │
191
+ └─────────────────────────────────────────────────────────────────────────────┘
192
+
193
+ Query: "What company do I work for?"
194
+
195
+
196
+ ┌─────────────────────────────────────────────────────────────────────────────┐
197
+ │ STEP 1: Query Embedding │
198
+ ├─────────────────────────────────────────────────────────────────────────────┤
199
+ │ pdw.ai.embed("What company do I work for?") │
200
+ │ Output: Float32Array[3072] │
201
+ └─────────────────────────────────────────────────────────────────────────────┘
202
+
203
+
204
+ ┌─────────────────────────────────────────────────────────────────────────────┐
205
+ │ STEP 2: HNSW Search (Local Index) │
206
+ ├─────────────────────────────────────────────────────────────────────────────┤
207
+ │ Algorithm: Hierarchical Navigable Small World │
208
+ │ Complexity: O(log n) │
209
+ │ │
210
+ │ Returns top-k nearest neighbors by cosine similarity: │
211
+ │ ┌────────┬────────────────────────────────────────────┬───────────┐ │
212
+ │ │ Rank │ Memory ID │ Score │ │
213
+ │ ├────────┼────────────────────────────────────────────┼───────────┤ │
214
+ │ │ 1 │ 0x6bce7d4140b7e6572df79aa1c8b12abfb... │ 0.8542 │ │
215
+ │ │ 2 │ 0xac333f3c2de375da1fbbee1bdada24ff... │ 0.7231 │ │
216
+ │ │ 3 │ 0xbb7a63c4a7a62d2a0b083bc02ee96593... │ 0.6890 │ │
217
+ │ └────────┴────────────────────────────────────────────┴───────────┘ │
218
+ └─────────────────────────────────────────────────────────────────────────────┘
219
+
220
+
221
+ ┌─────────────────────────────────────────────────────────────────────────────┐
222
+ │ STEP 3: Content Retrieval (Walrus) │
223
+ ├─────────────────────────────────────────────────────────────────────────────┤
224
+ │ For each result, fetch content from Walrus: │
225
+ │ │
226
+ │ • Download MemoryPackage from blobId │
227
+ │ • Decrypt if encrypted (SEAL) │
228
+ │ • Cache locally for subsequent access │
229
+ └─────────────────────────────────────────────────────────────────────────────┘
230
+
231
+
232
+ ┌─────────────────────────────────────────────────────────────────────────────┐
233
+ │ RESULT │
234
+ ├─────────────────────────────────────────────────────────────────────────────┤
235
+ │ [ │
236
+ │ { │
237
+ │ id: "0x6bce7d4140b7e6572df79aa1c8b12abfb...", │
238
+ │ content: "I am working at CommandOSS as a software engineer", │
239
+ │ score: 0.8542, │
240
+ │ category: "fact", │
241
+ │ importance: 8 │
242
+ │ }, │
243
+ │ ... │
244
+ │ ] │
245
+ └─────────────────────────────────────────────────────────────────────────────┘
246
+ ```
247
+
248
+ ### Search Methods
249
+
250
+ ```typescript
251
+ // Vector search (semantic)
252
+ const results = await pdw.search.vector('work experience', { limit: 5 });
253
+
254
+ // Filter by category
255
+ const facts = await pdw.search.byCategory('fact', { limit: 10 });
256
+
257
+ // Hybrid search (vector + category filter)
258
+ const filtered = await pdw.search.hybrid('work', { category: 'fact' });
259
+
260
+ // With content fetched
261
+ const withContent = await pdw.search.withContent(results);
262
+ ```
263
+
264
+ ---
265
+
266
+ ## Batch Upload (Quilt)
267
+
268
+ Walrus Quilt enables batch uploads with ~90% gas savings.
269
+
270
+ ```text
271
+ ┌─────────────────────────────────────────────────────────────────────────────┐
272
+ │ Quilt Batch Upload Flow │
273
+ └─────────────────────────────────────────────────────────────────────────────┘
274
+
275
+ Individual Upload: Quilt Batch Upload:
276
+ ┌─────────────┐ ┌─────────────┐
277
+ │ Memory 1 │──► Transaction 1 │ Memory 1 │
278
+ └─────────────┘ │ Memory 2 │──► Single Transaction
279
+ ┌─────────────┐ │ Memory 3 │ (Quilt)
280
+ │ Memory 2 │──► Transaction 2 │ Memory 4 │
281
+ └─────────────┘ │ Memory 5 │
282
+ ┌─────────────┐ └─────────────┘
283
+ │ Memory 3 │──► Transaction 3
284
+ └─────────────┘ Gas: 1x base fee
285
+ vs
286
+ Gas: 3x base fee Individual: 5x base fee
287
+ Savings: ~90%
288
+
289
+ Quilt Structure:
290
+ ┌─────────────────────────────────────────────────────────────────────────────┐
291
+ │ quiltId: "abc123..." │
292
+ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
293
+ │ │ quiltPatchId: 1 │ │ quiltPatchId: 2 │ │ quiltPatchId: 3 │ │
294
+ │ │ identifier: m1 │ │ identifier: m2 │ │ identifier: m3 │ │
295
+ │ │ tags: {...} │ │ tags: {...} │ │ tags: {...} │ │
296
+ │ │ content: ... │ │ content: ... │ │ content: ... │ │
297
+ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
298
+ └─────────────────────────────────────────────────────────────────────────────┘
299
+ ```
300
+
301
+ ### Usage
302
+
303
+ ```typescript
304
+ // Batch create memories (automatically uses Quilt)
305
+ const results = await pdw.memory.createBatch([
306
+ 'First memory content',
307
+ 'Second memory content',
308
+ 'Third memory content'
309
+ ]);
310
+
311
+ // Results include quilt information
312
+ results.forEach(r => {
313
+ console.log(`ID: ${r.id}, BlobId: ${r.blobId}`);
314
+ });
315
+ ```
316
+
317
+ ---
318
+
319
+ ## HNSW Vector Indexing
320
+
321
+ The SDK auto-detects the environment and uses the optimal HNSW implementation.
322
+
323
+ ```text
324
+ ┌─────────────────────────────────────────────────────────────────────────────┐
325
+ │ Environment-Aware HNSW Factory │
326
+ └─────────────────────────────────────────────────────────────────────────────┘
327
+
328
+ createHnswService()
329
+
330
+ ┌─────────────┴─────────────┐
331
+ │ │
332
+ isBrowser()? isNode()?
333
+ │ │
334
+ ▼ ▼
335
+ ┌─────────────────────────┐ ┌─────────────────────────┐
336
+ │ BrowserHnswIndexService│ │ NodeHnswService │
337
+ │ (hnswlib-wasm) │ │ (hnswlib-node) │
338
+ │ │ │ │
339
+ │ • WebAssembly │ │ • Native C++ bindings │
340
+ │ • IndexedDB persistence│ │ • Filesystem persistence│
341
+ │ • ~50% slower than node│ │ • Fastest performance │
342
+ │ • Universal fallback │ │ • Requires build tools │
343
+ └─────────────────────────┘ └─────────────────────────┘
344
+
345
+ Singleton Pattern:
346
+ ┌─────────────────────────────────────────────────────────────────────────────┐
347
+ │ First call: Creates new instance and initializes │
348
+ │ Subsequent calls: Returns existing singleton │
349
+ │ │
350
+ │ Benefits: │
351
+ │ • Prevents redundant index loading │
352
+ │ • Shared index across all SDK clients │
353
+ │ • Automatic environment detection │
354
+ └─────────────────────────────────────────────────────────────────────────────┘
355
+ ```
356
+
357
+ ### Index Configuration
358
+
359
+ ```typescript
360
+ // Default configuration
361
+ const indexConfig = {
362
+ dimension: 3072, // Embedding dimensions
363
+ maxElements: 10000, // Maximum vectors
364
+ efConstruction: 200, // Build-time quality
365
+ m: 16, // Connections per layer
366
+ spaceType: 'cosine' // Distance metric
367
+ };
368
+
369
+ // Access via namespace
370
+ const stats = await pdw.index.getStats();
371
+ // { currentCount: 150, dimension: 3072, maxElements: 10000 }
372
+
373
+ // Manual save/load
374
+ await pdw.index.save(); // Save to Walrus for backup
375
+ await pdw.index.load(); // Load from Walrus backup
376
+ ```
377
+
378
+ ---
379
+
380
+ ## SEAL Encryption Flow
381
+
382
+ ```text
383
+ ┌─────────────────────────────────────────────────────────────────────────────┐
384
+ │ SEAL Encryption Workflow │
385
+ └─────────────────────────────────────────────────────────────────────────────┘
386
+
387
+ ENCRYPTION
388
+
389
+
390
+ ┌─────────────────────────────────────────────────────────────────────────────┐
391
+ │ STEP 1: Create MemoryCap (On-chain) │
392
+ ├─────────────────────────────────────────────────────────────────────────────┤
393
+ │ Creates on-chain capability object for key derivation │
394
+ │ │
395
+ │ MemoryCap { │
396
+ │ id: "0x05ac7bdc83308ea2cea429afc9fd6bbc91838b...", │
397
+ │ owner: "0xb59f00b2454bef14d538b...", │
398
+ │ nonce: [random 32 bytes] ← Used for key derivation │
399
+ │ } │
400
+ └─────────────────────────────────────────────────────────────────────────────┘
401
+
402
+
403
+ ┌─────────────────────────────────────────────────────────────────────────────┐
404
+ │ STEP 2: SEAL Encrypt │
405
+ ├─────────────────────────────────────────────────────────────────────────────┤
406
+ │ • Identity-Based Encryption (IBE) │
407
+ │ • Threshold: 2 of N key servers must agree │
408
+ │ • Key servers: Mysten Labs operated │
409
+ │ │
410
+ │ Output: { encryptedObject, keyId, nonce } │
411
+ └─────────────────────────────────────────────────────────────────────────────┘
412
+
413
+
414
+ Upload to Walrus
415
+
416
+ DECRYPTION
417
+
418
+
419
+ ┌─────────────────────────────────────────────────────────────────────────────┐
420
+ │ STEP 3: Request Decryption Key │
421
+ ├─────────────────────────────────────────────────────────────────────────────┤
422
+ │ 1. Build seal_approve transaction with MemoryCap │
423
+ │ 2. Key servers verify: │
424
+ │ • Caller owns the MemoryCap │
425
+ │ • key_id matches MemoryCap's derived key │
426
+ │ 3. If verified, key servers release decryption shares │
427
+ │ 4. Combine shares (threshold) to decrypt │
428
+ │ │
429
+ │ Output: Decrypted content │
430
+ └─────────────────────────────────────────────────────────────────────────────┘
431
+ ```
432
+
433
+ ---
434
+
435
+ ## API Namespaces
436
+
437
+ ### Primary Namespaces
438
+
439
+ | Namespace | Methods | Description |
440
+ |-----------|---------|-------------|
441
+ | `pdw.memory` | create, createBatch, get, delete, list | Memory CRUD operations |
442
+ | `pdw.search` | vector, hybrid, byCategory, semantic | Search operations |
443
+ | `pdw.index` | add, search, save, load, getStats | HNSW index management |
444
+ | `pdw.ai` | embed, classify, shouldSave | AI/embedding operations |
445
+ | `pdw.graph` | extract, query | Knowledge graph |
446
+
447
+ ### Supporting Namespaces
448
+
449
+ | Namespace | Methods | Description |
450
+ |-----------|---------|-------------|
451
+ | `pdw.encryption` | encrypt, decrypt | SEAL encryption |
452
+ | `pdw.capability` | create, verify | Capability management |
453
+ | `pdw.storage` | upload, download | Walrus storage |
454
+ | `pdw.wallet` | getAddress, getBalance | Wallet operations |
455
+ | `pdw.tx` | build, execute | Transaction building |
456
+
457
+ ---
458
+
459
+ ## Signer Architecture
460
+
461
+ The SDK supports multiple signing methods through the `UnifiedSigner` interface.
462
+
463
+ ```text
464
+ ┌─────────────────────────────────────────────────────────────────────────────┐
465
+ │ Signer Architecture │
466
+ └─────────────────────────────────────────────────────────────────────────────┘
467
+
468
+ UnifiedSigner (Interface)
469
+
470
+ ┌───────────────┼───────────────┐
471
+ │ │ │
472
+ ▼ ▼ ▼
473
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────┐
474
+ │ KeypairSigner │ │ WalletAdapter │ │ DappKitSigner │
475
+ │ │ │ Signer │ │ │
476
+ │ • Node.js │ │ • Deprecated │ │ • Browser (React) │
477
+ │ • Ed25519Keypair│ │ • Legacy wallet │ │ • @mysten/dapp-kit │
478
+ │ • CLI/Scripts │ │ standard │ │ • Slush, Sui Wallet │
479
+ │ • Testing │ │ │ │ • Popup signing │
480
+ └─────────────────┘ └─────────────────┘ └─────────────────────┘
481
+
482
+ UnifiedSigner Interface:
483
+ ┌─────────────────────────────────────────────────────────────────────────────┐
484
+ │ interface UnifiedSigner { │
485
+ │ getAddress(): string; │
486
+ │ getSigner(): Keypair | WalletAdapter | undefined; │
487
+ │ getClient(): SuiClient | null; // New in v0.6.1 │
488
+ │ signPersonalMessage(params): Promise<SignPersonalMessageResult>; │
489
+ │ signAndExecuteTransaction(params): Promise<SignAndExecuteResult>; │
490
+ │ } │
491
+ └─────────────────────────────────────────────────────────────────────────────┘
492
+ ```
493
+
494
+ ### Usage Examples
495
+
496
+ **Node.js with Keypair:**
497
+ ```typescript
498
+ import { SimplePDWClient } from '@cmdoss/memwal-sdk';
499
+ import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
500
+
501
+ const keypair = Ed25519Keypair.fromSecretKey(secretKey);
502
+ const pdw = new SimplePDWClient({
503
+ signer: keypair,
504
+ network: 'testnet',
505
+ // ...
506
+ });
507
+ ```
508
+
509
+ **Browser with DappKitSigner:**
510
+ ```typescript
511
+ import { DappKitSigner, SimplePDWClient } from '@cmdoss/memwal-sdk/browser';
512
+ import { useSignAndExecuteTransaction, useSuiClient } from '@mysten/dapp-kit';
513
+
514
+ const signer = new DappKitSigner({
515
+ address: account.address,
516
+ client: suiClient,
517
+ signAndExecuteTransaction: async ({ transaction }) => {
518
+ const result = await signAndExecute({ transaction });
519
+ return { digest: result.digest, effects: result.effects };
520
+ },
521
+ });
522
+
523
+ const pdw = new SimplePDWClient({
524
+ signer,
525
+ network: 'testnet',
526
+ userAddress: account.address,
527
+ features: { enableLocalIndexing: false }, // For browser
528
+ });
529
+
530
+ // All SDK operations now trigger wallet popup for signing
531
+ await pdw.memory.create('Hello'); // → Wallet popup appears
532
+ ```
533
+
534
+ ### Entry Points
535
+
536
+ | Entry Point | Use Case | Node.js Deps |
537
+ |-------------|----------|--------------|
538
+ | `@cmdoss/memwal-sdk` | Node.js applications | Yes (hnswlib-node) |
539
+ | `@cmdoss/memwal-sdk/browser` | Browser applications | No |
540
+
541
+ ---
542
+
543
+ ## Related Documentation
544
+
545
+ - [README.md](./README.md) - Quick start guide
546
+ - [BENCHMARKS.md](./BENCHMARKS.md) - Performance metrics
547
+ - [CHANGELOG.md](./CHANGELOG.md) - Version history