@aura3d/engine 1.5.0 → 1.5.1

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 (51) hide show
  1. package/README.md +77 -46
  2. package/dist/engine/agent-api/ApplicationKits.d.ts +307 -0
  3. package/dist/engine/agent-api/ApplicationKits.d.ts.map +1 -0
  4. package/dist/engine/agent-api/ApplicationKits.js +650 -0
  5. package/dist/engine/agent-api/ApplicationKits.js.map +1 -0
  6. package/dist/engine/agent-api/CombatFrameData.d.ts +210 -0
  7. package/dist/engine/agent-api/CombatFrameData.d.ts.map +1 -0
  8. package/dist/engine/agent-api/CombatFrameData.js +324 -0
  9. package/dist/engine/agent-api/CombatFrameData.js.map +1 -0
  10. package/dist/engine/agent-api/FocusSelection.d.ts +186 -0
  11. package/dist/engine/agent-api/FocusSelection.d.ts.map +1 -0
  12. package/dist/engine/agent-api/FocusSelection.js +436 -0
  13. package/dist/engine/agent-api/FocusSelection.js.map +1 -0
  14. package/dist/engine/agent-api/GameGenreKits.d.ts +32 -1
  15. package/dist/engine/agent-api/GameGenreKits.d.ts.map +1 -1
  16. package/dist/engine/agent-api/GameGenreKits.js +51 -7
  17. package/dist/engine/agent-api/GameGenreKits.js.map +1 -1
  18. package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts +10 -0
  19. package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts.map +1 -1
  20. package/dist/engine/agent-api/GameSceneGeometryBindings.js +7 -0
  21. package/dist/engine/agent-api/GameSceneGeometryBindings.js.map +1 -1
  22. package/dist/engine/agent-api/PlatformerMotion.d.ts +177 -0
  23. package/dist/engine/agent-api/PlatformerMotion.d.ts.map +1 -0
  24. package/dist/engine/agent-api/PlatformerMotion.js +207 -0
  25. package/dist/engine/agent-api/PlatformerMotion.js.map +1 -0
  26. package/dist/engine/agent-api/SceneQueries.d.ts +124 -0
  27. package/dist/engine/agent-api/SceneQueries.d.ts.map +1 -0
  28. package/dist/engine/agent-api/SceneQueries.js +221 -0
  29. package/dist/engine/agent-api/SceneQueries.js.map +1 -0
  30. package/dist/engine/agent-api/SpatialAnchoring.d.ts +232 -0
  31. package/dist/engine/agent-api/SpatialAnchoring.d.ts.map +1 -0
  32. package/dist/engine/agent-api/SpatialAnchoring.js +348 -0
  33. package/dist/engine/agent-api/SpatialAnchoring.js.map +1 -0
  34. package/dist/engine/agent-api/VehicleChassis.d.ts +192 -0
  35. package/dist/engine/agent-api/VehicleChassis.d.ts.map +1 -0
  36. package/dist/engine/agent-api/VehicleChassis.js +322 -0
  37. package/dist/engine/agent-api/VehicleChassis.js.map +1 -0
  38. package/dist/engine/agent-api/VehicleDriverAi.d.ts +123 -0
  39. package/dist/engine/agent-api/VehicleDriverAi.d.ts.map +1 -0
  40. package/dist/engine/agent-api/VehicleDriverAi.js +217 -0
  41. package/dist/engine/agent-api/VehicleDriverAi.js.map +1 -0
  42. package/dist/engine/agent-api/WorldLabelRenderer.d.ts +146 -0
  43. package/dist/engine/agent-api/WorldLabelRenderer.d.ts.map +1 -0
  44. package/dist/engine/agent-api/WorldLabelRenderer.js +331 -0
  45. package/dist/engine/agent-api/WorldLabelRenderer.js.map +1 -0
  46. package/dist/engine/agent-api/index.d.ts +30 -0
  47. package/dist/engine/agent-api/index.d.ts.map +1 -1
  48. package/dist/engine/agent-api/index.js +87 -1
  49. package/dist/engine/agent-api/index.js.map +1 -1
  50. package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
  51. package/package.json +8 -2
package/README.md CHANGED
@@ -87,55 +87,86 @@ repo. The claim-boundary and release evidence docs live under `docs/` for teams
87
87
  that need strict publication review, but the developer path starts here: create
