@12ui/design 0.2.13 → 0.2.14

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 (172) hide show
  1. package/README.md +35 -9
  2. package/dist/branch-client.d.ts +155 -0
  3. package/dist/branch-client.d.ts.map +1 -0
  4. package/dist/branch-client.js +179 -0
  5. package/dist/branch-client.js.map +1 -0
  6. package/dist/branch-completion.d.ts +37 -0
  7. package/dist/branch-completion.d.ts.map +1 -0
  8. package/dist/branch-completion.js +137 -0
  9. package/dist/branch-completion.js.map +1 -0
  10. package/dist/branch-dispatch-loop.d.ts +84 -0
  11. package/dist/branch-dispatch-loop.d.ts.map +1 -0
  12. package/dist/branch-dispatch-loop.js +206 -0
  13. package/dist/branch-dispatch-loop.js.map +1 -0
  14. package/dist/branch-downloads.d.ts +43 -0
  15. package/dist/branch-downloads.d.ts.map +1 -0
  16. package/dist/branch-downloads.js +94 -0
  17. package/dist/branch-downloads.js.map +1 -0
  18. package/dist/branch-execution-types.d.ts +54 -0
  19. package/dist/branch-execution-types.d.ts.map +1 -0
  20. package/dist/branch-execution-types.js +2 -0
  21. package/dist/branch-execution-types.js.map +1 -0
  22. package/dist/branch-execution.d.ts +18 -0
  23. package/dist/branch-execution.d.ts.map +1 -0
  24. package/dist/branch-execution.js +261 -0
  25. package/dist/branch-execution.js.map +1 -0
  26. package/dist/branch-identity.d.ts +71 -0
  27. package/dist/branch-identity.d.ts.map +1 -0
  28. package/dist/branch-identity.js +72 -0
  29. package/dist/branch-identity.js.map +1 -0
  30. package/dist/branch-materialize.d.ts +22 -0
  31. package/dist/branch-materialize.d.ts.map +1 -0
  32. package/dist/branch-materialize.js +47 -0
  33. package/dist/branch-materialize.js.map +1 -0
  34. package/dist/branch-page-conversion.d.ts +39 -0
  35. package/dist/branch-page-conversion.d.ts.map +1 -0
  36. package/dist/branch-page-conversion.js +206 -0
  37. package/dist/branch-page-conversion.js.map +1 -0
  38. package/dist/branch-plan.d.ts +63 -0
  39. package/dist/branch-plan.d.ts.map +1 -0
  40. package/dist/branch-plan.js +95 -0
  41. package/dist/branch-plan.js.map +1 -0
  42. package/dist/branch-progress.d.ts +75 -0
  43. package/dist/branch-progress.d.ts.map +1 -0
  44. package/dist/branch-progress.js +159 -0
  45. package/dist/branch-progress.js.map +1 -0
  46. package/dist/branch-run-record.d.ts +153 -0
  47. package/dist/branch-run-record.d.ts.map +1 -0
  48. package/dist/branch-run-record.js +94 -0
  49. package/dist/branch-run-record.js.map +1 -0
  50. package/dist/branch-schedule.d.ts +74 -0
  51. package/dist/branch-schedule.d.ts.map +1 -0
  52. package/dist/branch-schedule.js +130 -0
  53. package/dist/branch-schedule.js.map +1 -0
  54. package/dist/branch-status.d.ts +11 -0
  55. package/dist/branch-status.d.ts.map +1 -0
  56. package/dist/branch-status.js +115 -0
  57. package/dist/branch-status.js.map +1 -0
  58. package/dist/branch-viewport-normalization.d.ts +74 -0
  59. package/dist/branch-viewport-normalization.d.ts.map +1 -0
  60. package/dist/branch-viewport-normalization.js +120 -0
  61. package/dist/branch-viewport-normalization.js.map +1 -0
  62. package/dist/cli-arguments.d.ts.map +1 -1
  63. package/dist/cli-arguments.js +4 -0
  64. package/dist/cli-arguments.js.map +1 -1
  65. package/dist/cli-branch-command.d.ts +46 -0
  66. package/dist/cli-branch-command.d.ts.map +1 -0
  67. package/dist/cli-branch-command.js +426 -0
  68. package/dist/cli-branch-command.js.map +1 -0
  69. package/dist/cli-capabilities.d.ts +28 -0
  70. package/dist/cli-capabilities.d.ts.map +1 -1
  71. package/dist/cli-capabilities.js +29 -1
  72. package/dist/cli-capabilities.js.map +1 -1
  73. package/dist/cli-create-command.d.ts +21 -0
  74. package/dist/cli-create-command.d.ts.map +1 -0
  75. package/dist/cli-create-command.js +319 -0
  76. package/dist/cli-create-command.js.map +1 -0
  77. package/dist/cli-detach.d.ts +62 -0
  78. package/dist/cli-detach.d.ts.map +1 -0
  79. package/dist/cli-detach.js +123 -0
  80. package/dist/cli-detach.js.map +1 -0
  81. package/dist/cli-draft-command.d.ts +63 -0
  82. package/dist/cli-draft-command.d.ts.map +1 -0
  83. package/dist/cli-draft-command.js +220 -0
  84. package/dist/cli-draft-command.js.map +1 -0
  85. package/dist/cli-export-command.d.ts.map +1 -1
  86. package/dist/cli-export-command.js +2 -3
  87. package/dist/cli-export-command.js.map +1 -1
  88. package/dist/cli-image-batch-command.d.ts +21 -0
  89. package/dist/cli-image-batch-command.d.ts.map +1 -1
  90. package/dist/cli-image-batch-command.js +65 -4
  91. package/dist/cli-image-batch-command.js.map +1 -1
  92. package/dist/cli-image-batch-resume.d.ts +7 -0
  93. package/dist/cli-image-batch-resume.d.ts.map +1 -1
  94. package/dist/cli-image-batch-resume.js +19 -2
  95. package/dist/cli-image-batch-resume.js.map +1 -1
  96. package/dist/cli-package-command.d.ts +18 -0
  97. package/dist/cli-package-command.d.ts.map +1 -0
  98. package/dist/cli-package-command.js +112 -0
  99. package/dist/cli-package-command.js.map +1 -0
  100. package/dist/cli-progress.d.ts +61 -0
  101. package/dist/cli-progress.d.ts.map +1 -1
  102. package/dist/cli-progress.js +53 -0
  103. package/dist/cli-progress.js.map +1 -1
  104. package/dist/cli-select-command.d.ts +12 -0
  105. package/dist/cli-select-command.d.ts.map +1 -0
  106. package/dist/cli-select-command.js +66 -0
  107. package/dist/cli-select-command.js.map +1 -0
  108. package/dist/cli.js +140 -7
  109. package/dist/cli.js.map +1 -1
  110. package/dist/create-identity.d.ts +25 -0
  111. package/dist/create-identity.d.ts.map +1 -0
  112. package/dist/create-identity.js +0 -0
  113. package/dist/create-identity.js.map +1 -0
  114. package/dist/draft-identity.d.ts +30 -0
  115. package/dist/draft-identity.d.ts.map +1 -0
  116. package/dist/draft-identity.js +0 -0
  117. package/dist/draft-identity.js.map +1 -0
  118. package/dist/draft-prompts.d.ts +35 -0
  119. package/dist/draft-prompts.d.ts.map +1 -0
  120. package/dist/draft-prompts.js +51 -0
  121. package/dist/draft-prompts.js.map +1 -0
  122. package/dist/draft-run.d.ts +32 -0
  123. package/dist/draft-run.d.ts.map +1 -0
  124. package/dist/draft-run.js +152 -0
  125. package/dist/draft-run.js.map +1 -0
  126. package/dist/draft-workspace.d.ts +90 -0
  127. package/dist/draft-workspace.d.ts.map +1 -0
  128. package/dist/draft-workspace.js +64 -0
  129. package/dist/draft-workspace.js.map +1 -0
  130. package/dist/image-batch-status.d.ts +42 -0
  131. package/dist/image-batch-status.d.ts.map +1 -0
  132. package/dist/image-batch-status.js +142 -0
  133. package/dist/image-batch-status.js.map +1 -0
  134. package/dist/image-dimensions.d.ts +12 -0
  135. package/dist/image-dimensions.d.ts.map +1 -0
  136. package/dist/image-dimensions.js +14 -0
  137. package/dist/image-dimensions.js.map +1 -0
  138. package/dist/image-generation-resume.d.ts +13 -0
  139. package/dist/image-generation-resume.d.ts.map +1 -1
  140. package/dist/image-generation-resume.js +13 -0
  141. package/dist/image-generation-resume.js.map +1 -1
  142. package/dist/index.d.ts +5 -0
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +4 -0
  145. package/dist/index.js.map +1 -1
  146. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  147. package/dist/legacy-skill-catalog.js +115 -0
  148. package/dist/legacy-skill-catalog.js.map +1 -1
  149. package/dist/package-manifest-file.d.ts +21 -0
  150. package/dist/package-manifest-file.d.ts.map +1 -0
  151. package/dist/package-manifest-file.js +119 -0
  152. package/dist/package-manifest-file.js.map +1 -0
  153. package/dist/package-manifest-template.d.ts +23 -0
  154. package/dist/package-manifest-template.d.ts.map +1 -0
  155. package/dist/package-manifest-template.js +60 -0
  156. package/dist/package-manifest-template.js.map +1 -0
  157. package/dist/package-submission.d.ts +103 -0
  158. package/dist/package-submission.d.ts.map +1 -0
  159. package/dist/package-submission.js +173 -0
  160. package/dist/package-submission.js.map +1 -0
  161. package/dist/selection-record.d.ts +95 -0
  162. package/dist/selection-record.d.ts.map +1 -0
  163. package/dist/selection-record.js +121 -0
  164. package/dist/selection-record.js.map +1 -0
  165. package/package.json +1 -1
  166. package/skills/design/SKILL.md +40 -266
  167. package/skills/design-branch/SKILL.md +36 -116
  168. package/skills/design-convert/SKILL.md +62 -148
  169. package/skills/design-draft/SKILL.md +71 -135
  170. package/skills/design-search/SKILL.md +29 -78
  171. package/skills/design/references/continuation-contract.md +0 -60
  172. package/skills/design/references/selection-contract.md +0 -112
