@nestbox-ai/cli 1.0.34 → 1.0.36

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.
@@ -0,0 +1,158 @@
1
+ # Getting Started with Nestbox CLI
2
+
3
+ Welcome to the Nestbox CLI! This guide will get you up and running with building, managing, and deploying AI agents on the Nestbox platform.
4
+
5
+ ## Prerequisites
6
+
7
+ - Node.js 18+ installed
8
+ - A Nestbox platform account
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ npm install -g @nestbox-ai/cli
14
+ ```
15
+
16
+ ## Quick Start
17
+
18
+ ### 1. Login to Nestbox
19
+
20
+ ```bash
21
+ nestbox login demo.nestbox.com
22
+ ```
23
+
24
+ This opens your browser for Google SSO authentication. Once authenticated, your credentials are stored locally.
25
+
26
+ ### 2. Manage Projects
27
+
28
+ List your projects:
29
+ ```bash
30
+ nestbox project list
31
+ ```
32
+
33
+ Switch to a project:
34
+ ```bash
35
+ nestbox project use <project-name>
36
+ ```
37
+
38
+ Add a new project:
39
+ ```bash
40
+ nestbox project add <project-name> [alias]
41
+ ```
42
+
43
+ ### 3. Check Available Compute
44
+
45
+ List available compute resources:
46
+ ```bash
47
+ nestbox compute list
48
+ ```
49
+
50
+ Check compute status:
51
+ ```bash
52
+ nestbox compute status <compute-id>
53
+ ```
54
+
55
+ ### 4. Generate Agent Projects
56
+
57
+ Create a new agent project from templates:
58
+ ```bash
59
+ nestbox generate project <folder-name>
60
+ ```
61
+
62
+ Available templates:
63
+ - `base-js` - Basic JavaScript agent
64
+ - `base-ts` - Basic TypeScript agent
65
+ - `chatbot-js` - JavaScript chatbot agent
66
+ - `chatbot-ts` - TypeScript chatbot agent
67
+
68
+ ### 5. Deploy Your Agent
69
+
70
+ From your agent directory:
71
+ ```bash
72
+ nestbox agent deploy
73
+ ```
74
+
75
+ List deployed agents:
76
+ ```bash
77
+ nestbox agent list
78
+ ```
79
+
80
+ Remove an agent:
81
+ ```bash
82
+ nestbox agent remove
83
+ ```
84
+
85
+ ## Common Workflows
86
+
87
+ ### Development Cycle
88
+ ```bash
89
+ # Generate agent project
90
+ nestbox generate project my-agent
91
+
92
+ # Develop locally
93
+ cd my-agent
94
+ npm install
95
+ npm run dev
96
+
97
+ # Deploy to staging
98
+ nestbox agent deploy --env staging
99
+
100
+ # Test and validate
101
+ nestbox agent list
102
+
103
+ # Deploy to production
104
+ nestbox agent deploy --env production
105
+ ```
106
+
107
+ ### Managing Documents
108
+ ```bash
109
+ # Upload documents for agent context
110
+ nestbox document upload ./docs/*.pdf
111
+
112
+ # List uploaded documents
113
+ nestbox document list
114
+
115
+ # Delete documents
116
+ nestbox document delete <document-id>
117
+ ```
118
+
119
+ ### Managing Images
120
+ ```bash
121
+ # Build and push custom images
122
+ nestbox image build
123
+
124
+ # List available images
125
+ nestbox image list
126
+
127
+ # Use custom image in agent
128
+ nestbox agent deploy --image <image-id>
129
+ ```
130
+
131
+ ## Configuration
132
+
133
+ The CLI stores configuration in `.nestboxrc` in your home directory. You can also use project-specific configuration by creating a `nestbox.config.json` file:
134
+
135
+ ```json
136
+ {
137
+ "project": "your-project-id",
138
+ "defaultCompute": "your-compute-id",
139
+ "environment": "staging"
140
+ }
141
+ ```
142
+
143
+ ## Help & Documentation
144
+
145
+ Get help for any command:
146
+ ```bash
147
+ nestbox --help
148
+ nestbox agent --help
149
+ nestbox project --help
150
+ ```
151
+
152
+ ## Next Steps
153
+
154
+ - Check out the [Nestbox AI developers site](https://developers.nestbox.ai) for detailed documentation
155
+ - Explore the example agents in the templates directory
156
+ - Join our developer community for support and best practices
157
+
158
+ Happy building! 🚀
@@ -2,6 +2,5 @@ export { createAgent, type CreateAgentOptions } from "./create";
2
2
  export { registerListCommand } from "./list";
3
3
  export { registerRemoveCommand } from "./remove";
4
4
  export { registerDeployCommand } from "./deploy";
5
- export { registerGenerateCommand } from "./generate";
6
5
  export { registerCreateFromYamlCommand } from "./createFromYaml";
7
6
  export { createApis, type ApiInstances } from "./apiUtils";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createApis = exports.registerCreateFromYamlCommand = exports.registerGenerateCommand = exports.registerDeployCommand = exports.registerRemoveCommand = exports.registerListCommand = exports.createAgent = void 0;
3
+ exports.createApis = exports.registerCreateFromYamlCommand = exports.registerDeployCommand = exports.registerRemoveCommand = exports.registerListCommand = exports.createAgent = void 0;
4
4
  // Main agent command exports
5
5
  var create_1 = require("./create");
6
6
  Object.defineProperty(exports, "createAgent", { enumerable: true, get: function () { return create_1.createAgent; } });
@@ -11,8 +11,6 @@ var remove_1 = require("./remove");
11
11
  Object.defineProperty(exports, "registerRemoveCommand", { enumerable: true, get: function () { return remove_1.registerRemoveCommand; } });
12
12
  var deploy_1 = require("./deploy");
13
13
  Object.defineProperty(exports, "registerDeployCommand", { enumerable: true, get: function () { return deploy_1.registerDeployCommand; } });
14
- var generate_1 = require("./generate");
15
- Object.defineProperty(exports, "registerGenerateCommand", { enumerable: true, get: function () { return generate_1.registerGenerateCommand; } });
16
14
  var createFromYaml_1 = require("./createFromYaml");
17
15
  Object.defineProperty(exports, "registerCreateFromYamlCommand", { enumerable: true, get: function () { return createFromYaml_1.registerCreateFromYamlCommand; } });
18
16
  // API utilities
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,mCAAgE;AAAvD,qGAAA,WAAW,OAAA;AAEpB,wDAAwD;AACxD,+BAA6C;AAApC,2GAAA,mBAAmB,OAAA;AAC5B,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA;AAC9B,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA;AAC9B,uCAAqD;AAA5C,mHAAA,uBAAuB,OAAA;AAChC,mDAAiE;AAAxD,+HAAA,6BAA6B,OAAA;AAEtC,gBAAgB;AAChB,uCAA2D;AAAlD,sGAAA,UAAU,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,mCAAgE;AAAvD,qGAAA,WAAW,OAAA;AAEpB,wDAAwD;AACxD,+BAA6C;AAApC,2GAAA,mBAAmB,OAAA;AAC5B,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA;AAC9B,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA;AAC9B,mDAAiE;AAAxD,+HAAA,6BAA6B,OAAA;AAEtC,gBAAgB;AAChB,uCAA2D;AAAlD,sGAAA,UAAU,OAAA"}
@@ -4,7 +4,6 @@ exports.registerAgentCommands = registerAgentCommands;
4
4
  const list_1 = require("./agent/list");
5
5
  const remove_1 = require("./agent/remove");
6
6
  const deploy_1 = require("./agent/deploy");
7
- const generate_1 = require("./agent/generate");
8
7
  const createFromYaml_1 = require("./agent/createFromYaml");
9
8
  /**
10
9
  * Register all agent-related commands
@@ -18,7 +17,6 @@ function registerAgentCommands(program) {
18
17
  (0, list_1.registerListCommand)(agentCommand);
19
18
  (0, remove_1.registerRemoveCommand)(agentCommand);
20
19
  (0, deploy_1.registerDeployCommand)(agentCommand);
21
- (0, generate_1.registerGenerateCommand)(agentCommand);
22
20
  (0, createFromYaml_1.registerCreateFromYamlCommand)(agentCommand);
23
21
  }
24
22
  //# sourceMappingURL=agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":";;AAUA,sDAYC;AArBD,uCAAmD;AACnD,2CAAuD;AACvD,2CAAuD;AACvD,+CAA2D;AAC3D,2DAAuE;AAEvE;;GAEG;AACH,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,gCAAgC;IAChC,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAExC,2BAA2B;IAC3B,IAAA,0BAAmB,EAAC,YAAY,CAAC,CAAC;IAClC,IAAA,8BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,8BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,kCAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,8CAA6B,EAAC,YAAY,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":";;AASA,sDAWC;AAnBD,uCAAmD;AACnD,2CAAuD;AACvD,2CAAuD;AACvD,2DAAuE;AAEvE;;GAEG;AACH,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,gCAAgC;IAChC,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAExC,2BAA2B;IAC3B,IAAA,0BAAmB,EAAC,YAAY,CAAC,CAAC;IAClC,IAAA,8BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,8BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,8CAA6B,EAAC,YAAY,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerProjectCommand(generateCommand: Command): void;
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.registerGenerateCommand = registerGenerateCommand;
15
+ exports.registerProjectCommand = registerProjectCommand;
16
16
  const chalk_1 = __importDefault(require("chalk"));
17
17
  const ora_1 = __importDefault(require("ora"));
18
18
  const fs_1 = __importDefault(require("fs"));
@@ -21,9 +21,9 @@ const plopGenerator_1 = require("../../utils/plopGenerator");
21
21
  const validation_1 = require("../../utils/validation");
22
22
  const inquirer_1 = __importDefault(require("inquirer"));
23
23
  const path_1 = __importDefault(require("path"));
24
- function registerGenerateCommand(agentCommand) {
25
- agentCommand
26
- .command("generate <folder>")
24
+ function registerProjectCommand(generateCommand) {
25
+ generateCommand
26
+ .command("project <folder>")
27
27
  .description("Generate a new project from templates")
28
28
  .option("--lang <language>", "Project language (ts|js)")
29
29
  .option("--template <type>", "Template type (agent|chatbot)")
@@ -105,7 +105,7 @@ function registerGenerateCommand(agentCommand) {
105
105
  };
106
106
  const mappedTemplateType = templateMapping[selectedTemplate] || selectedTemplate;
107
107
  // Check if template directory exists
108
- const templatePath = path_1.default.resolve(__dirname, `../../../templates/${mappedTemplateType}-${selectedLang}`);
108
+ const templatePath = path_1.default.resolve(__dirname, `../../../../templates/${mappedTemplateType}-${selectedLang}`);
109
109
  if (!fs_1.default.existsSync(templatePath)) {
110
110
  spinner.fail(`Template not found: ${templatePath}`);
111
111
  // Show available templates
@@ -149,4 +149,4 @@ function registerGenerateCommand(agentCommand) {
149
149
  }
150
150
  }));
151
151
  }
152
- //# sourceMappingURL=generate.js.map
152
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/generate/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Register all generate-related commands
4
+ */
5
+ export declare function registerGenerateCommands(program: Command): void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerGenerateCommands = registerGenerateCommands;
4
+ const project_1 = require("./generate/project");
5
+ /**
6
+ * Register all generate-related commands
7
+ */
8
+ function registerGenerateCommands(program) {
9
+ // Create the main generate command
10
+ const generateCommand = program
11
+ .command("generate")
12
+ .description("Generate new projects and components");
13
+ // Register all subcommands
14
+ (0, project_1.registerProjectCommand)(generateCommand);
15
+ }
16
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":";;AAMA,4DAQC;AAbD,gDAA4D;AAE5D;;GAEG;AACH,SAAgB,wBAAwB,CAAC,OAAgB;IACvD,mCAAmC;IACnC,MAAM,eAAe,GAAG,OAAO;SAC5B,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,sCAAsC,CAAC,CAAC;IAEvD,2BAA2B;IAC3B,IAAA,gCAAsB,EAAC,eAAe,CAAC,CAAC;AAC1C,CAAC"}
package/dist/index.js CHANGED
@@ -10,6 +10,7 @@ const compute_1 = require("./commands/compute");
10
10
  const document_1 = require("./commands/document");
