specforge-mcp 0.4.0 → 0.5.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.
Files changed (67) hide show
  1. package/dist/config/db-engines.json +394 -1
  2. package/dist/engine/detectors/cache-db-detector.d.ts +3 -0
  3. package/dist/engine/detectors/cache-db-detector.d.ts.map +1 -0
  4. package/dist/engine/detectors/cache-db-detector.js +37 -0
  5. package/dist/engine/detectors/cache-db-detector.js.map +1 -0
  6. package/dist/engine/detectors/cloud-db-detector.d.ts +4 -0
  7. package/dist/engine/detectors/cloud-db-detector.d.ts.map +1 -0
  8. package/dist/engine/detectors/cloud-db-detector.js +50 -0
  9. package/dist/engine/detectors/cloud-db-detector.js.map +1 -0
  10. package/dist/engine/detectors/graph-db-detector.d.ts +3 -0
  11. package/dist/engine/detectors/graph-db-detector.d.ts.map +1 -0
  12. package/dist/engine/detectors/graph-db-detector.js +38 -0
  13. package/dist/engine/detectors/graph-db-detector.js.map +1 -0
  14. package/dist/engine/detectors/newsql-db-detector.d.ts +3 -0
  15. package/dist/engine/detectors/newsql-db-detector.d.ts.map +1 -0
  16. package/dist/engine/detectors/newsql-db-detector.js +40 -0
  17. package/dist/engine/detectors/newsql-db-detector.js.map +1 -0
  18. package/dist/engine/detectors/search-engine-detector.d.ts +3 -0
  19. package/dist/engine/detectors/search-engine-detector.d.ts.map +1 -0
  20. package/dist/engine/detectors/search-engine-detector.js +51 -0
  21. package/dist/engine/detectors/search-engine-detector.js.map +1 -0
  22. package/dist/engine/detectors/timeseries-db-detector.d.ts +3 -0
  23. package/dist/engine/detectors/timeseries-db-detector.d.ts.map +1 -0
  24. package/dist/engine/detectors/timeseries-db-detector.js +31 -0
  25. package/dist/engine/detectors/timeseries-db-detector.js.map +1 -0
  26. package/dist/engine/detectors/vector-db-detector.d.ts +5 -0
  27. package/dist/engine/detectors/vector-db-detector.d.ts.map +1 -0
  28. package/dist/engine/detectors/vector-db-detector.js +34 -0
  29. package/dist/engine/detectors/vector-db-detector.js.map +1 -0
  30. package/dist/engine/detectors/widecolumn-db-detector.d.ts +3 -0
  31. package/dist/engine/detectors/widecolumn-db-detector.d.ts.map +1 -0
  32. package/dist/engine/detectors/widecolumn-db-detector.js +38 -0
  33. package/dist/engine/detectors/widecolumn-db-detector.js.map +1 -0
  34. package/dist/engine/framework-detector.d.ts.map +1 -1
  35. package/dist/engine/framework-detector.js +44 -1
  36. package/dist/engine/framework-detector.js.map +1 -1
  37. package/dist/engine/migration/db-migrator.d.ts.map +1 -1
  38. package/dist/engine/migration/db-migrator.js +18 -3
  39. package/dist/engine/migration/db-migrator.js.map +1 -1
  40. package/dist/tools/design-schema/advanced-db-schemas.d.ts +8 -0
  41. package/dist/tools/design-schema/advanced-db-schemas.d.ts.map +1 -0
  42. package/dist/tools/design-schema/advanced-db-schemas.js +105 -0
  43. package/dist/tools/design-schema/advanced-db-schemas.js.map +1 -0
  44. package/dist/tools/design-schema/index.d.ts +2 -0
  45. package/dist/tools/design-schema/index.d.ts.map +1 -1
  46. package/dist/tools/design-schema/index.js +3 -0
  47. package/dist/tools/design-schema/index.js.map +1 -1
  48. package/dist/tools/design-schema/nosql-category-schemas.d.ts +10 -0
  49. package/dist/tools/design-schema/nosql-category-schemas.d.ts.map +1 -0
  50. package/dist/tools/design-schema/nosql-category-schemas.js +120 -0
  51. package/dist/tools/design-schema/nosql-category-schemas.js.map +1 -0
  52. package/dist/tools/design-schema.d.ts.map +1 -1
  53. package/dist/tools/design-schema.js +41 -1
  54. package/dist/tools/design-schema.js.map +1 -1
  55. package/dist/tools/schemas/lifecycle.d.ts +1 -1
  56. package/dist/types/common/tech-enums.d.ts +11 -1
  57. package/dist/types/common/tech-enums.d.ts.map +1 -1
  58. package/dist/types/project/core.d.ts +9 -1
  59. package/dist/types/project/core.d.ts.map +1 -1
  60. package/dist/types/schema.d.ts +5 -0
  61. package/dist/types/schema.d.ts.map +1 -1
  62. package/dist/types/tooling/database.d.ts +7 -0
  63. package/dist/types/tooling/database.d.ts.map +1 -1
  64. package/dist/types/tooling/database.js +0 -1
  65. package/dist/types/tooling/database.js.map +1 -1
  66. package/package.json +1 -1
  67. package/src/config/db-engines.json +394 -1
