@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.
Files changed (188) hide show
  1. package/README.md +35 -9
  2. package/dist/bounded-concurrency.d.ts +13 -0
  3. package/dist/bounded-concurrency.d.ts.map +1 -0
  4. package/dist/bounded-concurrency.js +43 -0
  5. package/dist/bounded-concurrency.js.map +1 -0
  6. package/dist/branch-client.d.ts +155 -0
  7. package/dist/branch-client.d.ts.map +1 -0
  8. package/dist/branch-client.js +179 -0
  9. package/dist/branch-client.js.map +1 -0
  10. package/dist/branch-completion.d.ts +37 -0
  11. package/dist/branch-completion.d.ts.map +1 -0
  12. package/dist/branch-completion.js +137 -0
  13. package/dist/branch-completion.js.map +1 -0
  14. package/dist/branch-dispatch-loop.d.ts +84 -0
  15. package/dist/branch-dispatch-loop.d.ts.map +1 -0
  16. package/dist/branch-dispatch-loop.js +206 -0
  17. package/dist/branch-dispatch-loop.js.map +1 -0
  18. package/dist/branch-downloads.d.ts +53 -0
  19. package/dist/branch-downloads.d.ts.map +1 -0
  20. package/dist/branch-downloads.js +114 -0
  21. package/dist/branch-downloads.js.map +1 -0
  22. package/dist/branch-execution-types.d.ts +54 -0
  23. package/dist/branch-execution-types.d.ts.map +1 -0
  24. package/dist/branch-execution-types.js +2 -0
  25. package/dist/branch-execution-types.js.map +1 -0
  26. package/dist/branch-execution.d.ts +20 -0
  27. package/dist/branch-execution.d.ts.map +1 -0
  28. package/dist/branch-execution.js +380 -0
  29. package/dist/branch-execution.js.map +1 -0
  30. package/dist/branch-identity.d.ts +71 -0
  31. package/dist/branch-identity.d.ts.map +1 -0
  32. package/dist/branch-identity.js +72 -0
  33. package/dist/branch-identity.js.map +1 -0
  34. package/dist/branch-materialize.d.ts +33 -0
  35. package/dist/branch-materialize.d.ts.map +1 -0
  36. package/dist/branch-materialize.js +64 -0
  37. package/dist/branch-materialize.js.map +1 -0
  38. package/dist/branch-page-conversion.d.ts +127 -0
  39. package/dist/branch-page-conversion.d.ts.map +1 -0
  40. package/dist/branch-page-conversion.js +382 -0
  41. package/dist/branch-page-conversion.js.map +1 -0
  42. package/dist/branch-plan.d.ts +63 -0
  43. package/dist/branch-plan.d.ts.map +1 -0
  44. package/dist/branch-plan.js +95 -0
  45. package/dist/branch-plan.js.map +1 -0
  46. package/dist/branch-progress.d.ts +99 -0
  47. package/dist/branch-progress.d.ts.map +1 -0
  48. package/dist/branch-progress.js +188 -0
  49. package/dist/branch-progress.js.map +1 -0
  50. package/dist/branch-run-record.d.ts +164 -0
  51. package/dist/branch-run-record.d.ts.map +1 -0
  52. package/dist/branch-run-record.js +94 -0
  53. package/dist/branch-run-record.js.map +1 -0
  54. package/dist/branch-schedule.d.ts +74 -0
  55. package/dist/branch-schedule.d.ts.map +1 -0
  56. package/dist/branch-schedule.js +130 -0
  57. package/dist/branch-schedule.js.map +1 -0
  58. package/dist/branch-status.d.ts +11 -0
  59. package/dist/branch-status.d.ts.map +1 -0
  60. package/dist/branch-status.js +118 -0
  61. package/dist/branch-status.js.map +1 -0
  62. package/dist/branch-viewport-normalization.d.ts +74 -0
  63. package/dist/branch-viewport-normalization.d.ts.map +1 -0
  64. package/dist/branch-viewport-normalization.js +120 -0
  65. package/dist/branch-viewport-normalization.js.map +1 -0
  66. package/dist/cli-arguments.d.ts.map +1 -1
  67. package/dist/cli-arguments.js +5 -0
  68. package/dist/cli-arguments.js.map +1 -1
  69. package/dist/cli-branch-command.d.ts +55 -0
  70. package/dist/cli-branch-command.d.ts.map +1 -0
  71. package/dist/cli-branch-command.js +475 -0
  72. package/dist/cli-branch-command.js.map +1 -0
  73. package/dist/cli-capabilities.d.ts +51 -0
  74. package/dist/cli-capabilities.d.ts.map +1 -1
  75. package/dist/cli-capabilities.js +52 -1
  76. package/dist/cli-capabilities.js.map +1 -1
  77. package/dist/cli-create-command.d.ts +21 -0
  78. package/dist/cli-create-command.d.ts.map +1 -0
  79. package/dist/cli-create-command.js +319 -0
  80. package/dist/cli-create-command.js.map +1 -0
  81. package/dist/cli-detach.d.ts +62 -0
  82. package/dist/cli-detach.d.ts.map +1 -0
  83. package/dist/cli-detach.js +123 -0
  84. package/dist/cli-detach.js.map +1 -0
  85. package/dist/cli-draft-command.d.ts +63 -0
  86. package/dist/cli-draft-command.d.ts.map +1 -0
  87. package/dist/cli-draft-command.js +220 -0
  88. package/dist/cli-draft-command.js.map +1 -0
  89. package/dist/cli-export-command.d.ts.map +1 -1
  90. package/dist/cli-export-command.js +2 -3
  91. package/dist/cli-export-command.js.map +1 -1
  92. package/dist/cli-image-batch-command.d.ts +21 -0
  93. package/dist/cli-image-batch-command.d.ts.map +1 -1
  94. package/dist/cli-image-batch-command.js +65 -4
  95. package/dist/cli-image-batch-command.js.map +1 -1
  96. package/dist/cli-image-batch-resume.d.ts +7 -0
  97. package/dist/cli-image-batch-resume.d.ts.map +1 -1
  98. package/dist/cli-image-batch-resume.js +19 -2
  99. package/dist/cli-image-batch-resume.js.map +1 -1
  100. package/dist/cli-package-command.d.ts +29 -0
  101. package/dist/cli-package-command.d.ts.map +1 -0
  102. package/dist/cli-package-command.js +128 -0
  103. package/dist/cli-package-command.js.map +1 -0
  104. package/dist/cli-progress.d.ts +137 -0
  105. package/dist/cli-progress.d.ts.map +1 -1
  106. package/dist/cli-progress.js +156 -0
  107. package/dist/cli-progress.js.map +1 -1
  108. package/dist/cli-select-command.d.ts +12 -0
  109. package/dist/cli-select-command.d.ts.map +1 -0
  110. package/dist/cli-select-command.js +66 -0
  111. package/dist/cli-select-command.js.map +1 -0
  112. package/dist/cli.js +150 -7
  113. package/dist/cli.js.map +1 -1
  114. package/dist/conversion-receipt.d.ts +127 -0
  115. package/dist/conversion-receipt.d.ts.map +1 -0
  116. package/dist/conversion-receipt.js +184 -0
  117. package/dist/conversion-receipt.js.map +1 -0
  118. package/dist/create-identity.d.ts +25 -0
  119. package/dist/create-identity.d.ts.map +1 -0
  120. package/dist/create-identity.js +0 -0
  121. package/dist/create-identity.js.map +1 -0
  122. package/dist/draft-identity.d.ts +30 -0
  123. package/dist/draft-identity.d.ts.map +1 -0
  124. package/dist/draft-identity.js +0 -0
  125. package/dist/draft-identity.js.map +1 -0
  126. package/dist/draft-prompts.d.ts +35 -0
  127. package/dist/draft-prompts.d.ts.map +1 -0
  128. package/dist/draft-prompts.js +51 -0
  129. package/dist/draft-prompts.js.map +1 -0
  130. package/dist/draft-run.d.ts +32 -0
  131. package/dist/draft-run.d.ts.map +1 -0
  132. package/dist/draft-run.js +152 -0
  133. package/dist/draft-run.js.map +1 -0
  134. package/dist/draft-workspace.d.ts +90 -0
  135. package/dist/draft-workspace.d.ts.map +1 -0
  136. package/dist/draft-workspace.js +64 -0
  137. package/dist/draft-workspace.js.map +1 -0
  138. package/dist/image-batch-status.d.ts +42 -0
  139. package/dist/image-batch-status.d.ts.map +1 -0
  140. package/dist/image-batch-status.js +142 -0
  141. package/dist/image-batch-status.js.map +1 -0
  142. package/dist/image-dimensions.d.ts +12 -0
  143. package/dist/image-dimensions.d.ts.map +1 -0
  144. package/dist/image-dimensions.js +14 -0
  145. package/dist/image-dimensions.js.map +1 -0
  146. package/dist/image-generation-resume.d.ts +13 -0
  147. package/dist/image-generation-resume.d.ts.map +1 -1
  148. package/dist/image-generation-resume.js +13 -0
  149. package/dist/image-generation-resume.js.map +1 -1
  150. package/dist/index.d.ts +6 -1
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/index.js +5 -1
  153. package/dist/index.js.map +1 -1
  154. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  155. package/dist/legacy-skill-catalog.js +140 -0
  156. package/dist/legacy-skill-catalog.js.map +1 -1
  157. package/dist/package-client.d.ts +28 -0
  158. package/dist/package-client.d.ts.map +1 -1
  159. package/dist/package-client.js +21 -1
  160. package/dist/package-client.js.map +1 -1
  161. package/dist/package-manifest-file.d.ts +21 -0
  162. package/dist/package-manifest-file.d.ts.map +1 -0
  163. package/dist/package-manifest-file.js +119 -0
  164. package/dist/package-manifest-file.js.map +1 -0
  165. package/dist/package-manifest-template.d.ts +23 -0
  166. package/dist/package-manifest-template.d.ts.map +1 -0
  167. package/dist/package-manifest-template.js +60 -0
  168. package/dist/package-manifest-template.js.map +1 -0
  169. package/dist/package-source-refusal.d.ts +17 -0
  170. package/dist/package-source-refusal.d.ts.map +1 -0
  171. package/dist/package-source-refusal.js +61 -0
  172. package/dist/package-source-refusal.js.map +1 -0
  173. package/dist/package-submission.d.ts +134 -0
  174. package/dist/package-submission.d.ts.map +1 -0
  175. package/dist/package-submission.js +196 -0
  176. package/dist/package-submission.js.map +1 -0
  177. package/dist/selection-record.d.ts +95 -0
  178. package/dist/selection-record.d.ts.map +1 -0
  179. package/dist/selection-record.js +121 -0
  180. package/dist/selection-record.js.map +1 -0
  181. package/package.json +1 -1
  182. package/skills/design/SKILL.md +43 -266
  183. package/skills/design-branch/SKILL.md +37 -116
  184. package/skills/design-convert/SKILL.md +62 -148
  185. package/skills/design-draft/SKILL.md +71 -135
  186. package/skills/design-search/SKILL.md +29 -78
  187. package/skills/design/references/continuation-contract.md +0 -60
  188. 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 { createProgressReporter, durationHint } from './cli-progress.js';
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 image generate-batch --manifest <batch.json> [--resume]
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 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>]
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
- const outputValue = stringFlag(flags, 'output');
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