@padua/cli 2.0.17 → 2.0.19

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,21 @@
1
+ import { EcsCluster, EcsService, EcsTask, EcsContainer } from './types';
2
+ /**
3
+ * List ECS clusters in the account
4
+ */
5
+ export declare function listClusters(profile: string, verbose?: boolean): EcsCluster[];
6
+ /**
7
+ * List ECS services in a cluster
8
+ */
9
+ export declare function listServices(cluster: string, profile: string, verbose?: boolean): EcsService[];
10
+ /**
11
+ * List running tasks for a service in a cluster
12
+ */
13
+ export declare function listTasks(cluster: string, service: string, profile: string, verbose?: boolean): EcsTask[];
14
+ /**
15
+ * Describe a task to get container details
16
+ */
17
+ export declare function describeTask(cluster: string, taskId: string, profile: string, verbose?: boolean): {
18
+ task: EcsTask;
19
+ containers: EcsContainer[];
20
+ };
21
+ //# sourceMappingURL=aws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/aws.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAsB,MAAM,SAAS,CAAC;AAI5F;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,UAAU,EAAE,CA4Cd;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,UAAU,EAAE,CA6Cd;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,EAAE,CAuFX;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,YAAY,EAAE,CAAA;CAAE,CA4D/C"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listClusters = listClusters;
4
+ exports.listServices = listServices;
5
+ exports.listTasks = listTasks;
6
+ exports.describeTask = describeTask;
7
+ const child_process_1 = require("child_process");
8
+ const utils_1 = require("../login/utils");
9
+ const types_1 = require("./types");
10
+ const AWS_TIMEOUT_MS = 30000;
11
+ /**
12
+ * List ECS clusters in the account
13
+ */
14
+ function listClusters(profile, verbose) {
15
+ if (verbose) {
16
+ console.log(' [verbose] Listing ECS clusters...');
17
+ }
18
+ const result = (0, child_process_1.spawnSync)('aws', [
19
+ 'ecs',
20
+ 'list-clusters',
21
+ '--query', 'clusterArns',
22
+ '--output', 'json',
23
+ '--profile', profile,
24
+ ], {
25
+ shell: false,
26
+ timeout: AWS_TIMEOUT_MS,
27
+ maxBuffer: 1024 * 1024,
28
+ stdio: ['pipe', 'pipe', 'pipe'],
29
+ env: { ...(0, utils_1.getSubprocessEnv)(), AWS_PROFILE: profile },
30
+ });
31
+ if (result.error) {
32
+ throw new Error(`Failed to list ECS clusters: ${(0, utils_1.sanitizeOutput)(result.error.message)}`);
33
+ }
34
+ if (result.status !== 0) {
35
+ const stderr = result.stderr?.toString() || '';
36
+ throw new Error(`Failed to list ECS clusters: ${(0, utils_1.sanitizeOutput)(stderr)}`);
37
+ }
38
+ const arns = JSON.parse(result.stdout?.toString() || '[]');
39
+ const clusters = arns.map((arn) => ({
40
+ name: (0, types_1.extractNameFromArn)(arn),
41
+ arn,
42
+ }));
43
+ if (verbose) {
44
+ console.log(` [verbose] Found ${clusters.length} clusters`);
45
+ }
46
+ return clusters.sort((a, b) => a.name.localeCompare(b.name));
47
+ }
48
+ /**
49
+ * List ECS services in a cluster
50
+ */
51
+ function listServices(cluster, profile, verbose) {
52
+ if (verbose) {
53
+ console.log(` [verbose] Listing services in cluster: ${cluster}`);
54
+ }
55
+ const result = (0, child_process_1.spawnSync)('aws', [
56
+ 'ecs',
57
+ 'list-services',
58
+ '--cluster', cluster,
59
+ '--query', 'serviceArns',
60
+ '--output', 'json',
61
+ '--profile', profile,
62
+ ], {
63
+ shell: false,
64
+ timeout: AWS_TIMEOUT_MS,
65
+ maxBuffer: 1024 * 1024,
66
+ stdio: ['pipe', 'pipe', 'pipe'],
67
+ env: { ...(0, utils_1.getSubprocessEnv)(), AWS_PROFILE: profile },
68
+ });
69
+ if (result.error) {
70
+ throw new Error(`Failed to list services: ${(0, utils_1.sanitizeOutput)(result.error.message)}`);
71
+ }
72
+ if (result.status !== 0) {
73
+ const stderr = result.stderr?.toString() || '';
74
+ throw new Error(`Failed to list services: ${(0, utils_1.sanitizeOutput)(stderr)}`);
75
+ }
76
+ const arns = JSON.parse(result.stdout?.toString() || '[]');
77
+ const services = arns.map((arn) => ({
78
+ name: (0, types_1.extractNameFromArn)(arn),
79
+ arn,
80
+ }));
81
+ if (verbose) {
82
+ console.log(` [verbose] Found ${services.length} services`);
83
+ }
84
+ return services.sort((a, b) => a.name.localeCompare(b.name));
85
+ }
86
+ /**
87
+ * List running tasks for a service in a cluster
88
+ */
89
+ function listTasks(cluster, service, profile, verbose) {
90
+ if (verbose) {
91
+ console.log(` [verbose] Listing running tasks for service: ${service}`);
92
+ }
93
+ // First, get task ARNs
94
+ const listResult = (0, child_process_1.spawnSync)('aws', [
95
+ 'ecs',
96
+ 'list-tasks',
97
+ '--cluster', cluster,
98
+ '--service-name', service,
99
+ '--desired-status', 'RUNNING',
100
+ '--query', 'taskArns',
101
+ '--output', 'json',
102
+ '--profile', profile,
103
+ ], {
104
+ shell: false,
105
+ timeout: AWS_TIMEOUT_MS,
106
+ maxBuffer: 1024 * 1024,
107
+ stdio: ['pipe', 'pipe', 'pipe'],
108
+ env: { ...(0, utils_1.getSubprocessEnv)(), AWS_PROFILE: profile },
109
+ });
110
+ if (listResult.error) {
111
+ throw new Error(`Failed to list tasks: ${(0, utils_1.sanitizeOutput)(listResult.error.message)}`);
112
+ }
113
+ if (listResult.status !== 0) {
114
+ const stderr = listResult.stderr?.toString() || '';
115
+ throw new Error(`Failed to list tasks: ${(0, utils_1.sanitizeOutput)(stderr)}`);
116
+ }
117
+ const taskArns = JSON.parse(listResult.stdout?.toString() || '[]');
118
+ if (taskArns.length === 0) {
119
+ return [];
120
+ }
121
+ // Describe tasks to get details
122
+ const describeResult = (0, child_process_1.spawnSync)('aws', [
123
+ 'ecs',
124
+ 'describe-tasks',
125
+ '--cluster', cluster,
126
+ '--tasks', ...taskArns,
127
+ '--query', 'tasks[].{arn:taskArn,lastStatus:lastStatus,startedAt:startedAt}',
128
+ '--output', 'json',
129
+ '--profile', profile,
130
+ ], {
131
+ shell: false,
132
+ timeout: AWS_TIMEOUT_MS,
133
+ maxBuffer: 1024 * 1024,
134
+ stdio: ['pipe', 'pipe', 'pipe'],
135
+ env: { ...(0, utils_1.getSubprocessEnv)(), AWS_PROFILE: profile },
136
+ });
137
+ if (describeResult.error) {
138
+ throw new Error(`Failed to describe tasks: ${(0, utils_1.sanitizeOutput)(describeResult.error.message)}`);
139
+ }
140
+ if (describeResult.status !== 0) {
141
+ const stderr = describeResult.stderr?.toString() || '';
142
+ throw new Error(`Failed to describe tasks: ${(0, utils_1.sanitizeOutput)(stderr)}`);
143
+ }
144
+ const tasksData = JSON.parse(describeResult.stdout?.toString() || '[]');
145
+ const tasks = tasksData.map((t) => ({
146
+ taskId: (0, types_1.extractNameFromArn)(t.arn),
147
+ arn: t.arn,
148
+ lastStatus: t.lastStatus,
149
+ startedAt: t.startedAt,
150
+ }));
151
+ if (verbose) {
152
+ console.log(` [verbose] Found ${tasks.length} running tasks`);
153
+ }
154
+ return tasks;
155
+ }
156
+ /**
157
+ * Describe a task to get container details
158
+ */
159
+ function describeTask(cluster, taskId, profile, verbose) {
160
+ if (verbose) {
161
+ console.log(` [verbose] Describing task: ${taskId}`);
162
+ }
163
+ const result = (0, child_process_1.spawnSync)('aws', [
164
+ 'ecs',
165
+ 'describe-tasks',
166
+ '--cluster', cluster,
167
+ '--tasks', taskId,
168
+ '--output', 'json',
169
+ '--profile', profile,
170
+ ], {
171
+ shell: false,
172
+ timeout: AWS_TIMEOUT_MS,
173
+ maxBuffer: 1024 * 1024,
174
+ stdio: ['pipe', 'pipe', 'pipe'],
175
+ env: { ...(0, utils_1.getSubprocessEnv)(), AWS_PROFILE: profile },
176
+ });
177
+ if (result.error) {
178
+ throw new Error(`Failed to describe task: ${(0, utils_1.sanitizeOutput)(result.error.message)}`);
179
+ }
180
+ if (result.status !== 0) {
181
+ const stderr = result.stderr?.toString() || '';
182
+ throw new Error(`Failed to describe task: ${(0, utils_1.sanitizeOutput)(stderr)}`);
183
+ }
184
+ const data = JSON.parse(result.stdout?.toString() || '{}');
185
+ const taskData = data.tasks?.[0];
186
+ if (!taskData) {
187
+ throw new Error(`Task not found: ${taskId}`);
188
+ }
189
+ const task = {
190
+ taskId: (0, types_1.extractNameFromArn)(taskData.taskArn),
191
+ arn: taskData.taskArn,
192
+ lastStatus: taskData.lastStatus,
193
+ startedAt: taskData.startedAt,
194
+ };
195
+ const containers = (taskData.containers || []).map((c) => ({
196
+ name: c.name,
197
+ runtimeId: c.runtimeId,
198
+ lastStatus: c.lastStatus,
199
+ }));
200
+ if (verbose) {
201
+ console.log(` [verbose] Task has ${containers.length} containers: ${containers.map((c) => c.name).join(', ')}`);
202
+ }
203
+ return { task, containers };
204
+ }
205
+ //# sourceMappingURL=aws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws.js","sourceRoot":"","sources":["../../../src/commands/exec/aws.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+ import { ExecOptions } from './types';
3
+ /**
4
+ * Exec command - open a shell in a running ECS container via SSM
5
+ */
6
+ export declare const execCommand: Command;
7
+ /**
8
+ * Handle the exec command
9
+ */
10
+ declare function handleExec(options: ExecOptions): Promise<void>;
11
+ export { handleExec };
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAOtC;;GAEG;AACH,eAAO,MAAM,WAAW,SAUH,CAAC;AAmBtB;;GAEG;AACH,iBAAe,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8N7D;AAGD,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,261 @@
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.execCommand = void 0;
7
+ exports.handleExec = handleExec;
8
+ const commander_1 = require("commander");
9
+ const child_process_1 = require("child_process");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const inquirer_1 = __importDefault(require("inquirer"));
12
+ const aws_1 = require("./aws");
13
+ const prerequisites_1 = require("../init/prerequisites");
14
+ const config_1 = require("../login/config");
15
+ const types_1 = require("../login/types");
16
+ const utils_1 = require("../login/utils");
17
+ /**
18
+ * Exec command - open a shell in a running ECS container via SSM
19
+ */
20
+ exports.execCommand = new commander_1.Command('exec')
21
+ .description('Open a shell in a running ECS container via SSM')
22
+ .option('-p, --profile <name>', 'AWS profile to use')
23
+ .option('-c, --cluster <name>', 'ECS cluster name')
24
+ .option('-s, --service <name>', 'ECS service name')
25
+ .option('-t, --task <id>', 'ECS task ID')
26
+ .option('--container <name>', 'Container name')
27
+ .option('--command <cmd>', 'Command to run', '/bin/bash')
28
+ .option('-v, --verbose', 'Show detailed output')
29
+ .option('--no-color', 'Disable colored output')
30
+ .action(handleExec);
31
+ /**
32
+ * Format uptime from a start time string
33
+ */
34
+ function formatUptime(startedAt) {
35
+ const start = new Date(startedAt);
36
+ const now = new Date();
37
+ const diffMs = now.getTime() - start.getTime();
38
+ const hours = Math.floor(diffMs / (1000 * 60 * 60));
39
+ const minutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60));
40
+ if (hours > 0) {
41
+ return `${hours}h ${minutes}m`;
42
+ }
43
+ return `${minutes}m`;
44
+ }
45
+ /**
46
+ * Handle the exec command
47
+ */
48
+ async function handleExec(options) {
49
+ const noColor = options.noColor ?? false;
50
+ // Check prerequisites
51
+ const ssmCheck = (0, prerequisites_1.checkSessionManagerPlugin)();
52
+ if (!ssmCheck.installed) {
53
+ if (!noColor) {
54
+ console.error(chalk_1.default.red('Session Manager Plugin is required for ECS exec.'));
55
+ console.error(chalk_1.default.gray(`Install: ${ssmCheck.installUrl}`));
56
+ }
57
+ else {
58
+ console.error('Session Manager Plugin is required for ECS exec.');
59
+ console.error(`Install: ${ssmCheck.installUrl}`);
60
+ }
61
+ process.exit(1);
62
+ }
63
+ // Load config and resolve profile
64
+ const config = await (0, config_1.loadConfig)();
65
+ const profile = (0, types_1.getEffectiveProfile)({ profile: options.profile }, config ?? undefined);
66
+ try {
67
+ // Step 1: Cluster selection
68
+ let clusterName;
69
+ if (options.cluster) {
70
+ clusterName = options.cluster;
71
+ }
72
+ else {
73
+ if (!noColor) {
74
+ console.log(chalk_1.default.gray('Fetching ECS clusters...'));
75
+ }
76
+ else {
77
+ console.log('Fetching ECS clusters...');
78
+ }
79
+ const clusters = (0, aws_1.listClusters)(profile, options.verbose);
80
+ if (clusters.length === 0) {
81
+ throw new Error('No ECS clusters found in this account.');
82
+ }
83
+ const clusterAnswer = await inquirer_1.default.prompt([
84
+ {
85
+ type: 'list',
86
+ name: 'cluster',
87
+ message: 'Select cluster:',
88
+ choices: clusters.map((c) => ({ name: c.name, value: c.name })),
89
+ pageSize: 15,
90
+ },
91
+ ]);
92
+ clusterName = clusterAnswer.cluster;
93
+ }
94
+ // Step 2: Service selection
95
+ let serviceName;
96
+ if (options.service) {
97
+ serviceName = options.service;
98
+ }
99
+ else {
100
+ if (!noColor) {
101
+ console.log(chalk_1.default.gray(`Fetching services in ${clusterName}...`));
102
+ }
103
+ else {
104
+ console.log(`Fetching services in ${clusterName}...`);
105
+ }
106
+ const services = (0, aws_1.listServices)(clusterName, profile, options.verbose);
107
+ if (services.length === 0) {
108
+ throw new Error(`No services found in cluster ${clusterName}.`);
109
+ }
110
+ const serviceAnswer = await inquirer_1.default.prompt([
111
+ {
112
+ type: 'list',
113
+ name: 'service',
114
+ message: 'Select service:',
115
+ choices: services.map((s) => ({ name: s.name, value: s.name })),
116
+ pageSize: 15,
117
+ },
118
+ ]);
119
+ serviceName = serviceAnswer.service;
120
+ }
121
+ // Step 3: Task selection
122
+ let taskId;
123
+ if (options.task) {
124
+ taskId = options.task;
125
+ }
126
+ else {
127
+ if (!noColor) {
128
+ console.log(chalk_1.default.gray(`Fetching running tasks for ${serviceName}...`));
129
+ }
130
+ else {
131
+ console.log(`Fetching running tasks for ${serviceName}...`);
132
+ }
133
+ const tasks = (0, aws_1.listTasks)(clusterName, serviceName, profile, options.verbose);
134
+ if (tasks.length === 0) {
135
+ throw new Error(`No running tasks found for service ${serviceName}.`);
136
+ }
137
+ if (tasks.length === 1) {
138
+ taskId = tasks[0].taskId;
139
+ if (!noColor) {
140
+ console.log(chalk_1.default.green(`Auto-selected task: ${taskId}`));
141
+ }
142
+ else {
143
+ console.log(`Auto-selected task: ${taskId}`);
144
+ }
145
+ }
146
+ else {
147
+ const taskAnswer = await inquirer_1.default.prompt([
148
+ {
149
+ type: 'list',
150
+ name: 'task',
151
+ message: 'Select task:',
152
+ choices: tasks.map((t) => ({
153
+ name: `${t.taskId} (${t.lastStatus}${t.startedAt ? `, up ${formatUptime(t.startedAt)}` : ''})`,
154
+ value: t.taskId,
155
+ })),
156
+ pageSize: 15,
157
+ },
158
+ ]);
159
+ taskId = taskAnswer.task;
160
+ }
161
+ }
162
+ // Step 4: Container selection
163
+ let containerName;
164
+ if (options.container) {
165
+ containerName = options.container;
166
+ }
167
+ else {
168
+ const { containers } = (0, aws_1.describeTask)(clusterName, taskId, profile, options.verbose);
169
+ if (containers.length === 0) {
170
+ throw new Error(`No containers found in task ${taskId}.`);
171
+ }
172
+ if (containers.length === 1) {
173
+ containerName = containers[0].name;
174
+ if (!noColor) {
175
+ console.log(chalk_1.default.green(`Auto-selected container: ${containerName}`));
176
+ }
177
+ else {
178
+ console.log(`Auto-selected container: ${containerName}`);
179
+ }
180
+ }
181
+ else {
182
+ const containerAnswer = await inquirer_1.default.prompt([
183
+ {
184
+ type: 'list',
185
+ name: 'container',
186
+ message: 'Select container:',
187
+ choices: containers.map((c) => ({
188
+ name: `${c.name} (${c.lastStatus})`,
189
+ value: c.name,
190
+ })),
191
+ pageSize: 15,
192
+ },
193
+ ]);
194
+ containerName = containerAnswer.container;
195
+ }
196
+ }
197
+ // Step 5: Display connection summary
198
+ const command = options.command || '/bin/bash';
199
+ console.log('');
200
+ if (!noColor) {
201
+ console.log(chalk_1.default.cyan.bold('Connecting to ECS container...'));
202
+ console.log(chalk_1.default.gray(` Cluster: ${clusterName}`));
203
+ console.log(chalk_1.default.gray(` Service: ${serviceName}`));
204
+ console.log(chalk_1.default.gray(` Task: ${taskId}`));
205
+ console.log(chalk_1.default.gray(` Container: ${containerName}`));
206
+ console.log(chalk_1.default.gray(` Command: ${command}`));
207
+ console.log(chalk_1.default.gray(` Profile: ${profile}`));
208
+ }
209
+ else {
210
+ console.log('Connecting to ECS container...');
211
+ console.log(` Cluster: ${clusterName}`);
212
+ console.log(` Service: ${serviceName}`);
213
+ console.log(` Task: ${taskId}`);
214
+ console.log(` Container: ${containerName}`);
215
+ console.log(` Command: ${command}`);
216
+ console.log(` Profile: ${profile}`);
217
+ }
218
+ console.log('');
219
+ // Step 6: Spawn ECS execute-command
220
+ const child = (0, child_process_1.spawn)('aws', [
221
+ 'ecs', 'execute-command',
222
+ '--cluster', clusterName,
223
+ '--task', taskId,
224
+ '--container', containerName,
225
+ '--interactive',
226
+ '--command', command,
227
+ '--profile', profile,
228
+ ], {
229
+ stdio: 'inherit',
230
+ env: { ...(0, utils_1.getSubprocessEnv)(), AWS_PROFILE: profile },
231
+ });
232
+ child.on('error', (error) => {
233
+ throw new Error(`Failed to start ECS exec session: ${error.message}`);
234
+ });
235
+ await new Promise((resolve) => {
236
+ child.on('close', (code) => {
237
+ if (code !== 0 && code !== null) {
238
+ console.log('');
239
+ if (!noColor) {
240
+ console.log(chalk_1.default.red(`Session exited with code: ${code}`));
241
+ }
242
+ else {
243
+ console.log(`Session exited with code: ${code}`);
244
+ }
245
+ }
246
+ resolve();
247
+ });
248
+ });
249
+ }
250
+ catch (error) {
251
+ const message = error.message;
252
+ if (!noColor) {
253
+ console.error(chalk_1.default.red(`Error: ${message}`));
254
+ }
255
+ else {
256
+ console.error(`Error: ${message}`);
257
+ }
258
+ process.exit(1);
259
+ }
260
+ }
261
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/exec/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Types for the exec command
3
+ */
4
+ export interface ExecOptions {
5
+ profile?: string;
6
+ cluster?: string;
7
+ service?: string;
8
+ task?: string;
9
+ container?: string;
10
+ command?: string;
11
+ verbose?: boolean;
12
+ noColor?: boolean;
13
+ }
14
+ export interface EcsCluster {
15
+ name: string;
16
+ arn: string;
17
+ }
18
+ export interface EcsService {
19
+ name: string;
20
+ arn: string;
21
+ }
22
+ export interface EcsTask {
23
+ taskId: string;
24
+ arn: string;
25
+ lastStatus: string;
26
+ startedAt?: string;
27
+ }
28
+ export interface EcsContainer {
29
+ name: string;
30
+ runtimeId?: string;
31
+ lastStatus: string;
32
+ }
33
+ /**
34
+ * Extract short name from an ECS ARN.
35
+ * e.g. "arn:aws:ecs:us-east-1:123456789012:cluster/my-cluster" -> "my-cluster"
36
+ * e.g. "arn:aws:ecs:us-east-1:123456789012:service/my-cluster/my-service" -> "my-service"
37
+ * e.g. "arn:aws:ecs:us-east-1:123456789012:task/my-cluster/abc123" -> "abc123"
38
+ */
39
+ export declare function extractNameFromArn(arn: string): string;
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtD"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * Types for the exec command
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.extractNameFromArn = extractNameFromArn;
7
+ /**
8
+ * Extract short name from an ECS ARN.
9
+ * e.g. "arn:aws:ecs:us-east-1:123456789012:cluster/my-cluster" -> "my-cluster"
10
+ * e.g. "arn:aws:ecs:us-east-1:123456789012:service/my-cluster/my-service" -> "my-service"
11
+ * e.g. "arn:aws:ecs:us-east-1:123456789012:task/my-cluster/abc123" -> "abc123"
12
+ */
13
+ function extractNameFromArn(arn) {
14
+ const parts = arn.split('/');
15
+ return parts[parts.length - 1];
16
+ }
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/exec/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA0CH,gDAGC;AATD;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,GAAW;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC"}
@@ -6,4 +6,8 @@
6
6
  * Returns silently if up-to-date, check fails, or user declines.
