@uemcp/server 0.4.0 → 1.1.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.
Files changed (3) hide show
  1. package/README.md +75 -0
  2. package/dist/index.mjs +1856 -125
  3. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -420,6 +420,63 @@ const BRIDGE_STOP_TRACE_STATES = [
420
420
  "not_tracing",
421
421
  "unsupported"
422
422
  ];
423
+ const BRIDGE_LIST_ACTORS_REQUEST_TYPE = "list_actors";
424
+ const BRIDGE_GET_ACTOR_DETAILS_REQUEST_TYPE = "get_actor_details";
425
+ const BRIDGE_GET_CURRENT_LEVEL_REQUEST_TYPE = "get_current_level";
426
+ const BRIDGE_SPAWN_ACTOR_REQUEST_TYPE = "spawn_actor";
427
+ const BRIDGE_DESTROY_ACTOR_REQUEST_TYPE = "destroy_actor";
428
+ const BRIDGE_UNDO_REQUEST_TYPE = "undo";
429
+ const BRIDGE_REDO_REQUEST_TYPE = "redo";
430
+ const BRIDGE_LEVEL_EDIT_STATES = [
431
+ "applied",
432
+ "validated",
433
+ "unsupported"
434
+ ];
435
+ const BRIDGE_SET_ACTOR_TRANSFORM_REQUEST_TYPE = "set_actor_transform";
436
+ const BRIDGE_SET_ACTOR_PROPERTY_REQUEST_TYPE = "set_actor_property";
437
+ const BRIDGE_SELECT_ACTORS_REQUEST_TYPE = "select_actors";
438
+ const BRIDGE_PROPERTY_VALUE_MAX_CHARS = 4096;
439
+ const BRIDGE_UNDO_STATES = [
440
+ "undone",
441
+ "nothing_to_undo",
442
+ "unsupported"
443
+ ];
444
+ const BRIDGE_REDO_STATES = [
445
+ "redone",
446
+ "nothing_to_redo",
447
+ "unsupported"
448
+ ];
449
+ const BRIDGE_OPEN_LEVEL_REQUEST_TYPE = "open_level";
450
+ const BRIDGE_GET_OPEN_LEVEL_STATUS_REQUEST_TYPE = "get_open_level_status";
451
+ const BRIDGE_OPEN_LEVEL_STATES = [
452
+ "opening",
453
+ "validated",
454
+ "unsupported"
455
+ ];
456
+ const BRIDGE_OPEN_LEVEL_STATUS_STATES = [
457
+ "opening",
458
+ "succeeded",
459
+ "failed",
460
+ "unknown_job"
461
+ ];
462
+ const BRIDGE_READ_DATA_TABLE_REQUEST_TYPE = "read_data_table";
463
+ const BRIDGE_WRITE_DATA_TABLE_ROW_REQUEST_TYPE = "write_data_table_row";
464
+ const BRIDGE_EXPORT_DATA_TABLE_REQUEST_TYPE = "export_data_table";
465
+ const BRIDGE_IMPORT_DATA_TABLE_REQUEST_TYPE = "import_data_table";
466
+ const BRIDGE_CREATE_DATA_TABLE_REQUEST_TYPE = "create_data_table";
467
+ const BRIDGE_RENAME_DATA_TABLE_REQUEST_TYPE = "rename_data_table";
468
+ const BRIDGE_DELETE_DATA_TABLE_REQUEST_TYPE = "delete_data_table";
469
+ const BRIDGE_RENAME_DATA_TABLE_ROW_REQUEST_TYPE = "rename_data_table_row";
470
+ const BRIDGE_DATA_TABLE_VALUE_MAX_CHARS = 4096;
471
+ const BRIDGE_DATA_TABLE_ROW_OPERATIONS = ["upsert", "delete"];
472
+ const BRIDGE_DATA_TABLE_WRITE_STATES = [
473
+ "applied",
474
+ "validated",
475
+ "unsupported"
476
+ ];
477
+ const BRIDGE_DATA_TABLE_FORMATS = ["json", "csv"];
478
+ const BRIDGE_DATA_TABLE_MAX_EXPORT_CHARS = 24576;
479
+ const BRIDGE_DATA_TABLE_MAX_IMPORT_CHARS = 16384;
423
480
  const requestIdSchema = z.string().trim().min(1);
424
481
  const nonEmptyStringSchema = z.string().trim().min(1);
425
482
  const boundedStringSchema = z.string().trim().max(512);
@@ -490,7 +547,11 @@ const parentClassSchema = z.string().trim().min(1).max(128);
490
547
  const moduleNameSchema = z.string().trim().min(1).max(128);
491
548
  const classPathSchema = z.string().trim().min(1).max(512);
492
549
  const sourceFilePathSchema = z.string().trim().min(1);
493
- const selectedActorArraySchema = z.array(z.string()).max(100);
550
+ const bridgeSelectedActorSchema = z.object({
551
+ actorPath: z.string(),
552
+ label: z.string()
553
+ });
554
+ const selectedActorArraySchema = z.array(bridgeSelectedActorSchema).max(100);
494
555
  const activeModeArraySchema = z.array(z.string()).max(32);
495
556
  const packageNameArraySchema = z.array(z.string()).max(100);
496
557
  const screenshotPathSchema = z.string().trim().min(1);
@@ -511,35 +572,85 @@ const stopTraceStateSchema = z.enum(BRIDGE_STOP_TRACE_STATES);
511
572
  const traceChannelSchema = z.string().trim().min(1).max(64).regex(/^[A-Za-z0-9_]+$/);
512
573
  const traceChannelArraySchema = z.array(traceChannelSchema).max(32);
513
574
  const traceFileNameSchema = z.string().trim().min(1).max(128).regex(/^[A-Za-z0-9_-]+$/);
575
+ const actorPathSchema = z.string().trim().min(1).max(512);
576
+ const levelCursorSchema = z.number().int().min(0);
577
+ const levelMaxResultsSchema = z.number().int().min(1).max(100);
578
+ const actorDetailMemberLimitSchema = z.number().int().min(1).max(200);
579
+ const actorClassFilterArraySchema = z.array(assetPathSchema).max(32);
580
+ const levelEditStateSchema = z.enum(BRIDGE_LEVEL_EDIT_STATES);
581
+ const undoStateSchema = z.enum(BRIDGE_UNDO_STATES);
582
+ const redoStateSchema = z.enum(BRIDGE_REDO_STATES);
583
+ const openLevelStateSchema = z.enum(BRIDGE_OPEN_LEVEL_STATES);
584
+ const openLevelStatusStateSchema = z.enum(BRIDGE_OPEN_LEVEL_STATUS_STATES);
585
+ const openLevelJobIdSchema = z.string().trim().min(1);
586
+ const levelPathSchema = z.string().trim().min(1).max(512);
587
+ const actorPathBatchSchema = z.array(actorPathSchema).min(1).max(64);
588
+ const actorTagArraySchema = z.array(boundedStringSchema).max(16);
589
+ const dataTableCursorSchema = z.number().int().min(0);
590
+ const dataTableMaxRowsSchema = z.number().int().min(1).max(100);
591
+ const dataTableRowNameSchema = z.string().trim().min(1).max(256);
592
+ const dataTableRowOperationSchema = z.enum(BRIDGE_DATA_TABLE_ROW_OPERATIONS);
593
+ const dataTableWriteStateSchema = z.enum(BRIDGE_DATA_TABLE_WRITE_STATES);
594
+ const dataTableFormatSchema = z.enum(BRIDGE_DATA_TABLE_FORMATS);
595
+ const dataTableValueMapSchema = z.record(z.string().trim().min(1).max(256), z.string().max(BRIDGE_DATA_TABLE_VALUE_MAX_CHARS)).refine((value) => Object.keys(value).length <= 200, { message: `A write carries at most ${String(200)} columns.` });
596
+ const dataTableImportContentSchema = z.string().min(1).max(BRIDGE_DATA_TABLE_MAX_IMPORT_CHARS);
597
+ const dataTableAssetNameSchema = z.string().trim().min(1).max(256).refine((value) => !value.includes("/") && !value.includes("."), { message: "An asset name must not contain a path separator; use destinationPath to move the asset." });
598
+ const vectorInputSchema = z.object({
599
+ x: z.number().default(0),
600
+ y: z.number().default(0),
601
+ z: z.number().default(0)
602
+ });
603
+ const rotatorInputSchema = z.object({
604
+ pitch: z.number().default(0),
605
+ roll: z.number().default(0),
606
+ yaw: z.number().default(0)
607
+ });
608
+ const transformInputSchema = z.object({
609
+ location: vectorInputSchema.default({
610
+ x: 0,
611
+ y: 0,
612
+ z: 0
613
+ }),
614
+ rotation: rotatorInputSchema.default({
615
+ pitch: 0,
616
+ roll: 0,
617
+ yaw: 0
618
+ }),
619
+ scale: vectorInputSchema.default({
620
+ x: 1,
621
+ y: 1,
622
+ z: 1
623
+ })
624
+ });
514
625
  const memoryMegabytesSchema = z.number().min(0);
515
626
  const frameTimingMillisecondsSchema = z.number().min(0);
516
627
  z.object({
517
628
  requestId: requestIdSchema,
518
629
  type: z.literal(BRIDGE_PING_REQUEST_TYPE),
519
- version: z.literal(1)
630
+ version: z.literal(2)
520
631
  });
521
632
  z.object({
522
633
  requestId: requestIdSchema,
523
634
  type: z.literal(BRIDGE_START_LIVE_COMPILE_REQUEST_TYPE),
524
- version: z.literal(1)
635
+ version: z.literal(2)
525
636
  });
526
637
  z.object({
527
638
  requestId: requestIdSchema,
528
639
  type: z.literal(BRIDGE_START_HOT_RELOAD_REQUEST_TYPE),
529
- version: z.literal(1)
640
+ version: z.literal(2)
530
641
  });
531
642
  const bridgeGetCompileStatusRequestSchema = z.object({
532
643
  compileJobId: compileJobIdSchema,
533
644
  requestId: requestIdSchema,
534
645
  type: z.literal(BRIDGE_GET_COMPILE_STATUS_REQUEST_TYPE),
535
- version: z.literal(1)
646
+ version: z.literal(2)
536
647
  });
537
648
  const bridgeGetCrashCallstackRequestSchema = z.object({
538
649
  maxFrames: crashMaxFramesSchema,
539
650
  maxRecords: crashMaxRecordsSchema,
540
651
  requestId: requestIdSchema,
541
652
  type: z.literal(BRIDGE_GET_CRASH_CALLSTACK_REQUEST_TYPE),
542
- version: z.literal(1)
653
+ version: z.literal(2)
543
654
  });
544
655
  const bridgeErrorSchema = z.object({
545
656
  code: z.string().trim().min(1),
@@ -567,21 +678,21 @@ const bridgeLogSubscribeRequestSchema = z.union([
567
678
  requestId: requestIdSchema,
568
679
  source: z.literal("output_log"),
569
680
  type: z.literal(BRIDGE_SUBSCRIBE_LOGS_REQUEST_TYPE),
570
- version: z.literal(1)
681
+ version: z.literal(2)
571
682
  }),
572
683
  z.object({
573
684
  filters: bridgeMessageLogFilterSchema,
574
685
  requestId: requestIdSchema,
575
686
  source: z.literal("message_log"),
576
687
  type: z.literal(BRIDGE_SUBSCRIBE_LOGS_REQUEST_TYPE),
577
- version: z.literal(1)
688
+ version: z.literal(2)
578
689
  }),
579
690
  z.object({
580
691
  filters: bridgeDeviceOutputLogFilterSchema,
581
692
  requestId: requestIdSchema,
582
693
  source: z.literal("device_output_log"),
583
694
  type: z.literal(BRIDGE_SUBSCRIBE_LOGS_REQUEST_TYPE),
584
- version: z.literal(1)
695
+ version: z.literal(2)
585
696
  })
586
697
  ]);
