@12ui/design 0.2.66 → 0.2.68
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 +42 -35
- package/SKILL.md +1 -1
- package/dist/branch-client.d.ts +4 -2
- package/dist/branch-client.d.ts.map +1 -1
- package/dist/branch-client.js +36 -21
- package/dist/branch-client.js.map +1 -1
- package/dist/branch-conversion-engine.d.ts +8 -0
- package/dist/branch-conversion-engine.d.ts.map +1 -0
- package/dist/branch-conversion-engine.js +43 -0
- package/dist/branch-conversion-engine.js.map +1 -0
- package/dist/branch-execution.d.ts +12 -0
- package/dist/branch-execution.d.ts.map +1 -1
- package/dist/branch-execution.js +62 -39
- package/dist/branch-execution.js.map +1 -1
- package/dist/branch-local-conversion.d.ts +27 -0
- package/dist/branch-local-conversion.d.ts.map +1 -0
- package/dist/branch-local-conversion.js +80 -0
- package/dist/branch-local-conversion.js.map +1 -0
- package/dist/branch-local-publication.d.ts +15 -0
- package/dist/branch-local-publication.d.ts.map +1 -0
- package/dist/branch-local-publication.js +111 -0
- package/dist/branch-local-publication.js.map +1 -0
- package/dist/branch-page-conversion.d.ts +7 -0
- package/dist/branch-page-conversion.d.ts.map +1 -1
- package/dist/branch-page-conversion.js +13 -0
- package/dist/branch-page-conversion.js.map +1 -1
- package/dist/branch-progress.d.ts +2 -0
- package/dist/branch-progress.d.ts.map +1 -1
- package/dist/branch-progress.js.map +1 -1
- package/dist/branch-run-record.d.ts +24 -2
- package/dist/branch-run-record.d.ts.map +1 -1
- package/dist/branch-run-record.js +3 -2
- package/dist/branch-run-record.js.map +1 -1
- package/dist/branch-status.d.ts.map +1 -1
- package/dist/branch-status.js +21 -3
- package/dist/branch-status.js.map +1 -1
- package/dist/branch-winner.d.ts.map +1 -1
- package/dist/branch-winner.js +1 -2
- package/dist/branch-winner.js.map +1 -1
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +1 -0
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-branch-command.d.ts.map +1 -1
- package/dist/cli-branch-command.js +7 -2
- package/dist/cli-branch-command.js.map +1 -1
- package/dist/cli-capabilities.d.ts +29 -15
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +30 -23
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-codex-readiness.d.ts +11 -0
- package/dist/cli-codex-readiness.d.ts.map +1 -0
- package/dist/cli-codex-readiness.js +72 -0
- package/dist/cli-codex-readiness.js.map +1 -0
- package/dist/cli-conversion-engine.d.ts +11 -0
- package/dist/cli-conversion-engine.d.ts.map +1 -0
- package/dist/cli-conversion-engine.js +26 -0
- package/dist/cli-conversion-engine.js.map +1 -0
- package/dist/cli-conversion-receipt.d.ts +28 -0
- package/dist/cli-conversion-receipt.d.ts.map +1 -0
- package/dist/cli-conversion-receipt.js +130 -0
- package/dist/cli-conversion-receipt.js.map +1 -0
- package/dist/cli-convert-command.d.ts.map +1 -1
- package/dist/cli-convert-command.js +12 -5
- package/dist/cli-convert-command.js.map +1 -1
- package/dist/cli-corpus-command.d.ts.map +1 -1
- package/dist/cli-corpus-command.js +4 -5
- package/dist/cli-corpus-command.js.map +1 -1
- package/dist/cli-corpus-evidence.d.ts +0 -1
- package/dist/cli-corpus-evidence.d.ts.map +1 -1
- package/dist/cli-corpus-evidence.js +9 -50
- package/dist/cli-corpus-evidence.js.map +1 -1
- package/dist/cli-corpus-manifest.d.ts +18 -0
- package/dist/cli-corpus-manifest.d.ts.map +1 -0
- package/dist/cli-corpus-manifest.js +83 -0
- package/dist/cli-corpus-manifest.js.map +1 -0
- package/dist/cli-corpus-reference-downloads.d.ts.map +1 -1
- package/dist/cli-corpus-reference-downloads.js +5 -3
- package/dist/cli-corpus-reference-downloads.js.map +1 -1
- package/dist/cli-corpus-run.d.ts.map +1 -1
- package/dist/cli-corpus-run.js +19 -8
- package/dist/cli-corpus-run.js.map +1 -1
- package/dist/cli-corpus-types.d.ts +6 -6
- package/dist/cli-corpus-types.d.ts.map +1 -1
- package/dist/cli-engine.d.ts +10 -0
- package/dist/cli-engine.d.ts.map +1 -0
- package/dist/cli-engine.js +28 -0
- package/dist/cli-engine.js.map +1 -0
- package/dist/cli-help/conversion.d.ts +10 -3
- package/dist/cli-help/conversion.d.ts.map +1 -1
- package/dist/cli-help/conversion.js +14 -6
- package/dist/cli-help/conversion.js.map +1 -1
- package/dist/cli-help/design.d.ts +6 -6
- package/dist/cli-help/design.d.ts.map +1 -1
- package/dist/cli-help/design.js +8 -7
- package/dist/cli-help/design.js.map +1 -1
- package/dist/cli-help/index.d.ts +18 -11
- package/dist/cli-help/index.d.ts.map +1 -1
- package/dist/cli-help/setup.d.ts +2 -2
- package/dist/cli-help/setup.js +3 -3
- package/dist/cli-help/setup.js.map +1 -1
- package/dist/cli-image-backend.d.ts +3 -0
- package/dist/cli-image-backend.d.ts.map +1 -0
- package/dist/cli-image-backend.js +12 -0
- package/dist/cli-image-backend.js.map +1 -0
- package/dist/cli-local-conversion.d.ts +17 -0
- package/dist/cli-local-conversion.d.ts.map +1 -0
- package/dist/cli-local-conversion.js +74 -0
- package/dist/cli-local-conversion.js.map +1 -0
- package/dist/cli-local-dispatch.d.ts +4 -0
- package/dist/cli-local-dispatch.d.ts.map +1 -0
- package/dist/cli-local-dispatch.js +102 -0
- package/dist/cli-local-dispatch.js.map +1 -0
- package/dist/cli-local-export.d.ts +7 -0
- package/dist/cli-local-export.d.ts.map +1 -0
- package/dist/cli-local-export.js +31 -0
- package/dist/cli-local-export.js.map +1 -0
- package/dist/cli-local-improve-context.d.ts +3 -0
- package/dist/cli-local-improve-context.d.ts.map +1 -0
- package/dist/cli-local-improve-context.js +47 -0
- package/dist/cli-local-improve-context.js.map +1 -0
- package/dist/cli-local-improve.d.ts +16 -0
- package/dist/cli-local-improve.d.ts.map +1 -0
- package/dist/cli-local-improve.js +214 -0
- package/dist/cli-local-improve.js.map +1 -0
- package/dist/cli-local-record.d.ts +8 -0
- package/dist/cli-local-record.d.ts.map +1 -0
- package/dist/cli-local-record.js +67 -0
- package/dist/cli-local-record.js.map +1 -0
- package/dist/cli-local-runtime.d.ts +7 -0
- package/dist/cli-local-runtime.d.ts.map +1 -0
- package/dist/cli-local-runtime.js +21 -0
- package/dist/cli-local-runtime.js.map +1 -0
- package/dist/cli-next-command.d.ts +1 -0
- package/dist/cli-next-command.d.ts.map +1 -1
- package/dist/cli-next-command.js +12 -9
- package/dist/cli-next-command.js.map +1 -1
- package/dist/cli-run.d.ts.map +1 -1
- package/dist/cli-run.js +3 -0
- package/dist/cli-run.js.map +1 -1
- package/dist/cli-skill-command.d.ts +0 -3
- package/dist/cli-skill-command.d.ts.map +1 -1
- package/dist/cli-skill-command.js +9 -24
- package/dist/cli-skill-command.js.map +1 -1
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +20 -11
- package/dist/cli-usage.js.map +1 -1
- package/dist/concept-input.d.ts +1 -1
- package/dist/concept-input.d.ts.map +1 -1
- package/dist/concept-input.js +1 -1
- package/dist/concept-input.js.map +1 -1
- package/dist/conversion-status-contract.d.ts +13 -1
- package/dist/conversion-status-contract.d.ts.map +1 -1
- package/dist/conversion-status-contract.js +12 -11
- package/dist/conversion-status-contract.js.map +1 -1
- package/dist/corpus-client.d.ts +7 -6
- package/dist/corpus-client.d.ts.map +1 -1
- package/dist/corpus-client.js +14 -1
- package/dist/corpus-client.js.map +1 -1
- package/dist/corpus-inspiration-failure.js +1 -1
- package/dist/corpus-inspiration-failure.js.map +1 -1
- package/dist/corpus-request-error.d.ts +3 -10
- package/dist/corpus-request-error.d.ts.map +1 -1
- package/dist/corpus-request-error.js +1 -24
- package/dist/corpus-request-error.js.map +1 -1
- package/dist/http-response-diagnostic.d.ts +12 -0
- package/dist/http-response-diagnostic.d.ts.map +1 -0
- package/dist/http-response-diagnostic.js +58 -0
- package/dist/http-response-diagnostic.js.map +1 -0
- package/dist/improve-branch-stage.d.ts.map +1 -1
- package/dist/improve-branch-stage.js +6 -25
- package/dist/improve-branch-stage.js.map +1 -1
- package/dist/improve-concept.d.ts +1 -1
- package/dist/improve-concept.d.ts.map +1 -1
- package/dist/improve-concept.js +1 -1
- package/dist/improve-concept.js.map +1 -1
- package/dist/improve-core/concept-input.d.ts +2 -43
- package/dist/improve-core/concept-input.d.ts.map +1 -1
- package/dist/improve-core/concept-input.js +3 -53
- package/dist/improve-core/concept-input.js.map +1 -1
- package/dist/improve-core/improve-concept.d.ts +0 -6
- package/dist/improve-core/improve-concept.d.ts.map +1 -1
- package/dist/improve-core/improve-concept.js +4 -36
- package/dist/improve-core/improve-concept.js.map +1 -1
- package/dist/improve-core/improve-page-words.d.ts +2 -2
- package/dist/improve-core/improve-page-words.d.ts.map +1 -1
- package/dist/improve-core/improve-page-words.js +8 -6
- package/dist/improve-core/improve-page-words.js.map +1 -1
- package/dist/improve-generation-stages.d.ts.map +1 -1
- package/dist/improve-generation-stages.js +6 -24
- package/dist/improve-generation-stages.js.map +1 -1
- package/dist/improve-kit-readme.d.ts.map +1 -1
- package/dist/improve-kit-readme.js +1 -0
- package/dist/improve-kit-readme.js.map +1 -1
- package/dist/improve-source-words.d.ts +14 -0
- package/dist/improve-source-words.d.ts.map +1 -0
- package/dist/improve-source-words.js +66 -0
- package/dist/improve-source-words.js.map +1 -0
- package/dist/improve-workspace.d.ts +3 -0
- package/dist/improve-workspace.d.ts.map +1 -1
- package/dist/improve-workspace.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +36 -5
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/package-client.d.ts +3 -1
- package/dist/package-client.d.ts.map +1 -1
- package/dist/package-client.js +34 -11
- package/dist/package-client.js.map +1 -1
- package/dist/prototype-gates.d.ts.map +1 -1
- package/dist/prototype-gates.js +1 -1
- package/dist/prototype-gates.js.map +1 -1
- package/dist/prototype-poststep.js +1 -1
- package/dist/prototype-poststep.js.map +1 -1
- package/dist/prototype-requests.d.ts +1 -0
- package/dist/prototype-requests.d.ts.map +1 -1
- package/dist/prototype-requests.js.map +1 -1
- package/dist/prototype-revision.d.ts +1 -1
- package/dist/prototype-revision.js +1 -1
- package/dist/prototype-runner.d.ts.map +1 -1
- package/dist/prototype-runner.js +9 -3
- package/dist/prototype-runner.js.map +1 -1
- package/dist/review-page.js +2 -2
- package/dist/review-page.js.map +1 -1
- package/dist/review-prototype-gap.js +1 -1
- package/dist/review-prototype-gap.js.map +1 -1
- package/dist/run-journal-commands.d.ts.map +1 -1
- package/dist/run-journal-commands.js +1 -0
- package/dist/run-journal-commands.js.map +1 -1
- package/dist/skill-installer.d.ts +2 -1
- package/dist/skill-installer.d.ts.map +1 -1
- package/dist/skill-installer.js +3 -3
- package/dist/skill-installer.js.map +1 -1
- package/open-design.json +2 -2
- package/package.json +5 -4
- package/prototype-kit/analyze.mjs +4 -1
- package/prototype-kit/build.mjs +29 -4
- package/prototype-kit/inventory.mjs +11 -2
- package/prototype-kit/lib/local-page.mjs +50 -0
- package/prototype-kit/lib/static-server.mjs +1 -0
- package/runtime/bootstrap.mjs +131 -0
- package/runtime/codex-conversion/README.md +75 -0
- package/runtime/codex-conversion/bin/convert.mjs +21 -0
- package/runtime/codex-conversion/bin/export.mjs +4 -0
- package/runtime/codex-conversion/bin/finish.mjs +11 -0
- package/runtime/codex-conversion/bin/improve.mjs +12 -0
- package/runtime/codex-conversion/bin/install-skill.mjs +36 -0
- package/runtime/codex-conversion/bin/recover-image.mjs +11 -0
- package/runtime/codex-conversion/bin/recovery/prepare.mjs +68 -0
- package/runtime/codex-conversion/bin/recovery/run.mjs +37 -0
- package/runtime/codex-conversion/npm-shrinkwrap.json +1199 -0
- package/runtime/codex-conversion/package.json +45 -0
- package/runtime/codex-conversion/src/codex/arguments.mjs +14 -0
- package/runtime/codex-conversion/src/codex/completion.mjs +14 -0
- package/runtime/codex-conversion/src/codex/events.mjs +41 -0
- package/runtime/codex-conversion/src/codex/home.mjs +37 -0
- package/runtime/codex-conversion/src/codex/invoke.mjs +79 -0
- package/runtime/codex-conversion/src/contract-repair.mjs +44 -0
- package/runtime/codex-conversion/src/contracts/compile.mjs +53 -0
- package/runtime/codex-conversion/src/contracts/contracts.mjs +19 -0
- package/runtime/codex-conversion/src/contracts/geometry.mjs +38 -0
- package/runtime/codex-conversion/src/contracts/grid-frame.mjs +22 -0
- package/runtime/codex-conversion/src/contracts/groups.mjs +14 -0
- package/runtime/codex-conversion/src/contracts/initial.mjs +9 -0
- package/runtime/codex-conversion/src/contracts/normalize.mjs +46 -0
- package/runtime/codex-conversion/src/exports/browser.mjs +26 -0
- package/runtime/codex-conversion/src/exports/editable.mjs +34 -0
- package/runtime/codex-conversion/src/exports/files.mjs +7 -0
- package/runtime/codex-conversion/src/exports/index.mjs +24 -0
- package/runtime/codex-conversion/src/exports/react.mjs +44 -0
- package/runtime/codex-conversion/src/exports/viewport.mjs +17 -0
- package/runtime/codex-conversion/src/finish/index.mjs +58 -0
- package/runtime/codex-conversion/src/finish/patch.mjs +14 -0
- package/runtime/codex-conversion/src/images/execute.mjs +52 -0
- package/runtime/codex-conversion/src/images/frame-normalization.mjs +10 -0
- package/runtime/codex-conversion/src/images/geometry.mjs +9 -0
- package/runtime/codex-conversion/src/images/local-operation.mjs +17 -0
- package/runtime/codex-conversion/src/images/local.mjs +18 -0
- package/runtime/codex-conversion/src/images/native-collect.mjs +43 -0
- package/runtime/codex-conversion/src/images/native-files.mjs +11 -0
- package/runtime/codex-conversion/src/images/native-invoke.mjs +49 -0
- package/runtime/codex-conversion/src/images/native-records.mjs +57 -0
- package/runtime/codex-conversion/src/images/native.mjs +41 -0
- package/runtime/codex-conversion/src/images/prompt.mjs +14 -0
- package/runtime/codex-conversion/src/images/provider.mjs +22 -0
- package/runtime/codex-conversion/src/output.mjs +28 -0
- package/runtime/codex-conversion/src/project/invoke.mjs +35 -0
- package/runtime/codex-conversion/src/project/prompt.mjs +13 -0
- package/runtime/codex-conversion/src/project/run.mjs +83 -0
- package/runtime/codex-conversion/src/project/source.mjs +21 -0
- package/runtime/codex-conversion/src/references.mjs +114 -0
- package/runtime/codex-conversion/src/run-store-io.mjs +38 -0
- package/runtime/codex-conversion/src/run-store.mjs +114 -0
- package/runtime/codex-conversion/src/run.mjs +108 -0
- package/runtime/codex-conversion/src/runtime-pin.mjs +12 -0
- package/runtime/codex-conversion/templates/initial.schema.json +90 -0
- package/runtime/codex-conversion/templates/initial.txt +22 -0
- package/skills/12ui-design/SKILL.md +34 -32
- package/skills/12ui-design/improve.md +48 -155
- package/skills/12ui-design/outputs.md +22 -0
package/dist/cli-capabilities.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { HEDGE_QUERY_LENGTH_LIMIT } from './reference-search-mode.js';
|
|
2
1
|
import { BRANCH_PAGE_CONCURRENCY_DEFAULT, CONVERSION_DURATION_HINTS, OPERATION_DURATION_HINTS, } from './cli-progress.js';
|
|
3
|
-
import {
|
|
2
|
+
import { HEDGE_QUERY_LENGTH_LIMIT } from './reference-search-mode.js';
|
|
4
3
|
import { CONVERSION_MODELS } from './conversion-models.js';
|
|
5
4
|
import { CLI_CONVERSION_OUTPUTS, CONVERSION_OUTPUT_MEDIA_TYPES, } from './conversion-outputs.js';
|
|
6
5
|
import { MAX_IMAGE_OUTPUT_WIDTH } from './image-output-width.js';
|
|
@@ -14,9 +13,32 @@ export const CLI_CAPABILITIES = {
|
|
|
14
13
|
CONVERSION_OUTPUT_MEDIA_TYPES.layerdoc,
|
|
15
14
|
],
|
|
16
15
|
outputs: CLI_CONVERSION_OUTPUTS,
|
|
17
|
-
outputDescription: '
|
|
18
|
-
+ '
|
|
19
|
-
|
|
16
|
+
outputDescription: 'convert --output html selects local Codex or hosted API before dispatch. Local HTML has no LayerDoc;'
|
|
17
|
+
+ ' API HTML writes LayerDoc and responsive HTML. Hosted conversion IDs derive comma-separated formats.',
|
|
18
|
+
conversionEngines: {
|
|
19
|
+
values: ['auto', 'codex', 'api'],
|
|
20
|
+
default: 'auto',
|
|
21
|
+
environment: 'TWELVE_UI_ENGINE',
|
|
22
|
+
localOutputs: ['html'],
|
|
23
|
+
failurePolicy: 'Never silently retry a local failure through API; resume uses the recorded engine.',
|
|
24
|
+
},
|
|
25
|
+
localConversion: {
|
|
26
|
+
command: '12ui convert <image> --output html --engine codex',
|
|
27
|
+
imageBackends: ['external', 'native'],
|
|
28
|
+
defaultImageBackend: { withNonblankOpenaiApiKey: 'external', otherwise: 'native' },
|
|
29
|
+
imageBackendPolicy: 'Choose once for a new run; explicit choices and saved runs remain fixed. Explicit external requires OPENAI_API_KEY before planner execution.',
|
|
30
|
+
nativeLayerDoc: false,
|
|
31
|
+
},
|
|
32
|
+
projectApply: {
|
|
33
|
+
command: '12ui improve <url> --target <image> --repo <directory> --apply',
|
|
34
|
+
withoutTarget: 'Draft candidates, require an explicit pick, then edit the actual project locally.',
|
|
35
|
+
withoutApply: 'Hosted implementation kit; does not edit project source.',
|
|
36
|
+
},
|
|
37
|
+
localExport: {
|
|
38
|
+
command: '12ui export <run-dir|output-dir> --output <format> --out-dir <directory>',
|
|
39
|
+
outputs: ['assets', 'png', 'jpg', 'webp', 'pdf', 'react'],
|
|
40
|
+
react: 'Whole-page JSX, CSS, and assets; not a functional application.',
|
|
41
|
+
},
|
|
20
42
|
imageModels: CONVERSION_MODELS,
|
|
21
43
|
imageOutputWidth: {
|
|
22
44
|
flag: '--width',
|
|
@@ -24,28 +46,13 @@ export const CLI_CAPABILITIES = {
|
|
|
24
46
|
maximum: MAX_IMAGE_OUTPUT_WIDTH,
|
|
25
47
|
description: 'Set the native output canvas width by proportionally resizing image input up or down.',
|
|
26
48
|
},
|
|
27
|
-
|
|
28
|
-
* The one input limit a caller hits before it can spend anything, and the one
|
|
29
|
-
* that has to be knowable BEFORE the value is written: `draft` and `branch
|
|
30
|
-
* execute` measure the brief with the service's own normalization and
|
|
31
|
-
* refuse over-length text locally, having bought nothing.
|
|
32
|
-
*
|
|
33
|
-
* This entry used to carry a `whyItIsShort` field asserting that long concepts
|
|
34
|
-
* produce worse screens. The 2026-08-16 blind A/B behind the 1200 raise
|
|
35
|
-
* (`labs/concept-cap-2026-08-16`) measured no such effect, so the field is gone
|
|
36
|
-
* rather than reworded — a capabilities payload is read by agents as fact, and
|
|
37
|
-
* a refuted claim there is worse than no claim.
|
|
38
|
-
*/
|
|
49
|
+
// User briefs retain their complete normalized text.
|
|
39
50
|
concept: {
|
|
40
51
|
flags: ['--concept', '--concept-file'],
|
|
41
52
|
commands: ['12ui draft', '12ui branch execute'],
|
|
42
53
|
minimumCharacters: 1,
|
|
43
|
-
maximumCharacters: MAX_CONCEPT_CHARACTERS,
|
|
44
54
|
counted: 'code points, after every run of whitespace collapses to one space',
|
|
45
|
-
description: 'The brief: product, audience, and what the surface must cover.
|
|
46
|
-
+ ' the same limit the service enforces, so an over-length brief is refused before any call'
|
|
47
|
-
+ ' and nothing is bought. Say what the surface must cover and leave the visual decisions'
|
|
48
|
-
+ ' to the model.',
|
|
55
|
+
description: 'The brief: product, audience, and what the surface must cover. Concept text has no character limit.'
|
|
49
56
|
},
|
|
50
57
|
draftCorpusQuery: {
|
|
51
58
|
flag: '--corpus-query',
|
|
@@ -164,7 +171,7 @@ export const CLI_CAPABILITIES = {
|
|
|
164
171
|
labelSchema: ['navigate', 'dropdown', 'modal', 'none'],
|
|
165
172
|
labelSpend: 'one low-effort product-provider call per screen',
|
|
166
173
|
precedence: 'deterministic navigation applies; dropdowns bind only from three or more distinct labeled options',
|
|
167
|
-
hardGates: ['branch.plan.json', 'semantic viewport section ids'],
|
|
174
|
+
hardGates: ['branch.plan.json', 'semantic viewport section ids or verified local-page identity'],
|
|
168
175
|
},
|
|
169
176
|
};
|
|
170
177
|
//# sourceMappingURL=cli-capabilities.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-capabilities.js","sourceRoot":"","sources":["../src/cli-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"cli-capabilities.js","sourceRoot":"","sources":["../src/cli-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Non-inference checks against only the selected binary and authentication home. */
|
|
2
|
+
export declare function probeCodexReadiness(options?: {
|
|
3
|
+
codexBin?: string;
|
|
4
|
+
codexHome?: string;
|
|
5
|
+
}): Promise<{
|
|
6
|
+
ready: boolean;
|
|
7
|
+
reason: string;
|
|
8
|
+
codexBin: string;
|
|
9
|
+
codexHome: string;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=cli-codex-readiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-codex-readiness.d.ts","sourceRoot":"","sources":["../src/cli-codex-readiness.ts"],"names":[],"mappings":"AAoBA,qFAAqF;AACrF,wBAAsB,mBAAmB,CAAC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC;IAC1G,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CACrE,CAAC,CAiCD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { constants } from 'node:fs';
|
|
3
|
+
import { access, readFile } from 'node:fs/promises';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
// Keep aligned with codex-conversion/src/codex/arguments.mjs.
|
|
7
|
+
const requiredExecFlags = [
|
|
8
|
+
'--ignore-user-config', '--ignore-rules', '--strict-config', '--cd',
|
|
9
|
+
'--skip-git-repo-check', '--sandbox', '--model', '--config', '--enable',
|
|
10
|
+
'--disable', '--json', '--color', '--output-last-message', '--image', '--output-schema',
|
|
11
|
+
];
|
|
12
|
+
function inspect(binary, args, env) {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
execFile(binary, args, { env, encoding: 'utf8', timeout: 30_000, maxBuffer: 1024 * 1024 }, (error, stdout, stderr) => error ? reject(error) : resolve(`${stdout}\n${stderr}`));
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
/** Non-inference checks against only the selected binary and authentication home. */
|
|
18
|
+
export async function probeCodexReadiness(options = {}) {
|
|
19
|
+
const codexBin = options.codexBin ?? 'codex';
|
|
20
|
+
const codexHome = path.resolve(options.codexHome ?? process.env.CODEX_HOME ?? path.join(homedir(), '.codex'));
|
|
21
|
+
const result = (ready, reason) => ({ ready, reason, codexBin, codexHome });
|
|
22
|
+
// Match the runtime's subscription environment: no provider API credentials.
|
|
23
|
+
const env = { CODEX_HOME: codexHome };
|
|
24
|
+
for (const key of ['PATH', 'HOME', 'TMPDIR', 'TEMP', 'TMP', 'LANG', 'LC_ALL', 'SYSTEMROOT']) {
|
|
25
|
+
if (process.env[key])
|
|
26
|
+
env[key] = process.env[key];
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
await inspect(codexBin, ['--version'], env);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return result(false, 'Codex CLI could not run. Install Codex on PATH or pass --codex-bin with a working executable.');
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
await access(path.join(codexHome, 'auth.json'), constants.R_OK);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return result(false, 'Selected Codex home has no readable auth.json. Run codex login with this CODEX_HOME, or select your authenticated home with --codex-home.');
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const login = await inspect(codexBin, ['login', 'status'], env);
|
|
42
|
+
if (!login.includes('Logged in using ChatGPT')) {
|
|
43
|
+
return result(false, 'Codex conversion requires ChatGPT authentication. Run codex login with the selected CODEX_HOME; API-key login is not supported.');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return result(false, 'Codex login status failed. Run codex login with the selected CODEX_HOME and retry.');
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const help = await inspect(codexBin, ['exec', '--help'], env);
|
|
51
|
+
const missing = requiredExecFlags.filter(flag => !new RegExp(`${flag}(?=[\\s=,]|$)`).test(help));
|
|
52
|
+
if (missing.length)
|
|
53
|
+
return result(false, `Codex CLI lacks required conversion flags: ${missing.join(', ')}. Update Codex or select a compatible executable with --codex-bin.`);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return result(false, 'Codex exec --help failed. Update Codex or select a compatible executable with --codex-bin.');
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const cache = JSON.parse(await readFile(path.join(codexHome, 'models_cache.json'), 'utf8'));
|
|
60
|
+
const models = cache?.models;
|
|
61
|
+
const available = Array.isArray(models) && models.some(model => model?.slug === 'gpt-6-astra'
|
|
62
|
+
&& Array.isArray(model.supported_reasoning_levels)
|
|
63
|
+
&& model.supported_reasoning_levels.some((level) => level?.effort === 'low'));
|
|
64
|
+
if (!available)
|
|
65
|
+
return result(false, 'The selected Codex model cache does not list gpt-6-astra with low reasoning. Refresh Codex model availability for this ChatGPT account, then retry.');
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return result(false, 'Selected Codex home has no readable, valid models_cache.json. Open Codex with this CODEX_HOME to refresh its model cache, then retry.');
|
|
69
|
+
}
|
|
70
|
+
return result(true, 'Codex CLI, ChatGPT login, required flags, and cached gpt-6-astra low availability are ready.');
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=cli-codex-readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-codex-readiness.js","sourceRoot":"","sources":["../src/cli-codex-readiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type CliFlags } from './cli-arguments.js';
|
|
2
|
+
export declare const LOCAL_CONVERSION_FLAGS: Set<string>;
|
|
3
|
+
export declare const localConversionDirectory: (source: string, flags: CliFlags) => string;
|
|
4
|
+
/** Only explicitly requested options belong in flags; defaults must not imply hosted intent. */
|
|
5
|
+
export declare function chooseConversionEngine({ source, flags, runDir }: {
|
|
6
|
+
source: string;
|
|
7
|
+
flags: CliFlags;
|
|
8
|
+
runDir?: string;
|
|
9
|
+
}): Promise<import("./cli-engine.js").EngineSelection>;
|
|
10
|
+
export declare function assertApiConversionFlags(flags: CliFlags): void;
|
|
11
|
+
//# sourceMappingURL=cli-conversion-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-conversion-engine.d.ts","sourceRoot":"","sources":["../src/cli-conversion-engine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI/D,eAAO,MAAM,sBAAsB,aAAyI,CAAC;AAC7K,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,OAAO,QAAQ,KAAG,MAAoI,CAAC;AAChN,gGAAgG;AAChG,wBAAsB,sBAAsB,CAAC,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,EAAE;IAAC,MAAM,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,QAAQ,CAAC;IAAA,MAAM,CAAC,EAAC,MAAM,CAAA;CAAC,sDAShH;AACD,wBAAgB,wBAAwB,CAAC,KAAK,EAAC,QAAQ,GAAG,IAAI,CAG7D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { stat } from 'node:fs/promises';
|
|
3
|
+
import { stringFlag } from './cli-arguments.js';
|
|
4
|
+
import { selectEngine } from './cli-engine.js';
|
|
5
|
+
import { readLocalRecord } from './cli-local-record.js';
|
|
6
|
+
import { CliRefusal } from './cli-refusal.js';
|
|
7
|
+
export const LOCAL_CONVERSION_FLAGS = new Set(['engine', 'codex-bin', 'codex-home', 'output', 'out-dir', 'image-backend', 'clean-assets', 'timeout-ms', 'reasoning', 'json', 'quiet']);
|
|
8
|
+
export const localConversionDirectory = (source, flags) => path.resolve(stringFlag(flags, 'out-dir') ?? path.join(path.dirname(path.resolve(source)), path.parse(source).name + '-12ui'));
|
|
9
|
+
/** Only explicitly requested options belong in flags; defaults must not imply hosted intent. */
|
|
10
|
+
export async function chooseConversionEngine({ source, flags, runDir }) {
|
|
11
|
+
const directory = runDir ?? localConversionDirectory(source, flags);
|
|
12
|
+
const saved = await readLocalRecord(directory);
|
|
13
|
+
const hosted = !saved && await stat(path.join(directory, 'journal.jsonl')).catch(() => null);
|
|
14
|
+
const image = /\.(png|jpe?g|webp)$/iu.test(source) && (await stat(source).catch(() => null))?.isFile();
|
|
15
|
+
const supported = Boolean(image && stringFlag(flags, 'output') === 'html' && Object.keys(flags).every(key => LOCAL_CONVERSION_FLAGS.has(key)));
|
|
16
|
+
const selection = await selectEngine(flags, supported, saved ? 'codex' : hosted ? 'api' : undefined);
|
|
17
|
+
if (selection.engine === 'api')
|
|
18
|
+
assertApiConversionFlags(flags);
|
|
19
|
+
return selection;
|
|
20
|
+
}
|
|
21
|
+
export function assertApiConversionFlags(flags) {
|
|
22
|
+
const unsupported = ['image-backend', 'clean-assets', 'reasoning'].filter(key => flags[key] !== undefined);
|
|
23
|
+
if (unsupported.length)
|
|
24
|
+
throw new CliRefusal(`${unsupported.map(key => '--' + key).join(', ')} require the Codex engine. Remove these options for API work or configure Codex and use --engine codex.`, 'local_arguments');
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=cli-conversion-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-conversion-engine.js","sourceRoot":"","sources":["../src/cli-conversion-engine.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAiB,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAC,WAAW,EAAC,YAAY,EAAC,QAAQ,EAAC,SAAS,EAAC,eAAe,EAAC,cAAc,EAAC,YAAY,EAAC,WAAW,EAAC,MAAM,EAAC,OAAO,CAAC,CAAC,CAAC;AAC7K,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,KAAe,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,GAAC,OAAO,CAAC,CAAC,CAAC;AAChN,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAgD;IAChH,MAAM,SAAS,GAAC,MAAM,IAAI,wBAAwB,CAAC,MAAM,EAAC,KAAK,CAAC,CAAC;IACjE,MAAM,KAAK,GAAC,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAC,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,GAAE,EAAE,CAAA,IAAI,CAAC,CAAC;IACxF,MAAM,KAAK,GAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAE,EAAE,CAAA,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IACnG,MAAM,SAAS,GAAC,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,EAAC,QAAQ,CAAC,KAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAA,EAAE,CAAA,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxI,MAAM,SAAS,GAAC,MAAM,YAAY,CAAC,KAAK,EAAC,SAAS,EAAC,KAAK,CAAA,CAAC,CAAA,OAAO,CAAA,CAAC,CAAA,MAAM,CAAA,CAAC,CAAA,KAAK,CAAA,CAAC,CAAA,SAAS,CAAC,CAAC;IACzF,IAAG,SAAS,CAAC,MAAM,KAAG,KAAK;QAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAC7D,OAAO,SAAS,CAAC;AAClB,CAAC;AACD,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACtD,MAAM,WAAW,GAAC,CAAC,eAAe,EAAC,cAAc,EAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA,EAAE,CAAA,KAAK,CAAC,GAAG,CAAC,KAAG,SAAS,CAAC,CAAC;IACnG,IAAG,WAAW,CAAC,MAAM;QAAC,MAAM,IAAI,UAAU,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAA,EAAE,CAAA,IAAI,GAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,yGAAyG,EAAC,iBAAiB,CAAC,CAAC;AACrN,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface LocalConversionReceipt {
|
|
2
|
+
schemaVersion: 1;
|
|
3
|
+
engine: 'codex';
|
|
4
|
+
status: string;
|
|
5
|
+
runDir: string;
|
|
6
|
+
source: {
|
|
7
|
+
path: string;
|
|
8
|
+
sha256: string;
|
|
9
|
+
};
|
|
10
|
+
settings: Record<string, string>;
|
|
11
|
+
artifacts: Array<{
|
|
12
|
+
path: string;
|
|
13
|
+
sha256?: string;
|
|
14
|
+
}>;
|
|
15
|
+
entrypoint?: string;
|
|
16
|
+
manifest?: string;
|
|
17
|
+
availableOutputs: string[];
|
|
18
|
+
nativeLayerDoc: false;
|
|
19
|
+
}
|
|
20
|
+
export declare const receiptPath: (runDir: string) => string;
|
|
21
|
+
export declare function prepareConversionReceipt(args: {
|
|
22
|
+
source: string;
|
|
23
|
+
runDir: string;
|
|
24
|
+
settings: Record<string, string>;
|
|
25
|
+
}): Promise<LocalConversionReceipt>;
|
|
26
|
+
export declare function readConversionReceipt(runDir: string): Promise<LocalConversionReceipt | undefined>;
|
|
27
|
+
export declare function updateConversionReceipt(runDir: string, status?: string): Promise<LocalConversionReceipt | undefined>;
|
|
28
|
+
//# sourceMappingURL=cli-conversion-receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-conversion-receipt.d.ts","sourceRoot":"","sources":["../src/cli-conversion-receipt.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAClE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3E,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,KAAK,CAAC;CAC3F;AAKD,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG,MAAwD,CAAC;AAEtG,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAQ1J;AACD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAavG;AAWD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CA0C1H"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { readFile, realpath, rename, stat, unlink, writeFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
const hash = (bytes) => createHash('sha256').update(bytes).digest('hex');
|
|
5
|
+
const digest = (v) => typeof v === 'string' && /^[a-f0-9]{64}$/u.test(v);
|
|
6
|
+
const object = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
7
|
+
const missing = (e) => object(e) && ['ENOENT', 'ENOTDIR'].includes(String(e.code));
|
|
8
|
+
export const receiptPath = (runDir) => `${path.resolve(runDir)}.12ui-conversion.json`;
|
|
9
|
+
export async function prepareConversionReceipt(args) {
|
|
10
|
+
const receipt = {
|
|
11
|
+
schemaVersion: 1, engine: 'codex', status: 'prepared', runDir: path.resolve(args.runDir),
|
|
12
|
+
source: { path: path.resolve(args.source), sha256: hash(await readFile(args.source)) },
|
|
13
|
+
settings: { ...args.settings }, artifacts: [], availableOutputs: [], nativeLayerDoc: false,
|
|
14
|
+
};
|
|
15
|
+
await writeFile(receiptPath(args.runDir), `${JSON.stringify(receipt, null, 2)}\n`, { flag: 'wx', mode: 0o600 });
|
|
16
|
+
return receipt;
|
|
17
|
+
}
|
|
18
|
+
export async function readConversionReceipt(runDir) {
|
|
19
|
+
let v;
|
|
20
|
+
try {
|
|
21
|
+
v = JSON.parse(await readFile(receiptPath(runDir), 'utf8'));
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
if (missing(e))
|
|
25
|
+
return undefined;
|
|
26
|
+
throw e;
|
|
27
|
+
}
|
|
28
|
+
if (!object(v) || v.schemaVersion !== 1 || v.engine !== 'codex' || v.runDir !== path.resolve(runDir)
|
|
29
|
+
|| typeof v.status !== 'string' || v.nativeLayerDoc !== false || !object(v.source)
|
|
30
|
+
|| typeof v.source.path !== 'string' || !digest(v.source.sha256) || !object(v.settings)
|
|
31
|
+
|| !Object.values(v.settings).every(x => typeof x === 'string') || !Array.isArray(v.artifacts)
|
|
32
|
+
|| !v.artifacts.every(x => object(x) && typeof x.path === 'string' && (x.sha256 === undefined || digest(x.sha256)))
|
|
33
|
+
|| !Array.isArray(v.availableOutputs) || !v.availableOutputs.every(x => typeof x === 'string')
|
|
34
|
+
|| (v.entrypoint !== undefined && typeof v.entrypoint !== 'string')
|
|
35
|
+
|| (v.manifest !== undefined && typeof v.manifest !== 'string'))
|
|
36
|
+
throw new Error('Invalid local conversion receipt');
|
|
37
|
+
return v;
|
|
38
|
+
}
|
|
39
|
+
function relativeFile(v) {
|
|
40
|
+
if (typeof v !== 'string' || !v || path.isAbsolute(v) || v.includes('\\') || v.includes('\0')
|
|
41
|
+
|| v.includes(':') || v.split('/').some(x => !x || x === '..' || x === '.'))
|
|
42
|
+
throw new Error('Unsafe conversion manifest path');
|
|
43
|
+
return v;
|
|
44
|
+
}
|
|
45
|
+
async function containedFile(root, relative) {
|
|
46
|
+
const file = path.join(root, relative);
|
|
47
|
+
const actual = await realpath(file);
|
|
48
|
+
if (!actual.startsWith(`${root}${path.sep}`) || !(await stat(actual)).isFile())
|
|
49
|
+
throw new Error('Unsafe conversion manifest file');
|
|
50
|
+
return file;
|
|
51
|
+
}
|
|
52
|
+
export async function updateConversionReceipt(runDir, status) {
|
|
53
|
+
const existing = await readConversionReceipt(runDir);
|
|
54
|
+
if (!existing)
|
|
55
|
+
return undefined;
|
|
56
|
+
const receipt = { ...existing, artifacts: [], availableOutputs: [] };
|
|
57
|
+
delete receipt.entrypoint;
|
|
58
|
+
delete receipt.manifest;
|
|
59
|
+
if (status === undefined) {
|
|
60
|
+
try {
|
|
61
|
+
const result = JSON.parse(await readFile(path.join(runDir, 'result.json'), 'utf8'));
|
|
62
|
+
if (object(result) && typeof result.status === 'string')
|
|
63
|
+
status = result.status;
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
if (!missing(e))
|
|
67
|
+
throw e;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
receipt.status = status ?? existing.status;
|
|
71
|
+
const manifestPath = path.resolve(runDir, 'output/manifest.json');
|
|
72
|
+
let bytes;
|
|
73
|
+
try {
|
|
74
|
+
bytes = await readFile(manifestPath);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
if (!missing(e))
|
|
78
|
+
throw e;
|
|
79
|
+
}
|
|
80
|
+
if (bytes) {
|
|
81
|
+
const manifest = JSON.parse(bytes.toString('utf8'));
|
|
82
|
+
if (!object(manifest) || !Array.isArray(manifest.files))
|
|
83
|
+
throw new Error('Invalid conversion manifest');
|
|
84
|
+
if (!object(manifest.source) || !digest(manifest.source.sha256)
|
|
85
|
+
|| manifest.source.sha256 !== receipt.source.sha256)
|
|
86
|
+
throw new Error('Conversion manifest source hash mismatch');
|
|
87
|
+
const entrypoint = relativeFile(manifest.entrypoint);
|
|
88
|
+
if (!/\.html?$/iu.test(entrypoint))
|
|
89
|
+
throw new Error('Conversion manifest requires an HTML entrypoint');
|
|
90
|
+
const root = await realpath(path.resolve(runDir));
|
|
91
|
+
const outputRoot = await realpath(path.join(root, 'output'));
|
|
92
|
+
if (!outputRoot.startsWith(`${root}${path.sep}`))
|
|
93
|
+
throw new Error('Unsafe conversion output directory');
|
|
94
|
+
await containedFile(outputRoot, 'manifest.json');
|
|
95
|
+
const seen = new Set();
|
|
96
|
+
for (const item of manifest.files) {
|
|
97
|
+
if (!object(item) || !digest(item.sha256))
|
|
98
|
+
throw new Error('Invalid conversion manifest file hash');
|
|
99
|
+
const relative = relativeFile(item.path);
|
|
100
|
+
if (seen.has(relative))
|
|
101
|
+
throw new Error('Duplicate conversion manifest file');
|
|
102
|
+
seen.add(relative);
|
|
103
|
+
const file = await containedFile(outputRoot, relative);
|
|
104
|
+
const sha256 = hash(await readFile(file));
|
|
105
|
+
if (sha256 !== item.sha256)
|
|
106
|
+
throw new Error(`Conversion artifact hash mismatch: ${relative}`);
|
|
107
|
+
receipt.artifacts.push({ path: path.resolve(runDir, 'output', relative), sha256 });
|
|
108
|
+
}
|
|
109
|
+
if (!seen.has(entrypoint))
|
|
110
|
+
throw new Error('Conversion entrypoint missing from manifest files');
|
|
111
|
+
receipt.entrypoint = path.resolve(runDir, 'output', entrypoint);
|
|
112
|
+
receipt.manifest = manifestPath;
|
|
113
|
+
receipt.artifacts.push({ path: manifestPath, sha256: hash(bytes) });
|
|
114
|
+
receipt.availableOutputs = ['html', 'assets', 'png', 'jpg', 'webp', 'pdf', 'react'];
|
|
115
|
+
}
|
|
116
|
+
const destination = receiptPath(runDir);
|
|
117
|
+
const temporary = `${destination}.${randomUUID()}.tmp`;
|
|
118
|
+
try {
|
|
119
|
+
await writeFile(temporary, `${JSON.stringify(receipt, null, 2)}\n`, { flag: 'wx', mode: 0o600 });
|
|
120
|
+
await rename(temporary, destination);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
console.error('Warning: could not persist the updated conversion receipt. Verified artifacts remain available.');
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
await unlink(temporary).catch(() => undefined);
|
|
127
|
+
}
|
|
128
|
+
return receipt;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=cli-conversion-receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-conversion-receipt.js","sourceRoot":"","sources":["../src/cli-conversion-receipt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-convert-command.d.ts","sourceRoot":"","sources":["../src/cli-convert-command.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2B,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AA8B5E,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAgBzC,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;GAIG;AAEH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SAOxD,CAAC;AAqHF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,KAAG,MAIpD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,MAAM;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,wBAAwB,CAAC;QACjC,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,KAAG,MAYH,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM;IAC3C,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB,KAAG,MAMH,CAAC;AAsLF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,SAAS,MAAM,EAAE,EAC1B,OAAO,QAAQ,EACf,SAAS,eAAe,EACxB,eAAc;IACZ,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;CACpB,KACL,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"cli-convert-command.d.ts","sourceRoot":"","sources":["../src/cli-convert-command.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2B,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AA8B5E,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAgBzC,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;GAIG;AAEH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SAOxD,CAAC;AAqHF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,KAAG,MAIpD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,MAAM;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,wBAAwB,CAAC;QACjC,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,KAAG,MAYH,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM;IAC3C,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB,KAAG,MAMH,CAAC;AAsLF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,SAAS,MAAM,EAAE,EAC1B,OAAO,QAAQ,EACf,SAAS,eAAe,EACxB,eAAc;IACZ,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;CACpB,KACL,OAAO,CAAC,IAAI,CA8qBd,CAAC"}
|
|
@@ -14,7 +14,7 @@ import { isCliConversionOutput, } from './conversion-outputs.js';
|
|
|
14
14
|
import { recordConvertedImageReceipt } from './conversion-receipt.js';
|
|
15
15
|
import { materializeResponsiveAlternative } from './responsive-alternative-materializer.js';
|
|
16
16
|
import { readConversionRecovery, writeConversionRecovery, } from './conversion-recovery.js';
|
|
17
|
-
import { isPendingConversionStatus,
|
|
17
|
+
import { isPendingConversionStatus, readConversionStatusObservation, wrongConversionOutputRefusal, } from './conversion-status-contract.js';
|
|
18
18
|
import { normalizeOptionalIdempotencyKey } from './idempotency-key.js';
|
|
19
19
|
import { classifyLocalConversionInput, createInputForLocalFile, defaultConversionOutputPath, } from './local-conversion-input.js';
|
|
20
20
|
import { normalizeImageOutputWidth, parseImageOutputWidth, } from './image-output-width.js';
|
|
@@ -870,9 +870,13 @@ export const runConversionCommand = async (command, flags, journal, dependencies
|
|
|
870
870
|
const exportDisposition = exportResult
|
|
871
871
|
? responsiveAlternativeDisposition(exportResult)
|
|
872
872
|
: null;
|
|
873
|
+
const exportObservation = exportResult ? null : await readConversionStatusObservation(client, exportOperationId);
|
|
873
874
|
const exportStatus = exportResult
|
|
874
875
|
? exportDisposition ? 'failed' : 'succeeded'
|
|
875
|
-
:
|
|
876
|
+
: exportObservation.status;
|
|
877
|
+
const exportReadDetail = exportObservation?.readError
|
|
878
|
+
? `Status read ${exportObservation.readError.kind === 'http' ? `returned HTTP ${exportObservation.readError.status}` : 'was unavailable'}: ${exportObservation.readError.message}`
|
|
879
|
+
: undefined;
|
|
876
880
|
const pending = isPendingConversionStatus(exportStatus);
|
|
877
881
|
const collect = `12ui resume ${exportOperationId} --output html --out <file>`;
|
|
878
882
|
const report = {
|
|
@@ -891,6 +895,7 @@ export const runConversionCommand = async (command, flags, journal, dependencies
|
|
|
891
895
|
id: exportOperationId,
|
|
892
896
|
output: 'html',
|
|
893
897
|
status: exportStatus,
|
|
898
|
+
...(exportObservation?.readError ? { readError: exportObservation.readError } : {}),
|
|
894
899
|
...(pending ? { nextAction: collect } : { error: exportError }),
|
|
895
900
|
},
|
|
896
901
|
};
|
|
@@ -958,7 +963,7 @@ export const runConversionCommand = async (command, flags, journal, dependencies
|
|
|
958
963
|
{
|
|
959
964
|
name: 'responsive html',
|
|
960
965
|
state: exportStatus,
|
|
961
|
-
...(exportError ? { note: exportError } : {}),
|
|
966
|
+
...((exportObservation?.readError?.message || exportError) ? { note: exportObservation?.readError?.message || exportError || undefined } : {}),
|
|
962
967
|
},
|
|
963
968
|
],
|
|
964
969
|
spend: spendLine,
|
|
@@ -975,8 +980,10 @@ export const runConversionCommand = async (command, flags, journal, dependencies
|
|
|
975
980
|
? `Conversion ${created.id} succeeded and was written to ${outFile}, but responsive export`
|
|
976
981
|
+ ` ${exportOperationId} failed with ${responsiveAlternativeLabel(exportDisposition)};`
|
|
977
982
|
+ ` coverage is recorded in ${exportResult.artifactManifest.manifestFile}.`
|
|
978
|
-
:
|
|
979
|
-
|
|
983
|
+
: exportStatus === 'unknown'
|
|
984
|
+
? `Conversion ${created.id} succeeded and was written to ${outFile}. Responsive HTML export ${exportOperationId} has an unknown state. ${exportReadDetail ?? exportError}. Keep this purchase and collect the same export when the read issue is resolved: ${collect}.`
|
|
985
|
+
: `Conversion ${created.id} succeeded and was written to ${outFile}, but its responsive HTML`
|
|
986
|
+
+ ` export ${exportOperationId} did not: ${exportError}`);
|
|
980
987
|
}
|
|
981
988
|
};
|
|
982
989
|
//# sourceMappingURL=cli-convert-command.js.map
|