@marlinjai/studio-mcp 0.1.0 → 0.2.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.ts CHANGED
@@ -39,6 +39,7 @@ declare const DocNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
39
39
  "speech-to-speech": "speech-to-speech";
40
40
  "image-to-text": "image-to-text";
41
41
  "image-to-json": "image-to-json";
42
+ "video-to-text": "video-to-text";
42
43
  judge: "judge";
43
44
  "text-generation": "text-generation";
44
45
  upscale: "upscale";
@@ -54,17 +55,27 @@ declare const DocNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
54
55
  }, z.core.$strip>>>;
55
56
  activeGeneration: z.ZodOptional<z.ZodString>;
56
57
  label: z.ZodOptional<z.ZodString>;
58
+ collapsed: z.ZodOptional<z.ZodBoolean>;
57
59
  }, z.core.$strip>, z.ZodObject<{
58
60
  id: z.ZodString;
59
61
  kind: z.ZodLiteral<"prompt-source">;
60
62
  text: z.ZodDefault<z.ZodString>;
61
63
  label: z.ZodOptional<z.ZodString>;
64
+ collapsed: z.ZodOptional<z.ZodBoolean>;
62
65
  }, z.core.$strip>, z.ZodObject<{
63
66
  id: z.ZodString;
64
67
  kind: z.ZodLiteral<"image-source">;
65
68
  imageUrl: z.ZodDefault<z.ZodString>;
66
69
  assetId: z.ZodOptional<z.ZodString>;
67
70
  label: z.ZodOptional<z.ZodString>;
71
+ collapsed: z.ZodOptional<z.ZodBoolean>;
72
+ }, z.core.$strip>, z.ZodObject<{
73
+ id: z.ZodString;
74
+ kind: z.ZodLiteral<"video-source">;
75
+ videoUrl: z.ZodDefault<z.ZodString>;
76
+ assetId: z.ZodOptional<z.ZodString>;
77
+ label: z.ZodOptional<z.ZodString>;
78
+ collapsed: z.ZodOptional<z.ZodBoolean>;
68
79
  }, z.core.$strip>, z.ZodObject<{
69
80
  id: z.ZodString;
70
81
  kind: z.ZodLiteral<"input">;
@@ -85,6 +96,7 @@ declare const DocNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
85
96
  default: z.ZodOptional<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>;
86
97
  label: z.ZodOptional<z.ZodString>;
87
98
  description: z.ZodOptional<z.ZodString>;
99
+ collapsed: z.ZodOptional<z.ZodBoolean>;
88
100
  }, z.core.$strip>], "kind">;
89
101
  type DocNode = z.infer<typeof DocNodeSchema>;
90
102
  type DocNodeKind = DocNode["kind"];
@@ -115,6 +127,7 @@ declare const WorkflowDocumentSchema: z.ZodObject<{
115
127
  "speech-to-speech": "speech-to-speech";
116
128
  "image-to-text": "image-to-text";
117
129
  "image-to-json": "image-to-json";
130
+ "video-to-text": "video-to-text";
118
131
  judge: "judge";
119
132
  "text-generation": "text-generation";
120
133
  upscale: "upscale";
@@ -130,17 +143,27 @@ declare const WorkflowDocumentSchema: z.ZodObject<{
130
143
  }, z.core.$strip>>>;
131
144
  activeGeneration: z.ZodOptional<z.ZodString>;
132
145
  label: z.ZodOptional<z.ZodString>;
146
+ collapsed: z.ZodOptional<z.ZodBoolean>;
133
147
  }, z.core.$strip>, z.ZodObject<{
134
148
  id: z.ZodString;
135
149
  kind: z.ZodLiteral<"prompt-source">;
136
150
  text: z.ZodDefault<z.ZodString>;
137
151
  label: z.ZodOptional<z.ZodString>;
152
+ collapsed: z.ZodOptional<z.ZodBoolean>;
138
153
  }, z.core.$strip>, z.ZodObject<{
139
154
  id: z.ZodString;
140
155
  kind: z.ZodLiteral<"image-source">;
141
156
  imageUrl: z.ZodDefault<z.ZodString>;
142
157
  assetId: z.ZodOptional<z.ZodString>;
143
158
  label: z.ZodOptional<z.ZodString>;
159
+ collapsed: z.ZodOptional<z.ZodBoolean>;
160
+ }, z.core.$strip>, z.ZodObject<{
161
+ id: z.ZodString;
162
+ kind: z.ZodLiteral<"video-source">;
163
+ videoUrl: z.ZodDefault<z.ZodString>;
164
+ assetId: z.ZodOptional<z.ZodString>;
165
+ label: z.ZodOptional<z.ZodString>;
166
+ collapsed: z.ZodOptional<z.ZodBoolean>;
144
167
  }, z.core.$strip>, z.ZodObject<{
145
168
  id: z.ZodString;
146
169
  kind: z.ZodLiteral<"input">;
@@ -161,6 +184,7 @@ declare const WorkflowDocumentSchema: z.ZodObject<{
161
184
  default: z.ZodOptional<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>;
162
185
  label: z.ZodOptional<z.ZodString>;
163
186
  description: z.ZodOptional<z.ZodString>;
187
+ collapsed: z.ZodOptional<z.ZodBoolean>;
164
188
  }, z.core.$strip>], "kind">>;
165
189
  edges: z.ZodArray<z.ZodObject<{
166
190
  source: z.ZodString;
@@ -184,6 +208,26 @@ declare const WorkflowDocumentSchema: z.ZodObject<{
184
208
  label: z.ZodOptional<z.ZodString>;
185
209
  nodeIds: z.ZodArray<z.ZodString>;
186
210
  }, z.core.$strip>>>;
211
+ view: z.ZodOptional<z.ZodObject<{
212
+ edgeRouting: z.ZodOptional<z.ZodEnum<{
213
+ curved: "curved";
214
+ orthogonal: "orthogonal";
215
+ }>>;
216
+ wires: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
217
+ from: z.ZodObject<{
218
+ x: z.ZodNumber;
219
+ y: z.ZodNumber;
220
+ }, z.core.$strip>;
221
+ to: z.ZodObject<{
222
+ x: z.ZodNumber;
223
+ y: z.ZodNumber;
224
+ }, z.core.$strip>;
225
+ points: z.ZodArray<z.ZodObject<{
226
+ x: z.ZodNumber;
227
+ y: z.ZodNumber;
228
+ }, z.core.$strip>>;
229
+ }, z.core.$strip>>>;
230
+ }, z.core.$strip>>;
187
231
  }, z.core.$strip>;
188
232
  type WorkflowDocument = z.infer<typeof WorkflowDocumentSchema>;
189
233
  declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -211,6 +255,7 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
211
255
  "speech-to-speech": "speech-to-speech";
212
256
  "image-to-text": "image-to-text";
213
257
  "image-to-json": "image-to-json";
258
+ "video-to-text": "video-to-text";
214
259
  judge: "judge";
215
260
  "text-generation": "text-generation";
216
261
  upscale: "upscale";
@@ -226,17 +271,27 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
226
271
  }, z.core.$strip>>>;
227
272
  activeGeneration: z.ZodOptional<z.ZodString>;
228
273
  label: z.ZodOptional<z.ZodString>;
