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,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memento MCP Server 설정 관리
|
|
3
|
+
*/
|
|
4
|
+
import type { MementoConfig } from '../types/index.js';
|
|
5
|
+
export declare const mementoConfig: MementoConfig;
|
|
6
|
+
export declare const searchRankingWeights: {
|
|
7
|
+
relevance: number;
|
|
8
|
+
recency: number;
|
|
9
|
+
importance: number;
|
|
10
|
+
usage: number;
|
|
11
|
+
duplication_penalty: number;
|
|
12
|
+
};
|
|
13
|
+
export declare const defaultTags: {
|
|
14
|
+
tech: string[];
|
|
15
|
+
pref: string[];
|
|
16
|
+
task: string[];
|
|
17
|
+
project: string[];
|
|
18
|
+
};
|
|
19
|
+
export declare function validateConfig(): void;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,mBAAmB,CAAC;AAK1E,eAAO,MAAM,aAAa,EAAE,aAmC3B,CAAC;AAGF,eAAO,MAAM,oBAAoB;;;;;;CAMhC,CAAC;AAGF,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC;AAGF,wBAAgB,cAAc,IAAI,IAAI,CAwCrC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memento MCP Server 설정 관리
|
|
3
|
+
*/
|
|
4
|
+
import { config } from 'dotenv';
|
|
5
|
+
// 환경 변수 로드
|
|
6
|
+
config();
|
|
7
|
+
export const mementoConfig = {
|
|
8
|
+
// 데이터베이스 설정
|
|
9
|
+
dbPath: process.env.DB_PATH || './data/memory.db',
|
|
10
|
+
// MCP 서버 설정
|
|
11
|
+
serverName: process.env.MCP_SERVER_NAME || 'memento-memory',
|
|
12
|
+
serverVersion: process.env.MCP_SERVER_VERSION || '0.1.0',
|
|
13
|
+
port: parseInt(process.env.MCP_SERVER_PORT || '3000', 10),
|
|
14
|
+
// 임베딩 설정
|
|
15
|
+
embeddingProvider: process.env.EMBEDDING_PROVIDER || 'minilm',
|
|
16
|
+
openaiApiKey: process.env.OPENAI_API_KEY || undefined,
|
|
17
|
+
openaiModel: process.env.OPENAI_MODEL || 'text-embedding-3-small',
|
|
18
|
+
geminiApiKey: process.env.GEMINI_API_KEY || undefined,
|
|
19
|
+
geminiModel: process.env.GEMINI_MODEL || 'text-embedding-004',
|
|
20
|
+
embeddingDimensions: parseInt(process.env.EMBEDDING_DIMENSIONS || '384', 10), // MiniLM 기본값
|
|
21
|
+
// 검색 설정
|
|
22
|
+
searchDefaultLimit: parseInt(process.env.SEARCH_DEFAULT_LIMIT || '10', 10),
|
|
23
|
+
searchMaxLimit: parseInt(process.env.SEARCH_MAX_LIMIT || '50', 10),
|
|
24
|
+
// 망각 정책 설정 (시간 단위: 시간)
|
|
25
|
+
forgetTTL: {
|
|
26
|
+
working: parseInt(process.env.FORGET_WORKING_TTL || '48', 10),
|
|
27
|
+
episodic: parseInt(process.env.FORGET_EPISODIC_TTL || '2160', 10), // 90일
|
|
28
|
+
semantic: parseInt(process.env.FORGET_SEMANTIC_TTL || '-1', 10), // 무기한
|
|
29
|
+
procedural: parseInt(process.env.FORGET_PROCEDURAL_TTL || '-1', 10) // 무기한
|
|
30
|
+
},
|
|
31
|
+
// 로깅 설정
|
|
32
|
+
logLevel: process.env.LOG_LEVEL || 'info',
|
|
33
|
+
logFile: process.env.LOG_FILE || undefined,
|
|
34
|
+
// 개발 설정
|
|
35
|
+
nodeEnv: process.env.NODE_ENV || 'development'
|
|
36
|
+
};
|
|
37
|
+
// 검색 랭킹 가중치 (Memento-Goals.md 참조)
|
|
38
|
+
export const searchRankingWeights = {
|
|
39
|
+
relevance: 0.50,
|
|
40
|
+
recency: 0.20,
|
|
41
|
+
importance: 0.20,
|
|
42
|
+
usage: 0.10,
|
|
43
|
+
duplication_penalty: 0.15
|
|
44
|
+
};
|
|
45
|
+
// 기본 태그 분류
|
|
46
|
+
export const defaultTags = {
|
|
47
|
+
tech: ['javascript', 'typescript', 'react', 'node', 'sqlite', 'mcp'],
|
|
48
|
+
pref: ['coffee', 'tea', 'morning', 'evening'],
|
|
49
|
+
task: ['ads-settlement', 'bug-fix', 'feature', 'refactor'],
|
|
50
|
+
project: ['memento', 'mcp-server', 'ai-agent']
|
|
51
|
+
};
|
|
52
|
+
// 유효성 검사
|
|
53
|
+
export function validateConfig() {
|
|
54
|
+
// 임베딩 제공자별 API 키 검증
|
|
55
|
+
if (mementoConfig.embeddingProvider === 'openai' && !mementoConfig.openaiApiKey) {
|
|
56
|
+
throw new Error('OPENAI_API_KEY is required when using OpenAI embedding provider');
|
|
57
|
+
}
|
|
58
|
+
if (mementoConfig.embeddingProvider === 'gemini' && !mementoConfig.geminiApiKey) {
|
|
59
|
+
throw new Error('GEMINI_API_KEY is required when using Gemini embedding provider');
|
|
60
|
+
}
|
|
61
|
+
// 유효한 임베딩 제공자 확인
|
|
62
|
+
const validProviders = ['tfidf', 'lightweight', 'minilm', 'openai', 'gemini'];
|
|
63
|
+
if (!validProviders.includes(mementoConfig.embeddingProvider)) {
|
|
64
|
+
throw new Error(`Invalid embedding provider: ${mementoConfig.embeddingProvider}. Must be one of: ${validProviders.join(', ')}`);
|
|
65
|
+
}
|
|
66
|
+
// 차원 수 검증 (제공자별 권장값)
|
|
67
|
+
const providerDimensions = {
|
|
68
|
+
tfidf: 512,
|
|
69
|
+
minilm: 384,
|
|
70
|
+
openai: 1536,
|
|
71
|
+
gemini: 768
|
|
72
|
+
};
|
|
73
|
+
const expectedDimensions = providerDimensions[mementoConfig.embeddingProvider];
|
|
74
|
+
if (mementoConfig.embeddingDimensions !== expectedDimensions) {
|
|
75
|
+
console.warn(`⚠️ 권장 차원 수와 다릅니다. ${mementoConfig.embeddingProvider}는 ${expectedDimensions}차원을 권장합니다.`);
|
|
76
|
+
}
|
|
77
|
+
if (mementoConfig.embeddingDimensions <= 0) {
|
|
78
|
+
throw new Error('EMBEDDING_DIMENSIONS must be a positive number');
|
|
79
|
+
}
|
|
80
|
+
if (mementoConfig.searchDefaultLimit <= 0 || mementoConfig.searchMaxLimit <= 0) {
|
|
81
|
+
throw new Error('Search limits must be positive numbers');
|
|
82
|
+
}
|
|
83
|
+
if (mementoConfig.searchDefaultLimit > mementoConfig.searchMaxLimit) {
|
|
84
|
+
throw new Error('SEARCH_DEFAULT_LIMIT cannot be greater than SEARCH_MAX_LIMIT');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/database/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAYtC,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAmFrE;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAYzD"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite 데이터베이스 초기화 스크립트
|
|
3
|
+
*/
|
|
4
|
+
import Database from 'better-sqlite3';
|
|
5
|
+
import { readFileSync } from 'fs';
|
|
6
|
+
import { join, dirname } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { mementoConfig } from '../config/index.js';
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = dirname(__filename);
|
|
11
|
+
// MCP 서버에서는 모든 로그 출력을 완전히 차단
|
|
12
|
+
const log = (...args) => { };
|
|
13
|
+
export async function initializeDatabase() {
|
|
14
|
+
log('🗄️ SQLite 데이터베이스 초기화 중...');
|
|
15
|
+
// 데이터 디렉토리 생성
|
|
16
|
+
const dbDir = dirname(mementoConfig.dbPath);
|
|
17
|
+
try {
|
|
18
|
+
const fs = require('fs');
|
|
19
|
+
if (!fs.existsSync(dbDir)) {
|
|
20
|
+
fs.mkdirSync(dbDir, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
// 디렉토리가 이미 존재하는 경우 무시
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
// SQLite 데이터베이스 연결
|
|
28
|
+
const db = new Database(mementoConfig.dbPath);
|
|
29
|
+
// WAL 모드 사용 (동시 읽기 성능 향상)
|
|
30
|
+
db.pragma('journal_mode = WAL');
|
|
31
|
+
// 외래키 제약 조건 활성화
|
|
32
|
+
db.pragma('foreign_keys = ON');
|
|
33
|
+
// FTS5 확장 로드 시도 (Docker 환경에서는 더 안정적)
|
|
34
|
+
try {
|
|
35
|
+
// Docker 환경에서는 FTS5가 기본적으로 포함되어 있음
|
|
36
|
+
if (process.env.NODE_ENV === 'production' || process.env.DOCKER === 'true') {
|
|
37
|
+
// Docker 환경에서는 FTS5가 기본 포함되어 있으므로 로드 시도하지 않음
|
|
38
|
+
log('🐳 Docker 환경에서 FTS5 사용 가능');
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// 로컬 환경에서만 확장 로드 시도
|
|
42
|
+
db.loadExtension('fts5');
|
|
43
|
+
log('✅ FTS5 확장 로드 완료');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
log('⚠️ FTS5 확장 로드 실패, 기본 검색으로 전환:', error);
|
|
48
|
+
// FTS5가 없어도 기본 기능은 동작하도록 계속 진행
|
|
49
|
+
}
|
|
50
|
+
// 잠금 타임아웃 설정 (60초로 증가)
|
|
51
|
+
db.pragma('busy_timeout = 60000');
|
|
52
|
+
// 동시성 설정 최적화
|
|
53
|
+
db.pragma('synchronous = NORMAL');
|
|
54
|
+
db.pragma('cache_size = 20000'); // 캐시 크기 증가
|
|
55
|
+
db.pragma('temp_store = MEMORY');
|
|
56
|
+
db.pragma('mmap_size = 268435456'); // 256MB 메모리 맵핑
|
|
57
|
+
// WAL 설정 최적화 (락 문제 해결)
|
|
58
|
+
db.pragma('wal_autocheckpoint = 100'); // 더 자주 체크포인트 (100페이지마다)
|
|
59
|
+
db.pragma('journal_size_limit = 33554432'); // 32MB WAL 크기 제한 (더 작게)
|
|
60
|
+
db.pragma('wal_checkpoint(TRUNCATE)'); // WAL 파일 정리
|
|
61
|
+
// 추가 안정성 설정
|
|
62
|
+
db.pragma('locking_mode = NORMAL'); // 정상 잠금 모드
|
|
63
|
+
db.pragma('read_uncommitted = 0'); // 커밋된 읽기만 허용
|
|
64
|
+
// sqlite-vec 확장 로드
|
|
65
|
+
try {
|
|
66
|
+
const { getLoadablePath } = await import('sqlite-vec');
|
|
67
|
+
const extensionPath = getLoadablePath();
|
|
68
|
+
db.loadExtension(extensionPath);
|
|
69
|
+
console.log('✅ sqlite-vec 확장 로드 성공');
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.warn('⚠️ sqlite-vec 확장 로드 실패 (벡터 검색 기능 비활성화):', error);
|
|
73
|
+
}
|
|
74
|
+
// 스키마 파일 읽기 및 실행
|
|
75
|
+
const schemaPath = join(__dirname, 'schema.sql');
|
|
76
|
+
const schema = readFileSync(schemaPath, 'utf-8');
|
|
77
|
+
// 스키마 실행
|
|
78
|
+
db.exec(schema);
|
|
79
|
+
log('✅ 데이터베이스 초기화 완료');
|
|
80
|
+
log(`📁 데이터베이스 경로: ${mementoConfig.dbPath}`);
|
|
81
|
+
return db;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
log('❌ 데이터베이스 초기화 실패:', error);
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function closeDatabase(db) {
|
|
89
|
+
if (!db) {
|
|
90
|
+
log('🔒 데이터베이스가 이미 닫혔습니다');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
db.close();
|
|
95
|
+
log('🔒 데이터베이스 연결 종료');
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
log('❌ 데이터베이스 종료 실패:', error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// CLI에서 직접 실행할 때
|
|
102
|
+
if (process.argv[1] && process.argv[1].endsWith('init.ts')) {
|
|
103
|
+
console.log('🚀 데이터베이스 초기화 스크립트 시작');
|
|
104
|
+
(async () => {
|
|
105
|
+
try {
|
|
106
|
+
const db = await initializeDatabase();
|
|
107
|
+
console.log('🎉 데이터베이스 초기화 성공!');
|
|
108
|
+
closeDatabase(db);
|
|
109
|
+
process.exit(0);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.error('❌ 데이터베이스 초기화 실패:', error);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
})();
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/database/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/database/migrate.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 데이터베이스 마이그레이션 스크립트
|
|
3
|
+
* 기존 데이터베이스에 새 컬럼 추가
|
|
4
|
+
*/
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import { mementoConfig } from '../config/index.js';
|
|
7
|
+
function migrateDatabase() {
|
|
8
|
+
console.log('🔄 데이터베이스 마이그레이션 시작');
|
|
9
|
+
const db = new Database(mementoConfig.dbPath);
|
|
10
|
+
try {
|
|
11
|
+
// 사용성 통계 컬럼 추가
|
|
12
|
+
console.log('📊 사용성 통계 컬럼 추가 중...');
|
|
13
|
+
try {
|
|
14
|
+
db.exec('ALTER TABLE memory_item ADD COLUMN view_count INTEGER DEFAULT 0');
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
if (!err.message.includes('duplicate column name')) {
|
|
18
|
+
throw err;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
db.exec('ALTER TABLE memory_item ADD COLUMN cite_count INTEGER DEFAULT 0');
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
if (!err.message.includes('duplicate column name')) {
|
|
26
|
+
throw err;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
db.exec('ALTER TABLE memory_item ADD COLUMN edit_count INTEGER DEFAULT 0');
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
if (!err.message.includes('duplicate column name')) {
|
|
34
|
+
throw err;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
console.log('✅ 사용성 통계 컬럼 추가 완료');
|
|
38
|
+
// 임베딩 테이블 생성 (기존에 없다면)
|
|
39
|
+
console.log('🧠 임베딩 테이블 생성 중...');
|
|
40
|
+
db.exec(`
|
|
41
|
+
CREATE TABLE IF NOT EXISTS memory_embedding (
|
|
42
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
43
|
+
memory_id TEXT NOT NULL,
|
|
44
|
+
embedding TEXT NOT NULL,
|
|
45
|
+
dim INTEGER NOT NULL,
|
|
46
|
+
model TEXT,
|
|
47
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
48
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
49
|
+
UNIQUE(memory_id)
|
|
50
|
+
)
|
|
51
|
+
`);
|
|
52
|
+
console.log('✅ 임베딩 테이블 생성 완료');
|
|
53
|
+
// 기존 데이터에 기본값 설정
|
|
54
|
+
console.log('🔧 기존 데이터 업데이트 중...');
|
|
55
|
+
db.exec(`
|
|
56
|
+
UPDATE memory_item
|
|
57
|
+
SET view_count = 0, cite_count = 0, edit_count = 0
|
|
58
|
+
WHERE view_count IS NULL OR cite_count IS NULL OR edit_count IS NULL
|
|
59
|
+
`);
|
|
60
|
+
console.log('✅ 기존 데이터 업데이트 완료');
|
|
61
|
+
// 마이그레이션 완료
|
|
62
|
+
console.log('🎉 데이터베이스 마이그레이션 완료!');
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error('❌ 마이그레이션 실패:', error);
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
db.close();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// 마이그레이션 실행
|
|
73
|
+
if (process.argv[1] && process.argv[1].endsWith('migrate.ts')) {
|
|
74
|
+
try {
|
|
75
|
+
migrateDatabase();
|
|
76
|
+
console.log('✅ 마이그레이션 완료');
|
|
77
|
+
process.exit(0);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.error('❌ 마이그레이션 실패:', error);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/database/migrate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEnC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAEpC,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBACnD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBACnD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBACnD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAEjC,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAElC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;KAWP,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAE/B,iBAAiB;QACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAEnC,EAAE,CAAC,IAAI,CAAC;;;;KAIP,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAEhC,YAAY;QACZ,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAEtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,YAAY;AACZ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9D,IAAI,CAAC;QACH,eAAe,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
-- Memento MCP Server SQLite 스키마
|
|
2
|
+
-- M1 단계: 개인용 SQLite 임베디드 데이터베이스
|
|
3
|
+
|
|
4
|
+
-- 메인 기억 테이블
|
|
5
|
+
CREATE TABLE IF NOT EXISTS memory_item (
|
|
6
|
+
id TEXT PRIMARY KEY,
|
|
7
|
+
type TEXT CHECK (type IN ('working','episodic','semantic','procedural')) NOT NULL,
|
|
8
|
+
content TEXT NOT NULL,
|
|
9
|
+
importance REAL CHECK (importance >= 0 AND importance <= 1) DEFAULT 0.5,
|
|
10
|
+
privacy_scope TEXT CHECK (privacy_scope IN ('private','team','public')) DEFAULT 'private',
|
|
11
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
12
|
+
last_accessed TIMESTAMP,
|
|
13
|
+
pinned BOOLEAN DEFAULT FALSE,
|
|
14
|
+
tags TEXT, -- JSON 배열로 저장
|
|
15
|
+
source TEXT,
|
|
16
|
+
view_count INTEGER DEFAULT 0,
|
|
17
|
+
cite_count INTEGER DEFAULT 0,
|
|
18
|
+
edit_count INTEGER DEFAULT 0
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
-- 태그 테이블
|
|
22
|
+
CREATE TABLE IF NOT EXISTS memory_tag (
|
|
23
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
24
|
+
name TEXT NOT NULL UNIQUE,
|
|
25
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
-- 메모리-태그 관계 테이블 (N:N)
|
|
29
|
+
CREATE TABLE IF NOT EXISTS memory_item_tag (
|
|
30
|
+
memory_id TEXT NOT NULL,
|
|
31
|
+
tag_id INTEGER NOT NULL,
|
|
32
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
33
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
34
|
+
FOREIGN KEY (tag_id) REFERENCES memory_tag(id) ON DELETE CASCADE,
|
|
35
|
+
PRIMARY KEY (memory_id, tag_id)
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
-- 기억 간 관계 테이블
|
|
39
|
+
CREATE TABLE IF NOT EXISTS memory_link (
|
|
40
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
41
|
+
source_id TEXT NOT NULL,
|
|
42
|
+
target_id TEXT NOT NULL,
|
|
43
|
+
relation_type TEXT CHECK (relation_type IN ('cause_of', 'derived_from', 'duplicates', 'contradicts')) NOT NULL,
|
|
44
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
45
|
+
FOREIGN KEY (source_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
46
|
+
FOREIGN KEY (target_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
47
|
+
UNIQUE(source_id, target_id, relation_type)
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
-- 피드백 이벤트 테이블
|
|
51
|
+
CREATE TABLE IF NOT EXISTS feedback_event (
|
|
52
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
53
|
+
memory_id TEXT NOT NULL,
|
|
54
|
+
event TEXT CHECK (event IN ('used', 'edited', 'neglected', 'helpful', 'not_helpful')) NOT NULL,
|
|
55
|
+
score REAL,
|
|
56
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
57
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
-- 작업기억 버퍼 테이블 (세션별)
|
|
61
|
+
CREATE TABLE IF NOT EXISTS wm_buffer (
|
|
62
|
+
session_id TEXT PRIMARY KEY,
|
|
63
|
+
items TEXT NOT NULL, -- JSON 배열로 저장
|
|
64
|
+
token_budget INTEGER DEFAULT 4000,
|
|
65
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
66
|
+
expires_at TIMESTAMP NOT NULL
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
-- 인덱스 생성
|
|
70
|
+
CREATE INDEX IF NOT EXISTS idx_memory_item_type ON memory_item(type);
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_memory_item_created_at ON memory_item(created_at);
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_memory_item_last_accessed ON memory_item(last_accessed);
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_memory_item_pinned ON memory_item(pinned);
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_memory_item_privacy_scope ON memory_item(privacy_scope);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_memory_item_importance ON memory_item(importance);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_memory_item_user_id ON memory_item(id); -- user_id 대신 id 사용
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_memory_item_project_id ON memory_item(id); -- project_id 대신 id 사용
|
|
78
|
+
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_memory_tag_memory_id ON memory_item_tag(memory_id);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_memory_tag_tag_id ON memory_item_tag(tag_id);
|
|
81
|
+
|
|
82
|
+
CREATE INDEX IF NOT EXISTS idx_memory_link_source ON memory_link(source_id);
|
|
83
|
+
CREATE INDEX IF NOT EXISTS idx_memory_link_target ON memory_link(target_id);
|
|
84
|
+
|
|
85
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_memory_id ON feedback_event(memory_id);
|
|
86
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_event ON feedback_event(event);
|
|
87
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_created_at ON feedback_event(created_at);
|
|
88
|
+
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_wm_buffer_expires_at ON wm_buffer(expires_at);
|
|
90
|
+
|
|
91
|
+
-- FTS5 가상 테이블 (전문 검색)
|
|
92
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS memory_item_fts USING fts5(
|
|
93
|
+
content,
|
|
94
|
+
tags,
|
|
95
|
+
source,
|
|
96
|
+
content='memory_item',
|
|
97
|
+
content_rowid='rowid'
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
-- FTS5 트리거 (자동 동기화)
|
|
101
|
+
CREATE TRIGGER IF NOT EXISTS memory_item_fts_insert AFTER INSERT ON memory_item BEGIN
|
|
102
|
+
INSERT INTO memory_item_fts(rowid, content, tags, source)
|
|
103
|
+
VALUES (new.rowid, new.content, new.tags, new.source);
|
|
104
|
+
END;
|
|
105
|
+
|
|
106
|
+
CREATE TRIGGER IF NOT EXISTS memory_item_fts_delete AFTER DELETE ON memory_item BEGIN
|
|
107
|
+
INSERT INTO memory_item_fts(memory_item_fts, rowid, content, tags, source)
|
|
108
|
+
VALUES('delete', old.rowid, old.content, old.tags, old.source);
|
|
109
|
+
END;
|
|
110
|
+
|
|
111
|
+
CREATE TRIGGER IF NOT EXISTS memory_item_fts_update AFTER UPDATE ON memory_item BEGIN
|
|
112
|
+
INSERT INTO memory_item_fts(memory_item_fts, rowid, content, tags, source)
|
|
113
|
+
VALUES('delete', old.rowid, old.content, old.tags, old.source);
|
|
114
|
+
INSERT INTO memory_item_fts(rowid, content, tags, source)
|
|
115
|
+
VALUES (new.rowid, new.content, new.tags, new.source);
|
|
116
|
+
END;
|
|
117
|
+
|
|
118
|
+
-- 임베딩 저장 테이블
|
|
119
|
+
CREATE TABLE IF NOT EXISTS memory_embedding (
|
|
120
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
121
|
+
memory_id TEXT NOT NULL,
|
|
122
|
+
embedding TEXT NOT NULL, -- JSON 배열로 저장
|
|
123
|
+
dim INTEGER NOT NULL, -- 벡터 차원
|
|
124
|
+
model TEXT, -- 사용된 모델명
|
|
125
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
126
|
+
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
127
|
+
UNIQUE(memory_id)
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
-- 임베딩 테이블 인덱스
|
|
131
|
+
CREATE INDEX IF NOT EXISTS idx_memory_embedding_memory_id ON memory_embedding(memory_id);
|
|
132
|
+
CREATE INDEX IF NOT EXISTS idx_memory_embedding_dim ON memory_embedding(dim);
|
|
133
|
+
CREATE INDEX IF NOT EXISTS idx_memory_embedding_model ON memory_embedding(model);
|
|
134
|
+
|
|
135
|
+
-- VEC 가상 테이블 (벡터 검색) - sqlite-vec 확장 필요
|
|
136
|
+
-- 주의: sqlite-vec 확장이 설치되어 있어야 함
|
|
137
|
+
-- 테스트 환경에서는 이 부분을 건너뛰도록 조건부 처리
|
|
138
|
+
-- CREATE VIRTUAL TABLE IF NOT EXISTS memory_item_vec USING vec0(embedding float[1536]);
|
|
139
|
+
|
|
140
|
+
-- VEC 테이블 트리거 (임베딩이 생성될 때 자동으로 VEC 테이블에 추가)
|
|
141
|
+
-- 테스트 환경에서는 이 부분을 건너뛰도록 조건부 처리
|
|
142
|
+
-- CREATE TRIGGER IF NOT EXISTS memory_embedding_vec_insert AFTER INSERT ON memory_embedding BEGIN
|
|
143
|
+
-- INSERT INTO memory_item_vec(rowid, embedding)
|
|
144
|
+
-- VALUES (NEW.memory_id, json_extract(NEW.embedding, '$'));
|
|
145
|
+
-- END;
|
|
146
|
+
|
|
147
|
+
-- CREATE TRIGGER IF NOT EXISTS memory_embedding_vec_update AFTER UPDATE ON memory_embedding BEGIN
|
|
148
|
+
-- UPDATE memory_item_vec
|
|
149
|
+
-- SET embedding = json_extract(NEW.embedding, '$')
|
|
150
|
+
-- WHERE rowid = NEW.memory_id;
|
|
151
|
+
-- END;
|
|
152
|
+
|
|
153
|
+
-- CREATE TRIGGER IF NOT EXISTS memory_embedding_vec_delete AFTER DELETE ON memory_embedding BEGIN
|
|
154
|
+
-- DELETE FROM memory_item_vec WHERE rowid = OLD.memory_id;
|
|
155
|
+
-- END;
|
|
156
|
+
|
|
157
|
+
-- 초기 데이터 삽입 (선택사항)
|
|
158
|
+
-- INSERT OR IGNORE INTO memory_item (id, type, content, importance, privacy_scope, pinned)
|
|
159
|
+
-- VALUES ('welcome', 'semantic', 'Memento MCP Server에 오신 것을 환영합니다!', 1.0, 'private', TRUE);
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContextInjector - AI Agent의 컨텍스트에 관련 기억을 주입하는 클래스
|
|
3
|
+
* 대화나 작업 중에 관련된 기억을 자동으로 찾아 컨텍스트에 주입합니다.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* import { ContextInjector } from '@memento/client';
|
|
8
|
+
*
|
|
9
|
+
* const injector = new ContextInjector(client);
|
|
10
|
+
*
|
|
11
|
+
* // 컨텍스트 주입
|
|
12
|
+
* const context = await injector.inject({
|
|
13
|
+
* query: 'React Hook에 대해 질문',
|
|
14
|
+
* tokenBudget: 1000
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* console.log(context.content);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
import { MementoClient } from './memento-client.js';
|
|
21
|
+
import type { ContextInjectionResult } from './types.js';
|
|
22
|
+
export interface ContextInjectionOptions {
|
|
23
|
+
/** 최대 검색 결과 수 (기본값: 10) */
|
|
24
|
+
maxResults?: number;
|
|
25
|
+
/** 토큰 예산 (기본값: 1200) */
|
|
26
|
+
tokenBudget?: number;
|
|
27
|
+
/** 컨텍스트 타입 */
|
|
28
|
+
contextType?: 'conversation' | 'task' | 'general';
|
|
29
|
+
/** 기억 타입 필터 */
|
|
30
|
+
memoryTypes?: Array<'working' | 'episodic' | 'semantic' | 'procedural'>;
|
|
31
|
+
/** 최근 기간 필터 (일 단위) */
|
|
32
|
+
recentDays?: number;
|
|
33
|
+
/** 중요도 임계값 (0-1) */
|
|
34
|
+
importanceThreshold?: number;
|
|
35
|
+
/** 고정된 기억만 포함할지 여부 */
|
|
36
|
+
pinnedOnly?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare class ContextInjector {
|
|
39
|
+
private client;
|
|
40
|
+
constructor(client: MementoClient);
|
|
41
|
+
/**
|
|
42
|
+
* 컨텍스트 주입
|
|
43
|
+
*/
|
|
44
|
+
inject(query: string, options?: ContextInjectionOptions): Promise<ContextInjectionResult>;
|
|
45
|
+
/**
|
|
46
|
+
* 관련 기억 검색
|
|
47
|
+
*/
|
|
48
|
+
private searchRelevantMemories;
|
|
49
|
+
/**
|
|
50
|
+
* 기억 압축 (토큰 예산에 맞게)
|
|
51
|
+
*/
|
|
52
|
+
private compressMemories;
|
|
53
|
+
/**
|
|
54
|
+
* 기억 요약
|
|
55
|
+
*/
|
|
56
|
+
private summarizeMemory;
|
|
57
|
+
/**
|
|
58
|
+
* 컨텍스트 생성
|
|
59
|
+
*/
|
|
60
|
+
private generateContext;
|
|
61
|
+
/**
|
|
62
|
+
* 컨텍스트 헤더 생성
|
|
63
|
+
*/
|
|
64
|
+
private getContextHeader;
|
|
65
|
+
/**
|
|
66
|
+
* 기억 포맷팅
|
|
67
|
+
*/
|
|
68
|
+
private formatMemories;
|
|
69
|
+
/**
|
|
70
|
+
* 타입별 이모지
|
|
71
|
+
*/
|
|
72
|
+
private getTypeEmoji;
|
|
73
|
+
/**
|
|
74
|
+
* 중요도 바 생성
|
|
75
|
+
*/
|
|
76
|
+
private getImportanceBar;
|
|
77
|
+
/**
|
|
78
|
+
* 컨텍스트 푸터 생성
|
|
79
|
+
*/
|
|
80
|
+
private getContextFooter;
|
|
81
|
+
/**
|
|
82
|
+
* 빈 컨텍스트 생성
|
|
83
|
+
*/
|
|
84
|
+
private generateEmptyContext;
|
|
85
|
+
/**
|
|
86
|
+
* 토큰 수 추정 (간단한 추정)
|
|
87
|
+
*/
|
|
88
|
+
private estimateTokenCount;
|
|
89
|
+
/**
|
|
90
|
+
* 대화 컨텍스트 주입
|
|
91
|
+
*/
|
|
92
|
+
injectConversationContext(query: string, tokenBudget?: number): Promise<ContextInjectionResult>;
|
|
93
|
+
/**
|
|
94
|
+
* 작업 컨텍스트 주입
|
|
95
|
+
*/
|
|
96
|
+
injectTaskContext(query: string, projectId?: string, tokenBudget?: number): Promise<ContextInjectionResult>;
|
|
97
|
+
/**
|
|
98
|
+
* 학습 컨텍스트 주입
|
|
99
|
+
*/
|
|
100
|
+
injectLearningContext(topic: string, tokenBudget?: number): Promise<ContextInjectionResult>;
|
|
101
|
+
/**
|
|
102
|
+
* 프로젝트 컨텍스트 주입
|
|
103
|
+
*/
|
|
104
|
+
injectProjectContext(projectId: string, query: string, tokenBudget?: number): Promise<ContextInjectionResult>;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=context-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-injector.d.ts","sourceRoot":"","sources":["../../src/npm-client/context-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,uBAAuB;IACtC,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,WAAW,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;IAClD,eAAe;IACf,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC,CAAC;IACxE,sBAAsB;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAEzC;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,sBAAsB,CAAC;IAgDlC;;OAEG;YACW,sBAAsB;IAiDpC;;OAEG;YACW,gBAAgB;IAwC9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACG,yBAAyB,CAC7B,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,MAAa,GACzB,OAAO,CAAC,sBAAsB,CAAC;IAUlC;;OAEG;IACG,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,GAAE,MAAa,GACzB,OAAO,CAAC,sBAAsB,CAAC;IAelC;;OAEG;IACG,qBAAqB,CACzB,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,MAAa,GACzB,OAAO,CAAC,sBAAsB,CAAC;IAUlC;;OAEG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,MAAa,GACzB,OAAO,CAAC,sBAAsB,CAAC;CAsBnC"}
|