@@ -0,0 +1,426 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFile, stat } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { booleanFlag, stringFlag } from './cli-arguments.js';
5
+ import { readConversionConfig } from './config.js';
6
+ import { TwelveUiBranchClient, BRANCH_MAX_CONCEPT_CHARACTERS } from './branch-client.js';
7
+ import { deriveBranchRunKey, executeBranchRun } from './branch-execution.js';
8
+ import { readBranchStatus } from './branch-status.js';
9
+ import { BRANCH_ATTEMPT_FILENAME, BRANCH_COMPLETION_FILENAME, branchAttemptPath, readBranchAttempt, } from './branch-run-record.js';
10
+ import { BRANCH_PROGRESS_FILENAME } from './branch-progress.js';
11
+ import { DRAFT_BRANCH_DIRECTORY, draftPaths } from './draft-workspace.js';
12
+ import { readSelectionRecord } from './selection-record.js';
13
+ import { OPERATION_DURATION_HINTS, formatDuration, narrateCounts, nextActionLine, } from './cli-progress.js';
14
+ import { isConversionModel } from './conversion-models.js';
15
+ import { classifyLocalConversionInput } from './local-conversion-input.js';
16
+ import { normalizeOptionalIdempotencyKey } from './idempotency-key.js';
17
+ import { TwelveUiConversionPackageClient } from './package-client.js';
18
+ import { isResponsiveConversionQuality, } from './responsive-quality.js';
19
+ export const BRANCH_USAGE = `Usage:
20
+ 12ui branch execute --winner-run <crt-id> --winner-slot <slot>|--winner-image <file>
21
+ --concept <text>|--concept-file <file> --scope page|site
22
+ --out-dir <directory> [--convert html] [--convert-model fast|standard|pro]
23
+ [--convert-quality standard|pro] [--source-conversion-id <id>]
24
+ [--max-screens <n>] [--idempotency-key <key>] [--resume] [--dry-run]
25
+ [--wait] [--quiet] [--origin <url>] [--api-key <key>]
26
+ 12ui branch resume --out-dir <directory> [--quiet] [--origin <url>] [--api-key <key>]
27
+ 12ui branch status --out-dir <directory> [--json] [--origin <url>] [--api-key <key>]`;
28
+ const HEARTBEAT_MS = 15_000;
29
+ /**
30
+ * `.12ui/site/.12ui/site/candidates/D.png` — measured in the harness pass, from
31
+ * an agent that resolved the run-directory convention against a cwd that was
32
+ * already inside it. The path is real, so nothing fails; the run just scatters.
33
+ * Say so once rather than refusing work over a cosmetic mistake.
34
+ */
35
+ export const nestedRunDirectoryWarning = (target) => {
36
+ const segments = path.resolve(target).split(path.sep);
37
+ const first = segments.indexOf('.12ui');
38
+ if (first < 0 || !segments.includes('.12ui', first + 1))
39
+ return null;
40
+ return `${target} nests one run directory inside another. That path is valid, so this run`
41
+ + ' continues, but the convention is a single `.12ui/<short-slug>/` at the root of the'
42
+ + ' working directory — check the run directory you meant before the next command.';
43
+ };
44
+ /**
45
+ * `12ui branch execute <run-dir>` takes the DRAFT run directory and keeps its
46
+ * own records in `<run-dir>/branch`, which is where the skill says the pages
47
+ * land. `--out-dir` stays an alias that names the branch directory outright,
48
+ * for a branch run with no draft behind it.
49
+ *
50
+ * `branch status` accepts either spelling: a directory that already holds
51
+ * branch records is one, and otherwise `<dir>/branch` is tried, so a caller who
52
+ * passes the run directory and one who passes the branch directory both get an
53
+ * answer instead of a lecture.
54
+ */
55
+ export const resolveBranchDirectory = async (args) => {
56
+ if (args.outDirFlag)
57
+ return { branchDir: path.resolve(args.outDirFlag), runDir: null };
58
+ if (!args.runDirArgument) {
59
+ throw new Error('A run directory is required: `12ui branch execute <run-dir>` (the directory `12ui draft`'
60
+ + ' printed), or `--out-dir <directory>` to name the branch directory outright.');
61
+ }
62
+ const given = path.resolve(args.runDirArgument);
63
+ const holdsBranchRecords = await Promise.all([
64
+ BRANCH_ATTEMPT_FILENAME,
65
+ BRANCH_COMPLETION_FILENAME,
66
+ BRANCH_PROGRESS_FILENAME,
67
+ ].map(async (name) => {
68
+ try {
69
+ await stat(path.join(given, name));
70
+ return true;
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }));
76
+ if (holdsBranchRecords.some(Boolean))
77
+ return { branchDir: given, runDir: null };
78
+ return { branchDir: path.join(given, DRAFT_BRANCH_DIRECTORY), runDir: given };
79
+ };
80
+ const warnOnNestedRunDirectory = (targets) => {
81
+ for (const target of targets) {
82
+ if (!target)
83
+ continue;
84
+ const warning = nestedRunDirectoryWarning(target);
85
+ if (warning)
86
+ process.stderr.write(`${warning}\n`);
87
+ }
88
+ };
89
+ const readConcept = async (flags) => {
90
+ const inline = stringFlag(flags, 'concept')?.trim();
91
+ const file = stringFlag(flags, 'concept-file')?.trim();
92
+ if (Boolean(inline) === Boolean(file)) {
93
+ throw new Error('Provide exactly one --concept or --concept-file');
94
+ }
95
+ const value = (inline ?? (await readFile(path.resolve(file), 'utf8')))
96
+ .replace(/\s+/gu, ' ')
97
+ .trim();
98
+ if (!value)
99
+ throw new Error('--concept must not be empty');
100
+ if ([...value].length > BRANCH_MAX_CONCEPT_CHARACTERS) {
101
+ throw new Error(`--concept must be at most ${BRANCH_MAX_CONCEPT_CHARACTERS} characters`);
102
+ }
103
+ return value;
104
+ };
105
+ const imageWinner = async (imagePath) => {
106
+ const classified = classifyLocalConversionInput(imagePath);
107
+ if (classified.kind !== 'image')
108
+ throw new Error('The winner must be a PNG, JPEG, or WebP');
109
+ const bytes = new Uint8Array(await readFile(imagePath));
110
+ return {
111
+ kind: 'image',
112
+ imagePath,
113
+ bytes,
114
+ mediaType: classified.mediaType,
115
+ sha256: createHash('sha256').update(bytes).digest('hex'),
116
+ };
117
+ };
118
+ /**
119
+ * The winner the run already recorded. `12ui select` wrote which candidate was
120
+ * chosen and why, so `branch execute <run-dir>` should not make the caller say
121
+ * it again — restating a decision is how the two records drift apart.
122
+ */
123
+ const winnerFromSelection = async (runDir) => {
124
+ const paths = draftPaths(runDir);
125
+ const selection = await readSelectionRecord(paths.selection);
126
+ if (!selection)
127
+ return null;
128
+ const chosen = selection.candidates.find((candidate) => candidate.id === selection.winner);
129
+ if (!chosen?.path)
130
+ return null;
131
+ return imageWinner(chosen.path);
132
+ };
133
+ const readWinner = async (flags) => {
134
+ const runId = stringFlag(flags, 'winner-run')?.trim();
135
+ const slot = stringFlag(flags, 'winner-slot')?.trim();
136
+ const image = stringFlag(flags, 'winner-image')?.trim();
137
+ if (Boolean(image) === Boolean(runId)) {
138
+ throw new Error('A branch run starts from exactly one of --winner-run/--winner-slot or --winner-image');
139
+ }
140
+ if (runId) {
141
+ if (!slot)
142
+ throw new Error('--winner-run requires --winner-slot');
143
+ if (!/^crt-[a-f0-9]{40}$/u.test(runId))
144
+ throw new Error('--winner-run must be a crt- run id');
145
+ if (!/^[a-z]{1,2}$/u.test(slot))
146
+ throw new Error('--winner-slot must be a candidate slot such as a');
147
+ return { kind: 'run', runId, slot };
148
+ }
149
+ const imagePath = path.resolve(image);
150
+ const classified = classifyLocalConversionInput(imagePath);
151
+ if (classified.kind !== 'image')
152
+ throw new Error('--winner-image must be a PNG, JPEG, or WebP');
153
+ const bytes = new Uint8Array(await readFile(imagePath));
154
+ return {
155
+ kind: 'image',
156
+ imagePath,
157
+ bytes,
158
+ mediaType: classified.mediaType,
159
+ sha256: createHash('sha256').update(bytes).digest('hex'),
160
+ };
161
+ };
162
+ const readConvert = (flags) => {
163
+ const convert = stringFlag(flags, 'convert')?.trim();
164
+ const model = stringFlag(flags, 'convert-model')?.trim();
165
+ const quality = stringFlag(flags, 'convert-quality')?.trim();
166
+ const sourceConversionId = stringFlag(flags, 'source-conversion-id')?.trim();
167
+ if (convert === undefined) {
168
+ if (model || quality || sourceConversionId) {
169
+ throw new Error('--convert-model, --convert-quality, and --source-conversion-id require --convert html');
170
+ }
171
+ return undefined;
172
+ }
173
+ if (convert !== 'html')
174
+ throw new Error('--convert must be html');
175
+ if (model !== undefined && !isConversionModel(model)) {
176
+ throw new Error('--convert-model must be fast, standard, or pro');
177
+ }
178
+ if (quality !== undefined && !isResponsiveConversionQuality(quality)) {
179
+ throw new Error('--convert-quality must be standard or pro');
180
+ }
181
+ return {
182
+ output: 'html',
183
+ ...(model ? { model: model } : {}),
184
+ ...(quality ? { responsiveQuality: quality } : {}),
185
+ ...(sourceConversionId ? { sourceConversionId } : {}),
186
+ };
187
+ };
188
+ const readScope = (flags) => {
189
+ const scope = stringFlag(flags, 'scope')?.trim();
190
+ if (scope !== 'page' && scope !== 'site') {
191
+ throw new Error('--scope must be page (grow the approved screen into its whole page) or site (trunk plus'
192
+ + ' the planned sibling pages)');
193
+ }
194
+ return scope;
195
+ };
196
+ const readMaxScreens = (flags) => {
197
+ const value = stringFlag(flags, 'max-screens');
198
+ if (value === undefined)
199
+ return undefined;
200
+ const parsed = Number(value);
201
+ if (!Number.isSafeInteger(parsed) || parsed < 1)
202
+ throw new Error('--max-screens must be a positive integer');
203
+ return parsed;
204
+ };
205
+ const runTotalHint = (scope) => (scope === 'page' ? OPERATION_DURATION_HINTS.branchPage : OPERATION_DURATION_HINTS.branchSite);
206
+ export const branchExecuteBanner = (args) => {
207
+ const total = runTotalHint(args.scope);
208
+ return [
209
+ `12ui branch execute — scope ${args.scope}, blocking until the whole run finishes.`,
210
+ `Claim and plan ~${formatDuration(OPERATION_DURATION_HINTS.branchClaim)} (buys no image), then`
211
+ + ` each screen ~${formatDuration(OPERATION_DURATION_HINTS.branchScreen)}`
212
+ + ` (server budget ${formatDuration(OPERATION_DURATION_HINTS.branchScreenBudget)})`
213
+ + `${args.convert ? `, then one package conversion per page ~${formatDuration(OPERATION_DURATION_HINTS.package)}` : ''}.`,
214
+ nextActionLine({
215
+ what: `A --scope ${args.scope} run`,
216
+ typicalSeconds: total,
217
+ statusCommand: `12ui branch status --out-dir ${args.outDir}`,
218
+ waitHint: 'or leave this command running, which is what --wait already does by default',
219
+ }),
220
+ ].join('\n');
221
+ };
222
+ export const runBranchCommand = async (action, flags, dependencies = {}) => {
223
+ if (action !== 'execute' && action !== 'resume' && action !== 'status') {
224
+ throw new Error(BRANCH_USAGE);
225
+ }
226
+ const outDirFlag = stringFlag(flags, 'out-dir')?.trim();
227
+ const resolvedDirectory = await resolveBranchDirectory({
228
+ ...(outDirFlag ? { outDirFlag } : {}),
229
+ ...(dependencies.runDirArgument ? { runDirArgument: dependencies.runDirArgument } : {}),
230
+ });
231
+ const outDir = resolvedDirectory.branchDir;
232
+ warnOnNestedRunDirectory([
233
+ outDirFlag ?? dependencies.runDirArgument,
234
+ stringFlag(flags, 'winner-image'),
235
+ ]);
236
+ const readConfig = dependencies.readConfig ?? readConversionConfig;
237
+ if (action === 'status') {
238
+ let config = null;
239
+ try {
240
+ config = readConfig({
241
+ origin: stringFlag(flags, 'origin'),
242
+ apiKey: stringFlag(flags, 'api-key'),
243
+ });
244
+ }
245
+ catch {
246
+ // A status read works offline; it just cannot refresh from the service.
247
+ }
248
+ const client = config
249
+ ? (dependencies.createBranchClient ?? ((value) => new TwelveUiBranchClient(value)))(config)
250
+ : null;
251
+ const report = await readBranchStatus({
252
+ outDir,
253
+ ...(client ? { refresh: async (runId) => client.getRun(runId) } : {}),
254
+ });
255
+ console.log(JSON.stringify(report, null, 2));
256
+ return;
257
+ }
258
+ const quiet = booleanFlag(flags, 'quiet');
259
+ const resume = action === 'resume' || booleanFlag(flags, 'resume');
260
+ let inputs;
261
+ if (action === 'resume') {
262
+ const attempt = await readBranchAttempt(branchAttemptPath(outDir));
263
+ if (!attempt) {
264
+ throw new Error(`This branch run has never been started — there is nothing to resume, and nothing has`
265
+ + ` failed. There is no branch attempt at ${branchAttemptPath(outDir)}. Start it with`
266
+ + ' `12ui branch execute --winner-run <crt-id> --winner-slot <slot> --concept <text>'
267
+ + ' --scope page|site --out-dir <directory>`.');
268
+ }
269
+ const recorded = attempt.winner;
270
+ let winner;
271
+ if (recorded.kind === 'run') {
272
+ winner = { kind: 'run', runId: recorded.runId, slot: recorded.slot };
273
+ }
274
+ else {
275
+ const bytes = new Uint8Array(await readFile(recorded.imagePath));
276
+ const sha256 = createHash('sha256').update(bytes).digest('hex');
277
+ if (sha256 !== recorded.sha256) {
278
+ throw new Error(`Refusing to resume: ${recorded.imagePath} no longer holds the starting design this run`
279
+ + ` branched from (${recorded.sha256} then, ${sha256} now).`);
280
+ }
281
+ winner = { kind: 'image', imagePath: recorded.imagePath, bytes, mediaType: recorded.mediaType, sha256 };
282
+ }
283
+ inputs = {
284
+ outDir,
285
+ scope: attempt.scope,
286
+ concept: attempt.concept,
287
+ winner,
288
+ ...(attempt.aspect ? { aspect: attempt.aspect } : {}),
289
+ ...(attempt.maxScreens === undefined ? {} : { maxScreens: attempt.maxScreens }),
290
+ ...(attempt.convert
291
+ ? {
292
+ convert: {
293
+ output: 'html',
294
+ model: attempt.convert.model,
295
+ ...(attempt.convert.responsiveQuality
296
+ ? { responsiveQuality: attempt.convert.responsiveQuality }
297
+ : {}),
298
+ ...(attempt.sourceConversionId ? { sourceConversionId: attempt.sourceConversionId } : {}),
299
+ },
300
+ }
301
+ : {}),
302
+ idempotencyKey: attempt.runKey,
303
+ };
304
+ }
305
+ else {
306
+ const aspect = stringFlag(flags, 'aspect')?.trim();
307
+ if (aspect !== undefined && !['landscape', 'portrait', 'square'].includes(aspect)) {
308
+ throw new Error('--aspect must be landscape, portrait, or square');
309
+ }
310
+ const named = stringFlag(flags, 'winner-run') ?? stringFlag(flags, 'winner-image');
311
+ const recorded = named || !resolvedDirectory.runDir
312
+ ? null
313
+ : await winnerFromSelection(resolvedDirectory.runDir);
314
+ if (!named && !recorded && resolvedDirectory.runDir) {
315
+ throw new Error(`No winner is recorded in ${resolvedDirectory.runDir}. Choose one first with`
316
+ + ` \`12ui select ${resolvedDirectory.runDir} --winner <id> --reason "<why>"\`, or name a`
317
+ + ' starting design with --winner-image or --winner-run/--winner-slot.');
318
+ }
319
+ inputs = {
320
+ outDir,
321
+ scope: readScope(flags),
322
+ concept: await readConcept(flags),
323
+ winner: recorded ?? await readWinner(flags),
324
+ ...(aspect ? { aspect: aspect } : {}),
325
+ ...(readMaxScreens(flags) === undefined ? {} : { maxScreens: readMaxScreens(flags) }),
326
+ ...(readConvert(flags) ? { convert: readConvert(flags) } : {}),
327
+ ...(normalizeOptionalIdempotencyKey(stringFlag(flags, 'idempotency-key'), '--idempotency-key')
328
+ ? { idempotencyKey: normalizeOptionalIdempotencyKey(stringFlag(flags, 'idempotency-key')) }
329
+ : {}),
330
+ };
331
+ }
332
+ const config = readConfig({
333
+ origin: stringFlag(flags, 'origin'),
334
+ apiKey: stringFlag(flags, 'api-key'),
335
+ });
336
+ if (booleanFlag(flags, 'dry-run')) {
337
+ console.log(JSON.stringify({
338
+ dryRun: true,
339
+ outDir,
340
+ origin: config.origin,
341
+ scope: inputs.scope,
342
+ concept: inputs.concept,
343
+ winner: inputs.winner.kind === 'run'
344
+ ? { kind: 'run', runId: inputs.winner.runId, slot: inputs.winner.slot }
345
+ : { kind: 'image', imagePath: inputs.winner.imagePath, sha256: inputs.winner.sha256 },
346
+ runKey: deriveBranchRunKey(inputs),
347
+ convert: inputs.convert ?? null,
348
+ ...(inputs.maxScreens === undefined ? {} : { maxScreens: inputs.maxScreens }),
349
+ typicalSeconds: runTotalHint(inputs.scope),
350
+ note: 'Nothing was claimed, dispatched, or bought.',
351
+ }, null, 2));
352
+ return;
353
+ }
354
+ const branchClient = (dependencies.createBranchClient ?? ((value) => (new TwelveUiBranchClient(value))))(config);
355
+ const packageClient = (dependencies.createPackageClient ?? ((value) => (new TwelveUiConversionPackageClient(value))))(config);
356
+ const startedAt = Date.now();
357
+ const write = (line) => {
358
+ if (!quiet)
359
+ process.stderr.write(`${line}\n`);
360
+ };
361
+ if (!quiet) {
362
+ write(branchExecuteBanner({ scope: inputs.scope, outDir, convert: Boolean(inputs.convert) }));
363
+ }
364
+ let lastHeartbeat = 0;
365
+ const elapsed = () => formatDuration((Date.now() - startedAt) / 1000);
366
+ const result = await executeBranchRun({
367
+ branchClient,
368
+ packageClient,
369
+ inputs,
370
+ origin: config.origin,
371
+ resume,
372
+ onEvent: (event) => {
373
+ if (quiet)
374
+ return;
375
+ if (event.kind === 'progress') {
376
+ // A heartbeat even when nothing changed: silence is what a caller reads
377
+ // as a stall.
378
+ if (Date.now() - lastHeartbeat < HEARTBEAT_MS)
379
+ return;
380
+ lastHeartbeat = Date.now();
381
+ const counts = event.screens.reduce((totals, screen) => ({
382
+ ...totals,
383
+ [screen.status]: (totals[screen.status] ?? 0) + 1,
384
+ }), {});
385
+ write(`[${elapsed()}] ${event.phase}: ${narrateCounts([
386
+ { label: 'complete', count: counts.succeeded ?? 0 },
387
+ { label: 'generating', count: counts.dispatched ?? 0 },
388
+ { label: 'waiting on dependencies', count: counts.pending ?? 0 },
389
+ { label: 'blocked', count: counts.blocked ?? 0 },
390
+ { label: 'failed', count: counts.failed ?? 0 },
391
+ ])}`);
392
+ return;
393
+ }
394
+ if (event.kind === 'phase') {
395
+ write(`[${elapsed()}] ${event.phase}${event.detail ? `: ${event.detail}` : ''}`);
396
+ return;
397
+ }
398
+ if (event.kind === 'package') {
399
+ const percent = event.progress.percent === undefined ? '' : ` ${event.progress.percent}%`;
400
+ write(`[${elapsed()}] package ${event.pageId}: ${event.progress.stage}${percent}`);
401
+ return;
402
+ }
403
+ if (event.kind === 'blocked') {
404
+ write(`[${elapsed()}] screen ${event.slot}: blocked — ${event.waitingOn} failed, so this screen`
405
+ + ' can never run. It is terminal, not pending.');
406
+ return;
407
+ }
408
+ if (event.kind === 'failed') {
409
+ write(`[${elapsed()}] screen ${event.slot}: failed (${event.code})`);
410
+ return;
411
+ }
412
+ if (event.kind === 'succeeded' || event.kind === 'dispatched' || event.kind === 'held' || event.kind === 'in-flight') {
413
+ write(`[${elapsed()}] screen ${event.slot}: ${event.kind}`);
414
+ return;
415
+ }
416
+ write(`[${elapsed()}] stopped: ${event.code} — ${event.message}`);
417
+ },
418
+ });
419
+ console.log(JSON.stringify({
420
+ completionPath: result.completionPath,
421
+ ...result.completion,
422
+ }, null, 2));
423
+ if (result.failure)
424
+ throw result.failure;
425
+ };
426
+ //# sourceMappingURL=cli-branch-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-branch-command.js","sourceRoot":"","sources":["../src/cli-branch-command.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,34 @@ export declare const CLI_CAPABILITIES: {
21
21
  readonly convert: 240;
22
22
  readonly export: 240;
23
23
  readonly convertWithExport: 300;
24
+ readonly imageBatch: 90;
25
+ readonly branchClaim: 15;
26
+ readonly branchScreen: 90;
27
+ readonly branchPageRun: 720;
28
+ readonly branchSiteRun: 1200;
29
+ readonly conversionPackage: 360;
30
+ };
31
+ /**
32
+ * Long commands block. While one runs, these read-only surfaces report what
33
+ * is moving and what to do next; a caller must never infer progress from a
34
+ * directory listing.
35
+ */
36
+ readonly statusCommands: {
37
+ readonly branch: "12ui branch status --out-dir <directory>";
38
+ readonly imageBatch: "12ui image batch-status --manifest <batch.json>";
39
+ };
40
+ /** Ordered viewports of one continuous page: ONE conversion, not N. */
41
+ readonly conversionPackage: {
42
+ readonly command: "12ui convert package --manifest <package.json> --out-dir <directory>";
43
+ readonly endpoint: "/api/v1/convert/package";
44
+ readonly sourceConversionReuse: "sourceConversionId";
45
+ readonly expectedSeconds: 360;
46
+ };
47
+ readonly branch: {
48
+ readonly command: "12ui branch execute";
49
+ readonly scopes: readonly ["page", "site"];
50
+ readonly completionSentinel: "branch.complete.json";
51
+ readonly endpoint: "/api/v1/create";
24
52
  };