274
+ collapsed: z.ZodOptional<z.ZodBoolean>;
229
275
  }, z.core.$strip>, z.ZodObject<{
230
276
  id: z.ZodString;
231
277
  kind: z.ZodLiteral<"prompt-source">;
232
278
  text: z.ZodDefault<z.ZodString>;
233
279
  label: z.ZodOptional<z.ZodString>;
280
+ collapsed: z.ZodOptional<z.ZodBoolean>;
234
281
  }, z.core.$strip>, z.ZodObject<{
235
282
  id: z.ZodString;
236
283
  kind: z.ZodLiteral<"image-source">;
237
284
  imageUrl: z.ZodDefault<z.ZodString>;
238
285
  assetId: z.ZodOptional<z.ZodString>;
239
286
  label: z.ZodOptional<z.ZodString>;
287
+ collapsed: z.ZodOptional<z.ZodBoolean>;
288
+ }, z.core.$strip>, z.ZodObject<{
289
+ id: z.ZodString;
290
+ kind: z.ZodLiteral<"video-source">;
291
+ videoUrl: z.ZodDefault<z.ZodString>;
292
+ assetId: z.ZodOptional<z.ZodString>;
293
+ label: z.ZodOptional<z.ZodString>;
294
+ collapsed: z.ZodOptional<z.ZodBoolean>;
240
295
  }, z.core.$strip>, z.ZodObject<{
241
296
  id: z.ZodString;
242
297
  kind: z.ZodLiteral<"input">;
@@ -257,6 +312,7 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
257
312
  default: z.ZodOptional<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>;
258
313
  label: z.ZodOptional<z.ZodString>;
259
314
  description: z.ZodOptional<z.ZodString>;
315
+ collapsed: z.ZodOptional<z.ZodBoolean>;
260
316
  }, z.core.$strip>], "kind">;
261
317
  position: z.ZodOptional<z.ZodObject<{
262
318
  x: z.ZodNumber;
@@ -291,6 +347,7 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
291
347
  "speech-to-speech": "speech-to-speech";
292
348
  "image-to-text": "image-to-text";
293
349
  "image-to-json": "image-to-json";
350
+ "video-to-text": "video-to-text";
294
351
  judge: "judge";
295
352
  "text-generation": "text-generation";
296
353
  upscale: "upscale";
@@ -300,6 +357,7 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
300
357
  model: z.ZodOptional<z.ZodString>;
301
358
  prompt: z.ZodOptional<z.ZodString>;
302
359
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
360
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
303
361
  }, z.core.$strict>;
304
362
  }, z.core.$strip>, z.ZodObject<{
305
363
  type: z.ZodLiteral<"setNodeProps">;
@@ -308,6 +366,7 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
308
366
  props: z.ZodObject<{
309
367
  text: z.ZodOptional<z.ZodString>;
310
368
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
369
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
311
370
  }, z.core.$strict>;
312
371
  }, z.core.$strip>, z.ZodObject<{
313
372
  type: z.ZodLiteral<"setNodeProps">;
@@ -317,6 +376,17 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
317
376
  imageUrl: z.ZodOptional<z.ZodString>;
318
377
  assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
319
378
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
379
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
380
+ }, z.core.$strict>;
381
+ }, z.core.$strip>, z.ZodObject<{
382
+ type: z.ZodLiteral<"setNodeProps">;
383
+ kind: z.ZodLiteral<"video-source">;
384
+ id: z.ZodString;
385
+ props: z.ZodObject<{
386
+ videoUrl: z.ZodOptional<z.ZodString>;
387
+ assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
388
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
389
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
320
390
  }, z.core.$strict>;
321
391
  }, z.core.$strip>, z.ZodObject<{
322
392
  type: z.ZodLiteral<"setNodeProps">;
@@ -340,6 +410,7 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
340
410
  default: z.ZodOptional<z.ZodNullable<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>>;
341
411
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
342
412
  description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
413
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
343
414
  }, z.core.$strict>;
344
415
  }, z.core.$strip>], "kind">, z.ZodObject<{
345
416
  type: z.ZodLiteral<"setNodeSetting">;
@@ -426,6 +497,26 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
426
497
  type: z.ZodLiteral<"setDocumentProps">;
427
498
  props: z.ZodObject<{
428
499
  label: z.ZodOptional<z.ZodString>;
500
+ view: z.ZodOptional<z.ZodNullable<z.ZodObject<{
501
+ edgeRouting: z.ZodOptional<z.ZodEnum<{
502
+ curved: "curved";
503
+ orthogonal: "orthogonal";
504
+ }>>;
505
+ wires: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
506
+ from: z.ZodObject<{
507
+ x: z.ZodNumber;
508
+ y: z.ZodNumber;
509
+ }, z.core.$strip>;
510
+ to: z.ZodObject<{
511
+ x: z.ZodNumber;
512
+ y: z.ZodNumber;
513
+ }, z.core.$strip>;
514
+ points: z.ZodArray<z.ZodObject<{
515
+ x: z.ZodNumber;
516
+ y: z.ZodNumber;
517
+ }, z.core.$strip>>;
518
+ }, z.core.$strip>>>;
519
+ }, z.core.$strict>>>;
429
520
  }, z.core.$strict>;
430
521
  }, z.core.$strip>], "type">;
431
522
  type Op = z.infer<typeof OpSchema>;
@@ -458,6 +549,7 @@ declare const PatchSchema: z.ZodObject<{
458
549
  "speech-to-speech": "speech-to-speech";
459
550
  "image-to-text": "image-to-text";
460
551
  "image-to-json": "image-to-json";
552
+ "video-to-text": "video-to-text";
461
553
  judge: "judge";
462
554
  "text-generation": "text-generation";
463
555
  upscale: "upscale";
@@ -473,17 +565,27 @@ declare const PatchSchema: z.ZodObject<{
473
565
  }, z.core.$strip>>>;
474
566
  activeGeneration: z.ZodOptional<z.ZodString>;
475
567
  label: z.ZodOptional<z.ZodString>;
568
+ collapsed: z.ZodOptional<z.ZodBoolean>;
476
569
  }, z.core.$strip>, z.ZodObject<{
477
570
  id: z.ZodString;
478
571
  kind: z.ZodLiteral<"prompt-source">;
479
572
  text: z.ZodDefault<z.ZodString>;
480
573
  label: z.ZodOptional<z.ZodString>;
574
+ collapsed: z.ZodOptional<z.ZodBoolean>;
481
575
  }, z.core.$strip>, z.ZodObject<{
482
576
  id: z.ZodString;
483
577
  kind: z.ZodLiteral<"image-source">;
484
578
  imageUrl: z.ZodDefault<z.ZodString>;
485
579
  assetId: z.ZodOptional<z.ZodString>;
486
580
  label: z.ZodOptional<z.ZodString>;
581
+ collapsed: z.ZodOptional<z.ZodBoolean>;
582
+ }, z.core.$strip>, z.ZodObject<{
583
+ id: z.ZodString;
584
+ kind: z.ZodLiteral<"video-source">;
585
+ videoUrl: z.ZodDefault<z.ZodString>;
586
+ assetId: z.ZodOptional<z.ZodString>;
587
+ label: z.ZodOptional<z.ZodString>;
588
+ collapsed: z.ZodOptional<z.ZodBoolean>;
487
589
  }, z.core.$strip>, z.ZodObject<{
488
590
  id: z.ZodString;
489
591
  kind: z.ZodLiteral<"input">;
@@ -504,6 +606,7 @@ declare const PatchSchema: z.ZodObject<{
504
606
  default: z.ZodOptional<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>;
505
607
  label: z.ZodOptional<z.ZodString>;
506
608
  description: z.ZodOptional<z.ZodString>;
609
+ collapsed: z.ZodOptional<z.ZodBoolean>;
507
610
  }, z.core.$strip>], "kind">;
