@cyberart-io/engine 0.0.9 → 0.0.11
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.
- package/CHANGELOG.md +26 -0
- package/dist/headless.d.ts +156 -8
- package/dist/headless.js +1 -1
- package/dist/index.d.ts +169 -9
- package/dist/index.js +1 -1
- package/docs/audio.md +24 -0
- package/docs/browser-harness.md +2 -1
- package/docs/normalized-geometry.md +1 -1
- package/docs/production-scenario.md +121 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@cyberart-io/engine`. Each entry links the guide in `docs/` and the pull request on [cyberart-io/cyberart.io](https://github.com/cyberart-io/cyberart.io). Versions before 0.0.9 predate this file.
|
|
4
4
|
|
|
5
|
+
## Unreleased
|
|
6
|
+
|
|
7
|
+
## 0.0.11 — 2026-09-06
|
|
8
|
+
|
|
9
|
+
Production-scenario overlap precedence and transactional reload. Additive: existing exports keep their signatures.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Transactional production-scenario reload** — `reload` preflights the sidecar envelope, optional `host.validateRestoreState`, projected input surface, and every present module sidecar before mutation. Apply is one transaction with rollback on failure; invalid sidecars localize at subsystem boundaries (`invalid-visual-sidecar`, `invalid-semantic-sidecar`, `invalid-binding-sidecar`, `invalid-sequence-sidecar`, `invalid-audio-sidecar`, `invalid-host-sidecar`). Legacy envelopes omitting sidecar keys remain compatible. [docs/production-scenario.md](docs/production-scenario.md) · [#60](https://github.com/cyberart-io/cyberart.io/pull/60)
|
|
14
|
+
|
|
15
|
+
- **Overlap precedence on production input surface** — `ProductionScenarioControl.priority` resolves intersecting regions deterministically in browser and headless. Equal or missing priority on an overlapping pair still fails closed at boundary `input` (`ambiguous-geometry`). Coordinate clicks record `observation.inputHitTest` (selected and rejected control ids). [docs/production-scenario.md](docs/production-scenario.md) · [#59](https://github.com/cyberart-io/cyberart.io/pull/59)
|
|
16
|
+
|
|
17
|
+
## 0.0.10 — 2026-09-06
|
|
18
|
+
|
|
19
|
+
Production-scenario follow-ups after the 0.0.9 Animation Framework cut. Additive: existing exports keep their signatures.
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- **Dynamic host geometry and controls** — production scenarios project the active input surface from host state (`host.projectInputSurface`). Accepted reduces and reload rebuild visible/focusable controls and the geometry document together. Removed controls are not clickable or focusable. Browser harness `setGeometry` updates CSS hit-testing. Missing, overlapping, or stale geometry fails closed at boundary `input` (`invalid-geometry` / `ambiguous-geometry` / `stale-geometry`). Reload syncs the input surface without `applyPresentation()` (no sequence replay). [docs/production-scenario.md](docs/production-scenario.md) · [docs/browser-harness.md](docs/browser-harness.md) · [#49](https://github.com/cyberart-io/cyberart.io/pull/49)
|
|
24
|
+
|
|
25
|
+
- **Runtime reduced-motion propagation** — a production-scenario `reducedMotion` step (and `setReducedMotion`) updates browser/a11y plus visual, sequence, and audio/reduced-sensory policy. Active sequences **continue** with compiled durations; future `playSequence` uses the new flag. Semantic layers are a declared no-op. Evidence records `observation.reducedMotion` / `reducedMotionPropagation`. Construction-time `matrix.reducedMotion` is unchanged. [docs/production-scenario.md](docs/production-scenario.md) · [#48](https://github.com/cyberart-io/cyberart.io/pull/48)
|
|
26
|
+
|
|
27
|
+
- **Audio cue snapshot restore** — versioned `schemaVersion` `1` sidecar on `createAudioCueTimeline` / `createHeadlessAudioAdapter`. `restore()` validates JSON before mutation; unknown schema, unknown cue ids, or malformed state fail closed. Mute restores; unlock is observation-only. Production-scenario `reload` restores `hostState.audio` last (no second play) and reports `observation.audioRestoreOk` / `invalid-audio-sidecar`. [docs/audio.md](docs/audio.md) · [docs/production-scenario.md](docs/production-scenario.md) · [#46](https://github.com/cyberart-io/cyberart.io/pull/46)
|
|
28
|
+
|
|
29
|
+
- **Production scenario host-owned audio** — optional `hostAudio` observer on `createProductionScenarioRunner`. A host that already owns a production audio controller reports invocation / completion / failure / skip / fallback (plus captions and envelope identity) without duplicating the beat as a presentation sequence. Evidence is in `traces.hostAudio`; `observation.audioInvoked` follows host `invoked` / `completed` only (same as sequence scheduled/started); `audioFailed` and captions still merge skip / fallback / failed rows. Invalid adapters fail closed at boundary `audio` (`invalid-host-audio`). [docs/production-scenario.md](docs/production-scenario.md) · [#45](https://github.com/cyberart-io/cyberart.io/pull/45)
|
|
30
|
+
|
|
5
31
|
## 0.0.9 — 2026-09-05
|
|
6
32
|
|
|
7
33
|
Eleven Animation Framework modules. All are additive: no existing export changed signature, and the `@cyberart-io/engine` / `@cyberart-io/engine/headless` entries export the same new API. Every module ships a `snapshot()` / `restore()` pair that validates JSON before mutating, and typed `*.state.*` / `*.diagnostic.*` event contracts for the router.
|
package/dist/headless.d.ts
CHANGED
|
@@ -1678,6 +1678,7 @@ type PlayCueResult = {
|
|
|
1678
1678
|
*/
|
|
1679
1679
|
|
|
1680
1680
|
declare const AUDIO_CUE_EVENTS: readonly ["audio.cue.scheduled", "audio.cue.started", "audio.cue.skipped", "audio.cue.failed"];
|
|
1681
|
+
declare const AUDIO_CUE_SNAPSHOT_SCHEMA_VERSION: 1;
|
|
1681
1682
|
type AudioCueEventType = (typeof AUDIO_CUE_EVENTS)[number];
|
|
1682
1683
|
type AudioCueSkipReason = 'reduced-sensory' | 'muted' | 'unauthorized';
|
|
1683
1684
|
type AudioCueFailReason = 'asset-failed' | 'torn-down' | 'invalid';
|
|
@@ -1695,6 +1696,8 @@ type AudioCueView = CueView & {
|
|
|
1695
1696
|
participantId?: string;
|
|
1696
1697
|
priority: number;
|
|
1697
1698
|
audioPhase: 'scheduled' | 'started' | 'skipped' | 'failed' | 'completed';
|
|
1699
|
+
/** Original play spec; omitted when the cue was not repeating. */
|
|
1700
|
+
repeat?: CueRepeatPolicy;
|
|
1698
1701
|
};
|
|
1699
1702
|
type AudioCueEvent = {
|
|
1700
1703
|
type: AudioCueEventType;
|
|
@@ -1708,11 +1711,28 @@ type AudioCueEvent = {
|
|
|
1708
1711
|
progress: number;
|
|
1709
1712
|
};
|
|
1710
1713
|
type AudioCueTimelineSnapshot = {
|
|
1714
|
+
schemaVersion: typeof AUDIO_CUE_SNAPSHOT_SCHEMA_VERSION;
|
|
1711
1715
|
frame: number;
|
|
1712
1716
|
reducedSensory: boolean;
|
|
1713
1717
|
cues: AudioCueView[];
|
|
1714
1718
|
events: AudioCueEvent[];
|
|
1715
1719
|
};
|
|
1720
|
+
type HeadlessAudioAdapterSnapshot = AudioCueTimelineSnapshot & {
|
|
1721
|
+
unlock: AudioUnlockStatus;
|
|
1722
|
+
muted: boolean;
|
|
1723
|
+
};
|
|
1724
|
+
type AudioCueDiagnostic = {
|
|
1725
|
+
code: string;
|
|
1726
|
+
detail: string;
|
|
1727
|
+
path?: string;
|
|
1728
|
+
};
|
|
1729
|
+
type RestoreAudioCueResult = {
|
|
1730
|
+
ok: true;
|
|
1731
|
+
snapshot: AudioCueTimelineSnapshot;
|
|
1732
|
+
} | {
|
|
1733
|
+
ok: false;
|
|
1734
|
+
errors: AudioCueDiagnostic[];
|
|
1735
|
+
};
|
|
1716
1736
|
type PlayAudioCueResult = {
|
|
1717
1737
|
ok: true;
|
|
1718
1738
|
cue: AudioCueView;
|
|
@@ -1727,8 +1747,15 @@ type AudioCueTimeline = {
|
|
|
1727
1747
|
cancel(idempotencyKey: string): boolean;
|
|
1728
1748
|
reset(): void;
|
|
1729
1749
|
snapshot(): AudioCueTimelineSnapshot;
|
|
1750
|
+
restore(input: unknown): RestoreAudioCueResult;
|
|
1730
1751
|
get(idempotencyKey: string): AudioCueView | undefined;
|
|
1731
1752
|
dispose(): void;
|
|
1753
|
+
/**
|
|
1754
|
+
* Updates skip-playback for future cue starts. Already-started cues
|
|
1755
|
+
* continue; scheduled cues that have not started yet use the new flag
|
|
1756
|
+
* when they start.
|
|
1757
|
+
*/
|
|
1758
|
+
setReducedSensory(value: boolean): void;
|
|
1732
1759
|
readonly frame: number;
|
|
1733
1760
|
readonly reducedSensory: boolean;
|
|
1734
1761
|
};
|
|
@@ -1739,12 +1766,13 @@ type HeadlessAudioAdapter = {
|
|
|
1739
1766
|
play(spec: AudioCueSpec): PlayAudioCueResult;
|
|
1740
1767
|
step(frames?: number): AudioCueEvent[];
|
|
1741
1768
|
handleHostEvent(event: HostEvent): void;
|
|
1742
|
-
snapshot():
|
|
1743
|
-
|
|
1744
|
-
muted: boolean;
|
|
1745
|
-
};
|
|
1769
|
+
snapshot(): HeadlessAudioAdapterSnapshot;
|
|
1770
|
+
restore(input: unknown): RestoreAudioCueResult;
|
|
1746
1771
|
destroy(): void;
|
|
1772
|
+
setReducedSensory(value: boolean): void;
|
|
1773
|
+
readonly reducedSensory: boolean;
|
|
1747
1774
|
};
|
|
1775
|
+
declare function parseAudioCueSnapshot(input: unknown): RestoreAudioCueResult;
|
|
1748
1776
|
declare function createHeadlessAudioAdapter(options?: {
|
|
1749
1777
|
reducedSensory?: boolean;
|
|
1750
1778
|
originFrame?: number;
|
|
@@ -1893,9 +1921,15 @@ type VisualLayerController = {
|
|
|
1893
1921
|
inspect(): VisualLayerInspect[];
|
|
1894
1922
|
captureComposedFrame(): ComposedFrame;
|
|
1895
1923
|
destroy(): void;
|
|
1924
|
+
/**
|
|
1925
|
+
* Updates the host flag used by future `play()` calls. In-flight
|
|
1926
|
+
* transitions keep the durations they were compiled with.
|
|
1927
|
+
*/
|
|
1928
|
+
setReducedMotion(value: boolean): void;
|
|
1896
1929
|
readonly frame: number;
|
|
1897
1930
|
readonly sceneId: string | null;
|
|
1898
1931
|
readonly compositor: Compositor;
|
|
1932
|
+
readonly reducedMotion: boolean;
|
|
1899
1933
|
};
|
|
1900
1934
|
type VisualLayerCapture = {
|
|
1901
1935
|
frame: ComposedFrame;
|
|
@@ -2270,6 +2304,8 @@ type PresentationInvocationView = {
|
|
|
2270
2304
|
completedStepIds: string[];
|
|
2271
2305
|
activeStepIds: string[];
|
|
2272
2306
|
selectedFallbackId: string | null;
|
|
2307
|
+
/** Reduced-motion flag used to compile this invocation's step durations. */
|
|
2308
|
+
compiledReducedMotion: boolean;
|
|
2273
2309
|
};
|
|
2274
2310
|
type PresentationSequenceSnapshot = {
|
|
2275
2311
|
schemaVersion: typeof PRESENTATION_SEQUENCE_SNAPSHOT_SCHEMA_VERSION;
|
|
@@ -2325,6 +2361,13 @@ type PresentationSequencePlayer = {
|
|
|
2325
2361
|
}): PresentationCueIntent[];
|
|
2326
2362
|
get(sequenceId: string): PresentationSequenceDefinition | undefined;
|
|
2327
2363
|
destroy(): void;
|
|
2364
|
+
/**
|
|
2365
|
+
* Updates the host flag used by future `playSequence` / cue-intent
|
|
2366
|
+
* compilation. The active invocation **continues** with the durations it
|
|
2367
|
+
* was compiled with. Queued plays that have not started yet use the new
|
|
2368
|
+
* policy when they start.
|
|
2369
|
+
*/
|
|
2370
|
+
setReducedMotion(value: boolean): void;
|
|
2328
2371
|
readonly frame: number;
|
|
2329
2372
|
readonly reducedMotion: boolean;
|
|
2330
2373
|
readonly reducedSensory: boolean;
|
|
@@ -3937,8 +3980,10 @@ type BrowserHarness = {
|
|
|
3937
3980
|
readonly compositor: Compositor | undefined;
|
|
3938
3981
|
readonly layout: PresentationLayout;
|
|
3939
3982
|
readonly events: readonly EventEnvelope[];
|
|
3983
|
+
readonly geometry: GeometryDocument | undefined;
|
|
3940
3984
|
goto(url?: string): void;
|
|
3941
3985
|
setViewport(width: number, height: number, dpr?: number): void;
|
|
3986
|
+
setGeometry(next?: GeometryDocument): void;
|
|
3942
3987
|
setReducedMotion(value: boolean): void;
|
|
3943
3988
|
setInputModality(value: BrowserInputModality): void;
|
|
3944
3989
|
click(selectorOrX: string | number, y?: number): void;
|
|
@@ -3961,16 +4006,19 @@ type BrowserHarness = {
|
|
|
3961
4006
|
*
|
|
3962
4007
|
* End-to-end production composition scenario harness. Composes the real
|
|
3963
4008
|
* browser host, runtime group, compositor, visual/semantic layers, bindings,
|
|
3964
|
-
* sequences, headless audio,
|
|
3965
|
-
* introduce a second runtime. Authored
|
|
4009
|
+
* sequences, headless audio, optional host-owned audio observation, snapshots,
|
|
4010
|
+
* and replay inspector. Does not introduce a second runtime. Authored
|
|
4011
|
+
* scenarios are JSON-serializable.
|
|
3966
4012
|
*/
|
|
3967
4013
|
|
|
3968
4014
|
declare const PRODUCTION_SCENARIO_SCHEMA_VERSION: 1;
|
|
3969
4015
|
declare const PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION: 1;
|
|
3970
4016
|
declare const PRODUCTION_SCENARIO_BOUNDARIES: readonly ["input", "reducer", "routing", "binding", "cue", "pixels", "caption", "audio", "save-replay"];
|
|
3971
4017
|
type ProductionScenarioBoundary = (typeof PRODUCTION_SCENARIO_BOUNDARIES)[number];
|
|
3972
|
-
declare const PRODUCTION_SCENARIO_ERROR_CODES: readonly ["invalid-scenario", "invalid-schema", "unknown-field", "missing-field", "callbacks-forbidden", "missing-participant", "missing-layer", "destroyed", "assertion-failed"];
|
|
4018
|
+
declare const PRODUCTION_SCENARIO_ERROR_CODES: readonly ["invalid-scenario", "invalid-schema", "unknown-field", "missing-field", "callbacks-forbidden", "missing-participant", "missing-layer", "destroyed", "assertion-failed", "invalid-host-audio", "invalid-audio-sidecar", "invalid-visual-sidecar", "invalid-semantic-sidecar", "invalid-binding-sidecar", "invalid-sequence-sidecar", "invalid-host-sidecar", "unsupported-preference", "invalid-geometry", "ambiguous-geometry", "stale-geometry"];
|
|
3973
4019
|
type ProductionScenarioErrorCode = (typeof PRODUCTION_SCENARIO_ERROR_CODES)[number];
|
|
4020
|
+
declare const HOST_OWNED_AUDIO_EVENT_KINDS: readonly ["invoked", "completed", "failed", "skipped", "fallback"];
|
|
4021
|
+
type HostOwnedAudioEventKind = (typeof HOST_OWNED_AUDIO_EVENT_KINDS)[number];
|
|
3974
4022
|
declare const PRODUCTION_SCENARIO_VIEWPORT_PRESETS: readonly ["desktop", "mobile"];
|
|
3975
4023
|
type ProductionScenarioViewportPreset = (typeof PRODUCTION_SCENARIO_VIEWPORT_PRESETS)[number];
|
|
3976
4024
|
declare const DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS: {
|
|
@@ -4063,16 +4111,93 @@ type ProductionScenarioReduceResult = {
|
|
|
4063
4111
|
reason?: string;
|
|
4064
4112
|
playSequence?: string;
|
|
4065
4113
|
};
|
|
4114
|
+
type ProductionScenarioControl = {
|
|
4115
|
+
id: string;
|
|
4116
|
+
name?: string;
|
|
4117
|
+
role?: string;
|
|
4118
|
+
/** Higher priority wins normalized overlap hit-tests when regions intersect. */
|
|
4119
|
+
priority?: number;
|
|
4120
|
+
};
|
|
4121
|
+
type ProductionScenarioInputHitTest = {
|
|
4122
|
+
x: number;
|
|
4123
|
+
y: number;
|
|
4124
|
+
selectedControlId: string;
|
|
4125
|
+
rejectedControlIds: readonly string[];
|
|
4126
|
+
};
|
|
4127
|
+
type ProductionScenarioInputSurface = {
|
|
4128
|
+
controls: readonly ProductionScenarioControl[];
|
|
4129
|
+
geometry: GeometryDocument;
|
|
4130
|
+
};
|
|
4066
4131
|
type ProductionScenarioHost = {
|
|
4067
4132
|
initialState: JsonObject;
|
|
4068
4133
|
reduce(state: JsonObject, intent: EventInput): ProductionScenarioReduceResult;
|
|
4069
4134
|
project?(state: JsonObject): JsonObject;
|
|
4135
|
+
/**
|
|
4136
|
+
* Host-generic projection of the active input surface. After an accepted
|
|
4137
|
+
* reduce (and on reload) the runner rebuilds visible/focusable controls and
|
|
4138
|
+
* the geometry document from this result. Omit to keep construction-time
|
|
4139
|
+
* geometry and controls.
|
|
4140
|
+
*/
|
|
4141
|
+
projectInputSurface?(state: JsonObject): ProductionScenarioInputSurface;
|
|
4142
|
+
/**
|
|
4143
|
+
* Optional pre-reload validator for host JSON from a saved sidecar. When
|
|
4144
|
+
* supplied, reload rejects invalid host state before any live mutation.
|
|
4145
|
+
*/
|
|
4146
|
+
validateRestoreState?(state: JsonObject): {
|
|
4147
|
+
ok: true;
|
|
4148
|
+
} | {
|
|
4149
|
+
ok: false;
|
|
4150
|
+
detail: string;
|
|
4151
|
+
};
|
|
4152
|
+
};
|
|
4153
|
+
type HostOwnedAudioEvent = {
|
|
4154
|
+
kind: HostOwnedAudioEventKind;
|
|
4155
|
+
atFrame?: number;
|
|
4156
|
+
name?: string;
|
|
4157
|
+
caption?: string;
|
|
4158
|
+
assetId?: string;
|
|
4159
|
+
reason?: string;
|
|
4160
|
+
id?: string;
|
|
4161
|
+
correlationId?: string;
|
|
4162
|
+
causationId?: string;
|
|
4163
|
+
};
|
|
4164
|
+
type HostOwnedAudioSnapshot = {
|
|
4165
|
+
events: readonly HostOwnedAudioEvent[];
|
|
4166
|
+
captions?: readonly string[];
|
|
4167
|
+
muted?: boolean;
|
|
4168
|
+
};
|
|
4169
|
+
/**
|
|
4170
|
+
* Host-owned audio/presentation observer. The host already drives the
|
|
4171
|
+
* controller; the runner only snapshots evidence. Generic: no dialogue
|
|
4172
|
+
* product semantics. At least one of `snapshot` or `collect` is required.
|
|
4173
|
+
*/
|
|
4174
|
+
type HostOwnedAudioObserver = {
|
|
4175
|
+
snapshot?(): HostOwnedAudioSnapshot;
|
|
4176
|
+
collect?(): HostOwnedAudioSnapshot;
|
|
4177
|
+
inspect?(): unknown;
|
|
4070
4178
|
};
|
|
4071
4179
|
type ProductionScenarioLocalization = {
|
|
4072
4180
|
boundary: ProductionScenarioBoundary;
|
|
4073
4181
|
code: ProductionScenarioErrorCode;
|
|
4074
4182
|
detail: string;
|
|
4075
4183
|
};
|
|
4184
|
+
declare const REDUCED_MOTION_ACTIVE_SEQUENCE_POLICY: "continue";
|
|
4185
|
+
type ReducedMotionActiveSequencePolicy = typeof REDUCED_MOTION_ACTIVE_SEQUENCE_POLICY;
|
|
4186
|
+
declare const REDUCED_MOTION_PARTICIPANT_IDS: readonly ["browser", "visual", "sequence", "audio", "semantic"];
|
|
4187
|
+
type ReducedMotionParticipantId = (typeof REDUCED_MOTION_PARTICIPANT_IDS)[number];
|
|
4188
|
+
type ReducedMotionParticipantReport = {
|
|
4189
|
+
id: ReducedMotionParticipantId;
|
|
4190
|
+
applied: boolean;
|
|
4191
|
+
reducedMotion?: boolean;
|
|
4192
|
+
reducedSensory?: boolean;
|
|
4193
|
+
reason?: string;
|
|
4194
|
+
};
|
|
4195
|
+
type ReducedMotionPropagation = {
|
|
4196
|
+
from: boolean;
|
|
4197
|
+
to: boolean;
|
|
4198
|
+
activeSequencePolicy: ReducedMotionActiveSequencePolicy;
|
|
4199
|
+
participants: ReducedMotionParticipantReport[];
|
|
4200
|
+
};
|
|
4076
4201
|
type ProductionScenarioObservation = {
|
|
4077
4202
|
inputDispatched: boolean;
|
|
4078
4203
|
inputTarget?: string;
|
|
@@ -4095,6 +4220,11 @@ type ProductionScenarioObservation = {
|
|
|
4095
4220
|
muted: boolean;
|
|
4096
4221
|
replayMatch?: boolean;
|
|
4097
4222
|
snapshotOk?: boolean;
|
|
4223
|
+
audioRestoreOk?: boolean;
|
|
4224
|
+
reducedMotion?: boolean;
|
|
4225
|
+
reducedMotionPropagation?: ReducedMotionPropagation | null;
|
|
4226
|
+
activeControlIds: string[];
|
|
4227
|
+
inputHitTest?: ProductionScenarioInputHitTest;
|
|
4098
4228
|
};
|
|
4099
4229
|
type ProductionScenarioExpectation = {
|
|
4100
4230
|
inputDispatched?: boolean;
|
|
@@ -4110,6 +4240,7 @@ type ProductionScenarioExpectation = {
|
|
|
4110
4240
|
audioFailed?: boolean;
|
|
4111
4241
|
replayMatch?: boolean;
|
|
4112
4242
|
snapshotOk?: boolean;
|
|
4243
|
+
audioRestoreOk?: boolean;
|
|
4113
4244
|
};
|
|
4114
4245
|
type ProductionScenarioEvidenceBundle = {
|
|
4115
4246
|
schemaVersion: typeof PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION;
|
|
@@ -4133,6 +4264,7 @@ type ProductionScenarioEvidenceBundle = {
|
|
|
4133
4264
|
envelopes: EventEnvelope[];
|
|
4134
4265
|
inspector: InspectorRecord[];
|
|
4135
4266
|
audio: AudioCueEvent[];
|
|
4267
|
+
hostAudio: HostOwnedAudioEvent[];
|
|
4136
4268
|
actions: ProductionScenarioStep[];
|
|
4137
4269
|
};
|
|
4138
4270
|
screenshot: {
|
|
@@ -4161,6 +4293,13 @@ type CreateProductionScenarioRunnerOptions = {
|
|
|
4161
4293
|
bindings?: PresentationBindingManifest | unknown;
|
|
4162
4294
|
geometry?: GeometryDocument;
|
|
4163
4295
|
host: ProductionScenarioHost;
|
|
4296
|
+
/**
|
|
4297
|
+
* Optional host-owned audio observer. When supplied, the runner records
|
|
4298
|
+
* invocation / completion / failure / skip / fallback evidence from this
|
|
4299
|
+
* adapter without requiring a presentation sequence for the same beat.
|
|
4300
|
+
* Invalid adapters fail closed at boundary `audio`.
|
|
4301
|
+
*/
|
|
4302
|
+
hostAudio?: HostOwnedAudioObserver;
|
|
4164
4303
|
sequenceBindings?: Readonly<Record<string, PresentationSequenceBindings>>;
|
|
4165
4304
|
contentWidth?: number;
|
|
4166
4305
|
contentHeight?: number;
|
|
@@ -4200,13 +4339,22 @@ type ProductionScenarioRunner = {
|
|
|
4200
4339
|
visual: ReturnType<VisualLayerController['inspect']> | null;
|
|
4201
4340
|
semantic: ReturnType<SemanticLayerController['inspect']> | null;
|
|
4202
4341
|
audio: ReturnType<HeadlessAudioAdapter['snapshot']>;
|
|
4342
|
+
hostAudio: HostOwnedAudioSnapshot | null;
|
|
4203
4343
|
participants: string[];
|
|
4204
4344
|
layers: string[];
|
|
4205
4345
|
composition: ProductionScenarioLocalization | null;
|
|
4346
|
+
reducedMotion: boolean;
|
|
4347
|
+
reducedMotionPropagation: ReducedMotionPropagation | null;
|
|
4348
|
+
inputSurface: {
|
|
4349
|
+
controlIds: string[];
|
|
4350
|
+
controls: readonly ProductionScenarioControl[];
|
|
4351
|
+
geometry: GeometryDocument | null;
|
|
4352
|
+
};
|
|
4206
4353
|
};
|
|
4207
4354
|
destroy(): void;
|
|
4208
4355
|
};
|
|
4209
4356
|
declare function productionScenarioEventContracts(): EventContract[];
|
|
4357
|
+
declare function isHostOwnedAudioEventKind(value: unknown): value is HostOwnedAudioEventKind;
|
|
4210
4358
|
declare function defineProductionScenario(input: unknown): DefineProductionScenarioResult;
|
|
4211
4359
|
declare function fnv1aHex(data: string | Uint8Array): string;
|
|
4212
4360
|
declare function localizeProductionScenarioFailure(observed: ProductionScenarioObservation, expected?: ProductionScenarioExpectation): ProductionScenarioLocalization | null;
|
|
@@ -4232,4 +4380,4 @@ type WriteComposedFrameResult = ComposedFrame & {
|
|
|
4232
4380
|
*/
|
|
4233
4381
|
declare function writeComposedFrame(compositor: Compositor, path?: string): Promise<WriteComposedFrameResult>;
|
|
4234
4382
|
|
|
4235
|
-
export { type BoundReplaySession, CONTENT_REVISION_ACTIVATED_EVENT, CONTENT_REVISION_SNAPSHOT_SCHEMA_VERSION, type CausationTreeNode, type ContentRevisionActivator, type ContentRevisionBundle, type ContentRevisionInspect, type ContentRevisionSnapshot, type CreateHeadlessHarnessOptions, type CreateHeadlessMultiCartHarnessOptions, type CreateReplayInspectorOptions, type CreateSelectionTraceOptions, DEFAULT_HEADLESS_HEIGHT, DEFAULT_HEADLESS_WIDTH, DEFAULT_MAX_SELECTION_RECORDS, DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS, type FrameBenchmarkOptions, type FrameBenchmarkResult, type GlyphAtlas, HEADLESS_PNG_DATA_URL, type HeadlessAudioAdapter, type HeadlessCanvas2DSettings, type HeadlessFrameError, type HeadlessHarness, type HeadlessImageFixture, type HeadlessInspect, type HeadlessJobWorker, type HeadlessMultiCartHarness, HeadlessUnsupportedOperationError, type HostGrantSet, type InspectorRecord, type InstallHeadlessCanvasOptions, type JobCoordinator, type JobCoordinatorSnapshot, type JobInspect, PRESENTATION_BINDING_APPLIED_EVENT, PRESENTATION_BINDING_SNAPSHOT_SCHEMA_VERSION, PRODUCTION_SCENARIO_BOUNDARIES, PRODUCTION_SCENARIO_SCHEMA_VERSION, PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION, type PortalInspect, type PortalLifecycle, type PortalLifecycleSnapshot, type PresentationBindingInspect, type PresentationBindingManifest, type PresentationBindingRuntime, type PresentationBindingSnapshot, type PresentationSequenceDefinition, type PresentationSequenceInspect, type PresentationSequencePlayer, type PresentationSequenceSnapshot, type ProductionScenarioDefinition, type ProductionScenarioEvidenceBundle, type ProductionScenarioExpectation, type ProductionScenarioHost, type ProductionScenarioLocalization, type ProductionScenarioObservation, type ProductionScenarioRunner, type RemoteCartInspect, type RemoteCartSandbox, type ReplayCompareResult, type ReplayInspector, type ReplayInspectorExport, type ReplayInspectorReport, type ReplayParticipantSummary, type ReplayTapeAction, type ReplayTraceFilter, SELECTION_DECISION_KINDS, SELECTION_REASON_CODES, SELECTION_TRACE_SCHEMA_VERSION, SELECTION_TRACE_SENSITIVE_KEYS, type SelectionAssetResolution, type SelectionBindingEvaluation, type SelectionContentIdentity, type SelectionDecisionInput, type SelectionDecisionKind, type SelectionDecisionRecord, type SelectionPresentationDecision, type SelectionReasonCode, type SelectionSequenceDecision, type SelectionSnapshotProvenance, type SelectionStagingOutcome, type SelectionStagingResult, type SelectionTrace, type SelectionTraceExport, type SelectionTraceFilter, type SelectionTraceReport, type SemanticLayerController, type SemanticPublishedRegion, type SemanticRegionInspect, UPDATE_GOLDEN_ENV, type VisualArtifactPaths, type VisualArtifacts, type VisualCompareOptions, type VisualCompareResult, type VisualLayerCapture, type VisualLayerController, type VisualLayerInspect, WORLD_PATCH_ACCEPTED_EVENT, WORLD_PATCH_SNAPSHOT_SCHEMA_VERSION, type WorldGraph, type WorldGraphInspect, type WorldGraphProjection, type WorldGraphSnapshot, type WorldPatchApplier, type WorldPatchInspect, type WorldPatchSnapshot, type WorldPersistenceAdapter, type WriteComposedFrameResult, assertPixelsEqual, assertPngDataUrlsEqual, attachHeadlessCanvas2D, attachSelectionTrace, benchmarkCartFrames, cabinetPortal, captureVisualLayers, compareImageData, compareReplayTraces, contentRevisionEventContracts, createContentRevisionActivator, createDefaultGlyphAtlas, createHeadlessAudioAdapter, createHeadlessHarness, createHeadlessJobWorker, createHeadlessMultiCartHarness, createHostGrantSet, createImageFixture, createJobCoordinator, createMemoryJobPersistence, createMemoryWorldPersistence, createPortalLifecycle, createPresentationBindingRuntime, createPresentationSequencePlayer, createProductionScenarioRunner, createRemoteCartSandbox, createRemoteContentAdapter, createReplayInspector, createSelectionTrace, createSemanticLayerController, createStaticContentAdapter, createVisualLayerController, createWorldGraph, createWorldPatchApplier, decodePng, definePresentationBindings, definePresentationSequence, defineProductionScenario, encodePng, encodePngDataUrl, evaluatePresentationBindings, fnv1aHex, formatFrameBenchmarkResult, getHeadlessSurface, imageDataFromPngDataUrl, installHeadlessCanvas, isSelectionDecisionKind, isSelectionReasonCode, jobEventContracts, localizeProductionScenarioFailure, makeImageData, paintingPortal, presentationBindingEventContracts, presentationSequenceEventContracts, productionScenarioEventContracts, recordSelectionDecision, replayExportedTrace, setDefaultGlyphAtlas, shouldUpdateGolden, worldGraphEventContracts, worldPatchEventContracts, writeComposedFrame, writeVisualArtifacts };
|
|
4383
|
+
export { AUDIO_CUE_SNAPSHOT_SCHEMA_VERSION, type AudioCueDiagnostic, type BoundReplaySession, CONTENT_REVISION_ACTIVATED_EVENT, CONTENT_REVISION_SNAPSHOT_SCHEMA_VERSION, type CausationTreeNode, type ContentRevisionActivator, type ContentRevisionBundle, type ContentRevisionInspect, type ContentRevisionSnapshot, type CreateHeadlessHarnessOptions, type CreateHeadlessMultiCartHarnessOptions, type CreateProductionScenarioRunnerOptions, type CreateReplayInspectorOptions, type CreateSelectionTraceOptions, DEFAULT_HEADLESS_HEIGHT, DEFAULT_HEADLESS_WIDTH, DEFAULT_MAX_SELECTION_RECORDS, DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS, type FrameBenchmarkOptions, type FrameBenchmarkResult, type GlyphAtlas, HEADLESS_PNG_DATA_URL, HOST_OWNED_AUDIO_EVENT_KINDS, type HeadlessAudioAdapter, type HeadlessAudioAdapterSnapshot, type HeadlessCanvas2DSettings, type HeadlessFrameError, type HeadlessHarness, type HeadlessImageFixture, type HeadlessInspect, type HeadlessJobWorker, type HeadlessMultiCartHarness, HeadlessUnsupportedOperationError, type HostGrantSet, type HostOwnedAudioEvent, type HostOwnedAudioEventKind, type HostOwnedAudioObserver, type HostOwnedAudioSnapshot, type InspectorRecord, type InstallHeadlessCanvasOptions, type JobCoordinator, type JobCoordinatorSnapshot, type JobInspect, PRESENTATION_BINDING_APPLIED_EVENT, PRESENTATION_BINDING_SNAPSHOT_SCHEMA_VERSION, PRODUCTION_SCENARIO_BOUNDARIES, PRODUCTION_SCENARIO_SCHEMA_VERSION, PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION, type PortalInspect, type PortalLifecycle, type PortalLifecycleSnapshot, type PresentationBindingInspect, type PresentationBindingManifest, type PresentationBindingRuntime, type PresentationBindingSnapshot, type PresentationSequenceDefinition, type PresentationSequenceInspect, type PresentationSequencePlayer, type PresentationSequenceSnapshot, type ProductionScenarioControl, type ProductionScenarioDefinition, type ProductionScenarioEvidenceBundle, type ProductionScenarioExpectation, type ProductionScenarioHost, type ProductionScenarioInputHitTest, type ProductionScenarioInputSurface, type ProductionScenarioLocalization, type ProductionScenarioObservation, type ProductionScenarioRunner, REDUCED_MOTION_ACTIVE_SEQUENCE_POLICY, REDUCED_MOTION_PARTICIPANT_IDS, type ReducedMotionActiveSequencePolicy, type ReducedMotionParticipantId, type ReducedMotionParticipantReport, type ReducedMotionPropagation, type RemoteCartInspect, type RemoteCartSandbox, type ReplayCompareResult, type ReplayInspector, type ReplayInspectorExport, type ReplayInspectorReport, type ReplayParticipantSummary, type ReplayTapeAction, type ReplayTraceFilter, type RestoreAudioCueResult, SELECTION_DECISION_KINDS, SELECTION_REASON_CODES, SELECTION_TRACE_SCHEMA_VERSION, SELECTION_TRACE_SENSITIVE_KEYS, type SelectionAssetResolution, type SelectionBindingEvaluation, type SelectionContentIdentity, type SelectionDecisionInput, type SelectionDecisionKind, type SelectionDecisionRecord, type SelectionPresentationDecision, type SelectionReasonCode, type SelectionSequenceDecision, type SelectionSnapshotProvenance, type SelectionStagingOutcome, type SelectionStagingResult, type SelectionTrace, type SelectionTraceExport, type SelectionTraceFilter, type SelectionTraceReport, type SemanticLayerController, type SemanticPublishedRegion, type SemanticRegionInspect, UPDATE_GOLDEN_ENV, type VisualArtifactPaths, type VisualArtifacts, type VisualCompareOptions, type VisualCompareResult, type VisualLayerCapture, type VisualLayerController, type VisualLayerInspect, WORLD_PATCH_ACCEPTED_EVENT, WORLD_PATCH_SNAPSHOT_SCHEMA_VERSION, type WorldGraph, type WorldGraphInspect, type WorldGraphProjection, type WorldGraphSnapshot, type WorldPatchApplier, type WorldPatchInspect, type WorldPatchSnapshot, type WorldPersistenceAdapter, type WriteComposedFrameResult, assertPixelsEqual, assertPngDataUrlsEqual, attachHeadlessCanvas2D, attachSelectionTrace, benchmarkCartFrames, cabinetPortal, captureVisualLayers, compareImageData, compareReplayTraces, contentRevisionEventContracts, createContentRevisionActivator, createDefaultGlyphAtlas, createHeadlessAudioAdapter, createHeadlessHarness, createHeadlessJobWorker, createHeadlessMultiCartHarness, createHostGrantSet, createImageFixture, createJobCoordinator, createMemoryJobPersistence, createMemoryWorldPersistence, createPortalLifecycle, createPresentationBindingRuntime, createPresentationSequencePlayer, createProductionScenarioRunner, createRemoteCartSandbox, createRemoteContentAdapter, createReplayInspector, createSelectionTrace, createSemanticLayerController, createStaticContentAdapter, createVisualLayerController, createWorldGraph, createWorldPatchApplier, decodePng, definePresentationBindings, definePresentationSequence, defineProductionScenario, encodePng, encodePngDataUrl, evaluatePresentationBindings, fnv1aHex, formatFrameBenchmarkResult, getHeadlessSurface, imageDataFromPngDataUrl, installHeadlessCanvas, isHostOwnedAudioEventKind, isSelectionDecisionKind, isSelectionReasonCode, jobEventContracts, localizeProductionScenarioFailure, makeImageData, paintingPortal, parseAudioCueSnapshot, presentationBindingEventContracts, presentationSequenceEventContracts, productionScenarioEventContracts, recordSelectionDecision, replayExportedTrace, setDefaultGlyphAtlas, shouldUpdateGolden, worldGraphEventContracts, worldPatchEventContracts, writeComposedFrame, writeVisualArtifacts };
|