@12ui/design 0.2.7 → 0.2.9

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 (66) hide show
  1. package/README.md +29 -29
  2. package/dist/cli-corpus-command.d.ts.map +1 -1
  3. package/dist/cli-corpus-command.js +26 -35
  4. package/dist/cli-corpus-command.js.map +1 -1
  5. package/dist/cli-corpus-evidence.d.ts.map +1 -1
  6. package/dist/cli-corpus-evidence.js +34 -4
  7. package/dist/cli-corpus-evidence.js.map +1 -1
  8. package/dist/cli-corpus-reference-image.d.ts +13 -0
  9. package/dist/cli-corpus-reference-image.d.ts.map +1 -0
  10. package/dist/cli-corpus-reference-image.js +54 -0
  11. package/dist/cli-corpus-reference-image.js.map +1 -0
  12. package/dist/cli-corpus-run.d.ts +6 -0
  13. package/dist/cli-corpus-run.d.ts.map +1 -1
  14. package/dist/cli-corpus-run.js +15 -2
  15. package/dist/cli-corpus-run.js.map +1 -1
  16. package/dist/cli-corpus-types.d.ts +6 -1
  17. package/dist/cli-corpus-types.d.ts.map +1 -1
  18. package/dist/cli-corpus-types.js.map +1 -1
  19. package/dist/cli-image-batch-command.d.ts.map +1 -1
  20. package/dist/cli-image-batch-command.js +2 -1
  21. package/dist/cli-image-batch-command.js.map +1 -1
  22. package/dist/cli-image-command.d.ts.map +1 -1
  23. package/dist/cli-image-command.js +7 -1
  24. package/dist/cli-image-command.js.map +1 -1
  25. package/dist/cli-persistence.d.ts.map +1 -1
  26. package/dist/cli-persistence.js +8 -1
  27. package/dist/cli-persistence.js.map +1 -1
  28. package/dist/cli.js +2 -2
  29. package/dist/corpus-client.d.ts +15 -85
  30. package/dist/corpus-client.d.ts.map +1 -1
  31. package/dist/corpus-client.js +32 -10
  32. package/dist/corpus-client.js.map +1 -1
  33. package/dist/image-generation-batch-manifest.d.ts +2 -1
  34. package/dist/image-generation-batch-manifest.d.ts.map +1 -1
  35. package/dist/image-generation-batch-manifest.js +7 -1
  36. package/dist/image-generation-batch-manifest.js.map +1 -1
  37. package/dist/image-generation-error.d.ts +3 -0
  38. package/dist/image-generation-error.d.ts.map +1 -0
  39. package/dist/image-generation-error.js +30 -0
  40. package/dist/image-generation-error.js.map +1 -0
  41. package/dist/image-generation-evidence.d.ts +3 -1
  42. package/dist/image-generation-evidence.d.ts.map +1 -1
  43. package/dist/image-generation-evidence.js.map +1 -1
  44. package/dist/image-generation-request.d.ts +4 -0
  45. package/dist/image-generation-request.d.ts.map +1 -1
  46. package/dist/image-generation-request.js +3 -0
  47. package/dist/image-generation-request.js.map +1 -1
  48. package/dist/image-generation-run.d.ts.map +1 -1
  49. package/dist/image-generation-run.js +14 -4
  50. package/dist/image-generation-run.js.map +1 -1
  51. package/dist/image-generation-usage.d.ts +4 -0
  52. package/dist/image-generation-usage.d.ts.map +1 -1
  53. package/dist/image-generation-usage.js +37 -10
  54. package/dist/image-generation-usage.js.map +1 -1
  55. package/dist/index.d.ts +1 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +1 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  60. package/dist/legacy-skill-catalog.js +20 -0
  61. package/dist/legacy-skill-catalog.js.map +1 -1
  62. package/package.json +2 -2
  63. package/skills/design/SKILL.md +119 -20
  64. package/skills/design/references/continuation-contract.md +60 -0
  65. package/skills/design/references/selection-contract.md +49 -15
  66. package/skills/design-search/SKILL.md +42 -12
package/README.md CHANGED
@@ -55,6 +55,7 @@ manual recreation.
55
55
  12ui skill status --json
56
56
  12ui corpus inspire \
57
57
  --query "Editorial architecture homepage with warm materiality" \
58
+ --reference-image ./current-homepage.png \
58
59
  --out-dir ./references \
59
60
  --count 4
60
61
  12ui image generate-batch --manifest ./generation.json
@@ -88,12 +89,11 @@ request when a selected output, its asset directory, or
88
89
  required fields and `version: 1` constraint, beside the supported
89
90
  `projectProfiles` combinations.
90
91
 
91
- ## Design Corpus retrieval
92
+ ## Design Corpus inspiration
92
93
 
93
94
  `TwelveUiCorpusClient` uses an API key with the `design.corpus.retrieve` scope.
