@skenora/scene-plan 0.1.2

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 (66) hide show
  1. package/README.md +114 -0
  2. package/dist/check/check-scene-input.d.ts +38 -0
  3. package/dist/check/check-scene-input.d.ts.map +1 -0
  4. package/dist/check/check-scene-input.js +209 -0
  5. package/dist/check/check-scene-input.js.map +1 -0
  6. package/dist/compilation/compile.d.ts +4 -0
  7. package/dist/compilation/compile.d.ts.map +1 -0
  8. package/dist/compilation/compile.js +498 -0
  9. package/dist/compilation/compile.js.map +1 -0
  10. package/dist/description/example-recipes.d.ts +66 -0
  11. package/dist/description/example-recipes.d.ts.map +1 -0
  12. package/dist/description/example-recipes.js +1097 -0
  13. package/dist/description/example-recipes.js.map +1 -0
  14. package/dist/description/examples.d.ts +18 -0
  15. package/dist/description/examples.d.ts.map +1 -0
  16. package/dist/description/examples.js +58 -0
  17. package/dist/description/examples.js.map +1 -0
  18. package/dist/description/information.d.ts +415 -0
  19. package/dist/description/information.d.ts.map +1 -0
  20. package/dist/description/information.js +980 -0
  21. package/dist/description/information.js.map +1 -0
  22. package/dist/description/recipes.d.ts +20 -0
  23. package/dist/description/recipes.d.ts.map +1 -0
  24. package/dist/description/recipes.js +163 -0
  25. package/dist/description/recipes.js.map +1 -0
  26. package/dist/description/scene-fields.d.ts +11 -0
  27. package/dist/description/scene-fields.d.ts.map +1 -0
  28. package/dist/description/scene-fields.js +471 -0
  29. package/dist/description/scene-fields.js.map +1 -0
  30. package/dist/diagnostics/diagnostics.d.ts +79 -0
  31. package/dist/diagnostics/diagnostics.d.ts.map +1 -0
  32. package/dist/diagnostics/diagnostics.js +91 -0
  33. package/dist/diagnostics/diagnostics.js.map +1 -0
  34. package/dist/generated/example-gallery.d.ts +2897 -0
  35. package/dist/generated/example-gallery.d.ts.map +1 -0
  36. package/dist/generated/example-gallery.js +3290 -0
  37. package/dist/generated/example-gallery.js.map +1 -0
  38. package/dist/index.d.ts +15 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +15 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/model/json.d.ts +14 -0
  43. package/dist/model/json.d.ts.map +1 -0
  44. package/dist/model/json.js +60 -0
  45. package/dist/model/json.js.map +1 -0
  46. package/dist/model/types.d.ts +329 -0
  47. package/dist/model/types.d.ts.map +1 -0
  48. package/dist/model/types.js +5 -0
  49. package/dist/model/types.js.map +1 -0
  50. package/dist/normalization/normalize.d.ts +7 -0
  51. package/dist/normalization/normalize.d.ts.map +1 -0
  52. package/dist/normalization/normalize.js +145 -0
  53. package/dist/normalization/normalize.js.map +1 -0
  54. package/dist/parsing/parse.d.ts +5 -0
  55. package/dist/parsing/parse.d.ts.map +1 -0
  56. package/dist/parsing/parse.js +330 -0
  57. package/dist/parsing/parse.js.map +1 -0
  58. package/dist/patch/patch.d.ts +6 -0
  59. package/dist/patch/patch.d.ts.map +1 -0
  60. package/dist/patch/patch.js +319 -0
  61. package/dist/patch/patch.js.map +1 -0
  62. package/dist/validation/validate.d.ts +16 -0
  63. package/dist/validation/validate.d.ts.map +1 -0
  64. package/dist/validation/validate.js +704 -0
  65. package/dist/validation/validate.js.map +1 -0
  66. package/package.json +31 -0
