@memberjunction/query-gen 0.0.1 → 2.126.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.
Files changed (138) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +34 -0
  3. package/COORDINATOR.md +768 -0
  4. package/IMPLEMENTATION_PLAN.md +1753 -0
  5. package/LLM_ENTITY_GROUPING_PLAN.md +977 -0
  6. package/README.md +675 -29
  7. package/dist/cli/commands/export.d.ts +15 -0
  8. package/dist/cli/commands/export.d.ts.map +1 -0
  9. package/dist/cli/commands/export.js +178 -0
  10. package/dist/cli/commands/export.js.map +1 -0
  11. package/dist/cli/commands/generate.d.ts +19 -0
  12. package/dist/cli/commands/generate.d.ts.map +1 -0
  13. package/dist/cli/commands/generate.js +282 -0
  14. package/dist/cli/commands/generate.js.map +1 -0
  15. package/dist/cli/commands/validate.d.ts +17 -0
  16. package/dist/cli/commands/validate.d.ts.map +1 -0
  17. package/dist/cli/commands/validate.js +193 -0
  18. package/dist/cli/commands/validate.js.map +1 -0
  19. package/dist/cli/config.d.ts +51 -0
  20. package/dist/cli/config.d.ts.map +1 -0
  21. package/dist/cli/config.js +142 -0
  22. package/dist/cli/config.js.map +1 -0
  23. package/dist/cli/index.d.ts +13 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +57 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/core/EntityGrouper.d.ts +74 -0
  28. package/dist/core/EntityGrouper.d.ts.map +1 -0
  29. package/dist/core/EntityGrouper.js +246 -0
  30. package/dist/core/EntityGrouper.js.map +1 -0
  31. package/dist/core/MetadataExporter.d.ts +59 -0
  32. package/dist/core/MetadataExporter.d.ts.map +1 -0
  33. package/dist/core/MetadataExporter.js +151 -0
  34. package/dist/core/MetadataExporter.js.map +1 -0
  35. package/dist/core/QueryDatabaseWriter.d.ts +50 -0
  36. package/dist/core/QueryDatabaseWriter.d.ts.map +1 -0
  37. package/dist/core/QueryDatabaseWriter.js +152 -0
  38. package/dist/core/QueryDatabaseWriter.js.map +1 -0
  39. package/dist/core/QueryFixer.d.ts +48 -0
  40. package/dist/core/QueryFixer.d.ts.map +1 -0
  41. package/dist/core/QueryFixer.js +115 -0
  42. package/dist/core/QueryFixer.js.map +1 -0
  43. package/dist/core/QueryRefiner.d.ts +94 -0
  44. package/dist/core/QueryRefiner.d.ts.map +1 -0
  45. package/dist/core/QueryRefiner.js +267 -0
  46. package/dist/core/QueryRefiner.js.map +1 -0
  47. package/dist/core/QueryTester.d.ts +70 -0
  48. package/dist/core/QueryTester.d.ts.map +1 -0
  49. package/dist/core/QueryTester.js +243 -0
  50. package/dist/core/QueryTester.js.map +1 -0
  51. package/dist/core/QueryWriter.d.ts +57 -0
  52. package/dist/core/QueryWriter.d.ts.map +1 -0
  53. package/dist/core/QueryWriter.js +184 -0
  54. package/dist/core/QueryWriter.js.map +1 -0
  55. package/dist/core/QuestionGenerator.d.ts +58 -0
  56. package/dist/core/QuestionGenerator.d.ts.map +1 -0
  57. package/dist/core/QuestionGenerator.js +145 -0
  58. package/dist/core/QuestionGenerator.js.map +1 -0
  59. package/dist/data/schema.d.ts +230 -0
  60. package/dist/data/schema.d.ts.map +1 -0
  61. package/dist/data/schema.js +6 -0
  62. package/dist/data/schema.js.map +1 -0
  63. package/dist/index.d.ts +28 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +77 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/prompts/PromptNames.d.ts +32 -0
  68. package/dist/prompts/PromptNames.d.ts.map +1 -0
  69. package/dist/prompts/PromptNames.js +35 -0
  70. package/dist/prompts/PromptNames.js.map +1 -0
  71. package/dist/utils/category-builder.d.ts +28 -0
  72. package/dist/utils/category-builder.d.ts.map +1 -0
  73. package/dist/utils/category-builder.js +90 -0
  74. package/dist/utils/category-builder.js.map +1 -0
  75. package/dist/utils/entity-helpers.d.ts +49 -0
  76. package/dist/utils/entity-helpers.d.ts.map +1 -0
  77. package/dist/utils/entity-helpers.js +189 -0
  78. package/dist/utils/entity-helpers.js.map +1 -0
  79. package/dist/utils/error-handlers.d.ts +19 -0
  80. package/dist/utils/error-handlers.d.ts.map +1 -0
  81. package/dist/utils/error-handlers.js +41 -0
  82. package/dist/utils/error-handlers.js.map +1 -0
  83. package/dist/utils/graph-helpers.d.ts +51 -0
  84. package/dist/utils/graph-helpers.d.ts.map +1 -0
  85. package/dist/utils/graph-helpers.js +82 -0
  86. package/dist/utils/graph-helpers.js.map +1 -0
  87. package/dist/utils/prompt-helpers.d.ts +25 -0
  88. package/dist/utils/prompt-helpers.d.ts.map +1 -0
  89. package/dist/utils/prompt-helpers.js +66 -0
  90. package/dist/utils/prompt-helpers.js.map +1 -0
  91. package/dist/utils/query-helpers.d.ts +23 -0
  92. package/dist/utils/query-helpers.d.ts.map +1 -0
  93. package/dist/utils/query-helpers.js +34 -0
  94. package/dist/utils/query-helpers.js.map +1 -0
  95. package/dist/utils/user-helpers.d.ts +15 -0
  96. package/dist/utils/user-helpers.d.ts.map +1 -0
  97. package/dist/utils/user-helpers.js +32 -0
  98. package/dist/utils/user-helpers.js.map +1 -0
  99. package/dist/vectors/EmbeddingService.d.ts +58 -0
  100. package/dist/vectors/EmbeddingService.d.ts.map +1 -0
  101. package/dist/vectors/EmbeddingService.js +90 -0
  102. package/dist/vectors/EmbeddingService.js.map +1 -0
  103. package/dist/vectors/SimilaritySearch.d.ts +51 -0
  104. package/dist/vectors/SimilaritySearch.d.ts.map +1 -0
  105. package/dist/vectors/SimilaritySearch.js +85 -0
  106. package/dist/vectors/SimilaritySearch.js.map +1 -0
  107. package/docs/API.md +1040 -0
  108. package/docs/ARCHITECTURE.md +1120 -0
  109. package/examples/advanced-usage.ts +401 -0
  110. package/examples/basic-usage.ts +285 -0
  111. package/package.json +48 -6
  112. package/src/cli/commands/export.ts +173 -0
  113. package/src/cli/commands/generate.ts +330 -0
  114. package/src/cli/commands/validate.ts +185 -0
  115. package/src/cli/config.ts +203 -0
  116. package/src/cli/index.ts +63 -0
  117. package/src/core/EntityGrouper.ts +318 -0
  118. package/src/core/MetadataExporter.ts +148 -0
  119. package/src/core/QueryDatabaseWriter.ts +187 -0
  120. package/src/core/QueryFixer.ts +153 -0
  121. package/src/core/QueryRefiner.ts +382 -0
  122. package/src/core/QueryTester.ts +264 -0
  123. package/src/core/QueryWriter.ts +239 -0
  124. package/src/core/QuestionGenerator.ts +199 -0
  125. package/src/data/golden-queries.json +1371 -0
  126. package/src/data/schema.ts +252 -0
  127. package/src/index.ts +49 -0
  128. package/src/prompts/PromptNames.ts +36 -0
  129. package/src/utils/category-builder.ts +97 -0
  130. package/src/utils/entity-helpers.ts +203 -0
  131. package/src/utils/error-handlers.ts +41 -0
  132. package/src/utils/graph-helpers.ts +99 -0
  133. package/src/utils/prompt-helpers.ts +79 -0
  134. package/src/utils/query-helpers.ts +32 -0
  135. package/src/utils/user-helpers.ts +39 -0
  136. package/src/vectors/EmbeddingService.ts +109 -0
  137. package/src/vectors/SimilaritySearch.ts +108 -0
  138. package/tsconfig.json +39 -0
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Export command - Export queries from database to metadata files
3
+ *
4
+ * Reads existing queries from the database and exports them to metadata format:
5
+ * - Loads all queries from Queries table
6
+ * - Includes related Query Fields and Query Params
7
+ * - Exports to JSON files in MJ metadata format
8
+ */
9
+ /**
10
+ * Execute the export command
11
+ *
12
+ * Loads queries from database and exports them to metadata files.
13
+ */
14
+ export declare function exportCommand(options: Record<string, unknown>): Promise<void>;
15
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FnF"}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ /**
3
+ * Export command - Export queries from database to metadata files
4
+ *
5
+ * Reads existing queries from the database and exports them to metadata format:
6
+ * - Loads all queries from Queries table
7
+ * - Includes related Query Fields and Query Params
8
+ * - Exports to JSON files in MJ metadata format
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || function (mod) {
27
+ if (mod && mod.__esModule) return mod;
28
+ var result = {};
29
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
30
+ __setModuleDefault(result, mod);
31
+ return result;
32
+ };
33
+ var __importDefault = (this && this.__importDefault) || function (mod) {
34
+ return (mod && mod.__esModule) ? mod : { "default": mod };
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.exportCommand = void 0;
38
+ const ora_1 = __importDefault(require("ora"));
39
+ const chalk_1 = __importDefault(require("chalk"));
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const core_1 = require("@memberjunction/core");
43
+ const user_helpers_1 = require("../../utils/user-helpers");
44
+ const error_handlers_1 = require("../../utils/error-handlers");
45
+ /**
46
+ * Execute the export command
47
+ *
48
+ * Loads queries from database and exports them to metadata files.
49
+ */
50
+ async function exportCommand(options) {
51
+ const spinner = (0, ora_1.default)('Initializing export...').start();
52
+ try {
53
+ const outputPath = String(options.output || './metadata/queries');
54
+ const verbose = Boolean(options.verbose);
55
+ // 1. Get system user from UserCache (populated by provider initialization)
56
+ const contextUser = (0, user_helpers_1.getSystemUser)();
57
+ // 2. Verify database connection and load metadata
58
+ spinner.text = 'Loading metadata...';
59
+ // Assume provider is already configured by the calling application
60
+ if (!core_1.Metadata.Provider) {
61
+ throw new Error('Metadata provider not configured. Please ensure database connection is set up before running CLI.');
62
+ }
63
+ spinner.succeed('Metadata loaded');
64
+ // 3. Load queries from database
65
+ spinner.start('Loading queries from database...');
66
+ const queries = await loadQueriesFromDatabase(contextUser);
67
+ spinner.succeed(chalk_1.default.green(`Found ${queries.length} queries`));
68
+ // 4. Create output directory if it doesn't exist
69
+ if (!fs.existsSync(outputPath)) {
70
+ fs.mkdirSync(outputPath, { recursive: true });
71
+ }
72
+ // 5. Export each query to metadata format
73
+ let exportCount = 0;
74
+ const errors = [];
75
+ for (let i = 0; i < queries.length; i++) {
76
+ const query = queries[i];
77
+ const queryPrefix = chalk_1.default.cyan(`[${i + 1}/${queries.length}]`);
78
+ spinner.start(`${queryPrefix} Exporting ${chalk_1.default.bold(query.Name)}...`);
79
+ try {
80
+ const metadataRecord = await convertQueryToMetadata(query, contextUser);
81
+ const filename = sanitizeFilename(query.Name) + '.json';
82
+ const fullPath = path.join(outputPath, filename);
83
+ fs.writeFileSync(fullPath, JSON.stringify(metadataRecord, null, 2), 'utf-8');
84
+ exportCount++;
85
+ if (verbose) {
86
+ spinner.info(`${queryPrefix} ${chalk_1.default.green('✓')} Exported ${query.Name}`);
87
+ }
88
+ }
89
+ catch (error) {
90
+ const errorMsg = (0, error_handlers_1.extractErrorMessage)(error, 'Query Export');
91
+ errors.push({ query: query.Name, error: errorMsg });
92
+ if (verbose) {
93
+ spinner.warn(`${queryPrefix} ${chalk_1.default.red('✗')} ${query.Name}: ${errorMsg}`);
94
+ }
95
+ }
96
+ }
97
+ // 6. Summary
98
+ if (errors.length === 0) {
99
+ spinner.succeed(chalk_1.default.green.bold(`✓ All ${exportCount} queries exported successfully!`));
100
+ console.log('\n' + chalk_1.default.green.bold('✓ Export complete!\n'));
101
+ console.log(chalk_1.default.bold('Summary:'));
102
+ console.log(` Total Queries: ${chalk_1.default.cyan(exportCount.toString())}`);
103
+ console.log(` Exported: ${chalk_1.default.green(exportCount.toString())}`);
104
+ console.log(` Output Location: ${chalk_1.default.dim(outputPath)}`);
105
+ process.exit(0);
106
+ }
107
+ else {
108
+ spinner.fail(chalk_1.default.yellow(`Export completed with ${errors.length} errors`));
109
+ console.log('\n' + chalk_1.default.yellow.bold('⚠ Export completed with errors\n'));
110
+ console.log(chalk_1.default.bold('Summary:'));
111
+ console.log(` Total Queries: ${chalk_1.default.cyan(queries.length.toString())}`);
112
+ console.log(` Exported: ${chalk_1.default.green(exportCount.toString())}`);
113
+ console.log(` Failed: ${chalk_1.default.red(errors.length.toString())}`);
114
+ console.log(` Output Location: ${chalk_1.default.dim(outputPath)}`);
115
+ if (errors.length > 0) {
116
+ console.log('\n' + chalk_1.default.bold('Errors:'));
117
+ for (const { query, error } of errors) {
118
+ console.log(chalk_1.default.red(` ${query}: ${error}`));
119
+ }
120
+ }
121
+ process.exit(1);
122
+ }
123
+ }
124
+ catch (error) {
125
+ spinner.fail(chalk_1.default.red('Export failed'));
126
+ console.error(chalk_1.default.red((0, error_handlers_1.extractErrorMessage)(error, 'Query Export')));
127
+ process.exit(1);
128
+ }
129
+ }
130
+ exports.exportCommand = exportCommand;
131
+ /**
132
+ * Load all queries from the database
133
+ */
134
+ async function loadQueriesFromDatabase(contextUser) {
135
+ const rv = new core_1.RunView();
136
+ const result = await rv.RunView({
137
+ EntityName: 'Queries',
138
+ ExtraFilter: '',
139
+ OrderBy: 'Name',
140
+ ResultType: 'entity_object',
141
+ }, contextUser);
142
+ if (!result.Success) {
143
+ throw new Error(`Failed to load queries: ${result.ErrorMessage}`);
144
+ }
145
+ return result.Results || [];
146
+ }
147
+ /**
148
+ * Convert QueryEntity to metadata record format
149
+ *
150
+ * Note: For the export command, we only export the Query entity itself.
151
+ * QueryFields and QueryParameters are managed by QueryEntity.server.ts and
152
+ * will be automatically extracted when the query is imported/saved.
153
+ */
154
+ async function convertQueryToMetadata(query, contextUser) {
155
+ return {
156
+ fields: {
157
+ Name: query.Name,
158
+ CategoryID: query.CategoryID || 'unknown',
159
+ UserQuestion: query.UserQuestion || '',
160
+ Description: query.Description || '',
161
+ TechnicalDescription: query.TechnicalDescription || '',
162
+ SQL: query.SQL || '',
163
+ OriginalSQL: query.OriginalSQL || query.SQL || '',
164
+ UsesTemplate: query.UsesTemplate || false,
165
+ Status: query.Status || 'Active',
166
+ },
167
+ };
168
+ }
169
+ /**
170
+ * Sanitize filename by removing invalid characters
171
+ */
172
+ function sanitizeFilename(name) {
173
+ return name
174
+ .replace(/[^a-zA-Z0-9-_\s]/g, '')
175
+ .replace(/\s+/g, '_')
176
+ .toLowerCase();
177
+ }
178
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Generate command - Main query generation workflow
3
+ *
4
+ * Orchestrates the full query generation pipeline:
5
+ * 1. Load entity groups
6
+ * 2. Generate business questions
7
+ * 3. Generate SQL queries
8
+ * 4. Test and fix queries
9
+ * 5. Refine queries
10
+ * 6. Export results
11
+ */
12
+ /**
13
+ * Execute the generate command
14
+ *
15
+ * Full orchestration of query generation workflow with progress reporting.
16
+ * Uses ora for spinners and chalk for colored output.
17
+ */
18
+ export declare function generateCommand(options: Record<string, unknown>): Promise<void>;
19
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuBH;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmPrF"}
@@ -0,0 +1,282 @@
1
+ "use strict";
2
+ /**
3
+ * Generate command - Main query generation workflow
4
+ *
5
+ * Orchestrates the full query generation pipeline:
6
+ * 1. Load entity groups
7
+ * 2. Generate business questions
8
+ * 3. Generate SQL queries
9
+ * 4. Test and fix queries
10
+ * 5. Refine queries
11
+ * 6. Export results
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.generateCommand = void 0;
41
+ const ora_1 = __importDefault(require("ora"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const core_1 = require("@memberjunction/core");
46
+ const config_1 = require("../config");
47
+ const user_helpers_1 = require("../../utils/user-helpers");
48
+ const EntityGrouper_1 = require("../../core/EntityGrouper");
49
+ const QuestionGenerator_1 = require("../../core/QuestionGenerator");
50
+ const QueryWriter_1 = require("../../core/QueryWriter");
51
+ const QueryTester_1 = require("../../core/QueryTester");
52
+ const QueryRefiner_1 = require("../../core/QueryRefiner");
53
+ const MetadataExporter_1 = require("../../core/MetadataExporter");
54
+ const QueryDatabaseWriter_1 = require("../../core/QueryDatabaseWriter");
55
+ const EmbeddingService_1 = require("../../vectors/EmbeddingService");
56
+ const SimilaritySearch_1 = require("../../vectors/SimilaritySearch");
57
+ const entity_helpers_1 = require("../../utils/entity-helpers");
58
+ const error_handlers_1 = require("../../utils/error-handlers");
59
+ const category_builder_1 = require("../../utils/category-builder");
60
+ /**
61
+ * Execute the generate command
62
+ *
63
+ * Full orchestration of query generation workflow with progress reporting.
64
+ * Uses ora for spinners and chalk for colored output.
65
+ */
66
+ async function generateCommand(options) {
67
+ const spinner = (0, ora_1.default)('Initializing query generation...').start();
68
+ try {
69
+ // 1. Load configuration
70
+ spinner.text = 'Loading configuration...';
71
+ const config = (0, config_1.loadConfig)(options);
72
+ // Show model/vendor overrides if configured
73
+ if (config.modelOverride || config.vendorOverride) {
74
+ const overrideMsg = [];
75
+ if (config.modelOverride)
76
+ overrideMsg.push(`Model: ${config.modelOverride}`);
77
+ if (config.vendorOverride)
78
+ overrideMsg.push(`Vendor: ${config.vendorOverride}`);
79
+ spinner.info(chalk_1.default.cyan(`Using overrides - ${overrideMsg.join(', ')}`));
80
+ }
81
+ if (config.verbose) {
82
+ spinner.info(chalk_1.default.dim('Configuration loaded'));
83
+ console.log(chalk_1.default.dim(JSON.stringify(config, null, 2)));
84
+ }
85
+ // 2. Get system user from UserCache (populated by provider initialization)
86
+ const contextUser = (0, user_helpers_1.getSystemUser)();
87
+ // 3. Verify database connection and metadata
88
+ spinner.text = 'Loading metadata...';
89
+ // Assume provider and AIEngine are already configured by the calling application (MJCLI)
90
+ if (!core_1.Metadata.Provider) {
91
+ throw new Error('Metadata provider not configured. Please ensure database connection is set up before running CLI.');
92
+ }
93
+ spinner.succeed('Metadata loaded');
94
+ // 4. Filter and build entity groups
95
+ spinner.start('Filtering entities...');
96
+ const md = new core_1.Metadata();
97
+ // Apply entity filtering (includeEntities takes precedence over excludeEntities)
98
+ let filteredEntities = md.Entities.filter(e => !config.excludeSchemas.includes(e.SchemaName || ''));
99
+ if (config.includeEntities.length > 0) {
100
+ // Allowlist: only include specified entities
101
+ filteredEntities = filteredEntities.filter(e => config.includeEntities.includes(e.Name));
102
+ spinner.info(chalk_1.default.dim(`Including only ${config.includeEntities.length} specified entities`));
103
+ }
104
+ else if (config.excludeEntities.length > 0) {
105
+ // Denylist: exclude specified entities
106
+ filteredEntities = filteredEntities.filter(e => !config.excludeEntities.includes(e.Name));
107
+ spinner.info(chalk_1.default.dim(`Excluded ${config.excludeEntities.length} entities`));
108
+ }
109
+ // 4. Group entities by schema and generate entity groups
110
+ spinner.text = 'Analyzing entity relationships...';
111
+ // Count entities per schema for informational logging
112
+ const schemaCount = new Set(filteredEntities.map(e => e.SchemaName)).size;
113
+ if (config.verbose && schemaCount > 1) {
114
+ spinner.info(chalk_1.default.dim(`Processing ${schemaCount} schemas separately`));
115
+ }
116
+ const grouper = new EntityGrouper_1.EntityGrouper(config);
117
+ const entityGroups = await grouper.generateEntityGroups(filteredEntities, contextUser);
118
+ spinner.succeed(chalk_1.default.green(`Found ${entityGroups.length} entity groups across ${schemaCount} ${schemaCount === 1 ? 'schema' : 'schemas'}`));
119
+ // 5. Initialize vector similarity search
120
+ spinner.start('Embedding golden queries...');
121
+ const embeddingService = new EmbeddingService_1.EmbeddingService(config.embeddingModel);
122
+ const goldenQueries = await loadGoldenQueries(config);
123
+ const embeddedGolden = await embeddingService.embedGoldenQueries(goldenQueries);
124
+ spinner.succeed(chalk_1.default.green(`Embedded ${goldenQueries.length} golden queries`));
125
+ // 5b. Build category structure for all entity groups upfront
126
+ spinner.start('Building category structure...');
127
+ const categoryMap = new Map();
128
+ for (const group of entityGroups) {
129
+ const category = (0, category_builder_1.buildQueryCategory)(config, group);
130
+ // Use primary entity name as key for lookup during query generation
131
+ categoryMap.set(group.primaryEntity.Name, category);
132
+ }
133
+ const uniqueCategories = (0, category_builder_1.extractUniqueCategories)(Array.from(categoryMap.values()));
134
+ spinner.succeed(chalk_1.default.green(`Created ${uniqueCategories.length} ${uniqueCategories.length === 1 ? 'category' : 'categories'}`));
135
+ // 6. Generate queries for each entity group
136
+ const totalGroups = entityGroups.length;
137
+ let processedGroups = 0;
138
+ const allValidatedQueries = [];
139
+ for (const group of entityGroups) {
140
+ processedGroups++;
141
+ const groupPrefix = chalk_1.default.cyan(`[${processedGroups}/${totalGroups}]`);
142
+ spinner.start(`${groupPrefix} Processing ${chalk_1.default.bold(group.primaryEntity.Name)}...`);
143
+ let queriesCreatedForGroup = 0;
144
+ try {
145
+ // 6a. Generate business questions for this entity group
146
+ const questionGenerator = new QuestionGenerator_1.QuestionGenerator(contextUser, config);
147
+ const questions = await questionGenerator.generateQuestions(group);
148
+ if (config.verbose) {
149
+ spinner.info(`${groupPrefix} Generated ${questions.length} questions`);
150
+ }
151
+ // 6b. For each question, generate and validate query
152
+ for (const question of questions) {
153
+ spinner.text = `${groupPrefix} Generating query: ${chalk_1.default.italic(question.userQuestion)}`;
154
+ // Embed question for similarity search
155
+ const questionEmbedding = await embeddingService.embedQuery({
156
+ userQuestion: question.userQuestion,
157
+ description: question.description,
158
+ technicalDescription: question.technicalDescription,
159
+ });
160
+ // Find similar golden queries
161
+ const similaritySearch = new SimilaritySearch_1.SimilaritySearch();
162
+ const fewShotResults = await similaritySearch.findSimilarQueries(questionEmbedding, embeddedGolden, config.topSimilarQueries);
163
+ const fewShotExamples = fewShotResults.map(s => s.query);
164
+ // Generate SQL query
165
+ const queryWriter = new QueryWriter_1.QueryWriter(contextUser, config);
166
+ const generatedQuery = await queryWriter.generateQuery(question, group.entities.map((e) => (0, entity_helpers_1.formatEntityMetadataForPrompt)(e, group.entities)), fewShotExamples);
167
+ // Test and fix query
168
+ // Access the database provider through Metadata.Provider
169
+ const dataProvider = core_1.Metadata.Provider;
170
+ const entityMetadata = group.entities.map((e) => (0, entity_helpers_1.formatEntityMetadataForPrompt)(e, group.entities));
171
+ const queryTester = new QueryTester_1.QueryTester(dataProvider, entityMetadata, question, contextUser, config);
172
+ const testResult = await queryTester.testQuery(generatedQuery, config.maxFixingIterations);
173
+ if (!testResult.success) {
174
+ spinner.warn(chalk_1.default.yellow(`${groupPrefix} Query failed after ${config.maxFixingIterations} attempts: ${question.userQuestion}`));
175
+ continue;
176
+ }
177
+ // Refine query
178
+ const queryRefiner = new QueryRefiner_1.QueryRefiner(queryTester, contextUser, config);
179
+ const refinedResult = await queryRefiner.refineQuery(generatedQuery, question, entityMetadata, config.maxRefinementIterations);
180
+ // Get pre-built category from map
181
+ const category = categoryMap.get(group.primaryEntity.Name);
182
+ if (!category) {
183
+ throw new Error(`Category not found for entity group: ${group.primaryEntity.Name}`);
184
+ }
185
+ allValidatedQueries.push({
186
+ businessQuestion: question,
187
+ query: refinedResult.query,
188
+ testResult: refinedResult.testResult,
189
+ evaluation: refinedResult.evaluation,
190
+ entityGroup: group,
191
+ category,
192
+ });
193
+ queriesCreatedForGroup++;
194
+ if (config.verbose) {
195
+ spinner.info(`${groupPrefix} ${chalk_1.default.green('✓')} ${question.userQuestion}`);
196
+ }
197
+ }
198
+ // Format entity list with primary entity in bold
199
+ const entityDisplay = group.entities
200
+ .map(e => e.Name === group.primaryEntity.Name ? chalk_1.default.bold(e.Name) : e.Name)
201
+ .join(', ');
202
+ spinner.succeed(`${groupPrefix} ${entityDisplay} complete (${chalk_1.default.green(queriesCreatedForGroup + ' queries')})`);
203
+ }
204
+ catch (error) {
205
+ // Format entity list with primary entity in bold
206
+ const entityDisplay = group.entities
207
+ .map(e => e.Name === group.primaryEntity.Name ? chalk_1.default.bold(e.Name) : e.Name)
208
+ .join(', ');
209
+ spinner.warn(chalk_1.default.yellow(`${groupPrefix} Error processing ${entityDisplay}: ${(0, error_handlers_1.extractErrorMessage)(error, 'Query Generation')}`));
210
+ }
211
+ }
212
+ // 7. Export results
213
+ spinner.start(`Exporting ${allValidatedQueries.length} queries...`);
214
+ if (config.outputMode === 'metadata' || config.outputMode === 'both') {
215
+ const exporter = new MetadataExporter_1.MetadataExporter();
216
+ const exportResult = await exporter.exportQueries(allValidatedQueries, uniqueCategories, config.outputDirectory, config.outputCategoryDirectory);
217
+ spinner.succeed(chalk_1.default.green(`Exported to ${exportResult.outputPath}`));
218
+ }
219
+ if (config.outputMode === 'database' || config.outputMode === 'both') {
220
+ const dbWriter = new QueryDatabaseWriter_1.QueryDatabaseWriter();
221
+ await dbWriter.writeQueriesToDatabase(allValidatedQueries, contextUser);
222
+ spinner.succeed(chalk_1.default.green(`Wrote ${allValidatedQueries.length} queries to database`));
223
+ }
224
+ // 8. Summary
225
+ console.log('\n' + chalk_1.default.green.bold('✓ Query generation complete!\n'));
226
+ console.log(chalk_1.default.bold('Summary:'));
227
+ console.log(` Entity Groups Processed: ${chalk_1.default.cyan(processedGroups.toString())}`);
228
+ console.log(` Queries Generated: ${chalk_1.default.green(allValidatedQueries.length.toString())}`);
229
+ console.log(` Output Location: ${chalk_1.default.dim(config.outputDirectory)}`);
230
+ process.exit(0);
231
+ }
232
+ catch (error) {
233
+ spinner.fail(chalk_1.default.red('Query generation failed'));
234
+ console.error(chalk_1.default.red((0, error_handlers_1.extractErrorMessage)(error, 'Query Generation')));
235
+ process.exit(1);
236
+ }
237
+ }
238
+ exports.generateCommand = generateCommand;
239
+ /**
240
+ * Load golden queries from JSON file
241
+ *
242
+ * Golden queries are example queries used for few-shot learning.
243
+ * They are stored in the data/golden-queries.json file.
244
+ *
245
+ * @param config - QueryGen configuration with verbose flag
246
+ * @returns Array of golden queries, or empty array if file not found/invalid
247
+ */
248
+ async function loadGoldenQueries(config) {
249
+ try {
250
+ // Resolve path to golden-queries.json in the data directory
251
+ // __dirname points to dist/cli/commands, so we go up to dist, then to data
252
+ const goldenQueriesPath = path.join(__dirname, '../../data/golden-queries.json');
253
+ // Check if file exists
254
+ if (!fs.existsSync(goldenQueriesPath)) {
255
+ if (config.verbose) {
256
+ (0, core_1.LogStatus)(`[Warning] Golden queries file not found at: ${goldenQueriesPath}`);
257
+ }
258
+ return [];
259
+ }
260
+ // Read and parse JSON file
261
+ const fileContent = fs.readFileSync(goldenQueriesPath, 'utf-8');
262
+ const goldenQueries = JSON.parse(fileContent);
263
+ // Validate that it's an array
264
+ if (!Array.isArray(goldenQueries)) {
265
+ if (config.verbose) {
266
+ (0, core_1.LogStatus)('[Warning] Golden queries file does not contain an array');
267
+ }
268
+ return [];
269
+ }
270
+ if (config.verbose) {
271
+ (0, core_1.LogStatus)(`[Info] Loaded ${goldenQueries.length} golden queries for few-shot learning`);
272
+ }
273
+ return goldenQueries;
274
+ }
275
+ catch (error) {
276
+ if (config.verbose) {
277
+ (0, core_1.LogStatus)(`[Warning] Failed to load golden queries: ${(0, error_handlers_1.extractErrorMessage)(error, 'loadGoldenQueries')}`);
278
+ }
279
+ return [];
280
+ }
281
+ }
282
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Validate command - Validate existing query templates
3
+ *
4
+ * Tests existing query metadata files to ensure they are valid:
5
+ * - SQL syntax validation
6
+ * - Parameter validation
7
+ * - Output field validation
8
+ * - Execution testing (optional)
9
+ */
10
+ /**
11
+ * Execute the validate command
12
+ *
13
+ * Loads query metadata files and validates each query template.
14
+ * Reports success/failure statistics.
15
+ */
16
+ export declare function validateCommand(options: Record<string, unknown>): Promise<void>;
17
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmHrF"}