@12ui/design 0.2.2 → 0.2.4

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 CHANGED
@@ -33,8 +33,9 @@ skill name) to install one skill instead of the complete bundle.
33
33
 
34
34
  - `design` routes UI, web, and mobile work. Finished screenshots go directly
35
35
  to conversion, tiny edits stay code-only, and rough briefs retrieve exactly
36
- four references, generate four candidates conditioned on all four, select
37
- one, convert only the winner, integrate it, and verify the real surface.
36
+ four references, generate four candidates using one different reference per
37
+ candidate, select one, convert only the winner, integrate it, and verify the
38
+ real surface.
38
39
  - `design-search` returns a ranked, diverse set of real Design Corpus
39
40
  references while preserving endpoint order and metrics.
40
41
  - `design-convert` turns a finished PNG, JPEG, or WebP into LayerDoc and any
@@ -49,12 +50,13 @@ manual recreation.
49
50
  ```bash
50
51
  12ui skill status --json
51
52
  12ui auth status
52
- 12ui corpus inspire --query-file ./brief.txt --out-dir ./references --count 4
53
- 12ui image generate --prompt-file ./candidate-1.txt \
54
- --reference-1 ./references/01.webp \
55
- --reference-2 ./references/02.webp \
56
- --reference-3 ./references/03.webp \
57
- --reference-4 ./references/04.webp \
53
+ 12ui corpus inspire \
54
+ --query "Editorial architecture homepage with warm materiality" \
55
+ --out-dir ./references \
56
+ --count 4
57
+ 12ui image generate \
58
+ --prompt "Create one compelling first viewport for an editorial architecture homepage. Use the attached image as inspiration, not a template. Prioritize hierarchy and breathing room, and choose the remaining layout and visual style yourself." \
59
+ --reference ./references/01.webp \
58
60
  --out ./candidate-1.png \
59
61
  --aspect landscape \
60
62
  --project-root . \
@@ -70,10 +72,11 @@ manual recreation.
70
72
  `image generate` resolves one provider before dispatch: authenticated Codex,
71
73
  then `OPENAI_API_KEY` from the process or exactly `<project-root>/.env`. It
72
74
  refuses a Git-tracked `.env`, never stores or prints the key, persists attempt
73
- evidence, and never switches providers after dispatch. Choose `--aspect`
74
- explicitly for the target interface; it defaults to `landscape` for
75
- compatibility. Generated candidates are always PNG bytes, and `--out` must end
76
- in `.png`.
75
+ evidence, and never switches providers after dispatch. Pass exactly one of
76
+ `--prompt` or `--prompt-file` and exactly one `--reference`; independent
77
+ candidates should use different references. Choose `--aspect` explicitly for
78
+ the target interface; it defaults to `landscape` for compatibility. Generated
79
+ candidates are always PNG bytes, and `--out` must end in `.png`.
77
80
 
78
81
  `export` downloads one successful base LayerDoc once and dispatches the chosen
79
82
  formats in parallel. Project exports require exact web/native profiles; image
@@ -134,7 +137,7 @@ parallel, verifies each WebP, and writes a content-hashed manifest:
134
137
 
135
138
  ```bash
136
139
  node "$TWELVE_UI_REPO/packages/12ui/dist/cli.js" corpus inspire \
137
- --query-file ./brief.txt \
140
+ --query "Editorial architecture home page with warm materiality and asymmetric type" \
138
141
  --count 4 \
139
142
  --wildness 0.6 \
140
143
  --idempotency-key design-run:home-v1 \
