nttp 1.0.5 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,23 +8,39 @@ Query databases with natural language using an LLM.
8
8
  npm install nttp
9
9
  ```
10
10
 
11
- You'll also need a database driver:
11
+ ## Quick Start with CLI (Recommended)
12
+
13
+ The easiest way to get started is with our interactive setup wizard:
12
14
 
13
15
  ```bash
14
- # SQLite
15
- npm install better-sqlite3
16
+ npx nttp setup
17
+ ```
16
18
 
17
- # PostgreSQL
18
- npm install pg
19
+ This will:
20
+ - Guide you through database configuration
21
+ - ✅ Help you choose an LLM provider
22
+ - ✅ Automatically install required dependencies
23
+ - ✅ Create your `.env` file
24
+ - ✅ Generate example code
19
25
 
20
- # MySQL
21
- npm install mysql2
26
+ Then query your database:
22
27
 
23
- # SQL Server
24
- npm install mssql
28
+ ```bash
29
+ npx nttp query "show me 5 users"
25
30
  ```
26
31
 
27
- ## Quick Start
32
+ Or use in your code:
33
+
34
+ ```typescript
35
+ import { NTTP } from 'nttp';
36
+
37
+ // Load configuration from .env automatically
38
+ const nttp = await NTTP.fromEnv();
39
+ const result = await nttp.query("show me users");
40
+ await nttp.close();
41
+ ```
42
+
43
+ ## Manual Setup (Advanced)
28
44
 
29
45
  ```typescript
30
46
  import { NTTP } from 'nttp';
@@ -225,6 +241,37 @@ NTTP works with any SQL database supported by Knex.js:
225
241
  - **Cache Miss**: ~2-3s (LLM call)
226
242
  - **Throughput**: >10,000 req/s (cached)
227
243
 
244
+ ## CLI Commands
245
+
246
+ ### `npx nttp setup`
247
+
248
+ Interactive setup wizard with Vercel-inspired DX:
249
+
250
+ - Choose database type (PostgreSQL, MySQL, SQLite, SQL Server)
251
+ - Configure connection details
252
+ - Select LLM provider (Anthropic, OpenAI, Cohere, Mistral, Google)
253
+ - Optional: Enable semantic caching (L2 cache)
254
+ - Automatically installs dependencies
255
+ - Creates `.env` file
256
+ - Generates example code
257
+
258
+ ### `npx nttp init`
259
+
260
+ Alias for `npx nttp setup`. Quick project initialization.
261
+
262
+ ### `npx nttp query <text>`
263
+
264
+ Execute a natural language query from the command line:
265
+
266
+ ```bash
267
+ npx nttp query "show me 5 products"
268
+ npx nttp query "count active users"
269
+ npx nttp query "top 10 customers by revenue" --format json
270
+ ```
271
+
272
+ Options:
273
+ - `--format <type>` - Output format: `table` (default) or `json`
274
+
228
275
  ## Error Handling
229
276
 
230
277
  ```typescript
package/dist/NTTP.d.ts CHANGED
@@ -41,6 +41,18 @@ export declare class NTTP {
41
41
  private l1Cache?;
42
42
  private l2Cache?;
43
43
  constructor(config: NTTPConfig);
44
+ /**
45
+ * Create NTTP instance from environment variables.
46
+ * Reads configuration from .env file.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // Requires .env with DATABASE_URL, LLM_PROVIDER, etc.
51
+ * const nttp = await NTTP.fromEnv();
52
+ * const result = await nttp.query("show me users");
53
+ * ```
54
+ */
55
+ static fromEnv(): Promise<NTTP>;
44
56
  /**
45
57
  * Initialize NTTP - must be called before using.
46
58
  */
