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,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
globs: *.ts,*.js
|
|
3
|
+
description: 캐시 서비스 개발 규칙
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 캐시 관리 서비스 개발 규칙
|
|
7
|
+
|
|
8
|
+
## 🗄️ 캐시 서비스 아키텍처
|
|
9
|
+
|
|
10
|
+
### 핵심 컴포넌트
|
|
11
|
+
|
|
12
|
+
#### 1. Cache Service (`src/services/cache-service.ts` - 352줄)
|
|
13
|
+
- **LRU 캐시 구현**: 최근 사용 항목 우선 유지
|
|
14
|
+
- **TTL 관리**: 시간 기반 캐시 만료
|
|
15
|
+
- **메모리 효율적 관리**: 캐시 크기 제한 및 정리
|
|
16
|
+
- **통계 수집**: 캐시 성능 메트릭 제공
|
|
17
|
+
|
|
18
|
+
#### 2. 캐시 타입별 관리
|
|
19
|
+
- **검색 결과 캐시**: 검색 성능 향상
|
|
20
|
+
- **임베딩 캐시**: 임베딩 생성 비용 절약
|
|
21
|
+
- **메타데이터 캐시**: 자주 접근하는 데이터
|
|
22
|
+
- **세션 캐시**: 사용자 세션 정보
|
|
23
|
+
|
|
24
|
+
## 🔧 캐시 구현 가이드라인
|
|
25
|
+
|
|
26
|
+
### LRU 캐시 구현
|
|
27
|
+
```typescript
|
|
28
|
+
interface LRUCache<T> {
|
|
29
|
+
maxSize: number;
|
|
30
|
+
ttl: number;
|
|
31
|
+
get(key: string): T | null;
|
|
32
|
+
set(key: string, value: T): void;
|
|
33
|
+
delete(key: string): boolean;
|
|
34
|
+
clear(): void;
|
|
35
|
+
size(): number;
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### TTL 관리
|
|
40
|
+
- **검색 결과**: 1시간 (3600초)
|
|
41
|
+
- **임베딩**: 24시간 (86400초)
|
|
42
|
+
- **메타데이터**: 30분 (1800초)
|
|
43
|
+
- **세션**: 2시간 (7200초)
|
|
44
|
+
|
|
45
|
+
### 캐시 키 전략
|
|
46
|
+
- **검색 결과**: `search:${hash(query)}`
|
|
47
|
+
- **임베딩**: `embedding:${hash(text)}`
|
|
48
|
+
- **메타데이터**: `meta:${type}:${id}`
|
|
49
|
+
- **세션**: `session:${sessionId}`
|
|
50
|
+
|
|
51
|
+
## 📊 캐시 성능 메트릭
|
|
52
|
+
|
|
53
|
+
### 주요 지표
|
|
54
|
+
- **캐시 히트율**: 80% 이상 목표
|
|
55
|
+
- **캐시 크기**: 메모리 사용량 제한
|
|
56
|
+
- **평균 응답 시간**: 캐시된 데이터 접근 시간
|
|
57
|
+
- **캐시 정리 빈도**: 만료된 항목 제거 빈도
|
|
58
|
+
|
|
59
|
+
### 모니터링
|
|
60
|
+
- **실시간 통계**: 현재 캐시 상태
|
|
61
|
+
- **히스토리 추적**: 성능 변화 추이
|
|
62
|
+
- **알림 설정**: 임계값 초과 시 알림
|
|
63
|
+
- **리포트 생성**: 정기적인 성능 리포트
|
|
64
|
+
|
|
65
|
+
## 🚀 캐시 최적화 전략
|
|
66
|
+
|
|
67
|
+
### 메모리 최적화
|
|
68
|
+
1. **크기 제한**: 최대 캐시 크기 설정
|
|
69
|
+
2. **자동 정리**: 만료된 항목 자동 제거
|
|
70
|
+
3. **우선순위**: 중요한 데이터 우선 유지
|
|
71
|
+
4. **압축**: 대용량 데이터 압축 저장
|
|
72
|
+
|
|
73
|
+
### 성능 최적화
|
|
74
|
+
1. **병렬 처리**: 동시 캐시 접근 처리
|
|
75
|
+
2. **배치 작업**: 대량 캐시 작업 최적화
|
|
76
|
+
3. **지연 로딩**: 필요 시에만 데이터 로드
|
|
77
|
+
4. **예측적 캐싱**: 자주 사용될 데이터 미리 캐싱
|
|
78
|
+
|
|
79
|
+
### 안정성 보장
|
|
80
|
+
1. **에러 처리**: 캐시 실패 시 대체 방안
|
|
81
|
+
2. **데이터 일관성**: 캐시와 원본 데이터 동기화
|
|
82
|
+
3. **복구 메커니즘**: 캐시 손상 시 자동 복구
|
|
83
|
+
4. **백업 전략**: 중요한 캐시 데이터 백업
|
|
84
|
+
|
|
85
|
+
## 🔍 캐시 디버깅
|
|
86
|
+
|
|
87
|
+
### 일반적인 문제
|
|
88
|
+
- **캐시 미스**: 캐시 키 불일치 또는 만료
|
|
89
|
+
- **메모리 누수**: 캐시 크기 제한 초과
|
|
90
|
+
- **성능 저하**: 캐시 히트율 낮음
|
|
91
|
+
- **데이터 불일치**: 캐시와 원본 데이터 차이
|
|
92
|
+
|
|
93
|
+
### 디버깅 도구
|
|
94
|
+
- **캐시 통계**: 현재 캐시 상태 확인
|
|
95
|
+
- **로그 분석**: 캐시 접근 패턴 분석
|
|
96
|
+
- **프로파일링**: 캐시 성능 측정
|
|
97
|
+
- **모니터링**: 실시간 캐시 상태 추적
|
|
98
|
+
|
|
99
|
+
## 📋 캐시 정책
|
|
100
|
+
|
|
101
|
+
### 저장 정책
|
|
102
|
+
- **자동 저장**: 자주 접근하는 데이터 자동 캐싱
|
|
103
|
+
- **수동 저장**: 사용자 요청에 의한 캐싱
|
|
104
|
+
- **조건부 저장**: 특정 조건 만족 시 캐싱
|
|
105
|
+
- **우선순위 저장**: 중요한 데이터 우선 캐싱
|
|
106
|
+
|
|
107
|
+
### 만료 정책
|
|
108
|
+
- **시간 기반**: TTL 만료 시 자동 삭제
|
|
109
|
+
- **크기 기반**: 캐시 크기 초과 시 오래된 항목 삭제
|
|
110
|
+
- **사용 기반**: 사용하지 않는 항목 우선 삭제
|
|
111
|
+
- **수동 삭제**: 사용자 요청에 의한 삭제
|
|
112
|
+
|
|
113
|
+
### 동기화 정책
|
|
114
|
+
- **즉시 동기화**: 데이터 변경 시 즉시 캐시 업데이트
|
|
115
|
+
- **지연 동기화**: 주기적으로 캐시 동기화
|
|
116
|
+
- **조건부 동기화**: 특정 조건에서만 동기화
|
|
117
|
+
- **수동 동기화**: 사용자 요청에 의한 동기화
|
|
118
|
+
|
|
119
|
+
## 🧪 캐시 테스트
|
|
120
|
+
|
|
121
|
+
### 단위 테스트
|
|
122
|
+
- **기본 기능**: 캐시 저장/조회/삭제 테스트
|
|
123
|
+
- **TTL 테스트**: 시간 기반 만료 테스트
|
|
124
|
+
- **크기 제한**: 최대 크기 초과 시 동작 테스트
|
|
125
|
+
- **에러 처리**: 예외 상황 처리 테스트
|
|
126
|
+
|
|
127
|
+
### 성능 테스트
|
|
128
|
+
- **부하 테스트**: 높은 부하에서의 캐시 성능
|
|
129
|
+
- **동시성 테스트**: 동시 접근 시 안정성
|
|
130
|
+
- **메모리 테스트**: 메모리 사용량 측정
|
|
131
|
+
- **응답 시간**: 캐시 접근 응답 시간 측정
|
|
132
|
+
|
|
133
|
+
### 통합 테스트
|
|
134
|
+
- **전체 시스템**: 캐시와 다른 컴포넌트 연동 테스트
|
|
135
|
+
- **데이터 일관성**: 캐시와 원본 데이터 일치성 확인
|
|
136
|
+
- **장애 복구**: 캐시 실패 시 대체 방안 테스트
|
|
137
|
+
- **성능 영향**: 캐시 도입 시 전체 성능 영향 측정
|
|
138
|
+
|
|
139
|
+
## 📈 캐시 모니터링
|
|
140
|
+
|
|
141
|
+
### 실시간 모니터링
|
|
142
|
+
- **캐시 크기**: 현재 사용 중인 메모리
|
|
143
|
+
- **히트율**: 캐시 성공률
|
|
144
|
+
- **응답 시간**: 캐시 접근 속도
|
|
145
|
+
- **에러율**: 캐시 관련 에러 발생률
|
|
146
|
+
|
|
147
|
+
### 알림 설정
|
|
148
|
+
- **히트율 저하**: 70% 미만 시 경고
|
|
149
|
+
- **메모리 사용량**: 90% 초과 시 경고
|
|
150
|
+
- **응답 시간**: 100ms 초과 시 경고
|
|
151
|
+
- **에러율**: 5% 초과 시 경고
|
|
152
|
+
|
|
153
|
+
### 리포트 생성
|
|
154
|
+
- **일일 리포트**: 캐시 성능 요약
|
|
155
|
+
- **주간 리포트**: 성능 트렌드 분석
|
|
156
|
+
- **월간 리포트**: 장기 성능 변화
|
|
157
|
+
- **특별 리포트**: 문제 발생 시 상세 분석
|
|
158
|
+
|
|
159
|
+
## 🎯 캐시 목표
|
|
160
|
+
|
|
161
|
+
### 성능 목표
|
|
162
|
+
- **캐시 히트율**: 80% 이상
|
|
163
|
+
- **평균 응답 시간**: 10ms 이하
|
|
164
|
+
- **메모리 사용량**: 100MB 이하
|
|
165
|
+
- **에러율**: 1% 이하
|
|
166
|
+
|
|
167
|
+
### 가용성 목표
|
|
168
|
+
- **캐시 가용성**: 99.9% 이상
|
|
169
|
+
- **데이터 일관성**: 99.99% 이상
|
|
170
|
+
- **복구 시간**: 5분 이하
|
|
171
|
+
- **데이터 손실**: 0%
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
---
|
|
2
|
+
globs: *.sql,*.ts
|
|
3
|
+
description: 데이터베이스 스키마 및 마이그레이션 규칙
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 데이터베이스 스키마 규칙
|
|
7
|
+
|
|
8
|
+
## 📋 M1 (SQLite) 스키마
|
|
9
|
+
|
|
10
|
+
### 메인 테이블
|
|
11
|
+
```sql
|
|
12
|
+
-- 기억 아이템 테이블
|
|
13
|
+
CREATE TABLE memory_item (
|
|
14
|
+
id TEXT PRIMARY KEY,
|
|
15
|
+
type TEXT CHECK (type IN ('working','episodic','semantic','procedural')),
|
|
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
|
+
source TEXT,
|
|
23
|
+
agent_id TEXT,
|
|
24
|
+
user_id TEXT,
|
|
25
|
+
project_id TEXT,
|
|
26
|
+
origin_trace TEXT -- JSON 형태
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
-- 임베딩 테이블
|
|
30
|
+
CREATE TABLE memory_embedding (
|
|
31
|
+
memory_id TEXT PRIMARY KEY,
|
|
32
|
+
embedding BLOB, -- 벡터 데이터
|
|
33
|
+
dim INTEGER NOT NULL,
|
|
34
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
-- 태그 테이블 (N:N 관계)
|
|
38
|
+
CREATE TABLE memory_tag (
|
|
39
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
40
|
+
name TEXT UNIQUE NOT NULL
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
-- 기억-태그 관계 테이블
|
|
44
|
+
CREATE TABLE memory_item_tag (
|
|
45
|
+
memory_id TEXT,
|
|
46
|
+
tag_id INTEGER,
|
|
47
|
+
PRIMARY KEY (memory_id, tag_id),
|
|
48
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
49
|
+
FOREIGN KEY (tag_id) REFERENCES memory_tag(id) ON DELETE CASCADE
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
-- 기억 간 관계 테이블
|
|
53
|
+
CREATE TABLE memory_link (
|
|
54
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
55
|
+
source_id TEXT NOT NULL,
|
|
56
|
+
target_id TEXT NOT NULL,
|
|
57
|
+
relation_type TEXT CHECK (relation_type IN ('cause_of', 'derived_from', 'duplicates', 'contradicts')),
|
|
58
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
59
|
+
FOREIGN KEY (source_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
60
|
+
FOREIGN KEY (target_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
-- 피드백 이벤트 테이블
|
|
64
|
+
CREATE TABLE feedback_event (
|
|
65
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
66
|
+
memory_id TEXT NOT NULL,
|
|
67
|
+
event_type TEXT CHECK (event_type IN ('used', 'edited', 'neglected', 'helpful', 'not_helpful')),
|
|
68
|
+
score REAL,
|
|
69
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
70
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
-- 작업기억 버퍼 테이블
|
|
74
|
+
CREATE TABLE wm_buffer (
|
|
75
|
+
session_id TEXT PRIMARY KEY,
|
|
76
|
+
items TEXT NOT NULL, -- JSON 형태
|
|
77
|
+
token_budget INTEGER DEFAULT 4000,
|
|
78
|
+
expires_at TIMESTAMP NOT NULL
|
|
79
|
+
);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 인덱스 설정
|
|
83
|
+
```sql
|
|
84
|
+
-- FTS5 텍스트 검색 인덱스
|
|
85
|
+
CREATE VIRTUAL TABLE memory_item_fts USING fts5(
|
|
86
|
+
content,
|
|
87
|
+
content='memory_item',
|
|
88
|
+
content_rowid='rowid'
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
-- VSS 벡터 검색 인덱스 (1536차원)
|
|
92
|
+
CREATE VIRTUAL TABLE memory_item_vss USING vss0(
|
|
93
|
+
embedding(1536)
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
-- 일반 인덱스
|
|
97
|
+
CREATE INDEX idx_memory_item_type ON memory_item(type);
|
|
98
|
+
CREATE INDEX idx_memory_item_created_at ON memory_item(created_at);
|
|
99
|
+
CREATE INDEX idx_memory_item_last_accessed ON memory_item(last_accessed);
|
|
100
|
+
CREATE INDEX idx_memory_item_importance ON memory_item(importance);
|
|
101
|
+
CREATE INDEX idx_memory_item_pinned ON memory_item(pinned);
|
|
102
|
+
CREATE INDEX idx_memory_item_user_id ON memory_item(user_id);
|
|
103
|
+
CREATE INDEX idx_memory_item_project_id ON memory_item(project_id);
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 📋 M3+ (PostgreSQL) 스키마
|
|
107
|
+
|
|
108
|
+
### 메인 테이블
|
|
109
|
+
```sql
|
|
110
|
+
-- 기억 아이템 테이블
|
|
111
|
+
CREATE TABLE memory_item (
|
|
112
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
113
|
+
type TEXT CHECK (type IN ('working','episodic','semantic','procedural')),
|
|
114
|
+
content TEXT NOT NULL,
|
|
115
|
+
importance REAL CHECK (importance >= 0 AND importance <= 1) DEFAULT 0.5,
|
|
116
|
+
privacy_scope TEXT CHECK (privacy_scope IN ('private','team','public')) DEFAULT 'private',
|
|
117
|
+
created_at TIMESTAMPTZ DEFAULT now(),
|
|
118
|
+
last_accessed TIMESTAMPTZ,
|
|
119
|
+
pinned BOOLEAN DEFAULT FALSE,
|
|
120
|
+
source TEXT,
|
|
121
|
+
agent_id TEXT,
|
|
122
|
+
user_id TEXT NOT NULL,
|
|
123
|
+
project_id TEXT,
|
|
124
|
+
origin_trace JSONB,
|
|
125
|
+
-- 자동 생성 컬럼
|
|
126
|
+
content_tsv tsvector GENERATED ALWAYS AS (to_tsvector('english', content)) STORED
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
-- 임베딩 테이블 (pgvector 사용)
|
|
130
|
+
CREATE TABLE memory_embedding (
|
|
131
|
+
memory_id UUID PRIMARY KEY,
|
|
132
|
+
embedding vector(1536), -- pgvector 확장
|
|
133
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
-- 태그 테이블
|
|
137
|
+
CREATE TABLE memory_tag (
|
|
138
|
+
id SERIAL PRIMARY KEY,
|
|
139
|
+
name TEXT UNIQUE NOT NULL
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
-- 기억-태그 관계 테이블
|
|
143
|
+
CREATE TABLE memory_item_tag (
|
|
144
|
+
memory_id UUID,
|
|
145
|
+
tag_id INTEGER,
|
|
146
|
+
PRIMARY KEY (memory_id, tag_id),
|
|
147
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
148
|
+
FOREIGN KEY (tag_id) REFERENCES memory_tag(id) ON DELETE CASCADE
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
-- 기억 간 관계 테이블
|
|
152
|
+
CREATE TABLE memory_link (
|
|
153
|
+
id SERIAL PRIMARY KEY,
|
|
154
|
+
source_id UUID NOT NULL,
|
|
155
|
+
target_id UUID NOT NULL,
|
|
156
|
+
relation_type TEXT CHECK (relation_type IN ('cause_of', 'derived_from', 'duplicates', 'contradicts')),
|
|
157
|
+
created_at TIMESTAMPTZ DEFAULT now(),
|
|
158
|
+
FOREIGN KEY (source_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
159
|
+
FOREIGN KEY (target_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
-- 피드백 이벤트 테이블
|
|
163
|
+
CREATE TABLE feedback_event (
|
|
164
|
+
id SERIAL PRIMARY KEY,
|
|
165
|
+
memory_id UUID NOT NULL,
|
|
166
|
+
event_type TEXT CHECK (event_type IN ('used', 'edited', 'neglected', 'helpful', 'not_helpful')),
|
|
167
|
+
score REAL,
|
|
168
|
+
created_at TIMESTAMPTZ DEFAULT now(),
|
|
169
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
-- 작업기억 버퍼 테이블
|
|
173
|
+
CREATE TABLE wm_buffer (
|
|
174
|
+
session_id TEXT PRIMARY KEY,
|
|
175
|
+
items JSONB NOT NULL,
|
|
176
|
+
token_budget INTEGER DEFAULT 4000,
|
|
177
|
+
expires_at TIMESTAMPTZ NOT NULL
|
|
178
|
+
);
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 인덱스 설정
|
|
182
|
+
```sql
|
|
183
|
+
-- pgvector 인덱스
|
|
184
|
+
CREATE INDEX ON memory_embedding USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
|
|
185
|
+
|
|
186
|
+
-- GIN 인덱스 (tsvector)
|
|
187
|
+
CREATE INDEX ON memory_item USING GIN (content_tsv);
|
|
188
|
+
|
|
189
|
+
-- 일반 인덱스
|
|
190
|
+
CREATE INDEX idx_memory_item_type ON memory_item(type);
|
|
191
|
+
CREATE INDEX idx_memory_item_created_at ON memory_item(created_at);
|
|
192
|
+
CREATE INDEX idx_memory_item_last_accessed ON memory_item(last_accessed);
|
|
193
|
+
CREATE INDEX idx_memory_item_importance ON memory_item(importance);
|
|
194
|
+
CREATE INDEX idx_memory_item_pinned ON memory_item(pinned);
|
|
195
|
+
CREATE INDEX idx_memory_item_user_id ON memory_item(user_id);
|
|
196
|
+
CREATE INDEX idx_memory_item_project_id ON memory_item(project_id);
|
|
197
|
+
|
|
198
|
+
-- 복합 인덱스
|
|
199
|
+
CREATE INDEX idx_memory_item_user_type ON memory_item(user_id, type);
|
|
200
|
+
CREATE INDEX idx_memory_item_project_type ON memory_item(project_id, type);
|
|
201
|
+
CREATE INDEX idx_memory_item_created_type ON memory_item(created_at, type);
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## 🔄 마이그레이션 가이드
|
|
205
|
+
|
|
206
|
+
### SQLite → PostgreSQL 마이그레이션
|
|
207
|
+
```typescript
|
|
208
|
+
class DatabaseMigrator {
|
|
209
|
+
async migrateFromSQLite(sqlitePath: string, postgresUrl: string): Promise<void> {
|
|
210
|
+
// 1. SQLite에서 데이터 추출
|
|
211
|
+
const sqliteData = await this.extractSQLiteData(sqlitePath);
|
|
212
|
+
|
|
213
|
+
// 2. PostgreSQL 스키마 생성
|
|
214
|
+
await this.createPostgreSQLSchema(postgresUrl);
|
|
215
|
+
|
|
216
|
+
// 3. 데이터 변환 및 삽입
|
|
217
|
+
await this.transformAndInsertData(sqliteData, postgresUrl);
|
|
218
|
+
|
|
219
|
+
// 4. 임베딩 재계산
|
|
220
|
+
await this.recalculateEmbeddings(postgresUrl);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
private async extractSQLiteData(sqlitePath: string): Promise<any> {
|
|
224
|
+
// SQLite 데이터 추출 로직
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
private async createPostgreSQLSchema(postgresUrl: string): Promise<void> {
|
|
228
|
+
// PostgreSQL 스키마 생성 로직
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
private async transformAndInsertData(data: any, postgresUrl: string): Promise<void> {
|
|
232
|
+
// 데이터 변환 및 삽입 로직
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
private async recalculateEmbeddings(postgresUrl: string): Promise<void> {
|
|
236
|
+
// 임베딩 재계산 로직
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 마이그레이션 스크립트
|
|
242
|
+
```sql
|
|
243
|
+
-- 1. SQLite 데이터 추출
|
|
244
|
+
.mode csv
|
|
245
|
+
.headers on
|
|
246
|
+
.output memory_items.csv
|
|
247
|
+
SELECT * FROM memory_item;
|
|
248
|
+
|
|
249
|
+
-- 2. PostgreSQL 데이터 삽입
|
|
250
|
+
\copy memory_item FROM 'memory_items.csv' WITH CSV HEADER;
|
|
251
|
+
|
|
252
|
+
-- 3. 임베딩 재계산 (Python 스크립트)
|
|
253
|
+
-- python recalculate_embeddings.py
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## 🔍 검색 최적화
|
|
257
|
+
|
|
258
|
+
### SQLite 검색 쿼리
|
|
259
|
+
```sql
|
|
260
|
+
-- FTS5 + VSS 결합 검색
|
|
261
|
+
WITH vector_search AS (
|
|
262
|
+
SELECT memory_id, similarity
|
|
263
|
+
FROM memory_item_vss
|
|
264
|
+
WHERE vss_search(embedding, ?)
|
|
265
|
+
ORDER BY similarity DESC
|
|
266
|
+
LIMIT 50
|
|
267
|
+
),
|
|
268
|
+
text_search AS (
|
|
269
|
+
SELECT rowid, rank
|
|
270
|
+
FROM memory_item_fts
|
|
271
|
+
WHERE memory_item_fts MATCH ?
|
|
272
|
+
ORDER BY rank
|
|
273
|
+
LIMIT 50
|
|
274
|
+
)
|
|
275
|
+
SELECT mi.*,
|
|
276
|
+
COALESCE(vs.similarity, 0) as vector_score,
|
|
277
|
+
COALESCE(ts.rank, 0) as text_score
|
|
278
|
+
FROM memory_item mi
|
|
279
|
+
LEFT JOIN vector_search vs ON mi.id = vs.memory_id
|
|
280
|
+
LEFT JOIN text_search ts ON mi.rowid = ts.rowid
|
|
281
|
+
WHERE vs.memory_id IS NOT NULL OR ts.rowid IS NOT NULL
|
|
282
|
+
ORDER BY (vector_score + text_score) DESC;
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### PostgreSQL 검색 쿼리
|
|
286
|
+
```sql
|
|
287
|
+
-- pgvector + tsvector 결합 검색
|
|
288
|
+
WITH vector_search AS (
|
|
289
|
+
SELECT id, 1 - (embedding <=> ?) as similarity
|
|
290
|
+
FROM memory_embedding
|
|
291
|
+
ORDER BY embedding <=> ?
|
|
292
|
+
LIMIT 50
|
|
293
|
+
),
|
|
294
|
+
text_search AS (
|
|
295
|
+
SELECT id, ts_rank(content_tsv, plainto_tsquery('english', ?)) as rank
|
|
296
|
+
FROM memory_item
|
|
297
|
+
WHERE content_tsv @@ plainto_tsquery('english', ?)
|
|
298
|
+
ORDER BY rank DESC
|
|
299
|
+
LIMIT 50
|
|
300
|
+
)
|
|
301
|
+
SELECT mi.*,
|
|
302
|
+
COALESCE(vs.similarity, 0) as vector_score,
|
|
303
|
+
COALESCE(ts.rank, 0) as text_score
|
|
304
|
+
FROM memory_item mi
|
|
305
|
+
LEFT JOIN vector_search vs ON mi.id = vs.id
|
|
306
|
+
LEFT JOIN text_search ts ON mi.id = ts.id
|
|
307
|
+
WHERE vs.id IS NOT NULL OR ts.id IS NOT NULL
|
|
308
|
+
ORDER BY (vector_score + text_score) DESC;
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## 🧹 데이터 정리 정책
|
|
312
|
+
|
|
313
|
+
### 망각 정책 구현
|
|
314
|
+
```sql
|
|
315
|
+
-- 소프트 삭제 후보 선정
|
|
316
|
+
CREATE VIEW forget_candidates AS
|
|
317
|
+
SELECT id, type, created_at, last_accessed, importance, pinned,
|
|
318
|
+
CASE
|
|
319
|
+
WHEN type = 'working' AND created_at < now() - interval '2 days' THEN true
|
|
320
|
+
WHEN type = 'episodic' AND created_at < now() - interval '90 days' THEN true
|
|
321
|
+
ELSE false
|
|
322
|
+
END as should_forget
|
|
323
|
+
FROM memory_item
|
|
324
|
+
WHERE pinned = false
|
|
325
|
+
AND (type = 'working' OR type = 'episodic');
|
|
326
|
+
|
|
327
|
+
-- 하드 삭제 실행
|
|
328
|
+
DELETE FROM memory_item
|
|
329
|
+
WHERE id IN (
|
|
330
|
+
SELECT id FROM forget_candidates
|
|
331
|
+
WHERE should_forget = true
|
|
332
|
+
);
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### 백업 및 복원
|
|
336
|
+
```sql
|
|
337
|
+
-- 백업
|
|
338
|
+
pg_dump -h localhost -U username -d memory_db > backup.sql
|
|
339
|
+
|
|
340
|
+
-- 복원
|
|
341
|
+
psql -h localhost -U username -d memory_db < backup.sql
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
|