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.
Files changed (243) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +764 -0
  3. package/bin/lootforge.js +28 -0
  4. package/dist/benchmarks/coarseToFineCost.d.ts +21 -0
  5. package/dist/benchmarks/coarseToFineCost.js +49 -0
  6. package/dist/benchmarks/coarseToFineCost.js.map +1 -0
  7. package/dist/checks/boundaryMetrics.d.ts +12 -0
  8. package/dist/checks/boundaryMetrics.js +102 -0
  9. package/dist/checks/boundaryMetrics.js.map +1 -0
  10. package/dist/checks/candidateScore.d.ts +11 -0
  11. package/dist/checks/candidateScore.js +462 -0
  12. package/dist/checks/candidateScore.js.map +1 -0
  13. package/dist/checks/commandParser.d.ts +5 -0
  14. package/dist/checks/commandParser.js +99 -0
  15. package/dist/checks/commandParser.js.map +1 -0
  16. package/dist/checks/consistencyOutliers.d.ts +42 -0
  17. package/dist/checks/consistencyOutliers.js +156 -0
  18. package/dist/checks/consistencyOutliers.js.map +1 -0
  19. package/dist/checks/imageAcceptance.d.ts +67 -0
  20. package/dist/checks/imageAcceptance.js +967 -0
  21. package/dist/checks/imageAcceptance.js.map +1 -0
  22. package/dist/checks/packInvariants.d.ts +56 -0
  23. package/dist/checks/packInvariants.js +1064 -0
  24. package/dist/checks/packInvariants.js.map +1 -0
  25. package/dist/checks/softAdapters.d.ts +25 -0
  26. package/dist/checks/softAdapters.js +275 -0
  27. package/dist/checks/softAdapters.js.map +1 -0
  28. package/dist/checks/vlmGate.d.ts +8 -0
  29. package/dist/checks/vlmGate.js +200 -0
  30. package/dist/checks/vlmGate.js.map +1 -0
  31. package/dist/cli/commands/atlas.d.ts +5 -0
  32. package/dist/cli/commands/atlas.js +18 -0
  33. package/dist/cli/commands/atlas.js.map +1 -0
  34. package/dist/cli/commands/eval.d.ts +6 -0
  35. package/dist/cli/commands/eval.js +23 -0
  36. package/dist/cli/commands/eval.js.map +1 -0
  37. package/dist/cli/commands/generate.d.ts +18 -0
  38. package/dist/cli/commands/generate.js +66 -0
  39. package/dist/cli/commands/generate.js.map +1 -0
  40. package/dist/cli/commands/init.d.ts +15 -0
  41. package/dist/cli/commands/init.js +146 -0
  42. package/dist/cli/commands/init.js.map +1 -0
  43. package/dist/cli/commands/package.d.ts +6 -0
  44. package/dist/cli/commands/package.js +27 -0
  45. package/dist/cli/commands/package.js.map +1 -0
  46. package/dist/cli/commands/plan.d.ts +16 -0
  47. package/dist/cli/commands/plan.js +49 -0
  48. package/dist/cli/commands/plan.js.map +1 -0
  49. package/dist/cli/commands/process.d.ts +14 -0
  50. package/dist/cli/commands/process.js +29 -0
  51. package/dist/cli/commands/process.js.map +1 -0
  52. package/dist/cli/commands/regenerate.d.ts +29 -0
  53. package/dist/cli/commands/regenerate.js +244 -0
  54. package/dist/cli/commands/regenerate.js.map +1 -0
  55. package/dist/cli/commands/review.d.ts +5 -0
  56. package/dist/cli/commands/review.js +18 -0
  57. package/dist/cli/commands/review.js.map +1 -0
  58. package/dist/cli/commands/select.d.ts +6 -0
  59. package/dist/cli/commands/select.js +21 -0
  60. package/dist/cli/commands/select.js.map +1 -0
  61. package/dist/cli/commands/serve.d.ts +16 -0
  62. package/dist/cli/commands/serve.js +100 -0
  63. package/dist/cli/commands/serve.js.map +1 -0
  64. package/dist/cli/commands/validate.d.ts +17 -0
  65. package/dist/cli/commands/validate.js +108 -0
  66. package/dist/cli/commands/validate.js.map +1 -0
  67. package/dist/cli/index.d.ts +1 -0
  68. package/dist/cli/index.js +157 -0
  69. package/dist/cli/index.js.map +1 -0
  70. package/dist/cli/parseArgs.d.ts +3 -0
  71. package/dist/cli/parseArgs.js +37 -0
  72. package/dist/cli/parseArgs.js.map +1 -0
  73. package/dist/contracts/stageArtifacts.d.ts +4031 -0
  74. package/dist/contracts/stageArtifacts.js +663 -0
  75. package/dist/contracts/stageArtifacts.js.map +1 -0
  76. package/dist/manifest/load.d.ts +3 -0
  77. package/dist/manifest/load.js +50 -0
  78. package/dist/manifest/load.js.map +1 -0
  79. package/dist/manifest/normalize-palette.d.ts +17 -0
  80. package/dist/manifest/normalize-palette.js +235 -0
  81. package/dist/manifest/normalize-palette.js.map +1 -0
  82. package/dist/manifest/normalize-policy.d.ts +48 -0
  83. package/dist/manifest/normalize-policy.js +239 -0
  84. package/dist/manifest/normalize-policy.js.map +1 -0
  85. package/dist/manifest/normalize-prompt.d.ts +14 -0
  86. package/dist/manifest/normalize-prompt.js +73 -0
  87. package/dist/manifest/normalize-prompt.js.map +1 -0
  88. package/dist/manifest/normalize-target.d.ts +49 -0
  89. package/dist/manifest/normalize-target.js +542 -0
  90. package/dist/manifest/normalize-target.js.map +1 -0
  91. package/dist/manifest/schema.d.ts +7570 -0
  92. package/dist/manifest/schema.js +373 -0
  93. package/dist/manifest/schema.js.map +1 -0
  94. package/dist/manifest/semantic-validation.d.ts +4 -0
  95. package/dist/manifest/semantic-validation.js +526 -0
  96. package/dist/manifest/semantic-validation.js.map +1 -0
  97. package/dist/manifest/types.d.ts +263 -0
  98. package/dist/manifest/types.js +2 -0
  99. package/dist/manifest/types.js.map +1 -0
  100. package/dist/manifest/validate.d.ts +12 -0
  101. package/dist/manifest/validate.js +221 -0
  102. package/dist/manifest/validate.js.map +1 -0
  103. package/dist/output/assetPackManifest.d.ts +19 -0
  104. package/dist/output/assetPackManifest.js +20 -0
  105. package/dist/output/assetPackManifest.js.map +1 -0
  106. package/dist/output/catalog.d.ts +60 -0
  107. package/dist/output/catalog.js +107 -0
  108. package/dist/output/catalog.js.map +1 -0
  109. package/dist/output/contactSheet.d.ts +13 -0
  110. package/dist/output/contactSheet.js +124 -0
  111. package/dist/output/contactSheet.js.map +1 -0
  112. package/dist/output/phaserManifest.d.ts +8 -0
  113. package/dist/output/phaserManifest.js +25 -0
  114. package/dist/output/phaserManifest.js.map +1 -0
  115. package/dist/output/pixiManifest.d.ts +8 -0
  116. package/dist/output/pixiManifest.js +37 -0
  117. package/dist/output/pixiManifest.js.map +1 -0
  118. package/dist/output/provenance.d.ts +121 -0
  119. package/dist/output/provenance.js +10 -0
  120. package/dist/output/provenance.js.map +1 -0
  121. package/dist/output/runtimeManifests.d.ts +21 -0
  122. package/dist/output/runtimeManifests.js +82 -0
  123. package/dist/output/runtimeManifests.js.map +1 -0
  124. package/dist/output/unityImportManifest.d.ts +10 -0
  125. package/dist/output/unityImportManifest.js +58 -0
  126. package/dist/output/unityImportManifest.js.map +1 -0
  127. package/dist/output/zip.d.ts +5 -0
  128. package/dist/output/zip.js +68 -0
  129. package/dist/output/zip.js.map +1 -0
  130. package/dist/pipeline/atlas.d.ts +33 -0
  131. package/dist/pipeline/atlas.js +286 -0
  132. package/dist/pipeline/atlas.js.map +1 -0
  133. package/dist/pipeline/eval.d.ts +104 -0
  134. package/dist/pipeline/eval.js +246 -0
  135. package/dist/pipeline/eval.js.map +1 -0
  136. package/dist/pipeline/generate.d.ts +44 -0
  137. package/dist/pipeline/generate.js +1088 -0
  138. package/dist/pipeline/generate.js.map +1 -0
  139. package/dist/pipeline/package.d.ts +18 -0
  140. package/dist/pipeline/package.js +218 -0
  141. package/dist/pipeline/package.js.map +1 -0
  142. package/dist/pipeline/process.d.ts +15 -0
  143. package/dist/pipeline/process.js +776 -0
  144. package/dist/pipeline/process.js.map +1 -0
  145. package/dist/pipeline/review.d.ts +10 -0
  146. package/dist/pipeline/review.js +341 -0
  147. package/dist/pipeline/review.js.map +1 -0
  148. package/dist/pipeline/seamHeal.d.ts +2 -0
  149. package/dist/pipeline/seamHeal.js +70 -0
  150. package/dist/pipeline/seamHeal.js.map +1 -0
  151. package/dist/pipeline/select.d.ts +39 -0
  152. package/dist/pipeline/select.js +79 -0
  153. package/dist/pipeline/select.js.map +1 -0
  154. package/dist/providers/job.d.ts +29 -0
  155. package/dist/providers/job.js +113 -0
  156. package/dist/providers/job.js.map +1 -0
  157. package/dist/providers/localDiffusion.d.ts +28 -0
  158. package/dist/providers/localDiffusion.js +235 -0
  159. package/dist/providers/localDiffusion.js.map +1 -0
  160. package/dist/providers/nano.d.ts +36 -0
  161. package/dist/providers/nano.js +402 -0
  162. package/dist/providers/nano.js.map +1 -0
  163. package/dist/providers/openai.d.ts +37 -0
  164. package/dist/providers/openai.js +378 -0
  165. package/dist/providers/openai.js.map +1 -0
  166. package/dist/providers/policy.d.ts +9 -0
  167. package/dist/providers/policy.js +192 -0
  168. package/dist/providers/policy.js.map +1 -0
  169. package/dist/providers/prompt.d.ts +3 -0
  170. package/dist/providers/prompt.js +63 -0
  171. package/dist/providers/prompt.js.map +1 -0
  172. package/dist/providers/registry.d.ts +24 -0
  173. package/dist/providers/registry.js +92 -0
  174. package/dist/providers/registry.js.map +1 -0
  175. package/dist/providers/runtime.d.ts +15 -0
  176. package/dist/providers/runtime.js +101 -0
  177. package/dist/providers/runtime.js.map +1 -0
  178. package/dist/providers/runtimeConfig.d.ts +20 -0
  179. package/dist/providers/runtimeConfig.js +146 -0
  180. package/dist/providers/runtimeConfig.js.map +1 -0
  181. package/dist/providers/types-core.d.ts +514 -0
  182. package/dist/providers/types-core.js +60 -0
  183. package/dist/providers/types-core.js.map +1 -0
  184. package/dist/providers/types.d.ts +4 -0
  185. package/dist/providers/types.js +5 -0
  186. package/dist/providers/types.js.map +1 -0
  187. package/dist/service/generationRequest.d.ts +58 -0
  188. package/dist/service/generationRequest.js +203 -0
  189. package/dist/service/generationRequest.js.map +1 -0
  190. package/dist/service/providerCapabilities.d.ts +40 -0
  191. package/dist/service/providerCapabilities.js +114 -0
  192. package/dist/service/providerCapabilities.js.map +1 -0
  193. package/dist/service/server.d.ts +31 -0
  194. package/dist/service/server.js +774 -0
  195. package/dist/service/server.js.map +1 -0
  196. package/dist/shared/errors.d.ts +13 -0
  197. package/dist/shared/errors.js +24 -0
  198. package/dist/shared/errors.js.map +1 -0
  199. package/dist/shared/fs.d.ts +6 -0
  200. package/dist/shared/fs.js +30 -0
  201. package/dist/shared/fs.js.map +1 -0
  202. package/dist/shared/image.d.ts +25 -0
  203. package/dist/shared/image.js +136 -0
  204. package/dist/shared/image.js.map +1 -0
  205. package/dist/shared/paths.d.ts +30 -0
  206. package/dist/shared/paths.js +103 -0
  207. package/dist/shared/paths.js.map +1 -0
  208. package/dist/shared/schemas.d.ts +209 -0
  209. package/dist/shared/schemas.js +93 -0
  210. package/dist/shared/schemas.js.map +1 -0
  211. package/dist/shared/typeGuards.d.ts +1 -0
  212. package/dist/shared/typeGuards.js +4 -0
  213. package/dist/shared/typeGuards.js.map +1 -0
  214. package/dist/shared/zod.d.ts +1 -0
  215. package/dist/shared/zod.js +14 -0
  216. package/dist/shared/zod.js.map +1 -0
  217. package/dist/showcase/format.d.ts +9 -0
  218. package/dist/showcase/format.js +61 -0
  219. package/dist/showcase/format.js.map +1 -0
  220. package/dist/showcase/panelRenderer.d.ts +59 -0
  221. package/dist/showcase/panelRenderer.js +294 -0
  222. package/dist/showcase/panelRenderer.js.map +1 -0
  223. package/dist/showcase/releaseConfig.d.ts +233 -0
  224. package/dist/showcase/releaseConfig.js +75 -0
  225. package/dist/showcase/releaseConfig.js.map +1 -0
  226. package/dist/showcase/releaseEvidence.d.ts +25 -0
  227. package/dist/showcase/releaseEvidence.js +540 -0
  228. package/dist/showcase/releaseEvidence.js.map +1 -0
  229. package/dist/showcase/releaseEvidenceSchema.d.ts +1611 -0
  230. package/dist/showcase/releaseEvidenceSchema.js +165 -0
  231. package/dist/showcase/releaseEvidenceSchema.js.map +1 -0
  232. package/dist/showcase/scenarioRenderer.d.ts +19 -0
  233. package/dist/showcase/scenarioRenderer.js +488 -0
  234. package/dist/showcase/scenarioRenderer.js.map +1 -0
  235. package/docs/ADAPTER_CONTRACT.md +141 -0
  236. package/docs/ENGINE_TARGETING.md +86 -0
  237. package/docs/MANIFEST_POLICY_COVERAGE.md +130 -0
  238. package/docs/RELEASE_WORKFLOW.md +117 -0
  239. package/docs/ROADMAP.md +411 -0
  240. package/docs/ROADMAP_ISSUES.md +244 -0
  241. package/docs/SERVICE_MODE.md +137 -0
  242. package/docs/manifest-schema.md +254 -0
  243. package/package.json +70 -0
