nttp 1.0.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md 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:
14
+
15
+ ```bash
16
+ npx nttp setup
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
25
+
26
+ Then query your database:
12
27
 
13
28
  ```bash
14
- # SQLite
15
- npm install better-sqlite3
29
+ npx nttp query "show me 5 users"
30
+ ```
16
31
 
17
- # PostgreSQL
18
- npm install pg
32
+ Or use in your code:
19
33
 
20
- # MySQL
21
- npm install mysql2
34
+ ```typescript
35
+ import { NTTP } from 'nttp';
22
36
 
23
- # SQL Server
24
- npm install mssql
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();
25
41
  ```
26
42
 
27
- ## Quick Start
43
+ ## Manual Setup (Advanced)
28
44
 
29
45
  ```typescript
30
46
  import { NTTP } from 'nttp';
@@ -34,7 +50,9 @@ const nttp = new NTTP({
34
50
  client: 'pg',
35
51
  connection: process.env.DATABASE_URL
36
52
  },
37
- anthropic: {
53
+ llm: {
54
+ provider: 'anthropic',
55
+ model: 'claude-sonnet-4-5-20250929',
38
56
  apiKey: process.env.ANTHROPIC_API_KEY
39
57
  }
40
58
  });
@@ -63,11 +81,26 @@ Create a new NTTP instance.
63
81
  client: 'pg' | 'mysql2' | 'better-sqlite3' | 'mssql',
64
82
  connection: string | object // Knex connection config
65
83
  },
66
- anthropic: {
84
+ llm: {
85
+ provider: 'anthropic' | 'openai' | 'cohere' | 'mistral' | 'google',
86
+ model: string, // e.g., 'claude-sonnet-4-5-20250929', 'gpt-4o'
67
87
  apiKey: string,
68
- model?: string, // Default: 'claude-sonnet-4-5-20250929'
69
88
  maxTokens?: number // Default: 2048
70
89
  },
90
+ cache?: {
91
+ l1?: {
92
+ enabled?: boolean, // Default: true
93
+ maxSize?: number // Default: 1000
94
+ },
95
+ l2?: {
96
+ enabled?: boolean, // Default: false
97
+ provider?: 'openai',
98
+ model?: string, // e.g., 'text-embedding-3-small'
99
+ apiKey?: string,
100
+ maxSize?: number, // Default: 500
101
+ similarityThreshold?: number // Default: 0.85
102
+ }
103
+ },
71
104
  limits?: {
72
105
  maxQueryLength?: number, // Default: 500
73
106
  defaultLimit?: number, // Default: 100
@@ -208,6 +241,37 @@ NTTP works with any SQL database supported by Knex.js:
208
241
  - **Cache Miss**: ~2-3s (LLM call)
209
242
  - **Throughput**: >10,000 req/s (cached)
210
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
+
211
275
  ## Error Handling
212
276
 
213
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;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;;;;;;;;;;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
@@ -68,6 +68,76 @@ export class NTTP {
68
68
  // Initialize executor with caches
69
69
  this.executor = new QueryExecutor(this.db, this.llm, this.cache, this.l1Cache, this.l2Cache);
70
70
  }
71
+ /**
72
+ * Create NTTP instance from environment variables.
73
+ * Reads configuration from .env file.
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * // Requires .env with DATABASE_URL, LLM_PROVIDER, etc.
78
+ * const nttp = await NTTP.fromEnv();
79
+ * const result = await nttp.query("show me users");
80
+ * ```
81
+ */
82
+ static async fromEnv() {
83
+ const databaseType = process.env.DATABASE_TYPE || 'pg';
84
+ const databaseUrl = process.env.DATABASE_URL;
85
+ const databasePath = process.env.DATABASE_PATH;
86
+ if (!databaseUrl && !databasePath) {
87
+ throw new Error('DATABASE_URL or DATABASE_PATH environment variable is required');
88
+ }
89
+ const llmProvider = (process.env.LLM_PROVIDER || 'anthropic');
90
+ const llmModel = process.env.LLM_MODEL || 'claude-sonnet-4-5-20250929';
91
+ // Get API key based on provider
92
+ const llmApiKeyMap = {
93
+ anthropic: process.env.ANTHROPIC_API_KEY,
94
+ openai: process.env.OPENAI_API_KEY,
95
+ cohere: process.env.COHERE_API_KEY,
96
+ mistral: process.env.MISTRAL_API_KEY,
97
+ google: process.env.GOOGLE_API_KEY,
98
+ };
99
+ const llmApiKey = llmApiKeyMap[llmProvider];
100
+ if (!llmApiKey) {
101
+ throw new Error(`${llmProvider.toUpperCase()}_API_KEY environment variable is required`);
102
+ }
103
+ const config = {
104
+ database: databasePath
105
+ ? {
106
+ client: 'better-sqlite3',
107
+ connection: { filename: databasePath },
108
+ }
109
+ : {
110
+ client: databaseType,
111
+ connection: databaseUrl,
112
+ },
113
+ llm: {
114
+ provider: llmProvider,
115
+ model: llmModel,
116
+ apiKey: llmApiKey,
117
+ },
118
+ };
119
+ // Optional: L2 cache configuration
120
+ const embeddingProvider = process.env.EMBEDDING_PROVIDER;
121
+ if (embeddingProvider === 'openai' || embeddingProvider === 'cohere') {
122
+ const embeddingApiKey = embeddingProvider === 'openai'
123
+ ? process.env.OPENAI_API_KEY
124
+ : process.env.COHERE_API_KEY;
125
+ if (embeddingApiKey) {
126
+ config.cache = {
127
+ l2: {
128
+ provider: embeddingProvider,
129
+ model: embeddingProvider === 'openai'
130
+ ? 'text-embedding-3-small'
131
+ : 'embed-english-v3.0',
132
+ apiKey: embeddingApiKey,
133
+ },
134
+ };
135
+ }
136
+ }
137
+ const nttp = new NTTP(config);
138
+ await nttp.init();
139
+ return nttp;
140
+ }
71
141
  /**
72
142
  * Initialize NTTP - must be called before using.
73
143
  */
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.0');
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"}
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "nttp",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
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": {