package/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # @skenora/scene-plan
2
+
3
+ Pure SceneBlueprint and ScenePatch contracts, validation, normalization, and
4
+ compilation for Skenora.
5
+
6
+ > This package is not currently published to npm; install examples describe the
7
+ > intended release. The procedural V1 sections describe current repository
8
+ > source and are not covered by the 2026-08-28 package/browser evidence.
9
+
10
+ This package is intentionally separate from @skenora/editor and @skenora/sdk:
11
+
12
+ - it contains serializable Blueprint/Patch data, parsing, normalization,
13
+ validation, diagnostics, and compilation;
14
+ - it does not create an Editor, Runtime, Babylon scene, DOM element, or AI
15
+ runtime;
16
+ - it does not own resource acquisition, workspace writes, approval, or policy;
17
+ - it compiles to the existing SceneDocumentData source of truth.
18
+
19
+ The package boundary and execution split are documented in:
20
+
21
+ - [Scene Plan](https://github.com/zhangjiadi225/skenora/blob/main/docs/SCENE_PLAN.md);
22
+ - [Scene Plan execution](https://github.com/zhangjiadi225/skenora/blob/main/docs/SCENE_PLAN_EXECUTION.md);
23
+ - [Scene Plan modules](https://github.com/zhangjiadi225/skenora/blob/main/docs/SCENE_PLAN_MODULES.md);
24
+ - [AI scene skill contract](https://github.com/zhangjiadi225/skenora/blob/main/docs/AI_SCENE_SKILL.md).
25
+
26
+ The SDK scene-plan executor may expose Gateway operations as a composition
27
+ entry point, but the pure package must remain usable without a Canvas, DOM,
28
+ Editor, Runtime, Workspace, or resource locator.
29
+
30
+ ## Public information and examples
31
+
32
+ ```ts
33
+ import {
34
+ getScenePlanInformation,
35
+ getSceneBlueprintExamples,
36
+ getSceneBlueprintJsonSchema,
37
+ applySceneRecipe,
38
+ compileSceneBlueprint,
39
+ toPublicScenePlanDiagnostics,
40
+ } from "@skenora/scene-plan";
41
+
42
+ // Data only: no Canvas, engine, model provider, resource acquisition or Editor.
43
+ const information = getScenePlanInformation();
44
+ const schema = getSceneBlueprintJsonSchema();
45
+ const example = getSceneBlueprintExamples()[0].blueprint;
46
+ const compiled = compileSceneBlueprint(example, {
47
+ // Obtained from an initialized Runtime/Renderer or the host deployment.
48
+ capabilityAvailability: observedHostCapabilities,
49
+ });
50
+ if (!compiled.ok) {
51
+ console.log(toPublicScenePlanDiagnostics(compiled.diagnostics));
52
+ }
53
+ ```
54
+
55
+ `checkSceneInput(input)` is the single pure preflight for native SceneDocument,
56
+ Blueprint, and Patch input. It parses JSON once, returns stable shared
57
+ diagnostics, capability requirements and counts, and marks whether a Blueprint
58
+ was fully compiled. Resource-bearing Blueprints are not compiled until the host
59
+ supplies resource bindings.
60
+
61
+ The information bundle includes versioned capability descriptions, input and
62
+ normalized-Blueprint schemas, native defaults, examples, safe repair guidance
63
+ and the `neutral-v1` / `studio-v1` recipe descriptions. The getters return
64
+ detached serializable source data. A new development package build will emit
65
+ them into `dist`; the checked-in pre-procedural `dist` is stale and is not
66
+ evidence for these additions. A host can select descriptions by `domains` or
67
+ `capabilityIds` and serialize only the relevant information for its own AI.
68
+
69
+ Do not turn `information.capabilities` into an availability snapshot. It
70
+ describes accepted syntax; it does not prove that a backend is installed,
71
+ enabled, or compatible with the active device.
72
+
73
+ The information bundle includes dedicated
74
+ `skenora.entity.procedural@1` and `skenora.material.program@1` descriptions,
75
+ their JSON Schemas, limits, diagnostics, and the complete `procedural-ai`
76
+ Blueprint example. A procedural Blueprint needs no resource binding when it
77
+ uses no assets, but declared required capabilities still need a matching host
78
+ capability snapshot.
79
+
80
+ `listSkenoraExamples()`, `searchSkenoraExamples()`, and
81
+ `getSkenoraExample()` expose the immutable generated public gallery. Blueprint
82
+ and Recipe entries contain ordinary Blueprint data; Renderer Lab entries carry
83
+ a bounded `SimulationProgram` and are intentionally excluded from persistent
84
+ scene compilation. The information bundle describes the simulation schema but
85
+ does not claim device availability.
86
+
87
+ `SceneBlueprintInput` expresses omitted arrays/settings; normalization fills
88
+ Blueprint defaults, then compilation fills native settings and owned materials.
89
+ Schema validation does not resolve references or prove rendering compatibility.
90
+ When known, pass the current host's `capabilityAvailability` snapshot in the
91
+ compiler context; unknown/disabled capabilities cannot satisfy required usage.
92
+
93
+ `applySceneRecipe(input, "studio-v1", options)` expands ordinary fields without
94
+ fetching assets. Explicit fields win, including a supplied empty light array.
95
+ Use `options.bounds` with world-space meters for pure camera framing; otherwise
96
+ let the renderer frame loaded geometry. Environment resources must be declared
97
+ and bound explicitly by the host.
98
+
99
+ New PBR input opts in with `creation: { version: 1, family: "pbr" }` and uses
100
+ explicit `materialBindings`. Legacy material overrides remain supported. Group
101
+ entities without `sourceNode` provide transform-only composition.
102
+
103
+ Owned PBR also accepts versioned `effects` and local `animations`. The metadata
104
+ contains their exact property allowlists, interpolation/loop rules and render-pass
105
+ restrictions. Public examples include `gradient-rim`, `animated-dissolve`,
106
+ `flow-material-animation`, `texture-motion`, `presentation-atoms`, and a grouped
107
+ tube/wall/polygon/polyline composition, plus `procedural-ai`. The host chooses
108
+ which information to give its AI; no provider, prompt runner or model
109
+ connection is included.
110
+
111
+ Contract tests, actual development-package imports, public declarations and
112
+ 12 public WebGL2 rendering examples passed verification on 2026-08-28. This does
113
+ not cover the later procedural-program additions, claim other GPU/browser
114
+ support, or mean that an updated package was published.
@@ -0,0 +1,38 @@
1
+ import { type ScenePlanDiagnostic } from "../diagnostics/diagnostics.js";
2
+ import { type ScenePatchContext } from "../model/types.js";
3
+ export type SceneCheckInputKind = "scene" | "blueprint" | "patch";
4
+ export interface SceneCheckOptions {
5
+ readonly inputKind?: "auto" | SceneCheckInputKind;
6
+ readonly context?: ScenePatchContext;
7
+ /** Compile a valid blueprint when every resource has a supplied binding. */
8
+ readonly compile?: boolean;
9
+ }
10
+ export interface SceneCheckRequirement {
11
+ readonly id: string;
12
+ readonly version: string;
13
+ readonly required: boolean;
14
+ }
15
+ export interface SceneCheckSummary {
16
+ readonly id?: string;
17
+ readonly name?: string;
18
+ readonly resources: number;
19
+ readonly entities: number;
20
+ readonly materials: number;
21
+ readonly materialBindings: number;
22
+ readonly flows: number;
23
+ readonly operations: number;
24
+ readonly compiled: boolean;
25
+ readonly planHash?: string;
26
+ }
27
+ /** Pure, deterministic scene input preflight used by SDK and tooling surfaces. */
28
+ export interface SceneCheckReport {
29
+ readonly version: 1;
30
+ readonly status: "valid" | "invalid";
31
+ readonly inputKind: SceneCheckInputKind | "unknown";
32
+ readonly source: "object" | "json-string";
33
+ readonly diagnostics: readonly ScenePlanDiagnostic[];
34
+ readonly requirements: readonly SceneCheckRequirement[];
35
+ readonly summary: SceneCheckSummary;
36
+ }
37
+ export declare function checkSceneInput(input: unknown, options?: SceneCheckOptions): SceneCheckReport;
38
+ //# sourceMappingURL=check-scene-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-scene-input.d.ts","sourceRoot":"","sources":["../../src/check/check-scene-input.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAKL,KAAK,iBAAiB,EAEvB,MAAM,gBAAgB,CAAC;AAMxB,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IACrC,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACrD,QAAQ,CAAC,YAAY,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACrC;AAYD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB,CA+ClB"}
@@ -0,0 +1,209 @@
1
+ import { getSceneDocumentCapabilityUsages, normalizeSceneDocument, } from "@skenora/contracts";
2
+ import { createDiagnostic, finalizeDiagnostics, hasErrors, } from "../diagnostics/diagnostics.js";
3
+ import { SCENE_BLUEPRINT_SCHEMA, SCENE_PATCH_SCHEMA, } from "../model/types.js";
4
+ import { compileSceneBlueprint } from "../compilation/compile.js";
5
+ import { validateScenePatch } from "../patch/patch.js";
6
+ import { validateSceneBlueprint } from "../validation/validate.js";
7
+ import { validateNativeDocumentShape } from "../validation/validate.js";
8
+ const EMPTY_SUMMARY = Object.freeze({
9
+ resources: 0,
10
+ entities: 0,
11
+ materials: 0,
12
+ materialBindings: 0,
13
+ flows: 0,
14
+ operations: 0,
15
+ compiled: false,
16
+ });
17
+ export function checkSceneInput(input, options = {}) {
18
+ const parsed = parseInput(input);
19
+ if (!parsed.ok) {
20
+ return createReport("unknown", parsed.source, parsed.diagnostics, [], EMPTY_SUMMARY);
21
+ }
22
+ const detected = detectInputKind(parsed.value);
23
+ const requested = options.inputKind ?? "auto";
24
+ if (detected === "unknown" ||
25
+ (requested !== "auto" && requested !== detected)) {
26
+ const expected = requested === "auto" ? "a supported Skenora schema" : requested;
27
+ return createReport(detected, parsed.source, [
28
+ createDiagnostic({
29
+ code: "invalid-schema",
30
+ stage: "validate",
31
+ path: ["schema"],
32
+ message: `Expected ${expected} input`,
33
+ recoverable: false,
34
+ }),
35
+ ], [], EMPTY_SUMMARY);
36
+ }
37
+ switch (detected) {
38
+ case "scene":
39
+ return checkNativeScene(parsed.value, parsed.source);
40
+ case "blueprint":
41
+ return checkBlueprint(parsed.value, parsed.source, options);
42
+ case "patch":
43
+ return checkPatch(parsed.value, parsed.source, options.context ?? {});
44
+ default:
45
+ return assertNever(detected);
46
+ }
47
+ }
48
+ function checkNativeScene(input, source) {
49
+ const normalized = normalizeSceneDocument(input);
50
+ const validation = validateNativeDocumentShape(normalized);
51
+ if (!validation.valid) {
52
+ return createReport("scene", source, validation.diagnostics, [], EMPTY_SUMMARY);
53
+ }
54
+ const document = normalized;
55
+ const requirements = dedupeRequirements(getSceneDocumentCapabilityUsages(document).map((usage) => ({
56
+ id: usage.id,
57
+ version: usage.version,
58
+ required: true,
59
+ })));
60
+ return createReport("scene", source, validation.diagnostics, requirements, {
61
+ id: document.id,
62
+ name: document.name,
63
+ resources: Object.keys(document.assets).length,
64
+ entities: Object.keys(document.entities).length,
65
+ materials: Object.keys(document.materials).length,
66
+ materialBindings: Object.keys(document.materialBindings).length,
67
+ flows: Object.keys(document.flows).length,
68
+ operations: 0,
69
+ compiled: true,
70
+ });
71
+ }
72
+ function checkBlueprint(input, source, options) {
73
+ const context = options.context ?? {};
74
+ const hasCapabilityContext = context.capabilities !== undefined ||
75
+ context.capabilityAvailability !== undefined;
76
+ const validationContext = hasCapabilityContext
77
+ ? context
78
+ : { ...context, capabilities: readDeclaredCapabilities(input) };
79
+ const validation = validateSceneBlueprint(input, validationContext);
80
+ const blueprint = validation.normalized;
81
+ if (!blueprint) {
82
+ return createReport("blueprint", source, validation.diagnostics, [], EMPTY_SUMMARY);
83
+ }
84
+ const canCompile = validation.valid &&
85
+ options.compile !== false &&
86
+ (blueprint.requires.length === 0 || hasCapabilityContext) &&
87
+ (blueprint.resources.length === 0 ||
88
+ context.resourceBindings !== undefined);
89
+ const compilation = canCompile
90
+ ? compileSceneBlueprint(blueprint, context)
91
+ : undefined;
92
+ const diagnostics = compilation?.diagnostics ?? validation.diagnostics;
93
+ return createReport("blueprint", source, diagnostics, blueprint.requires.map((requirement) => ({
94
+ id: requirement.id,
95
+ version: requirement.version,
96
+ required: requirement.required,
97
+ })), blueprintSummary(blueprint, compilation?.ok === true, compilation?.planHash));
98
+ }
99
+ function readDeclaredCapabilities(input) {
100
+ if (!isRecord(input) || !Array.isArray(input.requires))
101
+ return [];
102
+ return input.requires.flatMap((requirement) => isRecord(requirement) &&
103
+ typeof requirement.id === "string" &&
104
+ requirement.id.length > 0 &&
105
+ typeof requirement.version === "string" &&
106
+ requirement.version.length > 0
107
+ ? [{ id: requirement.id, version: requirement.version }]
108
+ : []);
109
+ }
110
+ function checkPatch(input, source, context) {
111
+ const validation = validateScenePatch(input, context);
112
+ const patch = validation.normalized;
113
+ return createReport("patch", source, validation.diagnostics, [], patch ? patchSummary(patch) : EMPTY_SUMMARY);
114
+ }
115
+ function blueprintSummary(blueprint, compiled, planHash) {
116
+ return {
117
+ id: blueprint.scene.id,
118
+ name: blueprint.scene.name,
119
+ resources: blueprint.resources.length,
120
+ entities: blueprint.entities.length,
121
+ materials: blueprint.materials.length,
122
+ materialBindings: blueprint.materialBindings.length,
123
+ flows: blueprint.flows.length,
124
+ operations: 0,
125
+ compiled,
126
+ ...(planHash === undefined ? {} : { planHash }),
127
+ };
128
+ }
129
+ function patchSummary(patch) {
130
+ return {
131
+ id: patch.target.sceneId,
132
+ resources: 0,
133
+ entities: 0,
134
+ materials: 0,
135
+ materialBindings: 0,
136
+ flows: 0,
137
+ operations: patch.operations.length,
138
+ compiled: false,
139
+ };
140
+ }
141
+ function createReport(inputKind, source, diagnostics, requirements, summary) {
142
+ const finalized = finalizeDiagnostics(diagnostics);
143
+ return Object.freeze({
144
+ version: 1,
145
+ status: hasErrors(finalized) ? "invalid" : "valid",
146
+ inputKind,
147
+ source,
148
+ diagnostics: finalized,
149
+ requirements: Object.freeze(dedupeRequirements(requirements)),
150
+ summary: Object.freeze({ ...summary }),
151
+ });
152
+ }
153
+ function dedupeRequirements(requirements) {
154
+ const byIdentity = new Map();
155
+ for (const requirement of requirements) {
156
+ const key = `${requirement.id}@${requirement.version}`;
157
+ const previous = byIdentity.get(key);
158
+ byIdentity.set(key, {
159
+ ...requirement,
160
+ required: requirement.required || previous?.required === true,
161
+ });
162
+ }
163
+ return [...byIdentity.values()].sort((left, right) => `${left.id}@${left.version}`.localeCompare(`${right.id}@${right.version}`));
164
+ }
165
+ function parseInput(input) {
166
+ if (typeof input !== "string")
167
+ return { ok: true, source: "object", value: input, diagnostics: [] };
168
+ try {
169
+ return {
170
+ ok: true,
171
+ source: "json-string",
172
+ value: JSON.parse(input),
173
+ diagnostics: [],
174
+ };
175
+ }
176
+ catch (error) {
177
+ return {
178
+ ok: false,
179
+ source: "json-string",
180
+ diagnostics: [
181
+ createDiagnostic({
182
+ code: "invalid-json",
183
+ stage: "parse",
184
+ path: [],
185
+ message: error instanceof Error ? error.message : "Invalid JSON",
186
+ recoverable: false,
187
+ }),
188
+ ],
189
+ };
190
+ }
191
+ }
192
+ function detectInputKind(input) {
193
+ if (!isRecord(input))
194
+ return "unknown";
195
+ if (input.schema === "skenora.scene")
196
+ return "scene";
197
+ if (input.schema === SCENE_BLUEPRINT_SCHEMA)
198
+ return "blueprint";
199
+ if (input.schema === SCENE_PATCH_SCHEMA)
200
+ return "patch";
201
+ return "unknown";
202
+ }
203
+ function isRecord(value) {
204
+ return value !== null && typeof value === "object" && !Array.isArray(value);
205
+ }
206
+ function assertNever(value) {
207
+ throw new Error(`Unsupported check input kind: ${String(value)}`);
208
+ }
209
+ //# sourceMappingURL=check-scene-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-scene-input.js","sourceRoot":"","sources":["../../src/check/check-scene-input.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,sBAAsB,GAEvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,GAEV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GAKnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAyCrE,MAAM,aAAa,GAAsB,MAAM,CAAC,MAAM,CAAC;IACrD,SAAS,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;IACZ,gBAAgB,EAAE,CAAC;IACnB,KAAK,EAAE,CAAC;IACR,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,KAAK;CAChB,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAC7B,KAAc,EACd,UAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,YAAY,CACjB,SAAS,EACT,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,WAAW,EAClB,EAAE,EACF,aAAa,CACd,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,IACE,QAAQ,KAAK,SAAS;QACtB,CAAC,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ,CAAC,EAChD,CAAC;QACD,MAAM,QAAQ,GACZ,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,OAAO,YAAY,CACjB,QAAQ,EACR,MAAM,CAAC,MAAM,EACb;YACE,gBAAgB,CAAC;gBACf,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,CAAC,QAAQ,CAAC;gBAChB,OAAO,EAAE,YAAY,QAAQ,QAAQ;gBACrC,WAAW,EAAE,KAAK;aACnB,CAAC;SACH,EACD,EAAE,EACF,aAAa,CACd,CAAC;IACJ,CAAC;IAED,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,KAAK,WAAW;YACd,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACxE;YACE,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAc,EACd,MAAkC;IAElC,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,YAAY,CACjB,OAAO,EACP,MAAM,EACN,UAAU,CAAC,WAAW,EACtB,EAAE,EACF,aAAa,CACd,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,UAA+B,CAAC;IACjD,MAAM,YAAY,GAAG,kBAAkB,CACrC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzD,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC,CACJ,CAAC;IACF,OAAO,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,EAAE,YAAY,EAAE;QACzE,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM;QAC9C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM;QAC/C,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM;QACjD,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM;QAC/D,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM;QACzC,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,MAAkC,EAClC,OAA0B;IAE1B,MAAM,OAAO,GAAqB,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACxD,MAAM,oBAAoB,GACxB,OAAO,CAAC,YAAY,KAAK,SAAS;QAClC,OAAO,CAAC,sBAAsB,KAAK,SAAS,CAAC;IAC/C,MAAM,iBAAiB,GAAqB,oBAAoB;QAC9D,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;IAClE,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,YAAY,CACjB,WAAW,EACX,MAAM,EACN,UAAU,CAAC,WAAW,EACtB,EAAE,EACF,aAAa,CACd,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GACd,UAAU,CAAC,KAAK;QAChB,OAAO,CAAC,OAAO,KAAK,KAAK;QACzB,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,oBAAoB,CAAC;QACzD,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAC/B,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,UAAU;QAC5B,CAAC,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC;QAC3C,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,WAAW,GAAG,WAAW,EAAE,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC;IACvE,OAAO,YAAY,CACjB,WAAW,EACX,MAAM,EACN,WAAW,EACX,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACvC,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,QAAQ,EAAE,WAAW,CAAC,QAAQ;KAC/B,CAAC,CAAC,EACH,gBAAgB,CACd,SAAS,EACT,WAAW,EAAE,EAAE,KAAK,IAAI,EACxB,WAAW,EAAE,QAAQ,CACtB,CACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAClE,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAC5C,QAAQ,CAAC,WAAW,CAAC;QACrB,OAAO,WAAW,CAAC,EAAE,KAAK,QAAQ;QAClC,WAAW,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;QACzB,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ;QACvC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAC5B,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;QACxD,CAAC,CAAC,EAAE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,KAAc,EACd,MAAkC,EAClC,OAA0B;IAE1B,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC;IACpC,OAAO,YAAY,CACjB,OAAO,EACP,MAAM,EACN,UAAU,CAAC,WAAW,EACtB,EAAE,EACF,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,SAAyB,EACzB,QAAiB,EACjB,QAA4B;IAE5B,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE;QACtB,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI;QAC1B,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM;QACrC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM;QACnC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM;QACrC,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,CAAC,MAAM;QACnD,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;QAC7B,UAAU,EAAE,CAAC;QACb,QAAQ;QACR,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;QACxB,SAAS,EAAE,CAAC;QACZ,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;QACZ,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;QACnC,QAAQ,EAAE,KAAK;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,SAAwC,EACxC,MAAkC,EAClC,WAA2C,EAC3C,YAA8C,EAC9C,OAA0B;IAE1B,MAAM,SAAS,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QAClD,SAAS;QACT,MAAM;QACN,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC7D,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;KACvC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CACzB,YAA8C;IAE9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC5D,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,EAAE,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,GAAG,WAAW;YACd,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,QAAQ,EAAE,QAAQ,KAAK,IAAI;SAC9D,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnD,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAC3E,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAYhC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACvE,IAAI,CAAC;QACH,OAAO;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY;YACnC,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,aAAa;YACrB,WAAW,EAAE;gBACX,gBAAgB,CAAC;oBACf,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,EAAE;oBACR,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc;oBAChE,WAAW,EAAE,KAAK;iBACnB,CAAC;aACH;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,eAAe;QAAE,OAAO,OAAO,CAAC;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,sBAAsB;QAAE,OAAO,WAAW,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,kBAAkB;QAAE,OAAO,OAAO,CAAC;IACxD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAAC,KAAY;IAC/B,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type SceneBlueprintCompilationResult } from "../diagnostics/diagnostics.js";
2
+ import type { ScenePlanContext } from "../model/types.js";
3
+ export declare function compileSceneBlueprint(input: unknown, context?: ScenePlanContext): SceneBlueprintCompilationResult;
4
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compilation/compile.ts"],"names":[],"mappings":"AAYA,OAAO,EAIL,KAAK,+BAA+B,EAGrC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAKV,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AAaxB,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,gBAAqB,GAC7B,+BAA+B,CAsHjC"}