@memberjunction/db-auto-doc 2.118.0 β†’ 2.120.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
@@ -21,6 +21,7 @@ Automatically generate comprehensive documentation for SQL Server, MySQL, and Po
21
21
 
22
22
  ### Advanced Features
23
23
  - **πŸ” Relationship Discovery** - Automatically detect missing primary and foreign keys using statistical analysis and LLM validation
24
+ - **🎯 Sample Query Generation** - Generate reference SQL queries for AI agents with alignment tracking
24
25
  - **πŸ›‘οΈ Granular Guardrails** - Multi-level resource controls (run, phase, iteration limits)
25
26
  - **⏸️ Resume Capability** - Pause and resume analysis from checkpoint state files
26
27
  - **πŸ“¦ Programmatic API** - Use as a library in your own applications
@@ -84,7 +85,90 @@ This will:
84
85
  - Perform sanity checks
85
86
  - Save state to `db-doc-state.json`
86
87
 
87
- ### 3. Export
88
+ ### 3. Generate Sample Queries (Optional)
89
+
90
+ Generate reference SQL queries for AI agent training:
91
+
92
+ ```bash
93
+ # During analysis (if enabled in config)
94
+ db-auto-doc analyze # Automatically generates queries
95
+
96
+ # Or generate separately from existing state
97
+ db-auto-doc generate-queries --from-state ./output/run-1/state.json
98
+
99
+ # With custom settings
100
+ db-auto-doc generate-queries --from-state ./output/run-1/state.json \
101
+ --queries-per-table 10 \
102
+ --max-execution-time 60000 \
103
+ --output-dir ./queries
104
+ ```
105
+
106
+ This generates:
107
+ - **sample-queries.json**: Full query specifications with SQL, metadata, and alignment info
108
+ - **sample-queries-summary.json**: Execution statistics, token usage, and cost breakdown
109
+
110
+ **Configuration Options:**
111
+ ```json
112
+ {
113
+ "analysis": {
114
+ "sampleQueryGeneration": {
115
+ "enabled": true, // Enable sample query generation
116
+ "queriesPerTable": 5, // Number of queries per table
117
+ "maxTables": 10, // Max tables to process (0 = all tables)
118
+ "tokenBudget": 100000, // Token limit (0 = unlimited)
119
+ "maxExecutionTime": 30000, // Query validation timeout (ms)
120
+ "includeMultiQueryPatterns": true, // Generate related query patterns
121
+ "validateAlignment": true, // Validate alignment between queries
122
+ "maxRowsInSample": 10 // Sample result rows to capture
123
+ }
124
+ }
125
+ }
126
+ ```
127
+
128
+ **Key Configuration Settings:**
129
+ - **`maxTables`**: Controls table selection
130
+ - `10` (default) - Generate queries for top 10 most important tables
131
+ - `0` - Generate queries for **all tables** with data
132
+ - Custom value - Generate queries for top N tables
133
+
134
+ - **`tokenBudget`**: Controls LLM token usage and cost
135
+ - `100000` (default) - Limit to 100K tokens (~$0.50-1.00 with GPT-4o)
136
+ - `0` - **Unlimited** token budget (useful with `maxTables: 0`)
137
+ - Custom value - Set specific token limit for cost control
138
+
139
+ **Example Configurations:**
140
+
141
+ *Cost-conscious (default):*
142
+ ```json
143
+ {
144
+ "maxTables": 10,
145
+ "tokenBudget": 100000
146
+ }
147
+ ```
148
+
149
+ *Medium coverage (~25 tables):*
150
+ ```json
151
+ {
152
+ "maxTables": 25,
153
+ "tokenBudget": 500000
154
+ }
155
+ ```
156
+
157
+ *Complete coverage (all tables):*
158
+ ```json
159
+ {
160
+ "maxTables": 0,
161
+ "tokenBudget": 0
162
+ }
163
+ ```
164
+
165
+ **Model Recommendations:**
166
+ - βœ… **GPT-4o** - Best balance of speed, cost, and quality (~$6-10 for 50 tables)
167
+ - βœ… **Claude 3.5 Sonnet** - High quality, good reasoning about alignment
168
+ - ⚠️ **GPT-5** - Very slow (reasoning model), doesn't support JSON format, expensive
169
+ - ⚠️ **Groq** - Fast and cheap but may struggle with complex alignment
170
+
171
+ ### 4. Export
88
172
 
