@memberjunction/cli 2.124.0 → 2.126.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 +101 -0
- package/dist/commands/querygen/export.d.ts +10 -0
- package/dist/commands/querygen/export.js +45 -0
- package/dist/commands/querygen/generate.d.ts +20 -0
- package/dist/commands/querygen/generate.js +102 -0
- package/dist/commands/querygen/validate.d.ts +10 -0
- package/dist/commands/querygen/validate.js +45 -0
- package/oclif.manifest.json +229 -12
- package/package.json +9 -8
package/README.md
CHANGED
|
@@ -689,6 +689,106 @@ mj sync push ./metadata/queries/
|
|
|
689
689
|
|
|
690
690
|
---
|
|
691
691
|
|
|
692
|
+
### `mj querygen` - AI-Powered SQL Query Generation
|
|
693
|
+
|
|
694
|
+
Generate domain-specific SQL query templates using artificial intelligence. QueryGen analyzes your database schema, generates business questions, creates SQL queries with Nunjucks templates, tests them, and exports to metadata format.
|
|
695
|
+
|
|
696
|
+
```bash
|
|
697
|
+
mj querygen [COMMAND] [OPTIONS]
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
Available querygen commands:
|
|
701
|
+
- `generate` - Generate SQL query templates for entities using AI
|
|
702
|
+
- `validate` - Validate existing query templates
|
|
703
|
+
- `export` - Export queries from database to metadata files
|
|
704
|
+
|
|
705
|
+
**📚 For detailed documentation:** See the [QueryGen README](../QueryGen/README.md)
|
|
706
|
+
|
|
707
|
+
#### Quick Examples:
|
|
708
|
+
|
|
709
|
+
```bash
|
|
710
|
+
# Generate queries for all entities
|
|
711
|
+
mj querygen generate
|
|
712
|
+
|
|
713
|
+
# Generate for specific entities with verbose output
|
|
714
|
+
mj querygen generate --entities "Customers,Orders" --verbose
|
|
715
|
+
|
|
716
|
+
# Control entity grouping and refinement
|
|
717
|
+
mj querygen generate --max-entities 2 --max-refinements 3
|
|
718
|
+
|
|
719
|
+
# Export to specific directory
|
|
720
|
+
mj querygen generate --output ./metadata/queries
|
|
721
|
+
|
|
722
|
+
# Choose output mode
|
|
723
|
+
mj querygen generate --mode database # Write directly to database
|
|
724
|
+
mj querygen generate --mode both # Both metadata and database
|
|
725
|
+
|
|
726
|
+
# Validate existing queries
|
|
727
|
+
mj querygen validate
|
|
728
|
+
|
|
729
|
+
# Validate specific directory
|
|
730
|
+
mj querygen validate --path ./metadata/queries --verbose
|
|
731
|
+
|
|
732
|
+
# Export queries from database to metadata
|
|
733
|
+
mj querygen export
|
|
734
|
+
|
|
735
|
+
# Export to custom location
|
|
736
|
+
mj querygen export --output ./exported-queries --verbose
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
#### QueryGen Command Options:
|
|
740
|
+
|
|
741
|
+
**Generate Command:**
|
|
742
|
+
- `-e, --entities <value>`: Specific entities to generate queries for (comma-separated)
|
|
743
|
+
- `-x, --exclude-entities <value>`: Entities to exclude (comma-separated)
|
|
744
|
+
- `-s, --exclude-schemas <value>`: Schemas to exclude (comma-separated)
|
|
745
|
+
- `-m, --max-entities <value>`: Max entities per group (default: 3)
|
|
746
|
+
- `-r, --max-refinements <value>`: Max refinement iterations (default: 3)
|
|
747
|
+
- `-f, --max-fixes <value>`: Max error-fixing attempts (default: 5)
|
|
748
|
+
- `--model <value>`: Preferred AI model
|
|
749
|
+
- `--vendor <value>`: Preferred AI vendor
|
|
750
|
+
- `-o, --output <value>`: Output directory (default: ./metadata/queries)
|
|
751
|
+
- `--mode <option>`: Output mode: metadata|database|both (default: metadata)
|
|
752
|
+
- `-v, --verbose`: Verbose output
|
|
753
|
+
|
|
754
|
+
**Validate Command:**
|
|
755
|
+
- `-p, --path <value>`: Path to queries metadata file or directory (default: ./metadata/queries)
|
|
756
|
+
- `-v, --verbose`: Verbose output
|
|
757
|
+
|
|
758
|
+
**Export Command:**
|
|
759
|
+
- `-o, --output <value>`: Output directory (default: ./metadata/queries)
|
|
760
|
+
- `-v, --verbose`: Verbose output
|
|
761
|
+
|
|
762
|
+
#### QueryGen Features:
|
|
763
|
+
|
|
764
|
+
**11-Phase Pipeline:**
|
|
765
|
+
1. Entity Analysis - Analyzes database schema and relationships
|
|
766
|
+
2. Entity Grouping - Creates logical groups of related entities
|
|
767
|
+
3. Business Question Generation - Uses AI to generate domain questions
|
|
768
|
+
4. Vector Similarity Search - Finds similar examples for few-shot learning
|
|
769
|
+
5. SQL Generation - Creates Nunjucks SQL templates with AI
|
|
770
|
+
6. Query Testing - Executes and validates queries
|
|
771
|
+
7. Error Fixing - Automatically fixes SQL errors using AI
|
|
772
|
+
8. Query Evaluation - Assesses query quality
|
|
773
|
+
9. Query Refinement - Iteratively improves queries
|
|
774
|
+
10. Testing & Validation - Comprehensive validation workflow
|
|
775
|
+
11. Metadata Export - Exports to MJ metadata or database
|
|
776
|
+
|
|
777
|
+
**AI-Powered Features:**
|
|
778
|
+
- Generates realistic business questions for your domain
|
|
779
|
+
- Creates SQL queries with proper Nunjucks templating
|
|
780
|
+
- Automatically tests and fixes SQL errors
|
|
781
|
+
- Refines queries based on evaluation feedback
|
|
782
|
+
- Uses few-shot learning with golden query examples
|
|
783
|
+
|
|
784
|
+
**Integration:**
|
|
785
|
+
- Outputs to MemberJunction metadata format
|
|
786
|
+
- Compatible with `mj sync push` for database synchronization
|
|
787
|
+
- Supports both metadata files and direct database writes
|
|
788
|
+
- Uses MJ's Query entity with automatic field/parameter extraction
|
|
789
|
+
|
|
790
|
+
---
|
|
791
|
+
|
|
692
792
|
### Utility Commands
|
|
693
793
|
|
|
694
794
|
#### `mj help`
|
|
@@ -721,6 +821,7 @@ The CLI integrates seamlessly with other MemberJunction packages:
|
|
|
721
821
|
|
|
722
822
|
- **[@memberjunction/codegen-lib](../CodeGenLib)**: Powers the code generation functionality
|
|
723
823
|
- **[@memberjunction/metadata-sync](../MetadataSync)**: Provides metadata synchronization capabilities ([README](../MetadataSync/README.md))
|
|
824
|
+
- **[@memberjunction/query-gen](../QueryGen)**: AI-powered SQL query template generation ([README](../QueryGen/README.md))
|
|
724
825
|
- **[@memberjunction/ai-cli](../AI/AICLI)**: Enables AI agent and action execution ([README](../AI/AICLI/README.md))
|
|
725
826
|
- **[@memberjunction/testing-cli](../TestingFramework/CLI)**: Testing framework for database-driven tests ([README](../TestingFramework/CLI/README.md))
|
|
726
827
|
- **[@memberjunction/db-auto-doc](../DBAutoDoc)**: AI-powered database documentation generator ([README](../DBAutoDoc/README.md))
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Export extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
output: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
verbose: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const query_gen_1 = require("@memberjunction/query-gen");
|
|
5
|
+
const metadata_sync_1 = require("@memberjunction/metadata-sync");
|
|
6
|
+
class Export extends core_1.Command {
|
|
7
|
+
static description = 'Export queries from database to metadata files';
|
|
8
|
+
static examples = [
|
|
9
|
+
`<%= config.bin %> <%= command.id %>`,
|
|
10
|
+
`<%= config.bin %> <%= command.id %> --output ./metadata/queries`,
|
|
11
|
+
`<%= config.bin %> <%= command.id %> --verbose`,
|
|
12
|
+
];
|
|
13
|
+
static flags = {
|
|
14
|
+
output: core_1.Flags.string({
|
|
15
|
+
char: 'o',
|
|
16
|
+
description: 'Output directory',
|
|
17
|
+
default: './metadata/queries'
|
|
18
|
+
}),
|
|
19
|
+
verbose: core_1.Flags.boolean({ char: 'v', description: 'Verbose output' }),
|
|
20
|
+
};
|
|
21
|
+
async run() {
|
|
22
|
+
const { flags } = await this.parse(Export);
|
|
23
|
+
try {
|
|
24
|
+
// Load MJ configuration and initialize provider
|
|
25
|
+
const mjConfig = (0, metadata_sync_1.loadMJConfig)();
|
|
26
|
+
if (!mjConfig) {
|
|
27
|
+
this.error('No mj.config.cjs found in current directory or parent directories');
|
|
28
|
+
}
|
|
29
|
+
await (0, metadata_sync_1.initializeProvider)(mjConfig);
|
|
30
|
+
// Convert flags to options object for QueryGen
|
|
31
|
+
const options = {
|
|
32
|
+
output: flags.output,
|
|
33
|
+
verbose: flags.verbose
|
|
34
|
+
};
|
|
35
|
+
// Call QueryGen export command
|
|
36
|
+
await (0, query_gen_1.exportCommand)(options);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
// QueryGen commands call process.exit(), so this may not be reached
|
|
40
|
+
// But we handle it just in case
|
|
41
|
+
this.error(error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.default = Export;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Generate extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
entities: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
'exclude-entities': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
+
'exclude-schemas': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
+
'max-entities': import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
+
'target-groups': import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
'max-refinements': import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
+
'max-fixes': import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
13
|
+
model: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
14
|
+
vendor: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
15
|
+
output: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
16
|
+
mode: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
17
|
+
verbose: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
};
|
|
19
|
+
run(): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const query_gen_1 = require("@memberjunction/query-gen");
|
|
5
|
+
const metadata_sync_1 = require("@memberjunction/metadata-sync");
|
|
6
|
+
const aiengine_1 = require("@memberjunction/aiengine");
|
|
7
|
+
class Generate extends core_1.Command {
|
|
8
|
+
static description = 'Generate SQL query templates for entities using AI';
|
|
9
|
+
static examples = [
|
|
10
|
+
`<%= config.bin %> <%= command.id %>`,
|
|
11
|
+
`<%= config.bin %> <%= command.id %> --entities "Customers,Orders"`,
|
|
12
|
+
`<%= config.bin %> <%= command.id %> --max-entities 5 --verbose`,
|
|
13
|
+
`<%= config.bin %> <%= command.id %> --mode database`,
|
|
14
|
+
];
|
|
15
|
+
static flags = {
|
|
16
|
+
entities: core_1.Flags.string({
|
|
17
|
+
char: 'e',
|
|
18
|
+
description: 'Specific entities to generate queries for (comma-separated)',
|
|
19
|
+
multiple: false
|
|
20
|
+
}),
|
|
21
|
+
'exclude-entities': core_1.Flags.string({
|
|
22
|
+
char: 'x',
|
|
23
|
+
description: 'Entities to exclude (comma-separated)',
|
|
24
|
+
multiple: false
|
|
25
|
+
}),
|
|
26
|
+
'exclude-schemas': core_1.Flags.string({
|
|
27
|
+
char: 's',
|
|
28
|
+
description: 'Schemas to exclude (comma-separated)',
|
|
29
|
+
multiple: false
|
|
30
|
+
}),
|
|
31
|
+
'max-entities': core_1.Flags.integer({
|
|
32
|
+
char: 'm',
|
|
33
|
+
description: 'Max entities per group',
|
|
34
|
+
default: 3
|
|
35
|
+
}),
|
|
36
|
+
'target-groups': core_1.Flags.integer({
|
|
37
|
+
char: 't',
|
|
38
|
+
description: 'Target number of entity groups to generate',
|
|
39
|
+
default: 75
|
|
40
|
+
}),
|
|
41
|
+
'max-refinements': core_1.Flags.integer({
|
|
42
|
+
char: 'r',
|
|
43
|
+
description: 'Max refinement iterations',
|
|
44
|
+
default: 3
|
|
45
|
+
}),
|
|
46
|
+
'max-fixes': core_1.Flags.integer({
|
|
47
|
+
char: 'f',
|
|
48
|
+
description: 'Max error-fixing attempts',
|
|
49
|
+
default: 5
|
|
50
|
+
}),
|
|
51
|
+
model: core_1.Flags.string({ description: 'Preferred AI model' }),
|
|
52
|
+
vendor: core_1.Flags.string({ description: 'Preferred AI vendor' }),
|
|
53
|
+
output: core_1.Flags.string({
|
|
54
|
+
char: 'o',
|
|
55
|
+
description: 'Output directory',
|
|
56
|
+
default: './metadata/queries'
|
|
57
|
+
}),
|
|
58
|
+
mode: core_1.Flags.string({
|
|
59
|
+
description: 'Output mode: metadata|database|both',
|
|
60
|
+
default: 'metadata',
|
|
61
|
+
options: ['metadata', 'database', 'both']
|
|
62
|
+
}),
|
|
63
|
+
verbose: core_1.Flags.boolean({ char: 'v', description: 'Verbose output' }),
|
|
64
|
+
};
|
|
65
|
+
async run() {
|
|
66
|
+
const { flags } = await this.parse(Generate);
|
|
67
|
+
try {
|
|
68
|
+
// Load MJ configuration and initialize provider
|
|
69
|
+
const mjConfig = (0, metadata_sync_1.loadMJConfig)();
|
|
70
|
+
if (!mjConfig) {
|
|
71
|
+
this.error('No mj.config.cjs found in current directory or parent directories');
|
|
72
|
+
}
|
|
73
|
+
await (0, metadata_sync_1.initializeProvider)(mjConfig);
|
|
74
|
+
// Get system user and initialize AI Engine
|
|
75
|
+
const systemUser = (0, metadata_sync_1.getSystemUser)();
|
|
76
|
+
await aiengine_1.AIEngine.Instance.Config(false, systemUser);
|
|
77
|
+
// Convert flags to options object for QueryGen
|
|
78
|
+
const options = {
|
|
79
|
+
entities: flags.entities,
|
|
80
|
+
excludeEntities: flags['exclude-entities'],
|
|
81
|
+
excludeSchemas: flags['exclude-schemas'],
|
|
82
|
+
maxEntities: flags['max-entities'],
|
|
83
|
+
targetGroupCount: flags['target-groups'],
|
|
84
|
+
maxRefinements: flags['max-refinements'],
|
|
85
|
+
maxFixes: flags['max-fixes'],
|
|
86
|
+
model: flags.model,
|
|
87
|
+
vendor: flags.vendor,
|
|
88
|
+
output: flags.output,
|
|
89
|
+
mode: flags.mode,
|
|
90
|
+
verbose: flags.verbose
|
|
91
|
+
};
|
|
92
|
+
// Call QueryGen generate command
|
|
93
|
+
await (0, query_gen_1.generateCommand)(options);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
// QueryGen commands call process.exit(), so this may not be reached
|
|
97
|
+
// But we handle it just in case
|
|
98
|
+
this.error(error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.default = Generate;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Validate extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
path: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
verbose: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const query_gen_1 = require("@memberjunction/query-gen");
|
|
5
|
+
const metadata_sync_1 = require("@memberjunction/metadata-sync");
|
|
6
|
+
class Validate extends core_1.Command {
|
|
7
|
+
static description = 'Validate existing query templates';
|
|
8
|
+
static examples = [
|
|
9
|
+
`<%= config.bin %> <%= command.id %>`,
|
|
10
|
+
`<%= config.bin %> <%= command.id %> --path ./metadata/queries`,
|
|
11
|
+
`<%= config.bin %> <%= command.id %> --verbose`,
|
|
12
|
+
];
|
|
13
|
+
static flags = {
|
|
14
|
+
path: core_1.Flags.string({
|
|
15
|
+
char: 'p',
|
|
16
|
+
description: 'Path to queries metadata file or directory',
|
|
17
|
+
default: './metadata/queries'
|
|
18
|
+
}),
|
|
19
|
+
verbose: core_1.Flags.boolean({ char: 'v', description: 'Verbose output' }),
|
|
20
|
+
};
|
|
21
|
+
async run() {
|
|
22
|
+
const { flags } = await this.parse(Validate);
|
|
23
|
+
try {
|
|
24
|
+
// Load MJ configuration and initialize provider
|
|
25
|
+
const mjConfig = (0, metadata_sync_1.loadMJConfig)();
|
|
26
|
+
if (!mjConfig) {
|
|
27
|
+
this.error('No mj.config.cjs found in current directory or parent directories');
|
|
28
|
+
}
|
|
29
|
+
await (0, metadata_sync_1.initializeProvider)(mjConfig);
|
|
30
|
+
// Convert flags to options object for QueryGen
|
|
31
|
+
const options = {
|
|
32
|
+
path: flags.path,
|
|
33
|
+
verbose: flags.verbose
|
|
34
|
+
};
|
|
35
|
+
// Call QueryGen validate command
|
|
36
|
+
await (0, query_gen_1.validateCommand)(options);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
// QueryGen commands call process.exit(), so this may not be reached
|
|
40
|
+
// But we handle it just in case
|
|
41
|
+
this.error(error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.default = Validate;
|
package/oclif.manifest.json
CHANGED
|
@@ -94,6 +94,38 @@
|
|
|
94
94
|
"index.js"
|
|
95
95
|
]
|
|
96
96
|
},
|
|
97
|
+
"clean": {
|
|
98
|
+
"aliases": [],
|
|
99
|
+
"args": {},
|
|
100
|
+
"description": "Resets the MemberJunction database to a pre-installation state",
|
|
101
|
+
"examples": [
|
|
102
|
+
"<%= config.bin %> <%= command.id %>\n"
|
|
103
|
+
],
|
|
104
|
+
"flags": {
|
|
105
|
+
"verbose": {
|
|
106
|
+
"char": "v",
|
|
107
|
+
"description": "Enable additional logging",
|
|
108
|
+
"name": "verbose",
|
|
109
|
+
"allowNo": false,
|
|
110
|
+
"type": "boolean"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"hasDynamicHelp": false,
|
|
114
|
+
"hiddenAliases": [],
|
|
115
|
+
"id": "clean",
|
|
116
|
+
"pluginAlias": "@memberjunction/cli",
|
|
117
|
+
"pluginName": "@memberjunction/cli",
|
|
118
|
+
"pluginType": "core",
|
|
119
|
+
"strict": true,
|
|
120
|
+
"enableJsonFlag": false,
|
|
121
|
+
"isESM": false,
|
|
122
|
+
"relativePath": [
|
|
123
|
+
"dist",
|
|
124
|
+
"commands",
|
|
125
|
+
"clean",
|
|
126
|
+
"index.js"
|
|
127
|
+
]
|
|
128
|
+
},
|
|
97
129
|
"codegen": {
|
|
98
130
|
"aliases": [],
|
|
99
131
|
"args": {},
|
|
@@ -562,10 +594,10 @@
|
|
|
562
594
|
"status.js"
|
|
563
595
|
]
|
|
564
596
|
},
|
|
565
|
-
"
|
|
597
|
+
"install": {
|
|
566
598
|
"aliases": [],
|
|
567
599
|
"args": {},
|
|
568
|
-
"description": "
|
|
600
|
+
"description": "Install MemberJunction",
|
|
569
601
|
"examples": [
|
|
570
602
|
"<%= config.bin %> <%= command.id %>\n"
|
|
571
603
|
],
|
|
@@ -580,7 +612,7 @@
|
|
|
580
612
|
},
|
|
581
613
|
"hasDynamicHelp": false,
|
|
582
614
|
"hiddenAliases": [],
|
|
583
|
-
"id": "
|
|
615
|
+
"id": "install",
|
|
584
616
|
"pluginAlias": "@memberjunction/cli",
|
|
585
617
|
"pluginName": "@memberjunction/cli",
|
|
586
618
|
"pluginType": "core",
|
|
@@ -590,7 +622,7 @@
|
|
|
590
622
|
"relativePath": [
|
|
591
623
|
"dist",
|
|
592
624
|
"commands",
|
|
593
|
-
"
|
|
625
|
+
"install",
|
|
594
626
|
"index.js"
|
|
595
627
|
]
|
|
596
628
|
},
|
|
@@ -634,17 +666,28 @@
|
|
|
634
666
|
"index.js"
|
|
635
667
|
]
|
|
636
668
|
},
|
|
637
|
-
"
|
|
669
|
+
"querygen:export": {
|
|
638
670
|
"aliases": [],
|
|
639
671
|
"args": {},
|
|
640
|
-
"description": "
|
|
672
|
+
"description": "Export queries from database to metadata files",
|
|
641
673
|
"examples": [
|
|
642
|
-
"<%= config.bin %> <%= command.id
|
|
674
|
+
"<%= config.bin %> <%= command.id %>",
|
|
675
|
+
"<%= config.bin %> <%= command.id %> --output ./metadata/queries",
|
|
676
|
+
"<%= config.bin %> <%= command.id %> --verbose"
|
|
643
677
|
],
|
|
644
678
|
"flags": {
|
|
679
|
+
"output": {
|
|
680
|
+
"char": "o",
|
|
681
|
+
"description": "Output directory",
|
|
682
|
+
"name": "output",
|
|
683
|
+
"default": "./metadata/queries",
|
|
684
|
+
"hasDynamicHelp": false,
|
|
685
|
+
"multiple": false,
|
|
686
|
+
"type": "option"
|
|
687
|
+
},
|
|
645
688
|
"verbose": {
|
|
646
689
|
"char": "v",
|
|
647
|
-
"description": "
|
|
690
|
+
"description": "Verbose output",
|
|
648
691
|
"name": "verbose",
|
|
649
692
|
"allowNo": false,
|
|
650
693
|
"type": "boolean"
|
|
@@ -652,7 +695,7 @@
|
|
|
652
695
|
},
|
|
653
696
|
"hasDynamicHelp": false,
|
|
654
697
|
"hiddenAliases": [],
|
|
655
|
-
"id": "
|
|
698
|
+
"id": "querygen:export",
|
|
656
699
|
"pluginAlias": "@memberjunction/cli",
|
|
657
700
|
"pluginName": "@memberjunction/cli",
|
|
658
701
|
"pluginType": "core",
|
|
@@ -662,8 +705,182 @@
|
|
|
662
705
|
"relativePath": [
|
|
663
706
|
"dist",
|
|
664
707
|
"commands",
|
|
665
|
-
"
|
|
666
|
-
"
|
|
708
|
+
"querygen",
|
|
709
|
+
"export.js"
|
|
710
|
+
]
|
|
711
|
+
},
|
|
712
|
+
"querygen:generate": {
|
|
713
|
+
"aliases": [],
|
|
714
|
+
"args": {},
|
|
715
|
+
"description": "Generate SQL query templates for entities using AI",
|
|
716
|
+
"examples": [
|
|
717
|
+
"<%= config.bin %> <%= command.id %>",
|
|
718
|
+
"<%= config.bin %> <%= command.id %> --entities \"Customers,Orders\"",
|
|
719
|
+
"<%= config.bin %> <%= command.id %> --max-entities 5 --verbose",
|
|
720
|
+
"<%= config.bin %> <%= command.id %> --mode database"
|
|
721
|
+
],
|
|
722
|
+
"flags": {
|
|
723
|
+
"entities": {
|
|
724
|
+
"char": "e",
|
|
725
|
+
"description": "Specific entities to generate queries for (comma-separated)",
|
|
726
|
+
"name": "entities",
|
|
727
|
+
"hasDynamicHelp": false,
|
|
728
|
+
"multiple": false,
|
|
729
|
+
"type": "option"
|
|
730
|
+
},
|
|
731
|
+
"exclude-entities": {
|
|
732
|
+
"char": "x",
|
|
733
|
+
"description": "Entities to exclude (comma-separated)",
|
|
734
|
+
"name": "exclude-entities",
|
|
735
|
+
"hasDynamicHelp": false,
|
|
736
|
+
"multiple": false,
|
|
737
|
+
"type": "option"
|
|
738
|
+
},
|
|
739
|
+
"exclude-schemas": {
|
|
740
|
+
"char": "s",
|
|
741
|
+
"description": "Schemas to exclude (comma-separated)",
|
|
742
|
+
"name": "exclude-schemas",
|
|
743
|
+
"hasDynamicHelp": false,
|
|
744
|
+
"multiple": false,
|
|
745
|
+
"type": "option"
|
|
746
|
+
},
|
|
747
|
+
"max-entities": {
|
|
748
|
+
"char": "m",
|
|
749
|
+
"description": "Max entities per group",
|
|
750
|
+
"name": "max-entities",
|
|
751
|
+
"default": 3,
|
|
752
|
+
"hasDynamicHelp": false,
|
|
753
|
+
"multiple": false,
|
|
754
|
+
"type": "option"
|
|
755
|
+
},
|
|
756
|
+
"target-groups": {
|
|
757
|
+
"char": "t",
|
|
758
|
+
"description": "Target number of entity groups to generate",
|
|
759
|
+
"name": "target-groups",
|
|
760
|
+
"default": 75,
|
|
761
|
+
"hasDynamicHelp": false,
|
|
762
|
+
"multiple": false,
|
|
763
|
+
"type": "option"
|
|
764
|
+
},
|
|
765
|
+
"max-refinements": {
|
|
766
|
+
"char": "r",
|
|
767
|
+
"description": "Max refinement iterations",
|
|
768
|
+
"name": "max-refinements",
|
|
769
|
+
"default": 3,
|
|
770
|
+
"hasDynamicHelp": false,
|
|
771
|
+
"multiple": false,
|
|
772
|
+
"type": "option"
|
|
773
|
+
},
|
|
774
|
+
"max-fixes": {
|
|
775
|
+
"char": "f",
|
|
776
|
+
"description": "Max error-fixing attempts",
|
|
777
|
+
"name": "max-fixes",
|
|
778
|
+
"default": 5,
|
|
779
|
+
"hasDynamicHelp": false,
|
|
780
|
+
"multiple": false,
|
|
781
|
+
"type": "option"
|
|
782
|
+
},
|
|
783
|
+
"model": {
|
|
784
|
+
"description": "Preferred AI model",
|
|
785
|
+
"name": "model",
|
|
786
|
+
"hasDynamicHelp": false,
|
|
787
|
+
"multiple": false,
|
|
788
|
+
"type": "option"
|
|
789
|
+
},
|
|
790
|
+
"vendor": {
|
|
791
|
+
"description": "Preferred AI vendor",
|
|
792
|
+
"name": "vendor",
|
|
793
|
+
"hasDynamicHelp": false,
|
|
794
|
+
"multiple": false,
|
|
795
|
+
"type": "option"
|
|
796
|
+
},
|
|
797
|
+
"output": {
|
|
798
|
+
"char": "o",
|
|
799
|
+
"description": "Output directory",
|
|
800
|
+
"name": "output",
|
|
801
|
+
"default": "./metadata/queries",
|
|
802
|
+
"hasDynamicHelp": false,
|
|
803
|
+
"multiple": false,
|
|
804
|
+
"type": "option"
|
|
805
|
+
},
|
|
806
|
+
"mode": {
|
|
807
|
+
"description": "Output mode: metadata|database|both",
|
|
808
|
+
"name": "mode",
|
|
809
|
+
"default": "metadata",
|
|
810
|
+
"hasDynamicHelp": false,
|
|
811
|
+
"multiple": false,
|
|
812
|
+
"options": [
|
|
813
|
+
"metadata",
|
|
814
|
+
"database",
|
|
815
|
+
"both"
|
|
816
|
+
],
|
|
817
|
+
"type": "option"
|
|
818
|
+
},
|
|
819
|
+
"verbose": {
|
|
820
|
+
"char": "v",
|
|
821
|
+
"description": "Verbose output",
|
|
822
|
+
"name": "verbose",
|
|
823
|
+
"allowNo": false,
|
|
824
|
+
"type": "boolean"
|
|
825
|
+
}
|
|
826
|
+
},
|
|
827
|
+
"hasDynamicHelp": false,
|
|
828
|
+
"hiddenAliases": [],
|
|
829
|
+
"id": "querygen:generate",
|
|
830
|
+
"pluginAlias": "@memberjunction/cli",
|
|
831
|
+
"pluginName": "@memberjunction/cli",
|
|
832
|
+
"pluginType": "core",
|
|
833
|
+
"strict": true,
|
|
834
|
+
"enableJsonFlag": false,
|
|
835
|
+
"isESM": false,
|
|
836
|
+
"relativePath": [
|
|
837
|
+
"dist",
|
|
838
|
+
"commands",
|
|
839
|
+
"querygen",
|
|
840
|
+
"generate.js"
|
|
841
|
+
]
|
|
842
|
+
},
|
|
843
|
+
"querygen:validate": {
|
|
844
|
+
"aliases": [],
|
|
845
|
+
"args": {},
|
|
846
|
+
"description": "Validate existing query templates",
|
|
847
|
+
"examples": [
|
|
848
|
+
"<%= config.bin %> <%= command.id %>",
|
|
849
|
+
"<%= config.bin %> <%= command.id %> --path ./metadata/queries",
|
|
850
|
+
"<%= config.bin %> <%= command.id %> --verbose"
|
|
851
|
+
],
|
|
852
|
+
"flags": {
|
|
853
|
+
"path": {
|
|
854
|
+
"char": "p",
|
|
855
|
+
"description": "Path to queries metadata file or directory",
|
|
856
|
+
"name": "path",
|
|
857
|
+
"default": "./metadata/queries",
|
|
858
|
+
"hasDynamicHelp": false,
|
|
859
|
+
"multiple": false,
|
|
860
|
+
"type": "option"
|
|
861
|
+
},
|
|
862
|
+
"verbose": {
|
|
863
|
+
"char": "v",
|
|
864
|
+
"description": "Verbose output",
|
|
865
|
+
"name": "verbose",
|
|
866
|
+
"allowNo": false,
|
|
867
|
+
"type": "boolean"
|
|
868
|
+
}
|
|
869
|
+
},
|
|
870
|
+
"hasDynamicHelp": false,
|
|
871
|
+
"hiddenAliases": [],
|
|
872
|
+
"id": "querygen:validate",
|
|
873
|
+
"pluginAlias": "@memberjunction/cli",
|
|
874
|
+
"pluginName": "@memberjunction/cli",
|
|
875
|
+
"pluginType": "core",
|
|
876
|
+
"strict": true,
|
|
877
|
+
"enableJsonFlag": false,
|
|
878
|
+
"isESM": false,
|
|
879
|
+
"relativePath": [
|
|
880
|
+
"dist",
|
|
881
|
+
"commands",
|
|
882
|
+
"querygen",
|
|
883
|
+
"validate.js"
|
|
667
884
|
]
|
|
668
885
|
},
|
|
669
886
|
"sync:file-reset": {
|
|
@@ -2285,5 +2502,5 @@
|
|
|
2285
2502
|
]
|
|
2286
2503
|
}
|
|
2287
2504
|
},
|
|
2288
|
-
"version": "2.
|
|
2505
|
+
"version": "2.126.0"
|
|
2289
2506
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.126.0",
|
|
4
4
|
"description": "MemberJunction command line tools",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"oclif"
|
|
@@ -51,13 +51,14 @@
|
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"@inquirer/prompts": "^5.0.1",
|
|
54
|
-
"@memberjunction/ai-cli": "2.
|
|
55
|
-
"@memberjunction/codegen-lib": "2.
|
|
56
|
-
"@memberjunction/core": "2.
|
|
57
|
-
"@memberjunction/db-auto-doc": "2.
|
|
58
|
-
"@memberjunction/metadata-sync": "2.
|
|
59
|
-
"@memberjunction/
|
|
60
|
-
"@memberjunction/
|
|
54
|
+
"@memberjunction/ai-cli": "2.126.0",
|
|
55
|
+
"@memberjunction/codegen-lib": "2.126.0",
|
|
56
|
+
"@memberjunction/core": "2.126.0",
|
|
57
|
+
"@memberjunction/db-auto-doc": "2.126.0",
|
|
58
|
+
"@memberjunction/metadata-sync": "2.126.0",
|
|
59
|
+
"@memberjunction/query-gen": "2.126.0",
|
|
60
|
+
"@memberjunction/sqlserver-dataprovider": "2.126.0",
|
|
61
|
+
"@memberjunction/testing-cli": "2.126.0",
|
|
61
62
|
"@oclif/core": "^3",
|
|
62
63
|
"@oclif/plugin-help": "^6",
|
|
63
64
|
"@oclif/plugin-version": "^2.0.17",
|