agent-media-cli 1.8.4 → 1.9.1
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/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/v2/commands/character.d.ts +12 -0
- package/dist/v2/commands/character.d.ts.map +1 -0
- package/dist/v2/commands/character.js +132 -0
- package/dist/v2/commands/character.js.map +1 -0
- package/dist/v2/commands/index.d.ts +10 -0
- package/dist/v2/commands/index.d.ts.map +1 -0
- package/dist/v2/commands/index.js +10 -0
- package/dist/v2/commands/index.js.map +1 -0
- package/dist/v2/commands/selfie.d.ts +12 -0
- package/dist/v2/commands/selfie.d.ts.map +1 -0
- package/dist/v2/commands/selfie.js +138 -0
- package/dist/v2/commands/selfie.js.map +1 -0
- package/dist/v2/commands/subtitle.d.ts +11 -0
- package/dist/v2/commands/subtitle.d.ts.map +1 -0
- package/dist/v2/commands/subtitle.js +108 -0
- package/dist/v2/commands/subtitle.js.map +1 -0
- package/dist/v2/lib.d.ts +29 -0
- package/dist/v2/lib.d.ts.map +1 -0
- package/dist/v2/lib.js +110 -0
- package/dist/v2/lib.js.map +1 -0
- package/package.json +10 -10
package/dist/index.js
CHANGED
|
@@ -39,6 +39,7 @@ import { registerProductActingCommand } from './commands/product-acting.js';
|
|
|
39
39
|
import { registerLaptopUgcCommand } from './commands/laptop-ugc.js';
|
|
40
40
|
import { registerCharacterVideoCommand } from './commands/character-video.js';
|
|
41
41
|
import { registerTextToVideoCommand } from './commands/text-to-video.js';
|
|
42
|
+
import { registerV2Commands } from './v2/commands/index.js';
|
|
42
43
|
import { handleError } from './lib/errors.js';
|
|
43
44
|
const require = createRequire(import.meta.url);
|
|
44
45
|
const pkg = require('../package.json');
|
|
@@ -85,6 +86,10 @@ registerProductActingCommand(program);
|
|
|
85
86
|
registerLaptopUgcCommand(program);
|
|
86
87
|
registerCharacterVideoCommand(program);
|
|
87
88
|
registerTextToVideoCommand(program);
|
|
89
|
+
// ── v2 surface — Selfie + character_create + future v2 products ─────────
|
|
90
|
+
// Each v2 command lives under src/v2/. Adding the next one = drop a file
|
|
91
|
+
// in src/v2/commands/ + add it to src/v2/commands/index.ts.
|
|
92
|
+
registerV2Commands(program);
|
|
88
93
|
// Parse and execute
|
|
89
94
|
try {
|
|
90
95
|
program.parse();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agent-media character` — manage saved v2 characters.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* create — generate portrait + sheet, pin seed, persist row, return char_xxxxxxxxxx
|
|
6
|
+
* list — list the user's active characters (TBD; deferred until /v2/characters GET lands)
|
|
7
|
+
* show — print details for a single character (TBD)
|
|
8
|
+
* delete — archive a character (TBD)
|
|
9
|
+
*/
|
|
10
|
+
import type { Command } from 'commander';
|
|
11
|
+
export declare function registerCharacterCommand(program: Command): void;
|
|
12
|
+
//# sourceMappingURL=character.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character.d.ts","sourceRoot":"","sources":["../../../src/v2/commands/character.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBzC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqI/D"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// Copyright 2026 agent-media contributors. Apache-2.0 license.
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { V2_GENERATORS, V2_SHOT_PRESETS, quoteV2Credits } from '@agentmedia/schema/v2';
|
|
4
|
+
import { AgentMediaAPI } from '../../lib/api.js';
|
|
5
|
+
import { getApiKey, resolveProfileName } from '../../lib/credentials.js';
|
|
6
|
+
import { CLIError, handleError } from '../../lib/errors.js';
|
|
7
|
+
import { detectOutputMode, printJson, printQuiet, createSpinner } from '../../lib/output.js';
|
|
8
|
+
import { resolvePhotoOrUrl, postJSON, pollV2 } from '../lib.js';
|
|
9
|
+
export function registerCharacterCommand(program) {
|
|
10
|
+
const root = program.command('character').description('Manage saved v2 characters.');
|
|
11
|
+
// ── create ───────────────────────────────────────────────────────────
|
|
12
|
+
const def = V2_GENERATORS.character_create;
|
|
13
|
+
root
|
|
14
|
+
.command('create')
|
|
15
|
+
.summary(def.summary)
|
|
16
|
+
.description(def.description)
|
|
17
|
+
.requiredOption('--photo <file|url>', 'Reference photo (local file or https URL).')
|
|
18
|
+
.requiredOption('--name <text>', 'Display name (letters, digits, space, _, -).')
|
|
19
|
+
.requiredOption('--description <text>', 'One-line character description (8-400 chars).')
|
|
20
|
+
.option('--voice-brief <text>', 'One-line voice direction.')
|
|
21
|
+
.option('--preset <name>', `Default shot preset (one of: ${V2_SHOT_PRESETS.join(', ')})`)
|
|
22
|
+
.option('--profile <name>', 'Credentials profile.')
|
|
23
|
+
.action(async (opts, cmd) => {
|
|
24
|
+
try {
|
|
25
|
+
const globals = cmd.optsWithGlobals();
|
|
26
|
+
const mode = detectOutputMode(globals);
|
|
27
|
+
const profile = resolveProfileName(globals.profile);
|
|
28
|
+
const apiKey = getApiKey(profile);
|
|
29
|
+
if (!apiKey) {
|
|
30
|
+
throw new CLIError('Not authenticated. Run `agent-media login` first.', {
|
|
31
|
+
code: 'UNAUTHENTICATED',
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const api = new AgentMediaAPI(apiKey);
|
|
35
|
+
const credits = quoteV2Credits('character_create');
|
|
36
|
+
if (mode === 'human') {
|
|
37
|
+
console.log(chalk.dim(`Creating character will cost ${chalk.white(credits)} credits ($${(credits / 100).toFixed(2)}).`));
|
|
38
|
+
}
|
|
39
|
+
// Upload photo if local
|
|
40
|
+
const photo = String(opts.photo);
|
|
41
|
+
const upload = createSpinner('Uploading photo…');
|
|
42
|
+
if (mode === 'human')
|
|
43
|
+
upload.start();
|
|
44
|
+
let photoUrl;
|
|
45
|
+
try {
|
|
46
|
+
photoUrl = await resolvePhotoOrUrl(api, photo);
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
if (mode === 'human')
|
|
50
|
+
upload.succeed('Photo ready');
|
|
51
|
+
}
|
|
52
|
+
// Submit
|
|
53
|
+
const { status, data } = await postJSON(api, def.rest.path, {
|
|
54
|
+
photo_url: photoUrl,
|
|
55
|
+
display_name: opts.name,
|
|
56
|
+
description: opts.description,
|
|
57
|
+
...(opts.voiceBrief ? { voice_brief: opts.voiceBrief } : {}),
|
|
58
|
+
...(opts.preset ? { preset_default: opts.preset } : {}),
|
|
59
|
+
});
|
|
60
|
+
if (status !== 201) {
|
|
61
|
+
const err = data?.error;
|
|
62
|
+
throw new CLIError(err?.message ?? `Submission failed (HTTP ${status})`, { code: err?.code ?? 'SUBMIT_FAILED' });
|
|
63
|
+
}
|
|
64
|
+
const submission = data;
|
|
65
|
+
const spin = createSpinner('Generating portrait + sheet…');
|
|
66
|
+
if (mode === 'human')
|
|
67
|
+
spin.start();
|
|
68
|
+
const final = (await pollV2(api, submission.job_id, {
|
|
69
|
+
onTick: (s) => {
|
|
70
|
+
if (mode === 'human')
|
|
71
|
+
spin.text = `Generating… ${s.status ?? ''}`;
|
|
72
|
+
},
|
|
73
|
+
}));
|
|
74
|
+
if (final.status === 'failed') {
|
|
75
|
+
if (mode === 'human')
|
|
76
|
+
spin.fail(final.error_message ?? 'Character creation failed');
|
|
77
|
+
throw new CLIError(final.error_message ?? 'Character creation failed', {
|
|
78
|
+
code: 'JOB_FAILED',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (mode === 'human')
|
|
82
|
+
spin.succeed('Character created');
|
|
83
|
+
const charId = final.character_id ?? null;
|
|
84
|
+
if (mode === 'json') {
|
|
85
|
+
printJson({
|
|
86
|
+
character_id: charId,
|
|
87
|
+
credits_deducted: submission.credits_deducted,
|
|
88
|
+
...final,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
else if (mode === 'quiet') {
|
|
92
|
+
printQuiet(charId ?? submission.job_id);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(`${chalk.green('●')} ${chalk.bold(charId ?? '(missing id)')}`);
|
|
96
|
+
if (charId) {
|
|
97
|
+
console.log(chalk.dim(`Pass --character ${charId} to any v2 video command.`));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
handleError(err);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
// ── list / show / delete — deferred until /v2/characters GET lands ───
|
|
106
|
+
// Stubs that explain status, so users get a clear "not yet" instead
|
|
107
|
+
// of a silent missing command.
|
|
108
|
+
root
|
|
109
|
+
.command('list')
|
|
110
|
+
.description('List your saved v2 characters.')
|
|
111
|
+
.action(() => {
|
|
112
|
+
console.error(chalk.yellow('Not implemented yet — the GET /v2/characters endpoint ships with the v2 dashboard. For now, `agent-media character create` prints the new char_xxx id on success; save it locally.'));
|
|
113
|
+
process.exit(2);
|
|
114
|
+
});
|
|
115
|
+
root
|
|
116
|
+
.command('show')
|
|
117
|
+
.description('Show details for a saved v2 character.')
|
|
118
|
+
.argument('<character_id>', 'char_XXXXXXXXXX')
|
|
119
|
+
.action(() => {
|
|
120
|
+
console.error(chalk.yellow('Not implemented yet — coming with `character list`.'));
|
|
121
|
+
process.exit(2);
|
|
122
|
+
});
|
|
123
|
+
root
|
|
124
|
+
.command('delete')
|
|
125
|
+
.description('Archive a saved v2 character.')
|
|
126
|
+
.argument('<character_id>', 'char_XXXXXXXXXX')
|
|
127
|
+
.action(() => {
|
|
128
|
+
console.error(chalk.yellow('Not implemented yet — coming with `character list`.'));
|
|
129
|
+
process.exit(2);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=character.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character.js","sourceRoot":"","sources":["../../../src/v2/commands/character.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2 CLI surface — register all v2 commands on the program.
|
|
3
|
+
*
|
|
4
|
+
* Single entry-point so apps/cli/src/index.ts only adds one import +
|
|
5
|
+
* one call. Adding the next v2 command (Product-in-hands) means
|
|
6
|
+
* dropping a file here and adding it to the array below.
|
|
7
|
+
*/
|
|
8
|
+
import type { Command } from 'commander';
|
|
9
|
+
export declare function registerV2Commands(program: Command): void;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v2/commands/index.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIzD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Copyright 2026 agent-media contributors. Apache-2.0 license.
|
|
2
|
+
import { registerSelfieCommand } from './selfie.js';
|
|
3
|
+
import { registerCharacterCommand } from './character.js';
|
|
4
|
+
import { registerSubtitleCommand } from './subtitle.js';
|
|
5
|
+
export function registerV2Commands(program) {
|
|
6
|
+
registerSelfieCommand(program);
|
|
7
|
+
registerCharacterCommand(program);
|
|
8
|
+
registerSubtitleCommand(program);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v2/commands/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAW/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agent-media selfie` — generate a v2 Selfie video.
|
|
3
|
+
*
|
|
4
|
+
* Two character paths:
|
|
5
|
+
* - saved character: --character char_xxxxxxxxxx
|
|
6
|
+
* - inline character: --photo <file|url> --description "..."
|
|
7
|
+
*
|
|
8
|
+
* Cost / pricing comes from V2_GENERATORS.selfie.pricing — single source.
|
|
9
|
+
*/
|
|
10
|
+
import type { Command } from 'commander';
|
|
11
|
+
export declare function registerSelfieCommand(program: Command): void;
|
|
12
|
+
//# sourceMappingURL=selfie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selfie.d.ts","sourceRoot":"","sources":["../../../src/v2/commands/selfie.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwI5D"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// Copyright 2026 agent-media contributors. Apache-2.0 license.
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { V2_GENERATORS, V2_SHOT_PRESETS, V2_VIBES, quoteV2Credits } from '@agentmedia/schema/v2';
|
|
5
|
+
import { AgentMediaAPI } from '../../lib/api.js';
|
|
6
|
+
import { getApiKey, resolveProfileName } from '../../lib/credentials.js';
|
|
7
|
+
import { CLIError, handleError } from '../../lib/errors.js';
|
|
8
|
+
import { detectOutputMode, printJson, printQuiet, createSpinner } from '../../lib/output.js';
|
|
9
|
+
import { resolvePhotoOrUrl, postJSON, pollV2 } from '../lib.js';
|
|
10
|
+
export function registerSelfieCommand(program) {
|
|
11
|
+
const def = V2_GENERATORS.selfie;
|
|
12
|
+
program
|
|
13
|
+
.command(def.cli.command)
|
|
14
|
+
.summary(def.summary)
|
|
15
|
+
.description(def.description)
|
|
16
|
+
.option('--character <id>', 'Saved character id (char_XXXXXXXXXX). Use this OR --photo + --description.')
|
|
17
|
+
.option('--photo <file|url>', 'Reference photo (local file or https URL).')
|
|
18
|
+
.option('--description <text>', 'One-line character description (only with --photo).')
|
|
19
|
+
.requiredOption('--script <text|@file>', 'What the character says. Prefix with @ to read from a file.')
|
|
20
|
+
.option('--preset <name>', `Shot preset (one of: ${V2_SHOT_PRESETS.join(', ')})`, 'bedroom-morning-ritual')
|
|
21
|
+
.option('--vibe <name>', `Vibe (${V2_VIBES.join(' | ')})`, 'excited')
|
|
22
|
+
.option('--duration <seconds>', 'Clip duration: 5 | 8 | 12 | 15', (v) => Number(v), 8)
|
|
23
|
+
.option('--voice-brief <text>', 'One-line voice direction (auto-inferred when omitted).')
|
|
24
|
+
.option('--subtitles <bool>', 'Burn Hormozi-style subs', (v) => v !== 'false', true)
|
|
25
|
+
.option('--profile <name>', 'Credentials profile.')
|
|
26
|
+
.action(async (opts, cmd) => {
|
|
27
|
+
try {
|
|
28
|
+
const globals = cmd.optsWithGlobals();
|
|
29
|
+
const mode = detectOutputMode(globals);
|
|
30
|
+
const profile = resolveProfileName(globals.profile);
|
|
31
|
+
const apiKey = getApiKey(profile);
|
|
32
|
+
if (!apiKey) {
|
|
33
|
+
throw new CLIError('Not authenticated. Run `agent-media login` first.', {
|
|
34
|
+
code: 'UNAUTHENTICATED',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
const api = new AgentMediaAPI(apiKey);
|
|
38
|
+
// Validation
|
|
39
|
+
const character = typeof opts.character === 'string' ? opts.character : undefined;
|
|
40
|
+
const photo = typeof opts.photo === 'string' ? opts.photo : undefined;
|
|
41
|
+
const description = typeof opts.description === 'string' ? opts.description : undefined;
|
|
42
|
+
const hasCharacter = !!character;
|
|
43
|
+
const hasInline = !!photo && !!description;
|
|
44
|
+
if (!hasCharacter && !hasInline) {
|
|
45
|
+
throw new CLIError('Provide either --character <id>, OR both --photo and --description.', { code: 'MISSING_CHARACTER_INPUT' });
|
|
46
|
+
}
|
|
47
|
+
if (hasCharacter && (photo || description)) {
|
|
48
|
+
throw new CLIError('Use --character OR (--photo + --description), not both.', { code: 'AMBIGUOUS_CHARACTER_INPUT' });
|
|
49
|
+
}
|
|
50
|
+
// Resolve script: literal or @file
|
|
51
|
+
let script = String(opts.script);
|
|
52
|
+
if (script.startsWith('@')) {
|
|
53
|
+
script = readFileSync(script.slice(1), 'utf-8').trim();
|
|
54
|
+
}
|
|
55
|
+
// Resolve photo if inline
|
|
56
|
+
let photoUrl;
|
|
57
|
+
if (hasInline && photo) {
|
|
58
|
+
const spin = createSpinner('Uploading photo…');
|
|
59
|
+
if (mode === 'human')
|
|
60
|
+
spin.start();
|
|
61
|
+
try {
|
|
62
|
+
photoUrl = await resolvePhotoOrUrl(api, photo);
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
if (mode === 'human')
|
|
66
|
+
spin.succeed('Photo ready');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const duration = typeof opts.duration === 'number' ? opts.duration : 8;
|
|
70
|
+
const credits = quoteV2Credits('selfie', { durationSeconds: duration });
|
|
71
|
+
if (mode === 'human') {
|
|
72
|
+
console.log(chalk.dim(`This Selfie will cost ${chalk.white(credits)} credits ($${(credits / 100).toFixed(2)}).`));
|
|
73
|
+
}
|
|
74
|
+
// Submit
|
|
75
|
+
const body = {
|
|
76
|
+
...(hasCharacter ? { character_id: character } : {}),
|
|
77
|
+
...(hasInline ? { photo_url: photoUrl, description } : {}),
|
|
78
|
+
script,
|
|
79
|
+
preset: opts.preset,
|
|
80
|
+
vibe: opts.vibe,
|
|
81
|
+
duration,
|
|
82
|
+
...(opts.voiceBrief ? { voice_brief: opts.voiceBrief } : {}),
|
|
83
|
+
subtitles: opts.subtitles,
|
|
84
|
+
};
|
|
85
|
+
const { status, data } = await postJSON(api, def.rest.path, body);
|
|
86
|
+
if (status !== 201) {
|
|
87
|
+
const err = data?.error;
|
|
88
|
+
throw new CLIError(err?.message ?? `Submission failed (HTTP ${status})`, { code: err?.code ?? 'SUBMIT_FAILED' });
|
|
89
|
+
}
|
|
90
|
+
const submission = data;
|
|
91
|
+
if (mode === 'json') {
|
|
92
|
+
printJson(submission);
|
|
93
|
+
}
|
|
94
|
+
else if (mode === 'quiet') {
|
|
95
|
+
printQuiet(submission.job_id);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.log(`${chalk.green('✓')} submitted ${chalk.bold(submission.job_id)} — ${submission.credits_deducted ?? credits} credits debited`);
|
|
99
|
+
}
|
|
100
|
+
// Poll until done
|
|
101
|
+
const spin = createSpinner('Generating…');
|
|
102
|
+
if (mode === 'human')
|
|
103
|
+
spin.start();
|
|
104
|
+
let lastStatus = '';
|
|
105
|
+
const final = (await pollV2(api, submission.job_id, {
|
|
106
|
+
onTick: (s) => {
|
|
107
|
+
const cur = s.status ?? '';
|
|
108
|
+
if (cur !== lastStatus) {
|
|
109
|
+
lastStatus = cur;
|
|
110
|
+
if (mode === 'human')
|
|
111
|
+
spin.text = `Generating… ${cur}`;
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
}));
|
|
115
|
+
if (final.status === 'failed') {
|
|
116
|
+
if (mode === 'human')
|
|
117
|
+
spin.fail(final.error_message ?? 'Generation failed');
|
|
118
|
+
throw new CLIError(final.error_message ?? 'Generation failed', { code: 'JOB_FAILED' });
|
|
119
|
+
}
|
|
120
|
+
const url = final.video_url || final.result_url;
|
|
121
|
+
if (mode === 'human')
|
|
122
|
+
spin.succeed('Video ready');
|
|
123
|
+
if (mode === 'json') {
|
|
124
|
+
printJson(final);
|
|
125
|
+
}
|
|
126
|
+
else if (mode === 'quiet') {
|
|
127
|
+
printQuiet(url ?? submission.job_id);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.log(`${chalk.green('●')} ${chalk.bold(url ?? '(no url returned)')}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
handleError(err);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=selfie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selfie.js","sourceRoot":"","sources":["../../../src/v2/commands/selfie.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agent-media subtitle` — burn styled subtitles onto a video.
|
|
3
|
+
*
|
|
4
|
+
* agent-media subtitle --video https://… --style hormozi
|
|
5
|
+
* agent-media subtitle --video https://… --transcript "exact words" --style neon
|
|
6
|
+
*
|
|
7
|
+
* Pricing comes from V2_GENERATORS.subtitle.pricing — single source.
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from 'commander';
|
|
10
|
+
export declare function registerSubtitleCommand(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=subtitle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subtitle.d.ts","sourceRoot":"","sources":["../../../src/v2/commands/subtitle.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+G9D"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Copyright 2026 agent-media contributors. Apache-2.0 license.
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { V2_GENERATORS, V2_SUBTITLE_STYLES, quoteV2Credits, } from '@agentmedia/schema/v2';
|
|
5
|
+
import { AgentMediaAPI } from '../../lib/api.js';
|
|
6
|
+
import { getApiKey, resolveProfileName } from '../../lib/credentials.js';
|
|
7
|
+
import { CLIError, handleError } from '../../lib/errors.js';
|
|
8
|
+
import { detectOutputMode, printJson, printQuiet, createSpinner } from '../../lib/output.js';
|
|
9
|
+
import { postJSON, pollV2 } from '../lib.js';
|
|
10
|
+
export function registerSubtitleCommand(program) {
|
|
11
|
+
const def = V2_GENERATORS.subtitle;
|
|
12
|
+
program
|
|
13
|
+
.command(def.cli.command)
|
|
14
|
+
.summary(def.summary)
|
|
15
|
+
.description(def.description)
|
|
16
|
+
.requiredOption('--video <url>', 'Public URL of the source video (mp4/webm/mov).')
|
|
17
|
+
.option('--style <name>', `Subtitle style (one of: ${V2_SUBTITLE_STYLES.join(', ')})`, 'hormozi')
|
|
18
|
+
.option('--transcript <text|@file>', 'Exact transcript to use (skips Whisper). Prefix with @ to read from a file.')
|
|
19
|
+
.option('--language <code>', 'ISO 639-1 language hint for Whisper (e.g. "en", "es").')
|
|
20
|
+
.option('--profile <name>', 'Credentials profile.')
|
|
21
|
+
.action(async (opts, cmd) => {
|
|
22
|
+
try {
|
|
23
|
+
const globals = cmd.optsWithGlobals();
|
|
24
|
+
const mode = detectOutputMode(globals);
|
|
25
|
+
const profile = resolveProfileName(globals.profile);
|
|
26
|
+
const apiKey = getApiKey(profile);
|
|
27
|
+
if (!apiKey) {
|
|
28
|
+
throw new CLIError('Not authenticated. Run `agent-media login` first.', {
|
|
29
|
+
code: 'UNAUTHENTICATED',
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const api = new AgentMediaAPI(apiKey);
|
|
33
|
+
const videoUrl = String(opts.video);
|
|
34
|
+
const style = String(opts.style ?? 'hormozi');
|
|
35
|
+
// Resolve transcript: literal or @file
|
|
36
|
+
let transcript;
|
|
37
|
+
if (typeof opts.transcript === 'string') {
|
|
38
|
+
transcript = opts.transcript;
|
|
39
|
+
if (transcript.startsWith('@')) {
|
|
40
|
+
transcript = readFileSync(transcript.slice(1), 'utf-8').trim();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Quote up-front. The api-v2 route uses a 30s placeholder; we
|
|
44
|
+
// mirror that here so the user sees the same number it will
|
|
45
|
+
// debit.
|
|
46
|
+
const credits = quoteV2Credits('subtitle', { durationSeconds: 30 });
|
|
47
|
+
if (mode === 'human') {
|
|
48
|
+
console.log(chalk.dim(`Subtitle: up to ${chalk.white(credits)} credits ($${(credits / 100).toFixed(2)}) for a ≤30s clip · longer clips are billed by the second.`));
|
|
49
|
+
}
|
|
50
|
+
const body = {
|
|
51
|
+
video_url: videoUrl,
|
|
52
|
+
style,
|
|
53
|
+
...(transcript ? { transcript } : {}),
|
|
54
|
+
...(opts.language ? { language: opts.language } : {}),
|
|
55
|
+
};
|
|
56
|
+
const { status, data } = await postJSON(api, def.rest.path, body);
|
|
57
|
+
if (status !== 201) {
|
|
58
|
+
const err = data?.error;
|
|
59
|
+
throw new CLIError(err?.message ?? `Submission failed (HTTP ${status})`, { code: err?.code ?? 'SUBMIT_FAILED' });
|
|
60
|
+
}
|
|
61
|
+
const submission = data;
|
|
62
|
+
if (mode === 'json') {
|
|
63
|
+
printJson(submission);
|
|
64
|
+
}
|
|
65
|
+
else if (mode === 'quiet') {
|
|
66
|
+
printQuiet(submission.job_id);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.log(`${chalk.green('✓')} submitted ${chalk.bold(submission.job_id)} — ${submission.credits_deducted ?? credits} credits debited`);
|
|
70
|
+
}
|
|
71
|
+
const spin = createSpinner('Subtitling…');
|
|
72
|
+
if (mode === 'human')
|
|
73
|
+
spin.start();
|
|
74
|
+
let lastStatus = '';
|
|
75
|
+
const final = (await pollV2(api, submission.job_id, {
|
|
76
|
+
onTick: (s) => {
|
|
77
|
+
const cur = s.status ?? '';
|
|
78
|
+
if (cur !== lastStatus) {
|
|
79
|
+
lastStatus = cur;
|
|
80
|
+
if (mode === 'human')
|
|
81
|
+
spin.text = `Subtitling… ${cur}`;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
}));
|
|
85
|
+
if (final.status === 'failed') {
|
|
86
|
+
if (mode === 'human')
|
|
87
|
+
spin.fail(final.error_message ?? 'Subtitle failed');
|
|
88
|
+
throw new CLIError(final.error_message ?? 'Subtitle failed', { code: 'JOB_FAILED' });
|
|
89
|
+
}
|
|
90
|
+
const url = final.video_url || final.result_url;
|
|
91
|
+
if (mode === 'human')
|
|
92
|
+
spin.succeed('Subtitled video ready');
|
|
93
|
+
if (mode === 'json') {
|
|
94
|
+
printJson(final);
|
|
95
|
+
}
|
|
96
|
+
else if (mode === 'quiet') {
|
|
97
|
+
printQuiet(url ?? submission.job_id);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.log(`${chalk.green('●')} ${chalk.bold(url ?? '(no url returned)')}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
handleError(err);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=subtitle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subtitle.js","sourceRoot":"","sources":["../../../src/v2/commands/subtitle.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAY/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAc7C,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC;IACnC,OAAO;SACJ,OAAO,CAAC,GAAG,CAAC,GAAI,CAAC,OAAO,CAAC;SACzB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;SACpB,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;SAC5B,cAAc,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACjF,MAAM,CACL,gBAAgB,EAChB,2BAA2B,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAC3D,SAAS,CACV;SACA,MAAM,CACL,2BAA2B,EAC3B,6EAA6E,CAC9E;SACA,MAAM,CAAC,mBAAmB,EAAE,wDAAwD,CAAC;SACrF,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,EAA2D,CAAC;YAC/F,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,QAAQ,CAAC,mDAAmD,EAAE;oBACtE,IAAI,EAAE,iBAAiB;iBACxB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;YAEtC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;YAE9C,uCAAuC;YACvC,IAAI,UAA8B,CAAC;YACnC,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACxC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC7B,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjE,CAAC;YACH,CAAC;YAED,8DAA8D;YAC9D,4DAA4D;YAC5D,SAAS;YACT,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;YACpE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,mBAAmB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,4DAA4D,CAC5I,CACF,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG;gBACX,SAAS,EAAE,QAAQ;gBACnB,KAAK;gBACL,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtD,CAAC;YACF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,IAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnE,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAI,IAA+D,EAAE,KAAK,CAAC;gBACpF,MAAM,IAAI,QAAQ,CAChB,GAAG,EAAE,OAAO,IAAI,2BAA2B,MAAM,GAAG,EACpD,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,eAAe,EAAE,CACvC,CAAC;YACJ,CAAC;YACD,MAAM,UAAU,GAAG,IAA0B,CAAC;YAE9C,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,SAAS,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,UAAU,CAAC,gBAAgB,IAAI,OAAO,kBAAkB,CAC7H,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;YAC1C,IAAI,IAAI,KAAK,OAAO;gBAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE;gBAClD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;oBACZ,MAAM,GAAG,GAAI,CAAyB,CAAC,MAAM,IAAI,EAAE,CAAC;oBACpD,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;wBACvB,UAAU,GAAG,GAAG,CAAC;wBACjB,IAAI,IAAI,KAAK,OAAO;4BAAE,IAAI,CAAC,IAAI,GAAG,eAAe,GAAG,EAAE,CAAC;oBACzD,CAAC;gBACH,CAAC;aACF,CAAC,CAAa,CAAC;YAEhB,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,IAAI,KAAK,OAAO;oBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,iBAAiB,CAAC,CAAC;gBAC1E,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,IAAI,iBAAiB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACvF,CAAC;YACD,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC;YAChD,IAAI,IAAI,KAAK,OAAO;gBAAE,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAC5D,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;iBAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/v2/lib.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AgentMediaAPI } from '../lib/api.js';
|
|
2
|
+
/**
|
|
3
|
+
* Accepts either a `https://…` URL or a local file path.
|
|
4
|
+
* - URL: returned verbatim
|
|
5
|
+
* - File: uploaded via the existing presigned-url helper, returns the public URL
|
|
6
|
+
*
|
|
7
|
+
* Same upload path the legacy commands use (see laptop-ugc.ts line 109+).
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolvePhotoOrUrl(api: AgentMediaAPI, pathOrUrl: string): Promise<string>;
|
|
10
|
+
/**
|
|
11
|
+
* Make an authenticated POST to api-v2 at an arbitrary path. The
|
|
12
|
+
* existing AgentMediaAPI.request() is private; this hits the same
|
|
13
|
+
* baseUrl + auth chain via a fresh fetch using fields the class
|
|
14
|
+
* already exposes.
|
|
15
|
+
*/
|
|
16
|
+
export declare function postJSON(api: AgentMediaAPI, path: string, body: unknown): Promise<{
|
|
17
|
+
status: number;
|
|
18
|
+
data: unknown;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Poll a v2 job until terminal. Returns the final job row (same
|
|
22
|
+
* shape the legacy CLI commands consume).
|
|
23
|
+
*/
|
|
24
|
+
export declare function pollV2(api: AgentMediaAPI, jobId: string, opts?: {
|
|
25
|
+
intervalMs?: number;
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
onTick?: (s: unknown) => void;
|
|
28
|
+
}): Promise<unknown>;
|
|
29
|
+
//# sourceMappingURL=lib.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/v2/lib.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAkB9C;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CA6BjB;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CA2B5C;AAED;;;GAGG;AACH,wBAAsB,MAAM,CAC1B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CAAO,GACpF,OAAO,CAAC,OAAO,CAAC,CAiBlB"}
|
package/dist/v2/lib.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// Copyright 2026 agent-media contributors. Apache-2.0 license.
|
|
2
|
+
/**
|
|
3
|
+
* v2 CLI helpers — shared upload + dispatch + poll logic so each v2
|
|
4
|
+
* command stays a thin wrapper around the registry.
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
7
|
+
import { extname, basename } from 'node:path';
|
|
8
|
+
import { CLIError } from '../lib/errors.js';
|
|
9
|
+
const PHOTO_MIME = new Map([
|
|
10
|
+
['.png', 'image/png'],
|
|
11
|
+
['.jpg', 'image/jpeg'],
|
|
12
|
+
['.jpeg', 'image/jpeg'],
|
|
13
|
+
['.webp', 'image/webp'],
|
|
14
|
+
['.heic', 'image/heic'],
|
|
15
|
+
]);
|
|
16
|
+
// Supabase public-asset URL for the generation-inputs bucket. The
|
|
17
|
+
// `upload-url` edge function returns only `storage_path`; the CLI
|
|
18
|
+
// constructs the public URL itself. Same constant the legacy commands
|
|
19
|
+
// (character-video, laptop-ugc, review, subtitle) already hard-code.
|
|
20
|
+
const SUPABASE_PUBLIC_BASE = 'https://ppwvarkmpffljlqxkjux.supabase.co/storage/v1/object/public/generation-inputs';
|
|
21
|
+
/**
|
|
22
|
+
* Accepts either a `https://…` URL or a local file path.
|
|
23
|
+
* - URL: returned verbatim
|
|
24
|
+
* - File: uploaded via the existing presigned-url helper, returns the public URL
|
|
25
|
+
*
|
|
26
|
+
* Same upload path the legacy commands use (see laptop-ugc.ts line 109+).
|
|
27
|
+
*/
|
|
28
|
+
export async function resolvePhotoOrUrl(api, pathOrUrl) {
|
|
29
|
+
if (/^https?:\/\//i.test(pathOrUrl))
|
|
30
|
+
return pathOrUrl;
|
|
31
|
+
// Local path
|
|
32
|
+
let st;
|
|
33
|
+
try {
|
|
34
|
+
st = statSync(pathOrUrl);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
throw new CLIError(`File not found: ${pathOrUrl}`, {
|
|
38
|
+
code: 'FILE_NOT_FOUND',
|
|
39
|
+
suggestion: 'Check the path and try again.',
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (!st.isFile()) {
|
|
43
|
+
throw new CLIError(`${pathOrUrl} is not a regular file`, { code: 'FILE_NOT_FILE' });
|
|
44
|
+
}
|
|
45
|
+
const ext = extname(pathOrUrl).toLowerCase();
|
|
46
|
+
const mime = PHOTO_MIME.get(ext);
|
|
47
|
+
if (!mime) {
|
|
48
|
+
throw new CLIError(`Unsupported photo type "${ext}". Accepts: ${Array.from(PHOTO_MIME.keys()).join(', ')}`, { code: 'UNSUPPORTED_PHOTO_TYPE' });
|
|
49
|
+
}
|
|
50
|
+
const buf = readFileSync(pathOrUrl);
|
|
51
|
+
const { upload_url, storage_path } = await api.getUploadUrl(basename(pathOrUrl), mime);
|
|
52
|
+
await api.uploadFile(upload_url, buf.buffer, mime);
|
|
53
|
+
return `${SUPABASE_PUBLIC_BASE}/${storage_path}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Make an authenticated POST to api-v2 at an arbitrary path. The
|
|
57
|
+
* existing AgentMediaAPI.request() is private; this hits the same
|
|
58
|
+
* baseUrl + auth chain via a fresh fetch using fields the class
|
|
59
|
+
* already exposes.
|
|
60
|
+
*/
|
|
61
|
+
export async function postJSON(api, path, body) {
|
|
62
|
+
// baseUrl is public on AgentMediaAPI; apiKey/anonKey are not, so we
|
|
63
|
+
// read them off the instance with a narrow cast (private fields, not
|
|
64
|
+
// type holes — the data lives on the same object).
|
|
65
|
+
const reader = api;
|
|
66
|
+
const url = `${api.baseUrl}${path}`;
|
|
67
|
+
const headers = {
|
|
68
|
+
'Content-Type': 'application/json',
|
|
69
|
+
Authorization: `Bearer ${reader.apiKey}`,
|
|
70
|
+
};
|
|
71
|
+
if (reader.anonKey)
|
|
72
|
+
headers['apikey'] = reader.anonKey;
|
|
73
|
+
const resp = await fetch(url, {
|
|
74
|
+
method: 'POST',
|
|
75
|
+
headers,
|
|
76
|
+
body: JSON.stringify(body),
|
|
77
|
+
});
|
|
78
|
+
const text = await resp.text();
|
|
79
|
+
let data = null;
|
|
80
|
+
if (text) {
|
|
81
|
+
try {
|
|
82
|
+
data = JSON.parse(text);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
/* leave as null; caller handles non-JSON */
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return { status: resp.status, data };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Poll a v2 job until terminal. Returns the final job row (same
|
|
92
|
+
* shape the legacy CLI commands consume).
|
|
93
|
+
*/
|
|
94
|
+
export async function pollV2(api, jobId, opts = {}) {
|
|
95
|
+
const intervalMs = opts.intervalMs ?? 5_000;
|
|
96
|
+
const timeoutMs = opts.timeoutMs ?? 30 * 60_000;
|
|
97
|
+
const deadline = Date.now() + timeoutMs;
|
|
98
|
+
while (Date.now() < deadline) {
|
|
99
|
+
const job = await api.getJob(jobId);
|
|
100
|
+
if (opts.onTick)
|
|
101
|
+
opts.onTick(job);
|
|
102
|
+
const status = job.status;
|
|
103
|
+
if (status === 'completed' || status === 'failed' || status === 'canceled') {
|
|
104
|
+
return job;
|
|
105
|
+
}
|
|
106
|
+
await new Promise((r) => setTimeout(r, intervalMs));
|
|
107
|
+
}
|
|
108
|
+
throw new CLIError(`Polling timed out after ${Math.round(timeoutMs / 1000)}s for job ${jobId}`, { code: 'POLL_TIMEOUT' });
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/v2/lib.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-media-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -39,15 +39,8 @@
|
|
|
39
39
|
"README.md",
|
|
40
40
|
"LICENSE"
|
|
41
41
|
],
|
|
42
|
-
"scripts": {
|
|
43
|
-
"build": "tsc",
|
|
44
|
-
"typecheck": "tsc --noEmit",
|
|
45
|
-
"lint": "eslint src/",
|
|
46
|
-
"pretest": "tsc -p tsconfig.test.json",
|
|
47
|
-
"test": "node --test test-out/commands.test.js",
|
|
48
|
-
"prepublishOnly": "npm run build"
|
|
49
|
-
},
|
|
50
42
|
"dependencies": {
|
|
43
|
+
"@agentmedia/schema": "^0.4.0",
|
|
51
44
|
"chalk": "^5.4.1",
|
|
52
45
|
"commander": "^13.1.0",
|
|
53
46
|
"open": "^10.1.0",
|
|
@@ -56,5 +49,12 @@
|
|
|
56
49
|
"devDependencies": {
|
|
57
50
|
"@types/node": "^22.13.4",
|
|
58
51
|
"typescript": "^5.7.3"
|
|
52
|
+
},
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "tsc",
|
|
55
|
+
"typecheck": "tsc --noEmit",
|
|
56
|
+
"lint": "eslint src/",
|
|
57
|
+
"pretest": "tsc -p tsconfig.test.json",
|
|
58
|
+
"test": "node --test test-out/commands.test.js"
|
|
59
59
|
}
|
|
60
|
-
}
|
|
60
|
+
}
|