agent-media-cli 1.0.0

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 (139) hide show
  1. package/LICENSE +199 -0
  2. package/README.md +59 -0
  3. package/dist/commands/alias.d.ts +3 -0
  4. package/dist/commands/alias.d.ts.map +1 -0
  5. package/dist/commands/alias.js +245 -0
  6. package/dist/commands/alias.js.map +1 -0
  7. package/dist/commands/apikey.d.ts +3 -0
  8. package/dist/commands/apikey.d.ts.map +1 -0
  9. package/dist/commands/apikey.js +282 -0
  10. package/dist/commands/apikey.js.map +1 -0
  11. package/dist/commands/cancel.d.ts +9 -0
  12. package/dist/commands/cancel.d.ts.map +1 -0
  13. package/dist/commands/cancel.js +101 -0
  14. package/dist/commands/cancel.js.map +1 -0
  15. package/dist/commands/completions.d.ts +15 -0
  16. package/dist/commands/completions.d.ts.map +1 -0
  17. package/dist/commands/completions.js +293 -0
  18. package/dist/commands/completions.js.map +1 -0
  19. package/dist/commands/config.d.ts +3 -0
  20. package/dist/commands/config.d.ts.map +1 -0
  21. package/dist/commands/config.js +327 -0
  22. package/dist/commands/config.js.map +1 -0
  23. package/dist/commands/credits.d.ts +18 -0
  24. package/dist/commands/credits.d.ts.map +1 -0
  25. package/dist/commands/credits.js +459 -0
  26. package/dist/commands/credits.js.map +1 -0
  27. package/dist/commands/debug.d.ts +20 -0
  28. package/dist/commands/debug.d.ts.map +1 -0
  29. package/dist/commands/debug.js +291 -0
  30. package/dist/commands/debug.js.map +1 -0
  31. package/dist/commands/delete.d.ts +3 -0
  32. package/dist/commands/delete.d.ts.map +1 -0
  33. package/dist/commands/delete.js +273 -0
  34. package/dist/commands/delete.js.map +1 -0
  35. package/dist/commands/doctor.d.ts +14 -0
  36. package/dist/commands/doctor.d.ts.map +1 -0
  37. package/dist/commands/doctor.js +468 -0
  38. package/dist/commands/doctor.js.map +1 -0
  39. package/dist/commands/download.d.ts +3 -0
  40. package/dist/commands/download.d.ts.map +1 -0
  41. package/dist/commands/download.js +165 -0
  42. package/dist/commands/download.js.map +1 -0
  43. package/dist/commands/generate.d.ts +3 -0
  44. package/dist/commands/generate.d.ts.map +1 -0
  45. package/dist/commands/generate.js +358 -0
  46. package/dist/commands/generate.js.map +1 -0
  47. package/dist/commands/inspect.d.ts +10 -0
  48. package/dist/commands/inspect.d.ts.map +1 -0
  49. package/dist/commands/inspect.js +376 -0
  50. package/dist/commands/inspect.js.map +1 -0
  51. package/dist/commands/list.d.ts +13 -0
  52. package/dist/commands/list.d.ts.map +1 -0
  53. package/dist/commands/list.js +198 -0
  54. package/dist/commands/list.js.map +1 -0
  55. package/dist/commands/login.d.ts +15 -0
  56. package/dist/commands/login.d.ts.map +1 -0
  57. package/dist/commands/login.js +123 -0
  58. package/dist/commands/login.js.map +1 -0
  59. package/dist/commands/logout.d.ts +12 -0
  60. package/dist/commands/logout.d.ts.map +1 -0
  61. package/dist/commands/logout.js +85 -0
  62. package/dist/commands/logout.js.map +1 -0
  63. package/dist/commands/models.d.ts +10 -0
  64. package/dist/commands/models.d.ts.map +1 -0
  65. package/dist/commands/models.js +137 -0
  66. package/dist/commands/models.js.map +1 -0
  67. package/dist/commands/plan.d.ts +13 -0
  68. package/dist/commands/plan.d.ts.map +1 -0
  69. package/dist/commands/plan.js +134 -0
  70. package/dist/commands/plan.js.map +1 -0
  71. package/dist/commands/pricing.d.ts +14 -0
  72. package/dist/commands/pricing.d.ts.map +1 -0
  73. package/dist/commands/pricing.js +166 -0
  74. package/dist/commands/pricing.js.map +1 -0
  75. package/dist/commands/profile.d.ts +9 -0
  76. package/dist/commands/profile.d.ts.map +1 -0
  77. package/dist/commands/profile.js +236 -0
  78. package/dist/commands/profile.js.map +1 -0
  79. package/dist/commands/retry.d.ts +3 -0
  80. package/dist/commands/retry.d.ts.map +1 -0
  81. package/dist/commands/retry.js +424 -0
  82. package/dist/commands/retry.js.map +1 -0
  83. package/dist/commands/status.d.ts +9 -0
  84. package/dist/commands/status.d.ts.map +1 -0
  85. package/dist/commands/status.js +182 -0
  86. package/dist/commands/status.js.map +1 -0
  87. package/dist/commands/subscribe.d.ts +3 -0
  88. package/dist/commands/subscribe.d.ts.map +1 -0
  89. package/dist/commands/subscribe.js +263 -0
  90. package/dist/commands/subscribe.js.map +1 -0
  91. package/dist/commands/text.d.ts +3 -0
  92. package/dist/commands/text.d.ts.map +1 -0
  93. package/dist/commands/text.js +263 -0
  94. package/dist/commands/text.js.map +1 -0
  95. package/dist/commands/update.d.ts +13 -0
  96. package/dist/commands/update.d.ts.map +1 -0
  97. package/dist/commands/update.js +211 -0
  98. package/dist/commands/update.js.map +1 -0
  99. package/dist/commands/usage.d.ts +13 -0
  100. package/dist/commands/usage.d.ts.map +1 -0
  101. package/dist/commands/usage.js +344 -0
  102. package/dist/commands/usage.js.map +1 -0
  103. package/dist/commands/version.d.ts +8 -0
  104. package/dist/commands/version.d.ts.map +1 -0
  105. package/dist/commands/version.js +26 -0
  106. package/dist/commands/version.js.map +1 -0
  107. package/dist/commands/whoami.d.ts +9 -0
  108. package/dist/commands/whoami.d.ts.map +1 -0
  109. package/dist/commands/whoami.js +76 -0
  110. package/dist/commands/whoami.js.map +1 -0
  111. package/dist/index.d.ts +3 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +85 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/lib/api.d.ts +518 -0
  116. package/dist/lib/api.d.ts.map +1 -0
  117. package/dist/lib/api.js +582 -0
  118. package/dist/lib/api.js.map +1 -0
  119. package/dist/lib/config.d.ts +33 -0
  120. package/dist/lib/config.d.ts.map +1 -0
  121. package/dist/lib/config.js +91 -0
  122. package/dist/lib/config.js.map +1 -0
  123. package/dist/lib/credentials.d.ts +60 -0
  124. package/dist/lib/credentials.d.ts.map +1 -0
  125. package/dist/lib/credentials.js +152 -0
  126. package/dist/lib/credentials.js.map +1 -0
  127. package/dist/lib/errors.d.ts +20 -0
  128. package/dist/lib/errors.d.ts.map +1 -0
  129. package/dist/lib/errors.js +77 -0
  130. package/dist/lib/errors.js.map +1 -0
  131. package/dist/lib/output.d.ts +33 -0
  132. package/dist/lib/output.d.ts.map +1 -0
  133. package/dist/lib/output.js +77 -0
  134. package/dist/lib/output.js.map +1 -0
  135. package/dist/types.d.ts +12 -0
  136. package/dist/types.d.ts.map +1 -0
  137. package/dist/types.js +3 -0
  138. package/dist/types.js.map +1 -0
  139. package/package.json +48 -0