89
173
  ```bash
90
174
  db-auto-doc export --sql --markdown --html --csv --mermaid
@@ -103,7 +187,7 @@ Optionally apply directly to database:
103
187
  db-auto-doc export --sql --apply
104
188
  ```
105
189
 
106
- ### 4. Check Status
190
+ ### 5. Check Status
107
191
 
108
192
  ```bash
109
193
  db-auto-doc status
@@ -116,7 +200,7 @@ Shows:
116
200
  - Token usage, cost, and duration
117
201
  - Guardrail status and warnings
118
202
 
119
- ### 5. Resume Analysis
203
+ ### 6. Resume Analysis
120
204
 
121
205
  ```bash
122
206
  db-auto-doc analyze --resume ./db-doc-state.json
@@ -157,6 +241,41 @@ Triggered automatically when:
157
241
  - Tables lack primary key constraints
158
242
  - Insufficient foreign key relationships detected (below threshold)
159
243
 
244
+ ### Sample Query Generation
245
+
246
+ DBAutoDoc can generate reference SQL queries for AI agents, solving the **query alignment problem** where multi-query patterns (summary + detail) have inconsistent filtering logic:
247
+
248
+ **The Problem:**
249
+ ```sql
250
+ -- Summary query
251
+ SELECT COUNT(*) FROM Registrations -- All registrations
252
+
253
+ -- Detail query
254
+ SELECT * FROM Registrations WHERE Status='Attended' -- Only attended
255
+
256
+ -- Result: Numbers don't match! Bad UX.
257
+ ```
258
+
259
+ **The Solution:**
260
+ DBAutoDoc generates "gold standard" reference queries with:
261
+ - **Explicit Filtering Rules** - Documents filter logic for consistency
262
+ - **Alignment Tracking** - Links related queries via `relatedQueryIds`
263
+ - **Query Patterns** - Summary+Detail, Multi-Entity Drilldown, Time Series, etc.
264
+ - **Validation** - Executes queries and validates results
265
+ - **Few-Shot Training** - Use as examples for AI agent prompting
266
+
267
+ **Two-Prompt Architecture:**
268
+ 1. **Planning Phase** - AI designs what queries to create (lightweight, ~4K tokens)
269
+ 2. **Generation Phase** - AI generates SQL for each query individually (~3K tokens each)
270
+
271
+ This approach prevents JSON truncation issues while maintaining alignment context between related queries.
272
+
273
+ **Use Cases:**
274
+ - Training AI agents like Skip to generate consistent multi-query patterns
275
+ - Creating reference examples for few-shot prompting
276
+ - Documenting common query patterns for your database
277
+ - Validating that related queries use consistent filtering logic
278
+
160
279
  ### Backpropagation
161
280
 
162
281
  After analyzing child tables, DBAutoDoc can detect insights about parent tables and trigger re-analysis:
@@ -253,6 +372,15 @@ This rich context enables AI to make accurate inferences.
253
372
  "schemaLevel": true,
254
373
  "crossSchema": true
255
374
  },