88
88
  an app, add typed assets, run it, test it, deploy it.
89
89
 
90
- ## Current Release: Aura3D 1.5.0
91
-
92
- Aura3D 1.5.0 is the current source release across all 26 public packages. This is
93
- an **architectural release**: scene composition, subject framing, on-screen
94
- controls and role-aware asset admission moved out of per-route authoring and into
95
- reusable engine APIs.
96
-
97
- ### What shipped in 1.5.0
98
-
99
- - **Layered scene composition:** `planLayeredSceneComposition` and
100
- `platformerCompositionSpec` plan deterministic foreground / midground /
101
- far-background prop distribution from declarative intent — span, gameplay
102
- depth, prop vocabulary, protected zones, density scale. Seeded, so retained
103
- screenshots reproduce frame-for-frame.
104
- - **Graded sky backdrops:** `planSkyBackdrop`, `blendSkyBandColor` and
105
- `skyBandCountForRamp` replace hand-authored sky planes, grade both sides of the
106
- horizon, and derive band count from the colour ramp so a gradient cannot read
107
- as a visible stair.
108
- - **Typed subject placement:** `resolveSubjectPlacementFacts` derives ground
109
- contact, visual centre, framing bounds and a wheel/foot contact region from
110
- typed manifest bounds, so route code no longer restates asset dimensions.
111
- - **Reusable touch controls:** `bindGameTouchControls` replaces
112
- pointer-to-keyboard wiring that had been duplicated between routes; idempotent
113
- per element, releases held keys on teardown, reports missing element ids.
114
- - **Role-aware asset admission:** 21 distinct recorded checks against a requested
115
- role rather than one global pass/fail, including normalization requirement,
116
- orientation evidence, origin/pivot sanity and material completeness.
117
- Orientation is never inferred — absent evidence is reported, not guessed.
118
- - **Deterministic candidate selection:** `assets resolve --index <n>` and
119
- `--candidate-id <provider:id>`, with loud failure on out-of-range or unknown
120
- ids and no silent fallback to the top search result.
121
- - **Per-primitive submission diagnostics:** `auditPrimitiveSubmission` records 18
122
- fields per primitive — index component type, alpha mode / cutoff / effective
123
- opacity, texture readiness, frustum verdict, optional glTF provenance — so a
124
- missing part is attributable rather than inferred.
125
- - **Freshness-bound evidence:** `pnpm explain:staleness` retains its own audit
126
- artifact, declared in the producer registry, with a machine-readable reason
127
- required for every stale verdict.
128
-
129
- Measured: reusable visual-layer ratio **9.33x → 6.08x** (2.16x excluding the
130
- Aura Clash outlier); repeated cross-route code clusters **6 → 0**;
131
- route-specific exceptions in engine code **0**.
90
+ ## Current Release: Aura3D 1.5.1
91
+
92
+ Aura3D 1.5.1 is the current source release across all 26 public packages. This is a
93
+ **product-remediation release**: three reported interaction defects and four reported
94
+ game-runtime defects were root-caused at the library level and fixed with reusable
95
+ systems, each backed by unit tests and a runtime probe rather than by a screenshot.
96
+
97
+ ### What shipped in 1.5.1
98
+
99
+ - **Focus and selection (`focusObject`, `focusSemanticRegion`).** A focus indicator
100
+ rendered as a flat bar because Aura3D's torus is a ring in local **XY** with its tube
101
+ on **Z**, and a route scaled its ring-plane radius instead of its tube. The axis
102
+ convention is now published as `AURA_PRIMITIVE_AXES`, and indicator correctness is
103
+ asserted per result — circular in its own plane, thinned on the tube axis, enclosing
104
+ its target, callout outside it.
105
+ - **World-anchored labels.** `labels.callout(...)` produced a valid node that nothing
106
+ drew: label rendering lived only in the canvas2d fallback, while every route with a
107
+ typed GLB takes the production WebGL2 path. Evidence counted label *nodes*, so reports
108
+ stayed green while the screen showed none. There is now a real screen-space label layer
109
+ in the production path, and `AuraDiagnostics.labels` reports what was actually placed.
110
+ - **Asset-relative layout (`SpatialAnchoring`).** `placedBoundsFromAsset`, 19 bounds
111
+ anchors, normalized semantic regions, deterministic distribution and
112
+ `checkSpatialInvariants` replace literal helper coordinates that stopped matching their
113
+ asset.
114
+ - **Vehicle chassis and AI driving.** A car pinned to a literal height cannot respond to
115
+ the road; `createVehicleChassis` resolves contact, suspension and attitude from four
116
+ contact points, deriving geometry from the asset's own bounds.
117
+ `createVehicleDriverAi` steers toward a look-ahead point on the racing line with
118
+ curvature-based corner speeds, so it turns into a corner rather than after it.
119
+ - **Platformer motion solving.** `solvePlatformerMotion` derives gravity, jump velocity
120
+ and move speed from a level's own platform geometry; `validatePlatformerMotion` refuses
121
+ tuning inconsistent with it. A shipped level had a 5.76x jump overshoot that passed
122
+ every gate because the level was *solvable*.
123
+ - **Frame-based combat.** `solveCombatFrameData` and `validateCombatFrameData` validate
124
+ frame data *as* frame data. A shipped move table had 12–32 active frames against 4–5
125
+ recovery, inverted from any real fighting game, so every move was safe on block.
126
+ - **Application kits.** Five reusable kits — product configurator, digital twin,
127
+ architecture, smart city, cinematic. Each publishes a `capabilities` report naming what
128
+ it deliberately does **not** own.
129
+ - **Scene queries.** Raycasts, sphere casts and ground probes reachable from the public
130
+ API; previously implemented in `@aura3d/physics` and unreachable from a route.
131
+
132
+ ### Measured
133
+
134
+ - **87 of 87** public controls and **47 of 47** keyboard bindings verified *by operation*
135
+ across 13 routes, with zero console errors.
136
+ - **21 of 21** combined quality gates pass with **zero unproven**. Missing evidence is
137
+ reported as `unproven`, never as a pass.
138
+ - **2903 of 2904** unit and integration tests, identical across two serial runs.
139
+ - Clean-room projects against the public surface only: **137 / 142 / 122 / 99** authored
140
+ lines against budgets of 200 / 200 / 300 / 300; one package imported each; **zero**
141
+ private imports.
142
+ - Route-local magic-geometry findings in published routes: **47 → 7**.
143
+
144
+ ### What is still not resolved
145
+
146
+ Stated because a release note that omits this is not useful:
147
+
148
+ - `showcase-blockfall-reactor`, `showcase-skyline-runner` and
149
+ `showcase-turbo-drift-circuit` remain **prototype-blocked**. Their physics and frame
150
+ data are correct; whether they are good games is a judgement their visual review has
151
+ not yet made.
152
+ - `aura-clash-showcase` is **not in the route-gate registry**, so showcase-wide gates do
153
+ not cover it. It carries its own 23-spec suite.
154
+ - `@aura3d/engine-runtime` still declares 322 exports duplicating other packages; 51
155
+ exported symbol names have more than one owning package.
156
+ - Five physics capabilities remain unreachable from the public API: penetration
157
+ resolution, friction, restitution, constraints, continuous collision detection.
158
+ - Practical Three.js ecosystem parity is **6 exceed / 37 parity / 10 unproven / 3 gap**
159
+ across 56 capabilities. Aura3D is behind on ecosystem breadth, shader authoring
160
+ through the safe API, 3D text, and LOD/instancing exposure.
161
+
162
+ Full ledger and final report: `docs/project/plans/aura3d-product-remediation-prd.md`.
132
163
 
