db-mcp 2.0.0 → 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 +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-E5IESRTK.js +489 -0
- package/dist/{chunk-5Y42NPBP.js → chunk-FR65YPAH.js} +4657 -1830
- package/dist/{chunk-645ZEFLA.js → chunk-L552U3QS.js} +887 -309
- package/dist/{chunk-WBER5YY4.js → chunk-THATOQRT.js} +1026 -455
- 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-6C3AJI4I.js} +61 -17
- package/dist/{sqlite-native-JXMCFQBA.js → sqlite-native-ZSSWCTYC.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 +25 -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,177 +0,0 @@
|
|
|
1
|
-
# db-mcp Code Mode Testing: [geo]
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> **Do not track progress in this file.** Track your test progress, coverage matrix, and findings in your internal task tracking system (artifact). However, you SHOULD edit this file to fix any factual errors, broken code, or incorrect assertions in the test prompts.
|
|
5
|
-
> If there is nothing to fix, don't update UNRELEASED.md.
|
|
6
|
-
> We're currently testing Native mode.
|
|
7
|
-
|
|
8
|
-
**Step 1:** Read `C:\Users\chris\Desktop\db-mcp\src\constants\server-instructions\gotchas.md` using `view_file`.
|
|
9
|
-
|
|
10
|
-
**Step 2:** Conduct an exhaustive test of the **geo** tool group using ONLY `sqlite_execute_code`. Do not use direct tool calls or terminal.
|
|
11
|
-
|
|
12
|
-
**Step 3:** The agent should update C:\Users\chris\Desktop\db-mcp\UNRELEASED.md with any/all changes/fixes.
|
|
13
|
-
|
|
14
|
-
## WASM Mode
|
|
15
|
-
|
|
16
|
-
> When testing against a **WASM backend** (`--sqlite` / sql.js), apply these adjustments:
|
|
17
|
-
|
|
18
|
-
- **Skip Phase 2** entirely — all 7 SpatiaLite tools (items 7-14) are `[NATIVE ONLY]`.
|
|
19
|
-
- **Phase 4** (Zod Validation): Skip items 22-27 (all `spatialite*` tools) — `[NATIVE ONLY]`.
|
|
20
|
-
- Phases 1, 3, 5, 6 are fully WASM-compatible (4 Haversine tools: `distance`, `nearby`, `boundingBox`, `cluster`).
|
|
21
|
-
|
|
22
|
-
## Reporting Format
|
|
23
|
-
|
|
24
|
-
- ❌ Fail: Tool errors or produces incorrect results
|
|
25
|
-
- ⚠️ Issue: Unexpected behavior or improvement opportunity
|
|
26
|
-
- 📦 Payload: Unnecessarily large response — monitor `metrics.tokenEstimate`.
|
|
27
|
-
|
|
28
|
-
## Test Database Schema
|
|
29
|
-
|
|
30
|
-
| Table | Rows | Key Columns |
|
|
31
|
-
| -------------- | ---- | ----------------------------------------- |
|
|
32
|
-
| test_locations | 15 | id, name, city, latitude, longitude, type |
|
|
33
|
-
|
|
34
|
-
**Key coordinates:**
|
|
35
|
-
|
|
36
|
-
| Name | City | Lat | Lng |
|
|
37
|
-
| ------------------ | ------------- | -------- | --------- |
|
|
38
|
-
| Central Park | New York | 40.7829 | -73.9654 |
|
|
39
|
-
| Eiffel Tower | Paris | 48.8584 | 2.2945 |
|
|
40
|
-
| Big Ben | London | 51.5007 | -0.1246 |
|
|
41
|
-
| Tokyo Tower | Tokyo | 35.6586 | 139.7454 |
|
|
42
|
-
| Sydney Opera House | Sydney | -33.8568 | 151.2153 |
|
|
43
|
-
| Golden Gate Bridge | San Francisco | 37.8199 | -122.4783 |
|
|
44
|
-
|
|
45
|
-
## Testing Requirements
|
|
46
|
-
|
|
47
|
-
> [!CAUTION]
|
|
48
|
-
> **Zero tolerance for raw MCP errors.** Report as ❌.
|
|
49
|
-
|
|
50
|
-
1. **Batched scripting**: Bundle checks with `failures` array.
|
|
51
|
-
2. **Error path testing**: Every tool with `{}` (Zod) and domain error.
|
|
52
|
-
3. **Token tracking**: Monitor `metrics.tokenEstimate`.
|
|
53
|
-
4. **Coverage Matrix**: `| Tool | Happy Path | Domain Error | Zod Error |`
|
|
54
|
-
5. **Deterministic checklist first**.
|
|
55
|
-
6. **Code Over Docs**: Fix the handler code if standards (Structured Errors/Zod) are violated. Do NOT change docs/prompts to accommodate broken code.
|
|
56
|
-
|
|
57
|
-
## Structured Error Response Pattern
|
|
58
|
-
|
|
59
|
-
Handler error ✅ = JSON with `success` + `error`. MCP error ❌ = raw text, `isError: true`.
|
|
60
|
-
|
|
61
|
-
### Zod Refinement Leak — Coordinate Params
|
|
62
|
-
|
|
63
|
-
Geo tools have coordinate params with `.min(-90).max(90)` / `.min(-180).max(180)` refinements. These leak as raw MCP `-32602` if not removed from the schema. Test `lat1: 91` to verify the handler catches the error.
|
|
64
|
-
|
|
65
|
-
## Cleanup
|
|
66
|
-
|
|
67
|
-
- Temporary tables: `temp_*` prefix. Drop at end of script.
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Phase 1: Haversine Tools — Happy Paths (batched)
|
|
72
|
-
|
|
73
|
-
> These 4 tools work in both Native and WASM modes.
|
|
74
|
-
|
|
75
|
-
1. `sqlite.geo.distance({lat1: 40.7829, lon1: -73.9654, lat2: 48.8584, lon2: 2.2945})` → NYC to Paris ≈ 5,837 km (±50 km)
|
|
76
|
-
2. `sqlite.geo.distance({lat1: 40.7829, lon1: -73.9654, lat2: 37.8199, lon2: -122.4783})` → NYC to SF ≈ 4,130 km
|
|
77
|
-
3. `sqlite.geo.nearby({table: "test_locations", latColumn: "latitude", lonColumn: "longitude", centerLat: 40.758, centerLon: -73.9855, radius: 10})` → 3 NYC locations
|
|
78
|
-
4. `sqlite.geo.nearby({table: "test_locations", latColumn: "latitude", lonColumn: "longitude", centerLat: 48.8584, centerLon: 2.2945, radius: 10})` → 3 Paris locations
|
|
79
|
-
5. `sqlite.geo.boundingBox({table: "test_locations", latColumn: "latitude", lonColumn: "longitude", minLat: 35, maxLat: 55, minLon: -130, maxLon: -70})` → US locations (4 results)
|
|
80
|
-
6. `sqlite.geo.cluster({table: "test_locations", latColumn: "latitude", lonColumn: "longitude", gridSize: 5})` → ~5 clusters
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## Phase 2: SpatiaLite Tools `[NATIVE ONLY]` — Happy Paths (sequential)
|
|
85
|
-
|
|
86
|
-
7. `sqlite.geo.spatialiteLoad()` → load extension, verify version
|
|
87
|
-
8. `sqlite.geo.spatialiteCreateTable({tableName: "temp_cm_spatial", geometryColumn: "geom", geometryType: "POINT", srid: 4326, additionalColumns: [{name: "name", type: "TEXT"}]})` → success
|
|
88
|
-
9. `sqlite.geo.spatialiteImport({tableName: "temp_cm_spatial", format: "wkt", data: "POINT(-73.9654 40.7829)", additionalData: {name: "Test Point"}})` → success
|
|
89
|
-
10. `sqlite.geo.spatialiteQuery({query: "SELECT name, AsText(geom) as geom_text FROM temp_cm_spatial"})` → WKT geometry
|
|
90
|
-
11. `sqlite.geo.spatialiteTransform({operation: "buffer", geometry1: "POINT(-73.9654 40.7829)", distance: 0.01, srid: 4326})` → buffered polygon
|
|
91
|
-
12. `sqlite.geo.spatialiteIndex({tableName: "temp_cm_spatial", geometryColumn: "geom", action: "create"})` → R-Tree index
|
|
92
|
-
13. `sqlite.geo.spatialiteAnalyze({analysisType: "spatial_extent", sourceTable: "temp_cm_spatial", geometryColumn: "geom"})` → spatial extent
|
|
93
|
-
14. Cleanup: drop `temp_cm_spatial`
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Phase 3: Geo Domain Errors (batched)
|
|
98
|
-
|
|
99
|
-
🔴 15. `sqlite.geo.nearby({table: "nonexistent_xyz", latColumn: "lat", lonColumn: "lng", centerLat: 0, centerLon: 0, radius: 100})` → `{success: false}`
|
|
100
|
-
🔴 16. `sqlite.geo.distance({lat1: 91, lon1: 0, lat2: 0, lon2: 0})` → `{success: false, error: "Invalid lat1: 91..."}` — handler error, NOT raw MCP `-32602` (Zod refinement leak test)
|
|
101
|
-
🔴 17. `sqlite.geo.distance({lat1: 0, lon1: 181, lat2: 0, lon2: 0})` → `{success: false}` — invalid longitude
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## Phase 4: Geo Zod Validation (batched)
|
|
106
|
-
|
|
107
|
-
🔴 18. `sqlite.geo.distance({})` → `{success: false}`
|
|
108
|
-
🔴 19. `sqlite.geo.nearby({})` → `{success: false}`
|
|
109
|
-
🔴 20. `sqlite.geo.boundingBox({})` → `{success: false}`
|
|
110
|
-
🔴 21. `sqlite.geo.cluster({})` → `{success: false}`
|
|
111
|
-
🔴 22. `sqlite.geo.spatialiteCreateTable({})` `[NATIVE ONLY]` → `{success: false}`
|
|
112
|
-
🔴 23. `sqlite.geo.spatialiteQuery({})` `[NATIVE ONLY]` → `{success: false}`
|
|
113
|
-
🔴 24. `sqlite.geo.spatialiteAnalyze({})` `[NATIVE ONLY]` → `{success: false}`
|
|
114
|
-
🔴 25. `sqlite.geo.spatialiteIndex({})` `[NATIVE ONLY]` → `{success: false}`
|
|
115
|
-
🔴 26. `sqlite.geo.spatialiteTransform({})` `[NATIVE ONLY]` → `{success: false}`
|
|
116
|
-
🔴 27. `sqlite.geo.spatialiteImport({})` `[NATIVE ONLY]` → `{success: false}`
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## Phase 5: Wrong-Type Numeric Coercion
|
|
121
|
-
|
|
122
|
-
🔴 28. `sqlite.geo.nearby({table: "test_locations", latColumn: "latitude", lonColumn: "longitude", centerLat: 40.758, centerLon: -73.9855, radius: "abc"})` → handler error, NOT raw MCP
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Phase 6: Multi-Step Workflow
|
|
127
|
-
|
|
128
|
-
### 6.1 — Proximity analysis pipeline
|
|
129
|
-
|
|
130
|
-
```javascript
|
|
131
|
-
const failures = [];
|
|
132
|
-
// NYC to major cities
|
|
133
|
-
const pairs = [
|
|
134
|
-
{ name: "Paris", lat: 48.8584, lon: 2.2945 },
|
|
135
|
-
{ name: "London", lat: 51.5007, lon: -0.1246 },
|
|
136
|
-
{ name: "Tokyo", lat: 35.6586, lon: 139.7454 },
|
|
137
|
-
];
|
|
138
|
-
const distances = {};
|
|
139
|
-
for (const p of pairs) {
|
|
140
|
-
const d = await sqlite.geo.distance({
|
|
141
|
-
lat1: 40.7829,
|
|
142
|
-
lon1: -73.9654,
|
|
143
|
-
lat2: p.lat,
|
|
144
|
-
lon2: p.lon,
|
|
145
|
-
});
|
|
146
|
-
distances[p.name] = d.distance;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Nearby search
|
|
150
|
-
const nearby = await sqlite.geo.nearby({
|
|
151
|
-
table: "test_locations",
|
|
152
|
-
latColumn: "latitude",
|
|
153
|
-
lonColumn: "longitude",
|
|
154
|
-
centerLat: 40.758,
|
|
155
|
-
centerLon: -73.9855,
|
|
156
|
-
radius: 50,
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
return {
|
|
160
|
-
failures,
|
|
161
|
-
success: failures.length === 0,
|
|
162
|
-
distances,
|
|
163
|
-
nearbyCount: nearby?.rowCount || nearby?.results?.length,
|
|
164
|
-
};
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## Post-Test Procedures
|
|
170
|
-
|
|
171
|
-
1. **Cleanup**: Drop `temp_*` spatial tables
|
|
172
|
-
2. **Triage findings**: Create implementation plan if issues found
|
|
173
|
-
3. **Scope of fixes**: Handler code, server-instructions, this prompt
|
|
174
|
-
4. **Validate**: Instruct the user to run the test suite (Vitest/Playwright), lint, and typecheck. Do NOT run them yourself.
|
|
175
|
-
5. **Commit**: Stage and commit — do NOT push
|
|
176
|
-
6. **Token audit**: Report most expensive block
|
|
177
|
-
7. **Final summary**: After testing/re-testing
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
# db-mcp Code Mode Testing: [introspection]
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> **Do not track progress in this file.** Track your test progress, coverage matrix, and findings in your internal task tracking system (artifact). However, you SHOULD edit this file to fix any factual errors, broken code, or incorrect assertions in the test prompts.
|
|
5
|
-
> If there is nothing to fix, don't update UNRELEASED.md.
|
|
6
|
-
> We're currently testing Native mode.
|
|
7
|
-
|
|
8
|
-
**Step 1:** Read `C:\Users\chris\Desktop\db-mcp\src\constants\server-instructions\gotchas.md` using `view_file`.
|
|
9
|
-
|
|
10
|
-
**Step 2:** Conduct an exhaustive test of the **introspection** tool group using ONLY `sqlite_execute_code`. Do not use direct tool calls or terminal.
|
|
11
|
-
|
|
12
|
-
**Step 3:** The agent should update C:\Users\chris\Desktop\db-mcp\UNRELEASED.md with any/all changes/fixes.
|
|
13
|
-
|
|
14
|
-
## WASM Mode
|
|
15
|
-
|
|
16
|
-
> When testing against a **WASM backend** (`--sqlite` / sql.js): All 9 introspection tools are fully WASM-compatible. No phases to skip.
|
|
17
|
-
>
|
|
18
|
-
> **Minor difference**: `schemaSnapshot` may report `test_articles_fts` in virtual tables but it is not queryable (FTS5 is unavailable in WASM). Treat its presence as expected but non-functional.
|
|
19
|
-
|
|
20
|
-
## Reporting Format
|
|
21
|
-
|
|
22
|
-
- ❌ Fail: Tool errors or produces incorrect results
|
|
23
|
-
- ⚠️ Issue: Unexpected behavior or improvement opportunity
|
|
24
|
-
- 📦 Payload: Unnecessarily large response — monitor `metrics.tokenEstimate`.
|
|
25
|
-
|
|
26
|
-
## Test Database Schema
|
|
27
|
-
|
|
28
|
-
| Table | Rows | Key Columns |
|
|
29
|
-
| ----------------- | ---- | ------------------------------------------------------ |
|
|
30
|
-
| test_products | 16 | id, name, price, category |
|
|
31
|
-
| test_orders | 20 | id, product_id (FK→test_products), total_price, status |
|
|
32
|
-
| test_measurements | 200 | id, sensor_id, temperature, humidity, pressure |
|
|
33
|
-
|
|
34
|
-
**Key FK:** `test_orders.product_id → test_products.id`
|
|
35
|
-
**Redundant index (intentional):** `idx_orders_status` is a prefix of `idx_orders_status_date` — used to test index audit tools.
|
|
36
|
-
|
|
37
|
-
> All introspection tools are **read-only**. No cleanup required.
|
|
38
|
-
|
|
39
|
-
## Testing Requirements
|
|
40
|
-
|
|
41
|
-
> [!CAUTION]
|
|
42
|
-
> **Zero tolerance for raw MCP errors.** Report as ❌.
|
|
43
|
-
|
|
44
|
-
1. **Batched scripting**: Bundle checks with `failures` array.
|
|
45
|
-
2. **Error path testing**: Every tool with `{}` (Zod) and domain error.
|
|
46
|
-
3. **Token tracking**: Monitor `metrics.tokenEstimate`.
|
|
47
|
-
4. **Coverage Matrix**: `| Tool | Happy Path | Domain Error | Zod Error |`
|
|
48
|
-
5. **Deterministic checklist first**.
|
|
49
|
-
6. **Code Over Docs**: Fix the handler code if standards (Structured Errors/Zod) are violated. Do NOT change docs/prompts to accommodate broken code.
|
|
50
|
-
|
|
51
|
-
## Structured Error Response Pattern
|
|
52
|
-
|
|
53
|
-
Handler error ✅ = JSON with `success` + `error`. MCP error ❌ = raw text, `isError: true`.
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## Phase 1: Graph Analysis — Happy Paths (batched)
|
|
58
|
-
|
|
59
|
-
1. `sqlite.introspection.dependencyGraph({})` → nodes ≥ 2, edges includes `test_orders → test_products` (using `from` and `to`)
|
|
60
|
-
2. `sqlite.introspection.topologicalSort({})` → `test_products` before `test_orders` (FK dependency); `hasCycles: false`
|
|
61
|
-
3. `sqlite.introspection.cascadeSimulator({table: "test_products"})` → affectedTables includes `test_orders`
|
|
62
|
-
4. `sqlite.introspection.cascadeSimulator({table: "test_measurements"})` → affectedTables empty
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Phase 2: Schema Analysis — Happy Paths (batched)
|
|
67
|
-
|
|
68
|
-
5. `sqlite.introspection.schemaSnapshot({})` → `snapshot.tables` ≥ 11; `stats.indexes` ≥ 4; `generatedAt` present
|
|
69
|
-
6. `sqlite.introspection.constraintAnalysis({})` → `findings` array; `summary.totalFindings` ≥ 0
|
|
70
|
-
7. `sqlite.introspection.migrationRisks({statements: ["DROP TABLE test_products"]})` → risks non-empty, category is "destructive"
|
|
71
|
-
8. `sqlite.introspection.migrationRisks({statements: ["ALTER TABLE test_users ADD COLUMN age INTEGER"]})` → low risk
|
|
72
|
-
9. `sqlite.introspection.migrationRisks({statements: ["CREATE TABLE new_table (id INTEGER PRIMARY KEY)", "DROP TABLE test_products"]})` → `summary.totalStatements: 2`, `summary.highestRisk` ≥ "high"
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Phase 3: Diagnostics — Happy Paths (batched)
|
|
77
|
-
|
|
78
|
-
10. `sqlite.introspection.storageAnalysis({})` → `database.pageSize > 0`, `database.totalPages > 0`; tables array present
|
|
79
|
-
11. `sqlite.introspection.indexAudit({})` → `findings` array; redundant index for `idx_orders_status`
|
|
80
|
-
12. `sqlite.introspection.queryPlan({sql: "SELECT * FROM test_products WHERE category = 'electronics'"})` → plan array non-empty
|
|
81
|
-
13. `sqlite.introspection.queryPlan({sql: "SELECT * FROM test_orders WHERE status = 'completed'"})` → index scan array contains `idx_orders_status_date`
|
|
82
|
-
14. `sqlite.introspection.queryPlan({sql: "SELECT * FROM test_products WHERE name = 'Laptop Pro 15'"})` → full scan array contains `test_products` (no index on name)
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## Phase 4: Advanced Optional Parameters (batched)
|
|
87
|
-
|
|
88
|
-
> Test these granular optional parameters. Note: While previously thought to be Code Mode-only, these parameters are actually available in both Code Mode and direct tool calls.
|
|
89
|
-
|
|
90
|
-
15. `sqlite.introspection.schemaSnapshot({sections: ["tables"]})` → only tables section (no views/indexes)
|
|
91
|
-
16. `sqlite.introspection.schemaSnapshot({compact: true})` → compact mode omits columns from table entries
|
|
92
|
-
17. `sqlite.introspection.constraintAnalysis({table: "test_orders"})` → filtered to test_orders only
|
|
93
|
-
18. `sqlite.introspection.constraintAnalysis({checks: ["unindexed_fk"]})` → filtered to unindexed FK findings
|
|
94
|
-
19. `sqlite.introspection.storageAnalysis({includeTableDetails: false})` → database summary only (no tables array)
|
|
95
|
-
20. `sqlite.introspection.indexAudit({table: "test_orders"})` → filtered to test_orders indexes only
|
|
96
|
-
21. `sqlite.introspection.topologicalSort({direction: "drop"})` → drop order: test_orders before test_products
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## Phase 5: Introspection Domain Errors (batched)
|
|
101
|
-
|
|
102
|
-
🔴 22. `sqlite.introspection.cascadeSimulator({table: "nonexistent_xyz"})` → `{success: false}`
|
|
103
|
-
🔴 23. `sqlite.introspection.queryPlan({sql: "DELETE FROM test_products WHERE id = 1"})` → `{success: false, error: "...only SELECT..."}`
|
|
104
|
-
🔴 24. `sqlite.introspection.storageAnalysis({limit: 0})` → Zod validation error (min: 1)
|
|
105
|
-
🔴 25. `sqlite.introspection.migrationRisks({statements: []})` → report behavior for empty array
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## Phase 6: Introspection Zod Validation (batched)
|
|
110
|
-
|
|
111
|
-
🔴 26. `sqlite.introspection.dependencyGraph({})` → success or handler error (no required params)
|
|
112
|
-
🔴 27. `sqlite.introspection.topologicalSort({})` → success or handler error (no required params)
|
|
113
|
-
🔴 28. `sqlite.introspection.cascadeSimulator({})` → `{success: false}` (missing `table`)
|
|
114
|
-
🔴 29. `sqlite.introspection.schemaSnapshot({})` → success or handler error (no required params)
|
|
115
|
-
🔴 30. `sqlite.introspection.constraintAnalysis({})` → success or handler error (no required params)
|
|
116
|
-
🔴 31. `sqlite.introspection.migrationRisks({})` → `{success: false}` (missing `statements`)
|
|
117
|
-
🔴 32. `sqlite.introspection.storageAnalysis({})` → success or handler error (no required params)
|
|
118
|
-
🔴 33. `sqlite.introspection.indexAudit({})` → success or handler error (no required params)
|
|
119
|
-
🔴 34. `sqlite.introspection.queryPlan({})` → `{success: false}` (missing `sql`)
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Phase 7: Multi-Step Workflow
|
|
124
|
-
|
|
125
|
-
### 7.1 — Full database audit pipeline
|
|
126
|
-
|
|
127
|
-
```javascript
|
|
128
|
-
const failures = [];
|
|
129
|
-
// Step 1: Get dependency graph
|
|
130
|
-
const graph = await sqlite.introspection.dependencyGraph({});
|
|
131
|
-
if (!graph.nodes || graph.nodes.length < 2)
|
|
132
|
-
failures.push("graph has too few nodes");
|
|
133
|
-
|
|
134
|
-
// Step 2: Schema snapshot
|
|
135
|
-
const snapshot = await sqlite.introspection.schemaSnapshot({ compact: true });
|
|
136
|
-
if (!snapshot.snapshot?.tables) failures.push("snapshot missing tables");
|
|
137
|
-
|
|
138
|
-
// Step 3: Index audit
|
|
139
|
-
const audit = await sqlite.introspection.indexAudit({});
|
|
140
|
-
const redundant = audit.findings?.filter((f) => f.type === "redundant");
|
|
141
|
-
|
|
142
|
-
// Step 4: Storage analysis
|
|
143
|
-
const storage = await sqlite.introspection.storageAnalysis({});
|
|
144
|
-
|
|
145
|
-
// Step 5: Constraint analysis
|
|
146
|
-
const constraints = await sqlite.introspection.constraintAnalysis({});
|
|
147
|
-
|
|
148
|
-
return {
|
|
149
|
-
failures,
|
|
150
|
-
success: failures.length === 0,
|
|
151
|
-
summary: {
|
|
152
|
-
tableCount: snapshot.snapshot?.tables?.length,
|
|
153
|
-
fkRelationships: graph.stats?.totalRelationships,
|
|
154
|
-
redundantIndexes: redundant?.length,
|
|
155
|
-
storageSizeBytes: storage.database?.totalSizeBytes,
|
|
156
|
-
constraintFindings: constraints.summary?.totalFindings,
|
|
157
|
-
},
|
|
158
|
-
};
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
### 7.2 — Query optimization analysis
|
|
162
|
-
|
|
163
|
-
```javascript
|
|
164
|
-
const queries = [
|
|
165
|
-
"SELECT * FROM test_products WHERE category = 'electronics'",
|
|
166
|
-
"SELECT * FROM test_orders WHERE status = 'completed'",
|
|
167
|
-
"SELECT * FROM test_products WHERE name = 'Laptop Pro 15'",
|
|
168
|
-
];
|
|
169
|
-
const plans = [];
|
|
170
|
-
for (const sql of queries) {
|
|
171
|
-
const plan = await sqlite.introspection.queryPlan({ sql });
|
|
172
|
-
plans.push({
|
|
173
|
-
sql: sql.substring(0, 50),
|
|
174
|
-
fullScans: plan.analysis?.fullScans?.length,
|
|
175
|
-
indexScans: plan.analysis?.indexScans?.length,
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
return plans;
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## Post-Test Procedures
|
|
184
|
-
|
|
185
|
-
1. **Triage findings**: Create implementation plan if issues found
|
|
186
|
-
2. **Scope of fixes**: Handler code, server-instructions, this prompt
|
|
187
|
-
3. **Validate**: Instruct the user to run the test suite (Vitest/Playwright), lint, and typecheck. Do NOT run them yourself.
|
|
188
|
-
4. **Commit**: Stage and commit — do NOT push
|
|
189
|
-
5. **Token audit**: Report most expensive block
|
|
190
|
-
6. **Final summary**: After testing/re-testing
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
# db-mcp Code Mode Testing: [json]
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> **Do not track progress in this file.** Track your test progress, coverage matrix, and findings in your internal task tracking system (artifact). However, you SHOULD edit this file to fix any factual errors, broken code, or incorrect assertions in the test prompts.
|
|
5
|
-
> If there is nothing to fix, don't update UNRELEASED.md.
|
|
6
|
-
> We're currently testing Native mode.
|
|
7
|
-
|
|
8
|
-
**Step 1:** Read `C:\Users\chris\Desktop\db-mcp\src\constants\server-instructions\gotchas.md` using `view_file`.
|
|
9
|
-
|
|
10
|
-
**Step 2:** Conduct an exhaustive test of the **json** tool group using ONLY `sqlite_execute_code`. Do not use direct tool calls or terminal.
|
|
11
|
-
|
|
12
|
-
**Step 3:** The agent should update C:\Users\chris\Desktop\db-mcp\UNRELEASED.md with any/all changes/fixes.
|
|
13
|
-
|
|
14
|
-
## WASM Mode
|
|
15
|
-
|
|
16
|
-
> When testing against a **WASM backend** (`--sqlite` / sql.js): All 24 JSON tools are fully WASM-compatible. No phases to skip or adjust.
|
|
17
|
-
|
|
18
|
-
## Reporting Format
|
|
19
|
-
|
|
20
|
-
- ❌ Fail: Tool errors or produces incorrect results
|
|
21
|
-
- ⚠️ Issue: Unexpected behavior or improvement opportunity
|
|
22
|
-
- 📦 Payload: Unnecessarily large response — monitor `metrics.tokenEstimate` for every operation.
|
|
23
|
-
|
|
24
|
-
## Test Database Schema
|
|
25
|
-
|
|
26
|
-
| Table | Rows | Key Columns |
|
|
27
|
-
| --------------- | ---- | -------------------------------------------------------------- |
|
|
28
|
-
| test_products | 16 | id, name, price (REAL), category (TEXT lowercase) |
|
|
29
|
-
| test_jsonb_docs | 6 | id, doc (JSON), metadata (JSON), tags (JSON array), created_at |
|
|
30
|
-
| test_events | 100 | id, event_type, user_id (INT), payload (JSON), event_date |
|
|
31
|
-
|
|
32
|
-
**test_jsonb_docs data:**
|
|
33
|
-
|
|
34
|
-
| id | doc.type | doc.author | doc.views | metadata.source | tags |
|
|
35
|
-
| --- | -------- | ---------- | --------- | --------------- | ------------------------------------ |
|
|
36
|
-
| 1 | article | Alice | 1250 | blog | ["database","tutorial","beginner"] |
|
|
37
|
-
| 2 | article | Bob | 890 | docs | ["json","advanced","sqlite"] |
|
|
38
|
-
| 3 | video | Carol | 5400 | youtube | ["mcp","protocol","ai"] |
|
|
39
|
-
| 4 | article | David | 670 | wiki | ["fts5","search","indexing"] |
|
|
40
|
-
| 5 | podcast | Eve | — | spotify | ["performance","tips","podcast"] |
|
|
41
|
-
| 6 | article | Frank | 2100 | medium | ["vector","embeddings","similarity"] |
|
|
42
|
-
|
|
43
|
-
Row 4 has nested: `doc.nested.level1.level2 = "deep value"`
|
|
44
|
-
|
|
45
|
-
## Testing Requirements
|
|
46
|
-
|
|
47
|
-
> [!CAUTION]
|
|
48
|
-
> **Zero tolerance for raw MCP errors.** Report as ❌.
|
|
49
|
-
|
|
50
|
-
1. **Batched scripting**: Bundle checks into single `sqlite_execute_code` calls with `failures` array.
|
|
51
|
-
2. **Error path testing**: Every tool tested with `{}` (Zod) and domain error. Must return `{success: false}`.
|
|
52
|
-
3. **Token tracking**: Monitor `metrics.tokenEstimate`. Report most expensive block.
|
|
53
|
-
4. **Coverage Matrix**: `| Tool | Happy Path | Domain Error | Zod Error |`
|
|
54
|
-
5. **Deterministic checklist first**.
|
|
55
|
-
6. **Code Over Docs**: Fix the handler code if standards (Structured Errors/Zod) are violated. Do NOT change docs/prompts to accommodate broken code.
|
|
56
|
-
|
|
57
|
-
## Structured Error Response Pattern
|
|
58
|
-
|
|
59
|
-
```json
|
|
60
|
-
{ "success": false, "error": "Human-readable error message" }
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Handler error ✅ = JSON with `success` + `error` fields. MCP error ❌ = raw text, `isError: true`.
|
|
64
|
-
|
|
65
|
-
## Cleanup
|
|
66
|
-
|
|
67
|
-
- Temporary tables: `temp_*` prefix. Drop at end of each script.
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Phase 1: JSON Read Tools — Happy Paths (batched)
|
|
72
|
-
|
|
73
|
-
> Bundle items 1-19 into 1-2 `sqlite_execute_code` calls.
|
|
74
|
-
|
|
75
|
-
1. `sqlite.json.extract({table: "test_jsonb_docs", column: "doc", path: "$.author", whereClause: "id = 1"})` → contains `"Alice"`
|
|
76
|
-
2. `sqlite.json.extract({table: "test_jsonb_docs", column: "doc", path: "$.nested.level1.level2", whereClause: "id = 4"})` → `"deep value"`
|
|
77
|
-
3. `sqlite.json.keys({table: "test_jsonb_docs", column: "doc", whereClause: "id = 1"})` → keys include `type`, `title`, `author`, `views`, `rating`
|
|
78
|
-
4. `sqlite.json.type({table: "test_jsonb_docs", column: "tags", whereClause: "id = 1"})` → `"array"`
|
|
79
|
-
5. `sqlite.json.type({table: "test_jsonb_docs", column: "doc", whereClause: "id = 1"})` → `"object"`
|
|
80
|
-
6. `sqlite.json.arrayLength({table: "test_jsonb_docs", column: "tags", whereClause: "id = 1"})` → `3`
|
|
81
|
-
7. `sqlite.json.valid({json: '{"type":"article","author":"Alice"}'})` → `{valid: true}`
|
|
82
|
-
8. `sqlite.json.validatePath({path: "$.author"})` → valid
|
|
83
|
-
9. `sqlite.json.pretty({json: '{"type":"article","author":"Alice","views":1250}'})` → formatted JSON
|
|
84
|
-
10. `sqlite.json.each({table: "test_jsonb_docs", column: "tags", whereClause: "id = 1"})` → 3 rows: database, tutorial, beginner
|
|
85
|
-
11. `sqlite.json.analyzeSchema({table: "test_jsonb_docs", column: "doc"})` → inferred schema
|
|
86
|
-
12. `sqlite.json.select({table: "test_jsonb_docs", column: "doc", paths: ["$.author", "$.views"]})` → rows with author/views
|
|
87
|
-
13. `sqlite.json.query({table: "test_jsonb_docs", column: "doc", filterPaths: {"$.type": "article"}})` → 4 rows
|
|
88
|
-
14. `sqlite.json.storageInfo({table: "test_jsonb_docs", column: "doc"})` → storage analysis
|
|
89
|
-
15. `sqlite.json.groupArray({table: "test_jsonb_docs", valueColumn: "json_extract(doc, '$.author')", allowExpressions: true})` → array of authors
|
|
90
|
-
16. `sqlite.json.groupObject({table: "test_jsonb_docs", keyColumn: "json_extract(doc, '$.author')", valueColumn: "json_extract(doc, '$.views')", allowExpressions: true})` → author→views map
|
|
91
|
-
17. `sqlite.json.jsonbConvert({table: "test_jsonb_docs", column: "doc", whereClause: "id = 1"})` → conversion result
|
|
92
|
-
18. `sqlite.json.normalizeColumn({table: "test_jsonb_docs", column: "doc"})` → normalization report
|
|
93
|
-
19. `sqlite.json.securityScan({table: "test_jsonb_docs", column: "doc"})` → security scan result with riskLevel
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Phase 2: JSON Write Tools — Happy Paths (temp table)
|
|
98
|
-
|
|
99
|
-
20. `sqlite.json.createJsonCollection({tableName: "temp_cm_json"})` → creates collection table
|
|
100
|
-
21. Insert a row into temp_cm_json with JSON data, then:
|
|
101
|
-
22. `sqlite.json.set(...)` on temp_cm_json → set a JSON value
|
|
102
|
-
23. `sqlite.json.update(...)` on temp_cm_json → update existing key
|
|
103
|
-
24. `sqlite.json.insert(...)` on temp_cm_json → insert new row with JSON data (Note: db-mcp's json.insert creates a new row via SQL INSERT, it does not wrap json_insert())
|
|
104
|
-
25. `sqlite.json.remove(...)` on temp_cm_json → remove a key
|
|
105
|
-
26. `sqlite.json.arrayAppend(...)` on temp_cm_json → append to array
|
|
106
|
-
27. `sqlite.json.merge({table: "test_jsonb_docs", column: "doc", mergeData: {"featured": true}, whereClause: "id = 999"})` → `{rowsAffected: 0}` (non-destructive)
|
|
107
|
-
28. Cleanup: drop temp_cm_json
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Phase 3: JSON Domain Errors (batched)
|
|
112
|
-
|
|
113
|
-
🔴 29. `sqlite.json.extract({table: "nonexistent_xyz", column: "doc", path: "$.x"})` → `{success: false}`
|
|
114
|
-
🔴 30. `sqlite.json.extract({table: "test_jsonb_docs", column: "nonexistent_col", path: "$.x"})` → report behavior
|
|
115
|
-
🔴 31. `sqlite.json.validatePath({path: "invalid path !@#"})` → report behavior
|
|
116
|
-
🔴 32. `sqlite.json.securityScan({table: "nonexistent_xyz", column: "doc"})` → `{success: false}`
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## Phase 4: JSON Zod Validation (batched)
|
|
121
|
-
|
|
122
|
-
🔴 33. `sqlite.json.valid({})` → `{success: false}`
|
|
123
|
-
🔴 34. `sqlite.json.extract({})` → `{success: false}`
|
|
124
|
-
🔴 35. `sqlite.json.set({})` → `{success: false}`
|
|
125
|
-
🔴 36. `sqlite.json.remove({})` → `{success: false}`
|
|
126
|
-
🔴 37. `sqlite.json.type({})` → `{success: false}`
|
|
127
|
-
🔴 38. `sqlite.json.arrayLength({})` → `{success: false}`
|
|
128
|
-
🔴 39. `sqlite.json.arrayAppend({})` → `{success: false}`
|
|
129
|
-
🔴 40. `sqlite.json.keys({})` → `{success: false}`
|
|
130
|
-
🔴 41. `sqlite.json.each({})` → `{success: false}`
|
|
131
|
-
🔴 42. `sqlite.json.groupArray({})` → `{success: false}`
|
|
132
|
-
🔴 43. `sqlite.json.groupObject({})` → `{success: false}`
|
|
133
|
-
🔴 44. `sqlite.json.pretty({})` → `{success: false}`
|
|
134
|
-
🔴 45. `sqlite.json.jsonbConvert({})` → `{success: false}`
|
|
135
|
-
🔴 46. `sqlite.json.storageInfo({})` → `{success: false}`
|
|
136
|
-
🔴 47. `sqlite.json.normalizeColumn({})` → `{success: false}`
|
|
137
|
-
🔴 48. `sqlite.json.insert({})` → `{success: false}`
|
|
138
|
-
🔴 49. `sqlite.json.update({})` → `{success: false}`
|
|
139
|
-
🔴 50. `sqlite.json.select({})` → `{success: false}`
|
|
140
|
-
🔴 51. `sqlite.json.query({})` → `{success: false}`
|
|
141
|
-
🔴 52. `sqlite.json.validatePath({})` → `{success: false}`
|
|
142
|
-
🔴 53. `sqlite.json.merge({})` → `{success: false}`
|
|
143
|
-
🔴 54. `sqlite.json.analyzeSchema({})` → `{success: false}`
|
|
144
|
-
🔴 55. `sqlite.json.createJsonCollection({})` → `{success: false}`
|
|
145
|
-
🔴 56. `sqlite.json.securityScan({})` → `{success: false}`
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
## Phase 4.5: Gotcha Edge Cases (batched)
|
|
150
|
-
|
|
151
|
-
57. `sqlite.json.each({table: "test_jsonb_docs", column: "tags", whereClause: "id = 1", limit: 2})` → only 2 rows returned (not all array items) — `limit` param prevents row multiplication bloat (gotcha #6)
|
|
152
|
-
58. `sqlite.json.groupObject({table: "test_jsonb_docs", keyColumn: "id", valueColumn: "json_extract(doc, '$.author')", allowExpressions: true})` → 6 key-value pairs with unique keys — verify behavior when keys are guaranteed unique (gotcha #7)
|
|
153
|
-
59. `sqlite.json.normalizeColumn({table: "test_jsonb_docs", column: "doc", outputFormat: "text"})` → verify explicit text output differs from default `preserve` mode (gotcha #9)
|
|
154
|
-
60. `sqlite.json.groupArray({table: "test_jsonb_docs", valueColumn: "COUNT(*)", allowExpressions: true})` → report behavior — `allowExpressions` is designed for column extraction (e.g., `json_extract`), NOT aggregate functions (gotcha #8)
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## Phase 5: Multi-Step Workflow
|
|
159
|
-
|
|
160
|
-
### 5.1 — JSON ETL pipeline
|
|
161
|
-
|
|
162
|
-
```javascript
|
|
163
|
-
// Create collection, populate, analyze, clean up
|
|
164
|
-
await sqlite.json.createJsonCollection({ tableName: "temp_cm_json_etl" });
|
|
165
|
-
// Insert 3 documents
|
|
166
|
-
for (let i = 1; i <= 3; i++) {
|
|
167
|
-
await sqlite.core.writeQuery({
|
|
168
|
-
query: `INSERT INTO temp_cm_json_etl (data) VALUES ('{"index":${i},"label":"item_${i}","tags":["test"]}')`,
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
const schema = await sqlite.json.analyzeSchema({
|
|
172
|
-
table: "temp_cm_json_etl",
|
|
173
|
-
column: "data",
|
|
174
|
-
});
|
|
175
|
-
const scan = await sqlite.json.securityScan({
|
|
176
|
-
table: "temp_cm_json_etl",
|
|
177
|
-
column: "data",
|
|
178
|
-
});
|
|
179
|
-
await sqlite.core.writeQuery({
|
|
180
|
-
query: "DROP TABLE IF EXISTS temp_cm_json_etl",
|
|
181
|
-
});
|
|
182
|
-
return {
|
|
183
|
-
schemaFields: Object.keys(schema.schema.properties).length > 0,
|
|
184
|
-
riskLevel: scan.riskLevel,
|
|
185
|
-
};
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### 5.2 — Cross-group JSON + stats
|
|
189
|
-
|
|
190
|
-
```javascript
|
|
191
|
-
const extract = await sqlite.json.extract({
|
|
192
|
-
table: "test_jsonb_docs",
|
|
193
|
-
column: "doc",
|
|
194
|
-
path: "$.views",
|
|
195
|
-
});
|
|
196
|
-
const stats = await sqlite.stats.statsBasic({
|
|
197
|
-
table: "test_products",
|
|
198
|
-
column: "price",
|
|
199
|
-
});
|
|
200
|
-
return { jsonExtract: extract, priceStats: stats };
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
### 5.3 — Security scan positive detection
|
|
206
|
-
|
|
207
|
-
```javascript
|
|
208
|
-
const failures = [];
|
|
209
|
-
await sqlite.json.createJsonCollection({ tableName: "temp_cm_json_sec" });
|
|
210
|
-
await sqlite.core.writeQuery({
|
|
211
|
-
query: `INSERT INTO temp_cm_json_sec (data) VALUES ('{"password": "secret123", "api_key": "sk-abc123", "query": "DROP TABLE users; --", "html": "<script>alert(1)</script>"}')`,
|
|
212
|
-
});
|
|
213
|
-
const scan = await sqlite.json.securityScan({
|
|
214
|
-
table: "temp_cm_json_sec",
|
|
215
|
-
column: "data",
|
|
216
|
-
});
|
|
217
|
-
await sqlite.core.writeQuery({
|
|
218
|
-
query: "DROP TABLE IF EXISTS temp_cm_json_sec",
|
|
219
|
-
});
|
|
220
|
-
if (scan.riskLevel === "low")
|
|
221
|
-
failures.push("expected riskLevel > low for malicious data");
|
|
222
|
-
return { failures, success: failures.length === 0, riskLevel: scan.riskLevel };
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
Expected: `riskLevel` > "low", findings include PII keys (`password`, `api_key`) and/or injection/XSS patterns.
|
|
226
|
-
|
|
227
|
-
---
|
|
228
|
-
|
|
229
|
-
## Post-Test Procedures
|
|
230
|
-
|
|
231
|
-
1. **Cleanup**: Confirm all `temp_*` tables removed
|
|
232
|
-
2. **Triage findings**: Create implementation plan if issues found
|
|
233
|
-
3. **Scope of fixes**: Handler code, server-instructions, test database, this prompt
|
|
234
|
-
4. **Validate**: Instruct the user to run the test suite (Vitest/Playwright), lint, and typecheck. Do NOT run them yourself.
|
|
235
|
-
5. **Commit**: Stage and commit — do NOT push
|
|
236
|
-
6. **Token audit**: Report most expensive block
|
|
237
|
-
7. **Final summary**: After testing/re-testing
|