@edgible-team/cli 1.2.4 → 1.2.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.
Files changed (221) hide show
  1. package/dist/commands/agent/agent-handlers.d.ts +45 -0
  2. package/dist/commands/agent/agent-handlers.d.ts.map +1 -0
  3. package/dist/commands/agent/agent-handlers.js +1159 -0
  4. package/dist/commands/agent/install.d.ts +11 -0
  5. package/dist/commands/agent/install.d.ts.map +1 -0
  6. package/dist/commands/agent/install.js +399 -0
  7. package/dist/commands/agent/logs.d.ts +12 -0
  8. package/dist/commands/agent/logs.d.ts.map +1 -0
  9. package/dist/commands/agent/logs.js +77 -0
  10. package/dist/commands/agent/restart.d.ts +4 -0
  11. package/dist/commands/agent/restart.d.ts.map +1 -0
  12. package/dist/commands/agent/restart.js +33 -0
  13. package/dist/commands/agent/set-log-level.d.ts +8 -0
  14. package/dist/commands/agent/set-log-level.d.ts.map +1 -0
  15. package/dist/commands/agent/set-log-level.js +133 -0
  16. package/dist/commands/agent/setup.d.ts +9 -0
  17. package/dist/commands/agent/setup.d.ts.map +1 -0
  18. package/dist/commands/agent/setup.js +149 -0
  19. package/dist/commands/agent/start.d.ts +12 -0
  20. package/dist/commands/agent/start.d.ts.map +1 -0
  21. package/dist/commands/agent/start.js +308 -0
  22. package/dist/commands/agent/status.d.ts +7 -0
  23. package/dist/commands/agent/status.d.ts.map +1 -0
  24. package/dist/commands/agent/status.js +68 -0
  25. package/dist/commands/agent/stop.d.ts +4 -0
  26. package/dist/commands/agent/stop.d.ts.map +1 -0
  27. package/dist/commands/agent/stop.js +33 -0
  28. package/dist/commands/agent/uninstall.d.ts +7 -0
  29. package/dist/commands/agent/uninstall.d.ts.map +1 -0
  30. package/dist/commands/agent/uninstall.js +168 -0
  31. package/dist/commands/agent.d.ts.map +1 -1
  32. package/dist/commands/agent.js +24 -1190
  33. package/dist/commands/ai/helpers.d.ts +139 -0
  34. package/dist/commands/ai/helpers.d.ts.map +1 -0
  35. package/dist/commands/ai/helpers.js +1470 -0
  36. package/dist/commands/ai/serve.d.ts +6 -0
  37. package/dist/commands/ai/serve.d.ts.map +1 -0
  38. package/dist/commands/ai/serve.js +124 -0
  39. package/dist/commands/ai/setup.d.ts +14 -0
  40. package/dist/commands/ai/setup.d.ts.map +1 -0
  41. package/dist/commands/ai/setup.js +86 -0
  42. package/dist/commands/ai/status.d.ts +2 -0
  43. package/dist/commands/ai/status.d.ts.map +1 -0
  44. package/dist/commands/ai/status.js +160 -0
  45. package/dist/commands/ai/stop.d.ts +2 -0
  46. package/dist/commands/ai/stop.d.ts.map +1 -0
  47. package/dist/commands/ai/stop.js +21 -0
  48. package/dist/commands/ai/teardown.d.ts +5 -0
  49. package/dist/commands/ai/teardown.d.ts.map +1 -0
  50. package/dist/commands/ai/teardown.js +78 -0
  51. package/dist/commands/ai/test.d.ts +4 -0
  52. package/dist/commands/ai/test.d.ts.map +1 -0
  53. package/dist/commands/ai/test.js +65 -0
  54. package/dist/commands/ai.d.ts.map +1 -1
  55. package/dist/commands/ai.js +16 -1938
  56. package/dist/commands/application/api-keys/create.d.ts +6 -0
  57. package/dist/commands/application/api-keys/create.d.ts.map +1 -0
  58. package/dist/commands/application/api-keys/create.js +68 -0
  59. package/dist/commands/application/api-keys/delete.d.ts +6 -0
  60. package/dist/commands/application/api-keys/delete.d.ts.map +1 -0
  61. package/dist/commands/application/api-keys/delete.js +79 -0
  62. package/dist/commands/application/api-keys/list.d.ts +5 -0
  63. package/dist/commands/application/api-keys/list.d.ts.map +1 -0
  64. package/dist/commands/application/api-keys/list.js +65 -0
  65. package/dist/commands/application/api-keys.d.ts +3 -0
  66. package/dist/commands/application/api-keys.d.ts.map +1 -0
  67. package/dist/commands/application/api-keys.js +227 -0
  68. package/dist/commands/application/create-compose.d.ts +3 -0
  69. package/dist/commands/application/create-compose.d.ts.map +1 -0
  70. package/dist/commands/application/create-compose.js +381 -0
  71. package/dist/commands/application/create-docker-compose.d.ts +10 -0
  72. package/dist/commands/application/create-docker-compose.d.ts.map +1 -0
  73. package/dist/commands/application/create-docker-compose.js +334 -0
  74. package/dist/commands/application/create-existing.d.ts +14 -0
  75. package/dist/commands/application/create-existing.d.ts.map +1 -0
  76. package/dist/commands/application/create-existing.js +359 -0
  77. package/dist/commands/application/create-interactive.d.ts +3 -0
  78. package/dist/commands/application/create-interactive.d.ts.map +1 -0
  79. package/dist/commands/application/create-interactive.js +326 -0
  80. package/dist/commands/application/create-managed-process.d.ts +15 -0
  81. package/dist/commands/application/create-managed-process.d.ts.map +1 -0
  82. package/dist/commands/application/create-managed-process.js +371 -0
  83. package/dist/commands/application/create-stubs.d.ts +4 -0
  84. package/dist/commands/application/create-stubs.d.ts.map +1 -0
  85. package/dist/commands/application/create-stubs.js +19 -0
  86. package/dist/commands/application/create-workload.d.ts +5 -0
  87. package/dist/commands/application/create-workload.d.ts.map +1 -0
  88. package/dist/commands/application/create-workload.js +48 -0
  89. package/dist/commands/application/delete.d.ts +6 -0
  90. package/dist/commands/application/delete.d.ts.map +1 -0
  91. package/dist/commands/application/delete.js +76 -0
  92. package/dist/commands/application/get.d.ts +5 -0
  93. package/dist/commands/application/get.d.ts.map +1 -0
  94. package/dist/commands/application/get.js +35 -0
  95. package/dist/commands/application/list.d.ts +4 -0
  96. package/dist/commands/application/list.d.ts.map +1 -0
  97. package/dist/commands/application/list.js +41 -0
  98. package/dist/commands/application/short-codes/create.d.ts +7 -0
  99. package/dist/commands/application/short-codes/create.d.ts.map +1 -0
  100. package/dist/commands/application/short-codes/create.js +69 -0
  101. package/dist/commands/application/short-codes/delete.d.ts +6 -0
  102. package/dist/commands/application/short-codes/delete.d.ts.map +1 -0
  103. package/dist/commands/application/short-codes/delete.js +79 -0
  104. package/dist/commands/application/short-codes/list.d.ts +5 -0
  105. package/dist/commands/application/short-codes/list.d.ts.map +1 -0
  106. package/dist/commands/application/short-codes/list.js +63 -0
  107. package/dist/commands/application/short-codes/toggle.d.ts +5 -0
  108. package/dist/commands/application/short-codes/toggle.d.ts.map +1 -0
  109. package/dist/commands/application/short-codes/toggle.js +71 -0
  110. package/dist/commands/application/short-codes.d.ts +3 -0
  111. package/dist/commands/application/short-codes.d.ts.map +1 -0
  112. package/dist/commands/application/short-codes.js +226 -0
  113. package/dist/commands/application/toggle.d.ts +2 -0
  114. package/dist/commands/application/toggle.d.ts.map +1 -0
  115. package/dist/commands/application/toggle.js +78 -0
  116. package/dist/commands/application/update.d.ts +4 -0
  117. package/dist/commands/application/update.d.ts.map +1 -0
  118. package/dist/commands/application/update.js +11 -0
  119. package/dist/commands/application.d.ts.map +1 -1
  120. package/dist/commands/application.js +32 -1630
  121. package/dist/commands/auth.d.ts.map +1 -1
  122. package/dist/commands/auth.js +31 -49
  123. package/dist/commands/base/BaseCommand.d.ts +3 -3
  124. package/dist/commands/base/BaseCommand.d.ts.map +1 -1
  125. package/dist/commands/base/BaseCommand.js +3 -3
  126. package/dist/commands/base/command-wrapper.d.ts +0 -4
  127. package/dist/commands/base/command-wrapper.d.ts.map +1 -1
  128. package/dist/commands/base/command-wrapper.js +13 -14
  129. package/dist/commands/base/middleware.d.ts +3 -3
  130. package/dist/commands/base/middleware.d.ts.map +1 -1
  131. package/dist/commands/base/middleware.js +4 -4
  132. package/dist/commands/config.d.ts.map +1 -1
  133. package/dist/commands/config.js +15 -32
  134. package/dist/commands/connectivity.d.ts.map +1 -1
  135. package/dist/commands/connectivity.js +6 -11
  136. package/dist/commands/debug.d.ts.map +1 -1
  137. package/dist/commands/debug.js +187 -46
  138. package/dist/commands/discover.d.ts.map +1 -1
  139. package/dist/commands/discover.js +4 -17
  140. package/dist/commands/gateway.d.ts.map +1 -1
  141. package/dist/commands/gateway.js +37 -77
  142. package/dist/commands/managedGateway/create.d.ts +6 -0
  143. package/dist/commands/managedGateway/create.d.ts.map +1 -0
  144. package/dist/commands/managedGateway/create.js +50 -0
  145. package/dist/commands/managedGateway/delete.d.ts +5 -0
  146. package/dist/commands/managedGateway/delete.d.ts.map +1 -0
  147. package/dist/commands/managedGateway/delete.js +57 -0
  148. package/dist/commands/managedGateway/get.d.ts +4 -0
  149. package/dist/commands/managedGateway/get.d.ts.map +1 -0
  150. package/dist/commands/managedGateway/get.js +71 -0
  151. package/dist/commands/managedGateway/haproxy-stats.d.ts +6 -0
  152. package/dist/commands/managedGateway/haproxy-stats.d.ts.map +1 -0
  153. package/dist/commands/managedGateway/haproxy-stats.js +131 -0
  154. package/dist/commands/managedGateway/list.d.ts +4 -0
  155. package/dist/commands/managedGateway/list.d.ts.map +1 -0
  156. package/dist/commands/managedGateway/list.js +50 -0
  157. package/dist/commands/managedGateway/logs.d.ts +10 -0
  158. package/dist/commands/managedGateway/logs.d.ts.map +1 -0
  159. package/dist/commands/managedGateway/logs.js +100 -0
  160. package/dist/commands/managedGateway/reboot.d.ts +5 -0
  161. package/dist/commands/managedGateway/reboot.d.ts.map +1 -0
  162. package/dist/commands/managedGateway/reboot.js +95 -0
  163. package/dist/commands/managedGateway/resync.d.ts +10 -0
  164. package/dist/commands/managedGateway/resync.d.ts.map +1 -0
  165. package/dist/commands/managedGateway/resync.js +69 -0
  166. package/dist/commands/managedGateway/ssh.d.ts +4 -0
  167. package/dist/commands/managedGateway/ssh.d.ts.map +1 -0
  168. package/dist/commands/managedGateway/ssh.js +130 -0
  169. package/dist/commands/managedGateway/wipe-logs.d.ts +4 -0
  170. package/dist/commands/managedGateway/wipe-logs.d.ts.map +1 -0
  171. package/dist/commands/managedGateway/wipe-logs.js +67 -0
  172. package/dist/commands/managedGateway/wireguard.d.ts +4 -0
  173. package/dist/commands/managedGateway/wireguard.d.ts.map +1 -0
  174. package/dist/commands/managedGateway/wireguard.js +68 -0
  175. package/dist/commands/managedGateway.d.ts.map +1 -1
  176. package/dist/commands/managedGateway.js +61 -117
  177. package/dist/commands/utils/config-validator.d.ts +5 -5
  178. package/dist/commands/utils/config-validator.d.ts.map +1 -1
  179. package/dist/commands/utils/config-validator.js +8 -8
  180. package/dist/commands/utils/output-formatter.js +1 -1
  181. package/dist/config/app-config.d.ts +1 -1
  182. package/dist/config/app-config.js +2 -2
  183. package/dist/index.js +0 -3
  184. package/dist/services/LocalAgentManager.d.ts.map +1 -1
  185. package/dist/services/LocalAgentManager.js +4 -2
  186. package/dist/services/agentDeployment/AgentDeploymentService.d.ts +35 -0
  187. package/dist/services/agentDeployment/AgentDeploymentService.d.ts.map +1 -0
  188. package/dist/services/agentDeployment/AgentDeploymentService.js +35 -0
  189. package/dist/services/application/ApplicationService.d.ts +5 -4
  190. package/dist/services/application/ApplicationService.d.ts.map +1 -1
  191. package/dist/services/application/ApplicationService.js +22 -35
  192. package/dist/services/auth/AuthService.d.ts +5 -5
  193. package/dist/services/auth/AuthService.d.ts.map +1 -1
  194. package/dist/services/auth/AuthService.js +11 -58
  195. package/dist/services/daemon/DaemonManagerFactory.d.ts +2 -0
  196. package/dist/services/daemon/DaemonManagerFactory.d.ts.map +1 -1
  197. package/dist/services/daemon/DaemonManagerFactory.js +14 -6
  198. package/dist/services/diagnostics/DiagnosticsService.d.ts +89 -0
  199. package/dist/services/diagnostics/DiagnosticsService.d.ts.map +1 -0
  200. package/dist/services/diagnostics/DiagnosticsService.js +37 -0
  201. package/dist/services/edgible.d.ts +6 -4
  202. package/dist/services/edgible.d.ts.map +1 -1
  203. package/dist/services/edgible.js +36 -86
  204. package/dist/services/gateway/GatewayService.d.ts +5 -6
  205. package/dist/services/gateway/GatewayService.d.ts.map +1 -1
  206. package/dist/services/gateway/GatewayService.js +22 -36
  207. package/dist/services/instances.d.ts +34 -0
  208. package/dist/services/instances.d.ts.map +1 -0
  209. package/dist/services/instances.js +64 -0
  210. package/dist/services/managedGateway/ManagedGatewayService.d.ts +75 -0
  211. package/dist/services/managedGateway/ManagedGatewayService.d.ts.map +1 -0
  212. package/dist/services/managedGateway/ManagedGatewayService.js +44 -0
  213. package/dist/services/token/TokenManager.d.ts +56 -0
  214. package/dist/services/token/TokenManager.d.ts.map +1 -0
  215. package/dist/services/token/TokenManager.js +85 -0
  216. package/dist/types/validation/schemas.d.ts +22 -22
  217. package/dist/utils/PlatformDetector.d.ts +2 -0
  218. package/dist/utils/PlatformDetector.d.ts.map +1 -1
  219. package/dist/utils/PlatformDetector.js +5 -34
  220. package/dist/validation/schemas.d.ts +6 -6
  221. package/package.json +1 -1
