memento-mcp-server 1.6.0 → 1.7.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 (560) hide show
  1. package/INSTALL.en.md +303 -303
  2. package/INSTALL.md +303 -303
  3. package/README.en.md +331 -330
  4. package/README.md +432 -432
  5. package/dist/algorithms/hybrid-search-engine.d.ts +114 -44
  6. package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -1
  7. package/dist/algorithms/hybrid-search-engine.js +261 -235
  8. package/dist/algorithms/hybrid-search-engine.js.map +1 -1
  9. package/dist/algorithms/search-engine.d.ts +2 -14
  10. package/dist/algorithms/search-engine.d.ts.map +1 -1
  11. package/dist/algorithms/search-engine.js +43 -35
  12. package/dist/algorithms/search-engine.js.map +1 -1
  13. package/dist/algorithms/vector-search-engine-migration.d.ts +67 -0
  14. package/dist/algorithms/vector-search-engine-migration.d.ts.map +1 -0
  15. package/dist/algorithms/vector-search-engine-migration.js +196 -0
  16. package/dist/algorithms/vector-search-engine-migration.js.map +1 -0
  17. package/dist/algorithms/vector-search-engine-refactored.d.ts +56 -0
  18. package/dist/algorithms/vector-search-engine-refactored.d.ts.map +1 -0
  19. package/dist/algorithms/vector-search-engine-refactored.js +101 -0
  20. package/dist/algorithms/vector-search-engine-refactored.js.map +1 -0
  21. package/dist/algorithms/vector-search-engine.d.ts +9 -2
  22. package/dist/algorithms/vector-search-engine.d.ts.map +1 -1
  23. package/dist/algorithms/vector-search-engine.js +245 -121
  24. package/dist/algorithms/vector-search-engine.js.map +1 -1
  25. package/dist/client/index.d.ts.map +1 -1
  26. package/dist/client/index.js +34 -11
  27. package/dist/client/index.js.map +1 -1
  28. package/dist/config/environment.d.ts +26 -0
  29. package/dist/config/environment.d.ts.map +1 -0
  30. package/dist/config/environment.js +103 -0
  31. package/dist/config/environment.js.map +1 -0
  32. package/dist/config/index.d.ts.map +1 -1
  33. package/dist/config/index.js +29 -50
  34. package/dist/config/index.js.map +1 -1
  35. package/dist/config/vector-search.config.d.ts +25 -0
  36. package/dist/config/vector-search.config.d.ts.map +1 -0
  37. package/dist/config/vector-search.config.js +40 -0
  38. package/dist/config/vector-search.config.js.map +1 -0
  39. package/dist/database/init.d.ts.map +1 -1
  40. package/dist/database/init.js +154 -17
  41. package/dist/database/init.js.map +1 -1
  42. package/dist/database/migrate.d.ts +2 -1
  43. package/dist/database/migrate.d.ts.map +1 -1
  44. package/dist/database/migrate.js +191 -18
  45. package/dist/database/migrate.js.map +1 -1
  46. package/dist/database/schema.sql +234 -159
  47. package/dist/factories/hybrid-search.factory.d.ts +20 -0
  48. package/dist/factories/hybrid-search.factory.d.ts.map +1 -0
  49. package/dist/factories/hybrid-search.factory.js +57 -0
  50. package/dist/factories/hybrid-search.factory.js.map +1 -0
  51. package/dist/factories/spaced-repetition.factory.d.ts +48 -0
  52. package/dist/factories/spaced-repetition.factory.d.ts.map +1 -0
  53. package/dist/factories/spaced-repetition.factory.js +187 -0
  54. package/dist/factories/spaced-repetition.factory.js.map +1 -0
  55. package/dist/factories/vector-search.factory.d.ts +25 -0
  56. package/dist/factories/vector-search.factory.d.ts.map +1 -0
  57. package/dist/factories/vector-search.factory.js +47 -0
  58. package/dist/factories/vector-search.factory.js.map +1 -0
  59. package/dist/interfaces/database.interface.d.ts +36 -0
  60. package/dist/interfaces/database.interface.d.ts.map +1 -0
  61. package/dist/interfaces/database.interface.js +6 -0
  62. package/dist/interfaces/database.interface.js.map +1 -0
  63. package/dist/interfaces/spaced-repetition.interface.d.ts +63 -0
  64. package/dist/interfaces/spaced-repetition.interface.d.ts.map +1 -0
  65. package/dist/interfaces/spaced-repetition.interface.js +6 -0
  66. package/dist/interfaces/spaced-repetition.interface.js.map +1 -0
  67. package/dist/repositories/vector-performance.repository.d.ts +25 -0
  68. package/dist/repositories/vector-performance.repository.d.ts.map +1 -0
  69. package/dist/repositories/vector-performance.repository.js +134 -0
  70. package/dist/repositories/vector-performance.repository.js.map +1 -0
  71. package/dist/repositories/vector-search.repository.d.ts +43 -0
  72. package/dist/repositories/vector-search.repository.d.ts.map +1 -0
  73. package/dist/repositories/vector-search.repository.js +377 -0
  74. package/dist/repositories/vector-search.repository.js.map +1 -0
  75. package/dist/server/http-server.d.ts.map +1 -1
  76. package/dist/server/http-server.js +25 -24
  77. package/dist/server/http-server.js.map +1 -1
  78. package/dist/server/index.d.ts +1 -0
  79. package/dist/server/index.d.ts.map +1 -1
  80. package/dist/server/index.js +7 -7
  81. package/dist/server/index.js.map +1 -1
  82. package/dist/services/alert-notification-service.d.ts +16 -0
  83. package/dist/services/alert-notification-service.d.ts.map +1 -0
  84. package/dist/services/alert-notification-service.js +44 -0
  85. package/dist/services/alert-notification-service.js.map +1 -0
  86. package/dist/services/async-optimizer.d.ts +62 -8
  87. package/dist/services/async-optimizer.d.ts.map +1 -1
  88. package/dist/services/async-optimizer.js +137 -8
  89. package/dist/services/async-optimizer.js.map +1 -1
  90. package/dist/services/batch-scheduler.d.ts +6 -0
  91. package/dist/services/batch-scheduler.d.ts.map +1 -1
  92. package/dist/services/batch-scheduler.js +59 -19
  93. package/dist/services/batch-scheduler.js.map +1 -1
  94. package/dist/services/cache-service.d.ts +32 -0
  95. package/dist/services/cache-service.d.ts.map +1 -1
  96. package/dist/services/cache-service.js +81 -6
  97. package/dist/services/cache-service.js.map +1 -1
  98. package/dist/services/database-optimizer.js +63 -63
  99. package/dist/services/database-optimizer.js.map +1 -1
  100. package/dist/services/embedding-migration-service.d.ts +24 -0
  101. package/dist/services/embedding-migration-service.d.ts.map +1 -0
  102. package/dist/services/embedding-migration-service.js +360 -0
  103. package/dist/services/embedding-migration-service.js.map +1 -0
  104. package/dist/services/embedding-provider-factory.d.ts +12 -5
  105. package/dist/services/embedding-provider-factory.d.ts.map +1 -1
  106. package/dist/services/embedding-provider-factory.js +107 -26
  107. package/dist/services/embedding-provider-factory.js.map +1 -1
  108. package/dist/services/forgetting-policy-service.js +17 -17
  109. package/dist/services/gemini-embedding-service.d.ts +1 -1
  110. package/dist/services/gemini-embedding-service.d.ts.map +1 -1
  111. package/dist/services/gemini-embedding-service.js +25 -18
  112. package/dist/services/gemini-embedding-service.js.map +1 -1
  113. package/dist/services/memory-embedding-service.d.ts +8 -0
  114. package/dist/services/memory-embedding-service.d.ts.map +1 -1
  115. package/dist/services/memory-embedding-service.js +180 -71
  116. package/dist/services/memory-embedding-service.js.map +1 -1
  117. package/dist/services/migration-history-service.d.ts +14 -0
  118. package/dist/services/migration-history-service.d.ts.map +1 -0
  119. package/dist/services/migration-history-service.js +270 -0
  120. package/dist/services/migration-history-service.js.map +1 -0
  121. package/dist/services/migration-monitor-service.d.ts +24 -0
  122. package/dist/services/migration-monitor-service.d.ts.map +1 -0
  123. package/dist/services/migration-monitor-service.js +93 -0
  124. package/dist/services/migration-monitor-service.js.map +1 -0
  125. package/dist/services/model-availability-service.d.ts +22 -0
  126. package/dist/services/model-availability-service.d.ts.map +1 -0
  127. package/dist/services/model-availability-service.js +140 -0
  128. package/dist/services/model-availability-service.js.map +1 -0
  129. package/dist/services/openai-embedding-service.d.ts +36 -0
  130. package/dist/services/openai-embedding-service.d.ts.map +1 -0
  131. package/dist/services/openai-embedding-service.js +192 -0
  132. package/dist/services/openai-embedding-service.js.map +1 -0
  133. package/dist/services/performance-monitor.d.ts +154 -10
  134. package/dist/services/performance-monitor.d.ts.map +1 -1
  135. package/dist/services/performance-monitor.js +446 -60
  136. package/dist/services/performance-monitor.js.map +1 -1
  137. package/dist/services/spaced-repetition/interval-calculation.service.d.ts +38 -0
  138. package/dist/services/spaced-repetition/interval-calculation.service.d.ts.map +1 -0
  139. package/dist/services/spaced-repetition/interval-calculation.service.js +105 -0
  140. package/dist/services/spaced-repetition/interval-calculation.service.js.map +1 -0
  141. package/dist/services/spaced-repetition/optimal-interval.service.d.ts +56 -0
  142. package/dist/services/spaced-repetition/optimal-interval.service.d.ts.map +1 -0
  143. package/dist/services/spaced-repetition/optimal-interval.service.js +163 -0
  144. package/dist/services/spaced-repetition/optimal-interval.service.js.map +1 -0
  145. package/dist/services/spaced-repetition/performance-analysis.service.d.ts +48 -0
  146. package/dist/services/spaced-repetition/performance-analysis.service.d.ts.map +1 -0
  147. package/dist/services/spaced-repetition/performance-analysis.service.js +174 -0
  148. package/dist/services/spaced-repetition/performance-analysis.service.js.map +1 -0
  149. package/dist/services/spaced-repetition/priority-calculation.service.d.ts +53 -0
  150. package/dist/services/spaced-repetition/priority-calculation.service.d.ts.map +1 -0
  151. package/dist/services/spaced-repetition/priority-calculation.service.js +161 -0
  152. package/dist/services/spaced-repetition/priority-calculation.service.js.map +1 -0
  153. package/dist/services/spaced-repetition/recall-probability.service.d.ts +36 -0
  154. package/dist/services/spaced-repetition/recall-probability.service.d.ts.map +1 -0
  155. package/dist/services/spaced-repetition/recall-probability.service.js +88 -0
  156. package/dist/services/spaced-repetition/recall-probability.service.js.map +1 -0
  157. package/dist/services/spaced-repetition/review-scheduling.service.d.ts +43 -0
  158. package/dist/services/spaced-repetition/review-scheduling.service.d.ts.map +1 -0
  159. package/dist/services/spaced-repetition/review-scheduling.service.js +130 -0
  160. package/dist/services/spaced-repetition/review-scheduling.service.js.map +1 -0
  161. package/dist/services/spaced-repetition/spaced-repetition-container.d.ts +69 -0
  162. package/dist/services/spaced-repetition/spaced-repetition-container.d.ts.map +1 -0
  163. package/dist/services/spaced-repetition/spaced-repetition-container.js +136 -0
  164. package/dist/services/spaced-repetition/spaced-repetition-container.js.map +1 -0
  165. package/dist/services/unified-embedding-service.d.ts +3 -0
  166. package/dist/services/unified-embedding-service.d.ts.map +1 -1
  167. package/dist/services/unified-embedding-service.js +58 -62
  168. package/dist/services/unified-embedding-service.js.map +1 -1
  169. package/dist/services/vector-compatibility-service.d.ts +68 -0
  170. package/dist/services/vector-compatibility-service.d.ts.map +1 -0
  171. package/dist/services/vector-compatibility-service.js +373 -0
  172. package/dist/services/vector-compatibility-service.js.map +1 -0
  173. package/dist/services/vector-search/vector-index-manager.d.ts +27 -0
  174. package/dist/services/vector-search/vector-index-manager.d.ts.map +1 -0
  175. package/dist/services/vector-search/vector-index-manager.js +66 -0
  176. package/dist/services/vector-search/vector-index-manager.js.map +1 -0
  177. package/dist/services/vector-search/vector-performance-tester.d.ts +30 -0
  178. package/dist/services/vector-search/vector-performance-tester.d.ts.map +1 -0
  179. package/dist/services/vector-search/vector-performance-tester.js +87 -0
  180. package/dist/services/vector-search/vector-performance-tester.js.map +1 -0
  181. package/dist/services/vector-search/vector-search-container.d.ts +41 -0
  182. package/dist/services/vector-search/vector-search-container.d.ts.map +1 -0
  183. package/dist/services/vector-search/vector-search-container.js +74 -0
  184. package/dist/services/vector-search/vector-search-container.js.map +1 -0
  185. package/dist/services/vector-search/vector-search-facade.d.ts +63 -0
  186. package/dist/services/vector-search/vector-search-facade.d.ts.map +1 -0
  187. package/dist/services/vector-search/vector-search-facade.js +91 -0
  188. package/dist/services/vector-search/vector-search-facade.js.map +1 -0
  189. package/dist/services/vector-search/vector-search-result-normalizer.d.ts +6 -0
  190. package/dist/services/vector-search/vector-search-result-normalizer.d.ts.map +1 -0
  191. package/dist/services/vector-search/vector-search-result-normalizer.js +65 -0
  192. package/dist/services/vector-search/vector-search-result-normalizer.js.map +1 -0
  193. package/dist/services/vector-search/vector-search.service.d.ts +33 -0
  194. package/dist/services/vector-search/vector-search.service.d.ts.map +1 -0
  195. package/dist/services/vector-search/vector-search.service.js +149 -0
  196. package/dist/services/vector-search/vector-search.service.js.map +1 -0
  197. package/dist/tools/forget-tool.js +14 -14
  198. package/dist/tools/pin-tool.js +14 -14
  199. package/dist/tools/unpin-tool.js +21 -21
  200. package/dist/types/alerts.types.d.ts +26 -0
  201. package/dist/types/alerts.types.d.ts.map +1 -0
  202. package/dist/types/alerts.types.js +2 -0
  203. package/dist/types/alerts.types.js.map +1 -0
  204. package/dist/types/embedding-provider-monitoring.types.d.ts +24 -0
  205. package/dist/types/embedding-provider-monitoring.types.d.ts.map +1 -0
  206. package/dist/types/embedding-provider-monitoring.types.js +2 -0
  207. package/dist/types/embedding-provider-monitoring.types.js.map +1 -0
  208. package/dist/types/embedding.types.d.ts +36 -1
  209. package/dist/types/embedding.types.d.ts.map +1 -1
  210. package/dist/types/migration.types.d.ts +131 -0
  211. package/dist/types/migration.types.d.ts.map +1 -0
  212. package/dist/types/migration.types.js +6 -0
  213. package/dist/types/migration.types.js.map +1 -0
  214. package/dist/types/spaced-repetition.types.d.ts +61 -0
  215. package/dist/types/spaced-repetition.types.d.ts.map +1 -0
  216. package/dist/types/spaced-repetition.types.js +6 -0
  217. package/dist/types/spaced-repetition.types.js.map +1 -0
  218. package/dist/types/vector-search.types.d.ts +96 -0
  219. package/dist/types/vector-search.types.d.ts.map +1 -0
  220. package/dist/types/vector-search.types.js +2 -0
  221. package/dist/types/vector-search.types.js.map +1 -0
  222. package/dist/utils/configuration-validator.d.ts +23 -0
  223. package/dist/utils/configuration-validator.d.ts.map +1 -0
  224. package/dist/utils/configuration-validator.js +102 -0
  225. package/dist/utils/configuration-validator.js.map +1 -0
  226. package/dist/utils/database.d.ts.map +1 -1
  227. package/dist/utils/database.js +101 -95
  228. package/dist/utils/database.js.map +1 -1
  229. package/dist/utils/environment-check.d.ts +8 -0
  230. package/dist/utils/environment-check.d.ts.map +1 -0
  231. package/dist/utils/environment-check.js +25 -0
  232. package/dist/utils/environment-check.js.map +1 -0
  233. package/dist/utils/logger.d.ts +8 -0
  234. package/dist/utils/logger.d.ts.map +1 -0
  235. package/dist/utils/logger.js +33 -0
  236. package/dist/utils/logger.js.map +1 -0
  237. package/package.json +139 -125
  238. package/scripts/auto-setup.js +233 -233
  239. package/scripts/backup-daily.bat +28 -28
  240. package/scripts/backup-embeddings.js +108 -108
  241. package/scripts/check-db-integrity.js +93 -93
  242. package/scripts/debug-embeddings.js +184 -184
  243. package/scripts/direct-sql-migration.sql +36 -36
  244. package/scripts/docker-migration.sh +105 -105
  245. package/scripts/fix-migration.js +93 -93
  246. package/scripts/fix-vector-dimensions.js +206 -206
  247. package/scripts/migrate-embedding-data.js +307 -307
  248. package/scripts/regenerate-embeddings.js +144 -144
  249. package/scripts/restore-legacy.ps1 +60 -60
  250. package/scripts/run-migration.js +122 -122
  251. package/scripts/safe-migration.js +150 -150
  252. package/scripts/simple-migrate.js +41 -41
  253. package/scripts/simple-update.js +123 -123
  254. package/src/database/schema.sql +234 -159
  255. package/.cursor/rules/cache-management.mdc +0 -171
  256. package/.cursor/rules/database-schema.mdc +0 -344
  257. package/.cursor/rules/deployment.mdc +0 -596
  258. package/.cursor/rules/error-logging.mdc +0 -298
  259. package/.cursor/rules/forgetting-algorithms.mdc +0 -426
  260. package/.cursor/rules/http-server.mdc +0 -432
  261. package/.cursor/rules/hybrid-search.mdc +0 -424
  262. package/.cursor/rules/implementation.mdc +0 -369
  263. package/.cursor/rules/lightweight-embedding.mdc +0 -178
  264. package/.cursor/rules/mcp-client-development.mdc +0 -0
  265. package/.cursor/rules/mcp-server-development.mdc +0 -0
  266. package/.cursor/rules/mcp-tools-architecture.mdc +0 -205
  267. package/.cursor/rules/memento-memory-rule.mdc +0 -8
  268. package/.cursor/rules/memento-project-overview.mdc +0 -0
  269. package/.cursor/rules/memory-algorithms.mdc +0 -502
  270. package/.cursor/rules/monitoring.mdc +0 -622
  271. package/.cursor/rules/performance-alerts.mdc +0 -537
  272. package/.cursor/rules/performance-monitoring.mdc +0 -345
  273. package/.cursor/rules/performance-optimization.mdc +0 -563
  274. package/.cursor/rules/project-structure.mdc +0 -310
  275. package/.cursor/rules/testing.mdc +0 -473
  276. package/.dockerignore +0 -15
  277. package/.eslintrc.json +0 -34
  278. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -51
  279. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -45
  280. package/.github/ISSUE_TEMPLATE/question.md +0 -31
  281. package/.github/PULL_REQUEST_TEMPLATE.md +0 -97
  282. package/AGENTS.md +0 -28
  283. package/CHANGELOG.md +0 -416
  284. package/CODE_OF_CONDUCT.md +0 -62
  285. package/CONTRIBUTING.md +0 -165
  286. package/DOCKER_SETUP_GUIDE.md +0 -84
  287. package/Dockerfile +0 -90
  288. package/backup/legacy-removal-20250930-201816/http-server-legacy.ts +0 -1068
  289. package/backup/legacy-removal-20250930-201816/rollback-to-legacy.ps1 +0 -46
  290. package/backup/legacy-removal-20250930-201816/rollback-to-legacy.sh +0 -48
  291. package/dist/server/index-backup.d.ts +0 -5
  292. package/dist/server/index-backup.d.ts.map +0 -1
  293. package/dist/server/index-backup.js +0 -793
  294. package/dist/server/index-backup.js.map +0 -1
  295. package/dist/server/index-refactored.d.ts +0 -6
  296. package/dist/server/index-refactored.d.ts.map +0 -1
  297. package/dist/server/index-refactored.js +0 -206
  298. package/dist/server/index-refactored.js.map +0 -1
  299. package/dist/services/performance-monitoring-integration.d.ts +0 -77
  300. package/dist/services/performance-monitoring-integration.d.ts.map +0 -1
  301. package/dist/services/performance-monitoring-integration.js +0 -177
  302. package/dist/services/performance-monitoring-integration.js.map +0 -1
  303. package/dist/test/debug-http-v2.d.ts +0 -5
  304. package/dist/test/debug-http-v2.d.ts.map +0 -1
  305. package/dist/test/debug-http-v2.js +0 -28
  306. package/dist/test/debug-http-v2.js.map +0 -1
  307. package/dist/test/performance-benchmark.d.ts +0 -57
  308. package/dist/test/performance-benchmark.d.ts.map +0 -1
  309. package/dist/test/performance-benchmark.js +0 -427
  310. package/dist/test/performance-benchmark.js.map +0 -1
  311. package/dist/test/test-alerts-direct.d.ts +0 -7
  312. package/dist/test/test-alerts-direct.d.ts.map +0 -1
  313. package/dist/test/test-alerts-direct.js +0 -101
  314. package/dist/test/test-alerts-direct.js.map +0 -1
  315. package/dist/test/test-batch-scheduler.d.ts +0 -2
  316. package/dist/test/test-batch-scheduler.d.ts.map +0 -1
  317. package/dist/test/test-batch-scheduler.js +0 -156
  318. package/dist/test/test-batch-scheduler.js.map +0 -1
  319. package/dist/test/test-client.d.ts +0 -5
  320. package/dist/test/test-client.d.ts.map +0 -1
  321. package/dist/test/test-client.js +0 -86
  322. package/dist/test/test-client.js.map +0 -1
  323. package/dist/test/test-embedding.d.ts +0 -6
  324. package/dist/test/test-embedding.d.ts.map +0 -1
  325. package/dist/test/test-embedding.js +0 -142
  326. package/dist/test/test-embedding.js.map +0 -1
  327. package/dist/test/test-error-logging.d.ts +0 -7
  328. package/dist/test/test-error-logging.d.ts.map +0 -1
  329. package/dist/test/test-error-logging.js +0 -105
  330. package/dist/test/test-error-logging.js.map +0 -1
  331. package/dist/test/test-forgetting.d.ts +0 -6
  332. package/dist/test/test-forgetting.d.ts.map +0 -1
  333. package/dist/test/test-forgetting.js +0 -154
  334. package/dist/test/test-forgetting.js.map +0 -1
  335. package/dist/test/test-gemini-embedding.d.ts +0 -7
  336. package/dist/test/test-gemini-embedding.d.ts.map +0 -1
  337. package/dist/test/test-gemini-embedding.js +0 -134
  338. package/dist/test/test-gemini-embedding.js.map +0 -1
  339. package/dist/test/test-http-server-v2-simple.d.ts +0 -6
  340. package/dist/test/test-http-server-v2-simple.d.ts.map +0 -1
  341. package/dist/test/test-http-server-v2-simple.js +0 -131
  342. package/dist/test/test-http-server-v2-simple.js.map +0 -1
  343. package/dist/test/test-http-server-v2.d.ts +0 -7
  344. package/dist/test/test-http-server-v2.d.ts.map +0 -1
  345. package/dist/test/test-http-server-v2.js +0 -529
  346. package/dist/test/test-http-server-v2.js.map +0 -1
  347. package/dist/test/test-lightweight-embedding.d.ts +0 -6
  348. package/dist/test/test-lightweight-embedding.d.ts.map +0 -1
  349. package/dist/test/test-lightweight-embedding.js +0 -189
  350. package/dist/test/test-lightweight-embedding.js.map +0 -1
  351. package/dist/test/test-m1-completion.d.ts +0 -7
  352. package/dist/test/test-m1-completion.d.ts.map +0 -1
  353. package/dist/test/test-m1-completion.js +0 -124
  354. package/dist/test/test-m1-completion.js.map +0 -1
  355. package/dist/test/test-memory-injection-prompt.d.ts +0 -2
  356. package/dist/test/test-memory-injection-prompt.d.ts.map +0 -1
  357. package/dist/test/test-memory-injection-prompt.js +0 -299
  358. package/dist/test/test-memory-injection-prompt.js.map +0 -1
  359. package/dist/test/test-performance-alerts.d.ts +0 -7
  360. package/dist/test/test-performance-alerts.d.ts.map +0 -1
  361. package/dist/test/test-performance-alerts.js +0 -109
  362. package/dist/test/test-performance-alerts.js.map +0 -1
  363. package/dist/test/test-performance-monitor.d.ts +0 -2
  364. package/dist/test/test-performance-monitor.d.ts.map +0 -1
  365. package/dist/test/test-performance-monitor.js +0 -182
  366. package/dist/test/test-performance-monitor.js.map +0 -1
  367. package/dist/test/test-performance-monitoring.d.ts +0 -6
  368. package/dist/test/test-performance-monitoring.d.ts.map +0 -1
  369. package/dist/test/test-performance-monitoring.js +0 -156
  370. package/dist/test/test-performance-monitoring.js.map +0 -1
  371. package/dist/test/test-search.d.ts +0 -5
  372. package/dist/test/test-search.d.ts.map +0 -1
  373. package/dist/test/test-search.js +0 -141
  374. package/dist/test/test-search.js.map +0 -1
  375. package/dist/test/test-simple-alerts.d.ts +0 -6
  376. package/dist/test/test-simple-alerts.d.ts.map +0 -1
  377. package/dist/test/test-simple-alerts.js +0 -106
  378. package/dist/test/test-simple-alerts.js.map +0 -1
  379. package/dist/test/test-vector-search-engine.d.ts +0 -2
  380. package/dist/test/test-vector-search-engine.d.ts.map +0 -1
  381. package/dist/test/test-vector-search-engine.js +0 -225
  382. package/dist/test/test-vector-search-engine.js.map +0 -1
  383. package/docker-compose.dev.yml +0 -50
  384. package/docker-compose.prod.yml +0 -77
  385. package/docker-compose.yml +0 -43
  386. package/docs/en/Memento-Goals.md +0 -217
  387. package/docs/en/Memento-M1-DetailSpecs.md +0 -130
  388. package/docs/en/Memento-Milestones.md +0 -135
  389. package/docs/en/Search-Ranking-Memory-Decay-Formulas.md +0 -177
  390. package/docs/en/api-reference.md +0 -658
  391. package/docs/en/architecture.md +0 -1302
  392. package/docs/en/developer-guide.md +0 -1005
  393. package/docs/en/user-manual.md +0 -595
  394. package/docs/ko/Memento-Goals.md +0 -217
  395. package/docs/ko/Memento-M1-DetailSpecs.md +0 -130
  396. package/docs/ko/Memento-Milestones.md +0 -134
  397. package/docs/ko/Search-Ranking-Memory-Decay-Formulas.md +0 -177
  398. package/docs/ko/api-reference.md +0 -658
  399. package/docs/ko/architecture.md +0 -1302
  400. package/docs/ko/developer-guide.md +0 -1006
  401. package/docs/ko/embedding-api-reference.md +0 -122
  402. package/docs/ko/embedding-configuration.md +0 -62
  403. package/docs/ko/embedding-performance-benchmark.md +0 -62
  404. package/docs/ko/embedding-service-guide.md +0 -314
  405. package/docs/ko/user-manual.md +0 -595
  406. package/env.example +0 -49
  407. package/install.sh +0 -191
  408. package/mcp-http-client.js +0 -218
  409. package/mcp.json +0 -0
  410. package/packages/mcp-client/docs/API-REFERENCE.md +0 -560
  411. package/packages/mcp-client/docs/BEST-PRACTICES.md +0 -564
  412. package/packages/mcp-client/docs/MIGRATION-GUIDE.md +0 -344
  413. package/packages/mcp-client/docs/PERFORMANCE-GUIDE.md +0 -476
  414. package/packages/mcp-client/docs/TROUBLESHOOTING.md +0 -564
  415. package/packages/mcp-client/package-lock.json +0 -907
  416. package/packages/mcp-client/package.json +0 -58
  417. package/packages/mcp-client/performance-optimizer.js +0 -428
  418. package/packages/mcp-client/test-basic.js +0 -65
  419. package/packages/mcp-client/test-integration.js +0 -366
  420. package/src/algorithms/forgetting-algorithm.spec.ts +0 -538
  421. package/src/algorithms/forgetting-algorithm.ts +0 -243
  422. package/src/algorithms/hybrid-search-engine.spec.ts +0 -484
  423. package/src/algorithms/hybrid-search-engine.ts +0 -489
  424. package/src/algorithms/search-engine.spec.ts +0 -429
  425. package/src/algorithms/search-engine.ts +0 -392
  426. package/src/algorithms/search-ranking.spec.ts +0 -293
  427. package/src/algorithms/search-ranking.ts +0 -407
  428. package/src/algorithms/spaced-repetition.spec.ts +0 -510
  429. package/src/algorithms/spaced-repetition.ts +0 -238
  430. package/src/algorithms/vector-search-engine.ts +0 -505
  431. package/src/client/index.spec.ts +0 -427
  432. package/src/client/index.ts +0 -222
  433. package/src/config/index.spec.ts +0 -339
  434. package/src/config/index.ts +0 -106
  435. package/src/database/init.spec.ts +0 -239
  436. package/src/database/init.ts +0 -130
  437. package/src/database/migrate.spec.ts +0 -293
  438. package/src/database/migrate.ts +0 -94
  439. package/src/database/migrations/001_add_embedding_metadata.sql +0 -29
  440. package/src/npm-client/context-injector.spec.ts +0 -335
  441. package/src/npm-client/context-injector.ts +0 -412
  442. package/src/npm-client/index.spec.ts +0 -108
  443. package/src/npm-client/index.ts +0 -96
  444. package/src/npm-client/memento-client.spec.ts +0 -549
  445. package/src/npm-client/memento-client.ts +0 -501
  446. package/src/npm-client/memory-manager.spec.ts +0 -374
  447. package/src/npm-client/memory-manager.ts +0 -414
  448. package/src/npm-client/types.spec.ts +0 -427
  449. package/src/npm-client/types.ts +0 -296
  450. package/src/npm-client/utils.spec.ts +0 -355
  451. package/src/npm-client/utils.ts +0 -423
  452. package/src/scripts/copy-assets.js +0 -37
  453. package/src/server/http-server.spec.ts +0 -648
  454. package/src/server/http-server.ts +0 -1030
  455. package/src/server/index-backup.ts +0 -875
  456. package/src/server/index-refactored.ts +0 -237
  457. package/src/server/index.spec.ts +0 -281
  458. package/src/server/index.ts +0 -347
  459. package/src/server/simple-mcp-server.spec.ts +0 -207
  460. package/src/server/simple-mcp-server.ts +0 -173
  461. package/src/services/async-optimizer.spec.ts +0 -569
  462. package/src/services/async-optimizer.ts +0 -484
  463. package/src/services/batch-scheduler.ts +0 -759
  464. package/src/services/cache-service.spec.ts +0 -372
  465. package/src/services/cache-service.ts +0 -434
  466. package/src/services/database-optimizer.spec.ts +0 -344
  467. package/src/services/database-optimizer.ts +0 -450
  468. package/src/services/embedding-provider-factory.ts +0 -173
  469. package/src/services/embedding-service.spec.ts +0 -342
  470. package/src/services/embedding-service.ts +0 -333
  471. package/src/services/error-logging-service.spec.ts +0 -416
  472. package/src/services/error-logging-service.ts +0 -383
  473. package/src/services/forgetting-policy-service.spec.ts +0 -140
  474. package/src/services/forgetting-policy-service.ts +0 -334
  475. package/src/services/gemini-embedding-service.spec.ts +0 -463
  476. package/src/services/gemini-embedding-service.ts +0 -283
  477. package/src/services/lightweight-embedding-service.spec.ts +0 -458
  478. package/src/services/lightweight-embedding-service.ts +0 -324
  479. package/src/services/memory-embedding-service.spec.ts +0 -417
  480. package/src/services/memory-embedding-service.ts +0 -289
  481. package/src/services/minilm-embedding-service.spec.ts +0 -104
  482. package/src/services/minilm-embedding-service.ts +0 -262
  483. package/src/services/performance-alert-service.spec.ts +0 -517
  484. package/src/services/performance-alert-service.ts +0 -477
  485. package/src/services/performance-monitor.spec.ts +0 -401
  486. package/src/services/performance-monitor.ts +0 -532
  487. package/src/services/performance-monitoring-integration.spec.ts +0 -478
  488. package/src/services/performance-monitoring-integration.ts.bak +0 -276
  489. package/src/services/unified-embedding-service.spec.ts +0 -224
  490. package/src/services/unified-embedding-service.ts +0 -255
  491. package/src/test/debug-http-v2.ts +0 -30
  492. package/src/test/embedding-integration-test.spec.ts +0 -295
  493. package/src/test/embedding-integration-test.ts +0 -295
  494. package/src/test/embedding-performance-benchmark.spec.ts +0 -354
  495. package/src/test/embedding-performance-benchmark.ts +0 -312
  496. package/src/test/performance-benchmark.ts +0 -565
  497. package/src/test/test-alerts-direct.ts +0 -136
  498. package/src/test/test-batch-scheduler-simple.spec.ts +0 -122
  499. package/src/test/test-batch-scheduler.spec.ts +0 -453
  500. package/src/test/test-batch-scheduler.ts +0 -182
  501. package/src/test/test-client.ts +0 -97
  502. package/src/test/test-embedding.ts +0 -153
  503. package/src/test/test-error-handling.spec.ts +0 -575
  504. package/src/test/test-error-logging.ts +0 -117
  505. package/src/test/test-forgetting.ts +0 -162
  506. package/src/test/test-gemini-embedding.ts +0 -159
  507. package/src/test/test-http-server-v2-simple.ts +0 -147
  508. package/src/test/test-http-server-v2.ts +0 -586
  509. package/src/test/test-hybrid-search-engine.spec.ts +0 -521
  510. package/src/test/test-integration-fixed.spec.ts +0 -612
  511. package/src/test/test-integration.spec.ts +0 -463
  512. package/src/test/test-lightweight-embedding.ts +0 -208
  513. package/src/test/test-m1-completion.spec.ts +0 -614
  514. package/src/test/test-m1-completion.ts +0 -141
  515. package/src/test/test-m1-integration.spec.ts +0 -514
  516. package/src/test/test-memory-injection-prompt.spec.ts +0 -650
  517. package/src/test/test-memory-injection-prompt.ts +0 -391
  518. package/src/test/test-performance-alerts.ts +0 -125
  519. package/src/test/test-performance-monitor-updates.spec.ts +0 -490
  520. package/src/test/test-performance-monitor.spec.ts +0 -284
  521. package/src/test/test-performance-monitor.ts +0 -228
  522. package/src/test/test-performance-monitoring.ts +0 -171
  523. package/src/test/test-search.ts +0 -151
  524. package/src/test/test-simple-alerts.ts +0 -136
  525. package/src/test/test-vector-search-engine.spec.ts +0 -408
  526. package/src/test/test-vector-search-engine.ts +0 -303
  527. package/src/tools/base-tool.ts +0 -189
  528. package/src/tools/cleanup-memory-tool.ts +0 -77
  529. package/src/tools/database-optimize-tool.ts +0 -79
  530. package/src/tools/error-stats.ts +0 -119
  531. package/src/tools/forget-tool.spec.ts +0 -613
  532. package/src/tools/forget-tool.ts +0 -454
  533. package/src/tools/forgetting-stats-tool.ts +0 -47
  534. package/src/tools/index.ts +0 -71
  535. package/src/tools/memory-injection-prompt.ts +0 -257
  536. package/src/tools/performance-alerts.ts +0 -226
  537. package/src/tools/performance-stats-tool.ts +0 -48
  538. package/src/tools/pin-tool.spec.ts +0 -497
  539. package/src/tools/pin-tool.ts +0 -277
  540. package/src/tools/recall-tool.spec.ts +0 -475
  541. package/src/tools/recall-tool.ts +0 -389
  542. package/src/tools/remember-tool.spec.ts +0 -469
  543. package/src/tools/remember-tool.ts +0 -112
  544. package/src/tools/resolve-error.ts +0 -69
  545. package/src/tools/tool-registry.ts +0 -417
  546. package/src/tools/types.ts +0 -63
  547. package/src/tools/unpin-tool.spec.ts +0 -549
  548. package/src/tools/unpin-tool.ts +0 -306
  549. package/src/types/embedding.types.ts +0 -78
  550. package/src/types/index.spec.ts +0 -420
  551. package/src/types/index.ts +0 -117
  552. package/src/utils/database.spec.ts +0 -77
  553. package/src/utils/database.ts +0 -458
  554. package/src/utils/stopwords.ts +0 -128
  555. package/start-docker-setup.bat +0 -38
  556. package/static/logo.png +0 -0
  557. package/static/memento_logo.svg +0 -2
  558. package/test-docker.js +0 -103
  559. package/tsconfig.json +0 -46
  560. package/vitest.config.ts +0 -23
