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.
- package/.cursor/rules/cache-management.mdc +171 -0
- package/.cursor/rules/database-schema.mdc +344 -0
- package/.cursor/rules/deployment.mdc +596 -0
- package/.cursor/rules/error-logging.mdc +298 -0
- package/.cursor/rules/forgetting-algorithms.mdc +426 -0
- package/.cursor/rules/http-server.mdc +432 -0
- package/.cursor/rules/hybrid-search.mdc +424 -0
- package/.cursor/rules/implementation.mdc +369 -0
- package/.cursor/rules/lightweight-embedding.mdc +178 -0
- package/.cursor/rules/mcp-client-development.mdc +0 -0
- package/.cursor/rules/mcp-server-development.mdc +0 -0
- package/.cursor/rules/mcp-tools-architecture.mdc +205 -0
- package/.cursor/rules/memento-memory-rule.mdc +8 -0
- package/.cursor/rules/memento-project-overview.mdc +0 -0
- package/.cursor/rules/memory-algorithms.mdc +502 -0
- package/.cursor/rules/monitoring.mdc +622 -0
- package/.cursor/rules/performance-alerts.mdc +537 -0
- package/.cursor/rules/performance-monitoring.mdc +345 -0
- package/.cursor/rules/performance-optimization.mdc +563 -0
- package/.cursor/rules/project-structure.mdc +310 -0
- package/.cursor/rules/testing.mdc +473 -0
- package/.dockerignore +15 -0
- package/.eslintrc.json +34 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +51 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +45 -0
- package/.github/ISSUE_TEMPLATE/question.md +31 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +97 -0
- package/AGENTS.md +28 -0
- package/CHANGELOG.md +416 -0
- package/CODE_OF_CONDUCT.md +62 -0
- package/CONTRIBUTING.md +165 -0
- package/DOCKER_SETUP_GUIDE.md +84 -0
- package/Dockerfile +90 -0
- package/INSTALL.en.md +303 -0
- package/INSTALL.md +303 -0
- package/README.en.md +330 -0
- package/README.md +427 -0
- package/backup/legacy-removal-20250930-201816/http-server-legacy.ts +1068 -0
- package/backup/legacy-removal-20250930-201816/rollback-to-legacy.ps1 +46 -0
- package/backup/legacy-removal-20250930-201816/rollback-to-legacy.sh +48 -0
- package/dist/algorithms/forgetting-algorithm.d.ts +90 -0
- package/dist/algorithms/forgetting-algorithm.d.ts.map +1 -0
- package/dist/algorithms/forgetting-algorithm.js +160 -0
- package/dist/algorithms/forgetting-algorithm.js.map +1 -0
- package/dist/algorithms/hybrid-search-engine.d.ts +108 -0
- package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -0
- package/dist/algorithms/hybrid-search-engine.js +384 -0
- package/dist/algorithms/hybrid-search-engine.js.map +1 -0
- package/dist/algorithms/search-engine.d.ts +64 -0
- package/dist/algorithms/search-engine.d.ts.map +1 -0
- package/dist/algorithms/search-engine.js +304 -0
- package/dist/algorithms/search-engine.js.map +1 -0
- package/dist/algorithms/search-ranking.d.ts +145 -0
- package/dist/algorithms/search-ranking.d.ts.map +1 -0
- package/dist/algorithms/search-ranking.js +311 -0
- package/dist/algorithms/search-ranking.js.map +1 -0
- package/dist/algorithms/spaced-repetition.d.ts +83 -0
- package/dist/algorithms/spaced-repetition.d.ts.map +1 -0
- package/dist/algorithms/spaced-repetition.js +153 -0
- package/dist/algorithms/spaced-repetition.js.map +1 -0
- package/dist/algorithms/vector-search-engine.d.ts +96 -0
- package/dist/algorithms/vector-search-engine.d.ts.map +1 -0
- package/dist/algorithms/vector-search-engine.js +410 -0
- package/dist/algorithms/vector-search-engine.js.map +1 -0
- package/dist/client/index.d.ts +55 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +179 -0
- package/dist/client/index.js.map +1 -0
- package/dist/config/index.d.ts +20 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +87 -0
- package/dist/config/index.js.map +1 -0
- package/dist/database/init.d.ts +7 -0
- package/dist/database/init.d.ts.map +1 -0
- package/dist/database/init.js +117 -0
- package/dist/database/init.js.map +1 -0
- package/dist/database/migrate.d.ts +6 -0
- package/dist/database/migrate.d.ts.map +1 -0
- package/dist/database/migrate.js +84 -0
- package/dist/database/migrate.js.map +1 -0
- package/dist/database/schema.sql +159 -0
- package/dist/npm-client/context-injector.d.ts +106 -0
- package/dist/npm-client/context-injector.d.ts.map +1 -0
- package/dist/npm-client/context-injector.js +296 -0
- package/dist/npm-client/context-injector.js.map +1 -0
- package/dist/npm-client/index.d.ts +42 -0
- package/dist/npm-client/index.d.ts.map +1 -0
- package/dist/npm-client/index.js +43 -0
- package/dist/npm-client/index.js.map +1 -0
- package/dist/npm-client/memento-client.d.ts +114 -0
- package/dist/npm-client/memento-client.d.ts.map +1 -0
- package/dist/npm-client/memento-client.js +391 -0
- package/dist/npm-client/memento-client.js.map +1 -0
- package/dist/npm-client/memory-manager.d.ts +137 -0
- package/dist/npm-client/memory-manager.d.ts.map +1 -0
- package/dist/npm-client/memory-manager.js +341 -0
- package/dist/npm-client/memory-manager.js.map +1 -0
- package/dist/npm-client/types.d.ts +216 -0
- package/dist/npm-client/types.d.ts.map +1 -0
- package/dist/npm-client/types.js +44 -0
- package/dist/npm-client/types.js.map +1 -0
- package/dist/npm-client/utils.d.ts +91 -0
- package/dist/npm-client/utils.d.ts.map +1 -0
- package/dist/npm-client/utils.js +351 -0
- package/dist/npm-client/utils.js.map +1 -0
- package/dist/scripts/copy-assets.d.ts +3 -0
- package/dist/scripts/copy-assets.d.ts.map +1 -0
- package/dist/scripts/copy-assets.js +31 -0
- package/dist/scripts/copy-assets.js.map +1 -0
- package/dist/server/http-server.d.ts +28 -0
- package/dist/server/http-server.d.ts.map +1 -0
- package/dist/server/http-server.js +930 -0
- package/dist/server/http-server.js.map +1 -0
- package/dist/server/index-backup.d.ts +5 -0
- package/dist/server/index-backup.d.ts.map +1 -0
- package/dist/server/index-backup.js +793 -0
- package/dist/server/index-backup.js.map +1 -0
- package/dist/server/index-refactored.d.ts +6 -0
- package/dist/server/index-refactored.d.ts.map +1 -0
- package/dist/server/index-refactored.js +206 -0
- package/dist/server/index-refactored.js.map +1 -0
- package/dist/server/index.d.ts +12 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +301 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/simple-mcp-server.d.ts +8 -0
- package/dist/server/simple-mcp-server.d.ts.map +1 -0
- package/dist/server/simple-mcp-server.js +152 -0
- package/dist/server/simple-mcp-server.js.map +1 -0
- package/dist/services/async-optimizer.d.ts +136 -0
- package/dist/services/async-optimizer.d.ts.map +1 -0
- package/dist/services/async-optimizer.js +406 -0
- package/dist/services/async-optimizer.js.map +1 -0
- package/dist/services/batch-scheduler.d.ts +156 -0
- package/dist/services/batch-scheduler.d.ts.map +1 -0
- package/dist/services/batch-scheduler.js +612 -0
- package/dist/services/batch-scheduler.js.map +1 -0
- package/dist/services/cache-service.d.ts +168 -0
- package/dist/services/cache-service.d.ts.map +1 -0
- package/dist/services/cache-service.js +360 -0
- package/dist/services/cache-service.js.map +1 -0
- package/dist/services/database-optimizer.d.ts +110 -0
- package/dist/services/database-optimizer.d.ts.map +1 -0
- package/dist/services/database-optimizer.js +369 -0
- package/dist/services/database-optimizer.js.map +1 -0
- package/dist/services/embedding-provider-factory.d.ts +62 -0
- package/dist/services/embedding-provider-factory.d.ts.map +1 -0
- package/dist/services/embedding-provider-factory.js +152 -0
- package/dist/services/embedding-provider-factory.js.map +1 -0
- package/dist/services/embedding-service.d.ts +95 -0
- package/dist/services/embedding-service.d.ts.map +1 -0
- package/dist/services/embedding-service.js +276 -0
- package/dist/services/embedding-service.js.map +1 -0
- package/dist/services/error-logging-service.d.ts +134 -0
- package/dist/services/error-logging-service.d.ts.map +1 -0
- package/dist/services/error-logging-service.js +271 -0
- package/dist/services/error-logging-service.js.map +1 -0
- package/dist/services/forgetting-policy-service.d.ts +94 -0
- package/dist/services/forgetting-policy-service.d.ts.map +1 -0
- package/dist/services/forgetting-policy-service.js +233 -0
- package/dist/services/forgetting-policy-service.js.map +1 -0
- package/dist/services/gemini-embedding-service.d.ts +82 -0
- package/dist/services/gemini-embedding-service.d.ts.map +1 -0
- package/dist/services/gemini-embedding-service.js +232 -0
- package/dist/services/gemini-embedding-service.js.map +1 -0
- package/dist/services/lightweight-embedding-service.d.ts +95 -0
- package/dist/services/lightweight-embedding-service.d.ts.map +1 -0
- package/dist/services/lightweight-embedding-service.js +263 -0
- package/dist/services/lightweight-embedding-service.js.map +1 -0
- package/dist/services/memory-embedding-service.d.ts +69 -0
- package/dist/services/memory-embedding-service.d.ts.map +1 -0
- package/dist/services/memory-embedding-service.js +223 -0
- package/dist/services/memory-embedding-service.js.map +1 -0
- package/dist/services/minilm-embedding-service.d.ts +92 -0
- package/dist/services/minilm-embedding-service.d.ts.map +1 -0
- package/dist/services/minilm-embedding-service.js +216 -0
- package/dist/services/minilm-embedding-service.js.map +1 -0
- package/dist/services/performance-alert-service.d.ts +142 -0
- package/dist/services/performance-alert-service.d.ts.map +1 -0
- package/dist/services/performance-alert-service.js +366 -0
- package/dist/services/performance-alert-service.js.map +1 -0
- package/dist/services/performance-monitor.d.ts +144 -0
- package/dist/services/performance-monitor.d.ts.map +1 -0
- package/dist/services/performance-monitor.js +416 -0
- package/dist/services/performance-monitor.js.map +1 -0
- package/dist/services/performance-monitoring-integration.d.ts +77 -0
- package/dist/services/performance-monitoring-integration.d.ts.map +1 -0
- package/dist/services/performance-monitoring-integration.js +177 -0
- package/dist/services/performance-monitoring-integration.js.map +1 -0
- package/dist/services/unified-embedding-service.d.ts +75 -0
- package/dist/services/unified-embedding-service.d.ts.map +1 -0
- package/dist/services/unified-embedding-service.js +211 -0
- package/dist/services/unified-embedding-service.js.map +1 -0
- package/dist/test/debug-http-v2.d.ts +5 -0
- package/dist/test/debug-http-v2.d.ts.map +1 -0
- package/dist/test/debug-http-v2.js +28 -0
- package/dist/test/debug-http-v2.js.map +1 -0
- package/dist/test/performance-benchmark.d.ts +57 -0
- package/dist/test/performance-benchmark.d.ts.map +1 -0
- package/dist/test/performance-benchmark.js +427 -0
- package/dist/test/performance-benchmark.js.map +1 -0
- package/dist/test/test-alerts-direct.d.ts +7 -0
- package/dist/test/test-alerts-direct.d.ts.map +1 -0
- package/dist/test/test-alerts-direct.js +101 -0
- package/dist/test/test-alerts-direct.js.map +1 -0
- package/dist/test/test-batch-scheduler.d.ts +2 -0
- package/dist/test/test-batch-scheduler.d.ts.map +1 -0
- package/dist/test/test-batch-scheduler.js +156 -0
- package/dist/test/test-batch-scheduler.js.map +1 -0
- package/dist/test/test-client.d.ts +5 -0
- package/dist/test/test-client.d.ts.map +1 -0
- package/dist/test/test-client.js +86 -0
- package/dist/test/test-client.js.map +1 -0
- package/dist/test/test-embedding.d.ts +6 -0
- package/dist/test/test-embedding.d.ts.map +1 -0
- package/dist/test/test-embedding.js +142 -0
- package/dist/test/test-embedding.js.map +1 -0
- package/dist/test/test-error-logging.d.ts +7 -0
- package/dist/test/test-error-logging.d.ts.map +1 -0
- package/dist/test/test-error-logging.js +105 -0
- package/dist/test/test-error-logging.js.map +1 -0
- package/dist/test/test-forgetting.d.ts +6 -0
- package/dist/test/test-forgetting.d.ts.map +1 -0
- package/dist/test/test-forgetting.js +154 -0
- package/dist/test/test-forgetting.js.map +1 -0
- package/dist/test/test-gemini-embedding.d.ts +7 -0
- package/dist/test/test-gemini-embedding.d.ts.map +1 -0
- package/dist/test/test-gemini-embedding.js +134 -0
- package/dist/test/test-gemini-embedding.js.map +1 -0
- package/dist/test/test-http-server-v2-simple.d.ts +6 -0
- package/dist/test/test-http-server-v2-simple.d.ts.map +1 -0
- package/dist/test/test-http-server-v2-simple.js +131 -0
- package/dist/test/test-http-server-v2-simple.js.map +1 -0
- package/dist/test/test-http-server-v2.d.ts +7 -0
- package/dist/test/test-http-server-v2.d.ts.map +1 -0
- package/dist/test/test-http-server-v2.js +529 -0
- package/dist/test/test-http-server-v2.js.map +1 -0
- package/dist/test/test-lightweight-embedding.d.ts +6 -0
- package/dist/test/test-lightweight-embedding.d.ts.map +1 -0
- package/dist/test/test-lightweight-embedding.js +189 -0
- package/dist/test/test-lightweight-embedding.js.map +1 -0
- package/dist/test/test-m1-completion.d.ts +7 -0
- package/dist/test/test-m1-completion.d.ts.map +1 -0
- package/dist/test/test-m1-completion.js +124 -0
- package/dist/test/test-m1-completion.js.map +1 -0
- package/dist/test/test-memory-injection-prompt.d.ts +2 -0
- package/dist/test/test-memory-injection-prompt.d.ts.map +1 -0
- package/dist/test/test-memory-injection-prompt.js +299 -0
- package/dist/test/test-memory-injection-prompt.js.map +1 -0
- package/dist/test/test-performance-alerts.d.ts +7 -0
- package/dist/test/test-performance-alerts.d.ts.map +1 -0
- package/dist/test/test-performance-alerts.js +109 -0
- package/dist/test/test-performance-alerts.js.map +1 -0
- package/dist/test/test-performance-monitor.d.ts +2 -0
- package/dist/test/test-performance-monitor.d.ts.map +1 -0
- package/dist/test/test-performance-monitor.js +182 -0
- package/dist/test/test-performance-monitor.js.map +1 -0
- package/dist/test/test-performance-monitoring.d.ts +6 -0
- package/dist/test/test-performance-monitoring.d.ts.map +1 -0
- package/dist/test/test-performance-monitoring.js +156 -0
- package/dist/test/test-performance-monitoring.js.map +1 -0
- package/dist/test/test-search.d.ts +5 -0
- package/dist/test/test-search.d.ts.map +1 -0
- package/dist/test/test-search.js +141 -0
- package/dist/test/test-search.js.map +1 -0
- package/dist/test/test-simple-alerts.d.ts +6 -0
- package/dist/test/test-simple-alerts.d.ts.map +1 -0
- package/dist/test/test-simple-alerts.js +106 -0
- package/dist/test/test-simple-alerts.js.map +1 -0
- package/dist/test/test-vector-search-engine.d.ts +2 -0
- package/dist/test/test-vector-search-engine.d.ts.map +1 -0
- package/dist/test/test-vector-search-engine.js +225 -0
- package/dist/test/test-vector-search-engine.js.map +1 -0
- package/dist/tools/base-tool.d.ts +64 -0
- package/dist/tools/base-tool.d.ts.map +1 -0
- package/dist/tools/base-tool.js +158 -0
- package/dist/tools/base-tool.js.map +1 -0
- package/dist/tools/cleanup-memory-tool.d.ts +10 -0
- package/dist/tools/cleanup-memory-tool.d.ts.map +1 -0
- package/dist/tools/cleanup-memory-tool.js +66 -0
- package/dist/tools/cleanup-memory-tool.js.map +1 -0
- package/dist/tools/database-optimize-tool.d.ts +10 -0
- package/dist/tools/database-optimize-tool.d.ts.map +1 -0
- package/dist/tools/database-optimize-tool.js +64 -0
- package/dist/tools/database-optimize-tool.js.map +1 -0
- package/dist/tools/error-stats.d.ts +93 -0
- package/dist/tools/error-stats.d.ts.map +1 -0
- package/dist/tools/error-stats.js +115 -0
- package/dist/tools/error-stats.js.map +1 -0
- package/dist/tools/forget-tool.d.ts +63 -0
- package/dist/tools/forget-tool.d.ts.map +1 -0
- package/dist/tools/forget-tool.js +340 -0
- package/dist/tools/forget-tool.js.map +1 -0
- package/dist/tools/forgetting-stats-tool.d.ts +10 -0
- package/dist/tools/forgetting-stats-tool.d.ts.map +1 -0
- package/dist/tools/forgetting-stats-tool.js +37 -0
- package/dist/tools/forgetting-stats-tool.js.map +1 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +55 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory-injection-prompt.d.ts +31 -0
- package/dist/tools/memory-injection-prompt.d.ts.map +1 -0
- package/dist/tools/memory-injection-prompt.js +203 -0
- package/dist/tools/memory-injection-prompt.js.map +1 -0
- package/dist/tools/performance-alerts.d.ts +127 -0
- package/dist/tools/performance-alerts.d.ts.map +1 -0
- package/dist/tools/performance-alerts.js +208 -0
- package/dist/tools/performance-alerts.js.map +1 -0
- package/dist/tools/performance-stats-tool.d.ts +10 -0
- package/dist/tools/performance-stats-tool.d.ts.map +1 -0
- package/dist/tools/performance-stats-tool.js +38 -0
- package/dist/tools/performance-stats-tool.js.map +1 -0
- package/dist/tools/pin-tool.d.ts +39 -0
- package/dist/tools/pin-tool.d.ts.map +1 -0
- package/dist/tools/pin-tool.js +211 -0
- package/dist/tools/pin-tool.js.map +1 -0
- package/dist/tools/recall-tool.d.ts +27 -0
- package/dist/tools/recall-tool.d.ts.map +1 -0
- package/dist/tools/recall-tool.js +335 -0
- package/dist/tools/recall-tool.js.map +1 -0
- package/dist/tools/remember-tool.d.ts +10 -0
- package/dist/tools/remember-tool.d.ts.map +1 -0
- package/dist/tools/remember-tool.js +101 -0
- package/dist/tools/remember-tool.js.map +1 -0
- package/dist/tools/resolve-error.d.ts +54 -0
- package/dist/tools/resolve-error.d.ts.map +1 -0
- package/dist/tools/resolve-error.js +63 -0
- package/dist/tools/resolve-error.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +134 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +337 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/types.d.ts +56 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +23 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/unpin-tool.d.ts +43 -0
- package/dist/tools/unpin-tool.d.ts.map +1 -0
- package/dist/tools/unpin-tool.js +233 -0
- package/dist/tools/unpin-tool.js.map +1 -0
- package/dist/types/embedding.types.d.ts +65 -0
- package/dist/types/embedding.types.d.ts.map +1 -0
- package/dist/types/embedding.types.js +6 -0
- package/dist/types/embedding.types.js.map +1 -0
- package/dist/types/index.d.ts +103 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/database.d.ts +62 -0
- package/dist/utils/database.d.ts.map +1 -0
- package/dist/utils/database.js +399 -0
- package/dist/utils/database.js.map +1 -0
- package/dist/utils/stopwords.d.ts +18 -0
- package/dist/utils/stopwords.d.ts.map +1 -0
- package/dist/utils/stopwords.js +117 -0
- package/dist/utils/stopwords.js.map +1 -0
- package/docker-compose.dev.yml +50 -0
- package/docker-compose.prod.yml +77 -0
- package/docker-compose.yml +43 -0
- package/docs/en/Memento-Goals.md +217 -0
- package/docs/en/Memento-M1-DetailSpecs.md +130 -0
- package/docs/en/Memento-Milestones.md +135 -0
- package/docs/en/Search-Ranking-Memory-Decay-Formulas.md +177 -0
- package/docs/en/api-reference.md +658 -0
- package/docs/en/architecture.md +1302 -0
- package/docs/en/developer-guide.md +1005 -0
- package/docs/en/user-manual.md +595 -0
- package/docs/ko/Memento-Goals.md +217 -0
- package/docs/ko/Memento-M1-DetailSpecs.md +130 -0
- package/docs/ko/Memento-Milestones.md +134 -0
- package/docs/ko/Search-Ranking-Memory-Decay-Formulas.md +177 -0
- package/docs/ko/api-reference.md +658 -0
- package/docs/ko/architecture.md +1302 -0
- package/docs/ko/developer-guide.md +1006 -0
- package/docs/ko/embedding-api-reference.md +122 -0
- package/docs/ko/embedding-configuration.md +62 -0
- package/docs/ko/embedding-performance-benchmark.md +62 -0
- package/docs/ko/embedding-service-guide.md +314 -0
- package/docs/ko/user-manual.md +595 -0
- package/env.example +49 -0
- package/install.sh +191 -0
- package/mcp-http-client.js +218 -0
- package/mcp.json +0 -0
- package/package.json +125 -0
- package/packages/mcp-client/docs/API-REFERENCE.md +560 -0
- package/packages/mcp-client/docs/BEST-PRACTICES.md +564 -0
- package/packages/mcp-client/docs/MIGRATION-GUIDE.md +344 -0
- package/packages/mcp-client/docs/PERFORMANCE-GUIDE.md +476 -0
- package/packages/mcp-client/docs/TROUBLESHOOTING.md +564 -0
- package/packages/mcp-client/package-lock.json +907 -0
- package/packages/mcp-client/package.json +58 -0
- package/packages/mcp-client/performance-optimizer.js +428 -0
- package/packages/mcp-client/test-basic.js +65 -0
- package/packages/mcp-client/test-integration.js +366 -0
- package/scripts/auto-setup.js +234 -0
- package/scripts/backup-daily.bat +28 -0
- package/scripts/backup-embeddings.js +108 -0
- package/scripts/check-db-integrity.js +93 -0
- package/scripts/debug-embeddings.js +184 -0
- package/scripts/direct-sql-migration.sql +36 -0
- package/scripts/docker-migration.sh +105 -0
- package/scripts/fix-migration.js +93 -0
- package/scripts/fix-vector-dimensions.js +206 -0
- package/scripts/migrate-embedding-data.js +307 -0
- package/scripts/regenerate-embeddings.js +144 -0
- package/scripts/restore-legacy.ps1 +60 -0
- package/scripts/restore-legacy.sh +62 -0
- package/scripts/run-migration.js +122 -0
- package/scripts/safe-migration.js +150 -0
- package/scripts/simple-migrate.js +41 -0
- package/scripts/simple-update.js +123 -0
- package/scripts/start-container.sh +10 -0
- package/src/algorithms/forgetting-algorithm.spec.ts +538 -0
- package/src/algorithms/forgetting-algorithm.ts +243 -0
- package/src/algorithms/hybrid-search-engine.spec.ts +484 -0
- package/src/algorithms/hybrid-search-engine.ts +489 -0
- package/src/algorithms/search-engine.spec.ts +429 -0
- package/src/algorithms/search-engine.ts +392 -0
- package/src/algorithms/search-ranking.spec.ts +293 -0
- package/src/algorithms/search-ranking.ts +407 -0
- package/src/algorithms/spaced-repetition.spec.ts +510 -0
- package/src/algorithms/spaced-repetition.ts +238 -0
- package/src/algorithms/vector-search-engine.ts +505 -0
- package/src/client/index.spec.ts +427 -0
- package/src/client/index.ts +222 -0
- package/src/config/index.spec.ts +339 -0
- package/src/config/index.ts +106 -0
- package/src/database/init.spec.ts +239 -0
- package/src/database/init.ts +130 -0
- package/src/database/migrate.spec.ts +293 -0
- package/src/database/migrate.ts +94 -0
- package/src/database/migrations/001_add_embedding_metadata.sql +29 -0
- package/src/database/schema.sql +159 -0
- package/src/npm-client/context-injector.spec.ts +335 -0
- package/src/npm-client/context-injector.ts +412 -0
- package/src/npm-client/index.spec.ts +108 -0
- package/src/npm-client/index.ts +96 -0
- package/src/npm-client/memento-client.spec.ts +549 -0
- package/src/npm-client/memento-client.ts +501 -0
- package/src/npm-client/memory-manager.spec.ts +374 -0
- package/src/npm-client/memory-manager.ts +414 -0
- package/src/npm-client/types.spec.ts +427 -0
- package/src/npm-client/types.ts +296 -0
- package/src/npm-client/utils.spec.ts +355 -0
- package/src/npm-client/utils.ts +423 -0
- package/src/scripts/copy-assets.js +37 -0
- package/src/server/http-server.spec.ts +648 -0
- package/src/server/http-server.ts +1030 -0
- package/src/server/index-backup.ts +875 -0
- package/src/server/index-refactored.ts +237 -0
- package/src/server/index.spec.ts +281 -0
- package/src/server/index.ts +347 -0
- package/src/server/simple-mcp-server.spec.ts +207 -0
- package/src/server/simple-mcp-server.ts +173 -0
- package/src/services/async-optimizer.spec.ts +569 -0
- package/src/services/async-optimizer.ts +484 -0
- package/src/services/batch-scheduler.ts +759 -0
- package/src/services/cache-service.spec.ts +372 -0
- package/src/services/cache-service.ts +434 -0
- package/src/services/database-optimizer.spec.ts +344 -0
- package/src/services/database-optimizer.ts +450 -0
- package/src/services/embedding-provider-factory.ts +173 -0
- package/src/services/embedding-service.spec.ts +342 -0
- package/src/services/embedding-service.ts +333 -0
- package/src/services/error-logging-service.spec.ts +416 -0
- package/src/services/error-logging-service.ts +383 -0
- package/src/services/forgetting-policy-service.spec.ts +140 -0
- package/src/services/forgetting-policy-service.ts +334 -0
- package/src/services/gemini-embedding-service.spec.ts +463 -0
- package/src/services/gemini-embedding-service.ts +283 -0
- package/src/services/lightweight-embedding-service.spec.ts +458 -0
- package/src/services/lightweight-embedding-service.ts +324 -0
- package/src/services/memory-embedding-service.spec.ts +417 -0
- package/src/services/memory-embedding-service.ts +289 -0
- package/src/services/minilm-embedding-service.spec.ts +104 -0
- package/src/services/minilm-embedding-service.ts +262 -0
- package/src/services/performance-alert-service.spec.ts +517 -0
- package/src/services/performance-alert-service.ts +477 -0
- package/src/services/performance-monitor.spec.ts +401 -0
- package/src/services/performance-monitor.ts +532 -0
- package/src/services/performance-monitoring-integration.spec.ts +478 -0
- package/src/services/performance-monitoring-integration.ts.bak +276 -0
- package/src/services/unified-embedding-service.spec.ts +224 -0
- package/src/services/unified-embedding-service.ts +255 -0
- package/src/test/debug-http-v2.ts +30 -0
- package/src/test/embedding-integration-test.spec.ts +295 -0
- package/src/test/embedding-integration-test.ts +295 -0
- package/src/test/embedding-performance-benchmark.spec.ts +354 -0
- package/src/test/embedding-performance-benchmark.ts +312 -0
- package/src/test/performance-benchmark.ts +565 -0
- package/src/test/test-alerts-direct.ts +136 -0
- package/src/test/test-batch-scheduler-simple.spec.ts +122 -0
- package/src/test/test-batch-scheduler.spec.ts +453 -0
- package/src/test/test-batch-scheduler.ts +182 -0
- package/src/test/test-client.ts +97 -0
- package/src/test/test-embedding.ts +153 -0
- package/src/test/test-error-handling.spec.ts +575 -0
- package/src/test/test-error-logging.ts +117 -0
- package/src/test/test-forgetting.ts +162 -0
- package/src/test/test-gemini-embedding.ts +159 -0
- package/src/test/test-http-server-v2-simple.ts +147 -0
- package/src/test/test-http-server-v2.ts +586 -0
- package/src/test/test-hybrid-search-engine.spec.ts +521 -0
- package/src/test/test-integration-fixed.spec.ts +612 -0
- package/src/test/test-integration.spec.ts +463 -0
- package/src/test/test-lightweight-embedding.ts +208 -0
- package/src/test/test-m1-completion.spec.ts +614 -0
- package/src/test/test-m1-completion.ts +141 -0
- package/src/test/test-m1-integration.spec.ts +514 -0
- package/src/test/test-memory-injection-prompt.spec.ts +650 -0
- package/src/test/test-memory-injection-prompt.ts +391 -0
- package/src/test/test-performance-alerts.ts +125 -0
- package/src/test/test-performance-monitor-updates.spec.ts +490 -0
- package/src/test/test-performance-monitor.spec.ts +284 -0
- package/src/test/test-performance-monitor.ts +228 -0
- package/src/test/test-performance-monitoring.ts +171 -0
- package/src/test/test-search.ts +151 -0
- package/src/test/test-simple-alerts.ts +136 -0
- package/src/test/test-vector-search-engine.spec.ts +408 -0
- package/src/test/test-vector-search-engine.ts +303 -0
- package/src/tools/base-tool.ts +189 -0
- package/src/tools/cleanup-memory-tool.ts +77 -0
- package/src/tools/database-optimize-tool.ts +79 -0
- package/src/tools/error-stats.ts +119 -0
- package/src/tools/forget-tool.spec.ts +613 -0
- package/src/tools/forget-tool.ts +454 -0
- package/src/tools/forgetting-stats-tool.ts +47 -0
- package/src/tools/index.ts +71 -0
- package/src/tools/memory-injection-prompt.ts +257 -0
- package/src/tools/performance-alerts.ts +226 -0
- package/src/tools/performance-stats-tool.ts +48 -0
- package/src/tools/pin-tool.spec.ts +497 -0
- package/src/tools/pin-tool.ts +277 -0
- package/src/tools/recall-tool.spec.ts +475 -0
- package/src/tools/recall-tool.ts +389 -0
- package/src/tools/remember-tool.spec.ts +469 -0
- package/src/tools/remember-tool.ts +112 -0
- package/src/tools/resolve-error.ts +69 -0
- package/src/tools/tool-registry.ts +417 -0
- package/src/tools/types.ts +63 -0
- package/src/tools/unpin-tool.spec.ts +549 -0
- package/src/tools/unpin-tool.ts +306 -0
- package/src/types/embedding.types.ts +78 -0
- package/src/types/index.spec.ts +420 -0
- package/src/types/index.ts +117 -0
- package/src/utils/database.spec.ts +77 -0
- package/src/utils/database.ts +458 -0
- package/src/utils/stopwords.ts +128 -0
- package/start-docker-setup.bat +38 -0
- package/static/logo.png +0 -0
- package/static/memento_logo.svg +2 -0
- package/test-docker.js +103 -0
- package/tsconfig.json +46 -0
- 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
|
+
}
|