@@ -0,0 +1,209 @@
1
+ import { z } from "zod";
2
+ export declare const nonEmptyString: z.ZodString;
3
+ export declare const ProviderNameSchema: z.ZodEnum<["openai", "nano", "local"]>;
4
+ export declare const GenerationModeSchema: z.ZodEnum<["text", "edit-first"]>;
5
+ export declare const ControlModeSchema: z.ZodEnum<["canny", "depth", "openpose"]>;
6
+ export declare const FacingDirectionSchema: z.ZodEnum<["left", "right"]>;
7
+ export declare const EditInputSchema: z.ZodObject<{
8
+ path: z.ZodString;
9
+ role: z.ZodOptional<z.ZodEnum<["base", "mask", "reference"]>>;
10
+ fidelity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ path: string;
13
+ role?: "base" | "mask" | "reference" | undefined;
14
+ fidelity?: "low" | "medium" | "high" | undefined;
15
+ }, {
16
+ path: string;
17
+ role?: "base" | "mask" | "reference" | undefined;
18
+ fidelity?: "low" | "medium" | "high" | undefined;
19
+ }>;
20
+ export declare const EditSchema: z.ZodObject<{
21
+ mode: z.ZodOptional<z.ZodEnum<["edit", "iterate"]>>;
22
+ instruction: z.ZodOptional<z.ZodString>;
23
+ inputs: z.ZodOptional<z.ZodArray<z.ZodObject<{
24
+ path: z.ZodString;
25
+ role: z.ZodOptional<z.ZodEnum<["base", "mask", "reference"]>>;
26
+ fidelity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
27
+ }, "strip", z.ZodTypeAny, {
28
+ path: string;
29
+ role?: "base" | "mask" | "reference" | undefined;
30
+ fidelity?: "low" | "medium" | "high" | undefined;
31
+ }, {
32
+ path: string;
33
+ role?: "base" | "mask" | "reference" | undefined;
34
+ fidelity?: "low" | "medium" | "high" | undefined;
35
+ }>, "many">>;
36
+ preserveComposition: z.ZodOptional<z.ZodBoolean>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ mode?: "edit" | "iterate" | undefined;
39
+ instruction?: string | undefined;
40
+ preserveComposition?: boolean | undefined;
41
+ inputs?: {
42
+ path: string;
43
+ role?: "base" | "mask" | "reference" | undefined;
44
+ fidelity?: "low" | "medium" | "high" | undefined;
45
+ }[] | undefined;
46
+ }, {
47
+ mode?: "edit" | "iterate" | undefined;
48
+ instruction?: string | undefined;
49
+ preserveComposition?: boolean | undefined;
50
+ inputs?: {
51
+ path: string;
52
+ role?: "base" | "mask" | "reference" | undefined;
53
+ fidelity?: "low" | "medium" | "high" | undefined;
54
+ }[] | undefined;
55
+ }>;
56
+ export declare const AuxiliaryMapsSchema: z.ZodObject<{
57
+ normalFromHeight: z.ZodOptional<z.ZodBoolean>;
58
+ specularFromLuma: z.ZodOptional<z.ZodBoolean>;
59
+ aoFromLuma: z.ZodOptional<z.ZodBoolean>;
60
+ }, "strip", z.ZodTypeAny, {
61
+ normalFromHeight?: boolean | undefined;
62
+ specularFromLuma?: boolean | undefined;
63
+ aoFromLuma?: boolean | undefined;
64
+ }, {
65
+ normalFromHeight?: boolean | undefined;
66
+ specularFromLuma?: boolean | undefined;
67
+ aoFromLuma?: boolean | undefined;
68
+ }>;
69
+ export declare const ScoreWeightsSchema: z.ZodObject<{
70
+ readability: z.ZodOptional<z.ZodNumber>;
71
+ fileSize: z.ZodOptional<z.ZodNumber>;
72
+ consistency: z.ZodOptional<z.ZodNumber>;
73
+ clip: z.ZodOptional<z.ZodNumber>;
74
+ lpips: z.ZodOptional<z.ZodNumber>;
75
+ ssim: z.ZodOptional<z.ZodNumber>;
76
+ }, "strip", z.ZodTypeAny, {
77
+ clip?: number | undefined;
78
+ lpips?: number | undefined;
79
+ ssim?: number | undefined;
80
+ readability?: number | undefined;
81
+ fileSize?: number | undefined;
82
+ consistency?: number | undefined;
83
+ }, {
84
+ clip?: number | undefined;
85
+ lpips?: number | undefined;
86
+ ssim?: number | undefined;
87
+ readability?: number | undefined;
88
+ fileSize?: number | undefined;
89
+ consistency?: number | undefined;
90
+ }>;
91
+ export declare const AcceptanceSchema: z.ZodObject<{
92
+ size: z.ZodOptional<z.ZodString>;
93
+ alpha: z.ZodOptional<z.ZodBoolean>;
94
+ maxFileSizeKB: z.ZodOptional<z.ZodNumber>;
95
+ }, "strip", z.ZodTypeAny, {
96
+ size?: string | undefined;
97
+ alpha?: boolean | undefined;
98
+ maxFileSizeKB?: number | undefined;
99
+ }, {
100
+ size?: string | undefined;
101
+ alpha?: boolean | undefined;
102
+ maxFileSizeKB?: number | undefined;
103
+ }>;
104
+ export declare const VlmGateSchema: z.ZodObject<{
105
+ threshold: z.ZodOptional<z.ZodNumber>;
106
+ rubric: z.ZodOptional<z.ZodString>;
107
+ }, "strip", z.ZodTypeAny, {
108
+ threshold?: number | undefined;
109
+ rubric?: string | undefined;
110
+ }, {
111
+ threshold?: number | undefined;
112
+ rubric?: string | undefined;
113
+ }>;
114
+ export declare const HiresFixSchema: z.ZodObject<{
115
+ enabled: z.ZodOptional<z.ZodBoolean>;
116
+ upscale: z.ZodOptional<z.ZodNumber>;
117
+ denoiseStrength: z.ZodOptional<z.ZodNumber>;
118
+ }, "strip", z.ZodTypeAny, {
119
+ enabled?: boolean | undefined;
120
+ upscale?: number | undefined;
121
+ denoiseStrength?: number | undefined;
122
+ }, {
123
+ enabled?: boolean | undefined;
124
+ upscale?: number | undefined;
125
+ denoiseStrength?: number | undefined;
126
+ }>;
127
+ /** Base shape for PromptSpec. Manifest overrides optional fields to nonEmptyString. */
128
+ export declare const PromptSpecBaseShape: {
129
+ primary: z.ZodString;
130
+ useCase: z.ZodOptional<z.ZodString>;
131
+ stylePreset: z.ZodOptional<z.ZodString>;
132
+ scene: z.ZodOptional<z.ZodString>;
133
+ subject: z.ZodOptional<z.ZodString>;
134
+ style: z.ZodOptional<z.ZodString>;
135
+ composition: z.ZodOptional<z.ZodString>;
136
+ lighting: z.ZodOptional<z.ZodString>;
137
+ palette: z.ZodOptional<z.ZodString>;
138
+ materials: z.ZodOptional<z.ZodString>;
139
+ constraints: z.ZodOptional<z.ZodString>;
140
+ negative: z.ZodOptional<z.ZodString>;
141
+ };
142
+ /** Base CoarseToFine schema with all fields optional. Contracts makes some required. */
143
+ export declare const CoarseToFineBaseSchema: z.ZodObject<{
144
+ enabled: z.ZodOptional<z.ZodBoolean>;
145
+ promoteTopK: z.ZodOptional<z.ZodNumber>;
146
+ minDraftScore: z.ZodOptional<z.ZodNumber>;
147
+ requireDraftAcceptance: z.ZodOptional<z.ZodBoolean>;
148
+ }, "strip", z.ZodTypeAny, {
149
+ enabled?: boolean | undefined;
150
+ promoteTopK?: number | undefined;
151
+ minDraftScore?: number | undefined;
152
+ requireDraftAcceptance?: boolean | undefined;
153
+ }, {
154
+ enabled?: boolean | undefined;
155
+ promoteTopK?: number | undefined;
156
+ minDraftScore?: number | undefined;
157
+ requireDraftAcceptance?: boolean | undefined;
158
+ }>;
159
+ /** Base AgenticRetry schema with all fields optional. Contracts makes some required. */
160
+ export declare const AgenticRetryBaseSchema: z.ZodObject<{
161
+ enabled: z.ZodOptional<z.ZodBoolean>;
162
+ maxRetries: z.ZodOptional<z.ZodNumber>;
163
+ }, "strip", z.ZodTypeAny, {
164
+ maxRetries?: number | undefined;
165
+ enabled?: boolean | undefined;
166
+ }, {
167
+ maxRetries?: number | undefined;
168
+ enabled?: boolean | undefined;
169
+ }>;
170
+ /** Base RuntimeSpec schema without bounds on anchorX/Y. Manifest adds .min(0).max(1). */
171
+ export declare const RuntimeSpecBaseSchema: z.ZodObject<{
172
+ alphaRequired: z.ZodOptional<z.ZodBoolean>;
173
+ previewWidth: z.ZodOptional<z.ZodNumber>;
174
+ previewHeight: z.ZodOptional<z.ZodNumber>;
175
+ anchorX: z.ZodOptional<z.ZodNumber>;
176
+ anchorY: z.ZodOptional<z.ZodNumber>;
177
+ }, "strip", z.ZodTypeAny, {
178
+ anchorX?: number | undefined;
179
+ anchorY?: number | undefined;
180
+ alphaRequired?: boolean | undefined;
181
+ previewWidth?: number | undefined;
182
+ previewHeight?: number | undefined;
183
+ }, {
184
+ anchorX?: number | undefined;
185
+ anchorY?: number | undefined;
186
+ alphaRequired?: boolean | undefined;
187
+ previewWidth?: number | undefined;
188
+ previewHeight?: number | undefined;
189
+ }>;
190
+ /** Base PalettePolicy schema without superRefine. Manifest adds mode-specific validation. */
191
+ export declare const PalettePolicyBaseSchema: z.ZodObject<{
192
+ mode: z.ZodEnum<["exact", "max-colors"]>;
193
+ colors: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
194
+ maxColors: z.ZodOptional<z.ZodNumber>;
195
+ dither: z.ZodOptional<z.ZodNumber>;
196
+ strict: z.ZodOptional<z.ZodBoolean>;
197
+ }, "strip", z.ZodTypeAny, {
198
+ mode: "exact" | "max-colors";
199
+ strict?: boolean | undefined;
200
+ colors?: string[] | undefined;
201
+ dither?: number | undefined;
202
+ maxColors?: number | undefined;
203
+ }, {
204
+ mode: "exact" | "max-colors";
205
+ strict?: boolean | undefined;
206
+ colors?: string[] | undefined;
207
+ dither?: number | undefined;
208
+ maxColors?: number | undefined;
209
+ }>;
@@ -0,0 +1,93 @@
1
+ import { z } from "zod";
2
+ import { CONTROL_MODES, FACING_DIRECTIONS, GENERATION_MODES, PROVIDER_NAMES, } from "../providers/types-core.js";
3
+ // ---------- Primitives ----------
4
+ export const nonEmptyString = z.string().trim().min(1);
5
+ // ---------- Enum schemas ----------
6
+ export const ProviderNameSchema = z.enum(PROVIDER_NAMES);
7
+ export const GenerationModeSchema = z.enum(GENERATION_MODES);
8
+ export const ControlModeSchema = z.enum(CONTROL_MODES);
9
+ export const FacingDirectionSchema = z.enum(FACING_DIRECTIONS);
10
+ // ---------- Exact-duplicate schemas ----------
11
+ export const EditInputSchema = z.object({
12
+ path: nonEmptyString,
13
+ role: z.enum(["base", "mask", "reference"]).optional(),
14
+ fidelity: z.enum(["low", "medium", "high"]).optional(),
15
+ });
16
+ export const EditSchema = z.object({
17
+ mode: z.enum(["edit", "iterate"]).optional(),
18
+ instruction: nonEmptyString.optional(),
19
+ inputs: z.array(EditInputSchema).optional(),
20
+ preserveComposition: z.boolean().optional(),
21
+ });
22
+ export const AuxiliaryMapsSchema = z.object({
23
+ normalFromHeight: z.boolean().optional(),
24
+ specularFromLuma: z.boolean().optional(),
25
+ aoFromLuma: z.boolean().optional(),
26
+ });
27
+ export const ScoreWeightsSchema = z.object({
28
+ readability: z.number().optional(),
29
+ fileSize: z.number().optional(),
30
+ consistency: z.number().optional(),
31
+ clip: z.number().optional(),
32
+ lpips: z.number().optional(),
33
+ ssim: z.number().optional(),
34
+ });
35
+ export const AcceptanceSchema = z.object({
36
+ size: nonEmptyString.optional(),
37
+ alpha: z.boolean().optional(),
38
+ maxFileSizeKB: z.number().int().positive().optional(),
39
+ });
40
+ export const VlmGateSchema = z.object({
41
+ threshold: z.number().min(0).max(5).optional(),
42
+ rubric: nonEmptyString.optional(),
43
+ });
44
+ export const HiresFixSchema = z.object({
45
+ enabled: z.boolean().optional(),
46
+ upscale: z.number().min(1.01).max(4).optional(),
47
+ denoiseStrength: z.number().min(0).max(1).optional(),
48
+ });
49
+ // ---------- Near-duplicate base shapes ----------
50
+ /** Base shape for PromptSpec. Manifest overrides optional fields to nonEmptyString. */
51
+ export const PromptSpecBaseShape = {
52
+ primary: nonEmptyString,
53
+ useCase: z.string().optional(),
54
+ stylePreset: z.string().optional(),
55
+ scene: z.string().optional(),
56
+ subject: z.string().optional(),
57
+ style: z.string().optional(),
58
+ composition: z.string().optional(),
59
+ lighting: z.string().optional(),
60
+ palette: z.string().optional(),
61
+ materials: z.string().optional(),
62
+ constraints: z.string().optional(),
63
+ negative: z.string().optional(),
64
+ };
65
+ /** Base CoarseToFine schema with all fields optional. Contracts makes some required. */
66
+ export const CoarseToFineBaseSchema = z.object({
67
+ enabled: z.boolean().optional(),
68
+ promoteTopK: z.number().int().min(1).optional(),
69
+ minDraftScore: z.number().optional(),
70
+ requireDraftAcceptance: z.boolean().optional(),
71
+ });
72
+ /** Base AgenticRetry schema with all fields optional. Contracts makes some required. */
73
+ export const AgenticRetryBaseSchema = z.object({
74
+ enabled: z.boolean().optional(),
75
+ maxRetries: z.number().int().min(0).optional(),
76
+ });
77
+ /** Base RuntimeSpec schema without bounds on anchorX/Y. Manifest adds .min(0).max(1). */
78
+ export const RuntimeSpecBaseSchema = z.object({
79
+ alphaRequired: z.boolean().optional(),
80
+ previewWidth: z.number().int().positive().optional(),
81
+ previewHeight: z.number().int().positive().optional(),
82
+ anchorX: z.number().optional(),
83
+ anchorY: z.number().optional(),
84
+ });
85
+ /** Base PalettePolicy schema without superRefine. Manifest adds mode-specific validation. */
86
+ export const PalettePolicyBaseSchema = z.object({
87
+ mode: z.enum(["exact", "max-colors"]),
88
+ colors: z.array(nonEmptyString).optional(),
89
+ maxColors: z.number().int().min(2).max(256).optional(),
90
+ dither: z.number().min(0).max(1).optional(),
91
+ strict: z.boolean().optional(),
92
+ });
93
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/shared/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
@@ -0,0 +1,4 @@
1
+ export function isRecord(value) {
2
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3
+ }
4
+ //# sourceMappingURL=typeGuards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../src/shared/typeGuards.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function formatIssuePath(pathItems: (string | number)[]): string;
@@ -0,0 +1,14 @@
1
+ export function formatIssuePath(pathItems) {
2
+ if (pathItems.length === 0) {
3
+ return "$";
4
+ }
5
+ return pathItems
6
+ .map((item, index) => {
7
+ if (typeof item === "number") {
8
+ return `[${item}]`;
9
+ }
10
+ return index === 0 ? item : `.${item}`;
11
+ })
12
+ .join("");
13
+ }
14
+ //# sourceMappingURL=zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../../src/shared/zod.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,SAA8B;IAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,SAAS;SACb,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACnB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,IAAI,GAAG,CAAC;QACrB,CAAC;QACD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACzC,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function formatOptionalNumber(value: number | null): string;
2
+ export declare function formatSignedOptionalNumber(value: number | null): string;
3
+ export declare function formatRatio(value: number | null): string;
4
+ export declare function formatSignedPercent(value: number | null): string;
5
+ export declare function formatSignedInteger(value: number): string;
6
+ export declare function ratio(numerator: number, denominator: number): number | null;
7
+ export declare function mean(values: number[]): number | null;
8
+ export declare function median(values: number[]): number | null;
9
+ export declare function diffNullable(left: number | null, right: number | null): number | null;
@@ -0,0 +1,61 @@
1
+ export function formatOptionalNumber(value) {
2
+ if (typeof value !== "number") {
3
+ return "n/a";
4
+ }
5
+ return value.toFixed(2);
6
+ }
7
+ export function formatSignedOptionalNumber(value) {
8
+ if (typeof value !== "number") {
9
+ return "n/a";
10
+ }
11
+ const prefix = value >= 0 ? "+" : "";
12
+ return `${prefix}${value.toFixed(2)}`;
13
+ }
14
+ export function formatRatio(value) {
15
+ if (typeof value !== "number") {
16
+ return "n/a";
17
+ }
18
+ return `${(value * 100).toFixed(1)}%`;
19
+ }
20
+ export function formatSignedPercent(value) {
21
+ if (typeof value !== "number") {
22
+ return "n/a";
23
+ }
24
+ const prefix = value >= 0 ? "+" : "";
25
+ return `${prefix}${(value * 100).toFixed(1)}%`;
26
+ }
27
+ export function formatSignedInteger(value) {
28
+ const prefix = value >= 0 ? "+" : "";
29
+ return `${prefix}${value}`;
30
+ }
31
+ export function ratio(numerator, denominator) {
32
+ if (denominator <= 0) {
33
+ return null;
34
+ }
35
+ return numerator / denominator;
36
+ }
37
+ export function mean(values) {
38
+ if (values.length === 0) {
39
+ return null;
40
+ }
41
+ const sum = values.reduce((total, value) => total + value, 0);
42
+ return sum / values.length;
43
+ }
44
+ export function median(values) {
45
+ if (values.length === 0) {
46
+ return null;
47
+ }
48
+ const ordered = [...values].sort((left, right) => left - right);
49
+ const middle = Math.floor(ordered.length / 2);
50
+ if (ordered.length % 2 === 0) {
51
+ return (ordered[middle - 1] + ordered[middle]) / 2;
52
+ }
53
+ return ordered[middle];
54
+ }
55
+ export function diffNullable(left, right) {
56
+ if (typeof left !== "number" || typeof right !== "number") {
57
+ return null;
58
+ }
59
+ return left - right;
60
+ }
61
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/showcase/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export interface PanelRenderContext {
2
+ providers: {
3
+ id: string;
4
+ label: string;
5
+ provider: string;
6
+ outDir: string;
7
+ quality: {
8
+ finalScoreMean: number | null;
9
+ passRate: number | null;
10
+ hardErrors: number;
11
+ };
12
+ }[];
13
+ baselineDir?: string;
14
+ repoRoot: string;
15
+ }
16
+ export interface RenderPanelParams {
17
+ panelId: string;
18
+ title: string;
19
+ subtitle: string;
20
+ outPath: string;
21
+ }
22
+ export declare function escapeXml(value: string): string;
23
+ export declare function svgMetricFooter(x: number, y: number, text: string): string;
24
+ export declare function cardImage(image: Buffer | string, width: number, height: number): Promise<Buffer>;
25
+ export declare function tilePreview(image: Buffer | string, columns: number, rows: number, tileSize: number): Promise<Buffer>;
26
+ export declare function makePlaceholderImage(text: string): Promise<Buffer>;
27
+ export declare function fileExists(filePath: string): Promise<boolean>;
28
+ export declare function resolveImageOrPlaceholder(candidates: string[], placeholderText: string): Promise<Buffer | string>;
29
+ export declare function renderSideBySide(params: {
30
+ title: string;
31
+ subtitle: string;
32
+ pairs: {
33
+ label: string;
34
+ leftImage: Buffer | string;
35
+ rightImage: Buffer | string;
36
+ }[];
37
+ leftLabel: string;
38
+ rightLabel: string;
39
+ outPath: string;
40
+ }): Promise<void>;
41
+ export declare function renderGallery(params: {
42
+ title: string;
43
+ subtitle: string;
44
+ items: {
45
+ label: string;
46
+ image: Buffer | string;
47
+ }[];
48
+ outPath: string;
49
+ cardHeightScale?: number;
50
+ }): Promise<void>;
51
+ export declare function renderFeatureShowcase(params: {
52
+ title: string;
53
+ subtitle: string;
54
+ beforeImage: Buffer | string;
55
+ afterImage: Buffer | string;
56
+ beforeLabel: string;
57
+ afterLabel: string;
58
+ outPath: string;
59
+ }): Promise<void>;