@@ -0,0 +1,424 @@
1
+ // Copyright 2026 agent-media contributors. Apache-2.0 license.
2
+ /**
3
+ * `agent-media retry <job-id>` command.
4
+ *
5
+ * Re-submits a failed or canceled generation job with the same parameters.
6
+ * Flow:
7
+ * 1. Load API key from the credential store.
8
+ * 2. Fetch the original job and verify it is in a retryable state.
9
+ * 3. Display a retry summary with cost estimate.
10
+ * 4. Confirm with the user (unless --no-confirm).
11
+ * 5. Submit a new generation via api.retryJob().
12
+ * 6. Optionally wait for completion (--wait) and download output (--download).
13
+ *
14
+ * Supports human, JSON, and quiet output modes.
15
+ */
16
+ import { createInterface } from 'node:readline';
17
+ import { existsSync } from 'node:fs';
18
+ import { resolve, extname } from 'node:path';
19
+ import chalk from 'chalk';
20
+ import { detectOutputMode, printJson, printQuiet, createSpinner, } from '../lib/output.js';
21
+ import { getApiKey, resolveProfileName } from '../lib/credentials.js';
22
+ import { AgentMediaAPI, } from '../lib/api.js';
23
+ import { CLIError, handleError } from '../lib/errors.js';
24
+ import { getConfigValue } from '../lib/config.js';
25
+ // -- Watch / download helper constants ----------------------------------------
26
+ /** Poll interval for --wait mode, in milliseconds. */
27
+ const POLL_INTERVAL_MS = 3_000;
28
+ /** Terminal job statuses that end the polling loop. */
29
+ const TERMINAL_STATUSES = new Set(['completed', 'failed', 'canceled']);
30
+ /** Status labels with color coding. */
31
+ const STATUS_COLORS = {
32
+ pending: chalk.yellow,
33
+ processing: chalk.blue,
34
+ completed: chalk.green,
35
+ failed: chalk.red,
36
+ canceled: chalk.dim,
37
+ };
38
+ /** Map content-type to file extension. */
39
+ const EXTENSION_BY_CONTENT_TYPE = {
40
+ 'video/mp4': '.mp4',
41
+ 'video/webm': '.webm',
42
+ 'video/quicktime': '.mov',
43
+ 'image/png': '.png',
44
+ 'image/jpeg': '.jpg',
45
+ 'image/webp': '.webp',
46
+ 'image/gif': '.gif',
47
+ };
48
+ // -- Helpers ------------------------------------------------------------------
49
+ /**
50
+ * Format a status string with color.
51
+ */
52
+ function formatStatus(status) {
53
+ const colorize = STATUS_COLORS[status] ?? chalk.white;
54
+ return colorize(status.toUpperCase());
55
+ }
56
+ /**
57
+ * Detect the file extension from a URL path or content-type header.
58
+ */
59
+ function detectExtension(url, contentType) {
60
+ if (contentType) {
61
+ const baseType = contentType.split(';')[0].trim().toLowerCase();
62
+ const ext = EXTENSION_BY_CONTENT_TYPE[baseType];
63
+ if (ext)
64
+ return ext;
65
+ }
66
+ try {
67
+ const pathname = new URL(url).pathname;
68
+ const ext = extname(pathname).toLowerCase();
69
+ if (ext)
70
+ return ext;
71
+ }
72
+ catch {
73
+ // Invalid URL, fall through
74
+ }
75
+ return '.mp4';
76
+ }
77
+ /**
78
+ * Format bytes to a human-readable string (e.g., "15.2 MB").
79
+ */
80
+ function formatBytes(bytes) {
81
+ if (bytes < 1024)
82
+ return `${bytes} B`;
83
+ if (bytes < 1024 * 1024)
84
+ return `${(bytes / 1024).toFixed(1)} KB`;
85
+ if (bytes < 1024 * 1024 * 1024)
86
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
87
+ return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
88
+ }
89
+ /**
90
+ * Format elapsed seconds as a human-readable duration (e.g., "1m 23s").
91
+ */
92
+ function formatElapsed(seconds) {
93
+ if (seconds < 60)
94
+ return `${seconds}s`;
95
+ const mins = Math.floor(seconds / 60);
96
+ const secs = seconds % 60;
97
+ return `${mins}m ${secs}s`;
98
+ }
99
+ /**
100
+ * Poll a generation job until it reaches a terminal state.
101
+ *
102
+ * Displays a spinner with live status updates in human mode.
103
+ * Returns the final job state, or `null` if interrupted by SIGINT.
104
+ */
105
+ async function waitForJob(api, jobId, mode) {
106
+ const startTime = Date.now();
107
+ let interrupted = false;
108
+ const onSigint = () => {
109
+ interrupted = true;
110
+ };
111
+ process.on('SIGINT', onSigint);
112
+ const spinner = createSpinner('Waiting for job to complete...');
113
+ if (mode === 'human')
114
+ spinner.start();
115
+ try {
116
+ while (!interrupted) {
117
+ const job = await api.getJob(jobId);
118
+ const elapsed = Math.floor((Date.now() - startTime) / 1000);
119
+ if (mode === 'human') {
120
+ spinner.text = `${formatStatus(job.status)} elapsed ${formatElapsed(elapsed)} (Ctrl+C to stop)`;
121
+ }
122
+ if (TERMINAL_STATUSES.has(job.status)) {
123
+ if (mode === 'human') {
124
+ if (job.status === 'completed') {
125
+ spinner.succeed(`Job ${chalk.cyan(jobId)} completed in ${formatElapsed(elapsed)}`);
126
+ }
127
+ else if (job.status === 'failed') {
128
+ spinner.fail(`Job ${chalk.cyan(jobId)} failed after ${formatElapsed(elapsed)}` +
129
+ (job.error_message ? `: ${job.error_message}` : ''));
130
+ }
131
+ else {
132
+ spinner.warn(`Job ${chalk.cyan(jobId)} was canceled after ${formatElapsed(elapsed)}`);
133
+ }
134
+ }
135
+ return job;
136
+ }
137
+ // Wait before next poll, allowing early exit on SIGINT
138
+ await new Promise((resolve) => {
139
+ const timer = setTimeout(resolve, POLL_INTERVAL_MS);
140
+ const earlyExit = () => {
141
+ clearTimeout(timer);
142
+ resolve();
143
+ };
144
+ process.once('SIGINT', earlyExit);
145
+ });
146
+ }
147
+ // Interrupted by SIGINT
148
+ if (mode === 'human') {
149
+ spinner.stop();
150
+ console.log();
151
+ console.log(chalk.dim(' Stopped waiting.'));
152
+ }
153
+ return null;
154
+ }
155
+ finally {
156
+ process.removeListener('SIGINT', onSigint);
157
+ }
158
+ }
159
+ /**
160
+ * Download the output media from a completed job.
161
+ *
162
+ * Resolves the output directory from the `download_dir` config key,
163
+ * falling back to the current working directory. Returns the saved
164
+ * file path, or `null` if the download was skipped.
165
+ */
166
+ async function downloadJobOutput(api, job, mode) {
167
+ if (!job.output_media_url) {
168
+ if (mode === 'human') {
169
+ console.log(chalk.yellow(' No media available for download.'));
170
+ }
171
+ return null;
172
+ }
173
+ // Determine output directory and filename (matches download.ts pattern)
174
+ const downloadDir = getConfigValue('download_dir') ?? '.';
175
+ const ext = detectExtension(job.output_media_url);
176
+ const shortId = job.id.slice(0, 8);
177
+ const filename = `${job.model_slug}-${shortId}${ext}`;
178
+ const outputPath = resolve(downloadDir, filename);
179
+ // Warn on overwrite
180
+ if (existsSync(outputPath) && mode === 'human') {
181
+ console.log(chalk.yellow(` Warning: overwriting existing file ${outputPath}`));
182
+ }
183
+ const downloadSpinner = createSpinner('Downloading...');
184
+ if (mode === 'human')
185
+ downloadSpinner.start();
186
+ const totalBytes = await api.downloadMedia(job.output_media_url, outputPath, (received, total) => {
187
+ if (mode === 'human') {
188
+ const progress = total
189
+ ? `${formatBytes(received)} / ${formatBytes(total)}`
190
+ : formatBytes(received);
191
+ downloadSpinner.text = `Downloading... ${progress}`;
192
+ }
193
+ });
194
+ if (mode === 'human') {
195
+ downloadSpinner.succeed(`Downloaded to ${outputPath} (${formatBytes(totalBytes)})`);
196
+ }
197
+ return outputPath;
198
+ }
199
+ /**
200
+ * Ask a yes/no question on stdin and return the result.
201
+ * Defaults to "yes" if the user presses Enter without typing.
202
+ */
203
+ function askConfirmation(question) {
204
+ return new Promise((resolve) => {
205
+ const rl = createInterface({
206
+ input: process.stdin,
207
+ output: process.stdout,
208
+ });
209
+ rl.question(question, (answer) => {
210
+ rl.close();
211
+ const trimmed = answer.trim().toLowerCase();
212
+ resolve(trimmed === '' || trimmed === 'y' || trimmed === 'yes');
213
+ });
214
+ });
215
+ }
216
+ /**
217
+ * Truncate a string to a maximum length, appending "..." if truncated.
218
+ */
219
+ function truncate(text, maxLen) {
220
+ if (text.length <= maxLen)
221
+ return text;
222
+ return text.slice(0, maxLen) + '...';
223
+ }
224
+ export function registerRetryCommand(program) {
225
+ program
226
+ .command('retry <job-id>')
227
+ .description('Retry a failed or canceled generation job')
228
+ .option('-p, --prompt <text>', 'Override the original prompt')
229
+ .option('--seed <number>', 'Override the seed')
230
+ .option('--no-confirm', 'Skip the cost confirmation prompt')
231
+ .option('-w, --wait', 'Wait for the new job to complete before exiting')
232
+ .option('-d, --download', 'Download output after completion (requires --wait)')
233
+ .action(async (jobId, cmdOpts) => {
234
+ const globalOpts = program.opts();
235
+ const mode = detectOutputMode(globalOpts);
236
+ const profileName = resolveProfileName(globalOpts.profile);
237
+ const apiKey = getApiKey(profileName);
238
+ if (!apiKey) {
239
+ throw new CLIError('Not logged in.', {
240
+ code: 'NOT_AUTHENTICATED',
241
+ suggestion: "Run 'agent-media login' to authenticate.",
242
+ });
243
+ }
244
+ // -- Validate flag combinations -----------------------------------------
245
+ if (cmdOpts.download && !cmdOpts.wait) {
246
+ throw new CLIError('--download requires --wait.', {
247
+ code: 'INVALID_FLAGS',
248
+ suggestion: "Add '--wait' to wait for the job to finish before downloading, e.g.:\n agent-media retry <job-id> --wait --download",
249
+ });
250
+ }
251
+ try {
252
+ const api = new AgentMediaAPI(apiKey);
253
+ // -- Step 1: Fetch the original job -----------------------------------
254
+ const fetchSpinner = createSpinner('Fetching original job...');
255
+ if (mode === 'human')
256
+ fetchSpinner.start();
257
+ const originalJob = await api.getJob(jobId);
258
+ if (mode === 'human')
259
+ fetchSpinner.stop();
260
+ // -- Step 2: Verify job is retryable ----------------------------------
261
+ if (originalJob.status !== 'failed' && originalJob.status !== 'canceled') {
262
+ throw new CLIError(`Cannot retry job with status "${originalJob.status}". Only failed or canceled jobs can be retried.`, {
263
+ code: 'INVALID_JOB_STATUS',
264
+ suggestion: `Job ${jobId} is currently ${originalJob.status}. Use 'agent-media status ${jobId}' to check details.`,
265
+ });
266
+ }
267
+ // -- Step 3: Build overrides ------------------------------------------
268
+ const overrides = {};
269
+ if (cmdOpts.prompt)
270
+ overrides.prompt = cmdOpts.prompt;
271
+ if (cmdOpts.seed)
272
+ overrides.seed = parseInt(cmdOpts.seed, 10);
273
+ const effectivePrompt = overrides.prompt ?? originalJob.prompt;
274
+ // -- Step 4: Display retry summary and cost estimate ------------------
275
+ const estimateSpinner = createSpinner('Calculating cost...');
276
+ if (mode === 'human')
277
+ estimateSpinner.start();
278
+ const estimate = (await api.submitGeneration({
279
+ modelSlug: originalJob.model_slug,
280
+ prompt: effectivePrompt,
281
+ duration: originalJob.duration_seconds ?? undefined,
282
+ resolution: originalJob.resolution ?? undefined,
283
+ aspectRatio: originalJob.aspect_ratio ?? undefined,
284
+ seed: overrides.seed ?? originalJob.seed ?? undefined,
285
+ dryRun: true,
286
+ }));
287
+ if (mode === 'human')
288
+ estimateSpinner.stop();
289
+ if (!estimate.canAfford) {
290
+ throw new CLIError(`Insufficient credits. This retry costs ${estimate.credits} credits but you only have ${estimate.availableCredits}.`, {
291
+ code: 'INSUFFICIENT_CREDITS',
292
+ suggestion: 'Buy more credits at https://agent-media.ai/billing or choose a cheaper model/resolution.',
293
+ });
294
+ }
295
+ if (cmdOpts.confirm && mode === 'human') {
296
+ console.log();
297
+ console.log(chalk.bold(' Retry Summary'));
298
+ console.log(` ${chalk.bold('Original:')} ${chalk.cyan(originalJob.id)} ${chalk.red(`[${originalJob.status.toUpperCase()}]`)}`);
299
+ console.log(` ${chalk.bold('Model:')} ${estimate.modelDisplayName}`);
300
+ console.log(` ${chalk.bold('Prompt:')} "${truncate(effectivePrompt, 60)}"`);
301
+ if (overrides.prompt) {
302
+ console.log(chalk.yellow(' (overridden)'));
303
+ }
304
+ console.log(` ${chalk.bold('Cost:')} ${chalk.yellow(String(estimate.credits))} credits` +
305
+ ` (${chalk.dim(`$${estimate.costUsd.toFixed(2)}`)})`);
306
+ console.log(` ${chalk.bold('Balance:')} ${estimate.availableCredits} credits available`);
307
+ // Warn if credits were not refunded on the failed job
308
+ if (!originalJob.credits_refunded && originalJob.credits_charged != null && originalJob.credits_charged > 0) {
309
+ console.log();
310
+ console.log(chalk.yellow(` Warning: The original job's ${originalJob.credits_charged} credits were not refunded.`));
311
+ console.log(chalk.yellow(' This retry will charge new credits.'));
312
+ }
313
+ console.log();
314
+ const confirmed = await askConfirmation(` Retry for ${chalk.yellow(String(estimate.credits))} credits` +
315
+ ` (you have ${chalk.green(String(estimate.availableCredits))})? [Y/n] `);
316
+ if (!confirmed) {
317
+ console.log(chalk.dim(' Retry cancelled.'));
318
+ return;
319
+ }
320
+ }
321
+ // -- Step 5: Submit retry ---------------------------------------------
322
+ const submitSpinner = createSpinner('Submitting retry...');
323
+ if (mode === 'human')
324
+ submitSpinner.start();
325
+ const result = await api.retryJob(jobId, overrides);
326
+ if (mode === 'human')
327
+ submitSpinner.succeed('Retry submitted');
328
+ // -- Step 6: Display result -------------------------------------------
329
+ if (!cmdOpts.wait) {
330
+ switch (mode) {
331
+ case 'json':
332
+ printJson({
333
+ original_job_id: originalJob.id,
334
+ new_job_id: result.job_id,
335
+ model: originalJob.model_slug,
336
+ credits_charged: result.credits_deducted,
337
+ status: result.status,
338
+ });
339
+ break;
340
+ case 'quiet':
341
+ printQuiet(result.job_id);
342
+ break;
343
+ default: {
344
+ console.log();
345
+ console.log(` ${chalk.bold('New Job ID:')} ${chalk.cyan(result.job_id)}`);
346
+ console.log(` ${chalk.bold('Status:')} ${chalk.yellow(result.status)}`);
347
+ console.log(` ${chalk.bold('Credits:')} ${result.credits_deducted} deducted`);
348
+ if (result.estimated_duration) {
349
+ console.log(` ${chalk.bold('ETA:')} ~${result.estimated_duration}s`);
350
+ }
351
+ console.log();
352
+ console.log(chalk.dim(` Run 'agent-media status ${result.job_id}' to check progress`));
353
+ console.log();
354
+ break;
355
+ }
356
+ }
357
+ return;
358
+ }
359
+ // -- Step 7: Wait for completion (--wait) -----------------------------
360
+ if (mode === 'human') {
361
+ console.log();
362
+ console.log(` ${chalk.bold('New Job ID:')} ${chalk.cyan(result.job_id)}`);
363
+ console.log(` ${chalk.bold('Credits:')} ${result.credits_deducted} deducted`);
364
+ console.log();
365
+ }
366
+ const finishedJob = await waitForJob(api, result.job_id, mode);
367
+ // SIGINT interrupted the wait -- exit without downloading
368
+ if (!finishedJob) {
369
+ return;
370
+ }
371
+ // In JSON mode, emit the final job state
372
+ if (mode === 'json') {
373
+ const payload = {
374
+ original_job_id: originalJob.id,
375
+ new_job_id: finishedJob.id,
376
+ model: originalJob.model_slug,
377
+ credits_charged: result.credits_deducted,
378
+ status: finishedJob.status,
379
+ };
380
+ if (finishedJob.status === 'failed') {
381
+ payload['error'] = finishedJob.error_message ?? 'Unknown error';
382
+ }
383
+ if (finishedJob.output_media_url) {
384
+ payload['output_url'] = finishedJob.output_media_url;
385
+ }
386
+ // If --download, include the downloaded path in JSON output
387
+ if (cmdOpts.download && finishedJob.status === 'completed') {
388
+ const downloadedPath = await downloadJobOutput(api, finishedJob, mode);
389
+ if (downloadedPath) {
390
+ payload['downloaded_to'] = downloadedPath;
391
+ }
392
+ }
393
+ printJson(payload);
394
+ return;
395
+ }
396
+ if (mode === 'quiet') {
397
+ printQuiet(finishedJob.status === 'completed' ? finishedJob.id : `error:${finishedJob.status}`);
398
+ if (cmdOpts.download && finishedJob.status === 'completed') {
399
+ const downloadedPath = await downloadJobOutput(api, finishedJob, mode);
400
+ if (downloadedPath) {
401
+ printQuiet(downloadedPath);
402
+ }
403
+ }
404
+ return;
405
+ }
406
+ // -- Step 8: Download output (--download) -----------------------------
407
+ if (cmdOpts.download) {
408
+ if (finishedJob.status !== 'completed') {
409
+ console.log();
410
+ console.log(chalk.yellow(' Skipping download -- job did not complete successfully.'));
411
+ console.log();
412
+ return;
413
+ }
414
+ console.log();
415
+ await downloadJobOutput(api, finishedJob, mode);
416
+ console.log();
417
+ }
418
+ }
419
+ catch (error) {
420
+ handleError(error);
421
+ }
422
+ });
423
+ }
424
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/commands/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `agent-media status <job-id>` command.
3
+ *
4
+ * Fetches and displays the current state of a generation job.
5
+ * Supports --watch mode for live polling, plus JSON and quiet output modes.
6
+ */
7
+ import type { Command } from 'commander';
8
+ export declare function registerStatusCommand(program: Command): void;
9
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkHzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsG5D"}
@@ -0,0 +1,182 @@
1
+ // Copyright 2026 agent-media contributors. Apache-2.0 license.
2
+ import chalk from 'chalk';
3
+ import { detectOutputMode, printJson, printQuiet, createSpinner, } from '../lib/output.js';
4
+ import { getApiKey, resolveProfileName } from '../lib/credentials.js';
5
+ import { AgentMediaAPI } from '../lib/api.js';
6
+ import { CLIError, handleError } from '../lib/errors.js';
7
+ /** Status labels with color coding. */
8
+ const STATUS_COLORS = {
9
+ pending: chalk.yellow,
10
+ processing: chalk.blue,
11
+ completed: chalk.green,
12
+ failed: chalk.red,
13
+ canceled: chalk.dim,
14
+ };
15
+ /**
16
+ * Format a status string with color and brackets.
17
+ */
18
+ function formatStatus(status) {
19
+ const colorize = STATUS_COLORS[status] ?? chalk.white;
20
+ return colorize(`[${status.toUpperCase()}] ${status}`);
21
+ }
22
+ /**
23
+ * Format a relative time string (e.g., "2 minutes ago").
24
+ */
25
+ function timeAgo(dateStr) {
26
+ const now = Date.now();
27
+ const then = new Date(dateStr).getTime();
28
+ const diffMs = now - then;
29
+ const seconds = Math.floor(diffMs / 1000);
30
+ if (seconds < 60)
31
+ return `${seconds}s ago`;
32
+ const minutes = Math.floor(seconds / 60);
33
+ if (minutes < 60)
34
+ return `${minutes} minute${minutes === 1 ? '' : 's'} ago`;
35
+ const hours = Math.floor(minutes / 60);
36
+ if (hours < 24)
37
+ return `${hours} hour${hours === 1 ? '' : 's'} ago`;
38
+ const days = Math.floor(hours / 24);
39
+ return `${days} day${days === 1 ? '' : 's'} ago`;
40
+ }
41
+ /**
42
+ * Format the duration and resolution string.
43
+ */
44
+ function formatDurationRes(job) {
45
+ const parts = [];
46
+ if (job.duration_seconds != null)
47
+ parts.push(`${job.duration_seconds}s`);
48
+ if (job.resolution)
49
+ parts.push(`@ ${job.resolution}`);
50
+ return parts.join(' ') || 'N/A';
51
+ }
52
+ /**
53
+ * Print the human-readable job detail card.
54
+ */
55
+ function printJobCard(job) {
56
+ const modelDisplay = job.model_display_name
57
+ ? `${job.model_display_name} (${job.model_slug})`
58
+ : job.model_slug;
59
+ console.log();
60
+ console.log(` ${chalk.bold('Job')} ${chalk.cyan(job.id)}`);
61
+ console.log(` ${chalk.bold('Model:')} ${modelDisplay}`);
62
+ console.log(` ${chalk.bold('Status:')} ${formatStatus(job.status)}`);
63
+ console.log(` ${chalk.bold('Created:')} ${timeAgo(job.created_at)}`);
64
+ console.log(` ${chalk.bold('Duration:')} ${formatDurationRes(job)}`);
65
+ // Credits line: show "(refunded)" when applicable
66
+ const creditsStr = job.credits_charged != null ? String(job.credits_charged) : 'N/A';
67
+ const refundedSuffix = job.credits_refunded ? chalk.yellow(' (refunded)') : '';
68
+ console.log(` ${chalk.bold('Credits:')} ${creditsStr}${refundedSuffix}`);
69
+ // Truncate long prompts for display
70
+ const maxPromptLen = 60;
71
+ const promptDisplay = job.prompt.length > maxPromptLen
72
+ ? `"${job.prompt.slice(0, maxPromptLen)}..."`
73
+ : `"${job.prompt}"`;
74
+ console.log(` ${chalk.bold('Prompt:')} ${promptDisplay}`);
75
+ // Completed: show output URL and download suggestion
76
+ if (job.status === 'completed' && job.output_media_url) {
77
+ console.log();
78
+ console.log(` ${chalk.bold('Output:')} ${chalk.underline(job.output_media_url)}`);
79
+ console.log();
80
+ console.log(chalk.dim(` Download with: agent-media download ${job.id}`));
81
+ }
82
+ // Failed: show error message
83
+ if (job.status === 'failed' && job.error_message) {
84
+ console.log();
85
+ console.log(` ${chalk.bold('Error:')} ${chalk.red(job.error_message)}`);
86
+ }
87
+ console.log();
88
+ }
89
+ /**
90
+ * Clear the terminal and move cursor to top for --watch redraws.
91
+ */
92
+ function clearScreen() {
93
+ process.stdout.write('\x1B[2J\x1B[H');
94
+ }
95
+ export function registerStatusCommand(program) {
96
+ program
97
+ .command('status <job-id>')
98
+ .description('Check the status of a generation job')
99
+ .option('-w, --watch', 'Poll for updates until the job completes')
100
+ .action(async (jobId, cmdOpts) => {
101
+ const globalOpts = program.opts();
102
+ const mode = detectOutputMode(globalOpts);
103
+ const profileName = resolveProfileName(globalOpts.profile);
104
+ const apiKey = getApiKey(profileName);
105
+ if (!apiKey) {
106
+ throw new CLIError('Not logged in.', {
107
+ code: 'NOT_AUTHENTICATED',
108
+ suggestion: "Run 'agent-media login' to authenticate.",
109
+ });
110
+ }
111
+ try {
112
+ const api = new AgentMediaAPI(apiKey);
113
+ if (cmdOpts.watch && mode === 'human') {
114
+ // ── Watch mode: poll every 3s, update in-place ─────────────
115
+ const POLL_INTERVAL_MS = 3000;
116
+ const startTime = Date.now();
117
+ let running = true;
118
+ // Handle Ctrl+C gracefully
119
+ const onSigint = () => {
120
+ running = false;
121
+ console.log();
122
+ console.log(chalk.dim(' Stopped watching.'));
123
+ process.exit(0);
124
+ };
125
+ process.on('SIGINT', onSigint);
126
+ try {
127
+ while (running) {
128
+ const job = await api.getJob(jobId);
129
+ const elapsed = Math.floor((Date.now() - startTime) / 1000);
130
+ clearScreen();
131
+ printJobCard(job);
132
+ console.log(chalk.dim(` Watching... elapsed ${elapsed}s (Ctrl+C to stop)`));
133
+ console.log();
134
+ // Exit when terminal status reached
135
+ if (job.status === 'completed' ||
136
+ job.status === 'failed' ||
137
+ job.status === 'canceled') {
138
+ break;
139
+ }
140
+ // Wait before next poll
141
+ await new Promise((resolve) => {
142
+ const timer = setTimeout(resolve, POLL_INTERVAL_MS);
143
+ // Allow early exit on SIGINT
144
+ const earlyExit = () => {
145
+ clearTimeout(timer);
146
+ resolve();
147
+ };
148
+ process.once('SIGINT', earlyExit);
149
+ });
150
+ }
151
+ }
152
+ finally {
153
+ process.removeListener('SIGINT', onSigint);
154
+ }
155
+ }
156
+ else {
157
+ // ── Single fetch ───────────────────────────────────────────
158
+ const spinner = createSpinner('Fetching job status...');
159
+ if (mode === 'human')
160
+ spinner.start();
161
+ const job = await api.getJob(jobId);
162
+ if (mode === 'human')
163
+ spinner.stop();
164
+ switch (mode) {
165
+ case 'json':
166
+ printJson(job);
167
+ break;
168
+ case 'quiet':
169
+ printQuiet(job.status);
170
+ break;
171
+ default:
172
+ printJobCard(job);
173
+ break;
174
+ }
175
+ }
176
+ }
177
+ catch (error) {
178
+ handleError(error);
179
+ }
180
+ });
181
+ }
182
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerSubscribeCommand(program: Command): void;
3
+ //# sourceMappingURL=subscribe.d.ts.map