508
611
  position: z.ZodOptional<z.ZodObject<{
509
612
  x: z.ZodNumber;
@@ -538,6 +641,7 @@ declare const PatchSchema: z.ZodObject<{
538
641
  "speech-to-speech": "speech-to-speech";
539
642
  "image-to-text": "image-to-text";
540
643
  "image-to-json": "image-to-json";
644
+ "video-to-text": "video-to-text";
541
645
  judge: "judge";
542
646
  "text-generation": "text-generation";
543
647
  upscale: "upscale";
@@ -547,6 +651,7 @@ declare const PatchSchema: z.ZodObject<{
547
651
  model: z.ZodOptional<z.ZodString>;
548
652
  prompt: z.ZodOptional<z.ZodString>;
549
653
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
654
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
550
655
  }, z.core.$strict>;
551
656
  }, z.core.$strip>, z.ZodObject<{
552
657
  type: z.ZodLiteral<"setNodeProps">;
@@ -555,6 +660,7 @@ declare const PatchSchema: z.ZodObject<{
555
660
  props: z.ZodObject<{
556
661
  text: z.ZodOptional<z.ZodString>;
557
662
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
663
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
558
664
  }, z.core.$strict>;
559
665
  }, z.core.$strip>, z.ZodObject<{
560
666
  type: z.ZodLiteral<"setNodeProps">;
@@ -564,6 +670,17 @@ declare const PatchSchema: z.ZodObject<{
564
670
  imageUrl: z.ZodOptional<z.ZodString>;
565
671
  assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
566
672
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
673
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
674
+ }, z.core.$strict>;
675
+ }, z.core.$strip>, z.ZodObject<{
676
+ type: z.ZodLiteral<"setNodeProps">;
677
+ kind: z.ZodLiteral<"video-source">;
678
+ id: z.ZodString;
679
+ props: z.ZodObject<{
680
+ videoUrl: z.ZodOptional<z.ZodString>;
681
+ assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
682
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
683
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
567
684
  }, z.core.$strict>;
568
685
  }, z.core.$strip>, z.ZodObject<{
569
686
  type: z.ZodLiteral<"setNodeProps">;
@@ -587,6 +704,7 @@ declare const PatchSchema: z.ZodObject<{
587
704
  default: z.ZodOptional<z.ZodNullable<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>>;
588
705
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
589
706
  description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
707
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
590
708
  }, z.core.$strict>;
591
709
  }, z.core.$strip>], "kind">, z.ZodObject<{
592
710
  type: z.ZodLiteral<"setNodeSetting">;
@@ -673,6 +791,26 @@ declare const PatchSchema: z.ZodObject<{
673
791
  type: z.ZodLiteral<"setDocumentProps">;
674
792
  props: z.ZodObject<{
675
793
  label: z.ZodOptional<z.ZodString>;
794
+ view: z.ZodOptional<z.ZodNullable<z.ZodObject<{
795
+ edgeRouting: z.ZodOptional<z.ZodEnum<{
796
+ curved: "curved";
797
+ orthogonal: "orthogonal";
798
+ }>>;
799
+ wires: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
800
+ from: z.ZodObject<{
801
+ x: z.ZodNumber;
802
+ y: z.ZodNumber;
803
+ }, z.core.$strip>;
804
+ to: z.ZodObject<{
805
+ x: z.ZodNumber;
806
+ y: z.ZodNumber;
807
+ }, z.core.$strip>;
808
+ points: z.ZodArray<z.ZodObject<{
809
+ x: z.ZodNumber;
810
+ y: z.ZodNumber;
811
+ }, z.core.$strip>>;
812
+ }, z.core.$strip>>>;
813
+ }, z.core.$strict>>>;
676
814
  }, z.core.$strict>;
677
815
  }, z.core.$strip>], "type">>;
678
816
  idempotencyKey: z.ZodOptional<z.ZodString>;
@@ -801,7 +939,7 @@ interface CharacterReference {
801
939
  }
802
940
  /** `awaiting_decision` (P3 J2) is a run PARKED on a human decision at a judge
803
941
  * node: not terminal, not a failure, and polling will never clear it. */
804
- type RunStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'partial' | 'awaiting_decision' | (string & {});
942
+ type RunStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'partial' | 'awaiting_decision' | 'cancelled' | (string & {});
805
943
  type NodeStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'awaiting_decision' | (string & {});
806
944
  /** One candidate a parked judge node is waiting on a decision about. The url
807
945
  * is signed per response; `generationId` is what a decision names. */
@@ -816,6 +954,8 @@ interface JudgeCandidate {
816
954
  }