25
53
  readonly projectProfileSchema: {
26
54
  readonly required: readonly ["version", "framework", "styling", "language", "packaging"];
@@ -1 +1 @@
1
- {"version":3,"file":"cli-capabilities.d.ts","sourceRoot":"","sources":["../src/cli-capabilities.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCnB,CAAC"}
1
+ {"version":3,"file":"cli-capabilities.d.ts","sourceRoot":"","sources":["../src/cli-capabilities.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsC3B;;;;OAIG;;;;;IAKH,uEAAuE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkB/D,CAAC"}
@@ -1,4 +1,4 @@
1
- import { CONVERSION_DURATION_HINTS } from './cli-progress.js';
1
+ import { CONVERSION_DURATION_HINTS, OPERATION_DURATION_HINTS } from './cli-progress.js';
2
2
  import { CONVERSION_MODELS } from './conversion-models.js';
3
3
  import { CONVERSION_OUTPUT_MEDIA_TYPES, CONVERSION_OUTPUTS, } from './conversion-outputs.js';
4
4
  import { MAX_IMAGE_OUTPUT_WIDTH } from './image-output-width.js';
@@ -34,6 +34,34 @@ export const CLI_CAPABILITIES = {
34
34
  convert: CONVERSION_DURATION_HINTS.convert,
35
35
  export: CONVERSION_DURATION_HINTS.export,
36
36
  convertWithExport: CONVERSION_DURATION_HINTS.fused,
37
+ imageBatch: OPERATION_DURATION_HINTS.imageBatch,
38
+ branchClaim: OPERATION_DURATION_HINTS.branchClaim,
39
+ branchScreen: OPERATION_DURATION_HINTS.branchScreen,
40
+ branchPageRun: OPERATION_DURATION_HINTS.branchPage,
41
+ branchSiteRun: OPERATION_DURATION_HINTS.branchSite,
42
+ conversionPackage: OPERATION_DURATION_HINTS.package,
43
+ },
44
+ /**
45
+ * Long commands block. While one runs, these read-only surfaces report what
46
+ * is moving and what to do next; a caller must never infer progress from a
47
+ * directory listing.
48
+ */
49
+ statusCommands: {
50
+ branch: '12ui branch status --out-dir <directory>',
51
+ imageBatch: '12ui image batch-status --manifest <batch.json>',
52
+ },
53
+ /** Ordered viewports of one continuous page: ONE conversion, not N. */
54
+ conversionPackage: {
55
+ command: '12ui convert package --manifest <package.json> --out-dir <directory>',
56
+ endpoint: '/api/v1/convert/package',
57
+ sourceConversionReuse: 'sourceConversionId',
58
+ expectedSeconds: OPERATION_DURATION_HINTS.package,
59
+ },
60
+ branch: {
61
+ command: '12ui branch execute',
62
+ scopes: ['page', 'site'],
63
+ completionSentinel: 'branch.complete.json',
64
+ endpoint: '/api/v1/create',
37
65
  },
38
66
  projectProfileSchema: PROJECT_PROFILE_SCHEMA,
39
67
  projectProfiles: {
@@ -1 +1 @@
1
- {"version":3,"file":"cli-capabilities.js","sourceRoot":"","sources":["../src/cli-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAE1E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE;QACN,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,6BAA6B,CAAC,QAAQ;KACvC;IACD,OAAO,EAAE,kBAAkB;IAC3B,WAAW,EAAE,iBAAiB;IAC9B,gBAAgB,EAAE;QAChB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,sBAAsB;QAC/B,WAAW,EAAE,uFAAuF;KACrG;IACD,mBAAmB,EAAE,+BAA+B;IACpD,WAAW,EAAE;QACX,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,kBAAkB;QAC/B,OAAO,EAAE,cAAc;QACvB,WAAW,EACT,yFAAyF;cACvF,uFAAuF;cACvF,yEAAyE;QAC7E,eAAe,EAAE,yBAAyB,CAAC,KAAK;KACjD;IACD,eAAe,EAAE;QACf,OAAO,EAAE,yBAAyB,CAAC,OAAO;QAC1C,MAAM,EAAE,yBAAyB,CAAC,MAAM;QACxC,iBAAiB,EAAE,yBAAyB,CAAC,KAAK;KACnD;IACD,oBAAoB,EAAE,sBAAsB;IAC5C,eAAe,EAAE;QACf,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE,wBAAwB;KACtC;CACO,CAAC"}
1
+ {"version":3,"file":"cli-capabilities.js","sourceRoot":"","sources":["../src/cli-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAE1E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE;QACN,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,6BAA6B,CAAC,QAAQ;KACvC;IACD,OAAO,EAAE,kBAAkB;IAC3B,WAAW,EAAE,iBAAiB;IAC9B,gBAAgB,EAAE;QAChB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,sBAAsB;QAC/B,WAAW,EAAE,uFAAuF;KACrG;IACD,mBAAmB,EAAE,+BAA+B;IACpD,WAAW,EAAE;QACX,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,kBAAkB;QAC/B,OAAO,EAAE,cAAc;QACvB,WAAW,EACT,yFAAyF;cACvF,uFAAuF;cACvF,yEAAyE;QAC7E,eAAe,EAAE,yBAAyB,CAAC,KAAK;KACjD;IACD,eAAe,EAAE;QACf,OAAO,EAAE,yBAAyB,CAAC,OAAO;QAC1C,MAAM,EAAE,yBAAyB,CAAC,MAAM;QACxC,iBAAiB,EAAE,yBAAyB,CAAC,KAAK;QAClD,UAAU,EAAE,wBAAwB,CAAC,UAAU;QAC/C,WAAW,EAAE,wBAAwB,CAAC,WAAW;QACjD,YAAY,EAAE,wBAAwB,CAAC,YAAY;QACnD,aAAa,EAAE,wBAAwB,CAAC,UAAU;QAClD,aAAa,EAAE,wBAAwB,CAAC,UAAU;QAClD,iBAAiB,EAAE,wBAAwB,CAAC,OAAO;KACpD;IACD;;;;OAIG;IACH,cAAc,EAAE;QACd,MAAM,EAAE,0CAA0C;QAClD,UAAU,EAAE,iDAAiD;KAC9D;IACD,uEAAuE;IACvE,iBAAiB,EAAE;QACjB,OAAO,EAAE,sEAAsE;QAC/E,QAAQ,EAAE,yBAAyB;QACnC,qBAAqB,EAAE,oBAAoB;QAC3C,eAAe,EAAE,wBAAwB,CAAC,OAAO;KAClD;IACD,MAAM,EAAE;QACN,OAAO,EAAE,qBAAqB;QAC9B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,sBAAsB;QAC1C,QAAQ,EAAE,gBAAgB;KAC3B;IACD,oBAAoB,EAAE,sBAAsB;IAC5C,eAAe,EAAE;QACf,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE,wBAAwB;KACtC;CACO,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type CliFlags } from './cli-arguments.js';
2
+ import { type CreateCandidateSpecInput } from './create-identity.js';
3
+ /**
4
+ * `12ui create` — the hosted candidate API as commands instead of curl.
5
+ *
6
+ * `12ui draft` covers the ordinary explore step end to end. This family exists
7
+ * for the runs draft does not shape: more than four slots, a direction per
8
+ * slot, a corpus reference per slot. Every subcommand maps to one call the
9
+ * design-draft skill used to spell out as a `curl` invocation, and the claim
10
+ * derives its own `Idempotency-Key` so the caller never mints one.
11
+ */
12
+ export declare const CREATE_USAGE: string;
13
+ /** One image, generated by the same provider path a draft candidate uses. */
14
+ export declare const CREATE_CANDIDATE_DURATION_SECONDS = 150;
15
+ /**
16
+ * The spec is JSON because it is a list of records; accepting `@file` keeps a
17
+ * 96-slot run out of the shell's argument list.
18
+ */
19
+ export declare const parseCandidateSpec: (value: string) => CreateCandidateSpecInput[];
20
+ export declare const runCreateCommand: (command: readonly string[], flags: CliFlags) => Promise<void>;
21
+ //# sourceMappingURL=cli-create-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-create-command.d.ts","sourceRoot":"","sources":["../src/cli-create-command.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAS5E,OAAO,EAAgB,KAAK,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGnF;;;;;;;;GAQG;AAEH,eAAO,MAAM,YAAY,QAMqD,CAAC;AAE/E,6EAA6E;AAC7E,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAgCrD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,wBAAwB,EAsC1E,CAAC;AAiOF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,SAAS,MAAM,EAAE,EAC1B,OAAO,QAAQ,KACd,OAAO,CAAC,IAAI,CAWd,CAAC"}