memento-mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/.cursor/rules/cache-management.mdc +171 -0
  2. package/.cursor/rules/database-schema.mdc +344 -0
  3. package/.cursor/rules/deployment.mdc +596 -0
  4. package/.cursor/rules/error-logging.mdc +298 -0
  5. package/.cursor/rules/forgetting-algorithms.mdc +426 -0
  6. package/.cursor/rules/http-server.mdc +432 -0
  7. package/.cursor/rules/hybrid-search.mdc +424 -0
  8. package/.cursor/rules/implementation.mdc +369 -0
  9. package/.cursor/rules/lightweight-embedding.mdc +178 -0
  10. package/.cursor/rules/mcp-client-development.mdc +0 -0
  11. package/.cursor/rules/mcp-server-development.mdc +0 -0
  12. package/.cursor/rules/mcp-tools-architecture.mdc +205 -0
  13. package/.cursor/rules/memento-memory-rule.mdc +8 -0
  14. package/.cursor/rules/memento-project-overview.mdc +0 -0
  15. package/.cursor/rules/memory-algorithms.mdc +502 -0
  16. package/.cursor/rules/monitoring.mdc +622 -0
  17. package/.cursor/rules/performance-alerts.mdc +537 -0
  18. package/.cursor/rules/performance-monitoring.mdc +345 -0
  19. package/.cursor/rules/performance-optimization.mdc +563 -0
  20. package/.cursor/rules/project-structure.mdc +310 -0
  21. package/.cursor/rules/testing.mdc +473 -0
  22. package/.dockerignore +15 -0
  23. package/.eslintrc.json +34 -0
  24. package/.github/ISSUE_TEMPLATE/bug_report.md +51 -0
  25. package/.github/ISSUE_TEMPLATE/feature_request.md +45 -0
  26. package/.github/ISSUE_TEMPLATE/question.md +31 -0
  27. package/.github/PULL_REQUEST_TEMPLATE.md +97 -0
  28. package/AGENTS.md +28 -0
  29. package/CHANGELOG.md +416 -0
  30. package/CODE_OF_CONDUCT.md +62 -0
  31. package/CONTRIBUTING.md +165 -0
  32. package/DOCKER_SETUP_GUIDE.md +84 -0
  33. package/Dockerfile +90 -0
  34. package/INSTALL.en.md +303 -0
  35. package/INSTALL.md +303 -0
  36. package/README.en.md +330 -0
  37. package/README.md +427 -0
  38. package/backup/legacy-removal-20250930-201816/http-server-legacy.ts +1068 -0
  39. package/backup/legacy-removal-20250930-201816/rollback-to-legacy.ps1 +46 -0
  40. package/backup/legacy-removal-20250930-201816/rollback-to-legacy.sh +48 -0
  41. package/dist/algorithms/forgetting-algorithm.d.ts +90 -0
  42. package/dist/algorithms/forgetting-algorithm.d.ts.map +1 -0
  43. package/dist/algorithms/forgetting-algorithm.js +160 -0
  44. package/dist/algorithms/forgetting-algorithm.js.map +1 -0
  45. package/dist/algorithms/hybrid-search-engine.d.ts +108 -0
  46. package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -0
  47. package/dist/algorithms/hybrid-search-engine.js +384 -0
  48. package/dist/algorithms/hybrid-search-engine.js.map +1 -0
  49. package/dist/algorithms/search-engine.d.ts +64 -0
  50. package/dist/algorithms/search-engine.d.ts.map +1 -0
  51. package/dist/algorithms/search-engine.js +304 -0
  52. package/dist/algorithms/search-engine.js.map +1 -0
  53. package/dist/algorithms/search-ranking.d.ts +145 -0
  54. package/dist/algorithms/search-ranking.d.ts.map +1 -0
  55. package/dist/algorithms/search-ranking.js +311 -0
  56. package/dist/algorithms/search-ranking.js.map +1 -0
  57. package/dist/algorithms/spaced-repetition.d.ts +83 -0
  58. package/dist/algorithms/spaced-repetition.d.ts.map +1 -0
  59. package/dist/algorithms/spaced-repetition.js +153 -0
  60. package/dist/algorithms/spaced-repetition.js.map +1 -0
  61. package/dist/algorithms/vector-search-engine.d.ts +96 -0
  62. package/dist/algorithms/vector-search-engine.d.ts.map +1 -0
  63. package/dist/algorithms/vector-search-engine.js +410 -0
  64. package/dist/algorithms/vector-search-engine.js.map +1 -0
  65. package/dist/client/index.d.ts +55 -0
  66. package/dist/client/index.d.ts.map +1 -0
  67. package/dist/client/index.js +179 -0
  68. package/dist/client/index.js.map +1 -0
  69. package/dist/config/index.d.ts +20 -0
  70. package/dist/config/index.d.ts.map +1 -0
  71. package/dist/config/index.js +87 -0
  72. package/dist/config/index.js.map +1 -0
  73. package/dist/database/init.d.ts +7 -0
  74. package/dist/database/init.d.ts.map +1 -0
  75. package/dist/database/init.js +117 -0
  76. package/dist/database/init.js.map +1 -0
  77. package/dist/database/migrate.d.ts +6 -0
  78. package/dist/database/migrate.d.ts.map +1 -0
  79. package/dist/database/migrate.js +84 -0
  80. package/dist/database/migrate.js.map +1 -0
  81. package/dist/database/schema.sql +159 -0
  82. package/dist/npm-client/context-injector.d.ts +106 -0
  83. package/dist/npm-client/context-injector.d.ts.map +1 -0
  84. package/dist/npm-client/context-injector.js +296 -0
  85. package/dist/npm-client/context-injector.js.map +1 -0
  86. package/dist/npm-client/index.d.ts +42 -0
  87. package/dist/npm-client/index.d.ts.map +1 -0
  88. package/dist/npm-client/index.js +43 -0
  89. package/dist/npm-client/index.js.map +1 -0
  90. package/dist/npm-client/memento-client.d.ts +114 -0
  91. package/dist/npm-client/memento-client.d.ts.map +1 -0
  92. package/dist/npm-client/memento-client.js +391 -0
  93. package/dist/npm-client/memento-client.js.map +1 -0
  94. package/dist/npm-client/memory-manager.d.ts +137 -0
  95. package/dist/npm-client/memory-manager.d.ts.map +1 -0
  96. package/dist/npm-client/memory-manager.js +341 -0
  97. package/dist/npm-client/memory-manager.js.map +1 -0
  98. package/dist/npm-client/types.d.ts +216 -0
  99. package/dist/npm-client/types.d.ts.map +1 -0
  100. package/dist/npm-client/types.js +44 -0
  101. package/dist/npm-client/types.js.map +1 -0
  102. package/dist/npm-client/utils.d.ts +91 -0
  103. package/dist/npm-client/utils.d.ts.map +1 -0
  104. package/dist/npm-client/utils.js +351 -0
  105. package/dist/npm-client/utils.js.map +1 -0
  106. package/dist/scripts/copy-assets.d.ts +3 -0
  107. package/dist/scripts/copy-assets.d.ts.map +1 -0
  108. package/dist/scripts/copy-assets.js +31 -0
  109. package/dist/scripts/copy-assets.js.map +1 -0
  110. package/dist/server/http-server.d.ts +28 -0
  111. package/dist/server/http-server.d.ts.map +1 -0
  112. package/dist/server/http-server.js +930 -0
  113. package/dist/server/http-server.js.map +1 -0
  114. package/dist/server/index-backup.d.ts +5 -0
  115. package/dist/server/index-backup.d.ts.map +1 -0
  116. package/dist/server/index-backup.js +793 -0
  117. package/dist/server/index-backup.js.map +1 -0
  118. package/dist/server/index-refactored.d.ts +6 -0
  119. package/dist/server/index-refactored.d.ts.map +1 -0
  120. package/dist/server/index-refactored.js +206 -0
  121. package/dist/server/index-refactored.js.map +1 -0
  122. package/dist/server/index.d.ts +12 -0
  123. package/dist/server/index.d.ts.map +1 -0
  124. package/dist/server/index.js +301 -0
  125. package/dist/server/index.js.map +1 -0
  126. package/dist/server/simple-mcp-server.d.ts +8 -0
  127. package/dist/server/simple-mcp-server.d.ts.map +1 -0
  128. package/dist/server/simple-mcp-server.js +152 -0
  129. package/dist/server/simple-mcp-server.js.map +1 -0
  130. package/dist/services/async-optimizer.d.ts +136 -0
  131. package/dist/services/async-optimizer.d.ts.map +1 -0
  132. package/dist/services/async-optimizer.js +406 -0
  133. package/dist/services/async-optimizer.js.map +1 -0
  134. package/dist/services/batch-scheduler.d.ts +156 -0
  135. package/dist/services/batch-scheduler.d.ts.map +1 -0
  136. package/dist/services/batch-scheduler.js +612 -0
  137. package/dist/services/batch-scheduler.js.map +1 -0
  138. package/dist/services/cache-service.d.ts +168 -0
  139. package/dist/services/cache-service.d.ts.map +1 -0
  140. package/dist/services/cache-service.js +360 -0
  141. package/dist/services/cache-service.js.map +1 -0
  142. package/dist/services/database-optimizer.d.ts +110 -0
  143. package/dist/services/database-optimizer.d.ts.map +1 -0
  144. package/dist/services/database-optimizer.js +369 -0
  145. package/dist/services/database-optimizer.js.map +1 -0
  146. package/dist/services/embedding-provider-factory.d.ts +62 -0
  147. package/dist/services/embedding-provider-factory.d.ts.map +1 -0
  148. package/dist/services/embedding-provider-factory.js +152 -0
  149. package/dist/services/embedding-provider-factory.js.map +1 -0
  150. package/dist/services/embedding-service.d.ts +95 -0
  151. package/dist/services/embedding-service.d.ts.map +1 -0
  152. package/dist/services/embedding-service.js +276 -0
  153. package/dist/services/embedding-service.js.map +1 -0
  154. package/dist/services/error-logging-service.d.ts +134 -0
  155. package/dist/services/error-logging-service.d.ts.map +1 -0
  156. package/dist/services/error-logging-service.js +271 -0
  157. package/dist/services/error-logging-service.js.map +1 -0
  158. package/dist/services/forgetting-policy-service.d.ts +94 -0
  159. package/dist/services/forgetting-policy-service.d.ts.map +1 -0
  160. package/dist/services/forgetting-policy-service.js +233 -0
  161. package/dist/services/forgetting-policy-service.js.map +1 -0
  162. package/dist/services/gemini-embedding-service.d.ts +82 -0
  163. package/dist/services/gemini-embedding-service.d.ts.map +1 -0
  164. package/dist/services/gemini-embedding-service.js +232 -0
  165. package/dist/services/gemini-embedding-service.js.map +1 -0
  166. package/dist/services/lightweight-embedding-service.d.ts +95 -0
  167. package/dist/services/lightweight-embedding-service.d.ts.map +1 -0
  168. package/dist/services/lightweight-embedding-service.js +263 -0
  169. package/dist/services/lightweight-embedding-service.js.map +1 -0
  170. package/dist/services/memory-embedding-service.d.ts +69 -0
  171. package/dist/services/memory-embedding-service.d.ts.map +1 -0
  172. package/dist/services/memory-embedding-service.js +223 -0
  173. package/dist/services/memory-embedding-service.js.map +1 -0
  174. package/dist/services/minilm-embedding-service.d.ts +92 -0
  175. package/dist/services/minilm-embedding-service.d.ts.map +1 -0
  176. package/dist/services/minilm-embedding-service.js +216 -0
  177. package/dist/services/minilm-embedding-service.js.map +1 -0
  178. package/dist/services/performance-alert-service.d.ts +142 -0
  179. package/dist/services/performance-alert-service.d.ts.map +1 -0
  180. package/dist/services/performance-alert-service.js +366 -0
  181. package/dist/services/performance-alert-service.js.map +1 -0
  182. package/dist/services/performance-monitor.d.ts +144 -0
  183. package/dist/services/performance-monitor.d.ts.map +1 -0
  184. package/dist/services/performance-monitor.js +416 -0
  185. package/dist/services/performance-monitor.js.map +1 -0
  186. package/dist/services/performance-monitoring-integration.d.ts +77 -0
  187. package/dist/services/performance-monitoring-integration.d.ts.map +1 -0
  188. package/dist/services/performance-monitoring-integration.js +177 -0
  189. package/dist/services/performance-monitoring-integration.js.map +1 -0
  190. package/dist/services/unified-embedding-service.d.ts +75 -0
  191. package/dist/services/unified-embedding-service.d.ts.map +1 -0
  192. package/dist/services/unified-embedding-service.js +211 -0
  193. package/dist/services/unified-embedding-service.js.map +1 -0
  194. package/dist/test/debug-http-v2.d.ts +5 -0
  195. package/dist/test/debug-http-v2.d.ts.map +1 -0
  196. package/dist/test/debug-http-v2.js +28 -0
  197. package/dist/test/debug-http-v2.js.map +1 -0
  198. package/dist/test/performance-benchmark.d.ts +57 -0
  199. package/dist/test/performance-benchmark.d.ts.map +1 -0
  200. package/dist/test/performance-benchmark.js +427 -0
  201. package/dist/test/performance-benchmark.js.map +1 -0
  202. package/dist/test/test-alerts-direct.d.ts +7 -0
  203. package/dist/test/test-alerts-direct.d.ts.map +1 -0
  204. package/dist/test/test-alerts-direct.js +101 -0
  205. package/dist/test/test-alerts-direct.js.map +1 -0
  206. package/dist/test/test-batch-scheduler.d.ts +2 -0
  207. package/dist/test/test-batch-scheduler.d.ts.map +1 -0
  208. package/dist/test/test-batch-scheduler.js +156 -0
  209. package/dist/test/test-batch-scheduler.js.map +1 -0
  210. package/dist/test/test-client.d.ts +5 -0
  211. package/dist/test/test-client.d.ts.map +1 -0
  212. package/dist/test/test-client.js +86 -0
  213. package/dist/test/test-client.js.map +1 -0
  214. package/dist/test/test-embedding.d.ts +6 -0
  215. package/dist/test/test-embedding.d.ts.map +1 -0
  216. package/dist/test/test-embedding.js +142 -0
  217. package/dist/test/test-embedding.js.map +1 -0
  218. package/dist/test/test-error-logging.d.ts +7 -0
  219. package/dist/test/test-error-logging.d.ts.map +1 -0
  220. package/dist/test/test-error-logging.js +105 -0
  221. package/dist/test/test-error-logging.js.map +1 -0
  222. package/dist/test/test-forgetting.d.ts +6 -0
  223. package/dist/test/test-forgetting.d.ts.map +1 -0
  224. package/dist/test/test-forgetting.js +154 -0
  225. package/dist/test/test-forgetting.js.map +1 -0
  226. package/dist/test/test-gemini-embedding.d.ts +7 -0
  227. package/dist/test/test-gemini-embedding.d.ts.map +1 -0
  228. package/dist/test/test-gemini-embedding.js +134 -0
  229. package/dist/test/test-gemini-embedding.js.map +1 -0
  230. package/dist/test/test-http-server-v2-simple.d.ts +6 -0
  231. package/dist/test/test-http-server-v2-simple.d.ts.map +1 -0
  232. package/dist/test/test-http-server-v2-simple.js +131 -0
  233. package/dist/test/test-http-server-v2-simple.js.map +1 -0
  234. package/dist/test/test-http-server-v2.d.ts +7 -0
  235. package/dist/test/test-http-server-v2.d.ts.map +1 -0
  236. package/dist/test/test-http-server-v2.js +529 -0
  237. package/dist/test/test-http-server-v2.js.map +1 -0
  238. package/dist/test/test-lightweight-embedding.d.ts +6 -0
  239. package/dist/test/test-lightweight-embedding.d.ts.map +1 -0
  240. package/dist/test/test-lightweight-embedding.js +189 -0
  241. package/dist/test/test-lightweight-embedding.js.map +1 -0
  242. package/dist/test/test-m1-completion.d.ts +7 -0
  243. package/dist/test/test-m1-completion.d.ts.map +1 -0
  244. package/dist/test/test-m1-completion.js +124 -0
  245. package/dist/test/test-m1-completion.js.map +1 -0
  246. package/dist/test/test-memory-injection-prompt.d.ts +2 -0
  247. package/dist/test/test-memory-injection-prompt.d.ts.map +1 -0
  248. package/dist/test/test-memory-injection-prompt.js +299 -0
  249. package/dist/test/test-memory-injection-prompt.js.map +1 -0
  250. package/dist/test/test-performance-alerts.d.ts +7 -0
  251. package/dist/test/test-performance-alerts.d.ts.map +1 -0
  252. package/dist/test/test-performance-alerts.js +109 -0
  253. package/dist/test/test-performance-alerts.js.map +1 -0
  254. package/dist/test/test-performance-monitor.d.ts +2 -0
  255. package/dist/test/test-performance-monitor.d.ts.map +1 -0
  256. package/dist/test/test-performance-monitor.js +182 -0
  257. package/dist/test/test-performance-monitor.js.map +1 -0
  258. package/dist/test/test-performance-monitoring.d.ts +6 -0
  259. package/dist/test/test-performance-monitoring.d.ts.map +1 -0
  260. package/dist/test/test-performance-monitoring.js +156 -0
  261. package/dist/test/test-performance-monitoring.js.map +1 -0
  262. package/dist/test/test-search.d.ts +5 -0
  263. package/dist/test/test-search.d.ts.map +1 -0
  264. package/dist/test/test-search.js +141 -0
  265. package/dist/test/test-search.js.map +1 -0
  266. package/dist/test/test-simple-alerts.d.ts +6 -0
  267. package/dist/test/test-simple-alerts.d.ts.map +1 -0
  268. package/dist/test/test-simple-alerts.js +106 -0
  269. package/dist/test/test-simple-alerts.js.map +1 -0
  270. package/dist/test/test-vector-search-engine.d.ts +2 -0
  271. package/dist/test/test-vector-search-engine.d.ts.map +1 -0
  272. package/dist/test/test-vector-search-engine.js +225 -0
  273. package/dist/test/test-vector-search-engine.js.map +1 -0
  274. package/dist/tools/base-tool.d.ts +64 -0
  275. package/dist/tools/base-tool.d.ts.map +1 -0
  276. package/dist/tools/base-tool.js +158 -0
  277. package/dist/tools/base-tool.js.map +1 -0
  278. package/dist/tools/cleanup-memory-tool.d.ts +10 -0
  279. package/dist/tools/cleanup-memory-tool.d.ts.map +1 -0
  280. package/dist/tools/cleanup-memory-tool.js +66 -0
  281. package/dist/tools/cleanup-memory-tool.js.map +1 -0
  282. package/dist/tools/database-optimize-tool.d.ts +10 -0
  283. package/dist/tools/database-optimize-tool.d.ts.map +1 -0
  284. package/dist/tools/database-optimize-tool.js +64 -0
  285. package/dist/tools/database-optimize-tool.js.map +1 -0
  286. package/dist/tools/error-stats.d.ts +93 -0
  287. package/dist/tools/error-stats.d.ts.map +1 -0
  288. package/dist/tools/error-stats.js +115 -0
  289. package/dist/tools/error-stats.js.map +1 -0
  290. package/dist/tools/forget-tool.d.ts +63 -0
  291. package/dist/tools/forget-tool.d.ts.map +1 -0
  292. package/dist/tools/forget-tool.js +340 -0
  293. package/dist/tools/forget-tool.js.map +1 -0
  294. package/dist/tools/forgetting-stats-tool.d.ts +10 -0
  295. package/dist/tools/forgetting-stats-tool.d.ts.map +1 -0
  296. package/dist/tools/forgetting-stats-tool.js +37 -0
  297. package/dist/tools/forgetting-stats-tool.js.map +1 -0
  298. package/dist/tools/index.d.ts +33 -0
  299. package/dist/tools/index.d.ts.map +1 -0
  300. package/dist/tools/index.js +55 -0
  301. package/dist/tools/index.js.map +1 -0
  302. package/dist/tools/memory-injection-prompt.d.ts +31 -0
  303. package/dist/tools/memory-injection-prompt.d.ts.map +1 -0
  304. package/dist/tools/memory-injection-prompt.js +203 -0
  305. package/dist/tools/memory-injection-prompt.js.map +1 -0
  306. package/dist/tools/performance-alerts.d.ts +127 -0
  307. package/dist/tools/performance-alerts.d.ts.map +1 -0
  308. package/dist/tools/performance-alerts.js +208 -0
  309. package/dist/tools/performance-alerts.js.map +1 -0
  310. package/dist/tools/performance-stats-tool.d.ts +10 -0
  311. package/dist/tools/performance-stats-tool.d.ts.map +1 -0
  312. package/dist/tools/performance-stats-tool.js +38 -0
  313. package/dist/tools/performance-stats-tool.js.map +1 -0
  314. package/dist/tools/pin-tool.d.ts +39 -0
  315. package/dist/tools/pin-tool.d.ts.map +1 -0
  316. package/dist/tools/pin-tool.js +211 -0
  317. package/dist/tools/pin-tool.js.map +1 -0
  318. package/dist/tools/recall-tool.d.ts +27 -0
  319. package/dist/tools/recall-tool.d.ts.map +1 -0
  320. package/dist/tools/recall-tool.js +335 -0
  321. package/dist/tools/recall-tool.js.map +1 -0
  322. package/dist/tools/remember-tool.d.ts +10 -0
  323. package/dist/tools/remember-tool.d.ts.map +1 -0
  324. package/dist/tools/remember-tool.js +101 -0
  325. package/dist/tools/remember-tool.js.map +1 -0
  326. package/dist/tools/resolve-error.d.ts +54 -0
  327. package/dist/tools/resolve-error.d.ts.map +1 -0
  328. package/dist/tools/resolve-error.js +63 -0
  329. package/dist/tools/resolve-error.js.map +1 -0
  330. package/dist/tools/tool-registry.d.ts +134 -0
  331. package/dist/tools/tool-registry.d.ts.map +1 -0
  332. package/dist/tools/tool-registry.js +337 -0
  333. package/dist/tools/tool-registry.js.map +1 -0
  334. package/dist/tools/types.d.ts +56 -0
  335. package/dist/tools/types.d.ts.map +1 -0
  336. package/dist/tools/types.js +23 -0
  337. package/dist/tools/types.js.map +1 -0
  338. package/dist/tools/unpin-tool.d.ts +43 -0
  339. package/dist/tools/unpin-tool.d.ts.map +1 -0
  340. package/dist/tools/unpin-tool.js +233 -0
  341. package/dist/tools/unpin-tool.js.map +1 -0
  342. package/dist/types/embedding.types.d.ts +65 -0
  343. package/dist/types/embedding.types.d.ts.map +1 -0
  344. package/dist/types/embedding.types.js +6 -0
  345. package/dist/types/embedding.types.js.map +1 -0
  346. package/dist/types/index.d.ts +103 -0
  347. package/dist/types/index.d.ts.map +1 -0
  348. package/dist/types/index.js +5 -0
  349. package/dist/types/index.js.map +1 -0
  350. package/dist/utils/database.d.ts +62 -0
  351. package/dist/utils/database.d.ts.map +1 -0
  352. package/dist/utils/database.js +399 -0
  353. package/dist/utils/database.js.map +1 -0
  354. package/dist/utils/stopwords.d.ts +18 -0
  355. package/dist/utils/stopwords.d.ts.map +1 -0
  356. package/dist/utils/stopwords.js +117 -0
  357. package/dist/utils/stopwords.js.map +1 -0
  358. package/docker-compose.dev.yml +50 -0
  359. package/docker-compose.prod.yml +77 -0
  360. package/docker-compose.yml +43 -0
  361. package/docs/en/Memento-Goals.md +217 -0
  362. package/docs/en/Memento-M1-DetailSpecs.md +130 -0
  363. package/docs/en/Memento-Milestones.md +135 -0
  364. package/docs/en/Search-Ranking-Memory-Decay-Formulas.md +177 -0
  365. package/docs/en/api-reference.md +658 -0
  366. package/docs/en/architecture.md +1302 -0
  367. package/docs/en/developer-guide.md +1005 -0
  368. package/docs/en/user-manual.md +595 -0
  369. package/docs/ko/Memento-Goals.md +217 -0
  370. package/docs/ko/Memento-M1-DetailSpecs.md +130 -0
  371. package/docs/ko/Memento-Milestones.md +134 -0
  372. package/docs/ko/Search-Ranking-Memory-Decay-Formulas.md +177 -0
  373. package/docs/ko/api-reference.md +658 -0
  374. package/docs/ko/architecture.md +1302 -0
  375. package/docs/ko/developer-guide.md +1006 -0
  376. package/docs/ko/embedding-api-reference.md +122 -0
  377. package/docs/ko/embedding-configuration.md +62 -0
  378. package/docs/ko/embedding-performance-benchmark.md +62 -0
  379. package/docs/ko/embedding-service-guide.md +314 -0
  380. package/docs/ko/user-manual.md +595 -0
  381. package/env.example +49 -0
  382. package/install.sh +191 -0
  383. package/mcp-http-client.js +218 -0
  384. package/mcp.json +0 -0
  385. package/package.json +125 -0
  386. package/packages/mcp-client/docs/API-REFERENCE.md +560 -0
  387. package/packages/mcp-client/docs/BEST-PRACTICES.md +564 -0
  388. package/packages/mcp-client/docs/MIGRATION-GUIDE.md +344 -0
  389. package/packages/mcp-client/docs/PERFORMANCE-GUIDE.md +476 -0
  390. package/packages/mcp-client/docs/TROUBLESHOOTING.md +564 -0
  391. package/packages/mcp-client/package-lock.json +907 -0
  392. package/packages/mcp-client/package.json +58 -0
  393. package/packages/mcp-client/performance-optimizer.js +428 -0
  394. package/packages/mcp-client/test-basic.js +65 -0
  395. package/packages/mcp-client/test-integration.js +366 -0
  396. package/scripts/auto-setup.js +234 -0
  397. package/scripts/backup-daily.bat +28 -0
  398. package/scripts/backup-embeddings.js +108 -0
  399. package/scripts/check-db-integrity.js +93 -0
  400. package/scripts/debug-embeddings.js +184 -0
  401. package/scripts/direct-sql-migration.sql +36 -0
  402. package/scripts/docker-migration.sh +105 -0
  403. package/scripts/fix-migration.js +93 -0
  404. package/scripts/fix-vector-dimensions.js +206 -0
  405. package/scripts/migrate-embedding-data.js +307 -0
  406. package/scripts/regenerate-embeddings.js +144 -0
  407. package/scripts/restore-legacy.ps1 +60 -0
  408. package/scripts/restore-legacy.sh +62 -0
  409. package/scripts/run-migration.js +122 -0
  410. package/scripts/safe-migration.js +150 -0
  411. package/scripts/simple-migrate.js +41 -0
  412. package/scripts/simple-update.js +123 -0
  413. package/scripts/start-container.sh +10 -0
  414. package/src/algorithms/forgetting-algorithm.spec.ts +538 -0
  415. package/src/algorithms/forgetting-algorithm.ts +243 -0
  416. package/src/algorithms/hybrid-search-engine.spec.ts +484 -0
  417. package/src/algorithms/hybrid-search-engine.ts +489 -0
  418. package/src/algorithms/search-engine.spec.ts +429 -0
  419. package/src/algorithms/search-engine.ts +392 -0
  420. package/src/algorithms/search-ranking.spec.ts +293 -0
  421. package/src/algorithms/search-ranking.ts +407 -0
  422. package/src/algorithms/spaced-repetition.spec.ts +510 -0
  423. package/src/algorithms/spaced-repetition.ts +238 -0
  424. package/src/algorithms/vector-search-engine.ts +505 -0
  425. package/src/client/index.spec.ts +427 -0
  426. package/src/client/index.ts +222 -0
  427. package/src/config/index.spec.ts +339 -0
  428. package/src/config/index.ts +106 -0
  429. package/src/database/init.spec.ts +239 -0
  430. package/src/database/init.ts +130 -0
  431. package/src/database/migrate.spec.ts +293 -0
  432. package/src/database/migrate.ts +94 -0
  433. package/src/database/migrations/001_add_embedding_metadata.sql +29 -0
  434. package/src/database/schema.sql +159 -0
  435. package/src/npm-client/context-injector.spec.ts +335 -0
  436. package/src/npm-client/context-injector.ts +412 -0
  437. package/src/npm-client/index.spec.ts +108 -0
  438. package/src/npm-client/index.ts +96 -0
  439. package/src/npm-client/memento-client.spec.ts +549 -0
  440. package/src/npm-client/memento-client.ts +501 -0
  441. package/src/npm-client/memory-manager.spec.ts +374 -0
  442. package/src/npm-client/memory-manager.ts +414 -0
  443. package/src/npm-client/types.spec.ts +427 -0
  444. package/src/npm-client/types.ts +296 -0
  445. package/src/npm-client/utils.spec.ts +355 -0
  446. package/src/npm-client/utils.ts +423 -0
  447. package/src/scripts/copy-assets.js +37 -0
  448. package/src/server/http-server.spec.ts +648 -0
  449. package/src/server/http-server.ts +1030 -0
  450. package/src/server/index-backup.ts +875 -0
  451. package/src/server/index-refactored.ts +237 -0
  452. package/src/server/index.spec.ts +281 -0
  453. package/src/server/index.ts +347 -0
  454. package/src/server/simple-mcp-server.spec.ts +207 -0
  455. package/src/server/simple-mcp-server.ts +173 -0
  456. package/src/services/async-optimizer.spec.ts +569 -0
  457. package/src/services/async-optimizer.ts +484 -0
  458. package/src/services/batch-scheduler.ts +759 -0
  459. package/src/services/cache-service.spec.ts +372 -0
  460. package/src/services/cache-service.ts +434 -0
  461. package/src/services/database-optimizer.spec.ts +344 -0
  462. package/src/services/database-optimizer.ts +450 -0
  463. package/src/services/embedding-provider-factory.ts +173 -0
  464. package/src/services/embedding-service.spec.ts +342 -0
  465. package/src/services/embedding-service.ts +333 -0
  466. package/src/services/error-logging-service.spec.ts +416 -0
  467. package/src/services/error-logging-service.ts +383 -0
  468. package/src/services/forgetting-policy-service.spec.ts +140 -0
  469. package/src/services/forgetting-policy-service.ts +334 -0
  470. package/src/services/gemini-embedding-service.spec.ts +463 -0
  471. package/src/services/gemini-embedding-service.ts +283 -0
  472. package/src/services/lightweight-embedding-service.spec.ts +458 -0
  473. package/src/services/lightweight-embedding-service.ts +324 -0
  474. package/src/services/memory-embedding-service.spec.ts +417 -0
  475. package/src/services/memory-embedding-service.ts +289 -0
  476. package/src/services/minilm-embedding-service.spec.ts +104 -0
  477. package/src/services/minilm-embedding-service.ts +262 -0
  478. package/src/services/performance-alert-service.spec.ts +517 -0
  479. package/src/services/performance-alert-service.ts +477 -0
  480. package/src/services/performance-monitor.spec.ts +401 -0
  481. package/src/services/performance-monitor.ts +532 -0
  482. package/src/services/performance-monitoring-integration.spec.ts +478 -0
  483. package/src/services/performance-monitoring-integration.ts.bak +276 -0
  484. package/src/services/unified-embedding-service.spec.ts +224 -0
  485. package/src/services/unified-embedding-service.ts +255 -0
  486. package/src/test/debug-http-v2.ts +30 -0
  487. package/src/test/embedding-integration-test.spec.ts +295 -0
  488. package/src/test/embedding-integration-test.ts +295 -0
  489. package/src/test/embedding-performance-benchmark.spec.ts +354 -0
  490. package/src/test/embedding-performance-benchmark.ts +312 -0
  491. package/src/test/performance-benchmark.ts +565 -0
  492. package/src/test/test-alerts-direct.ts +136 -0
  493. package/src/test/test-batch-scheduler-simple.spec.ts +122 -0
  494. package/src/test/test-batch-scheduler.spec.ts +453 -0
  495. package/src/test/test-batch-scheduler.ts +182 -0
  496. package/src/test/test-client.ts +97 -0
  497. package/src/test/test-embedding.ts +153 -0
  498. package/src/test/test-error-handling.spec.ts +575 -0
  499. package/src/test/test-error-logging.ts +117 -0
  500. package/src/test/test-forgetting.ts +162 -0
  501. package/src/test/test-gemini-embedding.ts +159 -0
  502. package/src/test/test-http-server-v2-simple.ts +147 -0
  503. package/src/test/test-http-server-v2.ts +586 -0
  504. package/src/test/test-hybrid-search-engine.spec.ts +521 -0
  505. package/src/test/test-integration-fixed.spec.ts +612 -0
  506. package/src/test/test-integration.spec.ts +463 -0
  507. package/src/test/test-lightweight-embedding.ts +208 -0
  508. package/src/test/test-m1-completion.spec.ts +614 -0
  509. package/src/test/test-m1-completion.ts +141 -0
  510. package/src/test/test-m1-integration.spec.ts +514 -0
  511. package/src/test/test-memory-injection-prompt.spec.ts +650 -0
  512. package/src/test/test-memory-injection-prompt.ts +391 -0
  513. package/src/test/test-performance-alerts.ts +125 -0
  514. package/src/test/test-performance-monitor-updates.spec.ts +490 -0
  515. package/src/test/test-performance-monitor.spec.ts +284 -0
  516. package/src/test/test-performance-monitor.ts +228 -0
  517. package/src/test/test-performance-monitoring.ts +171 -0
  518. package/src/test/test-search.ts +151 -0
  519. package/src/test/test-simple-alerts.ts +136 -0
  520. package/src/test/test-vector-search-engine.spec.ts +408 -0
  521. package/src/test/test-vector-search-engine.ts +303 -0
  522. package/src/tools/base-tool.ts +189 -0
  523. package/src/tools/cleanup-memory-tool.ts +77 -0
  524. package/src/tools/database-optimize-tool.ts +79 -0
  525. package/src/tools/error-stats.ts +119 -0
  526. package/src/tools/forget-tool.spec.ts +613 -0
  527. package/src/tools/forget-tool.ts +454 -0
  528. package/src/tools/forgetting-stats-tool.ts +47 -0
  529. package/src/tools/index.ts +71 -0
  530. package/src/tools/memory-injection-prompt.ts +257 -0
  531. package/src/tools/performance-alerts.ts +226 -0
  532. package/src/tools/performance-stats-tool.ts +48 -0
  533. package/src/tools/pin-tool.spec.ts +497 -0
  534. package/src/tools/pin-tool.ts +277 -0
  535. package/src/tools/recall-tool.spec.ts +475 -0
  536. package/src/tools/recall-tool.ts +389 -0
  537. package/src/tools/remember-tool.spec.ts +469 -0
  538. package/src/tools/remember-tool.ts +112 -0
  539. package/src/tools/resolve-error.ts +69 -0
  540. package/src/tools/tool-registry.ts +417 -0
  541. package/src/tools/types.ts +63 -0
  542. package/src/tools/unpin-tool.spec.ts +549 -0
  543. package/src/tools/unpin-tool.ts +306 -0
  544. package/src/types/embedding.types.ts +78 -0
  545. package/src/types/index.spec.ts +420 -0
  546. package/src/types/index.ts +117 -0
  547. package/src/utils/database.spec.ts +77 -0
  548. package/src/utils/database.ts +458 -0
  549. package/src/utils/stopwords.ts +128 -0
  550. package/start-docker-setup.bat +38 -0
  551. package/static/logo.png +0 -0
  552. package/static/memento_logo.svg +2 -0
  553. package/test-docker.js +103 -0
  554. package/tsconfig.json +46 -0
  555. package/vitest.config.ts +23 -0