133
164
  Install after the npm publication completes:
134
165
 
135
166
  ```bash
136
- npm install @aura3d/engine@1.5.0
167
+ npm install @aura3d/engine@1.5.1
137
168
  # or scaffold an app
138
- npx create-aura3d@1.5.0 my-product --template product-viewer
169
+ npx create-aura3d@1.5.1 my-product --template product-viewer
139
170
  ```
140
171
 
141
172
  Detailed release notes are in
@@ -164,7 +195,7 @@ npx @aura3d/cli@latest assets validate-game --profile fighting-character --asset
164
195
  `--profile fighting-character` requires animated GLB candidates from verified CC0/CC-BY sources, applies a browser-sized triangle budget, and writes source URL, license, author/attribution, and source family into `aura.assets.json` during `assets resolve`.
165
196
  ## Aura3D 1.1.0 runtime launch track
166
197
 
167
- Aura3D 1.1.0 introduced the runtime and animation evidence foundation; 1.5.0 is
198
+ Aura3D 1.1.0 introduced the runtime and animation evidence foundation; 1.5.1 is
168
199
  the current package release that carries it forward:
169
200
 
170
201
  - `game runtime`: mutable runtime nodes, app-owned frame loops, input, kinematic bodies, hitboxes, combat events, camera direction, effects, and evidence for browser-native game prototypes.
