@aura3d/engine 1.5.0 → 1.5.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 (63) hide show
  1. package/README.md +111 -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 +279 -0
  31. package/dist/engine/agent-api/SpatialAnchoring.d.ts.map +1 -0
  32. package/dist/engine/agent-api/SpatialAnchoring.js +394 -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 +64 -1
  47. package/dist/engine/agent-api/index.d.ts.map +1 -1
  48. package/dist/engine/agent-api/index.js +148 -2
  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/dist/rendering/CameraFraming.d.ts +77 -0
  52. package/dist/rendering/CameraFraming.d.ts.map +1 -1
  53. package/dist/rendering/CameraFraming.js +176 -1
  54. package/dist/rendering/CameraFraming.js.map +1 -1
  55. package/dist/rendering/Renderer.d.ts +25 -2
  56. package/dist/rendering/Renderer.d.ts.map +1 -1
  57. package/dist/rendering/Renderer.js +11 -3
  58. package/dist/rendering/Renderer.js.map +1 -1
  59. package/dist/rendering/index.d.ts +3 -3
  60. package/dist/rendering/index.d.ts.map +1 -1
  61. package/dist/rendering/index.js +1 -1
  62. package/dist/rendering/index.js.map +1 -1
  63. package/package.json +120 -115
package/README.md CHANGED
@@ -87,55 +87,120 @@ 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.2
91
+
92
+ Aura3D 1.5.2 is the current source release across all 26 public packages. It adds
93
+ **camera and sizing capability to the public API** and carries an
94
+ **evidence-correctness patch** on top of 1.5.1.
95
+
96
+ ### What shipped in 1.5.2
97
+
98
+ - **Orthographic and isometric cameras on the public surface.** `camera.orthographic()`
99
+ and `camera.isometric()` join the safe agent API with an `orthographicSize` field, and
100
+ `@aura3d/rendering` gains `computeOrthographicCameraFrame` (bounds-derived) and
101
+ `computeOrthographicCameraView` (explicit frustum), selectable through
102
+ `RenderSource.cameraProjection`. Before this, renderer auto-framing could only build a
103
+ perspective frustum, so a scene that needed a parallel projection silently received a
104
+ perspective one — CAD and technical views, isometric games, floor plans, sprite bakes and
105
+ product turntables were all affected. `camera.isometric()` uses the true `atan(1/√2)`
106
+ elevation at which the three world axes project to equal screen lengths. Perspective
107
+ remains the default, so this is not a breaking change.
108
+ - **`fitSizeToRegion()` for bounds-derived asset sizing.** Returns a `targetMaxDimension`
109
+ that sizes an asset to a chosen fraction of the region it occupies. Placement was already
110
+ bounds-derived through `resolveSemanticRegion`; sizing was not, so routes had no correct
111
+ alternative to inventing a scale multiplier that broke whenever the asset or scene
112
+ changed size.
113
+ - **Per-row background estimation in foreground analysis.** Every showcase screenshot gate
114
+ measures silhouette extent, foreground ratio and subject centroid against a background
115
+ estimate. That estimate was a single average of the frame's four corners, which is wrong
116
+ for most of a frame that has a gradient sky: rows near the horizon were compared against
117
+ a colour sampled from the top of the frame, so sky pixels were admitted as subject and
118
+ every derived measurement was computed against an inflated mask. Background is now
119
+ estimated per row from the median of that row's left and right margins, which tracks a
120
+ vertical gradient and tolerates a prop or HUD edge intruding into one margin.
121
+ - **Producer/verifier parity is pinned by equality.** `tools/showcase-library/png-foreground.mjs`
122
+ re-derives the same metrics from the written PNG; the two implementations must now agree
123
+ pixel-for-pixel across gradient, flat-background, off-centre-subject and HUD-crop cases.
124
+ - **Aura Clash evidence route cites current artifacts.** Its evidence model pointed at
125
+ superseded proof files; every required signal now resolves to a field of the current schema.
126
+
127
+ ### What shipped in 1.5.1
128
+
129
+ 1.5.1 was a **product-remediation release**: three reported interaction defects and four
130
+ reported game-runtime defects were root-caused at the library level and fixed with reusable
131
+ systems, each backed by unit tests and a runtime probe rather than by a screenshot.
132
+
133
+ - **Focus and selection (`focusObject`, `focusSemanticRegion`).** A focus indicator
134
+ rendered as a flat bar because Aura3D's torus is a ring in local **XY** with its tube
135
+ on **Z**, and a route scaled its ring-plane radius instead of its tube. The axis
136
+ convention is now published as `AURA_PRIMITIVE_AXES`, and indicator correctness is
137
+ asserted per result — circular in its own plane, thinned on the tube axis, enclosing
138
+ its target, callout outside it.
139
+ - **World-anchored labels.** `labels.callout(...)` produced a valid node that nothing
140
+ drew: label rendering lived only in the canvas2d fallback, while every route with a
141
+ typed GLB takes the production WebGL2 path. Evidence counted label *nodes*, so reports
142
+ stayed green while the screen showed none. There is now a real screen-space label layer
143
+ in the production path, and `AuraDiagnostics.labels` reports what was actually placed.
144
+ - **Asset-relative layout (`SpatialAnchoring`).** `placedBoundsFromAsset`, 19 bounds
145
+ anchors, normalized semantic regions, deterministic distribution and
146
+ `checkSpatialInvariants` replace literal helper coordinates that stopped matching their
147
+ asset.
148
+ - **Vehicle chassis and AI driving.** A car pinned to a literal height cannot respond to
149
+ the road; `createVehicleChassis` resolves contact, suspension and attitude from four
150
+ contact points, deriving geometry from the asset's own bounds.
151
+ `createVehicleDriverAi` steers toward a look-ahead point on the racing line with
152
+ curvature-based corner speeds, so it turns into a corner rather than after it.
153
+ - **Platformer motion solving.** `solvePlatformerMotion` derives gravity, jump velocity
154
+ and move speed from a level's own platform geometry; `validatePlatformerMotion` refuses
155
+ tuning inconsistent with it. A shipped level had a 5.76x jump overshoot that passed
156
+ every gate because the level was *solvable*.
157
+ - **Frame-based combat.** `solveCombatFrameData` and `validateCombatFrameData` validate
158
+ frame data *as* frame data. A shipped move table had 12–32 active frames against 4–5
159
+ recovery, inverted from any real fighting game, so every move was safe on block.
160
+ - **Application kits.** Five reusable kits — product configurator, digital twin,
161
+ architecture, smart city, cinematic. Each publishes a `capabilities` report naming what
162
+ it deliberately does **not** own.
163
+ - **Scene queries.** Raycasts, sphere casts and ground probes reachable from the public
164
+ API; previously implemented in `@aura3d/physics` and unreachable from a route.
165
+
166
+ ### Measured
167
+
168
+ - **87 of 87** public controls and **47 of 47** keyboard bindings verified *by operation*
169
+ across 13 routes, with zero console errors.
170
+ - **21 of 21** combined quality gates pass with **zero unproven**. Missing evidence is
171
+ reported as `unproven`, never as a pass.
172
+ - **2903 of 2904** unit and integration tests, identical across two serial runs.
173
+ - Clean-room projects against the public surface only: **137 / 142 / 122 / 99** authored
174
+ lines against budgets of 200 / 200 / 300 / 300; one package imported each; **zero**
175
+ private imports.
176
+ - Route-local magic-geometry findings in published routes: **47 → 7**.
177
+
178
+ ### What is still not resolved
179
+
180
+ Stated because a release note that omits this is not useful:
181
+
182
+ - `showcase-blockfall-reactor`, `showcase-skyline-runner` and
183
+ `showcase-turbo-drift-circuit` remain **prototype-blocked**. Their physics and frame
184
+ data are correct; whether they are good games is a judgement their visual review has
185
+ not yet made.
186
+ - `aura-clash-showcase` is **not in the route-gate registry**, so showcase-wide gates do
187
+ not cover it. It carries its own 23-spec suite.
188
+ - `@aura3d/engine-runtime` still declares 322 exports duplicating other packages; 51
189
+ exported symbol names have more than one owning package.
190
+ - Five physics capabilities remain unreachable from the public API: penetration
191
+ resolution, friction, restitution, constraints, continuous collision detection.
192
+ - Practical Three.js ecosystem parity is **6 exceed / 37 parity / 10 unproven / 3 gap**
193
+ across 56 capabilities. Aura3D is behind on ecosystem breadth, shader authoring
194
+ through the safe API, 3D text, and LOD/instancing exposure.
195
+
196
+ Full ledger and final report: `docs/project/plans/aura3d-product-remediation-prd.md`.
132
197
 