817
955
  interface NodeRun {
818
956
  nodeId: string;
957
+ /** The node-run (generation) id; pinnable via `upstreamGenerations`. */
958
+ id?: string;
819
959
  status: NodeStatus;
820
960
  jobId?: string | null;
821
961
  resultUrl?: string | null;
@@ -936,7 +1076,7 @@ interface TaskDescriptor {
936
1076
  inputs: Array<{
937
1077
  port: string;
938
1078
  wireable: boolean;
939
- cardinality: 'one' | 'none';
1079
+ cardinality: 'one' | 'two' | 'many' | 'none';
940
1080
  binding: {
941
1081
  key: string;
942
1082
  path: string;
@@ -1109,6 +1249,7 @@ declare class StudioClient {
1109
1249
  definitionId?: string;
1110
1250
  params?: Record<string, unknown>;
1111
1251
  nodeIds?: string[];
1252
+ upstreamGenerations?: Record<string, string>;
1112
1253
  runs?: number;
1113
1254
  savedId?: string;
1114
1255
  visibility?: 'listed' | 'unlisted';
@@ -1136,7 +1277,9 @@ declare class StudioClient {
1136
1277
  getRunNodeUrl(runId: string, nodeId: string): Promise<NodeResultResponse>;
1137
1278
  /** S9: a rendered diagram of a saved workflow's document, so an agent can
1138
1279
  * see the graph it just built. */
1139
- getWorkflowScreenshot(savedId: string): Promise<{
1280
+ getWorkflowScreenshot(savedId: string, opts?: {
1281
+ projectId?: string;
1282
+ }): Promise<{
1140
1283
  url: string;
1141
1284
  width: number;
1142
1285
  height: number;
@@ -1185,8 +1328,11 @@ declare class StudioClient {
1185
1328
  savedId?: string;
1186
1329
  }): Promise<Record<string, unknown>>;
1187
1330
  describeNodeTypes(): Promise<NodeTypesResponse>;
1188
- /** `savedId` carries a `saved:` prefix; the colon is URL-encoded. */
1189
- getWorkflowDocument(savedId: string): Promise<WorkflowDocumentResponse>;
1331
+ /** `savedId` carries a `saved:` prefix; the colon is URL-encoded. `projectId`
1332
+ * names the project the workflow lives in; absent, the Studio's default. */
1333
+ getWorkflowDocument(savedId: string, opts?: {
1334
+ projectId?: string;
1335
+ }): Promise<WorkflowDocumentResponse>;
1190
1336
  /** Create a document by applying `ops` to an empty one (the same code path as apply). */
1191
1337
  createWorkflow(body: {
1192
1338
  ops: Op[];
@@ -1200,6 +1346,7 @@ declare class StudioClient {
1200
1346
  */
1201
1347
  applyWorkflowPatch(savedId: string, patch: Patch & {
1202
1348
  acknowledgeLossy?: boolean;
1349
+ projectId?: string;
1203
1350
  }): Promise<WorkflowApplyResponse>;
1204
1351
  /** Stateless dry-run of ops and run params against a document. No side effects. */
1205
1352
  validateWorkflow(body: {
@@ -1311,7 +1458,7 @@ declare function registerTools(server: McpServer, ctx: ToolContext): void;
1311
1458
  */
1312
1459
 
1313
1460
  declare const SERVER_NAME = "lumitra-studio";
1314
- declare const SERVER_VERSION = "0.1.0";
1461
+ declare const SERVER_VERSION = "0.2.0";
1315
1462
  interface CreateServerOptions {
1316
1463
  config?: StudioConfig;
1317
1464
  env?: NodeJS.ProcessEnv;
@@ -1360,6 +1507,7 @@ declare const studioWorkflowDescribe: ToolDef<{
1360
1507
  }>;
1361
1508
  declare const studioWorkflowGet: ToolDef<{
1362
1509
  savedId: z.ZodString;
1510
+ projectId: z.ZodOptional<z.ZodString>;
1363
1511
  full: z.ZodDefault<z.ZodBoolean>;
1364
1512
  }>;
1365
1513
  declare const studioWorkflowCreate: ToolDef<{
@@ -1388,6 +1536,7 @@ declare const studioWorkflowCreate: ToolDef<{
1388
1536
  "speech-to-speech": "speech-to-speech";
1389
1537
  "image-to-text": "image-to-text";
1390
1538
  "image-to-json": "image-to-json";
1539
+ "video-to-text": "video-to-text";
1391
1540
  judge: "judge";
1392
1541
  "text-generation": "text-generation";
1393
1542
  upscale: "upscale";
@@ -1403,17 +1552,27 @@ declare const studioWorkflowCreate: ToolDef<{
1403
1552
  }, z.core.$strip>>>;
1404
1553
  activeGeneration: z.ZodOptional<z.ZodString>;
1405
1554
  label: z.ZodOptional<z.ZodString>;
1555
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1406
1556
  }, z.core.$strip>, z.ZodObject<{
1407
1557
  id: z.ZodString;
1408
1558
  kind: z.ZodLiteral<"prompt-source">;
1409
1559
  text: z.ZodDefault<z.ZodString>;
1410
1560
  label: z.ZodOptional<z.ZodString>;
1561
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1411
1562
  }, z.core.$strip>, z.ZodObject<{
1412
1563
  id: z.ZodString;
1413
1564
  kind: z.ZodLiteral<"image-source">;
1414
1565
  imageUrl: z.ZodDefault<z.ZodString>;
1415
1566
  assetId: z.ZodOptional<z.ZodString>;
1416
1567
  label: z.ZodOptional<z.ZodString>;
1568
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1569
+ }, z.core.$strip>, z.ZodObject<{
1570
+ id: z.ZodString;
1571
+ kind: z.ZodLiteral<"video-source">;
1572
+ videoUrl: z.ZodDefault<z.ZodString>;
1573
+ assetId: z.ZodOptional<z.ZodString>;
1574
+ label: z.ZodOptional<z.ZodString>;
1575
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1417
1576
  }, z.core.$strip>, z.ZodObject<{
1418
1577
  id: z.ZodString;
1419
1578
  kind: z.ZodLiteral<"input">;
@@ -1434,6 +1593,7 @@ declare const studioWorkflowCreate: ToolDef<{
1434
1593
  default: z.ZodOptional<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>;
1435
1594
  label: z.ZodOptional<z.ZodString>;
1436
1595
  description: z.ZodOptional<z.ZodString>;
1596
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1437
1597
  }, z.core.$strip>], "kind">;
1438
1598
  position: z.ZodOptional<z.ZodObject<{
1439
1599
  x: z.ZodNumber;
@@ -1468,6 +1628,7 @@ declare const studioWorkflowCreate: ToolDef<{
1468
1628
  "speech-to-speech": "speech-to-speech";
1469
1629
  "image-to-text": "image-to-text";
1470
1630
  "image-to-json": "image-to-json";
1631
+ "video-to-text": "video-to-text";
1471
1632
  judge: "judge";
1472
1633
  "text-generation": "text-generation";
1473
1634
  upscale: "upscale";
@@ -1477,6 +1638,7 @@ declare const studioWorkflowCreate: ToolDef<{
1477
1638
  model: z.ZodOptional<z.ZodString>;
1478
1639
  prompt: z.ZodOptional<z.ZodString>;
1479
1640
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1641
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1480
1642
  }, z.core.$strict>;
1481
1643
  }, z.core.$strip>, z.ZodObject<{
1482
1644
  type: z.ZodLiteral<"setNodeProps">;
@@ -1485,6 +1647,7 @@ declare const studioWorkflowCreate: ToolDef<{
1485
1647
  props: z.ZodObject<{
1486
1648
  text: z.ZodOptional<z.ZodString>;
1487
1649
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1650
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1488
1651
  }, z.core.$strict>;
1489
1652
  }, z.core.$strip>, z.ZodObject<{
1490
1653
  type: z.ZodLiteral<"setNodeProps">;
@@ -1494,6 +1657,17 @@ declare const studioWorkflowCreate: ToolDef<{
1494
1657
  imageUrl: z.ZodOptional<z.ZodString>;
1495
1658
  assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1496
1659
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1660
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1661
+ }, z.core.$strict>;
1662
+ }, z.core.$strip>, z.ZodObject<{
1663
+ type: z.ZodLiteral<"setNodeProps">;
1664
+ kind: z.ZodLiteral<"video-source">;
1665
+ id: z.ZodString;
1666
+ props: z.ZodObject<{
1667
+ videoUrl: z.ZodOptional<z.ZodString>;
1668
+ assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1669
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1670
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1497
1671
  }, z.core.$strict>;
1498
1672
  }, z.core.$strip>, z.ZodObject<{
1499
1673
  type: z.ZodLiteral<"setNodeProps">;
@@ -1517,6 +1691,7 @@ declare const studioWorkflowCreate: ToolDef<{
1517
1691
  default: z.ZodOptional<z.ZodNullable<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>>;
1518
1692
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1519
1693
  description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1694
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1520
1695
  }, z.core.$strict>;
1521
1696
  }, z.core.$strip>], "kind">, z.ZodObject<{
1522
1697
  type: z.ZodLiteral<"setNodeSetting">;
@@ -1603,6 +1778,26 @@ declare const studioWorkflowCreate: ToolDef<{
1603
1778
  type: z.ZodLiteral<"setDocumentProps">;
1604
1779
  props: z.ZodObject<{
1605
1780
  label: z.ZodOptional<z.ZodString>;
1781
+ view: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1782
+ edgeRouting: z.ZodOptional<z.ZodEnum<{
1783
+ curved: "curved";
1784
+ orthogonal: "orthogonal";
1785
+ }>>;
1786
+ wires: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
1787
+ from: z.ZodObject<{
1788
+ x: z.ZodNumber;
1789
+ y: z.ZodNumber;
1790
+ }, z.core.$strip>;
1791
+ to: z.ZodObject<{
1792
+ x: z.ZodNumber;
1793
+ y: z.ZodNumber;
1794
+ }, z.core.$strip>;
1795
+ points: z.ZodArray<z.ZodObject<{
1796
+ x: z.ZodNumber;
1797
+ y: z.ZodNumber;
1798
+ }, z.core.$strip>>;
1799
+ }, z.core.$strip>>>;
1800
+ }, z.core.$strict>>>;
1606
1801
  }, z.core.$strict>;
1607
1802
  }, z.core.$strip>], "type">>;
1608
1803
  label: z.ZodOptional<z.ZodString>;
@@ -1610,6 +1805,7 @@ declare const studioWorkflowCreate: ToolDef<{
1610
1805
  }>;
1611
1806
  declare const studioWorkflowApply: ToolDef<{
1612
1807
  savedId: z.ZodString;
1808
+ projectId: z.ZodOptional<z.ZodString>;
1613
1809
  baseRevision: z.ZodNumber;
1614
1810
  ops: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
1615
1811
  type: z.ZodLiteral<"addNode">;
@@ -1636,6 +1832,7 @@ declare const studioWorkflowApply: ToolDef<{
1636
1832
  "speech-to-speech": "speech-to-speech";
1637
1833
  "image-to-text": "image-to-text";
1638
1834
  "image-to-json": "image-to-json";
1835
+ "video-to-text": "video-to-text";
1639
1836
  judge: "judge";
1640
1837
  "text-generation": "text-generation";
1641
1838
  upscale: "upscale";
@@ -1651,17 +1848,27 @@ declare const studioWorkflowApply: ToolDef<{
1651
1848
  }, z.core.$strip>>>;
1652
1849
  activeGeneration: z.ZodOptional<z.ZodString>;
1653
1850
  label: z.ZodOptional<z.ZodString>;
1851
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1654
1852
  }, z.core.$strip>, z.ZodObject<{
1655
1853
  id: z.ZodString;
1656
1854
  kind: z.ZodLiteral<"prompt-source">;
1657
1855
  text: z.ZodDefault<z.ZodString>;
1658
1856
  label: z.ZodOptional<z.ZodString>;
1857
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1659
1858
  }, z.core.$strip>, z.ZodObject<{
1660
1859
  id: z.ZodString;
1661
1860
  kind: z.ZodLiteral<"image-source">;
1662
1861
  imageUrl: z.ZodDefault<z.ZodString>;
1663
1862
  assetId: z.ZodOptional<z.ZodString>;
1664
1863
  label: z.ZodOptional<z.ZodString>;
1864
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1865
+ }, z.core.$strip>, z.ZodObject<{
1866
+ id: z.ZodString;
1867
+ kind: z.ZodLiteral<"video-source">;
1868
+ videoUrl: z.ZodDefault<z.ZodString>;
1869
+ assetId: z.ZodOptional<z.ZodString>;
1870
+ label: z.ZodOptional<z.ZodString>;
1871
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1665
1872
  }, z.core.$strip>, z.ZodObject<{
1666
1873
  id: z.ZodString;
1667
1874
  kind: z.ZodLiteral<"input">;
@@ -1682,6 +1889,7 @@ declare const studioWorkflowApply: ToolDef<{
1682
1889
  default: z.ZodOptional<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>;
1683
1890
  label: z.ZodOptional<z.ZodString>;
1684
1891
  description: z.ZodOptional<z.ZodString>;
1892
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1685
1893
  }, z.core.$strip>], "kind">;
1686
1894
  position: z.ZodOptional<z.ZodObject<{
1687
1895
  x: z.ZodNumber;
@@ -1716,6 +1924,7 @@ declare const studioWorkflowApply: ToolDef<{
1716
1924
  "speech-to-speech": "speech-to-speech";
1717
1925
  "image-to-text": "image-to-text";
1718
1926
  "image-to-json": "image-to-json";
1927
+ "video-to-text": "video-to-text";
1719
1928
  judge: "judge";
1720
1929
  "text-generation": "text-generation";
1721
1930
  upscale: "upscale";
@@ -1725,6 +1934,7 @@ declare const studioWorkflowApply: ToolDef<{
1725
1934
  model: z.ZodOptional<z.ZodString>;
1726
1935
  prompt: z.ZodOptional<z.ZodString>;
1727
1936
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1937
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1728
1938
  }, z.core.$strict>;
1729
1939
  }, z.core.$strip>, z.ZodObject<{
1730
1940
  type: z.ZodLiteral<"setNodeProps">;
@@ -1733,6 +1943,7 @@ declare const studioWorkflowApply: ToolDef<{
1733
1943
  props: z.ZodObject<{
1734
1944
  text: z.ZodOptional<z.ZodString>;
1735
1945
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1946
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1736
1947
  }, z.core.$strict>;
1737
1948
  }, z.core.$strip>, z.ZodObject<{
1738
1949
  type: z.ZodLiteral<"setNodeProps">;
@@ -1742,6 +1953,17 @@ declare const studioWorkflowApply: ToolDef<{
1742
1953
  imageUrl: z.ZodOptional<z.ZodString>;
1743
1954
  assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1744
1955
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1956
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1957
+ }, z.core.$strict>;
1958
+ }, z.core.$strip>, z.ZodObject<{
1959
+ type: z.ZodLiteral<"setNodeProps">;
1960
+ kind: z.ZodLiteral<"video-source">;
1961
+ id: z.ZodString;
1962
+ props: z.ZodObject<{
1963
+ videoUrl: z.ZodOptional<z.ZodString>;
1964
+ assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1965
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1966
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1745
1967
  }, z.core.$strict>;
1746
1968
  }, z.core.$strip>, z.ZodObject<{
1747
1969
  type: z.ZodLiteral<"setNodeProps">;
@@ -1765,6 +1987,7 @@ declare const studioWorkflowApply: ToolDef<{
1765
1987
  default: z.ZodOptional<z.ZodNullable<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>>;
1766
1988
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1767
1989
  description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1990
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1768
1991
  }, z.core.$strict>;
1769
1992
  }, z.core.$strip>], "kind">, z.ZodObject<{
1770
1993
  type: z.ZodLiteral<"setNodeSetting">;
@@ -1851,6 +2074,26 @@ declare const studioWorkflowApply: ToolDef<{
1851
2074
  type: z.ZodLiteral<"setDocumentProps">;
1852
2075
  props: z.ZodObject<{
1853
2076
  label: z.ZodOptional<z.ZodString>;
2077
+ view: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2078
+ edgeRouting: z.ZodOptional<z.ZodEnum<{
2079
+ curved: "curved";
2080
+ orthogonal: "orthogonal";
2081
+ }>>;
2082
+ wires: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
2083
+ from: z.ZodObject<{
2084
+ x: z.ZodNumber;
2085
+ y: z.ZodNumber;
2086
+ }, z.core.$strip>;
2087
+ to: z.ZodObject<{
2088
+ x: z.ZodNumber;
2089
+ y: z.ZodNumber;
2090
+ }, z.core.$strip>;
2091
+ points: z.ZodArray<z.ZodObject<{
2092
+ x: z.ZodNumber;
2093
+ y: z.ZodNumber;
2094
+ }, z.core.$strip>>;
2095
+ }, z.core.$strip>>>;
2096
+ }, z.core.$strict>>>;
1854
2097
  }, z.core.$strict>;
1855
2098
  }, z.core.$strip>], "type">>;
1856
2099
  idempotencyKey: z.ZodOptional<z.ZodString>;
@@ -1884,6 +2127,7 @@ declare const studioWorkflowValidate: ToolDef<{
1884
2127
  "speech-to-speech": "speech-to-speech";
1885
2128
  "image-to-text": "image-to-text";
1886
2129
  "image-to-json": "image-to-json";
2130
+ "video-to-text": "video-to-text";
1887
2131
  judge: "judge";
1888
2132
  "text-generation": "text-generation";
1889
2133
  upscale: "upscale";
@@ -1899,17 +2143,27 @@ declare const studioWorkflowValidate: ToolDef<{
1899
2143
  }, z.core.$strip>>>;
1900
2144
  activeGeneration: z.ZodOptional<z.ZodString>;
1901
2145
  label: z.ZodOptional<z.ZodString>;
2146
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1902
2147
  }, z.core.$strip>, z.ZodObject<{
1903
2148
  id: z.ZodString;
1904
2149
  kind: z.ZodLiteral<"prompt-source">;
1905
2150
  text: z.ZodDefault<z.ZodString>;
1906
2151
  label: z.ZodOptional<z.ZodString>;
2152
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1907
2153
  }, z.core.$strip>, z.ZodObject<{
1908
2154
  id: z.ZodString;
1909
2155
  kind: z.ZodLiteral<"image-source">;
1910
2156
  imageUrl: z.ZodDefault<z.ZodString>;
1911
2157
  assetId: z.ZodOptional<z.ZodString>;
1912
2158
  label: z.ZodOptional<z.ZodString>;
2159
+ collapsed: z.ZodOptional<z.ZodBoolean>;
2160
+ }, z.core.$strip>, z.ZodObject<{
2161
+ id: z.ZodString;
2162
+ kind: z.ZodLiteral<"video-source">;
2163
+ videoUrl: z.ZodDefault<z.ZodString>;
2164
+ assetId: z.ZodOptional<z.ZodString>;
2165
+ label: z.ZodOptional<z.ZodString>;
2166
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1913
2167
  }, z.core.$strip>, z.ZodObject<{
1914
2168
  id: z.ZodString;
1915
2169
  kind: z.ZodLiteral<"input">;
@@ -1930,6 +2184,7 @@ declare const studioWorkflowValidate: ToolDef<{
1930
2184
  default: z.ZodOptional<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>;
1931
2185
  label: z.ZodOptional<z.ZodString>;
1932
2186
  description: z.ZodOptional<z.ZodString>;
2187
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1933
2188
  }, z.core.$strip>], "kind">>;
1934
2189
  edges: z.ZodArray<z.ZodObject<{
1935
2190
  source: z.ZodString;
@@ -1953,8 +2208,29 @@ declare const studioWorkflowValidate: ToolDef<{
1953
2208
  label: z.ZodOptional<z.ZodString>;
1954
2209
  nodeIds: z.ZodArray<z.ZodString>;
1955
2210
  }, z.core.$strip>>>;
2211
+ view: z.ZodOptional<z.ZodObject<{
2212
+ edgeRouting: z.ZodOptional<z.ZodEnum<{
2213
+ curved: "curved";
2214
+ orthogonal: "orthogonal";
2215
+ }>>;
2216
+ wires: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
2217
+ from: z.ZodObject<{
2218
+ x: z.ZodNumber;
2219
+ y: z.ZodNumber;
2220
+ }, z.core.$strip>;
2221
+ to: z.ZodObject<{
2222
+ x: z.ZodNumber;
2223
+ y: z.ZodNumber;
2224
+ }, z.core.$strip>;
2225
+ points: z.ZodArray<z.ZodObject<{
2226
+ x: z.ZodNumber;
2227
+ y: z.ZodNumber;
2228
+ }, z.core.$strip>>;
2229
+ }, z.core.$strip>>>;
2230
+ }, z.core.$strip>>;
1956
2231
  }, z.core.$strip>>;
1957
2232
  savedId: z.ZodOptional<z.ZodString>;
2233
+ projectId: z.ZodOptional<z.ZodString>;
1958
2234
  ops: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
1959
2235
  type: z.ZodLiteral<"addNode">;
1960
2236
  node: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -1980,6 +2256,7 @@ declare const studioWorkflowValidate: ToolDef<{
1980
2256
  "speech-to-speech": "speech-to-speech";
1981
2257
  "image-to-text": "image-to-text";
1982
2258
  "image-to-json": "image-to-json";
2259
+ "video-to-text": "video-to-text";
1983
2260
  judge: "judge";
1984
2261
  "text-generation": "text-generation";
1985
2262
  upscale: "upscale";
@@ -1995,17 +2272,27 @@ declare const studioWorkflowValidate: ToolDef<{
1995
2272
  }, z.core.$strip>>>;
1996
2273
  activeGeneration: z.ZodOptional<z.ZodString>;
1997
2274
  label: z.ZodOptional<z.ZodString>;
2275
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1998
2276
  }, z.core.$strip>, z.ZodObject<{
1999
2277
  id: z.ZodString;
2000
2278
  kind: z.ZodLiteral<"prompt-source">;
2001
2279
  text: z.ZodDefault<z.ZodString>;
2002
2280
  label: z.ZodOptional<z.ZodString>;
2281
+ collapsed: z.ZodOptional<z.ZodBoolean>;
2003
2282
  }, z.core.$strip>, z.ZodObject<{
2004
2283
  id: z.ZodString;
2005
2284
  kind: z.ZodLiteral<"image-source">;
2006
2285
  imageUrl: z.ZodDefault<z.ZodString>;
2007
2286
  assetId: z.ZodOptional<z.ZodString>;
2008
2287
  label: z.ZodOptional<z.ZodString>;
2288
+ collapsed: z.ZodOptional<z.ZodBoolean>;
2289
+ }, z.core.$strip>, z.ZodObject<{
2290
+ id: z.ZodString;
2291
+ kind: z.ZodLiteral<"video-source">;
2292
+ videoUrl: z.ZodDefault<z.ZodString>;
2293
+ assetId: z.ZodOptional<z.ZodString>;
2294
+ label: z.ZodOptional<z.ZodString>;
2295
+ collapsed: z.ZodOptional<z.ZodBoolean>;
2009
2296
  }, z.core.$strip>, z.ZodObject<{
2010
2297
  id: z.ZodString;
2011
2298
  kind: z.ZodLiteral<"input">;
@@ -2026,6 +2313,7 @@ declare const studioWorkflowValidate: ToolDef<{
2026
2313
  default: z.ZodOptional<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>;
2027
2314
  label: z.ZodOptional<z.ZodString>;
2028
2315
  description: z.ZodOptional<z.ZodString>;
2316
+ collapsed: z.ZodOptional<z.ZodBoolean>;
2029
2317
  }, z.core.$strip>], "kind">;
2030
2318
  position: z.ZodOptional<z.ZodObject<{
2031
2319
  x: z.ZodNumber;
@@ -2060,6 +2348,7 @@ declare const studioWorkflowValidate: ToolDef<{
2060
2348
  "speech-to-speech": "speech-to-speech";
2061
2349
  "image-to-text": "image-to-text";
2062
2350
  "image-to-json": "image-to-json";
2351
+ "video-to-text": "video-to-text";
2063
2352
  judge: "judge";
2064
2353
  "text-generation": "text-generation";
2065
2354
  upscale: "upscale";
@@ -2069,6 +2358,7 @@ declare const studioWorkflowValidate: ToolDef<{
2069
2358
  model: z.ZodOptional<z.ZodString>;
2070
2359
  prompt: z.ZodOptional<z.ZodString>;
2071
2360
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2361
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
2072
2362
  }, z.core.$strict>;
2073
2363
  }, z.core.$strip>, z.ZodObject<{
2074
2364
  type: z.ZodLiteral<"setNodeProps">;
@@ -2077,6 +2367,7 @@ declare const studioWorkflowValidate: ToolDef<{
2077
2367
  props: z.ZodObject<{
2078
2368
  text: z.ZodOptional<z.ZodString>;
2079
2369
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2370
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
2080
2371
  }, z.core.$strict>;
2081
2372
  }, z.core.$strip>, z.ZodObject<{
2082
2373
  type: z.ZodLiteral<"setNodeProps">;
@@ -2086,6 +2377,17 @@ declare const studioWorkflowValidate: ToolDef<{
2086
2377
  imageUrl: z.ZodOptional<z.ZodString>;
2087
2378
  assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2088
2379
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2380
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
2381
+ }, z.core.$strict>;
2382
+ }, z.core.$strip>, z.ZodObject<{
2383
+ type: z.ZodLiteral<"setNodeProps">;
2384
+ kind: z.ZodLiteral<"video-source">;
2385
+ id: z.ZodString;
2386
+ props: z.ZodObject<{
2387
+ videoUrl: z.ZodOptional<z.ZodString>;
2388
+ assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2389
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2390
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
2089
2391
  }, z.core.$strict>;
2090
2392
  }, z.core.$strip>, z.ZodObject<{
2091
2393
  type: z.ZodLiteral<"setNodeProps">;
@@ -2109,6 +2411,7 @@ declare const studioWorkflowValidate: ToolDef<{
2109
2411
  default: z.ZodOptional<z.ZodNullable<z.ZodType<JsonNonNullValue, unknown, z.core.$ZodTypeInternals<JsonNonNullValue, unknown>>>>;
2110
2412
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2111
2413
  description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2414
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
2112
2415
  }, z.core.$strict>;
2113
2416
  }, z.core.$strip>], "kind">, z.ZodObject<{
2114
2417
  type: z.ZodLiteral<"setNodeSetting">;
@@ -2195,12 +2498,33 @@ declare const studioWorkflowValidate: ToolDef<{
2195
2498
  type: z.ZodLiteral<"setDocumentProps">;
2196
2499
  props: z.ZodObject<{
2197
2500
  label: z.ZodOptional<z.ZodString>;
2501
+ view: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2502
+ edgeRouting: z.ZodOptional<z.ZodEnum<{
2503
+ curved: "curved";
2504
+ orthogonal: "orthogonal";
2505
+ }>>;
2506
+ wires: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
2507
+ from: z.ZodObject<{
2508
+ x: z.ZodNumber;
2509
+ y: z.ZodNumber;
2510
+ }, z.core.$strip>;
2511
+ to: z.ZodObject<{
2512
+ x: z.ZodNumber;
2513
+ y: z.ZodNumber;
2514
+ }, z.core.$strip>;
2515
+ points: z.ZodArray<z.ZodObject<{
2516
+ x: z.ZodNumber;
2517
+ y: z.ZodNumber;
2518
+ }, z.core.$strip>>;
2519
+ }, z.core.$strip>>>;
2520
+ }, z.core.$strict>>>;
2198
2521
  }, z.core.$strict>;
2199
2522
  }, z.core.$strip>], "type">>>;
2200
2523
  params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2201
2524
  }>;
2202
2525
  declare const studioWorkflowScreenshot: ToolDef<{
2203
2526
  savedId: z.ZodString;
2527
+ projectId: z.ZodOptional<z.ZodString>;
2204
2528
  }>;
2205
2529
  /** The six primitives, in registration order. */
2206
2530
  declare const WORKFLOW_TOOLS: readonly ToolDef<z.ZodRawShape>[];
@@ -2234,6 +2558,7 @@ interface NodeSummary {
2234
2558
  promptLength?: number;
2235
2559
  /** Image-source nodes: the url clipped; empty means still uploading. */
2236
2560
  imageUrl?: string;
2561
+ videoUrl?: string;
2237
2562
  /** Input nodes (declared run parameters). */
2238
2563
  name?: string;
2239
2564
  type?: string;
@@ -2392,14 +2717,60 @@ declare function characterSheetDefinition(overrides?: {
2392
2717
  declare const DEFAULT_SWAP_EDIT_MODEL = "fal/nano-banana-2-edit";
2393
2718
  /** Single start-frame animation. */
2394
2719
  declare const DEFAULT_SWAP_VIDEO_MODEL = "fal/seedance-pro-image-to-video";
2395
- declare const DEFAULT_SWAP_PROMPT = "Replace the person in the first image with the person from the second image. Keep the pose, framing, camera angle, clothing fit, lighting, background, and every other pixel of the scene identical. Match the face, hair, and body of the second image exactly. Photorealistic, no artifacts.";
2396
- declare const DEFAULT_MOTION_PROMPT = "Natural, subtle motion that continues the scene: gentle camera movement, realistic body motion, consistent lighting. Keep the person identical to the still.";
2720
+ /**
2721
+ * How much of the person a swap replaces. The rest of the shot always comes
2722
+ * from the footage: pose, expression, gaze, hands, clothing, lighting, focus,
2723
+ * framing and background.
2724
+ *
2725
+ * - `identity` (the default): face, head and hair come from the character; the
2726
+ * footage keeps its body. The smallest change, so the fewest things can break.
2727
+ * - `full_body`: the character's body proportions too. The silhouette changes,
2728
+ * so whatever the old body covered has to be reconstructed and every contact
2729
+ * point (a hand on a tool, a shoulder behind a door) re-derived; say so before
2730
+ * spending on it.
2731
+ *
2732
+ * Identity is the default because an unspecified scope should preserve the
2733
+ * source, never quietly widen the edit.
2734
+ */
2735
+ declare const SWAP_SCOPES: readonly ["identity", "full_body"];
2736
+ type SwapScope = (typeof SWAP_SCOPES)[number];
2737
+ interface SwapPromptOptions {
2738
+ scope?: SwapScope;
2739
+ /**
2740
+ * Shot-specific constraints most likely to fail here, as concrete
2741
+ * relationships from an analysis of this shot, e.g. "keep the open door in
2742
+ * front of his body". Each becomes its own sentence.
2743
+ */
2744
+ preserve?: string[];
2745
+ }
2746
+ /**
2747
+ * The still-swap edit prompt for a declared scope.
2748
+ *
2749
+ * Deliberately short and literal. It names what changes, which image supplies
2750
+ * it, and what the first image keeps. It carries no realism suffix
2751
+ * ("photorealistic, no artifacts") and no promise that every pixel stays
2752
+ * identical: an edit model cannot guarantee either, and the suffix is how a
2753
+ * deliberately soft, defocused subject came back tack-sharp on real footage.
2754
+ * Untouched pixels are kept by compositing after the edit, not by asking.
2755
+ */
2756
+ declare function composeSwapPrompt(options?: SwapPromptOptions): string;
2757
+ /** The identity-scope prompt, the one a swap gets when nothing is declared. */
2758
+ declare const DEFAULT_SWAP_PROMPT: string;
2759
+ /**
2760
+ * The motion prompt when none is given. It asks for NO camera move: in a
2761
+ * replacement the camera belongs to the original footage, and a model told to
2762
+ * add "gentle camera movement" invents one the edit then has to fight.
2763
+ */
2764
+ declare const DEFAULT_MOTION_PROMPT = "Continue the scene as photographed: keep the camera position and framing of the still, move the person naturally and continuously, and keep the lighting consistent. Add no camera movement.";
2397
2765
  interface CharacterSwapInput {
2398
2766
  sceneFrameUrl: string;
2399
2767
  characterImageUrl: string;
2400
2768
  /** A second, already-swapped keyframe for the END of the clip (Kling start+end). */
2401
2769
  endFrameUrl?: string;
2770
+ /** Replaces the composed prompt entirely; `scope` and `preserve` are then ignored. */
2402
2771
  swapPrompt?: string;
2772
+ scope?: SwapScope;
2773
+ preserve?: string[];
2403
2774
  motionPrompt?: string;
2404
2775
  editModel?: string;
2405
2776
  /** Explicit video model; when absent, Seedance for one frame, Kling when endFrameUrl is set. */
@@ -2440,4 +2811,4 @@ declare function parseArgs(argv: string[]): CliArgs;
2440
2811
  declare function createHttpHandler(): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
2441
2812
  declare function main(argv?: string[]): Promise<void>;
2442
2813
 
2443
- export { type AllTenantsUsageResponse, type Binding, CHARACTER_SHEET_DEFINITION, CHARACTER_SHEET_NODES, type CharacterReference, type CharacterSummary, type CharacterSwapInput, ConfigError, ContractError, type CreateServerOptions, DEFAULT_BASE_URL, DEFAULT_MOTION_PROMPT, DEFAULT_SWAP_EDIT_MODEL, DEFAULT_SWAP_PROMPT, DEFAULT_SWAP_VIDEO_MODEL, DEFAULT_TIMEOUT_MS, type DocumentSummary, type FetchLike, type JobResponse, type JobStatus, type JudgeCandidate, MINT_REFERENCE_CATEGORIES, type NodeResultResponse, type NodeRun, type NodeStatus, type NodeSummary, type NodeTypesResponse, type PollOptions, PollTimeoutError, type ProjectSummary, type Projection, type RemovedNode, type RunResponse, type RunStartResponse, type RunStatus, SERVER_NAME, SERVER_VERSION, SUMMARY_TEXT_CHARS, type SpendLedger, StudioApiError, StudioClient, type StudioClientOptions, type StudioConfig, type StudioMcp, type SummaryMeta, TOOLS, TOOL_NAMES, type TaskDescriptor, type TenantSpendSummary, type TenantUsageResponse, type ToolContext, type ToolDef, ToolInputError, type ToolResult, type TurnaroundView, type UploadFile, type UsageByModel, type UsageResponse, WORKFLOW_TOOLS, type WorkflowApplyResponse, type WorkflowCreateResponse, type WorkflowDefinition, type WorkflowDocumentResponse, type WorkflowNode, type WorkflowValidateResponse, affectedNodes, buildCharacterSheetParams, buildCharacterSwapDefinition, categoryForNode, characterSheetDefinition, createHttpHandler, createStudioMcpServer, extensionForMime, filenameFromUrl, invokeTool, main, mimeForFilename, parseArgs, parseDocument, parseOps, pollUntil, projectionOf, redactSecret, registerTools, resolveConfig, seedFacePrompt, studioWorkflowApply, studioWorkflowCreate, studioWorkflowDescribe, studioWorkflowGet, studioWorkflowScreenshot, studioWorkflowValidate, summarizeDocument, summarizeNode, touchedNodeIds, turnaroundViewPrompt, waitForJob, waitForRun };
2814
+ export { type AllTenantsUsageResponse, type Binding, CHARACTER_SHEET_DEFINITION, CHARACTER_SHEET_NODES, type CharacterReference, type CharacterSummary, type CharacterSwapInput, ConfigError, ContractError, type CreateServerOptions, DEFAULT_BASE_URL, DEFAULT_MOTION_PROMPT, DEFAULT_SWAP_EDIT_MODEL, DEFAULT_SWAP_PROMPT, DEFAULT_SWAP_VIDEO_MODEL, DEFAULT_TIMEOUT_MS, type DocumentSummary, type FetchLike, type JobResponse, type JobStatus, type JudgeCandidate, MINT_REFERENCE_CATEGORIES, type NodeResultResponse, type NodeRun, type NodeStatus, type NodeSummary, type NodeTypesResponse, type PollOptions, PollTimeoutError, type ProjectSummary, type Projection, type RemovedNode, type RunResponse, type RunStartResponse, type RunStatus, SERVER_NAME, SERVER_VERSION, SUMMARY_TEXT_CHARS, SWAP_SCOPES, type SpendLedger, StudioApiError, StudioClient, type StudioClientOptions, type StudioConfig, type StudioMcp, type SummaryMeta, type SwapPromptOptions, type SwapScope, TOOLS, TOOL_NAMES, type TaskDescriptor, type TenantSpendSummary, type TenantUsageResponse, type ToolContext, type ToolDef, ToolInputError, type ToolResult, type TurnaroundView, type UploadFile, type UsageByModel, type UsageResponse, WORKFLOW_TOOLS, type WorkflowApplyResponse, type WorkflowCreateResponse, type WorkflowDefinition, type WorkflowDocumentResponse, type WorkflowNode, type WorkflowValidateResponse, affectedNodes, buildCharacterSheetParams, buildCharacterSwapDefinition, categoryForNode, characterSheetDefinition, composeSwapPrompt, createHttpHandler, createStudioMcpServer, extensionForMime, filenameFromUrl, invokeTool, main, mimeForFilename, parseArgs, parseDocument, parseOps, pollUntil, projectionOf, redactSecret, registerTools, resolveConfig, seedFacePrompt, studioWorkflowApply, studioWorkflowCreate, studioWorkflowDescribe, studioWorkflowGet, studioWorkflowScreenshot, studioWorkflowValidate, summarizeDocument, summarizeNode, touchedNodeIds, turnaroundViewPrompt, waitForJob, waitForRun };