@@ -0,0 +1,217 @@
1
+ # Memento Goals
2
+
3
+ ## 1. 목표 정리
4
+
5
+ **목표**: 에이전트가 대화/작업 맥락을 잃지 않도록, 사람의 기억 체계(작업기억·일화기억·의미기억·절차기억)를 모사한 스토리지+검색+요약+망각 메커니즘을 제공.
6
+
7
+ **비목표**: 초대규모 RAG 플랫폼, 범용 데이터레이크. 초기엔 개인/워크스페이스 단위의 장기 기억과 대화-세션 간 전이에 집중.
8
+
9
+ ### 사람의 기억 모델에 대한 근거
10
+
11
+ - **일화(episodic)/의미(semantic) 분리**: Tulving 계보 – 일화는 사건, 의미는 지식. 두 체계는 상호의존적. [PMC](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2657600/) +1
12
+
13
+ - **작업기억(working memory)**: 중앙집행·음운고리·시공간 메모리 구성으로 "현재 처리 중인 정보"를 관리. [Simply Psychology](https://www.simplypsychology.org/working-memory.html) +1
14
+
15
+ - **망각/간격반복**: 에빙하우스 곡선과 "주기적 리마인드"가 장기 유지에 유리. [PMC](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2657600/) +1
16
+
17
+ ### MCP 적용 근거
18
+
19
+ MCP는 Tools/Resources/Prompts를 표준으로 노출하고, 클라이언트(Claude, ChatGPT, Cursor 등)에서 쉽게 연결 가능. [WorkOS](https://workos.com/) +3, [Model Context Protocol](https://modelcontextprotocol.io/) +3
20
+
21
+ ## 2. 시스템 개요(컴포넌트)
22
+
23
+ ### Memory MCP Server
24
+
25
+ - **프로토콜**: MCP(spec 2025-03-26)
26
+ - **인터페이스**: tools(기억 쓰기·검색·고정·삭제 등), resources(읽기 전용 뷰), prompts(컨텍스트 주입 템플릿). [Model Context Protocol](https://modelcontextprotocol.io/) +1
27
+
28
+ ### 스토리지
29
+
30
+ - **기본**: PostgreSQL + pgvector(벡터/메타/트랜잭션 같이 관리). [GitHub](https://github.com/pgvector/pgvector) +1
31
+ - **대안**: SQLite+FTS5(+lancedb)로 임베디드, 또는 Qdrant/Milvus로 분리
32
+
33
+ ### 임베딩 & 요약
34
+
35
+ 텍스트 임베딩 모델(문장 임베딩), "정보 압축 요약기(map-reduce)" 파이프라인.
36
+
37
+ ### 스케줄러/워커
38
+
39
+ "수면 통합" 배치(야간 클러스터링·요약·규칙 추출), "망각/리뷰" 배치(재노출·삭제 후보 선정).
40
+
41
+ ## 3. 데이터 모델(사람 기억에 대응)
42
+
43
+ ### 핵심 테이블
44
+
45
+ #### memory_item
46
+ - `id`, `type`(working|episodic|semantic|procedural), `title`, `content`, `source`(chat|tool|file|url), `agent_id`, `user_id`, `project_id`
47
+ - `created_at`, `last_accessed_at`, `importance`(0~1), `pinned`(bool), `privacy_scope`(private|team|public), `origin_trace`(json)
48
+
49
+ #### memory_embedding
50
+ - `memory_id` FK, `embedding` vector, `dim`
51
+
52
+ #### memory_tag (N:N)
53
+ - 태그(예: tech:mariadb, pref:coffee, task:ads-settlement)
54
+
55
+ #### memory_link
56
+ - 기억 간 관계(cause_of, derived_from, duplicates, contradicts) – 의미적 연결망
57
+
58
+ #### feedback_event
59
+ - `memory_id`, `event`(used|edited|neglected|helpful|not_helpful), `score`, `ts`
60
+
61
+ ### 작업기억(working) 버퍼
62
+
63
+ #### wm_buffer
64
+ - `session_id`, `items`(json), `token_budget`, `expires_at`
65
+
66
+ 세션 종료/토큰 한도 초과 시 **일화(episodic)**으로 스냅샷 전환.
67
+
68
+ ## 4. 검색·랭킹·망각(수식 포함)
69
+
70
+ ### 4.1 검색 스코어
71
+
72
+ 최종 점수 S:
73
+
74
+ ```
75
+ S = α * relevance + β * recency + γ * importance + δ * usage - ε * duplication_penalty
76
+ ```
77
+
78
+ - **relevance**: 코사인 유사도(임베딩) + keyword TF-IDF 보정
79
+ - **recency**: `exp(-λ * age_days)` (에빙하우스 계열 망각 함수를 응용; λ는 도메인별 튜닝) [PMC](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2657600/) +1
80
+ - **importance**: 명시/추론("사용자 선호·규칙·장기목표"는 가중치↑)
81
+ - **usage**: 조회·인용·재사용 빈도 로그 스케일
82
+ - **duplication_penalty**: 군집 내 유사 항목 중복 감점
83
+
84
+ ### 4.2 망각·간격반복
85
+
86
+ - **소프트 삭제 후보 큐**: S가 낮고 `last_accessed_at` 오래된 항목 중 비핀(pinned)·비정책 항목
87
+ - **리텐션 정책**: 태그/스코프별 TTL(예: wm: 48시간, episodic: 90일, semantic: 무기한)
88
+ - **간격반복**: 중요도 상위 항목은 리뷰 이벤트(카드 형태 리마인드)를 생성해 재노출
89
+
90
+ ### 4.3 의미 통합("수면 통합")
91
+
92
+ 최근 episodic을 군집화→ 충돌/일관성 검사→ 규칙·사실 형태의 semantic 생성
93
+
94
+ CLS 가설(해마-네오코텍스 보완 학습)을 모티프로 "빠른 일화→느린 의미 통합"을 구현. [PubMed](https://pubmed.ncbi.nlm.nih.gov/) +1
95
+
96
+ ## 5. MCP 인터페이스 설계(도구/리소스/프롬프트)
97
+
98
+ ### 5.1 tools (요약된 시그니처)
99
+
100
+ #### remember
101
+ - **입력**: `content`, `type?`, `tags?`, `importance?`, `source?`, `privacy_scope?`
102
+ - **출력**: `memory_id`
103
+
104
+ #### recall
105
+ - **입력**: `query`, `filters?`(type/tags/time/project/agent), `limit?`
106
+ - **출력**: `items[]`(snippet, score, recall_reason)
107
+
108
+ #### pin / unpin
109
+
110
+ #### forget
111
+ - 하드/소프트 삭제 옵션, GDPR식 "지우기 권리" 지원
112
+
113
+ #### summarize_thread
114
+ - 현재 세션 로그→ wm_buffer 요약→ episodic 저장
115
+
116
+ #### link
117
+ - 기억 간 관계 생성(원인·파생·중복·모순)
118
+
119
+ #### export
120
+ - NDJSON/Markdown/CSV 내보내기
121
+
122
+ #### feedback
123
+ - 사용성/정확성 피드백 수집(helpful, not_helpful, 정답 첨부)
124
+
125
+ **MCP 스펙 근거**: 툴/리소스/프롬프트를 표준화해 클라이언트가 자동 발견·호출·구성. [Model Context Protocol](https://modelcontextprotocol.io/) +1
126
+
127
+ ### 5.2 resources
128
+
129
+ - `memory/{id}`: 읽기 전용 단일 뷰
130
+ - `memory/search?query=...`: 최근 검색 결과 캐시 리소스(클라이언트 사이드 프리뷰에 유용)
131
+
132
+ ### 5.3 prompts
133
+
134
+ #### memory_injection
135
+ - **설명**: "이번 턴 답변 전에 '상위 5개 관련 기억 요약'을 컨텍스트로 주입"
136
+ - **파라미터**: `query`, `token_budget`
137
+
138
+ MCP Prompts 기능으로 에이전트가 쉽게 가져다 씀. [Model Context Protocol](https://modelcontextprotocol.io/)
139
+
140
+ ## 6. 에이전트 실행 플로우
141
+
142
+ 1. **WM 적재**: 현재 사용자 메시지 + 직전 n턴 요약을 `wm_buffer`에 정리
143
+ 2. **질의 구성**: `query = user_msg + task + wm_summary`
144
+ 3. **recall 호출**:
145
+ - 필터: `project_id`, `tags`, `type in {semantic, episodic}`
146
+ - 1차 ANN(벡터) → 2차 rerank(BM25/keyword + rule match)
147
+ - 중복 제거 & 압축: map-reduce 요약, 충돌은 `link(contradicts)`로 기록
148
+ 4. **프롬프트 주입**: `prompts.memory_injection`으로 상위 K개를 투입
149
+ 5. **답변 생성 후**:
150
+ - `remember`로 새로운 사실/선호/결정 기록
151
+ - `feedback(helpful)` 신호 반영
152
+ 6. **배치 작업(야간)**: 군집화·요약 통합·망각/리마인드 스케줄링
153
+
154
+ ## 7. 최소기능(MVP) 스펙
155
+
156
+ - 기억 쓰기/읽기/검색/핀/삭제 툴
157
+ - 일화/의미 두 타입만 우선 지원(작업기억은 세션 캐시로)
158
+ - **스코어**: `S = 0.5*relevance + 0.2*recency + 0.2*importance + 0.1*usage`
159
+ - **리텐션**: episodic 90d, semantic 무기한, wm 48h
160
+ - **저장소**: Postgres+pgvector, ivfflat 인덱스, cosine 거리. [GitHub](https://github.com/pgvector/pgvector) +1
161
+ - MCP `prompts.memory_injection` 1종
162
+
163
+ ## 8. 예시: TypeScript MCP 서버 스켈레톤
164
+
165
+ ```typescript
166
+ // package: mcp-memory-server
167
+ import { Server } from "@modelcontextprotocol/sdk/server";
168
+ import { z } from "zod";
169
+ import { recall, remember, pin, unpin, forget, summarizeThread, link, exportMem, feedback } from "./tools";
170
+
171
+ const server = new Server({ name: "mcp-memory", version: "0.1.0" });
172
+
173
+ // Tools
174
+ server.tool("remember", {
175
+ schema: z.object({
176
+ content: z.string(),
177
+ type: z.enum(["episodic","semantic"]).default("episodic"),
178
+ tags: z.array(z.string()).optional(),
179
+ importance: z.number().min(0).max(1).default(0.5),
180
+ source: z.string().optional(),
181
+ privacy_scope: z.enum(["private","team","public"]).default("private")
182
+ }),
183
+ handler: remember
184
+ });
185
+
186
+ server.tool("recall", {
187
+ schema: z.object({
188
+ query: z.string(),
189
+ filters: z.object({
190
+ type: z.array(z.enum(["episodic","semantic"])).optional(),
191
+ tags: z.array(z.string()).optional(),
192
+ project_id: z.string().optional(),
193
+ time_from: z.string().optional(),
194
+ time_to: z.string().optional()
195
+ }).optional(),
196
+ limit: z.number().default(8)
197
+ }),
198
+ handler: recall
199
+ });
200
+
201
+ // ... pin/unpin/forget/summarizeThread/link/export/feedback 등록 ...
202
+
203
+ // Resources
204
+ server.resource("memory/{id}", async (params) => {/* read-only view */});
205
+
206
+ // Prompts
207
+ server.prompt("memory_injection", {
208
+ params: [{ name: "query", required: true }, { name: "token_budget", required: false }],
209
+ getPrompt: async ({ query, token_budget = 1200 }) => {
210
+ const items = await recall({ query, limit: 6 });
211
+ const summary = await compress(items, token_budget);
212
+ return [{ role: "system", content: `관련 장기기억 요약:\n${summary}` }];
213
+ }
214
+ });
215
+
216
+ server.start();
217
+ ```
@@ -0,0 +1,130 @@
1
+ # MCP Memory Server M1 상세 설계 문서
2
+
3
+ ## 1. 목적
4
+
5
+ 본 단계(M1)는 개인 사용자가 로컬 환경에서 가볍게 실행할 수 있는 기억 보조 MCP 서버를 구현하는 것을 목표로 한다.
6
+ 데이터베이스는 별도의 설치 없이 사용할 수 있는 SQLite 임베디드 DB를 사용하며, MCP 인터페이스를 통해 기억 저장, 검색, 삭제, 고정 등의 기본 기능을 제공한다.
7
+
8
+ ## 2. 전체 아키텍처
9
+
10
+ - **클라이언트**: MCP를 지원하는 IDE(예: Cursor) 또는 AI Agent
11
+ - **서버**: MCP Memory Server (Node.js/TypeScript 기반)
12
+ - **스토리지**: SQLite 데이터베이스(memory.db 파일)
13
+
14
+ **구조**:
15
+ ```
16
+ [Client/Agent] ↔ [MCP Memory Server] ↔ [SQLite DB (memory.db)]
17
+ ```
18
+
19
+ ## 3. 기능 범위
20
+
21
+ ### 기억 저장 (remember)
22
+ - **입력**: content, type, tags, importance, privacy_scope
23
+ - **출력**: memory_id
24
+ - **동작**: 텍스트를 DB에 저장하고, 임베딩 생성 후 벡터 컬럼에 기록
25
+
26
+ ### 기억 검색 (recall)
27
+ - **입력**: query, filters(type, tags, date), limit
28
+ - **출력**: 관련 기억 목록
29
+ - **동작**: FTS5(키워드) + VSS(벡터 검색) 결합
30
+
31
+ ### 기억 삭제 (forget)
32
+ - **소프트 삭제**: TTL 만료 시 자동 제거
33
+ - **하드 삭제**: 사용자가 직접 호출
34
+
35
+ ### 기억 고정/해제 (pin/unpin)
36
+ - 특정 기억을 TTL, 망각 정책에서 제외
37
+
38
+ ## 4. 데이터베이스 설계 (SQLite)
39
+
40
+ ### 4.1 메인 테이블
41
+
42
+ ```sql
43
+ CREATE TABLE memory_item (
44
+ id TEXT PRIMARY KEY,
45
+ type TEXT CHECK (type IN ('working','episodic','semantic','procedural')),
46
+ content TEXT,
47
+ importance REAL,
48
+ privacy_scope TEXT CHECK (privacy_scope IN ('private','team','public')) DEFAULT 'private',
49
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
50
+ last_accessed TIMESTAMP,
51
+ pinned BOOLEAN DEFAULT FALSE
52
+ );
53
+ ```
54
+
55
+ ### 4.2 인덱스
56
+
57
+ #### FTS5 (텍스트 검색)
58
+ ```sql
59
+ CREATE VIRTUAL TABLE memory_item_fts USING fts5(content);
60
+ ```
61
+
62
+ #### VSS (벡터 검색, 1536차원 예시)
63
+ ```sql
64
+ CREATE VIRTUAL TABLE memory_item_vss USING vss0(embedding(1536));
65
+ ```
66
+
67
+ ## 5. MCP 인터페이스 (M1 한정)
68
+
69
+ ### Tools
70
+ - `remember(content, type?, tags?, importance?, privacy_scope?)`
71
+ - `recall(query, filters?, limit?)`
72
+ - `forget(id, hard?)`
73
+ - `pin(id)` / `unpin(id)`
74
+
75
+ ### Resources
76
+ - `memory/{id}` (단일 기억 읽기)
77
+
78
+ ### Prompts
79
+ - `memory_injection(query, token_budget)`
80
+ - 상위 5개 관련 기억을 요약하여 프롬프트에 주입
81
+
82
+ ## 6. 망각 정책
83
+
84
+ - **작업기억 (working)**: 48시간 유지 후 삭제
85
+ - **일화기억 (episodic)**: 90일 유지
86
+ - **의미기억 (semantic)**: 무기한
87
+ - **고정(pin)**: 삭제 대상에서 제외
88
+
89
+ 주기적으로 실행되는 배치 작업(cron job)으로 만료된 레코드 정리.
90
+
91
+ ## 7. 동작 흐름
92
+
93
+ ### 기억 저장
94
+ 1. 사용자가 `remember` 호출
95
+ 2. DB에 기록 → FTS5 인덱스 업데이트 → 임베딩 생성 후 VSS 테이블 기록
96
+
97
+ ### 기억 검색
98
+ 1. 사용자가 `recall` 호출
99
+ 2. FTS5로 키워드 검색 → VSS로 벡터 검색 → 점수 합산 → 상위 K개 반환
100
+
101
+ ### 망각/삭제
102
+ 1. 배치 작업으로 TTL 만료 항목 삭제
103
+ 2. 사용자가 `forget` 호출 시 즉시 제거
104
+
105
+ ## 8. 운영 및 배포
106
+
107
+ - **실행 환경**: Node.js (v20 이상)
108
+ - **배포 방법**: 로컬 실행
109
+ ```bash
110
+ node memory-server.js
111
+ ```
112
+ - **DB 관리**: 단일 memory.db 파일 (로컬 저장소에 보관)
113
+ - **백업/복원**: 파일 복사로 처리 가능
114
+
115
+ ## 9. 한계와 다음 단계 고려
116
+
117
+ **한계**: 단일 사용자 전용, 권한 관리 없음
118
+
119
+ **확장 고려**:
120
+ - M2에서 API Key 인증 추가
121
+ - SQLite 서버 모드 전환
122
+ - 팀 협업 가능하도록 ACL(user_id, privacy_scope) 활용 예정
123
+
124
+ ## 10. 체크리스트
125
+
126
+ - [ ] SQLite DB 초기 스키마 생성 완료
127
+ - [ ] MCP Tools (remember, recall, forget, pin/unpin) 구현 완료
128
+ - [ ] FTS5 + VSS 기반 검색 정상 동작
129
+ - [ ] TTL 기반 망각 정책 배치 스크립트 적용
130
+ - [ ] 로컬 환경에서 MCP Client와 연동 테스트 완료
@@ -0,0 +1,134 @@
1
+ # 📄 MCP Memory Server 설계 및 마일스톤 문서
2
+ ## 🎯 비전
3
+
4
+ 사람의 기억 구조(작업기억·일화기억·의미기억)를 모방한 AI Agent 기억 보조 MCP 서버를 구현한다.
5
+
6
+ - 개인(MVP): 단일 SQLite 파일 기반, 로컬에서 가볍게 실행
7
+ - 팀: 내부망 전용 서버 + 단일 API Key, SQLite + 직렬화 큐
8
+ - 조직: Postgres + pgvector + JWT 인증, SSO/LDAP 연동
9
+
10
+ ## 🛠 마일스톤 개요
11
+
12
+ | 단계 | 대상 | 스토리지 | 인증 | 보안 범위 | 운영 방식 |
13
+ |------|------|----------|------|-----------|-----------|
14
+ | M1 | 개인 | SQLite 임베디드 | 없음 | 로컬 | 로컬 실행 |
15
+ | M2 | 팀 | SQLite 서버 모드 (WAL + 직렬화 큐) | 단일 API Key | 내부망 전용 | Docker 단일 컨테이너 |
16
+ | M3 | 조직 초입 | Postgres + pgvector | JWT (사용자별 토큰) | 내부망 or VPN | Docker Compose (서버+DB) |
17
+ | M4 | 조직 확장 | Postgres + HA 구성 | JWT + RBAC + SSO/LDAP | 기업 보안 정책 준수 | Kubernetes/클라우드 RDS |
18
+ ## ⚙️ 단계별 설계
19
+
20
+ ### 🔹 M1. 개인용 (MVP)
21
+
22
+ - **DB**: SQLite (memory.db)
23
+ - **인덱스**: FTS5, sqlite-vec (벡터 검색)
24
+ - **MCP Tools**: remember, recall, forget, pin
25
+ - **망각 정책**: TTL 기반 (working 48h, episodic 90d, semantic 무기한)
26
+ - **운영**: 로컬 실행 (node memory-server.js)
27
+
28
+ ### 🔹 M2. 팀 협업 (내부망 전용 서버)
29
+
30
+ - **DB**: SQLite (WAL 모드)
31
+ - **쓰기 처리**: 서버 레벨 큐잉 → 직렬화
32
+ - **읽기 처리**: 다중 동시 읽기 가능
33
+ - **인증**: 단일 API Key (API_KEY=team-secret-key)
34
+ - **보안**: 내부망 전용 (외부 포트 차단)
35
+ - **운영**: Docker 단일 컨테이너
36
+
37
+ ```yaml
38
+ services:
39
+ memory-server:
40
+ build: .
41
+ ports:
42
+ - "8080:8080"
43
+ volumes:
44
+ - ./data:/app/data
45
+ environment:
46
+ - DB_PATH=/app/data/memory.db
47
+ - API_KEY=team-secret-key
48
+ ```
49
+
50
+ - **ACL**: privacy_scope (private | team) 적용
51
+
52
+ ### 🔹 M3. 조직 초입 (Postgres 전환)
53
+
54
+ - **DB**: Postgres 15+, pgvector 확장
55
+
56
+ **스키마**:
57
+
58
+ ```sql
59
+ CREATE TABLE memory_item (
60
+ id UUID PRIMARY KEY,
61
+ user_id TEXT NOT NULL,
62
+ project_id TEXT,
63
+ type TEXT CHECK (type IN ('working','episodic','semantic','procedural')),
64
+ content TEXT,
65
+ importance REAL,
66
+ privacy_scope TEXT CHECK (privacy_scope IN ('private','team','public')) DEFAULT 'private',
67
+ created_at TIMESTAMPTZ DEFAULT now(),
68
+ last_accessed TIMESTAMPTZ,
69
+ embedding vector(1536),
70
+ content_tsv tsvector GENERATED ALWAYS AS (to_tsvector('english', content)) STORED
71
+ );
72
+ CREATE INDEX ON memory_item USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
73
+ CREATE INDEX ON memory_item USING GIN (content_tsv);
74
+ ```
75
+
76
+ - **인증**: JWT 기반 사용자별 토큰 (user_id claim 포함)
77
+ - **보안**: 내부망 or VPN 제한
78
+ - **운영**: Docker Compose (Memory Server + Postgres)
79
+
80
+ ### 🔹 M4. 조직 확장 (고가용성 + 기업 보안)
81
+
82
+ - **DB**: Postgres 클러스터 (HA 구성, 클라우드 RDS 가능)
83
+ - **인증**: JWT + RBAC + SSO/LDAP 연동
84
+ - **권한 모델**:
85
+ - privacy_scope: private/team/public
86
+ - project_id: 워크스페이스 단위
87
+ - RBAC(Role-Based Access Control) → 관리자/편집자/조회자
88
+ - **운영**: Kubernetes, Helm Chart 배포, 모니터링(Prometheus)
89
+ - **추가 기능**: 자동 아카이빙, 백업/복원, GDPR-style 삭제
90
+
91
+ ## 📦 MCP 인터페이스 (공통)
92
+
93
+ ### Tools
94
+
95
+ - `remember(content, type, tags?, importance?, privacy_scope?)`
96
+ - `recall(query, filters?, limit?)`
97
+ - `pin(id), unpin(id)`
98
+ - `forget(id, hard?)`
99
+ - `summarize_thread(session_id)`
100
+ - `link(src, dst, rel)`
101
+ - `export(format)`
102
+ - `feedback(memory_id, helpful?)`
103
+
104
+ ### Resources
105
+
106
+ - `memory/{id}`
107
+ - `memory/search?query=...`
108
+
109
+ ### Prompts
110
+
111
+ - `memory_injection(query, token_budget)` → 상위 K개 관련 기억 요약 주입
112
+
113
+ ## 🔐 보안 모델 정리
114
+
115
+ - **M1**: 없음 (로컬 전용)
116
+ - **M2**: 단일 API Key (팀 공유)
117
+ - **M3**: JWT (사용자별 토큰, 조직 계정 서버 연동 가능)
118
+ - **M4**: JWT + RBAC + SSO/LDAP → 기업 보안 정책 준수
119
+
120
+ ## 📑 마이그레이션 가이드 요약
121
+
122
+ 1. SQLite에서 memory_item.csv 추출
123
+ 2. Postgres에 스키마 생성 (pgvector, tsvector)
124
+ 3. CSV import → `\copy`
125
+ 4. embedding은 재계산 후 업데이트
126
+ 5. MCP Memory Server의 DB 드라이버만 교체
127
+
128
+ ## ✅ 체크리스트
129
+
130
+ - [ ] 개인용 SQLite 서버 완성
131
+ - [ ] 팀 단계 Docker 배포 + API Key 적용
132
+ - [ ] Postgres 마이그레이션 문서 완성
133
+ - [ ] 조직 단계 JWT 인증 연동
134
+ - [ ] SSO/LDAP 붙이는 로드맵 확정
@@ -0,0 +1,177 @@
1
+ # 검색 랭킹 및 망각을 위한 수식
2
+
3
+ ## 1) 최종 랭킹 점수
4
+
5
+ $$S = \alpha \cdot \text{relevance} + \beta \cdot \text{recency} + \gamma \cdot \text{importance} + \delta \cdot \text{usage} - \varepsilon \cdot \text{duplication\_penalty}$$
6
+
7
+ **기본 계수(M1 추천)**: $\alpha=0.50$, $\beta=0.20$, $\gamma=0.20$, $\delta=0.10$, $\varepsilon=0.15$
8
+
9
+ **의미**: 후보 m에 대해 관련성(relevance)과 최근성(recency), 중요도(importance), 사용성(usage)을 올리고, 중복(duplication_penalty)을 깎는다.
10
+
11
+ **실무 팁**: 처음엔 위 기본값으로 시작 → A/B 테스트로 $\alpha$, $\beta$를 조정하고, 결과 다양성이 부족하면 $\varepsilon$를 키운다.
12
+
13
+ ## 2) 관련성(relevance) 구성
14
+
15
+ $$\text{relevance} = w_e \cdot \text{sim}_e + w_k \cdot \text{bm25\_norm} + w_t \cdot \text{tag\_match} + w_p \cdot \text{title\_hit}$$
16
+
17
+ **기본 가중치(M1)**: $w_e=0.60$, $w_k=0.30$, $w_t=0.05$, $w_p=0.05$
18
+
19
+ ### (1) 임베딩 유사도(코사인)
20
+
21
+ $$\text{sim}_e = \max(0, \cos(\mathbf{E}(q), \mathbf{E}(m)))$$
22
+
23
+ $\mathbf{E}(x)$는 임베딩 함수. 코사인 값이 음수가 나오는 모델이라면 0으로 클램프해 점수 음수화를 방지.
24
+
25
+ ### (2) 키워드(BM25의 정규화)
26
+
27
+ $$\text{bm25\_norm} = \frac{\text{BM25}}{\text{BM25} + k_{\text{norm}}}$$
28
+
29
+ 권장 $k_{\text{norm}}=2.0$. 어떤 쿼리든 [0,1]로 매핑해 다른 피처와 합치기 쉽다.
30
+
31
+ ### (3) 태그 매칭(자카드 유사도)
32
+
33
+ $$\text{tag\_match} = \frac{|T_q \cap T_m|}{|T_q \cup T_m|}$$
34
+
35
+ 쿼리 태그($T_q$)와 문서 태그($T_m$) 겹침 정도. 태그를 적극 쓰면 검색 품질이 눈에 띄게 오른다.
36
+
37
+ ### (4) 타이틀 매치(정확·접두·N-gram 가산)
38
+
39
+ $$\text{title\_hit} = I_{\text{exact}} \cdot 1.0 + I_{\text{prefix}} \cdot 0.5 + I_{\text{ngram}} \cdot 0.2$$
40
+
41
+ $I_*$는 해당 조건 충족 시 1, 아니면 0. 세밀한 튜닝 구간.
42
+
43
+ ### 후보 생성 팁(2단계 검색 권장)
44
+
45
+ 1차(ANN): 임베딩 상위 $N_e$개, 2차(BM25): 키워드 상위 $N_k$개 → 합집합을 후보 세트로 만들고 위 relevance로 재랭킹.
46
+
47
+ ## 3) 최근성(recency) = 반감기 기반 지수 감쇠
48
+
49
+ $$\text{recency} = \exp\left(-\frac{\ln(2) \cdot \text{age\_days}}{\text{half\_life}(\text{type})}\right)$$
50
+
51
+ - $\text{half\_life}(\text{working})=2$
52
+ - $\text{half\_life}(\text{episodic})=30$
53
+ - $\text{half\_life}(\text{semantic})=180$ (단위: 일)
54
+
55
+ **의미**: 각 타입별 기억의 반감기를 다르게 둬서, 작업기억은 빠르게 색이 바래고 의미기억은 오래 간다.
56
+
57
+ **튜닝**: 도메인이 빠르면(예: 이슈 대응 노트) half_life를 더 짧게, 지식 베이스는 더 길게.
58
+
59
+ ## 4) 중요도(importance) = 사용자 가중 + 시스템 가중
60
+
61
+ $$\text{importance} = \text{clamp}(\text{imp\_user} + 0.20 \cdot \text{pinned} + \text{type\_boost}, 0, 1)$$
62
+
63
+ - $\text{imp\_user} \in [0,1]$: 사용자가 저장 시 준 중요도(기본 0.5)
64
+ - $\text{pinned} \in \{0,1\}$: 고정 시 1 (망각·감쇠에서 보호)
65
+ - $\text{type\_boost}$: semantic=+0.10, episodic=0.00, working=−0.05 (예시)
66
+ - $\text{clamp}(a,0,1)$: 0~1 범위로 자르기
67
+
68
+ **팁**: imp_user를 그대로 쓰기보단, 프로젝트별 정책(예: project:정산 +0.05)을 더해도 좋다.
69
+
70
+ ## 5) 사용성(usage) = 로그 스케일 집계의 정규화
71
+
72
+ $$\text{usage\_raw} = \log(1 + \text{view\_cnt}) + 2 \cdot \log(1 + \text{cite\_cnt}) + 0.5 \cdot \log(1 + \text{edit\_cnt})$$
73
+
74
+ $$\text{usage} = \frac{\text{usage\_raw} - \text{min\_batch}}{\text{max\_batch} - \text{min\_batch} + \varepsilon}$$
75
+
76
+ $\text{cite\_cnt}$(재사용/인용) 가중치를 가장 높게. $\varepsilon$는 $1e-6$ 같은 작은 값.
77
+
78
+ **배치 정규화 이유**: 문서별 절대치 편차를 줄여 쿼리·세션마다 안정적 스케일을 보장.
79
+
80
+ ## 6) 중복 패널티(duplication_penalty) = MMR식 다양성 제어
81
+
82
+ $$\text{duplication\_penalty} = \max_{j \in R} \text{sim}_e(m, j)$$
83
+
84
+ $R$: 이미 현재 결과 리스트에 선정된 항목 집합
85
+
86
+ **해석**: 새 후보 m이 기존 선정 결과와 가장 비슷한 정도를 패널티로 준다.
87
+
88
+ 결과 다양성이 부족하면 $\varepsilon$(최종식의 계수)를 키우거나, 아래의 MMR 후처리를 사용.
89
+
90
+ ### MMR 후처리(선택)
91
+
92
+ $$\text{MMR}(m) = \lambda \cdot S(m) - (1 - \lambda) \cdot \max_{j \in R} \text{sim}_e(m, j)$$
93
+
94
+ 추천 $\lambda=0.8$. 최종 Top-K를 뽑을 때, S 점수에 다양성 항을 더 얹는 방식.
95
+
96
+ ## 7) 망각(garbage collection)·리마인드(spaced review)
97
+
98
+ 망각은 "삭제"만이 아니라 "재노출(복습)"도 포함한다. 점수 기반의 삭제 위험도와 리뷰 스케줄을 함께 쓰는 게 가장 안정적이다.
99
+
100
+ ### 7.1 삭제 위험도(ForgetScore)
101
+
102
+ $$\text{ForgetScore} = u_1 \cdot (1 - \text{recency}) + u_2 \cdot (1 - \text{usage}) + u_3 \cdot \text{dup\_ratio} - u_4 \cdot \text{importance} - u_5 \cdot \text{pinned}$$
103
+
104
+ **기본 계수(M1)**: $u_1=0.35$, $u_2=0.25$, $u_3=0.20$, $u_4=0.15$, $u_5=0.30$
105
+
106
+ $\text{dup\_ratio}$: 군집 내 유사 항목 비중(없으면 duplication_penalty를 0~1로 정규화해 대체)
107
+
108
+ **해석**: 오래되고($1-\text{recency}↑$), 안 쓰이고($1-\text{usage}↑$), 중복 많을수록($\text{dup\_ratio}↑$) 지우기 쉽다. 중요하거나 핀인 항목은 보호.
109
+
110
+ ### 삭제 정책(예시)
111
+
112
+ - **소프트 삭제 후보**: $\text{ForgetScore} \geq \theta_{\text{soft}}$ AND $\text{age\_days} \geq \text{TTL}_{\text{soft}}(\text{type})$
113
+ - **하드 삭제**: $\text{ForgetScore} \geq \theta_{\text{hard}}$ AND $\text{age\_days} \geq \text{TTL}_{\text{hard}}(\text{type})$
114
+
115
+ **권장값(M1)**:
116
+ - $\theta_{\text{soft}}=0.6$, $\theta_{\text{hard}}=0.8$
117
+ - $\text{TTL}_{\text{soft}}(\text{working})=2$, $\text{TTL}_{\text{soft}}(\text{episodic})=30$, $\text{TTL}_{\text{soft}}(\text{semantic})=\infty$
118
+ - $\text{TTL}_{\text{hard}}(\text{working})=7$, $\text{TTL}_{\text{hard}}(\text{episodic})=180$, $\text{TTL}_{\text{hard}}(\text{semantic})=\infty$
119
+
120
+ ### 7.2 간격 반복(Spaced Review) 스케줄
121
+
122
+ $$p_{\text{recall}}(t) = \exp\left(-\frac{t}{\tau}\right)$$
123
+
124
+ $$\tau_{\text{next}} = \tau_{\text{prev}} \cdot (1 + a_1 \cdot \text{importance} + a_2 \cdot \text{usage} + a_3 \cdot \text{feedback\_helpful} - a_4 \cdot \text{feedback\_bad})$$
125
+
126
+ **추천 계수**: $a_1=0.6$, $a_2=0.4$, $a_3=0.5$, $a_4=0.7$
127
+
128
+ **의미**: 중요하고 자주 쓰이고, 유용하다고 표시된 기억은 **기억 반감기($\tau$)**가 늘어나서 리뷰 주기가 길어진다.
129
+
130
+ **스케줄링 조건(예시)**: $p_{\text{recall}}(t) \leq 0.7$가 되는 시점을 다음 리뷰 시점으로 잡아 리마인드 카드 발행.
131
+
132
+ ### 간단 프리셋(복잡한 SM-2 대신 라이트 버전)
133
+
134
+ 첫 저장 후 1일, 6일, 그 다음부터는 $\text{interval\_next} = \lceil \text{interval\_prev} \cdot (1 + 0.5 \cdot \text{importance} + 0.3 \cdot \text{usage}) \rceil$
135
+
136
+ ## 8) 후보 생성, 재랭킹, 다양화 파이프라인(권장)
137
+
138
+ ### CandidateGen
139
+ $$C = \text{TopN}_e(\text{ANN by sim}_e) \cup \text{TopN}_k(\text{BM25})$$
140
+ (권장 $N_e=50$, $N_k=50$)
141
+
142
+ ### Feature Compute
143
+ 각 $m \in C$에 대해 relevance, recency, importance, usage, duplication_penalty 계산
144
+
145
+ ### Primary Score
146
+ $$S(m) = \alpha \cdot \text{relevance} + \beta \cdot \text{recency} + \gamma \cdot \text{importance} + \delta \cdot \text{usage} - \varepsilon \cdot \text{duplication\_penalty}$$
147
+
148
+ ### Diversification (선택)
149
+ Greedy로 MMR 적용해 Top-K 생성
150
+
151
+ ### Thresholding
152
+ $S(m) \geq \theta_{\text{keep}}$만 유지 (예: $\theta_{\text{keep}}=0.35$)
153
+
154
+ ## 9) 정규화와 캘리브레이션
155
+
156
+ 모든 부분 점수는 [0,1] 스케일을 유지하면 조합이 쉽다. 배치마다 분산이 큰 피처는 배치 정규화를 권장.
157
+
158
+ $$x_{\text{norm}} = \frac{x - \text{min\_batch}}{\text{max\_batch} - \text{min\_batch} + \varepsilon}$$
159
+
160
+ 예: usage, duplication_penalty, bm25_norm에 적용
161
+
162
+ **장점**: 쿼리 편향, 컬렉션 편차를 줄여 점수 안정성↑
163
+
164
+ ## 10) M1 기본 파라미터 표(요약)
165
+
166
+ | 항목 | 값 |
167
+ |------|-----|
168
+ | **최종식** | $\alpha=0.50$, $\beta=0.20$, $\gamma=0.20$, $\delta=0.10$, $\varepsilon=0.15$ |
169
+ | **relevance 가중** | $w_e=0.60$, $w_k=0.30$, $w_t=0.05$, $w_p=0.05$ |
170
+ | **recency** | $\text{half\_life}(\text{working})=2$, $\text{episodic}=30$, $\text{semantic}=180$ |
171
+ | **importance** | $\text{pinned}=+0.20$, $\text{type\_boost}(\text{semantic}=+0.10, \text{working}=-0.05)$ |
172
+ | **usage** | log 기반, 배치 정규화 |
173
+ | **duplication_penalty** | max sim to selected |
174
+ | **망각** | $\theta_{\text{soft}}=0.6$, $\theta_{\text{hard}}=0.8$, TTL_soft/hard 위 표 참조 |
175
+ | **리뷰** | $p_{\text{recall}}(t)=\exp(-t/\tau)$, 첫 1일→6일→가변 배수 |
176
+
177
+ 이대로 구현하면 **M1(개인용)**에서 바로 쓸 수 있고, M2/M3로 갈 때는 계수만 재튜닝하면 된다.