@signalsandsorcery/plugin-sdk 2.35.5 → 2.35.7

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
@@ -554,8 +554,12 @@ interface PluginHost {
554
554
  * @since SDK 1.4.0
555
555
  */
556
556
  readTextFile(absolutePath: string): Promise<string | null>;
557
- /** Get the FULL generation context for the active scene. */
558
- getGenerationContext(excludeTrackId?: string): Promise<PluginGenerationContext>;
557
+ /**
558
+ * Get the FULL generation context for the active scene. Pass
559
+ * `opts.pinTrackDbIds` to pin reference tracks past the note budget
560
+ * (see `PluginGenerationContextOptions`). @since SDK 2.42.0 (opts)
561
+ */
562
+ getGenerationContext(excludeTrackId?: string, opts?: PluginGenerationContextOptions): Promise<PluginGenerationContext>;
559
563
  /** Get lightweight musical context (no concurrent track MIDI data). */
560
564
  getMusicalContext(): Promise<MusicalContext>;
561
565
  /** Get the active scene ID. Null if no scene is active. */
@@ -630,6 +634,16 @@ interface PluginHost {
630
634
  * @since SDK 2.22.0
631
635
  */
632
636
  listSceneFamilyTracks?(sceneDbId: string): Promise<SceneFamilyTrack[]>;
637
+ /**
638
+ * Enumerate ALL tracks in the ACTIVE scene — unfiltered by plugin family or
639
+ * ownership (unlike `listSceneFamilyTracks`). Read-only; names are
640
+ * display-only per the Track Identity rule (use `dbId` for any lookup).
641
+ * Powers reference-track pickers ("write in counterpoint against these") —
642
+ * the returned `dbId`s feed `PluginGenerationContextOptions.pinTrackDbIds`.
643
+ * Returns [] when no project/scene is bound. Optional — callers MUST
644
+ * null-check (see `listImportableTracks`). @since SDK 2.42.0
645
+ */
646
+ listSceneTracks?(): Promise<SceneTrackSummary[]>;
633
647
  /**
634
648
  * Read a specific scene's musical key (tonic + mode) by db id. Labels the
635
649
  * SOURCE keys of a crossfade's origin/target patterns — the active-scene
@@ -1422,6 +1436,24 @@ interface ImportCandidateScene {
1422
1436
  */
1423
1437
  sameScene?: boolean;
1424
1438
  }
1439
+ /**
1440
+ * One track in the ACTIVE scene, returned by `host.listSceneTracks` —
1441
+ * unfiltered by family/ownership. `name` is display-only (Track Identity
1442
+ * rule); `dbId` is the stable selector for `pinTrackDbIds`.
1443
+ * @since SDK 2.42.0
1444
+ */
1445
+ interface SceneTrackSummary {
1446
+ /** Stable DB row id (`tracks.id`). */
1447
+ dbId: string;
1448
+ /** Display name — never use as an identifier. */
1449
+ name: string;
1450
+ /** Canonical role (`InstrumentType`) when stamped. */
1451
+ role?: string;
1452
+ /** User-typed prompt that produced the track, when stored. */
1453
+ prompt?: string;
1454
+ /** True when the track has saved MIDI (i.e. it can serve as a reference). */
1455
+ hasMidi: boolean;
1456
+ }
1425
1457
  /**
1426
1458
  * A source track's current sound, as returned by `host.getTrackSound`. The
1427
1459
  * discriminant matches the panel that reads it: drums → 'sample', instruments →
@@ -1733,6 +1765,35 @@ interface PluginConcurrentTrackInfo {
1733
1765
  truncated?: boolean;
1734
1766
  /** The track's full note count before per-track truncation. */
1735
1767
  originalNoteCount?: number;
1768
+ /**
1769
+ * Track display name — CONTEXT/DISPLAY ONLY (prompts, pickers). Never an
1770
+ * identifier: names are non-unique and mutable; use `trackId`/`dbId` for
1771
+ * any lookup. @since SDK 2.42.0
1772
+ */
1773
+ name?: string;
1774
+ /** Stable DB row id (`tracks.id`) — correlates with `pinTrackDbIds` and
1775
+ * `listSceneTracks()` entries. @since SDK 2.42.0 */
1776
+ dbId?: string;
1777
+ /**
1778
+ * True when this track was pinned via
1779
+ * `PluginGenerationContextOptions.pinTrackDbIds` — i.e. it is REFERENCE
1780
+ * material the caller explicitly asked to write against, exempt from the
1781
+ * note budget. Formatters render pinned tracks in a distinct REFERENCE
1782
+ * block. @since SDK 2.42.0
1783
+ */
1784
+ pinned?: boolean;
1785
+ }
1786
+ /**
1787
+ * Options for `getGenerationContext`. @since SDK 2.42.0
1788
+ */
1789
+ interface PluginGenerationContextOptions {
1790
+ /**
1791
+ * DB row ids (`tracks.id`) of reference tracks that must ALWAYS be included
1792
+ * whole — exempt from the cross-track note budget (ambient tracks fill the
1793
+ * remaining budget). Powers "write in counterpoint against THESE tracks".
1794
+ * Unknown ids and tracks without saved MIDI are ignored.
1795
+ */
1796
+ pinTrackDbIds?: readonly string[];
1736
1797
  }