11
11
  const image_1 = require("./commands/image");
12
12
  const agent_1 = require("./commands/agent");
13
+ const generate_1 = require("./commands/generate");
13
14
  // Read version from package.json
14
15
  const packageJson = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '../package.json'), 'utf8'));
15
16
  // Setup the CLI program
@@ -23,6 +24,7 @@ program
23
24
  (0, project_1.registerProjectCommands)(program);
24
25
  (0, compute_1.registerComputeProgram)(program);
25
26
  (0, agent_1.registerAgentCommands)(program);
27
+ (0, generate_1.registerGenerateCommands)(program);
26
28
  (0, document_1.registerDocumentCommands)(program);
27
29
  (0, image_1.registerImageCommands)(program);
28
30
  // Parse command line arguments
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,0CAAuD;AACvD,gDAA6D;AAC7D,gDAA4D;AAC5D,kDAA+D;AAC/D,4CAAyD;AACzD,4CAAyD;AAEzD,iCAAiC;AACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEzF,wBAAwB;AACxB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,0BAA0B;AAC1B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,iCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAE/B,+BAA+B;AAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,+CAA+C;AAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,0CAAuD;AACvD,gDAA6D;AAC7D,gDAA4D;AAC5D,kDAA+D;AAC/D,4CAAyD;AACzD,4CAAyD;AACzD,kDAA+D;AAE/D,iCAAiC;AACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEzF,wBAAwB;AACxB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,0BAA0B;AAC1B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,iCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAE/B,+BAA+B;AAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,+CAA+C;AAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestbox-ai/cli",
3
- "version": "1.0.34",
3
+ "version": "1.0.36",
4
4
  "description": "The cli tools that helps developers to build agents",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -5,7 +5,6 @@ export { createAgent, type CreateAgentOptions } from "./create";