7
7
  */
8
8
  export declare function checkAndPromptUpdate(noColor: boolean): Promise<void>;
9
+ /**
10
+ * Returns true if `latest` is strictly newer than `current` using semver ordering.
11
+ */
12
+ export declare function isNewerVersion(current: string, latest: string): boolean;
9
13
  //# sourceMappingURL=version-check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../../src/commands/login/version-check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D1E"}
1
+ {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../../src/commands/login/version-check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWvE"}
@@ -40,6 +40,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
40
40
  };
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.checkAndPromptUpdate = checkAndPromptUpdate;
43
+ exports.isNewerVersion = isNewerVersion;
43
44
  const fs = __importStar(require("fs"));
44
45
  const path = __importStar(require("path"));
45
46
  const readline = __importStar(require("node:readline"));
@@ -68,7 +69,7 @@ async function checkAndPromptUpdate(noColor) {
68
69
  return;
69
70
  }
70
71
  const latestVersion = result.stdout?.toString().trim();
71
- if (!latestVersion || currentVersion === latestVersion) {
72
+ if (!latestVersion || !isNewerVersion(currentVersion, latestVersion)) {
72
73
  return;
73
74
  }
74
75
  const updateMsg = `Update available: ${currentVersion} → ${latestVersion}`;
@@ -106,6 +107,23 @@ async function checkAndPromptUpdate(noColor) {
106
107
  }
107
108
  process.exit(0);
108
109
  }