375
+ "sampleQueryGeneration": {
376
+ "enabled": true,
377
+ "queriesPerTable": 5,
378
+ "maxExecutionTime": 30000,
379
+ "includeMultiQueryPatterns": true,
380
+ "validateAlignment": true,
381
+ "tokenBudget": 100000,
382
+ "maxRowsInSample": 10
383
+ },
256
384
  "guardrails": {
257
385
  "enabled": true,
258
386
  "stopOnExceeded": true,
@@ -623,6 +751,16 @@ Typical costs (will vary by database size and complexity):
623
751
 
624
752
  **With Relationship Discovery**: Add 25-40% to token/cost estimates for databases with missing constraints.
625
753
 
754
+ **With Sample Query Generation** (5 queries/table, GPT-4o):
755
+
756
+ | Database Size | Tables | Additional Tokens | Additional Cost |
757
+ |---------------|--------|-------------------|-----------------|
758
+ | Small | 10-20 | ~100K | $0.50-1.00 |
759
+ | Medium | 50-100 | ~500K | $2.50-5.00 |
760
+ | Large | 200+ | ~2M | $10-20 |
761
+
762
+ Note: Sample query generation uses ~6Γ— more API calls than description generation (planning + individual SQL generation for each query), adding ~50% to total token usage.
763
+
626
764
  **Guardrails** help control costs by setting hard limits on token usage and runtime.
627
765
 
628
766
  ## Best Practices
@@ -638,6 +776,19 @@ Typical costs (will vary by database size and complexity):
638
776
  9. **Use appropriate models** - Balance cost vs. quality (GPT-4 vs. Groq)
639
777
  10. **Export multiple formats** - HTML for browsing, CSV for analysis, SQL for database
640
778
 
779
+ ### Sample Query Generation Best Practices
780
+
781
+ 1. **Use GPT-4o or Claude 3.5** - Best balance of quality, speed, and cost
782
+ 2. **Set token budget** - Prevents runaway costs (default: 100K tokens)
783
+ 3. **Start with 5 queries/table** - Good balance of coverage and cost
784
+ 4. **Enable alignment validation** - Ensures related queries use consistent logic
785
+ 5. **Review generated queries** - Verify SQL correctness before using for training
786
+ 6. **Use for few-shot prompting** - Include in AI agent system prompts as examples
787
+ 7. **Generate separately** - Use `generate-queries` command on existing state to avoid re-running full analysis
788
+ 8. **Focus on complex tables** - Skip simple lookup tables to save costs
789
+ 9. **Validate execution** - Enable `maxExecutionTime` to test queries run successfully
790
+ 10. **Document patterns** - Use generated queries to document common query patterns for your domain
791
+
641
792
  ## Troubleshooting
642
793
 
643
794
  ### "Connection failed"
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Generate Queries command - Generate sample SQL queries from existing state
3
+ */
4
+ import { Command } from '@oclif/core';
5
+ export default class GenerateQueries extends Command {
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ 'from-state': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
+ 'output-dir': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ config: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ 'queries-per-table': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
13
+ 'max-execution-time': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=generate-queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-queries.d.ts","sourceRoot":"","sources":["../../src/commands/generate-queries.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAa7C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IAClD,MAAM,CAAC,WAAW,SAA8D;IAEhF,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;MAsBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4I3B"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ /**
3
+ * Generate Queries command - Generate sample SQL queries from existing state
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
28
+ var __importDefault = (this && this.__importDefault) || function (mod) {
29
+ return (mod && mod.__esModule) ? mod : { "default": mod };
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ const core_1 = require("@oclif/core");
33
+ const ora_1 = __importDefault(require("ora"));
34
+ const chalk_1 = __importDefault(require("chalk"));
35
+ const fs = __importStar(require("fs/promises"));
36
+ const path = __importStar(require("path"));
37
+ const config_loader_js_1 = require("../utils/config-loader.js");
38
+ const Database_js_1 = require("../database/Database.js");
39
+ const PromptEngine_js_1 = require("../prompts/PromptEngine.js");
40
+ const SampleQueryGenerator_js_1 = require("../generators/SampleQueryGenerator.js");
41
+ class GenerateQueries extends core_1.Command {
42
+ async run() {
43
+ const { flags } = await this.parse(GenerateQueries);
44
+ const spinner = (0, ora_1.default)();
45
+ try {
46
+ // Load configuration for database connection and AI settings
47
+ spinner.start('Loading configuration');
48
+ const config = await config_loader_js_1.ConfigLoader.load(flags.config);
49
+ spinner.succeed('Configuration loaded');
50
+ // Load existing state
51
+ spinner.start('Loading existing analysis state');
52
+ const stateJson = await fs.readFile(flags['from-state'], 'utf-8');
53
+ const state = JSON.parse(stateJson);
54
+ spinner.succeed(`State loaded: ${state.schemas.length} schemas, ${state.schemas.reduce((sum, s) => sum + s.tables.length, 0)} tables`);
55
+ // Determine output directory
56
+ const outputDir = flags['output-dir'] || path.dirname(flags['from-state']);
57
+ await fs.mkdir(outputDir, { recursive: true });
58
+ // Connect to database
59
+ spinner.start('Connecting to database');
60
+ const driverConfig = {
61
+ provider: config.database.provider || 'sqlserver',
62
+ host: config.database.server,
63
+ port: config.database.port,
64
+ database: config.database.database,
65
+ user: config.database.user,
66
+ password: config.database.password,
67
+ encrypt: config.database.encrypt,
68
+ trustServerCertificate: config.database.trustServerCertificate,
69
+ connectionTimeout: config.database.connectionTimeout,
70
+ requestTimeout: config.database.requestTimeout,
71
+ maxConnections: config.database.maxConnections,
72
+ minConnections: config.database.minConnections,
73
+ idleTimeoutMillis: config.database.idleTimeoutMillis
74
+ };
75
+ const db = new Database_js_1.DatabaseConnection(driverConfig);
76
+ await db.connect();
77
+ const testResult = await db.test();
78
+ if (!testResult.success) {
79
+ throw new Error(`Database connection failed: ${testResult.message}`);
80
+ }
81
+ spinner.succeed('Connected to database');
82
+ // Initialize prompt engine
83
+ spinner.start('Initializing AI prompt engine');
84
+ const promptsDir = path.join(__dirname, '../../prompts');
85
+ const promptEngine = new PromptEngine_js_1.PromptEngine(config.ai, promptsDir);
86
+ await promptEngine.initialize();
87
+ spinner.succeed('Prompt engine ready');
88
+ // Build query generation config
89
+ const queryConfig = {
90
+ enabled: true,
91
+ queriesPerTable: flags['queries-per-table'] || config.analysis.sampleQueryGeneration?.queriesPerTable || 5,
92
+ maxExecutionTime: flags['max-execution-time'] || config.analysis.sampleQueryGeneration?.maxExecutionTime || 30000,
93
+ includeMultiQueryPatterns: config.analysis.sampleQueryGeneration?.includeMultiQueryPatterns !== false,
94
+ validateAlignment: config.analysis.sampleQueryGeneration?.validateAlignment !== false,
95
+ tokenBudget: config.analysis.sampleQueryGeneration?.tokenBudget || 100000,
96
+ maxRowsInSample: config.analysis.sampleQueryGeneration?.maxRowsInSample || 10,
97
+ maxTables: config.analysis.sampleQueryGeneration?.maxTables // Optional, defaults to 10 in generator
98
+ };
99
+ // Use AI config from main settings
100
+ const model = config.ai.model;
101
+ const effortLevel = config.ai.effortLevel || 75;
102
+ const maxTokens = config.ai.maxTokens || 16000; // Use config value or default
103
+ // Determine output file paths for incremental writes
104
+ const queriesPath = path.join(outputDir, 'sample-queries.json');
105
+ const summaryPath = path.join(outputDir, 'sample-queries-summary.json');
106
+ // Create generator
107
+ spinner.start('Generating sample queries');
108
+ const generator = new SampleQueryGenerator_js_1.SampleQueryGenerator(queryConfig, promptEngine, db.getDriver(), model, effortLevel, maxTokens, queriesPath, // Pass queries output path for incremental writes
109
+ summaryPath // Pass summary output path for incremental writes
110
+ );
111
+ // Generate queries
112
+ const result = await generator.generateQueries(state.schemas);
113
+ await db.close();
114
+ if (result.success) {
115
+ // Save queries and summary (final write to ensure we have the complete set)
116
+ // Note: Both were already written incrementally during generation
117
+ await fs.writeFile(queriesPath, JSON.stringify(result.queries, null, 2), 'utf-8');
118
+ await fs.writeFile(summaryPath, JSON.stringify(result.summary, null, 2), 'utf-8');
119
+ spinner.succeed('Sample queries generated!');
120
+ this.log(chalk_1.default.green('\nβœ“ Query generation complete!'));
121
+ this.log(` Total queries: ${result.summary.totalQueriesGenerated}`);
122
+ this.log(` Validated: ${result.summary.queriesValidated}`);
123
+ this.log(` Failed validation: ${result.summary.queriesFailed}`);
124
+ this.log(` Tokens used: ${result.summary.tokensUsed.toLocaleString()}`);
125
+ this.log(` Estimated cost: $${result.summary.estimatedCost.toFixed(2)}`);
126
+ this.log(` Average confidence: ${(result.summary.averageConfidence * 100).toFixed(1)}%`);
127
+ this.log(` Execution time: ${(result.summary.totalExecutionTime / 1000).toFixed(1)}s`);
128
+ this.log(`\n Output files:`);
129
+ this.log(` - ${queriesPath}`);
130
+ this.log(` - ${summaryPath}`);
131
+ this.log(chalk_1.default.blue('\n Query breakdown:'));
132
+ this.log(` By type:`);
133
+ Object.entries(result.summary.queriesByType).forEach(([type, count]) => {
134
+ this.log(` ${type}: ${count}`);
135
+ });
136
+ this.log(` By complexity:`);
137
+ Object.entries(result.summary.queriesByComplexity).forEach(([complexity, count]) => {
138
+ this.log(` ${complexity}: ${count}`);
139
+ });
140
+ }
141
+ else {
142
+ spinner.fail('Query generation failed');
143
+ this.error(result.errorMessage || 'Unknown error');
144
+ }
145
+ }
146
+ catch (error) {
147
+ spinner.fail('Command failed');
148
+ this.error(error.message);
149
+ }
150
+ }
151
+ }
152
+ GenerateQueries.description = 'Generate sample SQL queries from existing analysis state';
153
+ GenerateQueries.examples = [
154
+ '$ db-auto-doc generate-queries --from-state ./output/run-1/state.json',
155
+ '$ db-auto-doc generate-queries --from-state ./output/run-1/state.json --output-dir ./queries',
156
+ '$ db-auto-doc generate-queries --from-state ./output/run-1/state.json --queries-per-table 10'
157
+ ];
158
+ GenerateQueries.flags = {
159
+ 'from-state': core_1.Flags.string({
160
+ description: 'Path to existing state.json file from previous analysis',
161
+ required: true
162
+ }),
163
+ 'output-dir': core_1.Flags.string({
164
+ description: 'Output directory for generated queries',
165
+ required: false
166
+ }),
167
+ config: core_1.Flags.string({
168
+ char: 'c',
169
+ description: 'Path to config file (for database connection and AI settings)',
170
+ default: './config.json'
171
+ }),
172
+ 'queries-per-table': core_1.Flags.integer({
173
+ description: 'Number of queries to generate per table',
174
+ required: false
175
+ }),
176
+ 'max-execution-time': core_1.Flags.integer({
177
+ description: 'Maximum execution time for query validation (ms)',
178
+ required: false
179
+ })
180
+ };
181
+ exports.default = GenerateQueries;
182
+ //# sourceMappingURL=generate-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-queries.js","sourceRoot":"","sources":["../../src/commands/generate-queries.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAMtC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,SAAwC;IAE1D,MAAM,CAAC,QAAQ,WAA0B;IAEnC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkK3B"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAMtC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,SAAwC;IAE1D,MAAM,CAAC,QAAQ,WAA0B;IAEnC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyN3B"}
@@ -129,6 +129,46 @@ class Init extends core_1.Command {
129
129
  when: (answers) => answers.addContext
130
130
  }
131
131
  ]);
132
+ // Sample query generation options
133
+ const queryAnswers = await inquirer_1.default.prompt([
134
+ {
135
+ type: 'confirm',
136
+ name: 'enableSampleQueries',
137
+ message: 'Generate sample queries for each table?',
138
+ default: false
139
+ },
140
+ {
141
+ type: 'number',
142
+ name: 'queriesPerTable',
143
+ message: 'Number of queries to generate per table:',
144
+ default: 5,
145
+ when: (answers) => answers.enableSampleQueries,
146
+ validate: (input) => input > 0 || 'Must be greater than 0'
147
+ },
148
+ {
149
+ type: 'number',
150
+ name: 'maxTables',
151
+ message: 'Max number of tables to generate queries for (0 = all tables):',
152
+ default: 10,
153
+ when: (answers) => answers.enableSampleQueries,
154
+ validate: (input) => input >= 0 || 'Must be 0 or greater'
155
+ },
156
+ {
157
+ type: 'number',
158
+ name: 'tokenBudget',
159
+ message: 'Token budget for query generation (0 = unlimited):',
160
+ default: 100000,
161
+ when: (answers) => answers.enableSampleQueries,
162
+ validate: (input) => input >= 0 || 'Must be 0 or greater'
163
+ },
164
+ {
165
+ type: 'number',
166
+ name: 'maxExecutionTime',
167
+ message: 'Max execution time for query validation (ms):',
168
+ default: 30000,
169
+ when: (answers) => answers.enableSampleQueries
170
+ }
171
+ ]);
132
172
  // Create configuration
133
173
  const config = config_loader_js_1.ConfigLoader.createDefault();
134
174
  // Update with user inputs
@@ -158,6 +198,19 @@ class Init extends core_1.Command {
158
198
  industryContext: contextAnswers.industryContext || undefined
159
199
  };
160
200
  }
