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
- # 아키텍처 문서
2
-
3
- ## 개요
4
-
5
- Memento MCP Server는 AI Agent의 기억을 인간의 기억 체계를 모사하여 관리하는 시스템입니다. 이 문서는 시스템의 전체 아키텍처, 컴포넌트 간 상호작용, 데이터 플로우를 상세히 설명합니다.
6
-
7
- ## 목차
8
-
9
- 1. [시스템 아키텍처](#시스템-아키텍처)
10
- 2. [핵심 컴포넌트](#핵심-컴포넌트)
11
- 3. [데이터 모델](#데이터-모델)
12
- 4. [검색 시스템](#검색-시스템)
13
- 5. [망각 시스템](#망각-시스템)
14
- 6. [마일스톤별 아키텍처](#마일스톤별-아키텍처)
15
- 7. [성능 고려사항](#성능-고려사항)
16
- 8. [보안 아키텍처](#보안-아키텍처)
17
-
18
- ## 시스템 아키텍처
19
-
20
- ### 전체 아키텍처 다이어그램
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
- ### 레이어별 역할
66
-
67
- #### 1. AI Agent Layer
68
- - **역할**: MCP 클라이언트를 통해 기억 시스템과 상호작용
69
- - **구성요소**: Claude Desktop, ChatGPT, Cursor 등
70
- - **특징**: 다양한 AI Agent가 동일한 MCP 프로토콜 사용
71
-
72
- #### 2. MCP Protocol Layer
73
- - **역할**: 표준화된 통신 프로토콜 제공
74
- - **구성요소**: MCP Memory Server
75
- - **특징**: Tools, Resources, Prompts를 통한 기능 제공
76
-
77
- #### 3. Memory Management Layer
78
- - **역할**: 기억의 생성, 검색, 관리, 삭제 및 시스템 모니터링
79
- - **구성요소**: Memory Manager, Search Engine, Forgetting Policy, Spaced Review, Error Logging Service, Performance Alert Service, Performance Monitoring Integration
80
- - **특징**: 인간의 기억 체계를 모사한 관리 및 실시간 시스템 모니터링
81
-
82
- #### 4. Storage Layer
83
- - **역할**: 데이터 영구 저장 및 검색
84
- - **구성요소**: SQLite/PostgreSQL, Vector Search, Text Search
85
- - **특징**: 마일스톤별 다른 저장소 사용
86
-
87
- ## 핵심 컴포넌트
88
-
89
- ### 1. MCP Memory Server
90
-
91
- #### 구조
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
- #### 주요 기능
122
-
123
- - **Tool 처리**: MCP Tools 실행 및 응답
124
- - **Resource 제공**: 캐시된 데이터 제공
125
- - **Prompt 생성**: 컨텍스트 주입용 프롬프트 생성
126
- - **인증/권한**: 사용자 인증 및 권한 관리 (M2+)
127
-
128
- ### 2. Memory Manager
129
-
130
- #### 구조
131
-
132
- ```typescript
133
- interface MemoryManager {
134
- // 기억 생성
135
- createMemory(params: CreateMemoryParams): Promise<MemoryItem>;
136
-
137
- // 기억 조회
138
- getMemory(id: string): Promise<MemoryItem | null>;
139
-
140
- // 기억 업데이트
141
- updateMemory(id: string, updates: Partial<MemoryItem>): Promise<MemoryItem>;
142
-
143
- // 기억 삭제
144
- deleteMemory(id: string, hard?: boolean): Promise<boolean>;
145
-
146
- // 기억 고정
147
- pinMemory(id: string): Promise<boolean>;
148
- unpinMemory(id: string): Promise<boolean>;
149
- }
150
- ```
151
-
152
- #### 주요 기능
153
-
154
- - **CRUD 작업**: 기억의 생성, 조회, 수정, 삭제
155
- - **타입 관리**: 작업기억, 일화기억, 의미기억, 절차기억 구분
156
- - **메타데이터 관리**: 태그, 중요도, 출처 등 관리
157
- - **관계 관리**: 기억 간의 관계 설정 및 관리
158
-
159
- ### 3. Search Engine
160
-
161
- #### 구조
162
-
163
- ```typescript
164
- interface SearchEngine {
165
- // 2단계 검색
166
- search(query: string, filters?: SearchFilters): Promise<SearchResult>;
167
-
168
- // 벡터 검색
169
- vectorSearch(query: string, limit: number): Promise<VectorSearchResult>;
170
-
171
- // 키워드 검색
172
- keywordSearch(query: string, filters?: SearchFilters): Promise<KeywordSearchResult>;
173
-
174
- // 랭킹 계산
175
- calculateRanking(results: SearchResult[]): Promise<RankedResult[]>;
176
- }
177
- ```
178
-
179
- #### 검색 파이프라인
180
-
181
- ```mermaid
182
- graph LR
183
- A[검색 쿼리] --> B[쿼리 전처리]
184
- B --> C[벡터 검색]
185
- B --> D[키워드 검색]
186
- C --> E[결과 병합]
187
- D --> E
188
- E --> F[랭킹 계산]
189
- F --> G[MMR 다양성 제어]
190
- G --> H[최종 결과]
191
- ```
192
-
193
- #### 랭킹 알고리즘
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
- #### 구조
210
-
211
- ```typescript
212
- interface ForgettingPolicy {
213
- // 망각 점수 계산
214
- calculateForgetScore(memory: MemoryItem): number;
215
-
216
- // 삭제 후보 선정
217
- getDeletionCandidates(): Promise<MemoryItem[]>;
218
-
219
- // 소프트 삭제
220
- softDelete(memory: MemoryItem): Promise<boolean>;
221
-
222
- // 하드 삭제
223
- hardDelete(memory: MemoryItem): Promise<boolean>;
224
- }
225
- ```
226
-
227
- #### 망각 알고리즘
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
- #### 구조
247
-
248
- ```typescript
249
- interface SpacedReview {
250
- // 리뷰 스케줄 계산
251
- calculateReviewSchedule(memory: MemoryItem): Date;
252
-
253
- // 리뷰 대상 선정
254
- getReviewCandidates(): Promise<MemoryItem[]>;
255
-
256
- // 리뷰 실행
257
- executeReview(memory: MemoryItem): Promise<ReviewResult>;
258
-
259
- // 간격 조정
260
- adjustInterval(memory: MemoryItem, performance: number): void;
261
- }
262
- ```
263
-
264
- ### 6. Error Logging Service
265
-
266
- #### 구조
267
-
268
- ```typescript
269
- interface ErrorLoggingService {
270
- // 에러 로깅
271
- logError(error: Error, severity: ErrorSeverity, category: ErrorCategory, context?: Record<string, any>): void;
272
-
273
- // 에러 통계 조회
274
- getErrorStats(filters?: ErrorFilters): Promise<ErrorStats>;
275
-
276
- // 에러 해결
277
- resolveError(errorId: string, resolvedBy: string, resolution?: string): Promise<boolean>;
278
-
279
- // 에러 검색
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
- #### 주요 기능
301
-
302
- - **구조화된 에러 로깅**: 심각도, 카테고리, 컨텍스트 정보 포함
303
- - **에러 통계 수집**: 심각도별, 카테고리별 에러 분석
304
- - **에러 해결 추적**: 에러 해결 상태 및 해결 방법 기록
305
- - **실시간 모니터링**: 에러 발생 패턴 분석 및 알림
306
-
307
- ### 7. Performance Alert Service
308
-
309
- #### 구조
310
-
311
- ```typescript
312
- interface PerformanceAlertService {
313
- // 알림 생성
314
- createAlert(level: AlertLevel, type: AlertType, metric: string, value: number, threshold: number, message: string, context?: Record<string, any>): PerformanceAlert;
315
-
316
- // 알림 해결
317
- resolveAlert(alertId: string, resolvedBy: string, resolution?: string): PerformanceAlert | null;
318
-
319
- // 활성 알림 조회
320
- getActiveAlerts(): PerformanceAlert[];
321
-
322
- // 알림 검색
323
- searchAlerts(filters: AlertSearchFilters): PerformanceAlert[];
324
-
325
- // 알림 통계
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
- #### 주요 기능
345
-
346
- - **임계값 기반 알림**: 성능 메트릭이 임계값을 초과할 때 자동 알림
347
- - **알림 관리**: 알림 생성, 해결, 검색, 통계 기능
348
- - **로그 파일 저장**: 알림을 JSONL 형식으로 파일에 저장
349
- - **콘솔 출력**: 심각도별 색상 구분된 콘솔 알림
350
-
351
- ### 8. Performance Monitoring Integration
352
-
353
- #### 구조
354
-
355
- ```typescript
356
- interface PerformanceMonitoringIntegration {
357
- // 실시간 모니터링 시작
358
- startRealTimeMonitoring(): void;
359
-
360
- // 실시간 모니터링 중지
361
- stopRealTimeMonitoring(): void;
362
-
363
- // 성능 체크
364
- private checkPerformance(): Promise<void>;
365
-
366
- // 임계값 확인
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
- #### 주요 기능
382
-
383
- - **실시간 모니터링**: 30초마다 자동 성능 체크
384
- - **임계값 기반 알림**: 설정된 임계값 초과 시 자동 알림 생성
385
- - **통합 모니터링**: PerformanceMonitor와 PerformanceAlertService 연동
386
- - **자동 복구**: 심각한 문제 발생 시 자동 복구 작업 수행
387
-
388
- #### 간격 반복 알고리즘
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
- ## 데이터 모델
402
-
403
- ### 1. 메모리 아이템
404
-
405
- ```typescript
406
- interface MemoryItem {
407
- id: string; // 고유 식별자
408
- content: string; // 기억 내용
409
- type: 'working' | 'episodic' | 'semantic' | 'procedural'; // 기억 타입
410
- importance: number; // 중요도 (0-1)
411
- created_at: Date; // 생성 시간
412
- last_accessed: Date; // 마지막 접근 시간
413
- access_count: number; // 접근 횟수
414
- pinned: boolean; // 고정 여부
415
- source?: string; // 출처
416
- tags: string[]; // 태그
417
- privacy_scope: 'private' | 'team' | 'public'; // 공개 범위
418
- project_id?: string; // 프로젝트 ID (M2+)
419
- user_id?: string; // 사용자 ID (M3+)
420
- metadata: Record<string, any>; // 추가 메타데이터
421
- }
422
- ```
423
-
424
- ### 2. 검색 결과
425
-
426
- ```typescript
427
- interface SearchResult {
428
- items: MemoryItem[]; // 검색된 기억 목록
429
- total_count: number; // 전체 결과 수
430
- query_time: number; // 검색 소요 시간 (ms)
431
- search_metadata: {
432
- vector_matches: number; // 벡터 검색 매치 수
433
- keyword_matches: number; // 키워드 검색 매치 수
434
- ranking_time: number; // 랭킹 계산 시간
435
- };
436
- }
437
- ```
438
-
439
- ### 3. 기억 관계
440
-
441
- ```typescript
442
- interface MemoryLink {
443
- id: string; // 링크 ID
444
- source_id: string; // 소스 기억 ID
445
- target_id: string; // 대상 기억 ID
446
- relation_type: 'cause_of' | 'derived_from' | 'duplicates' | 'contradicts';
447
- created_at: Date; // 생성 시간
448
- strength: number; // 관계 강도 (0-1)
449
- }
450
- ```
451
-
452
- ### 4. 피드백
453
-
454
- ```typescript
455
- interface Feedback {
456
- id: string; // 피드백 ID
457
- memory_id: string; // 기억 ID
458
- helpful: boolean; // 유용성 여부
459
- score?: number; // 점수 (0-1)
460
- comment?: string; // 코멘트
461
- created_at: Date; // 생성 시간
462
- user_id?: string; // 사용자 ID (M3+)
463
- }
464
- ```
465
-
466
- ## 검색 시스템
467
-
468
- ### 하이브리드 검색 아키텍처
469
-
470
- Memento는 FTS5 텍스트 검색과 벡터 검색을 결합한 하이브리드 검색 시스템을 제공합니다.
471
-
472
- ```mermaid
473
- graph TB
474
- subgraph "하이브리드 검색 엔진"
475
- A[사용자 쿼리] --> B[하이브리드 검색 엔진]
476
- B --> C[FTS5 텍스트 검색]
477
- B --> D[벡터 검색]
478
- C --> E[텍스트 점수]
479
- D --> F[벡터 점수]
480
- E --> G[점수 정규화]
481
- F --> G
482
- G --> H[가중치 적용]
483
- H --> I[최종 하이브리드 점수]
484
- I --> J[결과 정렬 및 반환]
485
- end
486
-
487
- subgraph "임베딩 서비스"
488
- K[텍스트 입력] --> L[OpenAI API]
489
- L --> M[1536차원 벡터]
490
- M --> N[데이터베이스 저장]
491
- N --> O[벡터 검색 인덱스]
492
- end
493
- ```
494
-
495
- ### 임베딩 서비스 아키텍처
496
-
497
- ```mermaid
498
- graph TB
499
- subgraph "임베딩 서비스 레이어"
500
- A[텍스트 입력] --> B[EmbeddingService]
501
- B --> C[OpenAI API 호출]
502
- C --> D[text-embedding-3-small]
503
- D --> E[1536차원 벡터]
504
- E --> F[MemoryEmbeddingService]
505
- F --> G[데이터베이스 저장]
506
- G --> H[벡터 검색 인덱스]
507
- end
508
-
509
- subgraph "에러 처리 및 캐싱"
510
- I[API 재시도 로직]
511
- J[임베딩 결과 캐싱]
512
- K[에러 복구 메커니즘]
513
- end
514
- ```
515
-
516
- ### 1. 2단계 검색 파이프라인
517
-
518
- #### 1단계: 벡터 검색 (ANN)
519
-
520
- ```typescript
521
- interface VectorSearch {
522
- // 임베딩 생성
523
- generateEmbedding(text: string): Promise<number[]>;
524
-
525
- // 벡터 검색
526
- search(embedding: number[], limit: number): Promise<VectorSearchResult>;
527
-
528
- // 인덱스 업데이트
529
- updateIndex(memory: MemoryItem): Promise<void>;
530
- }
531
- ```
532
-
533
- **특징**:
534
- - 의미적 유사도 검색
535
- - 빠른 검색 속도 (O(log n))
536
- - 다국어 지원
537
-
538
- #### 2단계: 키워드 검색 (BM25)
539
-
540
- ```typescript
541
- interface KeywordSearch {
542
- // 텍스트 인덱싱
543
- indexText(memory: MemoryItem): Promise<void>;
544
-
545
- // BM25 검색
546
- search(query: string, filters?: SearchFilters): Promise<KeywordSearchResult>;
547
-
548
- // 인덱스 최적화
549
- optimizeIndex(): Promise<void>;
550
- }
551
- ```
552
-
553
- **특징**:
554
- - 정확한 키워드 매칭
555
- - 가중치 기반 랭킹
556
- - 필터링 지원
557
-
558
- ### 2. 랭킹 알고리즘
559
-
560
- #### 복합 점수 계산
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
- #### 관련성 계산
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 다양성 제어
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
- ## 망각 시스템
631
-
632
- ### 1. TTL 기반 자동 삭제
633
-
634
- #### 기억 타입별 TTL
635
-
636
- ```typescript
637
- interface MemoryTTL {
638
- WORKING_MEMORY: 48 * 60 * 60 * 1000; // 48시간
639
- EPISODIC_MEMORY: 90 * 24 * 60 * 60 * 1000; // 90일
640
- SEMANTIC_MEMORY: Infinity; // 무기한
641
- PROCEDURAL_MEMORY: Infinity; // 무기한
642
- }
643
- ```
644
-
645
- #### 삭제 스케줄링
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. 중요도 기반 망각
660
-
661
- #### 망각 점수 계산
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. 간격 반복 시스템
681
-
682
- #### 리뷰 스케줄 계산
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); // 성공 시 간격 증가
696
- } else if (performance >= 0.6) {
697
- return Math.max(currentInterval * 1.2, 1); // 보통 시 약간 증가
698
- } else {
699
- return 1; // 실패 시 다시 1일 후
700
- }
701
- }
702
- }
703
- ```
704
-
705
- ## 마일스톤별 아키텍처
706
-
707
- ### M1: 개인용 (MVP)
708
-
709
- #### 아키텍처
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
- #### 특징
722
-
723
- - **스토리지**: better-sqlite3 임베디드
724
- - **검색**: FTS5 + sqlite-vec
725
- - **인증**: 없음 (로컬 전용)
726
- - **배포**: 로컬 실행
727
- - **추가 기능**: 경량 임베딩, 성능 모니터링, 캐시 시스템
728
- - **확장성**: 단일 사용자
729
-
730
- #### 기술 스택
731
-
732
- - **데이터베이스**: better-sqlite3 12.4+
733
- - **벡터 검색**: sqlite-vec
734
- - **텍스트 검색**: FTS5
735
- - **웹 서버**: Express 5.1+
736
- - **WebSocket**: ws 8.18+
737
- - **테스트**: Vitest 1.0+
738
- - **런타임**: Node.js 20+
739
-
740
- ### M2: 팀 협업
741
-
742
- #### 아키텍처
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
- #### 특징
755
-
756
- - **스토리지**: SQLite 서버 모드 (WAL)
757
- - **캐싱**: Redis
758
- - **인증**: API Key
759
- - **배포**: Docker
760
- - **확장성**: 팀 단위 (10-50명)
761
-
762
- #### 기술 스택
763
-
764
- - **데이터베이스**: SQLite Server Mode
765
- - **캐시**: Redis 7+
766
- - **컨테이너**: Docker
767
- - **인증**: API Key
768
-
769
- ### M3: 조직 초입
770
-
771
- #### 아키텍처
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
- #### 특징
785
-
786
- - **스토리지**: PostgreSQL + pgvector
787
- - **검색**: pgvector + tsvector
788
- - **인증**: JWT
789
- - **배포**: Docker Compose
790
- - **확장성**: 조직 단위 (100-1000명)
791
-
792
- #### 기술 스택
793
-
794
- - **데이터베이스**: PostgreSQL 15+ + pgvector
795
- - **검색**: pgvector, tsvector
796
- - **캐시**: Redis 7+
797
- - **인증**: JWT
798
- - **배포**: Docker Compose
799
-
800
- ### M4: 엔터프라이즈
801
-
802
- #### 아키텍처
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
- #### 특징
820
-
821
- - **스토리지**: PostgreSQL 고가용성
822
- - **캐싱**: Redis 클러스터
823
- - **인증**: JWT + RBAC + SSO/LDAP
824
- - **배포**: Kubernetes
825
- - **확장성**: 엔터프라이즈 (1000명+)
826
-
827
- #### 기술 스택
828
-
829
- - **데이터베이스**: PostgreSQL HA + pgvector
830
- - **캐시**: Redis Cluster
831
- - **인증**: JWT + RBAC + SSO/LDAP
832
- - **배포**: Kubernetes
833
- - **모니터링**: Prometheus + Grafana
834
-
835
- ## 성능 고려사항
836
-
837
- ### 1. 검색 성능
838
-
839
- #### 하이브리드 검색 최적화
840
-
841
- ```typescript
842
- interface HybridSearchOptimization {
843
- // FTS5 + 벡터 검색 결합
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
- // 배치 처리
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
- #### 경량 임베딩 최적화
862
-
863
- ```typescript
864
- interface LightweightEmbeddingOptimization {
865
- // TF-IDF 벡터화
866
- optimizeTFIDF(): void {
867
- this.updateVocabulary();
868
- this.calculateIDF();
869
- this.normalizeVectors();
870
- }
871
-
872
- // 다국어 지원
873
- preprocessText(text: string): string {
874
- return this.removeStopWords(text)
875
- .normalizeUnicode()
876
- .tokenize()
877
- .stem();
878
- }
879
- }
880
- ```
881
-
882
- #### 캐싱 전략
883
-
884
- ```typescript
885
- interface CachingStrategy {
886
- // LRU 캐시 구현
887
- cacheSearchResult(query: string, result: SearchResult): void {
888
- const key = `search:${this.hashQuery(query)}`;
889
- this.lruCache.set(key, result, 3600); // 1시간 TTL
890
- }
891
-
892
- // 임베딩 캐싱
893
- cacheEmbedding(text: string, embedding: number[]): void {
894
- const key = `embedding:${this.hashText(text)}`;
895
- this.lruCache.set(key, embedding, 86400); // 24시간 TTL
896
- }
897
-
898
- // 인기 검색어 캐싱
899
- cachePopularQueries(): void {
900
- const popular = this.getPopularQueries(100);
901
- this.lruCache.set('popular_queries', popular, 86400); // 24시간 TTL
902
- }
903
- }
904
- ```
905
-
906
- ### 2. 메모리 사용량
907
-
908
- #### 성능 모니터링
909
-
910
- ```typescript
911
- interface PerformanceMonitoring {
912
- // 메모리 사용량 모니터링
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
- // 캐시 성능 모니터링
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
- #### 메모리 풀 관리
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
- #### 가비지 컬렉션 최적화
953
-
954
- ```typescript
955
- interface GCOptimization {
956
- // 메모리 사용량 모니터링
957
- monitorMemoryUsage(): void {
958
- const usage = process.memoryUsage();
959
- if (usage.heapUsed > this.threshold) {
960
- this.triggerGC();
961
- }
962
- }
963
-
964
- // 불필요한 객체 정리
965
- cleanup(): void {
966
- this.clearExpiredCache();
967
- this.clearUnusedConnections();
968
- this.optimizeIndexes();
969
- }
970
- }
971
- ```
972
-
973
- ### 3. 데이터베이스 성능
974
-
975
- #### better-sqlite3 최적화
976
-
977
- ```sql
978
- -- 인덱스 최적화
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
- -- 벡터 검색 인덱스
984
- CREATE INDEX idx_memory_embedding ON memory_embedding
985
- USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
986
-
987
- -- FTS 인덱스
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
- #### 데이터베이스 최적화 서비스
998
-
999
- ```typescript
1000
- interface DatabaseOptimization {
1001
- // 자동 인덱스 추천
1002
- recommendIndexes(): IndexRecommendation[] {
1003
- const slowQueries = this.analyzeSlowQueries();
1004
- return slowQueries.map(query => this.generateIndexRecommendation(query));
1005
- }
1006
-
1007
- // 쿼리 성능 분석
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
- #### 연결 풀 관리
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
- ## 보안 아키텍처
1049
-
1050
- ### 1. 인증 및 권한
1051
-
1052
- #### JWT 기반 인증 (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시간
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 권한 관리 (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. 데이터 암호화
1094
-
1095
- #### 민감한 데이터 암호화
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
- #### 전송 중 암호화
1116
-
1117
- ```typescript
1118
- interface TransportEncryption {
1119
- // 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
- // HSTS 헤더 설정
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. 감사 로깅
1140
-
1141
- #### 보안 이벤트 로깅
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
- // 비정상적인 접근 패턴 감지
1161
- const recentEvents = this.getRecentEvents(5 * 60 * 1000); // 5분
1162
- const suspiciousEvents = this.analyzePatterns(recentEvents);
1163
-
1164
- if (suspiciousEvents.length > 0) {
1165
- this.alertSecurityTeam(suspiciousEvents);
1166
- }
1167
- }
1168
- }
1169
- ```
1170
-
1171
- ## 모니터링 및 관측성
1172
-
1173
- ### 1. 메트릭 수집
1174
-
1175
- #### Prometheus 메트릭
1176
-
1177
- ```typescript
1178
- interface Metrics {
1179
- // 메모리 관련 메트릭
1180
- memoryCounter: Counter<string>;
1181
- memorySize: Gauge<string>;
1182
-
1183
- // 검색 관련 메트릭
1184
- searchDuration: Histogram<string>;
1185
- searchResults: Counter<string>;
1186
-
1187
- // 에러 관련 메트릭
1188
- errorCounter: Counter<string>;
1189
- errorRate: Gauge<string>;
1190
-
1191
- // 성능 관련 메트릭
1192
- responseTime: Histogram<string>;
1193
- throughput: Counter<string>;
1194
- }
1195
- ```
1196
-
1197
- ### 2. 로깅
1198
-
1199
- #### 구조화된 로깅
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. 헬스 체크
1226
-
1227
- #### 서비스 상태 모니터링
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
- ## 확장성 고려사항
1252
-
1253
- ### 1. 수평적 확장
1254
-
1255
- #### 샤딩 전략
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
- // 쿼리를 모든 샤드에 전송
1266
- return this.shards.map(shard => `${shard}/search`);
1267
- }
1268
- }
1269
- ```
1270
-
1271
- ### 2. 캐싱 전략
1272
-
1273
- #### 다층 캐싱
1274
-
1275
- ```typescript
1276
- interface MultiLevelCache {
1277
- async get(key: string): Promise<any> {
1278
- // L1: 메모리 캐시
1279
- let value = this.memoryCache.get(key);
1280
- if (value) return value;
1281
-
1282
- // L2: Redis 캐시
1283
- value = await this.redis.get(key);
1284
- if (value) {
1285
- this.memoryCache.set(key, value);
1286
- return value;
1287
- }
1288
-
1289
- // L3: 데이터베이스
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
- 이 아키텍처 문서는 Memento MCP Server의 전체적인 구조와 설계 원칙을 설명합니다. 각 컴포넌트의 상세한 구현은 개별 개발 문서를 참조하세요.