@@ -1,8 +1,9 @@
1
1
  {
2
- "_description": "Registry of database engines with detection deps, SQL syntax, and special features",
2
+ "_description": "Registry of database engines with detection deps, SQL syntax, and special features (SPEC-025 + SPEC-059)",
3
3
  "engines": {
4
4
  "supabase": {
5
5
  "displayName": "Supabase (PostgreSQL + BaaS)",
6
+ "category": "sql",
6
7
  "detectionDeps": ["@supabase/supabase-js", "@supabase/ssr", "@supabase/auth-helpers-nextjs"],
7
8
  "features": ["RLS policies", "Auth", "Storage", "Edge Functions", "Realtime"],
8
9
  "securityRules": true,
@@ -10,24 +11,32 @@
10
11
  "timestampType": "timestamptz DEFAULT now()",
11
12
  "jsonType": "jsonb",
12
13
  "autoIncrementSyntax": "GENERATED ALWAYS AS IDENTITY",
14
+ "schemaFormat": "PostgreSQL DDL",
13
15
  "migrations": "supabase/migrations/",
14
16
  "installCmd": "npm install @supabase/supabase-js",
15
17
  "docsUrl": "https://supabase.com/docs"
16
18
  },
17
19
  "firebase": {
18
20
  "displayName": "Firebase (Firestore + BaaS)",
21
+ "category": "nosql-document",
19
22
  "detectionDeps": ["firebase", "firebase-admin", "@firebase/app"],
20
23
  "features": ["Firestore", "Auth", "Storage", "Cloud Functions", "Security Rules"],
21
24
  "securityRules": true,
22
25
  "collectionFormat": "NoSQL documents",
23
26
  "rulesFile": "firestore.rules",
24
27
  "indexFile": "firestore.indexes.json",
28
+ "schemaFormat": "Firestore document model",
25
29
  "installCmd": "npm install firebase",
26
30
  "docsUrl": "https://firebase.google.com/docs/firestore"
27
31
  },
28
32
  "postgresql": {
29
33
  "displayName": "PostgreSQL",
34
+ "category": "sql",
30
35
  "detectionDeps": ["pg", "postgres", "node-postgres", "knex", "sequelize"],
36
+ "detectionDepsPython": ["psycopg2", "psycopg", "asyncpg", "sqlalchemy"],
37
+ "detectionDepsGo": ["github.com/lib/pq", "github.com/jackc/pgx"],
38
+ "detectionDepsRust": ["tokio-postgres", "sqlx"],
39
+ "detectionDepsJava": ["postgresql"],
31
40
  "prismaDeps": ["@prisma/client"],
32
41
  "features": ["ACID", "JSON/JSONB", "Full-text search", "Extensions", "RLS"],
33
42
  "securityRules": false,
@@ -35,39 +44,423 @@
35
44
  "timestampType": "timestamptz DEFAULT now()",
36
45
  "jsonType": "jsonb",
37
46
  "autoIncrementSyntax": "SERIAL",
47
+ "schemaFormat": "PostgreSQL DDL",
38
48
  "docsUrl": "https://www.postgresql.org/docs/"
39
49
  },
40
50
  "mysql": {
41
51
  "displayName": "MySQL / MariaDB",
52
+ "category": "sql",
42
53
  "detectionDeps": ["mysql2", "mysql", "mariadb", "knex", "sequelize"],
54
+ "detectionDepsPython": ["mysqlclient", "pymysql", "mysql-connector-python"],
55
+ "detectionDepsGo": ["github.com/go-sql-driver/mysql"],
56
+ "detectionDepsRust": ["mysql", "sqlx"],
57
+ "detectionDepsJava": ["mysql-connector-java"],
43
58
  "features": ["ACID", "JSON", "Full-text search", "Stored procedures"],
44
59
  "securityRules": false,
45
60
  "idType": "CHAR(36) DEFAULT (UUID())",
46
61
  "timestampType": "DATETIME DEFAULT CURRENT_TIMESTAMP",
47
62
  "jsonType": "JSON",
48
63
  "autoIncrementSyntax": "AUTO_INCREMENT",
64
+ "schemaFormat": "MySQL DDL",
49
65
  "docsUrl": "https://dev.mysql.com/doc/"
50
66
  },
51
67
  "mongodb": {
52
68
  "displayName": "MongoDB",
69
+ "category": "nosql-document",
53
70
  "detectionDeps": ["mongoose", "mongodb", "@typegoose/typegoose"],
71
+ "detectionDepsPython": ["pymongo", "motor", "mongoengine"],
72
+ "detectionDepsGo": ["go.mongodb.org/mongo-driver"],
73
+ "detectionDepsRust": ["mongodb"],
74
+ "detectionDepsJava": ["mongodb-driver-sync"],
54
75
  "features": ["Schema validation", "Aggregation pipeline", "Atlas Search", "Change streams"],
55
76
  "securityRules": false,
56
77
  "idType": "ObjectId",
57
78
  "collectionFormat": "BSON documents",
58
79
  "validationSchema": "$jsonSchema",
80
+ "schemaFormat": "BSON document model",
59
81
  "docsUrl": "https://www.mongodb.com/docs/"
60
82
  },
61
83
  "sqlite": {
62
84
  "displayName": "SQLite",
85
+ "category": "sql",
63
86
  "detectionDeps": ["better-sqlite3", "sqlite3", "sqlite", "@libsqlite3", "libsql", "@libsql/client"],
87
+ "detectionDepsPython": ["sqlite3", "aiosqlite"],
88
+ "detectionDepsGo": ["github.com/mattn/go-sqlite3"],
89
+ "detectionDepsRust": ["rusqlite", "sqlx"],
64
90
  "features": ["Embedded", "Serverless", "ACID", "File-based"],
65
91
  "securityRules": false,
66
92
  "idType": "TEXT DEFAULT (lower(hex(randomblob(16))))",
67
93
  "timestampType": "TEXT DEFAULT (datetime('now'))",
68
94
  "jsonType": "TEXT",
69
95
  "autoIncrementSyntax": "AUTOINCREMENT",
96
+ "schemaFormat": "SQLite DDL",
70
97
  "docsUrl": "https://www.sqlite.org/docs.html"
98
+ },
99
+ "redis": {
100
+ "displayName": "Redis",
101
+ "category": "cache",
102
+ "detectionDeps": ["redis", "ioredis", "@redis/client"],
103
+ "detectionDepsPython": ["redis"],
104
+ "detectionDepsGo": ["github.com/redis/go-redis"],
105
+ "detectionDepsRust": ["redis"],
106
+ "detectionDepsJava": ["jedis", "lettuce-core"],
107
+ "features": ["In-memory", "Pub/Sub", "Streams", "Lua scripting", "Clustering"],
108
+ "securityRules": false,
109
+ "schemaFormat": "Key-value patterns",
110
+ "docsUrl": "https://redis.io/docs/"
111
+ },
112
+ "memcached": {
113
+ "displayName": "Memcached",
114
+ "category": "cache",
115
+ "detectionDeps": ["memcached", "memjs"],
116
+ "detectionDepsPython": ["pymemcache", "python-memcached"],
117
+ "detectionDepsGo": ["github.com/bradfitz/gomemcache"],
118
+ "features": ["In-memory", "Simple key-value", "Multi-threaded"],
119
+ "securityRules": false,
120
+ "schemaFormat": "Key-value patterns",
121
+ "docsUrl": "https://memcached.org/"
122
+ },
123
+ "valkey": {
124
+ "displayName": "Valkey",
125
+ "category": "cache",
126
+ "detectionDeps": ["valkey", "@valkey/client"],
127
+ "features": ["In-memory", "Redis-compatible", "Open source"],
128
+ "securityRules": false,
129
+ "schemaFormat": "Key-value patterns",
130
+ "docsUrl": "https://valkey.io/docs/"
131
+ },
132
+ "elasticsearch": {
133
+ "displayName": "Elasticsearch",
134
+ "category": "search",
135
+ "detectionDeps": ["@elastic/elasticsearch"],
136
+ "detectionDepsPython": ["elasticsearch"],
137
+ "detectionDepsGo": ["github.com/elastic/go-elasticsearch"],
138
+ "detectionDepsRust": ["elasticsearch"],
139
+ "detectionDepsJava": ["elasticsearch-rest-high-level-client"],
140
+ "features": ["Full-text search", "Aggregations", "ML", "Vector search"],
141
+ "securityRules": false,
142
+ "schemaFormat": "Index mappings (JSON)",
143
+ "docsUrl": "https://www.elastic.co/docs/elasticsearch"
144
+ },
145
+ "opensearch": {
146
+ "displayName": "OpenSearch",
147
+ "category": "search",
148
+ "detectionDeps": ["@opensearch-project/opensearch"],
149
+ "detectionDepsPython": ["opensearch-py"],
150
+ "features": ["Full-text search", "Observability", "Security analytics"],
151
+ "securityRules": false,
152
+ "schemaFormat": "Index mappings (JSON)",
153
+ "docsUrl": "https://opensearch.org/docs/"
154
+ },
155
+ "meilisearch": {
156
+ "displayName": "Meilisearch",
157
+ "category": "search",
158
+ "detectionDeps": ["meilisearch"],
159
+ "detectionDepsPython": ["meilisearch"],
160
+ "detectionDepsRust": ["meilisearch-sdk"],
161
+ "features": ["Typo-tolerant", "Instant search", "Faceted search"],
162
+ "securityRules": false,
163
+ "schemaFormat": "Index settings (JSON)",
164
+ "docsUrl": "https://www.meilisearch.com/docs/"
165
+ },
166
+ "algolia": {
167
+ "displayName": "Algolia",
168
+ "category": "search",
169
+ "detectionDeps": ["algoliasearch", "@algolia/client-search"],
170
+ "detectionDepsPython": ["algoliasearch"],
171
+ "features": ["Hosted search", "AI relevance", "Analytics"],
172
+ "securityRules": false,
173
+ "schemaFormat": "Index settings (JSON)",
174
+ "docsUrl": "https://www.algolia.com/doc/"
175
+ },
176
+ "typesense": {
177
+ "displayName": "Typesense",
178
+ "category": "search",
179
+ "detectionDeps": ["typesense"],
180
+ "detectionDepsPython": ["typesense"],
181
+ "features": ["Typo-tolerant", "Geo search", "Semantic search"],
182
+ "securityRules": false,
183
+ "schemaFormat": "Collection schema (JSON)",
184
+ "docsUrl": "https://typesense.org/docs/"
185
+ },
186
+ "influxdb": {
187
+ "displayName": "InfluxDB",
188
+ "category": "timeseries",
189
+ "detectionDeps": ["@influxdata/influxdb-client"],
190
+ "detectionDepsPython": ["influxdb-client"],
191
+ "detectionDepsGo": ["github.com/influxdata/influxdb-client-go"],
192
+ "detectionDepsJava": ["influxdb-client-java"],
193
+ "features": ["Time-series", "Flux query", "Telegraf integration"],
194
+ "securityRules": false,
195
+ "schemaFormat": "Measurement schema (tags + fields)",
196
+ "docsUrl": "https://docs.influxdata.com/"
197
+ },
198
+ "timescaledb": {
199
+ "displayName": "TimescaleDB",
200
+ "category": "timeseries",
201
+ "detectionDeps": ["pg"],
202
+ "detectionDepsPython": ["psycopg2", "timescale"],
203
+ "features": ["Hypertables", "Continuous aggregates", "Compression", "PostgreSQL extension"],
204
+ "securityRules": false,
205
+ "schemaFormat": "PostgreSQL DDL + hypertable API",
206
+ "docsUrl": "https://docs.timescale.com/"
207
+ },
208
+ "questdb": {
209
+ "displayName": "QuestDB",
210
+ "category": "timeseries",
211
+ "detectionDeps": ["@questdb/nodejs-client"],
212
+ "detectionDepsPython": ["questdb"],
213
+ "features": ["Time-series", "SQL", "High-performance ingestion"],
214
+ "securityRules": false,
215
+ "schemaFormat": "QuestDB SQL DDL",
216
+ "docsUrl": "https://questdb.io/docs/"
217
+ },
218
+ "neo4j": {
219
+ "displayName": "Neo4j",
220
+ "category": "graph",
221
+ "detectionDeps": ["neo4j-driver"],
222
+ "detectionDepsPython": ["neo4j", "py2neo"],
223
+ "detectionDepsGo": ["github.com/neo4j/neo4j-go-driver"],
224
+ "detectionDepsJava": ["neo4j-java-driver"],
225
+ "features": ["Cypher query", "ACID", "Graph algorithms", "Graph Data Science"],
226
+ "securityRules": false,
227
+ "schemaFormat": "Cypher DDL (CREATE CONSTRAINT)",
228
+ "docsUrl": "https://neo4j.com/docs/"
229
+ },
230
+ "arangodb": {
231
+ "displayName": "ArangoDB",
232
+ "category": "graph",
233
+ "detectionDeps": ["arangojs"],
234
+ "detectionDepsPython": ["python-arango"],
235
+ "features": ["Multi-model", "AQL", "Graph + Document + Key-Value"],
236
+ "securityRules": false,
237
+ "schemaFormat": "AQL + collection config",
238
+ "docsUrl": "https://docs.arangodb.com/"
239
+ },
240
+ "neptune": {
241
+ "displayName": "Amazon Neptune",
242
+ "category": "graph",
243
+ "detectionDeps": ["@aws-sdk/client-neptune", "gremlin"],
244
+ "detectionDepsPython": ["gremlinpython"],
245
+ "features": ["Managed graph", "Gremlin", "SPARQL", "openCypher"],
246
+ "securityRules": false,
247
+ "schemaFormat": "Gremlin/SPARQL/openCypher",
248
+ "docsUrl": "https://docs.aws.amazon.com/neptune/"
249
+ },
250
+ "dgraph": {
251
+ "displayName": "Dgraph",
252
+ "category": "graph",
253
+ "detectionDeps": ["dgraph-js"],
254
+ "detectionDepsPython": ["pydgraph"],
255
+ "features": ["Distributed graph", "GraphQL native", "DQL"],
256
+ "securityRules": false,
257
+ "schemaFormat": "DQL schema",
258
+ "docsUrl": "https://dgraph.io/docs/"
259
+ },
260
+ "pinecone": {
261
+ "displayName": "Pinecone",
262
+ "category": "vector",
263
+ "detectionDeps": ["@pinecone-database/pinecone"],
264
+ "detectionDepsPython": ["pinecone-client"],
265
+ "features": ["Managed vectors", "Metadata filtering", "Namespaces"],
266
+ "securityRules": false,
267
+ "schemaFormat": "Index config (JSON)",
268
+ "docsUrl": "https://docs.pinecone.io/"
269
+ },
270
+ "weaviate": {
271
+ "displayName": "Weaviate",
272
+ "category": "vector",
273
+ "detectionDeps": ["weaviate-ts-client"],
274
+ "detectionDepsPython": ["weaviate-client"],
275
+ "features": ["Vector + keyword hybrid", "Multi-modal", "GraphQL API"],
276
+ "securityRules": false,
277
+ "schemaFormat": "Class schema (JSON)",
278
+ "docsUrl": "https://weaviate.io/developers/weaviate"
279
+ },
280
+ "qdrant": {
281
+ "displayName": "Qdrant",
282
+ "category": "vector",
283
+ "detectionDeps": ["@qdrant/js-client-rest"],
284
+ "detectionDepsPython": ["qdrant-client"],
285
+ "detectionDepsRust": ["qdrant-client"],
286
+ "features": ["HNSW index", "Payload filtering", "Quantization"],
287
+ "securityRules": false,
288
+ "schemaFormat": "Collection config (JSON)",
289
+ "docsUrl": "https://qdrant.tech/documentation/"
290
+ },
291
+ "milvus": {
292
+ "displayName": "Milvus",
293
+ "category": "vector",
294
+ "detectionDeps": ["@zilliz/milvus2-sdk-node"],
295
+ "detectionDepsPython": ["pymilvus"],
296
+ "detectionDepsJava": ["io.milvus:milvus-sdk-java"],
297
+ "features": ["Distributed vectors", "GPU acceleration", "Multiple index types"],
298
+ "securityRules": false,
299
+ "schemaFormat": "Collection schema (JSON)",
300
+ "docsUrl": "https://milvus.io/docs/"
301
+ },
302
+ "chromadb": {
303
+ "displayName": "ChromaDB",
304
+ "category": "vector",
305
+ "detectionDeps": ["chromadb"],
306
+ "detectionDepsPython": ["chromadb"],
307
+ "features": ["Embedded vectors", "Multi-modal", "LangChain integration"],
308
+ "securityRules": false,
309
+ "schemaFormat": "Collection config (JSON)",
310
+ "docsUrl": "https://docs.trychroma.com/"
311
+ },
312
+ "cassandra": {
313
+ "displayName": "Apache Cassandra",
314
+ "category": "wide-column",
315
+ "detectionDeps": ["cassandra-driver"],
316
+ "detectionDepsPython": ["cassandra-driver"],
317
+ "detectionDepsGo": ["github.com/gocql/gocql"],
318
+ "detectionDepsJava": ["cassandra-driver-core"],
319
+ "features": ["Wide-column", "Distributed", "Tunable consistency", "CQL"],
320
+ "securityRules": false,
321
+ "schemaFormat": "CQL DDL",
322
+ "docsUrl": "https://cassandra.apache.org/doc/"
323
+ },
324
+ "scylladb": {
325
+ "displayName": "ScyllaDB",
326
+ "category": "wide-column",
327
+ "detectionDeps": ["cassandra-driver", "@scylladb/driver"],
328
+ "detectionDepsPython": ["scylla-driver"],
329
+ "detectionDepsRust": ["scylla"],
330
+ "features": ["Cassandra-compatible", "C++ performance", "Shard-per-core"],
331
+ "securityRules": false,
332
+ "schemaFormat": "CQL DDL",
333
+ "docsUrl": "https://docs.scylladb.com/"
334
+ },
335
+ "hbase": {
336
+ "displayName": "Apache HBase",
337
+ "category": "wide-column",
338
+ "detectionDepsJava": ["hbase-client"],
339
+ "detectionDepsPython": ["happybase"],
340
+ "detectionDeps": [],
341
+ "features": ["Hadoop ecosystem", "Wide-column", "Strong consistency"],
342
+ "securityRules": false,
343
+ "schemaFormat": "HBase shell DDL",
344
+ "docsUrl": "https://hbase.apache.org/book.html"
345
+ },
346
+ "clickhouse": {
347
+ "displayName": "ClickHouse",
348
+ "category": "wide-column",
349
+ "detectionDeps": ["@clickhouse/client"],
350
+ "detectionDepsPython": ["clickhouse-connect", "clickhouse-driver"],
351
+ "detectionDepsGo": ["github.com/ClickHouse/clickhouse-go"],
352
+ "detectionDepsRust": ["clickhouse"],
353
+ "detectionDepsJava": ["clickhouse-jdbc"],
354
+ "features": ["Columnar", "OLAP", "MergeTree engines", "SQL"],
355
+ "securityRules": false,
356
+ "schemaFormat": "ClickHouse SQL DDL",
357
+ "docsUrl": "https://clickhouse.com/docs/"
358
+ },
359
+ "cockroachdb": {
360
+ "displayName": "CockroachDB",
361
+ "category": "newsql",
362
+ "detectionDeps": ["pg", "@cockroachlabs/serverless"],
363
+ "detectionDepsPython": ["psycopg2"],
364
+ "detectionDepsGo": ["github.com/jackc/pgx"],
365
+ "features": ["Distributed SQL", "Serializable isolation", "Geo-partitioning", "PostgreSQL compatible"],
366
+ "securityRules": false,
367
+ "schemaFormat": "PostgreSQL-compatible DDL",
368
+ "docsUrl": "https://www.cockroachlabs.com/docs/"
369
+ },
370
+ "tidb": {
371
+ "displayName": "TiDB",
372
+ "category": "newsql",
373
+ "detectionDeps": ["mysql2", "@tidbcloud/serverless"],
374
+ "detectionDepsPython": ["pymysql"],
375
+ "detectionDepsGo": ["github.com/go-sql-driver/mysql"],
376
+ "features": ["Distributed SQL", "MySQL compatible", "HTAP", "TiKV storage"],
377
+ "securityRules": false,
378
+ "schemaFormat": "MySQL-compatible DDL",
379
+ "docsUrl": "https://docs.pingcap.com/"
380
+ },
381
+ "spanner": {
382
+ "displayName": "Google Cloud Spanner",
383
+ "category": "newsql",
384
+ "detectionDeps": ["@google-cloud/spanner"],
385
+ "detectionDepsPython": ["google-cloud-spanner"],
386
+ "detectionDepsGo": ["cloud.google.com/go/spanner"],
387
+ "detectionDepsJava": ["google-cloud-spanner"],
388
+ "features": ["Global SQL", "Strong consistency", "Horizontal scaling"],
389
+ "securityRules": false,
390
+ "schemaFormat": "Spanner DDL",
391
+ "docsUrl": "https://cloud.google.com/spanner/docs"
392
+ },
393
+ "planetscale": {
394
+ "displayName": "PlanetScale",
395
+ "category": "newsql",
396
+ "detectionDeps": ["@planetscale/database"],
397
+ "detectionDepsGo": ["github.com/planetscale/planetscale-go"],
398
+ "features": ["Serverless MySQL", "Branching", "Non-blocking schema changes"],
399
+ "securityRules": false,
400
+ "schemaFormat": "MySQL-compatible DDL",
401
+ "docsUrl": "https://planetscale.com/docs"
402
+ },
403
+ "neon": {
404
+ "displayName": "Neon",
405
+ "category": "newsql",
406
+ "detectionDeps": ["@neondatabase/serverless"],
407
+ "features": ["Serverless PostgreSQL", "Branching", "Auto-scaling", "Compute separation"],
408
+ "securityRules": false,
409
+ "schemaFormat": "PostgreSQL DDL",
410
+ "docsUrl": "https://neon.tech/docs"
411
+ },
412
+ "alloydb": {
413
+ "displayName": "Google AlloyDB",
414
+ "category": "newsql",
415
+ "detectionDeps": ["@google-cloud/alloydb"],
416
+ "detectionDepsPython": ["google-cloud-alloydb-connector"],
417
+ "features": ["Managed PostgreSQL", "Columnar engine", "AI/ML integration"],
418
+ "securityRules": false,
419
+ "schemaFormat": "PostgreSQL DDL",
420
+ "docsUrl": "https://cloud.google.com/alloydb/docs"
421
+ },
422
+ "dynamodb": {
423
+ "displayName": "Amazon DynamoDB",
424
+ "category": "cloud-managed",
425
+ "detectionDeps": ["@aws-sdk/client-dynamodb", "@aws-sdk/lib-dynamodb"],
426
+ "detectionDepsPython": ["boto3"],
427
+ "detectionDepsGo": ["github.com/aws/aws-sdk-go-v2/service/dynamodb"],
428
+ "detectionDepsJava": ["dynamodb-enhanced"],
429
+ "features": ["Serverless NoSQL", "Single-digit ms", "Global tables", "Streams"],
430
+ "securityRules": false,
431
+ "schemaFormat": "DynamoDB table definition (JSON)",
432
+ "docsUrl": "https://docs.aws.amazon.com/dynamodb/"
433
+ },
434
+ "aurora": {
435
+ "displayName": "Amazon Aurora",
436
+ "category": "cloud-managed",
437
+ "detectionDeps": ["@aws-sdk/client-rds-data", "aurora-data-api"],
438
+ "detectionDepsPython": ["boto3"],
439
+ "features": ["Managed PostgreSQL/MySQL", "Multi-AZ", "Serverless v2"],
440
+ "securityRules": false,
441
+ "schemaFormat": "PostgreSQL/MySQL DDL",
442
+ "docsUrl": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/"
443
+ },
444
+ "documentdb": {
445
+ "displayName": "Amazon DocumentDB",
446
+ "category": "cloud-managed",
447
+ "detectionDeps": ["mongodb", "@aws-sdk/client-docdb"],
448
+ "detectionDepsPython": ["pymongo"],
449
+ "features": ["MongoDB-compatible", "Managed", "Scalable"],
450
+ "securityRules": false,
451
+ "schemaFormat": "MongoDB-compatible document model",
452
+ "docsUrl": "https://docs.aws.amazon.com/documentdb/"
453
+ },
454
+ "cosmosdb": {
455
+ "displayName": "Azure Cosmos DB",
456
+ "category": "cloud-managed",
457
+ "detectionDeps": ["@azure/cosmos"],
458
+ "detectionDepsPython": ["azure-cosmos"],
459
+ "detectionDepsJava": ["azure-cosmos"],
460
+ "features": ["Multi-model", "Global distribution", "Multi-API", "SLA-backed"],
461
+ "securityRules": false,
462
+ "schemaFormat": "Container schema (JSON)",
463
+ "docsUrl": "https://learn.microsoft.com/azure/cosmos-db/"
71
464
  }
72
465
  },
73
466
  "sqlSyntax": {
@@ -0,0 +1,3 @@
1
+ import type { CacheEngine } from '../../types/index.js';
2
+ export declare function detectCacheEngine(projectPath: string): Promise<CacheEngine | null>;
3
+ //# sourceMappingURL=cache-db-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-db-detector.d.ts","sourceRoot":"","sources":["../../../src/engine/detectors/cache-db-detector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAoBxD,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAsBxF"}
@@ -0,0 +1,37 @@
1
+ import { collectDependencies, hasAnyFile } from '../detection-utils.js';
2
+ const VALKEY_DEPS = ['valkey', '@valkey/client', 'iovalkey'];
3
+ const REDIS_DEPS = [
4
+ 'redis',
5
+ 'ioredis',
6
+ '@redis/client',
7
+ 'redis-py',
8
+ 'aioredis',
9
+ 'go-redis',
10
+ 'redis-rs',
11
+ 'jedis',
12
+ 'lettuce-core',
13
+ 'predis/predis',
14
+ 'ruby-redis',
15
+ 'StackExchange.Redis',
16
+ ];
17
+ const MEMCACHED_DEPS = ['memcached', 'memcachier', 'pymemcache', 'gomemcache', 'memcache', 'dalli'];
18
+ export async function detectCacheEngine(projectPath) {
19
+ const deps = await collectDependencies(projectPath);
20
+ // Valkey first (Redis fork — more specific)
21
+ if (VALKEY_DEPS.some((d) => deps.has(d))) {
22
+ return 'valkey';
23
+ }
24
+ // Redis
25
+ if (REDIS_DEPS.some((d) => deps.has(d))) {
26
+ return 'redis';
27
+ }
28
+ if (await hasAnyFile(projectPath, ['redis.conf'])) {
29
+ return 'redis';
30
+ }
31
+ // Memcached
32
+ if (MEMCACHED_DEPS.some((d) => deps.has(d))) {
33
+ return 'memcached';
34
+ }
35
+ return null;
36
+ }
37
+ //# sourceMappingURL=cache-db-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-db-detector.js","sourceRoot":"","sources":["../../../src/engine/detectors/cache-db-detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;AAC7D,MAAM,UAAU,GAAG;IACjB,OAAO;IACP,SAAS;IACT,eAAe;IACf,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,OAAO;IACP,cAAc;IACd,eAAe;IACf,YAAY;IACZ,qBAAqB;CACtB,CAAC;AACF,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAEpG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEpD,4CAA4C;IAC5C,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,QAAQ;IACR,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAY;IACZ,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CloudDb, CloudDbProvider } from '../../types/index.js';
2
+ export declare function detectCloudDb(projectPath: string): Promise<CloudDb | null>;
3
+ export declare function detectCloudProvider(cloudDb: CloudDb | null): CloudDbProvider | null;
4
+ //# sourceMappingURL=cloud-db-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-db-detector.d.ts","sourceRoot":"","sources":["../../../src/engine/detectors/cloud-db-detector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAmBrE,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAwBhF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,eAAe,GAAG,IAAI,CAYnF"}
@@ -0,0 +1,50 @@
1
+ import { collectDependencies } from '../detection-utils.js';
2
+ const DYNAMO_DEPS = [
3
+ '@aws-sdk/client-dynamodb',
4
+ '@aws-sdk/lib-dynamodb',
5
+ 'dynamodb',
6
+ 'boto3-dynamodb',
7
+ 'aws-sdk-go/service/dynamodb',
8
+ 'dynamodb-enhanced',
9
+ ];
10
+ const COSMOS_DEPS = ['@azure/cosmos', 'azure-cosmos', 'azure-cosmosdb'];
11
+ const DOCDB_DEPS = ['@aws-sdk/client-docdb', 'amazon-documentdb'];
12
+ const AURORA_DEPS = [
13
+ '@aws-sdk/client-rds-data',
14
+ 'aurora-data-api',
15
+ 'aws-sdk-go/service/rdsdataservice',
16
+ ];
17
+ export async function detectCloudDb(projectPath) {
18
+ const deps = await collectDependencies(projectPath);
19
+ // DynamoDB (AWS)
20
+ if (DYNAMO_DEPS.some((d) => deps.has(d))) {
21
+ return 'dynamodb';
22
+ }
23
+ // CosmosDB (Azure)
24
+ if (COSMOS_DEPS.some((d) => deps.has(d))) {
25
+ return 'cosmosdb';
26
+ }
27
+ // DocumentDB (AWS — MongoDB compatible)
28
+ if (DOCDB_DEPS.some((d) => deps.has(d))) {
29
+ return 'documentdb';
30
+ }
31
+ // Aurora (AWS — PostgreSQL/MySQL compatible)
32
+ if (AURORA_DEPS.some((d) => deps.has(d))) {
33
+ return 'aurora';
34
+ }
35
+ return null;
36
+ }
37
+ export function detectCloudProvider(cloudDb) {
38
+ if (!cloudDb) {
39
+ return null;
40
+ }
41
+ switch (cloudDb) {
42
+ case 'dynamodb':
43
+ case 'aurora':
44
+ case 'documentdb':
45
+ return 'aws';
46
+ case 'cosmosdb':
47
+ return 'azure';
48
+ }
49
+ }
50
+ //# sourceMappingURL=cloud-db-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-db-detector.js","sourceRoot":"","sources":["../../../src/engine/detectors/cloud-db-detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,GAAG;IAClB,0BAA0B;IAC1B,uBAAuB;IACvB,UAAU;IACV,gBAAgB;IAChB,6BAA6B;IAC7B,mBAAmB;CACpB,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,eAAe,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;AACxE,MAAM,UAAU,GAAG,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG;IAClB,0BAA0B;IAC1B,iBAAiB;IACjB,mCAAmC;CACpC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACrD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEpD,iBAAiB;IACjB,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,mBAAmB;IACnB,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,wCAAwC;IACxC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,6CAA6C;IAC7C,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAuB;IACzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IACD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY;YACf,OAAO,KAAK,CAAC;QACf,KAAK,UAAU;YACb,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GraphDb } from '../../types/index.js';
2
+ export declare function detectGraphDb(projectPath: string): Promise<GraphDb | null>;
3
+ //# sourceMappingURL=graph-db-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-db-detector.d.ts","sourceRoot":"","sources":["../../../src/engine/detectors/graph-db-detector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAoBpD,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAwBhF"}
@@ -0,0 +1,38 @@
1
+ import { collectDependencies } from '../detection-utils.js';
2
+ const NEO4J_DEPS = [
3
+ 'neo4j-driver',
4
+ 'neo4j',
5
+ 'py2neo',
6
+ 'neo4j-go-driver',
7
+ 'neomodel',
8
+ 'neo4j-java-driver',
9
+ ];
10
+ const ARANGO_DEPS = ['arangojs', 'python-arango', 'arangodb-php', 'arangodb'];
11
+ const NEPTUNE_DEPS = [
12
+ 'gremlin',
13
+ '@aws-sdk/client-neptune',
14
+ 'neptune-python-utils',
15
+ 'amazon-neptune-tools',
16
+ ];
17
+ const DGRAPH_DEPS = ['dgraph-js', 'dgraph-js-http', 'pydgraph', 'dgraph4j'];
18
+ export async function detectGraphDb(projectPath) {
19
+ const deps = await collectDependencies(projectPath);
20
+ // Neo4j
21
+ if (NEO4J_DEPS.some((d) => deps.has(d))) {
22
+ return 'neo4j';
23
+ }
24
+ // ArangoDB
25
+ if (ARANGO_DEPS.some((d) => deps.has(d))) {
26
+ return 'arangodb';
27
+ }
28
+ // Neptune (AWS — via Gremlin/OpenCypher + AWS SDK)
29
+ if (NEPTUNE_DEPS.some((d) => deps.has(d))) {
30
+ return 'neptune';
31
+ }
32
+ // Dgraph
33
+ if (DGRAPH_DEPS.some((d) => deps.has(d))) {
34
+ return 'dgraph';
35
+ }
36
+ return null;
37
+ }
38
+ //# sourceMappingURL=graph-db-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-db-detector.js","sourceRoot":"","sources":["../../../src/engine/detectors/graph-db-detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,GAAG;IACjB,cAAc;IACd,OAAO;IACP,QAAQ;IACR,iBAAiB;IACjB,UAAU;IACV,mBAAmB;CACpB,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AAC9E,MAAM,YAAY,GAAG;IACnB,SAAS;IACT,yBAAyB;IACzB,sBAAsB;IACtB,sBAAsB;CACvB,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACrD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEpD,QAAQ;IACR,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW;IACX,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,mDAAmD;IACnD,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS;IACT,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { NewSqlDb } from '../../types/index.js';
2
+ export declare function detectNewSqlDb(projectPath: string): Promise<NewSqlDb | null>;
3
+ //# sourceMappingURL=newsql-db-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"newsql-db-detector.d.ts","sourceRoot":"","sources":["../../../src/engine/detectors/newsql-db-detector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAcrD,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAkClF"}