@@ -0,0 +1,11 @@
1
+ import { LocalAgentManager } from '../../services/LocalAgentManager';
2
+ import { EdgibleService } from '../../services/edgible';
3
+ import { Logger } from '../../utils/logger';
4
+ import { ConfigManager } from '../../state/config';
5
+ import { AuthService } from '../../services/auth/AuthService';
6
+ export declare function handleAgentInstall(options: {
7
+ type?: string;
8
+ dev?: boolean;
9
+ local?: boolean;
10
+ }, logger: Logger, configManager: ConfigManager, edgibleService: EdgibleService, authService: AuthService, agentManager: LocalAgentManager): Promise<void>;
11
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +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,CAAA;CAAE,EAC1D,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAkZf"}
@@ -0,0 +1,399 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.handleAgentInstall = handleAgentInstall;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const inquirer_1 = __importDefault(require("inquirer"));
42
+ const os = __importStar(require("os"));
43
+ const config_validator_1 = require("../utils/config-validator");
44
+ const DependencyInstaller_1 = require("../../services/DependencyInstaller");
45
+ const PlatformDetector_1 = require("../../utils/PlatformDetector");
46
+ const DaemonManagerFactory_1 = require("../../services/daemon/DaemonManagerFactory");
47
+ const PathResolver_1 = require("../../utils/PathResolver");
48
+ const urls_1 = require("../../utils/urls");
49
+ const sudo_checker_1 = require("../../utils/sudo-checker");
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;
54
+ }
55
+ (0, config_validator_1.validateConfig)(configManager, {
56
+ requireAuth: true,
57
+ requireOrganization: true,
58
+ });
59
+ console.log(chalk_1.default.blue.bold('\n═══════════════════════════════════════════'));
60
+ console.log(chalk_1.default.blue.bold(' Edgible Agent Installation'));
61
+ console.log(chalk_1.default.blue.bold('═══════════════════════════════════════════\n'));
62
+ // Step 1: Check platform and root privileges
63
+ const platform = PlatformDetector_1.PlatformDetector.getPlatform();
64
+ const isRoot = await PlatformDetector_1.PlatformDetector.isRoot();
65
+ console.log(chalk_1.default.gray(`Platform: ${platform}`));
66
+ console.log(chalk_1.default.gray(`Running as ${isRoot ? 'root/administrator' : 'regular user'}\n`));
67
+ if (!isRoot) {
68
+ console.log(chalk_1.default.yellow('⚠ ' + PlatformDetector_1.PlatformDetector.getRootRequirementMessage()));
69
+ console.log(chalk_1.default.gray(' Some installation options require elevated privileges.\n'));
70
+ }
71
+ // Step 2: Device Selection (moved from start command)
72
+ const config = configManager.getConfig();
73
+ let deviceId = config.deviceId;
74
+ let devicePassword = config.devicePassword;
75
+ console.log(chalk_1.default.blue('📱 Device Selection'));
76
+ console.log(chalk_1.default.gray('Select which serving device this agent should represent:\n'));
77
+ try {
78
+ // Fetch available serving devices
79
+ const servingDevicesResp = await edgibleService.listServingDevices();
80
+ const servingDevices = servingDevicesResp?.devices || [];
81
+ if (servingDevices.length > 0) {
82
+ // Show list of devices to select from
83
+ const deviceChoices = servingDevices.map((d) => {
84
+ const isCurrentDevice = config.deviceId === d.id;
85
+ const displayName = `${d.name || d.id}${d.description ? ` - ${d.description}` : ''}${isCurrentDevice ? chalk_1.default.gray(' (current)') : ''}`;
86
+ return {
87
+ name: displayName,
88
+ value: d.id
89
+ };
90
+ });
91
+ // Add option to create new device
92
+ deviceChoices.push({
93
+ name: chalk_1.default.cyan('➕ Create new serving device'),
94
+ value: '__create_new__'
95
+ });
96
+ const { selectedDeviceId } = await inquirer_1.default.prompt([{
97
+ type: 'list',
98
+ name: 'selectedDeviceId',
99
+ message: 'Select serving device:',
100
+ choices: deviceChoices,
101
+ default: config.deviceId || undefined
102
+ }]);
103
+ if (selectedDeviceId === '__create_new__') {
104
+ // Create new device
105
+ const deviceNameAnswer = await inquirer_1.default.prompt([{
106
+ type: 'input',
107
+ name: 'deviceName',
108
+ message: 'Enter a name for this device:',
109
+ default: `${os.hostname()}-${os.platform()}`,
110
+ validate: (input) => {
111
+ if (!input.trim()) {
112
+ return 'Device name is required';
113
+ }
114
+ return true;
115
+ }
116
+ }]);
117
+ const descriptionAnswer = await inquirer_1.default.prompt([{
118
+ type: 'input',
119
+ name: 'description',
120
+ message: 'Enter device description (optional):',
121
+ default: `Serving device: ${deviceNameAnswer.deviceName}`
122
+ }]);
123
+ console.log(chalk_1.default.gray('\nCreating device...'));
124
+ const createResponse = await edgibleService.createServingDevice({
125
+ name: deviceNameAnswer.deviceName.trim(),
126
+ description: descriptionAnswer.description.trim()
127
+ });
128
+ deviceId = createResponse.device.id;
129
+ devicePassword = createResponse.device.password;
130
+ console.log(chalk_1.default.green(`✓ Device created: ${deviceId}`));
131
+ console.log(chalk_1.default.yellow(`\n⚠ Device Password: ${devicePassword}`));
132
+ console.log(chalk_1.default.yellow('⚠ Please save this password securely!\n'));
133
+ // Verify device credentials
134
+ if (devicePassword && deviceId) {
135
+ console.log(chalk_1.default.gray('Verifying device credentials...'));
136
+ try {
137
+ const isValid = await authService.verifyDeviceCredentials(deviceId, devicePassword);
138
+ if (isValid) {
139
+ console.log(chalk_1.default.green('✓ Device credentials verified\n'));
140
+ }
141
+ }
142
+ catch (verifyError) {
143
+ console.log(chalk_1.default.yellow('⚠ Could not verify device credentials\n'));
144
+ }
145
+ }
146
+ // Save device credentials to config
147
+ configManager.updateConfig({
148
+ deviceId: deviceId,
149
+ deviceName: deviceNameAnswer.deviceName.trim(),
150
+ devicePassword: devicePassword,
151
+ deviceType: 'serving'
152
+ });
153
+ }
154
+ else {
155
+ // Use existing device - need to fetch full details to get password
156
+ deviceId = selectedDeviceId;
157
+ if (!deviceId) {
158
+ throw new Error('No device selected');
159
+ }
160
+ console.log(chalk_1.default.gray('Retrieving device credentials...\n'));
161
+ // Fetch device details to get the plaintext password
162
+ const deviceResponse = await edgibleService.getDevice(deviceId);
163
+ devicePassword = deviceResponse.device?.password || '';
164
+ if (!devicePassword) {
165
+ throw new Error('Could not retrieve device password from API');
166
+ }
167
+ // Save device credentials to config
168
+ configManager.updateConfig({
169
+ deviceId,
170
+ devicePassword,
171
+ deviceType: 'serving'
172
+ });
173
+ console.log(chalk_1.default.green(`✓ Using device: ${deviceId}\n`));
174
+ }
175
+ }
176
+ else {
177
+ // No devices exist, must create one
178
+ console.log(chalk_1.default.yellow('No serving devices found. Creating a new one...\n'));
179
+ const deviceNameAnswer = await inquirer_1.default.prompt([{
180
+ type: 'input',
181
+ name: 'deviceName',
182
+ message: 'Enter a name for this device:',
183
+ default: `${os.hostname()}-${os.platform()}`,
184
+ validate: (input) => input.trim().length > 0 || 'Device name is required'
185
+ }]);
186
+ const createResponse = await edgibleService.createServingDevice({
187
+ name: deviceNameAnswer.deviceName.trim(),
188
+ description: `Serving device: ${deviceNameAnswer.deviceName}`
189
+ });
190
+ deviceId = createResponse.device.id;
191
+ devicePassword = createResponse.device.password;
192
+ console.log(chalk_1.default.green(`✓ Device created: ${deviceId}`));
193
+ console.log(chalk_1.default.yellow(`\n⚠ Device Password: ${devicePassword}`));
194
+ console.log(chalk_1.default.yellow('⚠ Please save this password securely!\n'));
195
+ configManager.updateConfig({
196
+ deviceId,
197
+ deviceName: deviceNameAnswer.deviceName.trim(),
198
+ devicePassword,
199
+ deviceType: 'serving'
200
+ });
201
+ }
202
+ }
203
+ catch (error) {
204
+ logger.error('Error during device selection', error);
205
+ const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';
206
+ console.error(chalk_1.default.red('Error during device selection:'), errorMessage);
207
+ throw error;
208
+ }
209
+ // Verify we have device credentials
210
+ if (!deviceId || !devicePassword) {
211
+ throw new Error('Device credentials are required');
212
+ }
213
+ // Step 3: Installation Method Selection
214
+ console.log(chalk_1.default.blue('🔧 Installation Method'));
215
+ console.log(chalk_1.default.gray('Choose how to run the agent:\n'));
216
+ const availableOptions = await PlatformDetector_1.PlatformDetector.getAvailableOptions();
217
+ if (availableOptions.length === 0) {
218
+ console.error(chalk_1.default.red('✗ No installation methods available on this system'));
219
+ console.error(chalk_1.default.yellow('\nThe agent requires native daemon support:'));
220
+ console.error(chalk_1.default.yellow(' - Linux: systemd (requires root/sudo)'));
221
+ console.error(chalk_1.default.yellow(' - macOS: launchd (requires root/sudo)'));
222
+ console.error(chalk_1.default.yellow(' - Windows: Windows Service (requires Administrator)'));
223
+ console.error(chalk_1.default.yellow('\nPlease ensure you have the appropriate privileges and daemon support.'));
224
+ return;
225
+ }
226
+ let selectedType;
227
+ if (options.type) {
228
+ // Type specified via flag - validate it's a supported daemon type
229
+ const supportedTypes = ['systemd', 'launchd', 'windows-service'];
230
+ if (!supportedTypes.includes(options.type)) {
231
+ console.error(chalk_1.default.red(`✗ Installation type '${options.type}' is not supported`));
232
+ console.error(chalk_1.default.yellow(` Only daemon installations are supported: ${supportedTypes.join(', ')}`));
233
+ console.error(chalk_1.default.yellow(` Docker and Podman installations are no longer available`));
234
+ return;
235
+ }
236
+ selectedType = options.type;
237
+ const option = availableOptions.find(opt => opt.type === selectedType);
238
+ if (!option) {
239
+ console.error(chalk_1.default.red(`✗ Installation type '${selectedType}' not available on this platform`));
240
+ console.error(chalk_1.default.yellow(` This installation type is not supported on ${platform}`));
241
+ return;
242
+ }
243
+ if (!option.available) {
244
+ console.error(chalk_1.default.red(`✗ Installation type '${selectedType}' is not available on this system`));
245
+ console.error(chalk_1.default.yellow(` Requirements: ${option.requires.join(', ')}`));
246
+ return;
247
+ }
248
+ }
249
+ else {
250
+ // Interactive selection
251
+ const choices = availableOptions.map(opt => {
252
+ const status = opt.available ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
253
+ const rootBadge = opt.requiresRoot ? chalk_1.default.yellow('[requires root]') : '';
254
+ return {
255
+ name: `${status} ${opt.name} ${rootBadge}\n ${chalk_1.default.gray(opt.description)}\n ${chalk_1.default.gray('Pros:')} ${opt.pros.join(', ')}\n ${chalk_1.default.gray('Best for:')} ${opt.bestFor}`,
256
+ value: opt.type,
257
+ disabled: !opt.available ? `Requires: ${opt.requires.join(', ')}` : false
258
+ };
259
+ });
260
+ const { installType } = await inquirer_1.default.prompt([{
261
+ type: 'list',
262
+ name: 'installType',
263
+ message: 'Select installation method:',
264
+ choices,
265
+ pageSize: 10
266
+ }]);
267
+ selectedType = installType;
268
+ }
269
+ console.log(chalk_1.default.green(`\n✓ Selected: ${selectedType}\n`));
270
+ // Validate --local flag is only used with native service managers
271
+ if (options.local && selectedType !== 'systemd' && selectedType !== 'launchd' && selectedType !== 'windows-service') {
272
+ console.error(chalk_1.default.red('✗ --local flag is only supported with native daemon installations'));
273
+ console.error(chalk_1.default.yellow(' Supported with: systemd, launchd, windows-service'));
274
+ return;
275
+ }
276
+ // Step 4: Check and Install Dependencies
277
+ // All supported installation types are native daemons, so always check dependencies
278
+ {
279
+ console.log(chalk_1.default.blue('🔍 Checking System Dependencies'));
280
+ console.log(chalk_1.default.gray('Verifying required tools are installed...\n'));
281
+ const dependencyInstaller = new DependencyInstaller_1.DependencyInstaller();
282
+ try {
283
+ await dependencyInstaller.checkAndInstallDependencies({
284
+ includeWireGuardGo: false, // Use kernel WireGuard by default
285
+ includeIptables: platform === 'linux', // Only check iptables on Linux
286
+ autoInstall: false // Prompt user for installation
287
+ });
288
+ console.log(chalk_1.default.green('✓ Dependencies verified\n'));
289
+ }
290
+ catch (error) {
291
+ console.error(chalk_1.default.red('✗ Dependency check failed'));
292
+ console.error(chalk_1.default.red(` ${error instanceof Error ? error.message : String(error)}`));
293
+ console.log(chalk_1.default.yellow('\n⚠ Some dependencies are missing. The agent may not function correctly.'));
294
+ console.log(chalk_1.default.yellow(' You can install them manually or run: edgible agent setup --auto-install\n'));
295
+ // Ask if user wants to continue anyway
296
+ const { continueAnyway } = await inquirer_1.default.prompt([{
297
+ type: 'confirm',
298
+ name: 'continueAnyway',
299
+ message: 'Continue with installation anyway?',
300
+ default: false
301
+ }]);
302
+ if (!continueAnyway) {
303
+ console.log(chalk_1.default.gray('Installation cancelled.'));
304
+ return;
305
+ }
306
+ }
307
+ }
308
+ // Step 5: Install Agent Files
309
+ let agentPath;
310
+ // All supported types are native daemons, so use system path
311
+ const useSystemPath = true;
312
+ const configPath = PathResolver_1.PathResolver.getAgentConfigPath(useSystemPath);
313
+ // For native daemon installations, download/install agent files
314
+ console.log(chalk_1.default.blue('📦 Installing Agent Files'));
315
+ const installResult = await agentManager.installLocalAgent({
316
+ installationType: selectedType,
317
+ installFromLocal: options.local,
318
+ autoStart: false
319
+ });
320
+ if (!installResult.success) {
321
+ console.error(chalk_1.default.red('✗ Failed to install agent files'));
322
+ console.error(chalk_1.default.red(` ${installResult.error}`));
323
+ return;
324
+ }
325
+ agentPath = installResult.path || configPath;
326
+ console.log(chalk_1.default.green('✓ Agent files installed\n'));
327
+ // Step 6: Configure Daemon
328
+ console.log(chalk_1.default.blue('⚙️ Configuring Daemon'));
329
+ // Create agent config at the correct path for this installation type
330
+ await agentManager.updateAgentConfig(configPath);
331
+ const daemonConfig = {
332
+ deviceId,
333
+ devicePassword,
334
+ deviceType: 'serving',
335
+ apiBaseUrl: (0, urls_1.getApiBaseUrl)(),
336
+ organizationId: config.organizationId,
337
+ configPath,
338
+ agentPath
339
+ };
340
+ const daemonManager = DaemonManagerFactory_1.DaemonManagerFactory.create(selectedType);
341
+ try {
342
+ await daemonManager.install(daemonConfig);
343
+ console.log(chalk_1.default.green('✓ Daemon configured\n'));
344
+ }
345
+ catch (error) {
346
+ console.error(chalk_1.default.red('✗ Failed to configure daemon'));
347
+ console.error(chalk_1.default.red(` ${error instanceof Error ? error.message : String(error)}`));
348
+ return;
349
+ }
350
+ // Save installation type to config
351
+ configManager.updateConfig({
352
+ agentInstallationType: selectedType,
353
+ agentServiceName: 'edgible-agent',
354
+ agentContainerName: undefined, // No container installations supported
355
+ agentDataPath: configPath
356
+ });
357
+ // Step 7: Enable and Start
358
+ console.log(chalk_1.default.blue('🚀 Starting Agent'));
359
+ try {
360
+ await daemonManager.enable();
361
+ console.log(chalk_1.default.green('✓ Enabled for startup\n'));
362
+ }
363
+ catch (error) {
364
+ console.warn(chalk_1.default.yellow(`⚠ Could not enable auto-start: ${error instanceof Error ? error.message : String(error)}`));
365
+ }
366
+ try {
367
+ await daemonManager.start();
368
+ console.log(chalk_1.default.green('✓ Agent started\n'));
369
+ }
370
+ catch (error) {
371
+ console.error(chalk_1.default.red('✗ Failed to start agent'));
372
+ console.error(chalk_1.default.red(` ${error instanceof Error ? error.message : String(error)}`));
373
+ return;
374
+ }
375
+ // Wait a moment for agent to initialize
376
+ await new Promise(resolve => setTimeout(resolve, 3000));
377
+ // Show status
378
+ console.log(chalk_1.default.blue('📊 Agent Status'));
379
+ try {
380
+ const status = await daemonManager.status();
381
+ console.log(` Running: ${status.running ? chalk_1.default.green('Yes') : chalk_1.default.red('No')}`);
382
+ console.log(` Enabled: ${status.enabled ? chalk_1.default.green('Yes') : chalk_1.default.gray('No')}`);
383
+ if (status.pid) {
384
+ console.log(` PID: ${status.pid}`);
385
+ }
386
+ }
387
+ catch (error) {
388
+ console.warn(chalk_1.default.yellow(' Could not fetch status'));
389
+ }
390
+ console.log(chalk_1.default.blue.bold('\n═══════════════════════════════════════════'));
391
+ console.log(chalk_1.default.green.bold(' ✓ Installation Complete!'));
392
+ console.log(chalk_1.default.blue.bold('═══════════════════════════════════════════\n'));
393
+ console.log(chalk_1.default.gray('Next steps:'));
394
+ console.log(chalk_1.default.gray(` • View status: ${chalk_1.default.white('edgible agent status')}`));
395
+ console.log(chalk_1.default.gray(` • View logs: ${chalk_1.default.white('edgible agent logs --follow')}`));
396
+ console.log(chalk_1.default.gray(` • Stop agent: ${chalk_1.default.white('edgible agent stop')}`));
397
+ console.log(chalk_1.default.gray(` • Restart agent: ${chalk_1.default.white('edgible agent restart')}\n`));
398
+ }
399
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1,12 @@
1
+ import { ConfigManager } from '../../state/config';
2
+ export declare function handleAgentLogs(options: {
3
+ follow?: boolean;
4
+ lines?: string;
5
+ level?: string;
6
+ module?: string;
7
+ comprehensive?: boolean;
8
+ singleLine?: boolean;
9
+ stdout?: boolean;
10
+ stderr?: boolean;
11
+ }, configManager: ConfigManager): Promise<void>;
12
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/logs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAInD,wBAAsB,eAAe,CACnC,OAAO,EAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,EACD,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CAqEf"}
@@ -0,0 +1,77 @@
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.handleAgentLogs = handleAgentLogs;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const DaemonManagerFactory_1 = require("../../services/daemon/DaemonManagerFactory");
9
+ const log_formatter_1 = require("../../utils/log-formatter");
10
+ async function handleAgentLogs(options, configManager) {
11
+ const config = configManager.getConfig();
12
+ if (!config.agentInstallationType) {
13
+ console.log(chalk_1.default.yellow('⚠ Agent installation type not found in config'));
14
+ console.log(chalk_1.default.gray(' Run "edgible agent install" to install the agent\n'));
15
+ return;
16
+ }
17
+ const daemonManager = DaemonManagerFactory_1.DaemonManagerFactory.fromConfig(config.agentInstallationType);
18
+ if (!daemonManager) {
19
+ console.error(chalk_1.default.red('✗ Could not create daemon manager'));
20
+ return;
21
+ }
22
+ const lines = options.lines ? parseInt(options.lines, 10) : 100;
23
+ const follow = options.follow || false;
24
+ const level = options.level || 'all';
25
+ const module = options.module;
26
+ const comprehensive = options.comprehensive || false;
27
+ const singleLine = options.singleLine || false;
28
+ try {
29
+ const rawLogs = await daemonManager.logs(follow, lines, {
30
+ stdout: options.stdout,
31
+ stderr: options.stderr
32
+ });
33
+ // For follow mode, logs are streamed directly and rawLogs will be empty
34
+ if (follow) {
35
+ return;
36
+ }
37
+ // For comprehensive mode, just output raw logs
38
+ if (comprehensive) {
39
+ console.log(rawLogs);
40
+ }
41
+ else {
42
+ // Parse and format JSON logs (works for both systemd and launchd)
43
+ // Both output JSON in production mode, launchd just writes pure JSON lines
44
+ const formattedLogs = (0, log_formatter_1.processLogs)(rawLogs, {
45
+ module: module,
46
+ level: level,
47
+ singleLine: singleLine
48
+ });
49
+ if (formattedLogs.trim()) {
50
+ console.log(formattedLogs);
51
+ }
52
+ else {
53
+ // No formatted logs found - could be no matches or non-JSON logs
54
+ if (module || (level && level !== 'all')) {
55
+ // Filters were applied but no matches
56
+ if (module) {
57
+ console.log(chalk_1.default.yellow(`No logs found for module(s): ${module}`));
58
+ }
59
+ else {
60
+ console.log(chalk_1.default.yellow(`No logs found for level: ${level}`));
61
+ }
62
+ }
63
+ else {
64
+ // No filters, but no JSON logs found - might be plain text logs
65
+ // Output raw logs as fallback
66
+ console.log(rawLogs);
67
+ }
68
+ }
69
+ }
70
+ }
71
+ catch (error) {
72
+ console.error(chalk_1.default.red('✗ Failed to read logs'));
73
+ console.error(chalk_1.default.red(` ${error instanceof Error ? error.message : String(error)}\n`));
74
+ throw error;
75
+ }
76
+ }
77
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1,4 @@
1
+ import { Logger } from '../../utils/logger';
2
+ import { ConfigManager } from '../../state/config';
3
+ export declare function handleAgentRestart(logger: Logger, configManager: ConfigManager): Promise<void>;
4
+ //# sourceMappingURL=restart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/restart.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
@@ -0,0 +1,33 @@
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.handleAgentRestart = handleAgentRestart;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const DaemonManagerFactory_1 = require("../../services/daemon/DaemonManagerFactory");
9
+ async function handleAgentRestart(logger, configManager) {
10
+ const config = configManager.getConfig();
11
+ if (!config.agentInstallationType) {
12
+ console.log(chalk_1.default.yellow('⚠ Agent installation type not found in config'));
13
+ console.log(chalk_1.default.gray(' Run "edgible agent install" to install the agent\n'));
14
+ return;
15
+ }
16
+ logger.info('Restarting local agent');
17
+ console.log(chalk_1.default.blue('Restarting agent...\n'));
18
+ const daemonManager = DaemonManagerFactory_1.DaemonManagerFactory.fromConfig(config.agentInstallationType);
19
+ if (!daemonManager) {
20
+ console.error(chalk_1.default.red('✗ Could not create daemon manager'));
21
+ return;
22
+ }
23
+ try {
24
+ await daemonManager.restart();
25
+ console.log(chalk_1.default.green('✓ Agent restarted successfully\n'));
26
+ }
27
+ catch (error) {
28
+ console.error(chalk_1.default.red('✗ Failed to restart agent'));
29
+ console.error(chalk_1.default.red(` ${error instanceof Error ? error.message : String(error)}\n`));
30
+ throw error;
31
+ }
32
+ }
33
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1,8 @@
1
+ import { Logger } from '../../utils/logger';
2
+ import { ConfigManager } from '../../state/config';
3
+ import { LocalAgentManager } from '../../services/LocalAgentManager';
4
+ export declare function handleAgentSetLogLevel(options: {
5
+ level?: string;
6
+ restart?: boolean;
7
+ }, logger: Logger, configManager: ConfigManager, agentManager: LocalAgentManager): Promise<void>;
8
+ //# sourceMappingURL=set-log-level.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-log-level.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/set-log-level.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAIrE,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAC9C,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA6Ff"}