@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.
Files changed (33) hide show
  1. package/dist/commands/agent/generate.js +46 -35
  2. package/dist/commands/agent/generate.js.map +1 -1
  3. package/dist/utils/agent.d.ts +0 -2
  4. package/dist/utils/agent.js +0 -37
  5. package/dist/utils/agent.js.map +1 -1
  6. package/dist/utils/plopGenerator.d.ts +14 -0
  7. package/dist/utils/plopGenerator.js +104 -0
  8. package/dist/utils/plopGenerator.js.map +1 -0
  9. package/dist/utils/validation.d.ts +4 -0
  10. package/dist/utils/validation.js +24 -0
  11. package/dist/utils/validation.js.map +1 -0
  12. package/package.json +4 -2
  13. package/src/commands/agent/generate.ts +48 -41
  14. package/src/utils/agent.ts +0 -37
  15. package/src/utils/plopGenerator.ts +111 -0
  16. package/src/utils/validation.ts +22 -0
  17. package/templates/base-js/index.js.hbs +17 -0
  18. package/templates/base-js/package.json +15 -0
  19. package/templates/base-ts/eslint.config.mjs +27 -0
  20. package/templates/base-ts/package.json +24 -0
  21. package/templates/base-ts/src/index.ts.hbs +16 -0
  22. package/templates/base-ts/tsconfig.json +14 -0
  23. package/templates/chatbot-js/index.js.hbs +18 -0
  24. package/templates/chatbot-js/package-lock.json +1571 -0
  25. package/templates/chatbot-js/package.json +15 -0
  26. package/templates/chatbot-ts/eslint.config.mjs +27 -0
  27. package/templates/chatbot-ts/package.json +24 -0
  28. package/templates/chatbot-ts/src/index.ts.hbs +18 -0
  29. package/templates/chatbot-ts/tsconfig.json +14 -0
  30. package/templates/template-base-js.zip +0 -0
  31. package/templates/template-base-ts.zip +0 -0
  32. package/templates/template-chatbot-js.zip +0 -0
  33. 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
- const templateKey = `template-${mappedTemplateType}-${selectedLang}.zip`;
75
- // Try process.cwd() first, then __dirname fallback
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 in both locations
84
- const cwdTemplates = path_1.default.resolve(process.cwd(), 'templates');
85
- const dirTemplates = path_1.default.resolve(__dirname, '../../../templates');
86
- let shown = false;
87
- if (fs_1.default.existsSync(cwdTemplates)) {
88
- console.log(chalk_1.default.yellow('Available templates in ./templates:'));
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
- if (fs_1.default.existsSync(dirTemplates)) {
95
- console.log(chalk_1.default.yellow('Available templates in templates:'));
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 = `Extracting template to ${folder}...`;
124
+ spinner.text = `Generating ${mappedTemplateType} project in ${folder}...`;
107
125
  try {
108
- // Extract template to target folder
109
- (0, agent_1.extractZip)(templatePath, folder);
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":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/agent/generate.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/utils/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/utils/agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,0CAeC;AAGD,8CAaC;AAGD,kDAaC;AAED,kDAqBC;AAED,wDA0CC;AAUD,kDAgBC;AAzJD,gDAAwB;AACxB,4CAAoB;AACpB,kDAA0B;AAC1B,8CAAsB;AACtB,+BAAiC;AACjC,iDAAqC;AACrC,sDAA6B;AAC7B,uCAAyB;AAIzB,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAElC,SAAsB,eAAe;yDAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5D,IAAI,UAAU,GAAG,QAAQ,CAAC;QAE1B,OAAO,UAAU,KAAK,cAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;YACvE,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAE9D,IAAI,YAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,YAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACvE,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,QAAQ,CAAC,CAAC,yDAAyD;IAC5E,CAAC;CAAA;AAED,8DAA8D;AAC9D,SAAgB,iBAAiB,CAAC,WAAgB;IAChD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAEjE,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,+CAA+C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8DAA8D;AAC9D,SAAgB,mBAAmB,CAAC,aAAkB;IACpD,0BAA0B;IAC1B,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAsB,mBAAmB,CAAC,OAAY,EAAE,WAAgB;;QACtE,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;QAE5D,IAAI,CAAC;YACH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,OAAO,CAAC,IAAI,GAAG,YAAY,MAAM,EAAE,CAAC;gBAEpC,mDAAmD;gBACnD,MAAM,SAAS,CAAC,MAAM,EAAE;oBACtB,GAAG,EAAE,WAAW;iBACjB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CAAA;AAED,SAAgB,sBAAsB,CAAC,OAAY,EAAE,eAAe,GAAG,CAAC,cAAc,CAAC;IACrF,MAAM,OAAO,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,+BAA+B;IAC/B,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,IAAI,SAAS,MAAM,CAAC,CAAC;IAE9E,MAAM,GAAG,GAAG,IAAI,iBAAM,EAAE,CAAC;IAEzB,2CAA2C;IAC3C,SAAS,aAAa,CAAC,WAAgB,EAAE,YAAY,GAAG,EAAE;QACxD,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC9C,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAEvD,mCAAmC;YACnC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,OAAY,EAAE,EAAE,CACxC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC;gBAChF,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAC/B,EAAE,CAAC;gBACF,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEpC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa,CAAC,OAAO,CAAC,CAAC;IAEvB,2CAA2C;IAC3C,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE9B,kCAAkC;IAClC,OAAO,eAAe,CAAC;AACzB,CAAC;AAUD,SAAgB,mBAAmB,CAAC,WAAmB,EAAE,YAAqB;IAC5E,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG;QACb,MAAM,EAAE;YACN,SAAS,EAAE;gBACT,aAAa;gBACb,cAAc;gBACd,eAAe;aAChB;SACF;KACF,CAAC;IAEF,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC3E,CAAC"}
@@ -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":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Validates if a string is a valid JavaScript/TypeScript function name
3
+ */
4
+ export declare function isValidFunctionName(name: string): boolean;
@@ -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.32",
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
- // Try process.cwd() first, then __dirname fallback
74
- let templatePath = path.resolve(process.cwd(), 'templates', templateKey);
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 in both locations
83
- const cwdTemplates = path.resolve(process.cwd(), 'templates');
84
- const dirTemplates = path.resolve(__dirname, '../../../templates');
85
- let shown = false;
86
-
87
- if (fs.existsSync(cwdTemplates)) {
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
- shown = true;
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 = `Extracting template to ${folder}...`;
124
+ spinner.text = `Generating ${mappedTemplateType} project in ${folder}...`;
110
125
 
111
126
  try {
112
- // Extract template to target folder
113
- extractZip(templatePath, folder);
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:"));
@@ -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