@nestbox-ai/cli 1.0.32 → 1.0.34
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/dist/commands/agent/generate.js +46 -35
- package/dist/commands/agent/generate.js.map +1 -1
- package/dist/utils/agent.d.ts +0 -2
- package/dist/utils/agent.js +0 -37
- package/dist/utils/agent.js.map +1 -1
- package/dist/utils/plopGenerator.d.ts +14 -0
- package/dist/utils/plopGenerator.js +104 -0
- package/dist/utils/plopGenerator.js.map +1 -0
- package/dist/utils/validation.d.ts +4 -0
- package/dist/utils/validation.js +24 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +4 -2
- package/src/commands/agent/generate.ts +48 -41
- package/src/utils/agent.ts +0 -37
- package/src/utils/plopGenerator.ts +111 -0
- package/src/utils/validation.ts +22 -0
- package/templates/base-js/index.js.hbs +17 -0
- package/templates/base-js/package.json +15 -0
- package/templates/base-ts/eslint.config.mjs +27 -0
- package/templates/base-ts/package.json +24 -0
- package/templates/base-ts/src/index.ts.hbs +16 -0
- package/templates/base-ts/tsconfig.json +14 -0
- package/templates/chatbot-js/index.js.hbs +18 -0
- package/templates/chatbot-js/package-lock.json +1571 -0
- package/templates/chatbot-js/package.json +15 -0
- package/templates/chatbot-ts/eslint.config.mjs +27 -0
- package/templates/chatbot-ts/package.json +24 -0
- package/templates/chatbot-ts/src/index.ts.hbs +18 -0
- package/templates/chatbot-ts/tsconfig.json +14 -0
- package/templates/template-base-js.zip +0 -0
- package/templates/template-base-ts.zip +0 -0
- package/templates/template-chatbot-js.zip +0 -0
- package/templates/template-chatbot-ts.zip +0 -0
|
@@ -17,6 +17,8 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
17
17
|
const ora_1 = __importDefault(require("ora"));
|
|
18
18
|
const fs_1 = __importDefault(require("fs"));
|
|
19
19
|
const agent_1 = require("../../utils/agent");
|
|
20
|
+
const plopGenerator_1 = require("../../utils/plopGenerator");
|
|
21
|
+
const validation_1 = require("../../utils/validation");
|
|
20
22
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
21
23
|
const path_1 = __importDefault(require("path"));
|
|
22
24
|
function registerGenerateCommand(agentCommand) {
|
|
@@ -25,6 +27,7 @@ function registerGenerateCommand(agentCommand) {
|
|
|
25
27
|
.description("Generate a new project from templates")
|
|
26
28
|
.option("--lang <language>", "Project language (ts|js)")
|
|
27
29
|
.option("--template <type>", "Template type (agent|chatbot)")
|
|
30
|
+
.option("--name <agentName>", "Agent/Chatbot name (must be a valid function name)")
|
|
28
31
|
.option("--project <projectId>", "Project ID")
|
|
29
32
|
.action((folder, options) => __awaiter(this, void 0, void 0, function* () {
|
|
30
33
|
try {
|
|
@@ -36,6 +39,7 @@ function registerGenerateCommand(agentCommand) {
|
|
|
36
39
|
}
|
|
37
40
|
let selectedLang = options.lang;
|
|
38
41
|
let selectedTemplate = options.template;
|
|
42
|
+
let agentName = options.name;
|
|
39
43
|
// Interactive selection if not provided
|
|
40
44
|
if (!selectedLang || !selectedTemplate) {
|
|
41
45
|
spinner.stop();
|
|
@@ -59,63 +63,70 @@ function registerGenerateCommand(agentCommand) {
|
|
|
59
63
|
{ name: 'Chatbot', value: 'chatbot' }
|
|
60
64
|
],
|
|
61
65
|
when: () => !selectedTemplate
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: 'input',
|
|
69
|
+
name: 'agentName',
|
|
70
|
+
message: 'Enter agent/chatbot name (must be a valid function name):',
|
|
71
|
+
when: () => !agentName,
|
|
72
|
+
default: (answers) => {
|
|
73
|
+
const type = selectedTemplate || answers.template;
|
|
74
|
+
return type === 'agent' ? 'myAgent' : 'myChatbot';
|
|
75
|
+
},
|
|
76
|
+
validate: (input) => {
|
|
77
|
+
if (!input.trim()) {
|
|
78
|
+
return 'Agent name cannot be empty';
|
|
79
|
+
}
|
|
80
|
+
if (!(0, validation_1.isValidFunctionName)(input.trim())) {
|
|
81
|
+
return 'Must be a valid function name (e.g., myAgent, chatBot123, my_agent)';
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
62
85
|
}
|
|
63
86
|
]);
|
|
64
87
|
selectedLang = selectedLang || answers.lang;
|
|
65
88
|
selectedTemplate = selectedTemplate || answers.template;
|
|
89
|
+
agentName = agentName || answers.agentName;
|
|
66
90
|
spinner.start("Generating project...");
|
|
67
91
|
}
|
|
92
|
+
// Validate agent name if provided via CLI option
|
|
93
|
+
if (agentName && !(0, validation_1.isValidFunctionName)(agentName)) {
|
|
94
|
+
spinner.fail(`Invalid agent name: "${agentName}". Must be a valid function name (e.g., myAgent, chatBot123, my_agent)`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Set default agent name if not provided
|
|
98
|
+
if (!agentName) {
|
|
99
|
+
agentName = selectedTemplate === 'agent' ? 'myAgent' : 'myChatbot';
|
|
100
|
+
}
|
|
68
101
|
// Find matching template in local templates folder
|
|
69
102
|
const templateMapping = {
|
|
70
103
|
'agent': 'base',
|
|
71
104
|
'chatbot': 'chatbot'
|
|
72
105
|
};
|
|
73
106
|
const mappedTemplateType = templateMapping[selectedTemplate] || selectedTemplate;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
let templatePath = path_1.default.resolve(process.cwd(), 'templates', templateKey);
|
|
77
|
-
if (!fs_1.default.existsSync(templatePath)) {
|
|
78
|
-
// fallback to __dirname
|
|
79
|
-
templatePath = path_1.default.resolve(__dirname, '../../../templates', templateKey);
|
|
80
|
-
}
|
|
107
|
+
// Check if template directory exists
|
|
108
|
+
const templatePath = path_1.default.resolve(__dirname, `../../../templates/${mappedTemplateType}-${selectedLang}`);
|
|
81
109
|
if (!fs_1.default.existsSync(templatePath)) {
|
|
82
110
|
spinner.fail(`Template not found: ${templatePath}`);
|
|
83
|
-
// Show available templates
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
fs_1.default.readdirSync(cwdTemplates).forEach(file => {
|
|
90
|
-
console.log(chalk_1.default.yellow(` - ${file}`));
|
|
111
|
+
// Show available templates
|
|
112
|
+
const availableTemplates = (0, plopGenerator_1.listAvailableTemplates)();
|
|
113
|
+
if (availableTemplates.length > 0) {
|
|
114
|
+
console.log(chalk_1.default.yellow('Available templates:'));
|
|
115
|
+
availableTemplates.forEach(template => {
|
|
116
|
+
console.log(chalk_1.default.yellow(` - ${template}`));
|
|
91
117
|
});
|
|
92
|
-
shown = true;
|
|
93
118
|
}
|
|
94
|
-
|
|
95
|
-
console.log(chalk_1.default.
|
|
96
|
-
fs_1.default.readdirSync(dirTemplates).forEach(file => {
|
|
97
|
-
console.log(chalk_1.default.yellow(` - ${file}`));
|
|
98
|
-
});
|
|
99
|
-
shown = true;
|
|
100
|
-
}
|
|
101
|
-
if (!shown) {
|
|
102
|
-
console.log(chalk_1.default.red('No templates directory found. Please add your templates.'));
|
|
119
|
+
else {
|
|
120
|
+
console.log(chalk_1.default.red('No templates found. Please add your templates to the templates directory.'));
|
|
103
121
|
}
|
|
104
122
|
return;
|
|
105
123
|
}
|
|
106
|
-
spinner.text = `
|
|
124
|
+
spinner.text = `Generating ${mappedTemplateType} project in ${folder}...`;
|
|
107
125
|
try {
|
|
108
|
-
//
|
|
109
|
-
(0,
|
|
126
|
+
// Generate project using plop
|
|
127
|
+
yield (0, plopGenerator_1.generateWithPlop)(selectedTemplate, selectedLang, folder, path_1.default.basename(folder), agentName);
|
|
110
128
|
// Create nestbox.config.json for TypeScript projects
|
|
111
129
|
(0, agent_1.createNestboxConfig)(folder, selectedLang === 'ts');
|
|
112
|
-
// Update package.json with project name if it exists
|
|
113
|
-
const packageJsonPath = path_1.default.join(folder, 'package.json');
|
|
114
|
-
if (fs_1.default.existsSync(packageJsonPath)) {
|
|
115
|
-
const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf8'));
|
|
116
|
-
packageJson.name = path_1.default.basename(folder);
|
|
117
|
-
fs_1.default.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
118
|
-
}
|
|
119
130
|
spinner.succeed(`Successfully generated ${mappedTemplateType} project in ${folder}`);
|
|
120
131
|
console.log(chalk_1.default.green("\nNext steps:"));
|
|
121
132
|
console.log(chalk_1.default.yellow(` cd ${folder}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/agent/generate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/agent/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/agent.d.ts
CHANGED
|
@@ -10,6 +10,4 @@ export interface TemplateInfo {
|
|
|
10
10
|
lang: string;
|
|
11
11
|
type: string;
|
|
12
12
|
}
|
|
13
|
-
export declare const TEMPLATES: Record<string, TemplateInfo>;
|
|
14
|
-
export declare function extractZip(zipPath: string, extractPath: string): void;
|
|
15
13
|
export declare function createNestboxConfig(projectPath: string, isTypeScript: boolean): void;
|
package/dist/utils/agent.js
CHANGED
|
@@ -45,13 +45,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
45
45
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
46
|
};
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
-
exports.TEMPLATES = void 0;
|
|
49
48
|
exports.findProjectRoot = findProjectRoot;
|
|
50
49
|
exports.loadNestboxConfig = loadNestboxConfig;
|
|
51
50
|
exports.isTypeScriptProject = isTypeScriptProject;
|
|
52
51
|
exports.runPredeployScripts = runPredeployScripts;
|
|
53
52
|
exports.createZipFromDirectory = createZipFromDirectory;
|
|
54
|
-
exports.extractZip = extractZip;
|
|
55
53
|
exports.createNestboxConfig = createNestboxConfig;
|
|
56
54
|
const path_1 = __importDefault(require("path"));
|
|
57
55
|
const fs_1 = __importDefault(require("fs"));
|
|
@@ -159,41 +157,6 @@ function createZipFromDirectory(dirPath, excludePatterns = ['node_modules']) {
|
|
|
159
157
|
// Return the temp path for upload
|
|
160
158
|
return tempZipFilePath;
|
|
161
159
|
}
|
|
162
|
-
exports.TEMPLATES = {
|
|
163
|
-
'template-base-js.zip': {
|
|
164
|
-
name: 'Base JavaScript Agent',
|
|
165
|
-
description: 'Basic JavaScript agent template',
|
|
166
|
-
fileId: '1EYaa4eZWDc3HiaSnauXgW7oLJYzqOhPZ', // Replace with actual file ID
|
|
167
|
-
lang: 'js',
|
|
168
|
-
type: 'agent'
|
|
169
|
-
},
|
|
170
|
-
'template-base-ts.zip': {
|
|
171
|
-
name: 'Base TypeScript Agent',
|
|
172
|
-
description: 'Basic TypeScript agent template',
|
|
173
|
-
fileId: '1kk2JWlgeRuNOGpz8wsZUTD115qfNzWk5', // Replace with actual file ID
|
|
174
|
-
lang: 'ts',
|
|
175
|
-
type: 'agent'
|
|
176
|
-
},
|
|
177
|
-
'template-chatbot-js.zip': {
|
|
178
|
-
name: 'JavaScript Chatbot',
|
|
179
|
-
description: 'JavaScript chatbot template',
|
|
180
|
-
fileId: '1b4c4NQa_Qm85-GwObn52D-bEKz48zh9O', // Replace with actual file ID
|
|
181
|
-
lang: 'js',
|
|
182
|
-
type: 'chatbot'
|
|
183
|
-
},
|
|
184
|
-
'template-chatbot-ts.zip': {
|
|
185
|
-
name: 'TypeScript Chatbot',
|
|
186
|
-
description: 'TypeScript chatbot template',
|
|
187
|
-
fileId: '1vbA5Jlet3XIRMQ4NSsMsLMeHt-mUhRTe', // Replace with actual file ID
|
|
188
|
-
lang: 'ts',
|
|
189
|
-
type: 'chatbot'
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
// Helper function to extract zip file
|
|
193
|
-
function extractZip(zipPath, extractPath) {
|
|
194
|
-
const zip = new adm_zip_1.default(zipPath);
|
|
195
|
-
zip.extractAllTo(extractPath, true);
|
|
196
|
-
}
|
|
197
160
|
function createNestboxConfig(projectPath, isTypeScript) {
|
|
198
161
|
if (!isTypeScript)
|
|
199
162
|
return;
|
package/dist/utils/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/utils/agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/utils/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface TemplateConfig {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
prompts: any[];
|
|
5
|
+
actions: any[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Generate project using plop.js templates
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateWithPlop(templateType: string, language: string, targetFolder: string, projectName?: string, agentName?: string): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* List available templates
|
|
13
|
+
*/
|
|
14
|
+
export declare function listAvailableTemplates(): string[];
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.generateWithPlop = generateWithPlop;
|
|
16
|
+
exports.listAvailableTemplates = listAvailableTemplates;
|
|
17
|
+
const path_1 = __importDefault(require("path"));
|
|
18
|
+
const fs_1 = __importDefault(require("fs"));
|
|
19
|
+
const node_plop_1 = __importDefault(require("node-plop"));
|
|
20
|
+
/**
|
|
21
|
+
* Generate project using plop.js templates
|
|
22
|
+
*/
|
|
23
|
+
function generateWithPlop(templateType, language, targetFolder, projectName, agentName) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
// Create the target directory
|
|
26
|
+
if (!fs_1.default.existsSync(targetFolder)) {
|
|
27
|
+
fs_1.default.mkdirSync(targetFolder, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
// Set up plop programmatically
|
|
30
|
+
const plop = yield (0, node_plop_1.default)('', {
|
|
31
|
+
destBasePath: targetFolder,
|
|
32
|
+
force: false
|
|
33
|
+
});
|
|
34
|
+
// Template mapping
|
|
35
|
+
const templateMapping = {
|
|
36
|
+
'agent': 'base',
|
|
37
|
+
'chatbot': 'chatbot'
|
|
38
|
+
};
|
|
39
|
+
const mappedTemplateType = templateMapping[templateType] || templateType;
|
|
40
|
+
const templatePath = path_1.default.resolve(__dirname, `../../templates/${mappedTemplateType}-${language}`);
|
|
41
|
+
if (!fs_1.default.existsSync(templatePath)) {
|
|
42
|
+
throw new Error(`Template not found: ${templatePath}`);
|
|
43
|
+
}
|
|
44
|
+
// Configure the generator
|
|
45
|
+
const generatorName = `${mappedTemplateType}-${language}`;
|
|
46
|
+
// Get the main template file path and target name
|
|
47
|
+
const mainTemplateFile = language === 'ts' ? 'src/index.ts.hbs' : 'index.js.hbs';
|
|
48
|
+
const targetFileName = language === 'ts' ? 'src/index.ts' : 'index.js';
|
|
49
|
+
plop.setGenerator(generatorName, {
|
|
50
|
+
description: `Generate a new ${mappedTemplateType} project in ${language}`,
|
|
51
|
+
prompts: [],
|
|
52
|
+
actions: [
|
|
53
|
+
// Copy all non-template files
|
|
54
|
+
{
|
|
55
|
+
type: 'addMany',
|
|
56
|
+
destination: '.',
|
|
57
|
+
base: templatePath,
|
|
58
|
+
templateFiles: `${templatePath}/**/*`,
|
|
59
|
+
globOptions: {
|
|
60
|
+
dot: true,
|
|
61
|
+
ignore: ['**/node_modules/**', '**/*.hbs']
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
// Add the main template file with proper naming
|
|
65
|
+
{
|
|
66
|
+
type: 'add',
|
|
67
|
+
path: targetFileName,
|
|
68
|
+
templateFile: path_1.default.join(templatePath, mainTemplateFile)
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
// Run the generator
|
|
73
|
+
const generator = plop.getGenerator(generatorName);
|
|
74
|
+
yield generator.runActions({
|
|
75
|
+
name: projectName || path_1.default.basename(targetFolder),
|
|
76
|
+
agentName: agentName || (templateType === 'agent' ? 'myAgent' : 'myChatbot')
|
|
77
|
+
});
|
|
78
|
+
// Update package.json with project name if provided
|
|
79
|
+
if (projectName) {
|
|
80
|
+
const packageJsonPath = path_1.default.join(targetFolder, 'package.json');
|
|
81
|
+
if (fs_1.default.existsSync(packageJsonPath)) {
|
|
82
|
+
const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf8'));
|
|
83
|
+
packageJson.name = projectName;
|
|
84
|
+
fs_1.default.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* List available templates
|
|
91
|
+
*/
|
|
92
|
+
function listAvailableTemplates() {
|
|
93
|
+
const templatesDir = path_1.default.resolve(__dirname, '../../templates');
|
|
94
|
+
if (!fs_1.default.existsSync(templatesDir)) {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
return fs_1.default.readdirSync(templatesDir)
|
|
98
|
+
.filter(item => {
|
|
99
|
+
const itemPath = path_1.default.join(templatesDir, item);
|
|
100
|
+
return fs_1.default.statSync(itemPath).isDirectory();
|
|
101
|
+
})
|
|
102
|
+
.map(item => item.replace(/\.(ts|js)$/, ''));
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=plopGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plopGenerator.js","sourceRoot":"","sources":["../../src/utils/plopGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAeA,4CA8EC;AAKD,wDAYC;AA9GD,gDAAwB;AACxB,4CAAoB;AAEpB,0DAAiC;AASjC;;GAEG;AACH,SAAsB,gBAAgB,CACpC,YAAoB,EACpB,QAAgB,EAChB,YAAoB,EACpB,WAAoB,EACpB,SAAkB;;QAElB,8BAA8B;QAC9B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,YAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,+BAA+B;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAA,mBAAQ,EAAC,EAAE,EAAE;YAC9B,YAAY,EAAE,YAAY;YAC1B,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,mBAAmB;QACnB,MAAM,eAAe,GAA2B;YAC9C,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,MAAM,kBAAkB,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC;QACzE,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,kBAAkB,IAAI,QAAQ,EAAE,CAAC,CAAC;QAElG,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,uBAAuB,YAAY,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,0BAA0B;QAC1B,MAAM,aAAa,GAAG,GAAG,kBAAkB,IAAI,QAAQ,EAAE,CAAC;QAE1D,kDAAkD;QAClD,MAAM,gBAAgB,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC;QACjF,MAAM,cAAc,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC;QAEvE,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YAC/B,WAAW,EAAE,kBAAkB,kBAAkB,eAAe,QAAQ,EAAE;YAC1E,OAAO,EAAE,EAAE;YACX,OAAO,EAAE;gBACP,8BAA8B;gBAC9B;oBACE,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,GAAG;oBAChB,IAAI,EAAE,YAAY;oBAClB,aAAa,EAAE,GAAG,YAAY,OAAO;oBACrC,WAAW,EAAE;wBACX,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE,CAAC,oBAAoB,EAAE,UAAU,CAAC;qBAC3C;iBACF;gBACD,gDAAgD;gBAChD;oBACE,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,cAAc;oBACpB,YAAY,EAAE,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC;iBACxD;aACF;SACF,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,UAAU,CAAC;YACzB,IAAI,EAAE,WAAW,IAAI,cAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAChD,SAAS,EAAE,SAAS,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;SAC7E,CAAC,CAAC;QAEH,oDAAoD;QACpD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YAChE,IAAI,YAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACnC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;gBACzE,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC;gBAC/B,YAAE,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;CAAA;AAED;;GAEG;AACH,SAAgB,sBAAsB;IACpC,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAChE,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,YAAE,CAAC,WAAW,CAAC,YAAY,CAAC;SAChC,MAAM,CAAC,IAAI,CAAC,EAAE;QACb,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC,CAAC;SACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isValidFunctionName = isValidFunctionName;
|
|
4
|
+
/**
|
|
5
|
+
* Validates if a string is a valid JavaScript/TypeScript function name
|
|
6
|
+
*/
|
|
7
|
+
function isValidFunctionName(name) {
|
|
8
|
+
// Check if it's a valid JavaScript identifier
|
|
9
|
+
const validIdentifierRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
|
|
10
|
+
// Check if it's not a reserved keyword
|
|
11
|
+
const reservedKeywords = [
|
|
12
|
+
'abstract', 'arguments', 'await', 'boolean', 'break', 'byte', 'case', 'catch',
|
|
13
|
+
'char', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do',
|
|
14
|
+
'double', 'else', 'enum', 'eval', 'export', 'extends', 'false', 'final',
|
|
15
|
+
'finally', 'float', 'for', 'function', 'goto', 'if', 'implements', 'import',
|
|
16
|
+
'in', 'instanceof', 'int', 'interface', 'let', 'long', 'native', 'new',
|
|
17
|
+
'null', 'package', 'private', 'protected', 'public', 'return', 'short',
|
|
18
|
+
'static', 'super', 'switch', 'synchronized', 'this', 'throw', 'throws',
|
|
19
|
+
'transient', 'true', 'try', 'typeof', 'var', 'void', 'volatile', 'while',
|
|
20
|
+
'with', 'yield'
|
|
21
|
+
];
|
|
22
|
+
return validIdentifierRegex.test(name) && !reservedKeywords.includes(name.toLowerCase());
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";;AAGA,kDAkBC;AArBD;;GAEG;AACH,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,8CAA8C;IAC9C,MAAM,oBAAoB,GAAG,4BAA4B,CAAC;IAE1D,uCAAuC;IACvC,MAAM,gBAAgB,GAAG;QACvB,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;QAC7E,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI;QAC3E,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;QACvE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ;QAC3E,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK;QACtE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO;QACtE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;QACtE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;QACxE,MAAM,EAAE,OAAO;KAChB,CAAC;IAEF,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3F,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestbox-ai/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.34",
|
|
4
4
|
"description": "The cli tools that helps developers to build agents",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -61,9 +61,11 @@
|
|
|
61
61
|
"inquirer": "^8.2.6",
|
|
62
62
|
"js-yaml": "^4.1.0",
|
|
63
63
|
"jszip": "^3.10.1",
|
|
64
|
+
"node-plop": "^0.32.0",
|
|
64
65
|
"open": "^8.4.2",
|
|
65
66
|
"ora": "5.4.1",
|
|
66
|
-
"os": "^0.1.2"
|
|
67
|
+
"os": "^0.1.2",
|
|
68
|
+
"plop": "^4.0.1"
|
|
67
69
|
},
|
|
68
70
|
"type": "commonjs",
|
|
69
71
|
"engines": {
|
|
@@ -4,8 +4,9 @@ import ora from "ora";
|
|
|
4
4
|
import fs from "fs";
|
|
5
5
|
import {
|
|
6
6
|
createNestboxConfig,
|
|
7
|
-
extractZip,
|
|
8
7
|
} from "../../utils/agent";
|
|
8
|
+
import { generateWithPlop, listAvailableTemplates } from "../../utils/plopGenerator";
|
|
9
|
+
import { isValidFunctionName } from "../../utils/validation";
|
|
9
10
|
import inquirer from "inquirer";
|
|
10
11
|
import path from "path";
|
|
11
12
|
|
|
@@ -15,6 +16,7 @@ export function registerGenerateCommand(agentCommand: Command): void {
|
|
|
15
16
|
.description("Generate a new project from templates")
|
|
16
17
|
.option("--lang <language>", "Project language (ts|js)")
|
|
17
18
|
.option("--template <type>", "Template type (agent|chatbot)")
|
|
19
|
+
.option("--name <agentName>", "Agent/Chatbot name (must be a valid function name)")
|
|
18
20
|
.option("--project <projectId>", "Project ID")
|
|
19
21
|
.action(async (folder, options) => {
|
|
20
22
|
try {
|
|
@@ -28,6 +30,7 @@ export function registerGenerateCommand(agentCommand: Command): void {
|
|
|
28
30
|
|
|
29
31
|
let selectedLang = options.lang;
|
|
30
32
|
let selectedTemplate = options.template;
|
|
33
|
+
let agentName = options.name;
|
|
31
34
|
|
|
32
35
|
// Interactive selection if not provided
|
|
33
36
|
if (!selectedLang || !selectedTemplate) {
|
|
@@ -53,76 +56,80 @@ export function registerGenerateCommand(agentCommand: Command): void {
|
|
|
53
56
|
{ name: 'Chatbot', value: 'chatbot' }
|
|
54
57
|
],
|
|
55
58
|
when: () => !selectedTemplate
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
type: 'input',
|
|
62
|
+
name: 'agentName',
|
|
63
|
+
message: 'Enter agent/chatbot name (must be a valid function name):',
|
|
64
|
+
when: () => !agentName,
|
|
65
|
+
default: (answers: any) => {
|
|
66
|
+
const type = selectedTemplate || answers.template;
|
|
67
|
+
return type === 'agent' ? 'myAgent' : 'myChatbot';
|
|
68
|
+
},
|
|
69
|
+
validate: (input: string) => {
|
|
70
|
+
if (!input.trim()) {
|
|
71
|
+
return 'Agent name cannot be empty';
|
|
72
|
+
}
|
|
73
|
+
if (!isValidFunctionName(input.trim())) {
|
|
74
|
+
return 'Must be a valid function name (e.g., myAgent, chatBot123, my_agent)';
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
56
78
|
}
|
|
57
79
|
]);
|
|
58
80
|
|
|
59
81
|
selectedLang = selectedLang || answers.lang;
|
|
60
82
|
selectedTemplate = selectedTemplate || answers.template;
|
|
83
|
+
agentName = agentName || answers.agentName;
|
|
61
84
|
|
|
62
85
|
spinner.start("Generating project...");
|
|
63
86
|
}
|
|
64
87
|
|
|
88
|
+
// Validate agent name if provided via CLI option
|
|
89
|
+
if (agentName && !isValidFunctionName(agentName)) {
|
|
90
|
+
spinner.fail(`Invalid agent name: "${agentName}". Must be a valid function name (e.g., myAgent, chatBot123, my_agent)`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Set default agent name if not provided
|
|
95
|
+
if (!agentName) {
|
|
96
|
+
agentName = selectedTemplate === 'agent' ? 'myAgent' : 'myChatbot';
|
|
97
|
+
}
|
|
98
|
+
|
|
65
99
|
// Find matching template in local templates folder
|
|
66
100
|
const templateMapping: Record<string, string> = {
|
|
67
101
|
'agent': 'base',
|
|
68
102
|
'chatbot': 'chatbot'
|
|
69
103
|
};
|
|
70
104
|
const mappedTemplateType = templateMapping[selectedTemplate] || selectedTemplate;
|
|
71
|
-
const templateKey = `template-${mappedTemplateType}-${selectedLang}.zip`;
|
|
72
105
|
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
if (!fs.existsSync(templatePath)) {
|
|
76
|
-
// fallback to __dirname
|
|
77
|
-
templatePath = path.resolve(__dirname, '../../../templates', templateKey);
|
|
78
|
-
}
|
|
106
|
+
// Check if template directory exists
|
|
107
|
+
const templatePath = path.resolve(__dirname, `../../../templates/${mappedTemplateType}-${selectedLang}`);
|
|
79
108
|
|
|
80
109
|
if (!fs.existsSync(templatePath)) {
|
|
81
110
|
spinner.fail(`Template not found: ${templatePath}`);
|
|
82
|
-
// Show available templates
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
console.log(chalk.yellow('Available templates in ./templates:'));
|
|
89
|
-
fs.readdirSync(cwdTemplates).forEach(file => {
|
|
90
|
-
console.log(chalk.yellow(` - ${file}`));
|
|
91
|
-
});
|
|
92
|
-
shown = true;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (fs.existsSync(dirTemplates)) {
|
|
96
|
-
console.log(chalk.yellow('Available templates in templates:'));
|
|
97
|
-
fs.readdirSync(dirTemplates).forEach(file => {
|
|
98
|
-
console.log(chalk.yellow(` - ${file}`));
|
|
111
|
+
// Show available templates
|
|
112
|
+
const availableTemplates = listAvailableTemplates();
|
|
113
|
+
if (availableTemplates.length > 0) {
|
|
114
|
+
console.log(chalk.yellow('Available templates:'));
|
|
115
|
+
availableTemplates.forEach(template => {
|
|
116
|
+
console.log(chalk.yellow(` - ${template}`));
|
|
99
117
|
});
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (!shown) {
|
|
104
|
-
console.log(chalk.red('No templates directory found. Please add your templates.'));
|
|
118
|
+
} else {
|
|
119
|
+
console.log(chalk.red('No templates found. Please add your templates to the templates directory.'));
|
|
105
120
|
}
|
|
106
121
|
return;
|
|
107
122
|
}
|
|
108
123
|
|
|
109
|
-
spinner.text = `
|
|
124
|
+
spinner.text = `Generating ${mappedTemplateType} project in ${folder}...`;
|
|
110
125
|
|
|
111
126
|
try {
|
|
112
|
-
//
|
|
113
|
-
|
|
127
|
+
// Generate project using plop
|
|
128
|
+
await generateWithPlop(selectedTemplate, selectedLang, folder, path.basename(folder), agentName);
|
|
114
129
|
|
|
115
130
|
// Create nestbox.config.json for TypeScript projects
|
|
116
131
|
createNestboxConfig(folder, selectedLang === 'ts');
|
|
117
132
|
|
|
118
|
-
// Update package.json with project name if it exists
|
|
119
|
-
const packageJsonPath = path.join(folder, 'package.json');
|
|
120
|
-
if (fs.existsSync(packageJsonPath)) {
|
|
121
|
-
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
122
|
-
packageJson.name = path.basename(folder);
|
|
123
|
-
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
124
|
-
}
|
|
125
|
-
|
|
126
133
|
spinner.succeed(`Successfully generated ${mappedTemplateType} project in ${folder}`);
|
|
127
134
|
|
|
128
135
|
console.log(chalk.green("\nNext steps:"));
|
package/src/utils/agent.ts
CHANGED
|
@@ -135,43 +135,6 @@ export interface TemplateInfo {
|
|
|
135
135
|
type: string;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
export const TEMPLATES: Record<string, TemplateInfo> = {
|
|
139
|
-
'template-base-js.zip': {
|
|
140
|
-
name: 'Base JavaScript Agent',
|
|
141
|
-
description: 'Basic JavaScript agent template',
|
|
142
|
-
fileId: '1EYaa4eZWDc3HiaSnauXgW7oLJYzqOhPZ', // Replace with actual file ID
|
|
143
|
-
lang: 'js',
|
|
144
|
-
type: 'agent'
|
|
145
|
-
},
|
|
146
|
-
'template-base-ts.zip': {
|
|
147
|
-
name: 'Base TypeScript Agent',
|
|
148
|
-
description: 'Basic TypeScript agent template',
|
|
149
|
-
fileId: '1kk2JWlgeRuNOGpz8wsZUTD115qfNzWk5', // Replace with actual file ID
|
|
150
|
-
lang: 'ts',
|
|
151
|
-
type: 'agent'
|
|
152
|
-
},
|
|
153
|
-
'template-chatbot-js.zip': {
|
|
154
|
-
name: 'JavaScript Chatbot',
|
|
155
|
-
description: 'JavaScript chatbot template',
|
|
156
|
-
fileId: '1b4c4NQa_Qm85-GwObn52D-bEKz48zh9O', // Replace with actual file ID
|
|
157
|
-
lang: 'js',
|
|
158
|
-
type: 'chatbot'
|
|
159
|
-
},
|
|
160
|
-
'template-chatbot-ts.zip': {
|
|
161
|
-
name: 'TypeScript Chatbot',
|
|
162
|
-
description: 'TypeScript chatbot template',
|
|
163
|
-
fileId: '1vbA5Jlet3XIRMQ4NSsMsLMeHt-mUhRTe', // Replace with actual file ID
|
|
164
|
-
lang: 'ts',
|
|
165
|
-
type: 'chatbot'
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
// Helper function to extract zip file
|
|
170
|
-
export function extractZip(zipPath: string, extractPath: string): void {
|
|
171
|
-
const zip = new AdmZip(zipPath);
|
|
172
|
-
zip.extractAllTo(extractPath, true);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
138
|
export function createNestboxConfig(projectPath: string, isTypeScript: boolean): void {
|
|
176
139
|
if (!isTypeScript) return;
|
|
177
140
|
|