lootforge 0.3.0
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/CHANGELOG.md +87 -0
- package/README.md +764 -0
- package/bin/lootforge.js +28 -0
- package/dist/benchmarks/coarseToFineCost.d.ts +21 -0
- package/dist/benchmarks/coarseToFineCost.js +49 -0
- package/dist/benchmarks/coarseToFineCost.js.map +1 -0
- package/dist/checks/boundaryMetrics.d.ts +12 -0
- package/dist/checks/boundaryMetrics.js +102 -0
- package/dist/checks/boundaryMetrics.js.map +1 -0
- package/dist/checks/candidateScore.d.ts +11 -0
- package/dist/checks/candidateScore.js +462 -0
- package/dist/checks/candidateScore.js.map +1 -0
- package/dist/checks/commandParser.d.ts +5 -0
- package/dist/checks/commandParser.js +99 -0
- package/dist/checks/commandParser.js.map +1 -0
- package/dist/checks/consistencyOutliers.d.ts +42 -0
- package/dist/checks/consistencyOutliers.js +156 -0
- package/dist/checks/consistencyOutliers.js.map +1 -0
- package/dist/checks/imageAcceptance.d.ts +67 -0
- package/dist/checks/imageAcceptance.js +967 -0
- package/dist/checks/imageAcceptance.js.map +1 -0
- package/dist/checks/packInvariants.d.ts +56 -0
- package/dist/checks/packInvariants.js +1064 -0
- package/dist/checks/packInvariants.js.map +1 -0
- package/dist/checks/softAdapters.d.ts +25 -0
- package/dist/checks/softAdapters.js +275 -0
- package/dist/checks/softAdapters.js.map +1 -0
- package/dist/checks/vlmGate.d.ts +8 -0
- package/dist/checks/vlmGate.js +200 -0
- package/dist/checks/vlmGate.js.map +1 -0
- package/dist/cli/commands/atlas.d.ts +5 -0
- package/dist/cli/commands/atlas.js +18 -0
- package/dist/cli/commands/atlas.js.map +1 -0
- package/dist/cli/commands/eval.d.ts +6 -0
- package/dist/cli/commands/eval.js +23 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +18 -0
- package/dist/cli/commands/generate.js +66 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +15 -0
- package/dist/cli/commands/init.js +146 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/package.d.ts +6 -0
- package/dist/cli/commands/package.js +27 -0
- package/dist/cli/commands/package.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +16 -0
- package/dist/cli/commands/plan.js +49 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/process.d.ts +14 -0
- package/dist/cli/commands/process.js +29 -0
- package/dist/cli/commands/process.js.map +1 -0
- package/dist/cli/commands/regenerate.d.ts +29 -0
- package/dist/cli/commands/regenerate.js +244 -0
- package/dist/cli/commands/regenerate.js.map +1 -0
- package/dist/cli/commands/review.d.ts +5 -0
- package/dist/cli/commands/review.js +18 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/select.d.ts +6 -0
- package/dist/cli/commands/select.js +21 -0
- package/dist/cli/commands/select.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +16 -0
- package/dist/cli/commands/serve.js +100 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +17 -0
- package/dist/cli/commands/validate.js +108 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +157 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parseArgs.d.ts +3 -0
- package/dist/cli/parseArgs.js +37 -0
- package/dist/cli/parseArgs.js.map +1 -0
- package/dist/contracts/stageArtifacts.d.ts +4031 -0
- package/dist/contracts/stageArtifacts.js +663 -0
- package/dist/contracts/stageArtifacts.js.map +1 -0
- package/dist/manifest/load.d.ts +3 -0
- package/dist/manifest/load.js +50 -0
- package/dist/manifest/load.js.map +1 -0
- package/dist/manifest/normalize-palette.d.ts +17 -0
- package/dist/manifest/normalize-palette.js +235 -0
- package/dist/manifest/normalize-palette.js.map +1 -0
- package/dist/manifest/normalize-policy.d.ts +48 -0
- package/dist/manifest/normalize-policy.js +239 -0
- package/dist/manifest/normalize-policy.js.map +1 -0
- package/dist/manifest/normalize-prompt.d.ts +14 -0
- package/dist/manifest/normalize-prompt.js +73 -0
- package/dist/manifest/normalize-prompt.js.map +1 -0
- package/dist/manifest/normalize-target.d.ts +49 -0
- package/dist/manifest/normalize-target.js +542 -0
- package/dist/manifest/normalize-target.js.map +1 -0
- package/dist/manifest/schema.d.ts +7570 -0
- package/dist/manifest/schema.js +373 -0
- package/dist/manifest/schema.js.map +1 -0
- package/dist/manifest/semantic-validation.d.ts +4 -0
- package/dist/manifest/semantic-validation.js +526 -0
- package/dist/manifest/semantic-validation.js.map +1 -0
- package/dist/manifest/types.d.ts +263 -0
- package/dist/manifest/types.js +2 -0
- package/dist/manifest/types.js.map +1 -0
- package/dist/manifest/validate.d.ts +12 -0
- package/dist/manifest/validate.js +221 -0
- package/dist/manifest/validate.js.map +1 -0
- package/dist/output/assetPackManifest.d.ts +19 -0
- package/dist/output/assetPackManifest.js +20 -0
- package/dist/output/assetPackManifest.js.map +1 -0
- package/dist/output/catalog.d.ts +60 -0
- package/dist/output/catalog.js +107 -0
- package/dist/output/catalog.js.map +1 -0
- package/dist/output/contactSheet.d.ts +13 -0
- package/dist/output/contactSheet.js +124 -0
- package/dist/output/contactSheet.js.map +1 -0
- package/dist/output/phaserManifest.d.ts +8 -0
- package/dist/output/phaserManifest.js +25 -0
- package/dist/output/phaserManifest.js.map +1 -0
- package/dist/output/pixiManifest.d.ts +8 -0
- package/dist/output/pixiManifest.js +37 -0
- package/dist/output/pixiManifest.js.map +1 -0
- package/dist/output/provenance.d.ts +121 -0
- package/dist/output/provenance.js +10 -0
- package/dist/output/provenance.js.map +1 -0
- package/dist/output/runtimeManifests.d.ts +21 -0
- package/dist/output/runtimeManifests.js +82 -0
- package/dist/output/runtimeManifests.js.map +1 -0
- package/dist/output/unityImportManifest.d.ts +10 -0
- package/dist/output/unityImportManifest.js +58 -0
- package/dist/output/unityImportManifest.js.map +1 -0
- package/dist/output/zip.d.ts +5 -0
- package/dist/output/zip.js +68 -0
- package/dist/output/zip.js.map +1 -0
- package/dist/pipeline/atlas.d.ts +33 -0
- package/dist/pipeline/atlas.js +286 -0
- package/dist/pipeline/atlas.js.map +1 -0
- package/dist/pipeline/eval.d.ts +104 -0
- package/dist/pipeline/eval.js +246 -0
- package/dist/pipeline/eval.js.map +1 -0
- package/dist/pipeline/generate.d.ts +44 -0
- package/dist/pipeline/generate.js +1088 -0
- package/dist/pipeline/generate.js.map +1 -0
- package/dist/pipeline/package.d.ts +18 -0
- package/dist/pipeline/package.js +218 -0
- package/dist/pipeline/package.js.map +1 -0
- package/dist/pipeline/process.d.ts +15 -0
- package/dist/pipeline/process.js +776 -0
- package/dist/pipeline/process.js.map +1 -0
- package/dist/pipeline/review.d.ts +10 -0
- package/dist/pipeline/review.js +341 -0
- package/dist/pipeline/review.js.map +1 -0
- package/dist/pipeline/seamHeal.d.ts +2 -0
- package/dist/pipeline/seamHeal.js +70 -0
- package/dist/pipeline/seamHeal.js.map +1 -0
- package/dist/pipeline/select.d.ts +39 -0
- package/dist/pipeline/select.js +79 -0
- package/dist/pipeline/select.js.map +1 -0
- package/dist/providers/job.d.ts +29 -0
- package/dist/providers/job.js +113 -0
- package/dist/providers/job.js.map +1 -0
- package/dist/providers/localDiffusion.d.ts +28 -0
- package/dist/providers/localDiffusion.js +235 -0
- package/dist/providers/localDiffusion.js.map +1 -0
- package/dist/providers/nano.d.ts +36 -0
- package/dist/providers/nano.js +402 -0
- package/dist/providers/nano.js.map +1 -0
- package/dist/providers/openai.d.ts +37 -0
- package/dist/providers/openai.js +378 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/policy.d.ts +9 -0
- package/dist/providers/policy.js +192 -0
- package/dist/providers/policy.js.map +1 -0
- package/dist/providers/prompt.d.ts +3 -0
- package/dist/providers/prompt.js +63 -0
- package/dist/providers/prompt.js.map +1 -0
- package/dist/providers/registry.d.ts +24 -0
- package/dist/providers/registry.js +92 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/runtime.d.ts +15 -0
- package/dist/providers/runtime.js +101 -0
- package/dist/providers/runtime.js.map +1 -0
- package/dist/providers/runtimeConfig.d.ts +20 -0
- package/dist/providers/runtimeConfig.js +146 -0
- package/dist/providers/runtimeConfig.js.map +1 -0
- package/dist/providers/types-core.d.ts +514 -0
- package/dist/providers/types-core.js +60 -0
- package/dist/providers/types-core.js.map +1 -0
- package/dist/providers/types.d.ts +4 -0
- package/dist/providers/types.js +5 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/service/generationRequest.d.ts +58 -0
- package/dist/service/generationRequest.js +203 -0
- package/dist/service/generationRequest.js.map +1 -0
- package/dist/service/providerCapabilities.d.ts +40 -0
- package/dist/service/providerCapabilities.js +114 -0
- package/dist/service/providerCapabilities.js.map +1 -0
- package/dist/service/server.d.ts +31 -0
- package/dist/service/server.js +774 -0
- package/dist/service/server.js.map +1 -0
- package/dist/shared/errors.d.ts +13 -0
- package/dist/shared/errors.js +24 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/fs.d.ts +6 -0
- package/dist/shared/fs.js +30 -0
- package/dist/shared/fs.js.map +1 -0
- package/dist/shared/image.d.ts +25 -0
- package/dist/shared/image.js +136 -0
- package/dist/shared/image.js.map +1 -0
- package/dist/shared/paths.d.ts +30 -0
- package/dist/shared/paths.js +103 -0
- package/dist/shared/paths.js.map +1 -0
- package/dist/shared/schemas.d.ts +209 -0
- package/dist/shared/schemas.js +93 -0
- package/dist/shared/schemas.js.map +1 -0
- package/dist/shared/typeGuards.d.ts +1 -0
- package/dist/shared/typeGuards.js +4 -0
- package/dist/shared/typeGuards.js.map +1 -0
- package/dist/shared/zod.d.ts +1 -0
- package/dist/shared/zod.js +14 -0
- package/dist/shared/zod.js.map +1 -0
- package/dist/showcase/format.d.ts +9 -0
- package/dist/showcase/format.js +61 -0
- package/dist/showcase/format.js.map +1 -0
- package/dist/showcase/panelRenderer.d.ts +59 -0
- package/dist/showcase/panelRenderer.js +294 -0
- package/dist/showcase/panelRenderer.js.map +1 -0
- package/dist/showcase/releaseConfig.d.ts +233 -0
- package/dist/showcase/releaseConfig.js +75 -0
- package/dist/showcase/releaseConfig.js.map +1 -0
- package/dist/showcase/releaseEvidence.d.ts +25 -0
- package/dist/showcase/releaseEvidence.js +540 -0
- package/dist/showcase/releaseEvidence.js.map +1 -0
- package/dist/showcase/releaseEvidenceSchema.d.ts +1611 -0
- package/dist/showcase/releaseEvidenceSchema.js +165 -0
- package/dist/showcase/releaseEvidenceSchema.js.map +1 -0
- package/dist/showcase/scenarioRenderer.d.ts +19 -0
- package/dist/showcase/scenarioRenderer.js +488 -0
- package/dist/showcase/scenarioRenderer.js.map +1 -0
- package/docs/ADAPTER_CONTRACT.md +141 -0
- package/docs/ENGINE_TARGETING.md +86 -0
- package/docs/MANIFEST_POLICY_COVERAGE.md +130 -0
- package/docs/RELEASE_WORKFLOW.md +117 -0
- package/docs/ROADMAP.md +411 -0
- package/docs/ROADMAP_ISSUES.md +244 -0
- package/docs/SERVICE_MODE.md +137 -0
- package/docs/manifest-schema.md +254 -0
- package/package.json +70 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { type AuxiliaryMapPolicy, type ControlMode, type FacingDirection, type GenerationMode, type GenerationPolicy, type PalettePolicy, type PlannedTarget, type PlannedTargetsIndex, type PostProcessPolicy, type PromptSpec, type ProviderName, type SeamHealPolicy, type TargetKind, type TargetScoreWeights, type TargetEditSpec, type VisualStylePolicy, type WrapGridPolicy } from "../providers/types.js";
|
|
2
|
+
export type ManifestVersion = "next";
|
|
3
|
+
export interface ManifestPack {
|
|
4
|
+
id: string;
|
|
5
|
+
version: string;
|
|
6
|
+
license?: string;
|
|
7
|
+
author?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ManifestProviderConfig {
|
|
10
|
+
model?: string;
|
|
11
|
+
endpoint?: string;
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
maxRetries?: number;
|
|
14
|
+
minDelayMs?: number;
|
|
15
|
+
defaultConcurrency?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ManifestLocalProviderConfig extends ManifestProviderConfig {
|
|
18
|
+
baseUrl?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ManifestProviders {
|
|
21
|
+
default?: ProviderName;
|
|
22
|
+
openai?: ManifestProviderConfig;
|
|
23
|
+
nano?: ManifestProviderConfig;
|
|
24
|
+
local?: ManifestLocalProviderConfig;
|
|
25
|
+
}
|
|
26
|
+
export interface ManifestStyleKit {
|
|
27
|
+
id: string;
|
|
28
|
+
rulesPath: string;
|
|
29
|
+
palettePath?: string;
|
|
30
|
+
referenceImages: string[];
|
|
31
|
+
styleReferenceImages?: string[];
|
|
32
|
+
lightingModel: string;
|
|
33
|
+
negativeRulesPath?: string;
|
|
34
|
+
loraPath?: string;
|
|
35
|
+
loraStrength?: number;
|
|
36
|
+
visualPolicy?: VisualStylePolicy;
|
|
37
|
+
}
|
|
38
|
+
export interface ManifestConsistencyGroup {
|
|
39
|
+
id: string;
|
|
40
|
+
description?: string;
|
|
41
|
+
styleKitId?: string;
|
|
42
|
+
referenceImages: string[];
|
|
43
|
+
}
|
|
44
|
+
export interface ManifestTargetTemplate {
|
|
45
|
+
id: string;
|
|
46
|
+
dependsOn?: string[];
|
|
47
|
+
styleReferenceFrom?: string[];
|
|
48
|
+
}
|
|
49
|
+
export interface ManifestEvaluationProfile {
|
|
50
|
+
id: string;
|
|
51
|
+
hardGates?: {
|
|
52
|
+
requireAlpha?: boolean;
|
|
53
|
+
maxFileSizeKB?: number;
|
|
54
|
+
seamThreshold?: number;
|
|
55
|
+
seamStripPx?: number;
|
|
56
|
+
paletteComplianceMin?: number;
|
|
57
|
+
alphaHaloRiskMax?: number;
|
|
58
|
+
alphaStrayNoiseMax?: number;
|
|
59
|
+
alphaEdgeSharpnessMin?: number;
|
|
60
|
+
mattingHiddenRgbLeakMax?: number;
|
|
61
|
+
mattingMaskConsistencyMin?: number;
|
|
62
|
+
mattingSemiTransparencyRatioMax?: number;
|
|
63
|
+
packTextureBudgetMB?: number;
|
|
64
|
+
spritesheetSilhouetteDriftMax?: number;
|
|
65
|
+
spritesheetAnchorDriftMax?: number;
|
|
66
|
+
spritesheetIdentityDriftMax?: number;
|
|
67
|
+
spritesheetPoseDriftMax?: number;
|
|
68
|
+
spritesheetWalkLowerBodyMotionMin?: number;
|
|
69
|
+
spritesheetWalkFootMotionMin?: number;
|
|
70
|
+
spritesheetWalkFootToUpperMotionRatioMin?: number;
|
|
71
|
+
};
|
|
72
|
+
consistencyGroupScoring?: {
|
|
73
|
+
warningThreshold?: number;
|
|
74
|
+
penaltyThreshold?: number;
|
|
75
|
+
penaltyWeight?: number;
|
|
76
|
+
};
|
|
77
|
+
scoreWeights?: TargetScoreWeights;
|
|
78
|
+
}
|
|
79
|
+
export interface ManifestScoringProfile {
|
|
80
|
+
id: string;
|
|
81
|
+
scoreWeights?: TargetScoreWeights;
|
|
82
|
+
kindScoreWeights?: Partial<Record<TargetKind, TargetScoreWeights>>;
|
|
83
|
+
}
|
|
84
|
+
export interface ManifestAcceptance {
|
|
85
|
+
size?: string;
|
|
86
|
+
alpha?: boolean;
|
|
87
|
+
maxFileSizeKB?: number;
|
|
88
|
+
}
|
|
89
|
+
export interface ManifestRuntimeSpec {
|
|
90
|
+
alphaRequired?: boolean;
|
|
91
|
+
previewWidth?: number;
|
|
92
|
+
previewHeight?: number;
|
|
93
|
+
anchorX?: number;
|
|
94
|
+
anchorY?: number;
|
|
95
|
+
}
|
|
96
|
+
export interface ManifestGenerationPolicy extends GenerationPolicy {
|
|
97
|
+
draftQuality?: string;
|
|
98
|
+
finalQuality?: string;
|
|
99
|
+
}
|
|
100
|
+
export interface ManifestPostProcessOperations {
|
|
101
|
+
trim?: {
|
|
102
|
+
enabled?: boolean;
|
|
103
|
+
threshold?: number;
|
|
104
|
+
};
|
|
105
|
+
pad?: {
|
|
106
|
+
pixels: number;
|
|
107
|
+
extrude?: boolean;
|
|
108
|
+
background?: string;
|
|
109
|
+
};
|
|
110
|
+
quantize?: {
|
|
111
|
+
colors: number;
|
|
112
|
+
dither?: number;
|
|
113
|
+
};
|
|
114
|
+
outline?: {
|
|
115
|
+
size: number;
|
|
116
|
+
color?: string;
|
|
117
|
+
};
|
|
118
|
+
resizeVariants?: {
|
|
119
|
+
name: string;
|
|
120
|
+
size: string;
|
|
121
|
+
algorithm?: string;
|
|
122
|
+
}[];
|
|
123
|
+
pixelPerfect?: {
|
|
124
|
+
enabled?: boolean;
|
|
125
|
+
scale?: number;
|
|
126
|
+
};
|
|
127
|
+
smartCrop?: {
|
|
128
|
+
enabled?: boolean;
|
|
129
|
+
mode?: "alpha-bounds" | "center";
|
|
130
|
+
padding?: number;
|
|
131
|
+
};
|
|
132
|
+
emitVariants?: {
|
|
133
|
+
raw?: boolean;
|
|
134
|
+
pixel?: boolean;
|
|
135
|
+
styleRef?: boolean;
|
|
136
|
+
layerColor?: boolean;
|
|
137
|
+
layerMatte?: boolean;
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
export interface ManifestPostProcess {
|
|
141
|
+
resizeTo?: string | number;
|
|
142
|
+
algorithm?: string;
|
|
143
|
+
stripMetadata?: boolean;
|
|
144
|
+
pngPaletteColors?: number;
|
|
145
|
+
operations?: ManifestPostProcessOperations;
|
|
146
|
+
}
|
|
147
|
+
export interface ManifestAtlasGroupOptions {
|
|
148
|
+
padding?: number;
|
|
149
|
+
trim?: boolean;
|
|
150
|
+
bleed?: number;
|
|
151
|
+
multipack?: boolean;
|
|
152
|
+
maxWidth?: number;
|
|
153
|
+
maxHeight?: number;
|
|
154
|
+
}
|
|
155
|
+
export interface ManifestAtlasOptions extends ManifestAtlasGroupOptions {
|
|
156
|
+
groups?: Record<string, ManifestAtlasGroupOptions>;
|
|
157
|
+
}
|
|
158
|
+
export type ManifestPrompt = string | PromptSpec;
|
|
159
|
+
export interface ManifestSpriteAnimation {
|
|
160
|
+
count: number;
|
|
161
|
+
prompt: ManifestPrompt;
|
|
162
|
+
fps?: number;
|
|
163
|
+
loop?: boolean;
|
|
164
|
+
facing?: FacingDirection;
|
|
165
|
+
pivot?: {
|
|
166
|
+
x: number;
|
|
167
|
+
y: number;
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export interface ManifestTarget {
|
|
171
|
+
id: string;
|
|
172
|
+
kind: string;
|
|
173
|
+
out: string;
|
|
174
|
+
templateId?: string;
|
|
175
|
+
dependsOn?: string[];
|
|
176
|
+
styleReferenceFrom?: string[];
|
|
177
|
+
atlasGroup?: string;
|
|
178
|
+
styleKitId: string;
|
|
179
|
+
consistencyGroup: string;
|
|
180
|
+
evaluationProfileId: string;
|
|
181
|
+
generationMode?: GenerationMode;
|
|
182
|
+
scoringProfile?: string;
|
|
183
|
+
facing?: FacingDirection;
|
|
184
|
+
tileable?: boolean;
|
|
185
|
+
seamThreshold?: number;
|
|
186
|
+
seamStripPx?: number;
|
|
187
|
+
seamHeal?: SeamHealPolicy;
|
|
188
|
+
wrapGrid?: WrapGridPolicy;
|
|
189
|
+
palette?: PalettePolicy;
|
|
190
|
+
prompt?: ManifestPrompt;
|
|
191
|
+
promptSpec?: PromptSpec;
|
|
192
|
+
generationPolicy?: ManifestGenerationPolicy;
|
|
193
|
+
postProcess?: ManifestPostProcess;
|
|
194
|
+
acceptance?: ManifestAcceptance;
|
|
195
|
+
runtimeSpec?: ManifestRuntimeSpec;
|
|
196
|
+
provider?: ProviderName;
|
|
197
|
+
model?: string;
|
|
198
|
+
controlImage?: string;
|
|
199
|
+
controlMode?: ControlMode;
|
|
200
|
+
edit?: TargetEditSpec;
|
|
201
|
+
auxiliaryMaps?: AuxiliaryMapPolicy;
|
|
202
|
+
animations?: Record<string, ManifestSpriteAnimation>;
|
|
203
|
+
}
|
|
204
|
+
export interface ManifestV2 {
|
|
205
|
+
version: ManifestVersion;
|
|
206
|
+
pack: ManifestPack;
|
|
207
|
+
providers: ManifestProviders;
|
|
208
|
+
styleKits: ManifestStyleKit[];
|
|
209
|
+
targetTemplates?: ManifestTargetTemplate[];
|
|
210
|
+
consistencyGroups?: ManifestConsistencyGroup[];
|
|
211
|
+
evaluationProfiles: ManifestEvaluationProfile[];
|
|
212
|
+
scoringProfiles?: ManifestScoringProfile[];
|
|
213
|
+
atlas?: ManifestAtlasOptions;
|
|
214
|
+
targets: ManifestTarget[];
|
|
215
|
+
}
|
|
216
|
+
export interface ManifestSource {
|
|
217
|
+
manifestPath: string;
|
|
218
|
+
raw: string;
|
|
219
|
+
data: unknown;
|
|
220
|
+
}
|
|
221
|
+
export interface LoadedManifest extends ManifestSource {
|
|
222
|
+
manifest: ManifestV2;
|
|
223
|
+
}
|
|
224
|
+
export type ValidationIssueLevel = "error" | "warning";
|
|
225
|
+
export interface ValidationIssue {
|
|
226
|
+
level: ValidationIssueLevel;
|
|
227
|
+
code: string;
|
|
228
|
+
path: string;
|
|
229
|
+
message: string;
|
|
230
|
+
}
|
|
231
|
+
export interface ValidationReport {
|
|
232
|
+
manifestPath: string;
|
|
233
|
+
generatedAt: string;
|
|
234
|
+
ok: boolean;
|
|
235
|
+
errors: number;
|
|
236
|
+
warnings: number;
|
|
237
|
+
targetCount: number;
|
|
238
|
+
issues: ValidationIssue[];
|
|
239
|
+
}
|
|
240
|
+
export interface ManifestValidationResult {
|
|
241
|
+
report: ValidationReport;
|
|
242
|
+
manifest?: ManifestV2;
|
|
243
|
+
}
|
|
244
|
+
export interface PlannedProviderJobSpec {
|
|
245
|
+
targetId: string;
|
|
246
|
+
out: string;
|
|
247
|
+
provider: ProviderName;
|
|
248
|
+
model?: string;
|
|
249
|
+
prompt: string;
|
|
250
|
+
promptSpec: PromptSpec;
|
|
251
|
+
generationPolicy: GenerationPolicy;
|
|
252
|
+
postProcess?: PostProcessPolicy;
|
|
253
|
+
styleKitId?: string;
|
|
254
|
+
consistencyGroup?: string;
|
|
255
|
+
evaluationProfileId?: string;
|
|
256
|
+
}
|
|
257
|
+
export interface PlanArtifacts {
|
|
258
|
+
targets: PlannedTarget[];
|
|
259
|
+
targetsIndex: PlannedTargetsIndex;
|
|
260
|
+
openaiJobs: PlannedProviderJobSpec[];
|
|
261
|
+
nanoJobs: PlannedProviderJobSpec[];
|
|
262
|
+
localJobs: PlannedProviderJobSpec[];
|
|
263
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/manifest/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ManifestSource, type ManifestV2, type ManifestValidationResult, type PlanArtifacts } from "./types.js";
|
|
2
|
+
import { type PlannedTarget, type ProviderName } from "../providers/types.js";
|
|
3
|
+
export interface ValidateManifestOptions {
|
|
4
|
+
now?: () => Date;
|
|
5
|
+
}
|
|
6
|
+
export interface NormalizeManifestTargetsOptions {
|
|
7
|
+
manifestPath?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function validateManifestSource(source: ManifestSource, options?: ValidateManifestOptions): ManifestValidationResult;
|
|
10
|
+
export declare function normalizeManifestTargets(manifest: ManifestV2, options?: NormalizeManifestTargetsOptions): PlannedTarget[];
|
|
11
|
+
export declare function createPlanArtifacts(manifest: ManifestV2, manifestPath: string, now?: () => Date): PlanArtifacts;
|
|
12
|
+
export declare function parseManifestProviderFlag(value: string | undefined): ProviderName | "auto";
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { resolveStyleKitPaletteDefaults, resolveStyleKitRulesContent, } from "./normalize-palette.js";
|
|
2
|
+
import { expandSpritesheetTarget, normalizeTargetForGeneration, toProviderJobSpec, } from "./normalize-target.js";
|
|
3
|
+
import { safeParseManifestV2 } from "./schema.js";
|
|
4
|
+
import { collectSemanticIssues, toSchemaValidationIssue } from "./semantic-validation.js";
|
|
5
|
+
import { nowIso, parseProviderSelection, } from "../providers/types.js";
|
|
6
|
+
export function validateManifestSource(source, options = {}) {
|
|
7
|
+
const issues = [];
|
|
8
|
+
const parsed = safeParseManifestV2(source.data);
|
|
9
|
+
let manifest;
|
|
10
|
+
if (!parsed.success) {
|
|
11
|
+
issues.push(...parsed.error.issues.map(toSchemaValidationIssue));
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
manifest = parsed.data;
|
|
15
|
+
issues.push(...collectSemanticIssues(manifest, source.manifestPath));
|
|
16
|
+
}
|
|
17
|
+
const errors = issues.filter((issue) => issue.level === "error").length;
|
|
18
|
+
const warnings = issues.filter((issue) => issue.level === "warning").length;
|
|
19
|
+
return {
|
|
20
|
+
manifest,
|
|
21
|
+
report: {
|
|
22
|
+
manifestPath: source.manifestPath,
|
|
23
|
+
generatedAt: nowIso(options.now),
|
|
24
|
+
ok: errors === 0,
|
|
25
|
+
errors,
|
|
26
|
+
warnings,
|
|
27
|
+
targetCount: manifest?.targets.length ?? 0,
|
|
28
|
+
issues,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function normalizeManifestTargets(manifest, options = {}) {
|
|
33
|
+
const defaultProvider = manifest.providers.default ?? "openai";
|
|
34
|
+
const targetTemplateById = new Map((manifest.targetTemplates ?? []).map((template) => [template.id, template]));
|
|
35
|
+
const styleKitById = new Map(manifest.styleKits.map((kit) => [kit.id, kit]));
|
|
36
|
+
const styleKitPaletteDefaults = resolveStyleKitPaletteDefaults(manifest.styleKits, options.manifestPath);
|
|
37
|
+
const styleKitRulesContentById = resolveStyleKitRulesContent(manifest.styleKits, options.manifestPath);
|
|
38
|
+
const consistencyGroupById = new Map((manifest.consistencyGroups ?? []).map((group) => [group.id, group]));
|
|
39
|
+
const hasConsistencyGroups = consistencyGroupById.size > 0;
|
|
40
|
+
const evaluationById = new Map(manifest.evaluationProfiles.map((profile) => [profile.id, profile]));
|
|
41
|
+
const scoringProfileById = new Map((manifest.scoringProfiles ?? []).map((profile) => [profile.id, profile]));
|
|
42
|
+
const targets = [];
|
|
43
|
+
for (const target of manifest.targets) {
|
|
44
|
+
const template = target.templateId ? targetTemplateById.get(target.templateId) : undefined;
|
|
45
|
+
const styleKit = styleKitById.get(target.styleKitId);
|
|
46
|
+
const consistencyGroup = consistencyGroupById.get(target.consistencyGroup);
|
|
47
|
+
const evalProfile = evaluationById.get(target.evaluationProfileId);
|
|
48
|
+
const styleKitPaletteDefault = styleKit ? styleKitPaletteDefaults.get(styleKit.id) : undefined;
|
|
49
|
+
const styleKitRulesContent = styleKit ? styleKitRulesContentById.get(styleKit.id) : undefined;
|
|
50
|
+
if (!styleKit) {
|
|
51
|
+
throw new Error(`Target "${target.id}" references missing styleKitId "${target.styleKitId}".`);
|
|
52
|
+
}
|
|
53
|
+
if (target.templateId && !template) {
|
|
54
|
+
throw new Error(`Target "${target.id}" references missing template "${target.templateId}".`);
|
|
55
|
+
}
|
|
56
|
+
if (!evalProfile) {
|
|
57
|
+
throw new Error(`Target "${target.id}" references missing evaluationProfileId "${target.evaluationProfileId}".`);
|
|
58
|
+
}
|
|
59
|
+
if (hasConsistencyGroups && !consistencyGroup) {
|
|
60
|
+
throw new Error(`Target "${target.id}" references missing consistencyGroup "${target.consistencyGroup}".`);
|
|
61
|
+
}
|
|
62
|
+
if (consistencyGroup?.styleKitId && consistencyGroup.styleKitId !== target.styleKitId) {
|
|
63
|
+
throw new Error(`Target "${target.id}" uses styleKitId "${target.styleKitId}" but consistency group "${consistencyGroup.id}" is bound to "${consistencyGroup.styleKitId}".`);
|
|
64
|
+
}
|
|
65
|
+
if (target.scoringProfile && !scoringProfileById.has(target.scoringProfile)) {
|
|
66
|
+
throw new Error(`Target "${target.id}" references missing scoringProfile "${target.scoringProfile}".`);
|
|
67
|
+
}
|
|
68
|
+
if (target.kind === "spritesheet") {
|
|
69
|
+
const expanded = expandSpritesheetTarget({
|
|
70
|
+
manifest,
|
|
71
|
+
target,
|
|
72
|
+
template,
|
|
73
|
+
defaultProvider,
|
|
74
|
+
styleKit,
|
|
75
|
+
styleKitPaletteDefault,
|
|
76
|
+
styleKitRulesContent,
|
|
77
|
+
consistencyGroup,
|
|
78
|
+
evalProfile,
|
|
79
|
+
scoringProfileById,
|
|
80
|
+
});
|
|
81
|
+
targets.push(...expanded);
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
targets.push(normalizeTargetForGeneration({
|
|
85
|
+
manifest,
|
|
86
|
+
target,
|
|
87
|
+
template,
|
|
88
|
+
defaultProvider,
|
|
89
|
+
styleKit,
|
|
90
|
+
styleKitPaletteDefault,
|
|
91
|
+
styleKitRulesContent,
|
|
92
|
+
consistencyGroup,
|
|
93
|
+
evalProfile,
|
|
94
|
+
scoringProfileById,
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
validatePlannedTargetOrchestration(targets);
|
|
98
|
+
return targets;
|
|
99
|
+
}
|
|
100
|
+
export function createPlanArtifacts(manifest, manifestPath, now) {
|
|
101
|
+
const targets = normalizeManifestTargets(manifest, { manifestPath });
|
|
102
|
+
const openaiJobs = [];
|
|
103
|
+
const nanoJobs = [];
|
|
104
|
+
const localJobs = [];
|
|
105
|
+
for (const target of targets) {
|
|
106
|
+
if (target.generationDisabled) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const provider = target.provider ?? "openai";
|
|
110
|
+
const row = toProviderJobSpec(target, provider);
|
|
111
|
+
if (provider === "openai") {
|
|
112
|
+
openaiJobs.push(row);
|
|
113
|
+
}
|
|
114
|
+
else if (provider === "nano") {
|
|
115
|
+
nanoJobs.push(row);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
localJobs.push(row);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
targets,
|
|
123
|
+
targetsIndex: {
|
|
124
|
+
generatedAt: nowIso(now),
|
|
125
|
+
manifestPath,
|
|
126
|
+
targets,
|
|
127
|
+
},
|
|
128
|
+
openaiJobs,
|
|
129
|
+
nanoJobs,
|
|
130
|
+
localJobs,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
export function parseManifestProviderFlag(value) {
|
|
134
|
+
return parseProviderSelection(value);
|
|
135
|
+
}
|
|
136
|
+
function validatePlannedTargetOrchestration(targets) {
|
|
137
|
+
const targetsById = new Map(targets.map((target) => [target.id, target]));
|
|
138
|
+
for (const target of targets) {
|
|
139
|
+
for (const dependencyId of target.dependsOn ?? []) {
|
|
140
|
+
const dependencyTarget = targetsById.get(dependencyId);
|
|
141
|
+
if (!dependencyTarget) {
|
|
142
|
+
throw new Error(`Target "${target.id}" depends on missing planned target "${dependencyId}".`);
|
|
143
|
+
}
|
|
144
|
+
if (dependencyId === target.id) {
|
|
145
|
+
throw new Error(`Target "${target.id}" cannot depend on itself.`);
|
|
146
|
+
}
|
|
147
|
+
if (dependencyTarget.generationDisabled === true) {
|
|
148
|
+
throw new Error(`Target "${target.id}" depends on "${dependencyId}", but that target is generationDisabled.`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
for (const styleSourceTargetId of target.styleReferenceFrom ?? []) {
|
|
152
|
+
const styleSourceTarget = targetsById.get(styleSourceTargetId);
|
|
153
|
+
if (!styleSourceTarget) {
|
|
154
|
+
throw new Error(`Target "${target.id}" chains style references from missing target "${styleSourceTargetId}".`);
|
|
155
|
+
}
|
|
156
|
+
if (styleSourceTargetId === target.id) {
|
|
157
|
+
throw new Error(`Target "${target.id}" cannot chain style references from itself.`);
|
|
158
|
+
}
|
|
159
|
+
if (styleSourceTarget.generationDisabled === true) {
|
|
160
|
+
throw new Error(`Target "${target.id}" chains style references from "${styleSourceTargetId}", but that target is generationDisabled.`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const generationEnabledTargets = targets.filter((target) => target.generationDisabled !== true);
|
|
165
|
+
const enabledIds = new Set(generationEnabledTargets.map((target) => target.id));
|
|
166
|
+
const adjacency = new Map();
|
|
167
|
+
const inDegree = new Map();
|
|
168
|
+
for (const target of generationEnabledTargets) {
|
|
169
|
+
inDegree.set(target.id, 0);
|
|
170
|
+
adjacency.set(target.id, []);
|
|
171
|
+
}
|
|
172
|
+
for (const target of generationEnabledTargets) {
|
|
173
|
+
const dependencies = dedupeTargetIdList(target.dependsOn ?? []);
|
|
174
|
+
for (const dependencyId of dependencies) {
|
|
175
|
+
if (!enabledIds.has(dependencyId)) {
|
|
176
|
+
throw new Error(`Target "${target.id}" depends on "${dependencyId}", but it is not in the generation-enabled target set.`);
|
|
177
|
+
}
|
|
178
|
+
adjacency.get(dependencyId)?.push(target.id);
|
|
179
|
+
inDegree.set(target.id, (inDegree.get(target.id) ?? 0) + 1);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
let queue = generationEnabledTargets
|
|
183
|
+
.map((target) => target.id)
|
|
184
|
+
.filter((targetId) => (inDegree.get(targetId) ?? 0) === 0)
|
|
185
|
+
.sort((left, right) => left.localeCompare(right));
|
|
186
|
+
let visited = 0;
|
|
187
|
+
while (queue.length > 0) {
|
|
188
|
+
const currentId = queue[0];
|
|
189
|
+
queue = queue.slice(1);
|
|
190
|
+
visited += 1;
|
|
191
|
+
const dependents = adjacency.get(currentId) ?? [];
|
|
192
|
+
for (const dependentId of dependents) {
|
|
193
|
+
const nextDegree = (inDegree.get(dependentId) ?? 0) - 1;
|
|
194
|
+
inDegree.set(dependentId, nextDegree);
|
|
195
|
+
if (nextDegree === 0) {
|
|
196
|
+
queue.push(dependentId);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
queue.sort((left, right) => left.localeCompare(right));
|
|
200
|
+
}
|
|
201
|
+
if (visited !== generationEnabledTargets.length) {
|
|
202
|
+
const blockedTargetIds = generationEnabledTargets
|
|
203
|
+
.map((target) => target.id)
|
|
204
|
+
.filter((targetId) => (inDegree.get(targetId) ?? 0) > 0)
|
|
205
|
+
.sort((left, right) => left.localeCompare(right));
|
|
206
|
+
throw new Error(`Dependency cycle detected across generation-enabled targets: ${blockedTargetIds.join(", ")}.`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function dedupeTargetIdList(targetIds) {
|
|
210
|
+
const deduped = [];
|
|
211
|
+
const seen = new Set();
|
|
212
|
+
for (const targetId of targetIds) {
|
|
213
|
+
if (seen.has(targetId)) {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
seen.add(targetId);
|
|
217
|
+
deduped.push(targetId);
|
|
218
|
+
}
|
|
219
|
+
return deduped;
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/manifest/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type CatalogItem } from "./catalog.js";
|
|
2
|
+
export interface AtlasBundle {
|
|
3
|
+
id: string;
|
|
4
|
+
imageUrl: string;
|
|
5
|
+
jsonUrl: string;
|
|
6
|
+
targets: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface AssetPackManifestInput {
|
|
9
|
+
pack: {
|
|
10
|
+
id: string;
|
|
11
|
+
version: string;
|
|
12
|
+
license: string;
|
|
13
|
+
author: string;
|
|
14
|
+
};
|
|
15
|
+
providerDefault: string;
|
|
16
|
+
catalogItems: CatalogItem[];
|
|
17
|
+
atlasBundles: AtlasBundle[];
|
|
18
|
+
}
|
|
19
|
+
export declare function buildAssetPackManifest(input: AssetPackManifestInput): Record<string, unknown>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function buildAssetPackManifest(input) {
|
|
2
|
+
return {
|
|
3
|
+
generatedAt: new Date().toISOString(),
|
|
4
|
+
pack: input.pack,
|
|
5
|
+
providerDefault: input.providerDefault,
|
|
6
|
+
atlasBundles: input.atlasBundles,
|
|
7
|
+
items: input.catalogItems.map((item) => ({
|
|
8
|
+
id: item.id,
|
|
9
|
+
kind: item.kind,
|
|
10
|
+
atlasGroup: item.atlasGroup,
|
|
11
|
+
url: item.url,
|
|
12
|
+
alphaRequired: item.alphaRequired,
|
|
13
|
+
previewWidth: item.previewWidth,
|
|
14
|
+
previewHeight: item.previewHeight,
|
|
15
|
+
...(typeof item.anchorX === "number" ? { anchorX: item.anchorX } : {}),
|
|
16
|
+
...(typeof item.anchorY === "number" ? { anchorY: item.anchorY } : {}),
|
|
17
|
+
})),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=assetPackManifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assetPackManifest.js","sourceRoot":"","sources":["../../src/output/assetPackManifest.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,sBAAsB,CAAC,KAA6B;IAClE,OAAO;QACL,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface CatalogTarget {
|
|
2
|
+
id: string;
|
|
3
|
+
kind?: string;
|
|
4
|
+
out: string;
|
|
5
|
+
catalogDisabled?: boolean;
|
|
6
|
+
atlasGroup?: string | null;
|
|
7
|
+
acceptance?: {
|
|
8
|
+
size?: string;
|
|
9
|
+
alpha?: boolean;
|
|
10
|
+
maxFileSizeKB?: number;
|
|
11
|
+
};
|
|
12
|
+
runtimeSpec?: {
|
|
13
|
+
alphaRequired?: boolean;
|
|
14
|
+
previewWidth?: number;
|
|
15
|
+
previewHeight?: number;
|
|
16
|
+
anchorX?: number;
|
|
17
|
+
anchorY?: number;
|
|
18
|
+
};
|
|
19
|
+
auxiliaryMaps?: {
|
|
20
|
+
normalFromHeight?: boolean;
|
|
21
|
+
specularFromLuma?: boolean;
|
|
22
|
+
aoFromLuma?: boolean;
|
|
23
|
+
};
|
|
24
|
+
postProcess?: {
|
|
25
|
+
operations?: {
|
|
26
|
+
emitVariants?: {
|
|
27
|
+
layerColor?: boolean;
|
|
28
|
+
layerMatte?: boolean;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export interface CatalogItem {
|
|
34
|
+
id: string;
|
|
35
|
+
kind: string;
|
|
36
|
+
atlasGroup: string | null;
|
|
37
|
+
out: string;
|
|
38
|
+
url: string;
|
|
39
|
+
alphaRequired: boolean;
|
|
40
|
+
previewWidth: number;
|
|
41
|
+
previewHeight: number;
|
|
42
|
+
anchorX?: number;
|
|
43
|
+
anchorY?: number;
|
|
44
|
+
sizeBytes: number;
|
|
45
|
+
exists: boolean;
|
|
46
|
+
maps?: {
|
|
47
|
+
normalUrl?: string;
|
|
48
|
+
specularUrl?: string;
|
|
49
|
+
aoUrl?: string;
|
|
50
|
+
};
|
|
51
|
+
layers?: {
|
|
52
|
+
colorUrl?: string;
|
|
53
|
+
matteUrl?: string;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export interface CatalogOutput {
|
|
57
|
+
generatedAt: string;
|
|
58
|
+
items: CatalogItem[];
|
|
59
|
+
}
|
|
60
|
+
export declare function buildCatalog(targets: CatalogTarget[], imagesDir: string, assetBaseUrl?: string): Promise<CatalogOutput>;
|