94
- Use `mode: 'record'` for product allocations so exposure history can prevent
95
- the same references from dominating later runs. Use `mode: 'ignore'` only for
96
- operator diagnostics and search inspection.
95
+ The API-key scope name is retained for compatibility even though `/inspire` is
96
+ the single SDK query surface.
97
97
 
98
98
  ```ts
99
99
  import { TwelveUiCorpusClient } from '@12ui/design';
@@ -104,30 +104,20 @@ const corpus = new TwelveUiCorpusClient({
104
104
  });
105
105
 
106
106
  const status = await corpus.status();
107
- const retrieved = await corpus.retrieve({
108
- scope: 'r-track',
109
- queries: [{
110
- id: 'home',
111
- brief: 'Editorial architecture home page',
112
- direction: 'warm materiality and asymmetric typography',
113
- targetCount: 6,
114
- }],
115
- context: {
116
- mode: 'record',
117
- purpose: 'run',
118
- exposureScope: 'project:example',
119
- allocationKey: 'example-home-v1',
120
- },
107
+ const inspiration = await corpus.inspire({
108
+ q: 'Editorial architecture home page with warm materiality and asymmetric typography',
109
+ mode: 'balanced',
110
+ k: 4,
111
+ }, {
112
+ idempotencyKey: 'example-home-v1',
121
113
  });
122
114
 
123
- const first = retrieved.allocations[0]!.results[0]!;
124
- const metadata = await corpus.reference(first.referenceId);
125
- const image = await corpus.download(first.referenceId, 'ref');
115
+ const first = inspiration.items[0]!;
116
+ const metadata = await corpus.reference(first.id);
117
+ const image = await corpus.download(first.id, 'ref');
126
118
  ```
127
119
 
