db-mcp 1.1.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +247 -169
- 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-E5IESRTK.js +489 -0
- package/dist/{chunk-TVIZ3XJH.js → chunk-FR65YPAH.js} +8509 -3925
- package/dist/{chunk-AOUL5SHS.js → chunk-L552U3QS.js} +880 -252
- package/dist/chunk-THATOQRT.js +2624 -0
- package/dist/chunk-W5WQVNVX.js +568 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +114 -19
- 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-VSB7DBJR.js → http-HWTUVFIA.js} +587 -358
- package/dist/index.d.ts +9 -842
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -5
- 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-26V3Y4MK.js → sqlite-6C3AJI4I.js} +115 -147
- package/dist/{sqlite-native-5O7FZJGB.js → sqlite-native-ZSSWCTYC.js} +1016 -349
- 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 +33 -20
- package/.gitattributes +0 -2
- package/dist/chunk-4IA3DB5C.js +0 -135
- package/dist/chunk-FW7UCRLN.js +0 -82
- package/dist/chunk-RHVEZ42P.js +0 -873
- package/dist/chunk-Z2GFQU3G.js +0 -363
- package/dist/worker-script.d.ts +0 -2
- package/dist/worker-script.js +0 -126
- package/playwright.config.ts +0 -101
- package/scripts/generate-server-instructions.ts +0 -111
- package/server.json +0 -52
- package/test-server/README.md +0 -118
- package/test-server/code-map.md +0 -409
- package/test-server/fixtures/sample.csv +0 -6
- package/test-server/reset-database.ps1 +0 -373
- package/test-server/sample.csv +0 -11
- package/test-server/test-agent-experience.md +0 -243
- package/test-server/test-database.sql +0 -388
- package/test-server/test-group-tools.md +0 -861
- package/test-server/test-help-resources.mjs +0 -238
- package/test-server/test-preflight.md +0 -53
- package/test-server/test-prompts.md +0 -354
- package/test-server/test-resources.md +0 -245
- package/test-server/test-tool-annotations.mjs +0 -157
- package/test-server/test-tools-advanced-1.md +0 -517
- package/test-server/test-tools-advanced-2.md +0 -487
- package/test-server/test-tools-codemode.md +0 -629
- package/test-server/test-tools.md +0 -176
- package/test-server/tool-reference.md +0 -236
- 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",
|
|
@@ -6,6 +8,7 @@ var ALL_TOOL_GROUPS = [
|
|
|
6
8
|
"stats",
|
|
7
9
|
"vector",
|
|
8
10
|
"admin",
|
|
11
|
+
"transactions",
|
|
9
12
|
"geo",
|
|
10
13
|
"introspection",
|
|
11
14
|
"migration",
|
|
@@ -21,7 +24,19 @@ var TOOL_GROUPS = {
|
|
|
21
24
|
"drop_table",
|
|
22
25
|
"get_indexes",
|
|
23
26
|
"create_index",
|
|
24
|
-
"drop_index"
|
|
27
|
+
"drop_index",
|
|
28
|
+
"upsert",
|
|
29
|
+
"batch_insert",
|
|
30
|
+
"count",
|
|
31
|
+
"exists",
|
|
32
|
+
"truncate",
|
|
33
|
+
"list_triggers",
|
|
34
|
+
"create_trigger",
|
|
35
|
+
"drop_trigger",
|
|
36
|
+
"list_constraints",
|
|
37
|
+
"date_add",
|
|
38
|
+
"date_diff",
|
|
39
|
+
"alter_table"
|
|
25
40
|
],
|
|
26
41
|
json: [
|
|
27
42
|
// CRUD + Query + Collection (8: crud.ts, query.ts, write.ts)
|
|
@@ -49,10 +64,14 @@ var TOOL_GROUPS = {
|
|
|
49
64
|
// JSONB + Storage (3: write.ts, read.ts)
|
|
50
65
|
"jsonb_convert",
|
|
51
66
|
"json_storage_info",
|
|
52
|
-
"json_normalize_column"
|
|
67
|
+
"json_normalize_column",
|
|
68
|
+
// Security (1: security.ts)
|
|
69
|
+
"json_security_scan",
|
|
70
|
+
// Diff (1: diff.ts)
|
|
71
|
+
"json_diff"
|
|
53
72
|
],
|
|
54
73
|
text: [
|
|
55
|
-
// Text Tools (
|
|
74
|
+
// Text Tools (14 WASM)
|
|
56
75
|
"regex_extract",
|
|
57
76
|
"regex_match",
|
|
58
77
|
"text_split",
|
|
@@ -66,14 +85,16 @@ var TOOL_GROUPS = {
|
|
|
66
85
|
"text_normalize",
|
|
67
86
|
"text_validate",
|
|
68
87
|
"advanced_search",
|
|
69
|
-
|
|
88
|
+
"text_sentiment",
|
|
89
|
+
// FTS5 Tools (5 Native-only)
|
|
70
90
|
"fts_create",
|
|
71
91
|
"fts_search",
|
|
72
92
|
"fts_rebuild",
|
|
73
|
-
"fts_match_info"
|
|
93
|
+
"fts_match_info",
|
|
94
|
+
"fts_headline"
|
|
74
95
|
],
|
|
75
96
|
stats: [
|
|
76
|
-
// Stats Tools (
|
|
97
|
+
// Stats Tools (16 WASM)
|
|
77
98
|
"stats_basic",
|
|
78
99
|
"stats_count",
|
|
79
100
|
"stats_group_by",
|
|
@@ -87,13 +108,19 @@ var TOOL_GROUPS = {
|
|
|
87
108
|
"stats_outliers",
|
|
88
109
|
"stats_regression",
|
|
89
110
|
"stats_hypothesis",
|
|
111
|
+
// Anomaly Detection (3 WASM)
|
|
112
|
+
"stats_detect_anomalies",
|
|
113
|
+
"stats_detect_bloat",
|
|
114
|
+
"stats_detect_schema_risks",
|
|
90
115
|
// Window Tools (6 Native-only)
|
|
91
116
|
"window_row_number",
|
|
92
117
|
"window_rank",
|
|
93
118
|
"window_lag_lead",
|
|
94
119
|
"window_running_total",
|
|
95
120
|
"window_moving_avg",
|
|
96
|
-
"window_ntile"
|
|
121
|
+
"window_ntile",
|
|
122
|
+
// Sampling (1 WASM)
|
|
123
|
+
"stats_sample"
|
|
97
124
|
],
|
|
98
125
|
vector: [
|
|
99
126
|
"vector_create_table",
|
|
@@ -109,7 +136,7 @@ var TOOL_GROUPS = {
|
|
|
109
136
|
"vector_distance"
|
|
110
137
|
],
|
|
111
138
|
admin: [
|
|
112
|
-
// Admin Tools (
|
|
139
|
+
// Admin Tools (15: backup.ts, verify.ts, pragma.ts, reindex.ts, wal.ts)
|
|
113
140
|
"backup",
|
|
114
141
|
"analyze",
|
|
115
142
|
"integrity_check",
|
|
@@ -137,8 +164,18 @@ var TOOL_GROUPS = {
|
|
|
137
164
|
"analyze_csv_schema",
|
|
138
165
|
"create_rtree_table",
|
|
139
166
|
"create_series_table",
|
|
140
|
-
//
|
|
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"
|
|
174
|
+
],
|
|
175
|
+
transactions: [
|
|
176
|
+
// Transaction Tools (8 Native-only)
|
|
141
177
|
"transaction_begin",
|
|
178
|
+
"transaction_status",
|
|
142
179
|
"transaction_commit",
|
|
143
180
|
"transaction_rollback",
|
|
144
181
|
"transaction_savepoint",
|
|
@@ -164,8 +201,9 @@ var TOOL_GROUPS = {
|
|
|
164
201
|
"dependency_graph",
|
|
165
202
|
"topological_sort",
|
|
166
203
|
"cascade_simulator",
|
|
167
|
-
// Schema Analysis (
|
|
204
|
+
// Schema Analysis (4 from introspection/analysis.ts)
|
|
168
205
|
"schema_snapshot",
|
|
206
|
+
"schema_diff",
|
|
169
207
|
"constraint_analysis",
|
|
170
208
|
"migration_risks",
|
|
171
209
|
// Diagnostics (3 from introspection/diagnostics.ts)
|
|
@@ -185,19 +223,19 @@ var TOOL_GROUPS = {
|
|
|
185
223
|
codemode: ["execute_code"]
|
|
186
224
|
};
|
|
187
225
|
var META_GROUPS = {
|
|
188
|
-
// General development - Core + JSON + Text
|
|
226
|
+
// General development - Core + JSON + Text (60 WASM / 65 Native)
|
|
189
227
|
starter: ["core", "json", "text", "codemode"],
|
|
190
|
-
// Data analysis - Core + JSON + Stats
|
|
228
|
+
// Data analysis - Core + JSON + Stats (63 WASM / 69 Native)
|
|
191
229
|
analytics: ["core", "json", "stats", "codemode"],
|
|
192
|
-
// Search workloads - Core + Text + Vector
|
|
230
|
+
// Search workloads - Core + Text + Vector (46 WASM / 51 Native)
|
|
193
231
|
search: ["core", "text", "vector", "codemode"],
|
|
194
|
-
// Geospatial workloads - Core + Geo + Vector
|
|
232
|
+
// Geospatial workloads - Core + Geo + Vector (36 WASM / 43 Native)
|
|
195
233
|
spatial: ["core", "geo", "vector", "codemode"],
|
|
196
|
-
// Schema development - Core + Introspection + Migration
|
|
234
|
+
// Schema development - Core + Introspection + Migration (37 tools)
|
|
197
235
|
"dev-schema": ["core", "introspection", "migration", "codemode"],
|
|
198
|
-
// Bare minimum - Core
|
|
236
|
+
// Bare minimum - Core (21 tools)
|
|
199
237
|
minimal: ["core", "codemode"],
|
|
200
|
-
// All tools enabled (
|
|
238
|
+
// All group tools enabled (166 Native / 139 WASM — see TOOL COUNT TAXONOMY above)
|
|
201
239
|
full: [
|
|
202
240
|
"core",
|
|
203
241
|
"json",
|
|
@@ -205,6 +243,7 @@ var META_GROUPS = {
|
|
|
205
243
|
"stats",
|
|
206
244
|
"vector",
|
|
207
245
|
"admin",
|
|
246
|
+
"transactions",
|
|
208
247
|
"geo",
|
|
209
248
|
"introspection",
|
|
210
249
|
"migration",
|
|
@@ -317,14 +356,6 @@ function parseToolFilter(filterString) {
|
|
|
317
356
|
}
|
|
318
357
|
}
|
|
319
358
|
}
|
|
320
|
-
if (!startsWithExclude && enabledGroups.size > 0) {
|
|
321
|
-
const codemodeExplicitlyExcluded = parts.some(
|
|
322
|
-
(p) => p === "-codemode" || p === "-sqlite_execute_code"
|
|
323
|
-
);
|
|
324
|
-
if (!codemodeExplicitlyExcluded) {
|
|
325
|
-
enabledGroups.add("codemode");
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
359
|
return {
|
|
329
360
|
raw: filterString,
|
|
330
361
|
rules,
|
|
@@ -344,6 +375,14 @@ function isToolEnabled(tool, config) {
|
|
|
344
375
|
if (config.includedTools.has(tool.name) || config.includedTools.has(baseName)) {
|
|
345
376
|
return true;
|
|
346
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
|
+
}
|
|
347
386
|
return config.enabledGroups.has(tool.group);
|
|
348
387
|
}
|
|
349
388
|
function filterTools(tools, config) {
|
|
@@ -379,232 +418,6 @@ function getFilterSummary(config) {
|
|
|
379
418
|
return lines.join("\n");
|
|
380
419
|
}
|
|
381
420
|
|
|
382
|
-
// src/utils/errors/suggestions.ts
|
|
383
|
-
var ERROR_SUGGESTIONS = [
|
|
384
|
-
// Validation errors
|
|
385
|
-
{
|
|
386
|
-
pattern: /invalid table name/i,
|
|
387
|
-
suggestion: "Table names must start with a letter or underscore, followed by letters, numbers, or underscores only.",
|
|
388
|
-
category: "validation" /* VALIDATION */
|
|
389
|
-
},
|
|
390
|
-
{
|
|
391
|
-
pattern: /invalid column name/i,
|
|
392
|
-
suggestion: "Column names must start with a letter or underscore, followed by letters, numbers, or underscores only.",
|
|
393
|
-
category: "validation" /* VALIDATION */
|
|
394
|
-
},
|
|
395
|
-
{
|
|
396
|
-
pattern: /invalid (view|index) name/i,
|
|
397
|
-
suggestion: "Names must start with a letter or underscore, followed by alphanumeric characters only.",
|
|
398
|
-
category: "validation" /* VALIDATION */
|
|
399
|
-
},
|
|
400
|
-
{
|
|
401
|
-
pattern: /json path must start with \$/i,
|
|
402
|
-
suggestion: "JSON paths use $ as the root. Example: $.name, $.items[0], $.nested.property",
|
|
403
|
-
category: "validation" /* VALIDATION */
|
|
404
|
-
},
|
|
405
|
-
{
|
|
406
|
-
pattern: /vector dimensions must match/i,
|
|
407
|
-
suggestion: "All vectors in comparison must have the same number of dimensions.",
|
|
408
|
-
category: "validation" /* VALIDATION */
|
|
409
|
-
},
|
|
410
|
-
{
|
|
411
|
-
pattern: /insufficient data/i,
|
|
412
|
-
suggestion: "Not enough data points for the requested analysis. Add more data or reduce the degree.",
|
|
413
|
-
category: "validation" /* VALIDATION */
|
|
414
|
-
},
|
|
415
|
-
// Resource errors — specific codes for table/column not found
|
|
416
|
-
{
|
|
417
|
-
pattern: /no such table[:\s]*(['"]?)(\w+)\1/i,
|
|
418
|
-
suggestion: "Table not found. Run sqlite_list_tables to see available tables.",
|
|
419
|
-
category: "resource" /* RESOURCE */,
|
|
420
|
-
code: "TABLE_NOT_FOUND"
|
|
421
|
-
},
|
|
422
|
-
{
|
|
423
|
-
pattern: /no such column[:\s]*(['"]?)(\w+)\1/i,
|
|
424
|
-
suggestion: "Column not found. Use sqlite_describe_table to see available columns.",
|
|
425
|
-
category: "resource" /* RESOURCE */,
|
|
426
|
-
code: "COLUMN_NOT_FOUND"
|
|
427
|
-
},
|
|
428
|
-
{
|
|
429
|
-
pattern: /has no column named/i,
|
|
430
|
-
suggestion: "Column not found in target table. Use sqlite_describe_table to verify column names before INSERT or UPDATE.",
|
|
431
|
-
category: "resource" /* RESOURCE */,
|
|
432
|
-
code: "COLUMN_NOT_FOUND"
|
|
433
|
-
},
|
|
434
|
-
{
|
|
435
|
-
pattern: /no such view[:\s]*(['"]?)(\w+)\1/i,
|
|
436
|
-
suggestion: "View not found. Run sqlite_list_views to see available views.",
|
|
437
|
-
category: "resource" /* RESOURCE */,
|
|
438
|
-
code: "VIEW_NOT_FOUND"
|
|
439
|
-
},
|
|
440
|
-
{
|
|
441
|
-
pattern: /filename.*does not exist/i,
|
|
442
|
-
suggestion: "File not found. Verify the absolute path exists and is readable.",
|
|
443
|
-
category: "resource" /* RESOURCE */,
|
|
444
|
-
code: "FILE_NOT_FOUND"
|
|
445
|
-
},
|
|
446
|
-
{
|
|
447
|
-
pattern: /table .* already exists/i,
|
|
448
|
-
suggestion: "Table already exists. Use CREATE TABLE IF NOT EXISTS or drop the existing table first.",
|
|
449
|
-
category: "resource" /* RESOURCE */
|
|
450
|
-
},
|
|
451
|
-
// JSON-specific errors — often caused by wrong column name
|
|
452
|
-
{
|
|
453
|
-
pattern: /malformed JSON/i,
|
|
454
|
-
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.",
|
|
455
|
-
category: "query" /* QUERY */,
|
|
456
|
-
code: "MALFORMED_JSON"
|
|
457
|
-
},
|
|
458
|
-
// Query errors
|
|
459
|
-
{
|
|
460
|
-
pattern: /syntax error/i,
|
|
461
|
-
suggestion: "Check SQL syntax. Common issues: missing quotes, commas, parentheses, or reserved word conflicts.",
|
|
462
|
-
category: "query" /* QUERY */
|
|
463
|
-
},
|
|
464
|
-
{
|
|
465
|
-
pattern: /UNIQUE constraint failed/i,
|
|
466
|
-
suggestion: "A row with this value already exists. Use UPDATE to modify existing data or check for duplicates.",
|
|
467
|
-
category: "query" /* QUERY */
|
|
468
|
-
},
|
|
469
|
-
{
|
|
470
|
-
pattern: /FOREIGN KEY constraint failed/i,
|
|
471
|
-
suggestion: "The referenced row does not exist. Ensure the parent record exists before inserting.",
|
|
472
|
-
category: "query" /* QUERY */
|
|
473
|
-
},
|
|
474
|
-
{
|
|
475
|
-
pattern: /NOT NULL constraint failed/i,
|
|
476
|
-
suggestion: "A required column is missing a value. Provide a value or set a default.",
|
|
477
|
-
category: "query" /* QUERY */
|
|
478
|
-
},
|
|
479
|
-
{
|
|
480
|
-
pattern: /CHECK constraint failed/i,
|
|
481
|
-
suggestion: "The value does not meet the column's check constraint requirements.",
|
|
482
|
-
category: "query" /* QUERY */
|
|
483
|
-
},
|
|
484
|
-
{
|
|
485
|
-
pattern: /incomplete input/i,
|
|
486
|
-
suggestion: "SQL statement is incomplete. Check for missing clauses, closing parentheses, or semicolons.",
|
|
487
|
-
category: "query" /* QUERY */
|
|
488
|
-
},
|
|
489
|
-
{
|
|
490
|
-
pattern: /more than one statement/i,
|
|
491
|
-
suggestion: "Only one SQL statement per call is allowed. Split multiple statements into separate calls or use sqlite_execute_code for multi-step operations.",
|
|
492
|
-
category: "query" /* QUERY */
|
|
493
|
-
},
|
|
494
|
-
{
|
|
495
|
-
pattern: /too few parameter/i,
|
|
496
|
-
suggestion: "Not enough parameter values provided for the prepared statement placeholders (?). Ensure params array matches the number of ? placeholders in the query.",
|
|
497
|
-
category: "query" /* QUERY */
|
|
498
|
-
},
|
|
499
|
-
// Connection errors
|
|
500
|
-
{
|
|
501
|
-
pattern: /not connected/i,
|
|
502
|
-
suggestion: "Database connection not established. Ensure the database is configured and connected.",
|
|
503
|
-
category: "connection" /* CONNECTION */
|
|
504
|
-
},
|
|
505
|
-
{
|
|
506
|
-
pattern: /cannot start a transaction within a transaction/i,
|
|
507
|
-
suggestion: "A transaction is already active. Commit or rollback the current transaction first, or use sqlite_transaction_execute for atomic multi-statement operations.",
|
|
508
|
-
category: "query" /* QUERY */,
|
|
509
|
-
code: "TRANSACTION_CONFLICT"
|
|
510
|
-
},
|
|
511
|
-
{
|
|
512
|
-
pattern: /database is locked/i,
|
|
513
|
-
suggestion: "Database is being used by another process. Wait and retry, or check for long-running transactions.",
|
|
514
|
-
category: "connection" /* CONNECTION */
|
|
515
|
-
},
|
|
516
|
-
// Permission errors
|
|
517
|
-
{
|
|
518
|
-
pattern: /readonly database/i,
|
|
519
|
-
suggestion: "Database is in read-only mode. Check file permissions or connection settings.",
|
|
520
|
-
category: "permission" /* PERMISSION */
|
|
521
|
-
},
|
|
522
|
-
{
|
|
523
|
-
pattern: /attempt to write a readonly/i,
|
|
524
|
-
suggestion: "Write operations are not allowed. Check database configuration.",
|
|
525
|
-
category: "permission" /* PERMISSION */
|
|
526
|
-
},
|
|
527
|
-
// Codemode errors
|
|
528
|
-
{
|
|
529
|
-
pattern: /code validation failed/i,
|
|
530
|
-
suggestion: "Check for blocked patterns: require(), process., eval(), Function(), import(). Use sqlite.* API instead.",
|
|
531
|
-
category: "validation" /* VALIDATION */
|
|
532
|
-
},
|
|
533
|
-
{
|
|
534
|
-
pattern: /rate limit exceeded/i,
|
|
535
|
-
suggestion: "Wait before retrying. Combine multiple operations into fewer execute_code calls.",
|
|
536
|
-
category: "permission" /* PERMISSION */
|
|
537
|
-
},
|
|
538
|
-
{
|
|
539
|
-
pattern: /execution timed out/i,
|
|
540
|
-
suggestion: "Reduce code complexity or increase timeout (max 30s). Break into smaller operations.",
|
|
541
|
-
category: "query" /* QUERY */
|
|
542
|
-
},
|
|
543
|
-
{
|
|
544
|
-
pattern: /sandbox.*not initialized/i,
|
|
545
|
-
suggestion: "Internal sandbox error. Retry the operation.",
|
|
546
|
-
category: "internal" /* INTERNAL */
|
|
547
|
-
}
|
|
548
|
-
];
|
|
549
|
-
function findSuggestion(message) {
|
|
550
|
-
for (const entry of ERROR_SUGGESTIONS) {
|
|
551
|
-
if (entry.pattern.test(message)) {
|
|
552
|
-
return {
|
|
553
|
-
suggestion: entry.suggestion,
|
|
554
|
-
category: entry.category,
|
|
555
|
-
code: entry.code
|
|
556
|
-
};
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
return null;
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
// src/utils/errors/base.ts
|
|
563
|
-
var REFINABLE_CODES = /* @__PURE__ */ new Set([
|
|
564
|
-
"DB_QUERY_FAILED",
|
|
565
|
-
"DB_WRITE_FAILED",
|
|
566
|
-
"QUERY_ERROR",
|
|
567
|
-
"RESOURCE_ERROR",
|
|
568
|
-
"UNKNOWN_ERROR"
|
|
569
|
-
]);
|
|
570
|
-
var DbMcpError = class extends Error {
|
|
571
|
-
/** Error category for classification */
|
|
572
|
-
category;
|
|
573
|
-
/** Module-prefixed error code (e.g., DB_QUERY_FAILED) */
|
|
574
|
-
code;
|
|
575
|
-
/** Actionable suggestion for resolving the error */
|
|
576
|
-
suggestion;
|
|
577
|
-
/** Additional error details */
|
|
578
|
-
details;
|
|
579
|
-
/** Whether the error is recoverable (can retry) */
|
|
580
|
-
recoverable;
|
|
581
|
-
constructor(message, code, category, options) {
|
|
582
|
-
super(message, { cause: options?.cause });
|
|
583
|
-
this.name = this.constructor.name;
|
|
584
|
-
this.category = category;
|
|
585
|
-
this.recoverable = options?.recoverable ?? false;
|
|
586
|
-
this.details = options?.details;
|
|
587
|
-
const match = findSuggestion(message);
|
|
588
|
-
this.suggestion = options?.suggestion ?? match?.suggestion;
|
|
589
|
-
this.code = match?.code && REFINABLE_CODES.has(code) ? match.code : code;
|
|
590
|
-
Error.captureStackTrace?.(this, this.constructor);
|
|
591
|
-
}
|
|
592
|
-
/**
|
|
593
|
-
* Convert to structured response object
|
|
594
|
-
*/
|
|
595
|
-
toResponse() {
|
|
596
|
-
return {
|
|
597
|
-
success: false,
|
|
598
|
-
error: this.message,
|
|
599
|
-
code: this.code,
|
|
600
|
-
category: this.category,
|
|
601
|
-
suggestion: this.suggestion,
|
|
602
|
-
recoverable: this.recoverable,
|
|
603
|
-
details: this.details
|
|
604
|
-
};
|
|
605
|
-
}
|
|
606
|
-
};
|
|
607
|
-
|
|
608
421
|
// src/utils/logger/error-codes.ts
|
|
609
422
|
function createErrorCode(module, code) {
|
|
610
423
|
return {
|
|
@@ -646,6 +459,8 @@ var ModuleLogger = class {
|
|
|
646
459
|
this.parent = parent;
|
|
647
460
|
this.module = module;
|
|
648
461
|
}
|
|
462
|
+
parent;
|
|
463
|
+
module;
|
|
649
464
|
withModule(context) {
|
|
650
465
|
return { ...context, module: this.module };
|
|
651
466
|
}
|
|
@@ -927,4 +742,817 @@ if (envLevel && envLevel in LEVEL_PRIORITY_CHECK) {
|
|
|
927
742
|
logger.setLevel(envLevel);
|
|
928
743
|
}
|
|
929
744
|
|
|
930
|
-
|
|
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 };
|