133
198
  Install after the npm publication completes:
134
199
 
135
200
  ```bash
136
- npm install @aura3d/engine@1.5.0
201
+ npm install @aura3d/engine@1.5.2
137
202
  # or scaffold an app
138
- npx create-aura3d@1.5.0 my-product --template product-viewer
203
+ npx create-aura3d@1.5.2 my-product --template product-viewer
139
204
  ```
140
205
 
141
206
  Detailed release notes are in
@@ -164,7 +229,7 @@ npx @aura3d/cli@latest assets validate-game --profile fighting-character --asset
164
229
  `--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
230
  ## Aura3D 1.1.0 runtime launch track
166
231
 
167
- Aura3D 1.1.0 introduced the runtime and animation evidence foundation; 1.5.0 is
232
+ Aura3D 1.1.0 introduced the runtime and animation evidence foundation; 1.5.2 is
168
233
  the current package release that carries it forward:
169
234
 
170
235
  - `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 +689,7 @@ Aura3D 1.1.0 game-engine/showcase readiness is stricter:
624
689
  pnpm aura3d110:readiness
625
690
  ```
626
691
 
627
- Expected current state — The scoped package gates pass for the 1.5.0 baseline,
692
+ Expected current state — The scoped package gates pass for the 1.5.2 baseline,
628
693
  but the current route-library gate is deliberately non-passing until independent
629
694
  review is current. Blockfall Reactor, Turbo Drift Circuit, and Skyline Runner are
630
695
  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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"}