110
+ /**
111
+ * Returns true if `latest` is strictly newer than `current` using semver ordering.
112
+ */
113
+ function isNewerVersion(current, latest) {
114
+ const parse = (v) => v.split('.').map(Number);
115
+ const c = parse(current);
116
+ const l = parse(latest);
117
+ for (let i = 0; i < Math.max(c.length, l.length); i++) {
118
+ const cv = c[i] ?? 0;
119
+ const lv = l[i] ?? 0;
120
+ if (lv > cv)
121
+ return true;
122
+ if (lv < cv)
123
+ return false;
124
+ }
125
+ return false;
126
+ }
109
127
  function promptYesNo(question) {
110
128
  const rl = readline.createInterface({
111
129
  input: process.stdin,
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../../src/commands/login/version-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../../src/commands/login/version-check.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYH,oDA4DC;AAKD,wCAWC;AAtFD,uCAAyB;AACzB,2CAA6B;AAC7B,wDAA0C;AAC1C,iDAA0C;AAC1C,kDAA0B;AAE1B;;;GAGG;AACI,KAAK,UAAU,oBAAoB,CAAC,OAAgB;IACzD,IAAI,cAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1E,cAAc,GAAG,WAAW,CAAC,OAAiB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,KAAK,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE;QACjE,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,CAAC;QACrE,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,qBAAqB,cAAc,MAAM,aAAa,EAAE,CAAC;IAC3E,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,yBAAS,EAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE;QACvE,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,0EAA0E,CAAC;QAC3F,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,aAAa,8BAA8B,CAAC;IAC7E,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,OAAe,EAAE,MAAc;IAC5D,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,KAAK,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/index.js CHANGED
@@ -10,6 +10,7 @@ const status_1 = require("./commands/status");
10
10
  const profile_1 = require("./commands/profile");
11
11
  const tunnel_1 = require("./commands/tunnel");
12
12
  const doctor_1 = require("./commands/doctor");
13
+ const exec_1 = require("./commands/exec");
13
14
  // Read version from package.json
14
15
  const packageJson = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', 'package.json'), 'utf-8'));
15
16
  const program = new commander_1.Command();
@@ -24,5 +25,6 @@ program.addCommand(status_1.statusCommand);
24
25
  program.addCommand(profile_1.profileCommand);
25
26
  program.addCommand(tunnel_1.tunnelCommand);
26
27
  program.addCommand(doctor_1.doctorCommand);
28
+ program.addCommand(exec_1.execCommand);
27
29
  program.parse();
28
30
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,0CAA8C;AAC9C,4CAAgD;AAChD,8CAAkD;AAClD,gDAAoD;AACpD,8CAAkD;AAClD,8CAAkD;AAElD,iCAAiC;AACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC7D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,0CAA8C;AAC9C,4CAAgD;AAChD,8CAAkD;AAClD,gDAAoD;AACpD,8CAAkD;AAClD,8CAAkD;AAClD,0CAA8C;AAE9C,iCAAiC;AACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC7D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@padua/cli",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Unified AWS infrastructure management CLI",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",