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.
- package/LICENSE +199 -0
- package/README.md +59 -0
- package/dist/commands/alias.d.ts +3 -0
- package/dist/commands/alias.d.ts.map +1 -0
- package/dist/commands/alias.js +245 -0
- package/dist/commands/alias.js.map +1 -0
- package/dist/commands/apikey.d.ts +3 -0
- package/dist/commands/apikey.d.ts.map +1 -0
- package/dist/commands/apikey.js +282 -0
- package/dist/commands/apikey.js.map +1 -0
- package/dist/commands/cancel.d.ts +9 -0
- package/dist/commands/cancel.d.ts.map +1 -0
- package/dist/commands/cancel.js +101 -0
- package/dist/commands/cancel.js.map +1 -0
- package/dist/commands/completions.d.ts +15 -0
- package/dist/commands/completions.d.ts.map +1 -0
- package/dist/commands/completions.js +293 -0
- package/dist/commands/completions.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +327 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/credits.d.ts +18 -0
- package/dist/commands/credits.d.ts.map +1 -0
- package/dist/commands/credits.js +459 -0
- package/dist/commands/credits.js.map +1 -0
- package/dist/commands/debug.d.ts +20 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +291 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/delete.d.ts +3 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +273 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/doctor.d.ts +14 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +468 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/download.d.ts +3 -0
- package/dist/commands/download.d.ts.map +1 -0
- package/dist/commands/download.js +165 -0
- package/dist/commands/download.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +358 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/inspect.d.ts +10 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +376 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/list.d.ts +13 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +198 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts +15 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +123 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +12 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +85 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/models.d.ts +10 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +137 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/plan.d.ts +13 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +134 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/pricing.d.ts +14 -0
- package/dist/commands/pricing.d.ts.map +1 -0
- package/dist/commands/pricing.js +166 -0
- package/dist/commands/pricing.js.map +1 -0
- package/dist/commands/profile.d.ts +9 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +236 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/retry.d.ts +3 -0
- package/dist/commands/retry.d.ts.map +1 -0
- package/dist/commands/retry.js +424 -0
- package/dist/commands/retry.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +182 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/subscribe.d.ts +3 -0
- package/dist/commands/subscribe.d.ts.map +1 -0
- package/dist/commands/subscribe.js +263 -0
- package/dist/commands/subscribe.js.map +1 -0
- package/dist/commands/text.d.ts +3 -0
- package/dist/commands/text.d.ts.map +1 -0
- package/dist/commands/text.js +263 -0
- package/dist/commands/text.js.map +1 -0
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +211 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/usage.d.ts +13 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +344 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/version.d.ts +8 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +26 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/whoami.d.ts +9 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +76 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +518 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +582 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +33 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +91 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/credentials.d.ts +60 -0
- package/dist/lib/credentials.d.ts.map +1 -0
- package/dist/lib/credentials.js +152 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/errors.d.ts +20 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +77 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/output.d.ts +33 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +77 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
// Copyright 2026 agent-media contributors. Apache-2.0 license.
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { detectOutputMode, printJson, printQuiet, createSpinner } from '../lib/output.js';
|
|
6
|
+
import { CLIError, handleError } from '../lib/errors.js';
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
8
|
+
const pkg = require('../../package.json');
|
|
9
|
+
/** npm registry URL for the package. */
|
|
10
|
+
const REGISTRY_URL = `https://registry.npmjs.org/${pkg.name}/latest`;
|
|
11
|
+
/** Timeout for the registry fetch (5 seconds). */
|
|
12
|
+
const FETCH_TIMEOUT_MS = 5_000;
|
|
13
|
+
/**
|
|
14
|
+
* Compare two semver strings. Returns:
|
|
15
|
+
* -1 if a < b, 0 if equal, 1 if a > b.
|
|
16
|
+
*/
|
|
17
|
+
function compareSemver(a, b) {
|
|
18
|
+
const pa = a.replace(/^v/, '').split('.').map(Number);
|
|
19
|
+
const pb = b.replace(/^v/, '').split('.').map(Number);
|
|
20
|
+
for (let i = 0; i < 3; i++) {
|
|
21
|
+
const va = pa[i] ?? 0;
|
|
22
|
+
const vb = pb[i] ?? 0;
|
|
23
|
+
if (va < vb)
|
|
24
|
+
return -1;
|
|
25
|
+
if (va > vb)
|
|
26
|
+
return 1;
|
|
27
|
+
}
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Fetch the latest version string from the npm registry.
|
|
32
|
+
*/
|
|
33
|
+
async function fetchLatestVersion() {
|
|
34
|
+
const controller = new AbortController();
|
|
35
|
+
const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
36
|
+
try {
|
|
37
|
+
const res = await fetch(REGISTRY_URL, {
|
|
38
|
+
method: 'GET',
|
|
39
|
+
signal: controller.signal,
|
|
40
|
+
headers: { Accept: 'application/json' },
|
|
41
|
+
});
|
|
42
|
+
if (!res.ok) {
|
|
43
|
+
throw new CLIError(`Failed to check for updates (HTTP ${res.status})`, {
|
|
44
|
+
code: 'REGISTRY_ERROR',
|
|
45
|
+
suggestion: 'Check your network connection or try again later.',
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
const data = (await res.json());
|
|
49
|
+
if (!data.version) {
|
|
50
|
+
throw new CLIError('Unexpected response from npm registry.', {
|
|
51
|
+
code: 'REGISTRY_PARSE_ERROR',
|
|
52
|
+
suggestion: 'Try again later or check https://www.npmjs.com/package/agent-media manually.',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return data.version;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (error instanceof CLIError)
|
|
59
|
+
throw error;
|
|
60
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
61
|
+
throw new CLIError('Timed out checking for updates.', {
|
|
62
|
+
code: 'REGISTRY_TIMEOUT',
|
|
63
|
+
suggestion: 'Check your network connection or try again later.',
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
throw new CLIError('Failed to check for updates.', {
|
|
67
|
+
code: 'REGISTRY_ERROR',
|
|
68
|
+
suggestion: 'Check your network connection or try again later.',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
clearTimeout(timeout);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Detect the package manager used to install the CLI globally.
|
|
77
|
+
*
|
|
78
|
+
* Checks for common indicators. Falls back to npm.
|
|
79
|
+
*/
|
|
80
|
+
function detectPackageManager() {
|
|
81
|
+
try {
|
|
82
|
+
const npmGlobalRoot = execSync('npm root -g', { encoding: 'utf-8' }).trim();
|
|
83
|
+
if (npmGlobalRoot && process.argv[1]?.includes(npmGlobalRoot)) {
|
|
84
|
+
return 'npm';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// ignore
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
execSync('pnpm --version', { encoding: 'utf-8', stdio: 'pipe' });
|
|
92
|
+
return 'pnpm';
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// ignore
|
|
96
|
+
}
|
|
97
|
+
return 'npm';
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Build the install command string for the detected package manager.
|
|
101
|
+
*/
|
|
102
|
+
function buildInstallCommand(pm, version) {
|
|
103
|
+
const spec = `${pkg.name}@${version}`;
|
|
104
|
+
switch (pm) {
|
|
105
|
+
case 'pnpm':
|
|
106
|
+
return `pnpm add -g ${spec}`;
|
|
107
|
+
case 'yarn':
|
|
108
|
+
return `yarn global add ${spec}`;
|
|
109
|
+
default:
|
|
110
|
+
return `npm install -g ${spec}`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
export function registerUpdateCommand(program) {
|
|
114
|
+
program
|
|
115
|
+
.command('update')
|
|
116
|
+
.description('Check for and install CLI updates')
|
|
117
|
+
.option('--check', 'Check only, do not install')
|
|
118
|
+
.action(async (cmdOpts) => {
|
|
119
|
+
const globalOpts = program.opts();
|
|
120
|
+
const mode = detectOutputMode(globalOpts);
|
|
121
|
+
const checkOnly = cmdOpts.check ?? false;
|
|
122
|
+
try {
|
|
123
|
+
const spinner = createSpinner('Checking for updates...');
|
|
124
|
+
if (mode === 'human')
|
|
125
|
+
spinner.start();
|
|
126
|
+
const latestVersion = await fetchLatestVersion();
|
|
127
|
+
const currentVersion = pkg.version;
|
|
128
|
+
const comparison = compareSemver(currentVersion, latestVersion);
|
|
129
|
+
if (mode === 'human')
|
|
130
|
+
spinner.stop();
|
|
131
|
+
// Already up to date
|
|
132
|
+
if (comparison >= 0) {
|
|
133
|
+
switch (mode) {
|
|
134
|
+
case 'json':
|
|
135
|
+
printJson({
|
|
136
|
+
current: currentVersion,
|
|
137
|
+
latest: latestVersion,
|
|
138
|
+
update_available: false,
|
|
139
|
+
});
|
|
140
|
+
break;
|
|
141
|
+
case 'quiet':
|
|
142
|
+
printQuiet(currentVersion);
|
|
143
|
+
break;
|
|
144
|
+
default:
|
|
145
|
+
console.log();
|
|
146
|
+
console.log(` ${chalk.green('Up to date!')} agent-media v${currentVersion} is the latest version.`);
|
|
147
|
+
console.log();
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
// Update available
|
|
153
|
+
const pm = detectPackageManager();
|
|
154
|
+
const installCmd = buildInstallCommand(pm, latestVersion);
|
|
155
|
+
switch (mode) {
|
|
156
|
+
case 'json':
|
|
157
|
+
printJson({
|
|
158
|
+
current: currentVersion,
|
|
159
|
+
latest: latestVersion,
|
|
160
|
+
update_available: true,
|
|
161
|
+
install_command: installCmd,
|
|
162
|
+
});
|
|
163
|
+
break;
|
|
164
|
+
case 'quiet':
|
|
165
|
+
printQuiet(latestVersion);
|
|
166
|
+
break;
|
|
167
|
+
default: {
|
|
168
|
+
console.log();
|
|
169
|
+
console.log(chalk.bold(' Update available!'));
|
|
170
|
+
console.log();
|
|
171
|
+
console.log(` ${chalk.dim('Current:')} v${currentVersion}`);
|
|
172
|
+
console.log(` ${chalk.green('Latest:')} v${latestVersion}`);
|
|
173
|
+
console.log();
|
|
174
|
+
if (checkOnly) {
|
|
175
|
+
console.log(` Run the following to update:`);
|
|
176
|
+
console.log();
|
|
177
|
+
console.log(` ${chalk.cyan(installCmd)}`);
|
|
178
|
+
console.log();
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Attempt to install the update
|
|
182
|
+
console.log(` Installing update via ${pm}...`);
|
|
183
|
+
console.log();
|
|
184
|
+
const installSpinner = createSpinner(`Running: ${installCmd}`);
|
|
185
|
+
installSpinner.start();
|
|
186
|
+
try {
|
|
187
|
+
execSync(installCmd, {
|
|
188
|
+
encoding: 'utf-8',
|
|
189
|
+
stdio: 'pipe',
|
|
190
|
+
});
|
|
191
|
+
installSpinner.succeed(`Updated agent-media from v${currentVersion} to v${latestVersion}`);
|
|
192
|
+
console.log();
|
|
193
|
+
}
|
|
194
|
+
catch (installError) {
|
|
195
|
+
installSpinner.fail('Installation failed');
|
|
196
|
+
const msg = installError instanceof Error ? installError.message : String(installError);
|
|
197
|
+
throw new CLIError(`Failed to install update: ${msg}`, {
|
|
198
|
+
code: 'UPDATE_INSTALL_FAILED',
|
|
199
|
+
suggestion: `Try installing manually:\n ${installCmd}`,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
handleError(error);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agent-media usage` command.
|
|
3
|
+
*
|
|
4
|
+
* Displays usage analytics for the authenticated user, including job
|
|
5
|
+
* counts, credit consumption, per-model breakdowns, and per-operation
|
|
6
|
+
* distributions. Data is fetched from the usage-stats edge function.
|
|
7
|
+
*
|
|
8
|
+
* Supports human (box-drawn tables), JSON, and quiet output modes.
|
|
9
|
+
* The time period is configurable via --period (7d, 30d, 90d).
|
|
10
|
+
*/
|
|
11
|
+
import type { Command } from 'commander';
|
|
12
|
+
export declare function registerUsageCommand(program: Command): void;
|
|
13
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkXzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsG3D"}
|
|
@@ -0,0 +1,344 @@
|
|
|
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 characters ─────────────────────────────────────────────────
|
|
8
|
+
const BOX = {
|
|
9
|
+
topLeft: '\u256D',
|
|
10
|
+
topRight: '\u256E',
|
|
11
|
+
bottomLeft: '\u2570',
|
|
12
|
+
bottomRight: '\u256F',
|
|
13
|
+
horizontal: '\u2500',
|
|
14
|
+
vertical: '\u2502',
|
|
15
|
+
teeRight: '\u251C',
|
|
16
|
+
teeLeft: '\u2524',
|
|
17
|
+
cross: '\u253C',
|
|
18
|
+
teeDown: '\u252C',
|
|
19
|
+
teeUp: '\u2534',
|
|
20
|
+
};
|
|
21
|
+
/** Valid period values. */
|
|
22
|
+
const VALID_PERIODS = ['7d', '30d', '90d'];
|
|
23
|
+
/** Table width for the outer box (content area, excluding box chars). */
|
|
24
|
+
const BOX_WIDTH = 61;
|
|
25
|
+
// ── Formatting helpers ─────────────────────────────────────────────────────
|
|
26
|
+
/**
|
|
27
|
+
* Format a number with thousands separators (e.g., 8540 -> "8,540").
|
|
28
|
+
*/
|
|
29
|
+
function formatNumber(n) {
|
|
30
|
+
return n.toLocaleString('en-US');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Compute success rate as a percentage from summary data.
|
|
34
|
+
*/
|
|
35
|
+
function successRate(stats) {
|
|
36
|
+
const { total_jobs, failed_jobs } = stats.summary;
|
|
37
|
+
if (total_jobs === 0)
|
|
38
|
+
return '0.0%';
|
|
39
|
+
const rate = ((total_jobs - failed_jobs) / total_jobs) * 100;
|
|
40
|
+
return `${rate.toFixed(1)}%`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Compute average credit cost per job.
|
|
44
|
+
*/
|
|
45
|
+
function avgCostPerJob(stats) {
|
|
46
|
+
const { total_jobs, credits_used } = stats.summary;
|
|
47
|
+
if (total_jobs === 0)
|
|
48
|
+
return '0.0';
|
|
49
|
+
return (credits_used / total_jobs).toFixed(1);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Pad or truncate a string to an exact width.
|
|
53
|
+
*/
|
|
54
|
+
function pad(str, width) {
|
|
55
|
+
if (str.length >= width)
|
|
56
|
+
return str.slice(0, width);
|
|
57
|
+
return str + ' '.repeat(width - str.length);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Right-align a string within a given width.
|
|
61
|
+
*/
|
|
62
|
+
function rpad(str, width) {
|
|
63
|
+
if (str.length >= width)
|
|
64
|
+
return str.slice(0, width);
|
|
65
|
+
return ' '.repeat(width - str.length) + str;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Draw a horizontal box line (top, bottom, or separator).
|
|
69
|
+
*/
|
|
70
|
+
function boxLine(left, fill, right, width) {
|
|
71
|
+
return left + fill.repeat(width) + right;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Draw a box title row.
|
|
75
|
+
*/
|
|
76
|
+
function boxTitle(title, width) {
|
|
77
|
+
const top = boxLine(BOX.topLeft, BOX.horizontal, BOX.topRight, width);
|
|
78
|
+
const content = `${BOX.vertical} ${pad(title, width - 3)}${BOX.vertical}`;
|
|
79
|
+
const bottom = boxLine(BOX.bottomLeft, BOX.horizontal, BOX.bottomRight, width);
|
|
80
|
+
return `${top}\n${content}\n${bottom}`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build a bar chart string with filled and empty blocks.
|
|
84
|
+
*
|
|
85
|
+
* @param fraction - Value between 0 and 1.
|
|
86
|
+
* @param barWidth - Total number of block characters.
|
|
87
|
+
*/
|
|
88
|
+
function barChart(fraction, barWidth) {
|
|
89
|
+
const filled = Math.round(fraction * barWidth);
|
|
90
|
+
const empty = barWidth - filled;
|
|
91
|
+
return '\u2588'.repeat(filled) + '\u2591'.repeat(empty);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Format an operation slug for display (e.g., "text_to_video" -> "text_to_video").
|
|
95
|
+
* Keeps underscores for alignment consistency.
|
|
96
|
+
*/
|
|
97
|
+
function formatOperation(op) {
|
|
98
|
+
return op;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Compute per-model success rate. The edge function does not return
|
|
102
|
+
* per-model success counts, so we approximate using the overall
|
|
103
|
+
* success rate for display. In a future version the edge function
|
|
104
|
+
* could be extended to return per-model success/fail counts.
|
|
105
|
+
*
|
|
106
|
+
* For now, we compute model-level success from available data.
|
|
107
|
+
* Since the edge function only provides job_count and credits_used
|
|
108
|
+
* per model (no per-model fail count), we show "N/A" unless we can
|
|
109
|
+
* derive it. We'll use the overall success rate as a stand-in.
|
|
110
|
+
*/
|
|
111
|
+
function modelSuccessLabel(_model, overallRate) {
|
|
112
|
+
return overallRate;
|
|
113
|
+
}
|
|
114
|
+
// ── Table rendering ────────────────────────────────────────────────────────
|
|
115
|
+
/**
|
|
116
|
+
* Render the "By Model" table section.
|
|
117
|
+
*/
|
|
118
|
+
function renderByModelTable(models, overallRate) {
|
|
119
|
+
const lines = [];
|
|
120
|
+
// Column widths: Model(14) | Jobs(6) | Credits(9) | Avg Cost(10) | Success(18)
|
|
121
|
+
const colModel = 14;
|
|
122
|
+
const colJobs = 6;
|
|
123
|
+
const colCredits = 9;
|
|
124
|
+
const colAvgCost = 10;
|
|
125
|
+
const colSuccess = 18;
|
|
126
|
+
const headerLabels = [
|
|
127
|
+
pad('Model', colModel),
|
|
128
|
+
pad('Jobs', colJobs),
|
|
129
|
+
pad('Credits', colCredits),
|
|
130
|
+
pad('Avg Cost', colAvgCost),
|
|
131
|
+
pad('Success', colSuccess),
|
|
132
|
+
];
|
|
133
|
+
// Top border with column dividers
|
|
134
|
+
lines.push(BOX.topLeft +
|
|
135
|
+
BOX.horizontal.repeat(BOX_WIDTH) +
|
|
136
|
+
BOX.topRight);
|
|
137
|
+
// Section title
|
|
138
|
+
lines.push(`${BOX.vertical} ${pad('By Model', BOX_WIDTH - 3)}${BOX.vertical}`);
|
|
139
|
+
// Header separator with column tees
|
|
140
|
+
const colWidths = [colModel, colJobs, colCredits, colAvgCost, colSuccess];
|
|
141
|
+
lines.push(BOX.teeRight +
|
|
142
|
+
colWidths.map((w) => BOX.horizontal.repeat(w)).join(BOX.teeDown) +
|
|
143
|
+
BOX.teeLeft);
|
|
144
|
+
// Header row
|
|
145
|
+
lines.push(`${BOX.vertical}${headerLabels.join(BOX.vertical)}${BOX.vertical}`);
|
|
146
|
+
// Header/data separator
|
|
147
|
+
lines.push(BOX.teeRight +
|
|
148
|
+
colWidths.map((w) => BOX.horizontal.repeat(w)).join(BOX.cross) +
|
|
149
|
+
BOX.teeLeft);
|
|
150
|
+
// Data rows
|
|
151
|
+
for (const model of models) {
|
|
152
|
+
const avgCost = model.job_count > 0
|
|
153
|
+
? (model.credits_used / model.job_count).toFixed(1)
|
|
154
|
+
: '0.0';
|
|
155
|
+
const row = [
|
|
156
|
+
' ' + pad(model.model_slug, colModel - 1),
|
|
157
|
+
rpad(formatNumber(model.job_count), colJobs - 1) + ' ',
|
|
158
|
+
rpad(formatNumber(model.credits_used), colCredits - 1) + ' ',
|
|
159
|
+
rpad(avgCost, colAvgCost - 1) + ' ',
|
|
160
|
+
' ' + pad(modelSuccessLabel(model, overallRate), colSuccess - 1),
|
|
161
|
+
];
|
|
162
|
+
lines.push(`${BOX.vertical}${row.join(BOX.vertical)}${BOX.vertical}`);
|
|
163
|
+
}
|
|
164
|
+
// Bottom border
|
|
165
|
+
lines.push(BOX.bottomLeft +
|
|
166
|
+
colWidths.map((w) => BOX.horizontal.repeat(w)).join(BOX.teeUp) +
|
|
167
|
+
BOX.bottomRight);
|
|
168
|
+
return lines.join('\n');
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Render the "By Operation" table section.
|
|
172
|
+
*/
|
|
173
|
+
function renderByOperationTable(operations, totalCredits) {
|
|
174
|
+
const lines = [];
|
|
175
|
+
// For credits per operation, we need credit data. The edge function
|
|
176
|
+
// returns job_count per operation but not credits_used per operation.
|
|
177
|
+
// We'll estimate credits proportionally based on job count share
|
|
178
|
+
// of total credits. The bar chart uses job_count share.
|
|
179
|
+
const totalJobs = operations.reduce((sum, op) => sum + op.job_count, 0);
|
|
180
|
+
// Column widths: Type(17) | Jobs(6) | Credits(9) | Share(26)
|
|
181
|
+
const colType = 17;
|
|
182
|
+
const colJobs = 6;
|
|
183
|
+
const colCredits = 9;
|
|
184
|
+
const colShare = 26;
|
|
185
|
+
const headerLabels = [
|
|
186
|
+
pad('Type', colType),
|
|
187
|
+
pad('Jobs', colJobs),
|
|
188
|
+
pad('Credits', colCredits),
|
|
189
|
+
pad('Share', colShare),
|
|
190
|
+
];
|
|
191
|
+
const colWidths = [colType, colJobs, colCredits, colShare];
|
|
192
|
+
// Top border
|
|
193
|
+
lines.push(BOX.topLeft +
|
|
194
|
+
BOX.horizontal.repeat(BOX_WIDTH - 3) +
|
|
195
|
+
BOX.horizontal.repeat(3) +
|
|
196
|
+
BOX.topRight);
|
|
197
|
+
// Section title
|
|
198
|
+
lines.push(`${BOX.vertical} ${pad('By Operation', BOX_WIDTH - 3)}${BOX.vertical}`);
|
|
199
|
+
// Header separator
|
|
200
|
+
lines.push(BOX.teeRight +
|
|
201
|
+
colWidths.map((w) => BOX.horizontal.repeat(w)).join(BOX.teeDown) +
|
|
202
|
+
BOX.teeLeft);
|
|
203
|
+
// Header row
|
|
204
|
+
lines.push(`${BOX.vertical}${headerLabels.join(BOX.vertical)}${BOX.vertical}`);
|
|
205
|
+
// Header/data separator
|
|
206
|
+
lines.push(BOX.teeRight +
|
|
207
|
+
colWidths.map((w) => BOX.horizontal.repeat(w)).join(BOX.cross) +
|
|
208
|
+
BOX.teeLeft);
|
|
209
|
+
// Data rows
|
|
210
|
+
for (const op of operations) {
|
|
211
|
+
const fraction = totalJobs > 0 ? op.job_count / totalJobs : 0;
|
|
212
|
+
const pct = Math.round(fraction * 100);
|
|
213
|
+
// Estimate credits proportionally
|
|
214
|
+
const estCredits = totalJobs > 0
|
|
215
|
+
? Math.round((op.job_count / totalJobs) * totalCredits)
|
|
216
|
+
: 0;
|
|
217
|
+
const barWidth = 17;
|
|
218
|
+
const bar = barChart(fraction, barWidth);
|
|
219
|
+
const shareStr = `${bar} ${rpad(String(pct), 3)}%`;
|
|
220
|
+
const row = [
|
|
221
|
+
' ' + pad(formatOperation(op.operation), colType - 1),
|
|
222
|
+
rpad(formatNumber(op.job_count), colJobs - 1) + ' ',
|
|
223
|
+
rpad(formatNumber(estCredits), colCredits - 1) + ' ',
|
|
224
|
+
' ' + pad(shareStr, colShare - 1),
|
|
225
|
+
];
|
|
226
|
+
lines.push(`${BOX.vertical}${row.join(BOX.vertical)}${BOX.vertical}`);
|
|
227
|
+
}
|
|
228
|
+
// Bottom border
|
|
229
|
+
lines.push(BOX.bottomLeft +
|
|
230
|
+
colWidths.map((w) => BOX.horizontal.repeat(w)).join(BOX.teeUp) +
|
|
231
|
+
BOX.bottomRight);
|
|
232
|
+
return lines.join('\n');
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Render the full human-readable usage report.
|
|
236
|
+
*/
|
|
237
|
+
function renderHumanReport(stats) {
|
|
238
|
+
const periodLabel = stats.period === '7d'
|
|
239
|
+
? '7 days'
|
|
240
|
+
: stats.period === '90d'
|
|
241
|
+
? '90 days'
|
|
242
|
+
: '30 days';
|
|
243
|
+
console.log();
|
|
244
|
+
// Title box
|
|
245
|
+
console.log(boxTitle(`Usage Report (${periodLabel})`, BOX_WIDTH));
|
|
246
|
+
console.log();
|
|
247
|
+
// Summary section
|
|
248
|
+
const totalJobsStr = formatNumber(stats.summary.total_jobs);
|
|
249
|
+
const creditsStr = formatNumber(stats.summary.credits_used);
|
|
250
|
+
const rateStr = successRate(stats);
|
|
251
|
+
const avgStr = avgCostPerJob(stats);
|
|
252
|
+
console.log(` Total Jobs: ${chalk.bold(pad(totalJobsStr, 14))}Success Rate: ${chalk.bold(rateStr)}`);
|
|
253
|
+
console.log(` Credits Used: ${chalk.bold(pad(creditsStr, 14))}Avg Cost/Job: ${chalk.bold(avgStr)}`);
|
|
254
|
+
// By Model table
|
|
255
|
+
if (stats.by_model.length > 0) {
|
|
256
|
+
console.log();
|
|
257
|
+
console.log(renderByModelTable(stats.by_model, rateStr));
|
|
258
|
+
}
|
|
259
|
+
// By Operation table
|
|
260
|
+
if (stats.by_operation.length > 0) {
|
|
261
|
+
console.log();
|
|
262
|
+
console.log(renderByOperationTable(stats.by_operation, stats.summary.credits_used));
|
|
263
|
+
}
|
|
264
|
+
console.log();
|
|
265
|
+
}
|
|
266
|
+
// ── Command registration ───────────────────────────────────────────────────
|
|
267
|
+
export function registerUsageCommand(program) {
|
|
268
|
+
program
|
|
269
|
+
.command('usage')
|
|
270
|
+
.description('Show usage analytics and credit consumption')
|
|
271
|
+
.option('--period <period>', 'Time period: 7d, 30d, or 90d (default: 30d)')
|
|
272
|
+
.action(async (cmdOpts) => {
|
|
273
|
+
const globalOpts = program.opts();
|
|
274
|
+
const mode = detectOutputMode(globalOpts);
|
|
275
|
+
const profileName = resolveProfileName(globalOpts.profile);
|
|
276
|
+
const apiKey = getApiKey(profileName);
|
|
277
|
+
if (!apiKey) {
|
|
278
|
+
throw new CLIError('Not logged in.', {
|
|
279
|
+
code: 'NOT_AUTHENTICATED',
|
|
280
|
+
suggestion: "Run 'agent-media login' to authenticate.",
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
// Validate --period flag
|
|
284
|
+
const period = (cmdOpts.period ?? '30d');
|
|
285
|
+
if (!VALID_PERIODS.includes(period)) {
|
|
286
|
+
throw new CLIError(`Invalid period: ${cmdOpts.period}`, {
|
|
287
|
+
code: 'INVALID_ARGUMENT',
|
|
288
|
+
suggestion: `Valid periods: ${VALID_PERIODS.join(', ')}`,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
const api = new AgentMediaAPI(apiKey);
|
|
293
|
+
const spinner = createSpinner('Fetching usage data...');
|
|
294
|
+
if (mode === 'human')
|
|
295
|
+
spinner.start();
|
|
296
|
+
const stats = await api.getUsageStats(period);
|
|
297
|
+
if (mode === 'human')
|
|
298
|
+
spinner.stop();
|
|
299
|
+
switch (mode) {
|
|
300
|
+
case 'json':
|
|
301
|
+
printJson({
|
|
302
|
+
period: stats.period,
|
|
303
|
+
period_start: stats.period_start,
|
|
304
|
+
period_end: stats.period_end,
|
|
305
|
+
summary: {
|
|
306
|
+
total_jobs: stats.summary.total_jobs,
|
|
307
|
+
completed_jobs: stats.summary.completed_jobs,
|
|
308
|
+
failed_jobs: stats.summary.failed_jobs,
|
|
309
|
+
credits_used: stats.summary.credits_used,
|
|
310
|
+
success_rate: stats.summary.total_jobs > 0
|
|
311
|
+
? parseFloat((((stats.summary.total_jobs - stats.summary.failed_jobs) /
|
|
312
|
+
stats.summary.total_jobs) *
|
|
313
|
+
100).toFixed(1))
|
|
314
|
+
: 0,
|
|
315
|
+
avg_cost_per_job: stats.summary.total_jobs > 0
|
|
316
|
+
? parseFloat((stats.summary.credits_used / stats.summary.total_jobs).toFixed(1))
|
|
317
|
+
: 0,
|
|
318
|
+
},
|
|
319
|
+
by_model: stats.by_model,
|
|
320
|
+
by_operation: stats.by_operation,
|
|
321
|
+
daily: stats.daily,
|
|
322
|
+
});
|
|
323
|
+
break;
|
|
324
|
+
case 'quiet':
|
|
325
|
+
printQuiet(`${stats.summary.total_jobs}\t${stats.summary.credits_used}\t${successRate(stats)}`);
|
|
326
|
+
break;
|
|
327
|
+
default:
|
|
328
|
+
// Empty state
|
|
329
|
+
if (stats.summary.total_jobs === 0) {
|
|
330
|
+
console.log();
|
|
331
|
+
console.log(chalk.dim(` No usage data for the past ${period}. Run 'agent-media generate <model>' to get started.`));
|
|
332
|
+
console.log();
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
renderHumanReport(stats);
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
handleError(error);
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoB7D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright 2026 agent-media contributors. Apache-2.0 license.
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { detectOutputMode, printJson, printQuiet } from '../lib/output.js';
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
const pkg = require('../../package.json');
|
|
6
|
+
export function registerVersionCommand(program) {
|
|
7
|
+
program
|
|
8
|
+
.command('version')
|
|
9
|
+
.description('Show CLI version information')
|
|
10
|
+
.action(() => {
|
|
11
|
+
const opts = program.opts();
|
|
12
|
+
const mode = detectOutputMode(opts);
|
|
13
|
+
switch (mode) {
|
|
14
|
+
case 'json':
|
|
15
|
+
printJson({ version: pkg.version });
|
|
16
|
+
break;
|
|
17
|
+
case 'quiet':
|
|
18
|
+
printQuiet(pkg.version);
|
|
19
|
+
break;
|
|
20
|
+
default:
|
|
21
|
+
console.log(`agent-media v${pkg.version}`);
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAS/D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEjE,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAuC,CAAC;QACjE,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEpC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM;gBACT,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,OAAO;gBACV,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxB,MAAM;YACR;gBACE,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC3C,MAAM;QACV,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agent-media whoami` command.
|
|
3
|
+
*
|
|
4
|
+
* Shows the authenticated user's identity, subscription plan,
|
|
5
|
+
* and credit balances. Requires a valid API key.
|
|
6
|
+
*/
|
|
7
|
+
import type { Command } from 'commander';
|
|
8
|
+
export declare function registerWhoAmICommand(program: Command): void;
|
|
9
|
+
//# sourceMappingURL=whoami.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsG5D"}
|