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,203 @@
1
+ import { mkdir, rm, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { z } from "zod";
4
+ import { runPlanCommand } from "../cli/commands/plan.js";
5
+ import { parseGenerateProviderFlag, runGeneratePipeline } from "../pipeline/generate.js";
6
+ import { PROVIDER_NAMES } from "../providers/types-core.js";
7
+ import { isRecord } from "../shared/typeGuards.js";
8
+ export const CANONICAL_GENERATION_REQUEST_VERSION = "v1";
9
+ const providerSelectionSchema = z.enum([...PROVIDER_NAMES, "auto"]);
10
+ const canonicalGenerationRequestSchema = z
11
+ .object({
12
+ manifestPath: z.string().trim().min(1).optional(),
13
+ manifest: z.record(z.unknown()).optional(),
14
+ outDir: z.string().trim().min(1).optional(),
15
+ provider: providerSelectionSchema.optional(),
16
+ targetIds: z.array(z.string().trim().min(1)).optional(),
17
+ skipLocked: z.boolean().optional(),
18
+ selectionLockPath: z.string().trim().min(1).optional(),
19
+ })
20
+ .refine((value) => value.manifestPath !== undefined || value.manifest !== undefined, {
21
+ message: "Either manifestPath or manifest must be provided.",
22
+ path: ["manifestPath"],
23
+ });
24
+ const canonicalGenerationEnvelopeSchema = z
25
+ .object({
26
+ requestId: z.union([z.string(), z.number()]).optional(),
27
+ request: canonicalGenerationRequestSchema,
28
+ })
29
+ .passthrough();
30
+ export class CanonicalGenerationRequestError extends Error {
31
+ code;
32
+ status;
33
+ constructor(message, options) {
34
+ super(message);
35
+ this.name = "CanonicalGenerationRequestError";
36
+ this.code = options.code;
37
+ this.status = options.status;
38
+ }
39
+ }
40
+ export function getCanonicalGenerationRequestContract() {
41
+ return {
42
+ version: CANONICAL_GENERATION_REQUEST_VERSION,
43
+ endpoint: "/v1/generation/requests",
44
+ summary: "Canonical generation request contract that maps service payloads to manifest planning + generation pipeline targets.",
45
+ fields: {
46
+ manifestPath: "String path to manifest JSON (required unless manifest is provided).",
47
+ manifest: "Inline manifest object; when present it is materialized to a service request manifest file before planning.",
48
+ outDir: "Output directory root for plan/generate artifacts. Falls back to service default out dir, then manifest parent directory.",
49
+ provider: "Provider selection (openai|nano|local|auto). Defaults to auto.",
50
+ targetIds: "Optional target-id subset for generation.",
51
+ skipLocked: "When true (default), lock-approved targets can be skipped during generation.",
52
+ selectionLockPath: "Optional selection lock path override.",
53
+ },
54
+ };
55
+ }
56
+ export async function runCanonicalGenerationRequest(payload, context) {
57
+ const envelope = parseCanonicalGenerationEnvelope(payload);
58
+ const request = envelope.request;
59
+ const requestedManifestPath = request.manifestPath
60
+ ? path.resolve(request.manifestPath)
61
+ : undefined;
62
+ assertNoNullBytes(requestedManifestPath, "manifestPath");
63
+ const outDir = resolveOutDir(request.outDir, context.defaultOutDir, requestedManifestPath);
64
+ assertNoNullBytes(outDir, "outDir");
65
+ const manifestResolution = await resolveManifestPathForRequest({
66
+ request,
67
+ outDir,
68
+ requestId: envelope.requestId,
69
+ });
70
+ const provider = parseGenerateProviderFlag(request.provider);
71
+ const targetIds = normalizeTargetIds(request.targetIds);
72
+ const skipLocked = request.skipLocked ?? true;
73
+ const selectionLockPath = request.selectionLockPath
74
+ ? path.resolve(request.selectionLockPath)
75
+ : undefined;
76
+ assertNoNullBytes(selectionLockPath, "selectionLockPath");
77
+ const requestManifestPath = manifestResolution.manifestPath;
78
+ const shouldCleanupManifest = manifestResolution.source === "inline";
79
+ try {
80
+ const planResult = await runPlanCommand(["--manifest", requestManifestPath, "--out", outDir]);
81
+ const generateResult = await runGeneratePipeline({
82
+ outDir,
83
+ targetsIndexPath: planResult.targetsIndexPath,
84
+ provider,
85
+ ids: targetIds,
86
+ skipLocked,
87
+ selectionLockPath,
88
+ });
89
+ return {
90
+ ...(envelope.requestId !== undefined ? { requestId: envelope.requestId } : {}),
91
+ mappingVersion: CANONICAL_GENERATION_REQUEST_VERSION,
92
+ normalizedRequest: {
93
+ outDir,
94
+ manifestPath: manifestResolution.manifestPath,
95
+ manifestSource: manifestResolution.source,
96
+ provider,
97
+ targetIds,
98
+ skipLocked,
99
+ ...(selectionLockPath ? { selectionLockPath } : {}),
100
+ },
101
+ plan: {
102
+ targets: planResult.targets,
103
+ warnings: planResult.warnings,
104
+ targetsIndexPath: planResult.targetsIndexPath,
105
+ },
106
+ generate: {
107
+ runId: generateResult.runId,
108
+ jobs: generateResult.jobs.length,
109
+ imagesDir: generateResult.imagesDir,
110
+ provenancePath: generateResult.provenancePath,
111
+ targetsIndexPath: generateResult.targetsIndexPath,
112
+ },
113
+ };
114
+ }
115
+ finally {
116
+ if (shouldCleanupManifest) {
117
+ await rm(requestManifestPath, { force: true });
118
+ }
119
+ }
120
+ }
121
+ function parseCanonicalGenerationEnvelope(value) {
122
+ if (!isRecord(value)) {
123
+ throw new CanonicalGenerationRequestError("Canonical generation request must be a JSON object.", {
124
+ code: "invalid_canonical_generation_request",
125
+ status: 400,
126
+ });
127
+ }
128
+ const envelopeLike = canonicalGenerationEnvelopeSchema.safeParse(value);
129
+ if (envelopeLike.success) {
130
+ return envelopeLike.data;
131
+ }
132
+ const requestOnly = canonicalGenerationRequestSchema.safeParse(value);
133
+ if (requestOnly.success) {
134
+ return {
135
+ request: requestOnly.data,
136
+ };
137
+ }
138
+ const issue = (envelopeLike.error.issues[0] ?? requestOnly.error.issues[0]);
139
+ throw new CanonicalGenerationRequestError(issue ? `${issue.path.join(".") || "request"}: ${issue.message}` : "Invalid request shape.", {
140
+ code: "invalid_canonical_generation_request",
141
+ status: 400,
142
+ });
143
+ }
144
+ function resolveOutDir(outDir, defaultOutDir, manifestPath) {
145
+ if (outDir) {
146
+ return path.resolve(outDir);
147
+ }
148
+ if (defaultOutDir) {
149
+ return path.resolve(defaultOutDir);
150
+ }
151
+ if (manifestPath) {
152
+ return path.dirname(manifestPath);
153
+ }
154
+ throw new CanonicalGenerationRequestError("Request must provide outDir (or service default out dir) when manifestPath is omitted.", {
155
+ code: "canonical_generation_missing_out_dir",
156
+ status: 400,
157
+ });
158
+ }
159
+ async function resolveManifestPathForRequest(params) {
160
+ if (params.request.manifest) {
161
+ const suggestedPath = params.request.manifestPath
162
+ ? path.resolve(params.request.manifestPath)
163
+ : undefined;
164
+ const manifestPath = suggestedPath ??
165
+ path.join(params.outDir, "jobs", "service-requests", `${createSafeRequestId(params.requestId)}-manifest.json`);
166
+ await mkdir(path.dirname(manifestPath), { recursive: true });
167
+ await writeFile(manifestPath, `${JSON.stringify(params.request.manifest, null, 2)}\n`, "utf8");
168
+ return {
169
+ manifestPath,
170
+ source: "inline",
171
+ };
172
+ }
173
+ if (params.request.manifestPath) {
174
+ return {
175
+ manifestPath: path.resolve(params.request.manifestPath),
176
+ source: "path",
177
+ };
178
+ }
179
+ throw new CanonicalGenerationRequestError("Either manifestPath or manifest is required.", {
180
+ code: "canonical_generation_missing_manifest",
181
+ status: 400,
182
+ });
183
+ }
184
+ function normalizeTargetIds(value) {
185
+ if (!value || value.length === 0) {
186
+ return [];
187
+ }
188
+ return Array.from(new Set(value.map((id) => id.trim()).filter((id) => id.length > 0)));
189
+ }
190
+ function createSafeRequestId(value) {
191
+ const source = String(value ?? Date.now());
192
+ const sanitized = source.replace(/[^a-zA-Z0-9_-]/g, "-");
193
+ return sanitized.length > 0 ? sanitized : "service-request";
194
+ }
195
+ function assertNoNullBytes(value, label) {
196
+ if (typeof value === "string" && value.includes("\0")) {
197
+ throw new CanonicalGenerationRequestError(`${label} contains a null byte.`, {
198
+ code: "canonical_generation_unsafe_path",
199
+ status: 400,
200
+ });
201
+ }
202
+ }
203
+ //# sourceMappingURL=generationRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generationRequest.js","sourceRoot":"","sources":["../../src/service/generationRequest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type ProviderName } from "../providers/types.js";
2
+ type CapabilitySupportMode = "native" | "post-process" | "edit-input" | "scaffold-only" | "none";
3
+ export interface CapabilityDirectiveSupport {
4
+ supported: boolean;
5
+ mode: CapabilitySupportMode;
6
+ notes: string;
7
+ }
8
+ export interface ServiceProviderCapabilityDescriptor {
9
+ provider: ProviderName;
10
+ model: string;
11
+ providerFeatures: {
12
+ transparentBackground: boolean;
13
+ imageEdits: boolean;
14
+ controlNet: boolean;
15
+ multiCandidate: boolean;
16
+ maxCandidates: number;
17
+ supportedOutputFormats: string[];
18
+ defaultConcurrency: number;
19
+ minDelayMs: number;
20
+ };
21
+ directives: {
22
+ pixel: CapabilityDirectiveSupport;
23
+ highRes: CapabilityDirectiveSupport;
24
+ references: CapabilityDirectiveSupport;
25
+ };
26
+ }
27
+ export interface ServiceProviderCapabilityContract {
28
+ version: string;
29
+ endpoint: string;
30
+ query: Record<string, string>;
31
+ fields: Record<string, string>;
32
+ }
33
+ export interface ResolveProviderCapabilityOptions {
34
+ provider?: ProviderName;
35
+ model?: string;
36
+ env?: NodeJS.ProcessEnv;
37
+ }
38
+ export declare function getProviderCapabilitiesContract(): ServiceProviderCapabilityContract;
39
+ export declare function resolveProviderCapabilityDescriptors(options?: ResolveProviderCapabilityOptions): ServiceProviderCapabilityDescriptor[];
40
+ export {};
@@ -0,0 +1,114 @@
1
+ import { DEFAULT_LOCAL_MODEL } from "../providers/localDiffusion.js";
2
+ import { DEFAULT_NANO_MODEL } from "../providers/nano.js";
3
+ import { DEFAULT_OPENAI_MODEL } from "../providers/openai.js";
4
+ import { createProviderRegistry } from "../providers/registry.js";
5
+ import { buildProviderRegistryOptions } from "../providers/runtimeConfig.js";
6
+ const PROVIDER_CAPABILITY_CONTRACT_VERSION = "v1";
7
+ const PROVIDER_CAPABILITY_ENDPOINT = "/v1/providers/capabilities";
8
+ const PROVIDER_NAMES = ["openai", "nano", "local"];
9
+ export function getProviderCapabilitiesContract() {
10
+ return {
11
+ version: PROVIDER_CAPABILITY_CONTRACT_VERSION,
12
+ endpoint: PROVIDER_CAPABILITY_ENDPOINT,
13
+ query: {
14
+ provider: "Optional provider filter (`openai|nano|local`). Required when `model` is provided.",
15
+ model: "Optional model override for capability introspection (applies to selected provider only).",
16
+ },
17
+ fields: {
18
+ provider: "Provider identifier.",
19
+ model: "Effective model used for capability introspection.",
20
+ providerFeatures: "Core runtime capability claims (transparency, edits, controlnet, candidate limits, formats, concurrency, delay).",
21
+ directives: "Feature-gating signals for `pixel`, `highRes`, and `references` with support mode + notes.",
22
+ },
23
+ };
24
+ }
25
+ export function resolveProviderCapabilityDescriptors(options = {}) {
26
+ const baseOptions = buildProviderRegistryOptions(undefined, options.env);
27
+ const registryOptions = withModelOverride(baseOptions, options.provider, options.model);
28
+ const registry = createProviderRegistry(registryOptions);
29
+ const selectedProviders = options.provider ? [options.provider] : PROVIDER_NAMES;
30
+ return selectedProviders.map((provider) => toCapabilityDescriptor({
31
+ provider,
32
+ capabilities: registry[provider].capabilities,
33
+ model: resolveEffectiveModel(provider, registryOptions),
34
+ }));
35
+ }
36
+ function withModelOverride(options, provider, model) {
37
+ if (!provider || !model) {
38
+ return options;
39
+ }
40
+ if (provider === "openai") {
41
+ return {
42
+ ...options,
43
+ openai: {
44
+ ...(options.openai ?? {}),
45
+ model,
46
+ },
47
+ };
48
+ }
49
+ if (provider === "nano") {
50
+ return {
51
+ ...options,
52
+ nano: {
53
+ ...(options.nano ?? {}),
54
+ model,
55
+ },
56
+ };
57
+ }
58
+ return {
59
+ ...options,
60
+ local: {
61
+ ...(options.local ?? {}),
62
+ model,
63
+ },
64
+ };
65
+ }
66
+ function resolveEffectiveModel(provider, options) {
67
+ if (provider === "openai") {
68
+ return options.openai?.model ?? DEFAULT_OPENAI_MODEL;
69
+ }
70
+ if (provider === "nano") {
71
+ return options.nano?.model ?? DEFAULT_NANO_MODEL;
72
+ }
73
+ return options.local?.model ?? DEFAULT_LOCAL_MODEL;
74
+ }
75
+ function toCapabilityDescriptor(params) {
76
+ return {
77
+ provider: params.provider,
78
+ model: params.model,
79
+ providerFeatures: {
80
+ transparentBackground: params.capabilities.supportsTransparentBackground,
81
+ imageEdits: params.capabilities.supportsEdits,
82
+ controlNet: params.capabilities.supportsControlNet,
83
+ multiCandidate: params.capabilities.maxCandidates > 1,
84
+ maxCandidates: params.capabilities.maxCandidates,
85
+ supportedOutputFormats: Array.from(params.capabilities.supportedOutputFormats).sort(),
86
+ defaultConcurrency: params.capabilities.defaultConcurrency,
87
+ minDelayMs: params.capabilities.minDelayMs,
88
+ },
89
+ directives: {
90
+ pixel: {
91
+ supported: true,
92
+ mode: "post-process",
93
+ notes: "Pixel policy is enforced in LootForge process-stage transforms (pixelPerfect/quantize), independent of provider-native features.",
94
+ },
95
+ highRes: {
96
+ supported: false,
97
+ mode: "scaffold-only",
98
+ notes: "highQuality/hiresFix are currently manifest/planner scaffolds without provider-native refinement execution in 0.3.",
99
+ },
100
+ references: params.capabilities.supportsEdits
101
+ ? {
102
+ supported: true,
103
+ mode: "edit-input",
104
+ notes: "Reference/base/mask image inputs are supported through edit-first provider flows.",
105
+ }
106
+ : {
107
+ supported: false,
108
+ mode: "none",
109
+ notes: "Provider does not support reference image inputs for edit-first requests.",
110
+ },
111
+ },
112
+ };
113
+ }
114
+ //# sourceMappingURL=providerCapabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerCapabilities.js","sourceRoot":"","sources":["../../src/service/providerCapabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export declare const SERVICE_API_VERSION = "v1";
2
+ type ServiceToolName = "init" | "plan" | "validate" | "generate" | "regenerate" | "process" | "atlas" | "eval" | "review" | "select" | "package";
3
+ type ServiceParamKind = "string" | "boolean" | "string_list";
4
+ export interface ServiceToolDescriptor {
5
+ name: ServiceToolName;
6
+ description: string;
7
+ endpoint: string;
8
+ alias: string;
9
+ params: {
10
+ key: string;
11
+ type: ServiceParamKind;
12
+ description: string;
13
+ }[];
14
+ }
15
+ export interface StartLootForgeServiceOptions {
16
+ host: string;
17
+ port: number;
18
+ defaultOutDir?: string;
19
+ maxActiveJobs?: number;
20
+ onListen?: (result: LootForgeService) => void;
21
+ }
22
+ export interface LootForgeService {
23
+ host: string;
24
+ port: number;
25
+ baseUrl: string;
26
+ maxActiveJobs: number;
27
+ close: () => Promise<void>;
28
+ }
29
+ export declare function getServiceToolDescriptors(): ServiceToolDescriptor[];
30
+ export declare function startLootForgeService(options: StartLootForgeServiceOptions): Promise<LootForgeService>;
31
+ export {};