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,108 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * 임베딩 백업 스크립트
5
+ * 기존 벡터값을 백업한 후 삭제하고 재생성하는 스크립트
6
+ */
7
+
8
+ import Database from 'better-sqlite3';
9
+ import fs from 'fs';
10
+ import path from 'path';
11
+ import { fileURLToPath } from 'url';
12
+
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+
16
+ // 데이터베이스 경로 설정
17
+ const dbPath = process.env.DB_PATH || path.join(__dirname, '..', 'data', 'memory.db');
18
+ const backupDir = path.join(__dirname, '..', 'backup');
19
+ const backupFile = path.join(backupDir, `embeddings-backup-${new Date().toISOString().replace(/[:.]/g, '-')}.json`);
20
+
21
+ async function backupEmbeddings() {
22
+ console.log('🔄 임베딩 백업 시작...');
23
+
24
+ // 백업 디렉토리 생성
25
+ if (!fs.existsSync(backupDir)) {
26
+ fs.mkdirSync(backupDir, { recursive: true });
27
+ }
28
+
29
+ // 데이터베이스 연결
30
+ const db = new Database(dbPath);
31
+
32
+ try {
33
+ // 기존 임베딩 데이터 조회
34
+ const embeddings = db.prepare(`
35
+ SELECT
36
+ me.memory_id,
37
+ me.embedding,
38
+ me.dim,
39
+ me.model,
40
+ me.created_at,
41
+ mi.content,
42
+ mi.type
43
+ FROM memory_embedding me
44
+ JOIN memory_item mi ON me.memory_id = mi.id
45
+ ORDER BY me.created_at
46
+ `).all();
47
+
48
+ console.log(`📊 발견된 임베딩 개수: ${embeddings.length}`);
49
+
50
+ if (embeddings.length === 0) {
51
+ console.log('⚠️ 백업할 임베딩이 없습니다.');
52
+ return;
53
+ }
54
+
55
+ // 차원별 통계
56
+ const dimensionStats = {};
57
+ embeddings.forEach(emb => {
58
+ const dim = emb.dim;
59
+ dimensionStats[dim] = (dimensionStats[dim] || 0) + 1;
60
+ });
61
+
62
+ console.log('📈 차원별 통계:');
63
+ Object.entries(dimensionStats).forEach(([dim, count]) => {
64
+ console.log(` - ${dim}차원: ${count}개`);
65
+ });
66
+
67
+ // 백업 데이터 생성
68
+ const backupData = {
69
+ timestamp: new Date().toISOString(),
70
+ totalEmbeddings: embeddings.length,
71
+ dimensionStats,
72
+ embeddings: embeddings.map(emb => ({
73
+ memory_id: emb.memory_id,
74
+ content: emb.content,
75
+ type: emb.type,
76
+ embedding: JSON.parse(emb.embedding),
77
+ dim: emb.dim,
78
+ model: emb.model,
79
+ created_at: emb.created_at
80
+ }))
81
+ };
82
+
83
+ // 백업 파일 저장
84
+ fs.writeFileSync(backupFile, JSON.stringify(backupData, null, 2));
85
+ console.log(`✅ 백업 완료: ${backupFile}`);
86
+
87
+ // 임베딩 테이블 삭제
88
+ console.log('🗑️ 기존 임베딩 삭제 중...');
89
+ const deleteResult = db.prepare('DELETE FROM memory_embedding').run();
90
+ console.log(`✅ 삭제 완료: ${deleteResult.changes}개 행 삭제`);
91
+
92
+ console.log('🎉 백업 및 삭제 완료!');
93
+ console.log('다음 단계: npm run regenerate-embeddings');
94
+
95
+ } catch (error) {
96
+ console.error('❌ 백업 실패:', error);
97
+ process.exit(1);
98
+ } finally {
99
+ db.close();
100
+ }
101
+ }
102
+
103
+ // 스크립트 실행
104
+ if (import.meta.url === `file://${process.argv[1]}`) {
105
+ backupEmbeddings().catch(console.error);
106
+ }
107
+
108
+ export { backupEmbeddings };
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Memento 데이터베이스 무결성 검사 스크립트
4
+ * 사용법: node scripts/check-db-integrity.js
5
+ */
6
+
7
+ const Database = require('better-sqlite3');
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+
11
+ const DB_PATH = './data/memory.db';
12
+ const LOG_PATH = './logs/db-integrity.log';
13
+
14
+ // 로그 디렉토리 생성
15
+ if (!fs.existsSync('./logs')) {
16
+ fs.mkdirSync('./logs');
17
+ }
18
+
19
+ function log(message) {
20
+ const timestamp = new Date().toISOString();
21
+ const logMessage = `[${timestamp}] ${message}\n`;
22
+ console.log(message);
23
+ fs.appendFileSync(LOG_PATH, logMessage);
24
+ }
25
+
26
+ function checkDatabaseIntegrity() {
27
+ log('데이터베이스 무결성 검사 시작...');
28
+
29
+ try {
30
+ // 데이터베이스 파일 존재 확인
31
+ if (!fs.existsSync(DB_PATH)) {
32
+ log('❌ 데이터베이스 파일이 존재하지 않습니다.');
33
+ return false;
34
+ }
35
+
36
+ // 데이터베이스 연결 테스트
37
+ const db = new Database(DB_PATH);
38
+
39
+ // PRAGMA integrity_check 실행
40
+ const integrityResult = db.prepare('PRAGMA integrity_check').get();
41
+ if (integrityResult.integrity_check !== 'ok') {
42
+ log(`❌ 데이터베이스 무결성 검사 실패: ${integrityResult.integrity_check}`);
43
+ db.close();
44
+ return false;
45
+ }
46
+
47
+ // 기본 테이블 존재 확인
48
+ const tables = db.prepare(`
49
+ SELECT name FROM sqlite_master
50
+ WHERE type='table' AND name IN ('memory_item', 'memory_embedding', 'memory_tag')
51
+ `).all();
52
+
53
+ if (tables.length < 3) {
54
+ log('❌ 필수 테이블이 누락되었습니다.');
55
+ db.close();
56
+ return false;
57
+ }
58
+
59
+ // 데이터 개수 확인
60
+ const memoryCount = db.prepare('SELECT COUNT(*) as count FROM memory_item').get();
61
+ const embeddingCount = db.prepare('SELECT COUNT(*) as count FROM memory_embedding').get();
62
+
63
+ log(`✅ 데이터베이스 무결성 검사 통과`);
64
+ log(` - 메모리 아이템: ${memoryCount.count}개`);
65
+ log(` - 임베딩: ${embeddingCount.count}개`);
66
+ log(` - 테이블: ${tables.length}개`);
67
+
68
+ db.close();
69
+ return true;
70
+
71
+ } catch (error) {
72
+ log(`❌ 데이터베이스 검사 중 오류 발생: ${error.message}`);
73
+ return false;
74
+ }
75
+ }
76
+
77
+ function main() {
78
+ const isHealthy = checkDatabaseIntegrity();
79
+
80
+ if (!isHealthy) {
81
+ log('🚨 데이터베이스에 문제가 있습니다. 백업에서 복구를 고려하세요.');
82
+ process.exit(1);
83
+ } else {
84
+ log('✅ 데이터베이스가 정상 상태입니다.');
85
+ process.exit(0);
86
+ }
87
+ }
88
+
89
+ if (require.main === module) {
90
+ main();
91
+ }
92
+
93
+ module.exports = { checkDatabaseIntegrity };
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * 임베딩 디버깅 스크립트
5
+ * 현재 데이터베이스의 임베딩 상태를 상세히 분석
6
+ */
7
+
8
+ import Database from 'better-sqlite3';
9
+ import path from 'path';
10
+ import { fileURLToPath } from 'url';
11
+
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+
15
+ // 데이터베이스 경로 설정
16
+ const dbPath = process.env.DB_PATH || path.join(__dirname, '..', 'data', 'memory.db');
17
+
18
+ async function debugEmbeddings() {
19
+ console.log('🔍 임베딩 상태 디버깅 시작...');
20
+
21
+ // 데이터베이스 연결
22
+ const db = new Database(dbPath);
23
+
24
+ try {
25
+ // 1. 전체 임베딩 통계
26
+ console.log('\n📊 전체 임베딩 통계:');
27
+ const totalStats = db.prepare(`
28
+ SELECT
29
+ COUNT(*) as total_count,
30
+ AVG(dim) as avg_dim,
31
+ MIN(dim) as min_dim,
32
+ MAX(dim) as max_dim,
33
+ COUNT(DISTINCT dim) as unique_dims
34
+ FROM memory_embedding
35
+ `).get();
36
+
37
+ console.log(`- 총 임베딩 개수: ${totalStats.total_count}`);
38
+ console.log(`- 평균 차원: ${totalStats.avg_dim?.toFixed(1) || 'N/A'}`);
39
+ console.log(`- 최소 차원: ${totalStats.min_dim || 'N/A'}`);
40
+ console.log(`- 최대 차원: ${totalStats.max_dim || 'N/A'}`);
41
+ console.log(`- 고유 차원 수: ${totalStats.unique_dims}`);
42
+
43
+ // 2. 차원별 분포
44
+ console.log('\n📈 차원별 분포:');
45
+ const dimensionStats = db.prepare(`
46
+ SELECT
47
+ dim,
48
+ COUNT(*) as count,
49
+ GROUP_CONCAT(memory_id) as memory_ids
50
+ FROM memory_embedding
51
+ GROUP BY dim
52
+ ORDER BY dim
53
+ `).all();
54
+
55
+ dimensionStats.forEach(stat => {
56
+ console.log(`- ${stat.dim}차원: ${stat.count}개`);
57
+ if (stat.count <= 5) {
58
+ console.log(` 메모리 ID: ${stat.memory_ids}`);
59
+ }
60
+ });
61
+
62
+ // 3. 모델별 분포
63
+ console.log('\n🤖 모델별 분포:');
64
+ const modelStats = db.prepare(`
65
+ SELECT
66
+ model,
67
+ COUNT(*) as count,
68
+ AVG(dim) as avg_dim
69
+ FROM memory_embedding
70
+ GROUP BY model
71
+ ORDER BY count DESC
72
+ `).all();
73
+
74
+ modelStats.forEach(stat => {
75
+ console.log(`- ${stat.model || 'NULL'}: ${stat.count}개 (평균 ${stat.avg_dim?.toFixed(1)}차원)`);
76
+ });
77
+
78
+ // 4. 최근 생성된 임베딩들
79
+ console.log('\n🕒 최근 생성된 임베딩 (최대 10개):');
80
+ const recentEmbeddings = db.prepare(`
81
+ SELECT
82
+ memory_id,
83
+ dim,
84
+ model,
85
+ created_at,
86
+ LENGTH(embedding) as embedding_length
87
+ FROM memory_embedding
88
+ ORDER BY created_at DESC
89
+ LIMIT 10
90
+ `).all();
91
+
92
+ recentEmbeddings.forEach(emb => {
93
+ console.log(`- ${emb.memory_id}: ${emb.dim}차원, ${emb.model}, ${emb.created_at}`);
94
+ });
95
+
96
+ // 5. 문제가 있는 임베딩 찾기
97
+ console.log('\n⚠️ 문제가 있을 수 있는 임베딩들:');
98
+
99
+ // 차원이 0인 경우
100
+ const zeroDim = db.prepare(`
101
+ SELECT memory_id, dim, model FROM memory_embedding WHERE dim = 0
102
+ `).all();
103
+
104
+ if (zeroDim.length > 0) {
105
+ console.log(`- 차원이 0인 임베딩: ${zeroDim.length}개`);
106
+ zeroDim.forEach(emb => {
107
+ console.log(` ${emb.memory_id} (${emb.model})`);
108
+ });
109
+ }
110
+
111
+ // 차원이 매우 큰 경우 (1536보다 큰 경우)
112
+ const largeDim = db.prepare(`
113
+ SELECT memory_id, dim, model FROM memory_embedding WHERE dim > 1536
114
+ `).all();
115
+
116
+ if (largeDim.length > 0) {
117
+ console.log(`- 차원이 1536보다 큰 임베딩: ${largeDim.length}개`);
118
+ largeDim.forEach(emb => {
119
+ console.log(` ${emb.memory_id}: ${emb.dim}차원 (${emb.model})`);
120
+ });
121
+ }
122
+
123
+ // 6. 임베딩 데이터 샘플 확인
124
+ console.log('\n🔬 임베딩 데이터 샘플 (첫 3개):');
125
+ const samples = db.prepare(`
126
+ SELECT
127
+ memory_id,
128
+ dim,
129
+ model,
130
+ SUBSTR(embedding, 1, 100) as embedding_preview
131
+ FROM memory_embedding
132
+ LIMIT 3
133
+ `).all();
134
+
135
+ samples.forEach((sample, index) => {
136
+ console.log(`\n샘플 ${index + 1}:`);
137
+ console.log(`- 메모리 ID: ${sample.memory_id}`);
138
+ console.log(`- 차원: ${sample.dim}`);
139
+ console.log(`- 모델: ${sample.model}`);
140
+ console.log(`- 임베딩 미리보기: ${sample.embedding_preview}...`);
141
+
142
+ // 실제 벡터 길이 확인
143
+ try {
144
+ const fullEmbedding = db.prepare(`
145
+ SELECT embedding FROM memory_embedding WHERE memory_id = ?
146
+ `).get(sample.memory_id);
147
+
148
+ const vector = JSON.parse(fullEmbedding.embedding);
149
+ console.log(`- 실제 벡터 길이: ${vector.length}`);
150
+ console.log(`- 첫 5개 값: [${vector.slice(0, 5).join(', ')}...]`);
151
+ } catch (error) {
152
+ console.log(`- 벡터 파싱 오류: ${error.message}`);
153
+ }
154
+ });
155
+
156
+ // 7. 메모리 아이템과의 연결 상태 확인
157
+ console.log('\n🔗 메모리 아이템 연결 상태:');
158
+ const connectionStats = db.prepare(`
159
+ SELECT
160
+ (SELECT COUNT(*) FROM memory_item) as total_memories,
161
+ (SELECT COUNT(*) FROM memory_embedding) as total_embeddings,
162
+ (SELECT COUNT(*) FROM memory_item mi
163
+ LEFT JOIN memory_embedding me ON mi.id = me.memory_id
164
+ WHERE me.memory_id IS NULL) as memories_without_embedding
165
+ `).get();
166
+
167
+ console.log(`- 총 메모리 개수: ${connectionStats.total_memories}`);
168
+ console.log(`- 총 임베딩 개수: ${connectionStats.total_embeddings}`);
169
+ console.log(`- 임베딩이 없는 메모리: ${connectionStats.memories_without_embedding}`);
170
+
171
+ } catch (error) {
172
+ console.error('❌ 디버깅 실패:', error);
173
+ process.exit(1);
174
+ } finally {
175
+ db.close();
176
+ }
177
+ }
178
+
179
+ // 스크립트 실행
180
+ if (import.meta.url === `file://${process.argv[1]}`) {
181
+ debugEmbeddings().catch(console.error);
182
+ }
183
+
184
+ export { debugEmbeddings };
@@ -0,0 +1,36 @@
1
+ -- 임베딩 데이터 마이그레이션 SQL
2
+ -- 기존 데이터에 메타데이터 추가
3
+
4
+ -- 1. 기존 데이터 업데이트
5
+ UPDATE memory_embedding
6
+ SET
7
+ embedding_provider = CASE
8
+ WHEN model = 'lightweight-hybrid' THEN 'tfidf'
9
+ WHEN model IS NULL OR model = '' THEN 'tfidf'
10
+ ELSE 'unknown'
11
+ END,
12
+ dimensions = dim,
13
+ created_by = 'legacy'
14
+ WHERE embedding_provider IS NULL;
15
+
16
+ -- 2. 인덱스 생성
17
+ CREATE INDEX IF NOT EXISTS idx_memory_embedding_provider ON memory_embedding(embedding_provider);
18
+ CREATE INDEX IF NOT EXISTS idx_memory_embedding_dimensions ON memory_embedding(dimensions);
19
+ CREATE INDEX IF NOT EXISTS idx_memory_embedding_created_by ON memory_embedding(created_by);
20
+
21
+ -- 3. 검증 쿼리
22
+ SELECT
23
+ COUNT(*) as total,
24
+ COUNT(CASE WHEN embedding_provider IS NOT NULL THEN 1 END) as with_provider,
25
+ COUNT(CASE WHEN dimensions IS NOT NULL THEN 1 END) as with_dimensions,
26
+ COUNT(CASE WHEN created_by IS NOT NULL THEN 1 END) as with_created_by
27
+ FROM memory_embedding;
28
+
29
+ -- 4. 최종 데이터 분포 확인
30
+ SELECT
31
+ embedding_provider,
32
+ dimensions,
33
+ COUNT(*) as count
34
+ FROM memory_embedding
35
+ GROUP BY embedding_provider, dimensions
36
+ ORDER BY count DESC;
@@ -0,0 +1,105 @@
1
+ #!/bin/bash
2
+
3
+ echo "🐳 도커 환경에서 임베딩 데이터 마이그레이션 시작..."
4
+
5
+ # 1. 백업 생성
6
+ echo "💾 백업 생성 중..."
7
+ cp /app/data/memory.db /app/data/memory-backup-$(date +%s).db
8
+
9
+ # 2. sqlite-vec 없이 새로운 데이터베이스 생성
10
+ echo "📝 새로운 데이터베이스 생성 중..."
11
+ sqlite3 /app/data/memory-new.db << 'EOF'
12
+ -- 메인 기억 테이블
13
+ CREATE TABLE memory_item (
14
+ id TEXT PRIMARY KEY,
15
+ type TEXT CHECK (type IN ('working','episodic','semantic','procedural')) NOT NULL,
16
+ content TEXT NOT NULL,
17
+ importance REAL CHECK (importance >= 0 AND importance <= 1) DEFAULT 0.5,
18
+ privacy_scope TEXT CHECK (privacy_scope IN ('private','team','public')) DEFAULT 'private',
19
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
20
+ last_accessed TIMESTAMP,
21
+ pinned BOOLEAN DEFAULT FALSE,
22
+ tags TEXT,
23
+ source TEXT,
24
+ view_count INTEGER DEFAULT 0,
25
+ cite_count INTEGER DEFAULT 0,
26
+ edit_count INTEGER DEFAULT 0
27
+ );
28
+
29
+ -- 임베딩 저장 테이블 (새로운 컬럼 포함)
30
+ CREATE TABLE memory_embedding (
31
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
32
+ memory_id TEXT NOT NULL,
33
+ embedding TEXT NOT NULL,
34
+ dim INTEGER NOT NULL,
35
+ model TEXT,
36
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
37
+ embedding_provider TEXT,
38
+ dimensions INTEGER,
39
+ created_by TEXT DEFAULT 'migration',
40
+ FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE,
41
+ UNIQUE(memory_id)
42
+ );
43
+
44
+ -- 인덱스 생성
45
+ CREATE INDEX idx_memory_embedding_provider ON memory_embedding(embedding_provider);
46
+ CREATE INDEX idx_memory_embedding_dimensions ON memory_embedding(dimensions);
47
+ CREATE INDEX idx_memory_embedding_created_by ON memory_embedding(created_by);
48
+ EOF
49
+
50
+ # 3. 데이터 복사
51
+ echo "📊 데이터 복사 중..."
52
+ sqlite3 /app/data/memory-new.db << 'EOF'
53
+ ATTACH DATABASE '/app/data/memory.db' AS source;
54
+
55
+ -- memory_item 데이터 복사
56
+ INSERT INTO memory_item
57
+ SELECT * FROM source.memory_item;
58
+
59
+ -- memory_embedding 데이터 복사 및 메타데이터 추가
60
+ INSERT INTO memory_embedding (memory_id, embedding, dim, model, created_at, embedding_provider, dimensions, created_by)
61
+ SELECT
62
+ memory_id,
63
+ embedding,
64
+ dim,
65
+ model,
66
+ created_at,
67
+ CASE
68
+ WHEN model = 'lightweight-hybrid' THEN 'tfidf'
69
+ WHEN model IS NULL OR model = '' THEN 'tfidf'
70
+ ELSE 'unknown'
71
+ END as embedding_provider,
72
+ dim as dimensions,
73
+ 'legacy' as created_by
74
+ FROM source.memory_embedding;
75
+
76
+ DETACH DATABASE source;
77
+ EOF
78
+
79
+ # 4. 검증
80
+ echo "🔍 마이그레이션 검증 중..."
81
+ sqlite3 /app/data/memory-new.db << 'EOF'
82
+ SELECT
83
+ COUNT(*) as total,
84
+ COUNT(CASE WHEN embedding_provider IS NOT NULL THEN 1 END) as with_provider,
85
+ COUNT(CASE WHEN dimensions IS NOT NULL THEN 1 END) as with_dimensions,
86
+ COUNT(CASE WHEN created_by IS NOT NULL THEN 1 END) as with_created_by
87
+ FROM memory_embedding;
88
+
89
+ SELECT
90
+ embedding_provider,
91
+ dimensions,
92
+ COUNT(*) as count
93
+ FROM memory_embedding
94
+ GROUP BY embedding_provider, dimensions
95
+ ORDER BY count DESC;
96
+ EOF
97
+
98
+ # 5. 원본 데이터베이스 교체
99
+ echo "🔄 데이터베이스 교체 중..."
100
+ mv /app/data/memory.db /app/data/memory-old.db
101
+ mv /app/data/memory-new.db /app/data/memory.db
102
+
103
+ echo "✅ 마이그레이션 완료!"
104
+ echo "💾 백업 파일: /app/data/memory-backup-*.db"
105
+ echo "🔄 롤백이 필요한 경우: mv /app/data/memory-old.db /app/data/memory.db"
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env node
2
+
3
+ import Database from 'better-sqlite3';
4
+ import { join } from 'path';
5
+
6
+ const dbPath = join(process.cwd(), 'data', 'memory.db');
7
+
8
+ console.log('🔧 마이그레이션 수정 중...');
9
+
10
+ try {
11
+ const db = new Database(dbPath);
12
+
13
+ // 1. 현재 상태 확인
14
+ console.log('📊 현재 상태 확인...');
15
+ const currentSchema = db.prepare("PRAGMA table_info(memory_embedding)").all();
16
+ console.log('현재 테이블 구조:');
17
+ console.table(currentSchema);
18
+
19
+ // 2. 컬럼이 있는지 확인
20
+ const hasProvider = currentSchema.some(col => col.name === 'embedding_provider');
21
+ const hasDimensions = currentSchema.some(col => col.name === 'dimensions');
22
+ const hasCreatedBy = currentSchema.some(col => col.name === 'created_by');
23
+
24
+ console.log(`embedding_provider: ${hasProvider ? '✅' : '❌'}`);
25
+ console.log(`dimensions: ${hasDimensions ? '✅' : '❌'}`);
26
+ console.log(`created_by: ${hasCreatedBy ? '✅' : '❌'}`);
27
+
28
+ // 3. 데이터 업데이트 (컬럼이 있는 경우에만)
29
+ if (hasProvider && hasDimensions && hasCreatedBy) {
30
+ console.log('🔄 데이터 업데이트 중...');
31
+
32
+ const updateResult = db.prepare(`
33
+ UPDATE memory_embedding
34
+ SET
35
+ embedding_provider = CASE
36
+ WHEN model = 'lightweight-hybrid' THEN 'tfidf'
37
+ WHEN model IS NULL OR model = '' THEN 'tfidf'
38
+ ELSE 'unknown'
39
+ END,
40
+ dimensions = dim,
41
+ created_by = 'legacy'
42
+ WHERE embedding_provider IS NULL
43
+ `).run();
44
+
45
+ console.log(`✅ ${updateResult.changes}개 레코드 업데이트 완료`);
46
+
47
+ // 4. 인덱스 추가
48
+ console.log('📝 인덱스 추가 중...');
49
+ db.exec('CREATE INDEX IF NOT EXISTS idx_memory_embedding_provider ON memory_embedding(embedding_provider)');
50
+ db.exec('CREATE INDEX IF NOT EXISTS idx_memory_embedding_dimensions ON memory_embedding(dimensions)');
51
+ db.exec('CREATE INDEX IF NOT EXISTS idx_memory_embedding_created_by ON memory_embedding(created_by)');
52
+ console.log('✅ 인덱스 추가 완료');
53
+
54
+ // 5. 최종 검증
55
+ console.log('🔍 최종 검증...');
56
+ const validation = db.prepare(`
57
+ SELECT
58
+ COUNT(*) as total,
59
+ COUNT(CASE WHEN embedding_provider IS NOT NULL THEN 1 END) as with_provider,
60
+ COUNT(CASE WHEN dimensions IS NOT NULL THEN 1 END) as with_dimensions,
61
+ COUNT(CASE WHEN created_by IS NOT NULL THEN 1 END) as with_created_by
62
+ FROM memory_embedding
63
+ `).get();
64
+
65
+ console.log('📊 검증 결과:');
66
+ console.table(validation);
67
+
68
+ // 6. 최종 데이터 분포
69
+ const finalAnalysis = db.prepare(`
70
+ SELECT
71
+ embedding_provider,
72
+ dimensions,
73
+ COUNT(*) as count
74
+ FROM memory_embedding
75
+ GROUP BY embedding_provider, dimensions
76
+ ORDER BY count DESC
77
+ `).all();
78
+
79
+ console.log('\n📊 최종 데이터 분포:');
80
+ console.table(finalAnalysis);
81
+
82
+ console.log('\n🎉 마이그레이션 완료!');
83
+
84
+ } else {
85
+ console.log('❌ 필요한 컬럼이 없습니다. 스키마를 먼저 업데이트해주세요.');
86
+ }
87
+
88
+ db.close();
89
+
90
+ } catch (error) {
91
+ console.error('❌ 오류 발생:', error.message);
92
+ process.exit(1);
93
+ }