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,586 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP 서버 v2 테스트 스크립트
|
|
3
|
+
* 모듈화된 구조의 HTTP 서버 v2 기능 검증
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { startServer, cleanup, __test } from '../server/http-server.js';
|
|
7
|
+
import { initializeDatabase, closeDatabase } from '../database/init.js';
|
|
8
|
+
import { SearchEngine } from '../algorithms/search-engine.js';
|
|
9
|
+
import { HybridSearchEngine } from '../algorithms/hybrid-search-engine.js';
|
|
10
|
+
import { MemoryEmbeddingService } from '../services/memory-embedding-service.js';
|
|
11
|
+
import Database from 'better-sqlite3';
|
|
12
|
+
|
|
13
|
+
// 테스트용 데이터베이스 설정
|
|
14
|
+
const TEST_DB_PATH = 'data/memory-test-v2.db';
|
|
15
|
+
|
|
16
|
+
async function setupTestDatabase() {
|
|
17
|
+
console.log('🗄️ 테스트 데이터베이스 설정 중...');
|
|
18
|
+
|
|
19
|
+
// 기존 테스트 DB 삭제
|
|
20
|
+
try {
|
|
21
|
+
const fs = await import('fs');
|
|
22
|
+
if (fs.existsSync(TEST_DB_PATH)) {
|
|
23
|
+
fs.unlinkSync(TEST_DB_PATH);
|
|
24
|
+
}
|
|
25
|
+
} catch (error) {
|
|
26
|
+
// 파일이 없으면 무시
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// 새 테스트 DB 생성
|
|
30
|
+
const db = new Database(TEST_DB_PATH);
|
|
31
|
+
|
|
32
|
+
// 스키마 생성
|
|
33
|
+
const schema = `
|
|
34
|
+
CREATE TABLE IF NOT EXISTS memory_item (
|
|
35
|
+
id TEXT PRIMARY KEY,
|
|
36
|
+
type TEXT CHECK (type IN ('working','episodic','semantic','procedural')),
|
|
37
|
+
content TEXT NOT NULL,
|
|
38
|
+
importance REAL CHECK (importance >= 0 AND importance <= 1) DEFAULT 0.5,
|
|
39
|
+
privacy_scope TEXT CHECK (privacy_scope IN ('private','team','public')) DEFAULT 'private',
|
|
40
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
41
|
+
last_accessed TIMESTAMP,
|
|
42
|
+
pinned BOOLEAN DEFAULT FALSE,
|
|
43
|
+
source TEXT,
|
|
44
|
+
agent_id TEXT,
|
|
45
|
+
user_id TEXT,
|
|
46
|
+
project_id TEXT,
|
|
47
|
+
origin_trace TEXT,
|
|
48
|
+
tags TEXT
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
CREATE TABLE IF NOT EXISTS memory_embedding (
|
|
52
|
+
memory_id TEXT PRIMARY KEY,
|
|
53
|
+
embedding BLOB,
|
|
54
|
+
dim INTEGER NOT NULL,
|
|
55
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
CREATE TABLE IF NOT EXISTS memory_tag (
|
|
59
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
60
|
+
name TEXT UNIQUE NOT NULL
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
CREATE TABLE IF NOT EXISTS memory_item_tag (
|
|
64
|
+
memory_id TEXT,
|
|
65
|
+
tag_id INTEGER,
|
|
66
|
+
PRIMARY KEY (memory_id, tag_id),
|
|
67
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
68
|
+
FOREIGN KEY (tag_id) REFERENCES memory_tag(id) ON DELETE CASCADE
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
CREATE TABLE IF NOT EXISTS memory_link (
|
|
72
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
73
|
+
source_id TEXT NOT NULL,
|
|
74
|
+
target_id TEXT NOT NULL,
|
|
75
|
+
relation_type TEXT CHECK (relation_type IN ('cause_of', 'derived_from', 'duplicates', 'contradicts')),
|
|
76
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
77
|
+
FOREIGN KEY (source_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
78
|
+
FOREIGN KEY (target_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
CREATE TABLE IF NOT EXISTS feedback_event (
|
|
82
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
83
|
+
memory_id TEXT NOT NULL,
|
|
84
|
+
event_type TEXT CHECK (event_type IN ('used', 'edited', 'neglected', 'helpful', 'not_helpful')),
|
|
85
|
+
score REAL,
|
|
86
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
87
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
CREATE TABLE IF NOT EXISTS wm_buffer (
|
|
91
|
+
session_id TEXT PRIMARY KEY,
|
|
92
|
+
items TEXT NOT NULL,
|
|
93
|
+
token_budget INTEGER DEFAULT 4000,
|
|
94
|
+
expires_at TIMESTAMP NOT NULL
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
-- FTS5 텍스트 검색 인덱스
|
|
98
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS memory_item_fts USING fts5(
|
|
99
|
+
content,
|
|
100
|
+
content='memory_item',
|
|
101
|
+
content_rowid='rowid'
|
|
102
|
+
);
|
|
103
|
+
`;
|
|
104
|
+
|
|
105
|
+
db.exec(schema);
|
|
106
|
+
|
|
107
|
+
// 테스트 데이터 삽입
|
|
108
|
+
const testMemories = [
|
|
109
|
+
{
|
|
110
|
+
id: 'test_mem_1',
|
|
111
|
+
type: 'episodic',
|
|
112
|
+
content: 'HTTP 서버 v2 테스트를 위한 첫 번째 기억입니다.',
|
|
113
|
+
importance: 0.8,
|
|
114
|
+
tags: JSON.stringify(['test', 'http-server', 'v2'])
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: 'test_mem_2',
|
|
118
|
+
type: 'semantic',
|
|
119
|
+
content: '모듈화된 구조의 장점에 대한 지식입니다.',
|
|
120
|
+
importance: 0.9,
|
|
121
|
+
tags: JSON.stringify(['architecture', 'modularity'])
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: 'test_mem_3',
|
|
125
|
+
type: 'working',
|
|
126
|
+
content: '현재 진행 중인 테스트 작업입니다.',
|
|
127
|
+
importance: 0.6,
|
|
128
|
+
tags: JSON.stringify(['working', 'test'])
|
|
129
|
+
}
|
|
130
|
+
];
|
|
131
|
+
|
|
132
|
+
const insertStmt = db.prepare(`
|
|
133
|
+
INSERT INTO memory_item (id, type, content, importance, tags, created_at)
|
|
134
|
+
VALUES (?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
135
|
+
`);
|
|
136
|
+
|
|
137
|
+
for (const memory of testMemories) {
|
|
138
|
+
insertStmt.run(memory.id, memory.type, memory.content, memory.importance, memory.tags);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
console.log('✅ 테스트 데이터베이스 설정 완료');
|
|
142
|
+
return db;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async function testBasicEndpoints() {
|
|
146
|
+
console.log('\n🧪 1️⃣ 기본 엔드포인트 테스트');
|
|
147
|
+
|
|
148
|
+
try {
|
|
149
|
+
// 헬스 체크 테스트
|
|
150
|
+
console.log(' 📋 헬스 체크 테스트...');
|
|
151
|
+
const healthResponse = await fetch('http://localhost:9001/health');
|
|
152
|
+
const healthData = await healthResponse.json();
|
|
153
|
+
|
|
154
|
+
if (healthResponse.ok && healthData.status === 'healthy') {
|
|
155
|
+
console.log(' ✅ 헬스 체크 성공');
|
|
156
|
+
} else {
|
|
157
|
+
throw new Error('헬스 체크 실패');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// 도구 목록 테스트
|
|
161
|
+
console.log(' 📋 도구 목록 테스트...');
|
|
162
|
+
const toolsResponse = await fetch('http://localhost:9001/tools');
|
|
163
|
+
const toolsData = await toolsResponse.json();
|
|
164
|
+
|
|
165
|
+
if (toolsResponse.ok && toolsData.tools && toolsData.tools.length === 5) {
|
|
166
|
+
console.log(` ✅ 도구 목록 성공 (${toolsData.tools.length}개 도구)`);
|
|
167
|
+
toolsData.tools.forEach((tool: any) => {
|
|
168
|
+
console.log(` - ${tool.name}: ${tool.description}`);
|
|
169
|
+
});
|
|
170
|
+
} else {
|
|
171
|
+
throw new Error('도구 목록 조회 실패');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
} catch (error) {
|
|
175
|
+
console.error(' ❌ 기본 엔드포인트 테스트 실패:', error);
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
async function testMCPTools() {
|
|
181
|
+
console.log('\n🧪 2️⃣ MCP 도구 테스트');
|
|
182
|
+
|
|
183
|
+
try {
|
|
184
|
+
// remember 도구 테스트
|
|
185
|
+
console.log(' 📝 remember 도구 테스트...');
|
|
186
|
+
const rememberResponse = await fetch('http://localhost:9001/tools/remember', {
|
|
187
|
+
method: 'POST',
|
|
188
|
+
headers: { 'Content-Type': 'application/json' },
|
|
189
|
+
body: JSON.stringify({
|
|
190
|
+
content: 'HTTP 서버 v2 테스트를 위한 새로운 기억입니다.',
|
|
191
|
+
type: 'episodic',
|
|
192
|
+
tags: ['test', 'v2'],
|
|
193
|
+
importance: 0.7
|
|
194
|
+
})
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
const rememberData = await rememberResponse.json();
|
|
198
|
+
if (rememberResponse.ok && rememberData.result && rememberData.result.memory_id) {
|
|
199
|
+
console.log(` ✅ remember 성공: ${rememberData.result.memory_id}`);
|
|
200
|
+
const testMemoryId = rememberData.result.memory_id;
|
|
201
|
+
|
|
202
|
+
// recall 도구 테스트
|
|
203
|
+
console.log(' 🔍 recall 도구 테스트...');
|
|
204
|
+
const recallResponse = await fetch('http://localhost:9001/tools/recall', {
|
|
205
|
+
method: 'POST',
|
|
206
|
+
headers: { 'Content-Type': 'application/json' },
|
|
207
|
+
body: JSON.stringify({
|
|
208
|
+
query: 'HTTP 서버 v2',
|
|
209
|
+
limit: 5
|
|
210
|
+
})
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
const recallData = await recallResponse.json();
|
|
214
|
+
if (recallResponse.ok && recallData.result && recallData.result.items) {
|
|
215
|
+
console.log(` ✅ recall 성공: ${recallData.result.items.length}개 결과`);
|
|
216
|
+
} else {
|
|
217
|
+
throw new Error('recall 테스트 실패');
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// pin 도구 테스트
|
|
221
|
+
console.log(' 📌 pin 도구 테스트...');
|
|
222
|
+
const pinResponse = await fetch('http://localhost:9001/tools/pin', {
|
|
223
|
+
method: 'POST',
|
|
224
|
+
headers: { 'Content-Type': 'application/json' },
|
|
225
|
+
body: JSON.stringify({ id: testMemoryId })
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
const pinData = await pinResponse.json();
|
|
229
|
+
if (pinResponse.ok && pinData.result) {
|
|
230
|
+
console.log(' ✅ pin 성공');
|
|
231
|
+
} else {
|
|
232
|
+
throw new Error('pin 테스트 실패');
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// unpin 도구 테스트
|
|
236
|
+
console.log(' 📌 unpin 도구 테스트...');
|
|
237
|
+
const unpinResponse = await fetch('http://localhost:9001/tools/unpin', {
|
|
238
|
+
method: 'POST',
|
|
239
|
+
headers: { 'Content-Type': 'application/json' },
|
|
240
|
+
body: JSON.stringify({ id: testMemoryId })
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
const unpinData = await unpinResponse.json();
|
|
244
|
+
if (unpinResponse.ok && unpinData.result) {
|
|
245
|
+
console.log(' ✅ unpin 성공');
|
|
246
|
+
} else {
|
|
247
|
+
throw new Error('unpin 테스트 실패');
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// forget 도구 테스트 (소프트 삭제)
|
|
251
|
+
console.log(' 🗑️ forget 도구 테스트...');
|
|
252
|
+
const forgetResponse = await fetch('http://localhost:9001/tools/forget', {
|
|
253
|
+
method: 'POST',
|
|
254
|
+
headers: { 'Content-Type': 'application/json' },
|
|
255
|
+
body: JSON.stringify({ id: testMemoryId, hard: false })
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
const forgetData = await forgetResponse.json();
|
|
259
|
+
if (forgetResponse.ok && forgetData.result) {
|
|
260
|
+
console.log(' ✅ forget 성공');
|
|
261
|
+
} else {
|
|
262
|
+
throw new Error('forget 테스트 실패');
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
} else {
|
|
266
|
+
throw new Error('remember 테스트 실패');
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
} catch (error) {
|
|
270
|
+
console.error(' ❌ MCP 도구 테스트 실패:', error);
|
|
271
|
+
throw error;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
async function testAdminAPIs() {
|
|
276
|
+
console.log('\n🧪 3️⃣ 관리자 API 테스트');
|
|
277
|
+
|
|
278
|
+
try {
|
|
279
|
+
// 성능 통계 테스트
|
|
280
|
+
console.log(' 📊 성능 통계 테스트...');
|
|
281
|
+
const perfResponse = await fetch('http://localhost:9001/admin/stats/performance');
|
|
282
|
+
const perfData = await perfResponse.json();
|
|
283
|
+
|
|
284
|
+
if (perfResponse.ok && perfData.message) {
|
|
285
|
+
console.log(' ✅ 성능 통계 성공');
|
|
286
|
+
} else {
|
|
287
|
+
throw new Error('성능 통계 테스트 실패');
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// 망각 통계 테스트
|
|
291
|
+
console.log(' 📊 망각 통계 테스트...');
|
|
292
|
+
const forgetResponse = await fetch('http://localhost:9001/admin/stats/forgetting');
|
|
293
|
+
const forgetData = await forgetResponse.json();
|
|
294
|
+
|
|
295
|
+
if (forgetResponse.ok && forgetData.message) {
|
|
296
|
+
console.log(' ✅ 망각 통계 성공');
|
|
297
|
+
} else {
|
|
298
|
+
throw new Error('망각 통계 테스트 실패');
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// 데이터베이스 최적화 테스트
|
|
302
|
+
console.log(' 🔧 데이터베이스 최적화 테스트...');
|
|
303
|
+
const optimizeResponse = await fetch('http://localhost:9001/admin/database/optimize', {
|
|
304
|
+
method: 'POST'
|
|
305
|
+
});
|
|
306
|
+
const optimizeData = await optimizeResponse.json();
|
|
307
|
+
|
|
308
|
+
if (optimizeResponse.ok && optimizeData.message) {
|
|
309
|
+
console.log(' ✅ 데이터베이스 최적화 성공');
|
|
310
|
+
} else {
|
|
311
|
+
throw new Error('데이터베이스 최적화 테스트 실패');
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// 메모리 정리 테스트
|
|
315
|
+
console.log(' 🧹 메모리 정리 테스트...');
|
|
316
|
+
const cleanupResponse = await fetch('http://localhost:9001/admin/memory/cleanup', {
|
|
317
|
+
method: 'POST'
|
|
318
|
+
});
|
|
319
|
+
const cleanupData = await cleanupResponse.json();
|
|
320
|
+
|
|
321
|
+
if (cleanupResponse.ok && cleanupData.message) {
|
|
322
|
+
console.log(' ✅ 메모리 정리 성공');
|
|
323
|
+
} else {
|
|
324
|
+
throw new Error('메모리 정리 테스트 실패');
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
} catch (error) {
|
|
328
|
+
console.error(' ❌ 관리자 API 테스트 실패:', error);
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
async function testWebSocket() {
|
|
334
|
+
console.log('\n🧪 4️⃣ WebSocket 연결 테스트');
|
|
335
|
+
|
|
336
|
+
return new Promise((resolve, reject) => {
|
|
337
|
+
const WebSocket = require('ws');
|
|
338
|
+
const ws = new WebSocket('ws://localhost:9001');
|
|
339
|
+
|
|
340
|
+
let testPassed = 0;
|
|
341
|
+
const totalTests = 2;
|
|
342
|
+
|
|
343
|
+
ws.on('open', () => {
|
|
344
|
+
console.log(' 🔗 WebSocket 연결 성공');
|
|
345
|
+
|
|
346
|
+
// tools/list 테스트
|
|
347
|
+
const listMessage = {
|
|
348
|
+
jsonrpc: '2.0',
|
|
349
|
+
id: 1,
|
|
350
|
+
method: 'tools/list'
|
|
351
|
+
};
|
|
352
|
+
ws.send(JSON.stringify(listMessage));
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
ws.on('message', (data: string) => {
|
|
356
|
+
try {
|
|
357
|
+
const response = JSON.parse(data);
|
|
358
|
+
|
|
359
|
+
if (response.id === 1 && response.result && response.result.tools) {
|
|
360
|
+
console.log(` ✅ tools/list 성공: ${response.result.tools.length}개 도구`);
|
|
361
|
+
testPassed++;
|
|
362
|
+
|
|
363
|
+
// tools/call 테스트
|
|
364
|
+
const callMessage = {
|
|
365
|
+
jsonrpc: '2.0',
|
|
366
|
+
id: 2,
|
|
367
|
+
method: 'tools/call',
|
|
368
|
+
params: {
|
|
369
|
+
name: 'remember',
|
|
370
|
+
arguments: {
|
|
371
|
+
content: 'WebSocket 테스트를 위한 기억입니다.',
|
|
372
|
+
type: 'episodic'
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
ws.send(JSON.stringify(callMessage));
|
|
377
|
+
} else if (response.id === 2 && response.result) {
|
|
378
|
+
console.log(' ✅ tools/call 성공');
|
|
379
|
+
testPassed++;
|
|
380
|
+
|
|
381
|
+
if (testPassed === totalTests) {
|
|
382
|
+
console.log(' ✅ WebSocket 테스트 완료');
|
|
383
|
+
ws.close();
|
|
384
|
+
resolve(true);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
} catch (error) {
|
|
388
|
+
console.error(' ❌ WebSocket 메시지 파싱 실패:', error);
|
|
389
|
+
reject(error);
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
ws.on('error', (error: Error) => {
|
|
394
|
+
console.error(' ❌ WebSocket 연결 실패:', error);
|
|
395
|
+
reject(error);
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
ws.on('close', () => {
|
|
399
|
+
if (testPassed < totalTests) {
|
|
400
|
+
reject(new Error('WebSocket 테스트 미완료'));
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
// 타임아웃 설정
|
|
405
|
+
setTimeout(() => {
|
|
406
|
+
if (testPassed < totalTests) {
|
|
407
|
+
ws.close();
|
|
408
|
+
reject(new Error('WebSocket 테스트 타임아웃'));
|
|
409
|
+
}
|
|
410
|
+
}, 10000);
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
async function testSSE() {
|
|
415
|
+
console.log('\n🧪 5️⃣ SSE 엔드포인트 테스트');
|
|
416
|
+
|
|
417
|
+
return new Promise((resolve, reject) => {
|
|
418
|
+
const EventSource = require('eventsource');
|
|
419
|
+
let sessionId: string | null = null;
|
|
420
|
+
let testPassed = 0;
|
|
421
|
+
const totalTests = 3;
|
|
422
|
+
|
|
423
|
+
// SSE 연결
|
|
424
|
+
const eventSource = new EventSource('http://localhost:9001/mcp');
|
|
425
|
+
|
|
426
|
+
eventSource.onopen = () => {
|
|
427
|
+
console.log(' 🔗 SSE 연결 성공');
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
eventSource.addEventListener('endpoint', (event: any) => {
|
|
431
|
+
try {
|
|
432
|
+
const endpointUrl = event.data;
|
|
433
|
+
sessionId = endpointUrl.split('sessionId=')[1];
|
|
434
|
+
console.log(` ✅ SSE 엔드포인트 수신: ${sessionId}`);
|
|
435
|
+
testPassed++;
|
|
436
|
+
|
|
437
|
+
// MCP initialize 요청
|
|
438
|
+
sendMCPMessage('initialize', {
|
|
439
|
+
protocolVersion: '2024-11-05',
|
|
440
|
+
capabilities: { tools: {} },
|
|
441
|
+
clientInfo: { name: 'test-client', version: '1.0.0' }
|
|
442
|
+
});
|
|
443
|
+
} catch (error) {
|
|
444
|
+
console.error(' ❌ SSE 엔드포인트 처리 실패:', error);
|
|
445
|
+
reject(error);
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
eventSource.onmessage = (event: any) => {
|
|
450
|
+
try {
|
|
451
|
+
const data = JSON.parse(event.data);
|
|
452
|
+
|
|
453
|
+
if (data.type === 'ready') {
|
|
454
|
+
console.log(' ✅ SSE ready 메시지 수신');
|
|
455
|
+
testPassed++;
|
|
456
|
+
} else if (data.jsonrpc === '2.0' && data.result) {
|
|
457
|
+
if (data.id === 1) {
|
|
458
|
+
console.log(' ✅ MCP initialize 성공');
|
|
459
|
+
testPassed++;
|
|
460
|
+
|
|
461
|
+
if (testPassed === totalTests) {
|
|
462
|
+
console.log(' ✅ SSE 테스트 완료');
|
|
463
|
+
eventSource.close();
|
|
464
|
+
resolve(true);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
} catch (error) {
|
|
469
|
+
console.error(' ❌ SSE 메시지 파싱 실패:', error);
|
|
470
|
+
reject(error);
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
eventSource.onerror = (error: any) => {
|
|
475
|
+
console.error(' ❌ SSE 연결 실패:', error);
|
|
476
|
+
reject(error);
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
// MCP 메시지 전송 함수
|
|
480
|
+
function sendMCPMessage(method: string, params: any) {
|
|
481
|
+
if (!sessionId) {
|
|
482
|
+
reject(new Error('세션 ID가 없습니다'));
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
const message = {
|
|
487
|
+
jsonrpc: '2.0',
|
|
488
|
+
id: 1,
|
|
489
|
+
method: method,
|
|
490
|
+
params: params
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
fetch(`http://localhost:9001/messages?sessionId=${sessionId}`, {
|
|
494
|
+
method: 'POST',
|
|
495
|
+
headers: { 'Content-Type': 'application/json' },
|
|
496
|
+
body: JSON.stringify(message)
|
|
497
|
+
}).catch(error => {
|
|
498
|
+
console.error(' ❌ MCP 메시지 전송 실패:', error);
|
|
499
|
+
reject(error);
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
// 타임아웃 설정
|
|
504
|
+
setTimeout(() => {
|
|
505
|
+
if (testPassed < totalTests) {
|
|
506
|
+
eventSource.close();
|
|
507
|
+
reject(new Error('SSE 테스트 타임아웃'));
|
|
508
|
+
}
|
|
509
|
+
}, 15000);
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
async function runTests() {
|
|
514
|
+
console.log('🚀 HTTP 서버 v2 테스트 시작');
|
|
515
|
+
|
|
516
|
+
let testDb: Database.Database | null = null;
|
|
517
|
+
let serverStarted = false;
|
|
518
|
+
|
|
519
|
+
try {
|
|
520
|
+
// 1. 테스트 데이터베이스 설정
|
|
521
|
+
testDb = await setupTestDatabase();
|
|
522
|
+
|
|
523
|
+
// 2. 서버 의존성 설정
|
|
524
|
+
const searchEngine = new SearchEngine();
|
|
525
|
+
const hybridSearchEngine = new HybridSearchEngine();
|
|
526
|
+
const embeddingService = new MemoryEmbeddingService();
|
|
527
|
+
|
|
528
|
+
__test.setTestDependencies({
|
|
529
|
+
database: testDb,
|
|
530
|
+
searchEngine,
|
|
531
|
+
hybridSearchEngine,
|
|
532
|
+
embeddingService
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
// 3. 서버 시작
|
|
536
|
+
console.log('\n🚀 HTTP 서버 v2 시작 중...');
|
|
537
|
+
await startServer();
|
|
538
|
+
serverStarted = true;
|
|
539
|
+
|
|
540
|
+
// 서버 시작 대기
|
|
541
|
+
await new Promise(resolve => setTimeout(resolve, 3000));
|
|
542
|
+
|
|
543
|
+
// 4. 테스트 실행
|
|
544
|
+
await testBasicEndpoints();
|
|
545
|
+
await testMCPTools();
|
|
546
|
+
await testAdminAPIs();
|
|
547
|
+
await testWebSocket();
|
|
548
|
+
await testSSE();
|
|
549
|
+
|
|
550
|
+
console.log('\n🎉 모든 테스트 통과!');
|
|
551
|
+
|
|
552
|
+
} catch (error) {
|
|
553
|
+
console.error('\n❌ 테스트 실패:', error);
|
|
554
|
+
process.exit(1);
|
|
555
|
+
} finally {
|
|
556
|
+
// 5. 정리
|
|
557
|
+
if (serverStarted) {
|
|
558
|
+
console.log('\n🧹 서버 정리 중...');
|
|
559
|
+
await cleanup();
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
if (testDb) {
|
|
563
|
+
console.log('🗄️ 테스트 데이터베이스 정리 중...');
|
|
564
|
+
closeDatabase(testDb);
|
|
565
|
+
|
|
566
|
+
// 테스트 DB 파일 삭제
|
|
567
|
+
try {
|
|
568
|
+
const fs = await import('fs');
|
|
569
|
+
if (fs.existsSync(TEST_DB_PATH)) {
|
|
570
|
+
fs.unlinkSync(TEST_DB_PATH);
|
|
571
|
+
}
|
|
572
|
+
} catch (error) {
|
|
573
|
+
console.warn('테스트 DB 파일 삭제 실패:', error);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
console.log('✅ 테스트 완료');
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// 테스트 실행
|
|
582
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
583
|
+
runTests().catch(console.error);
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
export { runTests };
|