@@ -1 +1 @@
1
- {"version":3,"file":"NTTP.d.ts","sourceRoot":"","sources":["../src/NTTP.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,UAAU,EACX,MAAM,YAAY,CAAC;AAOpB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,IAAI;IAaH,OAAO,CAAC,MAAM;IAZ1B,OAAO,CAAC,EAAE,CAAO;IACjB,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,UAAU,CAAkE;IAGpF,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAgB;gBAEZ,MAAM,EAAE,UAAU;IA8BtC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;;;;;;;OAQG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB5E;;;;;;;;;OASG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,GAAG,EAAE,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;KACvC,CAAC;IAmBF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIhD;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAIxE;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IA4B1C;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpC;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAIvD;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAW9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;YACW,eAAe;CAW9B"}
1
+ {"version":3,"file":"NTTP.d.ts","sourceRoot":"","sources":["../src/NTTP.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,UAAU,EACX,MAAM,YAAY,CAAC;AAYpB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,IAAI;IAaH,OAAO,CAAC,MAAM;IAZ1B,OAAO,CAAC,EAAE,CAAO;IACjB,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,UAAU,CAAkE;IAGpF,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAgB;gBAEZ,MAAM,EAAE,UAAU;IA+CtC;;;;;;;;;;OAUG;WACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsErC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;;;;;;;OAQG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB5E;;;;;;;;;OASG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,GAAG,EAAE,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;KACvC,CAAC;IAmBF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIhD;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAIxE;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IA4B1C;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpC;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAIvD;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAW9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;YACW,eAAe;CAW9B"}
package/dist/NTTP.js CHANGED
@@ -9,6 +9,7 @@ import { LLMService } from './llm.js';
9
9
  import { IntentParser } from './intent.js';
10
10
  import { QueryExecutor } from './executor.js';
11
11
  import { ExactCache, SemanticCache } from './cache/index.js';
12
+ import { validateDatabaseClient, validateConnection, validateLLMConfig, } from './validation.js';
12
13
  /**
13
14
  * nttp - natural text to query
14
15
  *
@@ -50,8 +51,20 @@ export class NTTP {
50
51
  l2Cache;
51
52
  constructor(config) {
52
53
  this.config = config;
54
+ // Validate configuration
55
+ const validatedClient = validateDatabaseClient(config.database.client);
56
+ validateConnection(validatedClient, config.database.connection || config.database.filename);
57
+ validateLLMConfig(config.llm);
58
+ // Normalize client name
59
+ const normalizedConfig = {
60
+ ...config,
61
+ database: {
62
+ ...config.database,
63
+ client: validatedClient,
64
+ },
65
+ };
53
66
  // Initialize Knex
54
- this.db = knex(config.database);
67
+ this.db = knex(normalizedConfig.database);
55
68
  // Initialize schema inspector
56
69
  this.inspector = SchemaInspector(this.db);
57
70
  // Initialize services
@@ -68,6 +81,76 @@ export class NTTP {
68
81
  // Initialize executor with caches
69
82
  this.executor = new QueryExecutor(this.db, this.llm, this.cache, this.l1Cache, this.l2Cache);
70
83
  }
84
+ /**
85
+ * Create NTTP instance from environment variables.
86
+ * Reads configuration from .env file.
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * // Requires .env with DATABASE_URL, LLM_PROVIDER, etc.
91
+ * const nttp = await NTTP.fromEnv();
92
+ * const result = await nttp.query("show me users");
93
+ * ```
94
+ */
95
+ static async fromEnv() {
96
+ const databaseType = process.env.DATABASE_TYPE || 'pg';
97
+ const databaseUrl = process.env.DATABASE_URL;
98
+ const databasePath = process.env.DATABASE_PATH;
99
+ if (!databaseUrl && !databasePath) {
100
+ throw new Error('DATABASE_URL or DATABASE_PATH environment variable is required');
101
+ }
102
+ const llmProvider = (process.env.LLM_PROVIDER || 'anthropic');
103
+ const llmModel = process.env.LLM_MODEL || 'claude-sonnet-4-5-20250929';
104
+ // Get API key based on provider
105
+ const llmApiKeyMap = {
106
+ anthropic: process.env.ANTHROPIC_API_KEY,
107
+ openai: process.env.OPENAI_API_KEY,
108
+ cohere: process.env.COHERE_API_KEY,
109
+ mistral: process.env.MISTRAL_API_KEY,
110
+ google: process.env.GOOGLE_API_KEY,
111
+ };
112
+ const llmApiKey = llmApiKeyMap[llmProvider];
113
+ if (!llmApiKey) {
114
+ throw new Error(`${llmProvider.toUpperCase()}_API_KEY environment variable is required`);
115
+ }
116
+ const config = {
117
+ database: databasePath
118
+ ? {
119
+ client: 'better-sqlite3',
120
+ connection: { filename: databasePath },
121
+ }
122
+ : {
123
+ client: databaseType,
124
+ connection: databaseUrl,
125
+ },
126
+ llm: {
127
+ provider: llmProvider,
128
+ model: llmModel,
129
+ apiKey: llmApiKey,
130
+ },
131
+ };
132
+ // Optional: L2 cache configuration
133
+ const embeddingProvider = process.env.EMBEDDING_PROVIDER;
134
+ if (embeddingProvider === 'openai' || embeddingProvider === 'cohere') {
135
+ const embeddingApiKey = embeddingProvider === 'openai'
136
+ ? process.env.OPENAI_API_KEY
137
+ : process.env.COHERE_API_KEY;
138
+ if (embeddingApiKey) {
139
+ config.cache = {
140
+ l2: {
141
+ provider: embeddingProvider,
142
+ model: embeddingProvider === 'openai'
143
+ ? 'text-embedding-3-small'
144
+ : 'embed-english-v3.0',
145
+ apiKey: embeddingApiKey,
146
+ },
147
+ };
148
+ }
149
+ }
150
+ const nttp = new NTTP(config);
151
+ await nttp.init();
152
+ return nttp;
153
+ }
71
154
  /**
72
155
  * Initialize NTTP - must be called before using.
73
156
  */
package/dist/NTTP.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"NTTP.js","sourceRoot":"","sources":["../src/NTTP.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NTTP.js","sourceRoot":"","sources":["../src/NTTP.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Quick project initialization
3
+ */
4
+ export declare function runInit(): Promise<void>;
5
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7C"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Quick project initialization
3
+ */
4
+ import chalk from 'chalk';
5
+ import { runSetup } from './setup.js';
6
+ export async function runInit() {
7
+ console.log(chalk.bold.cyan('\n🚀 Initializing nttp in current project...\n'));
8
+ await runSetup();
9
+ }
10
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC/E,MAAM,QAAQ,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Execute queries from CLI
3
+ */
4
+ export declare function runQuery(text: string, options: {
5
+ format: 'json' | 'table';
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/cli/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GACpC,OAAO,CAAC,IAAI,CAAC,CAyCf"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Execute queries from CLI
3
+ */
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import { NTTP } from '../NTTP.js';
7
+ export async function runQuery(text, options) {
8
+ const spinner = ora('Connecting to database...').start();
9
+ try {
10
+ // Load from .env
11
+ const nttp = await NTTP.fromEnv();
12
+ spinner.succeed('Connected');
13
+ // Execute query
14
+ spinner.start('Executing query...');
15
+ const result = await nttp.query(text);
16
+ spinner.succeed(`Query complete (${result.data.length} rows in ${result.executionTimeMs}ms)`);
17
+ // Display results
18
+ console.log(chalk.gray(`\nSQL: ${result.sql}`));
19
+ console.log(chalk.gray(`Cache: ${result.cacheHit ? chalk.green('HIT') : chalk.yellow('MISS')}\n`));
20
+ if (options.format === 'json') {
21
+ console.log(JSON.stringify(result.data, null, 2));
22
+ }
23
+ else {
24
+ console.table(result.data);
25
+ }
26
+ await nttp.close();
27
+ }
28
+ catch (error) {
29
+ spinner.fail('Query failed');
30
+ const err = error;
31
+ console.error(chalk.red(`\n${err.message}\n`));
32
+ if (!process.env.DATABASE_URL && !process.env.DATABASE_PATH) {
33
+ console.log(chalk.yellow('💡 Tip: Run "npx nttp setup" first\n'));
34
+ }
35
+ process.exit(1);
36
+ }
37
+ }
38
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/cli/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,OAAqC;IAErC,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;IAEzD,IAAI,CAAC;QACH,iBAAiB;QACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE7B,gBAAgB;QAChB,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,OAAO,CACb,mBAAmB,MAAM,CAAC,IAAI,CAAC,MAAM,YAAY,MAAM,CAAC,eAAe,KAAK,CAC7E,CAAC;QAEF,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,UAAU,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAC1E,CACF,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Interactive setup wizard - Vercel-inspired DX
3
+ */
4
+ export declare function runSetup(): Promise<void>;
5
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwDH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAoQ9C"}
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Interactive setup wizard - Vercel-inspired DX
3
+ */
4
+ import prompts from 'prompts';
5
+ import { existsSync, writeFileSync } from 'fs';
6
+ import { execSync } from 'child_process';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ import boxen from 'boxen';
10
+ const DATABASE_DRIVERS = {
11
+ pg: { name: 'pg', description: 'PostgreSQL' },
12
+ mysql2: { name: 'mysql2', description: 'MySQL' },
13
+ 'better-sqlite3': { name: 'better-sqlite3', description: 'SQLite' },
14
+ mssql: { name: 'mssql', description: 'SQL Server' },
15
+ };
16
+ const LLM_PROVIDERS = {
17
+ anthropic: {
18
+ name: '@ai-sdk/anthropic',
19
+ defaultModel: 'claude-sonnet-4-5-20250929',
20
+ envKey: 'ANTHROPIC_API_KEY',
21
+ },
22
+ openai: {
23
+ name: '@ai-sdk/openai',
24
+ defaultModel: 'gpt-4o',
25
+ envKey: 'OPENAI_API_KEY',
26
+ },
27
+ cohere: {
28
+ name: '@ai-sdk/cohere',
29
+ defaultModel: 'command-r-plus',
30
+ envKey: 'COHERE_API_KEY',
31
+ },
32
+ mistral: {
33
+ name: '@ai-sdk/mistral',
34
+ defaultModel: 'mistral-large-latest',
35
+ envKey: 'MISTRAL_API_KEY',
36
+ },
37
+ google: {
38
+ name: '@ai-sdk/google-vertex',
39
+ defaultModel: 'gemini-pro',
40
+ envKey: 'GOOGLE_API_KEY',
41
+ },
42
+ };
43
+ export async function runSetup() {
44
+ console.clear();
45
+ // Welcome banner
46
+ console.log(boxen(chalk.bold.cyan('nttp setup') +
47
+ '\n\n' +
48
+ chalk.gray('Query databases with natural language') +
49
+ '\n' +
50
+ chalk.gray('Inspired by Vercel DX ✨'), {
51
+ padding: 1,
52
+ margin: 1,
53
+ borderStyle: 'round',
54
+ borderColor: 'cyan',
55
+ }));
56
+ // Check for existing .env
57
+ if (existsSync('.env')) {
58
+ const { overwrite } = await prompts({
59
+ type: 'confirm',
60
+ name: 'overwrite',
61
+ message: chalk.yellow('.env already exists. Overwrite?'),
62
+ initial: false,
63
+ });
64
+ if (!overwrite) {
65
+ console.log(chalk.gray('\n✓ Keeping existing configuration\n'));
66
+ return;
67
+ }
68
+ }
69
+ console.log(chalk.bold('\n🗄️ Database Configuration\n'));
70
+ // Database type
71
+ const { databaseType } = await prompts({
72
+ type: 'select',
73
+ name: 'databaseType',
74
+ message: 'Which database?',
75
+ choices: [
76
+ {
77
+ title: '🐘 PostgreSQL',
78
+ value: 'pg',
79
+ description: 'Recommended for production',
80
+ },
81
+ {
82
+ title: '🐬 MySQL',
83
+ value: 'mysql2',
84
+ description: 'Popular and widely supported',
85
+ },
86
+ {
87
+ title: '📁 SQLite',
88
+ value: 'better-sqlite3',
89
+ description: 'Perfect for development',
90
+ },
91
+ {
92
+ title: '🔷 SQL Server',
93
+ value: 'mssql',
94
+ description: 'Microsoft SQL Server',
95
+ },
96
+ ],
97
+ initial: 0,
98
+ });
99
+ if (!databaseType) {
100
+ console.log(chalk.red('\n✗ Setup cancelled\n'));
101
+ process.exit(1);
102
+ }
103
+ const config = { databaseType };
104
+ // Database connection
105
+ if (databaseType === 'better-sqlite3') {
106
+ const { databasePath } = await prompts({
107
+ type: 'text',
108
+ name: 'databasePath',
109
+ message: 'SQLite database path:',
110
+ initial: './database.db',
111
+ });
112
+ config.databasePath = databasePath;
113
+ }
114
+ else {
115
+ const dbDriver = DATABASE_DRIVERS[databaseType];
116
+ const { databaseUrl } = await prompts({
117
+ type: 'text',
118
+ name: 'databaseUrl',
119
+ message: `${dbDriver.description} connection URL:`,
120
+ initial: databaseType === 'pg'
121
+ ? 'postgresql://user:pass@localhost:5432/db'
122
+ : databaseType === 'mysql2'
123
+ ? 'mysql://user:pass@localhost:3306/db'
124
+ : 'Server=localhost;Database=mydb;User Id=sa;Password=pass;',
125
+ });
126
+ config.databaseUrl = databaseUrl;
127
+ }
128
+ console.log(chalk.bold('\n🤖 LLM Configuration\n'));
129
+ // LLM provider
130
+ const { llmProvider } = await prompts({
131
+ type: 'select',
132
+ name: 'llmProvider',
133
+ message: 'Which LLM provider?',
134
+ choices: [
135
+ {
136
+ title: '🔮 Anthropic (Claude)',
137
+ value: 'anthropic',
138
+ description: 'Recommended - Best quality',
139
+ },
140
+ {
141
+ title: '🌟 OpenAI (GPT-4)',
142
+ value: 'openai',
143
+ description: 'Fast and reliable',
144
+ },
145
+ {
146
+ title: '🧠 Cohere',
147
+ value: 'cohere',
148
+ description: 'Enterprise-focused',
149
+ },
150
+ {
151
+ title: '🚀 Mistral',
152
+ value: 'mistral',
153
+ description: 'Open and powerful',
154
+ },
155
+ {
156
+ title: '🏔️ Google (Gemini)',
157
+ value: 'google',
158
+ description: 'Multimodal AI',
159
+ },
160
+ ],
161
+ initial: 0,
162
+ });
163
+ if (!llmProvider) {
164
+ console.log(chalk.red('\n✗ Setup cancelled\n'));
165
+ process.exit(1);
166
+ }
167
+ config.llmProvider = llmProvider;
168
+ const providerInfo = LLM_PROVIDERS[llmProvider];
169
+ // LLM model
170
+ const { llmModel } = await prompts({
171
+ type: 'text',
172
+ name: 'llmModel',
173
+ message: 'Model name:',
174
+ initial: providerInfo.defaultModel,
175
+ });
176
+ config.llmModel = llmModel;
177
+ // API key
178
+ const { llmApiKey } = await prompts({
179
+ type: 'password',
180
+ name: 'llmApiKey',
181
+ message: `${providerInfo.envKey}:`,
182
+ validate: (value) => (value.length > 0 ? true : 'API key required'),
183
+ });
184
+ config.llmApiKey = llmApiKey;
185
+ console.log(chalk.bold('\n⚡ Performance (Optional)\n'));
186
+ // L2 Cache
187
+ const { enableL2Cache } = await prompts({
188
+ type: 'confirm',
189
+ name: 'enableL2Cache',
190
+ message: 'Enable semantic cache? (Faster queries, requires embedding API)',
191
+ initial: false,
192
+ });
193
+ config.enableL2Cache = enableL2Cache;
194
+ if (enableL2Cache) {
195
+ const { embeddingProvider } = await prompts({
196
+ type: 'select',
197
+ name: 'embeddingProvider',
198
+ message: 'Embedding provider:',
199
+ choices: [
200
+ { title: 'OpenAI', value: 'openai' },
201
+ { title: 'Cohere', value: 'cohere' },
202
+ ],
203
+ });
204
+ config.embeddingProvider = embeddingProvider;
205
+ const { embeddingApiKey } = await prompts({
206
+ type: 'password',
207
+ name: 'embeddingApiKey',
208
+ message: `${embeddingProvider.toUpperCase()}_API_KEY:`,
209
+ });
210
+ config.embeddingApiKey = embeddingApiKey;
211
+ }
212
+ // Install dependencies
213
+ console.log(chalk.bold('\n📦 Installing dependencies...\n'));
214
+ const dependencies = [
215
+ 'nttp',
216
+ 'dotenv',
217
+ DATABASE_DRIVERS[databaseType].name,
218
+ providerInfo.name,
219
+ ];
220
+ if (config.enableL2Cache && config.embeddingProvider === 'openai') {
221
+ if (!dependencies.includes('@ai-sdk/openai')) {
222
+ dependencies.push('@ai-sdk/openai');
223
+ }
224
+ }
225
+ const spinner = ora('Installing packages...').start();
226
+ try {
227
+ execSync(`npm install ${dependencies.join(' ')}`, {
228
+ stdio: 'pipe',
229
+ encoding: 'utf-8',
230
+ });
231
+ spinner.succeed(chalk.green('Dependencies installed'));
232
+ }
233
+ catch (error) {
234
+ spinner.fail(chalk.red('Failed to install dependencies'));
235
+ console.error(chalk.red(`\n${error}\n`));
236
+ process.exit(1);
237
+ }
238
+ // Generate .env
239
+ console.log(chalk.bold('\n📝 Creating configuration...\n'));
240
+ const envContent = generateEnvFile(config);
241
+ writeFileSync('.env', envContent);
242
+ console.log(chalk.green('✓ Created .env file'));
243
+ // Generate example code
244
+ const exampleCode = generateExampleCode();
245
+ writeFileSync('nttp-example.js', exampleCode);
246
+ console.log(chalk.green('✓ Created nttp-example.js'));
247
+ // Success message
248
+ console.log(boxen(chalk.bold.green('✓ Setup complete!') +
249
+ '\n\n' +
250
+ chalk.white('Next steps:') +
251
+ '\n\n' +
252
+ chalk.cyan(' 1. Review your .env file') +
253
+ '\n' +
254
+ chalk.cyan(' 2. Run: node nttp-example.js') +
255
+ '\n' +
256
+ chalk.cyan(' 3. Or try: npx nttp query "show me 5 records"') +
257
+ '\n\n' +
258
+ chalk.gray('Documentation: https://github.com/tylergibbs/nttp'), {
259
+ padding: 1,
260
+ margin: 1,
261
+ borderStyle: 'round',
262
+ borderColor: 'green',
263
+ }));
264
+ }
265
+ function generateEnvFile(config) {
266
+ const lines = [
267
+ '# nttp configuration',
268
+ '# Generated by nttp setup',
269
+ '',
270
+ '# Database',
271
+ ];
272
+ if (config.databaseType === 'better-sqlite3') {
273
+ lines.push(`DATABASE_PATH=${config.databasePath}`);
274
+ }
275
+ else {
276
+ lines.push(`DATABASE_URL=${config.databaseUrl}`);
277
+ }
278
+ lines.push(`DATABASE_TYPE=${config.databaseType}`);
279
+ lines.push('');
280
+ lines.push('# LLM Provider');
281
+ lines.push(`LLM_PROVIDER=${config.llmProvider}`);
282
+ lines.push(`LLM_MODEL=${config.llmModel}`);
283
+ const providerInfo = LLM_PROVIDERS[config.llmProvider];
284
+ lines.push(`${providerInfo.envKey}=${config.llmApiKey}`);
285
+ if (config.enableL2Cache && config.embeddingProvider) {
286
+ lines.push('');
287
+ lines.push('# Semantic Cache');
288
+ lines.push(`EMBEDDING_PROVIDER=${config.embeddingProvider}`);
289
+ lines.push(`${config.embeddingProvider.toUpperCase()}_API_KEY=${config.embeddingApiKey}`);
290
+ }
291
+ return lines.join('\n') + '\n';
292
+ }
293
+ function generateExampleCode() {
294
+ return `import 'dotenv/config';
295
+ import { NTTP } from 'nttp';
296
+
297
+ async function main() {
298
+ // Load configuration from .env
299
+ const nttp = await NTTP.fromEnv();
300
+
301
+ console.log('✓ Connected to database');
302
+
303
+ // Run a natural language query
304
+ const result = await nttp.query('show me 5 records');
305
+
306
+ console.log(\`\\n✓ Query succeeded! Got \${result.data.length} rows\`);
307
+ console.log(\` Generated SQL: \${result.sql}\`);
308
+ console.log(\` Cache hit: \${result.cacheHit}\`);
309
+ console.log(\` Time: \${result.executionTimeMs}ms\\n\`);
310
+
311
+ // Display results
312
+ console.table(result.data);
313
+
314
+ // Cleanup
315
+ await nttp.close();
316
+ }
317
+
318
+ main().catch(console.error);
319
+ `;
320
+ }
321
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * nttp CLI - Vercel-inspired developer experience
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;GAEG"}
package/dist/cli.js ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * nttp CLI - Vercel-inspired developer experience
4
+ */
5
+ import { Command } from 'commander';
6
+ import { runSetup } from './cli/setup.js';
7
+ import { runQuery } from './cli/query.js';
8
+ import { runInit } from './cli/init.js';
9
+ const program = new Command();
10
+ program
11
+ .name('nttp')
12
+ .description('Query databases with natural language')
13
+ .version('1.1.1');
14
+ program
15
+ .command('setup')
16
+ .description('Interactive setup wizard')
17
+ .action(runSetup);
18
+ program
19
+ .command('init')
20
+ .description('Initialize nttp in current project')
21
+ .action(runInit);
22
+ program
23
+ .command('query <text>')
24
+ .description('Execute a natural language query')
25
+ .option('-f, --format <type>', 'Output format (json|table)', 'table')
26
+ .action(runQuery);
27
+ program.parse();
28
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,uCAAuC,CAAC;KACpD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnB,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,EAAE,OAAO,CAAC;KACpE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEpB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Configuration validation and helpful error messages
3
+ */
4
+ /**
5
+ * Valid Knex client names
6
+ */
7
+ declare const VALID_CLIENTS: readonly ["pg", "mysql2", "better-sqlite3", "mssql"];
8
+ /**
9
+ * Validate and normalize database client name
10
+ */
11
+ export declare function validateDatabaseClient(client: string | undefined): typeof VALID_CLIENTS[number];
12
+ /**
13
+ * Validate connection configuration
14
+ */
15
+ export declare function validateConnection(client: string, connection: string | object | undefined): void;
16
+ /**
17
+ * Validate LLM configuration
18
+ */
19
+ export declare function validateLLMConfig(config: {
20
+ provider?: string;
21
+ model?: string;
22
+ apiKey?: string;
23
+ }): void;
24
+ export {};
25
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,QAAA,MAAM,aAAa,sDAAuD,CAAC;AAe3E;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,OAAO,aAAa,CAAC,MAAM,CAAC,CAqC9B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GACtC,IAAI,CA4BN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,IAAI,CAyCP"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Configuration validation and helpful error messages
3
+ */
4
+ /**
5
+ * Valid Knex client names
6
+ */
7
+ const VALID_CLIENTS = ['pg', 'mysql2', 'better-sqlite3', 'mssql'];
8
+ /**
9
+ * Common mistakes and their corrections
10
+ */
11
+ const CLIENT_ALIASES = {
12
+ postgres: 'pg',
13
+ postgresql: 'pg',
14
+ sqlite: 'better-sqlite3',
15
+ sqlite3: 'better-sqlite3',
16
+ mysql: 'mysql2',
17
+ sqlserver: 'mssql',
18
+ 'sql-server': 'mssql',
19
+ };
20
+ /**
21
+ * Validate and normalize database client name
22
+ */
23
+ export function validateDatabaseClient(client) {
24
+ if (!client) {
25
+ throw new Error('Database client is required. Valid options: pg, mysql2, better-sqlite3, mssql\n' +
26
+ '💡 Tip: Run "npx nttp setup" for interactive configuration');
27
+ }
28
+ // Check if it's already valid
29
+ if (VALID_CLIENTS.includes(client)) {
30
+ return client;
31
+ }
32
+ // Check for common aliases
33
+ const normalized = CLIENT_ALIASES[client.toLowerCase()];
34
+ if (normalized) {
35
+ console.warn(`⚠️ Database client "${client}" is not valid. Using "${normalized}" instead.\n` +
36
+ ` 💡 Tip: Use "${normalized}" directly to avoid this warning.`);
37
+ return normalized;
38
+ }
39
+ // Invalid client - provide helpful error
40
+ throw new Error(`Invalid database client: "${client}"\n\n` +
41
+ `Valid options:\n` +
42
+ ` - "pg" (PostgreSQL)\n` +
43
+ ` - "mysql2" (MySQL)\n` +
44
+ ` - "better-sqlite3" (SQLite)\n` +
45
+ ` - "mssql" (SQL Server)\n\n` +
46
+ `Common mistakes:\n` +
47
+ ` - Use "pg" not "postgres" or "postgresql"\n` +
48
+ ` - Use "better-sqlite3" not "sqlite" or "sqlite3"\n` +
49
+ ` - Use "mysql2" not "mysql"\n\n` +
50
+ `💡 Tip: Run "npx nttp setup" for interactive configuration`);
51
+ }
52
+ /**
53
+ * Validate connection configuration
54
+ */
55
+ export function validateConnection(client, connection) {
56
+ if (!connection) {
57
+ throw new Error(`Database connection is required for ${client}\n` +
58
+ `💡 Tip: Run "npx nttp setup" for interactive configuration`);
59
+ }
60
+ // Validate connection string format
61
+ if (typeof connection === 'string') {
62
+ if (client === 'pg') {
63
+ if (!connection.startsWith('postgres://') && !connection.startsWith('postgresql://')) {
64
+ throw new Error(`PostgreSQL connection string must start with "postgresql://" or "postgres://"\n` +
65
+ `Got: ${connection.substring(0, 20)}...\n\n` +
66
+ `Example: postgresql://user:pass@localhost:5432/dbname\n` +
67
+ `💡 Tip: Run "npx nttp setup" for interactive configuration`);
68
+ }
69
+ }
70
+ else if (client === 'mysql2') {
71
+ if (!connection.startsWith('mysql://')) {
72
+ console.warn(`⚠️ MySQL connection string should start with "mysql://"\n` +
73
+ ` Got: ${connection.substring(0, 20)}...`);
74
+ }
75
+ }
76
+ }
77
+ }
78
+ /**
79
+ * Validate LLM configuration
80
+ */
81
+ export function validateLLMConfig(config) {
82
+ const validProviders = ['anthropic', 'openai', 'cohere', 'mistral', 'google'];
83
+ if (!config.provider) {
84
+ throw new Error('LLM provider is required\n' +
85
+ `Valid options: ${validProviders.join(', ')}\n` +
86
+ `💡 Tip: Run "npx nttp setup" for interactive configuration`);
87
+ }
88
+ if (!validProviders.includes(config.provider)) {
89
+ throw new Error(`Invalid LLM provider: "${config.provider}"\n` +
90
+ `Valid options: ${validProviders.join(', ')}\n` +
91
+ `💡 Tip: Run "npx nttp setup" for interactive configuration`);
92
+ }
93
+ if (!config.model) {
94
+ throw new Error(`LLM model is required for ${config.provider}\n` +
95
+ `💡 Tip: Run "npx nttp setup" for interactive configuration`);
96
+ }
97
+ if (!config.apiKey) {
98
+ const envKeyMap = {
99
+ anthropic: 'ANTHROPIC_API_KEY',
100
+ openai: 'OPENAI_API_KEY',
101
+ cohere: 'COHERE_API_KEY',
102
+ mistral: 'MISTRAL_API_KEY',
103
+ google: 'GOOGLE_API_KEY',
104
+ };
105
+ throw new Error(`API key is required for ${config.provider}\n` +
106
+ `Please set ${envKeyMap[config.provider]} environment variable\n` +
107
+ `💡 Tip: Run "npx nttp setup" for interactive configuration`);
108
+ }
109
+ }
110
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAU,CAAC;AAE3E;;GAEG;AACH,MAAM,cAAc,GAAiD;IACnE,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,gBAAgB;IACzB,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,OAAO;IAClB,YAAY,EAAE,OAAO;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAA0B;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,iFAAiF;YAC/E,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAa,CAAC,EAAE,CAAC;QAC1C,OAAO,MAAsC,CAAC;IAChD,CAAC;IAED,2BAA2B;IAC3B,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACxD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,wBAAwB,MAAM,0BAA0B,UAAU,cAAc;YAC9E,mBAAmB,UAAU,mCAAmC,CACnE,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,yCAAyC;IACzC,MAAM,IAAI,KAAK,CACb,6BAA6B,MAAM,OAAO;QACxC,kBAAkB;QAClB,yBAAyB;QACzB,wBAAwB;QACxB,iCAAiC;QACjC,8BAA8B;QAC9B,oBAAoB;QACpB,+CAA+C;QAC/C,sDAAsD;QACtD,kCAAkC;QAClC,4DAA4D,CAC/D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,UAAuC;IAEvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,uCAAuC,MAAM,IAAI;YAC/C,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACrF,MAAM,IAAI,KAAK,CACb,iFAAiF;oBAC/E,QAAQ,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS;oBAC5C,yDAAyD;oBACzD,4DAA4D,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvC,OAAO,CAAC,IAAI,CACV,4DAA4D;oBAC1D,WAAW,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAC9C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAIjC;IACC,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE9E,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,4BAA4B;YAC1B,kBAAkB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAC/C,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM,CAAC,QAAQ,KAAK;YAC5C,kBAAkB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAC/C,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,6BAA6B,MAAM,CAAC,QAAQ,IAAI;YAC9C,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,SAAS,GAA2B;YACxC,SAAS,EAAE,mBAAmB;YAC9B,MAAM,EAAE,gBAAgB;YACxB,MAAM,EAAE,gBAAgB;YACxB,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,gBAAgB;SACzB,CAAC;QAEF,MAAM,IAAI,KAAK,CACb,2BAA2B,MAAM,CAAC,QAAQ,IAAI;YAC5C,cAAc,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB;YACjE,4DAA4D,CAC/D,CAAC;IACJ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "nttp",
3
- "version": "1.0.5",
3
+ "version": "1.1.1",
4
4
  "description": "natural text to query - Query databases with natural language",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "nttp": "./dist/cli.js"
10
+ },
8
11
  "exports": {
9
12
  ".": {
10
13
  "types": "./dist/index.d.ts",
@@ -41,22 +44,27 @@
41
44
  },
42
45
  "homepage": "https://github.com/tylergibbs/nttp#readme",
43
46
  "dependencies": {
47
+ "@ai-sdk/openai": "^3.0.0",
48
+ "ai": "^6.0.0",
49
+ "boxen": "^8.0.1",
50
+ "chalk": "^5.6.2",
51
+ "commander": "^14.0.2",
44
52
  "knex": "^3.1.0",
45
53
  "knex-schema-inspector": "^3.1.0",
54
+ "ora": "^9.0.0",
55
+ "prompts": "^2.4.2",
46
56
  "zod": "^3.23.8",
47
- "zod-to-json-schema": "^3.23.0",
48
- "ai": "^6.0.0",
49
- "@ai-sdk/openai": "^3.0.0"
57
+ "zod-to-json-schema": "^3.23.0"
50
58
  },
51
59
  "peerDependencies": {
52
- "better-sqlite3": "^9.6.0",
53
- "pg": "^8.13.1",
54
- "mysql2": "^3.11.5",
55
- "mssql": "^11.0.1",
56
60
  "@ai-sdk/anthropic": "^3.0.0",
57
61
  "@ai-sdk/cohere": "^2.0.0",
62
+ "@ai-sdk/google-vertex": "^1.0.0",
58
63
  "@ai-sdk/mistral": "^1.0.0",
59
- "@ai-sdk/google-vertex": "^1.0.0"
64
+ "better-sqlite3": "^9.6.0",
65
+ "mssql": "^11.0.1",
66
+ "mysql2": "^3.11.5",
67
+ "pg": "^8.13.1"
60
68
  },
61
69
  "peerDependenciesMeta": {
62
70
  "better-sqlite3": {
@@ -86,6 +94,7 @@
86
94
  },
87
95
  "devDependencies": {
88
96
  "@types/node": "^20.12.7",
97
+ "@types/prompts": "^2.4.9",
89
98
  "typescript": "^5.4.5"
90
99
  },
91
100
  "engines": {