tongflow 0.1.0 → 1.0.0

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.cts CHANGED
@@ -1059,6 +1059,26 @@ declare const _slot_parse_document_outputs: {
1059
1059
  readonly text: {
1060
1060
  readonly type: "string";
1061
1061
  };
1062
+ readonly images: {
1063
+ readonly type: "array";
1064
+ readonly items: {
1065
+ readonly type: "object";
1066
+ readonly required: readonly ["file_key"];
1067
+ readonly properties: {
1068
+ readonly file_key: {
1069
+ readonly type: "string";
1070
+ readonly minLength: 1;
1071
+ };
1072
+ readonly mime: {
1073
+ readonly type: "string";
1074
+ };
1075
+ readonly filename: {
1076
+ readonly type: "string";
1077
+ };
1078
+ };
1079
+ readonly additionalProperties: false;
1080
+ };
1081
+ };
1062
1082
  };
1063
1083
  readonly additionalProperties: false;
1064
1084
  };
@@ -1350,6 +1370,72 @@ declare const _slot_gen_music_outputs: {
1350
1370
  readonly additionalProperties: false;
1351
1371
  };
1352
1372
  type GenMusicOutput = FromSchema<typeof _slot_gen_music_outputs>;
1373
+ declare const _slot_text_gen_audio_inputs: {
1374
+ readonly type: "object";
1375
+ readonly required: readonly ["text"];
1376
+ readonly properties: {
1377
+ readonly text: {
1378
+ readonly type: "string";
1379
+ readonly minLength: 1;
1380
+ };
1381
+ readonly ref_audios: {
1382
+ readonly type: "array";
1383
+ readonly items: {
1384
+ readonly type: "object";
1385
+ readonly required: readonly ["bytesBase64"];
1386
+ readonly properties: {
1387
+ readonly bytesBase64: {
1388
+ readonly type: "string";
1389
+ readonly minLength: 1;
1390
+ };
1391
+ readonly filename: {
1392
+ readonly type: "string";
1393
+ };
1394
+ readonly mime: {
1395
+ readonly type: "string";
1396
+ };
1397
+ };
1398
+ readonly additionalProperties: false;
1399
+ };
1400
+ };
1401
+ readonly seed: {
1402
+ readonly type: "integer";
1403
+ };
1404
+ };
1405
+ readonly additionalProperties: false;
1406
+ };
1407
+ type TextGenAudioInput = FromSchema<typeof _slot_text_gen_audio_inputs>;
1408
+ declare const _slot_text_gen_audio_outputs: {
1409
+ readonly type: "object";
1410
+ readonly required: readonly ["success"];
1411
+ readonly properties: {
1412
+ readonly success: {
1413
+ readonly type: "boolean";
1414
+ };
1415
+ readonly error: {
1416
+ readonly type: "string";
1417
+ };
1418
+ readonly audio: {
1419
+ readonly type: "object";
1420
+ readonly required: readonly ["file_key"];
1421
+ readonly properties: {
1422
+ readonly file_key: {
1423
+ readonly type: "string";
1424
+ readonly minLength: 1;
1425
+ };
1426
+ readonly mime: {
1427
+ readonly type: "string";
1428
+ };
1429
+ readonly filename: {
1430
+ readonly type: "string";
1431
+ };
1432
+ };
1433
+ readonly additionalProperties: false;
1434
+ };
1435
+ };
1436
+ readonly additionalProperties: false;
1437
+ };
1438
+ type TextGenAudioOutput = FromSchema<typeof _slot_text_gen_audio_outputs>;
1353
1439
  declare const _slot_text_gen_speech_preset_inputs: {
1354
1440
  readonly type: "object";
1355
1441
  readonly required: readonly ["text"];
@@ -3586,9 +3672,9 @@ declare const _slot_denoise_audio_outputs: {
3586
3672
  type DenoiseAudioOutput = FromSchema<typeof _slot_denoise_audio_outputs>;
3587
3673
  declare const _slot_convert_voice_inputs: {
3588
3674
  readonly type: "object";
3589
- readonly required: readonly ["sourceKey", "targetKey"];
3675
+ readonly required: readonly ["audio", "ref_audio"];
3590
3676
  readonly properties: {
3591
- readonly sourceKey: {
3677
+ readonly audio: {
3592
3678
  readonly type: "object";
3593
3679
  readonly required: readonly ["bytesBase64"];
3594
3680
  readonly properties: {
@@ -3605,8 +3691,22 @@ declare const _slot_convert_voice_inputs: {
3605
3691
  };
3606
3692
  readonly additionalProperties: false;
3607
3693
  };
3608
- readonly targetKey: {
3609
- readonly type: "string";
3694
+ readonly ref_audio: {
3695
+ readonly type: "object";
3696
+ readonly required: readonly ["bytesBase64"];
3697
+ readonly properties: {
3698
+ readonly bytesBase64: {
3699
+ readonly type: "string";
3700
+ readonly minLength: 1;
3701
+ };
3702
+ readonly filename: {
3703
+ readonly type: "string";
3704
+ };
3705
+ readonly mime: {
3706
+ readonly type: "string";
3707
+ };
3708
+ };
3709
+ readonly additionalProperties: false;
3610
3710
  };
3611
3711
  };
3612
3712
  readonly additionalProperties: false;
@@ -4101,7 +4201,7 @@ declare const _slot_video_gen_model_outputs: {
4101
4201
  readonly additionalProperties: false;
4102
4202
  };
4103
4203
  type VideoGenModelOutput = FromSchema<typeof _slot_video_gen_model_outputs>;
4104
- type NodeSlot = "gen-text" | "split-text" | "combine-text" | "image-fusion" | "images-gen-video" | "refs-gen-video" | "image-gen-text" | "video-gen-text" | "transcribe" | "concat-videos" | "extract-audio" | "remove-video-audio" | "merge-video-audio" | "audio-video-lip-sync" | "get-first-frame" | "get-last-frame" | "parse-document" | "split-video" | "link" | "image-gen" | "gen-music" | "text-gen-speech-preset" | "image-gen-video" | "image-edit" | "image-upscale" | "video-upscale" | "video-edit" | "image-describe" | "video-describe" | "audio-describe" | "music-repaint" | "music-cover" | "music-extract" | "separate-sound" | "music-lego" | "music-complete" | "music-brief" | "audio-image-gen-video" | "speech-text-gen-video" | "video-image-gen-video-mix" | "video-image-gen-video-move" | "image-image-gen-video" | "text-gen-video" | "image-gen-model" | "speech-video-gen-video" | "text-gen-speech-clone" | "transcribe-timestamp" | "text-gen-speech-instruct" | "drop-video" | "arrange-group" | "separate_speaker" | "separate_audio_track" | "denoise_audio" | "convert_voice" | "remove_watermark" | "subtitle_remove" | "text-audio-gen-speech" | "image-pose" | "image-body-seg" | "image-normal" | "image-matting" | "video-gen-model";
4204
+ type NodeSlot = "gen-text" | "split-text" | "combine-text" | "image-fusion" | "images-gen-video" | "refs-gen-video" | "image-gen-text" | "video-gen-text" | "transcribe" | "concat-videos" | "extract-audio" | "remove-video-audio" | "merge-video-audio" | "audio-video-lip-sync" | "get-first-frame" | "get-last-frame" | "parse-document" | "split-video" | "link" | "image-gen" | "gen-music" | "text-gen-audio" | "text-gen-speech-preset" | "image-gen-video" | "image-edit" | "image-upscale" | "video-upscale" | "video-edit" | "image-describe" | "video-describe" | "audio-describe" | "music-repaint" | "music-cover" | "music-extract" | "separate-sound" | "music-lego" | "music-complete" | "music-brief" | "audio-image-gen-video" | "speech-text-gen-video" | "video-image-gen-video-mix" | "video-image-gen-video-move" | "image-image-gen-video" | "text-gen-video" | "image-gen-model" | "speech-video-gen-video" | "text-gen-speech-clone" | "transcribe-timestamp" | "text-gen-speech-instruct" | "drop-video" | "arrange-group" | "separate_speaker" | "separate_audio_track" | "denoise_audio" | "convert_voice" | "remove_watermark" | "subtitle_remove" | "text-audio-gen-speech" | "image-pose" | "image-body-seg" | "image-normal" | "image-matting" | "video-gen-model";
4105
4205
  type SlotInputsMap = {
4106
4206
  "gen-text": GenTextInput;
4107
4207
  "split-text": SplitTextInput;
@@ -4124,6 +4224,7 @@ type SlotInputsMap = {
4124
4224
  link: LinkInput;
4125
4225
  "image-gen": ImageGenInput;
4126
4226
  "gen-music": GenMusicInput;
4227
+ "text-gen-audio": TextGenAudioInput;
4127
4228
  "text-gen-speech-preset": TextGenSpeechPresetInput;
4128
4229
  "image-gen-video": ImageGenVideoInput;
4129
4230
  "image-edit": ImageEditInput;
@@ -4188,6 +4289,7 @@ type SlotOutputsMap = {
4188
4289
  link: LinkOutput;
4189
4290
  "image-gen": ImageGenOutput;
4190
4291
  "gen-music": GenMusicOutput;
4292
+ "text-gen-audio": TextGenAudioOutput;
4191
4293
  "text-gen-speech-preset": TextGenSpeechPresetOutput;
4192
4294
  "image-gen-video": ImageGenVideoOutput;
4193
4295
  "image-edit": ImageEditOutput;
@@ -4292,6 +4394,62 @@ declare function sourceHandleId(field: string): string;
4292
4394
  declare function parseTargetHandleId(handle: string | null | undefined): string | undefined;
4293
4395
  declare function parseSourceHandleId(handle: string | null | undefined): string | undefined;
4294
4396
  //#endregion
4397
+ //#region src/core/abi/node-actions.d.ts
4398
+ /** How many nodes of each modality the selection holds. */
4399
+ type SelectionCounts = Partial<Record<DataNodeType, number>>;
4400
+ /** Inclusive `[min, max]`; `max` may be `Infinity`. */
4401
+ type Range = readonly [number, number];
4402
+ interface NodeActionMeta {
4403
+ /** i18n key under `Workspace.smartIsland`. */
4404
+ label: string;
4405
+ /** Ascending sort order within a toolbar. */
4406
+ order: number;
4407
+ /** Product caps the ABI doesn't express, per modality. */
4408
+ limits?: Partial<Record<DataNodeType, Range>>;
4409
+ /** Cap on image + video + audio nodes combined. */
4410
+ totalMedia?: Range;
4411
+ /**
4412
+ * Modalities accepted in place of another one. A 3D model node feeds the
4413
+ * image handles of `image-gen-text` / `image-gen-video` — the canvas
4414
+ * renders a preview frame for it.
4415
+ */
4416
+ aliases?: Partial<Record<DataNodeType, DataNodeType>>;
4417
+ /**
4418
+ * Acts on the files *inside* one grouped node (a video node holding
4419
+ * several clips), not on a multi-node selection.
4420
+ */
4421
+ groupOnly?: boolean;
4422
+ /** Needs at least this many selected nodes. */
4423
+ minNodes?: number;
4424
+ }
4425
+ interface NodeActionCandidate {
4426
+ nodeType: string;
4427
+ feature: NodeSlot;
4428
+ label: string;
4429
+ order: number;
4430
+ }
4431
+ /**
4432
+ * Per-node-type presentation + caps. Every ABI node type must appear here (a
4433
+ * vitest guard fails otherwise) so a new slot can't quietly end up without an
4434
+ * entry point. Order groups by the modality a button hangs off: text 100s,
4435
+ * image 200s, video 300s, audio 400s, document/link/model 500s, combos 600s.
4436
+ */
4437
+ declare const NODE_ACTION_META: Readonly<Record<string, NodeActionMeta>>;
4438
+ interface SelectionOptions {
4439
+ /**
4440
+ * The one selected node holds several files (or several texts), so
4441
+ * actions that operate within a group — filter, arrange, concat — apply.
4442
+ */
4443
+ group?: boolean;
4444
+ }
4445
+ /**
4446
+ * Node types the given selection can be turned into, ordered for display.
4447
+ *
4448
+ * `counts` holds only modality nodes — the caller drops processing nodes and
4449
+ * `add*` nodes before calling, since neither carries an output to feed.
4450
+ */
4451
+ declare function nodeActionsForSelection(counts: SelectionCounts, options?: SelectionOptions): NodeActionCandidate[];
4452
+ //#endregion
4295
4453
  //#region src/core/abi/sources.d.ts
4296
4454
  interface HandleOverride {
4297
4455
  kind: "handle";
@@ -4555,9 +4713,15 @@ interface FlowCoreState {
4555
4713
  */
4556
4714
  expands: (nodeId: string | null, possibleNodes: PossibleNode[]) => string[];
4557
4715
  /** Create a node fed by every combo-selected node; returns the new id. */
4716
+ /**
4717
+ * Create a node from the combo selection and wire every selected node into
4718
+ * it. `sourceOrder` overrides the selection order used to assign handles
4719
+ * (sources are matched to target fields in ABI input order).
4720
+ */
4558
4721
  compose: (newNode: {
4559
4722
  type: string;
4560
4723
  data: unknown;
4724
+ sourceOrder?: string[];
4561
4725
  }) => string;
4562
4726
  /** Replace a node's `data`. `history: false` skips the undo snapshot. */
4563
4727
  updates: (nodeId: string, data: Record<string, unknown>, opts?: {
@@ -4653,6 +4817,9 @@ interface GraphPatchAddNode {
4653
4817
  /** Optional explicit plugin choice; omitted → resolved on mount. */
4654
4818
  pluginId?: string;
4655
4819
  pluginModel?: string;
4820
+ /** Optional advanced parameters for the chosen plugin (its
4821
+ * `TONGFLOW_SLOT_PARAMS` keys). */
4822
+ pluginParams?: Record<string, unknown>;
4656
4823
  /**
4657
4824
  * 1-based index into the pending chat attachments. The executor substitutes
4658
4825
  * the real storage key so the model never transcribes a fileKey.
@@ -5014,34 +5181,97 @@ declare const getFeatureRegistryAliases: () => {
5014
5181
  };
5015
5182
  //#endregion
5016
5183
  //#region src/core/registry/plugins-registry-schema.d.ts
5017
- /**
5018
- * Plugins registry produced by the Python scanner over `plugins/*`.
5019
- *
5020
- * There is one kind of plugin and one way to run it: the platform spawns the
5021
- * plugin's local entry and exchanges ABI JSON over stdin/stdout. Where the work
5022
- * actually runs (locally, on Modal, on another cloud) is the plugin's own
5023
- * concern — the platform binds to no backend.
5024
- *
5025
- * - nodePluginMap: nodeSlot -> list of `pluginId` (directory name under `plugins/`).
5026
- * The head of each list is that slot's **default implementation**: what a
5027
- * freshly added node preselects and what the plugin picker lists first. A
5028
- * plugin claims it with `@node_slot(..., default=True)` and the scanner
5029
- * hoists it; with no claim (or the claimant not installed) the head is just
5030
- * the first plugin in directory order.
5031
- * - plugins[pluginId]: how to launch that plugin's entry
5032
- */
5184
+ declare const PluginParamSpecSchema: z.ZodObject<{
5185
+ type: z.ZodEnum<{
5186
+ number: "number";
5187
+ boolean: "boolean";
5188
+ text: "text";
5189
+ integer: "integer";
5190
+ select: "select";
5191
+ }>;
5192
+ label: z.ZodOptional<z.ZodString>;
5193
+ description: z.ZodOptional<z.ZodString>;
5194
+ default: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
5195
+ options: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
5196
+ min: z.ZodOptional<z.ZodNumber>;
5197
+ max: z.ZodOptional<z.ZodNumber>;
5198
+ step: z.ZodOptional<z.ZodNumber>;
5199
+ models: z.ZodOptional<z.ZodArray<z.ZodString>>;
5200
+ }, z.core.$strip>;
5033
5201
  declare const PluginMethodSchema: z.ZodObject<{
5034
5202
  methodName: z.ZodString;
5035
5203
  models: z.ZodOptional<z.ZodArray<z.ZodString>>;
5204
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
5205
+ type: z.ZodEnum<{
5206
+ number: "number";
5207
+ boolean: "boolean";
5208
+ text: "text";
5209
+ integer: "integer";
5210
+ select: "select";
5211
+ }>;
5212
+ label: z.ZodOptional<z.ZodString>;
5213
+ description: z.ZodOptional<z.ZodString>;
5214
+ default: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
5215
+ options: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
5216
+ min: z.ZodOptional<z.ZodNumber>;
5217
+ max: z.ZodOptional<z.ZodNumber>;
5218
+ step: z.ZodOptional<z.ZodNumber>;
5219
+ models: z.ZodOptional<z.ZodArray<z.ZodString>>;
5220
+ }, z.core.$strip>>>;
5221
+ }, z.core.$strip>;
5222
+ /**
5223
+ * Optional live model catalog (`TONGFLOW_MODEL_CATALOG` in the plugin source).
5224
+ * The canvas GETs `url` in the browser (public, CORS-enabled, no auth) — or,
5225
+ * when `authEnv` names the env key holding a bearer token, through the app's
5226
+ * `/api/plugins/model-catalog` route, which injects the stored key server-side
5227
+ * — reads the record array at dot-path `items`, each model id at dot-path `id`, drops
5228
+ * records where an `exclude` field equals its literal, and keeps a record for
5229
+ * a slot when every `slots[slot]` token is a substring of the named field
5230
+ * (arrays/objects are JSON-serialized before matching; a token prefixed with
5231
+ * `!` must be absent instead). Matching ids extend
5232
+ * that slot's dropdown after the static `models` shortlist.
5233
+ */
5234
+ declare const PluginModelCatalogSchema: z.ZodObject<{
5235
+ url: z.ZodString;
5236
+ authEnv: z.ZodOptional<z.ZodString>;
5237
+ items: z.ZodDefault<z.ZodString>;
5238
+ id: z.ZodDefault<z.ZodString>;
5239
+ exclude: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
5240
+ slots: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
5036
5241
  }, z.core.$strip>;
5037
5242
  declare const PluginConfigSchema: z.ZodObject<{
5038
5243
  localSubdir: z.ZodString;
5039
5244
  methodsByNodeSlot: z.ZodRecord<z.ZodString, z.ZodObject<{
5040
5245
  methodName: z.ZodString;
5041
5246
  models: z.ZodOptional<z.ZodArray<z.ZodString>>;
5247
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
5248
+ type: z.ZodEnum<{
5249
+ number: "number";
5250
+ boolean: "boolean";
5251
+ text: "text";
5252
+ integer: "integer";
5253
+ select: "select";
5254
+ }>;
5255
+ label: z.ZodOptional<z.ZodString>;
5256
+ description: z.ZodOptional<z.ZodString>;
5257
+ default: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
5258
+ options: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
5259
+ min: z.ZodOptional<z.ZodNumber>;
5260
+ max: z.ZodOptional<z.ZodNumber>;
5261
+ step: z.ZodOptional<z.ZodNumber>;
5262
+ models: z.ZodOptional<z.ZodArray<z.ZodString>>;
5263
+ }, z.core.$strip>>>;
5042
5264
  }, z.core.$strip>>;
5043
5265
  entryFile: z.ZodOptional<z.ZodString>;
5044
5266
  needsDeploy: z.ZodOptional<z.ZodBoolean>;
5267
+ modelCatalog: z.ZodOptional<z.ZodObject<{
5268
+ url: z.ZodString;
5269
+ authEnv: z.ZodOptional<z.ZodString>;
5270
+ items: z.ZodDefault<z.ZodString>;
5271
+ id: z.ZodDefault<z.ZodString>;
5272
+ exclude: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
5273
+ slots: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
5274
+ }, z.core.$strip>>;
5045
5275
  name: z.ZodOptional<z.ZodString>;
5046
5276
  description: z.ZodOptional<z.ZodString>;
5047
5277
  icon: z.ZodOptional<z.ZodString>;
@@ -5056,9 +5286,34 @@ declare const PluginsRegistrySchema: z.ZodObject<{
5056
5286
  methodsByNodeSlot: z.ZodRecord<z.ZodString, z.ZodObject<{
5057
5287
  methodName: z.ZodString;
5058
5288
  models: z.ZodOptional<z.ZodArray<z.ZodString>>;
5289
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
5290
+ type: z.ZodEnum<{
5291
+ number: "number";
5292
+ boolean: "boolean";
5293
+ text: "text";
5294
+ integer: "integer";
5295
+ select: "select";
5296
+ }>;
5297
+ label: z.ZodOptional<z.ZodString>;
5298
+ description: z.ZodOptional<z.ZodString>;
5299
+ default: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
5300
+ options: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
5301
+ min: z.ZodOptional<z.ZodNumber>;
5302
+ max: z.ZodOptional<z.ZodNumber>;
5303
+ step: z.ZodOptional<z.ZodNumber>;
5304
+ models: z.ZodOptional<z.ZodArray<z.ZodString>>;
5305
+ }, z.core.$strip>>>;
5059
5306
  }, z.core.$strip>>;
5060
5307
  entryFile: z.ZodOptional<z.ZodString>;
5061
5308
  needsDeploy: z.ZodOptional<z.ZodBoolean>;
5309
+ modelCatalog: z.ZodOptional<z.ZodObject<{
5310
+ url: z.ZodString;
5311
+ authEnv: z.ZodOptional<z.ZodString>;
5312
+ items: z.ZodDefault<z.ZodString>;
5313
+ id: z.ZodDefault<z.ZodString>;
5314
+ exclude: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
5315
+ slots: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
5316
+ }, z.core.$strip>>;
5062
5317
  name: z.ZodOptional<z.ZodString>;
5063
5318
  description: z.ZodOptional<z.ZodString>;
5064
5319
  icon: z.ZodOptional<z.ZodString>;
@@ -5070,6 +5325,39 @@ declare const PluginsRegistrySchema: z.ZodObject<{
5070
5325
  }, z.core.$strip>;
5071
5326
  type PluginsRegistry = z.infer<typeof PluginsRegistrySchema>;
5072
5327
  type PluginConfig = z.infer<typeof PluginConfigSchema>;
5328
+ type PluginModelCatalog = z.infer<typeof PluginModelCatalogSchema>;
5329
+ type PluginParamSpec = z.infer<typeof PluginParamSpecSchema>;
5330
+ //#endregion
5331
+ //#region src/core/registry/model-catalog.d.ts
5332
+ /**
5333
+ * Filter a fetched catalog payload into `slot -> model ids`, applying the
5334
+ * plugin's declared `exclude` and per-slot `slots` rules (substring tokens,
5335
+ * `!`-prefixed = must be absent). Ids keep catalog order; malformed records
5336
+ * are skipped. Pure — the fetch lives in the canvas.
5337
+ */
5338
+ declare function filterModelCatalog(catalog: PluginModelCatalog, payload: unknown): Record<string, string[]>;
5339
+ //#endregion
5340
+ //#region src/core/registry/plugin-params.d.ts
5341
+ /** A plugin's declared params for one slot, in declaration order. */
5342
+ type PluginParamEntry = {
5343
+ name: string;
5344
+ spec: PluginParamSpec;
5345
+ };
5346
+ /**
5347
+ * The params a node offers for the active plugin + model: every declared entry
5348
+ * whose `models` gate is absent or names the selected model.
5349
+ */
5350
+ declare function visiblePluginParams(params: Record<string, PluginParamSpec> | undefined, model: string | undefined): PluginParamEntry[];
5351
+ /** True when `value` is a legal setting for `spec` (type + range/options). */
5352
+ declare function isValidPluginParamValue(spec: PluginParamSpec, value: unknown): boolean;
5353
+ /**
5354
+ * Keep only the entries of `values` that the visible params accept and that
5355
+ * differ from the declared default. Unset means "plugin default", so a value
5356
+ * equal to it is dropped; the result is what travels to the plugin.
5357
+ */
5358
+ declare function normalizePluginParams(entries: PluginParamEntry[], values: Record<string, unknown> | undefined): Record<string, unknown>;
5359
+ /** Shallow key/value equality for two param records. */
5360
+ declare function samePluginParams(a: Record<string, unknown> | undefined, b: Record<string, unknown> | undefined): boolean;
5073
5361
  //#endregion
5074
5362
  //#region src/core/schema/abi-version.d.ts
5075
5363
  /**
@@ -5154,6 +5442,10 @@ interface BaseNodeData extends Record<string, unknown> {
5154
5442
  /** Selected model for router-style plugins that declare per-slot model
5155
5443
  * lists; empty/absent means the plugin's default. */
5156
5444
  pluginModel?: string;
5445
+ /** Advanced parameters chosen for the active plugin (keys from its
5446
+ * `TONGFLOW_SLOT_PARAMS`); only values differing from the declared default
5447
+ * are kept, so absent means the plugin's own default. */
5448
+ pluginParams?: Record<string, unknown>;
5157
5449
  /** Composition linkage (`useNodesData`) */
5158
5450
  ids?: string[];
5159
5451
  texts?: string[];
@@ -5338,6 +5630,9 @@ interface ExecutableNode {
5338
5630
  /** Model chosen on the canvas for router-style plugins that declare
5339
5631
  * per-slot model lists; absent = plugin default. */
5340
5632
  model?: string;
5633
+ /** Advanced parameters chosen on the canvas (plugin's `TONGFLOW_SLOT_PARAMS`
5634
+ * keys); absent = plugin defaults. Rides to the plugin as `_params`. */
5635
+ params?: Record<string, unknown>;
5341
5636
  /** Node display name (used for mobile execution progress display) */
5342
5637
  label?: string;
5343
5638
  /** Node comment */
@@ -5467,6 +5762,12 @@ interface ExportOptions {
5467
5762
  /** Whether to include the original flow data */
5468
5763
  includeOriginalFlow?: boolean;
5469
5764
  }
5765
+ /**
5766
+ * Workflow input name for a level-0 data / add node: an explicit
5767
+ * `data.inputName` (a-z, 0-9, _ , -; set by authors so bindings read
5768
+ * `refs`, `prompt` …) else the legacy `input_<id8>`.
5769
+ */
5770
+ declare function inputNameFor(nodeId: string, nodeData: Record<string, unknown>): string;
5470
5771
  declare class WorkflowExporter {
5471
5772
  private nodes;
5472
5773
  private edges;
@@ -5796,4 +6097,4 @@ declare function isWorkflowValid(workflow: WorkflowJSON | {
5796
6097
  edges: Edge[];
5797
6098
  }): boolean;
5798
6099
  //#endregion
5799
- export { ABI_DEFINITIONS, ABI_NODES, ADD_NODE_OUTPUT_TYPE, ADD_NODE_TYPES, AbiNodeSchemas, AbiNodeSpec, AbiSchemaEdgeResult, AbiTopology, AddTextNodeData, AgentAttachment, AgentToolDefinition, AnySourceSpec, ApplyGraphPatchOptions, ArrangeGroupInput, ArrangeGroupOutput, AspectRatio, Asset, AudioDescribeInput, AudioDescribeOutput, AudioImageGenVideoInput, AudioImageGenVideoOutput, AudioVideoLipSyncInput, AudioVideoLipSyncOutput, AutoLayoutOptions, BaseNodeData, BuildPromptsArgs, COMPONENT_V_GAP, CombineTextInput, CombineTextOutput, ComposeNodeData, ConcatVideosInput, ConcatVideosOutput, ConfigOverride, ConvertVoiceInput, ConvertVoiceOutput, DATA_NODE_TYPES, DataNode, DataNodeData, DataNodeType, DenoiseAudioInput, DenoiseAudioOutput, DropVideoInput, DropVideoOutput, Duration, EdgeTargetOption, ExecutableNode, ExecutableWorkflow, ExecuteToolContext, ExecutionPlan, ExportOptions, ExtractAudioInput, ExtractAudioOutput, FeatureDefinition, FeatureRegistryBundle, FeatureRegistryBundleSchema, FieldBinding, FieldClass, FieldSourceOverride, FlowCoreState, FlowSnapshot, FlowStore, FlowStoreOptions, FlowWorkflowMeta, GenMusicInput, GenMusicOutput, GenTextInput, GenTextOutput, GetFirstFrameInput, GetFirstFrameOutput, GetLastFrameInput, GetLastFrameOutput, GraphPatch, GraphPatchAddEdge, GraphPatchAddNode, GraphPatchUpdateNode, HISTORY_LIMIT, H_GAP, HandleOverride, IMAGE_ASPECT_RATIOS, IMAGE_RESOLUTION_TIERS, ImageBodySegInput, ImageBodySegOutput, ImageDescribeInput, ImageDescribeOutput, ImageEditInput, ImageEditOutput, ImageFusionInput, ImageFusionOutput, ImageGenInput, ImageGenModelInput, ImageGenModelOutput, ImageGenOutput, ImageGenTextInput, ImageGenTextOutput, ImageGenVideoInput, ImageGenVideoOutput, ImageImageGenVideoInput, ImageImageGenVideoOutput, ImageMattingInput, ImageMattingOutput, ImageNormalInput, ImageNormalOutput, ImagePoseInput, ImagePoseOutput, ImageUpscaleInput, ImageUpscaleOutput, ImagesGenVideoInput, ImagesGenVideoOutput, InputOverride, InstalledPluginsView, KNOWN_NODE_TYPES, LinkInput, LinkOutput, MEDIA_NODE_MAX_DISPLAY_WIDTH_PX, MEDIA_NODE_MIN_DISPLAY_WIDTH_PX, MEDIA_NODE_REF_DISPLAY_WIDTH_PX, MEDIA_NODE_REF_LONG_EDGE_PX, MIN_SUPPORTED_ABI_VERSION, MODALITY_NODE_TYPES, MergeVideoAudioInput, MergeVideoAudioOutput, ModalityNodeType, MusicBriefInput, MusicBriefOutput, MusicCompleteInput, MusicCompleteOutput, MusicCoverInput, MusicCoverOutput, MusicExtractInput, MusicExtractOutput, MusicLegoInput, MusicLegoOutput, MusicRepaintInput, MusicRepaintOutput, NODE_TYPE_SOURCE_SPEC, NODE_TYPE_TO_ABI_FEATURE, NodeExecutionInfo, NodeExecutionStatus, NodeKind, NodeSize, NodeSlot, NodeStatus, NodeStatusType, OutputHandle, OutputNodeType, OutputRoute, ParseDocumentInput, ParseDocumentOutput, ParsedWorkflowImport, PatchStepResult, PluginConfig, PluginConfigSchema, PluginMethodSchema, PluginsRegistry, PluginsRegistrySchema, PossibleNode, RUNNING_STATUSES, ReadCanvasOptions, RefName, RefsGenVideoInput, RefsGenVideoOutput, RemoveVideoAudioInput, RemoveVideoAudioOutput, RemoveWatermarkInput, RemoveWatermarkOutput, RenderCanvasOptions, ResolutionTier, ResolvedField, ResolvedOutputRoute, ResolvedSpec, RfDataNodeProps, SHORT_ID_LENGTH, SSEStatusType, SeparateAudioTrackInput, SeparateAudioTrackOutput, SeparateSoundInput, SeparateSoundOutput, SeparateSpeakerInput, SeparateSpeakerOutput, SlotInput, SlotInputsMap, SlotOutput, SlotOutputsMap, SourceSpec, SpeechTextGenVideoInput, SpeechTextGenVideoOutput, SpeechVideoGenVideoInput, SpeechVideoGenVideoOutput, SplitTextInput, SplitTextOutput, SplitVideoInput, SplitVideoOutput, StaticOverride, SubtitleRemoveInput, SubtitleRemoveOutput, TERMINAL_STATUSES, TONGFLOW_ABI_NODES, TONGFLOW_ABI_VERSION, TONGFLOW_TOOL_DEFS, TONGFLOW_TOOL_NAMES, TaskStatus, TaskStatusType, TextAudioGenSpeechInput, TextAudioGenSpeechOutput, TextGenSpeechCloneInput, TextGenSpeechCloneOutput, TextGenSpeechInstructInput, TextGenSpeechInstructOutput, TextGenSpeechPresetInput, TextGenSpeechPresetOutput, TextGenVideoInput, TextGenVideoOutput, TongflowAbiNode, TongflowPluginNode, TongflowPluginNodeData, TongflowPluginNodeProps, TongflowToolName, ToolErr, ToolOk, ToolResult, TranscribeInput, TranscribeOutput, TranscribeTimestampInput, TranscribeTimestampOutput, TransferNodeData, VIDEO_ASPECT_RATIOS, VIDEO_DURATIONS, VIDEO_DURATION_DEFAULT, VIDEO_DURATION_MAX, VIDEO_DURATION_MIN, V_GAP, ValidateWorkflowOptions, VideoDescribeInput, VideoDescribeOutput, VideoEditInput, VideoEditOutput, VideoGenModelInput, VideoGenModelOutput, VideoGenTextInput, VideoGenTextOutput, VideoImageGenVideoMixInput, VideoImageGenVideoMixOutput, VideoImageGenVideoMoveInput, VideoImageGenVideoMoveOutput, VideoUpscaleInput, VideoUpscaleOutput, WORKFLOW_IMPORT_NO_CANVAS, WorkflowExecutor, WorkflowExporter, WorkflowInput, WorkflowJSON, WorkflowOutput, WorkflowParser, WorkflowStatus, WorkflowStatusType, abiSpecForNodeType, addEdgeIfAbsent, applyGraphPatch, batchOn, buildFeatureRegistry, buildPrompts, bumpFocusGeneration, clampVideoDuration, closestNodeTypes, coerceBaseNodeData, collectAll, collectHandleValues, compareAbiProducerConsumerSchemas, componentsContaining, computeAutoLayout, configField, createFlowSlice, createFlowStore, currentFocusGeneration, describeNodeType, edgeShapeError, estimateNodeSize, executeGraphTool, exportWorkflow, featureForNodeType, getAbiNodeBySlot, getAbiOutputRoutesBySlot, getAbiTopology, getAllFeatures, getAspectRatioIconSize, getEdgeTargetOptions, getEffectiveOutputType, getFeatureByName, getFeatureRegistryAliases, getValueByPath, getWorkflowEndNodes, getWorkflowStartNodes, handle, hasDuplicateAddSourceEdge, hasDuplicateTargetHandle, isAbiNodeType, isKnownNodeType, isModalityNode, isRunningStatus, isTerminalStatus, isValidFlowConnection, isWorkflowValid, logger, mapSSEStatusToTaskStatus, neighborhood, nodeKind, parseExecutableWorkflow, parseSourceHandleId, parseTargetHandleId, parseWorkflow, parseWorkflowImportJson, promptMissingRequired, proportionalMediaNodeWidthPx, pushSnapshot, readCanvas, renderCanvas, resolveAbiOutputMappings, resolveCanonicalFeatureName, resolveEdgeHandles, resolveLabelLookupFeatureName, resolveNodeRef, resolveSpec, resolvedSpecForNodeType, shortId, singleEdgeTextScalarTargetHandles, snapshotFlow, sourceHandleId, sourceSpecForNodeType, staticValue, stringifyExecutableWorkflow, targetHandleId, tryAbiCompatibility, validateFeatureRegistryBundle, validateWorkflow, workflowInput };
6100
+ export { ABI_DEFINITIONS, ABI_NODES, ADD_NODE_OUTPUT_TYPE, ADD_NODE_TYPES, AbiNodeSchemas, AbiNodeSpec, AbiSchemaEdgeResult, AbiTopology, AddTextNodeData, AgentAttachment, AgentToolDefinition, AnySourceSpec, ApplyGraphPatchOptions, ArrangeGroupInput, ArrangeGroupOutput, AspectRatio, Asset, AudioDescribeInput, AudioDescribeOutput, AudioImageGenVideoInput, AudioImageGenVideoOutput, AudioVideoLipSyncInput, AudioVideoLipSyncOutput, AutoLayoutOptions, BaseNodeData, BuildPromptsArgs, COMPONENT_V_GAP, CombineTextInput, CombineTextOutput, ComposeNodeData, ConcatVideosInput, ConcatVideosOutput, ConfigOverride, ConvertVoiceInput, ConvertVoiceOutput, DATA_NODE_TYPES, DataNode, DataNodeData, DataNodeType, DenoiseAudioInput, DenoiseAudioOutput, DropVideoInput, DropVideoOutput, Duration, EdgeTargetOption, ExecutableNode, ExecutableWorkflow, ExecuteToolContext, ExecutionPlan, ExportOptions, ExtractAudioInput, ExtractAudioOutput, FeatureDefinition, FeatureRegistryBundle, FeatureRegistryBundleSchema, FieldBinding, FieldClass, FieldSourceOverride, FlowCoreState, FlowSnapshot, FlowStore, FlowStoreOptions, FlowWorkflowMeta, GenMusicInput, GenMusicOutput, GenTextInput, GenTextOutput, GetFirstFrameInput, GetFirstFrameOutput, GetLastFrameInput, GetLastFrameOutput, GraphPatch, GraphPatchAddEdge, GraphPatchAddNode, GraphPatchUpdateNode, HISTORY_LIMIT, H_GAP, HandleOverride, IMAGE_ASPECT_RATIOS, IMAGE_RESOLUTION_TIERS, ImageBodySegInput, ImageBodySegOutput, ImageDescribeInput, ImageDescribeOutput, ImageEditInput, ImageEditOutput, ImageFusionInput, ImageFusionOutput, ImageGenInput, ImageGenModelInput, ImageGenModelOutput, ImageGenOutput, ImageGenTextInput, ImageGenTextOutput, ImageGenVideoInput, ImageGenVideoOutput, ImageImageGenVideoInput, ImageImageGenVideoOutput, ImageMattingInput, ImageMattingOutput, ImageNormalInput, ImageNormalOutput, ImagePoseInput, ImagePoseOutput, ImageUpscaleInput, ImageUpscaleOutput, ImagesGenVideoInput, ImagesGenVideoOutput, InputOverride, InstalledPluginsView, KNOWN_NODE_TYPES, LinkInput, LinkOutput, MEDIA_NODE_MAX_DISPLAY_WIDTH_PX, MEDIA_NODE_MIN_DISPLAY_WIDTH_PX, MEDIA_NODE_REF_DISPLAY_WIDTH_PX, MEDIA_NODE_REF_LONG_EDGE_PX, MIN_SUPPORTED_ABI_VERSION, MODALITY_NODE_TYPES, MergeVideoAudioInput, MergeVideoAudioOutput, ModalityNodeType, MusicBriefInput, MusicBriefOutput, MusicCompleteInput, MusicCompleteOutput, MusicCoverInput, MusicCoverOutput, MusicExtractInput, MusicExtractOutput, MusicLegoInput, MusicLegoOutput, MusicRepaintInput, MusicRepaintOutput, NODE_ACTION_META, NODE_TYPE_SOURCE_SPEC, NODE_TYPE_TO_ABI_FEATURE, NodeActionCandidate, NodeActionMeta, NodeExecutionInfo, NodeExecutionStatus, NodeKind, NodeSize, NodeSlot, NodeStatus, NodeStatusType, OutputHandle, OutputNodeType, OutputRoute, ParseDocumentInput, ParseDocumentOutput, ParsedWorkflowImport, PatchStepResult, PluginConfig, PluginConfigSchema, PluginMethodSchema, PluginModelCatalog, PluginModelCatalogSchema, PluginParamEntry, PluginParamSpec, PluginParamSpecSchema, PluginsRegistry, PluginsRegistrySchema, PossibleNode, RUNNING_STATUSES, Range, ReadCanvasOptions, RefName, RefsGenVideoInput, RefsGenVideoOutput, RemoveVideoAudioInput, RemoveVideoAudioOutput, RemoveWatermarkInput, RemoveWatermarkOutput, RenderCanvasOptions, ResolutionTier, ResolvedField, ResolvedOutputRoute, ResolvedSpec, RfDataNodeProps, SHORT_ID_LENGTH, SSEStatusType, SelectionCounts, SelectionOptions, SeparateAudioTrackInput, SeparateAudioTrackOutput, SeparateSoundInput, SeparateSoundOutput, SeparateSpeakerInput, SeparateSpeakerOutput, SlotInput, SlotInputsMap, SlotOutput, SlotOutputsMap, SourceSpec, SpeechTextGenVideoInput, SpeechTextGenVideoOutput, SpeechVideoGenVideoInput, SpeechVideoGenVideoOutput, SplitTextInput, SplitTextOutput, SplitVideoInput, SplitVideoOutput, StaticOverride, SubtitleRemoveInput, SubtitleRemoveOutput, TERMINAL_STATUSES, TONGFLOW_ABI_NODES, TONGFLOW_ABI_VERSION, TONGFLOW_TOOL_DEFS, TONGFLOW_TOOL_NAMES, TaskStatus, TaskStatusType, TextAudioGenSpeechInput, TextAudioGenSpeechOutput, TextGenAudioInput, TextGenAudioOutput, TextGenSpeechCloneInput, TextGenSpeechCloneOutput, TextGenSpeechInstructInput, TextGenSpeechInstructOutput, TextGenSpeechPresetInput, TextGenSpeechPresetOutput, TextGenVideoInput, TextGenVideoOutput, TongflowAbiNode, TongflowPluginNode, TongflowPluginNodeData, TongflowPluginNodeProps, TongflowToolName, ToolErr, ToolOk, ToolResult, TranscribeInput, TranscribeOutput, TranscribeTimestampInput, TranscribeTimestampOutput, TransferNodeData, VIDEO_ASPECT_RATIOS, VIDEO_DURATIONS, VIDEO_DURATION_DEFAULT, VIDEO_DURATION_MAX, VIDEO_DURATION_MIN, V_GAP, ValidateWorkflowOptions, VideoDescribeInput, VideoDescribeOutput, VideoEditInput, VideoEditOutput, VideoGenModelInput, VideoGenModelOutput, VideoGenTextInput, VideoGenTextOutput, VideoImageGenVideoMixInput, VideoImageGenVideoMixOutput, VideoImageGenVideoMoveInput, VideoImageGenVideoMoveOutput, VideoUpscaleInput, VideoUpscaleOutput, WORKFLOW_IMPORT_NO_CANVAS, WorkflowExecutor, WorkflowExporter, WorkflowInput, WorkflowJSON, WorkflowOutput, WorkflowParser, WorkflowStatus, WorkflowStatusType, abiSpecForNodeType, addEdgeIfAbsent, applyGraphPatch, batchOn, buildFeatureRegistry, buildPrompts, bumpFocusGeneration, clampVideoDuration, closestNodeTypes, coerceBaseNodeData, collectAll, collectHandleValues, compareAbiProducerConsumerSchemas, componentsContaining, computeAutoLayout, configField, createFlowSlice, createFlowStore, currentFocusGeneration, describeNodeType, edgeShapeError, estimateNodeSize, executeGraphTool, exportWorkflow, featureForNodeType, filterModelCatalog, getAbiNodeBySlot, getAbiOutputRoutesBySlot, getAbiTopology, getAllFeatures, getAspectRatioIconSize, getEdgeTargetOptions, getEffectiveOutputType, getFeatureByName, getFeatureRegistryAliases, getValueByPath, getWorkflowEndNodes, getWorkflowStartNodes, handle, hasDuplicateAddSourceEdge, hasDuplicateTargetHandle, inputNameFor, isAbiNodeType, isKnownNodeType, isModalityNode, isRunningStatus, isTerminalStatus, isValidFlowConnection, isValidPluginParamValue, isWorkflowValid, logger, mapSSEStatusToTaskStatus, neighborhood, nodeActionsForSelection, nodeKind, normalizePluginParams, parseExecutableWorkflow, parseSourceHandleId, parseTargetHandleId, parseWorkflow, parseWorkflowImportJson, promptMissingRequired, proportionalMediaNodeWidthPx, pushSnapshot, readCanvas, renderCanvas, resolveAbiOutputMappings, resolveCanonicalFeatureName, resolveEdgeHandles, resolveLabelLookupFeatureName, resolveNodeRef, resolveSpec, resolvedSpecForNodeType, samePluginParams, shortId, singleEdgeTextScalarTargetHandles, snapshotFlow, sourceHandleId, sourceSpecForNodeType, staticValue, stringifyExecutableWorkflow, targetHandleId, tryAbiCompatibility, validateFeatureRegistryBundle, validateWorkflow, visiblePluginParams, workflowInput };