201
+ // Add sample query generation config if enabled
202
+ if (queryAnswers.enableSampleQueries) {
203
+ config.analysis.sampleQueryGeneration = {
204
+ enabled: true,
205
+ queriesPerTable: queryAnswers.queriesPerTable || 5,
206
+ maxExecutionTime: queryAnswers.maxExecutionTime || 30000,
207
+ includeMultiQueryPatterns: true,
208
+ validateAlignment: true,
209
+ tokenBudget: queryAnswers.tokenBudget !== undefined ? queryAnswers.tokenBudget : 100000,
210
+ maxRowsInSample: 10,
211
+ maxTables: queryAnswers.maxTables !== undefined ? queryAnswers.maxTables : 10
212
+ };
213
+ }
161
214
  // Save configuration
162
215
  await config_loader_js_1.ConfigLoader.save(config, './config.json');
163
216
  this.log(chalk_1.default.green('\nβœ“ Configuration saved to config.json'));
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -33,5 +33,9 @@ export declare class AnalysisOrchestrator {
33
33
  * Create run-numbered folder for this analysis run
34
34
  */
35
35
  private createRunFolder;
36
+ /**
37
+ * Generate sample queries for AI agents (like Skip)
38
+ */
39
+ private generateSampleQueries;
36
40
  }
