memento-mcp-server 1.6.0 → 1.7.1

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 +3 -1
  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,217 +0,0 @@
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
- ```
@@ -1,130 +0,0 @@
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와 연동 테스트 완료
@@ -1,134 +0,0 @@
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 붙이는 로드맵 확정
@@ -1,177 +0,0 @@
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로 갈 때는 계수만 재튜닝하면 된다.