@12ui/design 0.2.27 → 0.2.28
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 +72 -87
- package/SKILL.md +5 -5
- package/dist/branch-completion.d.ts.map +1 -1
- package/dist/branch-completion.js +37 -14
- package/dist/branch-completion.js.map +1 -1
- package/dist/branch-execution.d.ts.map +1 -1
- package/dist/branch-execution.js +28 -8
- package/dist/branch-execution.js.map +1 -1
- package/dist/branch-identity.d.ts +10 -4
- package/dist/branch-identity.d.ts.map +1 -1
- package/dist/branch-identity.js +9 -6
- package/dist/branch-identity.js.map +1 -1
- package/dist/branch-page-conversion.d.ts +9 -8
- package/dist/branch-page-conversion.d.ts.map +1 -1
- package/dist/branch-page-conversion.js +8 -2
- package/dist/branch-page-conversion.js.map +1 -1
- package/dist/branch-page-packaging.d.ts +31 -0
- package/dist/branch-page-packaging.d.ts.map +1 -0
- package/dist/branch-page-packaging.js +86 -0
- package/dist/branch-page-packaging.js.map +1 -0
- package/dist/branch-plan.d.ts +6 -0
- package/dist/branch-plan.d.ts.map +1 -1
- package/dist/branch-plan.js +6 -1
- package/dist/branch-plan.js.map +1 -1
- package/dist/branch-progress.d.ts +22 -0
- package/dist/branch-progress.d.ts.map +1 -1
- package/dist/branch-progress.js +33 -8
- package/dist/branch-progress.js.map +1 -1
- package/dist/branch-run-record.d.ts +9 -0
- package/dist/branch-run-record.d.ts.map +1 -1
- package/dist/branch-run-record.js.map +1 -1
- package/dist/branch-status.d.ts +2 -0
- package/dist/branch-status.d.ts.map +1 -1
- package/dist/branch-status.js +60 -15
- package/dist/branch-status.js.map +1 -1
- package/dist/branch-winner.d.ts +13 -15
- package/dist/branch-winner.d.ts.map +1 -1
- package/dist/branch-winner.js +25 -77
- package/dist/branch-winner.js.map +1 -1
- package/dist/cli-auth-command.d.ts.map +1 -1
- package/dist/cli-auth-command.js +5 -0
- package/dist/cli-auth-command.js.map +1 -1
- package/dist/cli-auth-onboarding.d.ts +12 -0
- package/dist/cli-auth-onboarding.d.ts.map +1 -0
- package/dist/cli-auth-onboarding.js +21 -0
- package/dist/cli-auth-onboarding.js.map +1 -0
- package/dist/cli-branch-command.d.ts +14 -19
- package/dist/cli-branch-command.d.ts.map +1 -1
- package/dist/cli-branch-command.js +207 -137
- package/dist/cli-branch-command.js.map +1 -1
- package/dist/cli-capabilities.d.ts +10 -51
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +13 -26
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-cli-command.d.ts +3 -0
- package/dist/cli-cli-command.d.ts.map +1 -1
- package/dist/cli-cli-command.js +15 -3
- package/dist/cli-cli-command.js.map +1 -1
- package/dist/cli-conversion-derivation.d.ts +30 -0
- package/dist/cli-conversion-derivation.d.ts.map +1 -0
- package/dist/{cli-export-command.js → cli-conversion-derivation.js} +178 -110
- package/dist/cli-conversion-derivation.js.map +1 -0
- package/dist/cli-conversion-output-directory.d.ts +5 -0
- package/dist/cli-conversion-output-directory.d.ts.map +1 -0
- package/dist/{cli-export-output-directory.js → cli-conversion-output-directory.js} +10 -10
- package/dist/cli-conversion-output-directory.js.map +1 -0
- package/dist/cli-convert-command.d.ts +9 -0
- package/dist/cli-convert-command.d.ts.map +1 -1
- package/dist/cli-convert-command.js +528 -158
- 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 +77 -10
- package/dist/cli-corpus-command.js.map +1 -1
- package/dist/cli-corpus-reference-downloads.d.ts +5 -0
- package/dist/cli-corpus-reference-downloads.d.ts.map +1 -1
- package/dist/cli-corpus-reference-downloads.js +18 -7
- package/dist/cli-corpus-reference-downloads.js.map +1 -1
- package/dist/cli-corpus-run.d.ts +9 -0
- package/dist/cli-corpus-run.d.ts.map +1 -1
- package/dist/cli-corpus-run.js +18 -0
- package/dist/cli-corpus-run.js.map +1 -1
- package/dist/cli-detach.d.ts +12 -4
- package/dist/cli-detach.d.ts.map +1 -1
- package/dist/cli-detach.js +49 -17
- package/dist/cli-detach.js.map +1 -1
- package/dist/cli-draft-command.d.ts +44 -61
- package/dist/cli-draft-command.d.ts.map +1 -1
- package/dist/cli-draft-command.js +307 -180
- package/dist/cli-draft-command.js.map +1 -1
- package/dist/cli-help/conversion.d.ts +30 -0
- package/dist/cli-help/conversion.d.ts.map +1 -0
- package/dist/cli-help/conversion.js +55 -0
- package/dist/cli-help/conversion.js.map +1 -0
- package/dist/cli-help/design.d.ts +74 -0
- package/dist/cli-help/design.d.ts.map +1 -0
- package/dist/cli-help/design.js +131 -0
- package/dist/cli-help/design.js.map +1 -0
- package/dist/cli-help/index.d.ts +224 -0
- package/dist/cli-help/index.d.ts.map +1 -0
- package/dist/cli-help/index.js +32 -0
- package/dist/cli-help/index.js.map +1 -0
- package/dist/cli-help/meta.d.ts +24 -0
- package/dist/cli-help/meta.d.ts.map +1 -0
- package/dist/cli-help/meta.js +30 -0
- package/dist/cli-help/meta.js.map +1 -0
- package/dist/cli-help/render.d.ts +4 -0
- package/dist/cli-help/render.d.ts.map +1 -0
- package/dist/cli-help/render.js +28 -0
- package/dist/cli-help/render.js.map +1 -0
- package/dist/cli-help/setup.d.ts +93 -0
- package/dist/cli-help/setup.d.ts.map +1 -0
- package/dist/cli-help/setup.js +142 -0
- package/dist/cli-help/setup.js.map +1 -0
- package/dist/cli-help/types.d.ts +10 -0
- package/dist/cli-help/types.d.ts.map +1 -0
- package/dist/cli-help/types.js +2 -0
- package/dist/cli-help/types.js.map +1 -0
- package/dist/cli-next-command.d.ts +11 -8
- package/dist/cli-next-command.d.ts.map +1 -1
- package/dist/cli-next-command.js +288 -88
- package/dist/cli-next-command.js.map +1 -1
- package/dist/cli-output-paths.d.ts +2 -23
- package/dist/cli-output-paths.d.ts.map +1 -1
- package/dist/cli-output-paths.js +2 -36
- package/dist/cli-output-paths.js.map +1 -1
- package/dist/cli-package-command.d.ts +1 -0
- package/dist/cli-package-command.d.ts.map +1 -1
- package/dist/cli-package-command.js +107 -34
- package/dist/cli-package-command.js.map +1 -1
- package/dist/cli-pending-auth.d.ts +20 -0
- package/dist/cli-pending-auth.d.ts.map +1 -0
- package/dist/cli-pending-auth.js +160 -0
- package/dist/cli-pending-auth.js.map +1 -0
- package/dist/cli-progress.d.ts +256 -75
- package/dist/cli-progress.d.ts.map +1 -1
- package/dist/cli-progress.js +425 -98
- package/dist/cli-progress.js.map +1 -1
- package/dist/cli-run.d.ts +2 -0
- package/dist/cli-run.d.ts.map +1 -1
- package/dist/cli-run.js +56 -75
- package/dist/cli-run.js.map +1 -1
- package/dist/cli-skill-command.d.ts +3 -0
- package/dist/cli-skill-command.d.ts.map +1 -1
- package/dist/cli-skill-command.js +26 -3
- package/dist/cli-skill-command.js.map +1 -1
- package/dist/cli-usage.d.ts +17 -8
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +55 -40
- package/dist/cli-usage.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -2
- package/dist/config.js.map +1 -1
- package/dist/conversion-client.d.ts +4 -0
- package/dist/conversion-client.d.ts.map +1 -1
- package/dist/conversion-client.js.map +1 -1
- package/dist/conversion-outputs.d.ts +11 -0
- package/dist/conversion-outputs.d.ts.map +1 -1
- package/dist/conversion-outputs.js +13 -1
- package/dist/conversion-outputs.js.map +1 -1
- package/dist/conversion-receipt.d.ts +1 -1
- package/dist/conversion-receipt.js +1 -1
- package/dist/conversion-recovery.d.ts +20 -0
- package/dist/conversion-recovery.d.ts.map +1 -0
- package/dist/conversion-recovery.js +61 -0
- package/dist/conversion-recovery.js.map +1 -0
- package/dist/conversion-status-contract.js +1 -1
- package/dist/conversion-status-contract.js.map +1 -1
- package/dist/credential-setup.d.ts +9 -1
- package/dist/credential-setup.d.ts.map +1 -1
- package/dist/credential-setup.js +13 -1
- package/dist/credential-setup.js.map +1 -1
- package/dist/draft-adoption.d.ts +9 -3
- package/dist/draft-adoption.d.ts.map +1 -1
- package/dist/draft-adoption.js +26 -41
- package/dist/draft-adoption.js.map +1 -1
- package/dist/draft-identity.d.ts +9 -12
- package/dist/draft-identity.d.ts.map +1 -1
- package/dist/draft-identity.js +0 -0
- package/dist/draft-identity.js.map +1 -1
- package/dist/draft-run.d.ts +9 -19
- package/dist/draft-run.d.ts.map +1 -1
- package/dist/draft-run.js +67 -95
- package/dist/draft-run.js.map +1 -1
- package/dist/draft-workspace.d.ts +26 -18
- package/dist/draft-workspace.d.ts.map +1 -1
- package/dist/draft-workspace.js +16 -5
- package/dist/draft-workspace.js.map +1 -1
- package/dist/hosted-draft-identity.d.ts +20 -0
- package/dist/hosted-draft-identity.d.ts.map +1 -0
- package/dist/hosted-draft-identity.js +30 -0
- package/dist/hosted-draft-identity.js.map +1 -0
- package/dist/hosted-draft-run.d.ts +60 -0
- package/dist/hosted-draft-run.d.ts.map +1 -0
- package/dist/hosted-draft-run.js +97 -0
- package/dist/hosted-draft-run.js.map +1 -0
- package/dist/legacy-codex-cleanup.d.ts +13 -0
- package/dist/legacy-codex-cleanup.d.ts.map +1 -1
- package/dist/legacy-codex-cleanup.js +83 -0
- package/dist/legacy-codex-cleanup.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts +2 -2
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +76 -5
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/login-auth.d.ts +38 -0
- package/dist/login-auth.d.ts.map +1 -1
- package/dist/login-auth.js +67 -16
- package/dist/login-auth.js.map +1 -1
- package/dist/mcp-tool-definitions.js +1 -1
- package/dist/mcp-tool-definitions.js.map +1 -1
- package/dist/next-target.d.ts +1 -4
- package/dist/next-target.d.ts.map +1 -1
- package/dist/next-target.js +5 -9
- package/dist/next-target.js.map +1 -1
- package/dist/next-wait-lease.d.ts +17 -0
- package/dist/next-wait-lease.d.ts.map +1 -0
- package/dist/next-wait-lease.js +92 -0
- package/dist/next-wait-lease.js.map +1 -0
- package/dist/package-client.d.ts +30 -0
- package/dist/package-client.d.ts.map +1 -1
- package/dist/package-client.js.map +1 -1
- package/dist/package-submission.d.ts +17 -0
- package/dist/package-submission.d.ts.map +1 -1
- package/dist/package-submission.js +13 -0
- package/dist/package-submission.js.map +1 -1
- package/dist/pending-auth-store.d.ts +15 -0
- package/dist/pending-auth-store.d.ts.map +1 -0
- package/dist/pending-auth-store.js +90 -0
- package/dist/pending-auth-store.js.map +1 -0
- package/dist/responsive-quality.d.ts +2 -2
- package/dist/responsive-quality.js +2 -2
- package/dist/run-journal-commands.d.ts.map +1 -1
- package/dist/run-journal-commands.js +30 -78
- package/dist/run-journal-commands.js.map +1 -1
- package/dist/run-journal-in-flight.d.ts +2 -2
- package/dist/run-journal-in-flight.d.ts.map +1 -1
- package/dist/run-journal-in-flight.js +0 -0
- package/dist/run-journal-in-flight.js.map +1 -1
- package/dist/skill-installer.d.ts +2 -2
- package/dist/skill-installer.d.ts.map +1 -1
- package/dist/skill-installer.js +2 -2
- package/dist/skill-installer.js.map +1 -1
- package/open-design.json +3 -3
- package/package.json +1 -1
- package/skills/12ui-design/SKILL.md +62 -0
- package/skills/12ui-design/agents/openai.yaml +6 -0
- package/skills/12ui-design/inspire.md +11 -0
- package/dist/cli-create-command.d.ts +0 -59
- package/dist/cli-create-command.d.ts.map +0 -1
- package/dist/cli-create-command.js +0 -354
- package/dist/cli-create-command.js.map +0 -1
- package/dist/cli-export-command.d.ts +0 -26
- package/dist/cli-export-command.d.ts.map +0 -1
- package/dist/cli-export-command.js.map +0 -1
- package/dist/cli-export-output-directory.d.ts +0 -5
- package/dist/cli-export-output-directory.d.ts.map +0 -1
- package/dist/cli-export-output-directory.js.map +0 -1
- package/dist/cli-image-batch-command.d.ts +0 -29
- package/dist/cli-image-batch-command.d.ts.map +0 -1
- package/dist/cli-image-batch-command.js +0 -236
- package/dist/cli-image-batch-command.js.map +0 -1
- package/dist/cli-image-batch-materialize.d.ts +0 -27
- package/dist/cli-image-batch-materialize.d.ts.map +0 -1
- package/dist/cli-image-batch-materialize.js +0 -41
- package/dist/cli-image-batch-materialize.js.map +0 -1
- package/dist/cli-image-batch-resume.d.ts +0 -36
- package/dist/cli-image-batch-resume.d.ts.map +0 -1
- package/dist/cli-image-batch-resume.js +0 -176
- package/dist/cli-image-batch-resume.js.map +0 -1
- package/dist/cli-image-command.d.ts +0 -10
- package/dist/cli-image-command.d.ts.map +0 -1
- package/dist/cli-image-command.js +0 -106
- package/dist/cli-image-command.js.map +0 -1
- package/dist/cli-select-command.d.ts +0 -16
- package/dist/cli-select-command.d.ts.map +0 -1
- package/dist/cli-select-command.js +0 -60
- package/dist/cli-select-command.js.map +0 -1
- package/dist/create-identity.d.ts +0 -25
- package/dist/create-identity.d.ts.map +0 -1
- package/dist/create-identity.js +0 -0
- package/dist/create-identity.js.map +0 -1
- package/dist/draft-prompts.d.ts +0 -35
- package/dist/draft-prompts.d.ts.map +0 -1
- package/dist/draft-prompts.js +0 -51
- package/dist/draft-prompts.js.map +0 -1
- package/dist/image-batch-status.d.ts +0 -42
- package/dist/image-batch-status.d.ts.map +0 -1
- package/dist/image-batch-status.js +0 -143
- package/dist/image-batch-status.js.map +0 -1
- package/dist/image-generation-batch-attempt.d.ts +0 -28
- package/dist/image-generation-batch-attempt.d.ts.map +0 -1
- package/dist/image-generation-batch-attempt.js +0 -48
- package/dist/image-generation-batch-attempt.js.map +0 -1
- package/dist/image-generation-batch-manifest.d.ts +0 -25
- package/dist/image-generation-batch-manifest.d.ts.map +0 -1
- package/dist/image-generation-batch-manifest.js +0 -97
- package/dist/image-generation-batch-manifest.js.map +0 -1
- package/dist/image-generation-completion.d.ts +0 -43
- package/dist/image-generation-completion.d.ts.map +0 -1
- package/dist/image-generation-completion.js +0 -54
- package/dist/image-generation-completion.js.map +0 -1
- package/dist/image-generation-error.d.ts +0 -3
- package/dist/image-generation-error.d.ts.map +0 -1
- package/dist/image-generation-error.js +0 -30
- package/dist/image-generation-error.js.map +0 -1
- package/dist/image-generation-evidence.d.ts +0 -43
- package/dist/image-generation-evidence.d.ts.map +0 -1
- package/dist/image-generation-evidence.js +0 -28
- package/dist/image-generation-evidence.js.map +0 -1
- package/dist/image-generation-fs.d.ts +0 -3
- package/dist/image-generation-fs.d.ts.map +0 -1
- package/dist/image-generation-fs.js +0 -23
- package/dist/image-generation-fs.js.map +0 -1
- package/dist/image-generation-output.d.ts +0 -3
- package/dist/image-generation-output.d.ts.map +0 -1
- package/dist/image-generation-output.js +0 -51
- package/dist/image-generation-output.js.map +0 -1
- package/dist/image-generation-request.d.ts +0 -43
- package/dist/image-generation-request.d.ts.map +0 -1
- package/dist/image-generation-request.js +0 -52
- package/dist/image-generation-request.js.map +0 -1
- package/dist/image-generation-resume.d.ts +0 -49
- package/dist/image-generation-resume.d.ts.map +0 -1
- package/dist/image-generation-resume.js +0 -96
- package/dist/image-generation-resume.js.map +0 -1
- package/dist/image-generation-run.d.ts +0 -46
- package/dist/image-generation-run.d.ts.map +0 -1
- package/dist/image-generation-run.js +0 -158
- package/dist/image-generation-run.js.map +0 -1
- package/dist/image-generation-staging.d.ts +0 -25
- package/dist/image-generation-staging.d.ts.map +0 -1
- package/dist/image-generation-staging.js +0 -80
- package/dist/image-generation-staging.js.map +0 -1
- package/dist/image-generation-usage.d.ts +0 -75
- package/dist/image-generation-usage.d.ts.map +0 -1
- package/dist/image-generation-usage.js +0 -219
- package/dist/image-generation-usage.js.map +0 -1
- package/dist/image-provider-preflight.d.ts +0 -21
- package/dist/image-provider-preflight.d.ts.map +0 -1
- package/dist/image-provider-preflight.js +0 -184
- package/dist/image-provider-preflight.js.map +0 -1
- package/dist/selection-record.d.ts +0 -97
- package/dist/selection-record.d.ts.map +0 -1
- package/dist/selection-record.js +0 -138
- package/dist/selection-record.js.map +0 -1
- package/skills/design/SKILL.md +0 -116
- package/skills/design/agents/openai.yaml +0 -8
- package/skills/design/assets/large-logo.svg +0 -3
- package/skills/design/assets/small-400px.png +0 -0
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { type ImageGenerationAttempt } from './image-generation-evidence.js';
|
|
2
|
-
/**
|
|
3
|
-
* What a resume is allowed to do with one candidate, decided only from durable
|
|
4
|
-
* evidence. The single invariant every disposition serves: a resume may finish
|
|
5
|
-
* delivering work that was already bought, and may start work that provably was
|
|
6
|
-
* not, but it may never buy the same candidate twice.
|
|
7
|
-
*/
|
|
8
|
-
export type ImageGenerationResumeDisposition =
|
|
9
|
-
/** PNG and evidence are already in their destination. Nothing to do, nothing to buy. */
|
|
10
|
-
'materialized'
|
|
11
|
-
/** The paid bytes are already on disk in staging. Move them into place; no provider call. */
|
|
12
|
-
| 'stageable'
|
|
13
|
-
/** Provably unbilled, or billed under a key the provider itself deduplicates. */
|
|
14
|
-
| 'redispatchable'
|
|
15
|
-
/** Billed and lost, with no free way to ask for it again. Refuse rather than re-buy. */
|
|
16
|
-
| 'unrecoverable';
|
|
17
|
-
export type ImageGenerationResumeState = {
|
|
18
|
-
candidateId?: string;
|
|
19
|
-
outputPath: string;
|
|
20
|
-
attemptFile: string;
|
|
21
|
-
disposition: ImageGenerationResumeDisposition;
|
|
22
|
-
reason: string;
|
|
23
|
-
attempt?: ImageGenerationAttempt;
|
|
24
|
-
};
|
|
25
|
-
export declare const classifyImageGenerationResume: (args: {
|
|
26
|
-
outputPath: string;
|
|
27
|
-
candidateId?: string;
|
|
28
|
-
}) => Promise<ImageGenerationResumeState>;
|
|
29
|
-
export declare const resumeStateSummary: (states: readonly ImageGenerationResumeState[]) => {
|
|
30
|
-
materialized: number;
|
|
31
|
-
stageable: number;
|
|
32
|
-
redispatchable: number;
|
|
33
|
-
unrecoverable: number;
|
|
34
|
-
};
|
|
35
|
-
export declare const describeResumeState: (state: ImageGenerationResumeState) => string;
|
|
36
|
-
/**
|
|
37
|
-
* Nothing was ever started here: no candidate has an attempt ledger, staged
|
|
38
|
-
* bytes, or a delivered file.
|
|
39
|
-
*
|
|
40
|
-
* This is a categorically different situation from a recovery that cannot
|
|
41
|
-
* recover, and it must never be reported with recovery counts. A caller that
|
|
42
|
-
* reaches for `--resume` before dispatching once — measured in 18 of 24
|
|
43
|
-
* compliance runs — reads "0 recovered, 4 unrecoverable" as a provider outage
|
|
44
|
-
* and abandons the whole pipeline, in one case discarding four valid PNGs a
|
|
45
|
-
* later dispatch had actually produced. The honest answer is that the work has
|
|
46
|
-
* not been asked for yet.
|
|
47
|
-
*/
|
|
48
|
-
export declare const batchWasNeverDispatched: (states: readonly ImageGenerationResumeState[]) => boolean;
|
|
49
|
-
//# sourceMappingURL=image-generation-resume.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-resume.d.ts","sourceRoot":"","sources":["../src/image-generation-resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAO/F;;;;;GAKG;AACH,MAAM,MAAM,gCAAgC;AAC1C,wFAAwF;AACtF,cAAc;AAChB,6FAA6F;GAC3F,WAAW;AACb,iFAAiF;GAC/E,gBAAgB;AAClB,wFAAwF;GACtF,eAAe,CAAC;AAEpB,MAAM,MAAM,0BAA0B,GAAG;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,gCAAgC,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,sBAAsB,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAU,MAAM;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,KAAG,OAAO,CAAC,0BAA0B,CAuErC,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,SAAS,0BAA0B,EAAE,KAAG;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CAMtB,CAAC;AAEH,eAAO,MAAM,mBAAmB,GAAI,OAAO,0BAA0B,KAAG,MAEvE,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,SAAS,0BAA0B,EAAE,KAC5C,OAED,CAAC"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { imageAttemptPath } from './image-generation-evidence.js';
|
|
2
|
-
import { imageGenerationPathExists } from './image-generation-fs.js';
|
|
3
|
-
import { imageGenerationStagedPaths, readImageGenerationAttemptFile, } from './image-generation-staging.js';
|
|
4
|
-
export const classifyImageGenerationResume = async (args) => {
|
|
5
|
-
const attemptFile = imageAttemptPath(args.outputPath);
|
|
6
|
-
const staged = imageGenerationStagedPaths(args.outputPath);
|
|
7
|
-
const [outputExists, stagedOutputExists, finalAttempt, stagedAttempt] = await Promise.all([
|
|
8
|
-
imageGenerationPathExists(args.outputPath),
|
|
9
|
-
imageGenerationPathExists(staged.stagedOutputPath),
|
|
10
|
-
readImageGenerationAttemptFile(attemptFile),
|
|
11
|
-
readImageGenerationAttemptFile(staged.stagedAttemptFile),
|
|
12
|
-
]);
|
|
13
|
-
const attempt = stagedAttempt ?? finalAttempt;
|
|
14
|
-
const base = {
|
|
15
|
-
...(args.candidateId ? { candidateId: args.candidateId } : {}),
|
|
16
|
-
outputPath: args.outputPath,
|
|
17
|
-
attemptFile,
|
|
18
|
-
...(attempt ? { attempt } : {}),
|
|
19
|
-
};
|
|
20
|
-
const stagingRemnant = stagedOutputExists || stagedAttempt !== undefined;
|
|
21
|
-
if (outputExists && finalAttempt && !stagingRemnant) {
|
|
22
|
-
return {
|
|
23
|
-
...base,
|
|
24
|
-
disposition: 'materialized',
|
|
25
|
-
reason: 'the candidate and its evidence are already in place',
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
// Bytes on disk mean the call was already paid for and only delivery is
|
|
29
|
-
// outstanding — either the PNG is still staged, or it landed and its ledger
|
|
30
|
-
// entry did not.
|
|
31
|
-
if (stagedOutputExists || (outputExists && stagingRemnant)) {
|
|
32
|
-
return {
|
|
33
|
-
...base,
|
|
34
|
-
disposition: 'stageable',
|
|
35
|
-
reason: 'the generated image is already on disk and only needs moving into place',
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
if (!attempt) {
|
|
39
|
-
return {
|
|
40
|
-
...base,
|
|
41
|
-
disposition: 'redispatchable',
|
|
42
|
-
reason: 'no attempt evidence exists, so no provider call was ever reserved for it',
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
if (!attempt.providerStartedAt) {
|
|
46
|
-
return {
|
|
47
|
-
...base,
|
|
48
|
-
disposition: 'redispatchable',
|
|
49
|
-
reason: 'the provider call was never started, so nothing was billed for it',
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
if (attempt.status === 'failed') {
|
|
53
|
-
return {
|
|
54
|
-
...base,
|
|
55
|
-
disposition: 'unrecoverable',
|
|
56
|
-
reason: `the provider call failed after dispatch (${attempt.error ?? 'no recorded error'});`
|
|
57
|
-
+ ' repeating it would be a second paid call',
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
if (attempt.providerIdempotencyEnforced) {
|
|
61
|
-
return {
|
|
62
|
-
...base,
|
|
63
|
-
disposition: 'redispatchable',
|
|
64
|
-
reason: 'the provider enforces idempotency on the recorded key, so re-requesting the same'
|
|
65
|
-
+ ' identity returns the same result without a second charge',
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
...base,
|
|
70
|
-
disposition: 'unrecoverable',
|
|
71
|
-
reason: `the ${attempt.provider} call was dispatched and its result was lost, and that provider`
|
|
72
|
-
+ ' does not enforce idempotency on the recorded key, so re-requesting it would be a second'
|
|
73
|
-
+ ' paid call; give this candidate a new output path and idempotency key to buy it again',
|
|
74
|
-
};
|
|
75
|
-
};
|
|
76
|
-
export const resumeStateSummary = (states) => ({
|
|
77
|
-
materialized: states.filter((state) => state.disposition === 'materialized').length,
|
|
78
|
-
stageable: states.filter((state) => state.disposition === 'stageable').length,
|
|
79
|
-
redispatchable: states.filter((state) => state.disposition === 'redispatchable').length,
|
|
80
|
-
unrecoverable: states.filter((state) => state.disposition === 'unrecoverable').length,
|
|
81
|
-
});
|
|
82
|
-
export const describeResumeState = (state) => (`${state.candidateId ?? state.outputPath}: ${state.disposition} — ${state.reason}`);
|
|
83
|
-
/**
|
|
84
|
-
* Nothing was ever started here: no candidate has an attempt ledger, staged
|
|
85
|
-
* bytes, or a delivered file.
|
|
86
|
-
*
|
|
87
|
-
* This is a categorically different situation from a recovery that cannot
|
|
88
|
-
* recover, and it must never be reported with recovery counts. A caller that
|
|
89
|
-
* reaches for `--resume` before dispatching once — measured in 18 of 24
|
|
90
|
-
* compliance runs — reads "0 recovered, 4 unrecoverable" as a provider outage
|
|
91
|
-
* and abandons the whole pipeline, in one case discarding four valid PNGs a
|
|
92
|
-
* later dispatch had actually produced. The honest answer is that the work has
|
|
93
|
-
* not been asked for yet.
|
|
94
|
-
*/
|
|
95
|
-
export const batchWasNeverDispatched = (states) => states.length > 0 && states.every((state) => (state.attempt === undefined && state.disposition === 'redispatchable'));
|
|
96
|
-
//# sourceMappingURL=image-generation-resume.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-resume.js","sourceRoot":"","sources":["../src/image-generation-resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { ensembleImage } from '@just-every/ensemble';
|
|
2
|
-
import { type ImageGenerationAttempt } from './image-generation-evidence.js';
|
|
3
|
-
import { type PreparedImageGenerationRequest } from './image-generation-request.js';
|
|
4
|
-
import { type ImageGenerationUsageEvidence } from './image-generation-usage.js';
|
|
5
|
-
import type { ImageProviderPreflight } from './image-provider-preflight.js';
|
|
6
|
-
export type ImageGenerationDependencies = {
|
|
7
|
-
generate?: typeof ensembleImage;
|
|
8
|
-
now?: () => Date;
|
|
9
|
-
};
|
|
10
|
-
export type ReservedImageGeneration = {
|
|
11
|
-
request: PreparedImageGenerationRequest;
|
|
12
|
-
preflight: ImageProviderPreflight;
|
|
13
|
-
attempt: ImageGenerationAttempt;
|
|
14
|
-
};
|
|
15
|
-
export type ImageGenerationResult = {
|
|
16
|
-
candidateId?: string;
|
|
17
|
-
provider: ImageGenerationAttempt['provider'];
|
|
18
|
-
model: ImageGenerationAttempt['model'];
|
|
19
|
-
outputPath: string;
|
|
20
|
-
outputSha256: string;
|
|
21
|
-
outputBytes: number;
|
|
22
|
-
attemptFile: string;
|
|
23
|
-
providerStartedAt: string;
|
|
24
|
-
completedAt: string;
|
|
25
|
-
usage: ImageGenerationUsageEvidence;
|
|
26
|
-
};
|
|
27
|
-
export declare const reserveImageGeneration: (args: {
|
|
28
|
-
request: PreparedImageGenerationRequest;
|
|
29
|
-
preflight: ImageProviderPreflight;
|
|
30
|
-
batch?: ImageGenerationAttempt["batch"];
|
|
31
|
-
dependencies?: ImageGenerationDependencies;
|
|
32
|
-
}) => Promise<ReservedImageGeneration>;
|
|
33
|
-
/**
|
|
34
|
-
* Re-enter an existing candidate identity without minting a new ledger entry.
|
|
35
|
-
* The caller must already have proved, from that entry, that redispatching it
|
|
36
|
-
* cannot double-spend.
|
|
37
|
-
*/
|
|
38
|
-
export declare const resumeReservedImageGeneration: (args: {
|
|
39
|
-
request: PreparedImageGenerationRequest;
|
|
40
|
-
preflight: ImageProviderPreflight;
|
|
41
|
-
attempt: ImageGenerationAttempt;
|
|
42
|
-
}) => ReservedImageGeneration;
|
|
43
|
-
export declare const markImageGenerationDispatched: (reserved: ReservedImageGeneration, dependencies?: ImageGenerationDependencies) => Promise<void>;
|
|
44
|
-
export declare const failImageGenerationBeforeDispatch: (reserved: ReservedImageGeneration, error: string, dependencies?: ImageGenerationDependencies) => Promise<void>;
|
|
45
|
-
export declare const dispatchImageGeneration: (reserved: ReservedImageGeneration, dependencies?: ImageGenerationDependencies) => Promise<ImageGenerationResult>;
|
|
46
|
-
//# sourceMappingURL=image-generation-run.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-run.d.ts","sourceRoot":"","sources":["../src/image-generation-run.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EAGd,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,gCAAgC,CAAC;AAMxC,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,CAAC,EAAE,OAAO,aAAa,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,8BAA8B,CAAC;IACxC,SAAS,EAAE,sBAAsB,CAAC;IAClC,OAAO,EAAE,sBAAsB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC7C,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,4BAA4B,CAAC;CACrC,CAAC;AAMF,eAAO,MAAM,sBAAsB,GAAU,MAAM;IACjD,OAAO,EAAE,8BAA8B,CAAC;IACxC,SAAS,EAAE,sBAAsB,CAAC;IAClC,KAAK,CAAC,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,2BAA2B,CAAC;CAC5C,KAAG,OAAO,CAAC,uBAAuB,CAmClC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,GAAI,MAAM;IAClD,OAAO,EAAE,8BAA8B,CAAC;IACxC,SAAS,EAAE,sBAAsB,CAAC;IAClC,OAAO,EAAE,sBAAsB,CAAC;CACjC,KAAG,uBAIF,CAAC;AAEH,eAAO,MAAM,6BAA6B,GACxC,UAAU,uBAAuB,EACjC,eAAc,2BAAgC,KAC7C,OAAO,CAAC,IAAI,CAId,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,UAAU,uBAAuB,EACjC,OAAO,MAAM,EACb,eAAc,2BAAgC,KAC7C,OAAO,CAAC,IAAI,CAKd,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,uBAAuB,EACjC,eAAc,2BAAgC,KAC7C,OAAO,CAAC,qBAAqB,CAiG/B,CAAC"}
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { writeFile } from 'node:fs/promises';
|
|
2
|
-
import { ensembleImage, } from '@just-every/ensemble';
|
|
3
|
-
import { OpenAIProvider } from '@just-every/ensemble/model_providers/openai';
|
|
4
|
-
import { writeImageGenerationAttempt, } from './image-generation-evidence.js';
|
|
5
|
-
import { imageGenerationErrorMessage, imageGenerationProviderRequestId, } from './image-generation-error.js';
|
|
6
|
-
import { generatedPngBytes } from './image-generation-output.js';
|
|
7
|
-
import { imageGenerationSha256, } from './image-generation-request.js';
|
|
8
|
-
import { captureImageGenerationUsage, imageGenerationUsageEvidence, } from './image-generation-usage.js';
|
|
9
|
-
const timestamp = (dependencies) => ((dependencies.now ?? (() => new Date()))().toISOString());
|
|
10
|
-
export const reserveImageGeneration = async (args) => {
|
|
11
|
-
const dependencies = args.dependencies ?? {};
|
|
12
|
-
const attempt = {
|
|
13
|
-
schemaVersion: 4,
|
|
14
|
-
status: 'prepared',
|
|
15
|
-
idempotencyKey: args.request.idempotencyKey,
|
|
16
|
-
provider: args.preflight.provider,
|
|
17
|
-
model: args.preflight.model,
|
|
18
|
-
providerIdempotencyEnforced: args.preflight.provider === 'openai',
|
|
19
|
-
providerEvidence: args.preflight.provider === 'codex'
|
|
20
|
-
? { codexVersion: args.preflight.codexVersion }
|
|
21
|
-
: { keySource: args.preflight.keySource },
|
|
22
|
-
prompt: args.request.prompt,
|
|
23
|
-
promptSource: args.request.promptSource,
|
|
24
|
-
promptSha256: args.request.promptSha256,
|
|
25
|
-
reference: {
|
|
26
|
-
path: args.request.reference.path,
|
|
27
|
-
sha256: args.request.reference.sha256,
|
|
28
|
-
},
|
|
29
|
-
referenceMode: args.request.referenceMode,
|
|
30
|
-
outputPath: args.request.outputPath,
|
|
31
|
-
preparedAt: timestamp(dependencies),
|
|
32
|
-
...(args.batch ? { batch: args.batch } : {}),
|
|
33
|
-
};
|
|
34
|
-
await writeImageGenerationAttempt(args.request.stagedAttemptFile, attempt, true).catch((error) => {
|
|
35
|
-
if (error.code === 'EEXIST') {
|
|
36
|
-
throw new Error(`Image attempt evidence already exists at ${args.request.stagedAttemptFile}. Refusing to`
|
|
37
|
-
+ ' redispatch an ambiguous or completed request; inspect it and use a new output/'
|
|
38
|
-
+ 'idempotency key.');
|
|
39
|
-
}
|
|
40
|
-
throw error;
|
|
41
|
-
});
|
|
42
|
-
return { request: args.request, preflight: args.preflight, attempt };
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Re-enter an existing candidate identity without minting a new ledger entry.
|
|
46
|
-
* The caller must already have proved, from that entry, that redispatching it
|
|
47
|
-
* cannot double-spend.
|
|
48
|
-
*/
|
|
49
|
-
export const resumeReservedImageGeneration = (args) => ({
|
|
50
|
-
request: args.request,
|
|
51
|
-
preflight: args.preflight,
|
|
52
|
-
attempt: { ...args.attempt, status: 'prepared', error: undefined },
|
|
53
|
-
});
|
|
54
|
-
export const markImageGenerationDispatched = async (reserved, dependencies = {}) => {
|
|
55
|
-
reserved.attempt.status = 'dispatched';
|
|
56
|
-
reserved.attempt.dispatchedAt = timestamp(dependencies);
|
|
57
|
-
await writeImageGenerationAttempt(reserved.request.stagedAttemptFile, reserved.attempt);
|
|
58
|
-
};
|
|
59
|
-
export const failImageGenerationBeforeDispatch = async (reserved, error, dependencies = {}) => {
|
|
60
|
-
reserved.attempt.status = 'failed';
|
|
61
|
-
reserved.attempt.completedAt = timestamp(dependencies);
|
|
62
|
-
reserved.attempt.error = error;
|
|
63
|
-
await writeImageGenerationAttempt(reserved.request.stagedAttemptFile, reserved.attempt);
|
|
64
|
-
};
|
|
65
|
-
export const dispatchImageGeneration = async (reserved, dependencies = {}) => {
|
|
66
|
-
const { request, preflight, attempt } = reserved;
|
|
67
|
-
let providerRequestId;
|
|
68
|
-
attempt.providerStartedAt = timestamp(dependencies);
|
|
69
|
-
await writeImageGenerationAttempt(request.stagedAttemptFile, attempt);
|
|
70
|
-
try {
|
|
71
|
-
const agent = {
|
|
72
|
-
agent_id: `12ui-image-${imageGenerationSha256(request.idempotencyKey).slice(0, 16)}`,
|
|
73
|
-
model: preflight.model,
|
|
74
|
-
cwd: request.projectRoot,
|
|
75
|
-
retryOptions: { maxRetries: 0 },
|
|
76
|
-
};
|
|
77
|
-
const options = {
|
|
78
|
-
n: 1,
|
|
79
|
-
size: request.aspect,
|
|
80
|
-
quality: 'high',
|
|
81
|
-
source_images: [request.reference.dataUrl],
|
|
82
|
-
output_format: 'png',
|
|
83
|
-
idempotency_key: request.idempotencyKey,
|
|
84
|
-
request_id: request.idempotencyKey,
|
|
85
|
-
on_metadata: (metadata) => {
|
|
86
|
-
if (metadata.request_id && metadata.request_id !== request.idempotencyKey)
|
|
87
|
-
return;
|
|
88
|
-
if (metadata.provider_request_id)
|
|
89
|
-
providerRequestId = metadata.provider_request_id;
|
|
90
|
-
},
|
|
91
|
-
};
|
|
92
|
-
const captured = await captureImageGenerationUsage({
|
|
93
|
-
requestId: request.idempotencyKey,
|
|
94
|
-
run: async () => (dependencies.generate
|
|
95
|
-
? dependencies.generate(request.prompt, agent, options)
|
|
96
|
-
: preflight.provider === 'openai'
|
|
97
|
-
? new OpenAIProvider(preflight.apiKey).createImage(request.prompt, preflight.model, agent, options)
|
|
98
|
-
: ensembleImage(request.prompt, agent, options)),
|
|
99
|
-
});
|
|
100
|
-
const generated = captured.outcome.status === 'fulfilled'
|
|
101
|
-
? captured.outcome.value
|
|
102
|
-
: undefined;
|
|
103
|
-
attempt.usage = imageGenerationUsageEvidence({
|
|
104
|
-
provider: preflight.provider,
|
|
105
|
-
model: preflight.model,
|
|
106
|
-
requestId: request.idempotencyKey,
|
|
107
|
-
...(providerRequestId ? { providerRequestId } : {}),
|
|
108
|
-
entries: captured.entries,
|
|
109
|
-
providerCompleted: captured.outcome.status === 'fulfilled',
|
|
110
|
-
...(Array.isArray(generated) ? { generatedImageCount: generated.length } : {}),
|
|
111
|
-
});
|
|
112
|
-
if (providerRequestId)
|
|
113
|
-
attempt.providerRequestId = providerRequestId;
|
|
114
|
-
await writeImageGenerationAttempt(request.stagedAttemptFile, attempt);
|
|
115
|
-
if (captured.outcome.status === 'rejected')
|
|
116
|
-
throw captured.outcome.reason;
|
|
117
|
-
if (!Array.isArray(generated) || generated.length !== 1 || typeof generated[0] !== 'string') {
|
|
118
|
-
throw new Error('Image provider did not return exactly one image');
|
|
119
|
-
}
|
|
120
|
-
const bytes = await generatedPngBytes(generated[0]);
|
|
121
|
-
// Staged, not delivered. The caller materializes every candidate together
|
|
122
|
-
// once the batch is terminal, so no directory listing can catch a
|
|
123
|
-
// half-written set of candidates.
|
|
124
|
-
await writeFile(request.stagedOutputPath, bytes, { flag: 'wx' });
|
|
125
|
-
attempt.status = 'succeeded';
|
|
126
|
-
attempt.completedAt = timestamp(dependencies);
|
|
127
|
-
attempt.outputSha256 = imageGenerationSha256(bytes);
|
|
128
|
-
await writeImageGenerationAttempt(request.stagedAttemptFile, attempt);
|
|
129
|
-
return {
|
|
130
|
-
...(request.candidateId ? { candidateId: request.candidateId } : {}),
|
|
131
|
-
provider: attempt.provider,
|
|
132
|
-
model: attempt.model,
|
|
133
|
-
outputPath: request.outputPath,
|
|
134
|
-
outputSha256: attempt.outputSha256,
|
|
135
|
-
outputBytes: bytes.byteLength,
|
|
136
|
-
attemptFile: request.attemptFile,
|
|
137
|
-
providerStartedAt: attempt.providerStartedAt,
|
|
138
|
-
completedAt: attempt.completedAt,
|
|
139
|
-
usage: attempt.usage,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
providerRequestId ??= imageGenerationProviderRequestId(error);
|
|
144
|
-
if (providerRequestId) {
|
|
145
|
-
attempt.providerRequestId = providerRequestId;
|
|
146
|
-
if (attempt.usage && !attempt.usage.providerRequestId) {
|
|
147
|
-
attempt.usage.providerRequestId = providerRequestId;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
attempt.status = 'failed';
|
|
151
|
-
attempt.completedAt = timestamp(dependencies);
|
|
152
|
-
attempt.error = imageGenerationErrorMessage(error);
|
|
153
|
-
await writeImageGenerationAttempt(request.stagedAttemptFile, attempt);
|
|
154
|
-
throw new Error(`Image generation failed after dispatch with ${attempt.provider}; no provider fallback`
|
|
155
|
-
+ ` was attempted. Evidence: ${request.attemptFile}. ${attempt.error}`, { cause: error });
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
//# sourceMappingURL=image-generation-run.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-run.js","sourceRoot":"","sources":["../src/image-generation-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { type ImageGenerationAttempt } from './image-generation-evidence.js';
|
|
2
|
-
export declare const IMAGE_STAGING_DIRECTORY_NAME = ".12ui-image-staging";
|
|
3
|
-
export type ImageGenerationStagedPaths = {
|
|
4
|
-
stagingDirectory: string;
|
|
5
|
-
stagedOutputPath: string;
|
|
6
|
-
stagedAttemptFile: string;
|
|
7
|
-
};
|
|
8
|
-
export declare const imageGenerationStagedPaths: (outputPath: string) => ImageGenerationStagedPaths;
|
|
9
|
-
export declare const ensureImageGenerationStaging: (outputPath: string) => Promise<void>;
|
|
10
|
-
export declare const readStagedImageGenerationAttempt: (outputPath: string) => Promise<ImageGenerationAttempt | undefined>;
|
|
11
|
-
export declare const readImageGenerationAttemptFile: (file: string) => Promise<ImageGenerationAttempt | undefined>;
|
|
12
|
-
export type ImageGenerationMaterialization = {
|
|
13
|
-
outputPath: string;
|
|
14
|
-
attemptFile: string;
|
|
15
|
-
movedOutput: boolean;
|
|
16
|
-
movedAttempt: boolean;
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* Move one candidate's staged artifacts into their destination. The PNG lands
|
|
20
|
-
* before its evidence so that a crash between the two renames leaves the
|
|
21
|
-
* staged ledger in place, which is what lets a later resume prove the work was
|
|
22
|
-
* already paid for instead of buying it again.
|
|
23
|
-
*/
|
|
24
|
-
export declare const materializeImageGeneration: (outputPath: string) => Promise<ImageGenerationMaterialization>;
|
|
25
|
-
//# sourceMappingURL=image-generation-staging.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-staging.d.ts","sourceRoot":"","sources":["../src/image-generation-staging.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAW/F,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAElE,MAAM,MAAM,0BAA0B,GAAG;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,YAAY,MAAM,KAAG,0BAQ/D,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,IAAI,CAEnF,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAC3C,YAAY,MAAM,KACjB,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAE5C,CAAC;AAEF,eAAO,MAAM,8BAA8B,GACzC,MAAM,MAAM,KACX,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAkB5C,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GACrC,YAAY,MAAM,KACjB,OAAO,CAAC,8BAA8B,CA0BxC,CAAC"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, rename, rmdir } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { imageGenerationPathExists } from './image-generation-fs.js';
|
|
4
|
-
import { imageAttemptPath } from './image-generation-evidence.js';
|
|
5
|
-
// Every in-flight candidate — its PNG bytes and its attempt ledger — is written
|
|
6
|
-
// inside a hidden staging directory and moved into the destination directory
|
|
7
|
-
// only once the batch is terminal. A caller listing the candidates directory
|
|
8
|
-
// therefore never observes the half-written state that made eleven benchmark
|
|
9
|
-
// runs declare failure roughly thirty seconds before valid candidates landed.
|
|
10
|
-
//
|
|
11
|
-
// The staging directory is a child of the destination directory on purpose:
|
|
12
|
-
// same-directory renames are same-filesystem, so materialization is atomic and
|
|
13
|
-
// can never fail with EXDEV the way a system-temp staging path could.
|
|
14
|
-
export const IMAGE_STAGING_DIRECTORY_NAME = '.12ui-image-staging';
|
|
15
|
-
export const imageGenerationStagedPaths = (outputPath) => {
|
|
16
|
-
const stagingDirectory = path.join(path.dirname(outputPath), IMAGE_STAGING_DIRECTORY_NAME);
|
|
17
|
-
const base = path.basename(outputPath);
|
|
18
|
-
return {
|
|
19
|
-
stagingDirectory,
|
|
20
|
-
stagedOutputPath: path.join(stagingDirectory, `${base}.part`),
|
|
21
|
-
stagedAttemptFile: path.join(stagingDirectory, `${base}.attempt.json`),
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
export const ensureImageGenerationStaging = async (outputPath) => {
|
|
25
|
-
await mkdir(imageGenerationStagedPaths(outputPath).stagingDirectory, { recursive: true });
|
|
26
|
-
};
|
|
27
|
-
export const readStagedImageGenerationAttempt = async (outputPath) => (readImageGenerationAttemptFile(imageGenerationStagedPaths(outputPath).stagedAttemptFile));
|
|
28
|
-
export const readImageGenerationAttemptFile = async (file) => {
|
|
29
|
-
let source;
|
|
30
|
-
try {
|
|
31
|
-
source = await readFile(file, 'utf8');
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
if (error.code === 'ENOENT')
|
|
35
|
-
return undefined;
|
|
36
|
-
throw error;
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
const value = JSON.parse(source);
|
|
40
|
-
if (typeof value !== 'object' || value === null)
|
|
41
|
-
return undefined;
|
|
42
|
-
return value;
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
// Unreadable evidence is still evidence that a request was reserved here.
|
|
46
|
-
// Callers must treat it as "something happened" rather than "nothing did",
|
|
47
|
-
// so surface a minimal record instead of pretending the file is absent.
|
|
48
|
-
return { status: 'dispatched' };
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* Move one candidate's staged artifacts into their destination. The PNG lands
|
|
53
|
-
* before its evidence so that a crash between the two renames leaves the
|
|
54
|
-
* staged ledger in place, which is what lets a later resume prove the work was
|
|
55
|
-
* already paid for instead of buying it again.
|
|
56
|
-
*/
|
|
57
|
-
export const materializeImageGeneration = async (outputPath) => {
|
|
58
|
-
const attemptFile = imageAttemptPath(outputPath);
|
|
59
|
-
const { stagingDirectory, stagedOutputPath, stagedAttemptFile } = (imageGenerationStagedPaths(outputPath));
|
|
60
|
-
let movedOutput = false;
|
|
61
|
-
let movedAttempt = false;
|
|
62
|
-
if (await imageGenerationPathExists(stagedOutputPath)) {
|
|
63
|
-
if (await imageGenerationPathExists(outputPath)) {
|
|
64
|
-
throw new Error(`Refusing to overwrite an existing candidate at ${outputPath} with staged bytes from`
|
|
65
|
-
+ ` ${stagedOutputPath}; inspect both before continuing.`);
|
|
66
|
-
}
|
|
67
|
-
await rename(stagedOutputPath, outputPath);
|
|
68
|
-
movedOutput = true;
|
|
69
|
-
}
|
|
70
|
-
if (await imageGenerationPathExists(stagedAttemptFile)) {
|
|
71
|
-
await rename(stagedAttemptFile, attemptFile);
|
|
72
|
-
movedAttempt = true;
|
|
73
|
-
}
|
|
74
|
-
// Leave nothing behind once the last candidate in this directory is
|
|
75
|
-
// delivered. Anything still staged means work that is not delivered yet, and
|
|
76
|
-
// rmdir refuses a non-empty directory, so the check is the guarantee.
|
|
77
|
-
await rmdir(stagingDirectory).catch(() => undefined);
|
|
78
|
-
return { outputPath, attemptFile, movedOutput, movedAttempt };
|
|
79
|
-
};
|
|
80
|
-
//# sourceMappingURL=image-generation-staging.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-staging.js","sourceRoot":"","sources":["../src/image-generation-staging.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { type ModelUsage } from '@just-every/ensemble';
|
|
2
|
-
export type ImageGenerationUsageEntry = {
|
|
3
|
-
model?: string;
|
|
4
|
-
inputTokens?: number;
|
|
5
|
-
inputTokensByModality?: {
|
|
6
|
-
text: number;
|
|
7
|
-
image: number;
|
|
8
|
-
};
|
|
9
|
-
outputTokens?: number;
|
|
10
|
-
totalTokens?: number;
|
|
11
|
-
cachedTokens?: number;
|
|
12
|
-
cacheWriteTokens?: number;
|
|
13
|
-
cacheWrite1hTokens?: number;
|
|
14
|
-
imageCount?: number;
|
|
15
|
-
inputModality?: ModelUsage['input_modality'];
|
|
16
|
-
outputModality?: ModelUsage['output_modality'];
|
|
17
|
-
costUsd?: number;
|
|
18
|
-
estimatedCostUsd?: number;
|
|
19
|
-
};
|
|
20
|
-
export type ImageGenerationUsageEvidence = {
|
|
21
|
-
requestId: string;
|
|
22
|
-
providerRequestId?: string;
|
|
23
|
-
billing: 'openai-api' | 'codex-included-quota';
|
|
24
|
-
method: 'provider-reported-token-usage' | 'provider-estimated-output-only' | 'incomplete-provider-token-usage' | 'missing-provider-usage' | 'provider-reported-included-quota' | 'selected-provider-included-quota';
|
|
25
|
-
completeness: 'full' | 'partial' | 'missing' | 'included-quota';
|
|
26
|
-
costUsd: number | null;
|
|
27
|
-
estimatedCostUsd?: number;
|
|
28
|
-
inputTokens?: number;
|
|
29
|
-
inputTokensByModality?: {
|
|
30
|
-
text: number;
|
|
31
|
-
image: number;
|
|
32
|
-
};
|
|
33
|
-
outputTokens?: number;
|
|
34
|
-
totalTokens?: number;
|
|
35
|
-
cachedTokens?: number;
|
|
36
|
-
cacheWriteTokens?: number;
|
|
37
|
-
cacheWrite1hTokens?: number;
|
|
38
|
-
imageCount?: number;
|
|
39
|
-
entries: ImageGenerationUsageEntry[];
|
|
40
|
-
};
|
|
41
|
-
export type ImageGenerationBatchAccounting = {
|
|
42
|
-
billing: ImageGenerationUsageEvidence['billing'];
|
|
43
|
-
method: 'sum-candidate-evidence';
|
|
44
|
-
completeness: 'full' | 'partial' | 'missing' | 'included-quota';
|
|
45
|
-
candidateCount: number;
|
|
46
|
-
fullCostCandidateCount: number;
|
|
47
|
-
includedQuotaCandidateCount: number;
|
|
48
|
-
incompleteCandidateCount: number;
|
|
49
|
-
costUsd: number | null;
|
|
50
|
-
recordedCostUsd: number | null;
|
|
51
|
-
};
|
|
52
|
-
export type CapturedImageGeneration<T> = {
|
|
53
|
-
outcome: PromiseSettledResult<T>;
|
|
54
|
-
entries: ModelUsage[];
|
|
55
|
-
};
|
|
56
|
-
/**
|
|
57
|
-
* Capture usage for one provider request without serializing other image calls.
|
|
58
|
-
* Ensemble emits the caller-supplied request_id synchronously to every listener,
|
|
59
|
-
* so exact request filtering keeps parallel candidates isolated.
|
|
60
|
-
*/
|
|
61
|
-
export declare const captureImageGenerationUsage: <T>(args: {
|
|
62
|
-
requestId: string;
|
|
63
|
-
run: () => Promise<T>;
|
|
64
|
-
}) => Promise<CapturedImageGeneration<T>>;
|
|
65
|
-
export declare const imageGenerationUsageEvidence: (args: {
|
|
66
|
-
provider: "codex" | "openai";
|
|
67
|
-
model: "codex-gpt-image-2" | "gpt-image-2";
|
|
68
|
-
requestId: string;
|
|
69
|
-
providerRequestId?: string;
|
|
70
|
-
entries: ModelUsage[];
|
|
71
|
-
providerCompleted: boolean;
|
|
72
|
-
generatedImageCount?: number;
|
|
73
|
-
}) => ImageGenerationUsageEvidence;
|
|
74
|
-
export declare const summarizeImageGenerationUsage: (usages: Array<ImageGenerationUsageEvidence | undefined>, provider: "codex" | "openai") => ImageGenerationBatchAccounting;
|
|
75
|
-
//# sourceMappingURL=image-generation-usage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-usage.d.ts","sourceRoot":"","sources":["../src/image-generation-usage.ts"],"names":[],"mappings":"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"}
|