@12ui/design 0.2.13 → 0.2.15
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/README.md +35 -9
- package/dist/bounded-concurrency.d.ts +13 -0
- package/dist/bounded-concurrency.d.ts.map +1 -0
- package/dist/bounded-concurrency.js +43 -0
- package/dist/bounded-concurrency.js.map +1 -0
- package/dist/branch-client.d.ts +155 -0
- package/dist/branch-client.d.ts.map +1 -0
- package/dist/branch-client.js +179 -0
- package/dist/branch-client.js.map +1 -0
- package/dist/branch-completion.d.ts +37 -0
- package/dist/branch-completion.d.ts.map +1 -0
- package/dist/branch-completion.js +137 -0
- package/dist/branch-completion.js.map +1 -0
- package/dist/branch-dispatch-loop.d.ts +84 -0
- package/dist/branch-dispatch-loop.d.ts.map +1 -0
- package/dist/branch-dispatch-loop.js +206 -0
- package/dist/branch-dispatch-loop.js.map +1 -0
- package/dist/branch-downloads.d.ts +53 -0
- package/dist/branch-downloads.d.ts.map +1 -0
- package/dist/branch-downloads.js +114 -0
- package/dist/branch-downloads.js.map +1 -0
- package/dist/branch-execution-types.d.ts +54 -0
- package/dist/branch-execution-types.d.ts.map +1 -0
- package/dist/branch-execution-types.js +2 -0
- package/dist/branch-execution-types.js.map +1 -0
- package/dist/branch-execution.d.ts +20 -0
- package/dist/branch-execution.d.ts.map +1 -0
- package/dist/branch-execution.js +380 -0
- package/dist/branch-execution.js.map +1 -0
- package/dist/branch-identity.d.ts +71 -0
- package/dist/branch-identity.d.ts.map +1 -0
- package/dist/branch-identity.js +72 -0
- package/dist/branch-identity.js.map +1 -0
- package/dist/branch-materialize.d.ts +33 -0
- package/dist/branch-materialize.d.ts.map +1 -0
- package/dist/branch-materialize.js +64 -0
- package/dist/branch-materialize.js.map +1 -0
- package/dist/branch-page-conversion.d.ts +127 -0
- package/dist/branch-page-conversion.d.ts.map +1 -0
- package/dist/branch-page-conversion.js +382 -0
- package/dist/branch-page-conversion.js.map +1 -0
- package/dist/branch-plan.d.ts +63 -0
- package/dist/branch-plan.d.ts.map +1 -0
- package/dist/branch-plan.js +95 -0
- package/dist/branch-plan.js.map +1 -0
- package/dist/branch-progress.d.ts +99 -0
- package/dist/branch-progress.d.ts.map +1 -0
- package/dist/branch-progress.js +188 -0
- package/dist/branch-progress.js.map +1 -0
- package/dist/branch-run-record.d.ts +164 -0
- package/dist/branch-run-record.d.ts.map +1 -0
- package/dist/branch-run-record.js +94 -0
- package/dist/branch-run-record.js.map +1 -0
- package/dist/branch-schedule.d.ts +74 -0
- package/dist/branch-schedule.d.ts.map +1 -0
- package/dist/branch-schedule.js +130 -0
- package/dist/branch-schedule.js.map +1 -0
- package/dist/branch-status.d.ts +11 -0
- package/dist/branch-status.d.ts.map +1 -0
- package/dist/branch-status.js +118 -0
- package/dist/branch-status.js.map +1 -0
- package/dist/branch-viewport-normalization.d.ts +74 -0
- package/dist/branch-viewport-normalization.d.ts.map +1 -0
- package/dist/branch-viewport-normalization.js +120 -0
- package/dist/branch-viewport-normalization.js.map +1 -0
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +5 -0
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-branch-command.d.ts +55 -0
- package/dist/cli-branch-command.d.ts.map +1 -0
- package/dist/cli-branch-command.js +475 -0
- package/dist/cli-branch-command.js.map +1 -0
- package/dist/cli-capabilities.d.ts +51 -0
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +52 -1
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-create-command.d.ts +21 -0
- package/dist/cli-create-command.d.ts.map +1 -0
- package/dist/cli-create-command.js +319 -0
- package/dist/cli-create-command.js.map +1 -0
- package/dist/cli-detach.d.ts +62 -0
- package/dist/cli-detach.d.ts.map +1 -0
- package/dist/cli-detach.js +123 -0
- package/dist/cli-detach.js.map +1 -0
- package/dist/cli-draft-command.d.ts +63 -0
- package/dist/cli-draft-command.d.ts.map +1 -0
- package/dist/cli-draft-command.js +220 -0
- package/dist/cli-draft-command.js.map +1 -0
- package/dist/cli-export-command.d.ts.map +1 -1
- package/dist/cli-export-command.js +2 -3
- package/dist/cli-export-command.js.map +1 -1
- package/dist/cli-image-batch-command.d.ts +21 -0
- package/dist/cli-image-batch-command.d.ts.map +1 -1
- package/dist/cli-image-batch-command.js +65 -4
- package/dist/cli-image-batch-command.js.map +1 -1
- package/dist/cli-image-batch-resume.d.ts +7 -0
- package/dist/cli-image-batch-resume.d.ts.map +1 -1
- package/dist/cli-image-batch-resume.js +19 -2
- package/dist/cli-image-batch-resume.js.map +1 -1
- package/dist/cli-package-command.d.ts +29 -0
- package/dist/cli-package-command.d.ts.map +1 -0
- package/dist/cli-package-command.js +128 -0
- package/dist/cli-package-command.js.map +1 -0
- package/dist/cli-progress.d.ts +137 -0
- package/dist/cli-progress.d.ts.map +1 -1
- package/dist/cli-progress.js +156 -0
- package/dist/cli-progress.js.map +1 -1
- package/dist/cli-select-command.d.ts +12 -0
- package/dist/cli-select-command.d.ts.map +1 -0
- package/dist/cli-select-command.js +66 -0
- package/dist/cli-select-command.js.map +1 -0
- package/dist/cli.js +150 -7
- package/dist/cli.js.map +1 -1
- package/dist/conversion-receipt.d.ts +127 -0
- package/dist/conversion-receipt.d.ts.map +1 -0
- package/dist/conversion-receipt.js +184 -0
- package/dist/conversion-receipt.js.map +1 -0
- package/dist/create-identity.d.ts +25 -0
- package/dist/create-identity.d.ts.map +1 -0
- package/dist/create-identity.js +0 -0
- package/dist/create-identity.js.map +1 -0
- package/dist/draft-identity.d.ts +30 -0
- package/dist/draft-identity.d.ts.map +1 -0
- package/dist/draft-identity.js +0 -0
- package/dist/draft-identity.js.map +1 -0
- package/dist/draft-prompts.d.ts +35 -0
- package/dist/draft-prompts.d.ts.map +1 -0
- package/dist/draft-prompts.js +51 -0
- package/dist/draft-prompts.js.map +1 -0
- package/dist/draft-run.d.ts +32 -0
- package/dist/draft-run.d.ts.map +1 -0
- package/dist/draft-run.js +152 -0
- package/dist/draft-run.js.map +1 -0
- package/dist/draft-workspace.d.ts +90 -0
- package/dist/draft-workspace.d.ts.map +1 -0
- package/dist/draft-workspace.js +64 -0
- package/dist/draft-workspace.js.map +1 -0
- package/dist/image-batch-status.d.ts +42 -0
- package/dist/image-batch-status.d.ts.map +1 -0
- package/dist/image-batch-status.js +142 -0
- package/dist/image-batch-status.js.map +1 -0
- package/dist/image-dimensions.d.ts +12 -0
- package/dist/image-dimensions.d.ts.map +1 -0
- package/dist/image-dimensions.js +14 -0
- package/dist/image-dimensions.js.map +1 -0
- package/dist/image-generation-resume.d.ts +13 -0
- package/dist/image-generation-resume.d.ts.map +1 -1
- package/dist/image-generation-resume.js +13 -0
- package/dist/image-generation-resume.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +140 -0
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/package-client.d.ts +28 -0
- package/dist/package-client.d.ts.map +1 -1
- package/dist/package-client.js +21 -1
- package/dist/package-client.js.map +1 -1
- package/dist/package-manifest-file.d.ts +21 -0
- package/dist/package-manifest-file.d.ts.map +1 -0
- package/dist/package-manifest-file.js +119 -0
- package/dist/package-manifest-file.js.map +1 -0
- package/dist/package-manifest-template.d.ts +23 -0
- package/dist/package-manifest-template.d.ts.map +1 -0
- package/dist/package-manifest-template.js +60 -0
- package/dist/package-manifest-template.js.map +1 -0
- package/dist/package-source-refusal.d.ts +17 -0
- package/dist/package-source-refusal.d.ts.map +1 -0
- package/dist/package-source-refusal.js +61 -0
- package/dist/package-source-refusal.js.map +1 -0
- package/dist/package-submission.d.ts +134 -0
- package/dist/package-submission.d.ts.map +1 -0
- package/dist/package-submission.js +196 -0
- package/dist/package-submission.js.map +1 -0
- package/dist/selection-record.d.ts +95 -0
- package/dist/selection-record.d.ts.map +1 -0
- package/dist/selection-record.js +121 -0
- package/dist/selection-record.js.map +1 -0
- package/package.json +1 -1
- package/skills/design/SKILL.md +43 -266
- package/skills/design-branch/SKILL.md +37 -116
- package/skills/design-convert/SKILL.md +62 -148
- package/skills/design-draft/SKILL.md +71 -135
- package/skills/design-search/SKILL.md +29 -78
- package/skills/design/references/continuation-contract.md +0 -60
- package/skills/design/references/selection-contract.md +0 -112
package/dist/cli.js
CHANGED
|
@@ -1,20 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { readFile, writeFile } from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
4
5
|
import { materializeConversionArtifacts } from './artifact-materializer.js';
|
|
5
6
|
import { booleanFlag, parseCliArguments, stringFlag, } from './cli-arguments.js';
|
|
6
7
|
import { runAuthCommand } from './cli-auth-command.js';
|
|
8
|
+
import { runBranchCommand } from './cli-branch-command.js';
|
|
7
9
|
import { CLI_CAPABILITIES } from './cli-capabilities.js';
|
|
8
10
|
import { runCliCommand } from './cli-cli-command.js';
|
|
9
11
|
import { runCorpusCommand } from './cli-corpus-command.js';
|
|
10
12
|
import { runExportCommand } from './cli-export-command.js';
|
|
11
|
-
import { runImageBatchCommand } from './cli-image-batch-command.js';
|
|
13
|
+
import { runImageBatchCommand, runImageBatchStatusCommand, } from './cli-image-batch-command.js';
|
|
12
14
|
import { runImageCommand } from './cli-image-command.js';
|
|
15
|
+
import { runCreateCommand } from './cli-create-command.js';
|
|
16
|
+
import { runPackageCommand, runPackageTemplateCommand } from './cli-package-command.js';
|
|
13
17
|
import { runSkillCommand } from './cli-skill-command.js';
|
|
14
18
|
import { isConversionModel } from './conversion-models.js';
|
|
15
19
|
import { TwelveUiConversionClient, } from './conversion-client.js';
|
|
16
|
-
import {
|
|
20
|
+
import { detachBranchRun, detachImageBatch } from './cli-detach.js';
|
|
21
|
+
import { runDraftCommand, runDraftStatusCommand } from './cli-draft-command.js';
|
|
22
|
+
import { runSelectCommand } from './cli-select-command.js';
|
|
23
|
+
import { resolveBranchDirectory } from './cli-branch-command.js';
|
|
24
|
+
import { CONVERSION_DURATION_HINTS, OPERATION_DURATION_HINTS, createProgressReporter, durationHint, nextActionLine, } from './cli-progress.js';
|
|
17
25
|
import { CONVERSION_OUTPUTS, isConversionOutput } from './conversion-outputs.js';
|
|
26
|
+
import { recordConvertedImageReceipt } from './conversion-receipt.js';
|
|
18
27
|
import { readConversionConfig } from './config.js';
|
|
19
28
|
import { classifyLocalConversionInput, createInputForLocalFile, defaultConversionOutputPath, } from './local-conversion-input.js';
|
|
20
29
|
import { normalizeImageOutputWidth, parseImageOutputWidth, } from './image-output-width.js';
|
|
@@ -37,10 +46,23 @@ const usage = (exitCode = 1) => {
|
|
|
37
46
|
12ui corpus inspire --query <text>|--query-file <file> --out-dir <directory> [--mode direct|balanced|adventurer] [--count <1-48>] [--reference-image <png|jpeg|webp>] [--idempotency-key <key>] [--origin <url>] [--api-key <key>]
|
|
38
47
|
12ui corpus resume --out-dir <directory> [--origin <url>] [--api-key <key>]
|
|
39
48
|
12ui image generate --prompt <text>|--prompt-file <file> --reference <file> --out <file.png> [--aspect landscape|portrait|square] [--reference-mode inspiration|preserve-structure] [--provider auto|codex|openai] --project-root <directory> --idempotency-key <key>
|
|
40
|
-
12ui
|
|
49
|
+
12ui draft --query <text> [--redesign-source <png>] [--mode exploratory|reskin] [--aspect landscape|portrait|square] [--provider auto|codex|openai] [--project-root <directory>] [--wait] [--quiet] [--origin <url>] [--api-key <key>]
|
|
50
|
+
12ui draft status <run-dir> [--json]
|
|
51
|
+
12ui select <run-dir> --winner <id> --reason <text> [--recommended <id>] [--recommendation-source <text>] [--reject <id>=<reason>]
|
|
52
|
+
12ui create claim --concept <text>|--concept-file <file> --candidates <json>|@<file> [--aspect landscape|portrait|square] [--mode inspiration|preserve-structure] [--reference-image <png|jpeg|webp>] [--idempotency-key <key>] [--origin <url>] [--api-key <key>]
|
|
53
|
+
12ui create dispatch <run-id> [--slot <a,b,...>] [--quiet] [--origin <url>] [--api-key <key>]
|
|
54
|
+
12ui create status <run-id> [--json] [--origin <url>] [--api-key <key>]
|
|
55
|
+
12ui create download <run-id> --out-dir <directory> [--slot <a,b,...>] [--origin <url>] [--api-key <key>]
|
|
56
|
+
12ui image generate-batch --manifest <batch.json> [--resume] [--wait] [--quiet]
|
|
57
|
+
12ui image batch-status --manifest <batch.json> [--json]
|
|
58
|
+
12ui branch execute <run-dir> --concept <text>|--concept-file <file> --scope page|site [--convert html] [--convert-model fast|standard|pro] [--convert-quality standard|pro] [--winner-image <file>|--winner-run <crt-id> --winner-slot <slot>] [--source-conversion-id <id>] [--max-screens <n>] [--page-concurrency <n>] [--idempotency-key <key>] [--out-dir <directory>] [--resume] [--dry-run] [--wait] [--quiet] [--origin <url>] [--api-key <key>]
|
|
59
|
+
12ui branch resume <run-dir> [--quiet] [--origin <url>] [--api-key <key>]
|
|
60
|
+
12ui branch status <run-dir> [--json] [--origin <url>] [--api-key <key>]
|
|
41
61
|
12ui capabilities [--json]
|
|
42
62
|
12ui convert <image.png|jpg|webp|layerdoc.json> --output ${outputs} [--model fast|standard|pro] [--width <px>] [--export html] [--export-quality standard|pro] [--export-out <file>] [--responsive-quality standard|pro] [--profile <json|file>] [--out <file>] [--detach] [--quiet] [--timeout-ms <ms>] [--idempotency-key <key>] [--origin <url>] [--api-key <key>]
|
|
43
|
-
12ui
|
|
63
|
+
12ui convert package --manifest <package.json> --out-dir <directory> [--idempotency-key <key>] [--timeout-ms <ms>] [--wait] [--quiet] [--origin <url>] [--api-key <key>]
|
|
64
|
+
12ui convert package --template
|
|
65
|
+
12ui export <source-conversion-id> --output <comma-separated-formats> --out-dir <directory> [--idempotency-key <key>] [--responsive-quality standard|pro] [--web-profile <json|file>] [--app-profile <json|file>] [--timeout-ms <ms>] [--origin <url>] [--api-key <key>]
|
|
44
66
|
12ui resume <conversion-id> --output ${outputs} --out <file> [--timeout-ms <ms>] [--origin <url>] [--api-key <key>]
|
|
45
67
|
12ui mcp [--origin <url>] [--api-key <key>]
|
|
46
68
|
12ui --version
|
|
@@ -50,9 +72,23 @@ export runs alongside the conversion, so the pair finishes in about the time of
|
|
|
50
72
|
the conversion alone (~5m) instead of ~8m. Progress goes to stderr; --quiet
|
|
51
73
|
silences it.
|
|
52
74
|
|
|
75
|
+
\`branch execute\`, \`branch resume\` and \`image generate-batch\` START the work and
|
|
76
|
+
return: the run continues in its own process group and survives the shell that
|
|
77
|
+
launched it. Follow it with \`12ui branch status --out-dir <dir>\` or
|
|
78
|
+
\`12ui image batch-status --manifest <file>\`; both always report what is moving
|
|
79
|
+
and what to do next. Add --wait to block in this shell instead. Never list an
|
|
80
|
+
output directory to decide whether work is still running.
|
|
81
|
+
|
|
53
82
|
Omit --client to discover and target every supported CLI installation.`);
|
|
54
83
|
process.exit(exitCode);
|
|
55
84
|
};
|
|
85
|
+
/** This file, as the worker re-executes it. */
|
|
86
|
+
const CLI_PATH = fileURLToPath(import.meta.url);
|
|
87
|
+
/**
|
|
88
|
+
* Long dispatches detach by default. `--wait` keeps the work in this shell for
|
|
89
|
+
* a human at a terminal; `--dry-run` never starts anything to detach from.
|
|
90
|
+
*/
|
|
91
|
+
const detaches = (flags) => (!booleanFlag(flags, 'wait') && !booleanFlag(flags, 'dry-run'));
|
|
56
92
|
const parseTimeoutMs = (value) => {
|
|
57
93
|
if (value === undefined)
|
|
58
94
|
return undefined;
|
|
@@ -108,6 +144,18 @@ const printVersion = async () => {
|
|
|
108
144
|
};
|
|
109
145
|
const runConversionCommand = async (command, flags) => {
|
|
110
146
|
const verb = command[0];
|
|
147
|
+
// The hosted candidate API as commands: claim, dispatch, status, download.
|
|
148
|
+
if (verb === 'create') {
|
|
149
|
+
await runCreateCommand(command, flags);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
// Ordered viewports of one page are ONE package conversion, not N converts.
|
|
153
|
+
if (verb === 'convert' && command[1] === 'package') {
|
|
154
|
+
if (runPackageTemplateCommand(flags))
|
|
155
|
+
return;
|
|
156
|
+
await runPackageCommand(flags);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
111
159
|
const config = readConversionConfig({
|
|
112
160
|
origin: stringFlag(flags, 'origin'),
|
|
113
161
|
apiKey: stringFlag(flags, 'api-key'),
|
|
@@ -116,7 +164,11 @@ const runConversionCommand = async (command, flags) => {
|
|
|
116
164
|
await startMcpServer({ config });
|
|
117
165
|
return;
|
|
118
166
|
}
|
|
119
|
-
|
|
167
|
+
// `12ui convert <image> --export html` is the whole command for a single
|
|
168
|
+
// screen. The export is derived from a LayerDoc conversion, so asking for the
|
|
169
|
+
// output as well is asking the caller to restate the only value it can have.
|
|
170
|
+
const outputValue = stringFlag(flags, 'output')
|
|
171
|
+
?? (stringFlag(flags, 'export') !== undefined ? 'layerdoc' : undefined);
|
|
120
172
|
const output = isConversionOutput(outputValue) ? outputValue : usage();
|
|
121
173
|
const client = new TwelveUiConversionClient(config);
|
|
122
174
|
const timeoutMs = parseTimeoutMs(stringFlag(flags, 'timeout-ms'));
|
|
@@ -236,19 +288,34 @@ const runConversionCommand = async (command, flags) => {
|
|
|
236
288
|
waitSeconds: detach ? 0 : 20,
|
|
237
289
|
});
|
|
238
290
|
if (detach) {
|
|
291
|
+
const resumeCommand = `12ui resume ${created.id} --output ${output} --out <file>`;
|
|
239
292
|
console.log(JSON.stringify({
|
|
240
293
|
id: created.id,
|
|
241
294
|
status: created.status,
|
|
242
295
|
output: created.output,
|
|
243
296
|
...(created.export ? { export: created.export } : {}),
|
|
244
297
|
expiresAt: created.expires_at,
|
|
298
|
+
// A detached operation is the one case with nothing streaming, so the
|
|
299
|
+
// response has to say how long it takes and how to collect it.
|
|
300
|
+
nextAction: nextActionLine({
|
|
301
|
+
what: 'A conversion',
|
|
302
|
+
typicalSeconds: CONVERSION_DURATION_HINTS[created.export ? 'fused' : 'convert'],
|
|
303
|
+
statusCommand: resumeCommand,
|
|
304
|
+
waitHint: 'which blocks until it finishes and writes the result',
|
|
305
|
+
}),
|
|
245
306
|
}, null, 2));
|
|
246
307
|
return;
|
|
247
308
|
}
|
|
248
309
|
const exportOperationId = created.export?.conversion_id ?? null;
|
|
249
310
|
if (!quiet) {
|
|
250
311
|
process.stderr.write(`12ui convert ${created.id}${exportOperationId ? ` (+ export ${exportOperationId})` : ''}`
|
|
251
|
-
+ ` — ${durationHint(exportOperationId ? 'fused' : 'convert')}\n`
|
|
312
|
+
+ ` — ${durationHint(exportOperationId ? 'fused' : 'convert')}\n`
|
|
313
|
+
+ `${nextActionLine({
|
|
314
|
+
what: 'A conversion',
|
|
315
|
+
typicalSeconds: CONVERSION_DURATION_HINTS[exportOperationId ? 'fused' : 'convert'],
|
|
316
|
+
statusCommand: `12ui resume ${created.id} --output ${output} --out <file>`,
|
|
317
|
+
waitHint: 'or leave this command running, which is what --wait already does by default',
|
|
318
|
+
})}\n`);
|
|
252
319
|
}
|
|
253
320
|
const reporter = createProgressReporter({ label: 'convert', quiet });
|
|
254
321
|
let operation;
|
|
@@ -266,6 +333,19 @@ const runConversionCommand = async (command, flags) => {
|
|
|
266
333
|
throw new Error(`Conversion ${created.id} failed: ${detail}`, { cause: error });
|
|
267
334
|
}
|
|
268
335
|
reporter.done(operation);
|
|
336
|
+
// The proof that pairs these exact bytes with the conversion just bought, so
|
|
337
|
+
// a later `12ui branch execute` from the same image attaches it instead of
|
|
338
|
+
// buying viewport 1 of its source page a second time. Best effort by design:
|
|
339
|
+
// it is written beside the input, wherever the caller keeps it, and a
|
|
340
|
+
// destination that refuses the write costs a later conversion and nothing else.
|
|
341
|
+
if (input.layerdoc === undefined) {
|
|
342
|
+
await recordConvertedImageReceipt({
|
|
343
|
+
imagePath: inputPath,
|
|
344
|
+
bytes: inputBytes,
|
|
345
|
+
operation,
|
|
346
|
+
...(quiet ? {} : { warn: (message) => process.stderr.write(`${message}\n`) }),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
269
349
|
const outFile = path.resolve(stringFlag(flags, 'out') || defaultConversionOutputPath(inputPath, output));
|
|
270
350
|
const result = await downloadCompletedConversion({ client, operation, output, outFile });
|
|
271
351
|
if (!exportOperationId) {
|
|
@@ -333,12 +413,75 @@ const main = async () => {
|
|
|
333
413
|
return;
|
|
334
414
|
}
|
|
335
415
|
if (command[0] === 'image') {
|
|
336
|
-
if (command[1] === 'generate-batch')
|
|
416
|
+
if (command[1] === 'generate-batch') {
|
|
417
|
+
if (detaches(flags)) {
|
|
418
|
+
const manifest = stringFlag(flags, 'manifest')?.trim();
|
|
419
|
+
if (!manifest)
|
|
420
|
+
throw new Error('--manifest is required');
|
|
421
|
+
console.log(JSON.stringify(await detachImageBatch({
|
|
422
|
+
cliPath: CLI_PATH,
|
|
423
|
+
argv: process.argv.slice(2),
|
|
424
|
+
manifestPath: path.resolve(manifest),
|
|
425
|
+
typicalSeconds: OPERATION_DURATION_HINTS.imageBatch,
|
|
426
|
+
}), null, 2));
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
337
429
|
await runImageBatchCommand(flags);
|
|
430
|
+
}
|
|
431
|
+
else if (command[1] === 'batch-status')
|
|
432
|
+
await runImageBatchStatusCommand(flags);
|
|
338
433
|
else
|
|
339
434
|
await runImageCommand(command[1], flags);
|
|
340
435
|
return;
|
|
341
436
|
}
|
|
437
|
+
if (command[0] === 'draft') {
|
|
438
|
+
if (command[1] === 'status') {
|
|
439
|
+
console.log(JSON.stringify(await runDraftStatusCommand(command[2], flags), null, 2));
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
await runDraftCommand(flags, {
|
|
443
|
+
generate: async ({ manifestPath, detach }) => {
|
|
444
|
+
if (!detach)
|
|
445
|
+
return runImageBatchCommand({ ...flags, manifest: manifestPath });
|
|
446
|
+
return console.log(JSON.stringify(await detachImageBatch({
|
|
447
|
+
cliPath: CLI_PATH,
|
|
448
|
+
argv: ['image', 'generate-batch', '--manifest', manifestPath],
|
|
449
|
+
manifestPath,
|
|
450
|
+
typicalSeconds: OPERATION_DURATION_HINTS.imageBatch,
|
|
451
|
+
}), null, 2));
|
|
452
|
+
},
|
|
453
|
+
});
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
if (command[0] === 'select') {
|
|
457
|
+
await runSelectCommand(command[1], flags);
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
if (command[0] === 'branch') {
|
|
461
|
+
// `branch execute <run-dir>` — the directory `12ui draft` printed.
|
|
462
|
+
const runDirArgument = command[2]?.trim();
|
|
463
|
+
if ((command[1] === 'execute' || command[1] === 'resume') && detaches(flags)) {
|
|
464
|
+
const resolved = await resolveBranchDirectory({
|
|
465
|
+
...(stringFlag(flags, 'out-dir')?.trim()
|
|
466
|
+
? { outDirFlag: stringFlag(flags, 'out-dir').trim() }
|
|
467
|
+
: {}),
|
|
468
|
+
...(runDirArgument ? { runDirArgument } : {}),
|
|
469
|
+
});
|
|
470
|
+
console.log(JSON.stringify(await detachBranchRun({
|
|
471
|
+
cliPath: CLI_PATH,
|
|
472
|
+
argv: process.argv.slice(2),
|
|
473
|
+
outDir: resolved.branchDir,
|
|
474
|
+
typicalSeconds: stringFlag(flags, 'scope') === 'site'
|
|
475
|
+
? OPERATION_DURATION_HINTS.branchSite
|
|
476
|
+
: OPERATION_DURATION_HINTS.branchPage,
|
|
477
|
+
}), null, 2));
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
await runBranchCommand(command[1], flags, {
|
|
481
|
+
...(runDirArgument ? { runDirArgument } : {}),
|
|
482
|
+
});
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
342
485
|
if (command[0] === 'export') {
|
|
343
486
|
await runExportCommand(command[1], flags);
|
|
344
487
|
return;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { ConversionOperation } from './conversion-client.js';
|
|
2
|
+
import type { ConversionOutput } from './conversion-outputs.js';
|
|
3
|
+
/**
|
|
4
|
+
* The single owner of "an image's conversion was already bought, and here is
|
|
5
|
+
* the proof".
|
|
6
|
+
*
|
|
7
|
+
* A branch run's approved design is viewport 1 of its first page, and the
|
|
8
|
+
* common flow converts that same design on its own first
|
|
9
|
+
* (`12ui convert <winner>.png --output layerdoc --export html`), so without a
|
|
10
|
+
* receipt every branch run buys an image-to-LayerDoc conversion of bytes the
|
|
11
|
+
* account has already paid to convert. The package accepts a finished
|
|
12
|
+
* conversion for a viewport (`source_conversion_id`), and the server proves the
|
|
13
|
+
* claim against the referenced conversion's admitted evidence before it skips
|
|
14
|
+
* the upload — so a false claim is a failed page, not a cheap win.
|
|
15
|
+
*
|
|
16
|
+
* This is therefore a receipt of a proved fact, not a cache: it records the
|
|
17
|
+
* digest of the exact bytes a succeeded conversion was admitted with, next to
|
|
18
|
+
* the image those bytes came from. A later run reuses it only when the bytes it
|
|
19
|
+
* is about to submit hash identically. Absent proof it converts fresh.
|
|
20
|
+
*
|
|
21
|
+
* Both `12ui convert` and `12ui branch execute --convert` write it, and only
|
|
22
|
+
* this module decides what counts as proof.
|
|
23
|
+
*/
|
|
24
|
+
export declare const CONVERSION_RECEIPT_SUFFIX = ".conversion.json";
|
|
25
|
+
/**
|
|
26
|
+
* The output an attachable conversion must have produced. A package converts
|
|
27
|
+
* every viewport to a LayerDoc and buys the page export separately, so the
|
|
28
|
+
* server (`PACKAGE_VIEWPORT_CHILD_OUTPUT`) refuses any attached conversion
|
|
29
|
+
* whose own output is `html` or any other rendered document.
|
|
30
|
+
*/
|
|
31
|
+
export declare const REUSABLE_CONVERSION_OUTPUT: ConversionOutput;
|
|
32
|
+
/**
|
|
33
|
+
* How much life the referenced conversion must have left. The server refuses an
|
|
34
|
+
* attachment expiring within this window (`PACKAGE_SOURCE_MINIMUM_REMAINING_MS`)
|
|
35
|
+
* because composition reads the source run at the END of a package drive, and
|
|
36
|
+
* that refusal fails the page after its screens are already paid for.
|
|
37
|
+
* Conversions live 24h while a receipt sits beside a user's image indefinitely,
|
|
38
|
+
* so an expiry that is not checked here is a page failure waiting for day two.
|
|
39
|
+
*/
|
|
40
|
+
export declare const CONVERSION_REUSE_MINIMUM_REMAINING_MS: number;
|
|
41
|
+
export type ConversionReceipt = {
|
|
42
|
+
version: 1;
|
|
43
|
+
/** Digest of the EXACT bytes the conversion was admitted with. */
|
|
44
|
+
sha256: string;
|
|
45
|
+
conversionId: string;
|
|
46
|
+
/** A reused conversion must have run the model the package declares. */
|
|
47
|
+
model: string;
|
|
48
|
+
/**
|
|
49
|
+
* The operation that bought it: a branch run id, or for `12ui convert` the
|
|
50
|
+
* conversion's own id. An operation never reuses its own receipt — a branch
|
|
51
|
+
* package key is derived per run and page, so attaching a reuse on a resume
|
|
52
|
+
* would change the request body under a key the server already settled, which
|
|
53
|
+
* is `409 idempotency_conflict` on a page that was already paid for.
|
|
54
|
+
*/
|
|
55
|
+
boughtBy: string;
|
|
56
|
+
/** When the referenced conversion stops being attachable at all. */
|
|
57
|
+
expiresAt: string;
|
|
58
|
+
createdAt: string;
|
|
59
|
+
};
|
|
60
|
+
export type ConversionReceiptWrite = {
|
|
61
|
+
written: string[];
|
|
62
|
+
failures: {
|
|
63
|
+
path: string;
|
|
64
|
+
detail: string;
|
|
65
|
+
}[];
|
|
66
|
+
};
|
|
67
|
+
export declare const conversionReceiptPath: (imagePath: string) => string;
|
|
68
|
+
/** A missing or unreadable receipt is simply no proof, never an error. */
|
|
69
|
+
export declare const readConversionReceipt: (imagePath: string) => Promise<ConversionReceipt | undefined>;
|
|
70
|
+
export declare const readConversionReceipts: (imagePaths: readonly string[]) => Promise<ConversionReceipt[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Written next to every local copy of the bytes it describes, so the next run
|
|
73
|
+
* that starts from the same approved design finds it wherever it reads that
|
|
74
|
+
* design from. A write that fails is not a command failure: the receipt is an
|
|
75
|
+
* optimisation, and its absence only costs one conversion. Callers that can say
|
|
76
|
+
* so report the failures; the rest ignore them.
|
|
77
|
+
*/
|
|
78
|
+
export declare const writeConversionReceipts: (imagePaths: readonly string[], receipt: ConversionReceipt) => Promise<ConversionReceiptWrite>;
|
|
79
|
+
/**
|
|
80
|
+
* Withdraw a receipt the SERVER disproved, so the next run does not repeat the
|
|
81
|
+
* dance the last one already paid a retry for.
|
|
82
|
+
*
|
|
83
|
+
* The bar is deliberately narrow: only an explicit refusal of the attachment at
|
|
84
|
+
* admission — the server having read the referenced conversion's durable
|
|
85
|
+
* evidence and rejected the claim — is proof that this receipt is no longer
|
|
86
|
+
* proof of anything. A network error, a timeout, or any other transient failure
|
|
87
|
+
* says nothing about the referenced conversion, and deleting on one of those
|
|
88
|
+
* would throw away a live receipt and buy its conversion again for nothing.
|
|
89
|
+
*
|
|
90
|
+
* Only receipts naming the disproven conversion are removed: a newer receipt
|
|
91
|
+
* beside the same image describes different work and is untouched. Removal is
|
|
92
|
+
* best-effort, because a receipt that cannot be deleted only costs the next run
|
|
93
|
+
* one refused attachment and one retry — the same price this run paid.
|
|
94
|
+
*/
|
|
95
|
+
export declare const invalidateConversionReceipts: (imagePaths: readonly string[], conversionId: string) => Promise<string[]>;
|
|
96
|
+
/**
|
|
97
|
+
* The proof gate. Every condition is a fact about the bytes in hand, never an
|
|
98
|
+
* assumption about what an earlier command probably did.
|
|
99
|
+
*/
|
|
100
|
+
export declare const reusableConversionId: (args: {
|
|
101
|
+
receipts: readonly ConversionReceipt[];
|
|
102
|
+
/** Digest of the bytes this package is about to submit for the winner. */
|
|
103
|
+
sha256: string;
|
|
104
|
+
model: string;
|
|
105
|
+
/** The operation about to submit: its own receipt is never proof for it. */
|
|
106
|
+
boughtBy: string;
|
|
107
|
+
now?: Date;
|
|
108
|
+
}) => string | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* What `12ui convert` leaves behind for the branch run that follows it.
|
|
111
|
+
*
|
|
112
|
+
* Only a succeeded image-to-LayerDoc conversion can stand in for a package
|
|
113
|
+
* viewport, so anything else writes nothing at all: a receipt for an `html`
|
|
114
|
+
* conversion would be a claim the server refuses, and the refusal costs a whole
|
|
115
|
+
* page. The digest is of the bytes actually submitted, which is what `--width`
|
|
116
|
+
* normalization changes and what the server admitted the run with.
|
|
117
|
+
*/
|
|
118
|
+
export declare const recordConvertedImageReceipt: (args: {
|
|
119
|
+
/** The file the caller converted; the branch run looks for the receipt here. */
|
|
120
|
+
imagePath: string;
|
|
121
|
+
/** The EXACT bytes submitted, after any `--width` normalization. */
|
|
122
|
+
bytes: Uint8Array;
|
|
123
|
+
operation: Pick<ConversionOperation, "id" | "status" | "output" | "model" | "expires_at" | "input_kind">;
|
|
124
|
+
warn?: (message: string) => void;
|
|
125
|
+
now?: Date;
|
|
126
|
+
}) => Promise<ConversionReceipt | undefined>;
|
|
127
|
+
//# sourceMappingURL=conversion-receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversion-receipt.d.ts","sourceRoot":"","sources":["../src/conversion-receipt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,yBAAyB,qBAAqB,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,gBAA6B,CAAC;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,qCAAqC,QAAc,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,WAAW,MAAM,KAAG,MAEzD,CAAC;AAiBF,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,GAChC,WAAW,MAAM,KAChB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CASvC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,YAAY,SAAS,MAAM,EAAE,KAC5B,OAAO,CAAC,iBAAiB,EAAE,CAG7B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,YAAY,SAAS,MAAM,EAAE,EAC7B,SAAS,iBAAiB,KACzB,OAAO,CAAC,sBAAsB,CA+BhC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,4BAA4B,GACvC,YAAY,SAAS,MAAM,EAAE,EAC7B,cAAc,MAAM,KACnB,OAAO,CAAC,MAAM,EAAE,CAalB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM;IACzC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,KAAG,MAAM,GAAG,SAQZ,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,GAAU,MAAM;IACtD,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,IAAI,CACb,mBAAmB,EACnB,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,CACnE,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,KAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CA6BxC,CAAC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { readFile, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
/**
|
|
4
|
+
* The single owner of "an image's conversion was already bought, and here is
|
|
5
|
+
* the proof".
|
|
6
|
+
*
|
|
7
|
+
* A branch run's approved design is viewport 1 of its first page, and the
|
|
8
|
+
* common flow converts that same design on its own first
|
|
9
|
+
* (`12ui convert <winner>.png --output layerdoc --export html`), so without a
|
|
10
|
+
* receipt every branch run buys an image-to-LayerDoc conversion of bytes the
|
|
11
|
+
* account has already paid to convert. The package accepts a finished
|
|
12
|
+
* conversion for a viewport (`source_conversion_id`), and the server proves the
|
|
13
|
+
* claim against the referenced conversion's admitted evidence before it skips
|
|
14
|
+
* the upload — so a false claim is a failed page, not a cheap win.
|
|
15
|
+
*
|
|
16
|
+
* This is therefore a receipt of a proved fact, not a cache: it records the
|
|
17
|
+
* digest of the exact bytes a succeeded conversion was admitted with, next to
|
|
18
|
+
* the image those bytes came from. A later run reuses it only when the bytes it
|
|
19
|
+
* is about to submit hash identically. Absent proof it converts fresh.
|
|
20
|
+
*
|
|
21
|
+
* Both `12ui convert` and `12ui branch execute --convert` write it, and only
|
|
22
|
+
* this module decides what counts as proof.
|
|
23
|
+
*/
|
|
24
|
+
export const CONVERSION_RECEIPT_SUFFIX = '.conversion.json';
|
|
25
|
+
/**
|
|
26
|
+
* The output an attachable conversion must have produced. A package converts
|
|
27
|
+
* every viewport to a LayerDoc and buys the page export separately, so the
|
|
28
|
+
* server (`PACKAGE_VIEWPORT_CHILD_OUTPUT`) refuses any attached conversion
|
|
29
|
+
* whose own output is `html` or any other rendered document.
|
|
30
|
+
*/
|
|
31
|
+
export const REUSABLE_CONVERSION_OUTPUT = 'layerdoc';
|
|
32
|
+
/**
|
|
33
|
+
* How much life the referenced conversion must have left. The server refuses an
|
|
34
|
+
* attachment expiring within this window (`PACKAGE_SOURCE_MINIMUM_REMAINING_MS`)
|
|
35
|
+
* because composition reads the source run at the END of a package drive, and
|
|
36
|
+
* that refusal fails the page after its screens are already paid for.
|
|
37
|
+
* Conversions live 24h while a receipt sits beside a user's image indefinitely,
|
|
38
|
+
* so an expiry that is not checked here is a page failure waiting for day two.
|
|
39
|
+
*/
|
|
40
|
+
export const CONVERSION_REUSE_MINIMUM_REMAINING_MS = 60 * 60_000;
|
|
41
|
+
export const conversionReceiptPath = (imagePath) => (`${imagePath}${CONVERSION_RECEIPT_SUFFIX}`);
|
|
42
|
+
const isReceipt = (value) => {
|
|
43
|
+
if (!value || typeof value !== 'object')
|
|
44
|
+
return false;
|
|
45
|
+
const record = value;
|
|
46
|
+
return record.version === 1
|
|
47
|
+
&& typeof record.sha256 === 'string'
|
|
48
|
+
&& /^[a-f0-9]{64}$/u.test(record.sha256)
|
|
49
|
+
&& typeof record.conversionId === 'string'
|
|
50
|
+
&& record.conversionId.length > 0
|
|
51
|
+
&& typeof record.model === 'string'
|
|
52
|
+
&& typeof record.boughtBy === 'string'
|
|
53
|
+
&& record.boughtBy.length > 0
|
|
54
|
+
&& typeof record.expiresAt === 'string'
|
|
55
|
+
&& Number.isFinite(Date.parse(record.expiresAt));
|
|
56
|
+
};
|
|
57
|
+
/** A missing or unreadable receipt is simply no proof, never an error. */
|
|
58
|
+
export const readConversionReceipt = async (imagePath) => {
|
|
59
|
+
try {
|
|
60
|
+
const parsed = JSON.parse(await readFile(conversionReceiptPath(imagePath), 'utf8'));
|
|
61
|
+
return isReceipt(parsed) ? parsed : undefined;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
export const readConversionReceipts = async (imagePaths) => {
|
|
68
|
+
const receipts = await Promise.all(imagePaths.map(readConversionReceipt));
|
|
69
|
+
return receipts.filter((receipt) => receipt !== undefined);
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Written next to every local copy of the bytes it describes, so the next run
|
|
73
|
+
* that starts from the same approved design finds it wherever it reads that
|
|
74
|
+
* design from. A write that fails is not a command failure: the receipt is an
|
|
75
|
+
* optimisation, and its absence only costs one conversion. Callers that can say
|
|
76
|
+
* so report the failures; the rest ignore them.
|
|
77
|
+
*/
|
|
78
|
+
export const writeConversionReceipts = async (imagePaths, receipt) => {
|
|
79
|
+
// Never leave behind something that cannot be read back as proof: a receipt
|
|
80
|
+
// that fails the gate is indistinguishable from a corrupt file later.
|
|
81
|
+
if (!isReceipt(receipt)) {
|
|
82
|
+
return {
|
|
83
|
+
written: [],
|
|
84
|
+
failures: imagePaths.map((imagePath) => ({
|
|
85
|
+
path: conversionReceiptPath(imagePath),
|
|
86
|
+
detail: 'the conversion did not report the digest, id, model, and expiry a receipt proves',
|
|
87
|
+
})),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const results = await Promise.all(imagePaths.map(async (imagePath) => {
|
|
91
|
+
const receiptPath = conversionReceiptPath(imagePath);
|
|
92
|
+
try {
|
|
93
|
+
await writeFile(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
|
|
94
|
+
return { path: receiptPath, detail: null };
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return { path: receiptPath, detail: error instanceof Error ? error.message : String(error) };
|
|
98
|
+
}
|
|
99
|
+
}));
|
|
100
|
+
return {
|
|
101
|
+
written: results.flatMap((entry) => (entry.detail === null ? [entry.path] : [])),
|
|
102
|
+
failures: results.flatMap((entry) => (entry.detail === null ? [] : [{ path: entry.path, detail: entry.detail }])),
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Withdraw a receipt the SERVER disproved, so the next run does not repeat the
|
|
107
|
+
* dance the last one already paid a retry for.
|
|
108
|
+
*
|
|
109
|
+
* The bar is deliberately narrow: only an explicit refusal of the attachment at
|
|
110
|
+
* admission — the server having read the referenced conversion's durable
|
|
111
|
+
* evidence and rejected the claim — is proof that this receipt is no longer
|
|
112
|
+
* proof of anything. A network error, a timeout, or any other transient failure
|
|
113
|
+
* says nothing about the referenced conversion, and deleting on one of those
|
|
114
|
+
* would throw away a live receipt and buy its conversion again for nothing.
|
|
115
|
+
*
|
|
116
|
+
* Only receipts naming the disproven conversion are removed: a newer receipt
|
|
117
|
+
* beside the same image describes different work and is untouched. Removal is
|
|
118
|
+
* best-effort, because a receipt that cannot be deleted only costs the next run
|
|
119
|
+
* one refused attachment and one retry — the same price this run paid.
|
|
120
|
+
*/
|
|
121
|
+
export const invalidateConversionReceipts = async (imagePaths, conversionId) => {
|
|
122
|
+
const removed = await Promise.all(imagePaths.map(async (imagePath) => {
|
|
123
|
+
const receipt = await readConversionReceipt(imagePath);
|
|
124
|
+
if (receipt?.conversionId !== conversionId)
|
|
125
|
+
return null;
|
|
126
|
+
const receiptPath = conversionReceiptPath(imagePath);
|
|
127
|
+
try {
|
|
128
|
+
await rm(receiptPath, { force: true });
|
|
129
|
+
return receiptPath;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}));
|
|
135
|
+
return removed.filter((entry) => entry !== null);
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* The proof gate. Every condition is a fact about the bytes in hand, never an
|
|
139
|
+
* assumption about what an earlier command probably did.
|
|
140
|
+
*/
|
|
141
|
+
export const reusableConversionId = (args) => {
|
|
142
|
+
const deadline = (args.now ?? new Date()).getTime() + CONVERSION_REUSE_MINIMUM_REMAINING_MS;
|
|
143
|
+
return args.receipts.find((receipt) => (receipt.sha256 === args.sha256
|
|
144
|
+
&& receipt.model === args.model
|
|
145
|
+
&& receipt.boughtBy !== args.boughtBy
|
|
146
|
+
&& Date.parse(receipt.expiresAt) > deadline))?.conversionId;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* What `12ui convert` leaves behind for the branch run that follows it.
|
|
150
|
+
*
|
|
151
|
+
* Only a succeeded image-to-LayerDoc conversion can stand in for a package
|
|
152
|
+
* viewport, so anything else writes nothing at all: a receipt for an `html`
|
|
153
|
+
* conversion would be a claim the server refuses, and the refusal costs a whole
|
|
154
|
+
* page. The digest is of the bytes actually submitted, which is what `--width`
|
|
155
|
+
* normalization changes and what the server admitted the run with.
|
|
156
|
+
*/
|
|
157
|
+
export const recordConvertedImageReceipt = async (args) => {
|
|
158
|
+
const { operation } = args;
|
|
159
|
+
if (operation.status !== 'succeeded'
|
|
160
|
+
|| operation.output !== REUSABLE_CONVERSION_OUTPUT
|
|
161
|
+
// The caller submitted image bytes; an absent input_kind (a legacy cached
|
|
162
|
+
// payload) does not contradict that, while a declared `layerdoc` does.
|
|
163
|
+
|| operation.input_kind === 'layerdoc') {
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
const receipt = {
|
|
167
|
+
version: 1,
|
|
168
|
+
sha256: createHash('sha256').update(args.bytes).digest('hex'),
|
|
169
|
+
conversionId: operation.id,
|
|
170
|
+
model: operation.model,
|
|
171
|
+
boughtBy: operation.id,
|
|
172
|
+
expiresAt: operation.expires_at,
|
|
173
|
+
createdAt: (args.now ?? new Date()).toISOString(),
|
|
174
|
+
};
|
|
175
|
+
const write = await writeConversionReceipts([args.imagePath], receipt);
|
|
176
|
+
if (write.failures.length === 0)
|
|
177
|
+
return receipt;
|
|
178
|
+
for (const failure of write.failures) {
|
|
179
|
+
args.warn?.(`12ui convert: could not record ${failure.path} (${failure.detail}). The conversion is`
|
|
180
|
+
+ ' unaffected; a later `12ui branch execute` from this image will buy its conversion again.');
|
|
181
|
+
}
|
|
182
|
+
return undefined;
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=conversion-receipt.js.map
|