memento-mcp-server 1.6.0 → 1.7.1
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/INSTALL.en.md +303 -303
- package/INSTALL.md +303 -303
- package/README.en.md +331 -330
- package/README.md +432 -432
- package/dist/algorithms/hybrid-search-engine.d.ts +114 -44
- package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -1
- package/dist/algorithms/hybrid-search-engine.js +261 -235
- package/dist/algorithms/hybrid-search-engine.js.map +1 -1
- package/dist/algorithms/search-engine.d.ts +2 -14
- package/dist/algorithms/search-engine.d.ts.map +1 -1
- package/dist/algorithms/search-engine.js +43 -35
- package/dist/algorithms/search-engine.js.map +1 -1
- package/dist/algorithms/vector-search-engine-migration.d.ts +67 -0
- package/dist/algorithms/vector-search-engine-migration.d.ts.map +1 -0
- package/dist/algorithms/vector-search-engine-migration.js +196 -0
- package/dist/algorithms/vector-search-engine-migration.js.map +1 -0
- package/dist/algorithms/vector-search-engine-refactored.d.ts +56 -0
- package/dist/algorithms/vector-search-engine-refactored.d.ts.map +1 -0
- package/dist/algorithms/vector-search-engine-refactored.js +101 -0
- package/dist/algorithms/vector-search-engine-refactored.js.map +1 -0
- package/dist/algorithms/vector-search-engine.d.ts +9 -2
- package/dist/algorithms/vector-search-engine.d.ts.map +1 -1
- package/dist/algorithms/vector-search-engine.js +245 -121
- package/dist/algorithms/vector-search-engine.js.map +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +34 -11
- package/dist/client/index.js.map +1 -1
- package/dist/config/environment.d.ts +26 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +103 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +29 -50
- package/dist/config/index.js.map +1 -1
- package/dist/config/vector-search.config.d.ts +25 -0
- package/dist/config/vector-search.config.d.ts.map +1 -0
- package/dist/config/vector-search.config.js +40 -0
- package/dist/config/vector-search.config.js.map +1 -0
- package/dist/database/init.d.ts.map +1 -1
- package/dist/database/init.js +154 -17
- package/dist/database/init.js.map +1 -1
- package/dist/database/migrate.d.ts +2 -1
- package/dist/database/migrate.d.ts.map +1 -1
- package/dist/database/migrate.js +191 -18
- package/dist/database/migrate.js.map +1 -1
- package/dist/database/schema.sql +234 -159
- package/dist/factories/hybrid-search.factory.d.ts +20 -0
- package/dist/factories/hybrid-search.factory.d.ts.map +1 -0
- package/dist/factories/hybrid-search.factory.js +57 -0
- package/dist/factories/hybrid-search.factory.js.map +1 -0
- package/dist/factories/spaced-repetition.factory.d.ts +48 -0
- package/dist/factories/spaced-repetition.factory.d.ts.map +1 -0
- package/dist/factories/spaced-repetition.factory.js +187 -0
- package/dist/factories/spaced-repetition.factory.js.map +1 -0
- package/dist/factories/vector-search.factory.d.ts +25 -0
- package/dist/factories/vector-search.factory.d.ts.map +1 -0
- package/dist/factories/vector-search.factory.js +47 -0
- package/dist/factories/vector-search.factory.js.map +1 -0
- package/dist/interfaces/database.interface.d.ts +36 -0
- package/dist/interfaces/database.interface.d.ts.map +1 -0
- package/dist/interfaces/database.interface.js +6 -0
- package/dist/interfaces/database.interface.js.map +1 -0
- package/dist/interfaces/spaced-repetition.interface.d.ts +63 -0
- package/dist/interfaces/spaced-repetition.interface.d.ts.map +1 -0
- package/dist/interfaces/spaced-repetition.interface.js +6 -0
- package/dist/interfaces/spaced-repetition.interface.js.map +1 -0
- package/dist/repositories/vector-performance.repository.d.ts +25 -0
- package/dist/repositories/vector-performance.repository.d.ts.map +1 -0
- package/dist/repositories/vector-performance.repository.js +134 -0
- package/dist/repositories/vector-performance.repository.js.map +1 -0
- package/dist/repositories/vector-search.repository.d.ts +43 -0
- package/dist/repositories/vector-search.repository.d.ts.map +1 -0
- package/dist/repositories/vector-search.repository.js +377 -0
- package/dist/repositories/vector-search.repository.js.map +1 -0
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +25 -24
- package/dist/server/http-server.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -1
- package/dist/server/index.js.map +1 -1
- package/dist/services/alert-notification-service.d.ts +16 -0
- package/dist/services/alert-notification-service.d.ts.map +1 -0
- package/dist/services/alert-notification-service.js +44 -0
- package/dist/services/alert-notification-service.js.map +1 -0
- package/dist/services/async-optimizer.d.ts +62 -8
- package/dist/services/async-optimizer.d.ts.map +1 -1
- package/dist/services/async-optimizer.js +137 -8
- package/dist/services/async-optimizer.js.map +1 -1
- package/dist/services/batch-scheduler.d.ts +6 -0
- package/dist/services/batch-scheduler.d.ts.map +1 -1
- package/dist/services/batch-scheduler.js +59 -19
- package/dist/services/batch-scheduler.js.map +1 -1
- package/dist/services/cache-service.d.ts +32 -0
- package/dist/services/cache-service.d.ts.map +1 -1
- package/dist/services/cache-service.js +81 -6
- package/dist/services/cache-service.js.map +1 -1
- package/dist/services/database-optimizer.js +63 -63
- package/dist/services/database-optimizer.js.map +1 -1
- package/dist/services/embedding-migration-service.d.ts +24 -0
- package/dist/services/embedding-migration-service.d.ts.map +1 -0
- package/dist/services/embedding-migration-service.js +360 -0
- package/dist/services/embedding-migration-service.js.map +1 -0
- package/dist/services/embedding-provider-factory.d.ts +12 -5
- package/dist/services/embedding-provider-factory.d.ts.map +1 -1
- package/dist/services/embedding-provider-factory.js +107 -26
- package/dist/services/embedding-provider-factory.js.map +1 -1
- package/dist/services/forgetting-policy-service.js +17 -17
- package/dist/services/gemini-embedding-service.d.ts +1 -1
- package/dist/services/gemini-embedding-service.d.ts.map +1 -1
- package/dist/services/gemini-embedding-service.js +25 -18
- package/dist/services/gemini-embedding-service.js.map +1 -1
- package/dist/services/memory-embedding-service.d.ts +8 -0
- package/dist/services/memory-embedding-service.d.ts.map +1 -1
- package/dist/services/memory-embedding-service.js +180 -71
- package/dist/services/memory-embedding-service.js.map +1 -1
- package/dist/services/migration-history-service.d.ts +14 -0
- package/dist/services/migration-history-service.d.ts.map +1 -0
- package/dist/services/migration-history-service.js +270 -0
- package/dist/services/migration-history-service.js.map +1 -0
- package/dist/services/migration-monitor-service.d.ts +24 -0
- package/dist/services/migration-monitor-service.d.ts.map +1 -0
- package/dist/services/migration-monitor-service.js +93 -0
- package/dist/services/migration-monitor-service.js.map +1 -0
- package/dist/services/model-availability-service.d.ts +22 -0
- package/dist/services/model-availability-service.d.ts.map +1 -0
- package/dist/services/model-availability-service.js +140 -0
- package/dist/services/model-availability-service.js.map +1 -0
- package/dist/services/openai-embedding-service.d.ts +36 -0
- package/dist/services/openai-embedding-service.d.ts.map +1 -0
- package/dist/services/openai-embedding-service.js +192 -0
- package/dist/services/openai-embedding-service.js.map +1 -0
- package/dist/services/performance-monitor.d.ts +154 -10
- package/dist/services/performance-monitor.d.ts.map +1 -1
- package/dist/services/performance-monitor.js +446 -60
- package/dist/services/performance-monitor.js.map +1 -1
- package/dist/services/spaced-repetition/interval-calculation.service.d.ts +38 -0
- package/dist/services/spaced-repetition/interval-calculation.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/interval-calculation.service.js +105 -0
- package/dist/services/spaced-repetition/interval-calculation.service.js.map +1 -0
- package/dist/services/spaced-repetition/optimal-interval.service.d.ts +56 -0
- package/dist/services/spaced-repetition/optimal-interval.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/optimal-interval.service.js +163 -0
- package/dist/services/spaced-repetition/optimal-interval.service.js.map +1 -0
- package/dist/services/spaced-repetition/performance-analysis.service.d.ts +48 -0
- package/dist/services/spaced-repetition/performance-analysis.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/performance-analysis.service.js +174 -0
- package/dist/services/spaced-repetition/performance-analysis.service.js.map +1 -0
- package/dist/services/spaced-repetition/priority-calculation.service.d.ts +53 -0
- package/dist/services/spaced-repetition/priority-calculation.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/priority-calculation.service.js +161 -0
- package/dist/services/spaced-repetition/priority-calculation.service.js.map +1 -0
- package/dist/services/spaced-repetition/recall-probability.service.d.ts +36 -0
- package/dist/services/spaced-repetition/recall-probability.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/recall-probability.service.js +88 -0
- package/dist/services/spaced-repetition/recall-probability.service.js.map +1 -0
- package/dist/services/spaced-repetition/review-scheduling.service.d.ts +43 -0
- package/dist/services/spaced-repetition/review-scheduling.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/review-scheduling.service.js +130 -0
- package/dist/services/spaced-repetition/review-scheduling.service.js.map +1 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.d.ts +69 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.d.ts.map +1 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.js +136 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.js.map +1 -0
- package/dist/services/unified-embedding-service.d.ts +3 -0
- package/dist/services/unified-embedding-service.d.ts.map +1 -1
- package/dist/services/unified-embedding-service.js +58 -62
- package/dist/services/unified-embedding-service.js.map +1 -1
- package/dist/services/vector-compatibility-service.d.ts +68 -0
- package/dist/services/vector-compatibility-service.d.ts.map +1 -0
- package/dist/services/vector-compatibility-service.js +373 -0
- package/dist/services/vector-compatibility-service.js.map +1 -0
- package/dist/services/vector-search/vector-index-manager.d.ts +27 -0
- package/dist/services/vector-search/vector-index-manager.d.ts.map +1 -0
- package/dist/services/vector-search/vector-index-manager.js +66 -0
- package/dist/services/vector-search/vector-index-manager.js.map +1 -0
- package/dist/services/vector-search/vector-performance-tester.d.ts +30 -0
- package/dist/services/vector-search/vector-performance-tester.d.ts.map +1 -0
- package/dist/services/vector-search/vector-performance-tester.js +87 -0
- package/dist/services/vector-search/vector-performance-tester.js.map +1 -0
- package/dist/services/vector-search/vector-search-container.d.ts +41 -0
- package/dist/services/vector-search/vector-search-container.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search-container.js +74 -0
- package/dist/services/vector-search/vector-search-container.js.map +1 -0
- package/dist/services/vector-search/vector-search-facade.d.ts +63 -0
- package/dist/services/vector-search/vector-search-facade.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search-facade.js +91 -0
- package/dist/services/vector-search/vector-search-facade.js.map +1 -0
- package/dist/services/vector-search/vector-search-result-normalizer.d.ts +6 -0
- package/dist/services/vector-search/vector-search-result-normalizer.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search-result-normalizer.js +65 -0
- package/dist/services/vector-search/vector-search-result-normalizer.js.map +1 -0
- package/dist/services/vector-search/vector-search.service.d.ts +33 -0
- package/dist/services/vector-search/vector-search.service.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search.service.js +149 -0
- package/dist/services/vector-search/vector-search.service.js.map +1 -0
- package/dist/tools/forget-tool.js +14 -14
- package/dist/tools/pin-tool.js +14 -14
- package/dist/tools/unpin-tool.js +21 -21
- package/dist/types/alerts.types.d.ts +26 -0
- package/dist/types/alerts.types.d.ts.map +1 -0
- package/dist/types/alerts.types.js +2 -0
- package/dist/types/alerts.types.js.map +1 -0
- package/dist/types/embedding-provider-monitoring.types.d.ts +24 -0
- package/dist/types/embedding-provider-monitoring.types.d.ts.map +1 -0
- package/dist/types/embedding-provider-monitoring.types.js +2 -0
- package/dist/types/embedding-provider-monitoring.types.js.map +1 -0
- package/dist/types/embedding.types.d.ts +36 -1
- package/dist/types/embedding.types.d.ts.map +1 -1
- package/dist/types/migration.types.d.ts +131 -0
- package/dist/types/migration.types.d.ts.map +1 -0
- package/dist/types/migration.types.js +6 -0
- package/dist/types/migration.types.js.map +1 -0
- package/dist/types/spaced-repetition.types.d.ts +61 -0
- package/dist/types/spaced-repetition.types.d.ts.map +1 -0
- package/dist/types/spaced-repetition.types.js +6 -0
- package/dist/types/spaced-repetition.types.js.map +1 -0
- package/dist/types/vector-search.types.d.ts +96 -0
- package/dist/types/vector-search.types.d.ts.map +1 -0
- package/dist/types/vector-search.types.js +2 -0
- package/dist/types/vector-search.types.js.map +1 -0
- package/dist/utils/configuration-validator.d.ts +23 -0
- package/dist/utils/configuration-validator.d.ts.map +1 -0
- package/dist/utils/configuration-validator.js +102 -0
- package/dist/utils/configuration-validator.js.map +1 -0
- package/dist/utils/database.d.ts.map +1 -1
- package/dist/utils/database.js +101 -95
- package/dist/utils/database.js.map +1 -1
- package/dist/utils/environment-check.d.ts +8 -0
- package/dist/utils/environment-check.d.ts.map +1 -0
- package/dist/utils/environment-check.js +25 -0
- package/dist/utils/environment-check.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +33 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +139 -125
- package/scripts/auto-setup.js +233 -233
- package/scripts/backup-daily.bat +28 -28
- package/scripts/backup-embeddings.js +108 -108
- package/scripts/check-db-integrity.js +93 -93
- package/scripts/debug-embeddings.js +184 -184
- package/scripts/direct-sql-migration.sql +36 -36
- package/scripts/docker-migration.sh +105 -105
- package/scripts/fix-migration.js +93 -93
- package/scripts/fix-vector-dimensions.js +206 -206
- package/scripts/migrate-embedding-data.js +307 -307
- package/scripts/regenerate-embeddings.js +144 -144
- package/scripts/restore-legacy.ps1 +60 -60
- package/scripts/run-migration.js +122 -122
- package/scripts/safe-migration.js +150 -150
- package/scripts/simple-migrate.js +41 -41
- package/scripts/simple-update.js +123 -123
- package/src/database/schema.sql +234 -159
- package/.cursor/rules/cache-management.mdc +0 -171
- package/.cursor/rules/database-schema.mdc +0 -344
- package/.cursor/rules/deployment.mdc +0 -596
- package/.cursor/rules/error-logging.mdc +0 -298
- package/.cursor/rules/forgetting-algorithms.mdc +0 -426
- package/.cursor/rules/http-server.mdc +0 -432
- package/.cursor/rules/hybrid-search.mdc +0 -424
- package/.cursor/rules/implementation.mdc +0 -369
- package/.cursor/rules/lightweight-embedding.mdc +0 -178
- 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 +0 -205
- package/.cursor/rules/memento-memory-rule.mdc +0 -8
- package/.cursor/rules/memento-project-overview.mdc +0 -0
- package/.cursor/rules/memory-algorithms.mdc +0 -502
- package/.cursor/rules/monitoring.mdc +0 -622
- package/.cursor/rules/performance-alerts.mdc +0 -537
- package/.cursor/rules/performance-monitoring.mdc +0 -345
- package/.cursor/rules/performance-optimization.mdc +0 -563
- package/.cursor/rules/project-structure.mdc +0 -310
- package/.cursor/rules/testing.mdc +0 -473
- package/.dockerignore +0 -15
- package/.eslintrc.json +0 -34
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -51
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -45
- package/.github/ISSUE_TEMPLATE/question.md +0 -31
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -97
- package/AGENTS.md +0 -28
- package/CHANGELOG.md +0 -416
- package/CODE_OF_CONDUCT.md +0 -62
- package/CONTRIBUTING.md +0 -165
- package/DOCKER_SETUP_GUIDE.md +0 -84
- package/Dockerfile +0 -90
- package/backup/legacy-removal-20250930-201816/http-server-legacy.ts +0 -1068
- package/backup/legacy-removal-20250930-201816/rollback-to-legacy.ps1 +0 -46
- package/backup/legacy-removal-20250930-201816/rollback-to-legacy.sh +0 -48
- package/dist/server/index-backup.d.ts +0 -5
- package/dist/server/index-backup.d.ts.map +0 -1
- package/dist/server/index-backup.js +0 -793
- package/dist/server/index-backup.js.map +0 -1
- package/dist/server/index-refactored.d.ts +0 -6
- package/dist/server/index-refactored.d.ts.map +0 -1
- package/dist/server/index-refactored.js +0 -206
- package/dist/server/index-refactored.js.map +0 -1
- package/dist/services/performance-monitoring-integration.d.ts +0 -77
- package/dist/services/performance-monitoring-integration.d.ts.map +0 -1
- package/dist/services/performance-monitoring-integration.js +0 -177
- package/dist/services/performance-monitoring-integration.js.map +0 -1
- package/dist/test/debug-http-v2.d.ts +0 -5
- package/dist/test/debug-http-v2.d.ts.map +0 -1
- package/dist/test/debug-http-v2.js +0 -28
- package/dist/test/debug-http-v2.js.map +0 -1
- package/dist/test/performance-benchmark.d.ts +0 -57
- package/dist/test/performance-benchmark.d.ts.map +0 -1
- package/dist/test/performance-benchmark.js +0 -427
- package/dist/test/performance-benchmark.js.map +0 -1
- package/dist/test/test-alerts-direct.d.ts +0 -7
- package/dist/test/test-alerts-direct.d.ts.map +0 -1
- package/dist/test/test-alerts-direct.js +0 -101
- package/dist/test/test-alerts-direct.js.map +0 -1
- package/dist/test/test-batch-scheduler.d.ts +0 -2
- package/dist/test/test-batch-scheduler.d.ts.map +0 -1
- package/dist/test/test-batch-scheduler.js +0 -156
- package/dist/test/test-batch-scheduler.js.map +0 -1
- package/dist/test/test-client.d.ts +0 -5
- package/dist/test/test-client.d.ts.map +0 -1
- package/dist/test/test-client.js +0 -86
- package/dist/test/test-client.js.map +0 -1
- package/dist/test/test-embedding.d.ts +0 -6
- package/dist/test/test-embedding.d.ts.map +0 -1
- package/dist/test/test-embedding.js +0 -142
- package/dist/test/test-embedding.js.map +0 -1
- package/dist/test/test-error-logging.d.ts +0 -7
- package/dist/test/test-error-logging.d.ts.map +0 -1
- package/dist/test/test-error-logging.js +0 -105
- package/dist/test/test-error-logging.js.map +0 -1
- package/dist/test/test-forgetting.d.ts +0 -6
- package/dist/test/test-forgetting.d.ts.map +0 -1
- package/dist/test/test-forgetting.js +0 -154
- package/dist/test/test-forgetting.js.map +0 -1
- package/dist/test/test-gemini-embedding.d.ts +0 -7
- package/dist/test/test-gemini-embedding.d.ts.map +0 -1
- package/dist/test/test-gemini-embedding.js +0 -134
- package/dist/test/test-gemini-embedding.js.map +0 -1
- package/dist/test/test-http-server-v2-simple.d.ts +0 -6
- package/dist/test/test-http-server-v2-simple.d.ts.map +0 -1
- package/dist/test/test-http-server-v2-simple.js +0 -131
- package/dist/test/test-http-server-v2-simple.js.map +0 -1
- package/dist/test/test-http-server-v2.d.ts +0 -7
- package/dist/test/test-http-server-v2.d.ts.map +0 -1
- package/dist/test/test-http-server-v2.js +0 -529
- package/dist/test/test-http-server-v2.js.map +0 -1
- package/dist/test/test-lightweight-embedding.d.ts +0 -6
- package/dist/test/test-lightweight-embedding.d.ts.map +0 -1
- package/dist/test/test-lightweight-embedding.js +0 -189
- package/dist/test/test-lightweight-embedding.js.map +0 -1
- package/dist/test/test-m1-completion.d.ts +0 -7
- package/dist/test/test-m1-completion.d.ts.map +0 -1
- package/dist/test/test-m1-completion.js +0 -124
- package/dist/test/test-m1-completion.js.map +0 -1
- package/dist/test/test-memory-injection-prompt.d.ts +0 -2
- package/dist/test/test-memory-injection-prompt.d.ts.map +0 -1
- package/dist/test/test-memory-injection-prompt.js +0 -299
- package/dist/test/test-memory-injection-prompt.js.map +0 -1
- package/dist/test/test-performance-alerts.d.ts +0 -7
- package/dist/test/test-performance-alerts.d.ts.map +0 -1
- package/dist/test/test-performance-alerts.js +0 -109
- package/dist/test/test-performance-alerts.js.map +0 -1
- package/dist/test/test-performance-monitor.d.ts +0 -2
- package/dist/test/test-performance-monitor.d.ts.map +0 -1
- package/dist/test/test-performance-monitor.js +0 -182
- package/dist/test/test-performance-monitor.js.map +0 -1
- package/dist/test/test-performance-monitoring.d.ts +0 -6
- package/dist/test/test-performance-monitoring.d.ts.map +0 -1
- package/dist/test/test-performance-monitoring.js +0 -156
- package/dist/test/test-performance-monitoring.js.map +0 -1
- package/dist/test/test-search.d.ts +0 -5
- package/dist/test/test-search.d.ts.map +0 -1
- package/dist/test/test-search.js +0 -141
- package/dist/test/test-search.js.map +0 -1
- package/dist/test/test-simple-alerts.d.ts +0 -6
- package/dist/test/test-simple-alerts.d.ts.map +0 -1
- package/dist/test/test-simple-alerts.js +0 -106
- package/dist/test/test-simple-alerts.js.map +0 -1
- package/dist/test/test-vector-search-engine.d.ts +0 -2
- package/dist/test/test-vector-search-engine.d.ts.map +0 -1
- package/dist/test/test-vector-search-engine.js +0 -225
- package/dist/test/test-vector-search-engine.js.map +0 -1
- package/docker-compose.dev.yml +0 -50
- package/docker-compose.prod.yml +0 -77
- package/docker-compose.yml +0 -43
- package/docs/en/Memento-Goals.md +0 -217
- package/docs/en/Memento-M1-DetailSpecs.md +0 -130
- package/docs/en/Memento-Milestones.md +0 -135
- package/docs/en/Search-Ranking-Memory-Decay-Formulas.md +0 -177
- package/docs/en/api-reference.md +0 -658
- package/docs/en/architecture.md +0 -1302
- package/docs/en/developer-guide.md +0 -1005
- package/docs/en/user-manual.md +0 -595
- package/docs/ko/Memento-Goals.md +0 -217
- package/docs/ko/Memento-M1-DetailSpecs.md +0 -130
- package/docs/ko/Memento-Milestones.md +0 -134
- package/docs/ko/Search-Ranking-Memory-Decay-Formulas.md +0 -177
- package/docs/ko/api-reference.md +0 -658
- package/docs/ko/architecture.md +0 -1302
- package/docs/ko/developer-guide.md +0 -1006
- package/docs/ko/embedding-api-reference.md +0 -122
- package/docs/ko/embedding-configuration.md +0 -62
- package/docs/ko/embedding-performance-benchmark.md +0 -62
- package/docs/ko/embedding-service-guide.md +0 -314
- package/docs/ko/user-manual.md +0 -595
- package/env.example +0 -49
- package/install.sh +0 -191
- package/mcp-http-client.js +0 -218
- package/mcp.json +0 -0
- package/packages/mcp-client/docs/API-REFERENCE.md +0 -560
- package/packages/mcp-client/docs/BEST-PRACTICES.md +0 -564
- package/packages/mcp-client/docs/MIGRATION-GUIDE.md +0 -344
- package/packages/mcp-client/docs/PERFORMANCE-GUIDE.md +0 -476
- package/packages/mcp-client/docs/TROUBLESHOOTING.md +0 -564
- package/packages/mcp-client/package-lock.json +0 -907
- package/packages/mcp-client/package.json +0 -58
- package/packages/mcp-client/performance-optimizer.js +0 -428
- package/packages/mcp-client/test-basic.js +0 -65
- package/packages/mcp-client/test-integration.js +0 -366
- package/src/algorithms/forgetting-algorithm.spec.ts +0 -538
- package/src/algorithms/forgetting-algorithm.ts +0 -243
- package/src/algorithms/hybrid-search-engine.spec.ts +0 -484
- package/src/algorithms/hybrid-search-engine.ts +0 -489
- package/src/algorithms/search-engine.spec.ts +0 -429
- package/src/algorithms/search-engine.ts +0 -392
- package/src/algorithms/search-ranking.spec.ts +0 -293
- package/src/algorithms/search-ranking.ts +0 -407
- package/src/algorithms/spaced-repetition.spec.ts +0 -510
- package/src/algorithms/spaced-repetition.ts +0 -238
- package/src/algorithms/vector-search-engine.ts +0 -505
- package/src/client/index.spec.ts +0 -427
- package/src/client/index.ts +0 -222
- package/src/config/index.spec.ts +0 -339
- package/src/config/index.ts +0 -106
- package/src/database/init.spec.ts +0 -239
- package/src/database/init.ts +0 -130
- package/src/database/migrate.spec.ts +0 -293
- package/src/database/migrate.ts +0 -94
- package/src/database/migrations/001_add_embedding_metadata.sql +0 -29
- package/src/npm-client/context-injector.spec.ts +0 -335
- package/src/npm-client/context-injector.ts +0 -412
- package/src/npm-client/index.spec.ts +0 -108
- package/src/npm-client/index.ts +0 -96
- package/src/npm-client/memento-client.spec.ts +0 -549
- package/src/npm-client/memento-client.ts +0 -501
- package/src/npm-client/memory-manager.spec.ts +0 -374
- package/src/npm-client/memory-manager.ts +0 -414
- package/src/npm-client/types.spec.ts +0 -427
- package/src/npm-client/types.ts +0 -296
- package/src/npm-client/utils.spec.ts +0 -355
- package/src/npm-client/utils.ts +0 -423
- package/src/scripts/copy-assets.js +0 -37
- package/src/server/http-server.spec.ts +0 -648
- package/src/server/http-server.ts +0 -1030
- package/src/server/index-backup.ts +0 -875
- package/src/server/index-refactored.ts +0 -237
- package/src/server/index.spec.ts +0 -281
- package/src/server/index.ts +0 -347
- package/src/server/simple-mcp-server.spec.ts +0 -207
- package/src/server/simple-mcp-server.ts +0 -173
- package/src/services/async-optimizer.spec.ts +0 -569
- package/src/services/async-optimizer.ts +0 -484
- package/src/services/batch-scheduler.ts +0 -759
- package/src/services/cache-service.spec.ts +0 -372
- package/src/services/cache-service.ts +0 -434
- package/src/services/database-optimizer.spec.ts +0 -344
- package/src/services/database-optimizer.ts +0 -450
- package/src/services/embedding-provider-factory.ts +0 -173
- package/src/services/embedding-service.spec.ts +0 -342
- package/src/services/embedding-service.ts +0 -333
- package/src/services/error-logging-service.spec.ts +0 -416
- package/src/services/error-logging-service.ts +0 -383
- package/src/services/forgetting-policy-service.spec.ts +0 -140
- package/src/services/forgetting-policy-service.ts +0 -334
- package/src/services/gemini-embedding-service.spec.ts +0 -463
- package/src/services/gemini-embedding-service.ts +0 -283
- package/src/services/lightweight-embedding-service.spec.ts +0 -458
- package/src/services/lightweight-embedding-service.ts +0 -324
- package/src/services/memory-embedding-service.spec.ts +0 -417
- package/src/services/memory-embedding-service.ts +0 -289
- package/src/services/minilm-embedding-service.spec.ts +0 -104
- package/src/services/minilm-embedding-service.ts +0 -262
- package/src/services/performance-alert-service.spec.ts +0 -517
- package/src/services/performance-alert-service.ts +0 -477
- package/src/services/performance-monitor.spec.ts +0 -401
- package/src/services/performance-monitor.ts +0 -532
- package/src/services/performance-monitoring-integration.spec.ts +0 -478
- package/src/services/performance-monitoring-integration.ts.bak +0 -276
- package/src/services/unified-embedding-service.spec.ts +0 -224
- package/src/services/unified-embedding-service.ts +0 -255
- package/src/test/debug-http-v2.ts +0 -30
- package/src/test/embedding-integration-test.spec.ts +0 -295
- package/src/test/embedding-integration-test.ts +0 -295
- package/src/test/embedding-performance-benchmark.spec.ts +0 -354
- package/src/test/embedding-performance-benchmark.ts +0 -312
- package/src/test/performance-benchmark.ts +0 -565
- package/src/test/test-alerts-direct.ts +0 -136
- package/src/test/test-batch-scheduler-simple.spec.ts +0 -122
- package/src/test/test-batch-scheduler.spec.ts +0 -453
- package/src/test/test-batch-scheduler.ts +0 -182
- package/src/test/test-client.ts +0 -97
- package/src/test/test-embedding.ts +0 -153
- package/src/test/test-error-handling.spec.ts +0 -575
- package/src/test/test-error-logging.ts +0 -117
- package/src/test/test-forgetting.ts +0 -162
- package/src/test/test-gemini-embedding.ts +0 -159
- package/src/test/test-http-server-v2-simple.ts +0 -147
- package/src/test/test-http-server-v2.ts +0 -586
- package/src/test/test-hybrid-search-engine.spec.ts +0 -521
- package/src/test/test-integration-fixed.spec.ts +0 -612
- package/src/test/test-integration.spec.ts +0 -463
- package/src/test/test-lightweight-embedding.ts +0 -208
- package/src/test/test-m1-completion.spec.ts +0 -614
- package/src/test/test-m1-completion.ts +0 -141
- package/src/test/test-m1-integration.spec.ts +0 -514
- package/src/test/test-memory-injection-prompt.spec.ts +0 -650
- package/src/test/test-memory-injection-prompt.ts +0 -391
- package/src/test/test-performance-alerts.ts +0 -125
- package/src/test/test-performance-monitor-updates.spec.ts +0 -490
- package/src/test/test-performance-monitor.spec.ts +0 -284
- package/src/test/test-performance-monitor.ts +0 -228
- package/src/test/test-performance-monitoring.ts +0 -171
- package/src/test/test-search.ts +0 -151
- package/src/test/test-simple-alerts.ts +0 -136
- package/src/test/test-vector-search-engine.spec.ts +0 -408
- package/src/test/test-vector-search-engine.ts +0 -303
- package/src/tools/base-tool.ts +0 -189
- package/src/tools/cleanup-memory-tool.ts +0 -77
- package/src/tools/database-optimize-tool.ts +0 -79
- package/src/tools/error-stats.ts +0 -119
- package/src/tools/forget-tool.spec.ts +0 -613
- package/src/tools/forget-tool.ts +0 -454
- package/src/tools/forgetting-stats-tool.ts +0 -47
- package/src/tools/index.ts +0 -71
- package/src/tools/memory-injection-prompt.ts +0 -257
- package/src/tools/performance-alerts.ts +0 -226
- package/src/tools/performance-stats-tool.ts +0 -48
- package/src/tools/pin-tool.spec.ts +0 -497
- package/src/tools/pin-tool.ts +0 -277
- package/src/tools/recall-tool.spec.ts +0 -475
- package/src/tools/recall-tool.ts +0 -389
- package/src/tools/remember-tool.spec.ts +0 -469
- package/src/tools/remember-tool.ts +0 -112
- package/src/tools/resolve-error.ts +0 -69
- package/src/tools/tool-registry.ts +0 -417
- package/src/tools/types.ts +0 -63
- package/src/tools/unpin-tool.spec.ts +0 -549
- package/src/tools/unpin-tool.ts +0 -306
- package/src/types/embedding.types.ts +0 -78
- package/src/types/index.spec.ts +0 -420
- package/src/types/index.ts +0 -117
- package/src/utils/database.spec.ts +0 -77
- package/src/utils/database.ts +0 -458
- package/src/utils/stopwords.ts +0 -128
- package/start-docker-setup.bat +0 -38
- package/static/logo.png +0 -0
- package/static/memento_logo.svg +0 -2
- package/test-docker.js +0 -103
- package/tsconfig.json +0 -46
- package/vitest.config.ts +0 -23
package/src/utils/database.ts
DELETED
|
@@ -1,458 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite3 데이터베이스 유틸리티 함수들
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import Database from 'better-sqlite3';
|
|
6
|
-
|
|
7
|
-
// MCP 서버에서는 모든 로그 출력을 완전히 차단
|
|
8
|
-
const log = (...args: any[]) => {};
|
|
9
|
-
|
|
10
|
-
export class DatabaseUtils {
|
|
11
|
-
// 트랜잭션 상태 추적을 위한 WeakMap
|
|
12
|
-
private static transactionStates = new WeakMap<Database.Database, { inTransaction: boolean; transactionId?: string }>();
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* 트랜잭션 상태 확인
|
|
16
|
-
*/
|
|
17
|
-
private static getTransactionState(db: Database.Database): { inTransaction: boolean; transactionId?: string } {
|
|
18
|
-
if (!this.transactionStates.has(db)) {
|
|
19
|
-
this.transactionStates.set(db, { inTransaction: false });
|
|
20
|
-
}
|
|
21
|
-
return this.transactionStates.get(db)!;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* 트랜잭션 상태 설정
|
|
26
|
-
*/
|
|
27
|
-
private static setTransactionState(db: Database.Database, inTransaction: boolean, transactionId?: string): void {
|
|
28
|
-
this.transactionStates.set(db, { inTransaction, transactionId });
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* SQLite3 쿼리를 실행 (재시도 로직 포함)
|
|
33
|
-
*/
|
|
34
|
-
static run(db: Database.Database, sql: string, params: any[] = [], maxRetries: number = 3): Database.RunResult {
|
|
35
|
-
let lastError: Error | null = null;
|
|
36
|
-
|
|
37
|
-
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
38
|
-
try {
|
|
39
|
-
return db.prepare(sql).run(params);
|
|
40
|
-
} catch (error) {
|
|
41
|
-
lastError = error as Error;
|
|
42
|
-
|
|
43
|
-
// SQLITE_BUSY 오류인 경우 재시도
|
|
44
|
-
if ((error as any).code === 'SQLITE_BUSY' && attempt < maxRetries) {
|
|
45
|
-
const delay = Math.min(100 * Math.pow(2, attempt - 1), 1000); // 지수 백오프
|
|
46
|
-
log(`⚠️ 데이터베이스 잠금 감지, ${delay}ms 후 재시도 (${attempt}/${maxRetries})`);
|
|
47
|
-
// 동기적으로 대기
|
|
48
|
-
const start = Date.now();
|
|
49
|
-
while (Date.now() - start < delay) {
|
|
50
|
-
// busy wait
|
|
51
|
-
}
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// 다른 오류이거나 최대 재시도 횟수에 도달한 경우
|
|
56
|
-
throw error;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
throw lastError;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* SQLite3 쿼리 결과를 가져오기 (재시도 로직 포함)
|
|
65
|
-
*/
|
|
66
|
-
static get(db: Database.Database, sql: string, params: any[] = [], maxRetries: number = 3): any {
|
|
67
|
-
let lastError: Error | null = null;
|
|
68
|
-
|
|
69
|
-
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
70
|
-
try {
|
|
71
|
-
return db.prepare(sql).get(params);
|
|
72
|
-
} catch (error) {
|
|
73
|
-
lastError = error as Error;
|
|
74
|
-
|
|
75
|
-
// SQLITE_BUSY 오류인 경우 재시도
|
|
76
|
-
if ((error as any).code === 'SQLITE_BUSY' && attempt < maxRetries) {
|
|
77
|
-
const delay = Math.min(100 * Math.pow(2, attempt - 1), 1000);
|
|
78
|
-
log(`⚠️ 데이터베이스 잠금 감지, ${delay}ms 후 재시도 (${attempt}/${maxRetries})`);
|
|
79
|
-
// 동기적으로 대기
|
|
80
|
-
const start = Date.now();
|
|
81
|
-
while (Date.now() - start < delay) {
|
|
82
|
-
// busy wait
|
|
83
|
-
}
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
throw error;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
throw lastError;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* SQLite3 쿼리 결과 배열을 가져오기 (재시도 로직 포함)
|
|
96
|
-
*/
|
|
97
|
-
static all(db: Database.Database, sql: string, params: any[] = [], maxRetries: number = 3): any[] {
|
|
98
|
-
let lastError: Error | null = null;
|
|
99
|
-
|
|
100
|
-
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
101
|
-
try {
|
|
102
|
-
return db.prepare(sql).all(params);
|
|
103
|
-
} catch (error) {
|
|
104
|
-
lastError = error as Error;
|
|
105
|
-
|
|
106
|
-
// SQLITE_BUSY 오류인 경우 재시도
|
|
107
|
-
if ((error as any).code === 'SQLITE_BUSY' && attempt < maxRetries) {
|
|
108
|
-
const delay = Math.min(100 * Math.pow(2, attempt - 1), 1000);
|
|
109
|
-
log(`⚠️ 데이터베이스 잠금 감지, ${delay}ms 후 재시도 (${attempt}/${maxRetries})`);
|
|
110
|
-
// 동기적으로 대기
|
|
111
|
-
const start = Date.now();
|
|
112
|
-
while (Date.now() - start < delay) {
|
|
113
|
-
// busy wait
|
|
114
|
-
}
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
throw error;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
throw lastError;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* SQLite3 exec 실행
|
|
127
|
-
*/
|
|
128
|
-
static exec(db: Database.Database, sql: string): void {
|
|
129
|
-
db.exec(sql);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* 트랜잭션을 재시도 로직과 함께 실행 (개선된 버전)
|
|
134
|
-
*/
|
|
135
|
-
static async runTransaction<T>(
|
|
136
|
-
db: Database.Database,
|
|
137
|
-
transactionFn: () => T | Promise<T>,
|
|
138
|
-
maxRetries: number = 3
|
|
139
|
-
): Promise<T> {
|
|
140
|
-
const transactionState = this.getTransactionState(db);
|
|
141
|
-
|
|
142
|
-
// 이미 트랜잭션이 진행 중인 경우 중첩 방지
|
|
143
|
-
if (transactionState.inTransaction) {
|
|
144
|
-
log('⚠️ 트랜잭션 중첩 감지, 기존 트랜잭션 내에서 실행');
|
|
145
|
-
return await transactionFn();
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
const transactionId = `txn_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
149
|
-
let lastError: Error | null = null;
|
|
150
|
-
|
|
151
|
-
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
152
|
-
try {
|
|
153
|
-
// 트랜잭션 상태 설정
|
|
154
|
-
this.setTransactionState(db, true, transactionId);
|
|
155
|
-
|
|
156
|
-
// 트랜잭션 시작
|
|
157
|
-
this.run(db, 'BEGIN IMMEDIATE TRANSACTION');
|
|
158
|
-
|
|
159
|
-
// 트랜잭션 함수 실행
|
|
160
|
-
const result = await transactionFn();
|
|
161
|
-
|
|
162
|
-
// 커밋
|
|
163
|
-
this.run(db, 'COMMIT');
|
|
164
|
-
|
|
165
|
-
// 트랜잭션 상태 해제
|
|
166
|
-
this.setTransactionState(db, false);
|
|
167
|
-
|
|
168
|
-
return result;
|
|
169
|
-
} catch (error) {
|
|
170
|
-
lastError = error as Error;
|
|
171
|
-
|
|
172
|
-
// 트랜잭션 상태 해제
|
|
173
|
-
this.setTransactionState(db, false);
|
|
174
|
-
|
|
175
|
-
// 롤백 시도 (안전하게)
|
|
176
|
-
try {
|
|
177
|
-
// 트랜잭션 상태 확인 후 롤백
|
|
178
|
-
const currentState = this.getTransactionState(db);
|
|
179
|
-
if (!currentState.inTransaction) {
|
|
180
|
-
// 트랜잭션이 이미 종료된 경우 롤백 불필요
|
|
181
|
-
log('ℹ️ 트랜잭션이 이미 종료됨, 롤백 생략');
|
|
182
|
-
} else {
|
|
183
|
-
this.run(db, 'ROLLBACK');
|
|
184
|
-
this.setTransactionState(db, false);
|
|
185
|
-
}
|
|
186
|
-
} catch (rollbackError) {
|
|
187
|
-
log('❌ 트랜잭션 롤백 실패:', rollbackError);
|
|
188
|
-
// 롤백 실패해도 상태는 해제
|
|
189
|
-
this.setTransactionState(db, false);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// SQLITE_BUSY 오류인 경우 재시도
|
|
193
|
-
if ((error as any).code === 'SQLITE_BUSY' && attempt < maxRetries) {
|
|
194
|
-
const delay = Math.min(200 * Math.pow(2, attempt - 1), 2000);
|
|
195
|
-
log(`⚠️ 트랜잭션 잠금 감지, ${delay}ms 후 재시도 (${attempt}/${maxRetries})`);
|
|
196
|
-
// 비동기 대기로 변경 (블로킹 방지)
|
|
197
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
198
|
-
continue;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// 다른 오류이거나 최대 재시도 횟수에 도달한 경우
|
|
202
|
-
throw error;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
throw lastError;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* WAL 체크포인트 실행 (락 해제용)
|
|
211
|
-
*/
|
|
212
|
-
static checkpointWAL(db: Database.Database): void {
|
|
213
|
-
try {
|
|
214
|
-
this.run(db, 'PRAGMA wal_checkpoint(FULL)');
|
|
215
|
-
log('✅ WAL 체크포인트 완료');
|
|
216
|
-
} catch (error) {
|
|
217
|
-
log('❌ WAL 체크포인트 실패:', error);
|
|
218
|
-
throw error;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* 트랜잭션 상태 확인
|
|
224
|
-
*/
|
|
225
|
-
static isInTransaction(db: Database.Database): boolean {
|
|
226
|
-
return this.getTransactionState(db).inTransaction;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* 트랜잭션 강제 정리 (비상시 사용)
|
|
231
|
-
*/
|
|
232
|
-
static forceCleanupTransaction(db: Database.Database): void {
|
|
233
|
-
try {
|
|
234
|
-
// 트랜잭션 상태 강제 해제
|
|
235
|
-
this.setTransactionState(db, false);
|
|
236
|
-
|
|
237
|
-
// 롤백 시도
|
|
238
|
-
this.run(db, 'ROLLBACK');
|
|
239
|
-
log('✅ 트랜잭션 강제 정리 완료');
|
|
240
|
-
} catch (error) {
|
|
241
|
-
log('⚠️ 트랜잭션 강제 정리 중 오류:', error);
|
|
242
|
-
// 상태는 해제
|
|
243
|
-
this.setTransactionState(db, false);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* 데이터베이스 상태 확인
|
|
249
|
-
*/
|
|
250
|
-
static getDatabaseStatus(db: Database.Database): {
|
|
251
|
-
journalMode: string;
|
|
252
|
-
walAutoCheckpoint: number;
|
|
253
|
-
busyTimeout: number;
|
|
254
|
-
isLocked: boolean;
|
|
255
|
-
inTransaction: boolean;
|
|
256
|
-
} {
|
|
257
|
-
try {
|
|
258
|
-
const journalMode = this.get(db, 'PRAGMA journal_mode');
|
|
259
|
-
const walAutoCheckpoint = this.get(db, 'PRAGMA wal_autocheckpoint');
|
|
260
|
-
const busyTimeout = this.get(db, 'PRAGMA busy_timeout');
|
|
261
|
-
|
|
262
|
-
// 간단한 락 테스트
|
|
263
|
-
let isLocked = false;
|
|
264
|
-
try {
|
|
265
|
-
this.run(db, 'BEGIN IMMEDIATE TRANSACTION');
|
|
266
|
-
this.run(db, 'ROLLBACK');
|
|
267
|
-
} catch (error) {
|
|
268
|
-
if ((error as any).code === 'SQLITE_BUSY') {
|
|
269
|
-
isLocked = true;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
return {
|
|
274
|
-
journalMode: journalMode.journal_mode,
|
|
275
|
-
walAutoCheckpoint: walAutoCheckpoint.wal_autocheckpoint,
|
|
276
|
-
busyTimeout: busyTimeout.busy_timeout,
|
|
277
|
-
isLocked,
|
|
278
|
-
inTransaction: this.getTransactionState(db).inTransaction
|
|
279
|
-
};
|
|
280
|
-
} catch (error) {
|
|
281
|
-
log('❌ 데이터베이스 상태 확인 실패:', error);
|
|
282
|
-
throw error;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* 데이터베이스 초기화 (스키마 생성)
|
|
288
|
-
*/
|
|
289
|
-
static async initializeDatabase(db: Database.Database): Promise<void> {
|
|
290
|
-
try {
|
|
291
|
-
// SQLite 설정 최적화
|
|
292
|
-
this.run(db, 'PRAGMA journal_mode = WAL');
|
|
293
|
-
this.run(db, 'PRAGMA synchronous = NORMAL');
|
|
294
|
-
this.run(db, 'PRAGMA cache_size = 10000');
|
|
295
|
-
this.run(db, 'PRAGMA temp_store = MEMORY');
|
|
296
|
-
this.run(db, 'PRAGMA mmap_size = 268435456'); // 256MB
|
|
297
|
-
this.run(db, 'PRAGMA busy_timeout = 30000');
|
|
298
|
-
|
|
299
|
-
// FTS5 확장 활성화
|
|
300
|
-
this.run(db, 'PRAGMA compile_options');
|
|
301
|
-
|
|
302
|
-
// 기본 테이블 생성
|
|
303
|
-
this.run(db, `
|
|
304
|
-
CREATE TABLE IF NOT EXISTS memory_item (
|
|
305
|
-
id TEXT PRIMARY KEY,
|
|
306
|
-
type TEXT CHECK (type IN ('working','episodic','semantic','procedural')) NOT NULL,
|
|
307
|
-
content TEXT NOT NULL,
|
|
308
|
-
importance REAL CHECK (importance >= 0 AND importance <= 1) DEFAULT 0.5,
|
|
309
|
-
privacy_scope TEXT CHECK (privacy_scope IN ('private','team','public')) DEFAULT 'private',
|
|
310
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
311
|
-
last_accessed TIMESTAMP,
|
|
312
|
-
pinned BOOLEAN DEFAULT FALSE,
|
|
313
|
-
tags TEXT,
|
|
314
|
-
source TEXT,
|
|
315
|
-
view_count INTEGER DEFAULT 0,
|
|
316
|
-
cite_count INTEGER DEFAULT 0,
|
|
317
|
-
edit_count INTEGER DEFAULT 0
|
|
318
|
-
)
|
|
319
|
-
`);
|
|
320
|
-
|
|
321
|
-
this.run(db, `
|
|
322
|
-
CREATE TABLE IF NOT EXISTS memory_tag (
|
|
323
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
324
|
-
name TEXT NOT NULL UNIQUE,
|
|
325
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
326
|
-
)
|
|
327
|
-
`);
|
|
328
|
-
|
|
329
|
-
this.run(db, `
|
|
330
|
-
CREATE TABLE IF NOT EXISTS memory_item_tag (
|
|
331
|
-
memory_id TEXT NOT NULL,
|
|
332
|
-
tag_id INTEGER NOT NULL,
|
|
333
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
334
|
-
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
335
|
-
FOREIGN KEY (tag_id) REFERENCES memory_tag(id) ON DELETE CASCADE,
|
|
336
|
-
PRIMARY KEY (memory_id, tag_id)
|
|
337
|
-
)
|
|
338
|
-
`);
|
|
339
|
-
|
|
340
|
-
this.run(db, `
|
|
341
|
-
CREATE TABLE IF NOT EXISTS memory_link (
|
|
342
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
343
|
-
source_id TEXT NOT NULL,
|
|
344
|
-
target_id TEXT NOT NULL,
|
|
345
|
-
relation_type TEXT CHECK (relation_type IN ('cause_of', 'derived_from', 'duplicates', 'contradicts')) NOT NULL,
|
|
346
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
347
|
-
FOREIGN KEY (source_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
348
|
-
FOREIGN KEY (target_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
349
|
-
UNIQUE(source_id, target_id, relation_type)
|
|
350
|
-
)
|
|
351
|
-
`);
|
|
352
|
-
|
|
353
|
-
this.run(db, `
|
|
354
|
-
CREATE TABLE IF NOT EXISTS feedback_event (
|
|
355
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
356
|
-
memory_id TEXT NOT NULL,
|
|
357
|
-
event TEXT CHECK (event IN ('used', 'edited', 'neglected', 'helpful', 'not_helpful')) NOT NULL,
|
|
358
|
-
score REAL,
|
|
359
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
360
|
-
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE
|
|
361
|
-
)
|
|
362
|
-
`);
|
|
363
|
-
|
|
364
|
-
this.run(db, `
|
|
365
|
-
CREATE TABLE IF NOT EXISTS wm_buffer (
|
|
366
|
-
session_id TEXT PRIMARY KEY,
|
|
367
|
-
items TEXT NOT NULL,
|
|
368
|
-
token_budget INTEGER DEFAULT 4000,
|
|
369
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
370
|
-
expires_at TIMESTAMP NOT NULL
|
|
371
|
-
)
|
|
372
|
-
`);
|
|
373
|
-
|
|
374
|
-
this.run(db, `
|
|
375
|
-
CREATE TABLE IF NOT EXISTS memory_embedding (
|
|
376
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
377
|
-
memory_id TEXT NOT NULL,
|
|
378
|
-
embedding TEXT NOT NULL,
|
|
379
|
-
dim INTEGER NOT NULL,
|
|
380
|
-
model TEXT,
|
|
381
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
382
|
-
FOREIGN KEY (memory_id) REFERENCES memory_item(id) ON DELETE CASCADE,
|
|
383
|
-
UNIQUE(memory_id)
|
|
384
|
-
)
|
|
385
|
-
`);
|
|
386
|
-
|
|
387
|
-
// 인덱스 생성
|
|
388
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_item_type ON memory_item(type)');
|
|
389
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_item_created_at ON memory_item(created_at)');
|
|
390
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_item_last_accessed ON memory_item(last_accessed)');
|
|
391
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_item_pinned ON memory_item(pinned)');
|
|
392
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_item_privacy_scope ON memory_item(privacy_scope)');
|
|
393
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_item_importance ON memory_item(importance)');
|
|
394
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_item_user_id ON memory_item(id)');
|
|
395
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_item_project_id ON memory_item(id)');
|
|
396
|
-
|
|
397
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_tag_memory_id ON memory_item_tag(memory_id)');
|
|
398
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_tag_tag_id ON memory_item_tag(tag_id)');
|
|
399
|
-
|
|
400
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_link_source ON memory_link(source_id)');
|
|
401
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_link_target ON memory_link(target_id)');
|
|
402
|
-
|
|
403
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_feedback_memory_id ON feedback_event(memory_id)');
|
|
404
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_feedback_event ON feedback_event(event)');
|
|
405
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_feedback_created_at ON feedback_event(created_at)');
|
|
406
|
-
|
|
407
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_wm_buffer_expires_at ON wm_buffer(expires_at)');
|
|
408
|
-
|
|
409
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_embedding_memory_id ON memory_embedding(memory_id)');
|
|
410
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_embedding_dim ON memory_embedding(dim)');
|
|
411
|
-
this.run(db, 'CREATE INDEX IF NOT EXISTS idx_memory_embedding_model ON memory_embedding(model)');
|
|
412
|
-
|
|
413
|
-
// FTS5 가상 테이블 생성
|
|
414
|
-
try {
|
|
415
|
-
this.run(db, `
|
|
416
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS memory_item_fts USING fts5(
|
|
417
|
-
content,
|
|
418
|
-
tags,
|
|
419
|
-
source,
|
|
420
|
-
content='memory_item',
|
|
421
|
-
content_rowid='rowid'
|
|
422
|
-
)
|
|
423
|
-
`);
|
|
424
|
-
|
|
425
|
-
// FTS5 트리거 생성
|
|
426
|
-
this.run(db, `
|
|
427
|
-
CREATE TRIGGER IF NOT EXISTS memory_item_fts_insert AFTER INSERT ON memory_item BEGIN
|
|
428
|
-
INSERT INTO memory_item_fts(rowid, content, tags, source)
|
|
429
|
-
VALUES (new.rowid, new.content, new.tags, new.source);
|
|
430
|
-
END
|
|
431
|
-
`);
|
|
432
|
-
|
|
433
|
-
this.run(db, `
|
|
434
|
-
CREATE TRIGGER IF NOT EXISTS memory_item_fts_delete AFTER DELETE ON memory_item BEGIN
|
|
435
|
-
INSERT INTO memory_item_fts(memory_item_fts, rowid, content, tags, source)
|
|
436
|
-
VALUES('delete', old.rowid, old.content, old.tags, old.source);
|
|
437
|
-
END
|
|
438
|
-
`);
|
|
439
|
-
|
|
440
|
-
this.run(db, `
|
|
441
|
-
CREATE TRIGGER IF NOT EXISTS memory_item_fts_update AFTER UPDATE ON memory_item BEGIN
|
|
442
|
-
INSERT INTO memory_item_fts(memory_item_fts, rowid, content, tags, source)
|
|
443
|
-
VALUES('delete', old.rowid, old.content, old.tags, old.source);
|
|
444
|
-
INSERT INTO memory_item_fts(rowid, content, tags, source)
|
|
445
|
-
VALUES (new.rowid, new.content, new.tags, new.source);
|
|
446
|
-
END
|
|
447
|
-
`);
|
|
448
|
-
} catch (error) {
|
|
449
|
-
log('⚠️ FTS5 가상 테이블 생성 실패:', error);
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
log('✅ 데이터베이스 초기화 완료');
|
|
453
|
-
} catch (error) {
|
|
454
|
-
log('❌ 데이터베이스 초기화 실패:', error);
|
|
455
|
-
throw error;
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
}
|
package/src/utils/stopwords.ts
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 불용어(Stopwords) 관리 유틸리티
|
|
3
|
-
* 한국어와 영어 불용어를 통합 관리
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
// 영어 불용어 리스트
|
|
7
|
-
const englishStopWords = [
|
|
8
|
-
'the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for', 'of', 'with', 'by',
|
|
9
|
-
'from', 'up', 'about', 'into', 'through', 'during', 'before', 'after', 'above', 'below',
|
|
10
|
-
'up', 'down', 'out', 'off', 'over', 'under', 'again', 'further', 'then', 'once',
|
|
11
|
-
'here', 'there', 'when', 'where', 'why', 'how', 'all', 'any', 'both', 'each', 'few',
|
|
12
|
-
'more', 'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same',
|
|
13
|
-
'so', 'than', 'too', 'very', 'can', 'will', 'just', 'should', 'now', 'is', 'are',
|
|
14
|
-
'was', 'were', 'be', 'been', 'being', 'have', 'has', 'had', 'do', 'does', 'did',
|
|
15
|
-
'will', 'would', 'could', 'should', 'may', 'might', 'must', 'shall', 'this', 'that',
|
|
16
|
-
'these', 'those', 'i', 'you', 'he', 'she', 'it', 'we', 'they', 'me', 'him', 'her',
|
|
17
|
-
'us', 'them', 'my', 'your', 'his', 'her', 'its', 'our', 'their', 'myself', 'yourself',
|
|
18
|
-
'himself', 'herself', 'itself', 'ourselves', 'yourselves', 'themselves'
|
|
19
|
-
];
|
|
20
|
-
|
|
21
|
-
// 한국어 불용어 리스트 (주요 불용어들)
|
|
22
|
-
const koreanStopWords = [
|
|
23
|
-
// 조사
|
|
24
|
-
'이', '가', '을', '를', '에', '에서', '로', '으로', '와', '과', '도', '는', '은', '의', '에게', '한테',
|
|
25
|
-
'부터', '까지', '만', '도', '조차', '마저', '까지도', '조차도', '마저도',
|
|
26
|
-
|
|
27
|
-
// 대명사
|
|
28
|
-
'그', '저', '이', '그것', '저것', '이것', '그들', '저들', '이들', '나', '너', '우리', '너희', '그녀', '그들',
|
|
29
|
-
'자신', '자기', '본인', '당신', '여러분', '누구', '어느', '어떤', '무엇', '어디', '언제', '왜', '어떻게',
|
|
30
|
-
|
|
31
|
-
// 수사
|
|
32
|
-
'하나', '둘', '셋', '넷', '다섯', '여섯', '일곱', '여덟', '아홉', '열', '첫째', '둘째', '셋째',
|
|
33
|
-
'하나', '두', '세', '네', '다섯', '여섯', '일곱', '여덟', '아홉', '열',
|
|
34
|
-
|
|
35
|
-
// 부사
|
|
36
|
-
'매우', '아주', '정말', '진짜', '너무', '완전', '정말로', '정말', '진짜로', '정말', '정말로',
|
|
37
|
-
'가장', '더', '더욱', '훨씬', '많이', '조금', '약간', '좀', '조금', '약간', '좀',
|
|
38
|
-
'잘', '못', '안', '아니', '아닌', '아니야', '아니에요', '아닙니다',
|
|
39
|
-
'그냥', '그저', '단지', '그저', '그냥', '단지', '그저',
|
|
40
|
-
'이미', '벌써', '이미', '벌써', '이미', '벌써',
|
|
41
|
-
'아직', '여전히', '아직', '여전히', '아직', '여전히',
|
|
42
|
-
'다시', '또', '또다시', '다시', '또', '또다시',
|
|
43
|
-
'바로', '곧', '즉시', '바로', '곧', '즉시',
|
|
44
|
-
'여기', '거기', '저기', '여기', '거기', '저기',
|
|
45
|
-
'언제', '언제나', '항상', '언제', '언제나', '항상',
|
|
46
|
-
'어디', '어디서', '어디에', '어디', '어디서', '어디에',
|
|
47
|
-
'왜', '어떻게', '왜', '어떻게',
|
|
48
|
-
|
|
49
|
-
// 접속사
|
|
50
|
-
'그리고', '그러나', '하지만', '그런데', '그래서', '따라서', '그러므로', '그러면', '그럼',
|
|
51
|
-
'또한', '또', '그리고', '또한', '또', '그리고',
|
|
52
|
-
'또는', '혹은', '아니면', '또는', '혹은', '아니면',
|
|
53
|
-
'그러니까', '그러니', '그러니까', '그러니',
|
|
54
|
-
'그런데', '그런데', '그런데',
|
|
55
|
-
'그래서', '그래서', '그래서',
|
|
56
|
-
'따라서', '따라서', '따라서',
|
|
57
|
-
'그러므로', '그러므로', '그러므로',
|
|
58
|
-
'그러면', '그럼', '그러면', '그럼',
|
|
59
|
-
|
|
60
|
-
// 감탄사
|
|
61
|
-
'아', '어', '오', '우', '아', '어', '오', '우',
|
|
62
|
-
'아이', '어이', '오이', '우이', '아이', '어이', '오이', '우이',
|
|
63
|
-
'아하', '어라', '오호', '우와', '아하', '어라', '오호', '우와',
|
|
64
|
-
'어머', '어머나', '어머', '어머나',
|
|
65
|
-
'아이고', '어이고', '오이고', '우이고', '아이고', '어이고', '오이고', '우이고',
|
|
66
|
-
|
|
67
|
-
// 기타 자주 사용되는 불용어
|
|
68
|
-
'것', '거', '게', '것', '거', '게',
|
|
69
|
-
'수', '것', '거', '게', '수', '것', '거', '게',
|
|
70
|
-
'때', '때문', '때문에', '때', '때문', '때문에',
|
|
71
|
-
'경우', '경우에', '경우', '경우에',
|
|
72
|
-
'상황', '상황에서', '상황', '상황에서',
|
|
73
|
-
'문제', '문제가', '문제', '문제가',
|
|
74
|
-
'방법', '방법으로', '방법', '방법으로',
|
|
75
|
-
'과정', '과정에서', '과정', '과정에서',
|
|
76
|
-
'결과', '결과로', '결과', '결과로',
|
|
77
|
-
'이유', '이유로', '이유', '이유로',
|
|
78
|
-
'목적', '목적으로', '목적', '목적으로',
|
|
79
|
-
'의미', '의미로', '의미', '의미로',
|
|
80
|
-
'내용', '내용을', '내용', '내용을',
|
|
81
|
-
'형태', '형태로', '형태', '형태로',
|
|
82
|
-
'종류', '종류의', '종류', '종류의',
|
|
83
|
-
'부분', '부분을', '부분', '부분을',
|
|
84
|
-
'전체', '전체를', '전체', '전체를',
|
|
85
|
-
'일부', '일부를', '일부', '일부를',
|
|
86
|
-
'대부분', '대부분을', '대부분', '대부분을',
|
|
87
|
-
'모든', '모든 것을', '모든', '모든 것을',
|
|
88
|
-
'각각', '각각의', '각각', '각각의',
|
|
89
|
-
'개별', '개별적으로', '개별', '개별적으로',
|
|
90
|
-
'공통', '공통으로', '공통', '공통으로',
|
|
91
|
-
'특별', '특별히', '특별', '특별히',
|
|
92
|
-
'일반', '일반적으로', '일반', '일반적으로',
|
|
93
|
-
'보통', '보통으로', '보통', '보통으로',
|
|
94
|
-
'평범', '평범하게', '평범', '평범하게',
|
|
95
|
-
'특수', '특수하게', '특수', '특수하게',
|
|
96
|
-
'특별한', '특별한', '특별한',
|
|
97
|
-
'일반적인', '일반적인', '일반적인',
|
|
98
|
-
'보통의', '보통의', '보통의',
|
|
99
|
-
'평범한', '평범한', '평범한',
|
|
100
|
-
'특수한', '특수한', '특수한'
|
|
101
|
-
];
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* 한국어와 영어 불용어를 통합한 Set을 반환
|
|
105
|
-
*/
|
|
106
|
-
export function getStopWords(): Set<string> {
|
|
107
|
-
const allStopWords = [...englishStopWords, ...koreanStopWords];
|
|
108
|
-
return new Set(allStopWords.map(word => word.toLowerCase()));
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* 특정 언어의 불용어만 반환
|
|
113
|
-
*/
|
|
114
|
-
export function getEnglishStopWords(): Set<string> {
|
|
115
|
-
return new Set(englishStopWords.map(word => word.toLowerCase()));
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export function getKoreanStopWords(): Set<string> {
|
|
119
|
-
return new Set(koreanStopWords.map(word => word.toLowerCase()));
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* 불용어인지 확인
|
|
124
|
-
*/
|
|
125
|
-
export function isStopWord(word: string): boolean {
|
|
126
|
-
const stopWords = getStopWords();
|
|
127
|
-
return stopWords.has(word.toLowerCase());
|
|
128
|
-
}
|
package/start-docker-setup.bat
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
@echo off
|
|
2
|
-
echo 🐳 Memento Docker 설정 시작...
|
|
3
|
-
echo.
|
|
4
|
-
|
|
5
|
-
echo 1. Docker Desktop 상태 확인...
|
|
6
|
-
docker info >nul 2>&1
|
|
7
|
-
if %errorlevel% neq 0 (
|
|
8
|
-
echo ❌ Docker Desktop이 실행되지 않았습니다.
|
|
9
|
-
echo Docker Desktop을 시작한 후 다시 실행해주세요.
|
|
10
|
-
pause
|
|
11
|
-
exit /b 1
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
echo ✅ Docker Desktop이 실행 중입니다.
|
|
15
|
-
echo.
|
|
16
|
-
|
|
17
|
-
echo 2. 도커 이미지 빌드...
|
|
18
|
-
docker-compose build --no-cache
|
|
19
|
-
|
|
20
|
-
echo 3. 도커 컨테이너 시작...
|
|
21
|
-
docker-compose up -d
|
|
22
|
-
|
|
23
|
-
echo 4. 데이터 마운트 확인...
|
|
24
|
-
echo 호스트 ./data 폴더가 컨테이너 /app/data에 마운트됩니다.
|
|
25
|
-
|
|
26
|
-
echo 5. 컨테이너 상태 확인...
|
|
27
|
-
docker-compose ps
|
|
28
|
-
|
|
29
|
-
echo 6. 서버 접속 정보...
|
|
30
|
-
echo HTTP 서버: http://localhost:9001
|
|
31
|
-
echo WebSocket: ws://localhost:9001
|
|
32
|
-
echo API 문서: http://localhost:9001/tools
|
|
33
|
-
echo 헬스 체크: http://localhost:9001/health
|
|
34
|
-
|
|
35
|
-
echo.
|
|
36
|
-
echo ✅ 설정 완료! 이제 Cursor에서 Memento MCP 서버를 사용할 수 있습니다.
|
|
37
|
-
echo.
|
|
38
|
-
pause
|
package/static/logo.png
DELETED
|
Binary file
|
package/static/memento_logo.svg
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8" ?>
|
|
2
|
-
<svg baseProfile="tiny" height="100%" version="1.2" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink"><defs /><polygon fill="black" points="824,695 823,696 820,696 819,697 817,697 816,698 815,698 814,699 812,699 811,700 810,700 808,702 807,702 804,705 803,705 799,709 799,710 796,713 796,714 794,716 794,717 793,718 793,719 792,720 792,721 791,722 791,724 790,725 790,727 789,728 789,731 788,732 788,739 787,740 787,748 788,749 788,755 789,756 789,759 790,760 790,763 791,764 791,765 792,766 792,767 793,768 793,769 794,770 794,771 796,773 796,774 801,779 801,780 802,780 806,784 807,784 808,785 809,785 811,787 813,787 814,788 815,788 816,789 818,789 819,790 822,790 823,791 829,791 830,792 838,792 839,791 845,791 846,790 849,790 850,789 852,789 853,788 855,788 856,787 857,787 858,786 859,786 860,785 861,785 863,783 864,783 873,774 873,773 875,771 875,770 876,769 876,768 877,767 877,766 878,765 878,763 879,762 879,760 880,759 880,755 881,754 881,733 880,732 880,728 879,727 879,725 878,724 878,722 877,721 877,720 876,719 876,718 875,717 875,716 873,714 873,713 863,703 862,703 860,701 859,701 858,700 857,700 856,699 855,699 854,698 853,698 852,697 850,697 849,696 845,696 844,695" /><polygon fill="black" points="660,695 659,696 656,696 655,697 653,697 652,698 651,698 650,699 649,699 646,702 645,702 642,705 642,706 640,708 639,707 639,706 640,705 640,697 620,697 620,789 640,789 640,732 641,731 641,729 642,728 642,727 643,726 643,725 645,723 645,722 648,719 649,719 651,717 652,717 654,715 656,715 657,714 661,714 662,713 667,713 668,714 671,714 672,715 673,715 674,716 675,716 677,718 678,718 680,720 680,721 681,722 681,723 682,724 682,725 683,726 683,729 684,730 684,789 704,789 704,723 703,722 703,719 702,718 702,715 701,714 701,713 700,712 700,711 699,710 699,709 698,708 698,707 691,700 690,700 688,698 687,698 686,697 684,697 683,696 681,696 680,695" /><polygon fill="black" points="551,695 550,696 547,696 546,697 544,697 543,698 541,698 540,699 539,699 538,700 537,700 535,702 534,702 530,706 529,706 528,707 528,708 524,712 524,713 522,715 522,716 520,718 520,720 519,721 519,722 518,723 518,724 517,725 517,727 516,728 516,732 515,733 515,742 514,743 515,744 515,754 516,755 516,758 517,759 517,762 518,763 518,764 519,765 519,767 521,769 521,770 522,771 522,772 524,774 524,775 531,782 532,782 535,785 536,785 537,786 538,786 539,787 540,787 541,788 542,788 543,789 546,789 547,790 550,790 551,791 570,791 571,790 574,790 575,789 577,789 578,788 580,788 581,787 582,787 584,785 585,785 586,784 587,784 596,775 596,774 598,772 598,771 599,770 598,769 597,769 596,768 595,768 593,766 591,766 590,765 589,765 588,764 587,764 586,763 585,763 584,762 576,770 575,770 573,772 572,772 571,773 569,773 568,774 563,774 562,775 559,775 558,774 554,774 553,773 551,773 550,772 549,772 548,771 547,771 540,764 540,763 538,761 538,760 537,759 537,757 536,756 536,753 535,752 535,749 536,748 537,749 602,749 602,747 603,746 603,737 602,736 602,730 601,729 601,725 600,724 600,722 599,721 599,720 598,719 598,717 596,715 596,714 595,713 595,712 591,708 591,707 589,705 588,705 585,702 584,702 582,700 581,700 580,699 579,699 578,698 576,698 575,697 573,697 572,696 569,696 568,695" /><polygon fill="black" points="405,695 404,696 401,696 400,697 398,697 397,698 396,698 394,700 393,700 389,704 389,705 388,706 387,705 387,697 370,697 370,789 389,789 389,732 390,731 390,728 391,727 391,725 392,724 392,723 398,717 399,717 400,716 402,716 403,715 414,715 415,716 416,716 417,717 418,717 422,721 422,722 423,723 423,724 424,725 424,728 425,729 425,789 445,789 445,729 446,728 446,725 447,724 447,723 453,717 454,717 455,716 456,716 457,715 468,715 469,716 470,716 471,717 472,717 478,723 478,725 479,726 479,727 480,728 480,789 500,789 500,721 499,720 499,717 498,716 498,714 497,713 497,712 496,711 496,710 495,709 495,708 493,706 493,705 489,701 488,701 486,699 485,699 484,698 483,698 482,697 481,697 480,696 477,696 476,695 460,695 459,696 456,696 455,697 454,697 453,698 452,698 451,699 450,699 449,700 448,700 444,704 443,704 443,705 440,708 439,708 438,707 438,706 432,700 431,700 430,699 429,699 428,698 427,698 426,697 425,697 424,696 421,696 420,695" /><polygon fill="black" points="311,695 310,696 307,696 306,697 304,697 303,698 301,698 300,699 299,699 298,700 297,700 295,702 294,702 285,711 285,712 283,714 283,715 281,717 281,718 280,719 280,721 279,722 279,723 278,724 278,726 277,727 277,730 276,731 276,736 275,737 275,753 276,754 276,758 277,759 277,762 278,763 278,765 279,766 279,768 280,769 280,770 281,771 281,772 283,774 283,775 287,779 287,780 288,781 289,781 293,785 294,785 295,786 296,786 297,787 298,787 299,788 300,788 301,789 303,789 304,790 307,790 308,791 328,791 329,790 332,790 333,789 335,789 336,788 337,788 338,787 339,787 340,786 341,786 343,784 344,784 352,776 352,775 354,773 354,772 356,770 355,769 354,769 352,767 351,767 350,766 349,766 348,765 347,765 346,764 345,764 344,763 343,763 342,762 341,762 340,763 340,764 333,771 332,771 330,773 328,773 327,774 325,774 324,775 315,775 314,774 311,774 310,773 309,773 308,772 307,772 306,771 305,771 299,765 299,764 298,763 298,762 297,761 297,760 296,759 296,758 295,757 295,754 294,753 294,749 295,748 358,748 358,731 357,730 357,726 356,725 356,722 355,721 355,719 354,718 354,717 353,716 353,715 352,714 352,713 351,712 351,711 348,708 348,707 345,704 344,704 341,701 340,701 338,699 337,699 336,698 334,698 333,697 331,697 330,696 327,696 326,695" /><polygon fill="black" points="172,695 171,696 169,696 168,697 166,697 165,698 164,698 163,699 162,699 155,706 154,705 154,698 155,697 136,697 136,789 156,789 155,788 155,735 156,734 156,729 157,728 157,726 158,725 158,724 159,723 159,722 165,716 166,716 167,715 169,715 170,714 177,714 178,715 180,715 181,716 182,716 187,721 187,722 188,723 188,725 189,726 189,789 209,789 209,729 210,728 210,726 211,725 211,723 213,721 213,720 216,717 217,717 218,716 219,716 220,715 222,715 223,714 230,714 231,715 233,715 234,716 235,716 241,722 241,723 242,724 242,726 243,727 243,732 244,733 244,789 264,789 264,788 263,787 264,786 264,733 263,732 263,720 262,719 262,716 261,715 261,713 260,712 260,711 259,710 259,709 258,708 258,707 255,704 255,703 253,701 252,701 250,699 249,699 248,698 247,698 246,697 245,697 244,696 242,696 241,695 224,695 223,696 220,696 219,697 218,697 217,698 216,698 215,699 214,699 213,700 212,700 204,708 203,707 203,706 197,700 196,700 195,699 194,699 193,698 192,698 191,697 190,697 189,696 186,696 185,695" /><polygon fill="black" points="734,674 734,696 733,697 720,697 720,715 733,715 734,716 734,767 735,768 735,773 736,774 736,776 737,777 737,779 738,780 738,781 745,788 746,788 747,789 749,789 750,790 752,790 753,791 761,791 762,792 766,792 767,791 774,791 775,790 778,790 778,786 779,785 779,773 780,772 777,772 776,773 773,773 772,774 764,774 763,773 761,773 760,772 759,772 757,770 757,769 756,768 756,767 755,766 755,716 756,715 778,715 778,708 779,707 779,697 755,697 754,696 755,695 755,674" /><polygon fill="black" points="487,194 486,195 476,195 475,196 469,196 468,197 463,197 462,198 458,198 457,199 453,199 452,200 449,200 448,201 445,201 444,202 441,202 440,203 438,203 437,204 435,204 434,205 432,205 431,206 429,206 428,207 426,207 425,208 423,208 422,209 421,209 420,210 418,210 417,211 416,211 415,212 414,212 413,213 411,213 410,214 409,214 408,215 407,215 406,216 405,216 404,217 403,217 402,218 401,218 399,220 398,220 397,221 396,221 395,222 394,222 392,224 391,224 389,226 388,226 386,228 385,228 383,230 382,230 380,232 379,232 376,235 375,235 372,238 371,238 367,242 366,242 357,251 356,251 356,252 346,262 346,263 340,269 328,269 327,270 325,270 324,271 322,271 321,272 320,272 319,273 318,273 316,275 315,275 309,281 309,282 307,284 307,285 306,286 306,287 305,288 305,289 304,290 304,291 303,292 303,295 302,296 302,309 303,310 303,313 304,314 304,316 305,317 305,318 306,319 306,320 307,321 307,322 311,326 311,327 312,328 313,328 315,330 315,332 314,333 314,336 313,337 313,341 312,342 312,346 311,347 311,352 310,353 310,376 311,377 311,381 312,382 312,386 313,387 313,389 314,390 314,392 315,393 315,394 316,395 316,397 317,398 317,399 318,400 318,401 319,402 319,403 320,404 320,405 322,407 322,408 325,411 325,412 329,416 329,417 333,421 334,421 338,425 339,425 341,427 342,427 344,429 345,429 346,430 347,430 349,432 350,432 351,433 352,433 353,434 355,434 356,435 357,435 358,436 360,436 361,437 363,437 364,438 367,438 368,439 372,439 373,440 377,440 378,441 389,441 390,442 394,442 395,441 405,441 406,440 410,440 411,439 413,439 414,438 416,438 417,437 418,437 419,436 420,436 421,435 422,435 424,433 425,433 433,425 433,424 435,422 435,421 436,420 436,419 437,418 437,417 438,416 438,415 439,414 439,411 440,410 440,406 441,405 441,326 442,325 442,323 445,320 446,320 447,319 451,319 452,320 454,320 456,322 457,322 464,329 464,330 466,332 466,333 469,336 469,337 472,340 472,341 475,344 475,345 477,347 477,348 480,351 480,352 483,355 483,356 485,358 485,359 488,362 488,363 490,365 490,366 493,369 493,370 496,373 496,374 498,376 498,377 501,380 501,381 505,385 506,385 507,386 509,386 510,387 511,386 515,386 519,382 519,381 522,378 522,377 525,374 525,373 528,370 528,369 531,366 531,365 533,363 533,362 536,359 536,358 539,355 539,354 541,352 541,351 544,348 544,347 547,344 547,343 549,341 549,340 552,337 552,336 555,333 555,332 558,329 558,328 564,322 565,322 567,320 569,320 570,319 574,319 575,320 576,320 579,323 579,325 580,326 580,413 581,414 581,420 582,421 582,425 583,426 583,428 584,429 584,430 585,431 585,433 586,434 586,435 587,436 587,437 588,438 588,439 590,441 590,442 594,446 593,447 589,447 588,448 583,448 582,449 577,449 576,450 568,450 567,451 556,451 555,452 546,452 545,453 537,453 536,454 531,454 530,455 526,455 525,456 522,456 521,457 518,457 517,458 515,458 514,459 512,459 511,460 510,460 509,461 508,461 507,462 506,462 505,463 504,463 503,464 502,464 500,466 499,466 497,468 496,468 493,471 493,472 491,474 491,475 490,476 490,477 489,478 489,480 488,481 488,488 489,489 489,491 490,492 490,493 493,496 493,497 495,499 496,499 500,503 501,503 502,504 503,504 505,506 506,506 507,507 508,507 510,509 511,509 512,510 513,510 515,512 516,512 518,514 519,514 521,516 522,516 524,518 525,518 528,521 529,521 532,524 533,524 537,528 538,528 549,539 550,539 551,540 551,541 561,551 561,552 566,557 566,558 569,561 569,562 570,563 570,564 564,570 564,571 562,573 562,574 560,576 560,577 559,578 559,579 558,580 558,582 557,583 557,586 556,587 556,600 557,601 557,604 558,605 558,607 559,608 559,609 561,611 561,612 563,614 563,615 566,618 567,618 570,621 571,621 572,622 573,622 574,623 575,623 576,624 578,624 579,625 583,625 584,626 592,626 593,625 597,625 598,624 600,624 601,623 602,623 603,622 604,622 605,621 606,621 609,618 610,618 613,615 613,614 616,611 616,610 617,609 617,608 618,607 618,606 619,605 619,603 620,602 620,597 621,596 621,591 620,590 620,585 619,584 619,582 618,581 618,580 617,579 617,578 616,577 616,576 615,575 615,574 613,572 613,571 606,564 605,564 602,561 603,560 603,544 604,543 604,536 605,535 605,530 606,529 606,524 607,523 607,519 608,518 608,515 609,514 609,511 610,510 610,507 611,506 611,503 612,502 612,500 613,499 613,497 614,496 614,494 615,493 615,491 616,490 616,488 617,487 617,486 618,485 618,483 619,482 619,481 620,480 620,479 621,478 621,477 622,476 622,475 624,473 624,472 627,469 627,468 631,464 632,464 635,461 636,461 637,460 640,460 641,459 642,459 643,458 645,458 646,457 648,457 649,456 650,456 651,455 653,455 654,454 655,454 656,453 657,453 658,452 659,452 660,451 661,451 662,450 663,450 664,449 665,449 667,447 668,447 670,445 671,445 674,442 675,442 680,437 681,437 687,431 687,430 692,425 692,424 695,421 695,420 697,418 697,417 698,416 698,415 700,413 700,412 701,411 701,410 702,409 702,408 703,407 703,406 704,405 704,404 705,403 705,401 706,400 706,399 707,398 707,396 708,395 708,393 709,392 709,389 710,388 710,385 711,384 711,381 712,380 712,375 713,374 713,366 714,365 714,352 713,351 713,341 712,340 712,335 711,334 711,330 710,329 710,326 709,325 709,321 708,320 708,318 707,317 707,315 706,314 706,312 705,311 705,309 704,308 704,306 703,305 703,304 702,303 702,301 701,300 701,299 700,298 700,297 699,296 699,295 698,294 698,293 697,292 697,291 696,290 696,289 694,287 694,286 693,285 693,284 691,282 691,281 690,280 690,279 688,277 688,276 686,274 686,273 683,270 683,269 678,264 678,263 669,254 669,253 668,252 667,252 657,242 656,242 653,239 652,239 649,236 648,236 645,233 644,233 642,231 641,231 639,229 638,229 636,227 635,227 633,225 632,225 631,224 630,224 628,222 627,222 626,221 625,221 624,220 623,220 622,219 621,219 620,218 619,218 618,217 617,217 616,216 615,216 614,215 613,215 612,214 611,214 610,213 608,213 607,212 606,212 605,211 604,211 603,210 601,210 600,209 599,209 598,208 596,208 595,207 593,207 592,206 590,206 589,205 587,205 586,204 584,204 583,203 580,203 579,202 577,202 576,201 573,201 572,200 568,200 567,199 563,199 562,198 558,198 557,197 551,197 550,196 543,196 542,195 534,195 533,194" /></svg>
|