db-mcp 2.0.0 → 3.0.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/README.md +96 -91
- package/dist/.tsbuildinfo +1 -0
- package/dist/adapters/database-adapter.d.ts +173 -0
- package/dist/adapters/database-adapter.d.ts.map +1 -0
- package/dist/adapters/query-validation.d.ts +20 -0
- package/dist/adapters/query-validation.d.ts.map +1 -0
- package/dist/adapters/registration/index.d.ts +4 -0
- package/dist/adapters/registration/index.d.ts.map +1 -0
- package/dist/adapters/registration/prompts.d.ts +7 -0
- package/dist/adapters/registration/prompts.d.ts.map +1 -0
- package/dist/adapters/registration/resources.d.ts +7 -0
- package/dist/adapters/registration/resources.d.ts.map +1 -0
- package/dist/adapters/registration/tools.d.ts +9 -0
- package/dist/adapters/registration/tools.d.ts.map +1 -0
- package/dist/adapters/sqlite/index.d.ts +9 -0
- package/dist/adapters/sqlite/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/json-utils.d.ts +100 -0
- package/dist/adapters/sqlite/json-utils.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts/analysis.d.ts +23 -0
- package/dist/adapters/sqlite/prompts/analysis.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts/index.d.ts +16 -0
- package/dist/adapters/sqlite/prompts/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts/query.d.ts +19 -0
- package/dist/adapters/sqlite/prompts/query.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts/schema.d.ts +20 -0
- package/dist/adapters/sqlite/prompts/schema.d.ts.map +1 -0
- package/dist/adapters/sqlite/query-executor.d.ts +38 -0
- package/dist/adapters/sqlite/query-executor.d.ts.map +1 -0
- package/dist/adapters/sqlite/resources.d.ts +13 -0
- package/dist/adapters/sqlite/resources.d.ts.map +1 -0
- package/dist/adapters/sqlite/schema-manager.d.ts +69 -0
- package/dist/adapters/sqlite/schema-manager.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/admin.d.ts +459 -0
- package/dist/adapters/sqlite/schemas/admin.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/codemode.d.ts +30 -0
- package/dist/adapters/sqlite/schemas/codemode.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/common.d.ts +9 -0
- package/dist/adapters/sqlite/schemas/common.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/core.d.ts +530 -0
- package/dist/adapters/sqlite/schemas/core.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/error-mixin.d.ts +10 -0
- package/dist/adapters/sqlite/schemas/error-mixin.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/fts.d.ts +106 -0
- package/dist/adapters/sqlite/schemas/fts.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/geo.d.ts +135 -0
- package/dist/adapters/sqlite/schemas/geo.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/index.d.ts +23 -0
- package/dist/adapters/sqlite/schemas/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/introspection.d.ts +583 -0
- package/dist/adapters/sqlite/schemas/introspection.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/json.d.ts +849 -0
- package/dist/adapters/sqlite/schemas/json.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/migration.d.ts +220 -0
- package/dist/adapters/sqlite/schemas/migration.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/native.d.ts +235 -0
- package/dist/adapters/sqlite/schemas/native.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/server.d.ts +13 -0
- package/dist/adapters/sqlite/schemas/server.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/spatialite.d.ts +114 -0
- package/dist/adapters/sqlite/schemas/spatialite.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/stats.d.ts +780 -0
- package/dist/adapters/sqlite/schemas/stats.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/text.d.ts +570 -0
- package/dist/adapters/sqlite/schemas/text.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/vector.d.ts +252 -0
- package/dist/adapters/sqlite/schemas/vector.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/virtual.d.ts +257 -0
- package/dist/adapters/sqlite/schemas/virtual.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/where.d.ts +20 -0
- package/dist/adapters/sqlite/schemas/where.d.ts.map +1 -0
- package/dist/adapters/sqlite/sqlite-adapter/lifecycle.d.ts +13 -0
- package/dist/adapters/sqlite/sqlite-adapter/lifecycle.d.ts.map +1 -0
- package/dist/adapters/sqlite/sqlite-adapter/schema.d.ts +7 -0
- package/dist/adapters/sqlite/sqlite-adapter/schema.d.ts.map +1 -0
- package/dist/adapters/sqlite/sqlite-adapter.d.ts +138 -0
- package/dist/adapters/sqlite/sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/analyze.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/analyze.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/create.d.ts +11 -0
- package/dist/adapters/sqlite/tools/admin/backup/create.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/dump.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/dump.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/index.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/integrity.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/integrity.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/optimize.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/optimize.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/restore.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/restore.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/helpers.d.ts +18 -0
- package/dist/adapters/sqlite/tools/admin/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/index.d.ts +10 -0
- package/dist/adapters/sqlite/tools/admin/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/pragma.d.ts +37 -0
- package/dist/adapters/sqlite/tools/admin/pragma.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/reindex.d.ts +10 -0
- package/dist/adapters/sqlite/tools/admin/reindex.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/verify.d.ts +13 -0
- package/dist/adapters/sqlite/tools/admin/verify.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/wal.d.ts +10 -0
- package/dist/adapters/sqlite/tools/admin/wal.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/codemode.d.ts +22 -0
- package/dist/adapters/sqlite/tools/codemode.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/column-validation.d.ts +26 -0
- package/dist/adapters/sqlite/tools/column-validation.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/alter-table.d.ts +11 -0
- package/dist/adapters/sqlite/tools/core/alter-table.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/constraints.d.ts +10 -0
- package/dist/adapters/sqlite/tools/core/constraints.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/convenience-helpers.d.ts +20 -0
- package/dist/adapters/sqlite/tools/core/convenience-helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/convenience-schemas.d.ts +20 -0
- package/dist/adapters/sqlite/tools/core/convenience-schemas.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/convenience.d.ts +29 -0
- package/dist/adapters/sqlite/tools/core/convenience.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/datetime.d.ts +11 -0
- package/dist/adapters/sqlite/tools/core/datetime.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/index.d.ts +14 -0
- package/dist/adapters/sqlite/tools/core/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/indexes.d.ts +20 -0
- package/dist/adapters/sqlite/tools/core/indexes.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/queries.d.ts +16 -0
- package/dist/adapters/sqlite/tools/core/queries.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/tables.d.ts +37 -0
- package/dist/adapters/sqlite/tools/core/tables.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/triggers.d.ts +18 -0
- package/dist/adapters/sqlite/tools/core/triggers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/fts.d.ts +13 -0
- package/dist/adapters/sqlite/tools/fts.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/geo.d.ts +14 -0
- package/dist/adapters/sqlite/tools/geo.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/index.d.ts +33 -0
- package/dist/adapters/sqlite/tools/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/constraints.d.ts +10 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/constraints.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/diff.d.ts +11 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/diff.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/index.d.ts +10 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/risks.d.ts +9 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/risks.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/snapshot.d.ts +40 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/snapshot.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/index.d.ts +9 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/indexes.d.ts +10 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/indexes.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/query-plan.d.ts +10 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/query-plan.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/storage.d.ts +10 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/storage.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/graph/helpers.d.ts +44 -0
- package/dist/adapters/sqlite/tools/introspection/graph/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/graph/index.d.ts +9 -0
- package/dist/adapters/sqlite/tools/introspection/graph/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/graph/tools.d.ts +12 -0
- package/dist/adapters/sqlite/tools/introspection/graph/tools.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/index.d.ts +17 -0
- package/dist/adapters/sqlite/tools/introspection/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers/helpers.d.ts +21 -0
- package/dist/adapters/sqlite/tools/json-helpers/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers/index.d.ts +17 -0
- package/dist/adapters/sqlite/tools/json-helpers/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers/read.d.ts +24 -0
- package/dist/adapters/sqlite/tools/json-helpers/read.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers/write.d.ts +24 -0
- package/dist/adapters/sqlite/tools/json-helpers/write.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/crud.d.ts +39 -0
- package/dist/adapters/sqlite/tools/json-operations/crud.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/diff.d.ts +11 -0
- package/dist/adapters/sqlite/tools/json-operations/diff.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/helpers.d.ts +18 -0
- package/dist/adapters/sqlite/tools/json-operations/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/index.d.ts +10 -0
- package/dist/adapters/sqlite/tools/json-operations/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/query.d.ts +24 -0
- package/dist/adapters/sqlite/tools/json-operations/query.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/security.d.ts +19 -0
- package/dist/adapters/sqlite/tools/json-operations/security.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/transform.d.ts +24 -0
- package/dist/adapters/sqlite/tools/json-operations/transform.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/helpers.d.ts +34 -0
- package/dist/adapters/sqlite/tools/migration/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/index.d.ts +15 -0
- package/dist/adapters/sqlite/tools/migration/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/apply.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/apply.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/history.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/history.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/index.d.ts +7 -0
- package/dist/adapters/sqlite/tools/migration/tracking/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/init.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/init.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/record.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/record.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/rollback.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/rollback.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/status.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/status.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/advanced.d.ts +28 -0
- package/dist/adapters/sqlite/tools/stats/advanced.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/anomaly-detection.d.ts +22 -0
- package/dist/adapters/sqlite/tools/stats/anomaly-detection.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/basic.d.ts +32 -0
- package/dist/adapters/sqlite/tools/stats/basic.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/helpers.d.ts +27 -0
- package/dist/adapters/sqlite/tools/stats/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/index.d.ts +12 -0
- package/dist/adapters/sqlite/tools/stats/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/inference/hypothesis.d.ts +7 -0
- package/dist/adapters/sqlite/tools/stats/inference/hypothesis.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/inference/index.d.ts +4 -0
- package/dist/adapters/sqlite/tools/stats/inference/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/inference/outlier.d.ts +7 -0
- package/dist/adapters/sqlite/tools/stats/inference/outlier.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/inference/regression.d.ts +7 -0
- package/dist/adapters/sqlite/tools/stats/inference/regression.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/math-helpers.d.ts +17 -0
- package/dist/adapters/sqlite/tools/stats/math-helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/schema-risks.d.ts +15 -0
- package/dist/adapters/sqlite/tools/stats/schema-risks.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/formatting.d.ts +48 -0
- package/dist/adapters/sqlite/tools/text/formatting.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/helpers.d.ts +22 -0
- package/dist/adapters/sqlite/tools/text/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/index.d.ts +10 -0
- package/dist/adapters/sqlite/tools/text/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/regex.d.ts +21 -0
- package/dist/adapters/sqlite/tools/text/regex.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/search.d.ts +17 -0
- package/dist/adapters/sqlite/tools/text/search.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/sentiment.d.ts +13 -0
- package/dist/adapters/sqlite/tools/text/sentiment.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/validate.d.ts +11 -0
- package/dist/adapters/sqlite/tools/text/validate.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/helpers.d.ts +11 -0
- package/dist/adapters/sqlite/tools/vector/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/index.d.ts +14 -0
- package/dist/adapters/sqlite/tools/vector/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/metadata.d.ts +28 -0
- package/dist/adapters/sqlite/tools/vector/metadata.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/search.d.ts +16 -0
- package/dist/adapters/sqlite/tools/vector/search.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/storage.d.ts +24 -0
- package/dist/adapters/sqlite/tools/vector/storage.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/tools.d.ts +9 -0
- package/dist/adapters/sqlite/tools/vector/tools.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/analysis.d.ts +24 -0
- package/dist/adapters/sqlite/tools/virtual/analysis.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/extensions.d.ts +13 -0
- package/dist/adapters/sqlite/tools/virtual/extensions.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/helpers.d.ts +18 -0
- package/dist/adapters/sqlite/tools/virtual/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/index.d.ts +10 -0
- package/dist/adapters/sqlite/tools/virtual/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/views.d.ts +21 -0
- package/dist/adapters/sqlite/tools/virtual/views.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/analyze-csv.d.ts +4 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/analyze-csv.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/csv.d.ts +4 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/csv.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/drop.d.ts +4 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/drop.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/index.d.ts +6 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/info.d.ts +4 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/info.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/list.d.ts +4 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/list.d.ts.map +1 -0
- package/dist/adapters/sqlite/types.d.ts +89 -0
- package/dist/adapters/sqlite/types.d.ts.map +1 -0
- package/dist/adapters/sqlite-helpers.d.ts +51 -0
- package/dist/adapters/sqlite-helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/extensions.d.ts +17 -0
- package/dist/adapters/sqlite-native/extensions.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/index.d.ts +11 -0
- package/dist/adapters/sqlite-native/index.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/native-query-executor.d.ts +24 -0
- package/dist/adapters/sqlite-native/native-query-executor.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/native-sqlite-adapter.d.ts +160 -0
- package/dist/adapters/sqlite-native/native-sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/registration/index.d.ts +12 -0
- package/dist/adapters/sqlite-native/registration/index.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite/analysis.d.ts +23 -0
- package/dist/adapters/sqlite-native/tools/spatialite/analysis.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite/index.d.ts +15 -0
- package/dist/adapters/sqlite-native/tools/spatialite/index.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite/loader.d.ts +22 -0
- package/dist/adapters/sqlite-native/tools/spatialite/loader.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite/schemas.d.ts +78 -0
- package/dist/adapters/sqlite-native/tools/spatialite/schemas.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite/tools.d.ts +30 -0
- package/dist/adapters/sqlite-native/tools/spatialite/tools.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts +12 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts +7 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/transaction-methods.d.ts +36 -0
- package/dist/adapters/sqlite-native/transaction-methods.d.ts.map +1 -0
- package/dist/audit/backup-manager.d.ts +90 -0
- package/dist/audit/backup-manager.d.ts.map +1 -0
- package/dist/audit/index.d.ts +11 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/interceptor.d.ts +54 -0
- package/dist/audit/interceptor.d.ts.map +1 -0
- package/dist/audit/logger.d.ts +62 -0
- package/dist/audit/logger.d.ts.map +1 -0
- package/dist/audit/types.d.ts +112 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/auth/auth-context.d.ts +28 -0
- package/dist/auth/auth-context.d.ts.map +1 -0
- package/dist/auth/authorization-server-discovery.d.ts +90 -0
- package/dist/auth/authorization-server-discovery.d.ts.map +1 -0
- package/dist/auth/errors.d.ts +74 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/middleware/core.d.ts +22 -0
- package/dist/auth/middleware/core.d.ts.map +1 -0
- package/dist/auth/middleware/express-auth.d.ts +13 -0
- package/dist/auth/middleware/express-auth.d.ts.map +1 -0
- package/dist/auth/middleware/express-scopes.d.ts +6 -0
- package/dist/auth/middleware/express-scopes.d.ts.map +1 -0
- package/dist/auth/middleware/extraction.d.ts +2 -0
- package/dist/auth/middleware/extraction.d.ts.map +1 -0
- package/dist/auth/middleware/index.d.ts +5 -0
- package/dist/auth/middleware/index.d.ts.map +1 -0
- package/dist/auth/oauth-resource-server.d.ts +74 -0
- package/dist/auth/oauth-resource-server.d.ts.map +1 -0
- package/dist/auth/scope-map.d.ts +24 -0
- package/dist/auth/scope-map.d.ts.map +1 -0
- package/dist/auth/scopes/constants.d.ts +40 -0
- package/dist/auth/scopes/constants.d.ts.map +1 -0
- package/dist/auth/scopes/display.d.ts +5 -0
- package/dist/auth/scopes/display.d.ts.map +1 -0
- package/dist/auth/scopes/enforcement.d.ts +27 -0
- package/dist/auth/scopes/enforcement.d.ts.map +1 -0
- package/dist/auth/scopes/index.d.ts +6 -0
- package/dist/auth/scopes/index.d.ts.map +1 -0
- package/dist/auth/scopes/mapping.d.ts +39 -0
- package/dist/auth/scopes/mapping.d.ts.map +1 -0
- package/dist/auth/scopes/validation.d.ts +27 -0
- package/dist/auth/scopes/validation.d.ts.map +1 -0
- package/dist/auth/token-validator.d.ts +63 -0
- package/dist/auth/token-validator.d.ts.map +1 -0
- package/dist/auth/transport-agnostic.d.ts +11 -0
- package/dist/auth/transport-agnostic.d.ts.map +1 -0
- package/dist/auth/types.d.ts +257 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/{chunk-WBER5YY4.js → chunk-37G4DLL6.js} +1010 -409
- package/dist/chunk-E5IESRTK.js +489 -0
- package/dist/{chunk-645ZEFLA.js → chunk-L552U3QS.js} +887 -309
- package/dist/{chunk-5Y42NPBP.js → chunk-NV34JSQM.js} +4656 -1829
- package/dist/{chunk-Z7C2TM4L.js → chunk-W5WQVNVX.js} +169 -57
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +47 -26
- package/dist/codemode/api-constants.d.ts +40 -0
- package/dist/codemode/api-constants.d.ts.map +1 -0
- package/dist/codemode/api.d.ts +70 -0
- package/dist/codemode/api.d.ts.map +1 -0
- package/dist/codemode/auto-return.d.ts +25 -0
- package/dist/codemode/auto-return.d.ts.map +1 -0
- package/dist/codemode/index.d.ts +12 -0
- package/dist/codemode/index.d.ts.map +1 -0
- package/dist/codemode/sandbox-factory.d.ts +72 -0
- package/dist/codemode/sandbox-factory.d.ts.map +1 -0
- package/dist/codemode/sandbox.d.ts +54 -0
- package/dist/codemode/sandbox.d.ts.map +1 -0
- package/dist/codemode/security.d.ts +45 -0
- package/dist/codemode/security.d.ts.map +1 -0
- package/dist/codemode/types.d.ts +167 -0
- package/dist/codemode/types.d.ts.map +1 -0
- package/dist/constants/server-instructions.d.ts +22 -0
- package/dist/constants/server-instructions.d.ts.map +1 -0
- package/dist/filtering/tool-constants.d.ts +45 -0
- package/dist/filtering/tool-constants.d.ts.map +1 -0
- package/dist/filtering/tool-filter.d.ts +82 -0
- package/dist/filtering/tool-filter.d.ts.map +1 -0
- package/dist/{http-6KF4ULDI.js → http-HWTUVFIA.js} +498 -391
- package/dist/index.d.ts +9 -1065
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -6
- package/dist/server/mcp-server.d.ts +66 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/server/registration/audit-tools.d.ts +13 -0
- package/dist/server/registration/audit-tools.d.ts.map +1 -0
- package/dist/server/registration/built-in-tools.d.ts +8 -0
- package/dist/server/registration/built-in-tools.d.ts.map +1 -0
- package/dist/server/registration/help-resources.d.ts +7 -0
- package/dist/server/registration/help-resources.d.ts.map +1 -0
- package/dist/server/registration/index.d.ts +4 -0
- package/dist/server/registration/index.d.ts.map +1 -0
- package/dist/{sqlite-U5KSYQXK.js → sqlite-TB56Z7G3.js} +61 -17
- package/dist/{sqlite-native-JXMCFQBA.js → sqlite-native-IF75BB3O.js} +459 -254
- package/dist/transports/http/index.d.ts +8 -0
- package/dist/transports/http/index.d.ts.map +1 -0
- package/dist/transports/http/middleware.d.ts +25 -0
- package/dist/transports/http/middleware.d.ts.map +1 -0
- package/dist/transports/http/oauth.d.ts +24 -0
- package/dist/transports/http/oauth.d.ts.map +1 -0
- package/dist/transports/http/session.d.ts +2 -0
- package/dist/transports/http/session.d.ts.map +1 -0
- package/dist/transports/http/sessions/index.d.ts +4 -0
- package/dist/transports/http/sessions/index.d.ts.map +1 -0
- package/dist/transports/http/sessions/legacy-sse.d.ts +6 -0
- package/dist/transports/http/sessions/legacy-sse.d.ts.map +1 -0
- package/dist/transports/http/sessions/mutex.d.ts +6 -0
- package/dist/transports/http/sessions/mutex.d.ts.map +1 -0
- package/dist/transports/http/sessions/stateful.d.ts +12 -0
- package/dist/transports/http/sessions/stateful.d.ts.map +1 -0
- package/dist/transports/http/sessions/stateless.d.ts +6 -0
- package/dist/transports/http/sessions/stateless.d.ts.map +1 -0
- package/dist/transports/http/transport.d.ts +65 -0
- package/dist/transports/http/transport.d.ts.map +1 -0
- package/dist/transports/http/type-adapters.d.ts +20 -0
- package/dist/transports/http/type-adapters.d.ts.map +1 -0
- package/dist/transports/http/types.d.ts +120 -0
- package/dist/transports/http/types.d.ts.map +1 -0
- package/dist/types/adapter.d.ts +138 -0
- package/dist/types/adapter.d.ts.map +1 -0
- package/dist/types/auth.d.ts +79 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/database.d.ts +100 -0
- package/dist/types/database.d.ts.map +1 -0
- package/dist/types/filtering.d.ts +41 -0
- package/dist/types/filtering.d.ts.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/server.d.ts +48 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/utils/annotations.d.ts +62 -0
- package/dist/utils/annotations.d.ts.map +1 -0
- package/dist/utils/errors/base.d.ts +33 -0
- package/dist/utils/errors/base.d.ts.map +1 -0
- package/dist/utils/errors/categories.d.ts +41 -0
- package/dist/utils/errors/categories.d.ts.map +1 -0
- package/dist/utils/errors/classes.d.ts +124 -0
- package/dist/utils/errors/classes.d.ts.map +1 -0
- package/dist/utils/errors/error-response-fields.d.ts +24 -0
- package/dist/utils/errors/error-response-fields.d.ts.map +1 -0
- package/dist/utils/errors/format.d.ts +74 -0
- package/dist/utils/errors/format.d.ts.map +1 -0
- package/dist/utils/errors/index.d.ts +11 -0
- package/dist/utils/errors/index.d.ts.map +1 -0
- package/dist/utils/errors/suggestions.d.ts +16 -0
- package/dist/utils/errors/suggestions.d.ts.map +1 -0
- package/dist/utils/icons.d.ts +19 -0
- package/dist/utils/icons.d.ts.map +1 -0
- package/dist/utils/identifiers.d.ts +121 -0
- package/dist/utils/identifiers.d.ts.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/insights-manager.d.ts +39 -0
- package/dist/utils/insights-manager.d.ts.map +1 -0
- package/dist/utils/logger/error-codes.d.ts +48 -0
- package/dist/utils/logger/error-codes.d.ts.map +1 -0
- package/dist/utils/logger/index.d.ts +22 -0
- package/dist/utils/logger/index.d.ts.map +1 -0
- package/dist/utils/logger/logger.d.ts +94 -0
- package/dist/utils/logger/logger.d.ts.map +1 -0
- package/dist/utils/logger/module-logger.d.ts +28 -0
- package/dist/utils/logger/module-logger.d.ts.map +1 -0
- package/dist/utils/logger/types.d.ts +36 -0
- package/dist/utils/logger/types.d.ts.map +1 -0
- package/dist/utils/progress-utils.d.ts +54 -0
- package/dist/utils/progress-utils.d.ts.map +1 -0
- package/dist/utils/redaction.d.ts +4 -0
- package/dist/utils/redaction.d.ts.map +1 -0
- package/dist/utils/resource-annotations.d.ts +36 -0
- package/dist/utils/resource-annotations.d.ts.map +1 -0
- package/dist/utils/validate-json-path.d.ts +43 -0
- package/dist/utils/validate-json-path.d.ts.map +1 -0
- package/dist/utils/validate-path.d.ts +37 -0
- package/dist/utils/validate-path.d.ts.map +1 -0
- package/dist/utils/where-clause.d.ts +42 -0
- package/dist/utils/where-clause.d.ts.map +1 -0
- package/dist/version.d.ts +10 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +26 -13
- package/.gitattributes +0 -2
- package/.gitleaks.toml +0 -9
- package/.trivyignore +0 -8
- package/dist/chunk-OKOVZ5QE.js +0 -28
- package/dist/chunk-SFJQCNG7.js +0 -131
- package/dist/chunk-VIDSICEL.js +0 -85
- package/dist/chunk-X3MUUOWM.js +0 -152
- package/dist/worker-script.d.ts +0 -2
- package/dist/worker-script.js +0 -150
- package/logs/.gitkeep +0 -1
- package/mcp-config-example.json +0 -83
- package/playwright.config.ts +0 -101
- package/scripts/generate-server-instructions.ts +0 -111
- package/scripts/update-badges.ts +0 -99
- package/server.json +0 -54
- package/test-server/README.md +0 -115
- package/test-server/code-map.md +0 -421
- package/test-server/fixtures/sample.csv +0 -6
- package/test-server/reset-database.ps1 +0 -415
- package/test-server/sample.csv +0 -11
- package/test-server/scripts/README.md +0 -27
- package/test-server/scripts/test-help-resources.mjs +0 -245
- package/test-server/scripts/test-prompts.mjs +0 -251
- package/test-server/scripts/test-tool-annotations.mjs +0 -162
- package/test-server/test-advanced/README.md +0 -70
- package/test-server/test-advanced/test-codemode-advanced-admin.md +0 -174
- package/test-server/test-advanced/test-codemode-advanced-core.md +0 -193
- package/test-server/test-advanced/test-codemode-advanced-geo.md +0 -157
- package/test-server/test-advanced/test-codemode-advanced-introspection.md +0 -171
- package/test-server/test-advanced/test-codemode-advanced-json.md +0 -169
- package/test-server/test-advanced/test-codemode-advanced-migration.md +0 -160
- package/test-server/test-advanced/test-codemode-advanced-stats.md +0 -185
- package/test-server/test-advanced/test-codemode-advanced-text.md +0 -183
- package/test-server/test-advanced/test-codemode-advanced-transactions.md +0 -136
- package/test-server/test-advanced/test-codemode-advanced-vector.md +0 -141
- package/test-server/test-codemode/README.md +0 -121
- package/test-server/test-codemode/test-codemode-admin.md +0 -223
- package/test-server/test-codemode/test-codemode-core.md +0 -286
- package/test-server/test-codemode/test-codemode-geo.md +0 -177
- package/test-server/test-codemode/test-codemode-introspection.md +0 -190
- package/test-server/test-codemode/test-codemode-json.md +0 -237
- package/test-server/test-codemode/test-codemode-migration.md +0 -278
- package/test-server/test-codemode/test-codemode-sandbox.md +0 -413
- package/test-server/test-codemode/test-codemode-stats.md +0 -232
- package/test-server/test-codemode/test-codemode-text.md +0 -237
- package/test-server/test-codemode/test-codemode-transactions.md +0 -236
- package/test-server/test-codemode/test-codemode-vector.md +0 -244
- package/test-server/test-codemode/test-codemode-wasm-degradation.md +0 -394
- package/test-server/test-database.sql +0 -424
- package/test-server/test-preflight.md +0 -53
- package/test-server/test-prompts.md +0 -354
- package/test-server/test-resources.md +0 -272
- package/test-server/test-tool-groups/README.md +0 -100
- package/test-server/test-tool-groups/test-admin-core.md +0 -165
- package/test-server/test-tool-groups/test-admin-extensions.md +0 -133
- package/test-server/test-tool-groups/test-core-data.md +0 -262
- package/test-server/test-tool-groups/test-core-schema.md +0 -240
- package/test-server/test-tool-groups/test-geo-haversine.md +0 -130
- package/test-server/test-tool-groups/test-geo-spatialite.md +0 -110
- package/test-server/test-tool-groups/test-introspection-diagnostics.md +0 -123
- package/test-server/test-tool-groups/test-introspection-schema.md +0 -133
- package/test-server/test-tool-groups/test-json-read.md +0 -219
- package/test-server/test-tool-groups/test-json-write.md +0 -157
- package/test-server/test-tool-groups/test-migration.md +0 -193
- package/test-server/test-tool-groups/test-stats-advanced.md +0 -118
- package/test-server/test-tool-groups/test-stats-basic.md +0 -156
- package/test-server/test-tool-groups/test-text-advanced.md +0 -169
- package/test-server/test-tool-groups/test-text-basic.md +0 -177
- package/test-server/test-tool-groups/test-transactions.md +0 -179
- package/test-server/test-tool-groups/test-vector-read.md +0 -130
- package/test-server/test-tool-groups/test-vector-write.md +0 -115
- package/test-server/tool-reference.md +0 -257
- package/tsconfig.build.json +0 -6
- package/tsconfig.test.json +0 -9
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'async_hooks';
|
|
2
|
+
|
|
1
3
|
// src/filtering/tool-constants.ts
|
|
2
4
|
var ALL_TOOL_GROUPS = [
|
|
3
5
|
"core",
|
|
@@ -27,7 +29,14 @@ var TOOL_GROUPS = {
|
|
|
27
29
|
"batch_insert",
|
|
28
30
|
"count",
|
|
29
31
|
"exists",
|
|
30
|
-
"truncate"
|
|
32
|
+
"truncate",
|
|
33
|
+
"list_triggers",
|
|
34
|
+
"create_trigger",
|
|
35
|
+
"drop_trigger",
|
|
36
|
+
"list_constraints",
|
|
37
|
+
"date_add",
|
|
38
|
+
"date_diff",
|
|
39
|
+
"alter_table"
|
|
31
40
|
],
|
|
32
41
|
json: [
|
|
33
42
|
// CRUD + Query + Collection (8: crud.ts, query.ts, write.ts)
|
|
@@ -57,7 +66,9 @@ var TOOL_GROUPS = {
|
|
|
57
66
|
"json_storage_info",
|
|
58
67
|
"json_normalize_column",
|
|
59
68
|
// Security (1: security.ts)
|
|
60
|
-
"json_security_scan"
|
|
69
|
+
"json_security_scan",
|
|
70
|
+
// Diff (1: diff.ts)
|
|
71
|
+
"json_diff"
|
|
61
72
|
],
|
|
62
73
|
text: [
|
|
63
74
|
// Text Tools (14 WASM)
|
|
@@ -107,7 +118,9 @@ var TOOL_GROUPS = {
|
|
|
107
118
|
"window_lag_lead",
|
|
108
119
|
"window_running_total",
|
|
109
120
|
"window_moving_avg",
|
|
110
|
-
"window_ntile"
|
|
121
|
+
"window_ntile",
|
|
122
|
+
// Sampling (1 WASM)
|
|
123
|
+
"stats_sample"
|
|
111
124
|
],
|
|
112
125
|
vector: [
|
|
113
126
|
"vector_create_table",
|
|
@@ -123,7 +136,7 @@ var TOOL_GROUPS = {
|
|
|
123
136
|
"vector_distance"
|
|
124
137
|
],
|
|
125
138
|
admin: [
|
|
126
|
-
// Admin Tools (
|
|
139
|
+
// Admin Tools (15: backup.ts, verify.ts, pragma.ts, reindex.ts, wal.ts)
|
|
127
140
|
"backup",
|
|
128
141
|
"analyze",
|
|
129
142
|
"integrity_check",
|
|
@@ -150,7 +163,14 @@ var TOOL_GROUPS = {
|
|
|
150
163
|
"create_csv_table",
|
|
151
164
|
"analyze_csv_schema",
|
|
152
165
|
"create_rtree_table",
|
|
153
|
-
"create_series_table"
|
|
166
|
+
"create_series_table",
|
|
167
|
+
// Database management (5: pragma.ts, backup/create.ts, reindex.ts, wal.ts)
|
|
168
|
+
"attach_database",
|
|
169
|
+
"detach_database",
|
|
170
|
+
"vacuum_into",
|
|
171
|
+
"dump",
|
|
172
|
+
"reindex",
|
|
173
|
+
"wal"
|
|
154
174
|
],
|
|
155
175
|
transactions: [
|
|
156
176
|
// Transaction Tools (8 Native-only)
|
|
@@ -181,8 +201,9 @@ var TOOL_GROUPS = {
|
|
|
181
201
|
"dependency_graph",
|
|
182
202
|
"topological_sort",
|
|
183
203
|
"cascade_simulator",
|
|
184
|
-
// Schema Analysis (
|
|
204
|
+
// Schema Analysis (4 from introspection/analysis.ts)
|
|
185
205
|
"schema_snapshot",
|
|
206
|
+
"schema_diff",
|
|
186
207
|
"constraint_analysis",
|
|
187
208
|
"migration_risks",
|
|
188
209
|
// Diagnostics (3 from introspection/diagnostics.ts)
|
|
@@ -202,19 +223,19 @@ var TOOL_GROUPS = {
|
|
|
202
223
|
codemode: ["execute_code"]
|
|
203
224
|
};
|
|
204
225
|
var META_GROUPS = {
|
|
205
|
-
// General development - Core + JSON + Text
|
|
226
|
+
// General development - Core + JSON + Text (60 WASM / 65 Native)
|
|
206
227
|
starter: ["core", "json", "text", "codemode"],
|
|
207
|
-
// Data analysis - Core + JSON + Stats
|
|
228
|
+
// Data analysis - Core + JSON + Stats (63 WASM / 69 Native)
|
|
208
229
|
analytics: ["core", "json", "stats", "codemode"],
|
|
209
|
-
// Search workloads - Core + Text + Vector
|
|
230
|
+
// Search workloads - Core + Text + Vector (46 WASM / 51 Native)
|
|
210
231
|
search: ["core", "text", "vector", "codemode"],
|
|
211
|
-
// Geospatial workloads - Core + Geo + Vector
|
|
232
|
+
// Geospatial workloads - Core + Geo + Vector (36 WASM / 43 Native)
|
|
212
233
|
spatial: ["core", "geo", "vector", "codemode"],
|
|
213
|
-
// Schema development - Core + Introspection + Migration
|
|
234
|
+
// Schema development - Core + Introspection + Migration (37 tools)
|
|
214
235
|
"dev-schema": ["core", "introspection", "migration", "codemode"],
|
|
215
|
-
// Bare minimum - Core
|
|
236
|
+
// Bare minimum - Core (21 tools)
|
|
216
237
|
minimal: ["core", "codemode"],
|
|
217
|
-
// All tools enabled (
|
|
238
|
+
// All group tools enabled (166 Native / 139 WASM — see TOOL COUNT TAXONOMY above)
|
|
218
239
|
full: [
|
|
219
240
|
"core",
|
|
220
241
|
"json",
|
|
@@ -335,14 +356,6 @@ function parseToolFilter(filterString) {
|
|
|
335
356
|
}
|
|
336
357
|
}
|
|
337
358
|
}
|
|
338
|
-
if (!startsWithExclude && enabledGroups.size > 0) {
|
|
339
|
-
const codemodeExplicitlyExcluded = parts.some(
|
|
340
|
-
(p) => p === "-codemode" || p === "-sqlite_execute_code"
|
|
341
|
-
);
|
|
342
|
-
if (!codemodeExplicitlyExcluded) {
|
|
343
|
-
enabledGroups.add("codemode");
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
359
|
return {
|
|
347
360
|
raw: filterString,
|
|
348
361
|
rules,
|
|
@@ -362,6 +375,14 @@ function isToolEnabled(tool, config) {
|
|
|
362
375
|
if (config.includedTools.has(tool.name) || config.includedTools.has(baseName)) {
|
|
363
376
|
return true;
|
|
364
377
|
}
|
|
378
|
+
if (tool.group === "codemode") {
|
|
379
|
+
const explicitlyExcludedGroup = config.rules.some(
|
|
380
|
+
(r) => r.type === "exclude" && r.target === "codemode"
|
|
381
|
+
);
|
|
382
|
+
if (!explicitlyExcludedGroup) {
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
365
386
|
return config.enabledGroups.has(tool.group);
|
|
366
387
|
}
|
|
367
388
|
function filterTools(tools, config) {
|
|
@@ -397,296 +418,40 @@ function getFilterSummary(config) {
|
|
|
397
418
|
return lines.join("\n");
|
|
398
419
|
}
|
|
399
420
|
|
|
400
|
-
// src/utils/
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
pattern: /json path must start with \$/i,
|
|
420
|
-
suggestion: "JSON paths use $ as the root. Example: $.name, $.items[0], $.nested.property",
|
|
421
|
-
category: "validation" /* VALIDATION */
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
pattern: /vector dimensions must match/i,
|
|
425
|
-
suggestion: "All vectors in comparison must have the same number of dimensions.",
|
|
426
|
-
category: "validation" /* VALIDATION */
|
|
427
|
-
},
|
|
428
|
-
{
|
|
429
|
-
pattern: /insufficient data/i,
|
|
430
|
-
suggestion: "Not enough data points for the requested analysis. Add more data or reduce the degree.",
|
|
431
|
-
category: "validation" /* VALIDATION */
|
|
432
|
-
},
|
|
433
|
-
// Resource errors — specific codes for table/column not found
|
|
434
|
-
{
|
|
435
|
-
pattern: /no such table[:\s]*(['"]?)(\w+)\1/i,
|
|
436
|
-
suggestion: "Table not found. Run sqlite_list_tables to see available tables.",
|
|
437
|
-
category: "resource" /* RESOURCE */,
|
|
438
|
-
code: "TABLE_NOT_FOUND"
|
|
439
|
-
},
|
|
440
|
-
{
|
|
441
|
-
pattern: /no such column[:\s]*(['"]?)(\w+)\1/i,
|
|
442
|
-
suggestion: "Column not found. Use sqlite_describe_table to see available columns.",
|
|
443
|
-
category: "resource" /* RESOURCE */,
|
|
444
|
-
code: "COLUMN_NOT_FOUND"
|
|
445
|
-
},
|
|
446
|
-
{
|
|
447
|
-
pattern: /has no column named/i,
|
|
448
|
-
suggestion: "Column not found in target table. Use sqlite_describe_table to verify column names before INSERT or UPDATE.",
|
|
449
|
-
category: "resource" /* RESOURCE */,
|
|
450
|
-
code: "COLUMN_NOT_FOUND"
|
|
451
|
-
},
|
|
452
|
-
{
|
|
453
|
-
pattern: /no such view[:\s]*(['"]?)(\w+)\1/i,
|
|
454
|
-
suggestion: "View not found. Run sqlite_list_views to see available views.",
|
|
455
|
-
category: "resource" /* RESOURCE */,
|
|
456
|
-
code: "VIEW_NOT_FOUND"
|
|
457
|
-
},
|
|
458
|
-
{
|
|
459
|
-
pattern: /filename.*does not exist/i,
|
|
460
|
-
suggestion: "File not found. Verify the absolute path exists and is readable.",
|
|
461
|
-
category: "resource" /* RESOURCE */,
|
|
462
|
-
code: "FILE_NOT_FOUND"
|
|
463
|
-
},
|
|
464
|
-
{
|
|
465
|
-
pattern: /table .* already exists/i,
|
|
466
|
-
suggestion: "Table already exists. Use CREATE TABLE IF NOT EXISTS or drop the existing table first.",
|
|
467
|
-
category: "resource" /* RESOURCE */,
|
|
468
|
-
code: "TABLE_ALREADY_EXISTS"
|
|
469
|
-
},
|
|
470
|
-
{
|
|
471
|
-
pattern: /index .* already exists/i,
|
|
472
|
-
suggestion: "Index already exists. Use CREATE INDEX IF NOT EXISTS or drop the existing index first.",
|
|
473
|
-
category: "resource" /* RESOURCE */,
|
|
474
|
-
code: "INDEX_ALREADY_EXISTS"
|
|
475
|
-
},
|
|
476
|
-
// JSON-specific errors — often caused by wrong column name
|
|
477
|
-
{
|
|
478
|
-
pattern: /malformed JSON/i,
|
|
479
|
-
suggestion: "The JSON data is malformed. This commonly occurs when the column name is incorrect \u2014 SQLite treats the unresolved identifier as a literal string. Verify the column exists with sqlite_describe_table.",
|
|
480
|
-
category: "query" /* QUERY */,
|
|
481
|
-
code: "MALFORMED_JSON"
|
|
482
|
-
},
|
|
483
|
-
// Query errors
|
|
484
|
-
{
|
|
485
|
-
pattern: /syntax error/i,
|
|
486
|
-
suggestion: "Check SQL syntax. Common issues: missing quotes, commas, parentheses, or reserved word conflicts.",
|
|
487
|
-
category: "query" /* QUERY */
|
|
488
|
-
},
|
|
489
|
-
{
|
|
490
|
-
pattern: /UNIQUE constraint failed/i,
|
|
491
|
-
suggestion: "A row with this value already exists. Use UPDATE to modify existing data or check for duplicates.",
|
|
492
|
-
category: "query" /* QUERY */,
|
|
493
|
-
code: "CONSTRAINT_VIOLATION"
|
|
494
|
-
},
|
|
495
|
-
{
|
|
496
|
-
pattern: /FOREIGN KEY constraint failed/i,
|
|
497
|
-
suggestion: "The referenced row does not exist. Ensure the parent record exists before inserting.",
|
|
498
|
-
category: "query" /* QUERY */,
|
|
499
|
-
code: "CONSTRAINT_VIOLATION"
|
|
500
|
-
},
|
|
501
|
-
{
|
|
502
|
-
pattern: /NOT NULL constraint failed/i,
|
|
503
|
-
suggestion: "A required column is missing a value. Provide a value or set a default.",
|
|
504
|
-
category: "query" /* QUERY */,
|
|
505
|
-
code: "CONSTRAINT_VIOLATION"
|
|
506
|
-
},
|
|
507
|
-
{
|
|
508
|
-
pattern: /CHECK constraint failed/i,
|
|
509
|
-
suggestion: "The value does not meet the column's check constraint requirements.",
|
|
510
|
-
category: "query" /* QUERY */,
|
|
511
|
-
code: "CONSTRAINT_VIOLATION"
|
|
512
|
-
},
|
|
513
|
-
{
|
|
514
|
-
pattern: /incomplete input/i,
|
|
515
|
-
suggestion: "SQL statement is incomplete. Check for missing clauses, closing parentheses, or semicolons.",
|
|
516
|
-
category: "query" /* QUERY */
|
|
517
|
-
},
|
|
518
|
-
{
|
|
519
|
-
pattern: /more than one statement/i,
|
|
520
|
-
suggestion: "Only one SQL statement per call is allowed. Split multiple statements into separate calls or use sqlite_execute_code for multi-step operations.",
|
|
521
|
-
category: "query" /* QUERY */
|
|
522
|
-
},
|
|
523
|
-
{
|
|
524
|
-
pattern: /too few parameter/i,
|
|
525
|
-
suggestion: "Not enough parameter values provided for the prepared statement placeholders (?). Ensure params array matches the number of ? placeholders in the query.",
|
|
526
|
-
category: "query" /* QUERY */
|
|
527
|
-
},
|
|
528
|
-
// Connection errors
|
|
529
|
-
{
|
|
530
|
-
pattern: /not connected/i,
|
|
531
|
-
suggestion: "Database connection not established. Ensure the database is configured and connected.",
|
|
532
|
-
category: "connection" /* CONNECTION */
|
|
533
|
-
},
|
|
534
|
-
{
|
|
535
|
-
pattern: /cannot start a transaction within a transaction/i,
|
|
536
|
-
suggestion: "A transaction is already active. Commit or rollback the current transaction first, or use sqlite_transaction_execute for atomic multi-statement operations.",
|
|
537
|
-
category: "query" /* QUERY */,
|
|
538
|
-
code: "TRANSACTION_CONFLICT"
|
|
539
|
-
},
|
|
540
|
-
{
|
|
541
|
-
pattern: /no transaction is active/i,
|
|
542
|
-
suggestion: "No transaction is active. Start a transaction using sqlite_transaction_begin first.",
|
|
543
|
-
category: "query" /* QUERY */,
|
|
544
|
-
code: "TRANSACTION_NOT_ACTIVE"
|
|
545
|
-
},
|
|
546
|
-
{
|
|
547
|
-
pattern: /no such savepoint/i,
|
|
548
|
-
suggestion: "The specified savepoint does not exist. Verify the savepoint name and ensure it hasn't already been released or rolled back.",
|
|
549
|
-
category: "query" /* QUERY */,
|
|
550
|
-
code: "SAVEPOINT_NOT_FOUND"
|
|
551
|
-
},
|
|
552
|
-
{
|
|
553
|
-
pattern: /database is locked/i,
|
|
554
|
-
suggestion: "Database is being used by another process. Wait and retry, or check for long-running transactions.",
|
|
555
|
-
category: "connection" /* CONNECTION */
|
|
556
|
-
},
|
|
557
|
-
// Permission errors
|
|
558
|
-
{
|
|
559
|
-
pattern: /readonly database/i,
|
|
560
|
-
suggestion: "Database is in read-only mode. Check file permissions or connection settings.",
|
|
561
|
-
category: "permission" /* PERMISSION */
|
|
562
|
-
},
|
|
563
|
-
{
|
|
564
|
-
pattern: /attempt to write a readonly/i,
|
|
565
|
-
suggestion: "Write operations are not allowed. Check database configuration.",
|
|
566
|
-
category: "permission" /* PERMISSION */
|
|
567
|
-
},
|
|
568
|
-
// Codemode errors
|
|
569
|
-
{
|
|
570
|
-
pattern: /code validation failed/i,
|
|
571
|
-
suggestion: "Check for blocked patterns: require(), process., eval(), Function(), import(). Use sqlite.* API instead.",
|
|
572
|
-
category: "validation" /* VALIDATION */
|
|
573
|
-
},
|
|
574
|
-
{
|
|
575
|
-
pattern: /rate limit exceeded/i,
|
|
576
|
-
suggestion: "Wait before retrying. Combine multiple operations into fewer execute_code calls.",
|
|
577
|
-
category: "permission" /* PERMISSION */
|
|
578
|
-
},
|
|
579
|
-
{
|
|
580
|
-
pattern: /execution timed out/i,
|
|
581
|
-
suggestion: "Reduce code complexity or increase timeout (max 30s). Break into smaller operations.",
|
|
582
|
-
category: "query" /* QUERY */
|
|
421
|
+
// src/utils/logger/error-codes.ts
|
|
422
|
+
function createErrorCode(module, code) {
|
|
423
|
+
return {
|
|
424
|
+
module: module.toUpperCase(),
|
|
425
|
+
code: code.toUpperCase(),
|
|
426
|
+
full: `${module.toUpperCase()}_${code.toUpperCase()}`
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
var ERROR_CODES = {
|
|
430
|
+
// Auth module
|
|
431
|
+
AUTH: {
|
|
432
|
+
TOKEN_INVALID: createErrorCode("AUTH", "TOKEN_INVALID"),
|
|
433
|
+
TOKEN_EXPIRED: createErrorCode("AUTH", "TOKEN_EXPIRED"),
|
|
434
|
+
TOKEN_MISSING: createErrorCode("AUTH", "TOKEN_MISSING"),
|
|
435
|
+
SIGNATURE_INVALID: createErrorCode("AUTH", "SIGNATURE_INVALID"),
|
|
436
|
+
SCOPE_DENIED: createErrorCode("AUTH", "SCOPE_DENIED"),
|
|
437
|
+
DISCOVERY_FAILED: createErrorCode("AUTH", "DISCOVERY_FAILED"),
|
|
438
|
+
JWKS_FETCH_FAILED: createErrorCode("AUTH", "JWKS_FETCH_FAILED"),
|
|
439
|
+
REGISTRATION_FAILED: createErrorCode("AUTH", "REGISTRATION_FAILED")
|
|
583
440
|
},
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
441
|
+
// Server module
|
|
442
|
+
SERVER: {
|
|
443
|
+
START_FAILED: createErrorCode("SERVER", "START_FAILED"),
|
|
444
|
+
SHUTDOWN_FAILED: createErrorCode("SERVER", "SHUTDOWN_FAILED"),
|
|
445
|
+
TRANSPORT_ERROR: createErrorCode("SERVER", "TRANSPORT_ERROR")
|
|
588
446
|
},
|
|
589
|
-
//
|
|
590
|
-
{
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
}
|
|
596
|
-
];
|
|
597
|
-
function findSuggestion(message) {
|
|
598
|
-
for (const entry of ERROR_SUGGESTIONS) {
|
|
599
|
-
if (entry.pattern.test(message)) {
|
|
600
|
-
return {
|
|
601
|
-
suggestion: entry.suggestion,
|
|
602
|
-
category: entry.category,
|
|
603
|
-
code: entry.code
|
|
604
|
-
};
|
|
605
|
-
}
|
|
447
|
+
// Database module
|
|
448
|
+
DB: {
|
|
449
|
+
CONNECT_FAILED: createErrorCode("DB", "CONNECT_FAILED"),
|
|
450
|
+
QUERY_FAILED: createErrorCode("DB", "QUERY_FAILED"),
|
|
451
|
+
DISCONNECT_FAILED: createErrorCode("DB", "DISCONNECT_FAILED"),
|
|
452
|
+
ADAPTER_NOT_FOUND: createErrorCode("DB", "ADAPTER_NOT_FOUND")
|
|
606
453
|
}
|
|
607
|
-
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
// src/utils/errors/base.ts
|
|
611
|
-
var REFINABLE_CODES = /* @__PURE__ */ new Set([
|
|
612
|
-
"DB_QUERY_FAILED",
|
|
613
|
-
"DB_WRITE_FAILED",
|
|
614
|
-
"QUERY_ERROR",
|
|
615
|
-
"RESOURCE_ERROR",
|
|
616
|
-
"UNKNOWN_ERROR"
|
|
617
|
-
]);
|
|
618
|
-
var DbMcpError = class extends Error {
|
|
619
|
-
/** Error category for classification */
|
|
620
|
-
category;
|
|
621
|
-
/** Module-prefixed error code (e.g., DB_QUERY_FAILED) */
|
|
622
|
-
code;
|
|
623
|
-
/** Actionable suggestion for resolving the error */
|
|
624
|
-
suggestion;
|
|
625
|
-
/** Additional error details */
|
|
626
|
-
details;
|
|
627
|
-
/** Whether the error is recoverable (can retry) */
|
|
628
|
-
recoverable;
|
|
629
|
-
constructor(message, code, category, options) {
|
|
630
|
-
super(message, { cause: options?.cause });
|
|
631
|
-
this.name = this.constructor.name;
|
|
632
|
-
this.category = category;
|
|
633
|
-
this.recoverable = options?.recoverable ?? false;
|
|
634
|
-
this.details = options?.details;
|
|
635
|
-
const match = findSuggestion(message);
|
|
636
|
-
this.suggestion = options?.suggestion ?? match?.suggestion;
|
|
637
|
-
this.code = match?.code && REFINABLE_CODES.has(code) ? match.code : code;
|
|
638
|
-
Error.captureStackTrace?.(this, this.constructor);
|
|
639
|
-
}
|
|
640
|
-
/**
|
|
641
|
-
* Convert to structured response object
|
|
642
|
-
*/
|
|
643
|
-
toResponse() {
|
|
644
|
-
return {
|
|
645
|
-
success: false,
|
|
646
|
-
error: this.message,
|
|
647
|
-
code: this.code,
|
|
648
|
-
category: this.category,
|
|
649
|
-
suggestion: this.suggestion,
|
|
650
|
-
recoverable: this.recoverable,
|
|
651
|
-
details: this.details
|
|
652
|
-
};
|
|
653
|
-
}
|
|
654
|
-
};
|
|
655
|
-
|
|
656
|
-
// src/utils/logger/error-codes.ts
|
|
657
|
-
function createErrorCode(module, code) {
|
|
658
|
-
return {
|
|
659
|
-
module: module.toUpperCase(),
|
|
660
|
-
code: code.toUpperCase(),
|
|
661
|
-
full: `${module.toUpperCase()}_${code.toUpperCase()}`
|
|
662
|
-
};
|
|
663
|
-
}
|
|
664
|
-
var ERROR_CODES = {
|
|
665
|
-
// Auth module
|
|
666
|
-
AUTH: {
|
|
667
|
-
TOKEN_INVALID: createErrorCode("AUTH", "TOKEN_INVALID"),
|
|
668
|
-
TOKEN_EXPIRED: createErrorCode("AUTH", "TOKEN_EXPIRED"),
|
|
669
|
-
TOKEN_MISSING: createErrorCode("AUTH", "TOKEN_MISSING"),
|
|
670
|
-
SIGNATURE_INVALID: createErrorCode("AUTH", "SIGNATURE_INVALID"),
|
|
671
|
-
SCOPE_DENIED: createErrorCode("AUTH", "SCOPE_DENIED"),
|
|
672
|
-
DISCOVERY_FAILED: createErrorCode("AUTH", "DISCOVERY_FAILED"),
|
|
673
|
-
JWKS_FETCH_FAILED: createErrorCode("AUTH", "JWKS_FETCH_FAILED"),
|
|
674
|
-
REGISTRATION_FAILED: createErrorCode("AUTH", "REGISTRATION_FAILED")
|
|
675
|
-
},
|
|
676
|
-
// Server module
|
|
677
|
-
SERVER: {
|
|
678
|
-
START_FAILED: createErrorCode("SERVER", "START_FAILED"),
|
|
679
|
-
SHUTDOWN_FAILED: createErrorCode("SERVER", "SHUTDOWN_FAILED"),
|
|
680
|
-
TRANSPORT_ERROR: createErrorCode("SERVER", "TRANSPORT_ERROR")
|
|
681
|
-
},
|
|
682
|
-
// Database module
|
|
683
|
-
DB: {
|
|
684
|
-
CONNECT_FAILED: createErrorCode("DB", "CONNECT_FAILED"),
|
|
685
|
-
QUERY_FAILED: createErrorCode("DB", "QUERY_FAILED"),
|
|
686
|
-
DISCONNECT_FAILED: createErrorCode("DB", "DISCONNECT_FAILED"),
|
|
687
|
-
ADAPTER_NOT_FOUND: createErrorCode("DB", "ADAPTER_NOT_FOUND")
|
|
688
|
-
}
|
|
689
|
-
};
|
|
454
|
+
};
|
|
690
455
|
|
|
691
456
|
// src/utils/logger/module-logger.ts
|
|
692
457
|
var ModuleLogger = class {
|
|
@@ -977,4 +742,817 @@ if (envLevel && envLevel in LEVEL_PRIORITY_CHECK) {
|
|
|
977
742
|
logger.setLevel(envLevel);
|
|
978
743
|
}
|
|
979
744
|
|
|
980
|
-
|
|
745
|
+
// src/utils/errors/suggestions.ts
|
|
746
|
+
var ERROR_SUGGESTIONS = [
|
|
747
|
+
// Validation errors
|
|
748
|
+
{
|
|
749
|
+
pattern: /invalid table name/i,
|
|
750
|
+
suggestion: "Table names must start with a letter or underscore, followed by letters, numbers, or underscores only.",
|
|
751
|
+
category: "validation" /* VALIDATION */
|
|
752
|
+
},
|
|
753
|
+
{
|
|
754
|
+
pattern: /invalid column name/i,
|
|
755
|
+
suggestion: "Column names must start with a letter or underscore, followed by letters, numbers, or underscores only.",
|
|
756
|
+
category: "validation" /* VALIDATION */
|
|
757
|
+
},
|
|
758
|
+
{
|
|
759
|
+
pattern: /invalid (view|index) name/i,
|
|
760
|
+
suggestion: "Names must start with a letter or underscore, followed by alphanumeric characters only.",
|
|
761
|
+
category: "validation" /* VALIDATION */
|
|
762
|
+
},
|
|
763
|
+
{
|
|
764
|
+
pattern: /json path must start with \$/i,
|
|
765
|
+
suggestion: "JSON paths use $ as the root. Example: $.name, $.items[0], $.nested.property",
|
|
766
|
+
category: "validation" /* VALIDATION */
|
|
767
|
+
},
|
|
768
|
+
{
|
|
769
|
+
pattern: /vector dimensions must match/i,
|
|
770
|
+
suggestion: "All vectors in comparison must have the same number of dimensions.",
|
|
771
|
+
category: "validation" /* VALIDATION */
|
|
772
|
+
},
|
|
773
|
+
{
|
|
774
|
+
pattern: /insufficient data/i,
|
|
775
|
+
suggestion: "Not enough data points for the requested analysis. Add more data or reduce the degree.",
|
|
776
|
+
category: "validation" /* VALIDATION */
|
|
777
|
+
},
|
|
778
|
+
// Resource errors — specific codes for table/column not found
|
|
779
|
+
{
|
|
780
|
+
pattern: /no such table[:\s]*(['"]?)([\w.]+)\1/i,
|
|
781
|
+
suggestion: "Table not found. Run sqlite_list_tables to see available tables.",
|
|
782
|
+
category: "resource" /* RESOURCE */,
|
|
783
|
+
code: "TABLE_NOT_FOUND"
|
|
784
|
+
},
|
|
785
|
+
{
|
|
786
|
+
pattern: /no such column[:\s]*(['"]?)([\w.]+)\1/i,
|
|
787
|
+
suggestion: "Column not found. Use sqlite_describe_table to see available columns.",
|
|
788
|
+
category: "resource" /* RESOURCE */,
|
|
789
|
+
code: "COLUMN_NOT_FOUND"
|
|
790
|
+
},
|
|
791
|
+
{
|
|
792
|
+
pattern: /has no column named/i,
|
|
793
|
+
suggestion: "Column not found in target table. Use sqlite_describe_table to verify column names before INSERT or UPDATE.",
|
|
794
|
+
category: "resource" /* RESOURCE */,
|
|
795
|
+
code: "COLUMN_NOT_FOUND"
|
|
796
|
+
},
|
|
797
|
+
{
|
|
798
|
+
pattern: /no such view[:\s]*(['"]?)([\w.]+)\1/i,
|
|
799
|
+
suggestion: "View not found. Run sqlite_list_views to see available views.",
|
|
800
|
+
category: "resource" /* RESOURCE */,
|
|
801
|
+
code: "VIEW_NOT_FOUND"
|
|
802
|
+
},
|
|
803
|
+
{
|
|
804
|
+
pattern: /filename.*does not exist/i,
|
|
805
|
+
suggestion: "File not found. Verify the absolute path exists and is readable.",
|
|
806
|
+
category: "resource" /* RESOURCE */,
|
|
807
|
+
code: "FILE_NOT_FOUND"
|
|
808
|
+
},
|
|
809
|
+
{
|
|
810
|
+
pattern: /table .* already exists/i,
|
|
811
|
+
suggestion: "Table already exists. Use CREATE TABLE IF NOT EXISTS or drop the existing table first.",
|
|
812
|
+
category: "resource" /* RESOURCE */,
|
|
813
|
+
code: "TABLE_ALREADY_EXISTS"
|
|
814
|
+
},
|
|
815
|
+
{
|
|
816
|
+
pattern: /index .* already exists/i,
|
|
817
|
+
suggestion: "Index already exists. Use CREATE INDEX IF NOT EXISTS or drop the existing index first.",
|
|
818
|
+
category: "resource" /* RESOURCE */,
|
|
819
|
+
code: "INDEX_ALREADY_EXISTS"
|
|
820
|
+
},
|
|
821
|
+
// JSON-specific errors — often caused by wrong column name
|
|
822
|
+
{
|
|
823
|
+
pattern: /malformed JSON/i,
|
|
824
|
+
suggestion: "The JSON data is malformed. This commonly occurs when the column name is incorrect \u2014 SQLite treats the unresolved identifier as a literal string. Verify the column exists with sqlite_describe_table.",
|
|
825
|
+
category: "query" /* QUERY */,
|
|
826
|
+
code: "MALFORMED_JSON"
|
|
827
|
+
},
|
|
828
|
+
// Query errors
|
|
829
|
+
{
|
|
830
|
+
pattern: /syntax error/i,
|
|
831
|
+
suggestion: "Check SQL syntax. Common issues: missing quotes, commas, parentheses, or reserved word conflicts.",
|
|
832
|
+
category: "query" /* QUERY */
|
|
833
|
+
},
|
|
834
|
+
{
|
|
835
|
+
pattern: /UNIQUE constraint failed/i,
|
|
836
|
+
suggestion: "A row with this value already exists. Use UPDATE to modify existing data or check for duplicates.",
|
|
837
|
+
category: "query" /* QUERY */,
|
|
838
|
+
code: "CONSTRAINT_VIOLATION"
|
|
839
|
+
},
|
|
840
|
+
{
|
|
841
|
+
pattern: /FOREIGN KEY constraint failed/i,
|
|
842
|
+
suggestion: "The referenced row does not exist. Ensure the parent record exists before inserting.",
|
|
843
|
+
category: "query" /* QUERY */,
|
|
844
|
+
code: "CONSTRAINT_VIOLATION"
|
|
845
|
+
},
|
|
846
|
+
{
|
|
847
|
+
pattern: /NOT NULL constraint failed/i,
|
|
848
|
+
suggestion: "A required column is missing a value. Provide a value or set a default.",
|
|
849
|
+
category: "query" /* QUERY */,
|
|
850
|
+
code: "CONSTRAINT_VIOLATION"
|
|
851
|
+
},
|
|
852
|
+
{
|
|
853
|
+
pattern: /CHECK constraint failed/i,
|
|
854
|
+
suggestion: "The value does not meet the column's check constraint requirements.",
|
|
855
|
+
category: "query" /* QUERY */,
|
|
856
|
+
code: "CONSTRAINT_VIOLATION"
|
|
857
|
+
},
|
|
858
|
+
{
|
|
859
|
+
pattern: /incomplete input/i,
|
|
860
|
+
suggestion: "SQL statement is incomplete. Check for missing clauses, closing parentheses, or semicolons.",
|
|
861
|
+
category: "query" /* QUERY */
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
pattern: /more than one statement/i,
|
|
865
|
+
suggestion: "Only one SQL statement per call is allowed. Split multiple statements into separate calls or use sqlite_execute_code for multi-step operations.",
|
|
866
|
+
category: "query" /* QUERY */
|
|
867
|
+
},
|
|
868
|
+
{
|
|
869
|
+
pattern: /too few parameter/i,
|
|
870
|
+
suggestion: "Not enough parameter values provided for the prepared statement placeholders (?). Ensure params array matches the number of ? placeholders in the query.",
|
|
871
|
+
category: "query" /* QUERY */
|
|
872
|
+
},
|
|
873
|
+
// Connection errors
|
|
874
|
+
{
|
|
875
|
+
pattern: /not connected/i,
|
|
876
|
+
suggestion: "Database connection not established. Ensure the database is configured and connected.",
|
|
877
|
+
category: "connection" /* CONNECTION */
|
|
878
|
+
},
|
|
879
|
+
{
|
|
880
|
+
pattern: /cannot start a transaction within a transaction/i,
|
|
881
|
+
suggestion: "A transaction is already active. Commit or rollback the current transaction first, or use sqlite_transaction_execute for atomic multi-statement operations.",
|
|
882
|
+
category: "query" /* QUERY */,
|
|
883
|
+
code: "TRANSACTION_CONFLICT"
|
|
884
|
+
},
|
|
885
|
+
{
|
|
886
|
+
pattern: /no transaction is active/i,
|
|
887
|
+
suggestion: "No transaction is active. Start a transaction using sqlite_transaction_begin first.",
|
|
888
|
+
category: "query" /* QUERY */,
|
|
889
|
+
code: "TRANSACTION_NOT_ACTIVE"
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
pattern: /no such savepoint/i,
|
|
893
|
+
suggestion: "The specified savepoint does not exist. Verify the savepoint name and ensure it hasn't already been released or rolled back.",
|
|
894
|
+
category: "query" /* QUERY */,
|
|
895
|
+
code: "SAVEPOINT_NOT_FOUND"
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
pattern: /database is locked/i,
|
|
899
|
+
suggestion: "Database is being used by another process. Wait and retry, or check for long-running transactions.",
|
|
900
|
+
category: "connection" /* CONNECTION */
|
|
901
|
+
},
|
|
902
|
+
// Permission errors
|
|
903
|
+
{
|
|
904
|
+
pattern: /readonly database/i,
|
|
905
|
+
suggestion: "Database is in read-only mode. Check file permissions or connection settings.",
|
|
906
|
+
category: "permission" /* PERMISSION */
|
|
907
|
+
},
|
|
908
|
+
{
|
|
909
|
+
pattern: /attempt to write a readonly/i,
|
|
910
|
+
suggestion: "Write operations are not allowed. Check database configuration.",
|
|
911
|
+
category: "permission" /* PERMISSION */
|
|
912
|
+
},
|
|
913
|
+
// Codemode errors
|
|
914
|
+
{
|
|
915
|
+
pattern: /code validation failed/i,
|
|
916
|
+
suggestion: "Check for blocked patterns: require(), process., eval(), Function(), import(). Use sqlite.* API instead.",
|
|
917
|
+
category: "validation" /* VALIDATION */
|
|
918
|
+
},
|
|
919
|
+
{
|
|
920
|
+
pattern: /rate limit exceeded/i,
|
|
921
|
+
suggestion: "Wait before retrying. Combine multiple operations into fewer execute_code calls.",
|
|
922
|
+
category: "permission" /* PERMISSION */
|
|
923
|
+
},
|
|
924
|
+
{
|
|
925
|
+
pattern: /execution timed out/i,
|
|
926
|
+
suggestion: "Reduce code complexity or increase timeout (max 30s). Break into smaller operations.",
|
|
927
|
+
category: "query" /* QUERY */
|
|
928
|
+
},
|
|
929
|
+
{
|
|
930
|
+
pattern: /sandbox.*not initialized/i,
|
|
931
|
+
suggestion: "Internal sandbox error. Retry the operation.",
|
|
932
|
+
category: "internal" /* INTERNAL */
|
|
933
|
+
},
|
|
934
|
+
// Extension errors
|
|
935
|
+
{
|
|
936
|
+
pattern: /extension.*not (available|installed|loaded|found)/i,
|
|
937
|
+
suggestion: "Extension is not available. Check CLI flags, environment variables, or platform compatibility.",
|
|
938
|
+
category: "config" /* CONFIGURATION */,
|
|
939
|
+
code: "EXTENSION_MISSING"
|
|
940
|
+
},
|
|
941
|
+
// Custom JS errors mapped from tools
|
|
942
|
+
{
|
|
943
|
+
pattern: /invalid identifier/i,
|
|
944
|
+
suggestion: "Identifiers must start with a letter or underscore and contain only alphanumeric characters or underscores. Ensure the name follows SQLite identifier rules.",
|
|
945
|
+
category: "validation" /* VALIDATION */,
|
|
946
|
+
code: "INVALID_IDENTIFIER"
|
|
947
|
+
},
|
|
948
|
+
{
|
|
949
|
+
pattern: /(expected property name|unexpected token|in JSON at position|Expected double-quoted property name)/i,
|
|
950
|
+
suggestion: "The JSON data provided is malformed. Ensure the input string is valid JSON.",
|
|
951
|
+
category: "validation" /* VALIDATION */,
|
|
952
|
+
code: "MALFORMED_JSON"
|
|
953
|
+
}
|
|
954
|
+
];
|
|
955
|
+
function findSuggestion(message) {
|
|
956
|
+
for (const entry of ERROR_SUGGESTIONS) {
|
|
957
|
+
if (entry.pattern.test(message)) {
|
|
958
|
+
return {
|
|
959
|
+
suggestion: entry.suggestion,
|
|
960
|
+
category: entry.category,
|
|
961
|
+
code: entry.code
|
|
962
|
+
};
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
return null;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
// src/utils/errors/base.ts
|
|
969
|
+
var REFINABLE_CODES = /* @__PURE__ */ new Set([
|
|
970
|
+
"DB_QUERY_FAILED",
|
|
971
|
+
"DB_WRITE_FAILED",
|
|
972
|
+
"QUERY_ERROR",
|
|
973
|
+
"RESOURCE_ERROR",
|
|
974
|
+
"UNKNOWN_ERROR"
|
|
975
|
+
]);
|
|
976
|
+
var DbMcpError = class extends Error {
|
|
977
|
+
/** Error category for classification */
|
|
978
|
+
category;
|
|
979
|
+
/** Module-prefixed error code (e.g., DB_QUERY_FAILED) */
|
|
980
|
+
code;
|
|
981
|
+
/** Actionable suggestion for resolving the error */
|
|
982
|
+
suggestion;
|
|
983
|
+
/** Additional error details */
|
|
984
|
+
details;
|
|
985
|
+
/** Whether the error is recoverable (can retry) */
|
|
986
|
+
recoverable;
|
|
987
|
+
constructor(message, code, category, options) {
|
|
988
|
+
super(message, { cause: options?.cause });
|
|
989
|
+
this.name = this.constructor.name;
|
|
990
|
+
this.category = category;
|
|
991
|
+
this.recoverable = options?.recoverable ?? false;
|
|
992
|
+
this.details = options?.details;
|
|
993
|
+
const match = findSuggestion(message);
|
|
994
|
+
this.suggestion = options?.suggestion ?? match?.suggestion;
|
|
995
|
+
this.code = match?.code && REFINABLE_CODES.has(code) ? match.code : code;
|
|
996
|
+
Error.captureStackTrace?.(this, this.constructor);
|
|
997
|
+
}
|
|
998
|
+
/**
|
|
999
|
+
* Convert to structured response object
|
|
1000
|
+
*/
|
|
1001
|
+
toResponse() {
|
|
1002
|
+
return {
|
|
1003
|
+
success: false,
|
|
1004
|
+
error: this.message,
|
|
1005
|
+
code: this.code,
|
|
1006
|
+
category: this.category,
|
|
1007
|
+
suggestion: this.suggestion,
|
|
1008
|
+
recoverable: this.recoverable,
|
|
1009
|
+
details: this.details
|
|
1010
|
+
};
|
|
1011
|
+
}
|
|
1012
|
+
};
|
|
1013
|
+
|
|
1014
|
+
// src/utils/errors/classes.ts
|
|
1015
|
+
var ValidationError = class extends DbMcpError {
|
|
1016
|
+
constructor(message, code = "VALIDATION_ERROR", options) {
|
|
1017
|
+
super(message, code, "validation" /* VALIDATION */, {
|
|
1018
|
+
...options,
|
|
1019
|
+
recoverable: false
|
|
1020
|
+
});
|
|
1021
|
+
}
|
|
1022
|
+
};
|
|
1023
|
+
var ConnectionError = class extends DbMcpError {
|
|
1024
|
+
constructor(message, code = "CONNECTION_ERROR", options) {
|
|
1025
|
+
super(message, code, "connection" /* CONNECTION */, {
|
|
1026
|
+
...options,
|
|
1027
|
+
recoverable: true
|
|
1028
|
+
// Connection errors are often transient
|
|
1029
|
+
});
|
|
1030
|
+
}
|
|
1031
|
+
};
|
|
1032
|
+
var QueryError = class extends DbMcpError {
|
|
1033
|
+
constructor(message, code = "QUERY_ERROR", options) {
|
|
1034
|
+
super(message, code, "query" /* QUERY */, {
|
|
1035
|
+
...options,
|
|
1036
|
+
details: {
|
|
1037
|
+
...options?.details,
|
|
1038
|
+
sql: options?.sql
|
|
1039
|
+
},
|
|
1040
|
+
recoverable: false
|
|
1041
|
+
});
|
|
1042
|
+
}
|
|
1043
|
+
};
|
|
1044
|
+
var ResourceNotFoundError = class extends DbMcpError {
|
|
1045
|
+
constructor(message, code = "RESOURCE_NOT_FOUND", options) {
|
|
1046
|
+
super(message, code, "resource" /* RESOURCE */, {
|
|
1047
|
+
...options,
|
|
1048
|
+
details: {
|
|
1049
|
+
...options?.details,
|
|
1050
|
+
resourceType: options?.resourceType,
|
|
1051
|
+
resourceName: options?.resourceName
|
|
1052
|
+
},
|
|
1053
|
+
recoverable: false
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1056
|
+
};
|
|
1057
|
+
var ConfigurationError = class extends DbMcpError {
|
|
1058
|
+
constructor(message, code = "CONFIG_ERROR", options) {
|
|
1059
|
+
super(message, code, "config" /* CONFIGURATION */, {
|
|
1060
|
+
...options,
|
|
1061
|
+
recoverable: false
|
|
1062
|
+
});
|
|
1063
|
+
}
|
|
1064
|
+
};
|
|
1065
|
+
var AuthenticationError = class extends DbMcpError {
|
|
1066
|
+
constructor(message, code = "AUTHENTICATION_ERROR", options) {
|
|
1067
|
+
super(message, code, "authentication" /* AUTHENTICATION */, {
|
|
1068
|
+
...options,
|
|
1069
|
+
recoverable: false
|
|
1070
|
+
});
|
|
1071
|
+
}
|
|
1072
|
+
};
|
|
1073
|
+
var AuthorizationError = class extends DbMcpError {
|
|
1074
|
+
constructor(message, code = "AUTHORIZATION_ERROR", options) {
|
|
1075
|
+
super(message, code, "authorization" /* AUTHORIZATION */, {
|
|
1076
|
+
...options,
|
|
1077
|
+
recoverable: false
|
|
1078
|
+
});
|
|
1079
|
+
}
|
|
1080
|
+
};
|
|
1081
|
+
var ExtensionNotAvailableError = class extends DbMcpError {
|
|
1082
|
+
constructor(extensionName, options) {
|
|
1083
|
+
const isWasm = options?.wasmLimitation ?? options?.details?.["wasmLimitation"] ?? false;
|
|
1084
|
+
const baseMessage = `Extension '${extensionName}' is not installed or available`;
|
|
1085
|
+
const message = isWasm === true ? `${baseMessage} in WASM mode` : baseMessage;
|
|
1086
|
+
super(message, "EXTENSION_MISSING", "config" /* CONFIGURATION */, {
|
|
1087
|
+
suggestion: options?.suggestion ?? `Install or enable the '${extensionName}' extension. Check environment variable or CLI flag configuration.`,
|
|
1088
|
+
details: {
|
|
1089
|
+
extension: extensionName,
|
|
1090
|
+
...options?.details,
|
|
1091
|
+
...isWasm === true ? { wasmLimitation: true } : {}
|
|
1092
|
+
},
|
|
1093
|
+
recoverable: false,
|
|
1094
|
+
cause: options?.cause
|
|
1095
|
+
});
|
|
1096
|
+
}
|
|
1097
|
+
};
|
|
1098
|
+
|
|
1099
|
+
// src/utils/errors/format.ts
|
|
1100
|
+
function sanitizeErrorMessage(msg) {
|
|
1101
|
+
if (!msg || typeof msg !== "string") return msg;
|
|
1102
|
+
return msg.replace(/[a-zA-Z]:\\[^:\n]*\\/g, "<redacted_path>\\").replace(/(file:|sqlite:|\/)[^:\s]+(\/[^:\s]*)/g, "<redacted_path>").replace(
|
|
1103
|
+
/([a-zA-Z0-9+.-]+:\/\/[^:]+:)[^@\s]+(@)/g,
|
|
1104
|
+
"$1<redacted_credential>$2"
|
|
1105
|
+
).replace(
|
|
1106
|
+
/([?&](?:password|secret|key|token)=)[^&\s]+/gi,
|
|
1107
|
+
"$1<redacted_credential>"
|
|
1108
|
+
).replace(
|
|
1109
|
+
/(password|secret|key|token)[=:]\s*["']?[^"'\s,;]+["']?/gi,
|
|
1110
|
+
"$1=<redacted_credential>"
|
|
1111
|
+
);
|
|
1112
|
+
}
|
|
1113
|
+
var CATEGORY_DEFAULT_CODES = {
|
|
1114
|
+
["validation" /* VALIDATION */]: "VALIDATION_ERROR",
|
|
1115
|
+
["connection" /* CONNECTION */]: "CONNECTION_ERROR",
|
|
1116
|
+
["query" /* QUERY */]: "QUERY_ERROR",
|
|
1117
|
+
["permission" /* PERMISSION */]: "PERMISSION_ERROR",
|
|
1118
|
+
["config" /* CONFIGURATION */]: "CONFIG_ERROR",
|
|
1119
|
+
["resource" /* RESOURCE */]: "RESOURCE_ERROR",
|
|
1120
|
+
["authentication" /* AUTHENTICATION */]: "AUTHENTICATION_ERROR",
|
|
1121
|
+
["authorization" /* AUTHORIZATION */]: "AUTHORIZATION_ERROR",
|
|
1122
|
+
["internal" /* INTERNAL */]: "UNKNOWN_ERROR"
|
|
1123
|
+
};
|
|
1124
|
+
function formatZodError(error) {
|
|
1125
|
+
if (!("issues" in error) || !Array.isArray(error["issues"])) {
|
|
1126
|
+
return null;
|
|
1127
|
+
}
|
|
1128
|
+
const issues = error["issues"];
|
|
1129
|
+
return issues.map((issue) => {
|
|
1130
|
+
const pathStr = Array.isArray(issue.path) && issue.path.length > 0 ? `${issue.path.join(".")}: ` : "";
|
|
1131
|
+
return `${pathStr}${issue.message ?? "Unknown validation error"}`;
|
|
1132
|
+
}).join("; ");
|
|
1133
|
+
}
|
|
1134
|
+
function formatHandlerError(error, _context) {
|
|
1135
|
+
if (error instanceof DbMcpError) {
|
|
1136
|
+
const res = error.toResponse();
|
|
1137
|
+
res.error = sanitizeErrorMessage(res.error);
|
|
1138
|
+
return res;
|
|
1139
|
+
}
|
|
1140
|
+
if (error instanceof Error) {
|
|
1141
|
+
const zodMessage = formatZodError(error);
|
|
1142
|
+
if (zodMessage !== null) {
|
|
1143
|
+
return {
|
|
1144
|
+
success: false,
|
|
1145
|
+
error: sanitizeErrorMessage(zodMessage),
|
|
1146
|
+
code: "VALIDATION_ERROR",
|
|
1147
|
+
category: "validation" /* VALIDATION */,
|
|
1148
|
+
suggestion: void 0,
|
|
1149
|
+
recoverable: false,
|
|
1150
|
+
details: void 0
|
|
1151
|
+
};
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
if (error instanceof Error) {
|
|
1155
|
+
const match = findSuggestion(error.message);
|
|
1156
|
+
const category = match?.category ?? "internal" /* INTERNAL */;
|
|
1157
|
+
return {
|
|
1158
|
+
success: false,
|
|
1159
|
+
error: sanitizeErrorMessage(error.message),
|
|
1160
|
+
code: match?.code ?? CATEGORY_DEFAULT_CODES[category],
|
|
1161
|
+
category,
|
|
1162
|
+
suggestion: match?.suggestion,
|
|
1163
|
+
recoverable: false,
|
|
1164
|
+
details: void 0
|
|
1165
|
+
};
|
|
1166
|
+
}
|
|
1167
|
+
return {
|
|
1168
|
+
success: false,
|
|
1169
|
+
error: sanitizeErrorMessage(String(error)),
|
|
1170
|
+
code: "UNKNOWN_ERROR",
|
|
1171
|
+
category: "internal" /* INTERNAL */,
|
|
1172
|
+
suggestion: void 0,
|
|
1173
|
+
recoverable: false,
|
|
1174
|
+
details: void 0
|
|
1175
|
+
};
|
|
1176
|
+
}
|
|
1177
|
+
var authContextStorage = new AsyncLocalStorage();
|
|
1178
|
+
function runWithAuthContext(context, fn) {
|
|
1179
|
+
return authContextStorage.run(context, fn);
|
|
1180
|
+
}
|
|
1181
|
+
function getAuthContext() {
|
|
1182
|
+
return authContextStorage.getStore();
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
// src/auth/scopes/constants.ts
|
|
1186
|
+
var SCOPES = {
|
|
1187
|
+
/** Read-only access to all databases */
|
|
1188
|
+
READ: "read",
|
|
1189
|
+
/** Read and write access to all databases */
|
|
1190
|
+
WRITE: "write",
|
|
1191
|
+
/** Administrative access */
|
|
1192
|
+
ADMIN: "admin",
|
|
1193
|
+
/** Unrestricted access to all operations */
|
|
1194
|
+
FULL: "full"
|
|
1195
|
+
};
|
|
1196
|
+
var BASE_SCOPES = ["read", "write", "admin", "full"];
|
|
1197
|
+
var SUPPORTED_SCOPES = ["read", "write", "admin", "full"];
|
|
1198
|
+
function parseScopes(scopeString) {
|
|
1199
|
+
return scopeString.split(/\s+/).map((s) => s.trim()).filter((s) => s.length > 0);
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
// src/auth/scopes/mapping.ts
|
|
1203
|
+
var TOOL_GROUP_SCOPES = {
|
|
1204
|
+
core: SCOPES.READ,
|
|
1205
|
+
json: SCOPES.READ,
|
|
1206
|
+
text: SCOPES.READ,
|
|
1207
|
+
stats: SCOPES.READ,
|
|
1208
|
+
vector: SCOPES.READ,
|
|
1209
|
+
geo: SCOPES.READ,
|
|
1210
|
+
introspection: SCOPES.READ,
|
|
1211
|
+
migration: SCOPES.WRITE,
|
|
1212
|
+
transactions: SCOPES.WRITE,
|
|
1213
|
+
admin: SCOPES.ADMIN,
|
|
1214
|
+
codemode: SCOPES.ADMIN
|
|
1215
|
+
};
|
|
1216
|
+
var groupsForScope = (maxScope) => {
|
|
1217
|
+
const hierarchy = {
|
|
1218
|
+
read: 0,
|
|
1219
|
+
write: 1,
|
|
1220
|
+
admin: 2,
|
|
1221
|
+
full: 3
|
|
1222
|
+
};
|
|
1223
|
+
const maxLevel = hierarchy[maxScope];
|
|
1224
|
+
return Object.entries(TOOL_GROUP_SCOPES).filter(([, scope]) => hierarchy[scope] <= maxLevel).map(([group]) => group);
|
|
1225
|
+
};
|
|
1226
|
+
groupsForScope(SCOPES.READ);
|
|
1227
|
+
groupsForScope(SCOPES.WRITE);
|
|
1228
|
+
groupsForScope(SCOPES.ADMIN);
|
|
1229
|
+
function withSqlitePrefix(names) {
|
|
1230
|
+
const set = /* @__PURE__ */ new Set();
|
|
1231
|
+
for (const name of names) {
|
|
1232
|
+
set.add(name);
|
|
1233
|
+
set.add(`sqlite_${name}`);
|
|
1234
|
+
}
|
|
1235
|
+
return set;
|
|
1236
|
+
}
|
|
1237
|
+
var adminToolNames = [];
|
|
1238
|
+
for (const [group, scope] of Object.entries(TOOL_GROUP_SCOPES)) {
|
|
1239
|
+
if (scope === SCOPES.ADMIN) {
|
|
1240
|
+
const tools = TOOL_GROUPS[group];
|
|
1241
|
+
adminToolNames.push(...tools);
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
adminToolNames.push(
|
|
1245
|
+
"sqlite_audit_list_backups",
|
|
1246
|
+
"sqlite_audit_get_backup",
|
|
1247
|
+
"sqlite_audit_cleanup",
|
|
1248
|
+
"sqlite_audit_diff_backup",
|
|
1249
|
+
"sqlite_audit_restore_backup",
|
|
1250
|
+
"drop_table"
|
|
1251
|
+
// explicitly admin since it is destructive, despite being in core
|
|
1252
|
+
);
|
|
1253
|
+
withSqlitePrefix(adminToolNames);
|
|
1254
|
+
var READ_ONLY_TOOLS = withSqlitePrefix([
|
|
1255
|
+
// Core read operations
|
|
1256
|
+
"read_query",
|
|
1257
|
+
"list_tables",
|
|
1258
|
+
"describe_table",
|
|
1259
|
+
"get_indexes",
|
|
1260
|
+
"count",
|
|
1261
|
+
"exists",
|
|
1262
|
+
"list_triggers",
|
|
1263
|
+
"list_constraints",
|
|
1264
|
+
"date_add",
|
|
1265
|
+
"date_diff",
|
|
1266
|
+
// JSON read operations
|
|
1267
|
+
"json_valid",
|
|
1268
|
+
"json_extract",
|
|
1269
|
+
"json_type",
|
|
1270
|
+
"json_array_length",
|
|
1271
|
+
"json_keys",
|
|
1272
|
+
"json_each",
|
|
1273
|
+
"json_group_array",
|
|
1274
|
+
"json_group_object",
|
|
1275
|
+
"json_pretty",
|
|
1276
|
+
"json_query",
|
|
1277
|
+
"json_select",
|
|
1278
|
+
"json_validate_path",
|
|
1279
|
+
"json_analyze_schema",
|
|
1280
|
+
"json_storage_info",
|
|
1281
|
+
"json_diff",
|
|
1282
|
+
"json_security_scan",
|
|
1283
|
+
// Text read operations
|
|
1284
|
+
"regex_extract",
|
|
1285
|
+
"regex_match",
|
|
1286
|
+
"text_split",
|
|
1287
|
+
"text_concat",
|
|
1288
|
+
"text_replace",
|
|
1289
|
+
"text_trim",
|
|
1290
|
+
"text_case",
|
|
1291
|
+
"text_substring",
|
|
1292
|
+
"fuzzy_match",
|
|
1293
|
+
"phonetic_match",
|
|
1294
|
+
"text_normalize",
|
|
1295
|
+
"text_validate",
|
|
1296
|
+
"advanced_search",
|
|
1297
|
+
"text_sentiment",
|
|
1298
|
+
"fts_search",
|
|
1299
|
+
"fts_match_info",
|
|
1300
|
+
"fts_headline",
|
|
1301
|
+
// Stats (all read-only)
|
|
1302
|
+
"stats_basic",
|
|
1303
|
+
"stats_count",
|
|
1304
|
+
"stats_group_by",
|
|
1305
|
+
"stats_histogram",
|
|
1306
|
+
"stats_percentile",
|
|
1307
|
+
"stats_correlation",
|
|
1308
|
+
"stats_top_n",
|
|
1309
|
+
"stats_distinct",
|
|
1310
|
+
"stats_summary",
|
|
1311
|
+
"stats_frequency",
|
|
1312
|
+
"stats_outliers",
|
|
1313
|
+
"stats_regression",
|
|
1314
|
+
"stats_hypothesis",
|
|
1315
|
+
"stats_detect_anomalies",
|
|
1316
|
+
"stats_detect_bloat",
|
|
1317
|
+
"stats_detect_schema_risks",
|
|
1318
|
+
"stats_sample",
|
|
1319
|
+
"window_row_number",
|
|
1320
|
+
"window_rank",
|
|
1321
|
+
"window_lag_lead",
|
|
1322
|
+
"window_running_total",
|
|
1323
|
+
"window_moving_avg",
|
|
1324
|
+
"window_ntile",
|
|
1325
|
+
// Vector read operations
|
|
1326
|
+
"vector_search",
|
|
1327
|
+
"vector_get",
|
|
1328
|
+
"vector_count",
|
|
1329
|
+
"vector_stats",
|
|
1330
|
+
"vector_dimensions",
|
|
1331
|
+
"vector_normalize",
|
|
1332
|
+
"vector_distance",
|
|
1333
|
+
// Geo read operations
|
|
1334
|
+
"geo_distance",
|
|
1335
|
+
"geo_nearby",
|
|
1336
|
+
"geo_bounding_box",
|
|
1337
|
+
"geo_cluster",
|
|
1338
|
+
// Introspection (all read-only)
|
|
1339
|
+
"dependency_graph",
|
|
1340
|
+
"topological_sort",
|
|
1341
|
+
"cascade_simulator",
|
|
1342
|
+
"schema_snapshot",
|
|
1343
|
+
"schema_diff",
|
|
1344
|
+
"constraint_analysis",
|
|
1345
|
+
"migration_risks",
|
|
1346
|
+
"storage_analysis",
|
|
1347
|
+
"index_audit",
|
|
1348
|
+
"query_plan"
|
|
1349
|
+
]);
|
|
1350
|
+
var WRITE_TOOLS = withSqlitePrefix([
|
|
1351
|
+
// Core write operations
|
|
1352
|
+
"write_query",
|
|
1353
|
+
"create_table",
|
|
1354
|
+
"create_index",
|
|
1355
|
+
"drop_index",
|
|
1356
|
+
"upsert",
|
|
1357
|
+
"batch_insert",
|
|
1358
|
+
"truncate",
|
|
1359
|
+
"create_trigger",
|
|
1360
|
+
"drop_trigger",
|
|
1361
|
+
"alter_table",
|
|
1362
|
+
// JSON write operations
|
|
1363
|
+
"json_insert",
|
|
1364
|
+
"json_update",
|
|
1365
|
+
"json_set",
|
|
1366
|
+
"json_remove",
|
|
1367
|
+
"json_array_append",
|
|
1368
|
+
"json_merge",
|
|
1369
|
+
"create_json_collection",
|
|
1370
|
+
"jsonb_convert",
|
|
1371
|
+
"json_normalize_column",
|
|
1372
|
+
// Text write operations
|
|
1373
|
+
"fts_create",
|
|
1374
|
+
"fts_rebuild",
|
|
1375
|
+
// Vector write operations
|
|
1376
|
+
"vector_create_table",
|
|
1377
|
+
"vector_store",
|
|
1378
|
+
"vector_batch_store",
|
|
1379
|
+
"vector_delete",
|
|
1380
|
+
// Geo write operations
|
|
1381
|
+
"spatialite_load",
|
|
1382
|
+
"spatialite_create_table",
|
|
1383
|
+
"spatialite_query",
|
|
1384
|
+
"spatialite_analyze",
|
|
1385
|
+
"spatialite_index",
|
|
1386
|
+
"spatialite_transform",
|
|
1387
|
+
"spatialite_import",
|
|
1388
|
+
// Migration (write scope group)
|
|
1389
|
+
"migration_init",
|
|
1390
|
+
"migration_record",
|
|
1391
|
+
"migration_apply",
|
|
1392
|
+
"migration_rollback",
|
|
1393
|
+
"migration_history",
|
|
1394
|
+
"migration_status",
|
|
1395
|
+
// Transactions (write scope group)
|
|
1396
|
+
"transaction_begin",
|
|
1397
|
+
"transaction_status",
|
|
1398
|
+
"transaction_commit",
|
|
1399
|
+
"transaction_rollback",
|
|
1400
|
+
"transaction_savepoint",
|
|
1401
|
+
"transaction_release",
|
|
1402
|
+
"transaction_rollback_to",
|
|
1403
|
+
"transaction_execute"
|
|
1404
|
+
]);
|
|
1405
|
+
|
|
1406
|
+
// src/auth/scopes/validation.ts
|
|
1407
|
+
function hasAdminScope(scopes) {
|
|
1408
|
+
return scopes.includes("admin") || scopes.includes("full");
|
|
1409
|
+
}
|
|
1410
|
+
function hasWriteScope(scopes) {
|
|
1411
|
+
return scopes.includes("write") || hasAdminScope(scopes);
|
|
1412
|
+
}
|
|
1413
|
+
function hasReadScope(scopes) {
|
|
1414
|
+
return scopes.includes("read") || hasWriteScope(scopes);
|
|
1415
|
+
}
|
|
1416
|
+
|
|
1417
|
+
// src/auth/scopes/enforcement.ts
|
|
1418
|
+
var toolScopeMap = /* @__PURE__ */ new Map();
|
|
1419
|
+
function registerToolScopes(map) {
|
|
1420
|
+
for (const [key, val] of map.entries()) {
|
|
1421
|
+
toolScopeMap.set(key, val);
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
function scopeGrantsToolAccess(scope, toolName) {
|
|
1425
|
+
if (scope === "full" || scope === "admin") {
|
|
1426
|
+
return true;
|
|
1427
|
+
}
|
|
1428
|
+
if (toolScopeMap.size > 0) {
|
|
1429
|
+
const required = toolScopeMap.get(toolName);
|
|
1430
|
+
if (required) {
|
|
1431
|
+
if (required.includes(scope)) {
|
|
1432
|
+
return true;
|
|
1433
|
+
}
|
|
1434
|
+
if (scope === "write" && required.includes("read")) {
|
|
1435
|
+
return true;
|
|
1436
|
+
}
|
|
1437
|
+
return false;
|
|
1438
|
+
}
|
|
1439
|
+
return false;
|
|
1440
|
+
}
|
|
1441
|
+
if (scope === "write") {
|
|
1442
|
+
return WRITE_TOOLS.has(toolName) || READ_ONLY_TOOLS.has(toolName);
|
|
1443
|
+
}
|
|
1444
|
+
if (scope === "read") {
|
|
1445
|
+
return READ_ONLY_TOOLS.has(toolName);
|
|
1446
|
+
}
|
|
1447
|
+
return false;
|
|
1448
|
+
}
|
|
1449
|
+
function scopesGrantToolAccess(scopes, toolName) {
|
|
1450
|
+
return scopes.some((scope) => scopeGrantsToolAccess(scope, toolName));
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
// src/auth/errors.ts
|
|
1454
|
+
var OAuthError = class extends DbMcpError {
|
|
1455
|
+
/** HTTP status code for this error */
|
|
1456
|
+
httpStatus;
|
|
1457
|
+
/** WWW-Authenticate header value */
|
|
1458
|
+
wwwAuthenticate;
|
|
1459
|
+
constructor(message, code, httpStatus, details, wwwAuthenticate) {
|
|
1460
|
+
super(message, code, "authentication" /* AUTHENTICATION */, { details });
|
|
1461
|
+
this.name = "OAuthError";
|
|
1462
|
+
this.httpStatus = httpStatus;
|
|
1463
|
+
this.wwwAuthenticate = wwwAuthenticate;
|
|
1464
|
+
}
|
|
1465
|
+
};
|
|
1466
|
+
var TokenMissingError = class extends OAuthError {
|
|
1467
|
+
constructor(realm = "db-mcp") {
|
|
1468
|
+
super(
|
|
1469
|
+
"No access token provided",
|
|
1470
|
+
ERROR_CODES.AUTH.TOKEN_MISSING.full,
|
|
1471
|
+
401,
|
|
1472
|
+
void 0,
|
|
1473
|
+
`Bearer realm="${realm}"`
|
|
1474
|
+
);
|
|
1475
|
+
this.name = "TokenMissingError";
|
|
1476
|
+
}
|
|
1477
|
+
};
|
|
1478
|
+
var InvalidTokenError = class extends OAuthError {
|
|
1479
|
+
constructor(message = "Invalid access token", details) {
|
|
1480
|
+
super(
|
|
1481
|
+
message,
|
|
1482
|
+
ERROR_CODES.AUTH.TOKEN_INVALID.full,
|
|
1483
|
+
401,
|
|
1484
|
+
details,
|
|
1485
|
+
'Bearer error="invalid_token"'
|
|
1486
|
+
);
|
|
1487
|
+
this.name = "InvalidTokenError";
|
|
1488
|
+
}
|
|
1489
|
+
};
|
|
1490
|
+
var TokenExpiredError = class extends OAuthError {
|
|
1491
|
+
constructor(expiredAt) {
|
|
1492
|
+
super(
|
|
1493
|
+
"Access token has expired",
|
|
1494
|
+
ERROR_CODES.AUTH.TOKEN_EXPIRED.full,
|
|
1495
|
+
401,
|
|
1496
|
+
expiredAt ? { expiredAt: expiredAt.toISOString() } : void 0,
|
|
1497
|
+
'Bearer error="invalid_token", error_description="Token has expired"'
|
|
1498
|
+
);
|
|
1499
|
+
this.name = "TokenExpiredError";
|
|
1500
|
+
}
|
|
1501
|
+
};
|
|
1502
|
+
var InvalidSignatureError = class extends OAuthError {
|
|
1503
|
+
constructor(message = "Token signature verification failed") {
|
|
1504
|
+
super(
|
|
1505
|
+
message,
|
|
1506
|
+
ERROR_CODES.AUTH.SIGNATURE_INVALID.full,
|
|
1507
|
+
401,
|
|
1508
|
+
void 0,
|
|
1509
|
+
'Bearer error="invalid_token", error_description="Signature verification failed"'
|
|
1510
|
+
);
|
|
1511
|
+
this.name = "InvalidSignatureError";
|
|
1512
|
+
}
|
|
1513
|
+
};
|
|
1514
|
+
var InsufficientScopeError = class extends OAuthError {
|
|
1515
|
+
constructor(_requiredScope, _providedScopes) {
|
|
1516
|
+
super(
|
|
1517
|
+
`Insufficient scope.`,
|
|
1518
|
+
ERROR_CODES.AUTH.SCOPE_DENIED.full,
|
|
1519
|
+
403,
|
|
1520
|
+
void 0,
|
|
1521
|
+
`Bearer error="insufficient_scope"`
|
|
1522
|
+
);
|
|
1523
|
+
this.name = "InsufficientScopeError";
|
|
1524
|
+
}
|
|
1525
|
+
};
|
|
1526
|
+
var AuthServerDiscoveryError = class extends OAuthError {
|
|
1527
|
+
constructor(serverUrl, cause) {
|
|
1528
|
+
super(
|
|
1529
|
+
`Failed to discover authorization server metadata: ${serverUrl}`,
|
|
1530
|
+
ERROR_CODES.AUTH.DISCOVERY_FAILED.full,
|
|
1531
|
+
500,
|
|
1532
|
+
{
|
|
1533
|
+
serverUrl,
|
|
1534
|
+
cause: cause?.message
|
|
1535
|
+
}
|
|
1536
|
+
);
|
|
1537
|
+
this.name = "AuthServerDiscoveryError";
|
|
1538
|
+
}
|
|
1539
|
+
};
|
|
1540
|
+
var JwksFetchError = class extends OAuthError {
|
|
1541
|
+
constructor(jwksUri, cause) {
|
|
1542
|
+
super(
|
|
1543
|
+
`Failed to fetch JWKS: ${jwksUri}`,
|
|
1544
|
+
ERROR_CODES.AUTH.JWKS_FETCH_FAILED.full,
|
|
1545
|
+
500,
|
|
1546
|
+
{
|
|
1547
|
+
jwksUri,
|
|
1548
|
+
cause: cause?.message
|
|
1549
|
+
}
|
|
1550
|
+
);
|
|
1551
|
+
this.name = "JwksFetchError";
|
|
1552
|
+
}
|
|
1553
|
+
};
|
|
1554
|
+
function isOAuthError(error) {
|
|
1555
|
+
return error instanceof OAuthError;
|
|
1556
|
+
}
|
|
1557
|
+
|
|
1558
|
+
export { ALL_TOOL_GROUPS, AuthServerDiscoveryError, AuthenticationError, AuthorizationError, BASE_SCOPES, ConfigurationError, ConnectionError, DbMcpError, ERROR_CODES, ExtensionNotAvailableError, InsufficientScopeError, InvalidSignatureError, InvalidTokenError, JwksFetchError, META_GROUPS, QueryError, ResourceNotFoundError, SCOPES, SUPPORTED_SCOPES, TOOL_GROUPS, TokenExpiredError, TokenMissingError, ValidationError, createModuleLogger, filterTools, findSuggestion, formatHandlerError, getAuthContext, getFilterSummary, getToolFilterFromEnv, hasAdminScope, hasReadScope, isOAuthError, isToolEnabled, logger, parseScopes, parseToolFilter, registerToolScopes, runWithAuthContext, sanitizeErrorMessage, scopesGrantToolAccess };
|