@edgible-team/cli 1.2.19 → 1.2.20

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 (42) hide show
  1. package/dist/commands/agent/install.d.ts.map +1 -1
  2. package/dist/commands/agent/install.js +23 -4
  3. package/dist/commands/agent/uninstall.d.ts.map +1 -1
  4. package/dist/commands/agent/uninstall.js +1 -2
  5. package/dist/commands/ai/setup.d.ts.map +1 -1
  6. package/dist/commands/ai/setup.js +1 -2
  7. package/dist/commands/application/events.d.ts +6 -0
  8. package/dist/commands/application/events.d.ts.map +1 -0
  9. package/dist/commands/application/events.js +60 -0
  10. package/dist/commands/application/list.d.ts.map +1 -1
  11. package/dist/commands/application/list.js +2 -0
  12. package/dist/commands/application/update.d.ts +1 -0
  13. package/dist/commands/application/update.d.ts.map +1 -1
  14. package/dist/commands/application/update.js +6 -1
  15. package/dist/commands/application.d.ts.map +1 -1
  16. package/dist/commands/application.js +14 -0
  17. package/dist/commands/auth.js +1 -1
  18. package/dist/commands/base/command-wrapper.js +1 -1
  19. package/dist/commands/config.js +2 -2
  20. package/dist/commands/debug.d.ts.map +1 -1
  21. package/dist/commands/debug.js +1 -2
  22. package/dist/commands/stack/validate.d.ts +5 -0
  23. package/dist/commands/stack/validate.d.ts.map +1 -1
  24. package/dist/commands/stack/validate.js +15 -4
  25. package/dist/commands/utils/config-validator.js +1 -1
  26. package/dist/detection/WorkloadDetector.d.ts +3 -1
  27. package/dist/detection/WorkloadDetector.d.ts.map +1 -1
  28. package/dist/scripts/postinstall.js +2 -2
  29. package/dist/services/LocalAgentManager.js +1 -1
  30. package/dist/services/application/ApplicationService.d.ts +2 -0
  31. package/dist/services/application/ApplicationService.d.ts.map +1 -1
  32. package/dist/services/application/ApplicationService.js +19 -2
  33. package/dist/services/device/DeviceService.js +1 -1
  34. package/dist/services/edgible.js +1 -1
  35. package/dist/services/stack/DependencyGraphManager.d.ts.map +1 -1
  36. package/dist/services/stack/DependencyGraphManager.js +3 -8
  37. package/dist/services/stack/StackService.d.ts.map +1 -1
  38. package/dist/services/stack/StackService.js +19 -8
  39. package/dist/types/validation/schemas.d.ts +42 -2
  40. package/dist/types/validation/schemas.d.ts.map +1 -1
  41. package/dist/types/validation/schemas.js +9 -0
  42. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/install.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAU9D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,EAChL,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA4bf"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/install.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAU9D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,EAChL,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAwdf"}
@@ -48,15 +48,34 @@ const PathResolver_1 = require("../../utils/PathResolver");
48
48
  const urls_1 = require("../../utils/urls");
49
49
  const sudo_checker_1 = require("../../utils/sudo-checker");