587
698
  const bridgeLogDrainRequestSchema = z.object({
@@ -590,13 +701,13 @@ const bridgeLogDrainRequestSchema = z.object({
590
701
  requestId: requestIdSchema,
591
702
  subscriptionId: subscriptionIdSchema,
592
703
  type: z.literal(BRIDGE_DRAIN_LOGS_REQUEST_TYPE),
593
- version: z.literal(1)
704
+ version: z.literal(2)
594
705
  });
595
706
  z.object({
596
707
  requestId: requestIdSchema,
597
708
  subscriptionId: subscriptionIdSchema,
598
709
  type: z.literal(BRIDGE_UNSUBSCRIBE_LOGS_REQUEST_TYPE),
599
- version: z.literal(1)
710
+ version: z.literal(2)
600
711
  });
601
712
  const bridgeStartPieRequestSchema = z.object({
602
713
  map: pieMapSchema.optional(),
@@ -606,31 +717,31 @@ const bridgeStartPieRequestSchema = z.object({
606
717
  requestId: requestIdSchema,
607
718
  runUnderOneProcess: z.boolean().optional(),
608
719
  type: z.literal(BRIDGE_START_PIE_REQUEST_TYPE),
609
- version: z.literal(1)
720
+ version: z.literal(2)
610
721
  });
611
722
  const bridgeGetPieStatusRequestSchema = z.object({
612
723
  pieSessionId: pieSessionIdSchema.optional(),
613
724
  requestId: requestIdSchema,
614
725
  type: z.literal(BRIDGE_GET_PIE_STATUS_REQUEST_TYPE),
615
- version: z.literal(1)
726
+ version: z.literal(2)
616
727
  });
617
728
  z.object({
618
729
  requestId: requestIdSchema,
619
730
  type: z.literal(BRIDGE_LIST_LAUNCH_DEVICES_REQUEST_TYPE),
620
- version: z.literal(1)
731
+ version: z.literal(2)
621
732
  });
622
733
  const bridgeLaunchOnDeviceRequestSchema = z.object({
623
734
  deviceId: launchDeviceIdSchema,
624
735
  map: pieMapSchema.optional(),
625
736
  requestId: requestIdSchema,
626
737
  type: z.literal(BRIDGE_LAUNCH_ON_DEVICE_REQUEST_TYPE),
627
- version: z.literal(1)
738
+ version: z.literal(2)
628
739
  });
629
740
  const bridgeStopPieRequestSchema = z.object({
630
741
  pieSessionId: pieSessionIdSchema.optional(),
631
742
  requestId: requestIdSchema,
632
743
  type: z.literal(BRIDGE_STOP_PIE_REQUEST_TYPE),
633
- version: z.literal(1)
744
+ version: z.literal(2)
634
745
  });
635
746
  const bridgeListAutomationTestsRequestSchema = z.object({
636
747
  cursor: automationTestCursorSchema.default(0),
@@ -639,7 +750,7 @@ const bridgeListAutomationTestsRequestSchema = z.object({
639
750
  nameFilter: boundedStringSchema.optional(),
640
751
  requestId: requestIdSchema,
641
752
  type: z.literal(BRIDGE_LIST_AUTOMATION_TESTS_REQUEST_TYPE),
642
- version: z.literal(1)
753
+ version: z.literal(2)
643
754
  });
644
755
  const bridgeAutomationTestSchema = z.object({
645
756
  displayName: z.string(),
@@ -655,7 +766,7 @@ const bridgeStartAutomationRunRequestSchema = z.object({
655
766
  requestId: requestIdSchema,
656
767
  testNames: automationTestNamesSchema.default([]),
657
768
  type: z.literal(BRIDGE_START_AUTOMATION_RUN_REQUEST_TYPE),
658
- version: z.literal(1)
769
+ version: z.literal(2)
659
770
  }).refine((value) => value.testNames.length > 0 || value.nameFilter !== void 0 && value.nameFilter.length > 0, {
660
771
  message: "A start_automation_run request requires at least one of testNames or nameFilter.",
661
772
  path: ["testNames"]
@@ -666,30 +777,30 @@ const bridgeGetAutomationRunStatusRequestSchema = z.object({
666
777
  requestId: requestIdSchema,
667
778
  testRunId: testRunIdSchema,
668
779
  type: z.literal(BRIDGE_GET_AUTOMATION_RUN_STATUS_REQUEST_TYPE),
669
- version: z.literal(1)
780
+ version: z.literal(2)
670
781
  });
671
782
  const bridgeCancelAutomationRunRequestSchema = z.object({
672
783
  requestId: requestIdSchema,
673
784
  testRunId: testRunIdSchema,
674
785
  type: z.literal(BRIDGE_CANCEL_AUTOMATION_RUN_REQUEST_TYPE),
675
- version: z.literal(1)
786
+ version: z.literal(2)
676
787
  });
677
788
  z.object({
678
789
  requestId: requestIdSchema,
679
790
  type: z.literal(BRIDGE_GET_EDITOR_STATE_REQUEST_TYPE),
680
- version: z.literal(1)
791
+ version: z.literal(2)
681
792
  });
682
793
  const bridgeSaveDirtyPackagesRequestSchema = z.object({
683
794
  requestId: requestIdSchema,
684
795
  saveContentPackages: z.boolean().default(true),
685
796
  saveMapPackages: z.boolean().default(true),
686
797
  type: z.literal(BRIDGE_SAVE_DIRTY_PACKAGES_REQUEST_TYPE),
687
- version: z.literal(1)
798
+ version: z.literal(2)
688
799
  });
689
800
  z.object({
690
801
  requestId: requestIdSchema,
691
802
  type: z.literal(BRIDGE_CAPTURE_VIEWPORT_REQUEST_TYPE),
692
- version: z.literal(1)
803
+ version: z.literal(2)
693
804
  });
694
805
  const bridgeGetClassReflectionRequestSchema = z.object({
695
806
  className: reflectedTypeNameSchema,
@@ -700,7 +811,7 @@ const bridgeGetClassReflectionRequestSchema = z.object({
700
811
  propertyCursor: reflectionCursorSchema.default(0),
701
812
  requestId: requestIdSchema,
702
813
  type: z.literal(BRIDGE_GET_CLASS_REFLECTION_REQUEST_TYPE),
703
- version: z.literal(1)
814
+ version: z.literal(2)
704
815
  });
705
816
  const bridgeGetCdoDefaultsRequestSchema = z.object({
706
817
  className: reflectedTypeNameSchema,
@@ -710,30 +821,30 @@ const bridgeGetCdoDefaultsRequestSchema = z.object({
710
821
  nameFilter: boundedStringSchema.optional(),
711
822
  requestId: requestIdSchema,
712
823
  type: z.literal(BRIDGE_GET_CDO_DEFAULTS_REQUEST_TYPE),
713
- version: z.literal(1)
824
+ version: z.literal(2)
714
825
  });
715
826
  const bridgeExecConsoleCommandRequestSchema = z.object({
716
827
  command: consoleCommandSchema,
717
828
  requestId: requestIdSchema,
718
829
  type: z.literal(BRIDGE_EXEC_CONSOLE_COMMAND_REQUEST_TYPE),
719
- version: z.literal(1)
830
+ version: z.literal(2)
720
831
  });
721
832
  const bridgeStatSnapshotRequestSchema = z.object({
722
833
  requestId: requestIdSchema,
723
834
  type: z.literal(BRIDGE_STAT_SNAPSHOT_REQUEST_TYPE),
724
- version: z.literal(1)
835
+ version: z.literal(2)
725
836
  });
726
837
  const bridgeStartTraceRequestSchema = z.object({
727
838
  channels: traceChannelArraySchema.default([]),
728
839
  fileName: traceFileNameSchema.optional(),
729
840
  requestId: requestIdSchema,
730
841
  type: z.literal(BRIDGE_START_TRACE_REQUEST_TYPE),
731
- version: z.literal(1)
842
+ version: z.literal(2)
732
843
  });
733
844
  const bridgeStopTraceRequestSchema = z.object({
734
845
  requestId: requestIdSchema,
735
846
  type: z.literal(BRIDGE_STOP_TRACE_REQUEST_TYPE),
736
- version: z.literal(1)
847
+ version: z.literal(2)
737
848
  });
738
849
  const bridgeCreateCppClassRequestSchema = z.object({
739
850
  className: classNameSchema,
@@ -742,13 +853,13 @@ const bridgeCreateCppClassRequestSchema = z.object({
742
853
  parentClass: parentClassSchema,
743
854
  requestId: requestIdSchema,
744
855
  type: z.literal(BRIDGE_CREATE_CPP_CLASS_REQUEST_TYPE),
745
- version: z.literal(1)
856
+ version: z.literal(2)
746
857
  });
747
858
  const bridgeGetCreateClassStatusRequestSchema = z.object({
748
859
  createClassJobId: createClassJobIdSchema,
749
860
  requestId: requestIdSchema,
750
861
  type: z.literal(BRIDGE_GET_CREATE_CLASS_STATUS_REQUEST_TYPE),
751
- version: z.literal(1)
862
+ version: z.literal(2)
752
863
  });
753
864
  const bridgeFindAssetsRequestSchema = z.object({
754
865
  classNames: assetPathArraySchema.default([]),
@@ -760,11 +871,215 @@ const bridgeFindAssetsRequestSchema = z.object({
760
871
  recursivePaths: z.boolean().default(true),
761
872
  requestId: requestIdSchema,
762
873
  type: z.literal(BRIDGE_FIND_ASSETS_REQUEST_TYPE),
763
- version: z.literal(1)
874
+ version: z.literal(2)
764
875
  }).refine((value) => value.classNames.length > 0 || value.packagePaths.length > 0, {
765
876
  message: "A find_assets request requires at least one of classNames or packagePaths.",
766
877
  path: ["classNames"]
767
878
  });
879
+ const bridgeListActorsRequestSchema = z.object({
880
+ classNames: actorClassFilterArraySchema.default([]),
881
+ cursor: levelCursorSchema.default(0),
882
+ levelName: boundedStringSchema.optional(),
883
+ maxResults: levelMaxResultsSchema,
884
+ nameFilter: boundedStringSchema.optional(),
885
+ requestId: requestIdSchema,
886
+ tag: boundedStringSchema.optional(),
887
+ type: z.literal(BRIDGE_LIST_ACTORS_REQUEST_TYPE),
888
+ version: z.literal(2)
889
+ });
890
+ const bridgeGetActorDetailsRequestSchema = z.object({
891
+ actorPath: actorPathSchema,
892
+ componentCursor: levelCursorSchema.default(0),
893
+ includeInherited: z.boolean().default(false),
894
+ maxResults: actorDetailMemberLimitSchema,
895
+ propertyCursor: levelCursorSchema.default(0),
896
+ requestId: requestIdSchema,
897
+ type: z.literal(BRIDGE_GET_ACTOR_DETAILS_REQUEST_TYPE),
898
+ version: z.literal(2)
899
+ });
900
+ const bridgeGetCurrentLevelRequestSchema = z.object({
901
+ requestId: requestIdSchema,
902
+ type: z.literal(BRIDGE_GET_CURRENT_LEVEL_REQUEST_TYPE),
903
+ version: z.literal(2)
904
+ });
905
+ const bridgeSpawnActorEntrySchema = z.object({
906
+ classPath: assetPathSchema,
907
+ folderPath: boundedStringSchema.optional(),
908
+ label: boundedStringSchema.optional(),
909
+ tags: actorTagArraySchema.default([]),
910
+ transform: transformInputSchema.default({
911
+ location: {
912
+ x: 0,
913
+ y: 0,
914
+ z: 0
915
+ },
916
+ rotation: {
917
+ pitch: 0,
918
+ roll: 0,
919
+ yaw: 0
920
+ },
921
+ scale: {
922
+ x: 1,
923
+ y: 1,
924
+ z: 1
925
+ }
926
+ })
927
+ });
928
+ const bridgeSpawnActorRequestSchema = z.object({
929
+ dryRun: z.boolean().default(false),
930
+ requestId: requestIdSchema,
931
+ spawns: z.array(bridgeSpawnActorEntrySchema).min(1).max(64),
932
+ type: z.literal(BRIDGE_SPAWN_ACTOR_REQUEST_TYPE),
933
+ version: z.literal(2)
934
+ });
935
+ const bridgeDestroyActorRequestSchema = z.object({
936
+ actorPaths: actorPathBatchSchema,
937
+ dryRun: z.boolean().default(false),
938
+ requestId: requestIdSchema,
939
+ type: z.literal(BRIDGE_DESTROY_ACTOR_REQUEST_TYPE),
940
+ version: z.literal(2)
941
+ });
942
+ const bridgeSetActorTransformEntrySchema = z.object({
943
+ actorPath: actorPathSchema,
944
+ location: vectorInputSchema.optional(),
945
+ rotation: rotatorInputSchema.optional(),
946
+ scale: vectorInputSchema.optional()
947
+ }).refine((entry) => entry.location !== void 0 || entry.rotation !== void 0 || entry.scale !== void 0, {
948
+ message: "A set_actor_transform entry must supply at least one of location, rotation or scale.",
949
+ path: ["location"]
950
+ });
951
+ const bridgeSetActorTransformRequestSchema = z.object({
952
+ dryRun: z.boolean().default(false),
953
+ requestId: requestIdSchema,
954
+ transforms: z.array(bridgeSetActorTransformEntrySchema).min(1).max(64),
955
+ type: z.literal(BRIDGE_SET_ACTOR_TRANSFORM_REQUEST_TYPE),
956
+ version: z.literal(2)
957
+ });
958
+ const bridgeSetActorPropertyEntrySchema = z.object({
959
+ actorPath: actorPathSchema,
960
+ propertyPath: z.string().trim().min(1).max(512),
961
+ value: z.string().max(BRIDGE_PROPERTY_VALUE_MAX_CHARS)
962
+ });
963
+ const bridgeSetActorPropertyRequestSchema = z.object({
964
+ dryRun: z.boolean().default(false),
965
+ properties: z.array(bridgeSetActorPropertyEntrySchema).min(1).max(64),
966
+ requestId: requestIdSchema,
967
+ type: z.literal(BRIDGE_SET_ACTOR_PROPERTY_REQUEST_TYPE),
968
+ version: z.literal(2)
969
+ });
970
+ const bridgeSelectActorsRequestSchema = z.object({
971
+ actorPaths: z.array(actorPathSchema).max(64).default([]),
972
+ addToSelection: z.boolean().default(false),
973
+ dryRun: z.boolean().default(false),
974
+ requestId: requestIdSchema,
975
+ type: z.literal(BRIDGE_SELECT_ACTORS_REQUEST_TYPE),
976
+ version: z.literal(2)
977
+ });
978
+ const bridgeUndoRequestSchema = z.object({
979
+ requestId: requestIdSchema,
980
+ type: z.literal(BRIDGE_UNDO_REQUEST_TYPE),
981
+ version: z.literal(2)
982
+ });
983
+ const bridgeRedoRequestSchema = z.object({
984
+ requestId: requestIdSchema,
985
+ type: z.literal(BRIDGE_REDO_REQUEST_TYPE),
986
+ version: z.literal(2)
987
+ });
988
+ const bridgeOpenLevelRequestSchema = z.object({
989
+ dryRun: z.boolean().default(false),
990
+ levelPath: levelPathSchema,
991
+ requestId: requestIdSchema,
992
+ saveDirtyPackages: z.boolean().default(false),
993
+ type: z.literal(BRIDGE_OPEN_LEVEL_REQUEST_TYPE),
994
+ version: z.literal(2)
995
+ });
996
+ const bridgeGetOpenLevelStatusRequestSchema = z.object({
997
+ openLevelJobId: openLevelJobIdSchema,
998
+ requestId: requestIdSchema,
999
+ type: z.literal(BRIDGE_GET_OPEN_LEVEL_STATUS_REQUEST_TYPE),
1000
+ version: z.literal(2)
1001
+ });
1002
+ const bridgeReadDataTableRequestSchema = z.object({
1003
+ assetPath: assetPathSchema,
1004
+ cursor: dataTableCursorSchema.default(0),
1005
+ loadIfNeeded: z.boolean().default(true),
1006
+ maxRows: dataTableMaxRowsSchema,
1007
+ rowNameFilter: boundedStringSchema.optional(),
1008
+ requestId: requestIdSchema,
1009
+ type: z.literal(BRIDGE_READ_DATA_TABLE_REQUEST_TYPE),
1010
+ version: z.literal(2)
1011
+ });
1012
+ const bridgeWriteDataTableRowRequestSchema = z.object({
1013
+ assetPath: assetPathSchema,
1014
+ dryRun: z.boolean().default(false),
1015
+ operation: dataTableRowOperationSchema,
1016
+ rowName: dataTableRowNameSchema,
1017
+ values: dataTableValueMapSchema.optional(),
1018
+ requestId: requestIdSchema,
1019
+ type: z.literal(BRIDGE_WRITE_DATA_TABLE_ROW_REQUEST_TYPE),
1020
+ version: z.literal(2)
1021
+ }).refine((value) => value.operation !== "upsert" || value.values !== void 0, {
1022
+ message: "A write_data_table_row upsert requires values.",
1023
+ path: ["values"]
1024
+ }).refine((value) => value.operation !== "delete" || value.values === void 0, {
1025
+ message: "A write_data_table_row delete must not carry values.",
1026
+ path: ["values"]
1027
+ });
1028
+ const bridgeExportDataTableRequestSchema = z.object({
1029
+ assetPath: assetPathSchema,
1030
+ cursor: dataTableCursorSchema.default(0),
1031
+ format: dataTableFormatSchema.default("json"),
1032
+ loadIfNeeded: z.boolean().default(true),
1033
+ requestId: requestIdSchema,
1034
+ type: z.literal(BRIDGE_EXPORT_DATA_TABLE_REQUEST_TYPE),
1035
+ version: z.literal(2)
1036
+ });
1037
+ const bridgeImportDataTableRequestSchema = z.object({
1038
+ assetPath: assetPathSchema,
1039
+ content: dataTableImportContentSchema,
1040
+ dryRun: z.boolean().default(false),
1041
+ format: dataTableFormatSchema.default("json"),
1042
+ requestId: requestIdSchema,
1043
+ type: z.literal(BRIDGE_IMPORT_DATA_TABLE_REQUEST_TYPE),
1044
+ version: z.literal(2)
1045
+ });
1046
+ const bridgeCreateDataTableRequestSchema = z.object({
1047
+ assetPath: assetPathSchema,
1048
+ dryRun: z.boolean().default(false),
1049
+ rowStructPath: assetPathSchema,
1050
+ requestId: requestIdSchema,
1051
+ type: z.literal(BRIDGE_CREATE_DATA_TABLE_REQUEST_TYPE),
1052
+ version: z.literal(2)
1053
+ });
1054
+ const bridgeRenameDataTableRequestSchema = z.object({
1055
+ assetPath: assetPathSchema,
1056
+ destinationPath: assetPathSchema.optional(),
1057
+ dryRun: z.boolean().default(false),
1058
+ newName: dataTableAssetNameSchema.optional(),
1059
+ requestId: requestIdSchema,
1060
+ type: z.literal(BRIDGE_RENAME_DATA_TABLE_REQUEST_TYPE),
1061
+ version: z.literal(2)
1062
+ }).refine((value) => value.newName !== void 0 || value.destinationPath !== void 0, {
1063
+ message: "A rename_data_table requires a newName, a destinationPath, or both.",
1064
+ path: ["newName"]
1065
+ });
1066
+ const bridgeDeleteDataTableRequestSchema = z.object({
1067
+ assetPath: assetPathSchema,
1068
+ dryRun: z.boolean().default(false),
1069
+ force: z.boolean().default(false),
1070
+ requestId: requestIdSchema,
1071
+ type: z.literal(BRIDGE_DELETE_DATA_TABLE_REQUEST_TYPE),
1072
+ version: z.literal(2)
1073
+ });
1074
+ const bridgeRenameDataTableRowRequestSchema = z.object({
1075
+ assetPath: assetPathSchema,
1076
+ dryRun: z.boolean().default(false),
1077
+ newRowName: dataTableRowNameSchema,
1078
+ rowName: dataTableRowNameSchema,
1079
+ requestId: requestIdSchema,
1080
+ type: z.literal(BRIDGE_RENAME_DATA_TABLE_ROW_REQUEST_TYPE),
1081
+ version: z.literal(2)
1082
+ });
768
1083
  const bridgeGetAssetDependenciesRequestSchema = z.object({
769
1084
  assetPath: assetPathSchema,
770
1085
  categories: z.array(assetDependencyCategorySchema).max(BRIDGE_ASSET_DEPENDENCY_CATEGORIES.length).default(["package"]),
@@ -774,7 +1089,7 @@ const bridgeGetAssetDependenciesRequestSchema = z.object({
774
1089
  referencerCursor: assetCursorSchema.default(0),
775
1090
  requestId: requestIdSchema,
776
1091
  type: z.literal(BRIDGE_GET_ASSET_DEPENDENCIES_REQUEST_TYPE),
777
- version: z.literal(1)
1092
+ version: z.literal(2)
778
1093
  });
779
1094
  const bridgeFindBlueprintReferencesRequestSchema = z.object({
780
1095
  className: assetPathSchema,
@@ -783,7 +1098,7 @@ const bridgeFindBlueprintReferencesRequestSchema = z.object({
783
1098
  referenceKinds: z.array(blueprintReferenceKindSchema).max(BRIDGE_BLUEPRINT_REFERENCE_KINDS.length).default([]),
784
1099
  requestId: requestIdSchema,
785
1100
  type: z.literal(BRIDGE_FIND_BLUEPRINT_REFERENCES_REQUEST_TYPE),
786
- version: z.literal(1)
1101
+ version: z.literal(2)
787
1102
  });
788
1103
  const bridgeGetBlueprintSummaryRequestSchema = z.object({
789
1104
  blueprintPath: assetPathSchema,
@@ -795,7 +1110,7 @@ const bridgeGetBlueprintSummaryRequestSchema = z.object({
795
1110
  requestId: requestIdSchema,
796
1111
  type: z.literal(BRIDGE_GET_BLUEPRINT_SUMMARY_REQUEST_TYPE),
797
1112
  variableCursor: assetCursorSchema.default(0),
798
- version: z.literal(1)
1113
+ version: z.literal(2)
799
1114
  });
800
1115
  const bridgeGetBlueprintGraphRequestSchema = z.object({
801
1116
  blueprintPath: assetPathSchema,
@@ -805,7 +1120,7 @@ const bridgeGetBlueprintGraphRequestSchema = z.object({
805
1120
  nodeCursor: assetCursorSchema.default(0),
806
1121
  requestId: requestIdSchema,
807
1122
  type: z.literal(BRIDGE_GET_BLUEPRINT_GRAPH_REQUEST_TYPE),
808
- version: z.literal(1)
1123
+ version: z.literal(2)
809
1124
  });
810
1125
  const bridgeGetBlueprintCompileErrorsRequestSchema = z.object({
811
1126
  blueprintPaths: blueprintPathArraySchema,
@@ -813,13 +1128,13 @@ const bridgeGetBlueprintCompileErrorsRequestSchema = z.object({
813
1128
  maxResults: assetMaxResultsSchema,
814
1129
  requestId: requestIdSchema,
815
1130
  type: z.literal(BRIDGE_GET_BLUEPRINT_COMPILE_ERRORS_REQUEST_TYPE),
816
- version: z.literal(1)
1131
+ version: z.literal(2)
817
1132
  });
818
1133
  const bridgeCompileBlueprintRequestSchema = z.object({
819
1134
  blueprintPaths: blueprintPathArraySchema,
820
1135
  requestId: requestIdSchema,
821
1136
  type: z.literal(BRIDGE_COMPILE_BLUEPRINT_REQUEST_TYPE),
822
- version: z.literal(1)
1137
+ version: z.literal(2)
823
1138
  });
824
1139
  const bridgeGetBlueprintCompileStatusRequestSchema = z.object({
825
1140
  compileJobId: blueprintCompileJobIdSchema,
@@ -827,7 +1142,7 @@ const bridgeGetBlueprintCompileStatusRequestSchema = z.object({
827
1142
  maxResults: assetMaxResultsSchema,
828
1143
  requestId: requestIdSchema,
829
1144
  type: z.literal(BRIDGE_GET_BLUEPRINT_COMPILE_STATUS_REQUEST_TYPE),
830
- version: z.literal(1)
1145
+ version: z.literal(2)
831
1146
  });
832
1147
  const bridgeGetConfigValueRequestSchema = z.object({
833
1148
  file: configFileSchema,
@@ -835,7 +1150,7 @@ const bridgeGetConfigValueRequestSchema = z.object({
835
1150
  requestId: requestIdSchema,
836
1151
  section: configSectionSchema,
837
1152
  type: z.literal(BRIDGE_GET_CONFIG_VALUE_REQUEST_TYPE),
838
- version: z.literal(1)
1153
+ version: z.literal(2)
839
1154
  });
840
1155
  const bridgeSetConfigValueRequestSchema = z.object({
841
1156
  file: configFileSchema,
@@ -845,7 +1160,7 @@ const bridgeSetConfigValueRequestSchema = z.object({
845
1160
  section: configSectionSchema,
846
1161
  type: z.literal(BRIDGE_SET_CONFIG_VALUE_REQUEST_TYPE),
847
1162
  value: configValueSchema,
848
- version: z.literal(1)
1163
+ version: z.literal(2)
849
1164
  });
850
1165
  const bridgeListConfigSectionRequestSchema = z.object({
851
1166
  cursor: assetCursorSchema.default(0),
@@ -854,7 +1169,7 @@ const bridgeListConfigSectionRequestSchema = z.object({
854
1169
  requestId: requestIdSchema,
855
1170
  section: configSectionSchema,
856
1171
  type: z.literal(BRIDGE_LIST_CONFIG_SECTION_REQUEST_TYPE),
857
- version: z.literal(1)
1172
+ version: z.literal(2)
858
1173
  });
859
1174
  const bridgePingSuccessResponseSchema = z.object({
860
1175
  ok: z.literal(true),
@@ -864,7 +1179,7 @@ const bridgePingSuccessResponseSchema = z.object({
864
1179
  projectPath: z.string().trim().min(1),
865
1180
  requestId: requestIdSchema,
866
1181
  type: z.literal(BRIDGE_PING_REQUEST_TYPE),
867
- version: z.literal(1)
1182
+ version: z.literal(2)
868
1183
  });
869
1184
  const bridgeLogEventSchema = z.object({
870
1185
  category: z.string().trim().min(1).optional(),
@@ -884,7 +1199,7 @@ const bridgeLogSubscribeSuccessResponseSchema = z.object({
884
1199
  source: logSourceSchema,
885
1200
  subscriptionId: subscriptionIdSchema,
886
1201
  type: z.literal(BRIDGE_SUBSCRIBE_LOGS_REQUEST_TYPE),
887
- version: z.literal(1)
1202
+ version: z.literal(2)
888
1203
  });
889
1204
  const bridgeLogDrainSuccessResponseSchema = z.object({
890
1205
  droppedCount: z.number().int().min(0),
@@ -895,14 +1210,14 @@ const bridgeLogDrainSuccessResponseSchema = z.object({
895
1210
  source: logSourceSchema,
896
1211
  subscriptionId: subscriptionIdSchema,
897
1212
  type: z.literal(BRIDGE_DRAIN_LOGS_REQUEST_TYPE),
898
- version: z.literal(1)
1213
+ version: z.literal(2)
899
1214
  });
900
1215
  const bridgeLogUnsubscribeSuccessResponseSchema = z.object({
901
1216
  ok: z.literal(true),
902
1217
  requestId: requestIdSchema,
903
1218
  subscriptionId: subscriptionIdSchema,
904
1219
  type: z.literal(BRIDGE_UNSUBSCRIBE_LOGS_REQUEST_TYPE),
905
- version: z.literal(1)
1220
+ version: z.literal(2)
906
1221
  });
907
1222
  const bridgeStartPieSuccessResponseSchema = z.object({
908
1223
  message: z.string().trim().min(1).optional(),
@@ -911,7 +1226,7 @@ const bridgeStartPieSuccessResponseSchema = z.object({
911
1226
  requestId: requestIdSchema,
912
1227
  state: pieStateSchema,
913
1228
  type: z.literal(BRIDGE_START_PIE_REQUEST_TYPE),
914
- version: z.literal(1)
1229
+ version: z.literal(2)
915
1230
  });
916
1231
  const bridgeGetPieStatusSuccessResponseSchema = z.object({
917
1232
  errorCount: z.number().int().min(0).optional(),
@@ -922,7 +1237,7 @@ const bridgeGetPieStatusSuccessResponseSchema = z.object({
922
1237
  startedAt: z.string().trim().min(1).optional(),
923
1238
  state: pieStatusStateSchema,
924
1239
  type: z.literal(BRIDGE_GET_PIE_STATUS_REQUEST_TYPE),
925
- version: z.literal(1)
1240
+ version: z.literal(2)
926
1241
  });
927
1242
  const bridgeLaunchDeviceSchema = z.object({
928
1243
  deviceId: z.string(),
@@ -936,7 +1251,7 @@ const bridgeListLaunchDevicesSuccessResponseSchema = z.object({
936
1251
  ok: z.literal(true),
937
1252
  requestId: requestIdSchema,
938
1253
  type: z.literal(BRIDGE_LIST_LAUNCH_DEVICES_REQUEST_TYPE),
939
- version: z.literal(1)
1254
+ version: z.literal(2)
940
1255
  });
941
1256
  const bridgeLaunchOnDeviceSuccessResponseSchema = z.object({
942
1257
  launchSessionId: pieSessionIdSchema,
@@ -945,7 +1260,7 @@ const bridgeLaunchOnDeviceSuccessResponseSchema = z.object({
945
1260
  requestId: requestIdSchema,
946
1261
  state: launchStateSchema,
947
1262
  type: z.literal(BRIDGE_LAUNCH_ON_DEVICE_REQUEST_TYPE),
948
- version: z.literal(1)
1263
+ version: z.literal(2)
949
1264
  });
950
1265
  const bridgeStopPieSuccessResponseSchema = z.object({
951
1266
  message: z.string().trim().min(1).optional(),
@@ -954,7 +1269,7 @@ const bridgeStopPieSuccessResponseSchema = z.object({
954
1269
  state: pieStatusStateSchema,
955
1270
  stopped: z.boolean(),
956
1271
  type: z.literal(BRIDGE_STOP_PIE_REQUEST_TYPE),
957
- version: z.literal(1)
1272
+ version: z.literal(2)
958
1273
  }).refine((value) => !value.stopped || value.state === "stopped", {
959
1274
  message: "A stop_pie response with stopped=true must report state 'stopped'.",
960
1275
  path: ["state"]
@@ -966,7 +1281,7 @@ const bridgeStartLiveCompileSuccessResponseSchema = z.object({
966
1281
  requestId: requestIdSchema,
967
1282
  state: liveCompileStateSchema,
968
1283
  type: z.literal(BRIDGE_START_LIVE_COMPILE_REQUEST_TYPE),
969
- version: z.literal(1)
1284
+ version: z.literal(2)
970
1285
  });
971
1286
  const bridgeStartHotReloadSuccessResponseSchema = z.object({
972
1287
  compileJobId: z.string().trim().min(1),
@@ -975,7 +1290,7 @@ const bridgeStartHotReloadSuccessResponseSchema = z.object({
975
1290
  requestId: requestIdSchema,
976
1291
  state: hotReloadStateSchema,
977
1292
  type: z.literal(BRIDGE_START_HOT_RELOAD_REQUEST_TYPE),
978
- version: z.literal(1)
1293
+ version: z.literal(2)
979
1294
  });
980
1295
  const bridgeCompileDiagnosticSchema = z.object({
981
1296
  file: z.string().trim().min(1).optional(),
@@ -994,7 +1309,7 @@ const bridgeGetCompileStatusSuccessResponseSchema = z.object({
994
1309
  restartReason: z.string().trim().min(1).optional(),
995
1310
  state: compileStatusStateSchema,
996
1311
  type: z.literal(BRIDGE_GET_COMPILE_STATUS_REQUEST_TYPE),
997
- version: z.literal(1),
1312
+ version: z.literal(2),
998
1313
  warningCount: z.number().int().min(0),
999
1314
  warnings: z.array(bridgeCompileDiagnosticSchema)
1000
1315
  }).superRefine((value, ctx) => {
@@ -1023,7 +1338,7 @@ const bridgeListAutomationTestsSuccessResponseSchema = z.object({
1023
1338
  totalCount: z.number().int().min(0),
1024
1339
  truncated: z.boolean(),
1025
1340
  type: z.literal(BRIDGE_LIST_AUTOMATION_TESTS_REQUEST_TYPE),
1026
- version: z.literal(1)
1341
+ version: z.literal(2)
1027
1342
  });
1028
1343
  const bridgeStartAutomationRunSuccessResponseSchema = z.object({
1029
1344
  message: nonEmptyStringSchema.optional(),
@@ -1033,7 +1348,7 @@ const bridgeStartAutomationRunSuccessResponseSchema = z.object({
1033
1348
  state: automationRunStateSchema,
1034
1349
  testRunId: testRunIdSchema,
1035
1350
  type: z.literal(BRIDGE_START_AUTOMATION_RUN_REQUEST_TYPE),
1036
- version: z.literal(1)
1351
+ version: z.literal(2)
1037
1352
  });
1038
1353
  const bridgeAutomationResultEntrySchema = z.object({
1039
1354
  file: z.string().optional(),
@@ -1067,7 +1382,7 @@ const bridgeGetAutomationRunStatusSuccessResponseSchema = z.object({
1067
1382
  totalCount: z.number().int().min(0),
1068
1383
  truncated: z.boolean(),
1069
1384
  type: z.literal(BRIDGE_GET_AUTOMATION_RUN_STATUS_REQUEST_TYPE),
1070
- version: z.literal(1)
1385
+ version: z.literal(2)
1071
1386
  });
1072
1387
  const bridgeCancelAutomationRunSuccessResponseSchema = z.object({
1073
1388
  cancelled: z.boolean(),
@@ -1077,7 +1392,7 @@ const bridgeCancelAutomationRunSuccessResponseSchema = z.object({
1077
1392
  state: cancelAutomationRunStateSchema,
1078
1393
  testRunId: testRunIdSchema,
1079
1394
  type: z.literal(BRIDGE_CANCEL_AUTOMATION_RUN_REQUEST_TYPE),
1080
- version: z.literal(1)
1395
+ version: z.literal(2)
1081
1396
  }).refine((value) => value.cancelled === (value.state === "cancelled"), {
1082
1397
  message: "A cancel_automation_run response must report cancelled=true exactly when state is 'cancelled'.",
1083
1398
  path: ["state"]
@@ -1095,7 +1410,7 @@ const bridgeGetEditorStateSuccessResponseSchema = z.object({
1095
1410
  selectedActors: selectedActorArraySchema,
1096
1411
  truncated: z.boolean(),
1097
1412
  type: z.literal(BRIDGE_GET_EDITOR_STATE_REQUEST_TYPE),
1098
- version: z.literal(1)
1413
+ version: z.literal(2)
1099
1414
  });
1100
1415
  const bridgeSaveDirtyPackagesSuccessResponseSchema = z.object({
1101
1416
  failedCount: z.number().int().min(0),
@@ -1107,7 +1422,7 @@ const bridgeSaveDirtyPackagesSuccessResponseSchema = z.object({
1107
1422
  savedPackages: packageNameArraySchema,
1108
1423
  truncated: z.boolean(),
1109
1424
  type: z.literal(BRIDGE_SAVE_DIRTY_PACKAGES_REQUEST_TYPE),
1110
- version: z.literal(1)
1425
+ version: z.literal(2)
1111
1426
  });
1112
1427
  const bridgeCaptureViewportSuccessResponseSchema = z.object({
1113
1428
  height: z.number().int().min(1),
@@ -1115,7 +1430,7 @@ const bridgeCaptureViewportSuccessResponseSchema = z.object({
1115
1430
  path: screenshotPathSchema,
1116
1431
  requestId: requestIdSchema,
1117
1432
  type: z.literal(BRIDGE_CAPTURE_VIEWPORT_REQUEST_TYPE),
1118
- version: z.literal(1),
1433
+ version: z.literal(2),
1119
1434
  width: z.number().int().min(1)
1120
1435
  });
1121
1436
  const bridgeReflectionMetadataEntrySchema = z.object({
@@ -1159,7 +1474,7 @@ const bridgeGetClassReflectionSuccessResponseSchema = z.object({
1159
1474
  requestId: requestIdSchema,
1160
1475
  truncated: z.boolean(),
1161
1476
  type: z.literal(BRIDGE_GET_CLASS_REFLECTION_REQUEST_TYPE),
1162
- version: z.literal(1)
1477
+ version: z.literal(2)
1163
1478
  });
1164
1479
  const bridgeCdoPropertyValueSchema = z.object({
1165
1480
  name: z.string(),
@@ -1177,7 +1492,7 @@ const bridgeGetCdoDefaultsSuccessResponseSchema = z.object({
1177
1492
  totalCount: z.number().int().min(0),
1178
1493
  truncated: z.boolean(),
1179
1494
  type: z.literal(BRIDGE_GET_CDO_DEFAULTS_REQUEST_TYPE),
1180
- version: z.literal(1)
1495
+ version: z.literal(2)
1181
1496
  });
1182
1497
  const bridgeCrashFrameSchema = z.object({
1183
1498
  address: nonEmptyStringSchema,
@@ -1204,7 +1519,7 @@ const bridgeGetCrashCallstackSuccessResponseSchema = z.object({
1204
1519
  totalCount: z.number().int().min(0),
1205
1520
  truncated: z.boolean(),
1206
1521
  type: z.literal(BRIDGE_GET_CRASH_CALLSTACK_REQUEST_TYPE),
1207
- version: z.literal(1)
1522
+ version: z.literal(2)
1208
1523
  });
1209
1524
  const bridgeExecConsoleCommandSuccessResponseSchema = z.object({
1210
1525
  handled: z.boolean(),
@@ -1214,7 +1529,7 @@ const bridgeExecConsoleCommandSuccessResponseSchema = z.object({
1214
1529
  target: execConsoleTargetSchema,
1215
1530
  truncated: z.boolean(),
1216
1531
  type: z.literal(BRIDGE_EXEC_CONSOLE_COMMAND_REQUEST_TYPE),
1217
- version: z.literal(1)
1532
+ version: z.literal(2)
1218
1533
  });
1219
1534
  const bridgeMemorySnapshotSchema = z.object({
1220
1535
  availablePhysicalMb: memoryMegabytesSchema,
@@ -1233,7 +1548,7 @@ const bridgeStatSnapshotSuccessResponseSchema = z.object({
1233
1548
  renderThreadTimeMs: frameTimingMillisecondsSchema.optional(),
1234
1549
  requestId: requestIdSchema,
1235
1550
  type: z.literal(BRIDGE_STAT_SNAPSHOT_REQUEST_TYPE),
1236
- version: z.literal(1)
1551
+ version: z.literal(2)
1237
1552
  });
1238
1553
  const bridgeStartTraceSuccessResponseSchema = z.object({
1239
1554
  message: nonEmptyStringSchema.optional(),
@@ -1242,7 +1557,7 @@ const bridgeStartTraceSuccessResponseSchema = z.object({
1242
1557
  state: startTraceStateSchema,
1243
1558
  tracePath: nonEmptyStringSchema.optional(),
1244
1559
  type: z.literal(BRIDGE_START_TRACE_REQUEST_TYPE),
1245
- version: z.literal(1)
1560
+ version: z.literal(2)
1246
1561
  }).refine((value) => value.state !== "unsupported" || value.tracePath === void 0, {
1247
1562
  message: "A start_trace response with state 'unsupported' must not report a tracePath.",
1248
1563
  path: ["tracePath"]
@@ -1254,7 +1569,7 @@ const bridgeStopTraceSuccessResponseSchema = z.object({
1254
1569
  state: stopTraceStateSchema,
1255
1570
  tracePath: nonEmptyStringSchema.optional(),
1256
1571
  type: z.literal(BRIDGE_STOP_TRACE_REQUEST_TYPE),
1257
- version: z.literal(1)
1572
+ version: z.literal(2)
1258
1573
  }).refine((value) => value.state === "stopped" || value.tracePath === void 0, {
1259
1574
  message: "A stop_trace response may only report a tracePath when state is 'stopped'.",
1260
1575
  path: ["tracePath"]
@@ -1266,7 +1581,7 @@ const bridgeCreateCppClassSuccessResponseSchema = z.object({
1266
1581
  requestId: requestIdSchema,
1267
1582
  state: createClassStateSchema,
1268
1583
  type: z.literal(BRIDGE_CREATE_CPP_CLASS_REQUEST_TYPE),
1269
- version: z.literal(1)
1584
+ version: z.literal(2)
1270
1585
  }).refine((value) => value.state === "creating" === (value.createClassJobId !== void 0), {
1271
1586
  message: "A create_cpp_class response must carry createClassJobId exactly when state is 'creating'.",
1272
1587
  path: ["createClassJobId"]
@@ -1283,7 +1598,7 @@ const bridgeGetCreateClassStatusSuccessResponseSchema = z.object({
1283
1598
  sourcePath: sourceFilePathSchema.optional(),
1284
1599
  state: createClassStatusStateSchema,
1285
1600
  type: z.literal(BRIDGE_GET_CREATE_CLASS_STATUS_REQUEST_TYPE),
1286
- version: z.literal(1)
1601
+ version: z.literal(2)
1287
1602
  }).superRefine((value, ctx) => {
1288
1603
  if (value.state !== "succeeded" && value.reloaded !== void 0) ctx.addIssue({
1289
1604
  code: z.ZodIssueCode.custom,
@@ -1318,8 +1633,316 @@ const bridgeFindAssetsSuccessResponseSchema = z.object({
1318
1633
  totalCount: z.number().int().min(0),
1319
1634
  truncated: z.boolean(),
1320
1635
  type: z.literal(BRIDGE_FIND_ASSETS_REQUEST_TYPE),
1321
- version: z.literal(1)
1636
+ version: z.literal(2)
1637
+ });
1638
+ const bridgeActorSummarySchema = z.object({
1639
+ actorPath: z.string(),
1640
+ className: z.string(),
1641
+ folderPath: z.string(),
1642
+ label: z.string(),
1643
+ levelName: z.string()
1644
+ });
1645
+ const bridgeListActorsSuccessResponseSchema = z.object({
1646
+ actors: z.array(bridgeActorSummarySchema).max(100),
1647
+ message: z.string().trim().min(1).optional(),
1648
+ nextCursor: levelCursorSchema.optional(),
1649
+ ok: z.literal(true),
1650
+ requestId: requestIdSchema,
1651
+ totalCount: z.number().int().min(0),
1652
+ truncated: z.boolean(),
1653
+ type: z.literal(BRIDGE_LIST_ACTORS_REQUEST_TYPE),
1654
+ version: z.literal(2)
1655
+ });
1656
+ const bridgeVectorSchema = z.object({
1657
+ x: z.number(),
1658
+ y: z.number(),
1659
+ z: z.number()
1660
+ });
1661
+ const bridgeRotatorSchema = z.object({
1662
+ pitch: z.number(),
1663
+ roll: z.number(),
1664
+ yaw: z.number()
1665
+ });
1666
+ const bridgeTransformSchema = z.object({
1667
+ location: bridgeVectorSchema,
1668
+ rotation: bridgeRotatorSchema,
1669
+ scale: bridgeVectorSchema
1670
+ });
1671
+ const bridgeActorComponentSchema = z.object({
1672
+ className: z.string(),
1673
+ name: z.string(),
1674
+ parentName: z.string().optional(),
1675
+ relativeTransform: bridgeTransformSchema.optional()
1676
+ });
1677
+ const bridgeActorPropertySchema = z.object({
1678
+ isEditable: z.boolean(),
1679
+ name: z.string(),
1680
+ type: z.string(),
1681
+ value: z.string(),
1682
+ valueTruncated: z.boolean()
1683
+ });
1684
+ const bridgeGetActorDetailsSuccessResponseSchema = z.object({
1685
+ actorPath: z.string(),
1686
+ className: z.string(),
1687
+ componentCount: z.number().int().min(0),
1688
+ components: z.array(bridgeActorComponentSchema).max(200),
1689
+ componentTruncated: z.boolean(),
1690
+ folderPath: z.string(),
1691
+ label: z.string(),
1692
+ levelName: z.string(),
1693
+ nextComponentCursor: levelCursorSchema.optional(),
1694
+ nextPropertyCursor: levelCursorSchema.optional(),
1695
+ ok: z.literal(true),
1696
+ properties: z.array(bridgeActorPropertySchema).max(200),
1697
+ propertyCount: z.number().int().min(0),
1698
+ propertyTruncated: z.boolean(),
1699
+ requestId: requestIdSchema,
1700
+ transform: bridgeTransformSchema,
1701
+ type: z.literal(BRIDGE_GET_ACTOR_DETAILS_REQUEST_TYPE),
1702
+ version: z.literal(2)
1703
+ });
1704
+ const bridgeStreamingLevelSchema = z.object({
1705
+ isLoaded: z.boolean(),
1706
+ isVisible: z.boolean(),
1707
+ packageName: z.string()
1708
+ });
1709
+ const bridgeGetCurrentLevelSuccessResponseSchema = z.object({
1710
+ levelName: z.string().trim().min(1).optional(),
1711
+ levelPath: z.string().trim().min(1).optional(),
1712
+ message: z.string().trim().min(1).optional(),
1713
+ ok: z.literal(true),
1714
+ requestId: requestIdSchema,
1715
+ streamingLevelCount: z.number().int().min(0),
1716
+ streamingLevels: z.array(bridgeStreamingLevelSchema).max(100),
1717
+ truncated: z.boolean(),
1718
+ type: z.literal(BRIDGE_GET_CURRENT_LEVEL_REQUEST_TYPE),
1719
+ version: z.literal(2),
1720
+ worldPartition: z.boolean()
1721
+ });
1722
+ const bridgeLevelEditResultSchema = z.object({
1723
+ actorPath: z.string().optional(),
1724
+ error: z.string().optional(),
1725
+ index: z.number().int().min(0),
1726
+ ok: z.boolean()
1727
+ });
1728
+ const levelEditResponseFields = {
1729
+ dryRun: z.boolean(),
1730
+ failureCount: z.number().int().min(0),
1731
+ message: z.string().trim().min(1).optional(),
1732
+ ok: z.literal(true),
1733
+ requestId: requestIdSchema,
1734
+ results: z.array(bridgeLevelEditResultSchema).max(64),
1735
+ state: levelEditStateSchema,
1736
+ successCount: z.number().int().min(0),
1737
+ transactionTitle: z.string().trim().min(1).optional(),
1738
+ version: z.literal(2)
1739
+ };
1740
+ function isLevelEditStateConsistent(value) {
1741
+ if (value.state === "applied") return !value.dryRun;
1742
+ if (value.state === "validated") return value.dryRun;
1743
+ return true;
1744
+ }
1745
+ const levelEditStateRefinement = {
1746
+ message: "A mutating response must report state 'applied' only for a real run and 'validated' only for a dryRun.",
1747
+ path: ["state"]
1748
+ };
1749
+ const bridgeSpawnActorSuccessResponseSchema = z.object({
1750
+ ...levelEditResponseFields,
1751
+ type: z.literal(BRIDGE_SPAWN_ACTOR_REQUEST_TYPE)
1752
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1753
+ const bridgeDestroyActorSuccessResponseSchema = z.object({
1754
+ ...levelEditResponseFields,
1755
+ type: z.literal(BRIDGE_DESTROY_ACTOR_REQUEST_TYPE)
1756
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1757
+ const bridgeSetActorTransformSuccessResponseSchema = z.object({
1758
+ ...levelEditResponseFields,
1759
+ type: z.literal(BRIDGE_SET_ACTOR_TRANSFORM_REQUEST_TYPE)
1760
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1761
+ const bridgeSetActorPropertySuccessResponseSchema = z.object({
1762
+ ...levelEditResponseFields,
1763
+ type: z.literal(BRIDGE_SET_ACTOR_PROPERTY_REQUEST_TYPE)
1764
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1765
+ const bridgeSelectActorsSuccessResponseSchema = z.object({
1766
+ ...levelEditResponseFields,
1767
+ selectedActorCount: z.number().int().min(0),
1768
+ type: z.literal(BRIDGE_SELECT_ACTORS_REQUEST_TYPE)
1769
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1770
+ const bridgeUndoSuccessResponseSchema = z.object({
1771
+ message: z.string().trim().min(1).optional(),
1772
+ ok: z.literal(true),
1773
+ requestId: requestIdSchema,
1774
+ state: undoStateSchema,
1775
+ transactionTitle: z.string().trim().min(1).optional(),
1776
+ type: z.literal(BRIDGE_UNDO_REQUEST_TYPE),
1777
+ version: z.literal(2)
1778
+ });
1779
+ const bridgeRedoSuccessResponseSchema = z.object({
1780
+ message: z.string().trim().min(1).optional(),
1781
+ ok: z.literal(true),
1782
+ requestId: requestIdSchema,
1783
+ state: redoStateSchema,
1784
+ transactionTitle: z.string().trim().min(1).optional(),
1785
+ type: z.literal(BRIDGE_REDO_REQUEST_TYPE),
1786
+ version: z.literal(2)
1787
+ });
1788
+ const bridgeOpenLevelSuccessResponseSchema = z.object({
1789
+ levelPath: levelPathSchema.optional(),
1790
+ message: nonEmptyStringSchema.optional(),
1791
+ ok: z.literal(true),
1792
+ openLevelJobId: openLevelJobIdSchema.optional(),
1793
+ requestId: requestIdSchema,
1794
+ state: openLevelStateSchema,
1795
+ type: z.literal(BRIDGE_OPEN_LEVEL_REQUEST_TYPE),
1796
+ version: z.literal(2)
1797
+ }).refine((value) => value.state === "opening" === (value.openLevelJobId !== void 0), {
1798
+ message: "An open_level response must carry openLevelJobId exactly when state is 'opening'.",
1799
+ path: ["openLevelJobId"]
1800
+ });
1801
+ const bridgeGetOpenLevelStatusSuccessResponseSchema = z.object({
1802
+ durationMs: z.number().int().min(0).optional(),
1803
+ finishedAt: nonEmptyStringSchema.optional(),
1804
+ levelPath: levelPathSchema.optional(),
1805
+ message: nonEmptyStringSchema.optional(),
1806
+ ok: z.literal(true),
1807
+ openLevelJobId: openLevelJobIdSchema,
1808
+ requestId: requestIdSchema,
1809
+ state: openLevelStatusStateSchema,
1810
+ type: z.literal(BRIDGE_GET_OPEN_LEVEL_STATUS_REQUEST_TYPE),
1811
+ version: z.literal(2)
1812
+ }).superRefine((value, ctx) => {
1813
+ if (value.state === "succeeded" || value.state === "failed") return;
1814
+ if (value.durationMs !== void 0) ctx.addIssue({
1815
+ code: z.ZodIssueCode.custom,
1816
+ message: "durationMs must be absent until the load finishes",
1817
+ path: ["durationMs"]
1818
+ });
1819
+ if (value.finishedAt !== void 0) ctx.addIssue({
1820
+ code: z.ZodIssueCode.custom,
1821
+ message: "finishedAt must be absent until the load finishes",
1822
+ path: ["finishedAt"]
1823
+ });
1824
+ });
1825
+ const bridgeDataTableColumnSchema = z.object({
1826
+ name: z.string(),
1827
+ type: z.string()
1828
+ });
1829
+ const bridgeDataTableRowSchema = z.object({
1830
+ rowName: z.string(),
1831
+ values: z.record(z.string(), z.string())
1832
+ });
1833
+ const bridgeReadDataTableSuccessResponseSchema = z.object({
1834
+ assetPath: z.string(),
1835
+ columns: z.array(bridgeDataTableColumnSchema).max(200),
1836
+ columnsTruncated: z.boolean(),
1837
+ nextCursor: dataTableCursorSchema.optional(),
1838
+ ok: z.literal(true),
1839
+ requestId: requestIdSchema,
1840
+ rows: z.array(bridgeDataTableRowSchema).max(100),
1841
+ rowStructName: z.string(),
1842
+ rowStructPath: z.string(),
1843
+ totalRowCount: z.number().int().min(0),
1844
+ truncated: z.boolean(),
1845
+ type: z.literal(BRIDGE_READ_DATA_TABLE_REQUEST_TYPE),
1846
+ valueTruncated: z.boolean(),
1847
+ version: z.literal(2)
1848
+ });
1849
+ const bridgeWriteDataTableRowSuccessResponseSchema = z.object({
1850
+ applied: dataTableRowOperationSchema,
1851
+ assetPath: z.string(),
1852
+ created: z.boolean(),
1853
+ dryRun: z.boolean(),
1854
+ message: z.string().trim().min(1).optional(),
1855
+ ok: z.literal(true),
1856
+ packageDirty: z.boolean(),
1857
+ requestId: requestIdSchema,
1858
+ rowExisted: z.boolean(),
1859
+ rowName: z.string(),
1860
+ state: dataTableWriteStateSchema,
1861
+ transactionTitle: z.string().trim().min(1).optional(),
1862
+ type: z.literal(BRIDGE_WRITE_DATA_TABLE_ROW_REQUEST_TYPE),
1863
+ version: z.literal(2)
1864
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1865
+ const bridgeExportDataTableSuccessResponseSchema = z.object({
1866
+ assetPath: z.string(),
1867
+ content: z.string().max(BRIDGE_DATA_TABLE_MAX_EXPORT_CHARS),
1868
+ format: dataTableFormatSchema,
1869
+ nextCursor: dataTableCursorSchema.optional(),
1870
+ ok: z.literal(true),
1871
+ requestId: requestIdSchema,
1872
+ rowCount: z.number().int().min(0),
1873
+ totalChars: z.number().int().min(0),
1874
+ truncated: z.boolean(),
1875
+ type: z.literal(BRIDGE_EXPORT_DATA_TABLE_REQUEST_TYPE),
1876
+ version: z.literal(2)
1322
1877
  });
1878
+ const bridgeImportDataTableSuccessResponseSchema = z.object({
1879
+ assetPath: z.string(),
1880
+ dryRun: z.boolean(),
1881
+ message: z.string().trim().min(1).optional(),
1882
+ ok: z.literal(true),
1883
+ packageDirty: z.boolean(),
1884
+ problemCount: z.number().int().min(0),
1885
+ problems: z.array(z.string()).max(50),
1886
+ replacedRowCount: z.number().int().min(0),
1887
+ requestId: requestIdSchema,
1888
+ rowCount: z.number().int().min(0),
1889
+ state: dataTableWriteStateSchema,
1890
+ transactionTitle: z.string().trim().min(1).optional(),
1891
+ type: z.literal(BRIDGE_IMPORT_DATA_TABLE_REQUEST_TYPE),
1892
+ version: z.literal(2)
1893
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1894
+ const bridgeCreateDataTableSuccessResponseSchema = z.object({
1895
+ assetPath: z.string(),
1896
+ created: z.boolean(),
1897
+ dryRun: z.boolean(),
1898
+ ok: z.literal(true),
1899
+ packageDirty: z.boolean(),
1900
+ requestId: requestIdSchema,
1901
+ rowStructPath: z.string(),
1902
+ state: dataTableWriteStateSchema,
1903
+ type: z.literal(BRIDGE_CREATE_DATA_TABLE_REQUEST_TYPE),
1904
+ version: z.literal(2)
1905
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1906
+ const bridgeRenameDataTableSuccessResponseSchema = z.object({
1907
+ assetPath: z.string(),
1908
+ dryRun: z.boolean(),
1909
+ leftRedirector: z.boolean().optional(),
1910
+ newAssetPath: z.string(),
1911
+ ok: z.literal(true),
1912
+ packageDirty: z.boolean(),
1913
+ renamed: z.boolean(),
1914
+ requestId: requestIdSchema,
1915
+ state: dataTableWriteStateSchema,
1916
+ type: z.literal(BRIDGE_RENAME_DATA_TABLE_REQUEST_TYPE),
1917
+ version: z.literal(2)
1918
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1919
+ const bridgeDeleteDataTableSuccessResponseSchema = z.object({
1920
+ assetPath: z.string(),
1921
+ deleted: z.boolean(),
1922
+ dryRun: z.boolean(),
1923
+ forced: z.boolean(),
1924
+ ok: z.literal(true),
1925
+ referencerCount: z.number().int().min(0),
1926
+ referencers: z.array(z.string()).max(25),
1927
+ requestId: requestIdSchema,
1928
+ state: dataTableWriteStateSchema,
1929
+ type: z.literal(BRIDGE_DELETE_DATA_TABLE_REQUEST_TYPE),
1930
+ version: z.literal(2)
1931
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1932
+ const bridgeRenameDataTableRowSuccessResponseSchema = z.object({
1933
+ assetPath: z.string(),
1934
+ dryRun: z.boolean(),
1935
+ newRowName: z.string(),
1936
+ ok: z.literal(true),
1937
+ packageDirty: z.boolean(),
1938
+ renamed: z.boolean(),
1939
+ requestId: requestIdSchema,
1940
+ rowName: z.string(),
1941
+ state: dataTableWriteStateSchema,
1942
+ transactionTitle: z.string().trim().min(1).optional(),
1943
+ type: z.literal(BRIDGE_RENAME_DATA_TABLE_ROW_REQUEST_TYPE),
1944
+ version: z.literal(2)
1945
+ }).refine(isLevelEditStateConsistent, levelEditStateRefinement);
1323
1946
  const bridgeAssetDependencySchema = z.object({
1324
1947
  category: assetDependencyCategorySchema,
1325
1948
  isHard: z.boolean(),
@@ -1339,7 +1962,7 @@ const bridgeGetAssetDependenciesSuccessResponseSchema = z.object({
1339
1962
  requestId: requestIdSchema,
1340
1963
  scanning: z.boolean(),
1341
1964
  type: z.literal(BRIDGE_GET_ASSET_DEPENDENCIES_REQUEST_TYPE),
1342
- version: z.literal(1)
1965
+ version: z.literal(2)
1343
1966
  });
1344
1967
  const bridgeBlueprintReferenceSchema = z.object({
1345
1968
  assetName: z.string(),
@@ -1358,7 +1981,7 @@ const bridgeFindBlueprintReferencesSuccessResponseSchema = z.object({
1358
1981
  totalCount: z.number().int().min(0),
1359
1982
  truncated: z.boolean(),
1360
1983
  type: z.literal(BRIDGE_FIND_BLUEPRINT_REFERENCES_REQUEST_TYPE),
1361
- version: z.literal(1)
1984
+ version: z.literal(2)
1362
1985
  });
1363
1986
  const bridgeBlueprintComponentSchema = z.object({
1364
1987
  className: z.string(),
@@ -1411,7 +2034,7 @@ const bridgeGetBlueprintSummarySuccessResponseSchema = z.object({
1411
2034
  type: z.literal(BRIDGE_GET_BLUEPRINT_SUMMARY_REQUEST_TYPE),
1412
2035
  variableCount: z.number().int().min(0),
1413
2036
  variables: z.array(bridgeBlueprintVariableSchema),
1414
- version: z.literal(1)
2037
+ version: z.literal(2)
1415
2038
  });
1416
2039
  const bridgeBlueprintPinLinkSchema = z.object({
1417
2040
  nodeId: z.string(),
@@ -1445,7 +2068,7 @@ const bridgeGetBlueprintGraphSuccessResponseSchema = z.object({
1445
2068
  requestId: requestIdSchema,
1446
2069
  truncated: z.boolean(),
1447
2070
  type: z.literal(BRIDGE_GET_BLUEPRINT_GRAPH_REQUEST_TYPE),
1448
- version: z.literal(1)
2071
+ version: z.literal(2)
1449
2072
  });
1450
2073
  const bridgeBlueprintCompileDiagnosticSchema = bridgeCompileDiagnosticSchema.extend({
1451
2074
  graphName: z.string().optional(),
@@ -1470,7 +2093,7 @@ const bridgeGetBlueprintCompileErrorsSuccessResponseSchema = z.object({
1470
2093
  totalCount: z.number().int().min(0),
1471
2094
  truncated: z.boolean(),
1472
2095
  type: z.literal(BRIDGE_GET_BLUEPRINT_COMPILE_ERRORS_REQUEST_TYPE),
1473
- version: z.literal(1)
2096
+ version: z.literal(2)
1474
2097
  });
1475
2098
  const bridgeCompileBlueprintSuccessResponseSchema = z.object({
1476
2099
  compileJobId: blueprintCompileJobIdSchema.optional(),
@@ -1479,7 +2102,7 @@ const bridgeCompileBlueprintSuccessResponseSchema = z.object({
1479
2102
  requestId: requestIdSchema,
1480
2103
  state: compileBlueprintStateSchema,
1481
2104
  type: z.literal(BRIDGE_COMPILE_BLUEPRINT_REQUEST_TYPE),
1482
- version: z.literal(1)
2105
+ version: z.literal(2)
1483
2106
  }).refine((value) => value.state === "compiling" === (value.compileJobId !== void 0), {
1484
2107
  message: "A compile_blueprint response must carry compileJobId exactly when state is 'compiling'.",
1485
2108
  path: ["compileJobId"]
@@ -1496,7 +2119,7 @@ const bridgeGetBlueprintCompileStatusSuccessResponseSchema = z.object({
1496
2119
  totalCount: z.number().int().min(0),
1497
2120
  truncated: z.boolean(),
1498
2121
  type: z.literal(BRIDGE_GET_BLUEPRINT_COMPILE_STATUS_REQUEST_TYPE),
1499
- version: z.literal(1)
2122
+ version: z.literal(2)
1500
2123
  }).superRefine((value, ctx) => {
1501
2124
  if (value.state === "succeeded" || value.state === "failed") return;
1502
2125
  for (const field of ["durationMs", "finishedAt"]) if (value[field] !== void 0) ctx.addIssue({
@@ -1522,7 +2145,7 @@ const bridgeGetConfigValueSuccessResponseSchema = z.object({
1522
2145
  type: z.literal(BRIDGE_GET_CONFIG_VALUE_REQUEST_TYPE),
1523
2146
  value: configValueSchema.optional(),
1524
2147
  valueTruncated: z.boolean().optional(),
1525
- version: z.literal(1)
2148
+ version: z.literal(2)
1526
2149
  });
1527
2150
  const bridgeSetConfigValueSuccessResponseSchema = z.object({
1528
2151
  file: configFileSchema,
@@ -1537,7 +2160,7 @@ const bridgeSetConfigValueSuccessResponseSchema = z.object({
1537
2160
  section: configSectionSchema,
1538
2161
  type: z.literal(BRIDGE_SET_CONFIG_VALUE_REQUEST_TYPE),
1539
2162
  value: configValueSchema,
1540
- version: z.literal(1)
2163
+ version: z.literal(2)
1541
2164
  });
1542
2165
  const bridgeListConfigSectionSuccessResponseSchema = z.object({
1543
2166
  entries: z.array(bridgeConfigEntrySchema).max(200),
@@ -1549,13 +2172,13 @@ const bridgeListConfigSectionSuccessResponseSchema = z.object({
1549
2172
  totalCount: z.number().int().min(0),
1550
2173
  truncated: z.boolean(),
1551
2174
  type: z.literal(BRIDGE_LIST_CONFIG_SECTION_REQUEST_TYPE),
1552
- version: z.literal(1)
2175
+ version: z.literal(2)
1553
2176
  });
1554
2177
  const bridgeErrorResponseSchema = z.object({
1555
2178
  error: bridgeErrorSchema,
1556
2179
  ok: z.literal(false),
1557
2180
  requestId: requestIdSchema,
1558
- version: z.literal(1)
2181
+ version: z.literal(2)
1559
2182
  });
1560
2183
  const bridgePingResponseSchema = z.union([bridgePingSuccessResponseSchema, bridgeErrorResponseSchema]);
1561
2184
  const bridgeLogSubscribeResponseSchema = z.union([bridgeLogSubscribeSuccessResponseSchema, bridgeErrorResponseSchema]);
@@ -1585,6 +2208,26 @@ const bridgeStartTraceResponseSchema = z.union([bridgeStartTraceSuccessResponseS
1585
2208
  const bridgeStopTraceResponseSchema = z.union([bridgeStopTraceSuccessResponseSchema, bridgeErrorResponseSchema]);
1586
2209
  const bridgeCreateCppClassResponseSchema = z.union([bridgeCreateCppClassSuccessResponseSchema, bridgeErrorResponseSchema]);
1587
2210
  const bridgeGetCreateClassStatusResponseSchema = z.union([bridgeGetCreateClassStatusSuccessResponseSchema, bridgeErrorResponseSchema]);
2211
+ const bridgeListActorsResponseSchema = z.union([bridgeListActorsSuccessResponseSchema, bridgeErrorResponseSchema]);
2212
+ const bridgeGetActorDetailsResponseSchema = z.union([bridgeGetActorDetailsSuccessResponseSchema, bridgeErrorResponseSchema]);
2213
+ const bridgeGetCurrentLevelResponseSchema = z.union([bridgeGetCurrentLevelSuccessResponseSchema, bridgeErrorResponseSchema]);
2214
+ const bridgeSpawnActorResponseSchema = z.union([bridgeSpawnActorSuccessResponseSchema, bridgeErrorResponseSchema]);
2215
+ const bridgeDestroyActorResponseSchema = z.union([bridgeDestroyActorSuccessResponseSchema, bridgeErrorResponseSchema]);
2216
+ const bridgeSetActorTransformResponseSchema = z.union([bridgeSetActorTransformSuccessResponseSchema, bridgeErrorResponseSchema]);
2217
+ const bridgeSetActorPropertyResponseSchema = z.union([bridgeSetActorPropertySuccessResponseSchema, bridgeErrorResponseSchema]);
2218
+ const bridgeSelectActorsResponseSchema = z.union([bridgeSelectActorsSuccessResponseSchema, bridgeErrorResponseSchema]);
2219
+ const bridgeUndoResponseSchema = z.union([bridgeUndoSuccessResponseSchema, bridgeErrorResponseSchema]);
2220
+ const bridgeRedoResponseSchema = z.union([bridgeRedoSuccessResponseSchema, bridgeErrorResponseSchema]);
2221
+ const bridgeOpenLevelResponseSchema = z.union([bridgeOpenLevelSuccessResponseSchema, bridgeErrorResponseSchema]);
2222
+ const bridgeGetOpenLevelStatusResponseSchema = z.union([bridgeGetOpenLevelStatusSuccessResponseSchema, bridgeErrorResponseSchema]);
2223
+ const bridgeReadDataTableResponseSchema = z.union([bridgeReadDataTableSuccessResponseSchema, bridgeErrorResponseSchema]);
2224
+ const bridgeWriteDataTableRowResponseSchema = z.union([bridgeWriteDataTableRowSuccessResponseSchema, bridgeErrorResponseSchema]);
2225
+ const bridgeExportDataTableResponseSchema = z.union([bridgeExportDataTableSuccessResponseSchema, bridgeErrorResponseSchema]);
2226
+ const bridgeImportDataTableResponseSchema = z.union([bridgeImportDataTableSuccessResponseSchema, bridgeErrorResponseSchema]);
2227
+ const bridgeCreateDataTableResponseSchema = z.union([bridgeCreateDataTableSuccessResponseSchema, bridgeErrorResponseSchema]);
2228
+ const bridgeRenameDataTableResponseSchema = z.union([bridgeRenameDataTableSuccessResponseSchema, bridgeErrorResponseSchema]);
2229
+ const bridgeDeleteDataTableResponseSchema = z.union([bridgeDeleteDataTableSuccessResponseSchema, bridgeErrorResponseSchema]);
2230
+ const bridgeRenameDataTableRowResponseSchema = z.union([bridgeRenameDataTableRowSuccessResponseSchema, bridgeErrorResponseSchema]);
1588
2231
  const bridgeFindAssetsResponseSchema = z.union([bridgeFindAssetsSuccessResponseSchema, bridgeErrorResponseSchema]);
1589
2232
  const bridgeGetAssetDependenciesResponseSchema = z.union([bridgeGetAssetDependenciesSuccessResponseSchema, bridgeErrorResponseSchema]);
1590
2233
  const bridgeFindBlueprintReferencesResponseSchema = z.union([bridgeFindBlueprintReferencesSuccessResponseSchema, bridgeErrorResponseSchema]);
@@ -1596,6 +2239,94 @@ const bridgeGetBlueprintCompileStatusResponseSchema = z.union([bridgeGetBlueprin
1596
2239
  const bridgeGetConfigValueResponseSchema = z.union([bridgeGetConfigValueSuccessResponseSchema, bridgeErrorResponseSchema]);
1597
2240
  const bridgeSetConfigValueResponseSchema = z.union([bridgeSetConfigValueSuccessResponseSchema, bridgeErrorResponseSchema]);
1598
2241
  const bridgeListConfigSectionResponseSchema = z.union([bridgeListConfigSectionSuccessResponseSchema, bridgeErrorResponseSchema]);
2242
+ function createBridgeReadDataTableRequest(assetPath, options = {}, requestId = randomUUID()) {
2243
+ return bridgeReadDataTableRequestSchema.parse({
2244
+ assetPath,
2245
+ cursor: options.cursor,
2246
+ loadIfNeeded: options.loadIfNeeded,
2247
+ maxRows: options.maxRows ?? 25,
2248
+ requestId,
2249
+ rowNameFilter: options.rowNameFilter,
2250
+ type: BRIDGE_READ_DATA_TABLE_REQUEST_TYPE,
2251
+ version: 2
2252
+ });
2253
+ }
2254
+ function createBridgeWriteDataTableRowRequest(assetPath, rowName, operation, options = {}, requestId = randomUUID()) {
2255
+ return bridgeWriteDataTableRowRequestSchema.parse({
2256
+ assetPath,
2257
+ dryRun: options.dryRun,
2258
+ operation,
2259
+ requestId,
2260
+ rowName,
2261
+ type: BRIDGE_WRITE_DATA_TABLE_ROW_REQUEST_TYPE,
2262
+ values: options.values,
2263
+ version: 2
2264
+ });
2265
+ }
2266
+ function createBridgeExportDataTableRequest(assetPath, options = {}, requestId = randomUUID()) {
2267
+ return bridgeExportDataTableRequestSchema.parse({
2268
+ assetPath,
2269
+ cursor: options.cursor,
2270
+ format: options.format,
2271
+ loadIfNeeded: options.loadIfNeeded,
2272
+ requestId,
2273
+ type: BRIDGE_EXPORT_DATA_TABLE_REQUEST_TYPE,
2274
+ version: 2
2275
+ });
2276
+ }
2277
+ function createBridgeImportDataTableRequest(assetPath, content, options = {}, requestId = randomUUID()) {
2278
+ return bridgeImportDataTableRequestSchema.parse({
2279
+ assetPath,
2280
+ content,
2281
+ dryRun: options.dryRun,
2282
+ format: options.format,
2283
+ requestId,
2284
+ type: BRIDGE_IMPORT_DATA_TABLE_REQUEST_TYPE,
2285
+ version: 2
2286
+ });
2287
+ }
2288
+ function createBridgeCreateDataTableRequest(assetPath, rowStructPath, options = {}, requestId = randomUUID()) {
2289
+ return bridgeCreateDataTableRequestSchema.parse({
2290
+ assetPath,
2291
+ dryRun: options.dryRun,
2292
+ requestId,
2293
+ rowStructPath,
2294
+ type: BRIDGE_CREATE_DATA_TABLE_REQUEST_TYPE,
2295
+ version: 2
2296
+ });
2297
+ }
2298
+ function createBridgeRenameDataTableRequest(assetPath, options = {}, requestId = randomUUID()) {
2299
+ return bridgeRenameDataTableRequestSchema.parse({
2300
+ assetPath,
2301
+ destinationPath: options.destinationPath,
2302
+ dryRun: options.dryRun,
2303
+ newName: options.newName,
2304
+ requestId,
2305
+ type: BRIDGE_RENAME_DATA_TABLE_REQUEST_TYPE,
2306
+ version: 2
2307
+ });
2308
+ }
2309
+ function createBridgeDeleteDataTableRequest(assetPath, options = {}, requestId = randomUUID()) {
2310
+ return bridgeDeleteDataTableRequestSchema.parse({
2311
+ assetPath,
2312
+ dryRun: options.dryRun,
2313
+ force: options.force,
2314
+ requestId,
2315
+ type: BRIDGE_DELETE_DATA_TABLE_REQUEST_TYPE,
2316
+ version: 2
2317
+ });
2318
+ }
2319
+ function createBridgeRenameDataTableRowRequest(assetPath, rowName, newRowName, options = {}, requestId = randomUUID()) {
2320
+ return bridgeRenameDataTableRowRequestSchema.parse({
2321
+ assetPath,
2322
+ dryRun: options.dryRun,
2323
+ newRowName,
2324
+ requestId,
2325
+ rowName,
2326
+ type: BRIDGE_RENAME_DATA_TABLE_ROW_REQUEST_TYPE,
2327
+ version: 2
2328
+ });
2329
+ }
1599
2330
  function createBridgeFindAssetsRequest(options = {}, requestId = randomUUID()) {
1600
2331
  return bridgeFindAssetsRequestSchema.parse({
1601
2332
  classNames: options.classNames,
@@ -1607,7 +2338,117 @@ function createBridgeFindAssetsRequest(options = {}, requestId = randomUUID()) {
1607
2338
  recursivePaths: options.recursivePaths,
1608
2339
  requestId,
1609
2340
  type: BRIDGE_FIND_ASSETS_REQUEST_TYPE,
1610
- version: 1
2341
+ version: 2
2342
+ });
2343
+ }
2344
+ function createBridgeListActorsRequest(options = {}, requestId = randomUUID()) {
2345
+ return bridgeListActorsRequestSchema.parse({
2346
+ classNames: options.classNames,
2347
+ cursor: options.cursor,
2348
+ levelName: options.levelName,
2349
+ maxResults: options.maxResults ?? 50,
2350
+ nameFilter: options.nameFilter,
2351
+ requestId,
2352
+ tag: options.tag,
2353
+ type: BRIDGE_LIST_ACTORS_REQUEST_TYPE,
2354
+ version: 2
2355
+ });
2356
+ }
2357
+ function createBridgeGetActorDetailsRequest(actorPath, options = {}, requestId = randomUUID()) {
2358
+ return bridgeGetActorDetailsRequestSchema.parse({
2359
+ actorPath,
2360
+ componentCursor: options.componentCursor,
2361
+ includeInherited: options.includeInherited,
2362
+ maxResults: options.maxResults ?? 25,
2363
+ propertyCursor: options.propertyCursor,
2364
+ requestId,
2365
+ type: BRIDGE_GET_ACTOR_DETAILS_REQUEST_TYPE,
2366
+ version: 2
2367
+ });
2368
+ }
2369
+ function createBridgeGetCurrentLevelRequest(requestId = randomUUID()) {
2370
+ return bridgeGetCurrentLevelRequestSchema.parse({
2371
+ requestId,
2372
+ type: BRIDGE_GET_CURRENT_LEVEL_REQUEST_TYPE,
2373
+ version: 2
2374
+ });
2375
+ }
2376
+ function createBridgeSpawnActorRequest(spawns, options = {}, requestId = randomUUID()) {
2377
+ return bridgeSpawnActorRequestSchema.parse({
2378
+ dryRun: options.dryRun,
2379
+ requestId,
2380
+ spawns,
2381
+ type: BRIDGE_SPAWN_ACTOR_REQUEST_TYPE,
2382
+ version: 2
2383
+ });
2384
+ }
2385
+ function createBridgeDestroyActorRequest(actorPaths, options = {}, requestId = randomUUID()) {
2386
+ return bridgeDestroyActorRequestSchema.parse({
2387
+ actorPaths,
2388
+ dryRun: options.dryRun,
2389
+ requestId,
2390
+ type: BRIDGE_DESTROY_ACTOR_REQUEST_TYPE,
2391
+ version: 2
2392
+ });
2393
+ }
2394
+ function createBridgeSetActorTransformRequest(transforms, options = {}, requestId = randomUUID()) {
2395
+ return bridgeSetActorTransformRequestSchema.parse({
2396
+ dryRun: options.dryRun,
2397
+ requestId,
2398
+ transforms,
2399
+ type: BRIDGE_SET_ACTOR_TRANSFORM_REQUEST_TYPE,
2400
+ version: 2
2401
+ });
2402
+ }
2403
+ function createBridgeSetActorPropertyRequest(properties, options = {}, requestId = randomUUID()) {
2404
+ return bridgeSetActorPropertyRequestSchema.parse({
2405
+ dryRun: options.dryRun,
2406
+ properties,
2407
+ requestId,
2408
+ type: BRIDGE_SET_ACTOR_PROPERTY_REQUEST_TYPE,
2409
+ version: 2
2410
+ });
2411
+ }
2412
+ function createBridgeSelectActorsRequest(actorPaths, options = {}, requestId = randomUUID()) {
2413
+ return bridgeSelectActorsRequestSchema.parse({
2414
+ actorPaths,
2415
+ addToSelection: options.addToSelection,
2416
+ dryRun: options.dryRun,
2417
+ requestId,
2418
+ type: BRIDGE_SELECT_ACTORS_REQUEST_TYPE,
2419
+ version: 2
2420
+ });
2421
+ }
2422
+ function createBridgeUndoRequest(requestId = randomUUID()) {
2423
+ return bridgeUndoRequestSchema.parse({
2424
+ requestId,
2425
+ type: BRIDGE_UNDO_REQUEST_TYPE,
2426
+ version: 2
2427
+ });
2428
+ }
2429
+ function createBridgeRedoRequest(requestId = randomUUID()) {
2430
+ return bridgeRedoRequestSchema.parse({
2431
+ requestId,
2432
+ type: BRIDGE_REDO_REQUEST_TYPE,
2433
+ version: 2
2434
+ });
2435
+ }
2436
+ function createBridgeOpenLevelRequest(levelPath, options = {}, requestId = randomUUID()) {
2437
+ return bridgeOpenLevelRequestSchema.parse({
2438
+ dryRun: options.dryRun,
2439
+ levelPath,
2440
+ requestId,
2441
+ saveDirtyPackages: options.saveDirtyPackages,
2442
+ type: BRIDGE_OPEN_LEVEL_REQUEST_TYPE,
2443
+ version: 2
2444
+ });
2445
+ }
2446
+ function createBridgeGetOpenLevelStatusRequest(openLevelJobId, requestId = randomUUID()) {
2447
+ return bridgeGetOpenLevelStatusRequestSchema.parse({
2448
+ openLevelJobId,
2449
+ requestId,
2450
+ type: BRIDGE_GET_OPEN_LEVEL_STATUS_REQUEST_TYPE,
2451
+ version: 2
1611
2452
  });
1612
2453
  }
1613
2454
  function createBridgeGetAssetDependenciesRequest(assetPath, options = {}, requestId = randomUUID()) {
@@ -1620,7 +2461,7 @@ function createBridgeGetAssetDependenciesRequest(assetPath, options = {}, reques
1620
2461
  referencerCursor: options.referencerCursor,
1621
2462
  requestId,
1622
2463
  type: BRIDGE_GET_ASSET_DEPENDENCIES_REQUEST_TYPE,
1623
- version: 1
2464
+ version: 2
1624
2465
  });
1625
2466
  }
1626
2467
  function createBridgeFindBlueprintReferencesRequest(className, options = {}, requestId = randomUUID()) {
@@ -1631,7 +2472,7 @@ function createBridgeFindBlueprintReferencesRequest(className, options = {}, req
1631
2472
  referenceKinds: options.referenceKinds,
1632
2473
  requestId,
1633
2474
  type: BRIDGE_FIND_BLUEPRINT_REFERENCES_REQUEST_TYPE,
1634
- version: 1
2475
+ version: 2
1635
2476
  });
1636
2477
  }
1637
2478
  function createBridgeGetBlueprintSummaryRequest(blueprintPath, options = {}, requestId = randomUUID()) {
@@ -1645,7 +2486,7 @@ function createBridgeGetBlueprintSummaryRequest(blueprintPath, options = {}, req
1645
2486
  requestId,
1646
2487
  type: BRIDGE_GET_BLUEPRINT_SUMMARY_REQUEST_TYPE,
1647
2488
  variableCursor: options.variableCursor,
1648
- version: 1
2489
+ version: 2
1649
2490
  });
1650
2491
  }
1651
2492
  function createBridgeGetBlueprintGraphRequest(blueprintPath, graphName, options = {}, requestId = randomUUID()) {
@@ -1657,7 +2498,7 @@ function createBridgeGetBlueprintGraphRequest(blueprintPath, graphName, options
1657
2498
  nodeCursor: options.nodeCursor,
1658
2499
  requestId,
1659
2500
  type: BRIDGE_GET_BLUEPRINT_GRAPH_REQUEST_TYPE,
1660
- version: 1
2501
+ version: 2
1661
2502
  });
1662
2503
  }
1663
2504
  function createBridgeGetBlueprintCompileErrorsRequest(blueprintPaths, options = {}, requestId = randomUUID()) {
@@ -1667,7 +2508,7 @@ function createBridgeGetBlueprintCompileErrorsRequest(blueprintPaths, options =
1667
2508
  maxResults: options.maxResults ?? 50,
1668
2509
  requestId,
1669
2510
  type: BRIDGE_GET_BLUEPRINT_COMPILE_ERRORS_REQUEST_TYPE,
1670
- version: 1
2511
+ version: 2
1671
2512
  });
1672
2513
  }
1673
2514
  function createBridgeCompileBlueprintRequest(blueprintPaths, requestId = randomUUID()) {
@@ -1675,7 +2516,7 @@ function createBridgeCompileBlueprintRequest(blueprintPaths, requestId = randomU
1675
2516
  blueprintPaths,
1676
2517
  requestId,
1677
2518
  type: BRIDGE_COMPILE_BLUEPRINT_REQUEST_TYPE,
1678
- version: 1
2519
+ version: 2
1679
2520
  });
1680
2521
  }
1681
2522
  function createBridgeGetBlueprintCompileStatusRequest(compileJobId, options = {}, requestId = randomUUID()) {
@@ -1685,7 +2526,7 @@ function createBridgeGetBlueprintCompileStatusRequest(compileJobId, options = {}
1685
2526
  maxResults: options.maxResults ?? 50,
1686
2527
  requestId,
1687
2528
  type: BRIDGE_GET_BLUEPRINT_COMPILE_STATUS_REQUEST_TYPE,
1688
- version: 1
2529
+ version: 2
1689
2530
  });
1690
2531
  }
1691
2532
  function createBridgeGetConfigValueRequest(input, requestId = randomUUID()) {
@@ -1695,7 +2536,7 @@ function createBridgeGetConfigValueRequest(input, requestId = randomUUID()) {
1695
2536
  requestId,
1696
2537
  section: input.section,
1697
2538
  type: BRIDGE_GET_CONFIG_VALUE_REQUEST_TYPE,
1698
- version: 1
2539
+ version: 2
1699
2540
  });
1700
2541
  }
1701
2542
  function createBridgeSetConfigValueRequest(input, requestId = randomUUID()) {
@@ -1707,7 +2548,7 @@ function createBridgeSetConfigValueRequest(input, requestId = randomUUID()) {
1707
2548
  section: input.section,
1708
2549
  type: BRIDGE_SET_CONFIG_VALUE_REQUEST_TYPE,
1709
2550
  value: input.value,
1710
- version: 1
2551
+ version: 2
1711
2552
  });
1712
2553
  }
1713
2554
  function createBridgeListConfigSectionRequest(input, requestId = randomUUID()) {
@@ -1718,28 +2559,28 @@ function createBridgeListConfigSectionRequest(input, requestId = randomUUID()) {
1718
2559
  requestId,
1719
2560
  section: input.section,
1720
2561
  type: BRIDGE_LIST_CONFIG_SECTION_REQUEST_TYPE,
1721
- version: 1
2562
+ version: 2
1722
2563
  });
1723
2564
  }
1724
2565
  function createBridgePingRequest(requestId = randomUUID()) {
1725
2566
  return {
1726
2567
  requestId,
1727
2568
  type: BRIDGE_PING_REQUEST_TYPE,
1728
- version: 1
2569
+ version: 2
1729
2570
  };
1730
2571
  }
1731
2572
  function createBridgeStartLiveCompileRequest(requestId = randomUUID()) {
1732
2573
  return {
1733
2574
  requestId,
1734
2575
  type: BRIDGE_START_LIVE_COMPILE_REQUEST_TYPE,
1735
- version: 1
2576
+ version: 2
1736
2577
  };
1737
2578
  }
1738
2579
  function createBridgeStartHotReloadRequest(requestId = randomUUID()) {
1739
2580
  return {
1740
2581
  requestId,
1741
2582
  type: BRIDGE_START_HOT_RELOAD_REQUEST_TYPE,
1742
- version: 1
2583
+ version: 2
1743
2584
  };
1744
2585
  }
1745
2586
  function createBridgeGetCompileStatusRequest(compileJobId, requestId = randomUUID()) {
@@ -1747,7 +2588,7 @@ function createBridgeGetCompileStatusRequest(compileJobId, requestId = randomUUI
1747
2588
  compileJobId,
1748
2589
  requestId,
1749
2590
  type: BRIDGE_GET_COMPILE_STATUS_REQUEST_TYPE,
1750
- version: 1
2591
+ version: 2
1751
2592
  });
1752
2593
  }
1753
2594
  function createBridgeLogSubscribeRequest(source, filters, requestId = randomUUID()) {
@@ -1756,7 +2597,7 @@ function createBridgeLogSubscribeRequest(source, filters, requestId = randomUUID
1756
2597
  requestId,
1757
2598
  source,
1758
2599
  type: BRIDGE_SUBSCRIBE_LOGS_REQUEST_TYPE,
1759
- version: 1
2600
+ version: 2
1760
2601
  });
1761
2602
  }
1762
2603
  function createBridgeLogDrainRequest(subscriptionId, cursor, maxEvents, requestId = randomUUID()) {
@@ -1766,7 +2607,7 @@ function createBridgeLogDrainRequest(subscriptionId, cursor, maxEvents, requestI
1766
2607
  requestId,
1767
2608
  subscriptionId,
1768
2609
  type: BRIDGE_DRAIN_LOGS_REQUEST_TYPE,
1769
- version: 1
2610
+ version: 2
1770
2611
  });
1771
2612
  }
1772
2613
  function createBridgeStartPieRequest(mode = "new_window", map, options = {}, requestId = randomUUID()) {
@@ -1778,7 +2619,7 @@ function createBridgeStartPieRequest(mode = "new_window", map, options = {}, req
1778
2619
  requestId,
1779
2620
  runUnderOneProcess: options.runUnderOneProcess,
1780
2621
  type: BRIDGE_START_PIE_REQUEST_TYPE,
1781
- version: 1
2622
+ version: 2
1782
2623
  });
1783
2624
  }
1784
2625
  function createBridgeGetPieStatusRequest(pieSessionId, requestId = randomUUID()) {
@@ -1786,7 +2627,7 @@ function createBridgeGetPieStatusRequest(pieSessionId, requestId = randomUUID())
1786
2627
  pieSessionId,
1787
2628
  requestId,
1788
2629
  type: BRIDGE_GET_PIE_STATUS_REQUEST_TYPE,
1789
- version: 1
2630
+ version: 2
1790
2631
  });
1791
2632
  }
1792
2633
  function createBridgeStopPieRequest(pieSessionId, requestId = randomUUID()) {
@@ -1794,14 +2635,14 @@ function createBridgeStopPieRequest(pieSessionId, requestId = randomUUID()) {
1794
2635
  pieSessionId,
1795
2636
  requestId,
1796
2637
  type: BRIDGE_STOP_PIE_REQUEST_TYPE,
1797
- version: 1
2638
+ version: 2
1798
2639
  });
1799
2640
  }
1800
2641
  function createBridgeListLaunchDevicesRequest(requestId = randomUUID()) {
1801
2642
  return {
1802
2643
  requestId,
1803
2644
  type: BRIDGE_LIST_LAUNCH_DEVICES_REQUEST_TYPE,
1804
- version: 1
2645
+ version: 2
1805
2646
  };
1806
2647
  }
1807
2648
  function createBridgeLaunchOnDeviceRequest(deviceId, map, requestId = randomUUID()) {
@@ -1810,7 +2651,7 @@ function createBridgeLaunchOnDeviceRequest(deviceId, map, requestId = randomUUID
1810
2651
  map,
1811
2652
  requestId,
1812
2653
  type: BRIDGE_LAUNCH_ON_DEVICE_REQUEST_TYPE,
1813
- version: 1
2654
+ version: 2
1814
2655
  });
1815
2656
  }
1816
2657
  function createBridgeListAutomationTestsRequest(options = {}, requestId = randomUUID()) {
@@ -1821,7 +2662,7 @@ function createBridgeListAutomationTestsRequest(options = {}, requestId = random
1821
2662
  nameFilter: options.nameFilter,
1822
2663
  requestId,
1823
2664
  type: BRIDGE_LIST_AUTOMATION_TESTS_REQUEST_TYPE,
1824
- version: 1
2665
+ version: 2
1825
2666
  });
1826
2667
  }
1827
2668
  function createBridgeStartAutomationRunRequest(selectors, requestId = randomUUID()) {
@@ -1831,7 +2672,7 @@ function createBridgeStartAutomationRunRequest(selectors, requestId = randomUUID
1831
2672
  requestId,
1832
2673
  testNames: selectors.testNames ?? [],
1833
2674
  type: BRIDGE_START_AUTOMATION_RUN_REQUEST_TYPE,
1834
- version: 1
2675
+ version: 2
1835
2676
  });
1836
2677
  }
1837
2678
  function createBridgeGetAutomationRunStatusRequest(testRunId, options = {}, requestId = randomUUID()) {
@@ -1841,7 +2682,7 @@ function createBridgeGetAutomationRunStatusRequest(testRunId, options = {}, requ
1841
2682
  requestId,
1842
2683
  testRunId,
1843
2684
  type: BRIDGE_GET_AUTOMATION_RUN_STATUS_REQUEST_TYPE,
1844
- version: 1
2685
+ version: 2
1845
2686
  });
1846
2687
  }
1847
2688
  function createBridgeCancelAutomationRunRequest(testRunId, requestId = randomUUID()) {
@@ -1849,14 +2690,14 @@ function createBridgeCancelAutomationRunRequest(testRunId, requestId = randomUUI
1849
2690
  requestId,
1850
2691
  testRunId,
1851
2692
  type: BRIDGE_CANCEL_AUTOMATION_RUN_REQUEST_TYPE,
1852
- version: 1
2693
+ version: 2
1853
2694
  });
1854
2695
  }
1855
2696
  function createBridgeGetEditorStateRequest(requestId = randomUUID()) {
1856
2697
  return {
1857
2698
  requestId,
1858
2699
  type: BRIDGE_GET_EDITOR_STATE_REQUEST_TYPE,
1859
- version: 1
2700
+ version: 2
1860
2701
  };
1861
2702
  }
1862
2703
  function createBridgeExecConsoleCommandRequest(command, requestId = randomUUID()) {
@@ -1864,14 +2705,14 @@ function createBridgeExecConsoleCommandRequest(command, requestId = randomUUID()
1864
2705
  command,
1865
2706
  requestId,
1866
2707
  type: BRIDGE_EXEC_CONSOLE_COMMAND_REQUEST_TYPE,
1867
- version: 1
2708
+ version: 2
1868
2709
  });
1869
2710
  }
1870
2711
  function createBridgeStatSnapshotRequest(requestId = randomUUID()) {
1871
2712
  return bridgeStatSnapshotRequestSchema.parse({
1872
2713
  requestId,
1873
2714
  type: BRIDGE_STAT_SNAPSHOT_REQUEST_TYPE,
1874
- version: 1
2715
+ version: 2
1875
2716
  });
1876
2717
  }
1877
2718
  function createBridgeSaveDirtyPackagesRequest(options = {}, requestId = randomUUID()) {
@@ -1880,7 +2721,7 @@ function createBridgeSaveDirtyPackagesRequest(options = {}, requestId = randomUU
1880
2721
  saveContentPackages: options.saveContentPackages,
1881
2722
  saveMapPackages: options.saveMapPackages,
1882
2723
  type: BRIDGE_SAVE_DIRTY_PACKAGES_REQUEST_TYPE,
1883
- version: 1
2724
+ version: 2
1884
2725
  });
1885
2726
  }
1886
2727
  function createBridgeStartTraceRequest(options = {}, requestId = randomUUID()) {
@@ -1889,7 +2730,7 @@ function createBridgeStartTraceRequest(options = {}, requestId = randomUUID()) {
1889
2730
  fileName: options.fileName,
1890
2731
  requestId,
1891
2732
  type: BRIDGE_START_TRACE_REQUEST_TYPE,
1892
- version: 1
2733
+ version: 2
1893
2734
  });
1894
2735
  }
1895
2736
  function createBridgeGetClassReflectionRequest(className, options = {}, requestId = randomUUID()) {
@@ -1902,14 +2743,14 @@ function createBridgeGetClassReflectionRequest(className, options = {}, requestI
1902
2743
  propertyCursor: options.propertyCursor,
1903
2744
  requestId,
1904
2745
  type: BRIDGE_GET_CLASS_REFLECTION_REQUEST_TYPE,
1905
- version: 1
2746
+ version: 2
1906
2747
  });
1907
2748
  }
1908
2749
  function createBridgeCaptureViewportRequest(requestId = randomUUID()) {
1909
2750
  return {
1910
2751
  requestId,
1911
2752
  type: BRIDGE_CAPTURE_VIEWPORT_REQUEST_TYPE,
1912
- version: 1
2753
+ version: 2
1913
2754
  };
1914
2755
  }
1915
2756
  function createBridgeGetCdoDefaultsRequest(className, options = {}, requestId = randomUUID()) {
@@ -1921,7 +2762,7 @@ function createBridgeGetCdoDefaultsRequest(className, options = {}, requestId =
1921
2762
  nameFilter: options.nameFilter,
1922
2763
  requestId,
1923
2764
  type: BRIDGE_GET_CDO_DEFAULTS_REQUEST_TYPE,
1924
- version: 1
2765
+ version: 2
1925
2766
  });
1926
2767
  }
1927
2768
  function createBridgeGetCrashCallstackRequest(maxRecords = 1, maxFrames = 32, requestId = randomUUID()) {
@@ -1930,14 +2771,14 @@ function createBridgeGetCrashCallstackRequest(maxRecords = 1, maxFrames = 32, re
1930
2771
  maxRecords,
1931
2772
  requestId,
1932
2773
  type: BRIDGE_GET_CRASH_CALLSTACK_REQUEST_TYPE,
1933
- version: 1
2774
+ version: 2
1934
2775
  });
1935
2776
  }
1936
2777
  function createBridgeStopTraceRequest(requestId = randomUUID()) {
1937
2778
  return bridgeStopTraceRequestSchema.parse({
1938
2779
  requestId,
1939
2780
  type: BRIDGE_STOP_TRACE_REQUEST_TYPE,
1940
- version: 1
2781
+ version: 2
1941
2782
  });
1942
2783
  }
1943
2784
  function createBridgeCreateCppClassRequest(className, parentClass, options = {}, requestId = randomUUID()) {
@@ -1948,7 +2789,7 @@ function createBridgeCreateCppClassRequest(className, parentClass, options = {},
1948
2789
  parentClass,
1949
2790
  requestId,
1950
2791
  type: BRIDGE_CREATE_CPP_CLASS_REQUEST_TYPE,
1951
- version: 1
2792
+ version: 2
1952
2793
  });
1953
2794
  }
1954
2795
  function createBridgeGetCreateClassStatusRequest(createClassJobId, requestId = randomUUID()) {
@@ -1956,7 +2797,7 @@ function createBridgeGetCreateClassStatusRequest(createClassJobId, requestId = r
1956
2797
  createClassJobId,
1957
2798
  requestId,
1958
2799
  type: BRIDGE_GET_CREATE_CLASS_STATUS_REQUEST_TYPE,
1959
- version: 1
2800
+ version: 2
1960
2801
  });
1961
2802
  }
1962
2803
  //#endregion
@@ -2053,10 +2894,70 @@ async function sendBridgeStartTraceRequest(request, options) {
2053
2894
  async function sendBridgeStopTraceRequest(request, options) {
2054
2895
  return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeStopTraceResponseSchema, request.requestId);
2055
2896
  }
2056
- async function sendBridgeFindAssetsRequest(request, options) {
2057
- return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeFindAssetsResponseSchema, request.requestId);
2897
+ async function sendBridgeReadDataTableRequest(request, options) {
2898
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeReadDataTableResponseSchema, request.requestId);
2058
2899
  }
2059
- async function sendBridgeGetAssetDependenciesRequest(request, options) {
2900
+ async function sendBridgeWriteDataTableRowRequest(request, options) {
2901
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeWriteDataTableRowResponseSchema, request.requestId);
2902
+ }
2903
+ async function sendBridgeExportDataTableRequest(request, options) {
2904
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeExportDataTableResponseSchema, request.requestId);
2905
+ }
2906
+ async function sendBridgeImportDataTableRequest(request, options) {
2907
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeImportDataTableResponseSchema, request.requestId);
2908
+ }
2909
+ async function sendBridgeCreateDataTableRequest(request, options) {
2910
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeCreateDataTableResponseSchema, request.requestId);
2911
+ }
2912
+ async function sendBridgeRenameDataTableRequest(request, options) {
2913
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeRenameDataTableResponseSchema, request.requestId);
2914
+ }
2915
+ async function sendBridgeDeleteDataTableRequest(request, options) {
2916
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeDeleteDataTableResponseSchema, request.requestId);
2917
+ }
2918
+ async function sendBridgeRenameDataTableRowRequest(request, options) {
2919
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeRenameDataTableRowResponseSchema, request.requestId);
2920
+ }
2921
+ async function sendBridgeFindAssetsRequest(request, options) {
2922
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeFindAssetsResponseSchema, request.requestId);
2923
+ }
2924
+ async function sendBridgeListActorsRequest(request, options) {
2925
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeListActorsResponseSchema, request.requestId);
2926
+ }
2927
+ async function sendBridgeGetActorDetailsRequest(request, options) {
2928
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeGetActorDetailsResponseSchema, request.requestId);
2929
+ }
2930
+ async function sendBridgeGetCurrentLevelRequest(request, options) {
2931
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeGetCurrentLevelResponseSchema, request.requestId);
2932
+ }
2933
+ async function sendBridgeSpawnActorRequest(request, options) {
2934
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeSpawnActorResponseSchema, request.requestId);
2935
+ }
2936
+ async function sendBridgeDestroyActorRequest(request, options) {
2937
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeDestroyActorResponseSchema, request.requestId);
2938
+ }
2939
+ async function sendBridgeSetActorTransformRequest(request, options) {
2940
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeSetActorTransformResponseSchema, request.requestId);
2941
+ }
2942
+ async function sendBridgeSetActorPropertyRequest(request, options) {
2943
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeSetActorPropertyResponseSchema, request.requestId);
2944
+ }
2945
+ async function sendBridgeSelectActorsRequest(request, options) {
2946
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeSelectActorsResponseSchema, request.requestId);
2947
+ }
2948
+ async function sendBridgeUndoRequest(request, options) {
2949
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeUndoResponseSchema, request.requestId);
2950
+ }
2951
+ async function sendBridgeRedoRequest(request, options) {
2952
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeRedoResponseSchema, request.requestId);
2953
+ }
2954
+ async function sendBridgeOpenLevelRequest(request, options) {
2955
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeOpenLevelResponseSchema, request.requestId);
2956
+ }
2957
+ async function sendBridgeGetOpenLevelStatusRequest(request, options) {
2958
+ return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeGetOpenLevelStatusResponseSchema, request.requestId);
2959
+ }
2960
+ async function sendBridgeGetAssetDependenciesRequest(request, options) {
2060
2961
  return parseBridgeResponse(await exchangeBridgeMessage(encodeBridgeFrame(request), options), bridgeGetAssetDependenciesResponseSchema, request.requestId);
2061
2962
  }
2062
2963
  async function sendBridgeFindBlueprintReferencesRequest(request, options) {
@@ -5195,6 +6096,118 @@ const findAssetsInputSchema = {
5195
6096
  recursiveClasses: bridgeFindAssetsRequestSchema.shape.recursiveClasses.describe("Whether classNames also match subclasses (default true)."),
5196
6097
  recursivePaths: bridgeFindAssetsRequestSchema.shape.recursivePaths.describe("Whether packagePaths also match sub-folders (default true).")
5197
6098
  };
6099
+ const readDataTableInputSchema = {
6100
+ assetPath: bridgeReadDataTableRequestSchema.shape.assetPath.describe("Object path of the DataTable asset, as find_assets reports it (e.g. /Game/Data/DT_Weapons.DT_Weapons)."),
6101
+ cursor: bridgeReadDataTableRequestSchema.shape.cursor.describe("Offset into the name-ordered row list (default 0). Pass the previous response nextCursor to fetch the next page."),
6102
+ loadIfNeeded: bridgeReadDataTableRequestSchema.shape.loadIfNeeded.describe("Whether to load the asset when the editor does not already have it in memory (default true). A DataTable carries no Asset Registry tags describing its rows, so with this false an unloaded table reports asset_not_loaded rather than an empty table."),
6103
+ maxRows: bridgeReadDataTableRequestSchema.shape.maxRows.default(25).describe("Maximum number of rows to return per page (1-100, default 25). totalRowCount still reports the unbounded row count."),
6104
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the DataTable."),
6105
+ rowNameFilter: bridgeReadDataTableRequestSchema.shape.rowNameFilter.describe("Optional case-insensitive substring matched against each row name, applied before paging.")
6106
+ };
6107
+ const writeDataTableRowInputSchema = {
6108
+ assetPath: bridgeWriteDataTableRowRequestSchema.shape.assetPath.describe("Object path of the DataTable asset to write (e.g. /Game/Data/DT_Weapons.DT_Weapons)."),
6109
+ dryRun: bridgeWriteDataTableRowRequestSchema.shape.dryRun.describe("When true, resolve the row struct and validate every column and value without opening a transaction or dirtying the package (default false)."),
6110
+ operation: bridgeWriteDataTableRowRequestSchema.shape.operation.describe("'upsert' inserts the row or replaces it if it already exists; 'delete' removes it by name. Deleting a row that is not there is reported through rowExisted=false, not as an error."),
6111
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the DataTable."),
6112
+ rowName: bridgeWriteDataTableRowRequestSchema.shape.rowName.describe("Name of the row to write or delete, as read_data_table reports it."),
6113
+ values: bridgeWriteDataTableRowRequestSchema.shape.values.describe("Column name to value, in the same ExportText format read_data_table emits (required for upsert, forbidden for delete). Every column and value is validated against the row struct before anything is written: an unknown column or a value that will not parse rejects the whole write, so a row is never partially applied. Columns omitted on an upsert of an existing row keep their current value.")
6114
+ };
6115
+ const exportDataTableInputSchema = {
6116
+ assetPath: bridgeExportDataTableRequestSchema.shape.assetPath.describe("Object path of the DataTable asset to export (e.g. /Game/Data/DT_Weapons.DT_Weapons)."),
6117
+ cursor: bridgeExportDataTableRequestSchema.shape.cursor.describe("Character offset into the serialized table (default 0). Pass the previous response nextCursor to fetch the next chunk."),
6118
+ format: bridgeExportDataTableRequestSchema.shape.format.describe("Serialization to use: 'json' (default) or 'csv'. Both come from the engine's own DataTable exporters."),
6119
+ loadIfNeeded: bridgeExportDataTableRequestSchema.shape.loadIfNeeded.describe("Whether to load the asset when the editor does not already have it in memory (default true)."),
6120
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the DataTable.")
6121
+ };
6122
+ const importDataTableInputSchema = {
6123
+ assetPath: bridgeImportDataTableRequestSchema.shape.assetPath.describe("Object path of the DataTable asset to overwrite (e.g. /Game/Data/DT_Weapons.DT_Weapons)."),
6124
+ content: bridgeImportDataTableRequestSchema.shape.content.describe(`Complete serialized table in the chosen format, up to ${String(BRIDGE_DATA_TABLE_MAX_IMPORT_CHARS)} characters — the whole payload travels in one bridge frame, so a table larger than that cannot be imported this way. This REPLACES every row: a row absent from the content is deleted.`),
6125
+ dryRun: bridgeImportDataTableRequestSchema.shape.dryRun.describe("When true, parse the content and report the row count and problems without replacing anything (default false)."),
6126
+ format: bridgeImportDataTableRequestSchema.shape.format.describe("Serialization the content is in: 'json' (default) or 'csv'."),
6127
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the DataTable.")
6128
+ };
6129
+ const createDataTableInputSchema = {
6130
+ assetPath: bridgeCreateDataTableRequestSchema.shape.assetPath.describe("Object path for the new DataTable, e.g. /Game/Data/DT_Weapons. Fails if an asset already exists there."),
6131
+ dryRun: bridgeCreateDataTableRequestSchema.shape.dryRun.describe("When true, resolve and validate the row struct and destination without creating anything (default false)."),
6132
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor should create the table."),
6133
+ rowStructPath: bridgeCreateDataTableRequestSchema.shape.rowStructPath.describe("Struct backing every row. Native structs use /Script/<Module>.<Struct>; a Blueprint struct uses its object path. Must derive FTableRowBase. Cannot be changed after creation.")
6134
+ };
6135
+ const renameDataTableInputSchema = {
6136
+ assetPath: bridgeRenameDataTableRequestSchema.shape.assetPath.describe("Object path of the DataTable to rename or move (e.g. /Game/Data/DT_Weapons.DT_Weapons)."),
6137
+ destinationPath: bridgeRenameDataTableRequestSchema.shape.destinationPath.describe("Package path to move the asset into, e.g. /Game/Data/Archive. Omit to keep it where it is."),
6138
+ dryRun: bridgeRenameDataTableRequestSchema.shape.dryRun.describe("When true, validate the destination without moving anything (default false)."),
6139
+ newName: bridgeRenameDataTableRequestSchema.shape.newName.describe("New asset name without any path, e.g. DT_WeaponsLegacy. Omit to keep the current name."),
6140
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the DataTable.")
6141
+ };
6142
+ const deleteDataTableInputSchema = {
6143
+ assetPath: bridgeDeleteDataTableRequestSchema.shape.assetPath.describe("Object path of the DataTable to delete (e.g. /Game/Data/DT_Weapons.DT_Weapons)."),
6144
+ dryRun: bridgeDeleteDataTableRequestSchema.shape.dryRun.describe("When true, report what would be deleted and what still references it, without deleting (default false)."),
6145
+ force: bridgeDeleteDataTableRequestSchema.shape.force.describe("Delete even when other assets reference the table, breaking those references (default false). Without it a referenced table is refused and its referencers are reported."),
6146
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the DataTable.")
6147
+ };
6148
+ const renameDataTableRowInputSchema = {
6149
+ assetPath: bridgeRenameDataTableRowRequestSchema.shape.assetPath.describe("Object path of the DataTable holding the row (e.g. /Game/Data/DT_Weapons.DT_Weapons)."),
6150
+ dryRun: bridgeRenameDataTableRowRequestSchema.shape.dryRun.describe("When true, validate both names without renaming anything (default false)."),
6151
+ newRowName: bridgeRenameDataTableRowRequestSchema.shape.newRowName.describe("Name to rename the row to. Fails if a row already uses it."),
6152
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the DataTable."),
6153
+ rowName: bridgeRenameDataTableRowRequestSchema.shape.rowName.describe("Current name of the row to rename.")
6154
+ };
6155
+ const listActorsInputSchema = {
6156
+ classNames: bridgeListActorsRequestSchema.shape.classNames.describe("Actor class names to match, either short (StaticMeshActor, PointLight) or full class paths (/Script/Engine.StaticMeshActor, /Game/BP/BP_Foo.BP_Foo_C). Subclasses match too. Empty means every class."),
6157
+ cursor: bridgeListActorsRequestSchema.shape.cursor.describe("Offset into the stable-ordered matched list (default 0). Pass the previous response nextCursor to fetch the next page."),
6158
+ levelName: bridgeListActorsRequestSchema.shape.levelName.describe("Restrict the walk to a single level, by package name (/Game/Maps/MyLevel) or short name (MyLevel). Omitted means every level loaded in the editor world."),
6159
+ maxResults: bridgeListActorsRequestSchema.shape.maxResults.default(50).describe("Maximum number of actors to return per page (1-100, default 50). totalCount still reports the unbounded match count."),
6160
+ nameFilter: bridgeListActorsRequestSchema.shape.nameFilter.describe("Optional case-insensitive substring matched against each actor label and path."),
6161
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor should list its actors."),
6162
+ tag: bridgeListActorsRequestSchema.shape.tag.describe("Optional exact-match actor tag (AActor::Tags) to filter by.")
6163
+ };
6164
+ const getActorDetailsInputSchema = {
6165
+ actorPath: bridgeGetActorDetailsRequestSchema.shape.actorPath.describe("Full path name of the actor, as returned by list_actors or get_editor_state (e.g. /Game/Maps/Test.Test:PersistentLevel.StaticMeshActor_3)."),
6166
+ componentCursor: bridgeGetActorDetailsRequestSchema.shape.componentCursor.describe("Offset into the component list (default 0). Pass the previous response nextComponentCursor to fetch the next page."),
6167
+ includeInherited: bridgeGetActorDetailsRequestSchema.shape.includeInherited.describe("Whether to include properties inherited from parent classes (default false). Inherited properties are the bulk of any AActor subclass."),
6168
+ maxResults: bridgeGetActorDetailsRequestSchema.shape.maxResults.default(25).describe("Maximum entries returned per page for each list (1-200, default 25)."),
6169
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the actor."),
6170
+ propertyCursor: bridgeGetActorDetailsRequestSchema.shape.propertyCursor.describe("Offset into the property list (default 0). Pass the previous response nextPropertyCursor to fetch the next page.")
6171
+ };
6172
+ const getCurrentLevelInputSchema = { projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor should report its loaded level.") };
6173
+ const spawnActorInputSchema = {
6174
+ dryRun: bridgeSpawnActorRequestSchema.shape.dryRun.describe("When true, validate every entry and report what would be spawned without opening a transaction or touching the world (default false)."),
6175
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor should spawn the actors."),
6176
+ spawns: bridgeSpawnActorRequestSchema.shape.spawns.describe("Actors to spawn (1-64). Each entry needs a classPath — a native class path (/Script/Engine.StaticMeshActor) or a Blueprint generated class (/Game/BP/BP_Foo.BP_Foo_C) — plus an optional transform, label, outliner folderPath, and tags. The whole batch spawns inside one transaction, so Ctrl+Z removes all of it as a single step.")
6177
+ };
6178
+ const destroyActorInputSchema = {
6179
+ actorPaths: bridgeDestroyActorRequestSchema.shape.actorPaths.describe("Full path names of the actors to destroy (1-64), as returned by list_actors. The whole batch is destroyed inside one transaction, so Ctrl+Z restores all of it as a single step."),
6180
+ dryRun: bridgeDestroyActorRequestSchema.shape.dryRun.describe("When true, check that every actorPath resolves and report what would be destroyed without opening a transaction or touching the world (default false)."),
6181
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the actors.")
6182
+ };
6183
+ const setActorTransformInputSchema = {
6184
+ dryRun: bridgeSetActorTransformRequestSchema.shape.dryRun.describe("When true, check that every actorPath resolves and report what would move without opening a transaction (default false)."),
6185
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the actors."),
6186
+ transforms: bridgeSetActorTransformRequestSchema.shape.transforms.describe("Transform edits to apply (1-64). Each entry needs an actorPath plus any of location, rotation, and scale — an omitted component keeps its current value, so you can move an actor without restating its rotation. The whole batch runs in one transaction.")
6187
+ };
6188
+ const setActorPropertyInputSchema = {
6189
+ dryRun: bridgeSetActorPropertyRequestSchema.shape.dryRun.describe("When true, resolve every property path and check the value coerces, without opening a transaction or writing anything (default false)."),
6190
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the actors."),
6191
+ properties: bridgeSetActorPropertyRequestSchema.shape.properties.describe("Property writes to apply (1-64). Each entry needs an actorPath, a propertyPath — 'bHidden' for an actor property or 'StaticMeshComponent.RelativeScale3D' for a component's — and a value in the same ExportText format get_actor_details and get_cdo_defaults emit. Non-editable (EditConst) properties are rejected with an error rather than silently ignored.")
6192
+ };
6193
+ const selectActorsInputSchema = {
6194
+ actorPaths: bridgeSelectActorsRequestSchema.shape.actorPaths.describe("Actor paths to select (up to 64). An empty list clears the selection. These are the same actorPath values list_actors and get_editor_state report."),
6195
+ addToSelection: bridgeSelectActorsRequestSchema.shape.addToSelection.describe("When true, add the listed actors to the current selection instead of replacing it (default false)."),
6196
+ dryRun: bridgeSelectActorsRequestSchema.shape.dryRun.describe("When true, check that every actorPath resolves and report what would be selected without changing the selection (default false)."),
6197
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor holds the actors.")
6198
+ };
6199
+ const undoInputSchema = { projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor should undo its last transaction.") };
6200
+ const redoInputSchema = { projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor should redo its last undone transaction.") };
6201
+ const openLevelInputSchema = {
6202
+ dryRun: bridgeOpenLevelRequestSchema.shape.dryRun.describe("When true, check that the level package exists and report what would be opened without loading it (default false)."),
6203
+ levelPath: bridgeOpenLevelRequestSchema.shape.levelPath.describe("Package name of the level to open (e.g. /Game/Maps/MyLevel), as get_current_level and find_assets report it."),
6204
+ projectId: projectIdSchema.describe("Canonical Unreal ProjectID whose registered editor should open the level."),
6205
+ saveDirtyPackages: bridgeOpenLevelRequestSchema.shape.saveDirtyPackages.describe("When true, save dirty packages before tearing down the current world; otherwise unsaved changes are discarded (default false).")
6206
+ };
6207
+ const getOpenLevelStatusInputSchema = {
6208
+ openLevelJobId: bridgeGetOpenLevelStatusRequestSchema.shape.openLevelJobId.describe("openLevelJobId returned by open_level identifying the load job to poll."),
6209
+ projectId: projectIdSchema
6210
+ };
5198
6211
  const getAssetDependenciesInputSchema = {
5199
6212
  assetPath: bridgeGetAssetDependenciesRequestSchema.shape.assetPath.describe("Package name or object path of the asset to inspect (e.g. /Game/BP/BP_Player or /Game/BP/BP_Player.BP_Player)."),
5200
6213
  categories: bridgeGetAssetDependenciesRequestSchema.shape.categories.describe("Dependency categories to include: 'package' (default), 'searchable_name', 'manage'."),
@@ -5585,7 +6598,7 @@ function registerMcpTools(server, dependencies) {
5585
6598
  }, dependencies));
5586
6599
  });
5587
6600
  server.registerTool("get_editor_state", {
5588
- description: "Report the registered Unreal Editor's current state for a project: the open map name and package path, the labels of the selected actors, the active editor modes, and whether Play-in-Editor is running. Selected actors are capped per response; selectedActorCount reports the full selection size. activeModes is empty until the level editor has finished initializing, so an empty list right after the editor starts means 'not ready yet', not 'no mode'.",
6601
+ description: "Report the registered Unreal Editor's current state for a project: the open map name and package path, the selected actors as { actorPath, label } objects whose actorPath the level tools accept directly, the active editor modes, and whether Play-in-Editor is running. Selected actors are capped per response; selectedActorCount reports the full selection size. activeModes is empty until the level editor has finished initializing, so an empty list right after the editor starts means 'not ready yet', not 'no mode'.",
5589
6602
  inputSchema: getEditorStateInputSchema,
5590
6603
  title: "Get Editor State"
5591
6604
  }, async ({ projectId }) => {
@@ -5712,6 +6725,134 @@ function registerMcpTools(server, dependencies) {
5712
6725
  projectId
5713
6726
  }, dependencies));
5714
6727
  });
6728
+ server.registerTool("list_actors", {
6729
+ description: "Enumerate actors in the editor's currently loaded level(s), optionally filtered by class, name substring, tag, or level. Returns each actor's canonical actorPath (the identifier every other level tool takes), display label, class, level, and World Outliner folder. Results are paged: pass the previous response nextCursor to fetch the next page, and totalCount reports the full match count even when a page truncates. Use this to find an actor before calling get_actor_details.",
6730
+ inputSchema: listActorsInputSchema,
6731
+ title: "List Actors"
6732
+ }, async ({ classNames, cursor, levelName, maxResults, nameFilter, projectId, tag }) => {
6733
+ return toToolSuccess(await listActors({
6734
+ classNames,
6735
+ cursor,
6736
+ levelName,
6737
+ maxResults,
6738
+ nameFilter,
6739
+ projectId,
6740
+ tag
6741
+ }, dependencies));
6742
+ });
6743
+ server.registerTool("get_actor_details", {
6744
+ description: "Inspect one actor in the loaded level by its actorPath: world transform, attached component hierarchy (each component's name, class, attachment parent, and relative transform), and reflected UPROPERTY values. Property values use the same ExportText format get_cdo_defaults emits, so a value read here can be written back verbatim. Components and properties page independently — pass nextComponentCursor / nextPropertyCursor to continue each list. Inherited properties are excluded unless includeInherited is true.",
6745
+ inputSchema: getActorDetailsInputSchema,
6746
+ title: "Get Actor Details"
6747
+ }, async ({ actorPath, componentCursor, includeInherited, maxResults, projectId, propertyCursor }) => {
6748
+ return toToolSuccess(await getActorDetails({
6749
+ actorPath,
6750
+ componentCursor,
6751
+ includeInherited,
6752
+ maxResults,
6753
+ projectId,
6754
+ propertyCursor
6755
+ }, dependencies));
6756
+ });
6757
+ server.registerTool("get_current_level", {
6758
+ description: "Report the level the editor currently has open — its short name and package path — plus every streaming level registered on that world with its loaded and visible state. worldPartition=true means the map streams cells through World Partition rather than through the listed ULevelStreaming entries, so the streamingLevels list will usually be empty for such a map. Returns no level fields when the editor has no world loaded.",
6759
+ inputSchema: getCurrentLevelInputSchema,
6760
+ title: "Get Current Level"
6761
+ }, async ({ projectId }) => {
6762
+ return toToolSuccess(await getCurrentLevel({ projectId }, dependencies));
6763
+ });
6764
+ server.registerTool("spawn_actor", {
6765
+ description: "Spawn one or more actors into the editor's loaded level. Each entry takes a classPath (native or Blueprint generated class) and an optional transform, label, outliner folder, and tags. The whole batch runs inside a single editor transaction, so a human pressing Ctrl+Z removes every actor the call spawned as one step, and save_dirty_packages will report the level afterwards. Returns a per-entry result carrying the new actorPath or the reason that entry failed; a failed entry does not abort the rest of the batch. Pass dryRun: true to validate the batch and see what would be spawned without changing anything.",
6766
+ inputSchema: spawnActorInputSchema,
6767
+ title: "Spawn Actor"
6768
+ }, async ({ dryRun, projectId, spawns }) => {
6769
+ return toToolSuccess(await spawnActor({
6770
+ dryRun,
6771
+ projectId,
6772
+ spawns
6773
+ }, dependencies));
6774
+ });
6775
+ server.registerTool("destroy_actor", {
6776
+ description: "Destroy one or more actors in the loaded level, addressed by the actorPath list_actors returns. The whole batch runs inside a single editor transaction, so Ctrl+Z restores every actor the call destroyed as one step. Returns a per-entry result; an actorPath that no longer resolves fails only its own entry. Pass dryRun: true to check the paths and see what would be destroyed without changing anything.",
6777
+ inputSchema: destroyActorInputSchema,
6778
+ title: "Destroy Actor"
6779
+ }, async ({ actorPaths, dryRun, projectId }) => {
6780
+ return toToolSuccess(await destroyActor({
6781
+ actorPaths,
6782
+ dryRun,
6783
+ projectId
6784
+ }, dependencies));
6785
+ });
6786
+ server.registerTool("set_actor_transform", {
6787
+ description: "Move, rotate, and/or scale one or more actors in the loaded level. Each entry addresses an actor by actorPath and supplies any of location, rotation, and scale — an omitted component keeps its current value. The whole batch runs inside a single editor transaction, so Ctrl+Z restores every original transform as one step. Returns a per-entry result; pass dryRun: true to check the paths without moving anything.",
6788
+ inputSchema: setActorTransformInputSchema,
6789
+ title: "Set Actor Transform"
6790
+ }, async ({ dryRun, projectId, transforms }) => {
6791
+ return toToolSuccess(await setActorTransform({
6792
+ dryRun,
6793
+ projectId,
6794
+ transforms
6795
+ }, dependencies));
6796
+ });
6797
+ server.registerTool("set_actor_property", {
6798
+ description: "Write reflected UPROPERTY values on actors or their components in the loaded level. Each entry takes an actorPath, a propertyPath ('bHidden' on the actor, 'StaticMeshComponent.RelativeScale3D' on a component), and a value in the same ExportText format get_actor_details and get_cdo_defaults emit — so you can read a value, edit it, and write it back without translating. Properties marked EditConst or not exposed for editing are rejected with an explicit error rather than silently ignored. The whole batch runs in one transaction; pass dryRun: true to resolve paths and check coercion without writing.",
6799
+ inputSchema: setActorPropertyInputSchema,
6800
+ title: "Set Actor Property"
6801
+ }, async ({ dryRun, projectId, properties }) => {
6802
+ return toToolSuccess(await setActorProperty({
6803
+ dryRun,
6804
+ projectId,
6805
+ properties
6806
+ }, dependencies));
6807
+ });
6808
+ server.registerTool("select_actors", {
6809
+ description: "Set the editor's actor selection — the write-side counterpart to get_editor_state, using the same actorPath identifiers list_actors returns. An empty actorPaths list clears the selection; addToSelection adds to it instead of replacing it. Runs inside a transaction, so Ctrl+Z restores the previous selection. Returns the resulting selectedActorCount plus a per-entry result for any path that no longer resolves.",
6810
+ inputSchema: selectActorsInputSchema,
6811
+ title: "Select Actors"
6812
+ }, async ({ actorPaths, addToSelection, dryRun, projectId }) => {
6813
+ return toToolSuccess(await selectActors({
6814
+ actorPaths,
6815
+ addToSelection,
6816
+ dryRun,
6817
+ projectId
6818
+ }, dependencies));
6819
+ });
6820
+ server.registerTool("undo", {
6821
+ description: "Undo the editor's most recent transaction — the same action as pressing Ctrl+Z in the editor — and report the title of the transaction that was undone. Use this to roll back your own level edits without a human in the loop. Returns state 'nothing_to_undo' when the transaction buffer is empty. Note this undoes whatever is at the head of the buffer, which may be a human's edit rather than yours, so check the returned transactionTitle.",
6822
+ inputSchema: undoInputSchema,
6823
+ title: "Undo"
6824
+ }, async ({ projectId }) => {
6825
+ return toToolSuccess(await undo({ projectId }, dependencies));
6826
+ });
6827
+ server.registerTool("redo", {
6828
+ description: "Redo the editor's most recently undone transaction — the same action as pressing Ctrl+Y in the editor — and report the title of the transaction that was redone. Returns state 'nothing_to_redo' when there is nothing to reapply.",
6829
+ inputSchema: redoInputSchema,
6830
+ title: "Redo"
6831
+ }, async ({ projectId }) => {
6832
+ return toToolSuccess(await redo({ projectId }, dependencies));
6833
+ });
6834
+ server.registerTool("open_level", {
6835
+ description: "Open a level in the editor by package name. Loading a map tears down and rebuilds the world, which takes far longer than a bridge request can wait, so this only accepts the job: it returns state 'opening' with an openLevelJobId to poll with get_open_level_status. Unsaved changes in the current world are discarded unless saveDirtyPackages is true. This is NOT undoable — loading a map clears the editor's transaction buffer, so undo cannot bring the previous level back.",
6836
+ inputSchema: openLevelInputSchema,
6837
+ title: "Open Level"
6838
+ }, async ({ dryRun, levelPath, projectId, saveDirtyPackages }) => {
6839
+ return toToolSuccess(await openLevel({
6840
+ dryRun,
6841
+ levelPath,
6842
+ projectId,
6843
+ saveDirtyPackages
6844
+ }, dependencies));
6845
+ });
6846
+ server.registerTool("get_open_level_status", {
6847
+ description: "Poll a level load started by open_level for a projectId; returns state (opening, succeeded, failed, unknown_job), the loaded levelPath, and timing once finished. Poll until the state leaves 'opening' before issuing further level tools — actor paths from the previous world do not survive the load.",
6848
+ inputSchema: getOpenLevelStatusInputSchema,
6849
+ title: "Get Open Level Status"
6850
+ }, async ({ openLevelJobId, projectId }) => {
6851
+ return toToolSuccess(await getOpenLevelStatus({
6852
+ openLevelJobId,
6853
+ projectId
6854
+ }, dependencies));
6855
+ });
5715
6856
  server.registerTool("find_assets", {
5716
6857
  description: "Query a project's Unreal Asset Registry for assets by class and/or content path, without loading them; returns each match's name, class, package name, package path, and object path. Requires at least one of classNames or packagePaths — an unfiltered query would stall the editor enumerating every asset. Results are paged: pass the previous response nextCursor to fetch the next page (totalCount reports the full match count). scanning=true means the registry is still indexing, so an empty result does not prove the asset is absent.",
5717
6858
  inputSchema: findAssetsInputSchema,
@@ -5728,6 +6869,110 @@ function registerMcpTools(server, dependencies) {
5728
6869
  recursivePaths
5729
6870
  }, dependencies));
5730
6871
  });
6872
+ server.registerTool("read_data_table", {
6873
+ description: "Read a DataTable asset's contents: the row struct it is typed on, its ordered column list (name plus the same type rendering get_class_reflection emits), and its rows as column-name-to-value maps. Values are ExportText, the format write_data_table_row accepts back, so a value read here round-trips. Rows are paged by name order: pass the previous response nextCursor to fetch the next page (totalRowCount reports the full count). A DataTable is a binary .uasset with no Asset Registry tags describing its rows, so there is no way to read one off disk instead — this tool loads it.",
6874
+ inputSchema: readDataTableInputSchema,
6875
+ title: "Read Data Table"
6876
+ }, async ({ assetPath, cursor, loadIfNeeded, maxRows, projectId, rowNameFilter }) => {
6877
+ return toToolSuccess(await readDataTable({
6878
+ assetPath,
6879
+ cursor,
6880
+ loadIfNeeded,
6881
+ maxRows,
6882
+ projectId,
6883
+ rowNameFilter
6884
+ }, dependencies));
6885
+ });
6886
+ server.registerTool("write_data_table_row", {
6887
+ description: "Insert, update, or delete a single DataTable row. Every column name and value is validated against the row struct before anything is written — an unknown column or a value that will not parse rejects the whole write with an error naming the field, so a row is never partially applied and there is no silent coercion. The write runs inside one transaction, so a human at the editor can Ctrl+Z it, and it marks the package dirty without saving: call save_dirty_packages to persist. Deleting a row that does not exist reports rowExisted=false rather than failing. Use dryRun to validate first. For a whole-table replace use import_data_table instead.",
6888
+ inputSchema: writeDataTableRowInputSchema,
6889
+ title: "Write Data Table Row"
6890
+ }, async ({ assetPath, dryRun, operation, projectId, rowName, values }) => {
6891
+ return toToolSuccess(await writeDataTableRow({
6892
+ assetPath,
6893
+ dryRun,
6894
+ operation,
6895
+ projectId,
6896
+ rowName,
6897
+ values
6898
+ }, dependencies));
6899
+ });
6900
+ server.registerTool("export_data_table", {
6901
+ description: "Serialize a whole DataTable through the engine's own JSON or CSV exporter. Returned in chunks by character offset because the engine produces one string rather than something row-addressable: concatenate the chunks in cursor order to reassemble, and note a single chunk is not valid JSON or CSV on its own. Use read_data_table when you want structured, per-row access; use this when you want the table in the same text form the editor's own export produces.",
6902
+ inputSchema: exportDataTableInputSchema,
6903
+ title: "Export Data Table"
6904
+ }, async ({ assetPath, cursor, format, loadIfNeeded, projectId }) => {
6905
+ return toToolSuccess(await exportDataTable({
6906
+ assetPath,
6907
+ cursor,
6908
+ format,
6909
+ loadIfNeeded,
6910
+ projectId
6911
+ }, dependencies));
6912
+ });
6913
+ server.registerTool("import_data_table", {
6914
+ description: "REPLACE every row of a DataTable from a JSON or CSV payload, using the engine's own importer. This is destructive: any row not present in the content is deleted, so it is the wrong tool for changing one value — use write_data_table_row for that. The whole payload travels in one bridge frame, so a table beyond the content character bound cannot be imported this way. Runs inside one transaction (Ctrl+Z reverses it) and marks the package dirty without saving. Rows the importer rejects come back in problems while the rest still apply, so check problemCount even on success; dryRun reports the row count and problems without replacing anything.",
6915
+ inputSchema: importDataTableInputSchema,
6916
+ title: "Import Data Table"
6917
+ }, async ({ assetPath, content, dryRun, format, projectId }) => {
6918
+ return toToolSuccess(await importDataTable({
6919
+ assetPath,
6920
+ content,
6921
+ dryRun,
6922
+ format,
6923
+ projectId
6924
+ }, dependencies));
6925
+ });
6926
+ server.registerTool("create_data_table", {
6927
+ description: "Create a new empty DataTable asset backed by a row struct. The struct is fixed at creation — UDataTable can have its RowStruct swapped later, but that reinterprets existing rows through the new layout, so the bridge does not expose it; create a new table instead. The struct must derive FTableRowBase, and creation fails if an asset already exists at the path. The new table is marked dirty but not written to disk: call save_dirty_packages to persist it, or it disappears when the editor closes. Use read_data_table to confirm the column set the struct produced.",
6928
+ inputSchema: createDataTableInputSchema,
6929
+ title: "Create Data Table"
6930
+ }, async ({ assetPath, dryRun, projectId, rowStructPath }) => {
6931
+ return toToolSuccess(await createDataTable({
6932
+ assetPath,
6933
+ dryRun,
6934
+ projectId,
6935
+ rowStructPath
6936
+ }, dependencies));
6937
+ });
6938
+ server.registerTool("rename_data_table", {
6939
+ description: "Rename a DataTable, move it to another package path, or both. Goes through the editor's asset tools, so references from other assets are fixed up and a redirector is left at the old path to keep hard references resolving. Renaming is not a transaction the editor can Ctrl+Z — it rewrites packages on disk. Use dryRun to check the destination is free first.",
6940
+ inputSchema: renameDataTableInputSchema,
6941
+ title: "Rename Data Table"
6942
+ }, async ({ assetPath, destinationPath, dryRun, newName, projectId }) => {
6943
+ return toToolSuccess(await renameDataTable({
6944
+ assetPath,
6945
+ destinationPath,
6946
+ dryRun,
6947
+ newName,
6948
+ projectId
6949
+ }, dependencies));
6950
+ });
6951
+ server.registerTool("delete_data_table", {
6952
+ description: "Delete a DataTable asset from the project. This is the one DataTable tool that cannot be undone — asset deletion is not a transaction, so there is no Ctrl+Z and no dirty-package step to reconsider at. A table other assets still reference is refused, and those referencers are reported; force deletes anyway and breaks them. Always dryRun first on a table you did not create: it reports the referencers without touching anything.",
6953
+ inputSchema: deleteDataTableInputSchema,
6954
+ title: "Delete Data Table"
6955
+ }, async ({ assetPath, dryRun, force, projectId }) => {
6956
+ return toToolSuccess(await deleteDataTable({
6957
+ assetPath,
6958
+ dryRun,
6959
+ force,
6960
+ projectId
6961
+ }, dependencies));
6962
+ });
6963
+ server.registerTool("rename_data_table_row", {
6964
+ description: "Rename a single row, keeping its position in the table and its values intact. Not the same as an upsert under the new name followed by a delete of the old one: that pair costs two transactions and moves the row to the end. Fails if the row does not exist or the new name is already taken. Runs inside one transaction (Ctrl+Z reverses it) and marks the package dirty without saving. Note that row names are how other assets address rows, so a rename breaks any FDataTableRowHandle pointing at the old name — nothing fixes those up.",
6965
+ inputSchema: renameDataTableRowInputSchema,
6966
+ title: "Rename Data Table Row"
6967
+ }, async ({ assetPath, dryRun, newRowName, projectId, rowName }) => {
6968
+ return toToolSuccess(await renameDataTableRow({
6969
+ assetPath,
6970
+ dryRun,
6971
+ newRowName,
6972
+ projectId,
6973
+ rowName
6974
+ }, dependencies));
6975
+ });
5731
6976
  server.registerTool("get_asset_dependencies", {
5732
6977
  description: "Report an asset's package-level dependencies (what it needs) and referencers (what needs it) from the Unreal Asset Registry — the Reference Viewer data — so you can judge the blast radius before changing it. Depth is 1: transitive links are not walked. Each list pages independently via nextDependencyCursor / nextReferencerCursor.",
5733
6978
  inputSchema: getAssetDependenciesInputSchema,
@@ -5821,6 +7066,285 @@ function registerMcpTools(server, dependencies) {
5821
7066
  }, dependencies));
5822
7067
  });
5823
7068
  }
7069
+ async function listActors(input, dependencies) {
7070
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7071
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7072
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7073
+ const response = await sendBridgeListActorsRequest(createBridgeListActorsRequest({
7074
+ classNames: input.classNames,
7075
+ cursor: input.cursor,
7076
+ levelName: input.levelName,
7077
+ maxResults: input.maxResults,
7078
+ nameFilter: input.nameFilter,
7079
+ tag: input.tag
7080
+ }), {
7081
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7082
+ host: "127.0.0.1",
7083
+ port: entry.port,
7084
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7085
+ });
7086
+ if (!response.ok) throw new Error(`Bridge list_actors failed (${response.error.code}): ${response.error.message}`);
7087
+ return {
7088
+ actors: response.actors,
7089
+ message: response.message,
7090
+ nextCursor: response.nextCursor,
7091
+ projectId: entry.projectId,
7092
+ totalCount: response.totalCount,
7093
+ truncated: response.truncated
7094
+ };
7095
+ }
7096
+ async function getActorDetails(input, dependencies) {
7097
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7098
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7099
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7100
+ const response = await sendBridgeGetActorDetailsRequest(createBridgeGetActorDetailsRequest(input.actorPath, {
7101
+ componentCursor: input.componentCursor,
7102
+ includeInherited: input.includeInherited,
7103
+ maxResults: input.maxResults,
7104
+ propertyCursor: input.propertyCursor
7105
+ }), {
7106
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7107
+ host: "127.0.0.1",
7108
+ port: entry.port,
7109
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7110
+ });
7111
+ if (!response.ok) throw new Error(`Bridge get_actor_details failed (${response.error.code}): ${response.error.message}`);
7112
+ return {
7113
+ actorPath: response.actorPath,
7114
+ className: response.className,
7115
+ componentCount: response.componentCount,
7116
+ components: response.components,
7117
+ componentTruncated: response.componentTruncated,
7118
+ folderPath: response.folderPath,
7119
+ label: response.label,
7120
+ levelName: response.levelName,
7121
+ nextComponentCursor: response.nextComponentCursor,
7122
+ nextPropertyCursor: response.nextPropertyCursor,
7123
+ projectId: entry.projectId,
7124
+ properties: response.properties,
7125
+ propertyCount: response.propertyCount,
7126
+ propertyTruncated: response.propertyTruncated,
7127
+ transform: response.transform
7128
+ };
7129
+ }
7130
+ async function getCurrentLevel(input, dependencies) {
7131
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7132
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7133
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7134
+ const response = await sendBridgeGetCurrentLevelRequest(createBridgeGetCurrentLevelRequest(), {
7135
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7136
+ host: "127.0.0.1",
7137
+ port: entry.port,
7138
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7139
+ });
7140
+ if (!response.ok) throw new Error(`Bridge get_current_level failed (${response.error.code}): ${response.error.message}`);
7141
+ return {
7142
+ levelName: response.levelName,
7143
+ levelPath: response.levelPath,
7144
+ message: response.message,
7145
+ projectId: entry.projectId,
7146
+ streamingLevelCount: response.streamingLevelCount,
7147
+ streamingLevels: response.streamingLevels,
7148
+ truncated: response.truncated,
7149
+ worldPartition: response.worldPartition
7150
+ };
7151
+ }
7152
+ async function spawnActor(input, dependencies) {
7153
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7154
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7155
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7156
+ const response = await sendBridgeSpawnActorRequest(createBridgeSpawnActorRequest(input.spawns, { dryRun: input.dryRun }), {
7157
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7158
+ host: "127.0.0.1",
7159
+ port: entry.port,
7160
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7161
+ });
7162
+ if (!response.ok) throw new Error(`Bridge spawn_actor failed (${response.error.code}): ${response.error.message}`);
7163
+ return {
7164
+ dryRun: response.dryRun,
7165
+ failureCount: response.failureCount,
7166
+ message: response.message,
7167
+ projectId: entry.projectId,
7168
+ results: response.results,
7169
+ state: response.state,
7170
+ successCount: response.successCount,
7171
+ transactionTitle: response.transactionTitle
7172
+ };
7173
+ }
7174
+ async function destroyActor(input, dependencies) {
7175
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7176
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7177
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7178
+ const response = await sendBridgeDestroyActorRequest(createBridgeDestroyActorRequest(input.actorPaths, { dryRun: input.dryRun }), {
7179
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7180
+ host: "127.0.0.1",
7181
+ port: entry.port,
7182
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7183
+ });
7184
+ if (!response.ok) throw new Error(`Bridge destroy_actor failed (${response.error.code}): ${response.error.message}`);
7185
+ return {
7186
+ dryRun: response.dryRun,
7187
+ failureCount: response.failureCount,
7188
+ message: response.message,
7189
+ projectId: entry.projectId,
7190
+ results: response.results,
7191
+ state: response.state,
7192
+ successCount: response.successCount,
7193
+ transactionTitle: response.transactionTitle
7194
+ };
7195
+ }
7196
+ async function setActorTransform(input, dependencies) {
7197
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7198
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7199
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7200
+ const response = await sendBridgeSetActorTransformRequest(createBridgeSetActorTransformRequest(input.transforms, { dryRun: input.dryRun }), {
7201
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7202
+ host: "127.0.0.1",
7203
+ port: entry.port,
7204
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7205
+ });
7206
+ if (!response.ok) throw new Error(`Bridge set_actor_transform failed (${response.error.code}): ${response.error.message}`);
7207
+ return {
7208
+ dryRun: response.dryRun,
7209
+ failureCount: response.failureCount,
7210
+ message: response.message,
7211
+ projectId: entry.projectId,
7212
+ results: response.results,
7213
+ state: response.state,
7214
+ successCount: response.successCount,
7215
+ transactionTitle: response.transactionTitle
7216
+ };
7217
+ }
7218
+ async function setActorProperty(input, dependencies) {
7219
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7220
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7221
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7222
+ const response = await sendBridgeSetActorPropertyRequest(createBridgeSetActorPropertyRequest(input.properties, { dryRun: input.dryRun }), {
7223
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7224
+ host: "127.0.0.1",
7225
+ port: entry.port,
7226
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7227
+ });
7228
+ if (!response.ok) throw new Error(`Bridge set_actor_property failed (${response.error.code}): ${response.error.message}`);
7229
+ return {
7230
+ dryRun: response.dryRun,
7231
+ failureCount: response.failureCount,
7232
+ message: response.message,
7233
+ projectId: entry.projectId,
7234
+ results: response.results,
7235
+ state: response.state,
7236
+ successCount: response.successCount,
7237
+ transactionTitle: response.transactionTitle
7238
+ };
7239
+ }
7240
+ async function selectActors(input, dependencies) {
7241
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7242
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7243
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7244
+ const response = await sendBridgeSelectActorsRequest(createBridgeSelectActorsRequest(input.actorPaths, {
7245
+ addToSelection: input.addToSelection,
7246
+ dryRun: input.dryRun
7247
+ }), {
7248
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7249
+ host: "127.0.0.1",
7250
+ port: entry.port,
7251
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7252
+ });
7253
+ if (!response.ok) throw new Error(`Bridge select_actors failed (${response.error.code}): ${response.error.message}`);
7254
+ return {
7255
+ dryRun: response.dryRun,
7256
+ failureCount: response.failureCount,
7257
+ message: response.message,
7258
+ projectId: entry.projectId,
7259
+ results: response.results,
7260
+ selectedActorCount: response.selectedActorCount,
7261
+ state: response.state,
7262
+ successCount: response.successCount,
7263
+ transactionTitle: response.transactionTitle
7264
+ };
7265
+ }
7266
+ async function undo(input, dependencies) {
7267
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7268
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7269
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7270
+ const response = await sendBridgeUndoRequest(createBridgeUndoRequest(), {
7271
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7272
+ host: "127.0.0.1",
7273
+ port: entry.port,
7274
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7275
+ });
7276
+ if (!response.ok) throw new Error(`Bridge undo failed (${response.error.code}): ${response.error.message}`);
7277
+ return {
7278
+ message: response.message,
7279
+ projectId: entry.projectId,
7280
+ state: response.state,
7281
+ transactionTitle: response.transactionTitle
7282
+ };
7283
+ }
7284
+ async function redo(input, dependencies) {
7285
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7286
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7287
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7288
+ const response = await sendBridgeRedoRequest(createBridgeRedoRequest(), {
7289
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7290
+ host: "127.0.0.1",
7291
+ port: entry.port,
7292
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7293
+ });
7294
+ if (!response.ok) throw new Error(`Bridge redo failed (${response.error.code}): ${response.error.message}`);
7295
+ return {
7296
+ message: response.message,
7297
+ projectId: entry.projectId,
7298
+ state: response.state,
7299
+ transactionTitle: response.transactionTitle
7300
+ };
7301
+ }
7302
+ async function openLevel(input, dependencies) {
7303
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7304
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7305
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7306
+ const request = createBridgeOpenLevelRequest(input.levelPath, {
7307
+ dryRun: input.dryRun,
7308
+ saveDirtyPackages: input.saveDirtyPackages
7309
+ });
7310
+ const response = await sendBridgeOpenLevelRequest(request, {
7311
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7312
+ host: "127.0.0.1",
7313
+ port: entry.port,
7314
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7315
+ });
7316
+ if (!response.ok) throw new Error(`Bridge open_level failed (${response.error.code}): ${response.error.message}`);
7317
+ const result = {
7318
+ levelPath: response.levelPath ?? request.levelPath,
7319
+ projectId: entry.projectId,
7320
+ state: response.state
7321
+ };
7322
+ if (response.openLevelJobId !== void 0) result.openLevelJobId = response.openLevelJobId;
7323
+ if (response.message !== void 0) result.message = response.message;
7324
+ return result;
7325
+ }
7326
+ async function getOpenLevelStatus(input, dependencies) {
7327
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7328
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7329
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7330
+ const response = await sendBridgeGetOpenLevelStatusRequest(createBridgeGetOpenLevelStatusRequest(input.openLevelJobId), {
7331
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7332
+ host: "127.0.0.1",
7333
+ port: entry.port,
7334
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7335
+ });
7336
+ if (!response.ok) throw new Error(`Bridge get_open_level_status failed (${response.error.code}): ${response.error.message}`);
7337
+ const result = {
7338
+ openLevelJobId: response.openLevelJobId,
7339
+ projectId: normalizedProjectId,
7340
+ state: response.state
7341
+ };
7342
+ if (response.levelPath !== void 0) result.levelPath = response.levelPath;
7343
+ if (response.message !== void 0) result.message = response.message;
7344
+ if (response.finishedAt !== void 0) result.finishedAt = response.finishedAt;
7345
+ if (response.durationMs !== void 0) result.durationMs = response.durationMs;
7346
+ return result;
7347
+ }
5824
7348
  async function findAssets(input, dependencies) {
5825
7349
  const normalizedProjectId = projectIdSchema.parse(input.projectId);
5826
7350
  const entry = dependencies.registry.getProject(normalizedProjectId);
@@ -5849,6 +7373,213 @@ async function findAssets(input, dependencies) {
5849
7373
  truncated: response.truncated
5850
7374
  };
5851
7375
  }
7376
+ async function readDataTable(input, dependencies) {
7377
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7378
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7379
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7380
+ const response = await sendBridgeReadDataTableRequest(createBridgeReadDataTableRequest(input.assetPath, {
7381
+ cursor: input.cursor,
7382
+ loadIfNeeded: input.loadIfNeeded,
7383
+ maxRows: input.maxRows,
7384
+ rowNameFilter: input.rowNameFilter
7385
+ }), {
7386
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7387
+ host: "127.0.0.1",
7388
+ port: entry.port,
7389
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7390
+ });
7391
+ if (!response.ok) throw new Error(`Bridge read_data_table failed (${response.error.code}): ${response.error.message}`);
7392
+ return {
7393
+ assetPath: response.assetPath,
7394
+ columns: response.columns,
7395
+ columnsTruncated: response.columnsTruncated,
7396
+ nextCursor: response.nextCursor,
7397
+ projectId: entry.projectId,
7398
+ rows: response.rows,
7399
+ rowStructName: response.rowStructName,
7400
+ rowStructPath: response.rowStructPath,
7401
+ totalRowCount: response.totalRowCount,
7402
+ truncated: response.truncated,
7403
+ valueTruncated: response.valueTruncated
7404
+ };
7405
+ }
7406
+ async function writeDataTableRow(input, dependencies) {
7407
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7408
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7409
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7410
+ const response = await sendBridgeWriteDataTableRowRequest(createBridgeWriteDataTableRowRequest(input.assetPath, input.rowName, input.operation, {
7411
+ dryRun: input.dryRun,
7412
+ values: input.values
7413
+ }), {
7414
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7415
+ host: "127.0.0.1",
7416
+ port: entry.port,
7417
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7418
+ });
7419
+ if (!response.ok) throw new Error(`Bridge write_data_table_row failed (${response.error.code}): ${response.error.message}`);
7420
+ return {
7421
+ applied: response.applied,
7422
+ assetPath: response.assetPath,
7423
+ created: response.created,
7424
+ dryRun: response.dryRun,
7425
+ message: response.message,
7426
+ packageDirty: response.packageDirty,
7427
+ projectId: entry.projectId,
7428
+ rowExisted: response.rowExisted,
7429
+ rowName: response.rowName,
7430
+ state: response.state,
7431
+ transactionTitle: response.transactionTitle
7432
+ };
7433
+ }
7434
+ async function exportDataTable(input, dependencies) {
7435
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7436
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7437
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7438
+ const response = await sendBridgeExportDataTableRequest(createBridgeExportDataTableRequest(input.assetPath, {
7439
+ cursor: input.cursor,
7440
+ format: input.format,
7441
+ loadIfNeeded: input.loadIfNeeded
7442
+ }), {
7443
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7444
+ host: "127.0.0.1",
7445
+ port: entry.port,
7446
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7447
+ });
7448
+ if (!response.ok) throw new Error(`Bridge export_data_table failed (${response.error.code}): ${response.error.message}`);
7449
+ return {
7450
+ assetPath: response.assetPath,
7451
+ content: response.content,
7452
+ format: response.format,
7453
+ nextCursor: response.nextCursor,
7454
+ projectId: entry.projectId,
7455
+ rowCount: response.rowCount,
7456
+ totalChars: response.totalChars,
7457
+ truncated: response.truncated
7458
+ };
7459
+ }
7460
+ async function importDataTable(input, dependencies) {
7461
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7462
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7463
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7464
+ const response = await sendBridgeImportDataTableRequest(createBridgeImportDataTableRequest(input.assetPath, input.content, {
7465
+ dryRun: input.dryRun,
7466
+ format: input.format
7467
+ }), {
7468
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7469
+ host: "127.0.0.1",
7470
+ port: entry.port,
7471
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7472
+ });
7473
+ if (!response.ok) throw new Error(`Bridge import_data_table failed (${response.error.code}): ${response.error.message}`);
7474
+ return {
7475
+ assetPath: response.assetPath,
7476
+ dryRun: response.dryRun,
7477
+ message: response.message,
7478
+ packageDirty: response.packageDirty,
7479
+ problemCount: response.problemCount,
7480
+ problems: response.problems,
7481
+ projectId: entry.projectId,
7482
+ replacedRowCount: response.replacedRowCount,
7483
+ rowCount: response.rowCount,
7484
+ state: response.state,
7485
+ transactionTitle: response.transactionTitle
7486
+ };
7487
+ }
7488
+ async function createDataTable(input, dependencies) {
7489
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7490
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7491
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7492
+ const response = await sendBridgeCreateDataTableRequest(createBridgeCreateDataTableRequest(input.assetPath, input.rowStructPath, { dryRun: input.dryRun }), {
7493
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7494
+ host: "127.0.0.1",
7495
+ port: entry.port,
7496
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7497
+ });
7498
+ if (!response.ok) throw new Error(`Bridge create_data_table failed (${response.error.code}): ${response.error.message}`);
7499
+ return {
7500
+ assetPath: response.assetPath,
7501
+ created: response.created,
7502
+ dryRun: response.dryRun,
7503
+ packageDirty: response.packageDirty,
7504
+ projectId: entry.projectId,
7505
+ rowStructPath: response.rowStructPath,
7506
+ state: response.state
7507
+ };
7508
+ }
7509
+ async function renameDataTable(input, dependencies) {
7510
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7511
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7512
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7513
+ const response = await sendBridgeRenameDataTableRequest(createBridgeRenameDataTableRequest(input.assetPath, {
7514
+ destinationPath: input.destinationPath,
7515
+ dryRun: input.dryRun,
7516
+ newName: input.newName
7517
+ }), {
7518
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7519
+ host: "127.0.0.1",
7520
+ port: entry.port,
7521
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7522
+ });
7523
+ if (!response.ok) throw new Error(`Bridge rename_data_table failed (${response.error.code}): ${response.error.message}`);
7524
+ return {
7525
+ assetPath: response.assetPath,
7526
+ dryRun: response.dryRun,
7527
+ leftRedirector: response.leftRedirector,
7528
+ newAssetPath: response.newAssetPath,
7529
+ packageDirty: response.packageDirty,
7530
+ projectId: entry.projectId,
7531
+ renamed: response.renamed,
7532
+ state: response.state
7533
+ };
7534
+ }
7535
+ async function deleteDataTable(input, dependencies) {
7536
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7537
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7538
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7539
+ const response = await sendBridgeDeleteDataTableRequest(createBridgeDeleteDataTableRequest(input.assetPath, {
7540
+ dryRun: input.dryRun,
7541
+ force: input.force
7542
+ }), {
7543
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7544
+ host: "127.0.0.1",
7545
+ port: entry.port,
7546
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7547
+ });
7548
+ if (!response.ok) throw new Error(`Bridge delete_data_table failed (${response.error.code}): ${response.error.message}`);
7549
+ return {
7550
+ assetPath: response.assetPath,
7551
+ deleted: response.deleted,
7552
+ dryRun: response.dryRun,
7553
+ forced: response.forced,
7554
+ projectId: entry.projectId,
7555
+ referencerCount: response.referencerCount,
7556
+ referencers: response.referencers,
7557
+ state: response.state
7558
+ };
7559
+ }
7560
+ async function renameDataTableRow(input, dependencies) {
7561
+ const normalizedProjectId = projectIdSchema.parse(input.projectId);
7562
+ const entry = dependencies.registry.getProject(normalizedProjectId);
7563
+ if (!entry) throw new Error(`No registered Unreal engine was found for projectId '${normalizedProjectId}'.`);
7564
+ const response = await sendBridgeRenameDataTableRowRequest(createBridgeRenameDataTableRowRequest(input.assetPath, input.rowName, input.newRowName, { dryRun: input.dryRun }), {
7565
+ connectTimeoutMs: deriveBridgeConnectTimeoutMs$1(dependencies.pingTimeoutMs),
7566
+ host: "127.0.0.1",
7567
+ port: entry.port,
7568
+ readTimeoutMs: deriveEditorWorkTimeoutMs(dependencies.pingTimeoutMs)
7569
+ });
7570
+ if (!response.ok) throw new Error(`Bridge rename_data_table_row failed (${response.error.code}): ${response.error.message}`);
7571
+ return {
7572
+ assetPath: response.assetPath,
7573
+ dryRun: response.dryRun,
7574
+ newRowName: response.newRowName,
7575
+ packageDirty: response.packageDirty,
7576
+ projectId: entry.projectId,
7577
+ renamed: response.renamed,
7578
+ rowName: response.rowName,
7579
+ state: response.state,
7580
+ transactionTitle: response.transactionTitle
7581
+ };
7582
+ }
5852
7583
  async function getAssetDependencies(input, dependencies) {
5853
7584
  const normalizedProjectId = projectIdSchema.parse(input.projectId);
5854
7585
  const entry = dependencies.registry.getProject(normalizedProjectId);
@@ -7214,7 +8945,7 @@ function isMissingFileError(error) {
7214
8945
  //#endregion
7215
8946
  //#region src/server.ts
7216
8947
  const SERVER_NAME = "ue-mcp-server";
7217
- const SERVER_VERSION = "0.4.0";
8948
+ const SERVER_VERSION = "1.1.0";
7218
8949
  const logger = createModuleLogger("bootstrap");
7219
8950
  const enginePingLogger = createModuleLogger("engine-ping");
7220
8951
  const httpApiLogger = createModuleLogger("http-api");