37
41
  //# sourceMappingURL=AnalysisOrchestrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnalysisOrchestrator.d.ts","sourceRoot":"","sources":["../../src/core/AnalysisOrchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIvE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,GAAG,EAAE,WAAW,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,UAAU,CAAwC;gBAE9C,OAAO,EAAE,eAAe;IAMpC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAqQnD;;OAEG;YACW,iBAAiB;IAa/B;;OAEG;YACW,eAAe;CAoB9B"}
1
+ {"version":3,"file":"AnalysisOrchestrator.d.ts","sourceRoot":"","sources":["../../src/core/AnalysisOrchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIvE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,GAAG,EAAE,WAAW,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,UAAU,CAAwC;gBAE9C,OAAO,EAAE,eAAe;IAMpC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA6QnD;;OAEG;YACW,iBAAiB;IAa/B;;OAEG;YACW,eAAe;IAqB7B;;OAEG;YACW,qBAAqB;CA4FpC"}
@@ -38,6 +38,7 @@ const PromptEngine_js_1 = require("../prompts/PromptEngine.js");
38
38
  const AnalysisEngine_js_1 = require("./AnalysisEngine.js");
39
39
  const SQLGenerator_js_1 = require("../generators/SQLGenerator.js");
40
40
  const MarkdownGenerator_js_1 = require("../generators/MarkdownGenerator.js");
41
+ const SampleQueryGenerator_js_1 = require("../generators/SampleQueryGenerator.js");
41
42
  const DiscoveryTriggerAnalyzer_js_1 = require("../discovery/DiscoveryTriggerAnalyzer.js");
42
43
  const DiscoveryEngine_js_1 = require("../discovery/DiscoveryEngine.js");
43
44
  class AnalysisOrchestrator {
@@ -223,6 +224,13 @@ class AnalysisOrchestrator {
223
224
  if (!converged) {
224
225
  iterationTracker.completeRun(run, false, 'Max iterations reached');
225
226
  }
227
+ // Sample Query Generation (if enabled)
228
+ if (this.config.analysis.sampleQueryGeneration?.enabled) {
229
+ this.onProgress('Generating sample queries');
230
+ await this.generateSampleQueries(state, promptEngine, db.getDriver(), runFolder);
231
+ stateManager.updateSummary(state);
232
+ await stateManager.save(state);
233
+ }
226
234
  // Final state update
227
235
  stateManager.updateSummary(state);
228
236
  await stateManager.save(state);
@@ -289,6 +297,81 @@ class AnalysisOrchestrator {
289
297
  await fs.mkdir(runFolder, { recursive: true });
290
298
  return runFolder;
291
299
  }
300
+ /**
301
+ * Generate sample queries for AI agents (like Skip)
302
+ */
303
+ async generateSampleQueries(state, promptEngine, driver, runFolder) {
304
+ const config = this.config.analysis.sampleQueryGeneration;
305
+ if (!config)
306
+ return;
307
+ // Use main AI config model, effortLevel, and maxTokens
308
+ const model = this.config.ai.model;
309
+ const effortLevel = this.config.ai.effortLevel || 75;
310
+ const maxTokens = this.config.ai.maxTokens || 16000;
311
+ // Determine output file paths for incremental writes
312
+ const queriesPath = path.join(runFolder, 'sample-queries.json');
313
+ const summaryPath = path.join(runFolder, 'sample-queries-summary.json');
314
+ const generator = new SampleQueryGenerator_js_1.SampleQueryGenerator(config, promptEngine, driver, model, effortLevel, maxTokens, queriesPath, summaryPath);
315
+ try {
316
+ const result = await generator.generateQueries(state.schemas);
317
+ if (result.success) {
318
+ state.phases.sampleQueryGeneration = {
319
+ startedAt: new Date().toISOString(),
320
+ completedAt: new Date().toISOString(),
321
+ status: 'completed',
322
+ queries: result.queries,
323
+ summary: result.summary
324
+ };
325
+ // Save queries and summary (final write to ensure we have the complete set)
326
+ // Note: Both were already written incrementally during generation
327
+ await fs.writeFile(queriesPath, JSON.stringify(result.queries, null, 2), 'utf-8');
328
+ await fs.writeFile(summaryPath, JSON.stringify(result.summary, null, 2), 'utf-8');
329
+ this.onProgress('Sample queries generated', {
330
+ total: result.summary.totalQueriesGenerated,
331
+ validated: result.summary.queriesValidated,
332
+ tokens: result.summary.tokensUsed,
333
+ cost: result.summary.estimatedCost
334
+ });
335
+ }
336
+ else {
337
+ state.phases.sampleQueryGeneration = {
338
+ startedAt: new Date().toISOString(),
339
+ completedAt: new Date().toISOString(),
340
+ status: 'failed',
341
+ queries: [],
342
+ summary: result.summary,
343
+ errorMessage: result.errorMessage
344
+ };
345
+ this.onProgress('Sample query generation failed', {
346
+ error: result.errorMessage
347
+ });
348
+ }
349
+ }
350
+ catch (error) {
351
+ state.phases.sampleQueryGeneration = {
352
+ startedAt: new Date().toISOString(),
353
+ completedAt: new Date().toISOString(),
354
+ status: 'failed',
355
+ queries: [],
356
+ summary: {
357
+ totalQueriesGenerated: 0,
358
+ queriesValidated: 0,
359
+ queriesFailed: 0,
360
+ totalExecutionTime: 0,
361
+ tokensUsed: 0,
362
+ estimatedCost: 0,
363
+ averageConfidence: 0,
364
+ queriesByType: {},
365
+ queriesByPattern: {},
366
+ queriesByComplexity: {}
367
+ },
368
+ errorMessage: error.message
369
+ };
370
+ this.onProgress('Sample query generation error', {
371
+ error: error.message
372
+ });
373
+ }
374
+ }
292
375
  }
293
376
  exports.AnalysisOrchestrator = AnalysisOrchestrator;
294
377
  //# sourceMappingURL=AnalysisOrchestrator.js.map