50
50
  async function handleAgentInstall(options, logger, configManager, edgibleService, authService, agentManager) {
51
- if (!(0, sudo_checker_1.checkSudoPermissions)()) {
52
- console.log(chalk_1.default.redBright("Please run this command with administrator priviledges (i.e. sudo)"));
53
- return;
51
+ const noInteractive = options.nonInteractive === true;
52
+ const platformEarly = PlatformDetector_1.PlatformDetector.getPlatform();
53
+ if ((platformEarly === 'linux' || platformEarly === 'darwin') &&
54
+ !(0, sudo_checker_1.checkSudoPermissions)()) {
55
+ console.log(chalk_1.default.yellow('⚠ Warning: Sudo/root was not detected. Agent installation often needs elevated privileges and may fail without them.'));
56
+ if (noInteractive) {
57
+ console.log(chalk_1.default.yellow('Non-interactive: continuing without elevated privileges.\n'));
58
+ }
59
+ else {
60
+ const { proceedWithoutSudo } = await inquirer_1.default.prompt([
61
+ {
62
+ type: 'confirm',
63
+ name: 'proceedWithoutSudo',
64
+ message: 'Continue installation without sudo/root?',
65
+ default: false,
66
+ },
67
+ ]);
68
+ if (!proceedWithoutSudo) {
69
+ console.log(chalk_1.default.gray('Installation cancelled.'));
70
+ return;
71
+ }
72
+ console.log('');
73
+ }
54
74
  }
55
75
  (0, config_validator_1.validateConfig)(configManager, {
56
76
  requireAuth: true,
57
77
  requireOrganization: true,
58
78
  });
59
- const noInteractive = options.nonInteractive === true;
60
79
  const deviceIdFromEnv = process.env['EDGIBLE_DEVICE_ID'];
61
80
  const devicePasswordFromEnv = process.env['EDGIBLE_DEVICE_PASSWORD'];
62
81
  console.log(chalk_1.default.blue.bold('\n═══════════════════════════════════════════'));
@@ -1 +1 @@
1
- {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/uninstall.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACnD,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CA6If"}
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/uninstall.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACnD,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgJf"}
@@ -46,8 +46,7 @@ const PathResolver_1 = require("../../utils/PathResolver");
46
46
  const sudo_checker_1 = require("../../utils/sudo-checker");
47
47
  async function handleAgentUninstall(options, logger, configManager) {
48
48
  if (!(0, sudo_checker_1.checkSudoPermissions)()) {
49
- console.log(chalk_1.default.redBright("Please run this command with administrator priviledges (i.e. sudo)"));
50
- return;
49
+ console.log(chalk_1.default.yellow('⚠ Warning: Not running as root/sudo. Agent uninstallation may fail or behave incorrectly without proper privileges.'));
51
50
  }
52
51
  const config = configManager.getConfig();
53
52
  if (!config.agentInstallationType) {
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/ai/setup.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFhB"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/ai/setup.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFhB"}
@@ -11,8 +11,7 @@ const sudo_checker_1 = require("../../utils/sudo-checker");
11
11
  const helpers_1 = require("./helpers");
12
12
  async function handleAiSetup(options) {
13
13
  if (!(0, sudo_checker_1.checkSudoPermissions)()) {
14
- console.log(chalk_1.default.redBright("Please run this command with administrator priviledges (i.e. sudo)"));
15
- return;
14
+ console.log(chalk_1.default.yellow('⚠ Warning: Not running as root/sudo. AI setup (Ollama, services) may fail without proper privileges.'));
16
15
  }
17
16
  instances_1.logger.info('Setting up Ollama AI service', { model: options.model, autoInstall: options.autoInstall });
18
17
  console.log(chalk_1.default.blue('\n🤖 Ollama AI Setup'));
@@ -0,0 +1,6 @@
1
+ export declare function handleApplicationEvents(options: {
2
+ appId?: string;
3
+ limit?: string;
4
+ json?: boolean;
5
+ }): Promise<void>;
6
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/commands/application/events.ts"],"names":[],"mappings":"AAgBA,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ChB"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleApplicationEvents = handleApplicationEvents;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const instances_1 = require("../../services/instances");
9
+ const config_validator_1 = require("../utils/config-validator");
10
+ const application_prompt_1 = require("../utils/application-prompt");
11
+ function formatTimestamp(ms) {
12
+ return new Date(ms).toISOString().replace('T', ' ').replace('Z', ' UTC');
13
+ }
14
+ function eventTypeColor(eventType) {
15
+ if (eventType.includes('error') || eventType.includes('stopped'))
16
+ return chalk_1.default.red;
17
+ if (eventType.includes('started') || eventType.includes('ready'))
18
+ return chalk_1.default.green;
19
+ if (eventType.includes('deploying') || eventType.includes('pending'))
20
+ return chalk_1.default.yellow;
21
+ return chalk_1.default.white;
22
+ }
23
+ async function handleApplicationEvents(options) {
24
+ (0, config_validator_1.validateConfig)(instances_1.configManager, {
25
+ requireAuth: true,
26
+ requireOrganization: true,
27
+ });
28
+ const appId = await (0, application_prompt_1.getApplicationId)(instances_1.applicationService, options.appId, {
29
+ message: 'Select application to view events for:',
30
+ required: true,
31
+ });
32
+ if (!appId) {
33
+ throw new Error('Application ID is required');
34
+ }
35
+ const limit = options.limit ? parseInt(options.limit, 10) : 50;
36
+ const events = await instances_1.applicationService.getApplicationLifecycleEvents(appId, limit);
37
+ if (options.json) {
38
+ console.log(JSON.stringify(events, null, 2));
39
+ return;
40
+ }
41
+ if (events.length === 0) {
42
+ console.log(chalk_1.default.yellow('No lifecycle events found for this application'));
43
+ return;
44
+ }
45
+ console.log(chalk_1.default.bold(`Lifecycle events for application ${appId}`) + chalk_1.default.gray(` (${events.length} events)\n`));
46
+ for (const event of events) {
47
+ const color = eventTypeColor(event.eventType ?? '');
48
+ const time = chalk_1.default.gray(formatTimestamp(event.timestamp));
49
+ const source = chalk_1.default.gray(`[${event.source ?? 'unknown'}]`);
50
+ const action = color(event.eventAction ?? event.eventType);
51
+ console.log(`${time} ${source} ${action}`);
52
+ if (event.message) {
53
+ console.log(` ${event.message}`);
54
+ }
55
+ if (event.metadata && Object.keys(event.metadata).length > 0) {
56
+ console.log(chalk_1.default.gray(` ${JSON.stringify(event.metadata)}`));
57
+ }
58
+ }
59
+ }
60
+ //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/application/list.ts"],"names":[],"mappings":"AAKA,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCtF"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/application/list.ts"],"names":[],"mappings":"AAKA,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCtF"}
@@ -28,6 +28,8 @@ async function handleApplicationList(options) {
28
28
  servingIp: app.servingIp,
29
29
  port: app.port,
30
30
  protocol: app.protocol,
31
+ subtype: app.subtype,
32
+ configuration: app.configuration,
31
33
  status: app.status,
32
34
  workloadId: app.workloadId,
33
35
  createdAt: app.createdAt,
@@ -3,5 +3,6 @@ export declare function handleApplicationUpdate(options: {
3
3
  name?: string;
4
4
  authModes?: string;
5
5
  allowedOrgs?: string;
6
+ targetState?: string;
6
7
  }): Promise<void>;
7
8
  //# sourceMappingURL=update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/application/update.ts"],"names":[],"mappings":"AAMA,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDhB"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/application/update.ts"],"names":[],"mappings":"AAMA,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DhB"}
@@ -37,8 +37,11 @@ async function handleApplicationUpdate(options) {
37
37
  .map((s) => s.trim())
38
38
  .filter(Boolean);
39
39
  }
40
+ if (options.targetState !== undefined && options.targetState.trim().length > 0) {
41
+ updates.targetState = options.targetState.trim();
42
+ }
40
43
  if (Object.keys(updates).length === 0) {
41
- console.log(chalk_1.default.yellow('No updates specified. Use --name, --auth-modes, or --allowed-orgs.'));
44
+ console.log(chalk_1.default.yellow('No updates specified. Use --name, --auth-modes, --allowed-orgs, or --target-state.'));
42
45
  return;
43
46
  }
44
47
  instances_1.logger.debug('Updating application', { appId, updates });
@@ -51,5 +54,7 @@ async function handleApplicationUpdate(options) {
51
54
  if (updates.allowedOrganizations && updates.allowedOrganizations.length > 0) {
52
55
  console.log(chalk_1.default.gray(` Allowed organizations: ${updates.allowedOrganizations.join(', ')}`));
53
56
  }
57
+ if (updates.targetState)
58
+ console.log(chalk_1.default.gray(` Target state: ${updates.targetState}`));
54
59
  }
55
60
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/commands/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4d/D"}
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/commands/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+e/D"}
@@ -13,6 +13,7 @@ const create_managed_process_1 = require("./application/create-managed-process")
13
13
  const create_stubs_1 = require("./application/create-stubs");
14
14
  const create_vm_1 = require("./application/create-vm");
15
15
  const ssh_1 = require("./application/ssh");
16
+ const events_1 = require("./application/events");
16
17
  const list_2 = require("./application/api-keys/list");
17
18
  const create_1 = require("./application/api-keys/create");
18
19
  const delete_2 = require("./application/api-keys/delete");
@@ -190,6 +191,18 @@ Examples:
190
191
  requireAuth: true,
191
192
  requireOrganization: true,
192
193
  }));
194
+ appCommand
195
+ .command('events')
196
+ .description('Show lifecycle events for an application')
197
+ .option('-i, --app-id <id>', 'Application ID')
198
+ .option('-n, --limit <number>', 'Maximum number of events to return', '50')
199
+ .option('--json', 'Output as JSON')
200
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
201
+ await (0, events_1.handleApplicationEvents)(options);
202
+ }, {
203
+ requireAuth: true,
204
+ requireOrganization: true,
205
+ }));
193
206
  appCommand
