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,376 @@
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
+ // ── Box-drawing constants ────────────────────────────────────────────
8
+ const BOX_TL = '\u250c';
9
+ const BOX_TR = '\u2510';
10
+ const BOX_BL = '\u2514';
11
+ const BOX_BR = '\u2518';
12
+ const BOX_H = '\u2500';
13
+ const BOX_V = '\u2502';
14
+ const BOX_ML = '\u251c';
15
+ const BOX_MR = '\u2524';
16
+ /** Inner width of the box (excluding border characters). */
17
+ const BOX_WIDTH = 43;
18
+ // ── Status formatting ────────────────────────────────────────────────
19
+ const STATUS_COLORS = {
20
+ pending: chalk.yellow,
21
+ submitted: chalk.yellow,
22
+ processing: chalk.blue,
23
+ completed: chalk.green,
24
+ failed: chalk.red,
25
+ canceled: chalk.dim,
26
+ };
27
+ const STATUS_LABELS = {
28
+ pending: 'PENDING',
29
+ submitted: 'SUBMITTED',
30
+ processing: 'PROCESSING',
31
+ completed: 'OK',
32
+ failed: 'FAIL',
33
+ canceled: 'CANCELED',
34
+ };
35
+ function formatStatus(status) {
36
+ const colorize = STATUS_COLORS[status] ?? chalk.white;
37
+ const label = STATUS_LABELS[status] ?? status.toUpperCase();
38
+ return colorize(`[${label}] ${status}`);
39
+ }
40
+ // ── Box-drawing helpers ──────────────────────────────────────────────
41
+ function topBorder() {
42
+ return `${BOX_TL}${BOX_H.repeat(BOX_WIDTH)}${BOX_TR}`;
43
+ }
44
+ function bottomBorder() {
45
+ return `${BOX_BL}${BOX_H.repeat(BOX_WIDTH)}${BOX_BR}`;
46
+ }
47
+ function midBorder() {
48
+ return `${BOX_ML}${BOX_H.repeat(BOX_WIDTH)}${BOX_MR}`;
49
+ }
50
+ function row(content) {
51
+ // Strip ANSI codes for length calculation
52
+ const stripped = content.replace(
53
+ // eslint-disable-next-line no-control-regex
54
+ /\x1b\[[0-9;]*m/g, '');
55
+ const padding = Math.max(0, BOX_WIDTH - 1 - stripped.length);
56
+ return `${BOX_V} ${content}${' '.repeat(padding)}${BOX_V}`;
57
+ }
58
+ function sectionHeader(title) {
59
+ return row(chalk.bold(title));
60
+ }
61
+ function kvRow(key, value, keyWidth = 14) {
62
+ const paddedKey = key.padEnd(keyWidth);
63
+ return row(` ${paddedKey}${value}`);
64
+ }
65
+ function buildTimeline(job) {
66
+ const createdMs = new Date(job.created_at).getTime();
67
+ const entries = [];
68
+ // Created (always present)
69
+ entries.push({
70
+ label: 'Created',
71
+ timestamp: job.created_at,
72
+ relativeMs: 0,
73
+ });
74
+ // Submitted -> started_at represents when the job was sent to the provider
75
+ if (job.started_at) {
76
+ const startedMs = new Date(job.started_at).getTime();
77
+ entries.push({
78
+ label: 'Submitted',
79
+ timestamp: job.started_at,
80
+ relativeMs: startedMs - createdMs,
81
+ });
82
+ }
83
+ // Processing starts when the provider acknowledges the job
84
+ // We infer this from webhook_checkpoint or started_at
85
+ if (job.started_at && job.status !== 'submitted') {
86
+ const startedMs = new Date(job.started_at).getTime();
87
+ entries.push({
88
+ label: 'Processing',
89
+ timestamp: job.started_at,
90
+ relativeMs: startedMs - createdMs,
91
+ });
92
+ }
93
+ // Completed / Failed
94
+ if (job.completed_at) {
95
+ const completedMs = new Date(job.completed_at).getTime();
96
+ entries.push({
97
+ label: job.status === 'failed' ? 'Failed' : 'Completed',
98
+ timestamp: job.completed_at,
99
+ relativeMs: completedMs - createdMs,
100
+ });
101
+ }
102
+ // Total wall-clock time
103
+ const totalMs = job.completed_at
104
+ ? new Date(job.completed_at).getTime() - createdMs
105
+ : null;
106
+ return { entries, totalMs };
107
+ }
108
+ function formatRelativeMs(ms) {
109
+ if (ms === null)
110
+ return '...';
111
+ if (ms === 0)
112
+ return '';
113
+ const seconds = ms / 1000;
114
+ return `+${seconds.toFixed(1)}s`;
115
+ }
116
+ function formatTimestamp(isoStr) {
117
+ const d = new Date(isoStr);
118
+ const year = d.getFullYear();
119
+ const month = String(d.getMonth() + 1).padStart(2, '0');
120
+ const day = String(d.getDate()).padStart(2, '0');
121
+ const hours = String(d.getHours()).padStart(2, '0');
122
+ const minutes = String(d.getMinutes()).padStart(2, '0');
123
+ const secs = String(d.getSeconds()).padStart(2, '0');
124
+ return `${year}-${month}-${day} ${hours}:${minutes}:${secs}`;
125
+ }
126
+ // ── Cost computation ─────────────────────────────────────────────────
127
+ /** Revenue per credit based on pack_500 pricing: $5 / 500 = $0.01 per credit. */
128
+ const REVENUE_PER_CREDIT = 0.01;
129
+ function computeCost(job) {
130
+ const credits = job.credit_cost;
131
+ const revenueUsd = credits * REVENUE_PER_CREDIT;
132
+ const providerCostUsd = job.provider_cost_usd != null
133
+ ? Number(job.provider_cost_usd)
134
+ : null;
135
+ let marginPct = null;
136
+ let marginUsd = null;
137
+ if (providerCostUsd != null && revenueUsd > 0) {
138
+ marginUsd = revenueUsd - providerCostUsd;
139
+ marginPct = (marginUsd / revenueUsd) * 100;
140
+ }
141
+ return { credits, revenueUsd, providerCostUsd, marginPct, marginUsd };
142
+ }
143
+ function buildInspectOutput(job) {
144
+ return {
145
+ job,
146
+ timeline: buildTimeline(job),
147
+ costBreakdown: computeCost(job),
148
+ providerDetails: {
149
+ providerSlug: job.provider_slug,
150
+ providerJobId: job.provider_job_id,
151
+ webhookCheckpoint: job.webhook_checkpoint,
152
+ },
153
+ };
154
+ }
155
+ // ── Human-readable card ──────────────────────────────────────────────
156
+ function printInspectCard(job) {
157
+ const modelDisplay = job.model_display_name
158
+ ? `${job.model_slug} (${job.model_display_name})`
159
+ : job.model_slug;
160
+ const lines = [];
161
+ // ── Header ──
162
+ lines.push(topBorder());
163
+ lines.push(row(`${chalk.bold('JOB')} ${chalk.cyan(job.id)}`));
164
+ lines.push(row(`Status: ${formatStatus(job.status)}`));
165
+ lines.push(row(`Model: ${modelDisplay}`));
166
+ // ── Prompt ──
167
+ lines.push(midBorder());
168
+ lines.push(sectionHeader('PROMPT'));
169
+ // Word-wrap the prompt to fit inside the box
170
+ const maxPromptLineLen = BOX_WIDTH - 4;
171
+ const promptLines = wrapText(job.prompt, maxPromptLineLen);
172
+ for (const line of promptLines) {
173
+ lines.push(row(` ${line}`));
174
+ }
175
+ if (job.negative_prompt) {
176
+ lines.push(row(` ${chalk.dim('Negative:')} ${truncate(job.negative_prompt, maxPromptLineLen - 10)}`));
177
+ }
178
+ // ── Parameters ──
179
+ lines.push(midBorder());
180
+ lines.push(sectionHeader('PARAMETERS'));
181
+ lines.push(kvRow('Operation', formatOperation(job.operation)));
182
+ lines.push(kvRow('Duration', job.duration_seconds != null ? `${job.duration_seconds}s` : '(none)'));
183
+ lines.push(kvRow('Resolution', job.resolution ?? '(none)'));
184
+ lines.push(kvRow('Aspect', job.aspect_ratio ?? '(none)'));
185
+ lines.push(kvRow('Seed', job.seed != null ? String(job.seed) : '(none)'));
186
+ lines.push(kvRow('Input Media', job.input_media_url ?? '(none)'));
187
+ // ── Timeline ──
188
+ const timeline = buildTimeline(job);
189
+ lines.push(midBorder());
190
+ lines.push(sectionHeader('TIMELINE'));
191
+ for (const entry of timeline.entries) {
192
+ if (entry.relativeMs === 0 && entry.timestamp) {
193
+ lines.push(kvRow(entry.label, formatTimestamp(entry.timestamp)));
194
+ }
195
+ else {
196
+ lines.push(kvRow(entry.label, formatRelativeMs(entry.relativeMs)));
197
+ }
198
+ }
199
+ if (timeline.totalMs != null) {
200
+ lines.push(kvRow('Total', `${(timeline.totalMs / 1000).toFixed(1)}s`));
201
+ }
202
+ else {
203
+ lines.push(kvRow('Total', '...'));
204
+ }
205
+ // ── Cost ──
206
+ const cost = computeCost(job);
207
+ lines.push(midBorder());
208
+ lines.push(sectionHeader('COST'));
209
+ lines.push(kvRow('Credits', String(cost.credits)));
210
+ lines.push(kvRow('Revenue', formatUsd(cost.revenueUsd)));
211
+ lines.push(kvRow('Provider', cost.providerCostUsd != null ? formatUsd(cost.providerCostUsd) : '(unknown)'));
212
+ if (cost.marginPct != null && cost.marginUsd != null) {
213
+ lines.push(kvRow('Margin', `${Math.round(cost.marginPct)}% (${formatUsd(cost.marginUsd)})`));
214
+ }
215
+ else {
216
+ lines.push(kvRow('Margin', '(unknown)'));
217
+ }
218
+ // ── Provider ──
219
+ lines.push(midBorder());
220
+ lines.push(sectionHeader('PROVIDER'));
221
+ lines.push(kvRow('Provider', job.provider_slug ?? '(unknown)'));
222
+ lines.push(kvRow('Provider Job', job.provider_job_id ?? '(none)'));
223
+ lines.push(kvRow('Checkpoint', job.webhook_checkpoint));
224
+ // ── Error (for failed jobs) ──
225
+ if (job.status === 'failed') {
226
+ lines.push(midBorder());
227
+ lines.push(sectionHeader('ERROR'));
228
+ lines.push(kvRow('Code', job.error_code ?? '(unknown)'));
229
+ lines.push(kvRow('Message', job.error_message ?? '(no message)'));
230
+ const refundStatus = job.credits_refunded
231
+ ? chalk.green('refunded')
232
+ : chalk.yellow('not refunded');
233
+ lines.push(kvRow('Refund', refundStatus));
234
+ }
235
+ // ── Output ──
236
+ if (job.output_media_url || job.output_thumbnail_url) {
237
+ lines.push(midBorder());
238
+ lines.push(sectionHeader('OUTPUT'));
239
+ lines.push(kvRow('Media URL', job.output_media_url ? chalk.underline(truncate(job.output_media_url, 24)) : '(none)'));
240
+ lines.push(kvRow('Thumbnail', job.output_thumbnail_url ? chalk.underline(truncate(job.output_thumbnail_url, 24)) : '(none)'));
241
+ }
242
+ lines.push(bottomBorder());
243
+ console.log();
244
+ for (const line of lines) {
245
+ console.log(` ${line}`);
246
+ }
247
+ console.log();
248
+ }
249
+ // ── String helpers ───────────────────────────────────────────────────
250
+ function truncate(str, maxLen) {
251
+ if (str.length <= maxLen)
252
+ return str;
253
+ return `${str.slice(0, maxLen - 3)}...`;
254
+ }
255
+ function wrapText(text, maxLen) {
256
+ const words = text.split(/\s+/);
257
+ const lines = [];
258
+ let current = '';
259
+ for (const word of words) {
260
+ if (current.length === 0) {
261
+ current = word;
262
+ }
263
+ else if (current.length + 1 + word.length <= maxLen) {
264
+ current += ` ${word}`;
265
+ }
266
+ else {
267
+ lines.push(current);
268
+ current = word;
269
+ }
270
+ }
271
+ if (current.length > 0) {
272
+ lines.push(current);
273
+ }
274
+ return lines.length > 0 ? lines : ['(empty)'];
275
+ }
276
+ function formatOperation(op) {
277
+ return op.replace(/_/g, '-');
278
+ }
279
+ function formatUsd(amount) {
280
+ return `$${amount.toFixed(2)}`;
281
+ }
282
+ // ── Watch-mode screen clear ──────────────────────────────────────────
283
+ function clearScreen() {
284
+ process.stdout.write('\x1B[2J\x1B[H');
285
+ }
286
+ // ── Terminal status check ────────────────────────────────────────────
287
+ function isTerminalStatus(status) {
288
+ return status === 'completed' || status === 'failed' || status === 'canceled';
289
+ }
290
+ // ── Command registration ─────────────────────────────────────────────
291
+ export function registerInspectCommand(program) {
292
+ program
293
+ .command('inspect <job-id>')
294
+ .description('Display a detailed inspection view of a generation job')
295
+ .option('-w, --watch', 'Poll for live updates until the job completes')
296
+ .action(async (jobId, cmdOpts) => {
297
+ const globalOpts = program.opts();
298
+ const mode = detectOutputMode(globalOpts);
299
+ const profileName = resolveProfileName(globalOpts.profile);
300
+ const apiKey = getApiKey(profileName);
301
+ if (!apiKey) {
302
+ throw new CLIError('Not logged in.', {
303
+ code: 'NOT_AUTHENTICATED',
304
+ suggestion: "Run 'agent-media login' to authenticate.",
305
+ });
306
+ }
307
+ try {
308
+ const api = new AgentMediaAPI(apiKey);
309
+ if (cmdOpts.watch && mode === 'human') {
310
+ // ── Watch mode: poll every 3s, update in-place ─────────────
311
+ const POLL_INTERVAL_MS = 3000;
312
+ const startTime = Date.now();
313
+ let running = true;
314
+ // Handle Ctrl+C gracefully
315
+ const onSigint = () => {
316
+ running = false;
317
+ console.log();
318
+ console.log(chalk.dim(' Stopped watching.'));
319
+ process.exit(0);
320
+ };
321
+ process.on('SIGINT', onSigint);
322
+ try {
323
+ while (running) {
324
+ const job = await api.getJob(jobId);
325
+ const elapsed = Math.floor((Date.now() - startTime) / 1000);
326
+ clearScreen();
327
+ printInspectCard(job);
328
+ console.log(chalk.dim(` Watching... elapsed ${elapsed}s (Ctrl+C to stop)`));
329
+ console.log();
330
+ // Exit when terminal status reached
331
+ if (isTerminalStatus(job.status)) {
332
+ break;
333
+ }
334
+ // Wait before next poll
335
+ await new Promise((resolve) => {
336
+ const timer = setTimeout(resolve, POLL_INTERVAL_MS);
337
+ // Allow early exit on SIGINT
338
+ const earlyExit = () => {
339
+ clearTimeout(timer);
340
+ resolve();
341
+ };
342
+ process.once('SIGINT', earlyExit);
343
+ });
344
+ }
345
+ }
346
+ finally {
347
+ process.removeListener('SIGINT', onSigint);
348
+ }
349
+ }
350
+ else {
351
+ // ── Single fetch ───────────────────────────────────────────
352
+ const spinner = createSpinner('Inspecting job...');
353
+ if (mode === 'human')
354
+ spinner.start();
355
+ const job = await api.getJob(jobId);
356
+ if (mode === 'human')
357
+ spinner.stop();
358
+ switch (mode) {
359
+ case 'json':
360
+ printJson(buildInspectOutput(job));
361
+ break;
362
+ case 'quiet':
363
+ printQuiet(job.status);
364
+ break;
365
+ default:
366
+ printInspectCard(job);
367
+ break;
368
+ }
369
+ }
370
+ }
371
+ catch (error) {
372
+ handleError(error);
373
+ }
374
+ });
375
+ }
376
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAW/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAsB,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzD,wEAAwE;AAExE,MAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,MAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,MAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,MAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,MAAM,KAAK,GAAI,QAAQ,CAAC;AACxB,MAAM,KAAK,GAAI,QAAQ,CAAC;AACxB,MAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,MAAM,MAAM,GAAG,QAAQ,CAAC;AAExB,4DAA4D;AAC5D,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,wEAAwE;AAExE,MAAM,aAAa,GAA6C;IAC9D,OAAO,EAAE,KAAK,CAAC,MAAM;IACrB,SAAS,EAAE,KAAK,CAAC,MAAM;IACvB,UAAU,EAAE,KAAK,CAAC,IAAI;IACtB,SAAS,EAAE,KAAK,CAAC,KAAK;IACtB,MAAM,EAAE,KAAK,CAAC,GAAG;IACjB,QAAQ,EAAE,KAAK,CAAC,GAAG;CACpB,CAAC;AAEF,MAAM,aAAa,GAA2B;IAC5C,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF,SAAS,YAAY,CAAC,MAAc;IAClC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;IACtD,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5D,OAAO,QAAQ,CAAC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,wEAAwE;AAExE,SAAS,SAAS;IAChB,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,GAAG,CAAC,OAAe;IAC1B,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO;IAC9B,4CAA4C;IAC5C,iBAAiB,EACjB,EAAE,CACH,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7D,OAAO,GAAG,KAAK,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,KAAK,CAAC,GAAW,EAAE,KAAa,EAAE,QAAQ,GAAG,EAAE;IACtD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC,KAAK,SAAS,GAAG,KAAK,EAAE,CAAC,CAAC;AACvC,CAAC;AAeD,SAAS,aAAa,CAAC,GAAkB;IACvC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;IACrD,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,2BAA2B;IAC3B,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;IAEH,2EAA2E;IAC3E,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,UAAU,EAAE,SAAS,GAAG,SAAS;SAClC,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,sDAAsD;IACtD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,UAAU,EAAE,SAAS,GAAG,SAAS;SAClC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;YACvD,SAAS,EAAE,GAAG,CAAC,YAAY;YAC3B,UAAU,EAAE,WAAW,GAAG,SAAS;SACpC,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY;QAC9B,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS;QAClD,CAAC,CAAC,IAAI,CAAC;IAET,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAiB;IACzC,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACnC,CAAC;AAED,SAAS,eAAe,CAAC,MAAc;IACrC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;AAC/D,CAAC;AAED,wEAAwE;AAExE,iFAAiF;AACjF,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAUhC,SAAS,WAAW,CAAC,GAAkB;IACrC,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC;IAChC,MAAM,UAAU,GAAG,OAAO,GAAG,kBAAkB,CAAC;IAChD,MAAM,eAAe,GAAG,GAAG,CAAC,iBAAiB,IAAI,IAAI;QACnD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,SAAS,GAAkB,IAAI,CAAC;IAEpC,IAAI,eAAe,IAAI,IAAI,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC9C,SAAS,GAAG,UAAU,GAAG,eAAe,CAAC;QACzC,SAAS,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACxE,CAAC;AAkBD,SAAS,kBAAkB,CAAC,GAAkB;IAC5C,OAAO;QACL,GAAG;QACH,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC;QAC5B,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC;QAC/B,eAAe,EAAE;YACf,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,aAAa,EAAE,GAAG,CAAC,eAAe;YAClC,iBAAiB,EAAE,GAAG,CAAC,kBAAkB;SAC1C;KACF,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE,SAAS,gBAAgB,CAAC,GAAkB;IAC1C,MAAM,YAAY,GAAG,GAAG,CAAC,kBAAkB;QACzC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,kBAAkB,GAAG;QACjD,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;IAEnB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,eAAe;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC,CAAC;IAE1C,eAAe;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpC,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,SAAS,GAAG,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3D,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,gBAAgB,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,mBAAmB;IACnB,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,eAAe,IAAI,QAAQ,CAAC,CAAC,CAAC;IAElE,iBAAiB;IACjB,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,aAAa;IACb,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5G,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,iBAAiB;IACjB,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,eAAe,IAAI,QAAQ,CAAC,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAExD,gCAAgC;IAChC,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,aAAa,IAAI,cAAc,CAAC,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,GAAG,CAAC,gBAAgB;YACvC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;YACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,eAAe;IACf,IAAI,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtH,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChI,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAE3B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,wEAAwE;AAExE,SAAS,QAAQ,CAAC,GAAW,EAAE,MAAc;IAC3C,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;AAC1C,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,MAAc;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YACtD,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CAAC,EAAU;IACjC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,SAAS,CAAC,MAAc;IAC/B,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AACjC,CAAC;AAED,wEAAwE;AAExE,SAAS,WAAW;IAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,wEAAwE;AAExE,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,UAAU,CAAC;AAChF,CAAC;AAED,wEAAwE;AAExE,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,aAAa,EAAE,+CAA+C,CAAC;SACtE,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAA4B,EAAE,EAAE;QAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAI3B,CAAC;QACL,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;QAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE;gBACnC,IAAI,EAAE,mBAAmB;gBACzB,UAAU,EAAE,0CAA0C;aACvD,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;YAEtC,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACtC,8DAA8D;gBAC9D,MAAM,gBAAgB,GAAG,IAAI,CAAC;gBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,IAAI,OAAO,GAAG,IAAI,CAAC;gBAEnB,2BAA2B;gBAC3B,MAAM,QAAQ,GAAG,GAAS,EAAE;oBAC1B,OAAO,GAAG,KAAK,CAAC;oBAChB,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC;gBACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAE/B,IAAI,CAAC;oBACH,OAAO,OAAO,EAAE,CAAC;wBACf,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;wBAE5D,WAAW,EAAE,CAAC;wBACd,gBAAgB,CAAC,GAAG,CAAC,CAAC;wBACtB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,2BAA2B,OAAO,oBAAoB,CAAC,CAClE,CAAC;wBACF,OAAO,CAAC,GAAG,EAAE,CAAC;wBAEd,oCAAoC;wBACpC,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;4BACjC,MAAM;wBACR,CAAC;wBAED,wBAAwB;wBACxB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;4BAClC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;4BACpD,6BAA6B;4BAC7B,MAAM,SAAS,GAAG,GAAS,EAAE;gCAC3B,YAAY,CAAC,KAAK,CAAC,CAAC;gCACpB,OAAO,EAAE,CAAC;4BACZ,CAAC,CAAC;4BACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;wBACpC,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,8DAA8D;gBAC9D,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;gBACnD,IAAI,IAAI,KAAK,OAAO;oBAAE,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEtC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEpC,IAAI,IAAI,KAAK,OAAO;oBAAE,OAAO,CAAC,IAAI,EAAE,CAAC;gBAErC,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,MAAM;wBACT,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;wBACnC,MAAM;oBAER,KAAK,OAAO;wBACV,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACvB,MAAM;oBAER;wBACE,gBAAgB,CAAC,GAAG,CAAC,CAAC;wBACtB,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `agent-media list` command.
3
+ *
4
+ * Lists the authenticated user's generation jobs with optional filtering
5
+ * by status and model. Supports human (table), JSON, and quiet output modes.
6
+ *
7
+ * Human mode displays a formatted table with colored status indicators
8
+ * and relative timestamps. JSON mode outputs the raw job array. Quiet
9
+ * mode outputs job IDs only, one per line, for scripting.
10
+ */
11
+ import type { Command } from 'commander';
12
+ export declare function registerListCommand(program: Command): void;
13
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6IzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4G1D"}
@@ -0,0 +1,198 @@
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
+ submitted: chalk.yellow,
11
+ processing: chalk.blue,
12
+ completed: chalk.green,
13
+ failed: chalk.red,
14
+ canceled: chalk.dim,
15
+ };
16
+ /** Valid status values for the --status filter. */
17
+ const VALID_STATUSES = ['pending', 'submitted', 'processing', 'completed', 'failed', 'canceled'];
18
+ /**
19
+ * Format a status string with color.
20
+ */
21
+ function colorStatus(status) {
22
+ const colorize = STATUS_COLORS[status] ?? chalk.white;
23
+ return colorize(status);
24
+ }
25
+ /**
26
+ * Format a relative time string (e.g., "2m ago", "3h ago", "5d ago").
27
+ */
28
+ function timeAgo(dateStr) {
29
+ const now = Date.now();
30
+ const then = new Date(dateStr).getTime();
31
+ const diffMs = now - then;
32
+ const seconds = Math.floor(diffMs / 1000);
33
+ if (seconds < 60)
34
+ return `${seconds}s ago`;
35
+ const minutes = Math.floor(seconds / 60);
36
+ if (minutes < 60)
37
+ return `${minutes}m ago`;
38
+ const hours = Math.floor(minutes / 60);
39
+ if (hours < 24)
40
+ return `${hours}h ago`;
41
+ const days = Math.floor(hours / 24);
42
+ return `${days}d ago`;
43
+ }
44
+ /**
45
+ * Truncate a string to maxLen characters, appending ellipsis if needed.
46
+ */
47
+ function truncate(str, maxLen) {
48
+ if (str.length <= maxLen)
49
+ return str;
50
+ return str.slice(0, maxLen - 1) + '\u2026';
51
+ }
52
+ /**
53
+ * Pad or truncate a string to an exact fixed width for column alignment.
54
+ */
55
+ function fixedWidth(str, width) {
56
+ // Strip ANSI codes for length calculation
57
+ const stripped = str.replace(
58
+ // eslint-disable-next-line no-control-regex
59
+ /\x1B\[[0-9;]*m/g, '');
60
+ if (stripped.length >= width)
61
+ return str;
62
+ return str + ' '.repeat(width - stripped.length);
63
+ }
64
+ /**
65
+ * Print the formatted table of jobs to stdout.
66
+ */
67
+ function printJobTable(jobs, total, filters) {
68
+ // Column widths
69
+ const COL_ID = 10;
70
+ const COL_STATUS = 12;
71
+ const COL_MODEL = 18;
72
+ const COL_PROMPT = 42;
73
+ const COL_CREDITS = 9;
74
+ const COL_CREATED = 10;
75
+ // Header
76
+ const header = fixedWidth('ID', COL_ID) +
77
+ fixedWidth('STATUS', COL_STATUS) +
78
+ fixedWidth('MODEL', COL_MODEL) +
79
+ fixedWidth('PROMPT', COL_PROMPT) +
80
+ fixedWidth('CREDITS', COL_CREDITS) +
81
+ 'CREATED';
82
+ const separator = '\u2500'.repeat(COL_ID) +
83
+ '\u2500'.repeat(COL_STATUS) +
84
+ '\u2500'.repeat(COL_MODEL) +
85
+ '\u2500'.repeat(COL_PROMPT) +
86
+ '\u2500'.repeat(COL_CREDITS) +
87
+ '\u2500'.repeat(COL_CREATED);
88
+ console.log();
89
+ console.log(chalk.bold(header));
90
+ console.log(chalk.dim(separator));
91
+ for (const job of jobs) {
92
+ const id = fixedWidth(job.id.slice(0, 8), COL_ID);
93
+ const status = fixedWidth(colorStatus(job.status), COL_STATUS);
94
+ const model = fixedWidth(truncate(job.model_slug, COL_MODEL - 2), COL_MODEL);
95
+ const prompt = fixedWidth(truncate(job.prompt, COL_PROMPT - 2), COL_PROMPT);
96
+ const credits = job.credits_charged != null
97
+ ? fixedWidth(String(job.credits_charged), COL_CREDITS)
98
+ : fixedWidth('-', COL_CREDITS);
99
+ const created = timeAgo(job.created_at);
100
+ console.log(`${id}${status}${model}${prompt}${credits}${created}`);
101
+ }
102
+ console.log();
103
+ // Summary line
104
+ const parts = [];
105
+ if (filters.status)
106
+ parts.push(`status=${filters.status}`);
107
+ if (filters.model)
108
+ parts.push(`model=${filters.model}`);
109
+ const filterStr = parts.length > 0 ? ` (filtered: ${parts.join(', ')})` : '';
110
+ console.log(chalk.dim(` Showing ${jobs.length} of ${total} jobs${filterStr}`));
111
+ console.log();
112
+ }
113
+ export function registerListCommand(program) {
114
+ program
115
+ .command('list')
116
+ .alias('ls')
117
+ .description('List your generation jobs')
118
+ .option('-s, --status <status>', 'Filter by job status')
119
+ .option('-m, --model <model>', 'Filter by model slug')
120
+ .option('-n, --limit <n>', 'Maximum number of jobs to show', '20')
121
+ .action(async (cmdOpts) => {
122
+ const globalOpts = program.opts();
123
+ const mode = detectOutputMode(globalOpts);
124
+ const profileName = resolveProfileName(globalOpts.profile);
125
+ const apiKey = getApiKey(profileName);
126
+ if (!apiKey) {
127
+ throw new CLIError('Not logged in.', {
128
+ code: 'NOT_AUTHENTICATED',
129
+ suggestion: "Run 'agent-media login' to authenticate.",
130
+ });
131
+ }
132
+ // Validate --status flag
133
+ if (cmdOpts.status && !VALID_STATUSES.includes(cmdOpts.status)) {
134
+ throw new CLIError(`Invalid status: ${cmdOpts.status}`, {
135
+ code: 'INVALID_ARGUMENT',
136
+ suggestion: `Valid statuses: ${VALID_STATUSES.join(', ')}`,
137
+ });
138
+ }
139
+ // Parse --limit flag
140
+ const limit = parseInt(cmdOpts.limit ?? '20', 10);
141
+ if (isNaN(limit) || limit < 1) {
142
+ throw new CLIError('--limit must be a positive integer.', {
143
+ code: 'INVALID_ARGUMENT',
144
+ suggestion: 'Provide a number greater than 0.',
145
+ });
146
+ }
147
+ try {
148
+ const api = new AgentMediaAPI(apiKey);
149
+ const spinner = createSpinner('Fetching jobs...');
150
+ if (mode === 'human')
151
+ spinner.start();
152
+ const { jobs, total } = await api.listJobs({
153
+ status: cmdOpts.status,
154
+ model: cmdOpts.model,
155
+ limit,
156
+ sort: 'newest',
157
+ });
158
+ if (mode === 'human')
159
+ spinner.stop();
160
+ // ── Empty state ──────────────────────────────────────────────
161
+ if (jobs.length === 0) {
162
+ switch (mode) {
163
+ case 'json':
164
+ printJson([]);
165
+ break;
166
+ case 'quiet':
167
+ // No output for quiet mode on empty result
168
+ break;
169
+ default:
170
+ console.log();
171
+ console.log(chalk.dim(" No jobs found. Run 'agent-media generate <model>' to create one."));
172
+ console.log();
173
+ break;
174
+ }
175
+ return;
176
+ }
177
+ // ── Output ───────────────────────────────────────────────────
178
+ switch (mode) {
179
+ case 'json':
180
+ printJson(jobs);
181
+ break;
182
+ case 'quiet':
183
+ printQuiet(jobs.map((job) => job.id));
184
+ break;
185
+ default:
186
+ printJobTable(jobs, total, {
187
+ status: cmdOpts.status,
188
+ model: cmdOpts.model,
189
+ });
190
+ break;
191
+ }
192
+ }
193
+ catch (error) {
194
+ handleError(error);
195
+ }
196
+ });
197
+ }
198
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `agent-media login` command.
3
+ *
4
+ * Authenticates via the OAuth device-code flow:
5
+ * 1. CLI calls POST /functions/v1/device-token to get a device code.
6
+ * 2. Opens the verification URL in the user's default browser.
7
+ * 3. Polls GET /functions/v1/device-token?code=XXXX every N seconds.
8
+ * 4. On approval, stores the API key in ~/.agent-media/credentials.json.
9
+ *
10
+ * Supports --profile for multi-account, --no-browser to skip auto-open,
11
+ * and --timeout to override the default 5-minute polling window.
12
+ */
13
+ import type { Command } from 'commander';
14
+ export declare function registerLoginCommand(program: Command): void;
15
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8I3D"}