5
5
  export { registerListCommand } from "./list";
6
6
  export { registerRemoveCommand } from "./remove";
7
7
  export { registerDeployCommand } from "./deploy";
8
- export { registerGenerateCommand } from "./generate";
9
8
  export { registerCreateFromYamlCommand } from "./createFromYaml";
10
9
 
11
10
  // API utilities
@@ -2,7 +2,6 @@ import { Command } from "commander";
2
2
  import { registerListCommand } from "./agent/list";
3
3
  import { registerRemoveCommand } from "./agent/remove";
4
4
  import { registerDeployCommand } from "./agent/deploy";
5
- import { registerGenerateCommand } from "./agent/generate";
6
5
  import { registerCreateFromYamlCommand } from "./agent/createFromYaml";
7
6
 
8
7
  /**
@@ -18,6 +17,5 @@ export function registerAgentCommands(program: Command): void {
18
17
  registerListCommand(agentCommand);
19
18
  registerRemoveCommand(agentCommand);
20
19
  registerDeployCommand(agentCommand);
21
- registerGenerateCommand(agentCommand);
22
20
  registerCreateFromYamlCommand(agentCommand);
23
21
  }
@@ -10,9 +10,9 @@ import { isValidFunctionName } from "../../utils/validation";
10
10
  import inquirer from "inquirer";
11
11
  import path from "path";
12
12
 
13
- export function registerGenerateCommand(agentCommand: Command): void {
14
- agentCommand
15
- .command("generate <folder>")
13
+ export function registerProjectCommand(generateCommand: Command): void {
14
+ generateCommand
15
+ .command("project <folder>")
16
16
  .description("Generate a new project from templates")
17
17
  .option("--lang <language>", "Project language (ts|js)")
18
18
  .option("--template <type>", "Template type (agent|chatbot)")
@@ -104,7 +104,7 @@ export function registerGenerateCommand(agentCommand: Command): void {
104
104
  const mappedTemplateType = templateMapping[selectedTemplate] || selectedTemplate;
105
105
 
106
106
  // Check if template directory exists
107
- const templatePath = path.resolve(__dirname, `../../../templates/${mappedTemplateType}-${selectedLang}`);
107
+ const templatePath = path.resolve(__dirname, `../../../../templates/${mappedTemplateType}-${selectedLang}`);
108
108
 
109
109
  if (!fs.existsSync(templatePath)) {
110
110
  spinner.fail(`Template not found: ${templatePath}`);
@@ -0,0 +1,15 @@
1
+ import { Command } from "commander";
2
+ import { registerProjectCommand } from "./generate/project";
3
+
4
+ /**
5
+ * Register all generate-related commands
6
+ */
7
+ export function registerGenerateCommands(program: Command): void {
8
+ // Create the main generate command
9
+ const generateCommand = program
10
+ .command("generate")
11
+ .description("Generate new projects and components");
12
+
13
+ // Register all subcommands
14
+ registerProjectCommand(generateCommand);
15
+ }
package/src/index.ts CHANGED
@@ -9,6 +9,7 @@ import { registerComputeProgram } from './commands/compute';
9
9
  import { registerDocumentCommands } from './commands/document';
