@12ui/design 0.2.5 → 0.2.7
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 +12 -17
- package/dist/cli-corpus-reference-downloads.d.ts.map +1 -1
- package/dist/cli-corpus-reference-downloads.js +4 -0
- package/dist/cli-corpus-reference-downloads.js.map +1 -1
- package/dist/cli-corpus-types.d.ts +4 -0
- package/dist/cli-corpus-types.d.ts.map +1 -1
- package/dist/cli-image-batch-command.d.ts +8 -0
- package/dist/cli-image-batch-command.d.ts.map +1 -0
- package/dist/cli-image-batch-command.js +127 -0
- package/dist/cli-image-batch-command.js.map +1 -0
- package/dist/cli-image-command.d.ts.map +1 -1
- package/dist/cli-image-command.js +17 -111
- package/dist/cli-image-command.js.map +1 -1
- package/dist/cli-persistence.d.ts +3 -0
- package/dist/cli-persistence.d.ts.map +1 -1
- package/dist/cli-persistence.js +66 -3
- package/dist/cli-persistence.js.map +1 -1
- package/dist/cli-skill-command.d.ts.map +1 -1
- package/dist/cli-skill-command.js +5 -0
- package/dist/cli-skill-command.js.map +1 -1
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/client-auth-guidance.d.ts +3 -0
- package/dist/client-auth-guidance.d.ts.map +1 -0
- package/dist/client-auth-guidance.js +14 -0
- package/dist/client-auth-guidance.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/conversion-client.d.ts.map +1 -1
- package/dist/conversion-client.js +2 -1
- package/dist/conversion-client.js.map +1 -1
- package/dist/corpus-client.d.ts.map +1 -1
- package/dist/corpus-client.js +2 -1
- package/dist/corpus-client.js.map +1 -1
- package/dist/image-generation-batch-manifest.d.ts +24 -0
- package/dist/image-generation-batch-manifest.d.ts.map +1 -0
- package/dist/image-generation-batch-manifest.js +91 -0
- package/dist/image-generation-batch-manifest.js.map +1 -0
- package/dist/image-generation-evidence.d.ts +9 -1
- package/dist/image-generation-evidence.d.ts.map +1 -1
- package/dist/image-generation-evidence.js.map +1 -1
- package/dist/image-generation-request.d.ts +29 -0
- package/dist/image-generation-request.d.ts.map +1 -0
- package/dist/image-generation-request.js +46 -0
- package/dist/image-generation-request.js.map +1 -0
- package/dist/image-generation-run.d.ts +35 -0
- package/dist/image-generation-run.d.ts.map +1 -0
- package/dist/image-generation-run.js +134 -0
- package/dist/image-generation-run.js.map +1 -0
- package/dist/image-generation-usage.d.ts +71 -0
- package/dist/image-generation-usage.d.ts.map +1 -0
- package/dist/image-generation-usage.js +192 -0
- package/dist/image-generation-usage.js.map +1 -0
- package/dist/legacy-cli-cleanup.d.ts +1 -0
- package/dist/legacy-cli-cleanup.d.ts.map +1 -1
- package/dist/legacy-cli-cleanup.js +12 -0
- package/dist/legacy-cli-cleanup.js.map +1 -1
- package/dist/legacy-npm-global-cli-cleanup.d.ts +16 -0
- package/dist/legacy-npm-global-cli-cleanup.d.ts.map +1 -0
- package/dist/legacy-npm-global-cli-cleanup.js +102 -0
- package/dist/legacy-npm-global-cli-cleanup.js.map +1 -0
- package/dist/legacy-npm-global-cli-recognition.d.ts +12 -0
- package/dist/legacy-npm-global-cli-recognition.d.ts.map +1 -0
- package/dist/legacy-npm-global-cli-recognition.js +105 -0
- package/dist/legacy-npm-global-cli-recognition.js.map +1 -0
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +23 -2
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/package.json +1 -1
- package/skills/design/SKILL.md +108 -205
- package/skills/design/references/selection-contract.md +43 -75
- package/skills/design-convert/SKILL.md +47 -97
- package/skills/design-search/SKILL.md +26 -60
package/README.md
CHANGED
|
@@ -53,19 +53,11 @@ manual recreation.
|
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
55
|
12ui skill status --json
|
|
56
|
-
12ui auth status
|
|
57
56
|
12ui corpus inspire \
|
|
58
57
|
--query "Editorial architecture homepage with warm materiality" \
|
|
59
58
|
--out-dir ./references \
|
|
60
59
|
--count 4
|
|
61
|
-
12ui image generate
|
|
62
|
-
--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." \
|
|
63
|
-
--reference ./references/01.webp \
|
|
64
|
-
--out ./candidate-1.png \
|
|
65
|
-
--aspect landscape \
|
|
66
|
-
--project-root . \
|
|
67
|
-
--provider auto \
|
|
68
|
-
--idempotency-key product-candidate-1
|
|
60
|
+
12ui image generate-batch --manifest ./generation.json
|
|
69
61
|
12ui export <base-layerdoc-conversion-id> \
|
|
70
62
|
--output html,pdf,psd,pptx,sketch,web_project \
|
|
71
63
|
--out-dir ./exports \
|
|
@@ -73,14 +65,17 @@ manual recreation.
|
|
|
73
65
|
--idempotency-key product-exports-v1
|
|
74
66
|
```
|
|
75
67
|
|
|
76
|
-
`image generate`
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
68
|
+
`image generate-batch` accepts 2-16 manifest jobs, preflights one provider,
|
|
69
|
+
reserves every attempt before dispatch, starts all provider calls concurrently,
|
|
70
|
+
and waits for the complete batch. Each job has one prompt, one reference, one
|
|
71
|
+
PNG output, and one stable idempotency key. Per-candidate and batch evidence
|
|
72
|
+
records provider-start and completion times. It never retries a candidate or
|
|
73
|
+
switches providers after dispatch.
|
|
74
|
+
|
|
75
|
+
The single-candidate `image generate` command remains available. Both commands
|
|
76
|
+
resolve authenticated Codex first, then `OPENAI_API_KEY` from the process or
|
|
77
|
+
exactly `<project-root>/.env`. They refuse a Git-tracked `.env`, never store or
|
|
78
|
+
print the key, and always write PNG bytes.
|
|
84
79
|
|
|
85
80
|
`export` downloads one successful base LayerDoc once and dispatches the chosen
|
|
86
81
|
formats in parallel. Project exports require exact web/native profiles; image
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-corpus-reference-downloads.d.ts","sourceRoot":"","sources":["../src/cli-corpus-reference-downloads.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-corpus-reference-downloads.d.ts","sourceRoot":"","sources":["../src/cli-corpus-reference-downloads.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAuH/B,eAAO,MAAM,0BAA0B,GAAU,MAAM;IACrD,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,yBAAyB,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,OAAO,CAAC,yBAAyB,EAAE,CA4CtC,CAAC"}
|
|
@@ -36,7 +36,11 @@ const referenceFromBytes = async (args) => {
|
|
|
36
36
|
id: args.item.id,
|
|
37
37
|
role: args.item.role,
|
|
38
38
|
arm: args.item.arm,
|
|
39
|
+
cell: args.item.cell,
|
|
39
40
|
aspect: args.item.aspect,
|
|
41
|
+
relevance: args.item.relevance,
|
|
42
|
+
relevancePercentile: args.item.relevancePercentile,
|
|
43
|
+
qualityPercentile: args.item.qualityPercentile,
|
|
40
44
|
file: args.file,
|
|
41
45
|
sha256: sha256(args.bytes),
|
|
42
46
|
bytes: args.bytes.byteLength,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-corpus-reference-downloads.js","sourceRoot":"","sources":["../src/cli-corpus-reference-downloads.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-corpus-reference-downloads.js","sourceRoot":"","sources":["../src/cli-corpus-reference-downloads.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,11 @@ export type DownloadedCorpusReference = {
|
|
|
23
23
|
id: string;
|
|
24
24
|
role: 'core' | 'stretch';
|
|
25
25
|
arm: string;
|
|
26
|
+
cell: string | null;
|
|
26
27
|
aspect: CorpusAspect;
|
|
28
|
+
relevance: number;
|
|
29
|
+
relevancePercentile: number;
|
|
30
|
+
qualityPercentile: number;
|
|
27
31
|
file: string;
|
|
28
32
|
sha256: string;
|
|
29
33
|
bytes: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-corpus-types.d.ts","sourceRoot":"","sources":["../src/cli-corpus-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,mBAAmB,iFACgD,CAAC;AAEjF,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AACjE,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAC/D,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AACzD,eAAO,MAAM,2BAA2B,wBAAwB,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AAC9F,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,wBAAwB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,wBAAwB,CAAC;IAClC,QAAQ,EAAE,yBAAyB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,mBAAmB,CAAC;IACnC,OAAO,EAAE,wBAAwB,CAAC;IAClC,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;KAC3D,CAAC;IACF,UAAU,EAAE,yBAAyB,EAAE,CAAC;CACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli-corpus-types.d.ts","sourceRoot":"","sources":["../src/cli-corpus-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,mBAAmB,iFACgD,CAAC;AAEjF,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AACjE,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAC/D,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AACzD,eAAO,MAAM,2BAA2B,wBAAwB,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AAC9F,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,wBAAwB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,wBAAwB,CAAC;IAClC,QAAQ,EAAE,yBAAyB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,mBAAmB,CAAC;IACnC,OAAO,EAAE,wBAAwB,CAAC;IAClC,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;KAC3D,CAAC;IACF,UAAU,EAAE,yBAAyB,EAAE,CAAC;CACzC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ensembleImage } from '@just-every/ensemble';
|
|
2
|
+
import { type CliFlags } from './cli-arguments.js';
|
|
3
|
+
import { preflightImageProvider } from './image-provider-preflight.js';
|
|
4
|
+
export declare const runImageBatchCommand: (flags: CliFlags, dependencies?: {
|
|
5
|
+
generate?: typeof ensembleImage;
|
|
6
|
+
preflight?: typeof preflightImageProvider;
|
|
7
|
+
}) => Promise<void>;
|
|
8
|
+
//# sourceMappingURL=cli-image-batch-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-image-batch-command.d.ts","sourceRoot":"","sources":["../src/cli-image-batch-command.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAsB/D,OAAO,EACL,sBAAsB,EAEvB,MAAM,+BAA+B,CAAC;AA2DvC,eAAO,MAAM,oBAAoB,GAC/B,OAAO,QAAQ,EACf,eAAc;IACZ,QAAQ,CAAC,EAAE,OAAO,aAAa,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,sBAAsB,CAAC;CACtC,KACL,OAAO,CAAC,IAAI,CAgHd,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { mkdir, rename, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { stringFlag } from './cli-arguments.js';
|
|
5
|
+
import { readImageGenerationBatchManifest, resolveImageGenerationBatchRequests, } from './image-generation-batch-manifest.js';
|
|
6
|
+
import { dispatchImageGeneration, failImageGenerationBeforeDispatch, markImageGenerationDispatched, reserveImageGeneration, } from './image-generation-run.js';
|
|
7
|
+
import { imageGenerationPathExists, imageGenerationSha256, prepareImageGenerationRequest, } from './image-generation-request.js';
|
|
8
|
+
import { summarizeImageGenerationUsage, } from './image-generation-usage.js';
|
|
9
|
+
import { preflightImageProvider, } from './image-provider-preflight.js';
|
|
10
|
+
const writeBatchAttempt = async (file, attempt, exclusive = false) => {
|
|
11
|
+
await mkdir(path.dirname(file), { recursive: true });
|
|
12
|
+
if (exclusive) {
|
|
13
|
+
await writeFile(file, `${JSON.stringify(attempt, null, 2)}\n`, {
|
|
14
|
+
encoding: 'utf8',
|
|
15
|
+
flag: 'wx',
|
|
16
|
+
mode: 0o600,
|
|
17
|
+
});
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const temporary = `${file}.${randomUUID()}.tmp`;
|
|
21
|
+
try {
|
|
22
|
+
await writeFile(temporary, `${JSON.stringify(attempt, null, 2)}\n`, {
|
|
23
|
+
encoding: 'utf8',
|
|
24
|
+
flag: 'wx',
|
|
25
|
+
mode: 0o600,
|
|
26
|
+
});
|
|
27
|
+
await rename(temporary, file);
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
await rm(temporary, { force: true });
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const errorMessage = (error) => (error instanceof Error ? error.message : String(error));
|
|
34
|
+
const failReserved = async (reserved, message) => {
|
|
35
|
+
await Promise.allSettled(reserved.map((item) => failImageGenerationBeforeDispatch(item, message)));
|
|
36
|
+
};
|
|
37
|
+
export const runImageBatchCommand = async (flags, dependencies = {}) => {
|
|
38
|
+
const manifestFlag = stringFlag(flags, 'manifest')?.trim();
|
|
39
|
+
if (!manifestFlag) {
|
|
40
|
+
throw new Error('Usage: 12ui image generate-batch --manifest <batch.json>');
|
|
41
|
+
}
|
|
42
|
+
const manifestPath = path.resolve(manifestFlag);
|
|
43
|
+
const batchAttemptFile = `${manifestPath}.attempt.json`;
|
|
44
|
+
if (await imageGenerationPathExists(batchAttemptFile)) {
|
|
45
|
+
throw new Error(`Image batch attempt evidence already exists at ${batchAttemptFile}`);
|
|
46
|
+
}
|
|
47
|
+
const { manifest, source } = await readImageGenerationBatchManifest(manifestPath);
|
|
48
|
+
const requests = resolveImageGenerationBatchRequests({ manifest, manifestPath });
|
|
49
|
+
const prepared = await Promise.all(requests.map(prepareImageGenerationRequest));
|
|
50
|
+
const preflight = await (dependencies.preflight ?? preflightImageProvider)({
|
|
51
|
+
provider: manifest.provider,
|
|
52
|
+
projectRoot: prepared[0].projectRoot,
|
|
53
|
+
});
|
|
54
|
+
const manifestSha256 = imageGenerationSha256(source);
|
|
55
|
+
const attempt = {
|
|
56
|
+
version: 1,
|
|
57
|
+
status: 'prepared',
|
|
58
|
+
manifestPath,
|
|
59
|
+
manifestSha256,
|
|
60
|
+
projectRoot: prepared[0].projectRoot,
|
|
61
|
+
requestedProvider: manifest.provider,
|
|
62
|
+
provider: preflight.provider,
|
|
63
|
+
model: preflight.model,
|
|
64
|
+
candidateIds: prepared.map((item) => item.candidateId),
|
|
65
|
+
candidateAttemptFiles: prepared.map((item) => item.attemptFile),
|
|
66
|
+
preparedAt: new Date().toISOString(),
|
|
67
|
+
};
|
|
68
|
+
await writeBatchAttempt(batchAttemptFile, attempt, true);
|
|
69
|
+
const reservations = await Promise.allSettled(prepared.map((request) => (reserveImageGeneration({
|
|
70
|
+
request,
|
|
71
|
+
preflight,
|
|
72
|
+
batch: {
|
|
73
|
+
candidateId: request.candidateId,
|
|
74
|
+
manifestPath,
|
|
75
|
+
manifestSha256,
|
|
76
|
+
},
|
|
77
|
+
}))));
|
|
78
|
+
const reserved = reservations.flatMap((result) => (result.status === 'fulfilled' ? [result.value] : []));
|
|
79
|
+
const reservationErrors = reservations.flatMap((result) => (result.status === 'rejected' ? [errorMessage(result.reason)] : []));
|
|
80
|
+
if (reservationErrors.length > 0) {
|
|
81
|
+
const message = 'Batch reservation failed before any provider request was started';
|
|
82
|
+
await failReserved(reserved, message);
|
|
83
|
+
attempt.status = 'failed';
|
|
84
|
+
attempt.completedAt = new Date().toISOString();
|
|
85
|
+
attempt.errors = reservationErrors;
|
|
86
|
+
await writeBatchAttempt(batchAttemptFile, attempt);
|
|
87
|
+
throw new AggregateError(reservationErrors, `${message}. Evidence: ${batchAttemptFile}`);
|
|
88
|
+
}
|
|
89
|
+
attempt.status = 'dispatched';
|
|
90
|
+
attempt.dispatchedAt = new Date().toISOString();
|
|
91
|
+
await writeBatchAttempt(batchAttemptFile, attempt);
|
|
92
|
+
const marked = await Promise.allSettled(reserved.map((item) => markImageGenerationDispatched(item)));
|
|
93
|
+
const markErrors = marked.flatMap((result) => (result.status === 'rejected' ? [errorMessage(result.reason)] : []));
|
|
94
|
+
if (markErrors.length > 0) {
|
|
95
|
+
const message = 'Batch evidence preparation failed before any provider request was started';
|
|
96
|
+
await failReserved(reserved, message);
|
|
97
|
+
attempt.status = 'failed';
|
|
98
|
+
attempt.completedAt = new Date().toISOString();
|
|
99
|
+
attempt.errors = markErrors;
|
|
100
|
+
await writeBatchAttempt(batchAttemptFile, attempt);
|
|
101
|
+
throw new AggregateError(markErrors, `${message}. Evidence: ${batchAttemptFile}`);
|
|
102
|
+
}
|
|
103
|
+
const settled = await Promise.allSettled(reserved.map((item) => (dispatchImageGeneration(item, { generate: dependencies.generate }))));
|
|
104
|
+
const results = settled.flatMap((result) => (result.status === 'fulfilled' ? [result.value] : []));
|
|
105
|
+
const errors = settled.flatMap((result) => (result.status === 'rejected' ? [errorMessage(result.reason)] : []));
|
|
106
|
+
attempt.completedAt = new Date().toISOString();
|
|
107
|
+
attempt.results = results;
|
|
108
|
+
attempt.accounting = summarizeImageGenerationUsage(reserved.map((item) => item.attempt.usage), preflight.provider);
|
|
109
|
+
if (errors.length > 0) {
|
|
110
|
+
attempt.status = 'failed';
|
|
111
|
+
attempt.errors = errors;
|
|
112
|
+
await writeBatchAttempt(batchAttemptFile, attempt);
|
|
113
|
+
throw new AggregateError(errors, `Image batch finished with ${errors.length} failed candidate(s); no retries or provider`
|
|
114
|
+
+ ` fallback were attempted. Evidence: ${batchAttemptFile}`);
|
|
115
|
+
}
|
|
116
|
+
attempt.status = 'succeeded';
|
|
117
|
+
await writeBatchAttempt(batchAttemptFile, attempt);
|
|
118
|
+
console.log(JSON.stringify({
|
|
119
|
+
provider: attempt.provider,
|
|
120
|
+
model: attempt.model,
|
|
121
|
+
manifestPath,
|
|
122
|
+
batchAttemptFile,
|
|
123
|
+
accounting: attempt.accounting,
|
|
124
|
+
candidates: results,
|
|
125
|
+
}, null, 2));
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=cli-image-batch-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-image-batch-command.js","sourceRoot":"","sources":["../src/cli-image-batch-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-image-command.d.ts","sourceRoot":"","sources":["../src/cli-image-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-image-command.d.ts","sourceRoot":"","sources":["../src/cli-image-command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAc/D,OAAO,EAGL,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAoCvC,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,CAkDd,CAAC"}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { lstat, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
3
2
|
import path from 'node:path';
|
|
4
|
-
import { ensembleImage } from '@just-every/ensemble';
|
|
5
|
-
import { OpenAIProvider } from '@just-every/ensemble/model_providers/openai';
|
|
6
3
|
import { stringFlag } from './cli-arguments.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
4
|
+
import { dispatchImageGeneration, markImageGenerationDispatched, reserveImageGeneration, } from './image-generation-run.js';
|
|
5
|
+
import { IMAGE_GENERATION_ASPECTS, isImageGenerationAspect, prepareImageGenerationRequest, } from './image-generation-request.js';
|
|
9
6
|
import { IMAGE_GENERATION_PROVIDERS, isImageGenerationProvider, preflightImageProvider, } from './image-provider-preflight.js';
|
|
10
7
|
import { normalizeOptionalIdempotencyKey } from './idempotency-key.js';
|
|
11
|
-
const IMAGE_GENERATION_ASPECTS = ['landscape', 'portrait', 'square'];
|
|
12
|
-
const isImageGenerationAspect = (value) => (IMAGE_GENERATION_ASPECTS.includes(value));
|
|
13
|
-
const sha256 = (value) => (createHash('sha256').update(value).digest('hex'));
|
|
14
8
|
const referenceFlag = (flags) => {
|
|
15
9
|
const numbered = ['reference-1', 'reference-2', 'reference-3', 'reference-4']
|
|
16
10
|
.filter((name) => stringFlag(flags, name) !== undefined);
|
|
@@ -40,17 +34,6 @@ const promptInput = async (flags) => {
|
|
|
40
34
|
throw new Error('--prompt-file must not be empty');
|
|
41
35
|
return { prompt, source: { kind: 'file', path: promptPath } };
|
|
42
36
|
};
|
|
43
|
-
const pathExists = async (target) => {
|
|
44
|
-
try {
|
|
45
|
-
await lstat(target);
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
if (error.code === 'ENOENT')
|
|
50
|
-
return false;
|
|
51
|
-
throw error;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
37
|
export const runImageCommand = async (action, flags, dependencies = {}) => {
|
|
55
38
|
if (action !== 'generate') {
|
|
56
39
|
throw new Error('Usage: 12ui image generate --prompt <text>|--prompt-file <file>'
|
|
@@ -70,15 +53,6 @@ export const runImageCommand = async (action, flags, dependencies = {}) => {
|
|
|
70
53
|
if (path.extname(outputPath).toLowerCase() !== '.png') {
|
|
71
54
|
throw new Error('--out must end in .png because image generate always writes PNG bytes');
|
|
72
55
|
}
|
|
73
|
-
const attemptFile = imageAttemptPath(outputPath);
|
|
74
|
-
if (await pathExists(outputPath)) {
|
|
75
|
-
throw new Error(`Refusing to dispatch because output already exists at ${outputPath}`);
|
|
76
|
-
}
|
|
77
|
-
if (await pathExists(attemptFile)) {
|
|
78
|
-
throw new Error(`Image attempt evidence already exists at ${attemptFile}. Refusing to redispatch an`
|
|
79
|
-
+ ' ambiguous or completed request; inspect it and use a new output/idempotency key.');
|
|
80
|
-
}
|
|
81
|
-
await mkdir(path.dirname(outputPath), { recursive: true });
|
|
82
56
|
const providerValue = stringFlag(flags, 'provider') ?? 'auto';
|
|
83
57
|
if (!isImageGenerationProvider(providerValue)) {
|
|
84
58
|
throw new Error(`--provider must be one of: ${IMAGE_GENERATION_PROVIDERS.join(', ')}`);
|
|
@@ -90,91 +64,23 @@ export const runImageCommand = async (action, flags, dependencies = {}) => {
|
|
|
90
64
|
const idempotencyKey = normalizeOptionalIdempotencyKey(stringFlag(flags, 'idempotency-key'), '--idempotency-key');
|
|
91
65
|
if (!idempotencyKey)
|
|
92
66
|
throw new Error('--idempotency-key is required');
|
|
93
|
-
const
|
|
94
|
-
const reference = {
|
|
95
|
-
path: referencePath,
|
|
96
|
-
sha256: sha256(referenceBytes),
|
|
97
|
-
dataUrl: await referenceImageDataUrl(referenceBytes, referencePath),
|
|
98
|
-
};
|
|
99
|
-
const preflight = await (dependencies.preflight ?? preflightImageProvider)({
|
|
100
|
-
provider: providerValue,
|
|
101
|
-
projectRoot,
|
|
102
|
-
});
|
|
103
|
-
const attempt = {
|
|
104
|
-
schemaVersion: 2,
|
|
105
|
-
status: 'prepared',
|
|
106
|
-
idempotencyKey,
|
|
107
|
-
provider: preflight.provider,
|
|
108
|
-
model: preflight.model,
|
|
109
|
-
providerIdempotencyEnforced: preflight.provider === 'openai',
|
|
110
|
-
providerEvidence: preflight.provider === 'codex'
|
|
111
|
-
? { codexVersion: preflight.codexVersion }
|
|
112
|
-
: { keySource: preflight.keySource },
|
|
67
|
+
const request = await prepareImageGenerationRequest({
|
|
113
68
|
prompt,
|
|
114
69
|
promptSource,
|
|
115
|
-
|
|
116
|
-
reference: { path: reference.path, sha256: reference.sha256 },
|
|
70
|
+
referencePath,
|
|
117
71
|
outputPath,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
throw new Error(`Image attempt evidence already exists at ${attemptFile}. Refusing to redispatch an`
|
|
123
|
-
+ ' ambiguous or completed request; inspect it and use a new output/idempotency key.');
|
|
124
|
-
}
|
|
125
|
-
throw error;
|
|
72
|
+
projectRoot,
|
|
73
|
+
provider: providerValue,
|
|
74
|
+
aspect: aspectValue,
|
|
75
|
+
idempotencyKey,
|
|
126
76
|
});
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
retryOptions: { maxRetries: 0 },
|
|
136
|
-
};
|
|
137
|
-
const options = {
|
|
138
|
-
n: 1,
|
|
139
|
-
size: aspectValue,
|
|
140
|
-
quality: 'high',
|
|
141
|
-
source_images: [reference.dataUrl],
|
|
142
|
-
...(preflight.provider === 'codex'
|
|
143
|
-
? { input_fidelity: 'high' }
|
|
144
|
-
: {}),
|
|
145
|
-
output_format: 'png',
|
|
146
|
-
idempotency_key: idempotencyKey,
|
|
147
|
-
request_id: idempotencyKey,
|
|
148
|
-
};
|
|
149
|
-
const generated = dependencies.generate
|
|
150
|
-
? await dependencies.generate(prompt, agent, options)
|
|
151
|
-
: preflight.provider === 'openai'
|
|
152
|
-
? await new OpenAIProvider(preflight.apiKey).createImage(prompt, preflight.model, agent, options)
|
|
153
|
-
: await ensembleImage(prompt, agent, options);
|
|
154
|
-
if (!Array.isArray(generated) || generated.length !== 1 || typeof generated[0] !== 'string') {
|
|
155
|
-
throw new Error('Image provider did not return exactly one image');
|
|
156
|
-
}
|
|
157
|
-
const bytes = await generatedPngBytes(generated[0]);
|
|
158
|
-
await writeFile(outputPath, bytes, { flag: 'wx' });
|
|
159
|
-
attempt.status = 'succeeded';
|
|
160
|
-
attempt.completedAt = new Date().toISOString();
|
|
161
|
-
attempt.outputSha256 = sha256(bytes);
|
|
162
|
-
await writeImageGenerationAttempt(attemptFile, attempt);
|
|
163
|
-
console.log(JSON.stringify({
|
|
164
|
-
provider: attempt.provider,
|
|
165
|
-
model: attempt.model,
|
|
166
|
-
outputPath,
|
|
167
|
-
outputSha256: attempt.outputSha256,
|
|
168
|
-
attemptFile,
|
|
169
|
-
}, null, 2));
|
|
170
|
-
}
|
|
171
|
-
catch (error) {
|
|
172
|
-
attempt.status = 'failed';
|
|
173
|
-
attempt.completedAt = new Date().toISOString();
|
|
174
|
-
attempt.error = error instanceof Error ? error.message : String(error);
|
|
175
|
-
await writeImageGenerationAttempt(attemptFile, attempt);
|
|
176
|
-
throw new Error(`Image generation failed after dispatch with ${attempt.provider}; no provider fallback`
|
|
177
|
-
+ ` was attempted. Evidence: ${attemptFile}. ${attempt.error}`, { cause: error });
|
|
178
|
-
}
|
|
77
|
+
const preflight = await (dependencies.preflight ?? preflightImageProvider)({
|
|
78
|
+
provider: providerValue,
|
|
79
|
+
projectRoot,
|
|
80
|
+
});
|
|
81
|
+
const reserved = await reserveImageGeneration({ request, preflight });
|
|
82
|
+
await markImageGenerationDispatched(reserved);
|
|
83
|
+
const result = await dispatchImageGeneration(reserved, { generate: dependencies.generate });
|
|
84
|
+
console.log(JSON.stringify(result, null, 2));
|
|
179
85
|
};
|
|
180
86
|
//# sourceMappingURL=cli-image-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-image-command.js","sourceRoot":"","sources":["../src/cli-image-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli-image-command.js","sourceRoot":"","sources":["../src/cli-image-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { retireRecognizedLegacyCli, type RetiredLegacyCli } from './legacy-cli-cleanup.js';
|
|
2
|
+
import { retireRecognizedNpmGlobalLegacyCli, type RetiredLegacyNpmGlobalCli } from './legacy-npm-global-cli-cleanup.js';
|
|
2
3
|
type NpmInstallInvocation = {
|
|
3
4
|
executable: 'npm' | 'npm.cmd';
|
|
4
5
|
arguments: string[];
|
|
@@ -16,6 +17,7 @@ export type CliPersistenceResult = {
|
|
|
16
17
|
dataRoot: string;
|
|
17
18
|
launcher: string;
|
|
18
19
|
retiredLegacyCli?: RetiredLegacyCli;
|
|
20
|
+
retiredLegacyNpmGlobalCli?: RetiredLegacyNpmGlobalCli;
|
|
19
21
|
};
|
|
20
22
|
export declare const resolveCliInstallLayout: (environment?: NodeJS.ProcessEnv, homeDirectory?: string, platform?: NodeJS.Platform) => {
|
|
21
23
|
dataRoot: string;
|
|
@@ -28,6 +30,7 @@ export declare const persistCurrentCli: (args?: {
|
|
|
28
30
|
runNpmInstall?: NpmInstallRunner;
|
|
29
31
|
runLauncherCheck?: LauncherCheckRunner;
|
|
30
32
|
retireLegacyCli?: typeof retireRecognizedLegacyCli;
|
|
33
|
+
retireNpmGlobalLegacyCli?: typeof retireRecognizedNpmGlobalLegacyCli;
|
|
31
34
|
}) => Promise<CliPersistenceResult>;
|
|
32
35
|
export declare const runningPackageRoot: () => string;
|
|
33
36
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-persistence.d.ts","sourceRoot":"","sources":["../src/cli-persistence.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,yBAAyB,
|
|
1
|
+
{"version":3,"file":"cli-persistence.d.ts","sourceRoot":"","sources":["../src/cli-persistence.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,yBAAyB,EAEzB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kCAAkC,EAElC,KAAK,yBAAyB,EAC/B,MAAM,oCAAoC,CAAC;AAI5C,KAAK,oBAAoB,GAAG;IAC1B,UAAU,EAAE,KAAK,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;CAChC,CAAC;AAEF,KAAK,gBAAgB,GAAG,CAAC,UAAU,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5E,KAAK,mBAAmB,GAAG,CAAC,IAAI,EAAE;IAChC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAmCpB,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;CACvD,CAAC;AAsLF,eAAO,MAAM,uBAAuB,GAClC,cAAa,MAAM,CAAC,UAAwB,EAC5C,sBAA4B,EAC5B,WAAU,MAAM,CAAC,QAA2B,KAC3C;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAuBlB,CAAC;AA2DF,eAAO,MAAM,iBAAiB,GAAU,OAAM;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACvC,eAAe,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACnD,wBAAwB,CAAC,EAAE,OAAO,kCAAkC,CAAC;CACjE,KAAG,OAAO,CAAC,oBAAoB,CAwMpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,MAErC,CAAC"}
|
package/dist/cli-persistence.js
CHANGED
|
@@ -5,7 +5,8 @@ import os from 'node:os';
|
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import { fileURLToPath } from 'node:url';
|
|
7
7
|
import { promisify } from 'node:util';
|
|
8
|
-
import { retireRecognizedLegacyCli, } from './legacy-cli-cleanup.js';
|
|
8
|
+
import { retireRecognizedLegacyCli, restoreRetiredLegacyCli, } from './legacy-cli-cleanup.js';
|
|
9
|
+
import { retireRecognizedNpmGlobalLegacyCli, restoreRetiredNpmGlobalLegacyCli, } from './legacy-npm-global-cli-cleanup.js';
|
|
9
10
|
const execFileAsync = promisify(execFile);
|
|
10
11
|
const runNpmInstall = async (invocation) => {
|
|
11
12
|
await execFileAsync(invocation.executable, invocation.arguments, {
|
|
@@ -177,6 +178,45 @@ export const resolveCliInstallLayout = (environment = process.env, homeDirectory
|
|
|
177
178
|
launcher: path.join(homeDirectory, '.local', 'bin', '12ui'),
|
|
178
179
|
};
|
|
179
180
|
};
|
|
181
|
+
const retireLegacyCliInstallations = async (args) => {
|
|
182
|
+
const retirements = await Promise.allSettled([
|
|
183
|
+
(args.retireLegacyCli ?? retireRecognizedLegacyCli)({
|
|
184
|
+
dataRoot: args.dataRoot,
|
|
185
|
+
homeDirectory: args.homeDirectory,
|
|
186
|
+
}),
|
|
187
|
+
args.platform === 'win32'
|
|
188
|
+
? Promise.resolve(null)
|
|
189
|
+
: (args.retireNpmGlobalLegacyCli ?? retireRecognizedNpmGlobalLegacyCli)({
|
|
190
|
+
dataRoot: args.dataRoot,
|
|
191
|
+
homeDirectory: args.homeDirectory,
|
|
192
|
+
}),
|
|
193
|
+
]);
|
|
194
|
+
const retiredLegacyCli = retirements[0].status === 'fulfilled'
|
|
195
|
+
? retirements[0].value
|
|
196
|
+
: null;
|
|
197
|
+
const retiredLegacyNpmGlobalCli = retirements[1].status === 'fulfilled'
|
|
198
|
+
? retirements[1].value
|
|
199
|
+
: null;
|
|
200
|
+
const retirementErrors = retirements.flatMap((result) => (result.status === 'rejected'
|
|
201
|
+
? [result.reason instanceof Error ? result.reason : new Error(String(result.reason))]
|
|
202
|
+
: []));
|
|
203
|
+
if (retirementErrors.length === 0) {
|
|
204
|
+
return { retiredLegacyCli, retiredLegacyNpmGlobalCli };
|
|
205
|
+
}
|
|
206
|
+
const restorationResults = await Promise.allSettled([
|
|
207
|
+
...(retiredLegacyCli ? [restoreRetiredLegacyCli(retiredLegacyCli)] : []),
|
|
208
|
+
...(retiredLegacyNpmGlobalCli
|
|
209
|
+
? [restoreRetiredNpmGlobalLegacyCli(retiredLegacyNpmGlobalCli)]
|
|
210
|
+
: []),
|
|
211
|
+
]);
|
|
212
|
+
const restorationErrors = restorationResults.flatMap((result) => (result.status === 'rejected'
|
|
213
|
+
? [result.reason instanceof Error ? result.reason : new Error(String(result.reason))]
|
|
214
|
+
: []));
|
|
215
|
+
if (restorationErrors.length > 0 || retirementErrors.length > 1) {
|
|
216
|
+
throw new AggregateError([...retirementErrors, ...restorationErrors], 'Legacy 12ui CLI retirement failed');
|
|
217
|
+
}
|
|
218
|
+
throw retirementErrors[0];
|
|
219
|
+
};
|
|
180
220
|
export const persistCurrentCli = async (args = {}) => {
|
|
181
221
|
const environment = args.environment ?? process.env;
|
|
182
222
|
const homeDirectory = args.homeDirectory ?? os.homedir();
|
|
@@ -188,11 +228,29 @@ export const persistCurrentCli = async (args = {}) => {
|
|
|
188
228
|
if (!bundleRoot || !path.isAbsolute(bundleRoot)) {
|
|
189
229
|
throw new Error('The npm-free installer did not provide an absolute TWELVE_UI_BUNDLE_ROOT');
|
|
190
230
|
}
|
|
231
|
+
await (args.runLauncherCheck ?? runLauncherCheck)({
|
|
232
|
+
environment,
|
|
233
|
+
launcher: path.join(bundleRoot, 'bin', '12ui'),
|
|
234
|
+
version: identity.version,
|
|
235
|
+
});
|
|
236
|
+
const retired = await retireLegacyCliInstallations({
|
|
237
|
+
dataRoot: layout.dataRoot,
|
|
238
|
+
homeDirectory,
|
|
239
|
+
platform,
|
|
240
|
+
retireLegacyCli: args.retireLegacyCli,
|
|
241
|
+
retireNpmGlobalLegacyCli: args.retireNpmGlobalLegacyCli,
|
|
242
|
+
});
|
|
191
243
|
return {
|
|
192
244
|
source: 'bundle',
|
|
193
245
|
version: identity.version,
|
|
194
246
|
dataRoot: layout.dataRoot,
|
|
195
247
|
launcher: layout.launcher,
|
|
248
|
+
...(retired.retiredLegacyCli
|
|
249
|
+
? { retiredLegacyCli: retired.retiredLegacyCli }
|
|
250
|
+
: {}),
|
|
251
|
+
...(retired.retiredLegacyNpmGlobalCli
|
|
252
|
+
? { retiredLegacyNpmGlobalCli: retired.retiredLegacyNpmGlobalCli }
|
|
253
|
+
: {}),
|
|
196
254
|
};
|
|
197
255
|
}
|
|
198
256
|
const versionsRoot = path.join(layout.dataRoot, 'versions');
|
|
@@ -278,6 +336,7 @@ export const persistCurrentCli = async (args = {}) => {
|
|
|
278
336
|
? `@echo off\r\n"${process.execPath.replaceAll('%', '%%')}" "${cliPath.replaceAll('%', '%%')}" %*\r\n`
|
|
279
337
|
: `#!/bin/sh\nexec "${process.execPath}" "${cliPath}" "$@"\n`;
|
|
280
338
|
let retiredLegacyCli = null;
|
|
339
|
+
let retiredLegacyNpmGlobalCli = null;
|
|
281
340
|
try {
|
|
282
341
|
await writeExecutableAtomic(layout.launcher, launcher, platform);
|
|
283
342
|
await (args.runLauncherCheck ?? runLauncherCheck)({
|
|
@@ -285,10 +344,13 @@ export const persistCurrentCli = async (args = {}) => {
|
|
|
285
344
|
launcher: layout.launcher,
|
|
286
345
|
version: identity.version,
|
|
287
346
|
});
|
|
288
|
-
retiredLegacyCli = await (
|
|
347
|
+
({ retiredLegacyCli, retiredLegacyNpmGlobalCli } = await retireLegacyCliInstallations({
|
|
289
348
|
dataRoot: layout.dataRoot,
|
|
290
349
|
homeDirectory,
|
|
291
|
-
|
|
350
|
+
platform,
|
|
351
|
+
retireLegacyCli: args.retireLegacyCli,
|
|
352
|
+
retireNpmGlobalLegacyCli: args.retireNpmGlobalLegacyCli,
|
|
353
|
+
}));
|
|
292
354
|
}
|
|
293
355
|
catch (error) {
|
|
294
356
|
const rollbackErrors = [];
|
|
@@ -320,6 +382,7 @@ export const persistCurrentCli = async (args = {}) => {
|
|
|
320
382
|
dataRoot: layout.dataRoot,
|
|
321
383
|
launcher: layout.launcher,
|
|
322
384
|
...(retiredLegacyCli ? { retiredLegacyCli } : {}),
|
|
385
|
+
...(retiredLegacyNpmGlobalCli ? { retiredLegacyNpmGlobalCli } : {}),
|
|
323
386
|
};
|
|
324
387
|
};
|
|
325
388
|
export const runningPackageRoot = () => (path.dirname(path.dirname(fileURLToPath(import.meta.url))));
|