@padua/cli 2.0.16 → 2.0.18

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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,eAAO,MAAM,YAAY,SASH,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;GAEG;AACH,eAAO,MAAM,YAAY,SASH,CAAC"}
@@ -10,6 +10,7 @@ const config_1 = require("./config");
10
10
  const sso_1 = require("./sso");
11
11
  const types_1 = require("./types");
12
12
  const orchestrator_1 = require("./orchestrator");
13
+ const version_check_1 = require("./version-check");
13
14
  /**
14
15
  * Main login command — authenticates to AWS SSO, CodeArtifact, ECR, and MCP services
15
16
  */
@@ -29,6 +30,9 @@ async function handleLogin(options) {
29
30
  printProfiles(noColor);
30
31
  return;
31
32
  }
33
+ if (!options.quiet) {
34
+ await (0, version_check_1.checkAndPromptUpdate)(noColor);
35
+ }
32
36
  const config = await (0, config_1.loadConfig)();
33
37
  const profile = (0, types_1.getEffectiveProfile)(options, config ?? undefined);
34
38
  if (!(0, sso_1.profileExists)(profile)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/login/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/login/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Version check and self-update prompt for the login command
3
+ */
4
+ /**
5
+ * Check if a newer CLI version is available and prompt the user to update.
6
+ * Returns silently if up-to-date, check fails, or user declines.
7
+ */
8
+ export declare function checkAndPromptUpdate(noColor: boolean): Promise<void>;
9
+ //# sourceMappingURL=version-check.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /**
3
+ * Version check and self-update prompt for the login command
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.checkAndPromptUpdate = checkAndPromptUpdate;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const readline = __importStar(require("node:readline"));
46
+ const child_process_1 = require("child_process");
47
+ const chalk_1 = __importDefault(require("chalk"));
48
+ /**
49
+ * Check if a newer CLI version is available and prompt the user to update.
50
+ * Returns silently if up-to-date, check fails, or user declines.
51
+ */
52
+ async function checkAndPromptUpdate(noColor) {
53
+ let currentVersion;
54
+ try {
55
+ const packageJsonPath = path.join(__dirname, '..', '..', '..', 'package.json');
56
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
57
+ currentVersion = packageJson.version;
58
+ }
59
+ catch {
60
+ return;
61
+ }
62
+ const result = (0, child_process_1.spawnSync)('npm', ['view', '@padua/cli', 'version'], {
63
+ shell: false,
64
+ timeout: 10000,
65
+ stdio: ['pipe', 'pipe', 'pipe'],
66
+ });
67
+ if (result.status !== 0 || result.error) {
68
+ return;
69
+ }
70
+ const latestVersion = result.stdout?.toString().trim();
71
+ if (!latestVersion || currentVersion === latestVersion) {
72
+ return;
73
+ }
74
+ const updateMsg = `Update available: ${currentVersion} → ${latestVersion}`;
75
+ if (noColor) {
76
+ console.log(updateMsg);
77
+ }
78
+ else {
79
+ console.log(chalk_1.default.yellow(updateMsg));
80
+ }
81
+ const shouldUpdate = await promptYesNo('Run update? [Y/n] ');
82
+ if (!shouldUpdate) {
83
+ return;
84
+ }
85
+ const install = (0, child_process_1.spawnSync)('npm', ['install', '-g', '@padua/cli@latest'], {
86
+ shell: false,
87
+ timeout: 60000,
88
+ stdio: 'inherit',
89
+ });
90
+ if (install.status !== 0 || install.error) {
91
+ const failMsg = 'Update failed. You can update manually: npm install -g @padua/cli@latest';
92
+ if (noColor) {
93
+ console.error(failMsg);
94
+ }
95
+ else {
96
+ console.error(chalk_1.default.red(failMsg));
97
+ }
98
+ return;
99
+ }
100
+ const successMsg = `Updated to ${latestVersion}. Please re-run: padua login`;
101
+ if (noColor) {
102
+ console.log(successMsg);
103
+ }
104
+ else {
105
+ console.log(chalk_1.default.green(successMsg));
106
+ }
107
+ process.exit(0);
108
+ }
109
+ function promptYesNo(question) {
110
+ const rl = readline.createInterface({
111
+ input: process.stdin,
112
+ output: process.stdout,
113
+ });
114
+ return new Promise((resolve) => {
115
+ rl.question(question, (answer) => {
116
+ rl.close();
117
+ const trimmed = answer.trim().toLowerCase();
118
+ resolve(trimmed === '' || trimmed === 'y');
119
+ });
120
+ });
121
+ }
122
+ //# sourceMappingURL=version-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../../src/commands/login/version-check.ts"],"names":[],"mappings":"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"}
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.16",
3
+ "version": "2.0.18",
4
4
  "description": "Unified AWS infrastructure management CLI",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",