@nestbox-ai/cli 1.0.6 → 1.0.8

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,340 @@
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.registerDocumentCommands = registerDocumentCommands;
16
+ const chalk_1 = __importDefault(require("chalk"));
17
+ const ora_1 = __importDefault(require("ora"));
18
+ const auth_1 = require("../utils/auth");
19
+ const admin_1 = require("@nestbox-ai/admin");
20
+ const project_1 = require("../utils/project");
21
+ /**
22
+ * Executes an async command with proper error handling and spinner feedback
23
+ */
24
+ function executeCommand(description, command, successMessage) {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ var _a, _b;
27
+ const spinner = (0, ora_1.default)(description).start();
28
+ try {
29
+ const result = yield command();
30
+ spinner.succeed(successMessage);
31
+ return result;
32
+ }
33
+ catch (error) {
34
+ spinner.fail('Operation failed');
35
+ if ((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message) {
36
+ console.error(chalk_1.default.red('API Error:'), error.response.data.message);
37
+ }
38
+ else {
39
+ console.error(chalk_1.default.red('Error:'), error.message || 'Unknown error');
40
+ }
41
+ throw error;
42
+ }
43
+ });
44
+ }
45
+ function registerDocumentCommands(program) {
46
+ const authToken = (0, auth_1.getAuthToken)();
47
+ if (!authToken) {
48
+ console.error(chalk_1.default.red('No authentication token found. Please login first.'));
49
+ return;
50
+ }
51
+ const configuration = new admin_1.Configuration({
52
+ basePath: authToken.serverUrl,
53
+ baseOptions: {
54
+ headers: {
55
+ Authorization: authToken.token,
56
+ },
57
+ },
58
+ });
59
+ const documentsApi = new admin_1.DocumentsApi(configuration);
60
+ const projectsApi = new admin_1.ProjectsApi(configuration);
61
+ const documentCommand = program.command('document').description('Manage Nestbox documents');
62
+ const docCommand = documentCommand.command('doc').description('Manage individual documents');
63
+ const collectionCommand = documentCommand.command('collection').description('Manage document collections');
64
+ // Add shared options to parent command that will be inherited by all subcommands
65
+ const addSharedOptions = (cmd) => cmd
66
+ .requiredOption('--instance <instanceId>', 'Instance ID')
67
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)');
68
+ // LIST command
69
+ const listCmd = collectionCommand
70
+ .command('list')
71
+ .description('List document collections for a specific instance');
72
+ addSharedOptions(listCmd);
73
+ listCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
74
+ try {
75
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
76
+ const collections = yield executeCommand(`Listing document collections for instance ${options.instance} in project ${project.name}...`, () => __awaiter(this, void 0, void 0, function* () {
77
+ var _a;
78
+ const response = yield documentsApi.documentControllerGetAllCollections(project.id, options.instance);
79
+ return Array.isArray((_a = response.data) === null || _a === void 0 ? void 0 : _a.collections) ? response.data.collections : [];
80
+ }), 'Successfully retrieved document collections');
81
+ if (collections.length === 0) {
82
+ console.log(chalk_1.default.yellow(`No document collections found for instance ${options.instance} in project ${project.name}`));
83
+ return;
84
+ }
85
+ console.log(chalk_1.default.blue(`\nDocument collections for instance ${options.instance} in project ${project.name}:\n`));
86
+ collections.forEach((collection) => {
87
+ const name = typeof collection === 'string' ? collection : (collection === null || collection === void 0 ? void 0 : collection.name) || 'Unnamed Collection';
88
+ console.log(chalk_1.default.white.bold(name));
89
+ });
90
+ }
91
+ catch (error) {
92
+ // Error already handled by executeCommand
93
+ }
94
+ }));
95
+ // CREATE command
96
+ const createCmd = collectionCommand
97
+ .command('create')
98
+ .description('Create a new document collection for a specific instance')
99
+ .requiredOption('--name <name>', 'Name of the document collection')
100
+ .option('--metadata <json>', 'Metadata for the document collection in JSON format');
101
+ addSharedOptions(createCmd);
102
+ createCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
103
+ try {
104
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
105
+ yield executeCommand(`Creating document collection "${options.name}" for instance ${options.instance} in project ${project.name}...`, () => __awaiter(this, void 0, void 0, function* () {
106
+ const metadataObj = options.metadata ? JSON.parse(options.metadata) : {};
107
+ yield documentsApi.documentControllerCreateCollection(project.id, options.instance, {
108
+ name: options.name,
109
+ metadata: metadataObj,
110
+ });
111
+ }), 'Successfully created document collection');
112
+ console.log(chalk_1.default.green(`Document collection "${options.name}" created successfully.`));
113
+ }
114
+ catch (error) {
115
+ // Error already handled by executeCommand
116
+ }
117
+ }));
118
+ // GET command
119
+ const getCmd = collectionCommand
120
+ .command('get')
121
+ .description('Get details of a specific document collection for a specific instance')
122
+ .requiredOption('--collection <collectionId>', 'ID of the document collection to get');
123
+ addSharedOptions(getCmd);
124
+ getCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
125
+ try {
126
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
127
+ const collectionDetails = yield executeCommand(`Getting document collection "${options.collection}" for instance ${options.instance} in project ${project.name}...`, () => __awaiter(this, void 0, void 0, function* () {
128
+ const response = yield documentsApi.documentControllerGetCollectionInfo(project.id, options.instance, options.collection);
129
+ return response.data;
130
+ }), 'Successfully retrieved document collection');
131
+ console.log(chalk_1.default.blue(`\nDocument collection details for instance ${options.instance} in project ${project.name}:\n`));
132
+ console.log(JSON.stringify(collectionDetails, null, 2));
133
+ }
134
+ catch (error) {
135
+ // Error already handled by executeCommand
136
+ }
137
+ }));
138
+ // DELETE command
139
+ const deleteCmd = collectionCommand
140
+ .command('delete')
141
+ .description('Delete a document collection for a specific instance')
142
+ .requiredOption('--collection <collectionId>', 'ID of the document collection to delete');
143
+ addSharedOptions(deleteCmd);
144
+ deleteCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
145
+ try {
146
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
147
+ yield executeCommand(`Deleting document collection "${options.collection}" for instance ${options.instance} in project ${project.name}...`, () => __awaiter(this, void 0, void 0, function* () {
148
+ yield documentsApi.documentControllerDeleteCollection(project.id, options.instance, options.collection);
149
+ }), 'Successfully deleted document collection');
150
+ console.log(chalk_1.default.green(`Document collection "${options.collection}" deleted successfully.`));
151
+ }
152
+ catch (error) {
153
+ // Error already handled by executeCommand
154
+ }
155
+ }));
156
+ // UPDATE command
157
+ const updateCmd = collectionCommand
158
+ .command('update')
159
+ .description('Update a document collection for a specific instance')
160
+ .requiredOption('--collection <collectionId>', 'ID of the document collection to update')
161
+ .option('--name <name>', 'New name of the document collection')
162
+ .option('--metadata <json>', 'New metadata for the document collection in JSON format');
163
+ addSharedOptions(updateCmd);
164
+ updateCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
165
+ try {
166
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
167
+ yield executeCommand(`Updating document collection "${options.collection}" for instance ${options.instance} in project ${project.name}...`, () => __awaiter(this, void 0, void 0, function* () {
168
+ const metadataObj = options.metadata ? JSON.parse(options.metadata) : {};
169
+ yield documentsApi.documentControllerUpdateCollection(project.id, options.instance, options.collection, {
170
+ name: options.name,
171
+ metadata: metadataObj,
172
+ });
173
+ }), 'Successfully updated document collection');
174
+ console.log(chalk_1.default.green(`Document collection "${options.collection}" updated successfully.`));
175
+ }
176
+ catch (error) {
177
+ // Error already handled by executeCommand
178
+ }
179
+ }));
180
+ const addDocCmd = docCommand
181
+ .command('add')
182
+ .description('Add a new document to a collection')
183
+ .requiredOption('--instance <instanceId>', 'Instance ID')
184
+ .requiredOption('--collection <collectionId>', 'Collection ID')
185
+ .requiredOption('--id <id>', 'Document ID')
186
+ .requiredOption('--document <json>', 'Document content in JSON format')
187
+ .option('--metadata <json>', 'Document metadata in JSON format (optional)')
188
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)');
189
+ addDocCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
190
+ try {
191
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
192
+ yield executeCommand(`Adding document to collection "${options.collection}" in instance ${options.instance}...`, () => __awaiter(this, void 0, void 0, function* () {
193
+ const documentContent = JSON.parse(options.document);
194
+ const metadata = options.metadata ? JSON.parse(options.metadata) : {};
195
+ yield documentsApi.documentControllerAddDocToCollection(project.id, options.instance, options.collection, {
196
+ id: options.id,
197
+ document: JSON.stringify(documentContent),
198
+ metadata: metadata
199
+ });
200
+ }), 'Successfully added document to collection');
201
+ console.log(chalk_1.default.green(`Document with ID "${options.id}" added successfully to collection "${options.collection}".`));
202
+ }
203
+ catch (error) {
204
+ // Error already handled by executeCommand
205
+ }
206
+ }));
207
+ const getDocCmd = docCommand
208
+ .command('get')
209
+ .description('Get a document from a collection')
210
+ .requiredOption('--instance <instanceId>', 'Instance ID')
211
+ .requiredOption('--collection <collectionId>', 'Collection ID')
212
+ .requiredOption('--doc <docId>', 'Document ID')
213
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)');
214
+ getDocCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
215
+ try {
216
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
217
+ const document = yield executeCommand(`Getting document "${options.doc}" from collection "${options.collection}" in instance ${options.instance}...`, () => __awaiter(this, void 0, void 0, function* () {
218
+ const response = yield documentsApi.documentControllerGetDocById(project.id, options.instance, options.collection, options.doc);
219
+ return response.data;
220
+ }), 'Successfully retrieved document');
221
+ console.log(chalk_1.default.blue(`\nDocument details for ID "${options.doc}" in collection "${options.collection}":\n`));
222
+ console.log(JSON.stringify(document, null, 2));
223
+ }
224
+ catch (error) {
225
+ // Error already handled by executeCommand
226
+ }
227
+ }));
228
+ const deleteDocCmd = docCommand
229
+ .command('delete')
230
+ .description('Delete a document from a collection')
231
+ .requiredOption('--instance <instanceId>', 'Instance ID')
232
+ .requiredOption('--collection <collectionId>', 'Collection ID')
233
+ .requiredOption('--doc <docId>', 'Document ID')
234
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)');
235
+ deleteDocCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
236
+ try {
237
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
238
+ yield executeCommand(`Deleting document "${options.doc}" from collection "${options.collection}" in instance ${options.instance}...`, () => __awaiter(this, void 0, void 0, function* () {
239
+ yield documentsApi.documentControllerDeleteDocById(project.id, options.instance, options.collection, options.doc);
240
+ }), 'Successfully deleted document');
241
+ console.log(chalk_1.default.green(`Document with ID "${options.doc}" deleted successfully from collection "${options.collection}".`));
242
+ }
243
+ catch (error) {
244
+ // Error already handled by executeCommand
245
+ }
246
+ }));
247
+ const updateDocCmd = docCommand
248
+ .command('update')
249
+ .description('Update a document in a collection')
250
+ .requiredOption('--instance <instanceId>', 'Instance ID')
251
+ .requiredOption('--collection <collectionId>', 'Collection ID')
252
+ .requiredOption('--doc <docId>', 'Document ID')
253
+ .requiredOption('--document <string>', 'Updated document content as a string')
254
+ .option('--metadata <json>', 'Updated document metadata in JSON format (optional)')
255
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)');
256
+ updateDocCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
257
+ try {
258
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
259
+ yield executeCommand(`Updating document "${options.doc}" in collection "${options.collection}" in instance ${options.instance}...`, () => __awaiter(this, void 0, void 0, function* () {
260
+ const documentContent = options.document;
261
+ const metadata = options.metadata ? JSON.parse(options.metadata) : {};
262
+ yield documentsApi.documentControllerUpdateDoc(project.id, options.instance, options.collection, options.doc, {
263
+ document: documentContent,
264
+ metadata: metadata
265
+ });
266
+ }), 'Successfully updated document');
267
+ console.log(chalk_1.default.green(`Document with ID "${options.doc}" updated successfully in collection "${options.collection}".`));
268
+ }
269
+ catch (error) {
270
+ // Error already handled by executeCommand
271
+ }
272
+ }));
273
+ const uploadFileCmd = docCommand
274
+ .command('upload-file')
275
+ .description('Add documents by file chunking')
276
+ .requiredOption('--instance <instanceId>', 'Instance ID')
277
+ .requiredOption('--collection <collectionId>', 'Collection ID')
278
+ .requiredOption('--file <path>', 'Path to the file to upload')
279
+ .option('--type <fileType>', 'Type of the file (e.g., pdf, txt, doc)')
280
+ .option('--options <json>', 'Additional options for file processing in JSON format')
281
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)');
282
+ uploadFileCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
283
+ try {
284
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
285
+ yield executeCommand(`Processing file "${options.file}" for collection "${options.collection}" in instance ${options.instance}...`, () => __awaiter(this, void 0, void 0, function* () {
286
+ const requestData = {
287
+ type: options.type,
288
+ url: options.file,
289
+ options: options.options ? JSON.parse(options.options) : {},
290
+ };
291
+ yield documentsApi.documentControllerAddDocToCollectionFromFile(project.id, options.instance, options.collection, requestData);
292
+ }), 'Successfully processed file for document chunking');
293
+ console.log(chalk_1.default.green(`File "${options.file}" processed successfully for collection "${options.collection}".`));
294
+ }
295
+ catch (error) {
296
+ // Error already handled by executeCommand
297
+ }
298
+ }));
299
+ const searchCmd = docCommand
300
+ .command('search')
301
+ .description('Search for documents in a collection')
302
+ .requiredOption('--instance <instanceId>', 'Instance ID')
303
+ .requiredOption('--collection <collectionId>', 'Collection ID')
304
+ .requiredOption('--query <query>', 'Search query')
305
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)')
306
+ .option('--filter <json>', 'Filter criteria as JSON string');
307
+ searchCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
308
+ try {
309
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
310
+ // Build the request body
311
+ const requestBody = {
312
+ query: options.query,
313
+ params: {},
314
+ filter: {},
315
+ include: ["embedding"]
316
+ };
317
+ // Parse filter JSON if provided
318
+ if (options.filter) {
319
+ try {
320
+ requestBody.filter = JSON.parse(options.filter);
321
+ }
322
+ catch (e) {
323
+ console.error(chalk_1.default.red('Error parsing filter JSON:'), e.message);
324
+ return;
325
+ }
326
+ }
327
+ console.log("REQUEST BODY", requestBody);
328
+ const results = yield executeCommand(`Searching for documents in collection "${options.collection}" in instance ${options.instance}...`, () => __awaiter(this, void 0, void 0, function* () {
329
+ const response = yield documentsApi.documentControllerSimilaritySearch(project.id, options.instance, options.collection, requestBody);
330
+ return response.data;
331
+ }), 'Successfully retrieved search results');
332
+ console.log(chalk_1.default.blue(`\nSearch results for query "${options.query}" in collection "${options.collection}":\n`));
333
+ console.log(JSON.stringify(results, null, 2));
334
+ }
335
+ catch (error) {
336
+ // Error already handled by executeCommand
337
+ }
338
+ }));
339
+ }
340
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/commands/document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerImageCommands(program: Command): void;
@@ -0,0 +1,147 @@
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.registerImageCommands = registerImageCommands;
16
+ const chalk_1 = __importDefault(require("chalk"));
17
+ const ora_1 = __importDefault(require("ora"));
18
+ const cli_table3_1 = __importDefault(require("cli-table3"));
19
+ const auth_1 = require("../utils/auth");
20
+ const admin_1 = require("@nestbox-ai/admin");
21
+ const project_1 = require("../utils/project");
22
+ /**
23
+ * Executes an async command with proper error handling and spinner feedback
24
+ */
25
+ function executeCommand(description, command, successMessage) {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ var _a, _b;
28
+ const spinner = (0, ora_1.default)(description).start();
29
+ try {
30
+ const result = yield command();
31
+ spinner.succeed(successMessage);
32
+ return result;
33
+ }
34
+ catch (error) {
35
+ spinner.fail('Operation failed');
36
+ if ((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message) {
37
+ console.error(chalk_1.default.red('API Error:'), error.response.data.message);
38
+ }
39
+ else {
40
+ console.error(chalk_1.default.red('Error:'), error.message || 'Unknown error');
41
+ }
42
+ throw error;
43
+ }
44
+ });
45
+ }
46
+ function registerImageCommands(program) {
47
+ const authToken = (0, auth_1.getAuthToken)();
48
+ if (!authToken) {
49
+ console.error(chalk_1.default.red('No authentication token found. Please login first.'));
50
+ return;
51
+ }
52
+ const configuration = new admin_1.Configuration({
53
+ basePath: authToken.serverUrl,
54
+ baseOptions: {
55
+ headers: {
56
+ Authorization: authToken.token,
57
+ },
58
+ },
59
+ });
60
+ const miscellaneousApi = new admin_1.MiscellaneousApi(configuration);
61
+ const projectsApi = new admin_1.ProjectsApi(configuration);
62
+ const imageCommand = program.command('image').description('Manage Nestbox images');
63
+ // LIST command
64
+ const listCmd = imageCommand
65
+ .command('list')
66
+ .description('List images for a project')
67
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)');
68
+ listCmd.action((options) => __awaiter(this, void 0, void 0, function* () {
69
+ try {
70
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
71
+ const images = yield executeCommand(`Listing images for project ${project.name}...`, () => __awaiter(this, void 0, void 0, function* () {
72
+ const response = yield miscellaneousApi.miscellaneousControllerGetMachineInstanceByImageId(project.id);
73
+ return response.data;
74
+ }), 'Successfully retrieved images');
75
+ if (!images || images.length === 0) {
76
+ console.log(chalk_1.default.yellow('No images found for this project.'));
77
+ return;
78
+ }
79
+ // Create a table for displaying the image data
80
+ const table = new cli_table3_1.default({
81
+ head: [
82
+ chalk_1.default.white.bold('ID'),
83
+ chalk_1.default.white.bold('Name'),
84
+ chalk_1.default.white.bold('Machine Type'),
85
+ chalk_1.default.white.bold('Status'),
86
+ chalk_1.default.white.bold('Region'),
87
+ chalk_1.default.white.bold('API Key'),
88
+ chalk_1.default.white.bold('Internal IP')
89
+ ],
90
+ style: {
91
+ head: [], // Disable the default styling
92
+ border: []
93
+ }
94
+ });
95
+ // Status mappings
96
+ const statusMappings = {
97
+ 'Job Scheduled': 'Scheduled',
98
+ 'Job Executed': 'Ready',
99
+ 'Job in Progress': 'Initializing',
100
+ 'Job Failed': 'Failed',
101
+ 'Deleting': 'Deleting',
102
+ };
103
+ // Add rows to the table
104
+ images.forEach((image) => {
105
+ // Map the status if a mapping exists
106
+ const originalStatus = image.runningStatus || 'unknown';
107
+ const displayStatus = statusMappings[originalStatus] || originalStatus;
108
+ // Color the status based on its mapped value
109
+ let statusColor;
110
+ switch (displayStatus.toLowerCase()) {
111
+ case 'ready':
112
+ statusColor = chalk_1.default.green(displayStatus);
113
+ break;
114
+ case 'failed':
115
+ statusColor = chalk_1.default.red(displayStatus);
116
+ break;
117
+ case 'initializing':
118
+ statusColor = chalk_1.default.yellow(displayStatus);
119
+ break;
120
+ case 'scheduled':
121
+ statusColor = chalk_1.default.blue(displayStatus);
122
+ break;
123
+ case 'deleting':
124
+ statusColor = chalk_1.default.red(displayStatus);
125
+ break;
126
+ default:
127
+ statusColor = chalk_1.default.gray(displayStatus);
128
+ }
129
+ table.push([
130
+ image.id || 'N/A',
131
+ image.instanceName || 'N/A',
132
+ image.machineTitle || 'N/A',
133
+ statusColor,
134
+ image.region || 'N/A',
135
+ image.instanceApiKey || 'N/A',
136
+ image.internalIP || 'N/A'
137
+ ]);
138
+ });
139
+ // Display the table
140
+ console.log(table.toString());
141
+ }
142
+ catch (error) {
143
+ // Error already handled by executeCommand
144
+ }
145
+ }));
146
+ }
147
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/commands/image.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,6 +5,9 @@ const commander_1 = require("commander");
5
5
  const auth_1 = require("./commands/auth");