@@ -1 +1 @@
1
- {"version":3,"file":"cli-image-command.d.ts","sourceRoot":"","sources":["../src/cli-image-command.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAM/D,OAAO,EAGL,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAgEvC,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,GAAG,SAAS,EAC1B,OAAO,QAAQ,EACf,eAAc;IACZ,QAAQ,CAAC,EAAE,OAAO,aAAa,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,sBAAsB,CAAC;CACtC,KACL,OAAO,CAAC,IAAI,CAiJd,CAAC"}
1
+ {"version":3,"file":"cli-image-command.d.ts","sourceRoot":"","sources":["../src/cli-image-command.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAO/D,OAAO,EAGL,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAyDvC,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,GAAG,SAAS,EAC1B,OAAO,QAAQ,EACf,eAAc;IACZ,QAAQ,CAAC,EAAE,OAAO,aAAa,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,sBAAsB,CAAC;CACtC,KACL,OAAO,CAAC,IAAI,CA0Id,CAAC"}
@@ -5,47 +5,40 @@ import { ensembleImage } from '@just-every/ensemble';
5
5
  import { OpenAIProvider } from '@just-every/ensemble/model_providers/openai';
6
6
  import { stringFlag } from './cli-arguments.js';
7
7
  import { imageAttemptPath, writeImageGenerationAttempt, } from './image-generation-evidence.js';
8
+ import { generatedPngBytes, referenceImageDataUrl } from './image-generation-output.js';
8
9
  import { IMAGE_GENERATION_PROVIDERS, isImageGenerationProvider, preflightImageProvider, } from './image-provider-preflight.js';
9
10
  import { normalizeOptionalIdempotencyKey } from './idempotency-key.js';
10
11
  const IMAGE_GENERATION_ASPECTS = ['landscape', 'portrait', 'square'];
11
12
  const isImageGenerationAspect = (value) => (IMAGE_GENERATION_ASPECTS.includes(value));
12
13
  const sha256 = (value) => (createHash('sha256').update(value).digest('hex'));
13
- const referenceFlags = (flags) => {
14
- const values = ['reference-1', 'reference-2', 'reference-3', 'reference-4']
15
- .map((name) => stringFlag(flags, name)?.trim())
16
- .filter((value) => Boolean(value));
17
- if (values.length !== 4) {
18
- throw new Error('image generate requires exactly --reference-1, --reference-2, --reference-3, and --reference-4');
14
+ const referenceFlag = (flags) => {
15
+ const numbered = ['reference-1', 'reference-2', 'reference-3', 'reference-4']
16
+ .filter((name) => stringFlag(flags, name) !== undefined);
17
+ if (numbered.length > 0) {
18
+ throw new Error('Numbered reference flags are not supported; use exactly one --reference <file>');
19
19
  }
20
- return values;
20
+ const value = stringFlag(flags, 'reference')?.trim();
21
+ if (!value)
22
+ throw new Error('--reference is required');
23
+ return value;
21
24
  };
22
- const imageDataUrl = (bytes, filePath) => {
23
- const extension = path.extname(filePath).toLowerCase();
24
- const mediaType = extension === '.png'
25
- ? 'image/png'
26
- : extension === '.jpg' || extension === '.jpeg'
27
- ? 'image/jpeg'
28
- : extension === '.webp'
29
- ? 'image/webp'
30
- : null;
31
- if (!mediaType) {
32
- throw new Error(`Reference images must be PNG, JPEG, or WebP: ${filePath}`);
25
+ const promptInput = async (flags) => {
26
+ const inline = stringFlag(flags, 'prompt');
27
+ const file = stringFlag(flags, 'prompt-file');
28
+ if ((inline === undefined) === (file === undefined)) {
29
+ throw new Error('image generate requires exactly one of --prompt or --prompt-file');
33
30
  }
34
- return `data:${mediaType};base64,${Buffer.from(bytes).toString('base64')}`;
35
- };
36
- const generatedBytes = async (result) => {
37
- if (/^https?:\/\//iu.test(result)) {
38
- const response = await fetch(result);
39
- if (!response.ok)
40
- throw new Error(`Generated image download failed with HTTP ${response.status}`);
41
- return new Uint8Array(await response.arrayBuffer());
31
+ if (inline !== undefined) {
32
+ const prompt = inline.trim();
33
+ if (!prompt)
34
+ throw new Error('--prompt must not be empty');
35
+ return { prompt, source: { kind: 'inline' } };
42
36
  }
43
- const dataUrl = result.match(/^data:image\/(?:png|jpeg|webp);base64,(.+)$/isu);
44
- const encoded = dataUrl?.[1] ?? result;
45
- const bytes = new Uint8Array(Buffer.from(encoded, 'base64'));
46
- if (bytes.byteLength === 0)
47
- throw new Error('Image provider returned an empty image');
48
- return bytes;
37
+ const promptPath = path.resolve(file);
38
+ const prompt = (await readFile(promptPath, 'utf8')).trim();
39
+ if (!prompt)
40
+ throw new Error('--prompt-file must not be empty');
41
+ return { prompt, source: { kind: 'file', path: promptPath } };
49
42
  };
50
43
  const pathExists = async (target) => {
51
44
  try {
@@ -60,21 +53,20 @@ const pathExists = async (target) => {
60
53
  };
61
54
  export const runImageCommand = async (action, flags, dependencies = {}) => {
62
55
  if (action !== 'generate') {
63
- throw new Error('Usage: 12ui image generate --prompt-file <file> --reference-1 <file>'
64
- + ' --reference-2 <file> --reference-3 <file> --reference-4 <file>'
56
+ throw new Error('Usage: 12ui image generate --prompt <text>|--prompt-file <file>'
57
+ + ' --reference <file>'
65
58
  + ' --out <file.png> --aspect landscape|portrait|square'
66
59
  + ' --provider auto|codex|openai --project-root <directory>'
67
60
  + ' --idempotency-key <key>');
68
61
  }
69
- const promptPath = path.resolve(stringFlag(flags, 'prompt-file') ?? '');
70
62
  const outputPath = path.resolve(stringFlag(flags, 'out') ?? '');
71
63
  const projectRoot = path.resolve(stringFlag(flags, 'project-root') ?? '');
72
- if (!stringFlag(flags, 'prompt-file'))
73
- throw new Error('--prompt-file is required');
74
64
  if (!stringFlag(flags, 'out'))
75
65
  throw new Error('--out is required');
76
66
  if (!stringFlag(flags, 'project-root'))
77
67
  throw new Error('--project-root is required');
68
+ const { prompt, source: promptSource } = await promptInput(flags);
69
+ const referencePath = path.resolve(referenceFlag(flags));
78
70
  if (path.extname(outputPath).toLowerCase() !== '.png') {
79
71
  throw new Error('--out must end in .png because image generate always writes PNG bytes');
80
72
  }
@@ -98,38 +90,30 @@ export const runImageCommand = async (action, flags, dependencies = {}) => {
98
90
  const idempotencyKey = normalizeOptionalIdempotencyKey(stringFlag(flags, 'idempotency-key'), '--idempotency-key');
99
91
  if (!idempotencyKey)
100
92
  throw new Error('--idempotency-key is required');
101
- const prompt = (await readFile(promptPath, 'utf8')).trim();
102
- if (!prompt)
103
- throw new Error('--prompt-file must not be empty');
104
- const references = await Promise.all(referenceFlags(flags).map(async (value) => {
105
- const referencePath = path.resolve(value);
106
- const bytes = new Uint8Array(await readFile(referencePath));
107
- return {
108
- path: referencePath,
109
- bytes,
110
- sha256: sha256(bytes),
111
- dataUrl: imageDataUrl(bytes, referencePath),
112
- };
113
- }));
93
+ const referenceBytes = new Uint8Array(await readFile(referencePath));
94
+ const reference = {
95
+ path: referencePath,
96
+ sha256: sha256(referenceBytes),
97
+ dataUrl: await referenceImageDataUrl(referenceBytes, referencePath),
98
+ };
114
99
  const preflight = await (dependencies.preflight ?? preflightImageProvider)({
115
100
  provider: providerValue,
116
101
  projectRoot,
117
102
  });
118
103
  const attempt = {
119
- schemaVersion: 1,
104
+ schemaVersion: 2,
120
105
  status: 'prepared',
121
106
  idempotencyKey,
122
107
  provider: preflight.provider,
123
108
  model: preflight.model,
109
+ providerIdempotencyEnforced: preflight.provider === 'openai',
124
110
  providerEvidence: preflight.provider === 'codex'
125
111
  ? { codexVersion: preflight.codexVersion }
126
112
  : { keySource: preflight.keySource },
127
- promptFile: promptPath,
113
+ prompt,
114
+ promptSource,
128
115
  promptSha256: sha256(prompt),
129
- references: references.map(({ path: referencePath, sha256: digest }) => ({
130
- path: referencePath,
131
- sha256: digest,
132
- })),
116
+ reference: { path: reference.path, sha256: reference.sha256 },
133
117
  outputPath,
134
118
  preparedAt: new Date().toISOString(),
135
119
  };
@@ -154,7 +138,7 @@ export const runImageCommand = async (action, flags, dependencies = {}) => {
154
138
  n: 1,
155
139
  size: aspectValue,
156
140
  quality: 'high',
157
- source_images: references.map(({ dataUrl }) => dataUrl),
141
+ source_images: [reference.dataUrl],
158
142
  ...(preflight.provider === 'codex'
159
143
  ? { input_fidelity: 'high' }
160
144
  : {}),
@@ -170,7 +154,7 @@ export const runImageCommand = async (action, flags, dependencies = {}) => {
170
154
  if (!Array.isArray(generated) || generated.length !== 1 || typeof generated[0] !== 'string') {
171
155
  throw new Error('Image provider did not return exactly one image');
172
156
  }
173
- const bytes = await generatedBytes(generated[0]);
157
+ const bytes = await generatedPngBytes(generated[0]);
174
158
  await writeFile(outputPath, bytes, { flag: 'wx' });
175
159
  attempt.status = 'succeeded';
176
160
  attempt.completedAt = new Date().toISOString();
@@ -1 +1 @@
1
- {"version":3,"file":"cli-image-command.js","sourceRoot":"","sources":["../src/cli-image-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-image-command.js","sourceRoot":"","sources":["../src/cli-image-command.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -31,7 +31,7 @@ const usage = (exitCode = 1) => {
31
31
  12ui skill remove [--skill design|design-search|design-convert] [--client codex|claude-code] [--home <client-home>]
32
32
  12ui corpus inspire --query <text>|--query-file <file> --out-dir <directory> [--count <1-48>] [--wildness <0-0.6>] [--seed <integer>] [--aspect landscape|square|portrait] [--idempotency-key <key>] [--origin <url>] [--api-key <key>]
33
33
  12ui corpus resume --out-dir <directory> [--origin <url>] [--api-key <key>]
34
- 12ui image generate --prompt-file <file> --reference-1 <file> --reference-2 <file> --reference-3 <file> --reference-4 <file> --out <file.png> [--aspect landscape|portrait|square] [--provider auto|codex|openai] --project-root <directory> --idempotency-key <key>
34
+ 12ui image generate --prompt <text>|--prompt-file <file> --reference <file> --out <file.png> [--aspect landscape|portrait|square] [--provider auto|codex|openai] --project-root <directory> --idempotency-key <key>
35
35
  12ui capabilities [--json]
36
36
  12ui convert <image.png|jpg|webp|layerdoc.json> --output ${outputs} [--model fast|standard|pro] [--width <px>] [--responsive-quality standard|pro] [--profile <json|file>] [--out <file>] [--detach] [--timeout-ms <ms>] [--idempotency-key <key>] [--origin <url>] [--api-key <key>]
37
37
  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>]
@@ -1,19 +1,26 @@
1
1
  export type ImageGenerationAttempt = {
2
- schemaVersion: 1;
2
+ schemaVersion: 2;
3
3
  status: 'prepared' | 'dispatched' | 'succeeded' | 'failed';
4
4
  idempotencyKey: string;
5
5
  provider: 'codex' | 'openai';
6
6
  model: 'codex-gpt-image-2' | 'gpt-image-2';
7
+ providerIdempotencyEnforced: boolean;
7
8
  providerEvidence: {
8
9
  codexVersion?: string;
9
10
  keySource?: 'process' | 'project-env';
10
11
  };
11
- promptFile: string;
12
+ prompt: string;
13
+ promptSource: {
14
+ kind: 'inline';
15
+ } | {
16
+ kind: 'file';
17
+ path: string;
18
+ };
12
19
  promptSha256: string;
13
- references: Array<{
20
+ reference: {
14
21
  path: string;
15
22
  sha256: string;
16
- }>;
23
+ };
17
24
  outputPath: string;
18
25
  preparedAt: string;
19
26
  dispatchedAt?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"image-generation-evidence.d.ts","sourceRoot":"","sources":["../src/image-generation-evidence.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC7B,KAAK,EAAE,mBAAmB,GAAG,aAAa,CAAC;IAC3C,gBAAgB,EAAE;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;KACvC,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,MAAsC,CAAC;AAE7F,eAAO,MAAM,2BAA2B,GACtC,UAAU,MAAM,EAChB,SAAS,sBAAsB,EAC/B,mBAAiB,KAChB,OAAO,CAAC,IAAI,CAqBd,CAAC"}
1
+ {"version":3,"file":"image-generation-evidence.d.ts","sourceRoot":"","sources":["../src/image-generation-evidence.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC7B,KAAK,EAAE,mBAAmB,GAAG,aAAa,CAAC;IAC3C,2BAA2B,EAAE,OAAO,CAAC;IACrC,gBAAgB,EAAE;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;KACvC,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,MAAsC,CAAC;AAE7F,eAAO,MAAM,2BAA2B,GACtC,UAAU,MAAM,EAChB,SAAS,sBAAsB,EAC/B,mBAAiB,KAChB,OAAO,CAAC,IAAI,CAqBd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"image-generation-evidence.js","sourceRoot":"","sources":["../src/image-generation-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,IAAI,MAAM,WAAW,CAAC;AAuB7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,GAAG,UAAU,eAAe,CAAC;AAE7F,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAC9C,QAAgB,EAChB,OAA+B,EAC/B,SAAS,GAAG,KAAK,EACF,EAAE;IACjB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACjE,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,UAAU,EAAE,MAAM,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAClE,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"image-generation-evidence.js","sourceRoot":"","sources":["../src/image-generation-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,IAAI,MAAM,WAAW,CAAC;AAyB7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,GAAG,UAAU,eAAe,CAAC;AAE7F,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAC9C,QAAgB,EAChB,OAA+B,EAC/B,SAAS,GAAG,KAAK,EACF,EAAE;IACjB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACjE,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,UAAU,EAAE,MAAM,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAClE,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const referenceImageDataUrl: (bytes: Uint8Array, filePath: string) => Promise<string>;
2
+ export declare const generatedPngBytes: (result: string) => Promise<Uint8Array>;
3
+ //# sourceMappingURL=image-generation-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-generation-output.d.ts","sourceRoot":"","sources":["../src/image-generation-output.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,qBAAqB,GAChC,OAAO,UAAU,EACjB,UAAU,MAAM,KACf,OAAO,CAAC,MAAM,CAYhB,CAAC;AAgBF,eAAO,MAAM,iBAAiB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,UAAU,CAe1E,CAAC"}
@@ -0,0 +1,51 @@
1
+ import sharp from 'sharp';
2
+ const supportedMediaType = (format) => {
3
+ if (format === 'png')
4
+ return 'image/png';
5
+ if (format === 'jpeg')
6
+ return 'image/jpeg';
7
+ if (format === 'webp')
8
+ return 'image/webp';
9
+ return null;
10
+ };
11
+ export const referenceImageDataUrl = async (bytes, filePath) => {
12
+ try {
13
+ const metadata = await sharp(bytes, { failOn: 'error' }).metadata();
14
+ const mediaType = supportedMediaType(metadata.format);
15
+ if (!mediaType)
16
+ throw new Error(`unsupported image format ${String(metadata.format)}`);
17
+ return `data:${mediaType};base64,${Buffer.from(bytes).toString('base64')}`;
18
+ }
19
+ catch (error) {
20
+ throw new Error(`Reference image must be a decodable PNG, JPEG, or WebP: ${filePath}`, { cause: error });
21
+ }
22
+ };
23
+ const decodeProviderResult = async (result) => {
24
+ if (/^https?:\/\//iu.test(result)) {
25
+ const response = await fetch(result);
26
+ if (!response.ok) {
27
+ throw new Error(`Generated image download failed with HTTP ${response.status}`);
28
+ }
29
+ return new Uint8Array(await response.arrayBuffer());
30
+ }
31
+ const dataUrl = result.match(/^data:image\/(?:png|jpeg|webp);base64,(.+)$/isu);
32
+ const bytes = new Uint8Array(Buffer.from(dataUrl?.[1] ?? result, 'base64'));
33
+ if (bytes.byteLength === 0)
34
+ throw new Error('Image provider returned an empty image');
35
+ return bytes;
36
+ };
37
+ export const generatedPngBytes = async (result) => {
38
+ const bytes = await decodeProviderResult(result);
39
+ try {
40
+ const image = sharp(bytes, { failOn: 'error' });
41
+ const metadata = await image.metadata();
42
+ if (!supportedMediaType(metadata.format)) {
43
+ throw new Error(`unsupported image format ${String(metadata.format)}`);
44
+ }
45
+ return new Uint8Array(await image.png().toBuffer());
46
+ }
47
+ catch (error) {
48
+ throw new Error('Image provider returned an undecodable PNG, JPEG, or WebP image', { cause: error });
49
+ }
50
+ };
51
+ //# sourceMappingURL=image-generation-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-generation-output.js","sourceRoot":"","sources":["../src/image-generation-output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,kBAAkB,GAAG,CAAC,MAA0B,EAAiB,EAAE;IACvE,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,WAAW,CAAC;IACzC,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IAC3C,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,KAAiB,EACjB,QAAgB,EACC,EAAE;IACnB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACpE,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,QAAQ,SAAS,WAAW,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,2DAA2D,QAAQ,EAAE,EACrE,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAAE,MAAc,EAAuB,EAAE;IACzE,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5E,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACtF,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,MAAc,EAAuB,EAAE;IAC7E,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,iEAAiE,EACjE,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-skill-catalog.d.ts","sourceRoot":"","sources":["../src/legacy-skill-catalog.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,yGAOrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAoGhE,eAAO,MAAM,wBAAwB,GACnC,WAAW,MAAM,KAChB,OAAO,CAAC,MAAM,EAAE,CAiBlB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,WAAW,MAAM,KAChB,OAAO,CAAC,SAAS,GAAG,YAAY,GAAG,SAAS,CAW9C,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAC1C,WAAW,MAAM,KAChB,OAAO,CAAC,SAAS,GAAG,YAAY,GAAG,SAAS,CAoB9C,CAAC"}
1
+ {"version":3,"file":"legacy-skill-catalog.d.ts","sourceRoot":"","sources":["../src/legacy-skill-catalog.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,yGAOrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AA8HhE,eAAO,MAAM,wBAAwB,GACnC,WAAW,MAAM,KAChB,OAAO,CAAC,MAAM,EAAE,CAiBlB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,WAAW,MAAM,KAChB,OAAO,CAAC,SAAS,GAAG,YAAY,GAAG,SAAS,CAW9C,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAC1C,WAAW,MAAM,KAChB,OAAO,CAAC,SAAS,GAAG,YAAY,GAAG,SAAS,CAoB9C,CAAC"}
@@ -57,11 +57,31 @@ const variants = {
57
57
  'agents/openai.yaml': 'c096fc68a453f97db693f23d551c5598141246646a5469d96df29254cf991e07',
58
58
  'references/selection-contract.md': 'd65864d507e0bf6555ceaef5b1085b17f43210b7566d803ceaaa0031039df349',
59
59
  },
60
+ {
61
+ 'SKILL.md': 'c609816174370ab1d6c7a2bbfb59842de4e67b6648470da94892ddd37618f25a',
62
+ 'agents/openai.yaml': 'c096fc68a453f97db693f23d551c5598141246646a5469d96df29254cf991e07',
63
+ 'references/selection-contract.md': 'd65864d507e0bf6555ceaef5b1085b17f43210b7566d803ceaaa0031039df349',
64
+ },
65
+ {
66
+ 'SKILL.md': 'c609816174370ab1d6c7a2bbfb59842de4e67b6648470da94892ddd37618f25a',
67
+ 'agents/openai.yaml': '543726a0ac4b976c897c95ce18324ed7610ae2b5f9584cc8b7b2e3df5c16980c',
68
+ 'assets/large-logo.svg': 'bf877913dc00515b7f714a48851f9fdc6d42c4ca5ad4a1c7bc36d926c23f9b6d',
69
+ 'assets/small-400px.png': '2c045201a83e54afe733e199af02ab8fbcdb9f50e6b3e0281078fdffca9b3b03',
70
+ 'references/selection-contract.md': 'd65864d507e0bf6555ceaef5b1085b17f43210b7566d803ceaaa0031039df349',
71
+ },
60
72
  ],
61
- 'design-search': [{
73
+ 'design-search': [
74
+ {
62
75
  'SKILL.md': '5373cd5c3924580eb156a28491e83e50936a0e7e16ee73eb87ea68b1aa59cece',
63
76
  'agents/openai.yaml': '0d008aa094d36ab56254aa1e44a4a8358e37488ed5ba5d0543a5c2bfc45c735e',
64
- }],
77
+ },
78
+ {
79
+ 'SKILL.md': '5373cd5c3924580eb156a28491e83e50936a0e7e16ee73eb87ea68b1aa59cece',
80
+ 'agents/openai.yaml': '1b8e50d53b724a1a2f3d43a0c719a29bd1bd7b0ebe6f27c6903f71e03b621a5c',
81
+ 'assets/large-logo.svg': '2ebae5928060b57ba4d014bf5c78066e99ac7ad2ff8132a611077e433f4dfe0d',
82
+ 'assets/small-400px.png': '4f53f6048ac87b6df76d768a82e7eeaf2d5b9bf8d43647a2954ff194ec361358',
83
+ },
84
+ ],
65
85
  'design-convert': [{
66
86
  'SKILL.md': '56a364713daea63280bd99c37c84c473f7b3227fafb72c6b84d2bcaca62bbaab',
67
87
  'agents/openai.yaml': '8b1cd1240d52301950187f41d43c95e56a8a307a66c52d38227331100ecf8780',
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-skill-catalog.js","sourceRoot":"","sources":["../src/legacy-skill-catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"legacy-skill-catalog.js","sourceRoot":"","sources":["../src/legacy-skill-catalog.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@12ui/design",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "type": "module",
5
5
  "description": "The canonical 12UI CLI, SDK, MCP server, and visual interface design skills",
6
6
  "main": "dist/index.js",
@@ -37,23 +37,43 @@ visual direction, not merely because design work is involved.
37
37
  1. Inspect the repository instructions, framework, routes, styling, reusable
38
38
  components, assets, package manager, validation commands, and current user
39
39
  changes.
40
- 2. Create an isolated run directory, using the repository's scratch convention
41
- or `.12ui-design/runs/<run-id>`.
42
- 3. Write `brief.txt` with the product and audience, required content and
43
- interactions, exact copy, intended surface and viewport, desired
44
- personality, accessibility needs, and prohibited brands or copied text.
40
+ 2. Create an isolated run directory under the system temporary directory using
41
+ the host's standard temporary-directory mechanism.
42
+ 3. Treat the user's request and the inspected project as the implementation
43
+ contract. Distill only the concise search query and generation prompts that
44
+ the next steps require; do not duplicate the whole brief into a file.
45
45
  4. Use one CLI installation and one account/origin throughout the run. Verify
46
- it with `12ui auth status` and `12ui capabilities --json`.
46
+ it with `12ui auth status` and `12ui capabilities --json`. When a local
47
+ development setup has a separate Login origin, pass its documented
48
+ `--login-origin <origin>` to `auth status`; keep that Login/Worker pair for
49
+ the whole run.
47
50
 
48
51
  Never substitute cached examples, invented corpus entries, placeholder images,
49
52
  or mock conversion output for a real run.
50
53
 
51
54
  ### 2. Retrieve exactly four references
52
55
 
53
- Invoke `design-search` with `--count 4`, saving its result under
54
- `<run-dir>/references`. The complete authored workflow always requires four
55
- distinct, successfully downloaded real corpus images. Preserve the returned
56
- order and metrics.
56
+ Compose a concise search query covering the product, audience, primary goal,
57
+ surface, and desired personality. Describe the design problem, not every page
58
+ section or UI control. Invoke the CLI directly:
59
+
60
+ ```bash
61
+ 12ui corpus inspire \
62
+ --query "<concise interface concept>" \
63
+ --count 4 \
64
+ --aspect <landscape|portrait|square> \
65
+ --out-dir <run-dir>/references
66
+ ```
67
+
68
+ Add `--origin <origin>` only when targeting a specific verified deployment.
69
+ Use `--query-file` only when a genuinely long query or shell quoting makes it
70
+ necessary. The CLI records the exact query in its attempt, evidence, and
71
+ manifest.
72
+
73
+ The complete authored workflow always requires four distinct, successfully
74
+ downloaded real corpus images. Validate `manifest.json`, preserve endpoint
75
+ order and metrics, and map reference 1 to candidate A, 2 to B, 3 to C, and 4
76
+ to D.
57
77
 
58
78
  If the search request is interrupted or ambiguous, use `12ui corpus resume`
59
79
  with the saved output directory and original origin. Do not delete evidence,
@@ -62,30 +82,77 @@ brief.
62
82
 
63
83
  ### 3. Generate exactly four candidates
64
84
 
65
- Create four frozen prompt files, one each for candidates A through D. Every
66
- prompt must:
85
+ Generate a focused visual direction, not a compressed product specification.
86
+ Default the image surface to:
87
+
88
+ - the first viewport for a landing, editorial, marketing, or commerce page;
89
+ - one primary working state for a web app or dashboard; or
90
+ - one screen in the journey for mobile.
91
+
92
+ Show a complete surface only when it is naturally simple or the user explicitly
93
+ asks for one. Eventual below-fold sections, routes, exact copy, and interactions
94
+ remain implementation requirements after conversion; do not squeeze them all
95
+ into the generated viewport.
96
+
97
+ Keep each candidate prompt brief: usually 60-100 words, with 120 words as a
98
+ hard cap rather than a target. Describe one visual outcome or feeling. Include
99
+ only the product and primary purpose, chosen viewport/state, and two or three
100
+ essential visual anchors. Normally provide no exact copy; include at most one
101
+ exact string only when it must shape the composition. Do not enumerate the
102
+ layout, navigation, secondary controls, later sections, palette, fonts, or
103
+ visual techniques. Give the model room to make those choices.
104
+
105
+ Use this short prompt shape as a guide, not a fill-in form:
106
+
107
+ ```text
108
+ Create one striking [desktop/mobile] [interface type] for [product and primary
109
+ purpose]. It should feel [one desired quality].
110
+
111
+ Show only [the first viewport / one primary application state]. Do not compress
112
+ the whole product or journey. Make [primary goal] immediately clear through
113
+ [two or three essential visual anchors].
67
114
 
68
- - attach and identify all four local corpus reference images;
69
- - preserve the brief's required content, exact copy, interactions, surface, and
70
- viewport;
71
- - ask for a shippable interface rather than a mood board, wireframe, device
72
- scene, or perspective presentation;
73
- - use abstract composition, spacing, hierarchy, color relationships, material,
74
- and typographic energy without copying brands, logos, names, or text;
75
- - keep controls plausible, text legible, and states accessible; and
76
- - prohibit watermarks and invented product claims.
115
+ Use the attached image as loose visual inspiration, not a template. Preserve
116
+ clear hierarchy and breathing room; choose the layout and visual language
117
+ yourself. Fill the canvas with the interface, without a device or presentation
118
+ frame.
119
+ ```
77
120
 
78
- Give every candidate all four references. Rotate which ordered reference is the
79
- primary visual anchor: reference 1 for A, 2 for B, 3 for C, and 4 for D. The
80
- other three remain active secondary references.
121
+ Each candidate receives exactly one reference image: A gets ordered reference
122
+ 1, B gets 2, C gets 3, and D gets 4. Do not mention candidate labels, corpus
123
+ IDs, local paths, or the other references in the image prompt. The reference is
124
+ an inspiration source, not a second specification.
81
125
 
82
126
  Dispatch the four candidates in parallel. Use the host's built-in imagegen
83
127
  tool when it is available. Otherwise, invoke one `12ui image generate`
84
- operation per candidate with its prompt file, all four repeated reference
85
- arguments, a unique `.png` output path, the project root, an explicit
128
+ operation per candidate with its prompt, its one mapped reference, a unique
129
+ `.png` output path, the project root, an explicit
86
130
  `--aspect landscape|portrait|square` matching the target surface, the
87
- preselected provider, and a stable idempotency key. Check
88
- `12ui image generate --help` for the installed version's exact flag spelling.
131
+ preselected provider, and a stable idempotency key:
132
+
133
+ ```bash
134
+ 12ui image generate \
135
+ --prompt "<candidate prompt>" \
136
+ --reference <one-reference-file> \
137
+ --out <run-dir>/candidates/<candidate>.png \
138
+ --aspect <landscape|portrait|square> \
139
+ --provider <auto|codex|openai> \
140
+ --project-root <project-root> \
141
+ --idempotency-key <stable-candidate-key>
142
+ ```
143
+
144
+ Use `--prompt-file` instead of `--prompt` only when quoting or prompt length
145
+ requires it. For built-in imagegen, likewise make one invocation per candidate
146
+ with exactly its one mapped reference image.
147
+
148
+ If the built-in tool exposes no idempotency-key or operation-ID field, do not
149
+ claim provider-enforced idempotency. Assign a stable host audit key before each
150
+ dispatch and write one durable attempt file per candidate using the built-in
151
+ shape in the selection contract. Record `providerIdempotencyEnforced: false`,
152
+ the exact prompt/reference hashes, the serializable tool result, original and
153
+ copied paths, copied digest, and completion time. When the tool result embeds
154
+ image bytes, replace only those bytes with their media type, byte length, and
155
+ SHA-256 while preserving every other returned field exactly.
89
156
 
90
157
  Run the four operations beneath one joinable foreground parent and wait for
91
158
  all four to finish before the host turn exits. In a noninteractive coding
@@ -106,16 +173,18 @@ Select the provider before dispatch:
106
173
 
107
174
  Never switch providers after dispatch. Preserve attempt evidence and stop on a
108
175
  failed or ambiguous operation. Do not replace a candidate generated without
109
- all four references. The CLI fallback always returns PNG bytes and rejects any
176
+ its mapped reference. The CLI fallback always returns PNG bytes and rejects any
110
177
  output path that does not end in `.png`; save those original bytes under
111
178
  `<run-dir>/candidates` and hash them immediately.
112
179
 
113
180
  ### 4. Choose the winner
114
181
 
115
182
  The host agent inspects all four candidates at original detail against the
116
- brief. Reject any candidate that omits required content, copies reference
117
- identity or text, has implausible UX, contains illegible output, or cannot be
118
- implemented on the requested surface.
183
+ intended viewport. Reject any candidate that misses the primary goal or
184
+ essential visible elements, copies reference identity or text, has implausible
185
+ UX, is visibly illegible, or cannot be implemented on the requested surface.
186
+ Do not reject a first-viewport candidate merely because it does not display
187
+ content intended for later sections, routes, or states.
119
188
 
120
189
  Choose the strongest eligible direction using visible evidence: fulfillment of
121
190
  the brief, hierarchy and usability, distinctiveness and personality,
@@ -147,11 +216,15 @@ failure.
147
216
  2. Merge the smallest coherent set into the target, preserving its routing,
148
217
  components, tokens, dependency policy, accessibility conventions, and
149
218
  unrelated user changes.
150
- 3. Remove duplicate generated scaffolding after integration.
151
- 4. Run focused typecheck, tests, lint, and build checks in parallel when their
219
+ 3. Apply the implementation contract that was intentionally left out of the
220
+ image prompt: exact copy, real interactions, responsive behavior, remaining
221
+ below-fold content, and required routes or states. Extend the winning
222
+ direction instead of shrinking its source viewport to fit everything.
223
+ 4. Remove duplicate generated scaffolding after integration.
224
+ 5. Run focused typecheck, tests, lint, and build checks in parallel when their
152
225
  outputs do not conflict.
153
- 5. Launch the real interface and exercise its interactions.
154
- 6. Compare the implementation with the winning image at the source viewport
226
+ 6. Launch the real interface and exercise its interactions.
227
+ 7. Compare the implementation with the winning image at the source viewport
155
228
  and representative narrower and wider viewports. Correct integration defects
156
229
  in project code and retain evidence for conversion defects.
157
230
 
@@ -1,6 +1,8 @@
1
1
  interface:
2
- display_name: "12UI Design"
3
- short_description: "Author distinctive interfaces from visual references"
4
- default_prompt: "Use $design to create and implement a distinctive interface from this brief."
2
+ display_name: "Design"
3
+ short_description: "Use the 12ui design framework to quickly create high quality UI"
4
+ icon_small: "./assets/small-400px.png"
5
+ icon_large: "./assets/large-logo.svg"
6
+ default_prompt: "Use $design to create a new homepage for this project."
5
7
  policy:
6
8
  allow_implicit_invocation: true
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024" version="1.1" role="img" aria-label="design logo">
2
+ <path d="M 224.200 118.200 C 223.272 119.128, 223 183.857, 223 403.459 L 223 687.517 268.145 732.759 C 309.721 774.423, 317.070 781.044, 316.971 776.750 C 316.956 776.063, 317.045 681.309, 317.170 566.186 C 317.303 444.836, 317.773 356.640, 318.291 356.320 C 319.219 355.746, 326.251 362.815, 345.827 384 C 352.180 390.875, 364.155 403.535, 372.439 412.133 C 380.722 420.731, 392.675 433.319, 399 440.106 C 409.608 451.490, 414.997 457.252, 430.230 473.500 C 433.324 476.800, 438.926 482.689, 442.678 486.587 C 446.430 490.485, 454.225 498.809, 460 505.083 C 471.145 517.193, 481.371 528.035, 492 539.009 C 495.575 542.700, 500.750 548.193, 503.500 551.216 C 509.464 557.770, 530.250 579.957, 541.650 591.936 C 546.132 596.646, 551.532 602.385, 553.650 604.689 C 555.767 606.994, 561.796 613.519, 567.047 619.189 C 572.298 624.860, 578.823 631.942, 581.547 634.927 C 584.271 637.912, 590.325 644.251, 595 649.014 C 599.675 653.776, 605.314 659.659, 607.532 662.086 C 609.750 664.514, 614.444 669.650, 617.964 673.500 C 621.484 677.350, 630.469 686.977, 637.932 694.893 C 656.487 714.576, 657.810 715.991, 663.395 722.124 C 669.791 729.148, 693.049 753.918, 699.731 760.822 C 702.608 763.794, 707.424 768.910, 710.434 772.189 C 716.269 778.547, 719.225 779.441, 721.398 775.503 C 722.004 774.405, 724.638 770.741, 727.250 767.361 C 729.862 763.982, 732 760.750, 732 760.180 C 732 759.609, 732.563 758.536, 733.250 757.794 C 735.648 755.208, 738.724 750.445, 739.427 748.231 C 739.816 747.004, 740.510 746, 740.970 746 C 741.429 746, 742.300 744.762, 742.905 743.250 C 743.511 741.737, 744.893 739.150, 745.978 737.500 C 749.986 731.405, 764 703.988, 764 702.244 C 764 701.694, 764.675 700.685, 765.500 700 C 766.325 699.315, 767 697.740, 767 696.500 C 767 695.260, 767.675 693.685, 768.500 693 C 769.325 692.315, 770 691.016, 770 690.113 C 770 689.209, 770.900 686.791, 772 684.739 C 773.100 682.686, 774 680.288, 774 679.408 C 774 678.528, 774.620 676.614, 775.378 675.154 C 777.797 670.493, 781 661.530, 781 659.422 C 781 658.300, 781.661 656.509, 782.468 655.441 C 783.276 654.374, 783.951 652.714, 783.968 651.754 C 783.986 650.794, 784.835 647.419, 785.856 644.254 C 790.992 628.333, 796.267 604.086, 798.530 586 C 799.252 580.225, 800.395 572.575, 801.069 569 C 801.908 564.547, 802.300 549.587, 802.313 521.500 C 802.328 487.688, 802.056 479.361, 800.766 474 C 799.905 470.425, 798.907 464.575, 798.548 461 C 797.875 454.290, 797.207 450.634, 791.929 424.750 C 791.341 421.863, 790.396 418.150, 789.830 416.500 C 789.265 414.850, 788.357 411.250, 787.812 408.500 C 787.268 405.750, 786.465 403.050, 786.027 402.500 C 785.589 401.950, 784.894 399.927, 784.482 398.004 C 784.070 396.081, 783.175 393.156, 782.492 391.504 C 781.810 389.852, 780.195 385.125, 778.903 381 C 777.612 376.875, 775.980 372.612, 775.278 371.527 C 774.575 370.443, 774 368.630, 774 367.500 C 774 366.370, 773.386 364.557, 772.635 363.473 C 771.884 362.388, 770.931 360.375, 770.518 359 C 769.709 356.307, 760.535 336.474, 758.954 334 C 758.427 333.175, 757.523 331.375, 756.946 330 C 754.532 324.250, 745.249 306.921, 744.089 306 C 743.743 305.725, 742.909 304.375, 742.237 303 C 741.565 301.625, 740.449 299.644, 739.757 298.598 C 738.585 296.825, 730.391 284.656, 724.203 275.500 C 719.622 268.721, 707.830 253.691, 701 245.925 C 694.092 238.071, 670.847 214.538, 662.500 206.949 C 656.883 201.841, 626.460 178, 625.560 178 C 625.241 178, 622.847 176.527, 620.240 174.727 C 617.633 172.927, 614.375 170.897, 613 170.216 C 611.625 169.536, 609.150 168.090, 607.500 167.004 C 605.850 165.918, 603.600 164.550, 602.500 163.963 C 601.400 163.377, 598.700 161.830, 596.500 160.526 C 590.790 157.140, 568.255 146, 567.117 146 C 566.592 146, 564.888 145.380, 563.331 144.622 C 556.942 141.513, 542.989 136.003, 541.481 135.994 C 540.941 135.990, 539.243 135.332, 537.708 134.531 C 536.172 133.730, 533.289 132.770, 531.301 132.397 C 529.313 132.024, 526.519 131.110, 525.093 130.365 C 523.667 129.621, 521.317 129.010, 519.872 129.006 C 518.427 129.003, 515.727 128.380, 513.872 127.623 C 512.017 126.866, 508.250 125.933, 505.500 125.550 C 502.750 125.167, 498.572 124.212, 496.215 123.427 C 493.858 122.642, 490.030 122, 487.708 122 C 485.387 122, 481.915 121.508, 479.993 120.908 C 478.072 120.307, 467.050 119.205, 455.500 118.458 C 426.905 116.610, 226.014 116.386, 224.200 118.200 M 223.667 721.667 C 223.300 722.033, 223 764.532, 223 816.108 C 223 886.115, 223.294 910.063, 224.159 910.598 C 224.796 910.992, 267.096 911.449, 318.159 911.614 C 410.313 911.912, 411 911.900, 411 909.922 C 411 908.657, 402.031 898.914, 386.412 883.215 C 308.657 805.059, 224.798 721, 224.583 721 C 224.445 721, 224.033 721.300, 223.667 721.667" stroke="none" fill="#000" fill-rule="evenodd"/>
3
+ </svg>
@@ -8,10 +8,12 @@ The document has this shape:
8
8
 
9
9
  ```json
10
10
  {
11
- "version": 1,
11
+ "version": 2,
12
12
  "createdAt": "<ISO-8601 timestamp>",
13
- "briefSha256": "<SHA-256>",
13
+ "requestSummary": "<concise implementation contract from the user and project>",
14
+ "viewportMode": "<first-viewport|primary-state|single-screen|complete-simple-surface>",
14
15
  "corpus": {
16
+ "query": "<exact corpus query>",
15
17
  "idempotencyKey": "<stable corpus inspiration key>",
16
18
  "setId": "<returned set ID>",
17
19
  "referenceIds": ["<id-1>", "<id-2>", "<id-3>", "<id-4>"]
@@ -22,11 +24,14 @@ The document has this shape:
22
24
  "path": "<absolute original-image path>",
23
25
  "sha256": "<SHA-256>",
24
26
  "prompt": "<exact generation prompt>",
25
- "referenceIds": ["<id-1>", "<id-2>", "<id-3>", "<id-4>"],
26
- "primaryReferenceId": "<id-1>",
27
+ "promptSha256": "<SHA-256 of exact prompt>",
28
+ "referenceId": "<id-1>",
29
+ "referencePath": "<absolute path to reference 1>",
30
+ "referenceSha256": "<SHA-256 of reference 1>",
27
31
  "provider": "<selected provider>",
28
- "idempotencyKey": "<stable key>",
29
- "attemptEvidencePath": "<absolute path when CLI-generated>",
32
+ "idempotencyKey": "<provider key or stable host audit key>",
33
+ "providerIdempotencyEnforced": true,
34
+ "attemptEvidencePath": "<absolute attempt-evidence path>",
30
35
  "rejectionReasons": []
31
36
  }
32
37
  ],
@@ -35,10 +40,55 @@ The document has this shape:
35
40
  }
36
41
  ```
37
42
 
38
- Include exactly four candidate objects and four reference IDs in endpoint
39
- order. Copy `corpus.idempotencyKey` and `corpus.setId` from the completed
40
- inspiration manifest; neither value may be invented or replaced by an internal
41
- request identifier. For each non-winner, `rejectionReasons` must contain at
42
- least one specific visible reason. The winner must have an empty
43
- `rejectionReasons` array. Record provider and attempt evidence for auditability;
44
- do not store API keys or other secrets.
43
+ For built-in imagegen, write a separate attempt file for every candidate before
44
+ selection and point that candidate's `attemptEvidencePath` to it:
45
+
46
+ ```json
47
+ {
48
+ "version": 1,
49
+ "candidateId": "A",
50
+ "status": "succeeded",
51
+ "provider": "host-built-in-imagegen",
52
+ "hostAuditKey": "<stable preassigned key>",
53
+ "providerIdempotencyEnforced": false,
54
+ "promptSha256": "<SHA-256 of exact prompt>",
55
+ "reference": {
56
+ "id": "<id-1>",
57
+ "path": "<absolute reference path>",
58
+ "sha256": "<SHA-256 of reference bytes>"
59
+ },
60
+ "toolResult": {
61
+ "outputHint": "<exact returned non-byte field when present>",
62
+ "returnedMediaType": "image/png",
63
+ "returnedByteLength": 123,
64
+ "returnedSha256": "<SHA-256 replacing an inline image payload>"
65
+ },
66
+ "originalPath": "<absolute host-result path>",
67
+ "copiedPath": "<absolute candidate path>",
68
+ "copiedSha256": "<SHA-256 of copied candidate>",
69
+ "completedAt": "<ISO-8601 timestamp>"
70
+ }
71
+ ```
72
+
73
+ Preserve every serializable non-byte field returned by the built-in tool
74
+ exactly. Inline encoded image bytes may be replaced only by their media type,
75
+ byte length, and SHA-256. The copied digest must equal the candidate digest in
76
+ `selection.json`.
77
+
78
+ Include exactly four candidate objects and four corpus reference IDs in
79
+ endpoint order. Candidate A must contain only reference 1, B only reference 2,
80
+ C only reference 3, and D only reference 4. Copy the exact query,
81
+ `corpus.idempotencyKey`, and `corpus.setId` from the completed inspiration
82
+ manifest; none may be invented or replaced by an internal request identifier.
83
+ For each non-winner, `rejectionReasons` must contain at least one specific
84
+ visible reason judged against the intended viewport rather than eventual
85
+ below-fold content. The winner must have an empty `rejectionReasons` array.
86
+ Record provider and attempt evidence for auditability; do not store API keys or
87
+ other secrets. Set `providerIdempotencyEnforced` to `true` only when the
88
+ provider dispatch actually accepted the recorded key. When built-in imagegen
89
+ does not expose an idempotency or operation-ID field, use the preassigned host
90
+ audit key for `idempotencyKey`, set `providerIdempotencyEnforced` to `false`,
91
+ and use the built-in attempt shape above. For CLI-generated candidates, copy the
92
+ boolean from the CLI attempt file: OpenAI dispatches are provider-enforced,
93
+ while installed-Codex dispatches use the key only as a stable audit identity.
94
+ Do not imply provider guarantees that the selected path cannot enforce.
@@ -1,6 +1,8 @@
1
1
  interface:
2
- display_name: "12UI Design Convert"
3
- short_description: "Turn a finished design into structured output"
4
- default_prompt: "Use $design-convert to convert this finished interface image and integrate the result."
2
+ display_name: "Design Convert"
3
+ short_description: "Quickly turn any image into functioning code using 12ui design convert"
4
+ icon_small: "./assets/small-400px.png"
5
+ icon_large: "./assets/large-logo.svg"
6
+ default_prompt: "Use $design-convert to turn this screenshot our homepage."
5
7
  policy:
6
8
  allow_implicit_invocation: true
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024" version="1.1" role="img" aria-label="design-convert logo">
2
+ <path d="M 212.618 118.553 C 212.320 119.329, 269.828 177.414, 354.308 261.665 C 480.995 388.008, 596.565 503.592, 703.850 611.250 C 723.445 630.912, 740.198 647, 741.081 647 C 741.963 647, 760.357 629.113, 781.957 607.250 C 817.796 570.974, 830 557.760, 830 555.229 C 830 554.721, 830.900 553.268, 832 552 C 833.100 550.732, 834 548.889, 834 547.906 C 834 546.923, 834.395 545.874, 834.877 545.576 C 835.359 545.278, 836.990 541.154, 838.500 536.411 C 841.095 528.261, 841.219 527.012, 840.764 513.644 C 840.407 503.161, 839.859 498.723, 838.647 496.500 C 837.748 494.850, 837.010 492.783, 837.006 491.907 C 837.003 491.031, 835.881 488.331, 834.513 485.907 C 833.145 483.483, 831.460 480.375, 830.770 479 C 830.079 477.625, 829.171 476.050, 828.752 475.500 C 828.333 474.950, 826.080 471.993, 823.745 468.929 C 821.410 465.865, 759.798 403.540, 686.830 330.429 C 613.861 257.318, 542.534 185.800, 528.325 171.500 C 500.634 143.633, 495.476 138.814, 490.674 136.331 C 488.982 135.457, 486.981 134.124, 486.227 133.370 C 485.474 132.617, 484.362 132, 483.757 132 C 483.152 132, 481.947 131.415, 481.079 130.701 C 480.210 129.987, 477.025 128.358, 474 127.082 C 470.975 125.806, 467.375 124.199, 466 123.510 C 464.625 122.822, 461.700 121.944, 459.500 121.559 C 457.300 121.175, 453.475 120.143, 451 119.265 C 446.992 117.844, 433.742 117.647, 329.810 117.458 C 234.541 117.285, 213.027 117.486, 212.618 118.553 M 181.462 282.250 C 181.201 282.938, 181.103 389.438, 181.244 518.917 C 181.458 715.805, 181.722 754.407, 182.854 754.785 C 183.638 755.046, 192.280 747.084, 203.388 735.868 C 213.937 725.216, 263.953 674.802, 314.534 623.838 C 365.115 572.874, 409.833 527.793, 413.907 523.657 L 421.314 516.137 352.555 447.819 C 314.737 410.243, 261.517 357.337, 234.288 330.250 C 207.059 303.163, 184.141 281, 183.359 281 C 182.577 281, 181.724 281.563, 181.462 282.250 M 489.345 612.758 C 434.810 667.616, 346.160 756.752, 292.345 810.838 C 238.530 864.924, 194.110 909.865, 193.634 910.707 C 193.068 911.708, 193.241 912.543, 194.134 913.117 C 194.905 913.613, 250.122 913.887, 321 913.748 C 440.477 913.512, 446.836 913.409, 453.500 911.611 C 461.074 909.566, 466.774 907.611, 471.500 905.434 C 473.150 904.675, 475.625 903.588, 477 903.019 C 482.056 900.929, 490.662 895.645, 496.614 890.976 C 499.976 888.339, 554.089 834.894, 616.864 772.211 C 694.684 694.504, 731 657.584, 731 656.177 C 731 655.042, 730.212 653.501, 729.250 652.753 C 727.654 651.513, 690.616 614.192, 619.494 542.160 C 596.040 518.406, 590.318 512.968, 588.816 513.008 C 588.642 513.013, 543.880 557.901, 489.345 612.758" stroke="none" fill="#000" fill-rule="evenodd"/>
3
+ </svg>
@@ -12,20 +12,24 @@ metrics; do not invent a second ranking.
12
12
 
13
13
  ## Prepare the query
14
14
 
15
- Write a concise query file that describes:
15
+ Compose a concise query that describes:
16
16
 
17
17
  - product, audience, and user goal;
18
18
  - surface: UI, web, or mobile;
19
- - required content and interactions;
20
19
  - desired personality, visual energy, and useful contrasts; and
21
20
  - target viewport when known.
22
21
 
22
+ Describe the design problem rather than inventorying every section, control,
23
+ or exact string that the finished product will contain.
24
+
23
25
  Do not name brands to imitate or ask to copy logos, names, or text. Corpus
24
26
  images are inspiration rather than templates. Preserve the usage notice
25
27
  returned by the service.
26
28
 
27
- Verify the account with `12ui auth status`. Keep one CLI installation and one
28
- origin for the entire request and any resume.
29
+ Verify the account with `12ui auth status`. When a local development setup has
30
+ a separate Login origin, include its documented `--login-origin <origin>`.
31
+ Keep one CLI installation and one Login/Worker pair for the entire request and
32
+ any resume.
29
33
 
30
34
  ## Search
31
35
 
@@ -34,7 +38,7 @@ count instead of forcing four:
34
38
 
35
39
  ```bash
36
40
  12ui corpus inspire \
37
- --query-file <query.txt> \
41
+ --query "<concise interface concept>" \
38
42
  --out-dir <references-dir>
39
43
  ```
40
44
 
@@ -42,11 +46,15 @@ For an explicit count:
42
46
 
43
47
  ```bash
44
48
  12ui corpus inspire \
45
- --query-file <query.txt> \
49
+ --query "<concise interface concept>" \
46
50
  --count <requested-count> \
47
51
  --out-dir <references-dir>
48
52
  ```
49
53
 
54
+ Prefer direct `--query` invocation. Use `--query-file` only when a genuinely
55
+ long query or shell quoting makes it necessary; the CLI persists the exact
56
+ query in its attempt, evidence, and manifest.
57
+
50
58
  Add `--origin <origin>` only when targeting a specific verified deployment.
51
59
  Use `--wildness` only when the user or orchestrating workflow requests it. Do
52
60
  not add guessed filters that could turn a metered request into an empty set.
@@ -1,6 +1,8 @@
1
1
  interface:
2
- display_name: "12UI Design Search"
3
- short_description: "Find ranked, distinctive UI reference images"
4
- default_prompt: "Use $design-search to find diverse visual references for this interface concept."
2
+ display_name: "Design Search"
3
+ short_description: "Instantly find reference screenshots from the 12ui design corpus"
4
+ icon_small: "./assets/small-400px.png"
5
+ icon_large: "./assets/large-logo.svg"
6
+ default_prompt: "Run a $design-search to find homepage concepts."
5
7
  policy:
6
8
  allow_implicit_invocation: true
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024" version="1.1" role="img" aria-label="design-search logo">
2
+ <path d="M 409.500 119.671 C 394.686 120.262, 366.664 125.155, 350.500 129.975 C 331.931 135.511, 328.971 136.500, 324.669 138.611 C 323.112 139.375, 321.156 140, 320.323 140 C 319.490 140, 317.614 140.644, 316.154 141.431 C 314.694 142.219, 311.250 143.851, 308.500 145.058 C 301.781 148.009, 282.470 157.699, 277.500 160.614 C 275.300 161.904, 272.825 163.276, 272 163.662 C 271.175 164.049, 269.375 165.132, 268 166.070 C 266.625 167.008, 262.800 169.506, 259.500 171.621 C 256.200 173.736, 253.050 175.816, 252.500 176.243 C 251.950 176.670, 247.902 179.754, 243.505 183.097 C 239.108 186.439, 235.283 189.474, 235.005 189.841 C 234.727 190.208, 231.350 193.037, 227.500 196.129 C 219.093 202.879, 201.476 220.636, 192.904 231 C 189.492 235.125, 186.407 238.725, 186.047 239 C 184.854 239.912, 174.380 253.473, 173.689 255 C 173.316 255.825, 171.190 258.975, 168.965 262 C 166.740 265.025, 164.481 268.400, 163.945 269.500 C 163.409 270.600, 162.076 272.850, 160.983 274.500 C 159.890 276.150, 158.303 278.850, 157.457 280.500 C 156.611 282.150, 154.833 285.300, 153.507 287.500 C 152.181 289.700, 150.816 292.175, 150.476 293 C 150.135 293.825, 149.435 295.175, 148.921 296 C 148.408 296.825, 147.729 298.175, 147.413 299 C 147.097 299.825, 145.935 302.525, 144.831 305 C 143.728 307.475, 142.134 311.075, 141.290 313 C 140.446 314.925, 139.135 317.774, 138.378 319.331 C 137.620 320.888, 136.985 322.688, 136.966 323.331 C 136.947 323.974, 136.063 326.300, 135 328.500 C 133.937 330.700, 133.053 333.187, 133.034 334.027 C 133.015 334.868, 132.387 336.443, 131.637 337.527 C 130.888 338.612, 130.039 340.850, 129.752 342.500 C 129.464 344.150, 128.749 346.850, 128.164 348.500 C 125.302 356.561, 123 364.898, 123 367.198 C 123 368.605, 122.325 371.371, 121.500 373.346 C 120.675 375.320, 120 378.431, 120 380.258 C 120 382.085, 119.304 386.252, 118.454 389.517 C 117.603 392.783, 116.485 400.415, 115.968 406.477 C 115.452 412.540, 114.528 421.775, 113.916 427 C 112.688 437.480, 113.255 467.576, 114.924 480.500 C 115.492 484.900, 116.419 492.100, 116.985 496.500 C 119.097 512.935, 120.779 521.349, 125.178 537.500 C 129.064 551.764, 130.237 555.567, 131.602 558.331 C 132.371 559.888, 133 561.920, 133 562.846 C 133 563.772, 133.900 566.209, 135 568.261 C 136.100 570.314, 137 572.633, 137 573.415 C 137 574.198, 137.620 576.112, 138.378 577.669 C 139.725 580.438, 140.565 582.325, 144.974 592.500 C 146.166 595.250, 147.525 598.175, 147.993 599 C 148.462 599.825, 150.956 604.550, 153.536 609.500 C 156.116 614.450, 159.830 620.975, 161.789 624 C 173.813 642.568, 182.273 654.924, 184.940 657.812 C 186.623 659.633, 188 661.546, 188 662.062 C 188 662.578, 188.358 663, 188.795 663 C 189.231 663, 191.369 665.343, 193.545 668.206 C 200.173 676.930, 226.894 703.002, 238.699 712.264 C 244.823 717.069, 250.299 721, 250.867 721 C 251.436 721, 252.260 721.563, 252.700 722.250 C 253.544 723.569, 259.531 728, 260.470 728 C 260.773 728, 263.261 729.575, 266 731.500 C 268.739 733.425, 271.170 735, 271.402 735 C 271.635 735, 274.049 736.463, 276.767 738.250 C 281.767 741.538, 298.320 750.027, 307.500 754.010 C 310.250 755.204, 313.400 756.596, 314.500 757.105 C 315.600 757.614, 317.850 758.448, 319.500 758.958 C 321.150 759.469, 324.300 760.566, 326.500 761.396 C 338.785 766.033, 347.705 769, 349.358 769 C 350.388 769, 353.317 769.648, 355.866 770.441 C 360.756 771.962, 367.577 773.432, 377.500 775.103 C 380.800 775.659, 386.997 776.764, 391.270 777.557 C 400.769 779.321, 420.567 779.510, 421.595 777.847 C 421.986 777.213, 422.353 733.533, 422.409 680.781 C 422.499 596.105, 422.332 584.706, 420.989 583.490 C 420.152 582.733, 416.325 581.640, 412.484 581.063 C 397.776 578.851, 378.214 571.248, 366.760 563.292 C 364.153 561.482, 361.666 560, 361.232 560 C 360.799 560, 359.724 559.212, 358.843 558.250 C 357.962 557.288, 355.725 555.392, 353.871 554.038 C 347.950 549.714, 333.644 534.711, 329.250 528.218 C 326.913 524.763, 325 521.746, 325 521.513 C 325 521.280, 323.838 519.381, 322.417 517.294 C 320.997 515.207, 318.715 511.025, 317.347 508 C 315.979 504.975, 313.991 500.651, 312.929 498.390 C 311.868 496.130, 311 493.513, 311 492.575 C 311 491.636, 310.482 489.900, 309.848 488.716 C 308.595 486.375, 306.317 475.323, 304.958 465 C 303.894 456.910, 303.879 434.195, 304.934 427.500 C 306.860 415.275, 314.192 391.408, 316.832 388.768 C 317.474 388.126, 318 386.845, 318 385.922 C 318 385, 318.658 383.699, 319.461 383.032 C 320.265 382.365, 321.223 380.873, 321.590 379.716 C 321.957 378.559, 323.836 375.338, 325.765 372.556 C 337.650 355.424, 353.264 340.355, 368.500 331.313 C 372.272 329.074, 386.646 322, 387.422 322 C 387.849 322, 389.616 321.328, 391.349 320.507 C 396.031 318.288, 404.603 315.992, 412.500 314.841 C 416.350 314.280, 420.167 313.179, 420.981 312.394 C 422.267 311.155, 422.484 298.418, 422.628 215.963 C 422.786 124.818, 422.719 120.920, 420.962 119.980 C 419.955 119.441, 418.539 119.088, 417.816 119.196 C 417.092 119.304, 413.350 119.517, 409.500 119.671 M 452.942 120.217 C 451.038 120.922, 451 122.793, 451 216.019 L 451 311.102 454.426 312.534 C 456.311 313.321, 460.473 314.257, 463.676 314.614 C 466.879 314.972, 471.017 315.879, 472.872 316.632 C 474.727 317.384, 477.202 318.015, 478.372 318.034 C 479.542 318.053, 482.300 318.937, 484.500 320 C 486.700 321.063, 489.232 321.947, 490.128 321.966 C 491.023 321.985, 492.315 322.675, 493 323.500 C 493.685 324.325, 495.035 325, 496 325 C 496.965 325, 498.315 325.675, 499 326.500 C 499.685 327.325, 500.706 328, 501.269 328 C 502.826 328, 512.661 334.682, 520.500 341.065 C 529.035 348.015, 544.158 363.852, 546.428 368.216 C 546.795 368.922, 548.194 371.300, 549.536 373.500 C 550.878 375.700, 552.476 378.738, 553.086 380.250 C 553.696 381.762, 554.602 383, 555.098 383 C 555.594 383, 556 383.580, 556 384.289 C 556 384.997, 556.900 387.342, 558 389.500 C 559.100 391.658, 560 394.128, 560 394.989 C 560 395.850, 560.638 397.466, 561.417 398.579 C 562.197 399.692, 563.156 402.379, 563.548 404.551 C 563.940 406.723, 564.628 408.967, 565.077 409.539 C 565.527 410.110, 566.363 413.485, 566.935 417.039 C 567.508 420.592, 568.432 425.072, 568.988 426.993 C 570.612 432.602, 570.254 463.281, 568.475 470.936 C 566.200 480.724, 563.032 491.157, 561.424 494.154 C 560.641 495.614, 560 497.501, 560 498.347 C 560 499.193, 559.065 501.471, 557.922 503.408 C 556.645 505.572, 556.091 507.712, 556.486 508.957 C 557.022 510.645, 656.048 610.175, 659.019 612.012 C 659.553 612.342, 668.491 621.024, 678.883 631.306 C 689.275 641.588, 698.247 650, 698.821 650 C 700.009 650, 704.596 644.503, 711.341 635 C 722.299 619.560, 732.792 600.132, 743.477 575.500 C 747.155 567.021, 748.003 564.829, 748.034 563.716 C 748.053 563.047, 748.937 560.700, 750 558.500 C 751.063 556.300, 751.947 553.683, 751.966 552.684 C 751.985 551.686, 752.484 549.963, 753.077 548.857 C 754.683 545.855, 759.016 530.124, 761.163 519.500 C 761.719 516.750, 762.773 512.025, 763.506 509 C 764.238 505.975, 765.381 499, 766.045 493.500 C 766.710 488, 767.623 480.575, 768.075 477 C 769.246 467.745, 769.129 423.832, 767.912 415.500 C 767.350 411.650, 766.299 404, 765.577 398.500 C 764.855 393, 763.790 386.475, 763.209 384 C 762.629 381.525, 761.194 375.225, 760.021 370 C 757.846 360.314, 755.621 351.876, 753.826 346.500 C 753.275 344.850, 752.436 342.150, 751.961 340.500 C 750.232 334.491, 746.818 325.476, 745.920 324.550 C 745.414 324.027, 745 322.788, 745 321.796 C 745 320.804, 744.100 318.314, 743 316.261 C 741.900 314.209, 741 311.791, 741 310.887 C 741 309.984, 740.325 308.685, 739.500 308 C 738.675 307.315, 738 306.116, 738 305.335 C 738 304.554, 736.371 300.896, 734.379 297.207 C 724.927 279.697, 723.627 277.396, 722.359 275.921 C 721.611 275.053, 721 274.063, 721 273.721 C 721 273.110, 718.617 269.344, 710.733 257.500 C 701.667 243.878, 689.522 229.526, 673 212.908 C 656.147 195.958, 637.827 180.662, 623.500 171.580 C 620.200 169.488, 616.375 167.008, 615 166.070 C 613.625 165.132, 611.825 164.047, 611 163.658 C 610.175 163.270, 606.350 161.201, 602.500 159.061 C 594.447 154.586, 581.762 148.227, 574.500 145.025 C 571.750 143.812, 568.600 142.423, 567.500 141.937 C 563.962 140.375, 556.612 137.890, 552.539 136.879 C 550.361 136.338, 548.111 135.521, 547.539 135.063 C 546.968 134.605, 544.475 133.772, 542 133.210 C 539.525 132.649, 536.150 131.736, 534.500 131.181 C 524.420 127.792, 503.564 123, 498.894 123 C 497.113 123, 492.021 122.348, 487.578 121.551 C 478.686 119.955, 456.010 119.082, 452.942 120.217 M 535.766 535.234 C 533.438 538.788, 520.252 551.356, 513.500 556.457 C 510.200 558.950, 506.967 561.433, 506.315 561.973 C 502.980 564.742, 484.849 574, 482.762 574 C 482.013 574, 480.973 574.406, 480.450 574.903 C 479.245 576.049, 468.464 578.941, 460 580.388 C 456.425 581, 452.938 581.864, 452.250 582.309 C 451.275 582.940, 451 595.368, 451 638.878 L 451 694.638 460.250 703.557 C 465.337 708.462, 503.025 745.622, 544 786.135 C 584.975 826.647, 628.560 869.740, 640.855 881.897 C 653.151 894.054, 663.726 903.988, 664.355 903.974 C 664.985 903.960, 720.625 904.040, 788 904.153 C 906.606 904.351, 910.511 904.298, 910.857 902.502 C 911.113 901.176, 904.786 894.357, 888.652 878.573 C 876.243 866.433, 793.148 783.825, 703.997 695 C 596.999 588.393, 541.122 533.397, 539.601 533.198 C 538.072 532.997, 536.783 533.681, 535.766 535.234" stroke="none" fill="#000" fill-rule="evenodd"/>
3
+ </svg>