128
- The client sends the allocation key as the idempotency key. The API also
129
- supports `logo-track`, batched queries, exclusions, preselected references, and
130
- minimum quality thresholds. See
120
+ Every paid inspiration request requires a stable idempotency key. See
131
121
  [`docs/corpus-v1.openapi.yaml`](https://github.com/just-every/12ui/blob/main/docs/corpus-v1.openapi.yaml).
132
122
 
133
123
  For agent workflows that need four fresh, budget-metered inspiration images,
@@ -138,11 +128,22 @@ parallel, verifies each WebP, and writes a content-hashed manifest:
138
128
  node "$TWELVE_UI_REPO/packages/12ui/dist/cli.js" corpus inspire \
139
129
  --query "Editorial architecture home page with warm materiality and asymmetric type" \
140
130
  --count 4 \
141
- --wildness 0.6 \
131
+ --mode balanced \
142
132
  --idempotency-key design-run:home-v1 \
143
133
  --out-dir ./references
144
134
  ```
145
135
 
136
+ `balanced` is the recommended default. `direct` stays close to the literal
137
+ query, while `adventurer` follows its most distinctive directions toward less
138
+ expected references. The modes are locked server-side; callers cannot tune
139
+ their internal ranking weights.
140
+
141
+ For a redesign, add `--reference-image <png|jpeg|webp>`. The CLI hashes the
142
+ private source into stable idempotency and local evidence, while Design Corpus
143
+ uses one aggregated image-and-text embedding to retrieve visually relevant
144
+ directions. The source bytes are forwarded ephemerally and are not persisted
145
+ by 12UI.
146
+
146
147
  The output directory must not already exist. Before dispatch, the CLI writes
147
148
  `inspire-attempt.json` with the exact request and stable idempotency key. A
148
149
  successful run also contains `manifest.json`, `inspire-evidence.json` with the
@@ -163,10 +164,9 @@ dispatches a second embedding for that identity. Reusing a key with a different
163
164
  validated request returns `409 idempotency_conflict`. A reference already on
164
165
  disk is accepted only when its bytes match its exclusive digest receipt.
165
166
 
166
- The CLI deliberately does not accept a free-form `--kind`: an unverified value
167
- can consume the metered request while producing an empty set. Use the SDK's
168
- `filters.kind` only when an integration has obtained and verified the exact
169
- corpus kind value.
167
+ The CLI and SDK deliberately expose only the three locked inspiration modes.
168
+ Free-form ranking weights, random seeds, and corpus filters are not part of the
169
+ public inspiration contract.
170
170
 
171
171
  ## Multi-page packages
172
172
 
@@ -1 +1 @@
1
- {"version":3,"file":"cli-corpus-command.d.ts","sourceRoot":"","sources":["../src/cli-corpus-command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAK/D,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,KAAK,yBAAyB,GAAG;IAC/B,UAAU,EAAE,OAAO,oBAAoB,CAAC;IACxC,YAAY,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,KAAK,iBAAiB,CAAC;CACtF,CAAC;AAoDF,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,MAAM,GAAG,SAAS,EAC1B,OAAO,QAAQ,EACf,eAAc,yBAGb,KACA,OAAO,CAAC,IAAI,CA+Dd,CAAC"}
1
+ {"version":3,"file":"cli-corpus-command.d.ts","sourceRoot":"","sources":["../src/cli-corpus-command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAK/D,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,KAAK,yBAAyB,GAAG;IAC/B,UAAU,EAAE,OAAO,oBAAoB,CAAC;IACxC,YAAY,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,KAAK,iBAAiB,CAAC;CACtF,CAAC;AA8BF,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,MAAM,GAAG,SAAS,EAC1B,OAAO,QAAQ,EACf,eAAc,yBAGb,KACA,OAAO,CAAC,IAAI,CA4Ed,CAAC"}
@@ -3,8 +3,9 @@ import path from 'node:path';
3
3
  import { stringFlag } from './cli-arguments.js';
4
4
  import { downloadCorpusInspiration, resumeCorpusInspiration, } from './cli-corpus-run.js';
5
5
  import { INSPIRATION_MANIFEST_FILE, } from './cli-corpus-types.js';
6
- import { TwelveUiCorpusClient, } from './corpus-client.js';
6
+ import { INSPIRATION_MODES, TwelveUiCorpusClient, } from './corpus-client.js';
7
7
  import { readConversionConfig } from './config.js';
8
+ import { loadCorpusReferenceImage } from './cli-corpus-reference-image.js';
8
9
  export { downloadCorpusInspiration, resumeCorpusInspiration, } from './cli-corpus-run.js';
9
10
  export { CORPUS_USAGE_NOTICE, } from './cli-corpus-types.js';
10
11
  const positiveInteger = (value, fallback, name) => {
@@ -16,30 +17,13 @@ const positiveInteger = (value, fallback, name) => {
16
17
  }
17
18
  return parsed;
18
19
  };
19
- const boundedNumber = (value, fallback, name, minimum, maximum) => {
20
+ const inspirationMode = (value) => {
20
21
  if (value === undefined)
21
- return fallback;
22
- const parsed = Number(value);
23
- if (!Number.isFinite(parsed) || parsed < minimum || parsed > maximum) {
24
- throw new Error(`--${name} must be between ${minimum} and ${maximum}`);
25
- }
26
- return parsed;
27
- };
28
- const optionalSeed = (value) => {
29
- if (value === undefined)
30
- return undefined;
31
- const parsed = Number(value);
32
- if (!Number.isSafeInteger(parsed) || parsed < 0 || parsed > 0xffff_ffff) {
33
- throw new Error('--seed must be an integer between 0 and 4294967295');
34
- }
35
- return parsed;
36
- };
37
- const optionalAspect = (value) => {
38
- if (value === undefined)
39
- return undefined;
40
- if (value === 'portrait' || value === 'landscape' || value === 'square')
22
+ return 'balanced';
23
+ if (INSPIRATION_MODES.includes(value)) {
41
24
  return value;
42
- throw new Error('--aspect must be one of: landscape, square, portrait');
25
+ }
26
+ throw new Error(`--mode must be one of: ${INSPIRATION_MODES.join(', ')}`);
43
27
  };
44
28
  const readQuery = async (flags) => {
45
29
  const query = stringFlag(flags, 'query')?.trim();
@@ -58,14 +42,20 @@ export const runCorpusCommand = async (action, flags, dependencies = {
58
42
  }) => {
59
43
  if (action !== 'inspire' && action !== 'resume') {
60
44
  throw new Error('Usage: 12ui corpus inspire --query <text>|--query-file <file>'
61
- + ' --out-dir <directory> [--count <1-48>] [--wildness <0-0.6>]'
62
- + ' [--seed <integer>] [--aspect landscape|square|portrait]'
45
+ + ' --out-dir <directory> [--mode direct|balanced|adventurer]'
46
+ + ' [--count <1-48>]'
47
+ + ' [--reference-image <png|jpeg|webp>]'
63
48
  + ' [--idempotency-key <key>]'
64
49
  + '\n 12ui corpus resume --out-dir <directory>');
65
50
  }
66
51
  if (action === 'inspire' && stringFlag(flags, 'kind') !== undefined) {
67
- throw new Error('--kind is not supported by the corpus CLI because unverified values can produce an'
68
- + ' empty metered set. Use the SDK only when the exact corpus kind is verified.');
52
+ throw new Error('--kind was removed. Use --mode direct, balanced, or adventurer.');
53
+ }
54
+ if (action === 'inspire'
55
+ && (stringFlag(flags, 'wildness') !== undefined
56
+ || stringFlag(flags, 'seed') !== undefined
57
+ || stringFlag(flags, 'aspect') !== undefined)) {
58
+ throw new Error('--wildness, --seed, and --aspect were removed. Use --mode direct, balanced, or adventurer.');
69
59
  }
70
60
  const outDir = stringFlag(flags, 'out-dir')?.trim();
71
61
  if (!outDir)
@@ -79,6 +69,7 @@ export const runCorpusCommand = async (action, flags, dependencies = {
79
69
  const manifest = await resumeCorpusInspiration({ client, outDir, origin: config.origin });
80
70
  console.log(JSON.stringify({
81
71
  setId: manifest.response.setId,
72
+ mode: manifest.response.mode,
82
73
  seed: manifest.response.seed,
83
74
  outDir: path.resolve(outDir),
84
75
  manifest: path.join(path.resolve(outDir), INSPIRATION_MANIFEST_FILE),
@@ -89,28 +80,28 @@ export const runCorpusCommand = async (action, flags, dependencies = {
89
80
  const count = positiveInteger(stringFlag(flags, 'count'), 4, 'count');
90
81
  if (count > 48)
91
82
  throw new Error('--count must be at most 48');
92
- const wildness = boundedNumber(stringFlag(flags, 'wildness'), 0.6, 'wildness', 0, 0.6);
93
- const seed = optionalSeed(stringFlag(flags, 'seed'));
94
- const aspect = optionalAspect(stringFlag(flags, 'aspect'));
83
+ const mode = inspirationMode(stringFlag(flags, 'mode'));
95
84
  const query = await readQuery(flags);
96
85
  const request = {
97
86
  q: query,
87
+ mode,
98
88
  k: count,
99
- tau: wildness,
100
- ...(aspect ? { filters: {
101
- ...(aspect ? { aspect } : {}),
102
- } } : {}),
103
- ...(seed !== undefined ? { seed } : {}),
104
89
  };
90
+ const referenceImagePath = stringFlag(flags, 'reference-image')?.trim();
91
+ const referenceImage = referenceImagePath
92
+ ? await loadCorpusReferenceImage(referenceImagePath)
93
+ : undefined;
105
94
  const manifest = await downloadCorpusInspiration({
106
95
  client,
107
96
  request,
108
97
  outDir,
109
98
  origin: config.origin,
110
99
  idempotencyKey: stringFlag(flags, 'idempotency-key'),
100
+ ...(referenceImage ? { referenceImage } : {}),
111
101
  });
112
102
  console.log(JSON.stringify({
113
103
  setId: manifest.response.setId,
104
+ mode: manifest.response.mode,
114
105
  seed: manifest.response.seed,
115
106
  outDir: path.resolve(outDir),
116
107
  manifest: path.join(path.resolve(outDir), INSPIRATION_MANIFEST_FILE),
@@ -1 +1 @@
1
- {"version":3,"file":"cli-corpus-command.js","sourceRoot":"","sources":["../src/cli-corpus-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-corpus-command.js","sourceRoot":"","sources":["../src/cli-corpus-command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli-corpus-evidence.d.ts","sourceRoot":"","sources":["../src/cli-corpus-evidence.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AA4F/B,eAAO,MAAM,sBAAsB,GACjC,UAAU,yBAAyB,EACnC,QAAQ,MAAM,KACb,IAmBF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,MAAM,EACd,SAAS,wBAAwB,KAChC,OAAO,CAAC,IAAI,CAMd,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,KACb,OAAO,CAAC,wBAAwB,CAKlC,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,MAAM,EACd,UAAU,yBAAyB,KAClC,OAAO,CAAC,IAAI,CAMd,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,MAAM,KACb,OAAO,CAAC,yBAAyB,CAKnC,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAC1C,QAAQ,MAAM,KACb,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAO1C,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,SAAS,wBAAwB,EACjC,UAAU,yBAAyB,KAClC,IAIF,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAOjF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM;IACnD,OAAO,EAAE,wBAAwB,CAAC;IAClC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,KAAG,OAAO,CAAC,yBAAyB,CA2BpC,CAAC"}
1
+ {"version":3,"file":"cli-corpus-evidence.d.ts","sourceRoot":"","sources":["../src/cli-corpus-evidence.ts"],"names":[],"mappings":"AAKA,OAAO,EAKL,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AA2H/B,eAAO,MAAM,sBAAsB,GACjC,UAAU,yBAAyB,EACnC,QAAQ,MAAM,KACb,IA0BF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,MAAM,EACd,SAAS,wBAAwB,KAChC,OAAO,CAAC,IAAI,CAMd,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,KACb,OAAO,CAAC,wBAAwB,CAKlC,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,MAAM,EACd,UAAU,yBAAyB,KAClC,OAAO,CAAC,IAAI,CAMd,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,MAAM,KACb,OAAO,CAAC,yBAAyB,CAKnC,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAC1C,QAAQ,MAAM,KACb,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAO1C,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,SAAS,wBAAwB,EACjC,UAAU,yBAAyB,KAClC,IAOF,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAOjF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM;IACnD,OAAO,EAAE,wBAAwB,CAAC;IAClC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,KAAG,OAAO,CAAC,yBAAyB,CA6BpC,CAAC"}
@@ -1,15 +1,27 @@
1
1
  import { readFile, writeFile } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
+ import { INSPIRATION_MODES } from './corpus-client.js';
3
4
  import { CORPUS_USAGE_NOTICE, INSPIRATION_ATTEMPT_FILE, INSPIRATION_EVIDENCE_FILE, INSPIRATION_MANIFEST_FILE, } from './cli-corpus-types.js';
4
5
  const isRecord = (value) => (typeof value === 'object' && value !== null && !Array.isArray(value));
5
6
  const isErrno = (error, code) => (error instanceof Error && 'code' in error && error.code === code);
6
7
  const isCorpusAspect = (value) => (value === 'portrait' || value === 'landscape' || value === 'square');
8
+ const isInspirationMode = (value) => (INSPIRATION_MODES.includes(value));
7
9
  const validInspirationRequest = (request) => (typeof request.q === 'string'
8
10
  && Boolean(request.q.trim())
11
+ && (request.mode === undefined || isInspirationMode(request.mode))
9
12
  && (request.k === undefined
10
13
  || (typeof request.k === 'number'
11
14
  && Number.isSafeInteger(request.k)
12
15
  && request.k >= 1)));
16
+ const validReferenceImageEvidence = (value) => (value === undefined || (isRecord(value)
17
+ && typeof value.sourcePath === 'string'
18
+ && path.isAbsolute(value.sourcePath)
19
+ && (value.mediaType === 'image/png' || value.mediaType === 'image/jpeg' || value.mediaType === 'image/webp')
20
+ && typeof value.sha256 === 'string'
21
+ && /^[a-f0-9]{64}$/u.test(value.sha256)
22
+ && typeof value.bytes === 'number'
23
+ && Number.isSafeInteger(value.bytes)
24
+ && value.bytes > 0));
13
25
  const parseInspirationAttempt = (value) => {
14
26
  if (!isRecord(value)
15
27
  || value.version !== 1
@@ -22,13 +34,18 @@ const parseInspirationAttempt = (value) => {
22
34
  || value.idempotencyKey.length > 128
23
35
  || /[\u0000-\u001f\u007f]/u.test(value.idempotencyKey)
24
36
  || !isRecord(value.request)
25
- || !validInspirationRequest(value.request)) {
37
+ || !validInspirationRequest(value.request)
38
+ || !validReferenceImageEvidence(value.referenceImage)) {
26
39
  throw new Error('Corpus inspiration attempt evidence is invalid');
27
40
  }
28
41
  return value;
29
42
  };
30
43
  const parseInspirationEvidence = (value) => {
31
- if (!isRecord(value) || value.version !== 1 || !isRecord(value.request) || !isRecord(value.response)) {
44
+ if (!isRecord(value)
45
+ || value.version !== 1
46
+ || !isRecord(value.request)
47
+ || !isRecord(value.response)
48
+ || !validReferenceImageEvidence(value.referenceImage)) {
32
49
  throw new Error('Corpus inspiration evidence is invalid');
33
50
  }
34
51
  const request = value.request;
@@ -38,6 +55,7 @@ const parseInspirationEvidence = (value) => {
38
55
  }
39
56
  if (typeof response.setId !== 'string'
40
57
  || typeof response.query !== 'string'
58
+ || !isInspirationMode(response.mode)
41
59
  || typeof response.seed !== 'number'
42
60
  || !Number.isSafeInteger(response.seed)
43
61
  || typeof response.k !== 'number'
@@ -47,7 +65,9 @@ const parseInspirationEvidence = (value) => {
47
65
  || typeof response.coverage !== 'number'
48
66
  || !Number.isFinite(response.coverage)
49
67
  || typeof response.truncated !== 'boolean'
50
- || response.weightsSource !== 'default:owner-elite12'
68
+ || (response.designType !== undefined
69
+ && response.designType !== null
70
+ && !isRecord(response.designType))
51
71
  || !Array.isArray(response.items)) {
52
72
  throw new Error('Corpus inspiration response evidence is invalid');
53
73
  }
@@ -70,7 +90,12 @@ const parseInspirationEvidence = (value) => {
70
90
  };
71
91
  export const validateInspirationSet = (evidence, outDir) => {
72
92
  const expectedCount = evidence.request.k ?? 24;
93
+ const expectedMode = evidence.request.mode ?? 'balanced';
73
94
  const { response } = evidence;
95
+ if (response.mode !== expectedMode) {
96
+ throw new Error(`Corpus inspiration response ran ${response.mode} but request expected ${expectedMode};`
97
+ + ` evidence is in ${outDir}`);
98
+ }
74
99
  if (response.k !== expectedCount) {
75
100
  throw new Error(`Corpus inspiration response expected ${response.k} references but request expected`
76
101
  + ` ${expectedCount}; evidence is in ${outDir}`);
@@ -112,6 +137,9 @@ export const assertAttemptMatchesEvidence = (attempt, evidence) => {
112
137
  if (JSON.stringify(attempt.request) !== JSON.stringify(evidence.request)) {
113
138
  throw new Error('Corpus inspiration attempt and response evidence requests do not match');
114
139
  }
140
+ if (JSON.stringify(attempt.referenceImage) !== JSON.stringify(evidence.referenceImage)) {
141
+ throw new Error('Corpus inspiration attempt and response evidence source images do not match');
142
+ }
115
143
  };
116
144
  export const assertInspirationRunIncomplete = async (outDir) => {
117
145
  try {
@@ -132,15 +160,17 @@ export const writeInspirationManifest = async (args) => {
132
160
  idempotencyKey: args.attempt.idempotencyKey,
133
161
  notice: CORPUS_USAGE_NOTICE,
134
162
  request,
163
+ ...(args.evidence.referenceImage ? { referenceImage: args.evidence.referenceImage } : {}),
135
164
  response: {
136
165
  setId: response.setId,
137
166
  query: response.query,
167
+ mode: response.mode,
138
168
  seed: response.seed,
139
169
  k: response.k,
140
170
  poolSize: response.poolSize,
141
171
  coverage: response.coverage,
142
172
  truncated: response.truncated,
143
- weightsSource: response.weightsSource,
173
+ ...(response.designType !== undefined ? { designType: response.designType } : {}),
144
174
  },
145
175
  references: args.references,
146
176
  };
@@ -1 +1 @@
1
- {"version":3,"file":"cli-corpus-evidence.js","sourceRoot":"","sources":["../src/cli-corpus-evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-corpus-evidence.js","sourceRoot":"","sources":["../src/cli-corpus-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type CorpusReferenceImageInput, type CorpusReferenceImageMediaType } from './corpus-client.js';
2
+ export type CorpusReferenceImageEvidence = {
3
+ sourcePath: string;
4
+ mediaType: CorpusReferenceImageMediaType;
5
+ sha256: string;
6
+ bytes: number;
7
+ };
8
+ export declare const loadCorpusReferenceImage: (source: string, expected?: CorpusReferenceImageEvidence) => Promise<{
9
+ evidence: CorpusReferenceImageEvidence;
10
+ input: CorpusReferenceImageInput;
11
+ }>;
12
+ export declare const stableReferenceImageIdempotencyKey: (request: unknown, referenceImage: CorpusReferenceImageEvidence) => string;
13
+ //# sourceMappingURL=cli-corpus-reference-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-corpus-reference-image.d.ts","sourceRoot":"","sources":["../src/cli-corpus-reference-image.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EACnC,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,6BAA6B,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAyBF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,MAAM,EACd,WAAW,4BAA4B,KACtC,OAAO,CAAC;IAAE,QAAQ,EAAE,4BAA4B,CAAC;IAAC,KAAK,EAAE,yBAAyB,CAAA;CAAE,CAkBtF,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAC7C,SAAS,OAAO,EAChB,gBAAgB,4BAA4B,KAC3C,MASF,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFile, stat } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { MAX_CORPUS_REFERENCE_IMAGE_BYTES, } from './corpus-client.js';
5
+ const mediaTypeFor = (bytes) => {
6
+ if (bytes.length >= 8
7
+ && bytes[0] === 0x89
8
+ && bytes[1] === 0x50
9
+ && bytes[2] === 0x4e
10
+ && bytes[3] === 0x47
11
+ && bytes[4] === 0x0d
12
+ && bytes[5] === 0x0a
13
+ && bytes[6] === 0x1a
14
+ && bytes[7] === 0x0a)
15
+ return 'image/png';
16
+ if (bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) {
17
+ return 'image/jpeg';
18
+ }
19
+ if (bytes.length >= 12
20
+ && String.fromCharCode(...bytes.subarray(0, 4)) === 'RIFF'
21
+ && String.fromCharCode(...bytes.subarray(8, 12)) === 'WEBP')
22
+ return 'image/webp';
23
+ return null;
24
+ };
25
+ export const loadCorpusReferenceImage = async (source, expected) => {
26
+ const sourcePath = path.resolve(source);
27
+ const file = await stat(sourcePath);
28
+ if (!file.isFile())
29
+ throw new Error('--reference-image must identify a regular file');
30
+ if (file.size < 1 || file.size > MAX_CORPUS_REFERENCE_IMAGE_BYTES) {
31
+ throw new Error(`--reference-image must be between 1 and ${MAX_CORPUS_REFERENCE_IMAGE_BYTES} bytes`);
32
+ }
33
+ const bytes = new Uint8Array(await readFile(sourcePath));
34
+ const mediaType = mediaTypeFor(bytes);
35
+ if (!mediaType)
36
+ throw new Error('--reference-image must be a valid PNG, JPEG, or WebP file');
37
+ const sha256 = createHash('sha256').update(bytes).digest('hex');
38
+ const evidence = { sourcePath, mediaType, sha256, bytes: bytes.byteLength };
39
+ if (expected && JSON.stringify(evidence) !== JSON.stringify(expected)) {
40
+ throw new Error('The redesign source changed since the corpus attempt was recorded');
41
+ }
42
+ return { evidence, input: { bytes, mediaType, sha256 } };
43
+ };
44
+ export const stableReferenceImageIdempotencyKey = (request, referenceImage) => {
45
+ const digest = createHash('sha256')
46
+ .update(JSON.stringify({ request, referenceImage: {
47
+ mediaType: referenceImage.mediaType,
48
+ sha256: referenceImage.sha256,
49
+ bytes: referenceImage.bytes,
50
+ } }))
51
+ .digest('hex');
52
+ return `corpus-inspire:image:${digest}`;
53
+ };
54
+ //# sourceMappingURL=cli-corpus-reference-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-corpus-reference-image.js","sourceRoot":"","sources":["../src/cli-corpus-reference-image.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,17 @@
1
1
  import type { CorpusInspirationRequest } from './corpus-client.js';
2
2
  import type { CorpusInspirationManifest, InspirationClient } from './cli-corpus-types.js';
3
+ import { type CorpusReferenceImageEvidence } from './cli-corpus-reference-image.js';
4
+ import type { CorpusReferenceImageInput } from './corpus-client.js';
3
5
  export declare const downloadCorpusInspiration: (args: {
4
6
  client: InspirationClient;
5
7
  request: CorpusInspirationRequest;
6
8
  outDir: string;
7
9
  origin: string;
8
10
  idempotencyKey?: string;
11
+ referenceImage?: {
12
+ evidence: CorpusReferenceImageEvidence;
13
+ input: CorpusReferenceImageInput;
14
+ };
9
15
  now?: () => Date;
10
16
  }) => Promise<CorpusInspirationManifest>;
11
17
  export declare const resumeCorpusInspiration: (args: {
@@ -1 +1 @@
1
- {"version":3,"file":"cli-corpus-run.d.ts","sourceRoot":"","sources":["../src/cli-corpus-run.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,wBAAwB,EAEzB,MAAM,oBAAoB,CAAC;AAa5B,OAAO,KAAK,EAEV,yBAAyB,EAEzB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAG/B,eAAO,MAAM,yBAAyB,GAAU,MAAM;IACpD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,KAAG,OAAO,CAAC,yBAAyB,CAmDpC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,MAAM;IAClD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,KAAG,OAAO,CAAC,yBAAyB,CA+CpC,CAAC"}
1
+ {"version":3,"file":"cli-corpus-run.d.ts","sourceRoot":"","sources":["../src/cli-corpus-run.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,wBAAwB,EAEzB,MAAM,oBAAoB,CAAC;AAa5B,OAAO,KAAK,EAEV,yBAAyB,EAEzB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,eAAO,MAAM,yBAAyB,GAAU,MAAM;IACpD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE;QACf,QAAQ,EAAE,4BAA4B,CAAC;QACvC,KAAK,EAAE,yBAAyB,CAAC;KAClC,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,KAAG,OAAO,CAAC,yBAAyB,CA0DpC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,MAAM;IAClD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,KAAG,OAAO,CAAC,yBAAyB,CAoDpC,CAAC"}
@@ -5,6 +5,7 @@ import { CORPUS_QUERY_IDEMPOTENCY_REVISION } from './corpus-client.js';
5
5
  import { assertAttemptMatchesEvidence, assertInspirationRunIncomplete, readInspirationAttempt, readOptionalInspirationEvidence, validateInspirationSet, writeInspirationAttempt, writeInspirationEvidence, writeInspirationManifest, } from './cli-corpus-evidence.js';
6
6
  import { completeReferenceDownloads } from './cli-corpus-reference-downloads.js';
7
7
  import { normalizeOptionalIdempotencyKey } from './idempotency-key.js';
8
+ import { loadCorpusReferenceImage, stableReferenceImageIdempotencyKey, } from './cli-corpus-reference-image.js';
8
9
  export const downloadCorpusInspiration = async (args) => {
9
10
  const outDir = path.resolve(args.outDir);
10
11
  const origin = new URL(args.origin).origin;
@@ -15,7 +16,9 @@ export const downloadCorpusInspiration = async (args) => {
15
16
  }
16
17
  await mkdir(path.dirname(outDir), { recursive: true });
17
18
  await mkdir(outDir);
18
- const idempotencyKey = normalizeOptionalIdempotencyKey(args.idempotencyKey ?? `corpus-inspire:${randomUUID()}`, 'idempotencyKey');
19
+ const idempotencyKey = normalizeOptionalIdempotencyKey(args.idempotencyKey ?? (args.referenceImage
20
+ ? stableReferenceImageIdempotencyKey(args.request, args.referenceImage.evidence)
21
+ : `corpus-inspire:${randomUUID()}`), 'idempotencyKey');
19
22
  if (!idempotencyKey)
20
23
  throw new TypeError('idempotencyKey is required');
21
24
  const attempt = {
@@ -24,11 +27,15 @@ export const downloadCorpusInspiration = async (args) => {
24
27
  origin,
25
28
  idempotencyKey,
26
29
  request: args.request,
30
+ ...(args.referenceImage ? { referenceImage: args.referenceImage.evidence } : {}),
27
31
  };
28
32
  await writeInspirationAttempt(outDir, attempt);
29
33
  let response;
30
34
  try {
31
- response = await args.client.inspire(args.request, { idempotencyKey });
35
+ response = await args.client.inspire(args.request, {
36
+ idempotencyKey,
37
+ ...(args.referenceImage ? { referenceImage: args.referenceImage.input } : {}),
38
+ });
32
39
  }
33
40
  catch (error) {
34
41
  throw new Error(`Corpus inspiration response is ambiguous; the stable attempt is in ${outDir}.`
@@ -37,6 +44,7 @@ export const downloadCorpusInspiration = async (args) => {
37
44
  const evidence = {
38
45
  version: 1,
39
46
  request: args.request,
47
+ ...(args.referenceImage ? { referenceImage: args.referenceImage.evidence } : {}),
40
48
  response,
41
49
  };
42
50
  await writeInspirationEvidence(outDir, evidence);
@@ -64,10 +72,14 @@ export const resumeCorpusInspiration = async (args) => {
64
72
  }
65
73
  let evidence = await readOptionalInspirationEvidence(outDir);
66
74
  if (!evidence) {
75
+ const referenceImage = attempt.referenceImage
76
+ ? await loadCorpusReferenceImage(attempt.referenceImage.sourcePath, attempt.referenceImage)
77
+ : undefined;
67
78
  let response;
68
79
  try {
69
80
  response = await args.client.inspire(attempt.request, {
70
81
  idempotencyKey: attempt.idempotencyKey,
82
+ ...(referenceImage ? { referenceImage: referenceImage.input } : {}),
71
83
  });
72
84
  }
73
85
  catch (error) {
@@ -77,6 +89,7 @@ export const resumeCorpusInspiration = async (args) => {
77
89
  evidence = {
78
90
  version: 1,
79
91
  request: attempt.request,
92
+ ...(attempt.referenceImage ? { referenceImage: attempt.referenceImage } : {}),
80
93
  response,
81
94
  };
82
95
  await writeInspirationEvidence(outDir, evidence);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-corpus-run.js","sourceRoot":"","sources":["../src/cli-corpus-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,OAAO,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAOjF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAAE,IAO/C,EAAsC,EAAE;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1C,IAAI,MAAM,CAAC,wBAAwB,KAAK,iCAAiC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CACb,kBAAkB,MAAM,qBAAqB,iCAAiC,GAAG;cAC/E,iCAAiC,CACpC,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;IAEpB,MAAM,cAAc,GAAG,+BAA+B,CACpD,IAAI,CAAC,cAAc,IAAI,kBAAkB,UAAU,EAAE,EAAE,EACvD,gBAAgB,CACjB,CAAC;IACF,IAAI,CAAC,cAAc;QAAE,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACvE,MAAM,OAAO,GAA6B;QACxC,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE;QAC3D,MAAM;QACN,cAAc;QACd,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;IACF,MAAM,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/C,IAAI,QAAmC,CAAC;IACxC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,sEAAsE,MAAM,GAAG;cAC7E,8CAA8C,MAAM,aAAa,MAAM,IAAI,EAC7E,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAA8B;QAC1C,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ;KACT,CAAC;IACF,MAAM,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,MAAM,0BAA0B,CAAC;QAClD,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ;QACR,MAAM;QACN,MAAM;KACP,CAAC,CAAC;IACH,OAAO,MAAM,wBAAwB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAAE,IAK7C,EAAsC,EAAE;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1C,IAAI,MAAM,CAAC,wBAAwB,KAAK,iCAAiC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CACb,kBAAkB,MAAM,qBAAqB,iCAAiC,GAAG;cAC/E,yBAAyB,CAC5B,CAAC;IACJ,CAAC;IACD,MAAM,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,yCAAyC,OAAO,CAAC,MAAM,6BAA6B,MAAM,EAAE,CAC7F,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,GAAG,MAAM,+BAA+B,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,QAAmC,CAAC;QACxC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE;gBACpD,cAAc,EAAE,OAAO,CAAC,cAAc;aACvC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,sDAAsD;kBACpD,kCAAkC,MAAM,aAAa,MAAM,IAAI,EACjE,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;QACJ,CAAC;QACD,QAAQ,GAAG;YACT,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ;SACT,CAAC;QACF,MAAM,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IACD,4BAA4B,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,MAAM,0BAA0B,CAAC;QAClD,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ;QACR,MAAM;QACN,MAAM;KACP,CAAC,CAAC;IACH,OAAO,MAAM,wBAAwB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAClG,CAAC,CAAC"}
1
+ {"version":3,"file":"cli-corpus-run.js","sourceRoot":"","sources":["../src/cli-corpus-run.ts"],"names":[],"mappings":"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"}