194
207
  .command('update')
195
208
  .description('Update an existing application (e.g. auth modes, name)')
@@ -197,6 +210,7 @@ Examples:
197
210
  .option('-n, --name <name>', 'Application name')
198
211
  .option('--auth-modes <modes>', 'Auth modes: none, org, api-key (comma-separated for multiple)')
199
212
  .option('--allowed-orgs <ids>', 'Comma-separated organization IDs allowed (when org auth is used)')
213
+ .option('--target-state <state>', 'Target lifecycle state: running, suspended')
200
214
  .action((0, command_wrapper_1.wrapCommand)(async (options) => {
201
215
  await (0, update_1.handleApplicationUpdate)(options);
202
216
  }, {
@@ -365,7 +365,7 @@ async function handleUserLogin(configManager, authService, savedEmail, isFirstRu
365
365
  console.log(chalk_1.default.gray('1. Use the "edgible signup" command'));
366
366
  console.log(chalk_1.default.gray('2. Visit https://edgible.com/signup in your browser'));
367
367
  console.log(chalk_1.default.gray('3. Use device login to create a device without an account'));
368
- console.log(chalk_1.default.gray('4. Come back later and run "edgible login" again\n'));
368
+ console.log(chalk_1.default.gray('4. Come back later and run "edgible auth login" again\n'));
369
369
  }
370
370
  else {
371
371
  console.log(chalk_1.default.gray('You can create an account by visiting the Edgible website or using the signup command.'));
@@ -20,7 +20,7 @@ function wrapCommand(action, wrapperOptions = {}) {
20
20
  const hasTokens = !!(config.accessToken || config.idToken);
21
21
  const hasDeviceCreds = !!(config.deviceId && config.devicePassword);
22
22
  if (!hasTokens && !hasDeviceCreds) {
23
- throw new errors_1.ConfigError('Not authenticated. Please run "edgible login" first.');
23
+ throw new errors_1.ConfigError('Not authenticated. Please run "edgible auth login" first.');
24
24
  }
25
25
  }
26
26
  if (requireOrganization) {
@@ -71,7 +71,7 @@ function setupConfigCommands(program) {
71
71
  instances_1.configManager.clearConfig();
72
72
  instances_1.logger.info('Configuration reset (non-interactive)');
73
73
  console.log(chalk_1.default.green('✓ CLI state has been reset'));
74
- console.log(chalk_1.default.gray('Run "edgible login" to start fresh'));
74
+ console.log(chalk_1.default.gray('Run "edgible auth login" to start fresh'));
75
75
  }
76
76
  else {
77
77
  // Interactive mode: ask for confirmation
@@ -87,7 +87,7 @@ function setupConfigCommands(program) {
87
87
  instances_1.configManager.clearConfig();
88
88
  instances_1.logger.info('Configuration reset (interactive)');
89
89
  console.log(chalk_1.default.green('✓ CLI state has been reset'));
90
- console.log(chalk_1.default.gray('Run "edgible login" to start fresh'));
90
+ console.log(chalk_1.default.gray('Run "edgible auth login" to start fresh'));
91
91
  }
92
92
  else {
93
93
  instances_1.logger.debug('Configuration reset cancelled');
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkmBzD"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqmBzD"}
@@ -61,8 +61,7 @@ function setupDebugCommands(program) {
61
61
  .option('--local', 'Use local agent build from agent-v2/dist/ (development only)')
62
62
  .action((0, command_wrapper_1.wrapCommand)(async (options) => {
63
63
  if (!(0, sudo_checker_1.checkSudoPermissions)()) {
64
- console.log(chalk_1.default.redBright("Please run this command with administrator privileges (i.e. sudo)"));
65
- return;
64
+ console.log(chalk_1.default.yellow('⚠ Warning: Not running as root/sudo. Debug full-cycle steps (install, services) may fail without proper privileges.'));
66
65
  }
67
66
  console.log(chalk_1.default.blue.bold('\n═══════════════════════════════════════════'));
68
67
  console.log(chalk_1.default.blue.bold(' Full Debug Cycle'));
@@ -1,5 +1,10 @@
1
1
  /**
2
2
  * Stack validate command handler
3
+ *
4
+ * Validation is purely local (YAML parsing + dependency graph check).
5
+ * It does NOT require authentication or an organization ID.
6
+ * Use StackParser and DependencyGraphManager directly to avoid the eager
7
+ * org-ID check in getServiceInstances().
3
8
  */
4
9
  export declare function handleStackValidate(options: {
5
10
  file?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/stack/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCnF"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/stack/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCnF"}
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Stack validate command handler
4
+ *
5
+ * Validation is purely local (YAML parsing + dependency graph check).
6
+ * It does NOT require authentication or an organization ID.
7
+ * Use StackParser and DependencyGraphManager directly to avoid the eager
8
+ * org-ID check in getServiceInstances().
4
9
  */
5
10
  var __importDefault = (this && this.__importDefault) || function (mod) {
6
11
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -9,14 +14,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
14
  exports.handleStackValidate = handleStackValidate;
10
15
  const chalk_1 = __importDefault(require("chalk"));
11
16
  const instances_1 = require("../../services/instances");
17
+ const StackParser_1 = require("../../services/stack/StackParser");
18
+ const DependencyGraphManager_1 = require("../../services/stack/DependencyGraphManager");
12
19
  const stack_file_1 = require("../../utils/stack-file");
13
20
  async function handleStackValidate(options) {
14
- const { stackService, logger } = (0, instances_1.getServiceInstances)();
21
+ const parser = new StackParser_1.StackParser(instances_1.logger);
22
+ const depManager = new DependencyGraphManager_1.DependencyGraphManager(instances_1.logger);
15
23
  try {
16
24
  const file = (0, stack_file_1.findStackFile)(options.file);
17
- logger.info(`Validating stack file: ${file}`);
18
- const result = await stackService.validateStack(file);
25
+ instances_1.logger.info(`Validating stack file: ${file}`);
26
+ const result = await parser.validate(file);
19
27
  if (result.valid) {
28
+ // Additional validation: dependency graph
29
+ const stack = await parser.parseFile(file);
30
+ depManager.validate(stack.applications);
20
31
  console.log(chalk_1.default.green('✓ Stack validation passed'));
21
32
  if (result.warnings.length > 0) {
22
33
  console.log(chalk_1.default.yellow('\nWarnings:'));
@@ -36,7 +47,7 @@ async function handleStackValidate(options) {
36
47
  }
37
48
  }
38
49
  catch (error) {
39
- logger.error(`Validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);
50
+ instances_1.logger.error(`Validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);
40
51
  console.log(chalk_1.default.red(`\n✗ Validation failed: ${error instanceof Error ? error.message : 'Unknown error'}`));
41
52
  process.exit(1);
42
53
  }
@@ -19,7 +19,7 @@ function validateConfig(configManager, options = {}) {
19
19
  const hasTokens = !!(config.accessToken || config.idToken);
20
20
  const hasDeviceCreds = !!(config.deviceId && config.devicePassword);
21
21
  if (!hasTokens && !hasDeviceCreds) {
22
- throw new errors_1.ConfigError('Not authenticated. Please run "edgible login" first.');
22
+ throw new errors_1.ConfigError('Not authenticated. Please run "edgible auth login" first.');
23
23
  }
24
24
  }
25
25
  if (requireOrganization) {
@@ -24,7 +24,9 @@ export interface Application {
24
24
  servingIp: string;
25
25
  port: number;
26
26
  protocol: 'http' | 'https' | 'tcp' | 'udp';
27
- status: 'active' | 'inactive' | 'pending';
27
+ status: 'active' | 'inactive' | 'pending' | 'deployed' | 'error' | 'shutdown' | 'deploying' | 'unknown';
28
+ subtype?: string;
29
+ configuration?: Record<string, unknown>;
28
30
  createdAt: string;
29
31
  description?: string;
30
32
  url?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"WorkloadDetector.d.ts","sourceRoot":"","sources":["../../src/detection/WorkloadDetector.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;IAC3C,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,gBAAgB;IAC3B;;OAEG;WACiB,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IA2B1D;;OAEG;mBACkB,qBAAqB;IAmE1C;;OAEG;mBACkB,yBAAyB;IA4D9C;;OAEG;mBACkB,iBAAiB;IAsDtC;;OAEG;mBACkB,sBAAsB;IAyD3C;;OAEG;WACW,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAwD3D;;OAEG;WACW,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM;CAMhE"}
1
+ {"version":3,"file":"WorkloadDetector.d.ts","sourceRoot":"","sources":["../../src/detection/WorkloadDetector.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;IAC3C,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IACxG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,gBAAgB;IAC3B;;OAEG;WACiB,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IA2B1D;;OAEG;mBACkB,qBAAqB;IAmE1C;;OAEG;mBACkB,yBAAyB;IA4D9C;;OAEG;mBACkB,iBAAiB;IAsDtC;;OAEG;mBACkB,sBAAsB;IAyD3C;;OAEG;WACW,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAwD3D;;OAEG;WACW,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM;CAMhE"}
@@ -68,14 +68,14 @@ function main() {
68
68
  log('✅ Edgible CLI installed globally', colors.green);
69
69
  log('\n');
70
70
  log('Quick Start:', colors.bright);
71
- log(' 1. Run: edgible login', colors.gray);
71
+ log(' 1. Run: edgible auth login', colors.gray);
72
72
  log(' 2. Run: edgible --help', colors.gray);
73
73
  log('\n');
74
74
  } else {
75
75
  log('📦 Edgible CLI installed locally', colors.cyan);
76
76
  log('\n');
77
77
  log('Quick Start:', colors.bright);
78
- log(' 1. Run: npx edgible login', colors.gray);
78
+ log(' 1. Run: npx edgible auth login', colors.gray);
79
79
  log(' 2. Run: npx edgible --help', colors.gray);
80
80
  log('\n');
81
81
  log('For global access, install with: npm install -g edgible-cli', colors.gray);
@@ -745,7 +745,7 @@ class LocalAgentManager {
745
745
  provideTroubleshootingSteps(errorMessage) {
746
746
  console.log(chalk_1.default.yellow('\nTroubleshooting steps:'));
747
747
  if (errorMessage.includes('Device ID')) {
748
- console.log(' 1. Run "edgible login" to authenticate');
748
+ console.log(' 1. Run "edgible auth login" to authenticate');
749
749
  console.log(' 2. Run "edgible device-login" if using device credentials');
750
750
  }
751
751
  if (errorMessage.includes('Agent binary not found')) {
@@ -52,6 +52,7 @@ export interface ApplicationService {
52
52
  dependsOnApplicationIds?: string[];
53
53
  }): Promise<unknown>;
54
54
  getApplicationVmSshKey(applicationId: string): Promise<string | null>;
55
+ getApplicationLifecycleEvents(applicationId: string, limit?: number): Promise<any[]>;
55
56
  }
56
57
  export declare class ApplicationServiceImpl implements ApplicationService {
57
58
  private apiClient;
@@ -134,5 +135,6 @@ export declare class ApplicationServiceImpl implements ApplicationService {
134
135
  * Returns null if no key is stored (user must provide --key themselves).
135
136
  */
136
137
  getApplicationVmSshKey(applicationId: string): Promise<string | null>;
138
+ getApplicationLifecycleEvents(applicationId: string, limit?: number): Promise<any[]>;
137
139
  }
138
140
  //# sourceMappingURL=ApplicationService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationService.d.ts","sourceRoot":"","sources":["../../../src/services/application/ApplicationService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApplicationService.d.ts","sourceRoot":"","sources":["../../../src/services/application/ApplicationService.ts"],"names":[],"mappings":"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"}
@@ -186,7 +186,9 @@ class ApplicationServiceImpl {
186
186
  servingIp,
187
187
  port,
188
188
  protocol,
189
- status: app.status === 'deployed' ? 'active' : 'inactive',
189
+ status: app.status,
190
+ subtype: app.subtype,
191
+ configuration: app.configuration,
190
192
  createdAt: app.createdAt,
191
193
  description: app.description,
192
194
  };
@@ -274,7 +276,7 @@ class ApplicationServiceImpl {
274
276
  this.tokenManager.restoreTokensFromConfig(this.apiClient);
275
277
  const config = this.configManager.getConfig();
276
278
  if (!config.organizationId) {
277
- throw new Error('Not logged in. Please run "edgible login" first.');
279
+ throw new Error('Not logged in. Please run "edgible auth login" first.');
278
280
  }
279
281
  // Build configuration object, merging provided configuration with port and protocol
280
282
  const configuration = {
@@ -446,6 +448,21 @@ class ApplicationServiceImpl {
446
448
  throw error;
447
449
  }
448
450
  }
451
+ async getApplicationLifecycleEvents(applicationId, limit) {
452
+ try {
453
+ await this.tokenManager.ensureValidToken(this.apiClient, this.authService.loginDevice.bind(this.authService));
454
+ const config = this.configManager.getConfig();
455
+ if (!config.organizationId) {
456
+ throw new Error('Not logged in. Please run "edgible auth login" first.');
457
+ }
458
+ const response = await this.apiClient.getApplicationLifecycleEvents(config.organizationId, applicationId, limit);
459
+ return response.events ?? [];
460
+ }
461
+ catch (error) {
462
+ this.logger.error('Failed to get application lifecycle events', error);
463
+ throw new Error(`Failed to get lifecycle events: ${error instanceof Error ? error.message : 'Unknown error'}`);
464
+ }
465
+ }
449
466
  }
450
467
  exports.ApplicationServiceImpl = ApplicationServiceImpl;
451
468
  //# sourceMappingURL=ApplicationService.js.map
@@ -65,7 +65,7 @@ class DeviceServiceImpl {
65
65
  this.tokenManager.restoreTokensFromConfig(this.apiClient);
66
66
  const token = this.apiClient.getIdToken() ?? this.apiClient.getAccessToken();
67
67
  if (!token) {
68
- throw new Error('No auth token available. Please run "edgible login" first.');
68
+ throw new Error('No auth token available. Please run "edgible auth login" first.');
69
69
  }
70
70
  const base = telemetryBaseUrl.replace(/\/$/, '');
71
71
  const path = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;
@@ -2987,7 +2987,7 @@ console.log('Edgible Agent started successfully');
2987
2987
  await this.tokenManager.ensureValidToken(this.apiClient, this.loginDevice.bind(this));
2988
2988
  const config = this.configManager.getConfig();
2989
2989
  if (!config.organizationId) {
2990
- throw new Error('Not logged in. Please run "edgible login" first.');
2990
+ throw new Error('Not logged in. Please run "edgible auth login" first.');
2991
2991
  }
2992
2992
  // Build configuration object, merging provided configuration with port and protocol
2993
2993
  const configuration = {
@@ -1 +1 @@
1
- {"version":3,"file":"DependencyGraphManager.d.ts","sourceRoot":"","sources":["../../../src/services/stack/DependencyGraphManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,qBAAa,sBAAsB;IACrB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC;;;;OAIG;IACH,UAAU,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAoBnE;;;;OAIG;IACH,YAAY,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI;IAwC/D;;;;;;OAMG;IACH,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAqD9D;;;;;OAKG;IACH,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAQ5D;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAK5E;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAY1E;;;;;;;OAOG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,gBAAgB,EAAE,EAChC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,OAAO;IAOV;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI;CAwBjD"}
1
+ {"version":3,"file":"DependencyGraphManager.d.ts","sourceRoot":"","sources":["../../../src/services/stack/DependencyGraphManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,qBAAa,sBAAsB;IACrB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC;;;;OAIG;IACH,UAAU,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAoBnE;;;;OAIG;IACH,YAAY,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI;IAwC/D;;;;;;OAMG;IACH,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IA+C9D;;;;;OAKG;IACH,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAQ5D;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAK5E;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAY1E;;;;;;;OAOG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,gBAAgB,EAAE,EAChC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,OAAO;IAOV;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI;CAwBjD"}
@@ -88,15 +88,10 @@ class DependencyGraphManager {
88
88
  const graph = this.buildGraph(applications);
89
89
  const inDegree = new Map();
90
90
  const result = [];
91
- // Calculate in-degree for each node
91
+ // Calculate in-degree for each node.
92
+ // in-degree of X = number of dependencies X must wait for before it can deploy.
92
93
  for (const app of applications) {
93
- inDegree.set(app.name, 0);
94
- }
95
- for (const app of applications) {
96
- const deps = graph.get(app.name) || [];
97
- for (const dep of deps) {
98
- inDegree.set(dep, (inDegree.get(dep) || 0) + 1);
99
- }
94
+ inDegree.set(app.name, (graph.get(app.name) || []).length);
100
95
  }
101
96
  // Queue of nodes with no dependencies
102
97
  const queue = [];
@@ -1 +1 @@
1
- {"version":3,"file":"StackService.d.ts","sourceRoot":"","sources":["../../../src/services/stack/StackService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAKvE,OAAO,EAKL,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,WAAW,EAEX,SAAS,EAGV,MAAM,mBAAmB,CAAC;AAO3B,qBAAa,YAAY;IAOrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,MAAM;IAThB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,iBAAiB,CAAyB;gBAGxC,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM;IAQxB;;;;OAIG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgCrE;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAoGhE;;;;OAIG;IACG,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAuEtE;;;;OAIG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAY5D;;;;OAIG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA0CrD;;;;;OAKG;YACW,YAAY;IA4B1B;;;;;OAKG;YACW,iBAAiB;IAiF/B;;;;OAIG;YACW,uBAAuB;IAyCrC;;;;OAIG;YACW,uBAAuB;CA4BtC"}
1
+ {"version":3,"file":"StackService.d.ts","sourceRoot":"","sources":["../../../src/services/stack/StackService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAKvE,OAAO,EAKL,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,WAAW,EAEX,SAAS,EAGV,MAAM,mBAAmB,CAAC;AAO3B,qBAAa,YAAY;IAOrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,MAAM;IAThB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,iBAAiB,CAAyB;gBAGxC,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM;IAQxB;;;;OAIG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgCrE;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgHhE;;;;OAIG;IACG,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAuEtE;;;;OAIG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAY5D;;;;OAIG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA0CrD;;;;;OAKG;YACW,YAAY;IA4B1B;;;;;OAKG;YACW,iBAAiB;IAiF/B;;;;OAIG;YACW,uBAAuB;IAyCrC;;;;OAIG;YACW,uBAAuB;CA4BtC"}
@@ -153,14 +153,25 @@ class StackService {
153
153
  }
154
154
  catch (error) {
155
155
  const errorMsg = error instanceof Error ? error.message : 'Unknown error';
156
- this.logger.error(`Failed to deploy ${appName}: ${errorMsg}`);
157
- failed.push({
158
- name: appName,
159
- error: errorMsg,
160
- });
161
- // Stop deployment on first failure (fail-fast)
162
- if (!options.force) {
163
- break;
156
+ const isAlreadyExists = error?.statusCode === 409 ||
157
+ errorMsg.toLowerCase().includes('already exists');
158
+ // When --force is set, treat "already exists" as a successful no-op so that
159
+ // dependent apps can still be deployed in the same run.
160
+ if (options.force && isAlreadyExists) {
161
+ this.logger.info(`${appName} already exists skipping (--force)`);
162
+ deployed.push({ name: appName, applicationId: 'existing', urls: [] });
163
+ deployedSet.add(appName);
164
+ }
165
+ else {
166
+ this.logger.error(`Failed to deploy ${appName}: ${errorMsg}`);
167
+ failed.push({
168
+ name: appName,
169
+ error: errorMsg,
170
+ });
171
+ // Stop deployment on first failure (fail-fast)
172
+ if (!options.force) {
173
+ break;
174
+ }
164
175
  }
165
176
  }
166
177
  }
@@ -93,28 +93,52 @@ export declare const CreateApplicationSchema: z.ZodObject<{
93
93
  dockerComposePath: z.ZodOptional<z.ZodString>;
94
94
  systemdService: z.ZodOptional<z.ZodString>;
95
95
  deleteVolumesOnDeletion: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
96
+ vmBackend: z.ZodOptional<z.ZodEnum<["qemu", "firecracker"]>>;
97
+ diskImage: z.ZodOptional<z.ZodString>;
98
+ memory: z.ZodOptional<z.ZodNumber>;
99
+ cpus: z.ZodOptional<z.ZodNumber>;
100
+ sshPort: z.ZodOptional<z.ZodNumber>;
101
+ arch: z.ZodOptional<z.ZodEnum<["x86_64", "aarch64", "arm64"]>>;
102
+ sshPublicKey: z.ZodOptional<z.ZodString>;
103
+ diskImageAlias: z.ZodOptional<z.ZodString>;
96
104
  }, "strip", z.ZodTypeAny, {
97
105
  port: number;
98
106
  protocol: "http" | "https" | "tcp" | "udp";
99
107
  deleteVolumesOnDeletion: boolean;
100
108
  command?: string | undefined;
101
109
  logFile?: string | undefined;
110
+ vmBackend?: "qemu" | "firecracker" | undefined;
111
+ diskImage?: string | undefined;
112
+ memory?: number | undefined;
113
+ cpus?: number | undefined;
114
+ sshPort?: number | undefined;
115
+ sshPublicKey?: string | undefined;
102
116
  dockerComposePath?: string | undefined;
103
117
  env?: Record<string, string> | undefined;
104
118
  workingDirectory?: string | undefined;
105
119
  healthCheckPath?: string | undefined;
106
120
  systemdService?: string | undefined;
121
+ arch?: "x86_64" | "aarch64" | "arm64" | undefined;
122
+ diskImageAlias?: string | undefined;
107
123
  }, {
108
124
  port: number;
109
125
  protocol: "http" | "https" | "tcp" | "udp";
110
126
  command?: string | undefined;
111
127
  logFile?: string | undefined;
128
+ vmBackend?: "qemu" | "firecracker" | undefined;
129
+ diskImage?: string | undefined;
130
+ memory?: number | undefined;
131
+ cpus?: number | undefined;
132
+ sshPort?: number | undefined;
133
+ sshPublicKey?: string | undefined;
112
134
  dockerComposePath?: string | undefined;
113
135
  env?: Record<string, string> | undefined;
114
136
  workingDirectory?: string | undefined;
115
137
  deleteVolumesOnDeletion?: boolean | undefined;
116
138
  healthCheckPath?: string | undefined;
117
139
  systemdService?: string | undefined;
140
+ arch?: "x86_64" | "aarch64" | "arm64" | undefined;
141
+ diskImageAlias?: string | undefined;
118
142
  }>;
119
143
  hostnames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
120
144
  deviceIds: z.ZodArray<z.ZodString, "many">;
@@ -137,11 +161,19 @@ export declare const CreateApplicationSchema: z.ZodObject<{
137
161
  deleteVolumesOnDeletion: boolean;
138
162
  command?: string | undefined;
139
163
  logFile?: string | undefined;
164
+ vmBackend?: "qemu" | "firecracker" | undefined;
165
+ diskImage?: string | undefined;
166
+ memory?: number | undefined;
167
+ cpus?: number | undefined;
168
+ sshPort?: number | undefined;
169
+ sshPublicKey?: string | undefined;
140
170
  dockerComposePath?: string | undefined;
141
171
  env?: Record<string, string> | undefined;
142
172
  workingDirectory?: string | undefined;
143
173
  healthCheckPath?: string | undefined;
144
174
  systemdService?: string | undefined;
175
+ arch?: "x86_64" | "aarch64" | "arm64" | undefined;
176
+ diskImageAlias?: string | undefined;
145
177
  };
146
178
  environment: "development" | "staging" | "prod";
147
179
  deviceIds: string[];
@@ -164,12 +196,20 @@ export declare const CreateApplicationSchema: z.ZodObject<{
164
196
  protocol: "http" | "https" | "tcp" | "udp";
165
197
  command?: string | undefined;
166
198
  logFile?: string | undefined;
199
+ vmBackend?: "qemu" | "firecracker" | undefined;
200
+ diskImage?: string | undefined;
201
+ memory?: number | undefined;
202
+ cpus?: number | undefined;
203
+ sshPort?: number | undefined;
204
+ sshPublicKey?: string | undefined;
167
205
  dockerComposePath?: string | undefined;
168
206
  env?: Record<string, string> | undefined;
169
207
  workingDirectory?: string | undefined;
170
208
  deleteVolumesOnDeletion?: boolean | undefined;
171
209
  healthCheckPath?: string | undefined;
172
210
  systemdService?: string | undefined;
211
+ arch?: "x86_64" | "aarch64" | "arm64" | undefined;
212
+ diskImageAlias?: string | undefined;
173
213
  };
174
214
  deviceIds: string[];
175
215
  description?: string | undefined;
@@ -517,8 +557,8 @@ export declare const CreateResourceSchema: z.ZodObject<{
517
557
  organizationId?: string | undefined;
518
558
  status?: "running" | "pending" | "stopped" | "error" | undefined;
519
559
  type?: string | undefined;
520
- description?: string | undefined;
521
560
  configuration?: Record<string, unknown> | undefined;
561
+ description?: string | undefined;
522
562
  region?: string | undefined;
523
563
  tags?: string[] | undefined;
524
564
  cost?: number | undefined;
@@ -529,8 +569,8 @@ export declare const CreateResourceSchema: z.ZodObject<{
529
569
  organizationId?: string | undefined;
530
570
  status?: "running" | "pending" | "stopped" | "error" | undefined;
531
571
  type?: string | undefined;
532
- description?: string | undefined;
533
572
  configuration?: Record<string, unknown> | undefined;
573
+ description?: string | undefined;
534
574
  region?: string | undefined;
535
575
  tags?: string[] | undefined;
536
576
  cost?: number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/types/validation/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/types/validation/schemas.ts"],"names":[],"mappings":"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"}
@@ -76,6 +76,15 @@ exports.CreateApplicationSchema = zod_1.z.object({
76
76
  .optional()
77
77
  .default(false)
78
78
  .describe('Delete docker volumes when application is permanently deleted'),
79
+ // VM-specific fields
80
+ vmBackend: zod_1.z.enum(['qemu', 'firecracker']).optional(),
81
+ diskImage: zod_1.z.string().optional(),
82
+ memory: zod_1.z.number().int().positive().optional(),
83
+ cpus: zod_1.z.number().int().positive().optional(),
84
+ sshPort: zod_1.z.number().int().min(1).max(65535).optional(),
85
+ arch: zod_1.z.enum(['x86_64', 'aarch64', 'arm64']).optional(),
86
+ sshPublicKey: zod_1.z.string().optional(),
87
+ diskImageAlias: zod_1.z.string().optional(),
79
88
  }),
80
89
  hostnames: zod_1.z
81
90
  .array(zod_1.z
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edgible-team/cli",
3
- "version": "1.2.19",
3
+ "version": "1.2.20",
4
4
  "description": "CLI tool for Edgible service",
5
5
  "main": "dist/index.js",
6
6
  "bin": {