1737
1798
  interface PluginChordSegment {
1738
1799
  chord: string;
@@ -4861,6 +4922,13 @@ interface PanelTransitionGroupAdapter {
4861
4922
  /** Group-fade row header label, e.g. `Bassline (3 voices)`. Default `Group (N tracks)`. */
4862
4923
  groupRowLabel?(memberCount: number): string;
4863
4924
  }
4925
+ /** What `onTrackCreated` gets to work with (Add Track is scene-gated, so the scene is non-null). */
4926
+ interface TrackCreatedContext {
4927
+ /** Scene the track was created in. */
4928
+ activeSceneId: string;
4929
+ /** The ONE scene-data key builder (always dbId-based). */
4930
+ trackDataKey: (dbId: string, suffix: string) => string;
4931
+ }
4864
4932
  interface GeneratorPanelAdapter<M = unknown> {
4865
4933
  identity: PanelIdentity;
4866
4934
  features: PanelFeatureFlags;
@@ -4871,6 +4939,18 @@ interface GeneratorPanelAdapter<M = unknown> {
4871
4939
  * Synth: `host.shufflePreset(handle.id)` non-fatal.
4872
4940
  */
4873
4941
  applyPortedTrackSound(handle: PluginTrackHandle, role?: string): Promise<void>;
4942
+ /**
4943
+ * Optional hook run right after a track is born (Add Track / Import Track).
4944
+ * Lets a family stamp per-track scene-data on the newborn — e.g. the arp
4945
+ * panel anchors every new track as a voice-group of ONE so the group
4946
+ * header's intent controls (voice count / rate / split) exist BEFORE the
4947
+ * first generation instead of appearing only after it (which wasted a
4948
+ * throwaway generation on defaults). The core reloads tracks after the hook
4949
+ * so stamped group metas resolve immediately. Failures are non-fatal — the
4950
+ * track lands as a plain row.
4951
+ * @since SDK 2.43.0
4952
+ */
4953
+ onTrackCreated?(handle: PluginTrackHandle, ctx: TrackCreatedContext): Promise<void>;
4874
4954
  /** System prompt for the family's LLM calls (incl. core-owned crossfade/fade generation). */
4875
4955
  buildSystemPrompt(validRoles: readonly string[]): string;
4876
4956
  /** Parse the family's LLM note responses (crossfade/fade flows). */
@@ -5116,6 +5196,252 @@ interface SurgeSoundAdapterOverrides {
5116
5196
  }
5117
5197
  declare function createSurgeSoundAdapter(host: PluginHost, overrides?: SurgeSoundAdapterOverrides): PanelSoundAdapter;
5118
5198
 
5199
+ /**
5200
+ * ensemble-core: voice specifications — the register + complexity hierarchy
5201
+ * as DATA. The first live per-voice register map in the platform (the only
5202
+ * prior per-role [low,high] table, MusicTheory.getSuggestedRegister, was
5203
+ * dead code).
5204
+ *
5205
+ * The shape encodes the product intent: the TOP voice is the highest-pitched
5206
+ * and most complex line; complexity decreases with register; the bottom
5207
+ * voice is a sparse anchor (root pitch classes only when `rootOnly`).
5208
+ *
5209
+ * All thresholds are exported constants in the bass-plugin tradition —
5210
+ * tune by ear, not by refactor. Roles are plain strings validated by the
5211
+ * host at stamp time (`host.getValidRoles()`); the SDK deliberately ships
5212
+ * no role list.
5213
+ *
5214
+ * @since SDK 2.42.0
5215
+ */
5216
+ interface EnsembleVoiceSpec {
5217
+ /** 0 = top voice; increases downward. */
5218
+ voiceIndex: number;
5219
+ /** Human label for the track row + prompt ("high florid line"). */
5220
+ label: string;
5221
+ /** InstrumentType to stamp on the voice's track (drives preset category). */
5222
+ role: string;
5223
+ /** Playable window (MIDI note numbers, inclusive). Enforced by octave-fold. */
5224
+ registerLow: number;
5225
+ registerHigh: number;
5226
+ /** Density budget — hard cap, enforced by weakest-note thinning. */
5227
+ maxNotesPerBar: number;
5228
+ /** Prompt text: rhythmic vocabulary for this voice. */
5229
+ rhythmPalette: string;
5230
+ /** Prompt text: harmonic discipline for this voice. */
5231
+ harmonicDiscipline: string;
5232
+ /** When true the voice plays ONLY each bar's chord-root pitch class. */
5233
+ rootOnly?: boolean;
5234
+ /**
5235
+ * Equal-onset survivor during the per-voice monophony sweep: top voices
5236
+ * keep the highest pitch, bottom voices the lowest (mirrors how ears
5237
+ * track outer voices).
5238
+ */
5239
+ monoPreference: 'high' | 'low';
5240
+ }
5241
+ /** Supported ensemble sizes. */
5242
+ declare const ENSEMBLE_MIN_VOICES = 2;
5243
+ declare const ENSEMBLE_MAX_VOICES = 6;
5244
+ /**
5245
+ * Default voice specs for an N-voice ensemble, top voice first. Clamps N to
5246
+ * the supported range. Returned objects are fresh copies — callers may
5247
+ * override fields (e.g. style packs narrowing registers) without touching
5248
+ * the tables.
5249
+ */
5250
+ declare function defaultVoiceSpecs(voiceCount: number): EnsembleVoiceSpec[];
5251
+
5252
+ /**
5253
+ * ensemble-core: HARD per-voice enforcement — the mechanical layer between
5254
+ * the LLM's jointly-composed voices and the clips that get written. In the
5255
+ * platform's bass-plugin tradition, everything here is deterministic
5256
+ * analysis/repair of written notes, never LLM intention:
5257
+ *
5258
+ * clip clamp → octave-fold into the voice's register window →
5259
+ * root-only pinning (anchor voices) → in-scale snap (optional) →
5260
+ * per-voice monophony sweep → per-bar density thinning
5261
+ *
5262
+ * Each voice stays a single line (monophonic); OVERLAP BETWEEN voices is the
5263
+ * point of counterpoint and is never touched here. Soft, style-dependent
5264
+ * rules (parallels, crossings, onset independence) live in
5265
+ * analyze-ensemble.ts — they are reported, not repaired.
5266
+ *
5267
+ * Pure functions; inputs are never mutated. @since SDK 2.42.0
5268
+ */
5269
+
5270
+ /** Structural match for PluginMidiNote — keeps this module dependency-free. */
5271
+ interface EnsembleNote {
5272
+ pitch: number;
5273
+ startBeat: number;
5274
+ durationBeats: number;
5275
+ velocity: number;
5276
+ channel?: number;
5277
+ }
5278
+ interface EnforceVoiceOptions {
5279
+ /** Clip length in bars (4/4 assumed, matching the platform grid). */
5280
+ bars: number;
5281
+ /**
5282
+ * Chord-root pitch class (0-11) for a given bar, or null when unknown.
5283
+ * Required for `rootOnly` voices to mean anything; when absent, rootOnly
5284
+ * degrades to plain register enforcement.
5285
+ */
5286
+ chordRootPcAtBar?: (bar: number) => number | null;
5287
+ /**
5288
+ * Scale pitch classes (0-11) for the scene key. When provided, non-scale
5289
+ * pitches snap to the nearest scale pitch class (chord tones supplied via
5290
+ * `chordPcsAtBar` are exempt — a sounding 7th over its chord is not an
5291
+ * error even outside the scale).
5292
+ */
5293
+ scalePcs?: ReadonlySet<number>;
5294
+ /** Chord-tone pitch classes for a bar — exemptions for the scale snap. */
5295
+ chordPcsAtBar?: (bar: number) => ReadonlySet<number> | null;
5296
+ }
5297
+ interface EnforceVoiceResult {
5298
+ notes: EnsembleNote[];
5299
+ /** Human/LLM-readable descriptions of every repair performed. */
5300
+ repairs: string[];
5301
+ }
5302
+ declare const MIN_NOTE_DURATION_BEATS = 0.0625;
5303
+ /** Octave-fold a pitch into [low, high], preserving pitch class when possible. */
5304
+ declare function foldPitchToRegister(pitch: number, low: number, high: number): number;
5305
+ /** Nearest pitch within [low, high] having pitch class `pc` (ties go low). */
5306
+ declare function nearestPitchWithPc(reference: number, pc: number, low: number, high: number): number;
5307
+ /**
5308
+ * Enforce one voice's hard contract. Order matters: register first (so
5309
+ * root-only/scale snaps operate in-window), monophony before density (the
5310
+ * sweep can merge/trim what thinning would otherwise count).
5311
+ */
5312
+ declare function enforceVoice(rawNotes: readonly EnsembleNote[], spec: EnsembleVoiceSpec, opts: EnforceVoiceOptions): EnforceVoiceResult;
5313
+
5314
+ /**
5315
+ * ensemble-core: SOFT cross-voice analysis — the "do the voices actually
5316
+ * talk to each other?" metrics. Nothing here repairs notes; violations are
5317
+ * REPORTED so the caller can (a) feed them back to the LLM for one guided
5318
+ * retry and (b) surface honest telemetry. Which findings count as
5319
+ * violations is style-dependent (see styles.ts) — parallels are a defect in
5320
+ * counterpoint and a feature in minimal interlock.
5321
+ *
5322
+ * Pure functions; deterministic; fixture-testable without an LLM.
5323
+ * @since SDK 2.42.0
5324
+ */
5325
+
5326
+ type MotionKind = 'contrary' | 'oblique' | 'similar' | 'parallel';
5327
+ interface AdjacentPairAnalysis {
5328
+ /** Upper voice index of the pair (pairs with upperVoice + 1). */
5329
+ upperVoice: number;
5330
+ /** Fraction of the upper voice's onsets NOT shared with the lower voice. */
5331
+ onsetIndependence: number;
5332
+ /** Distribution of motion kinds across consecutive shared onsets. */
5333
+ motion: Record<MotionKind, number>;
5334
+ /** Consecutive perfect 5ths/octaves moving in similar motion. */
5335
+ parallelPerfects: Array<{
5336
+ atBeat: number;
5337
+ intervalPc: 0 | 7;
5338
+ }>;
5339
+ /** Beats where the nominally-upper voice sounds BELOW the lower voice. */
5340
+ crossings: number[];
5341
+ }
5342
+ interface EnsembleAnalysis {
5343
+ pairs: AdjacentPairAnalysis[];
5344
+ /** Fraction of ALL onsets (across voices) that land on a shared beat. */
5345
+ homorhythmScore: number;
5346
+ }
5347
+ /**
5348
+ * Analyze adjacent voice pairs (voice i against voice i+1, top-down order).
5349
+ * Voices with no notes yield neutral entries rather than poisoning the run.
5350
+ */
5351
+ declare function analyzeEnsemble(voices: ReadonlyArray<readonly EnsembleNote[]>): EnsembleAnalysis;
5352
+ /**
5353
+ * Render style-filtered violations as short instructions an LLM can act on
5354
+ * in a retry ("Between voice 1 and voice 2, avoid parallel octaves at beat
5355
+ * 6"). Empty array = the ensemble passes this style's soft rules.
5356
+ */
5357
+ declare function describeViolations(analysis: EnsembleAnalysis, rules: {
5358
+ forbidParallelPerfects: boolean;
5359
+ forbidVoiceCrossing: boolean;
5360
+ minOnsetIndependence: number;
5361
+ }): string[];
5362
+
5363
+ /**
5364
+ * ensemble-core: style packs. A style = which SOFT rules are violations +
5365
+ * a prompt paragraph steering the joint composition. Hard rules (register,
5366
+ * per-voice monophony, density caps, root-only anchors) apply to every
5367
+ * style — see enforce-voice.ts. Explicitly NOT just baroque: parallels are
5368
+ * a defect in `counterpoint` and the whole point of `interlock`.
5369
+ *
5370
+ * @since SDK 2.42.0
5371
+ */
5372
+ type EnsembleStyle = 'counterpoint' | 'chorale' | 'interlock';
5373
+ declare const ENSEMBLE_STYLES: readonly EnsembleStyle[];
5374
+ interface EnsembleStyleRules {
5375
+ /** Consecutive perfect 5ths/octaves between adjacent voices are violations. */
5376
+ forbidParallelPerfects: boolean;
5377
+ /** A nominally-upper voice sounding below its neighbor is a violation. */
5378
+ forbidVoiceCrossing: boolean;
5379
+ /**
5380
+ * Minimum fraction of an upper voice's onsets that must NOT coincide with
5381
+ * its lower neighbor (0 = homorhythm fine, 1 = fully independent).
5382
+ */
5383
+ minOnsetIndependence: number;
5384
+ /** Prompt paragraph injected into the system prompt for this style. */
5385
+ promptParagraph: string;
5386
+ }
5387
+ declare const STYLE_RULES: Record<EnsembleStyle, EnsembleStyleRules>;
5388
+
5389
+ /**
5390
+ * ensemble-core: the `submit_ensemble` function-calling contract — how the
5391
+ * ONE joint LLM call returns all voices as structured JSON. Built for
5392
+ * `host.generateWithLLMTools` with `functionCallingConfig.mode: 'ANY'` +
5393
+ * `allowedFunctionNames: [SUBMIT_ENSEMBLE_TOOL_NAME]`, which forces a
5394
+ * schema-constrained call instead of free text (the `generateWithLLM`
5395
+ * `responseFormat` field is a dead letter — this is the reliable path).
5396
+ *
5397
+ * Parsing is defensive: the model's args pass through structural checks and
5398
+ * per-note validation; a voice the model omits comes back as an empty note
5399
+ * list so the caller can decide whether that is acceptable for the style.
5400
+ *
5401
+ * @since SDK 2.42.0
5402
+ */
5403
+
5404
+ declare const SUBMIT_ENSEMBLE_TOOL_NAME = "submit_ensemble";
5405
+ /**
5406
+ * JSON-Schema `parameters` for the submit_ensemble tool. Gemini function
5407
+ * calling accepts standard JSON Schema here.
5408
+ */
5409
+ declare function buildSubmitEnsembleParameters(voiceCount: number): Record<string, unknown>;
5410
+ interface ParsedEnsemble {
5411
+ /** Index-aligned: entry v = notes for voiceIndex v (possibly empty). */
5412
+ voiceNotes: EnsembleNote[][];
5413
+ /** Structural oddities worth logging (wrong count, dropped notes…). */
5414
+ warnings: string[];
5415
+ }
5416
+ /**
5417
+ * Validate + normalize the functionCall args into per-voice note lists.
5418
+ * Returns null only when nothing usable came back.
5419
+ */
5420
+ declare function parseEnsembleArgs(args: unknown, voiceCount: number): ParsedEnsemble | null;
5421
+
5422
+ /**
5423
+ * ensemble-core: the joint-composition system prompt. ONE call composes ALL
5424
+ * voices together — the coordination (imitation, staggered entrances,
5425
+ * contrary motion) has to be planned across voices, which is exactly what
5426
+ * per-track generation can never do. Mirrors the bass plugin's prompt
5427
+ * discipline: numbered load-bearing rules, register/density contracts
5428
+ * stated per voice, sound selection nowhere in sight (that stays
5429
+ * mechanical, host-side).
5430
+ *
5431
+ * The musical context (key/BPM/chords/contract) arrives via the host's
5432
+ * generateWithLLM(Tools) auto-prefix — this prompt states the ENSEMBLE
5433
+ * rules and the per-voice contracts only.
5434
+ *
5435
+ * @since SDK 2.42.0
5436
+ */
5437
+
5438
+ declare function buildEnsembleSystemPrompt(specs: readonly EnsembleVoiceSpec[], style: EnsembleStyle): string;
5439
+ /**
5440
+ * Build the retry user-message suffix from soft-rule violations — one
5441
+ * guided second attempt, quota-conscious (callers should not loop).
5442
+ */
5443
+ declare function buildViolationRetrySuffix(violations: readonly string[]): string;
5444
+
5119
5445
  /**
5120
5446
  * useSceneState — Scene-keyed state hook for plugin developers.
5121
5447
  *
@@ -5169,7 +5495,7 @@ declare function useAnySolo(host: Pick<PluginHost, 'isAnySoloActive' | 'onTrackS
5169
5495
  * Registry checks semver.gte(PLUGIN_SDK_VERSION, manifest.minHostVersion)
5170
5496
  * during activation and marks incompatible plugins accordingly.
5171
5497
  */
5172
- declare const PLUGIN_SDK_VERSION = "2.40.0";
5498
+ declare const PLUGIN_SDK_VERSION = "2.43.0";
5173
5499
 
5174
5500
  /**
5175
5501
  * FX Preset Definitions
@@ -5234,8 +5560,19 @@ declare function dbToSlider(db: number): number;
5234
5560
  * grouped by chord) so the model sees velocity / start-beat /
5235
5561
  * duration / pitch verbatim and can reason about feel + harmony.
5236
5562
  *
5563
+ * Tracks pinned via `PluginGenerationContextOptions.pinTrackDbIds` render
5564
+ * FIRST under a REFERENCE TRACKS header with an explicit counterpoint
5565
+ * instruction — they are the parts the caller asked to write against,
5566
+ * not merely ambient context.
5567
+ *
5237
5568
  * Returns the empty string when there are no concurrent tracks — call
5238
5569
  * sites can `if (block) push(block)` rather than baking in a placeholder.
5570
+ *
5571
+ * NOTE: maintained as byte-identical copies in
5572
+ * `sas-plugin-sdk/src/utils/format-concurrent-tracks.ts` (panels) and
5573
+ * `sas-app/src/shared/utils/format-concurrent-tracks.ts` (main process,
5574
+ * which must not import SDK runtime). The parity test
5575
+ * `format-concurrent-tracks-parity.test.ts` pins the two together.
5239
5576
  */
5240
5577
 
5241
5578
  declare function formatConcurrentTracks(ctx: PluginGenerationContext): string;
@@ -5317,4 +5654,4 @@ interface PickTopKOptions {
5317
5654
  */
5318
5655
  declare function pickTopKWeighted<T>(scored: ReadonlyArray<ScoredCandidate<T>>, options?: PickTopKOptions): T | null;
5319
5656
 
5320
- export { AUDIO_EFFECTS, AUDIO_EFFECT_LABEL, type AudioEffect, type AudioInputDevice, type BulkAddPlaceholderTrack, type ComposeProgressEvent, type ComposeProgressListener, type ComposeSceneOptions, type ComposeSceneResult, ConfirmDialog, type ConfirmDialogProps, type CoreTrackHandlers, 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 GenerationServices, type GeneratorPanelAdapter, type GeneratorPanelCore, GeneratorPanelShell, type GeneratorPanelShellProps, type GeneratorPanelSlots, type GeneratorPlugin, type GeneratorTrackState, type GeneratorType, type GroupFadeEntry, type GroupFadeEntryOf, type GroupFadeMemberLayer, GroupFadeTrackRow, type GroupFadeTrackRowProps, type GroupParseSpec, type GroupRenderContext, 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 LLMNoteResponse, 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 PanelBusFxEntry, type PanelBusLevels, type PanelBusState, type PanelFeatureFlags, type PanelGenerationStrategy, type PanelGroupExtension, type PanelIdentity, PanelMasterStrip, type PanelMasterStripProps, type PanelShuffleAdapter, type PanelSoundAdapter, type PanelTransitionGroupAdapter, 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 ResolveGroupsOptions, type ResolvedCrossfadePair, type ResolvedFade, type ResolvedGroupFade, type ResolvedGroupsResult, type ResolvedTrackGroup, 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 SurgeSoundAdapterOverrides, type SynthesizeCuePointsOptions, TEXTURAL_ROLES, TRANSITION_DESIGNER_DRAFT_KEY, TrackDrawer, type TrackDrawerProps, type TrackExternalFxEntry, TrackExternalFxSection, type TrackExternalFxSectionProps, type TrackFxDetailState, type TrackFxState, type TrackGroupMember, type TrackGroupMeta, type TrackLevelsHandle, TrackMeterStrip, type TrackMeterStripProps, type TrackMeterView, TrackRow, type TrackRowDragProps, type TrackSoundHistory, type TrackSoundSnapshot, type TrackStateChangeListener, TransitionDesigner, type TransitionDesignerDraft, type TransitionDesignerProps, type TransitionOps, type TransitionRowType, type TransportEvent, type TransportEventListener, type UnsubscribeFn, type UseGeneratorPanelCoreOptions, type UsePanelBusResult, type UseSoundHistoryOptions, type UseSoundHistoryResult, type UseTrackExternalFxResult, type UseTrackReorderOptions, type UseTrackReorderResult, type UseTransitionOpsInputs, type VerbatimFadeMember, type VolumeAutomationPoint, VolumeSlider, type WaveformPeaks, WaveformView, type WaveformViewProps, analyzeWavPeak, asAudioEffect, asCrossfadeMeta, asFadeMeta, asTransitionDesignerDraft, buildCrossfadeInpaintPrompt, buildCrossfadeVolumeCurves, buildFadeVolumeCurve, buildRowSlots, calculateTimeBasedTarget, cellToPx, centerScrollTop, computePeaks, createSurgeSoundAdapter, dbIdsFromKeys, dbToSlider, defaultFadeGesture, drawWaveform, formatConcurrentTracks, hashString, moveItem, newTrackState, normalizeSlots, padPair, padSlots, parseCrossfadePairs, parseFades, parseLLMNoteResponse, parseTrackGroups, pickTopKWeighted, pitchToName, pluginFxToToggleFx, pxToCell, reconcileSlots, resizeNoteDuration, resolveTrackGroups, rowKey, rowType, scorePromptMatch, sliderToDb, slotsEqual, soundIdentity, splitFadeEntries, synthesizeCuePoints, tokenizePrompt, trackDataKey, transposeNotes, useAnySolo, useGeneratorPanelCore, usePanelBus, useSceneState, useSoundHistory, useTrackExternalFx, useTrackLevel, useTrackLevels, useTrackMeter, useTrackReorder, useTransitionOps, useTransportPlaying };
5657
+ export { AUDIO_EFFECTS, AUDIO_EFFECT_LABEL, type AdjacentPairAnalysis, type AudioEffect, type AudioInputDevice, type BulkAddPlaceholderTrack, type ComposeProgressEvent, type ComposeProgressListener, type ComposeSceneOptions, type ComposeSceneResult, ConfirmDialog, type ConfirmDialogProps, type CoreTrackHandlers, 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, ENSEMBLE_MAX_VOICES, ENSEMBLE_MIN_VOICES, ENSEMBLE_STYLES, EQUAL_POWER_GAIN, type EnforceVoiceOptions, type EnforceVoiceResult, type EnsembleAnalysis, type EnsembleNote, type EnsembleStyle, type EnsembleStyleRules, type EnsembleVoiceSpec, 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 GenerationServices, type GeneratorPanelAdapter, type GeneratorPanelCore, GeneratorPanelShell, type GeneratorPanelShellProps, type GeneratorPanelSlots, type GeneratorPlugin, type GeneratorTrackState, type GeneratorType, type GroupFadeEntry, type GroupFadeEntryOf, type GroupFadeMemberLayer, GroupFadeTrackRow, type GroupFadeTrackRowProps, type GroupParseSpec, type GroupRenderContext, 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 LLMNoteResponse, type LLMPart, type LLMSystemInstruction, type LLMTool, type LLMToolUseRequest, type LLMToolUseResponse, type LLMUsageMetadata, LevelMeter, type LevelMeterProps, type ListAudioFilesOptions, type ListImportableTracksOptions, MIN_NOTE_DURATION_BEATS, type MidiClipData, type MidiWriteResult, type MixInterpolation, Modal, type ModalProps, type MotionKind, type MusicalContext, OffsetScrubber, type OffsetScrubberProps, PLUGIN_SDK_VERSION, PX_PER_BEAT, PanSlider, type PanelBusFxEntry, type PanelBusLevels, type PanelBusState, type PanelFeatureFlags, type PanelGenerationStrategy, type PanelGroupExtension, type PanelIdentity, PanelMasterStrip, type PanelMasterStripProps, type PanelShuffleAdapter, type PanelSoundAdapter, type PanelTransitionGroupAdapter, type ParsedEnsemble, 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 PluginGenerationContextOptions, 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 ResolveGroupsOptions, type ResolvedCrossfadePair, type ResolvedFade, type ResolvedGroupFade, type ResolvedGroupsResult, type ResolvedTrackGroup, type SDKTrackRowProps, SLIDER_UNITY, STYLE_RULES, SUBMIT_ENSEMBLE_TOOL_NAME, SamplePackCTACard, type SamplePackCTACardProps, type SamplePackCTACardStatus, type SamplePackCardInfo, type SavePluginPresetOptions, type SceneChangeListener, type SceneFamilyTrack, type SceneTrackSummary, type ScoredCandidate, ScrollingWaveform, type ScrollingWaveformProps, type SettingDefinition, type ShufflePresetResult, SorceryProgressBar, type SoundHistoryEntry, type StemType, type SurgeSoundAdapterOverrides, type SynthesizeCuePointsOptions, TEXTURAL_ROLES, TRANSITION_DESIGNER_DRAFT_KEY, TrackDrawer, type TrackDrawerProps, type TrackExternalFxEntry, TrackExternalFxSection, type TrackExternalFxSectionProps, type TrackFxDetailState, type TrackFxState, type TrackGroupMember, type TrackGroupMeta, type TrackLevelsHandle, TrackMeterStrip, type TrackMeterStripProps, type TrackMeterView, TrackRow, type TrackRowDragProps, type TrackSoundHistory, type TrackSoundSnapshot, type TrackStateChangeListener, TransitionDesigner, type TransitionDesignerDraft, type TransitionDesignerProps, type TransitionOps, type TransitionRowType, type TransportEvent, type TransportEventListener, type UnsubscribeFn, type UseGeneratorPanelCoreOptions, type UsePanelBusResult, type UseSoundHistoryOptions, type UseSoundHistoryResult, type UseTrackExternalFxResult, type UseTrackReorderOptions, type UseTrackReorderResult, type UseTransitionOpsInputs, type VerbatimFadeMember, type VolumeAutomationPoint, VolumeSlider, type WaveformPeaks, WaveformView, type WaveformViewProps, analyzeEnsemble, analyzeWavPeak, asAudioEffect, asCrossfadeMeta, asFadeMeta, asTransitionDesignerDraft, buildCrossfadeInpaintPrompt, buildCrossfadeVolumeCurves, buildEnsembleSystemPrompt, buildFadeVolumeCurve, buildRowSlots, buildSubmitEnsembleParameters, buildViolationRetrySuffix, calculateTimeBasedTarget, cellToPx, centerScrollTop, computePeaks, createSurgeSoundAdapter, dbIdsFromKeys, dbToSlider, defaultFadeGesture, defaultVoiceSpecs, describeViolations, drawWaveform, enforceVoice, foldPitchToRegister, formatConcurrentTracks, hashString, moveItem, nearestPitchWithPc, newTrackState, normalizeSlots, padPair, padSlots, parseCrossfadePairs, parseEnsembleArgs, parseFades, parseLLMNoteResponse, parseTrackGroups, pickTopKWeighted, pitchToName, pluginFxToToggleFx, pxToCell, reconcileSlots, resizeNoteDuration, resolveTrackGroups, rowKey, rowType, scorePromptMatch, sliderToDb, slotsEqual, soundIdentity, splitFadeEntries, synthesizeCuePoints, tokenizePrompt, trackDataKey, transposeNotes, useAnySolo, useGeneratorPanelCore, usePanelBus, useSceneState, useSoundHistory, useTrackExternalFx, useTrackLevel, useTrackLevels, useTrackMeter, useTrackReorder, useTransitionOps, useTransportPlaying };