@signalsandsorcery/plugin-sdk 2.28.1 → 2.34.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.
package/dist/index.d.mts CHANGED
@@ -383,6 +383,19 @@ interface PluginHost {
383
383
  setRawPluginState(trackId: string, pluginIndex: number, stateBase64: string): Promise<void>;
384
384
  /** Get a plugin's RAW VST3/AU state (see setRawPluginState). @since SDK 2.15.0 */
385
385
  getRawPluginState(trackId: string, pluginIndex: number): Promise<string>;
386
+ /**
387
+ * Persist a preset as the track's durable sound identity (DB `preset_state`,
388
+ * the shape getTrackSound reads back). setPluginState/setRawPluginState are
389
+ * engine-only — a copied sound that is never persisted has no identity, so
390
+ * drift checks (e.g. the transition-designer preset re-sync) can never
391
+ * observe convergence. Call after applying a copied state to a layer track.
392
+ * @since SDK 2.34.0
393
+ */
394
+ persistTrackPresetState?(trackId: string, preset: {
395
+ state: string;
396
+ stateType: 'raw' | 'valuetree';
397
+ name?: string;
398
+ }): Promise<void>;
386
399
  /** List plugins currently loaded on a track. */
387
400
  getTrackPlugins(trackId: string): Promise<PluginSynthInfo[]>;
388
401
  /** Remove a plugin from a track. */
@@ -882,6 +895,30 @@ interface PluginHost {
882
895
  deleteSampleTrack(trackId: string): Promise<void>;
883
896
  /** Get all sample tracks in the active scene. Re-establishes ownership. */
884
897
  getPluginSampleTracks(): Promise<PluginSampleTrackInfo[]>;
898
+ /**
899
+ * Resolve a sample-track row id (as returned by `listSceneFamilyTracks`) back
900
+ * to its library `sampleId` + metadata, so a loop can be re-created in another
901
+ * scene (transition crossfade/fade). Returns null if not a sample track.
902
+ * @since SDK 2.31.0
903
+ */
904
+ getSampleTrackInfo?(dbId: string): Promise<{
905
+ sampleId: string;
906
+ fileName?: string;
907
+ bpm?: number;
908
+ key?: string;
909
+ } | null>;
910
+ /**
911
+ * Render an audio transition effect onto a sample (offline DSP via the audio
912
+ * tool), returning a NEW library sample to place. Used for stutter / chopped
913
+ * loop transitions. @since SDK 2.32.0
914
+ */
915
+ renderSampleEffect?(sampleId: string, spec: {
916
+ effect: 'stutter' | 'chopped';
917
+ bars: number;
918
+ bpm: number;
919
+ repeats?: number;
920
+ slices?: number;
921
+ }): Promise<PluginSampleInfo>;
885
922
  /** Time-stretch a sample to a target BPM. Returns the new sample info. */
886
923
  timeStretchSample(sampleId: string, targetBpm: number): Promise<PluginSampleInfo>;
887
924
  /**
@@ -2577,6 +2614,16 @@ declare function TrackRow({ track, prompt, runtimeState, soloedOut, fxDetailStat
2577
2614
  *
2578
2615
  * @since SDK 2.23.0
2579
2616
  */
2617
+
2618
+ /**
2619
+ * Stable, state-aware identity for a track's sound — used to auto-detect when a
2620
+ * transition's SOURCE preset/sample has drifted from the copy on its layer. A
2621
+ * preset hashes its full STATE blob (so a same-name param tweak still differs); a
2622
+ * sample uses its path; an instrument uses its id + zones. Empty string = no sound.
2623
+ * @since SDK 2.32.0
2624
+ */
2625
+ declare function hashString(s: string): string;
2626
+ declare function soundIdentity(snap: TrackSoundSnapshot | null | undefined): string;
2580
2627
  /** Which half of the pair a per-layer control / member targets. */
2581
2628
  type CrossfadeSlot = 'origin' | 'target';
2582
2629
  /**
@@ -2809,6 +2856,13 @@ type FadeGesture = 'volume' | 'build';
2809
2856
  interface FadeMeta {
2810
2857
  direction: FadeDirection;
2811
2858
  gesture: FadeGesture;
2859
+ /**
2860
+ * Audio transition variant for one-sided LOOP transitions. `'fade'` (default,
2861
+ * and the only value MIDI panels write) is a plain level ramp; `stutter` /
2862
+ * `chopped` re-render the loop's audio, `delay` adds a delay-throw FX. Shown as
2863
+ * a badge on the row. @since SDK 2.32.0
2864
+ */
2865
+ effect?: 'fade' | 'stutter' | 'chopped' | 'delay';
2812
2866
  /** DB id of the SOURCE track this fade's preset/sample + pattern was seeded from. */
2813
2867
  sourceTrackDbId: string;
2814
2868
  /** DB id of the scene the source track lives in (the from/to scene). */
@@ -2909,6 +2963,8 @@ interface FadeTrackRowProps {
2909
2963
  direction: FadeDirection;
2910
2964
  /** How the fade is shaped — shown read-only (volume = level ramp, build = notes). */
2911
2965
  gesture: FadeGesture;
2966
+ /** Audio transition variant — relabels the badge (Stutter/Chopped/Delay). @since SDK 2.32.0 */
2967
+ effect?: 'fade' | 'stutter' | 'chopped' | 'delay';
2912
2968
  /** Fade position 0..1 — WHERE in time the fade sits. Defaults centered. */
2913
2969
  sliderPos?: number;
2914
2970
  /** Toggle mute. */
@@ -2928,7 +2984,7 @@ interface FadeTrackRowProps {
2928
2984
  /** Left-border accent. Defaults to transition purple. */
2929
2985
  accentColor?: string;
2930
2986
  }
2931
- declare function FadeTrackRow({ layer, direction, gesture, sliderPos, onMuteToggle, onSoloToggle, onVolumeChange, onPanChange, onDelete, onSliderChange, levels, accentColor, }: FadeTrackRowProps): React.ReactElement;
2987
+ declare function FadeTrackRow({ layer, direction, gesture, effect, sliderPos, onMuteToggle, onSoloToggle, onVolumeChange, onPanChange, onDelete, onSliderChange, levels, accentColor, }: FadeTrackRowProps): React.ReactElement;
2932
2988
 
2933
2989
  /**
2934
2990
  * FadeModal — "add a fade" picker for a transition scene.
@@ -3099,6 +3155,181 @@ interface CrossfadeModalProps {
3099
3155
  }
3100
3156
  declare function CrossfadeModal({ host, open, fromSceneId, toSceneId, fromSceneName, toSceneName, excludeSourceDbIds, onClose, onCreate, testIdPrefix, }: CrossfadeModalProps): React.ReactElement | null;
3101
3157
 
3158
+ /**
3159
+ * TransitionDesigner — the per-panel transition staging board, rendered INLINE as
3160
+ * a toggled view inside a generator panel (NOT a modal).
3161
+ *
3162
+ * The multi-row, persistent successor to {@link CrossfadeModal} + {@link FadeModal}:
3163
+ * instead of opening a single-pair dialog ~20 times, the panel header gains a
3164
+ * Tracks ⇄ Transition toggle; flipping to Transition replaces the panel's track
3165
+ * list with this board. Playback is unaffected (the engine keeps playing the
3166
+ * scene's tracks — they're just not shown until you toggle back). Shown only
3167
+ * inside a `scene_type='transition'` scene and scoped to one panel family (a synth
3168
+ * board shows only synth tracks — "drums can't crossfade to synth" is enforced
3169
+ * structurally because each board asks its own family-scoped host).
3170
+ *
3171
+ * Two index-aligned, drag-reorderable columns: origin (scene A, left) and target
3172
+ * (scene B, right). Row i pairs origin[i] with target[i]; the pairing derives the
3173
+ * transition type (both → crossfade, origin-only → fade out, target-only → fade
3174
+ * in). Insert a "gap" above a cell to push a track so it fades instead of
3175
+ * crossfading with whatever sits opposite. The pool per column is the scene's
3176
+ * family tracks MINUS sources already consumed by a committed crossfade/fade
3177
+ * (`excludeSourceDbIds`).
3178
+ *
3179
+ * Per-row **Create** reuses the panel's EXISTING orchestration via `onCreateCrossfade`
3180
+ * / `onCreateFade`. Creates run CONCURRENTLY — fire several at once, or **Create all**
3181
+ * (a bounded pool). Each in-flight row shows its own progress bar and locks just its
3182
+ * own cells; the rest of the board stays editable. On success the source leaves the
3183
+ * pool (the panel updates `excludeSourceDbIds`) and the row collapses; deleting the
3184
+ * committed crossfade/fade on the deck returns the source here. The staged
3185
+ * arrangement persists to the transition scene's plugin_data so it survives toggles.
3186
+ *
3187
+ * @since SDK 2.29.0 (modal); inline toggle view + concurrent creation since 2.30.0.
3188
+ */
3189
+
3190
+ interface TransitionDesignerProps {
3191
+ /** Scoped host — the board calls listSceneFamilyTracks / getSceneName itself. */
3192
+ host: PluginHost;
3193
+ /** DB id of the transition's FROM (origin) scene. */
3194
+ fromSceneId: string;
3195
+ /** DB id of the transition's TO (target) scene. */
3196
+ toSceneId: string;
3197
+ /** DB id of the transition scene itself — the staged draft is persisted here. */
3198
+ transitionSceneId: string;
3199
+ /**
3200
+ * Source-track DB ids already consumed by a committed crossfade OR fade in this
3201
+ * panel. Hidden from both columns so each source is used at most once; when the
3202
+ * deck row is deleted the panel drops the id and the source reappears here.
3203
+ */
3204
+ excludeSourceDbIds?: readonly string[];
3205
+ /**
3206
+ * Build a crossfade pair — the panel's existing handler (create two tracks, one
3207
+ * morphed clip, copy each preset). Should reject on failure. Safe to call
3208
+ * concurrently.
3209
+ */
3210
+ onCreateCrossfade: (origin: CrossfadeSelection, target: CrossfadeSelection) => Promise<void>;
3211
+ /** Build a one-sided fade — the panel's existing handler. Should reject on failure. */
3212
+ onCreateFade: (selection: FadeSelection, direction: FadeDirection, gesture: FadeGesture) => Promise<void>;
3213
+ /**
3214
+ * Build an AUDIO-only one-sided transition (stutter / chopped / delay). When
3215
+ * provided, one-sided rows render an effect selector; absent (MIDI panels) →
3216
+ * one-sided rows stay plain fades. @since SDK 2.32.0
3217
+ */
3218
+ onCreateAudioTransition?: (selection: FadeSelection, direction: FadeDirection, effect: 'stutter' | 'chopped' | 'delay') => Promise<void>;
3219
+ /** Short family label for the heading, e.g. "Synths". */
3220
+ familyLabel?: string;
3221
+ /** data-testid prefix. */
3222
+ testIdPrefix?: string;
3223
+ }
3224
+ declare function TransitionDesigner({ host, fromSceneId, toSceneId, transitionSceneId, excludeSourceDbIds, onCreateCrossfade, onCreateFade, onCreateAudioTransition, familyLabel, testIdPrefix, }: TransitionDesignerProps): React.ReactElement;
3225
+
3226
+ /**
3227
+ * Transition Designer — pure helpers for the per-panel transition staging board.
3228
+ *
3229
+ * The designer is the multi-row, persistent successor to CrossfadeModal/FadeModal:
3230
+ * it lays out ONE panel-family's origin (scene A) and target (scene B) source
3231
+ * tracks as two index-aligned, drag-reorderable columns. Row i pairs the origin
3232
+ * slot at index i with the target slot at index i, and the pairing DERIVES the
3233
+ * transition type:
3234
+ * - both filled → crossfade (morph A→B)
3235
+ * - origin filled, target blank → fade out (the track leaves)
3236
+ * - target filled, origin blank → fade in (the track enters)
3237
+ * A slot may be a source-track dbId or `null` (a blank spacer). Blanks let the
3238
+ * user open a gap so a mid-list track becomes a fade instead of crossfading with
3239
+ * whatever happens to sit opposite it (the CSV-style layout).
3240
+ *
3241
+ * The "available pool" per column is the scene's family tracks MINUS the sources
3242
+ * already consumed by a committed crossfade/fade (excludeSourceDbIds). Creating a
3243
+ * row reuses the panel's existing crossfade/fade orchestration; deleting the
3244
+ * committed crossfade/fade on the deck returns its source to the pool.
3245
+ *
3246
+ * This module owns only the shape + the pure slot/row math so it can be unit
3247
+ * tested without a DOM and can't drift across the three panels. The component
3248
+ * (TransitionDesigner.tsx) owns the overlay, drag wiring, and persistence.
3249
+ *
3250
+ * @since SDK 2.29.0
3251
+ */
3252
+ /**
3253
+ * Persisted per-transition-scene draft: the two columns' slot orders. A slot is
3254
+ * a source-track dbId, or `null` for a blank spacer (an intentional gap). Stored
3255
+ * in the transition scene's plugin_data under {@link TRANSITION_DESIGNER_DRAFT_KEY};
3256
+ * because plugin_data is scoped by (plugin_id, sceneId), each panel family keeps
3257
+ * its own draft automatically.
3258
+ */
3259
+ interface TransitionDesignerDraft {
3260
+ /** Origin (scene A) column order — dbIds or `null` blanks. */
3261
+ originOrder: (string | null)[];
3262
+ /** Target (scene B) column order — dbIds or `null` blanks. */
3263
+ targetOrder: (string | null)[];
3264
+ /** Per one-sided-row audio effect, keyed by the source dbId. @since SDK 2.32.0 */
3265
+ rowEffects?: Record<string, AudioEffect>;
3266
+ }
3267
+ /** scene-data key (under the transition scene) holding the staged draft. */
3268
+ declare const TRANSITION_DESIGNER_DRAFT_KEY = "transitionDesigner:draft";
3269
+ /** The transition a single aligned row represents (derived from its two slots). */
3270
+ type TransitionRowType = 'crossfade' | 'fade-out' | 'fade-in';
3271
+ /**
3272
+ * Audio-only transition gesture for a ONE-SIDED (orphan) loop. `'fade'` is the
3273
+ * default level ramp (works for any family); `stutter`/`chopped`/`delay` are
3274
+ * audio panels only, surfaced via the row's effect selector when the panel
3275
+ * passes `onCreateAudioTransition`. @since SDK 2.32.0
3276
+ */
3277
+ type AudioEffect = 'fade' | 'stutter' | 'chopped' | 'delay';
3278
+ declare const AUDIO_EFFECTS: readonly AudioEffect[];
3279
+ declare const AUDIO_EFFECT_LABEL: Record<AudioEffect, string>;
3280
+ declare function asAudioEffect(v: unknown): AudioEffect | null;
3281
+ /** Derive a row's transition type from which slots are filled. `null` = empty row. */
3282
+ declare function rowType(hasOrigin: boolean, hasTarget: boolean): TransitionRowType | null;
3283
+ /** Narrow an unknown scene-data value to a TransitionDesignerDraft (defensive). */
3284
+ declare function asTransitionDesignerDraft(val: unknown): TransitionDesignerDraft | null;
3285
+ /**
3286
+ * Reconcile a saved slot order against the current pool of available source ids:
3287
+ * - keep saved ids still in the pool (in their saved position),
3288
+ * - keep `null` blanks,
3289
+ * - drop ids no longer in the pool (consumed by a created crossfade/fade, or the
3290
+ * source track was deleted) and any duplicates,
3291
+ * - append pool ids missing from the saved order (newly added tracks) at the end.
3292
+ *
3293
+ * Pure; exported for unit testing.
3294
+ */
3295
+ declare function reconcileSlots(saved: readonly (string | null)[] | undefined, poolIds: readonly string[]): (string | null)[];
3296
+ /** One assembled designer row: the two source dbIds (or `null`) + derived type. */
3297
+ interface DesignerRowSlots {
3298
+ originId: string | null;
3299
+ targetId: string | null;
3300
+ type: TransitionRowType | null;
3301
+ }
3302
+ /** Zip two slot columns into index-aligned rows with their derived type. */
3303
+ declare function buildRowSlots(originSlots: readonly (string | null)[], targetSlots: readonly (string | null)[]): DesignerRowSlots[];
3304
+ /**
3305
+ * Tidy the columns for persistence: drop rows where BOTH slots are blank (a
3306
+ * meaningless gap) and trim trailing blanks per column. Returns clean columns
3307
+ * suitable for {@link TransitionDesignerDraft}.
3308
+ */
3309
+ declare function normalizeSlots(originSlots: readonly (string | null)[], targetSlots: readonly (string | null)[]): TransitionDesignerDraft;
3310
+ /** Pad a column with trailing `null`s up to `n` (so both columns render aligned). */
3311
+ declare function padSlots(slots: readonly (string | null)[], n: number): (string | null)[];
3312
+ /** Pad both columns to equal length (= the longer column). */
3313
+ declare function padPair(originSlots: readonly (string | null)[], targetSlots: readonly (string | null)[]): [(string | null)[], (string | null)[]];
3314
+ /** Shallow element-wise equality for two slot columns. */
3315
+ declare function slotsEqual(a: readonly (string | null)[], b: readonly (string | null)[]): boolean;
3316
+ /**
3317
+ * Stable key identifying an in-flight create, derived from the row's SOURCE dbIds
3318
+ * (not its row index) — so reordering or inserting a gap mid-create still maps the
3319
+ * progress indicator to the right row, and concurrent creates never collide. dbIds
3320
+ * are UUIDs, so `|` is a safe origin/target separator. `null` for an empty row.
3321
+ *
3322
+ * @since SDK 2.30.0
3323
+ */
3324
+ declare function rowKey(row: DesignerRowSlots): string | null;
3325
+ /**
3326
+ * The set of source dbIds referenced by a collection of in-flight {@link rowKey}s —
3327
+ * used to lock those cells (no drag / gap edits) while their create runs.
3328
+ *
3329
+ * @since SDK 2.30.0
3330
+ */
3331
+ declare function dbIdsFromKeys(keys: Iterable<string>): Set<string>;
3332
+
3102
3333
  /**
3103
3334
  * ConfirmDialog — styled in-app confirmation modal (SDK component).
3104
3335
  *
@@ -3822,7 +4053,7 @@ declare function useSoundHistory(applySound: (trackId: string, descriptor: unkno
3822
4053
  * Registry checks semver.gte(PLUGIN_SDK_VERSION, manifest.minHostVersion)
3823
4054
  * during activation and marks incompatible plugins accordingly.
3824
4055
  */
3825
- declare const PLUGIN_SDK_VERSION = "2.28.0";
4056
+ declare const PLUGIN_SDK_VERSION = "2.34.0";
3826
4057
 
3827
4058
  /**
3828
4059
  * FX Preset Definitions
@@ -3970,4 +4201,4 @@ interface PickTopKOptions {
3970
4201
  */
3971
4202
  declare function pickTopKWeighted<T>(scored: ReadonlyArray<ScoredCandidate<T>>, options?: PickTopKOptions): T | null;
3972
4203
 
3973
- export { type AudioInputDevice, type BulkAddPlaceholderTrack, type ComposeProgressEvent, type ComposeProgressListener, type ComposeSceneOptions, type ComposeSceneResult, ConfirmDialog, type ConfirmDialogProps, type CreateTrackOptions, type CrossfadeInpaintInput, type CrossfadeLayer, type CrossfadeMeta, CrossfadeModal, type CrossfadeModalProps, type CrossfadePairMeta, type CrossfadeSelection, type CrossfadeSlot, CrossfadeTrackRow, type CrossfadeTrackRowProps, type CrossfadeVolumeCurves, DB_MAX, DB_MIN, DEFAULT_FX_CATEGORY_DETAIL, DEFAULT_FX_DRY_WET, DRAG_DEAD_ZONE, type DeckBoundaryEvent, type DeckBoundaryListener, DownloadPackButton, type DownloadPackButtonProps, type DownloadPackButtonVariant, type DrawerTab, type DrumKit, EMPTY_FX_DETAIL_STATE, EMPTY_FX_STATE, EQUAL_POWER_GAIN, type ExportMidiBundleOptions, type ExportMidiBundleResult, type ExportedPluginData, FX_CATEGORIES, FX_CHAIN_ORDER, FX_DISPLAY_LABELS, FX_ENGINE_PLUGIN_NAMES, FX_PRESET_CONFIGS, type FadeDirection, type FadeEntry, type FadeGesture, type FadeLayer, type FadeMeta, FadeModal, type FadeModalProps, type FadeSelection, FadeTrackRow, type FadeTrackRowProps, type FxCategory, type FxCategoryDetailState, type FxPreset, type FxPresetConfig, type FxPresetData, type FxPresetDataEntry, FxToggleBar, type FxToggleBarProps, GUTTER_W, type GeneratorPlugin, type GeneratorType, type ImportCandidateScene, type ImportCandidateTrack, ImportTrackModal, type ImportTrackModalProps, type InstrumentDescriptor, TrackDrawer as InstrumentDrawer, type TrackDrawerProps as InstrumentDrawerProps, type InstrumentSampler, type InstrumentZone, type LLMCandidate, type LLMContent, type LLMFunctionDeclaration, type LLMGenerationConfig, type LLMGenerationRequest, type LLMGenerationResult, type LLMPart, type LLMSystemInstruction, type LLMTool, type LLMToolUseRequest, type LLMToolUseResponse, type LLMUsageMetadata, LevelMeter, type LevelMeterProps, type ListAudioFilesOptions, type ListImportableTracksOptions, type MidiClipData, type MidiWriteResult, type MixInterpolation, Modal, type ModalProps, type MusicalContext, OffsetScrubber, type OffsetScrubberProps, PLUGIN_SDK_VERSION, PX_PER_BEAT, PanSlider, type PeakAnalysis, PianoRollEditor, type PianoRollEditorProps, type PickTopKOptions, type PluginAppTool, type PluginAppToolInputSchema, type PluginAppToolResult, type PluginAudioTextureRequest, type PluginAudioTextureResult, type PluginCapabilities, type PluginChordSegment, type PluginChordTiming, type PluginConcurrentTrackInfo, type PluginCuePoints, type PluginDownloadOptions, PluginError, type PluginErrorCode, type PluginFileDialogOptions, type PluginFxCategoryDetailState, type PluginGenerationContext, type PluginHost, type PluginHttpRequestOptions, type PluginHttpResponse, type PluginManifest, type PluginMidiNote, type PluginPresetData, type PluginPresetInfo, type PluginRegistration, type PluginSampleFilter, type PluginSampleImportResult, type PluginSampleInfo, type PluginSampleTrackInfo, type PluginSceneContext, type PluginSceneInfo, type PluginSettingsSchema, type PluginSettingsStore, type PluginSkill, type PluginSkillInputSchema, type PluginStatus, type PluginStemSplitResult, type PluginStemTrackInfo, type PluginSynthInfo, type PluginTrackFxDetailState, type PluginTrackHandle, type PluginTrackInfo, type PluginTrackLevel, type PluginTrackRuntimeState, type PluginTransportState, type PluginTrimWindow, type PluginUIProps, type PostProcessOptions, RESIZE_HANDLE_PX, ROW_HEIGHT, type ReadMidiClip, type ReadMidiResult, type RecordingChunkFinalizedEvent, type RecordingTargetInfo, type SDKTrackRowProps, SLIDER_UNITY, SamplePackCTACard, type SamplePackCTACardProps, type SamplePackCTACardStatus, type SamplePackCardInfo, type SavePluginPresetOptions, type SceneChangeListener, type SceneFamilyTrack, type ScoredCandidate, ScrollingWaveform, type ScrollingWaveformProps, type SettingDefinition, type ShufflePresetResult, SorceryProgressBar, type SoundHistoryEntry, type StemType, type SynthesizeCuePointsOptions, TEXTURAL_ROLES, TrackDrawer, type TrackDrawerProps, type TrackFxDetailState, type TrackFxState, type TrackLevelsHandle, TrackMeterStrip, type TrackMeterStripProps, type TrackMeterView, TrackRow, type TrackRowDragProps, type TrackSoundHistory, type TrackSoundSnapshot, type TrackStateChangeListener, type TransportEvent, type TransportEventListener, type UnsubscribeFn, type UseSoundHistoryOptions, type UseSoundHistoryResult, type UseTrackReorderOptions, type UseTrackReorderResult, type VolumeAutomationPoint, VolumeSlider, type WaveformPeaks, WaveformView, type WaveformViewProps, analyzeWavPeak, asCrossfadeMeta, asFadeMeta, buildCrossfadeInpaintPrompt, buildCrossfadeVolumeCurves, buildFadeVolumeCurve, calculateTimeBasedTarget, cellToPx, centerScrollTop, computePeaks, dbToSlider, defaultFadeGesture, drawWaveform, formatConcurrentTracks, moveItem, parseCrossfadePairs, parseFades, pickTopKWeighted, pitchToName, pxToCell, resizeNoteDuration, scorePromptMatch, sliderToDb, synthesizeCuePoints, tokenizePrompt, transposeNotes, useAnySolo, useSceneState, useSoundHistory, useTrackLevel, useTrackLevels, useTrackMeter, useTrackReorder, useTransportPlaying };
4204
+ export { AUDIO_EFFECTS, AUDIO_EFFECT_LABEL, type AudioEffect, type AudioInputDevice, type BulkAddPlaceholderTrack, type ComposeProgressEvent, type ComposeProgressListener, type ComposeSceneOptions, type ComposeSceneResult, ConfirmDialog, type ConfirmDialogProps, type CreateTrackOptions, type CrossfadeInpaintInput, type CrossfadeLayer, type CrossfadeMeta, CrossfadeModal, type CrossfadeModalProps, type CrossfadePairMeta, type CrossfadeSelection, type CrossfadeSlot, CrossfadeTrackRow, type CrossfadeTrackRowProps, type CrossfadeVolumeCurves, DB_MAX, DB_MIN, DEFAULT_FX_CATEGORY_DETAIL, DEFAULT_FX_DRY_WET, DRAG_DEAD_ZONE, type DeckBoundaryEvent, type DeckBoundaryListener, type DesignerRowSlots, DownloadPackButton, type DownloadPackButtonProps, type DownloadPackButtonVariant, type DrawerTab, type DrumKit, EMPTY_FX_DETAIL_STATE, EMPTY_FX_STATE, EQUAL_POWER_GAIN, type ExportMidiBundleOptions, type ExportMidiBundleResult, type ExportedPluginData, FX_CATEGORIES, FX_CHAIN_ORDER, FX_DISPLAY_LABELS, FX_ENGINE_PLUGIN_NAMES, FX_PRESET_CONFIGS, type FadeDirection, type FadeEntry, type FadeGesture, type FadeLayer, type FadeMeta, FadeModal, type FadeModalProps, type FadeSelection, FadeTrackRow, type FadeTrackRowProps, type FxCategory, type FxCategoryDetailState, type FxPreset, type FxPresetConfig, type FxPresetData, type FxPresetDataEntry, FxToggleBar, type FxToggleBarProps, GUTTER_W, type GeneratorPlugin, type GeneratorType, type ImportCandidateScene, type ImportCandidateTrack, ImportTrackModal, type ImportTrackModalProps, type InstrumentDescriptor, TrackDrawer as InstrumentDrawer, type TrackDrawerProps as InstrumentDrawerProps, type InstrumentSampler, type InstrumentZone, type LLMCandidate, type LLMContent, type LLMFunctionDeclaration, type LLMGenerationConfig, type LLMGenerationRequest, type LLMGenerationResult, type LLMPart, type LLMSystemInstruction, type LLMTool, type LLMToolUseRequest, type LLMToolUseResponse, type LLMUsageMetadata, LevelMeter, type LevelMeterProps, type ListAudioFilesOptions, type ListImportableTracksOptions, type MidiClipData, type MidiWriteResult, type MixInterpolation, Modal, type ModalProps, type MusicalContext, OffsetScrubber, type OffsetScrubberProps, PLUGIN_SDK_VERSION, PX_PER_BEAT, PanSlider, type PeakAnalysis, PianoRollEditor, type PianoRollEditorProps, type PickTopKOptions, type PluginAppTool, type PluginAppToolInputSchema, type PluginAppToolResult, type PluginAudioTextureRequest, type PluginAudioTextureResult, type PluginCapabilities, type PluginChordSegment, type PluginChordTiming, type PluginConcurrentTrackInfo, type PluginCuePoints, type PluginDownloadOptions, PluginError, type PluginErrorCode, type PluginFileDialogOptions, type PluginFxCategoryDetailState, type PluginGenerationContext, type PluginHost, type PluginHttpRequestOptions, type PluginHttpResponse, type PluginManifest, type PluginMidiNote, type PluginPresetData, type PluginPresetInfo, type PluginRegistration, type PluginSampleFilter, type PluginSampleImportResult, type PluginSampleInfo, type PluginSampleTrackInfo, type PluginSceneContext, type PluginSceneInfo, type PluginSettingsSchema, type PluginSettingsStore, type PluginSkill, type PluginSkillInputSchema, type PluginStatus, type PluginStemSplitResult, type PluginStemTrackInfo, type PluginSynthInfo, type PluginTrackFxDetailState, type PluginTrackHandle, type PluginTrackInfo, type PluginTrackLevel, type PluginTrackRuntimeState, type PluginTransportState, type PluginTrimWindow, type PluginUIProps, type PostProcessOptions, RESIZE_HANDLE_PX, ROW_HEIGHT, type ReadMidiClip, type ReadMidiResult, type RecordingChunkFinalizedEvent, type RecordingTargetInfo, type SDKTrackRowProps, SLIDER_UNITY, SamplePackCTACard, type SamplePackCTACardProps, type SamplePackCTACardStatus, type SamplePackCardInfo, type SavePluginPresetOptions, type SceneChangeListener, type SceneFamilyTrack, type ScoredCandidate, ScrollingWaveform, type ScrollingWaveformProps, type SettingDefinition, type ShufflePresetResult, SorceryProgressBar, type SoundHistoryEntry, type StemType, type SynthesizeCuePointsOptions, TEXTURAL_ROLES, TRANSITION_DESIGNER_DRAFT_KEY, TrackDrawer, type TrackDrawerProps, type TrackFxDetailState, type TrackFxState, type TrackLevelsHandle, TrackMeterStrip, type TrackMeterStripProps, type TrackMeterView, TrackRow, type TrackRowDragProps, type TrackSoundHistory, type TrackSoundSnapshot, type TrackStateChangeListener, TransitionDesigner, type TransitionDesignerDraft, type TransitionDesignerProps, type TransitionRowType, type TransportEvent, type TransportEventListener, type UnsubscribeFn, type UseSoundHistoryOptions, type UseSoundHistoryResult, type UseTrackReorderOptions, type UseTrackReorderResult, type VolumeAutomationPoint, VolumeSlider, type WaveformPeaks, WaveformView, type WaveformViewProps, analyzeWavPeak, asAudioEffect, asCrossfadeMeta, asFadeMeta, asTransitionDesignerDraft, buildCrossfadeInpaintPrompt, buildCrossfadeVolumeCurves, buildFadeVolumeCurve, buildRowSlots, calculateTimeBasedTarget, cellToPx, centerScrollTop, computePeaks, dbIdsFromKeys, dbToSlider, defaultFadeGesture, drawWaveform, formatConcurrentTracks, hashString, moveItem, normalizeSlots, padPair, padSlots, parseCrossfadePairs, parseFades, pickTopKWeighted, pitchToName, pxToCell, reconcileSlots, resizeNoteDuration, rowKey, rowType, scorePromptMatch, sliderToDb, slotsEqual, soundIdentity, synthesizeCuePoints, tokenizePrompt, transposeNotes, useAnySolo, useSceneState, useSoundHistory, useTrackLevel, useTrackLevels, useTrackMeter, useTrackReorder, useTransportPlaying };
package/dist/index.d.ts CHANGED
@@ -383,6 +383,19 @@ interface PluginHost {
383
383
  setRawPluginState(trackId: string, pluginIndex: number, stateBase64: string): Promise<void>;
384
384
  /** Get a plugin's RAW VST3/AU state (see setRawPluginState). @since SDK 2.15.0 */
385
385
  getRawPluginState(trackId: string, pluginIndex: number): Promise<string>;
386
+ /**
387
+ * Persist a preset as the track's durable sound identity (DB `preset_state`,
388
+ * the shape getTrackSound reads back). setPluginState/setRawPluginState are
389
+ * engine-only — a copied sound that is never persisted has no identity, so
390
+ * drift checks (e.g. the transition-designer preset re-sync) can never
391
+ * observe convergence. Call after applying a copied state to a layer track.
392
+ * @since SDK 2.34.0
393
+ */
394
+ persistTrackPresetState?(trackId: string, preset: {
395
+ state: string;
396
+ stateType: 'raw' | 'valuetree';
397
+ name?: string;
398
+ }): Promise<void>;
386
399
  /** List plugins currently loaded on a track. */
387
400
  getTrackPlugins(trackId: string): Promise<PluginSynthInfo[]>;
388
401
  /** Remove a plugin from a track. */
@@ -882,6 +895,30 @@ interface PluginHost {
882
895
  deleteSampleTrack(trackId: string): Promise<void>;
883
896
  /** Get all sample tracks in the active scene. Re-establishes ownership. */
884
897
  getPluginSampleTracks(): Promise<PluginSampleTrackInfo[]>;
898
+ /**
899
+ * Resolve a sample-track row id (as returned by `listSceneFamilyTracks`) back
900
+ * to its library `sampleId` + metadata, so a loop can be re-created in another
901
+ * scene (transition crossfade/fade). Returns null if not a sample track.
902
+ * @since SDK 2.31.0
903
+ */
904
+ getSampleTrackInfo?(dbId: string): Promise<{
905
+ sampleId: string;
906
+ fileName?: string;
907
+ bpm?: number;
908
+ key?: string;
909
+ } | null>;
910
+ /**
911
+ * Render an audio transition effect onto a sample (offline DSP via the audio
912
+ * tool), returning a NEW library sample to place. Used for stutter / chopped
913
+ * loop transitions. @since SDK 2.32.0
914
+ */
915
+ renderSampleEffect?(sampleId: string, spec: {
916
+ effect: 'stutter' | 'chopped';
917
+ bars: number;
918
+ bpm: number;
919
+ repeats?: number;
920
+ slices?: number;
921
+ }): Promise<PluginSampleInfo>;
885
922
  /** Time-stretch a sample to a target BPM. Returns the new sample info. */
886
923
  timeStretchSample(sampleId: string, targetBpm: number): Promise<PluginSampleInfo>;
887
924
  /**
@@ -2577,6 +2614,16 @@ declare function TrackRow({ track, prompt, runtimeState, soloedOut, fxDetailStat
2577
2614
  *
2578
2615
  * @since SDK 2.23.0
2579
2616
  */
2617
+
2618
+ /**
2619
+ * Stable, state-aware identity for a track's sound — used to auto-detect when a
2620
+ * transition's SOURCE preset/sample has drifted from the copy on its layer. A
2621
+ * preset hashes its full STATE blob (so a same-name param tweak still differs); a
2622
+ * sample uses its path; an instrument uses its id + zones. Empty string = no sound.
2623
+ * @since SDK 2.32.0
2624
+ */
2625
+ declare function hashString(s: string): string;
2626
+ declare function soundIdentity(snap: TrackSoundSnapshot | null | undefined): string;
2580
2627
  /** Which half of the pair a per-layer control / member targets. */
2581
2628
  type CrossfadeSlot = 'origin' | 'target';
2582
2629
  /**
@@ -2809,6 +2856,13 @@ type FadeGesture = 'volume' | 'build';
2809
2856
  interface FadeMeta {
2810
2857
  direction: FadeDirection;
2811
2858
  gesture: FadeGesture;
2859
+ /**
2860
+ * Audio transition variant for one-sided LOOP transitions. `'fade'` (default,
2861
+ * and the only value MIDI panels write) is a plain level ramp; `stutter` /
2862
+ * `chopped` re-render the loop's audio, `delay` adds a delay-throw FX. Shown as
2863
+ * a badge on the row. @since SDK 2.32.0
2864
+ */
2865
+ effect?: 'fade' | 'stutter' | 'chopped' | 'delay';
2812
2866
  /** DB id of the SOURCE track this fade's preset/sample + pattern was seeded from. */
2813
2867
  sourceTrackDbId: string;
2814
2868
  /** DB id of the scene the source track lives in (the from/to scene). */
@@ -2909,6 +2963,8 @@ interface FadeTrackRowProps {
2909
2963
  direction: FadeDirection;
2910
2964
  /** How the fade is shaped — shown read-only (volume = level ramp, build = notes). */
2911
2965
  gesture: FadeGesture;
2966
+ /** Audio transition variant — relabels the badge (Stutter/Chopped/Delay). @since SDK 2.32.0 */
2967
+ effect?: 'fade' | 'stutter' | 'chopped' | 'delay';
2912
2968
  /** Fade position 0..1 — WHERE in time the fade sits. Defaults centered. */
2913
2969
  sliderPos?: number;
2914
2970
  /** Toggle mute. */
@@ -2928,7 +2984,7 @@ interface FadeTrackRowProps {
2928
2984
  /** Left-border accent. Defaults to transition purple. */
2929
2985
  accentColor?: string;
2930
2986
  }
2931
- declare function FadeTrackRow({ layer, direction, gesture, sliderPos, onMuteToggle, onSoloToggle, onVolumeChange, onPanChange, onDelete, onSliderChange, levels, accentColor, }: FadeTrackRowProps): React.ReactElement;
2987
+ declare function FadeTrackRow({ layer, direction, gesture, effect, sliderPos, onMuteToggle, onSoloToggle, onVolumeChange, onPanChange, onDelete, onSliderChange, levels, accentColor, }: FadeTrackRowProps): React.ReactElement;
2932
2988
 
2933
2989
  /**
2934
2990
  * FadeModal — "add a fade" picker for a transition scene.
@@ -3099,6 +3155,181 @@ interface CrossfadeModalProps {
3099
3155
  }
3100
3156
  declare function CrossfadeModal({ host, open, fromSceneId, toSceneId, fromSceneName, toSceneName, excludeSourceDbIds, onClose, onCreate, testIdPrefix, }: CrossfadeModalProps): React.ReactElement | null;
3101
3157
 
3158
+ /**
3159
+ * TransitionDesigner — the per-panel transition staging board, rendered INLINE as
3160
+ * a toggled view inside a generator panel (NOT a modal).
3161
+ *
3162
+ * The multi-row, persistent successor to {@link CrossfadeModal} + {@link FadeModal}:
3163
+ * instead of opening a single-pair dialog ~20 times, the panel header gains a
3164
+ * Tracks ⇄ Transition toggle; flipping to Transition replaces the panel's track
3165
+ * list with this board. Playback is unaffected (the engine keeps playing the
3166
+ * scene's tracks — they're just not shown until you toggle back). Shown only
3167
+ * inside a `scene_type='transition'` scene and scoped to one panel family (a synth
3168
+ * board shows only synth tracks — "drums can't crossfade to synth" is enforced
3169
+ * structurally because each board asks its own family-scoped host).
3170
+ *
3171
+ * Two index-aligned, drag-reorderable columns: origin (scene A, left) and target
3172
+ * (scene B, right). Row i pairs origin[i] with target[i]; the pairing derives the
3173
+ * transition type (both → crossfade, origin-only → fade out, target-only → fade
3174
+ * in). Insert a "gap" above a cell to push a track so it fades instead of
3175
+ * crossfading with whatever sits opposite. The pool per column is the scene's
3176
+ * family tracks MINUS sources already consumed by a committed crossfade/fade
3177
+ * (`excludeSourceDbIds`).
3178
+ *
3179
+ * Per-row **Create** reuses the panel's EXISTING orchestration via `onCreateCrossfade`
3180
+ * / `onCreateFade`. Creates run CONCURRENTLY — fire several at once, or **Create all**
3181
+ * (a bounded pool). Each in-flight row shows its own progress bar and locks just its
3182
+ * own cells; the rest of the board stays editable. On success the source leaves the
3183
+ * pool (the panel updates `excludeSourceDbIds`) and the row collapses; deleting the
3184
+ * committed crossfade/fade on the deck returns the source here. The staged
3185
+ * arrangement persists to the transition scene's plugin_data so it survives toggles.
3186
+ *
3187
+ * @since SDK 2.29.0 (modal); inline toggle view + concurrent creation since 2.30.0.
3188
+ */
3189
+
3190
+ interface TransitionDesignerProps {
3191
+ /** Scoped host — the board calls listSceneFamilyTracks / getSceneName itself. */
3192
+ host: PluginHost;
3193
+ /** DB id of the transition's FROM (origin) scene. */
3194
+ fromSceneId: string;
3195
+ /** DB id of the transition's TO (target) scene. */
3196
+ toSceneId: string;
3197
+ /** DB id of the transition scene itself — the staged draft is persisted here. */
3198
+ transitionSceneId: string;
3199
+ /**
3200
+ * Source-track DB ids already consumed by a committed crossfade OR fade in this
3201
+ * panel. Hidden from both columns so each source is used at most once; when the
3202
+ * deck row is deleted the panel drops the id and the source reappears here.
3203
+ */
3204
+ excludeSourceDbIds?: readonly string[];
3205
+ /**
3206
+ * Build a crossfade pair — the panel's existing handler (create two tracks, one
3207
+ * morphed clip, copy each preset). Should reject on failure. Safe to call
3208
+ * concurrently.
3209
+ */
3210
+ onCreateCrossfade: (origin: CrossfadeSelection, target: CrossfadeSelection) => Promise<void>;
3211
+ /** Build a one-sided fade — the panel's existing handler. Should reject on failure. */
3212
+ onCreateFade: (selection: FadeSelection, direction: FadeDirection, gesture: FadeGesture) => Promise<void>;
3213
+ /**
3214
+ * Build an AUDIO-only one-sided transition (stutter / chopped / delay). When
3215
+ * provided, one-sided rows render an effect selector; absent (MIDI panels) →
3216
+ * one-sided rows stay plain fades. @since SDK 2.32.0
3217
+ */
3218
+ onCreateAudioTransition?: (selection: FadeSelection, direction: FadeDirection, effect: 'stutter' | 'chopped' | 'delay') => Promise<void>;
3219
+ /** Short family label for the heading, e.g. "Synths". */
3220
+ familyLabel?: string;
3221
+ /** data-testid prefix. */
3222
+ testIdPrefix?: string;
3223
+ }
3224
+ declare function TransitionDesigner({ host, fromSceneId, toSceneId, transitionSceneId, excludeSourceDbIds, onCreateCrossfade, onCreateFade, onCreateAudioTransition, familyLabel, testIdPrefix, }: TransitionDesignerProps): React.ReactElement;
3225
+
3226
+ /**
3227
+ * Transition Designer — pure helpers for the per-panel transition staging board.
3228
+ *
3229
+ * The designer is the multi-row, persistent successor to CrossfadeModal/FadeModal:
3230
+ * it lays out ONE panel-family's origin (scene A) and target (scene B) source
3231
+ * tracks as two index-aligned, drag-reorderable columns. Row i pairs the origin
3232
+ * slot at index i with the target slot at index i, and the pairing DERIVES the
3233
+ * transition type:
3234
+ * - both filled → crossfade (morph A→B)
3235
+ * - origin filled, target blank → fade out (the track leaves)
3236
+ * - target filled, origin blank → fade in (the track enters)
3237
+ * A slot may be a source-track dbId or `null` (a blank spacer). Blanks let the
3238
+ * user open a gap so a mid-list track becomes a fade instead of crossfading with
3239
+ * whatever happens to sit opposite it (the CSV-style layout).
3240
+ *
3241
+ * The "available pool" per column is the scene's family tracks MINUS the sources
3242
+ * already consumed by a committed crossfade/fade (excludeSourceDbIds). Creating a
3243
+ * row reuses the panel's existing crossfade/fade orchestration; deleting the
3244
+ * committed crossfade/fade on the deck returns its source to the pool.
3245
+ *
3246
+ * This module owns only the shape + the pure slot/row math so it can be unit
3247
+ * tested without a DOM and can't drift across the three panels. The component
3248
+ * (TransitionDesigner.tsx) owns the overlay, drag wiring, and persistence.
3249
+ *
3250
+ * @since SDK 2.29.0
3251
+ */
3252
+ /**
3253
+ * Persisted per-transition-scene draft: the two columns' slot orders. A slot is
3254
+ * a source-track dbId, or `null` for a blank spacer (an intentional gap). Stored
3255
+ * in the transition scene's plugin_data under {@link TRANSITION_DESIGNER_DRAFT_KEY};
3256
+ * because plugin_data is scoped by (plugin_id, sceneId), each panel family keeps
3257
+ * its own draft automatically.
3258
+ */
3259
+ interface TransitionDesignerDraft {
3260
+ /** Origin (scene A) column order — dbIds or `null` blanks. */
3261
+ originOrder: (string | null)[];
3262
+ /** Target (scene B) column order — dbIds or `null` blanks. */
3263
+ targetOrder: (string | null)[];
3264
+ /** Per one-sided-row audio effect, keyed by the source dbId. @since SDK 2.32.0 */
3265
+ rowEffects?: Record<string, AudioEffect>;
3266
+ }
3267
+ /** scene-data key (under the transition scene) holding the staged draft. */
3268
+ declare const TRANSITION_DESIGNER_DRAFT_KEY = "transitionDesigner:draft";
3269
+ /** The transition a single aligned row represents (derived from its two slots). */
3270
+ type TransitionRowType = 'crossfade' | 'fade-out' | 'fade-in';
3271
+ /**
3272
+ * Audio-only transition gesture for a ONE-SIDED (orphan) loop. `'fade'` is the
3273
+ * default level ramp (works for any family); `stutter`/`chopped`/`delay` are
3274
+ * audio panels only, surfaced via the row's effect selector when the panel
3275
+ * passes `onCreateAudioTransition`. @since SDK 2.32.0
3276
+ */
3277
+ type AudioEffect = 'fade' | 'stutter' | 'chopped' | 'delay';
3278
+ declare const AUDIO_EFFECTS: readonly AudioEffect[];
3279
+ declare const AUDIO_EFFECT_LABEL: Record<AudioEffect, string>;
3280
+ declare function asAudioEffect(v: unknown): AudioEffect | null;
3281
+ /** Derive a row's transition type from which slots are filled. `null` = empty row. */
3282
+ declare function rowType(hasOrigin: boolean, hasTarget: boolean): TransitionRowType | null;
3283
+ /** Narrow an unknown scene-data value to a TransitionDesignerDraft (defensive). */
3284
+ declare function asTransitionDesignerDraft(val: unknown): TransitionDesignerDraft | null;
3285
+ /**
3286
+ * Reconcile a saved slot order against the current pool of available source ids:
3287
+ * - keep saved ids still in the pool (in their saved position),
3288
+ * - keep `null` blanks,
3289
+ * - drop ids no longer in the pool (consumed by a created crossfade/fade, or the
3290
+ * source track was deleted) and any duplicates,
3291
+ * - append pool ids missing from the saved order (newly added tracks) at the end.
3292
+ *
3293
+ * Pure; exported for unit testing.
3294
+ */
3295
+ declare function reconcileSlots(saved: readonly (string | null)[] | undefined, poolIds: readonly string[]): (string | null)[];
3296
+ /** One assembled designer row: the two source dbIds (or `null`) + derived type. */
3297
+ interface DesignerRowSlots {
3298
+ originId: string | null;
3299
+ targetId: string | null;
3300
+ type: TransitionRowType | null;
3301
+ }
3302
+ /** Zip two slot columns into index-aligned rows with their derived type. */
3303
+ declare function buildRowSlots(originSlots: readonly (string | null)[], targetSlots: readonly (string | null)[]): DesignerRowSlots[];
3304
+ /**
3305
+ * Tidy the columns for persistence: drop rows where BOTH slots are blank (a
3306
+ * meaningless gap) and trim trailing blanks per column. Returns clean columns
3307
+ * suitable for {@link TransitionDesignerDraft}.
3308
+ */
3309
+ declare function normalizeSlots(originSlots: readonly (string | null)[], targetSlots: readonly (string | null)[]): TransitionDesignerDraft;
3310
+ /** Pad a column with trailing `null`s up to `n` (so both columns render aligned). */
3311
+ declare function padSlots(slots: readonly (string | null)[], n: number): (string | null)[];
3312
+ /** Pad both columns to equal length (= the longer column). */
3313
+ declare function padPair(originSlots: readonly (string | null)[], targetSlots: readonly (string | null)[]): [(string | null)[], (string | null)[]];
3314
+ /** Shallow element-wise equality for two slot columns. */
3315
+ declare function slotsEqual(a: readonly (string | null)[], b: readonly (string | null)[]): boolean;
3316
+ /**
3317
+ * Stable key identifying an in-flight create, derived from the row's SOURCE dbIds
3318
+ * (not its row index) — so reordering or inserting a gap mid-create still maps the
3319
+ * progress indicator to the right row, and concurrent creates never collide. dbIds
3320
+ * are UUIDs, so `|` is a safe origin/target separator. `null` for an empty row.
3321
+ *
3322
+ * @since SDK 2.30.0
3323
+ */
3324
+ declare function rowKey(row: DesignerRowSlots): string | null;
3325
+ /**
3326
+ * The set of source dbIds referenced by a collection of in-flight {@link rowKey}s —
3327
+ * used to lock those cells (no drag / gap edits) while their create runs.
3328
+ *
3329
+ * @since SDK 2.30.0
3330
+ */
3331
+ declare function dbIdsFromKeys(keys: Iterable<string>): Set<string>;
3332
+
3102
3333
  /**
3103
3334
  * ConfirmDialog — styled in-app confirmation modal (SDK component).
3104
3335
  *
@@ -3822,7 +4053,7 @@ declare function useSoundHistory(applySound: (trackId: string, descriptor: unkno
3822
4053
  * Registry checks semver.gte(PLUGIN_SDK_VERSION, manifest.minHostVersion)
3823
4054
  * during activation and marks incompatible plugins accordingly.
3824
4055
  */
3825
- declare const PLUGIN_SDK_VERSION = "2.28.0";
4056
+ declare const PLUGIN_SDK_VERSION = "2.34.0";
3826
4057
 
3827
4058
  /**
3828
4059
  * FX Preset Definitions
@@ -3970,4 +4201,4 @@ interface PickTopKOptions {
3970
4201
  */
3971
4202
  declare function pickTopKWeighted<T>(scored: ReadonlyArray<ScoredCandidate<T>>, options?: PickTopKOptions): T | null;
3972
4203
 
3973
- export { type AudioInputDevice, type BulkAddPlaceholderTrack, type ComposeProgressEvent, type ComposeProgressListener, type ComposeSceneOptions, type ComposeSceneResult, ConfirmDialog, type ConfirmDialogProps, type CreateTrackOptions, type CrossfadeInpaintInput, type CrossfadeLayer, type CrossfadeMeta, CrossfadeModal, type CrossfadeModalProps, type CrossfadePairMeta, type CrossfadeSelection, type CrossfadeSlot, CrossfadeTrackRow, type CrossfadeTrackRowProps, type CrossfadeVolumeCurves, DB_MAX, DB_MIN, DEFAULT_FX_CATEGORY_DETAIL, DEFAULT_FX_DRY_WET, DRAG_DEAD_ZONE, type DeckBoundaryEvent, type DeckBoundaryListener, DownloadPackButton, type DownloadPackButtonProps, type DownloadPackButtonVariant, type DrawerTab, type DrumKit, EMPTY_FX_DETAIL_STATE, EMPTY_FX_STATE, EQUAL_POWER_GAIN, type ExportMidiBundleOptions, type ExportMidiBundleResult, type ExportedPluginData, FX_CATEGORIES, FX_CHAIN_ORDER, FX_DISPLAY_LABELS, FX_ENGINE_PLUGIN_NAMES, FX_PRESET_CONFIGS, type FadeDirection, type FadeEntry, type FadeGesture, type FadeLayer, type FadeMeta, FadeModal, type FadeModalProps, type FadeSelection, FadeTrackRow, type FadeTrackRowProps, type FxCategory, type FxCategoryDetailState, type FxPreset, type FxPresetConfig, type FxPresetData, type FxPresetDataEntry, FxToggleBar, type FxToggleBarProps, GUTTER_W, type GeneratorPlugin, type GeneratorType, type ImportCandidateScene, type ImportCandidateTrack, ImportTrackModal, type ImportTrackModalProps, type InstrumentDescriptor, TrackDrawer as InstrumentDrawer, type TrackDrawerProps as InstrumentDrawerProps, type InstrumentSampler, type InstrumentZone, type LLMCandidate, type LLMContent, type LLMFunctionDeclaration, type LLMGenerationConfig, type LLMGenerationRequest, type LLMGenerationResult, type LLMPart, type LLMSystemInstruction, type LLMTool, type LLMToolUseRequest, type LLMToolUseResponse, type LLMUsageMetadata, LevelMeter, type LevelMeterProps, type ListAudioFilesOptions, type ListImportableTracksOptions, type MidiClipData, type MidiWriteResult, type MixInterpolation, Modal, type ModalProps, type MusicalContext, OffsetScrubber, type OffsetScrubberProps, PLUGIN_SDK_VERSION, PX_PER_BEAT, PanSlider, type PeakAnalysis, PianoRollEditor, type PianoRollEditorProps, type PickTopKOptions, type PluginAppTool, type PluginAppToolInputSchema, type PluginAppToolResult, type PluginAudioTextureRequest, type PluginAudioTextureResult, type PluginCapabilities, type PluginChordSegment, type PluginChordTiming, type PluginConcurrentTrackInfo, type PluginCuePoints, type PluginDownloadOptions, PluginError, type PluginErrorCode, type PluginFileDialogOptions, type PluginFxCategoryDetailState, type PluginGenerationContext, type PluginHost, type PluginHttpRequestOptions, type PluginHttpResponse, type PluginManifest, type PluginMidiNote, type PluginPresetData, type PluginPresetInfo, type PluginRegistration, type PluginSampleFilter, type PluginSampleImportResult, type PluginSampleInfo, type PluginSampleTrackInfo, type PluginSceneContext, type PluginSceneInfo, type PluginSettingsSchema, type PluginSettingsStore, type PluginSkill, type PluginSkillInputSchema, type PluginStatus, type PluginStemSplitResult, type PluginStemTrackInfo, type PluginSynthInfo, type PluginTrackFxDetailState, type PluginTrackHandle, type PluginTrackInfo, type PluginTrackLevel, type PluginTrackRuntimeState, type PluginTransportState, type PluginTrimWindow, type PluginUIProps, type PostProcessOptions, RESIZE_HANDLE_PX, ROW_HEIGHT, type ReadMidiClip, type ReadMidiResult, type RecordingChunkFinalizedEvent, type RecordingTargetInfo, type SDKTrackRowProps, SLIDER_UNITY, SamplePackCTACard, type SamplePackCTACardProps, type SamplePackCTACardStatus, type SamplePackCardInfo, type SavePluginPresetOptions, type SceneChangeListener, type SceneFamilyTrack, type ScoredCandidate, ScrollingWaveform, type ScrollingWaveformProps, type SettingDefinition, type ShufflePresetResult, SorceryProgressBar, type SoundHistoryEntry, type StemType, type SynthesizeCuePointsOptions, TEXTURAL_ROLES, TrackDrawer, type TrackDrawerProps, type TrackFxDetailState, type TrackFxState, type TrackLevelsHandle, TrackMeterStrip, type TrackMeterStripProps, type TrackMeterView, TrackRow, type TrackRowDragProps, type TrackSoundHistory, type TrackSoundSnapshot, type TrackStateChangeListener, type TransportEvent, type TransportEventListener, type UnsubscribeFn, type UseSoundHistoryOptions, type UseSoundHistoryResult, type UseTrackReorderOptions, type UseTrackReorderResult, type VolumeAutomationPoint, VolumeSlider, type WaveformPeaks, WaveformView, type WaveformViewProps, analyzeWavPeak, asCrossfadeMeta, asFadeMeta, buildCrossfadeInpaintPrompt, buildCrossfadeVolumeCurves, buildFadeVolumeCurve, calculateTimeBasedTarget, cellToPx, centerScrollTop, computePeaks, dbToSlider, defaultFadeGesture, drawWaveform, formatConcurrentTracks, moveItem, parseCrossfadePairs, parseFades, pickTopKWeighted, pitchToName, pxToCell, resizeNoteDuration, scorePromptMatch, sliderToDb, synthesizeCuePoints, tokenizePrompt, transposeNotes, useAnySolo, useSceneState, useSoundHistory, useTrackLevel, useTrackLevels, useTrackMeter, useTrackReorder, useTransportPlaying };
4204
+ export { AUDIO_EFFECTS, AUDIO_EFFECT_LABEL, type AudioEffect, type AudioInputDevice, type BulkAddPlaceholderTrack, type ComposeProgressEvent, type ComposeProgressListener, type ComposeSceneOptions, type ComposeSceneResult, ConfirmDialog, type ConfirmDialogProps, type CreateTrackOptions, type CrossfadeInpaintInput, type CrossfadeLayer, type CrossfadeMeta, CrossfadeModal, type CrossfadeModalProps, type CrossfadePairMeta, type CrossfadeSelection, type CrossfadeSlot, CrossfadeTrackRow, type CrossfadeTrackRowProps, type CrossfadeVolumeCurves, DB_MAX, DB_MIN, DEFAULT_FX_CATEGORY_DETAIL, DEFAULT_FX_DRY_WET, DRAG_DEAD_ZONE, type DeckBoundaryEvent, type DeckBoundaryListener, type DesignerRowSlots, DownloadPackButton, type DownloadPackButtonProps, type DownloadPackButtonVariant, type DrawerTab, type DrumKit, EMPTY_FX_DETAIL_STATE, EMPTY_FX_STATE, EQUAL_POWER_GAIN, type ExportMidiBundleOptions, type ExportMidiBundleResult, type ExportedPluginData, FX_CATEGORIES, FX_CHAIN_ORDER, FX_DISPLAY_LABELS, FX_ENGINE_PLUGIN_NAMES, FX_PRESET_CONFIGS, type FadeDirection, type FadeEntry, type FadeGesture, type FadeLayer, type FadeMeta, FadeModal, type FadeModalProps, type FadeSelection, FadeTrackRow, type FadeTrackRowProps, type FxCategory, type FxCategoryDetailState, type FxPreset, type FxPresetConfig, type FxPresetData, type FxPresetDataEntry, FxToggleBar, type FxToggleBarProps, GUTTER_W, type GeneratorPlugin, type GeneratorType, type ImportCandidateScene, type ImportCandidateTrack, ImportTrackModal, type ImportTrackModalProps, type InstrumentDescriptor, TrackDrawer as InstrumentDrawer, type TrackDrawerProps as InstrumentDrawerProps, type InstrumentSampler, type InstrumentZone, type LLMCandidate, type LLMContent, type LLMFunctionDeclaration, type LLMGenerationConfig, type LLMGenerationRequest, type LLMGenerationResult, type LLMPart, type LLMSystemInstruction, type LLMTool, type LLMToolUseRequest, type LLMToolUseResponse, type LLMUsageMetadata, LevelMeter, type LevelMeterProps, type ListAudioFilesOptions, type ListImportableTracksOptions, type MidiClipData, type MidiWriteResult, type MixInterpolation, Modal, type ModalProps, type MusicalContext, OffsetScrubber, type OffsetScrubberProps, PLUGIN_SDK_VERSION, PX_PER_BEAT, PanSlider, type PeakAnalysis, PianoRollEditor, type PianoRollEditorProps, type PickTopKOptions, type PluginAppTool, type PluginAppToolInputSchema, type PluginAppToolResult, type PluginAudioTextureRequest, type PluginAudioTextureResult, type PluginCapabilities, type PluginChordSegment, type PluginChordTiming, type PluginConcurrentTrackInfo, type PluginCuePoints, type PluginDownloadOptions, PluginError, type PluginErrorCode, type PluginFileDialogOptions, type PluginFxCategoryDetailState, type PluginGenerationContext, type PluginHost, type PluginHttpRequestOptions, type PluginHttpResponse, type PluginManifest, type PluginMidiNote, type PluginPresetData, type PluginPresetInfo, type PluginRegistration, type PluginSampleFilter, type PluginSampleImportResult, type PluginSampleInfo, type PluginSampleTrackInfo, type PluginSceneContext, type PluginSceneInfo, type PluginSettingsSchema, type PluginSettingsStore, type PluginSkill, type PluginSkillInputSchema, type PluginStatus, type PluginStemSplitResult, type PluginStemTrackInfo, type PluginSynthInfo, type PluginTrackFxDetailState, type PluginTrackHandle, type PluginTrackInfo, type PluginTrackLevel, type PluginTrackRuntimeState, type PluginTransportState, type PluginTrimWindow, type PluginUIProps, type PostProcessOptions, RESIZE_HANDLE_PX, ROW_HEIGHT, type ReadMidiClip, type ReadMidiResult, type RecordingChunkFinalizedEvent, type RecordingTargetInfo, type SDKTrackRowProps, SLIDER_UNITY, SamplePackCTACard, type SamplePackCTACardProps, type SamplePackCTACardStatus, type SamplePackCardInfo, type SavePluginPresetOptions, type SceneChangeListener, type SceneFamilyTrack, type ScoredCandidate, ScrollingWaveform, type ScrollingWaveformProps, type SettingDefinition, type ShufflePresetResult, SorceryProgressBar, type SoundHistoryEntry, type StemType, type SynthesizeCuePointsOptions, TEXTURAL_ROLES, TRANSITION_DESIGNER_DRAFT_KEY, TrackDrawer, type TrackDrawerProps, type TrackFxDetailState, type TrackFxState, type TrackLevelsHandle, TrackMeterStrip, type TrackMeterStripProps, type TrackMeterView, TrackRow, type TrackRowDragProps, type TrackSoundHistory, type TrackSoundSnapshot, type TrackStateChangeListener, TransitionDesigner, type TransitionDesignerDraft, type TransitionDesignerProps, type TransitionRowType, type TransportEvent, type TransportEventListener, type UnsubscribeFn, type UseSoundHistoryOptions, type UseSoundHistoryResult, type UseTrackReorderOptions, type UseTrackReorderResult, type VolumeAutomationPoint, VolumeSlider, type WaveformPeaks, WaveformView, type WaveformViewProps, analyzeWavPeak, asAudioEffect, asCrossfadeMeta, asFadeMeta, asTransitionDesignerDraft, buildCrossfadeInpaintPrompt, buildCrossfadeVolumeCurves, buildFadeVolumeCurve, buildRowSlots, calculateTimeBasedTarget, cellToPx, centerScrollTop, computePeaks, dbIdsFromKeys, dbToSlider, defaultFadeGesture, drawWaveform, formatConcurrentTracks, hashString, moveItem, normalizeSlots, padPair, padSlots, parseCrossfadePairs, parseFades, pickTopKWeighted, pitchToName, pxToCell, reconcileSlots, resizeNoteDuration, rowKey, rowType, scorePromptMatch, sliderToDb, slotsEqual, soundIdentity, synthesizeCuePoints, tokenizePrompt, transposeNotes, useAnySolo, useSceneState, useSoundHistory, useTrackLevel, useTrackLevels, useTrackMeter, useTrackReorder, useTransportPlaying };