@@ -1,1302 +0,0 @@
1
- # Architecture Documentation
2
-
3
- ## Overview
4
-
5
- Memento MCP Server is a system that manages AI Agent memory by mimicking human memory systems. This document provides detailed explanations of the overall system architecture, component interactions, and data flows.
6
-
7
- ## Table of Contents
8
-
9
- 1. [System Architecture](#system-architecture)
10
- 2. [Core Components](#core-components)
11
- 3. [Data Model](#data-model)
12
- 4. [Search System](#search-system)
13
- 5. [Forgetting System](#forgetting-system)
14
- 6. [Milestone-based Architecture](#milestone-based-architecture)
15
- 7. [Performance Considerations](#performance-considerations)
16
- 8. [Security Architecture](#security-architecture)
17
-
18
- ## System Architecture
19
-
20
- ### Overall Architecture Diagram
21
-
22
- ```mermaid
23
- graph TB
24
- subgraph "AI Agent Layer"
25
- A[Claude Desktop] --> B[MCP Client]
26
- C[ChatGPT] --> B
27
- D[Cursor] --> B
28
- E[Other AI Agents] --> B
29
- end
30
-
31
- subgraph "MCP Protocol Layer"
32
- B --> F[MCP Memory Server]
33
- end
34
-
35
- subgraph "Memory Management Layer"
36
- F --> G[Memory Manager]
37
- F --> H[Search Engine]
38
- F --> I[Forgetting Policy]
39
- F --> J[Spaced Review]
40
- F --> K[Error Logging Service]
41
- F --> L[Performance Alert Service]
42
- F --> M[Performance Monitoring Integration]
43
- end
44
-
45
- subgraph "Storage Layer"
46
- G --> N[SQLite M1]
47
- G --> O[PostgreSQL M3+]
48
- H --> P[Vector Search]
49
- H --> Q[Text Search]
50
- I --> R[Memory Queue]
51
- K --> S[Error Logs]
52
- L --> T[Alert Logs]
53
- end
54
-
55
- subgraph "Data Processing"
56
- J --> U[Memory Consolidation]
57
- I --> V[Memory Deletion]
58
- U --> W[Memory Summary]
59
- M --> X[Real-time Monitoring]
60
- K --> Y[Error Analysis]
61
- L --> Z[Alert Management]
62
- end
63
- ```
64
-
65
- ### Layer Roles
66
-
67
- #### 1. AI Agent Layer
68
- - **Role**: Interact with memory system through MCP client
69
- - **Components**: Claude Desktop, ChatGPT, Cursor, etc.
70
- - **Features**: Various AI Agents use the same MCP protocol
71
-
72
- #### 2. MCP Protocol Layer
73
- - **Role**: Provide standardized communication protocol
74
- - **Components**: MCP Memory Server
75
- - **Features**: Provide functionality through Tools, Resources, Prompts
76
-
77
- #### 3. Memory Management Layer
78
- - **Role**: Memory creation, search, management, deletion, and system monitoring
79
- - **Components**: Memory Manager, Search Engine, Forgetting Policy, Spaced Review, Error Logging Service, Performance Alert Service, Performance Monitoring Integration
80
- - **Features**: Management mimicking human memory systems and real-time system monitoring
81
-
82
- #### 4. Storage Layer
83
- - **Role**: Permanent data storage and retrieval
84
- - **Components**: SQLite/PostgreSQL, Vector Search, Text Search
85
- - **Features**: Different storage systems used by milestone
86
-
87
- ## Core Components
88
-
89
- ### 1. MCP Memory Server
90
-
91
- #### Structure
92
-
93
- ```typescript
94
- interface MCPServer {
95
- // Tools
96
- tools: {
97
- remember: RememberTool;
98
- recall: RecallTool;
99
- pin: PinTool;
100
- unpin: UnpinTool;
101
- forget: ForgetTool;
102
- summarize_thread: SummarizeThreadTool;
103
- link: LinkTool;
104
- export: ExportTool;
105
- feedback: FeedbackTool;
106
- };
107
-
108
- // Resources
109
- resources: {
110
- memory: MemoryResource;
111
- search: SearchResource;
112
- };
113
-
114
- // Prompts
115
- prompts: {
116
- memory_injection: MemoryInjectionPrompt;
117
- };
118
- }
119
- ```
120
-
121
- #### Key Features
122
-
123
- - **Tool Processing**: Execute and respond to MCP Tools
124
- - **Resource Provision**: Provide cached data
125
- - **Prompt Generation**: Generate prompts for context injection
126
- - **Authentication/Authorization**: User authentication and permission management (M2+)
127
-
128
- ### 2. Memory Manager
129
-
130
- #### Structure
131
-
132
- ```typescript
133
- interface MemoryManager {
134
- // Create memory
135
- createMemory(params: CreateMemoryParams): Promise<MemoryItem>;
136
-
137
- // Get memory
138
- getMemory(id: string): Promise<MemoryItem | null>;
139
-
140
- // Update memory
141
- updateMemory(id: string, updates: Partial<MemoryItem>): Promise<MemoryItem>;
142
-
143
- // Delete memory
144
- deleteMemory(id: string, hard?: boolean): Promise<boolean>;
145
-
146
- // Pin memory
147
- pinMemory(id: string): Promise<boolean>;
148
- unpinMemory(id: string): Promise<boolean>;
149
- }
150
- ```
151
-
152
- #### Key Features
153
-
154
- - **CRUD Operations**: Create, read, update, delete memories
155
- - **Type Management**: Distinguish working, episodic, semantic, procedural memories
156
- - **Metadata Management**: Manage tags, importance, source, etc.
157
- - **Relationship Management**: Set and manage relationships between memories
158
-
159
- ### 3. Search Engine
160
-
161
- #### Structure
162
-
163
- ```typescript
164
- interface SearchEngine {
165
- // 2-stage search
166
- search(query: string, filters?: SearchFilters): Promise<SearchResult>;
167
-
168
- // Vector search
169
- vectorSearch(query: string, limit: number): Promise<VectorSearchResult>;
170
-
171
- // Keyword search
172
- keywordSearch(query: string, filters?: SearchFilters): Promise<KeywordSearchResult>;
173
-
174
- // Ranking calculation
175
- calculateRanking(results: SearchResult[]): Promise<RankedResult[]>;
176
- }
177
- ```
178
-
179
- #### Search Pipeline
180
-
181
- ```mermaid
182
- graph LR
183
- A[Search Query] --> B[Query Preprocessing]
184
- B --> C[Vector Search]
185
- B --> D[Keyword Search]
186
- C --> E[Result Merging]
187
- D --> E
188
- E --> F[Ranking Calculation]
189
- F --> G[MMR Diversity Control]
190
- G --> H[Final Results]
191
- ```
192
-
193
- #### Ranking Algorithm
194
-
195
- ```typescript
196
- interface SearchRanking {
197
- calculateFinalScore(features: SearchFeatures): number {
198
- return this.ALPHA * features.relevance + // 0.50
199
- this.BETA * features.recency + // 0.20
200
- this.GAMMA * features.importance + // 0.20
201
- this.DELTA * features.usage - // 0.10
202
- this.EPSILON * features.duplication_penalty; // 0.15
203
- }
204
- }
205
- ```
206
-
207
- ### 4. Forgetting Policy
208
-
209
- #### Structure
210
-
211
- ```typescript
212
- interface ForgettingPolicy {
213
- // Calculate forget score
214
- calculateForgetScore(memory: MemoryItem): number;
215
-
216
- // Select deletion candidates
217
- getDeletionCandidates(): Promise<MemoryItem[]>;
218
-
219
- // Soft delete
220
- softDelete(memory: MemoryItem): Promise<boolean>;
221
-
222
- // Hard delete
223
- hardDelete(memory: MemoryItem): Promise<boolean>;
224
- }
225
- ```
226
-
227
- #### Forgetting Algorithm
228
-
229
- ```typescript
230
- interface ForgetScore {
231
- calculate(memory: MemoryItem): number {
232
- const age = this.calculateAge(memory.created_at);
233
- const importance = memory.importance;
234
- const usage = this.calculateUsage(memory);
235
-
236
- return this.baseForgetScore *
237
- Math.exp(-this.importanceWeight * importance) *
238
- Math.exp(-this.usageWeight * usage) *
239
- Math.exp(this.ageWeight * age);
240
- }
241
- }
242
- ```
243
-
244
- ### 5. Spaced Review
245
-
246
- #### Structure
247
-
248
- ```typescript
249
- interface SpacedReview {
250
- // Calculate review schedule
251
- calculateReviewSchedule(memory: MemoryItem): Date;
252
-
253
- // Select review candidates
254
- getReviewCandidates(): Promise<MemoryItem[]>;
255
-
256
- // Execute review
257
- executeReview(memory: MemoryItem): Promise<ReviewResult>;
258
-
259
- // Adjust interval
260
- adjustInterval(memory: MemoryItem, performance: number): void;
261
- }
262
- ```
263
-
264
- ### 6. Error Logging Service
265
-
266
- #### Structure
267
-
268
- ```typescript
269
- interface ErrorLoggingService {
270
- // Log error
271
- logError(error: Error, severity: ErrorSeverity, category: ErrorCategory, context?: Record<string, any>): void;
272
-
273
- // Get error statistics
274
- getErrorStats(filters?: ErrorFilters): Promise<ErrorStats>;
275
-
276
- // Resolve error
277
- resolveError(errorId: string, resolvedBy: string, resolution?: string): Promise<boolean>;
278
-
279
- // Search errors
280
- searchErrors(filters: ErrorSearchFilters): Promise<ErrorLog[]>;
281
- }
282
-
283
- enum ErrorSeverity {
284
- LOW = 'LOW',
285
- MEDIUM = 'MEDIUM',
286
- HIGH = 'HIGH',
287
- CRITICAL = 'CRITICAL'
288
- }
289
-
290
- enum ErrorCategory {
291
- UNKNOWN = 'UNKNOWN',
292
- DATABASE = 'DATABASE',
293
- NETWORK = 'NETWORK',
294
- TOOL_EXECUTION = 'TOOL_EXECUTION',
295
- VALIDATION = 'VALIDATION',
296
- SYSTEM = 'SYSTEM'
297
- }
298
- ```
299
-
300
- #### Key Features
301
-
302
- - **Structured Error Logging**: Include severity, category, context information
303
- - **Error Statistics Collection**: Error analysis by severity and category
304
- - **Error Resolution Tracking**: Record error resolution status and methods
305
- - **Real-time Monitoring**: Analyze error patterns and alerts
306
-
307
- ### 7. Performance Alert Service
308
-
309
- #### Structure
310
-
311
- ```typescript
312
- interface PerformanceAlertService {
313
- // Create alert
314
- createAlert(level: AlertLevel, type: AlertType, metric: string, value: number, threshold: number, message: string, context?: Record<string, any>): PerformanceAlert;
315
-
316
- // Resolve alert
317
- resolveAlert(alertId: string, resolvedBy: string, resolution?: string): PerformanceAlert | null;
318
-
319
- // Get active alerts
320
- getActiveAlerts(): PerformanceAlert[];
321
-
322
- // Search alerts
323
- searchAlerts(filters: AlertSearchFilters): PerformanceAlert[];
324
-
325
- // Alert statistics
326
- getStats(): AlertStats;
327
- }
328
-
329
- enum AlertLevel {
330
- INFO = 'INFO',
331
- WARNING = 'WARNING',
332
- CRITICAL = 'CRITICAL'
333
- }
334
-
335
- enum AlertType {
336
- RESPONSE_TIME = 'response_time',
337
- MEMORY_USAGE = 'memory_usage',
338
- ERROR_RATE = 'error_rate',
339
- THROUGHPUT = 'throughput',
340
- CUSTOM = 'custom'
341
- }
342
- ```
343
-
344
- #### Key Features
345
-
346
- - **Threshold-based Alerts**: Automatic alerts when performance metrics exceed thresholds
347
- - **Alert Management**: Alert creation, resolution, search, statistics functionality
348
- - **Log File Storage**: Save alerts in JSONL format to files
349
- - **Console Output**: Color-coded console alerts by severity
350
-
351
- ### 8. Performance Monitoring Integration
352
-
353
- #### Structure
354
-
355
- ```typescript
356
- interface PerformanceMonitoringIntegration {
357
- // Start real-time monitoring
358
- startRealTimeMonitoring(): void;
359
-
360
- // Stop real-time monitoring
361
- stopRealTimeMonitoring(): void;
362
-
363
- // Performance check
364
- private checkPerformance(): Promise<void>;
365
-
366
- // Threshold checks
367
- private checkResponseTime(avgResponseTime: number): void;
368
- private checkMemoryUsage(heapUsedMB: number): void;
369
- private checkErrorRate(errorRate: number): void;
370
- private checkThroughput(throughput: number): void;
371
- }
372
-
373
- interface AlertThresholds {
374
- responseTime: { warning: number; critical: number }; // ms
375
- memoryUsage: { warning: number; critical: number }; // MB
376
- errorRate: { warning: number; critical: number }; // %
377
- throughput: { warning: number; critical: number }; // ops/sec
378
- }
379
- ```
380
-
381
- #### Key Features
382
-
383
- - **Real-time Monitoring**: Automatic performance checks every 30 seconds
384
- - **Threshold-based Alerts**: Automatic alert generation when thresholds are exceeded
385
- - **Integrated Monitoring**: Integration with PerformanceMonitor and PerformanceAlertService
386
- - **Automatic Recovery**: Perform automatic recovery tasks when serious issues occur
387
-
388
- #### Spaced Repetition Algorithm
389
-
390
- ```typescript
391
- interface SpacedRepetition {
392
- calculateNextReview(memory: MemoryItem, performance: number): Date {
393
- const currentInterval = memory.review_interval || 1;
394
- const newInterval = this.calculateInterval(currentInterval, performance);
395
-
396
- return new Date(Date.now() + newInterval * 24 * 60 * 60 * 1000);
397
- }
398
- }
399
- ```
400
-
401
- ## Data Model
402
-
403
- ### 1. Memory Item
404
-
405
- ```typescript
406
- interface MemoryItem {
407
- id: string; // Unique identifier
408
- content: string; // Memory content
409
- type: 'working' | 'episodic' | 'semantic' | 'procedural'; // Memory type
410
- importance: number; // Importance (0-1)
411
- created_at: Date; // Creation time
412
- last_accessed: Date; // Last access time
413
- access_count: number; // Access count
414
- pinned: boolean; // Pinned status
415
- source?: string; // Source
416
- tags: string[]; // Tags
417
- privacy_scope: 'private' | 'team' | 'public'; // Privacy scope
418
- project_id?: string; // Project ID (M2+)
419
- user_id?: string; // User ID (M3+)
420
- metadata: Record<string, any>; // Additional metadata
421
- }
422
- ```
423
-
424
- ### 2. Search Result
425
-
426
- ```typescript
427
- interface SearchResult {
428
- items: MemoryItem[]; // List of found memories
429
- total_count: number; // Total result count
430
- query_time: number; // Search time (ms)
431
- search_metadata: {
432
- vector_matches: number; // Vector search match count
433
- keyword_matches: number; // Keyword search match count
434
- ranking_time: number; // Ranking calculation time
435
- };
436
- }
437
- ```
438
-
439
- ### 3. Memory Relationship
440
-
441
- ```typescript
442
- interface MemoryLink {
443
- id: string; // Link ID
444
- source_id: string; // Source memory ID
445
- target_id: string; // Target memory ID
446
- relation_type: 'cause_of' | 'derived_from' | 'duplicates' | 'contradicts';
447
- created_at: Date; // Creation time
448
- strength: number; // Relationship strength (0-1)
449
- }
450
- ```
451
-
452
- ### 4. Feedback
453
-
454
- ```typescript
455
- interface Feedback {
456
- id: string; // Feedback ID
457
- memory_id: string; // Memory ID
458
- helpful: boolean; // Helpfulness
459
- score?: number; // Score (0-1)
460
- comment?: string; // Comment
461
- created_at: Date; // Creation time
462
- user_id?: string; // User ID (M3+)
463
- }
464
- ```
465
-
466
- ## Search System
467
-
468
- ### Hybrid Search Architecture
469
-
470
- Memento provides a hybrid search system that combines FTS5 text search and vector search.
471
-
472
- ```mermaid
473
- graph TB
474
- subgraph "Hybrid Search Engine"
475
- A[User Query] --> B[Hybrid Search Engine]
476
- B --> C[FTS5 Text Search]
477
- B --> D[Vector Search]
478
- C --> E[Text Score]
479
- D --> F[Vector Score]
480
- E --> G[Score Normalization]
481
- F --> G
482
- G --> H[Weight Application]
483
- H --> I[Final Hybrid Score]
484
- I --> J[Result Sorting and Return]
485
- end
486
-
487
- subgraph "Embedding Service"
488
- K[Text Input] --> L[OpenAI API]
489
- L --> M[1536-dimensional Vector]
490
- M --> N[Database Storage]
491
- N --> O[Vector Search Index]
492
- end
493
- ```
494
-
495
- ### Embedding Service Architecture
496
-
497
- ```mermaid
498
- graph TB
499
- subgraph "Embedding Service Layer"
500
- A[Text Input] --> B[EmbeddingService]
501
- B --> C[OpenAI API Call]
502
- C --> D[text-embedding-3-small]
503
- D --> E[1536-dimensional Vector]
504
- E --> F[MemoryEmbeddingService]
505
- F --> G[Database Storage]
506
- G --> H[Vector Search Index]
507
- end
508
-
509
- subgraph "Error Handling and Caching"
510
- I[API Retry Logic]
511
- J[Embedding Result Caching]
512
- K[Error Recovery Mechanism]
513
- end
514
- ```
515
-
516
- ### 1. 2-Stage Search Pipeline
517
-
518
- #### Stage 1: Vector Search (ANN)
519
-
520
- ```typescript
521
- interface VectorSearch {
522
- // Generate embedding
523
- generateEmbedding(text: string): Promise<number[]>;
524
-
525
- // Vector search
526
- search(embedding: number[], limit: number): Promise<VectorSearchResult>;
527
-
528
- // Update index
529
- updateIndex(memory: MemoryItem): Promise<void>;
530
- }
531
- ```
532
-
533
- **Features**:
534
- - Semantic similarity search
535
- - Fast search speed (O(log n))
536
- - Multilingual support
537
-
538
- #### Stage 2: Keyword Search (BM25)
539
-
540
- ```typescript
541
- interface KeywordSearch {
542
- // Index text
543
- indexText(memory: MemoryItem): Promise<void>;
544
-
545
- // BM25 search
546
- search(query: string, filters?: SearchFilters): Promise<KeywordSearchResult>;
547
-
548
- // Optimize index
549
- optimizeIndex(): Promise<void>;
550
- }
551
- ```
552
-
553
- **Features**:
554
- - Accurate keyword matching
555
- - Weight-based ranking
556
- - Filter support
557
-
558
- ### 2. Ranking Algorithm
559
-
560
- #### Composite Score Calculation
561
-
562
- ```typescript
563
- interface SearchRanking {
564
- calculateFinalScore(features: SearchFeatures): number {
565
- const relevance = this.calculateRelevance(features);
566
- const recency = this.calculateRecency(features);
567
- const importance = this.calculateImportance(features);
568
- const usage = this.calculateUsage(features);
569
- const duplication = this.calculateDuplicationPenalty(features);
570
-
571
- return this.ALPHA * relevance + // 0.50
572
- this.BETA * recency + // 0.20
573
- this.GAMMA * importance + // 0.20
574
- this.DELTA * usage - // 0.10
575
- this.EPSILON * duplication; // 0.15
576
- }
577
- }
578
- ```
579
-
580
- #### Relevance Calculation
581
-
582
- ```typescript
583
- interface RelevanceCalculation {
584
- calculate(features: SearchFeatures): number {
585
- const vectorSimilarity = features.vector_similarity;
586
- const bm25Score = features.bm25_score;
587
- const tagMatch = features.tag_match_score;
588
- const titleHit = features.title_hit_score;
589
-
590
- return (vectorSimilarity * 0.4) +
591
- (bm25Score * 0.3) +
592
- (tagMatch * 0.2) +
593
- (titleHit * 0.1);
594
- }
595
- }
596
- ```
597
-
598
- ### 3. MMR Diversity Control
599
-
600
- ```typescript
601
- interface MMRDiversity {
602
- selectDiverseResults(results: SearchResult[], lambda: number = 0.7): SearchResult[] {
603
- const selected: SearchResult[] = [];
604
- const remaining = [...results];
605
-
606
- while (remaining.length > 0 && selected.length < this.maxResults) {
607
- let bestIndex = 0;
608
- let bestScore = -Infinity;
609
-
610
- for (let i = 0; i < remaining.length; i++) {
611
- const relevance = remaining[i].score;
612
- const diversity = this.calculateDiversity(remaining[i], selected);
613
- const score = lambda * relevance + (1 - lambda) * diversity;
614
-
615
- if (score > bestScore) {
616
- bestScore = score;
617
- bestIndex = i;
618
- }
619
- }
620
-
621
- selected.push(remaining[bestIndex]);
622
- remaining.splice(bestIndex, 1);
623
- }
624
-
625
- return selected;
626
- }
627
- }
628
- ```
629
-
630
- ## Forgetting System
631
-
632
- ### 1. TTL-based Automatic Deletion
633
-
634
- #### Memory Type TTL
635
-
636
- ```typescript
637
- interface MemoryTTL {
638
- WORKING_MEMORY: 48 * 60 * 60 * 1000; // 48 hours
639
- EPISODIC_MEMORY: 90 * 24 * 60 * 60 * 1000; // 90 days
640
- SEMANTIC_MEMORY: Infinity; // Indefinite
641
- PROCEDURAL_MEMORY: Infinity; // Indefinite
642
- }
643
- ```
644
-
645
- #### Deletion Scheduling
646
-
647
- ```typescript
648
- interface DeletionScheduler {
649
- scheduleDeletion(memory: MemoryItem): void {
650
- const ttl = this.getTTL(memory.type);
651
- if (ttl === Infinity) return;
652
-
653
- const deletionTime = new Date(memory.created_at.getTime() + ttl);
654
- this.scheduleTask(deletionTime, () => this.deleteMemory(memory));
655
- }
656
- }
657
- ```
658
-
659
- ### 2. Importance-based Forgetting
660
-
661
- #### Forget Score Calculation
662
-
663
- ```typescript
664
- interface ForgetScore {
665
- calculate(memory: MemoryItem): number {
666
- const age = this.calculateAge(memory.created_at);
667
- const importance = memory.importance;
668
- const usage = this.calculateUsage(memory);
669
- const recency = this.calculateRecency(memory.last_accessed);
670
-
671
- return this.baseForgetScore *
672
- Math.exp(-this.importanceWeight * importance) *
673
- Math.exp(-this.usageWeight * usage) *
674
- Math.exp(-this.recencyWeight * recency) *
675
- Math.exp(this.ageWeight * age);
676
- }
677
- }
678
- ```
679
-
680
- ### 3. Spaced Repetition System
681
-
682
- #### Review Schedule Calculation
683
-
684
- ```typescript
685
- interface SpacedRepetition {
686
- calculateNextReview(memory: MemoryItem, performance: number): Date {
687
- const currentInterval = memory.review_interval || 1;
688
- const newInterval = this.calculateInterval(currentInterval, performance);
689
-
690
- return new Date(Date.now() + newInterval * 24 * 60 * 60 * 1000);
691
- }
692
-
693
- calculateInterval(currentInterval: number, performance: number): number {
694
- if (performance >= 0.8) {
695
- return Math.min(currentInterval * 2.5, 365); // Increase interval on success
696
- } else if (performance >= 0.6) {
697
- return Math.max(currentInterval * 1.2, 1); // Slight increase on moderate
698
- } else {
699
- return 1; // Reset to 1 day on failure
700
- }
701
- }
702
- }
703
- ```
704
-
705
- ## Milestone-based Architecture
706
-
707
- ### M1: Personal Use (MVP)
708
-
709
- #### Architecture
710
-
711
- ```mermaid
712
- graph TB
713
- A[AI Agent] --> B[MCP Client]
714
- B --> C[MCP Memory Server]
715
- C --> D[SQLite Database]
716
- C --> E[FTS5 Index]
717
- C --> F[VEC Index]
718
- C --> G[Local File System]
719
- ```
720
-
721
- #### Features
722
-
723
- - **Storage**: better-sqlite3 embedded
724
- - **Search**: FTS5 + sqlite-vec
725
- - **Authentication**: None (local only)
726
- - **Deployment**: Local execution
727
- - **Additional Features**: Lightweight embedding, performance monitoring, cache system
728
- - **Scalability**: Single user
729
-
730
- #### Technology Stack
731
-
732
- - **Database**: better-sqlite3 12.4+
733
- - **Vector Search**: sqlite-vec
734
- - **Text Search**: FTS5
735
- - **Web Server**: Express 5.1+
736
- - **WebSocket**: ws 8.18+
737
- - **Testing**: Vitest 1.0+
738
- - **Runtime**: Node.js 20+
739
-
740
- ### M2: Team Collaboration
741
-
742
- #### Architecture
743
-
744
- ```mermaid
745
- graph TB
746
- A[AI Agents] --> B[MCP Client]
747
- B --> C[MCP Memory Server]
748
- C --> D[SQLite Server Mode]
749
- C --> E[Redis Cache]
750
- C --> F[API Gateway]
751
- F --> G[Authentication]
752
- ```
753
-
754
- #### Features
755
-
756
- - **Storage**: SQLite server mode (WAL)
757
- - **Caching**: Redis
758
- - **Authentication**: API Key
759
- - **Deployment**: Docker
760
- - **Scalability**: Team level (10-50 people)
761
-
762
- #### Technology Stack
763
-
764
- - **Database**: SQLite Server Mode
765
- - **Cache**: Redis 7+
766
- - **Container**: Docker
767
- - **Authentication**: API Key
768
-
769
- ### M3: Organization Entry
770
-
771
- #### Architecture
772
-
773
- ```mermaid
774
- graph TB
775
- A[AI Agents] --> B[MCP Client]
776
- B --> C[Load Balancer]
777
- C --> D[MCP Memory Server]
778
- D --> E[PostgreSQL]
779
- D --> F[Redis Cache]
780
- D --> G[Authentication Service]
781
- G --> H[JWT Token]
782
- ```
783
-
784
- #### Features
785
-
786
- - **Storage**: PostgreSQL + pgvector
787
- - **Search**: pgvector + tsvector
788
- - **Authentication**: JWT
789
- - **Deployment**: Docker Compose
790
- - **Scalability**: Organization level (100-1000 people)
791
-
792
- #### Technology Stack
793
-
794
- - **Database**: PostgreSQL 15+ + pgvector
795
- - **Search**: pgvector, tsvector
796
- - **Cache**: Redis 7+
797
- - **Authentication**: JWT
798
- - **Deployment**: Docker Compose
799
-
800
- ### M4: Enterprise
801
-
802
- #### Architecture
803
-
804
- ```mermaid
805
- graph TB
806
- A[AI Agents] --> B[MCP Client]
807
- B --> C[API Gateway]
808
- C --> D[Load Balancer]
809
- D --> E[MCP Memory Server Cluster]
810
- E --> F[PostgreSQL HA]
811
- E --> G[Redis Cluster]
812
- E --> H[Authentication Service]
813
- H --> I[SSO/LDAP]
814
- E --> J[Monitoring]
815
- J --> K[Prometheus]
816
- J --> L[Grafana]
817
- ```
818
-
819
- #### Features
820
-
821
- - **Storage**: PostgreSQL high availability
822
- - **Caching**: Redis cluster
823
- - **Authentication**: JWT + RBAC + SSO/LDAP
824
- - **Deployment**: Kubernetes
825
- - **Scalability**: Enterprise (1000+ people)
826
-
827
- #### Technology Stack
828
-
829
- - **Database**: PostgreSQL HA + pgvector
830
- - **Cache**: Redis Cluster
831
- - **Authentication**: JWT + RBAC + SSO/LDAP
832
- - **Deployment**: Kubernetes
833
- - **Monitoring**: Prometheus + Grafana
834
-
835
- ## Performance Considerations
836
-
837
- ### 1. Search Performance
838
-
839
- #### Hybrid Search Optimization
840
-
841
- ```typescript
842
- interface HybridSearchOptimization {
843
- // Combine FTS5 + vector search
844
- optimizeHybridSearch(): void {
845
- this.createFTSIndex('memory_item_fts', 'content');
846
- this.createVectorIndex('memory_embedding', 'embedding', 'ivfflat');
847
- this.analyzeTable('memory_item');
848
- }
849
-
850
- // Batch processing
851
- batchUpdateEmbeddings(memories: MemoryItem[]): void {
852
- const batchSize = 100;
853
- for (let i = 0; i < memories.length; i += batchSize) {
854
- const batch = memories.slice(i, i + batchSize);
855
- this.updateEmbeddingsBatch(batch);
856
- }
857
- }
858
- }
859
- ```
860
-
861
- #### Lightweight Embedding Optimization
862
-
863
- ```typescript
864
- interface LightweightEmbeddingOptimization {
865
- // TF-IDF vectorization
866
- optimizeTFIDF(): void {
867
- this.updateVocabulary();
868
- this.calculateIDF();
869
- this.normalizeVectors();
870
- }
871
-
872
- // Multilingual support
873
- preprocessText(text: string): string {
874
- return this.removeStopWords(text)
875
- .normalizeUnicode()
876
- .tokenize()
877
- .stem();
878
- }
879
- }
880
- ```
881
-
882
- #### Caching Strategy
883
-
884
- ```typescript
885
- interface CachingStrategy {
886
- // LRU cache implementation
887
- cacheSearchResult(query: string, result: SearchResult): void {
888
- const key = `search:${this.hashQuery(query)}`;
889
- this.lruCache.set(key, result, 3600); // 1 hour TTL
890
- }
891
-
892
- // Embedding caching
893
- cacheEmbedding(text: string, embedding: number[]): void {
894
- const key = `embedding:${this.hashText(text)}`;
895
- this.lruCache.set(key, embedding, 86400); // 24 hour TTL
896
- }
897
-
898
- // Popular query caching
899
- cachePopularQueries(): void {
900
- const popular = this.getPopularQueries(100);
901
- this.lruCache.set('popular_queries', popular, 86400); // 24 hour TTL
902
- }
903
- }
904
- ```
905
-
906
- ### 2. Memory Usage
907
-
908
- #### Performance Monitoring
909
-
910
- ```typescript
911
- interface PerformanceMonitoring {
912
- // Memory usage monitoring
913
- monitorMemoryUsage(): void {
914
- const usage = process.memoryUsage();
915
- this.metrics.record('memory.heapUsed', usage.heapUsed);
916
- this.metrics.record('memory.heapTotal', usage.heapTotal);
917
- this.metrics.record('memory.rss', usage.rss);
918
- }
919
-
920
- // Cache performance monitoring
921
- monitorCachePerformance(): void {
922
- this.metrics.record('cache.hitRate', this.cache.getHitRate());
923
- this.metrics.record('cache.size', this.cache.getSize());
924
- this.metrics.record('cache.memoryUsage', this.cache.getMemoryUsage());
925
- }
926
- }
927
- ```
928
-
929
- #### Memory Pool Management
930
-
931
- ```typescript
932
- interface MemoryPool {
933
- private pool: Buffer[] = [];
934
- private maxSize: number = 100;
935
-
936
- getBuffer(size: number): Buffer {
937
- const buffer = this.pool.find(b => b.length >= size);
938
- if (buffer) {
939
- return buffer;
940
- }
941
- return Buffer.alloc(size);
942
- }
943
-
944
- returnBuffer(buffer: Buffer): void {
945
- if (this.pool.length < this.maxSize) {
946
- this.pool.push(buffer);
947
- }
948
- }
949
- }
950
- ```
951
-
952
- #### Garbage Collection Optimization
953
-
954
- ```typescript
955
- interface GCOptimization {
956
- // Memory usage monitoring
957
- monitorMemoryUsage(): void {
958
- const usage = process.memoryUsage();
959
- if (usage.heapUsed > this.threshold) {
960
- this.triggerGC();
961
- }
962
- }
963
-
964
- // Clean up unnecessary objects
965
- cleanup(): void {
966
- this.clearExpiredCache();
967
- this.clearUnusedConnections();
968
- this.optimizeIndexes();
969
- }
970
- }
971
- ```
972
-
973
- ### 3. Database Performance
974
-
975
- #### better-sqlite3 Optimization
976
-
977
- ```sql
978
- -- Index optimization
979
- CREATE INDEX idx_memory_type_created ON memory_item(type, created_at);
980
- CREATE INDEX idx_memory_importance ON memory_item(importance DESC);
981
- CREATE INDEX idx_memory_tags ON memory_item USING GIN(tags);
982
-
983
- -- Vector search index
984
- CREATE INDEX idx_memory_embedding ON memory_embedding
985
- USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
986
-
987
- -- FTS index
988
- CREATE VIRTUAL TABLE memory_fts USING fts5(
989
- content,
990
- tags,
991
- source,
992
- content='memory_item',
993
- content_rowid='id'
994
- );
995
- ```
996
-
997
- #### Database Optimization Service
998
-
999
- ```typescript
1000
- interface DatabaseOptimization {
1001
- // Auto index recommendation
1002
- recommendIndexes(): IndexRecommendation[] {
1003
- const slowQueries = this.analyzeSlowQueries();
1004
- return slowQueries.map(query => this.generateIndexRecommendation(query));
1005
- }
1006
-
1007
- // Query performance analysis
1008
- analyzeQueryPerformance(): QueryAnalysis {
1009
- return {
1010
- averageQueryTime: this.getAverageQueryTime(),
1011
- slowQueries: this.getSlowQueries(),
1012
- indexUsage: this.getIndexUsage(),
1013
- recommendations: this.generateRecommendations()
1014
- };
1015
- }
1016
- }
1017
- ```
1018
-
1019
- #### Connection Pool Management
1020
-
1021
- ```typescript
1022
- interface ConnectionPool {
1023
- private pool: DatabaseConnection[] = [];
1024
- private maxConnections: number = 20;
1025
-
1026
- async getConnection(): Promise<DatabaseConnection> {
1027
- if (this.pool.length > 0) {
1028
- return this.pool.pop()!;
1029
- }
1030
-
1031
- if (this.activeConnections < this.maxConnections) {
1032
- return await this.createConnection();
1033
- }
1034
-
1035
- return await this.waitForConnection();
1036
- }
1037
-
1038
- releaseConnection(conn: DatabaseConnection): void {
1039
- if (this.pool.length < this.maxConnections) {
1040
- this.pool.push(conn);
1041
- } else {
1042
- conn.close();
1043
- }
1044
- }
1045
- }
1046
- ```
1047
-
1048
- ## Security Architecture
1049
-
1050
- ### 1. Authentication and Authorization
1051
-
1052
- #### JWT-based Authentication (M3+)
1053
-
1054
- ```typescript
1055
- interface JWTAuthentication {
1056
- generateToken(user: User): string {
1057
- const payload = {
1058
- sub: user.id,
1059
- email: user.email,
1060
- role: user.role,
1061
- exp: Math.floor(Date.now() / 1000) + (60 * 60 * 24) // 24 hours
1062
- };
1063
-
1064
- return jwt.sign(payload, this.secretKey, { algorithm: 'HS256' });
1065
- }
1066
-
1067
- verifyToken(token: string): UserPayload {
1068
- return jwt.verify(token, this.secretKey) as UserPayload;
1069
- }
1070
- }
1071
- ```
1072
-
1073
- #### RBAC Permission Management (M4)
1074
-
1075
- ```typescript
1076
- interface RBAC {
1077
- hasPermission(user: User, resource: string, action: string): boolean {
1078
- const role = this.getRole(user.role);
1079
- return role.permissions.some(p =>
1080
- p.resource === resource && p.actions.includes(action)
1081
- );
1082
- }
1083
-
1084
- checkMemoryAccess(user: User, memory: MemoryItem): boolean {
1085
- if (memory.privacy_scope === 'public') return true;
1086
- if (memory.privacy_scope === 'team' && user.team_id === memory.team_id) return true;
1087
- if (memory.privacy_scope === 'private' && user.id === memory.user_id) return true;
1088
- return false;
1089
- }
1090
- }
1091
- ```
1092
-
1093
- ### 2. Data Encryption
1094
-
1095
- #### Sensitive Data Encryption
1096
-
1097
- ```typescript
1098
- interface DataEncryption {
1099
- encryptSensitiveData(data: string): string {
1100
- const cipher = crypto.createCipher('aes-256-gcm', this.encryptionKey);
1101
- let encrypted = cipher.update(data, 'utf8', 'hex');
1102
- encrypted += cipher.final('hex');
1103
- return encrypted;
1104
- }
1105
-
1106
- decryptSensitiveData(encryptedData: string): string {
1107
- const decipher = crypto.createDecipher('aes-256-gcm', this.encryptionKey);
1108
- let decrypted = decipher.update(encryptedData, 'hex', 'utf8');
1109
- decrypted += decipher.final('utf8');
1110
- return decrypted;
1111
- }
1112
- }
1113
- ```
1114
-
1115
- #### Transport Encryption
1116
-
1117
- ```typescript
1118
- interface TransportEncryption {
1119
- // Enforce HTTPS
1120
- enforceHTTPS(): void {
1121
- this.app.use((req, res, next) => {
1122
- if (!req.secure && req.get('x-forwarded-proto') !== 'https') {
1123
- return res.redirect(`https://${req.get('host')}${req.url}`);
1124
- }
1125
- next();
1126
- });
1127
- }
1128
-
1129
- // Set HSTS headers
1130
- setHSTS(): void {
1131
- this.app.use((req, res, next) => {
1132
- res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
1133
- next();
1134
- });
1135
- }
1136
- }
1137
- ```
1138
-
1139
- ### 3. Audit Logging
1140
-
1141
- #### Security Event Logging
1142
-
1143
- ```typescript
1144
- interface SecurityAudit {
1145
- logSecurityEvent(event: SecurityEvent): void {
1146
- const logEntry = {
1147
- timestamp: new Date().toISOString(),
1148
- event_type: event.type,
1149
- user_id: event.user_id,
1150
- ip_address: event.ip_address,
1151
- user_agent: event.user_agent,
1152
- details: event.details,
1153
- severity: event.severity
1154
- };
1155
-
1156
- this.auditLogger.info(logEntry);
1157
- }
1158
-
1159
- detectAnomalies(): void {
1160
- // Detect abnormal access patterns
1161
- const recentEvents = this.getRecentEvents(5 * 60 * 1000); // 5 minutes
1162
- const suspiciousEvents = this.analyzePatterns(recentEvents);
1163
-
1164
- if (suspiciousEvents.length > 0) {
1165
- this.alertSecurityTeam(suspiciousEvents);
1166
- }
1167
- }
1168
- }
1169
- ```
1170
-
1171
- ## Monitoring and Observability
1172
-
1173
- ### 1. Metrics Collection
1174
-
1175
- #### Prometheus Metrics
1176
-
1177
- ```typescript
1178
- interface Metrics {
1179
- // Memory-related metrics
1180
- memoryCounter: Counter<string>;
1181
- memorySize: Gauge<string>;
1182
-
1183
- // Search-related metrics
1184
- searchDuration: Histogram<string>;
1185
- searchResults: Counter<string>;
1186
-
1187
- // Error-related metrics
1188
- errorCounter: Counter<string>;
1189
- errorRate: Gauge<string>;
1190
-
1191
- // Performance-related metrics
1192
- responseTime: Histogram<string>;
1193
- throughput: Counter<string>;
1194
- }
1195
- ```
1196
-
1197
- ### 2. Logging
1198
-
1199
- #### Structured Logging
1200
-
1201
- ```typescript
1202
- interface StructuredLogging {
1203
- logMemoryOperation(operation: string, memoryId: string, userId?: string): void {
1204
- this.logger.info({
1205
- operation,
1206
- memory_id: memoryId,
1207
- user_id: userId,
1208
- timestamp: new Date().toISOString(),
1209
- level: 'info'
1210
- });
1211
- }
1212
-
1213
- logSearchQuery(query: string, resultCount: number, duration: number): void {
1214
- this.logger.info({
1215
- event: 'search_query',
1216
- query,
1217
- result_count: resultCount,
1218
- duration_ms: duration,
1219
- timestamp: new Date().toISOString()
1220
- });
1221
- }
1222
- }
1223
- ```
1224
-
1225
- ### 3. Health Check
1226
-
1227
- #### Service Status Monitoring
1228
-
1229
- ```typescript
1230
- interface HealthCheck {
1231
- async checkHealth(): Promise<HealthStatus> {
1232
- const checks = await Promise.allSettled([
1233
- this.checkDatabase(),
1234
- this.checkRedis(),
1235
- this.checkSearchIndex(),
1236
- this.checkMemoryUsage()
1237
- ]);
1238
-
1239
- return {
1240
- status: checks.every(c => c.status === 'fulfilled') ? 'healthy' : 'unhealthy',
1241
- checks: checks.map((check, index) => ({
1242
- name: this.checkNames[index],
1243
- status: check.status === 'fulfilled' ? 'ok' : 'error',
1244
- details: check.status === 'fulfilled' ? check.value : check.reason
1245
- }))
1246
- };
1247
- }
1248
- }
1249
- ```
1250
-
1251
- ## Scalability Considerations
1252
-
1253
- ### 1. Horizontal Scaling
1254
-
1255
- #### Sharding Strategy
1256
-
1257
- ```typescript
1258
- interface ShardingStrategy {
1259
- getShard(memoryId: string): string {
1260
- const hash = this.hash(memoryId);
1261
- return `shard_${hash % this.shardCount}`;
1262
- }
1263
-
1264
- routeQuery(query: string): string[] {
1265
- // Send query to all shards
1266
- return this.shards.map(shard => `${shard}/search`);
1267
- }
1268
- }
1269
- ```
1270
-
1271
- ### 2. Caching Strategy
1272
-
1273
- #### Multi-level Caching
1274
-
1275
- ```typescript
1276
- interface MultiLevelCache {
1277
- async get(key: string): Promise<any> {
1278
- // L1: Memory cache
1279
- let value = this.memoryCache.get(key);
1280
- if (value) return value;
1281
-
1282
- // L2: Redis cache
1283
- value = await this.redis.get(key);
1284
- if (value) {
1285
- this.memoryCache.set(key, value);
1286
- return value;
1287
- }
1288
-
1289
- // L3: Database
1290
- value = await this.database.get(key);
1291
- if (value) {
1292
- this.memoryCache.set(key, value);
1293
- await this.redis.setex(key, 3600, value);
1294
- return value;
1295
- }
1296
-
1297
- return null;
1298
- }
1299
- }
1300
- ```
1301
-
1302
- This architecture document explains the overall structure and design principles of Memento MCP Server. For detailed implementation of each component, refer to individual development documents.