10
10
  import { registerImageCommands } from './commands/image';
11
11
  import { registerAgentCommands } from './commands/agent';
12
+ import { registerGenerateCommands } from './commands/generate';
12
13
 
13
14
  // Read version from package.json
14
15
  const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf8'));
@@ -25,6 +26,7 @@ registerAuthCommands(program);
25
26
  registerProjectCommands(program);
26
27
  registerComputeProgram(program);
27
28
  registerAgentCommands(program);
29
+ registerGenerateCommands(program);
28
30
  registerDocumentCommands(program);
29
31
  registerImageCommands(program);
30
32
 
@@ -78,20 +78,6 @@ describe('Agent Commands', () => {
78
78
  expect(instanceOption).toBeDefined();
79
79
  });
80
80
 
81
- it('should register agent generate subcommand', () => {
82
- registerAgentCommands(program);
83
-
84
- const agentCommand = program.commands.find(cmd => cmd.name() === 'agent');
85
- const subCommands = agentCommand?.commands || [];
86
- const generateCommand = subCommands.find(cmd => cmd.name() === 'generate');
87
-
88
- expect(generateCommand).toBeDefined();
89
- expect(generateCommand?.description()).toBe('Generate a new project from templates');
90
-
91
- // Check that folder is an argument (it's in command name: "generate <folder>")
92
- expect(generateCommand?.name()).toBe('generate');
93
- });
94
-
95
81
  it('should register agent create subcommand', () => {
96
82
  registerAgentCommands(program);
97
83
 
@@ -121,9 +107,8 @@ describe('Agent Commands', () => {
121
107
  expect(subCommandNames).toContain('list');
122
108
  expect(subCommandNames).toContain('remove');
123
109
  expect(subCommandNames).toContain('deploy');
124
- expect(subCommandNames).toContain('generate');
125
110
  expect(subCommandNames).toContain('create');
126
- expect(subCommandNames).toHaveLength(5);
111
+ expect(subCommandNames).toHaveLength(4);
127
112
  });
128
113
 
129
114
  it('should have proper action functions for all subcommands', () => {
@@ -0,0 +1,67 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { Command } from 'commander';
3
+ import { registerGenerateCommands } from '../src/commands/generate';
4
+
5
+ describe('Generate Commands', () => {
6
+ let program: Command;
7
+
8
+ beforeEach(() => {
9
+ program = new Command();
10
+ vi.clearAllMocks();
11
+ });
12
+
13
+ describe('registerGenerateCommands', () => {
14
+ it('should register generate command group', () => {
15
+ registerGenerateCommands(program);
16
+
17
+ const commands = program.commands;
18
+ const generateCommand = commands.find(cmd => cmd.name() === 'generate');
19
+
20
+ expect(generateCommand).toBeDefined();
21
+ expect(generateCommand?.description()).toBe('Generate new projects and components');
22
+ });
23
+
24
+ it('should register generate project subcommand', () => {
25
+ registerGenerateCommands(program);
26
+
27
+ const generateCommand = program.commands.find(cmd => cmd.name() === 'generate');
28
+ const subCommands = generateCommand?.commands || [];
29
+ const projectCommand = subCommands.find(cmd => cmd.name() === 'project');
30
+
31
+ expect(projectCommand).toBeDefined();
32
+ expect(projectCommand?.description()).toBe('Generate a new project from templates');
33
+
34
+ // Check that folder is an argument (it's in command name: "project <folder>")
35
+ expect(projectCommand?.name()).toBe('project');
36
+
37
+ // Check options
38
+ const options = projectCommand?.options || [];
39
+ const langOption = options.find(opt => opt.long === '--lang');
40
+ const templateOption = options.find(opt => opt.long === '--template');
41
+ const nameOption = options.find(opt => opt.long === '--name');
42
+ const projectOption = options.find(opt => opt.long === '--project');
43
+
44
+ expect(langOption).toBeDefined();
45
+ expect(langOption?.description).toBe('Project language (ts|js)');
46
+
47
+ expect(templateOption).toBeDefined();
48
+ expect(templateOption?.description).toBe('Template type (agent|chatbot)');
49
+
50
+ expect(nameOption).toBeDefined();
51
+ expect(nameOption?.description).toBe('Agent/Chatbot name (must be a valid function name)');
52
+
53
+ expect(projectOption).toBeDefined();
54
+ expect(projectOption?.description).toBe('Project ID');
55
+ });
56
+
57
+ it('should contain expected subcommands', () => {
58
+ registerGenerateCommands(program);
59
+
60
+ const generateCommand = program.commands.find(cmd => cmd.name() === 'generate');
61
+ const subCommands = generateCommand?.commands || [];
62
+ const subCommandNames = subCommands.map(cmd => cmd.name());
63
+
64
+ expect(subCommandNames).toContain('project');
65
+ });
66
+ });
67
+ });
@@ -1,2 +0,0 @@
1
- import { Command } from "commander";
2
- export declare function registerGenerateCommand(agentCommand: Command): void;
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/agent/generate.ts"],"names":[],"mappings":"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"}