6
6
  const projects_1 = require("./commands/projects");
7
7
  const compute_1 = require("./commands/compute");
8
+ const agent_1 = require("./commands/agent");
9
+ const document_1 = require("./commands/document");
10
+ const image_1 = require("./commands/image");
8
11
  // Setup the CLI program
9
12
  const program = new commander_1.Command();
10
13
  program
@@ -15,6 +18,9 @@ program
15
18
  (0, auth_1.registerAuthCommands)(program);
16
19
  (0, projects_1.registerProjectCommands)(program);
17
20
  (0, compute_1.registerComputeProgram)(program);
21
+ (0, agent_1.registerAgentCommands)(program);
22
+ (0, document_1.registerDocumentCommands)(program);
23
+ (0, image_1.registerImageCommands)(program);
18
24
  // Parse command line arguments
19
25
  program.parse(process.argv);
20
26
  // Only show help if no arguments were provided
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,0CAAuD;AACvD,kDAA8D;AAC9D,gDAA4D;AAE5D,wBAAwB;AACxB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,0BAA0B;AAC1B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAEhC,+BAA+B;AAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5B,+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":";;;AACA,yCAAoC;AACpC,0CAAuD;AACvD,kDAA8D;AAC9D,gDAA4D;AAC5D,4CAAyD;AACzD,kDAA+D;AAC/D,4CAAyD;AAEzD,wBAAwB;AACxB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,0BAA0B;AAC1B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,kCAAuB,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;AAC5B,+CAA+C;AAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function findProjectRoot(startDir?: string): Promise<string>;
2
+ export declare function loadNestboxConfig(projectRoot: any): any;
3
+ export declare function isTypeScriptProject(directoryPath: any): boolean;
4
+ export declare function runPredeployScripts(scripts: any, projectRoot: any): Promise<void>;
5
+ export declare function createZipFromDirectory(dirPath: any, excludePatterns?: string[]): string;