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 +57 -10
- package/dist/NTTP.d.ts +12 -0
- package/dist/NTTP.d.ts.map +1 -1
- package/dist/NTTP.js +84 -1
- package/dist/NTTP.js.map +1 -1
- package/dist/cli/init.d.ts +5 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +10 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/query.d.ts +7 -0
- package/dist/cli/query.d.ts.map +1 -0
- package/dist/cli/query.js +38 -0
- package/dist/cli/query.js.map +1 -0
- package/dist/cli/setup.d.ts +5 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +321 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +28 -0
- package/dist/cli.js.map +1 -0
- package/dist/validation.d.ts +25 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +110 -0
- package/dist/validation.js.map +1 -0
- package/package.json +18 -9
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
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
+
npx nttp setup
|
|
17
|
+
```
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
21
|
-
npm install mysql2
|
|
26
|
+
Then query your database:
|
|
22
27
|
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
```bash
|
|
29
|
+
npx nttp query "show me 5 users"
|
|
25
30
|
```
|
|
26
31
|
|
|
27
|
-
|
|
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
|
*/
|
package/dist/NTTP.d.ts.map
CHANGED
|
@@ -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;
|
|
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(
|
|
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":"AAAA;;GAEG;AAEH,OAAO,OAAiB,MAAM,MAAM,CAAC;AACrC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AASxD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"NTTP.js","sourceRoot":"","sources":["../src/NTTP.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
package/dist/cli/init.js
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -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":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nttp",
|
|
3
|
-
"version": "1.
|
|
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
|
-
"
|
|
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": {
|