@scenerok/cli 2.11.0 → 2.13.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/dist/commands/plugin.d.ts +8 -1
- package/dist/commands/plugin.d.ts.map +1 -1
- package/dist/commands/plugin.js +15 -4
- package/dist/lib/plugin-checks.bundle.mjs +260 -260
- package/package.json +1 -1
- package/skills/scenerok/references/animations-catalog.md +2 -2
- package/skills/scenerok/references/catalog-index.json +1 -1
- package/skills/scenerok/references/plugins.md +5 -2
- package/skills/scenerok/references/vidscript-guide.md +1 -0
|
@@ -120,7 +120,14 @@ export declare function runPluginSearch(options?: PluginSearchOptions): Promise<
|
|
|
120
120
|
export declare function runPluginShow(options: PluginShowOptions): Promise<number>;
|
|
121
121
|
export declare function runPluginRunCommand(options: PluginRunOptions): Promise<number>;
|
|
122
122
|
export declare function runPluginVidscriptCommand(options: PluginVidscriptOptions): Promise<number>;
|
|
123
|
-
/**
|
|
123
|
+
/**
|
|
124
|
+
* `scenerok plugin draft` — run the plugin, pay for the script, render later.
|
|
125
|
+
*
|
|
126
|
+
* Every invocation carries its own retry key (unless one is passed), because
|
|
127
|
+
* the draft route requires one: a key-less call has no way to replay, so a
|
|
128
|
+
* network retry would pay for a second draft (#217). A retry after a payable
|
|
129
|
+
* 402 reuses the key printed in the hint.
|
|
130
|
+
*/
|
|
124
131
|
export declare function runPluginDraftCommand(options: PluginDraftOptions): Promise<number>;
|
|
125
132
|
/** `scenerok plugin render-draft` — render seconds only; the fee is already paid. */
|
|
126
133
|
export declare function runPluginRenderDraftCommand(options: PluginRenderDraftOptions): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/plugin.js
CHANGED
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
import { Command } from 'commander';
|
|
24
24
|
import chalk from 'chalk';
|
|
25
25
|
import ora from 'ora';
|
|
26
|
+
import { randomUUID } from 'node:crypto';
|
|
26
27
|
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
|
|
27
28
|
import { dirname, join, resolve } from 'node:path';
|
|
28
29
|
import { ApiError, draftPlugin, getPlugin, getPluginBuild, getPluginRun, renderPluginDraft, runPlugin, searchPlugins, publishPluginPackage, } from '../lib/api.js';
|
|
@@ -741,7 +742,14 @@ function printPayableDraftHint(error, options, write) {
|
|
|
741
742
|
write('');
|
|
742
743
|
return true;
|
|
743
744
|
}
|
|
744
|
-
/**
|
|
745
|
+
/**
|
|
746
|
+
* `scenerok plugin draft` — run the plugin, pay for the script, render later.
|
|
747
|
+
*
|
|
748
|
+
* Every invocation carries its own retry key (unless one is passed), because
|
|
749
|
+
* the draft route requires one: a key-less call has no way to replay, so a
|
|
750
|
+
* network retry would pay for a second draft (#217). A retry after a payable
|
|
751
|
+
* 402 reuses the key printed in the hint.
|
|
752
|
+
*/
|
|
745
753
|
export async function runPluginDraftCommand(options) {
|
|
746
754
|
const write = options.write ?? ((line) => console.log(line));
|
|
747
755
|
if (!isAuthenticated()) {
|
|
@@ -749,6 +757,8 @@ export async function runPluginDraftCommand(options) {
|
|
|
749
757
|
write(chalk.dim('Run: scenerok auth login'));
|
|
750
758
|
return EXIT_USAGE;
|
|
751
759
|
}
|
|
760
|
+
const idempotencyKey = options.idempotencyKey?.trim() || `cli-${randomUUID()}`;
|
|
761
|
+
const attempt = { ...options, idempotencyKey };
|
|
752
762
|
try {
|
|
753
763
|
const inputs = loadRunInputs(options);
|
|
754
764
|
const maxTokens = parseMaxTokens(options.maxTokens);
|
|
@@ -756,7 +766,7 @@ export async function runPluginDraftCommand(options) {
|
|
|
756
766
|
ref: options.ref,
|
|
757
767
|
inputs,
|
|
758
768
|
maxTokens,
|
|
759
|
-
|
|
769
|
+
idempotencyKey,
|
|
760
770
|
});
|
|
761
771
|
if (options.out) {
|
|
762
772
|
const saved = saveVidscript(options.out, result.vidscript);
|
|
@@ -779,7 +789,8 @@ export async function runPluginDraftCommand(options) {
|
|
|
779
789
|
return EXIT_OK;
|
|
780
790
|
}
|
|
781
791
|
if (options.json) {
|
|
782
|
-
|
|
792
|
+
// The retry key travels with the result so a scripted retry can reuse it.
|
|
793
|
+
write(JSON.stringify({ ...result, idempotencyKey }, null, 2));
|
|
783
794
|
return EXIT_OK;
|
|
784
795
|
}
|
|
785
796
|
printDraftResult(result, write);
|
|
@@ -790,7 +801,7 @@ export async function runPluginDraftCommand(options) {
|
|
|
790
801
|
catch (error) {
|
|
791
802
|
write(chalk.red(` ${formatApiErrorMessage(error)}`));
|
|
792
803
|
write('');
|
|
793
|
-
printPayableDraftHint(error,
|
|
804
|
+
printPayableDraftHint(error, attempt, write);
|
|
794
805
|
return EXIT_FAILED;
|
|
795
806
|
}
|
|
796
807
|
}
|