@@ -624,7 +655,7 @@ Aura3D 1.1.0 game-engine/showcase readiness is stricter:
624
655
  pnpm aura3d110:readiness
625
656
  ```
626
657
 
627
- Expected current state — The scoped package gates pass for the 1.5.0 baseline,
658
+ Expected current state — The scoped package gates pass for the 1.5.1 baseline,
628
659
  but the current route-library gate is deliberately non-passing until independent
629
660
  review is current. Blockfall Reactor, Turbo Drift Circuit, and Skyline Runner are
630
661
  prototype-blocked during visual reconstruction; their typed assets, mounted
@@ -0,0 +1,307 @@
1
+ /**
2
+ * Reusable application kits for static and enterprise experiences.
3
+ *
4
+ * ## Why these exist
5
+ *
6
+ * The remediation's reusable *systems* -- focus, labels, asset-relative anchoring -- removed
7
+ * the defects that made these routes wrong. They did not remove the reason each route is
8
+ * 800 to 1,400 lines: every one still assembles part selection, variant state, overlay
9
+ * composition, camera presets and annotation placement by hand, and each assembles it
10
+ * slightly differently. A developer building a sixth configurator gets no help from the five
11
+ * that exist.
12
+ *
13
+ * A kit owns that assembly. A route declares *what* it is configuring -- these parts, these
14
+ * variants, these zones, these camera presets -- and the kit owns selection state, focus
15
+ * feedback, annotation placement, camera framing, reset and the evidence a gate needs. The
16
+ * route composes scene nodes from the kit's output instead of computing them.
17
+ *
18
+ * All five kits are pure: they hold state and return scene-node JSON plus intent. No
19
+ * renderer, no DOM, no asset loading, so each is unit-testable and reusable by any route.
20
+ *
21
+ * Deliberately *not* included: anything a kit cannot honestly own. Measurement and section
22
+ * views in the architecture kit need geometry the public API does not expose, so they are
23
+ * reported as absent. See `unsupported` on each kit's capability report.
24
+ */
25
+ import type { AuraCameraSpec, AuraColor, AuraSceneNode, AuraVec3 } from "./index.js";
26
+ import { type FocusIndicator, type FocusResult } from "./FocusSelection.js";
27
+ import { type BoundsAnchor, type PlacedBounds, type SemanticRegion, type SpatialInvariantReport } from "./SpatialAnchoring.js";
28
+ /** Capability report every kit publishes, so a claim can be checked against it. */
29
+ export interface KitCapabilityReport {
30
+ readonly kind: "aura-application-kit-capabilities";
31
+ readonly kit: string;
32
+ /** Capabilities the kit owns and a route no longer implements. */
33
+ readonly supported: readonly string[];
34
+ /**
35
+ * Capabilities the assignment names that this kit does **not** own, with the reason.
36
+ *
37
+ * Present so a kit cannot imply completeness it does not have. Returning empty geometry for
38
+ * a capability the kit does not own would be worse than declaring the absence.
39
+ */
40
+ readonly unsupported: readonly {
41
+ readonly capability: string;
42
+ readonly reason: string;
43
+ }[];
44
+ }
45
+ export interface ConfiguratorPart extends SemanticRegion {
46
+ /** Optional price contribution, for data binding. */
47
+ readonly price?: number | undefined;
48
+ }
49
+ export interface ConfiguratorVariant {
50
+ readonly id: string;
51
+ readonly label: string;
52
+ readonly color: AuraColor;
53
+ readonly accent: AuraColor;
54
+ readonly price?: number | undefined;
55
+ }
56
+ export interface ConfiguratorFinish {
57
+ readonly id: string;
58
+ readonly label: string;
59
+ readonly price?: number | undefined;
60
+ }
61
+ export interface ConfiguratorCameraPreset {
62
+ readonly id: string;
63
+ readonly camera: AuraCameraSpec;
64
+ }
65
+ export interface ProductConfiguratorKitOptions {
66
+ /** Placed bounds of the product, from `placedBoundsFromAsset`. */
67
+ readonly bounds: PlacedBounds;
68
+ readonly parts: readonly ConfiguratorPart[];
69
+ readonly variants: readonly ConfiguratorVariant[];
70
+ readonly finishes: readonly ConfiguratorFinish[];
71
+ readonly cameraPresets?: readonly ConfiguratorCameraPreset[] | undefined;
72
+ /** Base price, before variant and finish contributions. */
73
+ readonly basePrice?: number | undefined;
74
+ /** Focus indicators to draw for a selected part. */
75
+ readonly indicators?: readonly FocusIndicator[] | undefined;
76
+ /** Viewport aspect, for camera framing. */
77
+ readonly aspect?: number | undefined;
78
+ }
79
+ export interface ProductConfiguratorState {
80
+ readonly variantId: string;
81
+ readonly finishId: string;
82
+ readonly partId: string | undefined;
83
+ readonly exploded: boolean;
84
+ readonly cameraPresetId: string | undefined;
85
+ }
86
+ export interface ProductConfiguratorFrame {
87
+ readonly kind: "aura-product-configurator-frame";
88
+ readonly state: ProductConfiguratorState;
89
+ /** Focus indicator and annotation nodes for the current selection. */
90
+ readonly nodes: readonly AuraSceneNode[];
91
+ /** Exploded-part placements, empty unless `exploded`. */
92
+ readonly explodedPlacements: readonly {
93
+ readonly partId: string;
94
+ readonly position: AuraVec3;
95
+ readonly size: AuraVec3;
96
+ }[];
97
+ readonly camera: AuraCameraSpec | undefined;
98
+ readonly focus: FocusResult;
99
+ readonly price: number | undefined;
100
+ readonly accessibilityLabel: string;
101
+ readonly spatialInvariants: SpatialInvariantReport;
102
+ }
103
+ export interface ProductConfiguratorKit {
104
+ readonly kind: "aura-product-configurator-kit";
105
+ readonly capabilities: KitCapabilityReport;
106
+ selectVariant(variantId: string): ProductConfiguratorFrame;
107
+ selectFinish(finishId: string): ProductConfiguratorFrame;
108
+ /** Select a part, or pass the current part again to deselect it. */
109
+ selectPart(partId: string | undefined): ProductConfiguratorFrame;
110
+ toggleExploded(): ProductConfiguratorFrame;
111
+ selectCameraPreset(presetId: string | undefined): ProductConfiguratorFrame;
112
+ reset(): ProductConfiguratorFrame;
113
+ frame(): ProductConfiguratorFrame;
114
+ }
115
+ export declare function createProductConfiguratorKit(options: ProductConfiguratorKitOptions): ProductConfiguratorKit;
116
+ export interface TwinEquipment extends SemanticRegion {
117
+ /** Sensor readings a route supplies; the kit carries them into overlays and evidence. */
118
+ readonly sensors?: Readonly<Record<string, number>> | undefined;
119
+ }
120
+ export interface TwinAlarm {
121
+ readonly equipmentId: string;
122
+ readonly severity: "info" | "warning" | "critical";
123
+ readonly message: string;
124
+ }
125
+ export interface DigitalTwinKitOptions {
126
+ readonly bounds: PlacedBounds;
127
+ readonly equipment: readonly TwinEquipment[];
128
+ /** Where the alarm beacon sits relative to the workcell. */
129
+ readonly alarmAnchor?: BoundsAnchor | undefined;
130
+ /** Conveyor or belt region, for distributed markers. */
131
+ readonly flowRegion?: SemanticRegion | undefined;
132
+ readonly markerCount?: number | undefined;
133
+ readonly aspect?: number | undefined;
134
+ }
135
+ export interface DigitalTwinFrame {
136
+ readonly kind: "aura-digital-twin-frame";
137
+ readonly selectedEquipmentId: string | undefined;
138
+ readonly focused: boolean;
139
+ readonly mode: string;
140
+ readonly nodes: readonly AuraSceneNode[];
141
+ /** Marker placements along the flow region, deterministic for a given seed. */
142
+ readonly markerPlacements: readonly AuraVec3[];
143
+ readonly alarmPosition: AuraVec3;
144
+ readonly camera: AuraCameraSpec | undefined;
145
+ readonly alarms: readonly TwinAlarm[];
146
+ readonly sensorReadout: Readonly<Record<string, number>>;
147
+ readonly timeline: {
148
+ readonly step: number;
149
+ readonly steps: number;
150
+ };
151
+ readonly spatialInvariants: SpatialInvariantReport;
152
+ readonly accessibilityLabel: string;
153
+ }
154
+ export interface DigitalTwinKit {
155
+ readonly kind: "aura-digital-twin-kit";
156
+ readonly capabilities: KitCapabilityReport;
157
+ selectEquipment(equipmentId: string | undefined): DigitalTwinFrame;
158
+ setMode(mode: string): DigitalTwinFrame;
159
+ toggleFocus(): DigitalTwinFrame;
160
+ raiseAlarm(alarm: TwinAlarm): DigitalTwinFrame;
161
+ clearAlarms(): DigitalTwinFrame;
162
+ /** Advance the state-simulation timeline by one step. */
163
+ advanceTimeline(): DigitalTwinFrame;
164
+ reset(): DigitalTwinFrame;
165
+ frame(): DigitalTwinFrame;
166
+ }
167
+ export declare function createDigitalTwinKit(options: DigitalTwinKitOptions): DigitalTwinKit;
168
+ export interface ArchitectureSpace extends SemanticRegion {
169
+ /** Which floor this space belongs to, so floor focus can group spaces. */
170
+ readonly floor: number;
171
+ }
172
+ export interface ArchitectureKitOptions {
173
+ readonly bounds: PlacedBounds;
174
+ readonly spaces: readonly ArchitectureSpace[];
175
+ /** Named lighting moods a route supplies. */
176
+ readonly moods: readonly {
177
+ readonly id: string;
178
+ readonly label: string;
179
+ readonly sunElevation: number;
180
+ readonly sunAzimuth: number;
181
+ }[];
182
+ readonly materialVariants?: readonly {
183
+ readonly id: string;
184
+ readonly label: string;
185
+ }[] | undefined;
186
+ readonly aspect?: number | undefined;
187
+ }
188
+ export interface ArchitectureFrame {
189
+ readonly kind: "aura-architecture-frame";
190
+ readonly floor: number | undefined;
191
+ readonly spaceId: string | undefined;
192
+ readonly moodId: string;
193
+ readonly materialVariantId: string | undefined;
194
+ readonly nodes: readonly AuraSceneNode[];
195
+ readonly camera: AuraCameraSpec | undefined;
196
+ /** Sun direction for the active mood, as a unit vector. */
197
+ readonly sunDirection: AuraVec3;
198
+ /** Spaces on the focused floor, or all spaces when no floor is focused. */
199
+ readonly visibleSpaceIds: readonly string[];
200
+ readonly spatialInvariants: SpatialInvariantReport;
201
+ readonly accessibilityLabel: string;
202
+ }
203
+ export interface ArchitectureKit {
204
+ readonly kind: "aura-architecture-kit";
205
+ readonly capabilities: KitCapabilityReport;
206
+ focusFloor(floor: number | undefined): ArchitectureFrame;
207
+ focusSpace(spaceId: string | undefined): ArchitectureFrame;
208
+ setMood(moodId: string): ArchitectureFrame;
209
+ setMaterialVariant(variantId: string | undefined): ArchitectureFrame;
210
+ reset(): ArchitectureFrame;
211
+ frame(): ArchitectureFrame;
212
+ }
213
+ export declare function createArchitectureKit(options: ArchitectureKitOptions): ArchitectureKit;
214
+ export interface CityDistrict extends SemanticRegion {
215
+ readonly color: AuraColor;
216
+ }
217
+ export interface CityDataLayer {
218
+ readonly id: string;
219
+ readonly label: string;
220
+ /** Values per district id, so a layer's overlay follows the district it describes. */
221
+ readonly values: Readonly<Record<string, number>>;
222
+ }
223
+ export interface SmartCityKitOptions {
224
+ readonly bounds: PlacedBounds;
225
+ readonly districts: readonly CityDistrict[];
226
+ readonly layers: readonly CityDataLayer[];
227
+ /** Temporal states, such as time of day. */
228
+ readonly temporalStates?: readonly string[] | undefined;
229
+ readonly aspect?: number | undefined;
230
+ }
231
+ export interface SmartCityFrame {
232
+ readonly kind: "aura-smart-city-frame";
233
+ readonly districtId: string | undefined;
234
+ readonly activeLayerIds: readonly string[];
235
+ readonly temporalState: string | undefined;
236
+ readonly nodes: readonly AuraSceneNode[];
237
+ readonly camera: AuraCameraSpec | undefined;
238
+ /** Overlay placement and value per district, for each active layer. */
239
+ readonly overlays: readonly {
240
+ readonly layerId: string;
241
+ readonly districtId: string;
242
+ readonly position: AuraVec3;
243
+ readonly value: number;
244
+ }[];
245
+ /** Districts rendered at reduced detail because too many are active at once. */
246
+ readonly reducedDetailDistrictIds: readonly string[];
247
+ readonly spatialInvariants: SpatialInvariantReport;
248
+ readonly accessibilityLabel: string;
249
+ }
250
+ export interface SmartCityKit {
251
+ readonly kind: "aura-smart-city-kit";
252
+ readonly capabilities: KitCapabilityReport;
253
+ selectDistrict(districtId: string | undefined): SmartCityFrame;
254
+ toggleLayer(layerId: string): SmartCityFrame;
255
+ setTemporalState(state: string | undefined): SmartCityFrame;
256
+ reset(): SmartCityFrame;
257
+ frame(): SmartCityFrame;
258
+ }
259
+ export declare function createSmartCityKit(options: SmartCityKitOptions): SmartCityKit;
260
+ export interface CinematicShot {
261
+ readonly id: string;
262
+ readonly seconds: number;
263
+ readonly from: AuraVec3;
264
+ readonly to: AuraVec3;
265
+ readonly target: AuraVec3;
266
+ /** Animation clip to coordinate with this shot, when there is one. */
267
+ readonly clip?: string | undefined;
268
+ readonly transition?: "cut" | "ease" | "linear" | undefined;
269
+ }
270
+ export interface CinematicKitOptions {
271
+ readonly shots: readonly CinematicShot[];
272
+ readonly fov?: number | undefined;
273
+ }
274
+ export interface CinematicFrame {
275
+ readonly kind: "aura-cinematic-frame";
276
+ readonly time: number;
277
+ readonly shotId: string;
278
+ readonly shotIndex: number;
279
+ /** Progress through the current shot, 0..1. */
280
+ readonly shotProgress: number;
281
+ readonly camera: AuraCameraSpec;
282
+ readonly activeClip: string | undefined;
283
+ /** True while a transition into this shot is still resolving. */
284
+ readonly transitioning: boolean;
285
+ readonly totalSeconds: number;
286
+ }
287
+ export interface CinematicKit {
288
+ readonly kind: "aura-cinematic-kit";
289
+ readonly capabilities: KitCapabilityReport;
290
+ /** Sample the sequence at a time, in seconds. Pure: no internal clock. */
291
+ sampleAt(seconds: number): CinematicFrame;
292
+ /** Every shot boundary, for timeline UI and export. */
293
+ shotBoundaries(): readonly {
294
+ readonly shotId: string;
295
+ readonly start: number;
296
+ readonly end: number;
297
+ }[];
298
+ /** A deterministic frame list for replay or export at a given rate. */
299
+ exportPlan(fps: number): readonly {
300
+ readonly frame: number;
301
+ readonly time: number;
302
+ readonly shotId: string;
303
+ }[];
304
+ readonly totalSeconds: number;
305
+ }
306
+ export declare function createCinematicKit(options: CinematicKitOptions): CinematicKit;
307
+ //# sourceMappingURL=ApplicationKits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationKits.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/ApplicationKits.ts"],"names":[],"mappings":"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"}